CPU実験室

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

ROMスプリッタ

ハードの準備がほぼ完了したので、通例だとこのあとの手順は

メモリの動作確認→シリアル入出力の確認→原始モニタの搭載→テストプログラムでハードウェア各部の詳細動作確認→高機能モニタの搭載

と進めるのですが486CPUに関しては既に動作実績のあるボードがあってモニタも完成していることと、ROMの抜き差しをあまりしたくないというのもあって途中すっ飛ばして一気に高機能モニタの移植をしてしまいます。

8086/V50/V53/80286/80386ボードで共通のモニタのソースコードの本体はCで書かれていて、シリアルコントローラがi8251から今回Am85C30に変わったので初期化ルーチンと1文字入出力ルーチンの差し替えのみ。実メモリへのリロケーションは同じなのでリンケージ指示は手直し無しでLSI-C86コンパイルできました

で、出来上がった1本のHEXファイル。これをROMに焼こうとしてハタと困りました。HEXファイルをバッファに展開したメモリイメージを以下のように2個のROMに分割しなければなりません

ROMライタのファイル読取りアライメント指定はプルダウンで選択できるように作っていて現状

 ALL:       全て(8ビットバスに8ビット幅ROMを配置)
 WORD(H/L):    16ビットバスを8ビット幅ROMで偶奇で分割
 DWORD(0/1/2/3):   32ビットバスを8ビット幅ROMでmod4で分割

でしたがこれでは対応できないので新たに

 DWORD(H/L):         32ビットバスを16ビット幅ROMで1wordづつ分割

を加えました

これでモニタのコードをROMの0x00000番地(システム側からは0x00080000)に配置、リセットベクタであるROMの0x1FFFC番地(システム側からは0xFFFFFFF0)にセグメント間ジャンプコードJMP far ptr 8000:000(EA/00/00/00/80)を埋め込んで2個のROMにスプリットさせました