PC-6001mkII/6601用互換BASIC

PC-6001用に続き、PC-6001mkII/6601用の互換BASICを書いてみました。実機のBASIC ROMの代替品として使用できます。現在、少しずつ対応コマンドを増やしているところ。LGPLでの利用が可能です。

(2020.11.21 Ver.0.3.1を公開しました。

PC-6001mkII/6601用互換BASICの画像
PC-6001mkII/6601用互換BASIC


目次


Ver.0.3.1の状況


使い方

詳細については各エミュレータのマニュアルなどを参照してください。

  1. PC-6001mkII/6601用互換BASIC Ver.0.3.1をダウンロードして展開します。
  2. 展開した中にあるROMファイルをエミュレータの指定するところに置きます。実機から吸い出したファイルが既にある場合、本物を上書きしてしまわないよう注意してください。
  3. PC-6001mkIIで使用する場合はBASICROM.62とVOICEROM.62を、PC-6601で使用する場合はBASICROM.66とVOICEROM.66を使います。(ファイル名が違うだけで中身は同じです)
  4. エミュレータにCRCチェック機能がある場合は無効に、互換ROM使用チェックがある場合は有効にします。
  5. 他に、PC-6001mkIIではKANJIROM.62、CGROM60.62、CGROM60m.62の3ファイル、PC-6601ではKANJIROM.66、CGROM60.66、CGROM66.66の3ファイルが必要です。無い場合は次節を参照してください。(KANJIROMについては、漢字を使用しないのであれば、とにかくサイズ32KBのファイルを用意すれば動く場合が多いようです)

CGROM/KANJIROMファイルについて

エミュレータを動かすためにはフォントファイルが必要です。これについては同梱していませんので、利用者が各自用意する必要があります。方法としては、以下の三つがあると思います。

1.実機から吸い出す

これができれば一番です。詳しくは、Hashiさんのサイトの「BIOS吸出し手順」などを参照してください。

2.公開されているフォントファイルを使う

CGROM60m.62/CGROM66.66に関しては、エミュレータ上で使えるように一から制作された独自のフォントが公開されています。ダウンロードして展開するだけ!ありがたや。

また、CGROM60.62/CGROM60.66に関しては、初代機用のフォントが公開されていて利用できます。mkII/6601ではサイズが8KBである必要があるため、同じものを二つ連結させてサイズを倍にしたものを作成するのが手っ取り早いかと思います。

3.自分で打ち込む

ばんばんさんが制作されたCGROM交換ツール (p6font.exe) を使うと、自分でCGROMファイルを作成できます。写真などを見ながら本物のフォントを再現するのも良いですし、自分ならではのフォントを作成して使うのも面白いかもしれません。

4.他の形式のフォントファイルから変換する

BDF形式のビットマップフォントを元にしてフォントファイルを生成するプログラムを同梱しました。TTFやPCFなど他形式のフォントファイルを使いたい場合は、otf2bdfやpcf2bdfといったBDFへの変換プログラムを併用すればうまくいくかもしれません。

使い方は、コマンドラインより

bdf2cgrom66 fontfile60.bdf [fontfile66.bdf] (CGROM60.66とCGROM66.66が出力される)

bdf2kanjirom 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は、実機から吸い出したBASICROM.66と組み合わせて使用することはできません。実機のCGROM60.66にはフォント以外のデータやプログラムが含まれており、実機BASICROM.66はそれを前提にしているようです。実機BASICROM.66と組み合わせたい場合は、変換したCGROM60.66の前半と実機CGROM60.66の後半を連結したファイルを用意してください。

美咲フォントの画像
美咲フォントのゴシック体を変換した例

おまけ:拡張漢字ROM

エミュレータでの対応はまちまちですが、拡張漢字ROM (PC-6601-01やPC-6007SR) 相当のフォントファイルをBDFファイルから生成するプログラムも同梱しました。出力ファイル形式の違いにより、以下の2種類のプログラムがあります。

プログラム名 形式 対応エミュレータ
bdf2exkanji ksaver/EXKANJI.ROM形式 iP6 Plus 4.9以降、PC-6001Fなど
bdf2extkanji saverkanji/EXTKANJI.ROM形式 iP6 Plus 4.5〜4.8

コマンドラインより

bdf2exkanji [-f] [-jisx0213] [-8 pc8001fie] fontfile.bdf outfile

もしくは

bdf2extkanji [-f] [-jisx0213] [-8 pc8001fie] fontfile.bdf outfile

のように打ち込んで使います。出力ファイルは確認なく上書きするので注意してください。オプションは以下の3種です。

-fオプション
N66/N66SR-BASICでは、フォントファイルの特定のアドレスの値を確認することで拡張漢字ROMの判定をしているようです。そのため異なるフォントで拡張漢字ROMイメージを生成すると、認識されない可能性があります。このオプションを付けるとN66/N66SR-BASICでも認識されるようになりますが、「Y」の文字 (拡張漢字コード89) の字形が崩れます。互換BASICでは判定が緩めなのでオプション無しでも認識します。
-jisx0213オプション
可能であれば、拡張漢字コードの空き部分をJIS X 0213文字で埋めます。
-8オプション
指定したフォントファイル (サイズ2KB) を、PC-8001/8801キャラクタセット相当部分 (拡張漢字コード256-511) にコピーして使用します。PC-8001などを持っている場合は使うと良いでしょう。

拡張漢字ROMの実物データを吸い出したい時は、Windyさんによるksaverや、えすびさんによるsaverkanjiを使うと便利です。ksaverとsaverkanjiとではデータの形式 (並び方) が異なりますが、相互に形式を変換するプログラムを置いておきます。(ソース / Windows用実行ファイル)


旧バージョン


現在判明している不具合


ROM内ルーチン

以下のルーチンのアドレスや入出力レジスタなどをN66-BASICと揃えました。初代機にもあるルーチンについては、PC-6001用互換BASICの解説を参照してください。

アドレス概要 入力出力破壊 詳細
2030h 音階データ - - - O1C〜O1B各音に対応するPSGレジスタ0,1のデータ
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), (FFE8h)〜(FFE9h) CY F,DE A=セクタ数 B=トラック C=開始セクタ DE=アドレス IX=ワークアドレス (IX+0)=ドライブ番号-1 (IX+1Bh)=エラーカウント初期値 読み込み(CY=0/Z=0) チェック(CY=0/Z=1) 書き込み(CY=1) エラーならCY=1 エラーカウントが10回以上になると指定されたアドレスにジャンプ
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, (FFE8h)〜(FFE9h) CY F A=セクタ数 B=トラック C=開始セクタ HL=アドレス IX=ワークアドレス (IX+0)=ドライブ番号-1 読み込み(CY=0/Z=0) チェック(CY=0/Z=1) 書き込み(CY=1) エラーならCY=1 エラーカウントが10回以上になると指定されたアドレスにジャンプ
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)=境界色カラーコード
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)

参考文献


トップ > 雑多なもの > PC-6001mkII/6601用互換BASIC