この文書は、MSX ゲーム開発を MAME/C-BIOS で行うための環境構築メモです。手順では Ubuntu 20.04 LTS を用いています。
MSX ゲーム開発に使用できる Z88DK C言語ツールチェインについては、以下の資料をご覧ください。
Z88DK を使って MSX のゲームをつくるための環境構築メモ
この文書は、Z80 を CPU に持つコンピュータ向けの C コンパイラ・アセンブラツールチェーンである Z88DK を使って MSX のゲームをつくるための環境構築メモです。
(2022/12 追記)本文書より新しい手順を以下で公開しています。
ここから下の情報は、過去参考用として残しておきます。
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 を 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 のソースの以下 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 実行ファイルが作成されます。
任意の空ディレクトリ(以下本ディレクトリを 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
にする。 crc
と sha1
は適当で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.zip
に example.rom
を追加するなら次のようなコマンドになる。(プログラムビルド後に実行すると便利)
zip -u example.zip ./example.rom
定義したソフトウェア名(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)
z88dk の ex7.c
をビルドして .rom
起動した例。
デバッガー操作
F5
キーで実行F11
キーでステップ実行。ブレイクポイントは逆アセンブラ上のカーソルで設定。debug
メニューよりメモリーダンプが表示できる。