以前買った激安中華FPGAでPC8001mを動かしてみようとふと思い立った。
当時3000円程度で買えたが、VGAポートやPS/2ポートもついていた。安いのには訳があって、ロジックエレメントが10Kしかなく、メモリブロックも少ないのであった。
昨今FPGAで古のコンピュータを動かす試みがあって、昔あこがれたPC8001を模倣するPC8001mを試してみることにした。
Githubからソースを落としてQuartus Primeで読み込んでFPGAをEP4CE10E22C8に指定してビルドしてみた。
Fitterでメモリブロックが足らないといわれたので、素直にramを減らしてゆくとビルドが通るようになった。
ピンを配置しようとして、RGBが各4本で書かれていることがわかった。すったもんだしてRGBの配線を各一本に減らすことができた。
assign vga_b = mode ? 1'b0 :
hvalid2 & vvalid2 & lb_out[3] & lb_out[0] ? 1'b1 : 1'b1;
assign vga_r = mode ? 1'b0 :
hvalid2 & vvalid2 & lb_out[3] & lb_out[1] ? 1'b1 : 1'b0;
assign vga_g = mode ?
( hvalid2 & vvalid2 & lb_out[3] ? { lb_out[2:0], 1'b1 } : 1'b0 ) :
( hvalid2 & vvalid2 & lb_out[3] & lb_out[2] ? 1'b1 : 1'b0 );
(crtc.vの440行目あたり)
これで何か出るかなとVGAモニタをつないでみると、何やら文字が出た。
文字が表示されているがなにやらおかしい。メモリを削りすぎたようだ。
職場にオリジナルのPC8001mで使われていたDE0-CVがあったので拝借してメモリをどこまで減らしてもBasicが起動するか確かめたところ、8kBまでは起動した。
現状メインメモリは2kBしかないので、どこかから拝借してくる必要がある。
ソースをよく見てみると外部ROMに結構容量を取られていることがわかったので、これを使わないようにして、メインメモリを8kBにしたところ、n80Basicが起動した。
いろいろ削ってメモリブロックの使用率が80%台になったので、この基板で起動できた。
やれやれw