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で動かすとこんな感じになる。

hello0001