いまさらベーシックマスターの開発環境を作ってみる(9) GAME68を再移植してみる(2)

BASICMASTER, 昔のパソコン

いまさらベーシックマスターの開発環境を作ってみる(8) GAME68を再移植してみる(1) | ず@沖縄の続き。

BASIC MASTERには GAME/BM という素晴らしい移植版があるので、それと同等になれるように機能を追加してみた。

GAME-IIIのソースは月刊アスキーの1978年7月号から10月号に掲載されている。OCRしてもいいのだけど、ソースを公開してくださっている方がいるので、そちらを使っている。


追加機能

GAME/BMに合わせて機能追加した。SAVE/LOAD/APPENDはGAME/BMとは仕様が異なる。本移植ではASCIIテキストでSAVEを行っている。

VERIFYは省いた。エミュレーション環境だからエラー起こらないと信じる。

プログラム保存

SAVE/LOAD/APPENDの仕様は変更するかも。

[S FILENAMESAVE
[L FILENAMELOAD
[A FILENAMEAPPEND

以下、GAME/BMに合わせた。論理演算は他機種のGAMEにも存在する。

論理演算

A&BAND
A.BOR
A!BXOR

特殊変数

キースキャンは未実装。使ってるソフトを見つけたら考える。

\TIME1,2 (1秒タイマーの値)
^CURSOR位置($0F,$10)
^$CURSOR位置のアドレス(JSR $FFF5)
[現在のキーボード状態(JSR $F00F)、キー入力がなければ0を返す
[Rキースキャン(未実装)

モニタ、音楽

GAME/BMの実装だと、音楽文字列の最後に % が必要なようだ。本移植ではあってもなくても動く、が、どちらがいいんかな。

本移植ではSAVE/LOADと共通のキーワード '[' を使っているので、 '[' を特殊変数扱いしていない。これもどちらの実装がいいのか。

[=0モニタに移動
[=1 音楽文字列MUSIC


LDS MAIN+1の謎

BASIC MASTERは機種によってメモリの大きさが異なる。私はMB-6881の標準16KBにメモリを増設して32KBで使っていたが、初代MB-6880は4KB、MB-6880L2は8KB、MB-6885では63.5KBのRAMが使用できる。なのでスタックポインタも固定ではなくRAM末に置きたい。

そのために、スタックに固定値を設定しているところを書き換えてやる。すると動かなくなる。

-MAIN    LDS    #STACK1
+MAIN    LDS    RAMEND        ; $0008

実は移植・リロケートの際に書き換える部分を減らすために、他の部分は LDS MAIN+1 として、MAINのオペランド部分を参照していた。なので、ここをエクステンデッドアドレシングで LDS $0008 などとすると動かなくなる。 全てLDS RAMENDに書き換えておく。

0204    BE0116    EDEND    LDS    MAIN+1


BITB #$DF の謎

NOPSTMルーチンで、BITB #$DF の結果を見て分岐を行っている部分がある。なんじゃこれは。

$DF なので、 1101 1111。これとANDを取って0になるのは AccBが $00か$20 のとき。ということで、$00 と $20 で2回判定せずに1回で済ませているようだ。頭いいな。

0270    E601    NOPSTM    LDAB    1,X
0272    C5DF        BITB    #$DF
0274    2616        BNE    LITSTR


簡単なゲームは動くようになった

BMUG会報No.12 1982年12月号 P.2 に掲載されていた潜水艦ゲームを動かしてみました。意外に速いな。

キーボード操作が L,R,B なのが地味に難易度を上げている。

(時間が0秒のままなのは、eBasicMasterJr がTIME割り込みを実装していないためだと思う。j68,bm2なら正しく動作する)



続く