いまさらベーシックマスターの開発環境を作ってみる(9) GAME68を再移植してみる(2)
いまさらベーシックマスターの開発環境を作ってみる(8) GAME68を再移植してみる(1) | ず@沖縄の続き。
BASIC MASTERには GAME-MB という素晴らしい移植版があるので、それと同等になれるように機能を追加してみた。
GAME-IIIのソースは月刊アスキーの1978年7月号から10月号に掲載されている。OCRしてもいいのだけど、ソースを公開してくださっている方がいるので、そちらを使っている。
追加機能
GAME-MBに合わせて機能追加した。SAVE/LOAD/APPENDはGAME-MBとは仕様が異なる。本移植ではASCIIテキストでSAVEを行っている。
VERIFYは省いた。エミュレーション環境だからエラーは起こらないと信じる。
プログラム保存
SAVE/LOAD/APPENDの仕様は変更するかも。GAME-MBは [=0 でモニタに飛んで、そこで操作するようになっている。どちらが良いだろうか。
[S FILENAME | SAVE |
[L FILENAME | LOAD |
[A FILENAME | APPEND |
以下、GAME-MBに合わせた。論理演算は他機種のGAMEにも存在する。
論理演算
A&B | AND |
A.B | OR |
A!B | XOR |
特殊変数
キースキャンは未実装。使ってるソフトを見つけたら考える。
\ | TIME1,2 (1秒タイマーの値) |
^ | CURSOR位置($0F,$10) |
^$ | CURSOR位置のアドレス(JSR $FFF5) |
[ | 現在のキーボード状態(JSR $F00F)、キー入力がなければ0を返す |
[R | キースキャン(未実装) |
モニタ、音楽
GAME-MBの実装だと、音楽文字列の最後に % が必要なようだ。本移植ではあってもなくても動く、が、どちらがいいんかな。
本移植では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末に置きたい。
そのために、スタックに固定値を設定しているところを書き換えてやる。すると動かなくなる。
[code lang="text"]
-MAIN LDS #STACK1
+MAIN LDS RAMEND ; $0008
[/code]
実は移植・リロケートの際に書き換える部分を減らすために、他の部分は LDS MAIN+1 として、MAINのオペランド部分を参照していた。なので、ここをエクステンデッドアドレシングで LDS $0008 などとすると動かなくなる。 全てLDS RAMENDに書き換えておく。
[code lang="text"]
0204 BE0116 EDEND LDS MAIN+1
[/code]
BITB #$DF の謎
NOPSTMルーチンで、BITB #$DF の結果を見て分岐を行っている部分がある。なんじゃこれは。
$DF なので、 1101 1111。これとANDを取って0になるのは AccBが $00か$20 のとき。ということで、$00 と $20 で2回判定せずに1回で済ませているようだ。頭いいな。
[code lang="text"]
0270 E601 NOPSTM LDAB 1,X
0272 C5DF BITB #$DF
0274 2616 BNE LITSTR
[/code]
簡単なゲームは動くようになった
BMUG会報No.12 1982年12月号 P.2 に掲載されていた潜水艦ゲームを動かしてみました。意外に速いな。
キーボード操作が L,R,B なのが地味に難易度を上げている。
続く
ディスカッション
コメント一覧
まだ、コメントがありません