PocketCHIP : mz800emuでMZ-700のROMを使う

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 );

これでコンパイル/実行すると…

mzjp01

モニター 1Z-009 ですー。(これはMZ-1500のROMだったので1Z-009B)

mzjp02

WonderHouseも、MZ-700モードでひらがな日本語表示。

この前に行ったドットバイドット修正も入れてみます。最新版だとちょっとソース内容が変わってますが、対象ソースは変わらず、同じ修正でいけました。

mzjp03

くっきり!

mzjp04

いいですねー。

あとは、なるべく高速化になるように、ソースのデバッグフラグを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 );

これで、キー入力は少々もたつきますが、アドベンチャーゲームなら、なんとかプレイできなくもないかなー、ぐらい。

mzjp06

ヘビくんとご対面。(キーボードから「?」が入力できなくて、この後ヘビに食べられた。)