PC-8001の BASIC ROM Ver 1.0 は、いくつかのバグを抱えています。有名なのはBASICのプログラムを入力する際に、行末の1文字が保存されないとという問題です。これは入力時に スペースでも1文字入れれば回避できるので、かわいいバグなのですが、今回一つ問題な箇所にぶつかりました。それは拡張ROM関連の問題です。
まずその前に、PC-8001 を含む レトロPCで、問題の1つ「カセットテープによるプログラムの保存」です。ターゲットマシンのレトロPCのプログラムを開発する際に、さすがに実機で行うのは気力・体力が持たないので、Windows のテキストエディタと Z80 のアセンブラという快適な開発環境 ( こちらは、また別の機会に紹介します。) で行っているわけですが、エミュレータで実行する分にはいいですが、実機で検証しようとすると、CMT( カセットデータ) 形式で保存したバイナリデータを wavデータにして、カセットに適切な音量で録音。そして当時のデータレコーダで実機に LOAD (PC-8001 は CLOAD) して実行という手間がかかってしまいます。
これを解決する手段として、SD-CARDに保存したCMT形式のファイルを実機で短時間でロードできる 基板を開発した猛者 ( マニアックな方) がいまして、それを利用させていただこうというのが今回のトライです。
GitHub – yanataka60/PC-8001_SD: PC-8001でSD-CARDからCMT形式ファイルのロード、セーブ機能を実現するものです。

さて、話を戻しますが、実はこの素晴らしいデバイスを利用するにあたって、BASIC ROM のバージョンが 1.0 だとバグにより、前述の拡張ROMが認識できないため初期化がされないという問題があるそうで ( 回避方法はありますが ひと手間必要) 、それならばと Ver1.1 にすることにしました。
バイナリデータで違いを比較
PC-8001のBASIC ROM は、下の写真のように 8KB ROM × 3 = 24KB で構成されています。
(その下の空いているソケットは拡張ROMを刺すところ 8KB)

このどの部分に差異があるか、吸い出した ROMデータからバイナリ・エディタで確認します。
ちなみに、それぞれの先頭アドレスは 8KBなので、 $0000, $2000, $4000 です。
ROM0 ($0000-$1FFF)



ROM0 の範囲では、 14バイト 違う箇所がありました。
ROM1 ($2000-$3FFF)
この範囲には、差異はありませんでした。
ROM2($4000-$5FFF)


28バイト違う箇所がありました。
ちなみに、末尾付近を逆コンパイルしたところ、
5FED: INC HL
5FEE: LD A,(HL)
5FEF: CP 42h ; 'B'
5FF1: RET
となっていたので、拡張ROMの仕様として 電源投入時に先頭に $AB があったら拡張ROMのプログラムを実行するというような仕様があったとおもうので、その話の部分かなと勝手に想像。
$17A5で cp 41h した後に、$17A9 で call $5FED されていて、 次が Bなら特別処理という流れになっているので、おそらく間違いないでしょう。
交換対象のROM
ということで、交換対象の ROM は 0と2 の二つであることが判明。
EPROMとEPROMライターを準備
レトロな EPROM の読み書きができるものは、限られているので、Webで事前にリサーチ。
GQ-4×4 というのがいいらしい。

ちょいと高いけどね。 ちなみに BASIC ROM Ver1.1になっている PC-8001をヤフオクで落としたほうが安い (笑)
でも、それでは好奇心が満たされないので、ROMを焼くことにする!
因みに、サポートしているEPROMのリストは下記の通り。2732があるので大丈夫かな。
https://www.mcumall.com/comersus/store/mcumall_TrueUSBWillemsupportICs.asp
ツールのダウンロード
MCUmall a online store for cost for value mcu EPROM EEPROM ATMEL PIC programmer
https://www.mcumall.com/comersus/store/mcumall_download.asp

#2 の USBドライバをダウンロードして、
USBドライバのインストール
GQUSBdriver3.0Win10.64bit.EXEを右クリックして、管理者として実行します。











