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)