|
|
;[FC][忍者神龟3代标题选关程序]
, A3 D1 R w& @; m;作者:FlameCyclone 2017.4.14 _2 M& D, @7 [& ~& V
1 \( Z: |4 o" T( C: c% {) T' Q" q* {/ {! w
;配置数据
9 M9 z1 y" C. K1 Z0 e$ N. NKEY_ADDR = $F8 ;按键地址+ \2 ?( l+ Z- E( p7 v
STAGE_TEMP = $6010 ;关卡临时地址
/ n5 C) t7 p5 R0 ]STAGE_MAX = $0E ;最大关卡数
1 A, z @ r; J! |" |TITLE_A = $20 ;标题条件A
/ Z& o* _# \% [. [1 b# ]; OTITLE_A_ON = $02 ;标题条件A有效状态判定
4 ~7 n# k+ V* E: OTITLE_B = $21 ;标题条件B; @5 [; E: h2 f, e* u& @
TITLE_B_ON = $03 ;标题条件B有效状态判定
5 ?7 O8 J o. v! D7 NPPU_END = $FF ;PPU结束符
0 v& h+ P r/ g! R9 gTIME_LAY = $4A ;标题显示延时地址6 \( m8 |0 H5 L7 f! K
BUTTON_DEC = $42 ;关卡减少按键
* u, t4 j3 v; O) v9 F% ?* [ D: wBUTTON_INC = $81 ;关卡增加按键
/ q+ s1 k- L" p1 y/ w+ GNUMBER_A = $06 ;数字A距离STAGE偏移量9 n7 \8 n8 W$ b: K
NUMBER_B = $08 ;数字B距离STAGE偏移量4 \# N( f- r: N4 c- d8 r
PPU_ADDR_H = $23 ;STAGE写入地址高位
$ U( _* r- z j# R9 vPPU_ADDR_L = $8C ;STAGE写入地址低位+ U) b5 L6 O+ i( z3 {+ a% t7 t
CHAR_S = $A2 ;字符'S'
, M& ]2 I. j4 v. T( G* ICHAR_T = $A3 ;字符'T'9 h6 Y3 [9 ^% g2 E4 |, t6 L
CHAR_A = $90 ;字符'A'
$ g, D1 u- m$ r; H9 C0 r' h! mCHAR_G = $96 ;字符'G'
) r" i! v- q; y4 iCHAR_E = $94 ;字符'E'5 k$ A C7 A; [5 o
CHAR_SPA = $00 ;字符空格- V9 q3 w' i& c' N) s: {! M$ m
CHAR_LIN = $AE ;字符'-'# ?9 z; U" d5 A# b, i. I1 }7 p
CHAR_O = $9E ;字符'o'
* c( o# i) ^2 `% T. INUM_1 = $81 ;数字'1'5 H$ C+ I5 @5 ^: p
NUM_2 = $82 ;数字'2'5 F" y) J1 C/ y O
NUM_3 = $83 ;数字'3' `! c: t: |6 c1 H2 T; j: Z9 ]
NUM_4 = $84 ;数字'4'
. b7 a5 L( _8 l7 X- P7 ENUM_5 = $85 ;数字'5'; M% b6 x2 l9 o$ q1 f
NUM_6 = $86 ;数字'6'+ d2 n3 t9 C) c# G# _( a' L3 l
NUM_7 = $87 ;数字'7'
# |# ^! `* r1 ANUM_8 = $88 ;数字'8'* |9 D0 h1 C# j% q
NUM_9 = $89 ;数字'9'/ v1 u9 w& [4 T. h( ?4 T
NUM_0 = $80 ;数字'0'- T8 b: Y( n( Y. b2 v5 w1 ]0 ~
* Q9 {, F% m! g ~: N( _) u
.ORG $F82A
" v/ Q5 e: }5 s$ L; ^' \8 A JSR $E700
- G2 M+ {8 V! F' [3 Y6 r 6 o( _3 Q G+ {, W/ L2 M) t5 V
. x, U7 V6 ?. y$ \" R
.ORG $E700
" m0 Y0 q8 ~. I4 k
7 U: Z8 J! n) [; D* l STY $4014 ;补上覆盖的精灵写入指令
$ c+ N) N h2 ^& o e2 CPROTECT_DATA: ;数据保护
, S4 y9 F9 K" E. l1 q: \& X PHA ;数据保护开始) ~6 _% S7 W( u+ z" G
TXA* c7 w& J$ ^* ?; ~3 W8 E4 J" B
PHA
i' O+ l- @) M8 V, w2 i' Y TYA% V1 W% j; k$ U* I- u7 }9 ~, K/ o& P
PHA ;数据保护结束* j* X: a8 P, E3 P& {
LDA TITLE_A! Y% L8 f9 Q( Y$ v" \) A+ i
CMP #TITLE_A_ON ;比较是否为标题画面- f3 x4 M4 ]5 e+ c) K$ Z6 x# C5 P
BNE RET( Z7 [% c2 M0 @. L4 T
LDA TITLE_B
5 F3 f3 X/ p: s* k$ @ CMP #TITLE_B_ON ;比较是否为标题画面
8 W6 p2 a. Z O' F BEQ PPU_STAGE# k' D$ U3 A2 t7 `% d" g0 o
RET: ;恢复数据
3 Z- V) P. q6 S( l, \ PLA ;恢复数据开始+ w {$ i) ]; s' M$ e% s) ~
TAY
6 g X5 G: {- x" V PLA
3 M3 ?- N8 c0 i9 N, K TAX. ~, L. y0 `+ E' t
PLA ;恢复数据结束
7 \/ V6 w3 Y% ^# D. V/ J6 V1 g1 | RTS ;返回- Z% w, t$ k6 ~) \/ a# |4 ^& Y* H
PPU_STAGE: ;字符STAGE写入程序$ J) m8 C7 R3 ^. R; t+ p6 s. [+ S
LDA #PPU_ADDR_H 4 ?# i% Q+ Z/ ?' _' e2 C* r$ V7 F
STA $2006 ;设置PPU字符写入高位地址
% g+ j B+ H4 S LDA #PPU_ADDR_L
- @2 `( N# t5 | STA $2006 ;设置PPU字符写入低位地址
+ F8 g3 c4 O& K$ c LDX #$00
8 z, a) ^3 T1 b9 i6 V) cPPU_STAGE_WROTE: ;写入STAGE字模
( T9 O5 z+ F/ |9 {: J LDA STAGE_DATA,X
: c+ F& ]# p: [3 B" V" y* z CMP #PPU_END ;判断是否写入结束
: l$ d7 {3 l! e( z6 P BEQ STAGE_CMP3 G# M6 ~0 Z1 W& F1 ~# y
STA $2007$ [. C' ~0 [2 y2 ]+ H" M
INX
+ l8 z% k9 I9 u: s4 I9 C3 P, O BCC PPU_STAGE_WROTE
0 j u6 u7 C: e. p" z+ U. y# a ASTAGE_CMP: ;选关操作" _: p& F. ]/ @
LDA STAGE_TEMP
4 L' A! T& h& J, ?" O4 r CMP #$FF ;关卡数据初始化条件判断
+ Q" ]$ [+ p7 H; g; u BNE KEY_B9 L! a2 _3 \+ m5 G- n
LDA #$00
_( H; n) w P6 P4 I0 d+ O STA STAGE_TEMP ;关卡数据初始化
1 Y% O2 \- F5 B5 o) |' x) } UKEY_B: ;关卡减少6 k8 j* x! J7 ]& p5 Z0 Q
LDA KEY_ADDR
! Y! ~( R( |8 w5 w5 c. g( k+ c9 d AND #BUTTON_DEC ;按键B或左减关7 F. g+ R( e) {- \" F: v# k" f$ y% s/ q; Q
BEQ KEY_A- y; x+ n/ G C5 G. ~
LDA #$FF
+ B( _ T% h0 p$ P# B0 `6 C% } STA TIME_LAY ;重设标题延时1 O. Z; T4 M' U; n/ v
LDA STAGE_TEMP
# T. s# F) j' A8 p( a+ K CMP #$00 ;关卡比较- w+ [5 v; C. Y1 j; m% j3 ?& n
BEQ KEY_A
4 v: l6 v: B3 Z DEC STAGE_TEMP ;减关
* Z. Z) s& p8 l' j; t JSR MUSIC ;按键音效
& P# \1 H q2 ]( W; {KEY_A: ;关卡增加* R- \7 ^6 m+ Q; x
LDA KEY_ADDR% R4 ?& q( J6 u' I
AND #BUTTON_INC ;按键A或右加关4 T; V, T& ^3 a8 b, G
BEQ PPU_NUM_WRITE% b0 I9 H/ d$ e3 y R1 D1 A( i+ k
LDA #$FF
7 e. ^; b A( d3 P' Q- h5 c: b STA TIME_LAY ;重设标题延时
9 `" g. K& j: x# K LDA STAGE_TEMP
& M" V/ [, e; u# P* Q CMP #STAGE_MAX ;关卡比较9 b& S2 ~. e$ m4 G8 @8 c
BEQ PPU_NUM_WRITE
9 D* T- \' R" d5 {3 [# K INC STAGE_TEMP ;加关
; W. T2 a6 z# f: i" E' R( E JSR MUSIC ;按键音效5 f0 O' z0 ~ d$ }. O* h
PPU_NUM_WRITE: ;关卡数字写入地址
+ d0 v% r7 g% u: L LDA #PPU_ADDR_H: {7 T0 _1 x c' G+ ^
STA $2006 ;设置PPU数字写入高位地址
% [. {0 e( X7 {! h, x% O- {9 z1 Y8 N" q LDA #PPU_ADDR_L {! M* i5 N4 E. F) u9 z
CLC* W$ f8 h) ` M$ _6 i
ADC #NUMBER_A
4 z2 m2 D0 ^, a% [% B+ n& G( Z# W STA $2006 ;设置PPU字符写入低位地址
; _" I; D; a& \5 {. k* { LDA STAGE_TEMP
# j9 M' ^" P7 S TAX
1 l% w J; c X, k* v5 p LDA STAGE_D1,X ;写入数字
! M3 M7 i) Q3 a+ f STA $2007
$ _- c" T' h, e5 } R LDA #PPU_ADDR_H
1 A8 M0 _+ }3 @7 U+ M s STA $2006 ;设置PPU数字写入高位地址% d. A8 r3 |6 i- @% I; w1 R
LDA #PPU_ADDR_L! q8 W$ ^% D; x, c# |5 t; O# W
CLC
4 c1 f+ S5 f k ADC #NUMBER_B6 v: h2 d+ H, z
STA $2006 ;设置PPU字符写入低位地址5 d3 a y) U/ j" V4 c. i- ?4 K4 q. d! O
LDA STAGE_TEMP8 J* c) Y, H9 j0 G5 d9 b$ a
TAX! S) A- R* P7 Y
LDA STAGE_D2,X ;写入数字
" U6 |/ C/ K9 b J0 C0 Y STA $20070 I& r+ v" C9 }4 d* q' o
STAHE_WRITE:9 @; b! l# g3 b i3 g/ a
LDA STAGE_TEMP
5 Q( u) v; g' X, C/ O1 k' m+ V0 w STA $2D ;初始关卡写入
6 b& X5 b9 N+ X# H$ ]! P! NPPU_RTS: ;恢复数据
% J' R; e8 W/ o" }% p' L0 x$ q* I# i PLA
, S( n' L/ \: l) {. `3 {; @ TAY0 Q* v9 \( p* t8 @6 t
PLA2 ^ M7 o+ ?4 s. ]8 l
TAX5 u$ B9 c2 ?' x5 z0 t
PLA2 K2 r- `* a( ] H. F+ g
RTS
9 }' w0 M7 n }8 S, W" Q ( V1 r1 `' t+ F6 c2 s% [3 a
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
3 [' B7 a% s2 \4 F7 x0 D- f) [ .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END, w3 g4 \9 Y6 S2 W7 m
) _0 d! @( n! g+ b' b$ YSTAGE_D1: ;关卡数字# i/ u2 h+ T) G! r# {* r- C
.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
! U$ [3 G5 d: ]9 s/ ~. K0 V6 ~; }0 V0 T, B: Q
STAGE_D2: ;场景数字
2 N. h# G2 _3 l! d .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
" q5 J& d4 \5 J) ?% k, r9 I 0 I) ]- l6 f$ N7 n! D
) {. k2 j0 \7 j) _; B% jMUSIC: ;按键音效) q1 n& U; m/ g9 T
LDA #$3B ;音乐号
! d; `' a1 f _ i, |1 b6 } JSR $919E ;系统音乐调用
" g& c/ d) I1 V- T$ q/ c RTS |
|