Hardware > Hardware (Classic 16-/32-Bit)
PAK68/2 Platinen Projekt ...
joejoe:
Okay, die MonSTer kannte ich noch nicht,
...aber das ist ja beinahe derselbe Ansatz, nur das hier mangels fehlender Adressleitung (war's A20?) einer 68000-CPU eben nur Alternate-Ram bei (vermutlich) 8MHz und 16Bit Zugriff möglich sind. SRAM auf der PAK/2 würde 16MHz und 32-bittigen Zugriff bedeuten (natürlich nur bei Longword-Zugriffen) das bringt schon ein wenig Speed.
Aber das sollte auch nur ein kleiner Hinweis sein.
Gruß Jörg
czietz:
Hier geht's aber ein bisschen durcheinander.
Also, richtig ist: Der 68000er hat nur einen 16-Bit-Datenbus, folglich sind alle Zugriffe natürlich maximal 16 Bit breit. Wenn die CPU nur bei 8 MHz läuft, sind die Zugriffe (selbst ohne Waitstates) natürlich auch nicht schneller. Die Anzahl der Adressleitungen, beim 68000er nur A23-A1, hat nichts mit 8 MHz oder 16 Bit zu tun, bestimmt aber die mögliche Lage des RAMs im Adressraum, mehr als 16 MiB kann der 68000er halt nicht adressieren. (Die Adressleitung A20 ist übrigens eher beim PC relevant...)
Ein 68020er hat einen vollen 32-Bit-Datenbus und einen Adressbus, der theoretisch 4 GiB adressieren kann. Somit kann dort -- wie auch im TT -- (Fast-)RAM oberhalb von 16 MiB eingebaut werden, auf den dann allerdings nur von der CPU (dafür aber 32-bittig und mit CPU-Takt) zugegriffen werden kann, nicht von der Peripherie.
joejoe:
Danke für die Korrektur der Adressleitung ;)
Was sonst "falsch" an meinen Aussagen gewesen sein sollte, kann ich nicht nachvollziehen. Deine Aussage trifft es ebenfalls: Es gibt durchaus einen nennenswerten Geschwindigkeitsvorteil von Fast (oder auch Alternate-) RAM auf einer PAK (32-bit, voller CPU-Takt) gegenüber AlternateRam am ST-Bus (16bit, 8MHz).
Auf einer PAK ist es relativ simpel SRAM im DIP32-Gehäuse zusätzlich zu integrieren, ohne zusätzliche FRAK oder ähnliches. Mehr wollte ich nicht sagen. 8)
>edit> Da hier von einem Re-Design der alten PAK/2 die Rede ist, wäre es durchaus naheliegend, den Turmbau mit gestapelten RAM/ROM Bausteinen, wie ich ihn beschrieben habe, durch zusätzliche (SMD-) Sockel auf der "neuen PAK/2" vor zusehen. Die Glue-Logic ist eher simple.
Lukas Frank:
So kleines Fastram ist uninteressant ...
Magnum TT Quell MACH210 Datei (musste ich Einkürzen wegen der 10000 Zeichen)->
--- Code: ---NODE ? Div[0] REG
NODE ? Div[1] REG
NODE ? Div[2] REG
NODE ? Div[3] REG
NODE ? Div[4] REG
NODE ? Div[5] REG
NODE ? Div[6] REG
NODE ? Div[7] REG
NODE ? StrRef REG
NODE ? StartHidden REG
NODE ? C_AS REG
NODE ? ClearRef REG
NODE ? DoCAS COMB
NODE ? RightAdr COMB
NODE ? UmDel1 COMB
NODE ? UmDel2 COMB
NODE ? MemStart REG
NODE ? R95 REG
NODE ? StartRefresh REG
NODE ? STermBankOK COMB
NODE ? STermInt REG
NODE ? STerm1 COMB
NODE ? R103 REG
NODE ? Bank_0A COMB
NODE ? Bank_1A COMB
NODE ? Bank_0B COMB
NODE ? Bank_1B COMB
NODE ? DelCAS COMB
NODE ? DelCAS2 COMB
;----------------------------------- Group Statements --------------
;group mach_seg_d Div[6..0]
;----------------------------------- Diverse Gleichungen -----------
String BankOK '(Bank_0A + Bank_0B + Bank_1A + Bank_1B)'
;----------------------------------- Boolean Equation Segment ------
EQUATIONS
; ******* Bank Decodierung
Bank_0A = A24 * /A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31
+ /A24 * /A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
+ /A24 * /A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD1_0
+ A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
+ A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD1_0
Bank_0B = /A24 * A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * /PD1_0
+ /A24 * /A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
+ A24 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
+ A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
Bank_1A = /A24 * /A25 * A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * PD1_1
+ /A24 * /A25 * A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * /PD0_1 * PD1_0 * /PD1_1
+ A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * PD1_1
+ A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * /PD0_1 * PD1_0 * /PD1_1
+ /A24 * /A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD0_1 * /PD1_0 * /PD1_1
+ A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD0_1 * /PD1_0 * /PD1_1
+ A24 * /A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD1_0
+ A24 * /A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD1_0 * /PD1_1
+ A24 * /A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD0_1 * /PD1_0
+ A24 * A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * /PD1_0 * /PD1_1
+ A24 * A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * /PD0_1 * /PD1_0 * PD1_1
+ /A24 * A25 * /A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * /PD0_1 * PD1_0 * PD1_1
Bank_1B = /A24 * /A25 * /A26 * /A27 * A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * PD1_1
+ A24 * A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * PD1_1
+ A25 * A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * PD1_1
+ /A24 * A25 * /A26 * A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * PD1_0 * /PD1_1
+ /A24 * A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * /PD0_0 * PD0_1 * /PD1_0 * /PD1_1
+ /A24 * /A25 * A26 * /A27 * /A28 * /A29 * /A30 * /A31 * PD0_0 * PD0_1 * /PD1_0 * /PD1_1
; ******* Refresh Counter
Div[0] := /ClearRef* /Div[0]
Div[1] := /ClearRef* /Div[0]* Div[1]
+ /ClearRef* Div[0]* /Div[1]
Div[2] := /ClearRef* Div[2]* /Div[1]
+ /ClearRef* Div[2]* /Div[0]
+ /ClearRef* /Div[2]* Div[1]* Div[0]
Div[3] := /ClearRef* Div[3]* /Div[2]
+ /ClearRef* Div[3]* /Div[1]
+ /ClearRef* Div[3]* /Div[0]
+ /ClearRef* /Div[3]* Div[2]* Div[1]* Div[0]
Div[4].T := ClearRef* Div[4]
+ /ClearRef* Div[3]* Div[2]* Div[1]* Div[0]
Div[5].T := ClearRef* Div[5]
+ /ClearRef* Div[4]* Div[3]* Div[2]* Div[1]* Div[0]
Div[6].T := ClearRef* Div[6]
+ /ClearRef* Div[5]* Div[4]* Div[3]* Div[2]* Div[1]* Div[0]
Div[7].T := ClearRef* Div[7]
+ /ClearRef* Div[6]* Div[5]* Div[4]* Div[3]* Div[2]* Div[1]* Div[0]
StrRef := /ClearRef* StrRef
+ /ClearRef* Div[7]* Div[6]* Div[5]* Div[4]
StartHidden := /ClearRef* StartHidden
+ /ClearRef* AS* Div[7]
R103 := /ClearRef* R103
+ /ClearRef* /AS* /RightAdr* StartHidden
+ /ClearRef* /AS* /BankOK* StartHidden
StartRefresh := R103
+ StrRef
+ /AS* StartHidden* /(RightAdr * BankOK)
R95 := StartRefresh* ClearRef* /MemStart
ClearRef := /R95* /MemStart* StartRefresh
;******* CAS Selection
/CAS_UU = MemStart* /AS* DoCAS* (RW
+ /A1* /A0)
+ /R95* /MemStart* ClearRef* StartRefresh
/CAS_UM = MemStart* /AS* DoCAS* ( RW
+ /A1* SIZ1
+ /A1* /SIZ0
+ /A1* A0)
+ /R95* /MemStart* ClearRef* StartRefresh
/CAS_LM = MemStart* /AS* DoCAS*( RW
+ A1* /A0
+ /A1* SIZ0* SIZ1
+ /A1* /SIZ0* /SIZ1
+ /A1* SIZ1* A0)
+ /R95* /MemStart* ClearRef* StartRefresh
/CAS_LL = MemStart* /AS* DoCAS* ( RW
+ A1* SIZ1
+ /SIZ0* /SIZ1
+ A1* A0
+ SIZ0* SIZ1* A0)
+ /R95* /MemStart* ClearRef* StartRefresh
; Async Set fuer RAS verzoegern
DelCAS2 = /CAS_UU * ClearRef * /R95
DelCAS = DelCAS2
;******* RAS Selection fuer 4 Baenke
/RAS_0A:= StartRefresh* /MemStart* ClearRef* /R95
+ /StartRefresh* /AS* RightAdr* BANK_0A
+ MemStart* /AS* /RAS_0A* RightAdr* BANK_0A
;RAS_0A.SETF = /CAS_UU* ClearRef* /R95
RAS_0A.SETF = DelCAS
/RAS_0B:= StartRefresh* /MemStart* ClearRef* /R95
+ /StartRefresh* BANK_0B* /AS* RightAdr
+ BANK_0B* MemStart* /AS* RightAdr* /RAS_0B
;RAS_0B.SETF = /CAS_UU* ClearRef* /R95
RAS_0B.SETF = DelCAS
/RAS_1A:= StartRefresh* /MemStart* ClearRef* /R95
+ BANK_1A* /StartRefresh* /AS* RightAdr
+ BANK_1A* /RAS_1A* MemStart* /AS* RightAdr
;RAS_1A.SETF = /CAS_UU* ClearRef* /R95
RAS_1A.SETF = DelCAS
/RAS_1B:= StartRefresh* /MemStart* ClearRef* /R95
+ /StartRefresh* /AS* BANK_1B* RightAdr
+ /RAS_1B* MemStart* /AS* BANK_1B* RightAdr
;RAS_1B.SETF = /CAS_UU* ClearRef* /R95
RAS_1B.SETF = DelCAS
/WE_1 = /RW* MemStart
/WE_0 = /RW* MemStart
;******* Andere Adressen
RightAdr = FC0* /FC1
+ /FC0* FC1
;******* Handshake
MemStart := BankOK * RightAdr * /AS * /StartRefresh
+ BankOK * RightAdr * /AS * MemStart
C_AS := /AS* MemStart
STermBankOK = /BankOK
STERM.TRST = /AS* RightAdr* /STermBankOK
STERM = STerm1
STerm1 = STermInt
/STermInt := BankOK* RightAdr * /AS* (/0WS* /MemStart* /StartRefresh
+ 0WS* MemStart* /C_AS)
UmDel1 = /MemStart
+ UmDel1* RAS_1B* RAS_1A* RAS_0A* RAS_0B
UmDel2 = /UmDel1
/Row = 0WS* UmDel2
+ /0WS* /UmDel1
DoCAS = /Row
;----------------------------------- Reset, Preset etc. ------------
Div[7..0].RSTF = GND;
Div[7..0].SETF = GND;
Div[7..0].CLKF = CLK16;
StrRef.CLKF = CLK16
StrRef.SETF = GND;
StrRef.RSTF = GND;
StartHidden.CLKF = CLK16
StartHidden.SETF = GND;
StartHidden.RSTF = GND;
R103.CLKF = CLK16
R103.SETF = GND;
R103.RSTF = GND;
StartRefresh.CLKF = CLK16
StartRefresh.SETF = GND;
StartRefresh.RSTF = GND;
R95.CLKF = CLK16
R95.SETF = GND;
R95.RSTF = GND;
ClearRef.CLKF = CLK16
ClearRef.SETF = GND;
ClearRef.RSTF = GND;
RAS_0A.CLKF = CLK16
RAS_0A.RSTF = GND;
RAS_0B.CLKF = CLK16
RAS_0B.RSTF = GND;
RAS_0B.RSTF = GND;
RAS_1A.CLKF = CLK16
RAS_1A.RSTF = GND;
RAS_1B.CLKF = CLK16
RAS_1B.RSTF = GND;
MemStart.CLKF = CLK16
MemStart.SETF = GND;
MemStart.RSTF = GND;
C_AS.CLKF = CLK16
C_AS.SETF = GND;
C_AS.RSTF = GND;
STermInt.CLKF = CLK16
STermInt.SETF = GND;
STermInt.RSTF = GND;
--- Ende Code ---
Es geht wohl darum dieses anzupassen ->
--- Code: ---STermBankOK = /BankOK
STERM.TRST = /AS* RightAdr* /STermBankOK
STERM = STerm1
STerm1 = STermInt
/STermInt := BankOK* RightAdr * /AS* (/0WS* /MemStart* /StartRefresh
+ 0WS* MemStart* /C_AS)
--- Ende Code ---
Der MC68020 hat kein STERM Signal und müßte mit Warteschleifen mit DSACK0 und 1 umgesetzt werden ?
joejoe:
Mit simpler GLUE-Lösung meinte ich die wenigen zusätzlichen GAL-Gleichungen für meine uninteressante Lösung. Mit den MACH210-Quellen für die Magnum TT habe ich mich nicht beschäftigt, da muss ich passen. SRAM ist eben einfacher anzuspechen als DRAM ;)
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln