|
;[FC][忍者神龟3代标题选关程序]
# q- ?% t. Z' D7 L9 y' x% p& e! P$ V;作者:FlameCyclone 2017.4.1, ~! o) @( G+ K# U7 ~) }5 \1 ?
$ j$ i3 ^: |+ \' O
, ?! ~, k' k' q, e( n& q;配置数据9 Q1 N( y/ [+ z2 k+ I5 {
KEY_ADDR = $F8 ;按键地址& ]2 t3 G# m3 |( x0 G; h
STAGE_TEMP = $6010 ;关卡临时地址
1 N9 P7 Y6 L% h2 q8 Y/ `STAGE_MAX = $0E ;最大关卡数
`& d8 F' h* Y7 k7 ITITLE_A = $20 ;标题条件A% w2 u) \4 J3 H. g) U6 |
TITLE_A_ON = $02 ;标题条件A有效状态判定3 h: ~/ r+ E5 i" l/ ~
TITLE_B = $21 ;标题条件B( @; \# T$ U& z* T4 s
TITLE_B_ON = $03 ;标题条件B有效状态判定+ D/ Q. J& }; a) Y
PPU_END = $FF ;PPU结束符
7 R5 K& b2 u# i2 i/ a! G& ^TIME_LAY = $4A ;标题显示延时地址 ^( n2 M+ g. p6 n! o5 N/ ]. y+ N" F
BUTTON_DEC = $42 ;关卡减少按键+ s" e' ~* x) j4 h
BUTTON_INC = $81 ;关卡增加按键) x) j1 t) {* O, ?% `: ]) W$ K
NUMBER_A = $06 ;数字A距离STAGE偏移量( Z' Z: f" I3 \0 M3 h1 y0 Q
NUMBER_B = $08 ;数字B距离STAGE偏移量0 r! l5 I) n! ^3 \0 H8 V
PPU_ADDR_H = $23 ;STAGE写入地址高位8 ?5 C4 X' Y1 {5 }
PPU_ADDR_L = $8C ;STAGE写入地址低位
0 }) A9 ^, r# h2 @CHAR_S = $A2 ;字符'S'2 f8 L! d C z/ _' E
CHAR_T = $A3 ;字符'T'
4 g# E+ T+ v8 YCHAR_A = $90 ;字符'A'1 E- o9 F8 o1 |& o9 Y) b
CHAR_G = $96 ;字符'G'# r9 d& ^! V( h" ]+ W
CHAR_E = $94 ;字符'E' F6 |' k/ h9 E) M. l
CHAR_SPA = $00 ;字符空格& o( i7 J3 H' d3 j; C1 j. v# s
CHAR_LIN = $AE ;字符'-'
( H5 k+ E5 T" ]CHAR_O = $9E ;字符'o'
$ R7 \* o6 { @) B* `NUM_1 = $81 ;数字'1'8 b) e4 c/ s$ m5 t1 p% X
NUM_2 = $82 ;数字'2'
; C4 n2 y6 \' Z+ D7 D. w9 f' bNUM_3 = $83 ;数字'3'" ^9 k6 \8 j* |4 G6 q
NUM_4 = $84 ;数字'4'
: G0 O h* {0 A( yNUM_5 = $85 ;数字'5'3 }& \% u& D, a/ g( p( f
NUM_6 = $86 ;数字'6'' \$ G& T+ l/ M% _; y
NUM_7 = $87 ;数字'7'
9 A7 i8 |% N/ k5 P6 W2 uNUM_8 = $88 ;数字'8'& i2 _( `( m% s2 g* S2 O3 V+ o
NUM_9 = $89 ;数字'9'
) r9 D. W' q! p! vNUM_0 = $80 ;数字'0'" J7 N, e% n( C. k; V9 t; V
) ^. n# _6 l5 l1 F
.ORG $F82A2 ?' Z( g# C, w9 H( c: x0 j
JSR $E700 E, ^% R& o. E5 e- x+ e. {4 P
, D. T6 H2 G) K6 ~ 7 \8 B: {. r7 ?' y H; s/ b+ o
.ORG $E700- ?& y* G# G; s( [# D) J+ e
' ~+ G& W1 E" [+ [ STY $4014 ;补上覆盖的精灵写入指令
/ N9 g$ y! f) L' \) Y+ z, T2 Q3 Y' ~PROTECT_DATA: ;数据保护- c6 y2 ?* W2 G; A) A& a; v
PHA ;数据保护开始
; Z& j7 r5 E* U: {8 X: ~7 j: k TXA; e- C4 W1 g. h. \
PHA0 e# i- \6 o, \3 ~: C; @# ]. v
TYA
' ?& i, t- d# |" N- L3 z/ | PHA ;数据保护结束# x$ x4 q* F0 o6 R3 y) G; C
LDA TITLE_A
; t+ U$ Z. B: o- A; k: t CMP #TITLE_A_ON ;比较是否为标题画面
+ G; e7 m! m" S7 } BNE RET- [0 I6 g" F6 H: r1 s- f7 R$ r3 L; I2 C9 R
LDA TITLE_B
+ Q! N# H3 E$ r" P: O CMP #TITLE_B_ON ;比较是否为标题画面- h8 U* U+ e- q" x
BEQ PPU_STAGE
5 Q$ _1 i7 v% o0 `1 M" _RET: ;恢复数据3 P* L, X$ Q6 | ]
PLA ;恢复数据开始& {4 A/ @- m$ p W1 | w
TAY
( b$ o( ? @ t PLA
8 i, Z$ k; o" F$ M; e4 A& D TAX
3 A7 Z( k% O0 |- u+ C/ \, n& d- s' w PLA ;恢复数据结束 m# O' e6 U/ t% N- E( o
RTS ;返回
- w% }) X6 T) Q y5 |1 q* o. VPPU_STAGE: ;字符STAGE写入程序
~9 \, x+ b% x" F9 X LDA #PPU_ADDR_H
! l5 J: V; i8 X, \$ A. M7 P STA $2006 ;设置PPU字符写入高位地址9 P1 ?9 }2 a4 k7 B7 H8 i8 g
LDA #PPU_ADDR_L5 c: ]2 } F+ W! F* ^! A" E7 _
STA $2006 ;设置PPU字符写入低位地址
h0 Z7 n6 g& }7 q3 W/ ` LDX #$00* d- D8 x! p* O% T3 o
PPU_STAGE_WROTE: ;写入STAGE字模
. d/ p1 v8 M. s' [4 p9 _/ T LDA STAGE_DATA,X
6 B" W5 Y( L! |) b q CMP #PPU_END ;判断是否写入结束3 Y, ]5 D$ v. _ }% N% L5 @4 s, W* ?3 f
BEQ STAGE_CMP# J& @9 G+ A {
STA $2007 L# Y: U. _2 q3 l8 b' ~; e- L
INX. o7 C2 o% y; k* z
BCC PPU_STAGE_WROTE
+ G6 I Y' W. J: a6 B% {STAGE_CMP: ;选关操作$ _5 V+ |7 }/ L/ k, E/ C8 u3 _
LDA STAGE_TEMP$ c) U* I4 e1 ]. S8 r* p9 @" a
CMP #$FF ;关卡数据初始化条件判断
5 F6 r) S' R' k7 e. J6 v: O. M BNE KEY_B" N7 D6 E, ^9 u
LDA #$00; _+ F4 o1 I; e% ~8 d7 s- H
STA STAGE_TEMP ;关卡数据初始化
! j4 j" A8 n8 w0 s+ G5 J' q. pKEY_B: ;关卡减少6 z1 U' ]" V! B6 T& e2 `
LDA KEY_ADDR) i! n! y- o2 {! T% g
AND #BUTTON_DEC ;按键B或左减关
2 u5 v- {; K" b2 N BEQ KEY_A
, `4 H8 g( A% @& T LDA #$FF, h2 f' y- e/ s: F. W' x
STA TIME_LAY ;重设标题延时9 ~$ s9 T( v$ f2 b& J
LDA STAGE_TEMP* u+ \( O- |" C( d* C
CMP #$00 ;关卡比较
: D* y+ s7 ^/ k9 ]1 _/ ]+ U% D& ~ BEQ KEY_A0 }" y! r7 N( M" x: V! N0 W
DEC STAGE_TEMP ;减关
3 y. r; v% ]% W5 S' F JSR MUSIC ;按键音效
* r u. Z9 S! i1 v5 t/ yKEY_A: ;关卡增加8 W# u% T3 |8 }) r8 [9 U
LDA KEY_ADDR
5 Z1 L9 U+ t! K8 e AND #BUTTON_INC ;按键A或右加关
1 X, f0 |$ l- a. q9 Z BEQ PPU_NUM_WRITE
8 f8 @# O* I9 f& L1 |5 k# v# z | LDA #$FF+ }5 T8 [3 w1 D) m- J% Y: |
STA TIME_LAY ;重设标题延时& F. o3 F! m, Q& F# r5 v, |! I
LDA STAGE_TEMP
] _- v: G: S6 y2 ` CMP #STAGE_MAX ;关卡比较; s% ^/ g2 B* p; A
BEQ PPU_NUM_WRITE
! `% I6 N. S7 R9 z INC STAGE_TEMP ;加关
1 _6 J- W( z: y- w* n6 A+ W9 ?- ~ JSR MUSIC ;按键音效
8 Q. J; v8 n& j! X& W3 l1 VPPU_NUM_WRITE: ;关卡数字写入地址
+ b, Y# B6 \# q' O; y7 I8 w( z LDA #PPU_ADDR_H3 E$ n. b, }9 X+ c
STA $2006 ;设置PPU数字写入高位地址
" R9 W7 W$ R) z LDA #PPU_ADDR_L. E) d# u- V0 J
CLC
% V2 Q- A \ H! W ADC #NUMBER_A
# e( e! R$ `/ o w4 E0 I STA $2006 ;设置PPU字符写入低位地址
0 w9 \; V% `5 l, L P LDA STAGE_TEMP
/ r" @% K" A3 I/ R! _# [1 v! g TAX( L9 W# Y: k B+ r& T
LDA STAGE_D1,X ;写入数字
1 q( e( V: K# O' a( s STA $2007) K) F5 s+ x) W" y$ P+ p
LDA #PPU_ADDR_H
+ F) j( h! n# V0 @& o5 J STA $2006 ;设置PPU数字写入高位地址' v* v& o) ^3 Z( U( t
LDA #PPU_ADDR_L
# I" `9 F$ V; e5 T& V' m- h CLC( n- Y; }: Q9 ~4 L4 X
ADC #NUMBER_B& d" t5 Z& s6 t/ m" n, I1 x3 v6 A
STA $2006 ;设置PPU字符写入低位地址
0 `$ U6 |# D1 j1 [2 \' A) G9 v LDA STAGE_TEMP, R$ J" G1 l0 i! W, o. Q
TAX5 R N8 r9 J$ E7 h
LDA STAGE_D2,X ;写入数字* Z3 A9 q/ ?8 t' O2 c/ C T
STA $2007: _2 X4 W2 b+ U- }9 Y
STAHE_WRITE:
6 c2 i2 M- V6 T* I LDA STAGE_TEMP
# R, X3 j7 `8 n1 O( C STA $2D ;初始关卡写入( J9 R1 h5 e! x1 Q' k& T
PPU_RTS: ;恢复数据, @% c/ j* O! U5 n. d y9 |
PLA
/ S8 W4 z: C: X( r& E! A5 } TAY
) S2 r s% E. [) h# x9 ]4 s& l PLA
, h5 I( x3 \: @8 A$ o( @5 h) [ TAX) y* G( p2 g* U+ B! p$ q- l
PLA
' d: r4 v* v6 a9 @2 }% N3 o8 l& X( ^ RTS" S* ?+ g- [( L4 t
6 `' b- U8 o' c2 k4 b( ^6 y6 B" F
STAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据& I: P% s% X4 R! N1 c2 e3 \( D
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
( O" r- q* l& E+ K4 F+ j. j
- q7 n- f1 T, l9 ~1 QSTAGE_D1: ;关卡数字
0 L1 G$ ~- k% N+ d3 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
7 a2 m+ d+ I0 Z2 N# f2 Y& N0 k* u& p5 f: B+ r! ^; `
STAGE_D2: ;场景数字9 @+ G' J( ^0 R8 N! ?* S
.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) i) I: R& n) O8 D& J% L
) ]# V2 |# Y: E! P: h- ?; f
" K$ F9 o5 }' `- ^3 n" P8 J6 Y! `MUSIC: ;按键音效3 X# v- R# t8 D" L3 E% }& j
LDA #$3B ;音乐号
0 }0 _( o, q$ W JSR $919E ;系统音乐调用 w/ j) T9 ]' {& A0 S. b5 m, Z, M
RTS |
|