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 の内容を、全列

1
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でテキストファイルに書き出すといいでしょう。

1
$ hexdump -v -e " 16/1 \"0x%02X, \" \"\n\"" ROM_MZ700_JP.ROM > ROM_MZ700_JP.ROM.txt

こういう感じで書き出せると思います。

1
2
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 に定義を加える。

1
2
extern const Z80EX_BYTE c_ROM_MZ700_JP [];
extern const Z80EX_BYTE c_ROM_EMPTY_MZ800 [];

・src/memory/memory.c の memory_reset() 処理を書き換える。

1
2
3
4
5
6
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」を指定します。

1
2
3
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

1
2
//#define MZ800EMU_CFG_DEBUGGER_ENABLED //コメント化
#define MZ800EMU_CFG_AUDIO_DISABLED //有効化

デフォルトでCPU MAX SPEEDをONにしました。

src/mz800.c

1
2
3
//初期値にMAXを設定
 //mz800_switch_emulation_speed ( MZ800_EMULATION_SPEED_NORMAL );
 mz800_switch_emulation_speed ( MZ800_EMULATION_SPEED_MAX );

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

mzjp06

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