OSDN Git Service

a53ce80bd040a4b2f9117d2bc5a2bbf96cfb95ee
[motonesfpga/motonesfpga.git] / tools / regression-test / regression.asm
1 .setcpu         "6502"\r
2 .autoimport     on\r
3 \r
4 ; iNES header\r
5 .segment "HEADER"\r
6         .byte   $4E, $45, $53, $1A      ; "NES" Header\r
7         .byte   $02                     ; PRG-BANKS\r
8         .byte   $01                     ; CHR-BANKS\r
9         .byte   $01                     ; Vetrical Mirror\r
10         .byte   $00                     ; \r
11         .byte   $00, $00, $00, $00      ; \r
12         .byte   $00, $00, $00, $00      ; \r
13 \r
14 \r
15 ;;;;memory map\r
16 ;;0000 - 00ff  zp: volatile though functions\r
17 ;;0100 - 01ff  sp: preserved through functions   \r
18 ;;0200 - 02ff  dma: dedicated for dma\r
19 ;;0300 - 07ff  global: global variables.\r
20 \r
21 .segment "STARTUP"\r
22 .proc   Reset\r
23 \r
24 ; interrupt off, initialize sp.\r
25         sei\r
26         ldx     #$ff\r
27         txs\r
28 \r
29     jsr init_global\r
30     jsr init_ppu\r
31 \r
32     lda ad_start_msg\r
33     sta $00\r
34     lda ad_start_msg+1\r
35     sta $01\r
36     jsr print_ln\r
37 \r
38     ;;test start...\r
39     jsr single_inst_test\r
40     jsr a2_inst_test\r
41     jsr a3_inst_test\r
42     jsr a4_inst_test\r
43     jsr a5_inst_test\r
44     jsr ppu_test\r
45 \r
46 .endproc\r
47 \r
48 \r
49     ;;fall through from the above func \r
50     ;;or jump into from the other failed func.\r
51 \r
52     ;;test finished...\r
53 test_success:\r
54     lda ad_test_done_msg\r
55     sta $00\r
56     lda ad_test_done_msg+1\r
57     sta $01\r
58     jsr print_ln\r
59     jmp test_done\r
60 \r
61 test_failure:\r
62     lda use_ppu\r
63     bne :+\r
64     lda #$00\r
65     ;;;generate invalid opcode error.\r
66     jsr $00\r
67 :\r
68     lda ad_test_failed_msg\r
69     sta $00\r
70     lda ad_test_failed_msg+1\r
71     sta $01\r
72     jsr print_ln\r
73 \r
74 test_done:\r
75     ;;show bg...\r
76         lda     #$1e\r
77         sta     $2001\r
78 \r
79     ;;;enable nmi\r
80         lda     #$80\r
81         sta     $2000\r
82 \r
83     ;;done...\r
84     ;;infinite loop.\r
85 mainloop:\r
86         jmp     mainloop\r
87 \r
88 \r
89 nmi_test:\r
90     rti\r
91 \r
92 \r
93 .proc ppu_test\r
94     jsr check_ppu\r
95     lda ad_ppu_test\r
96     sta $00\r
97     lda ad_ppu_test+1\r
98     sta $01\r
99     jsr print_ln\r
100 \r
101     rts\r
102 .endproc\r
103 \r
104 \r
105 ;;a5 instructions:\r
106 ;;bcc   brk     php\r
107 ;;bcs   bvc     pla\r
108 ;;beq   bvs     plp\r
109 ;;bmi   jmp     rti\r
110 ;;bne   jsr     rts\r
111 ;;bpl   pha\r
112 .proc a5_inst_test\r
113     lda ad_a5_test\r
114     sta $00\r
115     lda ad_a5_test+1\r
116     sta $01\r
117     jsr print_ln\r
118 \r
119     ;;branch test\r
120     clc\r
121     bcc :+\r
122     jsr test_failure\r
123 :\r
124     sec\r
125     bcs :+\r
126     jsr test_failure\r
127 :\r
128     lda #$00\r
129     beq :+\r
130     jsr test_failure\r
131 :\r
132     clc\r
133     sbc #$05\r
134     bmi :+\r
135     jsr test_failure\r
136 :\r
137     bne :+\r
138     jsr test_failure\r
139 :\r
140     clc\r
141     adc #$06\r
142     bpl :+\r
143     jsr test_failure\r
144 :\r
145     sec\r
146     lda #$92    ;;-110\r
147     sbc #$46    ;;70, -110 - 70 = 4c(76)\r
148     bvs :+\r
149     jsr test_failure\r
150 :\r
151     sec\r
152     lda #$92    ;;-110\r
153     sbc #$12    ;;18, -110 - 18 = -128\r
154     bvc :+\r
155     jsr test_failure\r
156 :\r
157 \r
158     lda #$00\r
159     ldx #00\r
160     beq @fwd\r
161     ;;forward page crossing branch\r
162 @bwd:\r
163     jmp @fwd\r
164 .repeat 120\r
165     nop\r
166 .endrepeat\r
167 @fwd:\r
168     inx\r
169     cpx #$01\r
170     beq @bwd\r
171 \r
172     ;;repeat the same test \r
173     ;;(in case the above test doesn't go across the page)\r
174     lda #$00\r
175     ldx #00\r
176     beq @fwd2\r
177     ;;forward page crossing branch\r
178 @bwd2:\r
179     jmp @fwd2\r
180 .repeat 120\r
181     nop\r
182 .endrepeat\r
183 @fwd2:\r
184     inx\r
185     cpx #$01\r
186     beq @bwd2\r
187 \r
188     ;jmp, jsr, rts test...\r
189     clc\r
190     lda #100\r
191     jsr @jsr_test1\r
192     cmp #200\r
193     beq @jsr_ok\r
194     jsr test_failure\r
195 @jsr_test1:\r
196     jsr @jsr_test2\r
197     rts\r
198 @jsr_test2:\r
199     jsr @jsr_test3\r
200     rts\r
201 @jsr_test3:\r
202     adc #100\r
203     rts\r
204 @jsr_ok:\r
205 \r
206     sec\r
207     lda #200\r
208     jmp @jmp_test1\r
209 @jmp_test3:\r
210     adc #50\r
211     jmp @jmp_test_done\r
212 @jmp_test2:\r
213     jmp @jmp_test3\r
214     adc #50\r
215 @jmp_test1:\r
216     jmp @jmp_test2\r
217     adc #50\r
218 @jmp_test_done:\r
219     cmp #251\r
220     beq :+\r
221     jsr test_failure\r
222 :\r
223 \r
224     sec\r
225     lda #195\r
226 \r
227     ;;jmp (ind) test\r
228     jmp (@ind1)\r
229 \r
230 @ind1:\r
231 .addr @jmp_addr1\r
232 @ind2:\r
233 .addr @jmp_addr2\r
234 @ind3:\r
235 .addr @jmp_addr3\r
236 @ind4:\r
237 .addr @jmp_addr_done\r
238 \r
239 @jmp_addr2:\r
240     jmp (@ind3)\r
241     adc #230\r
242 @jmp_addr3:\r
243     adc #230\r
244     jmp (@ind4)\r
245 @jmp_addr1:\r
246     jmp (@ind2)\r
247     adc #230\r
248 \r
249 @jmp_addr_done:\r
250     cmp #170\r
251     beq :+\r
252     jsr test_failure\r
253 :\r
254 \r
255     ;;pha,php,pla,plp test\r
256     lda #35\r
257     pha\r
258     lda #70\r
259     pha\r
260     lda #110\r
261     pha\r
262 \r
263     sec\r
264     php\r
265     sei\r
266     php\r
267     clc\r
268     php\r
269     lda #$ff\r
270     php\r
271     lda #$00\r
272     php\r
273     lda #$ff\r
274 \r
275     plp\r
276     beq :+\r
277     jsr test_failure\r
278 :\r
279     plp\r
280     bmi :+\r
281     jsr test_failure\r
282 :\r
283     plp\r
284     bcc :+\r
285     jsr test_failure\r
286 :\r
287     plp\r
288     plp\r
289     bcs :+\r
290     jsr test_failure\r
291 :\r
292     cli\r
293     pla\r
294     cmp #110\r
295     beq :+\r
296     jsr test_failure\r
297 :\r
298     pla\r
299     cmp #70\r
300     beq :+\r
301     jsr test_failure\r
302 :\r
303     pla\r
304     cmp #35\r
305     beq :+\r
306     jsr test_failure\r
307 :\r
308 \r
309 \r
310     rts\r
311 .endproc\r
312 \r
313 ;;a4 instructions:\r
314 ;;asl   lsr\r
315 ;;dec   rol\r
316 ;;inc   ror\r
317 .proc a4_inst_test\r
318     lda ad_a4_test\r
319     sta $00\r
320     lda ad_a4_test+1\r
321     sta $01\r
322     jsr print_ln\r
323 \r
324     lda #$39\r
325     sta $6b\r
326     lda #$a1\r
327     sta $04cc\r
328     lda #$9f\r
329     sta $ff\r
330 \r
331     ldx #$fd\r
332 \r
333     ;;zp, abs, absx, zpx\r
334     asl $6b         ;@6b=39 > 72\r
335     lda $6b\r
336     cmp #$72\r
337     beq :+\r
338     jsr test_failure\r
339 :\r
340 \r
341     dec $04cc       ;@4cc=a1 > a0\r
342     lda $04cc\r
343     cmp #$a0\r
344     beq :+\r
345     jsr test_failure\r
346 :\r
347 \r
348     lsr $03cf, x    ;@4cc=a0 > 50\r
349     lda $04cc\r
350     cmp #$50\r
351     beq :+\r
352     jsr test_failure\r
353 :\r
354 \r
355     inc $02, x      ;@ff=9f > a0\r
356     lda $ff\r
357     cmp #$a0\r
358     beq :+\r
359     jsr test_failure\r
360 :\r
361 \r
362     clc\r
363     rol $02, x      ;@ff=a0 > 40\r
364     rol $02, x      ;@ff=40 > 81\r
365     lda $ff\r
366     cmp #$81\r
367     beq :+\r
368     jsr test_failure\r
369 :\r
370 \r
371     sec\r
372     ror $02, x      ;@ff=81 > c0\r
373     ror $02, x      ;@ff=40 > e0\r
374     lda $ff\r
375     cmp #$e0\r
376     beq :+\r
377     jsr test_failure\r
378 :\r
379 \r
380     rts\r
381 .endproc\r
382 \r
383 ;;a3 instructions:\r
384 ;;sta   stx     sty\r
385 .proc a3_inst_test\r
386     lda ad_a3_test\r
387     sta $00\r
388     lda ad_a3_test+1\r
389     sta $01\r
390     jsr print_ln\r
391 \r
392     lda #$78\r
393     sta $a1\r
394     lda #$05\r
395     sta $a2\r
396 \r
397     lda #$b7\r
398     ldx #$e1\r
399     ldy #$8a\r
400 \r
401     ;;zp, abs, absx, zpx, (ind),y\r
402     ;;(indir, x) is ommited.\r
403     sta $a9         ;@a9=b7\r
404     stx $0a99       ;@a99=e1\r
405     sta $0d80, x    ;@e61=b7\r
406     sty $1f, x      ;@00=8a\r
407     sta ($a1), y    ;@602=b7\r
408 \r
409     cmp $a9\r
410     beq :+\r
411     jsr test_failure\r
412 :\r
413     cpx $0a99\r
414     beq :+\r
415     jsr test_failure\r
416 :\r
417     cmp $0e61\r
418     beq :+\r
419     jsr test_failure\r
420 :\r
421     cpy $00\r
422     beq :+\r
423     jsr test_failure\r
424 :\r
425     cmp $0602\r
426     beq :+\r
427     jsr test_failure\r
428 :\r
429 \r
430     rts\r
431 .endproc\r
432 \r
433 ;;a2 instructions:\r
434 ;;adc   cmp     eor     ldy\r
435 ;;and   cpx     lda     ora\r
436 ;;bit   cpy     ldx     sbc\r
437 .proc a2_inst_test\r
438     lda ad_a2_test\r
439     sta $00\r
440     lda ad_a2_test+1\r
441     sta $01\r
442     jsr print_ln\r
443 \r
444     ;;a2 addr mode test\r
445     ;;immediate\r
446     clc\r
447     lda #$0d\r
448     adc #$fa\r
449     cmp #$07\r
450     beq :+\r
451     jsr test_failure\r
452 :\r
453     ;;zp addr mode\r
454     lda #$37\r
455     sta $5e     ;@5e = 37\r
456     lda #$c9\r
457     sta $71     ;@71 = c9\r
458     lda #$b6\r
459     and $5e\r
460     ;;b6 and 37=36\r
461     bit $71 ;;36 bit c9 = 00.\r
462     beq :+\r
463     jsr test_failure\r
464 :\r
465 \r
466     ;;abs addr mode.\r
467     lda #$3b\r
468     sta $0421   ;;@0421 = 3b\r
469     lda #$d7\r
470     sta $051b   ;;@051b = d7\r
471     lda #$eb\r
472     sta $06cc   ;;@06cc = eb\r
473     ldx $0421\r
474     inx\r
475     txa     ;;a=3c\r
476     eor $051b   ;;3c eor d7 = eb\r
477     tay\r
478     cpy $06cc\r
479     beq :+\r
480     jsr test_failure\r
481 :\r
482 \r
483     ;;a.2.4 indirect,x is not implemented...\r
484 \r
485     ;;abs,x/y test...\r
486     ldx #$17\r
487     ldy #$a1\r
488     lda #$2f\r
489     sta $359        ;;@359=2f\r
490     lda #$90\r
491     sta $0190, y    ;;@231=90\r
492     txa\r
493     ora $0190, y    ;;@231(page cross), 90 | 17 = 97\r
494     sec\r
495     sbc $0342, x    ;;@359, 97-2f=68\r
496     tay\r
497     cpy #$68\r
498     beq :+\r
499     jsr test_failure\r
500 :\r
501 \r
502     ;;zp,xy test\r
503     ldx #$cd\r
504     lda #$f1\r
505     sta $35     ;;@35=f1\r
506     lda #$ac\r
507     sta $bc     ;;@bc=ac\r
508 \r
509     lda #$8d\r
510     and $68,x   ;;@35, 8d & f1=81\r
511     ldy #$9a\r
512     eor $22,y   ;;@bc, ac^81=2d\r
513     tax\r
514     cpx #$2d\r
515     beq :+\r
516     jsr test_failure\r
517 :\r
518 \r
519     ;;(ind),y test...\r
520     lda #$38\r
521     sta $90\r
522     lda #$08\r
523     sta $91\r
524     lda #$d9\r
525     sta $0902       ;@0902=d9\r
526     lda #$0a\r
527     ldy #$ca\r
528     clc\r
529     adc ($90),y      ;@0902, 0a+d9=e3\r
530     cmp #$e3\r
531     beq :+\r
532     jsr test_failure\r
533 :\r
534     \r
535 \r
536     rts\r
537 \r
538 .endproc\r
539 \r
540 ;;;single byte instructions.\r
541 .proc single_inst_test\r
542     lda ad_single_test\r
543     sta $00\r
544     lda ad_single_test+1\r
545     sta $01\r
546     jsr print_ln\r
547 \r
548     ;;asl test\r
549     lda #$80\r
550     clc\r
551     asl\r
552     beq :+\r
553     jsr test_failure\r
554 :\r
555     bcs :+\r
556     jsr test_failure\r
557 :\r
558     bpl :+\r
559     jsr test_failure\r
560 :\r
561     asl\r
562     beq :+\r
563     jsr test_failure\r
564 :\r
565     bcc :+\r
566     jsr test_failure\r
567 :\r
568     bpl :+\r
569     jsr test_failure\r
570 :\r
571     lda #$40\r
572     asl\r
573     bne :+\r
574     jsr test_failure\r
575 :\r
576     bcc :+\r
577     jsr test_failure\r
578 :\r
579     bmi :+\r
580     jsr test_failure\r
581 :\r
582     cmp #$80\r
583     beq :+\r
584     jsr test_failure\r
585 :\r
586     lda #$a5\r
587     asl\r
588     cmp #$4a\r
589     beq :+\r
590     jsr test_failure\r
591 :\r
592     asl\r
593     cmp #$94\r
594     beq :+\r
595     jsr test_failure\r
596 :\r
597 \r
598     ;;clc test\r
599 ;;-- SR Flags (bit 7 to bit 0):\r
600 ;;--  7   N   ....    Negative\r
601 ;;--  6   V   ....    Overflow\r
602 ;;--  5   -   ....    ignored\r
603 ;;--  4   B   ....    Break\r
604 ;;--  3   D   ....    Decimal (use BCD for arithmetics)\r
605 ;;--  2   I   ....    Interrupt (IRQ disable)\r
606 ;;--  1   Z   ....    Zero\r
607 ;;--  0   C   ....    Carry\r
608 \r
609     lda #$01\r
610     ;;save status\r
611     php\r
612     ;;load carry flag.\r
613     pha\r
614     plp\r
615     bcs :+\r
616     jsr test_failure\r
617 :\r
618     clc\r
619     bcc :+\r
620     jsr test_failure\r
621 :\r
622     ;;restore status\r
623     plp\r
624 \r
625     ;;clv test\r
626     lda #$40\r
627     ;;save status\r
628     php\r
629     ;;load v flag.\r
630     pha\r
631     plp\r
632     bvs :+\r
633     jsr test_failure\r
634 :\r
635     clv\r
636     bvc :+\r
637     jsr test_failure\r
638 :\r
639     ;;restore status\r
640     plp\r
641 \r
642 \r
643     ;;;;;dex test\r
644     ldx #$03\r
645     dex\r
646     bne :+\r
647     jsr test_failure\r
648 :\r
649     cpx #$02\r
650     beq :+\r
651     jsr test_failure\r
652 :\r
653     bpl :+\r
654     jsr test_failure\r
655 :\r
656     dex\r
657     bne :+\r
658     jsr test_failure\r
659 :\r
660     cpx #$01\r
661     beq :+\r
662     jsr test_failure\r
663 :\r
664     bpl :+\r
665     jsr test_failure\r
666 :\r
667     dex\r
668     beq :+\r
669     jsr test_failure\r
670 :\r
671     cpx #$00\r
672     beq :+\r
673     jsr test_failure\r
674 :\r
675     bpl :+\r
676     jsr test_failure\r
677 :\r
678     dex\r
679     bne :+\r
680     jsr test_failure\r
681 :\r
682     bmi :+\r
683     jsr test_failure\r
684 :\r
685     cpx #$ff\r
686     beq :+\r
687     jsr test_failure\r
688 :\r
689     ldx #$80\r
690     bmi :+\r
691     jsr test_failure\r
692 :\r
693     dex\r
694     bpl :+\r
695     jsr test_failure\r
696 :\r
697     cpx #$7f\r
698     beq :+\r
699     jsr test_failure\r
700 :\r
701 \r
702     ;;;dey test\r
703     ldy #$50\r
704     dey\r
705     cpy #$4f\r
706     beq :+\r
707     jsr test_failure\r
708 :\r
709     dey\r
710     cpy #$4e\r
711     beq :+\r
712     jsr test_failure\r
713 :\r
714     ;;inx/iny test\r
715     iny\r
716     cpy #$4f\r
717     beq :+\r
718     jsr test_failure\r
719 :\r
720     inx\r
721     cpx #$80\r
722     beq :+\r
723     jsr test_failure\r
724 :\r
725 \r
726 \r
727     ;;;lsr test\r
728     lda #$01\r
729     clc\r
730     lsr\r
731     beq :+\r
732     jsr test_failure\r
733 :\r
734     bcs :+\r
735     jsr test_failure\r
736 :\r
737     lsr\r
738     beq :+\r
739     jsr test_failure\r
740 :\r
741     bcc :+\r
742     jsr test_failure\r
743 :\r
744     lda #$5a\r
745     lsr\r
746     cmp #$2d\r
747     beq :+\r
748     jsr test_failure\r
749 :\r
750 \r
751     ;;;ror/rol test\r
752     lda #$a5\r
753     sec\r
754     ror\r
755     cmp #$d2\r
756     beq :+\r
757     jsr test_failure\r
758 :\r
759     ror\r
760     bcc :+\r
761     jsr test_failure\r
762 :\r
763     cmp #$e9\r
764     beq :+\r
765     jsr test_failure\r
766 :\r
767     clc\r
768     rol\r
769     rol\r
770     cmp #$a5\r
771     beq :+\r
772     jsr test_failure\r
773 :\r
774     bcs :+\r
775     jsr test_failure\r
776 :\r
777 \r
778     ;;sec/sei/cli test\r
779     ;;save status\r
780     php\r
781     ;;load carry flag.\r
782     lda #$00\r
783     pha\r
784     plp\r
785     bcc :+\r
786     jsr test_failure\r
787 :\r
788     sec\r
789     bcs :+\r
790     jsr test_failure\r
791 :\r
792     sei\r
793     php\r
794     pla\r
795     and #$04\r
796     bne :+\r
797     jsr test_failure\r
798 :\r
799     cli\r
800     php\r
801     pla\r
802     and #$04\r
803     beq :+\r
804     jsr test_failure\r
805 :\r
806     ;;restore status\r
807     plp\r
808 \r
809     ;;tax/tay/txa/tya test\r
810     lda #$01\r
811     tax\r
812     bpl :+\r
813     jsr test_failure\r
814 :\r
815     bne :+\r
816     jsr test_failure\r
817 :\r
818     cpx #$01\r
819     beq :+\r
820     jsr test_failure\r
821 :\r
822     dex\r
823     txa\r
824     bpl :+\r
825     jsr test_failure\r
826 :\r
827     beq :+\r
828     jsr test_failure\r
829 :\r
830     lda #$01\r
831     tay\r
832     iny\r
833     iny\r
834     tya\r
835 \r
836     cpy #$03\r
837     beq :+\r
838     jsr test_failure\r
839 :\r
840 \r
841     ;;;txs/tsx test...\r
842     tsx\r
843     stx $00 ;;;save sp\r
844 \r
845     ldx #$30\r
846     txs\r
847     lda #$dd\r
848     pha         ;;0130 = dd, sp=012f\r
849     tsx\r
850     cpx #$2f\r
851     beq :+\r
852     jsr test_failure\r
853 :\r
854     ldx $00\r
855     txs     ;;restore sp\r
856     ;;check 0130 value\r
857     lda #$ee\r
858     lda $0130\r
859     cmp #$dd\r
860     beq :+\r
861     jsr test_failure\r
862 :\r
863 \r
864     ;;;;jsr test_failure\r
865 \r
866     ;;;single byte instruction test done.\r
867     rts\r
868 .endproc\r
869 \r
870 ;;;param $00, $01 = msg addr.\r
871 ;;;print_ln display message. \r
872 ;;;start position is the bottom of the screen.\r
873 .proc print_ln\r
874     jsr check_ppu\r
875     lda vram_current\r
876     sta $2006\r
877     lda vram_current + 1\r
878     sta $2006\r
879 \r
880     ldy #$00\r
881 @msg_loop:\r
882     lda ($00), y\r
883     sta $2007\r
884     beq @print_done\r
885     iny\r
886     jmp @msg_loop\r
887 @print_done:\r
888 \r
889     ;;clear remaining space.\r
890 @clr_line:\r
891     tya\r
892     and #$1f\r
893     cmp #$1f\r
894     beq @clr_done\r
895     lda #$00\r
896     sta $2007\r
897     iny\r
898     jmp @clr_line\r
899 @clr_done:\r
900 \r
901     ;;renew vram pos\r
902     lda vram_current + 1\r
903     sty vram_current + 1\r
904     adc vram_current + 1\r
905     sta vram_current + 1\r
906     tax         ;; x = new vram_l\r
907     lda vram_current\r
908     bcc @no_carry\r
909     clc\r
910     adc #01     ;; a = new vram_h\r
911     sta vram_current\r
912 @no_carry:\r
913 \r
914     cmp #$23\r
915     bne @vpos_done\r
916 \r
917     txa \r
918     cmp #$c0\r
919     bne @vpos_done\r
920     ;;;if vram pos = 23c0. reset pos.\r
921     lda #$20\r
922     sta vram_current\r
923     lda #$00\r
924     sta vram_current + 1\r
925 @vpos_done:\r
926 \r
927     ;;scroll 1 line\r
928     lda scroll_x\r
929     sta $2005\r
930 \r
931     lda scroll_y\r
932     clc\r
933     adc #8\r
934     cmp #240\r
935     bne @scr_done\r
936     lda #$0\r
937 @scr_done:\r
938     sta scroll_y\r
939     sta $2005\r
940 \r
941     rts\r
942 .endproc\r
943 \r
944 ;;check_ppu exists caller's function if use_ppu flag is off\r
945 .proc check_ppu\r
946     lda use_ppu\r
947     bne @use_ppu_ret\r
948     ;;pop caller's return addr\r
949     pla\r
950     pla\r
951 @use_ppu_ret:\r
952     rts\r
953 .endproc\r
954 \r
955 ;;ppu initialize\r
956 .proc init_ppu\r
957     jsr check_ppu\r
958     ;ppu register initialize.\r
959         lda     #$00\r
960         sta     $2000\r
961         sta     $2001\r
962 \r
963     ;;load palette.\r
964         lda     #$3f\r
965         sta     $2006\r
966         lda     #$00\r
967         sta     $2006\r
968 \r
969         ldx     #$00\r
970         ldy     #$20\r
971 @copypal:\r
972         lda     @palettes, x\r
973         sta     $2007\r
974         inx\r
975         dey\r
976         bne     @copypal\r
977     rts\r
978 \r
979 @palettes:\r
980 ;;;bg palette\r
981         .byte   $0f, $00, $10, $20\r
982         .byte   $0f, $04, $14, $24\r
983         .byte   $0f, $08, $18, $28\r
984         .byte   $0f, $0c, $1c, $2c\r
985 ;;;spr palette\r
986         .byte   $0f, $00, $10, $20\r
987         .byte   $0f, $06, $16, $26\r
988         .byte   $0f, $08, $18, $28\r
989         .byte   $0f, $0a, $1a, $2a\r
990 \r
991 .endproc\r
992 \r
993 ;;initialize bss segment datas\r
994 .proc init_global\r
995 ;;ppu test flag\r
996     lda use_ppu\r
997     beq @ppu_skip\r
998 \r
999 ;;vram pos start from the bottom line.\r
1000     lda #$23\r
1001     sta vram_current\r
1002     lda #$a0\r
1003     sta vram_current + 1\r
1004 \r
1005     lda #$00\r
1006     sta scroll_x\r
1007     lda #232\r
1008     sta scroll_y\r
1009 @ppu_skip:\r
1010 \r
1011     rts\r
1012 \r
1013 .endproc\r
1014 \r
1015 \r
1016 \r
1017 ;;;read only global datas\r
1018 use_ppu:\r
1019     .byte   $01\r
1020 \r
1021 ;;;;string datas\r
1022 ad_start_msg:\r
1023     .addr   :+\r
1024 :\r
1025     .byte   "regression test start..."\r
1026     .byte   $00\r
1027 \r
1028 ad_test_done_msg:\r
1029     .addr   :+\r
1030 :\r
1031     .byte   "test succeeded..."\r
1032     .byte   $00\r
1033 \r
1034 ad_test_failed_msg:\r
1035     .addr   :+\r
1036 :\r
1037     .byte   "test failed!!!"\r
1038     .byte   $00\r
1039 \r
1040 ad_ppu_test:\r
1041     .addr   :+\r
1042 :\r
1043     .byte   "ppu inst test..."\r
1044     .byte   $00\r
1045 \r
1046 ad_a5_test:\r
1047     .addr   :+\r
1048 :\r
1049     .byte   "a5 inst test..."\r
1050     .byte   $00\r
1051 \r
1052 ad_a4_test:\r
1053     .addr   :+\r
1054 :\r
1055     .byte   "a4 inst test..."\r
1056     .byte   $00\r
1057 \r
1058 ad_a3_test:\r
1059     .addr   :+\r
1060 :\r
1061     .byte   "a3 inst test..."\r
1062     .byte   $00\r
1063 \r
1064 ad_a2_test:\r
1065     .addr   :+\r
1066 :\r
1067     .byte   "a2 inst test..."\r
1068     .byte   $00\r
1069 \r
1070 ad_single_test:\r
1071     .addr   :+\r
1072 :\r
1073     .byte   "single byte inst test..."\r
1074     .byte   $00\r
1075 \r
1076 ;;;;r/w global variables.\r
1077 .segment "BSS"\r
1078 vram_current:\r
1079     .byte   $00\r
1080     .byte   $00\r
1081 scroll_x:\r
1082     .byte   $00\r
1083 scroll_y:\r
1084     .byte   $00\r
1085 \r
1086 ;;;for DE1 internal memory constraints.\r
1087 .segment "VECINFO_4k"\r
1088         .word   nmi_test\r
1089         .word   Reset\r
1090         .word   $0000\r
1091 \r
1092 .segment "VECINFO"\r
1093         .word   nmi_test\r
1094         .word   Reset\r
1095         .word   $0000\r
1096 \r
1097 ; character rom file.\r
1098 .segment "CHARS"\r
1099         .incbin "character.chr"\r