TAKEDA, toshiyaさんの Common Source Code Project を DevTerm に移植しました。(以前に、M5Stack / Android にも移植してます。)
TAKEDA, toshiya’s HOME PAGE
http://takeda-toshiya.my.coocan.jp/
現状、動作速度が調整できてなくて、サウンドも、それっぽい感じのが鳴ってるだけの状態ですが、良い感じで動作してます。キーボード付き小型端末で1980年前後のホビーPCを動作させるのは楽しいです~。
→ その後、サウンドだいぶ良くなりました。動作速度も実機レベルになったと思いますー。(2020/03/10追記)
ソースコードはこちらです。オリジナルとの差分ソースのみ公開しています。
Common Source Code Project for DevTerm
https://github.com/shikarunochi/CommonSourceCodeProjectDevTerm
オリジナルの Common Source Code Project 2022-04-09 バージョンのソースに上書きしてください。
http://takeda-toshiya.my.coocan.jp/common/history/
2022-04-09
ビルドには SDL2と、GTK3が必要です。
sudo apt install libsdl2-dev sudo apt install libsdl2-gfx-dev sudo apt install libgtk-3-dev
ソースをそろえた後、src フォルダで make してください。
make machine=mz80k clean make machine=mz80k
MZ-80K/MZ-700/X1/X1turbo/SC-3000/FM-7/FM-77 は、Makefile作成してビルド確認しました。
他機種の Makefile は、vc++2017/*.vcxproj を参考にして作ってください。ターゲット名の変更と、vcxproj の ClCompile Include のところに書いてある vm\*.cpp ファイルを 拡張子 .o にして一覧で書けばOKです。
Makefile 作った機種のみ、ビルド確認したので、うまくビルドできない機種があるかもしれないです。
ROMファイル/テープ/DISK/カートリッジイメージは、~/ROMS/[機種名]ROM/ 以下に入れてください。
必要なイメージは Common Source Code Project のドキュメントを参照お願いします。
MZ-80K なら、こういう感じです。
/home/cpi/ROMS/mz80kROM/
キーボードはエミュレート対象機相当の配列になりますので、DevTerm のUS 配列とはかなり異なった状態となります。基本的な英数字は入力できるようになってるはず…です。
ESC はブレークキーにしてあります。
エミュレータ機能の操作は、とりあえず動作必要最低限な感じで付けています。
[ALT] + [F] ファイルイメージ選択(以下1~5で直接指定も可能)
[ALT] + [1] ディスク1イメージ選択
[ALT] + [2] ディスク2イメージ選択
[ALT] + [3] カセットイメージ選択&再生
[ALT] + [4] カートリッジイメージ選択
[ALT] + [5] QuickDiskイメージ選択
[ALT] + [Q] 終了
[ALT] + [R] リセット
[ALT] + [Enter] 全画面切り替え(端が少々うまく表示できてませんが…)
ファイル選択は、GTK3 のファイル選択ダイアログを使っています。初回表示時は画面に納まらないサイズで表示されるかも…。
一度小さくすれば、次回からはそのサイズで表示されます。
マウス操作でがんばってリサイズしてみたら、次回以降からもそのときのサイズで表示されるようになった…。再起動してもサイズ維持されてる。そういうもんなのかな…。ひとまずダイアログサイズは気にしないことにしよう。 pic.twitter.com/6XHvVxb6T8
— Nochi (@shikarunochi) February 1, 2022
GTK3でのダイアログはこちら参考にしました。
Gtk > FileChooserDialog
https://docs.gtk.org/gtk3/class.FileChooserDialog.html
まず、newして(親Windows指定は NULLで大丈夫でした。)
GtkWidget *pFileSelection = gtk_file_chooser_dialog_new( "キャプション", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL );
初期ディレクトリを指定して、選択ダイアログを表示。戻りで選択されたファイル名を取得
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (pFileSelection),get_application_path()); gint res = gtk_dialog_run(GTK_DIALOG(pFileSelection)); char *filename = NULL; if (res == GTK_RESPONSE_OK) { GtkFileChooser *chooser = GTK_FILE_CHOOSER (pFileSelection); filename = gtk_file_chooser_get_filename (chooser); } gtk_widget_destroy(pFileSelection); while (gtk_events_pending ()){ gtk_main_iteration (); }
表示時に、毎回 new & destroy してます。最後、GTKイベント終わるまで待ちを入れています。
画面表示は SDL2 を使っています。使い方がわかって画面が出せるまで結構かかりました…。
動作確認のため、VRAMイメージをテキスト表示させたりしてました。
動いているのがわかるとテンション上がりますので!
現状、ウィンドウを画面を移動する、または画面最大化して戻ってくると、表示位置がちょっと下がってしまうのですよね。なんか設定が違ってるのかも…。
(2020/02/25追記)
原因がわかりました!初期化時に WIDTH と HEIGHT を間違っていただけだった…。グェー。