3) CS#
When the C64\C128 reads/writes 8726 registers, it does by pulling the low_active chip select CS# low.
CS# (low active) goes throug an inverting super buffer, then through an inverter, and becomes CSi# (low active).
Later in "5) rw", two control signals are generated from CSi#, R/W# and PHI1:
When CS2R# (low active) is low, the 6510 does a 8726 register
read during PHI1 low (what is different from PHI2_in is high).
When CS2W# (low active) is low, the 6510 does a 8726 register
write during PHI1 low (what is different from PHI2_in is high).
;---
There are two control signals for D0..D7 pad drivers\buffers, see "18) D0".
OE_D (high active): D0io..D7io > D0..7.
OE_DI# (active low): D0..D7 > D0io..7io.
;
D0..7 is the external data bus of the C64\C128.
D0io..7io (bidirectional) is the internal data bus of the 8726.
Just describing the simplified concept of the circuitry which generates OE_D and OE_DI# here:
Inverted CS2R# and OED go into an OR gate.
The output of the OR gate is sampled by a transparent latch controlled by OED_GATE.
If the output of the OR and the latch are high, OED is high: D0io..D7io > D0..7.
;
OED (high active) is generated in "31) tapeworm from hell" during DMA when the 8726
writes C64\C128 memory.
OED_GATE is generated in "21) RAS_CAS_logic" from PHI1 and DotClk.
CS2W# and inverted OEDI go into an AND gate, which generates OE_DI#.
If CS2W# is low, or OEDI is high: D0..D7 > D0io..7io.
;
OEDI (high active) is generated in "31) tapeworm from hell" during DMA when the 8726
reads C64\C128 memory.
And yes, timing on the C64\C128 side of things in the 8726 still looks a bit tricky...
Attachment:
si8726_3_cs.png [ 42.49 KiB | Viewed 3297 times ]
Attachment:
8726_3_cs.png [ 119.06 KiB | Viewed 3297 times ]
;---
Side note:
Imagine, you want to delay a signal, and all you have is 7405 type open collector inverters with pullup resistors at the output.
Adding a capacitor to GND at the output will delay the signal, but delays for the high_to_low edge and low_to_high edge would be different.
That's because the pullup resistor between output and VCC will have a higher impedance than the output transistor in the inverter
which switches the output to GND (if they would have the same impedance, the voltage at the output won't go below logic HIGH level).
So if you want to have identical delays for high_to_low edge and low_to_high edge when resorting to 7405 plus pullup resistor plus capacitor,
the trick is to send the signal through _two_ 7405 type inverters, by using identical pullup resistors to VCC and identical capacitors to GND.
The 8726 just uses FETs instead of pullup resistors to VCC and bipolar transistors switching to GND.