PC-6001mkII/6601 CP/M導入メモ・その3

導入メモその1その2に続き、今度はSR専用版のCP/M BIOSを書いてみました。mkII/6601版をちょっと変えただけのものではあるのですが、せっかくなので公開します。

(2013.11.18追記:代替ROMファイルが破損していたため、正常なものに差し替えました)

CP/Mの画像 CP/Mの画像
PC-6601SRでCP/M。文字サイズを変えられるようにした


目次


特徴

基本的な機能は拙作のPC-6001mkII/6601版BIOSと同じですが、以下のような違いがあります。

  1. 57K CP/M
    ユーザエリアが広くなりました。C7FFhまでがTPAです。
  2. 1DD用
    mkII/66版も1DDにコンバート可能ですが、160KBしか使用できませんでした。SR専用版では1DDの320KBをフルに使えます。ディスクのブロックサイズは2KBで、かつて工学社より販売されていたSR用CP/Mディスクと恐らく互換性があるはずです。動作確認はPC-6601SRで行いましたが、たぶんPC-6001mkIISR+PC-6031SRでも動くのではないかと思います。mkIISR+SD6031では起動確認できました。
  3. 文字サイズ変更可能
    width.comというトランジェントコマンドで、スクリーンサイズ (文字の大きさ) を変更できます。横幅は80か40、行数は25か20です。width 40 25とかwidth 80 20などと入力してください。起動時は80x25です。mkII/66用スクリーン1版のwidth.comと同じ名前ですが別物なので注意してください。
  4. RAMディスク機能搭載
    ROM/RAMカートリッジの拡張RAM領域をRAMディスクとして使えるようにしてみました。ドライブEにアサインされます。PC-6006及びPC-6007SRを使ってテストしましたが、たぶんPC-6006SRでも大丈夫でしょう。ディレクトリ領域として1KB使うため、データ記憶領域の大きさは15KBもしくは63KBになります (自動判定)。電源オフによりデータは消えるので注意してください。
    リセット時にはRAMの内容が保持されるようなので、起動時にディレクトリ領域の先頭バイトを確認し、適正な値 (00h〜0FhもしくはE5h)ならばリセット後と見なし、ファイルシステムの初期化を行わないようにしています。そのため、他の用途で拡張RAM領域を使用した直後、電源を切らずにCP/Mのディスクを入れ、リセットボタンを押して起動すると、誤動作する可能性があります。そういう場合は一旦電源スイッチを切るようにしてください。ちなみに、PC-6007SRでは電源オン直後はFFhと00hが64バイトずつ並ぶようです。PC-6006では一定しませんでしたが、それに近い値になろうとしている感じでした。
  5. 制御コード一部見直し
    ベル(07h)を追加し、1Ch/1Dhによるカーソル左右移動は削除しました。かわりに、カーソルキー入力を08h/0Ah/0Bh/0Ch(^H^J^K^L)に変換するようにしてあります。また、HOME/CLRの入力も有効にしました。SOROC IQ120やADM-3Aという端末と概ね互換になっているはずです。
  6. カーソル常時表示
    mkII/66版では、CONOUTというBIOSルーチンが呼ばれてキー入力待ちになった時のみカーソルを表示させていたのですが、SR版では常時表示するようにしました。そうでないとまともに遊べないゲームがあったので……。鬱陶しい場合は、F1キーを押すことで表示のON/OFFができます。

ディスクイメージの作成

  1. 配布されているソースから、CP/Mのシステムイメージを作成します。手順は導入メモその1にある「CP/Mのアセンブル」の項目を見てください。ただし、CPM22.Z80の14行目の変更は、「MEM EQU 57」とします。
  2. 拙作のSR用BIOS(2013.11.18版)をダウンロードして展開します。
  3. 展開ディレクトリにcpm.binを置き、同梱のcpmdisk-sr.exeを実行します (Windowsの場合)。Windows以外の場合は、srcディレクトリにあるソースをコンパイルして使ってください。
  4. cpm.d88という348848バイトのファイルができます。
  5. NDitt等でディスクに書き込めば実機でCP/Mが起動します。
  6. 同梱のcpmadd-1dd.exeを使うと、ディスクイメージにファイルを追加することができます。コマンドプロンプト上で、cpmadd-1dd input.d88 input1.bin [input2.bin ...] output.d88のようにして使います。Windows以外の場合は、src/cpmadd-1dd.cをコンパイルして使ってください。
    ※指定した出力ファイルが既に存在している場合、問答無用で上書きするので注意してください。(出力ファイルの指定を忘れると、最後の入力ファイルが破壊されます!)

メモリマップ

メモリマップは以下の通りです。SRはVRAMのアドレスを16通りに設定できるのが特徴で、4通りであるmkII/6601に比べると自由度が高く、その分ユーザエリアを広く取ることができました。大体のCP/Mアプリケーションには足りるのではないかと思います。ディスクアクセスのみROM内ルーチンを使用しているので、そのためのワークエリア (ED56h〜ED6Ch) を避けるように配置しました。

表3:SR版メモリマップ (57K CP/M)
アドレス内容
0000h〜 CP/Mワークエリア
0100h〜 TPA (ユーザエリア)
C800h〜 CCP (CP/M シェル部分)
D006h〜 BDOS (CP/M OS部分)
DE00h〜 BIOS
E500h〜 ディスクリード用バッファ
E900h〜 ディスクライト用バッファ
ED00h〜 ROM内ディスクルーチン用ワークエリア
ED80h〜 BDOS用ワークエリア
EF00h〜 割り込みテーブル、BIOS一時スタック
F000h〜 VRAM
FFA0h〜 割り込みルーチン一時スタック


代替ROMファイル

6601用と同じく、SR用の代替ROMファイルを同梱してみました。本来のROMとある程度の互換性があり、エミュレータでsystemrom1.68及びsystemrom2.68の代用品として使えます。とは言っても、拙作のSR用CP/M BIOSが動くための最低限の機能のみの実装です。

実装されているサブルーチンは以下の2個です。


工学社版CP/Mについてのメモ

SR用CP/Mは、かつて工学社より正式に販売されていたことがあります。自分は残念ながら所有していないのですが、雑誌などから抜粋した情報を参考のため書き留めておきます。

I/Oの1987年5月号162〜163ページに「PC-6601SRに5インチFDD[PC-803S1]をつなぐ」という記事があり、この中でSR用CP/Mの販売が告知されています。残念ながらリストの掲載はありませんでした。構成は「56K CP/M V2.2システムディスク+標準ユーティリティ+フルスクリーン・エディタFED66」となっています。CP/M用のアセンブラやCコンパイラも同時購入でき、また料金追加により5インチ2Dへのコンバートも可能でした。

販売については、通販ページのエキスパートサービスコーナーにこの後しばらく記載があります。付属マニュアルはエディタのものだけで、CP/M関係は無し。エキスパートサービスは、開発環境やツールのリスト打ち込みの手間を省くのが主旨のコーナーのようで、マニュアルは基本的に付かないものだったようです。なので、パッケージや一般流通についても無かったのではないかという気がします。

またこれより約2年前、I/Oの1985年8月号にて、第3回I/Oプログラムコンテストの入賞者が発表されており、「PC-6601SR用54K CP/M」が審査員奨励賞を受賞しています。これをそのまま販売したにしては間が空きすぎているのですが、わざわざ移植し直すのも手間でしょうし、関係があるのか無いのかよくわかりません。コンテストの方が54K CP/Mと書かれているのに対し、販売されたものは56K CP/Mとあるので、別物の可能性が高いのではと思いますが、誤植という可能性もあるかもしれません。

1988年に工学社より発売された「CP/M80の世界」(高山信毅)という本には、66SR用のCP/Mを使用した操作や活用の実例が載っています。恐らく工学社版のSR用CP/Mを使用していると思われるのですが、なぜか明言はされていません。I/Oにプログラムリストが掲載されたPC-6001mkII用CP/Mについての言及はあるのですが。この本のプログラムから推測するに、SR用CP/M BIOSは、画面表示などにROM BIOSやE600h-EFFFhのワークエリアを利用して動くように書かれているようです。


おまけ:PS one専用液晶モニタ[SCPH-130]でPC-6001mkII/6601/SRのRGB表示を

なんか書くことが少なかったのでおまけです。CP/Mとは関係のない話ですが。

初代プレイステーションの小型化版であるPS one用の液晶モニタSCPH-130は、15kHzのアナログRGBを表示可能であることが知られています(ビデオ入力も可能)。そこで、昔西田ラヂオさんのところで購入したRGBコンバータでP6のデジタルRGB出力をアナログRGBに変換し、変換ケーブルを作って接続してみました。

解像度があまり高くないのでハッキリクッキリとは行きませんが、まあそれなりには使えます。SRにはビデオ出力が無いので、いざという時の代替モニタとしてはありかもしれません。

SCPH-130の画像


トップ > 雑多なもの > PC-6001mkII/6601 CP/M導入メモ・その3