10 .OPT NOEJECT 20 ; RAM MEMORY TEST PROGRAM 30 ; FOR THE ATARI 400/800 COMPUTER 40 ; ALL RIGHTS RESERVED 50 ; BY NORM DRAPER 60 ; OF THE ATARI COMPUTER USERS GROUP OF DALLAS 70 ; 80 BELL = $FD 90 EOL = $9B 0100 ATTRACT = $4D 0110 HIMEM = $2E5 0120 COUT = $F6A4 0130 *= $D4 0140 ADDRS .DBYTE 0 0150 START .DBYTE 0 0160 END .DBYTE 0 0170 *=$2E0 0180 .WORD BEGIN 0190 *=$1D00 0200 BEGIN 0210 LDA #ENDPGM/256 0220 CLC 0230 ADC #1 0240 STA START+1 0250 STA END+1 0260 LDA #0 0270 STA START 0280 LDA #$FF 0290 STA END 0300 MEMTEST 0310 JSR INIADDRS 0320 JSR PRINT 0330 .BYTE "TESTING",0 0340 JSR PRTADDR 0350 JSR TESTPGM 0360 INC END+1 0370 INC START+1 0380 LDA HIMEM+1 0390 CMP END+1 0400 BEQ LASTPART 0410 BCC ALLDONE 0420 JMP MEMTEST 0430 ALLDONE 0440 JSR PRINT 0450 .BYTE BELL,"ALL DONE",EOL,0 0460 LDA ERRCTR+1 0470 JSR TBYT 0480 PHA 0490 TXA 0500 JSR COUT 0510 PLA 0520 JSR COUT 0530 LDA ERRCTR 0540 JSR TBYT 0550 PHA 0560 TXA 0570 JSR COUT 0580 PLA 0590 JSR COUT 0600 JSR PRINT 0610 .BYTE " ERRORS FOUND",EOL,0 0620 FOREVER 0630 JMP FOREVER 0640 LASTPART 0650 LDA HIMEM 0660 STA END 0670 JMP MEMTEST 0680 ; 0690 TESTPGM 0700 LDY #$00 ; PATTERN REGISTER 0710 LDX #$00 0720 STX TESTPATRN 0730 JMP NXPASS 0740 ; 0750 NXPATRN 0760 INC TESTPATRN 0770 BNE NXPASS 0780 RTS 0790 NXPASS 0800 LDY TESTPATRN 0810 JSR INIADDRS 0820 LOOP1 TYA 0830 STA (ADDRS,X) ; STORE PATTERN 0840 CMP (ADDRS,X) ; CHECK 0850 BEQ NOERR1 0860 JSR ERROR ;ADDRS, R(A),(ADDRS,X) 0870 NOERR1 JSR INCADDRSC 0880 BEQ CKPATRN 0890 INY 0900 JMP LOOP1 0910 ; 0920 CKPATRN LDY TESTPATRN 0930 JSR INIADDRS ; INITIALIZE ADDRS 0940 LOOP2 TYA 0950 CMP (ADDRS,X) 0960 BEQ NOERR2 0970 JSR ERROR ; ADDRS,R(A),(ADDRS,X) 0980 NOERR2 INY 0990 JSR INCADDRSC 1000 BNE LOOP2 1010 BEQ NXPATRN 1020 ; 1030 ; 1040 INCADDRSC INC ADDRS 1050 BNE SKIPHI 1060 INC ADDRS+1 1070 SKIPHI LDA END 1080 CMP ADDRS 1090 BNE EXIT2 1100 LDA END+1 1110 CMP ADDRS+1 1120 EXIT2 RTS 1130 ; OUTPUT THE ERROR; ADDRESS, PATTERN, ERROR 1140 ERROR 1150 JSR TBYT 1160 STX EPATRN 1170 STA EPATRN+1 1180 LDA ADDRS+1 1190 JSR TBYT 1200 STX EADDR 1210 STA EADDR+1 1220 LDA ADDRS 1230 JSR TBYT 1240 STX EADDR+2 1250 STA EADDR+3 1260 JSR PRINT 1270 .BYTE BELL,BELL,"ERROR AT " 1280 EADDR .BYTE " " 1290 .BYTE " PATTERN=" 1300 EPATRN .BYTE " ",EOL,0 1310 SED 1320 CLC 1330 LDA ERRCTR 1340 ADC #1 1350 STA ERRCTR 1360 LDA ERRCTR+1 1370 ADC #0 1380 STA ERRCTR+1 1390 CLD 1400 RTS 1410 ; 1420 ; 1430 ; INITIALIZE ADDRS WITH START 1440 INIADDRS LDA START 1450 STA ADDRS 1460 LDA START+1 1470 STA ADDRS+1 1480 RTS 1490 ; 1500 ; 1510 ; ROUTINE TO OUTPUT A BYTE 1520 TBYT PHA 1530 LSR A 1540 LSR A 1550 LSR A 1560 LSR A 1570 JSR NIBBLE 1580 TAX 1590 PLA 1600 NIBBLE AND #$0F 1610 ORA #$30 1620 CMP #$3A 1630 BCC TBYTXT 1640 ADC #$06 1650 TBYTXT 1660 RTS 1670 TESTPATRN .BYTE 0 1680 TESTTYPE .BYTE 0 1690 PRINT 1700 PLA 1710 STA LDA1+1 1720 PLA 1730 STA LDA1+2 1740 PRINT10 1750 INC LDA1+1 1760 BNE LDA1 1770 INC LDA1+2 1780 LDA1 LDA LDA1 1790 BEQ PRINT99 1800 JSR COUT 1810 JMP PRINT10 1820 PRINT99 1830 LDA LDA1+2 1840 PHA 1850 LDA LDA1+1 1860 PHA 1870 RTS 1880 PRTADDR 1890 LDA START+1 1900 JSR TBYT 1910 STX ADDR1+1 1920 STA ADDR1+2 1930 LDA START 1940 JSR TBYT 1950 STX ADDR1+3 1960 STA ADDR1+4 1970 LDA END+1 1980 JSR TBYT 1990 STX ADDR2+1 2000 STA ADDR2+2 2010 LDA END 2020 JSR TBYT 2030 STX ADDR2+3 2040 STA ADDR2+4 2050 JSR PRINT 2060 ADDR1 .BYTE " " 2070 ADDR2 .BYTE "- ",EOL,0 2080 LDA #0 2090 STA ATTRACT 2100 RTS 2110 ERRCTR .DBYTE 0 2120 ENDPGM 2130 .END