PC-8001/8801のモード切替IPL


IPL は Initial Program Loader のことで、PCが起動した際に最初に読み込まれるプログラムのことを指します。ここでは、内蔵5インチ2Dのトラック0・セクタ1に限定した話をします。

FDDブートが有効なPC-8801を起動すると、N-BASIC/N88-BASICともドライブ1・トラック0・セクタ1の256バイトを読み込み、メインメモリのC000H〜C0FFHに配置します(これは、PC-8001のRAMがC000H-FFFFHの16kBにしかなかったことに由来するようです)。セクタ2以降のプログラムは、IPLに書かれたプログラムで読み込むこととなります(ブートストラップ)。

通常、N-BASICモード用とN88-BASIC用のIPLは、異なるBASICモードでは正常に動作しません。しかし、中にはBASICモードを判別し、モード自体を切り替えてリセットしてしまうIPLがあったので、何をやっているか調べてみました。

N88→N

                    ORG  0C000H
START:
         3A 03 00   LD   A,(0003H)      ; ROMの0003Hの値を調べる
         FE FF      CP   0FFH
         CA xx xx   JP   Z,NMODE        ; FFHだった場合(=N-BASICモード)はジャンプ
; N88→Nモード切替
N88MODE:
         F3         DI                  ; 割り込み禁止
         AF         XOR  A
         D3 E6      OUT  (0E6H),A       ; RS-232C/VRTC/タイマ割り込み禁止
         3E 04      LD   A,04H
         D3 31      OUT  (31H),A        ; N-BASICモード選択
         C3 00 00   JP   0000H          ; N-BASIC ROMの0000H番地へ(リセット)
; 本来の処理
NMODE:
         :

N→N88

                    ORG  0C000H
START:
         3E FF      LD   A,0FFH
         D3 71      OUT  (71H),A        ; メインROM選択
         3A 03 00   LD   A,(0002H)      ; ROMの0002Hの値を調べる
         3C         INC  A
         C2 xx xx   JP   NZ,N88MODE     ; FFH以外の場合(=N88-BASICモード)はジャンプ
; N→N88モード切替
NMODE:
         D3 31      OUT  (31H),A        ; N88-BASICモード選択(A=0)
         DB 32      IN   A,(32H)
         E6 FC      AND  0FCH
         D3 32      OUT  (32H),A        ; 内蔵拡張ROMバンク0選択(4th ROM)
         3E 04      LD   A,0CH          ; DIP-SW値 DELコード無視/Sパラメータ無効/テキスト80x25/N88-BASIC
         C3 FE 77   JP   77FEH          ; N88-BASIC ROMの77FEH番地へ(初期化処理)
; 本来の処理
N88MODE:
         :

ROMの判別情報

以下のように、N-BASICではSPを0FFFFHで初期化しているのに対し、N88-BASICでは0E1A0Hで初期化しているのを利用しています。

                    ORG  0000H
NSTART:
0000:    F3         DI
0001:    31 FF FF   LD   SP,0FFFFH
0004:    C3 3B 00   JP   003BH
         :

                    ORG  0000H
N88START:
0000:    F3         DI
0001:    31 E1 A0   LD   SP,0E1A0H
0004:    C3 E5 3B   JP   3BE5H
         :

今だから使うPC-88へ戻る

工場のご案内(Top page)へ戻る