A4091 PALs dualfix

Source: Dave Haynie Files
This commit is contained in:
Stefan Reinauer 2022-09-28 21:50:51 +08:00
parent d4e06c2b5f
commit 062cde5ddd
3 changed files with 167 additions and 112 deletions

View File

@ -1,16 +1,16 @@
PARTNO U205 ;
NAME U205 ;
DATE July 8, 1992 ;
REV 0 ;
DATE April 1, 1993 ;
REV 5 ;
DESIGNER Dave Haynie ;
COMPANY Commodore ;
ASSEMBLY A3090 ;
ASSEMBLY A4091 ;
LOCATION West Chester ;
DEVICE p22v10 ;
DEVICE g22v10 ;
/************************************************************************/
/* */
/* A3090 Buffer and termination control. */
/* A4091 Buffer and termination control. */
/* */
/* This device manages data buffer direction, enable, and latch */
/* functions, address buffer enable, and slave cycle termination. */
@ -20,7 +20,7 @@
/* DEVICE DATA: */
/* */
/* Device: 22V10-15 */
/* Clock: CLK (33MHz) */
/* Clock: CLK (25MHz) */
/* Unused: 16(I/O) */
/* */
/************************************************************************/
@ -28,31 +28,38 @@
/* REVISION HISTORY: */
/* */
/* DBH Jul 8: Original version. */
/* */
/* DBH Oct 26: Extended data latching function. */
/* DBH Nov 2: Modified DTACK again for fast SCSI slave cycle */
/* termination. */
/* DBH Nov 19: Changed DBOE for self-reference support. */
/* DBH Mar 30: Added NOZ3 term for quick Zorro III disconnect, */
/* to eliminate the multiple A4091 problem. */
/* DBH Apr 1: Some more NOZ3-related tweaks. */
/************************************************************************/
/** INPUTS: **/
PIN 1 = CLK ; /* 33MHz system clock. */
PIN 1 = CLK ; /* 25MHz system clock. */
PIN 2 = !SLAVE ; /* Board select. */
PIN 3 = !MYBUS ; /* The A3090 has the bus. */
PIN 3 = !MYBUS ; /* The A4091 has the bus. */
PIN 4 = DOE ; /* Data phase on Zorro III. */
PIN 5 = FCS ; /* Z3 full cycle strobe. */
PIN 6 = READ ; /* The Zorro III read cycle. */
PIN 7 = !SLACK ; /* The NCR 53C710 slave acknowledge. */
PIN 8 = !BURST ; /* DMA Burst cycle? */
PIN 9 = !INTREG ; /* Interrupt register access. */
PIN 8 = !NOZ3 ; /* Get off the Z3 bus? */
PIN 9 = INTREG ; /* Interrupt register access. */
PIN 10 = !INTVEC ; /* Interrupt vector access. */
PIN 11 = !CFGOUT ; /* Configuration chain output. */
PIN 13 = !NACK ; /* Network chip acknowledge. */
PIN 14 = !MTCR ; /* Zorro III burst strobe. */
PIN 15 = !MASTER ; /* SCSI chip owns the A3090 bus. */
PIN 16 = !SID ; /* SCSI ID. */
/** OUTPUTS: **/
PIN 18 = !D2Z ; /* Data is transferred to Zorro III bus. */
PIN 19 = !Z2D ; /* Data is transferred from Zorro III bus. */
PIN 20 = !DBLT ; /* Data is latched. */
PIN 20 = DBLT ; /* Data is latched. */
PIN 21 = !DBOE ; /* Data transfer enable. */
PIN 22 = !ABOEL ; /* Low order address transfer enable. */
PIN 23 = !ABOEH ; /* High order address transfer enable. */
@ -61,48 +68,64 @@ PIN 23 = !ABOEH ; /* High order address transfer enable. */
PIN 17 = !DTACK ; /* Zorro III termination. */
/** LOGICAL TERMS: **/
/* It takes both MYBUS and MASTER to fully qualify a cycle. If MYBUS is
asserted but master not, we're in the process of bus arbitration. If
MASTER is asserted but not MYBUS, the SCSI chip is master of the A4091
bus and waiting for a grant to the Zorro bus. In both of these cases,
as little as possible should be done. */
mastercyc = MYBUS & MASTER;
slavecyc = !MYBUS & !MASTER;
/** OUTPUT TERMS: **/
/* This is the data output enable control. When data buffers are
pointed toward the board, they can turn on early in the cycle.
This is a write for slave access, a read for DMA access. When
the data buffers are pointed out toward the bus, the have to
wait until DOE to turn on; this is a slave read or DMA write. */
wait until DOE to turn on; this is a slave read or DMA write.
When the board responds to itself, the buffers are left off. If
the NOZ3 signal is asserted on a write (eg, master driving the
Zorro III bus), DBOE must be negated immediately. */
DBOE = !MYBUS & !READ & FCS & SLAVE
# MYBUS & READ & FCS
# !MYBUS & READ & FCS & SLAVE & DOE
# MYBUS & !READ & FCS & DOE;
DBOE = slavecyc & SLAVE & !READ & FCS
# slavecyc & SLAVE & READ & FCS & DOE
# mastercyc & !SLAVE & !READ & FCS & DOE & !ABOEH & !NOZ3
# mastercyc & !SLAVE & READ & FCS;
/* The data buffer direction calculations are very simple. The data to
Zorro III connection is made for slave reads or DMA writes. The Zorro III
to data bus connection is made for slave writes or DMA reads. */
D2Z = !MYBUS & !READ & FCS & SLAVE
# MYBUS & READ & FCS;
D2Z = slavecyc & READ & FCS & SLAVE
# mastercyc & !READ & FCS & !SLAVE;
Z2D = !MYBUS & READ & FCS & SLAVE
# MYBUS & !READ & FCS;
Z2D = slavecyc & !READ & FCS & SLAVE
# mastercyc & READ & FCS & !SLAVE;
/* The data latching function is also reasonably simple. For either kind of
access, data is latched when DTACK is asserted and we're in data time.
For burst DMA access, we have to take into account MTCR and BURST as well. */
DBLT = !MYBUS & FCS & DTACK & DOE & SLAVE
# MYBUS & FCS & DTACK & DOE & !BURST
# MYBUS & FCS & DTACK & DOE & BURST & MTCR;
/* For either kind of access, data is latched when DTACK is asserted and
we're in data time. Data is held through the end of the cycle. */
DBLT = slavecyc & FCS & DTACK & DOE & SLAVE
# mastercyc & FCS & DTACK & DOE & !SLAVE
# DBLT & FCS;
/* The address buffer controls. I want addresses going in unless the SCSI
device has been granted the A3090 bus. If so, addresses only go out when
the A3090 has been granted the Zorro III bus. High order addresses also
go off very quickly after FCS is asserted. */
go off quickly after FCS is asserted. */
ABOEL = !MYBUS & !MASTER
# MYBUS;
ABOEL.D = slavecyc
# mastercyc & !FCS
# mastercyc & FCS & ABOEL;
ABOEL.AR = NOZ3;
ABOEH = !MYBUS & !MASTER
# MYBUS & !FCS;
ABOEH.D = slavecyc
# mastercyc & !FCS;
ABOEH.AR = NOZ3;
/* The board needs to generate a DTACK here for slave accesses. Most
of the slave terminations are very simple, since they're either
@ -111,12 +134,13 @@ ABOEH = !MYBUS & !MASTER
any write should also be instantly terminated, that would be a
configuration register write (reads are governed by ROM access). */
DTACK = SLAVE & FCS & DOE & SLACK
DTACK = SLAVE & FCS & DOE & SLACK
# SLAVE & FCS & DOE & INTREG
# SLAVE & FCS & DOE & INTVEC
# SLAVE & FCS & DOE & SID
# SLAVE & FCS & DOE & NACK
# SLAVE & FCS & DOE & !CFGOUT & !READ
# SLAVE & FCS & DOE & DTACK;
DTACK.OE = SLAVE & FCS;
DTACK.OE = SLAVE & FCS & !NOZ3;


View File

@ -1,7 +1,7 @@
PARTNO U305 ;
NAME U305 ;
DATE November 2, 1992 ;
REV 2 ;
DATE April 5, 1993 ;
REV 6 ;
DESIGNER Dave Haynie ;
COMPANY Commodore ;
ASSEMBLY A3090 ;
@ -20,8 +20,8 @@
/* DEVICE DATA: */
/* */
/* Device: 22V10-10 */
/* Clock: CLK (33MHz) */
/* Unused: 17(I/O) */
/* Clock: CLK (25MHz) */
/* Unused: 9(I),10(I),14(I/O),15(I/),17(I/O) */
/* */
/************************************************************************/
/* */
@ -31,6 +31,15 @@
/* DBH Oct 26: Changes made to speed up Zorro III version of */
/* the FCS signal. */
/* DBH Nov 2: Hold onto BFCS until AS goes away for slaves. */
/* DBH Nov 17: ASQ shutoff based on !AS to prevent FCS echo. */
/* DBH Nov 19: Eliminate A3 passthrough, part of the self- */
/* reference fix. */
/* DBH Apr 1: Added the MASTER signal to prevent bogus A4091 */
/* activities when SCSI has the A4091 bus but not */
/* the Zorro III bus. */
/* DBH Apr 5: When things lined up just right, we missed */
/* the start of the new AS* cycle. Now it's */
/* interlocked with the end of the FCS cycle. */
/* COMPILE -M3 */
/************************************************************************/
@ -42,10 +51,9 @@ PIN 3 = !AS ; /* SCSI address strobe. */
PIN 4 = READ ; /* The Zorro III read cycle. */
PIN 5 = SIZ1 ; /* SCSI transfer size. */
PIN 6 = SIZ0 ;
PIN 7 = !BURST ; /* This cycle will be a burst cycle. */
PIN 7 = !NOZ3 ; /* Zorro III bus cutoff */
PIN 8 = !MTCR ; /* Zorro III multiple transfer strobe. */
PIN 9 = BA3 ; /* SCSI burst addresses. */
PIN 10 = BA2 ;
PIN 10 = MASTER ; /* SCSI chip owns A4091 bus. */
PIN 11 = A1 ; /* SCSI sizing addresses. */
PIN 13 = A0 ;
PIN 18 = !EFCS ; /* Zorro III cycle strobe. */
@ -53,8 +61,6 @@ PIN 23 = DOE ; /* Zorro III data ouput enable. */
/** OUTPUTS: **/
PIN 14 = A2 ; /* Zorro III addresses. */
PIN 15 = A3 ;
PIN 16 = BFCS ; /* Buffered cycle strobe. */
PIN 17 = !ASQ ; /* Qualified version of the SCSI AS* */
PIN 19 = !DS0 ; /* Zorro III data strobes. */
@ -68,20 +74,31 @@ PIN 22 = !DS3 ;
/** OUTPUT TERMS: **/
/* The buffered FCS depends on the mode. In non-DMA modes, it's simply
based on the expansion FCS. In DMA, the expansion FCS can go away
before the A3090 SCSI chip cycle is complete, so a latching term is
added. */
based on the expansion FCS, as long as a SCSI-chip cycle isn't present
(that would indicate DMA awaiting a grant). In DMA, the expansion
FCS starts a cycle, but it can go away before the A4091 SCSI chip cycle
is complete, so a latching term is added. */
BFCS = EFCS
/* With MASTER, I could interlock differently.
BFCS = EFCS & !MASTER & !MYBUS
# EFCS & MASTER & MYBUS
# BFCS & AS & ASQ & MYBUS
# BFCS & AS & !MYBUS;
# BFCS & AS & !MYBUS;*/
BFCS = EFCS & !MYBUS & !AS
# BFCS & !MYBUS & AS
# EFCS & MYBUS & AS
# BFCS & MYBUS & AS & ASQ;
/* A Zorro III cycle is started based on the start of a SCSI cycle and the
A3090's ownership of the Zorro III bus. This is a qualifier for that
start. */
ASQ.D = AS & MYBUS;
ASQ.AR = !MYBUS;
ASQ.D = AS & !BFCS & !EFCS & MYBUS
# ASQ & MYBUS;
ASQ.AR = !AS;
/* The data strobes are based on the low order address and size input
from the SCSI chip. We don't turn these on until the A3090 is bus
@ -110,19 +127,4 @@ DS0 = READ
[DS3..0].OE = MYBUS & DOE;
/* The burst addresses are done here. When a cycle starts, BA2 and BA3
are directly routed to A2 and A3. On successive burst cycles, these
two are incremented to provide the proper Zorro III address. */
A2.D = BA2 & !DOE
# A2 & !BURST & DOE
# A2 & BURST & DOE & MTCR
# !A2 & BURST & DOE & !MTCR;
A3.D = BA3 & !DOE
# A3 & !BURST & DOE
# A3 & BURST & DOE & MTCR
# (A2 $ A3) & BURST & DOE & !MTCR;
[A3,A2].OE = MYBUS;


View File

@ -1,12 +1,12 @@
PARTNO U306 ;
PARTNO U306;
NAME U306 ;
DATE July 9, 1992 ;
REV 0 ;
DATE March 29, 1993 ;
REV 5 ;
DESIGNER Dave Haynie ;
COMPANY Commodore ;
ASSEMBLY A3090 ;
LOCATION West Chester ;
DEVICE p22v10 ;
DEVICE g22v10 ;
/************************************************************************/
/* */
@ -21,21 +21,34 @@
/* */
/* Device: 22V10-10 */
/* Clock: !CLK (33MHz) */
/* Unused: 11(I),13(I),18(I/O) */
/* Unused: 13(I) */
/* */
/************************************************************************/
/* */
/* REVISION HISTORY: */
/* */
/* DBH Jul 9: Original version. */
/* */
/* DBH Oct 26: The expansion FCS is now generated here. */
/* DBH Oct 26: Reworked DTSYNC and STERM to free up AR for */
/* use EFCS. */
/* DBH Oct 26: Find the missing DTACK. Fix to correct this. */
/* DBH Oct 28: Changes here for a different FCS/DTACK strategy */
/* that makes the FCS shutoff delay independent of */
/* A3090 DTACK sampling. */
/* DBH Oct 29: Changed above to also insure STERM is generated */
/* in slave mode, even at 25MHz. */
/* DBH Mar 29: Stolen the unused BURST pin for NOZ3. This */
/* is asserted to get the A4091 off the Zorro III */
/* bus quickly, even when its local FCS may still */
/* be active. This is designed to fix the */
/* multiple A4091 problem. */
/************************************************************************/
/** INPUTS: **/
PIN 1 = !CLK ; /* 33MHz system clock. */
PIN 2 = !MYBUS ; /* SCSI owns the Zorro III bus. */
PIN 3 = FCS ; /* Zorro III cycle strobe. */
PIN 3 = BFCS ; /* A3090 local Zorro III cycle strobe. */
PIN 4 = !MTACK ; /* Zorro III slave burst strobe. */
PIN 5 = !CBREQ ; /* SCSI burst request. */
PIN 6 = !SCSI ; /* SCSI slave chip select. */
@ -43,77 +56,93 @@ PIN 7 = !EDTACK ; /* Zorro III data acknowledge, on bus. */
PIN 8 = !ABOEH ; /* High order address buffer enable. */
PIN 9 = !BERR ; /* Zorro III bus error. */
PIN 10 = !RST ; /* Zorro III reset. */
PIN 11 = !ASQ ; /* Clocked and qualified SCSI strobe. */
/** OUTPUTS: **/
PIN 14 = !BDTACK ; /* Zorro III data acknowledge, buffered. */
PIN 16 = !STERM ; /* SCSI termination. */
PIN 17 = !BURST ; /* This cycle will be a burst cycle. */
PIN 17 = !NOZ3 ; /* Stop driving Zorro III! */
PIN 18 = !EFCS ; /* Zorro III cycle strobe for DMA. */
PIN 19 = DOE ; /* Zorro III data ouput enable. */
PIN 21 = !MTCR ; /* Zorro III multiple transfer strobe. */
PIN 22 = !LASTBURST ; /* Zorro III end-of-burst indicator. */
PIN 23 = !CBACK ; /* SCSI burst acknowledge. */
/** USED INTERNALLY: **/
PIN 15 = !DTSYNC ; /* Synchronizer for DTACK->STERM. */
PIN 20 = !DCNT ; /* State bit for Zorro III stuff. */
PIN 15 = !DCNT ; /* State bit for Zorro III stuff. */
PIN 20 = !DTSYNC ; /* Synchronizer for DTACK->STERM. */
PIN 22 = !CYCZ3 ; /* On-bus Zorro III cycle. */
/** OUTPUT TERMS: **/
/* The Zorro III cycle starts on-bus as soon as it's certain to be a real
cycle that's starting. If just starting, the buffered FCS isn't
asserted but ASQ is. Once on, it stays on until a DTACK is properly
noticed. */
CYCZ3 = !RST & MYBUS & !BFCS & ASQ & !BDTACK & !CLK
# !RST & MYBUS & CYCZ3 & ASQ & !BDTACK;
/* The master-mode FCS is asserted onto the bus once we have determined
a real out-to-bus Zorro III cycle should take place. This wasn't
originally clocked out, but I got nervous about ABOEH setup. */
EFCS = CLK & MYBUS & CYCZ3 & !RST
# EFCS & MYBUS & CYCZ3 & !RST;
EFCS.OE = MYBUS & CYCZ3;
/* Get off the Zorro III bus right after the EFCS cycle ends, hold it
until the local cycle ends. */
NOZ3 = MYBUS & BFCS & !CYCZ3
# RST;
/* The data output enable has to wait until a safe "data phase". This is
guaranteed to be two clocks after FCS falls. DCNT is used to time
this from cycle's start. */
DOE.D = FCS & !DOE & MYBUS & DCNT
# FCS & DOE;
DOE.D = BFCS & !RST & !DOE & MYBUS & DCNT
# BFCS & !RST & DOE;
DOE.OE = MYBUS;
DOE.AR = RST;
/* This form FCS, to ensure proper DOE assertion. */
/* This is a count phase from FCS, to ensure proper DOE assertion. */
DCNT.D = FCS & !DOE & !DCNT & MYBUS
# FCS & DCNT;
DCNT.AR = RST;
DCNT.D = BFCS & !DOE & !DCNT & MYBUS
# BFCS & DCNT;
/* This signal samples an incoming DTACK, to help out with STERM
generation. */
/* This signal samples a termination signal. It used to sample EDTACK, but
the quick turnoff of EFCS means that EDTACK may be gone before our sampling
edge comes around. Instead, the state where EFCS is negated but BFCS is
asserted indicates that the EFCS logic has detected EDTACK. */
DTSYNC.D = FCS & DOE & !BURST & EDTACK
# FCS & DOE & BURST & EDTACK & MTCR;
DTSYNC.AR = RST;
DTSYNC.D = BFCS & !RST & DOE & BDTACK
# BFCS & !RST & DOE & DTSYNC;
DTSYNC.AR = !BFCS;
/* The SCSI termination is based on a synchronized DTACK. I actually
/* The SCSI termination is based on a synchronized DTACK. I
synchronize DTACK for either slave or master cycle, since the
NCR 53C710 wants the effect of SLACK (which makes a DTACK on slave
to SCSI cycles) reflected on STERM to actually end the cycle. */
STERM.D = DTSYNC & EDTACK & FCS & !BURST
# DTSYNC & !STERM & FCS & BURST & MTCR;
STERM.AR = RST;
STERM.D = !RST & MYBUS & BFCS & DTSYNC & !STERM & BDTACK
# !RST & !MYBUS & BFCS & BDTACK & !STERM;
STERM.AR = !BFCS;
/* The SCSI chips gets a CBACK any time we have an MTACK. */
/* We _never_ issue a CBACK, since BURST isn't supported. */
CBACK = MYBUS & FCS & MTACK;
CBACK.OE = MYBUS;
/* The burst cycle is based on the burst handshaking between Zorro III and
the SCSI chip. This has to be done by DOE time. */
BURST = MYBUS & MTACK & FCS & CBACK & !DOE
# MYBUS & BURST & FCS;
LASTBURST = MYBUS & BURST & !MTACK & MTCR
# MYBUS & LASTBURST & FCS;
CBACK = 'b'0;
CBACK.OE = 'b'0;
/* The burst strobe is generated for any burst cycle
/* We _never_ issue an MTCR, since BURST isn't supported. */
MTCR.D = MYBUS & FCS & BURST & DOE & !STERM & !LASTBURST
# MYBUS & FCS & BURST & DOE & !STERM & MTCR;
MTCR.AR = RST;
MTCR = 'b'0;
MTCR.OE = 'b'0;
/* The DTACK line is buffered into the rest of the board. */
/* The DTACK line is buffered into the rest of the board. It actually
latches the EDTACK line in various ways, since EDTACK isn't necessarily
going to hang around long enough to be sampled. */
BDTACK = EDTACK;
BDTACK = !RST & BFCS & EDTACK
# !RST & BFCS & BDTACK & !STERM;