2007年04月04日

バージョンアップボード7

> 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になるのだろうか?


posted by Shinra at 21:52| Comment(7) | TrackBack(0) | EMU | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
bit 6 についてですが
ご明察通りですね。
実機で確認したところ
bit 6をたててPort FF2にデータを
出力すると期待通り暴走してくれます。
つまりROMエリア0がみえなくなる
ということなのでしょう。

ということでPort FF2は
VA2/3のPort 152と同様の
設計なのでしょう。
Posted by 釜房一号 at 2007年04月06日 19:30
V1/V2モードのROMについてですが、
バージョンアップボードを有効にして、
88エミュレータ用のROM吸い出しツールGETROM.EXE
にて吸い出した結果と、
今回のROMエリア1の吸い出し結果を比較したところ、
問題の1バイトの内容は、バージョンアップモード
なしの初代の内容と一致しました。
つまり、バージョンアップモード上のROM1は
V1/V2モードでは利用されていないということです。

問題の1バイトは何をしているのかが気になります。
場所的にはE0-ROMで、V1モード時 7377番地という
ことになりますが…。
Posted by 釜房一号 at 2007年04月15日 19:38
たびたび恐れ入ります。

V1/V2モードの拡張ROMは
バージョンアップボードが
あろうがなかろうが
旧機種との互換性維持のため
同じPort(71hなど)を使って
バンク切り換えをせざるを
得ないので

必然的に初代本体内のROMを
選択することになりますよね。

そうなるとボード上のROM11は
実にもったいない使われ方を
しているといえますね。
Posted by 釜房一号 at 2007年04月16日 22:02
調査をありがとうございます。

> つまり、バージョンアップモード上のROM1は
> V1/V2モードでは利用されていないということです。

そうでしたか・・・

2段切り替えの可能性もあると思っていました。
Port 71hで拡張ROMを選択したら、ROMエリア1の
F8000h-F9FFFhがV1/V2のメモリ空間に投影される。F8000h-F9FFFhの中身はポート152h、FF2hに従う、など。
でも、そうではないわけですね。
Posted by Shinra at 2007年04月20日 11:34
うーん、I/Oトラップなどを使えば、確かに、Z80コードの
あずかり知らぬところで、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発表後、メーカーで
意識的に変更したということになるのですが…。


※素直に、問題の箇所を逆アセンブルするべきですかね(笑)
Posted by 釜房一号 at 2007年04月20日 16:52
逆アセンブルしてみた結果、
問題の箇所は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

今、ちょっと出先なので、後で実機で試した結果を報告します。
Posted by 釜房一号 at 2007年04月22日 20:08
実機で確認。
バージョンアップボード有効に
しても、先のプログラムは
指定時刻がきても割り込み
がかからない。
V2モードでも同様。

V3モードでは正常動作。

このあたりのROM内容は
恐らく初代PC-8801以来、改変の
必要のない箇所だと思われるので
やはりVA!1のROMの製造ミスだと
思われる。
おまけにこの事実をしってか
しらずかユーザーへのフォロー
はなし…と。

VA2/3の実機ではV1/V2モードでも
正常動作するはず。


Posted by 釜房一号 at 2007年04月22日 21:50
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。