;=================== the source code for SNES/SFC Myth Cart menu v0.05 ===================
;=================== Copy right by: Neo TeAm ===================
;===================
www.NEOFLASH.com / Feb.22th 2010 ===================
.ORG $0 ; GENERAL VAR
ITEM EQU $00
MY EQU $01
MX EQU $02
TP EQU $03 ;3,4
TPP EQU $04 ;3,4
A1L EQU $05
A1H EQU $06
JOY1 EQU $07
JOYA EQU $08
T.PAGE EQU $09
PAGE EQU $0A
G.STA1 EQU $0B
POINT EQU $0C
COLOR EQU $0D
COUNT EQU $0E
GO EQU $0F
MYTH EQU $10
LEX EQU $11
M1L EQU $12
M1H EQU $13
M2L EQU $14
M2H EQU $15
M3L EQU $16
M3H EQU $17
RUX EQU $20 ;0
RBH EQU $21 ;2
RBL EQU $22 ;1
RZX EQU $23 ;3
SBX EQU $24 ;4
SZX EQU $25 ;5
MODE EQU $26 ;6
RSZ EQU $27 ;1
EDSP EQU $28 ;1
ESRAM EQU $29 ;1
SRAM_M EQU $2A ;1 ;NEW
CARD_M EQU $2B ;1 ;NEW
PMENU EQU $2C ;1 ;NEW
MOV EQU $2F ;6
AA EQU $30 ;6
AP0 EQU $31 ;6
AP1 EQU $32 ;6
RAP0 EQU $33 ;6
WAP0 EQU $34 ;6
RAP1 EQU $35 ;6
WAP1 EQU $36 ;6
WAZ0 EQU $37 ;6
WAZ1 EQU $38 ;6
WAZ2 EQU $39 ;6
CPID EQU $3F ;6
TERR EQU $40 ;6
BANK .EQU $8000
PAL .EQU $2116
PAH .EQU $2117
PDL .EQU $2118
PDH .EQU $2119
ORG $ABCD ;MYTH
.DB '-'
HEX 000000
.DB 'h'
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.ORG $8000
BEGIN:
JMP START+$000000~
ORG $ABCD
.DB '+'
HEX 000000
.DB 'h'
.ORG $8010 ;MYTH
;...............................................................................
MS2
.DB $FF,14,01,02
.TEXT " LOADING......( )"
.DB 0
.ORG $8035 ;MYTH
;===============================================================================
MOV_1M:
REP #$30 ; A,16 & X,Y 16 BIT
LDX @$0000
^0 LDA $400000~,X ; READ GBA CARD
STA $500000~,X ; WRITE PSRAM
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
^0 LDA $410000~,X
STA $510000~,X
INX ;0
INX
BNE <0 ;0
SEP #$30
RTS
;...............................................................................
ORG $ABCD
.DB '+'
HEX 000000
.DB 'h'
.ORG $8060 ;MYTH
MS4
.DB $FF,12,01,02
.TEXT " GAME (001)"
.DB 0
;===============================================================================
ORG $ABCD
.DB '+'
HEX 000000
.DB 'h'
.ORG $8080 ;MYTH
;...............................................................................
TEST_PARMB0:
REP #$30 ; A,16 & X,Y 16 BIT
LDX @$0000
LDA @$0000 ; READ GBA CARD
^0
STA $500000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
SEP #$30
RTS
TEST_PARMC0:
LDA #$00
STA TERR
REP #$30 ; A,16 & X,Y 16 BIT
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0000
^0
CMP $500000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
SEP #$30
RTS
^1
SEP #$30
LDA #$01
STA TERR
RTS
;===============================================================================
; print card name
ORG $ABCD
.DB '+'
HEX 000000
.DB 'h'
.ORG $8100 ;MYTH
MS3
.DB $FF,12,01,02
.TEXT " "
.DB 0
;===============================================================================
ORG $ABCD
.DB '+'
HEX 000000
.DB 'h'
.ORG $8180 ;MYTH
TEST_CARD:
LDA #30
JSR PRINT
LDA #$20 ; OFF A21
STA $C003~
JSR SET_NEOCMC ; ON_NEO CARD A24 & A25 + SA16 & SA17
LDA #$20 ; OFF A21
STA $C003~
LDA #$00
STA $C003~ ; SET A16~A23
STA $C002~ ; SET A24,A25
LDA #$01
STA $C00D~ ; A25,A24 ON
LDA #$04
STA $C018~ ; SET SRAM SAVE TYPE
LDA #$0F
STA $C019~ ; SET $700000
LDA #$01
STA $C011~ ; SRAM ON !
LDA #$00
STA $700000~
LDA #$01
STA $720000~
LDA #$02
STA $740000~
LDA #$03
STA $760000~
LDA $700000~
CMP #$00
BNE >1
LDA $720000~
CMP #$01
BNE >1
LDA $740000~
CMP #$02
BNE >1
LDA $760000~
CMP #$03
BNE >1
LDA #$00
LDA #28
JSR PRINT
^1
STA $C018~ ; SET SRAM SAVE TYPE
STA $C019~ ; SET $000000
STA $C011~ ; SRAM ON !
;------------------------------------------------------------------------------
LDA #$04 ; COPY MODE !
STA $C000~
LDA #$01 ; PSRAM WE ON !
STA $C014~
LDA #$F8
STA $C007~ ;PSRAM 8M SIZE
;-------------------------------------------------------------------------------
LDA #$00 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$01 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$02 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$03 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$04 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$05 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$06 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
LDA #$07 ;PSRAM BANK
STA $C006~
STA $500000~
STA $500001~
;-------------------------------------------------------------------------------
LDA #$00 ;PSRAM BANK
STA $C006~
LDA $500000~
CMP #$00
BNE >0
LDA #$01 ;PSRAM BANK
STA $C006~
LDA $500000~
CMP #$01
BNE >0
LDA #$02 ;PSRAM BANK
STA $C006~
LDA $500000~
CMP #$02
BNE >0
JMP >2
TS_ERR:
^0
LDA #32
JSR PRINT
JMP >1
TS_OK:
LDA #31
JSR PRINT
^1
LDA #$00 ;
STA $C000~
JMP MENU1
;-------------------------------------------------------------------------------
^2
LDA #20
JSR PRINT
LDA #$00 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #21
JSR PRINT
LDA #$01 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #22
JSR PRINT
LDA #$02 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #23
JSR PRINT
LDA #$03 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #24
JSR PRINT
LDA #$04 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #25
JSR PRINT
LDA #$05 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #26
JSR PRINT
LDA #$06 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP >1
^0
JMP >0
^1
LDA #27
JSR PRINT
LDA #$07 ;PSRAM BANK
STA $C006~
JSR TEST_PARMA0
LDA TERR
CMP #$00
BNE >0
JMP TS_OK
^0
JMP TS_ERR
;------------------------------------------------------------------------------
TEST_PARMA0:
LDA #$00
STA TERR
REP #$30 ; A,16 & X,Y 16 BIT
LDX @$0000
LDA @$0000 ; READ GBA CARD
^0
STA $500000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0000
^0
CMP $500000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0001 ;
^0
STA $510000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0001
^0
CMP $510000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0002 ;
^0
STA $520000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0002
^0
CMP $520000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0003 ;
^0
STA $530000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0003
^0
CMP $530000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0004 ;
^0
STA $540000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0004
^0
CMP $540000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0005 ;
^0
STA $550000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0005
^0
CMP $550000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0006 ;
^0
STA $560000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0006
^0
CMP $560000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0007 ;
^0
STA $570000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0007
^0
CMP $570000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0008 ; READ GBA CARD
^0
STA $580000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0008
^0
CMP $580000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$0009 ;
^0
STA $590000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$0009
^0
CMP $590000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000A ;
^0
STA $5A0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000A
^0
CMP $5A0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000B ;
^0
STA $5B0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000B
^0
CMP $5B0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000C ;
^0
STA $5C0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000C
^0
CMP $5C0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000D ;
^0
STA $5D0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000D
^0
CMP $5D0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000E ;
^0
STA $5E0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000E
^0
CMP $5E0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
LDX @$0000
LDA @$000F ;
^0
STA $5F0000~,X ; WRITE PSRAM
INC A
INX
INX
BNE <0
LDX @$0000 ; MOVE BOOT CODE TO SRAM
LDA @$000F
^0
CMP $5F0000~,X
BNE >1
INC A
INX ;0
INX
BNE <0 ;0
JMP >0
^1
JMP >1
^0
;-------------------------------------------------------------------------------
SEP #$30
RTS
^1
SEP #$30
LDA #$01
STA TERR
RTS
;===============================================================================
SET_NEOCM5:
LDA #$E0 ; SET BANK ;1 1 1 0
STA $C001~
LDA $FFA400~ ; FFD2XX ;01
LDA #$00 ; SET BANK ; 0 0 0
STA $C001~
LDA $C02A00~ ; 0015XX ;02
LDA $C3A400~ ; 01D2XX ;03
LDA $C42A00~ ; 0215XX ;04
LDA #$E0 ; SET BANK ;1 1 1 0
STA $C001~
LDA $FC2A00~ ; FE15XX ;05
RTS
;===============================================================================
SET_NEOCMA:
JSR SET_NEOCM5
LDA #$20 ; SET BANK ;0 0 1 0
STA $C001~
LDA $EE2406~ ; 372203 ;06 ;
RTS
;===============================================================================
SET_NEOCMB:
JSR SET_NEOCM5
LDA CARD_M
CMP #$00
BEQ >0
CMP #$01
BEQ >1
JMP >2
;-------------------------------------------------------------------------------
;A CARD
^0
LDA #$C0 ; SET ;1 1 0 0
STA $C001~
LDA $F55C88~ ; DAAE44 ;06
RTS
;-------------------------------------------------------------------------------
;B CARD
^1
LDA #$C0 ; SET ;1 1 0 0
STA $C001~
LDA $F51C88~ ; DA8E44 ;06
RTS
;-------------------------------------------------------------------------------
;C CARD
^2
LDA #$C0 ; SET ;1 1 0 0
STA $C001~
LDA $F41C88~ ; DA0E44 ;06
RTS
;===============================================================================
SET_NEOCMC:
JSR SET_NEOCM5
LDA #$E0 ; SET ;1 1 1 0
STA $C001~
LDA $DC0C60~ ; EE0630 ;06
RTS
;===============================================================================
SET_NEOCMD:
JSR SET_NEOCM5
LDA #$20 ; SET BANK ;0 0 1 0
STA $C001~
LDA $EE2006~ ; 372003 ;06 ; TO BIOS MENU
JSR SET_NEOCM5
LDA #$C0 ; SET ;1 1 0 0
STA $C001~
LDA $F50088~ ; DA0044 ;06
RTS
;===============================================================================
;
;===============================================================================
BOOT_RUN:
LDA #$20 ; OFF A21
STA $C003~
JSR SET_NEOCMA ;
JSR SET_NEOCMB ;
JSR SET_NEOCMC ; ON_NEO CARD A24 & A25 + SA16 & SA17
LDA RBH
STA $C002~ ; SET AH25,AH25
LDA #$01
STA $C00D~ ; A25,A24 ON
; MOVE PSRAM
MOV_4M:
LDA RZX
CMP #$04
BNE >0
LDA #$3C ;4M
STA RSZ
LDA #$35 ;35= 4MM
STA AP0
LDA #$30 ;30= 4M
STA AP1
LDA #$04 ;04 = 4M
STA WAZ0
LDA #$00 ;00 = 4M~8M
STA WAZ1
JMP MOV_PSRAM
;;;;;;;;8M
^0
LDA RZX
CMP #$08
BNE >0
LDA #$38 ;8M
STA RSZ
LDA #$39 ;39= 8M
STA AP0
LDA #$30 ;30= 8M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$00 ;00 = 4M~8M
STA WAZ1
JMP MOV_PSRAM
;;;;;;;;16M
^0
LDA RZX
CMP #$09
BNE >0
LDA #$30 ;16M
STA RSZ
LDA #$37 ;37= 16M
STA AP0
LDA #$31 ;31= 16M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$01 ;00 = 16M
STA WAZ1
JMP MOV_PSRAM
;;;;;;;;24M
^0
LDA RZX
CMP #$A
BNE >0
LDA #$20 ;32M
STA RSZ
LDA #$35 ;35= 24M
STA AP0
LDA #$32 ;32= 24M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$02 ;02 = 24M
STA WAZ1
JMP MOV_PSRAM
;32M============================================================================
^0
LDA RZX
CMP #$0B
BNE >0
LDA #$20 ;32M
STA RSZ
LDA #$33 ;33 = 32M
STA AP0
LDA #$33 ;33 = 32M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$03 ;03 = 32M
STA WAZ1
JMP MOV_PSRAM
;40M============================================================================
^0
LDA RZX
CMP #$0C
BNE >0
LDA #$00 ;64M
STA RSZ
LDA #$31 ;33 = 32M
STA AP0
LDA #$34 ;33 = 32M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$04 ;04 = 40M
STA WAZ1
JMP MOV_PSRAM
;48M ===========================================================================
^0
LDA RZX
CMP #$0D
BNE >0
LDA #$00 ;64MM
STA RSZ
LDA #$39 ;39 = 48M
STA AP0
LDA #$34 ;34 = 48M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$05 ;05 = 48M
STA WAZ1
JMP MOV_PSRAM
;64M ===========================================================================
^0
LDA RZX
CMP #$0E
BNE >0
LDA #$00 ;64MM
STA RSZ
LDA #$35 ;39 = 64M
STA AP0
LDA #$36 ;34 = 64M
STA AP1
LDA #$08 ;08 = 8M
STA WAZ0
LDA #$07 ;05 = 64M
STA WAZ1
JMP MOV_PSRAM
^0
;===============================================================================
MOV_PSRAM:
LDA #$00
STA WAZ2
LDA #$04 ; COPY MODE !
STA $C000~
LDA #$01 ; PSRAM WE ON !
STA $C014~
LDA #$F8
STA $C003~ ;GBA CARD 8M SIZE
STA $C007~ ;PSRAM 8M SIZE
LDA RBL
STA $C001~
LDA #$00
STA $C006~
^2
LDA #$3E
STA RAP0
LDA #$4E
STA WAP0
LDA #$3F
STA RAP1
LDA #$4F
STA WAP1
^0
INC RAP0
INC RAP1
INC WAP0
INC WAP1
INC RAP0
INC RAP1
INC WAP0
INC WAP1
LDA RAP0
STA $7E803D~
LDA WAP0
STA $7E8041~
LDA RAP1
STA $7E804C~
LDA WAP1
STA $7E8050~
DEC AP0
LDA AP0 ; L-BYTE
STA $7E8024~
LDA AP1 ; H-BYTE
STA $7E8023~ ;
LDA #$02
JSR PRINT
JSR MOV_1M
LDA AP0
CMP #$30
BNE >1
LDA #$3A
STA AP0
DEC AP1 ;
^1
DEC WAZ0
LDA WAZ0
CMP #$00
BNE <0
LDX WAZ1
CPX WAZ2
BNE >0
JMP >9
^0
;===============================================================================
INC WAZ2
LDA WAZ2
CMP #$01
BNE >0
LDA #$01 ;16M
STA $C006~
CLC
LDA #$08
ADC RBL
STA RBL
STA $C001~
LDA #$8
STA WAZ0 ;
JMP <2
;-------------------------------------------------------------------------------
^0 CMP #$02 ;24M
BNE >0
LDA #$02
STA $C006~
CLC
LDA #$08
ADC RBL
STA RBL
STA $C001~
LDA #$8
STA WAZ0
JMP <2
;-------------------------------------------------------------------------------
^0 CMP #$03 ;32M
BNE >0
LDA #$03
STA $C006~
CLC
LDA #$08
ADC RBL
STA RBL
STA $C0