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
020523   LDY # >?MAINDL-?DSP
020525   JSR ?SETDL-?DSP
020528   LDA # <?DLI.2-?DSP
020530   STA VDSLST
020533   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
020654   STA VDSLST
020657   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
021139   LDY # >?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 
