GMT (GGLABS Memory Test) is a new developed memory test for vintage computers optimized for speed and coverage. The code is based on the test algorithms described in "Testing Semiconductor Memories: Theory and Practice" by A.J. van de Goor. The program is mostly in C plus small sections in assembly. It is free software and released under the GPL v3 license.
GMT V0.41 supports Apple IIgs memory expansion and geoRAM on Commodore 64 and Commodore 128.
The Commodore 128 version can only run in 80 column mode.
For the apple IIgs bootable images are provided in the binary archive.
The screen is divided in three sections. The System Info window will display information about the system and, while running a test, the currently tested bank and pattern. The Test Config window shows the current selected test and the control keys. T selects the test to perform (see sections below for a description of the tests), enter starts the test and Q reboots the system.
The Log window, as the name states, logs the start/end of a test and eventual errors.
In case of memory errors GMT will output a line for every detected error:
3a/1e52 F0F0 F1F0 F0F0 F1F0 F0F0 10
The numbers are error bank, error address, expected value, original read which triggered the error, 1st re-read, 2nd re-read, 3rd re-read, bad bits. On the IIgs the values are all 16-bits as, for performance reasons, GMT implements 16-bit reads and writes on the 65c816. On the Commodore 64/128 the values are 8-bits.
The bad bits value is a bitmask showing which bit is bad (a 1 in a specific bit position means at least one read had a miscompare for that specific bit).
There are several different programs in the archive: the generic GMT (gmt140.po for 140K disks, gmt800.2mg for 800K disks) and two versions specifically meant to test RAMGS/4 (ramgs4.2mg) and RAMGS/8 (ramgs8.2mg).
The RAMGS versions have no options. Will start the test immediately and report pass or fail.
GMT is built using the open source cc65 C compiler. Small sections of code are written in assembly to maximize testing speed. On the IIgs is assembly is also used to access the 65816 16-bit registers and long addressing mode.
The assembly code uses loop unrolling extensively to achieve the best speed without sacrificing test coverage.
MATS tests are a family of tests designed to find coupling faults within a memory array. It has the same coverage of an exhaustive walking ones/zeros with a much smaller number of write/read passes.
The test also checks for faults sensitive to the previous content of the memory (background pattern) and read induced faults. Three version of the MATS test have been implemented: 4, 8 and 16-bit (16-bit is only available on the IIgs).
Simultaneous Switching Outputs Test (SSO)
This test stresses back to back read and writes. It is available only on the IIgs as it is not possible to generate back to back writes on a 6502. The basic patter is a walking 1 sequence. For every value in the sequence the true and complement are written back to back. This generates a pattern that flip all data bits every memory transaction.
Address as Data Test (AAD)
This is a simple implementation of the "Address as Data" memory test. For each memory cell it writes a value related to its own address. It is useful to find address related issues.
GMT V0.31 for the Apple IIgs is still available here