It is currently Tue Jun 27, 2017 12:15 pm

All times are UTC - 7 hours





Post new topic Reply to topic  [ 5 posts ] 
Author Message
PostPosted: Fri Jun 02, 2017 2:52 am 
Offline

Joined: Fri Jun 02, 2017 2:45 am
Posts: 7
This is my multicart make 6502 asm
Code:
;[FC忍龙3合1汉化版][合卡菜单][忍龙2音乐][mapper52]
 ;FlameCyclone 2017.6.2

SEL_NUM = $40    ;节目序号
MUSIC_PAGE = $41    ;菜单页开关
PRG_TMP = $42    ;PRG起始位置
CHR_TMP = $43    ;CHR起始位置
PRG_BLK = $44    ;PRG块大小
CHR_BLK = $45    ;CHR块大小
CHR_SIZE_TEM =$46    ;CHR容量大小
ROM_LOCK = $47    ;合卡锁定

 .ORG $C000
MENU:
 SEI
 CLD
 LDA #$00
 STA $2000
 LDX #$FF
 TXS

 LDA #$80
 STA $A001
 
 
SET_BANK:    ;初始化处理
;********************************************************
RAM_CLEARN:    ;内存清除
 LDX #$00
 LDA #$00
RAM_CLEARN_S:
 STA $0000,X
 STA $0100,X
 STA $0200,X
 STA $0300,X
 STA $0400,X
 STA $0500,X
 STA $0600,X
 STA $0700,X
 INX
 BNE RAM_CLEARN_S
 
;********************************************************
CHR_SWITCH:
 LDA #$00    ;初始化水平镜像
 STA $A000
 LDA #$00    ;初始图形库0000-07FF
 STA $8000
 LDA #$00
 STA $8001
 LDA #$01    ;初始图形库0800-0FFF
 STA $8000
 LDA #$02
 STA $8001
MUXIC_BANK_SWITCH:
 LDA #$06
 STA $8000
 LDA #$00
 STA $8001
 LDA #$07
 STA $8000
 LDA #$01
 STA $8001

;********************************************************
 LDX #$00
COPY_SELECT:    ;复制切换节目程序到RAM
 LDA $D000,X
 STA $0400,X
 INX
 CPX #$FF
 BCC COPY_SELECT
 
TIME_DELAY:    ;延时
 JSR TIMEDELAY
 STA $2001
 JSR SPARITE_CLEARN
 JSR SCROLL_SET
 JSR PPU_DATA_CLEARN
 JSR PPU_PL_CLEARN
 JSR PPU_LAYOUT
 JSR PPU2_LAYOUT
 JSR TIMEDELAY

;********************************************************
SCREEN:    ;标题绘制
 JSR SPARITE_LAYOUT
 JSR PPU_GAME_TITLE
 JSR PPU_GAME_TITLE2
 
GAME_NAME:    ;画面节目绘制
 JSR PPU_GAME_G01
 JSR PPU_GAME_G02
 JSR PPU_GAME_G03
GAME_NAME_END:
 JSR PPU_GAME_MADE
 JSR PPU_GAME_MADE2
 JSR PPU_GAME_SOUND
 JSR TIMEDELAY
 JSR PPU_PL_CLEARN
 JSR SOUND_CLEARN
 LDA #$01
 STA $0700
 JSR SOUND
 LDA #$06
 STA $0300
 JSR MUSIC_PLAY
 JSR PPU_GAME_SOUND
 JSR SCROLL_SET
 LDA #$09
 STA $0700
 JSR TIMEDELAY
 
 JSR BPALETTES3
 JSR SCROLL_SET
 
 LDA #$01
 JSR SECONDDELAY
 
 LDA #$1E
 STA $2001
 
 LDA #$02
 JSR SECONDDELAY
 
 JSR BPALETTES2
 JSR SCROLL_SET
 
 LDA #$02
 JSR SECONDDELAY
 
 JSR BPALETTES
 JSR SCROLL_SET
 
 JSR SPARITE_WRITE
 JSR SPARITE_SET
 JSR SPARITE_LAYOUT
 JSR SCROLL_SET
 JSR SOUND

;********************************************************
 
MENU_START:    ;循环部分开始
 LDA $E5
 CMP #$20
 BNE RESTART
 LDA $0303
 BNE OPENSOUND
OFFSOUND:
 JSR SOUND_OFF
 JMP RESTART
OPENSOUND:
 JSR SOUND_ON
RESTART:
 JSR PAGE_SWITCH
 JSR PRO_GAME_NUMBER
 JSR BUTTON
 JSR MUSIC_CHANGE
 JSR SPARITE_MOVE
 JSR SPARITE_SET
 JSR SOUND
 JSR TIMEDELAY
 JSR SCROLL_SET
 
;***************************************************************************************************************
SELECT_OVER:
 LDA $E5
 AND #$10
 BEQ ROMMENU
 INC $0202
 JSR SPARITE_SET
 LDA #$01
 STA $0700
 JSR SOUND
 LDA #$30
 STA $0700
 JSR SOUND
 LDA #$0A
 JSR MUSICDELAY
 
TIMEOUT:
 LDA #$02
 JSR SECONDDELAY
 JSR BPALETTES2
 JSR SCROLL_SET
 
 INC $0202
 JSR SPARITE_SET
 
 LDA #$02
 JSR SECONDDELAY
 JSR BPALETTES3
 JSR SCROLL_SET
 
 INC $0202
 JSR SPARITE_SET
 

 LDA #$02
 JSR SECONDDELAY
 JSR PPU_DATA_CLEARN
 JSR PPU_PL_CLEARN
 JSR SCROLL_SET
 LDA #$00
 STA $4015
 LDA #$00
 STA $2001
 LDA #$00
 STA $41
 JMP $0400
;***************************************************************************************************************
ROMMENU:   
 JMP MENU_START
 
;***************************************************************************************************************
TIMEDELAY:    ;延时
 LDA $2002
 BPL TIMEDELAY
 RTS
;********************************************************
SECONDDELAY:    ;延时
 STA $52
 LDA #$06
 STA $51
SECOND_S:
 JSR TIMEDELAY
 DEC $51
 BNE SECOND_S
 LDA #$06
 STA $51
 DEC $52
 BNE SECOND_S
SECONDRTS:
 RTS
;********************************************************
MUSICDELAY:    ;延时
 STA $54
 LDA #$06
 STA $53
MUSICDELAY_S:
 JSR TIMEDELAY
 JSR SOUND
 DEC $53
 BNE MUSICDELAY_S
 LDA #$06
 STA $53
 DEC $54
 BNE MUSICDELAY_S
MUSICDELAYRTS:
 RTS

;********************************************************
SOUND_SET:    ;音效
 STA $0700
 RTS

SOUND:
 LDA $0300
 TAX
 LDA #$07
 STA $8000
 LDA MUSIC_BANK,X
 STA $8001
 JSR $8000
 RTS

SOUND_ON:
 JSR MUSIC_PLAY
 LDA #$00
 STA $0303
SOUND_ON_RTS:
 RTS

SOUND_OFF:
 LDA #$01
 STA $0700
 LDA #$FF
 STA $0303
SOUND_OFF_RTS:
 RTS
;********************************************************
MUSIC_CHANGE:
 LDA $E5
 CMP #$40
 BNE MUSIC_ADD
 LDA $0300
 CMP #$00
 BEQ MUSIC_ADD
 DEC $0300
 LDA $0303
 BNE MAAD2
 JSR MUSIC_PLAY
MAAD2
 JSR PPU_GAME_SOUND
 JSR SCROLL_SET
MUSIC_ADD:
 
 LDA $E5
 CMP #$80
 BNE MUSIC_RTS
 LDA $0300
 TAX
 LDA MUSIC_NUMBER+1,X
 CMP #$FF
 BEQ MUSIC_RTS
 INC $0300
 LDA $0303
 BNE MAAD
 JSR MUSIC_PLAY
MAAD:
 JSR PPU_GAME_SOUND
 JSR SCROLL_SET
MUSIC_RTS:
 RTS
;********************************************************
MUSIC_PLAY:
 LDA $0300
 TAX
 LDA MUSIC_NUMBER,X
 STA $0700
 RTS
;********************************************************
BUTTON:    ;按键扫描处理
 JSR BUTTON_SCAN
 LDA $D4
 STA $D0
 LDA $D5
 STA $D1
 JSR BUTTON_SCAN
 LDX #$01
STE_BUTTON_A:
 LDA $D4,X
 CMP $D0,X
 BEQ STE_BUTTON_B
 LDA $E9,X
 STA $D4,X
STE_BUTTON_B:
 DEX
 BPL STE_BUTTON_A
 LDA $9D
 AND #$04
 BNE STE_X
 LDA $D4
 ORA $D5
 STA $D4
STE_X:
 LDX #$01
BUTTON_ADDR:
 LDA $D4,X
 TAY
 EOR $E9,X
 AND $D4,X
 STA $E5,X
 STY $E1,X
 STY $E9,X
 DEX
 BPL BUTTON_ADDR
 RTS
BUTTON_SCAN:    ;按键扫描
 LDX #$01
 STX $4016
 DEX
 STX $4016
 LDY #$08
BUTTON_SCAN_START:     ;按键扫描开始
 LDA $4016
 STA $D7
 LSR
 ORA $D7
 LSR
 ROL $D4
 LDA $4017
 STA $D7
 LSR
 ORA $D7
 LSR
 ROL $D5
 DEY
 BNE BUTTON_SCAN_START
 RTS

;********************************************************
SPARITE_SET:   ;精灵块设置
 LDA SEL_NUM
 CMP NUMBER_PAGE
 BCC SET_V
 LDA SEL_NUM
 SEC
 SBC NUMBER_PAGE
SET_V:
 ASL
 ASL
 ASL
 ASL
 CLC
 ADC SPARITE_DATA
 STA $0200
 LDA #$02
 STA $4014
SPARITE_RTS:
 RTS

SPARITE_WRITE:
 LDX #$00
 LDA #$00
 STA SEL_NUM
SPARITE_WRITE_DATA:
 LDA SPARITE_DATA,X
 STA $0200,X
 INX
 CPX #$04
 BCC SPARITE_WRITE_DATA
 RTS
 

;********************************************************
SPARITE_MOVE:    ;光标移动
SPA_UP:
 LDA $E5
 CMP #$08
 BNE SPA_DN
 LDA SEL_NUM
 CMP #$00
 BNE UP1
 LDA MULTCARTTYPE
 STA SEL_NUM
 INC SEL_NUM
UP1:
 DEC SEL_NUM
 LDA #$53
 JSR SOUND_SET
SPA_DN:
 LDA $E5
 CMP #$04
 BNE SPA_INC_RTS
 LDA SEL_NUM
 CMP MULTCARTTYPE
 BNE DN1
 LDA #$FF
 STA SEL_NUM
DN1:
 INC SEL_NUM
 LDA #$53
 JSR SOUND_SET
SPA_INC_RTS:
 RTS

;********************************************************
PRO_GAME_NUMBER:
 LDA SEL_NUM
 CMP MULTCARTTYPE
 BCC PRO_NUMBER_RTS
 BEQ PRO_NUMBER_RTS
 LDA MULTCARTTYPE
 STA SEL_NUM
PRO_NUMBER_RTS:
 RTS


;********************************************************
PAGE_SWITCH:
SPA_LT:
 LDA $E5
 CMP #$02
 BNE SPA_RG
 LDA #$53
 JSR SOUND_SET
 LDA SEL_NUM
 CMP NUMBER_PAGE
 BCC LT_ADD
 LDA SEL_NUM
 SEC
 SBC NUMBER_PAGE
 STA SEL_NUM
 RTS
LT_ADD:
 LDA #$00
 STA SEL_NUM
 RTS
 
SPA_RG:
 LDA $E5
 CMP #$01
 BNE PAGE_RTS
 LDA #$53
 JSR SOUND_SET
 LDA SEL_NUM
 CMP NUMBER_PAGE
 BCC RG_ADD
 LDA SEL_NUM
 SEC
 SBC NUMBER_PAGE
 STA SEL_NUM
 RTS
RG_ADD:
 LDA MULTCARTTYPE
 STA SEL_NUM
 RTS
PAGE_RTS:
 RTS
;********************************************************
SCROLL_SET:   ;滚动重设
 LDA SEL_NUM
 CMP MULTCARTTYPE
 BEQ SCROLL_SET_S
 BCC SCROLL_SET_S
 LDA MULTCARTTYPE
 STA SEL_NUM
SCROLL_SET_S:
 LDA SEL_NUM
 CMP NUMBER_PAGE
 BCS SCROLL_NT2
SCROLL_NT1:
 JSR PPU_GAME_SOUND
 LDA $2002
 LDA #$20
 STA $2006
 LDA #$00
 STA $2006
 LDA #$00
 STA $2005
 STA $2005
 RTS
SCROLL_NT2:
 JSR PPU_GAME_SOUND
 LDA $2002
 LDA #$24
 STA $2006
 LDA #$00
 STA $2006
 LDA #$00
 STA $2005
 STA $2005
 RTS
 
;********************************************************
SPARITE_LAYOUT:    ;精灵调色板设置
 LDA #$3F
 STA $2006
 LDA #$10
 STA $2006
 LDX #$00
SPD_WRITE:   
 LDA SPD1,X
 STA $2007
 INX
 CPX #$10
 BNE SPD_WRITE
 RTS

;********************************************************
BPALETTES:    ;背景调色板1设置
 LDA #$3F
 STA $2006
 LDA #$00
 STA $2006
 LDX #$00
BPS_WRITE:
 LDA BPD,X
 STA $2007
 INX
 CPX #$10
 BNE BPS_WRITE
 RTS
;********************************************************
BPALETTES2:    ;背景调色板1设置
 LDA #$3F
 STA $2006
 LDA #$00
 STA $2006
 LDX #$00
BPS2_WRITE:
 LDA BPD2,X
 STA $2007
 INX
 CPX #$10
 BNE BPS2_WRITE
 RTS
;********************************************************
BPALETTES3:    ;背景调色板1设置
 LDA #$3F
 STA $2006
 LDA #$00
 STA $2006
 LDX #$00
BPS3_WRITE:
 LDA BPD3,X
 STA $2007
 INX
 CPX #$10
 BNE BPS3_WRITE
 RTS

;********************************************************
PPU_LAYOUT:    ;调色板布局配置
 LDA #$23
 STA $2006
 LDA #$C0
 STA $2006
 LDX #$00
PPU_PL_WRITE:
 LDA PPU_LAYOUT_DATA,X
 STA $2007
 INX
 CPX #$40
 BNE PPU_PL_WRITE
 RTS
 
;********************************************************
PPU2_LAYOUT:    ;调色板布局配置
 LDA #$27
 STA $2006
 LDA #$C0
 STA $2006
 LDX #$00
PPU2_PL_WRITE:
 LDA PPU_LAYOUT_DATA,X
 STA $2007
 INX
 CPX #$40
 BNE PPU2_PL_WRITE
 RTS

;********************************************************
PPU_PL_CLEARN:    ;调色板清空
 LDA #$3F
 STA $2006
 LDA #$00
 STA $2006
 LDX #$00
PPU_PL_S:
 LDA #$0F
 STA $2007
 INX
 CPX #$00
 BNE PPU_PL_S
 RTS



;********************************************************
SPARITE_CLEARN:    ;精灵清除
 LDX #$00
SPARITE_CLEARN_START:
 LDA #$F8
 STA $0200,X
 INX
 LDA #$00
 STA $0200,X
 INX
 STA $0200,X
 INX
 STA $0200,X
 INX
 CPX #$00
 BNE SPARITE_CLEARN_START
 RTS

;********************************************************
SOUND_CLEARN:    ;音效清除
 LDX #$00
 LDA #$00
CLEARN_00_0F:
 STA $00,X
 INX
 CPX #$10
 BCC CLEARN_00_0F
SOUND_CLEARN_START:
 LDA #$01
 STA $0700
 RTS

;********************************************************
 
PPU_ADDR_PROGRAM:    ;PPU地址处理程序
 LDA $71
 CLC
 ADC SCREEN_L
 STA $71
 LDA $70
 ADC SCREEN_H
 STA $70
 LDA $70
 STA $2006
 LDA $71
 STA $2006
 RTS
 
;********************************************************
PPU_GAME_TITLE:    ;标题
 LDA TITLE_ADDR
 STA $2006
 LDA TITLE_ADDR+1
 STA $2006
 LDX #$00
TITLE_WRITE:
 LDA TITLE_DATA,X
 CMP #$FF
 BEQ TITLE_RTS
 STA $2007
 INX
TITLE_RTS
 BCC TITLE_WRITE
 RTS

PPU_GAME_TITLE2:    ;标题
 LDA TITLE_ADDR2
 STA $2006
 LDA TITLE_ADDR2+1
 STA $2006
 LDX #$00
TITLE2_WRITE:
 LDA TITLE_DATA,X
 CMP #$FF
 BEQ TITLE2_RTS
 STA $2007
 INX
TITLE2_RTS
 BCC TITLE2_WRITE
 RTS

 
PPU_GAME_G01:    ;节目1
 LDA G01_ADDR_DATA
 STA $70
 LDA G01_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G01_ADDR:
 LDA G01_PPU_DATA,X
 CMP #$FF
 BEQ G01_RTS
 STA $2007
 INX
 BCC PPU_GAME_G01_ADDR
G01_RTS:
 RTS
 

 
 
PPU_GAME_G02:    ;节目2
 LDA G02_ADDR_DATA
 STA $70
 LDA G02_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G02_ADDR:
 LDA G02_PPU_DATA,X
 CMP #$FF
 BEQ G02_RTS
 STA $2007
 INX
G02_RTS:
 BCC PPU_GAME_G02_ADDR
 RTS
 
 
 
 
PPU_GAME_G03:   ;节目3
 LDA G03_ADDR_DATA
 STA $70
 LDA G03_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G03_ADDR:
 LDA G03_PPU_DATA,X
 CMP #$FF
 BEQ G03_RTS
 STA $2007
 INX
G03_RTS:
 BCC PPU_GAME_G03_ADDR
 RTS

PPU_GAME_G04:    ;节目4
 LDA G04_ADDR_DATA
 STA $70
 LDA G04_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G04_ADDR:
 LDA G04_PPU_DATA,X
 CMP #$FF
 BEQ G04_RTS
 STA $2007
 INX
G04_RTS:
 BCC PPU_GAME_G04_ADDR
 RTS
 
PPU_GAME_G05:    ;节目5
 LDA G05_ADDR_DATA
 STA $70
 LDA G05_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G05_ADDR:
 LDA G05_PPU_DATA,X
 CMP #$FF
 BEQ G05_RTS
 STA $2007
 INX
G05_RTS:
 BCC PPU_GAME_G05_ADDR
 RTS
 
PPU_GAME_G06:    ;节目6
 LDA G06_ADDR_DATA
 STA $70
 LDA G06_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G06_ADDR:
 LDA G06_PPU_DATA,X
 CMP #$FF
 BEQ G06_RTS
 STA $2007
 INX
G06_RTS:
 BCC PPU_GAME_G06_ADDR
 RTS

PPU_GAME_G07:    ;节目7
 LDA G07_ADDR_DATA
 STA $70
 LDA G07_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G07_ADDR:
 LDA G07_PPU_DATA,X
 CMP #$FF
 BEQ G07_RTS
 STA $2007
 INX
G07_RTS:
 BCC PPU_GAME_G07_ADDR
 RTS

PPU_GAME_G08:    ;节目8
 LDA G08_ADDR_DATA
 STA $70
 LDA G08_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G08_ADDR:
 LDA G08_PPU_DATA,X
 CMP #$FF
 BEQ G08_RTS
 STA $2007
 INX
G08_RTS:
 BCC PPU_GAME_G08_ADDR
 RTS

PPU_GAME_G09:    ;节目9
 LDA G09_ADDR_DATA
 STA $70
 LDA G09_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G09_ADDR:
 LDA G09_PPU_DATA,X
 CMP #$FF
 BEQ G09_RTS
 STA $2007
 INX
G09_RTS
 BCC PPU_GAME_G09_ADDR
 RTS

PPU_GAME_G10:    ;节目10
 LDA G10_ADDR_DATA
 STA $70
 LDA G10_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G10_ADDR:
 LDA G10_PPU_DATA,X
 CMP #$FF
 BEQ G10_RTS
 STA $2007
 INX
G10_RTS
 BCC PPU_GAME_G10_ADDR
 RTS
 
PPU_GAME_G11:    ;节目11
 LDA G11_ADDR_DATA
 STA $70
 LDA G11_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G11_ADDR:
 LDA G11_PPU_DATA,X
 CMP #$FF
 BEQ G11_RTS
 STA $2007
 INX
G11_RTS:
 BCC PPU_GAME_G11_ADDR
 RTS
 
PPU_GAME_G12:    ;节目12
 LDA G12_ADDR_DATA
 STA $70
 LDA G12_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G12_ADDR:
 LDA G12_PPU_DATA,X
 CMP #$FF
 BEQ G12_RTS
 STA $2007
 INX
G12_RTS:
 BCC PPU_GAME_G12_ADDR
 RTS
 
PPU_GAME_G13:    ;节目13
 LDA G13_ADDR_DATA
 STA $70
 LDA G13_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G13_ADDR:
 LDA G13_PPU_DATA,X
 CMP #$FF
 BEQ G13_RTS
 STA $2007
 INX
G13_RTS:
 BCC PPU_GAME_G13_ADDR
 RTS
 
PPU_GAME_G14:    ;节目14
 LDA G14_ADDR_DATA
 STA $70
 LDA G14_ADDR_DATA+1
 STA $71
 JSR PPU_ADDR_PROGRAM
 LDX #$00
PPU_GAME_G14_ADDR:
 LDA G14_PPU_DATA,X
 CMP #$FF
 BEQ G14_RTS
 STA $2007
 INX
G14_RTS:
 BCC PPU_GAME_G14_ADDR
 RTS
 
PPU_GAME_MADE:    ;制作者
 LDA MADE_ADDR_DATA
 STA $2006
 LDA MADE_ADDR_DATA+1
 STA $2006
 LDX #$00
PPU_GAME_MADE_ADDR:
 LDA MADE_PPU_DATA,X
 CMP #$FF
 BEQ MADE_RTS
 STA $2007
 INX
MADE_RTS:
 BCC PPU_GAME_MADE_ADDR
 RTS
 
PPU_GAME_MADE2:    ;制作者
 LDA MADE_ADDR2_DATA
 STA $2006
 LDA MADE_ADDR2_DATA+1
 STA $2006
 LDX #$00
PPU_GAME_MADE2_ADDR:
 LDA MADE_PPU_DATA,X
 CMP #$FF
 BEQ MADE2_RTS
 STA $2007
 INX
MADE2_RTS:
 BCC PPU_GAME_MADE2_ADDR
 RTS

PPU_GAME_SOUND:    ;TEXT_SOUND
 LDA SEL_NUM
 CMP NUMBER_PAGE
 BCS PPU_SOUND_PAGE2
PPU_SOUND_PAGE1:
 LDA TEXT_SOUND_ADDR
 STA $2006
 LDA TEXT_SOUND_ADDR+1
 STA $2006
 LDX #$00
 JMP PPU_GAME_SOUND_ADDR
PPU_SOUND_PAGE2:
 LDA TEXT_SOUND_ADDR
 CLC
 ADC #$04
 STA $2006
 LDA TEXT_SOUND_ADDR+1
 STA $2006
 LDX #$00
 JMP PPU_GAME_SOUND_ADDR
PPU_GAME_SOUND_ADDR:
 LDA TEXT_SOUND_DATA,X
 CMP #$FF
 BEQ SOUND_RTS
 STA $2007
 INX
SOUND_RTS:
 BCC PPU_GAME_SOUND_ADDR
 LDA $0300
 STA $0302
 JSR HEX_TO_DEC
 LDA $0301
 ADC #$30
 STA $2007
 LDA $0302
 ADC #$30
 STA $2007
 RTS

;********************************************************
HEX_TO_DEC:
 LDA #$00
 STA $0301
 LDA $0302
HEX_CMP:
 CMP #$0A
 BCC HEX_TO
 SBC #$0A
 INC $0301
 BNE HEX_CMP
HEX_TO:
 STA $0302
 RTS

;********************************************************
ADDR_DATA_TO = $A0    ;目的读取地址
ADDR_FROM_START = $A2    ;源开始读取地址
ADDR_FROM_END = $A4    ;源结束读取地址
DATA_OVER = $7F

ADDR_TO:    ;目的写入地址
 .BYTE $00,$20    ;想要复制到的地方
ADDR_BEGIN:    ;源开始数据地址
 .BYTE $00,$20    ;想要从何处开始复制
ADDR_END:    ;源结束数据地址
 .BYTE $FF,$27    ;想要从何处结束复制


PPU_DATA_CLEARN:    ;PPU数据清除
DATA_COPY_PROTECT:    ;保护数据
 LDA #$00
 STA $2001
 PHA
 TXA
 PHA
 TYA
 PHA
 LDA ADDR_DATA_TO
 PHA
 LDA ADDR_DATA_TO+1
 PHA
 LDA ADDR_FROM_START
 PHA
 LDA ADDR_FROM_START+1
 PHA
 LDA ADDR_FROM_END
 PHA
 LDA ADDR_FROM_END+1
 PHA

 
SET_DATA_ADDR_START:    ;设置复制起始地址
 LDA ADDR_BEGIN
 STA ADDR_FROM_START    ;设置复制起始地址低位
 LDA ADDR_BEGIN+1
 STA ADDR_FROM_START+1    ;设置复制起始地址高位
 
SET_DATA_ADDR_END:    ;设置复制结束地址
 LDA ADDR_END
 STA ADDR_FROM_END    ;设置复制结束地址低位
 LDA ADDR_END+1
 STA ADDR_FROM_END+1    ;设置复制结束地址高位
 
SET_DATA_COPY_START:   ;设置目的起始地址
 LDA #$20
 STA $2006   ;设置目的起始地址低位
 LDA #$00
 STA $2006   ;设置目的起始地址高位

INI_XY_COUNT:   ;计数器初始化
 LDX #$00
 LDY #$00
 
COPY_OVER_CMP:    ;地址比较
 LDA ADDR_FROM_START
 CMP #$00
 BNE COPY_START
 LDA ADDR_FROM_START+1
 CMP #$28
 BEQ COPY_OVER
 
COPY_START:    ;数据复制开始
 LDA #$00    ;读取源地址
 STA $2007    ;写入目的地址
 INC ADDR_FROM_START   ;源地址低位递增
 BNE H_INC
 INC ADDR_FROM_START+1   ;目的地址低位递增
H_INC:
 INC ADDR_DATA_TO   ;源地址高位递增
 BNE COPY_JMP
 INC ADDR_DATA_TO+1   ;目的地址高位递增
COPY_JMP:   
 JMP COPY_OVER_CMP
 
COPY_OVER:
FINAL_BYTE:
 LDA #$00    ;读取最后一个字节
 STA $2007    ;写入最后一个字节
 
DATA_COPY_EXACT:    ;恢复数据
 PLA
 STA ADDR_FROM_END+1
 PLA
 STA ADDR_FROM_END
 PLA
 STA ADDR_FROM_START+1
 PLA
 STA ADDR_FROM_START
 PLA
 STA ADDR_DATA_TO+1
 PLA
 STA ADDR_DATA_TO
 PLA
 TAY
 PLA
 TAX
 PLA
 
DATA_COPY_RETURN:
 RTS


;********************************************************
TITLE_ADDR:    ;标题文字数据
 .BYTE $20,$64
TITLE_ADDR2:
 .BYTE $24,$64
TITLE_DATA:
 .BYTE $4E,$49,$4E,$4A,$41,$20,$47,$41,$49,$44,$45,$4E,$20,$45,$4E,$44,$20,$30,$33,$20,$49,$4E,$20,$31,$FF

G01_ADDR_DATA:
 .BYTE $20,$60
G01_PPU_DATA:
 .BYTE $30,$31,$2E,$4E,$49,$4E,$4A,$41,$20,$47,$41,$49,$44,$45,$4E,$20,$31,$FF

G02_ADDR_DATA:
 .BYTE $20,$A0
G02_PPU_DATA:
 .BYTE $30,$32,$2E,$4E,$49,$4E,$4A,$41,$20,$47,$41,$49,$44,$45,$4E,$20,$32,$FF

G03_ADDR_DATA:
 .BYTE $20,$E0
G03_PPU_DATA:
 .BYTE $30,$33,$2E,$4E,$49,$4E,$4A,$41,$20,$47,$41,$49,$44,$45,$4E,$20,$33,$FF

G04_ADDR_DATA:
 .BYTE $21,$20
G04_PPU_DATA:
 .BYTE $30,$34,$2E,$43,$4F,$4E,$54,$52,$41,$FF

G05_ADDR_DATA:
 .BYTE $21,$60
G05_PPU_DATA:
 .BYTE $30,$35,$2E,$53,$55,$50,$45,$52,$20,$43,$4F,$4E,$54,$52,$41,$FF

G06_ADDR_DATA:
 .BYTE $21,$A0
G06_PPU_DATA:
 .BYTE $30,$36,$2E,$43,$4F,$4E,$54,$52,$41,$20,$46,$4F,$52,$43,$45,$FF

G07_ADDR_DATA:
 .BYTE $21,$E0
G07_PPU_DATA:
 .BYTE $30,$37,$2E,$4B,$41,$47,$45,$FF

G08_ADDR_DATA:
 .BYTE $24,$60
G08_PPU_DATA:
 .BYTE $30,$38,$2E,$46,$49,$4E,$41,$4C,$20,$4D,$49,$53,$53,$49,$4F,$4E,$FF

G09_ADDR_DATA:
 .BYTE $24,$A0
G09_PPU_DATA:
 .BYTE $30,$39,$2E,$44,$4F,$55,$42,$4C,$45,$20,$44,$52,$41,$47,$4F,$4E,$20,$31,$FF

G10_ADDR_DATA:
 .BYTE $24,$E0
G10_PPU_DATA:
 .BYTE $31,$30,$2E,$44,$4F,$55,$42,$4C,$45,$20,$44,$52,$41,$47,$4F,$4E,$20,$32,$FF

G11_ADDR_DATA:
 .BYTE $25,$20
G11_PPU_DATA:
 .BYTE $31,$31,$2E,$44,$4F,$55,$42,$4C,$45,$20,$44,$52,$41,$47,$4F,$4E,$20,$33,$FF

G12_ADDR_DATA:
 .BYTE $25,$60
G12_PPU_DATA:
 .BYTE $31,$32,$2E,$4D,$49,$47,$48,$54,$59,$20,$46,$49,$4E,$41,$4C,$20,$46,$49,$47,$48,$54,$FF

G13_ADDR_DATA:
 .BYTE $25,$A0
G13_PPU_DATA:
 .BYTE $31,$33,$2E,$43,$48,$49,$50,$20,$54,$4F,$20,$44,$41,$4C,$45,$20,$31,$FF

G14_ADDR_DATA:
 .BYTE $25,$E0
G14_PPU_DATA:
 .BYTE $31,$34,$2E,$43,$48,$49,$50,$20,$54,$4F,$20,$44,$41,$4C,$45,$20,$32,$FF



MADE_ADDR_DATA:    ;作者文字数据
 .BYTE $23,$42
MADE_ADDR2_DATA:
 .BYTE $27,$42
MADE_PPU_DATA:
 .BYTE $4D,$41,$44,$45,$20,$42,$59,$20,$46,$4C,$41,$4D,$45,$43,$59,$43,$4C,$4F,$4E,$45,$20,$49,$4E,$20,$32,$30,$31,$37,$FF

 
TEXT_SOUND_ADDR:
 .BYTE $23,$08
TEXT_SOUND_DATA:
 .BYTE $4D,$55,$53,$49,$43,$20,$4E,$55,$4D,$42,$45,$52,$20,$FF


PPU_LAYOUT_DATA:    ;属性表数据
 .BYTE $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$5A,$5A,$5A,$5A,$5A,$5A,$5A,$5A
 .BYTE $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
 .BYTE $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
 .BYTE $00,$00,$C0,$F0,$F0,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 
BPD:    ;背景调色板数据
 .BYTE $0F,$24,$24,$24,$0F,$20,$20,$20,$0F,$27,$27,$27,$0F,$16,$16,$16
 
BPD2:
 .BYTE $0F,$14,$14,$14,$0F,$10,$10,$10,$0F,$17,$17,$17,$0F,$06,$06,$06
 
BPD3:
 .BYTE $0F,$04,$04,$04,$0F,$00,$00,$00,$0F,$07,$07,$07,$0F,$07,$07,$07
 
SPD1:    ;精灵调色板数据
 .BYTE $0F,$2C,$2C,$2C,$0F,$27,$27,$27,$0F,$17,$17,$17,$0F,$07,$07,$07

MUSIC_NUMBER:
 .BYTE $19,$05,$06,$07,$04,$08,$09,$0A,$0B,$46,$8E,$8F,$B8,$B5,$9C
 .BYTE $AE,$90,$9B,$92,$91,$98,$93,$9A,$95,$97,$96,$9D,$1E,$FF

MUSIC_BANK:
 .BYTE $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02
 .BYTE $02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$01

MULTCARTTYPE:    ;节目数量(0=1个节目,1=2个节目,0F=16个节目)
 .BYTE $02

NUMBER_PAGE:
 .BYTE $03
 
SCREEN_H:    ;节目名字纵向偏移(粗调)
 .BYTE $01
 
SCREEN_L:    ;节目名字纵向偏移(微调)
 .BYTE $07
 
SPARITE_DATA:    ;光标数据
 .BYTE $58,$8F,$00,$2E


SELF_ROM:    ;合卡节目所在位置
 .BYTE $00
 
 
;[mapper52][存储块选择]
;FlameCyclone 2017.6.2

 .ORG $0400
 
SEL_NUM = $40    ;节目序号
MUSIC_PAGE = $41    ;菜单页开关
PRG_TMP = $42    ;PRG起始位置
CHR_TMP = $43    ;CHR起始位置
PRG_BLK = $44    ;PRG块大小
CHR_BLK = $45    ;CHR块大小
CHR_SIZE_TEM =$46    ;CHR容量大小
ROM_SEL = $47
ROM_LOCK = $48    ;合卡锁定

ROM_START:    ;选择块开始
 LDA MUSIC_PAGE
 BNE ROM_SELECT
 LDA SEL_NUM
 CMP SELF_ROM
 BCC ROM_SELECT
 INC SEL_NUM
ROM_SELECT:   ;子节目选择
 JSR PRG_SUM
 JSR CHR_SUM
 JSR PRG_BLK_ORA
 JSR CHR_BLK_ORA
 JSR LOCK
 
 LDA PRG_TMP  ;wmcc sBpp
 ASL
 CLC
 ADC CHR_TMP
 LSR
 LSR
 LSR
 LSR
 LSR
 AND #$04
 STA ROM_SEL
 
 LDA PRG_TMP  ;wmcc sBPP
 LSR
 LSR
 LSR
 AND #$03
 ORA ROM_SEL
 STA ROM_SEL
 
 LDA CHR_TMP  ;wmCC sBPP
 AND #$30
 ORA ROM_SEL
 STA ROM_SEL
 
 LDA PRG_BLK  ;wmCC SBPP
 ORA ROM_SEL
 STA ROM_SEL
 
 LDA CHR_BLK  ;wMCC SBPP
 ORA ROM_SEL
 STA ROM_SEL
 
 LDA ROM_LOCK  ;WMCC SBPP
 ORA ROM_SEL
 STA ROM_SEL
 
 LDA ROM_SEL
 STA $6000
 JMP ($FFFC)



PRG_SUM:    ;PRG起始位置累加计算
 LDA #$00
 STA PRG_TMP
 LDA SEL_NUM
 BEQ PRG_SUM_E
 LDX #$00
PRG_SUM_S:
 LDA PRG_TMP
 CLC
 ADC PRG_SIZE,X
 STA PRG_TMP
 INX
 CPX SEL_NUM
 BCC PRG_SUM_S
PRG_SUM_E:
 RTS

CHR_SUM:    ;CHR起始位置累加计算
 LDA #$00
 STA CHR_TMP
 LDA SEL_NUM
 BEQ CHR_SUM_E
 LDX #$00
CHR_SUM_S:
 LDA CHR_TMP
 CLC
 ADC CHR_SIZE,X
 STA CHR_TMP
 INX
 CPX SEL_NUM
 BCC CHR_SUM_S
CHR_SUM_E:
 RTS

PRG_BLK_ORA:    ;PRG块大小计算
 LDX SEL_NUM
 LDA #$08
 STA PRG_BLK
PRG_BLK_ORA_S:
 LDA PRG_SIZE,X
 CMP #$10
 BNE PRG_BLK_ORA_E
 LDA #$00
 STA PRG_BLK
PRG_BLK_ORA_E:
 RTS

CHR_BLK_ORA:    ;CHR块大小计算
 LDX SEL_NUM
 LDA #$40
 STA CHR_BLK
CHR_BLK_ORA_S:
 LDA CHR_SIZE,X
 CMP #$20
 BNE CHR_BLK_ORA_E
 LDA #$00
 STA CHR_BLK
CHR_BLK_ORA_E:
 RTS

LOCK:    ;合卡锁定位置
 LDA #$00
 STA ROM_LOCK
 LDX SEL_NUM
LOCK_S:
 LDA LOCK_DATA,X
 BEQ LOCK_E
 LDA #$80
 STA ROM_LOCK
LOCK_E:
 RTS




PRG_SIZE:    ;16KB PRG块容量
 .BYTE $10,$10,$10,$10

CHR_SIZE:    ;8KB CHR块容量
 .BYTE $20,$20,$20,$20
 
LOCK_DATA:    ;合卡锁定ROM
 .BYTE $00,$01,$01,$01
 
SELF_ROM:    ;当前菜单位置
 .BYTE $00


Attachments:
File comment: Its only a menu, no any games
[FC][合卡菜单][mapper52].zip [70.35 KiB]
Downloaded 18 times


Last edited by FlameCyclone on Fri Jun 02, 2017 7:57 am, edited 2 times in total.
Top
 Profile  
 
PostPosted: Fri Jun 02, 2017 6:36 am 
Offline
User avatar

Joined: Sun Dec 12, 2010 10:27 pm
Posts: 248
Location: Hong Kong
It is a violation of the forums' rules if your ROMs contain commercial games. You better remove the attachments or else forums mods will do that for you.


Top
 Profile  
 
PostPosted: Fri Jun 02, 2017 10:53 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 18527
Location: NE Indiana, USA (NTSC)
I notice the post has been edited. Does the attachment still contain games? If so, which?


Top
 Profile  
 
PostPosted: Fri Jun 02, 2017 1:55 pm 
Online
User avatar

Joined: Fri Nov 19, 2004 7:35 pm
Posts: 3882
Now the attachment only contains a menu with ripped NSF music. It previously contained three different working multicart roms.

_________________
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!


Top
 Profile  
 
PostPosted: Sat Jun 03, 2017 8:59 am 
Offline
User avatar

Joined: Sun Dec 12, 2010 10:27 pm
Posts: 248
Location: Hong Kong
Never downloaded the original attachments, but as indicated by the original content lists and each of them was about 1MB zipped they most likely contained games. I think it's settled now.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: Bing [Bot], Google [Bot], Google Adsense [Bot] and 7 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group