CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

チップイレーズ

rom_poke()という関数はこれを呼べばメモリセルにそのデータが固定されるわけではなくROM内部の制御レジスタに書かれるだけです。本当のプログラムのためには一連のアドレス/データを次々に書き込むコマンドシーケンスを実行することになります。

たとえばチップ内全てのセルを消去するchip eraseは以下のように6バイトのシーケンスが必要です。さすがにどんなにプログラムが暴走してもこのパタンが誤って与えられることはないでしょう

f:id:O3I:20220402160007j:plain

chip eraseを実行する関数は以下のようになりました。

f:id:O3I:20220402155744j:plain

ところがこれが全く動作しません(手持ちのROM内容がオール00だったのでチップイレーズが機能するとオールFFになるはず)。programコマンドもやはりだめでどこか間違っているみたいです

 

ソフト的には問題なさそうなのでハードを少し追ってみました。PICがROMに与えているアドレスとデータバスですが、うちアドレスA0..A7はポートAのRA0..RA7に割り当てています。

f:id:O3I:20220402155813j:plain

RA6RA7は外付け水晶の接続端子と多重化されていますが、ここは発振器のコンフィグレーションはINTOSCIOにしてあるのでデジタル出力として使えるはずです。これはセーフでしたが、さらによくよく見てみると・・

 

うわ・・やらかしてます

f:id:O3I:20220402155832j:plain

 

A6A7の接続がテレコになっちゃってます(またまたこのパタン)

これでは所定のアドレスにコマンドが与えられないので実行されない訳です