ワンダーキットが40年位前に販売していた、KBC-80SAを作ってみました。
もともとRAM、ROM共に最大8Kバイトですが、32Kバイトに変更します。これに伴いデコーダーはTTLではなくGALで作ります。何箇所かパターンカットしてジャンパーを飛ばしました。
以前日米商事さんで108円で手に入れたLH0080Bがあるのでクロックは6MHzにします。発信器もジャンクで手に入れたストックがありました。
GALはDOSBOXでEQN2JEDでEQNをJEDにして、galprogで焼きます。galprogは以前Visual StudioでビルドしたWindowsのバイナリを使いました。
GALの下駄はLS32とLS139のピンから足を取ります。LS32とLS139の間隔がピッチがDIPの半分だったのでハーフピッチの基板を使いました。
EQNファイルはこんな感じです。
title KBC-80SA
pattern Z80
revision A
author yamori813
date 11/11/24
chip kbc gal6001
; The following pin list order mustly be followed strictly:
; 1. device pins 1 to 24
; 2. slmc 7 to slmc 0
; 3. buried feedback (OLMC 14) to buried feedback (OLMC 23)
; pins 1 2 3 4 5 6 7 8 9 10 11 12
; pins 2 3 4 5 6 7 9 10 11 12 13 14
i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 gnd
; pins 13 14 15 16 17 18 19 20 21 22 23 24
; pins 16 17 18 19 20 21 23 24 25 26 27 28
oclk o14 o15 o16 o17 o18 o19 o20 i21 i22 i23 vcc
; slmc7 slmc6 slmc5 slmc4 slmc3 slmc2 slmc1 slmc0
nc nc nc nc nc nc nc nc
; buried feedback to AND array from OLMCs.
; bur14 bur15 bur16 bur17 bur18 bur19 bur20 bur21 bur22 bur23
nc nc nc nc nc nc nc nc nc nc
; specify the User Electronic Signature (UES)
@ues kbc
; 8 ues bits are used per character.
equations
; ILMC : asynchronous inputs.
; IOLMC : asynchronous feedback to AND array.
; SLMC : not used.
; OLMC 14-18 : asynchronous outputs (output always enabled).
; OLMC 19-23 : D-type registered outputs (output always enabled).
; buried feedback of OLMCs not used.
; asynch reset : not used (default is registers cannot be reset).
;ROM CS(20) = MREQ(19) | A15(5)
o14 = i1 | i2
;RAM CS(29) = MREQ(19) | /A15(5)
o15 = i1 | /i2
; PPIO
;IOW(36) = IORQ(20) | WR(22)
o16 = i3 | i4
;IOR(5) = IORQ(29) | RD(21)
o17 = i3 | i5
;PPI0 CS(6) = A3(33) | A2(32) | A6(36) | A7(37)
o18 = i6 | i7 | i8 | i9
;PPI1 CS(6) = A3(33) | /A2(32) | A6(36) | A7(37)
o19 = i6 | /i7 | i8 | i9
;RESET PPIO(35)
;o20 = /i10
; end of example 5
RAMはSOPの物を変換基板でDIPにしています。秋月の変換基板は少し大きいのでやすりで削りました。
最終的にはEPROMにするつもりですが、確認にはFlashを使います。
PLCCの下駄はRAMとあたるので、細ピンソケットで上げました。一時的なものなので、切らず使いました。
GALのデコードを確認するアセンブラを書きます。
ORG 0
LD SP,9000H
INIT8255:
LD A,10000000B
OUT (007H),A
CALL SLEEP
LOOP:
LD A,0FFH
OUT (004H),A
CALL SLEEP
CALL SLEEP
LD A,00H
OUT (004H),A
CALL SLEEP
JP LOOP
SLEEP:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
zmacでアセンブルしてddでflashのサイズにして、flashromで焼きます。この作業はFreeBSDで行いました。
IORQと8255のPA3はこうなりました。
リセットモジュールのMN1280を使いましたが、小さいコンデンサーでは正常にリセットされないので、電解コンデンサーを入れました。MN1280は意味無いかもしれません。
8255のリセットはグランドに落としました。