This page contains information about the Williams Special Chips, which were 'bit blitters'- block transfer chips that could move data around on the screen and in memory faster than the CPU. In fact, I've timed the special chips at 16 megs in 18.1 seconds. That's 910K/sec, not bad for the early 80s.
The blitters were not used in Defender and Stargate, but were added to the ROM boards of the later games. Splat!, Blaster, Mystic Marathon and Joust 2 used Special Chip 2s. The only difference that I've seen is that SC1s have a small bug- D2 is inverted. So when you tell the SC1 the size of the data to move, you have to exclusive-or the width and height with 4. The SC2s eliminate this bug.
The blitters were accessed at memory location $CA00-CA07. CA01 is the mask, usually $FF to move all bits. CA02-3 is the source data location. CA04-5 is the destination data location. CA06 is the width, and CA07 is the height. Writing to CA00 starts the blit, and the byte written determines how the data is blitted.
Bit 0 indicates that the source data is either laid out linear, one pixel after the last, or in screen format, where there are 256 bytes from one pair of pixels to the next. Bit 1 indicates the same, but for the destination data.
Bit 2: a 1 tells the blitter to synchronize reads with the E clock. This is necessary for blits from RAM to RAM, or else the video display hardware will corrupt the blits. It effectively cuts the blit speed in half. It is not needed for blits from ROM to RAM, or to Sinistar's $D000 RAM.
Bit 3 tells the blitter only to blit the foreground- that is, everything that is not color 0. Also known as transparency mode.
Bit 4 is 'solid' mode. Only the color indicated by the mask is blitted. Note that this just creates a rectangle unless bit 3 is also set, in which case it blits the image, but in a solid color.
Bit 5 shifts the image one pixel to the right. Any data on the far right jumps to the far left.
Bits 6 and 7 only blit every other pixel of the image. Bit 6 says even only, while bit 7 says odd only.
Here is a picture from the RAM dump that I created. The program blitted a 64x32 pixel image 29 times over a background of alternating red and green pixels. The numbers below and to the right of the picture show what value was written to $CA00 to initiate the blit.
The 6809DASM .dat file
The RAM dump
The following snippet was posted on KLOV by the purchaser of the system used to develop Robotron:
* *DMA CONSTANTS * DMACTL EQU $CA00 CONTROL BYTE WRITE INITIATES TRANSFER *B0:READ FORMAT 0=SERIAL;1=BLOCK *B1:WRITE FORMAT 0=SERIAL;1=BLOCK *B2:XSFER RATE 0=ROM-RAM (1MSEC); 1=RAM-RAM (2 MSEC) *B3:1=ZERO WRITE SUPPRESS *B4:1=CONSTANT SUBSTITUTION *B5:1=ODD FLAVOR *B6:1=B0-B3 WRITE SUPPRESS *B7:1=B4-B7 WRITE SUPPRESS DMACON EQU $CA01 CONSTANT DATA BYTE DMAORG EQU $CA02 ORIGIN ADDR MSB,LSB DMADES EQU $CA04 DESTINATION " DMASIZ EQU $CA06 HOR,VERT BYTE COUNTS
back to Williams Info page
back to Arcade Game Info page
back to Home page