PC-8001 系でゲームプログラムを作成していると、機種の違いにより、どうしても機種判別が必要となる事態になったりします。例えば、PC-8001mk2 のグラフィックRAMを拡張メモリとして使いたいとか、PC-8801のROM/RAMバンク切り替えのポート番号が、PC-8001と異なっているとかです。
このように BASIC のバージョン番号が異なっています。ROM 内の当該バージョン番号の格納場所は 0x1850 です。
この赤丸の部分を判定すれば機種判定出来ます。
遙かな昔に既に製造が停止している PC-8001/8801ファミリーは、新しい機種が製造される事はないため、ROM内の特定アドレスの数値が異なっている事を検知すれば、機種判定が出来る事になります。
初期型PC-8001の N-BASIC 起動画面
PC-8001mkⅡの N-BASIC 起動画面このように BASIC のバージョン番号が異なっています。ROM 内の当該バージョン番号の格納場所は 0x1850 です。
この赤丸の部分を判定すれば機種判定出来ます。
判定プログラムのサンプルは以下の通りとなります。
;------------------------------------------------------------------
; PC-8801機種判定
; out: CF=1 PC-8801である
;
BIOS:
.NBASIC_VER equ $1850 ; N-BASIC Version番号
IsPC8801:
ld a, (BIOS.NBASIC_VER)
cp '2'
ccf
jr nc, .not88 ; 1.0 - 1.1 : PC-8001
ret z ; 1.2 : PC-8801
cp '3'
ret z ; 1.3 : PC-8001mk2
cp '6'
ret z ; 1.6 : PC-8001mk2SR
scf ; etc : PC-8801
ret
.not88 or a ; PC-8801ではない
ret
コメント