MSX-BASICでHello Worldと言ってもマシン語(アセンブラ)で作る。
[MSX] MSX-DOSでHello World(笑) BIOSコールでする。のコードを改造する。

開始アドレスを0C000Hにする。BASIC上ではページ0はメインROMになっている(はずな)ので1文字出力ルーチンをインタースロットコールしなくてもよくなる。

こんな感じになる。

            ; プログラムの開始アドレス
            ORG     0C000H

            ; 1文字出力(MAIN:00A2H)
            ;   入力:A:文字コード
            ;   戻り値:なし
            ;   破壊レジスタ:なし
CHPUT       EQU     00A2H

            
            ; 表示する文字列のアドレスをHLに入れる
            LD      HL, HELLO

            ; 1文字Aレジスタに読み込む
LOOP:       LD      A,(HL)
            
            ; 読み込んだ値(Aレジスタ)が0なら終了
            OR      A
            RET     Z
            
            ; 1文字出力
            CALL    CHPUT
            
            ; 次の文字へアドレスを進める
            INC     HL

            JR LOOP

            ; 表示する文字列(0で終わる)
HELLO:      DB      "Hello World.",0
            END

ZASMは、COMファイルを作る時と同じオプションで作る。作られてたファイルはソースをアセンブルしたコードをそのままバイナリにしたようなコードなので、ソースで指定した0C000Hにそのまま読み込めば実行できる形になっている。これはBLOADでロードできる形式でないのでバイナリエディタでヘッダ情報を追加してやる。バイナリエディタはStirlingを使用した。(探せばヘッダ情報を追加するプログラムありそうだが、いずれヘッダを追加するプログラムを作るか)

ファイル形式にBSAVEしたファイルのフォーマットが書かれている。こっちにも書いておく。

1バイト 0FEH
2バイト 開始アドレス
2バイト 終了アドレス
2バイト 実行アドレス
... プログラム

Z80はリトルエンディアンなんでアドレスは下位、上位の順で入れる。

今回のHello Worldプログラムは、25バイトなので開始アドレス0C000H、終了アドレス0C018Hになる。実行アドレスはもちろん0C000Hになる。

バイナリエディタを使って、あたまに次のヘッダを挿入すればいい。

FE 00 C0 18 C0 00 C0

このファイル(hello3.bin)をMSXにもっていって、BASICで次のように実行する。

CLEAR 300,&HC000
BLOAD "hello3.bin",R

最初のCLEARでBASICで使用する領域を0C000H未満にするように実行して、BLOADで読み込んで実行している。