10 REM---------------------------------------------------------------
21 REM UNIT TEST FOR KERNAL API:
32 REM   MEMORY_FILL
43 REM   MEMORY_COPY
54 REM   MEMORY_CRC
65 REM   MEMORY_DECOMPRESS
76 REM---------------------------------------------------------------
87 REM (C)2019 Michael Steil, License: 2-clause BSD
9
1010 REM INITIALIZE $8000-$8FFF WITH 0
1120 POKE2,$00:POKE3,$80:POKE4,$00:POKE5,$10:POKE780,0:SYS$FEE4
12
13100 REM *** 1: FILL $8001-$8100 (FULL PAGE)
14110 POKE2,$01:POKE3,$80:POKE4,$00:POKE5,$01:POKE780,1:SYS$FEE4
15120 FORI=$8001TO$8100:IFPEEK(I)<>1THENPRINT"FAIL 1A AT";I:END
16130 NEXT
17140 IFPEEK($8000)ORPEEK($8101)THENPRINT"FAIL 1B":END
18
19200 REM *** 2: FILL $81F0-$827F (PARTIAL PAGE)
20210 POKE2,$F0:POKE3,$81:POKE4,$90:POKE5,$00:POKE780,2:SYS$FEE4
21220 FORI=$81F0TO$827F:IFPEEK(I)<>2THENPRINT"FAIL 2A AT";I:END
22230 NEXT
23240 IFPEEK($81EF)ORPEEK($8280)THENPRINT"FAIL 2B":END
24
25300 REM *** 3: FILL $82F0-$840F (FULL AND PARTIAL PAGE)
26310 POKE2,$F0:POKE3,$82:POKE4,$20:POKE5,$01:POKE780,3:SYS$FEE4
27320 FORI=$82F0TO$840F:IFPEEK(I)<>3THENPRINT"FAIL 3A AT";I:END
28330 NEXT
29340 IFPEEK($82EF)ORPEEK($8410)THENPRINT"FAIL 3B":END
30
31400 REM *** CRC16 OF $8500-$85D9
32410 FORI=0TO217:READA:POKE$8500+I,A:NEXT : REM UNCOMPRESSED DATA
33420 POKE2,$00:POKE3,$85:POKE4,$DA:POKE5,$00:SYS$FEEA
34430 IFPEEK(6)<>$BBORPEEK(7)<>$E1THENPRINT"FAIL 4":END
35
36500 REM *** 5: DECOMPRESS $8600-$86B3 TO $8700
37510 FORI=0TO179:READA:POKE$8600+I,A:NEXT : REM COMPRESSED DATA
38520 POKE2,$00:POKE3,$86:POKE4,0:POKE5,$87:SYS$FEED
39530 FORI=0TO217:IFPEEK($8500+I)<>PEEK($8700+I)THENPRINT"FAIL 5":END
40540 NEXT
41
42600 REM *** 6: COPY NON-OVERLAPPING
43605 REM REFERENCE DATA
44610 POKE2,$00:POKE3,$C0:POKE4,$00:POKE5,$90:POKE6,$00:POKE7,$08:SYS$FEE7
45615 REM COPY
46620 POKE2,$C0:POKE3,$90:POKE4,$00:POKE5,$98:POKE6,$10:POKE7,$01:SYS$FEE7
47630 FORI=0TO$10F:IFPEEK($90C0+I)<>PEEK($9800+I)THENPRINT"FAIL 6 AT";I:END
48640 NEXT
49
50700 REM *** 7: COPY OVERLAPPING (UP)
51705 REM REFERENCE DATA
52710 POKE2,$00:POKE3,$C0:POKE4,$00:POKE5,$90:POKE6,$00:POKE7,$08:SYS$FEE7
53715 REM COPY OF REFERENCE DATA
54720 POKE2,$00:POKE3,$90:POKE4,$00:POKE5,$98:POKE6,$00:POKE7,$07:SYS$FEE7
55725 REM OVERLAPPING COPY
56730 POKE2,$C0:POKE3,$98:POKE4,$B0:POKE5,$98:POKE6,$40:POKE7,$01:SYS$FEE7
57740 FORI=0TO$13F:IFPEEK($90C0+I)<>PEEK($98B0+I)THENPRINT"FAIL 7 AT";I:END
58750 NEXT
59
60700 REM *** 7: COPY OVERLAPPING (DOWN)
61705 REM REFERENCE DATA
62710 POKE2,$00:POKE3,$C0:POKE4,$00:POKE5,$90:POKE6,$00:POKE7,$08:SYS$FEE7
63715 REM COPY OF REFERENCE DATA
64720 POKE2,$00:POKE3,$90:POKE4,$00:POKE5,$98:POKE6,$00:POKE7,$07:SYS$FEE7
65725 REM OVERLAPPING COPY
66730 POKE2,$B0:POKE3,$98:POKE4,$C0:POKE5,$98:POKE6,$40:POKE7,$01:SYS$FEE7
67740 FORI=0TO$13F:IFPEEK($90B0+I)<>PEEK($98C0+I)THENPRINT"FAIL 8 AT";I:END
68750 NEXT
69
70800 PRINT"PASS"
71
7210000 REM UNCOMPRESSED DATA
7310010 DATA$54,$68,$65,$20,$43,$6F,$6D,$6D,$6F,$64,$6F,$72,$65,$20,$36,$34
7410020 DATA$2C,$20,$61,$6C,$73,$6F,$20,$6B,$6E,$6F,$77,$6E,$20,$61,$73,$20
7510030 DATA$74,$68,$65,$20,$43,$36,$34,$20,$6F,$72,$20,$74,$68,$65,$20,$43
7610040 DATA$42,$4D,$20,$36,$34,$2C,$20,$69,$73,$20,$61,$6E,$20,$38,$2D,$62
7710050 DATA$69,$74,$20,$68,$6F,$6D,$65,$20,$63,$6F,$6D,$70,$75,$74,$65,$72
7810060 DATA$20,$69,$6E,$74,$72,$6F,$64,$75,$63,$65,$64,$20,$69,$6E,$20,$4A
7910070 DATA$61,$6E,$75,$61,$72,$79,$20,$31,$39,$38,$32,$20,$62,$79,$20,$43
8010080 DATA$6F,$6D,$6D,$6F,$64,$6F,$72,$65,$20,$49,$6E,$74,$65,$72,$6E,$61
8110090 DATA$74,$69,$6F,$6E,$61,$6C,$20,$28,$66,$69,$72,$73,$74,$20,$73,$68
8210100 DATA$6F,$77,$6E,$20,$61,$74,$20,$74,$68,$65,$20,$43,$6F,$6E,$73,$75
8310110 DATA$6D,$65,$72,$20,$45,$6C,$65,$63,$74,$72,$6F,$6E,$69,$63,$73,$20
8410120 DATA$53,$68,$6F,$77,$2C,$20,$69,$6E,$20,$4C,$61,$73,$20,$56,$65,$67
8510130 DATA$61,$73,$2C,$20,$4A,$61,$6E,$75,$61,$72,$79,$20,$37,$E2,$80,$93
8610140 DATA$31,$30,$2C,$20,$31,$39,$38,$32,$29,$2E
87
8811000 REM COMPRESSED DATA
8911010 DATA$38,$9B,$54,$68,$65,$20,$43,$6F,$6D,$6D,$6F,$64,$6F,$72,$18,$BA
9011020 DATA$36,$34,$2C,$20,$61,$6C,$73,$6F,$20,$6B,$6E,$6F,$77,$6E,$3A,$00
9111030 DATA$73,$20,$74,$00,$41,$28,$20,$04,$A1,$53,$42,$4D,$DB,$10,$69,$73
9211040 DATA$20,$06,$58,$38,$2D,$62,$69,$74,$20,$68,$6F,$6D,$BC,$E8,$63,$19
9311050 DATA$DA,$70,$75,$74,$65,$72,$20,$69,$6E,$74,$72,$6F,$64,$75,$63,$65
9411060 DATA$64,$5F,$D2,$20,$4A,$61,$6E,$75,$61,$72,$79,$20,$31,$39,$38,$32
9511070 DATA$20,$62,$79,$95,$51,$49,$6E,$D2,$58,$B3,$6E,$61,$74,$69,$6F,$6E
9611080 DATA$61,$6C,$20,$28,$66,$69,$72,$73,$B5,$53,$73,$68,$89,$EC,$74,$20
9711090 DATA$59,$01,$73,$75,$6D,$AD,$59,$45,$6C,$65,$63,$AB,$59,$30,$6E,$69
9811100 DATA$63,$73,$20,$53,$DE,$4A,$2C,$A6,$49,$4C,$63,$38,$56,$65,$67,$D0
9911110 DATA$4F,$2C,$9B,$5B,$40,$37,$E2,$80,$93,$31,$30,$2C,$93,$5F,$29,$2E
10011120 DATA$0A,$00,$F0,$E8
101
102RUN
103