2021-02-06 23:44 — asano
カテゴリー:
これまで不明だったリセット解除直後のX'0000'番地からのI/Oリード、X'0000'以外の値を返したら何が起きるか?ということでその3で予告したIORサイクルでデータバスに値を送り込む回路を追加しました。
下に並ぶショートピンの群れは値の設定用、8ビットのところで区切りがわかるように空けておきます。写真の状態でX'F010'を設定しています。
右上端のショートピンは74LS139でデコードしたIORを74LS541に供給するためのもの、抜けば"H"に固定されるので以前と同じ動作になります。
これで準備が終わったので値を変えて試してみることにします。
これまで結果的にX'0000'で動かしていたので、まずはX'0001'でやってみます。
するとこれまでIORに続いてX'0002', X'0003'のメモリリードが発生していたものが、X'0003', X'0004'のリードに変わりました。
それではということでX'0100'にしてみるとX'0102', X'0103'のリードになります。
どうやらIORに返した値+2,+3からリードし、+3から読んだアドレスから実行開始するようです。+2から読んだ値はSTR
の初期値でしょうか。なぜ+0,+1ではなくて+2,+3なのか不思議ですが。
これはありがたいことです。
アドレスX'0000'~X'0005'は割り込み時のSTR
, IC
の退避エリアなのでRAMを配置したいのですが、実行開始アドレスはROMでなくてはなりません。これが無いとリセット時のみROMを見せるなどの細工が必要になってきてしまいます。
実行開始アドレスを好きなアドレスから読めるならゼロページをすべてRAMにできます。IORに応答する回路は必要ですが、面倒ならデータバスのプルアップ・プルダウンで済ませてしまうこともできます。
コメントを追加