|
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 $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 $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 $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 $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
L782A: .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 $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
L797A: .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 $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
.BYTE $FF,$F8,$FF,$C0,$D5,$9B,$90,$00
L7A78: .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
L7ACA: .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
L7B02: .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
;----------------------------------------------------
; unknown (UNUSED)
;----------------------------------------------------
L7B3A: LDA Lunas
BMI L7B41
JMP L7B68
L7B41: LDA Level
CMP #$05
BEQ L7B5F
CMP #$10
BEQ L7B5F
CMP #$16
BEQ L7B5F
CMP #$1B
BEQ L7B5F
CMP #$21
BEQ L7B5F
CMP #$09
BEQ L7B64
JMP L7B68
L7B5F: LDA VVBLKD
BNE L7B68
L7B64: LDA #$40
STA L009B
L7B68: RTS
LDA VVTP+1
BMI L7B70
JMP L7B8E
L7B70: LDA Level
CMP #$12
BEQ L7B85
CMP #$18
BEQ L7B85
CMP #$1F
BEQ L7B85
CMP #$23
BEQ L7B85
BNE L7B8E
L7B85: LDA VVBLKD
BNE L7B8E
LDA #$40
STA L009C
L7B8E: RTS
LDA STMCUR_swap
BMI L7B96
JMP L7BB4
L7B96: LDA Level
CMP #$11
BEQ L7BAB
CMP #$17
BEQ L7BAB
CMP #$1C
BEQ L7BAB
CMP #$22
BEQ L7BAB
BNE L7BB4
L7BAB: LDA VVBLKD
BNE L7BB4
LDA #$40
STA L009D
L7BB4: RTS
;----------------------------------------------------
; unknown
;----------------------------------------------------
L7BB5: LDA L009D
AND #$0C
LSR A
TAX
LDA #$00
STA SpritePic1,X
STA SpritePic2,X
LDA #$FF
STA STMCUR_swap
STA L009D
LDX #$01
LDY #$00
CPX L0093
BEQ L7BDA
INY
CPX L0094
BEQ L7BDA
INY
CPX POKADR
BEQ L7BDA
INY
L7BDA: CPY #$02
BCC L7BE6
LDA #$FF
STA L0093,Y
JMP L7C05
L7BE6: CPY #$00
BNE L7BF9
LDA POKADR
CMP #$FF
BEQ L7C05
STA L0093
LDA #$FF
STA POKADR
JMP L7C05
L7BF9: LDA POKADR+1
CMP #$FF
BEQ L7C05
STA L0094
LDA #$FF
STA POKADR+1
L7C05: RTS ; Return
;----------------------------------------------------
;----------------------------------------------------
; Run DEMO of game where it "plays itself"
; UNUSED (similar to $40A1)
;----------------------------------------------------
;----------------------------------------------------
L7C06: JSR L4501 ; DEMO - Determine number of Begas
JSR L452D ; DEMO - Clear variables, Clear "swap variables"
LDA #$01 ; DEMO -
STA VIMIRQ ; DEMO -
STA PADDL1 ; DEMO -
LDA #$00 ; DEMO - Clock = 0
STA SysTimer ; DEMO - Reset System Timer
STA SysTimer+1 ; DEMO - Reset System Timer
STA NumPlayers ; DEMO - Clear number of players
L7C1F: LDA #$00 ; DEMO - Sound = #0
JSR L51CE ; DEMO - Play Sound
JSR L6992 ; DEMO -
LDA #$00 ; DEMO -
STA DemoPointer ; DEMO -
JSR L80E8 ; DEMO - Get DEMO Movements
L7C2F: LDA L1003 ; DEMO -
BPL L7C2F ; DEMO -
LDY #$05 ; DEMO -
L7C36: LDA L009C,Y ; DEMO -
BPL L7C41 ; DEMO -
CMP #$FF ; DEMO -
BEQ L7C41 ; DEMO -
BNE L7C4E ; DEMO -
L7C41: DEY ; DEMO -
BPL L7C36 ; DEMO -
LDA SearchStatus ; DEMO -
CMP #$02 ; DEMO -
BNE L7C4E ; DEMO -
JMP L7CB2 ; DEMO -
L7C4E: JSR L47D0 ; DEMO - Update Sprites
INC SysTimer ; DEMO -
LDA SysTimer ; DEMO -
AND #$3F ; DEMO -
BNE L7C61 ; DEMO -
INC SysTimer+1 ; DEMO -
INC L04BB ; DEMO -
;----------------------------------------------------
; Pseudo-random Number Generator
;----------------------------------------------------
L7C61: INC RandSeed ; DEMO - Increment seed ROM pointer
BCC L7C67 ; DEMO - Check if carry is set
INC RandSeed+1 ; DEMO - Increment seed ROM pointer+1
L7C67: LDA RandSeed+1 ; DEMO - Get seed ROM pointer
AND #$07 ; DEMO - Set bounds ($4000-$4700)
ORA #$40 ; DEMO - Set bounds ($4000-$4700)
STA RandSeed+1 ; DEMO - Limit seed ROM pointer+1
INC Random ; DEMO - Increment the random number
LDA L1000 ; DEMO - Mix the number with any joystick presses
ADC Random ; DEMO - Add previous random number
LDY RandSeed ; DEMO - Use seed ROM pointer
ADC (RandSeed),Y ; DEMO - Add ROM data byte to random number
ADC L3BFB ; DEMO - Add Y-raster position(?)
STA Random ; DEMO - Save random number
;----------------------------------------------------
;
;----------------------------------------------------
L7C82: LDA L1003 ; DEMO -
BMI L7C82 ; DEMO -
JSR L45D7 ; DEMO - Print "1UP" or "2UP"
JSR L7D9B ; DEMO - Check for loss of life
JSR L5E23 ; DEMO -
JSR L6325 ; DEMO -
JSR L4891 ; DEMO -
JSR L690F ; DEMO -
JSR L6D6E ; DEMO -
LDA CDTMA1+1 ; DEMO -
BEQ L7CAA ; DEMO -
LDA #$7C ; DEMO -
PHA ; DEMO -
LDA #$A9 ; DEMO -
PHA ; DEMO -
JMP (L00CF) ; DEMO -
L7CAA: LDA LifeLost ; DEMO -
BNE L7CB2 ; DEMO -
JMP L7C2F ; DEMO -
L7CB2: LDA #$00 ; DEMO -
STA LifeLost ; DEMO -
STA VVBLKD ; DEMO -
LDA Level ; DEMO -
BNE L7CC9 ; DEMO -
INC Level ; DEMO -
LDA #$08 ; DEMO -
STA Lunas ; DEMO -
JMP L7C1F ; DEMO -
L7CC9: CMP #$03 ; DEMO -
BCS L7CD7 ; DEMO -
INC Level ; DEMO -
LDA #$00 ; DEMO -
STA VVTP+1 ; DEMO -
JMP L7C1F ; DEMO -
L7CD7: RTS ; DEMO -
LDA #$00 ; DEMO -
JSR L51CE ; DEMO - Play Sound
LDA #$05 ; DEMO - Advance to Level 5
STA Level ; DEMO -
LDA #$00 ; DEMO -
STA VVBLKD ; DEMO -
STA VVTP+1 ; DEMO -
LDA #$08 ; DEMO -
STA Lunas ; DEMO -
L7CED: LDA #$00 ; DEMO -
STA SysTimer ; DEMO -
STA SysTimer+1 ; DEMO -
JSR L6992 ; DEMO -
LDA #$00 ; DEMO -
STA DemoPointer ; DEMO -
JSR L80E8 ; DEMO - Get DEMO Movements
L7D00: LDA L1003 ; DEMO -
BPL L7D00 ; DEMO -
LDY #$05 ; DEMO -
L7D07: LDA L009C,Y ; DEMO -
BPL L7D12 ; DEMO -
CMP #$FF ; DEMO -
BEQ L7D12 ; DEMO -
BNE L7D1F ; DEMO -
L7D12: DEY ; DEMO -
BPL L7D07 ; DEMO -
LDA SearchStatus ; DEMO -
CMP #$02 ; DEMO -
BNE L7D1F ; DEMO -
JMP L7D83 ; DEMO -
L7D1F: JSR L47D0 ; DEMO - Update Sprites
INC SysTimer ; DEMO -
LDA SysTimer ; DEMO -
AND #$3F ; DEMO -
BNE L7D32 ; DEMO -
INC SysTimer+1 ; DEMO -
INC L04BB ; DEMO -
;----------------------------------------------------
; Pseudo-random Number Generator
;----------------------------------------------------
L7D32: INC RandSeed ; DEMO - Increment seed ROM pointer
BCC L7D38 ; DEMO - Check if carry is set
INC RandSeed+1 ; DEMO - Increment seed ROM pointer+1
L7D38: LDA RandSeed+1 ; DEMO - Get seed ROM pointer
AND #$07 ; DEMO - Set bounds ($4000-$4700)
ORA #$40 ; DEMO - Set bounds ($4000-$4700)
STA RandSeed+1 ; DEMO - Limit seed ROM pointer+1
INC Random ; DEMO - Increment the random number
LDA L1000 ; DEMO - Mix the number with any joystick presses
ADC Random ; DEMO - Add previous random number
LDY RandSeed ; DEMO - Use seed ROM pointer
ADC (RandSeed),Y ; DEMO - Add ROM data byte to random number
ADC L3BFB ; DEMO - Add Y-raster position(?)
STA Random ; DEMO - Save random number
;----------------------------------------------------
;
;----------------------------------------------------
L7D53: LDA L1003 ; DEMO -
BMI L7D53 ; DEMO -
JSR L45D7 ; DEMO - Print "1UP" or "2UP"
JSR L7D9B ; DEMO -
JSR L5E23 ; DEMO -
JSR L6325 ; DEMO -
JSR L4891 ; DEMO -
JSR L690F ; DEMO -
JSR L6D6E ; DEMO -
LDA CDTMA1+1 ; DEMO -
BEQ L7D7B ; DEMO -
LDA #$7D ; DEMO -
PHA ; DEMO -
LDA #$7A ; DEMO -
PHA ; DEMO -
JMP (L00CF) ; DEMO -
L7D7B: LDA LifeLost ; DEMO -
BNE L7D83 ; DEMO -
JMP L7D00 ; DEMO -
L7D83: LDA #$00 ; DEMO -
STA LifeLost
STA VVBLKD
LDA Level
CMP #$07
BCS L7D9A
LDA #$00
STA PADDL1
JMP L7CED
L7D9A: RTS
;----------------------------------------------------
; Do Bega's Horizontal Movement - DEMO
;----------------------------------------------------
L7D9B: LDA MasterReg ; DEMO - Check MasterReg for Explosion (b7)
BPL L7DA2 ; DEMO - No explosion so skip ahead
JMP L807D ; DEMO - Go update Bega Explosion
L7DA2: ASL A ; DEMO - Check MasterReg for beginning stage (b6)
BPL L7DA8 ; DEMO - Bega under joystick control so skip ahead
JMP L7EBB ; DEMO - Print STAGE Information Screen
;----------------------------------------------------
; Check DEMO Movement
;----------------------------------------------------
L7DA8: DEC DemoTime ; DEMO - Decrement move timer
LDA DemoTime ; DEMO - Check if move timer has expired
BNE L7DB3 ; DEMO - Move timer still running continue with current move
JSR L80E8 ; DEMO - Go get new move and reset the timer
L7DB3: LDA DemoMove ; DEMO - Check the DEMO move
BNE L7DBB ; DEMO - DEMO move request so skip ahead
JMP L7E5D ; DEMO - Otherwise, no movement so skip ahead
L7DBB: LSR A ; DEMO - Check joystick direction
BCS L7DC1 ; DEMO - LEFT pressed so do left movement
JMP L7E15 ; DEMO - RIGHT pressed so do right movement
;----------------------------------------------------
; Joystick LEFT pressed - DEMO
;----------------------------------------------------
L7DC1: LDA BegaXPos1L ; DEMO - Get Bega's X Position
CMP #$08 ; DEMO - Is it at far left?
BCS L7DCA ; DEMO - No, so continue
JMP L7E5D ; DEMO - No left movement so leave
L7DCA: LDA L0093 ; DEMO - Check attachments
CMP #$FF ; DEMO - Is a person attached to Bega?
BEQ L7DE5 ; DEMO - No so skip ahead
LDA BegaXPos1L ; DEMO - Get Bega's X Position
CMP #$18 ; DEMO - Is it 24?
BCS L7DD9 ; DEMO - Yes, so continue
JMP L7E5D ; DEMO - Just leave
L7DD9: LDA POKADR ; DEMO -
CMP #$FF ; DEMO -
BEQ L7DE5 ; DEMO -
LDA BegaXPos1L ; DEMO -
CMP #$28 ; DEMO -
BCC L7E5D ; DEMO -
;----------------------------------------------------
; Move 6 sprites that make up Bega to the LEFT
;----------------------------------------------------
L7DE5: LDX #$05 ; DEMO - 6 sprites make up BEGA
L7DE7: LDA BegaXPos1L,X ; DEMO - Get sprite x position
SEC ; DEMO - Clear carry
SBC L5C51 ; DEMO - Subtract left movement
STA BegaXPos1L,X ; DEMO - Save sprite x position
DEX ; DEMO - Next sprite in BEGA
BPL L7DE7 ; DEMO - Loop until all sprites moved
LDX #$05 ; DEMO -
L7DF4: LDA L009C,X
AND #$F0
BNE L7E00
LDA #$FE
AND L009C,X
STA L009C,X
L7E00: DEX
BPL L7DF4
LDA MasterReg
AND #$30
BEQ L7E0C
JMP L7E5D
L7E0C: LDA #$FD
AND MasterReg
STA MasterReg
JMP L7E5D ;
;----------------------------------------------------
; Joystick RIGHT Pressed - DEMO
;----------------------------------------------------
L7E15: LDA BegaXPos1L ;
CMP #$D9
BCS L7E4C
LDA L0094
CMP #$FF
BEQ L7E33
LDA BegaXPos1L
CMP #$C9
BCS L7E4C
LDA POKADR+1
CMP #$FF
BEQ L7E33
LDA BegaXPos1L
CMP #$B9
BCS L7E4C ;
;----------------------------------------------------
; Move 6 sprites that make up Bega to the RIGHT
;----------------------------------------------------
L7E33: LDX #$05 ; 6 sprites make up BEGA
L7E35: LDA BegaXPos1L,X ; Get sprite x position
CLC ; Clear carry
ADC L5C51 ; Add right movement
STA BegaXPos1L,X ; Save sprite x position
DEX ; Next sprite in BEGA
BPL L7E35 ; Loop until all sprites moved
LDA MasterReg
AND #$30
BNE L7E4C
LDA #$02
ORA MasterReg
STA MasterReg
L7E4C: LDX #$05
L7E4E: LDA L009C,X
AND #$F0
BNE L7E5A
LDA #$01
ORA L009C,X
STA L009C,X
L7E5A: DEX
BPL L7E4E
L7E5D: LDA MasterReg ; Check which Bega to show
AND #$20 ; Is it Barrier Bega?
BEQ L7E66 ; No, so skip ahead
JMP L803E ; Show Barrier Bega
L7E66: LDA MasterReg ; Check which Bega to show
AND #$10 ; Is it Normal Bega?
BEQ L7E6F ; No, so skip ahead
JMP L8014 ; Show Normal Bega
L7E6F: LDA MasterReg
AND #$02
ASL A
ORA #$01
LDX #$05
L7E78: STA ICPTHZ,X
L7E7A: DEX
BPL L7E78
LDA VNTD
BNE L7E97
LDA #$02
STA VNTD
LDA MasterReg
AND #$01 ;
EOR #$01 ;
TAX ;
LDA #$FE ;
AND MasterReg ;
STA MasterReg ;
TXA ;
ORA MasterReg
STA MasterReg
L7E97: LDA SysTimer
AND #$03
BNE L7EA0
DEC VNTD
L7EA0: LDA MasterReg
AND #$03
ASL A
TAY
LDA L5C52,Y
STA Ptr1_LO
LDA L5C53,Y
STA Ptr1_HI
LDY #$05 ; 6 sprites to update
L7EB2: LDA (Ptr1_LO),Y ; Get picture
STA BegaPic,Y ; Set Bega sprite picture
DEY ; Next picture
BPL L7EB2 ; Loop until all 6 sprites updated
RTS
L7EBB: LDA VNTD
BNE L7EC3
LDA #$01
STA VNTD
L7EC3: LDA SysTimer
AND #$01
BNE L7ECC
DEC VNTD
L7ECC: BEQ L7ECF
RTS
L7ECF: LDA MasterReg
AND #$3F
BNE L7F01
LDX #$05
L7ED7: CLC
LDA BegaYPos1L,X
ADC L5C50
STA BegaYPos1L,X
DEX
BPL L7ED7
LDA BegaYPos1L
CMP #$B8
BCS L7EE9
RTS
L7EE9: LDA #$06 ; Sound = #6
JSR L51CE ; Play Sound
LDX #$05
LDY #$75
L7EF2: STY BegaPic,X
DEY
DEX
BPL L7EF2
LDA #$41
STA MasterReg
LDA #$10
STA VNTD
RTS
L7F01: LDX #$05 ; 6 sprites to update
L7F03: LDA L5C88,X ; Get picture
STA BegaPic,X ; Set Bega sprite picture
DEX ; Next picture
BPL L7F03 ; Loop until all 6 sprites updated
LDA #$00
STA MasterReg
;----------------------------------------------------
; Print STAGE Number to screen
;----------------------------------------------------
LDX #$23 ; Message = "STAGE" ($4D23)
LDY #$4D ; Message = "STAGE" ($4D23)
JSR L4831 ; Print Text Message
LDA Level
ASL A
TAX
LDA LB200,X ; Get Level address
STA Ptr1_LO ; Save address
LDA LB201,X ; Get Level address
STA Ptr1_HI ; Save address
LDY VVBLKD ; Y = 0,1,2
LDA (Ptr1_LO),Y ; Get STAGE Number
TAY ; Temporarily save STAGE number
AND #$0F ; Get one's place digit
CLC ; Clear carry
ADC #$01 ; Make printable character
STA L3993 ; Print STAGE Number (one's place)
TYA ; Retrieve STAGE number
LSR A ; Move digits over
LSR A ; Move digits over
LSR A ; Move digits over
LSR A ; Move digits over
CLC ; Clear carry
ADC #$01 ; Make printable character
STA L3992 ; Print STAGE Number (tens place)
LDA NumPlayers
BEQ L7F53
LDX #$50 ; Message = "PLAYER" ($4D50)
LDY #$4D ; Message = "PLAYER" ($4D50)
JSR L4831 ; Print Text Message
CLC
LDA PlayerNumber
ADC #$02
STA L3913
L7F53: LDA CDTMA1+1
BNE L7FB1
LDX #$00
STX FlashTime
L7F5D: LDA SearchStatus
CMP #$02
BEQ L7F81
LDX #$CB ; Message = " " ($5DCB) Erase instructions
LDY #$5D ; Message = " " ($5DCB) Erase instructions
INC FlashTime
LDA FlashTime ; Get flash rate timer for text
AND #$30 ; Check if it's time to flash text
BEQ L7F76 ; Yes, so erase text this time
LDX #$F4 ; Message = "xxxx" ($5CF4)
LDY #$5C ; Message = "xxxx" ($5CF4)
L7F76: JSR L4831 ; Print Text Message
LDX #$01
JSR L4BD2 ; Run Programmable Delay
JMP L7F5D
L7F81: LDX #$CB ; DEMO - Message = " " ($5DCB) Erase instructions
LDY #$5D ; DEMO - Message = " " ($5DCB) Erase instructions
JSR L4831 ; DEMO - Print Text Message
JSR L719E ; DEMO - Screen Transition, Fill from outside in
LDA #$18 ; DEMO - Video Sequence = ? (Frame xxxxx)
JSR L54A7 ; DEMO - Play LaserDisc video sequence
LDA #$01 ;
STA CDTMA1+1 ; DEMO -
L7F95: LDA SearchStatus
CMP #$01
BEQ L7FA8
CMP #$02
BEQ L7FA8
LDX #$01
JSR L4BD2 ; Run Programmable Delay
JMP L7F95
L7FA8: JSR L71D0 ; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
JSR L71B8 ; Screen Transition, Clear from inside out
JMP L7FFE ; Erase Text instructions from screen
L7FB1: LDX #$00
STA FlashTime
L7FB6: LDX #$CB ; Message = " " ($5DCB) Erase instructions
LDY #$5D ; Message = " " ($5DCB) Erase instructions
LDA FlashTime ; Get flash rate timer for text
AND #$30 ; Check if it's time to flash text
BEQ L7FF1 ; Yes, so erase text this time
LDA Level
BEQ L7FDF
LDA CDTMA2+1
BNE L7FF1
LDA Lunas
BMI L7FF1
LDA Level
CMP #$02
BEQ L7FE6
LDA Level
CMP #$06
BEQ L7FED
BNE L7FF1
L7FDF: LDX #$F4 ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
LDY #$5C ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
JMP L7FF1
L7FE6: LDX #$3F
LDY #$5D
JMP L7FF1
L7FED: LDX #$84 ; Message = "xxxx" ($5D84)
LDY #$5D ; Message = "xxxx" ($5D84)
L7FF1: JSR L4831 ; Print Text Message
LDX #$01 ; Delay Count = 1
JSR L4BD2 ; Run programmable Delay
INC FlashTime ;
BPL L7FB6 ;
;----------------------------------------------------
; Erase Text Instructions from screen
;----------------------------------------------------
L7FFE: LDX #$CB ; DEMO - Message = " " ($5DCB) Erase instructions
LDY #$5D ; DEMO - Message = " " ($5DCB) Erase instructions
JSR L4831 ; DEMO - Print Text Message
LDX #$38 ; DEMO - Message = " " ($4D38) Erase STAGE
LDY #$4D ; DEMO - Message = " " ($4D38) Erase STAGE
JSR L4831 ; DEMO - Print Text Message
LDX #$59 ; DEMO - Message = " " ($4D59) Erase PLAYER
LDY #$4D ; DEMO - Message = " " ($4D59) Erase PLAYER
JSR L4831 ; DEMO - Print Text Message
RTS ; DEMO - Return
;----------------------------------------------------
; unknown
;----------------------------------------------------
L8014: LDA MasterReg ;
AND #$03 ;
BEQ L8039 ;
CMP #$03 ;
BEQ L8028
LDA SysTimer
AND #$07
BNE L8027
DEC MasterReg
L8027: RTS
L8028: LDX #$05
LDY #$01
L802C: LDA L5CA0,X
STA BegaPic,X
STY ICPTHZ,X
DEX
BPL L802C
DEC MasterReg
RTS
L8039: LDA #$00
STA MasterReg
RTS
;----------------------------------------------------
; Show Barrier Bega
;----------------------------------------------------
L803E: LDA MasterReg ; DEMO -
AND #$30 ; DEMO -
CMP #$30 ; DEMO -
BEQ L8049 ; DEMO -
JMP L80E7 ; DEMO - Just leave
L8049: LDA SysTimer
AND #$03
BEQ L8051
RTS ; DEMO - Return
;----------------------------------------------------
; Find next sequence for Bega Barrier picture
;----------------------------------------------------
L8051: LDA BarrierPic ; DEMO - Get Bega Barrier picture sequence
ASL A ; DEMO - Multiply by 2
TAY ; DEMO - Create an index
LDA L5C5A,Y ; DEMO - Get Barrier picture pointer
STA Ptr1_LO ; DEMO - Save pointer
LDA L5C5B,Y ; DEMO - Get Barrier picture pointer
STA Ptr1_HI ; DEMO - Save pointer
AND Ptr1_LO ; DEMO - Check if this is the last in the sequence
CMP #$FF ; DEMO - Is this the last picture?
BEQ L8078 ; DEMO - Yes, so just skip ahead
INC BarrierPic ; DEMO - Go to the next picture in the sequence
;----------------------------------------------------
; Update Bega Barrier picture
;----------------------------------------------------
LDY #$05 ; DEMO - 6 sprites to update
LDX #$01 ; DEMO -
L806D: LDA (Ptr1_LO),Y ; DEMO - Get picture
STA BegaPic,Y ; DEMO - Set Bega sprite picture
STX ICPTHZ,X ; DEMO -
DEY ; DEMO - Next picture
BPL L806D ; DEMO - Loop until all 6 sprites updated
RTS ; DEMO - Return
;----------------------------------------------------
; Restart barrier sequence
;----------------------------------------------------
L8078: LDA #$00 ; DEMO - Restart barrier sequence
STA MasterReg ; DEMO - Save barrier sequence
RTS ; DEMO - Return
;----------------------------------------------------
;
;----------------------------------------------------
L807D: LDA MasterReg
AND #$7F
BNE L8093
LDX PlayerNumber ; DEMO - Which player is playing?
DEC Player1Lives,X ; DEMO - That player loses a life
LDA #$01 ; DEMO -
STA VNTD ; DEMO -
INC MasterReg ; DEMO -
LDA #$03 ; DEMO -
JSR L51CE ; DEMO - Play Sound
L8093: LDA SysTimer ; DEMO -
AND #$03 ; DEMO -
BEQ L809B ; DEMO -
RTS ; DEMO -
L809B: DEC VNTD ; DEMO -
BEQ L80A0 ; DEMO -
RTS ; DEMO -
L80A0: LDA #$02 ; DEMO -
STA VNTD ; DEMO -
LDA MasterReg ; DEMO -
AND #$7F ; DEMO -
ASL A ; DEMO -
TAX ; DEMO -
LDA L5C72,X ; DEMO -
STA Ptr1_LO ; DEMO -
LDA L5C73,X ; DEMO -
L80B2: STA Ptr1_HI ; DEMO -
LDY #$05 ; DEMO -
L80B6: LDA (Ptr1_LO),Y ; DEMO -
STA BegaPic,Y ; DEMO -
LDA #$01 ; DEMO -
STA ICPTHZ,Y ; DEMO -
DEY ; DEMO -
BPL L80B6 ; DEMO -
INC MasterReg ; DEMO -
LDA MasterReg ; DEMO -
AND #$7F ; DEMO -
CMP #$0B ; DEMO -
BEQ L80CE ; DEMO -
RTS ; DEMO -
L80CE: LDA #$00 ; DEMO -
STA MasterReg ; DEMO -
LDX #$05 ; DEMO -
LDA #$00 ; DEMO -
L80D6: STA ICPTHZ,X ; DEMO -
STA BegaPic,X ; DEMO -
DEX ; DEMO -
BPL L80D6 ; DEMO -
LDA #$01 ; DEMO - Set death marker
STA LifeLost ; DEMO - Indicate that life was lost
LDX #$25 ; DEMO - Delay = 37
JSR L4BD2 ; DEMO - Run Programmable Delay
L80E7: RTS ; DEMO - Return
;----------------------------------------------------
; Get DEMO Movements
;----------------------------------------------------
L80E8: LDA Level ; Find out which level were on
AND #$07 ; Isolate level (0-7)
TAX ; X = level
LDY L811B,X ; Y = Get Index based on level
LDA L8123,Y ; Get Pointer LO to Demo Movements
STA Ptr1_LO ; Save Pointer LO to Demo Movements
LDA L8124,Y ; Get Pointer HI to Demo Movements
STA Ptr1_HI ; Save Pointer HI to Demo Movements
LDA DemoPointer ;
ASL A ;
CLC ;
ADC Ptr1_LO ;
STA Ptr1_LO ;
LDA Ptr1_HI ;
ADC #$00 ;
STA Ptr1_HI ;
LDY #$00 ;
LDA (Ptr1_LO),Y ; Get direction of move (LEFT/RIGHT)
STA DemoMove ; Save directon of move
INY ; Go to the next byte in the table
LDA (Ptr1_LO),Y ; Get duraction of move (time)
STA DemoTime ; Save the duration of this move
INC DemoPointer ;
RTS ; Return
;----------------------------------------------------
; DEMO Move Indexes
;----------------------------------------------------
L811B: .BYTE $00,$00,$02,$04,$06,$00,$08,$0A
;----------------------------------------------------
; DEMO Move Pointers
;----------------------------------------------------
L8123: .WORD $812F,$81A7,$821F,$8297,$830F,$8387
;----------------------------------------------------
; Level 0,1,5 DEMO Move Data
;----------------------------------------------------
; Direction 1=LEFT, 2=RIGHT, 0=IDLE
; Duration time (ms)
;----------------------------------------------------
L812F: .BYTE $01,$20 ; LEFT 32ms
.BYTE $02,$40 ; RIGHT 64ms
.BYTE $00,$0F ; IDLE 15ms
.BYTE $01,$60 ; LEFT 96ms
.BYTE $00,$04, $02,$50, $01,$30, $02,$10, $00,$04, $01,$20
.BYTE $02,$30, $00,$06, $01,$20, $02,$40, $00,$0F, $01,$60
.BYTE $00,$04, $02,$50, $01,$30, $02,$10, $00,$04, $01,$20
.BYTE $02,$30, $00,$06, $01,$20, $02,$40, $00,$0F, $01,$60
.BYTE $00,$04, $02,$50, $01,$30, $02,$10, $00,$04, $01,$20
.BYTE $02,$30, $00,$06, $01,$20, $02,$40, $00,$0F, $01,$60
.BYTE $00,$04, $02,$50, $01,$30, $02,$10, $00,$04, $01,$20
.BYTE $02,$30, $00,$06, $01,$20, $02,$40, $00,$0F, $01,$60
.BYTE $00,$04, $02,$50, $01,$30, $02,$10, $00,$04, $01,$20
.BYTE $02,$30, $00,$06
;----------------------------------------------------
; Level 2 DEMO Move Data (direction,duration)
;----------------------------------------------------
L81A7: .BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
;----------------------------------------------------
; Level 3 DEMO Move Data (direction,duration)
;----------------------------------------------------
L821F: .BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
;----------------------------------------------------
; Level 4 DEMO Move Data (direction,duration)
;----------------------------------------------------
L8297: .BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
;----------------------------------------------------
; Level 6 DEMO Move Data (direction,duration)
;----------------------------------------------------
L830F: .BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20, $02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30, $02,$10, $00,$04, $01,$20, $02,$30, $00,$06
;----------------------------------------------------
; Level 7 DEMO Move Data (direction,duration)
;----------------------------------------------------
L8387: .BYTE $01,$20 ,$02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30 ,$02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20 ,$02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30 ,$02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20 ,$02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30 ,$02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20 ,$02,$40, $00,$0F, $01,$60, $00,$04, $02,$50
.BYTE $01,$30 ,$02,$10, $00,$04, $01,$20, $02,$30, $00,$06
.BYTE $01,$20 ,$02,$40, $00,$0F, $01,$30, $02,$10, $00,$04
.BYTE $01,$20 ,$02,$30, $00,$06, $01,$20, $02,$40, $00,$0F
.BYTE $01,$20, $02,$30, $00,$06
;----------------------------------------------------
; Jump Routine #?
;----------------------------------------------------
L8405: LDX #$0D ;
STX FlashTime ;
;----------------------------------------------------
; Jump Routine #?
;----------------------------------------------------
L840A: LDX FlashTime
LDA L0400,X
BEQ L8427
BMI L8420
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8427
L8420: CMP #$FF
BEQ L8427
JSR L8F61
L8427: JSR LA33E
JSR LA389
DEC FlashTime
BPL L840A
LDA L04BB
CMP #$02
BCC L8440
CMP #$30
BCS L8440
JSR L969D
L8440: LDA L04BB
CMP #$02
BCC L844A
JSR L9730
L844A: RTS
;----------------------------------------------------
; Jump Routine #?
;----------------------------------------------------
L844B: LDX #$0D ;
STX FlashTime ;
L8450: LDX FlashTime
LDA L0400,X
BEQ L846D
BMI L8466
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L846D
L8466: CMP #$FF
BEQ L846D
JSR L8F61
L846D: JSR LA63A
JSR LA389
DEC FlashTime
BPL L8450
LDA L04BB
CMP #$02
BCC L8482
JSR L9730
L8482: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L848B: LDX FlashTime
LDA L0400,X
BEQ L84A8
BMI L84A1
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L84A8
L84A1: CMP #$FF
BEQ L84A8
JSR L8F61
L84A8: JSR LA75C
DEC FlashTime
BPL L848B
LDA L04BB
CMP #$02
BCC L84BE
CMP #$30
BCS L84BE
JSR LA2BB
L84BE: RTS
;----------------------------------------------------
; Jump Routine #3
;----------------------------------------------------
L84BF: LDX #$0D ;
STX FlashTime ;
L84C4: LDX FlashTime ;
LDA L0400,X ;
BEQ L84E1 ;
BMI L84DA
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L84E1
L84DA: CMP #$FF
BEQ L84E1
JSR L8F61
L84E1: JSR LA3F1
DEC FlashTime
BPL L84C4
LDA L04BB
CMP #$02
BCC L84F3
JSR L97F2
L84F3: RTS
LDX #$0D
STX FlashTime
L84F9: LDX FlashTime
LDA L0400,X
BEQ L8516
BMI L850F
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8516
L850F: CMP #$FF
BEQ L8516
JSR L8F61
L8516: JSR LA593
JSR LA63A
DEC FlashTime
BPL L84F9
LDA L04BB
CMP #$02
BCC L852F
CMP #$30
BCS L852F
JSR L9A70
L852F: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L8538: LDX FlashTime
LDA L0400,X
BEQ L8555
BMI L854E
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8555
L854E: CMP #$FF
BEQ L8555
JSR L8F61
L8555: JSR LA389
JSR LA63A
DEC FlashTime
BPL L8538
LDA L04BB
CMP #$02
BCC L856A
JSR L9EF3
L856A: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L8573: LDX FlashTime
LDA L0400,X
BEQ L8590
BMI L8589
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8590
L8589: CMP #$FF
BEQ L8590
JSR L8F61
L8590: JSR LA593
JSR LA63A
DEC FlashTime
BPL L8573
LDA L04BB
CMP #$02
BCC L85A5
JSR L9FF0
L85A5: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L85AE: LDX FlashTime
LDA L0400,X
BEQ L85CB
BMI L85C4
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L85CB
L85C4: CMP #$FF
BEQ L85CB
JSR L8F61
L85CB: JSR LA33E
JSR LA389
JSR LA63A
DEC FlashTime
BPL L85AE
LDA L04BB
CMP #$02
BCC L85E7
CMP #$30
BCS L85E7
JSR L9730
L85E7: LDA L04BB
CMP #$02
BCC L85F1
JSR L969D
L85F1: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L85FA: LDX FlashTime
LDA L0400,X
BEQ L8617
BMI L8610
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8617
L8610: CMP #$FF
BEQ L8617
JSR L8F61
L8617: JSR LA33E
JSR LA389
JSR LA3F1
JSR LA63A
DEC FlashTime
BPL L85FA
LDA L04BB
CMP #$02
BCC L8636
CMP #$30
BCS L8636
JSR L969D
L8636: LDA L04BB
CMP #$02
BCC L864E
CMP #$30
BCS L8644
JSR L9730
L8644: LDA L04BB
CMP #$02
BCC L864E
JSR L97F2
L864E: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L8657: LDX FlashTime
LDA L0400,X
BEQ L8674
BMI L866D
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8674
L866D: CMP #$FF
BEQ L8674
JSR L8F61
L8674: JSR LA33E
JSR LA389
JSR LA3F1
JSR LA63A
DEC FlashTime
BPL L8657
LDA L04BB
CMP #$02
BCC L8693
CMP #$30
BCS L8693
JSR L969D
L8693: LDA L04BB
CMP #$02
BCC L86AB
CMP #$30
BCS L86A1
JSR L9730
L86A1: LDA L04BB
CMP #$02
BCC L86AB
JSR L97F2
L86AB: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L86B4: LDX FlashTime
LDA L0400,X
BEQ L86D1
BMI L86CA
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L86D1
L86CA: CMP #$FF
BEQ L86D1
JSR L8F61
L86D1: JSR LA44D
DEC FlashTime
BPL L86B4
LDA L04BB
CMP #$02
BCC L86E7
CMP #$30
BCS L86E7
JSR L98A8
L86E7: RTS
LDX #$0D
STX FlashTime
L86ED: LDX FlashTime
LDA L0400,X
BEQ L870A
BMI L8703
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L870A
L8703: CMP #$FF
BEQ L870A
JSR L8F61
L870A: JSR LA44D
JSR LA4E2
JSR LA54E
DEC FlashTime
BPL L86ED
LDA L04BB
CMP #$02
BCC L8726
CMP #$30
BCS L8726
JSR L98A8
L8726: LDA L04BB
CMP #$02
BCC L8734
CMP #$30
BCS L8734
JSR L9943
L8734: LDA L04BB
CMP #$02
BCC L873E
JSR L99F5
L873E: JSR L912E
RTS
LDX #$0D
STX FlashTime
L8747: LDX FlashTime
LDA L0400,X
BEQ L8764
BMI L875D
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8764
L875D: CMP #$FF
BEQ L8764
JSR L8F61
L8764: JSR LA44D
JSR LA4E2
DEC FlashTime
BPL L8747
LDA L04BB
CMP #$02
BCC L877D
CMP #$30
BCS L877D
JSR L98A8
L877D: LDA L04BB
CMP #$02
BCC L8787
JSR L9943
L8787: JSR L912E
RTS
LDX #$0D
STX FlashTime
L8790: LDX FlashTime
LDA L0400,X
BEQ L87AD
BMI L87A6
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L87AD
L87A6: CMP #$FF
BEQ L87AD
JSR L8F61
L87AD: JSR LA44D
JSR LA4E2
JSR LA54E
DEC FlashTime
BPL L8790
LDA L04BB
CMP #$02
BCC L87C9
CMP #$30
BCS L87C9
JSR L98A8
L87C9: LDA L04BB
CMP #$02
BCC L87E1
CMP #$30
BCS L87D7
JSR L9943
L87D7: LDA L04BB
CMP #$30
BCC L87E1
JSR L99F5
L87E1: JSR L912E
RTS
LDX #$0D
STX FlashTime
L87EA: LDX FlashTime
LDA L0400,X
BEQ L8807
BMI L8800
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8807
L8800: CMP #$FF
BEQ L8807
JSR L8F61
L8807: JSR LA4E2
JSR LA63A
DEC FlashTime
BPL L87EA
LDA L04BB
CMP #$02
BCC L881C
JSR L9943
L881C: JSR L9BD1
RTS
LDX #$0D
STX FlashTime
L8825: LDX FlashTime
LDA L0400,X
BEQ L8842
BMI L883B
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8842
L883B: CMP #$FF
BEQ L8842
JSR L8F61
L8842: JSR LA389
JSR LA593
JSR LA63A
DEC FlashTime
BPL L8825
LDA L04BB
CMP #$02
BCC L885E
CMP #$30
BCS L885E
JSR L9730
L885E: LDA L04BB
CMP #$02
BCC L8868
JSR L9A70
L8868: JSR L9BD1
RTS
LDA L04BB
CMP #$03
BCC L8876
JSR L9351
L8876: LDX #$0D
STX FlashTime
L887B: LDX FlashTime
LDA L0400,X
BEQ L8898
BMI L8891
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8898
L8891: CMP #$FF
BEQ L8898
JSR L8F61
L8898: JSR LA5DD
JSR LA63A
DEC FlashTime
BPL L887B
LDA L04BB
CMP #$02
BCC L88B1
CMP #$30
BCS L88B1
JSR L9B1F
L88B1: RTS
LDA L04BB
CMP #$03
BCC L88BC
JSR L9351
L88BC: LDX #$0D
STX FlashTime
L88C1: LDX FlashTime
LDA L0400,X
BEQ L88DE
BMI L88D7
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L88DE
L88D7: CMP #$FF
BEQ L88DE
JSR L8F61
L88DE: JSR LA4E2
JSR LA63A
DEC FlashTime
BPL L88C1
LDA L04BB
CMP #$02
BCC L88F7
CMP #$30
BCS L88F7
JSR LA19E
L88F7: RTS
LDA L04BB
CMP #$03
BCC L8902
JSR L916B
L8902: LDX #$0D
STX FlashTime
L8907: LDX FlashTime
LDA L0400,X
BEQ L8924
BMI L891D
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8924
L891D: CMP #$FF
BEQ L8924
JSR L8F61
L8924: JSR LA44D
DEC FlashTime
BPL L8907
LDA L04BB
CMP #$02
BCC L893A
CMP #$30
BCS L893A
JSR LA238
L893A: RTS
LDX #$0D
STX FlashTime
L8940: LDX FlashTime
LDA L0400,X
BEQ L895D
BMI L8956
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L895D
L8956: CMP #$FF
BEQ L895D
JSR L8F61
L895D: JSR LA44D
DEC FlashTime
BPL L8940
LDA L04BB
L8968: CMP #$02
BCC L8973
CMP #$30
BCS L8973
JSR L98A8
L8973: RTS
LDX #$0D
STX FlashTime
L8979: LDX FlashTime
LDA L0400,X
BEQ L8996
BMI L898F
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8996
L898F: CMP #$FF
BEQ L8996
JSR L8F61
L8996: JSR LA677
DEC FlashTime
BPL L8979
LDA L04BB
CMP #$03
BCC L89A8
JSR L9CC7
L89A8: JSR L912E
RTS
LDX #$0D
STX FlashTime
L89B1: LDX FlashTime
LDA L0400,X
BEQ L89CE
BMI L89C7
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L89CE
L89C7: CMP #$FF
BEQ L89CE
JSR L8F61
L89CE: JSR LA677
DEC FlashTime
BPL L89B1
LDA L04BB
CMP #$03
BCC L89E0
JSR LA087
L89E0: JSR L912E
RTS
LDX #$0D
STX FlashTime
L89E9: LDX FlashTime
LDA L0400,X
BEQ L8A06
BMI L89FF
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8A06
L89FF: CMP #$FF
BEQ L8A06
JSR L8F61
L8A06: JSR LA677
DEC FlashTime
BPL L89E9
LDA L04BB
CMP #$03
BCC L8A18
JSR L9CC7
L8A18: JSR L912E
RTS
LDX #$0D
STX FlashTime
L8A21: LDX FlashTime
LDA L0400,X
BEQ L8A3E
BMI L8A37
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8A3E
L8A37: CMP #$FF
BEQ L8A3E
JSR L8F61
L8A3E: JSR LA6DF
DEC FlashTime
BPL L8A21
LDA L04BB
CMP #$03
BCC L8A50
JSR L9DDE
L8A50: RTS
;----------------------------------------------------
; Jump Routine #0
;----------------------------------------------------
L8A51: LDX #$0D ; Loop = 13
STX FlashTime ; Save loop
L8A56: LDX FlashTime ; Get index
LDA L0400,X ; Check 0400-040D
BEQ L8A73
BMI L8A6C
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8A73
L8A6C: CMP #$FF
BEQ L8A73
JSR L8F61
L8A73: JSR LA712
DEC FlashTime ; Decrement loop
BPL L8A56 ; Loop back until all 13 checked
LDA L04BB
CMP #$03
BCC L8A85
JSR L9E5B
L8A85: RTS ; Return
;----------------------------------------------------
; Jump Routine #1
;----------------------------------------------------
L8A86: LDX #$0D
STX FlashTime
L8A8B: LDX FlashTime
LDA L0400,X
BEQ L8AA8
BMI L8AA1
JSR L8ABB
JSR L90E5
JSR L8C60
JMP L8AA8
L8AA1: CMP #$FF
BEQ L8AA8
JSR L8F61
L8AA8: JSR LA4E2
DEC FlashTime
BPL L8A8B
LDA L04BB
CMP #$02
BCC L8ABA
JSR LA19E
L8ABA: RTS
;----------------------------------------------------
; Update Sprite Position
;----------------------------------------------------
L8ABB: LDX FlashTime ;
TXA ;
ASL A ;
TAX ;
LDA (L00B3,X) ;
TAY
LDX FlashTime
CLC
LDA LB100,Y
ADC Sprite1_X,X
STA Sprite1_X,X
CLC
LDA LB000,Y
ADC Sprite1_Y,X
STA Sprite1_Y,X
LDA L0400,X
ASL A
TAY
LDA LB5D4,Y
STA Ptr1_LO
LDA LB5D5,Y
STA Ptr1_HI
LDY #$00
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
LDA (Ptr2_LO),Y
STA Sprite1_Char,X
LDA L0400,X
ASL A
TAY
LDA LB5F2,Y
STA Ptr1_LO
LDA LB5F3,Y
STA Ptr1_HI
LDY #$00
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
LDA (Ptr2_LO),Y
STA Sprite1_Prop,X
LDA L0400,X
ASL A
TAY
LDA LB610,Y
STA Ptr1_LO
LDA LB611,Y
STA Ptr1_HI
LDY #$00
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
CLC
LDA (Ptr2_LO),Y
ADC Sprite1_X,X
STA Sprite1_X,X
LDA L0400,X
ASL A
TAY
LDA LB62E,Y
STA Ptr1_LO
LDA LB62F,Y
STA Ptr1_HI
LDY #$00
LDA (Ptr1_LO),Y
STA Ptr2_LO
L8B55: INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
CLC
LDA (Ptr2_LO),Y
ADC Sprite1_Y,X
STA Sprite1_Y,X
LDA L0454,X
BEQ L8B70
DEC L0454,X
JMP L8B8F
L8B70: TXA
ASL A
TAY
CLC
LDA L00B3,Y
ADC #$02
STA L00B3,Y
STA Ptr1_LO
LDA #$00
ADC L00B4,Y
STA L00B4,Y
STA Ptr1_HI
LDY #$01
LDA (Ptr1_LO),Y
STA L0454,X
L8B8F: LDA #$00
STA L04C8
L8B94: LDA L0438,X
CMP #$FF
BNE L8B9C
RTS
L8B9C: INC L04C8
STX L04BF
STA L04BD
LDX FlashTime
LDA L0400,X
ASL A
TAY
LDA LB5D4,Y
STA Ptr1_LO
LDA LB5D5,Y
STA Ptr1_HI
LDA L04C8
ASL A
TAY
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
LDA (Ptr2_LO),Y
LDX L04BD
STA Sprite1_Char,X
LDX FlashTime
LDA L0400,X
ASL A
TAY
LDA LB5F2,Y
STA Ptr1_LO
LDA LB5F3,Y
STA Ptr1_HI
LDA L04C8
ASL A
TAY
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
LDA (Ptr2_LO),Y
LDX L04BD
STA Sprite1_Prop,X
LDX FlashTime
LDA L0400,X
ASL A
TAY
LDA LB610,Y
STA Ptr1_LO
LDA LB611,Y
STA Ptr1_HI
LDA L04C8
ASL A
TAY
LDA (Ptr1_LO),Y
STA Ptr2_LO
INY
LDA (Ptr1_LO),Y
STA Ptr2_HI
LDA L040E,X
TAY
LDX L04BF
LDA (Ptr2_LO),Y
CLC
ADC Sprite1_X,X
LDX L04BD
STA Sprite1_X,X
LDX FlashTime
LDA L0400,X
ASL A
TAY
LDA LB62E,Y
STA Ptr1_LO
LDA LB62F,Y
STA Ptr1_HI
LDA L04C8
NEXT
PAGE
|