PC-6601用互換BASIC

PC-6001用に続き、PC-6601用の互換BASICを書いてみました。まだ動き始めたばかりといったところです。

PC-6601用互換BASICの画像
PC-6601用互換BASIC


目次


Ver.0.1の状況


使い方

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

  1. PC-6601用互換BASIC Ver.0.1をダウンロードして展開します。
  2. 展開した中にあるBASICROM.66とVOICEROM.66をエミュレータの指定するところに置きます。実機から吸い出したファイルが既にある場合、本物を上書きしてしまわないよう注意してください。
  3. 機種は「PC-6601」を選択します。
  4. エミュレータにCRCチェック機能がある場合は無効にします。
  5. 他に、KANJIROM.66、CGROM60.66、CGROM66.66の3ファイルが必要です。無い場合は次節を参照してください。

KANJIROM/CGROMファイルについて

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

1.実機から吸い出す

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

2.自分で打ち込む

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

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

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

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

bdf2kanjirom fontfile.bdf (KANJIROM.66が出力される)

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

のように打ち込みます。出力ファイル名は固定で、既にファイルがあれば上書きされます。CGROMについては、CGROM60.66 (モード1-4用8×12フォント) とCGROM66.66 (モード5用8×10フォント) それぞれに対して元ファイルを別個指定することもできます。入力ファイルが1個ならば両方ともそのファイルから生成されます。Windows以外のOSでは、src/bdf2cgrom.cをコンパイルして使ってください。

※変換したフォントファイルの扱いには十分注意してください。再配布はもちろん、他OSでの使用や変換自体を制限するライセンスのフォントもあるようです。

※モード5のセミグラフィック文字の変換は限定的なものです。BDFファイルに含まれない文字は、機械的に生成したり似たような文字を使ったり二種類の記号をむりやり合成したりするようにしましたが、当てはめようのない文字は下駄記号としました。また、人間文字はどうにもならないので、●■=のようなフォントになります。

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

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


現在判明している不具合


ROM内ルーチン

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

アドレス概要 入力出力破壊 詳細
2030h 音階データ - - - O1C〜O1B各音に対応するPSGレジスタ0,1のデータ
397Ah 10進表示 A - AF,BC,DE,HL 符号無し
4000h(VOICEROM) 音声合成 E,HL - AF,BC,DE,HL, AF',BC',D',HL' E=文字数 HL=文字列アドレス
4274h FDDアクセス A,BC,DE, IX,CY,Z, (FFE8h)〜(FFE9h) CY DE A=セクタ数 B=トラック C=開始セクタ DE=アドレス IX=ワークアドレス (IX+0)=ドライブ番号 (IX+11h)=エラーカウント初期値 読み込み(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
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 - キャラクタモードでのアドレスをグラフィックモードでのアドレスに変換
69F3 境界色設定(モード5) A - AF,BC
6B7A COLOR第3パラメータ実行(モード5) A,C - AF A=1〜6 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 同上
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フラグに変化無し

参考文献


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