最終更新日

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

はじめに

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

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

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

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

新しいドキュメント

(2022/12 追記)本文書より新しい手順を以下で公開しています。

DeZog + Z88DK + MAME で 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 する。(本記事は MAME 0.249 で確認)

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

いったん既存の MAME MSX (HB-F1) をビルドしてみる。(以下、MAME のディレクトリを MAME_HOME と呼ぶ)

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

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

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

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

全体のディレクトリ構成

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

+ ${MAME_HOME}
    - src/mame/mame.lst                 // C-BIOS 追加修正ソース
    - src/mame/msx/msx2.cpp             // C-BIOS 追加修正ソース
    - src/mame/includes/msx.h           // C-BIOS 追加修正ソース

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

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

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

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

src/mame/msx/msx2.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, 4);  /* 64KB RAM */
}

/* MSX2 - Sony HB-F1 */

最後付近に COMP(cbios を追加。

COMP(2018, cbios,      0,        0,     cbios,      msx2jp,   msx2_state, empty_init, "Sony", "C-BIOS (Japan) (MSX2)", MACHINE_NOT_WORKING ) // Screen stays a single color after a while
COMP(1986, hbf1,       0,        0,     hbf1,       msx2jp,   msx2_state, empty_init, "Sony", "HB-F1 (Japan) (MSX2)", MACHINE_NOT_WORKING ) // Screen stays a single color after a while
COMP(1987, hbf12,      0,        0,     hbf12,      msx2jp,   msx2_state, empty_init, "Sony", "HB-F1II (Japan) (MSX2)", MACHINE_NOT_WORKING ) // Screen stays a single color after a while

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

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

cbios という名前の MAME 実行ファイルが作成されます。

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

任意の空ディレクトリ(以下本ディレクトリを MSX_HOME と呼ぶ)で次のように、ROM 配置用のディレクトリを作成する。

mkdir -p roms/msx1_cart/
mkdir -p roms/cbios/
mkdir -p hash/

C-BIOS のファイルをダウンロードして roms/cbios/ ディレクトリに入れる。

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

hash/msx1_cart.xml として次の定義ファイルを追加する。

<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="msx1_cart" description="MSX1 cartridges">
	<software name="example">
		<description>example</description>
		<year>2021</year>
		<publisher>example</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="example.rom" size="16384" crc="4e20d256" sha1="33536dac686b375ba13faf76a3baf2d6978904e0" offset="0x0" />
			</dataarea>
		</part>
	</software>
</softwarelist>

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 を起動する。

cd ${MSX_HOME}
(cd ${MAME_HOME} && ./cbios cbios example -window -resolution 800x600 \
    -rompath ${MSX_HOME}/mics/mame/roms/msx1_cart -hashpath ${MSX_HOME}/mics/mame/hash \)

次のようになれば OK。

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

cd ${MSX_HOME}
(cd ${MAME_HOME} && ./cbios cbios example -window -resolution 800x600 \
    -rompath ${MSX_HOME}/mics/mame/roms/msx1_cart -hashpath ${MSX_HOME}/mics/mame/hash \
    -debug)

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

デバッガー操作

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