Special Chip adapter


A fellow emailed me to see if I had a spare Special Chip 2 to sell. I had also been looking for some for a while, so I knew they were difficult to find. Special Chip 1s are still fairly common, so I told him I'd build an adapter. The only difference between SC1 and SC2 is that SC1 has a bug that requires bit 2 of the width and height to be inverted before being written to the chip registers.

My multigame has a circuit that inverts D2 at the right time so Splat can be played with SC1s, but the circuit is a nasty hack- it uses a 4066 analog switch to connect D2 from the data bus to the SC until a write to the width and height registers. Then it turns the switch off and enables an inverter. That way, it doesn't have to figure who's driving the bus.

I wanted to use a single chip instead of the 3 that my old hack used, so I chose a GAL - the 16V8. The circuit is straight-forward: the ROM board drives D2 on writes to the SC registers and on reads while blitting, and the SC drives D2 on writes while blitting. D2 is inverted on writes to the width and height registers.

While the two SCs on the ROM board are identical, the sockets are wired to tell one to control the upper 4 bits of the data bus, and the other to control the lower 4 bits. So only the lower SC should ever drive D2.

The same circuit can also be used to convert an SC2 to an SC1, although I don't know why anyone would want to. I added an enable input; if it's tied low, the circuit won't invert D2. This could be used in a multigame to switch the SC between SC2 mode and SC1 mode.

Here's the WINCUPL PLD file:

Name     SCx ;
PartNo   00 ;
Date     12/27/2013 ;
Revision 01 ;
Designer Sean Riddle ;
Company  www.seanriddle.com ;
Assembly None ;
Location  ;
Device   g16v8a ;

/* converts an SC1 to SC2 or vice versa */
/* gnd = SC pin 10 */
/* Vcc = SC pin 29 */

/* *************** INPUT PINS *********************/
PIN 1  = nEVIE;						/* SC chip select - SC pin 25 */
PIN 2  = A2;						/* SC pin 26 */
PIN 3  = A1;						/* SC pin 27 */
PIN 4  = ENABLE;					/* 1=invert D2 on writes to W/H regs, 0= leave alone */
PIN 5  = RnW;						/* SC pin 18 */
PIN 6  = D2FROMROMBD;					/* D2 from ROMBD = write - SC socket pin 12 */
PIN 7  = D2FROMSC;					/* D2 from SC = read - SC pin 12 */
pin 8  = nBABS;						/* CPU is halted - SC pin 6 */
pin 9  = UnL;						/* upper/lower SC - 1=upper - SC pin 14 */

/* *************** Output PINS *********************/
PIN 13 = D2TOSC;					/* D2 to SC = write - SC pin 12 */
PIN 14 = D2TOROMBD;					/* D2 to ROMBD = read - SC socket pin 12 */
/* OE signals are too complex to drive directly */
pin 15 = SCOE;						/* no connect - not needed externally */
pin 16 = ROMBDOE;					/* no connect - not needed externally */

SCOE = (!RnW & !nBABS & nEVIE & !UnL);			/* lower SC drives D2 on writes when blitting, unless to self */
D2TOROMBD.OE = SCOE;						

ROMBDOE = ((nBABS & !RnW &!nEVIE) # (!nBABS & RnW));	/* ROM board drives D2 or !D2 on writes to blitter regs and on reads when blitting */
D2TOSC.OE = ROMBDOE;

D2TOSC = (D2FROMROMBD $ (A1 & A2 & ENABLE & !nEVIE));	/* invert D2 to SC if enabled and SC reg 6 or 7 (W/H) */
D2TOROMBD = D2FROMSC;					/* always normal D2 from SC */



Phil Murray made a PCB

back to Blitter Info page

back to Williams Info page

back to Arcade Game Info page

back to Home page


Creative Commons License
Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 Unported License.