Space Invaders Test ROM v1.2



Document version history :



ROM Version

Date

Author

Notes

V1.0

10/14/2017

Frederic RODO

fred@rodo.fr

Creation

Rom version history :



ROM Version

Date

Author

Notes

Preversion

Unknown, Documented

11/16/2007

Timothy SHIELS

arcade@outerworldmedia.com

Test RAMS, INPORT, SOUNDS & WATCHDOG

V1.0

10/12/2013

Frederic RODO

fred@rodo.fr

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

f4brice@gmail.com

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

fred@rodo.fr

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:



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.