Retirando os externs
[NesEmulator.git] / examples / test.a65
blobef37dd75acc2a1e143f7415da5af5cb70b7b1e7d
2 .text
3 *=$0000
5         .dsb $8000, $00
7 cmd_port   = $4003
8 param_high = $4002
9 param_low  = $4001
10 cmd_print     = $01
11 cmd_print_int = $02
12 cmd_print_hex = $03
13 cmd_reset  = $fa
14 cmd_nmi    = $fb
15 cmd_irq    = $fc
16 cmd_dump   = $fd
17 cmd_cpu    = $fe
18 cmd_exit   = $ff
19 temp1      = $10
20 temp2      = $11
21 temp3      = $12
22 temp4      = $13
23 tempn      = $ff
25 temp_abs   = $200
26 temp_abs1  = $201
27 temp_abs2  = $202
29 error_count = $03
30 test_count  = $04
33 reset
35 ;---------------------------------------------------------------
36 ; Section 1 - Logic and Arithmetic
37 ;---------------------------------------------------------------
39 section1
40         lda #<section1_msg
41         sta param_low
42         lda #>section1_msg
43         sta param_high
44         lda #cmd_print
45         sta cmd_port
46         jmp test1
48 section1_msg
49         .byt "=========================================", 10
50         .byt "* Arithmetic/Logical Instruction Tests  *", 10
51         .byt "=========================================", 10, 10, 0
53 ;---------------------------------------------------------------
54 ; Test 1 ADC
55 ;---------------------------------------------------------------
56 test1
57         lda #<test1_msg
58         sta param_low
59         lda #>test1_msg
60         sta param_high
61         jsr start_test
63         clc
64         lda #$12
65         adc #$12
67         beq test1_error
68         bcs test1_error
69         bmi test1_error
70         bvs test1_error
72         cmp #$24
73         bne test1_error
75         clc
76         lda #$00
77         adc #$00
79         bne test1_error
80         bcs test1_error
81         bmi test1_error
82         bvs test1_error
84         cmp #$00
85         bne test1_error
87         clc
88         lda #$01
89         adc #$FF
91         bne test1_error
92         bcc test1_error
93         bmi test1_error
94         bvs test1_error
96         cmp #$00
97         bne test1_error
99         clc
100         lda #$01
101         adc #$7F
103         beq test1_error
104         bcs test1_error
105         bpl test1_error
106         bvc test1_error
108         cmp #$80
109         bne test1_error
111         clc
112         lda #$FF
113         adc #$81
115         beq test1_error
116         bcc test1_error
117         bpl test1_error
118         bvs test1_error
120         cmp #$80
121         bne test1_error
123         sec
124         lda #$7F
125         adc #$00
127         beq test1_error
128         bcs test1_error
129         bpl test1_error
130         bvc test1_error
132         cmp #$80
133         bne test1_error
135         sec
136         lda #$80
137         adc #$FF
139         beq test1_error
140         bcc test1_error
141         bpl test1_error
142         bvs test1_error
144         cmp #$80
145         bne test1_error
147         lda #$00
149         jmp test1_end
151 test1_error
152         lda #$01
154 test1_end
155         jsr end_test
156         jmp test2
159 test1_msg
160         .byt "[TEST #1] ADC", 0
163 ;---------------------------------------------------------------
164 ; Test 2 AND
165 ;---------------------------------------------------------------
167 test2
168         lda #<test2_msg
169         sta param_low
170         lda #>test2_msg
171         sta param_high
172         jsr start_test
174         lda #$F0
175         and #$0F
176         bne test2_error
177         bmi test2_error
179         cmp #$00
180         bne test2_error
182         lda #$F0
183         and #$FF
184         beq test2_error
185         bpl test2_error
187         cmp #$F0
188         bne test2_error
189         
190         lda #$00
192         jmp test2_end
194 test2_error
195         lda #$01
197 test2_end
198         jsr end_test
199         jmp test3
202 test2_msg
203         .byt "[TEST #2] AND", 0
207 ;---------------------------------------------------------------
208 ; Test 3 ASL
209 ;---------------------------------------------------------------
211 test3
212         lda #<test3_msg
213         sta param_low
214         lda #>test3_msg
215         sta param_high
216         jsr start_test
218         lda #$01
219         asl
220         beq test3_error
221         bcs test3_error
222         bmi test3_error
224         cmp #$02
225         bne test3_error
227         lda #$80
228         asl
229         bne test3_error
230         bcc test3_error
231         bmi test3_error
233         cmp #$00
234         bne test3_error
236         lda #$60
237         asl
238         beq test3_error
239         bcs test3_error
240         bpl test3_error
242         cmp #$C0
243         bne test3_error
245         
246         lda #$00
248         jmp test3_end
250 test3_error
251         lda #$01
253 test3_end
254         jsr end_test
255         jmp test4
256         
257 test3_msg
258         .byt "[TEST #3] ASL", 0
262 ;---------------------------------------------------------------
263 ; Test 4 BIT
264 ;---------------------------------------------------------------
266 test4
267         lda #<test4_msg
268         sta param_low
269         lda #>test4_msg
270         sta param_high
271         jsr start_test
273         lda #$C0
274         sta temp1
276         lda #$00
277         bit temp1
278         bne test4_error
279         bpl test4_error
280         bvc test4_error
282         lda #$40
283         bit temp1
284         beq test4_error
285         bpl test4_error
286         bvc test4_error
288         lda #$0F
289         sta temp1
290         lda #$FF
291         bit temp1
292         beq test4_error
293         bmi test4_error
294         bvs test4_error
296         lda #$00
298         jmp test4_end
300 test4_error
301         lda #$01
303 test4_end
304         jsr end_test
305         jmp test5
306         
307 test4_msg
308         .byt "[TEST #4] BIT", 0
311 ;---------------------------------------------------------------
312 ; Test 5 CMP
313 ;---------------------------------------------------------------
315 test5
316         lda #<test5_msg
317         sta param_low
318         lda #>test5_msg
319         sta param_high
320         jsr start_test
323         lda #$00
324         cmp #$00
325         bne test5_error
326         bcc test5_error
327         bmi test5_error
329         lda #$00
330         cmp #$7F
331         beq test5_error
332         bcs test5_error
333         bpl test5_error
335         lda #$00
336         cmp #$80
337         beq test5_error
338         bcs test5_error
339         bpl test5_error
341         lda #$00
343         jmp test5_end
345 test5_error
346         lda #$01
348 test5_end
349         jsr end_test
350         jmp test6
351         
352 test5_msg
353         .byt "[TEST #5] CMP", 0
356 ;---------------------------------------------------------------
357 ; Test 6 CPX
358 ;---------------------------------------------------------------
360 test6
361         lda #<test6_msg
362         sta param_low
363         lda #>test6_msg
364         sta param_high
365         jsr start_test
368         ldx #$80
369         cpx #$80
370         bne test6_error
371         bcc test6_error
372         bmi test6_error
374         ldx #$7e
375         cpx #$7f
376         beq test6_error
377         bcs test6_error
378         bpl test6_error
380         ldx #$7f
381         cpx #$80
382         beq test6_error
383         bcs test6_error
384         bpl test6_error
386         lda #$00
388         jmp test6_end
390 test6_error
391         lda #$01
393 test6_end
394         jsr end_test
395         jmp test7
396         
397 test6_msg
398         .byt "[TEST #6] CPX", 0
401 ;---------------------------------------------------------------
402 ; Test 7 CPY
403 ;---------------------------------------------------------------
405 test7
406         lda #<test7_msg
407         sta param_low
408         lda #>test7_msg
409         sta param_high
410         jsr start_test
413         ldy #$FF
414         cpy #$FF
415         bne test7_error
416         bcc test7_error
417         bmi test7_error
419         ldy #$00
420         cpy #$FF
421         beq test7_error
422         bcs test7_error
423         bmi test7_error
425         ldy #$80
426         cpy #$01
427         beq test7_error
428         bcc test7_error
429         bmi test7_error
431         lda #$00
433         jmp test7_end
435 test7_error
436         lda #$01
438 test7_end
439         jsr end_test
440         jmp test8
441         
442 test7_msg
443         .byt "[TEST #7] CPY", 0
446 ;---------------------------------------------------------------
447 ; Test 8 DEC
448 ;---------------------------------------------------------------
450 test8
451         lda #<test8_msg
452         sta param_low
453         lda #>test8_msg
454         sta param_high
455         jsr start_test
457         lda #$20
458         sta temp1
459         dec temp1
460         beq test8_error
461         bmi test8_error
463         lda temp1
464         cmp #$1F
465         bne test8_error
467         lda #$01
468         sta temp1
469         dec temp1
470         bne test8_error
471         bmi test8_error
473         lda temp1
474         cmp #$00
475         bne test8_error
477         lda #$00
478         sta temp1
479         dec temp1
480         beq test8_error
481         bpl test8_error
483         lda temp1
484         cmp #$ff
485         bne test8_error
487         lda #$00
489         jmp test8_end
491 test8_error
492         lda #$01
494 test8_end
495         jsr end_test
496         jmp test9
497         
498 test8_msg
499         .byt "[TEST #8] DEC", 0
502 ;---------------------------------------------------------------
503 ; Test 9 DEX
504 ;---------------------------------------------------------------
506 test9
507         lda #<test9_msg
508         sta param_low
509         lda #>test9_msg
510         sta param_high
511         jsr start_test
513         ldx #$02
514         dex
515         beq test9_error
516         bmi test9_error
518         cpx #$01
519         bne test9_error
521         ldx #$01
522         dex
523         bne test9_error
524         bmi test9_error
526         cpx #$00
527         bne test9_error
529         ldx #$00
530         dex
531         beq test9_error
532         bpl test9_error
534         cpx #$ff
535         bne test9_error
537         lda #$00
539         jmp test9_end
541 test9_error
542         lda #$01
544 test9_end
545         jsr end_test
546         jmp test10
547         
548 test9_msg
549         .byt "[TEST #9] DEX", 0
552 ;---------------------------------------------------------------
553 ; Test 10 DEY
554 ;---------------------------------------------------------------
556 test10
557         lda #<test10_msg
558         sta param_low
559         lda #>test10_msg
560         sta param_high
561         jsr start_test
564         ldy #$02
565         dey
566         beq test10_error
567         bmi test10_error
569         cpy #$01
570         bne test10_error
572         ldy #$01
573         dey
574         bne test10_error
575         bmi test10_error
577         cpy #$00
578         bne test10_error
580         ldy #$00
581         dey
582         beq test10_error
583         bpl test10_error
585         cpy #$ff
586         bne test10_error
588         lda #$00
590         jmp test10_end
592 test10_error
593         lda #$01
595 test10_end
596         jsr end_test
597         jmp test11
598         
599 test10_msg
600         .byt "[TEST #10] DEY", 0
603 ;---------------------------------------------------------------
604 ; Test 11 EOR
605 ;---------------------------------------------------------------
607 test11
608         lda #<test11_msg
609         sta param_low
610         lda #>test11_msg
611         sta param_high
612         jsr start_test
614         lda #$0F
615         eor #$0F
616         bne test11_error
617         bmi test11_error
619         lda #$80
620         eor #$00
621         beq test11_error
622         bpl test11_error
624         lda #$00
625         eor #$80
626         beq test11_error
627         bpl test11_error
628         
629         lda #$00
631         jmp test11_end
633 test11_error
634         lda #$01
636 test11_end
637         jsr end_test
638         jmp test12
639         
640 test11_msg
641         .byt "[TEST #11] EOR", 0
644 ;---------------------------------------------------------------
645 ; Test 12 INC
646 ;---------------------------------------------------------------
648 test12
649         lda #<test12_msg
650         sta param_low
651         lda #>test12_msg
652         sta param_high
653         jsr start_test
655         lda #$00
656         sta temp1
657         inc temp1
658         beq test12_error
659         bmi test12_error
661         lda #$01
662         cmp temp1
663         bne test12_error
665         lda #$FF
666         sta temp1
667         inc temp1
668         bne test12_error
669         bmi test12_error
671         lda #$00
672         cmp temp1
673         bne test12_error
675         lda #$7F
676         sta temp1
677         inc temp1
678         beq test12_error
679         bpl test12_error
681         lda #$80
682         cmp temp1
683         bne test12_error
686         lda #$00
688         jmp test12_end
690 test12_error
691         lda #$01
693 test12_end
694         jsr end_test
695         jmp test13
696         
697 test12_msg
698         .byt "[TEST #12] INC", 0
701 ;---------------------------------------------------------------
702 ; Test 13 INX
703 ;---------------------------------------------------------------
705 test13
706         lda #<test13_msg
707         sta param_low
708         lda #>test13_msg
709         sta param_high
710         jsr start_test
713         ldx #$00
714         inx
715         beq test13_error
716         bmi test13_error
718         cpx #$01
719         bne test13_error
721         ldx #$7F
722         inx
723         beq test13_error
724         bpl test13_error
726         cpx #$80
727         bne test13_error
730         ldx #$FF
731         inx
732         bne test13_error
733         bmi test13_error
735         cpx #$00
736         bne test13_error
740         lda #$00
742         jmp test13_end
744 test13_error
745         lda #$01
747 test13_end
748         jsr end_test
749         jmp test14
750         
751 test13_msg
752         .byt "[TEST #13] INX", 0
755 ;---------------------------------------------------------------
756 ; Test 14 INY
757 ;---------------------------------------------------------------
759 test14
760         lda #<test14_msg
761         sta param_low
762         lda #>test14_msg
763         sta param_high
764         jsr start_test
767         ldy #$00
768         iny
769         beq test14_error
770         bmi test14_error
772         cpy #$01
773         bne test14_error
775         ldy #$7F
776         iny
777         beq test14_error
778         bpl test14_error
780         cpy #$80
781         bne test14_error
784         ldy #$FF
785         iny
786         bne test14_error
787         bmi test14_error
789         cpy #$00
790         bne test14_error
792         lda #$00
794         jmp test14_end
796 test14_error
797         lda #$01
799 test14_end
800         jsr end_test
801         jmp test15
802         
803 test14_msg
804         .byt "[TEST #14] INY", 0
806 ;---------------------------------------------------------------
807 ; Test 15 LSR
808 ;---------------------------------------------------------------
810 test15
811         lda #<test15_msg
812         sta param_low
813         lda #>test15_msg
814         sta param_high
815         jsr start_test
818         lda #$01
819         lsr
820         bcc test15_error
821         bne test15_error
822         bmi test15_error
824         cmp #$00
825         bne test15_error
827         lda #$80
828         lsr
829         bcs test15_error
830         beq test15_error
831         bmi test15_error
833         cmp #$40
834         bne test15_error
836         lda #$ff
837         lsr
838         bcc test15_error
839         beq test15_error
840         bmi test15_error
842         cmp #$7f
843         bne test15_error
845         lda #$00
847         jmp test15_end
849 test15_error
850         lda #$01
852 test15_end
853         jsr end_test
854         jmp test16
855         
856 test15_msg
857         .byt "[TEST #15] LSR", 0
860 ;---------------------------------------------------------------
861 ; Test 16 NOP
862 ;---------------------------------------------------------------
864 test16
865         lda #<test16_msg
866         sta param_low
867         lda #>test16_msg
868         sta param_high
869         jsr start_test
871         php
872         nop
873         php
874         pla
875         sta temp1
876         pla
877         cmp temp1
878         bne test16_error
880         lda #$00
882         jmp test16_end
884 test16_error
885         lda #$01
887 test16_end
888         jsr end_test
889         jmp test17
890         
891 test16_msg
892         .byt "[TEST #16] NOP", 0
895 ;---------------------------------------------------------------
896 ; Test 17 ORA
897 ;---------------------------------------------------------------
899 test17
900         lda #<test17_msg
901         sta param_low
902         lda #>test17_msg
903         sta param_high
904         jsr start_test
906         lda #$00
907         ora #$00
908         bne test17_error
909         bmi test17_error
911         cmp #$00
912         bne test17_error
915         lda #$80
916         ora #$7F
917         beq test17_error
918         bpl test17_error
920         cmp #$FF
921         bne test17_error
924         lda #$10
925         ora #$0F
926         beq test17_error
927         bmi test17_error
929         cmp #$1F
930         bne test17_error
933         lda #$00
935         jmp test17_end
937 test17_error
938         lda #$01
940 test17_end
941         jsr end_test
942         jmp test18
943         
944 test17_msg
945         .byt "[TEST #17] ORA", 0
948 ;---------------------------------------------------------------
949 ; Test 18 ROL
950 ;---------------------------------------------------------------
952 test18
953         lda #<test18_msg
954         sta param_low
955         lda #>test18_msg
956         sta param_high
957         jsr start_test
959         clc
960         lda #$01
961         rol
962         bcs test18_error
963         beq test18_error
964         bmi test18_error
966         cmp #$02
967         bne test18_error
970         sec
971         lda #$00
972         rol
973         bcs test18_error
974         beq test18_error
975         bmi test18_error
977         cmp #$01
978         bne test18_error
980         clc
981         lda #$80
982         rol
983         bcc test18_error
984         bne test18_error
985         bmi test18_error
987         cmp #$00
988         bne test18_error
990         sec
991         lda #$40
992         rol
993         bcs test18_error
994         beq test18_error
995         bpl test18_error
997         cmp #$81
998         bne test18_error
999         
1000         lda #$00
1002         jmp test18_end
1004 test18_error
1005         lda #$01
1007 test18_end
1008         jsr end_test
1009         jmp test19
1010         
1011 test18_msg
1012         .byt "[TEST #18] ROL", 0
1015 ;---------------------------------------------------------------
1016 ; Test 19 ROR
1017 ;---------------------------------------------------------------
1019 test19
1020         lda #<test19_msg
1021         sta param_low
1022         lda #>test19_msg
1023         sta param_high
1024         jsr start_test
1026         clc
1027         lda #$01
1028         ror
1029         bcc test19_error
1030         bne test19_error
1031         bmi test19_error
1033         cmp #$00
1034         bne test19_error
1036         sec
1037         lda #$40
1038         ror
1039         bcs test19_error
1040         beq test19_error
1041         bpl test19_error
1043         cmp #$A0
1044         bne test19_error
1046         clc
1047         lda #$FF
1048         ror
1049         bcc test19_error
1050         beq test19_error
1051         bmi test19_error
1053         cmp #$7F
1054         bne test19_error
1056         sec
1057         lda #$FF
1058         ror
1059         bcc test19_error
1060         beq test19_error
1061         bpl test19_error
1063         cmp #$FF
1064         bne test19_error
1066         lda #$00
1068         jmp test19_end
1070 test19_error
1071         lda #$01
1073 test19_end
1074         jsr end_test
1075         jmp test20
1076         
1077 test19_msg
1078         .byt "[TEST #19] ROR", 0
1081 ;--------------------------------------------------------------
1082 ; Test 20 SBC
1083 ;---------------------------------------------------------------
1085 test20
1086         lda #<test20_msg
1087         sta param_low
1088         lda #>test20_msg
1089         sta param_high
1090         jsr start_test
1092         sec
1093         lda #$00
1094         sbc #$00
1095         bne test20_error
1096         bcc test20_error
1097         bmi test20_error
1098         bvs test20_error
1100         cmp #$00
1101         bne test20_error
1102         
1103         
1105         clc
1106         lda #$00
1107         sbc #$00
1108         beq test20_error
1109         bcs test20_error
1110         bpl test20_error
1111         bvs test20_error
1113         cmp #$FF
1114         bne test20_error
1116         clc
1117         lda #$80
1118         sbc #$00
1119         beq test20_error
1120         bcc test20_error
1121         bmi test20_error
1122         bvc test20_error
1124         cmp #$7F
1125         bne test20_error
1127         sec
1128         lda #$7F
1129         sbc #$7F
1130         bne test20_error
1131         bcc test20_error
1132         bmi test20_error
1133         bvs test20_error
1135         cmp #$00
1136         bne test20_error
1139         sec
1140         lda #$FF
1141         sbc #$7F
1142         beq test20_error
1143         bcc test20_error
1144         bpl test20_error
1145         bvs test20_error
1147         cmp #$80
1148         bne test20_error
1150         clc
1151         lda #$FF
1152         sbc #$7F
1153         beq test20_error
1154         bcc test20_error
1155         bmi test20_error
1156         bvc test20_error
1158         cmp #$7F
1159         bne test20_error
1161         lda #$00
1163         jmp test20_end
1165 test20_error
1166         lda #$01
1168 test20_end
1169         jsr end_test
1170         jmp section2
1171         
1172 test20_msg
1173         .byt "[TEST #20] SBC", 0
1176 ;---------------------------------------------------------------
1177 ; Section 2 - Load/Store/Transfer
1178 ;---------------------------------------------------------------
1180 section2
1181         lda #<section2_msg
1182         sta param_low
1183         lda #>section2_msg
1184         sta param_high
1185         lda #cmd_print
1186         sta cmd_port
1187         jmp test21
1189 section2_msg
1190         .byt 10
1191         .byt "=========================================", 10
1192         .byt "* Load/Store/Transfer Instruction Tests *", 10
1193         .byt "=========================================", 10, 10, 0
1196 ;--------------------------------------------------------------
1197 ; Test 21 LDA
1198 ;---------------------------------------------------------------
1200 test21
1201         lda #<test21_msg
1202         sta param_low
1203         lda #>test21_msg
1204         sta param_high
1205         jsr start_test
1207         lda #$00
1208         bne test21_error
1209         bmi test21_error
1211         cmp #$00
1212         bne test21_error
1214         lda #$01
1215         beq test21_error
1216         bmi test21_error
1218         cmp #$01
1219         bne test21_error
1221         lda #$80
1222         beq test21_error
1223         bpl test21_error
1225         cmp #$80
1226         bne test21_error
1228         lda #$00
1230         jmp test21_end
1232 test21_error
1233         lda #$01
1235 test21_end
1236         jsr end_test
1237         jmp test22
1238         
1239 test21_msg
1240         .byt "[TEST #21] LDA", 0
1242 ;--------------------------------------------------------------
1243 ; Test 22 LDX
1244 ;---------------------------------------------------------------
1246 test22
1247         lda #<test22_msg
1248         sta param_low
1249         lda #>test22_msg
1250         sta param_high
1251         jsr start_test
1254         ldx #$00
1255         bne test22_error
1256         bmi test22_error
1258         cpx #$00
1259         bne test22_error
1261         ldx #$7F
1262         beq test22_error
1263         bmi test22_error
1265         cpx #$7F
1266         bne test22_error
1268         ldx #$FF
1269         beq test22_error
1270         bpl test22_error
1272         cpx #$FF
1273         bne test22_error
1275         lda #$00
1277         jmp test22_end
1279 test22_error
1280         lda #$01
1282 test22_end
1283         jsr end_test
1284         jmp test23
1285         
1286 test22_msg
1287         .byt "[TEST #22] LDX", 0
1289 ;--------------------------------------------------------------
1290 ; Test 23 LDY
1291 ;---------------------------------------------------------------
1293 test23
1294         lda #<test23_msg
1295         sta param_low
1296         lda #>test23_msg
1297         sta param_high
1298         jsr start_test
1300         ldy #$00
1301         bne test23_error
1302         bmi test23_error
1304         cpy #$00
1305         bne test23_error
1307         ldy #$40
1308         beq test23_error
1309         bmi test23_error
1311         cpy #$40
1312         bne test23_error
1314         ldy #$C0
1315         beq test23_error
1316         bpl test23_error
1318         cpy #$C0
1319         bne test23_error
1322         lda #$00
1324         jmp test23_end
1326 test23_error
1327         lda #$01
1329 test23_end
1330         jsr end_test
1331         jmp test24
1332         
1333 test23_msg
1334         .byt "[TEST #23] LDY", 0
1336 ;--------------------------------------------------------------
1337 ; Test 24 STA
1338 ;---------------------------------------------------------------
1340 test24
1341         lda #<test24_msg
1342         sta param_low
1343         lda #>test24_msg
1344         sta param_high
1345         jsr start_test
1347         lda #$00
1348         sta temp1
1349         lda temp1
1351         cmp #$00
1352         bne test24_error
1354         lda #$FF
1355         sta temp1
1356         lda temp1
1358         cmp #$FF
1359         bne test24_error
1361         lda #$00
1363         jmp test24_end
1365 test24_error
1366         lda #$01
1368 test24_end
1369         jsr end_test
1370         jmp test25
1371         
1372 test24_msg
1373         .byt "[TEST #24] STA", 0
1375 ;--------------------------------------------------------------
1376 ; Test 25 STX
1377 ;---------------------------------------------------------------
1379 test25
1380         lda #<test25_msg
1381         sta param_low
1382         lda #>test25_msg
1383         sta param_high
1384         jsr start_test
1386         ldx #$00
1387         stx temp1
1388         lda temp1
1390         cmp #$00
1391         bne test25_error
1393         ldx #$FF
1394         stx temp1
1395         lda temp1
1397         cmp #$FF
1398         bne test25_error
1400         lda #$00
1402         jmp test25_end
1404 test25_error
1405         lda #$01
1407 test25_end
1408         jsr end_test
1409         jmp test26
1410         
1411 test25_msg
1412         .byt "[TEST #25] STX", 0
1414 ;--------------------------------------------------------------
1415 ; Test 26 STY
1416 ;---------------------------------------------------------------
1418 test26
1419         lda #<test26_msg
1420         sta param_low
1421         lda #>test26_msg
1422         sta param_high
1423         jsr start_test
1425         ldy #$00
1426         sty temp1
1427         lda temp1
1429         cmp #$00
1430         bne test26_error
1432         ldy #$FF
1433         sty temp1
1434         lda temp1
1436         cmp #$FF
1437         bne test26_error
1440         lda #$00
1442         jmp test26_end
1444 test26_error
1445         lda #$01
1447 test26_end
1448         jsr end_test
1449         jmp test27
1450         
1451 test26_msg
1452         .byt "[TEST #26] STY", 0
1454 ;--------------------------------------------------------------
1455 ; Test 27 TAX
1456 ;---------------------------------------------------------------
1458 test27
1459         lda #<test27_msg
1460         sta param_low
1461         lda #>test27_msg
1462         sta param_high
1463         jsr start_test
1466         lda #$00
1467         tax
1468         bne test27_error
1469         bmi test27_error
1471         cpx #$00
1472         bne test27_error
1474         lda #$80
1475         tax
1476         beq test27_error
1477         bpl test27_error
1479         cpx #$80
1480         bne test27_error
1482         lda #$7F
1483         tax
1484         beq test27_error
1485         bmi test27_error
1487         cpx #$7F
1488         bne test27_error
1491         lda #$00
1493         jmp test27_end
1495 test27_error
1496         lda #$01
1498 test27_end
1499         jsr end_test
1500         jmp test28
1501         
1502 test27_msg
1503         .byt "[TEST #27] TAX", 0
1505 ;--------------------------------------------------------------
1506 ; Test 28 TAY
1507 ;---------------------------------------------------------------
1509 test28
1510         lda #<test28_msg
1511         sta param_low
1512         lda #>test28_msg
1513         sta param_high
1514         jsr start_test
1517         lda #$00
1518         tay
1519         bne test28_error
1520         bmi test28_error
1522         cpy #$00
1523         bne test28_error
1525         lda #$80
1526         tay
1527         beq test28_error
1528         bpl test28_error
1530         cpy #$80
1531         bne test28_error
1533         lda #$FF
1534         tay
1535         beq test28_error
1536         bpl test28_error
1538         cpy #$FF
1539         bne test28_error
1541         lda #$00
1543         jmp test28_end
1545 test28_error
1546         lda #$01
1548 test28_end
1549         jsr end_test
1550         jmp test29
1551         
1552 test28_msg
1553         .byt "[TEST #28] TAY", 0
1555 ;--------------------------------------------------------------
1556 ; Test 29 TSX
1557 ;---------------------------------------------------------------
1559 test29
1560         lda #<test29_msg
1561         sta param_low
1562         lda #>test29_msg
1563         sta param_high
1564         jsr start_test
1566         sei
1567         
1568         tsx
1569         txa
1570         
1571         ldx #$00
1572         txs
1573         tsx
1574         bne test29_error
1575         bmi test29_error
1576         
1577         cpx #$00
1578         bne test29_error
1580         ldx #$FF
1581         txs
1582         tsx
1583         beq test29_error
1584         bpl test29_error
1585         
1586         cpx #$FF
1587         bne test29_error
1589         tax
1590         txs
1591         cli
1593         lda #$00
1595         jmp test29_end
1597 test29_error
1598         tax
1599         txs
1600         cli
1602         lda #$01
1604 test29_end
1605         jsr end_test
1606         jmp test30
1607         
1608 test29_msg
1609         .byt "[TEST #29] TSX", 0
1612 ;--------------------------------------------------------------
1613 ; Test 30 TXA
1614 ;---------------------------------------------------------------
1616 test30
1617         lda #<test30_msg
1618         sta param_low
1619         lda #>test30_msg
1620         sta param_high
1621         jsr start_test
1623         ldx #$00
1624         txa
1625         bne test30_error
1626         bmi test30_error
1628         cmp #$00
1629         bne test30_error
1631         ldx #$80
1632         txa
1633         beq test30_error
1634         bpl test30_error
1636         cmp #$80
1637         bne test30_error
1639         ldx #$01
1640         txa
1641         beq test30_error
1642         bmi test30_error
1644         cmp #$01
1645         bne test30_error
1647         lda #$00
1649         jmp test30_end
1651 test30_error
1652         lda #$01
1654 test30_end
1655         jsr end_test
1656         jmp test31
1657         
1658 test30_msg
1659         .byt "[TEST #30] TXA", 0
1661 ;--------------------------------------------------------------
1662 ; Test 31 TXS
1663 ;---------------------------------------------------------------
1665 test31
1666         lda #<test31_msg
1667         sta param_low
1668         lda #>test31_msg
1669         sta param_high
1670         jsr start_test
1672         sei
1673         
1674         tsx
1675         txa
1676         
1677         ldx #$01
1678         txs
1679         tsx
1680         beq test31_error
1681         bmi test31_error
1682         
1683         cpx #$01
1684         bne test31_error
1686         ldx #$80
1687         txs
1688         tsx
1689         beq test31_error
1690         bpl test31_error
1691         
1692         cpx #$80
1693         bne test31_error
1695         tax
1696         txs
1697         cli
1699         lda #$00
1701         jmp test31_end
1703 test31_error
1704         tax
1705         txs
1706         cli
1708         lda #$01
1710 test31_end
1711         jsr end_test
1712         jmp test32
1713         
1714 test31_msg
1715         .byt "[TEST #31] TXS", 0
1717 ;--------------------------------------------------------------
1718 ; Test 32 TYA
1719 ;---------------------------------------------------------------
1721 test32
1722         lda #<test32_msg
1723         sta param_low
1724         lda #>test32_msg
1725         sta param_high
1726         jsr start_test
1728         ldy #$00
1729         tya
1730         bne test32_error
1731         bmi test32_error
1733         cmp #$00
1734         bne test32_error
1736         ldy #$80
1737         tya
1738         beq test32_error
1739         bpl test32_error
1741         cmp #$80
1742         bne test32_error
1744         ldy #$7F
1745         tya
1746         beq test32_error
1747         bmi test32_error
1749         cmp #$7F
1750         bne test32_error
1752         lda #$00
1754         jmp test32_end
1756 test32_error
1757         lda #$01
1759 test32_end
1760         jsr end_test
1761         jmp section3
1762         
1763 test32_msg
1764         .byt "[TEST #32] TYA", 0
1769 ;---------------------------------------------------------------
1770 ; Section 3 - Stack Operations
1771 ;---------------------------------------------------------------
1773 section3
1774         lda #<section3_msg
1775         sta param_low
1776         lda #>section3_msg
1777         sta param_high
1778         lda #cmd_print
1779         sta cmd_port
1780         jmp test33
1782 section3_msg
1783         .byt 10
1784         .byt "=========================================", 10
1785         .byt "* Stack Instruction Tests               *", 10
1786         .byt "=========================================", 10, 10, 0
1789 ;--------------------------------------------------------------
1790 ; Test 33 PHA
1791 ;---------------------------------------------------------------
1793 test33
1794         lda #<test33_msg
1795         sta param_low
1796         lda #>test33_msg
1797         sta param_high
1798         jsr start_test
1800         lda #$00
1801         pha
1802         pla
1803         bne test33_error
1804         bmi test33_error
1806         cmp #$00
1807         bne test33_error
1809         lda #$7F
1810         pha
1811         pla
1812         beq test33_error
1813         bmi test33_error
1815         cmp #$7F
1816         bne test33_error
1818         lda #$FF
1819         pha
1820         pla
1821         beq test33_error
1822         bpl test33_error
1824         cmp #$FF
1825         bne test33_error
1827         lda #$00
1829         jmp test33_end
1831 test33_error
1832         lda #$01
1834 test33_end
1835         jsr end_test
1836         jmp test34
1837         
1838 test33_msg
1839         .byt "[TEST #33] PHA", 0
1841 ;--------------------------------------------------------------
1842 ; Test 34 PHP
1843 ;---------------------------------------------------------------
1845 test34
1846         lda #<test34_msg
1847         sta param_low
1848         lda #>test34_msg
1849         sta param_high
1850         jsr start_test
1852         php
1853         pla
1854         ora #$C3
1855         pha
1856         plp
1858         bcc test34_error
1859         bne test34_error
1860         bpl test34_error
1861         bvc test34_error
1863         cli
1864         cld
1865         
1866         php
1867         pla
1869         sti
1871         ldx #$04
1872         stx temp1
1874         bit temp1
1875         bne test34_error
1877         ldx #$08
1878         stx temp1
1880         bit temp1
1881         bne test34_error
1884         lda #$00
1886         jmp test34_end
1888 test34_error
1889         lda #$01
1891 test34_end
1892         jsr end_test
1893         jmp test35
1894         
1895         
1896 test34_msg
1897         .byt "[TEST #34] PHP", 0
1899 ;--------------------------------------------------------------
1900 ; Test 35 PLA
1901 ;---------------------------------------------------------------
1903 test35
1904         lda #<test35_msg
1905         sta param_low
1906         lda #>test35_msg
1907         sta param_high
1908         jsr start_test
1910         lda #$00
1911         pha
1912         pla
1913         bne test35_error
1914         bmi test35_error
1916         cmp #$00
1917         bne test35_error
1919         lda #$7F
1920         pha
1921         pla
1922         beq test35_error
1923         bmi test35_error
1925         cmp #$7F
1926         bne test35_error
1928         lda #$FF
1929         pha
1930         pla
1931         beq test35_error
1932         bpl test35_error
1934         cmp #$FF
1935         bne test35_error
1937         lda #$00
1939         jmp test35_end
1941 test35_error
1942         lda #$01
1944 test35_end
1945         jsr end_test
1946         jmp test36
1947         
1948 test35_msg
1949         .byt "[TEST #35] PLA", 0
1951 ;--------------------------------------------------------------
1952 ; Test 36 PLP
1953 ;---------------------------------------------------------------
1955 test36
1956         lda #<test36_msg
1957         sta param_low
1958         lda #>test36_msg
1959         sta param_high
1960         jsr start_test
1963         php
1964         pla
1965         and #$3C
1966         pha
1967         plp
1969         bcs test36_error
1970         beq test36_error
1971         bmi test36_error
1972         bvs test36_error
1974         sei
1975         sed
1976         
1977         php
1978         pla
1979         
1980         cli
1981         cld
1983         ldx #$04
1984         stx temp1
1985         bit temp1
1986         beq test36_error
1988         ldx #$08
1989         stx temp1
1990         bit temp1
1991         beq test36_error
1993         lda #$00
1995         jmp test36_end
1997 test36_error
1998         lda #$01
2000 test36_end
2001         jsr end_test
2002         jmp test37
2003         
2004 test36_msg
2005         .byt "[TEST #36] PLP", 0
2007 ;--------------------------------------------------------------
2008 ; Test 37 Stack memory
2009 ;---------------------------------------------------------------
2011 test37
2012         lda #<test37_msg
2013         sta param_low
2014         lda #>test37_msg
2015         sta param_high
2016         jsr start_test
2018         tsx
2019         lda #$66
2020         sta $0100, X
2021         dex
2022         txs
2024         pla
2025         cmp #$66
2026         bne test37_error
2028         tsx
2029         txa
2030         tay
2032         ldx #$00
2033         txs
2034         lda #$55
2035         pha
2036         cmp $0100
2037         bne test37_error
2039         tsx
2040         cpx #$ff
2041         bne test37_error
2043         lda #$ab
2044         sta $0100
2045         pla
2046         cmp #$ab
2047         bne test37_error
2049         tya
2050         tax
2051         txs
2052         lda #$00
2054         jmp test37_end
2056 test37_error
2057         lda #$01
2059 test37_end
2060         jsr end_test
2061         jmp section4
2062         
2063 test37_msg
2064         .byt "[TEST #37] Stack memory", 0
2067 ;---------------------------------------------------------------
2068 ; Section 4 - Addressing Modes
2069 ;---------------------------------------------------------------
2071 section4
2072         lda #<section4_msg
2073         sta param_low
2074         lda #>section4_msg
2075         sta param_high
2076         lda #cmd_print
2077         sta cmd_port
2078         jmp test38
2080 section4_msg
2081         .byt 10
2082         .byt "=========================================", 10
2083         .byt "* Addressing Modes Tests                *", 10
2084         .byt "=========================================", 10, 10, 0
2086 ;--------------------------------------------------------------
2087 ; Test 38 Accumulator
2088 ;---------------------------------------------------------------
2090 test38
2091         lda #<test38_msg
2092         sta param_low
2093         lda #>test38_msg
2094         sta param_high
2095         jsr start_test
2097         lda #$40
2098         asl
2099         cmp #$80
2100         bne test38_error
2101         
2102         lda #$40
2103         lsr
2104         cmp #$20
2105         bne test38_error
2107         clc
2108         lda #$40
2109         rol
2110         cmp #$80
2111         bne test38_error
2113         clc
2114         lda #$40
2115         ror
2116         cmp #$20
2117         bne test38_error
2118         
2119         lda #$00
2120         jmp test38_end
2122 test38_error
2123         lda #$01
2125 test38_end
2126         jsr end_test
2127         jmp test39
2128         
2129 test38_msg
2130         .byt "[TEST #38] Accumulator", 0
2132 ;--------------------------------------------------------------
2133 ; Test 39 Immediate
2134 ;---------------------------------------------------------------
2136 test39
2137         lda #<test39_msg
2138         sta param_low
2139         lda #>test39_msg
2140         sta param_high
2141         jsr start_test
2143         lda #$30
2144         cmp #$31
2145         beq test39_error
2146         cmp #$30
2147         bne test39_error
2149         lda #$00
2150         jmp test39_end
2152 test39_error
2153         lda #$01
2155 test39_end
2156         jsr end_test
2157         jmp test40
2158         
2159 test39_msg
2160         .byt "[TEST #39] Immediate", 0
2162 ;--------------------------------------------------------------
2163 ; Test 40 Zero Page
2164 ;---------------------------------------------------------------
2166 test40
2167         lda #<test40_msg
2168         sta param_low
2169         lda #>test40_msg
2170         sta param_high
2171         jsr start_test
2173         lda #$30
2174         sta temp1
2175         ldx temp1
2176         cpx #$30
2177         bne test40_error
2178         
2179         lda #$00
2180         jmp test40_end
2182 test40_error
2183         lda #$01
2185 test40_end
2186         jsr end_test
2187         jmp test41
2188         
2189 test40_msg
2190         .byt "[TEST #40] Zero Page", 0
2193 ;--------------------------------------------------------------
2194 ; Test 41 Zero Page Indexed (X)
2195 ;---------------------------------------------------------------
2197 test41
2198         lda #<test41_msg
2199         sta param_low
2200         lda #>test41_msg
2201         sta param_high
2202         jsr start_test
2203         
2204         lda #$01
2205         sta temp2
2206         
2207         lda #$85
2208         sta temp1
2209         ldx #$00
2210         
2211         lda #$00
2212         lda temp1, X
2213         cmp #$85
2214         bne test41_error
2215         
2216         ldx #$ff
2217         lda temp2, x
2218         cmp #$85
2219         bne test41_error
2220         
2221         ldx #$01
2222         lda temp1, x
2223         cmp #$01
2224         bne test41_error
2225         
2227         lda #$00
2228         jmp test41_end
2230 test41_error
2231         lda #$01
2233 test41_end
2234         jsr end_test
2235         jmp test42
2236         
2237 test41_msg
2238         .byt "[TEST #41] Zero Page Indexed (X)", 0
2240 ;--------------------------------------------------------------
2241 ; Test 42 Zero Page Indexed (Y)
2242 ;---------------------------------------------------------------
2244 test42
2245         lda #<test42_msg
2246         sta param_low
2247         lda #>test42_msg
2248         sta param_high
2249         jsr start_test
2251         ldx #$02
2252         stx temp2
2253         
2254         ldx #$86
2255         stx temp1
2256         ldy #$00
2257         
2258         ldx #$00
2259         ldx temp1, Y
2260         cpx #$86
2261         bne test42_error
2262         
2263         ldy #$ff
2264         ldx temp2, Y
2265         cpx #$86
2266         bne test42_error
2267         
2268         ldy #$01
2269         ldx temp1, Y
2270         cpx #$02
2271         bne test42_error
2273         lda #$00
2274         jmp test42_end
2276 test42_error
2277         lda #$01
2279 test42_end
2280         jsr end_test
2281         jmp test43
2282         
2283 test42_msg
2284         .byt "[TEST #42] Zero Page Indexed (Y)", 0
2286 ;--------------------------------------------------------------
2287 ; Test 43 Absolute
2288 ;---------------------------------------------------------------
2290 test43
2291         lda #<test43_msg
2292         sta param_low
2293         lda #>test43_msg
2294         sta param_high
2295         jsr start_test
2297         lda #$55
2298         sta temp_abs
2299         lda #$66
2300         lda temp_abs
2301         cmp #$55
2302         bne test43_error
2303         
2304         lda #$00
2305         jmp test43_end
2307 test43_error
2308         lda #$01
2310 test43_end
2311         jsr end_test
2312         jmp test44
2313         
2314 test43_msg
2315         .byt "[TEST #43] Absolute", 0
2317 ;--------------------------------------------------------------
2318 ; Test 44 Absolute Indexed (X)
2319 ;---------------------------------------------------------------
2321 test44
2322         lda #<test44_msg
2323         sta param_low
2324         lda #>test44_msg
2325         sta param_high
2326         jsr start_test
2328         lda #$23
2329         sta temp_abs+$101
2330         lda #$66
2331         ldx #$ff
2332         lda temp_abs+$2, X
2333         cmp #$23
2334         bne test44_error
2335         
2336         ldx #$11
2337         lda #$44
2338         sta temp_abs+$2, X
2339         lda #$22
2340         lda temp_abs+$13
2341         cmp #$44
2342         bne test44_error
2343         
2344         
2345         lda #$00
2346         jmp test44_end
2348 test44_error
2349         lda #$01
2351 test44_end
2352         jsr end_test
2353         jmp test45
2354         
2355 test44_msg
2356         .byt "[TEST #44] Absolute Indexed (X)", 0
2358 ;--------------------------------------------------------------
2359 ; Test 45  Absolute Indexed (Y)
2360 ;---------------------------------------------------------------
2362 test45
2363         lda #<test45_msg
2364         sta param_low
2365         lda #>test45_msg
2366         sta param_high
2367         jsr start_test
2370         lda #$23
2371         sta temp_abs+$101
2372         lda #$66
2373         ldy #$ff
2374         lda temp_abs+$2, Y
2375         cmp #$23
2376         bne test45_error
2377         
2378         ldy #$11
2379         lda #$44
2380         sta temp_abs+$2, Y
2381         lda #$22
2382         lda temp_abs+$13
2383         cmp #$44
2384         bne test45_error
2387         lda #$00
2388         jmp test45_end
2390 test45_error
2391         lda #$01
2393 test45_end
2394         jsr end_test
2395         jmp test46
2396         
2397 test45_msg
2398         .byt "[TEST #45] Absolute Indexed (Y)", 0
2400 ;--------------------------------------------------------------
2401 ; Test 46 Indirect
2402 ;---------------------------------------------------------------
2404 test46
2405         lda #<test46_msg
2406         sta param_low
2407         lda #>test46_msg
2408         sta param_high
2409         jsr start_test
2411         lda #<test46_jmp1
2412         sta temp_abs
2413         lda #>test46_jmp1
2414         sta temp_abs+$1
2415         jmp (temp_abs)
2416         
2417         jmp test46_error
2418         
2419         ; Bug in indirect addressing
2420 test46_jmp1
2421         lda #<test46_jmp2
2422         sta temp_abs+$ff
2423         lda #>test46_jmp2
2424         sta temp_abs
2425         lda #$00
2426         sta temp_abs+$100
2427         jmp (temp_abs+$ff)
2428         
2429 test46_jmp2
2431         lda #$00
2432         jmp test46_end
2434 test46_error
2435         lda #$01
2437 test46_end
2438         jsr end_test
2439         jmp test47
2440         
2441 test46_msg
2442         .byt "[TEST #46] Indirect", 0
2444 ;--------------------------------------------------------------
2445 ; Test 47 Indexed Indirect (X)
2446 ;---------------------------------------------------------------
2448 test47
2449         lda #<test47_msg
2450         sta param_low
2451         lda #>test47_msg
2452         sta param_high
2453         jsr start_test
2455         lda #<temp_abs
2456         sta temp1
2457         lda #>temp_abs
2458         sta temp2
2459         
2460         ldx #$00
2461         lda #$13
2462         sta (temp1, x)
2463         lda temp_abs
2464         cmp #$13
2465         bne test47_error
2467         ldx #$ff
2468         lda #$14
2469         sta (temp2, x)
2470         lda temp_abs
2471         cmp #$14
2472         bne test47_error
2474         lda #<temp_abs
2475         sta tempn
2476         lda #>temp_abs
2477         sta $00
2478         lda #$00
2479         sta tempn+$1
2481         ldx #$00
2482         lda #$23
2483         sta (tempn, x)
2484         lda temp_abs
2485         cmp #$23
2486         bne test47_error
2487         
2489         lda #$00
2490         jmp test47_end
2492 test47_error
2493         lda #$01
2495 test47_end
2496         jsr end_test
2497         jmp test48
2498         
2499 test47_msg
2500         .byt "[TEST #47] Indexed Indirect (X)", 0
2502 ;--------------------------------------------------------------
2503 ; Test 48 Indirect Indexed (Y)
2504 ;---------------------------------------------------------------
2506 test48
2507         lda #<test48_msg
2508         sta param_low
2509         lda #>test48_msg
2510         sta param_high
2511         jsr start_test
2513         lda #$fc
2514         sta temp_abs+$101
2515         
2516         ldy #$ff
2517         lda #<temp_abs2
2518         sta tempn
2519         lda #>temp_abs2
2520         sta $00
2521         lda #$00
2522         sta tempn+$1
2523         
2524         lda (tempn), Y
2525         cmp #$fc
2526         bne test48_error
2527         
2528         
2529         lda #$00
2530         jmp test48_end
2532 test48_error
2533         lda #$01
2535 test48_end
2536         jsr end_test
2537         jmp test49
2538         
2539 test48_msg
2540         .byt "[TEST #48] Indirect Indexed (Y)", 0
2543 ;--------------------------------------------------------------
2544 ; Test 49 Relative
2545 ;---------------------------------------------------------------
2547 test49
2548         lda #<test49_msg
2549         sta param_low
2550         lda #>test49_msg
2551         sta param_high
2552         jsr start_test
2554         lda #$00
2555         beq test49_end
2556         bne test49_end
2558         lda #$01
2560 test49_end
2561         jsr end_test
2562         jmp test50
2563         
2564 test49_msg
2565         .byt "[TEST #49] Relative", 0
2568 ;--------------------------------------------------------------
2569 ; Test 50 Implied
2570 ;---------------------------------------------------------------
2572 test50
2573         lda #<test50_msg
2574         sta param_low
2575         lda #>test50_msg
2576         sta param_high
2577         jsr start_test
2579         nop
2580         nop
2581         nop
2582         
2583         lda #$00
2584         jmp test50_end
2586 test50_error
2587         lda #$01
2589 test50_end
2590         jsr end_test
2591         jmp section5
2592         
2593 test50_msg
2594         .byt "[TEST #50] Implied", 0
2597 ;---------------------------------------------------------------
2598 ; Section 5 - Final tests
2599 ;---------------------------------------------------------------
2601 section5
2602         lda #<section5_msg
2603         sta param_low
2604         lda #>section5_msg
2605         sta param_high
2606         lda #cmd_print
2607         sta cmd_port
2608         jmp test51
2610 section5_msg
2611         .byt 10
2612         .byt "=========================================", 10
2613         .byt "* Final Tests                           *", 10
2614         .byt "=========================================", 10, 10, 0
2616 ;--------------------------------------------------------------
2617 ; Test 51 JSR
2618 ;---------------------------------------------------------------
2620 test51
2621         lda #<test51_msg
2622         sta param_low
2623         lda #>test51_msg
2624         sta param_high
2625         jsr start_test
2627         jsr test51_sub
2628 test51_jsr
2629         nop
2630         nop
2631         
2632 test51_sub
2633         tsx
2634         inx
2635         inx
2636         txs
2637         
2638         lda $100, X
2639         cmp #>test51_jsr-1
2640         bne test51_error
2642         dex
2643         lda $100, X
2644         cmp #<test51_jsr-1
2645         bne test51_error
2646         
2647         lda #>test51_end-1
2648         pha
2649         
2650         lda #<test51_end-1
2651         pha
2652         lda #$00
2653         rts
2656 test51_error
2657         lda #$01
2659 test51_end
2660         jsr end_test
2661         jmp test52
2662         
2663 test51_msg
2664         .byt "[TEST #51] JSR", 0
2666 ;--------------------------------------------------------------
2667 ; Test 52 BRK
2668 ;---------------------------------------------------------------
2670 test52
2671         lda #<test52_msg
2672         sta param_low
2673         lda #>test52_msg
2674         sta param_high
2675         jsr start_test
2677         brk
2678         nop
2679         
2680 test52_brk
2681         lda temp2
2682         cmp #>test52_brk
2683         bne test52_error
2684         
2685         lda temp3
2686         cmp #<test52_brk
2687         bne test52_error
2688         
2689         lda temp1
2690         and #$10
2691         beq test52_error
2692         
2693         lda temp4
2694         and #$10
2695         beq test52_error
2696         
2698         lda temp4
2699         and #$04
2700         bne test52_error
2701         
2702         lda temp1
2703         and #$04
2704         beq test52_error
2705         
2707         lda #$00
2708         jmp test52_end
2710 test52_error
2711         lda #$01
2713 test52_end
2714         jsr end_test
2715         jmp test53
2716         
2717 test52_msg
2718         .byt "[TEST #52] BRK", 0
2721 test53
2722 ;---------------------------------------------------------------
2723 ; Exit
2724 ;---------------------------------------------------------------
2726 exit
2727         lda #<detail_msg
2728         sta param_low
2729         lda #>detail_msg
2730         sta param_high
2731         lda #cmd_print
2732         sta cmd_port
2734         lda #$00
2735         sta param_high
2736         lda test_count
2737         sta param_low
2738         lda #cmd_print_int
2739         sta cmd_port
2741         lda #<detail_error_msg
2742         sta param_low
2743         lda #>detail_error_msg
2744         sta param_high
2745         lda #cmd_print
2746         sta cmd_port
2748         lda #$00
2749         sta param_high
2750         lda error_count
2751         sta param_low
2752         lda #cmd_print_int
2753         sta cmd_port
2755         lda #<detail_newline_msg
2756         sta param_low
2757         lda #>detail_newline_msg
2758         sta param_high
2759         lda #cmd_print
2760         sta cmd_port
2762         lda #cmd_exit
2763         sta cmd_port
2764         
2765 ;---------------------------------------------------------------
2766 ; Subroutines
2767 ;---------------------------------------------------------------
2769 start_test
2770         inc test_count
2771         lda #cmd_print
2772         sta cmd_port
2773         
2774         lda #<addr_msg
2775         sta param_low
2776         lda #>addr_msg
2777         sta param_high
2778         lda #cmd_print
2779         sta cmd_port
2781         txa
2782         pha
2783         tsx
2784         inx
2785         inx
2786         inx
2787         lda $100, X
2788         sta param_high
2789         dex
2790         lda $100, X
2791         sta param_low
2792         lda #cmd_print_hex
2793         sta cmd_port
2794         pla
2795         tax
2797         lda #<addr_msg_end
2798         sta param_low
2799         lda #>addr_msg_end
2800         sta param_high
2801         lda #cmd_print
2802         sta cmd_port
2804         rts
2806 end_test
2807         pha
2808         pla
2809         bne end_test_error
2810         lda #<ok_msg
2811         sta param_low
2812         lda #>ok_msg
2813         sta param_high
2814         lda #cmd_print
2815         sta cmd_port
2816         rts
2818 end_test_error
2820         inc error_count
2821         lda #<fail_msg
2822         sta param_low
2823         lda #>fail_msg
2824         sta param_high
2825         lda #cmd_print
2826         sta cmd_port
2827         rts
2828         
2830 addr_msg
2831         .byt " [", 0
2832 addr_msg_end
2833         .byt "]", 0
2835 fail_msg
2836         .byt ": FAIL", 10, 0
2837 ok_msg
2838         .byt ": OK", 10, 0
2839 detail_msg
2840         .byt 10, 10
2841         .byt "-------------------------------------------------", 10
2842         .byt " Test Results ", 10
2843         .byt "-------------------------------------------------", 10
2844         .byt "Tests: ", 0
2845 detail_error_msg
2846         .byt ", Errors: ", 0
2847 detail_newline_msg
2848         .byt 10, 10, 0
2853 ;---------------------------------------------------------------
2854 ; Other handlers
2855 ;---------------------------------------------------------------
2858 interrupt
2859         pha
2860         php
2861         php
2862         pla
2863         and #$10
2864         beq interrupt_end
2865         pla
2866         sta temp1
2867         txa
2868         pha
2869         tsx
2870         inx
2871         inx
2872         inx
2873         inx
2874         inx
2875         lda $100, X
2876         sta temp2
2877         dex
2878         lda $100, X
2879         sta temp3
2880         dex
2881         lda $100, X
2882         sta temp4
2883         pla
2884         tax
2885         pla
2886         rti
2887         
2888 interrupt_end
2889         pla
2890         pla
2891         rti
2895         rti
2898 last_pos
2899         .dsb $FFFA-last_pos, $00
2900         .word nmi
2901         .word reset
2902         .word interrupt