最終更新日

MSX ゲーム開発を MAME/C-BIOS で行うメモ

はじめに

この文書は、MSX ゲーム開発を MAME/C-BIOS で行うための環境構築メモです。手順では Ubuntu 20.04 LTS を用いています。

MSX ゲーム開発に使用できる Z88DK C言語ツールチェインについては、以下の資料をご覧ください。

Z88DK を使って MSX のゲームをつくるための環境構築メモ

この文書は、Z80 を CPU に持つコンピュータ向けの C コンパイラ・アセンブラツールチェーンである Z88DK を使って MSX のゲームをつくるための環境構築メモです。

全体手順

  1. MAME をビルドするための依存関係を Ubuntu に導入
  2. MAME のビルド試行
  3. MAME に C-BIOS で動作する MSX を追加してビルドしてビルド
  4. MAME に自分の ROM セットを追加する
  5. MAME 起動

MAME をビルドするための依存関係を導入

Ubuntu 20.04 LTS:

sudo apt-get install git build-essential python libsdl2-dev libsdl2-ttf-dev libfontconfig-dev libpulse-dev qt5-default

Ubuntu 21.04 以降では上記 qt5-default を外して以下も導入する。

sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

MAME のビルド試行

MAME を git clone して 0.235 のバージョンタグをチェックアウトする。(0.235 は 2022/08 最新。以降であれば問題ないはず)

git clone https://github.com/mamedev/mame.git
git checkout ec9ba6f

いったん既存の MAME MSX (HB-F1) をビルドしてみる。

cd mame
make -j8 SUBTARGET=hbf1 SOURCES=src/mame/drivers/msx.cpp

-j8 指定はビルド時に使う CPU スレッド数の設定(この場合は 8 スレッド)。スレッド設定や機械によりますが 10〜20分くらい。

ビルドができると実行ファイル(hbf1)ができるので起動してみる。ただし HB-F1 の BIOS がないので起動しないはず。(とりあえず実行ファイルができればOK)

ls -laF hbf1
./hbf1 hbf1 -window -resolution 1024x768

全体のディレクトリ構成

この後の手順で操作するファイル・ディレクトリ一覧:

+ mame
    - src/mame/mame.lst                 // C-BIOS 追加修正ソース
    - src/mame/drivers/msx.cpp          // C-BIOS 追加修正ソース
    - src/mame/includes/msx.h           // C-BIOS 追加修正ソース
    + roms
        + cbios                         // ディレクトリ新規作成
            - cbios_main_msx2_jp.rom    // ダウンロードしてきた C-BIOS ファイル
            - cbios_logo_msx2.rom
            - cbios_sub.rom
            - ...
        + msx1_cart                     // ディレクトリ新規作成
            - example.zip               // example.rom を直下に含む .zip ファイル
    - hash/msx1_cart.xml                // example.rom の定義を追加するファイル

MAME に C-BIOS で動作する MSX を追加してビルド

実機の BIOS を使わずに MSX 互換の C-BIOS で MAME を起動するため、C-BIOS のファイルをダウンロードして MAME の roms ディレクトリに入れる。

mame/romscbios ディレクトリをつくって cbios-0.29a.zip をダウンロードして展開:

https://sourceforge.net/projects/cbios/files/cbios/0.29/

$ ls -laF roms/cbios/
合計 504
drwxr-xr-x 2 hiromasa hiromasa  4096  8月 29 16:54 ./
drwxrwxr-x 8 hiromasa hiromasa  4096  8月 29 17:13 ../
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_basic.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_disk.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_logo_msx1.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_logo_msx2+.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_logo_msx2.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx1.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx1_br.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx1_eu.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx1_jp.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2+.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2+_br.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2+_eu.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2+_jp.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2_br.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2_eu.rom
-rw-r--r-- 1 hiromasa hiromasa 32768  9月 23  2018 cbios_main_msx2_jp.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_music.rom
-rw-r--r-- 1 hiromasa hiromasa 16384  9月 23  2018 cbios_sub.rom

MAME のソースの以下 3ファイルを修正して、C-BIOS 起動の MSX2 を定義する。

src/mame/mame.lst: hbf1 の上辺りに cbios 行を追加

hb75p                           // 1983 MSX
cbios                           // 2018 MSX2 Japan [追加]
hbf1                            // 1986 MSX2 Japan

src/mame/drivers/msx.cpp: C-BIOS を読ませる定義を MSX2 - Sony HB-F1 前辺りにごっそり追加

/* MSX2 - Compat C-BIOS */

ROM_START (cbios)
	ROM_REGION (0x20000, "maincpu",0)
	ROM_LOAD ("cbios_main_msx2_jp.rom",   0x0000, 0x8000, CRC(0c2d6b99) SHA1(47cc280f0d8b0611fdb1069e6fd7b854cae93546))
	ROM_LOAD ("cbios_logo_msx2.rom",      0x8000, 0x4000, CRC(41b12c7b) SHA1(d4e5b98ce23573669fb44447582d656e390791c0))
	ROM_LOAD ("cbios_sub.rom",            0xc000, 0x4000, CRC(5466ccb6) SHA1(2fcb40413e7d373f0f2dbdc815ce18746ddf3684))
ROM_END

void msx2_state::cbios(machine_config &config)
{
	msx2(config);

	add_internal_slot(config, MSX_SLOT_ROM, "bios", 0, 0, 0, 3, "maincpu", 0x0000);
	add_cartridge_slot<1>(config, MSX_SLOT_CARTRIDGE, "cartslot1", 1, 0, msx_cart, nullptr);
	add_cartridge_slot<2>(config, MSX_SLOT_CARTRIDGE, "cartslot2", 2, 0, msx_cart, nullptr);
	add_internal_slot(config, MSX_SLOT_ROM, "sub", 3, 0, 0, 1, "maincpu", 0xc000);
	add_internal_slot(config, MSX_SLOT_RAM, "ram", 3, 2, 0, 64);  /* 512KB RAM */

	msx2_cartlist(config);
}

/* MSX2 - Sony HB-F1 */

src/mame/includes/msx.h: hbf1 の前辺りに cbios 行を追加

	void hotbit20(machine_config &config);
	void cbios(machine_config &config); // 追加
	void hbf1(machine_config &config);

ソースコードが修正できたら追加した cbios を指定して MAME をビルドする。

make -j8 SUBTARGET=cbios SOURCES=src/mame/drivers/msx.cpp

できた cbios を起動する。

ls -laF cbios
./cbios cbios -window -resolution 1024x768

次のようになれば OK。

MAME に自分の ROM セットを追加する

mame/hash/msx1_cart.xml に自分の ROM を以下の形式で追加する。

<!-- Unconfirmed dumps (from misc collections) -->

	<software name="example">
		<description>example</description>
		<year>2021</year>
		<publisher>santiontanon</publisher>
		<info name="serial" value="01" />
		<info name="alt_title" value="example" />
		<part name="cart" interface="msx_cart">
			<dataarea name="rom" size="16384">
				<!-- <rom name="transball-en.rom" size="32768" crc="4e20d256" sha1="33536dac686b375ba13faf76a3baf2d6978904e0" offset="0x0" /> -->
				<!-- <rom name="aburi-score.rom" size="16384" crc="4e20d256" sha1="33536dac686b375ba13faf76a3baf2d6978904e0" offset="0x0" /> -->
				<rom name="example.rom" size="16384" crc="4e20d256" sha1="33536dac686b375ba13faf76a3baf2d6978904e0" offset="0x0" />
			</dataarea>
		</part>
	</software>

example.rom のところを自分のつくった .rom 名と size にする。 crcsha1 は適当でOK。 0x4000 の ROM であれば offset はそのまま。

次に roms/msx1_cart ディレクトリを作成して、example.rom を直下に圧縮した example.zip を配置する。

$ ls -laF roms/msx1_cart
-rw-rw-r-- 1 hiromasa hiromasa 39170  8月 30 20:33 roms/msx1_cart/example.zip

なお、既存の example.zipexample.rom を追加するなら次のようなコマンドになる。(プログラムビルド後に実行すると便利)

zip -u example.zip ./example.rom

MAME 起動

定義したソフトウェア名(example)を指定して MAME を起動する。

./cbios cbios example -window -resolution 800x600

デバッガを起動する場合は以下のコマンド。

./cbios cbios example -window -resolution 800x600 -debug

z88dkex7.c をビルドして .rom 起動した例。

デバッガー操作

  • F5 キーで実行
  • F11 キーでステップ実行。ブレイクポイントは逆アセンブラ上のカーソルで設定。
  • デバッグウインドウの debug メニューよりメモリーダンプが表示できる。