EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑
8 W+ {1 F: V7 T9 B# J9 j/ ^' d) E6 n! M9 j
[FC][音乐12 IN 1]
- L6 v, _$ ^" }0 g时间: 2023.07.23
$ E8 X6 B8 o1 s作者: FlameCyclone
4 u4 n8 f1 S! M
/ j* v# m# Y  E0 {$ R收录音乐内容:$ U$ u* |5 P- C6 B, X  `1 X
1.Raf世界
) x- t& l! |+ u2.最终任务. H: c6 `  ]5 q# s
3.赤影战士
8 a9 d$ W6 U+ X. U) b7 ^: ]4.双截龙
" _6 h7 E& V. T0 t5 ^+ a# b! C5.双截龙29 t; b' J, @6 [6 }
6.双截龙3& D1 A9 F  N  _3 r. c  N; z
7.洛克人
# S; X; y2 |' j1 R2 C8.洛克人2
5 q6 Q; i$ p- e* b! ~1 q9.洛克人3
2 d0 I- n, F/ I: K# j2 \+ z10.洛克人4( W/ F( B% E. Y4 o' c4 O
11.洛克人5
! [$ M& O! c2 t/ I1 S12.洛克人6
8 t, J  u* T8 g( B" {& s% S4 O7 Z
操作:, {: `# b2 l( x2 w9 _2 L
上键:         上一个专辑
# L6 x9 j' \) t5 W  q下键:         下一个专辑
; k% B3 ^- t- m# F' c" I# |* n左键:         上一曲1 w6 \  l( G1 R- a" V  o+ Y1 R# U5 g
右键:         下一曲
  \/ d' M+ r3 }3 b  n8 ]! [; q: kB/A键:        前10曲/后10曲6 F( z0 F( R! {& d2 h
选择键:       下一页
- d. E5 ^! r- Q  l开始键:       停止/播放- f3 G' f% T6 }" R: F3 X; I

; `4 A) j0 c0 P2 N8 Hhttp://flamecyclone.ysepan.com/
: X" |4 F, G" n
8 m0 g$ O; w) v. d" a+ q0 P8 Q) o! k) W# L# j0 H& U

* v. C; Y# @$ h$ G
+ }; G! u6 J& U9 @: T0 O
  1. ;[FC音乐][播放器模板]- b- N9 @) i( l/ B' \5 Z
  2. ;FlameCyclone 20230710  D+ z9 ^+ z% v1 E4 ^% g
  3. ( J& v- {! u# O# \4 B, a2 j
  4. ;文件头' @. F$ U9 l& w, B( v: t' C
  5. ;======================================================================
    ( M6 A2 G4 h3 y  f
  6. .INESPRG 16                                             ;16KB PRG 数量
    : T: u, s8 m1 \! D$ e( W- k
  7. .INESCHR 1                                               ;8KB CHR 数量# P0 c' v0 K0 l/ S9 i
  8. .INESMAP 4                                                   ;mapper 47 |2 z, K6 m/ S3 B& N
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直0 n9 n5 X4 Y! V
  10. * e6 u3 }1 ^2 `- f
  11. ;==================================================
    # C: i1 N- L, R% m  |0 n
  12. SOUND_BAR_SHOW_ENABLE       = 1
    $ P$ A; P0 x, ]  c
  13. ;==================================================% ?  f% c5 }1 |+ N+ }& `6 T4 u
  14. BANK_DATA_MASK              = $1F, g1 ^% Q$ Q% g7 H
  15. CHR_RAM_ENABLE              = 0
    - a8 d( T8 `& `% B' P, x  `5 e
  16. IRQ_SCANLINE                = 136
    7 f7 a( U6 A) L
  17. ;==================================================
    % O  q; v- G7 {3 W- c
  18. SOUND_DATA_BANK_00          = $00
    ' B- T: T0 P5 e" C  ]# u6 e- R
  19. SOUND_DATA_BANK_01          = $01$ x8 |! m( T6 ?( ^9 m
  20. SOUND_DATA_BANK_02          = $020 v" y) C0 L. N, }' S3 N9 D
  21. SOUND_DATA_BANK_03          = $03
    $ M- o% z! d, b2 O4 p' G; d: i% g8 b+ z
  22. SOUND_DATA_BANK_04          = $04: j4 @+ V% u4 x% |* E) _. X
  23. SOUND_DATA_BANK_05          = $05
    " [! p8 E8 {: k: v+ ]
  24. SOUND_DATA_BANK_06          = $06
    5 G, h4 M# x6 h
  25. SOUND_DATA_BANK_07          = $07  B  `' Q$ e& W/ d6 W' z" Y$ l
  26. SOUND_DATA_BANK_08          = $08  a0 |0 F& Y7 @" |5 h+ k/ m9 [
  27. SOUND_DATA_BANK_09          = $09! l' S" S8 |) ?5 U  [. S* o
  28. SOUND_DATA_BANK_0A          = $0A$ {1 Y. t  L! a0 n: s/ J
  29. SOUND_DATA_BANK_0B          = $0B/ C0 K2 Z% o! ]- p( i
  30. SOUND_DATA_BANK_0C          = $0C2 J2 k, `" s8 @$ }+ F
  31. SOUND_DATA_BANK_0D          = $0D' C4 ~5 |: @% p( X5 n
  32. SOUND_DATA_BANK_0E          = $0E: `& g! _( ~/ c  N1 G$ Z) w6 c0 N
  33. SOUND_DATA_BANK_0F          = $0F& ^: W& k" a* w! o* @5 I2 ~% V
  34. - C# T! N. v& ]7 ^* R
  35. SOUND_DATA_BANK_10          = $10
    9 _0 J: J/ C) F
  36. SOUND_DATA_BANK_11          = $11
    5 c8 x" P" t/ @  w0 Z9 g
  37. SOUND_DATA_BANK_12          = $12* ]6 w4 f* ?( f* K# a: ?" j
  38. SOUND_DATA_BANK_13          = $13
      I" L' n* _, Q* M8 H; n6 I! l
  39. SOUND_DATA_BANK_14          = $14
    5 f6 w: n! ^( W7 ^; m8 x; J; F7 t0 S' Z
  40. SOUND_DATA_BANK_15          = $15
    * ~$ N, T+ f& O& x9 g) ?0 l  b
  41. SOUND_DATA_BANK_16          = $16
    - F; I+ H' Z' _( x
  42. SOUND_DATA_BANK_17          = $17
    & F6 O% K% v! I. ?# K) q  P. b
  43. SOUND_DATA_BANK_18          = $18
    ; l2 H3 C2 H+ D1 \
  44. SOUND_DATA_BANK_19          = $19; m: V8 Y% d% a: G
  45. SOUND_DATA_BANK_1A          = $1A
    ; X4 s, K& Y- l% ?2 T0 z
  46. SOUND_DATA_BANK_1B          = $1B# T& ]$ ~. ?6 I; F
  47. SOUND_DATA_BANK_1C          = $1C: |1 |: y, ]* l2 s& F
  48. SOUND_DATA_BANK_1D          = $1D
    ) B# T6 ^+ V( N% R; d" }8 N  R
  49. , e8 o4 I. i$ ?$ [
  50. SOUND_DATA_BANK_C000        = $1E7 d* C( E! j. |6 h& c' B  A
  51. SOUND_DATA_BANK_E000        = $1F
    ; s- ~+ r% `) M' S4 p1 t1 t
  52. ;-------------------------------------------------4 s2 j7 M, m( h5 \' b  B6 b8 ~  p
  53. CHR_DATA_BANK               = $20( @: a6 k, B: }- r/ {7 T: X
  54. CHR_DATA_ADDR               = $A000
    9 U' g9 ~& f: }9 W6 t9 g" H( i% ~
  55. ;-------------------------------------------------+ `8 L! }" w0 L0 M
  56. PROGRAM_BANK                = $00
    # H7 {/ @9 N; T% U) G! ?
  57. PROGRAM_ADDR                = $8000
    , V2 Z  U* F& m, D7 k  K
  58. ;-------------------------------------------------
    / L7 b" z$ S3 q. U
  59. RESET_BANK                  = $1F; |# @+ |9 ~) M" G2 ?; b
  60. RESET_ADDR                  = $FD00/ J$ ]0 p1 k) b3 q/ G; A

  61. 5 C: G) j, b! l. c& p5 ]
  62. ;==================================================
    % y: b5 b; @& ?- Z# ~
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数; @2 v: M0 ?8 M7 {3 ]
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引2 }; `7 t1 `4 t" Y  X
  65. PAGE_SIZE           = 5                     ;每页节目数
    - E# m% d, `7 ]( N& j( }
  66. 3 o) ?2 F( I  l3 K2 E& [
  67. ;==================================================
    . z9 N1 g# t' h$ Z# T/ U, d# w1 U
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除4 R) U6 C( ?9 ?9 b; d/ T* E
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数
    . P# q$ l; \' \% O7 T4 Y7 L0 ?0 N" }/ a
  70. .ELSE7 l0 O3 k  M& B; t+ Q
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数
      f" p$ O- S1 h4 w
  72. .ENDIF8 X' `# j3 L7 z7 y0 ?
  73. % c& C( h4 ?- I/ |
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
    5 m2 ]( _/ @; F
  75. # ^( @0 i4 W3 t5 e' T- M
  76. ;==================================================. S5 w' T% Y8 M" s: s
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置! D: n6 d1 ^0 S1 \+ _( ?
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 21 f" ]) b/ x0 W  Z7 O
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;2 O3 B% G) \4 G! F2 g( ^- t. }
  80. ;==================================================
    " ~8 ~8 Z! x& W4 a3 \- S
  81. Caption_Text_Pos    = $204D ;标题文本位置! x. X1 l+ g7 W6 i
  82. Author_Text_Pos     = $2324 ;作者文本位置
    & z. r3 s1 L! F& n5 w6 n+ k% ]
  83. Date_Text_Pos       = $236B ;日期文本位置- q: {8 O2 O% \5 U' N
  84. ;------------------------------# }! m/ h8 z$ b2 J
  85. ;------------------------------& m( z. m/ i6 I
  86. .IF SOUND_BAR_SHOW_ENABLE$ ^: L6 B0 e9 h7 E3 w
  87. 9 q6 \# {  z+ z5 ?2 Y- v2 X
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    ) j- n% k- ~( @" n
  89. Play_Time_Pos       = $22B3 ;播放时间位置
    $ Y$ Q* l4 W; z, i9 w0 Q9 k" U2 v
  90. Play_State_Pos      = $22F3 ;播放状态位置) s) x9 E$ B5 L
  91. % w; D+ n7 i( l9 }& m6 `
  92. .ELSE
    2 ?9 l9 ?/ l7 F/ _1 ]; Q6 G
  93. 6 R. H7 s2 l8 Y' }
  94. Play_Index_Pos      = $226C ;当前曲目位置
    % i' [. y/ D' u4 v7 }) Q+ g2 U
  95. Play_Time_Pos       = $22AC ;播放时间位置& Y7 [( p  U! X# y
  96. Play_State_Pos      = $22EC ;播放状态位置
    2 p3 _7 Z% N) Q+ ?% A  C5 O

  97. + o0 h9 d) m5 u( q8 _- G" F
  98. .ENDIF' M! N  \/ o2 i' X# ?  ~) J, L
  99. ;------------------------------6 E+ ?! Q+ p/ X0 y5 K1 R
  100. Track_Name_Pos      = $222B ;曲目文本位置
    " c9 c3 q3 c% p9 |/ ?. }4 K  `
  101. ;Track_Name_Pos      = $00 ;曲目文本位置3 S' `$ n8 u4 H* C
  102. Sound_Track_Pos     = $2265 ;声道文本位置0 C* M6 G3 {2 j( _
  103. Sound_Bar_Pos       = $2269 ;音乐条位置8 ]# }, q2 C# z
  104. ;==================================================" Y( S" u/ U& V8 q
  105. Scroll_X = $00
    3 F/ A3 n) a/ _
  106. Scroll_Y = $00
    5 T6 L  e+ \/ Q! d% o+ U" A, C
  107. ;==================================================( b  r5 |" C4 v2 X; L; u7 Y1 A
  108. Sound_Ram_Addr_1       = $0100
    8 s8 O: q- ^: }2 o2 r8 @7 r0 W/ f
  109. Sound_Ram_Addr_1_Size  = $80
    . B/ {( |8 W8 n, \. c! ]. R; T; p
  110. Sound_Ram_Addr_2       = $0090
      P7 |; T% f4 r2 f
  111. Sound_Ram_Addr_2_Size  = $70
    * L# A+ L5 {' _3 H# z' d
  112. Sound_Ram_Addr_3       = $0700
    0 Y6 j4 K8 F) n- A7 k
  113. Sound_Ram_Addr_3_Size  = $00
    # x. ]; \2 S( Q1 C* L
  114. Sound_Ram_Addr_4       = $0400# }, t: b# f: P
  115. Sound_Ram_Addr_4_Size  = $00
    % d) e  T/ ^5 `7 }" Y1 B
  116. Sound_Ram_Addr_5       = $05004 T2 q- q1 B% ^% l( d
  117. Sound_Ram_Addr_5_Size  = $40
    / W, X& B- b$ `3 v; l0 I( N0 ~
  118. ; R- h- F4 }) t- I
  119. OAM_TEMP_ADDR   = $0300* ?2 X7 T& [) T
  120. 8 U5 ]4 e0 y' v$ M% X& E- ]  }
  121. ;==================================================
    : e0 W- `8 \/ I" u
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    $ k0 T$ @; ^- t4 q0 {
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    7 W; E% ]- H2 L8 x/ e; i
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位" N8 j  c) I4 d! [7 `9 f; E; {
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1; i) I+ T# s, y- {
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    : ^! ]& R/ b! Y
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 : n, [# `2 d9 U- N. W& H
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加. @' S- Z$ p; ~) k* [+ ?; E4 o
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    9 X7 z: T3 J2 N4 P
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    % N1 T% V: B, Q* D' W1 t
  131. APU_STATUS              =   $4015   ;声音通道切换( q% c, W% I" b2 d( |$ R, W
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通: Y7 a( Z( J7 B& z
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通) ~  W6 J2 X; q4 |8 {
  134. ;==================================================0 G* C+ L7 g% o/ G
  135. MMC3_BANK_CTRL          =   $8000, e  ~, _+ e$ ~5 q6 q
  136. MMC3_BANK_DATA          =   $8001
    ' B5 ?( C; y  k% c( @' A
  137. MMC3_MIRRORING          =   $A000
    ! I3 Y4 {4 R. ]  y
  138. MMC3_PRG_RAM_PROTECT    =   $A001$ u! m/ M" E9 u& G$ S
  139. MMC3_IRQ_LATCH          =   $C000
    7 l9 ]1 g4 Y. x' b" z- E
  140. MMC3_IRQ_RELOAD         =   $C001* E' M7 l+ w" Y# n% ^) I8 J
  141. MMC3_IRQ_DISABLE        =   $E0009 V3 Q4 Y+ p' u  U- [3 y$ ?1 `
  142. MMC3_IRQ_ENABLE         =   $E0016 L7 j8 z$ y- \

  143. 8 |' s6 q6 `% p
  144. ;==================================================
    & ?  v+ }3 S. K2 f2 ~
  145. PPU_Addr        = $0200
    0 w" x; I5 h4 `/ W3 P  M
  146. Palette_Addr    = $02C0
    $ a% P8 Q0 I* F/ N( {% C
  147. Sound_Bar       = PPU_Addr+$E0) y2 s; T0 |- ^, _
  148. ;==================================================
    2 N8 F6 T' v( c4 H6 U4 G
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D
    : U1 X0 S5 f, S8 _' s; l+ _5 J2 O6 J
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$114 L; j) Q: [" B6 F
  151. PALETTE_UPDATE_MAX      = $2C
    ( D% F" _& k+ n" f4 ?
  152. PALETTE_UPDATE_MIN      = $215 A/ X9 `& o/ ]2 L2 J
  153. PALETTE_UPDATE_INTERVAL = 60
    : {" B6 p, m4 n4 P: {
  154. ;==================================================
    " P# v) S; D8 T3 y$ c! i
  155. Sound_Bar_Cnt       = PPU_Addr+$F0" G4 ~3 b8 o. g# F- ?: d/ Q9 _
  156. PPU_Cur             = Sound_Bar_Cnt+$02
    4 s, t3 F  C; t" @' A2 I
  157. PPU_Addr_H          = PPU_Cur+$03
    : @" G8 O* \5 g( Z$ g+ q
  158. PPU_Addr_L          = PPU_Addr_H+$04
    7 Q' n7 @+ G& f( M
  159. Screen_Ctrl         = PPU_Addr_L+$01( C" ^- c0 |1 ?3 ?
  160. Screen_State        = Screen_Ctrl+$018 v9 p$ C7 \' N/ B
  161. ;==================================================
    8 e3 O+ h5 _1 P6 y# I# t2 e
  162. Use_Ram_Begin       = $50
    4 v% H6 P2 z9 k: O& b2 d
  163. ;==================================================) ^. h  B2 a' d
  164. JSR_Addr_Op         = Use_Ram_Begin( I& ^$ b; ^% n  n
  165. JSR_Addr_L          = JSR_Addr_Op + $01  O2 p0 d! h& K
  166. JSR_Addr_H          = JSR_Addr_L + $01
    2 S" o1 b5 M- D& w# t* x
  167. JSR_Addr_Rts        = JSR_Addr_H + $01
    7 c7 e! N6 Y3 Q- W( C
  168. Data_L              = JSR_Addr_Rts + $01
    6 B' ]: z; I( h/ w+ c: W+ Y
  169. Data_H              = Data_L + $011 [7 g0 x  J# z) p- D
  170. Data_Cnt            = Data_H + $01
    ) r  t+ N: i% \$ H' X- f4 W9 c
  171. Data_Buf            = Data_Cnt + $01
    7 c, Q% x8 w. I. h8 m! ^" z  \
  172. Nmi_Time_Count      = Data_Buf + $01
    1 i* x# _: R3 o
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01/ H- H+ R! s' ]% a' F1 c
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $015 ^- Q* u, B% j: ~: ]
  175. 9 u* e; W  P" f- |# R, y
  176. ;调色板刷新标志
    & |" |5 {. N& r* Q
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01
    6 b& [+ p" x+ F/ }

  178. ) X( p) ~4 x7 }  s. O" k  Z
  179. ;当前帧文本写入禁用标志2 J$ W+ F6 }# @; N$ s
  180. Text_Disable_Flag   = Palette_Update_Flag + $010 X$ i# C) p% B# i3 @0 J: {% A

  181. 9 b5 _; m) Z. @
  182. ;==================================================9 m4 E4 C) {- D- _& n5 s1 [
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动
    $ R! Z, E% w( @# z; B2 F) `
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条  v( C; a& \5 ~& `0 e( a' A1 G
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间4 p" R# q- a% A: ]2 l! W1 w$ T
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    $ i$ P# ]( L/ ]( n
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间8 T$ z- M0 m, Z8 \' y" G2 d; D' E
  188. ;==================================================
    0 e2 f+ U) O$ U' w; Z; r) _: `- p3 Y
  189. Key_Keep            = Text_Disable_Flag + 15 l. B% F' O7 z( d4 }% w3 e) C% P7 h% u
  190. Key_Once            = Key_Keep + $01
    % s7 t' q2 \: I" K
  191. Key_Kemp            = Key_Once + $01
    9 \2 f! A# X3 t- D& q: s$ [
  192. Key_Temp            = Key_Kemp + $01! v' [- n9 z+ F  c6 ~6 K$ s
  193. Key_Getv            = Key_Temp + $01
    4 v( g/ _# ]& u* E$ Z
  194. ;==================================================
    * T8 u0 s1 N/ {7 {& w5 z  H
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集# B- `! R3 ?5 S
  196. Music_Item_Last     = Music_Item_Cur + $01
    2 U/ W* X% }- ^6 y% O- X
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集3 g% T/ a( B  l* E
  198. Music_Cur           = Music_Total + $01  ;当前曲目( E- m/ |+ U) n6 i4 ?
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目. S" _5 E( ]$ q& ]( |
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态  V) a0 W& w% q' b/ a2 n
  201. ;==================================================1 L8 [4 P, Y! D/ r* g+ i
  202. HEX_Data            = Music_Stop_State + $01
    1 i- e, }4 A; G4 f! B7 O
  203. DEC_H               = HEX_Data + $01
    9 C- Z2 p$ O% Y  w0 |+ X/ o
  204. DEC_T               = DEC_H + $01
    . i5 n3 ?- C" `( |  R: [& Z
  205. DEC_L               = DEC_T + $01, Q0 \0 w/ y+ h  ~* E; H
  206. ;==================================================4 M/ x" N: a/ k
  207. Time_S              = DEC_L + $011 z9 t$ n  j2 j
  208. Time_M              = Time_S + $01
    2 g5 G& h/ q# {' j8 i+ C
  209. Time_H              = Time_M + $02
    * Y+ U' ?; c4 I
  210. Time_Cnt            = Time_H + $03
    ' x' @, i9 _5 l! \# Q3 m

  211. . D3 b/ i2 D) @: F/ W5 H7 h
  212. ;==================================================8 u$ W+ P) a8 ^2 M
  213. Music_Bank_8000     = Time_Cnt + 1- u! Q. _# W# ~8 C
  214. Music_Bank_A000     = Music_Bank_8000 + 1
    ! C% t# m& h0 ?8 I) R
  215. ;==================================================
    ) c6 h+ V& [: H9 v
  216. Scroll_H            = Music_Bank_A000 + 1
    7 _2 n& g4 l% G, {! k
  217. Scroll_V            = Scroll_H + 1+ B: n: e. `2 @  E! ?8 f2 M
  218. IRQ_Process_Index   = Scroll_V + 1
    9 Q. P% ^2 S( R7 [7 Z" @5 C
  219. ;--------------------------------------------------/ h; n  _) h& |
  220. Page_Cur            = IRQ_Process_Index + $01/ A( u6 I: _* f9 e8 ~( T/ b! F
  221. Page_Cur_Index      = Page_Cur + $01( _! z# x7 i" q4 H
  222. Page_Cur_Cnt        = Page_Cur_Index + $01
    ' a+ l+ w  Q+ P: I( s+ u+ B
  223. Page_Last           = Page_Cur_Cnt + $01
    4 t9 |% n8 L' s$ H% v3 e$ H9 e! v6 l
  224. Page_Last_Index     = Page_Last + $01
    7 g' G# ~+ m- c& G- j
  225. Page_Last_Cnt       = Page_Last_Index + $01, C* c! Q/ q& m& u/ Z+ ?3 Q
  226. Use_Ram_End         = Page_Last_Cnt + $01: H* E( Z1 M9 ]" P! C3 w( r7 _9 J
  227. ;======================================================================& S, p" M5 I" G1 _) H1 c
  228. ;音乐数据块# `9 i; e, h8 ?7 v
  229. 2 V6 \/ d# E1 H- ~
  230. .IF SOUND_BAR_SHOW_ENABLE6 L: {& L4 T6 B  x+ s
  231. & }5 |2 c, C, u) W& I4 L6 [
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK" k2 W9 B" r, X) z2 V1 e
  233. .ORG $9000
    8 F1 c! u2 r+ W3 r
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    ! U7 O. d6 T' p- O: H- j2 S8 K

  235. ! D$ X! [6 W* ?- v* K" F
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    ; z  G5 U, Z/ S8 ]
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"4 ?2 N3 s3 D0 r" J

  238. ; O, Q* b* R6 ?
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK, S: M  `& I/ k
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"% g9 M7 Q: V7 |
  241. ' ^9 {) R9 d$ \% B. e' X, S5 ~
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK$ |2 p" W% g( t7 T! Z2 h4 l
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    ! W" G$ [7 W! Q3 l9 Z6 a
  244.   o& W: X3 ?4 m0 D/ A
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK% z8 K9 P9 ~5 Z8 |( m5 W! h
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"8 t+ Y; M) x1 Z
  247. 4 W$ a* K% Q6 j5 `, e! C4 y
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    ) s% T  V3 m. R$ l- m( J
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    $ j) q% H% s6 v

  250. . ~; R+ Z& z2 {, L6 W$ V1 p* A
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK: Y, y) x6 y+ u% u9 h" c
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"6 u: b4 G* f6 _7 G  r! B
  253. $ P* `- ?7 A. Y$ |- X+ M: s) W
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK- [& G9 |- B7 m2 r
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    1 Y' d- g: g. w) v6 n9 V5 ?

  256. ! z2 k* C* g. `  g& J3 y. w6 b. y
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    , G4 s2 Y% V/ O; L- N# X
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"" f& w% e$ h& Y; X* \) p

  259. " {* q) ]+ `8 K" E5 X( \9 ~8 _
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK; H( Z1 y( I+ u; X- W6 e$ b. S7 Q
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"; {" n* S' q- Z( L$ v

  262. ) A! S- w: N# x$ ]  \
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    ( ^$ C: H% u# G  @% [  p
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    ' i) a) m/ B) t9 o

  265. 9 p; C1 H" A- r
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    + C2 b/ K% X+ e1 F' s$ S
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    + `5 z5 ?% e( s$ Q& I% i' x. }
  268. : u0 r# ^  O3 v3 @, l3 T
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK1 x* P+ g% J) L  }7 Q
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"- L% L8 Z* ]  u: ~6 ~1 h9 @3 i
  271. / Y+ U5 H( F, Z- a! _: r# K5 `
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    ' [* C) L' \+ x1 \
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"  R4 B6 ~& `/ P2 M, d' |
  274. 8 n2 P% p) \5 B: C. p9 X
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK) Q0 {. E2 f2 P( v  a+ t
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"2 Q& o5 T; u: e- s3 z
  277. ( x5 p1 l6 d% f6 W! j* h( Y
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    & u& B9 B$ ?; E  b' \3 Y2 Y& ^. e
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank". {3 m0 H+ C8 i. [; d# f
  280. ! ^: H! J* D* o7 _) B# Z
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    - o2 h' J! j' {: b
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"' C3 ?$ O: i# j$ O$ o4 w

  283. % N8 F) e& {3 g! ^: D" j& Q: K. M8 w
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK3 N. i) J' z7 Y, o8 C
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"; c5 H1 R0 {9 V5 \5 Y
  286. . v- x5 \# o& _; M6 {- j  l% i
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK7 a4 L$ K" u( ~: e3 V5 {
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
    3 U# h/ Y4 L; U
  289. ' m- o6 q8 E8 B. \+ s' W5 Z' T
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK: _* n; N5 X0 _! ^: \
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"4 G4 k* t2 \: S( ]% t6 ]

  292. ( U' C# Q1 ^, C4 ]* R5 u3 ~* s
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK6 S1 U* V1 ^. I# W# R
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    * e8 c% E( N+ h: q1 T

  295. $ d3 @7 t: x& ^" O  z
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK. D6 a, ^5 `. V8 O3 N% e3 J
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"
    ) B1 v: {; f8 @. M

  298. % B7 X4 F: p( W  s1 E$ X8 S
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK" d4 _1 C* w8 h- e- O8 x1 h& O* h
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"0 B8 c+ J0 h/ c% i( y( E

  301. 7 a, ~& f' o7 f/ a8 \/ |6 ^4 W
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    0 ]6 t7 x% T6 Y% X6 n' H
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    7 g% Y9 V6 r0 S9 W% ~8 c
  304. 6 Q0 Z. f+ ?! z/ p
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    8 u# K% y  Q; B
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"9 K+ R' r' V$ z" E; d
  307. " z' t/ S$ w$ l8 B! }
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    - u; o" d" t1 F* Q" C5 x4 _" D9 Z
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"1 p+ R% ^, a* P+ C6 ~' D
  310.   D+ n0 t! Z4 R/ C& X9 V# N. a* ?5 F
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    + B7 b( s7 w4 @& t  D/ V6 h
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"3 l- f) {8 e) ^3 w! I& K/ ^# Q7 ?
  313. ' y3 u; N; J( W& B, W
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK5 O8 [6 q/ a3 }" l& \3 E
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    / r+ X% s5 W# b) I* @
  316. ! w. B' O8 Y/ ~) Y( J4 q
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ; P" V+ m9 ]' T- q  k! V* ~$ |
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    ' g. Y; ?" ?* G  q" r
  319. ) n- s5 o1 H  ]
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    , v' v- t; t1 [4 F/ j' ^3 V# G
  321. .ORG $D400
    ) E% a4 p1 {9 O# X- \. {
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    2 ]9 V3 g+ X; S8 Z* ^, m

  323. . F9 d7 C3 ~% y& d. `  x- r
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    : ^  K! V% y. B, o# Q
  325. .ORG $D800$ ~! J8 u& d* L/ {- A8 J
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    * P) ~$ B4 m1 _) N2 {9 `/ _2 H

  327. . d# V7 V" ]' g- F
  328. 2 |# L6 o( o; P
  329. .ELSE
    1 m, N% P' m' u$ Q6 T3 J

  330. # v0 z& J* B9 P& r
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK/ v  [+ r: P' W
  332. .ORG $9000, b( e! |. {+ F  h
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"/ s( _$ a3 a: j0 U, e
  334. 3 z+ N( i  r4 y
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK1 Y6 _* n. j( P5 e6 i; S' w% S
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    4 V2 @2 ]/ |( V  `4 w
  337. / \! ]6 `9 P0 n/ `& z: U
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK# ~$ L2 {; f# c2 ]2 f1 ~: \/ d' k& `
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"8 O2 x! B4 T$ |1 ?( o$ h! s

  340. " C1 U  Z$ e. ]' O
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    6 {; J5 o  p  K( C
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    $ |3 y6 C* B% z7 G/ R
  343. * u/ \4 ^) `2 G/ A, U% p
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    & s! ]1 @: G2 B+ q& N, N4 _
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    8 P* j7 f9 }3 s! o  h+ V! a) k+ p
  346. 0 Q+ s9 O; ~7 ]( j, J: w, D7 J
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    - P5 f$ g# I% q/ D. K! y
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"& U/ \1 w0 p$ Z% X2 f  F3 f3 V# F

  349. ! z5 c$ R( u& u& x" h
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK: O! u. R7 ?( R4 X, u
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"  D+ ?8 [% }5 O

  352. ) y) ?: ^/ i$ x
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK/ B+ s6 b! k2 Z# f7 O/ [
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    / F1 Y5 Q1 |/ H- m( ]- V! f. {

  355. - {! V: |, t9 {0 _& r
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    9 v9 a/ p- Q4 @2 M) y" C
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    ; E$ L( c( \4 W5 z

  358. : e' O+ W! O) \: ^( L
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK2 d3 I. r5 a: d
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank", _8 J% G0 X8 ?- J. f

  361. 3 Z3 V, M: [8 V8 l% B+ q1 v
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK$ V; h$ ^2 _: M- k( v+ M) R
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    & W5 R, P( [2 o( P
  364. / m; v& |8 L. ]4 z) G# `+ y  y; Z
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    ; C- H' H% V3 o9 y' L8 E: G
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"! D  j# ]9 ^$ O2 o
  367. # ~  q' f3 n! l: x9 Y4 b0 A4 x
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    / T5 ^. {: S' N# ]
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    * N9 j# C( q8 R0 s6 Z/ M7 l

  370. 0 ?  j% F1 @5 t3 x4 e- J( m; V
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK4 P  [. g+ ?& T! ~" o
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"
    % B9 l& `& k- H5 Z3 P# d+ `& J
  373. # u- R2 d' `) X3 V
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    * ^- Z. i& z2 z
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    & {8 n" R: S) [$ y
  376. ) ~, N# s' x2 j1 `" R
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK; C. U0 k4 ?& ^: f
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
      I4 t: q$ @; I8 C& v4 r

  379. , _6 Z1 [4 r  H) R' T) E# `
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    5 C5 }! K6 Z" q7 C% r" o+ `: `
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"
      N0 l% p) Y4 r* S+ A3 b
  382. , o! g, {8 ~1 K( R' F
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK# {0 \; m9 g9 o
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"3 d3 r5 C8 m) w' d8 L8 n8 u
  385. 4 Z% M2 L- ^% X0 A* r- ^0 ~) y  j
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK. \! W7 t' b8 U* E' L3 V1 p0 e
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    9 B5 [; I& \/ \" F' R0 ^/ h% ]
  388. , e4 G9 O3 _& S* s* Y
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK9 h8 J$ Q' B1 d7 m1 `+ B; e' @
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"6 K7 e' ]& F% a$ r  B7 Y

  391. . U) k2 h3 T3 X! z9 N# S8 M
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK/ t* T& N6 m# @2 w7 @% R' I
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    8 g6 h8 A6 [) W3 {$ [; R# j

  394. ( z7 Z5 w: I7 {0 r  {- Z. z
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK! I# ?) P  s9 U6 w* \2 s2 A" n' P
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
    ' z* L2 F7 v# I% {% D9 w
  397. 7 X& Q/ v  n4 H$ L3 N8 F
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    $ J5 u) q0 Y# D# J0 \
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"
    8 \: E2 g) o5 k+ k

  400. ' g+ {. U3 E) P- w  {, F
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    6 p% X1 P1 o! k- |- I: K# `
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    1 E, D5 y) B9 W
  403.   X( S9 i9 B" t* X+ S0 S6 }* S
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    6 B0 X# h- A2 G& N2 `6 K  M' R
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"+ P% g1 }3 I+ B9 {& S3 }  u
  406. 7 _! |6 P5 f; y: d% J" r
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    - q# r' q7 q0 {. v8 I
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    + j. ~) e+ c: |( k
  409. 7 u5 Z8 x- `1 Y
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK' A/ w0 [5 x- i
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    8 H9 J) e; S9 r) i) J2 x+ I# M

  412. 7 n8 {2 O' \& |) x/ o9 b5 w
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK4 I* M. R9 p5 Z; l( B- D8 Q# l
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    # L3 E- j* Q: V
  415. ! C1 ~& k- G7 i- \) b2 }
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ' F2 d- s" E# B+ _* v; E4 s
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    * Q& {8 T8 y& z( m8 i* M  w

  418. 4 q- |5 z5 H5 H* A
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK# }% |- k# T9 }* R( B
  420. .ORG $D400
    ' r8 T# I5 _5 _; E6 T& d5 s' J
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"' `$ Z& A  @9 t& G* R

  422. ! ~, v3 x2 B9 l% d
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ( u0 a1 p+ B% s/ `
  424. .ORG $D800
    ' C5 D' m. p) @- H5 w
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
      Z* A- ]) f. Z; W  w& |9 |/ R

  426. % j1 j$ T; n6 H- J
  427. .ENDIF8 m1 c7 o% a0 p) ]
  428. ! ?' ^) a+ W( K5 t4 I0 S. Z- V7 S
  429. ;CHR图形数据
    : C2 {, ~. T' _- b
  430. ;======================================================================0 K: V* h5 K( A4 ]- y" {/ j
  431. .BANK CHR_DATA_BANK
    ( w# f: l* ~6 o# }9 X
  432. .INCBIN "chr_bank/chr_data.chr"
    + F9 }! o$ O& b, C/ R! {
  433. " {8 e" _- f6 i' i
  434. ;======================================================================
    8 E7 V4 x2 T2 Y6 @: \
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK$ x& X: i, _5 W7 i" k/ p, m
  436. .ORG PROGRAM_ADDR
    # x2 g- j& N. T$ O
  437. 6 _- \/ s+ s3 G
  438. ;==================================================
    6 t9 o# E. b/ e+ Q
  439. NmiProcess/ d5 ^. A" j7 w. t: A2 j. l$ e

  440. $ c; q0 r$ h% ]* n" b8 A/ h1 I
  441. ;关闭屏幕控制
    7 T* e+ W5 }% o: m! R
  442. LDA #$008 W4 y9 f  H. ]) W9 x  I) t* V
  443. STA PPU_CTRL
    $ ^3 o9 l; ~/ n0 {* o
  444. 4 r/ A  G5 W- s2 W3 @6 Y; H
  445. ;没播放音乐就不需要触发IRQ; M3 r. l. z! {
  446. LDA <Music_Stop_State
    , K- \* f) b5 T8 |1 ]
  447. BNE NmiNormal
    & f% a5 j0 Z5 ?

  448. # P+ W) ~$ M2 Q+ Q/ r) S8 i
  449. ;重置IRQ索引
    4 a0 J# H2 i/ P; g+ C: p! S/ w
  450. LDA #$00/ V9 @* X8 t4 n) k; N) {2 p8 J0 l. Z
  451. STA <IRQ_Process_Index) |) D% [! e6 v2 @, w) i2 @! d% K4 A% ~
  452. + s" u, l9 o: z+ l! f+ b# T3 E
  453. ;时间秒数为空则跳过, H6 p* T1 S. E* i  K. N7 ~
  454. LDA <Time_H2 E( d1 L, C% B* U" @3 `4 `
  455. ORA <Time_M9 i" V2 x; `) P" D- H3 |
  456. ORA <Time_S4 s7 o* ]1 I% X' R% U2 ]; @% D3 W0 N
  457. BEQ EnableFirstIrq. w; x1 M# n7 G7 v

  458. $ s* g; t; H- h* W3 U1 O
  459. INC <Scroll_H
    # ^7 F  o1 x6 K/ u  ~6 t, \6 S: Z
  460. 5 ^9 i, t; g2 D* I4 I* U
  461. EnableFirstIrq / o' t% x& w/ `) t3 @' W
  462. ;80条扫描线后触发IRQ
    5 B  m( L& @, {
  463. LDA #IRQ_SCANLINE. _' i- |! c( B( |: c
  464. STA MMC3_IRQ_LATCH
    , `3 G. l, Q( u) O
  465. STA MMC3_IRQ_RELOAD' C$ h+ J' t/ d& O  t
  466. STA MMC3_IRQ_ENABLE/ ]* E! ^1 k1 C- ~8 |& Z
  467. CLI
    + @, c0 L4 W& D5 K
  468. $ x  Q' U* t/ @) u+ Z8 r: z; f5 }; d3 z1 G
  469. NmiNormal7 ~1 e2 o- B& ]% e) J/ P
  470. 1 X/ Q8 W6 D; l% G- U( r
  471. ;处理PPU图像
      K6 F2 ]0 s6 O+ [
  472. JSR PPU_Proc
    - x/ Q* c1 b' T# d+ z
  473. , `( F6 f7 ?' x2 Z) h
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)2 R* H3 T9 |% x5 R5 L5 x
  475. LDA PPU_STATUS
    ' t. c7 }! f- o1 z/ p* S. m# @5 N
  476. ;LDA #$00+ m* I9 Q) x% K1 P" D/ M3 k  C
  477. ;STA PPU_OAM_ADDR/ a0 X; l; p5 g6 O. r
  478. LDA #OAM_TEMP_ADDR / $0100+ S9 W0 V& U, I
  479. STA OAM_DMA9 G" H# `' O- g, w; x+ L

  480. 4 ]% h8 o8 E! ^; C/ m
  481. ;启用NMI中断
    " v8 q: c* F7 w  R$ b+ [2 p
  482. LDA Screen_Ctrl( O# W7 m' g0 J8 V& Z+ f. N+ S) r
  483. STA PPU_CTRL
    / t* ^/ g$ M  r1 x& [( F9 S
  484. & d9 o, |, a& P$ G- o
  485. LDA <Text_Disable_Flag
    : I. Q6 w2 Q+ q0 V
  486. AND #TEXT_DISABLE_RAM5 i: W$ n1 n6 m& V" B
  487. BNE Nmi_Sound_Play
    4 q" u. s3 @0 A2 t/ P# ~& Q
  488. & }* b& q& u2 Q9 \- c, F8 `4 u
  489. ;处理手柄输入
    : o6 h5 x# H% ]( J& i! }
  490. JSR Key_Proc4 U% s! \4 Z& q5 e' v- P4 X
  491. 5 O) I( b$ {3 C6 z) L7 l+ x8 F
  492. ;切换音乐(手柄触发)" @: `& t( e$ t. m! @& f4 l
  493. LDA <Time_Wait_Cnt- j/ T7 o0 ]2 x4 D+ P
  494. BNE Nmi_Cursor_Arrow2 k0 p8 R. ^. [" N1 N* Z( C  J/ }2 S/ K
  495. JSR Change_Select_Item
    + O, p! C8 a* e/ L  f6 \1 _
  496. / {1 _2 K' X2 H! {
  497. Nmi_Cursor_Arrow/ c! W- {) f+ r( l7 E; k- t, m) m8 J
  498. & |* @; a+ a' K& x+ `/ t
  499. ;处理光标箭头" ~0 g" o2 |0 ^) U
  500. JSR Show_Arrow
    5 m5 D3 k. r7 q% X1 \: ~
  501. % O  [, ?0 n2 L7 w5 ?
  502. ;更新调色板( d, p$ P9 T3 |: O2 ]4 n: r8 b) Z
  503. JSR Update_Palette_Data
    0 g4 F) {3 e8 ]: x
  504. : J3 V2 G+ }3 f, g* h
  505. ;显示时间(缓冲)/ K7 Q# _( t- s* O9 {  P  B
  506. JSR Time_Show
    # s" A0 \# p( }6 D6 O9 D

  507. 2 f6 m$ Q( a+ k
  508. ;音乐显示(缓冲)
    0 Z, ^; P9 b) J, C7 o+ c: p( A+ W
  509. .IF SOUND_BAR_SHOW_ENABLE
    8 q* \7 h& h9 T: R* z# O7 C
  510. JSR Music_Vision
    5 u2 ^/ X7 ]8 s
  511. .ENDIF6 O8 A7 \8 n; w& T, U3 y8 ]
  512. " ]7 l8 P6 y! L/ g
  513. Nmi_Sound_Play! p! H& v- ^, V" p4 G  Q5 ~
  514. ;播放声音
    / Z3 y6 v6 g1 U( t- W0 O# ?
  515. LDA <Music_Stop_State
    . e6 ^$ a9 D" {: }
  516. BNE Nmi_Time_Wait_Set
    & z& `1 j; ~; U. `
  517. JSR Sound_Play_Proc
    % ~6 H. r7 Y% c  l0 Z0 j: }

  518. 5 i- I2 Z1 ]- ^9 c6 i1 K
  519. ;播放计时
    6 ^4 z4 E. f8 o- Q* _
  520. JSR Time_Count4 H) ^3 V; s. V" Y

  521. 9 a. _6 a3 @+ _) Q
  522. Nmi_Time_Wait_Set6 T5 m+ h6 W. _7 A5 l' M3 v
  523. LDA <Time_Wait_Cnt$ ~" k4 h3 b1 p; Z- U
  524. BEQ NmiNormalProcessEnd, N7 j- W' |9 A# W1 z7 ]9 \
  525. DEC <Time_Wait_Cnt% C- d  L1 P1 S2 W
  526. NmiNormalProcessEnd
    % M+ U/ d! D+ i

  527. , w+ C1 w/ T. v; d2 }; j; ^
  528. INC <Nmi_Time_Count
    . g  l- t. z3 T* w6 t4 F1 {
  529. 8 K# C/ [7 K# b) o
  530. RTS) y8 p( H$ W1 A6 ~- m4 p% y( n
  531. 4 w# s' q6 V& f$ p7 U9 h
  532. ;==================================================
    , n# H* ]& T- _
  533. Init_MMC3
    6 F) i5 O4 d' k$ D' U( |
  534. ;==============================
    ( T7 l$ [) E% l
  535. ;禁用IRQ2 m7 K* {1 ^6 S. n$ r/ q; ~( O
  536. STA MMC3_IRQ_DISABLE  G/ R- i- d, i& A) F: V

  537. ) u1 k% J2 h5 T! k4 _
  538. ;水平镜像
    $ m% U% U- W! M
  539. LDA #$01
    $ i8 O* y# _  p% B7 ^; G
  540. STA MMC3_MIRRORING
    " t( W" v7 `  S6 c
  541. 3 a, F+ k6 Q6 Y7 M2 t
  542. ;初始化图形bank$ q) ~+ `! W0 G  U7 ]
  543. JSR Init_MMC3_Chr_Bank
    ( i% a# A5 ?* e: v" o
  544. 1 H, t& e5 {' R/ Y) ?
  545. RTS& f& B0 @% M  c
  546. ;==================================================
    3 a& ~/ [- |/ N0 z$ |
  547. ProgramBegin;主程序
    : @1 Y( y7 W$ _- E8 q
  548. LDA #$00
    * X2 [( i# S' @; T. [
  549. STA PPU_CTRL2 o8 b8 ?% G. x& s9 ]( m  ^+ T) P) K
  550. LDA #$00
    . c' w. E8 I) e! [  S7 |# t4 H
  551. STA PPU_STATUS
    6 ]( N. [, ~# T: l
  552. STA PPU_MASK" w3 {1 Q* v' J# R( X' i. Y
  553. STA JOY2_FRAME
    2 B9 f( b& L7 B+ {$ L9 i9 n( M; L

  554. , U" o0 E5 W0 H" h9 u/ e3 `: ~, [' P
  555. STA PPU_SCROLL9 \5 \  H8 R3 B- `" d
  556. STA PPU_SCROLL' z9 \& }- i- T$ ~. L7 ]

  557. - _2 b# o0 [' w
  558. ;==================================================
    * i7 ?/ C3 Y- I' Q4 ?
  559. LDX #$FF' i4 r) f* V  R  k
  560. TXS2 |1 Z, W, Z/ H$ o0 H5 O* y
  561. % b+ X' }! t7 x* T/ \
  562. JSR Init_MMC3- z( W% O1 j. `* j

  563. 3 V# Q0 l1 W: N" `8 |$ j
  564. LDX #$026 G; b7 }' e, H2 H/ a
  565. Check1/ K" w( E$ h5 W+ K  F3 u
  566. BIT PPU_STATUS* r' N5 M" u; ]' u# J
  567. BPL Check1- {3 C1 a* \4 |$ I4 f
  568. Check2% O( f" }' h0 G; \
  569. BIT PPU_STATUS# c% g. Q0 h0 @1 K
  570. BMI Check2  M$ p$ w" X6 h/ W& \$ l: T
  571. $ T- W1 U. s, q/ [# U. [
  572. LDA #$0F
    6 V4 |* z' b5 i+ x( d. \
  573. STA APU_STATUS( Q' n- [5 U% ?* z' L. B/ t- M
  574. LDA #$C0
    ; A; [' K6 B. h+ Z8 ~7 q
  575. STA JOY2_FRAME
    : X0 m: w# D) B# F1 z3 S* v. p

  576. 0 H1 c( h4 w5 W( |
  577. LDA PPU_STATUS% Q) j, y' g# T8 C2 [4 Q" d0 v
  578. LDA #$10
    7 K5 d4 L5 T- G. `; x& {
  579. TAX
    . m1 x1 ^  N/ D0 [- M
  580. Check3
    & ~! P7 \1 J: s. @: G5 B1 h
  581. STA PPU_ADDRESS% ]( l8 a% w$ L7 v) [4 k0 a8 V  v
  582. STA PPU_ADDRESS, K6 E, F# X) K
  583. EOR #$00+ h, ?1 _1 b% L0 h% ], x
  584. DEX
    ! U3 k4 z( {) c5 b) b! `' R+ b
  585. BNE Check34 E6 M' Z9 z: J- F, }
  586. ;==============================0 d1 g2 Z' u+ B6 h0 q# T1 R! Q, q
  587. ;调色板清空4 J1 h' ]) g& I5 D: B4 y
  588. LDA PPU_STATUS3 J/ ^- S  ^; K
  589. LDA #$3F
    4 m- t$ |( F+ T% ~: Q' {, w8 L
  590. STA PPU_ADDRESS3 u: p) d% e- h" B% Z
  591. LDA #$00/ y& l% ~8 `8 ^- J* G2 D
  592. STA PPU_ADDRESS5 J9 ~( f6 z  a( H+ i" M
  593. LDA #$0F2 X. R9 ]8 u- T, ^5 C, {7 ?
  594. Palette_Clear
    1 c) a+ G( a) S8 o# i) k: |0 V
  595. STA PPU_DATA) r* U0 }$ U! a5 M3 e% h
  596. INX
    3 g0 [& a# n' X
  597. CPX #$200 n) h( a7 h# y: x1 }& p
  598. BCC Palette_Clear6 m% U2 f$ t+ t. Z
  599. LDA #$00
    0 K) I4 j6 t# d7 ]
  600. STA APU_STATUS
    7 \) V4 h. _( ~0 q' u: l, F
  601. ; F8 {+ v- V3 c; T+ d% F' b
  602. ;==============================
    1 N6 {% x. `. F5 \$ A
  603. ;RAM初始化
    ( P1 h' K% x$ l6 O" U
  604. RAM_Clear_All
    ; h. O! G/ H- Z6 G2 Q
  605. LDY #$00& ~% `7 z3 ?5 b3 _% e* n
  606. LDX #$08
    : Y8 U( I( _3 Z
  607. LDA #$00
    0 d+ D' K! R# ^' S0 I
  608. STA <$00
    4 j+ J- G- m; t1 ~) k5 I
  609. STA <$01- W6 A. s) M) r( @7 r( r3 x
  610. RAM_Clear_All_Start
    3 N! T2 b3 ^: {0 v9 {+ {1 |
  611. STA [$00],Y6 o8 U: j' d. R: I
  612. INY
    ) W# f, R  ?* O3 m# w* S
  613. BNE RAM_Clear_All_Start
    1 U( w- d/ B( X5 E
  614. INC <$01( J& W4 b+ ]9 k+ A
  615. DEX
    7 H2 v7 M6 s6 M$ w% O# ^, w
  616. BNE RAM_Clear_All_Start
    : B4 e! [3 O8 \5 E# s! ^
  617. * n" b- u5 f* L9 t
  618. JSR VramClear( o& `% }9 _- c) X( m: e
  619. JSR VramInit
    : X! `% R% e3 @$ [
  620. JSR OAM_Ram_Init
    4 X) J5 G7 H) P" r3 g9 z
  621. JSR Init_Palette_Addr
    % c5 y8 _: l/ Y* j5 I7 f
  622. # Q% [6 K) P1 G+ z3 B, P
  623. LDA #$FF6 R8 g: }$ W) O, ~8 l  p$ q1 y
  624. STA Use_Ram_End
    * }+ X5 P& I3 Z
  625. ;==============================
    ) X8 p! ~( e+ Z) z8 z
  626. ;初始化背景调色板
    7 S4 J( h" Q1 t$ [% ]
  627. JSR Set_Palette_Color
    . R, \  P, J% X$ I
  628. JSR Set_NameTable_Attributes
    8 \, s' j2 n+ ?3 k# o

  629. 0 ?5 N# J, o1 t
  630. LDA #$002 d0 c9 M) E* l9 |
  631. STA PPU_OAM_ADDR1 q- _7 F) P/ |+ s* M; q
  632. LDA #OAM_TEMP_ADDR / $0100
    5 w3 p8 s6 o# _& x
  633. STA OAM_DMA
    * T& c# W: n1 `2 ]

  634. ( X+ \' B9 H" G! M6 z
  635. JSR Sound_Reset_Proc; g7 D$ `' z7 b' o9 F
  636. JSR Set_Sound_Total- q: P* x  [. c6 S# ~
  637.   ^; Z/ V6 t& y9 f. n9 x
  638. Init_Start_Music5 J* m. w4 w  E8 M* Y  Z8 {
  639. LDX #$00
    ( Q7 e* X9 y# e' w5 `
  640. Init_Start_Music_Write
    8 O- @# \' p; e4 j- i& j' R* K
  641. LDA Sound_Start_Port,X$ u" k1 C# \) |9 D1 Z, i/ A, ]: Z# R& H
  642. STA <Music_Cur,X
    ) g; @# R* r% x  T# n  c
  643. INX) g, A; d5 v: D) Y
  644. CPX #ITEM_MAX_SIZE
    ; k( O* F8 H% j" O9 V5 p1 ]
  645. BCC Init_Start_Music_Write# t2 P5 M' k2 E4 S* C
  646. - z8 n* m9 U8 e2 U
  647. JSR Show_Music_Text: {. a0 A4 E: S& B8 Q, J* V

  648. ; y. C$ s# s8 H, A3 [5 N
  649. .IF SOUND_BAR_SHOW_ENABLE1 @* F' K; a- e& K0 g3 M* r
  650. JSR Sound_Bar_Text_Set
    : C& b6 K6 }( c# C+ O' J% R
  651. .ENDIF, r9 t0 N8 F! `! X/ Q$ G  O

  652. ! C: A" Y, _7 S+ D8 Y
  653. .IF Track_Name_Pos/ V3 P0 C5 i6 q0 A  [$ s# {
  654. JSR Show_Track_Info% h5 e8 T1 E# ^( U5 {  d
  655. .ENDIF
    7 J1 l6 H7 [5 {3 Q; w8 Y
  656. / Z9 p% C: h. a( L: E, k2 l
  657. JSR PPU_Proc( J7 I8 |  J" {% }  V, f
  658. + V: f+ w& k4 T6 a
  659. ;==================================================
    9 F" R# Q# w  c  L& r4 T* P
  660. ;音乐bank初始化 & ]. m; o/ c% f
  661. JSR Init_Sound_Bank
    & F0 z8 N, O6 w, a5 A

  662. " U; L( |" H) c* S9 y
  663. JSR Music_Show
    : O, z  k, N" M( m% C( o9 F% O
  664. JSR Time_Show6 C% q5 U% I* \/ k1 A
  665. JSR Music_State_Show7 j  H4 J: P3 f" ^) R7 i) V
  666. JSR Time_Delay. ^3 B' w" z, U- D; m
  667. 9 T! _* Q% q/ R7 M; |
  668. LDA #$012 m2 o7 F, |3 i
  669. STA <Music_Stop_State  A8 P; e  }& N! L! Z* @1 |
  670. ' E( \* b$ d' f, E) }, h: u
  671. LDA #$88$ u3 m( y3 }; s# h
  672. STA Screen_Ctrl
    3 Y; M( D0 ?1 T
  673. STA PPU_CTRL# n- D) T$ @& i  J4 Q& [: Q4 u- c8 \# i

  674.   N3 s) K5 I- U2 l$ }
  675. JSR Show_Page_Text0 \$ F6 A+ }2 ^' ^0 R* p( C

  676. 9 A; b5 s+ N; g# N# q8 u
  677. LDA #$10
    5 A& p, B4 W) y. Y; w
  678. STA <Time_Wait_Cnt" _$ {& @: i# y

  679. - e# O; v; k8 D$ C
  680. Wait_Time_Over
    : `& ^( ^9 d* `) p. b: G1 E
  681. LDA <Time_Wait_Cnt% S* [7 N% z3 h
  682. BNE Wait_Time_Over0 W. n$ d  S* t! a/ C

  683. 8 c* E7 |% G; Q9 Q$ ?
  684. JSR Show_Arrow# l5 S# t2 A2 }# ~" |
  685. LDA #OAM_TEMP_ADDR / $0100; m2 S5 c3 n- Q& y) x8 W/ s: B, ^* ^
  686. STA OAM_DMA
    : ]: @) J- X) ^7 I

  687. ( u& @9 b0 _4 ^+ d: a& y
  688. LDA #$1E% c/ C, V/ {4 L- z& X: E
  689. STA Screen_State
    ! N, m3 G. u; q( q! J

  690. - D' B& t# [0 N2 J+ W8 R
  691. LDX <Music_Item_Cur
    2 g3 S' Q2 S- c, {% L3 r
  692. LDA <Music_Cur,X
    ! C1 |" S4 O& \9 \+ u
  693. JSR Sound_Init_Proc/ V  }( l- ~( O. V' l0 \9 f
  694. ! A) q, Y; S  b1 M
  695. CLI" ~' E3 ^3 q! A! y
  696. JMP MainLoop
    7 d3 e' R$ F: D" S4 K

  697. ; V9 y6 s' {" T8 ?
  698. ;==============================( o$ Z& k; q4 N, a
  699. Time_Delay;延时等待7 o0 c; E; |6 w3 O
  700. LDA PPU_STATUS
    : {# I6 p! d% c* ?8 ?
  701. BPL Time_Delay
    ; t* @- w# J, Z, Y
  702. RTS" f9 a& e, J1 G
  703. % Z% {3 {( s3 q% o% n! [$ E
  704. ;==============================# B3 b  z5 ~% U5 s! t0 M
  705. OAM_Ram_Init;初始化精灵内存
    0 g, c3 n  Y* k; J
  706. LDX #$00
    ; G2 c( o+ Q$ j0 m: ]
  707. OAM_Ram_Init_Write
      J1 X- Y, K9 q% K4 z
  708. LDA #$F8
    ( T( X8 {$ D( w! E+ \7 d
  709. STA OAM_TEMP_ADDR,X" ?$ G% J& d6 z% K! H4 V4 v. S
  710. INX
    - w$ }" m6 U4 P% b$ }* e
  711. LDA #$F8
    ; G+ ]; e$ ]! g, |' k. s/ w
  712. STA OAM_TEMP_ADDR,X5 l: o% W3 A! C
  713. INX
    * }0 o, i  n" X& q7 u
  714. LDA #$00
    6 j  ?6 p9 ]( D( U7 D2 r8 j8 T
  715. STA OAM_TEMP_ADDR,X. f. d) A) I8 R) U
  716. INX- k/ `( T& y- e7 Q, b! S
  717. LDA #$F8' A  o  b0 T) d) M8 ?3 t* J
  718. STA OAM_TEMP_ADDR,X. h# Q3 B: K9 L; k3 M; I
  719. INX
    4 P8 _  u2 O# s, p: P3 {
  720. BNE OAM_Ram_Init_Write( A6 M5 |+ `+ h/ d* y/ y; B* ?
  721. RTS
    # P" h. G4 A/ l% r" c9 u( r
  722.   X/ b" i8 @! Z5 E/ N; O. ^, d/ u
  723. ;==============================4 `$ L3 D* h- A3 n& O' \9 a
  724. VramClear;初始化图形内存
      D: A3 u" I. g3 d( k" w9 ?  K
  725. LDA #$20
    ) M% @: O9 \: x0 p" m$ d+ ^
  726. STA PPU_ADDRESS
    5 l5 P9 D7 \3 E  ]8 M- K' |+ R
  727. LDA #$00# l1 I; o6 n% F) K4 I3 N
  728. STA PPU_ADDRESS, H1 Z% v! t3 }* @  Q: U
  729. LDA #$00
    ! e! Y' n, f+ o* D; Y3 z- ~
  730. LDY #$00
    ( L6 y0 I8 @" l& v0 p4 V$ C' }
  731. LDX #$104 L8 ?6 v' A% l' {
  732. VramClearWrite
    / x* y9 k# b/ A' l" P. Z! R
  733. STA PPU_DATA
    . e2 Z) E  R8 m, G8 B4 b
  734. INY
    / F; J) H+ ]9 q
  735. BNE VramClearWrite
    ) D) a  A" W1 w1 \: Q" @
  736. DEX/ J# \4 \- f6 Z, w# @" M
  737. BNE VramClearWrite
    , Z. g8 S9 P+ H0 r
  738. RTS
    + X9 \& Q; k; ^* x
  739. $ y, A+ V5 R8 o. k" ~! P, i1 k
  740. ;==================================================
    1 _1 z- d5 ?! q: R  ?+ _) u$ }
  741. ;设置MMC3图像bank: Y( G) V; Z' L# B, m) ?7 r
  742. Init_MMC3_Chr_Bank
    & G8 C  c2 @) \/ A" Y& n2 v
  743. LDX #$05
    * U8 |. b" c* B/ x) a+ Z+ g7 p
  744. Init_MMC3_Chr_Bank_Write
    2 G0 U- g. U# ~- @- ?% h
  745. STX MMC3_BANK_CTRL8 p- D$ b  n' u9 y0 a( p4 v, C
  746. LDA MMC3_Chr_Bank_Data,X
    1 b/ h" Z1 u6 N
  747. STA MMC3_BANK_DATA; Y0 T3 k) q# i" S
  748. DEX
    / N" h4 O/ p/ x0 x2 |
  749. BPL Init_MMC3_Chr_Bank_Write
    * e2 x( G. W% Z
  750. RTS
    / x5 A' o# s# i- d3 d+ s2 ^( w
  751. ;--------------------------------------------------5 S6 K2 s1 s% A, S' Q' C! {
  752. MMC3_Chr_Bank_Data
    * a5 y- J  {* l! _7 w; ]- ^
  753. .DB $00,$02,$04,$05,$06,$07
    9 e3 ?1 g. ^, @3 Q8 C! U3 z
  754. ; |- G7 }/ Z4 J/ N6 X
  755. ;==============================8 h7 R! i+ H' M
  756. VramInit;初始化图形内存/ k- `) i1 G6 d9 |+ ?1 v& Y
  757. .IF CHR_RAM_ENABLE9 a) e* b4 q+ f
  758. LDA #CHR_DATA_BANK
    , G- K# \" b2 n7 H' {$ r: \: ~0 E
  759. JSR Switch_Bank_A000
    % z4 e4 I- i. n
  760. LDA #LOW(CHR_DATA_ADDR)
    2 J! c( f! V- D
  761. STA <Data_L
    3 m" x: u8 P  \
  762. LDA #HIGH(CHR_DATA_ADDR)$ e) C/ ?1 F5 D) d" ]
  763. STA <Data_H
    1 L1 o9 j+ [% c% d9 j' d& R
  764. LDY #$005 d; K* A* K- {5 s) X
  765. LDX #$20
      M6 r* ]2 L% u" H$ z
  766. LDA #$000 a* k. E6 _6 P; X( P7 e
  767. STA PPU_ADDRESS$ _0 E3 D" B/ I9 i
  768. STA PPU_ADDRESS0 s5 X1 d& i6 |8 X# H( h" t
  769. VramInitWrite
    : P7 i! o8 u/ p3 A& w( Z5 K$ P* w5 h
  770. LDA [Data_L],Y
    5 [% S& @$ [+ F' u6 `
  771. STA PPU_DATA
    9 ]. V+ z- c: a6 w$ n+ ~6 Y2 Z
  772. INY& S+ }+ g% z. |1 V
  773. BNE VramInitWrite
    0 y0 g9 i* E( v; }' k
  774. INC <Data_H: `" g( p; L" x/ X+ X& `
  775. DEX5 ^4 P  ~8 M2 u0 K+ Q" Q
  776. BNE VramInitWrite
    6 K& L' Q( _! }0 a+ |% I# A1 B
  777. .ENDIF  Q/ I6 l, v9 C; v7 f, s4 I- Q
  778. RTS
    ( o3 h# V1 M' _$ |( G

  779. ' y) ]& I) q" V+ S- X
  780. ;==============================
    ! X, k( X- C( k/ @
  781. ;音乐切换  ?! s+ ~% h" r0 }5 v1 T& P
  782. Music_Play_Change
    - P2 h& X1 h2 h+ u1 g& U' o/ W- A
  783. LDA <Key_Once
    8 ?& `& ^6 n6 {$ D
  784. AND #$FF
    : H6 F" S6 P. h! F2 u+ w
  785. BEQ Music_Play_Change_Check
    & i3 y" J/ z* P4 J8 b1 Z7 A

  786. . b  ]8 L( S3 S. r6 X
  787. ;禁用音乐条刷新
    2 {" Z# o" E& J$ T5 X& _
  788. LDA <Text_Disable_Flag
    : f, d, s) N2 ], p" \  U* Z: O0 `7 z
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME2 [- g$ I& F) ^; I
  790. STA <Text_Disable_Flag
    - b: c: ]( ~9 e5 l4 ^$ b2 X' }( u

  791. ! H. p, @% [( {
  792. Music_Play_Change_Check; c% r, Q7 ?3 d% R7 T6 G
  793. Music_arrow
    . W) `& [$ t4 R1 _: l5 \
  794. LDA <Key_Once/ F- r/ G: l$ f; A& L& b
  795. AND #$0F) v; o: }  Y/ j& b& o  b, ~
  796. BEQ Music_Play_Change_End
    7 h$ Z' Q2 K9 s
  797. JSR Music_Track_Change* }! o9 j$ S+ v- b, A" T
  798. JSR Sound_Reset_Proc
    1 a9 `% v- ]  Q! @- m% ^. I: F
  799. JSR Music_Show4 M% O8 \2 G, z
  800. Music_Play_Change_End
    8 H5 p( ^3 K3 ~+ w) P8 P. P
  801. RTS4 x0 V4 R1 o( g/ N; c1 d

  802. * V/ u1 n, e+ t
  803. ;==============================
      T5 O" y: p9 m' y
  804. ;音乐曲目切换9 T/ K8 l- l% z  m% C' F, q7 z
  805. Music_Track_Change
    ; J* I7 T5 y) Y
  806. LDX <Music_Item_Cur- }% M/ n9 W: l" L: x6 I" `3 Q
  807. LDA <Music_Cur,X6 g: Q, O( N- f! G
  808. STA <Music_Last
    ; k: O+ {! {5 R9 j
  809. Music_Decrease
    / z2 T& \  ?+ z+ t: p# m* o
  810. LDA <Key_Once' ~( G! E% b: k1 A/ R, g
  811. AND #$420 `! E: @" F) m" H% i7 ?. w3 g
  812. BEQ Music_Increase* x" D+ S( h2 k; J% P
  813. LDA <Music_Cur,X
    ; W, k3 ^- T; W. w. y! L) n
  814. BEQ Music_Increase$ v7 x4 w1 p, \' P. L
  815. DEC <Music_Cur,X
    1 W7 Y% k6 H6 p6 l. t) }; {
  816. Music_Increase
    $ V5 z8 J! g5 o# L! J5 y' a7 z9 c8 }
  817. LDA <Key_Once, \" c  a" C. H' G/ B; r' A
  818. AND #$81% ~) q8 Z, y2 S$ H; B- J  Z/ M: i. j
  819. BEQ Music_Decrease_10/ x9 D- o/ i' l; t) g
  820. JSR Set_Sound_Total
    $ u/ k. t+ n* z3 ~
  821. LDA <Music_Cur,X
    & c* m' f% W5 G( f  Y
  822. CMP Music_Total
    # l" ^8 i% b2 |+ E
  823. BCS * + 4
    ' e% V5 h2 k" M1 o
  824. INC <Music_Cur,X! K7 n8 Q3 C# k: J% b9 d6 z
  825. Music_Decrease_10
      e5 B  m$ f3 K% X' D8 g/ ~6 K
  826. LDA <Key_Once% ?' z! @# }7 x
  827. CMP #$04/ e7 f( b6 z, b. z' I# f/ Y
  828. BNE Music_Increase_10
    ( E1 N& V% k2 d6 ^* m' Y0 h2 l" `/ T4 f
  829. LDA <Music_Cur,X9 X9 h( ]5 N( j2 T9 i& `  x+ v2 B
  830. CMP #10
    ' h6 h& q; O: A( L* m0 {* ]" p
  831. BCC Music_Start_Song_Min
    ; X6 I! _2 @" f) D
  832. LDA <Music_Cur,X
    - k# G) ~7 c3 s  E. z" h
  833. SEC
    2 G% L# k) L8 Y, G( c0 {
  834. SBC #10! b- c7 C- h9 W7 R. \3 V
  835. STA <Music_Cur,X
    . B0 G! s9 i  H1 \3 B6 b
  836. LDA #$00
    / i$ v7 E2 a3 P# O9 c& M+ C% M
  837. BEQ Music_Increase_10( m- g0 E3 b7 c( A1 A9 C6 v
  838. Music_Start_Song_Min
    ! C) R  A* u1 S' i. s% o
  839. LDA #$00: d6 `6 B8 L' H4 [3 x: \* p4 t
  840. STA <Music_Cur,X. }- t8 J5 P7 a, t8 b
  841. Music_Increase_10
    & }4 r0 t6 L, x/ F) g
  842. LDA <Key_Once
    + P6 T! Z4 @) i) W9 t
  843. CMP #$08" s  y/ L7 ^( n! ?, I5 ]7 r
  844. BNE Music_Track_Change_End
    4 u) d5 }' s* ~( x/ k$ S
  845. LDA <Music_Cur,X1 h3 P) F; H" N* H4 ~. Z1 f) B
  846. CLC
    * g$ |& T$ w5 P0 z; K0 u! c3 g3 i
  847. ADC #108 Y5 v+ e0 ~# A3 Y: C/ J( `
  848. CMP Music_Total8 x/ Z: A; n- U) y
  849. BCS Music_Start_Song_Max3 Y$ V8 u# X7 `+ @; A2 v3 ~0 p2 a7 O
  850. STA <Music_Cur,X/ g; d% U$ j& j+ l1 ~. `
  851. LDA #00
    ' z$ ^! A1 O& b4 v+ U6 q+ \  h9 l
  852. BEQ Music_Track_Change_End  ?  K# Q+ V% z( H
  853. Music_Start_Song_Max$ \  H0 |$ v+ ^' h0 T
  854. LDA Music_Total0 \5 j2 e1 c4 ^8 @! ]5 A$ v7 e# L6 g
  855. STA <Music_Cur,X6 c+ a; |9 K) A$ `; ~3 c* s
  856. Music_Track_Change_End
    1 P/ }( A- z1 W# f
  857. RTS) v% B; L1 [1 @/ m' ]

  858. 8 u! ]% r) ]$ o) R3 D* D
  859. ;==============================
    3 Y2 n7 m) K* v0 X  C& }7 h
  860. ;按键处理
    / v3 B! B7 [; {& s. ?
  861. Key_Proc
    ! o# _+ a) z: j3 {6 V* k
  862. JSR Key_Scan
    1 P7 M0 T7 K* _0 m  s
  863. LDA <Key_Keep( @% k9 h" L8 L+ l
  864. STA <Key_Temp. E% L+ v3 R9 H
  865. JSR Key_Scan! U6 g7 @% n3 n& u2 r  ]
  866. LDA <Key_Keep' M5 _4 ~1 S4 p8 N! G* `+ p
  867. CMP <Key_Temp; ^3 P3 Z) }" x. q* n) p
  868. BEQ Key_Get_Once
    . E3 K) i# N  k$ i/ q5 W
  869. LDA <Key_Kemp0 |. Y% C$ s3 _+ r! `$ Y
  870. STA <Key_Keep$ Z5 }8 v- M. {; |
  871. Key_Get_Once" ~! z: G4 N7 M
  872. TAY7 o. K7 I7 F( l" z
  873. EOR Key_Kemp
    ' _. y# V' l/ y) t9 ^+ Q  x
  874. AND <Key_Keep
    ( a+ O/ L) q1 d+ Y4 S% |1 c7 `, i
  875. STA <Key_Once# P4 ~" n! ~( `  \6 F. ?
  876. STY <Key_Kemp$ D9 J5 p8 A4 c% x5 y6 Y$ S
  877. RTS
    0 E# {$ f$ e9 R: F, S* R
  878. ;------------------------------& k# `8 r% [, G/ f0 ~2 a1 E8 x
  879. ;按键扫描: b7 B2 p) ?. X% E' Y: P+ p
  880. Key_Scan
    - s2 X/ X/ R; G3 y+ X7 f- }2 r
  881. LDX #$01$ K5 V! ~% f3 O' m( p2 |/ x
  882. STX JOY1_FRAME
    1 ^5 c$ W/ }( C
  883. DEX
    0 u9 Z: s# `9 N8 Y4 ?8 l7 p: p
  884. STX JOY1_FRAME+ }( l2 T8 s8 n4 M4 ^
  885. LDX #$08, b* _+ Y; ?4 }# H! |3 v
  886. Key_Value4 z6 X1 a# K& h
  887. LDA JOY1_FRAME
    ( E8 i2 S$ v# D7 K4 r
  888. STA <Key_Getv6 w- k5 B% I% R( i6 o
  889. LSR A
    ' Q5 Q+ p! Q3 Q& ~* k6 f0 \
  890. ORA <Key_Getv
    # X+ q5 h) t8 f8 G
  891. LSR A% l8 {( M" V  ?! l: c% r/ v$ Y3 {
  892. ROL <Key_Keep0 h' _1 P2 k* R7 J1 W
  893. DEX
    : p! z. Z7 S! P0 ~
  894. BNE Key_Value
    * Q1 r+ b* q$ W
  895. RTS
    ! {- _; H: T+ w7 d$ Q+ h' `$ H) z

  896. 6 K+ ~) ?0 q! L- }3 p
  897. ;==============================
    & z  l% q) |$ N7 f5 @1 {
  898. .IF SOUND_BAR_SHOW_ENABLE
    ( e7 W3 k9 o& L/ ?" H! e
  899. ;音乐条显示4 p( I# q0 D8 M5 J9 T3 O) V& i% f
  900. Music_Vision
    8 \1 d, L. A8 n/ F+ C3 p' d/ m
  901. LDA <Text_Disable_Flag
    0 z+ o7 e! ^! N; a
  902. AND #TEXT_DISABLE_ITEM
    9 `: R; a) X" K) y
  903. BNE Music_Vision_End0 c0 }9 _; N& p( g# k
  904. AND #TEXT_DISABLE_BAR
    + s% O: [+ Y) @0 D
  905. BNE Music_Vision_Set
    $ x" Z, q, a/ s6 [
  906. LDX PPU_Cur
    : @7 W, f" n9 v- n
  907. JSR Music_Animation# q0 t3 p1 z: Z7 g4 a$ V
  908. STX PPU_Cur  g6 Q* v/ c8 n; A3 q! E  H6 l" m; Z
  909. Music_Vision_Set
    - F# `+ t# k( t( V" M: Z
  910. LDA <Text_Disable_Flag
    * C+ g7 L6 g1 W4 C/ p+ M3 y2 _  A
  911. AND #TEXT_DISABLE_BAR ^ $FF. J0 n; g* r) E  v- A& X
  912. STA <Text_Disable_Flag
    7 o7 m% ^( n1 u- o9 y, l
  913. Music_Vision_End) \* M" x- @: ~1 t
  914. RTS
    ! R, e* @' r' H5 j
  915. ;------------------------------: A( G" d( ]; |# D  d$ C1 A8 x
  916. ;音乐条显示处理% _7 A  A1 Z% F# `' ?" d4 B; V
  917. Music_Animation, H# L- m( Z+ j: _. w4 }
  918. LDA #PPU_MODE_CNT_LINE
    ( z3 a) E* N+ L3 y" G& F" c/ c9 ^
  919. STA PPU_Addr,X
    & J7 B* ~: ~4 z* f  r/ F  {/ G
  920. INX- Y. F& I! u8 W  d
  921. LDA #HIGH(Sound_Bar_Pos)
    7 O! o$ @9 K$ {- l* a
  922. STA PPU_Addr,X
    - t5 [9 e( f% [; p( z; ~2 S8 H
  923. INX
    6 G: r/ a7 U+ \6 s" }) A
  924. LDA #LOW(Sound_Bar_Pos)
    , q4 ^1 o( X, C3 ?. X& Z) ^& u
  925. STA PPU_Addr,X1 z2 G1 r  X- N  d
  926. INX+ ~8 m7 x, y4 K+ s; T
  927. LDA #$08/ w, T( z" U* ?, W( N
  928. STA PPU_Addr,X5 d( G: U$ S  b! [
  929. INX8 C5 y$ R8 _0 m
  930. LDA Sound_Bar
    & L* k5 z0 {; A, w5 n( N# b
  931. JSR Volume_Convert
    3 D# X) J5 m# o- _
  932. 5 n1 H7 B+ G" I% a: B. j/ }( Y% Y1 ^
  933. JSR Volume_Set_Cnt
    8 N# H- ?1 c# |/ d: ^
  934. LDA Sound_Bar+$4& I/ p+ @9 L3 m) l$ b: i
  935. JSR Volume_Convert* Y1 O' u* }1 {! i, Z
  936. / w* R* v) ]. Z  s) E; T" `2 J5 t+ W
  937. JSR Volume_Set_Cnt! a% o' _* w  f
  938. LDA Sound_Bar+$8
    6 P7 ^$ I. X1 i) R; i9 L
  939. JSR Volume_Convert
    ' V# J" B8 L8 w4 G7 [  s6 b
  940. 8 ?7 z* L: N- W% l; N5 }0 _
  941. JSR Volume_Set_Cnt1 `7 x0 b! N/ U9 Z. T& ]1 R
  942. LDA Sound_Bar+$C! y* x6 N1 f4 V. R. U( z7 f+ Y
  943. JSR Volume_Convert2 w4 W. I/ Y2 @0 v; [
  944. 3 C  X1 @7 F& M! O# E& F9 o% Q
  945. JSR Volume_Set_Cnt/ L  r: L$ _0 i# |. U

  946. 9 h9 K9 L" t4 e8 ]" {6 l
  947. LDY #$107 Q  o/ q! a* t/ K# ]. {
  948. LDA APU_STATUS, z' P+ [3 s8 C0 u4 ?; Y
  949. AND #$10% _" C) J0 h+ S: A
  950. BNE Volume_Count4 y% r! C5 p0 W$ R; n3 ]; [
  951. LDY #$00' K3 K% p. W- D9 |8 \3 K
  952. BEQ Volume_Count# i" [& ?1 r/ B9 k! w! H& a& S
  953. 4 Q3 L$ G6 c) P+ U/ {6 |* |" b
  954. ;------------------------------
    1 y" J+ i% Z9 j( d& \! n( @% ~' b1 w
  955. ;音乐条处理8 i# V+ d# _! G; F& N
  956. Volume_Convert
    * ~, g  H3 ]- p3 S, b; s+ x
  957. AND #$0F
    5 T) @- a3 a- f# C
  958. TAY% I0 X9 f+ h/ u; _8 V
  959. Volume_Count% w- N; ]# b8 ?  d' I2 W% b+ n
  960. LDA #$08
    - Z$ a7 S) D& U5 A9 ?
  961. STA Sound_Bar_Cnt
    ( I" V4 V. c+ W* ]
  962. Volume_FILL% \. Z: e' F* c8 K
  963. DEY
    5 ?% {: R+ v, Y2 Y7 g! |& a
  964. BEQ Volume_Half
      x, f# B; @8 X
  965. BMI Volume_Empty% e: l' [5 K8 H2 v: E
  966. DEY6 b$ ?) E2 h  r4 E" E* {, V
  967. Volume_Full
    2 t) x4 e$ w8 K8 m! u; v
  968. LDA #$16
    - f' @4 e: L+ d" {, K$ e
  969. BNE Volume_PPU$ b# o, x+ A* W
  970. Volume_Half
      @9 n% F8 p% K! G2 G
  971. LDA #$15
    6 b- [* c6 f# p6 t8 y6 J; v
  972. BNE Volume_PPU
    " R! Z3 t  A! k% ^' X  c
  973. Volume_Empty' u! `9 I$ ~# Y$ Q) d
  974. LDA #$14
    ( @! z7 Q! j  `
  975. Volume_PPU& C0 {' X8 ~# b
  976. STA PPU_Addr,X  o2 b# n6 N" z  F
  977. INX
    6 j" A# k0 ?5 y+ Q( K
  978. DEC Sound_Bar_Cnt
    2 ]3 n# h  n1 Q8 y9 Q5 e
  979. BNE Volume_FILL4 U4 n, b4 ?8 _, Y$ C* z) A
  980. RTS
    ; U7 `: n! |* u! z4 U% w) G

  981. * w4 E" ?' P" C* U. h7 V: c9 ?
  982. Volume_Set_Cnt
    ' K1 Z2 i; V& Y6 }( j5 }
  983. LDA #PPU_MODE_CNT_LINE_NEXT+ f. m+ p8 H# v! Y. [
  984. STA PPU_Addr,X: j; K& Y2 E" Y
  985. INX
    4 `9 o4 J" |) w( i' z  I* n
  986. LDA #$08# {4 b+ [4 N* Q3 `. s5 z* B: R
  987. STA PPU_Addr,X
    ! ~6 i0 W: x# a, n
  988. INX2 ~5 e9 s) j+ W1 D( i
  989. RTS# r8 Z& X" z' g! u- _) q! [! S

  990. " R7 D; q+ f- b# U. m  E
  991. .ENDIF
    0 ?; i# J: r, V7 O+ D5 j

  992. 9 J) u7 G' o9 |# [! a$ p
  993. ;==============================% ~  V0 }" _6 ^9 W+ |, F
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入/ l" n( z3 @6 s- R+ y- e
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式3 k2 v9 E( W; S. Y1 e# t
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除
    , D6 U- {) ~8 }7 A+ w+ M
  997. ;------------------------------
    3 ]& z8 ?# ?7 U5 v* e) a
  998. ;PPU处理
    9 b! @" W8 `& Y* z! D1 n3 _% L
  999. PPU_Proc" K; Z* y2 A( E
  1000. LDX PPU_Cur7 M' [# z, k: p5 K8 b* X
  1001. LDA #$00; G6 A7 ]" D! }1 W) _. E* I, K
  1002. STA PPU_Cur% [& Y! `3 x9 D$ T/ T# }
  1003. STA PPU_Addr,X
    : B; v) [% L& L& l: ~! N
  1004. LDA PPU_Addr
    & q1 N1 [8 c  v; i8 N0 z$ o2 B
  1005. BNE PPU_Proc_Beg
    5 x  }. r/ E6 r; ~0 H
  1006. PPU_Proc_Ret
    4 Z( e+ D' s* H
  1007. RTS
    & {; h6 k5 {& L

  1008. ' S% i- L5 z0 N- ^* l7 E
  1009. ;------------------------------
    % v& w% S. \9 x/ J5 _# a, F- M! m- w
  1010. PPU_Mode_Return_Cnt  ;转下行模式) D1 {4 W! }( K+ f9 {
  1011. INX+ Y  E2 F4 i; r0 M
  1012. LDA PPU_Addr_L
    ; l( r' n/ D$ L+ S' Q9 |5 o. Y
  1013. CLC
    , o( r3 J1 L& z. S! C2 `" J- B
  1014. ADC #$206 t$ c$ h6 [/ O
  1015. STA PPU_Addr_L8 K& w& V; w/ I6 I
  1016. BCC PPU_Mode_Return_Cnt_End
    , j( {2 s3 j7 Q" T3 ?1 M' ?+ T
  1017. INC PPU_Addr_H1 X& c$ A/ U# C/ I' L2 `
  1018. PPU_Mode_Return_Cnt_End
    ! Q' c1 B2 w+ }) {; j
  1019. LDA PPU_Addr_H* Y5 Y4 H' o- B* b/ `, O
  1020. STA PPU_ADDRESS
    + Q+ n: b0 Z3 _2 H% L
  1021. LDA PPU_Addr_L+ O# z; a7 ^, g( d8 D( n  w
  1022. STA PPU_ADDRESS
    7 p! C  M2 O+ B$ \2 X' L
  1023. LDA PPU_Addr,X
    8 j& W, z' R- r( Z2 `
  1024. TAY
    ' I7 r4 W+ ?6 H; o# C6 M
  1025. PPU_Mode_Return_Cnt_Write
    3 r# c, R; e! t$ u
  1026. INX
    ! W7 l: E, O8 B5 H& k
  1027. LDA PPU_Addr,X
    4 G& n9 ?  G) s& P% R3 v
  1028. STA PPU_DATA5 f% S9 k+ ?0 V' z
  1029. DEY* N& b# o( F8 p& \3 |
  1030. BNE PPU_Mode_Return_Cnt_Write7 E& X5 q7 L8 T0 g
  1031. JMP PPU_Proc_End
    % |" A! r* z6 u8 _+ O
  1032. , K) X8 e* m6 Q7 Q& Y% Y. @
  1033. ;------------------------------
    1 \* L5 I+ Z! C1 u" W* @
  1034. PPU_Proc_Beg  ;处理开始9 v6 X# w. R) {! w( p7 b
  1035. LDX #$00
    0 P% D3 Y9 w/ W( L) ?
  1036. STX PPU_MASK
    $ _# j, r- z$ q( z9 T& e
  1037. ;------------------------------
    2 @9 i0 z( }& \& c2 K+ r/ o' r
  1038. PPU_Mode_Select  ;模式选择/ u: ~/ w2 c6 v% z: g
  1039. LDA PPU_Addr,X
    # Y" J. I/ F- ]. @) N$ G# C! u
  1040. CMP #PPU_MODE_CNT_CLEAR
    2 F/ Z( L6 g" \3 ~2 v* w
  1041. BEQ PPU_Proc_Clear1 u5 R- X1 B, [- J) k
  1042. CMP #PPU_MODE_CNT_LINE
    7 y, J8 z/ {+ i: P5 t
  1043. BEQ PPU_Proc_Cnt_Line
    7 k2 n. S1 \1 q! u# R
  1044. CMP #PPU_MODE_CNT_LINE_NEXT
    9 {0 E* \% _5 F
  1045. BEQ PPU_Mode_Return_Cnt
    6 {  V% r/ A6 V3 D0 _
  1046. JMP PPU_Proc_End_Write
    / g4 K5 `# s, Q( f
  1047. ;------------------------------
    + f3 o" y5 ~& S# ^
  1048. PPU_Proc_End  ;单行写入结束
    4 E9 E0 w7 V7 k+ S# o( Y8 @! b! N
  1049. INX
    / o+ w- ]) v' z' g$ E: s
  1050. LDA PPU_Addr,X
    8 K3 ], D3 c  w5 L, F
  1051. BNE PPU_Mode_Select
    7 X8 l$ `, i7 @: `8 R( M
  1052. STA PPU_Addr8 _+ ?6 e5 K1 H$ p- w' Q
  1053. JSR Update_Palette_Color* ?# Y, s6 T& D; U* R! e+ w8 t
  1054. & z3 H. A; E$ h' G6 `
  1055. PPU_Proc_End_Write" b8 C, P* C2 ?) N
  1056. LDA #$00
    # g, {% y6 h; R0 \
  1057. STA PPU_ADDRESS
    ' f, s" S8 l/ B6 r+ m3 T/ b4 u
  1058. STA PPU_ADDRESS
    9 n0 B( [% Z# \8 X
  1059. LDA <Text_Disable_Flag
      G; X9 d; ]; \, v, N" E
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    ) R- b( q9 b; S7 i' n# h
  1061. STA <Text_Disable_Flag2 H) n7 Y$ l$ e9 b, }
  1062. LDA #Scroll_X
    , _; H2 U% e- d4 e
  1063. STA PPU_SCROLL
    $ ]0 h4 k* ?5 V3 f( n
  1064. LDA #Scroll_Y; d+ v& M' U% l5 _4 r: e
  1065. STA PPU_SCROLL% g/ ^5 x2 B4 ?! v  ~0 Z' }
  1066. LDA Screen_State! M, B" K( Y$ ?  s) I
  1067. STA PPU_MASK/ g) B5 d, d4 l& E  @' J" M
  1068. RTS$ {; p8 \. _/ G# N# y' }6 j! _$ b
  1069. % a3 t9 `' |% v3 P3 @
  1070. PPU_Proc_Clear
    . Y0 ]1 i: N! a( b7 d
  1071. INX+ J8 W& V4 W6 x
  1072. LDA PPU_Addr,X1 |  ?. p' m* C/ P! G
  1073. STA PPU_ADDRESS
    - ~9 ^, G/ T0 q
  1074. INX$ ]1 V. E' q! p  c9 q( j3 z; o
  1075. LDA PPU_Addr,X
    2 z% [$ y8 K; V
  1076. STA PPU_ADDRESS) j6 U, {! @0 X! C7 b3 h# f( @
  1077. INX
    : {0 d' n; p/ X( `1 j7 V5 L
  1078. LDY PPU_Addr,X8 `- q, f: P5 M' {) q
  1079. LDA #$00
    : V7 n1 B5 Q" b( M! [" f) P) I
  1080. PPU_Proc_Clear_Write2 Y, l$ D, {0 N& Q# [) ?/ A
  1081. STA PPU_DATA
    4 l" v* r+ }# T
  1082. DEY
    ; K: ?7 A: S7 o: l2 r/ D( k* n
  1083. BNE PPU_Proc_Clear_Write
    8 G1 }! I+ Y1 C4 G% t% |" v
  1084. JMP PPU_Proc_End
    2 g" _$ h& ^$ T6 q: `- a
  1085. / s" ]4 ~7 a0 \+ B) k3 p* W
  1086. PPU_Proc_Cnt_Line; v# u& q* [2 k0 w" L# m+ v3 _$ s6 B/ y
  1087. INX; ]- p1 B0 {  K& F
  1088. LDA PPU_Addr,X
    ( t8 @4 J- P9 h1 _( p# _& A
  1089. STA PPU_Addr_H
    & ?" G/ _. |/ N1 e) U) D0 ?
  1090. STA PPU_ADDRESS
    ) q# P3 Z* K( v  B, L3 ?
  1091. INX
    4 r' z: X: a$ ~9 Z% t3 K- d+ x. v! }
  1092. LDA PPU_Addr,X( c' t% Q! Y3 n* J1 P9 W
  1093. STA PPU_Addr_L; K+ V% \; Z! i  U* A
  1094. STA PPU_ADDRESS
    1 H2 ]  v5 G1 b7 D2 M$ v
  1095. INX
    # J3 }, i( T7 ]" ?; Y' ^6 u1 v
  1096. LDY PPU_Addr,X$ v3 O+ O: \. s3 m
  1097. PPU_Proc_Cnt_Line_Write
    3 a$ d9 V6 Y2 m. H
  1098. INX( O; I( z6 S9 {6 B
  1099. LDA PPU_Addr,X
    / x, D& y  n% |# y+ l
  1100. STA PPU_DATA7 R6 ?4 Z2 E* Y6 l
  1101. DEY6 b1 q, u& I4 }' [
  1102. BNE PPU_Proc_Cnt_Line_Write
    ) r- C2 m1 G4 {
  1103. JMP PPU_Proc_End$ S1 w% T$ `! |8 {& ^

  1104. - A. a% Q. p: B  k: A
  1105. ;==============================
    ; {; h9 \4 E5 X, w6 h% Y* g% m7 ]
  1106. HEX_To_Dec;十六进制转十进制
    $ k0 x3 C% n! n
  1107. STA <HEX_Data
    # g/ s* ?7 Z' D5 `6 V+ {3 V- C! ?
  1108. PHA& i4 R7 D9 ]# u
  1109. TXA0 {* s6 d, B2 i) Z" `7 x
  1110. PHA6 f+ Q9 g8 s; R& l. y
  1111. LDX #$00
    6 d/ H9 q8 u: {5 Q% L9 |2 s
  1112. LDA #$000 F$ E# d& Q4 G
  1113. HEX_Cln
    $ p& y3 m3 w2 _5 I2 l: q) E7 L$ B
  1114. STA <DEC_H,X1 u' G8 \( \: U
  1115. INX
    9 g; J/ K  I) @  S
  1116. CPX #$03
    # U, @( k$ z& A, [1 Y
  1117. BCC HEX_Cln& I7 F! R/ r4 T5 i* s
  1118. LDA <HEX_Data
    6 |/ q* k7 Z6 Q- _# F9 N
  1119. ;------------------------------. N, j& O  E7 h8 A
  1120. HEX_100
      z' `) p3 @: j$ e$ {
  1121. CMP #1009 D6 K, ~0 s% Z9 i% \% v
  1122. BCC HEX_10' I# _& w9 J6 L0 K3 i
  1123. SEC
    + n5 W' d3 P6 S. f" K
  1124. SBC #100
    ( v8 a9 H$ z$ U2 h% c
  1125. INC <DEC_H* H/ T' _- i3 S8 P) f# E; [) `
  1126. BNE HEX_100
    0 @, Y& Y# O/ [. S$ y
  1127. ;------------------------------3 @' e; Z1 U$ ?/ K2 j: I: U' ^
  1128. HEX_10& e( R: V/ d) X4 ?' X3 t0 k% F) B
  1129. CMP #10
    ' r( d# L8 W( R( ~$ |! P! d
  1130. BCC HEX_11 N; n1 m- {5 {' o! e* U8 Q
  1131. SEC! D1 R4 U! J$ T. f2 d
  1132. SBC #10* B9 k% m- R$ B6 E6 [
  1133. INC <DEC_T7 r% v5 v9 i4 d8 B9 p" j
  1134. BNE HEX_10
    ( T- B2 a, O4 E& k" O1 J
  1135. ;------------------------------6 C( p! `' @8 y
  1136. HEX_1) C7 Y! G. _6 j( p. @5 q
  1137. STA <DEC_L
    : N0 D8 \8 g3 ?* n
  1138. PLA
    & l8 {- h& o" D2 S2 o" ~& k7 p5 Y
  1139. TAX
    # ^  G( p/ R+ C# C# l
  1140. PLA
    . W5 o" T' N3 y$ G
  1141. RTS: P) F5 [" d, I
  1142. 1 W* w0 \; e( a# E3 a% ?2 l
  1143. ;==============================
    ! k) T- f- U5 K* f* ?4 T
  1144. ;音乐曲目显示% j2 _" P5 T$ X* @$ l4 u/ D4 _
  1145. Music_Show8 V/ T( d% E9 T
  1146. LDX <Music_Item_Cur2 x; K$ ?- H7 ^  n
  1147. LDA <Music_Cur,X; u' m2 n5 `/ o. l) g& _* ?1 f
  1148. CLC
    * ]0 W  H/ F( w( [
  1149. ADC #$01! i  M  K% n1 F: E& R7 V5 {, F
  1150. JSR HEX_To_Dec. m! o. I0 o& C) j  ?/ Y' k
  1151. LDX PPU_Cur
    7 e8 w3 @- [3 z( [; J
  1152. LDA #PPU_MODE_CNT_LINE9 j: V. `% ~& A5 B9 T
  1153. STA PPU_Addr,X( }4 d" S5 d* N8 ^: A: j* b
  1154. INX
    3 b+ E$ ^) D" q; ~# z; d! o
  1155. LDA #HIGH(Play_Index_Pos)
    ( c. s( a7 \- I5 R" {8 @) ?
  1156. STA PPU_Addr,X  I2 c% G. r4 J$ x; z3 s. [
  1157. INX; G2 v! O; q0 D7 ]
  1158. LDA #LOW(Play_Index_Pos)3 \6 d) x; f0 z( x9 x) ~- O) B; A
  1159. STA PPU_Addr,X8 a) h" D6 _+ m6 ^
  1160. INX
    ; R, N, ~7 A/ _1 p

  1161. 4 E9 v# \2 G# \# J/ b- u. E
  1162. LDA #$07
    4 o% F2 _' @% ?
  1163. BNE Music_Show_Length
    ! L5 f7 T# d: }6 E" E
  1164. ! `' ~6 i6 T7 S& Q
  1165. Music_Show_Length8 s( X5 F# B8 u1 @9 N
  1166. STA PPU_Addr,X
    6 g/ x6 c6 m: a
  1167. INX
    9 F% h& A- U; i+ J0 h5 r) i

  1168. 8 T6 Z/ t" h' u
  1169. LDA <DEC_H  G1 u8 T/ x8 `. @& T
  1170. ORA #'0': _2 ~& u. Q' f7 K- D+ N
  1171. STA PPU_Addr,X
    % u7 H- I6 [' G  U# [# n  [
  1172. INX( {4 M" y; b( e( n

  1173. 7 z& y  E; r$ {
  1174. LDA <DEC_T
    : v( c" p& D+ b- T/ V- }
  1175. ORA #'0'
    + e) g: q+ s$ l: F
  1176. STA PPU_Addr,X
    6 ^! g6 A4 F' V! f; `3 \6 `, K
  1177. INX
    8 f0 h7 D; l5 {" m$ b" `
  1178. 1 R7 D2 u  u' t5 y8 H6 J: _
  1179. LDA <DEC_L" X  W- [! T) [! n
  1180. ORA #'0'
    # N+ ^- N; O. D1 Q1 [
  1181. STA PPU_Addr,X. T% r3 Z* p; C/ R: [% G
  1182. INX
    ) l; ?# ]# h6 R' ~

  1183. , j; A2 q$ r0 x# n  o) H2 S, j9 P
  1184. LDA #'/'
    $ j# M! F# K- i
  1185. STA PPU_Addr,X, X) t' S. w( x
  1186. INX
    5 C0 F6 s4 G, Y) z
  1187. Music_Show_Total
    9 W+ l/ I2 y9 n* [+ e' i/ h
  1188. LDA Music_Total8 U. T: z! g' K# [7 b' p4 \
  1189. CLC  P% n3 o1 h/ `) R5 |
  1190. ADC #$01
    ! v3 C' Q9 R0 S  X/ L7 z
  1191. JSR HEX_To_Dec
    8 p) t& a* ~% H
  1192. , P; ^, I+ s0 ^* i2 f6 l
  1193. LDA <DEC_H
    6 I8 y: |4 ~9 |! ]
  1194. ORA #'0'7 g& c" U9 m& ]$ s- d
  1195. STA PPU_Addr,X1 U- F5 ]% d' O+ J! b- k
  1196. INX
    7 u8 z2 \1 P- y  g! A: L5 i& u) v! T

  1197. + U5 L- F8 n5 E5 b
  1198. LDA <DEC_T
    - r4 M% o4 ~" Y! @) Y& Q
  1199. ORA #'0'
    2 s& K# {# P" f0 X+ G2 n: O
  1200. STA PPU_Addr,X# @; T' g: H, ?$ Q5 m, i
  1201. INX9 [0 b. R" J& K1 O' g) M: ?

  1202. : ^# F( }5 T" K3 N5 k, [/ _% \  c
  1203. LDA <DEC_L$ q! |; Q! _8 k
  1204. ORA #'0'
    * f' k* C0 o# {$ M5 U4 v/ v
  1205. STA PPU_Addr,X
    8 o+ o4 V) O" |/ V
  1206. INX
    6 ]+ F* N+ ^+ y' [- P7 d3 L; V
  1207. 6 ]5 J& y7 M, d/ t+ M0 g" K3 M7 v
  1208. STX PPU_Cur
    , G& R8 \4 J# y
  1209. Music_Show_End2 @3 M9 e1 w" X$ F9 @! P
  1210. RTS
    % c- b' @/ ?! C5 u4 W  O* I3 X" p

  1211. 7 @1 q/ l! c3 i0 F
  1212. ;==============================
    ! S& u4 I2 I# x* c7 r
  1213. Time_Show;播放时间显示
    . `1 @7 V1 q9 p# J' d# F$ A
  1214. LDA <Text_Disable_Flag
    . I0 q' [, B1 z& ^& r: {
  1215. AND #TEXT_DISABLE_ITEM
    4 T  J) s" A& P; w& l5 {+ h
  1216. BNE Time_Show_End
    % H8 M5 @7 L6 {$ R9 x
  1217. AND #TEXT_DISABLE_TIME
    " X: B* a# U2 t& p, l# d
  1218. BNE Time_Show_Enable
    2 I& z  O( r4 G+ N( R+ J7 F8 \

  1219. $ p  r5 ?/ J+ z' W
  1220. LDX PPU_Cur
    9 R, {' u4 H' c4 d
  1221. LDA #PPU_MODE_CNT_LINE
    # D' b* d% J! i  w' u) K
  1222. STA PPU_Addr,X+ a9 a" b  i$ v# v$ y2 {5 S8 q
  1223. INX
    * I) M; M* I4 a; z! r+ t. E+ F% N$ D
  1224. LDA #HIGH(Play_Time_Pos)- {" ?7 i8 r- r. U7 k# i5 q7 r
  1225. STA PPU_Addr,X
    : `5 x! D6 Z" v
  1226. INX
    + q' }  D! \* I- S) l
  1227. LDA #LOW(Play_Time_Pos)
    : p5 _. [4 a8 x. A
  1228. STA PPU_Addr,X+ Z7 w1 d; A" r1 M
  1229. INX
    , o& x* k: {4 x" f3 G. X: [$ w. M
  1230. LDA #$08/ d( \) o: T/ r7 j
  1231. STA PPU_Addr,X- i/ y; T5 _% P& @+ W
  1232. INX8 ~& ^* A- Z* s3 j. i! w
  1233. Time_Show_H* ~( B+ c9 @; I  u- J" h9 J) y
  1234. LDA <Time_H
    ; L) O+ ?- G5 g& `' ]
  1235. JSR HEX_To_Dec
    / a$ E0 U( ?+ e7 ^# l1 K  l
  1236. JSR Time_Digit' L1 g5 R( W4 ^4 {; I  G1 F
  1237. LDA #':'
    , K/ f7 J2 W9 ^* w8 {
  1238. STA PPU_Addr,X8 l3 H* d' Q, Z- }& I1 m
  1239. INX
    ! p0 e) D) s" H) i1 G- g
  1240. Time_Show_M
    1 \* B# Y& j1 r' U3 M) j0 L8 O
  1241. LDA <Time_M$ ~4 E1 g3 z7 E- W" p5 I
  1242. JSR HEX_To_Dec
    : D) z( k* I. s' {
  1243. JSR Time_Digit% u, N" @2 n; i7 `
  1244. LDA #':'
    3 l* B% ]# U# b; ?- I& @9 e
  1245. STA PPU_Addr,X7 [7 E9 v/ N! @. n5 h* W  w0 q2 _
  1246. INX6 S" B) G+ a/ x5 n6 |( q! Z
  1247. Time_Show_S
    ; z; I+ S9 }; U8 ^* f1 A7 }3 D1 \
  1248. LDA <Time_S: f8 ]* w. x1 w; y1 J' [
  1249. JSR HEX_To_Dec
      Y  J! ^6 \9 e* M8 k
  1250. JSR Time_Digit& s- ]# i/ S* P
  1251. STX PPU_Cur
    8 k) n0 U! s; P- w/ `1 `$ A+ t
  1252. Time_Show_Enable! ?7 t& _! f* ?, Z  r% u
  1253. LDA <Text_Disable_Flag
    7 N4 z3 p0 A. i/ C' A4 b3 i
  1254. AND #TEXT_DISABLE_TIME ^ $FF$ q* A) t& r7 ]" f
  1255. STA <Text_Disable_Flag
    & k* M! ^! E5 |4 K
  1256. Time_Show_End
    % w' ]% J% I7 h
  1257. RTS+ Y! ^3 y' q+ l" _2 L
  1258. * d9 A& ?6 l! Y: }: w
  1259. Time_Digit
    - D. H7 e7 S% Y7 ?
  1260. LDA <DEC_T' ]) C, F' u3 T# ]4 [4 A
  1261. ORA #'0'
    1 c- y6 y3 Z' w) c6 |7 K, P
  1262. STA PPU_Addr,X/ h% J9 N) f: |( r+ K! e. b
  1263. INX
    5 X" ~0 ~; w; `2 B& o0 w( m
  1264. LDA <DEC_L% ?. X) `4 g3 P' y% a
  1265. ORA #'0'
    , ^4 k6 P( Q/ y! l2 }$ \
  1266. STA PPU_Addr,X
    4 o& O" L  b4 F1 T3 ~
  1267. INX  o2 L# T5 Q8 m' }& T
  1268. RTS1 c! G+ S3 M0 P7 x. \0 s6 X
  1269. . n5 C% B* X7 O4 b# l- h! T2 u
  1270. ;==============================
    $ A: S, E0 e& k9 I
  1271. Time_Count;计时
    5 s7 I% n) a% O- _$ ?; Y, h
  1272. LDA <Music_Stop_State
    ' o6 w; f/ T0 M
  1273. ORA <Time_Wait_Cnt+ n$ d' z! h/ m8 t8 S' Q
  1274. BNE Time_Count_End
    ( P% @: y: ^; H5 l3 G
  1275. INC <Time_Cnt; O% M1 Y5 t$ L) H  \3 o" W( j: j
  1276. LDA <Time_Cnt. B; g" i# X8 c2 O% D) E+ R/ A! c
  1277. CMP #60
    ; i- {! a8 o5 Y
  1278. BCC Time_Count_End
    , ]: p, K; m! }7 K/ ]
  1279. LDA #00
    9 }6 \1 O1 `1 {; t: F
  1280. STA <Time_Cnt
    4 }' _# z$ L) C- z
  1281. INC <Time_S8 R& f3 }9 N7 U( x
  1282. 7 c3 `: I9 r$ m: r( z1 e
  1283. Time_S_Cnt1 d& U6 P0 i8 L0 E* Q& ?9 ]1 H
  1284. LDA <Time_S
    6 s7 I! ^3 x- p4 J
  1285. CMP #607 a8 i& m' n# n# W8 c% U( g: @
  1286. BCC Time_Count_End
    ! f6 ~* j/ W* q4 N: ]0 [  y, K/ O
  1287. LDA #00! }9 \; W; B2 K
  1288. STA <Time_S0 e2 c7 |1 T4 S  W9 [
  1289. INC <Time_M4 A1 }6 k& x" p* |( w7 P' h
  1290. 7 N' y: W( j' `
  1291. Time_M_Cnt
    1 J+ y) a2 q, c* M$ R, ^4 S, O' A5 s
  1292. LDA <Time_M
    9 V# I2 |* K  X9 C  Z! G
  1293. CMP #60
    ' e* U: s5 b8 I. @; ]  p
  1294. BCC Time_Count_End
    7 n8 Q& N, {& P6 _& U
  1295. LDA #00+ F0 d/ H: G2 I
  1296. STA <Time_M) F8 Q) M- x0 n2 u# p4 F6 ]3 H
  1297. INC <Time_H
    ! I4 t, t$ |1 z) N5 P
  1298. 0 x" j& g5 S! R/ a' B! d2 ~
  1299. Time_H_Cnt
    7 ~( N* ^9 A2 q2 C9 U5 m
  1300. LDA <Time_H( H  v. h: f1 e. Q$ `
  1301. CMP #24/ e+ n7 c7 k- e( U" W* W3 m
  1302. BCC Time_Count_End" C8 V# n9 E" c
  1303. LDA #00
    " I( P+ K- J4 Z( d/ R* O. C
  1304. STA <Time_H8 y4 T* a+ ]& `! X
  1305. 6 ~- o  N# O7 \, u) @- I' i# d
  1306. Time_Count_End
    : u- H. ^  ~9 s# `7 ^% d$ r
  1307. RTS5 U" j4 Z* I$ F0 j
  1308. 0 [1 Z# m& d# ]
  1309. ;==============================
    1 J& p1 S; @' ]3 z! }7 b
  1310. Time_ReSet;播放时间重置
    3 D; }' J% r( ]1 M- p
  1311. LDA #$00& G/ M/ G, W% ], {( P
  1312. STA <Time_S
    3 z9 P* Z$ i3 Y8 N
  1313. STA <Time_M " G* _, f0 B1 @! S! F
  1314. STA <Time_H- i4 M4 F  F: F6 {8 {: d+ m
  1315. STA <Time_Cnt6 h& Y4 \! B6 b( x$ ]
  1316. RTS( z" {& A( a  A% ?

  1317. . I: ^4 `1 o; r; k  n: ]' c5 h
  1318. ;==============================' S0 k+ g' y! Y5 M6 O% }
  1319. Music_Bar_ReSet;音乐条重置
    6 L! \8 k6 M* m. ?: I9 {
  1320. LDA #$00
    % X+ \8 v) X1 q% b6 }9 T/ C
  1321. LDX #$00; s7 G9 ], F0 u; }" P, ]
  1322. Music_Bar_ReSet_Set$ V3 l. P: m6 x+ o, _8 e
  1323. STA Sound_Bar,X, R1 {- B5 G0 h& j; {, D
  1324. INX# K  K4 J6 w; a3 e1 V
  1325. CPX #$10
    1 X/ j. D& S$ D2 r1 p
  1326. BCC Music_Bar_ReSet_Set. W1 P+ ]) F. C# Q1 |$ F' _# m
  1327. RTS
    ( z) D/ y; h: F* O0 X: J3 e
  1328. % G# l, i  r: j; b" `  E
  1329. ;==============================  ?5 I5 I! E! ?! ~
  1330. PPU_Data;PPU数据写入
    6 N5 `8 D! r' O/ q5 ?* p( L8 T
  1331. STY <Data_L
    ' Y! {8 g$ ?" N0 P$ k+ A+ a9 v. {. l0 W
  1332. STX <Data_H/ K2 B4 K$ a* P+ I) Z
  1333. LDY #$FF
    ) O0 L& @9 s  a( E
  1334. LDX PPU_Cur
    - c$ ~7 e4 ~; u+ c1 }
  1335. DEX  v6 E! i( q$ H" W4 }" V: c
  1336. PPU_Data_Beg1 ], b' a' X9 u% e" _0 |4 v
  1337. INX8 k. v& c; N+ A4 m, }/ a
  1338. INY7 t' J$ h' E# J* Y
  1339. LDA [Data_L],Y1 S4 M# k8 C2 B% }" C( V4 P
  1340. STA PPU_Addr,X
    , |) |3 Y, p3 g6 ]' s. u
  1341. BNE PPU_Data_Beg6 Q3 C# B, Q& r, U& E4 \
  1342. STX PPU_Cur3 {6 ~0 J$ Z2 ^5 G  O$ \
  1343. PPU_Data_End' y8 ]9 T; p7 I* S# C
  1344. RTS
    & o) j, t9 j8 m+ Q3 M
  1345. + T; _8 v& j3 _  k
  1346. ;==============================
    . P+ B6 s/ J+ S8 }3 }4 k
  1347. Music_State_Show;播放状态显示
    " _2 e3 D: P+ t9 i
  1348. LDA <Music_Stop_State
    3 {1 m4 G5 ~  s/ F4 L
  1349. BEQ Music_State_Show_Play
    / U0 ]/ i8 r5 v! a( i
  1350. Music_State_Show_Stop
    1 `8 ]  ^# U1 f
  1351. LDY #LOW(Music_State_Stop)
    ' J: I  V: I( K7 K
  1352. LDX #HIGH(Music_State_Stop), U( j+ T" w1 \) d) J
  1353. JSR PPU_Data
    " T7 J5 B! G2 r, U
  1354. RTS+ k9 Z5 D& T+ v+ u
  1355. Music_State_Show_Play
    : B9 `4 {4 n4 J( L" z/ w
  1356. LDY #LOW(Music_State_Play)
    6 q/ N7 C/ n' w3 N0 U
  1357. LDX #HIGH(Music_State_Play)
    2 w% c5 m' R' y8 F3 v( b% n8 {
  1358. JSR PPU_Data" G3 _3 W6 A6 T- f) Q; ]0 e/ ^- P
  1359. RTS# ]' ~  H) t7 p* Q3 }$ Y) c

  1360. ! f+ j0 B3 i( h6 t7 A1 t  p$ E2 Y
  1361. .IF SOUND_BAR_SHOW_ENABLE
    : n, @. ]7 s* o2 n/ z  h6 {
  1362. ;==============================: i5 n5 x) J1 V7 {% G# s
  1363. Sound_Bar_Text_Set;标题与音乐条初始化8 G" }: N8 T9 a( M  U: V1 W
  1364. LDY #LOW(Sound_Bar_Text_Data)
    4 V6 x& \% W% U- d# X0 `  D' }; f6 I% W
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    1 v, l/ Z4 U$ D/ a7 f' `% z
  1366. JSR PPU_Data$ ^8 i( Y+ M/ g( |
  1367. RTS
    2 `& B+ z7 S. `5 }* U# q

  1368. , E  p/ M9 z/ s7 m8 f. P" [9 G3 ]
  1369. .ENDIF
    * j5 S9 v* O2 j7 ]! l

  1370. 7 g, J8 K0 B5 ?' c( M; C* b9 L0 N
  1371. ;==============================2 W; f% @9 g) s2 D) V0 v0 `# {
  1372. Set_NameTable_Attributes;设置命名表属性+ e. D' i( }7 M' y; U" L
  1373. BIT PPU_STATUS
    4 p- J9 z6 E. |
  1374. LDA #$23" B. D% Z+ ]) \; Y( M$ T
  1375. STA PPU_ADDRESS
    2 _# f) H! j1 R
  1376. LDA #$C0
    ' t2 S7 l1 D5 A! p% f1 g' R
  1377. STA PPU_ADDRESS
    - R4 B, @  g+ |# E7 Z* @9 V& S
  1378. LDX #$000 b% c$ Z1 }1 k9 P) T9 P1 ?
  1379. Set_NameTable_Attributes_Write
    2 ^5 e/ H" \4 n
  1380. LDA Palette_Attributes,X8 g$ |7 [, P) t  z+ _0 r% S
  1381. STA PPU_DATA- U  u/ I! d  H
  1382. INX
    ; }& j' s6 y1 S4 d0 U  M, N
  1383. CPX #$407 @9 g( v0 m3 q( B
  1384. BCC Set_NameTable_Attributes_Write, n  Q+ ^* S# W. N- M, Q
  1385. RTS5 E* G# y$ O3 K3 Z& D7 j, J

  1386. 0 A3 u6 _1 f" d  H8 P7 }
  1387. ;==============================. Q' G3 S! ~. c
  1388. Set_Palette_Color;设置调色板数据
    3 o1 A7 G" b% d* `/ H! w0 k6 ^
  1389. BIT PPU_STATUS2 t) H) U* h& l! _. F
  1390. LDA #$3F0 z! r, s$ \- K! C! ^8 ?# V+ i
  1391. STA PPU_ADDRESS8 l" E6 C; u- z0 ^* o' o, N& D
  1392. LDA #$00
    8 D) t5 Z" L1 z  T/ a5 `
  1393. STA PPU_ADDRESS4 i. l. A( l9 a8 x! m7 U1 I5 r+ B3 F: b
  1394. LDX #$00
    0 I  n9 A& h) f3 C# a$ v
  1395. Set_Palette_Color_Write# T) ]6 p) K7 p; |2 X0 q
  1396. LDA Palette_Data,X6 o- E  M3 c, I9 |5 {
  1397. STA PPU_DATA) C9 R4 L( O: m- Z
  1398. INX# |2 d  c- U9 A0 s6 t- N2 ]5 ~
  1399. CPX #$200 z) t0 A: S( @. X3 z3 M
  1400. BCC Set_Palette_Color_Write
    # B1 X5 e5 }  c2 Q* ~
  1401. RTS
    / F. ~( F7 h$ Z8 T) O3 ]

  1402. 8 {% k5 v0 Y# k( a' v8 D
  1403. ;==============================- l8 x/ y, h+ _& `0 Z, h5 O3 p
  1404. Init_Palette_Addr;初始化调色板数据
    7 g4 o8 F4 E1 R, N: v7 t& w$ a
  1405. LDX #$00, t$ G* T% z$ C" ?) g4 v
  1406. Init_Palette_Addr_Write
    7 g5 n6 v5 k+ H- Q; q
  1407. LDA Palette_Data,X
    / R: c) f% e) r- n5 `# H& K
  1408. STA Palette_Addr,X: J: |5 Y1 l& V, t  I
  1409. INX! i* |: z* g. L7 K# F
  1410. CPX #$20# o/ k* g* m* J; V+ Y8 [7 J  H+ V/ e: G$ f
  1411. BCC Init_Palette_Addr_Write7 t' b  r3 B' p& Z( Z; e
  1412. RTS
    - G+ m3 Y# P  T3 k& O
  1413. 2 W; x4 a3 l- d
  1414. ;==============================
    " }* y; U# [! G. `
  1415. Update_Palette_Color;更新调色板颜色
    5 Y1 n) [. ?+ }9 ], E3 U
  1416. LDA <Palette_Update_Flag2 v/ a# r7 u  Y+ j/ o
  1417. BEQ Update_Palette_Color_End
    4 P4 m. h. l- E. t  u$ `- P4 I+ C" ~" Z
  1418. LDA #$3F
    1 j2 U' M5 w* c8 `2 i0 b" O! h7 m
  1419. STA PPU_ADDRESS  G; C+ h8 \; m' r$ C
  1420. LDA #$0C
    3 d. I1 n2 a' l+ c- V+ w
  1421. STA PPU_ADDRESS
    6 j5 p+ K( `# l; {1 m: R
  1422. LDX #$0C
    1 w1 F6 @. A; H+ U* i2 v. `) O. I
  1423. Update_Palette_Color_Write! ^1 I2 W& _! h! W% Y9 y; L
  1424. LDA Palette_Addr,X# {8 O! s# W" a' {+ i
  1425. STA PPU_DATA
    8 ]) I+ l$ \& o! \; v+ Q; T
  1426. INX
    / F3 w- j, V$ b7 M* Z6 v
  1427. CPX #$14
    & v8 o! h. `& X: {  {
  1428. BCC Update_Palette_Color_Write8 E% _' [+ f) o6 _/ J1 T
  1429. LDA #$00
    * P# F" X; j# n
  1430. STA <Palette_Update_Flag
    9 X/ O: i) W1 s2 _& b$ S& R
  1431. Update_Palette_Color_End8 g# S" E; K/ ]
  1432. RTS5 x& v# M1 ~, b" }+ O9 b

  1433. . m5 c. O; o- q8 O/ G
  1434. " a: g" j9 f( m0 c0 Q
  1435. Update_Sprite_Palette_Data* ^- y# A$ E6 ?5 A+ h4 q  G
  1436. .DB $21
    * I0 @3 Y, y1 x2 C/ n- g( z6 Q
  1437. .DB $21
    # f( \7 h4 E$ K$ B( G
  1438. .DB $11
    & V2 ?$ V/ V" r& R
  1439. .DB $01
    : k" l  u8 @2 v6 o3 V3 t9 ?
  1440. .DB $010 a$ V4 i, d: x  P
  1441. .DB $11
    $ }; I+ m6 P' Y' j* m' `3 f
  1442. .DB $21
    5 }2 ~. H% h, _; H0 R; }* R9 {% c- b' B. U
  1443. .DB $21
    / C( i% ?3 N6 |# ?; m
  1444. .DB $11- o2 m6 e, D* P0 s3 Y8 m
  1445. .DB $01$ |% w$ H" y2 h: Q  s
  1446. .DB $11
    % O2 M# J/ r- y, C
  1447. .DB $21
    ) X* {; G- w& ?' c& |% b
  1448. .DB $21
    0 \3 M+ u/ Y7 n# f' n. g1 `. H
  1449. .DB $11
    % }4 S+ O3 s6 j+ u# b% r4 O& k- O) E+ N
  1450. .DB $01
    - u1 M" a' Y* V' ~& H
  1451. .DB $114 e. V( D& b: `# |% {' p2 ]
  1452. ;==============================
    ; @4 q" p9 W! A( l* \
  1453. Update_Palette_Data;更新调色板数据
    7 B; p& a; w8 i* v* {
  1454. LDA Nmi_Time_Count% w* C; o- ?% ^# Y! C7 q& z
  1455. AND #$081 a5 x( y  w: W  o
  1456. CMP #$08
    9 c# M, r  @2 C; j" Q" t, n3 E( C
  1457. BNE Update_Bkg_Palette_Data
    9 n; n1 V5 i  x- q6 S) v( ~) c( _

  1458. ! N9 s" W# U# z. s, n
  1459. Update_Sprite_Palette_Data_Set
    $ r# R9 e3 n3 s" F- r2 K2 R
  1460. LDA Nmi_Time_Count4 e! ?7 U) H  Q. e/ y
  1461. LSR A* B' V. @& g7 t' o. ^% W  i9 Q# [; t
  1462. LSR A" C* l# e6 H4 H6 Z: N2 L+ z) f
  1463. LSR A
    . R% N1 v0 C' f- w" m4 r5 c
  1464. LSR A
    . N$ ]3 y" G) L1 I4 [: @: f  _
  1465. AND #$0F
    ; p( h& }+ d- \/ m1 f& |2 _
  1466. TAX/ {& C% ^- i" p7 Q+ q3 Y: J% `9 F; p3 p
  1467. LDA Update_Sprite_Palette_Data,X
    , G# X4 ?' o3 {7 _: W
  1468. STA Sprite_Palette_Update_Addr
    8 G2 [: ]+ ]. y2 R; M8 Q
  1469. LDA #$01+ J) A; L8 c. w) U9 G+ _- e
  1470. STA <Palette_Update_Flag& d5 K# B( c2 H$ r1 o% T- R

  1471. : Y0 e# a. o, [* |1 P9 W. w
  1472. Update_Bkg_Palette_Data
    ; v, o# q1 |+ |* M
  1473. LDA <Text_Disable_Flag
    4 E+ h, J3 l$ M4 q# E
  1474. AND #TEXT_DISABLE_RAM
    $ l8 [' w0 V( B4 i
  1475. BNE Update_Palette_Data_End
    ' d$ q) ~. c6 m& h) ~% ~, W
  1476. LDA <Music_Stop_State% J7 x! F* G: o* n2 D' f( q# g0 f
  1477. BNE Update_Palette_Data_End
    3 m: W9 ^  M2 Y6 |* F0 r

  1478. ' M, r/ M: w) o2 `: I% x  C& i
  1479. Update_Palette_Data_Check
    . w! W, n" Y' c; A
  1480. LDA Palette_Wait_Cnt
    ( K9 ^- r+ G" k! F& [/ w
  1481. BPL Update_Palette_Data_Check_Over
    4 K( H' R3 m+ I; u6 q
  1482. LDA #PALETTE_UPDATE_INTERVAL2 F4 w! _5 E  y
  1483. STA Palette_Wait_Cnt
    $ |* O) f1 f7 R/ Y' C
  1484. Update_Palette_Data_Check_Over
    / }) z' K  l3 o
  1485. DEC Palette_Wait_Cnt
    4 H: W3 [$ R* \, o( c
  1486. BNE Update_Palette_Data_End
    + S: B' A! k; r, M# s, B, n

  1487. / m+ E$ f1 d: v7 u. z
  1488. LDA <Text_Disable_Flag
    2 ?1 k) |1 B/ K; l/ a- v
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME% A& g6 ~/ h6 l* f2 v9 d
  1490. STA Text_Disable_Flag2 C, [9 s+ t* [8 C* p$ v4 n8 c
  1491. INC Palette_Update_Flag' U3 ~" u* C. v/ o( @5 R' M

  1492. 4 A) B6 g8 D3 C  L( a
  1493. LDA #PALETTE_UPDATE_INTERVAL
    4 }# e2 u5 L6 D/ v1 y& R% N2 G
  1494. STA Palette_Wait_Cnt
      g/ I, Z9 y# j0 i8 u( F+ t

  1495. * r0 M/ U) s& i! P; J
  1496. LDA Bkg_Palette_Update_Addr
    ; O& e4 n# K4 z
  1497. CMP #PALETTE_UPDATE_MAX' ^' N0 g& y; o* l8 m/ r1 ~
  1498. BNE Update_Bkg_Palette_Data_Set, n# p! I5 c& c/ c6 C7 b, R. i
  1499. LDA #PALETTE_UPDATE_MIN - 14 z% v  V0 V# p$ Y: }$ v
  1500. STA Bkg_Palette_Update_Addr
    & _* f$ M+ `7 n  a8 R0 S: u
  1501. Update_Bkg_Palette_Data_Set
    + Y: c- w3 c0 C9 k+ C
  1502. INC Bkg_Palette_Update_Addr
    * H- K- Z, m" N9 R4 ^" f5 L
  1503. 5 w& _7 w9 u5 g6 E
  1504. Update_Palette_Data_End+ n+ f7 p) _! }& |5 x4 e
  1505. RTS
      v. X, q! N4 b2 O+ |. M
  1506. 7 a- ~* R0 Q6 X
  1507. ;==============================
    ' `4 V' N) r) P* L/ J
  1508. Show_Music_Text;显示静态文本
    % o0 I0 n# T1 I  y
  1509. LDX #$00
    ) h: l$ _# c* T# \7 y# U8 r
  1510. Show_Music_Text_Set
    & w& }1 F$ v: f. k. V" Q7 ]7 j  c) {* g
  1511. LDA Static_Text_Data,X
    2 }% c  T3 R; ^3 E$ E# U0 Z: T8 a
  1512. STA <Data_L
    * n7 D( K  _/ m5 e( n
  1513. INX2 j3 n8 E; m) [1 A( u
  1514. LDA Static_Text_Data,X. G4 ]7 @+ h$ w6 [* ]  y
  1515. STA <Data_H
    6 X- C' q- Q, o, V- m0 J  |
  1516. INX
    4 \% D9 F! l8 Q* A( Y& t' F2 P
  1517. LDY #$00
    * R: y' W% i' H) F
  1518. LDA [Data_L],Y
    $ }9 [2 v- W: B$ i% y
  1519. STA <Data_Cnt
    8 L7 Z+ k6 e9 c! b
  1520. DEX- D& f+ {9 |  g) {$ d5 d+ g
  1521. DEX& N) d- Y* v8 T
  1522. LDA Static_Text_Pos,X2 b9 x8 m: L, z' @3 C
  1523. STA PPU_ADDRESS$ I- y! q% W# Z  U; y2 \) Z
  1524. INX( X7 Z0 ~& Z* g3 {5 S, s% s' S
  1525. LDA #$201 M* C6 S1 F, G1 I6 a/ I( l; l
  1526. SEC( m! ]  c9 R9 k" C( F
  1527. SBC <Data_Cnt
    7 [, _! t& N6 m3 `: w: T
  1528. LSR A' b' o) s% l3 f% B0 [% J" B7 Y( c
  1529. STA <Data_Buf
    ) f7 F. ]; _: y! O! D4 i
  1530. LDA Static_Text_Pos,X% Q2 K9 M  z( Z9 g
  1531. AND #$E0
    3 d* h$ Z* K3 B- E5 w
  1532. CLC
    ! g3 b8 ~& w# ~8 i0 E: y
  1533. ADC <Data_Buf) X% Q$ p0 a- _2 _
  1534. STA PPU_ADDRESS
    $ O( i2 x% [' M2 [& ~# Q
  1535. INX' F. \6 |3 p; v
  1536. Show_Music_Text_Set_Write
    # t4 |2 B0 r6 k0 k
  1537. INY
    0 Y9 M5 X: j' b
  1538. LDA [Data_L],Y
    . |6 y* y0 H1 y& U  A4 d
  1539. STA PPU_DATA$ B4 G" i+ D+ }' F; u/ u
  1540. DEC <Data_Cnt
    % P& i+ p3 ]0 V
  1541. BNE Show_Music_Text_Set_Write
    , M% W& V9 K/ O  o( {
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos+ ~- x# w; j$ y
  1543. BCC Show_Music_Text_Set6 }! V# w/ }  ~/ f0 s
  1544. RTS
    3 C) W" Z( W* U  d

  1545. - X: l! P' f! z8 }# e$ l4 G
  1546. ;==============================
    5 A6 I0 q0 O4 X* N  [
  1547. .IF Track_Name_Pos;显示曲目信息! |& f* t; c7 [5 G6 V( d: ^% |
  1548. / X( U- X' h! k6 h  A& L0 ?
  1549. Clear_Track_Info
    / R! a6 [  U% A0 W9 i+ M& g
  1550. PHA) W/ L& z6 F/ `4 S
  1551. LDX <Music_Item_Cur
    5 H' K2 V) J" e4 Y
  1552. LDA Track_Name_Addr_Flag,X
    ! h0 T( R( C" x4 k3 i. q; _
  1553. BEQ Clear_Track_Info_End_Ex
    1 u$ q, V3 p( [; [) N% L- ?9 T
  1554. PLA$ A$ {# \! I3 X7 P* `

  1555. ; I) a7 C' h- @9 x
  1556. LDX PPU_Cur
    0 J, _2 D7 U+ ^0 ^! y
  1557. PHA
    7 b  {+ H$ ~& E) [: J2 G
  1558. LDA #PPU_MODE_CNT_CLEAR
    / A& ]! \& s% n
  1559. STA PPU_Addr,X
    0 i$ B: Q6 D$ n- y+ j
  1560. INX  X8 p0 x. u3 V+ M" t
  1561. PLA
    4 C) T/ i- e9 j+ g5 j8 m
  1562. JSR Show_Get_Track_Name_Center_Pos7 B/ M& V9 |4 i( r
  1563. STX PPU_Cur
    6 \  D8 n" w7 N0 p5 c- r: L
  1564. Clear_Track_Info_End5 A# G! y2 E1 c. N" _- V
  1565. RTS
    ) T* p4 W4 _4 F+ p7 C2 O" Z
  1566. Clear_Track_Info_End_Ex* x  h8 [/ ~% a" V
  1567. PLA2 G# b8 h& A2 E
  1568. RTS$ g. }( s9 C. v

  1569. 0 ^" Z, Y. ?' f$ q" E
  1570. Write_Track_Info
    * K0 E" K9 m# Q0 T/ X' p
  1571. PHA; t2 t$ W4 p% {# v  s1 v
  1572. LDX <Music_Item_Cur
    7 O; J  z6 v8 z4 r( L
  1573. LDA Track_Name_Addr_Flag,X
    7 _$ l: T: P9 {4 \# Z3 W+ b
  1574. BEQ Write_Track_Info_End_Ex
    0 B7 M/ k% p8 ~- G
  1575. PLA4 D$ A' a' W" L( ^3 B9 T1 S; F$ H/ M

  1576. " N6 U. ]- i5 R7 a
  1577. PHA% p( t  C3 G3 S  p1 n, r( I! x
  1578. LDX PPU_Cur
      ?" k1 L" P5 K6 j
  1579. LDA #PPU_MODE_CNT_LINE$ ?9 a+ n$ J, U1 H2 ?1 k
  1580. STA PPU_Addr,X
    ( Q9 m& D5 _" K4 }+ X
  1581. INX2 Y- Q% ^. [  u  l/ g& t3 Q
  1582. PLA& `$ q# ?$ X  }" Q% q& F" M: m+ C
  1583. JSR Show_Get_Track_Name_Center_Pos7 g" M; E) B' M8 ?' G
  1584. Write_Track_Info_Data
      f7 B+ `' v* g
  1585. INY$ ?4 [" E( y; k- i
  1586. LDA [Data_L],Y
    7 i2 R- e$ U- g' C9 n6 {6 O2 k8 C
  1587. STA PPU_Addr,X
    3 W6 [9 A/ b# u/ b$ W7 r3 U
  1588. INX
    7 z. m& [4 S6 w1 r, m: J
  1589. DEC <Data_Cnt
    % K, C8 e5 I. c& {9 b( d/ ^. Q
  1590. BNE Write_Track_Info_Data
    + ^& A4 Z. m; B
  1591. STX PPU_Cur
    : U& b+ {1 |( {, r
  1592. Write_Track_Info_End
    # Z$ b$ N' ]4 ?$ l: N5 e) }
  1593. RTS2 D$ i/ v. B% q' O7 a
  1594. Write_Track_Info_End_Ex
    6 Y; w/ i" M+ o6 D
  1595. PLA
    0 W+ z" \, d/ O+ t8 r+ E
  1596. RTS- F* B9 a( ~) Z0 ]

  1597. % i- \/ u- a' Q' n2 A* W
  1598. Show_Track_Info
    # @6 j3 i3 O' W8 W( G9 O7 m
  1599. Show_Track_Info_Clear
    + M+ N' k3 s7 W: R5 y: K
  1600. LDA <Music_Last
    2 ?' y7 F2 g. g7 x
  1601. / q" O2 O+ L) z% D2 F2 r% X. T& r
  1602. JSR Clear_Track_Info
    8 k5 ~6 n7 T- O, r1 A) F

  1603. ' T7 f7 ]4 ~* o
  1604. LDX <Music_Item_Cur
    ' S/ S9 W8 e3 D7 O6 T
  1605. LDA <Music_Cur,X9 x/ M0 b5 Z" r* `$ l  I
  1606. JSR Write_Track_Info( Y/ _- _, H5 ]/ `( R
  1607. RTS" L  K% {5 M% G$ }0 C4 a+ \
  1608. 4 f1 J) [2 o9 ^3 r" c6 o
  1609. ;==============================$ B/ s( U" E4 _: Q
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置
      |! W$ J% P) i, n( Y5 ~' O: [
  1611. 0 M6 [: B) x+ l# P* O
  1612. ;取出集合名索引6 R) l( s/ W- }. P5 C
  1613. PHA
    - t3 k! f  C/ U4 T* G
  1614. # }9 D6 M; T5 a4 M; ]
  1615. LDA <Music_Item_Cur
    ' y! r3 T  x& |! x
  1616. ASL A" {9 i; g+ |: }8 {0 Q5 ]) k8 i
  1617. TAY$ s1 y  B/ v3 [* t
  1618. LDA Track_Name_Addr_Port,Y" Z( Y: a7 l# I8 _
  1619. PHA2 ?$ O8 P& [: P  z1 q% ]$ e
  1620. INY4 q+ F0 t5 a: a0 w
  1621. LDA Track_Name_Addr_Port,Y
    4 r* i! i- g+ }1 U) g: L
  1622. STA <Data_H
    + W' k, q$ k8 k3 s8 t
  1623. PLA
    9 L7 V. b. U  n+ Y
  1624. STA <Data_L
    & y4 h6 h6 m1 Q& N/ y2 q! S, s! C
  1625. 6 _  E( u( t6 i7 K
  1626. PLA
      T* O# n  T; }- v  A" E3 y
  1627. 9 P) d# v7 N# Q  ~( R
  1628. ASL A
    ; L0 i1 e+ y: e1 f8 ]6 }
  1629. TAY
    ' O/ z1 A  P; B# w  ~  v8 c  K3 Z
  1630. LDA [Data_L],Y
    1 ?- x4 [* [5 H3 j( i" u9 g
  1631. PHA; {, U( V1 Z; Z8 I& f2 ]8 I
  1632. INY  l* b5 s# U7 }& i6 {! y
  1633. LDA [Data_L],Y
    $ Y8 k7 S# C# r; u
  1634. STA Data_H
    5 |5 p9 X2 {* K; @( V$ X
  1635. PLA+ e# d4 [3 W- u+ [5 g" Q8 x
  1636. STA Data_L
      I2 F2 y2 {8 D/ _- p, G3 E6 G

  1637. 8 J( g: D7 }- y0 B) o, w
  1638. LDY #$00/ l+ \  G) E9 u2 k/ g
  1639. LDA [Data_L],Y) y8 l7 o3 x9 a2 H  z
  1640. STA <Data_Cnt
    2 y5 w5 @9 X& o! I) H
  1641. LDA #$209 l6 C7 f! V' X  L) K, ~  B
  1642. SEC
    & I/ H; a( v* n. W. t  e" _
  1643. SBC <Data_Cnt
    # b8 t. w  V) s( ?. }
  1644. LSR A6 e% p: h1 l2 ~1 ]& x
  1645. STA <Data_Buf, m" E' `/ s6 P' f
  1646. LDA #HIGH(Track_Name_Pos)# a  r# Q  K8 _) h5 h9 @/ f
  1647. STA PPU_Addr,X
    & t( Y7 T% f* M
  1648. INX/ X# s+ k, o+ j) c; M" G+ `7 f
  1649. LDA #LOW(Track_Name_Pos)# V* ^" ]3 V8 R( D
  1650. AND #$E0
    : E! l; v' ]& G
  1651. CLC. s) }4 N6 t! B+ v
  1652. ADC <Data_Buf
    9 ?4 S9 d' D  t' O
  1653. STA PPU_Addr,X+ [4 a6 D. [5 Z
  1654. INX
    3 J8 |& |$ d+ o0 Q2 \7 r1 v
  1655. LDA <Data_Cnt
    4 b5 b/ n+ ~# T" i8 ]* i1 M! L
  1656. STA PPU_Addr,X
    ' ]7 `7 r# R8 M4 m
  1657. INX* l( s2 K, B$ J! I, @
  1658. Show_Get_Pos_Center_End
    # A7 f( L4 m( p7 O- N) p  Z
  1659. RTS
    ( F1 Q1 I" ]( H1 k6 w3 P' ^
  1660. .ENDIF1 C6 E2 L) C! [& C; L$ |2 m& K

  1661. 4 ]; g& v; H2 q( A
  1662. ;==============================
    6 T# U; ~4 `  p+ G1 V7 [
  1663. ;音乐端口清除# _5 o, t$ e: T, A
  1664. Sound_Data_Clear
    4 }8 T" J- ?3 _5 w
  1665. JSR Sound_Port_Clear7 _5 X7 F! U& H: {9 M9 D3 M
  1666. JSR Sound_Ram_Clear  W9 s" h5 W- _& ^; a
  1667. RTS, a! `8 o9 {$ A
  1668. ) f1 P" v9 _& X. S1 }7 q
  1669. ;==============================
    6 }& F0 `( V. N6 V8 c4 r8 h5 I
  1670. ;音乐端口清除
    2 T6 v& B, N. Y, w
  1671. Sound_Port_Clear
    1 s/ O& G8 h" L+ ?# M) w
  1672. LDA #$00
    ; z% {  m6 R4 a2 f$ J! B! r
  1673. STA APU_STATUS" Q9 V) l, j" v9 `: L, g; P
  1674. LDX #$004 Q$ C5 L4 A/ l  T& k- F
  1675. Sound_Port_Clear_Write1 q% ~6 }+ `) K+ Y1 i( c
  1676. STA $4000,X
    , {. z8 N, `1 \! R5 b$ I
  1677. INX( M  v' R) J) h- l" N) j
  1678. CPX #$14
    ( I- X5 V4 v$ f& }/ p; v/ i6 A
  1679. BCC Sound_Port_Clear_Write  \$ b3 y" f, C9 Y3 V
  1680. RTS, J7 d" `/ {# h/ T0 r* [

  1681. 0 ]) J( H4 j5 X7 d: ?# k
  1682. ;==============================
    $ s8 S. W" s9 n! p
  1683. Sound_Ram_Clear;RAM清除& _: ^8 [2 E* ?% Z; D
  1684. LDX #$00; i4 k% {% Y/ M/ i; i2 E
  1685. LDA #$009 ~2 X( k5 E9 _; l
  1686. Sound_Ram_Clear_1
    & l) S, U0 m3 ^
  1687. STA Sound_Ram_Addr_1,X
    1 D8 X$ H9 ~% W9 e4 Z
  1688. INX
    + U5 E0 n/ ^1 G$ w& i- {2 c2 m- P
  1689. CPX #Sound_Ram_Addr_1_Size; u- W7 e8 R- l: P6 ]% u
  1690. BNE Sound_Ram_Clear_1& k, ?, ~2 [4 _+ L# w& j5 w
  1691. LDX #$00# Q, f$ i6 u7 |  F) a' ~$ \- I# c
  1692. Sound_Ram_Clear_2' }- V8 D" y# x: c' W! {' [$ `
  1693. STA Sound_Ram_Addr_2,X
    5 R+ t9 ?, m3 n' n* H
  1694. INX, Q; h. P% d, X
  1695. CPX #Sound_Ram_Addr_2_Size
    : R: P" i/ t: Q& g: L% T. u+ K! m/ d
  1696. BNE Sound_Ram_Clear_2$ W. k% {3 B1 X+ c1 Y. w
  1697. LDX #$00
    & F+ V" t1 M' P) Q' b
  1698. Sound_Ram_Clear_3
    ( ?' D+ I* h# x" G5 W
  1699. STA Sound_Ram_Addr_3,X6 h' _  M4 B! C5 {( n* Q
  1700. INX
    7 K. h4 b, v6 L4 f, B
  1701. CPX #Sound_Ram_Addr_3_Size
    & a+ Y+ q/ `$ ^6 t: s( F( j5 b
  1702. BNE Sound_Ram_Clear_3, }5 @6 u1 F" I, m7 B2 F- Z7 ]
  1703. LDX #$00
    / h- ?. g4 ]& v% ?
  1704. Sound_Ram_Clear_4
    , t) k9 M/ r4 n8 a0 o
  1705. STA Sound_Ram_Addr_4,X7 V! S* M2 I- X
  1706. INX; b2 t- O3 \9 K& h, d
  1707. CPX #Sound_Ram_Addr_4_Size
    , b  ], o' T+ @  U
  1708. BNE Sound_Ram_Clear_4
    $ n& o9 a7 X4 E: ^4 \) Z& a6 ^
  1709. Sound_Ram_Clear_54 B( b# [' z! r& N$ q+ e; n
  1710. STA Sound_Ram_Addr_5,X9 K6 b- Q; I$ A5 o
  1711. INX
    / N6 B+ [$ h# b
  1712. CPX #Sound_Ram_Addr_5_Size
    " h: V( s' P4 g
  1713. BNE Sound_Ram_Clear_50 S) s$ |2 H/ E2 C7 A1 G% _, Y8 p. t
  1714. RTS
    , u- H  `; B9 ]  U3 D
  1715. # x: g) ^! L4 i" G" T9 M
  1716. Get_Music_Collection_Name8 S& f% u7 c$ R3 e% h$ {
  1717. PHA
    0 @  [+ x$ R+ @. c4 g5 b
  1718. LDA <Music_Item_Cur
    7 l! w3 R+ P% Y, h; ?' s
  1719. ASL A: S' k6 b; d4 I5 x& h
  1720. TAY
    & f2 F$ N4 G# |9 }# a( ^" o
  1721. LDA Music_Collection_Name,Y2 F1 \7 {# n, M, X* p) q6 B2 z, C7 N
  1722. STA <Data_L* ?* O0 n3 O1 L/ |
  1723. INY- g8 g. N( N5 g  r8 |4 y9 R# T
  1724. LDA Music_Collection_Name,Y5 J; Z; W* D( Z2 _
  1725. STA <Data_H
    * {- H8 s  \# c. m% P. F
  1726. PLA
      |; |2 k1 h' `: o4 ^: x
  1727. RTS2 N# k5 j( {0 o- N' G

  1728. $ n, N0 B* S6 m& F2 x  f4 H
  1729. Set_Sound_Total* r6 i" Q! _$ e+ U5 ~
  1730. LDY <Music_Item_Cur9 U! @  G0 t' i8 ]+ \
  1731. LDA Sound_Total_Port,Y
    ( O9 ?8 `6 I8 v' `
  1732. SEC& N7 J8 W7 g! m' q4 T
  1733. SBC #$01
    , s# z& i" ^$ C/ v' i. x, y& Y( F
  1734. STA <Music_Total
    8 G, `) z1 e3 i3 F- c
  1735. RTS
    ; K, v4 N  `5 s0 I( C0 s0 f; V, B

  1736. 0 y/ g- I8 t- M' t
  1737. Get_Sound_Start3 c9 @9 ^1 N( G5 \
  1738. LDY <Music_Item_Cur9 m2 V6 I# E' \) e* r$ f' Y8 u
  1739. LDA Sound_Start_Port,Y
    , T: ?3 g2 d  @4 L4 W
  1740. RTS
    ! }+ u$ n( ?6 A0 G
  1741. . R8 l, G7 h3 ^
  1742. Set_Sound_Init_Port
    1 Q  N: T: s, O2 Z2 K+ B+ b( [
  1743. PHA( E& B8 p8 E. W& e+ s
  1744. LDA #$20! i& U4 i/ x8 L  ^% x) c% \% z) m
  1745. STA <JSR_Addr_Op) v& S, }% m2 n1 g# M' ]" u
  1746. LDA <Music_Item_Cur9 W& @* a' n' O- t  r  A
  1747. ASL A+ [" p" t! A2 y
  1748. TAY
    " F% o: K5 A! ]% a+ P
  1749. LDA Sound_Init_Port,Y7 q9 L# q% F4 e- ^$ v. b
  1750. STA <JSR_Addr_L
    0 f4 j) f% n8 Z
  1751. INY1 w* Y* l$ J3 }% H; q- \! f
  1752. LDA Sound_Init_Port,Y! J) X* x" W, k" j! Q3 q
  1753. STA <JSR_Addr_H. ]+ f2 N$ Y, B
  1754. LDA #$60
    3 [0 A* J% w! k" Y" K2 Z! k& M
  1755. STA <JSR_Addr_Rts
    $ z0 Y; s) x: O% |& g& x
  1756. PLA
    / g4 ?+ ^+ p4 s' k! O" V" j
  1757. RTS: n1 R4 N: i9 }+ V
  1758. ; J9 G9 I$ c" R
  1759. Set_Sound_Play_Port
      _; _3 I: f- h7 ?+ e
  1760. PHA
    * p: P( B$ }; e! f+ [9 U, a
  1761. LDA #$20
    # e) S0 }/ y$ l
  1762. STA <JSR_Addr_Op
    , Z9 }6 J: E( Z9 V0 f+ g" n
  1763. LDA <Music_Item_Cur& q5 Y8 Q! |: s
  1764. ASL A
    ( {2 _+ |- }" r( M: h
  1765. TAY
    ! u0 k4 Z" C* m/ e9 V6 D& N% _
  1766. LDA Sound_Play_Port,Y0 p2 B% W7 t9 e
  1767. STA <JSR_Addr_L4 N; ]. c2 i0 E" [4 |' u
  1768. INY
    1 [+ I3 p0 T" n& a/ }; r8 S9 U
  1769. LDA Sound_Play_Port,Y
    ! Y; M6 R! g/ w/ @% G6 x2 ?7 j& Q# u
  1770. STA <JSR_Addr_H5 Y) c: Y9 h8 I- W) k+ c
  1771. LDA #$60
    5 e+ Q& L$ Q. U
  1772. STA <JSR_Addr_Rts1 j8 H1 W' d! U$ b
  1773. PLA
    0 ~9 Y% c- F/ z, l4 L1 A
  1774. RTS& ]  N) b7 D* h- u

  1775. ) S- A( b# |: e. u% o2 O
  1776. Set_Sound_Reset_Port( f4 i" T3 D" B0 e: D7 B2 W+ d
  1777. PHA' r5 ~: Y2 J) B, [
  1778. LDA #$202 |1 N* e; V6 F% j2 o& i
  1779. STA <JSR_Addr_Op
    " A# u# D7 J# t
  1780. LDA <Music_Item_Cur2 K  n( @' L! i3 Z3 M/ J  A+ [; D
  1781. ASL A
    " K: \2 `$ Y2 v9 O) g/ S2 `: i
  1782. TAY
    + o# C. r  e! S
  1783. LDA Sound_Reset_Port,Y, p5 b' Q, D: r$ c8 \: w: \
  1784. STA <JSR_Addr_L
      Z+ K1 L' S& D/ C" L* F0 G3 L2 {
  1785. INY2 w- J, X6 e" g% l2 u
  1786. LDA Sound_Reset_Port,Y: b( ]7 e  z" v' f+ |& _+ q7 r
  1787. STA <JSR_Addr_H
    . ]2 Z0 k1 L! d: I; r+ Y
  1788. LDA #$60
    ' v5 o: C  G- |9 x' }" E0 |* ~
  1789. STA <JSR_Addr_Rts5 a' A" q: G! [6 q
  1790. PLA
    ( [9 W& d, ^0 ~5 T2 `
  1791. RTS
    + B" [- _4 c* r5 z8 n9 g
  1792. 4 j5 O5 B* Y  e6 z1 l! j9 l
  1793. ;初始化音乐bank
    5 [" W! U" @* S, }3 q1 h( }
  1794. Init_Sound_Bank
      `" B8 D7 {) F3 D" I: r# |
  1795. LDY <Music_Item_Cur
    # D5 [4 H1 Z& f8 b% S
  1796. LDA Sound_Bank_8000,Y8 \$ h/ C. U) B7 e0 R8 B0 |5 B
  1797. STA <Music_Bank_8000
    ; z. Y5 |3 g# d- o. @" X
  1798. LDY <Music_Item_Cur
    ' M  ?- V' P6 y: O. b/ |9 K& O' N$ N3 Q
  1799. LDA Sound_Bank_A000,Y
    : G2 A. \% [7 Q& H# \7 n  l) C
  1800. STA <Music_Bank_A000
    ( F; I! h# p" `8 @& ?( Y
  1801. RTS2 Q. F. w' O8 D1 C3 q; c- w' d
  1802. 9 o6 E6 F! C/ V. S' P8 }- \0 j: C
  1803. ;==================================================9 A' J& W$ ^; ^+ e! Q7 W. F
  1804. Sound_State_Reset;音乐状态重置
    + z2 g! K5 [& {, s
  1805. JSR Music_Bar_ReSet        ;重置音乐条
    2 ]7 O# z5 O5 T$ t  ~: F
  1806. JSR Time_ReSet             ;重置播放时间
    % ^- L% Q( {$ [; G* h: E

  1807. % g% ~* B2 o! T3 ~' V
  1808. LDA #$000 K5 ?. l6 U% ?8 |
  1809. STA <Music_Stop_State+ Z3 s; A' X0 b
  1810. JSR Music_State_Show       ;显示播放状态9 d$ t+ E& ?! m8 M
  1811. . G7 H" G$ K0 [4 V' B' B
  1812. .IF Track_Name_Pos, m2 {5 M, N9 `  D) J6 Y+ o
  1813. JSR Show_Track_Info        ;音乐曲目名显示
    0 b2 Y3 T" ?  _8 H3 c
  1814. .ENDIF6 Q" V/ t8 T% v" {5 o
  1815. ! m: B: f9 g6 c, j  O, h
  1816. RTS% p# g3 e9 \, S2 D# w
  1817. 5 S- O0 d' M! z3 e
  1818. ;==================================================5 h6 a% R- T* j$ [
  1819. Sound_Init_Proc;音乐初始化处理: ~( S# R/ v3 e
  1820. PHA& {  X$ `- u# C& s9 B
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址
    0 N9 _3 x. r9 `& q0 Y* b2 v
  1822. LDA #$00* Y. ~3 E, T- {& i5 t& t' M* D
  1823. STA <Scroll_H               ;重设水平滚动
    6 d' |- n- n0 o
  1824. LDA #$0F% W6 }9 m9 R6 S# E
  1825. STA APU_STATUS
    ( v. u- }9 N* f& f0 q
  1826. PLA
    1 K8 v" s# y9 W  z
  1827. JSR Sound_Init             ;音乐初始化
    6 @% g( c5 B  [, B
  1828. JSR Sound_State_Reset      ;重置音乐播放状态/ x( F. ?$ F+ c, H, L
  1829. RTS
    ' u9 _1 {2 [6 k8 T
  1830. ( s' w( D& R9 n7 I$ c4 P
  1831. ;==================================================. K% F& a/ Q% r; e7 O& Q; i, b
  1832. Sound_Play_Proc;音乐播放处理
    7 b# C# \4 x$ ]9 b# |- l
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址( d0 `  ~5 L+ B5 V7 f( V) V- r
  1834. JSR Sound_Play             ;音乐播放
    7 r) i4 q$ x, [1 y
  1835. RTS
    + T2 I: |8 W9 @! f# D" F8 O
  1836. ) P3 U- ~, s( w) T: P- \& S
  1837. ;==================================================6 ~: m2 O7 I' P; k
  1838. Sound_Reset_Proc;音乐重置处理
    & f9 j+ y0 B; H) m8 S9 E* S
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址! |1 \8 n1 P9 g0 X7 d; g* O
  1840. LDA <JSR_Addr_L
    7 H- U; K4 D: N7 _( F
  1841. ORA <JSR_Addr_H
    ! h- A# a0 i- U* l
  1842. BEQ Sound_Reset_Proc_Default) N) |+ U. T# d: ^
  1843. JSR Sound_Reset            ;执行音乐重置
    2 ~9 y/ E' U, d- k9 ]
  1844. JMP Sound_Reset_Proc_Init_Sound0 }" E/ d; i+ D+ R6 W1 n$ h' n
  1845. . i3 E) c7 a4 Y0 O+ W
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    8 x. i2 A! A# {. I

  1847. & W: X( ~. J' {0 U9 l
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
    $ G# a* ?3 h: [5 l3 P; y
  1849. LDA #$002 |5 F3 S' b9 j/ r8 |9 n! J5 n1 S& j
  1850. STA PPU_CTRL) y) y1 b, k! P
  1851.   u! S( z* r9 \* W2 \( ~1 H4 j
  1852. JSR Sound_Data_Clear. M# r  d. B9 p0 G9 E" Q' l

  1853. * h  t8 V$ j! v+ @$ |, ~; g) i( G, H
  1854. Sound_Reset_Proc_Default_Wait
    9 I" ~6 M) ~( ~: v. A! s
  1855. LDA PPU_STATUS
    7 J4 ]" x: y& g& r% i7 r3 l. E
  1856. BPL Sound_Reset_Proc_Default_Wait
    # O% d% l3 i6 {4 P: l3 G7 l

  1857. ) h+ ^/ Y4 W- S* R/ `
  1858. LDA #$00  Q5 j  I+ ]6 _
  1859. STA PPU_ADDRESS
    $ y- b1 A0 U0 |( c
  1860. STA PPU_ADDRESS; E- R! x# |, l% ]! T8 k4 u
  1861. STA PPU_SCROLL
    - A& J) Y; `: Y9 [5 H
  1862. STA PPU_SCROLL
    $ w. H1 b7 C$ a( p) }9 C9 H& q/ p
  1863. & e$ j# D. G: v5 y- j
  1864. ;恢复PPU控制" X2 r) b8 l5 `& F, O
  1865. LDA Screen_Ctrl' `6 p7 d4 t: }4 a" X- T  L
  1866. STA PPU_CTRL
    ! q& a! N0 W' O9 }. v

  1867. 0 l, @, P$ m' M$ u5 W$ D
  1868. Sound_Reset_Proc_Init_Sound
    - a- p: t" T% N. s7 X5 d3 A
  1869. LDA <Music_Stop_State
    ' G8 n- t0 M6 i. h/ e( D
  1870. BNE Sound_Reset_Proc_End
    ( c; Z# z. @" R$ d2 H7 b
  1871. LDX <Music_Item_Cur
    5 V- j# b7 v8 }. N/ K5 x7 W: Z
  1872. LDA <Music_Cur,X
    5 i4 D9 D. _; {6 b) F: \) Q/ \
  1873. JSR Sound_Init_Proc5 @: g; _# m6 ^+ v' y
  1874. Sound_Reset_Proc_End' g7 ]- t( w" m4 Y3 L; ]% A+ r! }
  1875. RTS
    9 a8 O. w6 U2 Q& a# D
  1876. 4 H/ o# K- |# e
  1877. ;==================================================
    6 z; H+ T% ~* z
  1878. Clear_Item_Text;清除页项目# Z# E  l4 n( [, J5 E& Y
  1879. LDX PPU_Cur
    ( o6 o3 X5 e! q+ z% C
  1880. LDA #PPU_MODE_CNT_CLEAR& F; S2 A6 ~1 X
  1881. STA PPU_Addr,X
    5 F9 t+ ]4 e0 U1 R/ Z
  1882. INX8 z! w: r7 X- N. `

  1883. 5 p( Y6 T9 t9 _- l, [. @+ j1 x
  1884. LDA <Page_Last
      q, Y1 f2 g& T( T/ k7 G
  1885. SEC
    / j! ?, g5 ^5 x" w" `
  1886. SBC <Page_Last_Index
      G! i: s. k2 `* W- i" A5 D
  1887. ASL A
    2 k0 n6 ?- M# L2 e+ F1 @: L
  1888. 6 y/ s. s. }. C  T9 O* S. s
  1889. TAY; F+ b1 Z; h3 }' `2 s! k
  1890. LDA Item_Pos_Data,Y2 |) [8 k( Y, m3 n; C/ C! p. j
  1891. PHA1 _% l8 F: C+ u! D. k& o/ j
  1892. INY
    * U: ]! [# A) a! u* ?
  1893. LDA Item_Pos_Data,Y+ m5 \/ r( V3 B/ I+ U# ^/ f
  1894. STA PPU_Addr,X* b; o- C. S6 t  F' b( T. S
  1895. INX
    0 C, H1 S6 c  D7 E
  1896. PLA2 \% J# S. p0 x7 H! o8 {7 Y
  1897. STA PPU_Addr,X/ V  \: `1 `; H* h2 x2 M) E" y) F
  1898. INX
    1 y" p; Z# W( l( z
  1899. : Q3 m6 C$ s5 ~
  1900. LDA <Page_Last6 x9 v$ j0 m" r( p: _8 n1 h
  1901. ASL A0 T  |  N3 P5 ]& D
  1902. TAY
    0 M3 z+ \% N1 g8 H$ d% Z. M4 P
  1903. LDA Music_Collection_Name,Y6 J8 n0 H+ @6 m: m/ S  r9 R$ C
  1904. STA <Data_L
    ; ~/ N1 {4 X3 l% J3 ?, |3 E  O
  1905. INY
      A# `2 j) k4 e, V8 P5 Z# |
  1906. LDA Music_Collection_Name,Y" i  {: A- f, C& E$ l7 c. b# o
  1907. STA <Data_H) @& |5 [. k! Y% _8 c
  1908. $ V, O- ?/ E# W: L9 ~# ]! d
  1909. LDY #$00+ C: j# P- s$ W0 [: b, a
  1910. LDA [Data_L],Y( c; \# r/ S: ]% g/ h3 [, d8 @
  1911. STA PPU_Addr,X$ A6 D1 d5 b+ N) Z; S
  1912. INX
    ; Q7 J. d; G1 j8 N) H/ [* K
  1913. Clear_Item_Text_End
    ' n6 u& E( n- B" k3 P
  1914. STX PPU_Cur
      I) ]' u& j7 r$ B" P
  1915. RTS' m9 j/ z; S0 k4 F8 M* {

  1916. ) @6 Y. ?/ {4 Y) b( [
  1917. ;==================================================
    : ~5 o& |: T5 d, k7 E9 h) |
  1918. Show_Item_Text;显示页项目" a) Q% \+ y; q% R! i, Y
  1919. LDX PPU_Cur+ Q5 ]5 I- X: Z6 Q1 v+ d5 h
  1920. LDA #PPU_MODE_CNT_LINE
    1 P/ j/ v- l3 X# [# Z$ g7 b
  1921. STA PPU_Addr,X$ z5 X# U/ H' a1 D
  1922. INX" n/ ~: Y) i8 S1 m+ R  N, C* f* N3 M
  1923. LDA Page_Cur
    ( b$ m8 B& _, \+ n$ y* O
  1924. SEC
    3 W, o7 c9 n# {/ A# [3 |5 [
  1925. SBC <Page_Cur_Index
    $ A. D- [% o5 H6 x5 ?8 x
  1926. ASL A6 u$ F* d* @& P1 Q
  1927. TAY
    & r. R9 Z! ?$ a$ `  S5 T* M" w
  1928. LDA Item_Pos_Data,Y& B0 v5 T( {7 o6 L0 e
  1929. PHA
    ) u4 @& \8 j+ D8 J; t8 m
  1930. INY
      B5 o: h- M% Q* d$ o
  1931. LDA Item_Pos_Data,Y
    " J  G# H! g3 r* T% Q- r) w# a! `
  1932. STA PPU_Addr,X
      b' {5 ]) _3 u$ P
  1933. INX
      D6 ^+ U) s* Y2 y7 q# H
  1934. PLA* E) b, A; B. t  ~2 G
  1935. STA PPU_Addr,X+ D5 e; C4 `! H# `2 {/ c; ]
  1936. INX* ]5 v( ], k. c
  1937. % r& A7 S% V# S
  1938. LDA Page_Cur7 a; F  x+ |8 F. R3 y/ x
  1939. ASL A' [8 X$ q/ P' O0 }+ F
  1940. TAY
    3 [& Q) t) \  q* i% e
  1941. LDA Music_Collection_Name,Y
    0 q4 g( m/ J/ ?+ x4 [
  1942. STA <Data_L
    , \( n: y% G, }+ I
  1943. INY
    8 f" n7 D' p& Y) B2 _) P  J+ o
  1944. LDA Music_Collection_Name,Y% \1 ?; v$ ]9 b4 n( \, A
  1945. STA <Data_H1 p; e, w& ?/ @% G3 \/ y2 R

  1946.   y8 B6 n& s( E; h/ M3 b) s8 p
  1947. LDY #$006 L+ p' Y$ l/ [
  1948. LDA [Data_L],Y- y* ~8 V. n: @: r0 [, E
  1949. STA PPU_Addr,X
    5 [( h% F6 ^% I6 a
  1950. STA Data_Cnt
    $ ^! W5 a- J" Y5 Q- c
  1951. INX
    # p4 j: }/ U4 f7 Z

  1952. ! X3 L! W3 L# O9 K/ k* Q( E
  1953. INY
    ' a1 v" g$ ^" N! C5 O* N
  1954. Show_Item_Text_Write
    8 l/ p) j9 t0 f, f: u! S# a7 D
  1955. LDA [Data_L],Y
    . P  F+ W  P5 s4 T- `" H
  1956. STA PPU_Addr,X
    ) I! h" p( P+ r" I1 C/ ?  N% k6 \
  1957. INY
      n( L4 Q3 w* u
  1958. INX
    * P% ?( d1 t0 {8 F. x* e9 R
  1959. DEC Data_Cnt
    / U* [+ ?0 v  i! P( T. _
  1960. BNE Show_Item_Text_Write
    - [7 h' J- }( n
  1961. 7 W- G; q! U# @$ ?
  1962. Show_Item_Text_End% g+ ^! m* ?7 \! r0 l2 t, T
  1963. STX PPU_Cur" H1 V  n9 y2 c+ I# _4 |
  1964. RTS  a* n6 N2 H! G9 v2 j' l0 o

  1965. ( U; D1 \8 o+ n# \* S8 K5 k2 Y8 V
  1966. ;==================================================, |1 N& Q; c" B
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量1 J, I. [; J# Y3 \; O+ }
  1968. STA <Data_Buf
    ( ^* K8 ]5 N5 r6 F
  1969. LDA #$00% Z9 ^, r/ T8 X% W4 G% C  e
  1970. Get_Page_Index_Calc1 X0 s$ \- X1 ~1 L$ S( K
  1971. CLC
    3 O1 m: M# P3 Q+ Z$ G% @2 I, A' e# Y
  1972. ADC #PAGE_SIZE6 [2 `7 A, J+ W& ?& F
  1973. CMP <Data_Buf2 f" c. ~2 i4 X8 p6 u1 t8 {
  1974. BCC Get_Page_Index_Calc
    9 r7 B& G% f/ b8 O" J9 T3 r
  1975. BEQ Get_Page_Index_Calc_End
    " F& m: P1 L) B& R
  1976. SEC
    & A) `4 k3 n" ^, I- O' J& B% K5 A! h
  1977. SBC #PAGE_SIZE! n& E6 i$ T. o7 F% c/ K0 m0 n
  1978. Get_Page_Index_Calc_End9 k/ o" @8 O  L& a* U8 y
  1979. STA <Data_Buf5 U+ V2 u2 U( G4 @# F
  1980. Get_Page_Index_Cnt2 ]5 O: t5 H' M* W/ y! K% r& e) d
  1981. LDA #PAGE_SIZE' a. N& V0 ~/ E
  1982. STA Data_Cnt8 [/ ?) a; {; t7 F- m& H* p$ m
  1983. ! e) H9 N$ q1 m
  1984. LDA <Data_Buf' \$ S& p/ t! w% e* _/ a
  1985. CLC
    0 I) F" L! ~, l0 }8 P4 q/ m6 x
  1986. ADC #PAGE_SIZE
    ( R& X3 d' H% F
  1987. CMP #ITEM_MAX_SIZE
      O5 L. K" v2 ~) Q
  1988. BCC Get_Page_Index_Cnt_End! v. J+ n- j& o7 }1 V6 }, H" X

  1989. $ c2 X( v; A2 d, e* P
  1990. LDA #ITEM_MAX_SIZE
    . I, j! V" _8 T( r( x3 v
  1991. SEC# I3 n2 g: N* Q& Z) J- X# C* N
  1992. SBC <Data_Buf
    4 z, A- @" {; b* c  ~+ X* x
  1993. STA <Data_Cnt
    # L, n0 V" T3 B4 ?
  1994. + Q. A/ W( K2 Q/ J
  1995. Get_Page_Index_Cnt_End: x# \7 f6 T# t% A, [/ _0 H
  1996. RTS6 m1 w, ?" b0 y  Y- Z  _

  1997. 1 b6 q, g  c, a8 S6 N1 Y0 x
  1998. ;==================================================  L" [* c* c. M! B1 N  U! g
  1999. Get_Last_Page_Start_Index
    + d) j6 T" }+ I9 X2 {9 L
  2000. LDA <Music_Item_Last
    # }) [- V0 a& [/ D5 v
  2001. JSR Get_Page_Start_Index+ b( C4 `! |$ W. z- M. p
  2002. LDA Data_Buf7 z1 V7 i& r0 a. W; y
  2003. STA Page_Last
    0 Q0 q2 u9 i7 D+ o6 }- p! Q
  2004. STA Page_Last_Index
    3 D2 M, f, p! W" L8 L
  2005. LDA Data_Cnt7 ]$ O! {2 t' n
  2006. STA Page_Last_Cnt
    5 a3 E. d& I5 W0 L
  2007. RTS
    9 L' t9 p8 f) S4 }. g8 J# h
  2008. , p% m8 r: L2 _5 p2 i+ J
  2009. ;==================================================
    * D; n6 |! H1 c8 Q
  2010. Get_Cur_Page_Start_Index& w( h/ a& J' E! P
  2011. LDA <Music_Item_Cur/ E: Y: ^- u- O( D6 E
  2012. JSR Get_Page_Start_Index( l2 l8 k+ |. Q% C0 n
  2013. LDA Data_Buf
    ) v& X8 H8 o" R8 v+ }7 }
  2014. STA Page_Cur
    1 }6 r& c6 ]4 _# L9 F
  2015. STA Page_Cur_Index/ L. Y. {* @( S- A; q$ \
  2016. LDA Data_Cnt5 m8 g" J! r. x6 n
  2017. STA Page_Cur_Cnt
    - o7 Z( z. l' H% A
  2018. RTS. w0 {: F+ K7 \* w7 E
  2019. & X8 A; G$ q- n! `) N! q
  2020. ;==================================================3 A; G! O( i! i; r0 a2 ~. A0 e: a$ X( _2 V
  2021. Show_Page_Text;显示页文本
    - K) o2 e( N! i0 M' ^" u2 x
  2022. LDA <Text_Disable_Flag
    * M1 c2 |1 h: M4 j6 v
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    0 Y" ~# o9 Z" C4 @' O3 l
  2024. STA <Text_Disable_Flag
      f! y5 _( @- I" W- h7 f
  2025. % g, ]3 D7 ?% ]' w: n( r8 z8 K
  2026. JSR Get_Last_Page_Start_Index" E6 e: C8 n3 l! g
  2027. JSR Get_Cur_Page_Start_Index
    4 l" Y' E7 x$ Z4 Y

  2028. ( Y' A; T( v8 ]9 `1 A) c5 ^, E1 I0 c; U
  2029. Show_Page_Text_Set: A8 m; B0 C% F/ P3 w
  2030. " f' r3 M8 y/ V7 z2 ], j$ Y
  2031. Clear_Page_Last_Item;清理上一页1 `! X0 X: Q2 F6 W; {
  2032. LDA Page_Last_Cnt& b1 u% h0 M* Q, S  S
  2033. BEQ Clear_Page_Last_Item_End
    - T+ Q, K7 Y! @7 G( h% C
  2034. JSR Clear_Item_Text3 h& D6 ?* U) k
  2035. INC Page_Last
    # Q5 ?8 o+ K) L4 U/ ]9 F
  2036. DEC Page_Last_Cnt
    $ F& Y- u6 f, n; ]
  2037. Clear_Page_Last_Item_End
    1 ^' B1 q' I4 Q2 y0 |
  2038. - z* N- o6 g8 \2 F5 x% {
  2039. Show_Page_Cur_Item;显示当前页
    - t! X7 i$ t, `$ |1 |
  2040. LDA Page_Cur_Cnt. K+ e! i2 |5 L4 q
  2041. BEQ Show_Page_Cur_Item_End) k! @7 r  s+ q* u9 K4 x* N
  2042. JSR Show_Item_Text
    8 W, l  a. L4 |% f2 W# O' s7 G
  2043. INC Page_Cur
    / j6 h& S% g$ p; L2 d* \( R, G
  2044. DEC Page_Cur_Cnt% P  k- B$ B* N) h
  2045. Show_Page_Cur_Item_End( x7 c' n5 p# _  I" i$ _

  2046. . j( R0 R( ^% `. _* m
  2047. INC <Time_Wait_Cnt
    * \% I* K: D# j8 F1 \3 w- u& n
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作# p1 t! g5 q/ C+ Y3 q3 _
  2049. LDA <Time_Wait_Cnt
    - U$ Q4 R$ v0 B, B( D" k
  2050. BNE Show_Page_Text_Set_Wait* \' A( x. U# X* B! ?( _

  2051. ! ?! i, D; }: h% l( D- s
  2052. LDA Page_Last_Cnt4 l8 W( ^5 c3 T2 H/ j% U6 @
  2053. ORA Page_Cur_Cnt' e( `0 M2 A* }9 J  {& U
  2054. BNE Show_Page_Text_Set
    - y2 V4 z5 h: p) G: M
  2055. LDA <Text_Disable_Flag! ?" z6 w1 ~  G! B" @  C; X
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    1 L6 G$ I$ m3 c  g" h
  2057. STA <Text_Disable_Flag
    6 Y7 ]& f0 X1 i7 T+ w
  2058. RTS
    0 {7 Z+ i3 I1 O' ^

  2059. , V1 F6 y) c( }" ~$ m$ b
  2060. ;==================================================
    - X% i/ g: j% L0 N3 E/ e! |
  2061. Last_Item;上一项
    . [- I+ I+ B+ f8 ?( [2 r& }
  2062. JSR Clear_Last_Track_Name
    8 ]8 }/ G; [- j  S4 ~
  2063. JSR Disable_Text_Draw
    2 D2 A  f: \, q# r  ?4 ]- l. E) m
  2064. , b6 s& K2 T; [+ v; Y( x3 y1 C$ X
  2065. LDA <Music_Item_Cur
    # T. s0 l3 m( ?4 r! e2 l
  2066. STA <Music_Item_Last
    0 p' u# N9 m" R! I% ?! ]" w

  2067. 4 M! V5 K9 r7 l$ R2 ]
  2068. JSR Get_Last_Page_Start_Index/ {/ `, e, y! Q( s9 j: @

  2069. 4 a/ v' i* g( r+ m
  2070. LDA #$002 e, A, p! B- i7 Q. ]" v  B
  2071. STA Data_Buf
    ; q6 o5 z1 g' {" @' K

  2072. 2 [8 C1 V3 X$ ^& N5 Y* ^
  2073. LDA <Page_Last
    9 s" r3 `9 J6 v! V5 c6 V6 A
  2074. CMP <Music_Item_Cur- U0 \. q, v) s9 O+ S1 T
  2075. BNE Last_Item_Begin& X6 L6 H  Y/ ?' E8 I+ m3 O. Y+ D: _

  2076. 9 z1 u/ ^+ g+ X! Q0 N
  2077. LDA #$019 x8 b; N9 ~+ _0 E
  2078. STA Data_Buf
    # U+ f( ^% k5 @* e
  2079. Last_Item_Begin
    # w) v3 _+ t1 D8 q: F" D
  2080. LDA <Music_Item_Cur
    0 x5 F5 d, C( S# `: J3 i
  2081. BNE Last_Item_Set0 B* Z1 v' q. d7 W
  2082. LDA #ITEM_MAX_INDEX + 1
    * _  z" L- e0 ^7 }8 n
  2083. STA <Music_Item_Cur
    : i% X  H' g$ B  r1 }2 T8 T) ?

  2084. . |' g; n9 A8 g
  2085. Last_Item_Set/ c! y" i6 Z! ]/ s
  2086. DEC <Music_Item_Cur
    2 F5 Z8 K% C  L* D- {- A* Q
  2087. LDA <Music_Item_Cur- N' H2 C6 T  ], L* ^$ o
  2088. JSR Reset_Current_Music
    & g: f! Y- Z% u4 H

  2089. 7 c! ~$ P* }# T8 Y) ^: `
  2090. Last_Item_Play" l% i# ~4 Q& Y
  2091. LDA Data_Buf
    ! y! h. Y& F; Q. g" s
  2092. BEQ Last_Item_End: K' h8 D6 I4 T# I! L
  2093. JSR Show_Page_Text
    7 T$ R& l  \# A/ d. {5 b
  2094. Last_Item_End1 \# l7 E# {0 c/ U2 P
  2095. RTS
    ) b1 T9 V# M% D
  2096. 7 l9 x- t) k  H4 }! G* l2 z
  2097. ;==================================================- J% z$ a9 m4 x: O+ _
  2098. Next_Item;下一项9 g& }. q0 w4 x& y" j6 p9 P& U( P
  2099. JSR Clear_Last_Track_Name" m; j9 f- q9 [8 e7 {& P
  2100. JSR Disable_Text_Draw
    $ x& }8 h/ X! ^! A: h& {* \
  2101. ( W0 ~% p3 ]4 [
  2102. LDA <Music_Item_Cur+ o) Z" v7 u& Q! m. G% B' w* l
  2103. STA <Music_Item_Last
    9 ~. I1 t- H' [( ]8 h

  2104. # W/ x7 _' n6 k# W
  2105. JSR Get_Last_Page_Start_Index  C3 [* a. o! r; L: f, L6 a: g" J( }; L& M

  2106. 8 X, i/ @7 Q9 k1 a
  2107. LDA #$00
    * o! K( H. L- `
  2108. STA Data_Buf
    : _9 {2 w" ], {) L9 o" F$ `! q

  2109. 0 W1 d( Z8 P% |# m+ ?0 e
  2110. LDA <Page_Last
    0 q3 w3 f! e! o+ y
  2111. CLC
    : @+ A: k+ M9 \( ~. g
  2112. ADC <Page_Last_Cnt$ L% e3 D  _- e0 F& f6 g
  2113. SEC" I1 z: n$ U- C/ y+ X
  2114. SBC #$01
    . Y. O3 Q/ x* m/ n/ M* n! q
  2115. CMP <Music_Item_Cur+ A# @' g( f' W% i: _* ]
  2116. BNE Next_Item_Begin
    + N, _( c  Y. T$ R3 Y

  2117. . p2 c, e/ J( l; g. u" g
  2118. LDA #$01: [9 Q$ U* c; |( N" ]- Z/ _
  2119. STA Data_Buf. r  y9 f9 a/ l  l
  2120. Next_Item_Begin
    8 W1 T* j, K7 ]7 Y/ @8 ]8 E
  2121. LDA <Music_Item_Cur- j& s# ~' _: i
  2122. CMP #ITEM_MAX_INDEX
      I. v) |/ [% p" u( n$ N
  2123. BCC Next_Item_Set$ Y# q) @( S0 G1 J: o) U
  2124. LDA #$FF
      U) G) Z9 N6 w& |& N6 e4 h( c
  2125. STA <Music_Item_Cur6 Y7 ?* Y' m9 ~; P
  2126. Next_Item_Set
    , I4 _* F! j$ z: A
  2127. INC <Music_Item_Cur
    % v* l- v6 w5 P
  2128. LDA <Music_Item_Cur
    5 _7 D, |! C8 o( y* h
  2129. LDA <Music_Item_Cur
    6 {' s$ p  C! s8 p
  2130. JSR Reset_Current_Music
    2 u: \) g  H. B+ B
  2131. Next_Item_Play: ~2 g0 v& d7 C1 s9 w
  2132. LDA Data_Buf: ]- p; N- }9 B4 r8 b
  2133. BEQ Next_Item_End
    / V- I1 q6 o; h  V; j# L5 u
  2134. JSR Show_Page_Text9 ]& Q8 w& [+ }. _
  2135. Next_Item_End$ ~( @. S; A5 |! E/ G0 o
  2136. RTS
    7 e! J- u6 o: U6 I
  2137. ; L1 O& I' T$ n( }/ ?- C
  2138. ;==================================================9 }7 m  }+ u6 t$ }% {0 U
  2139. Last_Page;上一页
    8 D& K$ D% h& Y. S
  2140. RTS
    ; V+ m; |$ P$ e, K+ f, X: E

  2141. + N0 k, s1 K8 F: Q: K' B3 }
  2142. ;==================================================
    ; h; V; Y0 n0 q/ A$ F+ ~* V: @
  2143. Next_Page;下一页* q' g9 W# l7 p4 h+ ~, D# t; T
  2144. LDA #PAGE_MAX_INDEX$ R$ F5 }9 J4 j. I
  2145. CMP #$01! y9 h3 b- p; [
  2146. BEQ Next_Page_End4 I. S* I5 t7 x% ^6 j6 T& h* a6 [

  2147. ) X3 A3 F" R% \% M- e# t. l
  2148. LDA <Music_Item_Cur
    ( {7 q* Y5 W" \, C9 C
  2149. STA <Music_Item_Last
    9 M. {0 y$ ]2 n4 p! }- s- D
  2150. ) D, D3 ]; X/ o3 |5 o' o
  2151. JSR Get_Last_Page_Start_Index
    ' z$ `7 d+ t4 Y5 t% u2 f4 T, t
  2152. $ S" b& U% z8 b2 |4 b
  2153. LDA <Page_Last_Index/ Y, a1 `4 s' S) t
  2154. CMP #PAGE_MAX_INDEX# `; _' g" t- `" M5 e7 j& D
  2155. BCS Next_Page_In_End_Page1 l$ x3 T" N4 f+ z8 x3 e2 ^" ^# l

  2156. . _; M' R& H  m* `+ o! l
  2157. Next_Page_Not_End_Page;不是在最后一页
    + m  H1 i3 ?! d% }9 Z
  2158. LDA <Music_Item_Cur- n6 k0 _& O% y/ `* z1 x1 Q
  2159. CLC
    " p$ B1 S  E4 G9 E6 O
  2160. ADC #PAGE_SIZE
    7 c8 t6 w0 Y9 ]
  2161. CMP #ITEM_MAX_SIZE
    # x! z+ F/ K' o1 _2 A
  2162. BCC Next_Page_Not_End_Page_Less9 O0 K6 t7 \5 d& `/ U7 N
  2163. LDA <Music_Item_Cur, Y0 t9 h- k1 O$ ?/ h
  2164. SEC
    # M# S  f3 T1 f: S" _& Z9 w3 _0 G" ~
  2165. SBC <Page_Last_Index
    6 ?7 `" [4 R- L2 X7 M
  2166. CLC  m  O  c$ D; V! y/ ]
  2167. ADC #PAGE_MAX_INDEX
    - L$ ~1 w+ ^- u4 l+ g0 K. F6 q
  2168. CMP #ITEM_MAX_SIZE
      H4 R9 m/ R! h/ A
  2169. BCC Next_Page_Not_End_Page_Less4 ?7 k/ D+ m8 t
  2170. LDA #ITEM_MAX_INDEX
    , X/ m1 Z6 T9 E! B4 B. O7 q) p
  2171. Next_Page_Not_End_Page_Less3 C, b9 a; t' {9 m1 C0 `1 R3 N
  2172. STA <Music_Item_Cur. E+ S6 ~- U6 z8 e' Z
  2173. JMP Next_Page_Reset. r0 O5 \+ j/ d' ~% O

  2174. $ \% n4 o& X+ d# W
  2175. Next_Page_In_End_Page;在最后一页( I9 ?/ L$ H4 W( l& Z, l
  2176. LDA <Music_Item_Cur
    5 g* ]& Q9 g6 V0 W  I9 g/ k
  2177. SEC
    ; _/ x& X) _; Y8 w* {
  2178. SBC <Page_Last_Index" W4 _- p. D( t" R/ z+ i9 T
  2179. STA <Music_Item_Cur
    7 B6 {/ b4 v- q
  2180. 2 W, Y6 o+ z7 s; ]" l
  2181. Next_Page_Reset
    ) G8 F  i5 G" N/ o+ q
  2182. LDA <Music_Item_Cur; E3 t, E4 y) ?+ ?" F/ B& i" v4 U
  2183. JSR Reset_Current_Music
    & i2 o1 P( H- C
  2184. JSR Show_Page_Text3 ~4 y9 y& F, f3 [/ y" _" k! e
  2185. Next_Page_End
    . @* V% `* y' Y- M; V8 M
  2186. RTS
    # A& u5 j) ~3 g+ Z( e7 |
  2187. ; d. h+ a2 p* W6 v
  2188. ;==================================================
    # t. N, B% J0 I2 @
  2189. Disable_Text_Draw;禁用音乐条刷新4 h- C) \" v0 k7 H0 p% k
  2190. LDA <Text_Disable_Flag/ h3 h$ f; `6 H' w0 ^+ r
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME* A# ?1 W& h1 [6 A$ O; j8 B9 X
  2192. STA <Text_Disable_Flag+ u, ?. U! ]# b$ M; {3 g
  2193. RTS
    & O% h3 t; v: M4 n

  2194. / W! v& a5 {1 G& C6 ~# J8 u
  2195. ;==================================================6 v# ?- v9 R* _5 i5 M8 p& x
  2196. Clear_Last_Track_Name;清除上次曲目名
    5 r0 U+ H6 |( g$ p) B5 P
  2197. LDX <Music_Item_Cur  Z7 Y% ~, M* p
  2198. LDA <Music_Cur,X
    ) s1 ~6 h4 {9 S0 n
  2199. .IF Track_Name_Pos
    6 \, O# Q; r" i3 \! B: G3 X$ g) v" l
  2200. JSR Clear_Track_Info
    9 U- ]! g8 x) J% {) k" Q# L* d
  2201. .ENDIF. r4 y. d& e7 g* j6 X! c! \
  2202. RTS
    & k0 Q  @2 A0 x" P

  2203. - r3 ]4 m& f% f8 o; j: |
  2204. ;==================================================
    1 z$ U9 E' _7 f
  2205. Reset_Current_Music;重设当前曲目8 n8 e+ M7 }8 O% _& u

  2206. 5 g; H" h4 m4 O8 Q9 u6 [/ |+ P  k
  2207. ;写入当前总曲目
    8 B, {% `* W3 r1 ]+ @) F2 Z, G
  2208. JSR Set_Sound_Total/ T, N3 g6 q" F5 {6 i% C" E
  2209. LDX <Music_Item_Cur# S: x& j/ e3 q
  2210. 8 s$ \2 ^" M/ D4 d6 a! x1 t/ Z% t
  2211. LDA #$00
    ' ]4 ~$ V; s+ N; ~+ J: F4 p. H7 M) E
  2212. STA <Music_Last4 m/ U1 n1 w5 c3 E2 c3 X

  2213. # N: e3 @; ?) M1 m2 p1 f
  2214. JSR Sound_Reset_Proc% Q% k) h; T/ n
  2215. JSR Music_Show& Q$ r3 Y- R  R1 D8 ]
  2216. RTS* Z  L( @6 H$ I" F; I0 w! Y2 \

  2217. - m" ?2 p9 u* W, t
  2218. ;==================================================
    % {6 Q" ~3 P: F" J
  2219. Music_Song_Stop;音乐停止! S5 Q; o8 [$ q9 s
  2220. LDA #$014 l( u- p6 e* {- G: `, O+ }
  2221. STA <Music_Stop_State8 N) }+ Y. I1 p
  2222. JSR Music_Bar_ReSet
    / x0 n( m/ e9 L
  2223. JSR Time_ReSet. Z, i; F$ j; P: _5 E6 ?6 N3 U3 K
  2224. JSR Sound_Data_Clear- E+ L7 N  i2 l) {6 O
  2225. JSR Music_State_Show9 M4 L4 i1 m$ l5 R! S' u; S
  2226. RTS7 C$ x4 b; k4 D' X
  2227. 7 |9 J8 R/ p6 u' |
  2228. ;==================================================. V/ V, n- t, ]  _$ Q. M
  2229. Music_Song_Play;音乐播放
    ' m7 i; q4 X+ e
  2230. LDA #$001 B8 n) N; f; g4 r( n/ t
  2231. STA <Music_Stop_State
    / V1 Q1 C" e9 T  L7 b5 ~: C/ N
  2232. LDX <Music_Item_Cur
    8 S: F' n/ ~+ Z/ Q; B, E
  2233. LDA <Music_Cur,X# c6 n0 \, i/ O+ J
  2234. JSR Sound_Init_Proc# R/ x  \6 J* f) m& y$ u7 p
  2235. RTS4 j. c. o9 F$ O$ S7 w

  2236. % u, s& a* t* V& ?% J
  2237. ;==================================================1 K( ~& [8 K: W+ T
  2238. Music_Song_Last_10;上10曲/ h' ^% ^( S/ `9 j% M
  2239. JSR Clear_Last_Track_Name
    & n  L- n6 z% O* L/ N# K, H# _/ r
  2240. JSR Disable_Text_Draw
    & B4 ^* q4 h! @$ |
  2241. LDX <Music_Item_Cur
    5 {9 E5 H  q5 ]+ t* i2 I  w5 z% o' x
  2242. JSR Set_Sound_Total& K/ n, }% S/ u7 ~2 j/ J
  2243. LDA <Music_Cur,X
    3 W' ^3 O) c! P3 a
  2244. SEC
    0 {, m5 o8 ^  p' A3 q
  2245. SBC #10; v& N9 \% }7 v! f. a- U: |5 Y( s
  2246. BCS Music_Song_Last_10_Set' i& [% W# W. r
  2247. LDA #$00+ {$ D( V: E+ [0 G4 v
  2248. Music_Song_Last_10_Set/ @% D0 R8 _/ e0 }
  2249. STA <Music_Cur,X! n/ J. B! A- u7 N+ J
  2250. JSR Sound_Reset_Proc
    , d  N* D8 Q/ U# t0 X$ z6 O0 R$ W
  2251. JSR Music_Show) F- G7 I( L- L) r" @
  2252. Music_Song_Last_10_End8 m/ x+ S& f+ A/ ~. e# B5 I
  2253. RTS
    5 ~0 ~# `9 z$ b" A7 y
  2254. # L( Y& _2 p, `9 R1 c
  2255. ;==================================================
    / u* M4 U7 V2 n
  2256. Music_Song_Next_10;下10曲1 [3 @% @- A/ a8 G' j6 ~
  2257. JSR Clear_Last_Track_Name
      ]  O8 z% w8 t; Y) |% T
  2258. JSR Disable_Text_Draw
    % T9 r6 W% e, l
  2259. LDX <Music_Item_Cur
    2 t9 s& `: ~1 H7 W
  2260. JSR Set_Sound_Total/ F" Y+ O* H" L; a8 D. `( J
  2261. LDA <Music_Cur,X
    : @' `/ ]* u8 ~
  2262. CLC
    3 `& v% A0 [3 B; A
  2263. ADC #10: J% [3 K+ W9 n+ I3 `! O
  2264. CMP Music_Total  A4 C+ e/ ?) C5 \$ z
  2265. BCC Music_Song_Next_10_Set
    1 `/ c5 M# [, F% j1 ]& K% s
  2266. LDA Music_Total6 M9 {/ d  t2 }6 p4 P
  2267. Music_Song_Next_10_Set
    2 R0 z* G" H# b- Y7 J6 ^
  2268. STA <Music_Cur,X
    / F; n  |( P, ?( {- k. `
  2269. JSR Sound_Reset_Proc: r" a3 l- y$ s8 G& \3 A
  2270. JSR Music_Show
    6 W. o2 X$ A% Q- g! h6 Y
  2271. Music_Song_Next_10_End
      G, r, f; F5 W7 h! h' u, N( _3 F
  2272. RTS
    ( L: r6 y1 ?/ U1 @( S# [2 h! @/ s# E
  2273. 5 {8 p0 g$ {" g$ {2 X
  2274. ;==================================================* O- u: x8 |( V6 j* m( Z' V
  2275. Music_Song_Last;上一曲
    2 v$ z0 p7 f% V/ x0 o* D- E
  2276. JSR Clear_Last_Track_Name
    7 g" W  [# B/ t$ p: m, P7 @, m
  2277. JSR Disable_Text_Draw
    + J0 x# V4 X0 K" s& R- @! O
  2278. LDX <Music_Item_Cur2 q- V* ^7 X5 n( [+ s; {' ~1 A+ V
  2279. JSR Set_Sound_Total
    * V6 @5 M7 A  b( e: P5 ^7 u
  2280. LDA <Music_Cur,X$ ~; p5 V6 N  y* F/ u
  2281. BEQ Music_Song_Last_Set( W2 p% q5 Y# j4 D  M5 b2 J( _
  2282. DEC <Music_Cur,X
    7 o; k! K3 w$ u- R
  2283. Music_Song_Last_Set8 `( h9 u4 [2 Y& N8 I3 w1 O, \
  2284. JSR Sound_Reset_Proc
      ?" t! i! O* ?; X! C9 F/ }; y+ h5 i
  2285. JSR Music_Show2 s- S) V0 `1 M  W1 `0 C
  2286. Music_Song_Last_End) J& w1 x2 D. f+ z
  2287. RTS
    3 r) k; G( O( ~+ x
  2288.   _8 R  E$ i8 ?$ O( |7 a, y
  2289. ;==================================================# m. S0 B$ ^& L/ t+ ]4 b/ {
  2290. Music_Song_Next;下一曲0 q% [2 F. z4 C* L8 r
  2291. JSR Clear_Last_Track_Name
    + t% Y4 j4 ~6 E( ^) M- e
  2292. JSR Disable_Text_Draw% l% p0 w; j8 z' P  s9 Y
  2293. LDX <Music_Item_Cur
    % f! g& w5 P; u) c! W$ h
  2294. JSR Set_Sound_Total1 r7 q8 I  C2 p3 m9 W0 l1 }4 \  v
  2295. LDA <Music_Cur,X: M4 L$ e3 y9 D5 d) a$ Z/ }
  2296. CMP Music_Total6 ^* |: j0 r) h( q, E" ^, R* F0 z
  2297. BCS Music_Song_Next_Set
    2 i6 r- v8 H8 k
  2298. INC <Music_Cur,X
    - j4 l4 C5 P5 }
  2299. Music_Song_Next_Set9 r" Y2 Y/ k4 ?- ^" U
  2300. JSR Sound_Reset_Proc
    6 K$ [& c1 K0 c# l! _! s% A
  2301. JSR Music_Show: N& F! y; p, ^/ g
  2302. Music_Song_Next_End6 t, p* w& V% Y' D, n: H2 r9 l! x# Q
  2303. RTS
    3 E( G  h1 S( H/ n  K
  2304. 1 [0 f7 ~! m; {$ i4 B4 B
  2305. ;==================================================
    ! R8 h7 Y2 p. P/ V( V6 i
  2306. Change_Select_Item;改变当前选择项
    9 V0 ?- x7 O0 ?$ {
  2307. ;--------------------------------------------------3 l) M3 d: w* G' b5 n/ M7 ~
  2308. Change_Select_Stop_Play_Item;停止/播放) n# o! N, k4 _3 y! o
  2309. LDA <Key_Once
    , J- v# b" N" [: @0 ^% @+ n
  2310. CMP #$10" C# I: l7 W2 E# Z# l! [
  2311. BNE Change_Select_Last_Item6 X/ [- i2 ^  S- o. Z+ e
  2312. LDA <Music_Stop_State
    & g3 A+ I+ x/ k4 K1 ]% _! j8 X
  2313. BNE Change_Select_Play8 I& `1 r  s' \( \8 |( {: ?$ D2 h3 R
  2314. JSR Music_Song_Stop% E# J( `: y+ `! m: S
  2315. LDA <Music_Stop_State
    5 P4 C$ z8 x+ W6 a; R) ]1 g: l
  2316. RTS. y3 b: C$ k1 W, }

  2317. $ z6 X, y& _5 L2 c1 p$ j$ v! f
  2318. Change_Select_Play3 q  n: Q  h$ t. Q
  2319. JSR Music_Song_Play' ]: Z( c2 T- q; s* m) w) t
  2320. RTS6 f( q, w7 }( e  U/ z$ M. T2 G

  2321. 0 S) K& _/ c% t
  2322. ;--------------------------------------------------
    2 M- }! O0 u" `9 h+ [2 F' Q+ H
  2323. Change_Select_Last_Item;上一个专辑
    $ ?% h8 x- R6 ^2 d- `) Y; P, ?  W
  2324. LDA <Text_Disable_Flag! k$ M2 X8 B7 \0 z8 H1 b& E" V
  2325. AND #TEXT_DISABLE_ITEM
    3 O0 Y; m- Z6 T5 t( ]% l
  2326. BNE Change_Select_Item_End
    / k. x8 H2 _9 M9 M8 ~
  2327. LDA <Key_Once
    9 E% A) r2 t$ h3 _$ o. J/ m
  2328. CMP #$085 i# A7 ~1 v- c
  2329. BNE Change_Select_Next_Item
    5 L+ u0 Z) l' p( f
  2330. JSR Last_Item! |2 h3 _8 A4 Y# {$ x5 |
  2331. ;--------------------------------------------------' a1 G. }8 c' f5 E
  2332. Change_Select_Next_Item;下一个专辑- E$ T  W8 `* B+ U$ R; K
  2333. LDA <Key_Once
    " u4 H& \: ]/ y9 z# `
  2334. CMP #$04- D& q, w' o. a: X
  2335. BNE Change_Select_Last_103 V6 f' e* S: @1 B( k6 m+ \
  2336. JSR Next_Item
    0 o1 {4 ^! B8 ~# \# ?4 t+ i
  2337. LDA <Music_Item_Cur( b" n7 a. d5 Z0 P* a, x& D/ Y4 S
  2338. JSR Get_Page_Start_Index
    0 S4 j2 o! v3 `3 Y
  2339. ;--------------------------------------------------
    % O" u& h4 S9 {9 O0 I6 T5 o9 C
  2340. Change_Select_Last_10;前10曲0 `' e3 [, a& H3 K
  2341. LDA <Key_Once
    * }  s2 J) X( G. D) a
  2342. CMP #$40
      C$ Q( `% t2 l! C
  2343. BNE Change_Select_Next_10" B) Z' j+ f2 Z5 O
  2344. JSR Music_Song_Last_10
    1 A7 M. G- P+ l0 l( E  v
  2345. ;--------------------------------------------------
    4 S9 L- Z; M- K. ]# `+ |, E4 |
  2346. Change_Select_Next_10;后10曲
    ' `' L' Y# q; V, b8 y( |
  2347. LDA <Key_Once
    3 ]' ~# y: [: ~: b0 w5 X1 {
  2348. CMP #$80
    " J" x" G% f" U+ x- Z8 r# G1 T
  2349. BNE Change_Select_Last% n, s$ k$ \( t& O
  2350. JSR Music_Song_Next_10
    2 G  y$ E  K/ W3 x( l1 r: u* J7 L1 u
  2351. ;--------------------------------------------------
    $ \7 _; Q, ?: Y7 n& f: z8 _& {
  2352. Change_Select_Last;上一曲; M( |) w( v% e3 f6 Q
  2353. LDA <Key_Once
    7 Y/ B% N9 [3 C- F3 f: Q
  2354. CMP #$02/ z9 U  Q9 o* Q' b; `0 y0 E* }* V
  2355. BNE Change_Select_Next9 d# m8 A" }+ t3 H# P$ d' y
  2356. JSR Music_Song_Last
    ) h% N0 {1 Z0 i/ g3 f7 r# v0 ~( ~
  2357. ;--------------------------------------------------
    % ^" h" X" I" D* ?" }
  2358. Change_Select_Next;下一曲
    ' z& f- r) G1 v" j* F/ |
  2359. LDA <Key_Once
    6 U9 M0 u' A9 C; Y/ P: K
  2360. CMP #$01
    , j9 Z) c" s' d7 T; j$ m
  2361. BNE Change_Page_Next, G6 X3 \4 T; N, L% m  f! S
  2362. JSR Music_Song_Next4 u! B9 ^9 H: O5 d
  2363. ;--------------------------------------------------& C& i" \! k5 |8 Y" b& V
  2364. Change_Page_Next;下一页- b# A4 I: P$ j8 s1 O" a
  2365. LDA <Key_Once2 ^% F( b: x5 t$ O6 J& K7 _0 S
  2366. CMP #$20
    ) Y+ L6 M" |+ ~
  2367. BNE Change_Select_Item_End
    - `& j/ C% P) N9 L% y* ^: @
  2368. JSR Next_Page7 x3 Z9 S, C, f% w5 e/ |- X
  2369. ;--------------------------------------------------
    $ M3 C0 i1 K5 D  |
  2370. Change_Select_Item_End* T; `$ B3 q" _* i
  2371. RTS
    1 {4 ?7 D& B0 C
  2372. 9 l$ q  B; ~+ z. j
  2373. ;==================================================
    1 a. @% Q. j0 ^; o  R
  2374. Show_Arrow;显示箭头光标  ~5 i0 V: j( r& h& _' L# c# i
  2375. LDA <Music_Item_Cur* F3 n0 u( b* u5 l
  2376. JSR Get_Page_Start_Index
    / j& `! e2 ]0 {& P: t+ u! ~
  2377. LDA #$00
    # [" G# P9 ^" g% l$ b
  2378. STA PPU_OAM_ADDR
    7 C3 N7 E! m$ d. z* f
  2379. LDA <Music_Item_Cur. u, W# u4 J0 {
  2380. SEC4 y& r0 f) J- n' P* w. \) S* E
  2381. SBC <Data_Buf: z/ K0 l+ r) A, u( C
  2382. ASL A
    / w. o9 n8 {0 A8 I) \
  2383. ASL A
    6 R$ Q/ i$ T& b! ~" a
  2384. ASL A
    8 F7 j3 U, N' S
  2385. ASL A
    1 ^- \# \. Z; O% n" i; Q
  2386. CLC& M6 @: d# x2 y
  2387. ADC #ARROW_Y_OFFSET: Z0 s1 u4 B  H8 i! J
  2388. STA OAM_TEMP_ADDR + $00
    # c+ r# X- M- N  Y9 f
  2389. ;STA PPU_OAM_DATA$ h, g0 m$ [4 [: ^+ u" f6 |1 u
  2390. LDA #$1F$ {5 g- y  N4 J# d8 h
  2391. STA OAM_TEMP_ADDR + $01
    ( g& @& F- c" N3 s4 E, F
  2392. ;STA PPU_OAM_DATA# `$ p' ?" u6 T1 g( E, O6 c2 Y
  2393. LDA #$00
    8 r& ~4 x. \  \% c
  2394. STA OAM_TEMP_ADDR + $02
    2 Q# z1 |0 z! N. E
  2395. ;STA PPU_OAM_DATA, {, G. m& q; U4 [
  2396. LDA #ARROW_X_OFFSET
    # Q5 }5 F& N/ ?$ C+ R- A7 G9 ]
  2397. STA OAM_TEMP_ADDR + $03
    , b9 ~- m, T& ?4 \: h, ?* r
  2398. ;STA PPU_OAM_DATA
    + n' E" f" V( _% e: L' t
  2399. RTS
    2 @/ T1 ?7 ~! p4 h7 b

  2400. 6 ?7 t. @7 F4 x4 h
  2401. ;--------------------------------------------------# q7 |+ P3 g" C+ K6 b5 b
  2402. ;命名表数据& r+ ?- v) c. ]- }( [7 J
  2403. Palette_Attributes
    3 o6 J0 J4 N8 @- i7 H1 f& k
  2404. .IF SOUND_BAR_SHOW_ENABLE
    0 L' Z5 U9 j# t; L. ~
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55* O* N. X, u& }7 `8 V
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$556 i. X7 d8 S3 M+ C" ?! ]4 a' F: p" {+ j
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75' \, c8 A$ l# V0 I( b/ k3 h
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA9 Z1 Y8 m( G4 U; Y; @. N( x
  2409. .ELSE
    4 t1 U% _' ?5 v( _9 W% B
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55% x/ i7 T7 A% [, z, V+ ?5 I( L( y
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55. B( u. i. H3 b* q9 B$ _& @5 p+ Q( c7 }
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    + C  v- ?/ P- V0 \
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA% `8 J/ Q5 T# o" d" E% C* D: N
  2414. .ENDIF
    9 @* P. d' z$ z+ E  o/ e
  2415. 7 c8 r* Z, r( e, e* V" W7 A. }* s" ?
  2416. ;--------------------------------------------------) _8 {6 [; u) w; k
  2417. ;调色板数据0 X$ u1 j) l7 f" V/ l
  2418. Palette_Data
    2 @/ @# A. v5 `( _
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F* O* e) o$ H) }
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F' e/ {5 P! H& j; J. }9 w' H

  2421. : i/ J' Q5 Z6 x/ r; X
  2422. ;--------------------------------------------------
    + B1 l9 }1 d" K/ {6 N: c
  2423. Static_Text_Data0 j, q" e  E7 _9 Z8 `
  2424. .WORD Static_Text_Caption_Data: E9 A7 J3 B! W7 y" u' \
  2425. .WORD Static_Text_Author_Data# c% f1 u8 g- A2 F/ b( h
  2426. .WORD Static_Text_Date_Data  G1 D- Y6 ~" @! A0 v. |$ t$ a: v
  2427. Static_Text_Data_End" ]1 i9 G( a  O7 x2 I/ `' I! T

  2428. 6 h. s( |/ t0 N/ `# D$ P
  2429. ;--------------------------------------------------
    7 [, l+ U# l# C6 z4 t
  2430. Static_Text_Pos
    $ @9 K7 K( q9 _: v! I1 H2 z
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)* X% Z" A* z; D- a( i# a4 o! c
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
    $ H4 M! D, i9 Y9 k' y
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
    * P4 e2 j4 N- Z$ e- t3 o/ p
  2434. Static_Text_Pos_End$ q( b' P$ ?# R3 z& O7 X
  2435. : n6 t6 W% |4 F" H, C3 P
  2436. ;--------------------------------------------------
    9 ?: t6 X# [6 |. O$ K" l
  2437. Music_State_Stop( S6 w& F5 q$ F4 K& N( W: I; r
  2438. .IF SOUND_BAR_SHOW_ENABLE# n' ~$ \# d2 w! U
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$008 Q2 x: W' G1 L+ j9 y% p9 |' }0 L* o
  2440. ELSE4 W7 Y% ~# J' `( T- g) }# y& b
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    ' e% g$ k' `' I: M
  2442. .ENDIF
    3 P2 R, y( U$ ~3 j
  2443. Music_State_Play
    # q6 C. a. k- W  {( Z
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    . n7 v7 I; }& F5 K
  2445. 4 p) z5 h: Y& c+ W. D; |5 S0 [
  2446. ;--------------------------------------------------# |+ g: x& s1 q% T8 g+ Z2 x3 l) ^
  2447. Sound_Bar_Text_Data;声音类型文本
    : ^" G5 {+ F+ b1 X
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"+ x. D5 X$ l  M1 B6 G5 C% Q
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"+ C- z. a9 i2 E0 {3 l* R
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"; r! w/ g6 l* |) U1 ~) c6 B3 ^
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"/ l9 ]! h6 N4 d2 L! B
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00( a' A& d9 J6 Q3 D
  2453. ; E. P1 x4 M9 y( p) d2 V
  2454. .IF Track_Name_Pos$ l0 s$ O+ U0 {- q$ H- m( o

  2455. 4 h% Q1 e6 z% ~0 Q$ X' A, }# y& k
  2456. ;--------------------------------------------------5 n" w- {& j3 c. ^
  2457. Track_Name_Addr_00;曲目名地址索引. R( p( ]7 K/ t7 K
  2458. .WORD Trackr_00_01
    $ v. f0 P7 B% J3 F. z1 ~

  2459. # d6 s: z2 J! `; @6 w
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"6 ]) Z4 L9 a' n4 I: \
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"
    ( @4 I$ a' L) Q

  2462. ( i! U4 W3 C' H2 g9 Q, I1 x
  2463. ;--------------------------------------------------& J1 B/ H5 J; P8 p
  2464. Track_Name_Addr_01;曲目名地址索引
    / a! P$ d. a/ F7 X& Z6 q
  2465. .WORD Trackr_01_013 }% C9 r/ l# s8 {9 D6 H8 p6 N/ z% k
  2466. ! K! ~; X+ _) {7 F& W+ i8 C* W
  2467. ;==================================================
    ' e" I/ B5 k7 C/ l$ \( X
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"
      {7 C3 e. A; O
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2". h9 k5 I$ O$ V. N4 C$ l1 n

  2470. 7 u2 Z& ]+ c$ c8 g
  2471. ;==================================================
    % b( i% a1 m! n- e6 f1 h
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    5 A& D- {: D2 k2 A" t% f
  2473. .WORD Track_Name_Addr_00$ M% B$ \" \2 P+ ~  D: r
  2474. .WORD Track_Name_Addr_01' |# z8 Q1 u, N
  2475. .WORD Track_Name_Addr_01  C( X4 `% }- ~7 l6 k
  2476. 6 f% o2 H# ?; u$ T  a# _* ~
  2477. .ENDIF
    ( }; N/ z2 \  x6 W$ [

  2478. + u. y# q& c5 k  y
  2479. ;--------------------------------------------------+ T- u$ c% F1 R7 c
  2480. Static_Text_Caption_Data;静态文本数据! Z5 y" a) Q* B7 s; t
  2481. .DB 161 @- k! a+ u+ u# M+ {, v0 Y3 h
  2482. .DB "FC MUSIC 12 IN 1"
    7 A& ?) C* Q0 [( f. D7 O# T. t$ F
  2483. Static_Text_Author_Data- M: R9 X8 }! z9 z7 e' d6 C
  2484. .DB 25
    " u: k) H& i+ q1 t. R) P
  2485. .DB "EXTRACTED BY FLAMECYCLONE": `' v! Y& P7 h* j, [) I  K
  2486. Static_Text_Date_Data
    8 {7 `7 x8 P1 y9 @( u3 x. j. h; d
  2487. .DB 10
    ; U$ l/ q( F/ [0 x: ?
  2488. .DB "2023.07.23"& j! U4 t( p5 S( H; R' N

  2489. / _" L6 p( d: X) d- l
  2490. ;==================================================
    1 B' S  P6 i& v1 B% W" q
  2491. Music_Collection_Name               ;专辑名间接索引5 n* H; d  q8 ^8 U4 E
  2492. .DW Music_Collection_Name_00
    6 p  X& u; k) I/ x1 A
  2493. .DW Music_Collection_Name_01
    4 @  D- \- Q, B. d+ F
  2494. .DW Music_Collection_Name_02
    9 A2 o# V" c# \9 ]
  2495. .DW Music_Collection_Name_03+ ]$ Q! w! Z; i  t
  2496. .DW Music_Collection_Name_04( b5 r# _( g5 I. g2 ?
  2497. .DW Music_Collection_Name_05
    7 ~( A* `4 C+ L$ W) g
  2498. .DW Music_Collection_Name_06
    % t5 L/ g0 C% b* J4 W$ l1 L$ r* D" {
  2499. .DW Music_Collection_Name_076 A$ |8 N% R9 R1 u7 ~' X" d
  2500. .DW Music_Collection_Name_08
    2 C+ l# ?4 U' T/ p( W3 M% x( N
  2501. .DW Music_Collection_Name_09/ V* N8 z( o1 y0 t7 v% }  Z
  2502. .DW Music_Collection_Name_10. V: B* R4 M* {7 ?4 p
  2503. .DW Music_Collection_Name_11
    9 _& g7 w3 ]8 v7 s# y1 Y3 y

  2504. 3 ~! ]7 [! H+ T% j4 m
  2505. ;==================================================
    3 c8 w5 o$ L: I+ W8 p) g! ~
  2506. Music_Collection_Name_00            ;专辑名文本数据
    - H4 a; h4 \' Z7 q, z) m/ y
  2507. .DB 11,"1.RAF WORLD"
    / J  B; R) z8 H& t& C
  2508. Music_Collection_Name_01/ o2 ^" X: A* P7 O
  2509. .DB 15,"2.FINAL MISSION"6 W$ k1 u2 }7 H' ^# h" M
  2510. Music_Collection_Name_028 a- _/ P( Z' l$ l- Q. d! `
  2511. .DB 06,"3.KAGE": d* }+ w7 r  ^9 m" k$ f( e' |& b! V
  2512. Music_Collection_Name_03
    3 V/ k: |# U- f
  2513. .DB 16,"4.DOUBLE DRAGON"
    : v" _5 I6 m  s3 m7 J7 G' j/ H
  2514. Music_Collection_Name_04( O5 ^' l, s% l$ S5 ^1 ]
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    ' [" G' u6 M4 F$ \% T* X7 Y
  2516. Music_Collection_Name_051 `5 h, N. w- x0 I
  2517. .DB 17,"6.DOUBLE DRAGON 3"% j! ^" U3 P. [# `& g7 h9 v; c; C
  2518. Music_Collection_Name_06
    5 k& r- H9 C1 v& a# d. z
  2519. .DB 09,"7.ROCKMAN"
    0 q4 T7 U3 ^* ]: j7 R' Q
  2520. Music_Collection_Name_07
    & u% J' w" {7 |2 [0 s
  2521. .DB 12,"8.ROCKMAN 2"3 A9 w* i) X! |
  2522. Music_Collection_Name_08
    - X5 ^+ f+ C6 P$ J' w: z
  2523. .DB 12,"9.ROCKMAN 3"7 M; f3 s% W( T. e' h# q3 d1 J. [
  2524. Music_Collection_Name_09
    5 j! `* U) t9 H$ `- ?2 t
  2525. .DB 12,"10.ROCKMAN 4"
    ) B9 r# {2 g8 R1 p# `7 X
  2526. Music_Collection_Name_10( h  m3 l" X' O% e, l- {& U+ N
  2527. .DB 12,"11.ROCKMAN 5"# n- E: r5 M. u& }% s
  2528. Music_Collection_Name_118 Q4 @( t) ]5 n0 U) L) j8 q
  2529. .DB 12,"12.ROCKMAN 6"
    $ B) q& T$ g( U4 I

  2530. / H2 j! h$ z* Y. o
  2531. ;==================================================
    1 m/ z9 t3 @4 j7 T) c4 v4 _
  2532. Track_Name_Addr_Flag                ;显示曲目名标记
    ( D2 I7 p- k# M4 s
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0) u: j  `  Y* M2 i( I, Z

  2534. : o  W) D! d8 x" Q+ p2 F
  2535. ;==================================================
    ' [9 I3 b; I8 K% p  o- C* I
  2536. Item_Pos_Data                         ;光标箭头位置
      N) L5 Y1 g1 O6 Z' M: ^
  2537. .WORD ITEM_SHOW_POS8 s, |+ l* P9 I4 t6 b% ?
  2538. .WORD ITEM_SHOW_POS + $0040
      L& ~; o( S& m5 r# {
  2539. .WORD ITEM_SHOW_POS + $0080
    9 f% g+ o1 t# R) o4 `9 ^
  2540. .WORD ITEM_SHOW_POS + $00C0
    5 b- `7 }3 f1 ]3 a0 P
  2541. .WORD ITEM_SHOW_POS + $0100) i, E$ n9 J9 h5 j8 t* B
  2542. .WORD ITEM_SHOW_POS + $0140
    - |8 d! `! i3 _2 Y7 N' u; q" z
  2543. $ H9 h/ L; a3 S9 c
  2544. ;==================================================$ n" u1 Z( g" n7 g7 q+ z: \
  2545. Sound_Init_Port                 ;音乐初始化入口地址
    6 E, {) D( ]# Q6 N- g2 |5 _
  2546. .DW $BFC8# N! o$ z+ @$ m  C# r6 |
  2547. .DW $D7F0
    . O6 q5 Q4 y; @0 N% C
  2548. .DW $9FC0
    9 }+ j( s9 l: r9 O0 \8 \2 \; g. I
  2549. .DW $BF70' p% k* p/ E5 S: T- T" `. j. d
  2550. .DW $80032 f, G% u6 T7 i/ {  d: w
  2551. .DW $BF30
    3 Y9 p6 _& X+ H* y: H7 |2 [5 y
  2552. .DW $9003+ W3 h: A7 ^% d8 z3 [
  2553. .DW $8003
    1 S4 B+ {; q2 A& `2 O
  2554. .DW $8003
    5 L/ {4 I  C5 g$ M+ S8 X5 y
  2555. .DW $8003( Y" E5 p9 S% E) [
  2556. .DW $8003
    5 G6 V  A) `! u. U! h
  2557. .DW $8003
    1 M- m6 \+ `2 r, a6 W2 {% ?

  2558. ! k) N4 ?8 Y5 [# r; C3 t
  2559. ;==================================================
    6 F' V/ F2 D1 W# X
  2560. Sound_Play_Port                   ;音乐播放入口地址0 D/ i% n, W. e. p
  2561. .DW $8000
    : u/ u. [: R. |
  2562. .DW $8001
    9 @! `8 V/ ?" w/ ?: ^# `
  2563. .DW $A000, m6 A, @1 M: }# u* M
  2564. .DW $8003
    $ I$ p6 ?* ?6 w8 i/ k
  2565. .DW $8000+ h3 c3 X2 T- S5 F& K0 q
  2566. .DW $80034 M( V3 k) U2 f  X) y
  2567. .DW $9000
    * |4 Y1 m9 ]* _/ l) F
  2568. .DW $8000- C7 @9 O  G9 g, k7 _/ |. @
  2569. .DW $8000
      C6 A. D8 i( {
  2570. .DW $8000: u- k) L, J" q; A/ J/ y5 l( ]
  2571. .DW $8000. [3 i( ]7 L0 {* ?% V3 w
  2572. .DW $8000) m' J& T" z3 T: G8 k- N
  2573. 8 ~9 m0 P& o! `8 E; ^) L
  2574. ;==================================================
    / V! T) [8 i- J8 k
  2575. Sound_Reset_Port                  ;音乐重置入口地址
    / m: G& _. K, w; p9 B
  2576. .DW $00006 [' E3 U$ \- Q2 e* m. w
  2577. .DW $0000
    + l1 z) v8 c2 e0 R0 r! b3 ^
  2578. .DW $0000
    + u# d! j# y9 l- x6 ^5 x2 q
  2579. .DW $0000
    7 G; k( c) O: b7 s9 @+ q5 P9 P
  2580. .DW $0000
    . C9 s& Q0 ^/ S" W3 j1 J
  2581. .DW $0000. E& p& k0 @: t8 ~
  2582. .DW $0000
    * A$ U  R/ E1 O1 R* h
  2583. .DW $0000
    . {0 V$ W$ ]3 w* T. s
  2584. .DW $0000
    8 P. Y; c2 |7 Q7 n) ^
  2585. .DW $0000
    * _7 u' G. Y, Z+ V
  2586. .DW $0000
    . D  C1 h! A7 l
  2587. .DW $0000
    2 n3 d! H6 x9 C# D1 F* Y+ A, E! L

  2588. ' J% v6 w0 E& `7 j
  2589. ;==================================================" Q4 l. O4 i* W; B, [( a
  2590. Sound_Total_Port                          ;曲目总数
    - b) z) \) K7 h& [9 T7 e
  2591. .DB 38
    3 R0 S" R3 V1 ^+ b. y& k5 K- j* M
  2592. .DB 33" K* V* j9 ^7 P: k
  2593. .DB 49" y" U) ~1 w! m2 B, ?. ~
  2594. .DB 41
    + F# N- j3 z: r
  2595. .DB 83
    6 A, Z; B' d6 y2 Q
  2596. .DB 700 J* O; `1 ]- ^+ r  O
  2597. .DB 50, m. a: [1 z8 r& p& l+ T
  2598. .DB 67( Q5 ~* o. x7 Y( v; [; {9 ^; H
  2599. .DB 57, ~& z% ?  W) K
  2600. .DB 71
    6 O- O- `8 d$ b9 t
  2601. .DB 76  d! `+ y5 n8 O0 k9 W
  2602. .DB 1025 X) S* ?  d0 x6 ?' u1 Z* y  Q9 p
  2603. 0 k+ [: \1 t/ S
  2604. ;==================================================
    ) a/ A3 O" O2 K6 m9 R2 W
  2605. Sound_Start_Port                      ;起始播放曲目) {7 ^. I8 F8 q: I
  2606. .DB 00
    - E" D3 R" o, \. C8 j
  2607. .DB 00
    & z4 k; e, H7 b9 ]/ q
  2608. .DB 00
    * C8 ^- U/ o  f
  2609. .DB 00
    ; Z: j* @3 a! y* R- P; a! z& U
  2610. .DB 00
    6 j' S! ~; C4 d5 |5 P1 v, e1 S
  2611. .DB 00
    2 m: B3 W6 G' |% X+ r) m
  2612. .DB 00" i) d: U: Y2 c# z8 k8 [; ]
  2613. .DB 00
    4 Q9 t3 E; K( |/ M2 @- M. q
  2614. .DB 00
    + j5 H# K: `% f  e: B
  2615. .DB 00( R" n" V9 a5 o
  2616. .DB 003 B3 V; C/ Y* x3 U$ _
  2617. .DB 00. I9 g4 [! m/ W  B- L: ^

  2618. / O8 E2 E# I: r  r
  2619. ;==================================================1 r* ^1 O5 C( G  {
  2620. Sound_Bank_8000                      ;专辑bank_8000
    : S. N3 Z' x4 L# f0 u( t( d: Z
  2621. .DB $10
    ; [. U9 D. ^  o5 K  D- ^) m- e
  2622. .DB $12  `5 \5 {4 p; h
  2623. .DB $14
    $ b* h6 g1 m0 T( y. h
  2624. .DB $16! Y+ g8 }* Y5 s& M9 S( D! K
  2625. .DB $18
    ! \8 H8 d( b* [* ~7 M
  2626. .DB $1A
    * c3 Q/ c! W$ B5 c7 B8 s

  2627. 9 O5 H9 u/ p) E2 G3 M4 X3 N
  2628. .DB $00
    ) Y* {: Y" w/ y- L- g. F: d
  2629. .DB $02
    0 Y- b9 y* ~' s( u) L
  2630. .DB $0D4 c2 a* o  r8 k5 o9 Q! D$ \% R
  2631. .DB $04
    4 w) K/ D, q6 _$ E) l
  2632. .DB $075 m% ~9 D! ]. N2 \& y
  2633. .DB $0A
    ' q0 u+ x$ h8 G; y/ w; X. N
  2634. ' X! K# U4 G+ Q# I
  2635. / N3 ]$ v3 e6 G, z
  2636. ;==================================================9 I) \7 n: p; O! P  V; I" A1 c, @
  2637. Sound_Bank_A000                      ;专辑bank_A000
    ( z# j, a! D/ j# C
  2638. .DB $11, G, X* ^% L) m
  2639. .DB $13
    2 T! p4 G$ k6 l' ^8 i; E
  2640. .DB $15
    + z9 j8 o9 r  B! j2 I; b; i3 e
  2641. .DB $17+ _. T! y4 V3 m! y0 h" D
  2642. .DB $197 t& w! \+ ^; I; P& u. f4 M
  2643. .DB $1B5 A5 k* ^3 k5 |/ y" _" W( p

  2644. 5 D( {% X# K" ?/ m4 X) J. U
  2645. .DB $01
    : p& c3 y! \8 _2 Y
  2646. .DB $03
    % _; n6 }- F2 N) H& l* w6 A1 I# F
  2647. .DB $0E" G0 M* r8 V; `0 A) k0 l9 b
  2648. .DB $05
    # \  X* R; @3 S1 R6 _- L. `( T( x4 M
  2649. .DB $08
    2 A+ X: _% c; A4 m9 K& G- C. t7 b
  2650. .DB $0B1 I5 [2 @! {8 L$ t

  2651. - ]' [3 x' J3 _3 W/ m

  2652. ; y( l! R0 ^! T# o9 E% c# Z
  2653. ;==================================================
    6 V/ w. E( E4 K5 X, T; Y, \4 `
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    % ^7 E5 E) S4 ^6 f7 Y
  2655. .ORG RESET_ADDR
    , D/ D4 F6 N2 ]& @

  2656. ! I+ G% l4 Q$ r6 t3 y
  2657. ;==================================================% U. B# S2 j# @3 p( Z0 M
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    & v% v8 s% y' z( m+ u! U! X. j
  2659. PHA
    / s" s( F3 ^' L' v5 c2 f0 Z1 N
  2660. LDA #$064 l" M) U5 D- l" |
  2661. STA MMC3_BANK_CTRL4 t* G# i' C6 v  Z
  2662. PLA9 W0 R2 g' }: k
  2663. STA MMC3_BANK_DATA( k  P7 l6 P- k1 V9 b- m
  2664. RTS
    , ?4 p  ]& D; x/ x( c! Q5 i) r8 d7 N

  2665. , K$ h+ f  t% q/ O
  2666. ;==================================================
    + X! ?0 ~7 x0 V/ N6 g
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    8 h! \( W) _  H/ n; }: I
  2668. PHA
    2 G1 t5 i* v* c; C
  2669. LDA #$07
    ; `6 E1 m* m' p8 w8 j% I3 J& c
  2670. STA MMC3_BANK_CTRL
    5 H% h( Z- T" T! C
  2671. PLA
    0 N$ A6 y5 |/ t6 {4 @; y& F
  2672. STA MMC3_BANK_DATA6 g9 C1 ~; H$ Q6 i. e
  2673. RTS* f0 x4 {+ W. B8 p  A
  2674. & ]$ U# b- Y' l& X# k. M. l
  2675. ;==================================================
    ! V! F+ s/ C; S- M3 e
  2676. Switch_Main_Bank;切到主程序bank
    : O, Z6 _4 K: V# e  Y+ H
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
    : U, U, W  I5 g) H) m/ ~' q9 O5 {
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    + `6 T- V& |% L& y9 A, e+ C/ h( j
  2679. RTS
    / P3 k; o! q+ k2 d- R6 H

  2680. : f* b& i) ?( _# A
  2681. ;==================================================
    % e: e# H$ `  j6 O! m# I5 V6 x5 H# T
  2682. Sound_Reset;音乐重设(如果有的话)
    9 x3 j8 |, z# l% S9 c
  2683. JSR Switch_Music_Bank  ;切换到音乐bank" ~4 A( L1 a- m: z  Y( q
  2684. JSR JSR_Addr_Op        ;执行音乐重置
    ( }4 ~) a+ d# A0 R( r9 m; @1 D) e* K
  2685. JSR Switch_Main_Bank   ;切回主程序4 Y6 Q) P, P8 h7 i& y, j3 \
  2686. RTS" |/ h6 i2 ~! R$ _- H/ o9 n( N

  2687.   P5 o# H  G. ^6 Z  v# A
  2688. ;==================================================
    , }9 F/ t8 o# R+ J( m- r
  2689. Switch_Music_Bank;切换音乐bank
      S. H. ?; h  \& p% H6 e5 U
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号7 `" X3 j8 O4 E2 E/ J6 F
  2691. LDA <Music_Bank_80001 ^0 ?% g" F7 ]( Z. {
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank
    6 I  l. I( R# d3 A9 H! G
  2693. LDA <Music_Bank_A000
    4 Y% z7 Y9 p# x/ Y) x# j
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank& V4 m: S8 f+ j. R  l: c
  2695. RTS) D" }/ `4 U, o# H8 k

  2696. 7 i9 C. E/ T+ u3 ~# b# P; P
  2697. ;==================================================
      o& `- p/ {% q' Y8 F. q$ z5 `
  2698. Sound_Init;音乐初始化- P6 _! h$ h' o! p3 |" w  l
  2699. PHA$ q% U1 i! E* y! J
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    ( W2 r% r# b" A  D/ z/ F
  2701. PLA0 d8 s" R6 [2 p3 T" E% S
  2702. JSR JSR_Addr_Op        ;执行音乐初始化
    & C; k5 h( }* S3 v2 L
  2703. JSR Switch_Main_Bank   ;切回主程序
    7 {0 H, Y: R0 v
  2704. RTS
    4 T" t5 q- E8 f" H# P* a. c* M
  2705. ) s, n& r7 Z) f/ J
  2706. ;==================================================- x. v5 C& ^, @7 Z) k: x8 L4 z
  2707. Sound_Play;音乐播放
    & a6 ]( j+ t- G$ E4 h2 q9 f
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    , {1 h, n) s3 |; S! _, w# r4 e0 v
  2709. JSR JSR_Addr_Op        ;执行音乐播放, n' d3 Z" ~' o% o4 B3 p
  2710. JSR Switch_Main_Bank   ;切回主程序, z1 \. y1 O+ |! b" ]
  2711. RTS
    + x3 a/ I. X. M

  2712. 8 r" }; o' f( k6 P) a
  2713. ;==================================================
    ' R# j( [7 e4 U) }! A$ g2 U8 Z2 [
  2714. MainLoop;死循环8 f' f5 f: y) {
  2715. JMP MainLoop. b( y! h1 w7 T. z3 U
  2716. % g# s% W1 r1 ]: v8 y
  2717. IRQ_SUBPROCESS_JMP = 0
      @5 e. W! x; J# ?# T7 {
  2718. + }" m) G  \% I
  2719. .IF IRQ_SUBPROCESS_JMP
    # ]& [$ K' H) Y" Q( M6 V
  2720. ;==================================================
    6 O8 V% J0 ^! \2 u) L/ V
  2721. IRQ_Process_0;IRQ处理过程0
    7 A# h1 y& T* w# L! `2 v3 y. N
  2722. ( K- H% {$ _- r0 `- ?2 r$ F3 `
  2723. ;15条扫描线后触发IRQ1 r3 v  l  ], z  y
  2724. LDA #15# J- K0 ]2 ^! A$ u
  2725. STA MMC3_IRQ_LATCH- n! l) V; X' G6 {

  2726. 1 |" S) ?' _+ j, N! I/ C# {
  2727. ;设置屏幕滚动
    0 r6 Q  g4 p5 L" f
  2728. LDA <Scroll_H* X$ {$ {' F, p/ D
  2729. STA PPU_SCROLL
    $ ~, Q+ H- k- K3 Q, O
  2730. STA PPU_SCROLL, t1 ]- P) A+ }# O
  2731. " E- \& q2 H/ P% k2 F
  2732. IRQ_Process_0_End/ s( j; H8 l& v+ h4 G4 B( F7 T
  2733. INC <IRQ_Process_Index1 D# O6 ~' G9 c. R- X1 g
  2734. JMP IrqProgramEnd
    8 E0 a# p' u, z/ T9 h- W% c

  2735. 8 |) H+ A; n2 v0 d% U$ E. S0 Q- q4 k
  2736. ;==================================================8 H1 p: P) K/ j3 b; E1 X; I
  2737. IRQ_Process_1;IRQ处理过程1
    $ l9 n* X8 z9 N: M

  2738. 6 E( W4 f; \) ^5 e. I5 l/ F7 f
  2739. LDA #55/ I3 x7 R  i. ~* Z9 I) o
  2740. STA MMC3_IRQ_LATCH
    ( d5 R5 W' s/ j( B5 V+ `5 ~
  2741. 9 M' l- P! ~. k) w
  2742. ;设置屏幕滚动
    9 e5 M" n  q5 P( D
  2743. LDA #$00# p  _7 P4 Z: {$ W# a5 ]7 d/ @
  2744. STA PPU_SCROLL+ P6 n+ N( R1 Q6 N4 V; @
  2745. STA PPU_SCROLL
    2 |) x6 u) Y0 Y- G& p% V5 T

  2746. , E" t: Y6 y0 N5 s3 @, U% X6 [/ E" H
  2747. INC <IRQ_Process_Index
    / d: X# j' h! I, u6 B7 r+ Q
  2748. JMP IrqProgramEnd
    7 l4 ?9 l7 \% R, T4 L8 Y4 y

  2749. 5 ~: d7 Y3 C( ~
  2750. ;==================================================3 b+ k4 \) q/ h4 `
  2751. IRQ_Process_2;IRQ处理过程22 q9 q* o" p0 M: c  f( W6 o8 p
  2752. % B5 q; o9 D8 s; y& P6 W
  2753. LDA #15% T8 r# U! x; N* e9 r2 L4 J3 l
  2754. STA MMC3_IRQ_LATCH
    % f2 _' n9 T, F* {: ~
  2755. 9 v1 _) R: s/ i5 |" e9 B9 B
  2756. ;设置屏幕滚动+ N& I+ k+ C8 L3 i, A- Q9 C6 x
  2757. LDA #$00" e) W7 l- c2 l* I9 s: i
  2758. SEC; s" m/ U) i. W, O
  2759. SBC <Scroll_H
    ! ^; m/ Z2 a5 f7 X/ ]
  2760. STA PPU_SCROLL
    6 W  G% E2 ^# _- V2 p5 x9 |
  2761. STA PPU_SCROLL4 h# H; e0 v9 L$ `
  2762. % t  ?6 D1 [+ f
  2763. INC <IRQ_Process_Index/ m! m1 {* p7 A6 _; ]. C
  2764. JMP IrqProgramEnd
    ) s  x7 ?' @  d+ {6 W
  2765. . [- P1 T3 J4 O8 N. X# t& l# g- y
  2766. ;==================================================9 `6 I$ t& I8 C
  2767. IRQ_Process_3;IRQ处理过程3/ c4 I9 I  b4 B+ A" G1 o5 ]
  2768. " b; s' w( p5 H' j) T# ]/ c* Y4 p3 h
  2769. ;设置屏幕滚动3 {3 U! v5 o/ [" e
  2770. LDA <Scroll_H( o! A7 d3 a( p1 s
  2771. STA PPU_SCROLL. s' E$ k  E( {$ [' R8 v
  2772. STA PPU_SCROLL
    + l# \1 G2 _$ l+ s" ~
  2773. / x. b$ F  G& C% w1 Y
  2774. ;禁用IRQ
    2 d' `4 o# I% m+ l% W
  2775. STA MMC3_IRQ_DISABLE/ I" e' _* e0 r) \
  2776. JMP IrqProgramEnd
    , q$ ^0 l& h) F' v- z6 C+ S, F

  2777. ( H  h3 y) z. t/ u- U# V
  2778. IrqProcessAddr
    5 {4 S' c2 }+ S9 j
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    & U; e$ j, T' A9 V- n; }5 U

  2780. # u' v# m' S# w
  2781. .ENDIF4 t9 u7 Y# n- ?# A1 ]! |. U# J
  2782. & N) s; e3 O4 {. T3 e! T
  2783. ;==================================================& T- }0 y+ n/ _' h& `7 _# }
  2784. ;IRQ滚动模式常量
    , ~1 @! E) G% W, w
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动. F5 R8 ~( G3 S" G# @7 w
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    " w% }3 @5 ]7 P6 g6 k% `
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动$ L1 n0 m% i  K, L

  2788. 6 o8 d' k# I% i" h1 Z  w8 u+ j
  2789. ;IRQ扫描线数据) R) \/ a) b* P# ?- D
  2790. IRQ_Scanline_Data
    # x% N: p% g5 `
  2791. .DB 8! @8 t# C% I1 M$ k  v
  2792. .DB 54( b9 k9 {& S' s' k
  2793. .DB 88 j8 `- s  j, [7 w
  2794. .DB 00 ;关闭IRQ$ f: i4 N( m$ u4 L( a  s- y0 Z8 i
  2795. 4 ?6 f1 T0 n% a# X. g" G
  2796. ;IRQ滚动控制模式
    4 O8 h& N+ ]. d( Y' y
  2797. IRQ_Scanline_Mode1 [8 `6 ?  Y0 Q  k# _( E
  2798. .DB IRQ_SCROLL_MODE_ZERO$ q5 m2 o3 R! C5 p* Y) D
  2799. .DB IRQ_SCROLL_MODE_ZERO
    . g% K0 C2 U! o! ?
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    ( b& o! R% u2 t, H
  2801. .DB IRQ_SCROLL_MODE_LEFT
    $ ]- \# l! a7 {% x3 B3 o4 J

  2802. 4 ]- W$ }6 A3 X  O% q, E6 R8 v8 u% o
  2803. ;==================================================
    $ `- f4 }: D8 k. E2 Q$ A4 N
  2804. ;IRQ处理3 V! u: v2 M1 n3 w
  2805. IRQ_Process/ e/ S6 [; I$ [) b9 H" {* B
  2806. LDX <IRQ_Process_Index
    + E/ v# {- a4 h1 }
  2807. LDA IRQ_Scanline_Data,X( `, U! g) y- p- l
  2808. BNE IRQ_Process_Latch
    + r& c# u/ ]8 j& t  _: V" l
  2809. IRQ_Process_Disable;禁用IRQ
    ; m% N# `6 I0 m  y+ v
  2810. STA MMC3_IRQ_DISABLE
    2 N: q: C0 B' f* \8 ~* i" T2 K$ P
  2811. STA IRQ_Process_Index
    1 d( ~: c+ h$ o$ O- B& _
  2812. BEQ IRQ_Process_Scroll) h( w- l% B2 V# |( Z
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线, c  K3 y6 b5 C
  2814. STA MMC3_IRQ_LATCH# K/ J9 \3 Y9 c) T# E  @1 O5 {6 C, R
  2815. INC <IRQ_Process_Index
      l- r) v5 l0 h, h# h' O' Z: W5 x
  2816. IRQ_Process_Scroll;IRQ滚动控制( S% ^$ s2 v1 p* |
  2817. LDA IRQ_Scanline_Mode,X. N: F" U. y- |* C% W6 P
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    ! `$ B; [) x3 Q9 U  p
  2819. BEQ IRQ_Process_Scroll_Left
    ! T$ d6 Z0 I" s0 K
  2820. CMP #IRQ_SCROLL_MODE_RIGHT- v) y: ~4 e9 k5 ?7 E! j- B1 L
  2821. BEQ IRQ_Process_Scroll_Right! g5 I8 p) F. Q, \
  2822. IRQ_Process_Scroll_Zero;不滚动
    * G7 z/ d/ `8 X; W* w( ~
  2823. LDA #$00! ~1 T- S  K$ x! }; {) i2 K
  2824. STA PPU_SCROLL
    5 o) b4 }; A" W& T- M" _
  2825. STA PPU_SCROLL
    9 W  q; q8 G7 U0 N) {: G
  2826. RTS/ \; C8 u  D6 c3 y' }
  2827. IRQ_Process_Scroll_Left;向左滚动% v; u- y, B5 Y; @, l
  2828. LDA <Scroll_H  O$ x, u: Y; r/ p
  2829. STA PPU_SCROLL
    + T+ T7 c  Q9 J2 P6 W: r7 g3 a
  2830. STA PPU_SCROLL6 }. V9 q' ?+ P/ l- Z
  2831. RTS7 G4 T; s+ z6 @7 p9 ?
  2832. IRQ_Process_Scroll_Right;向右滚动/ W9 g& `, d; z; ^" X) J! k- u
  2833. LDA #$00
    $ p2 ~  J, |% M+ Y& I/ u  e
  2834. SEC
    - n' Q8 T% {' s2 r! V$ z
  2835. SBC <Scroll_H
    6 x3 F6 O( U$ ^- ^% }! ?1 o0 S* B9 ~
  2836. STA PPU_SCROLL& x/ ]1 w2 }. Y  W4 g
  2837. STA PPU_SCROLL
    / b) [9 k5 _4 j# ^% D. }1 ]
  2838. RTS
    ; n! m6 Z- r" Y& L  b

  2839. 2 o( [  J  o3 O/ ~; g  }
  2840. ;==================================================
    2 u6 z) ]. F) G7 [' _
  2841. NmiProgram;Nmi中断处理
    " l8 Z7 o% G& C* Z0 _3 i! B6 W$ t
  2842. PHA
    ) F% ^3 G+ K5 V# Z
  2843. TXA" }) i0 s: d1 M& d
  2844. PHA
    2 [2 }# ?" c9 f8 b- @) D
  2845. TYA0 `2 M( V9 A' U! T3 O/ Q
  2846. PHA
    ! p, t9 `% g6 r+ ?
  2847. & _; |0 W& P& P/ J6 ?
  2848. ;读取清除Vblank标志, 防止重复进入
    5 p4 }! s# h$ F4 X. L3 U+ D+ L
  2849. BIT PPU_STATUS
    ( K" c% K( e# v0 f1 U  I
  2850.   @$ C# _- `3 `/ z4 t- `3 ~
  2851. ;切换主程序bank
    ( b; y8 x" y/ g4 |
  2852. JSR Switch_Main_Bank
    7 Q+ [8 [( J7 Q  |* P

  2853. % s4 q+ c0 }' d3 w0 _& A
  2854. ;Nmi处理
    , G0 W4 d1 f" M$ A5 m% r: {) H
  2855. JSR NmiProcess8 X) N3 L8 i# y% n
  2856. * m0 K! U. h: W) b( P
  2857. Nmi_Proc_End8 C/ {4 L8 e' `7 B, S' q5 j
  2858. PLA
    % R# D9 W, W$ h7 }; W* E& m
  2859. TAY
    3 ~0 A" t( [' N! J; H' e2 b( p' b
  2860. PLA
    % T7 m0 h  l1 h& l0 y9 P
  2861. TAX" \3 q9 o# ~( G( J: }% d" B5 @
  2862. PLA# C( Q* W/ }! `5 ?+ T3 H
  2863. RTI/ A. J3 F( `8 [1 ^" \5 X

  2864. * b6 _5 H7 J3 Y- Z8 T: u9 o% X
  2865. ;==================================================
    " U6 i2 a2 c, E6 f
  2866. ResetProgram;重置中断处理
    / E' x5 v/ W) o+ N  G. F
  2867. SEI, L7 w6 o2 s! y" ]/ I+ \
  2868. CLD- C3 m, K' f9 P
  2869. LDA #$00/ ?) u( [! R3 }- `
  2870. STA PPU_CTRL
    0 ^6 U1 Q; c, n( c- m. n: w
  2871. STA PPU_MASK* `5 j, O& r5 u3 ?& M

  2872. 8 ^# k! v  f  \. w9 E
  2873. ;切换主程序bank% y! w2 B( }$ ?  j
  2874. JSR Switch_Main_Bank. z! Z9 {* k% M) |
  2875. 2 f5 V! J4 i3 L. r, C9 ?; Y) S
  2876. ;程序处理开始
    - X* ?- h. P9 x, q
  2877. JMP ProgramBegin5 u3 r& b' F7 S! K7 L# f
  2878. $ t2 g* u3 }0 |; W4 G
  2879. ;==================================================
    1 P7 R6 f( H# x1 d& K& R
  2880. IrqProgram;Irq中断处理
    " P& g( G  Z: C2 p) M7 X
  2881. PHA
    * P: z7 \/ v+ s$ E
  2882. TXA
    * {, I! C- ^' `! G# Y) S+ U1 v' a# ~
  2883. PHA+ C) w- v+ z/ E4 j1 @% r( |" D, I1 C* U
  2884. TYA
    # M4 {$ A3 G+ J
  2885. PHA
    ; X' X9 ?4 j" m
  2886. 8 R; ]  \2 P) K* }' V+ A8 d4 ?
  2887. ;关闭IRQ! S6 Z" F; j3 ?3 P/ Q$ n$ s
  2888. STA MMC3_IRQ_DISABLE
    6 |) e" Z0 `, M. T; ~& v+ n, s

  2889. * ^& d! J+ [* c& Q; f
  2890. ;允许下个IRQ触发
    , @7 E! s2 }) A( \" ^/ J9 R+ c/ A
  2891. STA MMC3_IRQ_ENABLE& P' c( g" h- R) u. q8 ]- i0 C( }

  2892. & I2 T  J1 W. C2 O5 _. Q
  2893. .IF IRQ_SUBPROCESS_JMP
    4 c; S( y* O8 K3 T! |

  2894. 7 t8 P/ A/ ]% S  o# V8 b
  2895. ;执行IRQ过程
    % r" k; ?9 g" K/ E1 M1 X
  2896. LDA <Data_L( p, C7 x7 S5 h" F% P
  2897. PHA
    / ~8 f6 r+ y1 n, ]( O5 U
  2898. LDA <Data_H8 o9 V% H% b9 \( N: J
  2899. PHA$ X, o3 i0 T$ f1 w$ n8 V
  2900. LDA <IRQ_Process_Index) z! e6 x) u. l2 m8 L' T* p9 M) ^# l; a
  2901. ASL A
    5 u0 _' |7 b* i4 s
  2902. TAY
    , U" m9 @/ f8 n
  2903. LDA IrqProcessAddr,Y! D% S' W, B1 C+ q0 I; E5 Z* b
  2904. STA <Data_L) G# o7 j: j! X- q8 m, T# ^
  2905. INY
    $ e9 s- x& }6 ^" Q; j. {
  2906. LDA IrqProcessAddr,Y
    7 f! M  B% R8 ^9 Y0 ?6 @5 @; X
  2907. STA <Data_H
    / s* ?; `2 Z  F" h$ r& I
  2908. JMP [Data_L]3 \/ F/ b0 d1 I4 ^3 \! ^

  2909. " U/ `4 r: P+ k1 n8 y
  2910. .ELSE
    ) d1 _, K0 Z1 j

  2911. % I' K. D" y; e2 T7 R8 S
  2912. JSR IRQ_Process
    ' Y; `6 L1 L; @, C. t4 x
  2913. & a$ J, o0 z9 J) u' l8 G; s3 D
  2914. .ENDIF
    & Y4 m0 E; N# B2 o2 B4 G/ Z

  2915. $ G3 J$ L. T; x6 m9 V
  2916. IrqProgramEnd
    0 F1 `: t: i6 m9 T
  2917. .IF IRQ_SUBPROCESS_JMP2 `; ~7 p- c! b, O  a, _( D3 G
  2918. PLA
    1 ?6 A0 Y. Z# c, Q7 B. Y" D8 P0 H
  2919. STA <Data_H2 {/ e. ^1 i3 p* n
  2920. PLA
    ; }  Y1 ^/ P9 u& j: F$ `
  2921. STA <Data_L
    4 ^/ }) C! @) L7 \
  2922. .ENDIF
    . j9 T6 \5 F$ |  m  }: |+ m
  2923. PLA
    / ~1 D9 |" R; \* O, V
  2924. TAY
    / F) g/ l4 Z7 ~
  2925. PLA
    - Y' H( I) J, p
  2926. TAX
    $ f' y/ B# t5 U1 l
  2927. PLA
    0 C; ]* l( z/ j3 p+ }- ?3 {
  2928. RTI
    * e2 d4 k' F  l# N- n# W
  2929.   w8 D5 z' a0 H$ r, X+ N0 R
  2930. .ORG $FFFA
    ) J' v) g! }+ ]1 P& h. |
  2931. .WORD NmiProgram0 N  A: q9 F8 A  Y
  2932. .WORD ResetProgram3 Y1 C1 H3 x1 K  h2 b
  2933. .WORD IrqProgram
    ( }5 B# \( \' g# e" L: q) E6 u+ {, r
  2934.   b6 G. w) J' b' r* j
  2935. .BANK RESET_BANK & BANK_DATA_MASK9 P. w; G* C; ?4 w0 \3 J
  2936. .IF SOUND_BAR_SHOW_ENABLE! d1 O- z6 A- M; _
  2937. / z- x5 B7 o% O& K
  2938. .ORG $FE00
    ' n3 m6 e, `# h+ A* D6 ]( i4 T
  2939. PHA6 H2 s9 Z0 Y0 Y' R- q1 a. ]
  2940. STY $07BA
    / j4 `' B5 O3 T, V3 N2 c
  2941. LDA #$8D" P8 l/ l* Q7 h
  2942. STA $07BC
    * Q0 W% T4 W7 q& \
  2943. TYA
    + A: j9 V) T1 T+ ~1 z
  2944. CLC
    / r' y% q! ?/ k& x6 ^, V
  2945. ADC #LOW(Sound_Bar)  ]) m3 f: k! x2 _$ m
  2946. STA $07BD6 i4 P0 m' u6 c% i; T
  2947. LDA #HIGH(Sound_Bar)/ \& H4 Y2 b! [6 o/ Y9 x
  2948. STA $07BE
    % d. J: u; s5 r' E/ c8 [+ ~
  2949. LDA #$60
    . I9 r+ h- o$ Q4 i$ t1 {
  2950. STA $07BF
    # c" Z3 {5 h$ K0 _/ z  r
  2951. PLA
    3 r( \, ~+ n" x8 Y3 ~
  2952. RTS! a# i5 K7 ?0 }7 |
  2953. $ b# y6 d0 t% _9 l
  2954. .ORG $FE20' G5 E7 N/ A2 X3 V1 P3 H. W
  2955. STA $07BA0 |1 ^! R' p+ v+ z
  2956. CLC
    : ?. ]( P9 E8 A1 D
  2957. ADC #LOW(Sound_Bar)0 j1 j. U, S7 m# c; ~" [  p) l' c9 X
  2958. STA $07BD5 C! b) g( i" z5 Z
  2959. LDA #$8D1 ]. b8 z; O: I- b
  2960. STA $07BC
    7 C5 q' l# a  [
  2961. LDA #HIGH(Sound_Bar)2 y9 D; h( k# e) S
  2962. STA $07BE0 @5 A+ |+ h+ K
  2963. LDA #$60: D3 q6 }$ N2 ^5 N! X
  2964. STA $07BF) E" p. p$ f: A# a# N
  2965. RTS# E6 z! W" I& E/ K6 u1 m5 R4 ?
  2966. 7 Z4 ]+ X& I6 W1 k( `
  2967. .ORG $FE40( w, h2 j" P1 K
  2968. PHA
    4 ^- L# _; ?: G& @4 L% _
  2969. STY $07F1
    ; H7 e/ D. S1 ~0 @* E' R- b4 l$ u
  2970. LDA #$8D
    # c$ ]0 u' G$ s
  2971. STA $07F39 k; T( W# G* L5 a8 D
  2972. TYA6 P7 B$ G* a9 E
  2973. CLC9 d2 ]4 M. ^2 A7 l1 b
  2974. ADC #LOW(Sound_Bar)* k) y3 N0 W# N
  2975. STA $07F4
    # h" j& U/ `1 I
  2976. LDA #HIGH(Sound_Bar)9 F4 i( M1 Z6 C) @7 ~/ H5 C
  2977. STA $07F5% I' V0 u2 o1 |! I1 h$ ?# L
  2978. LDA #$600 ~7 S5 |* e( n! s
  2979. STA $07F6: Y! v1 O+ a# F
  2980. PLA
    $ w5 D  ~- a  J+ U' E5 w; P
  2981. RTS. ~( m% G: h$ w  b4 D: F* d
  2982. 5 |8 W" H" k% c; W! w  V; l1 r
  2983. .ORG $FE60, U6 w: O9 r) S& l0 O
  2984. STA $07F1
    2 U0 q9 \- B; R- X8 V" k/ Q7 e
  2985. CLC4 N2 _/ V/ x7 W
  2986. ADC #LOW(Sound_Bar): I* n" H, y# U+ `2 |% N! `1 B0 }
  2987. STA $07F4
    ) P+ l+ S) r$ C8 \% A
  2988. LDA #$8D0 u& V' A. r  E! B+ M- t
  2989. STA $07F3
    / _4 h2 ]  I5 P
  2990. LDA #HIGH(Sound_Bar)/ }8 b& D& R+ [; [$ W- n# s
  2991. STA $07F5
    $ J* u! [6 X$ Z% Q! i  A, |5 x7 ]
  2992. LDA #$60
    : [4 k& v0 Q  G2 T0 _; V0 C4 F
  2993. STA $07F6
    ( u9 ~8 [# z; Z5 g
  2994. RTS
    $ ]% R0 L" [/ [  V: Z* t! c) V

  2995. + [3 X% g2 t5 g" J* A  ~3 \
  2996. .ORG $FF402 K) p5 U/ r" Q9 K$ j  G
  2997. STA $4000, e: e, L1 m9 i
  2998. STA Sound_Bar + $00: ]* C: A" a9 ^2 R  }! o
  2999. RTS: \/ ~4 w# s5 v) d  L

  3000. & L1 S3 t, s9 S8 Z" r, \
  3001. .ORG $FF483 d9 G5 T5 u. \" h! h, x
  3002. STA $4004
    : t. e* ^" F0 f; K' R" t" c
  3003. STA Sound_Bar + $04
    ' \, Z7 l: ]8 }) {+ c2 c
  3004. RTS' d+ y+ b2 @1 k% f' P
  3005. ( o' w7 ^7 D+ k  \4 Y8 [/ \  V
  3006. .ORG $FF504 B$ `( ~% O/ J0 u, S( a
  3007. STA $40083 |8 `' ^1 L% j& {
  3008. STA Sound_Bar + $08
    ! m9 t  m& n9 K& {2 u2 _7 m
  3009. RTS
    " J/ f( K7 X4 t$ X, N( T

  3010. . I" x8 y  U2 K2 y9 q5 I
  3011. .ORG $FF58% z: }$ p! B- e& I7 T2 i% ]
  3012. STA $400C
    / p# I5 o, ?4 m( I, z
  3013. STA Sound_Bar + $0C: j8 ?& v( I6 D+ F- G/ J" J
  3014. RTS! b7 ]# G0 M/ T( q$ W
  3015. ) D+ B* [" `( `- V; y4 V
  3016. .ORG $FF60( K$ D% _& G, K- I$ d+ y
  3017. STX $4000) c7 g9 G  s8 }3 Q# A  `: H) g9 I5 ^
  3018. STX Sound_Bar + $00
      q" h+ k2 l4 Z, _
  3019. RTS
    / O- o# E1 O/ D& I1 g8 o

  3020. + v- H2 z* [( o% }
  3021. .ORG $FF68
    2 @  h0 D, Z  f' x2 }/ H( C& d* s
  3022. STX $4004
    1 \* F: {/ @- P2 Z7 S
  3023. STX Sound_Bar + $04
    + u  a( H. ]  `7 f
  3024. RTS1 r% B* Z& W6 {
  3025. 8 Z4 z% q: B& p1 S7 E
  3026. .ORG $FF70
    & F$ N( M( d$ B  `9 L
  3027. STX $4008# X* v/ o7 P  R$ h
  3028. STX Sound_Bar + $08
    ! J8 m% u+ m+ d' x) p
  3029. RTS2 {9 A! H' L+ P/ h& R) J& N+ \, k

  3030. 4 b" U8 l& c3 v
  3031. .ORG $FF78
    : n+ U( f$ q, K3 X9 K3 Q+ g
  3032. STX $400C
      S1 B  f$ }) j. S7 j0 v3 |# t
  3033. STX Sound_Bar + $0C6 `7 W7 L! {  j7 a- h
  3034. RTS$ m; ]: J2 b; B& p
  3035. 1 p+ t# I6 f& U; X8 s3 c$ c
  3036. .ORG $FF80
    & Z# O* R6 d/ h) s/ r
  3037. STY $4000
    & M9 \3 K" J' x+ M! a: Q9 C
  3038. STY Sound_Bar + $00
    / e% _" I, I7 S9 ^( m' Y
  3039. RTS
    1 O* z- G' u  o3 d  h' O

  3040. 1 X9 R' M& s. [: a& V: q
  3041. .ORG $FF88
    % V( ]0 z, i( ?+ w. w/ M0 V
  3042. STY $4004
    * W; N* D3 I2 @5 R# s, \/ [0 F
  3043. STY Sound_Bar + $04
    $ V4 w. c1 ^7 j0 e
  3044. RTS
    ' b! @3 b. w1 z3 x( l

  3045. . r9 X$ y% x2 h" v1 [* ^
  3046. .ORG $FF90
    5 d3 G/ M# l  \
  3047. STY $4008
    + l5 C4 u: T! ?% t: n# g- u0 v
  3048. STY Sound_Bar + $08
    9 P2 G1 [+ |1 f5 Y0 H1 Z6 q
  3049. RTS4 Y; j3 ~. _, }) N, H% H
  3050. - r0 {7 Y4 D7 r5 i
  3051. .ORG $FF98$ {- L9 @9 V+ M( y9 U% d
  3052. STY $400C+ w1 W& j! ^5 {% I) K
  3053. STY Sound_Bar + $0C
    ! b$ K) e2 k- ^- F+ s) @% O
  3054. RTS9 K  c$ h& C4 @0 v7 v3 A  ?  e1 g

  3055. ' ]' E. z4 G$ {% b# v- [, f! l
  3056. .ORG $FFA0
    6 N( e1 k6 \: h/ D( w& r" B# v9 x
  3057. STA $4000,X  b' K( t' ^; z8 Z/ V0 P, y
  3058. STA Sound_Bar + $00,X
    * k, E* S, V0 d- f
  3059. RTS
    6 N0 L3 L9 ^0 e* ~- E

  3060. - k- i: m% m! }5 L0 v; z: S
  3061. .ORG $FFA8
    2 @+ R5 g5 A. n2 m5 U, D2 x/ p
  3062. STA $4000,Y
    5 i) i6 N) W& _' s+ G
  3063. STA Sound_Bar + $00,Y
    " I5 E. i5 r2 ]% R9 m7 h
  3064. RTS
    / ?( _( S8 ~! n" Q- b( o' \
  3065. 0 o+ V. \+ Q3 }' z
  3066. .ORG $FFB0
    - h6 X) ~1 ^% u; l' p
  3067. STA $4004,X
    ; Q+ b' M% E7 P% e, Y
  3068. STA Sound_Bar + $04,X
    ' x; [0 L* Q7 a4 |! R
  3069. RTS
    ; g$ L: r+ }5 y

  3070. , g$ M, j* I6 n
  3071. .ORG $FFB8# A9 i3 l3 p, w5 \3 r  q
  3072. STA $4004,Y
    ; I" f3 r/ L5 M$ R
  3073. STA Sound_Bar + $04,Y
    4 q, Z# F3 O0 P5 o
  3074. RTS+ i# J* ]4 b% ^! v' f5 R5 W: x

  3075. 0 O  r$ M# y" d+ H8 L* `
  3076. .ORG $FFC0. |' ^. h% a1 s4 E( ^  G3 R
  3077. STA $4008,X
    " s; P% C4 V2 T7 C- M
  3078. STA Sound_Bar + $08,X3 x# z3 F8 m2 Y* K1 I) ^. X
  3079. RTS
    % R/ c: r6 l3 @8 j& J

  3080. 8 f. |( ^  G3 N2 r$ `% x! A
  3081. .ORG $FFC8& e' G' [/ ^: C; X
  3082. STA $4008,Y
      V5 i, v5 Q& L5 N' r
  3083. STA Sound_Bar + $08,Y  V+ G1 k7 H* g/ x- K+ h1 h
  3084. RTS0 a7 z; I2 D" D+ R- C6 u# _) [- v

  3085. % k7 ^. b5 o6 h
  3086. .ORG $FFD0- ]( H* V' P) |; J# T4 y
  3087. STA $400C,X
    % h" W0 }8 y2 X) C) D2 Y+ l* H
  3088. STA Sound_Bar + $0C,X' T! u* D% }7 T* t
  3089. RTS
    / b  Y5 q& u- x4 f3 [
  3090. 6 m" c& r6 u9 |7 H
  3091. .ORG $FFD8) G" w, I% F9 f4 N* x6 [
  3092. STA $400C,Y
    ; o9 l( f( K/ U* S) H
  3093. STA Sound_Bar + $0C,Y* h( r) @- I8 H) j
  3094. RTS
    # i/ {) O: V. @; ~. \8 V

  3095.   b5 N. T% P/ S, f; x4 _
  3096. .ENDIF
    2 q/ z7 U5 v7 P
复制代码

2 B! h* E6 e4 G3 l% V3 R
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3302 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-27 09:50 , Processed in 1.101563 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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