12307 OUT &H61,(INP(&H61) AND &HDF) 'enable i/o channel check
12310 DEF USR0=VARPTR(MEMCODE%(0))
12500 ME = USR0(IME%):GOSUB 47200:IF ME=0 THEN PRINT".... ";:GOTO 12700 'gosub to normalize NMI
12510 SOUND 60,5
12520 MEM.ERR%(IME%-S.B.+1)=ME:IF CH$<>"A" AND CH$<>"S" THEN Y=CSRLIN:X=POS(0):LOCATE 25,5:PRINT STRING$(60," ");:LOCATE 25,5:COLOR 31:PRINT "Memory Error detected. F10 for visual location.";:COLOR 7:LOCATE Y,X
12600 PRINT FNF$(ME);:EM%=EM%+1
12700 NEXT
12800 PRINT" TOT ERRS=";EM%;
12900 RETURN
40000 '****** VARIABLE RECEIVER *********
40010 'Chaining won't work.
40020 DEF SEG=0
40030 POKE 1050,PEEK(1052) 'Clear keyboard buffer
40040 MEM.SIZE=PEEK(1043)+256*PEEK(1044)
40050 IO.MEM.SIZE=PEEK(1045)+256*PEEK(1046)
40060 IF PEEK(65521)=206 AND PEEK(65522)=216 THEN XM%=PEEK(65524):PM%=PEEK(65525)+256*PEEK(65526):EM%=PEEK(65527)+256*PEEK(65528):S.B.=PEEK(65529):RETURN 10700
40070 DEF SEG
40080 RETURN
41000 '******* PRINT MEMORY TEST MENU ********
41005 LOCATE 1,10:PRINT "Expansion Memory Test"
41020 '* Determine Start Block and Column Length of menu
41022 IF S.B.<>0 THEN 41040
41025 C.L.=7
41031 PRINT
41032 PRINT "How much memory is installed on the PC system board (1-4)?"
47010 IF CH$="A" OR CH$="S" THEN DEF SEG=0:POKE 65521,0:POKE 65522,0:DEF SEG:GOTO 47050 'Re-initialize control variables for restart
47015 IF NO.QUAD.ERR THEN 47050
47020 IF EM%<>0 THEN 60000
47050 CLEAR ,32000
47100 RUN "QUADTEST"
47200 '******** NMI NORMALIZE ********
47210 OUT &H61,(INP(&H61) OR &H20):OUT &H61,(INP(&H61) AND &HDF):OUT &HA0,80
47220 RETURN
48000 '******** ALL FUNCTIONS CHECK VARIABLE PASSER *******
48010 DEF SEG=0:POKE 65521,206:POKE 65522,216:POKE 65523,ASC(CH$):POKE 65524,XM%:POKE 65525,PM% MOD 256:POKE 65526,INT(PM%/256):POKE 65527,EM% MOD 256:POKE 65528,INT(EM%/256):POKE 65529,S.B.:DEF SEG
48050 CLEAR ,32000
48100 RUN "Q512TEST"
60000 '***** MEMORY ERROR VISUAL LOCATER *******
60010 FOR I=1 TO 8:IF MEM.ERR%(I)<>0 THEN QUAD.ERR%=TRUE
60020 NEXT I:IF QUAD.ERR%<>TRUE THEN GOSUB 65200:RETURN
60030 SCREEN 2:CLS
60050 DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN 60300
60100 LOCATE 8,1: PRINT" This ROUTINE of the Quadtest program will only function if the IBM color/graphics adapter or equivalent is installed in the system.": LOCATE 12,1: LINE INPUT "Press <ENTER> ";A$: RUN"Quadtest"
60200 DIM MEM(11)
60300 CLS:PRINT TAB(5);"Quad 512+ should be started at address";S.B.*64;"K for this routine.":PRINT TAB(5);:LINE INPUT "Press <enter> to continue ";Q1$:CLS
60310 SCREEN 2:EM%=0:ER$(0)="PAR":FOR I=1 TO 8:ER$(I)=" D"+RIGHT$(STR$(I-1),1):NEXT I
64810 IF NOT BCF THEN GOSUB 65000 'Paint parity chip
64820 NEXT J
64830 BEEP:LOCATE 24,20:PRINT "Bad chip(s) painted in foreground color.";
64840 KEY (10) ON:ON KEY(10) GOSUB 47000:LOCATE 25,5:PRINT "F10 to return to QUADTEST diagnostics main menu.";
64850 GOTO 64850
64900 NEXT K
65000 '********* PAINT A CHIP *********
65010 GOSUB 65100 'GET.XY
65020 PAINT (X,Y),1,1
65030 BCF=NOT FALSE
65040 RETURN
65100 '******* GET.XY *******
65120 IF (J<3 OR J=5 OR J=6) THEN X.S.P.=332 ELSE X.S.P.=46 'x start point
65130 X=X.S.P.+(K)*32
65140 IF J MOD 2=0 THEN IF J<5 THEN Y=130 ELSE Y=82 ELSE IF J<4 THEN Y=154 ELSE Y=106
65160 RETURN
65200 '******** MEM ERROR NOT ON QUAD 512+ **********
65210 LN=CSRLIN:COL=POS(0)
65250 SOUND 40,8:PRINT:PRINT:PRINT "Quad 512+ should be started at address";S.B.*64;"K for this routine.":PRINT "No memory error has been detected in that range.":LINE INPUT "Press <ENTER> to continue ";Q1$
65260 LOCATE LN+1,1:FOR K1=1 TO 4:PRINT STRING$(80," ");:NEXT K1:LOCATE LN,COL