|
|
;[FC][忍者神龟3代标题选关程序]
' Y& ~3 d+ C1 R; R;作者:FlameCyclone 2017.4.1
! s4 W' U- f% S2 ?1 V. ~/ b/ r# j
( y2 u( C* m/ g; o;配置数据
4 H f3 j A! @' Y! z) ?" eKEY_ADDR = $F8 ;按键地址
% [" W+ h; `. Z. ^9 t5 P; e5 u7 wSTAGE_TEMP = $6010 ;关卡临时地址* }! v5 X2 x! T9 n% t# @
STAGE_MAX = $0E ;最大关卡数
& Q# i+ U; Q' x2 P0 eTITLE_A = $20 ;标题条件A1 l7 W. y+ Z0 v5 `9 D
TITLE_A_ON = $02 ;标题条件A有效状态判定5 r) j7 a/ k' l/ z5 L: S6 `
TITLE_B = $21 ;标题条件B
# s3 l# q2 \! r, |TITLE_B_ON = $03 ;标题条件B有效状态判定; x r6 l. B' t- y
PPU_END = $FF ;PPU结束符) P' ]- j, l( q: E3 ?8 R
TIME_LAY = $4A ;标题显示延时地址% S0 k! p: x8 F" b% @* o; p2 f3 @
BUTTON_DEC = $42 ;关卡减少按键
9 w; w7 X2 p% M* q3 Z, O' `* qBUTTON_INC = $81 ;关卡增加按键
+ S4 [6 u: [2 m3 N% }; o- _0 `3 KNUMBER_A = $06 ;数字A距离STAGE偏移量
9 H9 o1 g$ x% H* i8 \8 F+ G. ^NUMBER_B = $08 ;数字B距离STAGE偏移量2 X# @1 v4 d6 r2 c
PPU_ADDR_H = $23 ;STAGE写入地址高位 S0 |# c; X. g: q+ r1 v* T, ?
PPU_ADDR_L = $8C ;STAGE写入地址低位
# W2 F/ U$ @" sCHAR_S = $A2 ;字符'S'$ w3 q6 v6 h& t! a) |" Y) c7 W
CHAR_T = $A3 ;字符'T'
3 ^7 l o( F3 \9 zCHAR_A = $90 ;字符'A'
: y6 c' @8 f0 y) n% H+ ~- N, xCHAR_G = $96 ;字符'G'' o; a# F# H) m3 j }( ?
CHAR_E = $94 ;字符'E'$ T' W* t Q5 m; A7 o* S) }+ P
CHAR_SPA = $00 ;字符空格
- j& A/ h7 I8 pCHAR_LIN = $AE ;字符'-'1 P9 ^. R5 r" u+ d. [) a6 d5 U
CHAR_O = $9E ;字符'o'
* \2 G% J" g; `9 B; D ~) wNUM_1 = $81 ;数字'1'
2 r- F' J+ q( H7 ~; JNUM_2 = $82 ;数字'2'
1 Z1 @( |7 _6 J( S2 _1 U1 i+ NNUM_3 = $83 ;数字'3'5 m) q6 ] m1 s
NUM_4 = $84 ;数字'4'. }' Z6 h6 C( |9 F/ g# p
NUM_5 = $85 ;数字'5'' ?) X7 B5 \" }2 M; Z$ ^! f
NUM_6 = $86 ;数字'6'
" Y* i4 Z) q6 JNUM_7 = $87 ;数字'7'
, p! R& p$ y) c5 Y: C MNUM_8 = $88 ;数字'8'
" k. i5 ]$ ~7 S8 n, wNUM_9 = $89 ;数字'9'
3 B1 \; z/ q" e6 HNUM_0 = $80 ;数字'0'0 H3 K, ~% h! d& J: i' m; t. I
" m3 }8 J$ {" R1 J
.ORG $F82A
! U {# b! ^& \0 }4 U3 Y+ p JSR $E700
# A4 Y$ T( l/ W' d+ O
- w5 _* J! j5 w1 R1 u! R/ ^& L % f9 T6 r+ k5 Q+ N) ^
.ORG $E700* Q/ i g8 q$ d; ~, b4 k' S
0 `/ ?6 {8 i x2 u6 b. L# b1 ~* B
STY $4014 ;补上覆盖的精灵写入指令
$ {: j7 @2 R( d5 s& uPROTECT_DATA: ;数据保护1 u8 O; S) Y# D `5 l- s
PHA ;数据保护开始
1 x) |& `& l2 m4 U TXA2 u. D# P, d4 ]+ w! a6 D
PHA; N+ @/ {( M: z
TYA
& X9 Z1 r3 V: o* f" ^, s% m PHA ;数据保护结束
/ w! Q, m7 {9 o. X$ c/ \ LDA TITLE_A
& q% B* Y4 K" a: p CMP #TITLE_A_ON ;比较是否为标题画面
$ N; X1 S- A# S! I2 u2 U6 `) Y& z BNE RET, \1 I& d, P4 b, R
LDA TITLE_B
0 X9 ^& \, b- w$ d6 W/ Q8 N2 } CMP #TITLE_B_ON ;比较是否为标题画面
4 @. q7 I1 Q! J; K+ W BEQ PPU_STAGE6 s- D3 T* e8 r
RET: ;恢复数据
. f* D5 z, [: x2 M. d" {( f PLA ;恢复数据开始
a) u! L' y5 h TAY
$ |) ^5 d" ?+ L! p% k9 y PLA
! z$ ^9 o3 o7 K+ m* k G$ n! _ TAX
% A' w3 W. T) G% H8 B9 h$ h. u PLA ;恢复数据结束3 _7 b. \, O+ @" `! e
RTS ;返回- j& V" T/ Z# E: b1 M: E
PPU_STAGE: ;字符STAGE写入程序" j6 p2 e: M2 M( [- f- i# V
LDA #PPU_ADDR_H ; k, q, L: A4 T# \) l7 v' V
STA $2006 ;设置PPU字符写入高位地址) `5 X p- e. ?) x2 m( `2 }) U( f
LDA #PPU_ADDR_L
6 {7 B! A) H) z1 a& _3 p3 [ STA $2006 ;设置PPU字符写入低位地址) c! [1 X) h$ O2 r; |, K" _1 C! k& P( G
LDX #$00
) V, F4 V$ g6 @1 \/ QPPU_STAGE_WROTE: ;写入STAGE字模
9 e p- \7 h- g; V# A LDA STAGE_DATA,X; ` `% |2 \, `
CMP #PPU_END ;判断是否写入结束7 l# @2 ~0 R1 Z# [0 F
BEQ STAGE_CMP
% k1 o3 s% ]1 l( e' ? STA $2007* N m& J7 e3 h0 v
INX- O% C/ v) a" ~- r- y) e; W, z
BCC PPU_STAGE_WROTE. S1 j A3 o% f% y' j" E. `
STAGE_CMP: ;选关操作
8 v6 U, e4 h: \. U0 h LDA STAGE_TEMP7 ^1 T- S! N9 S
CMP #$FF ;关卡数据初始化条件判断 W% e% y# v1 E B' m8 C
BNE KEY_B
* }8 U/ T5 V6 C5 n LDA #$00: @& o# V+ o& Z. P; i
STA STAGE_TEMP ;关卡数据初始化/ G) ^# h9 l4 s. t$ a9 E! |" p
KEY_B: ;关卡减少% j- s) I2 ~7 O$ D; o( u6 N
LDA KEY_ADDR
7 x8 t, C6 W" M; A/ D: Y7 F+ N AND #BUTTON_DEC ;按键B或左减关3 B8 x5 G6 P$ K+ \' o
BEQ KEY_A
& K5 ~- k' ^& d7 h7 }, s7 y LDA #$FF! e: O8 @& |6 @" S: ]
STA TIME_LAY ;重设标题延时! [: Y* j0 y6 }. b! s. T
LDA STAGE_TEMP7 p9 _+ M# k8 W1 O
CMP #$00 ;关卡比较
% s5 D- c) M1 n' P6 r. }5 A) n BEQ KEY_A$ F+ h0 S5 u; ]
DEC STAGE_TEMP ;减关
+ W% [7 m; K/ v- R! P4 R JSR MUSIC ;按键音效
( \- [9 k& V) i5 K+ ], PKEY_A: ;关卡增加9 L) b- a n& Y+ G' i# b
LDA KEY_ADDR1 X9 V$ H* y$ s5 D! _/ e
AND #BUTTON_INC ;按键A或右加关0 V9 d4 b, b7 f% B9 ?
BEQ PPU_NUM_WRITE a" n- G0 T$ _2 Q A& v6 w2 f
LDA #$FF
2 W) _8 q1 k1 I8 Z STA TIME_LAY ;重设标题延时& J; G, t n9 J) d, |: u* t, ]
LDA STAGE_TEMP
6 [7 p# r$ u9 A/ |% O CMP #STAGE_MAX ;关卡比较
& g) n3 f0 S L BEQ PPU_NUM_WRITE
' N7 r, g/ Z9 l! |2 d# Y4 [ ?- h INC STAGE_TEMP ;加关
& T* e7 j6 q- R( z" e3 u3 ^ JSR MUSIC ;按键音效2 ^: U) y. @! o8 ^- _/ q7 \7 x
PPU_NUM_WRITE: ;关卡数字写入地址
( I5 O# h; K% [8 |* ^ LDA #PPU_ADDR_H
* T" y7 ?2 Y' V" _( }, k STA $2006 ;设置PPU数字写入高位地址
0 V' N. z! ~6 P* h LDA #PPU_ADDR_L
1 |& B, v$ i, t9 F CLC
- n* G% o* k' |1 r" C% G+ {% R ADC #NUMBER_A
# A M7 b* l- a8 ~- u STA $2006 ;设置PPU字符写入低位地址
) K+ g2 R: L. V' e- A/ P LDA STAGE_TEMP
6 e% p( y% W4 x* R5 [, | TAX7 Y' ?* E! j, p
LDA STAGE_D1,X ;写入数字
2 O/ s0 t3 u# a0 {) N STA $2007& i* E! G- H0 P- t* j
LDA #PPU_ADDR_H
" M1 {5 K+ O* n6 l0 s2 f' k; v STA $2006 ;设置PPU数字写入高位地址5 O" F0 n1 q" k* [( d; V1 S7 M3 T
LDA #PPU_ADDR_L# ]5 ~) u9 K2 {% G/ j, i
CLC% }" t3 K& s. y- |. k
ADC #NUMBER_B
6 b: M: f. y2 i+ _7 f STA $2006 ;设置PPU字符写入低位地址, G0 s. t& s w9 O& V% T
LDA STAGE_TEMP
+ o* ~" S `% b9 [. @, t TAX( t0 e9 ?) z+ H- i) ^7 T* y) D, F
LDA STAGE_D2,X ;写入数字. l# y" E4 }' q# n0 C2 f
STA $2007% G4 \$ E* x8 Q* {5 n, [
STAHE_WRITE:
: @! Z' v$ p$ e; K/ C LDA STAGE_TEMP/ k! q" a* Y7 N2 w. [9 B
STA $2D ;初始关卡写入( I7 [/ L+ L9 D! A8 z
PPU_RTS: ;恢复数据
5 t6 V' A0 n& m) J9 | PLA
6 I2 ~7 H( g3 r4 ~. z+ a" g; m/ P TAY
( F( ?& n: O7 d/ y PLA
6 f) N" F3 g3 W! D h3 w4 u9 p$ q TAX" h, p# s$ P7 _
PLA/ ^8 P4 h: s" F: V9 \5 _3 m: V
RTS* X, k6 [# Y' d$ b- j% G
) P T2 @' E& G$ vSTAGE_DATA: ;关卡文字S,T,A,G,E,X,-,X字模数据6 V+ s6 O3 ?0 l+ n( U! J" |
.BYTE CHAR_S,CHAR_T,CHAR_A,CHAR_G,CHAR_E,CHAR_SPA,CHAR_SPA,CHAR_LIN,CHAR_SPA,CHAR_SPA,PPU_END
7 K" ^' D8 s8 f. q0 Y5 `: g' P1 i5 U$ F- k0 H( Q' z; I
STAGE_D1: ;关卡数字' G. m( G8 c1 I) @9 e9 R
.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 v. X. G7 ]" t) ^' A
; c+ W; @1 h1 l+ g5 s! ESTAGE_D2: ;场景数字& ^ d1 n1 z. o/ U3 @- b( ` l
.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# [) M. e) [7 r1 E$ f5 i
* ]/ v9 _1 ?! e% I5 X
% M+ u: ~; P' Z/ z6 O) t+ J( }MUSIC: ;按键音效2 x- y* J' W4 [; Z6 _) }4 R
LDA #$3B ;音乐号
/ M! Q$ o* L- j# E7 q6 o) R& s JSR $919E ;系统音乐调用; H( i& A- Q! I- \3 @
RTS |
|