PC-8001 系でゲームプログラムを作成していると、機種の違いにより、どうしても機種判別が必要となる事態になったりします。例えば、PC-8001mk2 のグラフィックRAMを拡張メモリとして使いたいとか、PC-8801のROM/RAMバンク切り替えのポート番号が、PC-8001と異なっているとかです。

遙かな昔に既に製造が停止している PC-8001/8801ファミリーは、新しい機種が製造される事はないため、ROM内の特定アドレスの数値が異なっている事を検知すれば、機種判定が出来る事になります。

初期型PC-8001の N-BASIC 起動画面
PC-8001-ROM1.0
PC-8001mkⅡの N-BASIC 起動画面
PC-8001-ROM1.3
このように BASIC のバージョン番号が異なっています。ROM 内の当該バージョン番号の格納場所は 0x1850 です。
ROMイメージ
この赤丸の部分を判定すれば機種判定出来ます。
判定プログラムのサンプルは以下の通りとなります。

;------------------------------------------------------------------
; 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

あなたの知らないN-BASICの真実: PC-8001から98DO+まで

川俣 晶
株式会社ピーデー
2018-08-12