yandagui 发表于 2017-4-1 18:08:07

[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

283167657 发表于 2017-4-1 21:01:26

对于一个小白来说。。。这都写的什么啊。。

liujunbtx 发表于 2017-4-2 00:17:11

完全看不懂哦、、、、、、

文子萝卜 发表于 2017-4-2 07:46:47

天书{:4_112:}

cheap9003 发表于 2017-4-2 10:04:52

应该是代码吧,一般人看不懂
页: [1]
查看完整版本: [FC][忍者神龟3代标题选关程序]