Document Title: [SegaG80ref.html (html file)]
Version 1.20
25 Oct 1997
Main Processor: Z80 at 3.86712 MHz (vector games)
Z80 at 8.00000 MHz (raster games)
Sound Processor: 8035
Test button on CPU board asserts NMI
40Hz interrupt from vector timing board
There is an 8*8 hardware multiplier on the XY control board
Memory Map
0000 - 07FF 2k ROM on CPU board (power on diagnostics)
0800 - BFFF 46k ROM board
C800 - CFFF 2k RAM on CPU board
D000 - DFFF downloadable RAM on universal sound board
E000 - EFFF 4k Vector RAM
E000 - E3FF Raster screen RAM
E800 - EFFF Raster character RAM (bit 1)
F000 - F03F Raster color RAM
F040 - F07F Raster background color RAM (Monster Bash)
F800 - FFFF Raster character RAM (bit 2)
------------------------------- I/O INPUT PORTS -------------------------------
Tac/Scan, Star Trek, and Zektor read either the panel switches (1)
or spinner (0) based on the setting of the LSB the output port at 0xf8
The value written appears to always be 0xff or 0xfe in these games.
4 Player Eliminator has an I/O expansion board to two additional control
ports, and a port to sense which coin mech was activated. All of the
coin inputs are logically or-ed together to activate the coin 1 input.
The two added I/O ports are selected on port 0xfc based on the bits written
out to port 0xf8. There is also a latch on the I/O expander board to select
which lockout on the coin mech to activate from the coin mech 1 output. If
bit 0x10 of port f8 is 0, it selects the latch, if it is a 1, it activates
the two added input ports. Writing 0x1f selects the coin sense register,
writing 0x1e selects the red and yellow player switch inputs.
Input bits are active LOW, with the exception of port 0xFC where
they are active HIGH.
The coin input bits need to be activated with an impulse. These are timed
to prevent false coin inputs. Timing adjustments can be verified on the
test screens.
The spinner value appears to always increment when it is rotated in
either direction. If the DIR bit is 1, the spinner is spinning counter-
clockwise. The dir bit changes state when the direction of rotation
changes.
CPU BOARD
---------
0xFC (374)
NOTE: The port bits are active HIGH
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| P1-30 | P1-29 | P1-28 | P1-27 | P1-26 | P1-25 | P1-24 | P1-23 |
+---------+---------+---------+---------+---------+---------+---------+--------+
|RotL P2 |RotR P2 | FIRE P2 |THRUST P2| <--- SPACE FURY (cocktail) |
+---------+---------+---------+---------+---------+---------+---------+--------+
ELIMINATOR ---> |RotR Red |ThrustRed|Fire Red|
+---------+---------+---------+---------+---------+---------+---------+--------+
STAR TREK ---> | WARP | PHOTON | PHASER | IMPULSE | 2Player |1Player |
+---------+---------+---------+---------+---------+---------+---------+--------+
TAC/SCAN ---> | | | ADD SHIP| FIRE | 2Player |1Player |
+---------+---------+---------+---------+---------+---------+---------+--------+
ZEKTOR ---> | | | THRUST | FIRE | 2Player |1Player |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE ODYSSEY ---> | | | | DOWN | LEFT | RIGHT |
+---------+---------+---------+---------+---------+---------+---------+--------+
or..
+---------+---------+---------+---------+---------+---------+---------+--------+
| <------------- 7 bit count from spinner --------------> | Dir |
+---------+---------+---------+---------+---------+---------+---------+--------+
on 4 player Eliminator...
0x1f output to port 0xf8
+---------+---------+---------+---------+---------+---------+---------+--------+
| | | | |Yel coin |Red coin |Grn coin |Blu coin|
+---------+---------+---------+---------+---------+---------+---------+--------+
0x1e output to port 0xf8
+---------+---------+---------+---------+---------+---------+---------+--------+
| Red L | Red R | Red Thr | Red Fire| Yel L | Yel R | Yel Thr |Yel Fire|
+---------+---------+---------+---------+---------+---------+---------+--------+
0xFB (373)
NOTE: The port bits are active LOW
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| ----- | ----- | P1-17 | P1-21 | SW1-5 | SW1-1 | SW2-5 | SW2-1 |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE FURY ---> | FIRE P1 |THRUST P1| | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
ELIMINATOR ---> |Fire BLU | RotL RED| | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
ELIM 4P ---> | ROTL GRN| ROTL BLU| | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
ASTRO BLASTER ---> | Fire | Warp | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
005 ---> | Fire | Down | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
MONSTER BASH ---> | Fire | Down | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE ODYSSEY ---> | Fire | | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
0xFA (372)
NOTE: The port bits are active LOW
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| ----- | P1-14 | P1-16 | P1-20 | SW1-6 | SW1-2 | SW2-6 | SW2-2 |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE FURY ---> | RotL P1 | RotR P1 | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
| |RotL BLU |RotR BLU |ThrustBLU| | <---- ELIMINATOR |
+---------+---------+---------+---------+---------+---------+---------+--------+
| |Fire GRN |RotR GRN |RotR BLU | <---- ELIM 4P |
+---------+---------+---------+---------+---------+---------+---------+--------+
| | | Left | Right | | <---- ASTRO BLASTER |
+---------+---------+---------+---------+---------+---------+---------+--------+
| | Up | Left | Right | | <---- 005 |
+---------+---------+---------+---------+---------+---------+---------+--------+
| | Up | Left | Right | | <---- MONSTER BASH |
+---------+---------+---------+---------+---------+---------+---------+--------+
| | | Fire2 | | | <---- SPACE ODYSSEY |
+---------+---------+---------+---------+---------+---------+---------+--------+
0xF9 (371)
NOTE: The port bits are active LOW
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| ----- | P1-13 | P1-15 | P1-19 | SW1-7 | SW1-3 | SW2-7 | SW2-3 |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE FURY ---> | 1Player | 2Player | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
ELIM 4P ---> |ThrustGRN|ThrustBLU| | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
ASTRO BLASTER ---> | 1Player | 2Player | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
005 ---> | 1Player | 2Player | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
MONSTER BASH ---> | 1Player | 2Player | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE ODYSSEY ---> | 1Player | 2Player | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
0xF8 (370)
NOTE: The port bits are active LOW
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| COIN A | COIN B | SERVICE | P1-18 | SW1-8 | SW1-4 | SW2-8 | SW2-4 |
+---------+---------+---------+---------+---------+---------+---------+--------+
ELIM 4P ---> |FIRE BLU | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
SPACE ODYSSEY ---> | Up | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
SWITCH MAPPINGS
---------------
+------+------+------+------+------+------+------+------+
|SW1-8 |SW1-7 |SW1-6 |SW1-5 |SW1-4 |SW1-3 |SW1-2 |SW1-1 |
+------+------+------+------+------+------+------+------+
F8:08 |F9:08 |FA:08 |FB:08 |F8:04 |F9:04 FA:04 FB:04 Zektor &
| | | | | | Space Fury
| | | | | |
1 -|------|------|------|------|------|--------------- upright
0 -|------|------|------|------|------|--------------- cocktail
| | | | | |
| 1 -|------|------|------|------|--------------- voice
| 0 -|------|------|------|------|--------------- no voice
| | | | |
| 1 | 1 -|------|------|--------------- 5 ships
| 0 | 1 -|------|------|--------------- 4 ships
| 1 | 0 -|------|------|--------------- 3 ships
| 0 | 0 -|------|------|--------------- 2 ships
| | |
| 1 | 1 -|--------------- hardest
| 0 | 1 -|--------------- hard
1 = Open | 1 | 0 -|--------------- medium
0 = Closed | 0 | 0 -|--------------- easy
+------+------+------+------+------+------+------+------+
|SW2-8 |SW2-7 |SW2-6 |SW2-5 |SW2-4 |SW2-3 |SW2-2 |SW2-1 |
+------+------+------+------+------+------+------+------+
|F8:02 |F9:02 |FA:02 |FB:02 |F8:01 |F9:01 |FA:01 |FB:01 |
| | | | | | | | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 coin/ 1 play
+------+------+------+------+------+------+------+------+
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 3 coin/ 1 play
+------+------+------+------+------+------+------+------+
| 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 2 coin/ 1 play
+------+------+------+------+------+------+------+------+
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 coin/ 1 play
+------+------+------+------+------+------+------+------+
| 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 coin/ 2 play
+------+------+------+------+------+------+------+------+
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 coin/ 3 play
+------+------+------+------+------+------+------+------+
| 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 coin/ 4 play
+------+------+------+------+------+------+------+------+
| 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 coin/ 5 play
+------+------+------+------+------+------+------+------+
X/Y CONTROL BOARD
-----------------
0xBF (277) ????? set to 0 or (mostly to..) 4
0xBE (276) 16 bit product returned as L, H in two I/O operations
0xBD (275) current vector PC 8-11 (???)
0xBC (274) current vector PC 0-7 (???)
VIDEO BOARD (Raster)
-----------
0xBF (277)
D0: 1 for cocktail flip, 0 to disable
D1: 1 to initiate color RAM write, 0 to disable
D2: always set to 1?
BACKGROUND BOARD (Raster - Monster Bash)
----------------
NOTE: Used in conjunction with VIDEO BOARD.
0xBC (274)
NOTE: D0-D1 should always equal D2-D3.
D0-D1: Character bank for Background Video ROM (bit 1) (U13)
D2-D3: Character bank for Background Video ROM (bit 2) (U8)
D4-D6: Scene bank for Background Video ROM (U22)
D7: 1 to draw background, 0 to clear
0xBF (277)
D2: always set to 1?
D6: 1 to initial background color RAM write, 0 to disable
UNIVERSAL SOUND BOARD
---------------------
0x3f (077)
------------------------------- I/O OUTPUT PORTS -------------------------------
CPU BOARD
---------
0xF9 (371)
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
|CoinCtrA |CoinCtrB | | | | | | |
+---------+---------+---------+---------+---------+---------+---------+--------+
0xF8 (370)
+---------+---------+---------+---------+---------+---------+---------+--------+
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
+=========+=========+=========+=========+=========+=========+=========+========+
| | | | | | | |Port Sel|
+---------+---------+---------+---------+---------+---------+---------+--------+
4player Eliminator
+---------+---------+---------+---------+---------+---------+---------+--------+
| select coin switches | 1 | 1 | 1 | 1 | 0 |
+---------+---------+---------+---------+---------+---------+---------+--------+
| select red/yel inputs | 1 | 1 | 1 | 1 | 1 |
+---------+---------+---------+---------+---------+---------+---------+--------+
| | 0 | 1 | 1 | coin cntrs 0-3 |
+---------+---------+---------+---------+---------+---------+---------+--------+
X/Y Control
-----------
0xbf (277)
0xbe (276) 8 bit multiplier
0xbd (275) 8 bit multiplicand
Universal Sound Board (800-0377)
--------------------------------
0x3f (077) 1000 0000 = reset 8035 (OUTPUT)
ccc cccc = sound command
0x3f 1000 000x == board ready for next byte from main CPU
The universal sound board has a 4k RAM for program code which is
downloaded from the main processor. The CPU on the sound card is
reset by toggling the msb on port 3f. The board is ready for the
next sound command when a read of port 3f returns 80 (the ls bit
is masked off).
Here are the commands sent to the board during self test in tac/scan
The coin inserted sound appears to be 0x2c
There appear to be continuous sounds that you have to turn off with
a second command, and one-shot sounds.
There is a four byte sequence that is sent out before the first
sound was sent. Each byte sent to the USB waits for 0x80 to be
returned on port 3f.
Initial byte sequence for tac/scan
0c 04 37 38
TAC/SCAN Sounds (USB loaded from A000 in main EPROMS)
40 (PLAYER SHIP ROAR) 10 (stop)
18 (PLAYER SHIP LASER)
20 (PLAYER SHIP EXPLOSION)
28 (PLAYER SHIP DOCKING)
48 (TUNNEL HIGH LIGHT)
50 (STINGER THRUST) 52 (stop)
51 (STINGER LASER) 52 (stop)
54 (STINGER EXPLOSION)
62 (ENEMY BULLET)
6e (ENEMY SHIP EXPLOSION)
Star Trk Sounds (USB Loaded from 5400 in main EPROMs)
8 PHASER
a PHOTON
e TARGETING
10 DENY
12 SHEILD HIT
14 ENTERPRISE HIT
16 ENT EXPLOSION
1a KLINGON EXPLOSION
1c DOCK
1e STARBASE HIT
11 STARBASE RED
22 STARBASE EXPLOSION
24 SMALL BONUS
25 LARGE BONUS
26 STARBASE INTRO
27 KLINGON INTRO
28 ENTERPRISE INTRO
29 PLAYER CHANGE
2e KLINGON FIRE
4,5 IMPULSE
6,7 WARP
c,d RED ALERT
18,2f WARP SUCK
19,2f SAUCER EXIT
2c,21 NOMAD MOTION
2d,21 NOMAD STOPPED
2b COIN DROP MUSIC
2a HIGH SCORE MUSIC
Zektor Sound Board (800-3249)
-----------------------------
Ref Des ELIMINATOR ZEKTOR
R5 10K 4.7K
R9 33K 12K
R71 270K 100K
R79 2 MEG unused
R122 220K 390K
R132 220K 100K
C9 0.01uF 0.0047uF
C46 0.022uF 0.047uF
Eliminator Sound Board (800-3174)
---------------------------------
inputs
0x3c-0x3f
d0 speech ready
outputs ( 0 = ON)
0x3e (076)
d7 torpedo 2
d6 torpedo 1
d5 bounce
d4 explosion 3
d3 explosion 2
d2 explosion 1
d1 fireball
d0 -
0x3f (077)
d7 background msb
d6 background lsb
d5 enemy ship
d4 skitter
d3 thrust msb
d2 thrust lsb
d1 thrust hi
d0 thrust lo
Space Fury Sound Board (800-0241)
---------------------------------
0x3e (076) (0 = ON)
d7 partial warship, low frequency oscillation
d6 star spin
d5 -
d4 -
d3 -
d2 thrust, low frequency noise
d1 fire, metalic buzz
d0 craft scale, rising tone
0x3f (077)
d7 -
d6 -
d5 docking bang
d4 large explosion
d3 small explosion, low frequency noise
d2 fireball
d1 shot
d0 crafts joining
Speech Board Description
========================
The speech board is similar in architecture to the universal sound
board. It has an 8035 (or 8039) microcontroller which communicates
with the main Z80 through port 0x38.
The board uses a General Instruments SP0250 Speech Synthesiser which
encodes in a proprietary LPC-12 format.
This is all i've been able to find out about the SP0250
There are 15 parameters each of 1 byte, which are input to pins 3 2 28
27 26 25 24 23 (3 is Most Significant Bit). The bytes are labelled (in
order) C21, C11, Amplitude, C22, C12, Pitch, C23, C13, Repeat, C24, C14,
C25, C15, C26, C16.
The C's are the twelve (reflection?) coefficients, where the MSB is the
sign, 1 = pos.
The amplitude in direct data mode has the 3 MSBs as exponent.
The pitch does not have a sign bit.
Repeat has MSB set to 0, MSB-1 set to V(u), remaining bits the repeat
value. It does not say what V(u) is (there is a bar over the u). It may
be the voiced/unvoiced flag.
Finally there is a description of a byte which may be an alternative to
the amplitude. The MSB is sign 1 = neg, the rest is amplitude. A note
says "exponent from normal mode remains until changed".
Space Fury Speech Board (800-0183)
---------------------------------
inputs
0x39 (071) D7 = Votrax done
outputs
0x38 (070) D0-D6 = 8035 inputs , D7 = T0 Toggle
Output phrase number, wait, or with 0x80
and output again.
0x39 (071) Votrax P0-P5
0x3A (072) Votrax ctl
0x3B (073) Timer 0,1,2, mono,L,R sel
0x3C (074)
to
0x3F (077) 8253 Timer
Note: The Votrax and Timer chip, along with the left/right mux
are left unpopulated on the 800-0294 version used in Zektor
and Star Trek. There appears to be a 'stereo spreader'
circuit on the board, using a bucket-brigade analog delay.
Looking at the fuse map for the address decoder prom, there appears
to be no way to address the analog switch on the output of the SP250
so it always stays in the 'A' switch position.
Voice Board Phrases (Space Fury)
--------------------------------
0x38 (070)
0 = no phrase
1 = "SO"
2 = "A CREATURE FOR MY AMUSEMENT"
3 = "PREPARE FOR BATTLE"
4 = "YOU DEFEATED MY SCOUTS"
5 = "WELL MY CRUISERS WILL DESTROY YOU"
6 = "YOU ARE STARTING TO ANNOY ME CREATURE"
7 = "MY DESTROYERS WILL ANNIHILATE YOU"
8 = "YOU SURVIVED!"
9 = "WARSHIPS, DISPOSE OF THIS ANNOYANCE AT ONCE"
A = "WELL DONE"
B = "PREPARE TO BATTLE MY ENTIRE FLEET"
C = "IS THERE NO WARRIOR MIGHTER THAN I?"
D = "DOES ANYONE DARE CHALLENGE MY IMPERIAL FLEET?"
E = "OUR BATTLE IS COMPLETED WARRIOR"
F = "YOU WERE"
10 = "AN EASY"
11 = "AN AMUSING"
12 = "AN ADEQUATE"
13 = "A STIMULATING"
14 = "AN OUTSTANDING"
15 = "OPPONENT"
16 = no phrase
3f = concatinate phrases
Voice Board Phrases (Star Trek)
-------------------------------
0x38 (070)
00 = no phrase
01 = "COMMAND THE ENTERPRISE"
02 = "PLAY STAR TREK"
03 = "WELCOME ABOARD, CAPTAIN" (SPOCK)
04 = "CONGRATULATIONS"
05 = "HIGH SCORE"
06 = "PRESS PLAYER ONE"
07 = "OR PLAYER TWO"
08 = "START"
09 = "BE THE CAPTAIN OF THE STARSHIP ENTERPRISE" (SCOTTY)
0A = "DAMAGE REPAIRED, SIR" (SCOTTY)
0B = "SECTOR SECURED" (CHECKOV)
0C = "ENTERING SECTOR" (SPOCK)
0D = "ZERO"
0E = "ONE"
0F = "TWO"
10 = "THREE"
11 = "FOUR"
12 = "FIVE"
13 = "SIX"
14 = "SEVEN"
15 = "EIGHT"
16 = "NINE"
17 = "POINT"
18 = "POINT" (HIGHER PITCH)
19 = "RED ALERT"
Voice Board Phrases (Zektor)
----------------------------
0x38 (070)
0 = no phrase
1 = "So, you've come to take Ascella back" (Male)
2 = "I rule Faltar now" (M)
3 = "You'll have to fight for it" (M)
4 = "Centaurus is my world now" (M)
5 = "Sooo... We meet again creature" (M)
6 = "Prepare for battle" (M)
7 = "Warriors needed to defeat alien robots" (Female)
8 = "Approaching" (F)
9 = "defense ring" (F)
A = "the city" (F)
B = "One" (F)
C = "Two" (F)
D = "Three" (F)
E = "Ahhh... Another warrior attempting to regain Baitos"
F = "You will not take it from me" (F)
10 = "I have conquered Eridonus" (F)
11 = "Once Deneballa was yours" (F)
12 = "Graffas belongs to me" (F)
13 = "I will never give it back" (F)
14 = no phrase
Display Controller
-----------------
The vector processor starts at vector ram adr 0
The vector PC is reset 40 times /second.
Display list state machine stops when Last Symbol detected.
Vector Display RAM contents:
Symbol Instructions (10 bytes / symbol)
byte 1 L x x x x x x D
^ ^
| |
| +-visible
|
+- last symbol
byte 2,3 X start (DAC initial) x axis up/down counters
byte 4,5 Y start (DAC initial) y axis up/down counters
byte 6,7 adr of line instructions vector address counter
byte 8,9 appearance, angle symbol angle latch
10 bit angle
byte 10 size draw time multiplier
0xff == 2x
0x80 == 1x
0x40 == 1/2
Line Instructions ( 4 bytes / line )
byte 1 L R R G G B B D
^ ^
| +-visible
+-last vector
byte 2 length vector length
byte 3 line angle vector angle
byte 4 screen quadrant (0-3) direction to draw
2 | 3
--+--
1 | 0
Bytes 3 and 4 really could be thought of as a little-endian 10 bit angle, but
the hardware is described this way in the service manual. In hardware, the
top two bits determine count direction in the x or y up/down counters that
draw the line.
The vector length is the value loaded into the x and y counters after scaling
and being scaled by a hardware lookup in a sine / cosine lookup ROM. A line
with length x and angle 0 has all of its length component in the x count value,
a line with length x and (binary) angle 45 degrees has equal length values in
x and y.
Screen Coordinate System:
The screen position is represented by a pair of 11 bit values (two bytes
each) in each symbol structure.
The screen itself can be thought of as this:
2048
|
|
|
|
|
+------------ 2048
0,0
That is, the origin is in the lower left hand corner and coordinates move
up and right.
The center of the screen is 0x400,0x400.
A hardware clipping circuit clips the screen to a subset of this amount:
1536
+-------------------+
| |
| |
| |
512| 1024,1024 |1536
| |
| |
| |
+-------------------+
512
The center is at 1024,1024.
The display "clips" at the same values on the x and y axis, so since the
display isn't exactly square there must be a little distortion. (a square
should be slightly wider than tall on the screen)
Hardware Scaling:
Scaling is simple binary scaling with a single byte value.
0x80 appears to be 1:1, 0xFF is 2:1
0x40 is 1:2, 0x20 is 1:4, 0x10 is 1:8 etc...
This means that there's more "dynamic range" in the bottom end of the
scaling, so things should look nicer if drawn large and scaled down.
Since the vector generator always starts at 0 in vector RAM, and there
is no way to stop the vector PC from resetting every 40th of a second,
the symbol list for a game is not very dynamic. There is hardware on
the display controller card to be able to read the current positon of
the display PC, but no games appear to use it. Items to be displayed are
marked as visible when they should appear on the screen, and the end
of the symbol list is marked with the most significant bit of the first
symbol byte set to '1'.
Symbol Samples:
"0" 51 40 00 01 draw top left to right
51 60 30 02 draw right side (slanted) top to bottom
51 40 00 03 draw bottom right to left
d1 60 30 00 draw left side (slanted) bottom to top
"1" 7E 20 00 01 move 0x20 units to the right
d1 60 30 02 draw (slanted) top to bottom
"2" 51 40 00 01 draw top left to right
51 30 30 02 symbol drawn "downwards"....
51 40 00 03
51 30 30 02
d1 40 00 01
"3" 51 40 00 01 top bar
51 60 30 02 right side
51 40 00 03 bottom
7e 5d a6 00 move to middle of right side
d1 30 00 03 draw middle bar right to left
"4" 51 30 30 02
51 48 00 01
7e 2e 00 00
d1 60 30 02
"5" 51 40 00 01
7e 40 00 03
51 30 30 02
51 40 00 01
51 30 30 02
d1 40 00 03
Raster Display Controller
-------------------------
All graphics are in 2-bit color. There are 256 different possible color values,
which are determined by a byte containing the bits BBGGGRRR. Four of these
bytes are used to describe the colors for any given sprite value. The color
values are stored in a RAM that holds 64 bytes of information. These values
are periodically changed during game play. Sprites are represented by a byte;
every 16 consecutive sprites share the same color scheme. Hence the 64 bytes
(16 sprite color sets * 4 colors). The Monster Bash Background Board has an
additional 64-byte RAM to hold the background colors.
The graphics data is stored as 1-bit data - the two color bits are kept
completely separate. On the Video Board, U16-U23 holds one color bit, and
U24-U31 holds the other color bit. On the Monster Bash Background Board,
U8 holds one color bit, and U13 holds the other color bit.
The sprites are 8 pixels by 8 pixels. Each sprite is stored as 8 consecutive
bytes in memory. The screen size is 28 sprites in the X direction by 32
sprites in the Y direction.
The Infamous U21 Security Chip
------------------------------
There are a total of six different security chips produced - 31562, 31563,
31564, 31570, 31576, and 31582. They all work the same conceptually, but
have slightly different implementations. In general, this chip interrupts
the Z80 memory write instruction LD ($XXYY),A (opcode $32) and changes the
value of YY before writing to memory.
There are four different algorithms for changing YY. These algorithms seem
like they could be implemented by simply reordering the bits in YY and
possibly inverting one of them. The four algorithms can be implemented in
C using the following code. Note that one algorithm doesn't do anything -
the output matches the input. 'x' represents the output, 'i' represents the
input.
Algorithm A:
/* A */
x=i;
Algorithm B:
/* B */
x=i & 0x03;
x+=((i & 0x80) >> 1);
x+=((i & 0x60) >> 3);
x+=((~i) & 0x10);
x+=((i & 0x08) << 2);
x+=((i & 0x04) << 5);
x &= 0xFF;
Algorithm C:
/* C */
x=i & 0x03;
x+=((i & 0x80) >> 4);
x+=(((~i) & 0x40) >> 1);
x+=((i & 0x20) >> 1);
x+=((i & 0x10) >> 2);
x+=((i & 0x08) << 3);
x+=((i & 0x04) << 5);
x &= 0xFF;
Algorithm D:
/* D */
x=i & 0x23;
x+=((i & 0xC0) >> 4);
x+=((i & 0x10) << 2);
x+=((i & 0x08) << 1);
x+=(((~i) & 0x04) << 5);
x &= 0xFF;
The algorithm to use for any particular $32 instruction is determined by
two bits of the address of the $32 instruction. The two bits used, and
which algorithms they map to, are the only differences between the different
security chips. Here are the different mappings:
31562: address bits xxxxxxXX
XX=00: Algorithm D
XX=01: Algorithm C
XX=10: Algorithm B
XX=11: Algorithm A
31563: address bits xxxxXxxX
XX=00: Algorithm D
XX=01: Algorithm C
XX=10: Algorithm B
XX=11: Algorithm A
31564: address bits xxxxxxXX
XX=00: Algorithm A
XX=01: Algorithm B
XX=10: Algorithm C
XX=11: Algorithm D
31570: address bits xxxxXxxX
XX=00: Algorithm B
XX=01: Algorithm A
XX=10: Algorithm D
XX=11: Algorithm C
31576: address bits xxxxXxxX
XX=00: Algorithm A
XX=01: Algorithm B
XX=10: Algorithm C
XX=11: Algorithm D
31582: address bits xxxXxxxX
XX=00: Algorithm A
XX=01: Algorithm B
XX=10: Algorithm C
XX=11: Algorithm D
After reading all this, some examples would probably be helpful. :)
Example 1:
The hardware contains the 31582 chip. Disassembling the ROM code,
you discover the following line:
204F:32 20 C8 LD ($C820), A
The $32 occurs at $204F = 00100000 01001111. We compare against which
bits are necessary:
01001111
xxxXxxxX
Our pattern is 01, which is Algorithm B. After putting $20 through
Algorithm B, we end up with $14.
The post-security chip line becomes
204F:32 14 C8 LD ($C814), A
Example 2:
The hardware contains the 31564 chip. Disassembling the ROM code,
you discover the following line:
6463:32 78 E0 LD ($E078), A
The $32 occurs at $6463 = 01100100 01100011. We compare against which
bits are necessary:
01100011
xxxxxxXX
Our pattern is 11, which is Algorithm D. After putting $78 through
Algorithm D, we end up with $F4.
The post-security chip line becomes
6463:32 F4 E0 LD ($E0F4), A
Sega G80 Backplane Pinout
-------------------------
1 ground A ground
2 a15 B a7
3 a14 C a6
4 a13 D a5
5 a12 E a4
6 a11 F a3
7 a10 H a2
8 a9 J a1
9 a8 K a0
10 d7 L d3
11 d6 M d2
12 d5 N d1
13 d4 P d0
14 /wait (used by Hw multiplier) R /reset
15 /int S /edgint (40Hz interrupt)
16 /nmi T /extclk (CPU clock in)
17 /ext clk sel (tied low) U clk out
18 /memr V /memw
19 /input W /output
20 /rfsh X /mreq
21 /intack Y /AC (ac power detect)
22 +5 Z +5
23 +5 a +5
24 -5 b -5
25 +12 c +12
26 -12 d -12
27 e
28 /hlt CPU halted f M1
29 clk phase 2 h
30 /panel reset j
31 src k
32 /add l
33 m /fetch
34 n /pcc
35 p
36 r 7.5Mhz
37 s
38 t
39 u
40 v
41 w /pcr (vector pc reset)
42 x speech rdy
43 ground y ground
ROM Address Map
---------------
Eliminator Elim4Player Space Fury Zektor TAC/SCAN Star Trk
-----+-----------+-----------+-----------+-------+---------+---------+
0000 | 969 | 1390 | 969 | 1611 | 1711 | 1873 | CPU u25
-----+-----------+-----------+-----------+-------+---------+---------+
0800 | 1333 | 1347 | 960 | 1586 | 1670 | 1848 | ROM u1
-----+-----------+-----------+-----------+-------+---------+---------+
1000 | 1334 | 1348 | 961 | 1587 | 1671 | 1849 | ROM u2
-----+-----------+-----------+-----------+-------+---------+---------+
1800 | 1335 | 1349 | 962 | 1588 | 1672 | 1850 | ROM u3
-----+-----------+-----------+-----------+-------+---------+---------+
2000 | 1336 | 1350 | 963 | 1589 | 1673 | 1851 | ROM u4
-----+-----------+-----------+-----------+-------+---------+---------+
2800 | 1337 | 1351 | 964 | 1590 | 1674 | 1852 | ROM u5
-----+-----------+-----------+-----------+-------+---------+---------+
3000 | 1338 | 1352 | 965 | 1591 | 1675 | 1853 | ROM u6
-----+-----------+-----------+-----------+-------+---------+---------+
3800 | 1339 | 1353 | 966 | 1592 | 1676 | 1854 | ROM u7
-----+-----------+-----------+-----------+-------+---------+---------+
4000 | 1340 | 1354 | 967 | 1593 | 1677 | 1855 | ROM u8
-----+-----------+-----------+-----------+-------+---------+---------+
4800 | 1341 | 1355 | 968 | 1594 | 1678 | 1856 | ROM u9
-----+-----------+-----------+-----------+-------+---------+---------+
5000 | 1342 | 1356 | | 1595 | 1679 | 1857 | ROM u10
-----+-----------+-----------+-----------+-------+---------+---------+
5800 | 1343 | 1357 | | 1596 | 1680 | 1858 | ROM u11
-----+-----------+-----------+-----------+-------+---------+---------+
6000 | 1344 | 1358 | | 1597 | 1681 | 1859 | ROM u12
-----+-----------+-----------+-----------+-------+---------+---------+
6800 | 1345 | 1359 | | 1598 | 1682 | 1860 | ROM u13
-----+-----------+-----------+-----------+-------+---------+---------+
7000 | | 1360 | | 1599 | 1683 | 1861 | ROM u14
-----+-----------+-----------+-----------+-------+---------+---------+
7800 | | 1600 | 1684 | 1862 | ROM u15
-----+-----------+-----------+-----------+-------+---------+---------+
8000 | | 1601 | 1685 | 1863 | ROM u16
-----+-----------+-----------+-----------+-------+---------+---------+
8800 | | 1602 | 1686 | 1864 | ROM u17
-----+-----------+-----------+-----------+-------+---------+---------+
9000 | | 1603 | 1687 | 1865 | ROM u18
-----+-----------+-----------+-----------+-------+---------+---------+
9800 | | 1604 | 1688 | 1866 | ROM u19
-----+-----------+-----------+-----------+-------+---------+---------+
A000 | | 1605 | 1709 | 1867 | ROM u20
-----+-----------+-----------+-----------+-------+---------+---------+
A800 | | 1606 | 1710 | 1868 | ROM u21
-----+-----------+-----------+-----------+-------+---------+---------+
B000 | | 1869 | ROM u22
-----+-----------+-----------+-----------+-------+---------+---------+
B800 | | 1870 | ROM u23
-----+-----------+-----------+-----------+-------+---------+---------+
Change Log
----------
25 Oct 1997 Add raster games info, security chip info, made Y2K compliant
1 Aug 1997 Fill in trek speech info
24 Jun 1997 Add info on 4 player Eliminator
12 Jun 1997 Add Trek sound descriptions
8 Jun 1997 Add basic info for USB, ROM adr map
6 Jun 1997 Correct rotl/r bits for Space Fury, add 1 player
control bits for Eliminator.
30 May 1997 Add G80 backplane pinout
29 May 1997 Redo input port info, add protocol for speech board
and add Player1/2 switch info for Space Fury.
3 May 1997 Add phrases from Zektor, correct port 0xfc info
1 May 1997 Add sound register defns for Eliminator
3 Apr 1997 Add version number, and a bunch of new info on
switches and sound.
4 Apr 1997 Add some sample vector data
22 Apr 1997 Add screen coordinate and scaling info