|
|
;[FC][忍者神龟3代标题选关程序]& Z: J7 x- M# P, K
;作者:FlameCyclone 2017.4.13 z& C8 G: b/ @5 `/ f
4 S& H! x9 k) j: S6 f
: Y8 v/ A2 ]" ^+ E& t5 p;配置数据
5 B8 n7 [8 X. j" _- t- s- A' aKEY_ADDR = $F8 ;按键地址7 M4 |' \ V7 j U1 C q) e6 u
STAGE_TEMP = $6010 ;关卡临时地址
& @; g+ ^ q! z* f# Z; [STAGE_MAX = $0E ;最大关卡数
3 }$ {$ l7 E5 O; H* h8 MTITLE_A = $20 ;标题条件A+ {- v5 G) ?1 K
TITLE_A_ON = $02 ;标题条件A有效状态判定
Z7 p1 b% A" S- UTITLE_B = $21 ;标题条件B# L( ^/ s& v2 b2 r
TITLE_B_ON = $03 ;标题条件B有效状态判定
$ }. a- E F% a# J0 B. A! G. A( {% \0 HPPU_END = $FF ;PPU结束符
8 q" ~8 P+ U, F' pTIME_LAY = $4A ;标题显示延时地址
7 a) c# u m# B5 GBUTTON_DEC = $42 ;关卡减少按键
, z# L* g D7 m5 mBUTTON_INC = $81 ;关卡增加按键
- W ^- L$ s4 u- _$ jNUMBER_A = $06 ;数字A距离STAGE偏移量2 g( f( ~% B4 t. ?5 h9 v# A0 q% q
NUMBER_B = $08 ;数字B距离STAGE偏移量; g+ _' ]1 m$ V) U
PPU_ADDR_H = $23 ;STAGE写入地址高位
& ` U8 p/ D3 d$ y# R* [3 LPPU_ADDR_L = $8C ;STAGE写入地址低位9 Y5 N D1 j" K/ q S" J
CHAR_S = $A2 ;字符'S'
- U j! O* C4 ?7 jCHAR_T = $A3 ;字符'T'
7 Y- q. D" P. \/ R8 c6 _1 C- E3 VCHAR_A = $90 ;字符'A'
, }1 w1 k! J( g% V# J+ Q: T+ BCHAR_G = $96 ;字符'G'' u- v' d6 w! z8 c$ u
CHAR_E = $94 ;字符'E'' j8 d4 X8 P* x$ y
CHAR_SPA = $00 ;字符空格
% a2 S* ~9 E7 b5 O; t5 @5 tCHAR_LIN = $AE ;字符'-'4 ]9 R' \: U( P4 c* p' {
CHAR_O = $9E ;字符'o'+ ]* s% g2 f4 B" D
NUM_1 = $81 ;数字'1'& ^' r) D. j$ N3 J9 V" }2 R& X: \, `8 W
NUM_2 = $82 ;数字'2'
1 y" Z& |+ u& o0 FNUM_3 = $83 ;数字'3'9 a! N J/ p. ^( i
NUM_4 = $84 ;数字'4'
. B7 B2 _* s9 U7 ?* A. l pNUM_5 = $85 ;数字'5'" C, S: R( h2 N/ f8 y6 Y
NUM_6 = $86 ;数字'6'" ?" D! R9 h9 M% `$ c3 S
NUM_7 = $87 ;数字'7'2 g; H( c8 H0 Q: p* y
NUM_8 = $88 ;数字'8'% R* r9 R f8 D: \9 M( Q
NUM_9 = $89 ;数字'9'$ V7 x! _: F0 x, v! F" M
NUM_0 = $80 ;数字'0'
; L5 }) z/ I1 G3 A/ F% ~5 Z* H: w( i* x8 Q6 M
.ORG $F82A
4 g7 h) k; ~ N( j2 e" M4 I D' N JSR $E700& F8 z" `- q. V$ H
* y' M! t- B) R$ b8 j
1 w9 O! t% o5 V6 S9 N; J .ORG $E700
" f0 V& f7 [9 l7 r+ m) P
0 f9 x* m2 d8 ^* r; M/ X% | STY $4014 ;补上覆盖的精灵写入指令
8 i2 n: M6 @) O. \( k) sPROTECT_DATA: ;数据保护
% {1 A5 A- S, t, I" l, S PHA ;数据保护开始
9 a. C( V* a) A TXA
2 P5 e" @% E' K j6 L+ [ PHA2 C X( a% ?4 K6 y* ?+ ]. r
TYA
; P5 b, k7 B* |- l2 n+ ?) Z PHA ;数据保护结束* M+ {* o# ?! ?- ?3 Z9 Q
LDA TITLE_A. C+ G5 {! B( k+ M% S, w8 q5 U2 v
CMP #TITLE_A_ON ;比较是否为标题画面 b) ~* Z- P% k7 ]8 C, I
BNE RET8 j7 K1 T( B6 b# |" z- Z
LDA TITLE_B
7 K7 J8 w' ?& i CMP #TITLE_B_ON ;比较是否为标题画面9 }! B: n o# m6 j4 r
BEQ PPU_STAGE0 |- K) N6 j9 H/ H
RET: ;恢复数据
) O3 X, [& S$ g$ ~* @+ W PLA ;恢复数据开始2 E# R8 X/ p7 _) \; \8 Y8 ?
TAY! W, ~( k& r/ r
PLA
+ N5 {8 t' _5 O3 v TAX
& f" ~3 Z8 X7 c! h8 m) Y7 y PLA ;恢复数据结束
7 X9 ~7 V* L- n9 p$ b& w0 \ RTS ;返回7 O0 b9 }: U8 d# O
PPU_STAGE: ;字符STAGE写入程序1 ?, y3 E2 P5 y% _- I& k
LDA #PPU_ADDR_H * I* r& z1 \# A! u6 n7 c) \
STA $2006 ;设置PPU字符写入高位地址) X/ C1 u T! P& l2 n1 z: W+ \
LDA #PPU_ADDR_L2 S- a4 I O8 `; E, E. b" Z3 \7 z
STA $2006 ;设置PPU字符写入低位地址
- z$ ^) ~$ `/ O+ m LDX #$009 \2 F% N4 }8 u- a# B) `
PPU_STAGE_WROTE: ;写入STAGE字模
, ]$ {* M1 F4 N& I9 j" }1 \1 W' q; ? LDA STAGE_DATA,X
* K7 k: ^! r& m8 ^6 L; j CMP #PPU_END ;判断是否写入结束
/ A& b) V& Q- b# }6 E BEQ STAGE_CMP
5 m" |9 P; w* M& J6 z6 Q, G$ ? STA $20079 V- t# _6 G! S5 H
INX; ]0 }' I" `5 J
BCC PPU_STAGE_WROTE! D5 i2 Y" r5 k, g& g
STAGE_CMP: ;选关操作
3 j1 [, G& D, O" Q. x. f; l) ?6 A LDA STAGE_TEMP% u$ U0 X4 o9 R/ o/ j# Z
CMP #$FF ;关卡数据初始化条件判断
/ s. q$ k# @# k \6 X# q BNE KEY_B
b$ Z9 t% q3 p, b+ f- N LDA #$009 O- h5 M- B j6 _$ J0 N" r& Z9 ~
STA STAGE_TEMP ;关卡数据初始化+ ?4 I1 E" j" I0 i. ~" [
KEY_B: ;关卡减少
( x& O3 m6 r+ r' N7 G% T! D+ ^; m7 o LDA KEY_ADDR
, x* t1 L4 E1 z7 A" _" r AND #BUTTON_DEC ;按键B或左减关. P8 g7 a$ J6 c) b5 q9 K
BEQ KEY_A
; b* n/ ?2 \! t; V LDA #$FF1 x3 b2 z* W: ]1 ~$ J* C
STA TIME_LAY ;重设标题延时' t( _! F" ~$ [9 j
LDA STAGE_TEMP- I8 ]0 x! Y' z" _
CMP #$00 ;关卡比较
W5 W1 N2 I& s+ w' \ BEQ KEY_A @/ V: v/ m- @2 ` z
DEC STAGE_TEMP ;减关# Y- Q/ g% }+ ?4 J: u, ^
JSR MUSIC ;按键音效6 {, a5 w( w/ o0 v8 |
KEY_A: ;关卡增加' `2 |' D! k% ]6 B4 H) A& p
LDA KEY_ADDR
4 G3 [; \, z( b6 R) D AND #BUTTON_INC ;按键A或右加关( k& a5 O6 c5 V6 f
BEQ PPU_NUM_WRITE% d- s" G; P! i
LDA #$FF# R5 `7 X# u& O' H& v' @
STA TIME_LAY ;重设标题延时
6 ?4 f2 |) G6 D: J. Q9 j+ Z6 B; t LDA STAGE_TEMP0 f, n' k" b0 i3 _( p: ~# ?5 z
CMP #STAGE_MAX ;关卡比较0 h5 t# Z2 Q% @$ L! j2 V9 O
BEQ PPU_NUM_WRITE
3 l0 J! C0 w1 G/ y, R INC STAGE_TEMP ;加关
& T, p7 M2 _! ?3 W' p JSR MUSIC ;按键音效
. a: i5 b0 l6 ]/ d: z; ZPPU_NUM_WRITE: ;关卡数字写入地址
9 N$ g- i" u: Y! A& t8 ? LDA #PPU_ADDR_H7 k* f o( a+ T* ]2 i
STA $2006 ;设置PPU数字写入高位地址
1 r' Y6 [( L% ]% g, x* ` LDA #PPU_ADDR_L
7 ?4 O% g" b: F0 p9 Z) Q4 | CLC8 G+ n) ?7 S" Z( v
ADC #NUMBER_A
0 y; ]7 U9 u; I) R# A _ STA $2006 ;设置PPU字符写入低位地址
! \& q9 L& r; L9 N* r) Y4 s1 f LDA STAGE_TEMP
( B, Q1 u! [; a TAX( O. ~ }" I# b2 {
LDA STAGE_D1,X ;写入数字
' j }% ?* J$ [2 w9 t STA $2007
* p# @; J- j+ l/ w d, K b. ] LDA #PPU_ADDR_H/ C! W3 u( l- r, W, ^0 z( C
STA $2006 ;设置PPU数字写入高位地址
2 f7 V3 k6 w" g8 W" y- V" |2 q' N- O LDA #PPU_ADDR_L7 V! b& M5 \" N* f
CLC# i9 N& O! q7 ]4 m
ADC #NUMBER_B
- h8 u m* S* k1 B S4 K& M. j STA $2006 ;设置PPU字符写入低位地址
, s9 }% X M; k+ e LDA STAGE_TEMP! ]/ }; |% `1 L' D5 R( i- I
TAX
( g5 q. x: p' k2 g LDA STAGE_D2,X ;写入数字
# m8 m( j; V, q3 J STA $2007
2 T, S/ {7 A- [4 d3 tSTAHE_WRITE:
4 o4 {4 i" i+ @" R' R LDA STAGE_TEMP
5 _7 Q1 ?) h' g3 ~! V, ~/ b' E/ W STA $2D ;初始关卡写入
* j6 ?& y: n1 F2 f7 K2 PPPU_RTS: ;恢复数据
, I% h- a0 [) Q1 r) H0 N; G( ^" J PLA7 a7 N# n$ a: {! a
TAY
: u6 u9 u- K; b7 {( @4 F5 v2 U PLA7 ^4 C8 G0 ]& S% ?0 c6 B9 v
TAX
" _* M6 G2 G( l* e* |& N2 B" C PLA
i8 u' W1 [0 j' G RTS
/ f: H. ^. S* `4 s6 z" g" [& |! J% G- S % I/ e& w$ j" r1 O* P4 z
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据. Y7 R1 y% Z. p4 N
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
$ u j5 `) F3 K, @8 C; y) C+ g. s
" Q( e2 E& y- L g' D6 I7 ~! w$ t' HSTAGE_D1: ;关卡数字1 T4 h! @8 N1 `
.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_89 F6 T8 D4 X7 i
: ~& c& Y( A* X2 ^8 l* ]STAGE_D2: ;场景数字
) M4 v- v. `; A* B2 J. { .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_34 a9 l: ]8 R! r& F/ p5 s; p1 T6 W2 T
7 X* \; c2 ?$ M! h* B" M
/ p0 b' ?& C9 l6 X! f( CMUSIC: ;按键音效
- Q/ g5 l7 W7 w( a: H% E LDA #$3B ;音乐号
: r ?5 v2 J. }) M$ q JSR $919E ;系统音乐调用/ a9 H8 g2 r# g
RTS |
|