Author Topic: the source code for SNES/SFC Myth Cart menu v0.05  (Read 53654 times)

0 Members and 1 Guest are viewing this topic.

Offline Dr.neo

  • Administrator
  • Hero Member
  • *****
  • Posts: 3826
the source code for SNES/SFC Myth Cart menu v0.05
« on: February 22, 2010, 04:14:08 PM »
;=================== 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
In my world,have 0 and 1 only ......Matrix World......

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2203
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #1 on: February 22, 2010, 04:52:23 PM »
Very nice  :D  ::sm-24.gif::

Offline mic_

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 632
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #2 on: February 22, 2010, 04:53:45 PM »
Which assembler are you using? Doesn't look like wla-dx at least.

Offline Dr.neo

  • Administrator
  • Hero Member
  • *****
  • Posts: 3826
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #3 on: February 23, 2010, 12:00:28 AM »
we use our special design compiler,not the standard one.
In my world,have 0 and 1 only ......Matrix World......

Offline Sektor

  • Sr. Member
  • ****
  • Posts: 394
    • gtamp.com/DS
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #4 on: February 23, 2010, 12:45:51 AM »
Scary  ~sm-34.gif~

I'm sure ChillyWilly and others will make good use of it  ~sm-42.gif~

Offline Conle

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2203
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #5 on: February 23, 2010, 01:20:49 AM »
Which assembler are you using? Doesn't look like wla-dx at least.

You should be able to compile it with "SNASM" or "snescomp".
But don't forget to apply the header on top of the object.

 ~sm-37.gif~

Offline ChillyWilly

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1751
  • Just a coding machine.
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #6 on: February 23, 2010, 02:01:11 AM »
Scary  ~sm-34.gif~

I'm sure ChillyWilly and others will make good use of it  ~sm-42.gif~

Yes - keep some parts in assembly (changed to wla-dx assembly) and switch the rest over to C using snes-sdk.

Anywho, let's thank Dr. neo for the release as it really helps in making the menus, being a prime source of info on how the Myth works. Thanks!!
 ::sm-29.gif::

Offline ~tak

  • Newbie
  • *
  • Posts: 46
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #7 on: February 23, 2010, 02:36:48 AM »
veeeeeeerrryyyyy nice!!!

thanks for sharing, should also be possible to compile with WLA-DX with minor changes, right?

personally I like to use bitmap fonts instead of ascii, however it's always tie to rom space too. is there a limitation of size for the menu?

thanks
« Last Edit: February 23, 2010, 02:38:22 AM by ~tak »

Offline ChillyWilly

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1751
  • Just a coding machine.
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #8 on: February 23, 2010, 03:39:03 AM »
Well, from a first glance over the code, the SNES Myth is indeed very much like the MD Myth, with a very similar hardware interface. The Myth registers appear at 0xC0XX, and to use the MD Myth names:

0xC000 = OPTION_IO: 0=normal mode, 1=run from PSRAM, 4=copy mode, 6=ext mode
0xC001 = GBAC_LIO: A23-16
0xC002 = GBAC_HIO: A25-24, rom bank offset
0xC003 = GBAC_ZIO: rom bank size
0xC004 = GBAS_BIO: SRAM bank
0xC005 = GBAS_ZIO: SRAM bank size
0xC006 = PRAM_BIO: PSRAM bank (0-7)
0xC007 = PRAM_ZIO: PSRAM bank size
0xC008 = RUN_IO
0xC00D = EXTM_ON: enables A25-24
0xC00E = RST_SEL
0xC010 = RST_IO
0xC011 = SRAM_WE: 1=write enable SRAM
0xC014 = WE_IO: 1=write enable PSRAM
0xC018 = type of SRAM
0xC019 = address of SRAM in SNES mem map
0xC01A = type of ext DSP
0xC01B = address of ext memory for DSP
0xC01F =  something to do with ESRAM

When in copy mode, the flash appears at 0x400000 and the PSRAM at 0x500000. Up to 1MByte can be copied.

In the menu flash, the code starts at 0x8000 and is copied to the lower RAM. The menu relies on modifying the ram as part of the copy process. Menu entries start at 0xC800 and go to 0xFFC0, taking 64 bytes per entry. At 0xFFE0 is a byte for the CPLD version, while 0xFFE1 and 0xFFE2 are a magic cookie to identify whether the CPLD version byte is valid. 0xFFF0 is a byte identifying the version of game flash (used when setting the game flash mode for proper reading).

Offline mic_

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 632
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #9 on: February 23, 2010, 03:41:33 AM »
I'm currently translating all the code to WLA-DX syntax (while also exchanging some anonymous labels for real names). I'll post the results here once I'm finished, unless someone objects and rather do it themselves.

Offline FloBo

  • Newbie
  • *
  • Posts: 16
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #10 on: February 23, 2010, 03:43:08 AM »
Wow. Thanks for sharing! Already looking forward to customize this :)

 ~sm-39.gif~ Just figured how I got used to using wla makros. This thing is huuuuge :)

Offline ~tak

  • Newbie
  • *
  • Posts: 46
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #11 on: February 23, 2010, 05:08:51 AM »
I'm currently translating all the code to WLA-DX syntax (while also exchanging some anonymous labels for real names). I'll post the results here once I'm finished, unless someone objects and rather do it themselves.

great, thanks mic_, appriciate your effort!


Offline mic_

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 632
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #12 on: February 23, 2010, 07:11:15 AM »
Here's what I've got so far: http://jiggawatt.org/myth_menu_wla.asm

It's nearly done, but some directives haven't been translated, and I might have missed a couple of labels here and there so it probably won't assemble in its current form. I'll continue this tomorrow (today actually, since it's after midnight here :P )

Some more of the code should also be macrofied.

Offline ChillyWilly

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 1751
  • Just a coding machine.
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #13 on: February 23, 2010, 07:58:25 AM »
Nice!
 8)

One thing that may help you...

Code: [Select]
        .ORG    $8035      ;MYTH
;===============================================================================
MOV_1M:
        CPU_REGS16        ; A,16 & X,Y 16 BIT
        LDX     #$0000
MOV_1M_LOOP:
LDA.L     $400000,X  ; READ GBA CARD
        STA.L     $500000,X  ; WRITE PSRAM
        INX
        INX
        BNE     MOV_1M_LOOP

        LDX     #$0000      ;  MOVE BOOT CODE TO SRAM
COPY_BOOT:
LDA.L     $410000,X
        STA.L     $510000,X
        INX                 ;0
        INX
        BNE     COPY_BOOT         ;0
        CPU_REGS8
        RTS

The reason it sets the origin to $8035 is that the $40/$50/$41/$51 in the loops are written over by the main rom copy routine later in the code. It's copied into RAM, then the copy code sets those bytes each time through the loop when copying 1MB of flash to psram.

This is a prime thing to clean up... self-modifying code is usually something to be avoided when you can. Especially where the locations are hardcoded to one version of code. One change to the loops above and you'll have a prbolem if you also forget to change the self-modifying parts later.

I'm not sure why he simply didn't do something like

Code: [Select]
        LDX     #$0000
MOV_1M_LOOP:
LDA.L     $400000,X  ; READ GBA CARD
        STA.L     $500000,X  ; WRITE PSRAM
  LDA.L     $410000,X  ; READ GBA CARD
        STA.L     $510000,X  ; WRITE PSRAM
LDA.L     $420000,X  ; READ GBA CARD
        STA.L     $520000,X  ; WRITE PSRAM
LDA.L     $430000,X  ; READ GBA CARD
        STA.L     $530000,X  ; WRITE PSRAM
LDA.L     $440000,X  ; READ GBA CARD
        STA.L     $540000,X  ; WRITE PSRAM
LDA.L     $450000,X  ; READ GBA CARD
        STA.L     $550000,X  ; WRITE PSRAM
LDA.L     $460000,X  ; READ GBA CARD
        STA.L     $560000,X  ; WRITE PSRAM
LDA.L     $470000,X  ; READ GBA CARD
        STA.L     $570000,X  ; WRITE PSRAM
LDA.L     $480000,X  ; READ GBA CARD
        STA.L     $580000,X  ; WRITE PSRAM
LDA.L     $490000,X  ; READ GBA CARD
        STA.L     $590000,X  ; WRITE PSRAM
LDA.L     $4A0000,X  ; READ GBA CARD
        STA.L     $5A0000,X  ; WRITE PSRAM
LDA.L     $4B0000,X  ; READ GBA CARD
        STA.L     $5B0000,X  ; WRITE PSRAM
LDA.L     $4C0000,X  ; READ GBA CARD
        STA.L     $5C0000,X  ; WRITE PSRAM
LDA.L     $4D0000,X  ; READ GBA CARD
        STA.L     $5D0000,X  ; WRITE PSRAM
LDA.L     $4E0000,X  ; READ GBA CARD
        STA.L     $5E0000,X  ; WRITE PSRAM
LDA.L     $4F0000,X  ; READ GBA CARD
        STA.L     $5F0000,X  ; WRITE PSRAM
      INX
        INX
        BNE     MOV_1M_LOOP

It's not so big and avoids all the self-modifying. It should be faster as well. Cleaning up other parts of the code would also make up for the difference in size.

Offline ~tak

  • Newbie
  • *
  • Posts: 46
Re: the source code for SNES/SFC Myth Cart menu v0.05
« Reply #14 on: February 23, 2010, 11:40:09 PM »
could someone point me please to the maximum size for the menu? I assume it has one, right? :)