カセットポン ROM のヘッダー 投稿者:西田 投稿日:2008/07/25(Fri) 15:56 No.2354 | |
|
自分だけでは解決出来そうにないので、皆さんのお力をお貸し下さい。
markn さんの SD カードリーダ用の ROM を作っています。
P6 では、ROM の先頭が 'AB' だとオートスタートします。そのまま RET すると、BASIC になります。積んである RAM 容量によって、16K 又は 32K モードで BASIC が立ち上がります。 mkII は、RAM が沢山あるにもかかわらず 16K モード(モード1)で立ち上がってしまいます。その代わり、先頭が 'CD' だと、RET 後に BASIC モード選択画面になり、モードを選べます。
わからないのは SR での ROM 起動です。SD カードリーダは初代機モードでしか動かないので、モード1、モード2で立ち上げたいのです。ヘッダーで何を書けば良いのでしょうか?
|
| Re: カセットポン ROM のヘッダー Bernie - 2008/07/27(Sun) 13:39 No.2360 | |
|
|
6001,mkII,6601は"AB"と"CD"の認識IDがありますが、SRはそれに加えて"EF"もチェックしています。 実際に確認はしていませんが、おそらくSRモードでの起動IDなのでしょう。
そういえばSRの音声合成BIOSを解析していたときに発見したのですが、起動処理で"CD"チェックをやろうとしているにも関わらずレジスタの比較が行われていないというバグらしき箇所がありました。 なので、SR機種では"CD"ヘッダのEXTROMを認識しないと思われます。
|
| Re: カセットポン ROM のヘッダー markn - 2008/07/29(Tue) 05:02 No.2361 | |
|
|
> SD カードリーダは初代機モードでしか動かないので、
そうなんですか?
私は実機を持っていないので確認はできないのですが、持っている資料を見る限りでは使用しているBIOSルーチンとI/OポートはmkIIでも同じように見えるのですが、無理ですかねぇ。利用しているアドレスか、バンク切り替えの問題かな?
BASICプログラムのロードなどは、ちゃんとBASICスタートアドレスを判別してロードし、ロード後のベクタ書き換えも行っているのですが...。 |
| Re: カセットポン ROM のヘッダー 西田 - 2008/07/29(Tue) 10:10 No.2362 | |
|
|
>Bernie さん ありがとうございます。なるほど、やはり EF があるんですね。試してみます。
>markn さん そうなんですよ。mkII で試したところ、モード1と2では動作するのですが、モード3と4(N60 拡張 BASIC) とモード5 (N60m BASIC) では動作しないんです。SD でベクタを書き換えた瞬間に暴走するのですよ。。。もう少し調べましょうか? |
| Re: カセットポン ROM のヘッダー 西田 - 2008/07/29(Tue) 11:35 No.2363 | |
|
|
そう言えば、思い出しました。モード3以上は、6000-8000 が BASIC ROM なんですね。以前考えた事を、mixi で markn さんに宛てたメッセージに書いていましたので、ここに貼付けさせて頂きます。以下のハード改造は、皆さんお持ちのベルーガで対応済みのはずです。
--------
SDカードリーダの件で、少し考えたのでメッセージいたします。
出来れば mkII 使用時には、64K 全ての RAM に読み込みしたいのです。 そこで、カートリッジに少し細工すれば、外部 RAM をライトディスエーブル できるようにできることがわかりました。具体的には、ROM バンク切り換え用 のポート 7X のビット4が H ならば、外部 RAM をライトディスエーブルに するのです。残念ながら、6000-8000 のみをライトディスエーブルにする、 というような事は出来なくて、6000-BFFF すべてがライトディスエーブルに なってしまいますが。。。
あとでメールで資料をお送りしますが、mkII では メインメモリのライトイネーブル/ディスエーブルを制御できます。
SD を実行したら最初にメインメモリの4000-7FFFのみを ライトディスエーブルにして(OUT F2,51)、 外部 RAM をライトイネーブルにして(デフォルト、OUT 7X,XXX0XXXX) SD リーダを動かし、
個々の読み込みデータをメモリに書込む時のみ、 メインメモリを全てライトイネーブル(OUT F2,55)に、 アドレスが8000以下ならば、外部 RAM をライトディスエーブル(OUT 7X,XXX1XXXX)にして、 データを書込み、
書き込みが終わったら元に戻す
ということを繰り返せば良いのではないか、と思います。
8000 以下、というのを判定するのが面倒ですが、もう一つの方法があります。 それは、外部 RAM のライトイネーブルを制御できるかわりに、 「外部 RAM の 6000-7FFF のアクセスを制御できる」 ようにすることです。 つまり、ポート 7X に XXX1XXXX を出力すると、6000-7FFF の領域は リードもライトも出来なくなります。 これも、簡単な配線の変更で可能です。
どちらも、部品の追加なく、多少のパターンカット&配線で出来ます。
欲張りな仕様なので(笑)もし興味があってお時間があれば、で結構ですよわーい(嬉しい顔)
|
| Re: カセットポン ROM のヘッダー markn - 2008/07/29(Tue) 16:27 No.2364 | |
|
|
あああ、このメッセージの存在を忘れていました。すみません。
> モード3以上は、6000-8000 が BASIC ROM
厳密には、 モード3、モード4 4000-6000が拡張BASIC モード5 4000-8000がmkII用BASIC ではないでしょうか。拡張BASICは8kBだったと思いますので。
いただいた資料を見ると、読込はROM、書込はRAMといったことができるようなので、SD-OSの実行は問題ないですね。ただ、SD-OSはデータ領域とスタック領域を6000-7fffのエリアに取っているので、この部分に読み書きするときの制御が難しい、という問題があります。 スタックは移動が可能ですが、データ領域はstaticなので移動がききませんし、どこに移動しても同じ問題が発生する気がするのですが。
なお、現在の最新版では、データ領域のサイズはスタックも入れて0x500バイト(1.25kB)です。技術的にはがんばれば減らせないこともないですが、パフォーマンスとのトレードオフになります。
|
| Re: カセットポン ROM のヘッダー 西田 - 2008/07/29(Tue) 19:03 No.2365 | |
|
|
6000 - 7FFF は、SRAM でやれば良いですね。てか、既にそうなってるのかな?mkII/66 では、メインの RAM を書き込み禁止にできるのです。データをロードするときだけ、一時的にメインの RAM の書き込みを許可し、SRAM を書き込み禁止にすることは出来ないでしょうか?
|
| Re: カセットポン ROM のヘッダー markn - 2008/07/29(Tue) 21:19 No.2366 | |
|
|
mkIIモードのときはロードしたデータの書き込み先を常に内蔵RAMにするということですね. バイトごとに out 0xf2, 0x55 out 0x70, 0x10 ロードしたバイトを書き込む out 0x70, 0x00 out 0xf2, 0x51 という切り替えが必要となりスピードは遅くなりますが、可能は可能です.
ただ、SD-OSの内部でSRAMのスタック領域にロードすることもあるので、制御が少し難しいですね.
|
|