DevTerm:Common Source Code Project

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 のファイル選択ダイアログを使っています。初回表示時は画面に納まらないサイズで表示されるかも…。
一度小さくすれば、次回からはそのサイズで表示されます。


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 を間違っていただけだった…。グェー。