[FC][忍者神龟3代标题选关程序]
;[忍者神龟3代标题选关程序];作者:FlameCyclone 2017.4.1
;配置数据
KEY_ADDR = $F8 ;按键地址
STAGE_TEMP = $6010 ;关卡临时地址
STAGE_MAX = $0E ;最大关卡数
TITLE_A = $20 ;标题条件A
TITLE_A_ON = $02 ;标题条件A有效状态判定
TITLE_B = $21 ;标题条件B
TITLE_B_ON = $03 ;标题条件B有效状态判定
PPU_END = $FF ;PPU结束符
TIME_LAY = $4A ;标题显示延时地址
BUTTON_DEC = $42 ;关卡减少按键
BUTTON_INC = $81 ;关卡增加按键
NUMBER_A = $06 ;数字A距离STAGE偏移量
NUMBER_B = $08 ;数字B距离STAGE偏移量
PPU_ADDR_H = $23 ;STAGE写入地址高位
PPU_ADDR_L = $8C ;STAGE写入地址低位
CHAR_S = $A2 ;字符'S'
CHAR_T = $A3 ;字符'T'
CHAR_A = $90 ;字符'A'
CHAR_G = $96 ;字符'G'
CHAR_E = $94 ;字符'E'
CHAR_SPA = $00 ;字符空格
CHAR_LIN = $AE ;字符'-'
CHAR_O = $9E ;字符'o'
NUM_1 = $81 ;数字'1'
NUM_2 = $82 ;数字'2'
NUM_3 = $83 ;数字'3'
NUM_4 = $84 ;数字'4'
NUM_5 = $85 ;数字'5'
NUM_6 = $86 ;数字'6'
NUM_7 = $87 ;数字'7'
NUM_8 = $88 ;数字'8'
NUM_9 = $89 ;数字'9'
NUM_0 = $80 ;数字'0'
.ORG $F82A
JSR $E700
.ORG $E700
STY $4014 ;补上覆盖的精灵写入指令
PROTECT_DATA: ;数据保护
PHA ;数据保护开始
TXA
PHA
TYA
PHA ;数据保护结束
LDA TITLE_A
CMP #TITLE_A_ON ;比较是否为标题画面
BNE RET
LDA TITLE_B
CMP #TITLE_B_ON ;比较是否为标题画面
BEQ PPU_STAGE
RET: ;恢复数据
PLA ;恢复数据开始
TAY
PLA
TAX
PLA ;恢复数据结束
RTS ;返回
PPU_STAGE: ;字符STAGE写入程序
LDA #PPU_ADDR_H
STA $2006 ;设置PPU字符写入高位地址
LDA #PPU_ADDR_L
STA $2006 ;设置PPU字符写入低位地址
LDX #$00
PPU_STAGE_WROTE: ;写入STAGE字模
LDA STAGE_DATA,X
CMP #PPU_END ;判断是否写入结束
BEQ STAGE_CMP
STA $2007
INX
BCC PPU_STAGE_WROTE
STAGE_CMP: ;选关操作
LDA STAGE_TEMP
CMP #$FF ;关卡数据初始化条件判断
BNE KEY_B
LDA #$00
STA STAGE_TEMP ;关卡数据初始化
KEY_B: ;关卡减少
LDA KEY_ADDR
AND #BUTTON_DEC ;按键B或左减关
BEQ KEY_A
LDA #$FF
STA TIME_LAY ;重设标题延时
LDA STAGE_TEMP
CMP #$00 ;关卡比较
BEQ KEY_A
DEC STAGE_TEMP ;减关
JSR MUSIC ;按键音效
KEY_A: ;关卡增加
LDA KEY_ADDR
AND #BUTTON_INC ;按键A或右加关
BEQ PPU_NUM_WRITE
LDA #$FF
STA TIME_LAY ;重设标题延时
LDA STAGE_TEMP
CMP #STAGE_MAX ;关卡比较
BEQ PPU_NUM_WRITE
INC STAGE_TEMP ;加关
JSR MUSIC ;按键音效
PPU_NUM_WRITE: ;关卡数字写入地址
LDA #PPU_ADDR_H
STA $2006 ;设置PPU数字写入高位地址
LDA #PPU_ADDR_L
CLC
ADC #NUMBER_A
STA $2006 ;设置PPU字符写入低位地址
LDA STAGE_TEMP
TAX
LDA STAGE_D1,X ;写入数字
STA $2007
LDA #PPU_ADDR_H
STA $2006 ;设置PPU数字写入高位地址
LDA #PPU_ADDR_L
CLC
ADC #NUMBER_B
STA $2006 ;设置PPU字符写入低位地址
LDA STAGE_TEMP
TAX
LDA STAGE_D2,X ;写入数字
STA $2007
STAHE_WRITE:
LDA STAGE_TEMP
STA $2D ;初始关卡写入
PPU_RTS: ;恢复数据
PLA
TAY
PLA
TAX
PLA
RTS
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
STAGE_D1: ;关卡数字
.BYTE NUM_1,NUM_2,NUM_2,NUM_3,NUM_4,NUM_4,NUM_5,NUM_5,NUM_6,NUM_6,NUM_7,NUM_7,NUM_8,NUM_8,NUM_8
STAGE_D2: ;场景数字
.BYTE NUM_1,NUM_1,NUM_2,NUM_1,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_1,NUM_2,NUM_3
MUSIC: ;按键音效
LDA #$3B ;音乐号
JSR $919E ;系统音乐调用
RTS 对于一个小白来说。。。这都写的什么啊。。 完全看不懂哦、、、、、、 天书{:4_112:} 应该是代码吧,一般人看不懂
页:
[1]