EMU618社区

 找回密码
 立即注册
搜索
查看: 245|回复: 1

[原创] [FC][音乐12 IN 1][nes + 源码]

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 + p( ]* Y; ~3 U% R' o8 F' v  A

& i+ _" C- j/ ?) G[FC][音乐12 IN 1]
, ^3 l) C( R& v6 `0 Y& u- ~) f" R时间: 2023.07.23) _" M3 j( r) Q. m
作者: FlameCyclone3 R5 E( p  o$ H& E. T& x% \
: Y6 N. v$ z+ ?+ v" `# o5 F
收录音乐内容:
% o  x8 r" z' Q9 F0 S9 k1.Raf世界
% a# K/ }% g- o" K0 _' N& d; f2.最终任务
; B6 Z' n+ {+ l8 C' [3.赤影战士1 R  J! o0 I% o
4.双截龙9 F: p( k6 i# ~: C6 p) M1 P
5.双截龙2
+ k/ r8 m3 H& i/ \6.双截龙34 W5 b: W+ G4 O) O$ O
7.洛克人
5 A* {$ v/ ]% n$ J  T1 z, s: d8.洛克人2
; f: t" }- S8 J2 e- p6 V0 O9.洛克人3, u7 _2 E6 R% f, J) S
10.洛克人4
3 T+ M# P( C& X) v* r: ]2 r' o, S8 s$ r11.洛克人5
. a% C, i" e5 ]0 Q/ Z- q12.洛克人6
9 a* m5 I7 p) s9 @. Z9 ^8 P% a6 {& R# U6 B$ I, h+ t% J! ?
操作:2 p. \' ~6 a9 O  h6 v! f
上键:         上一个专辑# o) R) r  f& O4 z  d
下键:         下一个专辑! U* L( P5 R% F0 P
左键:         上一曲1 ?7 \' S; {' i) U* x
右键:         下一曲- V5 b& l% r+ k7 E& U' n& ~
B/A键:        前10曲/后10曲' u+ Q* H; c/ Q# M
选择键:       下一页2 D7 r$ v) \$ ^3 L; k6 }9 i
开始键:       停止/播放
7 x* u$ |7 `5 `9 @
1 Y. O" q; b! N4 z. ~$ ]http://flamecyclone.ysepan.com/. H0 T3 ?. e/ g4 v+ e

  @8 n$ O7 }+ o" C; u1 D  o( z. s0 s  d) s5 L" W8 |# a6 _
2 `9 x/ y$ k( Q, x5 ?: f1 n" f

# D3 q$ j& r  N- }6 J- B# T
  1. ;[FC音乐][播放器模板]1 s3 Q, Y4 O0 f) @
  2. ;FlameCyclone 202307104 A0 A: J0 J+ ~: |& Q

  3. / q% ?5 g, y" d+ P# K4 z1 `4 T
  4. ;文件头
    4 x, y# E0 G3 Q1 e9 ~; m
  5. ;======================================================================
    " G" P; R; y% V3 F* m3 m
  6. .INESPRG 16                                             ;16KB PRG 数量% ?8 a" I; L" q+ B; d! O
  7. .INESCHR 1                                               ;8KB CHR 数量& ?" O5 h. ~2 O% e, t) D
  8. .INESMAP 4                                                   ;mapper 44 o; V) L" \# h9 A# I
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    % d4 u7 E( R5 S: ]
  10. : G+ c$ Q- L, b; x
  11. ;==================================================+ d4 j4 J* s5 b, B
  12. SOUND_BAR_SHOW_ENABLE       = 1' `  j7 j+ K! d% m+ Z
  13. ;==================================================
    3 W- h. @3 O* ^/ p9 N" X2 ?
  14. BANK_DATA_MASK              = $1F
    8 `9 c5 |( H9 v$ n
  15. CHR_RAM_ENABLE              = 0( k* u7 {  x/ Q  `# K
  16. IRQ_SCANLINE                = 136! y$ E. C+ D" o& b  h
  17. ;==================================================' j: q+ M8 D0 O8 \$ r" r! h
  18. SOUND_DATA_BANK_00          = $00* y& ~, z) U2 n! v; F, ^$ {
  19. SOUND_DATA_BANK_01          = $01
    8 n8 Q0 Y% E! A7 g- B3 k
  20. SOUND_DATA_BANK_02          = $02! u6 @' p& D& z( q7 U
  21. SOUND_DATA_BANK_03          = $03# T, M( E. q  P5 F- l( ?0 i) f7 z" f
  22. SOUND_DATA_BANK_04          = $04
    : N; N. f: w) w; b4 b0 x& P
  23. SOUND_DATA_BANK_05          = $056 q) U# c: Q. B5 X# f. H- o  S8 v! }% l
  24. SOUND_DATA_BANK_06          = $06, V' z0 _+ z# I0 e
  25. SOUND_DATA_BANK_07          = $07
    . B( u( h  H1 D
  26. SOUND_DATA_BANK_08          = $08
    * K% j. ?$ W4 Q; e7 z
  27. SOUND_DATA_BANK_09          = $09
    6 X5 Y8 ~  u% P7 L: n  J) a
  28. SOUND_DATA_BANK_0A          = $0A
    : _9 R9 y9 }# ]7 }
  29. SOUND_DATA_BANK_0B          = $0B
    5 ~1 x# I% y$ |
  30. SOUND_DATA_BANK_0C          = $0C
    8 f6 g  I7 f6 H' G2 Z3 N9 U
  31. SOUND_DATA_BANK_0D          = $0D) G; }$ k$ ]3 S2 M/ p# K
  32. SOUND_DATA_BANK_0E          = $0E
    9 r/ ~* y* D' R' P1 ]3 W4 P8 c
  33. SOUND_DATA_BANK_0F          = $0F% X' ~, {5 r' n+ R
  34. , ~) v' F4 e+ w8 }( w+ d
  35. SOUND_DATA_BANK_10          = $10
    2 e' N3 U4 a8 J# L1 {
  36. SOUND_DATA_BANK_11          = $11# ?+ Q, S/ v( b
  37. SOUND_DATA_BANK_12          = $12
    % I2 L; [; a: A1 U7 q% D
  38. SOUND_DATA_BANK_13          = $13
    $ q* C3 i0 E! x
  39. SOUND_DATA_BANK_14          = $14
    : E/ }9 D+ J. \+ h( b- C- Z) b8 F
  40. SOUND_DATA_BANK_15          = $15; v7 e% ?+ Y9 _  Q5 A# x7 t
  41. SOUND_DATA_BANK_16          = $16
    " W0 C  Y% `) T: o: ^* d' h9 \, z/ j4 Z
  42. SOUND_DATA_BANK_17          = $17  ^- Q* q% }' T# ?( Y  C' f3 A* o0 C
  43. SOUND_DATA_BANK_18          = $18: _  K* J/ U+ l8 R' Z
  44. SOUND_DATA_BANK_19          = $195 }! M  C: I* I- r0 \, X0 v9 v
  45. SOUND_DATA_BANK_1A          = $1A
    " W0 v9 u( @/ d# `. J
  46. SOUND_DATA_BANK_1B          = $1B: b0 ?3 J' n" v
  47. SOUND_DATA_BANK_1C          = $1C
    ) u, D) m4 l+ r$ a4 {6 P' Z% _( S% @/ F
  48. SOUND_DATA_BANK_1D          = $1D) C, m. W3 N3 C

  49. : O3 F  F6 Y0 @
  50. SOUND_DATA_BANK_C000        = $1E
    + W4 Y! N8 v1 i% w8 E  F( L
  51. SOUND_DATA_BANK_E000        = $1F
    " a' t2 V8 P7 e: e( n8 S! ^
  52. ;-------------------------------------------------
    0 f$ W9 a3 Z0 o! ?3 [
  53. CHR_DATA_BANK               = $20
    1 E8 w! p9 r* P7 L8 {
  54. CHR_DATA_ADDR               = $A000. a- H2 p; C7 Y; X+ t5 x
  55. ;-------------------------------------------------/ J2 [$ b+ g+ \. y0 ]6 N" L+ R
  56. PROGRAM_BANK                = $00
    " X, t4 Z- J' o. k8 A3 X- x
  57. PROGRAM_ADDR                = $80007 f/ M( Y  i5 T* b# y& c7 B) i$ ]
  58. ;-------------------------------------------------
    / {# ], _% n/ E) A( D% q
  59. RESET_BANK                  = $1F
    . S* N8 a) |+ X  c! S
  60. RESET_ADDR                  = $FD00
    6 ~% u8 I0 e# ~0 X0 O' [! D0 Z' Z
  61. - ^6 D9 G0 P8 ?& o. r+ t7 n; _
  62. ;==================================================6 |$ r4 K; `2 i' _! w2 M
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数! |) c4 s, F" P9 w8 e
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引
    3 H' V; I: Z! _! r6 w
  65. PAGE_SIZE           = 5                     ;每页节目数
    - ?' E$ y2 C6 y2 i" ~
  66.   W2 {0 z8 C5 E# f& Y0 N& L
  67. ;==================================================0 Q1 B* t# V; m9 z
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    3 s5 K$ W& a: {% L; N; H6 |: [8 J/ d& z
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数
    ( ], A+ w! i8 h' M3 ~% M1 {/ ~, J
  70. .ELSE
    ' r3 N& j# \2 N$ G. w0 O9 J
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数( F% {; S" X  M3 H
  72. .ENDIF" s5 H6 x& ^1 d: D$ R
  73. 5 a; A" D6 R$ o/ z# U
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引- F$ e! E0 c8 q3 D# Z
  75. 8 ]7 |2 R. y; k! T- L% c; R
  76. ;==================================================
    2 z- a4 |" l+ D
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置5 [( n- X& z  v5 T' g5 ]" g4 C$ j
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2  `" j! T6 u; A
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;! t$ }* a4 L' A3 v! Y8 T1 q" J
  80. ;==================================================
    % d5 N2 c5 q4 }
  81. Caption_Text_Pos    = $204D ;标题文本位置
    ( f9 I4 N, d* b; y8 R; X  U* ]- \
  82. Author_Text_Pos     = $2324 ;作者文本位置
    7 X# E, @/ W1 Q. p' B8 l7 e* v, m
  83. Date_Text_Pos       = $236B ;日期文本位置
    - G& @) j9 |% F- T' n4 z
  84. ;------------------------------9 v2 X. Z8 Z  w& o$ y: t. S- A
  85. ;------------------------------" X4 [. j1 F) y9 i
  86. .IF SOUND_BAR_SHOW_ENABLE) v/ ^9 |* y9 d
  87. ' X" V5 @" M; n1 r2 }
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    - P) H6 t5 R. q9 v6 g
  89. Play_Time_Pos       = $22B3 ;播放时间位置
    0 t( q" Y' r- j0 V8 _/ m0 O
  90. Play_State_Pos      = $22F3 ;播放状态位置
    . X4 U, {5 }# Q2 N: T

  91. 4 ^1 k& z& @0 B2 G1 w% ~
  92. .ELSE
    / Z1 Z( E$ e9 G  H4 k0 s! ^" v' \4 u
  93. , ]5 i. H2 `  [& Z0 {. ^/ z1 o
  94. Play_Index_Pos      = $226C ;当前曲目位置
    # u5 o1 V2 S$ n9 A& T7 n. ^4 q3 t/ r
  95. Play_Time_Pos       = $22AC ;播放时间位置, O9 ~0 v9 g# ^4 Z/ Y3 r+ a
  96. Play_State_Pos      = $22EC ;播放状态位置
    0 K4 b8 g( B  b/ {& J( g' H

  97. 0 u+ t4 z. a) B
  98. .ENDIF- ~7 E" C# H& _1 |8 s; c
  99. ;------------------------------
    . R' w$ X) j! q0 y7 {! a& e
  100. Track_Name_Pos      = $222B ;曲目文本位置  Q" f# p$ b! \+ g2 w
  101. ;Track_Name_Pos      = $00 ;曲目文本位置
    - d+ B; ~0 A- d- \! d3 f% d+ |8 a0 N
  102. Sound_Track_Pos     = $2265 ;声道文本位置3 \0 a$ J  _" L0 N) i
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    ! A) |) H4 w. l: x: ?. ^
  104. ;==================================================
    + z' _' z! T+ j
  105. Scroll_X = $00
    & g0 A0 ?$ ~- E, g0 ?) u0 {
  106. Scroll_Y = $00
    ! v; t6 q  R% |$ _5 n. F5 R
  107. ;==================================================
    ( L; p) m. r1 o& L+ l5 J
  108. Sound_Ram_Addr_1       = $01003 b; J2 E- j$ ]# u# i3 s0 ?
  109. Sound_Ram_Addr_1_Size  = $805 i" x' G4 K- E
  110. Sound_Ram_Addr_2       = $00900 _1 T4 J' w9 y, Q, H# f) S+ h  ^
  111. Sound_Ram_Addr_2_Size  = $70" A3 b3 l7 g1 Y6 i0 g0 V: }
  112. Sound_Ram_Addr_3       = $0700
      V' g& t3 |5 j
  113. Sound_Ram_Addr_3_Size  = $00
    # j/ O6 C& V0 U' O( J0 G7 X
  114. Sound_Ram_Addr_4       = $0400) I- T, V# h3 B, K) U
  115. Sound_Ram_Addr_4_Size  = $00" M% i6 y9 E6 \5 {2 N' h6 M1 n$ M6 o
  116. Sound_Ram_Addr_5       = $05005 _6 V9 G. @5 l4 [
  117. Sound_Ram_Addr_5_Size  = $40$ P' ~( F/ M5 O9 \
  118. 3 _1 B; d' y5 r8 K  A; ~# U
  119. OAM_TEMP_ADDR   = $0300
    , G2 H4 R$ c- o  p- w. e
  120.   m/ W/ K' x6 H- n) F) D
  121. ;==================================================
    & O# G8 ^+ r; Y
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    . w+ X% G) Q' P! A/ ]" K
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    $ G! g% p, u7 T& k
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位6 S( E0 V- G6 o7 n- p8 m/ H. B; K
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
      @  |& ?( N# |) e
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1/ m9 j! h' V" w% {) `
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 ' L& V& d5 s. d$ e* N' \& N  p
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    , @2 q  s& e  k/ u% t: k2 m6 F9 @. m
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 9 J" l3 H; B. E" L- d/ T, c
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存* K& ^0 q. l3 Y) W5 ~0 G
  131. APU_STATUS              =   $4015   ;声音通道切换& M1 L2 u8 X0 {4 B& z' |
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通! E7 }/ B4 j3 k( ?9 e+ _% X
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通
      z( N( x8 C9 e* T# q) l+ n
  134. ;==================================================
    , C; w. K0 Z1 j$ C0 }
  135. MMC3_BANK_CTRL          =   $8000
    5 B7 t  c: `  O$ v8 p7 i
  136. MMC3_BANK_DATA          =   $8001, F. Y- x& N; z9 l
  137. MMC3_MIRRORING          =   $A000
    ; m4 V% Q& ]0 n% E
  138. MMC3_PRG_RAM_PROTECT    =   $A0012 J# y5 j  @) M, V3 E* Q
  139. MMC3_IRQ_LATCH          =   $C000* @2 P( P" J- H4 I
  140. MMC3_IRQ_RELOAD         =   $C001
    1 D# N1 X) Y; J3 C2 @+ G* `
  141. MMC3_IRQ_DISABLE        =   $E000+ y6 _: l  l$ b9 W- t
  142. MMC3_IRQ_ENABLE         =   $E0017 [9 `' W1 V6 ~: p+ S* C' z$ s0 w
  143. 1 w; {1 z3 z1 k' {6 ~
  144. ;==================================================" w) ]0 x% \+ w. q
  145. PPU_Addr        = $02004 D% g) [* U5 Z3 H+ S' P
  146. Palette_Addr    = $02C0
    ) Z# t9 @$ C7 O4 l7 q
  147. Sound_Bar       = PPU_Addr+$E0+ ^1 g2 l+ Z5 F6 h  \0 e7 ]
  148. ;==================================================) H6 e  F& Z/ M1 e" O
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D- P0 ?7 g* Z5 Z( A: s
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11: l, D+ C3 g/ t; Z
  151. PALETTE_UPDATE_MAX      = $2C* a6 j" N& ~* f6 _$ n3 M7 G0 ?; z
  152. PALETTE_UPDATE_MIN      = $214 S; S* N7 i1 }; G
  153. PALETTE_UPDATE_INTERVAL = 60; h6 p* b. z1 e% Y5 k
  154. ;==================================================& K% \; q6 M3 h* a% \, z, X
  155. Sound_Bar_Cnt       = PPU_Addr+$F0! P& h/ v! m9 W/ y
  156. PPU_Cur             = Sound_Bar_Cnt+$027 a1 v" c+ d4 Z
  157. PPU_Addr_H          = PPU_Cur+$03
    1 _8 T4 v, x4 g
  158. PPU_Addr_L          = PPU_Addr_H+$04
    : l+ X. g+ N$ K4 f9 v
  159. Screen_Ctrl         = PPU_Addr_L+$01$ o4 \# m! O$ |! k# w" o) A
  160. Screen_State        = Screen_Ctrl+$01
    7 w+ a( Y8 O( X7 a( K
  161. ;==================================================
    ; n. U0 k# [% K' X( D7 |2 X9 m& B
  162. Use_Ram_Begin       = $50* G! P3 x, u' h, T5 i0 h
  163. ;==================================================7 [2 A8 i( m8 d
  164. JSR_Addr_Op         = Use_Ram_Begin$ g* A) m( S. y) w
  165. JSR_Addr_L          = JSR_Addr_Op + $01
      ~$ Y, t% ~3 _* o( y
  166. JSR_Addr_H          = JSR_Addr_L + $01
    ; k- N/ w' r5 X
  167. JSR_Addr_Rts        = JSR_Addr_H + $01, |) C% J* X/ l/ ?0 w
  168. Data_L              = JSR_Addr_Rts + $01' W  k5 }* C2 Z# y7 P3 B
  169. Data_H              = Data_L + $01/ j4 o* m0 t' R4 D2 U
  170. Data_Cnt            = Data_H + $01) J/ `- s  x/ b) L
  171. Data_Buf            = Data_Cnt + $01
    " B- {) X+ b" P4 }5 D# F
  172. Nmi_Time_Count      = Data_Buf + $011 R: j# l: E1 [% t
  173. Time_Wait_Cnt       = Nmi_Time_Count + $019 @% [2 \, d; U6 ~: [9 G. u! z
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01. W% q& \) G& n+ w* j
  175. ' v/ P. J% J& H9 t0 g$ @) X  p% e2 }
  176. ;调色板刷新标志
    * F) L) {& t  Z  @1 E
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01& v  z+ X9 A- W  z7 {
  178. ; E8 N/ d. g: E) X$ q! C! V
  179. ;当前帧文本写入禁用标志
    2 R2 k  x4 Q+ n& v% z" f6 R
  180. Text_Disable_Flag   = Palette_Update_Flag + $01% t3 q. |  `) U& z4 W5 y
  181. " E: e+ q" J4 O3 j' J: _
  182. ;==================================================9 b' `1 p$ x3 ~& j( n! W7 a
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动4 M* I8 h4 }# L: T: s
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条
    ) c& \0 |5 L# @; e$ t9 q* j2 s
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间& w- n! |. K) g4 R$ c2 I- m
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    3 d) @4 L2 V: K1 M" A
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间2 b+ O1 M3 b+ @
  188. ;==================================================
    . v; {( K6 B* x2 \, a9 L
  189. Key_Keep            = Text_Disable_Flag + 17 j* q% I  ~4 R# ^
  190. Key_Once            = Key_Keep + $01
    + a, y# Y7 Q' R. _8 N: ~9 X
  191. Key_Kemp            = Key_Once + $019 s; Q5 R: W5 b$ S
  192. Key_Temp            = Key_Kemp + $01
    4 M9 u8 }9 L/ A1 W0 o
  193. Key_Getv            = Key_Temp + $01
    / G8 A, x, H9 `% A2 ]% s2 j7 g+ s) n
  194. ;==================================================
    4 g  e& _8 ]( e" [  M1 O6 h7 w/ m. B& R
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    1 |: g9 @1 p, C3 c1 L! Y# r
  196. Music_Item_Last     = Music_Item_Cur + $01) c+ o# g* }5 y6 y0 G  b
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集9 y* O8 N9 S  O& a
  198. Music_Cur           = Music_Total + $01  ;当前曲目
    9 g* C" z' E! E. ~1 F# Y) U0 k
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目
    2 _& T, K5 l; [1 o
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    * U( I# H# e5 J. D0 O2 `! Z7 m
  201. ;==================================================$ X! `9 Y! @8 s. }- s# R8 `5 S
  202. HEX_Data            = Music_Stop_State + $018 y/ h+ s8 n2 L
  203. DEC_H               = HEX_Data + $01
    , {1 U, `$ Y  S( R8 b: m4 D
  204. DEC_T               = DEC_H + $01
    ; x0 ~9 W% q  b( L
  205. DEC_L               = DEC_T + $01
    3 H9 d$ c1 r6 Q: {* S7 X2 a9 k
  206. ;==================================================; T) u% M( q; l( @/ P; P9 V- _( V
  207. Time_S              = DEC_L + $01
    # m* W: m) I$ p
  208. Time_M              = Time_S + $01
    4 a0 r  d% f6 n9 d+ \- E
  209. Time_H              = Time_M + $02' |% g; R9 L5 J& ~" n
  210. Time_Cnt            = Time_H + $03
      _* s1 ]+ s! e$ f" e

  211. 7 P+ \8 I! N* @6 r/ {$ `
  212. ;==================================================
    ( I1 {: `& K$ I
  213. Music_Bank_8000     = Time_Cnt + 1
    : K4 d( a6 ]5 O3 [+ r+ R. g/ g4 N5 [
  214. Music_Bank_A000     = Music_Bank_8000 + 1
    * p1 H. Y4 Y( f  @2 x* [8 V
  215. ;==================================================4 @' y- D, x$ H2 [7 e1 L
  216. Scroll_H            = Music_Bank_A000 + 1
      c. m' W5 m* S4 F) T$ W* w
  217. Scroll_V            = Scroll_H + 1
    ! ~6 C# `. Z2 Y: U
  218. IRQ_Process_Index   = Scroll_V + 1% M/ {4 ]. B" j4 G  S' t: R! b
  219. ;--------------------------------------------------
    " V5 N/ ^  G/ ]. H; h
  220. Page_Cur            = IRQ_Process_Index + $017 D5 b) U. x2 ]
  221. Page_Cur_Index      = Page_Cur + $018 |/ V$ O/ V3 ?4 y( s  a3 L8 Y; r+ X
  222. Page_Cur_Cnt        = Page_Cur_Index + $01
    1 g) v5 W; P* V* L
  223. Page_Last           = Page_Cur_Cnt + $012 t1 u3 J0 `) E6 ^
  224. Page_Last_Index     = Page_Last + $019 f3 o4 k* U: S
  225. Page_Last_Cnt       = Page_Last_Index + $01  E' ~; ]7 g, m+ B" o/ N1 M' o
  226. Use_Ram_End         = Page_Last_Cnt + $013 X8 [5 G/ {% T1 F+ m
  227. ;======================================================================9 T/ }! G. E( T2 j! E3 Y5 q5 o3 t" y
  228. ;音乐数据块& n# |! m7 k) a% A8 O
  229. ; i0 L8 v, r0 t, I- X
  230. .IF SOUND_BAR_SHOW_ENABLE
    # U/ l+ ?) u# o+ u

  231. 8 |6 a0 s; r1 k( t4 T- U3 c& y
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK- Z5 L0 Z9 e  o' J, ]
  233. .ORG $9000
    ) |4 H* K+ b: `' @3 x2 f
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"- [6 i% A9 p. X4 z  D

  235. * e. b9 o7 B0 g: W
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    7 C* G3 ^7 M+ v$ R5 I  E/ W+ V
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"6 R' ~. x' Q0 [. c( G+ l

  238. + x3 P" Q3 T: I/ \+ ^* s' G
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK9 H7 V. |& V0 e8 F8 ^  t- P/ `
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    6 I8 \0 F7 A2 x% |& p1 ?

  241. ' B+ p! p! p' g8 V" H
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    9 i$ v; n9 ~$ g  V) j7 h& ^4 B2 e
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    # g+ O7 D0 I# ^/ ?7 o

  244. 7 I% u/ c5 N- U3 V8 a
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK  U7 F) G' J7 n- R: Z& k
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    0 ^2 U" g7 X, N6 Y

  247. 6 Y. z8 J$ q9 k9 W5 T
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK& I6 @2 [/ \6 K' R
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    9 h9 l6 W: x4 U- A3 @% |' t
  250. 2 O* c0 y, h' |/ j6 p: S/ x6 w( e" Y
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK4 z. n2 j8 p+ X1 k) l
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    1 M. y2 F3 p8 H' y" j1 W6 c
  253. - K3 v6 `+ D: O, Q# J/ n
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    - W0 g: H% |, w( n4 g7 A; T2 O, g
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    7 I3 V" M( L+ N1 H% b: V7 m
  256. 5 A7 q' h$ s* A$ O) i" v6 C
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    ! S" L2 b# G) @. q
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"2 \; W6 O* f+ \
  259. $ u" J" a( x2 [/ w* |
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK, t# k& E6 x, |0 z) U6 n3 |
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"8 j: y0 \4 _( D( C- H7 K6 X' e
  262. 5 w' `. n- L0 I* Y' d7 H
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    9 W) d9 x' i; B. z1 T/ f; O
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    0 h/ e7 [! Y! [# q) z
  265. - y6 l# D3 O/ U0 L$ z/ h! ~
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK! A/ c; d& O2 X2 w* |
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank", j' S/ V! v9 y; w% L: c

  268. ) d2 z) l5 r6 R( T
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK" |& S) }. m& N( _4 i& u. b8 {
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank": Q' ?9 h" E, Y0 r
  271. : v8 D9 g# u7 i) g6 k$ w2 {, _
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK) `3 y+ m( a; Y9 {$ B4 a
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"5 I; L! U* Z: {( V# R: K' ~
  274. / T( Z$ H8 F' i
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK" \- W) a' e# l
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"* r+ |0 Q- _! M( E/ F9 I; y

  277. 2 K- _  S# t6 X( A2 X: C( h  k9 Y: f
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    8 d+ H2 _1 m: D5 c3 U, i, Q8 T
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"  y$ |7 o( _8 s+ e, E+ u5 C# U
  280. ' l6 L2 u& q- y4 M7 q2 `. k
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK+ i, ^7 H- h; u1 x' K- `" k
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"( Z' q: Y; \' N* C3 N1 M) m

  283. 8 l5 H! V0 l8 E0 [* t6 I: _1 |! s
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    $ I( f, }4 w0 {
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"* Y+ Y9 h: |' z6 [& N4 `
  286. # x  p" O4 t8 L, e
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    0 }# y+ a5 u9 y1 Q; s0 T# i- Y
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
    3 V% L; w! e4 s) u

  289. 4 a' o) H/ z2 ]
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    # G0 v- e' q: Q' y  _
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
    9 Z# {4 ^# N/ B) Q4 s. `
  292. 2 e+ I3 t* ?0 ~$ v! |  R. G( u
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
      }' Z& s6 @& q3 V5 Q8 ]0 ]
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"$ B$ Q% P5 R) `7 t6 k# z
  295. 9 o6 B' v3 s' f* i" R% U  u
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK$ k2 N# I; ~+ g' f" q" E
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"
    " I$ h9 u( y1 N) O/ v4 T% _

  298. - j; b$ a0 \5 f) \; ]+ T9 k$ L: d3 c
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK1 x+ P% p! z9 R  t3 ]" X3 g# f
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"7 e% y/ n; `" c* \, T

  301. & B- ~+ [) |) _. t! [* W
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    2 t; C2 x, z+ z  R. S
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"( K, v- z* }. G2 ?

  304. 9 h0 g$ E: ^2 f+ e; T
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    5 l$ f3 R. r- A6 ^* c3 |
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    : z  K# ?! |: g6 I

  307. 8 `  L* A8 ^4 S
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK+ H# F+ O% A0 }! `: W
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    % n; b7 ^* k8 C4 Y' p) k! ], g

  310. : O$ M5 O( C5 Q7 w
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK9 V, Q% F4 v( r8 |! B
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    8 ?1 C% T* u! ^; U) W3 l
  313. ! w) B- {6 h9 k$ ?5 h
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK4 h9 o' ~. x( w8 l. @
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    + A' O' D* d& d8 p* Z& L
  316. * F# ]  q. V: O* g1 |0 k5 k
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    9 H) Z+ w; c: r# I; T% K
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    7 m+ n' R* z& _2 u! v$ ?
  319. 3 F# ?% G: S$ T' }
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK9 a1 j- J: j# _! ~  K
  321. .ORG $D400
    & e0 x! n0 H9 V
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    / ?2 ]+ L7 U  [5 w5 H/ [

  323. 3 x3 S- |; g, H3 p
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    6 r3 H7 |4 V3 k) Q0 H2 o: ?/ ^' m
  325. .ORG $D800
    5 J+ J  R3 a. l2 F
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    8 z9 o2 g  E  @. e' Y% B: N

  327. 5 W0 W$ o' W! C* G( B: F

  328. / l/ H1 O% ?" p  y6 h5 D7 h
  329. .ELSE, w0 l- f7 `* L+ d* D! Y

  330. . ^2 G0 y0 D7 l' M! _- p7 ~2 N& r
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK4 B! s! D+ i! v7 d! o
  332. .ORG $9000& {6 s( ~8 `2 E7 p" b
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"% ?, H+ C8 R- H( R6 W

  334. % y2 f/ q0 A! n- l  }
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK; U) a: D( Z+ d4 F2 d
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    6 Q- c+ ?/ j9 c- d

  337. * p' {! `2 P3 ^
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK2 f5 _& M$ m$ S1 Y
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    9 [, \4 b; {+ g3 x  X
  340. : t5 ^' \. {! X$ k5 M
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    $ t/ q5 f& q( F
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    9 \. {0 L; Y& I5 @% z

  343. 6 K( K1 |- o7 N$ w' j; L
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    / u  E: c& f3 f0 z* ~
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    # W2 Q: ]1 a0 V3 }
  346. 3 c/ G. r1 T+ n1 j* p& p4 c
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    * j" F' F) c  X: ~) _
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    7 Z- h' \  V2 H, i9 b8 U4 P

  349. : b+ b. R2 ?+ k; e
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    * [6 V: H, i2 h! U  ~
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    2 b0 J1 N, ^( c: ~0 d: x7 a

  352. ) L8 j( F; A5 y) n$ N/ G
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK2 W( W2 \' A7 j) ~9 k7 H
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    - O& }/ U5 @0 ]" w- G2 f- j
  355. % Y. b" U- V- e) n' p6 r8 I
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK: K2 f! W1 Q9 F1 m  z
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"1 L" R* y9 k/ Y. `# b8 p
  358. * l* D& y( Y, C
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK! _/ J! c6 E5 @7 A, {
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"9 K# E7 w9 l' M4 e

  361. ' y5 G- y' o" R; M0 u. D( t
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK& K9 s, \$ C* T; {
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"; Q" Y7 D& _7 X! k& Z8 B3 L8 y  A1 `

  364. 3 L; l2 o, F0 j+ J4 k8 H
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK& i% L8 w( _/ C/ E$ {
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank". H3 C# h. i, N- \8 Z# W$ P' r1 U" U7 a

  367. 4 |1 J% ~( ^, v3 i& y: N
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    ( b  T. j" A3 b3 C+ ]
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    ' z) s  r% ^# y4 Y6 }2 @6 f% Q

  370. : D5 Q, `' j5 ~! X
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK+ t& p7 F3 l4 b9 B6 u5 `
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"
    / z' q% h9 y8 k3 g: e6 E9 H0 x
  373. 2 Y+ c' |, E0 E( W! B  q3 t5 i6 o
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK. g1 F) L4 x5 O8 O
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    ) [* o, U3 @) x  r4 E0 b

  376. ; O/ U- I* w/ {( G7 F: K
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    8 ^. u8 b2 G! z9 p/ Z* m
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    1 a* J5 G0 W0 q2 w3 t
  379. 1 i& {& q, m  J" g  k2 q: Q
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK- K% F5 [: Q$ G
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"
    2 k( ~7 t, B9 R3 C! S' e

  382. + f) A/ k9 z1 P' e
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK' b% k) J0 N3 z. T7 n  D0 L$ l
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"4 E& g1 w! {6 j. S4 l* ?# w! s% b
  385. ' U+ B& o2 b0 u8 V3 c" G! t
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK0 [4 B- G# }5 z
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    4 `+ W1 f2 `# U/ J+ l: U

  388. 0 h8 [, z+ g7 [. p  A6 y2 ]
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK8 X9 A) K$ M2 Q3 h
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"" [; K% k$ c7 N+ t( e" W
  391. + E5 M6 k) v3 P- R. b% }
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK7 l  u; w) u3 n/ \
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"' f" j/ H/ m& W6 V  q
  394. , Z0 y0 B! h( F7 |. Q. T
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK$ w( F7 W3 l( t8 E2 B% a* ^
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
    6 U0 Y# G* N3 m5 M; ?
  397. " c) H( V! ?7 K( s9 e! h* w6 ^  q
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    4 y0 A1 Q( Y" r; z( \2 o# g
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"8 ]1 G: |; H! S

  400. 9 ~4 ?6 B: I2 Z9 U% y
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK. D8 H0 f1 g( F* C7 m# X+ f+ @
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"" L2 W0 _& F: Z, j7 w

  403. & t. |' K! T; ]
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    5 R. Z8 K% k8 E) q6 z1 T
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"# U0 v# `+ ~3 }: g' Z  Z% j
  406. ' T! M5 q( o7 N+ w
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK5 s9 Q' A- Q- _
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    . v/ G: e3 P& j" o8 _' _
  409. + v; u% e0 p4 o
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK+ q# \3 V8 g# F4 m* J, p
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    * W1 k9 ^& x8 h6 [
  412. 5 p/ z" D3 I* A: w- f$ }( J
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    ( `" d' s, Y3 F8 B5 L
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"6 X+ ~( v. B$ u; p% l: ^& j

  415. , Q# \) R/ X: i
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    8 x- X+ d# k! h- a) c7 B; w# L
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"$ P5 [/ A9 m6 \: O0 \; H, {
  418. 3 I. \: [4 D$ t* {# f9 b
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK5 f, M3 X) U- y; m( M' _
  420. .ORG $D400
    % U8 {3 ^. b. D/ m3 i
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"9 Z7 |: ^; s" Q8 X
  422. 1 `! S6 m. {1 O& q
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    # e+ T: j- h3 [0 ?5 D
  424. .ORG $D800
    - A8 y/ K$ m  Y/ ^
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    * d# b) d* P% i' t" e" z  A7 P1 c

  426. ' }  r* q2 J& c+ h! X. H9 S6 `
  427. .ENDIF# w* |6 ]/ u; \; s" u

  428. . n6 g& o0 G. d' Y; Q
  429. ;CHR图形数据7 o; \  h2 t0 ?$ Z2 k2 y9 w
  430. ;======================================================================; ?# I' Y8 ?, _( w( i
  431. .BANK CHR_DATA_BANK
    . A$ o$ x8 _! \
  432. .INCBIN "chr_bank/chr_data.chr"
    7 X7 A0 v3 h$ R) ?

  433. * F/ q9 s! {( N; T( c. {
  434. ;======================================================================; t+ ^' O- d# `) \, Q
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK
      |+ h8 [# u1 S5 ^5 A# k; v2 |
  436. .ORG PROGRAM_ADDR5 F2 J4 l9 T- |. r

  437. - F  b4 j+ V' _  G' J0 U
  438. ;==================================================
    / l9 V. M. `$ e6 F( o8 H
  439. NmiProcess
    ) I. K' @3 m# N" A/ m5 e; H

  440. $ S# g2 K; D4 `7 |
  441. ;关闭屏幕控制
    7 N: i5 K# @2 v0 b: Q! w
  442. LDA #$00
    9 v& C& e2 x! h% y' j/ @
  443. STA PPU_CTRL0 W0 G7 K5 g- i( F' J
  444. % d4 \" e! j2 S- M* {6 J
  445. ;没播放音乐就不需要触发IRQ  y0 w8 X( _3 ^" }3 p, W( D1 `0 A1 S
  446. LDA <Music_Stop_State
    : o0 R8 U+ n, o* [
  447. BNE NmiNormal
    6 t; u; _% j: n3 G& M
  448. / E1 Z  k- |' u& h. o
  449. ;重置IRQ索引
    ( D3 U5 x0 _+ B4 \9 p) h5 }
  450. LDA #$00$ ?5 \+ @+ F0 w
  451. STA <IRQ_Process_Index2 L% G/ ?4 G. J4 W$ Y- V
  452. 6 K) v3 R+ y, s1 u/ L
  453. ;时间秒数为空则跳过
    % h( U' U. |2 }6 r& z! a
  454. LDA <Time_H
    7 `) f" N5 d- h  l6 j
  455. ORA <Time_M
    2 [8 J- l$ `  R; Q
  456. ORA <Time_S
    " s3 h5 A- N) I" F. s
  457. BEQ EnableFirstIrq
    . T. u3 y% D/ D0 Z
  458. 3 |7 S0 n/ y+ y& T( T9 K! f
  459. INC <Scroll_H
    ' }1 `, t2 O$ w& o
  460. ( v6 h; D: o: b" e# C- h
  461. EnableFirstIrq / A  R* b4 G8 u* e3 M: X$ R1 m% L
  462. ;80条扫描线后触发IRQ
    ( p0 Y2 E; ~) Z
  463. LDA #IRQ_SCANLINE- j7 n7 \. b# u# p  a! r0 o
  464. STA MMC3_IRQ_LATCH
    7 ^0 K. s" B3 S( W0 }7 t' d
  465. STA MMC3_IRQ_RELOAD
    ; B  F" s& P: ]; _9 v8 W) M4 a7 p3 s
  466. STA MMC3_IRQ_ENABLE
    ( }8 i' B7 |1 \3 |8 k" R
  467. CLI! d5 D: L( x& H+ u% D: D2 W6 G' o

  468.   \4 s2 ?3 H' E
  469. NmiNormal9 @6 ?) P: `0 }) d- C5 H
  470. , G& `+ l1 L  H8 Y
  471. ;处理PPU图像; {; o- y3 w, `9 z. `. u, {
  472. JSR PPU_Proc' G) A  p& |) U5 T; m' T$ w3 c0 e
  473. 7 O6 b# {2 H5 i+ y" l$ t! V) l3 H7 q
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    3 o' z. T4 E$ U7 ]
  475. LDA PPU_STATUS
    4 T7 f/ p+ h2 q' ^
  476. ;LDA #$00: \7 p; M- d+ j! d$ j1 K
  477. ;STA PPU_OAM_ADDR
    1 i  R. k& R/ x
  478. LDA #OAM_TEMP_ADDR / $01006 e- g$ o" d+ g  `9 y; s/ _/ U
  479. STA OAM_DMA+ p; c3 l. H' r+ |1 U/ U+ y
  480.   h9 l* T/ n/ G" r. p
  481. ;启用NMI中断
    ! p5 ]) M$ n* _5 ^1 I
  482. LDA Screen_Ctrl& g7 G& R% y/ q: m
  483. STA PPU_CTRL
    5 c, Z) o5 H4 T+ m, e

  484. 1 C4 G  b1 H' D) ]5 Q9 S+ z5 F
  485. LDA <Text_Disable_Flag
    4 E1 {# [9 X0 a9 B0 G) h; A) Q
  486. AND #TEXT_DISABLE_RAM( l' O4 V$ M# j( s  t
  487. BNE Nmi_Sound_Play
    & l+ |5 y0 j) \# T: c
  488. : Y. `3 x5 @+ |
  489. ;处理手柄输入6 v2 k/ a, _9 a% Y
  490. JSR Key_Proc
    . _, x  N( v! D8 z# l

  491. . I$ T7 B, F8 p6 G
  492. ;切换音乐(手柄触发)9 Y, X1 ^6 T- q) [
  493. LDA <Time_Wait_Cnt) y0 m4 }: S- d* u
  494. BNE Nmi_Cursor_Arrow3 G+ k9 m* F/ p: p4 r
  495. JSR Change_Select_Item% A9 b, W4 ~) z2 w  Z) ?

  496. % A0 f: c+ L! N' f6 l8 @/ g
  497. Nmi_Cursor_Arrow' H8 y* }! p9 ]0 f, l
  498. : j9 L% \5 O5 ]* D& _% ?' _; N
  499. ;处理光标箭头
    1 t9 Q, B2 |1 t3 ?) C( F- }
  500. JSR Show_Arrow
    ' z' \9 Z9 w1 x" A; p: c" L
  501. 9 L! X5 [$ A  V  ~/ B8 k/ @
  502. ;更新调色板. |" v* y- s4 V7 V6 T. |4 ]$ ^5 `! d
  503. JSR Update_Palette_Data% Y. _8 m3 L9 v; l: [

  504. 5 P  G4 G! D! K6 |. E
  505. ;显示时间(缓冲)! Z0 y9 s, G+ v. C" S
  506. JSR Time_Show
    / }  J: E5 B+ i/ ?

  507. 5 Z) ~+ v: q2 N, w# H  A
  508. ;音乐显示(缓冲)
    : S! L3 U# O9 P& r" X
  509. .IF SOUND_BAR_SHOW_ENABLE
    6 ~7 p7 K; \+ Q) p
  510. JSR Music_Vision
    % O9 @0 ?# L! r& L5 O0 B
  511. .ENDIF# o) }( c( @& M3 T2 C- `* k
  512. ; {- H0 F7 q2 F# C6 B3 ]) J
  513. Nmi_Sound_Play$ ?1 P9 a" O) U
  514. ;播放声音7 t8 P8 [" m- Z" ~! p
  515. LDA <Music_Stop_State
      t  O0 ~4 `/ B5 o( J+ ]7 I3 ^
  516. BNE Nmi_Time_Wait_Set
    9 O. A8 N# j: W, }" r+ z8 d! ?7 h
  517. JSR Sound_Play_Proc9 Y8 a3 _+ Z" I" F( u
  518. 0 [2 w, g  t' |
  519. ;播放计时$ t7 w* p2 t3 r, W+ L4 u% B* N  S7 r
  520. JSR Time_Count6 o. {1 d+ ?& E1 ]" J

  521. " s) c# ^9 ~# B  `$ W. B
  522. Nmi_Time_Wait_Set
    % K$ @0 B: o/ s& F
  523. LDA <Time_Wait_Cnt$ g/ F) V* I, I4 ?7 C6 W
  524. BEQ NmiNormalProcessEnd
    $ s/ n" }0 ~( n3 K( Z9 O8 A; L
  525. DEC <Time_Wait_Cnt
    * t( X$ Z# d$ A* O7 m* G
  526. NmiNormalProcessEnd
    " J- z' \! Q$ i# W$ b  W! `% R

  527. # A0 F, S$ S: E  M$ e6 l; ^$ R7 f* r
  528. INC <Nmi_Time_Count4 e4 o" Z! P) h3 b# v( q& K
  529. 4 V' Y) G$ O. N5 N$ u" ?
  530. RTS0 N8 I: v: R/ J% j+ r) u- o

  531. $ }" H) @# S& U2 n3 ?
  532. ;==================================================
    " _' x/ }4 q$ x3 d# v6 A- A* W
  533. Init_MMC3
    & `! e* Y2 b0 q1 a- e
  534. ;==============================
    , |) K" [6 f' c$ S, b3 S. A* R
  535. ;禁用IRQ
    & S4 R0 r- b& v2 C- W) p! T/ O
  536. STA MMC3_IRQ_DISABLE
    & p5 z$ G6 A; ]" }9 w+ B. x% z. _
  537. 7 A( X% y3 Y: L5 {
  538. ;水平镜像' b. e2 D" A, E
  539. LDA #$01
    - O/ r) }* Z5 z6 m6 d9 I
  540. STA MMC3_MIRRORING
    % D, p$ p7 I" P& ^4 @
  541. 6 d9 `. f; V6 a2 [- ~* X4 D% K
  542. ;初始化图形bank
    4 y( U  U" l+ z9 m5 P( o. ^1 P
  543. JSR Init_MMC3_Chr_Bank) d5 a6 X7 v8 N% S* F
  544. ; U8 d+ |  ?; W# y; _/ M
  545. RTS
    + c& G8 B0 L& r2 w. G3 o7 G$ X0 y8 q
  546. ;==================================================
    8 e9 u2 F7 {# s
  547. ProgramBegin;主程序
    5 S, A( g  c: Z( b3 B: O! ?
  548. LDA #$00# S2 l4 B6 B& q. c! M( D3 Z
  549. STA PPU_CTRL
    4 x8 T' P- E' P5 T# G( T
  550. LDA #$00
    + x3 G* p, G. Q/ {  N" R/ K
  551. STA PPU_STATUS  P: N, @7 I4 D
  552. STA PPU_MASK0 ?& z7 S) |+ Z& V2 h' M
  553. STA JOY2_FRAME# Q) x$ X7 ^2 [7 U. }* o0 a7 L
  554. " [. U: }* Y* t! U- l9 N
  555. STA PPU_SCROLL
    , x" \! c" {* [" D
  556. STA PPU_SCROLL
    7 N: _3 k1 o; q- p" d8 v) J
  557. $ n% |% {0 P; k' U$ R; x
  558. ;==================================================& F* Z+ c+ Z- m1 R# m4 W. m
  559. LDX #$FF7 L& ~8 l1 Q6 f
  560. TXS: k& M# @' k% j! O+ E# G

  561. $ E! A* _1 d# o% @7 D2 b; C# \) J
  562. JSR Init_MMC37 R# j; K9 Y  m! X* c: N' u' U
  563. ' \% o; ~3 k. [) c
  564. LDX #$027 ]1 q8 N# U9 R$ f
  565. Check1
    ; R: q9 i# [' P) @5 G  c" `
  566. BIT PPU_STATUS1 g' L/ g- ]6 b" U
  567. BPL Check1
    ( r- S5 ?5 |$ i9 x  q8 h
  568. Check2
    ' _0 Y2 q1 c, F& }  |- `! M
  569. BIT PPU_STATUS
    + D" F" F' j; N, j
  570. BMI Check2
    - h+ t% h/ ^( n& d
  571. 8 F$ y' i4 q* j" i
  572. LDA #$0F
    ; C8 a% X% E# V7 u9 T/ F0 J8 b
  573. STA APU_STATUS
    9 T" m& [. e+ ]& a5 N
  574. LDA #$C0/ v, Z; Z3 ]- z, t
  575. STA JOY2_FRAME
    - P/ w0 B; D9 u, ]& d8 C4 [- \
  576. ' ~- D6 I/ ~1 M' B! ]1 S" F3 {# o; d# f2 g
  577. LDA PPU_STATUS
    " m. Z& z7 C7 k6 d3 ?
  578. LDA #$108 S# q! h7 h! J' D% C8 Y" X
  579. TAX6 Y8 f0 a  r2 K- S
  580. Check3
    4 ~5 D$ k* y& Z) Q' {9 E
  581. STA PPU_ADDRESS; `* F# L8 [( t1 y# |  d
  582. STA PPU_ADDRESS1 a' x% C1 E6 ?: x( M6 f
  583. EOR #$00" ^- i/ ~# F0 Y1 B  r' P" i
  584. DEX
    * z1 o, S" [) |
  585. BNE Check3
    . z8 y7 ?6 f. s
  586. ;==============================0 Y" O0 }, T2 ^
  587. ;调色板清空* ~, [* Y3 J8 X6 {$ x) @8 ?
  588. LDA PPU_STATUS
    $ u2 Z- I6 ^3 p! b; i
  589. LDA #$3F
    & o1 R1 p" o, H7 W% O2 Y. r1 O
  590. STA PPU_ADDRESS
    & X2 z* J, d( l: p
  591. LDA #$00+ I- }4 s$ y# L
  592. STA PPU_ADDRESS7 q' _% J7 g+ T! H8 Q- f
  593. LDA #$0F& i% }4 I9 n; M4 n
  594. Palette_Clear
    3 A% a( b3 `& J  r
  595. STA PPU_DATA4 g3 |: Q( ~- O' W
  596. INX8 g, T7 y3 ]+ @' y+ J
  597. CPX #$20
    ! h4 }. `4 A: k: G
  598. BCC Palette_Clear
    " i0 a/ i  p6 i  ~
  599. LDA #$00
    8 {# F- s: \1 ~7 |. O
  600. STA APU_STATUS) j8 C. R) K: a3 y0 J

  601. ; S7 i* M& e' F% A# W
  602. ;==============================
    . t# G' F- |$ K5 _
  603. ;RAM初始化
    9 S4 ^( t# C& s
  604. RAM_Clear_All! S; j% }" G* z; g+ L3 {/ w8 a
  605. LDY #$00) a5 e* b1 ^/ I, N' M
  606. LDX #$08
    4 Y* {( H. L- \5 ~+ c
  607. LDA #$00% t% B8 f  ~0 O. Q2 |0 w8 k
  608. STA <$00
    : Z3 v( F! p2 j  ^$ }/ d
  609. STA <$015 u' I3 T  l) s7 Z% D9 g" b
  610. RAM_Clear_All_Start  d$ S9 m- _/ F  t
  611. STA [$00],Y
    7 |& Z& b/ @2 S6 H3 c8 T* B
  612. INY1 d" O: p+ _5 Y* n
  613. BNE RAM_Clear_All_Start
    # |/ n4 L' K9 f  @" V8 y4 [7 |3 e
  614. INC <$016 X  Y6 }( R: Z2 S( f- N
  615. DEX) L( _) I3 w3 x& K( Q9 Q
  616. BNE RAM_Clear_All_Start$ i; ^' S; u" S, D+ ^+ U
  617. 6 s0 Y$ X' O2 ?3 z  l4 W( B
  618. JSR VramClear; n% o0 T* _  O& S
  619. JSR VramInit1 }' v) T4 w  T/ v" _" h) Q( e
  620. JSR OAM_Ram_Init' `3 i: ?  d4 P$ }! l' V
  621. JSR Init_Palette_Addr* x" a+ ]$ V+ R1 |& G
  622. ! |2 e  S" k) ?
  623. LDA #$FF" F( E& ?% m! i3 T% Q
  624. STA Use_Ram_End4 r+ L0 T) m  K( L6 i
  625. ;==============================
    6 i6 M$ @+ P+ j3 s3 ?5 a. q
  626. ;初始化背景调色板
    6 E. N3 n; v3 x* @8 Z0 e/ d% f
  627. JSR Set_Palette_Color
    / A1 p9 Y, p/ ]" x" v
  628. JSR Set_NameTable_Attributes  X" a  c( @* i0 Q

  629. * g8 l, v4 {, |7 @8 M' i3 e
  630. LDA #$00/ \8 s8 A& u+ J( e, q) ~9 q
  631. STA PPU_OAM_ADDR& v# N* g! y3 e
  632. LDA #OAM_TEMP_ADDR / $0100
    - l( B! g5 m4 n( N3 Y" N5 p
  633. STA OAM_DMA
    5 m2 t0 V. R7 g' i5 s
  634. 1 _  p* c+ g  [- Z1 w; V# X5 ]2 v9 @
  635. JSR Sound_Reset_Proc3 T% ?" i" V) d$ b
  636. JSR Set_Sound_Total
    3 b, E1 T1 I5 _: t6 x% c
  637. 7 ^/ v  a# }4 P" a
  638. Init_Start_Music: a: k+ N' o1 K$ [7 W* b
  639. LDX #$00  m' k8 J3 \7 S8 w& S- w1 [
  640. Init_Start_Music_Write
    ; X% d7 A$ U6 s; }$ c0 y0 J
  641. LDA Sound_Start_Port,X
    - a9 i9 X. Z6 `: L& R  t
  642. STA <Music_Cur,X
    " ^/ R1 f; V3 r" D/ X9 X% k5 h  w; [
  643. INX1 ]* D; }7 ^( D2 R9 P2 ^
  644. CPX #ITEM_MAX_SIZE
    ! h  u6 Q1 F% f6 [1 n
  645. BCC Init_Start_Music_Write
    + s/ W5 u; \. o  g
  646. . q: ^7 x/ m( s
  647. JSR Show_Music_Text& E. k. L2 e( i: U( {
  648. 6 W3 v2 {' u0 g
  649. .IF SOUND_BAR_SHOW_ENABLE
    ( S! M+ E' h( Z
  650. JSR Sound_Bar_Text_Set
    . _" H1 O8 s( j% N* c9 x# S
  651. .ENDIF+ d3 w7 C* {- H3 [4 e% S

  652. : E% V& a* ?# Y4 G* q
  653. .IF Track_Name_Pos
    3 p* F) i- M0 v& J! U
  654. JSR Show_Track_Info! r- f5 B, W% d0 [( I
  655. .ENDIF2 c; Y' c- `. c2 `( m7 ?& B. @

  656. % d3 {0 p  g2 }% X4 y, u% v" _
  657. JSR PPU_Proc/ _) r6 p" p( ?& @* f6 W

  658. ) t# i5 V& l* B# u$ ~$ J
  659. ;==================================================
    % ?' P* D, U. c4 o& J" _. I4 n
  660. ;音乐bank初始化
    4 i% c. {+ F$ H" V
  661. JSR Init_Sound_Bank* n2 l7 Q  z* [; ?6 ?

  662. * [' D3 E/ a' v: I. y5 g
  663. JSR Music_Show: W/ u! V1 K7 _; [% u, b
  664. JSR Time_Show
    3 B  J# a+ z/ p5 M1 z) P
  665. JSR Music_State_Show: y5 {' l9 C3 m. S& V2 A6 n; I
  666. JSR Time_Delay+ E, T7 K: A+ Q! S6 ^+ E

  667. + i8 A  Y7 d8 t/ ?% v. H" p9 f2 h
  668. LDA #$01
    4 [8 T* o  F( M1 P
  669. STA <Music_Stop_State
    * n" l7 l4 ^0 Q, B& p1 X9 B0 J
  670. " y& Y, Y9 i9 s0 p. t2 E$ l
  671. LDA #$88/ n) x3 N; G" p+ v0 p6 d
  672. STA Screen_Ctrl; V* {* G% E; d7 z+ h0 B
  673. STA PPU_CTRL
    " c: v/ ~% O5 `* m
  674. / U/ q3 s6 E# J' f: {% b
  675. JSR Show_Page_Text
      T5 N6 D/ k( r; i* v* R( w4 R

  676. 4 P$ b/ A5 g3 R7 E
  677. LDA #$10  e# }, O4 }/ B3 d% V
  678. STA <Time_Wait_Cnt- L) C" B- c! _6 ~) A

  679. 2 ]2 F1 `* l1 g% M
  680. Wait_Time_Over
      [7 p% B9 R% a# X: N7 T# d
  681. LDA <Time_Wait_Cnt
    ! `/ d/ D, O! ~- a. d/ G* _
  682. BNE Wait_Time_Over
    ! @5 w9 Q( W2 W  Q  v0 q% b. T
  683. # h# P& o" }( r* u4 }- \& R
  684. JSR Show_Arrow
    , K# E  ?5 n- M
  685. LDA #OAM_TEMP_ADDR / $0100- h. N4 `9 G2 y( B% }
  686. STA OAM_DMA( o9 g$ n! A: H: l

  687. 1 O6 Z( a7 r+ \# n* ]% u) z
  688. LDA #$1E
    2 w; k' C0 }/ |6 K2 u) F8 p
  689. STA Screen_State. f% [6 F0 Z; v% S7 c$ v4 P: p8 @
  690. ! E2 C# H& V3 ]6 w! h; t% H- f; A
  691. LDX <Music_Item_Cur
    8 x% f+ [6 ]# k$ c
  692. LDA <Music_Cur,X- f* l) ]! f$ x4 j$ p% ~7 m& h( e
  693. JSR Sound_Init_Proc
    4 D$ i' f6 j  r& R4 h: W
  694. " h$ x( W( S6 Q- w0 _% x: C, `' t( l
  695. CLI" c' F. ]% B# W" Y/ K; i+ F1 o
  696. JMP MainLoop
    : }( ]+ |' A1 \, S$ Z4 y4 z' D, v

  697. 1 C4 y  f: n, g5 E
  698. ;==============================* C% M. z' z7 B/ u5 G. Z/ X9 X: L
  699. Time_Delay;延时等待
    1 t/ a3 `. j) W8 K# c
  700. LDA PPU_STATUS
    * @6 L  v5 v+ ^! k6 C* t- I" ]
  701. BPL Time_Delay
    % {3 x& }, J4 \# [% Z$ D
  702. RTS/ A' W+ b9 S; |( [$ s
  703. " z9 a1 O! L5 r0 h* b' t% V
  704. ;==============================/ c' c/ R3 X$ ?( N& v$ s3 {
  705. OAM_Ram_Init;初始化精灵内存
    ( C- b3 N0 ]3 \3 Z, Q# `
  706. LDX #$00
    ; {  {$ m8 A" B% I' t1 e9 K; A
  707. OAM_Ram_Init_Write- `4 s* _$ d" a- z0 s& u4 A
  708. LDA #$F8
    5 o0 Y) j. f3 }
  709. STA OAM_TEMP_ADDR,X. T. @. A/ a3 w$ h$ U, l2 t" c7 j
  710. INX/ y% s0 e5 |) {' r! E
  711. LDA #$F8
    . _/ w3 v# j1 g1 _+ W) G# \4 q9 V2 q( S7 \
  712. STA OAM_TEMP_ADDR,X1 Y* H  S# u0 m. A7 D. H
  713. INX
    ) l0 @- m* g. E  a
  714. LDA #$00
    % F0 X7 B# u; \6 H; {9 _
  715. STA OAM_TEMP_ADDR,X6 d% x( I( K: ^
  716. INX
    3 A. I8 N  ~# M% W* y+ L* r
  717. LDA #$F8
    4 s" u: K8 U3 {
  718. STA OAM_TEMP_ADDR,X1 o1 h1 Z' V5 x3 [: [$ R
  719. INX
    $ s$ m3 E& D' o, Z" Q/ C' k# {+ o
  720. BNE OAM_Ram_Init_Write3 C+ p2 q6 K4 P$ t3 q
  721. RTS
    & h- q9 C2 _6 s- ?3 _
  722. * E, e5 G! ]/ F8 P
  723. ;==============================
    3 X& r8 c# i1 m% `/ O
  724. VramClear;初始化图形内存
    4 b2 [' t4 k& U, y& y4 f+ w
  725. LDA #$20
    - v" d( N; i0 F* f, c8 c; ?
  726. STA PPU_ADDRESS
    " ?/ P4 C4 P( e7 n7 A: |
  727. LDA #$00# }/ r+ [% f! S+ j$ C
  728. STA PPU_ADDRESS  Q( N' C* E; {, h" K% W
  729. LDA #$00
    % r0 R, X2 c& q9 \: M
  730. LDY #$00: ^( u3 k: @# K4 S* V
  731. LDX #$10) K4 B% t& H1 _5 z2 v3 ]
  732. VramClearWrite
    1 b& B$ C. l- G, K
  733. STA PPU_DATA" \; y2 \: x' I
  734. INY7 b0 c3 H4 }. [5 i+ R2 w! `
  735. BNE VramClearWrite
    : E7 {. V/ W# A, p
  736. DEX
    6 n* u, u. j" R: m4 T& m6 X
  737. BNE VramClearWrite, X/ g) D" ?, D, [* E% A
  738. RTS+ R% Q9 I! ?/ _" d

  739. , _& G3 H$ p( n+ q+ h$ ]
  740. ;==================================================! `* W- T* Y! i2 p+ n7 ]$ d+ C8 `
  741. ;设置MMC3图像bank3 q" M: ?# h# S  ~/ |' H8 X0 T
  742. Init_MMC3_Chr_Bank
    4 P1 l) H4 @6 f% Q" O) K
  743. LDX #$05
    5 {+ P# H' |( U, m5 s) e2 |
  744. Init_MMC3_Chr_Bank_Write
    : `/ `4 J8 u6 z- K" k  Q
  745. STX MMC3_BANK_CTRL4 R, a- H$ `& J# o( W0 s4 j
  746. LDA MMC3_Chr_Bank_Data,X4 l% k6 ]' H# @- L6 c& C& c) m  V- J" E
  747. STA MMC3_BANK_DATA
    5 Y5 r; `" i0 ]2 [
  748. DEX
    ( y' l  ?! v7 K% [% c
  749. BPL Init_MMC3_Chr_Bank_Write; q5 `8 i  q2 N  t( _7 u
  750. RTS
    ; O# k! t5 I: n. S# q
  751. ;--------------------------------------------------8 W* l- P8 {: b) @
  752. MMC3_Chr_Bank_Data3 u) J5 y) C: ]7 V
  753. .DB $00,$02,$04,$05,$06,$07
    . x* I" n. h3 O( G1 N& }

  754. 2 A$ Y) _2 z) I$ g( P( L+ s
  755. ;==============================
    ! G- ]/ E/ k  K& Y8 ]7 a
  756. VramInit;初始化图形内存$ d4 t+ X9 I% c; T
  757. .IF CHR_RAM_ENABLE9 K) V7 C3 i$ \. X# l" f
  758. LDA #CHR_DATA_BANK5 q6 M( b6 m8 d
  759. JSR Switch_Bank_A000
    0 x2 u/ a6 T' B. F% q2 N" x
  760. LDA #LOW(CHR_DATA_ADDR)
    - `2 M/ a* D/ U/ K* o5 e/ Y
  761. STA <Data_L
    5 K8 t5 y( e, }2 b
  762. LDA #HIGH(CHR_DATA_ADDR)7 @7 w. |; s5 N. Y% s5 i
  763. STA <Data_H" W, J; r- X% T7 Z
  764. LDY #$00
    2 f9 z9 X1 w4 Q8 P4 c
  765. LDX #$20
    ) v' O- l2 E  G: i8 A) [4 U
  766. LDA #$006 ]/ @2 T4 w$ }, c$ Z3 v7 R# ^
  767. STA PPU_ADDRESS
    6 c+ N3 n9 j1 N& J
  768. STA PPU_ADDRESS
    / I4 M2 @3 N( t3 E" v2 A
  769. VramInitWrite
    " s+ l2 m9 d: `7 R, D$ W
  770. LDA [Data_L],Y9 l' V4 K/ D1 O; |& Y
  771. STA PPU_DATA
    + ^6 v% d) K7 W; O
  772. INY
    ) ?& P. O: a% |. x3 R: \( [% o' n
  773. BNE VramInitWrite9 ~. E' I* E& g3 y/ ^+ t
  774. INC <Data_H
    + T4 Z9 u* A9 ]6 N
  775. DEX
    $ p5 x  r6 z- `  @  V: a  g! m
  776. BNE VramInitWrite
    4 g8 }" n! D; a3 a6 I5 D+ H8 t! U
  777. .ENDIF
    * u6 d# C" C4 G. O7 q5 v
  778. RTS
    5 w* p* x: x2 W

  779.   m. Z' z" i. F/ f
  780. ;==============================' \: ?% V. S7 _# `% w8 w- G
  781. ;音乐切换
    # |' B$ @9 K7 w* P6 z2 X% {
  782. Music_Play_Change
    3 A$ R" o/ z0 w( D5 ^. V
  783. LDA <Key_Once
    ' R$ \% I4 R/ @( V+ ^
  784. AND #$FF" k. u/ m* T2 F. v
  785. BEQ Music_Play_Change_Check0 V0 v1 _: i( e; A% D5 z: p  y" I
  786. & J/ Y) Y7 _- v# t
  787. ;禁用音乐条刷新, e( E3 e2 K6 @7 U, \+ _
  788. LDA <Text_Disable_Flag
    0 E; o4 [/ I1 ^* ?: N
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    ) l  E: |. m8 f% s" ]( @% p
  790. STA <Text_Disable_Flag5 |( X2 L  d9 f( W5 ^- H

  791. 6 R. w& ~! C, Q" }0 n* R
  792. Music_Play_Change_Check; |9 j9 O( n$ z* ~; r
  793. Music_arrow3 g' B. I/ j8 @) _8 E
  794. LDA <Key_Once
    : S1 \1 C. b/ P1 R2 b0 G
  795. AND #$0F# @) n$ u0 M4 g" }/ \' u
  796. BEQ Music_Play_Change_End/ C; |1 Q: I3 p' e0 X5 h
  797. JSR Music_Track_Change
    1 r/ ?4 W: r) n* u" j: m
  798. JSR Sound_Reset_Proc7 H; p4 K0 u/ d/ a9 U8 }
  799. JSR Music_Show
    2 w3 c; Y) v, u
  800. Music_Play_Change_End
    ' R8 u. q4 E( x2 T* v& H- S
  801. RTS
    9 y+ @0 e% J5 S2 W' @+ {! D
  802.   s' x8 H7 \6 T7 f& B- H
  803. ;==============================
    . R1 _5 F  m% Y, H
  804. ;音乐曲目切换) W% Y$ C4 H8 l  ?* I
  805. Music_Track_Change
    & E/ s' Y" d. }% \9 ?% Y
  806. LDX <Music_Item_Cur
    2 O% y. b8 C4 |" R7 Q7 L! D) ^
  807. LDA <Music_Cur,X
    2 X. ^; h$ m* F1 ~- x# y* m$ |1 O
  808. STA <Music_Last3 p8 l6 G* M6 B5 |/ j
  809. Music_Decrease$ g' m  c: t! H; i5 d0 D
  810. LDA <Key_Once
    + X. F* h/ G" c, }7 b
  811. AND #$42* M; T! w* t% A" l- c1 W- ?
  812. BEQ Music_Increase2 V# P3 E* I; @, D5 O/ l
  813. LDA <Music_Cur,X
    ( }. }/ e9 U$ s: J
  814. BEQ Music_Increase  @4 o3 W' ~3 m8 d
  815. DEC <Music_Cur,X7 `5 i) M7 B! I1 @
  816. Music_Increase
      C2 a# u6 c$ E# ^$ ^8 t( J
  817. LDA <Key_Once8 R1 P+ d5 t3 ^; B
  818. AND #$816 A- q* A+ S$ ?. e& i3 R; Z1 ~; d
  819. BEQ Music_Decrease_10
    & y0 @  ?9 W4 W" `
  820. JSR Set_Sound_Total! _2 T0 R5 K" m8 ~) ~& a# U
  821. LDA <Music_Cur,X& B/ x% y' W2 n" @9 V2 u8 C
  822. CMP Music_Total: A1 h- A) Q5 O, a* i
  823. BCS * + 4
      B: J3 K; v3 Z% k* K
  824. INC <Music_Cur,X
    ! l, ?( t2 m, U8 [
  825. Music_Decrease_104 G9 h. t/ L9 T3 R; G! S; j) a* o
  826. LDA <Key_Once
    1 W2 v+ c7 q) l! ^. W- X; H
  827. CMP #$04( N* Y4 ]" u% W1 [7 c' ~
  828. BNE Music_Increase_10
    7 q' k1 s1 a. k% o! H7 v
  829. LDA <Music_Cur,X
    ' m6 z) H4 U; g% ]' M3 x
  830. CMP #10
    $ h4 ]# d4 f) w7 w
  831. BCC Music_Start_Song_Min, |9 Q1 V$ z5 \- L% y
  832. LDA <Music_Cur,X' p4 O2 D2 u9 w  _
  833. SEC! o: R2 I5 i) k% @- c3 @( Q4 f: X
  834. SBC #10) _, j* h: P/ f/ T
  835. STA <Music_Cur,X6 r5 {: ?: M4 r" q7 H
  836. LDA #$00
    $ J! q8 G3 @# M6 E$ V
  837. BEQ Music_Increase_10+ f7 v% k6 [" H8 J7 P3 Y
  838. Music_Start_Song_Min
    ( a1 ~% d/ l5 A; H: ?8 }0 [
  839. LDA #$00
    2 l. K6 ?0 ]; v1 w
  840. STA <Music_Cur,X7 C6 O. y. F: W6 D. q& [# W
  841. Music_Increase_10
    9 `, @! ^& y- H  A
  842. LDA <Key_Once
    7 k# B& B/ c/ K2 h8 @- Z8 @
  843. CMP #$089 E4 @6 W' ~- u3 j* N
  844. BNE Music_Track_Change_End% f" G1 X# `1 t& d# z6 T2 |9 Y# t
  845. LDA <Music_Cur,X
    % j% T4 a& ^! q" N- p& W
  846. CLC  P8 n& _: h* ~1 z2 s
  847. ADC #101 E* m# K5 @, m' T/ h7 G4 Q
  848. CMP Music_Total
    - X/ R# L- p) N, |: O* N
  849. BCS Music_Start_Song_Max) Y+ Y4 A! J) c
  850. STA <Music_Cur,X* L5 A3 L9 R" r( f- q6 @: a
  851. LDA #00/ D) o9 J) W$ |( U$ a/ e: \9 T! u
  852. BEQ Music_Track_Change_End
    % p9 f! T0 A6 U! F2 Y
  853. Music_Start_Song_Max( N; M3 D/ Y& o. M+ T
  854. LDA Music_Total
    / }( t; V' P# `7 C; A3 E
  855. STA <Music_Cur,X
    1 d+ @8 A0 y0 ~. L" a' d/ q
  856. Music_Track_Change_End! j7 j1 ~9 f& g" U( G
  857. RTS
    ! D  z5 `1 g, r) C1 t
  858. ! n0 k3 m& D0 J. [* c
  859. ;==============================5 e( u" }+ [- c) X& {
  860. ;按键处理1 d3 d! M( s3 q$ d  r+ S2 D/ {2 @0 |
  861. Key_Proc$ d4 q* d3 V9 d0 i5 d2 ?+ F
  862. JSR Key_Scan
    / t0 E9 i  ]  d3 R2 B9 K  L3 h
  863. LDA <Key_Keep
    7 @+ I+ _# u. K" ^8 v. s' u
  864. STA <Key_Temp6 [& i) l+ {, N
  865. JSR Key_Scan& q, q/ t( w% u" a0 @
  866. LDA <Key_Keep
      R4 p% f3 E. H9 p7 Q- c
  867. CMP <Key_Temp
    7 v2 x9 ~6 \* K& r5 W9 \& \- C
  868. BEQ Key_Get_Once  ^* s9 t% a- F9 R2 M7 C9 B) @1 p
  869. LDA <Key_Kemp0 y9 F0 }/ D/ D( [
  870. STA <Key_Keep% V& V! U5 ^/ c8 p0 [/ ~' P- X
  871. Key_Get_Once
    4 E" {4 b/ t; X" q' N' K
  872. TAY
    4 U0 ]3 D: p2 D% h7 T+ i- h
  873. EOR Key_Kemp
    ; o9 X% R( \1 Y, r
  874. AND <Key_Keep1 j1 o  L/ {5 G9 B
  875. STA <Key_Once) {/ }2 ]3 v! d/ r$ k6 G+ b. ]6 _0 m
  876. STY <Key_Kemp2 \) O4 i' ?+ g' F$ n
  877. RTS
    2 O2 T. \- R  O8 N7 T
  878. ;------------------------------: j$ ?" B: w  f
  879. ;按键扫描
    4 y9 K8 |2 q; f! m8 Y
  880. Key_Scan* ~  L" X$ ~6 F0 _+ R) t1 s1 e
  881. LDX #$012 X( Q+ C* L% ]$ p2 C
  882. STX JOY1_FRAME9 ]: |, `9 v9 T1 o" Q: l) l4 z
  883. DEX
    4 N, o+ }$ V! B( d! G0 a% S
  884. STX JOY1_FRAME" B5 }  \% F5 i  r8 e
  885. LDX #$08
    ) K% W* o( c, m/ J6 `( I. u" k( @5 R
  886. Key_Value
    * h4 M. l; G* E+ D7 P
  887. LDA JOY1_FRAME
    ( ]8 a! P  a4 T! X
  888. STA <Key_Getv( P- O8 ?5 i7 v/ y
  889. LSR A
    6 F$ ?: M3 i$ N3 i3 j: @" O" K! `
  890. ORA <Key_Getv
    7 v$ j- n5 u. ?
  891. LSR A
    4 S5 F* j) ^! c) |8 f' P5 O0 ?
  892. ROL <Key_Keep
    " L: J5 x6 O0 U: H
  893. DEX
    8 a* K0 K! B7 f2 r1 ~
  894. BNE Key_Value" |: K, p7 ?5 O( p9 h3 U
  895. RTS
    0 Z; U7 {* I8 x/ r: R

  896. * W  T0 v& Z9 ]. Y
  897. ;==============================, e. g7 `* O" J- B2 c; g# H
  898. .IF SOUND_BAR_SHOW_ENABLE& U. V& A8 ~3 M
  899. ;音乐条显示4 K& \1 S3 X' r$ P1 q; x. d
  900. Music_Vision
    2 M: t* h. T) A1 h; r4 Y4 p
  901. LDA <Text_Disable_Flag
    $ ?1 y) |: ~" {! z/ h1 S# X2 J
  902. AND #TEXT_DISABLE_ITEM
    " h% E- O- Z1 g* T  A/ k1 g! [9 C4 }
  903. BNE Music_Vision_End
    0 q+ n$ w3 ?% a
  904. AND #TEXT_DISABLE_BAR# P& B3 D  b4 m& ?
  905. BNE Music_Vision_Set
    ( ^' v" e* g) _  d  O. b) l. W
  906. LDX PPU_Cur/ d$ w) v. d5 t5 a
  907. JSR Music_Animation1 F8 E5 u4 M0 j
  908. STX PPU_Cur. P. ]3 l( f- L
  909. Music_Vision_Set
    % v0 j2 v9 i/ w% v5 m0 A/ d
  910. LDA <Text_Disable_Flag0 H0 h' T6 C0 k7 I( R& W# Y
  911. AND #TEXT_DISABLE_BAR ^ $FF  C; k! E% E% p2 F* \7 m* [" I9 \/ a
  912. STA <Text_Disable_Flag
    : z; w2 Y8 ^7 Z  T  g) e( U
  913. Music_Vision_End( P' W6 R0 D( P5 Q- r3 q4 B5 G; ?; p
  914. RTS
    " G7 Z, O, m* s+ W$ f- o5 a3 C
  915. ;------------------------------
    ; p" X* F  i* b7 Q0 l
  916. ;音乐条显示处理  h0 r: J3 M+ e8 l
  917. Music_Animation8 S+ `% d% f( X7 G
  918. LDA #PPU_MODE_CNT_LINE
    + t1 A8 e6 V0 \0 O
  919. STA PPU_Addr,X5 D# l- X( U- D0 O* W3 ~) G" Q4 V& D0 @
  920. INX' ?4 f! F1 t) B3 ~3 i4 X
  921. LDA #HIGH(Sound_Bar_Pos)2 ^5 A  v0 @0 r
  922. STA PPU_Addr,X
    - u$ H( _# k- B; L& _3 J
  923. INX
    * B% |9 k: O8 X2 I% R5 e- X
  924. LDA #LOW(Sound_Bar_Pos)
    * f! F0 ]2 N+ E+ A0 _; L
  925. STA PPU_Addr,X! ~- @2 `' @  _. r
  926. INX
    ) n( `5 f1 k# x. G3 R
  927. LDA #$08
    ' O/ o* v& e) L' P% Y) _: b* F4 y
  928. STA PPU_Addr,X4 T9 {. t* p; i! ^3 U
  929. INX
    ) I  _8 f! A6 p! u. o# G
  930. LDA Sound_Bar
    : A4 e9 r0 u: I1 x0 j0 n
  931. JSR Volume_Convert+ S6 {! B6 V$ k% z, O
  932. - ?, Q+ _7 _% L% r% _9 \0 x8 E
  933. JSR Volume_Set_Cnt7 U: T' n3 t4 G7 m0 B
  934. LDA Sound_Bar+$4" ?+ \& e' h; S) Z* A, m
  935. JSR Volume_Convert
    6 A/ x9 F6 L6 s  u. X' `+ N% U
  936. 9 g( B/ B, b1 ]' ]& Z
  937. JSR Volume_Set_Cnt
    % X! s1 E# t& T* T  T
  938. LDA Sound_Bar+$8
    9 p1 u" M% z& N" D) N# _9 [+ R
  939. JSR Volume_Convert) k' {3 }% i: t5 I* K; b
  940. ' K2 q" `1 G; t2 Z, o
  941. JSR Volume_Set_Cnt0 f3 s$ B* j7 A* b
  942. LDA Sound_Bar+$C
    ; j/ ~3 S7 }& n" G
  943. JSR Volume_Convert1 M' O! q9 F4 C$ A* K8 X

  944. ) t* a1 n! v! R* S; D5 _5 V
  945. JSR Volume_Set_Cnt
    # N' c- B' i7 S% l$ H9 ~

  946. : x! B* X' S4 d4 d. Q& j3 x6 C! ~
  947. LDY #$10
    ( _9 C! E, Z/ g2 j0 ?  A
  948. LDA APU_STATUS+ {3 K0 `1 I1 V  C/ n' e
  949. AND #$102 t  E, o6 c& o3 G
  950. BNE Volume_Count* J) C6 V) y! X# Z( G3 @5 t
  951. LDY #$006 B. Q4 z1 ]. L* z
  952. BEQ Volume_Count# D6 E5 W8 i+ R# P7 [, d5 b3 c
  953. ( q5 u# p2 G6 n, L- M
  954. ;------------------------------" b1 C- L) _$ o; C% Q
  955. ;音乐条处理
    0 o8 m$ R: ^1 x) I
  956. Volume_Convert$ y5 k+ _" I) {8 S7 n; J* p
  957. AND #$0F
    2 j/ @3 v/ R9 W" n& c
  958. TAY& q) i* c5 }1 @3 @6 q
  959. Volume_Count
    $ m) S& V( r6 H0 J& L# o6 p7 ]9 i
  960. LDA #$08
    ! E: F* l2 i0 S* I' N
  961. STA Sound_Bar_Cnt  v4 e  ~) f9 ]
  962. Volume_FILL
    / J) p0 ?9 l0 \1 v$ c7 P" Z7 `
  963. DEY" Q% o4 W& r# M; j2 `. V
  964. BEQ Volume_Half. o, m' j( w0 V# ]& A# Z+ T
  965. BMI Volume_Empty6 N% t/ v$ I8 O# D; N5 q6 Q
  966. DEY
    + w% L0 i9 Q: _" p2 m
  967. Volume_Full
    $ z. ]! P4 L# i- ^4 u
  968. LDA #$16
    " {* O/ j' e3 H% Z
  969. BNE Volume_PPU
    + N) N/ h9 A$ m% N1 Q- J
  970. Volume_Half2 B, H& d4 W2 c3 q! W  e- u. i
  971. LDA #$152 X3 @5 V* D4 d2 c& @+ S* I
  972. BNE Volume_PPU0 Y7 H1 w& n. }" X  f5 \
  973. Volume_Empty! z$ @' _3 G# L* N3 p6 f
  974. LDA #$14
    ! A0 }( r2 t9 u
  975. Volume_PPU
    6 M+ @' N; V- v1 Q: f& n: |
  976. STA PPU_Addr,X# O) _6 [) V+ p
  977. INX
    * q* h) {9 |: G: N1 O% `
  978. DEC Sound_Bar_Cnt* S( ?% Q* J/ U. {9 ?
  979. BNE Volume_FILL
    4 Z% R# E; [, `" X2 d
  980. RTS
    1 t- p# I' k  O  R

  981. , H. P) K9 \7 h$ _' z
  982. Volume_Set_Cnt/ C: `- o8 P, ~, d: k4 k2 n) H
  983. LDA #PPU_MODE_CNT_LINE_NEXT
    5 j% E4 @: q) S% v* N
  984. STA PPU_Addr,X
    7 m' ~1 H" ]; B& n: c* |7 m  h7 O
  985. INX
    8 q9 u& G, l  i$ y
  986. LDA #$08* h4 W6 l7 g. _4 ?: A. Y
  987. STA PPU_Addr,X7 X4 z1 |, O) }& }  y
  988. INX3 x; K3 d# H; H+ T1 ?2 A* A/ C8 b
  989. RTS
    4 i1 j' `* U6 S, N2 U1 ~

  990. 8 Z% v$ Y4 ~8 W' Y" D: c. G. u  ]9 Y. t
  991. .ENDIF
    - u0 F5 Q8 c( Z# u1 y
  992. 6 S1 o* q% ^  p8 @0 K
  993. ;==============================
    $ P, D* p  B  I$ D$ H; J6 x' T7 Q
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入. I, s* ?- q2 ^% Q- F2 `6 l
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式1 ]+ r7 r+ P6 X7 ?3 D, L4 }! w
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除
    " @6 I. ?5 y2 ~' r1 t' F
  997. ;------------------------------' k0 @/ I0 f! i' G
  998. ;PPU处理% F& |' R5 n/ `- P
  999. PPU_Proc
    ( Q2 ?( j7 s* h! x  B
  1000. LDX PPU_Cur
    ' @, T1 \0 \/ V" _
  1001. LDA #$00, S& ^) D/ ?, l, G! w
  1002. STA PPU_Cur* D8 o8 y% m/ h
  1003. STA PPU_Addr,X
    8 Z) o  M8 s5 S6 t; z0 J3 n% F% v
  1004. LDA PPU_Addr
    $ h) F* A& x( Y1 F3 O
  1005. BNE PPU_Proc_Beg8 U, _3 s  P: _1 s( l
  1006. PPU_Proc_Ret
    * ^; i7 O' K! R* U4 E
  1007. RTS8 @9 \, R+ ]5 {

  1008. / H& R5 l0 D& `: V) t- i  m
  1009. ;------------------------------. x) O% v1 c5 g( ~
  1010. PPU_Mode_Return_Cnt  ;转下行模式
    & E" q8 m' k6 M/ A% Y
  1011. INX8 r( F2 E5 h% l/ g. a
  1012. LDA PPU_Addr_L
    9 g$ O' \& K( T5 [9 D$ I$ m9 \
  1013. CLC
    7 [( y+ v9 X. r- e. A* Q
  1014. ADC #$20
    8 p+ g. n3 L9 u( r& t, l% c
  1015. STA PPU_Addr_L
    ) @- H8 l3 D) X
  1016. BCC PPU_Mode_Return_Cnt_End
    9 j2 l6 Q1 ]# N6 h1 y1 S0 g+ K
  1017. INC PPU_Addr_H: a! m, |/ H' K, v
  1018. PPU_Mode_Return_Cnt_End
    ' v4 a4 d3 I" A! g3 N0 G% l
  1019. LDA PPU_Addr_H" g4 w! ^7 Y1 S& m2 i& E0 ?
  1020. STA PPU_ADDRESS, v2 M+ T* T) u1 [
  1021. LDA PPU_Addr_L
    9 ^4 B0 t( D- w% K6 }
  1022. STA PPU_ADDRESS
    0 t* }2 w. H  J
  1023. LDA PPU_Addr,X$ K2 h' u* ~" C; j' n
  1024. TAY
    % m9 q. r; d5 ?1 ]" o
  1025. PPU_Mode_Return_Cnt_Write4 d% j- j4 Y% \$ m. |' t0 _2 W* Q
  1026. INX* ?+ d3 ~0 u4 b& J6 n9 p% s9 Y
  1027. LDA PPU_Addr,X# Y, }+ p! ~# V  `, x! P/ l
  1028. STA PPU_DATA
    3 S/ G) a3 M8 B3 c5 @
  1029. DEY0 x* w8 D7 c- N- G  O; E& A/ ?
  1030. BNE PPU_Mode_Return_Cnt_Write
    8 b: c: W  V% Q! Z8 ]
  1031. JMP PPU_Proc_End0 `& @0 w3 A9 z# I
  1032. ! Z* R& Z- C5 i( `7 s4 B! A2 ~& D
  1033. ;------------------------------
    ! r; Q" m# w/ F
  1034. PPU_Proc_Beg  ;处理开始9 z& Q/ O7 g; I# A! k: j; Z
  1035. LDX #$00  ^( F% x" E* V& k: k3 _; V# Q! Q0 ^) T
  1036. STX PPU_MASK
    ! x' n: [0 D% ^9 G$ U5 Q3 }
  1037. ;------------------------------
    6 ^4 h" F7 f  @$ i2 [: [
  1038. PPU_Mode_Select  ;模式选择
    $ o" Q# ~5 G+ E
  1039. LDA PPU_Addr,X% w& x# P, ?2 ]- \! ?* [
  1040. CMP #PPU_MODE_CNT_CLEAR
    ) y3 S0 n! m+ q2 U3 }
  1041. BEQ PPU_Proc_Clear
    2 A  l; D% K9 @" t! C
  1042. CMP #PPU_MODE_CNT_LINE
    ! A' |0 m4 y/ [
  1043. BEQ PPU_Proc_Cnt_Line$ b3 F5 S5 U. r2 [- K! N0 F, [& H
  1044. CMP #PPU_MODE_CNT_LINE_NEXT
    / z; T8 J+ N7 z# ?) r0 Z4 }, G
  1045. BEQ PPU_Mode_Return_Cnt9 z0 ~5 k* K$ r( L& [
  1046. JMP PPU_Proc_End_Write
    % P7 m. C3 T2 `2 F9 Q4 R" C2 c
  1047. ;------------------------------6 b, ]- ^, ]" f% t: y, x& [' @
  1048. PPU_Proc_End  ;单行写入结束) l% @. r" T* Y! p; n
  1049. INX: A2 P7 \/ ~! k- l0 S
  1050. LDA PPU_Addr,X
    4 V) Y5 E4 c' b7 t
  1051. BNE PPU_Mode_Select4 r7 y$ }5 m1 g8 M
  1052. STA PPU_Addr
    5 E  k6 N0 E4 Y5 D* P
  1053. JSR Update_Palette_Color
    ' N" R" T0 N; N2 r9 S" l
  1054. 9 K6 C' Z: @0 y2 D& C2 C' r
  1055. PPU_Proc_End_Write
    3 [$ K1 @4 L& N; M6 b/ O8 {( D
  1056. LDA #$006 z8 L) n! N, R/ g
  1057. STA PPU_ADDRESS1 `! {8 I$ l1 W" Q2 `0 o4 N
  1058. STA PPU_ADDRESS" d" u, S5 z) O6 a+ `$ R1 V( J
  1059. LDA <Text_Disable_Flag
    , o2 Y6 W6 ]6 b9 w; B- S
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    0 C  K3 d8 b6 Z4 ?* x
  1061. STA <Text_Disable_Flag
    6 \! q. \. S* [" z
  1062. LDA #Scroll_X
    4 o5 C6 j( Z' X; A$ E
  1063. STA PPU_SCROLL$ z1 o: a/ @& r* Q9 N6 ?
  1064. LDA #Scroll_Y. S8 S, a1 s. z7 K5 b" O" d1 P
  1065. STA PPU_SCROLL
    " D2 ^6 ]- |, ?4 t
  1066. LDA Screen_State
    - E: n( {% B+ r0 J$ {
  1067. STA PPU_MASK
    ; U6 }+ y) j% _4 Z. W2 e# z5 R. b
  1068. RTS
    5 E; p' I% U# U* a3 p% C
  1069. : p: y+ q  o- d1 J# o2 c% h$ V$ t
  1070. PPU_Proc_Clear
      x) \$ H0 \+ q! r% ?7 E6 j$ I
  1071. INX( {: y( r: y5 Q9 s0 v5 Q
  1072. LDA PPU_Addr,X
    % `3 [0 F* G7 H0 i6 C/ V
  1073. STA PPU_ADDRESS
    + c+ h: a" ~8 P% o
  1074. INX4 l  c$ [1 \1 Z4 b8 N" n
  1075. LDA PPU_Addr,X: p8 }" f$ p3 |6 O
  1076. STA PPU_ADDRESS
    * F( g( V6 J' l
  1077. INX
    0 A% K$ s. Y) N$ M: v! ~$ K5 Y
  1078. LDY PPU_Addr,X
    : D  A/ G2 V+ g
  1079. LDA #$000 W$ x& k& X( B% G$ s% x( }9 `: W
  1080. PPU_Proc_Clear_Write
    $ G3 p; E$ v2 c
  1081. STA PPU_DATA/ {9 N9 j7 k' N4 k: M
  1082. DEY
    " @; y& k8 D) A: q
  1083. BNE PPU_Proc_Clear_Write7 n3 R1 _& \$ O' r+ D. J0 k
  1084. JMP PPU_Proc_End
    3 @* K3 b$ d, U4 {
  1085. " f/ h8 b# d# ?0 [1 a
  1086. PPU_Proc_Cnt_Line
    . W3 w; o$ j/ K& n5 E7 |" b% o  J( `
  1087. INX
    $ J5 n. d" o$ g! `# q) |" K+ ~
  1088. LDA PPU_Addr,X
    & o; M, h( n( U) C0 [6 M
  1089. STA PPU_Addr_H
    , T' K( T4 s0 X, _% X5 H
  1090. STA PPU_ADDRESS! {! i  x( O: r
  1091. INX4 e9 m; b/ ?9 y9 C, p/ F
  1092. LDA PPU_Addr,X
    2 [2 ?3 e5 Q9 @4 a2 C! Y
  1093. STA PPU_Addr_L
    2 Z; |/ }+ `- l- F" o
  1094. STA PPU_ADDRESS1 D/ c- ~+ x; w( t+ r+ |
  1095. INX
    0 V  d0 Q$ `2 ^! z' u, A/ K
  1096. LDY PPU_Addr,X6 e. P" c& U) J. z* ]
  1097. PPU_Proc_Cnt_Line_Write) H; n1 @  R4 Z$ ?, l4 I
  1098. INX; }( q$ v6 S( J! ?
  1099. LDA PPU_Addr,X' L1 N  y% ]7 I- w
  1100. STA PPU_DATA
    & L  @5 l3 w2 |
  1101. DEY
    + m) w  s1 m( p, o3 m
  1102. BNE PPU_Proc_Cnt_Line_Write1 z. e4 X1 R: ~+ {) p1 o
  1103. JMP PPU_Proc_End, f( z. w( f4 [  Q( _  B8 z
  1104. , M# j  T1 {$ f8 G/ E
  1105. ;==============================8 S  q2 _% N/ p
  1106. HEX_To_Dec;十六进制转十进制
    0 u/ v" _- f3 J. S8 y1 U5 O9 C2 V
  1107. STA <HEX_Data
    ! {. g% P, N. z8 [. L" R
  1108. PHA
    , Y' H) \) V: ~
  1109. TXA
    1 R& i# G& p6 O3 z: J0 z( W
  1110. PHA2 }3 d8 B, W: `( |+ N
  1111. LDX #$00. R- X7 _5 x  x9 C: g# y$ R
  1112. LDA #$00
    , S' `6 G8 [3 B) T5 U" `. A, h
  1113. HEX_Cln/ U' U: H1 s! [% H- d3 r
  1114. STA <DEC_H,X6 y& C$ c4 a  K& Q9 I' E2 W$ ?
  1115. INX0 R2 C4 r& m: o7 }+ a
  1116. CPX #$03
    , a( Z. i  d" r
  1117. BCC HEX_Cln
    - F0 c% P% A- V& a
  1118. LDA <HEX_Data+ n- [  {8 ?1 K. Z
  1119. ;------------------------------1 X  F. n7 x# }
  1120. HEX_1001 V8 h0 n  U/ {5 ~# V
  1121. CMP #100
    * `2 P' k; e7 F# j/ j0 J4 x
  1122. BCC HEX_10# ~+ j, b9 n* i  \- @
  1123. SEC5 q8 J2 o0 [  c
  1124. SBC #100
    * B9 j5 S- C# P# U
  1125. INC <DEC_H: u8 j; g% U* q5 B- q- X
  1126. BNE HEX_100
    7 K2 O' x6 |: M5 W8 A/ s
  1127. ;------------------------------
    . F& b$ g: z7 P
  1128. HEX_10
    ; D7 t1 O3 M9 S! r6 V& s+ Q
  1129. CMP #10- ^% ~; h$ @, @0 ~4 ^: r
  1130. BCC HEX_1
    0 c2 Z9 Z4 S1 T9 o4 W
  1131. SEC
    + D8 A- u+ Z: u% f  X
  1132. SBC #107 E1 D+ f1 o6 u
  1133. INC <DEC_T( ?: O# c$ P$ f0 j9 p' B$ _* y
  1134. BNE HEX_10. j2 h! H( K# C+ \
  1135. ;------------------------------
    : d; `$ s3 ~9 k# Y) d0 e8 c0 g
  1136. HEX_1! P# W& t/ c" ?9 @  M; E) ^( R1 ~
  1137. STA <DEC_L
      a) a" r8 C. N" m2 i# }
  1138. PLA
    8 |7 Y( ?4 l1 S  S) E7 W
  1139. TAX
    * p9 }/ o2 k/ c; \# A$ f/ z2 l
  1140. PLA' q' d; n9 N' }8 E& @
  1141. RTS( I5 d* x1 h. C- s2 t

  1142. . {3 S3 i' f7 T8 x
  1143. ;==============================
    , x8 w1 e" z; I& z' {; V
  1144. ;音乐曲目显示* }: C% o4 p1 D& M  \' A  b( d
  1145. Music_Show# h9 g+ H% Y5 M3 U: w8 x
  1146. LDX <Music_Item_Cur
    ! d, h+ a3 b7 p/ n. t4 _. S
  1147. LDA <Music_Cur,X0 ?9 V, Q0 f. ]
  1148. CLC! m6 r: m' B' z
  1149. ADC #$01
    9 W3 S1 ]( p: R) I8 j3 C  U
  1150. JSR HEX_To_Dec# v" M% k+ t; L- K' D3 U0 ^
  1151. LDX PPU_Cur
    . E$ f# X: k' y& L; l( H- `
  1152. LDA #PPU_MODE_CNT_LINE) \, h" l+ P% L
  1153. STA PPU_Addr,X6 ~5 X6 D) f1 d& Z$ x2 O9 }; f+ a. V
  1154. INX3 ~! U( y: S* y* A
  1155. LDA #HIGH(Play_Index_Pos), e  K6 |* P8 O; [$ d0 S. Q
  1156. STA PPU_Addr,X
    $ \, D5 W! Y2 d
  1157. INX
    0 ?& {% _) n9 Y& W6 j3 I4 y+ u
  1158. LDA #LOW(Play_Index_Pos)
    6 i( Z  _' b5 w- r' F
  1159. STA PPU_Addr,X
    5 [/ K1 Y: h  F& y# _' D
  1160. INX4 c2 p. i6 ^0 h6 b1 u3 r7 Y
  1161. ( J% D; X6 N2 k5 M' y; Q: b
  1162. LDA #$07
    : K* [* C" ^( q/ P8 |
  1163. BNE Music_Show_Length' t; H" w) g8 Z' v2 }1 H

  1164. 3 j8 i% m6 q/ [
  1165. Music_Show_Length1 Q: D* l- p" Z/ E7 E; }/ T
  1166. STA PPU_Addr,X5 N" r& u5 W1 o5 W5 Z+ V
  1167. INX6 y; D; H8 }4 J: V4 I( C

  1168. ! w" i" C3 j! b" n# N$ y1 g" l
  1169. LDA <DEC_H
    2 S5 d  y+ E  P5 _8 Q+ E
  1170. ORA #'0'8 i% q6 E6 o, U* P; F7 v: ]
  1171. STA PPU_Addr,X5 r7 o- _3 y2 x, H% |0 I8 X9 y) t/ Y
  1172. INX+ z' b9 j6 \% f. N' \- W

  1173. 8 a* y$ J+ H; g7 D+ I
  1174. LDA <DEC_T  A! I2 j' q& v0 x/ J
  1175. ORA #'0'
    ( Q  B- ^6 ?/ p& z. V, [
  1176. STA PPU_Addr,X
    2 o  ]7 m/ A3 O5 W  {( S& c
  1177. INX* I. E) c# d. w9 x4 {3 V- ^6 U: |
  1178. 5 }9 C# b, u" A. X' \9 Z
  1179. LDA <DEC_L/ P, R5 f  }1 b8 H
  1180. ORA #'0'& Y4 i2 X% r+ a( ?
  1181. STA PPU_Addr,X
    . d& ^6 G$ ?: l+ Q& D" h. ^
  1182. INX" q# w9 U1 b9 h! l/ m
  1183. % Q% J+ _2 _0 K& X
  1184. LDA #'/'
    , Q1 v" B# Y/ \3 B) ]2 h% }, f
  1185. STA PPU_Addr,X8 g: |5 Q- b3 h) D; h9 a
  1186. INX; `) ?8 W. U! D9 A. P1 A2 _" V
  1187. Music_Show_Total* u6 I1 g( l* g. x
  1188. LDA Music_Total
    $ I  r1 s4 Y. C3 S- l2 y5 F# \0 \
  1189. CLC
    8 N+ Y' R- d8 ~, Y. W
  1190. ADC #$01; @. N/ z) {3 C
  1191. JSR HEX_To_Dec
      R0 y/ R  W3 a
  1192. * N+ O4 F& ^2 J; Z$ L
  1193. LDA <DEC_H
    6 \6 B7 i; S  y) V5 F) ?/ p
  1194. ORA #'0'
      }) q. U5 ?; Q4 q
  1195. STA PPU_Addr,X, v: y+ \/ a4 T) [6 [
  1196. INX
    ! a! y% A$ u1 p) g  r
  1197. 6 j# `9 F" {) E, x: B/ B
  1198. LDA <DEC_T; C/ x& H0 R  Q5 U8 y; K
  1199. ORA #'0'
    ' @5 _* ]2 ], H8 i  O2 ]: ?
  1200. STA PPU_Addr,X5 i& Y. k3 [% c# N! Q! P
  1201. INX
    ; P  U3 u, s' P# y, R/ `. ]; a

  1202. . n8 ]$ C- j& ]+ [3 R( a5 @
  1203. LDA <DEC_L4 o1 D$ E! _* i, f/ j) n) R
  1204. ORA #'0'; D. p$ e3 @+ b3 j
  1205. STA PPU_Addr,X
    - G; r) }( U! ~# I  K
  1206. INX8 F0 X% j! A. g* p/ f9 h( \

  1207. 6 S2 u  w/ B# R% P) c- k1 C0 o
  1208. STX PPU_Cur& s2 r9 v$ q  i" h6 q6 P. \9 S) e
  1209. Music_Show_End
    : I8 f0 E. B8 X# a) m( @
  1210. RTS
    2 c$ T. U% {, }' H3 K

  1211. * O/ \8 H8 q7 q
  1212. ;==============================: f' [/ R% o9 [
  1213. Time_Show;播放时间显示
    3 _6 Q& n0 R) G8 h+ T) I+ u/ J
  1214. LDA <Text_Disable_Flag4 n+ M. D" s1 D: ?2 }
  1215. AND #TEXT_DISABLE_ITEM
    ) r# e% ]2 m$ o& m) G
  1216. BNE Time_Show_End6 L3 e, _3 G+ a1 T: Q7 `8 r" o4 o/ f; [
  1217. AND #TEXT_DISABLE_TIME
    2 }! N0 k4 A0 k7 e3 z  @# g
  1218. BNE Time_Show_Enable
    7 U& z& H6 T* [

  1219. " T+ ]! V6 E# D6 k0 ?2 m
  1220. LDX PPU_Cur
    6 n5 z7 J. V% n. C* ~9 U/ J
  1221. LDA #PPU_MODE_CNT_LINE' \  V  s4 \4 m5 D1 n5 x% t
  1222. STA PPU_Addr,X1 Q8 k+ O2 T3 s3 I# x$ p+ @* G
  1223. INX0 C3 u, }9 f- }0 u0 u6 j. m
  1224. LDA #HIGH(Play_Time_Pos)! h0 n4 D3 d% }9 k& U9 K; L
  1225. STA PPU_Addr,X
    % D& C0 E' L, _" c
  1226. INX* D3 x3 F* P% B% U4 c( d3 T, n# X
  1227. LDA #LOW(Play_Time_Pos)5 E( M. U& q) @* |1 T
  1228. STA PPU_Addr,X
    . a+ L: C/ ~1 O/ i& M. x" l
  1229. INX$ s  P# r. i& G+ O/ j
  1230. LDA #$082 [* Q1 g3 Z% U7 c! a
  1231. STA PPU_Addr,X% `. ?+ d! o. C0 z) B* L
  1232. INX+ X) I( K) e+ G- Q  u; ?; e
  1233. Time_Show_H
    " H: Q! J! @& s4 r6 J; v
  1234. LDA <Time_H- h1 J* h6 |9 N
  1235. JSR HEX_To_Dec
    1 C: E" d3 ?0 Q$ y' `
  1236. JSR Time_Digit
    4 G/ L# J% F+ N
  1237. LDA #':'
    ( c" S; j: w0 ?) ^& ]; }
  1238. STA PPU_Addr,X: N$ }9 W6 N0 @! L' F9 A8 j
  1239. INX
    , r. X' ?% b! p; i0 w
  1240. Time_Show_M
    ( Q: O& f9 u! F
  1241. LDA <Time_M
    3 d4 M/ _8 a2 w  g* P0 w
  1242. JSR HEX_To_Dec
    ! C  n5 F' \) I+ q+ {1 B1 b. I- x
  1243. JSR Time_Digit
    ' n* S1 u6 n3 y1 o( z6 s
  1244. LDA #':'
    8 O) T: J6 `, u2 _
  1245. STA PPU_Addr,X# @$ p# F. H2 W2 `
  1246. INX( c) i' E# j) j/ F/ P& ^& O( g4 Z
  1247. Time_Show_S( P, C; j+ Y* a& |: v3 \- ?
  1248. LDA <Time_S  f$ L6 e' s) W8 @) [1 Y  v6 P1 a
  1249. JSR HEX_To_Dec
    ' n1 e  w+ S$ N$ q% K9 S. n- o8 B
  1250. JSR Time_Digit
    % O' G! C# R8 g1 B$ m) N0 T  _
  1251. STX PPU_Cur
    3 O9 j  G3 T" m9 m/ d; [1 c3 C
  1252. Time_Show_Enable% g' Q1 G- c+ o, O" ^; w
  1253. LDA <Text_Disable_Flag0 f' @: d7 c+ w/ g
  1254. AND #TEXT_DISABLE_TIME ^ $FF
    + K/ ]7 w1 ?/ g, l9 G
  1255. STA <Text_Disable_Flag) O0 u4 x, r' u4 x/ z$ r; _8 W
  1256. Time_Show_End
      `6 I% j6 U( b6 x' D2 u& z0 P
  1257. RTS
    ' p$ y& u6 g4 }' y' Q# e& J% T- ]

  1258. - ^: D3 H4 {5 e2 {) d
  1259. Time_Digit
    # D' N5 ]5 X! }1 \$ {* c' I) g
  1260. LDA <DEC_T4 R5 c, e0 V6 c1 B1 h) X" [: A
  1261. ORA #'0'
    " ^/ C( y" g# M- W6 V' W) N% v
  1262. STA PPU_Addr,X; e/ T0 m  J0 [& h7 O
  1263. INX( _: B; q; J4 O9 }' o" I
  1264. LDA <DEC_L
    ( {' _/ G5 J: J& ]# y
  1265. ORA #'0'3 f( ^# o1 q- J+ A  Q
  1266. STA PPU_Addr,X
    * [$ x9 V; ~- r) Z3 N& ?5 B
  1267. INX
    2 }; m2 ?( z5 A4 Z0 ]) W; o5 P
  1268. RTS
    * L4 `5 q0 s# i5 a
  1269. ' v3 w) j. D8 {; n. u7 Z
  1270. ;==============================6 H" j( ]* ^. ~4 i* N' K5 k
  1271. Time_Count;计时
    8 o$ t# N& ?5 L% E2 l, a- N
  1272. LDA <Music_Stop_State
    5 U9 y1 [+ i* E: F) p0 b' ^+ ?
  1273. ORA <Time_Wait_Cnt
    % Z7 |& U5 {9 Z9 r- f$ t! ?
  1274. BNE Time_Count_End
    5 ?* f; y  _, x& M
  1275. INC <Time_Cnt3 Z1 [. h& o, \5 n2 H, X/ r. \- j2 r
  1276. LDA <Time_Cnt0 D; C) L) ^1 u8 Y; p. i
  1277. CMP #60
    3 b1 d1 i! y( J9 I, R* e& h! b
  1278. BCC Time_Count_End
    ; A' b& |' {# L1 X5 u: {/ G4 F/ J0 u
  1279. LDA #003 d% ~  _3 B- y! R, ^
  1280. STA <Time_Cnt5 z1 u! x5 m: L9 q5 Z2 O' B
  1281. INC <Time_S
    ; P" c+ i) b7 k+ u- X2 a

  1282. 7 {; h# S+ ^  s- n' ?0 g2 e7 ]
  1283. Time_S_Cnt  ?% F( |3 v: \- Y0 a- `
  1284. LDA <Time_S
    & ^& Q, N- L/ l0 F# b) I/ W0 j
  1285. CMP #60) \9 B6 t2 w) x) a0 i
  1286. BCC Time_Count_End
    ( v8 O, O$ o' P
  1287. LDA #009 I0 O2 v+ K7 h' M: t9 D
  1288. STA <Time_S! C  r3 q% a; J4 P
  1289. INC <Time_M
    ) [3 W6 P* A) C! D! p
  1290. % \' ]1 Z3 l) ~
  1291. Time_M_Cnt
      P5 L4 C6 ^( I% `- O+ W
  1292. LDA <Time_M: q. Q' x: M, V; o4 t
  1293. CMP #605 v7 F1 v; X8 b8 g9 _
  1294. BCC Time_Count_End) K/ s% _0 o, B4 o  e0 W9 L
  1295. LDA #006 a8 y2 N! x2 M# [5 b
  1296. STA <Time_M4 E* `! D5 o! H% p5 @
  1297. INC <Time_H: F* `/ f2 p% e' X! C9 o* _' g
  1298. , f. I5 O; P( j! T7 E7 ?7 e
  1299. Time_H_Cnt  S; }* D5 v$ d
  1300. LDA <Time_H
    / y! J# l- V; Y# `
  1301. CMP #24; K2 Z1 c' O6 P0 ~3 I
  1302. BCC Time_Count_End3 f" g6 {, S# s- ^5 ^' O6 F
  1303. LDA #00
    ) j8 x- E3 B+ q; H( K0 Z4 X
  1304. STA <Time_H. p# \  R8 u5 U7 r2 Z

  1305. 9 M9 I* r7 j# i- M$ m# s- S
  1306. Time_Count_End
    - w. r$ T$ K. ^( H) e$ G5 d6 ?. y1 U
  1307. RTS
    0 Q' T5 ?& y* o% W0 X
  1308. ) a  S* z2 Z4 q* a! D  G! @
  1309. ;==============================+ ?" |  f3 L& _# S9 b) v
  1310. Time_ReSet;播放时间重置
    , X+ m8 g: r5 {# C+ E+ U5 A
  1311. LDA #$00
    $ H" x2 u+ c8 T5 u5 H9 G. o
  1312. STA <Time_S9 k, m" M0 \+ d2 G$ {" Y2 ^6 Y
  1313. STA <Time_M + f3 i- }9 s+ Y9 r$ d- a& R
  1314. STA <Time_H
    ! F( F& H+ `) w# _6 K0 A
  1315. STA <Time_Cnt8 ~9 u4 u4 Q) ^
  1316. RTS
    : q" u) C  `% i
  1317. ) T# b( R. U  I3 o" \3 h! i/ a
  1318. ;==============================
    5 ]4 z) @8 d! ]+ K9 L4 {1 m
  1319. Music_Bar_ReSet;音乐条重置9 b. b: K* i/ |* k  T, v. E
  1320. LDA #$00
    6 S* o  x( R; z. M! U# _
  1321. LDX #$00
    8 b$ W6 N! z1 H7 s' u, h5 m5 y
  1322. Music_Bar_ReSet_Set% d& Z0 k/ T0 z' G! D6 G' d
  1323. STA Sound_Bar,X, J- D2 p- E2 w. G
  1324. INX1 R4 P  `$ s, P( ]2 w2 _" ~
  1325. CPX #$10
    % W: D& u0 {( g( T( E
  1326. BCC Music_Bar_ReSet_Set& R' c% K' @5 m7 p" ]1 R
  1327. RTS+ L: N5 d: B2 t& o, N/ F% `+ B

  1328.   L8 [+ h4 r* h/ ?: k4 _3 S2 p
  1329. ;==============================5 J1 {1 L- f& ^/ i3 w) }9 M# Z. f
  1330. PPU_Data;PPU数据写入
    # j, m1 |$ b! l6 B3 p  G* n0 M
  1331. STY <Data_L+ t$ T- e8 @" G/ A# M
  1332. STX <Data_H. s+ x9 ~* j5 s% ^
  1333. LDY #$FF5 w- j6 l3 N8 X+ _5 ~; k5 ]
  1334. LDX PPU_Cur
      b+ u- F, `, ]2 n
  1335. DEX
    , a7 Z0 A( U2 C' D. s: z
  1336. PPU_Data_Beg5 Q$ z1 G% ~' o1 a/ t7 _9 U3 {" Z
  1337. INX
    2 a- C* V) D5 y, ^/ g/ ^
  1338. INY8 ^! X6 X2 b8 R6 }# O/ S$ W' k
  1339. LDA [Data_L],Y
    7 F4 X7 ^/ A- n- E
  1340. STA PPU_Addr,X  b0 _) N- w6 R
  1341. BNE PPU_Data_Beg& `6 P& e8 \7 j$ }1 @" e
  1342. STX PPU_Cur) u0 e4 U: U2 ]# e8 J( S* Z
  1343. PPU_Data_End
    3 x' M' u2 d1 U0 A$ @; L  z  V
  1344. RTS4 L0 ?' ~! S$ _: L+ G9 \

  1345. 5 q) u3 W/ j# l
  1346. ;==============================$ [' W$ C  c, v: B" k8 E
  1347. Music_State_Show;播放状态显示% s  W1 I( r& m/ _' Z5 }5 |
  1348. LDA <Music_Stop_State& w& H4 Q% n' _: a- M1 d& i+ d
  1349. BEQ Music_State_Show_Play
    + H. G, X+ N! o: p1 v# A
  1350. Music_State_Show_Stop' x7 r4 o! W* I( }) H! K
  1351. LDY #LOW(Music_State_Stop)
    1 h* H; E! ~- ?) R, n
  1352. LDX #HIGH(Music_State_Stop)
    1 h' y6 p; a! j2 _
  1353. JSR PPU_Data
    ( M5 f/ f6 y( S* b
  1354. RTS
    / C+ ~6 S' n, b8 F( {
  1355. Music_State_Show_Play, G7 `8 m9 z- a9 H! t5 y, |4 |, ~
  1356. LDY #LOW(Music_State_Play)& R2 |" X/ F3 _
  1357. LDX #HIGH(Music_State_Play)9 z9 Y" _  _- M0 _( F8 ?
  1358. JSR PPU_Data
      h- H$ v( T6 B) d7 P3 q
  1359. RTS1 C, F2 @! f; J' _( o+ _

  1360. ) X) n# M5 f* y* Q, W  F6 P8 g
  1361. .IF SOUND_BAR_SHOW_ENABLE
    1 T' i: c% _7 Q! h
  1362. ;==============================7 l9 J3 ~" q+ c$ }: P  m. Y) h
  1363. Sound_Bar_Text_Set;标题与音乐条初始化5 P, Y6 \. j; x+ d% n8 y+ g
  1364. LDY #LOW(Sound_Bar_Text_Data)& u5 l, Y0 Z+ z# t; k
  1365. LDX #HIGH(Sound_Bar_Text_Data)$ h" G& F; W2 J( }/ m2 R
  1366. JSR PPU_Data+ c( E4 t) Y, \
  1367. RTS1 Y; o" A; t' ^, ]' R# @
  1368. + ]( \& q) z4 ]: J4 n
  1369. .ENDIF
    $ G* o& K0 l2 K5 f1 x
  1370. " f( a9 v( o- ]# H' |, I
  1371. ;==============================+ N! k8 j; {+ v3 d8 B9 R4 O
  1372. Set_NameTable_Attributes;设置命名表属性/ \* v" R2 i; B2 I" @
  1373. BIT PPU_STATUS& [' _& ]9 g  P4 b5 {
  1374. LDA #$23
    ( U7 s; J- _& p& j
  1375. STA PPU_ADDRESS
    % @6 K2 `) l. y/ z
  1376. LDA #$C0# U  {6 F* V/ Q& k
  1377. STA PPU_ADDRESS
    % V2 A$ X6 ~2 s4 `
  1378. LDX #$00
    % c! R5 s4 u) {6 B
  1379. Set_NameTable_Attributes_Write% r2 S  V$ ~9 L* e: J
  1380. LDA Palette_Attributes,X4 \  \) c  o6 h# P* v
  1381. STA PPU_DATA* ~9 b! t/ {5 s# n& a( \! _& Z( v7 c8 Z
  1382. INX
    9 E8 Z! Q7 O, A% j) G$ X
  1383. CPX #$409 h: M/ j! S# }2 [( G
  1384. BCC Set_NameTable_Attributes_Write
    ; X+ T& t1 L5 V6 N' r1 n) x6 `
  1385. RTS
    . S6 l% k# b9 v! Y# Y/ N4 @/ A
  1386. " B7 Z  |4 Q# U# H1 e* ~
  1387. ;==============================) a9 Q- i; M$ c( A8 _% G7 z6 C; C. P7 m
  1388. Set_Palette_Color;设置调色板数据. s+ I# A7 D" G  E$ T% Y7 `
  1389. BIT PPU_STATUS
    . S" r' b9 h6 e0 W9 Z8 X# f
  1390. LDA #$3F
    8 @. k! o3 u! c) E3 ^6 W
  1391. STA PPU_ADDRESS1 k7 V, R  p$ O" b0 e
  1392. LDA #$00- U: K9 d" T. m1 l
  1393. STA PPU_ADDRESS5 s+ q: [7 J1 F1 f0 s* D: f
  1394. LDX #$006 o- e3 j5 K( `' u
  1395. Set_Palette_Color_Write3 B! |( R! B6 e' S. h8 C9 \
  1396. LDA Palette_Data,X" A- }7 ?3 m9 `* T& ?
  1397. STA PPU_DATA
    - L6 c( v9 n; ]; r$ \; q% [5 f
  1398. INX
    3 H" x6 g2 f: o6 @% Z/ \! p
  1399. CPX #$20
    ' t: p+ K3 S/ c$ G: c  m8 k
  1400. BCC Set_Palette_Color_Write8 H6 L( z8 O0 |+ t4 T  D
  1401. RTS! l5 X: h" D. r/ O( X

  1402. - L" l4 \& B. i
  1403. ;==============================
    * L4 w9 k5 U! T9 Q3 z2 d
  1404. Init_Palette_Addr;初始化调色板数据
    7 b2 I1 P7 M5 [, @+ [. _; t
  1405. LDX #$00
    9 c0 W2 q' z* B' Q' D, r! T6 K
  1406. Init_Palette_Addr_Write, J/ o  J+ Q5 M5 N% N* F$ A
  1407. LDA Palette_Data,X+ G% P2 }2 `) x. `
  1408. STA Palette_Addr,X5 q  s$ _' v5 T% {3 [) `
  1409. INX
    - t1 Y# o2 F1 f; P) k
  1410. CPX #$20
    # w/ B% W: f4 R5 O) q! B2 H
  1411. BCC Init_Palette_Addr_Write  m( B; L; X0 g. e
  1412. RTS# j; K  I3 ^+ B) b; x

  1413. 1 ?/ m  v4 @1 N) I
  1414. ;==============================
    6 b/ V% `! b! }3 C1 E- P. [
  1415. Update_Palette_Color;更新调色板颜色
    : n5 C3 F$ w- v* c! O" Q! B
  1416. LDA <Palette_Update_Flag
    ' y( ?% b: w8 Q3 L, J
  1417. BEQ Update_Palette_Color_End: D) ]# X1 i( |
  1418. LDA #$3F  X5 f3 }- p* G# n
  1419. STA PPU_ADDRESS
    2 g  M; I9 C- a- i" S5 N9 {
  1420. LDA #$0C
    : t! _# o6 ^) J% _. O+ C. a
  1421. STA PPU_ADDRESS  {, p/ k& r! ~8 Z/ z
  1422. LDX #$0C
    ) Z1 ?% `8 _) ?$ i4 e! _; P
  1423. Update_Palette_Color_Write: x6 ~8 U$ D7 u3 z! x$ P# Q. s
  1424. LDA Palette_Addr,X
    . N; y+ s. a, x5 U4 T
  1425. STA PPU_DATA1 K+ V: q5 g: t  y; [3 ^
  1426. INX" K- Y& |" A5 Y, |
  1427. CPX #$14
    1 s  U8 |( X+ k8 a, K
  1428. BCC Update_Palette_Color_Write
    . |0 G# c; ~# [' @3 V
  1429. LDA #$00
    ! q( v1 L6 T6 h
  1430. STA <Palette_Update_Flag  d1 a$ E8 m5 Q7 `
  1431. Update_Palette_Color_End
    * {6 T0 L# ]: E1 D; t, l
  1432. RTS0 V0 S' }; J; F7 s# H
  1433. % w& {* K  h9 J% v% g  m

  1434. / u" V; J; }/ j8 u  K2 @0 c
  1435. Update_Sprite_Palette_Data: [" \# `) Y+ Z) k! \: E
  1436. .DB $210 W* X7 ~: Q4 l, s9 |  ?  C# w7 X
  1437. .DB $21% S9 d5 A5 G& N" I" x$ m: m* S
  1438. .DB $113 c/ ?+ y. s/ w# Z
  1439. .DB $01/ N# v6 z- o4 ]
  1440. .DB $01
      V  _- _' p$ J' D
  1441. .DB $11, h, z, y6 z5 X5 H) y
  1442. .DB $21
    ( y6 K1 A3 k3 \! b8 G
  1443. .DB $21! J) P+ X) L. B' X4 t5 _& I7 g6 l3 Q6 i
  1444. .DB $11) I: [7 h" `( `) J9 Q' R& C8 M
  1445. .DB $016 U$ M+ l3 S& K" z4 T
  1446. .DB $11& {8 m5 m3 ?: v/ o
  1447. .DB $21; w) ?8 M( R: N. B5 Y4 n% e
  1448. .DB $21
    4 I, L; Y9 P5 ]* X: D2 r
  1449. .DB $11! R/ c4 H: I. _6 C" ]& K
  1450. .DB $01
    : q( d  p+ X. o; F+ r* q
  1451. .DB $11& F' R! P3 b4 n2 U8 X
  1452. ;==============================
      D0 a" P( ^3 |- r9 s/ F
  1453. Update_Palette_Data;更新调色板数据% S4 s4 ~7 a& ^! _9 M+ i! [. h
  1454. LDA Nmi_Time_Count
    - r% j3 f; q  w: E! w) r
  1455. AND #$08/ H  D( J! C: p; a: e
  1456. CMP #$084 o% L! G# y: [+ @3 _7 v
  1457. BNE Update_Bkg_Palette_Data
    : u2 \( r4 Y) E5 z

  1458. 9 v4 a* K% H" \: j3 D8 B
  1459. Update_Sprite_Palette_Data_Set) `1 f/ O  i8 |
  1460. LDA Nmi_Time_Count2 J: |( ~1 Z. O; c
  1461. LSR A- K) W! r* ]8 P) l
  1462. LSR A, U6 |2 y* g: O6 Y
  1463. LSR A
    " o8 _1 C9 _# h1 M. D6 H3 z
  1464. LSR A' B+ S2 B7 X+ @+ _# {
  1465. AND #$0F
    " G- ~6 z6 Z' Q3 Q
  1466. TAX) ^. `7 v" K5 e6 M6 N# J( A
  1467. LDA Update_Sprite_Palette_Data,X3 g/ X2 L3 J1 |' \6 _
  1468. STA Sprite_Palette_Update_Addr+ D. T% r+ B* M2 g9 h" W, H
  1469. LDA #$01+ Y  O: U; r3 x6 O) k6 g
  1470. STA <Palette_Update_Flag
    4 c( a, s7 i& c# n# W
  1471. 4 a, A, L& j4 J
  1472. Update_Bkg_Palette_Data
    - D5 E, `5 A& m- x/ Z
  1473. LDA <Text_Disable_Flag
    - c4 @, v( Z7 B& ]5 Y
  1474. AND #TEXT_DISABLE_RAM- B! K$ a6 x/ f, d# ~
  1475. BNE Update_Palette_Data_End
    0 @) V  u5 D" P% O% |/ C' z" e
  1476. LDA <Music_Stop_State: j8 O9 D, _9 w+ F- ?
  1477. BNE Update_Palette_Data_End  e& R4 n  k* H7 }' x2 \' F

  1478. ! ?. @* x8 L3 {4 n( _- D  T
  1479. Update_Palette_Data_Check
    $ B7 `( S  M; d: |. g+ j
  1480. LDA Palette_Wait_Cnt
    / w* o" B- A  `9 A
  1481. BPL Update_Palette_Data_Check_Over
    " a- Y' s& O; C) d
  1482. LDA #PALETTE_UPDATE_INTERVAL
    ; c- t/ R+ ?  [4 p" _; K  W! E
  1483. STA Palette_Wait_Cnt
      k+ G8 f, A8 g) ^/ ^' L( u0 K
  1484. Update_Palette_Data_Check_Over* P) R5 k6 U; r
  1485. DEC Palette_Wait_Cnt
    ! z! o& ]4 @) {' H7 n
  1486. BNE Update_Palette_Data_End2 L9 Y+ q9 ^) n* s' j- K
  1487. # }  b" [# g; V5 p, s4 ]$ e
  1488. LDA <Text_Disable_Flag
    5 ]- Q6 i( t. ~
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME5 |& A% C' h$ A  j0 {9 B8 \6 ^; B
  1490. STA Text_Disable_Flag
    1 c0 r% O/ P. x: ?; ]; \8 g
  1491. INC Palette_Update_Flag+ i2 c- A! e# I

  1492. ) ~: n; M1 f& W  o: J6 _8 ]! u
  1493. LDA #PALETTE_UPDATE_INTERVAL
    ' {4 {8 F+ x) w7 y
  1494. STA Palette_Wait_Cnt1 C; i, q  j. M

  1495. , x* W+ A( ~1 Y/ u0 c9 M: e
  1496. LDA Bkg_Palette_Update_Addr% D0 j( q* Y& M! w
  1497. CMP #PALETTE_UPDATE_MAX) r7 R3 ]. a+ Z  h( t
  1498. BNE Update_Bkg_Palette_Data_Set9 J- S, |$ ?- x7 g, i/ z
  1499. LDA #PALETTE_UPDATE_MIN - 1
    : h1 D& o5 O  H3 M' h# i
  1500. STA Bkg_Palette_Update_Addr
    / D! \# L3 l( u& V
  1501. Update_Bkg_Palette_Data_Set
    ; B* d  [, x  S! A( y, }* T: J; X4 S
  1502. INC Bkg_Palette_Update_Addr
    1 Y, s) [; f. ^& T! Q
  1503. 9 H2 V$ e# C5 X# t
  1504. Update_Palette_Data_End: q5 i" X8 ?) S" |
  1505. RTS# u- G: }( }) Q8 d
  1506. " ~8 u% i( A0 g" X; ?3 b+ d5 H
  1507. ;==============================
    ; ~7 [1 w, {; x2 g
  1508. Show_Music_Text;显示静态文本! B6 H, `" S' Y2 S3 r% i3 ]
  1509. LDX #$00  U  j1 v1 ]* x1 N: G
  1510. Show_Music_Text_Set
    : d$ g* S$ H6 d7 A4 x
  1511. LDA Static_Text_Data,X0 K) w6 \6 v4 o+ _+ R
  1512. STA <Data_L) S4 g5 G) \8 p' @" a7 C9 V
  1513. INX! j' R; `& n( ?7 _% W
  1514. LDA Static_Text_Data,X
    & I. j6 {: X/ d! k
  1515. STA <Data_H
    1 f  S8 b$ S9 ]& y, q6 h, D9 F
  1516. INX9 Y7 a7 }6 _/ A/ g% h: N
  1517. LDY #$005 {3 V# W- i! ?: L
  1518. LDA [Data_L],Y) q+ @$ z; D: H2 d; U; Y
  1519. STA <Data_Cnt2 @# T4 x1 R" |9 i! P* l
  1520. DEX5 I0 z0 b  S# }# d# m3 n
  1521. DEX
    . `7 ^8 b; L6 {8 W; G
  1522. LDA Static_Text_Pos,X1 ^7 j- H  a% O0 f& j
  1523. STA PPU_ADDRESS$ m. G' B! h3 ?
  1524. INX
    ! f2 p0 b' l/ d+ v5 t, v2 f
  1525. LDA #$204 }$ R$ I/ t- F
  1526. SEC
    & [' @2 O0 T: K* g' Y, F
  1527. SBC <Data_Cnt! G7 @2 e) O% T; ?2 y" A9 }0 A
  1528. LSR A! I1 H% @6 [# N) H" j" X* l9 G
  1529. STA <Data_Buf  J# o$ t" ]4 b7 F5 `
  1530. LDA Static_Text_Pos,X
    2 f9 c! {. [5 j' t" x2 k
  1531. AND #$E02 A. t, n1 S2 G: l6 Q
  1532. CLC. E( u; j9 o& @
  1533. ADC <Data_Buf9 V7 y0 {5 o- K
  1534. STA PPU_ADDRESS
    & h5 M1 o3 R+ V5 |2 n' R
  1535. INX
      E% `- U( J7 l" W' {; ~5 i* G
  1536. Show_Music_Text_Set_Write
    7 W  m  k9 }0 ?
  1537. INY
    ! r7 u6 O: d  K" h: P
  1538. LDA [Data_L],Y7 I$ f) B* ]2 x- `  c% l1 u3 }$ W
  1539. STA PPU_DATA
    % T4 Y8 T8 R1 N# a
  1540. DEC <Data_Cnt) e! L# I" P' }. e
  1541. BNE Show_Music_Text_Set_Write
    9 I( T7 U* A/ ?2 G* c8 b4 @
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos7 x3 p& Z* _: P, j4 q/ ~7 l
  1543. BCC Show_Music_Text_Set  V( E+ e$ `& G$ T" U
  1544. RTS7 o; R4 A3 H' p0 G% G1 L7 h

  1545. 2 m4 T5 ?% P" `/ ~
  1546. ;==============================
    ) i* H# a( j- s- z1 }
  1547. .IF Track_Name_Pos;显示曲目信息* T! o! D, B3 I! G! H
  1548. 1 @0 [3 F' W+ }. R
  1549. Clear_Track_Info
    ) M. ]: g. k; ^- F4 R
  1550. PHA
    $ G! D1 d' l0 D3 D1 g# j
  1551. LDX <Music_Item_Cur
      A4 X8 t$ N- G% U7 H8 D. }
  1552. LDA Track_Name_Addr_Flag,X; |8 o# }3 b, G# e5 k
  1553. BEQ Clear_Track_Info_End_Ex( i7 _6 Z% f1 y3 l3 Z3 f! T
  1554. PLA
    % {) E  _) A( U$ q; z* ]

  1555. " F- X+ o7 {, r
  1556. LDX PPU_Cur
      O8 R1 G2 M; p2 {
  1557. PHA( r* ^/ ]# G) m/ {; T4 x: C8 T
  1558. LDA #PPU_MODE_CNT_CLEAR
      h# D9 W+ g( n' m
  1559. STA PPU_Addr,X' ~$ P/ |: P7 L$ z0 b- `
  1560. INX
    ( a3 @' p, Y, x" [1 k# U8 I4 D
  1561. PLA
      R+ b( d1 H7 Y6 A0 [1 n
  1562. JSR Show_Get_Track_Name_Center_Pos1 |7 j. U9 L# T; L9 p% `1 l
  1563. STX PPU_Cur& U/ [2 N! [3 H
  1564. Clear_Track_Info_End/ R( d1 _, H) l* |, z
  1565. RTS; U' u8 d; y3 ]: }9 |- r
  1566. Clear_Track_Info_End_Ex
    : f) |. N! O, A
  1567. PLA
    0 S: I1 P% E; G+ E$ E8 Q5 T# z7 |
  1568. RTS
    3 u& L+ y( x* j' x
  1569. 4 F4 S/ i# E: e) e" i
  1570. Write_Track_Info& r) O+ l+ }- u- s! u
  1571. PHA
    5 g% {( s* q6 _
  1572. LDX <Music_Item_Cur
    $ U1 b4 E$ x" F/ ]9 K9 m
  1573. LDA Track_Name_Addr_Flag,X
    ! a  z7 P0 D2 N& p6 @
  1574. BEQ Write_Track_Info_End_Ex( n3 m0 y- O; R
  1575. PLA& {# ^4 ~' j/ x. M0 t! `: B
  1576. / Z1 \1 L* z8 j+ f+ ~
  1577. PHA* \. w4 g4 o# ~0 f
  1578. LDX PPU_Cur0 X5 G; D+ ~. k; W; {
  1579. LDA #PPU_MODE_CNT_LINE) {3 U7 u$ Y# i7 x6 h
  1580. STA PPU_Addr,X2 }& }9 m( {* T6 J3 J* V. Z' i
  1581. INX0 u: ~8 t& o8 S/ p
  1582. PLA4 Z+ H7 u9 z3 c* x( Y: O6 ~- I, x
  1583. JSR Show_Get_Track_Name_Center_Pos! n5 v4 }0 e  D" _$ D2 g) H/ u
  1584. Write_Track_Info_Data
    ; E" f1 J. q* p& K3 Q
  1585. INY0 c4 I5 j0 {; ~0 Q; s
  1586. LDA [Data_L],Y6 o; [2 ?) k6 P9 L
  1587. STA PPU_Addr,X
    , S& d  e  V) @1 [
  1588. INX
    ; o# m2 R. O* w6 x# A3 L2 b% w8 u
  1589. DEC <Data_Cnt/ v- k4 y# Q: @$ d0 k3 O' ?9 v; V
  1590. BNE Write_Track_Info_Data
    / Q3 B1 P0 S; u5 s8 v5 D6 s4 q* ^
  1591. STX PPU_Cur
    & }* L, t  I' B) d  I" ?
  1592. Write_Track_Info_End( ]9 w' h4 I% }1 Z6 p
  1593. RTS
    # V, O4 J9 e- I; ]/ O; A8 G
  1594. Write_Track_Info_End_Ex
    3 Q, h) H7 Y6 _) O/ k# h- d- a. R
  1595. PLA
    5 y) N( s) u3 j, ]# i
  1596. RTS
    & V2 O3 M" e; `
  1597. / G& _. {" ?/ [% ?* o
  1598. Show_Track_Info$ X( b4 m0 V% _. J" l5 T
  1599. Show_Track_Info_Clear
    5 ?( C5 v3 V& Y9 @
  1600. LDA <Music_Last+ x, W8 P: ^0 I: ~9 n1 I! X

  1601. 5 @1 M2 m$ l* m) N& h
  1602. JSR Clear_Track_Info
    % A* b/ a" l% x% r- o- }- S
  1603. 6 R& L' t9 o8 ~9 h, |6 O
  1604. LDX <Music_Item_Cur* W: c8 }3 y9 ^. ?3 h
  1605. LDA <Music_Cur,X
    3 W! w/ P) o3 J7 s3 S7 ?; p
  1606. JSR Write_Track_Info
    & d4 w: R! r# W5 u+ \. y# B
  1607. RTS
    7 g( d$ ^, y; ?7 d2 v
  1608. 7 x  S6 M% a1 e2 q% Q) H: ]) p
  1609. ;==============================
    / X2 D7 b1 @+ K  Z8 E
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置  r: y  F# ^2 j5 c0 ]) |

  1611. 7 S- j. r5 E9 J! j9 o
  1612. ;取出集合名索引* g. ^& y8 L; d. a
  1613. PHA  \4 O( r$ d) a" b
  1614. # N/ s% u" p6 A- }1 ?* a* ~0 M
  1615. LDA <Music_Item_Cur
    ) X% `! I) G1 P( A/ J
  1616. ASL A
    " b& x: z" k3 n- B
  1617. TAY. b+ U: N- d3 ^" o5 p2 Y2 S
  1618. LDA Track_Name_Addr_Port,Y
    " C+ S+ {# W2 W; R' p0 P
  1619. PHA1 I+ j! I: P) k- g+ n
  1620. INY% H  f4 d- K' n5 \. D# Y1 Z* m
  1621. LDA Track_Name_Addr_Port,Y" K! c1 F9 o, e
  1622. STA <Data_H
    ! F1 I2 u2 r8 J3 B% |2 U' g
  1623. PLA/ \4 @* D* X' S! H4 p
  1624. STA <Data_L$ H9 I6 b/ `6 X# Y6 d  S

  1625. 2 t5 z& ~& S+ D4 g: F
  1626. PLA* i1 n. j( C3 A7 K2 S( \

  1627. 2 [9 k) P# T$ V
  1628. ASL A
    * o8 C' J1 }& S9 \; P9 U
  1629. TAY$ D  G  T( g  q5 b0 T8 [
  1630. LDA [Data_L],Y7 m$ S/ C% Z3 [, x" e6 c0 a6 n9 s
  1631. PHA
    ' \# x, z9 R8 [0 m; Z4 @8 h* k! @% `
  1632. INY" q2 _! Z  F' e* I; Q4 u; C! r5 |
  1633. LDA [Data_L],Y2 y+ U/ a7 F7 Z( O! c
  1634. STA Data_H% e4 b" L( c9 w% R
  1635. PLA2 a& _" s8 F" `* {3 C
  1636. STA Data_L
    0 J; ^, P# M! N$ d+ h2 \* o
  1637. ( ]( `) N  F% g0 y3 i$ u
  1638. LDY #$00$ `; ^8 ?4 H' A+ d) Y  Q  m
  1639. LDA [Data_L],Y
    1 ]. Q/ ]& s' B% _8 f# ^' ~
  1640. STA <Data_Cnt
    # y# ]8 q, B  ^# t
  1641. LDA #$206 N% T( i0 T# Y8 z5 @8 D
  1642. SEC' [1 B& [4 |. O# H8 U  B% d
  1643. SBC <Data_Cnt  r& P" ]+ `6 C4 U6 J1 M' u
  1644. LSR A# d1 U+ r8 ^/ O4 X
  1645. STA <Data_Buf
    5 D9 {2 Q/ C" a) M% k8 E: O* y
  1646. LDA #HIGH(Track_Name_Pos)
    , d+ `5 d1 _- t% m
  1647. STA PPU_Addr,X  M! l/ L1 G: `, ]8 ?/ i6 y+ |
  1648. INX; c3 h+ k0 R! h6 I9 k
  1649. LDA #LOW(Track_Name_Pos)
    + @- p7 q: I' G" ]$ m
  1650. AND #$E0* h7 j; @3 s5 f  G
  1651. CLC
    " f- z- b7 q" ^9 q8 Z5 @( h
  1652. ADC <Data_Buf
    9 x# W+ O8 w+ r" h
  1653. STA PPU_Addr,X
    6 q9 C, i+ [! y8 R0 p7 i- g% A
  1654. INX" S8 h+ t0 p* t  v2 f+ h
  1655. LDA <Data_Cnt: a% O6 B: Y% e  Z$ s6 |
  1656. STA PPU_Addr,X
      Z+ ?8 y9 N) j1 A: Z; O
  1657. INX
    4 T6 i0 s) |0 e
  1658. Show_Get_Pos_Center_End' j# e7 M8 E9 E! q! p2 `; b0 i
  1659. RTS/ H; B; E; d6 ?; m) Z- U) B9 `/ G
  1660. .ENDIF4 I  b1 ^6 w6 L! I' [, d

  1661.   q5 ~4 h2 s3 e0 d, Z
  1662. ;==============================
    / j) b- V% W6 _
  1663. ;音乐端口清除
    7 r, s- @0 }8 R; e3 N4 K& t
  1664. Sound_Data_Clear; e1 G) L2 _2 L% c) x
  1665. JSR Sound_Port_Clear
    $ d7 n* f- H. M
  1666. JSR Sound_Ram_Clear. s& e" K4 K9 E) H$ j+ F
  1667. RTS
    . a7 p2 z! z& b. u2 u  X: M

  1668. 2 k) f% L! j) Y
  1669. ;==============================, f2 G& F7 b- |+ _
  1670. ;音乐端口清除# Q; G: ?( u  `! e  D2 J: J! [9 U
  1671. Sound_Port_Clear
    2 i' C0 E, E5 `/ K& e4 q
  1672. LDA #$00& b) i7 l2 W7 z
  1673. STA APU_STATUS" [+ R8 u- S" V; c
  1674. LDX #$00& @1 f: }! q  g2 @: w: O" F4 r/ Z7 y
  1675. Sound_Port_Clear_Write
    & l0 }; M: }) b" o5 r, l
  1676. STA $4000,X4 U" S8 |  Y8 l  Q$ Y( y
  1677. INX
    ( I/ x) G  ^) W1 f, ^
  1678. CPX #$14
    $ ?; u2 A$ o, X8 x
  1679. BCC Sound_Port_Clear_Write
      L7 [* R* G" s: H( r( f$ v- a) W
  1680. RTS
    - O0 N7 ~4 o1 R7 U6 s+ t
  1681. 5 |5 r9 {9 B9 q, L
  1682. ;==============================. D7 h, R( U0 v
  1683. Sound_Ram_Clear;RAM清除
    ' s! A: k* Y. f
  1684. LDX #$00/ e& O% l( @. F( A0 Y0 w
  1685. LDA #$005 N0 h9 o% ~7 g6 [# b2 k
  1686. Sound_Ram_Clear_10 v( ~. h4 x3 [& y$ w1 l' G$ f
  1687. STA Sound_Ram_Addr_1,X, b: t5 ]6 r% M& {0 y
  1688. INX# \* t% s7 _$ @
  1689. CPX #Sound_Ram_Addr_1_Size3 `/ w; v& t; k% k
  1690. BNE Sound_Ram_Clear_1) ~2 R8 t  V* J6 D0 s) K
  1691. LDX #$00
    ! c, v5 g) A* T, D! z( s- E- r$ I
  1692. Sound_Ram_Clear_20 M; L' T; P1 Z  H( ^2 B$ M
  1693. STA Sound_Ram_Addr_2,X: o' s4 K) |" l; C
  1694. INX, ~# ~" z, }) _3 [/ L8 ]: g% O
  1695. CPX #Sound_Ram_Addr_2_Size
    ; L/ n  J# E, H$ p
  1696. BNE Sound_Ram_Clear_23 C% b: |* i! O# `7 {6 E: N
  1697. LDX #$00
    5 Z8 U, H. C6 J% `
  1698. Sound_Ram_Clear_3
    # G3 b) C- o" ?" ]( M" B
  1699. STA Sound_Ram_Addr_3,X. d$ g) n$ M) _
  1700. INX2 p9 j$ b9 s6 [( R( n1 _  U
  1701. CPX #Sound_Ram_Addr_3_Size- s' e9 Y" {2 B# I
  1702. BNE Sound_Ram_Clear_3# z( W; M8 q" N9 Y
  1703. LDX #$009 ^1 K- i  J+ k; Y% c8 N
  1704. Sound_Ram_Clear_4
    7 m0 w0 ^6 S% Z2 g3 M0 ~
  1705. STA Sound_Ram_Addr_4,X% W5 \, \; p8 I' U! Q) G; m, {
  1706. INX
    ( m& ^- B- m1 E7 P0 }  t* j
  1707. CPX #Sound_Ram_Addr_4_Size
    $ `* b$ d0 J) k' W1 z) A+ t
  1708. BNE Sound_Ram_Clear_4
    " b5 @/ i2 p0 _, o- ~
  1709. Sound_Ram_Clear_5) `  Z! q4 V- I' L  c
  1710. STA Sound_Ram_Addr_5,X% W; o3 f& d  s! i" q- l
  1711. INX) K0 k5 m, c5 F: r- L. K0 q
  1712. CPX #Sound_Ram_Addr_5_Size
    3 R4 k4 R! w4 y/ s& S5 J$ m8 y
  1713. BNE Sound_Ram_Clear_5' Q) W/ i$ D( _' Y) C9 c/ J2 ^
  1714. RTS. H6 e  q1 ?0 ]

  1715. ( b* x+ c, i9 ?$ N" c* H: A, ^
  1716. Get_Music_Collection_Name3 U. o& v3 O: u7 \* W7 Q; v
  1717. PHA
    9 a: S$ M' t3 H8 u
  1718. LDA <Music_Item_Cur
    ' f) P: K# \6 t; |
  1719. ASL A
    8 u0 A& n1 j8 `7 y* X  ?1 H
  1720. TAY
    " p4 u, `' G3 |) l
  1721. LDA Music_Collection_Name,Y2 L! |5 \& y5 @
  1722. STA <Data_L
    + C) N/ ~! p2 R2 S
  1723. INY
      l; B3 ^% q" b1 y7 g9 W
  1724. LDA Music_Collection_Name,Y* k" l& R0 N' ~' V* s
  1725. STA <Data_H
    + q/ O0 D8 `. ]
  1726. PLA
    1 ^. c& P3 V; Y; U  X8 w, Z
  1727. RTS3 m6 A7 ~5 \. A6 O: b( Q1 d

  1728. 8 x6 M+ N% Y! i. q( q
  1729. Set_Sound_Total# A& B; E5 T$ x% B" j1 L
  1730. LDY <Music_Item_Cur" A. c8 }( A! |4 L% L4 `/ J
  1731. LDA Sound_Total_Port,Y) V& I2 E, M/ c& X$ ^: h
  1732. SEC
    ( J' R8 @. x( l! [4 u
  1733. SBC #$015 n; f$ B& N, ]# o; q6 \: l1 J
  1734. STA <Music_Total
    5 x$ W4 g3 F6 `5 w0 y( h5 t
  1735. RTS
    8 \( s8 A3 m+ h0 ^2 I8 c. n

  1736. 7 }7 a, g3 X0 N/ a+ [4 [
  1737. Get_Sound_Start
      {, u' O7 m' Q0 c0 I' }
  1738. LDY <Music_Item_Cur
    ! J" S5 X" d" L$ u' z' _/ X
  1739. LDA Sound_Start_Port,Y
    3 h3 N) X1 ~: \5 t: r% G5 ]0 o
  1740. RTS4 k  e* L, K& I, V3 v# q$ E
  1741. 1 g& u. G! h% Q2 Q# N
  1742. Set_Sound_Init_Port
    ' }" w4 r" R  Z' s% g3 ^
  1743. PHA! @9 D3 @. J2 h
  1744. LDA #$20  p$ g0 a* P% {8 N/ y, r: F% j* k, {
  1745. STA <JSR_Addr_Op( h4 j; y' I" }3 Z  s8 L
  1746. LDA <Music_Item_Cur
    : C5 ]! D- H' q+ m+ @6 s+ }( p! o% J
  1747. ASL A1 ?" u8 b3 S5 ~6 k
  1748. TAY) `+ y  P0 e+ P: m8 _
  1749. LDA Sound_Init_Port,Y' c& q9 _0 W: Y4 G4 n8 s* m
  1750. STA <JSR_Addr_L
    9 x* U3 t6 ]' _
  1751. INY7 t3 l$ |5 S& k4 A
  1752. LDA Sound_Init_Port,Y6 O9 K1 z4 Y. K& h- V9 V% v5 v# @! w
  1753. STA <JSR_Addr_H- j1 f- v% N7 y4 C0 k$ ~4 C4 `
  1754. LDA #$604 V% f3 `! ]5 @
  1755. STA <JSR_Addr_Rts
    * `5 H" H  n) S) E
  1756. PLA5 F8 Z4 F: K3 g6 r) o$ f4 T
  1757. RTS9 J1 k# H5 G& x; _; O5 r* q
  1758. ! p) Q# w" o7 ~% s6 H" v* }3 S6 Z1 F' E
  1759. Set_Sound_Play_Port
    $ h( G9 @3 Y- n+ ]
  1760. PHA* L7 R* I" _  `7 R* W
  1761. LDA #$20
    # K" g/ e, x' E! Q9 B, J* ^7 G
  1762. STA <JSR_Addr_Op" L' p, N1 ~& G$ R3 q
  1763. LDA <Music_Item_Cur
    2 e) I' A* U* X: z
  1764. ASL A- m& K" J5 H6 C9 Y4 U
  1765. TAY$ O+ S/ q- G) v+ [  Y6 T' l
  1766. LDA Sound_Play_Port,Y# D$ E6 {% s+ ]
  1767. STA <JSR_Addr_L) n! K5 U2 x! h+ m; _( L
  1768. INY) V# w8 }/ |. n; b  \7 f
  1769. LDA Sound_Play_Port,Y
    + }3 r4 Q" r" q& E
  1770. STA <JSR_Addr_H
    4 ^' N. S8 K* W' ]7 {' Q) i) s
  1771. LDA #$60+ f5 s7 [- F, \- |8 v9 d
  1772. STA <JSR_Addr_Rts; G$ _# b2 ~" A( M. }
  1773. PLA7 ~8 @3 |5 ?. ~6 U+ \% t) c" I
  1774. RTS1 o0 x/ `; o" c( t* \" z3 O& A
  1775. ; T( h& q4 g% A. W$ g/ ?' I( z
  1776. Set_Sound_Reset_Port! h) {+ g" t( [4 v2 x9 C) q
  1777. PHA% ~. L2 T& ~5 W" f; x$ R
  1778. LDA #$20
    2 d  `2 I0 S% f8 W
  1779. STA <JSR_Addr_Op% N9 V( Y+ U& J3 p# s3 R/ l& z
  1780. LDA <Music_Item_Cur
    0 L* t  q9 z& W' E
  1781. ASL A
    5 R2 U4 S6 q& ]% M1 V$ a8 {
  1782. TAY1 g' x8 U! ?) ^* C! j! M1 ?
  1783. LDA Sound_Reset_Port,Y
    7 a9 \! c- k) U! f, z6 g
  1784. STA <JSR_Addr_L
    ; {7 z( K$ j6 ?5 z
  1785. INY
    0 v# C! R+ C" ~1 ]# B. D
  1786. LDA Sound_Reset_Port,Y) n7 x. D3 E) Y% m) |3 h0 g7 ]* ^
  1787. STA <JSR_Addr_H
    6 f( _! Y' i6 [0 _& P! x
  1788. LDA #$60" J5 o/ w- i' l+ \- L. l' O
  1789. STA <JSR_Addr_Rts
      K# G0 |. U' b
  1790. PLA* z2 J& [, E$ D/ M$ Z
  1791. RTS$ b) Z  M  |5 {* m% n* @* w# Q% U8 u8 s

  1792. 5 u* S! k' j) N* G5 n1 Q5 D- y. U& H
  1793. ;初始化音乐bank5 R  q1 R4 d& I8 Y% i! a
  1794. Init_Sound_Bank% M/ P9 D2 s8 w% P
  1795. LDY <Music_Item_Cur9 V3 [5 n% U6 k' M* k! T# W3 \$ w
  1796. LDA Sound_Bank_8000,Y; I! _3 F& i* l0 F
  1797. STA <Music_Bank_8000
      f7 y# O* y- ]
  1798. LDY <Music_Item_Cur: G4 n+ v+ ^3 }1 W; H: p! t5 O$ V$ C
  1799. LDA Sound_Bank_A000,Y
    - V/ G) b1 y5 I& ], {$ F
  1800. STA <Music_Bank_A000( K! e+ R7 D- V5 a5 i
  1801. RTS
    & ^9 k! ^% o( l$ s. }( n
  1802. 9 W1 j/ z' `' e. E2 Q
  1803. ;==================================================
    & Q6 ?6 M3 i' o
  1804. Sound_State_Reset;音乐状态重置
    ) G& H, y' k4 A# t
  1805. JSR Music_Bar_ReSet        ;重置音乐条9 Z# o7 ?3 _" M( Y& [6 z
  1806. JSR Time_ReSet             ;重置播放时间
    + J" u( d! D; W% Y/ @" ?$ Y

  1807. / |+ O+ J! T. t; O1 A& d
  1808. LDA #$00
    ( M( Q* ]+ W- w) x
  1809. STA <Music_Stop_State
    : p' [5 ?; w5 _5 y, b/ q# ]
  1810. JSR Music_State_Show       ;显示播放状态5 t: @( A, q9 R8 m
  1811. * i( _5 I6 @) \- {# d# \; j
  1812. .IF Track_Name_Pos: L  J6 b4 A* _
  1813. JSR Show_Track_Info        ;音乐曲目名显示
    8 R; @+ e6 V6 r1 e% N
  1814. .ENDIF
    + D1 ?: v/ q& U8 I- M
  1815. 7 S$ X0 N! d& d
  1816. RTS7 \3 B& ^2 M3 B, N2 V

  1817. 9 I- W6 E% h' ]9 ?/ a
  1818. ;==================================================
    ' s  E: J/ s- r. k4 O
  1819. Sound_Init_Proc;音乐初始化处理
    . t" l  k) `& C- E9 r
  1820. PHA
    0 C* i% Z% K! [& ^' W, W; ?- T
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址
    " {4 M5 q6 f% b' @
  1822. LDA #$00* h3 i% `; L7 ?
  1823. STA <Scroll_H               ;重设水平滚动& I" x: M8 k$ `4 U
  1824. LDA #$0F
    ' R) R  \- X: h
  1825. STA APU_STATUS
    8 @1 Q7 ^4 y) g" x
  1826. PLA! {  k# H0 ~6 }: l
  1827. JSR Sound_Init             ;音乐初始化% a- M) G6 n* O9 |
  1828. JSR Sound_State_Reset      ;重置音乐播放状态
    4 Y# A& _2 H0 I) `( v/ G- Q
  1829. RTS
    # q/ l! p: ?* M( M  @2 v3 }
  1830. ' p9 y# `: V0 R9 n) J3 y" M; v
  1831. ;==================================================0 z2 _: z+ ?% K- i& i5 y
  1832. Sound_Play_Proc;音乐播放处理
    & G+ M: j, h3 l6 W; |% U
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址5 K" v+ f; e; z  G/ C. A
  1834. JSR Sound_Play             ;音乐播放
    2 @4 `! T" m4 ]" A5 n( [
  1835. RTS8 u0 q( c8 M" [* Z3 E0 M0 _

  1836. # K! A: b( v/ O  a( p% T! F7 W% {
  1837. ;==================================================: U8 C8 m1 f9 X% _
  1838. Sound_Reset_Proc;音乐重置处理
    3 K5 T, h6 w2 [. D6 {# Q
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址
    ( X5 B2 s5 K! z2 z2 n' i
  1840. LDA <JSR_Addr_L
    5 J1 l1 f3 ^; X$ U
  1841. ORA <JSR_Addr_H  W3 w6 ?& B/ v! W2 S8 W; F5 D8 h$ u
  1842. BEQ Sound_Reset_Proc_Default
    # }8 W4 Q0 u3 U
  1843. JSR Sound_Reset            ;执行音乐重置0 ~" L5 p9 _3 g$ m
  1844. JMP Sound_Reset_Proc_Init_Sound
    ! g( y6 z+ Q7 ^' b

  1845. / w8 D" h& i' M* ]+ }. U
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    $ t' S0 K7 [# f# X7 H7 b
  1847. & R- w3 ?' h; j
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断  @, G( V" {2 r
  1849. LDA #$00" L7 M( o$ m1 H5 O$ N1 v$ V
  1850. STA PPU_CTRL
    & M1 @: G8 k' ]# Y' M
  1851.   M& e; O) b7 i) |- h
  1852. JSR Sound_Data_Clear
    # f. }. B! H) L

  1853. 8 t& w1 }. U: J% y. v" O" a# N+ O! ^
  1854. Sound_Reset_Proc_Default_Wait
    8 G  n7 k# x4 W
  1855. LDA PPU_STATUS
    ( s. s6 f4 Y- l, b! G9 P8 ]
  1856. BPL Sound_Reset_Proc_Default_Wait( C& ?  b6 O) u4 D
  1857. ! }3 _6 r2 c% f5 p
  1858. LDA #$00
    & n4 ]9 t  x( d# d, }2 l
  1859. STA PPU_ADDRESS; M8 h5 F2 N. ?) |+ |* }
  1860. STA PPU_ADDRESS
    * U/ p8 B7 E% A! d9 b
  1861. STA PPU_SCROLL4 a* r. Q  E4 ]% n3 p
  1862. STA PPU_SCROLL
    0 u/ z* t- H( }7 n+ y
  1863. + n3 J1 n6 w( z6 w: a
  1864. ;恢复PPU控制( Z- S/ Q* Q9 Z) N$ O4 e/ c
  1865. LDA Screen_Ctrl
    $ M+ n- _9 \. m2 ?
  1866. STA PPU_CTRL# V! Z6 K: V( s, ~

  1867. ) M  [  b: _6 L7 T. `0 H
  1868. Sound_Reset_Proc_Init_Sound* V& s% \/ E. i; ?& `/ [
  1869. LDA <Music_Stop_State
    / \# U& _( {5 _7 A
  1870. BNE Sound_Reset_Proc_End
    7 g) G( G8 Q  S1 j7 \* _0 A6 ^
  1871. LDX <Music_Item_Cur
    , N4 e- A' ?  ~4 v$ N6 P
  1872. LDA <Music_Cur,X& p1 [5 l) Z" D/ Y6 r  G/ K
  1873. JSR Sound_Init_Proc
    & z1 I; |, x, i) y7 @3 v; G0 ^
  1874. Sound_Reset_Proc_End! O8 V0 _: ?( K( s  O
  1875. RTS% r& S" n; U9 J0 \
  1876. & K, n4 W6 l3 k# G  S
  1877. ;==================================================0 ?  i" F% h! A8 T) k, O4 F! M
  1878. Clear_Item_Text;清除页项目5 K5 S! x. S6 k' n/ _7 x; I  g
  1879. LDX PPU_Cur) p, Z1 z2 K8 B5 {- v$ W0 X  v
  1880. LDA #PPU_MODE_CNT_CLEAR8 b/ h8 ~4 Y* @8 U# V
  1881. STA PPU_Addr,X& a- I& \9 H  O* Y9 Q
  1882. INX! }; A4 X- P7 p
  1883. - d( Z0 r  F& C
  1884. LDA <Page_Last/ }, P; S8 T  n4 I; k. V
  1885. SEC  F6 l: N8 k' Y. C
  1886. SBC <Page_Last_Index# Q; ?) N+ _2 m2 P
  1887. ASL A
    3 c6 Q) V# j, \8 m4 H
  1888. 5 Q* j& `: y; z
  1889. TAY
    - q5 X' z5 U+ T+ d+ y
  1890. LDA Item_Pos_Data,Y& {3 v' F7 e% o5 o$ [1 V
  1891. PHA9 A2 E0 V; h- h5 Y6 b8 P
  1892. INY
    4 E& O% F) Y4 J: f- B  L. A
  1893. LDA Item_Pos_Data,Y
    ; x4 R3 k. w) p) t9 ?' M( Z  ]2 s, a
  1894. STA PPU_Addr,X$ Y  F2 T* Q% ~: }9 b# z
  1895. INX
    & l4 ^4 G% O4 o
  1896. PLA4 v- z2 M2 I* T, w6 e
  1897. STA PPU_Addr,X& @( b; l% E) h. m$ Y" W
  1898. INX
      P, q  R; F( T) a' A8 \, x

  1899.   y3 G# M: K% H1 ]2 p
  1900. LDA <Page_Last
    5 s; R# p. h' Z4 y5 [  n4 ]% _( I
  1901. ASL A
    4 l5 Y) b% ^+ W  G" t3 N: z$ `
  1902. TAY$ M' ^  S5 B+ E5 V1 A
  1903. LDA Music_Collection_Name,Y
      n1 u, n. _. i! A8 o4 N# g8 ]
  1904. STA <Data_L0 R$ G$ G3 T2 |! D+ M  K9 v
  1905. INY- g3 o7 o; f5 c( E1 e$ L
  1906. LDA Music_Collection_Name,Y
    / G) C8 U2 k" y4 o, Q. k; p2 |- J; ?
  1907. STA <Data_H
    2 ?) v# l* N' T* {

  1908. 1 d. o$ K% M3 z) G) d7 v' U
  1909. LDY #$006 c5 a  R, f! K1 X6 x
  1910. LDA [Data_L],Y/ I) q9 Q; E: ?8 ~  t/ N
  1911. STA PPU_Addr,X
    1 M" i0 M2 l# c
  1912. INX
    7 N6 f) e" E2 `5 a  M( f3 K( R! G
  1913. Clear_Item_Text_End
    + `/ n' O6 K3 o! m, B6 O! f
  1914. STX PPU_Cur* y" h1 }; _/ K7 M: B3 S
  1915. RTS
    & a: r! @3 E% Y% t  k$ H* u- l

  1916. " S" B) d( S: d
  1917. ;==================================================
    . _' L- I; c( g8 o; C) k+ ^1 \
  1918. Show_Item_Text;显示页项目
    : r4 {# ^+ D: ]
  1919. LDX PPU_Cur# I1 Z' c0 z1 |) l
  1920. LDA #PPU_MODE_CNT_LINE
    0 q' A: N' r3 p+ t! b
  1921. STA PPU_Addr,X5 l. E$ s& ~1 h; O4 t1 y, Z, m8 h
  1922. INX& z* Q. d4 j" {0 q0 `
  1923. LDA Page_Cur% G2 n" k5 z0 V* m# @* {8 {+ ]+ S
  1924. SEC  z, `/ T& Y" B# _( j, b
  1925. SBC <Page_Cur_Index
    7 c$ E# p7 b  D
  1926. ASL A
    9 V2 K* r8 k; k0 c- B
  1927. TAY. W) m% d8 }: b: e
  1928. LDA Item_Pos_Data,Y: v1 S1 z( c: {7 J% y
  1929. PHA
      ]* ^- l# w  @* V' j# B
  1930. INY
    0 R, P! M, e+ A2 N
  1931. LDA Item_Pos_Data,Y
    0 J5 J0 e, W, U8 P( n
  1932. STA PPU_Addr,X7 N! x. x* v( ^: Q' I" S" }
  1933. INX# {1 U  x$ H; G# D& ]- b
  1934. PLA
    0 E4 v: `" c# J* W4 Z5 t, g
  1935. STA PPU_Addr,X6 K* Z3 {! \: H& R- W
  1936. INX6 m8 S7 o! v: ^# }/ _" N0 E
  1937. + O* v4 d0 i5 b" r, N- d
  1938. LDA Page_Cur2 \9 V* y5 B9 q" ~6 q/ e# t
  1939. ASL A6 g: u$ M  y1 |4 v6 E/ q
  1940. TAY
    ( B4 ~* {0 A. t6 a$ J) E7 P
  1941. LDA Music_Collection_Name,Y4 n5 N4 M$ g3 O! k
  1942. STA <Data_L# c0 l) {: _7 N
  1943. INY
    * X8 X6 l: ~3 C5 `' o
  1944. LDA Music_Collection_Name,Y
    % \. s8 G( k* ^+ h
  1945. STA <Data_H
    0 u2 K+ s1 u$ x* W" C, L* Y
  1946. $ w9 o5 N7 _  Q1 q, W! U: J
  1947. LDY #$00
    2 u! g' r- S7 B$ Y
  1948. LDA [Data_L],Y8 A, x+ }8 e6 @
  1949. STA PPU_Addr,X# E7 k9 h  L# H' x& v- m; x
  1950. STA Data_Cnt) z" V0 A- e2 H) u; |' L
  1951. INX
    6 q9 \2 `' b; p$ q
  1952. + x& E, `0 N3 e+ \
  1953. INY
    ( f- g; C( C6 U& U/ {! r
  1954. Show_Item_Text_Write
    " T0 V1 D/ E4 |' c8 R9 L, l
  1955. LDA [Data_L],Y
    : X' K5 x/ Q, d% C! F
  1956. STA PPU_Addr,X) `3 Y3 v9 R8 j4 ]% O7 Y. ?' g/ P0 w
  1957. INY) ~  }0 K( w9 Y) x# _
  1958. INX4 P( P% l' u4 v% p; Y; i1 j
  1959. DEC Data_Cnt
    4 {5 @1 D# ~" Q, X! Y
  1960. BNE Show_Item_Text_Write# l, d3 q: ]; z3 b# A' P; j
  1961. , m( X- O. W% I2 B; G
  1962. Show_Item_Text_End
    7 D; K+ J: C9 z* o+ ~! E: e) `
  1963. STX PPU_Cur# W  ?" N: @0 U: H- O
  1964. RTS# f4 q+ g3 V; Z2 t4 ~& K- q
  1965. 2 F6 b- l% R% t% f, L
  1966. ;==================================================
    " S# A, i, j" x) B* S. ~7 b& K8 F
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量. t$ N( X' i& p3 [( c* P: R
  1968. STA <Data_Buf
    % ?  b4 e. k) m6 ?6 o
  1969. LDA #$006 h6 j! a% l9 {* ?  p" e% N5 o
  1970. Get_Page_Index_Calc
    " l3 s; s' |6 x  I8 ?
  1971. CLC
    8 x- E  R" c& O" d7 J( R5 P
  1972. ADC #PAGE_SIZE
    # s* `) w2 @+ z  c8 B) Z
  1973. CMP <Data_Buf2 E* @. K  D3 E1 [# _+ H- B
  1974. BCC Get_Page_Index_Calc* P( m9 z+ Z: |6 N; v6 ~
  1975. BEQ Get_Page_Index_Calc_End3 @( Z6 U* F" {, p- F7 h& V
  1976. SEC
    : }5 c) Y0 y% s2 p0 K$ {1 L1 Y2 \
  1977. SBC #PAGE_SIZE+ P6 I7 Q+ W& I6 S
  1978. Get_Page_Index_Calc_End
    0 U( ?) ]' ^( X& B6 S% A
  1979. STA <Data_Buf
    ! c$ Y% _6 c# R
  1980. Get_Page_Index_Cnt
    ; _7 v+ _% _  H$ G. Y6 J3 Y' Z
  1981. LDA #PAGE_SIZE
    : p7 |* M8 J7 u( o* G
  1982. STA Data_Cnt2 z8 R8 q' E! V8 X* g6 L; R! B0 X, c6 ?

  1983. ' Z" V$ h  H, E! ]6 S
  1984. LDA <Data_Buf
    6 f1 U% W* }1 y  i3 N: @
  1985. CLC
    + P5 @/ g- Q1 e# @4 V
  1986. ADC #PAGE_SIZE- y8 H( O+ v/ x5 h+ j% Z$ H" P, k/ w* M
  1987. CMP #ITEM_MAX_SIZE8 X3 B/ E, ~. f5 _1 v1 B
  1988. BCC Get_Page_Index_Cnt_End
      u7 U" `/ H* {& m4 `. K
  1989. # ^/ h0 z  g# w; }9 h
  1990. LDA #ITEM_MAX_SIZE
    & y1 j% _2 n  B) e/ o$ X
  1991. SEC
    5 c; H$ a9 c8 _# A. Q: c, k
  1992. SBC <Data_Buf: l/ C. F" R  P
  1993. STA <Data_Cnt5 f" m3 J- M2 X# ~  b

  1994. 4 Y. u8 e1 Q$ c6 A- _
  1995. Get_Page_Index_Cnt_End8 u& U" _4 @) i
  1996. RTS3 B$ D) P! f$ \: u# S8 o- ^( L$ D

  1997. 5 b. r4 G5 E* }& V
  1998. ;==================================================+ D: Z* u) b0 n6 o2 u
  1999. Get_Last_Page_Start_Index
    0 e0 l' |1 H, p! ~
  2000. LDA <Music_Item_Last
    , S* {0 A$ f" ~
  2001. JSR Get_Page_Start_Index
    $ ^+ P. ^( T: T
  2002. LDA Data_Buf
    ; \' W" p6 E+ F& J6 L0 T  n
  2003. STA Page_Last; ]/ }$ h4 y  q8 ]
  2004. STA Page_Last_Index; y" Y, J1 U1 u- {* v& c' K' i
  2005. LDA Data_Cnt
    8 e9 q- C- E8 a; r0 I" a- Y4 M
  2006. STA Page_Last_Cnt* e4 S; l; j1 u/ a8 T
  2007. RTS  B5 ?# @, z0 K1 X5 x

  2008. ! c& O- G- A& Z7 C  A% N
  2009. ;==================================================
    8 g2 \8 |5 R$ L
  2010. Get_Cur_Page_Start_Index
    , p( W9 H5 X1 A& [* I* s. L4 J
  2011. LDA <Music_Item_Cur
    * Z0 O7 t7 F" |& v( E' @1 N
  2012. JSR Get_Page_Start_Index
    ! a5 U: w: A5 N% k1 ~. [
  2013. LDA Data_Buf* A! r  w& `) P8 X8 s8 F0 E' i1 Y
  2014. STA Page_Cur
    - Z2 ?. k: q' Q, L# S
  2015. STA Page_Cur_Index  L7 H* \  [4 @5 H- z" K7 g0 U6 |
  2016. LDA Data_Cnt# x' n1 v7 \1 Q
  2017. STA Page_Cur_Cnt
    ( E  E; V  \$ c7 [9 h) s
  2018. RTS
      z. v8 B: w4 [
  2019. 0 `( X- G  `5 \# C
  2020. ;==================================================( M8 n: S& X2 N. F1 x0 Y, @6 }7 O
  2021. Show_Page_Text;显示页文本
    7 _, t) z# f5 q; C  ~$ I& I! Q
  2022. LDA <Text_Disable_Flag
    & u2 b( S( ^; f! B% I
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    4 R) z9 y" b4 c* ^
  2024. STA <Text_Disable_Flag5 v. B2 w3 k- i1 N# T
  2025. - I: T; t7 P7 H* \8 g% |7 w$ s
  2026. JSR Get_Last_Page_Start_Index( E6 A; o# A5 o
  2027. JSR Get_Cur_Page_Start_Index
    5 g1 M8 x4 m6 c! V" p
  2028. & x, i. K4 M# i: [. T# P- f
  2029. Show_Page_Text_Set
    $ k5 D( H- u% ]2 N/ |' [5 J  R/ A" k

  2030. 0 P1 I5 K0 g: {) {
  2031. Clear_Page_Last_Item;清理上一页4 O9 N! l+ q; S0 S
  2032. LDA Page_Last_Cnt/ C6 ?2 ]' ?+ G" W5 n
  2033. BEQ Clear_Page_Last_Item_End
    . c1 ^. t% @( `. e! h+ }
  2034. JSR Clear_Item_Text4 d+ G0 N4 {/ U2 `
  2035. INC Page_Last+ _6 H$ S( E7 S4 ~
  2036. DEC Page_Last_Cnt+ K* }0 @- n5 x" B6 ~
  2037. Clear_Page_Last_Item_End
    3 l2 F; l+ @& K4 Y1 ]& K
  2038. + `% C' a2 S" G. Z/ U* [
  2039. Show_Page_Cur_Item;显示当前页/ E6 Z, V6 u4 y& d% T8 l2 U/ f( h
  2040. LDA Page_Cur_Cnt' ]0 S; ?% l  r* s1 |( F+ N0 E
  2041. BEQ Show_Page_Cur_Item_End
      C( h  C& v7 ^
  2042. JSR Show_Item_Text
    : C) u& @3 Q- [: v4 N9 T8 U- h
  2043. INC Page_Cur% c& T% p0 l; z6 `
  2044. DEC Page_Cur_Cnt7 ?5 b* l$ h7 b! M. P3 I5 ?/ o
  2045. Show_Page_Cur_Item_End
    * d* f. t2 e# i9 C% s+ m# e  \4 x6 U
  2046. 0 k( |! Z% C. [) I" k
  2047. INC <Time_Wait_Cnt
    2 B) N0 {( q& ?3 R- ]5 A
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作
      n* B0 v  t3 P- i% o) C
  2049. LDA <Time_Wait_Cnt1 j# s- t& q, T" b
  2050. BNE Show_Page_Text_Set_Wait
    ( D, E' q! G; a4 @' e) n5 [2 T

  2051. 6 Q8 Q6 J, E' {9 Z) K
  2052. LDA Page_Last_Cnt$ t) |6 ~. v% j
  2053. ORA Page_Cur_Cnt8 e/ g9 C; l, C
  2054. BNE Show_Page_Text_Set
    - C7 A9 f5 O) y. [8 I  V1 M& h" q
  2055. LDA <Text_Disable_Flag  l8 z9 K6 L9 w3 Z. |$ D$ q
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    2 r. f. n# o1 H
  2057. STA <Text_Disable_Flag8 ~9 \8 m$ d3 k7 g' g% b
  2058. RTS
    + o. m2 [, x+ w! L- F
  2059. 1 P( L2 ]* a6 C! h: B% g
  2060. ;==================================================
    % s* k2 ]1 o4 h
  2061. Last_Item;上一项
    ; n: L$ L2 i& c6 p  M) J' k6 x5 L: U
  2062. JSR Clear_Last_Track_Name
    & ~" m0 t( M4 O! V/ C
  2063. JSR Disable_Text_Draw
    . s/ X* Q" }5 f: @5 ]$ v  ?

  2064. 0 q# L* F/ H, p: M) E$ k7 x# u1 P. M
  2065. LDA <Music_Item_Cur6 k* D# X: }2 l4 N8 q
  2066. STA <Music_Item_Last
    ' o0 w/ |8 j+ F6 L* f% q& p4 [$ L; \

  2067. ! i* q0 |5 @# K) p3 |! S) ^. p5 X  Q, D
  2068. JSR Get_Last_Page_Start_Index
    5 Y# [  I: I1 W/ N- V- t/ q7 j- X  j
  2069. 1 ]. V% @9 f6 B: A# F5 z) e
  2070. LDA #$00) E. q0 u$ y4 w6 b) e9 H
  2071. STA Data_Buf5 Z2 U! Z! K. p+ s' G9 r! C

  2072. 9 L% {0 O* q. E/ \2 A  w7 d* V
  2073. LDA <Page_Last% b  u5 G& l+ S# e' l* V% E0 q8 q8 _
  2074. CMP <Music_Item_Cur
    # l& z0 S/ M4 p
  2075. BNE Last_Item_Begin: I; }8 \' ~# \2 b! ?1 R, `, D

  2076. : H- P9 T" J1 W
  2077. LDA #$01
    . h- \5 V: e5 f7 u" w0 x' }
  2078. STA Data_Buf8 D+ ^3 w! A" b) v; R/ I
  2079. Last_Item_Begin9 S" Y: g" b( p4 W
  2080. LDA <Music_Item_Cur- \8 p5 c4 f% L/ c& y( x0 {- x' g
  2081. BNE Last_Item_Set
    $ O% g8 Z4 t( s- Y2 j$ y& m  ~
  2082. LDA #ITEM_MAX_INDEX + 1
      I' S, J+ C4 u# U+ i
  2083. STA <Music_Item_Cur1 I- f* {7 g6 \6 V0 e& K% ^
  2084. 5 V4 x$ S( g& X8 c# B$ F+ e
  2085. Last_Item_Set
    , z! `4 C9 A! m% a
  2086. DEC <Music_Item_Cur; t4 o4 W) b  ~7 Y4 h# b
  2087. LDA <Music_Item_Cur3 f4 S( C/ K: [7 v- Z
  2088. JSR Reset_Current_Music
    / y$ k( R6 t" j" A3 r$ A2 s. y1 J

  2089. / M, [: l$ X- ?( ~! A  \
  2090. Last_Item_Play6 \$ O% @+ h* a
  2091. LDA Data_Buf
    & w( n" E' N3 D5 J9 X
  2092. BEQ Last_Item_End
    " y1 A" A3 f1 N6 p2 n2 p9 M
  2093. JSR Show_Page_Text
    ' h# }  L  ]* q; k
  2094. Last_Item_End; Q. ?$ p, }* V' t% b( |& X
  2095. RTS+ r4 \( S0 _5 _: f

  2096. 1 b; [2 [4 N' i5 j8 @
  2097. ;==================================================7 V" s! a7 k  b- g
  2098. Next_Item;下一项2 Y* J9 K3 F+ ?5 D8 n6 o- I. Y
  2099. JSR Clear_Last_Track_Name' m; {( f! W! F* W% Z- F" O; U6 j
  2100. JSR Disable_Text_Draw+ P* ^1 d2 U, L) |$ O
  2101. * n9 f3 ^2 z3 L2 s: z4 e
  2102. LDA <Music_Item_Cur
    , R8 i6 z  B" b" e" T' s0 i0 |
  2103. STA <Music_Item_Last& r% y* p5 B$ N- J4 b0 X) G) a) x

  2104. * K; `& ~7 I6 {( F; ?$ V+ R* `# x3 ]
  2105. JSR Get_Last_Page_Start_Index
    & o8 t( [- C  X- m+ D

  2106. ( a5 |9 L( d, T. Z0 O" Z
  2107. LDA #$00
    5 x  w, V4 s, C( w% C
  2108. STA Data_Buf" @# ?* v1 L3 \* v! H0 P4 \

  2109. 0 }5 [5 _1 b- t! b/ s- j
  2110. LDA <Page_Last
    5 W' h  |$ ?. E5 C, M6 c
  2111. CLC5 A" V- ?  q: {
  2112. ADC <Page_Last_Cnt
    4 |, [' d; e9 g1 y
  2113. SEC7 G: A( u1 n* g
  2114. SBC #$01
    & q1 }  J6 }; r
  2115. CMP <Music_Item_Cur
    ) e; h# @* K/ P: `1 ]
  2116. BNE Next_Item_Begin
    ! s# K# \  B) _: t! z. [+ T

  2117. 8 |+ c4 [6 I4 u- b9 m
  2118. LDA #$01  O$ k6 o' H7 U, }8 t# S
  2119. STA Data_Buf
    5 G' n9 J8 h" s. t( n: X
  2120. Next_Item_Begin
    # K5 Y0 X( S7 T6 V/ q, s
  2121. LDA <Music_Item_Cur3 j; j+ r# e; G2 Y/ x$ l
  2122. CMP #ITEM_MAX_INDEX0 d; w% N( A' y
  2123. BCC Next_Item_Set
    % y  L5 t" w; M4 s3 E, e
  2124. LDA #$FF
    # L1 q& `6 k7 M5 Z* p
  2125. STA <Music_Item_Cur
    0 C8 o( ~2 b) i) z$ C
  2126. Next_Item_Set: j9 `+ E" Y# h  ]0 g6 }! T
  2127. INC <Music_Item_Cur
    ; q, g1 L6 d9 x! a, ^
  2128. LDA <Music_Item_Cur# e( M+ e$ ~5 Y) g! `7 v
  2129. LDA <Music_Item_Cur! P  d' T# k6 R; ^
  2130. JSR Reset_Current_Music! I& r6 X* @3 E' d/ i! }
  2131. Next_Item_Play2 p. p6 L  N1 {" z  ]
  2132. LDA Data_Buf' _: z7 L( T7 Z4 _, j% @
  2133. BEQ Next_Item_End
    ) M0 `1 F$ D( [( n
  2134. JSR Show_Page_Text. E" `& Z0 f/ T" j/ ]/ t
  2135. Next_Item_End3 K* d, d& Z" t% d# y
  2136. RTS
    6 i- q3 I7 ?  D$ v
  2137.   l$ Q# U" k; [0 n7 k0 Y
  2138. ;==================================================
    . d4 I( h6 t% M; R" e4 Q" l
  2139. Last_Page;上一页
    ' O, p3 y1 L+ v/ s. d8 @
  2140. RTS  L  H& P% V8 G0 f7 ?5 @- F
  2141. + J3 d  b9 I9 v0 [8 O) e: y
  2142. ;==================================================0 N5 ~6 X, f/ _7 H( I4 ]0 c
  2143. Next_Page;下一页# C* Y* h' r6 K4 R, ^! k8 v
  2144. LDA #PAGE_MAX_INDEX) H, g- {5 }5 A2 `
  2145. CMP #$01
    * T1 S* {9 [6 W" Z. |, o
  2146. BEQ Next_Page_End- G  _. X1 Y" N
  2147. 4 ?, s8 ]$ U+ S, o) C" }/ C
  2148. LDA <Music_Item_Cur! v6 {5 Q% s: i3 Q: ^% E% D; E
  2149. STA <Music_Item_Last' v, V5 d' x, _2 y, [  k7 n. t& c

  2150. , R5 N/ J8 N' _. k
  2151. JSR Get_Last_Page_Start_Index* Z" M9 v$ `; ^  b8 g

  2152. + R  x8 |. W" G# Q7 \3 n1 T
  2153. LDA <Page_Last_Index
    0 g, {: P" |7 U
  2154. CMP #PAGE_MAX_INDEX% E: p* f; d( h9 D+ z' \
  2155. BCS Next_Page_In_End_Page
    3 I$ J! z: l2 P+ D7 A

  2156. # s& K$ X! s0 `; P0 n
  2157. Next_Page_Not_End_Page;不是在最后一页( {: }: H: H2 u1 I
  2158. LDA <Music_Item_Cur
    " Z+ [# [5 j# v8 B8 u
  2159. CLC/ J5 S9 W# D% F# u" ?6 E# K- h
  2160. ADC #PAGE_SIZE
    2 P3 B! |( Z) J( r! d2 w
  2161. CMP #ITEM_MAX_SIZE
    ( i1 G* o7 h, u, v% n7 l
  2162. BCC Next_Page_Not_End_Page_Less' w3 w4 ]& f' [4 k& ?4 v
  2163. LDA <Music_Item_Cur7 x' r! [- A1 n# n! j0 F* z) W' w
  2164. SEC
    ( m; N+ d3 v8 h2 n
  2165. SBC <Page_Last_Index( L8 N6 J- }/ I$ I4 X
  2166. CLC
    + e/ @& m7 g3 |, g5 N
  2167. ADC #PAGE_MAX_INDEX
    # r# Y, R! n5 Z4 T, }, c
  2168. CMP #ITEM_MAX_SIZE
    7 `+ I& v9 z* W
  2169. BCC Next_Page_Not_End_Page_Less7 R: }4 O# [! N* G+ Y
  2170. LDA #ITEM_MAX_INDEX- L4 w. E$ r) Y: o- n
  2171. Next_Page_Not_End_Page_Less
    + ^" W2 A3 A! t( V" t9 f0 B% }3 q
  2172. STA <Music_Item_Cur8 ^" Z& n; M' |) v, |* T
  2173. JMP Next_Page_Reset' ?9 }( P. r: m3 B

  2174. 6 Y7 B" \2 A2 V9 A
  2175. Next_Page_In_End_Page;在最后一页( y4 `; w+ f- ~$ ?! ~
  2176. LDA <Music_Item_Cur
    / L# N: m& ]3 K( ~! x
  2177. SEC
    : A3 E: j9 F5 J! A9 P  O
  2178. SBC <Page_Last_Index
    3 \: |0 Y# }  [, M7 w2 L  ]) o
  2179. STA <Music_Item_Cur
      }% C- p2 {8 ~6 J/ s

  2180. 8 K% Z5 }* a' C$ U: N3 o
  2181. Next_Page_Reset; \$ a1 p4 g2 F
  2182. LDA <Music_Item_Cur
      q" m) u; \1 C2 r) \0 }; O6 i, }
  2183. JSR Reset_Current_Music
    0 _0 V! K) j: C  e( A
  2184. JSR Show_Page_Text
    : ?0 f1 \0 m/ {) A4 Y
  2185. Next_Page_End2 w( Z& m  o+ Q. ]
  2186. RTS3 c1 |2 p6 N. W+ j1 \

  2187. 1 l9 b9 z* A5 Z2 Y! t6 E' c( w8 X
  2188. ;==================================================2 ~/ }6 U9 K2 z7 X, u
  2189. Disable_Text_Draw;禁用音乐条刷新
    ) G. a3 W* |/ w
  2190. LDA <Text_Disable_Flag
    % f/ N: ?9 U: ]+ g0 o  Q
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME. \6 `" v0 R' r9 m. x. _  a
  2192. STA <Text_Disable_Flag
    7 q  I2 |3 Y& x, C- v
  2193. RTS
    ; x, Z' `5 C' `7 c

  2194. ' s3 \7 T% K2 j8 R" ~) w5 @: o
  2195. ;==================================================
    $ j; C0 d) Z0 s& j# H+ P* t% E
  2196. Clear_Last_Track_Name;清除上次曲目名# u) h7 B% _4 y/ P  Z* U. P0 V4 ~
  2197. LDX <Music_Item_Cur7 m% I* I' F, b7 w
  2198. LDA <Music_Cur,X' W4 z- y4 @/ t* v, m; I
  2199. .IF Track_Name_Pos
    / I3 V9 C$ ~: ]7 _! a
  2200. JSR Clear_Track_Info
      c" B+ B  i  E8 Q. ]  M/ S
  2201. .ENDIF9 j% z6 a- Q, l* N# |. v0 \4 O3 ]
  2202. RTS
    9 k+ ?: R" r0 D' O

  2203. 1 U9 v' V  b0 n4 Q+ X7 F
  2204. ;==================================================
    6 u" W9 }- w0 s% d7 Q
  2205. Reset_Current_Music;重设当前曲目6 a/ D. c0 q) r1 {

  2206. ' c& I. k. N8 j& u% k! q* C; X+ a
  2207. ;写入当前总曲目( i8 ?& k; O$ R
  2208. JSR Set_Sound_Total
    $ y/ M2 p# h& }% \
  2209. LDX <Music_Item_Cur
    4 x0 h3 c9 F3 Z
  2210. & _% i) g/ a' o4 _# I: Y# D- h0 S* l
  2211. LDA #$00
    ( F$ L2 a8 @0 \- S% D" K
  2212. STA <Music_Last
    8 r' d1 H+ T% {1 R8 ~6 I* K

  2213. ; G. `/ @3 l% o9 L  a4 ^
  2214. JSR Sound_Reset_Proc
    + _: {) C; n! ^9 w
  2215. JSR Music_Show
    ( z8 s+ s) N2 `
  2216. RTS2 y2 t- @5 Z3 |% ]% t

  2217. 6 M& u) |$ N0 G9 i7 _
  2218. ;==================================================
    - J1 v- o" W" o) F* g( d
  2219. Music_Song_Stop;音乐停止
    # ?8 ^' c' C, t0 ]% x5 W
  2220. LDA #$01
    ) u  L# i5 _* n2 j4 R
  2221. STA <Music_Stop_State- y. H, N6 N& T. U# K3 A7 P
  2222. JSR Music_Bar_ReSet
    2 U  |6 f: U' W2 `
  2223. JSR Time_ReSet4 ^6 s9 E5 L5 f: n: Q
  2224. JSR Sound_Data_Clear
    5 S# X8 j; t! w6 L$ M. y
  2225. JSR Music_State_Show0 Q4 E' v. M  J+ P/ |4 Q" [# i0 L1 Q
  2226. RTS) n$ z3 t6 `4 r

  2227. 7 F+ D( C6 x9 e! Z. g
  2228. ;==================================================
    . p: b6 W" t4 B7 R
  2229. Music_Song_Play;音乐播放( t3 x$ [5 }+ G3 F
  2230. LDA #$00% q! X- d' K+ {. S* k" D' S: x3 u5 H
  2231. STA <Music_Stop_State  R3 d- [# S/ d1 w. H- E+ s
  2232. LDX <Music_Item_Cur4 u( G( R# H: D, D' s
  2233. LDA <Music_Cur,X
    5 k7 x# d; B9 }! k% c) h6 N) q
  2234. JSR Sound_Init_Proc
    1 ]4 E, d% c8 g' s5 }" a
  2235. RTS
    " R, L( O9 S9 o4 s; `9 y
  2236. . \( `" d+ p8 t1 r
  2237. ;==================================================8 M9 c8 L* j1 U- S( t
  2238. Music_Song_Last_10;上10曲
    6 O% g9 C( a1 f
  2239. JSR Clear_Last_Track_Name
    ! ?. A$ M/ j( c3 w
  2240. JSR Disable_Text_Draw
    6 _1 u5 o$ C/ B9 h6 T2 ?
  2241. LDX <Music_Item_Cur
    7 ^" U  f- }8 w( {
  2242. JSR Set_Sound_Total
    6 v7 s# d& M; K  h' L
  2243. LDA <Music_Cur,X
    1 [0 n( |. @  M+ `9 \, ^
  2244. SEC, @! \6 B* e! @& U8 t
  2245. SBC #10
    * [* x+ x& X; N2 C- k3 w& m. y
  2246. BCS Music_Song_Last_10_Set
    ' v: [' L3 @& i* y* U) b
  2247. LDA #$004 o% Y9 [- ]7 H" `6 {( v- o+ J
  2248. Music_Song_Last_10_Set: l0 M: a  v6 J; t
  2249. STA <Music_Cur,X9 ~% o7 S! @, Q  Z6 j9 K1 B6 ^
  2250. JSR Sound_Reset_Proc
    - M& [6 S' A5 d" j8 j9 t, t$ v# z2 u  W
  2251. JSR Music_Show7 h" m! O* F; z" j* q  ~) V
  2252. Music_Song_Last_10_End
    ! m) @1 g8 _, C3 r3 \
  2253. RTS  R8 e7 \' x0 X. R( j# I! g1 [

  2254. 8 T$ `# W% x0 }" W6 Y9 d
  2255. ;==================================================
      \2 F- e: N" d; T( x4 u
  2256. Music_Song_Next_10;下10曲
    4 T! k$ j) L, r6 L$ X
  2257. JSR Clear_Last_Track_Name
    + W8 {7 V, j! ?$ i- X2 c
  2258. JSR Disable_Text_Draw( c( |" V! w6 N1 L& E7 s! H
  2259. LDX <Music_Item_Cur5 b3 z4 n: M: i$ y$ U7 _: h( \
  2260. JSR Set_Sound_Total. B' \8 I9 P) X/ U" V
  2261. LDA <Music_Cur,X
    + E. n6 n' Q1 A- u9 W* b
  2262. CLC, h) h: c$ Q4 @1 k2 _3 ^9 _4 U+ [& `
  2263. ADC #10
    : N% w' E( s( P
  2264. CMP Music_Total
    7 }3 M" B3 O; P
  2265. BCC Music_Song_Next_10_Set# A6 o, e! M) l$ a% j
  2266. LDA Music_Total
    : R# U% R* Y5 H# n7 b
  2267. Music_Song_Next_10_Set
    * P$ L7 D& H1 s  U
  2268. STA <Music_Cur,X1 z& k& ?9 L8 O& y7 D/ w
  2269. JSR Sound_Reset_Proc
    . u9 O2 }4 I; D) W4 D
  2270. JSR Music_Show
    9 u9 N$ F) T3 \+ O6 N( \
  2271. Music_Song_Next_10_End' X( @+ [, V& D
  2272. RTS
    2 I* K0 e+ N, P7 U
  2273. : Y# R5 q) B# q7 u/ [8 N
  2274. ;==================================================/ }( V4 l, ?! r
  2275. Music_Song_Last;上一曲
    2 I! z9 E% [) f0 t
  2276. JSR Clear_Last_Track_Name
      u1 M. G" r% S
  2277. JSR Disable_Text_Draw
    ) k2 ]" z: A, [
  2278. LDX <Music_Item_Cur6 G$ U# U+ _+ t8 v% b9 D/ g
  2279. JSR Set_Sound_Total
    $ D7 i$ C# e  n% M3 V
  2280. LDA <Music_Cur,X- K2 H: Y: {5 ~2 P( I9 _
  2281. BEQ Music_Song_Last_Set# j7 m6 E5 r; |3 p
  2282. DEC <Music_Cur,X
    , y# C8 ~1 T$ |& K) V6 p
  2283. Music_Song_Last_Set
      q" i3 j; t; z# T
  2284. JSR Sound_Reset_Proc
      a4 Z5 w  k' }& l# [) {
  2285. JSR Music_Show/ [  @' }3 M; K0 \: r
  2286. Music_Song_Last_End# [9 y! \/ n8 r, Y( S
  2287. RTS
    2 Y  L& o7 }3 ]( l  k3 t1 ~

  2288. . K6 w" D& ^+ J( x& ~; Q" G* \
  2289. ;==================================================( W1 ^, w. |# B8 i$ U- ]
  2290. Music_Song_Next;下一曲
    ! T+ y( H8 F' C) m/ o6 R6 R. p
  2291. JSR Clear_Last_Track_Name# {. N% N6 Z: W. @$ Y
  2292. JSR Disable_Text_Draw
    8 j; f; K; L7 F6 l8 Q
  2293. LDX <Music_Item_Cur) f9 I* {) u& ?0 W
  2294. JSR Set_Sound_Total
    ' y4 Q+ P8 [/ Q; E9 Z
  2295. LDA <Music_Cur,X
    , r5 Z3 h) T2 f4 n; s4 I
  2296. CMP Music_Total
    3 O* H1 }! F- p$ Y
  2297. BCS Music_Song_Next_Set
    9 G, r) S' F! h1 B2 X; f
  2298. INC <Music_Cur,X
    0 [6 O6 R* e! h. C8 @' t
  2299. Music_Song_Next_Set' q; L7 @& e: _/ P/ `1 n! i6 q/ F
  2300. JSR Sound_Reset_Proc
    . `8 j4 F! j' q' }$ f3 O6 J
  2301. JSR Music_Show. |( ^" n5 w- Y$ d+ J
  2302. Music_Song_Next_End0 Q1 w* b! N9 R) c
  2303. RTS1 n6 S# P: @: E, _
  2304.   j9 Q4 `4 T& q- k3 \' Z+ Z
  2305. ;==================================================
    + ]/ ?' {3 R8 f8 ~6 o
  2306. Change_Select_Item;改变当前选择项
    0 B1 [" Q! }! ~% o/ T
  2307. ;--------------------------------------------------, K. I/ D8 J, s
  2308. Change_Select_Stop_Play_Item;停止/播放
    ( O# q% C( ~4 B
  2309. LDA <Key_Once, m9 _3 o5 t- y3 \
  2310. CMP #$100 }% a% y0 d4 o- O. S( w
  2311. BNE Change_Select_Last_Item
    ' b. X/ h6 e; j. n5 ?+ s' r2 h
  2312. LDA <Music_Stop_State* G9 V2 G9 Z' o. r1 g
  2313. BNE Change_Select_Play3 V: a& ]; x$ J2 M
  2314. JSR Music_Song_Stop# O8 }4 w  h. q9 ?
  2315. LDA <Music_Stop_State
    " y( G; j( F9 h) P, M$ _6 A
  2316. RTS) D+ D0 _3 }8 ?" o+ P3 T& E) f
  2317. , q* Y& Z5 h/ a/ R9 |
  2318. Change_Select_Play
    : @  J/ y% D. ^1 K( i
  2319. JSR Music_Song_Play
    4 W) h5 ]4 k  q8 J( ]) _; _/ f4 ^* N
  2320. RTS
    ' ^4 j6 X4 j+ D1 V4 g3 M5 j
  2321. $ {/ f! {- Q  u  D3 {' f, Y
  2322. ;--------------------------------------------------  J" L+ e% r9 |& j8 b
  2323. Change_Select_Last_Item;上一个专辑
    # h; m; r9 r$ M2 R. @
  2324. LDA <Text_Disable_Flag
    8 A( M4 N7 \5 H, p6 o% Z
  2325. AND #TEXT_DISABLE_ITEM
    ! T: c2 z+ \+ ^' Q  }4 l
  2326. BNE Change_Select_Item_End
    6 Y" v+ c, r# e! \9 W8 O
  2327. LDA <Key_Once/ }* V% s3 c* e- Z/ Z3 S; P/ D; g
  2328. CMP #$08
    0 F  t, {+ a: w# O4 J
  2329. BNE Change_Select_Next_Item
    , h2 H9 T0 ]% ]6 c* p
  2330. JSR Last_Item
    ! g9 F4 n/ K+ ~; {) e5 Q
  2331. ;--------------------------------------------------% `" `! J1 k  _/ ~  O2 i: U$ C  {9 K
  2332. Change_Select_Next_Item;下一个专辑; {& n; c! ~7 y5 m/ V
  2333. LDA <Key_Once+ [4 s- d8 `; U% |7 ?
  2334. CMP #$043 ~  M( C. x* ?- i8 ]) F
  2335. BNE Change_Select_Last_10
      w7 n) u" M- L9 _6 R8 Q
  2336. JSR Next_Item
    ( B; H. Z3 {- j6 i
  2337. LDA <Music_Item_Cur
    * B- h5 ^2 d0 \
  2338. JSR Get_Page_Start_Index
    % ]- Z5 f4 k5 W! U, M$ U7 R) u
  2339. ;--------------------------------------------------
    / d; S6 x& r& T: Z+ _
  2340. Change_Select_Last_10;前10曲
    : C' o) f- J8 C+ i
  2341. LDA <Key_Once& O' y7 G0 ?- i& S
  2342. CMP #$40+ {! O) i" }: M  ?: f7 T
  2343. BNE Change_Select_Next_10
    1 b3 q3 b( q6 l# G: z' |7 o
  2344. JSR Music_Song_Last_104 J1 Y$ Y5 e0 W+ s3 J
  2345. ;--------------------------------------------------0 H  U9 ?3 ^- z) T: d6 D7 W5 U0 W# Y
  2346. Change_Select_Next_10;后10曲; S4 s5 T; E& H+ _" {
  2347. LDA <Key_Once
    + U; q* K1 \! S4 q' f$ j
  2348. CMP #$80' g+ J- K& k, S, X
  2349. BNE Change_Select_Last$ z7 F' X4 Z+ T* Z
  2350. JSR Music_Song_Next_10* P" I2 B  o4 G% ?
  2351. ;--------------------------------------------------
    4 g" T5 _% q6 v
  2352. Change_Select_Last;上一曲
    % V3 c1 B8 H: Z: |: z
  2353. LDA <Key_Once
    8 t" U+ S# ?* r. K
  2354. CMP #$02( F7 y  B* \6 Z9 ~) a
  2355. BNE Change_Select_Next8 h. I  X+ n! t: U$ L1 z
  2356. JSR Music_Song_Last+ J! `8 r& `& b+ z/ P8 O4 h( ~/ m. F8 k
  2357. ;--------------------------------------------------
    $ ^, F* R/ p' ^8 t6 q
  2358. Change_Select_Next;下一曲
    # d9 k; e6 }7 F$ ~% b
  2359. LDA <Key_Once' o2 p! S9 O0 Y% [/ g
  2360. CMP #$017 `1 [5 Z* a! e. o) |
  2361. BNE Change_Page_Next
    5 d3 w$ P  M, T2 x, q
  2362. JSR Music_Song_Next2 c4 B3 `8 z4 x; c: }( L
  2363. ;--------------------------------------------------# H% ^; ]8 e0 I* e" \' W
  2364. Change_Page_Next;下一页
    * G5 T8 D# a8 m' k8 z- M, K5 D% ^( @0 K
  2365. LDA <Key_Once5 ]  P" L& m& @
  2366. CMP #$20
    5 T9 g. ~2 }" [
  2367. BNE Change_Select_Item_End* I; `3 X6 M7 M+ w3 c
  2368. JSR Next_Page
    / S5 d: N/ f& t* J) V, V  Q( p
  2369. ;--------------------------------------------------
    0 _  S. r+ z7 H5 o
  2370. Change_Select_Item_End
    2 q% k8 I( ?: A
  2371. RTS
    8 C1 d; K! E: [% G1 P: Z
  2372. " v  S7 `3 k; _
  2373. ;==================================================
    4 i5 ~2 e. H" U) m* J4 `, F2 W
  2374. Show_Arrow;显示箭头光标
    $ y( c& [1 u; _3 ~, [  C( y' }
  2375. LDA <Music_Item_Cur  |$ _5 p1 t( ?8 @& c
  2376. JSR Get_Page_Start_Index
    ' ?& a, m$ E- @) ?# C- y6 }
  2377. LDA #$005 x, ]) h7 [: ~+ @0 X  }
  2378. STA PPU_OAM_ADDR, A) a  y- M/ H
  2379. LDA <Music_Item_Cur9 r: x9 M# v, s$ h2 J* G9 i, S+ L
  2380. SEC& O: @& }& ^, y. Y% o
  2381. SBC <Data_Buf$ B9 K/ `  e5 ^. O* T* `
  2382. ASL A
    3 j0 ]1 L: i! m" W
  2383. ASL A3 @2 c* ~2 f+ _4 [
  2384. ASL A
    ! [3 b9 @6 ]; p0 G. }
  2385. ASL A
    1 B! Z( q& P, H
  2386. CLC
    0 O* a% M4 y/ T- k1 g
  2387. ADC #ARROW_Y_OFFSET
    $ L4 n* x6 J" U) r$ c
  2388. STA OAM_TEMP_ADDR + $00
    1 U: A) C5 n( u, |
  2389. ;STA PPU_OAM_DATA1 w/ i  ^6 ~, v7 E% q* D6 m
  2390. LDA #$1F6 B8 [. h* H9 {
  2391. STA OAM_TEMP_ADDR + $01
    * M# D3 q2 n6 T4 i, d; ^
  2392. ;STA PPU_OAM_DATA
    7 u) d( s8 m& W* ]
  2393. LDA #$00
    : i. `7 K& }5 a8 ]) [; L' }4 o
  2394. STA OAM_TEMP_ADDR + $02: v! w3 y) s& m/ V
  2395. ;STA PPU_OAM_DATA/ D* w# L6 ]& w' R
  2396. LDA #ARROW_X_OFFSET
    2 t9 Y8 b( F3 j" o. b3 o
  2397. STA OAM_TEMP_ADDR + $03; @6 s$ L" y$ B
  2398. ;STA PPU_OAM_DATA) V- V- u' b% m! o2 @/ i* }/ {
  2399. RTS
    & u8 o5 z- |, z8 y

  2400. 0 `6 q8 v7 t2 T  y
  2401. ;--------------------------------------------------
      z2 B# F! ]! m5 \! ]5 k8 T# ]4 a
  2402. ;命名表数据: S" A0 M1 @: P. C( u5 B
  2403. Palette_Attributes' c; Q+ Q/ W. w! V- h
  2404. .IF SOUND_BAR_SHOW_ENABLE
    ! t* ]1 A7 T# R4 S1 s* O) O
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    1 p+ l  H& R) z
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55" |) E! B; g' w
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    5 t; ]9 @. k2 B0 m" {
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA5 G/ |1 {/ w2 `2 j' B
  2409. .ELSE$ N5 l  \5 u  h9 v# Z( v
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    . z- q2 _! P% d0 U" `
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    6 y# {) }; M5 p- i! h$ V3 k7 T
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$753 F- i9 O! @0 R( }  X# }
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA, N* O- F# Y+ n: ^
  2414. .ENDIF- T& G5 F$ P2 ~2 F) F; j

  2415. & j* Q! @/ J* |7 t$ \% p$ Q
  2416. ;--------------------------------------------------6 S, H8 P4 P! Q) u
  2417. ;调色板数据' ~( Z( b1 A1 d/ g( B% K. T
  2418. Palette_Data, C1 U  w& v# ]5 [9 f% Q! f: R
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    / A" Y- x' Y. r
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F0 x, q1 p% ]' x) o7 H# |2 E
  2421. 1 w" K( ~# W3 D/ L- t; d: R9 u
  2422. ;--------------------------------------------------
    : r# m) d" [) Y# M3 e
  2423. Static_Text_Data/ }9 W7 M* t3 b6 `* \5 h8 d
  2424. .WORD Static_Text_Caption_Data& T% [! }6 l  j6 ]
  2425. .WORD Static_Text_Author_Data
    4 A# n9 C* w7 e
  2426. .WORD Static_Text_Date_Data  a8 [+ r  w4 L: v$ [# y0 H" V  }8 w" Q
  2427. Static_Text_Data_End
    + j( H, {! h/ J$ }0 X
  2428. 7 W. E3 v8 H. Z( n$ b
  2429. ;--------------------------------------------------. Z# t0 X. c6 u' R2 t2 V1 x1 h
  2430. Static_Text_Pos# s1 ?6 P4 ?1 P% v: i2 [* W
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)% s0 @/ ]( c7 _' T3 o" v' q0 c- _
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)- ]4 O9 `, G" w" J: h& ^3 n( J
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)  z! P/ j: o) C
  2434. Static_Text_Pos_End
    0 V6 s$ `& Y6 Z; s0 o' j5 Y

  2435. # Q; K' P8 b* E# m. z7 r
  2436. ;--------------------------------------------------8 e! X% T5 }$ @" ]: l% \
  2437. Music_State_Stop
    ' h" N! R  a: U$ b% n3 U
  2438. .IF SOUND_BAR_SHOW_ENABLE, W& z, ?2 W8 u/ x& b% U: [
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00' X/ U0 S  y/ [; G
  2440. ELSE; i( e* c' b) e0 ~7 ]5 X0 h( m: r1 C5 s
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$005 J* I6 E3 p2 M! V* Q9 X9 A1 Y
  2442. .ENDIF
    1 I  g2 f" c  t+ j
  2443. Music_State_Play
    1 _9 y3 |0 F7 |* Z  m% G" ]8 e
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00+ F5 Q9 _) k9 D: F: b% @
  2445. 7 |* Y# r% B) |7 v3 m5 P
  2446. ;--------------------------------------------------* m: k; W* w% x& U
  2447. Sound_Bar_Text_Data;声音类型文本
    * T# s9 V. r  {3 u6 q% M, i
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"! L) |. ?4 `% X- }4 P
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    $ K# F7 W' D$ c9 q/ j$ f: k4 O; [
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"
    ; d4 @% A9 ]+ ~$ ?' _
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-") y6 {% n" Y9 F" o( a, a
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00: M/ f* W: E% t9 Q$ J/ p

  2453.   B: l2 v5 d; {3 W7 G
  2454. .IF Track_Name_Pos
    - V- X- \" o  x- k" e# i  R. S

  2455. 6 N' p% ]& D+ a& s8 A( X7 ~
  2456. ;--------------------------------------------------. N* A* N- c4 b' |# \7 c$ A
  2457. Track_Name_Addr_00;曲目名地址索引
    0 S$ y" ^* X( J' O5 N- i) ^
  2458. .WORD Trackr_00_012 |& A3 u- J( T. p

  2459. % v8 Y2 `' ~* T+ K  |/ x3 ^. b' x
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"! ?& |4 l# k: D
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"% M% b' ?4 |- c4 w9 t, I

  2462. 7 C- c+ P/ C& D* V8 }
  2463. ;--------------------------------------------------  N8 d, n; m% l
  2464. Track_Name_Addr_01;曲目名地址索引
    0 \; [4 Z0 }9 \0 l
  2465. .WORD Trackr_01_01% Z1 f3 t& t! [0 `
  2466. ; j; q( z2 R& u1 P
  2467. ;==================================================3 H! [( g6 q) u0 o. }( L; ^4 @% N
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"0 L3 h1 \3 T* o; I2 @- {
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
    ) X7 I+ y2 c$ q* J' ?+ j
  2470. / \, w' M! b; O! k  q
  2471. ;==================================================9 {3 e$ Z' g4 }) T" L+ `, W
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    & w1 f( f! k/ y6 R& a
  2473. .WORD Track_Name_Addr_00
    2 `0 s7 ~# ~% E5 {
  2474. .WORD Track_Name_Addr_01
    , _0 ]* k" s' m5 `( n" C( Y- `
  2475. .WORD Track_Name_Addr_018 ~) v( |- |. ^4 r( o

  2476. 4 ]# N0 l( I# m: t2 {/ K1 O
  2477. .ENDIF
    ' N$ N2 M( [' K- W  O4 i5 j
  2478. 5 ]3 C9 t' `. h: J
  2479. ;--------------------------------------------------
    2 l# F) u1 J0 c3 C
  2480. Static_Text_Caption_Data;静态文本数据
    3 |1 P( n1 F' W8 `
  2481. .DB 162 r, k/ N; [9 F( T5 i
  2482. .DB "FC MUSIC 12 IN 1"
    9 N+ N! A$ f% O
  2483. Static_Text_Author_Data; ^( ^; z5 z3 E( J% {; w+ q. M) x( I
  2484. .DB 25
    # J0 @9 O2 Y1 E5 N4 |
  2485. .DB "EXTRACTED BY FLAMECYCLONE"
    ) [8 s3 {4 ~1 U, t3 n
  2486. Static_Text_Date_Data( M) {2 t5 s- F% K2 t. P& X
  2487. .DB 10
    , L/ v8 X! t! e8 K% F
  2488. .DB "2023.07.23"; K! q+ Q: E+ Y  P* f. q+ ]; E9 [
  2489. " V+ T$ \. k0 m/ X
  2490. ;==================================================. ]# |( ?; X% u/ S5 T# p3 r7 g
  2491. Music_Collection_Name               ;专辑名间接索引
    ) h7 K2 r# K; w! M# m/ L8 k% ?, a
  2492. .DW Music_Collection_Name_00
    8 a0 `" P" s9 P: y
  2493. .DW Music_Collection_Name_01
      D' ^1 d$ Y( H& O- Y( o  ~
  2494. .DW Music_Collection_Name_02' y, N" [* N5 Y  u
  2495. .DW Music_Collection_Name_03& a6 ~; V1 v2 V. r; [
  2496. .DW Music_Collection_Name_04
    1 N' D/ J4 A7 s  ?/ Y
  2497. .DW Music_Collection_Name_05' }3 L. L9 v* Z* o* m, z  H/ x0 ^! D
  2498. .DW Music_Collection_Name_060 W$ ]- o# B, j# N. A" C
  2499. .DW Music_Collection_Name_07
    ' |' k( v! V  t8 I9 W; ]; \% S6 L
  2500. .DW Music_Collection_Name_08$ I/ ]: Y5 O& d% d1 ^( l
  2501. .DW Music_Collection_Name_09
    1 u/ e( b, @! F* p% }- a7 k
  2502. .DW Music_Collection_Name_10
    5 h- a( c# b$ S# R
  2503. .DW Music_Collection_Name_113 q4 g5 Q' w: y$ ?0 v' V/ e1 U! @

  2504. . i8 ?7 E' o& ?$ L  B
  2505. ;==================================================
    ( x7 a1 b. u4 E. q
  2506. Music_Collection_Name_00            ;专辑名文本数据
    , n% \2 {6 q0 X' R* |' J
  2507. .DB 11,"1.RAF WORLD"
    + u2 C2 x% L5 D, L% A6 L
  2508. Music_Collection_Name_01( S  s. G5 l, U1 z
  2509. .DB 15,"2.FINAL MISSION"
    # z/ ~, ^; K, Z
  2510. Music_Collection_Name_02
    ; |6 v% l! k9 e; L1 N+ ^' D
  2511. .DB 06,"3.KAGE"
    1 ~% w. S1 d' n3 b4 H* e
  2512. Music_Collection_Name_03
    ' D# ~, T" s3 l) F2 _" ^+ B  Q
  2513. .DB 16,"4.DOUBLE DRAGON"8 f; v* S! D4 s; I& _/ C. g% k
  2514. Music_Collection_Name_042 f$ u8 v: v# M! p* n6 A
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    0 k2 _+ y5 @, `3 Z0 c/ q4 x& G
  2516. Music_Collection_Name_05
    $ Z8 t  |# S4 j! \) a4 `
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    $ B# [" ~" ]7 R) O) O
  2518. Music_Collection_Name_06
    6 D: c: N; ?' \/ H& h
  2519. .DB 09,"7.ROCKMAN"9 Q. w* o; v( M
  2520. Music_Collection_Name_07: U  b& O1 {* m7 b; W1 @
  2521. .DB 12,"8.ROCKMAN 2"* Q% ^/ G, [" n2 @: Z4 b
  2522. Music_Collection_Name_089 u, ]9 x" w7 j7 u" Z8 c" e
  2523. .DB 12,"9.ROCKMAN 3"
    . \% Z+ C0 i' s7 Z0 z( J
  2524. Music_Collection_Name_09; w* C/ b/ I  U; r4 I$ I" V2 G
  2525. .DB 12,"10.ROCKMAN 4"
    & c3 c: j( K( n
  2526. Music_Collection_Name_10
    + n6 a" J0 P9 b2 K
  2527. .DB 12,"11.ROCKMAN 5"
    7 _3 v8 ?2 |6 o. q
  2528. Music_Collection_Name_11
    . a1 I& s/ I/ h2 O. M( ~
  2529. .DB 12,"12.ROCKMAN 6"
    ; R' l) L- P7 |' l1 F6 ]/ O

  2530. / B6 x3 B& h6 \7 s4 q
  2531. ;==================================================
    * \1 T& a  ^1 S( R5 g
  2532. Track_Name_Addr_Flag                ;显示曲目名标记2 O% U9 Y. }8 z) m7 q
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0
    ; E! Z9 V+ g- }0 J
  2534. : S; y  V. l7 F& A, n6 W* @
  2535. ;==================================================
    ) m4 Q- E+ W. o. [  u
  2536. Item_Pos_Data                         ;光标箭头位置
    . }" z/ H9 M. B; z
  2537. .WORD ITEM_SHOW_POS
    % u8 [. o$ s- B# A; e
  2538. .WORD ITEM_SHOW_POS + $00401 @  }, \; B; w8 c1 T) D
  2539. .WORD ITEM_SHOW_POS + $0080
    % I2 M  f/ H# r: U# T
  2540. .WORD ITEM_SHOW_POS + $00C0
    * S( r% m7 ]6 z- r
  2541. .WORD ITEM_SHOW_POS + $0100$ Y$ W& a- Y% P# c# m0 B5 r1 f
  2542. .WORD ITEM_SHOW_POS + $0140
    0 F7 p- ?2 C; l1 @3 v
  2543. . O+ g2 ^4 V3 h5 w
  2544. ;==================================================
    9 ^; ?' f) q4 }5 L  y( D4 r
  2545. Sound_Init_Port                 ;音乐初始化入口地址. x$ T" }$ x5 D9 \/ b' I- k6 c
  2546. .DW $BFC8( c! G" N& ^& r! U
  2547. .DW $D7F0
    4 f8 j$ Q6 w9 l1 j
  2548. .DW $9FC05 S6 I- r/ ?" L- ~0 w' Z# c% [& r
  2549. .DW $BF707 D2 m: H! Y. F/ a  s, F6 |& P
  2550. .DW $8003
    : B5 b2 S0 @# j4 ~) s) Y3 r
  2551. .DW $BF30
    ; d$ ?* S, [# o3 U* e( g
  2552. .DW $9003
    3 x/ Y# M# Y- ]# r2 B& W
  2553. .DW $8003
    : n; M8 v7 g$ J( h" t
  2554. .DW $8003
    8 I7 b/ \2 [! ~# X$ g2 W  d! j2 @
  2555. .DW $8003
    6 |, P6 K+ L* g5 \' `( z
  2556. .DW $8003" T! {' @) L  ^& R( C* e
  2557. .DW $8003/ f8 E1 N2 l$ ]: E
  2558. / [  ^9 A, c4 l1 v4 ~
  2559. ;==================================================4 a& w% g7 ^; Z6 r9 f3 Z
  2560. Sound_Play_Port                   ;音乐播放入口地址
    * g0 K* N9 n+ G3 T/ i6 d: a/ I2 T
  2561. .DW $8000
    - y8 L' h! ]& ^+ ?5 z* }
  2562. .DW $8001: P$ m; j! U$ t2 ?( K' D
  2563. .DW $A000
    7 u6 O) `1 u' W# m- c% s
  2564. .DW $8003
    ' Y# v' g2 m9 D7 o2 U4 y
  2565. .DW $8000
    " F) ~1 {! ^4 Z, b! B4 v' T
  2566. .DW $80030 d7 ^( X* `6 W- r  K
  2567. .DW $9000
    ) y' O9 }) n  Q4 r( @
  2568. .DW $80005 R/ Z" ~8 K, F4 F
  2569. .DW $8000' m; G6 Y+ v* u) G) h
  2570. .DW $8000
    $ Z" s+ {5 c# Y; I0 V1 s! _
  2571. .DW $80003 N* M: r( `7 Q
  2572. .DW $8000
    8 Q/ E# O1 [% `  e, e( F7 p
  2573. # o& Z, ]2 l% `  b6 G, d
  2574. ;==================================================0 d: e- @# P1 T  s4 }) z& z7 N
  2575. Sound_Reset_Port                  ;音乐重置入口地址
    + ^% x7 w2 u# T- ?
  2576. .DW $00007 U( p& [2 n' _( x9 s0 V( G
  2577. .DW $00002 M" g6 V% p' y2 @# Y$ g
  2578. .DW $0000
    ( s# z- s- m) s; l6 t! C5 q
  2579. .DW $00000 Y. w% w* m/ w! U( j5 ~4 h
  2580. .DW $0000
    . H5 r. A5 r& F( {# H3 Q9 a5 [
  2581. .DW $0000
    % n/ I, V1 ?4 g+ V, x' Y: O
  2582. .DW $0000' h$ w: p' g5 ^1 G
  2583. .DW $0000
    ; ^  a$ ~5 x4 ?  [# `. K( ]/ h
  2584. .DW $0000
    " `  ]- h5 G0 u' V  g
  2585. .DW $0000! K, c* i* F6 z% ~
  2586. .DW $0000: @8 m0 a1 b4 E& U" i; g4 G8 N
  2587. .DW $0000% Y: q; p0 l$ {* f, k1 L

  2588. 3 Q% `5 [/ i2 Y+ s7 |  W9 y
  2589. ;==================================================+ N  R1 w$ q) @% m( Y+ u
  2590. Sound_Total_Port                          ;曲目总数
    : B4 Q& p$ |  q4 C/ U
  2591. .DB 38
    " i. r1 v. [( E) |. H
  2592. .DB 33  a+ Q/ P9 X! r9 R8 ^; N9 e! N
  2593. .DB 49' U' o8 E( ]7 ?0 i
  2594. .DB 41: H7 I# K. x& h, _. {3 u- j
  2595. .DB 835 z& p5 O8 W- y% ^$ }  }
  2596. .DB 70
    2 \; f' [. e$ [; f6 X) a) t$ d( _4 _
  2597. .DB 50
    + U" I' u; i7 o* A
  2598. .DB 67
    8 H/ a" L7 z% c1 E0 ~7 x9 e
  2599. .DB 57
    ! a0 w8 o5 J3 T, [: b. W& O
  2600. .DB 71  ~4 j1 E& O9 g2 R3 ?# l
  2601. .DB 76
    1 e+ v7 C1 f/ Y. I  n
  2602. .DB 102
    ' w3 E6 c% O% z1 s$ C% N

  2603. ! M5 J% P# o5 f& D7 N
  2604. ;==================================================
    & o, Y( i+ {; X5 @2 U1 B7 P
  2605. Sound_Start_Port                      ;起始播放曲目) z! a* E( s6 f
  2606. .DB 003 g+ l- g# U  {8 ~
  2607. .DB 00( a7 f  i- b' G) A* v4 f) K5 w# B
  2608. .DB 00
    ! f1 ]6 B) m% s1 r8 g5 {2 \5 C7 N
  2609. .DB 00
    7 [) r. Y: p  Q! n7 H9 ~
  2610. .DB 00& P# V+ F! ]9 O
  2611. .DB 008 n$ h, x. z( f0 N
  2612. .DB 00/ o, X) `/ J! X# \2 g5 }
  2613. .DB 00
    - j2 I- u. y7 H. s5 q2 g
  2614. .DB 00
    - ]6 p, B# k' p. o. z
  2615. .DB 00' i+ Y# Y" J' @* s
  2616. .DB 00; g9 e. M9 F3 G1 \0 K
  2617. .DB 003 ?" \( \" U1 r# f* ^# T0 N

  2618. 3 _* O, L) S8 L; N9 |/ X+ [
  2619. ;==================================================
    ; P# H3 L: N, J/ d5 w9 {" y4 ]
  2620. Sound_Bank_8000                      ;专辑bank_8000
    3 N& [; p0 w( O1 O& `
  2621. .DB $10
    , w# i' M1 l6 i9 x
  2622. .DB $12
    + F5 e: ]: ^. F' ?3 H  Q6 W/ u7 [
  2623. .DB $14
    9 l% w3 Z9 U" k2 U  r- W' J1 K1 r8 D/ a
  2624. .DB $161 M4 I# n) e& C: D
  2625. .DB $18
    8 E/ }, }" I2 L7 Y1 _
  2626. .DB $1A
      k0 v+ f; h: w% K; S0 n, E
  2627. 8 d8 q% y5 g0 G6 Z3 O8 l
  2628. .DB $008 J# y" {1 r( ]& w! K0 }
  2629. .DB $02, n0 s# \" l/ L  S: N
  2630. .DB $0D
    0 _0 y) d. V# G1 P" M
  2631. .DB $04! [0 |, k$ K9 A- ?" U
  2632. .DB $07% ?. }! P: K  w3 _/ ?& }4 z5 r
  2633. .DB $0A% u( Y  _0 B+ F/ S& `$ X3 z

  2634. , M" f7 s% u+ d+ u# Y
  2635. ! I8 M& J4 `9 s/ s9 s
  2636. ;==================================================
    ( H) k3 ?, e9 g" x" F, m! z7 k
  2637. Sound_Bank_A000                      ;专辑bank_A000- O! P0 K& H7 j3 E
  2638. .DB $11* @3 Z' i( L, Y0 ?! M
  2639. .DB $13
    ) N7 c1 X5 W8 @- B/ O! K
  2640. .DB $15
    9 I% P$ K# E9 e' [+ I
  2641. .DB $17: s4 c, n7 A+ v" T( R
  2642. .DB $19: w/ B9 ?" {8 M* y! f
  2643. .DB $1B5 I+ F3 D' A3 }
  2644. . f5 }! C+ U1 x! D
  2645. .DB $01% E) g+ q8 `8 P+ W3 g- Y8 p
  2646. .DB $03& i% W+ N8 D5 E8 A/ t  N0 I, A  Q
  2647. .DB $0E
    1 j) l+ h0 P; U2 p
  2648. .DB $05
    7 q- V8 K" l8 k1 t
  2649. .DB $08
    4 ^% `+ U' Q, `& z  e! d4 |# T
  2650. .DB $0B
    / ]8 e9 k1 H+ D; j3 N4 G

  2651. ' Q) a" v1 ?' H- z: a; j! T

  2652. 5 y! y  {7 B5 X
  2653. ;==================================================. b6 U8 D# e+ j# l) [
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    ' Y- p% ^5 s4 i
  2655. .ORG RESET_ADDR& `- i* I/ R7 L

  2656. % V& ~: V& ?' M! [# Z1 T
  2657. ;==================================================
    # p8 B# D& b3 l7 A* w' L; w
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    7 ]* s0 s2 }5 N0 j/ [
  2659. PHA
    7 c6 z0 E4 F4 u% r- }
  2660. LDA #$06
    , E3 S& i8 I8 M/ I
  2661. STA MMC3_BANK_CTRL
    8 M% G; L- X* s5 [5 h
  2662. PLA# x" V4 J& J0 J/ A
  2663. STA MMC3_BANK_DATA  x* {) l- [- c& j" {4 i" Q5 e
  2664. RTS4 u4 j7 w7 s! j( F7 d4 L6 `5 E5 Z

  2665. " V" C. w8 P8 W/ o+ x
  2666. ;==================================================
    2 v- r. e, j! A: y+ N$ }2 P
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    & I0 N3 `2 f1 M& ~$ ~
  2668. PHA
    % U: r5 E; F& r2 ~  b
  2669. LDA #$07  e- S/ T; J$ |: h' I; D' {$ W
  2670. STA MMC3_BANK_CTRL
      C' L' p$ i1 w7 N6 d
  2671. PLA
      L: U4 O' V/ W4 b
  2672. STA MMC3_BANK_DATA+ r5 ^* y& v7 J
  2673. RTS  d; f" q$ h. ?( i) Z2 H
  2674. ' o  o5 T) Z( k' F% o9 e7 e
  2675. ;==================================================  x: A9 R0 W( P5 P  d8 ]0 N
  2676. Switch_Main_Bank;切到主程序bank. ]$ R1 g$ N2 v" @$ b$ O
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK2 _$ M0 \/ w9 L5 b# r0 B# W
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    7 Y7 H. g0 z" i( R5 Z$ {
  2679. RTS
    - Y; v$ v* g6 N/ a
  2680. ; U% x3 B' p% M8 ^3 F9 ~1 a. v3 D
  2681. ;==================================================* \. P- A( \4 }; w
  2682. Sound_Reset;音乐重设(如果有的话)
    , `4 z6 T2 ~$ n
  2683. JSR Switch_Music_Bank  ;切换到音乐bank' O# o3 w% A" ]
  2684. JSR JSR_Addr_Op        ;执行音乐重置* c7 R% n/ V& _) K1 I2 ?
  2685. JSR Switch_Main_Bank   ;切回主程序
    , N* M" ~( R( g# I0 O8 E( i9 B
  2686. RTS3 O' m" w& @* I5 v* X

  2687. $ ^& d9 ?$ n- o5 A2 y/ h. d+ e" s& [6 W
  2688. ;==================================================1 h) H+ ]% L( J( [' @5 B* L3 M/ X
  2689. Switch_Music_Bank;切换音乐bank4 B+ H- d3 F% Y! n* p4 s
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号) I/ e) f1 t7 _/ A+ c* H
  2691. LDA <Music_Bank_80009 W/ C: ^3 s* v9 n3 S" X
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank% W3 C/ W& k  K, m
  2693. LDA <Music_Bank_A000: v; s6 r8 l; h: Z6 s! a
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank; j6 N3 p" X6 ~2 ]
  2695. RTS
    / E0 [5 P# C% N) h: q0 V

  2696. 2 d* s2 V. I$ |& s% H1 K
  2697. ;==================================================3 s4 h4 E: R' m5 X& i* j; o/ @
  2698. Sound_Init;音乐初始化# l/ E) f7 G& _( B  @
  2699. PHA, l5 _9 K5 P9 O: q! s8 B& o
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    6 D! e- ~6 X; M6 w8 c
  2701. PLA! O1 ~/ N* K; l. I
  2702. JSR JSR_Addr_Op        ;执行音乐初始化$ |: D/ A" B$ n$ W$ u7 y' R
  2703. JSR Switch_Main_Bank   ;切回主程序, H& B; P$ x# n/ i( a7 Z
  2704. RTS
    0 P! ?/ z1 `7 Q) d8 z; m  Q
  2705. 7 M$ C, p5 m1 e8 |+ L3 l$ t
  2706. ;==================================================) a$ n3 \+ m3 ]5 C
  2707. Sound_Play;音乐播放
    / d; r3 o2 h0 O0 ^2 [' ]1 z9 j$ q
  2708. JSR Switch_Music_Bank  ;切换到音乐bank  R3 t" p( c' D6 L# Q4 a; P
  2709. JSR JSR_Addr_Op        ;执行音乐播放6 T* ^- {8 q5 \' W) a
  2710. JSR Switch_Main_Bank   ;切回主程序/ |' x+ _7 d+ K. z5 z
  2711. RTS
    4 W) A  I# K9 |6 Q

  2712. 2 c* j6 E$ o8 |$ d; @
  2713. ;==================================================1 k9 V  C, K6 B6 y
  2714. MainLoop;死循环3 {9 Y1 m5 a9 n5 j4 ^
  2715. JMP MainLoop
    % Z' m7 O6 }7 U8 ?' S8 d
  2716. 8 U4 l1 ^: c8 ~) T
  2717. IRQ_SUBPROCESS_JMP = 0
    $ v5 z" @5 ]9 Q0 D, M$ D+ q1 w
  2718. ( s  X- o% w. M) @/ C; y
  2719. .IF IRQ_SUBPROCESS_JMP  B0 C; S9 d0 D* m1 U' x! }
  2720. ;==================================================( l" M  A5 F/ h& ?' M: U& v
  2721. IRQ_Process_0;IRQ处理过程0/ U3 B+ |% z$ B5 m4 c8 ]

  2722. " a1 Y+ P9 c8 K* z+ `4 p8 [
  2723. ;15条扫描线后触发IRQ
    4 S3 T7 r, g3 O! g2 S
  2724. LDA #15( R3 P8 p: G! X6 r. p
  2725. STA MMC3_IRQ_LATCH
    2 D2 f$ t/ u$ G( k$ Q
  2726. $ l5 l! O4 @5 d, J6 W1 A8 ^
  2727. ;设置屏幕滚动
    * N7 e4 z& y2 z& S
  2728. LDA <Scroll_H; u/ K: D: M. D2 @
  2729. STA PPU_SCROLL
    2 [. Z; ?/ ?6 L6 D/ e, o
  2730. STA PPU_SCROLL. d+ B! w8 W) h0 i2 X5 ]

  2731. # i" z2 S. e, M1 g
  2732. IRQ_Process_0_End
    " U1 X5 V8 ?) g. g! s; b
  2733. INC <IRQ_Process_Index
    " u9 c, ?( H5 g0 E6 F" I! M% F
  2734. JMP IrqProgramEnd
    1 o4 V0 T  r% E

  2735.   Y! G; Q2 M1 r% A  g, U1 _
  2736. ;==================================================  x) P2 ]; G4 ~) _  s
  2737. IRQ_Process_1;IRQ处理过程19 ^6 {: o, c2 Q4 W, C5 `
  2738. / q% v5 y9 m' d8 Q: S  E
  2739. LDA #55
    # z# @& K9 s2 z
  2740. STA MMC3_IRQ_LATCH& U( w  h9 l; t( z1 E" U

  2741.   L- z8 e3 d2 z& M
  2742. ;设置屏幕滚动) D. m9 {" X3 R; {& R7 ^- h: ]! W
  2743. LDA #$005 d" Q  ~( F- V$ k3 H; S( |
  2744. STA PPU_SCROLL
    9 }2 f2 J6 O) x! t8 d/ _
  2745. STA PPU_SCROLL
    ( e; b$ y) t: P
  2746. $ s1 ^5 a0 p! T% W" r- p+ A
  2747. INC <IRQ_Process_Index/ V" l& k$ z2 H# Z, G
  2748. JMP IrqProgramEnd
    ) c* ~& W) P0 s- u" P1 z6 ?
  2749. 4 \2 u! V/ U, ^
  2750. ;==================================================
    # x3 o; V2 B) h' r
  2751. IRQ_Process_2;IRQ处理过程2
    7 g8 x9 J: g. P* I( T3 K8 \
  2752. & d* ~" r# i1 A- A; o$ c* Y1 W6 Z
  2753. LDA #15+ {1 K+ Q% K5 S3 }! I3 d" L' S
  2754. STA MMC3_IRQ_LATCH
    # J$ n6 I' C2 G: u
  2755.   L& E0 [" K# q# k# q
  2756. ;设置屏幕滚动
    % S" p* a8 i. C+ z
  2757. LDA #$001 \* r. b* B9 p$ v" g4 S2 k
  2758. SEC
    ' r0 }' u; u! \0 W% L
  2759. SBC <Scroll_H8 i6 T( Z8 X) ]: m% W4 R
  2760. STA PPU_SCROLL# ?) R3 c, E$ ^+ N3 F
  2761. STA PPU_SCROLL
    8 q+ i/ R7 U. S/ W

  2762. & l2 m3 B+ X: B+ m2 Z  O6 x3 L
  2763. INC <IRQ_Process_Index
    ' k% X) \2 ~  C  l/ C
  2764. JMP IrqProgramEnd4 u% u" ]4 @5 g" J* B! n1 [
  2765. 2 S; @! A/ _* _
  2766. ;==================================================( ]) V& t, J7 q8 \) y) y% v# F
  2767. IRQ_Process_3;IRQ处理过程3
    ! _/ S# [4 ?1 G; ]* T' `- E' P

  2768. - B2 s& L! f5 {! P9 }9 a1 A
  2769. ;设置屏幕滚动
    : N& X' y0 @* _/ n& v0 {
  2770. LDA <Scroll_H# C) n3 E8 D  l1 g( c
  2771. STA PPU_SCROLL
    ( |$ \% E" V3 N" A( M( B
  2772. STA PPU_SCROLL  x7 U; o; d+ b5 d

  2773.   x" n; K4 e5 i5 i5 n
  2774. ;禁用IRQ
    $ z- y; z+ G3 |; a
  2775. STA MMC3_IRQ_DISABLE6 s& s) p+ _- f+ O6 }
  2776. JMP IrqProgramEnd* y4 ~! h7 P/ a! Q1 }
  2777. 7 S/ E4 S* [: {, n& n
  2778. IrqProcessAddr
    . e. s3 K" T) t
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_33 V: t. e7 G7 {/ c7 G  K7 @) U

  2780. ' P8 w3 y% j& W9 V1 H% C2 x0 u
  2781. .ENDIF
    5 K, k9 t$ D, b* [$ a* Y
  2782. 8 e  @# |/ D- L6 t5 f/ W- S/ I9 x
  2783. ;==================================================& c$ Y8 W# w+ o- r8 J
  2784. ;IRQ滚动模式常量+ @) F0 F" P0 Z
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
    0 j- Y7 M/ I5 a% G
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    % }; N% Y4 D' u( `0 D/ O7 B
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    $ u! ^: t0 u, y' I* x% q% A' t7 r

  2788. 4 I) W3 R( }9 ]
  2789. ;IRQ扫描线数据
      x% K9 a7 R" v0 u" U" b1 s' K+ u7 a
  2790. IRQ_Scanline_Data/ u& O. Z! D+ b" h- ~
  2791. .DB 8' _- C1 o9 |2 t0 F5 R- m; s
  2792. .DB 54
    - z4 K7 F$ u) B6 W
  2793. .DB 8% q8 b; V2 e, C( ?4 ?* o" W+ Q0 w8 T9 Y
  2794. .DB 00 ;关闭IRQ6 z8 V2 z3 J9 a% O6 i9 \

  2795. 8 s. X7 o, u8 H2 w. W5 i) Q6 Q
  2796. ;IRQ滚动控制模式1 O* ~* N- L, [6 n/ T3 J, P
  2797. IRQ_Scanline_Mode
    0 S  W0 P, e6 H1 N7 V' B
  2798. .DB IRQ_SCROLL_MODE_ZERO
    + L% F* k9 {" ?. I& |* s
  2799. .DB IRQ_SCROLL_MODE_ZERO! f2 {2 H2 `* t+ ^
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    ; V: N" L2 B8 u/ F' |: c
  2801. .DB IRQ_SCROLL_MODE_LEFT
    8 p2 P- E  s4 E# k/ c

  2802. ! _) e+ n+ \) b& U6 A
  2803. ;==================================================
    + d5 X4 E& H6 d# t% X& u
  2804. ;IRQ处理
    + J2 d" g! z+ o( z& ^5 t
  2805. IRQ_Process
    - k9 d; F3 v2 M
  2806. LDX <IRQ_Process_Index9 N* P  w* Q. ?
  2807. LDA IRQ_Scanline_Data,X' t. V- ^3 O) `. M  f  `
  2808. BNE IRQ_Process_Latch
    2 y7 A2 W+ ?, i4 J7 z6 b7 K7 |- `3 y
  2809. IRQ_Process_Disable;禁用IRQ
    6 {; J7 \+ d( J/ {6 m
  2810. STA MMC3_IRQ_DISABLE7 K) ]% L+ V; D* }- y# @  I" S- C
  2811. STA IRQ_Process_Index; Y* ^2 z& c% \: i
  2812. BEQ IRQ_Process_Scroll3 a! Q& y6 y. }: A& [* O; w/ R
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    / f9 V. t9 `& N7 K
  2814. STA MMC3_IRQ_LATCH
    * Y% G0 V$ A- q, Y6 e/ G2 W2 @7 [
  2815. INC <IRQ_Process_Index
    + V- q2 l% w* v
  2816. IRQ_Process_Scroll;IRQ滚动控制8 c% U9 z' f7 Z" F( O$ }5 A4 B. R9 f
  2817. LDA IRQ_Scanline_Mode,X2 w4 }. v6 {9 ^. c3 ?
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    : R1 }! P; j1 Z/ D7 A& Y
  2819. BEQ IRQ_Process_Scroll_Left
    % k8 |$ M. J0 \1 h9 R2 H  o0 k
  2820. CMP #IRQ_SCROLL_MODE_RIGHT
    + m4 v: s: ?. o# B/ G8 Y! S
  2821. BEQ IRQ_Process_Scroll_Right, N4 @2 K) ~  \" l4 N+ w7 ~" ~
  2822. IRQ_Process_Scroll_Zero;不滚动# J2 `- L/ m4 [; C/ Y5 F& e
  2823. LDA #$002 [5 N4 y! a/ k- X- `2 x& ^5 K
  2824. STA PPU_SCROLL( K$ d5 \( \5 m* |
  2825. STA PPU_SCROLL
    ( L# m1 Z3 Z$ }4 b5 ^, I
  2826. RTS. U# ~# @  U6 c+ m
  2827. IRQ_Process_Scroll_Left;向左滚动: O+ p7 j0 l2 N" p0 R1 X( R
  2828. LDA <Scroll_H
    0 v: V1 P/ [; r2 H6 B
  2829. STA PPU_SCROLL
    2 D. C( J/ D$ X2 N$ b: s  {
  2830. STA PPU_SCROLL
    7 E. N* S& |7 j1 v
  2831. RTS- X. u1 e2 t- T4 H2 {9 s) w% V/ w
  2832. IRQ_Process_Scroll_Right;向右滚动
    7 h6 j! ~' ^6 G& d! s6 i/ ^7 Z% o7 O
  2833. LDA #$00- }# B, {# `( I9 J* ~! ~3 P5 q
  2834. SEC
    ! T! j8 ~3 v# ]9 x; @* |3 q
  2835. SBC <Scroll_H8 X' A# }0 s. y# x9 r: n
  2836. STA PPU_SCROLL
    . y- c1 T' W8 y" s" `0 i
  2837. STA PPU_SCROLL
    0 W% _' |. i# m. K
  2838. RTS0 B5 w& A. S$ ]; a9 d/ o2 K7 x9 i

  2839. 8 S: Z" v9 Z6 y; A. h
  2840. ;==================================================
    - t2 p$ v# g) q+ Q) W
  2841. NmiProgram;Nmi中断处理
    8 ?9 D  w3 f, [4 ~: Q* [4 y  x
  2842. PHA
    : B; o. v6 |0 ~, x  m2 s3 U
  2843. TXA
    * M' x6 y; Y' j  n
  2844. PHA
    " B( P5 o; G5 R) Q* x4 w
  2845. TYA
    5 f* b0 {; N5 M- B# O1 ^* L
  2846. PHA
    3 m% `  j6 o, d3 s  a( ]- B  k

  2847. & q  A% v& _& O
  2848. ;读取清除Vblank标志, 防止重复进入
    ) l. r$ @& Y, T! m2 J5 x4 d5 H/ U
  2849. BIT PPU_STATUS
    , \& K7 o, j& R9 D) u
  2850. + `+ m+ f3 @3 @  S  x
  2851. ;切换主程序bank
    2 P; k9 G3 D( R4 b% a/ ^
  2852. JSR Switch_Main_Bank
    9 ?' \- T0 P$ [' {

  2853. $ u8 m- g% c- v: i$ U8 y8 X
  2854. ;Nmi处理
      I; x1 F! ^4 L! g6 A
  2855. JSR NmiProcess" S5 z! H4 k0 \0 f
  2856. & W! \; [* ]* |, p9 y9 p8 x
  2857. Nmi_Proc_End: d5 U8 F6 \* N, m$ i: I
  2858. PLA
    5 P" ~# t* i9 n4 q  w4 J
  2859. TAY
    $ f2 {' X* f( w1 m
  2860. PLA3 C3 _3 g2 S2 P. Y2 c- j8 h
  2861. TAX' D( j' A+ w9 z4 t$ t/ G& i
  2862. PLA, @  R1 B1 f% F* ]& z1 [
  2863. RTI: Z6 B- n; u  F. H6 U" ]

  2864. - ~0 `" ]/ ~! W' g
  2865. ;==================================================
    4 `0 E1 a/ t- R5 c" k! y
  2866. ResetProgram;重置中断处理( O* y% n: @$ l0 z4 S
  2867. SEI$ x& v. g; a0 v; e8 P" |
  2868. CLD
    1 T# S! j5 v3 a$ ]8 f+ N" I, P% @$ j
  2869. LDA #$00
    , t. s. M9 a$ \9 Y5 X2 a/ r5 M, K9 z
  2870. STA PPU_CTRL+ V* f3 K: X$ {/ C& ]5 x; _
  2871. STA PPU_MASK# i5 E+ p% m$ q4 x- r( G& c8 D

  2872. 7 k' l( T# j, b2 M$ ^
  2873. ;切换主程序bank
    9 A6 c7 x! }( E& U2 _6 O
  2874. JSR Switch_Main_Bank- o9 d) X; m. }0 B9 C6 w3 z1 }

  2875. 9 F4 P  O: x/ c, V/ h0 U5 ?
  2876. ;程序处理开始5 w# J$ ?+ b4 L1 Z( T. d' @% u
  2877. JMP ProgramBegin
    . w! f) s; f2 B- }
  2878. 3 r. U; r( Z+ J. Z  B
  2879. ;==================================================3 }* S. n" y9 ?7 _& E& q- C, Q
  2880. IrqProgram;Irq中断处理9 h, Q1 A9 E) C2 D8 D# }& v) ~
  2881. PHA
    3 ?$ r$ I/ F5 x6 h
  2882. TXA) r) p- Q2 _9 d
  2883. PHA8 l& I- u; {3 I2 P; @
  2884. TYA
      ~; N' V3 q9 J, E9 p
  2885. PHA, M/ S  y2 |2 X1 v* Q
  2886. , k1 N- F  q& a
  2887. ;关闭IRQ5 V) u5 Y2 s: V5 Q8 {, ^9 \
  2888. STA MMC3_IRQ_DISABLE( v) q- V$ v! W% X; Z
  2889. 0 [* d+ u1 a7 z3 s' D. s
  2890. ;允许下个IRQ触发
    8 N5 k- v0 r* B8 Q8 F  F6 C
  2891. STA MMC3_IRQ_ENABLE
    8 b1 f  U5 y9 v% P. m+ l. g0 I

  2892. 6 \+ _6 b5 K  r6 S( D1 t& i
  2893. .IF IRQ_SUBPROCESS_JMP1 s7 F4 T9 b# q$ l3 z! m
  2894. $ T8 C/ r% V( Q4 q
  2895. ;执行IRQ过程
    ( d9 T! T( J* \6 d% O
  2896. LDA <Data_L
    7 }9 j4 q- U  S6 I1 |
  2897. PHA
    2 t& _+ c, A, c. _, Q. j6 g
  2898. LDA <Data_H& _$ H- V5 m, D+ q* ~
  2899. PHA
    * b  D! o0 m& d7 i' t
  2900. LDA <IRQ_Process_Index
    ; T. W* ]+ M$ t  N, x
  2901. ASL A
    - ~2 }& s4 ^4 u4 o
  2902. TAY$ a0 @! S- @( X! S$ S8 R
  2903. LDA IrqProcessAddr,Y& _" R# j: x1 g/ r! l  \1 ]" v) H
  2904. STA <Data_L( e  x) |: r7 L  L! Y7 c
  2905. INY
    & e& q& A0 g9 C% I
  2906. LDA IrqProcessAddr,Y& w, `1 i) t; [: b2 Z0 \
  2907. STA <Data_H$ M0 @$ j- w4 \- R2 t( y
  2908. JMP [Data_L]
    6 e6 ~6 x  x/ g3 v. ~; z, y

  2909. " ~* ?& B8 G3 y
  2910. .ELSE
    % J9 R# E, G( e0 F
  2911. . ?+ i1 h2 Q9 P& i( D
  2912. JSR IRQ_Process; @6 B' Y/ {  b) y. d0 q/ `

  2913. # \& o$ l( t# N9 k+ c: R. H/ u
  2914. .ENDIF
    6 M$ \4 O4 r+ W* [& x

  2915. 7 i; }8 r* d: z! q+ @$ r
  2916. IrqProgramEnd' n1 C& n5 O7 z
  2917. .IF IRQ_SUBPROCESS_JMP  U" @5 X1 m: J! A
  2918. PLA7 F% S) ]- n" \" j
  2919. STA <Data_H2 \# u; I% l  |4 V1 K+ ~% t1 T& X
  2920. PLA7 h: U7 w& z) M2 H4 X# H
  2921. STA <Data_L
    ! J( r" K. h( R; `) m
  2922. .ENDIF2 b1 r' M. `9 a5 _4 ~! j7 @' O
  2923. PLA" B6 i' F) o9 a
  2924. TAY
    # u( A. Q8 q, o: \8 O  n
  2925. PLA1 N8 s! h& w% t7 q1 G7 M9 `! E
  2926. TAX  L& z' I) B6 [8 N5 [, F
  2927. PLA' d$ l, m, E3 }/ t, Q
  2928. RTI9 p% z! X' W9 j8 M  k

  2929. 4 O, W: ^8 n3 P9 t5 e/ r6 O6 W
  2930. .ORG $FFFA9 A1 X) M7 k* c# V! p% |
  2931. .WORD NmiProgram0 e% j! c- J+ E# W7 G7 }3 [# P' `- D
  2932. .WORD ResetProgram
    : L! Q* a' W  A3 K
  2933. .WORD IrqProgram! C/ G7 h. t9 \) C1 X
  2934. 1 z$ i7 J" }- f7 v6 k. p* s
  2935. .BANK RESET_BANK & BANK_DATA_MASK& {- }! c3 _/ ^$ Q' s3 E+ p1 `. d
  2936. .IF SOUND_BAR_SHOW_ENABLE6 k& \, U, s* N' c7 q
  2937. 4 H) b" |( w  w
  2938. .ORG $FE00, z2 d$ I( R- X
  2939. PHA
    9 J9 A; k9 ~+ l" L7 V/ X
  2940. STY $07BA2 C  `3 V; K" i  X$ u! L/ `
  2941. LDA #$8D/ Z" R% k5 n$ Y6 A
  2942. STA $07BC
    3 h, T2 P; W) t' d- @
  2943. TYA
    . m+ k  @7 P  F$ i
  2944. CLC* V, d& }& F3 T; w4 Z
  2945. ADC #LOW(Sound_Bar)
    , w9 |  A- j8 E. T3 ^; z8 ^3 x9 {2 |
  2946. STA $07BD
    ) Z5 Q# M# \# C) I7 G7 o$ ]
  2947. LDA #HIGH(Sound_Bar)
    ( }2 g# g; Q' C! w
  2948. STA $07BE
    7 H5 q% W/ {+ Q6 b/ ^# r: c
  2949. LDA #$60! e0 r3 R7 U3 ]8 m4 |- C2 R
  2950. STA $07BF6 K# h0 W/ w6 t
  2951. PLA
    * a, ]4 Y* Z+ R0 b$ ^8 G
  2952. RTS
    2 W5 e. n  _' p+ k* m! j% a( R

  2953. 6 i* G+ \# n5 Z! ]$ C  W7 e& S' u
  2954. .ORG $FE20
    6 }# a' a; L! Q7 ?+ l1 c1 `
  2955. STA $07BA
    & x5 y. s  E7 s4 l: t' L3 [
  2956. CLC: `! \9 M1 N3 u6 |  {4 f
  2957. ADC #LOW(Sound_Bar)
    & C+ Q2 _* W: l
  2958. STA $07BD
    + E0 b) z  B; C
  2959. LDA #$8D
    : M* u  l/ A  M8 g+ ~
  2960. STA $07BC
    6 N2 r1 [. S: k! f6 o$ t5 w
  2961. LDA #HIGH(Sound_Bar)" R# Q, V% x1 S4 f5 o2 Y/ H' `! `
  2962. STA $07BE
    - b: [5 y, w% F
  2963. LDA #$600 z5 B6 q) c+ Z! x% t$ {7 q9 ~4 o
  2964. STA $07BF7 Q; c8 h2 P$ g( e
  2965. RTS
    6 t3 m, C/ t! I* |% i1 A+ }

  2966. $ ]6 J8 x( t% o! G$ s
  2967. .ORG $FE40* o6 k. }7 |  z
  2968. PHA
    7 T8 \7 y0 p  b, I& w; O( ^- m- a
  2969. STY $07F1! J6 t  P$ i! V1 g( y
  2970. LDA #$8D
    . k/ W! W8 G" x  d8 Y! h$ H* t
  2971. STA $07F3
    6 F; A6 k4 A+ p, O9 I  c5 _+ s
  2972. TYA
    % W- t& p2 M- |7 a5 t8 {% Z: X% H
  2973. CLC: y: F4 j2 ~& a
  2974. ADC #LOW(Sound_Bar)
    ) }% g* O8 B, T. ^8 e
  2975. STA $07F4
    & z7 R9 B) G; z4 _
  2976. LDA #HIGH(Sound_Bar)( v0 z: A1 m" Z4 J+ M
  2977. STA $07F5
    ! r) U+ }  Q3 x8 k
  2978. LDA #$601 i7 F/ |: W, V- K( A( B) |% x0 R
  2979. STA $07F6
    + O* g2 h3 U! L" x- x0 ~) X
  2980. PLA1 G* L) ^* u- h- g2 t- X" G5 ^
  2981. RTS
    ' Z/ w! k. k0 y0 u. q' K
  2982.   Q. X7 D; |" h
  2983. .ORG $FE60: V9 L+ @( I6 Y& \( y3 `; G
  2984. STA $07F1
    ) z& L  {/ J* a, v: @
  2985. CLC
    / P, \5 F; y4 ?- D" ]% ~
  2986. ADC #LOW(Sound_Bar)
    ! _( E1 ^" G0 F" ~
  2987. STA $07F45 j$ H8 [' `+ S2 ]
  2988. LDA #$8D2 ~. Z; d# g2 J
  2989. STA $07F3
    + z' }" @7 g% d8 w
  2990. LDA #HIGH(Sound_Bar)$ t1 w& t8 s, [( b* c- C9 M
  2991. STA $07F5: K* q- ~/ x, [7 Y6 w4 v) d
  2992. LDA #$60
    % O8 m) W, E* n9 v0 N+ }% S
  2993. STA $07F62 ~. \/ @( {# c; D! i: W! x" _
  2994. RTS& U- g: X( T/ g- B+ z; x

  2995. : h, K& c: R6 R, U, s9 P
  2996. .ORG $FF407 Z. `3 z8 B0 J# b5 m' \
  2997. STA $4000! a3 a, j: @" ]! B
  2998. STA Sound_Bar + $00
    . K0 O* c9 h2 W
  2999. RTS7 `' b' {4 Q7 E/ c# x

  3000. 9 D" A8 y; p. e+ z& G: J4 {
  3001. .ORG $FF487 H2 X. i  v2 ?6 O7 `  R9 p3 d) }' k
  3002. STA $4004
    8 o4 z8 g) n; [" Y" `
  3003. STA Sound_Bar + $04
    # H' U) h$ u5 U8 _9 c
  3004. RTS/ {; S$ T1 [" G  }$ ^  J: L
  3005. % C( R1 h+ ~7 ^/ h) ?& a6 ^, S
  3006. .ORG $FF50$ Q% D6 w) b+ a7 `2 T7 b
  3007. STA $4008
    2 a" A; v( m# I* Q& Q  p. X
  3008. STA Sound_Bar + $08
    , X# e1 D* s/ g' h+ y7 n+ y( D  G
  3009. RTS: M- u0 o4 R& u1 V
  3010. 1 J8 z% t6 q3 }5 _! C
  3011. .ORG $FF58+ X! Z  L+ [" j$ s6 f
  3012. STA $400C5 n' V- `' u7 y6 a/ P0 U3 F
  3013. STA Sound_Bar + $0C
    9 [& d! G5 H, z4 G# z$ D
  3014. RTS
    # o6 d) {8 r  N9 H% S' h1 r
  3015. 1 P$ e  N7 ^6 ^1 n9 ^( V
  3016. .ORG $FF60+ m+ N3 E" X7 R5 D1 _/ @
  3017. STX $4000
    - {% u3 u$ l; w3 M: D! l/ M
  3018. STX Sound_Bar + $00
    ! Q3 W) R; a2 p, J0 V$ `
  3019. RTS, O7 I$ `& f( J3 n- G
  3020. + U7 {+ g) w3 }) i( s
  3021. .ORG $FF68
    & ^: v9 M  m( w9 O4 o8 K
  3022. STX $4004
    7 L' V- q$ e7 C1 u
  3023. STX Sound_Bar + $04, Y' y  _3 s3 L5 e  I. A( |
  3024. RTS
    1 ~8 U' _8 C. ~" X

  3025. 6 a8 Z0 [0 b9 ~& t6 ^+ _
  3026. .ORG $FF70% N. D; l$ s  f7 Y
  3027. STX $4008
    9 r* b7 ?5 J2 N/ F! K: K* m& n- U! I
  3028. STX Sound_Bar + $08: H4 p8 `: `7 Z2 N: b
  3029. RTS% H, V8 P* Q0 G0 @% `  i
  3030. $ Q: q- a$ l9 m
  3031. .ORG $FF78
    / e8 _: M9 s" Y% R
  3032. STX $400C4 e6 p) ]' u+ F3 m! |7 ^8 l' w4 I
  3033. STX Sound_Bar + $0C
    4 C. X5 I, J$ g) L
  3034. RTS
    ; m- f& s6 C1 [' r! d  H
  3035. * x& u8 S( O1 t" Q: h1 c
  3036. .ORG $FF808 m7 z& G7 Q/ h/ _
  3037. STY $40000 ?' l- V" Y& ~; _. v
  3038. STY Sound_Bar + $00
    # S) E" d6 ~5 x
  3039. RTS; N( _% B; C  l7 ^& @2 c

  3040. : G% C; y( I' |5 [. ]
  3041. .ORG $FF88( t5 ]$ f/ A7 x1 Z" k$ R
  3042. STY $4004
    , C6 }& ]( k6 ?9 H* B
  3043. STY Sound_Bar + $04, M: G, m2 Z0 t' ]( q
  3044. RTS. k- l8 M; S7 B9 t* z. ^

  3045. : Z' \. ~3 Y, i& V8 N0 M+ f
  3046. .ORG $FF90
    + @: W5 [) |- @; x+ h& P3 e) F
  3047. STY $4008/ @% i" ]' B6 Z  d+ L, t9 f
  3048. STY Sound_Bar + $08
    , m7 u- D, L1 d# A8 ?2 ]# T& P
  3049. RTS
    * Z6 e# \0 v! v0 V1 [1 y

  3050. 7 I: ?& X7 @% D% J9 x. _
  3051. .ORG $FF98
    : y) p' ^: V$ z- M8 [8 ]
  3052. STY $400C8 a2 D1 k! D# w7 p9 E) C
  3053. STY Sound_Bar + $0C
    9 i" M6 J* V# `, B! }6 H
  3054. RTS% ?" w' b- i! N; G" T; P
  3055. ( b0 a1 y! Z) }2 y1 {; A
  3056. .ORG $FFA0
    # E( u1 B3 B& X
  3057. STA $4000,X
    / G. D! v6 o* u/ ?2 j
  3058. STA Sound_Bar + $00,X
    & F: F4 U0 f( D2 T
  3059. RTS1 Q& y6 t2 `2 F2 J  q

  3060. 0 B! r8 W8 y5 z3 I8 l8 w+ ~
  3061. .ORG $FFA8
    ' z, [2 d* f. J& R6 z
  3062. STA $4000,Y" |0 B$ _" y) _! }9 c* M# o
  3063. STA Sound_Bar + $00,Y
    0 ~8 x& Y* V5 r
  3064. RTS
    5 n8 p1 e3 V5 |  I/ Y2 ?- S- A" v2 g

  3065. . s0 [% s/ q) T
  3066. .ORG $FFB0
    2 L( ^& f  I; I3 R+ `
  3067. STA $4004,X
    ! b/ X3 V/ L8 I, r2 D
  3068. STA Sound_Bar + $04,X- u. h" S" ?( _6 u' x! S% l
  3069. RTS2 T2 \6 u+ d/ W0 f3 P- v
  3070. 5 P; [  q( ?6 \$ \8 U! u* R1 r
  3071. .ORG $FFB80 |; J6 R! Y% D4 p6 n
  3072. STA $4004,Y
    ' ^) E& s' a( B: [- M9 i4 E
  3073. STA Sound_Bar + $04,Y8 s* Q2 S5 x/ S/ f. r+ Y
  3074. RTS; k1 h$ E% n' q  x  u; E
  3075. % ?/ }5 B5 M; m) M9 I9 w, x
  3076. .ORG $FFC0
    1 e( b) a3 b1 M, j
  3077. STA $4008,X
    % G* m+ h* }6 p0 S2 j& Y7 J
  3078. STA Sound_Bar + $08,X5 Z! ]! _$ e' g7 L  k, O5 N
  3079. RTS  E- q9 R0 s4 t4 J9 E2 {* I
  3080. 4 H: _: p* B* w( r; ]
  3081. .ORG $FFC88 ?# e* g4 d; I& T6 r/ q
  3082. STA $4008,Y2 O0 G3 c/ ], L: h5 B9 K
  3083. STA Sound_Bar + $08,Y6 W6 k, a( c# V: _# \1 j( Y
  3084. RTS& I# o+ ]+ P/ X5 g; w& H
  3085. ; B! {- B* M% l0 A
  3086. .ORG $FFD0/ b1 n% N  Y2 u9 X
  3087. STA $400C,X
    - e( a+ `' m! @
  3088. STA Sound_Bar + $0C,X
    % c9 w- k6 D8 q5 q" J3 s; ?: c
  3089. RTS, ]7 V: A' C6 H

  3090. 8 b7 Z$ y' H7 [
  3091. .ORG $FFD8
    , m% K# n3 H' g. {9 }
  3092. STA $400C,Y
    * x/ F8 Q" n, }
  3093. STA Sound_Bar + $0C,Y
    # `" G/ v) E" F; z& \
  3094. RTS* U! u' l- X; D) W# x' |

  3095. $ l9 W: a$ M7 C+ c
  3096. .ENDIF% Y: s% V7 e; |3 T' l- O) f6 g1 O
复制代码
' M! x9 e) t1 [3 Z
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
[发帖际遇]: yandagui扶老大爷过马路,警察叔叔奖励yandagui 3 个 柠檬. 幸运榜 / 衰神榜

签到天数: 3233 天

[LV.Master]伴坛终老

发表于 2023-8-5 12:37:15 | 显示全部楼层
非常支持您
[发帖际遇]: 一个袋子砸在了 leshui 头上,leshui 赚了 5 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2025-6-17 14:23 , Processed in 1.091797 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表