|
|
本帖最后由 yandagui 于 2023-7-23 22:29 编辑
4 f( r) Q& w0 |6 Y0 o% e5 {# {: J) _: j4 d7 \4 i8 @
[FC][音乐12 IN 1]8 J( x- C O* N& C) |
时间: 2023.07.23
9 I. I* M7 H8 I" M3 y. V6 x a0 Z作者: FlameCyclone* q' A, p( @$ g
6 O& k( w/ D/ r- V$ Z& k, v: b/ |
收录音乐内容:
6 Q& Z! Y1 ~- ~7 D1.Raf世界7 h' q. N `% P
2.最终任务7 D* A, e1 H' g
3.赤影战士
( ~# o4 @, ]+ Z( @# L& K4.双截龙8 _4 w6 n! V6 K; U0 G2 `9 U8 u
5.双截龙20 n! K% ?$ c: T$ ~: t
6.双截龙3
6 K1 n7 x/ f9 N# W5 D; G( U7.洛克人/ {( @; F0 D5 ?
8.洛克人2. F+ \& k+ x% z5 [1 x% p. K0 r9 d
9.洛克人3
% A# R% y% z% `! |10.洛克人4
* f% _4 i0 \& D. j( T0 ~11.洛克人54 Y8 A2 Q) f. \! S. P* U0 |( G4 M$ w' _
12.洛克人61 } e/ X4 G# w" S4 [/ B3 c3 Y: a
/ \. b, |( d: M( q% ~6 P
操作:
+ e9 V: w, G0 z' Q, E上键: 上一个专辑
7 Y4 r5 F+ h9 b7 g% ^* d* D* P下键: 下一个专辑$ l4 G( L- `' X, M. J
左键: 上一曲
# T+ m3 T5 ?: c+ q# F" \右键: 下一曲
' u' {8 V t; B1 O7 hB/A键: 前10曲/后10曲
% Z6 I( ~; l: l) F7 x选择键: 下一页( n; c- q6 A9 o6 _( C
开始键: 停止/播放
7 s2 y8 h$ z8 F) q0 T* q; u- @
3 f1 C' \0 J- Khttp://flamecyclone.ysepan.com/" O2 n3 r8 _6 _0 m! t; S
% x1 K6 j2 i4 h! u& c
 1 n! g1 X9 ^7 @, J4 X

2 R8 f* R, M# P( X. ?6 n. w0 v7 O+ X7 o1 h% J# t3 ]8 \) s
- ;[FC音乐][播放器模板]
9 [/ g7 C& J( D* ~% ` - ;FlameCyclone 20230710
( V4 a( \! d% l0 ?0 s3 Q m' f/ W
2 ]$ N' I# n2 o- ~0 P2 ]0 X- ;文件头1 `# \. l; G' H$ I5 }. Y5 s( i2 e
- ;======================================================================
0 o' K8 _& C# c6 T0 T5 z0 [ - .INESPRG 16 ;16KB PRG 数量
+ B/ m7 N3 n% L* A( i0 @ - .INESCHR 1 ;8KB CHR 数量7 V% x) i6 d. z" ]
- .INESMAP 4 ;mapper 4: W3 Y) [: Q5 s7 b& t: y; K- z% \
- .INESMIR 1 ;命名表镜像 0水平 1垂直1 Y1 t& k# m4 k6 A7 H4 f
# c7 R( R; _! G; F- ;==================================================
) v; Z4 k* M; I4 b: m' d - SOUND_BAR_SHOW_ENABLE = 1/ x _9 a3 V# c8 X Y+ P
- ;==================================================/ ]$ H: r: n. E- G+ K9 S$ g
- BANK_DATA_MASK = $1F5 E |! L6 }2 N4 Z; C- u# `8 L
- CHR_RAM_ENABLE = 0& M1 q/ Q" Z& y
- IRQ_SCANLINE = 136
6 k. E j- w, N, K! n& S - ;==================================================& G! ~ }) h& q, ]3 m$ I& Z0 F
- SOUND_DATA_BANK_00 = $00
4 l |" k0 E- x. }4 B% x* Q - SOUND_DATA_BANK_01 = $01
' ~, c$ ?0 L. Q& e0 h - SOUND_DATA_BANK_02 = $02
8 c3 C: I! S- m - SOUND_DATA_BANK_03 = $036 a7 e0 w) j% ~9 \8 T* G
- SOUND_DATA_BANK_04 = $04
- r3 Y! D2 e3 ^2 R/ U% K - SOUND_DATA_BANK_05 = $05
/ \9 k! x! Y8 }$ u4 F# t - SOUND_DATA_BANK_06 = $067 ?6 b' F: c, e2 `+ T/ R) z
- SOUND_DATA_BANK_07 = $07$ d/ s {% u" `8 {" H- K
- SOUND_DATA_BANK_08 = $08
+ ^+ R4 }: C& M/ | b& i& A - SOUND_DATA_BANK_09 = $09
+ u2 b, Y; a+ `+ p3 @$ v/ G - SOUND_DATA_BANK_0A = $0A
7 ?% l& ^+ m% j& ^4 \9 [ - SOUND_DATA_BANK_0B = $0B
. O. k. i9 `# |; c - SOUND_DATA_BANK_0C = $0C
7 ]+ x1 J# _8 S) D0 u. D) L - SOUND_DATA_BANK_0D = $0D6 g1 I$ O- r* @" _- O
- SOUND_DATA_BANK_0E = $0E, l3 E; G& e3 a7 e3 y3 y
- SOUND_DATA_BANK_0F = $0F: i% X& _3 N6 l7 N
- & }% X3 i5 T) D3 Q8 K+ v3 `0 M
- SOUND_DATA_BANK_10 = $10
! H! l$ _ p% |2 o' R* j" A - SOUND_DATA_BANK_11 = $11 }8 `0 o. u( n0 U0 j
- SOUND_DATA_BANK_12 = $127 @9 J8 C* M t$ M
- SOUND_DATA_BANK_13 = $13' |/ n, i( x0 ~' o0 W
- SOUND_DATA_BANK_14 = $145 |) Z1 ~. X% J' X
- SOUND_DATA_BANK_15 = $15
, {3 L' j3 w6 n+ E - SOUND_DATA_BANK_16 = $16$ n# M) V3 o x& x9 @4 \- Q
- SOUND_DATA_BANK_17 = $171 w9 [; I F) k( m: e1 J4 r: X, C
- SOUND_DATA_BANK_18 = $18
2 M0 H4 M; |# j. G! t - SOUND_DATA_BANK_19 = $19$ k4 W P0 e2 |( ?9 ~ U- j
- SOUND_DATA_BANK_1A = $1A
3 X+ j# F q# H2 L a8 Q - SOUND_DATA_BANK_1B = $1B# T1 u @) ^1 _# g, i# n9 q& X
- SOUND_DATA_BANK_1C = $1C
) W7 Z9 B" m& W, H% q+ s7 U - SOUND_DATA_BANK_1D = $1D! d! p3 p# Z( I5 u3 S& X
5 Z& `" j. K: t- SOUND_DATA_BANK_C000 = $1E0 ~4 ? {& q8 U: i1 g; U E0 j
- SOUND_DATA_BANK_E000 = $1F
! m! H2 e' x- y N: S# D - ;-------------------------------------------------5 g( E2 D5 A1 |& `* @' V
- CHR_DATA_BANK = $20
8 U8 x1 X: W6 U9 T: r% y - CHR_DATA_ADDR = $A0008 M2 b3 |' t; H4 U1 t5 R: d7 \* _
- ;-------------------------------------------------
$ [- z+ P5 Z) g3 s+ D" r& @ - PROGRAM_BANK = $008 ]2 {% x+ J: i( B; ?# `' K
- PROGRAM_ADDR = $8000
0 `! V2 a2 _8 H0 r. q3 q - ;-------------------------------------------------
! h0 \/ R7 d9 |, \+ Z0 [+ K8 f4 u4 E - RESET_BANK = $1F F: `/ q N6 }
- RESET_ADDR = $FD00
3 f Q1 D) O1 @$ X# l' I$ U - 6 ~8 Z) e8 d4 B0 X( k
- ;==================================================
3 Y- r. s5 k9 h I" y4 H& _4 {# U8 \ - ITEM_MAX_SIZE = 12 ;最大节目数. Z4 [5 u- C# x; p* Y
- ITEM_MAX_INDEX = ITEM_MAX_SIZE - 1 ;最大节目索引
3 p: e Z, U/ { - PAGE_SIZE = 5 ;每页节目数
- D8 D& ?6 `/ r) ~6 o! q0 k, v( {
# @7 E# y! G! g0 a& N2 E- ;==================================================
) w- G+ X; i4 y. V/ z - .IF ITEM_MAX_SIZE % PAGE_SIZE ;不能整除
: T( \6 U9 V V2 G$ F - PAGE_TOTAL_SIZE = ITEM_MAX_SIZE/PAGE_SIZE + 1 ;页码总数; W5 x. y: t0 b4 C3 u# i
- .ELSE
, Z+ @. x2 i4 x8 M0 f& U2 h5 G - PAGE_TOTAL_SIZE = ITEM_MAX_SIZE/PAGE_SIZE ;页码总数
# O$ v" g0 W8 {- ?; e. T4 ` - .ENDIF
8 L9 ^, s4 y) F1 q. t! a( m - " e5 ?7 t' d& O7 K
- PAGE_MAX_INDEX = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
3 e0 D* [7 d6 `/ Z/ j' g% J - & B. \2 z, U1 x2 R& W
- ;==================================================# x6 ^" ?# U6 H5 }& h
- ITEM_SHOW_POS = $20A8 ;节目名位置0 P0 y( Q" u, B, L+ @- P8 k6 _
- ARROW_X_OFFSET = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2
/ L3 f+ U* V! u+ G! j% ]. r - ARROW_Y_OFFSET = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;
$ Z5 h# D" N) ^; _. z - ;==================================================
7 r- w- L% `7 d8 i - Caption_Text_Pos = $204D ;标题文本位置
4 l1 e+ h6 s' M/ v# n - Author_Text_Pos = $2324 ;作者文本位置( V" P( h1 X; d1 |, ^2 Z. T+ p
- Date_Text_Pos = $236B ;日期文本位置# ]* S) ~, {0 O' K0 k6 s0 }7 u3 S
- ;------------------------------
" L# R6 Y% {1 G/ J) } - ;------------------------------& i- ~8 u8 U2 s- P$ h9 a9 |- n' I
- .IF SOUND_BAR_SHOW_ENABLE# n( n- b" e# P* g9 k1 J% }
- $ S, u/ b# a; j1 ]
- Play_Index_Pos = $2273 ;当前曲目位置
7 h( ~) \- J# K* `3 ?$ e6 J& j - Play_Time_Pos = $22B3 ;播放时间位置 `7 e a( C4 K: j$ g3 P
- Play_State_Pos = $22F3 ;播放状态位置: F Q+ I. O Y+ H* q
- 3 A3 v9 S$ d% C1 a
- .ELSE
% d5 h3 _1 T" H. }+ X( Z* s4 }, p+ f -
1 z; G% h% W' |- F8 T5 f6 A$ Q - Play_Index_Pos = $226C ;当前曲目位置* A! @! i; o$ f: L1 [
- Play_Time_Pos = $22AC ;播放时间位置
9 l& ?7 ]0 i$ x - Play_State_Pos = $22EC ;播放状态位置; o6 W' {; U6 d: C- m+ @, U) o9 q
# g9 Z: q# w l- .ENDIF
. z1 A4 x2 I, r4 _( Q - ;------------------------------9 _8 X( Z5 d4 R6 Q7 r+ o/ W/ `
- Track_Name_Pos = $222B ;曲目文本位置5 H9 z0 [( s5 t% a- _$ e) n' W
- ;Track_Name_Pos = $00 ;曲目文本位置1 Z: X! Q1 `' S5 k9 c3 A) A
- Sound_Track_Pos = $2265 ;声道文本位置2 o! g' k& `) i+ E% B
- Sound_Bar_Pos = $2269 ;音乐条位置
& c# p4 i1 Q0 y9 T4 G - ;==================================================! x; n' ^9 e' C( ]
- Scroll_X = $00- L7 C+ a; P K# H* p/ z; a
- Scroll_Y = $00
& @/ e8 ]& q: k; P# Y - ;==================================================
9 ?: H0 p" o& Z2 ?+ y* f: T - Sound_Ram_Addr_1 = $0100, g$ X5 D& u7 \: z8 u
- Sound_Ram_Addr_1_Size = $80
! `: P# [: P @; b9 Z4 y - Sound_Ram_Addr_2 = $00909 e5 L7 [" h+ Y2 {6 S6 \1 c5 p
- Sound_Ram_Addr_2_Size = $70, w# N! X" \+ o5 L
- Sound_Ram_Addr_3 = $07004 P( _8 m V1 f
- Sound_Ram_Addr_3_Size = $00
+ j; _, [. F$ g R: b& |2 z% U - Sound_Ram_Addr_4 = $0400
9 b$ Q9 e: [# c& o: B - Sound_Ram_Addr_4_Size = $00% B- u: q/ G6 T( M
- Sound_Ram_Addr_5 = $0500
% [8 J- K, B* K+ h# f) v - Sound_Ram_Addr_5_Size = $40
+ X; `/ z8 x/ z& T$ N - . w% J! N' q0 d5 @+ L3 O
- OAM_TEMP_ADDR = $0300
# t2 o* Q8 y' v
" i% ]' _- r) Q' [5 L% Z- ;==================================================
% Y7 T& h2 X) _( F - PPU_CTRL = $2000 ;PPU控制寄存器& \( X0 Q# P# i9 e9 m
- PPU_MASK = $2001 ;PPU掩码寄存器
" i5 T' B+ Y' q( q - PPU_STATUS = $2002 ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
. a1 ]# s0 z) C) B' S. u+ r" l - PPU_OAM_ADDR = $2003 ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加10 L P1 t/ J1 `6 l7 `' ^5 {
- PPU_OAM_DATA = $2004 ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1& P+ G8 v3 Q1 L7 X( j. G2 e
- PPU_SCROLL = $2005 ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 ) W8 K. C+ r; r! V6 [: X% Q6 R
- PPU_ADDRESS = $2006 ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加5 a, k4 M# W; h1 _' z" D- n! t! O
- PPU_DATA = $2007 ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
* \! |8 w$ F8 x4 O7 [ - OAM_DMA = $4014 ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
v R" z1 d2 L' ? - APU_STATUS = $4015 ;声音通道切换: [) y# O& T! t9 P) R" ~! T7 d
- JOY1_FRAME = $4016 ;手柄1 + 选通
& W" l) c: |2 E6 v) [ - JOY2_FRAME = $4017 ;手柄2 + 选通
* g& c5 k* c2 ^3 M+ d4 e - ;==================================================2 A. g6 c* C: @' C
- MMC3_BANK_CTRL = $80004 P: F; E Z& S* S* s7 @
- MMC3_BANK_DATA = $8001
; l' b! [6 Z# o+ P$ s5 t - MMC3_MIRRORING = $A000
2 J. ?7 ?7 \2 H, n+ P4 Y# q4 L6 X+ l - MMC3_PRG_RAM_PROTECT = $A001
+ T4 `. v! ~( W - MMC3_IRQ_LATCH = $C000% ~$ m6 f' f2 N/ x2 `
- MMC3_IRQ_RELOAD = $C001
% B+ Y+ ]2 [8 f2 Z7 b/ ` - MMC3_IRQ_DISABLE = $E000
9 `3 ~5 `# @3 U0 M6 q - MMC3_IRQ_ENABLE = $E001
, {9 @1 d+ Y' A' B0 L - p0 B, a6 b! s3 B
- ;==================================================
4 m5 U4 b* ?9 d6 f* o. A* E - PPU_Addr = $0200; T1 ]6 D5 f0 ]
- Palette_Addr = $02C0; B" k) C) y; z: c; o, T5 l+ b9 [+ c
- Sound_Bar = PPU_Addr+$E0
" v7 @6 s9 b/ y - ;==================================================
3 Y3 ?/ o- T6 j m5 m1 G - Bkg_Palette_Update_Addr = Palette_Addr+$0D( [; Z f7 Y3 [# e4 Z. b6 S; q9 ^
- Sprite_Palette_Update_Addr = Palette_Addr+$11
- i1 E: E/ \) M$ B7 n! Q E - PALETTE_UPDATE_MAX = $2C9 c$ R8 A- q' E/ H+ M* n8 {4 ^
- PALETTE_UPDATE_MIN = $218 o0 P9 N. D- h U8 x
- PALETTE_UPDATE_INTERVAL = 60
" g% Y! i1 g' }* H* Z. ` - ;==================================================
/ ?9 o$ z5 D/ f, V - Sound_Bar_Cnt = PPU_Addr+$F0* u$ F- j; h' \3 d
- PPU_Cur = Sound_Bar_Cnt+$02, w! q- H4 t6 D8 B
- PPU_Addr_H = PPU_Cur+$03. b9 {' Z! J4 ~- M8 x$ _
- PPU_Addr_L = PPU_Addr_H+$048 z# I- X$ V$ v5 {$ X' k. Y
- Screen_Ctrl = PPU_Addr_L+$01
: O1 o; S+ k- Z - Screen_State = Screen_Ctrl+$01
2 h- L& _8 x2 i( y. C- d - ;==================================================
( [% H; N, T2 y8 B0 P - Use_Ram_Begin = $50
9 u" q) f" ]: b, W6 a# z! W9 W - ;================================================== n2 x( P+ U* M
- JSR_Addr_Op = Use_Ram_Begin8 [: L" ?3 u3 P5 p* U, C
- JSR_Addr_L = JSR_Addr_Op + $01
9 P8 |0 @3 Y; e7 T+ Z; t; H - JSR_Addr_H = JSR_Addr_L + $01
) ^4 P# p3 ~9 v6 P - JSR_Addr_Rts = JSR_Addr_H + $01
3 P s) ~& J+ C6 C! Z4 o - Data_L = JSR_Addr_Rts + $014 b, F% Z+ `7 p* _7 \; A- K
- Data_H = Data_L + $01$ O+ I; X% A5 k% O6 { ] S
- Data_Cnt = Data_H + $01
9 n8 m: u5 S$ Q - Data_Buf = Data_Cnt + $01+ X7 C. Z) V0 H* L# S J9 t
- Nmi_Time_Count = Data_Buf + $01
- P0 U. W3 f4 Y9 Q- G( T8 }" f - Time_Wait_Cnt = Nmi_Time_Count + $01
, l5 F* B5 Y5 ` D9 F+ L3 G - Palette_Wait_Cnt = Time_Wait_Cnt + $017 @; v5 f% A3 a0 M7 }
7 _6 c- V0 [+ @/ D+ R- ;调色板刷新标志( w, e# Y( r; k8 W6 ^
- Palette_Update_Flag = Palette_Wait_Cnt + $01
7 ~3 w0 I8 ^; Y) @' N4 ]" d - % Q8 ?( w( C: b# N) [
- ;当前帧文本写入禁用标志
" u& H% D) B0 V& T+ A - Text_Disable_Flag = Palette_Update_Flag + $01
1 Z+ Z: H$ B+ N, Y! }" _" K* k
8 e" e7 \" w2 V8 B6 ?& ^- ;==================================================8 I+ m5 p, M. Q% I, v, R7 y
- ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动
* A7 a( V, H0 V' t9 O8 W5 F/ I/ u - TEXT_DISABLE_BAR = %00000001 ;音乐条8 H* j. j- v1 O4 B. m
- TEXT_DISABLE_TIME = %00000010 ;播放时间: P, O( k# i0 W, r( v g; i) B
- TEXT_DISABLE_ITEM = %00000100 ;播放时间
P+ V# r. {" j( z! V) w - TEXT_DISABLE_RAM = %00001000 ;播放时间
" T/ g* o8 T1 [' z" t2 a - ;==================================================, Z8 N1 F* h8 C( C
- Key_Keep = Text_Disable_Flag + 1% W2 A+ o' f" L
- Key_Once = Key_Keep + $01
8 v! Y5 d& p5 ?3 q" W2 I$ U5 u - Key_Kemp = Key_Once + $01: \. C: E; {6 E1 s7 Q
- Key_Temp = Key_Kemp + $014 r) v; G( [) G" H
- Key_Getv = Key_Temp + $01
% P0 S8 }( Y! t" P' u - ;==================================================
3 u! M2 Z4 J2 s5 ?% U - Music_Item_Cur = Key_Getv + $01 ;当前音乐集
+ w6 {: c! b/ g- @3 k6 a- f - Music_Item_Last = Music_Item_Cur + $01
; @8 W" E$ s4 q+ ^$ {/ J% @8 q- f - Music_Total = Music_Item_Last + $01 ;当前音乐集2 e, ~+ a( p9 ?# p3 |' l
- Music_Cur = Music_Total + $01 ;当前曲目
+ K! B" { X" F- C: `3 _9 M - Music_Last = Music_Cur + ITEM_MAX_SIZE ;上一个曲目3 _, Y6 i$ v/ |% x7 v
- Music_Stop_State = Music_Last + $01 ;播放停止状态9 R' H5 |! |/ q& o& _
- ;==================================================
% x2 D; p! `; e3 a& j( i - HEX_Data = Music_Stop_State + $01* }& B- g9 `1 T* H+ P+ Z
- DEC_H = HEX_Data + $01
^! K1 d: s3 \% ~$ N( x - DEC_T = DEC_H + $01
) W+ Z- Z. M1 _; B/ Y0 @ - DEC_L = DEC_T + $01) o3 C& w6 [' \. b
- ;==================================================- Y! | q* @0 Z+ ]. M
- Time_S = DEC_L + $01
8 |* ?2 m o1 v; q) b2 Y - Time_M = Time_S + $01
& v% u1 Z; w$ b2 ?' E$ C - Time_H = Time_M + $02
( G) z4 u/ O* t8 w/ Y7 a( Z - Time_Cnt = Time_H + $03
4 u6 s" O" z, l) J. q6 `" G - " F& p; V4 ^! I/ F( U
- ;==================================================
5 j3 ^& g Z, [6 h$ i - Music_Bank_8000 = Time_Cnt + 16 e- S9 I$ l4 n6 ^# }) s
- Music_Bank_A000 = Music_Bank_8000 + 1. t0 L' M# l/ S
- ;==================================================/ `/ v5 k& {" Q8 h, \% W' S7 t3 U( k, E
- Scroll_H = Music_Bank_A000 + 1 e5 a1 I0 A0 W Z/ M$ B% C
- Scroll_V = Scroll_H + 1# l: o; i6 i4 P' u& M: g
- IRQ_Process_Index = Scroll_V + 1 Q; g7 M. t5 h8 Z: |1 b
- ;--------------------------------------------------
+ ~3 l. c/ P# Y+ D! Y6 f% { - Page_Cur = IRQ_Process_Index + $01( U) [" l. s9 ~; V
- Page_Cur_Index = Page_Cur + $010 e! u6 C# H+ D: P' S: L
- Page_Cur_Cnt = Page_Cur_Index + $01 e9 e: L" m! F: f' b
- Page_Last = Page_Cur_Cnt + $019 C8 h. r) \8 [! t& U, U& S+ v
- Page_Last_Index = Page_Last + $01
! r1 `% F8 k- Y, K: o- d+ F) | - Page_Last_Cnt = Page_Last_Index + $01
" A$ p& p$ Y: `/ s2 R$ J - Use_Ram_End = Page_Last_Cnt + $010 T$ ~. n! i# C- _( W/ J
- ;======================================================================. `7 T$ a+ g- c- m" e/ d2 u8 T% B' A) R
- ;音乐数据块
* N- z. `5 H9 |/ K& S2 }& c - 4 u; o, v0 Z5 \4 m3 O6 Q
- .IF SOUND_BAR_SHOW_ENABLE
3 m' |( y6 @7 f- L - 3 t5 \$ k5 I D5 V b& x
- .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK& S; v. t) s' d1 W" R; b7 C
- .ORG $9000
2 T3 M5 V# X5 A! X# e' T - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
& C$ p: a# Q! _* Y" I7 p - + _0 ^8 b5 J! o' J6 f' N8 v8 g
- .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK( w3 `+ }# f/ W% P- i6 _! k8 g* R
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"& [/ y% t2 k% A
-
" W6 C: v1 l4 a" j& e+ o) a - .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
- w# t( b' F( F9 P - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"1 ?3 d8 p7 n( t; o/ U' Z2 [
-
5 k4 z: V# [; H/ U3 _% @& s - .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK' j3 L( P$ V# J w6 v5 K1 O
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
& a& a! \3 o5 b# l3 D/ A/ V - ) F9 X9 E2 v* x2 k8 y# p
- .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK1 j2 ~+ ? U+ C
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"+ e! `+ V7 p4 J* O1 P h' Q; f6 P) @
-
. H0 h2 `+ B# d, ?2 p - .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK6 T8 ?, F$ d% X
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"2 X! {( w% f% Y8 y1 D8 P) g; A8 \
-
& c5 g) W# `& W4 R - .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK. [2 z$ H) y, Q3 A2 L( b! g; a
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
K0 w) H9 C- G. c5 b -
$ T3 j5 ~5 Y9 M - .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK+ u8 A8 q. ^( L& V$ n' H2 n
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank". ~+ ], \! h8 I" x) l. V
-
# `8 F( j4 M! O4 I - .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
: i( N# v& i0 V i) W. `1 n - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
7 _. R, i! w E4 ]! z" b+ J - . H& ~% u* l9 V- d6 r
- .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
?% }" s5 C1 a/ G - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
( P: r2 {; p! O4 w4 ]( U( S8 g h -
" s# j% \( D5 m) \7 c' c - .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK( Q U0 K! e1 T( x" b
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank") J$ E" ^5 V( f/ _3 s: X0 E
-
) j4 E d: B( \ - .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK7 Q' ]' U+ y0 N; Q# [$ t& s
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"! q6 d4 Q) c4 M( j, s: G3 I, F
- 3 t3 w1 _; |$ Q3 |1 v4 |
- .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK4 Y' F8 V$ c9 f' {- t3 p# g
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
8 ?& w* a' @7 y9 l+ \$ a+ t - : y/ M8 @2 O N5 h! _5 [! O5 ?
- .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
) _3 y4 L. h, g9 s - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"
% y4 B& T- |0 y. h0 C: P - % G* u6 [/ h. w% w Q4 E8 D
- .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
! \" v0 a( l _$ o$ v: | - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
7 E8 x5 U( T( q+ e+ V, K -
1 P/ j2 p! g! _& F2 _" _ - .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
; o* v7 ?; |! w( c' o+ _) ^; E* D - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
/ @5 u9 x3 j9 @ - * Z5 S$ o: |9 m
- .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
8 S# H, r7 F8 l; a - .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"3 w7 x/ w @& O. f/ P8 l1 I
-
! R* ?) {( g; F! X' R' U! L! d - .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK5 P+ b2 z6 k0 }& _( h
- .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
/ @- X3 E1 f* B6 o. Q8 D - ' q( _* _/ Y7 ?0 y' N1 J' I
- .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK8 m- A+ r* M4 w% w/ ` d2 L
- .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
( N+ g* I# l4 e ~ -
/ p2 e. ?% w, o- I4 P - .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK; Z" G: d) i3 N' x2 r
- .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
5 l% y7 k$ E' N -
' \2 \) L+ U5 N: F- v0 N! G - .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK& ^# P4 L+ E3 t& m) k- u. _1 y
- .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank" p$ j; @. J2 e' B6 Y
-
K$ L0 n; Z4 m) f - .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
& D! P: V, n. [# Y+ c: F, r - .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"
5 s; i8 W* U" P# s6 I1 I -
8 n2 T0 e0 i) \6 q - .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
( n+ i( \ P- l3 y - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"; h Q6 `' c8 }# B8 P4 I7 R1 X+ W. D
-
3 u' b' _0 ^; o' C. [' l - .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
! k1 T9 S* s5 E. E" d$ X - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
# q# n1 {0 k" j8 X' B - & h! m- `1 ?3 {& I
- .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
) M7 V1 h2 D+ [+ i. P0 J3 Y1 i. G - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"- I% y& {* {* ~
- / Z, ^( v/ U0 i- J
- .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
) }2 [; a6 ~! R* q* W& h( \ r - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
( z0 R! E! j+ J1 T -
2 g, b2 A3 k$ |) M5 a - .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK. v; o4 \$ z; X# ?
- .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"2 e; @9 b0 X7 `) q1 \9 U0 v
-
+ x2 r* C- g/ c% C. f - .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK2 Y6 e/ G$ ^$ Z% k: V$ e
- .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
$ J9 k8 T3 H3 J9 {7 h9 Z0 D -
* ?7 c2 H! [8 f' L6 v9 _ - .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
7 P" _- p! m0 p$ s" r9 `( ^ - .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
2 f9 a8 X$ Q8 F -
* _& z7 H4 Q* |8 f3 O - .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK4 ~2 Z2 c6 J$ Y3 S
- .ORG $D400
/ ~ _* B- Y5 Z# h* _0 i - .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
% f' N9 I1 x, y1 \1 [+ c# v -
/ n& N7 @; m6 P' p& l7 S' N4 x& j - .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
0 N( b( w5 ^ u6 ^& u1 E( e - .ORG $D800
5 n/ i# O) j. h; _! j - .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"* q I3 j K$ P. d2 b
- ! b- k# ?4 s; t/ E; b
-
# C Y; A6 n6 x j' ]) T - .ELSE
% Y6 K) ?% u5 G- H/ x; @ -
% n. M0 ^5 i" j1 ?! ?+ r* [, p. B7 N - .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK0 Q' m/ A" S2 B+ y2 G
- .ORG $9000% o3 V: m3 g9 W- W5 T: |1 a/ ]) R) V
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"
1 ^% `* q: h: F8 U" m -
6 r0 E( m! C% D1 c - .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK% @3 u$ E" Q! z" F" q, r: m
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"$ `: w5 f# ?* ~5 g" ~' G
-
: _9 L) t! w/ i3 t8 a: h3 U - .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK6 Z% k# _; z' V" d" i- Y
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
6 s/ L+ t% c$ D) a2 Z. Y -
! Z% |' S) }5 b3 H) E% K% ` - .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
1 w/ U1 `& m2 B8 w& B1 N7 s - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
" q& e1 C8 k, _( i2 @ -
0 ]( o3 v& _6 t4 ^! R! @+ r - .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
) I/ b X* }& R% {, y k! K8 @& b - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
+ R- ^3 }4 U& |# _; [ - . J6 l! v8 {8 N, E
- .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK" Z7 j9 I8 z/ P
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
7 e: f5 r6 n; p- p3 F* V - # M- _* A3 x3 t: H! p! Q k x
- .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
9 c; e6 L a3 D$ i - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
# b. s% B/ A" s( e3 s8 k# K -
7 S2 C& }3 a+ N" t - .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
q% @5 P! ]1 U. S - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
! K1 h3 _/ W) `& Q( Y! h -
# K4 u ?; L4 L' u) M. ] - .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
! v) S; S; m* \ y4 C/ ]& q0 R - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
- X4 X7 A4 y- G5 g -
a d% e, v7 A' y# M - .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK9 \* J" _, x" r1 T0 V3 v/ ^& K' I- q' a
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
' @- U" e J0 _3 s* ]4 B - / d) b! X7 B& A' f( z
- .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK. s4 S H( H" A# W& Z+ N5 ]7 i
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
# \6 k- M$ O- M* y/ m) |% k - , m4 S% } W [& z) v6 b2 b# R% r
- .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
2 `& `- d3 H/ ~: K3 l - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
( ?/ ]& ]3 J" _' E6 j, d - 6 i9 ^: Z) k% A. f/ S/ b8 z
- .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
1 R9 U8 I+ N4 V# H/ q+ ? - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
4 S" t$ m, s. J" h# q - ) [+ x; Q# U# ]+ a
- .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK/ N- @( F( \- K: |' M
- .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"
% X( F1 S2 h5 B2 b) z -
' V6 f7 ~& h) F# U0 J: f - .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
! Q! w- O5 p2 c1 G+ I% n3 A - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
/ u0 c& G V# F* b3 r! J -
- D5 e3 |/ d9 }3 S8 b( W* ?; l" C - .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
3 u2 n) A* N5 g' r6 n - .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
& O2 p% _2 ~3 W2 X) \& b! p) x1 d - % s* \# d" C3 K
- .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
& s; F+ @3 H1 [0 S/ W0 M$ V+ D. B - .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank", {7 S( c; x" L# r
- 3 M1 O; u! H1 j( O c/ S$ ?
- .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK6 L8 n e7 P+ y; k- _# n
- .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
" \4 H3 C. q9 t( u) o5 s. B, p -
; c$ ]% Q, q* O- S1 }# K - .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
( g$ ~3 P/ P" Y+ i- A* I8 S - .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank". h8 B( {& c& V8 X1 h! a
-
! y Q2 m; `9 W( n0 c0 H - .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK+ C. }0 F, }' v) l1 P
- .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"# H) R4 q7 j( U, o# Z8 s& y' J* ^
-
# q; `: r0 e; u* e - .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK$ d c! c( T9 G" J
- .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"1 m& H3 t; g. n, h _; P
-
+ K7 \7 C& e' A/ P - .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
+ E+ F) r$ ~$ g6 G& [, Q3 W5 x" q - .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
7 G: I9 U7 }$ W0 B5 L4 [3 Y/ p9 b -
7 c" i' b, `9 \1 X( Y* Q% ~2 _. ] - .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
( G& Q! \+ a- _ - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"% L1 g6 v8 }( b9 d6 e+ V' m( x; X
-
) B9 w) ]- Y! f9 }( H - .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
6 g9 m2 k* E; t3 B - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"0 {" J$ H+ |. @$ \
- % z3 G1 U4 X/ L* A5 Z1 V/ B# \0 w
- .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK5 b+ R* m: W; q9 w8 z4 Q) d+ v( \8 y
- .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"* X: Y- e4 E* r2 K6 U
-
% ^2 K3 k' `3 d& } - .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK% p! d# O# k% i( P
- .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
) @* v+ j( g3 c' N1 ^ -
8 r% g. i/ P4 I! K% _ - .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
- b+ b5 q5 |" Q5 ~ - .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"1 ]9 O4 w5 x/ ]1 x
-
8 X/ Z4 x! r8 s0 i$ Y0 A1 K7 Q - .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK, }) d- K% e) I* P: P
- .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"3 F, v8 w1 y4 Z1 L
- 6 j7 D; b- F$ @/ P j# {) y7 h0 `
- .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
/ B% L( q# {6 u - .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank" e, k# h+ O7 s. e
- 8 H5 e, g, Q' U* w6 s6 V
- .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK' m$ Y4 Y7 N+ D: @# `3 W
- .ORG $D400
, k# b1 D( g& j) i - .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
" I& \! ` f7 a7 E - % v, Y4 b4 g$ [ {8 {! s; x
- .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
9 r2 y. i2 w; }. y! s6 H - .ORG $D800: C; B q/ B& |' j
- .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
% z+ v. Q- G" a5 { -
$ z; z! v6 J2 ^! ]+ W6 b - .ENDIF
4 Y o/ j. H& G, O. S+ ^! J -
4 Y1 u* _# F6 D. U/ k! K# S: d - ;CHR图形数据' H0 A8 l+ _: v7 \& Q; `
- ;======================================================================3 @. u# ]5 I r ^2 K# ~2 K6 D
- .BANK CHR_DATA_BANK. e1 ~5 G1 r. @- f. {* w( p
- .INCBIN "chr_bank/chr_data.chr"1 r5 N" g/ @2 Z% U0 f- U
-
' D8 a/ O( Q+ r. Y5 a* S4 i, P - ;======================================================================
1 d( A* [4 x8 ?% E; b3 }9 k - .BANK PROGRAM_BANK & BANK_DATA_MASK
9 `4 [( z/ T, S) B5 j' U( g) T+ w - .ORG PROGRAM_ADDR
* P/ }* ~7 Y! i2 V8 Z+ ~0 E8 Z `' ? W
! k5 V( x+ N. [! T; T) e9 z; x( X- ;==================================================
! i9 g! f8 y* `1 T; y - NmiProcess8 W" H1 _6 p$ |% E4 B/ N6 g
6 b: h E- N, l' f( Y+ u9 n- ;关闭屏幕控制
/ @6 q0 G1 e- O2 C& R6 z - LDA #$00
5 q; N' O: v9 v- r$ X - STA PPU_CTRL
) m# k& z6 ]4 U; E2 O7 @) T9 r - & X8 R" R% w9 E8 c( ^
- ;没播放音乐就不需要触发IRQ
0 p1 h1 c ^) X - LDA <Music_Stop_State, m! p" b1 Y6 ^7 J* H, ], s% B
- BNE NmiNormal
) ^: {8 m) I, v( K* e6 H) Y -
; O- A. O: Q: }. a" m$ x) V. _ - ;重置IRQ索引
' K9 g) l+ a& p) x - LDA #$00; r" F( T: Y5 o, S: z) K$ l) c
- STA <IRQ_Process_Index# c {9 B6 f: v4 B
-
+ l8 R& B% ~& f# @( b - ;时间秒数为空则跳过5 a. Q! o- @6 K8 e8 E$ e) _( U: V
- LDA <Time_H
0 o# S, t9 W" ~2 o2 q- ^8 P; l5 z - ORA <Time_M
2 m4 v1 d3 a# v. A - ORA <Time_S
( x1 Q) k8 j7 s6 R - BEQ EnableFirstIrq
+ r9 ]% b( ^2 \ -
. Y2 G' _( G( _ - INC <Scroll_H
* X! b! l4 n- m - * e$ y r3 u) ^6 |. a8 s& K1 R
- EnableFirstIrq + w ?/ ?- X" h. Q1 `1 |9 j6 O
- ;80条扫描线后触发IRQ
2 {! z9 x u5 q# q. b/ a - LDA #IRQ_SCANLINE5 P6 Q( V1 ?5 u0 L4 p7 _$ H0 _ k
- STA MMC3_IRQ_LATCH
$ }5 F! i$ ~( A6 e ] - STA MMC3_IRQ_RELOAD7 U, r% f* Q- V+ C4 y
- STA MMC3_IRQ_ENABLE3 @$ X: Z& q' \1 K" K/ p
- CLI
" ~3 ~0 Z7 ]% [9 t U" i& r - 5 q+ K3 y7 {) p( G+ I
- NmiNormal
& I" ?+ ?0 d+ b8 D) ~
; K% X% w7 g- }* n" E7 u, r- ;处理PPU图像
1 i, a1 T# z! Q; F7 R) e - JSR PPU_Proc2 p: f }7 E- K' z' r% |
- ; X( W9 @: a+ X H; T; U' F: p
- ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
. x8 ~' P: R$ ^8 v6 s r - LDA PPU_STATUS
* g( m2 c. k) X5 F - ;LDA #$00& K3 Y# R/ o! S2 b8 y$ ~0 `5 t2 f
- ;STA PPU_OAM_ADDR5 ]( n( n5 h. E. [- n
- LDA #OAM_TEMP_ADDR / $0100
6 N2 N; L' i1 M! | - STA OAM_DMA
9 F4 g* \% L* c: Z, x9 @+ ` - 9 p# v9 L3 I. H% V
- ;启用NMI中断( T# f2 i2 R, r: e& o" u
- LDA Screen_Ctrl& @/ w5 q2 W" z7 q1 Z ~# H j, W% r, v
- STA PPU_CTRL
' q3 ?+ f, F; _$ X+ R( Q, Y -
3 q8 v- b, z6 j4 S" Z0 k" K - LDA <Text_Disable_Flag# t) N5 ^) S4 F2 m4 f
- AND #TEXT_DISABLE_RAM8 P8 W- Z7 K% D4 O, L: B
- BNE Nmi_Sound_Play
! s. v, }2 l2 U0 p, x -
2 U: {4 |& F0 \* v - ;处理手柄输入6 Z/ w) d2 `* i: M( [7 f
- JSR Key_Proc3 l: m6 p* _ B( h* [3 b
- ( ]5 L+ v7 ]9 z. r, f
- ;切换音乐(手柄触发)4 g" B3 P* |6 O. \, v( z6 e
- LDA <Time_Wait_Cnt
4 n% w3 z4 O, k/ n - BNE Nmi_Cursor_Arrow6 A$ ~* p3 C% l0 \! m& i2 d
- JSR Change_Select_Item6 I- W4 y4 u8 W! O4 H( v% w; n% d
- 7 L0 `3 R8 ?* `7 S4 B( J6 k
- Nmi_Cursor_Arrow6 q& m+ l- o$ T! \8 _, x
- : ^/ N' ^; _) Q6 K( J+ Z+ ^5 G
- ;处理光标箭头, N6 @8 S: p1 o' \; e2 n3 g
- JSR Show_Arrow
S% b5 A# g# D' Y - % R. }. J5 L/ e5 g4 N
- ;更新调色板
+ ~& V) q, c5 z - JSR Update_Palette_Data
6 F+ t0 k) E; k& l$ Z - " s! e9 z& R+ l h6 W0 d
- ;显示时间(缓冲)
/ K6 x/ f" ]: Z2 M - JSR Time_Show
- r* `! T8 P: M$ o2 }: ] - ( v# l: g: v0 ]- d( ]: ^* Y
- ;音乐显示(缓冲)1 N3 V( U. j/ v# i- M
- .IF SOUND_BAR_SHOW_ENABLE. I- z" \5 _" A7 K
- JSR Music_Vision
* i6 t- [" _% Z+ Y+ l/ R; G8 E - .ENDIF5 G0 G, \5 Z* h* Y% h; J3 o
- : C. `% z7 C, L# r
- Nmi_Sound_Play
N+ Y9 X/ m$ w$ M* [0 I( u - ;播放声音+ W, \1 Z1 S4 ? Z) m
- LDA <Music_Stop_State1 ^( S. W+ ~+ `% W! \/ z8 W2 y9 j
- BNE Nmi_Time_Wait_Set
! P. }! Q% @( }8 \ - JSR Sound_Play_Proc! H% R: C' Y+ f( I5 Y. G' G8 F
-
- S8 P9 t+ a/ w2 g3 y. ?8 x# e8 {8 N0 f - ;播放计时9 A& ]. b H4 u. A0 ^8 h
- JSR Time_Count* p3 T* Z5 f' T
-
% n2 S$ ?: @8 t8 Q0 s' k - Nmi_Time_Wait_Set
' ]" T0 \ t2 n- h% n9 S1 R) H - LDA <Time_Wait_Cnt
; Y( G) u* |% ?% ^ - BEQ NmiNormalProcessEnd
: v5 v; j A5 b1 ]/ p - DEC <Time_Wait_Cnt
9 h: I+ v. M$ K) G. M6 t z - NmiNormalProcessEnd
0 ~- T3 g% u: _3 H+ D/ ^ -
7 T& n5 Y+ K. ~. W" u4 R - INC <Nmi_Time_Count
1 m8 S1 J. E" ] F' { - |. N5 e7 p" ~! G
- RTS
5 U2 B9 }& _( t. p4 @! h - 6 T O3 a9 i9 X8 T* V8 J2 B
- ;==================================================
9 z- Z" e2 b7 i% _/ u( d' M8 ?8 W8 R- ` - Init_MMC3
0 u( l, K* x" O) q! \; a& L - ;==============================8 E& v( L. r8 r. E) L9 C
- ;禁用IRQ4 ~# R4 O/ _# g) d4 P1 S2 G
- STA MMC3_IRQ_DISABLE8 t: {& B& M+ F( R7 K
- 7 ^/ k( |8 c6 ^! v& `
- ;水平镜像
0 d; z2 G! o5 w- N - LDA #$01* E; Z- T, J) V7 B
- STA MMC3_MIRRORING3 Y/ N1 I- }; |0 P. S v* B" }9 F! T
-
$ {; i# c% V# k( l - ;初始化图形bank
2 R$ g4 Q) Z/ A; D, i - JSR Init_MMC3_Chr_Bank6 ?7 P" C: Z4 M1 G7 e \+ r3 a
- . m$ c0 q) v& a. j/ y
- RTS4 Y1 a) T1 g1 W/ m! Z$ G# l7 R
- ;==================================================
; t' v: L4 }2 K/ ~, n; E - ProgramBegin;主程序
# k4 y1 K+ _# ]9 ]( Y - LDA #$00
6 a$ m* \5 y) p- |( I& j - STA PPU_CTRL
( I- Z& K9 E' i* J! Y - LDA #$00
; Z% }& R, _* c - STA PPU_STATUS, R) Z+ {- K2 P- ^2 I
- STA PPU_MASK
; x& a0 p- Q4 k; _' M - STA JOY2_FRAME
5 `* l$ Y& s- s; d - 9 s3 d0 l$ c# N( W1 `5 I/ z% c
- STA PPU_SCROLL: ] j- L% w; k0 k3 A( H8 @/ Y; A
- STA PPU_SCROLL7 L! D" K h1 Y. I, a9 H
-
: c1 o0 _8 J" ?: R6 R- k - ;==================================================
/ M* A& c; n$ S/ s' D7 v9 X - LDX #$FF+ w" S. S8 @) p1 Q
- TXS z; U* R4 ^) ]: @$ D5 v
-
' j8 D6 v% |8 _, P0 X! F - JSR Init_MMC3% L. ^: f6 v5 S* n
- / Y% a2 d" E1 w3 V& H% g
- LDX #$02
, h# L4 m+ b8 G" [: N - Check17 \6 v# u X9 O3 ^: x' {
- BIT PPU_STATUS
+ i2 _' t+ k6 O* L7 m) M3 I1 g3 k5 j( g - BPL Check1' B/ D8 p: h: L
- Check2; o8 x3 a4 k" A' ^ x, h
- BIT PPU_STATUS
1 T1 ^' Z- {3 Q. v - BMI Check2/ S6 [* v. z& I$ M8 j- d+ Z) T
- - ^: K- j) L( X6 O3 H
- LDA #$0F' X/ X- z6 g0 M' |
- STA APU_STATUS
4 o& f3 j7 E. H" x - LDA #$C03 L8 r& z1 \" o
- STA JOY2_FRAME
. M/ g& |! t+ G2 P - ! z6 |& N$ _& Z' t5 R V6 B. S
- LDA PPU_STATUS6 `1 Z2 Q6 n5 A
- LDA #$10
$ c ?$ d2 R* ~ T2 V" u: A - TAX" C, }9 j/ R, D1 ]( }
- Check3
9 q& l/ [) y( I; Y+ ^7 x8 f8 C8 i6 ? - STA PPU_ADDRESS
" H3 M" ^: Z$ z - STA PPU_ADDRESS* i# E9 e- }$ t% J
- EOR #$00
; q9 W* T! d) Q! e! J7 J: G1 e - DEX
9 K4 T N" K0 S5 b4 a# r - BNE Check35 H, _2 h$ g- ^) v% ~. g+ z2 J3 e
- ;==============================
2 V2 E4 B% b# S# ?; ?4 ^( L2 l - ;调色板清空
, \, ^7 J( o2 K - LDA PPU_STATUS/ s8 B9 M: G8 C7 V/ {& \- g
- LDA #$3F
# Q8 }$ B6 u& t) w# d! d - STA PPU_ADDRESS
8 `6 f3 K8 X8 m7 K- T; @6 W8 ^( t - LDA #$00/ [7 n( ~7 |% J6 y
- STA PPU_ADDRESS
! T8 N, i7 E% G! x; N - LDA #$0F
2 I5 f' Z. q2 G+ g - Palette_Clear6 _4 |' \, ?) ^& K# j. E
- STA PPU_DATA, e0 @& A5 |: K: L9 `
- INX/ e' {, ]% \; X
- CPX #$20
% l5 n$ ?1 M& T. f- s, K9 \7 K - BCC Palette_Clear5 d1 n8 u# |+ f0 M: ~7 s! _
- LDA #$003 \& J+ ]+ h& [1 E
- STA APU_STATUS2 i) |+ X K# y% t
-
% c& K& z1 @; O- f* B- P - ;==============================4 {, Z1 V" k; N6 z8 {8 k6 o, d
- ;RAM初始化
" A7 U, E6 Y- U - RAM_Clear_All: K% l. w6 J9 ^
- LDY #$00
- q M0 g0 C: `. W' d4 T5 h - LDX #$08) Z5 L) c9 |3 Z$ n
- LDA #$002 E/ r6 t0 `" w- u8 c
- STA <$00
1 h8 @& E2 K; }# H - STA <$01
4 [$ S$ j. ]0 s; O' R - RAM_Clear_All_Start
( V0 X/ u7 X5 Q s - STA [$00],Y; T$ ?% H( i9 [3 g
- INY# Y% e; X, o) |8 E
- BNE RAM_Clear_All_Start
/ M& L/ b5 z8 Q; d$ g - INC <$01
* O( `+ ?: p* i6 y; n - DEX
4 f+ O& [- M! I( M - BNE RAM_Clear_All_Start9 a) @6 m! M( V
- : K, `. @% H [5 u* k
- JSR VramClear
. u( ~% W& c% O3 B* V - JSR VramInit
! Q$ e1 u1 f6 e0 _ - JSR OAM_Ram_Init
" n. a- Q1 M+ e8 r0 W3 b2 [4 W - JSR Init_Palette_Addr5 V3 ]( b$ ]( N7 q9 I* |
-
9 O$ Q( N M, c; [3 F6 B* d5 w - LDA #$FF
+ q0 b% G0 H$ [7 W q - STA Use_Ram_End$ S+ O2 {# R5 `- K
- ;==============================
3 ?/ |2 f/ @; i; ~1 H) s6 @. a - ;初始化背景调色板
4 S2 ]) U" ]8 l+ ]! B A - JSR Set_Palette_Color' ] ] m! _( u' a
- JSR Set_NameTable_Attributes
. G8 a, Y( G; P7 s. |) h
8 c p9 p( X3 ~% b! K, i; \, h" U- LDA #$00" n. P; N! @/ n4 u) w8 \3 h
- STA PPU_OAM_ADDR. \# ~% s" ?# Z
- LDA #OAM_TEMP_ADDR / $0100
2 l! H* O) K5 O" } - STA OAM_DMA
" W+ y) u- X! M - & s: A& }# p/ }& f" P9 K& e, w
- JSR Sound_Reset_Proc' k' F' |1 R9 }2 c8 O# D
- JSR Set_Sound_Total
- r+ b7 l7 Y8 j# a. r3 _1 E -
+ l y" A; Z9 h' ]0 c' ?! Y - Init_Start_Music
/ J( F/ L0 y/ c) n - LDX #$00
# Q+ s) J% e0 q" ^4 {+ T. i - Init_Start_Music_Write m/ T7 D' e: B& B2 q
- LDA Sound_Start_Port,X0 U' C2 A B& H6 K2 w% u
- STA <Music_Cur,X4 L3 q+ G6 D3 \: n& x' ?% ~9 K& M [
- INX
* r0 H1 u) u5 ] z - CPX #ITEM_MAX_SIZE4 r/ o; h6 z( v i# {
- BCC Init_Start_Music_Write
& H- } I* Z4 T* U7 } -
3 s# z. B/ }7 L3 r8 m - JSR Show_Music_Text
3 ~$ Y) X4 o9 i5 d+ B& ?: g -
$ N& E/ K; l! l5 Y0 v$ L - .IF SOUND_BAR_SHOW_ENABLE+ G. Z9 F9 s- X: _" Q1 ^
- JSR Sound_Bar_Text_Set- a9 y, _2 R% [8 Q" k4 i0 C
- .ENDIF
% [* L0 x6 @. b! t0 o7 f( z - 9 ?7 D* S5 j& h1 B& |
- .IF Track_Name_Pos
/ ]+ E$ L+ U3 x% P/ d6 h h - JSR Show_Track_Info( q) Y- p1 N7 i
- .ENDIF
) k; G4 F+ r8 ^( i# c! ]! [8 X+ O -
$ q. J9 I) C% m" ~ C5 K9 W9 j - JSR PPU_Proc0 Z7 E/ |9 h9 E5 h# |2 J) }
-
, l: }0 \" k, o! p! p - ;==================================================1 @/ L: t3 Q( [$ w" u$ h5 q( _
- ;音乐bank初始化
9 j/ r* B) @+ f; @+ a" X) Z - JSR Init_Sound_Bank
( o. G5 K% K( K9 G1 F9 f& b - 5 G( r: V9 F! a( w8 }3 N! L! H
- JSR Music_Show9 ]6 B; w8 Z% z% @; {# r/ E* o
- JSR Time_Show
6 H" e5 l K. ]$ _" X0 ]( i. o - JSR Music_State_Show' P/ K8 d6 z: \: q: {) ?0 y) m4 I
- JSR Time_Delay
k6 I4 q9 |7 p( [* o% g# i6 T - % Y7 C/ D: j1 B2 S: N! t+ O7 _
- LDA #$01
7 q5 O/ `- U' u) j8 H% L W; U) b - STA <Music_Stop_State y! p, e$ j* @
- ; h* q$ @( @: ~- m8 `5 ^
- LDA #$88% K S/ V( A0 @, ?
- STA Screen_Ctrl, D* q- G( W5 d: J8 u7 P9 A
- STA PPU_CTRL3 X' a* }# b: e7 X
-
/ T, C* _: p; c1 f. K) p' e - JSR Show_Page_Text; z6 c- l+ [' V6 {% s5 ^9 m: Q, H
-
/ j4 r6 t# Q* `# } - LDA #$109 u4 {7 {! i$ ?6 K, v; d: J0 s
- STA <Time_Wait_Cnt/ Z1 X# F# U8 ?0 P; p/ ^$ M' G3 A
-
7 x/ m9 i5 P7 P* `" }! l8 p& i - Wait_Time_Over
1 E* ^& @* {% o) f, F0 e - LDA <Time_Wait_Cnt* `* F! F. O- {2 B9 b
- BNE Wait_Time_Over
" e4 |. c, f6 W -
7 L& r) e! G# A# F( C; z9 { - JSR Show_Arrow
# ~8 x/ d. U; G n - LDA #OAM_TEMP_ADDR / $0100% v- a4 E1 Z$ a
- STA OAM_DMA
5 C* i/ P& y" C( W1 j s" P1 I - ( ]3 Z" D9 q+ h" W' c; Q
- LDA #$1E
4 g o B( d$ j+ \- T* g8 W1 e - STA Screen_State
7 ~: k: \9 O% ~ - 5 L, C: j9 @9 ^# u7 [" k$ D9 y$ L
- LDX <Music_Item_Cur
. v* e# h- u, E - LDA <Music_Cur,X- I" Z! V, R7 N$ o" i& g
- JSR Sound_Init_Proc
7 L2 e+ V+ {3 B* _! T0 d D, t# Z -
8 J E& o0 f) p; G4 H/ V$ f6 j - CLI c4 \0 D9 `% c) j1 e. i
- JMP MainLoop
" S5 B8 |+ a* [, \7 `/ D" t - : U7 T4 @: c) `9 D0 a5 U
- ;==============================
: U- `# e9 s: Z& S2 z - Time_Delay;延时等待3 B B( J' Z: L: C. f( m
- LDA PPU_STATUS: b1 F5 Y3 l& V- b3 ?% R( _( ?" t
- BPL Time_Delay; T9 ~# s$ x+ |# R, W" |
- RTS
7 }4 |' a( C' x) O# M6 Z -
9 p, d! ?+ ~$ w4 s" U - ;==============================
) B8 f0 P. J* k& [8 K. a - OAM_Ram_Init;初始化精灵内存$ Y( s. n# r7 x. |9 O: }
- LDX #$00! F9 c# s2 m+ O' U! z8 r7 W
- OAM_Ram_Init_Write4 d- l4 d t5 b1 H7 x# P) f& Y* V
- LDA #$F8, |! x a/ ^' k" |5 J
- STA OAM_TEMP_ADDR,X4 [0 f6 u3 n1 G2 u; O7 @6 c
- INX# q. V1 j$ V- @; @
- LDA #$F82 w& `$ B' U9 h/ g% C6 k0 {* ]$ ?
- STA OAM_TEMP_ADDR,X0 w( L. G) D3 K* s2 s4 ?) y; }
- INX
' v; T, H+ K. C: g% w: d5 Z& b - LDA #$00
1 V( Y, }6 z8 i0 p, k - STA OAM_TEMP_ADDR,X
4 m0 W; a4 m2 k$ c5 s, W - INX
0 `+ M( H: q9 v9 x% k8 p - LDA #$F8& W8 F7 T( @4 Y
- STA OAM_TEMP_ADDR,X
j# F& H3 |8 g4 H - INX
# B/ q F: N% Q5 F& P; c/ Y - BNE OAM_Ram_Init_Write
% Q0 u2 e' `3 f. q) c: y X - RTS
F# Q+ H) S* H, _$ ^ L' k -
. \; E9 ~# H. ^, P! G, i) n - ;==============================
0 t# H5 I3 N. y! C9 |+ k - VramClear;初始化图形内存7 S3 h- U1 p. H! K8 C$ l7 h
- LDA #$20
! J5 S; T) n& M- p2 Q$ J- \, M# G7 W - STA PPU_ADDRESS# j0 Y* e) L0 d9 n" v; @
- LDA #$00
4 f" z2 i3 C( P7 G v: u - STA PPU_ADDRESS2 [1 V0 X% J/ K, l
- LDA #$00+ y2 A% H* A% B" u! m
- LDY #$00
# F8 c" e* k$ v8 \$ B- N2 J - LDX #$10
; E% o- J4 g7 E: o1 J0 A6 R. d0 j - VramClearWrite
, q4 b) z' j6 ?: E0 F1 N - STA PPU_DATA K/ K* |* q- A3 T& Y
- INY, n3 N0 J+ _$ x; F
- BNE VramClearWrite
; l* A3 j0 T) i- V - DEX
: l! ~% G! t( v/ { q - BNE VramClearWrite8 i1 `* q+ e( q' @3 d& k$ s- C2 N
- RTS
8 o- l$ \! Y8 w7 Q. p" ` N -
1 ^' n# Q+ u7 `( P8 K$ K. G$ b - ;==================================================
/ l1 J3 s* ^. t. G' h/ W - ;设置MMC3图像bank
}& k6 d+ ?. Z6 U6 h - Init_MMC3_Chr_Bank K9 b( ~- X2 k* a" J
- LDX #$05- U" G" T% `, {, [0 w) E4 w
- Init_MMC3_Chr_Bank_Write1 |- I8 A g7 k% T) U
- STX MMC3_BANK_CTRL
% W: F( v# B, o ] - LDA MMC3_Chr_Bank_Data,X2 R' ] b1 S" x8 b- R
- STA MMC3_BANK_DATA
! t0 M) ? ^% h8 S - DEX
! e3 y/ f! C% o7 B - BPL Init_MMC3_Chr_Bank_Write
% Y: ~3 Y/ U$ h5 i# | - RTS
) w7 O6 m( C, [! P6 ? - ;--------------------------------------------------
7 X9 G+ q$ Y0 P; @7 U+ d; ~ - MMC3_Chr_Bank_Data+ a# E( i" H# @. y9 W* s: e
- .DB $00,$02,$04,$05,$06,$07
! ~8 N1 \4 Q/ W - & l1 l+ J2 [$ ~- t* i0 u; Y7 b' U
- ;==============================! u# ?" ^) F) _9 e C
- VramInit;初始化图形内存- m; m6 B9 G/ w ~! {& i, |( x* x" {
- .IF CHR_RAM_ENABLE
O* N, E0 J; P - LDA #CHR_DATA_BANK0 x1 q0 u, p3 f2 t D3 X
- JSR Switch_Bank_A000
9 [, L2 @3 Z# i - LDA #LOW(CHR_DATA_ADDR)) @- [0 g' O3 }/ r& n
- STA <Data_L2 m* O- I' G; i/ t+ X3 B$ e) V O
- LDA #HIGH(CHR_DATA_ADDR)9 S5 [+ @/ m2 F# L! O/ z
- STA <Data_H
0 Y9 Q) A3 c5 l. O* ` - LDY #$00" R) x% C D7 r8 ` U: c* R# G. l
- LDX #$20
, S. @1 ~# A7 y Y R - LDA #$00
7 R5 T) s# {0 P1 Y - STA PPU_ADDRESS( x! M$ x: v; D
- STA PPU_ADDRESS* H/ M( z+ @# U, H Z: O3 D- v
- VramInitWrite
$ M. r* Q4 f* Y - LDA [Data_L],Y2 \9 `1 ^' t; _6 ]" t6 V
- STA PPU_DATA. A' A: a. l& t2 i/ |7 o
- INY' t- \+ j. l& g) _, U, H n
- BNE VramInitWrite
; y9 C A& D) ], }( ?3 c8 H- i - INC <Data_H
( d* B1 G! u0 L' ^, _9 Q - DEX
' P6 u6 r% G$ q5 g - BNE VramInitWrite
& v0 r% B0 B' \4 Q5 e1 L - .ENDIF
; s0 `7 ]5 r; a: g, i7 _3 f* m - RTS& p+ f9 H7 V' m" D! [
-
# ]0 [. l* w& Q1 J M( ] - ;==============================' U \! e( ?3 W. x: m; _
- ;音乐切换
# b0 e8 ~' T! `. D - Music_Play_Change
) K, o+ E( N$ V- @( |% l1 b - LDA <Key_Once8 S$ J1 ?& ^8 m' G" `) b
- AND #$FF0 j' c2 F3 d6 d8 C0 P# C- ~; @
- BEQ Music_Play_Change_Check
: G8 F. N, F+ m3 z+ C7 W0 Y4 ? - 8 N6 }' g/ p) L$ L: J4 @8 G
- ;禁用音乐条刷新
( I- E$ g- V8 K' w - LDA <Text_Disable_Flag" p4 C- p. `; r4 N) ~/ x
- ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME. d1 q( \8 R% v: _3 O" j. Y
- STA <Text_Disable_Flag
! ]9 C4 Q& k: q3 I* Z - 3 n5 _ Z5 T% x
- Music_Play_Change_Check& D* g I" O+ b: Y8 q
- Music_arrow7 A0 O0 D' m! T0 R; w# S7 d
- LDA <Key_Once/ M+ c5 N( h% S) K' j
- AND #$0F; ~* O" S8 Z! D. | t! a; Y- L
- BEQ Music_Play_Change_End7 a% s, Q& a5 m1 @& B V9 `
- JSR Music_Track_Change+ }: p W$ }# J: {
- JSR Sound_Reset_Proc
: u0 Q& N" h* x, J - JSR Music_Show
5 A/ U. H( o3 A7 V( r. a- D8 j; y - Music_Play_Change_End6 G( [ W) ^' F6 o# H
- RTS m: E" p a- S: W; e
, e. j9 X& N3 h% i$ m6 m- ;==============================
7 G3 M. Q) A2 g$ w( ?( l: R0 O; {( s - ;音乐曲目切换7 E% d' A9 B1 T* Q: z, n& y9 S' [
- Music_Track_Change
# [2 \1 l" w& Z# i4 T! \" S - LDX <Music_Item_Cur$ j+ \) n$ \5 d/ ^' ?$ z; X
- LDA <Music_Cur,X& {! K3 A* [. t' u% v% n5 A
- STA <Music_Last
9 `+ s; P+ m) U1 z3 z - Music_Decrease1 Q9 `. C, L: |- p$ j! S0 [
- LDA <Key_Once% n3 D) n, W1 Q9 G
- AND #$422 |! L0 z k4 l2 E
- BEQ Music_Increase- X' l K# \; Y1 ^
- LDA <Music_Cur,X( Z7 H, M% |4 W/ }
- BEQ Music_Increase
( K; L, w# k7 n+ C. ]0 _ - DEC <Music_Cur,X {! r* f/ m* i( b# m
- Music_Increase
4 _6 Y7 H2 ^- V; R - LDA <Key_Once
$ j+ Z) F4 S+ |/ a% k% h - AND #$81) J+ }% d: K1 @( N c0 z/ ` e) @
- BEQ Music_Decrease_10 K; P( T' C. {" |( W2 [
- JSR Set_Sound_Total2 M Z, W0 I: M, P1 \
- LDA <Music_Cur,X. k+ D$ X9 G5 ]' S
- CMP Music_Total
2 R& h! S4 B1 A" d" \( m$ ?9 l' Z - BCS * + 4
+ Z% H! P5 W$ @ - INC <Music_Cur,X; e8 {% R8 F0 j3 J8 M" k V c. q
- Music_Decrease_10" o8 t+ d% U! w1 g
- LDA <Key_Once! s9 p2 z8 N) J
- CMP #$04
. Z% F* ]* } F# }9 a# E1 ~2 v - BNE Music_Increase_10+ u9 k u' e" R F* t
- LDA <Music_Cur,X3 G1 M! ~' o8 ?
- CMP #10$ t$ {6 x# q9 S8 D# `- H( b
- BCC Music_Start_Song_Min
/ c. ^& u3 m4 Z - LDA <Music_Cur,X @$ {4 G4 L* h9 b1 ]
- SEC* E( w% H2 b+ z% [1 k0 S
- SBC #10
$ s G+ k X' k' }/ y - STA <Music_Cur,X
) {( x; U0 e F) h7 j/ v: g) w - LDA #$00; n2 p$ q8 H: Q
- BEQ Music_Increase_10% x9 D' ]6 U/ d$ j! R+ C
- Music_Start_Song_Min
4 ^+ Q1 W0 i4 q - LDA #$00# K. H2 G' R1 e. {* ^( Q, ?- a7 ]
- STA <Music_Cur,X( f' C$ H/ J6 I% w
- Music_Increase_10
! A8 \, v3 R& l, t+ @ - LDA <Key_Once
$ g+ @8 s0 |- | - CMP #$08" \3 V3 |" |3 ^! Y# b0 n. J. v
- BNE Music_Track_Change_End. r9 A. p | }/ {# u) V
- LDA <Music_Cur,X
2 y4 U$ S* V: V# U4 r# c - CLC: b9 t4 v8 c& n" J9 f0 n
- ADC #10
& S: J* G, X& O0 |7 } u {1 d9 Z - CMP Music_Total; Z( @0 M" L; f0 y5 k
- BCS Music_Start_Song_Max1 y+ D9 i) g6 ^7 W$ | m, N
- STA <Music_Cur,X
8 k4 t; O! ~: u& r$ U! E1 u# D$ O - LDA #00% U* }/ b& m4 t+ \8 C; ?9 b
- BEQ Music_Track_Change_End8 ~& O; {" d+ {
- Music_Start_Song_Max
8 H7 X4 S& I- f - LDA Music_Total
* e4 n% S& p: v7 h - STA <Music_Cur,X
" B* i2 [8 j% Q [/ |' D% @ - Music_Track_Change_End
. O+ d, T: N* Q; j - RTS
& W* I( S8 T7 j& ~ - * I; U' C h' \! ?( U2 P
- ;==============================
0 y4 _; p$ F2 ]" S6 @ - ;按键处理# a7 u- Y& T; j p
- Key_Proc5 U" Z5 k3 A% W, @8 L/ k
- JSR Key_Scan
0 u; K9 W+ w' _1 [+ x A: | - LDA <Key_Keep
$ P, v* Z j. J: _1 a - STA <Key_Temp% k# o& a2 R- \% A5 i
- JSR Key_Scan, O& f0 L4 O6 g
- LDA <Key_Keep
& y9 ]( ?7 h9 O) j0 R% X% y4 k - CMP <Key_Temp
0 X6 L* [( ?$ C; I* I - BEQ Key_Get_Once% C: P2 v4 b1 p
- LDA <Key_Kemp
( a9 ], F1 {; o; P0 u) y1 r& w - STA <Key_Keep: e6 o3 ^+ X! B2 z
- Key_Get_Once( l& o6 m2 x/ z! E% L5 ^0 W3 {
- TAY
2 y4 Y+ {0 ]" |9 \5 m y6 g - EOR Key_Kemp
* j+ k) E( y F1 S( ^9 B - AND <Key_Keep7 p7 G b6 `/ ]5 a
- STA <Key_Once9 q2 J$ L# W( R, L3 c
- STY <Key_Kemp) ~7 s7 M) z$ N. c' u' p
- RTS% k: C- F* U5 [( h4 x2 @; C
- ;------------------------------, r' j; p( H% A* P" x, W
- ;按键扫描& [% a! B3 ^* b& F
- Key_Scan
8 r* D/ \2 y. d - LDX #$01* N" u$ d+ {3 @0 s/ R% E& }
- STX JOY1_FRAME" u- I5 q! f5 o+ e
- DEX$ O2 `" ^# F, ]# ^2 p5 E
- STX JOY1_FRAME
& b6 F; x9 R( h$ g- Q - LDX #$08% I( @" g. r4 a: b4 _3 g
- Key_Value
& B/ }- y8 ?; t& b& C9 u6 Z - LDA JOY1_FRAME! X. q- n$ }$ K- u0 a0 y
- STA <Key_Getv
6 T7 l, N, {4 [4 L- Z, [ - LSR A
& v, w }! e9 X2 c4 x# r - ORA <Key_Getv$ N* d9 j' m) R3 p
- LSR A, m# R; y/ J0 \9 A" z# r1 E. s4 c
- ROL <Key_Keep& O' {- g5 R. \- h9 g
- DEX1 I5 `$ i: l; t+ ^
- BNE Key_Value: o% @" o* D6 }0 z
- RTS# E. V( S% H$ U; ^8 |! m
- 5 }) ^( o5 r. f: u) s% c
- ;==============================
: R$ F6 H3 H0 M3 g0 |) | - .IF SOUND_BAR_SHOW_ENABLE! ]: V7 l5 a7 s6 R4 v' `- ?
- ;音乐条显示2 d5 [& L2 r6 ?6 G3 Q
- Music_Vision y) D$ E' R' t# F6 L
- LDA <Text_Disable_Flag( S* f& { b* g2 z2 ]' b- w
- AND #TEXT_DISABLE_ITEM( [! h) s* Y$ x: ?/ z
- BNE Music_Vision_End
' s0 e% r6 m' |8 G, ^+ p$ [ - AND #TEXT_DISABLE_BAR
3 c1 z. m, O8 b' g4 P, V- {( k - BNE Music_Vision_Set
0 H5 L$ K! y% G: B \' Y! V - LDX PPU_Cur
2 \3 q7 Z0 _: P- d, g$ m7 L0 I) A" v - JSR Music_Animation' o* y$ s' _, l, M
- STX PPU_Cur4 d* V! c7 T( D# ^4 p+ ?. T Y
- Music_Vision_Set' z- B! @; j% c* _
- LDA <Text_Disable_Flag
" T# z" [$ ], j6 K( ^ - AND #TEXT_DISABLE_BAR ^ $FF! i3 B* C# l! {
- STA <Text_Disable_Flag2 B/ s1 V, K) N
- Music_Vision_End
& M- [( h4 f3 t" c; s - RTS3 l( V0 S) M0 w1 C: N8 P8 J+ ~6 t, X5 Z
- ;------------------------------7 W* s' D* Y1 |+ Y0 A, P' o* r
- ;音乐条显示处理4 Z+ f. ~7 d- f8 U- q
- Music_Animation
+ X. }& V' J; B4 P - LDA #PPU_MODE_CNT_LINE
$ q3 A/ L; q) z& @ - STA PPU_Addr,X' g. y: H1 V' S: O# W% U; @3 J
- INX" @/ X0 g$ p4 W4 |; V: c7 h e9 X+ v9 M+ _
- LDA #HIGH(Sound_Bar_Pos)" }) @/ C6 t( V* r& R+ w% \
- STA PPU_Addr,X
+ K* C; Q0 v; u1 t. Q - INX% E: ~, f6 k' A9 z4 v
- LDA #LOW(Sound_Bar_Pos)
/ m) L1 b% o7 S! j( i1 F8 c, h - STA PPU_Addr,X# v0 F& {* }6 p& a- q |& E4 I) c3 m
- INX
' x! h+ l8 a" ]/ E - LDA #$083 c# _$ k l# V4 L2 X ~
- STA PPU_Addr,X2 `& T. Y, K) R( b
- INX; I! H9 v+ J- u7 U
- LDA Sound_Bar
. d2 _6 u0 S! t: u5 c - JSR Volume_Convert
9 a3 ]" B F- K4 K5 L: z& X - # _+ L$ ~ q: N2 s" V, d% v
- JSR Volume_Set_Cnt9 ]9 x0 H5 q8 A
- LDA Sound_Bar+$4
; E8 k0 r- V- g9 [/ Q - JSR Volume_Convert7 X) k4 R5 k2 V% M( g
-
. Y+ u( h8 T6 M4 h! V. | - JSR Volume_Set_Cnt
# ^7 t) Y0 i/ c/ ^1 }! y c - LDA Sound_Bar+$8$ O& J, f. X F p* F0 q: P# g e
- JSR Volume_Convert
; e0 @# K1 {$ O, d; I% A0 X - ( x p0 D2 m- @8 T$ \
- JSR Volume_Set_Cnt
0 K4 t6 f. w+ t - LDA Sound_Bar+$C
A5 Z) K% {4 v6 c% r9 h: ~ - JSR Volume_Convert
\5 z( O5 U& a# \) O2 a4 [8 c2 L -
3 T q& _) h, B% W& ~: n - JSR Volume_Set_Cnt$ O4 X& O( X4 x. o1 X" A
-
& ^, t+ E9 J0 C - LDY #$101 @* c+ O, q7 [1 m" V
- LDA APU_STATUS
# u- }: V: T, d$ V: m - AND #$10 `* a0 L5 m! ]/ A, ~- g, Y, Q5 T
- BNE Volume_Count" b& h0 l! ~8 u2 {) B$ g
- LDY #$00
9 a" [% g$ [ g. N5 X - BEQ Volume_Count( A/ P7 J$ m* m/ W. r
-
" t5 I: {6 @7 y' j3 P - ;------------------------------: d5 V2 Z. h" D; [+ E& s0 F
- ;音乐条处理
5 k" e& G' I f$ h& ~- _- N0 d - Volume_Convert# E" Z* A( d( u- m$ E _* `
- AND #$0F4 m+ r1 |8 F0 @2 t+ w, v# V0 ?
- TAY* P q+ V4 }1 I5 K9 N* `
- Volume_Count/ l4 X! m; c: \/ W* g2 [
- LDA #$08
* ]3 L) ?; `* x7 M& | - STA Sound_Bar_Cnt3 `5 ~4 a+ m5 Y. g
- Volume_FILL% I/ b# D' d: k8 U# Y( h" D
- DEY
$ L( e; f; N5 Z9 i) k - BEQ Volume_Half+ b( G+ p( k; ~. q& m0 ^$ C5 I1 |
- BMI Volume_Empty
% ^. V% D3 F* L$ t4 i - DEY6 H) F1 `0 D' ~8 s
- Volume_Full
! U6 [5 w0 t, M {# o - LDA #$16
2 I: m/ V8 [) `' @/ L: f - BNE Volume_PPU0 y/ K; J8 V$ P& W7 o/ q1 Y
- Volume_Half
w4 A3 R$ z* }! c+ `% N! d - LDA #$15
) o: m. J9 r! C5 [4 l4 U! q2 Z; m - BNE Volume_PPU# r, q" k. {- W6 z" V1 o* V7 T7 ?
- Volume_Empty
- Z( M# {7 c, F+ H - LDA #$14
' m' ^8 H9 s: o- r# s - Volume_PPU2 y: J I& O; r! y7 ^" A5 T, P' x
- STA PPU_Addr,X$ ~0 z2 q H0 a5 x
- INX- P. m: t/ R% X6 h9 m
- DEC Sound_Bar_Cnt* A5 j: K" ^4 C+ L: ^/ y
- BNE Volume_FILL
$ ?9 y, a+ Q+ q1 P+ t - RTS. ?7 M/ g+ u3 \+ J8 W9 C! C
- # R, O3 r$ y5 m8 D6 b; {. w
- Volume_Set_Cnt' y; h! E3 ~* y9 O: q
- LDA #PPU_MODE_CNT_LINE_NEXT# q; d) D/ t2 t' p7 h7 j" L
- STA PPU_Addr,X
6 P+ z6 `7 N$ ?' }1 O - INX9 L! p. D% ` R; h
- LDA #$08
; Z$ ]8 b1 ^: y - STA PPU_Addr,X
. i0 `' v) D/ P/ i - INX
8 Q! V- b6 m3 Q - RTS8 [# f7 R- G6 v: d4 q. i ^- Z
-
. ]% a: F, Q$ P. P - .ENDIF- M9 O, P% |* @
-
y J6 z: }* h% X9 i7 G - ;==============================
5 Q0 y2 w2 N- e; V - PPU_MODE_CNT_LINE = $FA ;行计数写入
# Z- |3 O" T% l; L' t - PPU_MODE_CNT_LINE_NEXT = $FB ;转下行计数模式
% ?4 X& y/ X; F" f! _3 s - PPU_MODE_CNT_CLEAR = $FC ;行计数清除$ }, m; s- `7 M0 ~ e
- ;------------------------------
9 {! o4 R1 [) c9 d$ T9 p W' V - ;PPU处理
1 Q% t6 u$ H( v8 ^3 E. ?. E h - PPU_Proc& k q# y9 }5 R& L1 W3 @6 |9 y
- LDX PPU_Cur
9 l; `# r; [( U0 d' z; W( k* P9 f2 u - LDA #$00: Q# |# g, A8 \# u
- STA PPU_Cur, \1 P1 l$ t7 o% g
- STA PPU_Addr,X) n$ P5 g+ F( b$ P: W6 u% a' n
- LDA PPU_Addr
4 v' ~: M4 L4 {0 j0 I, H/ B1 \0 Q. {3 P - BNE PPU_Proc_Beg( y; @" b! q, Y4 k; s
- PPU_Proc_Ret
3 s: z1 s3 U; y. b - RTS
% f5 n+ k7 {+ a# P4 j( K* u - / y" ^* Z% b4 r
- ;------------------------------
% ]- W* J7 `2 b; q3 g. t% F - PPU_Mode_Return_Cnt ;转下行模式
7 u2 ?! m8 W2 D- n1 x$ X" F& m - INX
" v; N$ k9 M( }' b2 v - LDA PPU_Addr_L" h/ x# t' F K, ]* J. g0 A
- CLC" F; V* \; i3 x
- ADC #$20
0 V$ t1 u0 J2 [9 a5 a8 w. U) G2 ^! X - STA PPU_Addr_L
. y9 | a5 G+ L j0 d - BCC PPU_Mode_Return_Cnt_End$ O1 U2 g' M2 x
- INC PPU_Addr_H
A2 B, Y6 q% d0 E b1 s) V - PPU_Mode_Return_Cnt_End
# O" l, [) ?5 Y! g- g. w - LDA PPU_Addr_H
" r& F, G/ V6 G( |* K - STA PPU_ADDRESS" N. K9 N' d y" s% a
- LDA PPU_Addr_L6 B( ?9 I$ ]* y5 f! i. W
- STA PPU_ADDRESS6 ]. D' f8 |) H; W! ]; n
- LDA PPU_Addr,X' q. I M J4 ?3 F/ l
- TAY
* | r% O y& F - PPU_Mode_Return_Cnt_Write3 W5 z5 B3 U& w" h9 V( U5 e
- INX
& F/ i! B" h5 C9 r - LDA PPU_Addr,X; m* `5 S& I3 ~+ X. [3 B
- STA PPU_DATA
1 ^- P4 Q9 a% o$ g - DEY. [3 v+ b$ }) Y8 j
- BNE PPU_Mode_Return_Cnt_Write; e) B; ~2 }4 k7 B$ V
- JMP PPU_Proc_End$ B( p1 b9 _- x4 B
-
% Y8 e5 R! O* l w - ;------------------------------* Y# P" W- l8 b& j8 P1 z* G
- PPU_Proc_Beg ;处理开始8 f1 w8 N8 E. Z. D7 t+ N' n3 z
- LDX #$00, b' U% t, L0 {8 S! r6 _
- STX PPU_MASK% S3 Q- u% w" F* x# ]( `
- ;------------------------------" v; N; C0 I+ N+ P
- PPU_Mode_Select ;模式选择
! a, a) T/ |9 Y! L% ?% X - LDA PPU_Addr,X& O& h) b) ?2 \1 o- A% `/ p- k8 ]
- CMP #PPU_MODE_CNT_CLEAR) v- I! e0 h) D
- BEQ PPU_Proc_Clear$ s2 {9 v- ^& E$ t, T7 x# O
- CMP #PPU_MODE_CNT_LINE2 K6 i# G; D1 \; [/ s' h
- BEQ PPU_Proc_Cnt_Line' V1 m/ ~# b+ M* s4 f
- CMP #PPU_MODE_CNT_LINE_NEXT
# X; K2 D' e# c/ h1 U+ ^ - BEQ PPU_Mode_Return_Cnt' Y0 f7 K0 z1 W6 V2 `+ M% w
- JMP PPU_Proc_End_Write
5 u. p) v* {8 J- r! I/ h3 k - ;------------------------------
9 J h3 D% ]7 k) I& s - PPU_Proc_End ;单行写入结束
$ j0 J5 z% I$ @5 J: g, X, i; ` - INX
1 ]6 Z4 b) g4 n j7 n - LDA PPU_Addr,X/ G8 R( h' @# w: m/ `
- BNE PPU_Mode_Select
' M$ L: N/ ]6 ^* N m5 N% { - STA PPU_Addr
2 j9 R N5 t0 X$ B/ L - JSR Update_Palette_Color6 |/ J" d7 b- T3 n/ x8 H
-
$ l+ _: @: n0 ?- T$ Q+ ~ - PPU_Proc_End_Write3 R5 g7 W; i- Y
- LDA #$00) r" l4 C" p1 T3 j5 x0 K2 N
- STA PPU_ADDRESS
i4 e7 F, s# i7 e7 o - STA PPU_ADDRESS
7 z2 r4 z& B" M: Z - LDA <Text_Disable_Flag
! S9 x0 T# d6 [; G* [; b# d% [3 s - AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
( p6 M: [2 k- |" @# w n3 U1 G - STA <Text_Disable_Flag
. y. c$ o7 b1 F+ E - LDA #Scroll_X' M$ X9 W; ~3 A! ?& X5 f3 U
- STA PPU_SCROLL
5 }# v2 }" X8 t/ m4 e m - LDA #Scroll_Y
4 c+ j7 |& q$ Y' c- L% J - STA PPU_SCROLL
3 U) W" F" z; h2 m - LDA Screen_State
( Z3 Q2 l* Q9 b( H& ]1 v" x - STA PPU_MASK
! Q I7 g( v( t8 W) g - RTS0 \4 `8 S: f! h2 I6 @
- 4 x" N& q+ g6 M6 l& [! X
- PPU_Proc_Clear) o: b) P2 ?! I. h0 m# x' k! M6 p+ g. Y
- INX2 t Q( E8 I3 @1 _) s
- LDA PPU_Addr,X0 z4 v/ \$ O* ~' w5 {1 w( B
- STA PPU_ADDRESS9 q8 Y3 m1 a6 @
- INX8 |& ` q& q! U. O" X
- LDA PPU_Addr,X
5 v) j5 r% r' ^! |8 A* v2 p }* i7 b - STA PPU_ADDRESS! Y _. q( e' m- c6 v. T) L2 q
- INX+ `; |" m8 L5 K. A/ f9 F
- LDY PPU_Addr,X! F( W7 S1 u0 q8 B0 V7 e
- LDA #$00
8 w. \5 V& }, R3 d& W7 e# b8 f - PPU_Proc_Clear_Write8 r/ _6 } U1 C4 X, H* P
- STA PPU_DATA
6 B: H1 X$ H4 m7 t3 S+ u - DEY4 f3 k# `0 Y% w6 ?8 T
- BNE PPU_Proc_Clear_Write# W9 \" |: \- n v' J
- JMP PPU_Proc_End8 m; h4 K4 w$ Q* g
- : P9 T- @& ]+ w) w0 C* I# g4 N% D
- PPU_Proc_Cnt_Line
7 d$ ?0 r* b6 U7 {& j - INX
6 E/ ~# G. e! A0 M+ d - LDA PPU_Addr,X( e: A, R# q# Q7 c# x5 \
- STA PPU_Addr_H( U4 F/ t& c1 g+ B) u
- STA PPU_ADDRESS
! e5 n* t' v/ U* I J - INX
+ V1 @# k% ], F; }& v - LDA PPU_Addr,X
3 q; O% `2 G" f# I2 m9 a* J - STA PPU_Addr_L$ Y o* C& H; x, {6 p+ u
- STA PPU_ADDRESS4 J( K& v4 ^! Z8 J. K, V+ _
- INX
2 c; \- N0 i) N9 U; W8 u7 T$ @( e" R - LDY PPU_Addr,X
8 |2 \7 u2 x6 w; ~0 T$ U - PPU_Proc_Cnt_Line_Write
; Y8 y/ p" _3 b9 u - INX, f& Z) }! b. S) O% G* e
- LDA PPU_Addr,X
^/ h# D* O- R& O - STA PPU_DATA0 `9 e' T5 L. M% k
- DEY: B: n, ^% M# ]4 t
- BNE PPU_Proc_Cnt_Line_Write1 g; k( ]" D! ~* C! G
- JMP PPU_Proc_End
; H+ ?7 y0 e5 w9 w0 V% y
' q) J) A, [" @( ^- ;==============================
( H ~, _# w* _# g - HEX_To_Dec;十六进制转十进制& v- P5 l+ K4 j z4 |
- STA <HEX_Data8 `6 j! d; B" P& C+ `: O" P
- PHA1 f) P: O. g/ {" X
- TXA6 _4 U! Q' a ]6 C. T/ x
- PHA. R+ ]! ]$ s' g
- LDX #$00
4 ^0 [/ c/ `% } v - LDA #$00. ]9 g2 |+ Y' r9 o/ u' L- d8 F
- HEX_Cln: e9 j+ S# }" r1 u7 ]
- STA <DEC_H,X9 K3 S' w5 C9 z: B
- INX
6 y- D& F9 q) K/ Z/ ~1 o% b. v* l5 A - CPX #$03
; u; b2 R Q+ e1 ], A5 |3 [( V - BCC HEX_Cln! M- f9 t) K3 W/ ~2 S2 i3 Y$ T
- LDA <HEX_Data5 B6 a5 N9 I5 B& R2 Y
- ;------------------------------
( P+ |' p& h& k* A& F* U# W9 }0 W - HEX_100
, a* Y/ Y8 ?$ O" D; O - CMP #1008 w" X0 _ }% J
- BCC HEX_107 s, j+ S, P/ S2 |9 P+ a
- SEC
1 S" f6 Z i* {. T2 g - SBC #100
/ x7 a5 O- r* |8 D; @( d - INC <DEC_H7 X1 b/ h: L8 V: B+ r" q
- BNE HEX_100
9 a" u/ B/ p; ], j0 k - ;------------------------------
K* g/ G4 v( G4 q, w - HEX_10
# o* [, F) z6 v Y/ {/ z2 ]( Y8 q - CMP #10& [" |5 |5 D$ @( C
- BCC HEX_1! Z1 \$ R2 C+ {4 W9 f/ G3 V6 U/ t
- SEC
) d( _: V" I7 p% R - SBC #10' M6 q% J7 T) O- i2 n- E% E; t
- INC <DEC_T+ h* P2 J: `9 E( N; V; \6 }" M
- BNE HEX_10
b' I- b1 ~2 D# e - ;------------------------------+ [9 y& H \- n/ I! s
- HEX_1
0 ~8 c& f* o! P - STA <DEC_L+ J6 C; J3 |- m. ]" S8 C) z5 S
- PLA( ~- m h3 Z1 I; a" I! O
- TAX! A* z& J% E' b2 C' a
- PLA& {8 O1 i, [" L9 ~
- RTS
6 c, t" i, j/ ]5 t: l
$ C+ d0 B9 v! |5 S F- ;==============================
; d) S: ^7 }& f: ^, g - ;音乐曲目显示
9 L4 q; g) R2 a _% R4 x" g7 O4 j - Music_Show
. b/ k3 _4 c# p! W( P - LDX <Music_Item_Cur. ^; P- l! [, w& i3 W
- LDA <Music_Cur,X
% [9 j( T, V& o. _ - CLC
" W y o2 U0 a - ADC #$013 X$ q2 N8 R. ~. d6 m
- JSR HEX_To_Dec" M" @, |- e5 I3 E4 y0 w) D2 r
- LDX PPU_Cur
" E' S3 d% `+ Q" t& M2 R Y - LDA #PPU_MODE_CNT_LINE5 z) o6 @8 ]/ h
- STA PPU_Addr,X" s# r* Q$ A" B; B* C; ^
- INX; C8 s9 \5 L, l3 `* b& m+ b& o
- LDA #HIGH(Play_Index_Pos)
, j' R. Q6 D7 ? - STA PPU_Addr,X
! d; m4 {6 X* @* ~; w0 V - INX
" H w4 m* Y% X9 K, ? - LDA #LOW(Play_Index_Pos)
* @% ?$ j* X& u) E - STA PPU_Addr,X
/ i! i2 l. v4 Q9 m! V9 D - INX
7 s$ K# t( U% t6 y -
3 F) F2 {7 [+ t- ^3 r0 O3 I - LDA #$07/ u4 I4 P0 s d0 z' {/ z" \" ^# P
- BNE Music_Show_Length
. B2 j C" }$ O$ R, J -
* b2 Y% t6 {) t0 y8 j# S; Z( q1 R - Music_Show_Length
9 V: J8 I9 f0 ]. N% l; H - STA PPU_Addr,X
5 t" C# {" f* A/ w2 g - INX
/ V0 K0 T% V& w6 K0 w' A - 2 P# I- A0 ?! z& r1 t# ]4 S9 ]& W' D
- LDA <DEC_H
& D! g0 o% ~8 T: D; @$ o - ORA #'0'& J p' q# `1 ]$ h
- STA PPU_Addr,X- L S0 ~3 A9 u6 v& K7 P
- INX: v+ h- @! z$ C% Q9 q) b
-
& v+ ~% g" V; H# l) V4 ]& Y) j - LDA <DEC_T
2 H% s2 r% {2 K* @1 f0 N1 v& I4 U/ X - ORA #'0'/ A; G' \- r1 R2 {
- STA PPU_Addr,X! I) J/ ?* u% Z
- INX) U3 e+ O* k% R: c/ w4 k
-
' O" R4 F3 K" y9 k - LDA <DEC_L P8 n: h, n! P1 }; f" l# i
- ORA #'0'! v/ C8 N' ]* @
- STA PPU_Addr,X
. G c6 K5 O1 K; M2 a - INX
/ \4 Z9 g+ h" O' D7 y. o -
3 O) ]' B$ ~6 R - LDA #'/' {, W" u" q9 g M& S: m8 s
- STA PPU_Addr,X. c4 J5 z3 `2 m( ]' b" s
- INX
- c+ r) Z) H# {, B - Music_Show_Total
, E$ q$ r; `# B2 }! f. G! H - LDA Music_Total
7 V. a" c1 ?0 c4 b( ^5 p/ d1 \ - CLC
3 F0 W4 w: F: T0 ]& v* P9 U; M- w - ADC #$017 b; { j1 {! C7 c* F
- JSR HEX_To_Dec3 t6 ?, Q5 `5 _1 M
-
" @6 U0 G& @& t7 U% Q - LDA <DEC_H: a E6 r- ]# X' |, i
- ORA #'0'- l$ F! F6 A! P6 M; R H
- STA PPU_Addr,X
4 q9 a) x7 }6 g- ? g8 ~ - INX+ `/ W$ b4 O" u# f- n! A
-
: p5 |0 u. a; X/ ] - LDA <DEC_T
. k: F# o( i) x& N - ORA #'0'6 J$ c4 v, P5 [6 M' @% P
- STA PPU_Addr,X% c1 r# y) V L0 L4 b* n
- INX
4 A* @* P) M. r" `7 g F - 3 A2 ]+ }& ^: C/ ~2 L( N9 F7 l
- LDA <DEC_L, J, l3 v1 }, `9 o9 r
- ORA #'0'
1 k* R) o. j( g2 o2 ]$ _8 n - STA PPU_Addr,X9 i, Q5 p9 Z- g( k1 Y' D
- INX: X* P6 k; Y- {1 M7 Y. ~
- 3 L5 d! P; @. N# t, D" U5 O
- STX PPU_Cur
/ d$ ]0 }9 [7 T( }( k% @% Q/ V - Music_Show_End
1 m/ F! c; R+ n9 o1 V/ ~ - RTS
- c6 P: S7 G( J+ w4 \( L
0 q9 [% }. E# r, S' q) l- ;==============================5 T; }/ i7 A5 q0 ?7 r
- Time_Show;播放时间显示9 y2 R! ~/ \. z5 T5 ^8 H8 h
- LDA <Text_Disable_Flag
, q' D8 E1 b }/ E( p: o - AND #TEXT_DISABLE_ITEM
$ L- y5 M; s1 ^8 |5 q2 f - BNE Time_Show_End: |- t$ M( o+ }' g% V9 ^2 p
- AND #TEXT_DISABLE_TIME) A: k3 g4 @" E9 c
- BNE Time_Show_Enable* a+ H( o% P( P
* Z* }4 p- i$ E- LDX PPU_Cur- e8 y" @* K2 G4 J+ W p3 T8 ?1 d5 H, i
- LDA #PPU_MODE_CNT_LINE0 i: h- \! ]$ x: ? R
- STA PPU_Addr,X# F9 b0 W; x7 _7 F9 J) {
- INX
, q$ J! Z& n1 g- S O+ U- ` - LDA #HIGH(Play_Time_Pos)
5 Q: |6 R( X! G" _ - STA PPU_Addr,X
, t4 e2 G" ]5 _4 j$ S* q! ] - INX+ b4 U$ f2 W2 E
- LDA #LOW(Play_Time_Pos) U5 z( c6 ?/ a* x
- STA PPU_Addr,X l( U2 I& s( I5 \5 N4 K
- INX0 Q. W: S' L% W/ x1 c& \- A
- LDA #$08
' v+ b& G- P; v# G# J& a - STA PPU_Addr,X; \& G. S+ {: V& g0 q1 B8 t! H
- INX `4 P* D8 i P, j1 x) h: V E% {
- Time_Show_H
6 [9 J" ?& o) G6 u2 {6 U% P - LDA <Time_H
. z# q$ ?2 a5 b3 Z. F - JSR HEX_To_Dec
! ?% ]5 m& ?# M2 \# \& Q - JSR Time_Digit! R. g% h- t9 Q* T0 `
- LDA #':'
; ^+ x, d: ]& ^. A- m8 m - STA PPU_Addr,X. a% Y) ]# R: e, E
- INX. f* T. w. q e- S" o4 n4 _2 R
- Time_Show_M
- c) ~! _6 V9 u4 ^ - LDA <Time_M: s* M2 [# W/ C* A0 F. Q
- JSR HEX_To_Dec$ Y+ J8 [" F: O3 t+ X+ s3 [6 T; g
- JSR Time_Digit6 q: W9 K4 B/ a8 {) y8 B1 c7 m
- LDA #':'
( ~9 [& t" O" _: Z% ^ ]: t - STA PPU_Addr,X. `" d' O. P" p* J+ G
- INX; {9 h3 |$ `) B1 c. t4 K0 T
- Time_Show_S( }- s: I7 w) Z/ e* C, x
- LDA <Time_S6 N4 }$ O9 J: D- R W
- JSR HEX_To_Dec
$ n! V* }, Q% @/ c& R c, ` - JSR Time_Digit4 A5 o- u, T8 Z# L
- STX PPU_Cur
# I$ @& q( V1 d, V. j6 n - Time_Show_Enable! y1 J! ?: ]% H6 w! m" |3 S
- LDA <Text_Disable_Flag+ s0 Z6 X7 C: s* T$ _1 Y0 c
- AND #TEXT_DISABLE_TIME ^ $FF
% H& ]: n$ @4 [% y% O# @2 j3 a - STA <Text_Disable_Flag1 Q* [, u5 M# F2 W; d: U' Y% |# r
- Time_Show_End0 w% e3 w/ O+ |3 P. }# I; Z L
- RTS5 `0 A( q2 t; C' q2 G
-
5 D$ h& ]0 F' J: Y - Time_Digit0 B/ j. A$ v# X. |$ o
- LDA <DEC_T
# J1 h/ c2 |. \- Q - ORA #'0'. Y( c8 x' j3 B' g' F* D6 l
- STA PPU_Addr,X
: b! B& U) n2 H F - INX% `" b$ c9 k) C% Q
- LDA <DEC_L
. A) O& Z% u4 R0 t: S - ORA #'0'* v' u9 m; T) I& h( p+ ]
- STA PPU_Addr,X
( }( P$ a$ P5 \: O2 e! C. N - INX# s H8 u. q- [7 M8 W7 c: F2 E
- RTS' G _* q7 o, L# v+ y
. S1 A: h* l! t6 B- ;==============================
G4 t) @. {) `, Y" B - Time_Count;计时4 f5 v; r- `9 {
- LDA <Music_Stop_State
2 j1 ?" y2 ?1 ^9 _" V. Z - ORA <Time_Wait_Cnt
/ G0 e: Y$ R6 r$ J" p8 u* k$ Z - BNE Time_Count_End4 K+ a: i* q/ [& ?8 X
- INC <Time_Cnt9 _( Z6 m3 y) _$ U! W
- LDA <Time_Cnt5 |+ X0 e' r0 g% k3 M P
- CMP #60$ l& a0 }3 W9 }# Z. z7 ?0 B, }
- BCC Time_Count_End9 n f" @! k9 Y% S* q+ b" a
- LDA #00
1 ]/ E5 O. K6 G: t* x9 i) ~7 U4 ] - STA <Time_Cnt/ A8 @: o$ j5 w/ l
- INC <Time_S# _$ L5 }% F* D7 S& Z
- , K I) n% S- {8 l$ M, g
- Time_S_Cnt! j* h2 a1 D' Z' [
- LDA <Time_S
# f6 N$ Y0 I5 c# X$ k4 D! Q% \0 U - CMP #60 P1 a9 d" v1 q) w+ ~7 a$ E; y
- BCC Time_Count_End
( R; G+ w) `) Y% E: T, J - LDA #004 S7 V) K5 g. g; {+ Z/ b
- STA <Time_S% a! Y) e! P- q, Z/ Z; f3 F
- INC <Time_M* j* K( @0 Z9 W" w! d
# j/ |/ m7 l" I5 A# Y0 D M4 O0 z- Time_M_Cnt& I2 p5 T+ M' U% l" H
- LDA <Time_M
[3 d* K1 p5 P1 A# } - CMP #607 P2 W* G! C6 ~2 M9 C V9 O
- BCC Time_Count_End' o# ]) d% i B0 D& {& K* B1 e# b5 ]
- LDA #00& \$ C& ^, i- L" J+ Y
- STA <Time_M
; V0 G% {; s+ X5 E+ p - INC <Time_H
- A% }/ ?: j: \& j
& E: x7 O, r, f! J6 G$ D2 W0 C- Time_H_Cnt
- m$ V0 u/ F6 I$ x# ^4 V3 R! o - LDA <Time_H6 W, }( v+ X7 i$ ^# l
- CMP #24
- X6 z5 C0 N. H: J - BCC Time_Count_End
5 g2 `" W) I5 k/ y$ Z - LDA #00
- H/ E- F5 b4 { - STA <Time_H. x& O+ w, Z1 U) ?6 b/ x$ k; q6 a7 [
-
7 _; W$ N1 \# c/ P: N+ U - Time_Count_End3 _6 ?4 c" D9 Q* Z
- RTS& ?$ P. t9 g$ b/ I
( W' r9 N, n9 S0 A5 F+ ^- ;==============================
2 z! R+ W+ m4 M/ c- g/ H - Time_ReSet;播放时间重置
9 @ x% W3 P5 s* z0 X - LDA #$005 U3 N6 G1 S$ p" F
- STA <Time_S8 v, R: n" m: J3 [! ^" ]" y# c3 B. w
- STA <Time_M
! W4 y" F `5 Z0 I# [ - STA <Time_H
1 N8 p# m/ S! A# X2 m - STA <Time_Cnt3 Q+ J7 K- v$ D1 w H
- RTS
5 o9 E3 d8 C0 w# e# n
) j5 t- v& i5 T$ g! a" j- ;==============================, s1 v/ @0 Q9 i: f! y
- Music_Bar_ReSet;音乐条重置, S% i+ t; \: Z/ O% b
- LDA #$00
! J, {2 B3 q9 ~5 v( }) {) V - LDX #$00
/ N6 ]' C/ b# R3 z9 O' [ - Music_Bar_ReSet_Set
; t' f: q4 X+ L$ [7 }$ J - STA Sound_Bar,X9 t6 v* ~! u7 o0 j, o( V( p- x
- INX9 {+ {% l! w& p9 a5 i. t- e
- CPX #$10
% T" N: E! J, P! T - BCC Music_Bar_ReSet_Set
! @6 v9 f' Q9 a/ u2 | - RTS- }# C& l# t( Q; r
8 |( }; }3 S7 N2 [6 h; m% ?- ;==============================3 \5 j) `. F5 c/ r
- PPU_Data;PPU数据写入; r. g R/ F0 t7 O1 C3 q
- STY <Data_L
" p; O! L) e+ Y1 U4 F - STX <Data_H4 U4 A3 N+ V& w% P3 m, x. ]
- LDY #$FF
a6 t7 w6 K6 D8 J, P: `3 r - LDX PPU_Cur3 J ^" g+ D/ K# F& \. z
- DEX' Y% K1 I2 R& w
- PPU_Data_Beg |; M& \& ?- ?- w( t
- INX
' d- _- J; [% ~; s! l$ y - INY, h4 b# @) R, t$ T7 Y
- LDA [Data_L],Y
( B9 X: H; V* W5 ] - STA PPU_Addr,X" I+ ]8 T! f0 Q# ]9 Z, J
- BNE PPU_Data_Beg( h7 J. g9 c- U: I
- STX PPU_Cur) C0 r& [/ H4 O* @8 o
- PPU_Data_End: L6 s9 `! K/ W4 q3 d: s+ H
- RTS# _$ e" E' t @7 ], q' R! V* ]
- ) m) Z4 f4 Y( ]+ F1 M. V
- ;==============================
* Y# J$ E- Q) d0 K6 S7 a - Music_State_Show;播放状态显示
6 k2 K& |/ b* n- B# S2 B$ s - LDA <Music_Stop_State
z F8 X/ {! Z. @$ A - BEQ Music_State_Show_Play% }6 m9 A/ z$ k3 v J5 z
- Music_State_Show_Stop" e; q0 n, d+ b* Y5 J
- LDY #LOW(Music_State_Stop)9 g, e% B. q- T* w
- LDX #HIGH(Music_State_Stop)
$ G* h8 a, @3 `8 S$ t - JSR PPU_Data
' e$ a5 P2 N! P3 x - RTS
2 E9 J6 c' M: Q& Q% [ - Music_State_Show_Play
/ s: t8 q! g! j$ g7 B s - LDY #LOW(Music_State_Play)
2 n$ N. j( b4 n& C: _ - LDX #HIGH(Music_State_Play)3 I5 c( d1 D4 W6 z( p- G: w
- JSR PPU_Data0 S6 N& ?, Q+ D' R6 e/ A% F$ w
- RTS
) |- g# C p+ g% T* ? c -
6 T5 p/ G, d/ O1 d$ R* g5 T; [' Z - .IF SOUND_BAR_SHOW_ENABLE7 j. J1 i5 a4 ]" @
- ;==============================2 Q2 k# s2 y: |! a ?( T( j
- Sound_Bar_Text_Set;标题与音乐条初始化1 V" U4 t- t0 _, A+ c
- LDY #LOW(Sound_Bar_Text_Data)% {' y6 d/ Z4 j6 v
- LDX #HIGH(Sound_Bar_Text_Data)3 M( M, ^7 N7 W' ?
- JSR PPU_Data' }5 a" C9 x: F4 a" E
- RTS- I/ W/ i4 t# C
-
! l. P3 L+ P" Y! a$ ` - .ENDIF
; m1 x; a, F5 @3 |; b! x5 t1 j -
8 P2 Q# l9 }+ ~7 H* d8 t - ;==============================
7 ?+ L' v0 [" ^ - Set_NameTable_Attributes;设置命名表属性
! J% l* {' c& e/ }6 ^ z/ ^ - BIT PPU_STATUS
+ L( }9 D0 f: E( [' @/ P) \ - LDA #$23
# `6 T5 P2 h: R - STA PPU_ADDRESS
9 A) x: F4 ^* i* q( n1 G p, G - LDA #$C0
: ?8 d. |3 T7 }" N6 { - STA PPU_ADDRESS
# u, ~& C- W% e& Q* P - LDX #$00
6 R8 y/ d9 D4 h) r% B% ?4 O - Set_NameTable_Attributes_Write
' C0 q7 @% C h: G4 D% O" Z - LDA Palette_Attributes,X
9 Z5 e3 o" F7 j) c- E$ F- S9 ~ - STA PPU_DATA
8 e. i6 l' b! _1 v - INX' Z. \! l+ \. o7 X0 \! w0 S1 `
- CPX #$40
9 n0 n3 J; u* A1 |2 U" W* w7 L - BCC Set_NameTable_Attributes_Write
' ~* ^1 F0 N5 |$ u+ E4 Q - RTS7 L9 `& ], q6 q0 S7 E# f) i
3 ^$ d8 v4 U4 s. C" u- ;==============================
n% S! e9 U' \ - Set_Palette_Color;设置调色板数据
& p8 q) `' W9 Y; W9 P2 f - BIT PPU_STATUS
4 Y8 C; R" U; K" d - LDA #$3F3 A) i1 ]2 {* _: z
- STA PPU_ADDRESS
7 t* u1 p( d0 I+ M$ P& w - LDA #$008 P" l |* X8 G/ @4 V# I0 v
- STA PPU_ADDRESS& Y$ j" d" ~+ [9 }
- LDX #$00$ N) |0 b, B3 o2 L6 L- A
- Set_Palette_Color_Write
5 [& W9 V/ `/ b4 I( W( p* H - LDA Palette_Data,X
" g) e" a9 u& G3 U0 v - STA PPU_DATA
* C F$ O% X4 s- w& X - INX+ T/ @) |$ T2 O2 |; Q, }* E
- CPX #$205 ^# `" r+ b! }
- BCC Set_Palette_Color_Write
+ L! L5 h: y! M4 C( J" M9 p - RTS9 C, F5 C; l8 F# V" v/ K
# t+ M( q4 b& l. o8 q- ;==============================
7 I" C2 d- {) Q) G - Init_Palette_Addr;初始化调色板数据
2 d6 ?$ A3 m5 K1 L$ B; Z% Z o# | - LDX #$00
" H0 b! a) g( K! T - Init_Palette_Addr_Write
4 [' E. p; a% Z1 G1 T! i5 C" o% r - LDA Palette_Data,X/ ]- R3 A) P9 k, W3 R. g" e
- STA Palette_Addr,X9 _! m A, G8 e
- INX
0 q# s- _4 K8 s7 E* C4 L, g% E - CPX #$20
3 J3 Q5 V8 e# x8 O+ `* z - BCC Init_Palette_Addr_Write7 _+ x4 Z, \* D! d9 B1 C! }! j
- RTS5 S) A+ K h" u- N, |, a
7 x" r R# ]- n; p; n* Q: |( Q- ;==============================
! X- {4 }% N, q+ l- C& L/ ^+ r - Update_Palette_Color;更新调色板颜色! T# z: a/ a5 I- [" t# l6 _4 G
- LDA <Palette_Update_Flag6 k# R- E+ l+ n6 ]6 B
- BEQ Update_Palette_Color_End
R+ Z+ s! w& p$ g9 ?7 f - LDA #$3F9 q6 P, u+ m/ Q; f1 R
- STA PPU_ADDRESS
- b7 U; `( ]/ {& a; j+ Y - LDA #$0C3 Z W4 I2 e& ^2 W. t! N, v1 z4 {
- STA PPU_ADDRESS' A8 N! q) F3 _* S& W
- LDX #$0C, r" `) c1 ?: l2 X1 i
- Update_Palette_Color_Write' P# K9 f- F! |+ p8 _5 b
- LDA Palette_Addr,X, g8 X! v7 m: `6 ?& c- ~
- STA PPU_DATA5 X& E% g9 A; C" P9 G0 \, |. v
- INX6 E8 T( ~4 g) {$ c+ ]
- CPX #$142 b) y( `# o& b. r
- BCC Update_Palette_Color_Write( T2 L' S; H+ o4 D
- LDA #$00
1 Z' d( n2 ?3 M6 i' Y8 f! b/ P! z. J4 [ - STA <Palette_Update_Flag W( V8 N& f- z) W4 j- D' X9 J
- Update_Palette_Color_End
& }+ K1 p# w3 n. k - RTS
+ _8 { N+ _4 f, A! }# _ c
% Y& F1 A. b$ T
0 ^2 |. n: H1 Z X- Update_Sprite_Palette_Data8 e" D5 H) J: V k; ~8 g* I3 j4 J
- .DB $218 |, v: ?% |* _
- .DB $212 V: C* u" F" y3 k( V$ Z
- .DB $11
1 G* j4 P9 ?; y - .DB $01, U* j/ `5 D2 a' S; j' v* T3 v
- .DB $010 v* p: d7 j2 l( J7 ]' U
- .DB $11
4 M8 l) h9 q; W' ^+ B2 h7 s8 n - .DB $21( @, ^+ R0 S/ T" J
- .DB $21
3 _# H. p' \0 o5 h. l$ Q - .DB $11' }. I0 @- d: O# j2 Y
- .DB $01
$ V5 b. M& i" b8 j - .DB $11
" m) r7 p0 | E$ q - .DB $21
( a' f6 Z0 }2 _1 t7 h0 r - .DB $21
- N2 R# D5 J! ]- u3 v" x - .DB $11& t" w d! d4 Y/ ^6 o
- .DB $01
9 [" [$ R; X) ]: L/ ` - .DB $11 B8 F9 a8 ~, y: H: N' |9 s
- ;==============================2 W7 ]: M! A8 Z' w$ G1 V5 X: q
- Update_Palette_Data;更新调色板数据( J- I3 B7 F* v1 q0 S
- LDA Nmi_Time_Count
6 ^! l% [/ P- a" D - AND #$08
% T% [% r; R, c# {5 d& m0 n& M: O - CMP #$08' K% i/ q" N# n$ j; k$ w2 E- ~! s/ @8 I
- BNE Update_Bkg_Palette_Data1 h# A* U6 N% o. q1 X$ c
-
$ G4 R: A1 \% g3 d; T - Update_Sprite_Palette_Data_Set
) R6 Y4 A- O8 P) X - LDA Nmi_Time_Count. P4 W8 H/ w/ N0 q% L& Q
- LSR A. Q6 q) ^, `1 p$ r/ C8 L
- LSR A% U" t, f; s5 }. v& |6 v7 G4 J: ]
- LSR A
/ L# F" f3 S# V/ I W8 ]; f7 q0 o ~ - LSR A
& y1 T) p$ t* p+ ` - AND #$0F' n: S. n5 s$ i. t
- TAX
4 c6 e$ w1 i! G0 H5 d2 N" W8 j* u - LDA Update_Sprite_Palette_Data,X
& y* Y2 {/ p, @+ a- J; t - STA Sprite_Palette_Update_Addr
- t. W, Z6 S! R4 p; _0 s* _! N - LDA #$01( J# h3 }4 e( J: q
- STA <Palette_Update_Flag
: M+ W- a3 K- ?; A- x" q5 U - . }2 t' m+ T8 l5 V# E
- Update_Bkg_Palette_Data! E# H; S' x5 s6 U. \4 y
- LDA <Text_Disable_Flag& g0 S; ?( I$ u2 y4 }
- AND #TEXT_DISABLE_RAM
" g, d8 G: L+ \: w& X - BNE Update_Palette_Data_End3 t/ s8 D! M3 m9 |# w# b
- LDA <Music_Stop_State2 e: u, W! f8 z/ r' s! X! K
- BNE Update_Palette_Data_End. J6 P$ ~+ z6 [# J o
+ X% L$ g) R- a d0 U- T- Update_Palette_Data_Check
3 h& O, Y' b9 \$ M( ` - LDA Palette_Wait_Cnt' @3 C, ]- y' h4 J
- BPL Update_Palette_Data_Check_Over( o r$ i7 {& f
- LDA #PALETTE_UPDATE_INTERVAL
) o! H2 \- _* m8 s - STA Palette_Wait_Cnt# X" |4 |) k. m
- Update_Palette_Data_Check_Over3 t8 z" q" N/ n% m
- DEC Palette_Wait_Cnt1 J3 W% a' C2 R( h$ f
- BNE Update_Palette_Data_End
, {# X2 v/ |) [- x8 | - 7 W( i: S7 |, L) s* M0 H
- LDA <Text_Disable_Flag! s; D# |' ^* D6 H3 C
- ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
$ a I7 H! g4 |) C8 ]( _ u5 c" M# i4 f - STA Text_Disable_Flag. t$ j3 R6 J9 O) w! f0 z
- INC Palette_Update_Flag3 N5 f# K; K! R3 A4 K* X* O1 a
-
; B; g% F8 Q" I9 Z - LDA #PALETTE_UPDATE_INTERVAL
1 x' } g |8 y* o4 C6 z& W. `: | - STA Palette_Wait_Cnt
( [) b8 F5 \3 i6 a -
7 m1 B2 Y; u6 X: _ - LDA Bkg_Palette_Update_Addr
3 ^! D* |: W) `5 p$ y - CMP #PALETTE_UPDATE_MAX
8 z8 G1 `6 |5 J6 Z - BNE Update_Bkg_Palette_Data_Set
- {7 e8 A8 E( e+ M4 ] - LDA #PALETTE_UPDATE_MIN - 1
9 `0 Z' h" [2 h% k' i: S) A$ r - STA Bkg_Palette_Update_Addr
! \$ e: z# e! ^! g2 h - Update_Bkg_Palette_Data_Set9 K8 v. P( u4 d* u0 I7 u" Z
- INC Bkg_Palette_Update_Addr
' B( N. \+ t- _- A+ `( r/ A. ~ - " q( Y2 ]# j5 U: s
- Update_Palette_Data_End
* f: o/ f5 K4 v+ [ - RTS. H5 j' y0 p) z: t% H
- - m: S: {9 [2 t" o% L, P
- ;==============================
9 e( [! g( s$ o& J w* \, y - Show_Music_Text;显示静态文本4 a4 ~1 X: Q* \$ n8 n# P
- LDX #$00
/ Q) V" p7 Z' ?& i# b( b - Show_Music_Text_Set# I5 U* N, d- |" ~
- LDA Static_Text_Data,X
* D/ u4 T0 n" P - STA <Data_L
4 D) \) r0 m& P1 m w6 t6 ] - INX
/ z- I9 k2 e' e: F& p1 Z& ~- l$ @ - LDA Static_Text_Data,X
3 q: p+ e. o+ T# A4 m) p7 L# N* x - STA <Data_H
' R7 b" R( _ u P - INX- M$ q) W( k; `* H8 b9 r) R
- LDY #$00
& u3 c) i/ |" x" Y - LDA [Data_L],Y
7 m) B3 ~7 k9 v4 J: \, p/ p* z' X5 b - STA <Data_Cnt9 Q5 C v6 }: w3 J
- DEX
0 W6 u6 y H. w0 w8 O) C - DEX
; ]5 g7 J! D9 s - LDA Static_Text_Pos,X% D/ [! o' v! b( t5 m/ `
- STA PPU_ADDRESS* ~! W2 V1 y0 E3 E
- INX
! |; y) F8 g8 O$ u - LDA #$20
2 r- n" O; T$ P- {, x - SEC
$ D6 z/ A8 m4 [+ q - SBC <Data_Cnt
9 ?4 C8 M* P$ T; l - LSR A8 O. q0 D- Y, D5 `! s$ o
- STA <Data_Buf; J# O- D! z) N2 [3 J9 C4 o$ ?$ V, E. d
- LDA Static_Text_Pos,X
1 D0 y* ?0 _0 t% o# e - AND #$E0* U# I6 A. p5 L4 Z- L
- CLC! v% s4 o3 E4 }" ?0 H
- ADC <Data_Buf
! x5 U1 Z- d f0 X) g, J - STA PPU_ADDRESS
) k" a1 e5 |' s n - INX
. H5 N7 L& Y" N9 L+ }0 l3 k. k - Show_Music_Text_Set_Write
5 J; w/ b( ]) T# { - INY8 d2 |( K0 ~4 e- P! p4 `0 I
- LDA [Data_L],Y5 T+ V: @& j. O7 N3 d/ E
- STA PPU_DATA
6 Y: u5 i9 `% K6 i) Z9 l1 p2 i - DEC <Data_Cnt
% S! S! H. K* w, f - BNE Show_Music_Text_Set_Write8 J# _3 h; |0 {' A* }: `, y% Z
- CPX #Static_Text_Pos_End - Static_Text_Pos
5 J& Q* S5 h5 o) }! @. v2 ]! F - BCC Show_Music_Text_Set
* ?7 ~; N# M1 [9 Y% w - RTS0 D" u5 K% |4 Q6 B
- / n. j; u- c: `" U8 i- Y) C" ]
- ;==============================
' f0 ~$ H' O4 ?+ ]/ D - .IF Track_Name_Pos;显示曲目信息$ F. s7 z- }6 D3 K/ r9 f% Y
- ! l& e% H, h% K; T" {' e/ V
- Clear_Track_Info: U7 [1 I. _& N0 `' @
- PHA
/ F% a! P z7 c6 [ - LDX <Music_Item_Cur7 y4 a' E; }( y- \& I* r; S" @% J, I
- LDA Track_Name_Addr_Flag,X
# T- g; t/ c! S- h' H/ h5 K$ P3 d, Y - BEQ Clear_Track_Info_End_Ex0 ^, L) T2 e- j' X
- PLA$ q5 P7 J7 j$ n5 [, p
-
% d. R9 y2 u+ w* O" N! f0 ~ - LDX PPU_Cur
0 j; a: ^$ V3 Z3 O3 s( i1 O - PHA
6 x! y. c6 \/ R: } - LDA #PPU_MODE_CNT_CLEAR( [5 [( G; }% h% _8 v/ f
- STA PPU_Addr,X
& u: |% K2 L8 z+ i, } - INX
! G/ w7 n) l7 b4 g - PLA; C) g/ L! F# b3 m' I- T2 j, I
- JSR Show_Get_Track_Name_Center_Pos
. m4 X1 ~7 R H& b; [; j - STX PPU_Cur
0 O4 L+ p3 M( @( v: u - Clear_Track_Info_End
0 ?; {, v8 u0 A5 e3 i) Q* a - RTS
. D f9 y$ {. ]7 p - Clear_Track_Info_End_Ex
6 `) C6 C0 {: Y) u - PLA
. g2 c F3 f1 f4 m) H0 m' Y - RTS
2 Z: ]3 \- ?+ ?; [" e+ v) O* q5 Q4 } - * V; @+ ^( j+ {/ b/ _: Z
- Write_Track_Info
- r- H( P' e' j6 Q( [ - PHA$ U/ G8 P& C3 z
- LDX <Music_Item_Cur
2 i1 c/ c- |# u - LDA Track_Name_Addr_Flag,X
( ~0 @: j4 j$ ?' R! N9 N3 K - BEQ Write_Track_Info_End_Ex% G( ?& } ~* K8 _
- PLA
% m ^8 `+ h1 n. E% f; }$ O -
; S) l8 B# ?. s4 h, k/ I: ~5 [# | - PHA
1 n" m$ ?7 I+ X6 a6 D - LDX PPU_Cur% f2 e8 U( ~: V# j3 s+ v
- LDA #PPU_MODE_CNT_LINE" t8 M) Q: v9 o6 o I& ^& d
- STA PPU_Addr,X
! D7 W- E. I$ l) b% N3 I8 o - INX
1 h* t1 r( x" q* q* |) m/ }+ j - PLA
2 H* a, m4 T) w. x7 H - JSR Show_Get_Track_Name_Center_Pos
" w' {' `# \# j/ K# R2 E - Write_Track_Info_Data P: v0 g7 A6 v6 T
- INY+ u- I3 z# S% ?2 M2 @3 W% ?1 E# P
- LDA [Data_L],Y
4 u0 b& i8 \8 h5 O9 C - STA PPU_Addr,X
) m: b# k" i& ^" { - INX
, w# `; {" X& P0 S! O - DEC <Data_Cnt7 S0 @$ C3 g4 m) S2 ?* E2 I
- BNE Write_Track_Info_Data4 d/ \- b. ` m: T/ T) J
- STX PPU_Cur1 C3 T/ @! S, A' b% k
- Write_Track_Info_End
& w' f! B; l4 X# o9 v - RTS1 _9 L y; i: t4 ~! X# Z
- Write_Track_Info_End_Ex- G& K3 }" F# E* T0 d' v
- PLA# ?- S$ c5 e" \# R. L# ?* ^8 N
- RTS3 F9 F$ s+ H2 \1 p7 S% h
1 z) z3 w5 `! h; E7 J2 l) y- Show_Track_Info, n" R! @9 k$ j: S
- Show_Track_Info_Clear
, s3 }9 H/ U& q - LDA <Music_Last
8 j! o; |4 T1 `* U - ; u6 \) B' f+ \( ]
- JSR Clear_Track_Info& e3 C# o2 Q, G: j7 @- Q
-
8 Y, B6 l# w" J9 h7 g - LDX <Music_Item_Cur
- }0 q, q$ A, y) K9 T2 P* r7 s* K P - LDA <Music_Cur,X& N, W0 Y$ ^2 X$ }# P) [% ?, M
- JSR Write_Track_Info. x. r1 ^: r5 a
- RTS" \4 q8 H! K0 o! I9 O V' `# Q+ e( q5 f8 V
- % j9 Z. N, }7 r3 _+ @
- ;==============================" N# g7 e+ W" [. ~1 P( t! N! k
- Show_Get_Track_Name_Center_Pos;获取中间位置
! _" A- g# T& e1 M
O9 P9 J( w; y' ]% J+ S- ;取出集合名索引
& M1 m2 C, Z& _/ P - PHA
5 F, V8 G; U# L f O8 B* v) e -
' }( S' j" [' @) E - LDA <Music_Item_Cur: u% t# B: }& _( W
- ASL A4 F9 E5 A7 a1 m
- TAY( V8 a7 e6 f$ _! r, \
- LDA Track_Name_Addr_Port,Y
! L6 p9 {% D) P& @7 j - PHA, f0 U) P+ v1 P" [6 v
- INY6 ?' P* [" F, _( C3 y5 p* T
- LDA Track_Name_Addr_Port,Y1 N \0 O4 ]8 i4 |4 t& K, Q
- STA <Data_H
, Z+ y {5 B& z+ \% `: z - PLA
$ i' o) l5 T' J6 c3 b" F& a, ? - STA <Data_L# g0 h9 k4 [ L9 {5 T4 V5 k5 m1 n; p
- : J) a* R+ z% ~
- PLA5 R4 @- ?, I8 @5 S g9 o
- * r2 C* x* \* u! e4 Q' p
- ASL A
' U2 I3 g! c! }7 V8 D8 ? - TAY
, q5 [( m+ q6 { - LDA [Data_L],Y( {3 C" n! [# L6 X7 h( j! S2 s
- PHA
5 w) }8 I! K4 }) A' U - INY+ f0 G8 D- |& c
- LDA [Data_L],Y
$ w7 \7 c4 w# E - STA Data_H
6 n$ ^* f( a( I1 X, _5 S - PLA! O$ X) n* m7 O. F, V' b
- STA Data_L
. F! E2 ]0 M4 z+ B5 Z! o4 v0 |% c -
! E# e0 W- F* ~' l - LDY #$00( e: k; u. n& `* \
- LDA [Data_L],Y
- O, r; N# W$ r - STA <Data_Cnt/ g* T+ b" _+ j9 X4 ^
- LDA #$20
7 ^5 I3 n( z2 `7 e; I0 {8 ~ - SEC- S' {: q0 w4 b/ {5 Y; G9 M4 h, e/ m
- SBC <Data_Cnt
% h. X6 E/ C& {8 x* F1 V/ ? - LSR A9 C) H2 P. y. _% m; E: i
- STA <Data_Buf* s6 [$ D' E: A* U; q' D
- LDA #HIGH(Track_Name_Pos)
" V7 K/ d- V( v0 y$ O7 D - STA PPU_Addr,X
8 t" Y" ]5 J, k! {# p) I - INX. b% z3 t) G) o
- LDA #LOW(Track_Name_Pos)' `) {1 h1 n* n- h( r! s
- AND #$E07 \! _3 T+ P. P
- CLC
& }8 X+ ?4 H& s - ADC <Data_Buf
# o9 D1 J! @+ H1 o0 W - STA PPU_Addr,X
1 \6 [8 Q+ d# F) V8 v! q - INX
8 S; v6 R8 Y) N+ L% n2 j- U7 Y# F - LDA <Data_Cnt
. P4 q7 j* T! r, E - STA PPU_Addr,X$ J$ g# } A& z: N/ X4 Y6 U, L) w
- INX# n' l* T* T3 f- n9 K! {' h
- Show_Get_Pos_Center_End9 c) m n$ ~8 |( L1 @& V) h! c
- RTS
' j, z9 S% E0 C - .ENDIF
1 W- x7 q0 C2 v9 f3 F& d - % S4 l# v) z# j
- ;==============================
* A+ e* ?7 {9 K# ]. I - ;音乐端口清除, a8 j6 W, A F& n4 B, P6 T
- Sound_Data_Clear( Q8 }, B1 e& X1 h$ E: M
- JSR Sound_Port_Clear# f" @4 K+ b" i/ ]! d# `
- JSR Sound_Ram_Clear
% P B( W1 x O6 x) C - RTS- T* g9 T6 f4 ]) i' H
- + \) f$ G0 o2 C5 W
- ;==============================
. ^% D& c2 b! }7 ]3 K - ;音乐端口清除
( H% {( i7 y& C, J R4 T; }! Y/ Y - Sound_Port_Clear- c, U' Y8 Z& A( U, J6 u" Z" _+ i
- LDA #$00
0 w Q8 [+ Y. Y* w" @ - STA APU_STATUS
7 ?1 _( C! G8 k u3 M" H% b - LDX #$00
* Y: S3 }# _0 P4 ^ l - Sound_Port_Clear_Write
- q4 I* i. J) d0 W% }/ S& X - STA $4000,X" f. e' H9 g5 F: F6 h
- INX
3 M3 o9 `! [5 V C# R - CPX #$14! s* o4 F4 g5 s a- z I: P$ b
- BCC Sound_Port_Clear_Write
t/ T+ @ ?% o - RTS
Z( v T$ J; {7 b8 o - ( {+ {8 ?3 y- G+ p2 @ C
- ;==============================2 E, V! s% r" k+ ?; @# I
- Sound_Ram_Clear;RAM清除
* ^. R3 F6 t7 s4 O' D3 O3 _6 v8 ` - LDX #$008 U1 |# q% C3 [0 E! b3 s' p! V
- LDA #$00
" |: \8 k" V! @: b6 f - Sound_Ram_Clear_1& W3 q) E& m) d7 g5 [
- STA Sound_Ram_Addr_1,X' o: n! A3 _% r7 u4 T, p; T
- INX' T8 r& E9 {1 X$ l/ x* u% V2 ~8 v# p
- CPX #Sound_Ram_Addr_1_Size. Y6 L# `0 j% K5 o* S
- BNE Sound_Ram_Clear_1
+ k# Q' N& H( ^4 z, D - LDX #$00, z$ w# Z4 e9 b) k
- Sound_Ram_Clear_2- p7 @6 Y0 d4 j! q. T
- STA Sound_Ram_Addr_2,X/ \: U! F5 b0 ?8 l g
- INX; ?4 L+ F( k2 G, ?( J& y5 n) ~6 b7 n
- CPX #Sound_Ram_Addr_2_Size; a5 p3 Q/ t) d7 D, d3 u5 H
- BNE Sound_Ram_Clear_26 x9 k% R" I9 G$ _# K; C: G
- LDX #$00" C( [. a' k! d% K( J& Q6 T
- Sound_Ram_Clear_38 \0 K5 D4 E4 r( T' Z k% x7 s
- STA Sound_Ram_Addr_3,X
5 ]" G" q+ m9 d( P/ W+ S9 \/ E - INX0 `% g1 C5 Q( v4 Q' k: ~
- CPX #Sound_Ram_Addr_3_Size9 y) e5 W' w8 D/ k: E
- BNE Sound_Ram_Clear_3
& l* P( c ^2 {4 R9 i+ n3 p - LDX #$00
4 c8 i, b2 y! ^1 M/ ?/ r - Sound_Ram_Clear_4
) [( v5 V6 [9 T, w - STA Sound_Ram_Addr_4,X
7 }! @) n! i% h9 A( c) T- X - INX/ `) r# i+ k* O3 W/ L Q5 c# h/ L O1 o
- CPX #Sound_Ram_Addr_4_Size' _/ k: k/ u7 t: ]6 I1 Z+ B& b% @4 [
- BNE Sound_Ram_Clear_46 Y; G' p0 w* ]* Y* {
- Sound_Ram_Clear_55 u7 c: N; u# t2 J1 _& z
- STA Sound_Ram_Addr_5,X
8 R( S7 m6 ?% c e G - INX1 F8 P: W& U! u0 F* y; Y# k
- CPX #Sound_Ram_Addr_5_Size4 G# L. i4 r, B @/ V! e
- BNE Sound_Ram_Clear_5& }; r" J! w- ?9 h0 `4 N6 t
- RTS
& I. _" [ G, ? z* U, o }
3 `% [ b" Z! i- Get_Music_Collection_Name' V. o; K& @( x/ R2 X
- PHA4 f7 G# _2 S0 h: ?
- LDA <Music_Item_Cur
% {; Z; @* h0 e1 O& u& } - ASL A
* p, `. {' a! I5 \; r ? - TAY
8 K6 c$ j" n. U - LDA Music_Collection_Name,Y
# j/ z1 U3 W$ Z. h* h9 t/ M - STA <Data_L
8 T% k; |9 ]5 |/ e* B - INY, i0 n2 i5 |9 y7 K. \( m6 \
- LDA Music_Collection_Name,Y& D$ f% e4 i8 W4 f R- m
- STA <Data_H
$ x+ o7 @% _ b9 U - PLA
9 A$ {: [0 D0 q2 m. h" f* I/ y; ]& x - RTS* G4 j) M. V6 b2 Y/ E
- ; p6 h; h5 `( o$ G, H5 _# L3 J i
- Set_Sound_Total
& h% P6 z k; X" J# i3 f& N, o - LDY <Music_Item_Cur
6 w1 b$ d4 {1 s) m4 \, Z) T - LDA Sound_Total_Port,Y' _. U/ ~5 L/ ^/ O1 F( u# P8 T) Y' s
- SEC
+ W( W+ H: _/ Q. |+ Q) M, g7 Q; U2 x - SBC #$01
( y: o2 u; g% z0 j5 G - STA <Music_Total3 M$ Z y9 f1 I# V$ n. j% I; @7 ` q+ A
- RTS
: S' h4 a' r2 M! O - - G/ W) I) W: Q; r+ `8 R/ U
- Get_Sound_Start3 l' A6 g) A% S8 G, [% Q
- LDY <Music_Item_Cur4 d* s9 s8 t9 y# q
- LDA Sound_Start_Port,Y
3 y# i0 T8 v6 Z" G' c - RTS
. N* r8 p+ K9 B. X5 Z( m+ [ - 2 j; F( Y% F" H5 T1 m# C6 F
- Set_Sound_Init_Port
" s! Q, J/ J' s- A - PHA% i9 X: Q) l s: Y) t
- LDA #$20
! p( z2 v- o: A - STA <JSR_Addr_Op, q/ v7 i% H, A0 j
- LDA <Music_Item_Cur
/ L$ G2 x z) k* X$ i8 u. W - ASL A
+ x8 H0 C- Z! \- Z1 F - TAY# r) K# a; \0 @) U) \3 |
- LDA Sound_Init_Port,Y* U( k5 q. b. d# y
- STA <JSR_Addr_L3 l8 c/ ^( C/ g
- INY' [2 c5 U1 m, r0 r* b6 `
- LDA Sound_Init_Port,Y
$ U$ Q5 O* X+ E - STA <JSR_Addr_H
' |& A' d3 C! D8 d - LDA #$60
0 f* S3 a+ b7 T4 I1 }0 f1 T - STA <JSR_Addr_Rts
E: }- p6 b7 i) \$ F! [3 j - PLA, ?8 R ]/ D: W) N3 D4 |) H
- RTS- s* U3 t/ d) n& H7 c/ ~
3 K8 o+ Q# J1 h2 f- s/ r3 J- Set_Sound_Play_Port
7 F2 B. w4 _! h" }. I. i8 Q( O - PHA' u5 w/ \+ N; c$ F( Y3 J+ Y
- LDA #$20
7 t& A3 n3 c0 z" z. o6 F - STA <JSR_Addr_Op
* N( y6 a5 v4 G' ?* K% v - LDA <Music_Item_Cur6 U/ J) ?1 A0 B9 Y
- ASL A
( c; e$ H1 u5 F" U - TAY* g1 F- a) C$ U e- T9 R
- LDA Sound_Play_Port,Y/ k3 n7 o3 h2 T3 Q D! U
- STA <JSR_Addr_L3 z, y* d' v/ r9 e* b
- INY
. i: X, W. _6 q1 q; k. n - LDA Sound_Play_Port,Y* p* H0 w9 @! v( Z. F/ S6 }$ z' Z
- STA <JSR_Addr_H
% u5 e! z7 w6 j( u+ _' V - LDA #$609 ~) P9 r2 Z! V+ m0 d Y
- STA <JSR_Addr_Rts
( o' {$ u; k0 b$ X. ^' b2 q% i* ` - PLA
4 E9 G3 F& X& ?) M3 b - RTS
' w$ F& w' J- ^( ` @+ o
3 g& `2 M" E4 Z- Set_Sound_Reset_Port
0 `* G- f7 {( b' d1 [5 m9 f - PHA
' K1 f# D6 T. R( T! R2 j - LDA #$20
' s# k. j: S W3 w7 o - STA <JSR_Addr_Op
# s- c. g' s/ U8 y8 n3 Y - LDA <Music_Item_Cur
4 K3 I( S% A$ [* x. N8 J- c0 p - ASL A. E+ l! c1 S( m3 q
- TAY
! M, \$ d+ L, \' z+ X. v - LDA Sound_Reset_Port,Y
% e; P' Y$ ^* V - STA <JSR_Addr_L2 k9 s+ \) a# o. {) {; q
- INY
! q! H+ c8 n( p' F/ p) r - LDA Sound_Reset_Port,Y
9 q! \$ m7 J( c( ]: P2 H6 y - STA <JSR_Addr_H
- o" \: h5 z) R% }+ k1 r! W+ v. D - LDA #$60
7 }% w X" e' q* h" E+ k3 j( x0 l - STA <JSR_Addr_Rts) g- t, g3 q/ Q. H2 ?4 g
- PLA
) Z! c5 L4 d0 m: w/ U" F' p - RTS
b/ q3 I5 s6 Y9 j% k - ! N5 B( @2 i6 e6 j3 O) J( t' T
- ;初始化音乐bank0 v1 }. ~( n, o' f% a3 B
- Init_Sound_Bank
5 w8 R) V2 g6 J - LDY <Music_Item_Cur
% Z9 b* t1 @ I9 ^$ n0 a - LDA Sound_Bank_8000,Y, K3 K' G. Y' I/ l% F7 r" l
- STA <Music_Bank_8000+ {( m9 r4 O5 p+ P
- LDY <Music_Item_Cur5 L- V% y2 m4 l+ ~
- LDA Sound_Bank_A000,Y8 _; {( I- G( ?9 W o' `
- STA <Music_Bank_A000
, h+ x+ a3 x& I Y0 Y3 T, }! t - RTS e4 @; n9 {6 }( ^8 L% O: q
/ _5 |$ _2 B. L; f8 r2 ?- L- ;==================================================9 J5 |1 i4 v9 n9 }' ` E% f9 x
- Sound_State_Reset;音乐状态重置
5 g- x2 \ P: u* L, F - JSR Music_Bar_ReSet ;重置音乐条
: v+ I! ]1 f7 c$ t. z - JSR Time_ReSet ;重置播放时间$ }: n, j$ i% D- \/ Q
- 7 [* l' ]+ l8 S) O, e( Y
- LDA #$005 T/ L7 ~# Q: C9 d4 n h. Z
- STA <Music_Stop_State3 c/ X; f! |) Z' R- s1 n7 o- `
- JSR Music_State_Show ;显示播放状态
: U y8 `+ N( y3 I, y2 D* P& Q6 E2 P - / M( t+ f. W) ^4 X
- .IF Track_Name_Pos
0 M! h3 O6 Y, e& A& W - JSR Show_Track_Info ;音乐曲目名显示
3 E G. y, L+ @7 s - .ENDIF4 w( C8 F0 }( `0 E O5 b9 Z
-
; i" k9 V4 k% {) e% R - RTS
& a7 Z, L7 r. Z! [4 E8 t4 `
, F( H, g/ L) W9 r. f( n- ;==================================================+ K1 Q( l& U0 t* i- Z( |( t# P$ L
- Sound_Init_Proc;音乐初始化处理
0 k1 f9 i' ~4 w4 W/ x1 } - PHA
; P: \' e5 B9 f/ v4 f# e; b& _ - JSR Set_Sound_Init_Port ;设置音乐初始化地址
1 a. @6 v! e; a9 {5 d - LDA #$008 _. `, T9 W$ h! l b/ l2 @1 Z. u8 r
- STA <Scroll_H ;重设水平滚动
J. S6 ~6 O4 x. _5 L4 y - LDA #$0F/ G( b# d& A: s" e4 w; U+ e& u
- STA APU_STATUS* i) B: D, i& e+ d8 |
- PLA
- S5 I! k2 R( w. l. n& s" P9 Z - JSR Sound_Init ;音乐初始化
! U u q# y% w8 u$ b" `" P - JSR Sound_State_Reset ;重置音乐播放状态9 L- U; _$ P4 s0 a: _( q
- RTS! r( Y. G1 Q$ {! z$ {8 x
- ! a+ M: I# Q6 i/ ^
- ;==================================================6 k7 F9 s u1 |: Y; v
- Sound_Play_Proc;音乐播放处理
, x7 v/ |$ i* s - JSR Set_Sound_Play_Port ;设置音乐播放地址
4 A0 z' I8 P! c/ R: F/ B; N' x: S - JSR Sound_Play ;音乐播放
. U) ?3 z& B7 p8 L) n: T2 N# E - RTS9 f, r: s K; j% I' L
- $ W4 S) c% [" i" u
- ;==================================================
' Y5 z% L* j, i$ U X: X - Sound_Reset_Proc;音乐重置处理' y$ `) m. [. T- [5 |
- JSR Set_Sound_Reset_Port ;设置音乐重置地址+ [8 u8 J! X! ~7 R1 f2 B
- LDA <JSR_Addr_L9 w. p! o1 c+ j6 ], i# @: h [# Q# _* ~
- ORA <JSR_Addr_H
1 u9 S' q( I3 ]& h& y - BEQ Sound_Reset_Proc_Default: X5 L3 O: B# b
- JSR Sound_Reset ;执行音乐重置5 s& y* ?2 \! r7 l) Q
- JMP Sound_Reset_Proc_Init_Sound
2 k( l% V7 _% D. r, j2 H - $ Z8 }- v* z9 x
- Sound_Reset_Proc_Default ;默认音乐重置处理" b: q4 Y" ?" D/ ~: Y
- + v) r+ n j _0 v! }
- ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
0 ~ ~9 d1 f4 Y9 f, l, d - LDA #$00
* E2 K% N6 o% c5 X) P6 r0 k - STA PPU_CTRL) W# m3 {! W; @1 @. j
- 0 \. e$ L" L+ v. d
- JSR Sound_Data_Clear
/ P" l/ C6 `' H7 n% ~ -
8 C. d# m } m - Sound_Reset_Proc_Default_Wait
" f6 L1 H' E4 G( m - LDA PPU_STATUS
. H v& T" a$ a$ i - BPL Sound_Reset_Proc_Default_Wait- o7 e$ q8 O1 k/ ^
-
. R7 F$ b( |- ]5 @. [ - LDA #$00- r; H" t; N; C5 ^2 @& { B+ m$ h
- STA PPU_ADDRESS
; M: H0 {3 u9 y5 b' x9 ]! Y - STA PPU_ADDRESS' Z: z. ^2 y- E- K
- STA PPU_SCROLL- j. X" d: A2 `
- STA PPU_SCROLL
4 j2 c. b) |) k6 L: `- i3 R8 R, n% _7 W - 7 y# j6 }' J# B: d8 Z
- ;恢复PPU控制
, Q; }2 R$ s2 i6 g) w7 q - LDA Screen_Ctrl* |+ g8 s, c m5 [/ r: y Y* @
- STA PPU_CTRL
6 j( i! m$ I0 R: ] -
/ i8 d& L7 N* P5 i - Sound_Reset_Proc_Init_Sound
' O" a* M. u- [4 ]0 j" q - LDA <Music_Stop_State
$ \ i/ r9 d9 B4 P - BNE Sound_Reset_Proc_End
( j7 i# Z% p) @, I - LDX <Music_Item_Cur. ]3 s% @' u8 U6 [ h0 k, `
- LDA <Music_Cur,X0 z @6 @% S" A* |
- JSR Sound_Init_Proc3 k) `, z+ c# D) S# y% N2 \ O
- Sound_Reset_Proc_End, R; Y( J: ~! B' Z0 ?% A
- RTS4 `% c9 |( W# A+ ]
- " ^% v( S. p( ^- K7 n+ a3 x! v
- ;==================================================
* c6 C) m' F6 p% ^) N - Clear_Item_Text;清除页项目
9 T$ X% i; J% y$ Y# g - LDX PPU_Cur
6 [( |6 M3 ~" M8 y) r- n - LDA #PPU_MODE_CNT_CLEAR" m6 ]9 j/ {( P4 ^9 w; d1 q! m
- STA PPU_Addr,X6 v& U1 Y* h9 D2 F$ d. J' }
- INX* T l# M9 {6 }, H H+ f, n+ B
-
9 u. I9 P, j3 Z; u, L! n - LDA <Page_Last
+ k& k7 W, b5 Z% e5 ~) ? - SEC% K8 \ u: w' M6 H! j/ c
- SBC <Page_Last_Index
Z! e \3 f, }" `4 x8 B - ASL A
7 t* A$ p) s; n# K. y - , p3 X' x* A% M( a) Z- S
- TAY r7 B" C) r( g6 N- l7 m) B7 p% k
- LDA Item_Pos_Data,Y( Z0 h" `; L3 P6 f0 q# Q1 h; F
- PHA5 ^( v# s, `! ~' ~
- INY; E0 [! a7 O* Z1 g/ @4 x1 J
- LDA Item_Pos_Data,Y
9 C: ^, S4 T; n2 }' ?8 C' P. u - STA PPU_Addr,X
/ B. P( |7 x3 V7 ^( M' q, ] - INX$ e7 Q( v2 C1 a# c% b% Z6 c+ m
- PLA. L1 I% n6 t8 l6 ^. c8 F
- STA PPU_Addr,X+ l4 k- ?# M$ z p; A1 @7 {. k
- INX( ^7 r. P' p; m& q6 n2 G
- ) Q g2 Q$ Y4 X0 y1 I! m! u
- LDA <Page_Last
; t( D( L: e+ i/ _ Y& s8 s4 _. b" a - ASL A
' A& N+ B" K/ [" V+ t - TAY b/ T- v9 \2 G; T" |2 F6 K" R0 O
- LDA Music_Collection_Name,Y
8 w( r: D& N$ m' V - STA <Data_L
, l/ r+ @; s g# B& }) ~8 E* |6 K" | - INY. D& @; _, _3 ~6 e# }: [& p0 B9 F
- LDA Music_Collection_Name,Y
4 L7 C. B$ ^% e+ q' X0 p - STA <Data_H1 l- H8 g3 F7 `* Y Y+ i
- 8 c7 v% b R, _8 G- M
- LDY #$00# v9 K7 H, I3 U
- LDA [Data_L],Y
, s. A; o1 q4 a1 K* e$ J j - STA PPU_Addr,X7 ~4 T& `9 r# @! p
- INX* B6 A" ?& j: P0 e8 O
- Clear_Item_Text_End) r7 m# q* x' u- W
- STX PPU_Cur
* L" V E: o( ~, t. i9 N. @% L8 @ - RTS
( }1 G2 R2 d. V8 R0 m0 B! q
, c4 d' J! l$ D7 [- ;==================================================
$ }' f% T7 k$ p0 ^+ x - Show_Item_Text;显示页项目9 ?$ V/ k$ @" q- Y- z/ a/ O6 i
- LDX PPU_Cur" O7 s9 ?8 Z" j3 s
- LDA #PPU_MODE_CNT_LINE
1 r) Z& V! M N/ W3 q - STA PPU_Addr,X
5 w' Z3 U! C, B$ ^; i4 d+ ]2 b0 f8 ] - INX
% c7 I" R2 Y5 [ - LDA Page_Cur/ j+ S( }9 w7 ^0 Q, P4 l. d
- SEC$ i& @- T5 J5 t: E! {$ T( s% G
- SBC <Page_Cur_Index
! c8 e# @# t1 V6 D5 m }8 Y - ASL A
& W! z! y" I% H7 t% j2 I - TAY
( R5 D& e& z2 [+ E, X8 k/ ~ - LDA Item_Pos_Data,Y
9 B# G2 j, V' ~6 w2 q - PHA2 t C( U6 l, X( P
- INY
, ?/ U; k. p8 E6 Z - LDA Item_Pos_Data,Y* u7 w. J9 W* R1 R, r
- STA PPU_Addr,X4 b1 b* v! x0 l6 u- `
- INX
( ~4 \2 `7 y9 Z4 w4 J- H3 C - PLA3 ?/ w) t, P7 W- Y" L1 o# s
- STA PPU_Addr,X' D! b2 R0 f" @ ?
- INX, O+ T- w6 r" r3 ~4 W
- ; b# C" A1 a/ ^9 ]- y @" o
- LDA Page_Cur; Z3 l( _7 Z% p0 o8 c; R# ^
- ASL A
' w2 |$ M1 S) h8 |5 y: ] - TAY
1 \9 p4 ~9 W0 T - LDA Music_Collection_Name,Y' G! u* ~2 l$ `& | _# u6 B- f6 |
- STA <Data_L
. H# [( @# d0 @, N, k5 j/ X$ M - INY7 T: B" i" X* X0 r
- LDA Music_Collection_Name,Y
" m. Z( A5 t. @/ K- r - STA <Data_H
5 t4 \. f8 y' }3 o+ b# V# c -
, i4 \9 Y" J9 } - LDY #$00
7 f _" ]" L3 U+ v" q1 e; x" f - LDA [Data_L],Y
8 L! |2 L$ x3 D. `. e" d - STA PPU_Addr,X
( A, _$ ^* i" L; W* z! ?: a - STA Data_Cnt
9 S. F/ A+ B5 U0 e5 a/ d- e - INX; m) f" s+ v, k5 Y0 T
- + [7 c9 t) b5 t. Y: w
- INY
9 w# o8 w: x5 Q0 k6 U* u - Show_Item_Text_Write$ f7 t% Q! {* O; c
- LDA [Data_L],Y
/ S5 {8 a/ |. L8 z4 a/ y5 m - STA PPU_Addr,X% L/ j, i2 f0 }( r. D: U
- INY2 E$ J$ m. s) A5 x9 E6 \
- INX
R+ q! W, ?# c - DEC Data_Cnt+ N1 J: U$ g/ g
- BNE Show_Item_Text_Write$ @ K; f, X. p; v' D; x- K, x$ z
- - F( Y5 D1 E$ l4 y$ z2 o( c
- Show_Item_Text_End
) _8 G4 ^% i8 j2 {* h9 s6 q2 B - STX PPU_Cur
8 l( E- k! a# ?: y$ \ - RTS
9 T- K8 H$ d5 K' R) j. [9 w - 0 ^' h0 @% v, d4 p+ A7 @* e
- ;==================================================5 j0 m& e$ m1 K! F. r1 R3 l
- Get_Page_Start_Index;获取当前页号起始与条目数量
) o3 A z" _: F+ d& p - STA <Data_Buf, y. [" i4 G, o) c, q4 O7 G
- LDA #$00' t+ f; v! y% _7 ~4 u$ ^
- Get_Page_Index_Calc
6 g5 M( q6 G+ _3 u Q. T - CLC
" |: [# J9 { ~, H5 u. d f+ z; r - ADC #PAGE_SIZE: Z' }/ B0 ^/ M* @9 i" z
- CMP <Data_Buf- O" O, P0 X; r. T7 e: s z
- BCC Get_Page_Index_Calc
' n* a# a/ k2 X0 M8 m8 R3 R0 x - BEQ Get_Page_Index_Calc_End
) z* [; s% k5 k7 J! e8 v4 i- k# z - SEC8 t4 H5 L1 z$ c& O4 V( u& c
- SBC #PAGE_SIZE8 \2 ?; S8 z8 {7 V8 t% d4 O9 X
- Get_Page_Index_Calc_End
* z% z: Z4 k8 `% N( @ W1 M9 O2 _ - STA <Data_Buf
. _/ }! i; W1 { - Get_Page_Index_Cnt. Z. t2 T0 e8 F. J5 q) C
- LDA #PAGE_SIZE
! r6 M7 L* J+ l - STA Data_Cnt
+ m- B- V8 K5 p! C - S; K2 _) G' A: X1 a( o4 K6 n
- LDA <Data_Buf b; d" \0 }3 f: s) q+ K" W
- CLC
$ [# V) R1 i- p7 ~7 m - ADC #PAGE_SIZE
' x6 `" O! ] `3 d6 _8 R4 ~1 c - CMP #ITEM_MAX_SIZE3 U; B* ?# O6 B$ s0 G
- BCC Get_Page_Index_Cnt_End ?% H9 ` x+ i/ j
2 S5 R7 D! _- ^% p6 |% @) U# Z- LDA #ITEM_MAX_SIZE- w, O. ?6 Z4 h
- SEC+ W( B5 R, J2 ^$ ?9 y/ u! J6 H8 V
- SBC <Data_Buf3 `. [0 Y/ O3 }$ u8 u$ V9 D* G
- STA <Data_Cnt; f3 e9 ` \$ F' [/ F8 l* G
- " ]2 n" @$ [/ _1 N
- Get_Page_Index_Cnt_End7 Q: \& y& `& W, a# i' _
- RTS& U( Y; v& P: J0 a1 L R$ c" }6 l4 E- {
- $ ?$ e; i, ~! t) T0 k( \- f
- ;==================================================- v0 b% O3 t1 ~5 m1 z4 U
- Get_Last_Page_Start_Index
" e3 r$ w: j6 W: n2 H& b - LDA <Music_Item_Last
9 q# B a( |5 \" G% o! t/ Y' K; J - JSR Get_Page_Start_Index5 H7 \0 G$ p3 y
- LDA Data_Buf
& x8 B$ ^5 @) } - STA Page_Last' C" w# F/ o9 G$ v' W) n4 m( J
- STA Page_Last_Index
' V! O1 a" x k" k h/ F* F. x! m! w - LDA Data_Cnt
, z5 n6 S) o5 k' C - STA Page_Last_Cnt$ d6 I3 G8 G& W& P
- RTS
% O: l/ p1 D4 g3 C( j" l - 0 A2 {, f% ^: w; [
- ;==================================================$ _. p3 ^* q- s2 X* ~; u
- Get_Cur_Page_Start_Index
' l, Q. J# w, j7 w& m" i; E% C1 `5 Q - LDA <Music_Item_Cur
9 M- V* x* _' `: N! ^. `' ^ - JSR Get_Page_Start_Index
6 O0 s" s% A- ^5 T6 d - LDA Data_Buf
) I" B0 M4 [8 c7 L3 D6 l- i2 T - STA Page_Cur
* H3 h0 H( G/ \/ S! y. M1 z* ? - STA Page_Cur_Index; D; a# L, V& ^
- LDA Data_Cnt" r* ~9 _) o8 u5 h* \
- STA Page_Cur_Cnt2 n( w; Y2 v, M- ^+ B0 E
- RTS
& e% s+ X! h3 {, _ - & ~3 u! e% W: g0 o& b
- ;==================================================- ]! S- D& T1 Q: v! H3 I' w6 ^7 N/ U
- Show_Page_Text;显示页文本
- a' K- `9 }- d, w a" L - LDA <Text_Disable_Flag. i3 V) s3 D$ s7 \
- ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
j: p* w/ Y9 I! t$ B4 A - STA <Text_Disable_Flag
2 G6 Q* y' {+ U4 j ^/ B7 x) a. p -
' Y& J+ a) D! h. X4 P5 q* }( i a - JSR Get_Last_Page_Start_Index
7 I9 H5 ?- {& o5 y3 H - JSR Get_Cur_Page_Start_Index
" Q& \% s" _" t+ L p! u% B: H! M - . M( s' r/ ?' M9 k
- Show_Page_Text_Set! z, _; h2 D& B% G
- y3 K2 {% M" _: N* i, t- Clear_Page_Last_Item;清理上一页
! |; b6 j0 ^) z5 W/ n$ z' p7 K - LDA Page_Last_Cnt
- p$ |& ~3 @& ~: j - BEQ Clear_Page_Last_Item_End4 h! r2 ?) c2 o j4 X
- JSR Clear_Item_Text
7 p' X7 ~8 X2 q- Q2 ~" c - INC Page_Last3 A6 U& r2 P8 N2 `( B
- DEC Page_Last_Cnt% y D8 r0 Z2 C! G6 q
- Clear_Page_Last_Item_End
; X- x2 s/ @- E: W -
; C3 _" P' ~/ N. a$ {! l S# _$ M' z - Show_Page_Cur_Item;显示当前页! m/ X, f/ `3 a6 X
- LDA Page_Cur_Cnt# ]7 m; h: `( u4 P
- BEQ Show_Page_Cur_Item_End& M. H4 ]% i' \
- JSR Show_Item_Text
; F: n3 D7 F, G: y' |7 U8 a - INC Page_Cur
# N% B+ F0 {& F( `7 h0 O - DEC Page_Cur_Cnt! C% s( G" j& e, o: o" _
- Show_Page_Cur_Item_End
& _. X% w/ A) h2 }$ H' x
2 g& N' a% z8 x# ^0 v- INC <Time_Wait_Cnt# u# j) C. ?) U; a
- Show_Page_Text_Set_Wait;等待NMI完成PPU操作
% |1 v m- B$ }; | - LDA <Time_Wait_Cnt) D# c" m) b2 Z' I4 u) s
- BNE Show_Page_Text_Set_Wait, b) G- s6 T, x( j
-
, x3 w) |0 T5 v: ~) p9 n - LDA Page_Last_Cnt
2 i- f; O- k+ T5 t; s8 P3 O) x) V - ORA Page_Cur_Cnt7 q" \6 M& U% R) C
- BNE Show_Page_Text_Set9 Y, e5 f' R! J% v3 f
- LDA <Text_Disable_Flag k* @- P4 N: U6 X6 y, S* ~; a0 C
- AND #TEXT_DISABLE_ITEM ^ $FF# U8 P( ^7 `6 `' M& g5 J
- STA <Text_Disable_Flag
, j; V' I" P) a$ l - RTS1 X( w2 D) s- O
- . O1 Z& B3 B& H; r/ x: ?, x
- ;==================================================
* O, Z& f+ Y# r+ ?! J0 Q: J; Q$ O - Last_Item;上一项
0 t7 R3 k+ M, f( X: Z" j - JSR Clear_Last_Track_Name
$ M0 `3 \7 J) e) K7 q/ a$ h. w% R - JSR Disable_Text_Draw
9 v, A7 F2 w) s; C. E. z -
& p; J: Q; d; D9 ?& L - LDA <Music_Item_Cur
, h: @0 D7 n2 H/ d' z - STA <Music_Item_Last/ W. H1 q2 X2 {1 G' ~
- ! t6 P4 m9 ^& E8 Z! D) l0 f
- JSR Get_Last_Page_Start_Index
- r$ o1 a$ T, f7 _& M" m' N- u -
1 H2 o4 A! o0 G; A1 e8 e - LDA #$00
& s. r1 k @. L. K - STA Data_Buf# _9 {# }% t! P4 j: G
-
% _" }, i* |, s/ F h - LDA <Page_Last
2 q N6 r! {+ @$ {" ] - CMP <Music_Item_Cur& h* l5 J; U$ b
- BNE Last_Item_Begin
4 ~) \) u3 w, q% h$ }- U4 [ -
7 E) N" m4 i* o; g( t% S; r - LDA #$01
8 f. e! J5 m0 f2 F( p7 i: n& F- o - STA Data_Buf% D7 e; }( A L1 ^
- Last_Item_Begin
3 m9 ~, c8 e/ h& B; h) h% ~ - LDA <Music_Item_Cur/ @: i8 s* W9 Z0 q s2 v- T$ E
- BNE Last_Item_Set( G7 H: t6 M4 u- s
- LDA #ITEM_MAX_INDEX + 1
6 u4 [, w0 N, \6 C - STA <Music_Item_Cur* C( n5 G3 F$ B2 C
-
1 {- {, D3 d3 G0 E, L2 H: ? - Last_Item_Set
% }3 Q% ]# v! @6 a# @8 N" i- \ - DEC <Music_Item_Cur
2 Q) b0 U. k( ~0 V" U2 C0 c" k7 ^9 M - LDA <Music_Item_Cur; N ]: h+ J' Z8 w# {( G4 E
- JSR Reset_Current_Music; |6 Z) A3 V3 @* S1 j/ j
0 r) \& H& ~5 E d( i/ b- ^: r- Last_Item_Play ^# x" m, p; x9 L0 H
- LDA Data_Buf$ k# }% {$ q. K8 K; w: \
- BEQ Last_Item_End& ? X6 E9 }4 W B3 R
- JSR Show_Page_Text
/ V: y5 y: {( s5 e8 X. z. F' _ - Last_Item_End4 P; ^- }! G# m. t: i
- RTS
; X. d1 G' G/ J4 o3 H2 b* k/ A$ V' s
V) W2 c! R; q& T- ;==================================================& V. [8 G& ^0 f4 ~5 ^. \
- Next_Item;下一项
! i. q; L8 y" P4 q7 l9 E& P7 J - JSR Clear_Last_Track_Name( H1 P( L% g' U% T @7 b8 }
- JSR Disable_Text_Draw
/ R$ d! B$ e; B1 v8 q# ~ -
$ `: Z7 B n2 I) C0 \$ F2 e/ R - LDA <Music_Item_Cur. V+ M4 u6 t% P6 B! l0 t: W
- STA <Music_Item_Last
: V7 G- M2 P- `5 t- L( v -
# K, ]- H; v! r2 y$ H - JSR Get_Last_Page_Start_Index7 |$ D4 L+ E2 x! v: {$ U# m
- 1 F0 C% o: a5 y
- LDA #$006 i& U, j( V3 D
- STA Data_Buf; E: H; z- h5 {1 u; D
-
1 e# K! ?& o; S/ g - LDA <Page_Last, E5 w7 z' D9 z
- CLC* F6 K, D N; o z5 y+ G, {
- ADC <Page_Last_Cnt3 C1 L8 \2 d( J+ W
- SEC
2 O, ~3 y7 H$ ^& v - SBC #$01
! F, [4 ?; ?4 S$ ` - CMP <Music_Item_Cur
+ U7 i4 c: G* a0 j3 S& a7 \ - BNE Next_Item_Begin
+ U3 c- L0 h+ K* K- j+ a* D, s; i5 g - , Y @6 C+ {, e2 t: f
- LDA #$01$ j3 z9 c! ?' s+ {& ^/ A
- STA Data_Buf
' t& A9 \) ~2 X8 n, [ - Next_Item_Begin
( Z% Y' E y8 v( f% h - LDA <Music_Item_Cur
0 f# K9 D, ?! u% f. R% R6 v - CMP #ITEM_MAX_INDEX/ H! T- A1 I9 F) F- n: i( G1 y
- BCC Next_Item_Set0 [6 y4 f6 [4 a2 A& \) y
- LDA #$FF
' i. g8 A' v/ Y, K7 W! Y - STA <Music_Item_Cur
) m% }+ i* e/ } o' ?! n6 b" }8 y, J - Next_Item_Set
. J1 w4 u- B" C% m% Q; p0 ^( v0 O3 m - INC <Music_Item_Cur
9 D7 ?1 S% m5 V- X - LDA <Music_Item_Cur
: ]. K* M! v; `1 D; u - LDA <Music_Item_Cur
" b( n& W6 N, g) e9 \) ?" e - JSR Reset_Current_Music* Z! p& S4 w, S2 [, @4 p. z8 ?. h
- Next_Item_Play) ]) t4 Z2 U% B' ?+ e
- LDA Data_Buf b) Z H& D- a0 S
- BEQ Next_Item_End
/ f* ~5 i* l9 ~. O% x - JSR Show_Page_Text! z5 y0 L$ V% ]9 o* b7 K
- Next_Item_End" @; \# E; G2 I6 ?
- RTS
# \6 j' P0 f X1 C b
+ T/ W) g1 g- L/ b- Q- ;==================================================7 h; X' V2 X/ `; o$ r, h; L' ^7 n
- Last_Page;上一页" x( u+ l- s( ~7 D
- RTS2 q) |$ v8 i2 Y8 J5 X: c2 D: R. C& H
- 1 n, P4 y* _; o0 y5 O+ Q4 ^/ P+ l3 d
- ;==================================================
, V% V$ h3 t& P0 ]% u7 K4 S& T/ ` - Next_Page;下一页2 ^+ ?3 T% c7 N3 y/ K
- LDA #PAGE_MAX_INDEX7 f1 L$ R& w2 ^' C
- CMP #$012 `1 T' a2 ]! a; x G8 R1 ]
- BEQ Next_Page_End( T1 _2 f$ g; _+ i
0 E6 |4 `- C$ X& {+ v9 ~" z- LDA <Music_Item_Cur
8 w$ E' z) _* m4 K9 j0 I - STA <Music_Item_Last" {! J2 {% c2 C6 R1 D) Q' \
- " K! G$ l3 }+ I/ M$ }1 v7 ~7 X8 s) l
- JSR Get_Last_Page_Start_Index
3 C2 H9 v+ r5 `% D# @! O - 4 X I( T b( L% O7 n5 p
- LDA <Page_Last_Index
: L. D$ F' Z# M8 y2 w# ] - CMP #PAGE_MAX_INDEX) S" d. e' o/ ]; M
- BCS Next_Page_In_End_Page
8 p" e* a/ E4 }% T8 V - 4 h/ |- L+ Q: U: g, M
- Next_Page_Not_End_Page;不是在最后一页
# e6 d7 `: ?' y3 A. F8 u3 ?/ k0 Y - LDA <Music_Item_Cur
: i) ], Y* Z; \" {0 d1 p - CLC
# C3 f/ e" f1 [; v; ~* s, ?3 E4 L - ADC #PAGE_SIZE
' C/ o' g1 p F0 L- m - CMP #ITEM_MAX_SIZE
; B4 n. q8 o& ?4 p - BCC Next_Page_Not_End_Page_Less8 p4 h- P7 l* |
- LDA <Music_Item_Cur! q4 j# r$ N. y8 u: Z
- SEC
# t) P) e6 }9 }9 I2 ~3 V9 a( I - SBC <Page_Last_Index: u" z9 y* l" s) D. E2 H3 h! `
- CLC2 I5 Z7 ` }2 J
- ADC #PAGE_MAX_INDEX
8 a, z% K" {8 z( {: J - CMP #ITEM_MAX_SIZE( g4 d4 q% |2 n
- BCC Next_Page_Not_End_Page_Less* ~3 s3 ?- z7 h* z- _6 v1 W4 ^
- LDA #ITEM_MAX_INDEX5 Y- X5 ^) x/ }& b; w6 R K4 B
- Next_Page_Not_End_Page_Less
8 e; L I* h" S8 @* q' W' h2 ^ - STA <Music_Item_Cur
) F: L: d1 a8 R9 ]3 r - JMP Next_Page_Reset
9 `! G, y& g0 ~
5 g9 J4 p. }+ B: F- A7 `- Next_Page_In_End_Page;在最后一页
( @1 T3 y) q+ H, o' i5 p7 L& C - LDA <Music_Item_Cur5 W0 A+ m3 w8 l; r8 h; ^6 Y6 d' E
- SEC1 P8 E7 p5 a2 V* d" O% Z" L! ~
- SBC <Page_Last_Index4 k( c8 W, y U# B. u
- STA <Music_Item_Cur! q5 E6 F' `/ _
- / t* f! h. I; S
- Next_Page_Reset! z% i5 R' _6 x) E* h
- LDA <Music_Item_Cur" D8 R, H* u/ O. B
- JSR Reset_Current_Music! w0 _7 j$ t4 d
- JSR Show_Page_Text& f+ { m6 j" ~, S* Y, P
- Next_Page_End9 y) O* O8 Z# m& f1 r9 Z
- RTS
: y% ?1 Y9 ~+ I - & J7 J' z% \- P, m
- ;==================================================) f0 c8 K% A& p; l
- Disable_Text_Draw;禁用音乐条刷新
& {% b5 y7 S# H - LDA <Text_Disable_Flag
, Y) \( `* ^3 j1 ~% z( r* I - ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME6 l1 [0 A! }5 h* d: W
- STA <Text_Disable_Flag
, l5 T Q- [$ P& e# Z" i& I3 V% w5 X0 @ - RTS
* {/ r; b2 R5 C( g- a; R! \
" d% q& R3 V, W4 p$ }0 V% E- ;==================================================# H9 X/ [; W3 D# V1 \
- Clear_Last_Track_Name;清除上次曲目名
2 r8 a" ~/ Y0 f6 v4 w) {* V9 q - LDX <Music_Item_Cur
: u1 \" Q$ p0 H; ~ - LDA <Music_Cur,X |3 L$ i* K, r% Y
- .IF Track_Name_Pos1 N- X" H+ |/ ~( D
- JSR Clear_Track_Info: v4 y" R$ S$ m5 {. Z/ [( F$ u+ X
- .ENDIF5 K; V+ R; D) l* p) W
- RTS
6 G) p$ x1 g4 ^) B6 t9 N0 z( X
) E, O! N. {! X% `$ w; v8 F' h- ;==================================================$ v9 b6 @0 ?' o* _5 X
- Reset_Current_Music;重设当前曲目
0 Q" h; p3 d" r! ?' ^! j) M' | - - u% Y$ V) k7 o* G) z- G& l
- ;写入当前总曲目
! s" ^4 `9 N& o1 e - JSR Set_Sound_Total$ K) c8 p1 p* e( q! _& p; v
- LDX <Music_Item_Cur
x; @8 T( g h* N6 F# U/ T -
) e: Z! Q! z3 j% \' i3 z - LDA #$00; }& _1 _/ E5 w& w0 T0 W$ E9 U# ~
- STA <Music_Last
+ V2 v) G& R1 Y* S) o( P* X - 0 A1 [+ P, e' u Q- I4 d
- JSR Sound_Reset_Proc% l7 g& Q+ {3 ?& k. {; @
- JSR Music_Show
: u9 G+ v; @% e; k0 J6 y0 F - RTS% G; L i0 r' W4 k l4 z
-
8 N$ V9 Q9 {+ X0 p4 X! z! F; ? - ;==================================================
# h) K8 @$ R9 Y L& ~/ Z* A2 V - Music_Song_Stop;音乐停止. a+ R! F+ Q* V7 j$ T; @
- LDA #$01, B4 W8 L. p7 z1 S/ V
- STA <Music_Stop_State
4 ? E* r' }6 z$ _# H6 o - JSR Music_Bar_ReSet/ u+ e% d) H; V/ \, m
- JSR Time_ReSet( `" Z7 y2 d6 r
- JSR Sound_Data_Clear
, c- k; A# a8 G, K - JSR Music_State_Show
& r4 j3 U5 L# }) k& C - RTS
. `2 u, o$ A U2 N% y -
6 T. i" m2 z& Z& G) K) v/ f - ;================================================== U4 \) I/ h h" k+ J
- Music_Song_Play;音乐播放2 X: j0 t1 L- d8 |* J
- LDA #$00
! _! O8 s* c) O; d! G - STA <Music_Stop_State/ b/ @# G8 C' O; Q5 t
- LDX <Music_Item_Cur
6 t, T, W+ u% D2 Z: `7 C- X3 A# i6 E - LDA <Music_Cur,X- _( w K K9 ^. @; t
- JSR Sound_Init_Proc
% a/ O9 i& S# r" D# s: V, F - RTS8 \) B8 m; e5 }/ q0 m1 z
-
0 l& T! s X' e2 Y. h. j - ;==================================================8 Z7 U, q* ` W! X" R
- Music_Song_Last_10;上10曲$ J$ |0 Q) c2 ^
- JSR Clear_Last_Track_Name8 \2 X3 K% V' N' }
- JSR Disable_Text_Draw
' J$ D3 |& _8 X - LDX <Music_Item_Cur
7 Q7 K/ x: N6 ]! f1 g( N - JSR Set_Sound_Total9 V, I) G( v* u3 H
- LDA <Music_Cur,X
/ L: ] j/ t! f; \# P( g( }& U: i - SEC/ O/ y3 |: I3 z! o
- SBC #109 A! t6 r$ {8 l; c9 i
- BCS Music_Song_Last_10_Set
* l% q; @; I' S( c2 L - LDA #$00
, n3 ?& ^( h1 d. b! Z: n( F - Music_Song_Last_10_Set
8 k! a7 R1 U/ A1 s3 X - STA <Music_Cur,X
. q$ F2 A, t# R: D7 d9 Z - JSR Sound_Reset_Proc
8 G a* H% o. Y% t* L - JSR Music_Show# `& ?) h | @
- Music_Song_Last_10_End$ p/ q( c3 I0 u2 n& n
- RTS4 W/ x5 z/ g2 o/ W$ N' D1 y
-
/ m# a" Y }8 ^- [1 ] - ;==================================================
; J& n, [% t0 v2 |! G: D - Music_Song_Next_10;下10曲% U0 q* k3 l0 M( I
- JSR Clear_Last_Track_Name, N: l* l) Q9 d
- JSR Disable_Text_Draw
8 G0 O; m! ^; T4 \ - LDX <Music_Item_Cur
9 C8 k. J3 I; I2 u& @- G - JSR Set_Sound_Total! V2 [5 r6 F' a3 K' {* I9 O
- LDA <Music_Cur,X
5 L: W. [6 [+ a3 U$ p# U - CLC
0 ^3 u! ^* ~6 b$ i; X2 T* b: L5 D - ADC #10
6 s+ ?" k( G ^* P, h - CMP Music_Total! S) `0 y! D& Q: [
- BCC Music_Song_Next_10_Set9 j+ d! y1 T e, V6 t: F5 C
- LDA Music_Total
4 Y+ @" U e& ] - Music_Song_Next_10_Set
* L; ]' x+ h; j. H$ o) J - STA <Music_Cur,X+ E" R# |- y1 ?* m% v! k
- JSR Sound_Reset_Proc
$ x8 w# f2 m! H0 c6 b7 k# a" m. P - JSR Music_Show1 a2 Z: C2 ^9 o' j) y7 ]
- Music_Song_Next_10_End8 B: k8 Y! J3 i9 V' E6 T
- RTS
; D2 V* p2 U0 f. B& V" U - # [+ M% [% ?1 E1 B. c$ [$ x
- ;==================================================
! |: j; M" v: E, Q - Music_Song_Last;上一曲' @) [/ K7 q* R# R# y2 i8 c
- JSR Clear_Last_Track_Name- i5 }" A3 y2 E6 D* t1 p
- JSR Disable_Text_Draw
]$ v4 G/ X1 m5 N: d- U5 i1 Q( u - LDX <Music_Item_Cur- v7 | r8 s+ ]" a D, V
- JSR Set_Sound_Total
2 X! k( |+ l$ n0 _" F( V# s - LDA <Music_Cur,X
! j- F8 L% d# @3 G) [% h/ i - BEQ Music_Song_Last_Set
, Z+ d( `4 \. \; I& K - DEC <Music_Cur,X2 g4 T$ v2 g/ a& V
- Music_Song_Last_Set: u& q8 \- V/ S; l
- JSR Sound_Reset_Proc7 N$ f$ T. l9 a* n/ ~
- JSR Music_Show
, g- E. F" M' H) L4 J- H - Music_Song_Last_End
0 O m" f# y# I - RTS
/ f2 \! Z) f7 l6 Y4 E) u' F! } -
, [4 F/ r0 y) e1 i, X, w% w3 ]! | - ;==================================================5 }. e, O3 c, h. c4 U0 E. `# G
- Music_Song_Next;下一曲
' s( z- T- s; ?. `3 W: N - JSR Clear_Last_Track_Name
1 ?7 {% X( q3 F0 Q - JSR Disable_Text_Draw' p# }% y; f- @
- LDX <Music_Item_Cur$ r0 y1 p, ?# \% D& Z( ?7 `" x
- JSR Set_Sound_Total% r u* r, J7 F3 }. x& n' R
- LDA <Music_Cur,X) b, C* C- a3 o: m# x
- CMP Music_Total6 @ a( U& ?* w$ s7 m
- BCS Music_Song_Next_Set
$ @( Z; \; B1 s+ b - INC <Music_Cur,X
# D5 Q% Z9 @7 B o: i - Music_Song_Next_Set0 c: | O8 x+ J2 b n
- JSR Sound_Reset_Proc3 }4 ~# _+ |/ W* c
- JSR Music_Show
3 o% ]& F) W1 |7 `8 n8 m - Music_Song_Next_End
) U4 W1 y8 p4 a% O - RTS
6 e! K9 O& a' _+ F3 J( h7 P1 F -
& j. s# r1 J) p8 d+ y& ~& j - ;==================================================/ W; L& N; j+ B- l+ T9 U
- Change_Select_Item;改变当前选择项
- X# |# H" L3 C$ }1 {% w - ;--------------------------------------------------
% I" M3 F7 {# Z - Change_Select_Stop_Play_Item;停止/播放
, u4 U; h' Z: `# r; R - LDA <Key_Once @+ C6 ] Y/ V% k7 c
- CMP #$10% E; `% w% F* a( H% z
- BNE Change_Select_Last_Item0 h' x' H" d$ Q! {& [
- LDA <Music_Stop_State
. Y2 I& L# C% O3 ` J3 n2 s - BNE Change_Select_Play
& @; l! v9 Q. K - JSR Music_Song_Stop
# G9 `; O0 n$ u) j - LDA <Music_Stop_State
; _% l$ v. o4 s! ]( Z: x - RTS; Y2 a" a0 ^# L/ \
- + F$ H& z' s. V; C! ]7 }
- Change_Select_Play
" z, k7 p' ^0 |0 r+ X* a' F. z# T - JSR Music_Song_Play
( o& k" m# _) i4 S2 s+ E - RTS$ ^3 g/ V/ u4 Y2 s' t3 P; ~
- 9 {% |1 j9 j# a9 T
- ;--------------------------------------------------
) E! b" N6 N" e/ A' D" f - Change_Select_Last_Item;上一个专辑
' m, T5 R1 P1 v2 e) }4 E; b0 q; N - LDA <Text_Disable_Flag! M$ @; { G' [, b; p4 K7 Q6 V
- AND #TEXT_DISABLE_ITEM5 f8 q1 @1 o# o, A; _& S) Z7 E
- BNE Change_Select_Item_End
. h* w8 E2 p3 R$ S4 U% M2 i - LDA <Key_Once5 Y% g' {* S' |; d- O
- CMP #$08
8 }- o; i' X" J3 }& z, i9 D - BNE Change_Select_Next_Item
: k! D% G9 @6 a* N1 `# T" H - JSR Last_Item1 T- r5 @2 {3 Q; k7 ?
- ;--------------------------------------------------( F( X, ]" c, x8 W% l$ E7 A7 k% J
- Change_Select_Next_Item;下一个专辑
/ o' G- s, r8 {4 K5 A$ O: | - LDA <Key_Once3 x; [# J* k) s. \+ G
- CMP #$04" c8 a9 q+ }- Z* _
- BNE Change_Select_Last_10
9 K2 {% l, X0 r4 h - JSR Next_Item& k& P4 S5 F) u: r! j/ W
- LDA <Music_Item_Cur# p+ \# W0 O5 V- k! ?
- JSR Get_Page_Start_Index9 o. @6 ]9 F# C3 F
- ;--------------------------------------------------
2 V1 [5 G3 w" b' u3 g! M- ? - Change_Select_Last_10;前10曲3 i& F. `+ v) @1 c; Y3 ^/ ?* N( A
- LDA <Key_Once
# H* h. K! k( S& J8 s - CMP #$40
3 E" v% {. t9 E+ i% O - BNE Change_Select_Next_10: D; k% |1 l# S& z1 z
- JSR Music_Song_Last_10! }2 F, e9 h q
- ;--------------------------------------------------
+ [: E- z% Q+ G! s0 y. w - Change_Select_Next_10;后10曲
6 a$ [# c9 K8 s0 }& z5 v1 h! A ?1 d - LDA <Key_Once' Y+ d4 D, ~: B5 X- T% }
- CMP #$80
! `, t, F s. T% ~3 C5 t' m - BNE Change_Select_Last
4 t D# N6 s# p0 @! V" n7 n p - JSR Music_Song_Next_10! ]( D) I, u% n* P2 O# |7 k
- ;--------------------------------------------------+ l8 I' ^ }" T. L5 D' ^' k" \
- Change_Select_Last;上一曲' Y: ^& u% W) E& f p p; G
- LDA <Key_Once8 C9 K: Z. e$ M
- CMP #$02
7 C" ~( D0 D" D2 o3 S - BNE Change_Select_Next$ m# L4 a2 ] R& U4 b* e
- JSR Music_Song_Last$ q# Z4 [/ Q% X1 Y$ n% `6 H
- ;--------------------------------------------------
. P% G& b$ M& W5 |# n+ t - Change_Select_Next;下一曲
9 \* {& U% f4 Q9 J; k8 w: ~5 f" J2 P - LDA <Key_Once+ X/ U2 j" ^; J9 e9 Y
- CMP #$01* f: ]/ a* D6 e! t3 r
- BNE Change_Page_Next
# ~1 \; P. K& d1 G3 A - JSR Music_Song_Next9 Z: [" m4 Z0 E, t }- t, Q6 s% n# `
- ;--------------------------------------------------& o# t) x+ h! l E" H
- Change_Page_Next;下一页
! K9 z( T2 \1 y0 c8 u0 ` - LDA <Key_Once
8 y. ~9 t B3 P; X, g6 C3 o7 @1 ^8 h - CMP #$20
* A* \3 J1 Q+ T5 m' w - BNE Change_Select_Item_End
7 `+ M$ H. t* S' s$ v+ w4 Z - JSR Next_Page% z2 T/ B/ J7 v |0 o6 i3 x
- ;--------------------------------------------------8 }% C2 h8 m% p4 |
- Change_Select_Item_End3 d& [+ a! C, {
- RTS9 y# O/ f" l' N3 ^7 C
! X/ v4 h$ J9 e( S) C- ;==================================================
. U% e" _: _6 E/ I - Show_Arrow;显示箭头光标4 v7 l% @5 n3 k* x$ @
- LDA <Music_Item_Cur
3 Z1 h. u ~) b: h6 @& H2 Y# ? - JSR Get_Page_Start_Index
- W1 K6 {: t1 p - LDA #$00% V; D+ G. a: A( d; D' Z) |
- STA PPU_OAM_ADDR
" Y4 q) ?$ [- ~. Z Q - LDA <Music_Item_Cur9 ?& H' {5 B* s, Z
- SEC. i' C0 u" O( [
- SBC <Data_Buf0 j E w3 B6 q" [$ g) Z# j
- ASL A# f3 O4 K* c0 L! U$ B: m2 b
- ASL A+ v4 Y) m; j7 W+ v+ g: u
- ASL A
- r* E7 R* O, G0 n - ASL A& [, X% _8 @; V3 k/ F6 _
- CLC
3 \0 e, G- v9 \5 ~) \( j( j. H - ADC #ARROW_Y_OFFSET
- Q1 ?2 f$ B& r - STA OAM_TEMP_ADDR + $00& V% e' g( H2 `9 u: z! f- K/ O
- ;STA PPU_OAM_DATA+ s& b6 n2 o- p5 X5 ]
- LDA #$1F+ c+ C& a+ W9 e- a, _8 l9 X; m& B; U
- STA OAM_TEMP_ADDR + $01
) A* y& v% V0 {( i* U - ;STA PPU_OAM_DATA
* C% e- b7 o" S& @1 z$ D% h/ s - LDA #$009 \6 _$ X; c2 t* G6 w0 Z
- STA OAM_TEMP_ADDR + $02
; N- ^% a% R+ f3 b# R1 S& p% `% N s - ;STA PPU_OAM_DATA
4 I8 l$ j+ J* g3 h- Y; {" l \ - LDA #ARROW_X_OFFSET- ?* q* y! |7 w3 l; ^; w
- STA OAM_TEMP_ADDR + $03
& s' V5 S* j( X! N - ;STA PPU_OAM_DATA- f( W N5 s3 V6 E
- RTS( A( P8 x- T: E+ X$ f/ W$ x
- ) p1 \8 K; p& B" ^1 o) b, |! } [
- ;--------------------------------------------------+ B8 c! R0 J$ g* k. V" K
- ;命名表数据
, S, P1 W; C3 ]7 X/ i - Palette_Attributes- ~1 N+ e1 ]' e. s& M
- .IF SOUND_BAR_SHOW_ENABLE
! V: ~6 P) i. D( M - .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
6 R `. K3 W* o6 Z2 {8 r" F3 C# f - .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
0 y ?& K3 `7 p7 g5 r% U1 R - .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$753 {5 L1 B! m4 ]4 ]
- .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
1 C" d( D7 Y- N m- u - .ELSE5 I- C6 z2 {" u Z; k4 e. K
- .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
* k& q, U6 r: s6 p - .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$554 M2 i5 s0 J) G' |: p
- .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$752 a# F9 H0 e" c$ O; L6 m- A! E. M
- .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
M; e2 O/ U4 l3 y- e - .ENDIF& p; U! B( ~9 |
- 5 ^0 j9 M% _, _: F2 K' b8 \
- ;--------------------------------------------------
- S. {7 i$ r3 R* o - ;调色板数据
* P' y& ? e+ o: }2 B$ w! x - Palette_Data9 I9 f) v! t4 l' [# q- a- o
- .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F- }3 r! v* q$ v, B# J5 d% u( s
- .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
9 d! J+ K% Q: M& l
/ J, q! r7 q( m3 ]6 C& W* E( P- ;--------------------------------------------------
& h9 L: `# f& y) F1 e. l$ i9 j - Static_Text_Data& n) x: e5 b7 V) n
- .WORD Static_Text_Caption_Data2 h8 ?, j" g# a7 b9 t% f
- .WORD Static_Text_Author_Data
" C0 W) v7 u$ Z r( p% v - .WORD Static_Text_Date_Data
! m8 f$ W, @4 Q" ^" U - Static_Text_Data_End% V3 ^$ P$ j7 A. M T: t E( ?
- . ?% J* O8 h% n8 ^
- ;--------------------------------------------------
1 h# ]: x- H [9 S% h5 o# L- S - Static_Text_Pos
3 f, U6 z& P. Y$ J' k - .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)
/ L% p/ h4 W5 k9 u' M& I' M% z - .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
/ |+ m4 ~# o# @& H \$ I. h - .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
8 L8 _' e8 a* B# k - Static_Text_Pos_End
2 h$ H" T4 s( Q9 `8 `! |9 Z
* `- u, a7 w/ T* I: Q- ;--------------------------------------------------- G( |8 Q: X/ Z% K
- Music_State_Stop* y8 {/ P: f* T8 `7 {& ~
- .IF SOUND_BAR_SHOW_ENABLE
9 P9 p' U' @2 b2 W - .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
# z3 g( I0 M+ i" ?! O9 v - ELSE
+ C* p$ g4 l* m - .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
, Z9 E( M$ {, Z) g% ] - .ENDIF
" f: X. x+ ]) z- d - Music_State_Play I! |" l3 v K1 g) K
- .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00) @2 \( U/ H# G: }1 l- Y% V
; ]' ]; C! f- R1 e; X. ^3 [ O- ;--------------------------------------------------. O# \) W) C# _ _* `
- Sound_Bar_Text_Data;声音类型文本9 Y H7 c5 g6 Y/ J2 {
- .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
/ f: R. Y/ ~2 d! R( A - .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
0 @9 l: g, k% ^8 i3 P2 J( v - .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"+ b \) P& Z) q
- .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"/ O& N# k9 h/ F; [+ w" Z
- .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$000 x7 E3 a5 i/ z9 I2 L. @' ]
-
8 O' B/ V7 F# S! f+ E" x( h0 J - .IF Track_Name_Pos7 y/ a/ d. d# N) n( m& }$ _
-
_# B9 E( q r+ c* F/ k$ u) z9 ?; h/ | - ;--------------------------------------------------
# o, h7 \# S9 N$ w1 n# @ - Track_Name_Addr_00;曲目名地址索引
3 q0 g B1 t8 G% s4 E+ P! f - .WORD Trackr_00_01; @8 A7 U1 O/ c9 B9 T- S8 t0 T
- " u* P% y: h0 P1 B( f$ G
- Trackr_00_01 .DB 15,"RAF WORLD BGM 1": b( `7 t" l6 e& a# ~: p* i% `: k
- Trackr_00_02 .DB 15,"RAF WORLD BGM 2"
4 p9 Y+ a6 o# B, v4 N$ c" @1 Y - 8 h+ i# A8 p; |, ]! c: @" L m
- ;--------------------------------------------------# r- W5 w! e" u) M; |
- Track_Name_Addr_01;曲目名地址索引
4 r4 f2 [; S( w( }" `# Z6 x - .WORD Trackr_01_01% u' O/ s! x/ h6 J. N
- ! M- U9 s! W2 p, f2 Y H
- ;==================================================
, X. j' ~" n. P7 q - Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"
; P7 N8 ~! Y: w+ S/ X - Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"5 i2 U2 d& u: e
' ~& _# b7 T6 E7 e! y0 F- ;==================================================, U& P7 P* ?0 U( e
- Track_Name_Addr_Port ;曲目名地址间接索引3 z, Z8 n1 j) E7 R' S, W; z. ^/ u6 S
- .WORD Track_Name_Addr_00! B' s6 ~ R; W7 L$ A
- .WORD Track_Name_Addr_01" F; u' G3 q J- H
- .WORD Track_Name_Addr_01
0 W& x, g3 a2 _# S! t5 \ - 2 T# P, p, E* o( w; N9 x
- .ENDIF" E: _0 D" B# H& P! d
- " p( S1 G2 g, U+ |. i- Q
- ;--------------------------------------------------
4 Q" V; C2 e/ _# y$ a4 D' ]& r8 z - Static_Text_Caption_Data;静态文本数据2 H! ?& E: G6 \4 t$ s6 _9 [3 u
- .DB 16
) |5 _' R) ~8 B% `. s8 G3 o - .DB "FC MUSIC 12 IN 1"
& b, w/ [9 h: t6 E/ `; w+ L- _ - Static_Text_Author_Data
$ x6 n: W9 ]' J8 E- ~0 u h - .DB 25
5 }* w. n( W7 m3 |: i l - .DB "EXTRACTED BY FLAMECYCLONE"
9 l, ?9 ]: n/ U. V5 |3 F. ] - Static_Text_Date_Data
1 }( d+ ~8 l3 |" A" X) q - .DB 10
5 d$ |1 p9 y4 Y5 ~ A" C a - .DB "2023.07.23"
3 p% d" G8 G, Q B X1 O - ' {" z( g! @) r* A
- ;==================================================( P" v$ y! ]9 P1 a
- Music_Collection_Name ;专辑名间接索引. L2 q7 o2 C6 J3 l7 q8 v
- .DW Music_Collection_Name_00
7 H6 _* ~+ D- ?7 i. d! G/ D - .DW Music_Collection_Name_01+ w" n& s* [0 y% ]6 Z* G
- .DW Music_Collection_Name_02
5 e4 H3 H8 H3 k. c$ F( h& i - .DW Music_Collection_Name_03
0 o; p, Y6 ?6 ?$ D+ r4 { - .DW Music_Collection_Name_04% N6 D) k8 K7 F* \4 \* |$ [, j
- .DW Music_Collection_Name_05/ n. P6 o h% O" C& L& X
- .DW Music_Collection_Name_06. B6 I, y. a2 m; n) ?% I! s
- .DW Music_Collection_Name_07
" G) z& B: r3 j3 r/ }! X - .DW Music_Collection_Name_08; b) z# A8 A% Q$ h
- .DW Music_Collection_Name_093 P/ t+ d2 _* y, X8 j, f% C
- .DW Music_Collection_Name_10
- L, b! ~7 ?" a0 d7 d; S- W - .DW Music_Collection_Name_11: U3 i4 `9 m% a2 |
- , u, z) q6 i7 a% x. t
- ;==================================================
5 @" r% i) y& ]5 }" M - Music_Collection_Name_00 ;专辑名文本数据
5 x- _4 Y! v, e1 Z( P4 e - .DB 11,"1.RAF WORLD"
! @ y* l; Q1 G$ H - Music_Collection_Name_011 F2 r. t0 p$ p P t8 D
- .DB 15,"2.FINAL MISSION"
# Q6 R& E% r3 e3 {% g& S; r - Music_Collection_Name_02
% v# K% ~: M' W' S$ w - .DB 06,"3.KAGE"0 }1 Q$ y. |7 N. \8 d0 a g
- Music_Collection_Name_03
# I) ~$ A) J9 T- w; \) z( v. r - .DB 16,"4.DOUBLE DRAGON"
3 x" C6 {7 o) \9 v1 Y& q0 E* u - Music_Collection_Name_04
' b% H5 O3 F& l: J, e, s - .DB 17,"5.DOUBLE DRAGON 2"% ^* C, v! Z, u" A! _9 M* e3 @! `
- Music_Collection_Name_05
* @- p/ r* V9 Z) m - .DB 17,"6.DOUBLE DRAGON 3"* U1 O' A- {: ?
- Music_Collection_Name_06
( D/ ?$ e- S7 O+ } - .DB 09,"7.ROCKMAN"
* p. l1 z$ [4 C* x& _, H: K - Music_Collection_Name_07
+ Z5 X Q6 S: t" P - .DB 12,"8.ROCKMAN 2"
) |2 N7 A" x& B1 l; g+ ~: x - Music_Collection_Name_08# h' O5 E. A- d
- .DB 12,"9.ROCKMAN 3"
4 g ~# Q( G. N# ~; F' u - Music_Collection_Name_09& B& T; w4 E6 E
- .DB 12,"10.ROCKMAN 4"' g' z6 m' r0 y8 z G! m% ~
- Music_Collection_Name_10; q0 G X# ]. _) ^& q: ~" B
- .DB 12,"11.ROCKMAN 5"
' k9 ^/ h) k9 a' s7 { - Music_Collection_Name_11
. [) T+ G) b; [- D; x - .DB 12,"12.ROCKMAN 6"5 P# f7 y! A! ?/ w* t
- # S( T& p' I" W0 b
- ;==================================================
0 S# _6 Z, h" Q* W/ M - Track_Name_Addr_Flag ;显示曲目名标记8 I$ C2 m I9 V) ~
- .DB 0,0,0,0,0,0,0,0,0,0,0,0$ e" K. A7 G! R' @" F2 i% w6 A: Z
" ?2 G9 O+ C; M4 O9 h; }; W, I- ;==================================================
+ G2 n. q8 {; [2 L1 k - Item_Pos_Data ;光标箭头位置
4 Z8 x. \9 t! ` - .WORD ITEM_SHOW_POS6 C- E, Z+ k# W1 I/ o& o1 i1 X; s
- .WORD ITEM_SHOW_POS + $0040" d" B1 m$ g/ _' B; `4 j8 ~
- .WORD ITEM_SHOW_POS + $00806 H* k/ B: U( Q
- .WORD ITEM_SHOW_POS + $00C0
' ^% F7 Q/ o4 j9 z' f - .WORD ITEM_SHOW_POS + $0100
; b% c: i" i8 Y- X - .WORD ITEM_SHOW_POS + $0140
/ k/ ~3 h3 u! j8 d$ T" s( g
7 f; I7 R! s* x+ R- ;==================================================8 w; Z# u4 z2 {( C4 c, o Q, y1 ]# G
- Sound_Init_Port ;音乐初始化入口地址
2 H+ y) z* r- ~9 y - .DW $BFC8
1 d1 p1 S* d2 O3 Y0 g# `+ n% @5 O1 x - .DW $D7F02 B$ I) V+ e4 P, N" z
- .DW $9FC0
; d \& |7 Y: V$ k, C - .DW $BF70
) v7 a! E5 e- ^ - .DW $8003: S" y' L$ T' K" @( _% V; T
- .DW $BF30
2 o; h8 l6 X) j - .DW $9003
2 x& a" f2 Q. s - .DW $8003/ A; g! K6 `* ^4 }
- .DW $8003
) K8 [( w, X% h3 S9 b7 L - .DW $80039 Z7 Z/ M J# r4 j. C% u8 ]. I1 j
- .DW $8003
0 @# ~6 @* ?( G0 \3 E% J h- e - .DW $8003
! X# I& L+ Z1 |* D, ]! i6 w7 z -
9 f( n' V! t( F; W2 R - ;==================================================' Z5 m$ ]. Z4 F
- Sound_Play_Port ;音乐播放入口地址, m# @% m4 g8 @" i: T
- .DW $8000
2 F# x$ c+ @& @+ L8 G - .DW $8001. h/ P9 S7 h: ^ P: g
- .DW $A000# o" ^' x g( G% X4 y
- .DW $8003+ u, Y; f- O Q8 {9 b8 {
- .DW $8000
6 |9 ?4 e8 x1 {$ v! ~ [ - .DW $8003) F7 S+ G# x9 [( M+ P8 }# S N
- .DW $9000
, y3 i2 J4 [2 B5 W - .DW $8000
3 f' e& i* S" U, Y/ _$ q4 a7 n% N - .DW $8000& s0 p8 @" V: o/ H
- .DW $8000
3 A% R% v' o0 R @/ Z) y; y2 f - .DW $8000( r9 a( N, c5 g
- .DW $8000
: B N( c; p. U
' X+ @( ?" P- [' j- ;==================================================/ [5 y1 g$ | B" m6 \, d* W
- Sound_Reset_Port ;音乐重置入口地址
% w6 [* P! A; z; X6 C3 n - .DW $00003 z' |4 ]# G" l: p1 u
- .DW $0000/ o9 q$ F. D/ ]( y" Z# } d" k
- .DW $0000
. x9 D" e+ S$ K, m - .DW $0000
& L4 t1 z) J Z9 O* S4 C! { - .DW $0000
0 Z$ h0 z/ y6 d& w - .DW $0000
) D* c" R- U" w! s4 @4 E - .DW $0000+ e# }! I( U8 T7 {4 m H& H
- .DW $0000
/ v! L1 R( V5 J' g6 j' b# H( i - .DW $0000- ?5 _2 y, e3 z
- .DW $00003 E& S/ o( {- T: o U
- .DW $0000
8 p" c, W2 Q$ z - .DW $0000
. G& r; n; ]' R) q9 e - 2 ]7 r- M3 B r0 R6 a. o& U' G
- ;==================================================
# B/ ?' C; c/ I( O7 u x - Sound_Total_Port ;曲目总数" a9 N3 _" n4 f; j8 x4 N
- .DB 38
1 D* P3 Q# c3 D+ F! r - .DB 33
( I* f% }3 ]! H9 W9 h- g# J - .DB 49
! |7 [4 d* w3 D- |4 z - .DB 417 j( R! v" Q5 N2 X! m4 n; V+ W5 J
- .DB 83. N5 n* ]' F4 x2 t6 d, @$ n( k, e" A
- .DB 70
* k6 z+ {9 [. F G+ D6 [- u - .DB 50, o0 t$ k5 B% b6 l: f2 i& K- K+ x
- .DB 67' R1 P0 f1 E+ V/ d1 F! E2 N! g# D
- .DB 572 w t2 Q" ]: f' W
- .DB 719 t& E3 ]& I$ s# O8 {8 M5 `" |
- .DB 76
( r5 A% L$ i( n! A7 B2 U - .DB 102* u. \2 `7 Y2 T* M
0 m/ F, a& ^6 P% H- ;==================================================
0 C N, t/ _1 S: }3 a! Y9 e7 T; g) M - Sound_Start_Port ;起始播放曲目
/ b! j. }, t; Y9 |3 f* a/ N - .DB 00
# I6 p9 C$ a! A9 k6 S0 z - .DB 00
2 {5 F4 c+ A1 z& q" r& ?" Y - .DB 00
5 _% c1 [' S' g6 d - .DB 00
2 }7 O8 [0 i5 W: B3 V. N0 o7 t - .DB 00; A* H7 o2 N y' @
- .DB 00; N0 v7 I! z/ p7 y5 e# j- M3 j
- .DB 00, E) n8 B2 Z& ^( ^
- .DB 00
* J" K' w2 }4 C' I* `5 \6 J3 } - .DB 003 w L: m/ M {# K+ x3 C3 j
- .DB 00
7 u& t6 U4 |: {& _" ` - .DB 00; ~9 @6 f: ?4 `5 o8 O
- .DB 00% |- h% }- V' l* c0 k4 \
-
( C& V1 F$ E5 P4 P0 ^ - ;==================================================
! a+ C7 m* ]) H) W" F4 ] - Sound_Bank_8000 ;专辑bank_8000
3 j% a$ Q1 m6 H/ C" {6 t1 u - .DB $108 C! R( V+ B, X. D
- .DB $12
1 f3 L: |5 P; m3 g) M% v. w - .DB $14
5 b9 _3 U; D; b: R( e - .DB $16
]0 ]' d$ O# T5 H - .DB $18
8 U" n+ x; d z& _ - .DB $1A
0 L: e7 m( V6 d1 H0 E -
G |& Y* N; O' v- Y$ S - .DB $00
9 C' _' N6 Z$ i - .DB $02" S0 U0 C# Z( y3 Q" x' i T! c0 b
- .DB $0D
& U& E1 n M" ]+ W& } - .DB $04
) H* w% X1 P. Y$ J - .DB $07
$ }7 Q; r3 `) a9 G g$ ^5 d - .DB $0A; R+ b+ V d/ P
- ) N, k0 X# Z6 H2 p
-
$ D" c7 m [" _7 V% a7 s$ \+ t8 c$ R$ X - ;================================================== [# w4 |2 `$ Q, l+ t. O& T
- Sound_Bank_A000 ;专辑bank_A000$ s# s5 d0 `- K$ U
- .DB $119 _' E- }) M$ v' s Q$ M! Z- k$ }
- .DB $13
8 p' A, r3 c$ N - .DB $15- x) y! m0 j! m# h
- .DB $17
' u! u9 V' P5 F! D) q( i - .DB $19
" X: a& ^( H$ C+ T1 N- ] - .DB $1B7 g$ \' V6 q4 P5 N# G& o
- 9 m- p4 O7 c& ]! q( j
- .DB $01' [# j& {4 d, G C4 y
- .DB $03. x* c3 [/ f* w& I* e) H- N
- .DB $0E
5 D8 h/ {7 z! X2 [' _5 P+ K - .DB $05' ]) n7 H* [# e; Y; ]( a+ P: M
- .DB $08" D9 V) p9 r. [
- .DB $0B& n0 o- e& ` R, a
- - b9 P1 [- z5 s( W4 A* [% L% {
-
, U6 @0 |# n$ V6 R - ;==================================================' J& s/ X1 n3 l& R
- .BANK RESET_BANK & BANK_DATA_MASK
2 Z" T/ E& |& Y! `, M" @ - .ORG RESET_ADDR' v' v6 h- d4 b: ^6 R1 Y- i
- 4 V3 i7 A: r9 c7 m0 R7 `& S) A) W; f
- ;================================================== ^& i( S" v, x7 F3 `+ J
- Switch_Bank_8000;切换bank到8000-9FFF7 u+ }; y/ U2 j, w* V4 E3 b
- PHA
5 a; \: H j. S - LDA #$06
- W) b) r+ t7 B0 F6 ^ - STA MMC3_BANK_CTRL# g: x* V: L$ {9 g0 [( z! l
- PLA: y) c' p4 V" a
- STA MMC3_BANK_DATA
# _ Q; K3 ~* B$ P1 H: u/ f+ y. M - RTS J* u# }' E# V4 }- o5 M/ [: r9 t- C
- `9 r& j! @ c7 X) F
- ;==================================================' f4 a! a4 y8 ~1 y7 U' @3 ^
- Switch_Bank_A000;切换bank到A000-BFFF7 a; s8 w9 V" D) `
- PHA' H5 ?# `+ Q3 N- E( p6 v5 N
- LDA #$07
6 }( L. d, |# b2 N3 c - STA MMC3_BANK_CTRL
* X- [5 t; G, J: d' m, m" `* { - PLA4 P# Z- M( {5 S6 |2 x) ^. W6 Y
- STA MMC3_BANK_DATA
( D& D [# p* V: k2 o( v: e - RTS
8 `% }' K7 L$ m: o4 Q - 4 p/ U. r: \$ {3 u7 y
- ;==================================================
4 a! e3 _6 V7 p- R: m8 s - Switch_Main_Bank;切到主程序bank- m- ]- \* Z; ]1 j
- LDA #PROGRAM_BANK & BANK_DATA_MASK
+ @2 H+ r9 a x$ Q4 E: r0 k, {4 C - JSR Switch_Bank_8000 ;设置$8000地址bank5 R! C$ G) g8 P$ u( F- p/ u9 G
- RTS
2 U+ e. G2 ~- a
( _7 v* ? J% E- ;==================================================
! _% {0 C% s6 Y# ]; G1 s - Sound_Reset;音乐重设(如果有的话)
$ u2 y* X2 `2 D# {6 Z! J - JSR Switch_Music_Bank ;切换到音乐bank4 P; t% ?1 S+ I6 O0 v, F( p
- JSR JSR_Addr_Op ;执行音乐重置2 x& e: \/ J! M4 ^3 t# U+ h I! s
- JSR Switch_Main_Bank ;切回主程序
- |+ H$ e3 P0 i$ }6 h: w0 U# S) [ - RTS
" {/ e, G5 c4 j0 h -
$ @0 ?, R% t5 D- }) n - ;==================================================- h! T2 h. T9 G
- Switch_Music_Bank;切换音乐bank& b# f+ T. A* T; U) q4 B# w
- JSR Init_Sound_Bank ;拿到音乐bank号
! D i& u* O7 {1 u/ p7 n - LDA <Music_Bank_8000
: z& n6 U6 J& h; S - JSR Switch_Bank_8000 ;设置$8000地址bank
4 u) L f& E+ X8 ]4 B5 e! F# p8 y# x3 c - LDA <Music_Bank_A000# l4 p! J" Z# |9 s. t m# J) R) |
- JSR Switch_Bank_A000 ;设置$A000地址bank
- s/ ?9 K3 E5 Q - RTS
0 Y( [4 Y# g! q0 @8 K, {' a
; j0 r5 k; H7 h/ ]+ m" k% C- ;==================================================! P; i: I; w" j1 l! W. f0 A% O
- Sound_Init;音乐初始化
$ O5 h' C8 W4 ~# B: q4 k+ p) B - PHA S C. W! N$ q. r
- JSR Switch_Music_Bank ;切换到音乐bank' _( U% d$ R' b! U; E* ~) |3 e
- PLA
% S9 @: n+ {, S; `7 a$ H: e - JSR JSR_Addr_Op ;执行音乐初始化1 L' f4 E, }3 z. r) ^
- JSR Switch_Main_Bank ;切回主程序 [/ |6 w8 P9 u6 |
- RTS
1 I# D9 {/ r4 F8 ^) k2 ` -
- p. r1 J7 U8 S8 t# m8 z( h) X+ G - ;==================================================( o* x o6 G4 T% e( A, k/ v
- Sound_Play;音乐播放9 D0 t+ h, z; q) C( \& y$ J. D; t
- JSR Switch_Music_Bank ;切换到音乐bank
" p; ^' W7 J& f - JSR JSR_Addr_Op ;执行音乐播放
' D# s* d: I5 |- x - JSR Switch_Main_Bank ;切回主程序4 t6 M% C) _- [, Y2 l$ ~: [$ T @, Q
- RTS# Y6 @' I5 }$ T$ q* s" p
- 0 O8 A9 t' R7 ^8 `- o
- ;==================================================
! a. O, V1 w0 q" z7 C! Y& l! F - MainLoop;死循环* a8 N* R0 m7 X
- JMP MainLoop
% x+ k B7 ?: A/ ^! b! V. L - " Y% n5 f1 _8 h3 J# F/ U
- IRQ_SUBPROCESS_JMP = 0
/ |2 \& }) L3 Y0 G5 \3 U - 4 `, M* P% }. s. o2 K
- .IF IRQ_SUBPROCESS_JMP$ l u9 E) K2 [* M+ }3 e
- ;==================================================
5 z) F3 Z& Z' L0 e- p - IRQ_Process_0;IRQ处理过程0% \+ u( ^. \) V% l8 J' O2 Q8 |
& s0 s8 b9 n5 W; }- ;15条扫描线后触发IRQ& B& y( O. B' K! A" e( i, I3 `
- LDA #15
. s- Y0 K1 Z: b - STA MMC3_IRQ_LATCH1 X# {4 \( @* ]0 L
-
3 l6 k) h- G6 D; Z5 E. y - ;设置屏幕滚动3 e) l3 w* }; j' u1 S: v4 M U
- LDA <Scroll_H
" S" |* P/ z1 L2 @2 y - STA PPU_SCROLL
: s, k2 r' Q& F. l W" \( o7 j - STA PPU_SCROLL
6 c) {. ^1 }2 f; n - ' g* x4 c+ D \6 |8 l
- IRQ_Process_0_End; t" A. l7 ^5 I% D4 J
- INC <IRQ_Process_Index! { g1 i/ A* j, V# `2 _# R [, O
- JMP IrqProgramEnd# Q: O; M/ N8 J( d! U( s
- 1 P# M6 A9 r; w1 W; f
- ;==================================================
# p, W6 z8 d" e$ O - IRQ_Process_1;IRQ处理过程1
4 F J! L& Z- m+ @ -
1 w. s* E5 [8 w/ W, D - LDA #55
$ e0 t, S4 w: |1 B - STA MMC3_IRQ_LATCH2 g2 r$ A" A; T7 F" m0 H
-
" H! O) ~/ G; b& ]' t - ;设置屏幕滚动9 A" R# {+ r) m; D# [3 M1 r
- LDA #$00
/ X2 G' J I$ {1 E6 ? - STA PPU_SCROLL
, _7 L7 r& L9 N1 q- k$ N - STA PPU_SCROLL; X( m( J2 G5 r o9 o! ]3 C1 W% `
-
6 M. l& P$ m% W& v5 y9 v9 b$ F - INC <IRQ_Process_Index; f% C$ \! N+ z- Z5 j+ u3 L
- JMP IrqProgramEnd
+ h l. G* c# m0 M7 j8 c( P -
( v% G, _ {4 L; I* }7 F - ;==================================================& D9 v- d: J0 {8 \( G f9 A6 k
- IRQ_Process_2;IRQ处理过程24 B, S/ g* f+ X( E: v
- 9 \; h# i: @8 I. @
- LDA #15
2 ~% ]$ o6 M9 P d0 x - STA MMC3_IRQ_LATCH
' ^) S. m0 Q) V3 c1 m& X. @+ a -
/ _! @8 @2 V) d9 \1 z( { - ;设置屏幕滚动
) ?% W/ ~) i" Z3 L1 v+ z - LDA #$00- r. F, M1 P7 D! X
- SEC
% N/ U1 b! a0 y' T - SBC <Scroll_H! A9 k7 n, b( B" O! {
- STA PPU_SCROLL7 k. b9 j! U6 V; {1 Q: K; X, q8 F
- STA PPU_SCROLL0 Z# m# D& U+ A- `
-
* F' ~5 H% ?' C# J- N - INC <IRQ_Process_Index
9 P9 ?1 |5 i" x1 d+ Y& m - JMP IrqProgramEnd
; L6 T% j7 e: a! J+ w/ A - 3 ?4 B- o: O+ f" R; Y2 e
- ;==================================================# j/ y" A: b& g7 h: n5 W
- IRQ_Process_3;IRQ处理过程3; N. C, F& U; y4 l9 p& R$ m2 m- ]
- 4 o+ g7 w$ @3 ^+ z2 Y5 ^
- ;设置屏幕滚动1 L; @( C, V' n% c' z
- LDA <Scroll_H0 q" `* l: H C" ~. U; q
- STA PPU_SCROLL
6 h& p$ }0 ]0 f4 T - STA PPU_SCROLL
* N$ x4 E+ U7 ?3 H) X -
; g: z7 T) \5 w/ C. g0 y- k - ;禁用IRQ1 K/ R* N5 D$ A6 ^" e( I" j; r
- STA MMC3_IRQ_DISABLE
; ^; t. w* I+ A5 J - JMP IrqProgramEnd
3 l8 g, r$ a" N1 a1 _+ _ - : [! m; r& J* C. s K" c2 R
- IrqProcessAddr Z3 Q3 o3 H, ~$ Q- x
- .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3: w3 T5 H i ^8 `& x
-
; m9 e, w5 u4 d6 E5 J - .ENDIF
$ C1 r5 B; g- D2 h; f% J; S - ; b6 I3 m* [ i$ g0 | x
- ;==================================================7 ^" `* j9 W+ B) V
- ;IRQ滚动模式常量
& k0 X* b8 Q) f4 x: |% g% o - IRQ_SCROLL_MODE_ZERO = 0 ;不滚动- A4 y: [6 U5 @5 R
- IRQ_SCROLL_MODE_LEFT = 1 ;向左滚动
- ?' W J; G- n+ p - IRQ_SCROLL_MODE_RIGHT = 2 ;向右滚动" H( U/ ]- k' \* }, O; W
- ( `, Y6 _2 L6 H F8 v
- ;IRQ扫描线数据
- \: k2 } J) d5 p1 b' b) u - IRQ_Scanline_Data- `, W" J4 s5 A$ O; }. j
- .DB 8
4 m5 O! x% G- e% L$ H - .DB 54
% T+ s* N; p" I$ U& r" x" e6 H* k' G" ?0 @ - .DB 8
( s$ x+ Q% q p/ q$ j! F, I - .DB 00 ;关闭IRQ
7 t$ s! l8 T4 S$ y5 a* h2 l
/ f3 H! e5 G2 g- ;IRQ滚动控制模式8 w9 ]4 Y+ _) Q/ f' O H
- IRQ_Scanline_Mode/ k9 t# `! d, `: p- [6 k3 F
- .DB IRQ_SCROLL_MODE_ZERO0 Z; K' ]) x) V# R/ [% E
- .DB IRQ_SCROLL_MODE_ZERO
! D- m' \) D% E* R* F - .DB IRQ_SCROLL_MODE_RIGHT" H. m, j( @& V( P% X! Q/ ?' X& z
- .DB IRQ_SCROLL_MODE_LEFT
# b7 g* K$ W' b' L
+ D, C3 o* X8 q" K9 c+ m- ;==================================================
; r% M7 p6 `; f% @7 ]( Y - ;IRQ处理
" [ X9 H5 s( W. r: |# L5 d - IRQ_Process
" I1 J1 c2 l" Z ]. e - LDX <IRQ_Process_Index7 n/ T6 n5 n. F" w4 D
- LDA IRQ_Scanline_Data,X
9 H: M1 [1 \: N9 I4 } - BNE IRQ_Process_Latch
8 T, {/ z- p* R" p$ n. E) f - IRQ_Process_Disable;禁用IRQ
; Z" p# Q4 l3 c* b& V - STA MMC3_IRQ_DISABLE
* x5 R" Z3 F' }/ z' n - STA IRQ_Process_Index
' x# C; [- N6 x: U - BEQ IRQ_Process_Scroll N4 v! |+ t- `4 l
- IRQ_Process_Latch;设置下次 IRQ 触发扫描线
, Z$ P, a8 r4 j9 P - STA MMC3_IRQ_LATCH3 a( ]: v8 I& `+ ^' Z
- INC <IRQ_Process_Index; |9 \) g3 L6 \
- IRQ_Process_Scroll;IRQ滚动控制
& f% y6 E _6 `5 J& U - LDA IRQ_Scanline_Mode,X
: S7 f" C( t" a) ^ - CMP #IRQ_SCROLL_MODE_LEFT
. [3 I( ^8 m# o" I, s) S. h - BEQ IRQ_Process_Scroll_Left7 |% o- l, i7 Q& N+ P% X
- CMP #IRQ_SCROLL_MODE_RIGHT
" B) p# ~* m9 Y9 u9 q1 X - BEQ IRQ_Process_Scroll_Right" k7 L' v+ _+ g9 d
- IRQ_Process_Scroll_Zero;不滚动
8 D# ~+ I r/ ?/ h: e6 l) Q - LDA #$00! m6 R+ {" \; Y# N6 P3 ~4 k
- STA PPU_SCROLL
9 `# J2 L! q; X) P* D% e5 i6 Q - STA PPU_SCROLL1 E3 n! [# _2 v9 ]
- RTS
s8 z0 g8 h7 q - IRQ_Process_Scroll_Left;向左滚动: O# |9 v! ]8 [% U
- LDA <Scroll_H/ [7 g5 u. a) v
- STA PPU_SCROLL
3 A) V9 Q- a7 w% t5 ] - STA PPU_SCROLL% E# W) t( T7 h
- RTS4 r: f: y& r3 {# E2 c
- IRQ_Process_Scroll_Right;向右滚动+ x3 s5 R: N3 Z9 q4 z2 ]' @
- LDA #$00
, T1 H) r; \! o( R0 m - SEC
* h0 |+ n" C5 ]5 j6 }7 g5 ` - SBC <Scroll_H
0 A7 \( [" A8 g% ]: d* o ~2 B - STA PPU_SCROLL
! `; Z7 L- g' C0 h - STA PPU_SCROLL, `* y9 `! X, f- a1 z u
- RTS+ F4 L$ y9 L1 R/ w& n
-
j1 W+ ^: Q F4 D+ z$ A - ;==================================================
3 Y0 P+ n9 R N& i3 o; E1 b$ ~ - NmiProgram;Nmi中断处理5 I4 h* D5 K! W; f) _' v
- PHA
# k0 W- C1 z4 m& J+ p - TXA
8 j8 r8 I2 J( u; E r, ?) [. ^ - PHA- L* P' Y z8 Y- Y/ v8 H y
- TYA' F! r2 X( G: E/ E8 w1 z2 f
- PHA
0 a3 _ L& B2 [- a. K4 W- N' B9 G7 E - 1 X9 Q7 u. z* m
- ;读取清除Vblank标志, 防止重复进入
" T( V) l- y" o - BIT PPU_STATUS
* k1 Y4 S) L$ b0 s# F$ j# g5 W - 6 o* a U5 Q2 Z( x8 V: o! s( y
- ;切换主程序bank$ n: b4 w/ w K; b" v8 [0 `
- JSR Switch_Main_Bank2 [+ I- n4 k" g
- 0 C3 g% f0 O" u) o* \% k
- ;Nmi处理
. z+ Y/ ~8 F; _0 U6 z - JSR NmiProcess# o T9 ]; e W. _% N
- 0 i- s i3 ?, Z5 I5 n$ r
- Nmi_Proc_End
! Z+ s" @: F. q) h( q0 ` - PLA$ o3 P" Z0 @, y
- TAY
8 ]7 P/ \+ i- ~! X1 P - PLA
9 n# S6 S/ g* T/ h* r/ W7 O - TAX
2 ?, I" G& ? a% W - PLA8 b, }6 A# ]2 } |' P2 N4 x
- RTI
$ }: N- f, d7 E
8 v' W# F$ v' [5 e& y- ;==================================================* ~9 r1 T8 m) c2 d/ K: I) W& T
- ResetProgram;重置中断处理% ~+ V9 R7 o! c6 K2 y, o
- SEI1 s' w# [% ^6 U# ]
- CLD C* \2 k' A$ D& t% A* F$ G; }% g
- LDA #$00( S) [) }! \0 C e
- STA PPU_CTRL) X) b! C+ ]: N; ?( \% h
- STA PPU_MASK i! z, ]+ F. D
- 1 O2 \) y. E0 a) u6 Z
- ;切换主程序bank: B4 \9 g. e N6 G
- JSR Switch_Main_Bank7 Q; G& k( v1 l) g2 ]. y
-
; r# i7 [. o' Y - ;程序处理开始
1 I, V1 R( g5 k - JMP ProgramBegin7 [% o" V6 Q1 }# N$ G g
( U- T. k9 `1 T' v: W4 g E- ;==================================================1 _6 k2 b0 d: x. [. B' p4 p$ d
- IrqProgram;Irq中断处理
- s6 Z. S# {0 X: _) U5 G6 `* ` - PHA; ^ E/ \: x# C) H2 t1 B/ ~& x
- TXA7 Y. Z |0 C9 g
- PHA
4 B3 t* L3 R( ^% x) D; O( U - TYA
7 D$ A) E; H0 E) [- A% l - PHA& ~) `7 A* W6 f5 u4 m
9 x4 L: x0 y$ B- s$ m+ T6 Z. @- ;关闭IRQ2 u. o' m2 \. W5 P3 |
- STA MMC3_IRQ_DISABLE
; ^4 V' e0 G: G1 s$ G% i - % P; u% Q a6 {' K; x( S) c
- ;允许下个IRQ触发9 U/ |6 }1 [) Y# Z( }
- STA MMC3_IRQ_ENABLE
4 |. P- d/ C- y& k+ n5 ~9 @ - r+ S3 A' _: U1 w1 T
- .IF IRQ_SUBPROCESS_JMP- X9 }6 E4 W0 p6 ^
-
3 x& p* `% q6 y3 Y2 c# N& [* T - ;执行IRQ过程; f0 D& g6 Q0 u9 f1 B2 k2 p+ R
- LDA <Data_L
3 Y0 X* A0 k# x$ y8 \ - PHA
$ J+ l, z* s: ?" \* k) s - LDA <Data_H; @: n7 v5 o+ I. {* N' |3 w
- PHA
! D( X( a( N, ] - LDA <IRQ_Process_Index& C8 M; M J4 T# f' s
- ASL A* U' P7 d/ v W2 K2 |
- TAY' W. l2 S3 f' y4 u4 |
- LDA IrqProcessAddr,Y
5 r4 B% L" _5 J6 P* P - STA <Data_L
: g* ]3 \5 F, D! r0 W7 [ - INY! `) ?' \7 k! p
- LDA IrqProcessAddr,Y
9 H/ g% H L, \5 w - STA <Data_H1 Z4 g# `- V9 J( i6 l1 S
- JMP [Data_L]! T, g5 s8 j o
-
: D5 Z, L. L W6 G$ ~( D - .ELSE1 e& r7 Q0 e! O' C, c
-
: c. L* x& j: C- s* }5 Z - JSR IRQ_Process
# G5 x) R$ O. b - ) ?0 _% N: X8 U) ~& O
- .ENDIF
* X: _1 n9 Z0 M' x0 h" v - 7 g4 U9 U4 y- K2 E
- IrqProgramEnd) c! y2 k! y& a
- .IF IRQ_SUBPROCESS_JMP; \* x* S2 u/ c$ j6 m
- PLA+ \9 z, c0 U6 A/ @8 Z, L5 z
- STA <Data_H
1 W4 \% ?" c0 p. y9 P, p - PLA, l% T+ n2 S) L* g
- STA <Data_L& g. c/ g; `% D4 Z
- .ENDIF n1 P8 H' [9 R" b5 [3 [, R5 ?
- PLA
) X- Z& w3 a! P5 a# o - TAY' w8 ]7 `; {9 q
- PLA% c, m" f8 n k: Q
- TAX
( C/ e- C% X9 Z3 G! Y - PLA
) m- ]# N% s0 {3 F - RTI
1 J7 m' j6 X, F3 E0 K - 8 D2 Q0 `! Q/ @8 L1 P/ [$ s
- .ORG $FFFA, W5 Q: L# C2 l7 E
- .WORD NmiProgram* {- f/ a( C8 K! i1 k7 h
- .WORD ResetProgram
, B3 P) m+ z4 X& o5 P& u - .WORD IrqProgram( u6 Y, x# G! s, N
- . q4 q, B! y- _ ]- _
- .BANK RESET_BANK & BANK_DATA_MASK* y; J# u1 i9 C+ p; A; D& d
- .IF SOUND_BAR_SHOW_ENABLE5 u% [$ M5 m3 ~9 ^3 G
-
/ y1 ?) T" ]( T8 B: ` - .ORG $FE00/ x$ D7 d! H T$ [ _
- PHA
( o5 V9 h+ R9 ?$ S9 [ - STY $07BA
( E* y+ V6 F& x" l - LDA #$8D p/ w7 A' y, F) @
- STA $07BC
8 e- f% H9 H" _ g, \ - TYA. e% s- [ I7 b" G
- CLC
# X# C2 w& ]3 x f9 ?. w4 y, O - ADC #LOW(Sound_Bar)8 A: h% e: o' J! |( z, H5 ^
- STA $07BD
% K. c: v. `. N - LDA #HIGH(Sound_Bar)) F4 Y$ U( b* Z
- STA $07BE
) X+ `1 P/ Q0 l7 w$ Z% t/ f1 j - LDA #$60
7 P& t6 [ Y. p$ \ - STA $07BF
: u$ r8 U# _+ T - PLA' a" Y6 b! j& U& B
- RTS
& M8 ^) w1 g$ N2 O2 @1 K - + [6 I9 d3 U4 H4 z. k
- .ORG $FE20& ]( U. a/ V4 h% h P
- STA $07BA
E, _& ^' x8 a( M - CLC7 E' J* v1 q: Z4 t$ q3 p
- ADC #LOW(Sound_Bar)' t4 _* B; D% a2 k
- STA $07BD
3 z6 ^* r# B+ Y N J: H7 h - LDA #$8D
7 [. ]0 f2 ?5 M: Y z* d - STA $07BC9 ^+ L; W x4 I+ I
- LDA #HIGH(Sound_Bar)! c' t: W1 q: p2 G
- STA $07BE
3 I! F8 @( ^4 w" c- b- c) j4 s - LDA #$60
: b' A. }/ s6 r8 k - STA $07BF, w' y7 ~0 H R- b
- RTS
+ T/ w5 v2 B) u* G/ _2 ^ - 0 ]4 {; [. C; c3 n; E
- .ORG $FE40
8 o8 r. d/ a' ?+ V- g L - PHA
( i! z# q* _9 B" N) A8 C( Q - STY $07F1
8 H/ z# j4 T( U - LDA #$8D" W! A& ?1 z( j2 s' E
- STA $07F3+ A2 O5 m% h" J+ t% k7 d- Y
- TYA5 z! o* Z9 i" R0 n# F2 r; A
- CLC
8 R" O0 N- O7 p - ADC #LOW(Sound_Bar)
: \1 d! w7 I& }0 X& D - STA $07F4
1 k1 G2 s! R+ z+ L" k" l* h - LDA #HIGH(Sound_Bar)
: o c! @( i4 V) _) [' L7 ? - STA $07F5" V8 ]( x/ L- P7 J+ n: ?
- LDA #$60
3 e% P5 L3 f& ~0 r' } - STA $07F68 r. f4 V0 U y' o! |
- PLA1 f0 i$ Z& y. o! q
- RTS e" B2 }0 B4 s9 \; V9 D
- ' [/ @, H9 \1 b0 ]3 E8 F- i
- .ORG $FE60
9 J! D3 x+ W% X' c7 _4 k - STA $07F1; Y5 Z; u5 d7 N3 ~$ M
- CLC( X. `% q3 K9 F+ @
- ADC #LOW(Sound_Bar)
: d2 t# d1 X( e) \1 [( t' ^& S - STA $07F4
0 Z B- u: y, |+ ` - LDA #$8D
* z4 ^) P0 N5 m! v* y& T - STA $07F3 J/ e) [- o7 j5 k. ~% q
- LDA #HIGH(Sound_Bar)
& [7 g$ h- x8 \3 q3 L# z# u- l - STA $07F5" I* `- j" A4 S- `" q4 P
- LDA #$60
# D4 g( q0 `; p. H4 ^ - STA $07F6
D. O0 c V2 o! r - RTS6 H% M* D4 K( s! C0 E6 N
-
* S7 H9 x( T+ V9 o4 T4 v - .ORG $FF400 R8 x o+ W# P3 a) f& M _
- STA $4000
3 B; Q, A% D4 Y2 L0 J/ U+ | - STA Sound_Bar + $00
& {4 U% U- ]& q& d( p" H/ ? - RTS
9 v2 u7 C7 U( d2 Z# P - 4 \* _" p7 V6 o* M* o4 C7 ^) }0 l
- .ORG $FF480 J7 t3 H, Y: p7 S
- STA $4004* f7 w, _0 Y% f; H0 a
- STA Sound_Bar + $04
- h: q5 V" o' f6 n - RTS5 G' A+ x5 d, A7 g* h' {
# K* w+ Q5 N! f6 g$ V2 I$ v( e- .ORG $FF50) a& v3 f n" P( A$ G
- STA $4008' J4 ]' F4 `4 [, F% K- H$ g0 h- {+ f
- STA Sound_Bar + $08
% k, {6 Q" V5 M8 {( x9 r4 a/ `- f - RTS4 a: y1 r4 ?- K6 `7 W% I. S9 h
- 3 u5 R" e N) g
- .ORG $FF58; p% E- q/ C. O' m$ M# o4 S; Q
- STA $400C
1 ~& O/ M7 _# D" p( X1 v- M - STA Sound_Bar + $0C0 S* G, t$ G* Y; {
- RTS
5 L, O1 r* O2 o( f. F -
4 z2 u# |, }4 o; _- M- M! B - .ORG $FF60
$ V; y2 T0 ^8 Q1 @: m - STX $4000' g2 d# E# v- W5 ]
- STX Sound_Bar + $009 @" @5 v) l3 @9 C
- RTS6 _8 s/ v9 Y( G* {, S
- 5 E( @ u7 G4 W- H! S4 ?, M1 g
- .ORG $FF68! S8 o, E! m' ]- X9 c( q# F
- STX $4004( W& [* z u7 L0 Y
- STX Sound_Bar + $04
1 e5 V, z4 l% F/ r# b# w) P, A - RTS
! `- }1 g6 c3 s g. \) Q. a8 y - 3 t! {: X8 Z6 x! H% ]" h6 W
- .ORG $FF70" ^' [% d$ S! f$ [9 a
- STX $4008' i& N2 g* x: F3 U
- STX Sound_Bar + $08
. M* B* s0 @" C4 W5 r: \) d! J" J/ \ - RTS6 c. J- t8 u8 a" X3 C/ Y; v+ ^
- * t2 y- t; s+ }- s9 H
- .ORG $FF78& [0 i$ \- f" @- l& O! F8 l5 Q
- STX $400C- M/ ]" C1 {7 E. v) C7 [& o& v$ _
- STX Sound_Bar + $0C+ Y) f1 ~! x! i; |2 ]! [8 Q. j
- RTS
6 r& ^' H8 R5 J1 t -
5 I% j0 y! e9 e0 I {0 M6 E, J - .ORG $FF804 M! r" n6 h7 M2 `: b, }
- STY $4000) n) A3 u' [3 d4 S! ]* F/ p' h- t
- STY Sound_Bar + $00
& ?/ _. f' T+ R! b1 r& ?8 H - RTS
- g# W7 y4 [- D6 R% y
! l+ w0 T+ @5 ` x7 ~# W- .ORG $FF883 @' J0 P/ K$ T; d3 f
- STY $4004# l* H O% E i6 }: x. E) C% w3 @
- STY Sound_Bar + $04/ b5 r$ R, @, O. d2 j/ o( N# }' j! g
- RTS
( s! G* n) ~# v - 1 e1 U# E* K6 u/ |! ]
- .ORG $FF904 n& r$ w @4 ~6 e' P# h. V
- STY $40089 D2 `8 Q8 P: h* c
- STY Sound_Bar + $089 `0 g; Z+ ?+ v/ \* I; S/ F
- RTS
1 C2 m- X& Y( _ O3 W# y0 T1 B7 f
. q- b6 p7 m: q6 {# f) N- .ORG $FF98" S& M# _7 ]. m- |/ f
- STY $400C& q4 t$ G5 u1 ?& d4 G( x
- STY Sound_Bar + $0C. S4 l% y# H- y1 k6 N" N
- RTS+ f. N& r k( s
- # G& b# m, K4 h9 M& @
- .ORG $FFA0: _2 P2 a1 B" K$ j3 P8 R" O
- STA $4000,X) n0 r. B2 O. M+ W7 c
- STA Sound_Bar + $00,X
4 b3 y9 d) g e" S" e" z - RTS; a$ s( @% d4 C8 ? d2 B, p% P! X) |
( d& q. _) ^0 K# i; ^& t- .ORG $FFA8
S1 K% t7 r% h+ u P - STA $4000,Y
" `. [- Y9 p% Y7 a- X% k% S. z# f9 { - STA Sound_Bar + $00,Y
; \! W4 _# _+ ^: x" c+ N: k - RTS3 W, }5 g7 o* O, ^' l+ H
- " y1 b* Y. }7 V) F( [5 A
- .ORG $FFB0) Z% N% P4 a \+ c r
- STA $4004,X
& F/ s- I; C& H$ ^+ s: O& d - STA Sound_Bar + $04,X
# A2 X3 B' M7 f' }- D - RTS5 p: L1 @( z# V1 h9 |
- * ?7 C& A+ R; Y
- .ORG $FFB8, u, u' y7 B4 |. n
- STA $4004,Y
; q, Y2 `" y7 } - STA Sound_Bar + $04,Y
9 a8 M8 u7 u- T! B+ y% r - RTS
1 G+ v0 t, R" @: i( q - - C7 d! { A8 u& {9 O: u% O
- .ORG $FFC0; M1 D7 Z; z& v0 Y) B
- STA $4008,X
1 _/ P1 M" Y6 i5 i R5 y - STA Sound_Bar + $08,X
8 }! Y1 M, Z* G! ^ - RTS
0 p0 K1 F2 E$ i+ _5 V2 K
. h5 A% q, X1 Y- .ORG $FFC8
7 C! w; g' Z# q - STA $4008,Y( J. O: j$ K4 q0 h: k3 G
- STA Sound_Bar + $08,Y
9 F4 C& G9 ~- a) e* W - RTS, H. X* [" h1 N% G! p
/ @7 q3 G, ^, D) w- q- .ORG $FFD0
! h+ X% j6 I* `/ B$ v/ ` - STA $400C,X0 z6 ~; {" ^( e; V! M
- STA Sound_Bar + $0C,X
3 q: ]' y4 p; [, F& O - RTS8 c5 ]: u& L, @' D, X/ p
9 q; p( ]" U/ P- p- T9 `- .ORG $FFD80 Z: \8 T. v% z3 ]! F
- STA $400C,Y& q+ {( `7 j& l4 i" \8 C ?9 d
- STA Sound_Bar + $0C,Y* t- U G% _% j6 k2 P
- RTS
3 {+ T' g+ u/ M5 I; l- f - 7 |8 w1 q6 N, Z1 o- D" j3 }
- .ENDIF
2 K$ Y9 O U$ s6 z& W
复制代码 5 I2 _! [# P1 F0 r- r
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|