This was started as a troubleshooting guide for Carnival, however most of this information besides the ROM signatures should apply to any of the Sega VIC/VIC dual based games.
RAM range 0x8000 - 0x8FFF
Each RAM chip holds 1 bit of the each address
Chip location | Bit |
U76 | Bit 0 |
U75 | Bit 1 |
U74 | Bit 2 |
U73 | Bit 3 |
U72 | Bit 4 |
U71 | Bit 5 |
U70 | Bit 6 |
U69 | Bit 7 |
Range | Fluke Checksum | ROM location |
0x0000 - 0x3FFF | 271a | All ROMS (u31-u26, u7-u1) |
Range | Fluke Checksum | ROM location |
0x0000 - 0x1FFF | 73e0 | Top Row (u33-u26) |
0x0000 - 0x03FF | 9359 | u33 |
0x0400 - 0x07FF | 859b | u32 |
0x0800 - 0x0BFF | c101 | u31 |
0x0C00 - 0x0FFF | 26bf | u30 |
0x1000 - 0x13FF | 2b81 | u29 |
0x1400 - 0x17FF | b7e8 | u28 |
0x1800 - 0x1BFF | a5f0 | u27 |
0x1C00 - 0x1FFF | 05d9 | u26 |
Range | Fluke Checksum | ROM location |
0x2000 - 0x3FFF | e212 | Buttom Row (u7-u1) |
0x2000 - 0x23FF | a4de | u8 |
0x2400 - 0x27FF | a3fe | u7 |
0x2800 - 0x2BFF | 8909 | u6 |
0x2C00 - 0x2FFF | ccdb | u5 |
0x3000 - 0x33FF | f52d | u4 |
0x3400 - 0x37FF | 29b6 | u3 |
0x3800 - 0x3BFF | 3fd8 | u2 |
0x3C00 - 0x3FFF | e09f | u1 |
Pin | Signal |
13 (Input) | 645Khz |
14 (Input) | 1.93Mhz |
23 (Input) | 5.15Mhz |
29 (Input) | 645Khz |
30 (Input) | 1.93Mhz |
15 (Output) | 15.7Mhz (not exact, it's a composite sync signal, so it mostly looks like a 15.Khz signal, with the verticl component also included) |
pin | Signal Frequency |
2 | 5.15Mhz |
6 | 645 Khz |
10 | 645 Khz (inverted in respect to pin #6 signal |
15 | 1.93Mhz |
pin | Signal Frequency |
2 | 645Khz |
7 | 645 Khz |
10 | 1.93Mhz |
14 | 1.93Mhz |
15 | 1.93Mhz |
Perform the following steps/tests in ORDER, do NOT skip, each step is a prerequite to the next. If one of the steps fixes the problem, then stop.
If you are using a VIC 1 board (like Head On) setup the connector as shown in this picture
PCB header pin | Sound | Chip U63 or U64 | Pin on chip | I/O address | Bit position (0-7) |
29 | Bonus #2 | U64 | 12 | 7 | |
30 | Bonus #1 | U64 | 9 | 6 | |
31 | Pipe | U64 | 15 | 5 | |
32 | Duck #3 | U64 | 6 | 4 | |
33 | Duck #1 | U64 | 5 | 2 | |
34 | Duck #2 | U64 | 16 | 3 | |
35 | Clang | U64 | 19 | 1 | |
36 | Rifle | U64 | 2 | 0 | |
43 | Ranking | U63 | 15 | 5 | |
45 | Bear | U63 | 5 | 2 |
PCB header pin | Sound | Chip U63 or U64 | Pin on chip | I/O address | Bit position (0-7) |
44 | ??? to Music Board | U63 | 6 | 4 | |
46 | ??? to Music Board | U63 | 16 | 3 |
Main PCB header pins 49-52 are to provide power to the sub boards.
PCB header pin | Voltage |
49 | +12 |
50 | -12 |
51 | Ground |
52 | +5 |
0xc000 - 0xc37F - tiles
0x93:0 -> 0x9c: 9
Tiles (bottom left = 0x00, moving up and over to the right)
Note: pulsar has the entire alphabet at it's ASCII values (0x41 = A - Z), and 0-9 at (0x30 - 0x39)
Important Note: The carnival hardware has ROM from 0x0000 - 0x3FFF HOWEVER it is mirrored into 0x4000 - 0x7FFF and this mirror MUST exist! The code calls routines in this upper address space (0x4000 etc) so if it's not mirrored things don't work!
RAM is also from 0x8000 - 0x8FFF but the hardware maps this into each areas (0x9000 - 0x9FFF, 0xa000 - 0xaFFF... 0xf000 - 0xffff) but the range at least in carnival uses 0xe000 - 0xefff