|
;[FC][忍者神龟3代标题选关程序]( c( ~( I& d* h2 P, f9 N1 v, w: d1 I
;作者:FlameCyclone 2017.4.19 [% h" o1 _! g$ ]3 p
, }5 H! l1 Z9 [* ~) e" {; `# h
7 O" A9 o# |$ I+ a8 g# b) D;配置数据& u# h6 x' c/ y2 n+ k
KEY_ADDR = $F8 ;按键地址
' @# {/ @5 s% K" kSTAGE_TEMP = $6010 ;关卡临时地址
' X0 R4 J( P; o" X0 f) qSTAGE_MAX = $0E ;最大关卡数
* `1 q$ l r+ C7 l( JTITLE_A = $20 ;标题条件A% t/ J( [8 e- Q1 J
TITLE_A_ON = $02 ;标题条件A有效状态判定
+ w* R8 a0 B/ J4 M( b, ATITLE_B = $21 ;标题条件B5 L4 O5 {* k! Q: P6 K7 Q+ H
TITLE_B_ON = $03 ;标题条件B有效状态判定. t9 u- V% N+ T% ]8 W
PPU_END = $FF ;PPU结束符 e. u7 K, }$ U, Q
TIME_LAY = $4A ;标题显示延时地址! I- _4 A' V, {8 a, b& l
BUTTON_DEC = $42 ;关卡减少按键6 C: b! a' {# A: B! G
BUTTON_INC = $81 ;关卡增加按键) A! R8 H, A% t- s( S$ S- ^+ M3 t+ P
NUMBER_A = $06 ;数字A距离STAGE偏移量- o1 V; P- b; v% T% @+ U, i: s
NUMBER_B = $08 ;数字B距离STAGE偏移量
+ J7 I: u; F! ^PPU_ADDR_H = $23 ;STAGE写入地址高位
. U2 M2 q" X" R0 T0 {, \' zPPU_ADDR_L = $8C ;STAGE写入地址低位
1 f) q8 J0 R: }. h1 W$ `3 _' eCHAR_S = $A2 ;字符'S'
! ^2 \$ @9 {4 @' Z/ c7 ]CHAR_T = $A3 ;字符'T'* e. X# O" M" j, s
CHAR_A = $90 ;字符'A'" I) i& ?5 ]( \8 o, Y% a
CHAR_G = $96 ;字符'G'( D6 L9 y" f$ A/ c/ S
CHAR_E = $94 ;字符'E'
7 ]7 I7 C- }7 P+ d. J$ k) O. ]CHAR_SPA = $00 ;字符空格
, N0 z& v: n+ C: Q* {. b5 o7 _CHAR_LIN = $AE ;字符'-'
! _0 y1 ]* m0 pCHAR_O = $9E ;字符'o'
8 c" Y: }) q( z/ M9 o4 n! SNUM_1 = $81 ;数字'1'
& I c# s1 o1 P6 Y h8 YNUM_2 = $82 ;数字'2'/ S& r1 Z, Z/ r8 m
NUM_3 = $83 ;数字'3'+ k0 W* {6 Q, U' z. H
NUM_4 = $84 ;数字'4'
3 d0 b5 O) @# P7 }; SNUM_5 = $85 ;数字'5'
# B* {4 x, u& gNUM_6 = $86 ;数字'6'
, b" C4 {, c4 G. ~, E) N% p5 D+ cNUM_7 = $87 ;数字'7'" ^2 [6 e& j$ Y' I4 z4 q
NUM_8 = $88 ;数字'8'1 t A; L, F* @7 x) L
NUM_9 = $89 ;数字'9'+ e' O- w p. d0 q( m4 z# E4 M
NUM_0 = $80 ;数字'0'6 s. M/ `0 H) M/ v9 v/ L
: P7 N/ i% @' M& { _4 }/ v
.ORG $F82A
) m6 l( d0 f m1 f- U' y2 } JSR $E700! r9 o9 P0 b' J% h0 `% J, M
7 X& z% H/ ]! r2 |" a* G+ p3 G1 t( A
& A; p8 T9 T- v4 s
.ORG $E700
% D$ P6 \# K) l% e+ H9 I# ~3 I- D* u 6 `. o8 A+ w# i, A/ d- e
STY $4014 ;补上覆盖的精灵写入指令
0 n2 m2 d$ T- ] Q |PROTECT_DATA: ;数据保护
1 L; w# b2 l" Z( c- |) l! S8 Z PHA ;数据保护开始" g/ x1 w% i3 j+ ?# g4 Y
TXA
! n3 R' p$ ~8 g: _ PHA4 c% F6 y/ C1 q6 m9 I! p7 o: u+ F
TYA7 S# I/ x4 ` ?& v% j# S
PHA ;数据保护结束: C% l6 f( Q. s* D$ [
LDA TITLE_A* w4 R' ]: L$ L: g2 @
CMP #TITLE_A_ON ;比较是否为标题画面3 o5 D) ?5 v* _; k# F. E
BNE RET3 ?# P/ N; f/ W
LDA TITLE_B+ r! N- X# i2 o+ \
CMP #TITLE_B_ON ;比较是否为标题画面, z. W6 ]" T+ B. [6 z
BEQ PPU_STAGE7 C" x6 |& i0 N- ^' J( v3 ]) T
RET: ;恢复数据
A- |! }) L7 d* P' \( a PLA ;恢复数据开始
( r2 K6 ^% `6 G3 ~8 V9 u+ z TAY
7 x8 a3 h' X0 U6 z/ ~ PLA
6 j" n4 H& P/ N4 _ TAX
' z* l. M Y+ N PLA ;恢复数据结束
4 j1 o P7 |) K0 D RTS ;返回
& S& z. j: U) T- G2 K* GPPU_STAGE: ;字符STAGE写入程序6 H. l- W) k: K. T
LDA #PPU_ADDR_H 2 W& I$ B4 f8 ^$ @& l1 V/ s2 \ p" P8 R
STA $2006 ;设置PPU字符写入高位地址
& m* d4 k3 N7 P. { LDA #PPU_ADDR_L/ {0 p) B B0 [ x( P2 d; [+ B
STA $2006 ;设置PPU字符写入低位地址
( {3 Z% @# `* b! l1 S1 S W LDX #$00
. K$ B( X+ ^- Q: _9 Y" uPPU_STAGE_WROTE: ;写入STAGE字模; c- r7 ] M0 W6 ]1 H8 x
LDA STAGE_DATA,X! a, J* Y8 w1 B- r% ]" v
CMP #PPU_END ;判断是否写入结束6 X* r' P) ]) G2 r( a4 w/ \
BEQ STAGE_CMP( v# d/ F4 J2 y H# ^
STA $2007
* b6 i5 ~5 n, \0 t! {0 t INX
& o; U: X; }9 r. }( O BCC PPU_STAGE_WROTE
+ ~( Q+ L1 W3 L; ~! s0 c& sSTAGE_CMP: ;选关操作
* u' o' }9 |( W8 e% T LDA STAGE_TEMP4 E. j1 ]7 i$ T, `
CMP #$FF ;关卡数据初始化条件判断1 v: |! n+ V' y% ~% l* H8 V2 e
BNE KEY_B
, x w0 d7 U4 V _ LDA #$00' |4 v# I+ ]0 l3 i4 V& P
STA STAGE_TEMP ;关卡数据初始化9 }' \3 k4 \! o/ }
KEY_B: ;关卡减少
R( u+ C7 N2 P$ V, e LDA KEY_ADDR
6 e& U6 H5 L3 s2 ~" L& X( Q n4 m AND #BUTTON_DEC ;按键B或左减关5 ]1 w- r5 x C& F2 J, i, X# `
BEQ KEY_A
* W1 k" u6 t: M4 f5 s. g LDA #$FF
2 Y$ M% h9 I6 T% e% p: N1 a STA TIME_LAY ;重设标题延时
% ]) [ \8 B0 Q3 a5 H LDA STAGE_TEMP
; K8 E: O! \" J2 I+ M- @ CMP #$00 ;关卡比较+ g3 q; t# E4 y7 d3 S9 @7 t
BEQ KEY_A
1 E4 H# m: p5 ?8 M, k+ i' ` DEC STAGE_TEMP ;减关" ?# W8 F" d/ F
JSR MUSIC ;按键音效
/ z% V, d+ j6 S$ i! L3 `( |2 t/ hKEY_A: ;关卡增加: C2 x" I, k h6 F, p- ~' L0 {
LDA KEY_ADDR
; Z6 Q- h+ e/ K# n AND #BUTTON_INC ;按键A或右加关
4 v( ~! H+ a( c- S1 \) \ BEQ PPU_NUM_WRITE: ^$ n) Q% S; | c! j8 ]$ p
LDA #$FF
: @) X1 S7 P. h2 R' N STA TIME_LAY ;重设标题延时% f8 f9 d' B1 @0 u: w
LDA STAGE_TEMP# j8 F4 S, N" G% b/ K4 j* V
CMP #STAGE_MAX ;关卡比较( o! t' Z o3 U# ]0 X. S
BEQ PPU_NUM_WRITE
; n& J0 J$ n" h8 p/ S* [6 \ INC STAGE_TEMP ;加关( R1 e7 s' s/ o
JSR MUSIC ;按键音效
1 |* }+ O6 O5 M8 F8 b9 G9 dPPU_NUM_WRITE: ;关卡数字写入地址0 o+ O6 L2 m: u3 J1 x
LDA #PPU_ADDR_H
$ a4 G- x/ H* y. z7 [) Z) I0 _/ ~ STA $2006 ;设置PPU数字写入高位地址
3 Q: O/ Q2 G0 a$ T LDA #PPU_ADDR_L8 v' p8 _! G# v# @/ D1 F8 h: F
CLC h+ [# B* C6 `9 Q( G2 D- c. ~ d
ADC #NUMBER_A' h0 O3 s' o! B
STA $2006 ;设置PPU字符写入低位地址
+ @+ G' T" t- @7 A- y LDA STAGE_TEMP6 j, d8 n. B3 o$ M% _
TAX/ h( ?( Y+ Y- A# x4 U3 I
LDA STAGE_D1,X ;写入数字+ y$ Q* H1 ~, u7 g! `7 [
STA $2007
. E$ F E$ n3 p( p1 S; G LDA #PPU_ADDR_H1 G1 q7 Y- j7 [3 `" Y% b8 q8 R
STA $2006 ;设置PPU数字写入高位地址
; u$ a; j1 \; ^: F LDA #PPU_ADDR_L
! C5 `- T9 C. i( ^ CLC
. A/ v) B. S5 `5 G ADC #NUMBER_B' j9 ?% s0 \8 S1 ]' h0 m5 G
STA $2006 ;设置PPU字符写入低位地址
) n' w2 a5 n5 \& V! j LDA STAGE_TEMP4 E# a* X- g2 ^# R9 G% [. m
TAX/ M+ Q$ h8 Z' S3 ], H2 O1 n* _
LDA STAGE_D2,X ;写入数字 {1 d, U) j; ~5 K! _3 p+ s
STA $2007/ @9 S( Q( s8 ]8 f: x
STAHE_WRITE:! }; u4 e4 Z$ h1 e% d
LDA STAGE_TEMP) x0 K t; a$ N8 r) \5 {/ @- }! |
STA $2D ;初始关卡写入
4 S* }4 g8 |% S% |8 `8 m. q) wPPU_RTS: ;恢复数据! K) d h: R- m8 ~3 N
PLA* o9 j0 d; D$ {1 M% Y5 r) [
TAY0 s) y" `7 F' t/ {& q2 A
PLA$ H( j0 Q5 x% j2 ~% z# E
TAX
& r/ t, d. L5 S! Y6 r) l PLA
0 v2 T7 I1 C- t+ Z RTS
+ y, J3 |' a& |& r 5 k3 M; ?+ d9 t
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据9 A8 q8 S1 | V$ n! L" I) L; }
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
( O; v9 T% p2 o) t% n. U
6 H6 E+ P) N9 c7 k' s4 c3 \- gSTAGE_D1: ;关卡数字- S4 S( E5 d- F! Y* m; U& v
.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_83 T, J9 N' r0 ^* o6 `
9 k9 U- e/ ^3 T7 M% \$ u8 I1 X- @! \STAGE_D2: ;场景数字9 k; Y7 N) z# t
.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
! e$ b0 v( T; q. ], ?0 F9 t 4 H$ [9 j7 ^% i
) |3 ^+ C& K, M5 _ Y! DMUSIC: ;按键音效
) v' _9 S( [2 d; u' Z! C LDA #$3B ;音乐号
; ]# E7 Y5 i6 i JSR $919E ;系统音乐调用' [7 C" l Z$ T. K( w. a# |; _
RTS |
|