PC-6001用に続き、PC-6001mkII/6601用の互換BASICを書いてみました。実機のBASIC ROMの代替品として使用できます。現在、少しずつ対応コマンドを増やしているところ。LGPLでの利用が可能です。
(2024.6.9 Ver.0.5.1を公開しました。)
PC-6001mkII/6601用互換BASIC
詳細については各エミュレータのマニュアルなどを参照してください。
※PC6001VXなどで、エミュレータに内蔵されているバージョンの互換BASIC ROMや互換CGROMを使用する場合はこうした準備は不要です。
エミュレータを動かすためにはフォントファイルが必要です。これについては同梱していませんので、利用者が各自用意する必要があります。方法としては、以下の三つがあると思います。
これができれば一番です。詳しくは、Hashiさんのサイトの「BIOS吸出し手順」やTINY野郎さんのサイトの「新・PC-6001シリーズのBIOSデータをデータレコーダーもフロッピーも使わずにPCに移す」などを参照してください。
実機フォントのドットパターンに依存したプログラムの場合、これ以外の方法ではうまく動かないことがあります。
CGROM60m.62/CGROM66.66に関しては、エミュレータ上で使えるように一から制作された独自のフォントが公開されています。ダウンロードして展開するだけ!ありがたや。
また、CGROM60.62/CGROM60.66に関しては、初代機用のフォントも利用できます。mkII/6601ではサイズが8KBである必要があるため、同じものを二つ連結させてサイズを倍にしたものを作成するのが手っ取り早いかと思います。KANJIROMについては、漢字を使用しないのであれば、とにかくサイズ32KBのファイルを用意すれば動く場合が多いようです。
ばんばんさんが制作されたCGROM交換ツール (p6font.exe) を使うと、自分でCGROMファイルを作成できます。写真などを見ながら本物のフォントを再現するのも良いですし、自分ならではのフォントを作成して使うのも面白いかもしれません。
BDF形式のビットマップフォントを元にしてフォントファイルを生成するプログラムを同梱しました。TTFやPCFなど他形式のフォントファイルを使いたい場合は、otf2bdfやpcf2bdfといったBDFへの変換プログラムを併用すればうまくいくかもしれません。
使い方は、コマンドラインより
bdf2cgrom66 [-ascii] [-ascent] fontfile60.bdf [fontfile66.bdf]
(CGROM60.66とCGROM66.66が出力される)
bdf2kanjirom [-ascent] fontfile.bdf
(KANJIROM.66が出力される)
のように打ち込みます。出力ファイル名は固定で、既にファイルがあれば上書きされます。CGROMについては、CGROM60.66 (モード1-4用8×12フォント) とCGROM66.66 (モード5用8×10フォント) それぞれに対して元ファイルを別個指定することもできます。入力ファイルが1個ならば両方ともそのファイルから生成されます。Windows以外のOSでは、src/bdf2cgrom.cをコンパイルして使ってください。オプションの意味は以下の通りです。
mk2の場合は、CGROM60.62、CGROM60m.62 (エミュレータによってはCGROM62.62)、KANJIROM.62にそれぞれリネームしてください。
※変換したフォントファイルの扱いには十分注意してください。再配布はもちろん、他OSでの使用や変換自体を制限するライセンスのフォントもあるようです。
※モード5のセミグラフィック文字の変換は限定的なものです。BDFファイルに含まれない文字は、機械的に生成したり似たような文字を使ったり二種類の記号をむりやり合成したりするようにしました。また、人間文字はどうにもならないので、●■=のようなフォントになります。
※変換したCGROM60.66をPC-6601で使用する場合、実機から吸い出したBASICROM.66と組み合わせて使用することはできません。実機のCGROM60.66にはフォント以外のデータやプログラムが含まれており、実機BASICROM.66はその部分を利用しているようです。実機BASICROM.66と組み合わせたい場合は、変換したCGROM60.66の先頭6656バイトと実機CGROM60.66の末尾1536バイトを連結したファイルを用意してください。mkIIでBASICROM.62と組み合わせる場合はそのままで使えるはずです。
美咲フォントのゴシック体を変換した例
エミュレータでの対応はまちまちですが、拡張漢字ROM (PC-6601-01やPC-6007SR) 相当のフォントファイルをBDFファイルから生成するプログラムも同梱しました。出力ファイル形式の違いにより、以下の2種類のプログラムがあります。
プログラム名 | 形式 | 対応エミュレータ |
---|---|---|
bdf2exkanji | saverkanji/EXKANJI.ROM形式 | iP6 Plus 4.9以降、PC-6001F、PC6001Vなど |
bdf2extkanji | ksaver/EXTKANJI.ROM形式 | iP6 Plus 4.5〜4.8 |
コマンドラインより
bdf2exkanji [-f] [-jisx0213] [-ascent] [-8 pc8001fie] fontfile.bdf outfile
もしくは
bdf2extkanji [-f] [-jisx0213] [-ascent] [-8 pc8001fie] fontfile.bdf outfile
のように打ち込んで使います。出力ファイルは確認なく上書きするので注意してください。オプションは以下の3種です。
拡張漢字ROMの実物データを吸い出したい時は、Windyさんによるksaverや、えすびさんによるsaverkanjiを使うと便利です。ksaverとsaverkanjiとではデータの形式 (並び方) が異なりますが、相互に形式を変換するプログラムを置いておきます。(ソース / Windows用実行ファイル)
以下のルーチンのアドレスや入出力レジスタなどをN66-BASICと揃えました。初代機にもあるルーチンについては、PC-6001用互換BASICの解説を参照してください。
アドレス | 概要 | 入力 | 出力 | 破壊 | 詳細 |
---|---|---|---|---|---|
2030h | 音階データ | - | - | - | O1C〜O1B各音に対応するPSGレジスタ0,1のデータ |
2698h | ポートF0h出力 | A | - | - | |
397Ah | 10進表示 | A | - | AF,BC,DE,HL | 符号無し |
3995h | BASICモードチェック | - | A,Z | F | A=モード-1 モード5ならZ=0 |
4000h(VOICEROM) | 音声合成 | E,HL | - | AF,BC,DE,HL, AF',BC',D',HL' | E=文字数 HL=文字列アドレス |
4274h | FDDアクセス | A,BC,DE, IX,CY,Z, (IX+0), (IX+1Bh) | CY | F,DE | A=セクタ数 B=トラック C=開始セクタ DE=アドレス IX=ワークアドレス (IX+0)=ドライブ番号-1 (IX+1Bh)=エラーカウント初期値 読み込み(CY=0/Z=0) チェック(CY=0/Z=1) 書き込み(CY=1) エラーならカウント+1してCY=1で返るが、カウントが10回以上になると??IO Error |
42B9h | FDD接続確認 | - | A,Z | F,BC,DE,HL | A=接続FDD数 FDD無しならZ=1 |
51F2h | FATポインタ設定 | A,IX | Z, (IX+0), (FB33h)〜(FB34h) | AF,DE | IX=ワークアドレス A=ドライブ番号-1 Z=0ならリムーブ済 (IX+0)=ドライブ番号-1 (FB33h)=FATポインタ(ドライブポインタ) |
5CFDh | FDDアクセス | A,BC,HL, IX,CY,Z, (IX+0) | CY | F,HL | A=セクタ数 B=トラック C=開始セクタ HL=アドレス IX=ワークアドレス (IX+0)=ドライブ番号-1 読み込み(CY=0/Z=0) チェック(CY=0/Z=1) 書き込み(CY=1) エラーが10回連続すると??IO Error。ただしFAT領域のエラーならCY=1で帰る。破壊レジスタについては資料無し |
63E2h | スクロール(モード5) | HL | - | AF | H=Y上+1 L=Y下+1 指定は行単位。グラフィック画面でも使用可 |
642Fh | 逆スクロール(モード5) | HL | - | AF | H=Y下+1 L=Y上+1 指定は行単位。グラフィック画面でも使用可 |
65CCh | VRAMアドレス変換(モード5) | HL | HL | - | キャラクタモードでのアドレスをグラフィックモードでのアドレスに変換 |
69F3h | 境界色設定(モード5) | A | - | AF,BC | |
6B7Ah | COLOR第3パラメータ実行(モード5) | A,C | - | AF | A=カラーセット-1 C=スクリーンモード-1 |
70E7h | LINE BF(モード5) | BC,DE,(FEADh)〜(FEAEh),(FEAFh)〜(FEB0h),(FEACh),(FE60h) | - | AF,BC,DE | BC=X1 DE=Y1 (FEADh)〜(FEAEh)=X2 (FEAFh)〜(FEB0h)=Y2 (FEACh)=アトリビュート1 (FE60h)=アトリビュート2 |
7122h | LINE B(モード5) | 同上 | - | AF,BC,DE | 同上 |
7161h | PAINT(モード5) | (SP+3)〜(SP),(FEACh),(FEC5h),(FEC6h),(FE60h),(FE61h) | - | AF,BC,DE | (SP+3,SP+2)=X (SP+1,SP)=Y (FEACh)=領域色アトリビュート1 (FE60h)=領域色アトリビュート2(FEC5h)=境界色アトリビュート1 (FE61h)=境界色アトリビュート2 (FEC6h)=境界色カラーコード |
716Ah | PAINT(モード5) | BC,DE,(FEACh),(FEC5h),(FEC6h),(FE60h),(FE61h) | - | AF,BC,DE | BC=X DE=Y (FEACh)=領域色アトリビュート1 (FE60h)=領域色アトリビュート2(FEC5h)=境界色アトリビュート1 (FE61h)=境界色アトリビュート2 (FEC6h)=境界色カラーコード |
72BDh | 漢字表示 | HL,(FEADh)〜(FEAEh),(FEAFh)〜(FEB0h),(FEACh),(FE60h) | BC,DE | - | HL=漢字コード (FEADh)〜(FEAEh)=X (FEAFh)〜(FEB0h)=Y (FEACh)=アトリビュート1 (FE60h)=アトリビュート2 BC=次のX座標 DE=漢字を表示したY座標 |
7381h | グラフィック画面での文字表示 | A | BC,DE | AF,HL | A=文字 BC=次のX座標 DE=漢字を表示したY座標 |
7384h | グラフィック画面での文字表示 | DE | BC,DE | AF,HL | DE=CGROMアドレス BC=次のX座標 DE=漢字を表示したY座標 |
78FFh | ブロック転送 | BC,DE,HL | - | AF,BC,DE,HL | HL=開始アドレス BC=終了アドレス DE=転送先アドレス |
FE8Dh | RAMを読む | HL | A | - | HL=アドレス |
FE93h | RAMでのLDIR | BC,DE,HL | BC,DE,HL | F | 終了後はBC=0,DE=DE+BC,HL=HL+BC,SZCフラグに変化無し |
FE98h | BASIC ROMに切り替え | - | - | - | 0000h-7FFFhをバンク切り替え |
FEA5h | RAMでのLDDR | BC,DE,HL | BC,DE,HL | F | 終了後はBC=0,DE=DE-BC,HL=HL-BC,SZCフラグに変化無し |
以下のBASIC命令についてのアドレスもN60m/N66-BASICと揃えてあります。パラメータ文字列のアドレスをHLに入れてコールすると、各命令と同じ処理を行います。
アドレス | 命令 |
---|---|
4A72h | CIRCLE |
6B4Ah | COLOR |
6B9Bh | SCREEN (モード5) |
70C9h | LINE (モード5) |
7548h | TALK |
以下のワークエリアアドレスについて実機BASICと揃えました。使い方が微妙に異なるなど完全互換になっていないものもあると思うので、参考程度と思ってください。初代機のワークエリアから一部アドレスが変更になっているものもあるので注意が必要です。N60-BASICモードであってもこちらのアドレスになります。
アドレス | 概要 | 詳細 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FA00h〜FA01h | 割り込みアドレス (未使用) | |||||||||||||||||
FA02h〜FA03h | 割り込みアドレス (通常キー入力) | |||||||||||||||||
FA04h〜FA05h | 割り込みアドレス (RS-232C受信) | |||||||||||||||||
FA06h〜FA07h | 割り込みアドレス (2msタイマ) | |||||||||||||||||
FA08h〜FA09h | 割り込みアドレス (CMT受信) | |||||||||||||||||
FA0Ah〜FA0Bh | 割り込みアドレス (未使用) | |||||||||||||||||
FA0Ch〜FA0Dh | 割り込みアドレス (未使用) | |||||||||||||||||
FA0Eh〜FA0Fh | 割り込みアドレス (CMT出力STOP) | |||||||||||||||||
FA10h〜FA11h | 割り込みアドレス (CMT受信STOP) | |||||||||||||||||
FA12h〜FA13h | 割り込みアドレス (CMT受信エラー) | |||||||||||||||||
FA14h〜FA15h | 割り込みアドレス (特殊キー入力) | |||||||||||||||||
FA16h〜FA17h | 割り込みアドレス (ゲームキー問い合わせ応答) | |||||||||||||||||
FA18h | STOPキーフラグ | 03h=STOP 1Bh=ESC | ||||||||||||||||
FA19h | CMT受信フラグ | bit1=受信 bit4=エラー | ||||||||||||||||
FA1Ah | 入力デバイス | 0=キーボード 2=RS-232C 80h〜FFh=テープ | ||||||||||||||||
FA1Dh | CMT受信データ | |||||||||||||||||
FA1Eh | CLOAD時の*点滅状態 | |||||||||||||||||
FA1Fh | ボーレート | 00h=600ボー FFh=1200ボー | ||||||||||||||||
FA20h | 画面縦サイズ | 10h | ||||||||||||||||
FA27h | ポートB0hに出力した値 | 1B54hで使用 | ||||||||||||||||
FA28h〜FA2Bh | TIME用データ | 約2msごとに+2 | ||||||||||||||||
FA2Dh | CONSOLE第4パラメータ | クリック音発生フラグ | ||||||||||||||||
FA2Eh | カーソル点滅フラグ | 00h=点滅させない 01h=点滅させる | ||||||||||||||||
FA2Fh | カーソル反転状態 | 00h=ノーマル FFh=反転 | ||||||||||||||||
FA30h | グラフィックキー用ワーク | |||||||||||||||||
FA31h | グラフィックキーフラグ | 00hか14h | ||||||||||||||||
FA32h | ファンクションキー用カウンタ | FB8Dhと組み合わせて入力処理される | ||||||||||||||||
FA51h〜FA55h | 乱数シード | |||||||||||||||||
FA57h | プリンタヘッド位置 | |||||||||||||||||
FA58h | 出力デバイス | 0=CRT 1=プリンタ 2=RS-232C 80h〜FFh=テープ | ||||||||||||||||
FA5Ah | 特殊キーフラグ | ビット0=CAPS ビット1=SHIFT+PAGE ビット2=かな ビット3=MODE | ||||||||||||||||
FA5Bh〜FA5Ch | SPの初期値 | |||||||||||||||||
FA5Dh〜FA5Eh | BASIC実行中の行番号 | |||||||||||||||||
FA5Fh〜FA60h | BASICプログラム開始アドレス | モード1,3=C401h モード2,4=8401h モード5ページ1,2,3,4=8001h,8001h,8801h,C801h | ||||||||||||||||
FA61h〜FAE4h | BASIC命令ジャンプテーブル | 中間言語80h〜C1h | ||||||||||||||||
FAE5h〜FB30h | BASIC関数ジャンプテーブル | 中間言語D4h〜F9h | ||||||||||||||||
FB31h | ファイル数 | |||||||||||||||||
FB33h〜FB34h | FATバッファのアドレス | |||||||||||||||||
FB35h〜FB36h | ファイルバッファのアドレステーブルのアドレス | |||||||||||||||||
FB37h〜FB38h | 0番バッファのデータアドレス | |||||||||||||||||
FB39h〜FB3Ah | 操作中のファイルバッファのアドレス | |||||||||||||||||
FB3Bh | ドライブ数 | |||||||||||||||||
FB3Dh〜FB8Ch | ファンクションキー文字列 | 8文字×10 | ||||||||||||||||
FB8Dh | ファンクションキーアドレス | FA32hと組み合わせて入力処理される | ||||||||||||||||
FB8Fh | キーバッファに入れる位置 | 00h〜3Fh | ||||||||||||||||
FB90h | キーバッファから出す位置 | 00h〜3Fh | ||||||||||||||||
FB92h | 最大バッファ位置 | 3Fh | ||||||||||||||||
FB93h〜FB94h | キーバッファアドレス | FBB9h | ||||||||||||||||
FB95h〜FB9Ah | RS-232C用バッファ制御 | 役割はFB8Fh〜FB94hと同じ, アドレスはFBF9hを指す | ||||||||||||||||
FBA1h〜FBA6h | PLAYチャンネルAバッファ制御 | 役割はFB8Fh〜FB94hと同じ, アドレスはFC39hを指す | ||||||||||||||||
FBA7h〜FBACh | PLAYチャンネルBバッファ制御 | 役割はFB8Fh〜FB94hと同じ, アドレスはFC79hを指す | ||||||||||||||||
FBADh〜FBB2h | PLAYチャンネルCバッファ制御 | 役割はFB8Fh〜FB94hと同じ, アドレスはFCB9hを指す | ||||||||||||||||
FBB9h〜FBF8h | キー入力バッファ | |||||||||||||||||
FBF9h〜FC38h | RS-232Cバッファ | |||||||||||||||||
FC39h〜FC78h | PLAYチャンネルAバッファ | |||||||||||||||||
FC79h〜FCB8h | PLAYチャンネルBバッファ | |||||||||||||||||
FCB9h〜FCF8h | PLAYチャンネルCバッファ | |||||||||||||||||
FCF9h | Fレジスタの値 | MON用 | ||||||||||||||||
FCFAh | Aレジスタの値 | MON用 | ||||||||||||||||
FCFBh | Cレジスタの値 | MON用 | ||||||||||||||||
FCFCh | Bレジスタの値 | MON用 | ||||||||||||||||
FCFDh | Eレジスタの値 | MON用 | ||||||||||||||||
FCFEh | Dレジスタの値 | MON用 | ||||||||||||||||
FCFFh | Lレジスタの値 | MON用 | ||||||||||||||||
FD00h | Hレジスタの値 | MON用 | ||||||||||||||||
FD02h〜FD03h | PCレジスタの値 | MON用 | ||||||||||||||||
FD04h〜FD05h | SPレジスタの値 | MON用 | ||||||||||||||||
FD06h〜FD07h | ブレークポイントアドレス1 | MON用 | ||||||||||||||||
FD08h〜FD09h | ブレークポイントのデータ退避1 | MON用 | ||||||||||||||||
FD0Ah〜FD0Bh | ブレークポイントアドレス2 | MON用 | ||||||||||||||||
FD0Ch〜FD0Dh | ブレークポイントのデータ退避2 | MON用 | ||||||||||||||||
FD14h | PLAYチャンネル | 00h〜02h | ||||||||||||||||
FD15h | V,S退避 | |||||||||||||||||
FD17h | PLAY文字数 | |||||||||||||||||
FD18h | PLAY文字列アドレス | |||||||||||||||||
FD1Bh | 演奏状態 | ビット0,1,2=チャンネルA,B,C(1=演奏中) | ||||||||||||||||
FD1Dh〜FD1Eh | チャンネルA 音符残り時間 | |||||||||||||||||
FD1Fh | チャンネルA 文字数 | |||||||||||||||||
FD20h〜FD21h | チャンネルA 文字列アドレス | |||||||||||||||||
FD2Ch | チャンネルA O値 | |||||||||||||||||
FD2Dh | チャンネルA L値 | |||||||||||||||||
FD2Eh | チャンネルA T値 | |||||||||||||||||
FD2Fh | チャンネルA V,S値 | |||||||||||||||||
FD30h〜FD31h | チャンネルA M値 | |||||||||||||||||
FD42h〜FD66h | チャンネルBワーク | 役割はFD1Dh〜FD41hと同じ | ||||||||||||||||
FD67h〜FD8Bh | チャンネルCワーク | 役割はFD1Dh〜FD41hと同じ | ||||||||||||||||
FD8Ch | ページ数 | 01h〜04h | ||||||||||||||||
FD8Dh〜FD8Eh | BASICエリア最終アドレス | |||||||||||||||||
FD8Fh | SCREEN第2パラメータ-1 | アクティブ画面 | ||||||||||||||||
FD90h | SCREEN第3パラメータ-1 | 表示画面 | ||||||||||||||||
FD91h | VRAMアドレス上位バイト | |||||||||||||||||
FD92h | SCREEN第1パラメータ-1 | スクリーンモード | ||||||||||||||||
FD93h | COLOR第1パラメータ | |||||||||||||||||
FD94h | COLOR第2パラメータ | |||||||||||||||||
FD95h | COLOR第3パラメータ | 出力用に処理された後の値 | ||||||||||||||||
FD96h〜FD98h | スクリーンモード1のCOLORパラメータ | |||||||||||||||||
FD99h〜FD9Bh | スクリーンモード1のCOLORパラメータ | |||||||||||||||||
FD9Ch〜FD9Eh | スクリーンモード1のCOLORパラメータ | |||||||||||||||||
FD9Fh〜FDA1h | スクリーンモード1のCOLORパラメータ | |||||||||||||||||
FDA2h | CONSOLE開始行+1 | 01h〜10h | ||||||||||||||||
FDA3h | CONSOLE最終行+1 | 01h〜10h | ||||||||||||||||
FDA4h | CONSOLE開始行+1 | 01h〜10h | ||||||||||||||||
FDA5h | 表示最終行 (テキストモードなら(FDA3h)-(FDA6h)) | 01h〜10h | ||||||||||||||||
FDA6h | CONSOLE第3パラメータ | ファンクションキー表示フラグ | ||||||||||||||||
FDA7h | ファンクションキー表示状態 | |||||||||||||||||
FDA8h | カーソル位置Y+1 | 01h〜10h | ||||||||||||||||
FDA9h | カーソル位置X+1 | 01h〜20h | ||||||||||||||||
FDAAh | カーソルアドレス | |||||||||||||||||
FDACh | 画面横サイズ | 10hか20h | ||||||||||||||||
FDAEh〜FDAFh | グラフィック命令X座標 | |||||||||||||||||
FDB0h〜FDB1h | グラフィック命令Y座標 | |||||||||||||||||
FDB5h〜FDB7h | 前の行との接続状態 | 下のビットから順に1行1ビット, 0=接続している | ||||||||||||||||
FDB9h〜FDE0h | ページ1用ワーク | 役割はFD91h〜FDB7hと同じ | ||||||||||||||||
FDE1h〜FE08h | ページ2用ワーク | 役割はFD91h〜FDB7hと同じ | ||||||||||||||||
FE09h〜FE30h | ページ3用ワーク | 役割はFD91h〜FDB7hと同じ | ||||||||||||||||
FE31h〜FE58h | ページ4用ワーク | 役割はFD91h〜FDC7hと同じ | ||||||||||||||||
FE59h〜FE5Ah | スクリーンエディタのカーソル初期位置 | |||||||||||||||||
FE5Bh | スクリーンエディタのカーソルX座標最大値 | 01h〜20h | ||||||||||||||||
FE5Ch | INSフラグ | FFh=インサートモード | ||||||||||||||||
FE5Eh | STOP時のSCREEN第2パラメータ-1 | アクティブ画面 | ||||||||||||||||
FE5Fh | STOP時のSCREEN第3パラメータ-1 | 表示画面 | ||||||||||||||||
FE60h | アトリビュートデータ2 | |||||||||||||||||
FE61h | 境界色アトリビュート2 | |||||||||||||||||
FE65h | BASICモード-1 | |||||||||||||||||
FEACh | アトリビュートデータ1 | |||||||||||||||||
FEADh〜FEAEh | グラフィック命令X座標 | |||||||||||||||||
FEAFh〜FEB0h | グラフィック命令Y座標 | |||||||||||||||||
FEC5h | PAINT境界色アトリビュート1 | |||||||||||||||||
FEC6h | PAINT境界色カラーコード | |||||||||||||||||
FEC7h | ファンクションキーを表示できる文字数 | モード1〜4=5 モード5=6 | ||||||||||||||||
FECAh | ゲームキー状態 | 1061hを呼ぶことなどで更新される
| ||||||||||||||||
FED1h〜FED6h | CLOADファイル名 | |||||||||||||||||
FED8h | CLOAD?フラグ | 00h=CLOAD FFh=CLOAD? | ||||||||||||||||
FEDAh〜FF21h | スクリーンエディタ用入力バッファ | 71文字 | ||||||||||||||||
FF25h | 型 | 00h=数値 01h=文字 | ||||||||||||||||
FF27h | 文字領域最終アドレス | |||||||||||||||||
FF29h | BASIC領域開始アドレス | モード1,3=C400h モード2,4=8400h モード5ページ1,2,3,4=8000h,8000h,8800h,C800h | ||||||||||||||||
FF2Dh〜FF30h | ストリングディスクリプタ1 | |||||||||||||||||
FF31h〜FF34h | ストリングディスクリプタ2 | |||||||||||||||||
FF35h〜FF38h | ストリングディスクリプタ3 | |||||||||||||||||
FF39h〜FF3Ch | ストリングディスクリプタ4 | |||||||||||||||||
FF3Dh〜FF3Eh | 文字領域使用中開始アドレス-1 | |||||||||||||||||
FF45h〜FF46h | DATA文行番号 | |||||||||||||||||
FF4Eh〜FF4Fh | BASIC実行アドレス | |||||||||||||||||
FF52h〜FF53h | STOP時の行番号 | |||||||||||||||||
FF54h〜FF55h | STOP時のアドレス | |||||||||||||||||
FF56h〜FF57h | 変数領域開始アドレス | |||||||||||||||||
FF58h〜FF59h | 配列領域開始アドレス | |||||||||||||||||
FF5Ah〜FF5Bh | フリーエリア開始アドレス | |||||||||||||||||
FF5Ch〜FF5Dh | DATAコマンド用アドレス | |||||||||||||||||
FF5Eh〜FF5Fh | FN()変数名 | |||||||||||||||||
FF60h〜FF64h | FN()引数の値 | |||||||||||||||||
FF66h〜FF6Ah | フローティングアキュムレータ1 | |||||||||||||||||
FF6Dh〜FF71h | フローティングアキュムレータ2 | |||||||||||||||||
FF72h〜FF76h | フローティングアキュムレータ3 | |||||||||||||||||
FF93h〜FF95h | スクリーンエディタ用フック | |||||||||||||||||
FF99h〜FF9Bh | リンクポインタ更新用フック | |||||||||||||||||
FFD8h〜FFDAh | STOPキー用フック | |||||||||||||||||
FFDBh〜FFDDh | RST 18H用フック | |||||||||||||||||
FFE1h〜FFE3h | RST 38H用フック | |||||||||||||||||
FFE6h | CIRCLEのアスペクト比 | |||||||||||||||||
FFFCh〜FFFDh | FATバッファのアドレステーブルのアドレス |
また、モード3〜5では、IXレジスタが指す付近のアドレスもワークエリアとして使っています。
アドレス | 概要 | 詳細 |
---|---|---|
IX+00h | ドライブ番号-1 | |
IX+02h | セクタ | |
IX+03h | Rオプションの有無 | LOAD, BLOAD |
IX+05h | ファイル名バッファ1 | 拡張子含め9バイト |
IX+0Eh | ファイル名バッファ2 | 拡張子含め9バイト |
IX+18h | ASCII形式かどうか | 00h=ASCII形式以外 |
IX+19h | BLOADでのアドレス指定 | 01h=指定なし FFh=あり |
IX+1Bh | エラーカウンタ | 4274hなどで使用 |
IX+2Bh | PAD() X座標 | |
IX+2Ch | PAD() Y座標 |
IXの値は以下の通りです。
モード | ページ | IX |
---|---|---|
3,4 | 1 | F9D2h |
2 | DFD2h | |
3 | BFD2h | |
4 | 9FD2h | |
5 | F9D2h |
トップ > 雑多なもの > PC-6001mkII/6601用互換BASIC