Space Invaders Test ROM v1.2
Document version history :
ROM Version |
Date |
Author |
Notes |
V1.0 |
10/14/2017 |
Frederic RODO |
Creation |
Rom version history :
ROM Version |
Date |
Author |
Notes |
Preversion |
Unknown, Documented 11/16/2007 |
Timothy SHIELS |
Test RAMS, INPORT, SOUNDS & WATCHDOG |
V1.0 |
10/12/2013 |
Frederic RODO |
Compute CRC32 check of all the roms Add cross-hatch pattern for adjusting the screen, Add test for the game's shifters Proper text display for the SI's portrait monitor orientation |
V1.1 |
9/17/2017 |
Fabrice GIRARDOT |
Fix a small cosmetic bug on bad ram display Refactor makefile Add binaries in zip file for easy compiling on Linux Add .png file for bad RAM identification |
V1.2 |
10/14/2017 |
Frederic RODO spectroman or frodo13 on forum |
Modify the test RAM to display all rams in error at one time. Correct a display bug on INPORT test simplify the shifter matrix Add this document. |
Prerequisites: have a board that can execute the test rom in position H
The program performs the following tests in this order:
The RAM test
The program fills the RAMs (0x2000 to 0x3FFF) with the pattern 0x55 and verifies them. It also fills the RAMs with the pattern 0xAA. These two patterns are tested 3 times. Next, the program fills the RAMs with an incremented value (from 0x00 to 0xff).
If the tests pass successfully, the following screen is displayed:
"RAMS => OK" and other tests will be started.
If there's some errors on RAMs, two line are displayed. The first line shows which RAMs are in error with a character, the second line shows a black character on the position of a good RAM.
Example: if RAM 2 and C are faulty, and the others are good, a screen like this is displayed:
|
2 |
|
|
|
|
|
|
|
|
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Below is the mapping between the RAM index and the RAM label
Index |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
A |
B |
C |
D |
E |
F |
G |
H |
Label |
G8 |
G9 |
G10 |
G11 |
G12 |
G13 |
G14 |
G15 |
H8 |
H9 |
H10 |
H11 |
H12 |
H13 |
H14 |
H15 |
Note that RAMs 1 to 8 are used for the even address, the RAMs from A to H are used for the odd address and their output is complemented, so an inverter (7404) is added.
Let's see an example: if you have an error on 2 and B, both can be broken or the 7404 inverter @ D4 is broken. Remember that the 7404 @ D4 is used for RAM 1..6, A..F and 7404 @ E4 for 6.7, G, H.
The CRC test
The program computes and displays the CRC32 of the ROMs at position H G F E. The CRC32 of test ROM v1.2 is 7C5E93F5. As this ROM is in the socket H, the invaders.h must be tested in another socket. If a Space invaders deluxe is tested, do the same thing for invdelux.h and invdelux.d.
The CRC32 of the ROMs are extracted from mame :
Space invaders (Bally Midway)
invaders.e 14e538b0
invaders.f 0ccead96
invaders.g 6bfaca4a
invaders.h 734f5ad8
Space invaders deluxe (Bally Midway)
invdelux.d e8d5afcd
invdelux.e 408849c1
invdelux.f f4aa1880
invdelux.g 4268c12d
invdelux.h e690818f
The Inputs test
Each bit of the PORT 1 and PORT 2 are displayed. The character * means 1, a space means 0. It's important to check all the inputs at this stage to detect a non-working output buffer and simplify the understanding of the shifters test results.
Mapping of the output buffer vs PORT bits
A3 : Bit 0 & 1
B3 : Bit 2 & 3
C3 : Bit 4 & 5
D3 : Bit 6 & 7
The sounds test
The sound test is done two times. For a test, each sound is played in this order:
UFO-F = SAUCER SOUND
MISSL = MISSILE SOUND
LAU-H = EXPLOSION
INV-H = SAUCER HIT
EXTRA = BONUS MISSILE BASE
INV-1 = INVADER SOUND 1
INV-2 = INVADER SOUND 2
INV-3 = INVADER SOUND 3
INV-4 = INVADER SOUND 4
UFO-H = INVADER HIT
VID-R = NO SOUND
The shifters test
The program writes two times 0x01 to the shifters and tests a shift of 0, 1, 2..7 bits. The program does the same thing for the value 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0xFF.
If the shifter test was successful, the message "SHIFTERS => OK" is displayed and the watchdog test is executed.
If there's a error, a matrix of 80 numbers is displayed.
All bytes must be 00, so each bit set to 1 shows an error. The first row is the result of the test for the number 0x01 shifted by 0, 1, ... 7 times. The 2 line is the result of the test 0x02 offset 0, 1, ... 7 times ...
If a bit is always a 1, an output buffer is broken.
Example:
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
08 08 08 08 08 08 08 08
In this example, bit 3 is always set to 1, so according to the schematic B3 is in error. Below is the mapping of the output buffer vs bits:
A3 : Bit 0 & 1
B3 : Bit 2 & 3
C3 : Bit 4 & 5
D3 : Bit 6 & 7
If the board is a space invaders deluxe and there's another kind of error, then the MB14241 must be broken. The end of the section is for space invaders boards only or board with 74174, 74175 and 25S10 instead of MB14241.
If the matrix look like this:
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
10 10 10 10 00 00 00 00
There's a fault on the 25S10 on D4. Because on one line the first four bytes are the outputs of D4 and B4 and the last four bytes are the outputs of C4 and A4. The top quarter of a byte comes from C4 or D4, the bottom quarter comes from A4 or B4.
The watchdog test
The program stops to ping the watchdog. If the watchdog works fine, the pcb will reboot after 4 seconds. If not, the watchdog is not working.