 |
STA L042A,X ;
STA L0446,X ;
STA L0454,X ;
STA L0462,X
STA L0470,X
STA L047E,X
STA L040E,X
LDA #$FF
STA L0400,X
STA L0438,X
DEX
BPL L6B4C
;----------------------------------------------------
;
;----------------------------------------------------
LDX #$0A ;
LDA #$00 ;
L6B75: STA L048C,X ;
STA L0497,X
STA L04A2,X
STA L04AD,X
DEX
BPL L6B75
;----------------------------------------------------
;
;----------------------------------------------------
LDX #$11 ;
LDA #$00 ;
L6B88: STA L04B8,X ;
DEX
BPL L6B88
;----------------------------------------------------
;
;----------------------------------------------------
LDA #$00 ;
STA L00A7 ;
STA L00A9 ;
LDA #$7F ;
STA L00AB ;
;----------------------------------------------------
;
;----------------------------------------------------
LDX #$0D ;
LDA #$00 ;
L6B9C: STA L04CA,X ;
DEX ;
BPL L6B9C ;
;----------------------------------------------------
; Reset Bega and Shot
;----------------------------------------------------
LDA #$00 ;
STA CDTMV5+1 ;
JSR L6D10 ; Set Bega's starting position
LDA #$00 ;
STA L00D2 ;
STA L00D1 ;
;----------------------------------------------------
;
;----------------------------------------------------
LDX #$09 ;
LDA #$FF ;
L6BB4: STA L0300 ,X ;
STA DAUX1,X ;
STA LaserXPos,X ;
STA HATABS+4,X ;
DEX ;
BPL L6BB4 ;
;----------------------------------------------------
;
;----------------------------------------------------
LDX #$00 ;
L6BC5: LDA #$03 ;
STA L3EE0,X ;
LDA #$FF ;
STA L3AE0,X ;
INX ;
BNE L6BC5 ;
;----------------------------------------------------
;
;----------------------------------------------------
LDA #$74 ;
STA L00A6 ;
LDA #$00 ;
STA DMASK ;
LDA Level ; Get Level
CMP #$0C ; Are we at Level 12?
BCC L6BF6 ; Not yet so skip ahead
CMP #$15
BCC L6BEE
LDA #$02
STA CDTMA2+1
JMP L6BFB
L6BEE: LDA #$01
STA CDTMA2+1
JMP L6BFB
L6BF6: LDA #$00
STA CDTMA2+1
;----------------------------------------------------
; Do Difficulty Check
;----------------------------------------------------
L6BFB: LDA L1002 ; Get DIP bank 2
AND #$20 ; Check difficulty
BEQ L6C08 ; Hard difficulty so jump ahead
LDA CDTMA2+1 ;
JMP L6C0E ;
L6C08: CLC
LDA CDTMA2+1
ADC #$04
L6C0E: STA L04BA
CLC
LDA L04BA
ADC L04D8
STA L04BA
RTS ; Return
;----------------------------------------------------
; Play DEFAULT video sequence for level
;----------------------------------------------------
L6C1C: LDA #$13 ; Video Sequence = ? (Frame xxxxx)
JSR L54A7 ; Play LaserDisc video sequence
L6C21: LDA SearchStatus ; Check LDP search status
CMP #$01
BEQ L6C34
CMP #$02
BEQ L6C34
LDX #$01 ; Delay Count = 1
JSR L4BD2 ; Run programmable Delay
JMP L6C21
L6C34: JSR L71D0 ; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
JSR L71EC ; Erase Sprite RAM (3800-3FFF)
JSR L71B8 ; Screen Transition, Clear from inside out
JSR L5535 ; Update Scoring Overlay
LDX #$72 ; Message = "" ($6C72)
LDY #$6C ; Message = "" ($6C72)
JSR L4831 ; Print Text Message
L6C47: LDA SearchStatus ; Check LDP search status
CMP #$02
BEQ L6C56
LDX #$01
JSR L4BD2 ; Run Programmable Delay
JMP L6C47
L6C56: JSR L719E ; Screen Transition, Fill from outside in
LDA #$01 ; Set death marker
STA LifeLost ; Indicate to Main Loop that player died
JSR L459A ; Erase Video Screen
LDY PlayerNumber
LDA #$FF
STA Player1Lives,Y
LDX #$FF
STX L04DA
TXS
JMP L4145
;----------------------------------------------------
; unknown data
;----------------------------------------------------
ASL A
.BYTE $3A
ORA L1A1F,X
.BYTE $0F,$1C
BRK
.BYTE $1A
ASL DOSVEC+1,X
.BYTE $23,$0F,$1C
INC L3A67,X
.BYTE $23
ORA L561F,Y
JSR APPMHI+1
.BYTE $12,$0F
ASL DiagMessage_HI,X
.BYTE $0F
ASL L0C00
.BYTE $0F
ORA (DOSVEC+1),Y
INC L3AC9,X
ORA L200B,X
.BYTE $0F
BRK
ASL L0F12,X
BRK
AND (DiagMessage_LO,X)
.BYTE $1C
ASL APPMHI,X
.BYTE $FF
;----------------------------------------------------
; Jump Routine Address (0-23)
;----------------------------------------------------
L6CA7: .WORD L8A51,L84BF,L84F4,L8486,L8A86,L86AF
.WORD L893B,L87E5,L886C,L88F8,L8974,L89AC
.WORD L84BF,L8A51,L8533,L8A86,L86AF,L893B
.WORD L8533,L886C,L89AC,L8A51,L844B,L8A86
;----------------------------------------------------
; Jump Routine Sound (0-23)
;----------------------------------------------------
L6CD7: .BYTE $09,$0D,$11,$10,$0F,$0E
.BYTE $12,$0F,$0E,$14,$13,$13
.BYTE $0D,$09,$0C,$0F,$0E,$12
.BYTE $0C,$0F,$13,$09,$0C,$0F
;----------------------------------------------------
;
;----------------------------------------------------
L6CEF: LDX #$03 ;
L6CF1: LDA L0093,X ;
CMP #$FF ;
BEQ L6CFD
STA Ptr1_LO
CPY Ptr1_LO
BEQ L6D0D
L6CFD: DEX
BPL L6CF1
INX
L6D01: LDA L0093,X
CMP #$FF
BEQ L6D0D
INX
CPX #$04
BNE L6D01
BRK ;
L6D0D: STY L0093,X ;
RTS ;
;----------------------------------------------------
; Setup Bega's starting position
;----------------------------------------------------
L6D10: LDA #$40 ;
STA MasterReg ;
LDA #$00 ;
STA VNTD ;
LDA #$01 ;
LDX #$05 ;
L6D1C: STA ICPTHZ,X ;
DEX
BPL L6D1C
;----------------------------------------------------
; Setup Bega's sprite pictures
;----------------------------------------------------
LDX #$05 ; Loop = 6 sprites to setup
LDY #$6F ; Pictures = $6A - $6F
L6D25: STY BegaPic,X ; Set Bega sprite picture
DEY ; Next picture
DEX ; Next sprite
BPL L6D25 ; Loop until all 6 sprites initialized
;----------------------------------------------------
; Set Bega's starting position x,y
;----------------------------------------------------
LDA #$70 ; XPos = 112
STA BegaXPos1L ; Set Bega's x position (left half)
STA BegaXPos2L ; Set Bega's x position (left half)
STA BegaXPos3L ; Set Bega's x position (left half)
LDA #$80 ; XPos = 128
STA BegaXPos1R ; Set Bega's x position (right half)
STA BegaXPos2R ; Set Bega's x position (right half)
STA BegaXPos3R ; Set Bega's x position (right half)
LDA CDTMA1+1
BNE L6D5B
JMP L6D5B
LDA #$05 ; Sound = #5
JSR L51CE ; Play Sound
LDA #$10
STA BegaYPos1L
STA FKDEF
LDA #$20
STA FKDEF+1
STA PALNTS
LDA #$30
STA LOGCOL
STA ADRESS
RTS
L6D5B: LDA #$B0
STA BegaYPos1L
STA FKDEF
LDA #$C0
STA FKDEF+1
STA PALNTS
LDA #$D0
STA LOGCOL
STA ADRESS
RTS
;----------------------------------------------------
; (called from Main Loop)
;----------------------------------------------------
L6D6E: LDA DMASK ;
BEQ L6D76 ;
JMP L6DFE
L6D76: LDA L009D
AND #$F0
BEQ L6D7E
BNE L6DA4
L6D7E: LDA MasterReg
AND #$F0
BEQ L6D86
BNE L6DA4
L6D86: LDA GameStatus ; Check Game Status
BNE L6D94
LDA SysTimer+1
CMP #$10
BCC L6D9D
BCS L6DD3
L6D94: LDA L1000 ; Get Switch Input
EOR #$FF ; Toggle all bits
AND #$10 ; Check S3, Service switch
BNE L6DD3 ; S3 Service switch pressed so skip ahead
;----------------------------------------------------
; Service switch not pressed
;----------------------------------------------------
L6D9D: LDA SysTimer ; Check time on System Timer
AND #$20 ; Flash message every 533ms
BNE L6DB9 ; Not time yet, so print message
;----------------------------------------------------
; Erase "SERVICE" message
;----------------------------------------------------
L6DA4: LDA #$00 ; A = 00
STA L38D9 ; Print to screen
STA L38DA ; Print to screen
STA L38DB ; Print to screen
STA L38DC ; Print to screen
STA L38DD ; Print to screen
STA L38DE ; Print to screen
RTS ; Return
;----------------------------------------------------
; Print "SERVICE" message
;----------------------------------------------------
L6DB9: LDX #$86 ; Char $86 = SPACE
STX L38D9 ; Print to screen
INX ; Char $87 = SPACE
STX L38DA ; Print to screen
INX ; Char $88 = SPACE
STX L38DB ; Print to screen
INX ; Char $89 = SPACE
STX L38DC ; Print to screen
INX ; Char $8A = SPACE
STX L38DD ; Print to screen
INX ; Char $8B = SPACE
STX L38DE ; Print to screen
RTS ; Return
;----------------------------------------------------
; Service switch pressed
;----------------------------------------------------
L6DD3: LDA #$08 ; Sound = #8
JSR L51CE ; Play Sound
LDA #$20 ;
ORA MasterReg ;
STA MasterReg ;
LDX #$06 ;
L6DE0: LDA L009B,X ;
AND #$F0
BNE L6DEC
LDA #$20
ORA L009B,X
STA L009B,X
L6DEC: DEX
BPL L6DE0
LDA #$00
STA TMPLBT
LDA #$1D
STA ESCFLG
LDA #$01
STA DMASK
L6DFE: LDA DMASK
CMP #$01
BEQ L6E08
JMP L6F18
L6E08: JSR L700E
LDA TMPLBT
CMP #$1E
BEQ L6E13
RTS
L6E13: JSR L71D0 ; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
LDX #$0D
L6E18: LDA #$00
STA L041C,X
STA L042A,X
STA L0446,X
STA L0454,X
STA L0462,X
STA L0470,X
STA L047E,X
STA L040E,X
LDA #$FF
STA L0400,X
STA L0438,X
DEX
BPL L6E18
LDX #$0A
LDA #$00
L6E41: STA L048C,X
STA L0497,X
STA L04A2,X
STA L04AD,X
DEX
BPL L6E41
LDX #$11
LDA #$00
L6E54: STA L04B8,X
DEX
BPL L6E54
LDA #$00
STA L00A7
STA L00A9
LDA #$7F
STA L00AB
LDX #$0D
LDA #$00
L6E68: STA L04CA,X
DEX
BPL L6E68
LDA #$00
STA L00D2
STA L00D1
LDX #$09
LDA #$FF
L6E78: STA L0300 ,X
STA DAUX1,X
STA LaserXPos,X
STA HATABS+4,X
DEX
BPL L6E78
LDX #$0D
LDA #$00
L6E8B: STA Sprite1_Prop,X
DEX
BPL L6E8B
LDA CDTMA2+1
AND #$03
ASL A
ASL A
ASL A
ASL A
ASL A
STA Ptr1_LO
;----------------------------------------------------
; Random Level Warp
;----------------------------------------------------
LDA Random ; Get Random Number
AND #$1F ; Random number between 0-31
CLC ; Clear carry
ADC Ptr1_LO ; Add random index to pointer
TAY ; Create index to random level
LDA L6F4E,Y ; Get random Level
STA Level ; Jump to Level
LDA L6FAE,Y ; Get random Retry
STA VVBLKD ; Jump to Retry
;----------------------------------------------------
; Point to Level Data
;----------------------------------------------------
LDA Level ; Get Level number
ASL A ; Mulitply by 2
TAY ; Index based on Level
LDA LB2F5,Y ; Get address where level data is stored
STA Ptr1_LO ; Save address
LDA LB2F6,Y ; Get address where level data is stored
STA Ptr1_HI ; Save address
;----------------------------------------------------
; Create "Jump Routine" for level
;----------------------------------------------------
LDY VVBLKD ; Point to routine number (0,1,2)
LDA (Ptr1_LO),Y ; Get routine number
STA CDTMA1 ; Save routine number
ASL A ; Multiply by 2
TAY ; Create index to routine address
LDA L6CA7,Y ; Get routine address LO
STA L00CF ; Setup routine address
LDA L6CA8,Y ; Get routine address HI
STA L00D0 ; Setup routine address
LDA CDTMA1 ; Get routine number
JSR L720B ; Setup Color Palette for routine
LDA #$05
STA L04BB
LDA Level
ASL A
TAX
LDA LB4DF,X
STA Ptr1_LO
LDA LB4E0,X
STA Ptr1_HI
LDY VVBLKD
LDA (Ptr1_LO),Y ; Get Video Sequence
JSR L54A7 ; Play LaserDisc video sequence
L6EF6: LDA SearchStatus ; Check LDP search status
CMP #$01 ;
BEQ L6F09 ;
CMP #$02 ;
BEQ L6F09 ;
LDX #$01 ;
JSR L4BD2 ; Run Programmable Delay
JMP L6EF6
L6F09: LDA #$1C
STA TMPLBT
LDA #$01
STA ESCFLG
LDA #$02
STA DMASK
L6F18: JSR L70A8
LDA TMPLBT
BMI L6F21
RTS ; Return
L6F21: JSR L5535 ; Update Scoring Overlay
LDA MasterReg
AND #$F0
CMP #$20
BNE L6F32
LDA #$0F
AND MasterReg
STA MasterReg
L6F32: LDX #$06
L6F34: LDA L009B,X
AND #$F0
CMP #$20
BNE L6F42
LDA #$0F
AND L009B,X
STA L009B,X
L6F42: DEX
BPL L6F34
JSR L7BB5
LDA #$00
STA DMASK
RTS
;----------------------------------------------------
; Jump to Level (using service switch)
;----------------------------------------------------
L6F4E: .BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
.BYTE $01,$01,$01,$01,$01,$01,$01,$01
;----------------------------------------------------
; Jump to Retry (using service switch)
;----------------------------------------------------
L6FAE: .BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
.BYTE $00,$00,$00,$00,$00,$00,$00,$00
;----------------------------------------------------
; Draw Box
;----------------------------------------------------
L700E: LDX TMPLBT ; Get index (0-30)
;----------------------------------------------------
; Setup Boxes - layer 1
;----------------------------------------------------
LDA L7144,X ; Get Left edge screen pointer (21 apart)
STA Ptr1_LO ; Save EDGE_1
STA Ptr2_HI+1 ; Save EDGE_2
LDA L7145,X ; Get Left edge screen pointer (21 apart)
STA Ptr1_HI ; Save EDGE_1
STA TRAMSZ ; Save EDGE_2
;----------------------------------------------------
; Setup Box Corners and Width
;----------------------------------------------------
LDA L7180,X ; Get Upper Left pointer
STA Ptr2_LO ; Save LOWER_RIGHT
LDA L7181,X ; Get Upper Left pointer
STA Ptr2_HI ; Save LOWER_RIGHT
LDA L7162,X ; Get Upper Left pointer
STA CMCMD ; Save UPPER_LEFT
LDA L7163,X ; Get Upper Left pointer
STA WARMST ; Save UPPER_LEFT
LDA ESCFLG ; Get box width
STA APPMHI ; Save box width
;----------------------------------------------------
; Draw Line
;----------------------------------------------------
L7038: LDA #$42 ;
LDY APPMHI ;
STA (Ptr1_LO),Y ;
STA (Ptr2_LO),Y ; Draw LOWER_RIGHT
LDY #$00 ;
STA (Ptr2_HI+1),Y ;
STA (CMCMD),Y ; Draw UPPER_LEFT
CLC ;
LDA #$20 ;
ADC Ptr2_HI+1
STA Ptr2_HI+1
LDA #$00
ADC TRAMSZ
STA TRAMSZ
CLC
LDA #$20
ADC CMCMD
STA CMCMD
LDA #$00
ADC WARMST
STA WARMST
DEC APPMHI
BPL L7038
;----------------------------------------------------
; Setup Screen Pointers
;----------------------------------------------------
LDA #$20
STA Ptr1_LO
LDA #$28
STA Ptr1_HI
LDA #$3F
STA Ptr2_LO
LDA #$28 ;
STA Ptr2_HI ;
LDX #$1D ;
LDY #$00 ;
;----------------------------------------------------
; Draw Line
;----------------------------------------------------
L7078: LDA #$42 ; Char = |
STA (Ptr1_LO),Y ; Clear screen left edge
STA (Ptr2_LO),Y ; Clear screen right edge
CLC ; Clear carry for addition
LDA #$20 ; Move down one row (add 32)
ADC Ptr1_LO ; Add to LEFT edge pointer
STA Ptr1_LO ; Save LEFT edge pointer
LDA #$00 ; Add carry to high byte
ADC Ptr1_HI ; Add to LEFT edge pointer
STA Ptr1_HI ; Save LEFT edge pointer
CLC ; Clear carry for addition
LDA #$20 ; Move down one row (add 32)
ADC Ptr2_LO ; Add to RIGHT edge pointer
STA Ptr2_LO ; Save RIGHT edge pointer
LDA #$00 ; Add carry to high byte
ADC Ptr2_HI ; Add to RIGHT edge pointer
STA Ptr2_HI ; Save RIGHT edge pointer
DEX
BPL L7078
DEC ESCFLG
DEC ESCFLG
INC TMPLBT
INC TMPLBT
RTS ; Return
;----------------------------------------------------
; Erase Box
;----------------------------------------------------
L70A8: LDX TMPLBT ;
LDA L7144,X ;
STA Ptr1_LO ;
STA Ptr2_HI+1
LDA L7145,X
STA Ptr1_HI
STA TRAMSZ
LDA L7180,X
STA Ptr2_LO
LDA L7181,X
STA Ptr2_HI
LDA L7162,X
STA CMCMD
LDA L7163,X
STA WARMST
LDA ESCFLG
STA APPMHI
L70D2: LDA #$00
LDY APPMHI
STA (Ptr1_LO),Y
STA (Ptr2_LO),Y
LDY #$00
STA (Ptr2_HI+1),Y
STA (CMCMD),Y
CLC
LDA #$20
ADC Ptr2_HI+1
STA Ptr2_HI+1
LDA #$00
ADC TRAMSZ
STA TRAMSZ
CLC
LDA #$20
ADC CMCMD
STA CMCMD
LDA #$00
ADC WARMST
STA WARMST
DEC APPMHI
BPL L70D2
INC ESCFLG
INC ESCFLG
DEC TMPLBT
DEC TMPLBT
BPL L7143 ; Yes, so leave
;----------------------------------------------------
; Clear Edges of Text Screen
;----------------------------------------------------
LDA #$20 ; Address = $2820
STA Ptr1_LO ; Set left edge
LDA #$28 ; Address = $2820
STA Ptr1_HI ; Set left edge
LDA #$3F ; Address = $283F
STA Ptr2_LO ; Set right edge
LDA #$28 ; Address = $283F
STA Ptr2_HI ; Set right edge
LDX #$1D ; Loop = 30 Rows
LDY #$00 ; Index = 0
L7120: LDA #$00 ; Char = SPACE
STA (Ptr1_LO),Y ; Clear screen left edge
STA (Ptr2_LO),Y ; Clear screen right edge
CLC ; Clear carry for addition
LDA #$20 ; Move down one row (add 32)
ADC Ptr1_LO ; Add to LEFT edge pointer
STA Ptr1_LO ; Save LEFT edge pointer
LDA #$00 ; Add carry to high byte
ADC Ptr1_HI ; Add to LEFT edge pointer
STA Ptr1_HI ; Save LEFT edge pointer
CLC ; Clear carry for addition
LDA #$20 ; Move down one row (add 32)
ADC Ptr2_LO ; Add to RIGHT edge pointer
STA Ptr2_LO ; Save RIGHT edge pointer
LDA #$00 ; Add carry to high byte
ADC Ptr2_HI ; Add to RIGHT edge pointer
STA Ptr2_HI ; Save RIGHT edge pointer
DEX ; Have we reached to bottom?
BPL L7120 ; No, loop back and continue to erase
L7143: RTS ; Return
;----------------------------------------------------
; Text Screen Locations (15 each)
;----------------------------------------------------
L7144: .WORD $2821,$2842,$2863,$2884,$28A5 ; $21 apart
.WORD $28C6,$28E7,$2908,$2929,$294A
.WORD $296B,$298C,$29AD,$29CE,$29EF
L7162: .WORD $283E,$285D,$287C,$289B,$28BA ; $1F apart
.WORD $28D9,$28F8,$2917,$2936,$2955 ; Upper Left Corner
.WORD $2974,$2993,$29B2,$29D1,$29F0
L7180: .WORD $2BC1,$2BA2,$2B83,$2B64,$2B45 ; $1F backward
.WORD $2B26,$2B07,$2AE8,$2AC9,$2AAA ; Lower Right Corner
.WORD $2A8B,$2A6C,$2A4D,$2A2E,$2A0F
;----------------------------------------------------
; Transitional Effect - Fill from outside in
;----------------------------------------------------
L719E: LDA #$00 ; Loop = 0
STA TMPLBT ; Set Loop (0-30)
LDA #$1D ; Height = 30 rows
STA ESCFLG ; Set Box Width
L71A8: JSR L700E ; Draw box
LDX #$01 ; Delay = 1
JSR L4BD2 ; Run Programmable Delay
LDA TMPLBT ; Check Loop
CMP #$1E ; Have we finished 30 rows?
BNE L71A8 ; No, so loop back and continue
RTS ; Return
;----------------------------------------------------
; Transitional Effect - Clear from inside out
;----------------------------------------------------
L71B8: LDA #$1C ; 28 rows?
STA TMPLBT ;
LDA #$01 ;
STA ESCFLG ;
L71C2: JSR L70A8 ; Erase box
LDX #$01 ; Delay = 1
JSR L4BD2 ; Run Programmable Delay
LDA TMPLBT ; Have we finished all rows?
BPL L71C2 ; No, so loop back and continue
RTS ; Return
;----------------------------------------------------
; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
;----------------------------------------------------
L71D0: LDA #$00 ; Clear RAM
LDX #$1F ; Loop = 1F
L71D4: STA L2800,X ; Erase 2800-281F
STA L2BE0,X ; Erase 2BE0-2BFF
DEX ; Decrement loop
BPL L71D4 ; Loop until RAM cleared
RTS ; Return
;----------------------------------------------------
; Clear Sprite Bank 3 & 4 (3800-381F,3BE0-3BFF)
;----------------------------------------------------
L71DE: LDA #$00 ; Clear sprite RAM
LDX #$1F ; Loop = 1F
L71E2: STA L3800,X ; Erase 3800-381F
STA L3BE0,X ; Erase 3BE0-3BFF
DEX ; Decrement loop
BPL L71E2 ; Loop until RAM cleared
RTS ; Return
;----------------------------------------------------
; Erase Sprite RAM (3800-3FFF)
;----------------------------------------------------
L71EC: LDX #$00 ; Start loop = 0
TXA ; A = 0
L71EF: STA L3800,X ; Erase $3800-$38FF
STA L3900,X ; Erase $3900-$39FF
STA L3A00,X ; Erase $3A00-$3AFF
STA L3B00,X ; Erase $3B00-$3BFF
STA L3C00,X ; Erase $3C00-$3CFF
STA L3D00,X ; Erase $3D00-$3DFF
STA L3E00,X ; Erase $3E00-$3EFF
STA L3F00,X ; Erase $3F00-$3FFF
DEX ; Decrement loop
BNE L71EF ; Loop until 255 spots erased
RTS ; Return
;----------------------------------------------------
; Setup Color Palette
;----------------------------------------------------
; A = 0 - 143
;----------------------------------------------------
L720B: BPL L721E ; A < 128 then skip ahead and use table data
L720D: LDA L1003 ; Check verticle blanking
BMI L720D ; Loop here until we leave verticle blanking
;----------------------------------------------------
; Copy Default Color Data into Video Color RAM
;----------------------------------------------------
LDY #$37 ; 56 bytes to copy
L7214: LDA L4428,Y ; Get default Color RAM Data
STA L1800,Y ; Write data to Video Color RAM
DEY ; Go to next byte
BPL L7214 ; Loop until all 56 bytes are copied
RTS ; Return
;----------------------------------------------------
; Handle Color Index 0-128
;----------------------------------------------------
L721E: ASL A ; Creat index into address table
TAY ; Y = index into address table
LDA L723A,Y ; Get Address from table
STA Ptr1_LO ; Setup pointer to data
LDA L723B,Y ; Get Address from table
STA Ptr1_HI ; Setup pointer to data
L722A: LDA L1003 ; Check verticle blanking
BMI L722A ; Loop here until we leave verticle blanking
;----------------------------------------------------
; Copy 56 bytes from ROM Color Table to Color Video RAM
;----------------------------------------------------
LDY #$37 ; 56 bytes to copy from ROM table
L7231: LDA (Ptr1_LO),Y ; Get data byte from ROM table
STA L1800,Y ; Write data to Video Color RAM
DEY ; Go get next byte
BPL L7231 ; Loop back until all 56 bytes copied
RTS ; Return
;----------------------------------------------------
; Color Data Pointers (0-127)
;----------------------------------------------------
L723A: .WORD $735A,$7392,$73CA,$7402,$743A,$7472,$74AA,$74E2
.WORD $751A,$7552,$758A,$75C2,$75FA,$7632,$766A,$76A2
.WORD $76DA,$7712,$774A,$7782,$77BA,$77F2,$782A,$7862
.WORD $789A,$78D2,$790A,$7942,$797A,$79B2,$79EA,$7A22
.WORD $7A5A,$7A92,$7ACA,$7B02,$735A,$7392,$73CA,$7402
.WORD $743A,$7472,$74AA,$74E2,$751A,$7552,$758A,$75C2
.WORD $75FA,$7632,$766A,$76A2,$76DA,$7712,$774A,$7782
.WORD $77BA,$77F2,$782A,$7862,$789A,$78D2,$790A,$7942
.WORD $797A,$79B2,$79EA,$7A22,$7A5A,$7A92,$7ACA,$7B02
.WORD $735A,$7392,$73CA,$7402,$743A,$7472,$74AA,$74E2
.WORD $751A,$7552,$758A,$75C2,$75FA,$7632,$766A,$76A2
.WORD $76DA,$7712,$774A,$7782,$77BA,$77F2,$782A,$7862
.WORD $789A,$78D2,$790A,$7942,$797A,$79B2,$79EA,$7A22
.WORD $7A5A,$7A92,$7ACA,$7B02,$735A,$7392,$73CA,$7402
.WORD $743A,$7472,$74AA,$74E2,$751A,$7552,$758A,$75C2
.WORD $75FA,$7632,$766A,$76A2,$76DA,$7712,$774A,$7782
;----------------------------------------------------
; Color Data Pointers (128-143) not used?
;----------------------------------------------------
.WORD $77BA,$77F2,$782A,$7862,$789A,$78D2,$790A,$7942
.WORD $797A,$79B2,$79EA,$7A22,$7A5A,$7A92,$7ACA,$7B02
;----------------------------------------------------
; 36 Different Color RAM Data Series (56 bytes each)
;----------------------------------------------------
; Note: All data series are identical to default data
;----------------------------------------------------
L735A: .BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
L7392: .BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
L73CA: .BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F8,$FF,$C0,$3F,$9B,$49,$00
.BYTE $FF,$F1,$C7,$C0,$3F,$38,$07,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE |