Notes:Bomb Jack (Arcade)
This page contains notes for the game Bomb Jack (Arcade).
Bonus Life code:
#BONUS LIVES (SCORE) SUBROUTINE 5A07: C9 ret ;This routine has been dummied out. Change to push af (E5). 5A08: C5 push bc ;Push BC. 5A09: D5 push de ;Push DE. !CHECK BONUS LIFE TEMP VAR 5A0A: 3A AE 81 ld a,($81AE) ;Set A to Bonus Life Temp Var. 5A0D: FE FF cp $FF ;Check if Temp Var is set to FF. 5A0F: CA E3 5A jp z,$5AE3 ;If true, jump out. No more bonus lives this game. !CHECK DIP SWITCH SETTINGS 5A12: 3A 14 80 ld a,($8014) ;Set A to Dip Switch 2 settings. 5A15: E6 07 and $07 ;AND with 07 - Get the Extra Life settings. 5A17: FE 00 cp $00 ;Check if it's set to "None" 5A19: 20 03 jr nz,$5A1E ;If not, jump. 5A1B: C3 E3 5A jp $5AE3 ;Jump out of subroutine - no extra lives. 5A1E: FE 01 cp $01 ;Is the Bonus Life setting "Every 100k?" 5A20: 20 05 jr nz,$5A27 ;If it's not, jump to next check. 5A22: 06 0A ld b,$0A ;Set Bonus Life Value No.1 to 0A (100k). 5A24: C3 59 5A jp $5A59 ;Jump to "Bonus Life - Variable" point. 5A27: FE 02 cp $02 ;Is the bonus life setting "Every 30k?" 5A29: 20 05 jr nz,$5A30 ;If it's not, jump to next check. 5A2B: 06 03 ld b,$03 ;Set Bonus Life Value No.1 to 03 (30k). 5A2D: C3 59 5A jp $5A59 ;Jump to "Bonus Life - Variable" point. 5A30: FE 03 cp $03 ;Is the bonus life setting "50k only?" 5A32: 20 05 jr nz,$5A39 ;If it's not, jump to next check. 5A34: 06 05 ld b,$05 ;Set Bonus Life Value No.1 to 05 (50k). 5A36: C3 69 5A jp $5A69 ;Jump to "Bonus Life - One Only" point. 5A39: FE 04 cp $04 ;Is the bonus life setting "100k only?" 5A3B: 20 05 jr nz,$5A42 ;If it's not, jump to next check. 5A3D: 06 0A ld b,$0A ;Set Bonus Life Value No.1 to 0A (100k). 5A3F: C3 69 5A jp $5A69 ;Jump to "Bonus Life - One Only" point. 5A42: FE 05 cp $05 ;Is the bonus life setting "50k and 100k?" 5A44: 20 07 jr nz,$5A4D ;If it's not, jump to next check. 5A46: 06 05 ld b,$05 ;Set Bonus Life Value No.1 to 05 (50k). 5A48: 0E 0A ld c,$0A ;Set Bonus Life Value No.2 to 0A (100k). 5A4A: C3 7A 5A jp $5A7A ;Jump to "Bonus Life - Two Only" point. 5A4D: FE 06 cp $06 ;Is the bonus life setting "100k and 300k?" 5A4F: C2 9F 5A jp nz,$5A9F ;If it's not, jump to "Bonus Life - 50k, 100k, 300k" point. 5A52: 06 0A ld b,$0A ;Set Bonus Life Value No.1 to 0A (100k). 5A54: 0E 1E ld c,$1E ;Set Bonus Life Value No.2 to 1E (300k). 5A56: C3 7A 5A jp $5A7A ;Jump to "Bonus Life - Two Only" point. !BONUS LIFE - VARIABLE 5A59: 16 00 ld d,$00 ;Set D to 00. 5A5B: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5A5E: B8 cp b ;Check is player has reached the requisite number of points. 5A5F: DA D4 5A jp c,$5AD4 ;If so, jump to "Bonus Life Incrementing" point. 5A62: 14 inc d ;Increment D. 5A63: 90 sub b ;Subtract 1 from B. 5A64: 32 AD 81 ld ($81AD),a ;Set Bonus Life Counter to A. 5A67: 18 F2 jr $5A5B ;Jump back and check again. !BONUS LIFE - ONE ONLY 5A69: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5A6C: B8 cp b ;Check if player has reached the Bonus Life value. 5A6D: DA E3 5A jp c,$5AE3 ;If not, branch out. 5A70: 16 01 ld d,$01 ;Set D to 01. 5A72: 3E FF ld a,$FF ;Set A to FF. 5A74: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to FF. 5A77: C3 D4 5A jp $5AD4 ;Jump to "Bonus Life Incrementing" point. !BONUS LIFE - TWO ONLY 5A7A: 16 00 ld d,$00 ;Set D to 00. 5A7C: 3A AE 81 ld a,($81AE) ;Set A to Bonus Life Temp Var. 5A7F: FE 01 cp $01 ;Check if the player has recieved an extra life for the first Bonus Life value. 5A81: 28 0D jr z,$5A90 ;If true, don't bother checking it again. 5A83: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5A86: B8 cp b ;Check if player has reached the first Bonus Life value. 5A87: DA E3 5A jp c,$5AE3 ;If not, branch out. 5A8A: 14 inc d ;Increment D. 5A8B: 3E 01 ld a,$01 ;Set A to 01. 5A8D: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to 01. 5A90: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5A93: B9 cp c ;Check if player has reached the second Bonus Life value. 5A94: 38 3E jr c,$5AD4 ;If not, jump to "Bonus Life Incrementing" point. 5A96: 14 inc d ;Increment D. 5A97: 3E FF ld a,$FF ;Set A to FF. 5A99: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to FF. 5A9C: C3 D4 5A jp $5AD4 ;Jump to Bonus Life !BONUS LIFE - 50k, 100k, 300k 5A9F: 16 00 ld d,$00 ;Set D to 00. 5AA1: 3A AE 81 ld a,($81AE) ;Set A to Bonus Live Temp Var. 5AA4: FE 01 cp $01 ;Check if the player has recieved an extra life for the first Bonus Life value. 5AA6: 28 12 jr z,$5ABA ;If true, don't check it again. 5AA8: FE 02 cp $02 ;Check if the player has recieved an extra life for the second Bonus Life value. 5AAA: 28 1B jr z,$5AC7 ;If true, don't check it again. 5AAC: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5AAF: FE 05 cp $05 ;Check if player has reached 50k points. 5AB1: DA E3 5A jp c,$5AE3 ;If not, branch out. 5AB4: 14 inc d ;Increment D. 5AB5: 3E 01 ld a,$01 ;Set A to 01. 5AB7: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to 01. 5ABA: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5ABD: FE 0A cp $0A ;Check if player has reached 100k points. 5ABF: 38 13 jr c,$5AD4 ;If not, jump to "Bonus Life Incrementing" point. 5AC1: 14 inc d ;Increment D. 5AC2: 3E 02 ld a,$02 ;Set A to 02. 5AC4: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to 02. 5AC7: 3A AD 81 ld a,($81AD) ;Set A to Bonus Life Counter. 5ACA: FE 1E cp $1E ;Check if player has reached 300k points. 5ACC: 38 06 jr c,$5AD4 ;If not, jump to "Bonus Life Incrementing" point. 5ACE: 14 inc d ;Increment D. 5ACF: 3E FF ld a,$FF ;Set A to FF. 5AD1: 32 AE 81 ld ($81AE),a ;Set Bonus Life Temp Var to FF. !BONUS LIFE INCREMENTING 5AD4: 7A ld a,d ;Set A to D. 5AD5: FE 00 cp $00 ;Check if player has recieved any bonus lives. 5AD7: 28 0A jr z,$5AE3 ;If not, branch out. 5AD9: 3A 9B 81 ld a,($819B) ;Set number of lives to A. 5ADC: 82 add a,d ;Add D to A. 5ADD: 32 9B 81 ld ($819B),a ;Give the player the appropriate number of bonus lives. 5AE0: CD F3 4F call $4FF3 ;Call (HUD update?) subroutine. 5AE3: D1 pop de ;Pop DE. 5AE4: C1 pop bc ;Pop BC. 5AE5: F1 pop af ;Pop AF. 5AE6: C9 ret ;End of subroutine.
Schematics
The schematics for the game are pre-final, as it specifies a 12.096MHz crystal for the video and audio clock (finalized boards use 12MHz), and it specifies double the ROM space for the audio CPU and the background graphics, implying that more licensed music and locations were planned for the game but cut out likely due to limitations and rights issues. The audio CPU in the final game only ever uses half of the RAM that it is allocated.
Sprite Format
The game sets bits 4 and 5 in the sprite table for each object that is either respectively a bonus or a large object. This is never used in the final hardware design nor the schematics and may be a leftover from the game possibly being prototyped on Senjyo hardware, which is very similar in how it handles graphics. In Senjyo, these bits are used to indicate layer priority for which each sprite is drawn.