MSXエミュレータで使えるROMイメージを作ってみる。
[MSX] MSX-BASICでHello World(笑) と言ってもマシン語でする。のコードを改造して作ってみる。
ROMカードリッジは4000Hか8000H番地から始まる。ここでは4000H番地から始まるものを作る。
まず、4000H番地からはヘッダが存在する。
| 4000H | ID | 'AB' |
| 4002H | INIT | 初期化ルーチンのアドレス |
| 4004H | STATEMENT | BASICステートメント拡張ルーチンのアドレス |
| 4006H | DEVICE | BASICデバイス拡張ルーチンのアドレス |
| 4008H | TEXT | オートスタートさせるBASICのコードのアドレス |
ゲームなんかは初期化ルーチンでそのまま実行し無限ループすればいいらしい。
と言うことで、初期化ルーチンで"Hello World."って表示して無限ループするようにする。コードはこんな感じだ。
; プログラムの開始アドレス
ORG 4000H
; 1文字出力(MAIN:00A2H)
; 入力:A:文字コード
; 戻り値:なし
; 破壊レジスタ:なし
CHPUT EQU 00A2H
DMY EQU 8000H
DB "AB" ; ID
DW INIT ; INIT(初期化ルーチンのアドレス)
DW 0000H ; STATEMENT(BASICステートメント拡張ルーチンのアドレス)
DW 0000H ; DEVICE(BASICデバイス拡張ルーチンのアドレス)
DW 0000H ; TEXT(オートスタートさせるBASICのコードのアドレス)
INIT:
; 表示する文字列のアドレスをHLに入れる
LD HL, HELLO
; 1文字Aレジスタに読み込む
LOOP: LD A,(HL)
; 読み込んだ値(Aレジスタ)が0なら無限ループに
OR A
JR Z, INIFLOOP
; 1文字出力
CALL CHPUT
; 次の文字へアドレスを進める
INC HL
JR LOOP
; 無限ループ
INIFLOOP: JR INIFLOOP
; 表示する文字列(0で終わる)
HELLO: DB "Hello World.",0
; ROMイメージのファイルサイズが16KBになるようにする
_DMY: DS DMY-_DMY
ORG DMY
END
これをopenMSX + C-BIOSで動かすとこんな感じになる。

コメント