先日作成したZ80 CPUボードのようにSBC8080バスにつながる 128kB SRAMメモリーボードを作ってみたいと思います。
メモリーレイアウト案
128kBメモリーは オレンジピコや秋月電子で売っている 628128型の128kB SRAMを使います。(秋月電子で売ってるSOP型も変換基盤でDIPにしてそのうち使いたい…)
128kBのスタティックメモリーが数百円で買えるなんて….
メモリーレイアウトは以下の通りで、ROMを0000h〜3FFFh(16kB)、RAMは固定域として4000h〜7FFFh(16kB)、バンク切り替え領域として8000h〜FFFFh(32kB)にしてみます。(スタック領域として使われている部分を切り替えちゃいますが….)
当初ROM領域は8kBで良いかと思っていたのですが、SBC8080データパックの機械語モニタ+BASICが8kBを超えていたので16kBにしました。
8000h以降はアドレスバスのA15が”H”レベルとなります。その信号と、別に作るバンクレジスタ2bitを合体させて、 628128型メモリーのアドレスバスA16、A15ピンに与えてやることでバンク切り替えしたいと思います。
バンク切り替えした時に切り替えたプログラムもどこかへ行ってしまうと厄介なので、16kBの固定RAM領域を作っておきました。
バンクレジスタの試作
前述のとおりバンクレジスタは2bitあれば良いので、当初はPPI(8255A)で作ることも考えたのですが8回路Dラッチ(74HC573)で行けるのでは?と考えてブレッドボードで回路を試作してLチカをやってみました。
回路図はこちら。
- Z80/8080のI/O書き込み要求信号(IOWR)とI/Oアドレスデコーダ(この回路図では74HC138)の信号(I/Oアドレス40h)をAND回路であわせ双方が”L”レベル(負論理で”1″)の時にデータバスに出ている情報をラッチさせます。
- 74HC573のラッチイネーブル(LE)端子は正論理(端子名にオーバーラインなし)なので、”H”レベルとするため 74HC04のNOT回路を通して反転させています。
- 74HC573はCMOSゲートなのでLEDをそのままつないでいます。
[2018/8/11] 当初掲載した回路図のLEDの向きが逆だったので修正しました…orz
実装したブレッドボードの写真はこちらです。
プログラムはこんな感じで、いつものGrant’s BASICでOUT命令を並べてみました。
試作回路では74HC138でI/Oアドレス40hにデコードしたので、OUT &h40,xx という感じでバンク番号を出力する感じです。(今回はメモリーではなくLEDを光らせているだけですけど….)
10 REM 74HC573 LED BLINK 20 OUT &H40,0 30 GOSUB 1000 40 OUT &H40,1 50 GOSUB 1000 60 OUT &H40,2 70 GOSUB 1000 80 OUT &H40,3 90 GOSUB 1000 100 GOTO 10 1000 REM WAIT 1010 FOR I=1 TO 1000:NEXT 1020 RETURN
LEDが 1 (01) → 2 (10) → 3(11) と思った通りLEDが点灯しました。バンクレジスタの試作は成功です。
手持ち部品に74HC02(NORゲート)がなくて思ったほどコンパクトな回路にはなりませんでした….
次は、128kBメモリーのアドレスバスA16/A15を作ってあげるロジック回路を検討します。
コメント
[…] 前回、メモリーバンク切り替えのためのバンクレジスタの試作がうまくいきましたので、つぎは128kBメモリーのアドレス線A16/A15をコントロールする方法について検討してみます。 […]
[…] 手配線でユニバーサルボードに試作した […]