A multicart which contains Hummer Team's all-time "classics", including Somari and Titenic.
Unused Audio#
The menu uses the same version of Hummer's sound engine as Donkey Kong Country 4, and as a result some of its music and sound effects are still here, albeit completely unused. The menu's music can be replaced with them by using FCEUX cheat 070D:??, where "??" is 01-1D for sound effects and 21-2F for music.
Unused Text#
Street Fighter IV Leftovers#
At 0xC0B0, 0x1C0B0, 0x6C0B0, and 0x7C0B0 is the credits from Hummer's Street Fighter IV, partially overwritten:
APHIC
MONTIGO K
LIGHT LIN
MUSIC COMPOSE
RICHARD C
B B KING
SOUND DESING
JAMS LUE
DIRECTOR
ICHAEL K
SPECIAL THANK
MANTAL SAN
THE END
Compiler Output#
At 0x14EBD and 0x74EBD are what seems to be output from the compiler. It seems to be the same output, though.
Lines Assembled : 2947 Assembly Errors : 0
------------------------------------------------
Input Filename : main.asm
Output Filename : main.obj
At 0x319BD there's a different compiler output, likely for the game Rings, a Panda Adventure hack split into multiple "games" on this multicart:
Lines Assembled : 3819 Assembly Errors : 0
------------------------------------------------
Input Filename : rigame.ASM
Output Filename : rigame.obj
Source Code#
|
|
To do: |
Around 0xC88A in the ROM starts a huge amount of source code for the menu and some of the games.
There is some interesting stuff we can find, such as internal game names found in SwitchGame.
LDA ?NextNoTbl1,X
STA ItemNo
JMP SetSprCursor
?NextNoTbl1:
DB †“dQ 00� ,$05,$03,$04
CursorDown:
LDX ItemNo
LDA PageNo
CMP #$03
BCC ?1
BEQ ?2
ÿÿDA ?NextNoTbl,X
STA ItemNo
JMP SetSprCursor
?NextNoTbl:
DB $01,$02,$03,$04,$05,$06,$07,$00,$09,$0A,$0B,$0C,$0D,$0ÿÿ$0 t•dQ LDA ?NextNoTbl0,X
STA ItemNo
JMP SetSprCursor
?NextNoTbl0:
DB $01,$02,$03,$00,$05,$06,$07,$0±•dQ
� Ü—dQDA ?NextNoTbl1,X
STA ItemNo
JMP SetSprCursor
?NextNoTbl1:
DB $01,$02,$00,$04,$05,$03
CursorLeft:
�˜dQ � ItemNo
LDA PageNo
CMP #$03
BEQ ?2
BCS ?1
LDA NextNoTbl00,X
STA ÿÿte
JMP SetSprCursor
?1 LDA NextNoTbl0,X
STA ItemNo
JMP SetSprCursor
?2 LDA NextNoTbl01,Xÿÿ STA ItemNo
JMP SetSprCursor
EntryGame ;2
LDA ItemNo
ASL A
STA a0
ASL ÿÿ A DšdQ CLC
ADC a0
STA a0
LDA PageNo
ASL A
TAY
LDA ?SwitchGameTbl,Y
šdQ � ¬œdQ ADC a0
STA r0
LDA ?SwitchGameTbl+1,Y
ADC #$00
STA r0+1
LDY éœdQ
� �ŸdQLDA (r0),Y
STA rg6000Buf,Y
INY
CPY #$06
BCC ?1
LDX #$00
?2 LDQŸdQ Ne� |¡dQint,x
STA $0300,X
INX
CPX #EndEntryPoint-NewEntryPoint
BCC ?2
JMP $0300
¹¡dQ hG� ä£dQ DW ?SwitchGame0C,?SwitchGame0B,?SwitchGame0A,?SwitchGame0D,?SwitchGame00
?SwitchGame0C
DB $00,$20,$1F,$F0,$0^¤dQ ;$� L¦dQIC)
DB $00,$10,$0E,$F0,$00,$00 ;$01(PINK of RINGS)
DB $80,$40,$0E,$F0,$00,$00 ;$02(WAR)
DB $00‰¦dQ 0E� ,$00,$02 ;$03(Duck0 of RINGS)
DB $00,$10,$0E,$F0,$01,$02 ;$04(Duck1 of RINGS)
DB $00,$10,$0E,$F0,$01,$00 ;$05(PINK1 ÿÿ R )
DB $00,$10,$0E,$F0,$02,$00 ;$06(PINK2 of RINGS)
DB $00,$10,$0E,$F0,$03,$00 ;$07(PINK3 of RINGS)
?SwitchGame0B
ÿÿ $00,$60,$3F,$E0,$00,$00 ;$00(SONIC)
DB $00,$10,$0E,$F0,$00,$00 ;$01(PINK of RINGS)
DB $80,$40,$0E,$F0,$00,$00 ÿÿ02 )
DB $00,$10,$0E,$F0,$00,$02 ;$03(Duck0 of RINGS)
DB $00,$10,$0E,$F0,$01,$02 ;$04(Duck1 of RINGS)
DB $ÿÿ,$ ´¨dQF0,$01,$00 ;$05(PINK1 of RINGS)
DB $00,$10,$0E,$F0,$02,$00 ;$06(PINK2 of RINGS)
DB $00,$10,$0E,$F0,$03,$00 ;.©dQ NK� �«dQGS)
?SwitchGame0A
DB $00,$50,$2F,$F0,$00,$00 ;$00(SF4)
DB $00,$10,$0E,$F0,$00,$00 ;$01(PINK of RINGS)
Y«dQ � „dQ$40,$0E,$F0,$00,$00 ;$02(WAR)
DB $00,$10,$0E,$F0,$00,$02 ;$03(Duck0 of RINGS)
DB $00,$10,$0E,$F0,$01,$02 ;$0ÁdQ 1 � ì¯dQ)
DB $00,$10,$0E,$F0,$01,$00 ;$05(PINK1 of RINGS)
DB $00,$10,$0E,$F0,$02,$00 ;$06(PINK2 of RINGS)
D)°dQ $� T²dQ0E,$F0,$03,$00 ;$07(PINK3 of RINGS)
?SwitchGame00
;Chr*$400,Pro*$2000,HIHG*$40000(Chr) Low(Chr Size),Program Size ,$110,$111
‘²dQ � ¼´dQ$2F,$F0,$00,$00 ;$00(SF4)
DB $00,$60,$3F,$E0,$00,$00 ;$01(SONIC)
DB $00,$10,$0E,$F0,$00,$00 ;$02(PINK of RIN6µdQ � $·dQ $80,$40,$0E,$F0,$00,$00 ;$03(WAR)
DB $00,$20,$1F,$F0,$00,$00 ;$04(TITANIC)
DB $00,$20,$1F,$F0,$01,$00 ;a·dQ TA� Œ¹dQ DB $00,$10,$0E,$F0,$00,$02 ;$06(Duck0 of RINGS)
DB $00,$10,$0E,$F0,$01,$02 ;$07(Duck1 of RINGS)
DB CºdQ $1� E,$F0,$01,$00 ;$08(PINK1 of RINGS)
DB $00,$10,$0E,$F0,$02,$00 ;$09(PINK2 of RINGS)
DB $00,$10,$0E,$F0,$03,$00 ;$0A(PÿÿK3 RINGS)
DB $00,$10,$0E,$F0,$00,$01 ;$0B(RINGS0)
DB $00,$10,$0E,$F0,$01,$01 ;$0C(RINGS1)
DB $00,$10,$0E,ÿÿ0, ô»dQ;$0D(RINGS2)
DB $00,$10,$0E,$F0,$03,$01 ;$0E(RINGS3)
?SwitchGame0D
DB $00,$50,$2F,$F0,$00,$00 ;$00(SF4)
1¼dQ DB� \¾dQ0,$60,$3F,$E0,$00,$00 ;$01(SONIC)
DB $00,$10,$0E,$F0,$00,$00 ;$02(PINK of RINGS)
DB $80,$40,$0E,$F0,$00,$00 ™¾dQ AR� DB $00,$20,$1F,$F0,$00,$00 ;$04(TITANIC)
DB $00,$10,$0E,$F0,$01,$02 ;$05(Duck1 of RINGS)
NewEntryPoint:
LDA ÿÿ 00Buf+4
STA $0110
LDA rg6000Buf+5
STA $0111
LDY #$00
?1 LDA rg6000Buf,Y
Sÿÿ ÄÀdQ
INY
CPY #$04
BCC ?1
JMP ($FFFC)
NOP
NOP
EndEntryPoint:
;JumpMenuT�ÁdQ C � ,ÃdQ DW $6010,$6020,$6040,$6080
; DW $6100,$6200,$6400,$6800
;;;;;;library
RamProgram:
.ENDS
¦ÃdQ MB� ”ÅdQ
� EOR #$01
STA page0_1
RTS
?1 LDA tog1
AND #kA+kB+kST
BEQ ?2
ÑÅdQ A � #$0E
STA _Sound
INC case
RTS
?2 LDA tog1
AND #kU
BEQ ?3
;;;;Up
ÿÿP üÇdQorUP
?3 LDA tog1
AND #kD
BEQ ?4
JMP CursorDown
?4 LDA tog1
AND #vÈdQ � BEQ ?5
JMP CursorLeft
?5 LDA tog1
AND #kR
BNE ?6
RTS
?6
;;;Right Mode....
ÿÿ L dÊdQtemNo
LDA PageNo
CMP #$03
BEQ ?9
BCS ?7
LDA NextNoTbl00,X
JMP �ËdQ
� ÌÌdQ LDA NextNoTbl01,X
JMP ?8
?7 LDA NextNoTbl0,X
?8 STA ItemNo
SetSprCursor
L
At 0xF1BF is a small fragment of code:
,$00,$1E
DB $06,$05,$00,$04,$1F‰ódQ 09� ´õdQ
DB $8
At around 0xF7B1, there's more!
- "Dragon runÿÿng" - Dragon Running. Originally appeared in a Hot Dance 3-in-1 multicart.
- "Strike Mouse" - War of Strike Mouse. Originally appeared in a Hot Dance 3-in-1 multicart.
$8000
sty $8001
§�\a � Ò�\a
iny
stx $8000
sty $8001
inx
iny
L�\a st� $8000
sty $8001
rts
;=====================================================================
;Dragon runÿÿng .
;=====================================================================
Irq2:
lda Irq_Cnt
bne Irq21ÿÿ;
irqoff
irqon
lda #$78
irqlong
;
ldy #$02
?1
ÿÿ :�\a dey
bne ?1
;
lda $2002
lda scr2_x
sta $2005
ñ�\a � da #$00
sta $2005
lda rg2000
and #%11111100
ora page0_1+ÿÿ
¢ \a sta $2000
;;;Switch Bank
ldx #$00
stx $8000
lda #$DC
Y
\a � $8001
inx
stx $8000
lda #$DE
sta $8001
;
ÿÿin Irq_Cnt
rts
;
Irq21:
irqoff
ldy #$02
?1
dey
bne ÿÿ
�\a lda $2002
lda #$00
sta $2005
sta $2005
„�\a � r�\a
and #%11111110
ora page0_1
sta $2000
;
lda #$00
f�\a � sta Irq_Cnt
rts
;
;=====================================================================
;Strike Mouse
;============ÿÿ== =================================================
Irq3:
irqoff
;
ldy #$02
?1
dey
ÿÿ Ú�\abne ?1
;
;;;ldy #$60
ldy #$78
ldx #$8!ó òYõ stx $8000
��\a � B�\asty $8001
inx
iny
stx $8000
sty $8001
i�\a � ª�\a iny
stx $8000
sty $8001
inx
iny
stx ç�\a
� sty $8001
lda #$00
sta Irq_Cnt
rts
;==============================ÿÿ== ===============================
;
;=====================================================================
Irq5:
irqoff
ÿÿ lda #$00
sta Irq_Cnt
;
;;; lda Scr_mapx
;;; sta $2005
rts
;====ÿÿ== =========================================================
;
;=====================================================================
Irq6:
ÿÿ ��\a lda Irq_Cnt
bne Irq61
; Middle Area
irqoff
irqon
lda #O�\a � z�\a irqlong
;
ldy #$02
?1
dey
bne ?1
;;;;
ldy #$88
ô�\a � ;;;;ldy #$8C
;;;;;;;;ldy #$90
ldx #$82
stx $8000
sty $8001
ÿÿ inx
iny
stx $8000
sty $8001
inx
;;;;; ldy mid_bnkÿÿ ldy #$80
stx $8000
sty $8001
inx
iny
ÿÿx $8000
sty $8001
inc Irq_Cnt
rts
;
Irq61:
;;;Bottom
irqoff
ÿÿ â�\aldy #$02
?1 dey
bne ?1
;
ldy #$84
ldx #$82
P�\a st� J�\a000
sty $8001
inx
iny
stx $8000
sty $80‡�\a � ²!\a in
At 0x109A8 is a bunch of variable names:
ArroW
BROWSE
BackCursorNo
BallFunNo
BgSprPal
CHREGH
CheckKey
Chreg0
Chr
reg2
Chreg3
Chreg4
Chreg4h
Chreg5
Chreg5h
Chreg6
Chreg6h
Chreg7h
ChregIh
ChregIl
ChregTh
ClrSprite
ClrVram
Color00
ColorT
OldCol
CursorDown
CursorFlg
CursorLeft
CursorUP
CursorX
CursorY
DebugBuf
DogFunNo
ENEMYNO
EndEntryPoint
EntryGame
FillPage
FillText
GameRoutine
GetMenuPage
Gun1X
Gun1Y
Gun2X
Gun2Y
HA6611
Incad
Irq0
Irq1
Irq2
Irq21
Irq3
Irq4
Irq5
Irq6
Irq6l5
IrqCtl
IrqTbl
Irq_Cnt
Irq_Ctl
Irq_Line
Irq_Sub
ItemCnt
ItemNo
ItÿÿUs
ItemUseY
J_ABUTTON
J_BBUTTON
J_DOWN
J_LEFT
J_RIGHT
J_SELECT
J_SÿÿRT
J_UP
Joy1
Joy2
JoyOne
KeyIndex
LETTER
LOOPING
LightGunX
Lÿÿht
MANLIFE
MASCR01
MASCR02
MBSCR01
MBSCR02
MC3
MCSCR01
MCSCR02
DSCR01
MDSCR02
MEMORY
MSCR01
MSCR02
Main
MainFlow
MaxItem
NScr_mÿÿx
NUMBER
NewEntryPoint
NewLocation
NextNoTbl0
NextNoTbl00
NextNoTbl01
Nmi
rd
NullBuffer
ONLYBOSS
PRG_Reg
PRIORITY
PageAddress
PageNo
PageTbl
P
dexNo
READ4017
RamProgram
SOONPASS
SPDS105A
SPEED
SPTP
SZLMAX
SZÿÿIN
ScanPort
Scr_mapx
Scr_mapy
SelPal
SelectSub
SetSprCursor
Sound
Sounÿÿni
SwitchDA
TEST
TESTPAD
TestSndNo
TestSoundMode
TestSprBuf
TitleInit
ÿÿit
op
TwoBank
UPMIN
_DBuffer
_Music
_Pause
_SBuffer
_Sound
a0
a
a2
a3
a4
atmp
ball_flg
ball_size
bally_project
bankcnt
nk
c0
case
cleanidle
cleanmode
clp00
col_msk
col_ndx
cs000
datah
datah1
datah2
datal
datal1
datal2
dhi
dhv
dlo
ag_flg
dog_flg2
dogmode
dogsndx
dogx_dir
dogx_pos
dogxf_
do‚ÿMAIN
F200
0
100
300
400
500
600
FFFA
E000
HZ
fade_wcnt
fadetbl
fp00
fp10
fp20
fp40
fp50
joytemp
kA
kB
kD
kL
kR
kSE
kST
kU
key
keycnt
keyreg
lastpad
lastpos
lasttog
name
nmi_cnt
noa
old_nmi
p0
pad1
page0_1
prtidx
r0
r01fdc6
r01fdcb
r01fde0
r01fded
r1
r2
random
rg2000
rg2001
rg6000Buf
s200ndx
sbuflen
sch
scl
scm
scr2_x
scr_x
scr_y
second
sfc
sflash
shi
sindex
smt
sndx
sndx2
sndxprt
snm
sno
sprt
sptmode
stayidle
swd
sxh
sxhmap
sxl
sxlmap
syh
syhmap
syl
sylmap
t0
tall
tog1
tr0
tr1
tr2
tr3
tr4
tr5
tubsndx
w0
w1
wait_1v
wide
x0
x1
x2
x_dir
x_pos
x_speed
xadd
xf_pos
xtemp
y0
y1
y2
y_acc
y_pos
y_speed
yadd
yf_pos
ytemp
z_acc
z_dir
z_pos
z_speed
zf_pos
zf_speed
dogz_speed
Irq_Ctl
fadetbl
Irq_Sub
dogy_project
a0
a1
a2
c0
a3
a4
page0_1
col_ndx
ItemCnt
ItemNo
bankcnt
CursorX
CursorY
dog_flg
p0
sbuflen
r0
sflash
lastpad
r1
r2
t0
random
dogmode
col_msk
old_nmi
w0
keycnt
nmi_cnt
x0
w1
x1
y0
bnkreg
keyreg
x2
y1
dogsndx
y2
second
x_speed
y_speed
At 0x14CBD, another small fragment of code:
SYMBOLS OFF
0,$6200,$6400,$6800
;$05(Duck1 of RINGS)
ze ,$110,$111
itchGame00
At 0x150BE (almost directly after the compiler output) there's even MORE ASM to be found:
sei ;; DISABLE IRQ.
cld
ldx #$ff ;; INITIAL STACK POINTER.
txs
lda #$00
sta $2001 ;; SCREEN OFF.
sta $2000 ;; NMI OFF.
; sta $8000 ;Try
IF MC3
lda #$00
sta $8000 ;; SET MAP MODE 0.
ELSE
sta $C002 ;;; RESET IRQ OFF.
sta $2001
sta $2000
sta $D000
sta $C006
ENDIF
ENDM
lda #$00
ldx #$00
a# ;;-------------- clear system ram.
sta $00,x
sta $100,x
sta $200,x
sta $300,x
sta $400,x
sta $500,x
sta $600,x
sta $700,x
inx
bne a#
ENDM
txa
tay
ENDM
clc
adc €
ENDM
sec
sbc €
ENDM
bne ?1#
jmp €
?1#
endm
beq ?1#
jmp €
?1#
endm
bmi ?1#
jmp €
?1#
endm
bpl ?1#
jmp €
?1#
endm
IF MC3
sta $e000
lda $2002
lda #$10
tax
init_1H: ;;;
sta $2006
sta $2006
eor #$10
dex
bne init_1H
sta $e000
ELSE
lda #$3e
sta $8002
lda #$3f
sta $8003
lda #$85
sta $c001
lda #%00111110
sta $d000
lda #$00
sta $b000
lda #$01
sta $b001
lda #$02
sta $b002
lda #$03
sta $b003
lda #$01
sta $b004
sta $b005
sta $b006
sta $b007
lda #$00
sta $c006
lda #$00
sta $d002
lda #%00100000
sta $d003
ENDIF
ENDM
lda #$00
ldx #$00
a# ;;-------------- clear system ram.
sta $100,x
inx
bne a#
ENDM
lda nmi_cnt
cmp old_nmi
bne ?z#
rts
?z# sta old_nmi
ENDM
lda #$0f
sta $4015 ;sound off.
lda #$00
sta $4010
lda #$40
sta $4017
ENDM
pha
txa
pha
tya
pha ;; save status.
ENDM
pla ;; restore status.
tay
pla
tax
pla
ENDM
lda #%00000000
sta $2003
lda #$02
sta $4014
ENDM
lda €
asl a
tay
lda ,y
sta r0
lda +1,y
sta r0+1
jmp (r0)
ENDM
lda €
asl a
tay
lda SubTbl#,y
sta r0
lda SubTbl#+1,y
sta r0+1
jmp (r0)
SubTbl#:
ENDM
lda €
jsr SelectSub
ENDM
lda €
jsr ShowNo
ENDM
sec
lda
sbc ƒ
lda €
sbc ‚
ENDM
sec
lda ,x
sbc ƒ,y
lda €,x
sbc ‚,y
ENDM
ldx sbuflen
lda €
sta snm,x
lda
sta sxhmap,x
sta sxh,x
lda ‚
sta sxlmap,x
sta sxl,x
lda ƒ
sta sylmap,x
; lda „
; sta szlmap,x
sta syl,x
jsr InitSPub
ENDM
ldx sbuflen
lda €
sta snm,x
lda
sta sxhmap,x
sta sxh,x
lda ‚
sta sxlmap,x
sta sxl,x
lda ƒ
sta syhmap,x
sta syh,x
lda „
sta sylmap,x
sta syl,x
; lda …
; sta szlmap,x
jsr InitSPub
ENDM
ldx #€
ldy #
jsr Delay
bcs ‚
ENDM
IF MC3
lda #€
sta $a000
ELSE
nop
ENDIF
ENDM
lda #$00
sta $2000 ;;; nmi off.
sta $2001 ;;; screen off.
lda #$00
sta Irq_Ctl ;;; irq off.
ENDM
lda #$1e
sta rg2001 ;;; screen on.
lda #€
sta $2000 ;;; nmi on.
sta rg2000
ENDM
lda #€
sta _Music
ENDM
lda #€
sta _Sound
ENDM
IF MC3
sei
lda #$06
sta $8000
lda €
sta DATA_Reg
sta PRG_Reg
sta $8001
inc PRG_Reg
lda #$07
sta $8000
lda PRG_Reg
sta $8001
cli
ELSE
lda €
sta DATA_Reg
sta PRG_Reg
sta $8000 ;;; SET DATA SEGMENT, $8000-$9FFF.
inc PRG_Reg
lda PRG_Reg
sta $8001 ;;; SET PRG SEGMENT, $A000-$BFFF.
ENDIF
ENDM
IF MC3
sei
lda #$06
sta $8000
lda €
sta DATA_Reg
sta $8001
cli
ELSE
lda €
sta DATA_Reg
sta $8000 ;;; SET DATA SEGMENT, $8000-$9FFF.
ENDIF
ENDM
IF MC3
sei
lda #$07
sta $8000
lda €
sta PRG_Reg
sta $8001
cli
ELSE
lda €
sta PRG_Reg
sta $8001 ;;; SET PRG SEGMENT, $A000-$BFFF.
ENDIF
ENDM
lda €
sta HOME_Reg
sta $8002 ;;; SET HOME SEGMENT, $C000-$DFFF.
ENDM
lda €
sta $8003 ;;; SET HOME SEGMENT, $C000-$DFFF.
ENDM
lda €
sta dlo
lda
sta dhi
lda ‚
sta dwide
lda ƒ
sta dtall
lda „
sta dhv
ENDM
DB €
ENDM
DB $00
endm
LDA $201C
STA Gun1X
LDA $201D
STA Gun1Y
LDA $201E
STA Gun2X
LDA $201F
STA Gun2Y
STA $2019 ;Reset Gun1 & Gun2
ENDM
ldx € ;4
.if FourBank
stx Chreg0
inx
inx
stx Chreg2
.else
stx Chreg0
inx
stx Chreg1
inx
stx Chreg2
inx
stx Chreg3
inx
.endif
endm
lda #BankValue ;bnk
sta r1
lda € ;from stage1
ldy
jsr Back1Page
SCR_ON $C8 ;$E8
lda ‚
sta Irq_Ctl ;;; fade init.
endm
lda #BankValue ;bnk
sta r1
lda €
ldy
þ jsr Back1Pageÿÿ´±²³·¶
ages,irqlines,irqsub ;,bnk