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で読み込んで実行している。
コメント