|
|
;[FC][忍者神龟3代标题选关程序]' H3 g& r7 H9 ~+ u0 ?, N; W' O
;作者:FlameCyclone 2017.4.12 i* J% C5 ~3 w
, t# i% I, C+ h) G% h1 |$ w% h8 ~1 \% ?. z4 u( {
;配置数据( n: G! N6 a; V
KEY_ADDR = $F8 ;按键地址
i/ ?7 t' k% JSTAGE_TEMP = $6010 ;关卡临时地址
$ D; F1 ~1 w( U) k; o' W5 BSTAGE_MAX = $0E ;最大关卡数' t% ?& O: u; X- j4 _
TITLE_A = $20 ;标题条件A) e0 _9 K2 f# j* I4 K* @4 s* L
TITLE_A_ON = $02 ;标题条件A有效状态判定
5 f3 C7 [% v6 o& n! `9 O# _TITLE_B = $21 ;标题条件B
( k3 w# _ E9 l3 q) ?' ^TITLE_B_ON = $03 ;标题条件B有效状态判定, q( s X0 D$ m& h
PPU_END = $FF ;PPU结束符
& s; t2 N; w- y7 K1 ]/ j ?8 \TIME_LAY = $4A ;标题显示延时地址! }! [+ A$ V8 t; K7 o% D
BUTTON_DEC = $42 ;关卡减少按键7 P: t6 c3 G( x- R- C$ k; p* F
BUTTON_INC = $81 ;关卡增加按键
3 ~& Y3 e$ z( _NUMBER_A = $06 ;数字A距离STAGE偏移量8 m) p) x% o5 z- @ J5 F* B
NUMBER_B = $08 ;数字B距离STAGE偏移量: @( K! j2 C0 W# \3 W
PPU_ADDR_H = $23 ;STAGE写入地址高位
% v3 z" {2 w( Z% ~: U5 FPPU_ADDR_L = $8C ;STAGE写入地址低位
' {$ N/ [) _$ I& z3 x! m/ Q) |" M, bCHAR_S = $A2 ;字符'S'
" ~* x7 S: p9 Y3 m# c3 DCHAR_T = $A3 ;字符'T'
! x+ ]& q# H4 |3 hCHAR_A = $90 ;字符'A'
- k) U7 i0 ?1 e: YCHAR_G = $96 ;字符'G'& t& P3 k. N/ ^, s* w# W2 `
CHAR_E = $94 ;字符'E'
% e- b" r/ v9 UCHAR_SPA = $00 ;字符空格
7 d \& O# r+ h- {5 X4 \2 m8 GCHAR_LIN = $AE ;字符'-'/ ~" i9 a2 ~* c; u+ h+ F
CHAR_O = $9E ;字符'o'
3 D& B" R; ^- rNUM_1 = $81 ;数字'1'
1 h) i5 V- ~3 LNUM_2 = $82 ;数字'2'
; N: }# L t) p1 v( sNUM_3 = $83 ;数字'3'0 u) \& T$ u- @: N
NUM_4 = $84 ;数字'4'
& q: ^, W- t( n; U( `9 ?& q, w$ @NUM_5 = $85 ;数字'5'8 y8 o' t `: y) F2 v
NUM_6 = $86 ;数字'6'' {$ @ L3 v- h* x
NUM_7 = $87 ;数字'7'
: b. i+ C' |( l& w* dNUM_8 = $88 ;数字'8'( G/ l- W" S/ Z
NUM_9 = $89 ;数字'9'# T2 t8 o/ y1 E b8 f+ U# U
NUM_0 = $80 ;数字'0'% ^2 u; S3 r2 p1 ~+ {
! H$ V: R0 l( _* f5 F
.ORG $F82A1 t# |) E* J3 l |' C% K/ |
JSR $E700
( s* P% r3 U3 ]$ ^& C5 ?
" t8 a9 y& ]# `9 n3 C; G
- p5 D% g! l; n3 i) V& z* o .ORG $E7003 y3 j& y) F% ] [3 G t
5 }# I4 t; I+ k8 X" q; B STY $4014 ;补上覆盖的精灵写入指令
' F4 \) F8 {' T+ sPROTECT_DATA: ;数据保护" N# i$ X5 f- v, o/ M' h! |/ S
PHA ;数据保护开始' s/ u9 d$ [* e5 v* h) i% |- p
TXA' D! l+ \( W# |6 i/ x4 U7 P1 b9 U) `: F
PHA
% B! {8 o; a# m$ r3 v( h. Q6 d0 G TYA' k1 W7 @; K& D) ^( H
PHA ;数据保护结束6 t1 Q6 j9 h. w! ]+ @4 u
LDA TITLE_A4 `. i& i3 S+ b1 `9 }# K2 A
CMP #TITLE_A_ON ;比较是否为标题画面; c0 M( U9 b/ I8 b7 M8 l! p
BNE RET
1 K' s, X6 E! w6 y f3 w LDA TITLE_B
& ~- n; ^3 G: Y4 H# } CMP #TITLE_B_ON ;比较是否为标题画面6 z' w0 w! f2 s2 R5 I( C
BEQ PPU_STAGE
9 \5 {$ @5 W9 m5 ]: p* ^- {# _RET: ;恢复数据0 D5 F+ @& d) A: p5 t
PLA ;恢复数据开始
9 o9 A4 b) x; a TAY
, s9 u0 I% b7 w8 ~! S PLA( e2 w" P J# i7 v
TAX% X% ]% f% K" H+ I" Z) C9 d- R
PLA ;恢复数据结束0 y; G! [( Z6 {& m& i: c) n
RTS ;返回! h: K* F2 q5 _) U5 w; Q" }9 _
PPU_STAGE: ;字符STAGE写入程序
3 l8 ]7 B, `6 q3 b3 k: d8 z6 Y LDA #PPU_ADDR_H
6 P* h! C. {7 U# T7 E, E STA $2006 ;设置PPU字符写入高位地址* y% k7 B* C; ?" a; j0 R |
LDA #PPU_ADDR_L
: ?# Q0 S }7 K8 ?# q; q, @! O STA $2006 ;设置PPU字符写入低位地址5 V0 S- K# h( L, v) X
LDX #$00
/ r9 k x3 g2 ?9 [PPU_STAGE_WROTE: ;写入STAGE字模/ y' p% M) g# u3 x8 k& f1 e
LDA STAGE_DATA,X b/ H0 |2 q2 v' h4 I
CMP #PPU_END ;判断是否写入结束4 M' \3 h# R3 u
BEQ STAGE_CMP
) ^$ }0 H& r; V3 B L STA $2007
C- C1 U0 t4 P3 p4 ]" z# Q; i INX
: v4 P% `# t; c$ W BCC PPU_STAGE_WROTE+ N* I3 l. d# `5 w/ X7 o" x& m
STAGE_CMP: ;选关操作
/ u' @: n2 L! z6 {- y$ A LDA STAGE_TEMP
( K7 L: A; n- N5 m2 t! M6 o( j& ~ CMP #$FF ;关卡数据初始化条件判断
7 K# h% a: g5 }5 V3 ?4 }: Y BNE KEY_B ]' F* d }3 v$ [
LDA #$00
" B5 Q6 b1 O' k' _' f; j STA STAGE_TEMP ;关卡数据初始化
% [+ s, U' l o Q3 w; K: k' \ |KEY_B: ;关卡减少
0 U2 g" d. s$ Q LDA KEY_ADDR% x/ T. L1 `. ~2 D5 X
AND #BUTTON_DEC ;按键B或左减关! {% J+ w c k& j9 A" P( E0 @
BEQ KEY_A( {3 M& M, G( q
LDA #$FF
) M+ n" j `* `! H STA TIME_LAY ;重设标题延时6 w8 O) U; k* L' o+ o
LDA STAGE_TEMP+ }% l$ J9 {' r1 }+ M- o: V) Y- _
CMP #$00 ;关卡比较+ \; _9 m0 h8 q1 i4 M O, ?6 P9 R
BEQ KEY_A! E! D" g: B$ _* @" ~
DEC STAGE_TEMP ;减关
' a" u! G! w- X8 e JSR MUSIC ;按键音效. y U- T6 T A5 p
KEY_A: ;关卡增加2 R/ E l: S# L6 R. D1 R
LDA KEY_ADDR
6 d) h3 l0 B. K0 R AND #BUTTON_INC ;按键A或右加关$ g4 ~; z" z6 y2 \, Y
BEQ PPU_NUM_WRITE, X+ f+ G9 b/ W
LDA #$FF6 }6 B- B z7 ~* W: j
STA TIME_LAY ;重设标题延时
/ j1 k* K& `6 z+ F; M5 @. p LDA STAGE_TEMP
* i& ?) N$ g! F/ g( }( }* d CMP #STAGE_MAX ;关卡比较: Z1 W$ L8 y4 a2 I
BEQ PPU_NUM_WRITE$ D# n# H" B- d; n$ O
INC STAGE_TEMP ;加关
. d% I7 K8 M' v JSR MUSIC ;按键音效3 a/ W& R5 R1 I) e) ]
PPU_NUM_WRITE: ;关卡数字写入地址$ Z; f7 u+ r) W) P, G% P/ _
LDA #PPU_ADDR_H% Y. R/ D/ b# Z5 U- P' ^- z7 O& T
STA $2006 ;设置PPU数字写入高位地址
5 V4 }4 a S" {4 Y( I w, m' S% g8 [7 {; R LDA #PPU_ADDR_L( i% z/ [' _8 I0 `2 J, P
CLC- H( J; `3 l1 p5 m8 ~* p
ADC #NUMBER_A. Z( M8 c: Y( d' Q, m& ~
STA $2006 ;设置PPU字符写入低位地址' C. C" _6 H7 o, |! U, T$ j
LDA STAGE_TEMP' h9 Q. p {' x% i8 A2 m/ F
TAX1 f. g0 P, v3 N; t5 o% T
LDA STAGE_D1,X ;写入数字/ b t, x" L& w- d( N" N$ @/ T
STA $2007
% s1 y) [: J# `1 g& s9 G7 n$ G" @8 j" K LDA #PPU_ADDR_H
- Y0 u' c0 v. @: ? STA $2006 ;设置PPU数字写入高位地址
& _7 w/ d4 p/ L* w$ h( i# |, E+ b LDA #PPU_ADDR_L3 m% e0 g0 h8 c; l! A5 Y: Q
CLC0 v+ M- H) S% ?2 X
ADC #NUMBER_B
2 D7 ~/ h. [6 c( m T4 R, A! H STA $2006 ;设置PPU字符写入低位地址
9 S* }, ~5 Y+ p9 i LDA STAGE_TEMP
/ d* @* l E2 A- Y" {4 m8 K TAX: }* ?& P' U& @% m
LDA STAGE_D2,X ;写入数字
/ c# o8 q) b/ z STA $2007
( x5 w' X/ w3 W: h+ u+ G/ BSTAHE_WRITE:& f. |4 j" ?" l3 W+ E
LDA STAGE_TEMP
, g/ z: {1 ^8 v STA $2D ;初始关卡写入
+ v+ P- }, ^) X& i" f- t; I# sPPU_RTS: ;恢复数据3 n' ?$ l$ `0 o9 ^# W; `: L
PLA
1 n) Z: o0 w' J5 O TAY
# t. Z" J$ V4 M. L PLA$ b7 J# ?! r. n/ Y/ i' c0 ^9 M
TAX
& r- y" W1 `8 N- ]7 J4 a0 R PLA
$ O5 E o O8 z( ]( i7 L RTS7 s* D: ?3 Y0 K
& z. S- o# @% J, Z5 `' G
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据
5 G. m+ _% E a# x- Y .BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END7 n+ Y; P; |3 i4 \9 ~% u
: }' q1 N# q. f( ~+ A7 M+ wSTAGE_D1: ;关卡数字- b) f9 {2 v' T. w+ T: d& m: `6 E6 G$ m
.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
( F5 z9 B% A% N' w% P6 a+ r E' q1 H( E8 y1 H4 x
STAGE_D2: ;场景数字3 ?. D) H! G; | ~4 V' \
.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
3 g% g5 |, X& k8 a: ?: u: H
, U) u5 V( t* g5 X; F
k3 H) d7 D, ?4 m# aMUSIC: ;按键音效
; }; C% ~+ u1 ^$ m9 z2 E5 B LDA #$3B ;音乐号
) A4 r* |2 Q. l/ D JSR $919E ;系统音乐调用
5 L; n3 V, O, h4 T! ` RTS |
|