RAMTest is a suite of programs that I have put together that are useful for
testing and fixing problems with memory.
An address range to be tested can be specified either by directly entering the hex address or as hex 1K blocks.
There are two tests methods - TEST and RANDOM.
TEST is a simple algorithm that writes a pattern (MASK) and its inverse to a location and checks that the read back value matches, the process is repeated for each memory location in turn.
RANDOM writes a pseudo random sequence of 8-bit values across the whole memory range and then reads them back to check the values match what was written. The whole process is then repeated with the inverse values. The pseudo random sequence repeats every 255 bytes i.e. an odd number so that the sequence doesn't align with 1K boundaries.
I have also included some tools to enable viewing and modification of memory.
RAMTest Source code (ca65 format)
Here is an .ssd with the executable:
RAMTest Commands:
Command | Function |
ADDRESS (<from> <to>) | Specifies the memory test range by hex address, if no parameters are entered the current address range is output. |
BLOCK (<from> (<to>)) | Specifies the memory test range by hex 1K block(s), if no parameters are specified the current block(s) range is output. |
CYCLE (<ON/OFF>) | Turns test cycling ON and OFF, when ON a test will repeat until the space-bar is pressed. If no parameter is entered the current state of CYCLE is output, the default is OFF. |
DUMP <from> <to> (<columns>) | Dumps the selected memory range to the screen in columns of 8 bytes, the number of bytes per line can be varied by entering a value for the <column> parameter. |
FILL <from> <to> <fill> | Fills the selected memory range with the <fill> value specified. |
HELP (<command>) | Displays a list of commands or gives help on a specific command. |
MASK (<mask>) | Allows the MASK used by TEST to be defined, the default is $00 (and $FF when inverted). If no parameter is entered the current value of MASK is output. |
MEM <address> | Allows the viewing and modification of a memory location. Pressing 'U' moves 'up' through memory and pressing 'V' moves down. Entering a hex value modifies the value at the current location. |
MESSAGES (<ON/OFF>) | Turns detailed error messages produced by TEST and RANDOM ON and OFF. If no parameter is entered the current state of MESSAGES is output, the default is ON. |
RANDOM | Performs a test in which a pseudo random sequence is written to memory. |
SEED (<seed>) | Allows the random number generator used by RANDOM to be seeded. If no parameter is entered the current value of SEED is output. |
TEST | Performs a simple test using the pattern specified by MASK. |
Parameters in brackets are optional.
In addition an OS command can be executed by preceding it with a *.
All commands can be abbreviated with '.'
The following table shows the address and block ranges for the eight 8K address segments e.g. for the 8K RAM + 8K ROM Board:
Address Range (hex) | Block Range |
0000 to 1FFF | 0 to 7 |
2000 to 3FFF | 8 to F |
4000 to 5FFF | 10 to 17 |
6000 to 7FFF | 18 to 1F |
8000 to 9FFF | 20 to 27 |
A000 to BFFF | 28 to 2F |
C000 to DFFF | 30 to 37 |
E000 to FFFF | 38 to 3F |