Site Map | Contact Info | Home  
  
 Home
 Products
 ROMHACK Toolbox
 Ordering Info
 Code Disassembly
  Bega's Battle
  Cliffhanger
  Thayer's Quest
 My Gameroom
 Links

 

 

Page1

Page2 

Page3 

Page4 

Page5 

Page6 

;----------------------------------------------------
;                  Do addition (3 bytes)
;----------------------------------------------------
         CLC                    ; Clear carry for addition
         SED                    ; Set decimal mode
         LDA Score,Y            ; Get player's score
         ADC L5478,X            ; Add bonus
         STA Score,Y            ; Save player's new score
         LDA Score1,Y           ; Get player's score
         ADC L5487,X            ; Add bonus
         STA Score1,Y           ; Save player's new score
         LDA Score2,Y           ; Get player's score
         ADC L5496,X            ; Add bonus
         STA Score2,Y           ; Save player's new score
;----------------------------------------------------
;                 Print updated score
;----------------------------------------------------
         CLD                    ; Clear Decimal Mode
         LDX PlayerNumber       ; Get Player Number
         JSR L463A              ; Print Player's Score
         LDX PlayerNumber       ; Get Player Number
         LDA L54A5,X            ; Get Score offset (0,3)
         TAX                    ; X = Score offset (0,3)
         LDA HiScore2
L5419:   
CMP Score2,X
         BCC L5432
         BNE L5449
         LDA HiScore1
         
CMP Score1,X
         BCC L5432
         BNE L5449
         LDA HiScore0
         
CMP Score,X
         BCS L5449
L5432:   LDA Score,X
         STA HiScore0
         LDA Score1,X
         STA HiScore1
         LDA Score2,X
         STA HiScore2
         LDX #$02               
; Set to Print High Score
         JSR L463A              ; Print High Score
;----------------------------------------------------
;    Check if bonus life is awarded for score level
;----------------------------------------------------
L5449:   LDA Bonus              ; Check bonus threshold
         BEQ L5475              ; No bonus level so leave
         LDX PlayerNumber       ;
         LDY L54A5,X            ;
         LDA Score2,Y           ;
         CMP Bonus+1,X          ; Is score greater than threshold?
         BCC L5475              ; No, so leave
         CLC                    ;
         SED                    ;
         LDA Bonus+1,X          ;
         ADC Bonus              ;
         STA Bonus+1,X          ;
         CLD                    ; Clear Decimal Mode
         LDA #$02
         JSR L51CE             
; Play Sound
         LDX PlayerNumber       ; Check which player is playing
         INC Player1Lives,X     ; Award bonus life
         JSR L4BF7              ; Print BEGA and LUNA lives
L5475:   PLA                    ; Get X Register
         TAX                    ; Restore X Register
         RTS                    ; Return



;----------------------------------------------------
;              Score Bonuses (by column)
;----------------------------------------------------
;  Value =      50,100,150,200,400,800,1600,1000,...
;----------------------------------------------------
L5478:   .BYTE $50,$00,$50,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
L5487:   .
BYTE $00,$01,$01,$02,$04,$08,$16,$10,$00,$00,$00,$00,$00,$00,$00
L5496:   .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
;----------------------------------------------------
;                 Score Offset
;----------------------------------------------------
L54A5:   .BYTE $00   ; Player1
         .BYTE $03   ; Player2




;----------------------------------------------------
;            Play LaserDisc Video Sequence
;----------------------------------------------------
;         A = Video Sequence number (0-46)
;----------------------------------------------------
L54A7:   STA Ptr2_LO            ; Save Video Sequence Number (0-46)
         LDA #$00               ; A = 00
         STA SearchStatus       ; Clear Search status
         STA STICK0             ; Clear ?
         STA ErrorHEX           ; Clear LDP HEX Error Count
         STA ErrorNAK           ; Clear LDP NAK Error Count
         STA LDPError           ; Clear LDP Unrecognized Byte Count
;----------------------------------------------------
;               Setup SEARCH Data
;----------------------------------------------------
L54BA:   LDA #$56               ; Command = CLEAR_ALL ($56)
         STA SEARCHBuf0         ; Save command in BufferOut
         LDA #$43               ; Command = SEARCH ($43)   
         STA PTRIG2             ; Save command in BufferOut
         ASL Ptr2_LO            ; Multiply Video Sequence Number by 2
         LDX Ptr2_LO            ; X = index
         LDA LCD12,X            ; Get Frame Number pointer
         STA Ptr1_LO            ; Setup pointer
         LDA LCD13,X            ; Get Frame Number pointer
         STA Ptr1_HI            ; Setup pointer
;----------------------------------------------------
;       Get Frame Number from Table ($027F-$0283)
;----------------------------------------------------
         LDY #$04               ; 5 digits to copy from table
L54D4:   LDA (Ptr1_LO),Y        ; Get digit from table
         STA PTRIG3,Y           ; Save digit into $027F-$0283
         DEY                    ; Go to next digit in number
         BPL L54D4              ; Loop until all 5 digits copied
;----------------------------------------------------
;               Setup REPEAT Data
;----------------------------------------------------
         LDA #$40               ; Command = ENTER ($40)
         STA REPEATBuf0         ; Save command in BufferOut
         LDA #$44               ; Command = REPEAT ($44)
         STA REPEATBuf1         ; Save command in BufferOut
         LDX Ptr2_LO            ; X = index
         LDA LCD70,X            ; Get Frame Number pointer
         STA Ptr1_LO            ; Setup pointer
         LDA LCD71,X            ; Get Frame Number pointer
         STA Ptr1_HI            ; Setup pointer
;----------------------------------------------------
;       Get Frame Number from Table ($0286-$028A)
;----------------------------------------------------
         LDY #$04               ; 5 digits to copy from table
L54F4:   LDA (Ptr1_LO),Y        ; Get digit from table
         STA REPEATBuf2,Y       ; Save digit into $0286-$028A
         DEY                    ; Go to next digit in number
         BPL L54F4              ; Loop until all 5 digits copied
;----------------------------------------------------
;      Add ENTER and EOL marker to command string
;----------------------------------------------------
         LDA #$40               ; Command = ENTER ($40)
         STA STRIG3+4           ; Save command in BufferOut
         STA STRIG3+5           ; Save command in BufferOut
         LDA #$FF               ; FF = End Buffer Marker
         STA STRIG3+6           ; Mark End of BufferOut
         JSR L510E              ; Send SEARCH/REPEAT data to LDPlayer
         LDA #$01               ;
         STA Serial7            ;
         RTS                    ; Return



;----------------------------------------------------
;                  unused?
;----------------------------------------------------
         LDA #$00
         STA Ptr1_HI
         STA Ptr2_LO
         STA Ptr2_HI
         LDY #$08
L551C:   LSR Ptr2_HI+
1
         BCC L552D
         
CLC
         LDA Ptr2_LO
         
ADC Ptr1_LO
         STA Ptr2_LO
         LDA Ptr2_HI
         
ADC Ptr1_HI
         STA Ptr2_HI
L552D:   ASL Ptr1_LO
         
ROL Ptr1_HI
         DEY
         BNE L551C
         RTS


;----------------------------------------------------
;              Update Scoring Overlay
;----------------------------------------------------
L5535:   JSR L4BA4              ;
         JSR L45C1              ; Print "HI 1UP/2UP" overlay screen
         LDA NumPlayers         ; How many players?
         BEQ L5545              ; One player so skip ahead
         LDX #$01               ; Setup printing of Player2 score
         JSR L463A              ; Print Player2 score
L5545:   LDX #$00               ; Setup printing of Player1 score
         JSR L463A              ; Print Player1 score
         LDX #$02               ; Setup printing of HI Score
         JSR L463A              ; Print HI Score
         JSR L4BF7              ; Print BEGA and LUNA lives
         RTS                    ; Return



;----------------------------------------------------
;         Print Number of Points scored (unused)
;----------------------------------------------------
         STX Ptr1_LO            ;
         LDA L55C9,Y            ;
         TAY                    ;
         LDA PADDL4
         BNE L5565
         LDA #$06
         
CLC
         
ADC Ptr1_LO
         BNE L5575
L5565:   
CMP #$01
         BNE L5570
         LDA #$03
         
CLC
         
ADC Ptr1_LO
         BNE L5575
L5570:   LDA #$00
         
CLC
         
ADC Ptr1_LO
L5575:   CPX #$06
         BNE L55A1
         TAX
         LDA L55D2,X
         STA L29A3,Y
         INX
         LDA L55D2,X
         STA L29A4,Y
         INX
         LDA L55D2,X
         STA L29A5,Y
;----------------------------------------------------
;               Print "PTS" for points
;----------------------------------------------------
         LDA L55CF              ; Char = 'P'
         STA L29A6,Y            ; Print 'P'
         LDA L55D0              ; Char = 'T'
         STA L29A7,Y            ; Print 'T'
         LDA L55D1              ; Char = 'S'
         STA L29A8,Y            ; Print 'S'
         RTS                    ; Return
;----------------------------------------------------
;               
;----------------------------------------------------
L55A1:   TAX
         LDA L55D2,X
         STA L28A3,Y
         INX
         LDA L55D2,X
         STA L28A4,Y
         INX
         LDA L55D2,X
         STA L28A5,Y
         LDA L55CF
         STA L28A6,Y
         LDA L55D0
         STA L28A7,Y
         LDA L55D1
         STA L28A8,Y
         RTS                   
; Return



;----------------------------------------------------
;              unknown data
;----------------------------------------------------
L55C9:   .BYTE $02,$0B,$14,$94,$8B,$82

;----------------------------------------------------
;               Point Text "PTS"
;----------------------------------------------------
L55CF:   .BYTE $1A  ; 'P'
L55D0:   .BYTE $1E  ; 'T'
L55D1:   .BYTE $1D  ; 'S'

;----------------------------------------------------
;              unknown data
;----------------------------------------------------
L55D2:   .BYTE $00,$06,$01,$02,$01,$01
         .
BYTE $02,$06,$01,$03,$01,$01
         .
BYTE $03,$06,$01



;----------------------------------------------------
;             Check Continue Feature
;----------------------------------------------------
L55E1:   LDA L04DA              ; Have we continued once yet?
         BEQ L55EC              ; No, so check for Continuous Play
         LDA #$00               ;
         STA L04DA              ;
         RTS                    ; Return

;----------------------------------------------------
;             Check for Continuous Play
;----------------------------------------------------
L55EC:   LDA L1002              ; Get DIP Bank 2
         AND #$04               ; Check Sw3, Continuous Play
         BEQ L55F4              ; Jump ahead for continuous play
         RTS                    ; No continue so leave
;----------------------------------------------------
;             Continuous Play Selected
;----------------------------------------------------
L55F4:   JSR L719E              ; Screen Transition, Fill from outside in
         LDA #$58               ; Video Sequence = ? (Frame xxxxx)
         JSR L54A7              ; Play LaserDisc video sequence
L55FC:   JSR L71B8              ; Screen Transition, Clear from inside out
         LDA SearchStatus       ; Check LDP search status
         CMP #$01               ;
         BEQ L5612              ;
         CMP #$02               ;
         BEQ L5612              ;
         LDX #$01               ; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
         JMP L55FC
L5612:   JSR L71D0             
; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
         JSR L71DE              ; Clear Sprite Bank 3 & 4 (3800-381F,3BE0-3BFF)
         LDX #$00
         TXA
L561B:   STA L3A00,X
         STA L3B00,X
         STA L3E00,X
         STA L3F00,X
         DEX
         BNE L561B
         LDA #$08
         STA L04BD
         LDA #$3F               
; Set Flash text for 6.3 seconds
         STA FlashTime          ; Set FlashTimer
         LDA Credits            ; Get number of Credits
         BEQ L563C              ; No credits left, so prompt for coins
         JMP L569A              ; Prompt player to press start button
;----------------------------------------------------
;            Prompt to insert more coins
;----------------------------------------------------
L563C:   LDX FlashTime          ; X = Flash rate timer for text
         LDA L04BD              ; ?
         STA L3B10              ; ?
         LDA #$00               ; ?
         STA L3F10              ; ?
;----------------------------------------------------
;      Update screen with flashing text message
;----------------------------------------------------
L564A:   LDA L1003              ; Check Vertical Blanking Pulse
         BPL L564A              ; Don't update screen until we're in blanking area
         TXA                    ; Save flash rate timer
         PHA                    ; Push flash rate time onto stack
         LDX #$E0               ; Message = "        " ($57E0)
         LDY #$57               ; Message = "        " ($57E0)
         AND #$30               ; Check if it's time to flash text
         BEQ L565D              ; Yes, so erase text this time
;----------------------------------------------------
;         "TO CONTINUE THE GAME AT
;          THE STAGE YOU LEFT OFF
;          INSERT COINS FOR MORE"
;----------------------------------------------------
         LDX #$4E               ; Message = "TO CONTINUE THE GAME AT" ($574E)
         LDY #$57               ; Message = "TO CONTINUE THE GAME AT" ($574E)
L565D:   JSR L4831              ; Print Text Message
         LDA Credits            ; Check if any credits have been awarded
         BEQ L5687              ; No credits so continue to flash message
;----------------------------------------------------
;          Credit inserted so award lives
;----------------------------------------------------
         JSR L56FD
         LDA L1002             
; Get DIP bank 2
         EOR #$FF               ; Toggle all bits
         AND #$03               ; Get DIP Sw1-2 Number of Begas
         TAY                    ; Y = DIP Sw1-2 Number of Begas
         LDA L4529,Y            ; Get initial Number of Lives from table
         LDY PlayerNumber       ; Find out which player is continuing
         STA Player1Lives,Y     ; Restore the players total lives
         LDA #$01               ;
         STA CDTMV3             ;
         JSR L4FC1              ; Deduct 1 Credit
         LDX #$FF               ;
         TXS                    ;
         JMP L40B1              ; Return to Main Game Loop

;----------------------------------------------------
;
;----------------------------------------------------
L5687:   PLA                    ; Get FlashTimer
         TAX                    ; X = FlashTimer
         DEX                    ; Decrement FlashTimer
         BPL L564A              ; FlashTimer still running so loop back
         DEC L04BD
         LDA L04BD
         
CMP #$01
         BNE L563C             
; Go back and prompt to insert coins
         JSR L459A              ; Erase Video Screen
         RTS                    ; Return

;----------------------------------------------------
;         Prompt to press button to continue
;----------------------------------------------------
L569A:   JSR L4F2E              ;
L569D:   LDX FlashTime          ;
         LDA L04BD              ;
         STA L3B10
         LDA #$00
         STA L3F10
;----------------------------------------------------
;      Update screen with flashing text message
;----------------------------------------------------
L56AB:   LDA L1003              ; Check Horizontal Blanking Pulse
         BPL L56AB              ; Don't update screen until we're in blanking area
         TXA                    ; Save flast rate timer
         PHA                    ; Push flash rate time onto stack
         LDX #$E0               ; Message = "        " ($57E0)
         LDY #$57               ; Message = "        " ($57E0)
         AND #$30               ; Check if it's time to flash text
         BEQ L56BE              ; Yes, so erase text this time
;----------------------------------------------------
;         "TO CONTINUE THE GAME AT
;          THE STAGE YOU LEFT OFF
;          PUSH START BUTTON"
;----------------------------------------------------
         LDX #$99               ; Message = "TO CONTINUE THE GAME AT" ($5799)
         LDY #$57               ; Message = "TO CONTINUE THE GAME AT" ($5799)
L56BE:   JSR L4831              ; Print Text Message
         LDA L1001              ; Get Switch Inputs
         AND #$20               ; Check Player1 button
         BNE L56EA              ; Player1 button not pressed, skip ahead
;----------------------------------------------------
;   Button pressed so deduct credit and award lives
;----------------------------------------------------
         JSR L56FD              ;
         LDA L1002              ; Get DIP bank 2
         EOR #$FF               ; Toggle all bits
         AND #$03               ; Get DIP Sw1-2 Number of Begas
         TAY                    ; Y = DIP Sw1-2 Number of Begas
         LDA L4529,Y            ; Get initial Number of Lives from table
         LDY PlayerNumber       ; Find out which player is continuing
         STA Player1Lives,Y     ; Restore that players total lives
         LDA #$01
         STA CDTMV3
         JSR L4FC1             
; Deduct 1 Credit
         LDX #$FF               ;
         TXS                    ;
         JMP L40B1              ; Return to Main Game Loop

L56EA:   PLA                   
; Get FlashTimer
         TAX                    ; X = FlashTimer
         DEX                    ; Decrement FlashTimer
         BPL L56AB
         
DEC L04BD
         LDA L04BD
         
CMP #$01
         BNE L569D
         JSR L459A             
; Erase Video Screen
         RTS                    ; Return



;----------------------------------------------------
;                Score routine?   
;----------------------------------------------------
L56FD:   LDA PlayerNumber       ; Which player is playing?
         BEQ L5705              ; Player1 is playing so do Player1
         JMP L5726              ; Jump ahead and do Player2
;----------------------------------------------------
;              Copy Player1's Score
;----------------------------------------------------
L5705:   JSR L459A              ; Erase Video Screen
         LDA Score              ;
         STA Ptr1_LO            ;
         LDA Score1             ;
         STA Ptr1_HI            ;
         LDA Score2             ;
         STA Ptr2_LO            ;
         JSR L5211              ; Check if Player is "GREATEST PLAYER"
;----------------------------------------------------
;          Reset Player1's Score to 00000
;----------------------------------------------------
         LDA #$00               ; Score = 0
         STA Score              ; Reset score
         STA Score1             ; Reset score
         STA Score2             ; Reset score
         RTS                    ; Return

;----------------------------------------------------
;             
;----------------------------------------------------
L5726:   JSR L459A              ; Erase Video Screen
         LDA P2Score
         STA Ptr1_LO
         LDA P2Score1
         STA Ptr1_HI
         LDA P2Score2
         STA Ptr2_LO
         JSR L5211             
; Check if Player is "GREATEST PLAYER"
         LDX #$00
         STX L1000
         
NOP
         
NOP
;----------------------------------------------------
;          Reset Player2's Score to 00000
;----------------------------------------------------
         LDA #$00               ; Score = 0
         STA P2Score          ; Reset score
         STA P2Score1         ; Reset score
         STA P2Score2         ; Reset score
         RTS                    ; Return



;----------------------------------------------------
;               Continue Text Messages
;----------------------------------------------------
L574E:   .WORD $3A44
         .
BYTE $1E,$19,$00,$0D,$19,$18,$1E,$13,$18,$1F,$0F,$00 ; "TO CONTINUE THE GAME AT"
         .BYTE $1E,$12,$0F,$00,$11,$0B,$17,$0F,$00,$0B,$1E,$FE
         
L5768:   .
WORD $3A84
         .
BYTE $1E,$12,$0F,$00,$1D,$1E,$0B,$11,$0F,$00,$23,$19 ; "THE STAGE YOU LEFT OFF"
         .BYTE $1F,$00,$16,$0F,$10,$1E,$00,$19,$10,$10,$FE
         
L5781:   .
WORD $3AC5
         .
BYTE $13,$18,$1D,$0F,$1C,$1E,$00,$0D,$19,$13,$18,$1D ; "INSERT COINS FOR MORE"
         .BYTE $00,$10,$19,$1C,$00,$17,$19,$1C,$0F,$FF
         
L5799:   .
WORD $3A44
         .
BYTE $1E,$19,$00,$0D,$19,$18,$1E,$13,$18,$1F,$0F,$00 ; "TO CONTINUE THE GAME AT"
         .BYTE $1E,$12,$0F,$00,$11,$0B,$17,$0F,$00,$0B,$1E,$FE
         
L57B3:   .
WORD $3A84
         .
BYTE $1E,$12,$0F,$00,$1D,$1E,$0B,$11,$0F,$00,$23,$19 ; "THE STAGE YOU LEFT OFF"
         .BYTE $1F,$00,$16,$0F,$10,$1E,$00,$19,$10,$10,$FE
         
L57CC:   .
WORD $3AC5
         .
BYTE $1A,$1F,$1D,$12,$00,$1D,$1E,$0B,$1C,$1E,$00,$0C ; "PUSH START BUTTON"
         .BYTE $1F,$1E,$1E,$19,$18,$FF
         
L57E0:   .
WORD $3A44
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; "        "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
         .
BYTE $00,$00,$00,$00,$00,$00,$FE
         
L5801:   .
WORD $3A84
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; "        "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
         .
BYTE $00,$00,$00,$FE
         
L581F:   .
WORD $3AC5
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; "        "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
         .
BYTE $00,$00,$00,$FF



;----------------------------------------------------
;              Machine has tilted
;----------------------------------------------------
L583D:   JSR L459A              ; Erase Video Screen
         LDA #$09               ;
         STA L1003              ;
         LDX #$B3               ; Message = "TILT" ($58B3)
         LDY #$58               ; Message = "TILT" ($58B3)
         JSR L4831              ; Print Text Message
;----------------------------------------------------
;              Delay for 6.38 seconds
;----------------------------------------------------
         LDX #$FF               ; Set delay = 4.25s
         JSR L588C              ; Run Programmable Delay
         LDX #$80               ; Set delay = 2.13s
         JSR L588C              ; Run Programmable Delay
         LDA Credits            ; Get number of Credits
         BEQ L5877              ; No credits left so skip ahead
         JSR L4FC1              ; Deduct 1 Credit
         LDA Credits            ; Get number of credits
         BEQ L5877              ; That was the last credit so skip ahead
         LDX #$01
         STX VTIMR4
         DEX                   
; Status = Game Over (X=00)
         STX GameStatus         ; Update Game Status due to TILT
         STX L1004
         LDA #$08
         STA L1003
         
JMP L4E3F              ; Give instructions wait for START BUTTON
;----------------------------------------------------
;      No credits left, return to Attract Mode
;----------------------------------------------------
L5877:   LDX #$00               ; A = 00
         STX CoinFlag           ; Clear CoinFlag so instructions aren't shown
         STX GameStatus         ; Game Status = Game Over
         STX L1004              ;
         DEX                    ;
         TXS                    ;
         LDA #$08               ;
         STA L1003              ;
         JMP L403C              ; Go back to Attract Mode



;----------------------------------------------------
;               Programmable Delay
;----------------------------------------------------
;            Delay time = X * 16.6ms
;----------------------------------------------------
L588C:   LDA L1003              ; Check verticle blanking (60Hz)
         BPL L588C              ; Wait for verticle blanking start
L5891:   LDA L1003              ; Check verticle blanking
         BMI L5891              ; Wait for verticle blanking end
         DEX                    ; Decrement delay value
         BPL L588C              ; Loop until delay complete
         RTS                    ; Return



;----------------------------------------------------
;              Error Text Messages
;----------------------------------------------------
L589A:   .WORD $398A  ; location on screen
         .BYTE $0E,$13,$1D,$0D,$00,$0F,$1C,$1C,$19,$1C,$FF  ; "DISC ERROR"

L58A7:   .
WORD $396A  ; location on screen
         .BYTE $16,$0E,$1A,$00,$0F,$1C,$1C,$19,$1C,$FF  ; "LDP ERROR"

L58B3:   .
WORD $39AD  ; location on screen
         .BYTE $1E,$13,$16,$1E,$FF  ; "TILT"



;----------------------------------------------------
;           Do Bega's Horizontal Movement
;----------------------------------------------------
L58BA:   LDA MasterReg          ; Check MasterReg for Explosion (b7)
         BPL L58C1              ; No explosion so skip ahead
         JMP L5BA5              ; Go update Bega Explosion
L58C1:   ASL A                  ; Check MasterReg for beginning stage (b6)
         BPL L58C7              ; Bega under joystick control so skip ahead
         JMP L59D1              ; Print STAGE Information Screen
;----------------------------------------------------
;            Check Joystick Left/Right
;----------------------------------------------------
L58C7:   LDA L1000              ; Get Joystick data
         EOR #$FF               ; Toggle all bits
         AND #$0C               ; Test only Left and Right Joystick
         BNE L58D3              ; If pressed then go check them
         JMP L5973              ; Neither are pressed so skip ahead
L58D3:   AND #$08               ; Test for Right joystick press
         BNE L592B              ; Right pressed so jump ahead
;----------------------------------------------------
;              Joystick LEFT pressed
;----------------------------------------------------
         LDA BegaXPos1L         ; Get Bega's X Position
         CMP #$10               ; Is it at far left?
         BCS L58E0              ; No, so continue
         JMP L5973              ; No left movement so leave
L58E0:   LDA L0093              ; Check attachments
         CMP #$FF               ; Is a person attached to Bega?
         BEQ L58FB              ; No so skip ahead
         LDA BegaXPos1L         ; Get Bega's X Position
         CMP #$18               ; Is it 24?
         BCS L58EF              ; Yes, so continue
         JMP L5973              ; Just leave
L58EF:   LDA POKADR             ;
         CMP #$FF               ;
         BEQ L58FB              ;
         LDA BegaXPos1L         ;
         CMP #$28               ;
         BCC L5973              ;
;----------------------------------------------------
;    Move 6 sprites that make up Bega to the LEFT
;----------------------------------------------------
L58FB:   LDX #$05               ; 6 sprites make up BEGA
L58FD:   LDA BegaXPos1L,X       ; Get sprite x position
         SEC                    ; Clear carry
         SBC L5C51              ; Subtract left movement
         STA BegaXPos1L,X       ; Save sprite x position
         DEX                    ; Next sprite in BEGA
         BPL L58FD              ; Loop until all sprites moved
         LDX #$05
L590A:   LDA L009C,X
         
AND #$F0
         BNE L5916
         LDA #$FE
         
AND L009C,X
         STA L009C,X
L5916:   DEX
         BPL L590A
         LDA MasterReg
         
AND #$30
         BEQ L5922
         
JMP L5973
L5922:   LDA #$FD
         
AND MasterReg
         STA MasterReg
         
JMP L5973
;----------------------------------------------------
;            Joystick RIGHT Pressed
;----------------------------------------------------
L592B:   LDA BegaXPos1L         ; Get Bega's X Position
         CMP #$D1               ; Is it at far right?
         BCS L5962              ; Yes, so skip ahead
         LDA L0094             
         
CMP #$FF
         BEQ L5949
         LDA BegaXPos1L
         
CMP #$C9
         BCS L5962
         LDA POKADR+
1           ;
         CMP #$FF               ;
         BEQ L5949              ;
         LDA BegaXPos1L         ;
         CMP #$B9               ;
         BCS L5962
;----------------------------------------------------
;   Move 6 sprites that make up Bega to the RIGHT
;----------------------------------------------------
L5949:   LDX #$05               ; 6 sprites make up BEGA
L594B:   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 L594B              ; Loop until all sprites moved
         LDA MasterReg
         
AND #$30
         BNE L5962
         LDA #$02
         ORA MasterReg
         STA MasterReg
L5962:   LDX #$05
L5964:   LDA L009C,X
         
AND #$F0
L5968:   BNE L5970
         LDA #$01
         ORA L009C,X
         STA L009C,X
L5970:   DEX
         BPL L5964
;----------------------------------------------------
;           
;----------------------------------------------------
L5973:   LDA MasterReg          ; Check which Bega to show
         AND #$20               ; Is it Barrier Bega?
         BEQ L597C              ; No, so skip ahead
         JMP L5B66              ; Show Barrier Bega
L597C:   LDA MasterReg          ; Check which Bega to show
         AND #$10               ; Is it Normal Bega?
         BEQ L5985              ; No, so skip ahead
         JMP L5B3C              ; Show Normal Bega
L5985:   LDA MasterReg
         
AND #$02
         ASL A
         ORA #$01
         LDX #$05
L598E:   STA ICPTHZ,X
         DEX
         BPL L598E
         LDA VNTD               
; Check Bega glow seqeunce
         BNE L59AD              ; Sequence not done, so jump to Bega Glow
;----------------------------------------------------
;             
;----------------------------------------------------
         LDA #$02               ; A = 2
         STA VNTD               ; Reset Bega Glow sequence
         LDA MasterReg          ;
         AND #$01               ;
         EOR #$01               ;
         TAX                    ;
         LDA #$FE
         
AND MasterReg
         STA MasterReg
         TXA
         ORA MasterReg
         STA MasterReg
;----------------------------------------------------
;              Bega's lights will "GLOW"
;----------------------------------------------------
L59AD:   LDA SysTimer           ; Check time on System Timer
         AND #$03               ; Do this every 66.6ms
         BNE L59B6              ; Not time yet, so skip Bega Glow
         DEC VNTD               ;
L59B6:   LDA MasterReg          ; Get Bega Glow state
         AND #$03               ; Glow state = 0-3
         ASL A                  ; Multiply by 2 to get Glow Bega pointer
         TAY                    ; Y = pointer to Bega Blow
         LDA L5C52,Y            ; Get Bega Glow pointer
         STA Ptr1_LO            ; Set Bega Glow pointer
         LDA L5C53,Y            ; Get Bega Glow pointer
         STA Ptr1_HI            ; Set Bega Glow pointer
;----------------------------------------------------
;     Update 6 sprites with new Bega GLOW picture
;----------------------------------------------------
         LDY #$05               ; 6 sprites to update
L59C8:   LDA (Ptr1_LO),Y        ; Get Bega Glow sprite picture
         STA BegaPic,Y          ; Set Bega sprite picture
         DEY                    ; Index to next sprite
         BPL L59C8              ; Loop until all 6 sprites updated
         RTS                    ; Return



;----------------------------------------------------
;         Beginning STAGE:  Information Screen
;----------------------------------------------------
L59D1:   LDA VNTD               ;
         BNE L59D9              ;
         LDA #$01               ;
         STA VNTD               ;
L59D9:   LDA SysTimer           ; Check time on System Timer
         AND #$01
         BNE L59E2
         
DEC VNTD
L59E2:   BEQ L59E5
         RTS
L59E5:   LDA MasterReg
         
AND #$3F
         BNE L5A17
;----------------------------------------------------
;                 Add Y step increment
;----------------------------------------------------
         LDX #$05               ; 6 sprites to update
L59ED:   CLC                    ;
         LDA BegaYPos1L,X       ;
         ADC L5C50              ;
         STA BegaYPos1L,X       ;
         DEX                    ;
         BPL L59ED              ;
;----------------------------------------------------
;          Slide BEGA into starting position
;----------------------------------------------------
         LDA BegaYPos1L         ;
         CMP #$B8               ;
         BCS L59FF              ;
         RTS                    ;
L59FF:   LDA #$06               ; Sound = 6
         JSR L51CE              ; Play Sound
         LDX #$05
         LDY #$75
L5A08:   STY BegaPic,X
         DEY
         DEX
         BPL L5A08
         LDA #$41
         STA MasterReg
         LDA #$10
         STA VNTD
         RTS
L5A17:   LDX #$05               
; Loop = 6 sprites update
L5A19:   LDA L5C88,X            ; Get picture
         STA BegaPic,X          ; Set Bega sprite picture
         DEX                    ; Next picture
         BPL L5A19              ; 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)
;----------------------------------------------------
;           Print "Player 1" or "Player 2"
;----------------------------------------------------
         LDA NumPlayers         ; Is this a two player game?
         BEQ L5A69              ; No, so no need to print which player
         LDX #$50               ; Message = "PLAYER" ($4D50)
         LDY #$4D               ; Message = "PLAYER" ($4D50)
         JSR L4831              ; Print Text Message
         CLC                    ; Clear carry
         LDA PlayerNumber       ; Determine which player is playing
         ADC #$02               ; Char = "1" or "2"
         STA L3913              ; Print "1" or "2" to screen

;----------------------------------------------------
;    Check if opening video has already been played
;----------------------------------------------------
L5A69:   LDA CDTMA1+1           ;
         BNE L5AC7              ;
         LDX #$00               ;
         STX FlashTime          ;
;----------------------------------------------------
;        Flash game play instructions for stage
;                 "RESCUE LUNA!"
;----------------------------------------------------
L5A73:   LDA SearchStatus       ; Get FlashText status
         CMP #$02               ;
         BEQ L5A97              ;
         LDX #$CB               ; Message = "     " ($5DCB) Erase instructions
         LDY #$5D               ; Message = "     " ($5DCB) Erase instructions
         INC FlashTime          ; Increment flash text timer
         LDA FlashTime          ; Get flash rate timer for text
         AND #$30               ; Check if it's time to flash text
         BEQ L5A8C              ; Yes, so erase text this time
         LDX #$F4               ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
         LDY #$5C               ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
L5A8C:   JSR L4831              ; Print Text Message
         LDX #$01               ; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
         JMP L5A73 ; Continue to flash instructions

;----------------------------------------------------
;     Erase Instructions and Play Video Sequence
;----------------------------------------------------
L5A97:   LDX #$CB               ; Message = "     " ($5DCB) Erase instructions
         LDY #$5D               ; Message = "     " ($5DCB) Erase instructions
         JSR L4831              ; Print Text Message
         JSR L719E              ; Screen Transition, Fill from outside in
         LDA #$15               ; Video Sequence = Instructions? (Frame 6798)
         JSR L54A7              ; Play LaserDisc video sequence
         LDA #$01 ;
         STA CDTMA1+1 ;
;----------------------------------------------------
;          Wait for video sequence to complete
;----------------------------------------------------
L5AAB:   LDA SearchStatus       ; Check LDP search status
         CMP #$01 ;
         BEQ L5ABE ;
         CMP #$02 ;
         BEQ L5ABE ;
         LDX #$01               ; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
         JMP L5AAB ;
;----------------------------------------------------
;             Clean up screen and return
;----------------------------------------------------
L5ABE:   JSR L71D0              ; Clear Sprite Bank 1 & 2 (2800-281F,2BE0-2BFF)
         JSR L71B8              ; Screen Transition, Clear from inside out
         JMP L5B26 ; Erase screen then return

;----------------------------------------------------
; Flash Instructions WITHOUT playing video sequence
;----------------------------------------------------
L5AC7:   LDX #$00 ; Flasthime = 00
         STX FlashTime ; Reset message flash time
L5ACC:   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 L5B19              ; Yes, so erase text this time
         LDA Level              ; Check Level
         BEQ L5AF5              ; Go print LUNA instructions (STAGE1)
         LDA CDTMA2+1
         BNE L5B19
         LDA Lunas             
; Get number of Lunas
         BMI L5B19
         LDA Level             
; Get level
         CMP #$01               ; Are we at the JOE Level (STAGE2)?
         BEQ L5B06              ; Yes, so print JOE instructions
         LDA Level              ; Get level
         CMP #$04               ; Are we at the SONY level (STAGE5)?
         BEQ L5B11              ; Yes, so print SONY instructions
         BNE L5B19
L5AF5:   LDA Lunas             
; Get number of Lunas
         CMP #$FF
         BEQ L5AFF
         
CMP #$08               ; Do we already have 8 Lunas?
         BCS L5B26              ; Yes, so skip instructions
;----------------------------------------------------
;                 LUNA Instructions
;----------------------------------------------------
L5AFF:   LDX #$F4               ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
         LDY #$5C               ; Message = "TOUCH TO RESCUE LUNA!" ($5CF4)
         JMP L5B19 ; Go print instructions
;----------------------------------------------------
;                 JOE Instructions
;----------------------------------------------------
L5B06:   LDA VVTP+1
         BEQ L5B26
         LDX #$3F               
; Message = "TOUCH TO RESCUE JOE !" ($5D3F)
         LDY #$5D               ; Message = "TOUCH TO RESCUE JOE !" ($5D3F)
         JMP L5B19 ; Go print instructions
;----------------------------------------------------
;                SONY Instructions
;----------------------------------------------------
L5B11:   LDA STMCUR_swap ;
         BEQ L5B26 ;
         LDX #$84               ; Message = "TOUCH TO RESCUE SONY !" ($5D84)
         LDY #$5D               ; Message = "TOUCH TO RESCUE SONY !" ($5D84)
L5B19:   JSR L4831              ; Print Text Message
         LDX #$01               ; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
;----------------------------------------------------
;              Loop back and flash text
;----------------------------------------------------
         INC FlashTime          ; Increment Flash time
         BNE L5ACC ; Loop back until flash time expires
;----------------------------------------------------
;           Erase Text Instructions from screen
;----------------------------------------------------
L5B26:   LDX #$CB               ; Message = "     " ($5DCB) Erase instructions
         LDY #$5D               ; Message = "     " ($5DCB) Erase instructions
         JSR L4831              ; Print Text Message
         LDX #$38               ; Message = "        " ($4D38) Erase STAGE
         LDY #$4D               ; Message = "        " ($4D38) Erase STAGE
         JSR L4831              ; Print Text Message
         LDX #$59               ; Message = "        " ($4D59) Erase PLAYER
         LDY #$4D               ; Message = "        " ($4D59) Erase PLAYER
         JSR L4831              ; Print Text Message
         RTS                    ; Return




;----------------------------------------------------
;       Update Bega Glow sequence in MasterReg
;----------------------------------------------------
L5B3C:   LDA MasterReg
         
AND #$03
         BEQ L5B61
         
CMP #$03
         BEQ L5B50
         LDA SysTimer           
; Check time on System Timer
         AND #$07               ;
         BNE L5B4F              ;
         DEC MasterReg          ;
L5B4F:   RTS                    ;
;----------------------------------------------------
;           Update 6 sprites to Normal Bega
;----------------------------------------------------
L5B50:   LDX #$05               ;
         LDY #$01               ;
L5B54:   LDA L5CA0,X            ;
         STA BegaPic,X          ;
         STY ICPTHZ,X           ;
         DEX                    ;
         BPL L5B54              ;
         DEC MasterReg          ;
         RTS                    ; Return
;----------------------------------------------------
;       
;----------------------------------------------------
L5B61:   LDA #$00               ;
         STA MasterReg          ;
         RTS                    ;



;----------------------------------------------------
;                Show Barrier Bega
;----------------------------------------------------
L5B66:   LDA MasterReg          ;
         AND #$30               ;
         CMP #$30               ;
         BEQ L5B71              ;
         JMP L5C43
;----------------------------------------------------
;               Show Barrier Bega
;----------------------------------------------------
L5B71:   LDA SysTimer           ; Check time on System Timer
         AND #$03               ; Are we shooting?
         BEQ L5B79              ; Yes
         RTS
;----------------------------------------------------
;     Find next sequence for Bega Barrier picture
;----------------------------------------------------
L5B79:   LDA BarrierPic         ; Get Bega Barrier picture sequence
         ASL A                  ; Multiply by 2
         TAY                    ; Create an index
         LDA L5C5A,Y            ; Get Barrier picture pointer
         STA Ptr1_LO            ; Save pointer
         LDA L5C5B,Y            ; Get Barrier picture pointer
         STA Ptr1_HI            ; Save pointer
         AND Ptr1_LO            ; Check if this is the last in the sequence
         CMP #$FF               ; Is this the last picture?
         BEQ L5BA0              ; Yes, so just skip ahead
         INC BarrierPic         ; Go to the next picture in the sequence
;----------------------------------------------------
;            Update Bega Barrier picture
;----------------------------------------------------
         LDY #$05               ; Loop = 6 sprites update
         LDX #$01               
L5B95:   LDA (Ptr1_LO),Y       
; Get picture
         STA BegaPic,Y          ; Set Bega sprite picture
         STX ICPTHZ,X           
         DEY                   
; Next picture
         BPL L5B95              ; Loop until all 6 sprites updated
         RTS                    ; Return
;----------------------------------------------------
;            Restart barrier sequence
;----------------------------------------------------
L5BA0:   LDA #$00               ; Restart barrier sequence
         STA MasterReg          ; Save barrier sequence
         RTS                    ; Return


;----------------------------------------------------
;         
;----------------------------------------------------
L5BA5:   LDA MasterReg
         
AND #$7F               ; Have we finished exploding?
         BNE L5BBE              ; No, so continue exploding
         LDX PlayerNumber       ; Which player is playing?
         DEC Player1Lives,X     ; Done exploding so player loses a life
         LDA #$01
         STA VNTD
         
INC MasterReg          ; Erase Bega explosion
         LDA #$03               ; Sound = 3
         JSR L51CE              ; Play Sound
         JSR L4BF7              ; Print BEGA and LUNA lives
L5BBE:   LDA SysTimer           ; Check time on System Timer
         AND #$03
         BEQ L5BC6
         RTS
L5BC6:   
DEC VNTD
         BEQ L5BCB
         RTS
L5BCB:   LDA #$02
         STA VNTD
;----------------------------------------------------
;         Update Bega's sprite pictures
;----------------------------------------------------
         LDA MasterReg          ; Get Explode sequence
         AND #$7F               ; Isolate Explode sprite sequence
         ASL A                  ; Turn it into a pointer
         TAX                    ; Index to correct Explode sequence
         LDA L5C72,X            ; Get Bega Explode picture pointer
         STA Ptr1_LO
         LDA L5C73,X
         STA Ptr1_HI
         LDY #$05
L5BE1:   LDA (Ptr1_LO),Y
         STA BegaPic,Y
         LDA #$01
         STA ICPTHZ,Y
         DEY
         BPL L5BE1
         LDY #$05
;----------------------------------------------------
;           Scatter Bits in X Direction
;----------------------------------------------------
L5BF0:   CLC                    ; Clear carry
         LDA L5C44,Y            ; Get Y scatter direction/speed
         ADC BegaXPos1L,Y       ; Move explosion in the Y direction
         CMP #$10               ; Is X position < 16
         BCS L5BFD              ; Yes, so check other boundary
         LDA #$10               ;
L5BFD:   CMP #$F0               ; Is X position > 240
         BCC L5C03              ; No
         LDA #$F0               ;
L5C03:   STA BegaXPos1L,Y       ;
;----------------------------------------------------
;           Scatter Bits in Y Direction
;----------------------------------------------------
         CLC                    ; Clear carry
         LDA L5C4A,Y            ; Get Y scatter direction/speed
         ADC BegaYPos1L,Y       ; Move explosion in the Y direction
         CMP #$20               ; If Y position < 32
         BCS L5C13              ;
         LDA #$20               ;
L5C13:   STA BegaYPos1L,Y       ;
         DEY                    ;
         BPL L5BF0              ;
;----------------------------------------------------
;           Cycle thru explostion pictures
;----------------------------------------------------
         INC MasterReg             ; Go to next explode picture
         LDA MasterReg             ; Get explode picture
         AND #$7F               ; Isolate Explode sprite sequence
         CMP #$0B               ; Have we completed the explosion sequence?
         BEQ L5C24              ; Yes, so skip ahead
         RTS                    ; Return for another round
;----------------------------------------------------
;             Bega Explosion Complete
;----------------------------------------------------
L5C24:   LDA #$00               ;
         STA MasterReg             ;
         LDX #$05               ;
         LDA #$00               ;
L5C2C:   STA ICPTHZ,X           ;
         STA BegaPic,X          ;
         DEX                    ;
         BPL L5C2C              ;
         LDA #$01               ; Set death marker
         STA LifeLost           ; Indicate to Main Loop that player died
         JSR L47D0              ; Update Sprites
         JSR L71DE              ; Clear Sprite Bank 3 & 4 (3800-381F,3BE0-3BFF)
         LDX #$25               ;
         JSR L4BD2              ; Run Programmable Delay
L5C43:   RTS                    ; Return


;----------------------------------------------------
;     Bega Explosion Sprite Scatter Directions  X
;----------------------------------------------------
L5C44:   .BYTE $FC,$04   ;--4, +4
         .BYTE $FA,$06   ;--6, +6
         .BYTE $FC,$04   ;--4, +4,

;----------------------------------------------------
;     Bega Explosion Sprite Scatter Directions  Y
;----------------------------------------------------
L5C4A:   .BYTE $F8,$F8   ;--8, -8
         .BYTE $FC,$FC   ;--4, -4
         .BYTE $00,$00   ; +0, +0

;----------------------------------------------------
;             Y Movement Step Increment
;----------------------------------------------------
L5C50:   .BYTE $02       ; Y Step = 2

;----------------------------------------------------
;             X Movement Step Increment
;----------------------------------------------------
L5C51:   .BYTE $02       ; X Step = 2



;----------------------------------------------------
;          Bega Sprite Pointers (Bega Glow)
;----------------------------------------------------
L5C52:   .WORD $5C88,$5C8E,$5C94,$5C9A

;----------------------------------------------------
;          Bega Sprite Pointers (Bega Barrier)
;----------------------------------------------------
L5C5A:   .WORD $5CA6,$5CAC,$5CB2,$5CAC,$5CB2,$5CAC
         .
WORD $5CB2,$5CAC,$5CB2,$5CAC,$5CA6,$FFFF

;----------------------------------------------------
;           Bega Sprite Pointers (Bega Explode)
;----------------------------------------------------
L5C72:   .WORD $5CB8,$5CB8,$5CBE,$5CC4,$5CCA,$5CD0
         .
WORD $5CD6,$5CDC,$5CE2,$5CE8,$5CEE

;----------------------------------------------------
;          Bega Sprite Assignments (Bega Glow)   
;----------------------------------------------------
L5C88:   .BYTE $28,$29,$2A,$2B,$2C,$2D    ; Bega Glow 1
L5C8E:   .BYTE $2E,$2F,$30,$31,$32,$33    ; Bega Glow 2
L5C94:   .BYTE $29,$28,$2B,$2A,$2D,$2C    ; Bega Glow 3
L5C9A:   .BYTE $2F,$2E,$31,$30,$33,$32    ; Bega Glow 4

;----------------------------------------------------
;          Bega Sprite Assignments (Bega Normal)   
;----------------------------------------------------
L5CA0:   .BYTE $34,$35,$36,$37,$38,$39    ; Bega Normal

;----------------------------------------------------
;          Bega Sprite Assignments (Bega Barrier)   
;----------------------------------------------------
L5CA6:   .BYTE $46,$47,$48,$49,$4A,$4B    ; Bega Barrier 1
         .BYTE $4C,$4D,$4E,$4F,$50,$51    ; Bega Barrier 2
         .BYTE $52,$53,$54,$55,$56,$57    ; Bega Barrier 3
;----------------------------------------------------
;          Bega Sprite Assignments (Bega Explode)   
;----------------------------------------------------
L5CB8:   .BYTE $58,$29,$2A,$2B,$2C,$2D    ; Bega Explode 1
         .BYTE $58,$59,$2A,$2B,$2C,$2D    ; Bega Explode 2
         .BYTE $5E,$59,$5A,$2B,$2C,$2D    ; Bega Explode 3
         .BYTE $5E,$5F,$5A,$5B,$5C,$2D    ; Bega Explode 4
         .BYTE $64,$5F,$60,$5B,$5C,$2D    ; Bega Explode 5
         .BYTE $64,$65,$60,$61,$5C,$5D    ; Bega Explode 6
         .BYTE $64,$65,$66,$61,$62,$5D    ; Bega Explode 7
         .BYTE $64,$65,$66,$67,$62,$63    ; Bega Explode 8
         .BYTE $64,$65,$66,$67,$68,$63    ; Bega Explode 9
         .BYTE $64,$65,$66,$67,$68,$69    ; Bega Explode 10
                                         
                                         
;----------------------------------------------------
;          Level Instructions for Gameplay
;----------------------------------------------------
L5CF4:   .WORD $3A44                    ; "TOUCH TO RESCUE LUNA !"
         .BYTE $1E,$19,$1F,$0D,$12,$00,$1E,$19,$00,$1C
         .
BYTE $0F,$1D,$0D,$1F,$0F,$00,$16,$1F,$18,$0B,$00,$65
         .
BYTE $FE
         
L5D0D:   .
WORD $3A84                    ; "ONLY SHE CAN CALL OTHER"
         .BYTE $19,$18,$16,$23,$00,$1D,$12,$0F,$00,$0D,$0B,$18,$00
         .
BYTE $0D,$0B,$16,$16,$00,$19,$1E,$12,$0F,$1C,$FE

L5D27:   .
WORD $3AC4                    ; "FIGHERS TO YOUR SIDE"
         .BYTE $10,$13,$11,$12,$1E,$0F,$1C,$1D,$00,$1E,$19,$00,$23,$19,$1F
         .
BYTE $1C,$00,$1D,$13,$0E,$0F,$FF

L5D3F:   .
WORD $3A44                    ; "TOUCH TO RESCUE JOE !"
         .BYTE $1E,$19,$1F,$0D,$12,$00,$1E,$19,$00,$1C,$0F
         .
BYTE $1D,$0D,$1F,$0F,$00,$14,$19,$0F,$00,$65,$FE

L5D57:   .
WORD $3A84
         .
BYTE $14,$19,$0F,$00,$13,$1D,$00,$1E,$12,$0F,$00 ; "JOE IS THE GUARDIAN OF"
         .BYTE $11,$1F,$0B,$1C,$0E,$13,$0B,$18,$00,$19,$10
         .
BYTE $FE
         
L5D7X:   .
WORD $3AC5                                       
         .
BYTE $1E,$12,$0F,$00,$80,$81,$82,$83,$84        ; "THE PKBARRIER BUTTON"
         .BYTE $85,$00,$0C,$1F,$1E,$1E,$19,$18,$FF
         
L5D84:   .
WORD $3A44                                       ; "TOUCH TO RESCUE SONY !"
         .BYTE $1E,$19,$1F,$0D,$12,$00,$1E,$19,$00,$1C,$0F,$1D,$0D
         .
BYTE $1F,$0F,$00,$1D,$19,$18,$23,$00,$65,$FE

L5D9D:   .
WORD $3A84
         .
BYTE $1D,$19,$18,$23,$00,$13,$1D,$00,$1E,$12,$0F,$00 ; "SONY IS THE GUARDIAN OF"
         .BYTE $11,$1F,$0B,$1C,$0E,$13,$0B,$18,$00,$19,$10,$FE

         
L5DB7:   .
WORD $3AC5
         .
BYTE $1E,$12,$0F,$00,$86,$87,$88,$89,$8A,$8B,$00,$0C,$1F,$1E ; "THE TELEPORT BUTTON"
         .BYTE $1E,$19,$18,$FF

L5DCB:   .
WORD $3A44
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; "           "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE

L5DEB:   .
WORD $3A84
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; "         "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE

L5E06:   .
WORD $3AC4
         .
BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00  ; "           "
         .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF



;----------------------------------------------------
;               LUNA Movement Updates
;----------------------------------------------------
;       A =
;----------------------------------------------------
L5E23:   CMP #$40               ;
         BNE L5E2A              ;
         JMP L5F43              ;
L5E2A:   LDA L009B              ;
         CMP #$FF               ;
         BEQ L5E3B
         BPL L5E35
         
JMP L6099              ; LUNA hit bottom?
L5E35:   ASL A
         BPL L5E3B
         
JMP L5F43
L5E3B:   LDA Lunas             
; Get number of LUNA's
         CMP #$FF
         BNE L5E42
         RTS
L5E42:   LDA Level
         BNE L5E48
         RTS
L5E48:   LDA L009B
         
AND #$30
         
CMP #$20
         BEQ L5E8A
         LDA L00A5
         
AND #$01
         TAX
         
CLC
         LDA L614C,X
         
ADC L00A6
         STA L00A6
         
CMP #$E0
         BCS L5E86
         
CMP #$0A
         BCC L5E80
         
CMP #$D0
         BCS L5E8A
         
CLC
         
ADC #$30
         
CMP BegaXPos1R
         BCC L5E80
         LDA L00A6
         
CMP #$18
         BCC L5E8A
         SEC
         SBC #$18
         
CMP BegaXPos1R
         BCS L5E86
         
JMP L5E8A
L5E80:   LDA #$01
         STA L00A5
         BNE L5E8A
L5E86:   LDA #$00
         STA L00A5
L5E8A:   LDA L00A6
         
AND #$F8
         LSR A
         LSR A
         LSR A
         STA POKMSK
         
DEC POKMSK
         
CLC
         LDA #$40
         
ADC POKMSK
         STA Ptr1_LO
         LDA #$00
         
ADC #$3B
         STA Ptr1_HI
         
CLC
         LDA #$60
         
ADC POKMSK
         STA Ptr2_LO
         LDA #$00
         
ADC #$3B
         STA Ptr2_HI
         
CLC
         LDA #$80
         
ADC POKMSK
         STA Ptr2_HI+
1
         LDA #$00
L5EB8:   
ADC #$3B
         STA TRAMSZ
         
CLC
         LDA #$A0
         
ADC POKMSK
         STA CMCMD
         LDA #$00
         
ADC #$3B
         STA WARMST
L5EC9:   LDA L00A6
         
AND #$06
         LSR A
         STA POKMSK
         ASL A
         ASL A
         
CLC
         
ADC POKMSK
         TAX
         LDA L009B
         BEQ L5EE2
         
CMP #$FF
         BEQ L5EE2
         
AND #$20
         BNE L5F01
L5EE2:   LDY #$00
         STY L009B
L5EE6:   LDA L614E,X
         STA (Ptr1_LO),Y
         LDA L6162,X
         STA (Ptr2_LO),Y
         LDA L6176,X
         STA (Ptr2_HI+
1),Y
         LDA L618A,X
         STA (CMCMD),Y
         INX
         INY
         CPY #$05
         BNE L5EE6
         RTS
L5F01:   LDA L009B
         
AND #$10
         BNE L5F08
         RTS
L5F08:   LDA SysTimer           
; Check time on System Timer
         AND #$03
         BEQ L5F10
         RTS
L5F10:   LDA HATABS+
15
         ASL A
         ASL A
         
CLC
         
ADC HATABS+15
         TAX
         LDY #$00
         
INC HATABS+15
L5F1F:   LDA L619E,X
         BEQ L5F3C
         STA (Ptr1_LO),Y
         LDA L61DB,X
         STA (Ptr2_LO),Y
         LDA L6217,X
         STA (Ptr2_HI+
1),Y
         LDA L6253,X
         STA (CMCMD),Y
         INX
         INY
         CPY #$05
         BNE L5F1F
         RTS
L5F3C:   LDA #$00
         STA L009B
         
JMP L5EC9



;----------------------------------------------------
;               LUNA Movement Updates
;----------------------------------------------------
L5F43:   LDA L009B
         
AND #$30
         BNE L5F5E
         LDA Lunas
         
CMP #$FF
         BEQ L5F5E
         
CMP #$08
         BCC L5F54
         RTS
L5F54:   LDA Level
         BEQ L5F5E
         LDA #$FF
         STA L009B
         RTS
L5F5E:   LDA L009B
         
AND #$20
         BNE L5FB7
L5F64:   LDA MasterReg
         
AND #$F0
         BEQ L5F6B
         RTS
;----------------------------------------------------
;        Reset for new Random LUNA movement
;----------------------------------------------------
L5F6B:   LDA Random             ; Get Random Number
         AND #$0F               ; Random number between 0-15
         STA L00A2              ; Save as Movement Pattern (0-15)
         LDA #$00               ; A = 0
         STA L00A3              ; Clear movement pointer
         LDA L00A2              ; Clear movement pointer
         ASL A
         TAX
         LDA LBF42,X
         STA Ptr1_LO
         LDA LBF43,X
         STA Ptr1_HI
         LDY #$01
         LDA (Ptr1_LO),Y       
; Get 8
         STA L00A4              ; Save 8 in counter step
         LDA #$01
         STA SpritePic1
         STA SpritePic2
         LDA #$76
         STA Sprite3_Char       
;   
         LDA #$77
         STA Sprite3a_Char
         LDX L00A2
;----------------------------------------------------
;           Start LUNA at top of screen
;----------------------------------------------------
         LDA Random             ; Get Random Number between 48-79
         AND #$1F               ; Start with number between 0-31
         CLC                    ; Clear carry
         ADC #$30               ; Adjust number between 48-79
         STA Sprite3_X          ; Start LUNA at X location between 48-79
         STA Sprite3a_X         ; Set X for LUNA sprite(2)
         LDA #$00               ; Y location = 0
         STA Sprite3_Y          ; Start LUNA at the top of the screen
         LDA #$10               ; Y locatoin = 32
         STA Sprite3a_Y         ; Put sprite(2) right below sprite(1)
         LDA #$60
         STA L009B
         LDA #$09               
; Sound = #9
         JSR L51CE              ; Play Sound
L5FB7:   LDA L009B
         
AND #$10
         BEQ L5FC0
         
JMP L6064              ; Skip all LUNA movements
L5FC0:   LDA L00A2              ; Get which movement pattern we're using
         ASL A                  ; Create an index
         TAX                    ; X = index to movement pattern
;----------------------------------------------------
;       Setup Pointer to LUNA Movement Pattern
;----------------------------------------------------
         LDA LBF42,X            ;
         STA Ptr1_LO            ;
         LDA LBF43,X            ;
         STA Ptr1_HI            ;
         LDY L00A3              ;
         LDA (Ptr1_LO),Y        ; Get LUNA pattern (21,8,f
         TAX                    ; X = pattern position
         LDA LB100,X            ; Get pattern movement
         BPL L5FE0              ; LUNA Moving left, skip ahead
         LDA #$01               ; LUNA Picture facing LEFT
         STA SpritePic1         ; Update LUNA picture
         STA SpritePic2         ; Update LUNA picture
         BNE L5FE6              ; Go to movement
L5FE0:   LDA #$05               ; LUNA Picture facing RIGHT
         STA SpritePic1         ; Update LUNA picture
         STA SpritePic2         ; Update LUNA picture
;----------------------------------------------------
;            Update LUNA's X Coordinate
;----------------------------------------------------
L5FE6:   CLC                    ; Clear carry for addition
         LDA Sprite3_X          ; Get sprite(1) x coordinate
         ADC LB100,X            ; Adjust x movement (add/subtract)
         STA Sprite3_X          ; Save new sprite x coordinate
         CLC                    ; Clear carry for addition
         LDA Sprite3a_X         ; Get sprite(2) x coordinate
         ADC LB100,X            ; Adjust x movement (add/subtract)
         STA Sprite3a_X         ; Save new sprite x coordinate
;----------------------------------------------------
;            Update LUNA's Y Coordinate
;----------------------------------------------------
         CLC                    ; Clear carry for addition
         LDA Sprite3_Y          ; Get sprite(1) y coordinate
         ADC LB000,X            ; Add y position
         STA Sprite3_Y          ; Save sprite y coordinate
         CLC                    ; Clear carry for addition
         LDA Sprite3a_Y         ; Get sprite(2) y coordinate
         ADC LB000,X            ; Add y position
         STA Sprite3a_Y         ; Save sprite y coordinate
;----------------------------------------------------
;        Move a set distance in current direction
;----------------------------------------------------
         DEC L00A4              ; Count down number of moves in that direction
         BNE L6015              ; Not done moving in that direction so skip ahead
         INC L00A3              ; Increment movement pointer
         INC L00A3              ; Increment movement pointer
         LDY L00A3              ;
         INY                    ;
         LDA (Ptr1_LO),Y        ;
L6013:   STA L00A4              ;
;----------------------------------------------------
;         Check X position for edge of screen
;----------------------------------------------------
L6015:   LDA Sprite3_X          ; Get X position
         CMP #$04               ; Are we past far left of screen?
         BCC L604D              ; No, so skip ahead
         CMP #$EC               ; Are we past far right of screen?
         BCS L604D              ; No, so skip ahead
;----------------------------------------------------
;            Check if LUNA was caught
;----------------------------------------------------
         LDA Sprite3_Y          ; Check LUNA Y Position
         CMP #$E0               ; Has LUNA passed bottom of screen?
         BCS L604D              ; Yes, so skip ahead
         LDA MasterReg
         
AND #$F0
         BNE L604C
         LDA Sprite3_X         
; Get LUNA X position
         SEC                    ; Set Carry
         SBC BegaXPos2R         ; Compare to Bega's X position
         CLC                    ; Clear carry
         ADC #$10               ; Add 16
         CMP #$20               ; Are we close enough to her?
         BCS L604C              ; No catch, so leave
         LDA Sprite3_Y          ; Get LUNA Y position
         SEC                    ; Set Carry
         SBC FKDEF              ; Compare to Bega's Y position
         CLC                    ; Clear carry
         ADC #$10               ; Add 16
         CMP #$20               ; Are we close enough to her?
         BCS L604C              ; No catch, so leave
;----------------------------------------------------
;               LUNA was caught
;----------------------------------------------------
         LDA #$70               ; Erase LUNA
         STA L009B              ; Save LUNA status
         INC Lunas              ; Increment number of Lunas caught
         JSR L4BF7              ; Print BEGA and LUNA lives
L604C:   RTS                    ; Return
;----------------------------------------------------
;              Erase LUNA from screen
;----------------------------------------------------
L604D:   LDA #$00               ; A = 0
         STA SpritePic1         ; Clear LUNA sprite(1) pic
         STA Sprite3_Char       ; Clear LUNA sprite(1) prop
         STA Sprite3_X          ; Clear LUNA sprite(1) X
         STA Sprite3_Y          ; Clear LUNA sprite(1) Y
         STA SpritePic2         ; Clear LUNA sprite(2) pic
         STA Sprite3a_Char      ; Clear LUNA sprite(2) prop
         STA Sprite3a_X         ; Clear LUNA sprite(2) X
         STA Sprite3a_Y         ; Clear LUNA sprite(2) Y
         LDA #$40               ;
         STA L009B              ; Save LUNA status
         RTS                    ; Return
;----------------------------------------------------
;             
;----------------------------------------------------
L6064:   LDA L009B              ;
         AND #$0F               ;
         BNE L6085              ;
         LDA #$02               ; Sound = 2
         JSR L51CE              ; Play Sound
         LDA #$72               ;
         STA L009B              ;
         LDA #$01               ;
         STA SpritePic1         ;
         LDA #$23               ;
         STA Sprite3_Char       ;
         LDA #$00               ;
         STA SpritePic2         ;
;----------------------------------------------------
;           Award 200 points for LUNA catch
;----------------------------------------------------
         LDA #$03               ; Bonus = 200
         JSR L53D7              ; Add Bonus to Score
         RTS                    ; Return


;----------------------------------------------------
;             
;----------------------------------------------------
L6085:   LDA SysTimer           ; Check time on System Timer
         AND #$0F               ; Do this every 16 ticks
         BEQ L608D              ; if 16 ticks has expired then skip ahead
         RTS                    ; Else, leave
L608D:   DEC L009B              ;
         LDA L009B              ;
         AND #$0F
         BNE L6098
         
JMP L604D
L6098:   RTS
L6099:   LDA L009B
         
AND #$7F
         BNE L60B2
         LDA #$04               
; Sound = #4
         JSR L51CE              ; Play Sound
         LDA #$81               ;
         STA L009B              ;
         DEC Lunas              ; Player died, lose one Lunas?
         JSR L4BF7              ; Print BEGA and LUNA lives
         LDA #$01               ;
         STA HATABS+15          ;
L60B2:   LDA SysTimer           ; Check time on System Timer
         AND #$07
         BEQ L60BA
         RTS
L60BA:   
DEC HATABS+15
         BEQ L60C0
         RTS
L60C0:   LDA #$04
         STA HATABS+
15
         LDA L00A6
L60C7:   LSR A
         LSR A
         LSR A
         STA POKMSK
         
DEC POKMSK
         
CLC
         LDA #$40
         
ADC POKMSK
         STA Ptr1_LO
         LDA #$00
         
ADC #$3B
         STA Ptr1_HI
         
CLC
         LDA #$60
         
ADC POKMSK
         STA Ptr2_LO
         LDA #$00
         
ADC #$3B
         STA Ptr2_HI
         
CLC
         LDA #$80
         
ADC POKMSK
         STA Ptr2_HI+
1
         LDA #$00
         
ADC #$3B
         STA TRAMSZ
         
CLC
         LDA #$A0
         
ADC POKMSK
         STA CMCMD
         LDA #$00
         
ADC #$3B
         STA WARMST
         
CLC
         LDA #$A0
         
ADC POKMSK
         STA BOOT
         LDA #$00
         
ADC #$3B
         STA DOSVEC
         LDA L009B
         
AND #$7F
         STA POKMSK
         ASL A
         ASL A
         
CLC
         
ADC POKMSK
         TAX
         LDY #$00
L611D:   LDA L628F,X
         STA (Ptr1_LO),Y
         LDA L62AD,X
         STA (Ptr2_LO),Y
         LDA L62CB,X
         STA (Ptr2_HI+
1),Y
         LDA L62E9,X
         STA (CMCMD),Y
         LDA L6307,X
         STA (BOOT),Y
         INX
         INY
         CPY #$05
         BNE L611D
         
INC L009B
         LDA L009B
         
AND #$7F
         
CMP #$06
         BEQ L6147
         RTS                   
; Return
L6147:   LDA #$FF
         STA L009B
         RTS

L614C:   
INC LFF02,X
         JSR L2221
         .
BYTE $FF,$FF
         BIT L2E2D
         .
BYTE $FF,$FF
         SEC
         
AND LFF3A,Y
         .
BYTE $FF,$44
         EOR BegaPic+
3
         .
BYTE $FF
L6162:   .
BYTE $FF,$23
         BIT ICBAHZ
         .
BYTE $FF,$FF,$2F
         BMI L619C
         .
BYTE $FF,$FF,$3B,$3C
         
AND LFFFF,X
         .
BYTE $47
         PHA
         EOR #$FF
L6176:   .
BYTE $FF
         
ROL ICPTHZ
         PLP
         .
BYTE $FF,$FF,$32,$33
         .
BYTE $34,$FF,$FF
         
ROL L403F,X
         .
BYTE $FF,$FF
         LSR A
         .
BYTE $4B
         
JMP LFFFF
         
AND #$2A
         .
BYTE $2B,$FF,$FF
         
AND LTEMP,X
         .
BYTE $37,$FF,$FF
         EOR (CRITIC,X)
         .
BYTE $43,$FF,$FF
         EOR L4F4E
         .
BYTE $FF
L619E:   .
BYTE $FF
         BVC L61F2
         .
BYTE $FF,$FF,$FF
         
CLI
         EOR LFFFF,Y
         .
BYTE $FF
         RTS
         
ADC (FPTR2+1,X)
         .
BYTE $FF,$FF
         
CLI
         EOR LFFFF,Y
         .
BYTE $FF
         RTS
         
ADC (FPTR2+1,X)
         .
BYTE $FF,$FF
         
CLI
         EOR LFFFF,Y
         .
BYTE $FF
         RTS
         
ADC (FPTR2+1,X)
         .
BYTE $FF,$FF
         
CLI
         EOR LFFFF,Y
         .
BYTE $FF
         RTS
         
ADC (FPTR2+1,X)
         .
BYTE $FF,$FF
         
CLI
         EOR LFFFF,Y
         .
BYTE $FF
         RTS
         
ADC (FPTR2+1,X)
         .
BYTE $FF,$FF
         BVC L6229
         .
BYTE $FF,$FF
         
BRK
L61DB:   .
BYTE $FF,$52,$53,$FF
         .
BYTE $FF,$FF,$5A,$5B
         .
BYTE $FF,$FF,$FF,$62
         .
BYTE $63,$FF,$FF,$FF
         .
BYTE $5A,$5B,$FF,$FF
         .
BYTE $FF,$62,$63
L61F2:   .
BYTE $FF,$FF,$FF,$5A
         .
BYTE $5B,$FF,$FF,$FF
         .
BYTE $62,$63,$FF,$FF
         .
BYTE $FF,$5A,$5B,$FF
         .
BYTE $FF,$FF,$62,$63
         .
BYTE $FF,$FF,$FF,$5A
         .
BYTE $5B,$FF,$FF,$FF
         .
BYTE $62,$63,$FF,$FF
         .
BYTE $FF,$52,$53,$FF
         .
BYTE $FF
L6217:   .
BYTE $FF,$54
         EOR FPTR2+
1,X
         .
BYTE $FF,$FF,$5C
         EOR LFFFF,X
         .
BYTE $FF,$64
         
ADC FPTR2+1
         .
BYTE $FF,$FF,$5C
         EOR LFFFF,X
         .
BYTE $FF,$64
         
ADC FPTR2+1
         .
BYTE $FF,$FF,$5C
         EOR LFFFF,X
         .
BYTE $FF,$64
         
ADC FPTR2+1
         .
BYTE $FF,$FF,$5C
         EOR LFFFF,X
         .
BYTE $FF,$64
         
ADC FPTR2+1
         .
BYTE $FF,$FF,$5C
         EOR LFFFF,X
         .
BYTE $FF,$64
         
ADC FPTR2+1
         .
BYTE $FF,$FF,$54
         EOR FPTR2+
1,X
         .
BYTE $FF
L6253:   .
BYTE $FF
         LSR Sprite3_Y,X
         .
BYTE $FF,$FF,$FF
         LSR LFF5F,X
         .
BYTE $FF,$FF
         
ROR MLTTMP+1
         .
BYTE $FF,$FF,$FF
         LSR LFF5F,X
         .
BYTE $FF,$FF
         
ROR MLTTMP+1
         .
BYTE $FF,$FF,$FF
         LSR LFF5F,X
         .
BYTE $FF,$FF
         
ROR MLTTMP+1
         .
BYTE $FF,$FF,$FF
         LSR LFF5F,X
         .
BYTE $FF,$FF
         
ROR MLTTMP+1
         .
BYTE $FF,$FF,$FF
         LSR LFF5F,X
         .
BYTE $FF,$FF
         
ROR MLTTMP+1
         .
BYTE $FF,$FF,$FF
         LSR Sprite3_Y,X
         .
BYTE $FF,$FF
L628F:   .
BYTE $FF
         PLA
         
ADC #$FF
         .
BYTE $FF,$FF
         PLA
         
ADC #$FF
         .
BYTE $FF,$FF,$72,$73
         .
BYTE $FF,$FF,$FF,$7C
         
ADC LFFFF,X
         .
BYTE $FF
         STX VVTP+
1
         .
BYTE $FF,$FF,$FF,$FF
         .
BYTE $FF,$FF,$FF
L62AD:   .
BYTE $FF
         
ROR A
         .
BYTE $6B,$FF,$FF,$FF
         
ROR A
         .
BYTE $6B,$FF,$FF,$FF
         .
BYTE $74
         
ADC FPTR2+1,X
         .
BYTE $FF,$FF
         
ROR LFF7F,X
         .
BYTE $FF,$FF
         DEY
         .
BYTE $89,$FF,$FF,$FF
         .
BYTE $FF,$FF,$FF,$FF
L62CB:   .
BYTE $FF
         
JMP (LFF6D)
         .
BYTE $FF,$FF
         
JMP (LFF6D)
         .
BYTE $FF,$FF
         
ROR DELTAC,X
         .
BYTE $FF,$FF,$FF,$80
         STA (FPTR2+
1,X)
         .
BYTE $FF,$FF
         TXA
         .
BYTE $8B,$FF,$FF,$FF
         .
BYTE $FF,$FF,$FF,$FF
L62E9:   .
BYTE $FF
         
ROR LFF6F
         .
BYTE $FF,$FF
         
ROR LFF6F
         .
BYTE $FF,$FF
         SEI
         
ADC LFFFF,Y
         .
BYTE $FF,$82,$83,$FF
         .
BYTE $FF,$FF
         STY LFF8D
         .
BYTE $FF,$FF,$FF,$FF
         .
BYTE $FF,$FF
L6307:   .
BYTE $FF
         BVS L637B
         .
BYTE $FF,$FF,$FF
         BVS L6380
         .
BYTE $FF,$FF,$FF,$7A
         .
BYTE $7B,$FF,$FF,$FF
         STY Lunas
         .
BYTE $FF,$FF,$FF
         DEY
         .
BYTE $8F,$FF,$FF,$FF
         .
BYTE $FF,$FF,$FF,$FF



;----------------------------------------------------
;         Unknown sprite series update (girders?)
;    Check all 5 lasers for collision
;----------------------------------------------------
L6325:   LDX #$05               ; Loop = 5 sprite to update
;----------------------------------------------------
;        Beginning of update loop (0-5;009C-00A1)
;----------------------------------------------------
L6327:   TXA                    ; Get loop value
         PHA                    ; Save loop to stack
         LDA L009C,X            ; Check girder status
         CMP #$FF               ; FF = Girder in use
         BNE L6332              ; skip ahead if there is an available girder
         JMP L6738              ; Jump ahead and decrement Loop
L6332:   LDA L009C,X
         BPL L6339
         
JMP L6652
L6339:   ASL A                 
; Multiply by 2
         BPL L633F
         
JMP L63A4
L633F:   STX POKMSK
;----------------------------------------------------
;              loop 0093-0096
;----------------------------------------------------
         LDY #$03
L6343:   LDA L0093,Y
         
CMP POKMSK
         BEQ L6350
         DEY
         BPL L6343
         
JMP L6738              ; Jump ahead and decrement Loop
L6350:   LDA L6741,Y
         STA APPMHI+
1
         LDA L009C,X
         
AND #$0C
         LSR A
         TAY
         LDA L009C,X
         
AND #$01
         ASL A
         ASL A
         ORA #$01
         STA SpritePic1,Y
         STA SpritePic2,Y
         LDA #$C8
         STA Sprite3_Y,Y
         LDA #$D8
         STA Sprite3a_Y,Y
         
CLC
         LDA BegaXPos1L
         
ADC APPMHI+1
         STA Sprite3_X,Y
L637B:   
CLC
         LDA BegaXPos1L
         
ADC APPMHI+1
L6380:   STA Sprite3a_X,Y
         LDA L009C,X
         
AND #$20
         BEQ L638C
         
JMP L65F7
L638C:   LDA L009C,X
         
AND #$10
         BEQ L6395
         
JMP L65D1
L6395:   LDA L67C9,X
         STA Sprite3_Char,Y
         LDA L67CF,X
         STA Sprite3a_Char,Y
         
JMP L6738              ; Jump ahead and decrement Loop
L63A4:   LDA L009B
         
AND #$F0
         BEQ L63AD
         
JMP L6738              ; Jump ahead and decrement Loop
L63AD:   LDA L009C,X
         
AND #$30
         BNE L63CA
         JSR L68E9
         CPY #$FF
         BNE L63BD
         
JMP L6738              ; Jump ahead and decrement Loop
L63BD:   TXA
         ASL A
         TAY
         LDA VVTP+
1,Y
         
CMP #$FF
         BEQ L63CA
         
JMP L6738              ; Jump ahead and decrement Loop
L63CA:   LDA L009C,X
         
AND #$20
         BEQ L63D3
         
JMP L643C
L63D3:   LDA Random             
; Get Random Number
         AND #$0F               ; Random number between 0-15
         STA L00A2
         LDA #$00
         STA L00A3
         LDA L00A2
         ASL A
         TAY
         LDA LBF42,Y
         STA Ptr1_LO
         LDA LBF43,Y
         STA Ptr1_HI
         LDY #$01
         LDA (Ptr1_LO),Y
         STA L00A4
         JSR L68E9
         TYA
         ASL A
         ASL A
         ORA L009C,X
         STA L009C,X
         TYA
         ASL A
         TAY
         LDA #$01
         STA SpritePic1,Y
         STA SpritePic2,Y
         LDA L67D5,X
         STA Sprite3_Char,Y
         LDA L67DB,X
         STA Sprite3a_Char,Y
         STY POKMSK
         LDY L00A2
;----------------------------------------------------
; Start sprite at top of screen in random X location
;----------------------------------------------------
         LDA Random             ; Get Random Number (between 48-79)
         AND #$1F               ; First pick a number between 0-31
         CLC                    ; Clear carry
         ADC #$30               ; Adjust number between 48-79
         LDY POKMSK             ; Which sprite are we updating?
         STA Sprite3_X,Y        ; Set random X position between 48-79
         STA Sprite3a_X,Y       ; Set random X position between 48-79
         LDA #$00               ; Start sprite at top of screen
         STA Sprite3_Y,Y        ; Set Y position = 0
         LDA #$10               ; Start second sprite just below first one
         STA Sprite3a_Y,Y       ; Set Y position = 10
         LDA #$60
         ORA L009C,X
         STA L009C,X
         LDA #$09               
; Sound = 9
         JSR L51CE              ; Play Sound
L643C:   LDA L009C,X
         
AND #$10
         BEQ L6445
         
JMP L652A
L6445:   LDA L00A2
         ASL A
         TAY
         LDA LBF42,Y
         STA Ptr1_LO
         LDA LBF43,Y
         STA Ptr1_HI
         LDY L00A3
         LDA (Ptr1_LO),Y
         TAY
         LDA LB100,Y
         BPL L646D
         LDA L009C,X
         
AND #$0C
         LSR A
         TAY
         LDA #$01
         STA SpritePic1,Y
         STA SpritePic2,Y
         BNE L647B
L646D:   LDA L009C,X
         
AND #$0C
         LSR A
         TAY
         LDA #$05
         STA SpritePic1,Y
         STA SpritePic2,Y
L647B:   STY POKMSK
         LDY L00A3
         LDA (Ptr1_LO),Y
         STA APPMHI+
1
         TAY
         
CLC
         LDA LB100,Y
         LDY POKMSK
         
ADC Sprite3_X,Y
         STA Sprite3_X,Y
         LDY APPMHI+
1
         
CLC
         LDA LB100,Y
         LDY POKMSK
         
ADC Sprite3a_X,Y
         STA Sprite3a_X,Y
         LDY APPMHI+
1
         
CLC
         LDA LB000,Y
         LDY POKMSK
         
ADC Sprite3_Y,Y
         STA Sprite3_Y,Y
         LDY APPMHI+
1
         
CLC
         LDA LB000,Y
         LDY POKMSK
         
ADC Sprite3a_Y,Y
         STA Sprite3a_Y,Y
         
DEC L00A4
         BNE L64C9
         
INC L00A3
         
INC L00A3
         LDY L00A3
         INY
         LDA (Ptr1_LO),Y
         STA L00A4
L64C9:   LDA L009C,X
         
AND #$0C
         LSR A
         TAY                   
; Get girder number
;----------------------------------------------------
;    Check JOE's X Coordinate for edge of screen
;----------------------------------------------------
         LDA Sprite3_X,Y        ; Get X position
         CMP #$04               ; Are we past far left of screen?
         BCC L6509              ; No, so skip ahead
         CMP #$EC               ; Are we past far right of screen?
         BCS L6509              ; No, so skip ahead
;----------------------------------------------------
;            Check if JOE was caught
;----------------------------------------------------
         LDA Sprite3_Y,Y        ; Check JOE Y Position
         CMP #$E0               ; Has JOE passed bottom of screen?
         BCS L6509              ; Yes, so skip ahead
         LDA Sprite3_X,Y        ; Get JOE X position
         SEC                    ; Set Carry
         SBC BegaXPos2R         ; Compare to Bega's X position
         CLC                    ; Clear carry
         ADC #$10               ; Add 16
         CMP #$20               ; Are we close enough to him?
         BCS L6506              ; No catch, so skip ahead
         LDA Sprite3_Y,Y        ; Get JOE Y position
         SEC                    ; Set Carry
         SBC FKDEF              ; Compare to Bega's Y position
         CLC                    ; Clear carry
         ADC #$10               ; Add 16
         CMP #$20               ; Are we close enough to him?
         BCS L6506              ; No catch, so skip ahead
;----------------------------------------------------
;              girder WAS HIT (or JOE was caught)
;----------------------------------------------------
         LDA #$70               ;
         ORA L009C,X            ;
         STA L009C,X            ;
         TXA                    ;
         ASL A                  ;
         TAX                    ;
         INC VVTP+1,X           ;
L6506:   JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
; Erase Girder once it falls off the bottom of the screen
;----------------------------------------------------
L6509:   LDA #$00
         STA SpritePic1,Y
         STA Sprite3_Char,Y
         STA Sprite3_X,Y
         STA Sprite3_Y,Y
         STA SpritePic2,Y
         STA Sprite3a_Char,Y
         STA Sprite3a_X,Y
         STA Sprite3a_Y,Y
         LDA #$40
         STA L009C,X
         
JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
;             
;----------------------------------------------------
L652A:   LDA L009C,X
         
AND #$03
         BNE L6558
         LDA #$02
         JSR L51CE             
; Play Sound
         LDA #$03
         ORA L009C,X
         STA L009C,X
         
AND #$0C
         LSR A
         TAY
         LDA #$01
         STA SpritePic1,Y
         LDA L68DD,X
         STA Sprite3_Char,Y
         LDA #$00
         STA SpritePic2,Y
;----------------------------------------------------
;                     Award Bonus
;----------------------------------------------------
         LDA L68E3,X            ; Get Bonus value
         JSR L53D7              ; Add Bonus to Score
         JMP L6738              ; Jump ahead and decrement Loop
L6558:   LDA SysTimer           ; Check time on System Timer
         AND #$1F
L655D:   BEQ L6562
         
JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
;             
;----------------------------------------------------
L6562:   LDA L009C,X
L6564:   
AND #$0C
         LSR A
         TAY
         
DEC L009C,X
         LDA L009C,X
         
AND #$03
         BEQ L6573
         
JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
;             
;----------------------------------------------------
L6573:   LDA #$00
         STA SpritePic1,Y
         STA Sprite3_Char,Y
         STA Sprite3_X,Y
         STA Sprite3_Y,Y
         STA SpritePic2,Y
         STA Sprite3a_Char,Y
         STA Sprite3a_X,Y
         STA Sprite3a_Y,Y
         LDX #$05
         LDA #$FF
L6591:   STA L009C,X
         DEX
         BPL L6591
         STA L0093
         STA L0094
         STA POKADR
         STA POKADR+
1
         LDY #$00
         STY POKMSK
L65A2:   LDA L009C,Y
         
CMP #$FF
         BNE L65C8
         TYA
         ASL A
         TAX
         LDA VVTP+
1,X
         
CMP #$FF
         BEQ L65C8
         JSR L6CEF
         TXA
         
AND #$01
         ASL A
         STA Ptr1_LO
         LDA POKMSK
         
AND #$03
         
INC POKMSK
         ASL A
         ASL A
         ORA Ptr1_LO
         STA L009C,Y
L65C8:   INY
         CPY #$06
         BNE L65A2
         PLA
         
JMP L6325
L65D1:   LDA MasterReg
         
AND #$F0
         BEQ L65EE
         LDA #$01
         STA SpritePic1,Y
         STA SpritePic2,Y
         LDA L67E1,X
         STA Sprite3_Char,Y
         LDA L67E7,X
         STA Sprite3a_Char,Y
         
JMP L6738              ; Jump ahead and decrement Loop
L65EE:   LDA #$0E
         
AND L009C,X
         STA L009C,X
         
JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
;             
;----------------------------------------------------
L65F7:   LDA L009C,X
         
AND #$30
         
CMP #$30
         BEQ L6602
         
JMP L6738              ; Jump ahead and decrement Loop

;----------------------------------------------------
; Check to see if it's time to update sprite's picture
;----------------------------------------------------
L6602:   LDA SysTimer           ; Check time on System Timer
         AND #$03
         BEQ L660C
         
JMP L6738              ; Jump ahead and decrement Loop
;----------------------------------------------------
;               Update Sprite Picture
;----------------------------------------------------
L660C:   LDA SeriesNumber,X
         ASL A
         TAX
;----------------------------------------------------
;              Sprite Data Series 1
;----------------------------------------------------
         LDA L6745,X            ; Get Sprite Data series pointer LO
         STA Ptr1_LO            ; Creat pointer to data series
         LDA L6746,X            ; Get Sprite Data series pointer HI
         STA Ptr1_HI            ; Creat pointer to data series
;----------------------------------------------------
;              Sprite Data Series 2
;----------------------------------------------------
         LDA L6761,X            ; Get Sprite Data series pointer LO
         STA Ptr2_LO            ; Creat pointer to data series
         LDA L6762,X            ; Get Sprite Data series pointer HI
         STA Ptr2_HI            ; Creat pointer to data series
;----------------------------------------------------
;            Check for end of series
;----------------------------------------------------
         LDA Ptr1_LO            ; Check for end of series
         AND Ptr1_HI            ; End of series marker is $FFFF
         CMP #$FF               ; Is this the end of the series?
         BEQ L6647              ; Yes, so skip ahead
;----------------------------------------------------
;           Go to next picture in series
;----------------------------------------------------
         LDX POKMSK             ; Which series are we using?
         INC SeriesNumber,X     ; Find that series and go to next picture
         TYA                    ;
         TAX                    ;
         LDY POKMSK             ; Y = Picture number within series
         LDA (Ptr1_LO),Y        ; Get picture
         STA Sprite3_Char,X     ; Update sprite with picture
         LDA (Ptr2_LO),Y        ; Get picture
         STA Sprite3a_Char,X    ; Update sprite with picture
         LDA #$01
         STA SpritePic1,X
         STA SpritePic2,X
         
JMP L6738              ; Jump ahead and decrement Loop
L6647:   LDX POKMSK
         LDA #$0E
         
AND L009C,X
         STA L009C,X
         
JMP L6738              ; Jump ahead and decrement Loop
L6652:   LDA L009C,X
         
AND #$C0
         
CMP #$C0
         BNE L665D
         
JMP L6738              ; Jump ahead and decrement Loop
L665D:   LDA SeriesNumber,X
         BNE L6674
         LDA #$04               
; Sound = #4
         JSR L51CE              ; Play Sound
         TXA
         TAY
         ASL A
         TAX
         
DEC VVTP+1,X
         TYA
         TAX
         LDA #$11
         STA SeriesNumber,X
L6674:   LDA SysTimer           
; Check time on System Timer
         AND #$03
         BEQ L667E
         
JMP L6738              ; Jump ahead and decrement Loop
L667E:   DEC SeriesNumber,X
         
AND #$0F
         BEQ L6688
         
JMP L6738              ; Jump ahead and decrement Loop
L6688:   LDA #$02
         ORA SeriesNumber,X
         STA SeriesNumber,X
         
AND #$F0
         LSR A
         LSR A
         LSR A
         TAY
         LDA L677B,Y
         STA Ptr1_LO
         LDA L677C,Y
         STA Ptr1_HI
         LDA L6795,Y
         STA Ptr2_LO
         LDA L6796,Y
         STA Ptr2_HI
         LDA L67AF,Y
         STA Ptr2_HI+
1
         LDA L67B0,Y
         STA TRAMSZ
         TXA
         TAY
         LDA L009C,X
         
AND #$0C
         LSR A
         TAX
         LDA (Ptr1_LO),Y
         STA Sprite3_Char,X
         LDA (Ptr2_LO),Y
         STA Sprite3a_Char,X
         LDA (Ptr2_HI+
1),Y
         STA SpritePic1,X
         STA SpritePic2,X
         
INC Sprite3_Y,X
         
INC Sprite3a_Y,X
         
CLC
         LDA SeriesNumber,Y
         
ADC #$10
         STA SeriesNumber,Y
         
AND #$F0
         
CMP #$D0
         BEQ L66E0
         
JMP L6738              ; Jump ahead and decrement Loop
L66E0:   LDA #$FF
         STA L009C,Y
         LDA #$00
         STA SpritePic1,X
         STA SpritePic2,X
         STA Sprite3_Char,X
         STA Sprite3a_Char,X
         STA Sprite3_X,X
         STA Sprite3a_X,X
         STA Sprite3_Y,X
         STA Sprite3a_Y,X
         TYA
         TAX
         LDY #$00
         CPX L0093
         BEQ L670A
         INY
         CPX L0094
         BEQ L670A
         INY
         CPX POKADR
         BEQ L670A
         INY
L670A:   CPY #$02
         BCC L6716
         LDA #$FF
         STA L0093,Y
         
JMP L6738              ; Jump ahead and decrement Loop
L6716:   CPY #$00
         BNE L6729
         LDA POKADR
         
CMP #$FF
         BEQ L6735
         STA L0093
         LDA #$FF
         STA POKADR             
; get luna?
         JMP L6738              ; Jump ahead and decrement Loop
L6729:   LDA POKADR+1
         
CMP #$FF
         BEQ L6735
         STA L0094
         LDA #$FF
         STA POKADR+
1
L6735:   
JMP L6738              ; Jump ahead and decrement Loop
;----------------------------------------------------
;                 Decrement Loop
;----------------------------------------------------
L6738:   PLA                    ; Retreive Loop from stack
         TAX                    ; X = Loop (0-5)
         DEX                    ; Decrement loop
         BMI L6740              ; Loop is finished so leave
         JMP L6327              ; Go back until loop is complete
L6740:   RTS                    ; Return



;----------------------------------------------------
;                   unknown data
;----------------------------------------------------
L6741:   .BYTE $F0,$20,$E0,$30

;----------------------------------------------------
;           unknown Sprite Series Pointers
;----------------------------------------------------
L6745:   .WORD $67ED,$67F9,$6805,$67F9,$6805,$67F9,$6805,$67F9
         .
WORD $6805,$67F9,$6805,$67F9,$67C9

         .
WORD $FFFF   ; End Marker

L6761:   .
WORD $67F3,$67FF,$680B,$67FF,$680B,$67FF,$680B,$67FF
         .
WORD $680B,$67FF,$680B,$67FF,$67CF

L677B:   .
WORD $67C9,$6811,$681D,$6829,$6835,$6841,$684D,$6859
         .
WORD $6865,$6871,$687D,$6889,$6895

L6795:   .
WORD $67CF,$6817,$6823,$682F,$683B,$6847,$6853,$685F
         .
WORD $686B,$6877,$6883,$688F,$689B

L67AF:   .
WORD $68A1,$68A1,$68A6,$68AB,$68B0,$68B5,$68BA,$68BF
         .
WORD $68C4,$68C9,$68CE,$68D3,$68D8

;----------------------------------------------------
;             Sprite picture series
;----------------------------------------------------
L67C9:   .BYTE $82,$8E,$A6,$BE,$9A,$B2
L67CF:   .
BYTE $83,$8F,$A7,$BF,$9B,$B3
L67D5:   .
BYTE $80,$8C,$A4,$BC,$98,$B0
L67DB:   .
BYTE $81,$8D,$A5,$BD,$99,$B1
L67E1:   .
BYTE $84,$90,$A8,$C0,$9C,$B4
L67E7:   .
BYTE $85,$91,$A9,$C1,$9D,$B5
L67ED:   .
BYTE $8A,$96,$AE,$C7,$A2,$BA
L67F3:   .
BYTE $8B,$97,$AF,$C8,$A3,$BB
L67F9:   .
BYTE $7C,$7C,$7C,$7C,$7C,$7C
L67FF:   .
BYTE $7D,$7D,$7D,$7D,$7D,$7D
L6805:   .
BYTE $7E,$7E,$7E,$7E,$7E,$7E
L680B:   .
BYTE $7F,$7F,$7F,$7F,$7F,$7F
L6811:   .
BYTE $83,$8F,$A7,$BF,$9B,$B3
L6817:   .
BYTE $82,$8E,$A6,$BE,$9A,$B2
L681D:   .
BYTE $83,$8F,$A7,$BF,$9B,$B3
L6823:   .
BYTE $82,$8E,$A6,$BE,$9A,$B2
L6829:   .
BYTE $83,$8F,$A7,$BF,$9B,$B3
L682F:   .
BYTE $82,$8E,$A6,$BE,$9A,$B2
L6835:   .
BYTE $83,$8F,$A7,$BF,$9B,$B3
L683B:   .
BYTE $82,$8E,$A6,$BE,$9A,$B2
L6841:   .
BYTE $78,$78,$78,$78,$78,$78
L6847:   .
BYTE $79,$79,$79,$79,$79,$79
L684D:   .
BYTE $78,$78,$78,$78,$78,$78
L6853:   .
BYTE $79,$79,$79,$79,$79,$79
L6859:   .
BYTE $78,$78,$78,$78,$78,$78
L685F:   .
BYTE $79,$79,$79,$79,$79,$79
L6865:   .
BYTE $78,$78,$78,$78,$78,$78
L686B:   .
BYTE $79,$79,$79,$79,$79,$79
L6871:   .
BYTE $7A,$7A,$7A,$7A,$7A,$7A
L6877:   .
BYTE $7B,$7B,$7B,$7B,$7B,$7B
L687D:   .
BYTE $7A,$7A,$7A,$7A,$7A,$7A
L6883:   .
BYTE $7B,$7B,$7B,$7B,$7B,$7B
L6889:   .
BYTE $7A,$7A,$7A,$7A,$7A,$7A
L688F:   .
BYTE $7B,$7B,$7B,$7B,$7B,$7B
L6895:   .
BYTE $7A,$7A,$7A,$7A,$7A,$7A
L689B:   .
BYTE $7B,$7B,$7B,$7B,$7B,$7B
L68A1:   .
BYTE $03,$03,$03,$03,$03,$07
L68A7:   .
BYTE $07,$07,$07,$07,$03,$03
L68AD:   .
BYTE $03,$03,$03,$07,$07,$07
L68B3:   .
BYTE $07,$07,$01,$01,$01,$01
L68B9:   .
BYTE $01,$05,$05,$05,$05,$05
L68BF:   .
BYTE $01,$01,$01,$01,$01,$05
L68C5:   .
BYTE $05,$05,$05,$05,$01,$01
L68CB:   .
BYTE $01,$01,$01,$05,$05,$05
L68D1:   .
BYTE $05,$05,$01,$01,$01,$01
L68D7:   .
BYTE $01,$05,$05,$05,$05,$05
L68DD:   .
BYTE $24,$24,$25,$25,$27,$27
L68E3:   .
BYTE $04,$04,$05,$05,$06,$06



;----------------------------------------------------
;                     unknown
;----------------------------------------------------
L68E9:   LDY #$03
         STY POKMSK
L68ED:   LDY #$05
L68EF:   LDA POKMSK
         ASL A
         ASL A
         STA APPMHI+
1
         LDA L009C,Y
         
CMP #$FF
         BEQ L6902
         
AND #$0C
         
CMP APPMHI+1
         BEQ L6908
L6902:   DEY
         BPL L68EF
         LDY POKMSK
         RTS
L6908:   
DEC POKMSK
         BPL L68ED
         LDY #$FF
         RTS




;----------------------------------------------------
;          Shot fired (called from main loop)
;----------------------------------------------------
L690F:   LDA L009C              ;
         AND #$F0               ;
         BEQ L6917              ;
         BNE L697D              ;
L6917:   LDA MasterReg          ;
         AND #$F0
         BEQ L691F
         BNE L697D
L691F:   LDA GameStatus         
; Check Game Status
         BNE L692D
         LDA SysTimer+
1         
         
AND #$07
         BNE L6936
         BEQ L6957
L692D:   LDA L1000             
; Get Joystick inputs
         EOR #$FF               ; Invert all bits
         AND #$20               ; Check Barrier button (S2)
         BNE L6957
L6936:   LDA SysTimer           
; Check time on System Timer
         AND #$20
         BNE L697D
         LDX #$80
         STX L38B9
         INX
         STX L38BA
         INX
         STX L38BB
         INX
         STX L38BC
         INX
         STX L38BD
         INX
         STX L38BE
         RTS
L6957:   LDA #$07               
; Sound = #7
         JSR L51CE              ; Play Sound
         LDA #$30
         ORA MasterReg
         STA MasterReg
         LDA #$00               
; Start at first sprite picture
         STA BarrierPic         ; Reset the barrier picture sequence for Bega
         LDX #$06
L6969:   LDA L009B,X
         
AND #$F0
         BNE L697A
         LDA #$30
         ORA L009B,X
         STA L009B,X
         LDA #$00
         STA HATABS+
15,X
L697A:   DEX
         BPL L6969
L697D:   LDA #$00
         STA L38B9
         STA L38BA
         STA L38BB
         STA L38BC
         STA L38BD
         STA L38BE
         RTS                   
; Return




;----------------------------------------------------
;                   Level Setup (kiwi)
;----------------------------------------------------
L6992:   LDA #$00               ;
         STA VVBLKD             ;
         LDA CDTMV3             ; Have we completed level?
         BEQ L699F              ; Yes so go to next level
         JMP L69FE              ;
L699F:   INC Level              ; Next level
         JSR L719E              ; Screen Transition, Fill from outside in
;----------------------------------------------------
;           Play introduction video for level
;----------------------------------------------------
L69A5:   LDA Level              ; Get level
         ASL A                  ; Multiply by 2
         TAX                    ; X = index into address table
         LDA LB3EA,X            ; Get data address (LOW)
         STA Ptr1_LO            ; Save address in pointer
         LDA LB3EB,X            ; Get data address (HIGH)
         STA Ptr1_HI            ; Save address in pointer + 1
         LDY VVBLKD             ; Get byte index (0-2)
         LDA (Ptr1_LO),Y        ; Get Video Sequence byte
;----------------------------------------------------
;         Check for $FE and $FF in video pointer
;----------------------------------------------------         
         CMP #$FE               ; Are we at the next level?
         BEQ L6A01              ; Yes jump ahead for data address 2
         CMP #$FF               ; Is there a video sequence for this level?
         BNE L69C4              ; Yes, so skip ahead and play sequence
         JMP L6C1C              ; No video sequence so go do default
L69C4:   JSR L54A7              ; Play LaserDisc video sequence
L69C7:   LDA SearchStatus       ; Check LDP search status
         CMP #$01
         BEQ L69DA
         
CMP #$02
         BEQ L69DA
         LDX #$01
         JSR L4BD2             
; Run Programmable Delay
         JMP L69C7
L69DA:   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
L69E3:   LDA SearchStatus       ; Check LDP search status
         CMP #$02
         BEQ L69F2
         LDX #$01               
; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
         JMP L69E3
L69F2:   JSR L719E             
; Screen Transition, Fill from outside in
         LDA CDTMA1+1
         BNE L69FE
         LDA #$01    
; Video Sequence = Intro? (Frame 5130)
         BNE L6A24 ; Go play video sequence
L69FE:   JSR L719E              ; Screen Transition, Fill from outside in
;----------------------------------------------------
;                Get data address 2
;----------------------------------------------------
L6A01:   LDA #$00               ;
         STA CDTMV3             ;
         LDA Level              ; Get level
         ASL A                  ; Multiply by 2
         TAX                    ; X = index into address table
         LDA LB4DF,X            ; Get data address (LOW)
         STA Ptr1_LO            ; Save address in pointer
         LDA LB4E0,X            ; Get data address (HIGH)
         STA Ptr1_HI            ; Save address in pointer + 1
         LDY VVBLKD             ; Get byte index (0-2)
         LDA (Ptr1_LO),Y        ; Get data byte
         CMP #$FE               ; Have we reached a level warp?
         BNE L6A24              ; No, so play this sequence
         INC Level              ; Go to next level
         JMP L69A5              ; Jump back and load address 3
L6A24:   JSR L54A7              ; Play LaserDisc video sequence
L6A27:   LDA SearchStatus       ; Check LDP search status
         CMP #$01
         BEQ L6A3A
         
CMP #$02
         BEQ L6A3A
         LDX #$01               
; Delay Count = 1
         JSR L4BD2              ; Run programmable Delay
         JMP L6A27
L6A3A:   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
         LDX #$06
         LDA #$FF
L6A47:   STA L009B,X
         DEX
         BPL L6A47
         LDY #$40
         LDX Level
         CPX #$0C
         BNE L6A5B
         LDA Lunas
         BPL L6A5B
         STY L009B
L6A5B:   LDA #$00
         STA L04BD
         LDX #$05
L6A62:   TXA
         ASL A
         TAY
         LDA VVTP+
1,Y
         BMI L6A77
         
INC L04BD
         LDA L04BD
         
CMP #$02
         BNE L6A77
         
JMP L6ACD
L6A77:   DEX
         BPL L6A62
;----------------------------------------------------
;         Assign Processes based on Level
;----------------------------------------------------
         LDY #$40               ; Y = Process Start Code
         LDX Level              ; Get Level
         BNE L6A85              ; Past Level 0, so skip ahead
;----------------------------------------------------
;                 Level 0 Process
;----------------------------------------------------
         LDA #$40               ; A = Process Start Code
         STA L009B              ; Start Process9B
;----------------------------------------------------
;                 Level 1 Process
;----------------------------------------------------
L6A85:   CPX #$01
         BNE L6A8F
         LDA VVTP+
1
         BPL L6A8F
         STY L009C             
; Start Process9C
;----------------------------------------------------
;                 Level 13 Process
;----------------------------------------------------
L6A8F:   CPX #$0D
         BNE L6A99
         LDA VVTP+
1
         BPL L6A99
         STY L009C             
; Start Process9C
;----------------------------------------------------
;                 Level 4 Process
;----------------------------------------------------
L6A99:   CPX #$04
         BNE L6AA3
         LDA STMCUR_swap
         BPL L6AA3
         STY L009D             
; Start Process9D
;----------------------------------------------------
;                 Level 14 Process
;----------------------------------------------------
L6AA3:   CPX #$0E
         BNE L6AAF
         LDA STMCUR_swap
         BPL L6AAF
         STY L009D             
; Start Process9D
         BNE L6AAF
;----------------------------------------------------
;                 Level 5 Process
;----------------------------------------------------
L6AAF:   CPX #$05
         BNE L6AB9
         LDA STARP+
1
         BPL L6AB9
         STY L009F             
; Start Process9F
;----------------------------------------------------
;                 Level 6 Process
;----------------------------------------------------
L6AB9:   CPX #$06
         BNE L6AC3
         LDA STARP+
1
         BPL L6AC3
         STY L009F             
; Start Process9F
;----------------------------------------------------
;                Level 9 Process
;----------------------------------------------------
L6AC3:   CPX #$09
         BNE L6ACD
         LDA RUNSTK+
1
         BPL L6ACD
         STY L00A0             
; Start ProcessA0
;----------------------------------------------------
;               
;----------------------------------------------------
L6ACD:   LDX #$FF               ; X = Cancel Process Code (FF)
         STX L0093              ; Cancel Process93
         STX L0094              ; Cancel Process94
         STX L0095              ; Cancel Process95
         STX L0096              ; Cancel Process96
         LDY #$00
         STY POKMSK
L6ADB:   LDA L009C,Y           
; L009C-L00A0
         CMP #$FF
         BNE L6B01
         TYA
         ASL A
         TAX
         LDA VVTP+
1,X
         
CMP #$FF
         BEQ L6B01
         JSR L6CEF
         TXA
         
AND #$01
         ASL A
         STA Ptr1_LO
         LDA POKMSK
         
AND #$03
         
INC POKMSK
         ASL A
         ASL A
         ORA Ptr1_LO
         STA L009C,Y
L6B01:   INY
         CPY #$06
         BNE L6ADB
         JSR L5535             
; Update Scoring Overlay
;----------------------------------------------------
;             Erase Bank1 Sprites (7 sprites)
;----------------------------------------------------
         LDX #$1B               ; Loop = 28 (4 x 7 sprites)
         LDA #$00               ; Clear with $00
L6B0D:   STA Sprite1_Prop,X     ; Erase sprite properties
         STA Sprite1_Char,X     ; Erase sprite character
         STA Sprite1_Y,X        ; Erase sprite Y coordinate
         STA Sprite1_X,X        ; Erase sprite X coordinate
         DEX                    ; Go to next sprite
         BPL L6B0D              ; Loop until all 7 sprites erased
;----------------------------------------------------
;             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
         LDY CDTMA1             ; Y = Routine number
         LDA L6CD7,Y            ; Get Sound Code
         JSR L51CE              ; Go play sound
         LDA CDTMA1             ; Get routine number
         JSR L720B              ; Setup Color Palette for routine
;----------------------------------------------------
;               
;----------------------------------------------------
         LDX #$0D               ;
L6B4C:   LDA #$00               ;
         STA L041C,X            ;

NEXT PAGE

 

HOME  

  ROMHACK 2009