06 .OPT NO LIST›07 ; SAVE #D1:ST1.M65›08 .PAGE "Self Test ROM"›09 LIST ›10 .LOCAL ›11 ; antic mode 8 = Gr 3›12 ;col1 = reg0 = 12 = white 0101 $55›13 ;col2 = reg1 = 50 = red 1010 $AA›14 ;col3 = reg2 = 214 = grn 1111 $FF›15 ;col0 = reg4 = 160 = bak 0000 $00›16 ;›17 ; This code actually maps in at›18 ; $5000 though it is in ROM at›19 ; $D000 (hardware range)›20 ; Line numbers are peek addresses›21 ; when the rom is enabled›22 ?JKP .= * ; Save current org›23 ; do some local equates›30 ?WHT = $55 mode 8 col1›40 ?RED = $AA ; mode 8 col2›50 ?GRN = $FF ; mode 8 col3›0100 *= $80›0110 *= *+2 Dli two byte counter›0130 *= *+1 ;$82›0140 ?ZDLJ *= *+3 Dlist jvb addr›0170 *= *+1 ;$86 Dli›0180 *= *+1 ;$87 Dli›0190 *= *+1 ;$88 Dli›0200 *= *+1 unused›0210 *= *+1 ;$8A becomes›0220 *= *+2 ;$8B unused›0240 *= *+1 ;$8D ?? mask›0250 ?ZRTIX *= *+1 ;$8E ram test index›0260 *= *+1 ;$8F ??›0270 *= *+2 ;$90 pointer›0290 *= *+1 ;$92 counter›0300 *= *+1 ;$93 ??›0310 *= *+1 ;$94 counter›0320 *= *+2 ;$95 pointer›0340 *= *+1 ;$97 ??›0350 *= *+1 ;$98 index›0360 *= *+1 ;$99 counter›0370 *= *+1 ;$9A ??›0380 *= *+2 ;$9B pointer›0400 *= *+1 ;$9D loop counter›0410 *= *+2 ;$9E pointer›0430 *= *+2 ;$A0 pointer›0450 *= *+1 ;$A2 Dli›0460 *= *+1 ;$A3 loop counter›0470 ?ZPBCALC *= *+1 ;$A4›0480 ?ZPBORA *= *+1 ;$A5 portb bits›0490 ;›0500 *= ?JKP ; $D000 restore org›0510 ;›019000 ?DSP = *-$5000 Displacement›019001 ;›020479 XSLFTST = *-?DSP From vector›020480 JMP ?BYE-?DSP›020481 XRAMERR = *-?DSP›020483 JSR ?INIT1-?DSP Reset entry›020486 JMP ?MEMTST-?DSP on ram error›020489 ?BYE JSR ?INIT1-?DSP Bye entry›020492 ?MAIN LDA #0›020494 STA $80›020496 STA $80+1›020498 STA $82›020500 STA AUDCTL Init Pokey›020503 LDA #3 enable debounce›020505 STA SKCTL and Kbd scan›020508 JSR ?NOSOUND-?DSP›020511 LDA #$40 Disable dlis›020513 STA NMIEN›020516 LDX #0›020518 JSR ?SETCOL-?DSP a=210›020521 LDX # ?MAINDL-?DSP›020525 JSR ?SETDL-?DSP›020528 LDA # ?DLI.2-?DSP›020535 STA VDSLST+1›020538 LDX #12 Range $3000-$3020›020540 LDA #$AA›020542 JSR ?FILRAM-?DSP fill with (a)›020545 LDX #0›020547 ?WAIT1 STX WSYNC waste some time›020550 INX ›020551 BNE ?WAIT1›020553 ?WAIT2 LDA VCOUNT Wait til›020556 CMP #24 Antic in first›020558 BCS ?WAIT2 ;48 scan lines›020560 LDA #16›020562 STA $87›020564 LDA #$C0 Enable Dli and›020566 STA NMIEN vbi›020569 ?START1 LDA CONSOL Wait for›020572 AND #1 Start key›020574 BNE ?START1›020576 LDA #$FF Clear keypress›020578 STA CH›020581 LDA $86›020583 AND #$0F›020585 CMP #1›020587 BEQ ?GOMEM›020589 CMP #2›020591 BEQ ?GOAV›020593 CMP #4›020595 BEQ ?GOKEY›020597 ?20597 LDA #$88›020599 STA $86›020601 LDA #$FF›020603 STA $82›020605 ?GOMEM JMP ?MEMTST-?DSP›020608 ?GOAV JMP ?AVTEST-?DSP›020611 ?GOKEY JMP ?KEYTST-?DSP›020614 ?INIT1 LDA #$11›020616 STA $86 Initial init›020618 LDA #33 Narrow playfield›020620 STA SDMCTL›020623 LDA #$C0 Enable Dli/Vbi›020625 STA NMIEN›020628 LDA #$41 Set JVB into page 0›020630 STA ?ZDLJ›020632 LDA #$FF Clear keypress›020634 STA CH›020637 RTS ›020638 ?SETDL STA $8A›020640 TYA ›020641 PHA ›020642 TXA ›020643 PHA ›020644 LDA #0›020646 STA SDMCTL›020649 STA HELPFG›020652 LDA # ?DLI.1-?DSP›020659 STA VDSLST+1›020662 LDX #0 Range $3000-$3EFF›020664 TXA a=0›020665 JSR ?FILRAM-?DSP clear ram›020668 PLA ›020669 TAX ›020670 PLA ›020671 TAY ›020672 STX SDLSTL Set dlist›020675 STX ?ZDLJ+1 addr into DLJ›020677 STY SDLSTH›020680 STY ?ZDLJ+2›020682 LDA #33 Narrow playfield›020684 STA SDMCTL all lines 0.8›020687 RTS ; ----------------›020688 ?DLI.2 PHA Main menu dli›020689 TXA ›020690 PHA ›020691 ?20691 LDX #122 blue›020693 LDA $87›020695 CMP #1›020697 BEQ ?20730›020699 AND #1›020701 BEQ ?20713›020703 INC $A2›020705 LDA $A2›020707 AND #$20›020709 BEQ ?20713›020711 LDX #44 orange›020713 ?20713 STX WSYNC›020716 STX COLPF0›020719 CLC ›020720 ROR $87›020722 LDA #0›020724 STA ATRACT›020726 PLA ›020727 TAX ›020728 PLA ›020729 RTI ›020730 ?20730 LDA $88›020732 BNE ?20756›020734 LDA CONSOL›020737 AND #2 Select?›020739 BNE ?20767 No›020741 LDA $86›020743 ROL A›020744 ROL $86›020746 LDA #$20›020748 STA $A2›020750 LDA #$FF›020752 STA $88›020754 BNE ?20767 Go always›020756 ?20756 LDA CONSOL›020759 AND #2 Select?›020761 BEQ ?20767›020763 LDA #0›020765 STA $88›020767 ?20767 LDA $86›020769 AND #$0F›020771 ORA #$10›020773 STA $87›020775 INC $80›020777 BNE ?20781›020779 INC $80+1›020781 ?20781 LDA $80+1›020783 CMP #$FA›020785 BNE ?20791›020787 CLI ›020788 JMP ?20597-?DSP›020791 ?20791 JMP ?20691-?DSP›020794 ?MAINDL .BYTE $70,$70,$70,$70›020798 .BYTE $70 ;40 blank lines›020799 .BYTE $47 lms + mode 7 (Gr2)›020800 .WORD ?MENU1-?DSP›020802 .BYTE $70,$70,$70 ;24 blank›020805 .BYTE $4E lms + mode 14›020806 .WORD $3000›020808 .BYTE $70 ;8 blank›020809 .BYTE $F0 ;8 blank +dli›020810 .BYTE $C6 lms+mode 6 +dli›020811 .WORD ?MENU2-?DSP›020813 .BYTE $70 ;8 blank›020814 .BYTE $86 mode 6 +dli›020815 .BYTE $70 ;8 blank›020816 .BYTE $86 mode 6 +dli›020817 .BYTE $70 ;8 blank›020818 .BYTE $06 mode 6›020819 .BYTE $70,$70 ;16 blank›020821 .BYTE $4E lms+mode 14›020822 .WORD $3000›020823 .BYTE $70,$70,$70 ;24 blank›020827 .BYTE $42 lms + mode 2›020828 .WORD ?MENU3-?DSP›020830 .BYTE $41 jvb maindl›020831 .WORD ?MAINDL-?DSP›020833 ?MENU1 .SBYTE " SELF TEST "›020849 ?MENU2 .SBYTE " MEMORY "›020865 .SBYTE " AUDIO-VISUAL "›020881 .SBYTE " KEYBOARD "›020897 .SBYTE " ALL TESTS "›020913 ?MENU3 .SBYTE " ",2›020918 .SBYTE +$80,"SELECT"›020924 .SBYTE 22,44,2›020927 .SBYTE +$80,"START"›020932 .SBYTE 22,"OR",2›020936 .SBYTE +$80,"RESET"›020941 .SBYTE 22," "›020945 ?MEMDL .BYTE $70,$70,$70 ; 24bl›020948 .BYTE $46 ; lms mode 6›020949 .WORD $3000 (Gr1 16bpl)›020951 .BYTE $70,$70 ; 16 blank›020953 .BYTE $06 mode 6 16 bytes›020954 .BYTE $70 ; 8 blank $3030›020955 .BYTE $08 mode 8 (Gr3 8bpl)›020956 .BYTE $70,$70 ; 16 blank $3038›020958 .BYTE $06 mode 6 16 bytes›020959 .BYTE $70 ; 8 blank $3048›020960 .BYTE $08 ; mode 8 8 bytes›020961 .BYTE $70 ; 8 blank $3050›020962 .BYTE $08 ; mode 8 8 bytes›020963 .BYTE $70 ; 8 blank›020964 .BYTE $08 ; mode 8 8 bytes›020965 .BYTE $70 ; 8 blank›020966 .BYTE $08 ; mode 8 8 bytes›020967 .BYTE $70,$70,$70 ; 24 blank›020970 .BYTE $01 jump›020971 .WORD ?DLEND-?DSP›020973 ?DLEND .BYTE $A0 ; 3 blank+dli›020974 .BYTE $40 ; 5 blank›020975 .BYTE $42 ; lms mode 2 32›020976 .WORD ?PRESS-?DSP›020978 .BYTE $01 ; jump $0083›020979 .WORD ?ZDLJ ;›020981 ?PRESS .SBYTE " ",2›020987 .SBYTE +$80,"RESET"›020992 .SBYTE 22,"OR",2›020995 .SBYTE +$80,"HELP"›020999 .SBYTE 22,"TO EXIT "›021013 ?KEYDL .BYTE $70,$70,$70,$70›021017 .BYTE $46 ;lms mode6›021018 .WORD $3000›021020 .BYTE $70,$70,$70,$70 ;32 blank›021024 .BYTE $02 ; mode 2 32 byts›021025 .BYTE $70,$70 ; 16 blank›021027 .BYTE $02 ; mode 2 32 byts›021028 .BYTE $70 ; 8 blank›021029 .BYTE $02 ; mode 2 32 bytes›021030 .BYTE $70 ; 8 blank›021031 .BYTE $02 ; mode 2 32 bytes›021032 .BYTE $70 ; 8 blank›021033 .BYTE $02 ; mode 2 32 bytes›021034 .BYTE $70 ; 8 blank›021035 .BYTE $02 ; mode 2 32 bytes›021036 .BYTE $70,$70 ; 16 blank›021038 .BYTE $01 ; jump›021039 .WORD ?DLEND-?DSP›021041 ?AVDL .BYTE $70,$70,$70,$70›021045 .BYTE $46 ; lms mode 6 16›021046 .WORD ?AVMSG-?DSP›021048 .BYTE $70 ; 8 blank›021049 .BYTE $06 ; mode 6 16 bytes›021050 .BYTE $70,$70 ; 16 blank›021052 .BYTE $4B ; lms mode 11 (Gr6 16)›021053 .WORD $3100›021055 .BYTE $0B,$0B,$0B,$0B ; 42 more›021059 .BYTE $0B,$0B,$0B,$0B ; mode 6›021063 .BYTE $0B,$0B,$0B,$0B ; 16 each›021067 .BYTE $0B,$0B,$0B,$0B›021071 .BYTE $0B,$0B,$0B,$0B›021075 .BYTE $0B,$0B,$0B,$0B›021079 .BYTE $0B,$0B,$0B,$0B›021083 .BYTE $0B,$0B,$0B,$0B›021087 .BYTE $0B,$0B,$0B,$0B›021091 .BYTE $0B,$0B,$0B,$0B›021095 .BYTE $0B,$0B›021097 .BYTE $70 ; 8 blank›021098 .BYTE $46 ; lms mode 6 16›021099 .WORD $3000›021101 .BYTE $70 ; 8 blank›021102 .BYTE $01 ; jump›021103 .WORD ?DLEND-?DSP›021105 ?AVMSG .SBYTE " AUDIO-VISUAL "›021120 .SBYTE " TEST "›021121 ;›021122 ; If reset entry $80 holds $10›021123 ; otherwise $80 holds 0›021124 ;›021137 ?MEMTST LDX # ?MEMDL-?DSP›021141 LDA #0 will go to $8A›021143 JSR ?SETDL-?DSP Dlist x=< y=>›021146 LDX #1›021148 JSR ?SETCOL-?DSP Set colors›021149 ; reg0=12 reg1=50 reg2=214›021150 ; reg4=160 (bak)›021151 LDX #0 Point to "Ram Test"›021153 JSR ?SCRMOV-?DSP Move to screen›021156 LDX #1 Point to "Ram"›021158 JSR ?SCRMOV-?DSP Move to screen›021161 ?TSTROMA LDA $3020 Get first byte›021164 CMP #?RED ; already red?›021166 BEQ ?TSTROMB Yes›021168 LDA #?WHT Make it white›021170 JSR ?DSPROMA-?DSP›021173 JSR ?21425-?DSP delay›021176 JSR VFR Test rom›021179 BCS ?BADA Go if error›021181 LDA #$FF Show green›021183 JMP ?SHOWA-?DSP›021186 ?BADA LDA #?RED Make it red›021188 ?SHOWA JSR ?DSPROMA-?DSP›021191 ?TSTROMB LDA $3024›021194 CMP #?RED Red already?›021196 BEQ ?TSTRAM›021198 LDA #?WHT Make it white›021200 JSR ?DSPROMB-?DSP›021203 JSR ?21425-?DSP delay›021206 JSR VSR Test rom a=$8C›021209 BCS ?BADB Exit on error›021211 LDA #$FF Show green›021213 JMP ?SHOWB-?DSP›021216 ?BADB LDA #?RED Error=red›021218 ?SHOWB JSR ?DSPROMB-?DSP›021221 ?TSTRAM LDA #$C0›021223 STA $8D›021225 LDA #4 First pass bit 2 hi›021227 STA ?ZPBCALC›021229 LDA #0›021231 STA ?ZRTIX Clear screen index›021233 STA $90›021235 STA $90+1›021237 STA $8F›021239 ?21239 LDX ?ZRTIX›021241 LDA $3038,X›021244 AND $8D›021246 CMP #$80›021248 BEQ ?21342›021250 CMP #$08›021252 BEQ ?21342›021254 LDA #$44›021256 JSR ?21443-?DSP›021259 LDA ?ZPBCALC Force bit 2 hi›021261 JSR ?SETPB-?DSP Go set Portb›021264 LDA ?ZPBCALC›021266 EOR #$0C›021268 STA ?ZPBCALC›021270 LDX #7›021272 ?21272 LDA ?21578-?DSP,X›021275 CMP $90+1›021277 BEQ ?21334›021279 DEX ›021280 BPL ?21272›021282 LDA #4›021284 STA $92›021286 ?21286 LDX #0›021288 ?21288 LDY #0›021290 ?21290 TXA ›021291 STA ($90),Y›021293 INX ›021294 INY ›021295 BNE ?21290›021297 STX $93›021299 LDY #0›021301 ?21301 LDA ($90),Y›021303 CMP $93›021305 BNE ?21323›021307 INC $93›021309 INY ›021310 BNE ?21301›021312 INX ›021313 BNE ?21288›021315 INC $90+1›021317 DEC $92›021319 BNE ?21286›021321 BEQ ?21337›021323 ?21323 JSR ?21425-?DSP delay›021326 LDA #$88›021328 JSR ?21443-?DSP›021331 JMP ?21342-?DSP›021334 ?21334 JSR ?21429-?DSP delay›021337 ?21337 LDA #$CC›021339 JSR ?21443-?DSP›021342 ?21342 LDA $8D›021344 BMI ?21384›021346 LDA #$C0›021348 STA $8D›021350 INC ?ZRTIX ;$8E›021352 ?21352 CLC ›021353 LDA $8F›021355 ADC #4›021357 STA $90+1›021359 STA $8F›021361 CMP RAMSIZ›021364 BNE ?21239›021366 LDA $82›021368 BNE ?21373›021370 JMP ?TSTROMA-?DSP›021373 ?21373 LDA #12 Force b4 b1 high›021375 JSR ?SETPB-?DSP Go set Portb›021378 JSR ?21429-?DSP delay›021381 JMP ?AVTEST-?DSP›021384 ?21384 LDA #12›021386 STA $8D›021388 BNE ?21352 Go always›021390 ?DSPROMA LDX #4 Display Rom A›021392 JSR ?FILRAM-?DSP with (a)›021395 AND #$FC Make last byte not›021397 STA $3023 equal›021400 RTS ›021401 ?DSPROMB LDX #8 Display Rom B›021403 JSR ?FILRAM-?DSP with (a)›021406 AND #$FC›021408 STA $3027›021411 RTS ›