XEROX PCMEMTEST 2 4 1 PCMEMTEST 1 4 By: Henry Thompson (HThompson.pa@Xerox.com) PCMEMTEST - a checkout tool for IBM PC memory connected by BusMaster card Initially released: 18 September 1985 This package is meant for debugging the bulk transfer of data between an 1108 with the Extended Processor option (the so-called 'DandyTiger') and external memory on an IBM PC bus via a BusMaster card. As such it is mostly meant for wizards with a detailed knowledge of that configuration. It contains a one function which may be of more general interest: (PCMEM.CHECKOUT maxPageNumber) [Function] Determines what pages of external memory are accessable in the range 0 - maxPageNumber (default 15), checks that the memory refresh dma task is running and runs a series of memory tests on each of them in turn. Prints out a dot (.) per pass and a plus (+) per pattern type and a summary message per test type (read or write) per page. Should be run if you suspect that there is something wrong either with the memory itself or with the data path. If doing so reveals an error make a note of it and ask for help. As of this writing [Sept. 85] some instabilities occasionally arise, so this test is actually threshholded by the variable PCMEM.THRESH, initially 15. Only if more than PCMEM.THRESH errors are detected is an error reported. The other function in this package is PCMEM.MAKETEST(). When called it prompts for a window and associates with it one control and 10 parameter TogMenus. [See the documentation of the TOGMENU Lispusers package for a complete discussion - in brief, a TogMenu shows its value, can be sequenced through a sequence of values with the left mouse button, and will bring up a standard menu, perhaps including some options not in the basic sequence, in response to the middle mouse button.] One or more passes of a memory test reading or writing 16-bit words will be run when the Control menu is clicked. The parameter menus determine the nature of the test as follows: Direction Values provided are In, for a read test, Out, for a write test, and FastIn and FastOut, for read and write tests using the \BUSBLTCHECK opcode (see the BUSMASTER documentation). This opcode may not be enabled in your sysout - stick with In and Out unless you are sure it is there. Mode Values provides are Straight and Swapped. Determines whether to swap bytes when reading words or not. Pattern Determines what data pattern will be used for the test. Mostly self-explanatory - use the middle mouse button and hold to get an explanation. Save Results If Yes will keep track of the location and value of all errors, and display them at the end. Useful to detect patterns of dropouts, but slows things down. Show Every Error If Yes will display every error as it occurs Summarize Every Determines how often a summary is printed. Values provided are 1 and 10, and other values may be typed in. Type of Summary Determines the type of summary printed. Values provided are dot (.), just to let you know it's still there, and Full. # passes Determines how many passes will be run. Value provided is Forever, but you can type in a fixed number. Size of block Determines how many words will be read/written in a pass. Values provided are 100, 1000, 5000, 10000 and 32768, and other values may be typed in. Dismiss Determines whether the test will dismiss periodically while running. If No, then the only way to stop it is with a hard interrupt or by holding down the STOP key until it is noticed. If Yes, you can also stop by toggling the Control menu. The read tests work by carefully storing the pattern once, then repeatedly reading back the whole block and comparing it to what should be there. Three kinds of errors are distinguished - read errors, where the data is OK in memory but is fetched incorrectly by the block read; memory decays, where the data was stored correctly but has subsequently gone bad; and slow faults, where two successive reads of the same word with the one-shot read operation give different answers. The write tests work by repeatedly block writing, block reading and comparing to what should be there. Three kinds of errors are distinguished - read errors, where the data is OK in memory but is fetched incorrectly by the block read; write errors, where the data is actually wrong in memory (note that this is in principle indistinguishable from a memory decay error, but if they aren't happening during read tests then these are probably genuine write errors...); and slow faults, where two successive reads of the same word with the one-shot read operation give different answers. .È È(È (È(ŠŠ8(ŠŠ8DÈÈ PAGEHEADING RUNNINGHEAD(È MODERN MODERNLOGOMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN  HRULE.GETFNMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN -J&e*åä´%m˜ª?}ˆr¢úßK">zº