> ROMエリア1 バンク0Fh
> ポートFF2h bit7-4=00h バージョンアップボードROM10
> 01h バージョンアップボードROM11
# 正確にはbit7-4ではなく、bit7,5,4のようだ。
# ひょっとしてbit6はROMエリア0のバンク切り替えに関係している?
これに対応。
PLAY文でハングも解消。
釜房一号さんの調査結果も合わせて考えると、
バージョンアップボードにもV1/V2モード用のROMが搭載されている
らしく、音色に関する何かをV1/V2モード用のROMからコピーしていると推測される。
ちなみに、ROMを比較してみると、
VA2/3のROM11 = VupボードのROM11 ≠ VA1のROM11
ただし、VA1のROM11で異なるのは1バイトだけ。
Vupボード搭載時は、V1/V2モード時に使用されるROMも
Vupボード上のROM11になるのだろうか?
2007年04月04日
この記事へのトラックバック


ご明察通りですね。
実機で確認したところ
bit 6をたててPort FF2にデータを
出力すると期待通り暴走してくれます。
つまりROMエリア0がみえなくなる
ということなのでしょう。
ということでPort FF2は
VA2/3のPort 152と同様の
設計なのでしょう。
バージョンアップボードを有効にして、
88エミュレータ用のROM吸い出しツールGETROM.EXE
にて吸い出した結果と、
今回のROMエリア1の吸い出し結果を比較したところ、
問題の1バイトの内容は、バージョンアップモード
なしの初代の内容と一致しました。
つまり、バージョンアップモード上のROM1は
V1/V2モードでは利用されていないということです。
問題の1バイトは何をしているのかが気になります。
場所的にはE0-ROMで、V1モード時 7377番地という
ことになりますが…。
V1/V2モードの拡張ROMは
バージョンアップボードが
あろうがなかろうが
旧機種との互換性維持のため
同じPort(71hなど)を使って
バンク切り換えをせざるを
得ないので
必然的に初代本体内のROMを
選択することになりますよね。
そうなるとボード上のROM11は
実にもったいない使われ方を
しているといえますね。
> つまり、バージョンアップモード上のROM1は
> V1/V2モードでは利用されていないということです。
そうでしたか・・・
2段切り替えの可能性もあると思っていました。
Port 71hで拡張ROMを選択したら、ROMエリア1の
F8000h-F9FFFhがV1/V2のメモリ空間に投影される。F8000h-F9FFFhの中身はポート152h、FF2hに従う、など。
でも、そうではないわけですね。
あずかり知らぬところで、Port 71hなどの「内容」を
変更することは可能かもしれません。
しかしながら、事実としては「やっていない」という
ことでした。
メーカーがそこまでやる必要性を感じなかったということでしょうか。
たった1バイトだし…と。
それどころか、メーカー側が1バイト違うということを認識していない
可能性すらあるんではないかと思っています。
たとえば、製造工程でのアクシデントか何かでVA1のROMだけ変な値が
入ってしまったけど、メーカー的には同じ内容のROMを製造しているつもり
とか…。
ちなみに、某所でPC-8801MAのROMの内容をみさせてもらったのですが、
問題のアドレスの値はVA2/3やバージョンアップボードと同じでした。
こうなると、FH/MHの内容に興味があるところです。
FH/MHはVersion 1.8。FA/MAはVAと同じくVersion 1.9です。
FH/MHでVA2/3と同じだったら、VA1だけが変ということになり、俄然、
製造工程ミス説は強くなります。
逆に、FH/MHでVA1といっしょだったら、VA1発表後、メーカーで
意識的に変更したということになるのですが…。
※素直に、問題の箇所を逆アセンブルするべきですかね(笑)
問題の箇所はN88BASICのOn time$ gosub文で使用する。
指定時刻が現在時刻より前の時に通過する。
つまり、次の日になって、その時刻が来たときに、
ちゃんと割り込みがかかるように、設定値の補正を
するためのルーチンと思われる。
VA2/3、バージョンアップボード、88FA/MAのROMで入っているコードは
19H(ADD HL,DE)
VA1で入っているコードは、
29H(ADD HL,HL)
こんなところに、こんなコードが入っていたら暴走するか、
あるいは、指定時刻がきても割り込みがかからないかのどちらか。
88エミュレータのM88で試してみたら予想通りの暴走。
バイナリエディタで問題の箇所を19Hに訂正したら、正常動作。
サンプルプログラム(V1モードで実行して下さい)
10 TIME$="23:59:58"
20 ON TIME$="00:00:10" GOSUB 1000
30 TIME$ ON
40 LOCATE 0,0:PRINT TIME$;:GOTO 40
50 '
1000 ?"END"
1010 END
今、ちょっと出先なので、後で実機で試した結果を報告します。
バージョンアップボード有効に
しても、先のプログラムは
指定時刻がきても割り込み
がかからない。
V2モードでも同様。
V3モードでは正常動作。
このあたりのROM内容は
恐らく初代PC-8801以来、改変の
必要のない箇所だと思われるので
やはりVA!1のROMの製造ミスだと
思われる。
おまけにこの事実をしってか
しらずかユーザーへのフォロー
はなし…と。
VA2/3の実機ではV1/V2モードでも
正常動作するはず。