EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 + L" n) U" y6 c& @8 Y
0 F* U, N! K2 Q
[FC][音乐12 IN 1]. u' j( f: u5 _2 g
时间: 2023.07.231 D2 m6 N8 N- d  [6 W6 r- b
作者: FlameCyclone
8 Z7 D5 N. i; @: D6 E  x- l* w% A3 I+ I7 |
收录音乐内容:
8 y6 n! ?( R# ~/ a" Z# J1.Raf世界, h4 i" M) }4 m" ]9 K) p
2.最终任务6 ?6 y! h6 b+ g; }. ?/ {9 n
3.赤影战士6 B0 l2 G6 U! r4 H/ S' g4 e9 Q. C. X
4.双截龙) }% B1 J) C: Z6 q  {0 T  u0 q
5.双截龙2- t5 m0 O( \- U. h- Y
6.双截龙3
5 s3 G" C) m5 @% E7.洛克人
' r' H! ^7 ~1 I% E8.洛克人2# U1 B, Q8 \8 g9 U8 D
9.洛克人38 R9 W7 s, `0 N: b; @! L. i/ Z
10.洛克人4  b5 e( t$ ]% [1 V) V
11.洛克人5
; _% f1 }* U+ O3 F0 p& ^2 U" g  v$ N12.洛克人63 K6 j, B' f! V0 Q
, x. _, y9 E$ g0 T  ^1 C+ m# ], _
操作:
/ d) m; d1 {. }上键:         上一个专辑/ s- Q  k" Q+ A1 a6 M1 @! x* \+ [1 J
下键:         下一个专辑, x  F0 q+ X- {( m$ n7 H( z  \
左键:         上一曲6 y) e9 S% z4 K% J( w
右键:         下一曲
* |- {7 p: X( U- C2 i  \0 rB/A键:        前10曲/后10曲
; g+ J. M7 C( ~选择键:       下一页. n: c' G" X7 j3 a" D2 h/ S
开始键:       停止/播放
- o* R9 W4 n# N* \* s0 Y  w4 a& K  W
http://flamecyclone.ysepan.com/
: Y7 C' L1 o* l5 V
) l) ?* D9 i1 F3 s
: f% J$ b' {* M" X+ T% s. k. g( {1 w5 A; Z

% h( A' J( t1 j: z2 i
  1. ;[FC音乐][播放器模板]$ D; H/ O" @# @
  2. ;FlameCyclone 20230710/ ^; s% k! H+ u6 R8 A0 T  b+ x! g
  3. ( c0 Q0 S7 }1 U) i. G7 ]/ E
  4. ;文件头) b# z% W/ h+ x: O
  5. ;======================================================================2 [4 l9 Y" j. N: u4 r
  6. .INESPRG 16                                             ;16KB PRG 数量' a9 I5 Z1 e9 p$ [7 _/ [7 |
  7. .INESCHR 1                                               ;8KB CHR 数量6 o: D/ Y% `( j& O
  8. .INESMAP 4                                                   ;mapper 4$ }1 z& q8 X2 B9 h, l1 a
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    0 {8 e- D$ p9 _, ~7 X

  10. 9 `6 K: }  F' {( ~
  11. ;==================================================
    - i- g5 }; Z/ f* t9 B
  12. SOUND_BAR_SHOW_ENABLE       = 1
    . E! _3 V- ?6 s( J" L% e- T* j5 Y" y
  13. ;==================================================- H! ?3 w- T  C8 p3 Z# w. a
  14. BANK_DATA_MASK              = $1F
    + j7 V) ^0 N& f" M- u, ?/ G
  15. CHR_RAM_ENABLE              = 0
    & t9 O' s% Y2 ]* K4 \# W
  16. IRQ_SCANLINE                = 136+ A7 r# U" u0 I  S+ v" b  C
  17. ;==================================================
    # B. Y  e- j  ]! [3 X! J/ r. M
  18. SOUND_DATA_BANK_00          = $00
    8 u. e9 _3 S5 g
  19. SOUND_DATA_BANK_01          = $01
    7 ^: R1 O3 Q9 X  j1 A8 m; U
  20. SOUND_DATA_BANK_02          = $02! G1 J' \! \. z
  21. SOUND_DATA_BANK_03          = $03- Z4 s  F; l  S) P5 v
  22. SOUND_DATA_BANK_04          = $047 ]3 T  S% b2 y! {" R
  23. SOUND_DATA_BANK_05          = $05* m- n( z, Q" t& J
  24. SOUND_DATA_BANK_06          = $06/ c- H0 W# x. U- `7 ~4 @
  25. SOUND_DATA_BANK_07          = $07
    , g; R% d0 p& g7 F" p( w
  26. SOUND_DATA_BANK_08          = $08
    - W! W! n% n& Z/ v5 ^8 |0 |
  27. SOUND_DATA_BANK_09          = $09
    + }: ^/ ]4 {8 X+ ~! V  d
  28. SOUND_DATA_BANK_0A          = $0A9 g8 G2 q; ]6 @6 Y5 ?. x
  29. SOUND_DATA_BANK_0B          = $0B
    # [. s6 a4 A/ `! U' }% E1 N) M
  30. SOUND_DATA_BANK_0C          = $0C
    8 `3 X6 g0 W6 z: F  x. ^2 _5 z
  31. SOUND_DATA_BANK_0D          = $0D
    * r' r6 @3 R1 s6 Q# |/ [% V/ g6 }
  32. SOUND_DATA_BANK_0E          = $0E7 _0 g8 L# @" x5 E2 [
  33. SOUND_DATA_BANK_0F          = $0F( N; B7 C5 U, r1 }" u

  34. , x; m6 O4 A1 f9 e7 A8 g% b
  35. SOUND_DATA_BANK_10          = $109 g# ^) x+ p$ v1 p, a: ~
  36. SOUND_DATA_BANK_11          = $11! c8 ]* N# R! D6 U. i0 k
  37. SOUND_DATA_BANK_12          = $12/ g6 }4 [9 O* h% Z% m
  38. SOUND_DATA_BANK_13          = $13
      x! j& \' ?0 ?$ X' y
  39. SOUND_DATA_BANK_14          = $14
    ) V- L, p6 D5 h, h, L2 u. ?
  40. SOUND_DATA_BANK_15          = $15" x5 X& `3 k5 x
  41. SOUND_DATA_BANK_16          = $16& o0 F- \0 _7 f6 w  M( h" y+ p* y
  42. SOUND_DATA_BANK_17          = $17/ y7 S3 x! O* A0 |1 i  N3 Z( [! c
  43. SOUND_DATA_BANK_18          = $18
    & b1 p; t8 `* U+ o$ [# ?$ N: X% {2 c3 y
  44. SOUND_DATA_BANK_19          = $19
    . F6 ?8 E$ {- B$ L: i
  45. SOUND_DATA_BANK_1A          = $1A0 }& B$ Q  j- L0 y# H" g
  46. SOUND_DATA_BANK_1B          = $1B
    . _7 K' X, O9 b9 V* o3 w4 M
  47. SOUND_DATA_BANK_1C          = $1C
    . }" \1 \& |& `
  48. SOUND_DATA_BANK_1D          = $1D& y6 M1 ^- g* N" A

  49. ; \) A* e# V: U$ c) z7 P
  50. SOUND_DATA_BANK_C000        = $1E, e6 r( g+ j9 P4 L0 C
  51. SOUND_DATA_BANK_E000        = $1F/ l" i( Y. x0 `6 b: O, ^
  52. ;-------------------------------------------------6 |! @6 q% ~5 C. w; O- H0 H
  53. CHR_DATA_BANK               = $20
    , D* E. C$ A6 K# X4 V" O$ j
  54. CHR_DATA_ADDR               = $A000
    % b/ a. u7 [  H, \  ~/ l
  55. ;-------------------------------------------------
    ; J0 a2 _- a4 Z8 y
  56. PROGRAM_BANK                = $00
      A6 }+ z8 n6 [- ~& S
  57. PROGRAM_ADDR                = $8000; D' V* c0 |0 v, j5 ?# Q
  58. ;-------------------------------------------------/ m( B0 u; [$ L5 ?# ?7 R. B
  59. RESET_BANK                  = $1F
    ; ?" U* B' w1 J0 @* @+ _6 A
  60. RESET_ADDR                  = $FD00
    6 s3 s4 ^9 y+ N# g. y. X" x
  61. / o, u, `1 D1 \! S& w9 J
  62. ;==================================================7 Q8 x6 n. R, q1 m, q
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数
    - E4 ^8 ^8 p0 ?) I& R* l/ O( W" N
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引+ x, v& _, T1 B% g4 I( \, ]) H
  65. PAGE_SIZE           = 5                     ;每页节目数
    + |3 V/ {, @& i- T/ d
  66. ( t; q$ w& k! \8 x/ ?$ A7 v. \
  67. ;==================================================
    & t' i% a, N. W& ^8 |2 H+ L# A( z
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除, P4 {% H+ ]% f6 }" Y% ~0 Z1 \
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数
    7 Q+ @! n9 |4 c$ O9 j
  70. .ELSE8 E" O8 m: U. [! u
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数. g/ v* g- e  |: D
  72. .ENDIF
    9 L1 S" R+ Z, |
  73. 6 J5 e: B% ?5 t: E: A
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引8 ]" |% Z, k& @6 M4 Z- y7 q6 |

  75. ; k, g& S/ u' u, B
  76. ;==================================================8 f( I3 Y) H" J9 U4 a" M" A
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置; ^" l* g. C+ o, V5 H7 d$ ?
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2; z1 ~! g7 Q, s+ H7 z4 R
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;: J+ y9 u" Z- j$ ~7 f$ N) N
  80. ;==================================================
    3 w% j6 u1 d$ n) H- C8 K  ^
  81. Caption_Text_Pos    = $204D ;标题文本位置7 Q: G6 ]5 v& |- D9 e
  82. Author_Text_Pos     = $2324 ;作者文本位置
    : j1 @6 Z( R- |: g$ U9 s' E. L! z
  83. Date_Text_Pos       = $236B ;日期文本位置) q' p/ j. \% r
  84. ;------------------------------1 d) Z) W" Y% o+ i
  85. ;------------------------------
    - q- t) O3 O  u4 t$ F" m
  86. .IF SOUND_BAR_SHOW_ENABLE
    ; S+ z4 R9 u* E2 ]/ }4 o
  87. 1 L$ R8 [6 k) ?4 n; E
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    " x! }: z. _! Q1 d' t
  89. Play_Time_Pos       = $22B3 ;播放时间位置1 ^# w/ m) a" g* j
  90. Play_State_Pos      = $22F3 ;播放状态位置# t+ @' Q) K- @4 ?& ~. j

  91. ! Z% r% N' a! \7 P+ Z
  92. .ELSE
    3 A, o6 Y, h) K/ ]5 c1 @5 i) a
  93. 2 C, n4 i, ]+ y4 _
  94. Play_Index_Pos      = $226C ;当前曲目位置! j9 Y) K: b& g0 |- S( q1 v8 H
  95. Play_Time_Pos       = $22AC ;播放时间位置+ c/ }0 @: [/ k& ]9 y
  96. Play_State_Pos      = $22EC ;播放状态位置$ o2 K. M/ @6 x. k0 X

  97. % ~; ?1 y& _  a8 r9 W8 f! t
  98. .ENDIF! v1 E8 p% U- X- I
  99. ;------------------------------. [' f0 X5 v8 m; ?5 {, Z3 h
  100. Track_Name_Pos      = $222B ;曲目文本位置, L( {7 V* z' R' }  F! l" K
  101. ;Track_Name_Pos      = $00 ;曲目文本位置- K0 p' J$ x- C2 C: c9 H- M
  102. Sound_Track_Pos     = $2265 ;声道文本位置
    ! o* K1 Y1 X: M4 z/ z% e* b) `
  103. Sound_Bar_Pos       = $2269 ;音乐条位置0 V6 O: X) F9 B! C
  104. ;==================================================
    $ Y1 ], g& p: t) D
  105. Scroll_X = $00+ _6 q. E% `+ Y' T7 S* T( Y* V
  106. Scroll_Y = $00% k8 W% u4 }% O% _/ C- _& q0 v6 n: i
  107. ;==================================================8 ^. M3 R- h- b
  108. Sound_Ram_Addr_1       = $0100! N& u% Z4 d5 f5 K7 Y- j% w
  109. Sound_Ram_Addr_1_Size  = $80( I$ @* g- N; h' J4 J4 A
  110. Sound_Ram_Addr_2       = $0090
    1 P2 C' {+ |! v  v  K  v) Z
  111. Sound_Ram_Addr_2_Size  = $70
    ; n  c0 G* m2 `+ M* E
  112. Sound_Ram_Addr_3       = $07005 y/ G5 m  P6 c; C+ z- d
  113. Sound_Ram_Addr_3_Size  = $004 W1 t+ x% |* ~5 A8 b- a
  114. Sound_Ram_Addr_4       = $0400) N. V& [- F: w
  115. Sound_Ram_Addr_4_Size  = $00
    4 T& B4 j7 ]: Q- X! Y7 u1 [
  116. Sound_Ram_Addr_5       = $0500
    , L; J# \; m7 c- s0 k; _
  117. Sound_Ram_Addr_5_Size  = $400 ?3 q8 B6 |/ g) E! }; E, W) G

  118. ; f" K; l$ v. x
  119. OAM_TEMP_ADDR   = $0300
    8 {5 s2 l; @0 _

  120. , o% T7 H+ `9 K# h
  121. ;==================================================5 z) d! S! M# }% H, O3 ]0 |8 S
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    ) h& j  X% d" q. q# P0 @
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器, t% s) @1 X: q0 r  f$ K7 I  _0 N
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位2 H1 c1 k- w7 C
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加11 Z" d+ e8 I# v) Z, p7 S
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1  M1 H2 }6 M# k$ K6 t& B
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 7 `# t8 V6 l; M0 r7 n
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加! L: R. M6 ^' i3 d* \& D: I$ o
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 0 z. }- \& E  C+ H
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    3 x( X3 R5 x/ W' ~! N
  131. APU_STATUS              =   $4015   ;声音通道切换
    ) }7 r: F' j: a7 p. m
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通7 H/ m9 f. O" K5 b) \! A7 u: b
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通
      `9 }* \; z' X6 z$ H7 b& T$ U
  134. ;==================================================
    * C! ?6 e9 ?1 p$ T4 C" T
  135. MMC3_BANK_CTRL          =   $8000
    : ^* @8 ?' x' N! w- [' g
  136. MMC3_BANK_DATA          =   $8001
    ; q- ]0 |8 i5 |1 p% k/ M
  137. MMC3_MIRRORING          =   $A000) w( g; Z* t, _- e) y5 {
  138. MMC3_PRG_RAM_PROTECT    =   $A0011 e- w. R  q6 _& v2 p
  139. MMC3_IRQ_LATCH          =   $C0003 j, i. K4 ~5 X
  140. MMC3_IRQ_RELOAD         =   $C0019 A- o) T( d. N
  141. MMC3_IRQ_DISABLE        =   $E000& U' ^/ A& D0 i( g; Y
  142. MMC3_IRQ_ENABLE         =   $E0013 ]! N7 g; P% j( |8 P" F2 Q

  143. " `; Y  |: ^6 d0 ]
  144. ;==================================================
    % M; s6 e- j2 Y5 p* b" I: [
  145. PPU_Addr        = $0200" X8 e, Q( x" _9 p; J
  146. Palette_Addr    = $02C0
    . D4 B0 D9 F% L$ P% Y
  147. Sound_Bar       = PPU_Addr+$E0
    8 Z( k; C+ ]. t0 z& k9 s
  148. ;==================================================
    3 H5 a/ `9 H* u
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D; e9 ^5 ?0 r& X; Q2 b  |
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11
    1 n; Z# j! w0 J. }+ r# h4 g9 i( p. j" K
  151. PALETTE_UPDATE_MAX      = $2C0 b: N. ?8 j/ e/ ]. l+ y/ c
  152. PALETTE_UPDATE_MIN      = $21
    & T8 j1 X* L/ p' u' q
  153. PALETTE_UPDATE_INTERVAL = 60( c7 R# f# g4 z; m
  154. ;==================================================! h5 T+ ]  x  E% Z, W# \1 o/ g+ w
  155. Sound_Bar_Cnt       = PPU_Addr+$F06 Z; s. x* ?+ R. E& g5 B( C# h. J
  156. PPU_Cur             = Sound_Bar_Cnt+$02
    # Z5 u/ Q4 q9 o5 H
  157. PPU_Addr_H          = PPU_Cur+$038 D7 F. f. L+ P$ |: }
  158. PPU_Addr_L          = PPU_Addr_H+$04" o* j* e! E+ F3 Y
  159. Screen_Ctrl         = PPU_Addr_L+$01
    & ]; y  z3 k& n
  160. Screen_State        = Screen_Ctrl+$016 _# O( Y- V" e5 R; Q, v
  161. ;==================================================
    9 Q' X- n' O8 X; q  \+ S4 K
  162. Use_Ram_Begin       = $50" R* P2 @+ }# O6 E% k3 f/ U
  163. ;==================================================$ \3 _6 n0 i8 Y
  164. JSR_Addr_Op         = Use_Ram_Begin" I+ F; `  T3 T3 j2 X% w' b; n# v
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    % m9 z7 i+ T: L2 T7 z2 e
  166. JSR_Addr_H          = JSR_Addr_L + $01
    : n5 |- [5 Z; h* q% T
  167. JSR_Addr_Rts        = JSR_Addr_H + $01
    3 i/ r8 M: p. a: _0 Q9 i
  168. Data_L              = JSR_Addr_Rts + $01
    0 P% ~: _' V3 b) P1 |7 w
  169. Data_H              = Data_L + $015 U3 X5 E# y8 x
  170. Data_Cnt            = Data_H + $01
    # G4 Z" Z/ H4 f* f; p1 K0 S
  171. Data_Buf            = Data_Cnt + $016 y* E6 r" q, r! U
  172. Nmi_Time_Count      = Data_Buf + $014 }1 f4 }. x# y- n# e+ V( F" e
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01
    5 U1 o# `# L% i9 O, i
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    ; O) k0 ?$ _8 j1 Q2 ?2 K
  175.   L9 m( b6 N! @; N9 m
  176. ;调色板刷新标志5 H% V7 s7 I! e# }. w4 v7 O
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01& _6 w! W& [0 A+ o3 C
  178.   Z; I5 L% R& }7 R4 G4 P) Q
  179. ;当前帧文本写入禁用标志
    ' V2 A3 g( L4 U( s
  180. Text_Disable_Flag   = Palette_Update_Flag + $01
    # x- w8 `1 x8 ]

  181. % e" I) V+ W+ A4 k4 n: [2 V
  182. ;==================================================4 q! j- z8 ~  x# ]
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动% Y5 @4 D- F4 b) ^4 s7 H
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条
    7 B# I% m) v1 `3 B0 _
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间4 `; N1 t2 o* q% z7 e' R* U$ V
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    1 G2 G  z! Q& O  `
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间
    2 X  v8 F7 e3 P7 w# }( L2 d" l
  188. ;==================================================# [& e# d: _( w! x2 I
  189. Key_Keep            = Text_Disable_Flag + 1
      l/ R, h& g% @4 \& k
  190. Key_Once            = Key_Keep + $01/ @3 m) {' m6 p$ y3 l
  191. Key_Kemp            = Key_Once + $01* Z5 K6 f# e  H5 u0 I$ y/ h) k$ Z
  192. Key_Temp            = Key_Kemp + $01
    - p- M) h( C9 i5 P; L
  193. Key_Getv            = Key_Temp + $01
    ' S2 k2 y& P( P3 v8 b. J- p2 `8 }
  194. ;==================================================5 _% h/ v8 Q, A2 J& Y/ ?$ Y
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集' u% S" f% c2 o% \5 [: |
  196. Music_Item_Last     = Music_Item_Cur + $01
    0 t0 J8 }: ?8 t/ [' T' [; M8 f
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    ( m  l5 h0 G% z$ y6 y' B
  198. Music_Cur           = Music_Total + $01  ;当前曲目
    , M( i! q- h; f' ?1 A5 K
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目8 ?1 E2 F$ o) Z& F- `
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    4 n# r8 m" k+ d& E3 k: ^
  201. ;==================================================
    8 h9 u) h; O- g: [- u8 a5 @) r( s' a
  202. HEX_Data            = Music_Stop_State + $01+ k; l. i8 i8 z$ V
  203. DEC_H               = HEX_Data + $01' G  Z- M* {0 p9 c; Z% l
  204. DEC_T               = DEC_H + $01
    9 j0 [! {# F3 S  Q& X( r( Y. a
  205. DEC_L               = DEC_T + $01
    ) V# S4 \, _/ Y+ H
  206. ;==================================================/ \3 e, v' I3 Z8 k7 I& H' z" M' T
  207. Time_S              = DEC_L + $018 x# d; x& }; ]: W/ H; u6 K9 d) @5 U
  208. Time_M              = Time_S + $01
    + W. j) x% s5 o8 C, E
  209. Time_H              = Time_M + $02
    % H$ m2 Y/ D* q& F0 p6 j* T
  210. Time_Cnt            = Time_H + $03( Y# W$ ?1 ~7 W( U6 ?

  211. + \5 }- C, k: |& g
  212. ;==================================================4 s# ^0 n& x6 U5 W
  213. Music_Bank_8000     = Time_Cnt + 1! Z- ^( j6 d5 C
  214. Music_Bank_A000     = Music_Bank_8000 + 13 o4 o8 B( L6 {6 }( W
  215. ;==================================================4 \5 i+ A: w# c' }5 t! U/ N
  216. Scroll_H            = Music_Bank_A000 + 1) I5 T- c, Q* e. v
  217. Scroll_V            = Scroll_H + 1
    # P' _0 G8 e8 ]9 A% w
  218. IRQ_Process_Index   = Scroll_V + 1  H4 r  r1 i- k/ M' K
  219. ;--------------------------------------------------
    ; ]7 |, h8 h" R- `# n) y. M9 o" p! H
  220. Page_Cur            = IRQ_Process_Index + $01
    + W4 b. r6 d/ [
  221. Page_Cur_Index      = Page_Cur + $01" `2 z# c$ U3 u7 W6 I
  222. Page_Cur_Cnt        = Page_Cur_Index + $01
    5 {) H" p8 y; K5 m$ ]! `1 I5 C
  223. Page_Last           = Page_Cur_Cnt + $01
    ! l' R- A+ d' _* a4 b
  224. Page_Last_Index     = Page_Last + $01
    ( Z7 E" N4 n5 x1 c+ D$ d* D
  225. Page_Last_Cnt       = Page_Last_Index + $01- {* J2 B, d+ I3 H% v
  226. Use_Ram_End         = Page_Last_Cnt + $011 {& F/ \) u' s! U+ }+ X9 z
  227. ;======================================================================) W+ h* U1 B3 }( X' v- [- Z, Y
  228. ;音乐数据块/ j  V3 |, R7 j3 B5 k& V

  229. ! N4 i  w9 X: w6 o$ c% ^
  230. .IF SOUND_BAR_SHOW_ENABLE3 D% A1 R3 K) G

  231. 1 _4 k9 D6 k* S$ J3 P- L& }
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    - ?, ?: c/ N! D2 J, n/ M7 S
  233. .ORG $9000
    9 Z/ Y4 F1 q* T: ?' H
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"" r; ?& w7 t# w6 z1 F7 F

  235. % \2 N  A+ t9 e8 r- f  d
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK! c* K; i8 [0 A
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    ! ]4 b- i: v" J: H. U

  238. 3 u% X/ R, r* v' W5 Q' R( @
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK" o6 L0 L( q" o1 ], y8 `
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"9 z' @/ `9 k3 X
  241. ( |# {2 X, w& b. r: A1 V
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    / j2 B& h, Z" M; U- r7 \
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"" U, |- u5 k9 i& z$ a

  244. # f+ e. t: ?1 U. ]! ~8 D& K
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    3 Q+ v( J* A2 z* L, j3 P
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"' O9 f/ ?7 p" \# H
  247. 9 {7 F) n3 F5 e6 d! z: d* o6 p+ z
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    0 s: [9 a. c# F$ G6 n
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    ! G( p5 S0 p) P; d
  250. ! w( s( S* B4 ^* p
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    % w, d! Z8 [  {$ Q
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    4 `4 m; h/ k( |* n! `/ Q

  253. 2 [8 ~; U+ i0 z  N2 l
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK( F1 m" R: i* ~; x  l6 z/ Q  G! A
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    # \0 W1 O. y+ l' H
  256. # J% _8 h3 v4 w
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    " k+ i+ [" f, d/ S& ?3 P9 E! l
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    + O# f  J  K6 d# Q
  259. 0 c9 E: K) p: f3 B
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK8 C( f! C, j" `' u' L& c
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"8 z8 @' f$ a. w3 m

  262. 8 \8 X. n9 L, I) s
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    * v8 |! q( m1 U; O& i, ?
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"3 I% U& Q, O" D8 \- |7 X9 z
  265. , s+ c+ {+ n* P& O
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK" S% N* H. ^$ b- ^) v# l* g: [
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
      z2 @$ Y' o, o& g. B: `
  268. ' |' |+ W0 @8 R  h
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    * W2 G+ m! h8 \1 A
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    0 @5 ~& F$ K& K9 h" S" m

  271. 1 y! S$ l# U4 ]  x# s
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK2 d* O1 Z) b7 o' C
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"
    4 \8 A; U7 V$ o/ ^" w! {, K, B" ~" X0 }

  274. 0 @  g1 E4 H6 ^
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    2 G: }, ^2 U8 e+ g1 |: i
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank". Y% V- J( J6 A9 g: U

  277.   d7 ~1 W3 Q3 S  X+ i$ Z0 m
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    / ^0 N' h6 r. M6 h. @* f5 X2 r
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    $ W& N+ f: e, w3 y6 s' }. u& Y/ W

  280. / Y% i( n4 D" y! ~. w: Y# [
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK# J% f7 @, c5 c% u+ s' P3 s: h
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"
    - P$ j& w/ d7 W7 i3 U( D

  283. , p/ w4 \. }$ n7 ~# R/ |
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    9 J3 G& U7 m/ w  U6 |0 R9 v
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"; B) I+ ]9 K( }5 E6 Z

  286. 3 h: \6 B" f9 w0 x
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK8 @! ~1 V/ q4 i: k
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"" p# B' p. Q1 c$ t& D+ X7 U5 G
  289. 7 e- I% Z. Q2 l! B/ p
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    9 ~. K9 n* S* \7 l, `
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"+ `( }' P( r, A5 U
  292. # k- g* Y! K1 T- u. B0 ?* B, ~" U
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK4 a0 D% C- O& V) X! n5 q0 _
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"5 E! D% Z' K  |$ t0 r% u( |

  295. . X9 p6 Z: w7 _- F& X" q
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK3 G- n8 K' Q4 |4 x
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"8 |+ O& E: V" `: K/ N: w
  298. 6 Y; N% g# b# J
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    3 t4 L* V  e' _. n9 Q) O- b, h5 t
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"
    / }1 e/ m$ j  b+ [9 m9 A

  301. + Y5 H" M" B4 Q; S
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    * }. o1 P9 `) n! H& s
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"3 O' z% T5 Z, o, o. Y
  304. # ~0 [% h: f+ F& A3 @3 P+ F! T
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK0 f* I, ~+ x6 {7 H" B3 t# J
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"& P; G' M* I; h

  307. % a4 s1 M+ e7 N9 p) }
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK! a$ x. c5 j( z% M1 S* J
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"0 p& x2 Z# z, G1 |
  310. ( |) L3 Q7 H% [! ]. R" q
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    4 C6 B8 s, q: d, [) q& e8 t
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    1 J. A1 W1 L* f# O6 a8 T* s$ W* a1 ~3 R9 A

  313. 8 C7 H4 O& w) X/ y# I+ m9 r
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK) B0 x& S% Q* u' Q
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    . N9 T. c- w1 Q; I, _3 w6 U" `

  316.   K* c4 _* b7 `5 A: h8 Z3 c  P) t
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK/ ?% n* j; T; z! i% y7 L
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"& f0 \$ F) s9 w' n5 N8 N

  319.   O8 G5 H  ~! ~9 q$ r; \( v$ A  T) `9 q
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    6 _: {1 }3 [9 U( t5 j6 e! h
  321. .ORG $D400
    + m6 }  e/ i( W. ?9 D' M2 s# \6 C
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"' w6 F# F. w3 U: z# j0 B) g5 p& r

  323. % n$ I0 ]: }3 w& ^% L* X
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK( l& T( y& T; U* J# B
  325. .ORG $D800
      M- F( W( |3 \! U; w" l
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    : Z# V* g& C( j; G/ Y

  327. 0 N% ?, C; e3 s
  328. + [' i" p2 x3 t, T& r6 m
  329. .ELSE. f( H# c; i/ y: D( h! ^
  330. 6 R: c3 c: J& f
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK- v1 }  f* N) O2 }
  332. .ORG $9000
    ! K, V7 h. \$ n
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"1 l, m$ H4 @* W. g1 `/ w$ @! S
  334. . L3 C; A* K. |( [8 I/ y  O
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    ; `! O) y+ {: o4 t! s
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"  }  S/ e% W( P9 o' h
  337. ( i' _2 X2 o$ `+ A
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK8 P& B2 z8 S& r$ j& [& K
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"; Z# N/ L4 }6 h  I+ d
  340. 9 Z  I% g) N$ G9 G
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    ( F( I+ N* J1 T- O
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    " o+ @) T, D2 }# [! ~7 X
  343. 1 u# V* L5 m, m& F  j
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK3 f6 t' W! a$ J8 {. g5 d
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"  C5 {7 ?7 Y$ H. w

  346. ) e; H# q  x( g% r
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK2 g6 F! K/ O& |9 U6 i
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    $ q% l6 ~  F( ?3 C% j# c

  349. * r0 p5 d: ]8 W7 i' h. u$ G3 G
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK4 y8 J! X4 }) @% ]. u" Q1 \
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    ) _4 }. d- C  l

  352. % T) Q# \7 ]8 e+ y) L  M  h8 y7 _
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    7 @+ q9 @  A- \) {# n2 |( C
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    6 D. c) U! K7 L, x) @

  355.   L2 R* |6 u5 Q9 G, o5 l; I
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK3 p8 W" m2 ?4 l+ Y
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"9 x( I6 `$ Z2 m& }; x8 |

  358. # f: R( B! {4 m' M/ i1 y$ }0 o7 n8 n
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK( m! v; E4 Q* p6 a- `( i9 j' Y/ u
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
    6 Q( l5 q% U& V1 m1 I: p
  361. $ a# z" W" S% |( g
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    # ]3 _+ {, `+ z& |. Y$ E* G
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    " N; d1 A  s# k( l6 Y( ?( K" I) C
  364. 4 V8 x8 _: [1 g; x! H4 Y. q4 ^) R
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK/ x/ J, A* |9 v/ J4 U. Q" M: l- P
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    ! ~' A# I4 X% p! b5 J

  367. 6 g. d, Z& X( @. v6 W
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    ; U3 f8 r5 c; R* Q; Y
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank") y* {7 l; s  L

  370. . f! x4 F5 {1 n5 ^- \: Y( @5 B# n
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    3 K7 J" f6 J& i/ V9 P5 _8 Y0 e
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"
    & h5 H9 L( x$ y- V1 `
  373. . R0 a% ?  D. D9 M/ P# ?  C" `
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK/ w5 U6 w9 y6 R+ s: M( S
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"1 i: B) P0 w+ `  e! ]

  376. / O2 c; v, t: m) ]% g
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    + S# C. D0 [; E& `
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    8 k0 h1 o+ H! d( x" w& m5 Q
  379. ; W& m, a# a2 [3 ^
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    2 o7 v$ g+ i& H4 b
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"
    . E2 g& s0 O2 X" f0 Y

  382. ( r8 P! O2 e4 S4 k$ x
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK  i2 q2 U. d6 I9 b- F* Z! I; L
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"& ]1 J2 i. V0 [

  385.   \/ k7 Z& h3 d+ J9 l2 [
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK* i/ @/ Y& r% B, ~. K, L7 I& d
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    # S/ H9 |, V. d3 J' g; F) _
  388. ( S/ z; B* W1 I; I8 M4 g8 z
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    + y" ~, ?1 z& h3 b. }+ ^
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"- m2 D( }; Z0 n2 X
  391. " H$ |, z9 P+ J. |# f4 w% |
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
    + |# `3 H  t. w$ N2 E
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    6 B  e& A* J9 G  i

  394. * A7 F5 k& U8 S( g8 K# ?
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    1 {  m* @0 q8 U/ K: R
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
    ( V8 W6 L, R; y2 ]" n4 X
  397. 1 r3 c/ @# G. D# H
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    1 H  u3 L6 X/ ?4 t1 R8 a
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"
    9 D2 B& |5 h; P6 g2 I2 A

  400. 6 m& u9 ^3 N' D0 c  u1 b/ x: }& V! l' g
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    % f( P6 _6 Y' |" H
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"# N: ]& @9 e' X( ~$ e

  403. 9 W, D; H- P4 U. v: X
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK( x, `+ i7 C2 ~* H* W5 B
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"
    5 r9 o8 @  c4 Y' g
  406. 2 w4 R7 a0 m- J3 p2 g# J+ l- i/ J
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    6 E. }/ ~7 W# X3 c& q: P7 S7 y
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    $ E7 S, g5 p; H( m- a7 B

  409. ) _8 L5 y  Z; o0 J( ^& k0 {" g8 o
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    0 `8 a6 d, u& f' b# J; x
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    0 B. r( \* ?' G! Q, q" L; [

  412. 1 e/ v! H: Q* X1 n
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    0 I' `1 N8 Q- p
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"1 D; i# A& h- A1 @. l; i$ B$ `
  415. ) h# ~7 C. ^: ^3 g
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ' \/ c9 Q  D) r: Z
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    / q! @4 g; i) K  b3 k) r

  418. 6 R7 }, ?  M7 f+ c3 n& _1 v
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK! V, v' U# d1 e7 I5 q
  420. .ORG $D400
    ( c" `0 x# P5 n, \- ^
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"$ K9 v' z/ U, S5 b- T+ F: r

  422. ' W6 I8 m/ b& n- k4 \, \
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK" l0 Q- F# F7 ^; P  S& S4 K6 [
  424. .ORG $D800
    . i: [/ c6 f: ?0 F9 V& o( y' n
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    , O% U& i& ?3 S) Q# y0 J$ H

  426. 3 V9 y! B2 Q8 R7 G, e: a
  427. .ENDIF
    ! I9 W! g: ]. W
  428. - ]- r4 o* q- N! R) |: N0 l. M# I  G3 L
  429. ;CHR图形数据/ E- r* D+ O7 E# ~
  430. ;======================================================================, G, O  o+ z& v2 G  ?+ a
  431. .BANK CHR_DATA_BANK% {8 @& ~: b+ h5 Y4 F
  432. .INCBIN "chr_bank/chr_data.chr": m8 h7 U$ c4 e2 p9 B
  433. / d9 p6 \" L. j. ^: j. y
  434. ;======================================================================6 t% |! p$ v. ?# Y  o4 V. G" ?$ e
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK
    * o$ t5 |8 d4 {3 ]* G" l
  436. .ORG PROGRAM_ADDR5 V  G  S6 g: O- I. ^; f

  437. 0 M. B) t3 q6 n+ K
  438. ;==================================================0 k- Y# h) J& t* V
  439. NmiProcess6 D$ M' e. b2 G- Z+ g( c7 Q
  440. 8 ]5 j4 t9 x9 d% ~) t! A
  441. ;关闭屏幕控制& {1 e. Z* n& u" D. Y$ d
  442. LDA #$00* w% o9 o7 G+ \! L
  443. STA PPU_CTRL
    & p9 d6 `8 V8 W1 J# d" D
  444. 2 `! C& Q3 C+ D2 v$ z8 N' o
  445. ;没播放音乐就不需要触发IRQ
    . Z' L% A0 V; M" ~
  446. LDA <Music_Stop_State* P( L) o  O* i, j% V1 p9 s2 E8 n
  447. BNE NmiNormal
    9 m8 C% t+ J4 f  [
  448. 2 l0 @2 f7 U+ c. G
  449. ;重置IRQ索引) I; A5 I7 M7 T" G
  450. LDA #$006 z3 }4 M1 j) P* p, ^7 O6 h# u
  451. STA <IRQ_Process_Index/ M1 ^$ Y' v- E8 [8 f- O
  452. ( g  c2 s, C7 H5 Z8 t' k3 i5 v  Z
  453. ;时间秒数为空则跳过0 i" B2 |  C6 N& D7 _; F; O
  454. LDA <Time_H- @4 Z. j: S* v4 B6 j" J# b
  455. ORA <Time_M
    7 q' t9 O9 C( M% V
  456. ORA <Time_S
    & z- |% ^& T' c3 u
  457. BEQ EnableFirstIrq
    1 R, K' _/ ~! v+ c8 \* F! ]
  458. ) {8 n- `1 F1 F* s/ h
  459. INC <Scroll_H
    9 a. Y/ L4 {4 H. z; E5 @

  460. # `/ D7 s+ t5 o( u+ x) Y  y
  461. EnableFirstIrq 0 ?2 ^1 F4 E$ y4 n
  462. ;80条扫描线后触发IRQ
    , M$ ^% a, D& i1 \- k4 B
  463. LDA #IRQ_SCANLINE" h  @, Q. ~" \" y! Q& A2 x
  464. STA MMC3_IRQ_LATCH) w7 G2 c: k7 S& T) U
  465. STA MMC3_IRQ_RELOAD
    : J- C2 D/ ^0 `
  466. STA MMC3_IRQ_ENABLE% r6 N1 M, ~6 y$ [/ `: M, u
  467. CLI
    2 @: A8 L! H3 i$ ^6 p" K0 \
  468. / M) R& @$ @9 {0 P' m7 J" u  r
  469. NmiNormal
    0 ^1 S% V3 P6 P2 R. [: T

  470. 0 H: B: G- U' n7 X. \
  471. ;处理PPU图像
    * J. @5 x  d. P& h: O. W8 H3 ?
  472. JSR PPU_Proc& E- a0 P# J7 Y9 b

  473. 3 x% Q9 X: Q$ j/ \) H$ D
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    , U1 K, f, Q2 U0 c
  475. LDA PPU_STATUS
    1 s4 n  ]/ U; ~: g
  476. ;LDA #$00$ E# c' y9 w$ s0 U& w, J& e# u
  477. ;STA PPU_OAM_ADDR% i, R( |  S. T! g6 A3 a) Z# g8 v
  478. LDA #OAM_TEMP_ADDR / $0100; \/ z1 M* [4 U8 H- [, L" }
  479. STA OAM_DMA* _2 [5 ]) w0 ~2 [5 U7 M
  480. ' D& ~0 k$ `& d0 D' h
  481. ;启用NMI中断( h* @) k; j3 K* ~
  482. LDA Screen_Ctrl
    / r8 x$ Z0 S% y/ i* N3 q* s  C
  483. STA PPU_CTRL0 i4 |9 d/ G6 y" w' l6 e$ b2 `) w' G% {
  484. : y; N, i# R  h, e
  485. LDA <Text_Disable_Flag
      I8 ~- d6 c! d, t
  486. AND #TEXT_DISABLE_RAM; |$ X+ o& h8 W8 H
  487. BNE Nmi_Sound_Play
    ( w# c2 J, I! `& A3 u! i0 o
  488. , }# J" l. s" e& W9 X
  489. ;处理手柄输入6 ^0 o8 |. J  ?& i3 h
  490. JSR Key_Proc" h# I5 L! M( |4 q

  491. - J: G" p7 I2 x1 ^( ^
  492. ;切换音乐(手柄触发): w. S* @: o# J- p$ S' Z
  493. LDA <Time_Wait_Cnt2 ~  U7 O! ]: X- F
  494. BNE Nmi_Cursor_Arrow
    ! `$ t" e! l. g
  495. JSR Change_Select_Item
    + v5 {3 t5 U& G( o

  496. & |3 `5 L7 h/ `4 S) T- ~
  497. Nmi_Cursor_Arrow3 j% G( |4 |0 |: G* K( c9 C/ X' A

  498. 4 H: O% I4 p0 c
  499. ;处理光标箭头. v. D: j3 }- v6 f0 D
  500. JSR Show_Arrow" w  }2 n$ |! o3 R9 _
  501. 4 `3 J- L! S* n  V( W  B5 _/ m
  502. ;更新调色板
    9 a' ?$ a% E2 R5 r  H4 S& B' a
  503. JSR Update_Palette_Data
    * v& z, @7 X) q. @5 u* W

  504. ; d1 a+ S! o9 C' s; y# e2 Y
  505. ;显示时间(缓冲)
    - |9 u  f, {) T2 X5 P
  506. JSR Time_Show
    ; @" F5 W, q. K2 i1 @, u7 ~8 C
  507. 0 E/ K. M$ M! S& \5 ~
  508. ;音乐显示(缓冲)5 u3 _2 o- O" Q2 l' T
  509. .IF SOUND_BAR_SHOW_ENABLE2 w3 G; q  Q, W' T3 w
  510. JSR Music_Vision
    ) ~# ~! d, A; `8 h
  511. .ENDIF. }; Z" d+ G  h
  512. ; U$ |2 m- ^8 j0 @' k- o6 e
  513. Nmi_Sound_Play
    , S! p. \1 ^. P: e& {
  514. ;播放声音& \4 ]9 d# L, W
  515. LDA <Music_Stop_State6 m2 A; V, ?  ]* }
  516. BNE Nmi_Time_Wait_Set- {6 L8 @* |4 j1 m
  517. JSR Sound_Play_Proc* V& c' P% W' U1 w# K
  518. # [( q" ?# `- G) J  G$ I7 z
  519. ;播放计时# c  w/ J( n& H! A- q- X
  520. JSR Time_Count
    5 Y8 e8 r6 T* W

  521. # \7 {- \3 O$ @/ a( u9 \
  522. Nmi_Time_Wait_Set
    3 J7 t  a/ X$ L0 H
  523. LDA <Time_Wait_Cnt+ j( U, X8 J) k  S! D; \' q
  524. BEQ NmiNormalProcessEnd7 W2 m7 u% V6 n6 `0 u: a" v
  525. DEC <Time_Wait_Cnt! P3 U, p, Q: e$ z0 p. K
  526. NmiNormalProcessEnd$ O9 [  s! i% }" s  w# d3 ?% a

  527. 0 u3 S$ v" n0 B# i
  528. INC <Nmi_Time_Count
    7 g# q: X9 k4 A. w7 q$ n

  529. . B2 {, H! Z8 Z3 S  ]3 m& Y
  530. RTS* m, F/ X0 e; ?9 _( U& t

  531. 7 u9 u4 \; c  b4 k
  532. ;==================================================) `6 E* f* W+ K+ A( h
  533. Init_MMC3
    8 T/ i" B( s; G" c
  534. ;==============================0 |& j- J! |: N* N7 [" b
  535. ;禁用IRQ
    - s9 O. F0 l4 Y9 ^( F* g
  536. STA MMC3_IRQ_DISABLE0 K1 t: h- U, m9 n5 L& b0 @6 x/ ^

  537. 4 x# {, Q/ i. ?% m. F
  538. ;水平镜像
    2 q0 p' q: Z- @9 \0 F
  539. LDA #$01: ?8 j& y( T8 A$ t/ W
  540. STA MMC3_MIRRORING
    * n) {9 X; f2 k. S4 D' W+ _: B

  541. * w  J. p. M1 i2 x, v5 _
  542. ;初始化图形bank
    * Z& ]! F- z2 x4 @$ \: W1 f: K
  543. JSR Init_MMC3_Chr_Bank
    ! s( z( S% d6 c
  544. - f* E% j8 Y2 Y% L" H' v$ J
  545. RTS: w  T3 T2 r$ t2 |2 _: z
  546. ;==================================================
    " A8 E, {0 \9 ^0 |2 I( }
  547. ProgramBegin;主程序. D/ z5 R" y# ~
  548. LDA #$00, H: m) }! O+ N0 S
  549. STA PPU_CTRL
    3 ?  }9 {( k4 c
  550. LDA #$00" w' W: G4 k7 B' b6 b9 Y
  551. STA PPU_STATUS
    7 b! V/ u1 V- ~9 r2 r% C) g
  552. STA PPU_MASK
    8 ]: c$ Y' R. V+ g, r
  553. STA JOY2_FRAME: H5 Q. \! A3 W2 L( h, q9 @
  554. 8 B( N3 P" [' Y8 n
  555. STA PPU_SCROLL
    $ \! _1 L% U% D( P* j1 v
  556. STA PPU_SCROLL
    % p3 {/ O! z' V& ]

  557. ! q3 l& ^& K- D2 a( k
  558. ;==================================================
    & B1 Q5 q5 f/ D8 |
  559. LDX #$FF" y# l  H& Y1 ^& E& R
  560. TXS' Q/ x7 p7 q  O* R! [- I
  561. * J( ^8 g4 s& M) i" ^% p# O4 D: I
  562. JSR Init_MMC3
    * S* w* I/ T( r; |- }

  563. ) J3 F( o2 v- d- N& c, R
  564. LDX #$028 b# s$ ~0 Z* S/ l: r
  565. Check1
    9 |, |% o; z, o6 v) v1 c" F7 q
  566. BIT PPU_STATUS
    4 b4 B* e5 _6 e& c+ V' c
  567. BPL Check1
    # c  v1 v  }2 E( j
  568. Check2
    . p  R% M) \: _* I" `* X: F
  569. BIT PPU_STATUS* |  V) i# j* Y7 z4 o
  570. BMI Check2
    # b% q& ?: e  o5 I6 ]# \' y% V

  571. ; e& g: T2 ?* q2 R* L' s- ?* V
  572. LDA #$0F7 _& \% u) u# b  O) Y4 l
  573. STA APU_STATUS
    7 i" Y1 _; N- K
  574. LDA #$C0
    3 U; _2 B: c( j8 {3 q; ^
  575. STA JOY2_FRAME
    ! m' B1 x' n, P/ F" ]7 W: e, F. H, g
  576. 2 ^: x0 n& D4 q# s
  577. LDA PPU_STATUS" N6 p( [5 e6 D; M8 F
  578. LDA #$10* T" `5 }$ M# C# J$ T3 v
  579. TAX
    % O& H: ^3 Z. U5 H. a) \, ~- y' k3 K
  580. Check3) `8 v4 d. B* x; @+ g% Q3 J% X
  581. STA PPU_ADDRESS$ N' J8 ~4 e2 v( Q* {0 h
  582. STA PPU_ADDRESS1 @' P( A. R* O4 b6 ~. v" T
  583. EOR #$00
    2 m$ I8 [1 V, y9 O' D6 L* u# f
  584. DEX
    + ]% S$ b; X' f4 \' }+ h* P
  585. BNE Check3" ?" \9 O+ d1 G8 q
  586. ;==============================
    " N* f5 s# o% n+ s9 t/ [
  587. ;调色板清空
    2 d: ^. e3 s8 {4 z6 z( i2 ~; `7 M8 U
  588. LDA PPU_STATUS; Z. Q- ^+ k& |8 f
  589. LDA #$3F/ S4 j* _! S8 F, w2 n+ w; m% T: L
  590. STA PPU_ADDRESS
    % C: B- H8 s- S* |, x
  591. LDA #$00( Y  H% m2 R. }+ [: G) n; `
  592. STA PPU_ADDRESS, z# x+ ]: D  ]% j  Q$ ^- n
  593. LDA #$0F
    4 t2 K: V( I& m( g$ L+ e( W
  594. Palette_Clear
    0 a' d  t: J. k+ |) o! S
  595. STA PPU_DATA% N- ?; }- ]& N# Z/ U
  596. INX
    * E( f+ M8 g7 p* T0 i' P/ B: }7 u
  597. CPX #$20- i: w1 ?0 Q$ t& B
  598. BCC Palette_Clear
    * L& d: L$ A. P& b0 z, y
  599. LDA #$00" A' F" y& n/ e' Q( h) p
  600. STA APU_STATUS
    # c* l& Z# l) T# j

  601. 8 C9 v! D- H! ~  u- q  T6 V! M; |7 L
  602. ;==============================
    9 h( y6 A5 H, r% V2 M/ s
  603. ;RAM初始化
    $ d, N7 X, J  e, x7 |+ d, T
  604. RAM_Clear_All+ H; o' Y( u3 D5 Y# Z- m
  605. LDY #$00
    5 m1 K) r# A: Z* T
  606. LDX #$08' \& W2 c; z- A' G1 h7 d4 R8 ~
  607. LDA #$00
    ! K6 z$ ~" q2 j. N5 m# w* E
  608. STA <$00% f5 Y+ }" q0 d; v9 \. k$ P
  609. STA <$01
    , a$ w7 P. ~) L$ s
  610. RAM_Clear_All_Start
    & Z0 j9 |8 C" b
  611. STA [$00],Y
    ! V/ b2 x4 I3 y2 T' ]
  612. INY* F( i4 j1 z" t
  613. BNE RAM_Clear_All_Start
    % {" w6 w- q, D2 B/ F9 N
  614. INC <$01
    ) u4 m0 ?7 P( U8 ]# D. q
  615. DEX9 Y1 l; A8 U7 }& d
  616. BNE RAM_Clear_All_Start
    , r5 a, S  }; s6 i% g

  617. 0 \) M  P. q2 C
  618. JSR VramClear
    ( [2 k/ R1 r0 ^7 w
  619. JSR VramInit
    ' g& n, o% O& w+ @2 H
  620. JSR OAM_Ram_Init
    : P9 }' p8 \$ Y
  621. JSR Init_Palette_Addr
    - X7 s! e; u* J
  622. 8 s: W0 @% o; |& f. _$ [, u
  623. LDA #$FF
    ! K0 o- M! ~& ?4 J: c
  624. STA Use_Ram_End
    1 Q+ ~0 `2 G$ {# j, H0 A! @, e/ w8 n
  625. ;==============================
    " O0 S, j3 ?+ m4 u/ z% X
  626. ;初始化背景调色板
    7 L, m" X0 r0 s
  627. JSR Set_Palette_Color
    8 I, r2 m( [5 C( L7 ^7 u$ a0 P
  628. JSR Set_NameTable_Attributes* ]  b$ i5 k6 _) c" y
  629. & F& [" n) U, @$ w; t
  630. LDA #$00
    - x$ ~8 M$ q" w; P
  631. STA PPU_OAM_ADDR
      D( l" H( o" A4 X0 u* G9 s
  632. LDA #OAM_TEMP_ADDR / $0100$ x4 S/ M  S) E
  633. STA OAM_DMA' [& |: q5 B4 X$ z/ x
  634. ; g* X) \# d# m* p
  635. JSR Sound_Reset_Proc
      s2 P4 h) Y2 J& I" T6 G
  636. JSR Set_Sound_Total* M# Y& t, b5 v

  637. - V2 o7 [' B6 `& t% w( p% x6 h
  638. Init_Start_Music- r- Y2 @4 N1 r$ }- Z
  639. LDX #$00
    4 x# Q; P, Z  E3 ~
  640. Init_Start_Music_Write
    # \% x" W( H( q5 p
  641. LDA Sound_Start_Port,X& c% g5 j/ z# s
  642. STA <Music_Cur,X
    & {  m: {* Y  W) t
  643. INX
    : i9 {/ N0 n! e% Q
  644. CPX #ITEM_MAX_SIZE* Y/ x& n7 H* ~  s+ `
  645. BCC Init_Start_Music_Write
    ! |! K7 j, N3 Q( r2 O; F

  646. ' X5 D( x1 b! W8 g% q  W+ w9 c5 R
  647. JSR Show_Music_Text
    8 G' k9 y1 n0 Y; h. U

  648. % `9 L$ P  _( @5 U  u6 T7 i+ R
  649. .IF SOUND_BAR_SHOW_ENABLE
    0 ^+ T9 x8 r# j1 ?9 l( s# i2 Q
  650. JSR Sound_Bar_Text_Set* O# @5 `& m2 O0 J9 {- R* z% U
  651. .ENDIF7 [6 W- V* q/ [
  652. 2 E& ~2 s- t6 V* T# [3 ?
  653. .IF Track_Name_Pos* x. w; v6 T. k& R, g8 @7 K
  654. JSR Show_Track_Info7 P  U1 _& s3 [# p! c" {
  655. .ENDIF
    - X. N& }# i$ c5 V

  656. $ T/ _, k0 Y" L! ~
  657. JSR PPU_Proc9 U# N- W( K6 X$ u4 n' d

  658. - q; g/ O7 p+ s& }6 X: y5 n( R
  659. ;==================================================9 P, @! A- C( `- a, g
  660. ;音乐bank初始化 0 r8 }% {7 t5 F: Q# O" W
  661. JSR Init_Sound_Bank8 g! \1 `* Z5 v+ ], b- [; i. ~/ B# t
  662. * A- v& b: Z) Y( e" g6 B5 M: r$ x
  663. JSR Music_Show
    7 t  F, q* k; H0 w5 l3 T
  664. JSR Time_Show
    / ^1 K6 d4 x) W6 {2 M$ O) _
  665. JSR Music_State_Show
    6 n9 v, h' T- ?8 a5 j+ m) R8 n7 R
  666. JSR Time_Delay
    & `- }3 w9 R, k
  667. . @/ v/ J5 l3 N/ Y* a
  668. LDA #$01" k) ]& q- i0 F
  669. STA <Music_Stop_State
    ) J9 U3 J+ I3 n5 u0 @: }
  670.   Z! r+ r9 o) f8 }# W
  671. LDA #$88
    7 U5 J3 E6 Q. N& [2 V; O2 Y% w
  672. STA Screen_Ctrl
    , J- O& t4 k/ M7 k' Q
  673. STA PPU_CTRL
    0 e, p+ J+ T; E% B: y6 q* Q9 Y

  674. * x& O6 ]9 k% X8 y1 w
  675. JSR Show_Page_Text
    & B+ n/ A9 z! Y" d+ y
  676. ) R! t8 V/ k9 k+ l1 J+ I
  677. LDA #$10
    " Z6 B. e% @- |" @
  678. STA <Time_Wait_Cnt" F& m- N, g. {& }& D
  679. ! X! j: E2 F+ s3 B+ J$ J
  680. Wait_Time_Over
    : A& C  g$ u' \* L
  681. LDA <Time_Wait_Cnt
    - F% Z( ]9 e3 q- [3 ~
  682. BNE Wait_Time_Over
    7 T, M" m2 D$ t- U4 F1 ]

  683. 5 E9 m1 ]# o0 x0 l3 E( ]
  684. JSR Show_Arrow
    0 t# n. J- g5 z* r$ r4 p& z; K
  685. LDA #OAM_TEMP_ADDR / $0100% y: t+ `: w# ~$ ^' b4 U- U
  686. STA OAM_DMA1 y8 A7 K7 o% w3 d

  687. 2 H. m1 _7 c) a' I
  688. LDA #$1E
    & |" X, m& f' Z# @, A& ?
  689. STA Screen_State5 p! r2 O7 F6 \9 B6 K; d: Z

  690. % J7 u+ ]# s/ q% f; ?) X9 Y  j' Z
  691. LDX <Music_Item_Cur+ S! B! A6 E4 s. i2 I
  692. LDA <Music_Cur,X
    1 E( D' W- C9 [4 y1 Y
  693. JSR Sound_Init_Proc
    # n8 v* P! _0 O# a1 K: h1 d
  694. 9 ]$ c: }; N6 w; Z$ ?* e5 y- ~8 L
  695. CLI
    # e  i7 j! y/ O! b& c
  696. JMP MainLoop
    / _! n4 ~7 j% ]' Y; I

  697. ( |2 G, a- N9 _- p5 ?, c
  698. ;==============================2 U) z7 [: W  _( S$ S% b2 F, A5 Q
  699. Time_Delay;延时等待
    " p) O6 W: ^( ]8 z' K* _
  700. LDA PPU_STATUS
    ! V7 e+ ~1 C, p; p% q
  701. BPL Time_Delay
    ; q9 y, K0 T; W1 a
  702. RTS
    * X' ]7 P! u0 E6 J" }, }: n4 {% X! l

  703. ! F3 N0 w; H& \! J6 D" z
  704. ;==============================9 Y: t# X) Q* B* u) ?, m
  705. OAM_Ram_Init;初始化精灵内存! C! I- j3 z' y7 {% N6 g% @+ Y8 |
  706. LDX #$00+ s  G: A8 w  {$ p2 k
  707. OAM_Ram_Init_Write( n2 N+ [1 F$ u8 ~+ R) k5 t
  708. LDA #$F8
    4 d; D7 x6 q2 h# M; c
  709. STA OAM_TEMP_ADDR,X% w0 w9 v) e$ [1 q! ?1 X: q
  710. INX
    5 X; C% c/ n  P3 ]
  711. LDA #$F8$ C! j4 d( `/ X) w: j1 e
  712. STA OAM_TEMP_ADDR,X$ o8 s: }6 f! |% Y6 d! |( {
  713. INX! j+ e! [; U/ X0 }+ k& @
  714. LDA #$00
    & ]- Y: l" K+ \3 L9 G6 [
  715. STA OAM_TEMP_ADDR,X
    ' X4 u: ^  e7 ~1 [, }6 V- w2 }
  716. INX5 A( o7 G" s2 q; P
  717. LDA #$F8
    ( ^; N- B) J! f4 H" {
  718. STA OAM_TEMP_ADDR,X) ]2 `' D" @# R( ^1 _# m
  719. INX
    " g& Q! D/ M3 V" G8 ^0 X
  720. BNE OAM_Ram_Init_Write: o8 A" Y1 U! Z4 y2 w! v
  721. RTS
    9 _0 W1 B; D1 {# {9 T
  722. % U/ H  ?* i/ ?7 n/ h
  723. ;==============================$ R4 j4 U7 l5 Q. l( E) B0 }
  724. VramClear;初始化图形内存, k* Q" Q: v( N4 B; A1 Z: f0 w% k
  725. LDA #$20
    2 J; p- c; H5 u  ]* d- c
  726. STA PPU_ADDRESS4 m+ x; d5 \' h: a, i6 y7 c& J
  727. LDA #$00
    $ ^( a1 K5 g2 J0 x5 G" G
  728. STA PPU_ADDRESS- e5 Z. x5 r( h: `
  729. LDA #$00
    ' @: [# |& M) a! a8 z
  730. LDY #$00
    ) N  P: {) B6 p; B3 e( E$ w
  731. LDX #$10
    3 p7 H8 n" a- z$ |; m$ A: R% T: @
  732. VramClearWrite1 s" ?& b5 s5 e
  733. STA PPU_DATA
    0 R' |, r! ^3 [7 w1 U0 r
  734. INY
    ; V' f. C6 j. p& M! M  o' Z
  735. BNE VramClearWrite
    ! z% ~- `  k  m+ i
  736. DEX: y8 h. R; H2 i2 c& m: y
  737. BNE VramClearWrite
    , F. g7 C% f( l7 m7 A* {: }, C1 m
  738. RTS
    - Z0 U% W2 H' {$ ~! M

  739. & `; g1 ^& f/ k; B& @% I1 x. x
  740. ;==================================================2 U  Z" V" W2 h# b
  741. ;设置MMC3图像bank) s" o; d  F* n
  742. Init_MMC3_Chr_Bank" p% n) p. @, f8 A! p9 R
  743. LDX #$05
    $ o3 g3 b# R# @; m' f
  744. Init_MMC3_Chr_Bank_Write
    ; j" v3 e  o+ w$ w. N; T! P6 b4 N
  745. STX MMC3_BANK_CTRL
    6 i" O4 Y. O" n; o$ H1 I  j6 o
  746. LDA MMC3_Chr_Bank_Data,X7 y# t9 M2 m, b8 I
  747. STA MMC3_BANK_DATA$ \0 C0 o' ^& {$ ]8 x
  748. DEX
    ' U! q# g& P! M: ?0 o
  749. BPL Init_MMC3_Chr_Bank_Write
    , [, F9 l: H# Y" [# L& y2 D; W
  750. RTS; |; e0 \; q, E$ W, i1 A
  751. ;--------------------------------------------------* u3 ]7 A( h- k+ e3 E% ~
  752. MMC3_Chr_Bank_Data
    3 q1 I# e0 @+ N
  753. .DB $00,$02,$04,$05,$06,$07
    3 v6 V$ `# n6 O" o- d0 u. c
  754. & c: m1 R! G8 E5 N
  755. ;==============================6 a% j7 F% V( G& H, M7 g
  756. VramInit;初始化图形内存$ [9 E, s! U1 R* c
  757. .IF CHR_RAM_ENABLE# ~3 Z, s/ b$ }4 f2 |( {' Y
  758. LDA #CHR_DATA_BANK/ q# ?% Z' d! P) q# W& ]: z- r3 g
  759. JSR Switch_Bank_A000
    ) B$ ?; k& ^8 V' T5 l; y2 T8 J! `
  760. LDA #LOW(CHR_DATA_ADDR); A% p' Q7 h. Y
  761. STA <Data_L( s' K( D& T+ ?- M; \, H1 K3 w7 e7 S
  762. LDA #HIGH(CHR_DATA_ADDR)8 g2 @5 `: V5 u6 E3 H$ }$ D
  763. STA <Data_H
    $ L1 N. p3 l: S; r* K( A
  764. LDY #$00
    7 g% w+ Q, M" G2 I
  765. LDX #$20+ X5 t7 Q- ]0 S9 I) r0 B) E
  766. LDA #$009 Y0 }: A$ m- D  a- g
  767. STA PPU_ADDRESS
    2 \9 q- b5 Y3 o3 e
  768. STA PPU_ADDRESS
    ! w4 Q  u/ M% Q: W
  769. VramInitWrite+ K& p, d! c+ C5 X# {6 }
  770. LDA [Data_L],Y
    + k# \4 ], N, o8 r
  771. STA PPU_DATA
    5 S8 W0 @  C* L2 [. u! |. p" n0 ?2 |
  772. INY, a# g) a, s6 s% e6 ]- c0 ?
  773. BNE VramInitWrite1 e* ~6 J2 O* b
  774. INC <Data_H
    ! P2 ]% g# y. [" t) w
  775. DEX* Y% w( t0 c& C. E0 n
  776. BNE VramInitWrite9 c1 w: C& Z) I# J
  777. .ENDIF  M+ m5 F! H" d4 p2 l3 Z
  778. RTS6 F! R8 w5 `: f$ h+ [$ g* `

  779. 1 l. m* f3 z9 P8 C: d
  780. ;==============================- `, T$ f; J1 {8 y! i9 e# ]
  781. ;音乐切换* K: L6 Y6 Y/ P' [
  782. Music_Play_Change
    9 Y# t2 ]+ e9 X. j6 m9 t/ o! ~
  783. LDA <Key_Once
    ) U* W  @- X, e4 [
  784. AND #$FF2 K, y0 U# ^: ~6 d
  785. BEQ Music_Play_Change_Check
    . z. z# h" \) e
  786. 7 o, P- q7 _; }' f& w; p4 Y% N7 O
  787. ;禁用音乐条刷新3 K: A4 @( R5 `
  788. LDA <Text_Disable_Flag
    4 f) g/ Z6 M! L! [6 t
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME+ H  H9 _0 V! t! f% O( }& z2 B
  790. STA <Text_Disable_Flag0 ~0 k# m! C, o2 }

  791. ( f% M, |8 i3 V* C
  792. Music_Play_Change_Check
    4 _' t( Y5 i6 ]. J0 d
  793. Music_arrow
    $ H1 p" B% ~+ Z% U, V2 e( u
  794. LDA <Key_Once
    , B. u% l- Y) k1 I, w% o7 Y, L
  795. AND #$0F
      W/ x1 d3 l: \" V
  796. BEQ Music_Play_Change_End8 Q, ]: v/ \3 w; c3 h2 l
  797. JSR Music_Track_Change
    ) J+ S0 N+ f2 b- e0 Q' J4 S; v4 v
  798. JSR Sound_Reset_Proc/ C0 Z9 z3 o! f  U8 x
  799. JSR Music_Show4 V1 @7 B" G3 D! N6 q
  800. Music_Play_Change_End0 r4 i5 `. Q  z1 q9 ^
  801. RTS
    ' W( M, g6 A4 z8 b

  802. 8 [) t3 h0 W# l% N: a( s/ L
  803. ;==============================
    9 ~) g7 F3 a) E( v
  804. ;音乐曲目切换) }( X; A& E+ P
  805. Music_Track_Change% `# k3 U! K; }9 b
  806. LDX <Music_Item_Cur2 p; F" K( [7 M1 N! s4 p0 R) {) c
  807. LDA <Music_Cur,X
    0 e6 d* P5 o1 G% J3 P/ O
  808. STA <Music_Last) L, ?& e# x. n. B
  809. Music_Decrease
    * o8 ~: N- b: q3 z) {# z5 F+ ^
  810. LDA <Key_Once
    ! Z* {) F. m( a! H# O# g
  811. AND #$42
      t/ h% a* c, P3 F; V
  812. BEQ Music_Increase$ d$ Z, P% _2 L, M. K6 m
  813. LDA <Music_Cur,X
    3 Y4 R2 d( @- T" f0 c$ l
  814. BEQ Music_Increase2 @, D6 z) J" l" e. [6 b; @- z
  815. DEC <Music_Cur,X
    0 {2 s. p7 }7 o% {
  816. Music_Increase" e$ J0 {# J  A" j
  817. LDA <Key_Once8 z. _/ [; z* a/ U4 [; U, c
  818. AND #$81  e4 R+ J5 X2 S( L3 e
  819. BEQ Music_Decrease_104 C, n0 f+ K* U/ S; R
  820. JSR Set_Sound_Total
    # e" V0 v( B6 \) H3 x* P: |% ]% t! z: p
  821. LDA <Music_Cur,X6 M/ y& F' u9 x2 \
  822. CMP Music_Total& Y, H! O) c) v- I
  823. BCS * + 4
      E; W5 B5 {# c) l8 I
  824. INC <Music_Cur,X( D/ {  d) t& Q* j7 J* M0 _' V
  825. Music_Decrease_10
    ; t3 y' X' e7 a
  826. LDA <Key_Once
    0 W4 ~* u8 e$ V3 f) Q6 v8 O" a
  827. CMP #$045 X) \( M7 L0 Q. M
  828. BNE Music_Increase_10# w7 m* F# b5 J! ~/ r3 S
  829. LDA <Music_Cur,X
    2 O) C8 I& Y  B$ C  r
  830. CMP #10: p: T& o& z0 K9 a3 t
  831. BCC Music_Start_Song_Min
      X5 D7 v6 P6 O) N" y
  832. LDA <Music_Cur,X
    % \4 O  u% ^4 \( }5 u$ j
  833. SEC
    1 @2 ^# n& Q7 H) R
  834. SBC #10( ~" _- u6 B# R+ S5 ]
  835. STA <Music_Cur,X$ f9 o! O2 x) g. W2 Q+ e- m/ F6 V
  836. LDA #$00
    ; u# h; C) V- h6 t) u7 P3 z# J+ B; B
  837. BEQ Music_Increase_10% u6 T) [( N" {6 \0 v2 l& ?
  838. Music_Start_Song_Min
    3 _2 X) h/ @3 l& b: B. p1 x$ _9 q, p' T
  839. LDA #$008 _- K! {, x7 @# y
  840. STA <Music_Cur,X( h2 s; T$ v7 t
  841. Music_Increase_10
    3 i5 b2 ~  Y# E) d+ Y; A
  842. LDA <Key_Once
    ) m- ?$ W  e$ |! l, X# h; W, E
  843. CMP #$08
    + N0 E5 g" X$ y
  844. BNE Music_Track_Change_End  S! k/ _( ^6 i' o3 \5 }, }% N
  845. LDA <Music_Cur,X+ ^  V, Y# ^  r3 c3 K; N( g5 l. _
  846. CLC0 E9 i! w0 |( f  e) i0 K6 r* q
  847. ADC #109 L6 v( ]4 o& o, I& t! V1 O: f
  848. CMP Music_Total& e: v# ]/ g# ]: _2 f+ ]
  849. BCS Music_Start_Song_Max- b6 k; j9 R) g( k" I
  850. STA <Music_Cur,X6 y( \* \, I, t' A7 e
  851. LDA #003 W( u! k0 g% q' R7 S, r. T
  852. BEQ Music_Track_Change_End
    % W# C" B5 G. K9 \; q8 Y
  853. Music_Start_Song_Max& @6 m+ n9 X) p
  854. LDA Music_Total* h- y$ c* D% C  ~( a' B1 D* k2 W. o
  855. STA <Music_Cur,X
    6 ]6 u* f5 @8 i: S! e, z0 \4 X
  856. Music_Track_Change_End) y- q& X1 c. D6 ?# L8 @
  857. RTS
    6 b& [$ _3 @( v: a! T0 O. b3 w

  858. 1 T) j' m, m& F9 p* @2 e. V3 Q7 p
  859. ;==============================5 C6 o3 u2 Y# ?
  860. ;按键处理
    / f+ O- x7 [0 s0 e; \$ M
  861. Key_Proc* N6 \+ M2 n! Y) C
  862. JSR Key_Scan
    . n! ^2 D- H4 Z4 K
  863. LDA <Key_Keep' V' [* d4 s. p1 D
  864. STA <Key_Temp
    6 U& u+ r( d5 o8 w- L2 d
  865. JSR Key_Scan9 b$ ~- h: v3 Y) ^/ t# m' p
  866. LDA <Key_Keep: S5 @, S9 q) t1 S9 H! }
  867. CMP <Key_Temp! S/ Z* f" ]' E# h& t
  868. BEQ Key_Get_Once
    & y( Q- z% J& ^% [( o
  869. LDA <Key_Kemp$ S9 Y" G1 L- i% P
  870. STA <Key_Keep, m* V* `0 Y& H8 j! p/ W( E
  871. Key_Get_Once
    & v* P4 _: X( \' m% I' o
  872. TAY
    $ i$ ]; x6 D$ R
  873. EOR Key_Kemp5 T4 m0 n9 m4 |5 E, ~6 O  B" Z- m
  874. AND <Key_Keep
    $ t- p# s0 i0 @& v1 I7 J
  875. STA <Key_Once$ r0 `$ t5 E4 ]$ A/ O
  876. STY <Key_Kemp) }  z6 q; y9 s) B% H- |9 V
  877. RTS* W3 Q% K9 \# k! `" h/ n. I* Y
  878. ;------------------------------
    3 g# N5 {4 G( K$ o) r
  879. ;按键扫描
    ) x, h4 ~% b  B2 W2 G
  880. Key_Scan
    ' o# I8 ?& q2 w" d, b, `3 y/ W
  881. LDX #$013 P7 B$ @6 @4 o( y0 m3 R; {
  882. STX JOY1_FRAME  d: S8 Z2 z) i& M7 m" [  E
  883. DEX3 Q9 K7 x9 e2 V
  884. STX JOY1_FRAME' `0 I, y) J1 a0 b
  885. LDX #$089 z/ W5 L, O( ^  [/ f
  886. Key_Value; p: N3 c1 f! t6 X
  887. LDA JOY1_FRAME% F+ [2 ~0 Z7 W0 r: u
  888. STA <Key_Getv7 u# l0 j3 G7 }  H9 g$ e" l
  889. LSR A
    & H, Z) N- E& U& B) Z4 f
  890. ORA <Key_Getv
    8 {0 y$ T1 d1 D0 a
  891. LSR A
    # J; t1 V+ l% E5 P9 ]
  892. ROL <Key_Keep  U/ J  G; Z/ z. R- l
  893. DEX) _' f) f, x/ E  Y' b- f$ F! l; J
  894. BNE Key_Value
    " r, J0 Y) @3 y0 m: X
  895. RTS/ X* w, ?. e& d1 H/ e3 i1 T

  896. * i# r; K' M! x- J- G9 ^6 x, ?
  897. ;==============================; S! z3 ?( Y0 Q- R9 v' P
  898. .IF SOUND_BAR_SHOW_ENABLE" z# j1 `# w6 n. B; E' w/ ]6 i
  899. ;音乐条显示
    ' c6 ]2 l; a* V7 ^
  900. Music_Vision* U1 L8 h2 ?: q
  901. LDA <Text_Disable_Flag
    ; S( n, l4 C) x( S
  902. AND #TEXT_DISABLE_ITEM2 j' \' _( g+ A5 C6 `# d3 t7 p
  903. BNE Music_Vision_End
    ' k2 `8 ^: m- g8 t/ X5 }
  904. AND #TEXT_DISABLE_BAR
    + _  \0 L5 N: j
  905. BNE Music_Vision_Set
    4 Y5 w' L& A: U1 R6 V) X
  906. LDX PPU_Cur
    * k9 `8 o! s9 N/ S: y2 F9 t
  907. JSR Music_Animation
    0 e' |: j6 G$ c
  908. STX PPU_Cur- b2 [3 d) a! \4 R7 `4 J
  909. Music_Vision_Set
    , k  @% }  h% p- z
  910. LDA <Text_Disable_Flag9 z: P1 `2 l: ?7 V  r7 g
  911. AND #TEXT_DISABLE_BAR ^ $FF
    * h/ F  m- t5 O8 W
  912. STA <Text_Disable_Flag$ B8 y0 q4 v1 \% B7 ~9 d1 J" a
  913. Music_Vision_End2 g, j& j! n5 Z/ E% H! C, g4 m, j
  914. RTS  t) w7 j$ I" N
  915. ;------------------------------* Y- _* b! N' b; S+ m
  916. ;音乐条显示处理( X0 P' j$ h) s$ g% Q$ ^
  917. Music_Animation
    / h1 V) ^6 w- W; w$ P0 [' C
  918. LDA #PPU_MODE_CNT_LINE! e4 G" L7 `2 M6 {6 H
  919. STA PPU_Addr,X
    $ j) n& j3 b3 ^
  920. INX
    ) q0 o  _2 U; R3 s  t" }
  921. LDA #HIGH(Sound_Bar_Pos)5 m$ x7 O; R* Y1 c
  922. STA PPU_Addr,X+ k/ \% e; z6 E: e' o
  923. INX
    ) C, E* j4 Y7 \  V
  924. LDA #LOW(Sound_Bar_Pos)0 y" q2 M! v  A! U3 `. k. \. K) t" U
  925. STA PPU_Addr,X
    6 v  {1 m  n- _5 C$ L
  926. INX
    % X9 C, P+ J' n4 l9 ~
  927. LDA #$08' N: J, j' I2 \/ U9 f- i
  928. STA PPU_Addr,X$ G2 C& Z1 A; T# g( U5 ?
  929. INX' Y  H% j9 c3 }. T( I4 h
  930. LDA Sound_Bar
    5 Z* i" H4 b9 S& s( J/ h
  931. JSR Volume_Convert
    * H* o( c. S! K1 s5 y
  932. $ T' ?6 }  H- ]% b- o8 A
  933. JSR Volume_Set_Cnt8 P7 I- t4 y. g& [$ M
  934. LDA Sound_Bar+$4
    % ?6 p: N' D% b6 V4 O
  935. JSR Volume_Convert
    7 n! o2 ^4 o; N2 Z' Y8 s
  936. : U5 H/ D$ ^) c* m* d9 M' h# V6 f, m! ]
  937. JSR Volume_Set_Cnt7 B; e: \+ V( M. C
  938. LDA Sound_Bar+$8
    . B' P  Q  n( i# r2 A
  939. JSR Volume_Convert
    3 u$ J+ {* R7 L7 N4 N8 V: Y

  940. 1 j+ d& ~4 T) U( N$ b& |. s
  941. JSR Volume_Set_Cnt( u3 O0 T1 i: V4 Q) Z1 L
  942. LDA Sound_Bar+$C
    9 c& N/ A/ w9 k. ?; u6 H$ M- C
  943. JSR Volume_Convert
    1 e& u# [+ O3 y( G6 h5 I" v7 |
  944. 4 y  r( U" J4 v0 J
  945. JSR Volume_Set_Cnt; j$ [$ \9 e7 P% ~7 d

  946. ! {, M' J2 g: h% y
  947. LDY #$10
    + K+ J7 Q) T: M: \4 u& ?7 [3 K
  948. LDA APU_STATUS% {  S* u* l- R! m  R3 h; Q
  949. AND #$10
    " {# w; D4 B9 x% |
  950. BNE Volume_Count* D. I9 W! D. ~6 N( f. M
  951. LDY #$00' E% _  D: G0 U$ E. P8 X* Q+ C
  952. BEQ Volume_Count. t% s& K& b- X- h; o% G' m% K
  953. 8 F3 ^' u( c, D
  954. ;------------------------------
    ' {" n0 U. \0 b0 u
  955. ;音乐条处理
    % z& Y: O- C4 _& C6 Z
  956. Volume_Convert
    % l' Z2 [; d: Q. G; P; j) h
  957. AND #$0F. q' Q3 w6 H' j5 T% M
  958. TAY3 I  }! ^+ T$ |" _- m( H% Y  I
  959. Volume_Count0 @$ F! V3 y- o
  960. LDA #$082 k& s, T6 q  J7 t, y6 _. M# l. }
  961. STA Sound_Bar_Cnt
    ) |% [3 l, _/ _$ t( v, E: [' G) q1 U
  962. Volume_FILL
    $ P4 _( q: t2 w3 N' Q1 O$ s6 |
  963. DEY1 u7 D+ o" f. h- |0 Z
  964. BEQ Volume_Half
    0 `" G0 \% n+ d, M6 m3 ^% B
  965. BMI Volume_Empty
    # f5 g# R6 K# v( M
  966. DEY
    + H/ r0 A0 L) z2 {- [7 j5 ]* G7 p4 @
  967. Volume_Full9 U/ J# n+ J9 [; m. B5 Z* i  ~
  968. LDA #$163 Y) k3 F  |; {/ s- T
  969. BNE Volume_PPU  L0 r' {5 W# _, v' Z9 L% j
  970. Volume_Half  o! H/ s  E! S( B
  971. LDA #$15" u! j+ l- v9 w
  972. BNE Volume_PPU2 H  ~0 z2 r% X3 t% |- r
  973. Volume_Empty
    : {8 k5 r; y' P2 J+ o2 f' T
  974. LDA #$14
    8 X! o% S6 O6 w6 I9 ]
  975. Volume_PPU
    8 i+ k, C  ^! @" `8 R8 }
  976. STA PPU_Addr,X
    , U7 E* \3 h- U; r
  977. INX
    , C/ \1 O) N6 z8 E5 w8 ^
  978. DEC Sound_Bar_Cnt4 @) F4 ~- q( S; [
  979. BNE Volume_FILL
    - d2 o: b5 }( z  c8 D
  980. RTS& F; v; N* f4 H3 W7 g
  981.   x5 f9 T# @& b" q" Y' G
  982. Volume_Set_Cnt8 f  \! r* b2 J# j( E2 y( q+ O
  983. LDA #PPU_MODE_CNT_LINE_NEXT6 P  j+ x0 v& Z2 Y
  984. STA PPU_Addr,X% g: `. t4 u8 Y
  985. INX
      U, U- o0 H) v+ p9 g- `( e
  986. LDA #$08; ?' f  S8 ^  E
  987. STA PPU_Addr,X
    $ ^4 T! p4 w0 j7 |: K3 i0 @
  988. INX
    2 Z% x% q+ j3 U2 h& M- W/ X, k, A
  989. RTS8 S$ I! l: C/ [  }- |0 L1 }1 E$ i  v

  990. 2 g3 H, B5 E1 z4 S0 y4 _6 [
  991. .ENDIF
    * S$ t+ t" v# y# O0 Q6 j7 v1 c

  992. 6 E2 c. Y( A: D9 G
  993. ;==============================& i  D* I' m* [; J
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    9 \/ a1 y5 d1 H$ S. l0 _% G
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式! F( ?% \# h9 v9 `7 M. }
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除7 s0 w% F2 j6 _) _, r6 a' B
  997. ;------------------------------
    + d* c( l% @0 U/ H) O2 h6 q
  998. ;PPU处理
    ' d7 E, N4 ?8 O8 p2 ?; ]: l: u/ ^
  999. PPU_Proc9 x0 Z6 k1 }: K4 G
  1000. LDX PPU_Cur
    5 V" H" y# J, v0 i8 @, f
  1001. LDA #$00
    " l: K2 {  c0 m8 w. D
  1002. STA PPU_Cur+ X2 L( Z' F; f: a' c, L' p$ Q" O3 V
  1003. STA PPU_Addr,X
    ' |" t' \& w2 k6 C7 @1 s
  1004. LDA PPU_Addr7 Q5 Z6 R7 h) L
  1005. BNE PPU_Proc_Beg
    , B- d9 O* ^1 \0 A, P) q4 I
  1006. PPU_Proc_Ret
    6 [9 S6 r9 h- D/ y6 O
  1007. RTS
    - H) X/ ?2 k+ H4 V
  1008. 8 Z9 w: s$ y0 ^
  1009. ;------------------------------- p8 h- f9 H7 }/ q- {
  1010. PPU_Mode_Return_Cnt  ;转下行模式# w. t, L5 ^5 H# O
  1011. INX5 s" H6 C( J; t+ P. a
  1012. LDA PPU_Addr_L
    9 }- h( }; e4 z2 ^7 h# x
  1013. CLC) L& Z% a' M# f  f) X
  1014. ADC #$20
    4 m8 v) g8 \9 H6 o3 d4 V, M
  1015. STA PPU_Addr_L
    + Q6 |: @$ |" b' o7 N& G
  1016. BCC PPU_Mode_Return_Cnt_End
    8 J4 ~2 @& ^9 r* B5 }
  1017. INC PPU_Addr_H
    / _: [* R3 f# h8 ]: K+ Y
  1018. PPU_Mode_Return_Cnt_End; G( W5 M% ^5 {- a, D
  1019. LDA PPU_Addr_H0 s7 S/ g+ w4 n4 U; S# @" i+ j
  1020. STA PPU_ADDRESS- \8 y' N, ]: B7 {: s0 j. U7 H
  1021. LDA PPU_Addr_L
    5 \) L8 O  G9 |+ S
  1022. STA PPU_ADDRESS
    : O' b" H8 D* M
  1023. LDA PPU_Addr,X
    , J3 a9 [2 u$ g
  1024. TAY
    8 C; V( k' a; j6 M% N, x  H
  1025. PPU_Mode_Return_Cnt_Write
    7 q' k1 t. ^& W( m. y7 s9 I! \
  1026. INX5 A4 ~3 L  Q, c* ~
  1027. LDA PPU_Addr,X
    / E  J- m/ [* [9 w$ {+ h) ?0 C
  1028. STA PPU_DATA
    ! R5 a: u7 v9 W1 p9 {
  1029. DEY# P1 J7 |$ o( b/ f- H* `
  1030. BNE PPU_Mode_Return_Cnt_Write
    ; S- U* ?  e* a7 d* Y  c
  1031. JMP PPU_Proc_End
    ( o" f0 `  E  P) [: K, ^

  1032. ! X# D. s3 P* t" O+ O3 L
  1033. ;------------------------------# p/ J0 k! t6 R5 L" {  A
  1034. PPU_Proc_Beg  ;处理开始  C+ ]+ s" Z' i" Z4 F) p0 d
  1035. LDX #$005 ?* {& m2 e7 e( ]
  1036. STX PPU_MASK8 m) w. P, J2 P+ D4 |4 O( Q6 b  i
  1037. ;------------------------------
    6 g  I: _# S8 `' r$ a$ h" b9 d) g% e
  1038. PPU_Mode_Select  ;模式选择
    & }2 Q4 R  Q1 I/ |  _4 k7 d9 b
  1039. LDA PPU_Addr,X9 i2 P. M. _1 N. f
  1040. CMP #PPU_MODE_CNT_CLEAR) z# b' X( k- ]3 t. X
  1041. BEQ PPU_Proc_Clear
    , p9 X3 m! A# _) X/ H
  1042. CMP #PPU_MODE_CNT_LINE2 t( O8 f' `# ?" i) L0 N( M3 D
  1043. BEQ PPU_Proc_Cnt_Line; b, U. E, y% J( C1 f& S1 ^3 N
  1044. CMP #PPU_MODE_CNT_LINE_NEXT! [, ?) c$ B! ]) g; e  K6 h( \1 r
  1045. BEQ PPU_Mode_Return_Cnt
    ; c) s$ X! P4 V' r; R$ B
  1046. JMP PPU_Proc_End_Write+ K* K- ~5 }7 w* t
  1047. ;------------------------------
    2 V( s1 L1 j0 C8 ?' A+ e
  1048. PPU_Proc_End  ;单行写入结束, b. N4 B6 N  W' |$ M( D
  1049. INX% h( H  y; b$ s
  1050. LDA PPU_Addr,X8 I% V6 ]% ^+ G% i0 F( E9 c
  1051. BNE PPU_Mode_Select
    8 w$ |$ a; Q: L/ G
  1052. STA PPU_Addr0 P* ~% P7 L+ T$ x) M: L* i! Z* C) `
  1053. JSR Update_Palette_Color7 m0 k( v( N- Y5 e8 E) O, ^9 g& U
  1054. ' F* j0 N- i9 }% ~# ]$ z
  1055. PPU_Proc_End_Write
    & O9 j& ?1 I# b) A8 Y
  1056. LDA #$00! |1 i5 e$ e+ o* Q% c& D
  1057. STA PPU_ADDRESS% f. a7 w$ Z4 D. N: U' v. _% d
  1058. STA PPU_ADDRESS
    ' |% y7 ?4 k6 d) {- N% f5 d2 m' T" O) k
  1059. LDA <Text_Disable_Flag
    4 p6 {! m8 |' M
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    : ~0 e& S& b) g5 z
  1061. STA <Text_Disable_Flag: \; u8 a8 c" {8 ?4 N) {' q
  1062. LDA #Scroll_X' c% I' a9 P/ P
  1063. STA PPU_SCROLL0 {$ E7 h) y% p. J2 {+ j, p
  1064. LDA #Scroll_Y
    . \8 \5 @# a, d* I+ d, ^
  1065. STA PPU_SCROLL2 s/ P- U3 S  J
  1066. LDA Screen_State
    % Q( C+ H: e0 k4 A6 s# e5 c
  1067. STA PPU_MASK6 I  ~- h5 D  g. K) `2 ~" A* r
  1068. RTS: B, n- ]/ c. P6 E8 ^; C/ U
  1069. 2 i9 x: I  N0 s6 t( w- U3 I2 y7 B
  1070. PPU_Proc_Clear% F5 D8 t* p- [+ z6 @& V& o
  1071. INX
    3 n- l  t5 `8 _
  1072. LDA PPU_Addr,X
    . x* T; M, @5 E0 _$ B% H
  1073. STA PPU_ADDRESS2 P# e, d+ r6 I; f. Y  s
  1074. INX
    , S: `' }9 S' G) _3 O5 S6 p% R
  1075. LDA PPU_Addr,X
    - `- o. Z9 O3 T4 i7 a* ]- N, [
  1076. STA PPU_ADDRESS1 U  l7 M; v) G! A: a
  1077. INX
    ! M! j, O2 k5 C. K; Z
  1078. LDY PPU_Addr,X% e& k4 g. C. }8 u! _! k$ W
  1079. LDA #$00
    : Y% X0 M, Q6 R& u
  1080. PPU_Proc_Clear_Write# q) e, M& a& r2 B: \- U' d8 N1 h" M
  1081. STA PPU_DATA; Q1 F" L! S/ t% g
  1082. DEY, G4 A' c# T" b1 Q, {
  1083. BNE PPU_Proc_Clear_Write9 u! r3 F7 X1 A: Q5 s5 z
  1084. JMP PPU_Proc_End
    - P6 R6 K' D1 _% E3 J
  1085. ! q8 P, l- m$ o3 W. W: M0 t
  1086. PPU_Proc_Cnt_Line
    4 ^' p- j( N& T2 c( g$ c
  1087. INX) q& N5 M4 t3 _' V% m
  1088. LDA PPU_Addr,X0 R* j7 E# X, |- f
  1089. STA PPU_Addr_H1 N) Q! L4 a4 C, ?
  1090. STA PPU_ADDRESS
    ' `, u3 B: e( S1 y. d. Y% G
  1091. INX2 G1 H& b/ _' D" I2 i9 k& P
  1092. LDA PPU_Addr,X8 f' ]; u6 R  d) t" Y9 k2 C% {+ u- Z
  1093. STA PPU_Addr_L- E! i+ u! L' w; B3 Q
  1094. STA PPU_ADDRESS
    1 X- T8 T" M5 _4 i  t
  1095. INX
    . t2 v3 @4 c; Q* U2 W: W
  1096. LDY PPU_Addr,X
    2 N6 u1 j# Y8 ]2 V9 T
  1097. PPU_Proc_Cnt_Line_Write- p5 p/ R0 U% B3 F2 W" R
  1098. INX
    4 b+ o& O$ y' R; J4 N2 O
  1099. LDA PPU_Addr,X
    8 g+ b, e. O+ C8 u8 q6 e
  1100. STA PPU_DATA% C/ J! t1 p/ H& g" z/ x( ?) F
  1101. DEY
    : ]8 X! W1 y5 j' ^
  1102. BNE PPU_Proc_Cnt_Line_Write
    ' W: Y6 D" e1 z8 [
  1103. JMP PPU_Proc_End: Y- J. r: W) q3 s) u4 b3 p% c: p1 J
  1104. . i8 g+ m- w/ O4 g4 x
  1105. ;==============================
    * Z$ o# M- Y2 H" A$ U2 i: P: W
  1106. HEX_To_Dec;十六进制转十进制) v' K- y- Z& |
  1107. STA <HEX_Data
    ( q" u4 r- ~# `9 n
  1108. PHA
    9 ?4 ~* o, g" m5 m1 l  P" s
  1109. TXA
    1 D2 r7 j# [8 c8 e* b/ y& n2 J
  1110. PHA& a2 t: V% X. b" j- u9 Z
  1111. LDX #$00
    / v( z+ h9 N6 M
  1112. LDA #$00/ I$ C' n7 h1 Q' c
  1113. HEX_Cln
      e# {) F1 U1 H4 Z( h& H6 g' Z  l
  1114. STA <DEC_H,X
    / l, f( f+ E6 R5 T- Y
  1115. INX% S- C  b+ {" m! f' K
  1116. CPX #$03; N+ _* w9 h: H7 {3 W$ W
  1117. BCC HEX_Cln
    & O! u8 X" j' h! @" Z( |
  1118. LDA <HEX_Data
    6 K) f3 f2 ?9 ~
  1119. ;------------------------------7 S$ @( }  V0 f, `
  1120. HEX_100
    6 y- @. i/ }9 z4 ?( E" s, |
  1121. CMP #100
    ; m+ L1 ^2 u, y; d
  1122. BCC HEX_10
    , B5 x9 x" b( [/ H
  1123. SEC
    ! g  H- g. J  X2 g- K3 G0 V! V) z
  1124. SBC #100
    $ V& R9 P! \) J1 M! v) F2 G0 L: O1 r
  1125. INC <DEC_H
    ( g& I- b5 ^) U8 F2 C8 J
  1126. BNE HEX_1008 B5 H& ]5 |& j" m$ m: p, O; r" u
  1127. ;------------------------------
    0 a9 A! o: z$ h
  1128. HEX_10
    1 F+ k3 s2 p" `& o
  1129. CMP #10
    9 D) q9 i$ y6 F# P. T% T$ D
  1130. BCC HEX_18 S, ]! N$ O0 Z8 H9 b
  1131. SEC! ]% `. n' j. a/ ~: S
  1132. SBC #10& p# A6 K# b/ U
  1133. INC <DEC_T
    7 Q' |# \  L9 U$ @
  1134. BNE HEX_10$ b! w! s1 q! H% g1 F
  1135. ;------------------------------
    % c/ ~! q% }; j, H
  1136. HEX_1
    ) }' L. X6 R- k& g; x6 v/ a
  1137. STA <DEC_L# L9 O9 R$ B3 f7 [& d" M! B* k4 _6 M
  1138. PLA" g' X4 i, L( W/ Z+ p- V" G
  1139. TAX
    2 u7 N/ }1 u+ O
  1140. PLA
    8 q$ _1 P6 C$ [- X- F" [
  1141. RTS
    + E/ \7 F  G. M. F& ?1 \4 _

  1142. 5 y* z1 a1 E) M. v
  1143. ;==============================
    + x, b& R- U2 U
  1144. ;音乐曲目显示
    " {0 V7 H6 E9 G* s7 ?8 W/ K* M
  1145. Music_Show# |. t1 O1 ?! \/ z4 \
  1146. LDX <Music_Item_Cur8 x/ b. I7 O; m0 @" e3 V" l7 o; X1 I
  1147. LDA <Music_Cur,X4 v9 u6 v8 P/ z8 D3 d4 o5 k. e4 O
  1148. CLC
    7 K% |: U9 Q9 }6 |, h
  1149. ADC #$01
    & Z7 K: n+ s' y8 q8 I% d2 X
  1150. JSR HEX_To_Dec2 W' n) J7 Z. {7 H3 g9 Q, [3 n) v, @
  1151. LDX PPU_Cur
    , m  X$ R' h- p
  1152. LDA #PPU_MODE_CNT_LINE
    ) W! l# ~. {. z2 W8 w
  1153. STA PPU_Addr,X& j# J2 Y# Z' d3 O( l* g
  1154. INX
    1 |' h1 P: z; v$ U+ D( E; l
  1155. LDA #HIGH(Play_Index_Pos)
    ) F$ D& ~1 s2 {( Y+ f
  1156. STA PPU_Addr,X
    % _$ y$ f! l7 z3 ?: N: O+ @
  1157. INX
    + E# F2 s2 a5 j. ?! y' S
  1158. LDA #LOW(Play_Index_Pos)
    ! A3 T+ V- I- K/ n8 ?4 d( k
  1159. STA PPU_Addr,X
    ; b, K4 |) x7 E
  1160. INX( \: z) n" p# x' p& D0 z
  1161. % z- r% d+ d  v+ t5 V
  1162. LDA #$07
    , f$ e+ {; t5 ^+ l( n
  1163. BNE Music_Show_Length( ?3 S8 s5 C% Q1 ?; z1 h( ?, P
  1164. 3 ~2 m) O1 e/ D3 B0 N3 T+ N9 t
  1165. Music_Show_Length8 ^1 h8 h/ @' |2 m. M- m6 q2 a% o
  1166. STA PPU_Addr,X
    % `! s% d; [& T! p! w/ n7 @& R
  1167. INX. z) s- V5 r9 o* m

  1168. 0 H; u8 j0 y7 T+ O7 U; [
  1169. LDA <DEC_H$ Y3 J' f& I! r: f/ w
  1170. ORA #'0'
    * Z7 R  h4 o! o# \( R4 H4 |/ v
  1171. STA PPU_Addr,X
    2 R- |! W) e0 S; r
  1172. INX- p! p; b8 H1 G1 l
  1173. 6 Z* M* V7 |# I6 D
  1174. LDA <DEC_T& |. Q7 V+ {' R
  1175. ORA #'0'- H# W  n$ c7 ]# H9 ~3 W
  1176. STA PPU_Addr,X" i  e; p8 v7 T- p
  1177. INX0 ^6 W; p0 h9 e0 u' p2 N/ f6 J* R% o

  1178. . v. T) e0 Z8 E( |; l+ J
  1179. LDA <DEC_L( U7 k/ J  ~6 ^# k  |6 E% n# h
  1180. ORA #'0'
    3 Z$ `/ a5 x  Z( |+ @
  1181. STA PPU_Addr,X* A: P7 n- l7 ~9 U3 t- n6 G
  1182. INX7 p8 A. k& @: q6 J, e. K& p
  1183. 3 e& I* V9 X$ K1 d
  1184. LDA #'/'/ U* E0 c1 d& M! l; Y7 O
  1185. STA PPU_Addr,X
      o- j+ L* `+ U
  1186. INX
    8 `* \( r& L. g! Y1 I, Y
  1187. Music_Show_Total9 @) N/ e5 P% f- G& F, A' @3 q! Z
  1188. LDA Music_Total
    1 s$ a1 b% ?+ e( c3 y
  1189. CLC: J( v* d- T! M" R  `4 O
  1190. ADC #$01! ]' C6 P; K! c, o" B" C+ ~
  1191. JSR HEX_To_Dec9 m. j# q- p( l# B4 }3 q% O
  1192. ' m0 I% r5 J7 e/ K* J( m) U
  1193. LDA <DEC_H( |$ a9 U+ s# ]2 n' F" E
  1194. ORA #'0'
    : H( ?9 c  P3 b9 h7 N
  1195. STA PPU_Addr,X
    & k" V. I1 k7 t2 a4 U" i2 t
  1196. INX
    & w/ r8 ?$ v- k

  1197. # ?' ^5 k' z- d- |) D# Y* T
  1198. LDA <DEC_T9 I' ?' M1 d. Z8 Y3 E
  1199. ORA #'0'
    . [  V' x( m( a, @
  1200. STA PPU_Addr,X/ ~: Q. o% ~. v' U! U4 s. Z4 R
  1201. INX1 Z: d) l& i! W1 n# D( w4 f
  1202. % T; D. O5 U4 ~% H' h) a
  1203. LDA <DEC_L
    3 C0 q7 {) @: \4 J- w
  1204. ORA #'0'; K' w% _8 O5 V0 p3 g. `; p) z! R
  1205. STA PPU_Addr,X- D9 ~0 e2 L( d, s5 k/ Y0 J
  1206. INX5 {; j8 U0 {! A- B3 y
  1207. * r5 j0 M& u4 D! R
  1208. STX PPU_Cur1 u% I+ @3 r2 f/ o" c0 e
  1209. Music_Show_End
    % c6 c; K" `! B4 ]
  1210. RTS3 K% @2 {! d, r& k8 i3 l5 S9 E
  1211. ; ^% l/ b; g6 a* W/ H- F
  1212. ;==============================
    6 x/ R$ K2 N$ ]5 ^  a; k0 j
  1213. Time_Show;播放时间显示
    : g# p1 d6 Z& S% t
  1214. LDA <Text_Disable_Flag
    % n- y# [6 |) Q( f9 g( Z
  1215. AND #TEXT_DISABLE_ITEM
    1 a" d2 @* Z( L1 n+ K3 d
  1216. BNE Time_Show_End
    + f2 X" [! L" A+ I
  1217. AND #TEXT_DISABLE_TIME! u* j% E* o) |/ w4 u
  1218. BNE Time_Show_Enable
      i9 u* `% L  [  O( }! c9 b
  1219. $ r. G. J4 `/ ~! ~2 _2 m" n
  1220. LDX PPU_Cur
    3 G* n# Z# e9 L. |6 Z9 I0 L
  1221. LDA #PPU_MODE_CNT_LINE
    7 o$ h: a, S1 T4 W( r  r
  1222. STA PPU_Addr,X: `; R5 Z4 J8 ~! G% f8 r
  1223. INX1 g: W7 X. o* v
  1224. LDA #HIGH(Play_Time_Pos)
    9 {% i1 c  D- o( [
  1225. STA PPU_Addr,X# m) s- y6 ~9 ~2 N8 _2 t' K; H
  1226. INX9 w4 A3 v* A* G
  1227. LDA #LOW(Play_Time_Pos)
    - v3 N% d( E. P' Q- _3 u2 N
  1228. STA PPU_Addr,X: V. ?" d: h1 W+ J% j: W
  1229. INX
    / m, o2 S6 \- n8 u5 X2 ^. T5 T
  1230. LDA #$08
    : r+ q9 L* }, O
  1231. STA PPU_Addr,X
    " }, ~3 e+ t. S* @2 o& s7 ~: i0 n
  1232. INX
    1 u4 U5 c! I- b1 g7 {
  1233. Time_Show_H- k! v# U4 t1 t1 I
  1234. LDA <Time_H
    * h9 U' M2 M+ c, v" f
  1235. JSR HEX_To_Dec" {, {. G1 O) ]4 T$ a' g
  1236. JSR Time_Digit
    " i; L9 e$ C4 T0 O. U. Q6 q
  1237. LDA #':'
    9 W5 g1 G) I& X9 n
  1238. STA PPU_Addr,X) E5 R0 v5 W% K! [+ y1 }' n
  1239. INX. Z# @" ^* U' b5 B1 M0 l
  1240. Time_Show_M& Z0 Z* g4 P; s" t* ]5 z! `8 J
  1241. LDA <Time_M
    7 ^2 F9 Q2 d; @( A1 S" o8 F* Z* Y
  1242. JSR HEX_To_Dec) e- @) ?" N4 T3 ~5 n# K
  1243. JSR Time_Digit
    , k" L8 n" D$ L) P3 j
  1244. LDA #':'* o. ^2 j* _6 I1 Z: B- I! a
  1245. STA PPU_Addr,X
    $ w/ B% l* l& n! c9 {$ @
  1246. INX
    : c7 x0 _: M# g$ E% }
  1247. Time_Show_S
    $ ^7 {" E0 a3 @( \1 j' R
  1248. LDA <Time_S
    ) `- \3 F1 L* e$ k7 d# v" x0 ^
  1249. JSR HEX_To_Dec6 g9 I' P( a$ n
  1250. JSR Time_Digit
    6 J+ Z; u. Y1 W, P8 u8 W
  1251. STX PPU_Cur
    9 ?; F4 B/ Z' ~1 q; b  {, J5 @
  1252. Time_Show_Enable- s9 h7 a- h  N
  1253. LDA <Text_Disable_Flag  d8 B* k3 \5 h9 _
  1254. AND #TEXT_DISABLE_TIME ^ $FF+ J* m2 W& a: {
  1255. STA <Text_Disable_Flag6 P& R' p! v1 D3 I7 W3 }
  1256. Time_Show_End7 T5 f# H- P9 L1 I* k
  1257. RTS5 S$ L; [  V! W  L% y8 U6 ^
  1258. 3 a9 K6 a7 ^$ ~( L  X1 q
  1259. Time_Digit
    3 L" \# d4 B* r
  1260. LDA <DEC_T# K# a& l# G( x: d( J) F) B
  1261. ORA #'0'- i$ B6 L$ N8 G! P4 B) s2 r9 @3 J
  1262. STA PPU_Addr,X$ k( X6 u( a# P! d  x) {( y+ G
  1263. INX
    ! P- G8 W6 O! V* o3 x4 |2 O4 G
  1264. LDA <DEC_L7 X# z+ r# V" J
  1265. ORA #'0'9 y0 u9 ?- F' {$ X
  1266. STA PPU_Addr,X7 v7 w* e) k& f4 v. p
  1267. INX4 F0 R4 g: o) I! ^' \2 ]/ x
  1268. RTS' \/ x3 f* K' n; s/ }" p! ?  z
  1269. - O; K; c1 K! |1 W
  1270. ;==============================  |1 I$ {( a( ]0 [( j
  1271. Time_Count;计时
    1 v! i% O) Q8 f, \5 u% J
  1272. LDA <Music_Stop_State8 t1 {( [. F3 i( w* H- E6 s
  1273. ORA <Time_Wait_Cnt" v, Y' X7 b: N; z' N7 ~# c$ e/ ?
  1274. BNE Time_Count_End
    8 |0 c  {6 u* @( [! t) [2 Q
  1275. INC <Time_Cnt
    ) F8 O. P' Q$ X
  1276. LDA <Time_Cnt6 Z  d6 i9 A! g3 O: r7 G7 G. \: N
  1277. CMP #60- f( O! g6 J6 `6 M
  1278. BCC Time_Count_End
    0 K5 @+ A, j7 F
  1279. LDA #000 q6 q  f8 w7 q2 q! p, B' l' p" e
  1280. STA <Time_Cnt* [  p, }4 |: b
  1281. INC <Time_S$ O, Q' D) c/ p5 Z. J' Z
  1282. 3 Q# J7 V+ U$ w( v( I
  1283. Time_S_Cnt
    ; N4 R5 f( O" O8 n
  1284. LDA <Time_S/ C1 N! x( H. L9 e* U
  1285. CMP #60
    * h/ X+ p- h  ~4 V( b& v3 ~
  1286. BCC Time_Count_End
    % e7 \1 _0 z2 ~- v4 a! ^
  1287. LDA #00
      a5 G- S' X, j6 ^* x
  1288. STA <Time_S
    ; k8 z$ r! F8 C: V
  1289. INC <Time_M
    / U7 |1 N- I% I& w! y$ z

  1290. . J# m) _' ]" ~. e' }% }" X8 |
  1291. Time_M_Cnt
    4 A% L! f2 n& v* P' h  ?7 Y+ C  x
  1292. LDA <Time_M
    + G. J5 [) E. E7 o; O3 T9 F
  1293. CMP #60. ]2 ~# x- j5 c7 A- s3 v9 O+ b
  1294. BCC Time_Count_End
    9 ~8 B: a+ z9 Z2 c
  1295. LDA #00' e5 F- X' M% R- A
  1296. STA <Time_M
    , E. B2 c3 R; L: \/ M( h) B# H( W4 s
  1297. INC <Time_H8 F# k9 k1 z. R
  1298. ( L( l6 @5 f9 e( @# p
  1299. Time_H_Cnt- F9 }, k9 O/ U5 V$ x
  1300. LDA <Time_H
    5 c1 L# `- _; n/ F- K
  1301. CMP #24: Q. h9 H6 R. P7 ]
  1302. BCC Time_Count_End& `; Q9 b2 Z( T, G/ W+ Z
  1303. LDA #007 u- M9 m3 |$ S* \
  1304. STA <Time_H: A4 m% t* @6 Z
  1305. : v: U- L3 \5 H4 F2 p/ t
  1306. Time_Count_End
    . z7 [2 @9 q3 h; n8 w# M; m8 S+ l
  1307. RTS* A2 L: C6 [" O& O7 x) {

  1308. # a( C. a1 z# j% \* s  D
  1309. ;==============================
    ( P; n7 `' D) y8 A; U
  1310. Time_ReSet;播放时间重置
    ! O# H7 v( W( ?' {" r
  1311. LDA #$00) }! e0 g) x7 c, L9 B
  1312. STA <Time_S
    / a9 P' `' u6 i& E1 M( L2 P1 G& }
  1313. STA <Time_M
    6 b: Y+ W/ x7 n
  1314. STA <Time_H# U& a1 u8 S$ X
  1315. STA <Time_Cnt# p: y0 c/ Z3 Z8 a8 W5 ~9 X) L
  1316. RTS# m/ l9 [+ r9 e' k0 P# P/ e# b, }

  1317.   y9 }5 T6 @. k7 f- [
  1318. ;==============================4 s) w2 Y* V+ J" t$ S
  1319. Music_Bar_ReSet;音乐条重置* U& Y7 e+ n7 u
  1320. LDA #$00
    8 t7 E& v7 N0 ^/ L" c: r
  1321. LDX #$00
    ; s! D2 [$ ^" W! D
  1322. Music_Bar_ReSet_Set) \% W( j0 p( L( \, ^+ o
  1323. STA Sound_Bar,X1 o# x* @0 a. |  u
  1324. INX! t; A" Y, e. V" c4 \; u3 w
  1325. CPX #$10
    % Y0 M( k2 O( A9 ]% m: g; X
  1326. BCC Music_Bar_ReSet_Set
    3 C! h2 ?7 s) P" x
  1327. RTS( w2 |% Q; {2 |. E9 O# X& h

  1328. * s3 @( f/ Y/ @1 V  k. ~
  1329. ;==============================
    0 D+ c1 R/ f. c" S
  1330. PPU_Data;PPU数据写入8 f* P2 a! p, m% l! H6 p/ C! v9 K2 T- X
  1331. STY <Data_L
    1 M+ f' e2 o8 S$ i
  1332. STX <Data_H
    + t: L0 {6 z% P* I
  1333. LDY #$FF
    - ~" Q) G9 t8 u. }; D
  1334. LDX PPU_Cur
    3 P( u1 e) M& E
  1335. DEX
      @9 t! @) b1 r1 f  _
  1336. PPU_Data_Beg
    " p1 K% y% U* M; ^% l  @+ M3 `
  1337. INX
    / U$ A% t. U9 ]( O5 H
  1338. INY$ x- _  O, v$ l$ d( q9 W$ }2 x
  1339. LDA [Data_L],Y0 U, A$ w/ T/ s" ]5 ]8 e
  1340. STA PPU_Addr,X
    0 `1 T9 o4 d4 C! `
  1341. BNE PPU_Data_Beg
    / H& {' p% e) ^7 S% C% r) j6 v
  1342. STX PPU_Cur/ F0 x6 [( ~* j- ?
  1343. PPU_Data_End/ p, j, N& _1 L9 X7 i; V: V
  1344. RTS
    % t7 u- B/ D6 [; }

  1345. ' p5 p' h3 I( Q  n( j! w. a
  1346. ;==============================/ C( x- v8 G! W: P$ ?5 k
  1347. Music_State_Show;播放状态显示
    # ?8 N% J4 V5 Y" O/ g+ w" _
  1348. LDA <Music_Stop_State# v: O5 e: U7 i) `# \' K
  1349. BEQ Music_State_Show_Play
    8 x* l0 T& y3 R! |& ^5 j2 Z
  1350. Music_State_Show_Stop
    7 ^9 R8 l  K4 R9 O5 ]9 a
  1351. LDY #LOW(Music_State_Stop)
    - ?# f- N8 F* Z: ~" `
  1352. LDX #HIGH(Music_State_Stop)) q1 v- X& ^% Y) {. H
  1353. JSR PPU_Data
    0 _" ]3 t1 Z; T/ A3 ^, O% y
  1354. RTS+ p' _) `4 |+ ^  k
  1355. Music_State_Show_Play: E' I! K. I3 x: `
  1356. LDY #LOW(Music_State_Play)& Y/ x: P4 O  x9 f( S) [) l
  1357. LDX #HIGH(Music_State_Play)
    8 d5 \0 a4 \$ O0 R
  1358. JSR PPU_Data
    % \% ?  _3 z) H7 U4 f) K
  1359. RTS& i! \, |0 i7 q+ D+ Y$ O
  1360. - j  B% Q/ o! A! t- O. V
  1361. .IF SOUND_BAR_SHOW_ENABLE' r) Z5 c7 n( N2 S2 Q
  1362. ;==============================) b; [# h( i6 q5 G) ]$ b8 r& p
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    2 f2 w# P0 T! v  a
  1364. LDY #LOW(Sound_Bar_Text_Data)+ A9 `; B" }3 U
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    % o' ~9 f* D" }2 L8 q" z( X( z
  1366. JSR PPU_Data3 S/ W" U% _( X  V
  1367. RTS
    * K/ J0 w: ~5 e/ s& E0 J5 H
  1368. # O. M! `. P/ j  v+ a7 g" _2 X
  1369. .ENDIF
    0 F1 n0 F1 W/ t. c
  1370. * J# }+ k# b4 s: a  j* c! T! r/ e: p
  1371. ;==============================
    ( N. ?9 H% k2 @* d7 k1 n
  1372. Set_NameTable_Attributes;设置命名表属性7 S" f' w* i4 E
  1373. BIT PPU_STATUS
    1 _; {2 h0 b. b, H, ?8 e4 L
  1374. LDA #$23
    8 H' H# q: w; G* ^
  1375. STA PPU_ADDRESS
    ( ^  G; Z% ]3 F+ Q
  1376. LDA #$C0
    0 f5 u; W( m/ \8 F" W* J
  1377. STA PPU_ADDRESS6 n) b( t  I8 O( D4 H
  1378. LDX #$00
    & y% j0 e/ q: k
  1379. Set_NameTable_Attributes_Write; e! ^1 B' l( u$ u
  1380. LDA Palette_Attributes,X/ b! p& K: w; Y4 C9 `
  1381. STA PPU_DATA" S; I, i: m9 E& C/ v; L5 r) y$ X; i
  1382. INX& p8 ~; V& f7 T  }" W
  1383. CPX #$40
    $ I8 T5 |  X& h/ k
  1384. BCC Set_NameTable_Attributes_Write# @! p  }# A, u% c
  1385. RTS
    9 Y1 e0 T  j( J' a: o) E2 t
  1386. ! j- J, Q2 W: W9 q
  1387. ;==============================: n% _7 y# S( @5 B
  1388. Set_Palette_Color;设置调色板数据8 N6 Q3 H0 _7 n5 p, K6 B5 K9 l$ X
  1389. BIT PPU_STATUS
    5 e9 Y4 h, ^) }  L) t
  1390. LDA #$3F
    8 t4 x4 r, R  A6 D# X
  1391. STA PPU_ADDRESS
    , y8 f3 Y# N. _# m7 \  ?% Q/ k6 ^
  1392. LDA #$00% W& @6 p/ u# Z4 [$ W
  1393. STA PPU_ADDRESS6 \* D' s4 v& Y
  1394. LDX #$00# @1 p" U! p- k. r& u
  1395. Set_Palette_Color_Write
    & P7 x- h* v4 t# V
  1396. LDA Palette_Data,X
    3 x6 B' q6 b# ]+ L
  1397. STA PPU_DATA
    ! I* A6 F7 G9 x
  1398. INX  G( o0 q, `* R- L9 V# f
  1399. CPX #$20
    3 N% I6 L/ X! w
  1400. BCC Set_Palette_Color_Write
    4 E) E6 K$ T6 {' l' }% }
  1401. RTS
    3 C/ ^7 }8 H8 g7 h

  1402. ; |! R  A  j! \! p: L$ b/ W0 u# b
  1403. ;==============================3 d$ J+ T7 U& [4 r% C
  1404. Init_Palette_Addr;初始化调色板数据9 c& V4 f" j' y/ r+ c
  1405. LDX #$00# v' u2 C: X% ~; u$ y* W& N
  1406. Init_Palette_Addr_Write* E$ A5 v) X. U) g) M
  1407. LDA Palette_Data,X
    2 |) k5 Z& T4 l4 d/ X5 ]
  1408. STA Palette_Addr,X1 t8 z9 r; s' ~# ~1 ?8 r7 G- l% W
  1409. INX7 Q$ r9 D2 F8 k) S& u4 T  ^
  1410. CPX #$20  X- K6 G) W2 f
  1411. BCC Init_Palette_Addr_Write
    5 ?. b+ w( g, E8 g& J5 p# k
  1412. RTS2 k  U$ n$ N6 G4 F
  1413. 1 L" ?7 b3 j5 m- _5 ]1 A" V8 ?
  1414. ;==============================
    # ~% V, W: y- |, h6 H( I
  1415. Update_Palette_Color;更新调色板颜色2 N6 s3 T6 ~$ c, A8 |( r; c
  1416. LDA <Palette_Update_Flag
    ! o4 D4 `, k) {
  1417. BEQ Update_Palette_Color_End
    1 `+ n! b2 T  z
  1418. LDA #$3F
      k( T% d8 b2 h: h
  1419. STA PPU_ADDRESS' Y7 ~5 Q& ]' l* Y; z) _+ K3 U% p
  1420. LDA #$0C
    0 E& B2 z& c  O- |6 G: P' O# F$ A
  1421. STA PPU_ADDRESS
    7 _' w" c! S1 O. d3 [
  1422. LDX #$0C
    " T- _/ ]. X* n% F9 z
  1423. Update_Palette_Color_Write
    # w5 H. [* ]: K) f) _" a; e
  1424. LDA Palette_Addr,X
    + U: `9 M% S  X; }9 h
  1425. STA PPU_DATA
    ! r. B/ H0 ]+ F: \
  1426. INX
    ! ?3 e% S. s( h3 n3 \$ T
  1427. CPX #$140 p. L, L6 |( Z: Q' w& y
  1428. BCC Update_Palette_Color_Write2 [% B6 O% g: Y& I. j7 K
  1429. LDA #$00
    7 l8 S; U; D! e  `( n5 ]9 u+ }0 z
  1430. STA <Palette_Update_Flag( Z/ w* Z) s) d6 W! D/ y# U6 c
  1431. Update_Palette_Color_End1 L& [0 f- N( P' R/ q$ Y2 J
  1432. RTS8 \$ H/ @" r  g5 l% R

  1433. / m- C' T, S3 o" w* s
  1434. # c+ }5 k+ q9 b! A7 X4 G
  1435. Update_Sprite_Palette_Data$ {4 b+ b* u& E) B* f
  1436. .DB $21
    8 J; \* U  z, c" e; }8 Z
  1437. .DB $21* r9 p2 R8 D2 c( }1 E' A0 ?  u
  1438. .DB $11
    & ~1 I$ q& @% I. R: |1 k* R
  1439. .DB $01
    % V9 [2 j0 F7 r. V, q
  1440. .DB $01
    8 z! z) Y" P0 [) Q
  1441. .DB $11% [: G+ x1 d2 s3 I! o
  1442. .DB $212 T% f* i! ~+ p* Z' C
  1443. .DB $21* F' `+ {) ]. D; T3 K
  1444. .DB $11% V/ M* j3 t& f# U5 G
  1445. .DB $01
    6 p$ g# Y8 Q4 t( ]
  1446. .DB $11
    / A9 |0 _6 I/ @, ^. b! e, h! e0 X8 I
  1447. .DB $21
    & W% O$ e+ G0 j
  1448. .DB $21- n! `: m0 y- a% w9 p3 M
  1449. .DB $11
    / Q3 L* U+ O/ |3 @/ l/ G
  1450. .DB $01
    6 C! ]( ~/ b' r9 B7 V
  1451. .DB $113 m4 }  |8 p% o
  1452. ;==============================8 @7 Z6 D/ y. g5 y$ T+ X& x
  1453. Update_Palette_Data;更新调色板数据' s/ {+ V5 W% O7 e3 y9 Q  \7 J4 ?
  1454. LDA Nmi_Time_Count
    % `! ]1 r+ d+ f* ~5 I5 {4 B3 |0 K9 l
  1455. AND #$08+ z6 {* y  V+ t% w( F
  1456. CMP #$08
    ) `) J( t2 H5 G; |* {% ~
  1457. BNE Update_Bkg_Palette_Data$ i2 h% t3 ?3 L; X

  1458. : ~& e. G% q7 M+ [: E7 }5 t
  1459. Update_Sprite_Palette_Data_Set, K% G8 {2 ?0 `4 ~
  1460. LDA Nmi_Time_Count
    : U9 B7 U. N- o$ C
  1461. LSR A" W6 Z& A% L" z& T* Y
  1462. LSR A7 k% [5 G+ b7 z" K6 m1 M! D
  1463. LSR A/ D8 c% k7 _- q# E  r
  1464. LSR A
    ) w! ^+ E* l) ?& o. e
  1465. AND #$0F
    8 b# t# O& d& I$ P) d; n
  1466. TAX
    $ r  w0 s2 d: }; q
  1467. LDA Update_Sprite_Palette_Data,X
    + k7 Z; }4 W6 Q/ [7 B
  1468. STA Sprite_Palette_Update_Addr0 g, Q  \9 U9 M/ r3 f, ^
  1469. LDA #$01
    3 L# o8 L% k; X6 U! V. M3 n. T
  1470. STA <Palette_Update_Flag0 `( z- Z  D' c" s* Z
  1471. ( K7 u# O. w2 `5 q! N
  1472. Update_Bkg_Palette_Data' h1 a2 r  m( \+ l: ~
  1473. LDA <Text_Disable_Flag4 F, A' I0 T# V4 X9 R! |1 S9 {
  1474. AND #TEXT_DISABLE_RAM8 T, n8 ~+ P1 H. ^" f7 F( ], n% O
  1475. BNE Update_Palette_Data_End
    2 l' J1 u0 D' K& X3 N
  1476. LDA <Music_Stop_State' D+ k: Y( ~* `* o
  1477. BNE Update_Palette_Data_End
    5 A& z1 X7 u& K2 O1 S! l2 z
  1478. , [4 M1 o: t) d' y7 {: J( W
  1479. Update_Palette_Data_Check; {, l& n  R6 Q0 z
  1480. LDA Palette_Wait_Cnt
    " m& w) }  s, i' Z0 X2 }
  1481. BPL Update_Palette_Data_Check_Over
    * z% W# ]; A# W$ q. P' h, u
  1482. LDA #PALETTE_UPDATE_INTERVAL
    - G; c, v; w& E& [- U( w. o/ |
  1483. STA Palette_Wait_Cnt. L+ t" @  B6 u. H+ }- Y( K6 i
  1484. Update_Palette_Data_Check_Over# b0 a+ `. |5 l! ?  l6 H
  1485. DEC Palette_Wait_Cnt+ w0 a& W( q% S: `- h$ s" F
  1486. BNE Update_Palette_Data_End* x: d- X, y9 W% K/ z+ J
  1487. - V7 x1 r  @& Y9 C& `8 @) j( Q% Q
  1488. LDA <Text_Disable_Flag
    # f5 L$ `! ]4 ?2 D; N! r& ]9 Y6 j6 Q& X
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME1 ]4 Q) V5 A3 t1 ^: p) W- u
  1490. STA Text_Disable_Flag
    ; V' C# V; o" j+ V; Y% q
  1491. INC Palette_Update_Flag
    * V/ o8 ~( J6 l0 p, j6 }6 Z
  1492. 6 M. K7 x! A  W- l8 C& v: v* N2 E& T0 `
  1493. LDA #PALETTE_UPDATE_INTERVAL2 V0 E9 O7 x- x) x1 R+ m8 o
  1494. STA Palette_Wait_Cnt
    ! u$ x9 i% x# O0 ~9 B2 W. \

  1495. & G1 s5 Z+ V9 E2 S# h# o" T
  1496. LDA Bkg_Palette_Update_Addr
    + C* Q; i8 W7 |; v) J2 T4 h
  1497. CMP #PALETTE_UPDATE_MAX
    1 [. X/ ?. u( B- X$ b
  1498. BNE Update_Bkg_Palette_Data_Set
    / Q9 A" S/ M1 r1 U0 Z! A
  1499. LDA #PALETTE_UPDATE_MIN - 15 N, ]1 d: J# D& ?; Z$ w+ O4 O' c
  1500. STA Bkg_Palette_Update_Addr
    . T$ D* }4 S0 f8 [3 i( h% f: H
  1501. Update_Bkg_Palette_Data_Set
    % f4 ~5 O: K$ [6 n1 W* K
  1502. INC Bkg_Palette_Update_Addr
    / M0 T- f3 ^9 a" Z
  1503. 7 z" c3 b" n8 r% q& `1 v
  1504. Update_Palette_Data_End
    7 U2 d2 m) t% V$ ]# G& a6 i
  1505. RTS
    ! u" |  a7 u) @! R1 D

  1506. ) v& \1 \6 C! J
  1507. ;==============================4 l) ?# y: x) ^! L8 r
  1508. Show_Music_Text;显示静态文本( t: N- a- @; b/ K/ r- O
  1509. LDX #$008 h/ N& k3 e  F( A0 C
  1510. Show_Music_Text_Set9 N# \) z; R9 N. ^2 ~! T
  1511. LDA Static_Text_Data,X
    ! h$ |4 I; k* Q$ l
  1512. STA <Data_L
    1 y6 _" C% x  H. x$ A- p/ h' y
  1513. INX
    / h. B5 Y* d7 w& [* R- Z3 e
  1514. LDA Static_Text_Data,X
    & `# ^" R, @* T( O
  1515. STA <Data_H
    % G7 R$ S' G. z& N- K+ R, I  B% J
  1516. INX
    , d+ v% m& [% K, k) r4 P6 D8 S
  1517. LDY #$00
    ( N5 e8 Z3 M; o: T$ i. w0 a7 n
  1518. LDA [Data_L],Y* L8 q; I( t4 x& G" u9 L3 b
  1519. STA <Data_Cnt
    % B9 v0 n( F; H! ~- ~2 v+ @
  1520. DEX
    3 I6 _8 g7 s, T8 R3 R! Q2 h
  1521. DEX+ |4 P  f# L2 X+ w8 B6 U
  1522. LDA Static_Text_Pos,X
    ' v& Y' H" T& }5 u4 K7 f
  1523. STA PPU_ADDRESS
    ! }, F1 S7 r4 Q5 a7 }
  1524. INX
    9 G; x8 c+ h5 r! J/ a
  1525. LDA #$20/ O6 C! D* U# w6 U% r* E
  1526. SEC
    8 i( `8 X. c) f4 s1 c7 \/ f
  1527. SBC <Data_Cnt
    " L& V6 j$ u4 p( g$ i) I8 G3 `
  1528. LSR A" P2 N7 U" J0 P, ^
  1529. STA <Data_Buf
    0 G4 [+ x( b1 ^7 b
  1530. LDA Static_Text_Pos,X0 f7 l8 s. G( A2 _
  1531. AND #$E0
    ' x; n1 b6 W- b7 M5 F1 p
  1532. CLC
    / @+ D% o+ `; F- o0 t7 I' z, U- X
  1533. ADC <Data_Buf
    8 E% N" ^7 f$ C- \. R
  1534. STA PPU_ADDRESS1 E* t2 l6 c9 d; _( ?) ~7 r
  1535. INX0 H' {3 g. v+ N3 ^
  1536. Show_Music_Text_Set_Write1 ?& X4 B0 n2 t0 g; J  E. H; ^! s
  1537. INY. y# Q, ~- A1 v. O0 [; r* C
  1538. LDA [Data_L],Y
    $ m5 ]/ ?: M0 C5 t8 m
  1539. STA PPU_DATA
    % |( o! x3 n; k9 S2 A! F+ J
  1540. DEC <Data_Cnt
    $ l2 k9 F. i4 t' Z0 @- a/ s
  1541. BNE Show_Music_Text_Set_Write: n* T0 M# Q  n5 K1 x
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos& e' }! b$ f% T6 B2 J; V' o& Y
  1543. BCC Show_Music_Text_Set
    % D! O2 a$ V  T% n8 S8 I
  1544. RTS
    ; _5 P" T6 |6 |) `

  1545. + j- g. ?  t. a+ ?7 ]
  1546. ;==============================: _( G* B- I8 d/ J6 u6 W
  1547. .IF Track_Name_Pos;显示曲目信息  ]) H" k  o8 c1 L2 T
  1548. % r0 s: \  e. y$ O
  1549. Clear_Track_Info, k; ?" j( W. ?3 X- X
  1550. PHA8 Y! N7 N6 ~4 Z3 }$ }
  1551. LDX <Music_Item_Cur
    5 ^% ^& d0 ~5 b9 Y1 Z2 E
  1552. LDA Track_Name_Addr_Flag,X9 k& e2 u) \2 u0 [  E& G
  1553. BEQ Clear_Track_Info_End_Ex
    $ f- s5 z/ x/ _0 d3 J& a/ b
  1554. PLA4 Z$ H: j7 u2 A6 O+ q6 `

  1555. , N, x. O6 e/ G  F9 K
  1556. LDX PPU_Cur
    , \) \3 |# u, p) j6 K8 l" }
  1557. PHA, O: f  X/ @% B. [, ]  Z# s
  1558. LDA #PPU_MODE_CNT_CLEAR& L" U7 a2 X/ @/ I6 d: `# q, S
  1559. STA PPU_Addr,X: y( F; s+ j% L
  1560. INX
      R4 H* o) e. ^3 p& V
  1561. PLA+ V3 P0 d' A8 _
  1562. JSR Show_Get_Track_Name_Center_Pos5 J" |8 O2 K6 b( `
  1563. STX PPU_Cur
    3 Z* W. q8 e+ U$ I6 O. G( F
  1564. Clear_Track_Info_End
    3 i( r) M# O& ^  [0 o
  1565. RTS' z2 F( r, I- o! h* _5 G) |# F
  1566. Clear_Track_Info_End_Ex$ s3 {2 g: d$ H: h" v+ L+ T: |
  1567. PLA3 @3 I9 z/ j0 J
  1568. RTS
    ! E" y1 [1 `! j. d
  1569. + i0 l8 [9 U7 Z
  1570. Write_Track_Info( J# T) U+ l: a* v. o
  1571. PHA4 Y6 Z) o' n: D$ C7 w7 W9 u( q
  1572. LDX <Music_Item_Cur" _; ^* _3 V# q3 ]& n- q
  1573. LDA Track_Name_Addr_Flag,X' O5 O- W& q; F0 G
  1574. BEQ Write_Track_Info_End_Ex
    ! K# [9 z3 y  Z" T( }8 ?, M* A
  1575. PLA
    " s& b; i% x9 |, ~2 T  |+ H& ^

  1576. - p/ M) Q% m3 S8 j! v/ H
  1577. PHA- T5 g: V6 i) o1 k9 [3 N: ?0 V
  1578. LDX PPU_Cur
    " j8 Y& |/ w/ F- N) N1 D: s+ b& @
  1579. LDA #PPU_MODE_CNT_LINE
    ; G0 g6 Q# N( L  r0 A  a
  1580. STA PPU_Addr,X
    - E2 b6 _5 g( N) \1 p) s
  1581. INX
    9 H3 x. o+ g0 f$ s
  1582. PLA! _8 j6 J( Y+ K
  1583. JSR Show_Get_Track_Name_Center_Pos  r, e0 v: _9 f4 ?
  1584. Write_Track_Info_Data3 v) k% f  j  P
  1585. INY( \3 j$ d  H/ B0 H; k3 ^+ q0 I( j
  1586. LDA [Data_L],Y
    1 M/ ^9 f6 d0 ?7 r- k
  1587. STA PPU_Addr,X
    0 }1 o; D  J" }: _  b6 N# m
  1588. INX7 X& a6 K; N! v( o* t
  1589. DEC <Data_Cnt/ `. d. o( `, x4 t6 O3 `; _8 I1 I
  1590. BNE Write_Track_Info_Data
    3 g% J" j' Y. U
  1591. STX PPU_Cur
    & W' m3 U" s9 i) p
  1592. Write_Track_Info_End
    * O. J" z( O* r5 |
  1593. RTS" |  L5 y+ P2 r/ c+ @$ l8 D
  1594. Write_Track_Info_End_Ex
    $ p6 ]7 J$ g( C' z
  1595. PLA
    / |* i$ X5 t" Z) I+ }- e
  1596. RTS) q, v( ^/ {$ x+ z* q- Z# r

  1597. : S! {' w# ^$ _7 f) m3 I( o) H
  1598. Show_Track_Info
    * B# y9 v- c; i3 M; @
  1599. Show_Track_Info_Clear
    * D! Y! w) s" w3 B: `: }
  1600. LDA <Music_Last* k! ?. F7 B7 ]# ~. e: N* O

  1601. : _+ a' z; O& ?
  1602. JSR Clear_Track_Info- Q3 W1 \- N9 S" ~2 Q
  1603. & e. g& D$ w* Z$ m% t
  1604. LDX <Music_Item_Cur
    : ~, w* g$ A4 [& H  I2 }$ l
  1605. LDA <Music_Cur,X. S6 m' E; q# l( `" F
  1606. JSR Write_Track_Info
    - [) n5 \& K; |# v( B) _1 u
  1607. RTS6 g* r4 R; g4 R0 @  N
  1608. 3 W5 Z, e! |7 G' d' Q
  1609. ;==============================
    + c% C- P$ p6 Z2 b
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置3 c5 {; J7 M, N' ]6 r
  1611. 6 j" `2 j/ z2 M* q# J
  1612. ;取出集合名索引5 R, u2 {+ {) l0 g1 C
  1613. PHA
    0 I$ b8 c2 Q& O* h; H- t& }  `
  1614. 0 i" ]/ c' C( f& ?+ p
  1615. LDA <Music_Item_Cur
    6 D6 q' a2 A3 ?
  1616. ASL A
    ; Y4 \( d( Z% y. c+ P: E
  1617. TAY
    & `' S; N% ]  ^  }* d
  1618. LDA Track_Name_Addr_Port,Y# l( P# B+ I5 W+ T
  1619. PHA
    5 s6 H! u* z2 M" X4 P$ c7 [% x
  1620. INY) k7 W3 x6 D7 I$ Y( `
  1621. LDA Track_Name_Addr_Port,Y' L( j& P; @, q7 z( d/ G
  1622. STA <Data_H
    / z# ?% U8 A. U& B% c* h
  1623. PLA6 ?+ e  l/ t  @1 r7 {5 h. E0 e1 V1 p
  1624. STA <Data_L" q# h6 P% {. c6 ]

  1625. 6 e, \9 I6 Q4 j; T5 E
  1626. PLA) O5 o. ^8 I0 s9 ]( w
  1627. * s! g4 ~5 w# w! d( J; q
  1628. ASL A
    ! i( W9 Q$ J1 J. U7 K6 v
  1629. TAY
    - M/ A7 ?- x/ f+ r3 H! ?
  1630. LDA [Data_L],Y
    . [4 ^6 u' G7 Y+ r2 D5 m& l
  1631. PHA
    & v# e1 d/ \2 ^8 G
  1632. INY
    * z) G: ?4 D4 p) o$ @; R' _# @
  1633. LDA [Data_L],Y
    4 w  v' y6 q" {& _  V
  1634. STA Data_H" w! _* d5 @& Z! o7 i/ s
  1635. PLA; Z2 J  C; e( [0 t
  1636. STA Data_L/ X# J  O3 D% s! d7 {
  1637. ( w' u0 S' u# |+ u7 r/ K# c
  1638. LDY #$00
    ( h4 x- }1 A, a8 j2 G* A' m' d
  1639. LDA [Data_L],Y7 a' ?' ]  @4 V: z  Q+ I  h5 R. g
  1640. STA <Data_Cnt
    6 h$ Z  t* i" P+ b+ i- P# a6 c8 S4 f3 r* e
  1641. LDA #$208 }3 n+ N) e4 n  U# t
  1642. SEC
    . l2 l' L1 k4 V6 P( Y) v5 R
  1643. SBC <Data_Cnt
    8 c+ l0 K" o4 }2 E2 _
  1644. LSR A5 B- W5 M6 C7 A+ d$ B3 J* z
  1645. STA <Data_Buf  v5 x* b2 c/ u. N3 W* J9 j
  1646. LDA #HIGH(Track_Name_Pos)4 z% ?# b' h; A3 Z( X* v9 y) `! [
  1647. STA PPU_Addr,X
    / U# _! |1 \) R9 e" u# U1 j( ~
  1648. INX# ^, h5 y7 L- k& i
  1649. LDA #LOW(Track_Name_Pos)
    1 U! X! c4 m) I0 @, C- `! o
  1650. AND #$E0
    ; t' z( h5 b. G
  1651. CLC( I( _9 q2 r* `% o; L+ \
  1652. ADC <Data_Buf+ {5 n/ y  ~& u6 r7 J8 B
  1653. STA PPU_Addr,X
    7 Z! Q6 r% d4 w% B
  1654. INX) W! q" a# f9 d( P3 B' r, I
  1655. LDA <Data_Cnt
    4 O) j& G- {% k# j0 y# w
  1656. STA PPU_Addr,X
    1 k& r$ B$ }  r" a8 ~
  1657. INX7 j+ L! a# k) q  {4 L0 R
  1658. Show_Get_Pos_Center_End2 e% ^% Z7 ?# T( g" M; u" f
  1659. RTS
    6 S! R& S. @3 e- k9 Z/ U! f
  1660. .ENDIF3 H3 S( x. L# z1 e+ x9 \! W
  1661. $ j& X% }$ A+ {1 ]2 y6 A. O. m
  1662. ;==============================
    & b$ p7 D3 i; X/ Y6 \) t
  1663. ;音乐端口清除) w+ g! ^. j6 S7 x" A, G3 |. F
  1664. Sound_Data_Clear
    % E9 f0 s3 E( T' o, C! t
  1665. JSR Sound_Port_Clear
    * _; q: \3 ~4 N: H
  1666. JSR Sound_Ram_Clear
    , w6 r8 R7 D9 d. \( O
  1667. RTS9 H) m; J6 [  X4 u: L4 l) e+ K. K6 S' J2 }

  1668. % J0 w# o3 U8 T2 S6 Z9 V! P2 W
  1669. ;==============================, Z6 f' Y2 L7 Z/ l3 `
  1670. ;音乐端口清除
    $ l8 u% U; W" i" i# Z* H3 Z# _
  1671. Sound_Port_Clear
    7 s  k- S7 i5 E7 }: K, N
  1672. LDA #$00
    1 S& O/ n: k6 F' j, V. e
  1673. STA APU_STATUS: l2 r" |  @: D. m* |9 }) q
  1674. LDX #$00
    - m: @; G8 B8 K2 `' I+ E3 I$ I
  1675. Sound_Port_Clear_Write+ E4 N/ l# N4 J6 r6 D
  1676. STA $4000,X8 s$ ]9 G* ]1 D/ l
  1677. INX; l2 X. F; Q/ k  i% S/ A
  1678. CPX #$14
    ; @; q" [. a  }7 q6 u% j7 Z2 E
  1679. BCC Sound_Port_Clear_Write
    1 ^  _" e8 l) v9 t- O
  1680. RTS) t+ h# {: w( H# X2 j

  1681. , L- @& X: F( d
  1682. ;==============================
    ) b9 m: U% i! A/ c- t# |, z
  1683. Sound_Ram_Clear;RAM清除
    $ g3 [! h5 I( Z% |; q0 F0 `
  1684. LDX #$00
    ; Z% {3 ^- d( M* |" A0 x4 \  w
  1685. LDA #$00
    / z' p. b+ }% q
  1686. Sound_Ram_Clear_1
    6 R3 o$ N* v" Y# \9 Z
  1687. STA Sound_Ram_Addr_1,X
    0 X9 D3 X6 I* @$ v- E7 g) z
  1688. INX! G% q+ O# [) q$ H
  1689. CPX #Sound_Ram_Addr_1_Size# |* M2 |, l! {% R+ ?2 c
  1690. BNE Sound_Ram_Clear_1
      P( d6 N: h$ S2 R
  1691. LDX #$00
    - L: D+ t0 y' Y9 v% ^. G
  1692. Sound_Ram_Clear_29 U  K* _' w  O4 \* @
  1693. STA Sound_Ram_Addr_2,X
    ; U1 o0 q- z7 M
  1694. INX
    9 g8 S8 U# u6 }8 @+ V2 m' P9 ?
  1695. CPX #Sound_Ram_Addr_2_Size
    % O+ ~$ @" e* f0 Q% F: d8 ?/ h# k
  1696. BNE Sound_Ram_Clear_2+ A, a: d' c% m
  1697. LDX #$00  @# b5 R9 ~: Z4 r9 \
  1698. Sound_Ram_Clear_3; C0 g1 S' J1 @: _. K: _6 L
  1699. STA Sound_Ram_Addr_3,X4 e% p3 B7 R  T6 V3 `" A
  1700. INX, [$ ]$ n. |; k9 q$ }- Q  Z
  1701. CPX #Sound_Ram_Addr_3_Size" g- _, L/ F$ c% h! g5 n. ?
  1702. BNE Sound_Ram_Clear_3
    4 C: n' k' j$ m) P/ Z; ]
  1703. LDX #$00
    8 k0 w. K: q, g; t  r
  1704. Sound_Ram_Clear_42 t% y8 k) ~4 u: }
  1705. STA Sound_Ram_Addr_4,X
    ' T( A3 c8 a1 _) [5 ]
  1706. INX/ U0 ]( S- \7 R& j! U2 Z, ~
  1707. CPX #Sound_Ram_Addr_4_Size$ q/ B2 k, W* j  L
  1708. BNE Sound_Ram_Clear_4
    + e9 y! R( q. Q  u6 q1 Y2 R
  1709. Sound_Ram_Clear_5  z3 ]! z0 T, ]+ q8 j
  1710. STA Sound_Ram_Addr_5,X
    3 S6 p+ b7 F9 ~0 ]# k6 A+ @
  1711. INX, e; Y+ K7 Q3 [
  1712. CPX #Sound_Ram_Addr_5_Size
    6 q1 _0 X- j' \. x
  1713. BNE Sound_Ram_Clear_5: _  N8 E4 E3 _& w
  1714. RTS1 ^) j$ q0 e* `

  1715. 7 z, ^, `) ]3 R. ~, |* \& M
  1716. Get_Music_Collection_Name
    + \# b9 b/ s5 ^
  1717. PHA% h5 ?7 [7 r, T
  1718. LDA <Music_Item_Cur
    5 w5 V9 |+ \2 r! _/ d
  1719. ASL A
    ( v9 G& b6 q% u8 J( M( R  q$ q
  1720. TAY- P% ]$ S! {3 n% G; V# _
  1721. LDA Music_Collection_Name,Y% V/ d- ], I! N7 d) M/ c# I: e# i4 J
  1722. STA <Data_L$ Y; }2 Z* _" C: W
  1723. INY0 m$ b# [- C% T% x! v9 ~
  1724. LDA Music_Collection_Name,Y
    8 B: q: i4 ~+ O3 }$ E' M
  1725. STA <Data_H  F2 b. w5 a( U
  1726. PLA0 N; J% m& N$ |* M3 A( D( E
  1727. RTS
    ( m% B1 `- ^5 U: P0 s  m( J! E; D7 x$ j

  1728. * U, d! O1 r0 j2 W% {. W7 \/ t
  1729. Set_Sound_Total& v4 b: W5 l* r! k9 R
  1730. LDY <Music_Item_Cur
    5 W, i4 W* F: \0 q: j; Z  j* ]; _
  1731. LDA Sound_Total_Port,Y' a( x6 F' T% l# j% C5 [8 n- Z. |3 k0 j
  1732. SEC" _) e% Q/ C, v& w) H( a
  1733. SBC #$01
    $ M; \3 y3 w* d& l8 Q
  1734. STA <Music_Total2 t5 U- \, P0 y" ~8 P0 `/ r. i
  1735. RTS
    % T& c1 p' Y2 v! l& @2 k+ V+ m

  1736. 0 n; ~( t4 i4 ~- s, W2 u4 T
  1737. Get_Sound_Start
    , a' A! {; }* C$ n; z- B0 D" y
  1738. LDY <Music_Item_Cur
    & j1 `2 u, T0 B  B# H' m
  1739. LDA Sound_Start_Port,Y
    . O+ z  H9 ?, k" ^0 x, k
  1740. RTS
    0 N: w% l: F* V& [
  1741. 5 k0 O8 f' O8 }6 S" W
  1742. Set_Sound_Init_Port
    ' N: U. q" E8 p& k% A% W; z
  1743. PHA; N+ q, t0 y2 g1 G- j) q
  1744. LDA #$202 a6 y; W) v+ V7 T9 ^
  1745. STA <JSR_Addr_Op
    1 N: y6 m; y% n, {. D! z; F
  1746. LDA <Music_Item_Cur' p1 G5 A% A% M# C
  1747. ASL A% G8 W& x3 ?  R! B/ \/ @+ t
  1748. TAY+ ^7 L7 t! u, S, P8 Q
  1749. LDA Sound_Init_Port,Y
    0 |5 C, U# I4 k% [  d$ S- L
  1750. STA <JSR_Addr_L
    / q/ L8 w' m! P  t! x
  1751. INY
    ! Z# j0 d! B. P1 x+ T1 t+ D
  1752. LDA Sound_Init_Port,Y9 c. M' L( J: {, X; j
  1753. STA <JSR_Addr_H
    7 n( G: v& I6 K7 H; @
  1754. LDA #$60
    9 ^4 p& e: n6 y: l5 q0 x- _! K
  1755. STA <JSR_Addr_Rts
    ! @; b9 i* X' j" q( \& }  O; d
  1756. PLA
    & q5 C7 E: a2 f8 v% @/ Z0 ^
  1757. RTS5 C) d9 l1 m$ ?8 n; f* `8 G
  1758. 8 L) f& A2 _( P3 }' m$ B
  1759. Set_Sound_Play_Port
    " n6 I, n# K1 M  A
  1760. PHA4 i, \% G! D: G9 \. F$ M. [5 {
  1761. LDA #$20
    ( q4 c/ y8 a( Q3 B/ v
  1762. STA <JSR_Addr_Op
    2 N  l: ?4 r6 J. N/ l' }: m
  1763. LDA <Music_Item_Cur
    - K2 O  v" K( p# F5 ^
  1764. ASL A
    7 i9 g1 A! }3 e2 m" ?  j+ w2 p
  1765. TAY
      l9 b: ~# S# P( G
  1766. LDA Sound_Play_Port,Y  T$ y+ }6 R; g1 P9 p
  1767. STA <JSR_Addr_L
      j! x6 p* j8 B
  1768. INY
    % R" `) b) r$ p) U6 b. e. e
  1769. LDA Sound_Play_Port,Y
    . p5 t/ h$ J& a/ f! e3 d
  1770. STA <JSR_Addr_H
    + X5 M# N6 P8 A7 x8 Z9 M, l
  1771. LDA #$60% ]* ^' _5 O; B6 A7 A  G
  1772. STA <JSR_Addr_Rts
    % i  e# K3 a( t* b- b7 E
  1773. PLA
    9 @. j7 g: D! G% q/ f0 K
  1774. RTS4 s! h+ R4 v3 g/ y. C
  1775. 8 q# I& I" w( B+ O9 m) V3 j5 q
  1776. Set_Sound_Reset_Port
    ( b% I/ o" T  b# o5 Y3 f/ j7 r
  1777. PHA, ~! L; a% a! w8 w
  1778. LDA #$20& U0 j$ k/ j5 @, l! A3 a: [
  1779. STA <JSR_Addr_Op
    3 H$ K  `" J: J
  1780. LDA <Music_Item_Cur
    & g+ ^+ m4 C8 w: }& f# a% v7 q
  1781. ASL A
    9 K5 O& R8 f) Y$ {) i$ ?
  1782. TAY6 \; s4 w' P1 H: U
  1783. LDA Sound_Reset_Port,Y3 d! l! q' e! g( ]+ A. V0 B
  1784. STA <JSR_Addr_L
    5 m( I2 J& H* \
  1785. INY: o. Z/ B" M  W4 V) W  ~9 m0 R( `6 o
  1786. LDA Sound_Reset_Port,Y
    ) Y# [% h1 K& g; v/ G2 D" X( ^; _
  1787. STA <JSR_Addr_H
    ( E3 ^4 h" W* k3 j. V1 i
  1788. LDA #$60
    - M1 @  w5 ^' R$ t1 c
  1789. STA <JSR_Addr_Rts
    + k: d. ~+ L1 A; K$ n
  1790. PLA
    9 W3 M4 t4 ~  n/ j
  1791. RTS6 [% X* e6 [" X# q3 c% h

  1792. ( l0 ]1 Y9 e; [: E' Y" U; X& A4 D
  1793. ;初始化音乐bank: F- K# F( e* J/ s* p- G" P5 Z9 c
  1794. Init_Sound_Bank
    ! X1 B/ b; Q' v+ X
  1795. LDY <Music_Item_Cur
    * ]+ x2 P& B+ A+ d' ?' M) `: W4 c
  1796. LDA Sound_Bank_8000,Y
    3 d4 k5 T! |& \) u$ j/ w8 b
  1797. STA <Music_Bank_8000
    3 J  K8 c; r  {2 _& q
  1798. LDY <Music_Item_Cur
    ' j- d: @" p% `( s" D; f
  1799. LDA Sound_Bank_A000,Y! x( f# e# P% u% U0 K
  1800. STA <Music_Bank_A0004 ?- S2 G! m, m! p
  1801. RTS
    ) g# w6 i% q9 D0 M& J: ]0 [) d3 R( w

  1802. , [5 r; [* Q1 l# q- N* u1 f
  1803. ;==================================================
    2 z& f+ c0 p1 z9 N/ [# a
  1804. Sound_State_Reset;音乐状态重置4 q" ?1 z( r5 p+ [$ e9 M
  1805. JSR Music_Bar_ReSet        ;重置音乐条4 W+ j- i8 E; g1 l& j
  1806. JSR Time_ReSet             ;重置播放时间, P) H/ J5 @% o( `3 F
  1807. 0 R7 o, e' e- ~. N  L
  1808. LDA #$009 K4 r, A& t: w# H
  1809. STA <Music_Stop_State
    ' g9 I0 _: o% p
  1810. JSR Music_State_Show       ;显示播放状态
    3 h, `, I- G& v/ m( r
  1811. & S$ m: _6 ~9 g! j7 [
  1812. .IF Track_Name_Pos
    4 W1 O7 ?+ y5 X% C
  1813. JSR Show_Track_Info        ;音乐曲目名显示
    ; l# c' S7 g6 ~" n* q- w
  1814. .ENDIF, r9 \1 T6 }" t1 c4 I+ n8 Q

  1815. / f4 v( }7 h5 N# i4 P! t
  1816. RTS# s2 o9 S6 B2 R; G3 G9 `
  1817. 2 ]) ]) ?- g5 ^5 X. g3 d
  1818. ;==================================================
    : |6 R( b. ^1 D3 d/ X+ U0 O
  1819. Sound_Init_Proc;音乐初始化处理
    0 [8 g, \9 s: }4 |
  1820. PHA
    3 s1 J( S# v! J% T, a
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址4 f2 `5 ]+ \* [1 y: s
  1822. LDA #$00+ q4 c! b  F6 l+ Q) J! `
  1823. STA <Scroll_H               ;重设水平滚动
    % ~! s# H3 Y" k" l
  1824. LDA #$0F
    7 e9 v, |: a7 Y) a3 ^; Z2 J/ T5 n, q  Q
  1825. STA APU_STATUS
    7 j& L3 m( ^) R$ d% \' c3 M
  1826. PLA
    - y0 H0 Z$ U6 T- {' v
  1827. JSR Sound_Init             ;音乐初始化7 \0 D$ i7 U; r) d2 t
  1828. JSR Sound_State_Reset      ;重置音乐播放状态; N. ^. e( e/ Y' Z5 i, u8 m! [2 i
  1829. RTS. _% N2 ]$ t: [& ?' i0 E
  1830. ' u) T6 u. z1 m/ |3 X  P
  1831. ;==================================================
    6 M; z9 C; |# f9 e
  1832. Sound_Play_Proc;音乐播放处理
    6 j1 w5 v/ ?# }; y7 W8 Z) D
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址9 w2 d3 t" X3 P' \' Z+ b' P$ q
  1834. JSR Sound_Play             ;音乐播放- j5 Z* j) s# D% y9 W2 ~/ H
  1835. RTS
    * o7 c3 S/ E) u
  1836. 7 d2 ~" D* [  K' E" {
  1837. ;==================================================
    . K7 S% b6 |+ O1 ~! R; k
  1838. Sound_Reset_Proc;音乐重置处理
    4 A6 F( Q5 k2 `2 M* \# Q: F" Z
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址/ i  T7 j" [) B+ A. ], I2 S
  1840. LDA <JSR_Addr_L
      a" x; G( i8 l
  1841. ORA <JSR_Addr_H
    6 \6 C  K1 P6 ~' I
  1842. BEQ Sound_Reset_Proc_Default
    $ _2 b* U* n5 m* d' L. X. N
  1843. JSR Sound_Reset            ;执行音乐重置. J! R1 Q  \7 ]7 F5 [
  1844. JMP Sound_Reset_Proc_Init_Sound+ g' w" @& v' Q  Y
  1845. & S+ T5 H, t3 C- X6 s! d% _1 s- V7 d' p
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理# x8 J( K* f1 N2 O: B" \
  1847. ; Z) L5 ^3 w8 r& j$ p
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
    ' E# N$ R1 D! T# n6 r
  1849. LDA #$00
    ( p9 J  o3 w% F, r; Q
  1850. STA PPU_CTRL( {3 U0 _* |; Q& n( x

  1851. + \3 s1 b8 D4 s2 Q- _( n+ p- s: k
  1852. JSR Sound_Data_Clear1 k; n. I+ E* x/ D
  1853. : M- Q: C5 k4 e! Z( L4 c/ I
  1854. Sound_Reset_Proc_Default_Wait
    $ t  I; R- P( c' F3 T! J& e: n) K
  1855. LDA PPU_STATUS
    % N/ M! u7 _" c
  1856. BPL Sound_Reset_Proc_Default_Wait0 V7 k. H1 @" x
  1857. ) O" Z7 U# M7 E2 t. q; o. N
  1858. LDA #$00% t0 W5 g+ n7 x& U5 ^
  1859. STA PPU_ADDRESS
    4 v  c+ I4 |# }6 L
  1860. STA PPU_ADDRESS
    5 I. g# U% b* x
  1861. STA PPU_SCROLL
    - D/ V/ E4 r, y" K
  1862. STA PPU_SCROLL
    ( c& q9 W3 N7 |4 w: q7 B& W" D
  1863. 5 o. s" Y) ^# p( @( C1 u/ A" f
  1864. ;恢复PPU控制# j, j9 C7 K5 @- f
  1865. LDA Screen_Ctrl2 T: R, U: u8 z
  1866. STA PPU_CTRL$ x  d. k* N' |/ y3 [* G0 k

  1867. & `' s# o% F6 E) C3 `
  1868. Sound_Reset_Proc_Init_Sound( l& _( q4 P7 \* S6 P  w
  1869. LDA <Music_Stop_State
    / t3 n: I6 L8 q7 d- v4 t: y
  1870. BNE Sound_Reset_Proc_End$ `/ N# n9 Y9 g/ f
  1871. LDX <Music_Item_Cur. O  x6 ]! d* g" F  U- b
  1872. LDA <Music_Cur,X
    * a7 O" @6 U) s6 K8 r- z
  1873. JSR Sound_Init_Proc
    " m2 [2 W2 z0 [
  1874. Sound_Reset_Proc_End' q+ ]# t8 V3 ]% ?
  1875. RTS  h9 L* J; L+ X% o, B+ Q4 D( r
  1876. ( q# C& u6 [' ?2 j: f+ y/ T8 I
  1877. ;==================================================  I( Z& j/ I2 W9 d* b
  1878. Clear_Item_Text;清除页项目; X8 R- C# H0 y( {5 v) g; k! u
  1879. LDX PPU_Cur5 |. v9 Q" _" S5 k; E  I; l
  1880. LDA #PPU_MODE_CNT_CLEAR
    ! U6 Z" v- ]1 Y) W
  1881. STA PPU_Addr,X
    # _: k, L7 u$ w+ n6 j! c
  1882. INX% Z0 u7 L: O$ q' u# _1 |# z
  1883. + i$ P" p2 d2 b6 X# z
  1884. LDA <Page_Last
    % ?0 I7 y1 w2 b. |1 y
  1885. SEC( w& y2 g% |$ F" E
  1886. SBC <Page_Last_Index
    3 O& h3 @+ L" @7 p- a6 `6 V- L
  1887. ASL A+ D! @* q& g# M  Y" M, b) m+ A7 O+ T

  1888. # ~) A# S7 v% `) J
  1889. TAY* @# ?% W' M( q! k  ^, [
  1890. LDA Item_Pos_Data,Y
    % ]$ y: `# }, o0 \/ O" Q4 n
  1891. PHA
    4 q3 A- e2 i) Y2 H
  1892. INY8 l" x" S) T) g
  1893. LDA Item_Pos_Data,Y
    & J2 C% t: g( ?4 r2 X, T' y
  1894. STA PPU_Addr,X5 D3 S) M- l3 F, n9 b1 {- s
  1895. INX
    7 J& q$ j4 E9 G5 p  ~9 L( `; n+ R
  1896. PLA+ n. N$ N6 y7 @7 H
  1897. STA PPU_Addr,X
    & p1 Q  u! Y. i
  1898. INX
    6 k8 I+ R; j4 p
  1899. 7 U3 `+ K  U( c7 P& }9 n) h
  1900. LDA <Page_Last8 g; P. w! d! O- F# G0 s
  1901. ASL A
    7 F6 q4 k3 b+ ^6 b! p" `
  1902. TAY  @* B4 G$ D3 ~, E& M! ^* ]$ }
  1903. LDA Music_Collection_Name,Y3 ^+ @3 M! A1 O
  1904. STA <Data_L2 Q6 H4 d7 H  @+ t& t0 @, k
  1905. INY7 E& Z4 b6 q; M9 q# v5 M! h
  1906. LDA Music_Collection_Name,Y3 D4 |1 H: J+ `( S. Q9 ^3 {3 ]; z; \
  1907. STA <Data_H6 f" L% }$ x4 t& _4 C6 c
  1908. 2 n6 B+ I4 L. G0 |% a6 T) s2 x
  1909. LDY #$00
    , D8 G) Z" h' [$ C' a4 F
  1910. LDA [Data_L],Y
    . L4 N0 s- V# ?# V/ i" {2 Y
  1911. STA PPU_Addr,X
    3 i3 L# K# s. k% w
  1912. INX" f7 ~) u2 K( F& w& Z. u
  1913. Clear_Item_Text_End
    - R8 l9 Y% l/ r0 J
  1914. STX PPU_Cur
    6 |. B7 a" G* ~$ N/ \) [( E
  1915. RTS/ m# d0 j3 D1 i! J+ @
  1916. 5 N/ X! ^  D1 J& ^& o" o! D
  1917. ;==================================================& }0 S; P( }$ i: {( O& u7 U
  1918. Show_Item_Text;显示页项目' i; S5 s5 _, w5 n7 G9 ]/ H+ ~
  1919. LDX PPU_Cur
    ! ?9 R. ?# E4 K. o1 ^
  1920. LDA #PPU_MODE_CNT_LINE
    ' [+ }( D4 O% L4 z9 d/ e8 S$ k9 [
  1921. STA PPU_Addr,X
    ' X' g& N. ~- D' x1 P; q
  1922. INX5 j, N2 Q8 N& I
  1923. LDA Page_Cur
    , Z* b. ~) I; W- z5 s' D3 ^
  1924. SEC! u! V8 K% k* q6 j0 S0 ~
  1925. SBC <Page_Cur_Index- w9 \6 c4 {5 P
  1926. ASL A
    6 H5 y& m& K" k9 h* w
  1927. TAY3 T+ o! n' x- ^3 L' H/ ]4 \
  1928. LDA Item_Pos_Data,Y# c/ Z: ?  _& S) R" f9 \% r
  1929. PHA  i! b4 f4 C/ Z  [7 B) @& q
  1930. INY
    1 @* \" w, D; ~6 ]6 A
  1931. LDA Item_Pos_Data,Y
    , L" {* Q' f" b6 M1 B
  1932. STA PPU_Addr,X
    + s6 W: j/ K9 Y( I) Z( g; B1 U+ Z
  1933. INX
    ) _' S+ J# S5 x  w
  1934. PLA
    & [" y- j  N3 H  K/ i) v5 T5 x
  1935. STA PPU_Addr,X5 [3 g% U3 {% n7 Y
  1936. INX
    3 e# t* d* R$ x1 G  F  E

  1937. - r8 V4 Z; i+ s) a0 A' D9 J3 C2 f
  1938. LDA Page_Cur8 e0 Z( {6 {# Q! c8 n- ~$ n3 ~
  1939. ASL A
      x" ]5 A& h' [( {
  1940. TAY% z- e8 W6 e1 p7 o4 ^1 S& ^
  1941. LDA Music_Collection_Name,Y8 F9 C7 g4 |* S2 y9 x) o$ g
  1942. STA <Data_L* i0 z4 Z1 J4 [/ u' T% d
  1943. INY
    2 ?+ f' X( ]5 g. r6 `( W
  1944. LDA Music_Collection_Name,Y
    8 K& d& |2 c0 T' S: k: v% K; b
  1945. STA <Data_H
    ( ?) Z  G3 w6 N3 M3 M
  1946. 5 m2 T! G* w  C
  1947. LDY #$00
    7 a5 o( m4 N5 Q- r' H
  1948. LDA [Data_L],Y4 f4 ~( c. R3 y; J/ J/ ^
  1949. STA PPU_Addr,X
    1 e% D- I% Y3 ]9 L7 i3 U+ G$ S
  1950. STA Data_Cnt
    , f  I' v4 y) ~
  1951. INX4 D+ y4 g* T) }( t) k( H

  1952. 4 i- G1 x( Y, A- G# `, ^
  1953. INY% h5 t% E! M9 Q: R, I% _2 N; K6 ]
  1954. Show_Item_Text_Write
    5 _' _+ B" l% E0 |2 j  L& B: z
  1955. LDA [Data_L],Y( m" g- S% q3 i
  1956. STA PPU_Addr,X
    4 v6 e- O% `4 f, Q7 f
  1957. INY- K( ~: h2 G" J6 p8 P
  1958. INX
    8 N- d% j9 S/ w
  1959. DEC Data_Cnt
    . h: H9 c; w- |) O
  1960. BNE Show_Item_Text_Write
    / d9 B+ ]! P) j6 P

  1961. & Y! \: X7 |  g
  1962. Show_Item_Text_End
    7 |% I# l5 V8 W+ {# Z
  1963. STX PPU_Cur
    2 ~: p9 Q; z  ^6 @" p( O
  1964. RTS
    . L" l$ o1 g; U0 H7 r
  1965. * E' s9 r! V5 Y" n3 Y3 D, y9 J+ }
  1966. ;==================================================
    $ H- |$ j) ?( ?- g" y
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量# C+ O* N! M6 r. ]  `) q2 ~
  1968. STA <Data_Buf9 r/ _5 @' Q) ^& U% W& \( a* U
  1969. LDA #$00
    ; b  O/ \8 w+ {0 y
  1970. Get_Page_Index_Calc
    0 R) @% n2 J) V7 x5 S, Y% a1 B6 G
  1971. CLC
    & v/ Z: l! ^  h) u% O1 l* D4 H, C
  1972. ADC #PAGE_SIZE. c( Z  s7 T, g, l3 n( d/ a1 Z
  1973. CMP <Data_Buf  p2 \& f# Y0 R1 Z: \* ~4 U( n
  1974. BCC Get_Page_Index_Calc. a; h, @- A! ]- Y  I/ y4 W2 ]
  1975. BEQ Get_Page_Index_Calc_End6 j) a- f7 Q4 c: K: _( e, V8 H
  1976. SEC
    3 p  R! S$ ^5 p! h; `" g$ O
  1977. SBC #PAGE_SIZE
    + U7 |8 s3 O; |6 C$ A" C% z
  1978. Get_Page_Index_Calc_End$ B1 H, B, i# {! {; ?! s( t
  1979. STA <Data_Buf
    8 m6 T6 w) H6 E; y* F7 }( t
  1980. Get_Page_Index_Cnt: q5 A) D$ H- Y- z+ J! t# r
  1981. LDA #PAGE_SIZE2 j$ ]5 c/ y7 O, ]0 B9 _& q9 u
  1982. STA Data_Cnt' g' K( a) G; l

  1983. % Y; @1 j* Z6 t6 H" p8 c
  1984. LDA <Data_Buf0 K& |  N8 T# }2 E' g) i
  1985. CLC# J7 t& Z2 D: U; f2 Q3 u$ J# B
  1986. ADC #PAGE_SIZE
    9 S, _9 e  D; s
  1987. CMP #ITEM_MAX_SIZE; s  z( C5 t7 R0 G, j: w6 q+ M
  1988. BCC Get_Page_Index_Cnt_End
    4 ]6 u' g* u5 X2 z" s; [1 s
  1989. - B/ V* _+ O/ A6 Q
  1990. LDA #ITEM_MAX_SIZE$ H# F8 Z) p: ~, U
  1991. SEC/ Q' n( {6 C* u, w4 g: [
  1992. SBC <Data_Buf
    $ B4 T' Q4 U( V: |: O9 n
  1993. STA <Data_Cnt
    ; H5 z2 Y7 {3 z" ~5 o2 z. ~! ~9 m

  1994. 0 ?7 j1 }0 ~3 S3 r- Z- t
  1995. Get_Page_Index_Cnt_End6 @  r% Z* q  {! O
  1996. RTS5 `" r2 @* v0 g- D0 Z8 I
  1997. # o4 ~1 v& t$ \
  1998. ;==================================================% B% B5 R+ r" m! @9 }3 w  P
  1999. Get_Last_Page_Start_Index: ^7 f. m7 k8 B8 V# e
  2000. LDA <Music_Item_Last  {- j) _, ~+ S
  2001. JSR Get_Page_Start_Index+ a3 x0 X3 u0 U' R: P
  2002. LDA Data_Buf
    9 V* R; l. H+ E- O
  2003. STA Page_Last
    2 f3 E* h8 n* ~  x% t
  2004. STA Page_Last_Index) h0 n( Q2 s! n; `: |, _6 Z
  2005. LDA Data_Cnt
    - ^9 N3 J" N/ I9 R7 @, {' N
  2006. STA Page_Last_Cnt
    # f  O" Z1 v# Z/ n! [7 U* w
  2007. RTS; V; I1 N3 M1 k, @. c% G! h' _, B
  2008. 1 }% j6 C. ]* J4 X
  2009. ;==================================================
    9 b8 {* B% g5 v: H% P
  2010. Get_Cur_Page_Start_Index
    " K8 J+ N3 L7 [+ w3 @8 {
  2011. LDA <Music_Item_Cur
    1 u" R9 b$ X' d1 ~3 _
  2012. JSR Get_Page_Start_Index. J# B  n3 O6 H  E1 O1 R
  2013. LDA Data_Buf! V3 \% D8 y, {; h3 s
  2014. STA Page_Cur
    , y0 ~  h2 _4 b0 ]4 |5 E1 \$ h$ ]) h& q
  2015. STA Page_Cur_Index# F4 |+ x( v8 o0 v  v! u9 e( {
  2016. LDA Data_Cnt
    2 j/ S5 q7 `  ~, U  s6 h
  2017. STA Page_Cur_Cnt
    6 Y' G3 z3 i) j. ^5 l8 X
  2018. RTS
    0 M* N# q5 o5 d5 `5 N& i' |, l. c4 y
  2019. # G! L8 n, w7 c5 n  a9 Z: A. H
  2020. ;==================================================( c6 m  d  V9 L
  2021. Show_Page_Text;显示页文本
    ; K# {; d. D/ A4 \0 P1 @4 z& C6 c
  2022. LDA <Text_Disable_Flag
    : T; S, u. y% }* t3 X& e5 `
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM, j$ @4 E; |/ a) r6 E
  2024. STA <Text_Disable_Flag
    - ?4 h% H* U2 B! m* @5 v9 T
  2025. $ x6 m% y( S1 \5 B- z( p% V
  2026. JSR Get_Last_Page_Start_Index  q  L" ]* {' {# v* y
  2027. JSR Get_Cur_Page_Start_Index
    - W' E1 S# A1 G0 [7 |

  2028. 2 I7 `, S" P; H4 k  g
  2029. Show_Page_Text_Set2 L" ~: ?# p) Z6 D+ P& M7 Y3 E

  2030. & y6 \3 @/ Q3 E/ |$ E
  2031. Clear_Page_Last_Item;清理上一页
    " z/ u/ q8 f5 d7 ?8 ~  w
  2032. LDA Page_Last_Cnt
    4 }" S% O' Y- `' u1 b- h
  2033. BEQ Clear_Page_Last_Item_End* J' s, p4 }$ Z  ~  L4 J: a
  2034. JSR Clear_Item_Text4 |# y% r- h: i* ]
  2035. INC Page_Last
    0 C- x7 w. S; J
  2036. DEC Page_Last_Cnt% q& x0 z; a6 E+ p# E  P+ N
  2037. Clear_Page_Last_Item_End5 @' ~9 u" K7 I( O8 g- g# U+ a. q
  2038. 7 w+ H. ~8 P2 \5 D4 o. ~$ x
  2039. Show_Page_Cur_Item;显示当前页
    2 T( `! @. W5 P6 c
  2040. LDA Page_Cur_Cnt% ~+ |% `; J! X9 k( }( @3 h3 v
  2041. BEQ Show_Page_Cur_Item_End
    - Y9 ^7 s. Y. c
  2042. JSR Show_Item_Text: i* Y$ S* C/ `5 c3 k/ Z1 x
  2043. INC Page_Cur
      e  |0 }& F' u4 j4 M: {
  2044. DEC Page_Cur_Cnt4 H' e; @' ?! r, M% `
  2045. Show_Page_Cur_Item_End/ r6 K, P  T. `% E3 K8 z5 H

  2046. ' Y1 n7 L* n; L# r% e
  2047. INC <Time_Wait_Cnt
    7 g+ E# ]5 x. P% z+ f  f& Y" M, B
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作
    1 V! ?8 o' k# v  W1 v* _2 J
  2049. LDA <Time_Wait_Cnt
    % R3 V" ^: p9 m+ ?' j, r6 J
  2050. BNE Show_Page_Text_Set_Wait) Z+ o" ^7 e: W4 T) b8 }; D# G- L; e' j
  2051. ) a/ t4 L5 c. _7 Q" O
  2052. LDA Page_Last_Cnt
    ' u6 n3 v( A5 \4 _
  2053. ORA Page_Cur_Cnt' V3 b: ?1 W+ q( Y$ b4 B3 j
  2054. BNE Show_Page_Text_Set1 A, @8 J6 W' P, N! ^) {* j
  2055. LDA <Text_Disable_Flag
    $ e- ^( J0 i) G+ d+ U8 m( B
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    6 K; Q. B& J6 k+ j  A0 d( l0 E
  2057. STA <Text_Disable_Flag* |& b. A) O0 t  a% e) A) K
  2058. RTS# a0 @# @  T+ ^4 j! i) Q* F( _+ l

  2059. 5 c9 d# x) X9 H* Q5 i
  2060. ;==================================================, P  ^( }' i  q) G
  2061. Last_Item;上一项( L' a" [, T/ |! S
  2062. JSR Clear_Last_Track_Name* Q. h' M8 s0 F; m7 H7 L/ ?
  2063. JSR Disable_Text_Draw
    6 m- n$ d! ]$ m
  2064. * f* C$ A& v6 U, T1 N' m* ^
  2065. LDA <Music_Item_Cur
    " r' @, r8 p4 f/ q
  2066. STA <Music_Item_Last4 K, R  d, i  n" u0 h0 J- t4 v5 j
  2067. : {/ ^3 K( }3 f- G/ \
  2068. JSR Get_Last_Page_Start_Index
    ' b5 {0 N" [' R4 X4 ~
  2069. & o* R& U5 Z% {! }
  2070. LDA #$004 G# i2 g1 O' l% Z
  2071. STA Data_Buf
    6 m/ p1 f% \- [1 y. v
  2072. ! @! a" k& {$ }% o
  2073. LDA <Page_Last8 x+ n0 ^9 d5 l4 A  c
  2074. CMP <Music_Item_Cur" V$ q2 @  [- u( f' W" c
  2075. BNE Last_Item_Begin
    & d: b- ^$ \% `" K3 o* @+ I0 U

  2076. , `4 f! |# X' ^8 }6 t, h# x" t0 d
  2077. LDA #$01  M, L+ V' e/ m  @9 S5 r6 J
  2078. STA Data_Buf- f' O6 u: E6 h: a! y7 E
  2079. Last_Item_Begin+ J* K9 o  ]  {$ I
  2080. LDA <Music_Item_Cur0 w3 [" x! S2 N# |: ?9 _5 Z
  2081. BNE Last_Item_Set/ g4 {% V  F5 B% f3 R: l3 c
  2082. LDA #ITEM_MAX_INDEX + 14 r5 L- d- z: `4 q
  2083. STA <Music_Item_Cur
    . H8 v: N/ _7 K( Q
  2084. ( s  _( Z- C6 M. f$ [# [+ l" V
  2085. Last_Item_Set
    - l# P' p8 R1 t
  2086. DEC <Music_Item_Cur$ ^& ?' T9 g' v8 |. x
  2087. LDA <Music_Item_Cur
    ' L& y+ D  p' C+ J8 a
  2088. JSR Reset_Current_Music
    8 ~2 `9 E4 _# _

  2089. ( ~* d/ n; u5 O$ f" F+ k
  2090. Last_Item_Play, R+ n# |3 y( y: ^$ u
  2091. LDA Data_Buf
    $ o& l' C6 r/ {% ^, G3 }, n
  2092. BEQ Last_Item_End% T+ ~! S; ^' C" o$ A
  2093. JSR Show_Page_Text
    & ^5 F% ^! ~1 h  a
  2094. Last_Item_End2 U$ V- a7 S* ^  k
  2095. RTS
    " \# ]) v- J, m1 M
  2096. ! b$ H  h  B! U. B& D. Q
  2097. ;==================================================$ ^  ], N5 f0 f( y2 P
  2098. Next_Item;下一项- a2 F) X$ F1 k+ f  d4 ?9 B
  2099. JSR Clear_Last_Track_Name
    $ _6 T$ W7 s2 M' e1 T
  2100. JSR Disable_Text_Draw
    0 H9 l$ C6 h5 Y. p. N* l
  2101.   z% `' f' B& L  W
  2102. LDA <Music_Item_Cur
    ! R) ?' e( V' p+ _( {! q) N4 g+ J
  2103. STA <Music_Item_Last) |/ Z5 B+ X. s- K+ L$ A2 n. j

  2104. ; I& m0 j) ]$ S5 p
  2105. JSR Get_Last_Page_Start_Index
    : P7 X1 q9 N, b. N+ ?
  2106.   _( g5 h4 `' {9 b2 p/ C! S% U* [
  2107. LDA #$00/ F7 g: w6 p7 L8 [
  2108. STA Data_Buf" O. M) C+ t& n5 f9 R7 _1 u
  2109. & {7 [3 q5 S/ g' y$ P7 k) J
  2110. LDA <Page_Last
    9 t0 _7 h- w* ^5 V
  2111. CLC
    , T6 v; E0 |$ e1 E2 j' p/ L
  2112. ADC <Page_Last_Cnt
    - o/ K8 l+ K* Z  z
  2113. SEC
    $ n& w& }7 s1 Q6 A! q6 ^: Y/ C; G; ~
  2114. SBC #$01
    % J. Q& `0 Q$ K) {+ S
  2115. CMP <Music_Item_Cur
    ) |; G+ ~* O: h2 y/ C
  2116. BNE Next_Item_Begin
    % T1 Y6 B: g: E7 s
  2117. : G! G( Q$ E* E
  2118. LDA #$01
    $ E3 A, t: }0 t
  2119. STA Data_Buf* f2 \! d0 y' j, A# l5 z9 @
  2120. Next_Item_Begin' a9 B0 G) x. G# r- E: A% r" `
  2121. LDA <Music_Item_Cur
    . D/ a6 E# t9 E$ B
  2122. CMP #ITEM_MAX_INDEX
    ' ~# z5 V8 v5 O3 H: d& w; K
  2123. BCC Next_Item_Set
    # \; Q0 O5 e# g1 ]* s
  2124. LDA #$FF7 k  F) d% o- G# G2 l$ k8 u9 h
  2125. STA <Music_Item_Cur
    - ?" D" Z- ^$ I0 I: v
  2126. Next_Item_Set
    / K  i- S  H0 U; a! \
  2127. INC <Music_Item_Cur6 \' [6 t0 p% q: Z1 S* x
  2128. LDA <Music_Item_Cur
    & [+ m' N2 c  d  {% D
  2129. LDA <Music_Item_Cur
    3 i$ u3 O5 V. K2 r7 g
  2130. JSR Reset_Current_Music
      u! n: }" I) G3 X% |  E4 M( V: j
  2131. Next_Item_Play+ c* |) @8 @& L; d1 M6 F# D
  2132. LDA Data_Buf) u  C  ]' V* j) O& a4 A
  2133. BEQ Next_Item_End. d( S+ V: n& b% Q$ X  x
  2134. JSR Show_Page_Text
    5 i" d7 I; a/ ~2 I
  2135. Next_Item_End1 f9 G) o$ N. c# e! _6 S2 G
  2136. RTS& U8 L/ s' z. |" m. O
  2137. , P2 Q. X# u" n* \) ]" b
  2138. ;==================================================
    2 D( T2 ]8 G; W/ D
  2139. Last_Page;上一页7 z. ]0 Z4 g* ~% @, h, r1 ]3 F
  2140. RTS8 K1 m3 C' |7 ~) C

  2141. , S) B+ a0 b- y- J: g' `0 ]
  2142. ;==================================================. I  J6 u% [2 J: F0 z! g2 g+ Z
  2143. Next_Page;下一页
    ( z! w) U8 s2 R  Y$ H: Q/ y- N1 @
  2144. LDA #PAGE_MAX_INDEX
    2 P( `. c* a0 i7 |- ~- m! [1 Z
  2145. CMP #$01  x% _& E1 x4 ^/ L# ~9 U# R$ V
  2146. BEQ Next_Page_End- c# y, L- J% _* g! d+ D. P+ B
  2147. 0 |& D/ s5 ~# _, o; L
  2148. LDA <Music_Item_Cur
      p7 Y+ H& X% c; o2 z2 t
  2149. STA <Music_Item_Last
    , H% f% s$ N$ U" e
  2150. * H: K$ b2 s; f+ ^: n' k: T
  2151. JSR Get_Last_Page_Start_Index' F5 v9 R" g3 Q1 B
  2152. . F0 k( `3 i8 ~* g+ R3 s
  2153. LDA <Page_Last_Index
    / W* P3 a. a6 M! @0 V) m, l
  2154. CMP #PAGE_MAX_INDEX
    $ _% w9 N& d7 Y" S6 D
  2155. BCS Next_Page_In_End_Page
    $ [7 h! U* |6 Y; Y2 v4 L6 n

  2156. ! \) L9 q/ |& @( C  v- s: M
  2157. Next_Page_Not_End_Page;不是在最后一页
      v5 i# a' K2 `" V; h0 I5 A) ?
  2158. LDA <Music_Item_Cur
    2 Y0 p  s2 y, f! x9 s
  2159. CLC3 y2 n  \- v5 K3 x
  2160. ADC #PAGE_SIZE
    - E2 f: {/ [! W+ a" ^) T+ d. i
  2161. CMP #ITEM_MAX_SIZE  W6 B, U% B& _  g+ x; C
  2162. BCC Next_Page_Not_End_Page_Less# i" Y0 [, ?% V2 t( ?8 D
  2163. LDA <Music_Item_Cur
    : A# c, [: `0 ~0 ~8 t
  2164. SEC
    & S8 ~0 `4 }/ {( U0 ]' V& R2 H
  2165. SBC <Page_Last_Index4 l! I! T0 ?: I  D8 Y$ D
  2166. CLC; U& k+ }% }7 F; n6 R
  2167. ADC #PAGE_MAX_INDEX
    # c5 Z4 p* c( y
  2168. CMP #ITEM_MAX_SIZE
    7 z. X" r, T! _9 f1 a
  2169. BCC Next_Page_Not_End_Page_Less  d  R0 X  u3 O+ F4 E1 T
  2170. LDA #ITEM_MAX_INDEX0 L/ y0 E3 I0 f7 c3 F
  2171. Next_Page_Not_End_Page_Less8 r% `& D* {% A. }
  2172. STA <Music_Item_Cur4 B4 K1 C6 a  N; D0 H
  2173. JMP Next_Page_Reset! u# d. H( |, R) l( p
  2174. 1 y# A( w# Y* ]( u+ C0 T6 b
  2175. Next_Page_In_End_Page;在最后一页
    ( o5 ~# g5 G- C8 l  [+ J
  2176. LDA <Music_Item_Cur
    ' ?% l& O4 S) g6 u6 x
  2177. SEC+ g4 e, C6 z8 a: ?, J
  2178. SBC <Page_Last_Index
    : K; k' g  I. ]* n, u
  2179. STA <Music_Item_Cur, n& `& A: G1 K. z4 A, m% n4 t0 {1 H
  2180. . P; G2 }1 X  u8 ]4 X: U# u# m4 S. J. n) @
  2181. Next_Page_Reset7 `8 l- ~9 W/ u0 F# e
  2182. LDA <Music_Item_Cur
    $ C* W9 b1 ?( r2 S; a5 G/ V
  2183. JSR Reset_Current_Music( ^$ Z& w/ `- c" z9 Z3 r& V
  2184. JSR Show_Page_Text& G+ d. W4 v  X$ m8 v& _/ ?
  2185. Next_Page_End5 a5 s6 n: w# n8 Y4 _2 t
  2186. RTS
    + E) L. f( r* O* p5 z( c

  2187. $ y: i/ C$ V2 c
  2188. ;==================================================
    5 G$ w# v1 U2 b$ ^7 k
  2189. Disable_Text_Draw;禁用音乐条刷新: n7 G- m, g8 s$ h
  2190. LDA <Text_Disable_Flag
    , O7 [2 I) c* X+ s
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME! _( B6 g- ^; T5 }7 ~6 N& E7 {  p
  2192. STA <Text_Disable_Flag" q7 }: G) y( i# S0 ~
  2193. RTS
    % Y% b/ U  [8 B/ M' D
  2194. 5 L) a) r  }) t9 Z) U6 S
  2195. ;==================================================) B5 ]% D# i0 C: U0 r7 Y
  2196. Clear_Last_Track_Name;清除上次曲目名
    - c7 p. [( }+ U
  2197. LDX <Music_Item_Cur8 e/ a3 l8 m  s; W1 E( X
  2198. LDA <Music_Cur,X
    / _5 M/ o8 C+ z/ a# Q
  2199. .IF Track_Name_Pos
    0 U  w! N- H; @2 Q$ R9 U9 _
  2200. JSR Clear_Track_Info
    , ~- _: |6 J+ T& w
  2201. .ENDIF
    - S# d' b6 z  p3 j" W# b( |( o, {  d. a
  2202. RTS
    0 q" p' @( {; s: \) n  g- x! j
  2203. 1 X# G+ V; o' v4 w# P& {# `
  2204. ;==================================================. n$ a4 D2 p( w9 p5 n; O9 U
  2205. Reset_Current_Music;重设当前曲目
    - d, D, t/ x4 ^
  2206. , _1 \, t( Q" U; I
  2207. ;写入当前总曲目
    ' S, [9 M, e* f0 ]; g* a
  2208. JSR Set_Sound_Total( o9 P2 `) H; @4 [, f1 G" b5 ~
  2209. LDX <Music_Item_Cur, w$ y% A- O$ i# T
  2210. , N/ h* {5 M! g, B# y
  2211. LDA #$001 S4 x1 F" q0 ], ^" g- {1 e
  2212. STA <Music_Last; s& C6 }; I2 v6 @3 W

  2213. # m& S9 G3 s, ?) o$ ~
  2214. JSR Sound_Reset_Proc
    $ n" o) |8 C* c; U" t  z
  2215. JSR Music_Show
    ; E% m* A; J6 d6 K3 j: u; ?
  2216. RTS- ^+ k- |, ~- `* ^& c
  2217.   v5 j9 ^) L; k" N! }
  2218. ;==================================================3 y8 _! z. }7 w/ [8 V
  2219. Music_Song_Stop;音乐停止* t% W6 b: o5 B4 y# x3 |( m
  2220. LDA #$01
    - p5 k" k# B/ o2 f$ h
  2221. STA <Music_Stop_State/ y% C% J% ^1 ~) C+ s
  2222. JSR Music_Bar_ReSet
    7 ^( {& p6 O. N* n. q, U; {; \2 R5 W
  2223. JSR Time_ReSet
    1 N- b/ c+ \, C& b
  2224. JSR Sound_Data_Clear
    ) L4 W+ r3 @1 A' M" s# O& _+ [$ J0 @4 i
  2225. JSR Music_State_Show/ e) q# ^. }1 Z$ d) d3 b: w1 j
  2226. RTS
    & s) g) T( \; m, l9 \" T
  2227. % Z$ R5 @% M. m3 f; R8 p
  2228. ;==================================================
    * G9 `/ R( A* q
  2229. Music_Song_Play;音乐播放8 z+ r( K1 W* G" V$ J
  2230. LDA #$00: b4 Y4 U! Y) j8 v
  2231. STA <Music_Stop_State; g9 r" S: Q) ]* K( C
  2232. LDX <Music_Item_Cur* z+ U$ d. Z' H5 f2 V. f
  2233. LDA <Music_Cur,X$ v( `( e  z4 N- A, P* n
  2234. JSR Sound_Init_Proc
    " t  B7 _% V. `. i0 B# b( t
  2235. RTS# o/ R0 ~7 R6 j1 q4 C$ j* }
  2236. # I) U6 z# Y3 L: Z- x  b
  2237. ;==================================================' |7 N7 p+ t4 v3 O9 @3 E0 C
  2238. Music_Song_Last_10;上10曲
    * }; I8 z+ x* T3 Q
  2239. JSR Clear_Last_Track_Name7 l3 J3 Y6 C; A% i  f3 e
  2240. JSR Disable_Text_Draw
    6 a' ]6 H4 Q$ ^% M" u0 d
  2241. LDX <Music_Item_Cur% _- x# h/ ~9 k- u1 f* C( @
  2242. JSR Set_Sound_Total
    / F# Y' L  D" R3 p; h3 s3 y$ r
  2243. LDA <Music_Cur,X2 Z" ^. l8 X7 ~) s- g  }' v
  2244. SEC
    * ]! d0 t4 G' p9 v2 N7 S
  2245. SBC #100 C" I5 y# K# P8 _2 M
  2246. BCS Music_Song_Last_10_Set
    9 C) t: U9 ~) b- S. q- H5 r2 F! @
  2247. LDA #$00
    5 a0 p  `( w- S, h+ g
  2248. Music_Song_Last_10_Set" a+ J( R, ]1 P$ O; z) V
  2249. STA <Music_Cur,X
    + f; b3 R- U! C! p8 }( _
  2250. JSR Sound_Reset_Proc
    " N3 y# k% m& T" \  }7 Z
  2251. JSR Music_Show
    9 h+ S) V- a5 d( J* S/ e2 `, [9 c! C
  2252. Music_Song_Last_10_End
    8 {% \6 k* X2 q4 `
  2253. RTS
    4 O2 y: z( `5 ]; S, e

  2254. ) e1 q  @+ k% p. F7 ^
  2255. ;==================================================3 R& M7 K$ |4 @9 m4 @. |
  2256. Music_Song_Next_10;下10曲
    ' ^( c; ?/ P, b5 e3 D2 w
  2257. JSR Clear_Last_Track_Name, ^% n& d- K! v; l. X) u( R% E" j
  2258. JSR Disable_Text_Draw  w0 [' q9 ~0 [% d
  2259. LDX <Music_Item_Cur8 P/ c4 x; a' n1 \- n
  2260. JSR Set_Sound_Total7 P; a) _4 \" U3 a4 c6 n$ T
  2261. LDA <Music_Cur,X
    ( n* J3 N% y* {1 b  r1 A, x
  2262. CLC
    3 S4 V% J5 g9 ?0 l4 W- d
  2263. ADC #10
    3 q8 G/ {: J1 R  U' k& L" N  p
  2264. CMP Music_Total
    . i0 }2 F/ ~" Z
  2265. BCC Music_Song_Next_10_Set
    ; X# y  a! E* R. x
  2266. LDA Music_Total
    9 I9 w: U) r2 J" T6 u, k
  2267. Music_Song_Next_10_Set
    ) o5 s; p4 i$ W2 h0 G
  2268. STA <Music_Cur,X7 F% c0 U$ F7 W" c( ]4 \! k
  2269. JSR Sound_Reset_Proc8 `4 @2 H6 M, F  S. W* q5 V
  2270. JSR Music_Show$ P1 m  X. H. g; Y) ]
  2271. Music_Song_Next_10_End6 k- q% N7 W" k& \" {
  2272. RTS! H" P2 {  ^/ t/ `* a
  2273. 9 j, C& |: ]7 o
  2274. ;==================================================
    ' M- [4 c3 o9 a( ^* `, z, }
  2275. Music_Song_Last;上一曲
      h/ [# n  h( Q1 C2 p
  2276. JSR Clear_Last_Track_Name1 {4 V/ Z" x+ y$ C; D2 t6 m, u
  2277. JSR Disable_Text_Draw
    . v6 }3 k! D0 G, R
  2278. LDX <Music_Item_Cur7 v* N3 X: \5 U' n- W" p
  2279. JSR Set_Sound_Total/ `& F5 ^" V4 O( I
  2280. LDA <Music_Cur,X; T: n$ L' e) Y9 H! Z4 h$ P3 }
  2281. BEQ Music_Song_Last_Set
    0 T" t, Y& l4 F, _
  2282. DEC <Music_Cur,X
    + g6 H+ o1 q& Y4 r5 D' z- i2 J. w7 O
  2283. Music_Song_Last_Set, Z8 N: e/ G" r/ l
  2284. JSR Sound_Reset_Proc
    6 A3 g( P7 u/ \( x1 S0 \% }
  2285. JSR Music_Show
    # {0 f+ E, v: l7 q: T) B7 }  M
  2286. Music_Song_Last_End
    4 T0 h/ s) }5 v0 _; @
  2287. RTS
    # c% O# y) t2 Y% _
  2288.   n9 x! B1 d7 b9 |; K2 Q
  2289. ;==================================================
    + g+ k8 F6 L' Z  K7 C& r& |
  2290. Music_Song_Next;下一曲
    ' o0 X9 @( N4 Y; s# V) N4 s0 X; f6 ^8 u
  2291. JSR Clear_Last_Track_Name  T0 {3 S0 Z/ }1 Z. n* B, O7 g( h; ]
  2292. JSR Disable_Text_Draw
    1 D' o% `+ e1 R4 A
  2293. LDX <Music_Item_Cur) ]7 L6 \8 _* c7 x" }' r# T
  2294. JSR Set_Sound_Total
    6 M' P8 k7 q1 d. N: s# ^
  2295. LDA <Music_Cur,X
      y. K; M, `- ~! q( Z4 v
  2296. CMP Music_Total7 z; I* R7 ?/ T9 P* f% B
  2297. BCS Music_Song_Next_Set1 w& q' V; p6 j5 j1 Z) A; u3 y# M
  2298. INC <Music_Cur,X
    6 J0 L0 ~2 A. m
  2299. Music_Song_Next_Set  f5 n' N$ G( A* Z( j
  2300. JSR Sound_Reset_Proc9 Q0 ]& H4 W) M
  2301. JSR Music_Show
      K, S# ~' W: M" w; n, |, s' }1 O( I
  2302. Music_Song_Next_End
    # X( L% J4 r" C  ^( R# V4 o- ~9 b6 n
  2303. RTS- b) z2 n8 x! ]7 i
  2304. * A. T/ V' P  G7 S- ~2 U4 j
  2305. ;==================================================
    & t5 J8 u6 l8 ~% R% `
  2306. Change_Select_Item;改变当前选择项$ o. A+ ^9 {+ C: ^
  2307. ;--------------------------------------------------
    4 x, x) c4 n. ^% u9 |7 [
  2308. Change_Select_Stop_Play_Item;停止/播放; r7 B4 |5 Q5 b+ b0 k3 l, o
  2309. LDA <Key_Once
    $ y1 N& w- A& r/ W% Z8 f) {
  2310. CMP #$10
    % S  `, y" @- V7 b  t
  2311. BNE Change_Select_Last_Item
    ; D) h% x( y0 E0 i8 @+ L
  2312. LDA <Music_Stop_State
    $ k# x  M* a) }2 }
  2313. BNE Change_Select_Play0 o2 K* P- y$ p0 F8 N3 ^: N
  2314. JSR Music_Song_Stop4 ~3 i& @$ B$ g) k! Y2 X5 u
  2315. LDA <Music_Stop_State# r- Z: D" Q& M" M! H: K  H
  2316. RTS
    - m1 H* {9 ]3 y6 O: U3 r9 Q" J0 H

  2317. % e! c. V1 G8 `- x# q. e
  2318. Change_Select_Play
      T  [5 t/ ~1 n4 U
  2319. JSR Music_Song_Play" D$ {) {5 n% {6 b( J
  2320. RTS+ M5 H# [8 a: s; M  {
  2321. . ]8 m6 x4 a" W" R4 k
  2322. ;--------------------------------------------------+ j6 p- j3 K+ ~% r; x" O' N
  2323. Change_Select_Last_Item;上一个专辑
    ; h5 |% x/ ^7 V0 B1 _& U) a/ V# Q7 ^
  2324. LDA <Text_Disable_Flag
    1 J, n  U6 X! n* [
  2325. AND #TEXT_DISABLE_ITEM
    ; u; J, t* F# F. K
  2326. BNE Change_Select_Item_End! R( q1 m7 n0 F3 N/ C' b, P. u
  2327. LDA <Key_Once: S5 T0 g, b1 z! A/ I
  2328. CMP #$082 r/ @$ p2 t) o+ N
  2329. BNE Change_Select_Next_Item
    . l( u0 F6 `9 S0 V) K1 M
  2330. JSR Last_Item, g0 y3 s; x3 s7 ]
  2331. ;--------------------------------------------------
    2 G7 l. U0 J& \: S$ X; e1 _3 n
  2332. Change_Select_Next_Item;下一个专辑
    7 f: b1 j; o' L
  2333. LDA <Key_Once6 v6 P# T6 A, M) e  n; T* w# j2 r
  2334. CMP #$04$ J5 h: {6 {# m1 Q! Z
  2335. BNE Change_Select_Last_10
    1 x5 d# r# e1 @( L8 z6 G3 |" E
  2336. JSR Next_Item& L- b+ {/ u) e6 @
  2337. LDA <Music_Item_Cur
    0 l8 O- k) e5 @0 G& B4 b$ ^
  2338. JSR Get_Page_Start_Index
    ' [4 i7 I; f. G+ ?: {8 A
  2339. ;--------------------------------------------------  G% {( c5 U6 p, Q0 I# V  r
  2340. Change_Select_Last_10;前10曲
    ) S' `3 u8 Q* V7 E* w/ x  C
  2341. LDA <Key_Once
    & Z$ Y& N1 u7 ?
  2342. CMP #$40
    1 p$ p6 X6 Z9 M- \! _" ?! L) ]
  2343. BNE Change_Select_Next_10
    9 B, f/ J- C2 ^( C, t/ p
  2344. JSR Music_Song_Last_10
    * S& l+ b8 f. C& i
  2345. ;--------------------------------------------------- N2 n/ @& T/ e
  2346. Change_Select_Next_10;后10曲
    / c4 B7 ^. \' R0 N6 S- Y
  2347. LDA <Key_Once* X) w  g7 Z1 `5 F7 h
  2348. CMP #$80/ H; Y) a' d7 \  Q5 H
  2349. BNE Change_Select_Last
    . z5 L( T1 g/ d! d- X) Q
  2350. JSR Music_Song_Next_10
    - ?& n( @! ?' I( m  X* \
  2351. ;--------------------------------------------------: R) B3 A+ v0 ~) p5 f
  2352. Change_Select_Last;上一曲
    5 D5 d9 ~* |1 q2 F. z
  2353. LDA <Key_Once7 `( G2 y9 |! j( E' m! M
  2354. CMP #$027 I3 t' H; \& u+ y+ U) u
  2355. BNE Change_Select_Next
    5 q+ k0 V9 \' O7 \! V& t
  2356. JSR Music_Song_Last  ^' S' X( P# _; \
  2357. ;--------------------------------------------------# ~9 F+ ~5 T) i- C) b3 }
  2358. Change_Select_Next;下一曲
    1 }7 I9 k2 u& ~( \+ y& L
  2359. LDA <Key_Once
    : u2 [) ^" O/ ]: \6 \/ w
  2360. CMP #$016 S. H7 Z! R  Z" S
  2361. BNE Change_Page_Next" b0 Z" W) Z4 i" d) z7 U' d
  2362. JSR Music_Song_Next
    4 o- h! N4 ~$ u& K3 _7 [
  2363. ;--------------------------------------------------! B% x; A7 M) W, H% T$ a$ `+ V( v+ f0 j
  2364. Change_Page_Next;下一页
    . |* h2 c6 _" g* g4 E" U& Y
  2365. LDA <Key_Once
    * n8 ]' l! c! l, E
  2366. CMP #$20& q3 o3 J& y8 u
  2367. BNE Change_Select_Item_End( G( B8 a1 m( [: }2 ~
  2368. JSR Next_Page
    ; P! H. n7 N1 U0 C" [
  2369. ;--------------------------------------------------
    ' C! N0 e9 V: {
  2370. Change_Select_Item_End! S0 V" k* D) V9 O1 a" W# q0 I/ O
  2371. RTS5 P" [7 g4 D2 S  r+ x

  2372. ( f- @  C3 L7 l$ |
  2373. ;==================================================
    7 h. b, E6 {, m$ P
  2374. Show_Arrow;显示箭头光标1 N* u0 R% w9 A+ B
  2375. LDA <Music_Item_Cur
    ; q9 L+ B& D7 b. h& V
  2376. JSR Get_Page_Start_Index
    ) [: {! K2 v( H& O0 |3 G
  2377. LDA #$00" h5 d9 t' T+ c% w
  2378. STA PPU_OAM_ADDR5 `+ F! [, |% J  o9 I! F
  2379. LDA <Music_Item_Cur
    1 G  ~! A' R& f  w+ I" y
  2380. SEC
    + K: N/ h; w* C, I# {. _2 u6 e
  2381. SBC <Data_Buf
    ) U2 K# I* w0 {7 v! J2 F
  2382. ASL A9 o9 M- g7 c5 p& I/ q0 I9 r% ^, C8 ~
  2383. ASL A
    4 b6 f2 Z  B# u) T% L6 O
  2384. ASL A# P2 P6 k4 [5 H/ E
  2385. ASL A/ w* r# X0 |$ o8 s- B
  2386. CLC
    ) a0 f* F4 L2 q0 i: {( m, c9 r
  2387. ADC #ARROW_Y_OFFSET+ c5 T$ j1 {6 _
  2388. STA OAM_TEMP_ADDR + $00. T0 M( t  N- r) q& t7 L5 H9 ]5 O
  2389. ;STA PPU_OAM_DATA
    ( Z/ B- b6 j$ D6 b8 q+ V- M/ h4 |+ c9 M
  2390. LDA #$1F
    $ x& N$ Z% E- k9 ?- n5 \; z8 ~
  2391. STA OAM_TEMP_ADDR + $01! R- N% {6 Q  t+ q7 V
  2392. ;STA PPU_OAM_DATA
    5 N9 I* O/ Q% L" H% }+ X
  2393. LDA #$00
    - ~# N: r& Z1 t6 h
  2394. STA OAM_TEMP_ADDR + $02" \. F/ n% e' y5 d4 H
  2395. ;STA PPU_OAM_DATA$ `# [: }1 m5 P& t; p" _' ]
  2396. LDA #ARROW_X_OFFSET
    0 \7 O$ x5 \; T" ~* S1 ]2 I8 {. ?
  2397. STA OAM_TEMP_ADDR + $03% C/ F0 Q! A- z, n% H" m
  2398. ;STA PPU_OAM_DATA! D; `* b2 F9 x
  2399. RTS" M+ X! g  ?" H/ Y2 _2 z

  2400. 2 N; r& ]6 h+ e+ ^. h
  2401. ;--------------------------------------------------$ \$ i9 M5 b1 ]  H' o2 e+ {, g
  2402. ;命名表数据9 _0 ~/ t2 q% g$ ]9 b+ U5 X/ Z
  2403. Palette_Attributes
    2 i$ m6 q/ B8 l/ l
  2404. .IF SOUND_BAR_SHOW_ENABLE
    * W5 v# L) s/ ~6 ?' H5 W" u0 t* b
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    $ M8 v$ a, e- I4 ^; ]
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$552 C4 ^5 U5 }9 [
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    ' k+ w0 O$ R5 @0 z$ t* M
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA9 m- w3 I+ V! |% n" k  h) O. |
  2409. .ELSE5 v, `$ ~+ ?1 E: ^1 m! N
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55- I- i/ t! n3 d% l3 W% ?9 ~
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55; T; f; M2 I6 M7 g, {4 S
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    # K) T1 x. i8 ^
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA; a& L% i0 u" X: ~! N
  2414. .ENDIF2 i( G0 {8 l: O" c6 d+ W" g

  2415. , s+ ?+ }9 C- @( n7 B& R
  2416. ;--------------------------------------------------
    4 \/ [. A" S3 o$ ^1 a9 U0 G( L( n
  2417. ;调色板数据
    " V  q" [& T$ h- a
  2418. Palette_Data
    8 y5 h0 g0 H# d1 d
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    7 m& K  J# r) {7 g0 o2 W
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    & V; `- G7 R5 {5 n" S
  2421. 4 P2 V! o8 k  |" W
  2422. ;--------------------------------------------------
    8 e, ]; w- N7 D! }& ^/ J
  2423. Static_Text_Data
    % k$ j! z" p$ O1 R/ @/ w+ g/ _3 @
  2424. .WORD Static_Text_Caption_Data! u8 z0 r2 T$ P* N3 `! L, }+ Y, _
  2425. .WORD Static_Text_Author_Data
    & R. c4 X" o% z0 X
  2426. .WORD Static_Text_Date_Data5 J! O0 a' q6 ~, q/ s
  2427. Static_Text_Data_End
    ; R. b/ c, ]- O  ~
  2428. / E6 z+ S3 F6 B$ B# @/ r
  2429. ;--------------------------------------------------
    1 Q4 Z" t& i! F0 w: S+ `1 W: R
  2430. Static_Text_Pos
    ) l9 \! A/ V7 ?; B0 D
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)
    * W! z' u# }6 p/ _* B* T1 @
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
    6 t$ ?3 Y1 i5 a' x3 g! m  O) {
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)- V/ P8 M, l; v6 ~/ _/ t" ]
  2434. Static_Text_Pos_End
    " {' r/ g2 z5 Y- R) G0 e

  2435. $ h/ e7 r0 U$ k
  2436. ;--------------------------------------------------- U! _% a# D3 t1 t# e8 s
  2437. Music_State_Stop+ [+ m  [# |' `2 ]# m
  2438. .IF SOUND_BAR_SHOW_ENABLE7 D" p+ K. U+ a0 E
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$002 O) M2 \% C2 X3 O, u. {2 @* K1 F
  2440. ELSE
    2 s1 S6 p% |0 g1 [: [
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$004 h& `& p9 i! {& T# z3 Q1 s
  2442. .ENDIF" E- q: y1 j- m5 ~1 A6 d7 f, M! R
  2443. Music_State_Play+ S* r1 }2 G# i/ N" P' y4 k& w
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$000 a2 U' w! P" Q6 e6 C6 ^" {
  2445.   U, d5 h' |  i8 t5 O3 M
  2446. ;--------------------------------------------------
    5 {# w4 Y( A( Y
  2447. Sound_Bar_Text_Data;声音类型文本9 ~1 m/ y' k$ R
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
    ) U# h5 E/ r; C
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"$ `) B7 r. b/ a5 V
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"
    5 F8 e- U7 m; l! X/ F5 b: \
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"
    ( U1 R7 c8 u" J5 z
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00
    ; r  C6 D6 s# x1 K2 u

  2453. ! R, Q$ w: B" [6 T
  2454. .IF Track_Name_Pos
    8 Y1 E! v# F( I# g. r' V
  2455. 5 _; z. ~: |  X" T' i
  2456. ;--------------------------------------------------
    % {0 V% Z5 M' B4 h3 ~0 w. N
  2457. Track_Name_Addr_00;曲目名地址索引
    0 [- x' E9 K; e) w5 w+ i7 `9 g
  2458. .WORD Trackr_00_01* y5 [% B: [! [5 E8 v4 u1 K1 c+ _

  2459. . w0 I( ^* X2 [% F) E5 d
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
      g7 i$ ^0 `" c* d
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"4 @: ~( j3 T9 D' f7 d& |

  2462. * O- O; P0 t6 r  p
  2463. ;--------------------------------------------------
    5 X+ t* @: \* {, Q
  2464. Track_Name_Addr_01;曲目名地址索引
    ' r2 I1 i1 u- P
  2465. .WORD Trackr_01_01
    * x( `, X: }9 [% k1 ]  l7 b

  2466. / B! W4 A4 x+ G5 }: J! k7 u, m
  2467. ;==================================================
    0 K$ g" n0 Q* H- X$ v
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1". z& F5 i5 x! x
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"8 T( ~: {' `. W+ ]9 o

  2470. - x, n6 g3 B2 }# F! w
  2471. ;==================================================
    " x# @! ^+ a2 G, j; o! V
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    & k/ v' ~8 ~5 g8 p  T7 X
  2473. .WORD Track_Name_Addr_00
    , X# C" P  ~: U$ k& S3 U0 D
  2474. .WORD Track_Name_Addr_01
    * L5 n( ?4 w" R0 M6 I
  2475. .WORD Track_Name_Addr_01
    1 J, A; `6 ^6 D* f
  2476. ( B0 y# n: q: `  U' }; z
  2477. .ENDIF" e# h9 J; ]' `4 R: c5 D) S

  2478. 0 m0 u: a. Q$ ?0 ]
  2479. ;--------------------------------------------------( w3 G$ H% r% Q* D9 v8 ~* A
  2480. Static_Text_Caption_Data;静态文本数据3 Q. m" c) K$ P& }7 f. v
  2481. .DB 16
      J) m/ o" [" z2 l$ z1 D% U. Y
  2482. .DB "FC MUSIC 12 IN 1"
    9 d: O4 Y4 D& g! E  i
  2483. Static_Text_Author_Data
    ! m$ g6 s; s1 r' y
  2484. .DB 25
    ) [2 O4 ]& X9 h  J- J# S
  2485. .DB "EXTRACTED BY FLAMECYCLONE"
    ! r: k( a8 U$ w* S1 ?: A
  2486. Static_Text_Date_Data
    , w: t* O+ v7 x3 p, o+ K
  2487. .DB 10! a' R0 B7 q$ P! Z$ P! H
  2488. .DB "2023.07.23": M4 l! N/ |# }
  2489. & }1 O' g( p: D9 {
  2490. ;==================================================
    " p1 t- A) z2 [, r
  2491. Music_Collection_Name               ;专辑名间接索引
      ~0 m/ U( ?# f' ^6 j1 h
  2492. .DW Music_Collection_Name_007 X: m1 r+ t: [) ]( E8 I/ O
  2493. .DW Music_Collection_Name_01% {, y, n. j4 S# a1 S+ y! @* g+ c
  2494. .DW Music_Collection_Name_02
    8 c- M8 W* }) N% z& N# i
  2495. .DW Music_Collection_Name_03' D. _' T; m8 B% V
  2496. .DW Music_Collection_Name_04- q! X$ _( U: t7 t6 s+ y  c% W
  2497. .DW Music_Collection_Name_05
    0 n, W; m& W" M" F: e# X/ L
  2498. .DW Music_Collection_Name_06
    0 a  d$ V, `* l8 P+ }
  2499. .DW Music_Collection_Name_077 R0 U, j/ g! V; ?' Y5 |3 P$ Q! G5 P
  2500. .DW Music_Collection_Name_08
    " h2 w0 n* ~) M5 g& M
  2501. .DW Music_Collection_Name_09) D0 N3 r8 o2 B" }* y7 d! f
  2502. .DW Music_Collection_Name_102 [$ {5 J& N, U1 e# B3 l) d
  2503. .DW Music_Collection_Name_110 H  D9 D- u! z1 c9 R) P

  2504. * t) S2 x1 p! e  W% x
  2505. ;==================================================
    ) R+ ]2 h3 |  d+ A" E% g1 T9 k( z
  2506. Music_Collection_Name_00            ;专辑名文本数据( v$ E' e, F0 o$ y, ^4 F% p, R
  2507. .DB 11,"1.RAF WORLD"
    ; |# z; y* U. b( ?; T( }" i: }3 b
  2508. Music_Collection_Name_01: Y# C) T# K1 u( c+ p/ t- j
  2509. .DB 15,"2.FINAL MISSION"3 M( ?8 a" _: n' p& U0 {
  2510. Music_Collection_Name_02
    1 Q" }- |1 }' }
  2511. .DB 06,"3.KAGE"
    - C  X& Y* K' n& d
  2512. Music_Collection_Name_03
    7 p7 M) j; q7 T- H+ J0 |  c4 U+ Q
  2513. .DB 16,"4.DOUBLE DRAGON"6 z; v) L/ }( @" P! N1 p) I
  2514. Music_Collection_Name_04
    0 n0 V# [( B" r
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    0 P) Z! w; A7 c$ o) A
  2516. Music_Collection_Name_05
    : Y! e6 D$ z- E+ z5 f" Y  S# m
  2517. .DB 17,"6.DOUBLE DRAGON 3"4 c6 R) n/ u4 s' }
  2518. Music_Collection_Name_06
    : {9 V. V) T! ?$ p
  2519. .DB 09,"7.ROCKMAN"' K! E/ E5 B! D1 O% ~& n3 j' j
  2520. Music_Collection_Name_07
    8 Z# S1 _3 J# v" V6 f! I
  2521. .DB 12,"8.ROCKMAN 2"  s; h5 q; Q9 i: Z
  2522. Music_Collection_Name_08+ E- A9 g/ [6 G0 t0 ~- E7 J* T
  2523. .DB 12,"9.ROCKMAN 3"
    - X9 d  {& V6 N. X9 m
  2524. Music_Collection_Name_09$ m$ Q' F# V7 s3 f4 ^. b
  2525. .DB 12,"10.ROCKMAN 4"
    * a9 A# S( T8 z  X+ l
  2526. Music_Collection_Name_10
    " `1 T* e1 V$ o6 n
  2527. .DB 12,"11.ROCKMAN 5"# [* W! O" K# _5 h0 P' L' y
  2528. Music_Collection_Name_11& @2 x% ^8 Z; X; S0 h% C8 [: c! D
  2529. .DB 12,"12.ROCKMAN 6"
    ( l+ I4 S. ?/ v9 y. W8 v  I: L

  2530. ) {9 ]/ W; ~+ d; ]1 K( K$ O3 [
  2531. ;==================================================- Y1 I6 ]6 m+ j
  2532. Track_Name_Addr_Flag                ;显示曲目名标记" @# n" d% _9 ^
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0* P" ~" q: U6 X* @

  2534. ' O; a# ]/ i7 j' G; K
  2535. ;==================================================
    , z5 c/ W; Q" O" k2 d( _
  2536. Item_Pos_Data                         ;光标箭头位置! l, N8 e8 G$ W
  2537. .WORD ITEM_SHOW_POS' ^# K5 l9 o/ R% Z, U/ Q( C# G
  2538. .WORD ITEM_SHOW_POS + $0040/ b8 R' L! ^4 w: O4 s7 g1 C
  2539. .WORD ITEM_SHOW_POS + $0080" V4 t/ q# l2 _, D4 Z# u  P
  2540. .WORD ITEM_SHOW_POS + $00C0
    ; J# \! m- s2 ~4 ?4 C+ t# _1 V
  2541. .WORD ITEM_SHOW_POS + $0100
    - O' e5 l1 _0 t) L1 {" _
  2542. .WORD ITEM_SHOW_POS + $01407 C' Q; t8 ^" l! N+ c+ C
  2543. 1 T" k! E# b; F5 [
  2544. ;==================================================
    7 U- N, A6 U) T# t
  2545. Sound_Init_Port                 ;音乐初始化入口地址. m; l* r: W; l+ q
  2546. .DW $BFC8
      P% p2 e8 U/ N
  2547. .DW $D7F0
    5 \! i& _* b* c. R
  2548. .DW $9FC0
    * {2 W0 F; R' {! U1 l+ @7 |9 B
  2549. .DW $BF70
    " n: r7 u2 [' Q; \  O/ f
  2550. .DW $8003
    8 Z/ S  ^1 H# X0 j, p, Q# x' K- Z2 d
  2551. .DW $BF308 p1 }/ G5 K: F; }3 S* C8 `( l' A
  2552. .DW $9003+ m. \8 K# u) U( k# z9 g) n- ^
  2553. .DW $8003
    ! a; [" x% }+ [. U) F! g( Y
  2554. .DW $8003; e; Q8 Q7 S& @; j
  2555. .DW $8003
    + F+ i" `  Y7 h& _& I6 W& L
  2556. .DW $8003
    5 d4 U) C7 k: `- P  ]
  2557. .DW $8003
    8 ?/ B: R% e$ v" A' w- ~( K

  2558. * s7 e: J1 b" ]; ]; q
  2559. ;==================================================
    ) w8 G# b% _5 g; e2 S  Z9 P' N% b
  2560. Sound_Play_Port                   ;音乐播放入口地址) U2 d) V; \5 G% F0 w
  2561. .DW $8000
    1 O' M  s1 X: C, s3 h# g( \
  2562. .DW $8001" @0 t& r. y3 L' X: d
  2563. .DW $A000
    # Z% a& w, Z) E! M5 O7 @
  2564. .DW $8003
    ( f" N) D4 w7 Y6 P) ?/ J& n$ c
  2565. .DW $8000
    8 y: z9 I: V& j% y' @0 W
  2566. .DW $80031 A, l$ \9 f4 j3 C3 ?
  2567. .DW $9000
    ! ]" d- I$ j, O, }7 s4 ]) [% S1 ^
  2568. .DW $8000: Z- I. c4 _1 V, E, p
  2569. .DW $8000
    . y' Z7 J: J& M5 a" z3 a( ]; p
  2570. .DW $8000
    - V" K$ a$ S/ L+ {8 @6 \
  2571. .DW $8000
    # c3 q$ c: v/ I, a
  2572. .DW $8000
      @! O6 V* f0 L. C
  2573. / @" f1 I& c" v
  2574. ;==================================================
    - r- y+ p+ ]' a! w( O/ t* S* y
  2575. Sound_Reset_Port                  ;音乐重置入口地址3 V- c5 D3 |) i% o3 w8 W
  2576. .DW $00008 a/ L8 J- N3 V& L; r
  2577. .DW $00000 C6 w: ]( U% W9 E* v$ ?1 r! B% z
  2578. .DW $0000
    3 ?! K- p6 r! s& q9 I$ j2 v+ Q
  2579. .DW $0000
    / y  A* T4 k5 v& Z! Y
  2580. .DW $0000
    2 o! n3 m4 F, C6 B
  2581. .DW $0000& u& ~+ w) d# V: n7 m
  2582. .DW $00000 `8 s' ]6 [0 _' i6 Z/ S
  2583. .DW $0000
    2 r; E+ W( K* `* F1 U% p6 ^
  2584. .DW $0000
    1 ]- \4 e3 T2 j2 n- f, L1 W
  2585. .DW $00007 {9 e9 o& m9 n" ?* ?: z
  2586. .DW $0000
    9 G; I. U4 x( X* _6 O
  2587. .DW $0000
    ( y. K' F  S% u3 Z) i/ q

  2588. $ g$ v8 T+ n2 u3 H; j. f
  2589. ;==================================================
    # a: H# Z0 h7 ^7 Z  H
  2590. Sound_Total_Port                          ;曲目总数2 B3 I) X) z. O( K/ q) v" E
  2591. .DB 38  _$ Y' H$ \/ q+ a
  2592. .DB 33
      s, I) C* R- ]2 m% P# C, k
  2593. .DB 49
    + V2 }. c0 x1 p! a; D9 c
  2594. .DB 41
    9 ?) W8 @$ ^# u
  2595. .DB 83( S' ^9 a: O3 s* _+ B5 q" T  G
  2596. .DB 70
    / ]/ F+ a1 A7 M; _5 N
  2597. .DB 504 u& {1 T2 ~( J. v9 T# U5 I
  2598. .DB 67
    $ G+ r3 d$ c: }
  2599. .DB 570 e5 r( U0 F: u; ]& m7 M
  2600. .DB 71
    / @. P; q( |) w5 b
  2601. .DB 76- L/ O9 ?2 E, K# z' N; w
  2602. .DB 102, ]8 B: b5 j3 ?$ \  ^- t0 J2 I, U

  2603. ; \0 F& h1 F+ [. a) b' ?- h
  2604. ;==================================================7 ^* F7 g5 x9 d- m
  2605. Sound_Start_Port                      ;起始播放曲目5 J& F. O; J4 j! G* t
  2606. .DB 00) `5 B2 r+ h7 Q$ u
  2607. .DB 00' X7 |( k+ l: H
  2608. .DB 00" T1 G! G+ H" z! z. Z2 L5 D
  2609. .DB 00
    / t# K6 |' O+ W7 i5 z( u  j. \
  2610. .DB 00
    ; o# I8 g* S3 R, x9 G
  2611. .DB 00
    / n6 E; ?0 ^& J% X3 Q
  2612. .DB 00
    + R6 M' }6 L; B. J# f( R
  2613. .DB 006 L$ ?$ f+ L/ M, k  b; [
  2614. .DB 00" c- `% }5 N0 B8 V
  2615. .DB 000 D& N1 |9 H3 F
  2616. .DB 00! }. ]6 i( ?1 Q6 G% ]+ q
  2617. .DB 00. q0 B0 q  m* ?- F6 m

  2618. 7 X) N2 o5 ~3 [, |# D9 i
  2619. ;==================================================" w" p* N! E; R  m" p
  2620. Sound_Bank_8000                      ;专辑bank_80001 a0 y; C& b) K# u7 l
  2621. .DB $10
    4 _: E3 f7 ^) J+ M
  2622. .DB $12
    ) n# T. y0 F9 D" J# O1 B
  2623. .DB $14  ~4 i/ ?* W3 E- J; m# B+ ]
  2624. .DB $16
    * j7 u1 v+ @( J# v
  2625. .DB $18
    ( i$ C$ Y! X; n2 B3 ~. \( F4 f
  2626. .DB $1A
    ' X! W- x+ O+ X- B
  2627. : p( P+ G) d$ Y9 W. m! M5 j  L* R& e/ z- ^
  2628. .DB $00
    8 n6 G2 |$ V& F7 t3 f) q5 g. F
  2629. .DB $02" S/ O1 x: H. t3 f, R
  2630. .DB $0D& ]/ ^7 F4 h1 O* d: b
  2631. .DB $04: r# d5 {+ J% E0 _4 s
  2632. .DB $07& z) R& F1 n2 X( c4 O* n8 q
  2633. .DB $0A
      M% e1 h) x% C
  2634. ' A% q9 B( }: y. w: v# E. `
  2635. 2 O# R& T' Q( o0 E% ~1 Z  z
  2636. ;==================================================( @& l$ x  V" G6 T+ d
  2637. Sound_Bank_A000                      ;专辑bank_A000
    6 C3 G* x; E8 Z# `. g
  2638. .DB $11
    * {; b8 _$ @, o* x
  2639. .DB $13
    ' `3 G7 g) ?3 _4 v2 e- ?
  2640. .DB $15
    9 }' b$ a$ d7 z5 F7 [
  2641. .DB $17
    0 M$ e& W7 p! J. D' i. u! d5 j
  2642. .DB $199 d8 P1 X" m5 O- S( _6 h0 _
  2643. .DB $1B
    - z( o# E0 R; G' i( ~
  2644. 1 B3 s: h& A9 V( ^7 g/ c1 o
  2645. .DB $01* c2 P5 z. f6 ~" d
  2646. .DB $037 {+ T( T0 Y! ^2 Y
  2647. .DB $0E0 O- ?: S, j1 {
  2648. .DB $05
      c9 M8 y' S7 K6 c, @* Z" ~
  2649. .DB $08
    " I! R  {4 @4 ?% }
  2650. .DB $0B
    8 z6 G8 R3 K/ Z- x5 z- ~0 @
  2651. - |/ B' C2 A' p. F+ I- q  K
  2652. ! [! G/ Q" D, y9 M% L6 a7 p1 V: U
  2653. ;==================================================: f& a# T/ a# m5 T
  2654. .BANK RESET_BANK & BANK_DATA_MASK3 `4 E% Z; @- S: K" \. X
  2655. .ORG RESET_ADDR
    $ ~5 |+ q4 X$ D- D/ y

  2656. , ~$ J; S, }: ~$ C* P4 I
  2657. ;==================================================; d1 b) ?, Q& v$ [
  2658. Switch_Bank_8000;切换bank到8000-9FFF7 D9 n( I3 U" j% d+ p5 O
  2659. PHA" M. B/ T! E. ]% d+ U! \. ~
  2660. LDA #$06, a8 j# A( W$ q! i
  2661. STA MMC3_BANK_CTRL
    ! V# z4 g' A1 ]2 B0 V' n$ E
  2662. PLA
    & Y  O, P$ \) }/ H- ~
  2663. STA MMC3_BANK_DATA
    * C/ v2 d, R7 I0 O( m! t
  2664. RTS5 n( h) H' D3 W: j/ \9 J0 ]0 c  S, V
  2665. & Y; n# ]/ D- f5 j+ W% b& _
  2666. ;==================================================
    , [/ S/ S) v( V% z
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    6 a' Q7 H. k. s  M& ?, t7 N& O$ A
  2668. PHA8 p' [- H! {& U2 b% D; V
  2669. LDA #$07  E0 ^" `5 I! s  v, j% K& k
  2670. STA MMC3_BANK_CTRL
    ( }  @" W3 J$ m5 U
  2671. PLA
      Z. n0 W( s& v3 Y% Y4 Q
  2672. STA MMC3_BANK_DATA# k1 A& V% U  ]
  2673. RTS4 F( e1 A4 f: h" e- n, Q" f( s' ^* _
  2674. 0 ?! P% ~. y4 B) g8 M% s+ g; u" l6 m
  2675. ;==================================================! i4 r8 @/ n1 K. ]: p$ o
  2676. Switch_Main_Bank;切到主程序bank/ \: g5 g( ~5 x- A& ~( n2 ?
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK/ |* q$ \5 w- R
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    + @" o2 a' A+ U  @# \. U
  2679. RTS
    ' _, y+ n. s- F4 w5 t; Y; x! U3 _

  2680. + w+ J* ]2 J3 J: Y# x
  2681. ;==================================================
    . S$ ~8 ?6 P; L8 I( _
  2682. Sound_Reset;音乐重设(如果有的话)/ |3 ~% e" f# n9 U: ^' g' Y" y
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    - C5 Q' P' O( }; G0 ]
  2684. JSR JSR_Addr_Op        ;执行音乐重置: i  O# J6 ]" d* J
  2685. JSR Switch_Main_Bank   ;切回主程序7 p$ ~9 A+ v. s0 a
  2686. RTS  Q, Q/ ?4 [) S5 F0 \# I0 ?

  2687. 2 r, x1 [1 f; W/ x
  2688. ;==================================================5 q. y8 I' O% k9 m7 A' G9 \4 \+ \
  2689. Switch_Music_Bank;切换音乐bank, o# w1 @/ H( J' a0 i" V2 o# P
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号
    " T7 i3 `& G2 [" S8 z/ k
  2691. LDA <Music_Bank_8000  D5 ?: n) i, z& b
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank
    ; K! c' A% A) _$ M0 V9 ~
  2693. LDA <Music_Bank_A000) P* O0 T2 W* f6 S
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank# n: o8 T6 j5 `* {+ L4 x
  2695. RTS
    2 Q: s5 E/ U, ^/ S& r- b
  2696. ' N3 |3 o7 h, Y+ O
  2697. ;==================================================
    . J. @( X# K& p2 b. F7 O9 E0 j
  2698. Sound_Init;音乐初始化
    % s* E# e( g2 E1 U) l5 s" D  @( I2 O
  2699. PHA  L: x7 J- B2 u* s' X& f" r) c( h
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    - U! `0 e4 l5 y! g
  2701. PLA4 M8 J% D2 C" J8 C( R* ^* A
  2702. JSR JSR_Addr_Op        ;执行音乐初始化0 W( i/ n0 ~; ~, O! p$ k1 J
  2703. JSR Switch_Main_Bank   ;切回主程序1 ]+ I* c- @  ^% F3 w5 O6 g7 {
  2704. RTS
    # ?$ S0 r& P: D* q

  2705. , S- ?4 K$ J5 _5 L5 O- o
  2706. ;==================================================! a2 ^) @! `- B2 p" x; Y  q& k
  2707. Sound_Play;音乐播放
    ' @1 w+ j) s) Y
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    $ @- t; y. C  W% L
  2709. JSR JSR_Addr_Op        ;执行音乐播放
    $ d7 C5 ?& }& w6 {& R' h4 c7 A
  2710. JSR Switch_Main_Bank   ;切回主程序  z4 x  f$ h  F' c* d+ w6 c' o6 v. _
  2711. RTS% [" L& N+ _- y( G) ?7 B

  2712. 6 V5 B& Y- r! S- s
  2713. ;==================================================
    8 h( a  ?, k( I4 P  F
  2714. MainLoop;死循环
    / O$ l" _% I% h3 H6 |
  2715. JMP MainLoop; R2 s2 b" D2 t7 z

  2716. 4 b% @7 ~- K( m
  2717. IRQ_SUBPROCESS_JMP = 0/ Z4 `: I  j$ @5 `
  2718. ' h; K6 ]/ }* @4 |& w7 i
  2719. .IF IRQ_SUBPROCESS_JMP
    & W' l" l6 s' {* O
  2720. ;==================================================
    ; e0 m4 A; Y% p( E0 O1 d+ J
  2721. IRQ_Process_0;IRQ处理过程0" P8 I& ^( N9 v: l8 f

  2722. - p$ y7 Q, x# K/ W% Q3 Y+ M
  2723. ;15条扫描线后触发IRQ- p9 M" j; S( v$ n
  2724. LDA #15
    5 Z5 l3 s+ J/ i6 O, B# e# J
  2725. STA MMC3_IRQ_LATCH
    3 R8 y+ L: o8 |1 `0 V
  2726. 0 G: w! Q2 E! v% j
  2727. ;设置屏幕滚动7 U' }2 @: E$ O7 h/ D$ J4 v; v
  2728. LDA <Scroll_H  |& C  n6 c5 x# `# _" W
  2729. STA PPU_SCROLL# D0 m3 X1 B, ~+ l0 I
  2730. STA PPU_SCROLL* n' J) O. N6 @9 b/ W+ l2 Z: u) G
  2731. " w# Y8 H- Z9 P& e8 M- r5 c
  2732. IRQ_Process_0_End
    6 K6 S- N3 Z' N1 C6 Y& Z
  2733. INC <IRQ_Process_Index
    0 ?" Q. E0 x  x4 ~8 U1 u0 ^. y
  2734. JMP IrqProgramEnd
    - Z7 [) W* b! O0 S2 l; s

  2735. , R2 h/ l/ c$ {+ z+ h, f" f+ G
  2736. ;==================================================
    * G% l( p) R6 E; a. U& l7 ]
  2737. IRQ_Process_1;IRQ处理过程1  c8 x. Z- Z1 D0 e+ h. A* }
  2738. $ x1 ^- l* i4 G! X1 t
  2739. LDA #551 D5 }, E- J" G6 P! U1 a
  2740. STA MMC3_IRQ_LATCH
    % [6 @9 T' Z0 _* G; C1 }

  2741. 6 z7 {" C9 R2 x- l* o
  2742. ;设置屏幕滚动
      I4 B( Y0 n& p( _: P6 c0 [) i. S
  2743. LDA #$00/ E/ {! y% r0 \3 X
  2744. STA PPU_SCROLL
    1 v. c8 ~$ A* n! b9 S& k1 i
  2745. STA PPU_SCROLL! m! U6 N& f  R5 c0 ~; p# X

  2746. ! Q8 a+ `1 O8 Q4 d% l" `  S) ^
  2747. INC <IRQ_Process_Index
    9 [* j' M2 k4 p, `5 J
  2748. JMP IrqProgramEnd
    ! v/ E6 T! {5 C; d7 ^$ f: y

  2749. & Y/ |5 j3 o1 F
  2750. ;==================================================- K5 K, V' z. t. j
  2751. IRQ_Process_2;IRQ处理过程2/ K+ E4 p7 L6 ~2 @7 L2 K
  2752. 1 P/ g& t( [9 _6 a. G
  2753. LDA #15
    5 {: M' y: Z2 {; b8 D
  2754. STA MMC3_IRQ_LATCH: u* S9 M+ \6 Z# m! h3 x4 ]  b8 Y. H
  2755. ' G, k4 s7 h6 n/ }5 E/ y
  2756. ;设置屏幕滚动3 u% E( e. S* Q9 v* K
  2757. LDA #$00
    5 r* T. L/ [+ P- E
  2758. SEC
      b/ n8 M3 P" K
  2759. SBC <Scroll_H
    . f- P. a7 x) g/ q" l
  2760. STA PPU_SCROLL
    2 [8 }4 J6 V; v5 `+ u6 k# @
  2761. STA PPU_SCROLL+ F6 |5 @: T9 V0 ^. b4 ~. N
  2762. ) P6 o) H  s. }; G+ L( D  r* D8 v. E
  2763. INC <IRQ_Process_Index0 O) a- {" g9 {+ J! F
  2764. JMP IrqProgramEnd4 {% R2 l0 O* f5 y' |# `% [

  2765. ; L  }0 L5 W$ d  g7 c% p
  2766. ;==================================================8 S6 J& n  [; D3 F
  2767. IRQ_Process_3;IRQ处理过程36 T7 P7 Z2 `2 L# S, k

  2768. 5 b9 T6 q% O# G: N. ^2 C0 ]
  2769. ;设置屏幕滚动
    6 i* w, g  o/ T4 c# h/ k' I4 }
  2770. LDA <Scroll_H
    2 X5 ~5 X3 v; z* X0 p8 H2 t
  2771. STA PPU_SCROLL
    + r7 A6 o+ E  Z2 Q) ^
  2772. STA PPU_SCROLL
    7 u6 l* U7 X, Q& q9 O
  2773. / m* W( |# f. r9 t5 X! P
  2774. ;禁用IRQ
    + t0 |7 Z) E1 }1 _7 n5 F7 Q
  2775. STA MMC3_IRQ_DISABLE) i" g; Q/ O: j. J  |
  2776. JMP IrqProgramEnd
    ; J$ p* A; H0 @  H

  2777. 8 }/ b% {5 p' R
  2778. IrqProcessAddr- z: u% l, A2 _+ H6 B' u) G6 |
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    ) _) `) P( t/ Q- q" B
  2780. 0 _) e, r# |, Z( R/ P2 z$ g7 R
  2781. .ENDIF; U7 X8 U5 X1 e/ `7 F! w; l; X
  2782. ; R! ]+ t+ p8 s) v
  2783. ;==================================================
    0 q- d7 m( F( E( i7 _" s" {8 _0 f( e
  2784. ;IRQ滚动模式常量7 U+ p0 J- Y) {( ~2 i$ H6 W
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
      [5 m- J% Q: z% R" x" M* _3 P* }
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    * s0 u' B' x, }
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    ( r4 R, l: n: ^* Y4 j) g
  2788. * n- f+ t" w4 J* D, \, n
  2789. ;IRQ扫描线数据- V( Y3 m- z2 x! H
  2790. IRQ_Scanline_Data! ?& W& R+ X7 N9 f. ]
  2791. .DB 8
    ; x7 R- m3 w/ i2 D2 Y- _
  2792. .DB 54
      {( a; [. s% x, D" P
  2793. .DB 8
    + ^$ P; Q& P# f- J! f$ [0 u
  2794. .DB 00 ;关闭IRQ) g) R: W0 Q. @
  2795. 5 ~0 X. E& t- w0 X
  2796. ;IRQ滚动控制模式
    , @; c' s/ u6 p3 P4 f7 v
  2797. IRQ_Scanline_Mode
    + K# U3 A7 h" b0 l; o* G' h# S
  2798. .DB IRQ_SCROLL_MODE_ZERO( s4 l* k  i! w( q- D* s* N. x1 W9 K
  2799. .DB IRQ_SCROLL_MODE_ZERO* e" L- Z# W: L5 ]
  2800. .DB IRQ_SCROLL_MODE_RIGHT* y% h1 _5 W  \. G& N7 ^
  2801. .DB IRQ_SCROLL_MODE_LEFT
    3 K. w1 I+ s9 @8 F9 w$ k

  2802. - Z' R$ B* f) j1 b% u- Y. Y0 J7 k
  2803. ;==================================================
    - F, @- A( Z' I4 ^) I6 W4 W
  2804. ;IRQ处理
    " F% O: u) y$ X. g* b9 @  {$ [
  2805. IRQ_Process
    ' X0 F! s9 h/ |# ^
  2806. LDX <IRQ_Process_Index8 T: i% B5 b) r7 X" s- l( A1 K- z
  2807. LDA IRQ_Scanline_Data,X* j2 v4 b1 J2 g0 C% B0 [
  2808. BNE IRQ_Process_Latch
    - M* O5 |1 D) t, o! w& Q
  2809. IRQ_Process_Disable;禁用IRQ' T( Y# f+ c: R; ^) Q! B) h/ O
  2810. STA MMC3_IRQ_DISABLE
    / }1 h4 B* ?$ a- W& q; `! ?
  2811. STA IRQ_Process_Index
    ; O/ e& F9 \1 O
  2812. BEQ IRQ_Process_Scroll/ q$ G% M7 l& R6 c5 a
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线' Q) d( b$ U6 X
  2814. STA MMC3_IRQ_LATCH
    * t! b4 H: c* e" |
  2815. INC <IRQ_Process_Index
    2 y" F* J) P/ O6 O+ c
  2816. IRQ_Process_Scroll;IRQ滚动控制2 c, F- X! F: l
  2817. LDA IRQ_Scanline_Mode,X
    7 r) a0 K0 w# C  X$ v
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    - g' r2 h6 ?  u* }- g* z: {1 e
  2819. BEQ IRQ_Process_Scroll_Left
    * M/ K$ h" b. T
  2820. CMP #IRQ_SCROLL_MODE_RIGHT
    ! L; U; A: ^; P$ w
  2821. BEQ IRQ_Process_Scroll_Right
    ! H3 E2 a  ^9 M- t5 A5 S) Z
  2822. IRQ_Process_Scroll_Zero;不滚动
    4 m0 l. }& o4 J2 ]% e
  2823. LDA #$00  n8 i! k- ~$ Q7 K# B" R# Q
  2824. STA PPU_SCROLL$ [& W/ e( A' ~, o' E
  2825. STA PPU_SCROLL
    % `! Y7 L. j+ o  ^
  2826. RTS, c& L4 p# `; V! P( l
  2827. IRQ_Process_Scroll_Left;向左滚动7 n! \) ~5 J/ @% Y9 n; {! g1 D- F
  2828. LDA <Scroll_H
    , L+ e3 m% p0 h# h, J
  2829. STA PPU_SCROLL
    $ j2 d: B5 H- b2 n, v$ X: j
  2830. STA PPU_SCROLL# A' R3 n- w& z4 q1 r- X) M5 g5 i+ U, k
  2831. RTS
    / c7 E9 c2 K& H
  2832. IRQ_Process_Scroll_Right;向右滚动
    2 P. N' Y+ P( c" l1 q. a, n
  2833. LDA #$00+ [9 q$ v; n  c$ K
  2834. SEC
    # ~, ]) H$ E& J* r* H" _
  2835. SBC <Scroll_H
    2 i6 A" ?# e" m2 u  f
  2836. STA PPU_SCROLL% R" a1 U' o8 q" g. i+ ~" y
  2837. STA PPU_SCROLL
    0 K6 v8 c/ ]4 C  Q
  2838. RTS7 X8 y3 e; {# g; Q: g/ M8 Y& P
  2839. " B5 _, [6 v3 E% ~
  2840. ;==================================================
    1 h' c% W# W0 k
  2841. NmiProgram;Nmi中断处理
    , y- n5 \  X$ {0 j: S3 W3 J. p
  2842. PHA
    & X+ z; a8 k9 w
  2843. TXA3 h; Q: @) l. w- U
  2844. PHA
    ( W2 G( i2 d4 @8 T
  2845. TYA
    5 V, {9 I; q) _% o
  2846. PHA$ t# q' x  H6 I. u! T

  2847. & b, `( s; p  O( n
  2848. ;读取清除Vblank标志, 防止重复进入' |" C4 _! k: r2 y3 t1 F" U
  2849. BIT PPU_STATUS0 M) _) u- K& \1 l4 w4 S4 j
  2850. & k. z' a/ E% t3 L
  2851. ;切换主程序bank. m4 _" S! q) e5 z" b6 \" _' r
  2852. JSR Switch_Main_Bank
    ! H2 B2 S3 K+ P/ ]
  2853. 2 [* S% Q2 d2 l( w- F# ?9 ]3 Z! d; s
  2854. ;Nmi处理- F9 _' A+ l1 I' z- T$ W) m
  2855. JSR NmiProcess. l' W8 N, z, n

  2856. 3 D7 c2 v, P; ~' e
  2857. Nmi_Proc_End
    0 O% J5 A$ [2 t) E" J0 x
  2858. PLA
    6 j# \: ], Y) X" d* T6 A
  2859. TAY
    / Y" ]' |7 P* Q1 G% C" [
  2860. PLA
    8 l& r& J0 _( I; S8 g
  2861. TAX
    ) v4 v. w/ Z! n+ s) j- ]2 v
  2862. PLA
    $ C# i5 E( Y) y) n
  2863. RTI
    3 b4 G& r) F9 E5 P8 \. ~% A1 G

  2864. 6 _2 p0 g) q0 y3 o
  2865. ;==================================================
    ' O2 j% `3 v( |$ K+ B/ p
  2866. ResetProgram;重置中断处理) ]' t  A& x0 s$ W% W- d6 I! b/ C
  2867. SEI
    ) }. t* Y: a# O8 O
  2868. CLD
    , d1 F- ~  z3 A' H  I2 m+ ]
  2869. LDA #$00! j6 p/ s4 z8 L( U, p: ]9 _# q
  2870. STA PPU_CTRL1 A2 L. @( {3 f* c/ b0 X" }- |, f
  2871. STA PPU_MASK7 E% d- j; R8 c7 I/ f0 K7 ?

  2872. 6 K! @1 b& \  |: y0 S# s9 x9 ?
  2873. ;切换主程序bank
    0 K: _! X5 ~8 R1 S/ v" U' r3 P9 w
  2874. JSR Switch_Main_Bank6 p  s0 e9 z/ Z; E) _

  2875. : r7 R/ ^/ o8 S3 @/ C
  2876. ;程序处理开始/ W! y5 _( g" d7 ?" D6 c; K' w* a
  2877. JMP ProgramBegin% x$ L- G0 t+ m/ [# r& K8 z5 @5 i
  2878. ; C' \) j) P! f5 x
  2879. ;==================================================
    5 W( Y7 b7 T% N
  2880. IrqProgram;Irq中断处理( F# \5 `/ Y  }) X1 k3 z
  2881. PHA
    ( q7 Y% r' I- H) {
  2882. TXA
    4 x/ P! n* {; l5 G1 s+ y" K& }* b
  2883. PHA
    4 b; g1 l" S( E+ k/ _
  2884. TYA# B4 h/ r9 @* \$ |: A
  2885. PHA
    5 v/ ]+ B- ]: {  _

  2886. $ I/ i  D1 i8 s' m$ @5 _* i& Z0 y3 @
  2887. ;关闭IRQ. G0 S6 \- v+ U  w+ J
  2888. STA MMC3_IRQ_DISABLE
    ! N- a) }* W2 b* p2 W

  2889. 9 K; Q0 o" I' I
  2890. ;允许下个IRQ触发- C3 h' x8 D' @$ s% r! ?% G
  2891. STA MMC3_IRQ_ENABLE
    7 G) ~9 @' r3 ?5 p
  2892. " O( Z/ e6 c) T2 k! b$ ~8 O
  2893. .IF IRQ_SUBPROCESS_JMP
    ( O8 Q* r# _) `

  2894. 2 A5 i% \8 r) w- U: v
  2895. ;执行IRQ过程7 T( i- U# I" e5 ?
  2896. LDA <Data_L6 [1 y# q: k6 L4 m- S' b! s
  2897. PHA  C" V9 F: k! q6 O  x' D% W
  2898. LDA <Data_H5 r- G( a+ Y! S1 N* g2 M3 P
  2899. PHA
    ' S" Q6 a: a8 c5 q* u& o
  2900. LDA <IRQ_Process_Index( q+ P& i) ~* Y5 s1 m
  2901. ASL A9 p2 H$ p. T) K& r
  2902. TAY
    7 ]% Z- ~# x/ M$ Z  p& [' j9 E* `5 T7 u3 M5 A
  2903. LDA IrqProcessAddr,Y( Z+ V/ |9 E; N8 O  e
  2904. STA <Data_L7 T+ `7 p" @6 @$ m
  2905. INY
    3 x" c2 v3 \# }* F3 U, r
  2906. LDA IrqProcessAddr,Y
    - ~( O2 O2 y6 I5 X& p8 F; r7 P' T
  2907. STA <Data_H
    ' v. Q! w3 U* p7 a5 X- _
  2908. JMP [Data_L]9 E) J  `4 e0 [- A% X- F$ }4 ~

  2909. 5 N& _" e% H  S% F8 l
  2910. .ELSE/ S: m! f: c7 x& w7 ^/ {- I

  2911. 4 \  r3 h+ m$ @& C
  2912. JSR IRQ_Process
    : }, [" Z( w& l/ \- _/ p% |) b4 q
  2913. , G- A* Z' ~: G8 {
  2914. .ENDIF/ y% d9 l: R7 o1 ?& ^

  2915. & B7 }! Y' ~6 @6 v6 |
  2916. IrqProgramEnd
    / Z( [% K* ~* `7 A' n
  2917. .IF IRQ_SUBPROCESS_JMP+ m  n! E2 ?2 ^' V7 m5 v9 X* W- Q
  2918. PLA7 j" T, }) T  e
  2919. STA <Data_H9 ?! `# q  G9 }% n  \
  2920. PLA
    % p* s. ?# l5 T
  2921. STA <Data_L% T2 x, P0 H7 a) p' ~" ]3 H+ G
  2922. .ENDIF
    ( ]! A5 ]. [: n! |/ M
  2923. PLA
    , Q+ {8 Y4 n6 C
  2924. TAY
    , h' g0 @* K, s& U3 Q; E: P: v
  2925. PLA
    8 o4 ^! @5 z0 O' V
  2926. TAX
    + I( o* @" B' m0 `+ |6 N
  2927. PLA
    7 Y1 p% r1 ~$ L8 A# Y/ X! v) d3 r1 r
  2928. RTI
    8 b6 h2 j& @8 I8 x9 t7 T  ~
  2929. 9 L+ V+ K& _; E! R
  2930. .ORG $FFFA7 Z/ `5 A0 X! W
  2931. .WORD NmiProgram
    3 W; `! a* x+ L9 w( ^0 s* M
  2932. .WORD ResetProgram
    5 d3 S& C, A( Q( L) y3 R$ ~4 C
  2933. .WORD IrqProgram  m6 A! i# Q- M+ X6 H+ t9 J* D

  2934. . d  s, D+ l3 S* z
  2935. .BANK RESET_BANK & BANK_DATA_MASK
    6 {: f5 N5 S6 Q7 h
  2936. .IF SOUND_BAR_SHOW_ENABLE2 `/ Z, ]! D+ Y1 G4 q2 n, K
  2937. 5 W- u" _+ Y3 I* z& V
  2938. .ORG $FE00
    + n$ O( E! t4 M7 {/ V/ ]* F
  2939. PHA
    5 k) S! E3 T. ?" P
  2940. STY $07BA- x# ~# R- x, N: M2 d  a3 H
  2941. LDA #$8D
    ) k) b9 e$ Z  \, ^0 w; {% a9 k% A2 C
  2942. STA $07BC) J% A% d; o0 N' K% K( D
  2943. TYA
    9 P% C& z+ Y; {8 n% L
  2944. CLC
      T% K& C# B1 z/ L
  2945. ADC #LOW(Sound_Bar)
    4 h1 R  r3 p# P/ p: }+ v+ s" R
  2946. STA $07BD& ~  \% s" O0 }1 k5 `; ]: T
  2947. LDA #HIGH(Sound_Bar)5 Q& D8 D  F. [6 ^
  2948. STA $07BE# N  e% L' |; f" j2 ]/ B$ g" [
  2949. LDA #$609 P& [& j' @; `
  2950. STA $07BF
    9 G0 h0 {; X7 u- F" H* @
  2951. PLA6 B3 A: O* q# y7 n( I  K2 N- V# H: T+ E
  2952. RTS3 q0 C# n( s( S9 D

  2953. 1 n  W! C2 P4 i0 C8 N
  2954. .ORG $FE20
    & p1 R4 ^6 V4 y9 s4 d
  2955. STA $07BA
    6 E) x3 k' `* R8 \
  2956. CLC% s6 @6 p1 v) L! T: `- J1 }
  2957. ADC #LOW(Sound_Bar)1 P( T1 A/ }+ x# r
  2958. STA $07BD
    ! W  c. ?4 w! r: ]: N
  2959. LDA #$8D% p3 M, C# M$ D& v
  2960. STA $07BC
    . J/ \: n" s8 C8 n  q- `
  2961. LDA #HIGH(Sound_Bar)
    1 t/ Z8 L& q* ^0 M3 r
  2962. STA $07BE
    ( P* x3 R- v6 \- A. s8 C
  2963. LDA #$60
    + N& d" i% b; W! W! [" ~: z9 G
  2964. STA $07BF
    * `$ X8 y" N: o: {5 ~4 V3 ^- A
  2965. RTS& Z" l- O4 O" ~+ t
  2966. 5 j! W( T4 h5 W4 y2 M$ \9 ]* S
  2967. .ORG $FE40) H6 [* [2 Q" U5 X  G- F- S# k5 Y$ x, p  o
  2968. PHA( G. L0 O" L9 e$ O; `
  2969. STY $07F1
    ; ?8 C5 V! G* W6 P  G. F- T. X$ x& ~
  2970. LDA #$8D
    0 }( Y2 Y% s* P- \
  2971. STA $07F3
    5 w& F% e9 q) z
  2972. TYA
    & t0 e  y9 V4 E+ `7 O& Y
  2973. CLC
    & m: I% n0 B3 Z  {! w) C6 k
  2974. ADC #LOW(Sound_Bar)' Y; r* a, `. v' x. n2 f. S. O
  2975. STA $07F4) i" o( v6 K2 U
  2976. LDA #HIGH(Sound_Bar)* E$ f7 h5 X: T; q& L
  2977. STA $07F5& f( r( ~5 V! J& k: z8 J2 H
  2978. LDA #$60
    3 O# Z# ~0 [9 h9 y; `2 C5 @: @' I0 [
  2979. STA $07F6
    / u9 n# P  O! Q+ h. C: u/ n: @
  2980. PLA$ Q! C- a0 _6 D1 ^1 B4 P
  2981. RTS
    . ]5 ^0 t  h4 {( T# Q# x( a7 p( h+ V" |

  2982. : |# \# D( A+ w3 G
  2983. .ORG $FE60
    - J" b7 G$ U; [3 F1 C+ m( O" J
  2984. STA $07F1' Z9 t) I2 e# M- I
  2985. CLC
    5 T9 w: [7 g2 O! M5 u. x
  2986. ADC #LOW(Sound_Bar)$ E" f# g9 x) [" K! m. O
  2987. STA $07F4
    , |" h0 N$ S! \+ N! k7 {$ P) m
  2988. LDA #$8D6 ]3 y% ^; A# v5 s+ d! M+ _" M
  2989. STA $07F3# g! i5 E# W# P2 y6 [
  2990. LDA #HIGH(Sound_Bar)4 a# a9 D, r( w" m
  2991. STA $07F5
    9 i! e7 y5 ?$ b
  2992. LDA #$60
    % h3 N8 k5 h) d: A4 Y3 ~% V
  2993. STA $07F69 g5 {7 k( s$ B6 i
  2994. RTS
    5 n7 B- O/ l# k9 }* A  p3 y

  2995. % F2 o9 l( ?' G2 C- D' y! k0 p
  2996. .ORG $FF40
    ) Y0 c2 a* M; Y: i! _! {1 G. ]8 @- R5 K
  2997. STA $4000
    3 [9 \, S& p# c6 _! S; }
  2998. STA Sound_Bar + $000 w8 [# H* [5 J; f: r2 s3 I
  2999. RTS4 m, Y6 y7 I' y0 u5 ^1 g% t

  3000. 6 w( z$ O4 Q2 k% E* v3 t
  3001. .ORG $FF48. W; Z' J4 P. `
  3002. STA $4004
    . y, Z! b8 v5 w$ J9 Z5 Y
  3003. STA Sound_Bar + $04& K% ?8 y' c6 s: Y: i9 |
  3004. RTS! S% J3 z5 o! b' }3 ?" f( S8 U
  3005. ; o* r! \4 B2 m9 T0 N2 O
  3006. .ORG $FF50' V: V/ c1 g8 `: O* A
  3007. STA $4008' @4 w1 s. d1 P- `9 \! i$ @
  3008. STA Sound_Bar + $089 M6 u% G7 G3 p) |' v0 E9 d
  3009. RTS
    , f" {8 q  l( F! Z2 I

  3010. ' S7 y" [3 c7 g8 V7 A
  3011. .ORG $FF587 w$ V  U3 \0 @
  3012. STA $400C( A1 \4 M- ^- ^- y* x
  3013. STA Sound_Bar + $0C
    - c. e7 e, J: Y: v
  3014. RTS
    # z2 X& c% I! B# z5 S) P
  3015. 0 u8 C( V' ~1 w7 D8 P2 a
  3016. .ORG $FF604 S9 r# x' j1 O$ x) }3 k, X
  3017. STX $40000 j, R5 y* G' D: g6 k) j
  3018. STX Sound_Bar + $00
    % ~  v0 W; a8 R8 l: y; \1 r- b# Z
  3019. RTS. a6 W% F; R$ ^9 W! I2 S+ B; P8 t
  3020. , `4 t3 N: g" R; ^! t; w* }% |6 F
  3021. .ORG $FF68# |# j' b: B5 f, Y1 ]6 o! |: a7 V0 ~
  3022. STX $4004# Z7 ^$ G4 ?4 B% V6 C
  3023. STX Sound_Bar + $04
    4 ?1 K7 m, [5 L1 q' @6 A9 ^" {' `
  3024. RTS
    : u3 s- z% u& C8 R  d
  3025. 9 Q! G* N" ^. u. i9 ]% I8 d! g& b
  3026. .ORG $FF70  d; D: `2 B8 |- `) O5 T$ c
  3027. STX $4008
    9 c9 E7 G& A2 Q7 \4 J
  3028. STX Sound_Bar + $087 A% g, a* x; U. D1 x; a) e
  3029. RTS- i0 B, G. O& W5 j' a0 W( g

  3030.   ^6 r' w/ n# l' C  E
  3031. .ORG $FF78
    2 {  R" p4 {+ N0 x- [
  3032. STX $400C8 J- L  {; T1 {
  3033. STX Sound_Bar + $0C
    ! T+ w9 D  D/ o7 q# L
  3034. RTS1 E2 `/ x. e1 Y6 I6 K
  3035. ! ]$ d! {7 r5 ?
  3036. .ORG $FF80$ S9 S+ N! w, ]6 \9 E9 ]- J
  3037. STY $4000
    ; V# Q8 k2 S8 Z* T6 }6 [  i; h
  3038. STY Sound_Bar + $00) i& Q8 f2 f2 }' [3 g/ s+ E7 L
  3039. RTS# c9 W! d- i# _1 L! i- }/ g8 ^) x

  3040. + d' Z; {7 F" j3 l
  3041. .ORG $FF88
    + w* S3 A9 S8 @9 V0 k
  3042. STY $4004
    , r5 X3 g, x% m5 y2 J  }: g
  3043. STY Sound_Bar + $04
    ( z, l: `  N+ X" M; L* c: p7 k
  3044. RTS
    - }' Z- U' A$ H; l
  3045. 8 q" h6 M! z" J8 z
  3046. .ORG $FF90
    ( l7 \7 Y) r" t
  3047. STY $4008
    & d& v2 }1 ^( I" s% y
  3048. STY Sound_Bar + $08, Q& ]! c0 ]- E- D0 M7 }- I& L* |
  3049. RTS
    ( |* `! g# W' z( N

  3050. % [* M, P9 [3 \& b( d. P
  3051. .ORG $FF98( u  P- |; v6 l. Z
  3052. STY $400C
    2 x; C2 d$ v4 C, B
  3053. STY Sound_Bar + $0C
    7 T4 s  E  u1 G( G& l
  3054. RTS7 J2 |% }, O7 m- M! W$ W% B- [9 S

  3055. 8 l: {; j7 o; L3 d& U
  3056. .ORG $FFA0( A8 t2 w3 A" L4 J
  3057. STA $4000,X
    " O  n7 a! K. a. o" l* t
  3058. STA Sound_Bar + $00,X) ^* i+ Q, [' a6 ~
  3059. RTS% J& O2 H7 ^1 ~" \1 t( ?! g- k1 ?3 J1 O

  3060.   f; `' ^+ M  o# G0 r& r
  3061. .ORG $FFA8. R% J- _+ b1 m
  3062. STA $4000,Y
    1 Y! }- N2 R+ T" N6 E
  3063. STA Sound_Bar + $00,Y
    ! f  P) f7 [9 @( _  h, `
  3064. RTS. a9 }9 U( @/ l8 Q6 F6 u4 c$ [

  3065. 3 F. y6 A; K/ n' Y2 s
  3066. .ORG $FFB09 q' u) x4 [0 [: f1 s
  3067. STA $4004,X1 v! q) K$ Y4 p4 U& G( b9 m1 Q' C
  3068. STA Sound_Bar + $04,X
    , `+ k, [: U* c; R
  3069. RTS
    . R) h& L6 W% j
  3070. ; ?' }, \$ l% j* M4 D! S+ c
  3071. .ORG $FFB8- N4 Q9 E/ b8 f/ D6 Y) J+ [1 m
  3072. STA $4004,Y
    + b4 E  G2 l4 ^
  3073. STA Sound_Bar + $04,Y
    % I+ n$ j. _) U
  3074. RTS/ n  ~' c6 E2 P
  3075. 2 v6 r* P2 Q. E: h: j7 K7 X
  3076. .ORG $FFC0* }9 U% F6 H& w0 R! c4 t/ s
  3077. STA $4008,X
    6 t9 Z) O( P$ p8 P4 p
  3078. STA Sound_Bar + $08,X
    " A. m5 @9 P9 L5 {2 A
  3079. RTS) E2 C# F* Y5 x

  3080. 8 k& y5 q  U  [5 a  R1 n
  3081. .ORG $FFC8
    & W& K! s# V1 w7 H% E
  3082. STA $4008,Y' `+ T$ u  [4 D. C# S  _8 v
  3083. STA Sound_Bar + $08,Y
    ! Q1 V; p% {; s+ ?4 k3 z/ A; Y
  3084. RTS% F* U# V0 k8 T, I3 J. g
  3085. - D+ c* j8 }) ?$ `
  3086. .ORG $FFD0
    9 N" |- x$ \- O! ]
  3087. STA $400C,X2 t% a$ X- K1 F7 |+ X0 g; [7 o
  3088. STA Sound_Bar + $0C,X2 e) Q0 A9 Y9 }1 ^4 d& ^: C* G4 b
  3089. RTS' S* a( Z# x' n8 j8 y+ [8 A* S# q) g0 y

  3090. ( f: U/ m9 Z$ L4 U+ A# f" ^) |
  3091. .ORG $FFD8
    1 d( y# L; Q! o* E0 Y* {
  3092. STA $400C,Y
    ; d7 V- n+ J; Y, l$ A7 a
  3093. STA Sound_Bar + $0C,Y! t7 E+ l6 P5 T# v, Y, J* N
  3094. RTS
    4 I; g5 ~! V; d1 ~
  3095. ( A, v* X8 s2 W9 R3 @6 B
  3096. .ENDIF
    ) C3 z' n, ]8 d
复制代码
( O- J/ {. S$ N$ u: w
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3383 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 05:41 , Processed in 1.125000 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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