MZ-800エミュレータ作者のMichal Hucikさんから連絡をいただき、MZ-700のROMを使う方法を教えてもらいました。(MZ-700 NEW MONITOR は動作しませんでした。実機のROMイメージが必要です。)
最初に、最新版ソースがsvnにあるとのことなのでこちらから取得。
svn://svn.code.sf.net/p/mz800emu/code/mz800emu-code
この時点で一回コンパイルして、動作することを確認しておきましょう。
(1)MZ-800のROMイメージを空イメージで作成した c ファイル(ROM_EMPTY_MZ800.c)を用意する。
src/memory/ROM/ROM_MZ800.c の内容を、全列
0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF,
にしたものです。
(2)MZ-700のROMイメージの c ファイル(ROM_MZ700_JP.c)を用意する。
ROM_MZ700.cの内容を、日本版ROMの内容で置き換えたものです。
日本版ROMイメージをPocketCHIPに入れて、hexdumpでテキストファイルに書き出すといいでしょう。
$ hexdump -v -e " 16/1 \"0x%02X, \" \"\n\"" ROM_MZ700_JP.ROM > ROM_MZ700_JP.ROM.txt
こういう感じで書き出せると思います。
0xC3, 0x4A, 0x00, 0xC3, 0xE6, 0x07, 0xC3, 0x0E, 0x09, 0xC3, 0x18, 0x09, 0xC3, 0x20, 0x09, 0xC3, 0x24, 0x09, 0xC3, 0x35, 0x09, 0xC3, 0x93, 0x08, 0xC3, 0xA1, 0x08, 0xC3, 0xBD, 0x08, 0xC3, 0x32,
(3)上記ROMイメージのファイルをプロジェクトに追加する。
nbproject/Makefile-Release-Linux.mk を書き換えます。
[ROM_MZ700]で検索して、同じ内容を[ROM_EMPTY_MZ800][ROM_MZ700_JP]それぞれに作ります。
OBJECTFILES のところと、各ファイルのビルドのところの2か所です。
(4)プログラムソースの修正
・src/memory/ROM/rom.h に定義を加える。
extern const Z80EX_BYTE c_ROM_MZ700_JP []; extern const Z80EX_BYTE c_ROM_EMPTY_MZ800 [];
・src/memory/memory.c の memory_reset() 処理を書き換える。
void memory_reset ( void ) { //g_memory.map = MEMORY_MAP_FLAG_ROM_0000 | MEMORY_MAP_FLAG_ROM_1000 | MEMORY_MAP_FLAG_ROM_E000; g_memory.map = MEMORY_MAP_FLAG_ROM_0000 | MEMORY_MAP_FLAG_ROM_E000; /* CG-RAM is still rewritable! */ memcpy ( g_memoryVRAM_I, g_rom.cgrom, MEMORY_SIZE_ROM_CGROM ); }
・src/memory/ROM/rom.c の初期化処理を書き換える。(64行目)
日本語表示のためCGROMに「c_ROM_WILLY_jap_CGROM」を指定します。
case ROMTYPE_STANDARD: // rom_install_predefined ( c_ROM_MZ700, c_ROM_CGROM, c_ROM_MZ800 ); rom_install_predefined ( c_ROM_MZ700_JP, c_ROM_WILLY_jap_CGROM, c_ROM_EMPTY_MZ800 );
これでコンパイル/実行すると…
モニター 1Z-009 ですー。(これはMZ-1500のROMだったので1Z-009B)
WonderHouseも、MZ-700モードでひらがな日本語表示。
この前に行ったドットバイドット修正も入れてみます。最新版だとちょっとソース内容が変わってますが、対象ソースは変わらず、同じ修正でいけました。
くっきり!
いいですねー。
あとは、なるべく高速化になるように、ソースのデバッグフラグをOFFにして、サウンドもUnableにしました。
src/mz800emu_cfg.h
//#define MZ800EMU_CFG_DEBUGGER_ENABLED //コメント化 #define MZ800EMU_CFG_AUDIO_DISABLED //有効化
デフォルトでCPU MAX SPEEDをONにしました。
src/mz800.c
//初期値にMAXを設定 //mz800_switch_emulation_speed ( MZ800_EMULATION_SPEED_NORMAL ); mz800_switch_emulation_speed ( MZ800_EMULATION_SPEED_MAX );
これで、キー入力は少々もたつきますが、アドベンチャーゲームなら、なんとかプレイできなくもないかなー、ぐらい。
ヘビくんとご対面。(キーボードから「?」が入力できなくて、この後ヘビに食べられた。)