EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑
" I9 {. b: _$ a1 H+ J& x
5 W8 g8 o$ m6 n/ e. D+ J[FC][音乐12 IN 1]7 s  p3 d3 s% Y' c
时间: 2023.07.23
, N1 q3 p4 g, ~' W" @  Q& T; y2 I作者: FlameCyclone
0 K  O* A. H/ w8 L( E; w% l" K: ?: a9 r" _9 ^: z" T  {
收录音乐内容:! j4 M0 p- [# R# C! v3 y
1.Raf世界7 n8 ]. X1 a; j1 i# r2 H3 x
2.最终任务
7 w. D' k3 O: c3.赤影战士5 m' i8 T# q3 _* ^* y. [" x1 [* U: J
4.双截龙
- |- z! f; g. r+ ]3 j5.双截龙2
: C, m5 j% @0 H/ I6.双截龙36 o8 Q; E  u' e" a( N3 ~
7.洛克人7 g, i6 Y5 K; h2 d  o4 Q  g
8.洛克人2
9 V3 L0 `9 k$ C  b% r: f9.洛克人3
2 l4 d. U% |& W4 W10.洛克人4
) P6 ]1 _6 x* Z$ o9 n4 J8 d11.洛克人5
/ p. V1 H) M2 o4 l9 q) a12.洛克人6. n/ T$ v0 i0 |% Y2 y# \( n
) I9 K+ n: \8 u4 X& j2 F: `
操作:& g9 X6 C7 Z1 O# h0 g% ~. X
上键:         上一个专辑
; d: f" C$ [1 }: o. A' q  S( I0 p下键:         下一个专辑
! ?8 C2 q: `0 C& k5 Z3 }' d4 Z左键:         上一曲# c# Q& O: P. T" p
右键:         下一曲) G# G$ F5 k! d& b3 r2 a7 l
B/A键:        前10曲/后10曲
( s& Y+ r9 l1 p/ }. Z选择键:       下一页
: |% p" e9 J& d8 O# W5 R开始键:       停止/播放; C$ T% G1 Y3 t/ f5 Q% E

  F. D# i* }* ~. n! q: lhttp://flamecyclone.ysepan.com/
4 s1 [6 m; c' n9 a* d# g
4 W# E  Z: f$ {) f5 n1 O- _. l/ `/ k- c2 m

! D: ]1 R- ~3 R7 V0 y
" C, e( ^# Q4 ]0 V( G( x, Z' P
  1. ;[FC音乐][播放器模板]
    * P' K" B! e! m- {7 q
  2. ;FlameCyclone 202307100 R: ]6 W9 Z4 K0 v9 @1 T0 h( m

  3. : L5 m4 w3 B( d
  4. ;文件头
    ' Y% k9 U8 K/ d- N* r+ T+ X
  5. ;======================================================================
    : q- H1 _, V3 ~' a, n
  6. .INESPRG 16                                             ;16KB PRG 数量
    , W& `. k( h  W
  7. .INESCHR 1                                               ;8KB CHR 数量7 k% V. w- W1 T
  8. .INESMAP 4                                                   ;mapper 4
    ( y0 G! d, X$ v7 C& I
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直# A4 Q7 ]' }$ s) b
  10. ; O1 |2 R) ]+ _5 q) R5 }
  11. ;==================================================* _9 J! @6 x) W) b3 I/ P0 C+ f
  12. SOUND_BAR_SHOW_ENABLE       = 1
    / V7 z  s& B: e
  13. ;==================================================
    + W5 f; S- z5 y
  14. BANK_DATA_MASK              = $1F" N+ ^/ Z  ]4 N9 N& x( ~
  15. CHR_RAM_ENABLE              = 0) Q; v" k. m$ u& z( W" B
  16. IRQ_SCANLINE                = 136
    3 u5 U0 Y  }) u
  17. ;==================================================
    " C2 o+ I5 `6 E8 m' \# e2 \$ R) O
  18. SOUND_DATA_BANK_00          = $00
    9 z0 w. |) D$ k$ i7 J6 _& _
  19. SOUND_DATA_BANK_01          = $01
    , I2 h/ W- M$ @* f( E8 I
  20. SOUND_DATA_BANK_02          = $02* n) a/ ]& p& n. q* b3 [3 z  l
  21. SOUND_DATA_BANK_03          = $03  V, T2 w! W* p# e3 W( W  p) N
  22. SOUND_DATA_BANK_04          = $04
    3 K; ~+ G7 I: a  e1 t. B+ o
  23. SOUND_DATA_BANK_05          = $05
    , f! n7 B6 d! Q. K# @) ]$ L
  24. SOUND_DATA_BANK_06          = $064 G( w* ?1 ]0 A
  25. SOUND_DATA_BANK_07          = $07
    / t* a, H9 F/ N, B' d
  26. SOUND_DATA_BANK_08          = $08
    % s1 H; t) z, b5 v. }
  27. SOUND_DATA_BANK_09          = $098 O' p6 D) u" I1 Y8 Z  W
  28. SOUND_DATA_BANK_0A          = $0A
    0 T* g- _( R9 L' b) ~* J6 @
  29. SOUND_DATA_BANK_0B          = $0B+ K* O- c7 }& k" F2 R" r3 L8 n
  30. SOUND_DATA_BANK_0C          = $0C
    3 c2 ^% m# t: }+ G7 c  z* Y
  31. SOUND_DATA_BANK_0D          = $0D
    . D2 r* m8 F0 w9 @
  32. SOUND_DATA_BANK_0E          = $0E
    . w/ O/ j8 I# J
  33. SOUND_DATA_BANK_0F          = $0F
    8 e  m* f) o# t; F- I

  34. ! h# E/ D# k6 G% Q1 Z1 \
  35. SOUND_DATA_BANK_10          = $10: N1 f+ @& I& L$ A3 X1 p  g, [
  36. SOUND_DATA_BANK_11          = $11
    . b# _& J' o" z% M! J8 `& h
  37. SOUND_DATA_BANK_12          = $12
    4 U7 ~  Q! A+ z& M9 v  j/ n+ m7 f! U
  38. SOUND_DATA_BANK_13          = $13
    , N" K3 u  P9 T0 O
  39. SOUND_DATA_BANK_14          = $14
      B6 _5 m% Y( {8 X
  40. SOUND_DATA_BANK_15          = $154 j& E. l$ B( l4 G2 ]! b; J7 Z
  41. SOUND_DATA_BANK_16          = $16* y: ~& ~- S1 r$ Z: q! H
  42. SOUND_DATA_BANK_17          = $171 {$ q8 k' g4 V+ _5 t
  43. SOUND_DATA_BANK_18          = $18
    # q( R5 d5 x6 s. i4 C( T, M
  44. SOUND_DATA_BANK_19          = $190 }4 G! \6 X, \' N4 e
  45. SOUND_DATA_BANK_1A          = $1A2 T: T* [) Z/ @
  46. SOUND_DATA_BANK_1B          = $1B  W* e$ A( X8 J2 H
  47. SOUND_DATA_BANK_1C          = $1C$ R4 ^5 N/ w0 w. z0 ~
  48. SOUND_DATA_BANK_1D          = $1D+ m& e& Q( r! z, e4 l

  49. & V4 ]: F3 p( }, r+ d0 F0 V
  50. SOUND_DATA_BANK_C000        = $1E' F4 ?/ q( D; C2 i- Z
  51. SOUND_DATA_BANK_E000        = $1F
    5 Q& e6 T! t4 K: F
  52. ;-------------------------------------------------0 w! |$ d6 ]# ~3 g
  53. CHR_DATA_BANK               = $20
    8 W. D7 M9 S. Q8 `5 ~! o2 E
  54. CHR_DATA_ADDR               = $A000# z% |/ Z( u1 C; I7 a) z
  55. ;-------------------------------------------------, I2 X# n* i5 u4 j1 V7 y( w! J
  56. PROGRAM_BANK                = $009 n- g: Z2 n% [- i/ B8 P- e
  57. PROGRAM_ADDR                = $8000
    , t  _) T. X# N( w! O* `
  58. ;-------------------------------------------------
    3 P! _6 Q! H2 l* R: P
  59. RESET_BANK                  = $1F
    2 c. d9 @4 ^& {% W+ o  C6 k
  60. RESET_ADDR                  = $FD00$ F% K8 z* X8 y1 {2 A
  61. 7 C! h0 U2 s+ {4 V0 H1 E2 G
  62. ;==================================================
    : y. G& }1 z' U# \. V
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数% T3 u/ A& F8 w, |* ]1 m. f+ w% m% A+ d
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引. [- v9 w/ h8 ~8 ?" p; ?; G
  65. PAGE_SIZE           = 5                     ;每页节目数* ^0 v+ Y% I6 e' K9 @8 J& U$ X

  66. ; n5 [+ H) P. e9 g
  67. ;==================================================6 i) Z# c5 w, e2 [+ S9 ?3 Z
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    # ]8 ~  r$ z& y
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数
    4 n' \  ~3 O+ c8 j0 o1 a
  70. .ELSE/ U9 v% u4 C7 N! E
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数! J" N1 h; L5 N  O$ R6 {+ c7 E) x
  72. .ENDIF
    9 z9 f$ M/ M" D0 X
  73. 3 ^. r3 d0 x; x$ m" x2 R+ f% ~
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
    / }' E3 P/ r) z

  75. $ x8 t. m9 ?% Y: C" {# N0 P
  76. ;==================================================
    $ {3 }  P" l. E. e/ N# S
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置1 m( Y8 p& J$ `  L$ A- g5 i
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2/ l8 j3 a- F6 H6 Z$ d
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;
    0 A, {1 q* n2 p. t  y- |
  80. ;==================================================
    6 l& R, Y; A# [+ r# ]
  81. Caption_Text_Pos    = $204D ;标题文本位置' x$ u" x3 r) L
  82. Author_Text_Pos     = $2324 ;作者文本位置
    & ]! L& W: v( y/ S: b
  83. Date_Text_Pos       = $236B ;日期文本位置
    5 N0 @2 t, n# [9 z9 `
  84. ;------------------------------6 R; M4 `2 ?) o2 v
  85. ;------------------------------3 i' ~1 K7 X- @
  86. .IF SOUND_BAR_SHOW_ENABLE
    ! `; U. V* R. r/ y7 K& ?3 J) T

  87. # G# A6 Z7 p8 Z, B6 j( {
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    . D3 |1 B# J' g* c
  89. Play_Time_Pos       = $22B3 ;播放时间位置$ t. K4 t9 J; `9 u
  90. Play_State_Pos      = $22F3 ;播放状态位置* a0 t" F: r$ L: i, n9 U& r3 x
  91. # l+ R6 z) l$ G# O' l8 b
  92. .ELSE4 Y5 \" x! v8 I5 s! X- W1 ?
  93. / g3 {# Q& Z0 j) q
  94. Play_Index_Pos      = $226C ;当前曲目位置0 u/ y# k5 f; d+ Z2 [3 X5 b
  95. Play_Time_Pos       = $22AC ;播放时间位置
    - X, I% |# c+ Y5 Z
  96. Play_State_Pos      = $22EC ;播放状态位置+ r: @4 \/ x3 b" Z3 d

  97. * U  n! O* `6 F7 r3 S! \
  98. .ENDIF$ B2 c7 O9 Z) \
  99. ;------------------------------7 X) C* h/ r) ~4 z% M% Q: I2 s$ s6 V
  100. Track_Name_Pos      = $222B ;曲目文本位置
    # s: z) F! t. j. Y7 T1 C! `5 ^0 Y3 V
  101. ;Track_Name_Pos      = $00 ;曲目文本位置
    8 {0 I9 ^" g- j5 Y# ?9 z+ ~& u
  102. Sound_Track_Pos     = $2265 ;声道文本位置
    & M4 J. W7 k- f. I3 F
  103. Sound_Bar_Pos       = $2269 ;音乐条位置9 v( w# I: p9 X  j# ~( i
  104. ;==================================================
    5 Y" c% L- @$ E  U! a4 ]3 O& a/ J- S' }
  105. Scroll_X = $00
    6 U1 U' ]4 a" Q" G; h$ s9 H
  106. Scroll_Y = $00
    ) `1 M; a3 \# B6 Y  A# \
  107. ;==================================================: V% K8 @/ |# }
  108. Sound_Ram_Addr_1       = $0100
    9 `  e: f+ P( [% E& E
  109. Sound_Ram_Addr_1_Size  = $80
    ! R5 z6 F2 ~' {; X7 I+ ~! ]$ W9 k
  110. Sound_Ram_Addr_2       = $0090
    ! u2 E6 J0 y+ T
  111. Sound_Ram_Addr_2_Size  = $700 y8 w2 e1 B3 P' E: |& S4 p, f0 A3 l/ F
  112. Sound_Ram_Addr_3       = $0700
    6 F. M3 z: W. e0 S3 k, s* T/ r
  113. Sound_Ram_Addr_3_Size  = $00
    ; J  j# Q& |+ m/ n: Y" p; L. n
  114. Sound_Ram_Addr_4       = $0400
    * ~" M+ v) Y* j# @, ]) \. x6 D
  115. Sound_Ram_Addr_4_Size  = $00
    7 H: e1 O/ q9 i  }; ?
  116. Sound_Ram_Addr_5       = $0500
    9 Q, M9 }( S0 h! m1 w8 p
  117. Sound_Ram_Addr_5_Size  = $40
    $ X! b# f! {. l# G. A" t- {* Q8 J" `  W1 `
  118. 9 F  r" N! s- p5 D1 U+ Y2 V( d
  119. OAM_TEMP_ADDR   = $0300, z. ~( v# E2 w3 ~% b& o3 Q
  120.   Y3 ]( y- V6 @
  121. ;==================================================
    # R& b" n* q+ L! i' _5 V: U7 T7 N7 }; N
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    ; S* S8 l9 K! Y1 S1 @7 @# r
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    * q, s+ o: N6 g& T
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位; `& K- T5 ^4 B  J3 w
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加17 `! v( P& A3 k
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    & H: ?$ x+ X( B  p
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 8 d5 m% P8 |* G, {
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加& z1 g' A7 n% \  N* f% j, ^0 q
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ' S: ~. x! S& v2 R
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    # J% y9 y, a6 \. G. O! |: L# q
  131. APU_STATUS              =   $4015   ;声音通道切换/ b+ k' D5 Y  M4 h6 \$ T
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    & Z# K' ]4 L7 E4 E' ?& {
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通0 J) a. h6 @. y. \, c# h% K9 `0 T
  134. ;==================================================( p. L4 e! ]5 y/ ^+ o1 ~
  135. MMC3_BANK_CTRL          =   $8000
    9 o! |$ s3 j3 ^
  136. MMC3_BANK_DATA          =   $8001
    : F( r, D7 q/ Z4 l
  137. MMC3_MIRRORING          =   $A000
    6 F' Y8 n+ V0 S4 y
  138. MMC3_PRG_RAM_PROTECT    =   $A0014 n! J& B0 t4 L; E7 I: g! t
  139. MMC3_IRQ_LATCH          =   $C000
    3 Q2 C4 a/ b8 z! N! m0 b! U4 m
  140. MMC3_IRQ_RELOAD         =   $C001
    " q2 P( |+ x! K8 p+ A. U4 @
  141. MMC3_IRQ_DISABLE        =   $E000
    : V3 {+ G1 N  t
  142. MMC3_IRQ_ENABLE         =   $E0012 o" k" O4 M- L; F1 T  {5 h

  143. 1 @( q5 s' K! F& x1 A' W
  144. ;==================================================+ B% R2 d% @/ |- {) b* K& }% g* K
  145. PPU_Addr        = $02008 f- V) }+ y8 i2 ], T" D
  146. Palette_Addr    = $02C0
    8 q& L. S* \5 n
  147. Sound_Bar       = PPU_Addr+$E0
    ' o; X3 a% G. g$ Q' n! |0 r+ Q, V! f
  148. ;==================================================
    4 [# l# l3 f' i' R
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D
    6 \& `# D( G' a/ ~$ Q
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11
    / h5 }+ E$ N+ R  a6 v; i
  151. PALETTE_UPDATE_MAX      = $2C5 d4 N4 e* Y+ P" @6 v
  152. PALETTE_UPDATE_MIN      = $21
    + A7 ^6 L- `6 v4 k) s$ [, u
  153. PALETTE_UPDATE_INTERVAL = 606 s4 t: o7 V# @  z
  154. ;==================================================, S$ R+ c7 O- L0 P
  155. Sound_Bar_Cnt       = PPU_Addr+$F0) a) `# m/ f; C  J- x- j- e
  156. PPU_Cur             = Sound_Bar_Cnt+$02+ ^, R2 N1 C' b1 W, B2 d) V
  157. PPU_Addr_H          = PPU_Cur+$03
    # E8 ]6 }9 s( ^
  158. PPU_Addr_L          = PPU_Addr_H+$041 B4 k1 z7 o* _6 t% {7 [
  159. Screen_Ctrl         = PPU_Addr_L+$01
    7 Z2 y" m( c/ s- w' W& z
  160. Screen_State        = Screen_Ctrl+$01
    6 n: i/ e6 `. _$ }* P) T& Q  D
  161. ;==================================================  |* ]- W4 X5 v" c
  162. Use_Ram_Begin       = $501 m! Q1 y5 P, d
  163. ;==================================================( p# v  E, k& {9 h: Y2 g% d: C
  164. JSR_Addr_Op         = Use_Ram_Begin- v6 V" |: B# p, T! i' e. U
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    9 y7 _1 D- ]/ H( ^! b, e; g+ B
  166. JSR_Addr_H          = JSR_Addr_L + $01
    8 n/ ?$ |; b4 T; m
  167. JSR_Addr_Rts        = JSR_Addr_H + $015 s9 i/ r$ \& q4 l& p
  168. Data_L              = JSR_Addr_Rts + $01. N+ A) S/ f8 [8 {
  169. Data_H              = Data_L + $01
    : X& w( [3 Y/ i) r' F  h2 X
  170. Data_Cnt            = Data_H + $01
    ( x# y8 C  C: K* P
  171. Data_Buf            = Data_Cnt + $01
    9 w3 K( n/ n, o+ b# ?( L8 c
  172. Nmi_Time_Count      = Data_Buf + $012 |; e) W, s( M' V3 v: I
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01
    ! P  r+ j5 k6 e4 @
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    3 g& Z2 c% Y8 Y) W  [4 u

  175. - B, A7 a4 _1 K& v: R" {1 i6 \
  176. ;调色板刷新标志# Q0 n! ?- q  M6 K$ R  X: y1 \, X9 U
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01
    ) |5 c% B8 f: V* e5 P

  178. 8 H$ \& [6 h5 R
  179. ;当前帧文本写入禁用标志9 w# p( _- M9 f: v
  180. Text_Disable_Flag   = Palette_Update_Flag + $01) x) m2 X" G/ T5 e% n6 U3 E
  181. ) x7 L( ]1 t2 y, U0 P
  182. ;==================================================
      d8 P$ p" P) M: M9 `8 |3 j
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动" x/ l$ v( G7 ^1 P: y4 L
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条" ?! r2 `/ h8 S
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间
    8 J6 v1 [9 e% h* |( t* f
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间6 f# l$ h/ ?, `/ |+ ^$ L
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间
      D/ e& h  x( f( s
  188. ;==================================================
    9 Q' }5 r+ I# K: g
  189. Key_Keep            = Text_Disable_Flag + 1
    5 R3 W  z  Z. S7 x# Q
  190. Key_Once            = Key_Keep + $01+ f( }* t4 l# D, x" q6 Y
  191. Key_Kemp            = Key_Once + $01- V1 h! F3 z4 s/ m
  192. Key_Temp            = Key_Kemp + $012 R. ?' }5 e0 d# h3 R4 M
  193. Key_Getv            = Key_Temp + $01
    7 }  H, W- t3 Q/ z
  194. ;==================================================
    5 h& W( v) P+ O* q: C& P1 t; U
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    : x, f8 Y; Z8 d( |0 I/ {
  196. Music_Item_Last     = Music_Item_Cur + $01! _5 l" e' P2 N- C* [2 r
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集, `. @/ b  F) G+ e5 L& k' c% B6 [
  198. Music_Cur           = Music_Total + $01  ;当前曲目3 S# R" \* R/ b; P* M, ^
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目
    + G- q% o6 R7 B9 u2 F) A
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态% P* H( i3 B% ^% u5 e
  201. ;==================================================
    . J  V; I( g( ], n& k' O
  202. HEX_Data            = Music_Stop_State + $019 h( \! f: k. J$ r- D. Z! c
  203. DEC_H               = HEX_Data + $017 a- g# r7 |" ]' G2 N+ t8 |, z8 X
  204. DEC_T               = DEC_H + $01" U6 F6 d5 w' {& q- P6 W! o1 `
  205. DEC_L               = DEC_T + $01- J- w) @' ]9 Z
  206. ;==================================================
    5 a! S' o8 q5 T% }# D+ G
  207. Time_S              = DEC_L + $01: z5 u+ o3 \( `, \1 F9 j
  208. Time_M              = Time_S + $01: r( W* ]* E: s& P! k2 T7 u0 C3 L
  209. Time_H              = Time_M + $02
    5 B/ y  j& M  ^& c) b
  210. Time_Cnt            = Time_H + $033 g+ h( Q: m3 l+ [" k. V+ d
  211. ( H  j2 u, E/ `( D
  212. ;==================================================
    5 c. V: t" r0 k0 y8 F+ D
  213. Music_Bank_8000     = Time_Cnt + 1. u. Z2 D. V1 l0 ]; [! O6 p* P* f9 b
  214. Music_Bank_A000     = Music_Bank_8000 + 1# P8 ?% c3 \# T& A3 z' T
  215. ;==================================================
    4 V" K$ r4 ^: z4 Z4 W
  216. Scroll_H            = Music_Bank_A000 + 1& |/ d& }1 g8 Y/ S
  217. Scroll_V            = Scroll_H + 1" S6 j4 g" E6 }7 f4 y# p
  218. IRQ_Process_Index   = Scroll_V + 1+ D! m; J  [) d6 Q  {. ~% \
  219. ;--------------------------------------------------  I, s) d% V- r% m% G
  220. Page_Cur            = IRQ_Process_Index + $01
    6 d9 V  W7 L, q, J) b9 ~: r
  221. Page_Cur_Index      = Page_Cur + $01( ^5 u* y2 C  B% _
  222. Page_Cur_Cnt        = Page_Cur_Index + $01
    & Y4 `: R1 M; q/ {& r4 m
  223. Page_Last           = Page_Cur_Cnt + $01
    , [8 j. f5 [' k. o& g
  224. Page_Last_Index     = Page_Last + $01% r* E% p9 v8 O- j2 o
  225. Page_Last_Cnt       = Page_Last_Index + $01
      G( X$ i  l  r# c  C& ~
  226. Use_Ram_End         = Page_Last_Cnt + $01! ~4 c2 p3 U$ X' Q+ S
  227. ;======================================================================: ~  N) k; P0 I/ Z! X! J
  228. ;音乐数据块
    + V; T# X* J) X9 C- }8 f, T6 _
  229. 3 R' f0 b! b. }
  230. .IF SOUND_BAR_SHOW_ENABLE& V% G* T2 v- i, \9 P5 ^/ x

  231. & z: r9 j2 O+ x# a* n
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    1 L, w, D  i9 c: l
  233. .ORG $9000
    * x+ {  ?( r* [/ z0 h
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"1 r1 x0 D% _7 g7 [
  235. 3 c, j9 v: `7 G0 |% A
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK0 N- V6 R  e; |% I0 ~. j
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"  s8 ?+ C# M' y! F# c

  238. 6 p! i) T9 b/ Z, i
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK1 U4 [; l6 S; \2 l0 j- R
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    2 z5 x8 _) {, m) s  N2 W# Z+ N! ^' m4 U: e

  241. 2 E7 e& p: [8 N
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    # }- j+ n, }' H9 e% t) t0 U
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    - ~( |) t, c; h
  244. . K9 Y0 g) j: P: Y+ A. A% j& ^
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    % u. J5 C3 z+ T
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    4 @4 ^( x5 j9 V) u

  247. ; j4 Y. }- J/ r3 D3 p+ r
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK( a4 b& F7 Z6 E) l" v1 g
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    " P+ f8 I# i+ q6 X

  250. ( P' W& A1 P7 n2 {9 h
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
      X  L2 k* @' T
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    ( Y" i! ]+ I& p8 H/ Q# b  z# G; Z
  253. ( i6 S, t4 y6 l  h# \. g
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK& ]8 O  p0 r2 x. }* U# ]( V, I
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    9 |' M9 R( v" g1 B- f* e

  256. : i, K2 x9 r1 D
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK6 g9 P/ \1 ?, u; P8 M5 V, J9 {
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    6 L# N/ H3 ^9 K, [

  259. : |. t2 O" ]# E: W
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK- g! s  i' T( [; _$ {$ d
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"$ ~5 Y. l! _, n) w4 ]
  262. ; w9 c6 ~+ J7 x, a  r
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK1 [- M$ Y5 X5 k  N- a
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    7 B, c4 b$ ?3 h# b; k" h+ U! i
  265. 0 }$ B- v9 R' c! c
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    1 Z# s+ e: J% B% x* t6 [
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    2 J8 `8 z# ~5 o. l, [4 K3 V- H' O0 j
  268. / D" M3 W4 J& _' N; |! I4 V
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK9 M- v/ x2 i, W2 t+ \
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    : y- s3 c  N$ t+ O" }

  271. 5 b, o7 @) P3 e2 X
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    , W0 V' R* [; g8 Q  e
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"5 m5 \3 N- `! z5 ?
  274. * l* T  N8 z+ _6 ~. g, J8 I) i0 ^
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    , r# i& Z* ~/ ~' L/ U: m, j
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    9 {* r0 h9 E) _) g* g2 u
  277. ; F  K$ h1 e! l
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK" ~- m0 ]0 f' \1 q: L! Z/ T5 W
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    ! J3 H/ @5 _) ?- T
  280. $ h5 N3 ^' d  G$ d0 ?+ g
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK0 L: P# F0 l( B) |$ E4 U
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"6 |" z# s# X9 f3 \! {+ l

  283. % u: _9 H7 n9 K+ I+ X
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK- x7 [& U+ J% U1 O6 d: X1 u  M5 j
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"( B4 W, Z& L: A3 y- g( p7 ?, C9 B

  286. . a% k9 l& \! z$ V
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    ! |) w3 D" }+ P* K4 i7 m/ b- R
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
    8 m, X' }5 V; p3 M7 v" U: D
  289. * Q4 |% @7 E. E0 ]9 R
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK' y" F0 k) G; ?( G& Y7 X# s' h8 H
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank") h1 @/ ?% w/ W9 J

  292. ) Y8 i" b7 \" G' B/ e/ m/ L: ~
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
    8 [( t% O5 O! V9 A) _
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    4 n% h/ l3 a9 J

  295. ' Y/ H: i' m- m; {
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK$ q# {" r6 y% ?8 \$ P6 B
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"+ Q. A0 s! t7 G  F( N1 O

  298. 7 W) r' P: M+ @# Q- H' C
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    $ i1 ~$ q3 L- i
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"
    9 q! p. C! M. m% v
  301. $ g% j/ J+ X& k& I
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    0 n4 S+ l+ d% y6 s) Z2 q5 r& e
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"/ ~0 v" |. y/ b- u' ~: U7 q
  304. ) c% S4 d( O6 v. N7 V! O
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    0 w' ?5 j% c% ~+ O* }- \
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    ( K& _' @% v6 l
  307. 4 _5 v" x" g; ~; P6 ~* N6 v
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    + d) c" E" `- Z. k) i6 ^
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"3 m6 D  J  f; b0 _" Q( q# u
  310. ' c* V  Z/ z* q, y2 x6 M' \
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    " V$ V+ n2 Z! A4 n6 L
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    3 ^0 T' y/ L& R; y: a( H0 I  t

  313. 2 G. l0 W, r+ C6 y
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    . T2 }- A& ?8 b6 n) A# Q! e& {" y
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    % o$ [  i; o* c( u7 U' @4 n/ r- i  \
  316. * w0 G! a- h) Z4 @$ `
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK" x: W5 ^( ]. B* d8 J  c( D. v
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"& R8 ^+ k7 D5 P! q8 U& Z
  319. . r8 P& ~9 a6 j* f4 Y8 Q
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK% \. w! m$ D+ q4 o/ [8 ?
  321. .ORG $D400
    2 Z$ g3 X4 k* B( z/ O
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"6 s* x6 m( }4 Z# e. u

  323. . d# X* ~' j9 n
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ! z. w# Y! P& ]% |: v8 X# L
  325. .ORG $D8001 X9 _9 Z5 i. X/ ?- m5 X: S
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    ; R; j5 H% E) N# V4 m% [  N8 i8 L

  327. 5 V. k) H3 L+ o6 F. H: x
  328. + l# l* H% [6 c, E( n! g1 E# d, ^
  329. .ELSE. u2 W, c$ Z! n5 ^5 H) M
  330. 5 w7 n2 Q) z. [* Z
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
      L7 W( s; K4 `% t
  332. .ORG $9000+ k% B9 L! d( K. D8 A: t
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"+ ?0 M" {1 f4 D/ w3 n5 x  A& J1 A
  334. 8 M0 W  ~* I( M+ ^/ k8 F  \
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    " k" {) {3 n1 P( E
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    1 Y* r* [9 H8 `0 e" ~& v8 P; U  [' s

  337. ! e6 a' h" O  A$ e! v$ g2 k
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    3 j$ O; C  r2 n" g8 W2 q  q# D
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    ; e: ^* c# a4 A& z8 i& Q5 G5 I7 z

  340. 5 i3 Z# T) c! \/ N: Z
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK# K( _! e) m, _7 l8 l
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    + f3 H. Q( h* T
  343. 0 G6 M  S8 ~; r0 P' h# P+ T; a
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    5 ~0 P2 g1 _! p. S
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    5 T7 t9 G) O; z4 v. v/ @
  346. 5 y7 S4 y% E+ {9 Q# J7 r( a
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    ; d3 c- A8 b) }% Y
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    / I7 T& a# p( d, c5 \& G" O  n
  349. 3 z) l) I; i4 D& H
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK7 @* E% G8 O4 F+ V3 c
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"3 `: H; d, K7 W! i$ ]6 H. S+ k

  352. 3 |: B- s- @) K/ D5 L6 ?
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    ; B! y/ R+ \5 K% N" b
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    ( Q- [7 `6 ^7 g- W  g; I

  355. 6 ?( D) i' T3 H* n' D
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    & T: A" P3 M+ b2 {. m
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    : j! N# T" n, M* e: _( l! s
  358. 6 ^6 G" i) O4 ~! Y3 g
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK  y4 _. p* v0 S8 G  ^0 Z/ o" q) i
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
    ) ]% G! I. o- }4 Q! h* h

  361. ) z0 j) N' t. F+ L) G/ m# W
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK0 V3 {! e/ o2 [( M0 m" t4 u
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    . X4 T5 M+ [6 k0 |; ~
  364. & Z2 p" L* F( D. T4 J
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK) M( Q$ m. F9 d1 g
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"9 y% `' d; I+ M. T- p5 K) D

  367. ) V0 m% U1 |# `: y" U" ~; v  j! o6 I
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    , A) Y' W9 F0 T, E, ^$ V
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"2 e( R/ O0 G. e& @
  370. ! s: z4 p- x& R- ^4 M$ P; ^
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    & o1 h# R' D: J" f1 Q9 X9 }6 k
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"6 W4 |: N# s0 _7 w; m, v+ \( b

  373. + u) E7 o  `, y; q1 ]: e
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    9 m. O1 Z7 v# }+ w) @1 J9 j+ P
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"; U8 x( M5 p8 C5 r3 a
  376. 3 a+ p. @9 b2 t! c
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK1 ~: G! M  K) V! c) v6 z& J  p
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    ( T) h. y) u1 R; P/ ?
  379. 9 c! F- v+ z, U. H  u% n
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    ! a2 O( A- u1 a6 `3 b$ E7 K& F
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"
    6 I2 E7 T! ], {6 _7 n
  382. 2 R% ]" ^$ y1 |: c) p* l& y
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    % w, @3 }9 \7 w, p! g
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"5 F( m% p0 ]/ C: [5 U
  385. 8 |$ U  ]6 I  B
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK, e) s& q* M9 i, h. @  _7 b; N3 O8 G
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"* g( {5 S! {) U" K5 L$ Q
  388. ( s0 _7 K, G2 a- ~) G8 ?# m1 \0 u
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK& V; {  S9 e5 E% F& V
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"9 C' }1 _" E+ f0 g

  391. ' O5 }, [' ~! H5 W* r! l9 m
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK; x- G. Y3 ^: T: d
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"0 }# @3 _% ]/ P
  394. . i; u/ s. J' @2 z, N/ {0 i" A6 q
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK3 [' C6 B* C1 H( N
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"- @5 n4 r6 k0 M9 ^" G- x) I

  397. 9 r; E+ N$ }0 q4 X8 N; F/ V4 i' I" a
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    , x* s" z& [4 U6 h# A9 x/ B' c0 k
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"! n# @6 l! o* E" [

  400. & U# C6 @; D5 J$ i. Z
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK/ z+ j6 p  g2 A* i' m, [" G6 P
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    ! m8 M0 P: h3 C0 s. e

  403. - N) u6 T# m8 g7 I4 U
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    9 W4 h+ H. K( q% n
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"
    6 {7 q& |0 Q; q5 Z% x
  406. 9 F, X  l1 e( r2 `
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    " Y; F- [" y$ _3 j% ^: P8 O" A8 \6 V
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    # A5 @' n. Q& K2 i+ N' m$ g
  409. / ~, b  Z+ X, E" p! M: ]
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    0 T1 P; u' \, C  o! U  l  i
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"6 {& B6 K& n6 I. p7 i
  412. 9 h$ K, ~( o" f+ X) ?
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK" {* W, S/ S! q( Y* r
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"! o1 v+ t1 k, b$ l9 T' X7 l* J& ~
  415. 1 g  w! k$ C9 @/ q+ M0 X( Y
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    2 Q' r% Z/ a& V$ r5 c; L
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    9 ^& f! A- b5 S7 `; N
  418. 5 i7 c+ \4 z4 t
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    4 a/ E2 j; A+ E" t
  420. .ORG $D400
    ' r2 e' C0 ~; k; |  J$ L% E$ s* M; W7 x. I
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    : f" n- T( E; N' u5 C4 i

  422. ! ^" x  O/ W. J3 l; h
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK+ Q& l6 ^4 h7 ]
  424. .ORG $D800$ x7 e+ Q: w9 u/ p& [  v) F! z
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"  P4 h8 ^0 l% g: u- a

  426. $ U# E; e6 c- w9 j* N, y; {
  427. .ENDIF
    1 Q3 s" N7 `, O  E
  428. & f6 h* B4 Z9 `) [) U3 @
  429. ;CHR图形数据& |6 S: B6 O! t' Z
  430. ;======================================================================
    1 Y- W# }/ n8 I3 ]. g3 o8 n
  431. .BANK CHR_DATA_BANK
    4 m5 x: D6 W9 X# }7 d
  432. .INCBIN "chr_bank/chr_data.chr"
    1 {. ]0 Y: z1 ~5 E

  433. 8 k  ]/ B  M# }- k, w
  434. ;======================================================================
    ( [$ h8 u3 j1 H8 A; m1 M( j
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK# v9 Q5 M4 q5 V! S* H7 A3 F1 H
  436. .ORG PROGRAM_ADDR
    ' S/ M- C6 g8 C9 |# W
  437. * m2 _* V+ u" ?4 [& l- N
  438. ;==================================================
    + @; n1 S9 y( A3 v
  439. NmiProcess
    ( v4 C1 m" _" J8 b9 H

  440. ( o4 f; T* w9 A# V8 A, C
  441. ;关闭屏幕控制1 z3 Z- t' A9 h1 ~* t+ w4 x
  442. LDA #$00- W' v+ m5 A1 ]0 \. ~
  443. STA PPU_CTRL
    / c* }! z6 c4 O
  444. " Q* P% r7 O+ Z, z
  445. ;没播放音乐就不需要触发IRQ
    1 T& R9 u$ S  Q9 F& n
  446. LDA <Music_Stop_State
    ! A9 l% Y# {, m; T, \8 s+ i" e
  447. BNE NmiNormal! ^+ S2 i5 ^- u/ X0 t
  448. / J. `4 k# A9 M1 o
  449. ;重置IRQ索引
    9 u4 E: i. O0 |6 S$ J, Y
  450. LDA #$00
    2 ^9 }4 v) ?, g( i# d. i. D5 s4 R
  451. STA <IRQ_Process_Index: W' b1 m  v( L2 F4 }/ ]# O* ]
  452. " Y, w* |" r2 U, k
  453. ;时间秒数为空则跳过5 j3 n- ^( ]$ `' u
  454. LDA <Time_H
    + h/ K- r# L# d3 n, i+ b& E3 i3 t" T
  455. ORA <Time_M- ^3 I1 W0 K5 G
  456. ORA <Time_S  k! C- P. p; X# Q. ^4 N7 Q
  457. BEQ EnableFirstIrq! L4 V6 D) g+ m

  458. : ~! s' y! d& l
  459. INC <Scroll_H
    # q  O( h1 U' ~+ a
  460. # ?8 T5 a6 x  c
  461. EnableFirstIrq
    5 O9 d( {& S: u
  462. ;80条扫描线后触发IRQ2 G) r) x: q+ x7 q6 X
  463. LDA #IRQ_SCANLINE
    $ w7 T) @; ]! |% |4 C; \
  464. STA MMC3_IRQ_LATCH; O8 w  c2 `% n- x
  465. STA MMC3_IRQ_RELOAD
    ! \) X8 a* x. I
  466. STA MMC3_IRQ_ENABLE9 U6 H! l& H' E7 R+ R: x
  467. CLI
    : f( X" Y# r- K7 j* f4 E

  468. 9 A2 c: b5 ^- e+ [7 i8 {* Y0 a% f
  469. NmiNormal
    1 x/ x$ a* c' k7 y2 v9 V1 b) C
  470. 9 F7 n* C- d0 f5 _' ~) N
  471. ;处理PPU图像& |- g% B# {7 L* M) \6 u$ i0 s
  472. JSR PPU_Proc
    " w$ n7 O. i7 r; N4 W

  473. 3 S" ^0 N% L. R. O/ m  `
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    , _9 k1 G+ Q  I5 L% y
  475. LDA PPU_STATUS
    " E: Y7 f$ w4 I% l2 T
  476. ;LDA #$00
    1 b0 U+ Z4 C5 ~
  477. ;STA PPU_OAM_ADDR
    ! I3 q) H/ B. k7 m; U' W
  478. LDA #OAM_TEMP_ADDR / $01009 u6 W0 ]7 s* p& b" S- N6 j3 U
  479. STA OAM_DMA
    1 i) G8 g; w9 u( K1 b
  480. ; h6 D* F8 h% G" K. G# @
  481. ;启用NMI中断; x3 w- g- K( b& S, p
  482. LDA Screen_Ctrl8 f0 G1 I" ^) T: u9 C3 D
  483. STA PPU_CTRL( K6 Q* I7 T; d* X6 {
  484. " y! b+ B5 s3 Y5 r, T, j
  485. LDA <Text_Disable_Flag& V+ ^; m! ^/ ^1 N  {9 e
  486. AND #TEXT_DISABLE_RAM2 |5 D, ~+ T, J% Q! [7 z
  487. BNE Nmi_Sound_Play; z: P/ |& y3 T' {8 q
  488. 5 z+ h  X4 M  B3 d: ~
  489. ;处理手柄输入3 d# r+ l: f+ v6 s
  490. JSR Key_Proc
    4 l. e2 Z. i# k: p9 u9 [7 ?
  491. 2 Y/ e2 j) {) w, n3 N3 {5 \3 P
  492. ;切换音乐(手柄触发)
    , A' O2 M% _6 T+ }& [3 A5 k+ ~
  493. LDA <Time_Wait_Cnt' o9 K0 v3 ^% ?
  494. BNE Nmi_Cursor_Arrow
    # r; N8 E$ w$ O6 J4 q
  495. JSR Change_Select_Item
    % v# D; e8 m# |: A' W# |: s% i

  496. ! ~7 G! w7 B* N
  497. Nmi_Cursor_Arrow, J# v2 d0 ?8 x  _, s8 T' j3 p9 q

  498. 7 O! L$ c  B* z5 ?
  499. ;处理光标箭头
    9 B& T4 B' H5 E$ O( X6 U
  500. JSR Show_Arrow# }4 I1 K/ ~2 d+ @5 G! r( S/ |1 F+ @
  501. 8 h  T9 N$ V  F; M5 `9 B
  502. ;更新调色板
    ) {& d4 m6 D9 P  |
  503. JSR Update_Palette_Data
    6 z  M" _9 J2 ]7 }

  504. 3 ?, A  |4 F5 s/ I) f8 j6 b
  505. ;显示时间(缓冲)9 n  S% Q5 v5 g, I2 z1 B6 E
  506. JSR Time_Show
    + k8 H  U8 v( U2 @' m! A; L" o4 Q, ?

  507. 6 ]- ^8 n  s3 v' p
  508. ;音乐显示(缓冲). I& d9 o3 i! C% h
  509. .IF SOUND_BAR_SHOW_ENABLE: J. n: v- g7 ^* G
  510. JSR Music_Vision
    % e  @5 P7 k  D/ n' C
  511. .ENDIF
    - w7 F0 `. Q' A, {' Q: V
  512. 1 H: r. F$ ]4 E8 B. {
  513. Nmi_Sound_Play0 a* D/ L" l0 a4 P' G
  514. ;播放声音
    0 U, U% A. i& y3 I7 L; E% w, {
  515. LDA <Music_Stop_State, |7 }7 o1 ?8 U- x
  516. BNE Nmi_Time_Wait_Set
    9 l+ x/ `8 a2 x5 \9 P( j. L9 T
  517. JSR Sound_Play_Proc8 _- P/ L: e( u0 Z6 F. ]9 W
  518. / j8 B* q" ^2 }
  519. ;播放计时
    ) @/ h! b' Y& [/ o: z' q
  520. JSR Time_Count; Y3 X1 n# V9 m7 c% W! t

  521. % L4 D6 q8 ^5 e6 n7 j2 g
  522. Nmi_Time_Wait_Set
    ; Q6 \* D) M6 }" }# A
  523. LDA <Time_Wait_Cnt
    ) A* Q5 ?$ U/ J- h) @  q6 z
  524. BEQ NmiNormalProcessEnd
    & v8 V- e0 U( E3 p8 a$ ?
  525. DEC <Time_Wait_Cnt
    : t1 }" M1 O. i$ @0 Z- L
  526. NmiNormalProcessEnd; D3 F* Q/ I! K* C
  527. - o  V  y" q% j" A1 i/ s
  528. INC <Nmi_Time_Count
      i! q; d* S3 }7 q% x

  529. 1 P3 i  }' x! l: C: Y% n
  530. RTS+ d1 ~$ m& S2 G2 C4 A7 G3 C
  531. , \9 \' u% |7 \. F- x
  532. ;==================================================
    $ W0 k8 }6 X8 Z8 y: i& e- c
  533. Init_MMC3
    + _4 k% [$ E: p! j. F7 _
  534. ;==============================% e+ w8 [9 X0 u
  535. ;禁用IRQ; u; r! ^- C' @" o, Z' `  d$ h
  536. STA MMC3_IRQ_DISABLE
      A( f$ N# i3 {
  537. " M" h% Z! Q' n7 q" F8 R. C: {4 N
  538. ;水平镜像6 d- C' E* R# V% P# ]% N0 I+ W
  539. LDA #$01
    7 ]: p% G/ E) A3 U! P9 e
  540. STA MMC3_MIRRORING3 x/ X* ^$ G( N) }  [6 D

  541. $ E6 |2 P. U9 o) u/ r9 o
  542. ;初始化图形bank
    " I3 D# a  _/ O  O% S
  543. JSR Init_MMC3_Chr_Bank5 a! d" L8 `- u0 O+ W7 f
  544. 6 K6 D4 l+ P: D, G& ^. v, T
  545. RTS% }) K) p& z9 Q0 y3 g+ U; B5 L4 ~5 C
  546. ;==================================================
    9 E, ~5 E9 i6 ~
  547. ProgramBegin;主程序" ?$ v6 L3 }+ X2 n( N
  548. LDA #$004 r/ I/ t0 K. z& t- m2 G
  549. STA PPU_CTRL
    - D4 ~: u+ @% \6 R  }/ n
  550. LDA #$008 {: a+ b( Y3 @$ V& S3 z1 Z* U# T8 n
  551. STA PPU_STATUS
    1 u& X5 _% w$ h/ r
  552. STA PPU_MASK
    & ~" {6 W+ P6 H
  553. STA JOY2_FRAME5 [! o% I. V: {5 S/ Q5 u0 q

  554. 0 m! P4 e! g3 f0 P. k* N
  555. STA PPU_SCROLL
    , i1 i# M, }, \
  556. STA PPU_SCROLL
    ' h3 {' U2 Q( u, O8 n0 K
  557. ( Z# M9 F) k* i2 o) e9 T7 ?
  558. ;==================================================" K( N+ U& S1 P" @- J6 S
  559. LDX #$FF
    ( S. N! u7 U: k; j
  560. TXS* `" l6 y* @3 i" Q+ r

  561. 3 Y2 x4 o: a, c6 n
  562. JSR Init_MMC3! x8 M) X2 S! `' g) p/ H. S* A% M4 {

  563.   {6 F9 |) j- P1 v: D  @
  564. LDX #$02# m# J: P5 ~# y7 m6 b  j! [
  565. Check1
    ( p, O3 {! l4 |9 ]& _. _
  566. BIT PPU_STATUS
    6 a: z" r' S# m' H
  567. BPL Check1( n5 ^) d  f: y8 Y3 b
  568. Check2% j: V$ w! I+ L' J6 j
  569. BIT PPU_STATUS
    0 b; e# b" i0 ~
  570. BMI Check2% s& l/ L6 C  N5 w$ K
  571. ' k% g/ p4 h6 t& T, ]1 i% ]/ I
  572. LDA #$0F
    / H# @8 {+ r# c* y
  573. STA APU_STATUS5 b5 c  ^, l$ |. H
  574. LDA #$C0/ s0 _/ E4 v; T3 l
  575. STA JOY2_FRAME& o/ M, l' E6 ]& g& ^

  576. ' ^( `9 h/ ?3 T1 X5 B4 L4 b3 K
  577. LDA PPU_STATUS5 i, N' A0 c/ e9 m- M: U8 _
  578. LDA #$10
    + s& {* Y% K/ X, k  ]& c
  579. TAX
    ; G& Y, [6 P+ e/ f+ `1 z
  580. Check3
    9 L/ f% D+ c9 f3 O- d0 G/ o. Z
  581. STA PPU_ADDRESS
    ! k2 U( f8 ~; [
  582. STA PPU_ADDRESS
    ) e6 b" ^7 ~8 m, q' y4 T# s
  583. EOR #$00
    * D5 t( k( s( v! u7 ]3 }
  584. DEX
    7 q7 w8 o5 z& t) Q' W  M
  585. BNE Check3
    0 ?* ^' k4 t2 n( i' k+ v( k! I% i
  586. ;==============================
    * k! x4 b& a% @$ P
  587. ;调色板清空
    5 m. s& R. d9 I; X  m3 u
  588. LDA PPU_STATUS- X  Y' k7 V" z& b7 H; J
  589. LDA #$3F) ?6 w* y; m( x- F- v/ X4 H
  590. STA PPU_ADDRESS
    & j2 u! M" ?9 v& P( S
  591. LDA #$00
    % _7 z4 E6 A# B: o3 R' v- p
  592. STA PPU_ADDRESS# b- d0 _8 s1 [9 R) H
  593. LDA #$0F
      S, h& O, ?0 |. T
  594. Palette_Clear/ Z  K, j* E( d) z# ~% i" I
  595. STA PPU_DATA
    . ^4 G& A1 Q  a3 k5 W, e: B  ^
  596. INX6 @6 I( L0 Q9 U; {  A' |6 U3 c
  597. CPX #$20; u# f4 J. B+ e6 o4 Z9 S' P6 E& |
  598. BCC Palette_Clear
    7 R2 Y# H' O9 p+ j+ B" ?5 G
  599. LDA #$00* w, g- e- |! w) m! e) t  a; }
  600. STA APU_STATUS
    # v/ Y7 J/ U+ y3 {
  601. , h$ t1 }, @$ _4 j/ t0 d" a
  602. ;==============================
      V1 b! c4 j( m. {7 c6 k% M/ n
  603. ;RAM初始化
    - c' }" D) `/ B# @) ?  R# `9 n
  604. RAM_Clear_All) @1 m. \, W, a$ v) ]/ I/ U
  605. LDY #$00
    $ A7 b3 ^& _- _  S  P, o
  606. LDX #$08
    9 Z( [. N. A3 P( @- W: F8 a
  607. LDA #$00' R: }% ?0 C4 x& x
  608. STA <$004 M, O9 h; F$ f+ e" C& ]. Z9 D( V% A
  609. STA <$01
    * ?! e9 H  B# F6 m$ K; Z
  610. RAM_Clear_All_Start2 l1 L( {. r! J4 e& b5 b5 M
  611. STA [$00],Y
    4 N; a' e9 M) W. k# [9 i1 I& G
  612. INY0 u$ H- L8 \% l1 f" U
  613. BNE RAM_Clear_All_Start' x6 ]/ b. C7 l7 I* y# \+ d/ Y6 g
  614. INC <$01: k" s0 y" D7 E4 r, a
  615. DEX
    $ V7 o8 c( S# ~: [1 x' x
  616. BNE RAM_Clear_All_Start
    2 ?( ~8 s: u/ f$ B

  617. - q  H+ \4 i9 T- i$ j
  618. JSR VramClear
    2 B, n! [; c7 S  z/ G
  619. JSR VramInit4 v; `7 P' r  K1 g  \4 `
  620. JSR OAM_Ram_Init1 D% f: {, E& I- E3 {0 N
  621. JSR Init_Palette_Addr/ `" @, V: X+ y) w. d/ [3 y9 F( ?
  622. * R1 E" w  A( I2 a
  623. LDA #$FF' R( O2 \3 A+ N; i
  624. STA Use_Ram_End
    : N# o, o- z/ V7 |% ^* N
  625. ;==============================' d) X- [' @/ B
  626. ;初始化背景调色板
    . c: R' E: N; q! T8 f3 }- F3 F( C
  627. JSR Set_Palette_Color
    ' T, Y/ u, ~) T5 v* ~, M3 v
  628. JSR Set_NameTable_Attributes
    5 T) D( c7 u" Z3 N  L# h
  629. & T8 k9 q: G( B1 X' D9 d1 ]
  630. LDA #$00
    * S' c8 }, @5 A; D3 h
  631. STA PPU_OAM_ADDR$ Q% h2 a6 `: P; q0 `7 i& m' d
  632. LDA #OAM_TEMP_ADDR / $0100
    6 z" l. h, ~8 a4 S! `- a6 d
  633. STA OAM_DMA& H# ^1 y' w, l; T
  634. $ W* b/ x6 O4 Z0 W% r" @0 I
  635. JSR Sound_Reset_Proc
    5 J1 i3 U$ }$ k* ^' ]
  636. JSR Set_Sound_Total1 O$ j. N8 R) ?* C
  637. ; y/ ^) ?) u0 p. m9 T& t0 N
  638. Init_Start_Music' Z) s8 H- o& c% v5 |
  639. LDX #$00. H. E/ q2 _# L$ \* b* `
  640. Init_Start_Music_Write, P$ d0 U% P/ l- Z! V: S. i, d
  641. LDA Sound_Start_Port,X
    % m+ @$ m# ^6 y5 h9 o
  642. STA <Music_Cur,X2 k6 A! k! t  t: ]" |
  643. INX4 ]3 \7 z3 v5 V% I$ S/ w
  644. CPX #ITEM_MAX_SIZE
    / W) z5 k# Y4 p$ L7 x2 {$ D  t
  645. BCC Init_Start_Music_Write' f1 _, Z$ |' ^8 N& `7 b

  646. 5 C0 H: O) q# f, }1 _# W5 d
  647. JSR Show_Music_Text2 v+ l( V& @" U3 ]" Y; P6 P

  648. $ O0 f* A4 R$ R$ a2 X
  649. .IF SOUND_BAR_SHOW_ENABLE
    # E; r6 l5 }0 ~; I) W3 j: f
  650. JSR Sound_Bar_Text_Set: F1 t" @# ~: O9 u. \
  651. .ENDIF
    - F) o& V7 n5 G/ q5 d0 g9 y" p6 T

  652. 3 O, `/ M, A6 T" C
  653. .IF Track_Name_Pos
    ( |: C2 I' M. o* e! d
  654. JSR Show_Track_Info
    - h+ I7 }8 L2 y# i( i8 x& o9 o
  655. .ENDIF1 m# ]' ]/ l$ I0 \3 e, m
  656.   j% m; v2 k  T  E
  657. JSR PPU_Proc
    3 ?4 j4 f  J% |* ]2 f

  658. 5 q3 P! [, b1 {6 f5 f
  659. ;==================================================
    " ?  Z8 F3 ^1 l8 Z* @6 \' ^; b
  660. ;音乐bank初始化
      p; z8 c" C! b0 X& o$ M- k
  661. JSR Init_Sound_Bank( ]5 K" Q1 g1 _. i* u9 [

  662. 5 \$ x8 X/ w2 D
  663. JSR Music_Show  P" N+ u4 ~- N, `- g
  664. JSR Time_Show3 G6 Z8 q- U4 Q, t3 @3 q
  665. JSR Music_State_Show8 }3 J2 Z: Q) M% _
  666. JSR Time_Delay
    1 u! [  N, z- S/ a

  667. / A) b( }+ w/ `- _3 n) n
  668. LDA #$01
    $ |# B! U* D  P( @  r
  669. STA <Music_Stop_State  d0 R. I4 e, a  K& `* U
  670. $ r( x# I: P' h9 k) ]
  671. LDA #$88
    0 ^* M, v1 r4 I# w# \. r
  672. STA Screen_Ctrl
    5 R; [  ]6 E+ Z9 n% ?' Z  W6 S) s
  673. STA PPU_CTRL
    2 g: [) S2 x( G. Z

  674. * M/ a2 _" v+ }1 n; `
  675. JSR Show_Page_Text
    : o* O4 q& r( q8 W! ]$ s+ {
  676. % A$ V4 ?; q4 R1 k. o0 U
  677. LDA #$10
    1 I6 b* z7 {% R, X
  678. STA <Time_Wait_Cnt
    2 \' y: }- Q7 U( e) \
  679. & A; I0 d  p  I* f
  680. Wait_Time_Over
    $ l- K+ ?' V' z0 u5 c9 n6 G
  681. LDA <Time_Wait_Cnt1 b8 C5 S: w$ g7 x$ B: ^, n  Z" x: D; x
  682. BNE Wait_Time_Over
    9 J; e7 F, |' r- f& L) [

  683. 0 }& _& S* \2 W* @% U. z! E
  684. JSR Show_Arrow
    2 N! U& a% ^, v" r( [0 C; H
  685. LDA #OAM_TEMP_ADDR / $0100
    4 ]9 n2 [5 ~9 i% b# g8 T* h
  686. STA OAM_DMA
    7 [5 d" x& e6 h( H6 W' S; u

  687. * v/ r8 }( ?" g+ V8 |
  688. LDA #$1E* o5 p/ l# ?- y* E$ U) `& i- ^5 l! ]' G
  689. STA Screen_State: g& r7 ^3 _4 C  L( S" t# F

  690. . ?7 w9 c0 u/ ^1 }4 G1 A% G' ^/ Z) Z
  691. LDX <Music_Item_Cur
    ! X8 t: y# s% b
  692. LDA <Music_Cur,X
    6 d7 K, K" q0 ?* f9 F
  693. JSR Sound_Init_Proc
    " F& f$ d& z0 \  S5 `; ]6 T: h( e7 h1 J
  694. : e/ n0 W3 E1 H; @- P
  695. CLI
    $ M: d9 g/ b! z
  696. JMP MainLoop
    % k8 ~* t4 G0 C- C' C+ O3 S4 U% Z( W

  697. ; n7 i2 M2 C5 X2 o
  698. ;==============================: q6 H' T1 x- M1 _- C8 Q
  699. Time_Delay;延时等待
    % q2 d* S- _0 M' Y1 L# d. `+ C
  700. LDA PPU_STATUS
    / W( h0 [9 K+ w$ j2 W9 V- M
  701. BPL Time_Delay* u3 H% i( X. u( r! K; S8 C
  702. RTS$ u2 ^9 C  x& }5 c4 t+ ^

  703. $ D$ L1 X1 \8 I' G/ r
  704. ;==============================& e9 a3 D2 z4 n5 u
  705. OAM_Ram_Init;初始化精灵内存6 [; {1 l) W( q* r( a
  706. LDX #$00
    + i( ?! q- A% e; A
  707. OAM_Ram_Init_Write: |* B5 E+ ~! R  x; i& [* i& v( n1 M4 y
  708. LDA #$F8) f9 S- `; X" k" O
  709. STA OAM_TEMP_ADDR,X( d1 w$ u, D5 n( D7 @
  710. INX
    - ]+ r/ d+ ?1 Q2 A* A, d
  711. LDA #$F8) S$ w& s# \. Y( i% O2 t
  712. STA OAM_TEMP_ADDR,X
    8 t: p2 M9 a5 k5 x  e  V  K3 U# W7 l
  713. INX
    1 Z/ ]# _/ l$ [  E7 z
  714. LDA #$005 J# x3 N) o) D# f+ w. o+ t: k4 ~
  715. STA OAM_TEMP_ADDR,X$ t. Q& }; J8 E
  716. INX
    - T6 O( L. H8 I: W6 ]: g
  717. LDA #$F8
    " i* }6 I0 k  [5 p+ r) n
  718. STA OAM_TEMP_ADDR,X
    * \+ U4 t4 w6 m1 ?) d
  719. INX
    , q8 ?, w, F; g- e
  720. BNE OAM_Ram_Init_Write+ N4 \7 G( C8 B
  721. RTS; z! P. {/ S6 T. L7 {& a

  722. ( `$ X7 `' j) u) s. q
  723. ;==============================
    6 X* q. Q( U1 O
  724. VramClear;初始化图形内存, E) `3 p4 @3 b1 {
  725. LDA #$20
    0 g# I4 w( m9 F9 s$ v3 |1 b- w
  726. STA PPU_ADDRESS
    * b1 N; V; _. U' q. L- a( P0 z
  727. LDA #$00# v- `6 b8 k8 X0 J/ g
  728. STA PPU_ADDRESS! l6 `6 ^8 C7 B( P
  729. LDA #$00
    & I) z" `" w" w- [, I' O3 \
  730. LDY #$00
    . {9 ^+ `3 V  r( u
  731. LDX #$10
    1 E# p3 v3 @1 y" S4 B$ m. ?
  732. VramClearWrite
    . W. F, L* g; d7 p' C* [
  733. STA PPU_DATA5 a+ y3 _( E( R1 p1 I: ?
  734. INY
    & {! T& T9 ]6 L- }: j3 Y! d, ~1 L
  735. BNE VramClearWrite
    " n9 g8 f* F5 ?7 W5 E, l2 _+ Q* o6 m6 U- Q
  736. DEX* g% c9 ?( ^+ m( A% a) @0 B) d' J- x
  737. BNE VramClearWrite
    ' b1 L& `1 [  g7 U
  738. RTS
    ' Z5 T' B1 t" k+ Q3 L: c, T0 B
  739. 0 G, y1 C  r8 T+ a2 l& Z1 r$ F( I( D
  740. ;==================================================3 a# ]& H5 |: e* v* ~5 U( y
  741. ;设置MMC3图像bank
    7 `" u3 m+ E& w% m
  742. Init_MMC3_Chr_Bank
    3 y6 Q9 Z  K$ X. i! u- d% _
  743. LDX #$05
    . r# j. J  r6 }! M6 }  F
  744. Init_MMC3_Chr_Bank_Write, j8 Q  W* S" G
  745. STX MMC3_BANK_CTRL' e- G. f4 w+ P" J! Y
  746. LDA MMC3_Chr_Bank_Data,X, R( B+ h" }3 Y* C  n8 ]8 E
  747. STA MMC3_BANK_DATA% K! ]  b3 y. I; w$ {
  748. DEX
    3 X; w* F3 G# l. k; W( U
  749. BPL Init_MMC3_Chr_Bank_Write/ \- O' o/ X+ j) R, T( a( c& \
  750. RTS5 w0 c, n  y8 I1 `* H" ?
  751. ;--------------------------------------------------
    ( m  W. q* H  S
  752. MMC3_Chr_Bank_Data  v9 X: x2 l1 ]/ u0 i: M
  753. .DB $00,$02,$04,$05,$06,$07: B# J" S, K% r7 j. }
  754. ! A8 k6 h6 J6 @' @# J
  755. ;==============================
    ; `8 Z+ {  H# n
  756. VramInit;初始化图形内存: K8 a/ P3 w0 r* C$ ?$ u
  757. .IF CHR_RAM_ENABLE2 H  J4 g2 z- c& t
  758. LDA #CHR_DATA_BANK
    / l$ E* T5 c( K5 Z) M8 y
  759. JSR Switch_Bank_A000
    % P& z1 |9 k* X; L
  760. LDA #LOW(CHR_DATA_ADDR)) K" n, ]6 p4 m! A% v. Y$ `
  761. STA <Data_L! [, f3 N) b# d( C1 {5 V
  762. LDA #HIGH(CHR_DATA_ADDR)
    , W- C% J$ f" A4 I# R
  763. STA <Data_H; [8 _" Z) E7 A6 A4 f5 D! ^
  764. LDY #$00
    5 F7 ^! h. U# D# s6 |; V
  765. LDX #$20
    / k1 w0 [& v% }' @- U
  766. LDA #$00
    $ O  {3 L( `. D, B+ l- N% E" o
  767. STA PPU_ADDRESS
    . W9 y5 G' g2 ]( l
  768. STA PPU_ADDRESS2 a5 ~3 Z8 _4 H" j
  769. VramInitWrite
    0 c) p# V& O0 j; a
  770. LDA [Data_L],Y
    6 P) V+ h( Q4 B( n3 _  C6 b
  771. STA PPU_DATA
    1 L! A5 B4 }5 {+ [" G/ i
  772. INY- A# j5 d5 C2 i) @' v  q
  773. BNE VramInitWrite8 |* |( M  ?( W' S: A5 q, d  t- |
  774. INC <Data_H( V% O- }- y; v: L5 A8 T
  775. DEX6 u& ?# G$ Y  v
  776. BNE VramInitWrite
    % z! p2 g6 f, q: X2 g! Y
  777. .ENDIF
    2 E- f! y6 W+ d/ s0 h
  778. RTS  [3 ^$ t7 `# H/ y/ z( h
  779. ; V' |  m2 X1 i* v
  780. ;==============================
    # ^# p: C( }# W% y' O' t1 q. [
  781. ;音乐切换( _3 _& N; @0 e4 ?
  782. Music_Play_Change; t8 ]  O0 j& v+ E/ \- e' T
  783. LDA <Key_Once
    : }: J: f+ O6 U0 X0 K0 Y
  784. AND #$FF; @  L0 ^/ t2 d( e8 }% ^
  785. BEQ Music_Play_Change_Check2 E& R; e+ B1 U$ M- o6 ]1 O1 y
  786. 3 {* L! \: r/ t1 U" V; q# {& h, m
  787. ;禁用音乐条刷新
    : K0 g# \& k) d" T1 s' u1 R% T
  788. LDA <Text_Disable_Flag" U5 Z; M! L, j: w6 B1 h
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME( e! ]6 r) x) v: m- x" o) p
  790. STA <Text_Disable_Flag
    1 A1 ]0 Q" P3 p

  791. $ g9 J$ G3 r& k  ?" @
  792. Music_Play_Change_Check% t0 T# F6 `- R9 e1 T$ g( \$ p
  793. Music_arrow
    $ ~" S0 r* ]" o0 f2 W
  794. LDA <Key_Once; u0 T: J8 c% E1 {0 f2 H4 e. h
  795. AND #$0F
    0 w5 t# _) ?* z3 w
  796. BEQ Music_Play_Change_End9 ~2 K1 V9 E  S4 K5 T
  797. JSR Music_Track_Change" J: ]% J; [+ X2 t; W4 b  n
  798. JSR Sound_Reset_Proc
      q8 n* R8 ]+ C- k) |2 p) O( o
  799. JSR Music_Show
    4 a0 a/ u+ B% l/ N( P0 S
  800. Music_Play_Change_End
    ( Y& m8 Q! q/ `7 z* ^
  801. RTS
    # l' D& T! Y. I" x

  802. # C+ e, G0 j. }' F' k
  803. ;==============================  t) E' Q+ t6 v4 d
  804. ;音乐曲目切换1 }) L; l. c7 e+ `7 e
  805. Music_Track_Change9 x9 n) L- q- y5 R" v5 W% \4 G
  806. LDX <Music_Item_Cur
      M& J9 d5 g$ J* ~
  807. LDA <Music_Cur,X! B! r: L, r+ s$ Y# N
  808. STA <Music_Last
    4 D5 [0 ~3 j( @- A+ i2 p
  809. Music_Decrease
    ( a4 g) t6 S2 |) @6 U- c, H+ _; `7 O+ k! H
  810. LDA <Key_Once% [! F. y: y3 l' h9 Z7 X1 W) R" Q. L+ B
  811. AND #$42
    ! s- B$ G; [1 O" l) z# v
  812. BEQ Music_Increase6 M9 t7 o, E7 Z
  813. LDA <Music_Cur,X" v+ m0 |- Y- r& b+ ]; D: \. I
  814. BEQ Music_Increase3 f) V# N1 }/ N6 b; ^
  815. DEC <Music_Cur,X) G, u" t/ [- D2 s( z
  816. Music_Increase
    / N' j( i  j: `$ B7 F, U
  817. LDA <Key_Once
    . M/ {& Y# }) V. A
  818. AND #$81
      J1 |) @/ v- h7 p- ~/ n0 b  Z
  819. BEQ Music_Decrease_10% H8 d& r2 ~1 M! s! ]
  820. JSR Set_Sound_Total7 s/ s5 Q% K# N0 j7 F4 {8 U- B
  821. LDA <Music_Cur,X
    7 `4 z& L! D! b  @; s5 K
  822. CMP Music_Total
    ; f5 K  x- c2 Y- m5 A
  823. BCS * + 4+ f  E2 i$ q% M" l# B0 I2 c! s
  824. INC <Music_Cur,X  h; ]* }' H4 l. g9 x
  825. Music_Decrease_10
    5 i: q& [( T3 F# A+ U9 Q7 v0 s
  826. LDA <Key_Once* v, G; b1 d3 o# ~0 w
  827. CMP #$04) O% D' m" i0 u- ]
  828. BNE Music_Increase_10
    ! F9 W. R8 e9 Y0 U  h3 u& T
  829. LDA <Music_Cur,X
    1 H; }2 X/ b/ K" @3 @1 a
  830. CMP #10# r! j' d; z3 |# p
  831. BCC Music_Start_Song_Min5 y+ j. F* P& ]; H7 f
  832. LDA <Music_Cur,X1 P5 W  ^% @3 x, N1 V# n
  833. SEC! \6 c3 Y( H" n5 t
  834. SBC #109 k" Q9 K! t% X; T0 a" t
  835. STA <Music_Cur,X; f$ @/ _# L4 @7 d; S0 C5 G
  836. LDA #$00
    1 q& Y9 V0 o* h
  837. BEQ Music_Increase_10
    2 j" q/ R$ [9 ~6 h6 k1 X" W
  838. Music_Start_Song_Min
    1 P/ e+ E' {  B& m  c1 L, h' Y
  839. LDA #$00
    - |" @0 ]/ z: }9 F  l# K0 m
  840. STA <Music_Cur,X* D, w2 ^  C6 a8 X% p  a# E* r  A
  841. Music_Increase_10
      @- y) U' r- {6 `9 g& Y* d: z( k  E
  842. LDA <Key_Once& g9 `2 L1 I0 P- V: @
  843. CMP #$08
    , m% @* [, V- ?  S) j! E
  844. BNE Music_Track_Change_End" `+ i+ m* m9 U3 b8 V: }5 t
  845. LDA <Music_Cur,X* ~* a' D# S/ ?8 ?4 |3 m
  846. CLC' z- z+ J1 f' R$ d2 i1 s7 _4 T
  847. ADC #10
    " ]# C; C  t! v! V* K+ d# U% `
  848. CMP Music_Total1 G! O( r, V- ^: [
  849. BCS Music_Start_Song_Max
    ! t# _; G! o* L) l! T
  850. STA <Music_Cur,X
    " Q1 b2 z9 o6 V' E
  851. LDA #00
    " Z4 ]& B  ^' F( i/ ?" ~3 P
  852. BEQ Music_Track_Change_End! K& G: E3 W, H1 m# B& }1 |1 M9 E
  853. Music_Start_Song_Max+ q+ E" z: }! ~
  854. LDA Music_Total
    2 W1 U- ^! k2 [% b4 Y
  855. STA <Music_Cur,X, K" s3 p7 \1 k+ n
  856. Music_Track_Change_End. @% T8 _9 L5 |! _6 Q; q9 ^8 `
  857. RTS2 J0 \3 h' Z6 i; n; o: J. A
  858. 4 I$ [- ~) F' Y6 R' Q
  859. ;==============================: i, A* S" p8 @/ b$ l& E' W/ M
  860. ;按键处理
    / l, {1 n; n" b5 v* ]
  861. Key_Proc# K1 W1 b0 P' Q" e* s7 [
  862. JSR Key_Scan4 V: }* {& d  p( d% T6 e
  863. LDA <Key_Keep% m3 k; Q" L3 o$ g/ |
  864. STA <Key_Temp1 A0 P+ t4 ~5 ]: c" C. i& Q) K
  865. JSR Key_Scan) j1 d4 l) s2 w% ?  Q9 h
  866. LDA <Key_Keep
    ( j) \$ Q& p( F% ?
  867. CMP <Key_Temp6 U$ F, p1 G) C0 ^: B" c" r" p
  868. BEQ Key_Get_Once; [* _' u& S) u1 a
  869. LDA <Key_Kemp, ]. m  h/ c' M) ]9 i- N
  870. STA <Key_Keep
    % J0 t/ C! q7 O
  871. Key_Get_Once3 O  O5 Z; w1 l
  872. TAY
    8 x% R; o: H1 }8 m# }/ \7 f
  873. EOR Key_Kemp3 ?, [$ g' @/ m# S
  874. AND <Key_Keep1 w! g+ c5 V. i) R& r4 @4 k- ?; j
  875. STA <Key_Once% n; A1 @+ j$ V: B! r4 L
  876. STY <Key_Kemp
    $ w  p9 h/ I" F5 V  c. \- L. I) B6 b
  877. RTS+ n3 V1 G3 I4 K7 `3 K
  878. ;------------------------------9 Y. W4 \2 i  g; a
  879. ;按键扫描
    " [' o! x& ^/ ?
  880. Key_Scan
    8 u: G" u/ k: k" O; E: i3 F
  881. LDX #$01
    : t9 K* P1 u& {/ r5 I7 D8 G& G* m
  882. STX JOY1_FRAME
    % f2 [/ a1 Y( {; t; e& G  S
  883. DEX  C+ X1 \8 L% \( i! s! y4 J
  884. STX JOY1_FRAME
    * B" j; x6 q9 [! ^& R3 G% W$ @
  885. LDX #$080 Q9 C- Y. d5 {) J
  886. Key_Value* n* m, l8 U/ G( ~, @
  887. LDA JOY1_FRAME, r1 [- u8 h6 L( i- m) G. S: q# d
  888. STA <Key_Getv* |* H3 J4 ?& p0 X1 b% {
  889. LSR A
    2 p' _# {. G, x$ x
  890. ORA <Key_Getv7 F6 O" A9 q" c  I6 [! l3 a
  891. LSR A6 R: }; b/ t- M- _) X' D' \+ i* y( ^! i! `
  892. ROL <Key_Keep
    ; h1 m$ s/ u0 ~  _1 r0 K
  893. DEX. p( Z7 F/ x$ o/ h, F1 g8 h
  894. BNE Key_Value
    * m" n# ?3 m2 {8 o9 L% g
  895. RTS; @4 A% `9 q$ H
  896. 6 P9 C9 c4 X7 ]6 L
  897. ;==============================
    1 }6 @3 z0 j3 g& @! D* B1 j
  898. .IF SOUND_BAR_SHOW_ENABLE
    " w; F& g. [8 U0 |- A/ ~
  899. ;音乐条显示
    * Z/ i/ U% _$ T  ~
  900. Music_Vision1 x7 }" s' o8 S/ {" E  L$ [% p
  901. LDA <Text_Disable_Flag  |) n6 B: Y8 Y) G1 l
  902. AND #TEXT_DISABLE_ITEM# C, t( f+ m1 c% v
  903. BNE Music_Vision_End' s$ D7 y$ f1 V4 Y6 a3 v; v
  904. AND #TEXT_DISABLE_BAR
    ) j: Z% a4 Q8 [. f$ |
  905. BNE Music_Vision_Set
    9 z2 p" G& g% V$ n+ }( z
  906. LDX PPU_Cur
    7 d; D6 q/ K& }) b/ e  n
  907. JSR Music_Animation
    1 z1 f1 V) P; D, K$ x
  908. STX PPU_Cur* v9 E* V9 {1 j' ]- ^
  909. Music_Vision_Set
    4 i6 ?# L' u; D5 I! O( N
  910. LDA <Text_Disable_Flag4 G  C7 a& t$ Y8 F# H6 F# o# y
  911. AND #TEXT_DISABLE_BAR ^ $FF: i# \0 ?7 P  @1 F/ s- `7 r  W6 j
  912. STA <Text_Disable_Flag
    5 w- j5 b$ c. \
  913. Music_Vision_End
    2 ]; B* d8 c* @/ g
  914. RTS' \( \6 g/ L" m+ v; H. h
  915. ;------------------------------
    ) _; w7 o' _5 G* J4 B0 L& x
  916. ;音乐条显示处理3 r5 g' a1 V( C, \) k. p. I
  917. Music_Animation
    + r6 G% P5 X: C- W! d, W
  918. LDA #PPU_MODE_CNT_LINE
      _: y6 j; N1 Z3 ]9 j6 c
  919. STA PPU_Addr,X+ b( t  e) j9 V/ H4 M' ^7 R+ u' i
  920. INX
    ( ?' e& T3 S3 N' r
  921. LDA #HIGH(Sound_Bar_Pos)2 D0 O  B! {( V4 D; y# y" [" U, Y
  922. STA PPU_Addr,X/ U  Y6 A" x* z& P: W
  923. INX
    0 Y4 u, K1 e" h$ k& k  v% e, \& q
  924. LDA #LOW(Sound_Bar_Pos)  U, k/ V% O: B- M# p3 y/ A% V/ s# q" x
  925. STA PPU_Addr,X4 f: |# m# R- B) T& T$ n
  926. INX% \' T: E, z! y$ Z9 {; C  y' G- N
  927. LDA #$08
    7 _9 ?5 M) {1 d! }: f
  928. STA PPU_Addr,X) r: V5 A6 ?% H
  929. INX
    ! {9 e/ @& L* g0 M& U4 K- P) `
  930. LDA Sound_Bar
    ; j' g# U1 m$ q" D4 s9 I7 k
  931. JSR Volume_Convert
    , x4 i; R1 G( i0 |3 c

  932. # v& F! V/ L  M
  933. JSR Volume_Set_Cnt
    3 T5 P% `5 [1 n7 x
  934. LDA Sound_Bar+$4
    , z. C5 {* m' N6 t( g' k5 N
  935. JSR Volume_Convert
    1 I6 U8 t( n' ?6 C& d+ I

  936. & v3 G% Q: B6 ]" l
  937. JSR Volume_Set_Cnt
    8 u7 h0 u% r% V
  938. LDA Sound_Bar+$89 {- F+ l; u% Q% Y
  939. JSR Volume_Convert& q, r* T8 {4 J8 H  \
  940. 9 n/ \( D5 t) j1 o, }
  941. JSR Volume_Set_Cnt
    $ |( |# V- ?. U' }0 x
  942. LDA Sound_Bar+$C
    / n, M) K* n; p. E- Q/ D: ~) r1 e3 h$ B& C
  943. JSR Volume_Convert
    6 U5 Y" b# l8 C: n& ^) w6 Y4 R2 m
  944. + _& j7 U, Y8 w9 c9 R
  945. JSR Volume_Set_Cnt! Q( P! Z( w' i4 r+ D5 N4 W

  946. 8 A7 G* _! n! A. T8 M% x; ~1 j; e3 q
  947. LDY #$10
    8 ~% b$ X0 H! ^5 [9 B" }( o
  948. LDA APU_STATUS! v8 B! X  m4 l7 t- k. ?, V! q
  949. AND #$10) V! X* b, q$ a- m
  950. BNE Volume_Count
    6 p( D7 U  b- `4 e
  951. LDY #$00
    0 _0 o' J, q  r4 \" R% s
  952. BEQ Volume_Count4 M( O, N% T( t" u0 h: N

  953. 8 `  X8 L0 M9 L2 h
  954. ;------------------------------
    ) m: U7 e( u$ p4 X" P$ G3 u# _
  955. ;音乐条处理+ Y: |$ _9 f1 Y1 D4 _, e
  956. Volume_Convert
    ) M( @" f& B# j( p4 z
  957. AND #$0F6 S" r1 ]5 ]9 Z4 J% |3 p( B
  958. TAY; z4 N5 `! p" H1 s4 w
  959. Volume_Count
    . q  `: g" Z3 \
  960. LDA #$08) @9 V2 {, Q) R, y/ `$ ~( D6 ?: P! |
  961. STA Sound_Bar_Cnt
    . \- w1 ^% D  e. n
  962. Volume_FILL
      @# P1 P# q+ \0 i5 i' g/ O6 B
  963. DEY3 b8 Y1 j# }8 g+ y- t- }
  964. BEQ Volume_Half
    & p5 {; A$ A9 D6 G
  965. BMI Volume_Empty0 a$ A, b6 A8 C( U. R; T5 ~. T! F0 d
  966. DEY4 B2 t! P' q+ M; c& I
  967. Volume_Full
      e0 G$ J0 b  b9 M
  968. LDA #$16- j7 C! O0 E& q
  969. BNE Volume_PPU
    5 \/ f5 a* I) P9 V' j
  970. Volume_Half" V  s' o$ S$ U. a0 X; i
  971. LDA #$15
    ' r, M. ?% G/ h% u: h2 j# N
  972. BNE Volume_PPU
    - v9 W1 V) R6 E9 f0 H
  973. Volume_Empty
    . ^- T; k' D3 G8 T! Y
  974. LDA #$14: Y. ^6 N8 `/ e: H  V# ~% D0 H" {
  975. Volume_PPU
    - X. x. k2 y& M; [) U
  976. STA PPU_Addr,X: v, ]7 V! Z9 i' g( K
  977. INX- S. r! g7 I* z. r; M+ a9 O
  978. DEC Sound_Bar_Cnt
    - N6 K5 b- g5 r$ O7 P3 }4 q
  979. BNE Volume_FILL
    6 ]  R' D, t1 ^; d
  980. RTS; l& l- @6 ?- k/ Y" S; J

  981. 4 s# L( O1 \* ?, _3 f, s
  982. Volume_Set_Cnt2 F, Q% W$ _: m% K0 F9 t
  983. LDA #PPU_MODE_CNT_LINE_NEXT
    % s  Z8 O$ N$ o2 d: V
  984. STA PPU_Addr,X
    / g" v3 c$ X8 t; A. U4 b# g6 Y8 j
  985. INX
    % ^$ V; D- J' ?
  986. LDA #$08$ @( b" e# f. `. \* b
  987. STA PPU_Addr,X/ F7 E$ _* [2 {; h0 {
  988. INX6 G- }; e; O+ i6 G6 }
  989. RTS& T% y5 Y% c, R
  990. 1 U5 F! a4 T9 J
  991. .ENDIF
    7 G; p8 }+ ^/ q( E5 Q6 W

  992. , E5 H% ~: o/ d* R7 ^  s
  993. ;==============================5 q' d3 W5 \- D3 d7 N: O3 Z+ [
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    ) w* ~( H- o% Z6 }) C0 V
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式
    2 @1 R5 v0 R  _* g4 X) |. Q$ Q
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除0 g& C0 [4 W4 }) X
  997. ;------------------------------
    - S5 J( i! H' B$ ~5 c
  998. ;PPU处理: j3 K* p1 V: n1 p& e5 o
  999. PPU_Proc0 D+ z, j( p! B. v8 |& \2 x# l
  1000. LDX PPU_Cur2 _0 ?- y; u, o+ k
  1001. LDA #$00
    ! K- ?" {/ X1 a' P/ r# z
  1002. STA PPU_Cur+ e8 F8 e- s; ~3 ^% p
  1003. STA PPU_Addr,X
    . o3 X( ~& \& ^' {2 |  n( F
  1004. LDA PPU_Addr7 x* G4 ^! `! j
  1005. BNE PPU_Proc_Beg7 E$ ?, e; u6 ]4 d, D8 n' m; S8 s6 T
  1006. PPU_Proc_Ret' H& U, ]: d" l, E$ v; |- q
  1007. RTS
    9 s2 P: n( |! Y: A0 Q% S8 }" e
  1008. 5 f; }' V# u3 u9 t
  1009. ;------------------------------
    * e- @9 F- U1 b4 v) v6 V. O/ W( A
  1010. PPU_Mode_Return_Cnt  ;转下行模式0 ~- n" C" N9 V- x
  1011. INX# L# u3 H1 Y2 F+ S0 S
  1012. LDA PPU_Addr_L& w: J7 S3 ~4 A, \$ s/ i  d( q
  1013. CLC
    1 A! I, v) u' c- C( V' {: R. `
  1014. ADC #$20! m, q' C# M4 B, x
  1015. STA PPU_Addr_L- P9 k, K2 M5 J8 n& T- P4 l9 w
  1016. BCC PPU_Mode_Return_Cnt_End
    & T4 K8 v* w8 A# ?+ M3 J! h
  1017. INC PPU_Addr_H, J/ }# X" _3 B
  1018. PPU_Mode_Return_Cnt_End  ^2 s! J% h/ K- K9 |3 L' }" V
  1019. LDA PPU_Addr_H6 c% ~' y) }0 p+ e1 x+ k" A7 j
  1020. STA PPU_ADDRESS# e% A8 s. W' h: y! L* w1 y" Y
  1021. LDA PPU_Addr_L, F( j# u( S/ p  h. _
  1022. STA PPU_ADDRESS
    0 [. c( [8 C0 }# o, }( ^0 k
  1023. LDA PPU_Addr,X/ P$ z4 R# w5 n
  1024. TAY  t! x/ g9 N5 A7 _- w
  1025. PPU_Mode_Return_Cnt_Write
    6 `+ a) H1 [" ?) k9 D6 v6 {- Q+ P( n
  1026. INX
    ! w0 M. |/ l, l$ R  _& W
  1027. LDA PPU_Addr,X( z* F7 L7 H" w. G$ ]- c  k' b
  1028. STA PPU_DATA
    / U1 y! U! M* \4 g8 ?4 @; ~1 }
  1029. DEY- p% D, O3 B7 Z! g( M. ^
  1030. BNE PPU_Mode_Return_Cnt_Write
    - A, U* w; ~( B" r) y; F
  1031. JMP PPU_Proc_End. S1 a- o/ w; i/ q; a4 w

  1032. # J2 X* T7 _- l" b$ M! `1 d
  1033. ;------------------------------* p$ f. Z; ~5 O9 ]" m+ f9 W& f
  1034. PPU_Proc_Beg  ;处理开始# e, j$ j, V" q/ d, s% Y% @4 e2 R
  1035. LDX #$00
    $ U: d( y7 A" S2 s8 H* O
  1036. STX PPU_MASK3 \/ h  ~% U, X- K' S
  1037. ;------------------------------1 h7 }: M' D8 b1 ~6 u7 G
  1038. PPU_Mode_Select  ;模式选择2 ~0 C' L; Y0 }
  1039. LDA PPU_Addr,X
    # y1 K) \6 V3 J  x" A
  1040. CMP #PPU_MODE_CNT_CLEAR4 i& L- a! f1 k+ o: }
  1041. BEQ PPU_Proc_Clear
    2 f. J( Q/ [' y" Z
  1042. CMP #PPU_MODE_CNT_LINE
    + }  p& W" g4 x) v5 P
  1043. BEQ PPU_Proc_Cnt_Line
    . O, \* w- S" m& ?
  1044. CMP #PPU_MODE_CNT_LINE_NEXT7 A1 x3 I. o6 L8 b
  1045. BEQ PPU_Mode_Return_Cnt
    ' B0 w# M& L, i* V  L
  1046. JMP PPU_Proc_End_Write
    & Q' ]8 B. W+ ~" l  b
  1047. ;------------------------------
    9 M6 R$ L; R7 I, J, g( @1 W  t, z
  1048. PPU_Proc_End  ;单行写入结束# R0 x: X- Z6 Q6 V6 \- ?' _
  1049. INX8 {: C, Q; X- T8 @& h' H( r& K
  1050. LDA PPU_Addr,X
    ' z7 _+ {7 L+ L3 J+ l
  1051. BNE PPU_Mode_Select
    . C0 S) r4 T4 {& W; N) u. V
  1052. STA PPU_Addr$ n% e# r# t4 d* A5 H3 Q
  1053. JSR Update_Palette_Color
    . n' J# y/ X+ G& C8 d
  1054. + P/ T0 M: E0 e
  1055. PPU_Proc_End_Write
    2 T' t- L6 X5 x0 Y9 l
  1056. LDA #$00
    9 a9 b' C5 m; X# v5 z1 T$ f
  1057. STA PPU_ADDRESS/ u7 G9 a+ n4 S  O( `% P
  1058. STA PPU_ADDRESS
    : @. e3 Z( L/ r9 x
  1059. LDA <Text_Disable_Flag  p7 S! O* k' `
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    ( p$ @! O" R7 Y* q6 ?
  1061. STA <Text_Disable_Flag
    ; R5 P9 \9 S; {1 q) r3 o
  1062. LDA #Scroll_X
      O4 x1 Y1 t. T1 N6 s( A+ m
  1063. STA PPU_SCROLL. }7 E9 j) G& y; O' b6 r
  1064. LDA #Scroll_Y) l8 X5 u3 @, H# }% K
  1065. STA PPU_SCROLL
    6 ^# k. ~! v8 I
  1066. LDA Screen_State: f  K( t$ U1 E2 i! M" g5 i
  1067. STA PPU_MASK4 H- L7 d2 ?4 E* ^/ X( `
  1068. RTS
    2 f0 m, l, G$ Z
  1069. 3 w& B5 z% {' |& S7 |, H
  1070. PPU_Proc_Clear
    6 ~1 v( z! B9 L" k; h$ P2 Z, }# ~6 d, S
  1071. INX
    % |8 }7 ~1 H2 L
  1072. LDA PPU_Addr,X3 W8 [$ Z# p: b8 f4 F7 p' f9 I* u
  1073. STA PPU_ADDRESS! Y$ r) X% G1 m
  1074. INX
    " u8 o" J# k. d4 q
  1075. LDA PPU_Addr,X) W1 q0 a3 ~/ A" \
  1076. STA PPU_ADDRESS. w6 z) ]2 Z: p
  1077. INX# T$ {0 _6 Z# _: \
  1078. LDY PPU_Addr,X
    ) _$ W+ I+ V2 d7 K
  1079. LDA #$00& }, x$ z6 Y( O+ Q; o+ f
  1080. PPU_Proc_Clear_Write
    % z# u/ H% |" `! A  ~! d
  1081. STA PPU_DATA
    ! I4 w: P8 J, s
  1082. DEY" B' C* ~0 L/ w6 w
  1083. BNE PPU_Proc_Clear_Write( g2 B  t: F( ?/ B9 I" ~) V
  1084. JMP PPU_Proc_End! B6 V% e% B( I% R0 S0 g; T6 s
  1085. 7 A9 w' s/ p1 d0 v% ]2 v! r6 P
  1086. PPU_Proc_Cnt_Line
    1 p- x9 _! d: E5 d: R, {
  1087. INX
    - g( P' r0 {5 J+ `: X; F0 B
  1088. LDA PPU_Addr,X6 [/ `" |( |7 F) T  O, }
  1089. STA PPU_Addr_H
    0 W9 x) C- f- V
  1090. STA PPU_ADDRESS
    : r3 R2 F* h, h- w2 d
  1091. INX
      O7 b  j" s/ P4 t
  1092. LDA PPU_Addr,X! e$ Q4 F8 N" D; y0 q6 {
  1093. STA PPU_Addr_L  e  _0 q3 k) B
  1094. STA PPU_ADDRESS
    & z  x( p0 ~) h- N2 @
  1095. INX% W7 W. v9 \3 z" y* Z# K
  1096. LDY PPU_Addr,X
    2 q8 V( F! T" Y- P9 @. p
  1097. PPU_Proc_Cnt_Line_Write3 p( q1 W6 |' ~) z' K/ ^' s
  1098. INX
    9 e8 ]! J8 X$ H9 Y9 y8 k
  1099. LDA PPU_Addr,X  X, U) e  a0 Q* o8 M4 t
  1100. STA PPU_DATA
    8 r8 {3 j4 A( p7 e8 R
  1101. DEY: b/ t8 A* ^5 w, W. \" O
  1102. BNE PPU_Proc_Cnt_Line_Write% Q1 u9 L" \% e0 o- N/ e% ~, H
  1103. JMP PPU_Proc_End' r( D8 G1 `+ Z2 x

  1104. 4 f9 ~% w5 u. P# Q# B% n% r) Y7 K
  1105. ;==============================; |' _. L9 i* E% t. C" A+ n; d, d
  1106. HEX_To_Dec;十六进制转十进制
    + _/ P- p& s" X3 ?" J. P) ?
  1107. STA <HEX_Data
    ! J( _% X. U5 x3 E
  1108. PHA; m0 r8 S, w: @7 s+ F
  1109. TXA
    ( @. H2 M% P! }; Z( a
  1110. PHA
    . d8 p& u2 @; F
  1111. LDX #$00
    4 ^3 j/ p, ^4 M$ D/ T9 T% K
  1112. LDA #$00& u8 N. i4 n  z5 M' \9 c
  1113. HEX_Cln" A! [7 l$ ]; P* j: X* e1 ?
  1114. STA <DEC_H,X4 s4 Y, H: r, w- l; T" m, t/ ?
  1115. INX
    ) ^6 E2 v- [  W/ {4 e/ ?! `& e4 v1 m
  1116. CPX #$03
    2 D; i5 M5 G9 D1 q4 r; h, m4 V
  1117. BCC HEX_Cln
    ' O* S' \# M$ r, t/ u9 V$ Q5 i% V( v
  1118. LDA <HEX_Data. {  k+ }' s. X- Q
  1119. ;------------------------------1 S+ P6 A: G( Z4 {
  1120. HEX_1008 }# V  Q. |& G0 x( _* c
  1121. CMP #100
    8 \/ p8 L2 P) d1 O
  1122. BCC HEX_10
    4 H8 \% f3 v7 M) p& @7 T
  1123. SEC
    3 @  e$ n0 s5 a1 K% S8 E
  1124. SBC #100
    % M' s6 ]- |9 l6 ]$ H5 F
  1125. INC <DEC_H
    ( b- B% T* z& n  W
  1126. BNE HEX_100
    + e. C( t. ?8 J9 l! p: P
  1127. ;------------------------------
    + |* O" a8 S% H2 {
  1128. HEX_10
    / M4 P$ ~' H! u* U1 Q
  1129. CMP #10; Y6 i3 i7 x5 x6 p, N" Z
  1130. BCC HEX_1
      }' A4 ^) f$ M( K
  1131. SEC
    8 c! A" W4 S) v. D5 P  p! F
  1132. SBC #10" v1 c0 O% o- ?9 B
  1133. INC <DEC_T+ S! E4 M; I+ z; s
  1134. BNE HEX_10
    ' x5 W! n" G6 A
  1135. ;------------------------------8 z8 U  r$ e. \) M8 ~% K: D. l
  1136. HEX_19 I# v2 f6 U7 L: W3 K5 E  G
  1137. STA <DEC_L
    " T3 ]" d5 D! R% t  }, M5 [8 Q$ o
  1138. PLA
    * y: X' J7 O$ z, D, n& q) I
  1139. TAX
    6 P. T6 w7 @( O+ t, G
  1140. PLA! y3 D3 z$ ^; J- Z) E( `. V5 |: ?
  1141. RTS% G# g& M' z, S5 k
  1142. ! [  t) i+ \& n
  1143. ;==============================
    . i2 W8 z; u  L* Q* r' a/ b5 |
  1144. ;音乐曲目显示
    0 g- K$ T/ ]: z  i) Q3 y8 h
  1145. Music_Show- m, n! F+ K) B/ H
  1146. LDX <Music_Item_Cur
    4 b. Z  \- W, f/ _
  1147. LDA <Music_Cur,X& P% }# A- `/ n; f8 Y
  1148. CLC
    5 R. p: S2 u6 |" k6 L* l
  1149. ADC #$01
    0 P0 f7 Q5 k1 w) W
  1150. JSR HEX_To_Dec
    ; B: O" n( Y7 [+ a* p
  1151. LDX PPU_Cur
    5 q' ?. ~% e% k6 M
  1152. LDA #PPU_MODE_CNT_LINE
    5 h, n; B" P) V9 R9 ]8 C0 _
  1153. STA PPU_Addr,X
    : G; H; z3 Z% L8 }5 S+ Q4 i
  1154. INX
    1 |' N+ }9 @& L1 P: Y
  1155. LDA #HIGH(Play_Index_Pos)
    ' U( p0 B) v0 g  C
  1156. STA PPU_Addr,X
    : W0 _* k+ i9 P% L- E/ o
  1157. INX
      @, t6 k1 D0 z7 t( R% ?, C% z
  1158. LDA #LOW(Play_Index_Pos): @( T9 ^, p$ k) w( }
  1159. STA PPU_Addr,X
    ' d( c4 ?6 Y' p- A: E2 r/ d( b4 K
  1160. INX
    8 C* K$ f% `; J
  1161.   z8 n! \2 p$ b6 [& Y2 ]7 P$ B7 P' g
  1162. LDA #$07
    - h, b5 E9 u- D; l
  1163. BNE Music_Show_Length
    ' D* v/ f* Z- g) e8 u

  1164. , j* V0 m  a" J* {3 S
  1165. Music_Show_Length
    3 q1 i/ U7 Q* `/ ~
  1166. STA PPU_Addr,X/ g1 C. Y8 M) r% K/ ~
  1167. INX
    4 z% t/ V1 r0 C
  1168. 3 ]; c+ U5 O2 h" k0 v" Z* k
  1169. LDA <DEC_H
    6 d7 z3 A! U4 w
  1170. ORA #'0'
    9 b9 [1 W" p2 ^. G1 o
  1171. STA PPU_Addr,X
    + B9 R( W+ a4 N% l
  1172. INX
    . \. @- ^! p- `- N$ |8 K& x

  1173. * p/ z3 d; A& V4 I( t( ?
  1174. LDA <DEC_T
    4 g- x9 R; `4 e! m. ?! q
  1175. ORA #'0'# D; Q& L* m  t; y
  1176. STA PPU_Addr,X* u6 m. _' j) G% c. ^' o) w
  1177. INX
    4 P% L: J5 k# {- H# d
  1178. 7 x9 A' H, M" V* q& Y: U- W
  1179. LDA <DEC_L
    1 A/ o+ Y7 ?* _/ ]
  1180. ORA #'0'
    & r: Q0 j$ n- ^, C
  1181. STA PPU_Addr,X' f  ?( l3 t0 j' ?0 L1 j" o
  1182. INX: W8 @7 k- i- }) F  [" f/ `% a" q

  1183. " O, d; `: s9 Q7 g4 B
  1184. LDA #'/'5 }4 q5 i/ n" {5 L& ^  M2 K
  1185. STA PPU_Addr,X
    # Y5 `; k8 Q4 B) T4 [
  1186. INX
    1 i- L- x; g$ m, o
  1187. Music_Show_Total. B* C1 E3 A( j4 R; d: O" @
  1188. LDA Music_Total/ ?  Q$ a2 C3 C) {2 n9 D: L
  1189. CLC1 \: P5 k# d; r7 k; \  Y! d, i
  1190. ADC #$01
    & p; d2 ]  O; ^: P5 |
  1191. JSR HEX_To_Dec/ M, F9 Y1 j. v  L8 }) T8 S6 B
  1192. - Y( `* J" K6 v! C7 ?- c
  1193. LDA <DEC_H  K0 Z2 I/ m5 |% H% T
  1194. ORA #'0'$ V: p( i! h% T+ E) I
  1195. STA PPU_Addr,X5 H+ N% y* y8 u6 e
  1196. INX  |/ u% r0 I: S0 J
  1197. ; C1 Z$ B  m' _8 M4 L2 P( ^
  1198. LDA <DEC_T3 a* Y  p# u& ^- @" G
  1199. ORA #'0'
    $ ~2 U1 N4 l0 J5 K! o
  1200. STA PPU_Addr,X
    2 e3 r  f- U3 P
  1201. INX
    0 n8 M; C3 D* s% {' f% {6 B

  1202. - B$ s3 }  o0 _0 s( \+ q- e) G
  1203. LDA <DEC_L1 _" i$ z$ Q# t7 f+ v
  1204. ORA #'0'7 \- c( q* }- ?, T2 v" y
  1205. STA PPU_Addr,X
    ' F, Y/ S- x0 U) }; S# T
  1206. INX
    . _; w+ p! `2 m' N' B

  1207. 8 A* I/ ^: J; Z8 P
  1208. STX PPU_Cur0 v0 |" Q  `# R2 k
  1209. Music_Show_End4 i; Q- I4 o% @, b# d$ j1 e. X7 z! N
  1210. RTS7 E! k' s& Y; J% T* h

  1211. , C: [( Q9 g- h* o. L
  1212. ;==============================
    ; o: u  z6 N$ |# X4 l
  1213. Time_Show;播放时间显示
    6 y4 o# t8 T1 W$ P; p
  1214. LDA <Text_Disable_Flag
    8 l& D& t: I' V- f0 \$ E
  1215. AND #TEXT_DISABLE_ITEM
    , B* i7 }) E+ u, k& \  O9 T' I5 U
  1216. BNE Time_Show_End+ J2 E+ N9 e" {
  1217. AND #TEXT_DISABLE_TIME) q  e& \0 m: a: ~6 d# {
  1218. BNE Time_Show_Enable2 N9 k" Z4 J0 L
  1219. 3 o+ O4 w( d. b" g+ ^
  1220. LDX PPU_Cur
    3 w$ A  O. v* ~" X
  1221. LDA #PPU_MODE_CNT_LINE% R+ [8 _$ O( R" h9 Z
  1222. STA PPU_Addr,X
    ' c' O+ |8 L& D$ C) ~" A! V: C
  1223. INX
    / u2 c5 d: p, f: w( R# q8 b! {
  1224. LDA #HIGH(Play_Time_Pos)# d5 v) z7 ]& m7 T9 |9 M% t
  1225. STA PPU_Addr,X
    7 v2 f4 L1 s! i! I: Z
  1226. INX
    + y/ e# o( i. X& j% f. _3 O
  1227. LDA #LOW(Play_Time_Pos)' C+ H  l$ }0 P6 Z
  1228. STA PPU_Addr,X! t9 ]6 v6 T3 J3 ^# s+ ^
  1229. INX
    ( [+ G5 y3 R& b& W5 v5 J
  1230. LDA #$08
    # s5 Y7 w. k7 x4 E
  1231. STA PPU_Addr,X
    9 `7 `. }- Y) v
  1232. INX
    + u+ e0 C% V! c+ `# a+ Y8 P
  1233. Time_Show_H
    2 r0 ~' ]$ k4 @( R
  1234. LDA <Time_H1 O! u: x% ]2 y
  1235. JSR HEX_To_Dec& H3 v; ?* V" ~, h% N& |3 m2 X
  1236. JSR Time_Digit
    6 Z8 V# E/ u, J* z2 M. u8 x& N
  1237. LDA #':'  ~: ]0 K  |1 B2 g0 f- A. m
  1238. STA PPU_Addr,X
    5 b3 E' `3 W: M5 f% i  ^, u. H
  1239. INX7 i' b7 G$ Q- ]$ F0 f
  1240. Time_Show_M
    1 Y: i$ ~6 ~4 V3 P* m( o- B! r" Q
  1241. LDA <Time_M
    % Y$ Q7 F) x1 w, I
  1242. JSR HEX_To_Dec
    . O1 M, R& U2 v3 P7 {, u) @5 g
  1243. JSR Time_Digit
    - S% }, S. J$ V* T
  1244. LDA #':'
    3 X. b0 M1 d" k! `0 O" ]
  1245. STA PPU_Addr,X) m# G' K% a. j9 u' s, ~7 Y7 R
  1246. INX" [9 c7 ]. F- W
  1247. Time_Show_S
    $ _4 c! u* |3 i% E, X4 t
  1248. LDA <Time_S' o" ]8 d4 i0 o
  1249. JSR HEX_To_Dec
    3 J) M* a. i4 c- y$ N1 ]+ K
  1250. JSR Time_Digit% {2 D# R; h( H' s" E+ T: }
  1251. STX PPU_Cur
    3 f) o3 O; L) ?, C- o/ f
  1252. Time_Show_Enable
    ; X+ N) V) Z" Y3 T  I. f9 }
  1253. LDA <Text_Disable_Flag/ z' p+ ?  {; s; w
  1254. AND #TEXT_DISABLE_TIME ^ $FF& C3 g& ]' N) y" [. m
  1255. STA <Text_Disable_Flag
    9 ^8 k/ |9 W  I2 S, B  h
  1256. Time_Show_End
    5 H/ R# x! y' k
  1257. RTS
    ( O' k5 U% j# I* a/ o

  1258. + W' W/ i8 F1 F8 x' E7 Y- t' t
  1259. Time_Digit
    2 Y1 I( Q0 t: o  a
  1260. LDA <DEC_T0 i* o4 u; q+ E3 b  u( r3 U, Z& j
  1261. ORA #'0') f' I- I  K3 `' j: }, j3 L- P1 p
  1262. STA PPU_Addr,X
    ) u: u$ G, @2 l1 u
  1263. INX
    ) A; X, D) I& H! e" B0 w, B( C
  1264. LDA <DEC_L
    - k: T; R2 N, W
  1265. ORA #'0'
    % Y' Q) z5 i4 t8 ^$ p6 Z
  1266. STA PPU_Addr,X; R! z9 c7 t* {5 g$ n. r
  1267. INX# L. c7 t+ H! L& M
  1268. RTS: t& X( R+ ^, Y8 w" e

  1269.   d# O/ P7 B9 Q' l" O
  1270. ;==============================
    ' `, {, k$ e6 P
  1271. Time_Count;计时" T; f( X( U! {7 g! y/ d+ P8 s
  1272. LDA <Music_Stop_State& H, y* I6 r1 y9 |) ^! e/ B  d
  1273. ORA <Time_Wait_Cnt
    + a: [: k5 B/ D# q# g
  1274. BNE Time_Count_End/ v/ d  ]( c+ k+ r& ?
  1275. INC <Time_Cnt
    6 q, G6 }& }2 T( ~
  1276. LDA <Time_Cnt
    # S& T2 i2 L; w2 T) d. ^; b
  1277. CMP #60
    # F# e( k; N7 {2 Z! r
  1278. BCC Time_Count_End
      |2 F# }% Y6 F4 g4 h7 H
  1279. LDA #00
    + f6 e6 s1 F+ c4 L
  1280. STA <Time_Cnt
    ; M- S' j; a8 G% ]& x! i- H
  1281. INC <Time_S
    7 H) F8 m& K2 k% B% M5 }& R

  1282. 4 I/ Z  c, N7 i$ @  F
  1283. Time_S_Cnt
    : S' x* H% d3 X0 J
  1284. LDA <Time_S9 C: Z" \( B' y% `" g% ^
  1285. CMP #60' ~! V# i' c, R4 c
  1286. BCC Time_Count_End, y! I" T; k5 x( H6 \& M) Q
  1287. LDA #00' Y( e1 z2 B1 p! H/ H
  1288. STA <Time_S
    7 w( `2 j$ ^% h2 h( Z$ \. J0 c- f
  1289. INC <Time_M
    ' H( A) _/ L9 O$ o
  1290. 6 s* q4 z! m' f# i
  1291. Time_M_Cnt. \' M; m. c+ T6 ?+ X
  1292. LDA <Time_M
    0 t& p. P+ ~* u6 z7 K# E
  1293. CMP #607 M7 W) Q3 |: j% p2 f
  1294. BCC Time_Count_End$ N) \4 }0 }- r# T! W) m; p
  1295. LDA #004 {  _. h* y$ S+ w$ n" m" v/ [* d
  1296. STA <Time_M
    2 W$ _  c6 r( y0 T' [4 U
  1297. INC <Time_H
    / G# h6 r+ Q" k  l& O
  1298. 3 N/ t' n' \/ j( g* Q  X2 X6 \9 ^% N3 m
  1299. Time_H_Cnt- K8 q3 z8 x% ]0 ~' P# v/ S- L& s
  1300. LDA <Time_H- a. R. v0 k) G! I. D" Q
  1301. CMP #24+ o( m1 e) Q  I
  1302. BCC Time_Count_End
    # @( B* T: G1 o2 |! s& ^) |% x# Y3 Z
  1303. LDA #00
    9 v6 g! l% @  b6 R& P
  1304. STA <Time_H! P& a+ b  ^* j6 k- N4 E

  1305. ' o0 c9 t6 L# B5 P
  1306. Time_Count_End7 p% X5 P, t$ [3 g- W8 s
  1307. RTS
    " u! @. p5 Y7 W" a

  1308. 8 ?' O" \7 F: N# f
  1309. ;==============================
    " S+ v) ~$ Y% J
  1310. Time_ReSet;播放时间重置
    & G0 {: `) Y3 z
  1311. LDA #$000 ^3 N# N. t, T* @
  1312. STA <Time_S" V' ?1 j7 u) ~8 G$ Q4 E) [6 r* G
  1313. STA <Time_M # z$ }; n; H' n8 G- ^
  1314. STA <Time_H" ?5 u5 y5 @- o! m; h5 _* n" U
  1315. STA <Time_Cnt. H3 d' z* `" d
  1316. RTS
    9 A% I( [7 A4 K% g% ~2 H
  1317. - k6 e; o5 b' k: c1 C! ^1 ?
  1318. ;==============================0 g1 @3 l/ L5 j2 l4 s( N1 p
  1319. Music_Bar_ReSet;音乐条重置: X! x9 A6 {" p9 L# a
  1320. LDA #$007 Z+ O: F& T' [8 k3 r" ~8 u
  1321. LDX #$00' e. _' L7 Y; ^. U" Q: L6 B" N$ O2 ?
  1322. Music_Bar_ReSet_Set/ l! _! M* J* L4 s
  1323. STA Sound_Bar,X" h# S* y" P4 f/ S8 ]' W
  1324. INX
    6 v) a: Z' J" a% L& K$ \$ J
  1325. CPX #$100 c) X, T. A3 x0 h4 {8 g# U
  1326. BCC Music_Bar_ReSet_Set
    - C! ?/ i- r8 c, o2 c
  1327. RTS# m9 y2 W- ?- I9 S. U1 B% ^
  1328. + g9 F% f1 ]8 t% D; @" ?. l' l% b
  1329. ;==============================
    : X* M- O, j5 D
  1330. PPU_Data;PPU数据写入
    ! R2 j% B2 e7 M7 }4 F
  1331. STY <Data_L
    5 @' {4 K+ Q( y8 F' w5 r
  1332. STX <Data_H' C# t& L# h" z! A2 F
  1333. LDY #$FF/ u/ I- }1 F7 w6 e! o8 ]" Z
  1334. LDX PPU_Cur
    * A  ?( v5 p+ {4 Q, s3 Q; a
  1335. DEX
    & d# D3 y! H/ F* R, X/ f  J
  1336. PPU_Data_Beg
    + w$ Y5 n/ \& Z" z# i
  1337. INX
    $ v  o" m9 E8 q6 G5 e! {- J/ b" W4 i
  1338. INY* U6 g. h+ h& x2 e! g+ l
  1339. LDA [Data_L],Y# w+ I$ q% v4 t3 C
  1340. STA PPU_Addr,X/ {; X* L! G# y( _0 u
  1341. BNE PPU_Data_Beg+ h" u$ U9 |& I
  1342. STX PPU_Cur
    : b* x! p4 I( x5 p4 |$ i* _
  1343. PPU_Data_End
    8 t3 Z0 M9 Y9 z* D; f- O2 P4 t
  1344. RTS
    + K- [/ L/ Z! ?& q6 X* M9 a
  1345. 0 j% f+ E/ k% n" ?( q
  1346. ;==============================
    2 Y; v$ y) Q, _: n& y. }
  1347. Music_State_Show;播放状态显示5 z# a6 }- J! r  Y1 V
  1348. LDA <Music_Stop_State
      @4 _5 Z. o1 |$ f: T
  1349. BEQ Music_State_Show_Play
    " @. ?+ j1 ^8 A8 K& p
  1350. Music_State_Show_Stop8 @; b7 w7 P+ D/ _
  1351. LDY #LOW(Music_State_Stop)- s8 M% O* m- E) `! i
  1352. LDX #HIGH(Music_State_Stop)
    $ G1 {. [9 ~, J& l& M
  1353. JSR PPU_Data
    6 d! l) N% Z) Z
  1354. RTS
    . d' X9 D8 \- b& ^$ a$ y
  1355. Music_State_Show_Play
    6 E+ H4 o; O. \# \
  1356. LDY #LOW(Music_State_Play)1 f. k8 X7 ?& r% Z- @) C4 Z# L  S1 Q
  1357. LDX #HIGH(Music_State_Play)) K9 [: K/ w# c. a! N& R8 ^6 {
  1358. JSR PPU_Data9 Y$ N! Q  ?! _& H
  1359. RTS
    * C( J$ d" f& o: Z/ }* K! H
  1360. ; j% ?# |) U/ V7 M
  1361. .IF SOUND_BAR_SHOW_ENABLE
    4 m1 |' k: K) O0 O- K" {
  1362. ;==============================( E& _6 ^* h$ z5 w+ o3 T
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    6 i& l0 z3 v( Z! T
  1364. LDY #LOW(Sound_Bar_Text_Data)! }6 V9 h: x) S9 |# B. D2 A
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    3 X" ^1 M) d  V( ?# ^
  1366. JSR PPU_Data
    " f) ^: C1 a4 `* w
  1367. RTS
    7 X1 ]  ]" {! ]) R8 `; {8 {% p8 ]4 d
  1368. 3 o& f4 n  |6 m' T+ X( N
  1369. .ENDIF& k- y0 G/ h1 D- G) _" {
  1370. , u4 F8 A* t9 a2 z8 `
  1371. ;==============================
    6 i- z* }2 n( _( C, H% I" n
  1372. Set_NameTable_Attributes;设置命名表属性
    ! J0 b, p7 C& p+ _1 ~8 l- K5 a6 U
  1373. BIT PPU_STATUS
    ; V- h% t2 v9 i5 k* u4 @  W
  1374. LDA #$23' }2 n2 m8 U  s, l" `& v* b
  1375. STA PPU_ADDRESS
    ! h! k) \! N# G/ G; n1 ]! p8 z0 H
  1376. LDA #$C0; ]. i2 S$ u& E
  1377. STA PPU_ADDRESS# m" w! T% R" M& f; j
  1378. LDX #$00
    . g, R- x5 _! f6 H  H
  1379. Set_NameTable_Attributes_Write$ H! `9 J* x) a4 d, W8 I
  1380. LDA Palette_Attributes,X. U) t) D& K) _4 p! |1 ^, Y# _
  1381. STA PPU_DATA5 k+ m, N" u" a' R. U; I
  1382. INX
    ! _& V" i; x7 ^( U8 c9 f4 ^
  1383. CPX #$40
    1 S, ^! I5 Z3 S) k. O9 U" p( n0 v
  1384. BCC Set_NameTable_Attributes_Write4 n  u" h) p8 }# q1 v8 B
  1385. RTS
    & {- N+ e% x* }: ~# i2 X- v" H: ]4 w
  1386. % @5 }0 \; R5 D( E
  1387. ;==============================
    $ [. {' ~# Z0 u) x; i& K# F( _8 }
  1388. Set_Palette_Color;设置调色板数据
    " w. T" T  E5 G
  1389. BIT PPU_STATUS: C2 P/ e6 V8 Q7 Y
  1390. LDA #$3F
    9 K( D! [5 ?( I% s2 g7 G
  1391. STA PPU_ADDRESS5 [0 n+ a9 f* F% m, y# V
  1392. LDA #$00/ x0 c9 Q$ A. r! T2 ^; R+ d
  1393. STA PPU_ADDRESS
    9 s( B9 B+ F0 P- \5 R9 ^. f
  1394. LDX #$00- N- B' n; G+ K% h0 @
  1395. Set_Palette_Color_Write
    / m- x+ K+ @( j9 g
  1396. LDA Palette_Data,X
    - i  k3 \6 h  d/ t% Y
  1397. STA PPU_DATA& k* B& S; U! ~
  1398. INX
    6 D( T1 O% t% e6 v& G* y: \/ Q& w
  1399. CPX #$20: v1 F" B( m2 G
  1400. BCC Set_Palette_Color_Write+ S+ F5 H' Y; B! H8 i3 j) H
  1401. RTS9 o5 m3 L4 K+ Q0 J6 I5 h/ J+ z! Q
  1402. 0 v1 v. E- d3 k$ c2 R3 i! f
  1403. ;==============================+ w& E, z9 l! F' T- I
  1404. Init_Palette_Addr;初始化调色板数据% R4 }2 W3 Q5 Z0 f- {- G( @" U
  1405. LDX #$00
    8 |- C7 |2 E( |7 t9 P0 L+ m1 u% ~' b
  1406. Init_Palette_Addr_Write
    ) R/ }: ]% H& M
  1407. LDA Palette_Data,X
    % A: F6 q1 ?  V; C: k1 L
  1408. STA Palette_Addr,X: r; \! H/ z/ z- |! z. D
  1409. INX
    , B* o7 v0 p% l; v: K
  1410. CPX #$20
    / U7 i4 B& ~% T- ^
  1411. BCC Init_Palette_Addr_Write. C/ [+ c) t" J9 q
  1412. RTS' J3 Q8 ^4 E# @3 D7 N

  1413. ; C* r; |6 n! w& u9 o  \& o
  1414. ;==============================8 s) Y; e7 s8 S$ X9 j& C
  1415. Update_Palette_Color;更新调色板颜色
    ' v* |( f1 I+ u% @
  1416. LDA <Palette_Update_Flag: @* ?- h/ J4 M3 @
  1417. BEQ Update_Palette_Color_End  s% e- h* [5 I
  1418. LDA #$3F0 y* D7 b( m& X3 X8 ?& Z& Y! e8 E
  1419. STA PPU_ADDRESS
    ; R+ b/ c/ I5 @0 J3 }( P! u
  1420. LDA #$0C
    * Q- W' ?6 k3 A7 {" F1 p
  1421. STA PPU_ADDRESS1 B* U; i0 |2 G, e5 X. r( Z0 t
  1422. LDX #$0C; `  m! P* g; U9 e2 T6 G. Q7 h
  1423. Update_Palette_Color_Write
    ( Z, h7 x9 C! r. T% d6 R7 [
  1424. LDA Palette_Addr,X5 }. d) e  _1 V) i& q1 J$ p
  1425. STA PPU_DATA; p* u1 b$ R8 f6 d: w" c
  1426. INX
      U6 A) t% b' _  S& ^. S
  1427. CPX #$14
    ' ~# r( b$ y2 O# ]
  1428. BCC Update_Palette_Color_Write
      M  Z; U6 A- J; U" C
  1429. LDA #$00( v4 q3 V  o# z; r0 L2 I0 f0 F
  1430. STA <Palette_Update_Flag
    # {, s0 h  @8 k7 `/ U  X( L3 P
  1431. Update_Palette_Color_End
    ) ]" M" Z& L9 k& }9 Y
  1432. RTS
    * s& J8 l, J$ O) \0 w. t5 ]
  1433. ( |- c2 p' C! P' L
  1434. 2 W2 k* M* H% ?: X! b7 f
  1435. Update_Sprite_Palette_Data2 _& w- b) ^' }" m+ D! w3 Q; N7 k
  1436. .DB $21) s0 `: V6 R2 X2 S8 V" G
  1437. .DB $21
    ' a7 i% x  Z  G
  1438. .DB $11( P" P1 z! H9 L/ G' O# b% n& D
  1439. .DB $01
    : [8 E- U- j6 W/ S
  1440. .DB $01( Y% Q4 q! H7 D6 W0 _
  1441. .DB $11) D: E9 d" f- ]- L" B5 ]5 d
  1442. .DB $21' W0 e; E6 T: y8 X6 w" a
  1443. .DB $21
    " b" y6 [; d) T, Y: d
  1444. .DB $11
    ) M1 _6 j3 A8 c
  1445. .DB $01- w% L- J* I1 k9 v5 ~# d, P' I
  1446. .DB $11
    5 h( ~6 [) ~! d, _8 E
  1447. .DB $21
    , m- T& ^# M8 r
  1448. .DB $21
    , N$ U9 V$ e" X: a" t2 ^
  1449. .DB $11/ z# t1 o1 _' i. S. [! ?
  1450. .DB $01
    / D4 g8 E/ U1 G' P: Q
  1451. .DB $11$ ?/ r9 Y. `: B8 _
  1452. ;==============================) ~6 ]2 o7 R7 s; ~
  1453. Update_Palette_Data;更新调色板数据' r. _, c4 Q" f
  1454. LDA Nmi_Time_Count& O; ]; x; v3 o, c
  1455. AND #$08
    9 y  a9 u- P6 q' F$ S
  1456. CMP #$08
    ) `% C" I) F% x3 n, x. E/ t
  1457. BNE Update_Bkg_Palette_Data
    - J* @. F! t. P/ T
  1458. , N, x+ _2 _0 j0 p4 p/ M
  1459. Update_Sprite_Palette_Data_Set
    " Q; T5 r$ @$ y4 d- T
  1460. LDA Nmi_Time_Count
    7 l& v' a1 y4 o2 C  U- m% J
  1461. LSR A
    / f2 C6 m( d, e" J
  1462. LSR A
    ' o' c5 T2 c% H( r4 x
  1463. LSR A- B4 ~! O  g& N! R# M. h( V
  1464. LSR A
    2 k8 C/ R0 b* R7 o% f/ G
  1465. AND #$0F! }6 D* `7 N3 l& n
  1466. TAX0 s+ B! T& @5 d2 a' ^
  1467. LDA Update_Sprite_Palette_Data,X$ N: e6 t- d  I+ Q+ u; ~* [
  1468. STA Sprite_Palette_Update_Addr
    9 c) L2 s2 p7 \1 N! R
  1469. LDA #$01
    6 B' h! }1 ~- ^% U  D
  1470. STA <Palette_Update_Flag9 ?5 o9 V, e5 ?+ d, j& s* M" A+ _" A

  1471. % A2 I, b- {+ }3 [8 y6 ^4 n5 Y4 {
  1472. Update_Bkg_Palette_Data3 W" x: ?3 z8 ^3 q! f
  1473. LDA <Text_Disable_Flag
    & |8 U3 M8 X  z1 k2 G9 s" L! d
  1474. AND #TEXT_DISABLE_RAM
    5 `$ C/ ^! _$ r' Q( d: l1 y" ^
  1475. BNE Update_Palette_Data_End
    4 [# K: S2 R3 s7 e1 J. F7 R- t
  1476. LDA <Music_Stop_State
    $ O! H/ [3 E* }5 J8 G3 c
  1477. BNE Update_Palette_Data_End
    + G" j! C! p3 w. \0 j
  1478. 1 f" p: @. Z' W! R
  1479. Update_Palette_Data_Check5 V( x1 C" [( X% Y, [
  1480. LDA Palette_Wait_Cnt
    9 ^/ L% A/ l9 U5 m2 K
  1481. BPL Update_Palette_Data_Check_Over
    , C! Y5 E1 T4 \
  1482. LDA #PALETTE_UPDATE_INTERVAL
    5 z# M) e9 p0 w/ O( |/ O- N
  1483. STA Palette_Wait_Cnt$ U' u, q7 P4 C4 f
  1484. Update_Palette_Data_Check_Over
    5 P5 g  d9 g! V; R
  1485. DEC Palette_Wait_Cnt9 C9 V( e. m$ |' \/ X
  1486. BNE Update_Palette_Data_End  \  p+ ?! O3 ~3 O
  1487. - a2 [. `  T6 }0 W6 ~9 H6 ?4 v
  1488. LDA <Text_Disable_Flag
    ; R  I( e$ \  M' |5 q( w4 D9 t+ x
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    ( Y4 x1 L: @* W  ^! B2 Q
  1490. STA Text_Disable_Flag; w% e6 T% f* T& _& Q4 @$ v
  1491. INC Palette_Update_Flag! D( }0 p8 I# s. @9 E: q
  1492. " Q+ i' W8 c: ?9 z) T5 X! o
  1493. LDA #PALETTE_UPDATE_INTERVAL
    7 F( B# X2 |3 A; J& j6 M7 s
  1494. STA Palette_Wait_Cnt
    $ c4 R4 g6 ]+ h: V# C8 X' L
  1495. ' C$ ~7 x% C- j) y1 k! X
  1496. LDA Bkg_Palette_Update_Addr
    3 s- `# u% E9 x+ N- ]
  1497. CMP #PALETTE_UPDATE_MAX
    9 A" P3 J4 D% P5 K" C" s
  1498. BNE Update_Bkg_Palette_Data_Set, F5 M9 w9 w- @4 u
  1499. LDA #PALETTE_UPDATE_MIN - 11 n- A9 s$ X3 @! `! F
  1500. STA Bkg_Palette_Update_Addr1 Q# ?1 I# J- v6 T2 G/ u) h
  1501. Update_Bkg_Palette_Data_Set3 ~) y8 I. Z' H$ R' B* f9 ]
  1502. INC Bkg_Palette_Update_Addr5 Z5 [: n, {/ V; R% R$ e# A9 @; o# r9 ]8 ^4 J

  1503. 9 Y3 N. e2 E! u" d
  1504. Update_Palette_Data_End/ l( M$ z' p& U* p( f
  1505. RTS7 s7 o% g) W# h. T

  1506. ; V* @* V: K- d: c5 [8 m
  1507. ;==============================
    # y" K9 Y1 P! P
  1508. Show_Music_Text;显示静态文本: W, Z& G) Z3 C: u+ G% w3 ]1 F. c
  1509. LDX #$00  w9 \  ^- Y: _2 H
  1510. Show_Music_Text_Set. c! V& t% K- C; E
  1511. LDA Static_Text_Data,X
    - G! y, L( p7 K0 z6 t1 t( S
  1512. STA <Data_L/ Q# S. _' Z. c. Z6 \
  1513. INX) ~$ R4 ?  b. `9 Z) H% q/ b
  1514. LDA Static_Text_Data,X
    / L, a4 X* G- q3 \# N
  1515. STA <Data_H
    0 ]& Z  f' D1 H& @" T7 ]
  1516. INX
    : T  O( f% C% I! R  X
  1517. LDY #$00
    2 z: J6 m2 `1 c: U; x9 T
  1518. LDA [Data_L],Y4 k; C* S9 o. S. i. s
  1519. STA <Data_Cnt
    , e* U6 m8 i# B& Y& A
  1520. DEX
    3 i! f- w! F4 A* j# k9 Y
  1521. DEX; Y$ q2 U+ O1 t
  1522. LDA Static_Text_Pos,X
    # x3 k1 }; `( z9 f
  1523. STA PPU_ADDRESS6 h4 c# x7 b) f5 w: f% w
  1524. INX
    ) W2 e  H7 c' N* j" |* j* A+ X7 b
  1525. LDA #$20
    . f5 ]" K3 |% e$ ^; t
  1526. SEC
    9 r8 |: {; I; w% n
  1527. SBC <Data_Cnt; R% E6 ~9 G$ _: v1 T! x1 K! E
  1528. LSR A
    + l) U* N6 [; w! j# l
  1529. STA <Data_Buf
    5 h9 o& b0 O$ u: V
  1530. LDA Static_Text_Pos,X  |  ?$ j9 F" B
  1531. AND #$E0
    % y* u" c; r! t9 W# U
  1532. CLC" H4 ?# s& [* Z, g
  1533. ADC <Data_Buf* a4 k  K& U& Z# m
  1534. STA PPU_ADDRESS
    & [$ I8 C5 D$ B9 v- r
  1535. INX
    5 Z$ h2 C+ D+ W
  1536. Show_Music_Text_Set_Write; `0 L7 Z7 x8 e: T
  1537. INY; ~: Z" b$ d! R
  1538. LDA [Data_L],Y4 J! H4 R# S) T* n( b# @
  1539. STA PPU_DATA
    % a( D9 L" ^% f% \. H- ^6 s& K
  1540. DEC <Data_Cnt0 G7 a5 T8 \- W# v) V6 t; E
  1541. BNE Show_Music_Text_Set_Write
    + `" ~; h4 |+ h
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos' R/ Q4 z  t4 e0 t$ e
  1543. BCC Show_Music_Text_Set
    7 I4 r% s. e  a
  1544. RTS
    / K# X5 s- Z5 U+ `5 }

  1545. 3 {, [* V/ X* B8 r+ l7 c3 n
  1546. ;==============================
    : o+ [7 }/ B' }2 D% V# {' {, _
  1547. .IF Track_Name_Pos;显示曲目信息7 S! V2 V& A# U' b! Q' d

  1548. : h6 v& O) s  y- D/ S0 u
  1549. Clear_Track_Info
    7 Y1 h/ ^7 F; I! S( N$ `( L/ Y; V1 q
  1550. PHA
    * k' W% L1 U! x+ B
  1551. LDX <Music_Item_Cur
    - Y0 e0 N. q8 ]$ c
  1552. LDA Track_Name_Addr_Flag,X
    3 [* @! c& a' j7 q
  1553. BEQ Clear_Track_Info_End_Ex
    ; B( F) D& b& w6 k
  1554. PLA7 @2 V1 [# f3 ?3 S3 g% |+ p
  1555. * k( v  i8 |% T: \
  1556. LDX PPU_Cur
    1 H( L5 z$ r! W; U5 X% p% U
  1557. PHA! B" U4 E8 g$ f( H& }$ W, t
  1558. LDA #PPU_MODE_CNT_CLEAR
    ! i" c+ N2 E7 Z4 F( n
  1559. STA PPU_Addr,X
    5 `+ W, w! t: S) _! ~7 z  A  J
  1560. INX# Q& _0 n& m8 T; U) d1 G
  1561. PLA. E0 r* m+ q$ F. @( E
  1562. JSR Show_Get_Track_Name_Center_Pos/ m5 Q. M- p# K6 D
  1563. STX PPU_Cur8 L  _8 m5 r. Q! Z: s3 y
  1564. Clear_Track_Info_End
    + C# ~4 f# A4 @4 V) \  R
  1565. RTS. e3 Z# g5 p5 D; P8 ?, k4 X2 r
  1566. Clear_Track_Info_End_Ex
    ! P5 r0 |3 a3 @) a3 V
  1567. PLA% ?; ^& |! N1 {2 s  E6 D: Y
  1568. RTS  R4 h. m- r& t7 g; o* d

  1569. 4 i, f- k& S+ O: ]: `* G( f
  1570. Write_Track_Info
    . `5 O2 F, H+ n
  1571. PHA3 b9 B& g2 J' N9 ^& [5 n1 T
  1572. LDX <Music_Item_Cur6 l0 l) f) k9 b
  1573. LDA Track_Name_Addr_Flag,X6 J1 v+ R& g, {* Q% T0 @2 \2 [/ g
  1574. BEQ Write_Track_Info_End_Ex
    " s' d9 o" N. {$ u. X5 `. i, M/ k- M
  1575. PLA
    " i2 H. L+ w1 y4 w" [. I) K( J1 N
  1576. " p$ H' H9 E8 n" i" b: ]# r4 H
  1577. PHA
    - z3 ~1 B2 M; Q( i: H7 F/ _! E
  1578. LDX PPU_Cur
    6 M$ e, [3 j( c
  1579. LDA #PPU_MODE_CNT_LINE
    0 N- d6 E% m+ w7 l9 F
  1580. STA PPU_Addr,X5 Y4 z, S: w9 o. D
  1581. INX
    / y. D: V9 {7 W
  1582. PLA% ~3 ~2 T) I- f. }% u) s  H  {1 M: r" p& T
  1583. JSR Show_Get_Track_Name_Center_Pos# t) D& X/ Y  b6 G
  1584. Write_Track_Info_Data
    % G) N; m  f5 v1 [! }
  1585. INY7 L! U5 z2 G( `: N) J! E# |
  1586. LDA [Data_L],Y
    - E3 ?5 b2 o- \% [
  1587. STA PPU_Addr,X
    . U0 r+ ?8 P6 }! u( j) F6 m) m2 D
  1588. INX
    ( ]* E& h/ W( e! A( z8 F
  1589. DEC <Data_Cnt! {, c6 f0 e4 s0 K. F: {
  1590. BNE Write_Track_Info_Data# z: K4 M! r/ J6 ?0 H( A
  1591. STX PPU_Cur
    $ _% K1 {  x* c4 O9 O7 |
  1592. Write_Track_Info_End
    , A2 j6 n/ W+ e+ G6 z
  1593. RTS
    5 o2 H' W% T- y2 ~% E! H
  1594. Write_Track_Info_End_Ex# ?5 [' K3 ^. X0 `5 {
  1595. PLA
    4 Q$ }  Y! n9 U" r, Q
  1596. RTS7 t& {/ L2 G. L
  1597. $ V7 h$ A7 c/ o6 Q
  1598. Show_Track_Info
    " Z+ R' u1 D& M! ~6 X3 p6 y  E
  1599. Show_Track_Info_Clear
    ) @3 E- r- |0 P5 z$ p# q
  1600. LDA <Music_Last# b% d( T8 D+ ~+ j6 G8 b9 [9 R
  1601. , X" e# _9 |4 E
  1602. JSR Clear_Track_Info" F, I: e# p) a; O, x0 B

  1603. ) q3 @& x; x) e6 A6 G+ _
  1604. LDX <Music_Item_Cur
      Z# n0 s  A1 E* w8 }
  1605. LDA <Music_Cur,X5 u. v: U- {4 h4 W3 a) C
  1606. JSR Write_Track_Info
    8 {& U6 ~8 F1 c" G' G# H
  1607. RTS
    " z$ s" G' \; G, W1 |
  1608. ' Z) x* k* G. o5 `) I. K$ W
  1609. ;==============================# @( E; i  }/ L2 x0 w" g
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置
      t  X  y8 g! r7 k8 B: r
  1611. $ E: ^$ i2 [9 N- S6 Q+ \
  1612. ;取出集合名索引
    $ z& M9 Y+ L; v8 O$ k5 Y
  1613. PHA
      O! i6 z" g8 `7 ^" C; }

  1614. ; j9 R( i7 T( z/ t1 P
  1615. LDA <Music_Item_Cur
    6 M/ w( R. R- }* D7 m
  1616. ASL A' m( P2 Y/ ^- `+ f. \: z$ O
  1617. TAY
    : _* S1 {6 }" v: M: v
  1618. LDA Track_Name_Addr_Port,Y
    . l9 R% W* S& e2 z6 u! _
  1619. PHA4 H; p# r" _+ O1 F6 L4 W
  1620. INY
    * [% @( ]% P) Q7 Q& N- G
  1621. LDA Track_Name_Addr_Port,Y
    ( p+ Y+ V$ _; M0 w& k2 _
  1622. STA <Data_H3 B7 n2 \$ [6 c, @  P( K3 B$ X( F
  1623. PLA
    * d2 l$ h  q  \3 y6 ^$ t
  1624. STA <Data_L
    ) R* Y8 \# {/ g0 F" b

  1625. 2 J9 D" L) W. ?2 c
  1626. PLA
    3 R/ b- b% q0 @' T1 O
  1627. 8 Y5 e8 U  J/ k* N& w2 `
  1628. ASL A5 M7 ^" \8 c1 N6 C+ k# w
  1629. TAY
    ! w2 q: H6 x; e) \/ W, U7 M6 W6 G
  1630. LDA [Data_L],Y8 N! g+ ?2 p5 u3 D( r
  1631. PHA& i5 I1 o2 \( D( B/ H0 _5 {
  1632. INY3 u" v4 \- Y" w3 U5 @9 W
  1633. LDA [Data_L],Y" w5 |3 j# M* Z, f: q* d' {
  1634. STA Data_H
    2 H( d! ?' S  u, x2 A. ], A
  1635. PLA3 v, e; i  |) W2 p- t$ U/ L
  1636. STA Data_L
    1 J8 o5 q. b3 u/ X  G' q
  1637. * ^8 s; M! i& ]+ Q" V( s
  1638. LDY #$00; f/ B0 I4 x0 G: _- {
  1639. LDA [Data_L],Y3 P1 y2 \2 I0 A: Y2 Y
  1640. STA <Data_Cnt& B1 S9 n) w0 J. a$ p  t' s  w+ A
  1641. LDA #$20& K' J, h$ Q$ ]1 D  m
  1642. SEC0 U# x& D# d3 T- W! p$ U; a
  1643. SBC <Data_Cnt
    ' X8 Y& t8 V: Y' d" E1 k, i/ t* s$ M' _
  1644. LSR A/ w, {* h9 ]/ ~  k4 P" _4 M
  1645. STA <Data_Buf; b5 z3 b( C2 r7 k; i
  1646. LDA #HIGH(Track_Name_Pos)
    5 X* M0 v9 t/ _) W
  1647. STA PPU_Addr,X" O/ W7 Q8 o4 X& ~6 H1 K
  1648. INX! A$ v5 V1 ]/ {( r! d
  1649. LDA #LOW(Track_Name_Pos)9 l5 B- E5 k, x1 |0 h5 Q) R
  1650. AND #$E05 k6 L  J' F, I$ O, T
  1651. CLC
    ; E- l' L1 [6 N" i. {
  1652. ADC <Data_Buf' z4 h  F' E( d8 X
  1653. STA PPU_Addr,X
    6 ]) y, j* o0 s& U1 {
  1654. INX
    % i8 P( M8 l- g. `! Q/ H
  1655. LDA <Data_Cnt5 P# c5 H: K$ }. a) p
  1656. STA PPU_Addr,X
    ( r/ _8 @/ g6 |
  1657. INX/ q4 m8 r+ R3 H4 Z# M( d
  1658. Show_Get_Pos_Center_End5 y7 N; u9 V2 U* @( M
  1659. RTS
    , J- B7 C7 M( i3 m, S; j" \
  1660. .ENDIF0 |/ U- S& Y4 p) }4 h1 z

  1661. 9 n* i  F1 \& G4 c) U* Q
  1662. ;==============================
    # j2 C9 I' z% G8 ?+ f
  1663. ;音乐端口清除4 L5 J0 n4 Q1 {( u
  1664. Sound_Data_Clear: R3 O9 J' d0 j  }6 u' ~4 E
  1665. JSR Sound_Port_Clear+ h% s( S, Q0 T* X& B
  1666. JSR Sound_Ram_Clear
    - D- ]* B' K5 h3 O
  1667. RTS
    5 F( q4 ]6 y1 n* q# t9 {3 U
  1668. - K: J' _$ J" T6 u8 c: v
  1669. ;==============================
    / o+ G0 m1 D, X0 ~1 I
  1670. ;音乐端口清除- t3 q4 h' @! F5 @- Q- ]5 b
  1671. Sound_Port_Clear
    ; O* e* c; v9 h' [
  1672. LDA #$00
    / G  C$ f- E7 y! f
  1673. STA APU_STATUS
    + ~/ L  _& |' D' ~' C
  1674. LDX #$00/ ^! s8 x, n6 ^
  1675. Sound_Port_Clear_Write/ r3 P; d  S/ `1 ~1 {/ n
  1676. STA $4000,X" ~: Y% ]; O7 F1 y4 ^: W
  1677. INX
    4 J2 q& G6 E$ i- A  x
  1678. CPX #$14
    * }  O; S& z/ C/ V, Q4 A$ X  D
  1679. BCC Sound_Port_Clear_Write
    6 y& B9 D5 h% F& U7 W( M
  1680. RTS
    3 K1 \& g8 K, {- |- ~7 n8 x# D
  1681. - Q; C$ k7 ]6 l4 k' N# N
  1682. ;==============================
    * E) `3 I1 ]8 h9 T& }! O
  1683. Sound_Ram_Clear;RAM清除
    % m, i' w4 R  F6 `. [- Z* C
  1684. LDX #$00
    ; z; N. R1 O: F
  1685. LDA #$00! \4 m4 f3 `/ S9 Y' }' V% Y* p
  1686. Sound_Ram_Clear_1* y8 L7 O3 p/ U1 C( k5 x0 {6 ]
  1687. STA Sound_Ram_Addr_1,X/ O: K3 v8 [/ `8 ^9 X& a# o9 u
  1688. INX
    2 @0 V& l* Y6 b. N5 [1 g- r/ [
  1689. CPX #Sound_Ram_Addr_1_Size+ {1 c$ Z/ W+ d
  1690. BNE Sound_Ram_Clear_1
    , Z1 @4 Z. V: C) H3 O
  1691. LDX #$00
    ! n- g6 v* N5 P) B5 ?5 K7 U4 b' [6 J
  1692. Sound_Ram_Clear_2
    2 ~( E$ h( y" J) \
  1693. STA Sound_Ram_Addr_2,X, G7 w2 T+ D7 L5 v
  1694. INX# V2 v* J, w& e7 W- S
  1695. CPX #Sound_Ram_Addr_2_Size
    - Y4 w7 J3 l, I8 w: n+ D" k
  1696. BNE Sound_Ram_Clear_2( m0 ^  g! @6 x: m# d
  1697. LDX #$00* b% b3 B6 g/ o) L. ]3 G6 [7 m
  1698. Sound_Ram_Clear_3, e# [, d2 y$ d' f- S! V5 Y
  1699. STA Sound_Ram_Addr_3,X
    ! H# Z+ o1 x  b3 G
  1700. INX
    / L+ a  E+ Y7 B8 J0 N; q4 `: \0 ^
  1701. CPX #Sound_Ram_Addr_3_Size& M' z2 a7 r" Q2 w: s& B
  1702. BNE Sound_Ram_Clear_3
    . o7 n% k. J- ~8 V1 h
  1703. LDX #$00: j/ A9 }) Y3 [% q
  1704. Sound_Ram_Clear_4
    : ]! G7 T6 s" C+ o8 l
  1705. STA Sound_Ram_Addr_4,X: `) h5 d" l  F( W) ^2 N
  1706. INX$ g8 ?+ J0 p  j8 I: R1 @
  1707. CPX #Sound_Ram_Addr_4_Size
    " W+ J$ Y/ E0 c4 w/ F. |1 p5 u
  1708. BNE Sound_Ram_Clear_4
    1 |3 P' Y: \" z) t$ S
  1709. Sound_Ram_Clear_52 A+ E- P2 g+ i: G/ ~  {
  1710. STA Sound_Ram_Addr_5,X  X* [4 f+ q: L) }5 y6 Q/ v+ K
  1711. INX; \$ g' G) p" N# A9 N! v% i
  1712. CPX #Sound_Ram_Addr_5_Size0 I- z9 |# y- O. g9 w
  1713. BNE Sound_Ram_Clear_5
    ( o+ b6 [7 Q# m% Y6 _' M1 ]- `0 X
  1714. RTS6 ]$ z: f- f/ F9 n' W; d
  1715. " J7 G& L' u; s
  1716. Get_Music_Collection_Name
    2 J# y  f  N  c, O1 g" ~  k5 o
  1717. PHA1 B5 g" B) s/ i9 m3 l2 e
  1718. LDA <Music_Item_Cur  f3 T7 m. u) m1 k* G" x5 F
  1719. ASL A9 x+ Y  |" Y% l1 ]1 o8 P
  1720. TAY5 f" ^% N/ w6 c' n
  1721. LDA Music_Collection_Name,Y
    : y  E  A7 `  |& U7 Z7 [: W' Y
  1722. STA <Data_L
    ; m2 f/ g! C! P. t9 ~3 E
  1723. INY  i" H& v  C; b& z  i9 ], I) C
  1724. LDA Music_Collection_Name,Y9 N5 _6 ?, U+ k
  1725. STA <Data_H
    ; F1 a' G3 J0 N( c& Z
  1726. PLA
      ]7 P! O/ G& d& k  A- R
  1727. RTS
    , m9 v& X' b; |5 ?" c
  1728. ' X) ]* K4 b  G7 @  A3 s
  1729. Set_Sound_Total* p" o8 a, d' v3 `: U2 f
  1730. LDY <Music_Item_Cur
    ) ^9 G4 B3 ]8 k6 D* g& ~' K3 o( J( t
  1731. LDA Sound_Total_Port,Y$ x* ]% U! a+ D: r  m
  1732. SEC
    2 Q) f2 s5 M0 x- I; ?% K
  1733. SBC #$01( M* [4 U0 c/ ~  A- ]+ ^0 J
  1734. STA <Music_Total8 |. o. U/ j8 B1 T, R
  1735. RTS  v; M. V7 S+ `

  1736. 1 j# {! q) W- D5 b) v
  1737. Get_Sound_Start
    1 ?1 q$ d8 X* m3 s
  1738. LDY <Music_Item_Cur7 t! S+ ^2 y8 m% I+ o, O" [
  1739. LDA Sound_Start_Port,Y
    0 `' K2 @* M% G$ o
  1740. RTS
    + ^" E" m. j6 t* U, f7 ^

  1741. ' a# [( [% M$ R
  1742. Set_Sound_Init_Port2 D! X5 B4 j' V, z+ h
  1743. PHA
    , R. O$ O+ w& b( Q& D* F1 H! o  ^
  1744. LDA #$20
    0 \' Q# {0 W1 x! y! }( k) ]9 Z
  1745. STA <JSR_Addr_Op: a1 x7 Y1 J5 G0 h2 ]- M+ S8 v- g' q
  1746. LDA <Music_Item_Cur4 ~. d/ g2 O) D% g$ ^6 L" r0 ^& Z
  1747. ASL A
    ! ]/ i6 C. ]& A3 j; p
  1748. TAY
    1 V8 C; o+ K( Q" G6 U2 {; F/ U! c/ @
  1749. LDA Sound_Init_Port,Y
    ( h& i/ \# p4 P: D
  1750. STA <JSR_Addr_L% X: V! x; v  \* H1 r$ {: ^: F
  1751. INY+ r+ E4 V6 v2 l
  1752. LDA Sound_Init_Port,Y1 Z$ F9 N/ n) m+ |
  1753. STA <JSR_Addr_H
    5 p7 T* B7 c/ b8 w3 L  v
  1754. LDA #$60# T1 L' j% p- z' L& ~( m" X
  1755. STA <JSR_Addr_Rts
    ; G/ h# c+ e1 R1 P4 C% E9 A
  1756. PLA
    " B$ ?: R) ?, \. f9 D! U
  1757. RTS+ Z6 L" S5 A4 s8 i: ^' g

  1758. 9 ]; Q8 ?+ ?+ E
  1759. Set_Sound_Play_Port
    ! H5 s) e' S" s& s+ J
  1760. PHA
    + ]' Y1 X: `/ b+ S" U) u9 `
  1761. LDA #$20: N& o0 m! c# ?7 z$ y
  1762. STA <JSR_Addr_Op
      I0 s. r- t; G, ^4 g
  1763. LDA <Music_Item_Cur
    # z- d: n$ N6 q% x0 c
  1764. ASL A
    - V( m, `3 q' M& I5 ]
  1765. TAY/ a4 U& x: q. I& a. ^7 F9 }: [
  1766. LDA Sound_Play_Port,Y
    . [' a" q" H! z
  1767. STA <JSR_Addr_L
    & e/ r7 N( R% y0 w
  1768. INY! e2 h! W5 M* x+ x9 p7 d# {
  1769. LDA Sound_Play_Port,Y
    ) E8 q# L5 \" ^# _9 F
  1770. STA <JSR_Addr_H
    5 \, R' K- v* i8 \: O$ E9 n" y
  1771. LDA #$60
    3 `% D7 z! m) }+ D/ r. i6 A/ x/ o
  1772. STA <JSR_Addr_Rts* d" }1 w9 c) j* w% i$ ]
  1773. PLA
    & O. m1 w* l% T6 [% e- R( o3 P
  1774. RTS0 [0 \' v' F' o! `: q0 K$ H
  1775. + l$ K/ {5 m2 Y- |$ o
  1776. Set_Sound_Reset_Port& Q: h; U4 a6 X# I3 p2 C# y
  1777. PHA
    1 e+ P* I# v8 K+ T- ^+ B
  1778. LDA #$204 s- _* |5 j. L0 J7 {3 m' n: R
  1779. STA <JSR_Addr_Op
    0 r7 J* F2 N0 m$ }6 P  F8 g8 F
  1780. LDA <Music_Item_Cur
    $ @2 g$ H- n. |1 Z  V
  1781. ASL A
    / j: E+ o% }( }  Y! q
  1782. TAY* o) U, I4 f% b6 n! }0 e4 Z4 |- z
  1783. LDA Sound_Reset_Port,Y6 K' l9 q/ u7 m' n7 D% {0 f/ G
  1784. STA <JSR_Addr_L
    ' o1 P; P1 ^7 V# q4 ~1 B6 b
  1785. INY- k8 s) ]7 w; }% Z& ^
  1786. LDA Sound_Reset_Port,Y
    3 z0 V* F! g+ W9 v
  1787. STA <JSR_Addr_H
    - w, O7 b: x' A, Q5 c
  1788. LDA #$60/ f/ a2 w; J8 V; |' c+ m
  1789. STA <JSR_Addr_Rts
    * ?4 c1 @- Q* B( S3 i4 `  s# Y0 k# W
  1790. PLA
    0 L# H/ X( M: V5 H0 e# x4 ]- j* U4 u
  1791. RTS; G- z3 U8 c- g. A! `

  1792. + l3 e1 n$ p2 `5 N  ^
  1793. ;初始化音乐bank
    2 c6 w8 R% w, _8 y: t& }
  1794. Init_Sound_Bank
    7 n0 Y" }- a( w- J. Q0 v
  1795. LDY <Music_Item_Cur
    5 u" A# P  C2 y$ {( _
  1796. LDA Sound_Bank_8000,Y8 W9 W. e6 O! F- q# r1 m" Z
  1797. STA <Music_Bank_8000/ Q, d; \8 X/ |# G) G
  1798. LDY <Music_Item_Cur
    * L7 Z7 ^/ l+ |6 q  i
  1799. LDA Sound_Bank_A000,Y8 {. W. y1 j" K1 a% `
  1800. STA <Music_Bank_A000
    $ X5 T; R# {' w) W5 j  f
  1801. RTS
    7 n, J: Z7 p% k8 n: F* e7 e# o
  1802. % ?$ F. z5 H  K# C& l' U4 t
  1803. ;==================================================
      R& x: G. r1 n; U0 w
  1804. Sound_State_Reset;音乐状态重置
    5 z/ J+ u' B1 |& {$ @3 h$ {
  1805. JSR Music_Bar_ReSet        ;重置音乐条& g4 {$ b/ T: @  `
  1806. JSR Time_ReSet             ;重置播放时间
    7 r+ O' ?- ]3 E9 r
  1807. ' b0 ^6 P( Y% K7 O; {& B- t% }  m" C2 @
  1808. LDA #$007 t2 j1 f" P( @, V9 E/ P' E% l: W
  1809. STA <Music_Stop_State8 a: w: f( v/ |$ l4 P
  1810. JSR Music_State_Show       ;显示播放状态+ f8 v0 C& |8 f$ g; t

  1811. 3 b3 F. ^: T; x4 O' H
  1812. .IF Track_Name_Pos
    " n/ V9 S0 T  v3 T( A
  1813. JSR Show_Track_Info        ;音乐曲目名显示
    $ j  P! w2 k% o3 k7 t* q2 a
  1814. .ENDIF
    + A- L* i& `1 }9 A' J; \# P

  1815. : G6 _' F) D% a. X8 E9 O$ T# J" E9 }
  1816. RTS+ S0 O( Z1 E2 y

  1817.   M! q* `: d7 I- h8 X. x( e, E
  1818. ;==================================================, I+ h5 T6 W5 \( U: u
  1819. Sound_Init_Proc;音乐初始化处理
    4 I$ d6 O) B6 H2 p
  1820. PHA
    8 C1 G. R6 z! `. s, a" H  a. [' Y  S
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址
    . N6 H+ u# `9 E1 z% K+ Z
  1822. LDA #$00
    ' w  ?* s/ h0 H+ @4 J: D
  1823. STA <Scroll_H               ;重设水平滚动+ v* H7 t% r2 }
  1824. LDA #$0F
    + @' g+ A' a- B+ x' `2 c$ n
  1825. STA APU_STATUS: m% s, @7 H, N4 B2 x
  1826. PLA$ J: f* D* S8 y7 a6 ?# O
  1827. JSR Sound_Init             ;音乐初始化
    ! T% t' ^  ]1 I/ Z' ^0 u- A! I" n
  1828. JSR Sound_State_Reset      ;重置音乐播放状态
      H8 h4 d$ x- {2 l2 d: z( E
  1829. RTS
    ) ~5 w$ }) Q, F

  1830. 4 @* J5 f9 c0 B' Z1 h4 [
  1831. ;==================================================
    9 o8 E+ X# D8 \- }- W0 o
  1832. Sound_Play_Proc;音乐播放处理
      w6 l5 ]  p/ R6 }
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址
    - q4 X" K: x/ B/ A
  1834. JSR Sound_Play             ;音乐播放
    ! ]3 B5 N+ ?' v4 q6 s3 y
  1835. RTS
    2 F6 g8 l1 k- w* v

  1836. + q6 e* J! O* A
  1837. ;==================================================
    $ |/ ^/ O9 v7 F- I- p% K, j5 W+ x
  1838. Sound_Reset_Proc;音乐重置处理
    0 }! G9 {% a/ e- p: R
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址# m( Y' P% r' a' n5 D$ n
  1840. LDA <JSR_Addr_L
    4 l2 H4 e8 q  e
  1841. ORA <JSR_Addr_H
    - Z4 T0 ]' G2 S
  1842. BEQ Sound_Reset_Proc_Default, X' j+ B' H! K
  1843. JSR Sound_Reset            ;执行音乐重置
    % ~, z) S- |5 J
  1844. JMP Sound_Reset_Proc_Init_Sound1 Q, `8 H6 r& o, \! b4 r  _' _

  1845. * Q, L/ Q( L0 ]
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理9 Z0 ~2 ~  D& n) [: U9 w. @

  1847. 3 e5 f( {% ]; f8 {) i$ b8 k
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断) R0 T: e' m6 [0 x
  1849. LDA #$006 i9 y7 |3 P1 D# W1 d; P; l
  1850. STA PPU_CTRL
    1 e1 x5 j9 Y+ v/ V4 u

  1851. " j4 f, g- l) `) @
  1852. JSR Sound_Data_Clear! v* V' Z0 E- a' l
  1853. ! @6 C. v- m2 q- s8 i+ O
  1854. Sound_Reset_Proc_Default_Wait' c) n, J& ^" R$ \3 L& I
  1855. LDA PPU_STATUS, f. B* H$ y! F. w4 ?! n
  1856. BPL Sound_Reset_Proc_Default_Wait& X  F; ~1 m% M8 G5 g7 Q
  1857. $ d- R: L8 ]% n# M7 m- y& V( _
  1858. LDA #$00
    : y# R3 z( z; j8 Z8 C) p5 _
  1859. STA PPU_ADDRESS1 r2 [: ~! u: ^  t" J3 Q' s
  1860. STA PPU_ADDRESS: ~1 a! a& _9 ~1 S
  1861. STA PPU_SCROLL* z+ E+ I4 e: z  s) j: r- ]" v7 h
  1862. STA PPU_SCROLL
    ) ?! {. y. C7 T4 ^

  1863.   v; N, D1 r# w4 q  Q: L, n
  1864. ;恢复PPU控制: m9 k5 J- S) M7 E; d8 A/ T7 e
  1865. LDA Screen_Ctrl7 D$ J& F: K! o. d; a7 _1 Q
  1866. STA PPU_CTRL7 Y; M6 F5 k/ [' p1 G! k, ?9 u- X
  1867. 1 ^! U& C3 O" t& T0 R% X$ `
  1868. Sound_Reset_Proc_Init_Sound  k7 T9 a; w, ~- N0 J1 O# ^0 z" I1 P
  1869. LDA <Music_Stop_State3 l% u! Y0 f5 \: D
  1870. BNE Sound_Reset_Proc_End$ R5 y" c+ w4 k7 i/ c' ]
  1871. LDX <Music_Item_Cur
    ; A: K& n# o7 Q8 Q4 f
  1872. LDA <Music_Cur,X
    6 M: }& |! r4 F8 t" t$ @5 M
  1873. JSR Sound_Init_Proc
    . F" i; A+ |2 G4 r" [2 i! B
  1874. Sound_Reset_Proc_End
    : b3 j0 ?3 S. }2 B/ ~* \2 p' [
  1875. RTS
    - D) D4 d& |+ l* c

  1876. ; r: _' ]% @, t, m( b0 p( R) `
  1877. ;==================================================
    1 i( P: o4 h* W# q' a8 b5 G# L9 X
  1878. Clear_Item_Text;清除页项目+ N) ?" q0 n6 A3 k  e
  1879. LDX PPU_Cur+ u8 T4 B( t1 l/ b9 N" c  o
  1880. LDA #PPU_MODE_CNT_CLEAR* V% D9 n- x2 f5 {2 `
  1881. STA PPU_Addr,X6 U) l: e2 B. U% r+ E
  1882. INX
    9 _& y2 I6 }. O  [$ a2 Y
  1883. 2 r& `8 O$ E4 C7 j$ ~+ S
  1884. LDA <Page_Last4 G( W- L% Z, b& K" j
  1885. SEC
    : s8 e  v, ^+ s+ z9 h
  1886. SBC <Page_Last_Index# A  t. M( z8 c- v
  1887. ASL A: k, s& \8 U$ k" A0 W: o- p

  1888. ' r( U" ^( O, W- c
  1889. TAY" N! P( d5 e+ n' h0 l
  1890. LDA Item_Pos_Data,Y
    0 G& b4 p6 ?- l$ D
  1891. PHA0 ?, }- E4 H5 N* [, X7 z
  1892. INY; D5 L) q% m) S& J) x1 v
  1893. LDA Item_Pos_Data,Y: c  a( L' A& D# H
  1894. STA PPU_Addr,X
      ^4 e$ {: I" B7 f- D
  1895. INX! e7 ?  |+ {% D# F2 \% |
  1896. PLA
    * p6 Z( X1 ^9 B
  1897. STA PPU_Addr,X5 b  B8 c5 B* {! d( S' p
  1898. INX& T) e1 l/ _- t( ~: w
  1899. ) k9 M4 d2 I! h2 d4 m, U9 p
  1900. LDA <Page_Last% n0 N9 w' u5 F7 N
  1901. ASL A5 M7 {6 K  i7 U9 [- S6 h& l
  1902. TAY
    ; W) N3 s2 U1 A3 ~
  1903. LDA Music_Collection_Name,Y) R5 _6 d  N  ?' P1 H
  1904. STA <Data_L
    + ^) j; |5 e0 N/ z! s
  1905. INY: v3 ~* j- w" @" J% I
  1906. LDA Music_Collection_Name,Y. v3 V& t6 V* ^4 I- D# c) g% K
  1907. STA <Data_H5 q- l' g  ]  d. m8 T4 \+ e+ ?
  1908. & Z; Q3 r1 [: ~* r. v
  1909. LDY #$00
    + ~+ `$ O8 z: g/ ^1 u  F
  1910. LDA [Data_L],Y
    2 \, G& z( y6 \( r5 F7 |, W
  1911. STA PPU_Addr,X- P( p: f7 w: }3 ~; ?1 `
  1912. INX
    3 v, S! i% ~6 M8 U+ E
  1913. Clear_Item_Text_End
    6 k* q( w5 E- @, T3 \
  1914. STX PPU_Cur# b; l' p6 J; a6 {: `+ m7 U$ ]
  1915. RTS
    0 z: m4 ?. y4 H6 m7 {
  1916. / B5 Q" Y, w2 q6 c$ U( C
  1917. ;==================================================! c+ e- {, p2 l( |8 d" m
  1918. Show_Item_Text;显示页项目
      i- m, V4 j. e2 s1 k% z
  1919. LDX PPU_Cur# T$ Y7 W2 ]. d
  1920. LDA #PPU_MODE_CNT_LINE
    5 \) k1 P6 }: M/ k( r
  1921. STA PPU_Addr,X
    3 `/ t0 q& c1 x* |& Q, F
  1922. INX
    6 w. G0 i& J; r/ [  F' L7 F
  1923. LDA Page_Cur- G& G7 |- K; R4 k7 x
  1924. SEC, _4 D* E: J4 P% s
  1925. SBC <Page_Cur_Index
    " W0 M! H" y+ P, N, I. s& l
  1926. ASL A# r6 j1 P, ~. `/ S2 f7 a; A. D+ g
  1927. TAY
    % w3 j$ S/ f6 Q4 }% z
  1928. LDA Item_Pos_Data,Y
    4 A4 q% n) p# ^! y, V& m6 F
  1929. PHA! s2 M  S( H  J7 b& M  X
  1930. INY
    9 E1 M7 L5 q& M$ g3 c( U( n. \8 k; o% Q
  1931. LDA Item_Pos_Data,Y/ |4 l" K0 _2 n* k) C" b
  1932. STA PPU_Addr,X
    ) t- X0 O1 q8 T0 c
  1933. INX5 S/ F" V$ N2 S- F" H
  1934. PLA
    8 f( S* [% t' ?8 K3 }+ a9 g
  1935. STA PPU_Addr,X- A3 a& |' C/ x% d' M0 t; N
  1936. INX
    " C' G: R/ a9 E6 F

  1937. ( e; q0 z8 R) D; X  a; j! }
  1938. LDA Page_Cur
    * V+ {. S+ w: h7 G% A
  1939. ASL A! n: u6 V' ?3 K4 t0 O9 J* p0 N- h
  1940. TAY
    # y$ ^* ?6 ?; S' {5 j7 W
  1941. LDA Music_Collection_Name,Y  Q5 G7 K! W+ `* ^* `* o* q
  1942. STA <Data_L0 H: a+ @; [/ Y* C1 b+ p
  1943. INY; \0 g9 J$ Z8 Q6 e: D$ H0 M
  1944. LDA Music_Collection_Name,Y
    . ]9 t* H  l) H3 ]1 M1 g" d6 W
  1945. STA <Data_H
    . N) q7 T7 B; E  F* i

  1946. 2 v! m. L( O$ ~+ O# E! J; G
  1947. LDY #$00$ K  k' r1 R4 J* \
  1948. LDA [Data_L],Y
    & ~5 L: I/ [" }4 Z7 Y
  1949. STA PPU_Addr,X% y, A* O6 d/ I3 j8 \
  1950. STA Data_Cnt
    5 q6 J; r( ?0 _0 E; U+ n
  1951. INX
    ( A( v5 D7 _  Y' w7 M- O

  1952. ) v# [- f. S  A$ Z
  1953. INY) m6 w+ l8 }) C% v
  1954. Show_Item_Text_Write5 q- ~6 [& q8 M9 K0 T  B
  1955. LDA [Data_L],Y
    1 O8 X  n9 b7 B- h8 n0 K* B1 j
  1956. STA PPU_Addr,X
    & N4 }, ?2 ~% w/ b, x1 L
  1957. INY
    + C1 H% d" E' P& \
  1958. INX
    8 L1 G$ ?) ^4 K* Z7 c
  1959. DEC Data_Cnt
      @5 H9 h# o- A
  1960. BNE Show_Item_Text_Write
    ) M  w& W) A6 G" B: U1 ^! Q% |
  1961. & m7 L, a$ j8 I
  1962. Show_Item_Text_End
    1 q% v8 W; R0 ?& d' S
  1963. STX PPU_Cur+ `0 {% w' }7 B/ w/ Y
  1964. RTS
    2 Y! E; w$ t7 `" U1 `7 S: r

  1965. 4 V, M! P' v& s: X
  1966. ;==================================================0 d" f% D' |8 R' S% E: b, q
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量* U2 _& y+ V# f  Y
  1968. STA <Data_Buf
    ! f( V% y7 e6 ?2 L" N5 |
  1969. LDA #$009 G: q0 Y9 D4 [9 b& u; R. D
  1970. Get_Page_Index_Calc* V6 c0 B+ f9 x' |7 i- u# ?- R0 @4 L
  1971. CLC
    6 _4 J' W1 ~" L1 z, d
  1972. ADC #PAGE_SIZE
    / k; w# M* Z6 l& I9 w
  1973. CMP <Data_Buf" l, f6 T1 u! o5 ~/ J( e5 Q' l
  1974. BCC Get_Page_Index_Calc
    4 |* |: y! D; X# i0 {+ `
  1975. BEQ Get_Page_Index_Calc_End
    " ~7 M+ A5 h# T* o' x$ Q6 O9 L
  1976. SEC
    % v5 _$ N- P8 o
  1977. SBC #PAGE_SIZE& q+ `& m6 n- x3 Z# s$ n8 p
  1978. Get_Page_Index_Calc_End7 c( n) m; M9 H
  1979. STA <Data_Buf
    9 A* Y- C9 B6 p$ {+ n
  1980. Get_Page_Index_Cnt" c# d- ]/ @" l' w3 u
  1981. LDA #PAGE_SIZE
    7 d/ T2 T% k1 t9 M; J" v
  1982. STA Data_Cnt. n& m( C2 y* b, f2 d( E
  1983. ; {: A6 u0 m( `# ^
  1984. LDA <Data_Buf
    / W7 L: F* v" _& O6 s) S( L
  1985. CLC+ ?; u" H% O% w, \3 p( [
  1986. ADC #PAGE_SIZE
    * r1 X* n5 f( F
  1987. CMP #ITEM_MAX_SIZE& ?- w& v' y0 D$ w; w; k
  1988. BCC Get_Page_Index_Cnt_End
      x+ |$ {+ x/ d- w* i, ]. U' [

  1989. 0 Y% l  u9 J3 h: C3 u5 E# f" i% |
  1990. LDA #ITEM_MAX_SIZE& i0 @' o1 q/ p" z& |. ?
  1991. SEC
    ' z; |, i' t  ^0 _3 z! {' E+ q
  1992. SBC <Data_Buf
    2 h8 {5 e* |' d% r& Y
  1993. STA <Data_Cnt% o$ n$ a6 T) |' x; }; G/ I- J1 j

  1994. . L4 J( k9 K, N3 {$ R/ \  K( {
  1995. Get_Page_Index_Cnt_End
    % A5 ~( @+ U2 w% Q) f
  1996. RTS
    : ]7 Y- `; v4 Z1 U4 L; E% s

  1997. / `/ l! a5 I- P" Y* X0 A; c
  1998. ;==================================================  T. X5 s: n! {' W. D4 T
  1999. Get_Last_Page_Start_Index
    4 Q5 R6 V* \* `, j( {9 O% |$ z
  2000. LDA <Music_Item_Last
    ! X- i; W/ m' C; o3 A
  2001. JSR Get_Page_Start_Index- d0 @1 p. d% l" \4 m
  2002. LDA Data_Buf$ B+ X7 G' U3 ~7 E
  2003. STA Page_Last( D; U" O# i  m* x
  2004. STA Page_Last_Index7 |6 k2 ]- u  A: v5 J, g
  2005. LDA Data_Cnt% T5 x% B+ z, e5 ~9 N
  2006. STA Page_Last_Cnt; @/ A& b: Y: V- W0 W# l: a" G
  2007. RTS" M( a/ l0 E8 ~' K  e0 T- H# O

  2008. 8 `9 i; X' D( q7 S
  2009. ;==================================================
    7 e" J9 v# k# `6 a
  2010. Get_Cur_Page_Start_Index" ?9 N6 E4 a" r+ r6 @# i3 i* A! I
  2011. LDA <Music_Item_Cur
    0 }+ H$ C9 N/ a! ]; p
  2012. JSR Get_Page_Start_Index& l  m$ ?7 {9 t- E2 i* w
  2013. LDA Data_Buf5 x6 v. k* s3 S# r/ H
  2014. STA Page_Cur# V: L; C! I+ ~
  2015. STA Page_Cur_Index+ f$ X+ x0 e4 }4 Y9 X. \# o( q
  2016. LDA Data_Cnt
    ) g; X# ~7 N$ L3 D
  2017. STA Page_Cur_Cnt
    0 s5 N  Z# z. d/ i) A- Z3 c' ?7 o
  2018. RTS
    8 }) O/ o5 m0 |7 _% b& R* T7 Q
  2019. ' S$ k! G  u. G1 \  c$ ]4 X, a
  2020. ;==================================================
    ( |7 w& J( q) Y/ J% m
  2021. Show_Page_Text;显示页文本- A8 w$ m4 t9 T; O8 n/ B' J
  2022. LDA <Text_Disable_Flag
    4 P  l. S, V; e9 A$ a! d7 S2 T
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    2 w' A+ R! X2 S9 s+ M" n- H1 ~
  2024. STA <Text_Disable_Flag) B2 o& x0 g+ R' M  Q, L5 \

  2025. 5 u# O4 V: h% J0 {4 }
  2026. JSR Get_Last_Page_Start_Index
    # M! \6 T2 A" M8 @2 Q: W
  2027. JSR Get_Cur_Page_Start_Index: ?: Z( m4 j, O( N' Y

  2028. 8 b: W1 k5 K' O: W7 e; L& e! w
  2029. Show_Page_Text_Set5 M$ ^* D! {5 b- B( S$ w! h$ b
  2030. 3 S1 p  W4 m: c( x( m
  2031. Clear_Page_Last_Item;清理上一页0 D& K" l: N0 b' H% c
  2032. LDA Page_Last_Cnt; n3 z5 S" z! ^
  2033. BEQ Clear_Page_Last_Item_End+ }" R7 V/ r0 w
  2034. JSR Clear_Item_Text# q6 u' Q3 Z% V+ _
  2035. INC Page_Last
    * y  S1 N3 T' M. r
  2036. DEC Page_Last_Cnt
    ! Z3 x: l# K! T  i9 B- N/ n- e
  2037. Clear_Page_Last_Item_End$ z) K) t+ N1 D0 E3 I, A- G" b0 H

  2038. 3 L# X/ P# x% i" Y8 O
  2039. Show_Page_Cur_Item;显示当前页
    + w; o3 D$ W& [% v
  2040. LDA Page_Cur_Cnt
    ) Q2 h- N) _( ~/ m. \$ W& s8 v
  2041. BEQ Show_Page_Cur_Item_End& w; Z: ?0 C4 Z3 W, L1 O1 P
  2042. JSR Show_Item_Text' Z- s' D, J+ i/ Q3 w7 \# V6 w( H
  2043. INC Page_Cur
    + d0 D8 g/ S6 l
  2044. DEC Page_Cur_Cnt
    8 I3 a, m. n# f4 a1 b! X# G; Y: @; {
  2045. Show_Page_Cur_Item_End
    7 M; Y. Z/ ~& i" M! \* ]
  2046. 1 g& P& @1 y" v( W
  2047. INC <Time_Wait_Cnt
    $ f  _, q4 L2 o, p1 t; O5 T9 w6 e( W
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作
    ' e/ ^! K2 g, q8 a; {% n4 B+ u( {
  2049. LDA <Time_Wait_Cnt4 ^4 v* y; u: q3 T
  2050. BNE Show_Page_Text_Set_Wait
    + t. N! |- x: C: R' s5 y
  2051. " J/ [+ A/ W6 J# c( o8 o
  2052. LDA Page_Last_Cnt/ L( e  @0 y9 k
  2053. ORA Page_Cur_Cnt
    9 B7 S( h! D0 F, g* a; I2 u$ g$ }3 \
  2054. BNE Show_Page_Text_Set
    8 n5 m9 K; Z4 [  q
  2055. LDA <Text_Disable_Flag" h, Y& S8 d/ v! W6 K
  2056. AND #TEXT_DISABLE_ITEM ^ $FF: T6 u. S0 i9 Q
  2057. STA <Text_Disable_Flag
    + b/ f: V- h' L$ h
  2058. RTS
    / U7 \# i! A0 B' j" N

  2059. $ t: g9 b3 F2 Y( V% [
  2060. ;==================================================
    0 l1 ~, g" B# Q6 b
  2061. Last_Item;上一项
    2 J! t3 h6 R! r5 t/ f( p& w
  2062. JSR Clear_Last_Track_Name& Z. |4 B4 d( b! x
  2063. JSR Disable_Text_Draw
    7 u4 j$ n0 K7 S$ h6 ~* M: o- V

  2064. . Y6 j; I1 F4 I3 W' ]
  2065. LDA <Music_Item_Cur! K' d( F: R# v0 e
  2066. STA <Music_Item_Last$ J: @  y) T4 ?) F6 u/ @
  2067. 7 Z! b1 c; h1 Q: ?# K
  2068. JSR Get_Last_Page_Start_Index: ^0 O; ]: H- G# @* ^

  2069. . U& Y; S+ {0 U
  2070. LDA #$004 F0 s/ T+ G* M5 G  b  ?" @& p% p1 J
  2071. STA Data_Buf
      s' n! h8 J0 o2 O+ \7 t
  2072. 5 ~% J) r3 v4 u2 i  }: }4 O6 [
  2073. LDA <Page_Last
    ( n; ]  [$ b0 ]) Y' L1 c
  2074. CMP <Music_Item_Cur/ [' q' I/ V) t/ f
  2075. BNE Last_Item_Begin! y2 r  @- z' N3 q1 k

  2076. . G  K: w8 M3 b+ z. _: X# @
  2077. LDA #$012 M  K9 l+ T- Z* y2 R! t
  2078. STA Data_Buf& z. D  Q' i7 l& ^1 V9 R
  2079. Last_Item_Begin
    , ^; g: s; W: \+ d0 e
  2080. LDA <Music_Item_Cur. c: \# Z8 Y1 @5 {3 b8 j5 ~  o( e
  2081. BNE Last_Item_Set% C& A8 S, l* p0 F/ w5 x( o) ^
  2082. LDA #ITEM_MAX_INDEX + 1
    + |- f9 s/ C5 Z. U1 m
  2083. STA <Music_Item_Cur
      l" p4 [- T$ Y( _9 Q. K( w
  2084. ' m' ^" b9 S- i% ^$ b4 P
  2085. Last_Item_Set+ B4 Z/ e  b& Q. L. x( d& a
  2086. DEC <Music_Item_Cur
    , r  y% z" \: }+ q9 S/ J
  2087. LDA <Music_Item_Cur
    ' J' z( `* n+ w+ ]- f- {% q
  2088. JSR Reset_Current_Music
    $ R" }/ X0 U* }# a5 b

  2089. / P6 {, J3 _4 _- S9 D9 M4 P
  2090. Last_Item_Play
    4 l# _* }' ]& o! f* ~( o
  2091. LDA Data_Buf$ u/ b* ^9 a. A% u* x9 S
  2092. BEQ Last_Item_End
    3 ~7 V+ w; r3 w2 W
  2093. JSR Show_Page_Text( A' D; ~. {  p0 n
  2094. Last_Item_End1 j1 D0 N, [, l
  2095. RTS. }) s  }& B1 B2 ]7 M* s2 I
  2096. 6 A% c" D, j( W# e& \4 M* V4 U1 i
  2097. ;==================================================& p0 Q) a; s6 u
  2098. Next_Item;下一项7 K( d$ v6 d5 a, Y' ?7 {& f0 A* ~: A, t
  2099. JSR Clear_Last_Track_Name/ u! K  h$ Q3 _- k$ g: n6 W
  2100. JSR Disable_Text_Draw
    " i$ @$ b$ {6 c" S0 S* f: e0 y
  2101. , p/ E8 L: u2 U/ m
  2102. LDA <Music_Item_Cur
    ( c& m( z. |3 k2 F5 b: c8 F+ h2 e
  2103. STA <Music_Item_Last
    6 B' _' y8 @( |' ^1 e* S5 }% l# M

  2104. + X! \+ f7 G5 f% S
  2105. JSR Get_Last_Page_Start_Index
    4 T% ]& x8 I- `

  2106. ; _9 g% ]2 u- L& s% f+ L
  2107. LDA #$00; l# T$ R1 g9 ?7 i& D  c, w" I
  2108. STA Data_Buf
    5 _% X0 T- z: q/ i% p
  2109. ; _( p7 s- A3 e6 P# R6 x* Z' x# u
  2110. LDA <Page_Last. F% |- K8 J7 ?+ z* c+ M
  2111. CLC
    0 ]4 D" w! J# D! c  V0 E2 N' l
  2112. ADC <Page_Last_Cnt
    % O& c# O- Q) w$ P$ Q, T- j
  2113. SEC
    ) p# m( W8 A* `8 X/ Q
  2114. SBC #$01
    2 j5 }4 x& E9 n' L, q+ U( p
  2115. CMP <Music_Item_Cur
    + Z( k0 x, d  O- l) o" ^; N: r
  2116. BNE Next_Item_Begin/ a" c- W! s: B8 B" y9 ~
  2117. 8 i5 s- W9 x! b# Q
  2118. LDA #$01
    9 Y% _5 `! s( j3 H
  2119. STA Data_Buf% y4 f( S5 U% h2 h5 J% W
  2120. Next_Item_Begin6 y2 b; J4 J$ F9 Q+ o) T: ]5 b
  2121. LDA <Music_Item_Cur; S7 x( k) [/ Q4 E
  2122. CMP #ITEM_MAX_INDEX0 D% ~4 D5 z' V0 C7 Q  q
  2123. BCC Next_Item_Set
    1 f' w" i& s) w2 n; @, Y  `" X
  2124. LDA #$FF
    % d, r1 v! D, }7 ?  i: v/ R2 c
  2125. STA <Music_Item_Cur
    - }2 m! _  r; h* v" Y
  2126. Next_Item_Set6 K7 a: D1 J: H. j2 x0 n" k! P
  2127. INC <Music_Item_Cur" O8 t& b$ ]7 d  J2 H9 @  l
  2128. LDA <Music_Item_Cur. R4 P! Q- N* v. p
  2129. LDA <Music_Item_Cur
    ( N# X/ i3 T& n* R! W" y' ?
  2130. JSR Reset_Current_Music
    8 Z; @0 z$ ~: k
  2131. Next_Item_Play3 `) n. h) F4 i" b3 a( {. h
  2132. LDA Data_Buf, f: ]( z3 s# x- O/ w6 S0 ^
  2133. BEQ Next_Item_End
    1 \0 B' M. \- z! R0 }' r
  2134. JSR Show_Page_Text
    3 B: q  M, [5 C$ p2 V: s4 r1 G9 a: m
  2135. Next_Item_End
      z6 ?) X9 `; I" j5 i3 V1 w
  2136. RTS
    % e8 _' O% W0 B  x% F2 e

  2137. ; {7 v: D6 W  e4 E
  2138. ;==================================================
    + c0 f9 J+ i0 K! `+ Z
  2139. Last_Page;上一页
    # u) a8 [4 j) X
  2140. RTS0 m) h# g2 B- s; B# G1 U1 @9 l9 U
  2141. 9 g2 c7 l% @8 l! C# U* i
  2142. ;==================================================3 N) P3 M1 o0 @5 J
  2143. Next_Page;下一页( T# d1 l- W# w
  2144. LDA #PAGE_MAX_INDEX
    1 B3 m/ _' I( y2 P; m: u1 _) n
  2145. CMP #$01, X9 Z6 \- O5 {: `* R2 c6 r6 f
  2146. BEQ Next_Page_End6 j- h+ p- C4 J/ |% u9 \

  2147. + W" m# W- \( m1 x: ]! `! [
  2148. LDA <Music_Item_Cur+ Q7 e+ ^: O& `9 t4 q% a5 @" \
  2149. STA <Music_Item_Last
    ) P5 u7 w, u: s8 D5 `, k- J' n

  2150. / H; g/ d- M* k, u6 u- H
  2151. JSR Get_Last_Page_Start_Index8 {) B+ f2 n0 I
  2152. ; v' L' N, e/ T: A. {5 ]
  2153. LDA <Page_Last_Index
    7 j8 h( x- a' X, s' k) d5 i
  2154. CMP #PAGE_MAX_INDEX  Z' g* e) q& {+ ]+ L, Z3 L8 p- n
  2155. BCS Next_Page_In_End_Page
    8 Y9 [3 q9 H0 E; \. N
  2156. 9 A% f5 P1 e% m9 p; a
  2157. Next_Page_Not_End_Page;不是在最后一页
    1 W1 Q2 V, J" ^" q4 @% D; X
  2158. LDA <Music_Item_Cur
    1 h# k3 ?6 P7 O3 Y+ q+ \
  2159. CLC
    " t7 o" c2 u" n1 g4 @$ p
  2160. ADC #PAGE_SIZE
    5 R$ |" A& B) d2 A" @- e  ?! {6 e
  2161. CMP #ITEM_MAX_SIZE
    7 `/ {7 U7 p+ E+ F/ L# K7 A  ~
  2162. BCC Next_Page_Not_End_Page_Less
    # |7 O( y. }  F( J+ b6 ^; T
  2163. LDA <Music_Item_Cur
    6 a; D8 ?# q; ]
  2164. SEC/ g9 Q; y0 k! C: z
  2165. SBC <Page_Last_Index
    $ O5 m! i' U* t; B+ Z4 p0 f8 Z+ ~
  2166. CLC
    3 R5 c. v% E  w: S% S# U4 X" y9 v
  2167. ADC #PAGE_MAX_INDEX$ |2 K$ _+ r1 t
  2168. CMP #ITEM_MAX_SIZE& _1 e3 \' z$ q" g, ~1 ]
  2169. BCC Next_Page_Not_End_Page_Less
    . l+ D( J; A$ I. c( I
  2170. LDA #ITEM_MAX_INDEX
    & {$ S! r) a9 r& l/ h
  2171. Next_Page_Not_End_Page_Less
    # _% J+ L* s1 ]+ \
  2172. STA <Music_Item_Cur
    2 T5 Z- n9 v1 V1 ]
  2173. JMP Next_Page_Reset$ m) @9 \2 S5 S( |
  2174. " Q. w! X' L# M; p; ]8 G9 E  Z
  2175. Next_Page_In_End_Page;在最后一页0 f  m9 b" I2 ^8 u
  2176. LDA <Music_Item_Cur7 Z3 ~/ ~9 H# s, |5 O
  2177. SEC
    % D. g. D0 N! O1 q8 R
  2178. SBC <Page_Last_Index
    ( s: J7 t! y/ b5 s; e2 y1 r
  2179. STA <Music_Item_Cur" `1 @% B1 E! S/ m, D) [/ F  Q: `: x
  2180.   i: A: k4 {, K$ ^8 @8 ~% o
  2181. Next_Page_Reset
    8 t) I  i5 ^! M7 _! k
  2182. LDA <Music_Item_Cur# Z) c' K: u2 r
  2183. JSR Reset_Current_Music% c/ u' f& o  ^
  2184. JSR Show_Page_Text
    3 R/ X9 Q8 W8 W9 r
  2185. Next_Page_End
    $ n$ b6 H' h( n. Y0 w, _
  2186. RTS0 j7 z7 Y; W& V
  2187. & U. g/ I; c/ E' n
  2188. ;==================================================8 Z1 C+ u/ Q' r+ W$ M; y
  2189. Disable_Text_Draw;禁用音乐条刷新
    . l7 |' q5 [' @: g" X, t5 w
  2190. LDA <Text_Disable_Flag7 _1 y, V2 f8 E0 ~& [. i: l- E9 a
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME) W( J4 [  e' Q% ?5 n
  2192. STA <Text_Disable_Flag
    6 h0 m% h/ i  }, P& J
  2193. RTS
    3 E6 p# Z) L5 K' [- B
  2194. ) V7 Y8 d7 E4 J1 ]- ~
  2195. ;==================================================9 \0 b! I/ ]5 ?0 j: ^
  2196. Clear_Last_Track_Name;清除上次曲目名& I, L7 W+ Z0 T# {+ u2 w# K
  2197. LDX <Music_Item_Cur
      R" L! h! ?8 E- _  V
  2198. LDA <Music_Cur,X
    + ~0 s' ^8 H. `: w" v& _. g
  2199. .IF Track_Name_Pos
    # z( i" B9 F( _( ^; E$ X
  2200. JSR Clear_Track_Info3 r. S! {3 \2 K" X' s% M4 E
  2201. .ENDIF
    1 |' i0 t/ W6 g6 l/ i8 h6 F6 L7 M+ B
  2202. RTS
    : p/ _0 n% i/ U  Y
  2203. ) ?4 H: {& I! ^% f) ~3 A: _5 |1 r
  2204. ;==================================================
    - w9 H* K: K7 D- \( [  ], T# x
  2205. Reset_Current_Music;重设当前曲目
    ( F* X4 J: V; j) M
  2206. + Y1 {; X0 d, m# K+ v7 h) g$ A' P
  2207. ;写入当前总曲目5 z3 M* G1 p" L5 c* W
  2208. JSR Set_Sound_Total) O+ }5 Z& E+ X; [% D" p' y
  2209. LDX <Music_Item_Cur1 r* L& u3 Q/ C! L* `
  2210. 7 t: a2 M7 k( p0 S  ^& w+ S
  2211. LDA #$002 {+ m' d$ R' d& x
  2212. STA <Music_Last+ I( ]' D0 `# ^' s
  2213. 2 ]) V4 K. ]  P3 z# K% q
  2214. JSR Sound_Reset_Proc+ P; I; {1 n  g) r% ~
  2215. JSR Music_Show
    / u; \( W# i9 h$ q+ m1 b4 l
  2216. RTS8 [; k" |3 k$ _9 A0 F" K/ g

  2217. & k# `8 e/ d5 `: ?# `( g
  2218. ;==================================================
    $ \& ~; g& ^" Z# L
  2219. Music_Song_Stop;音乐停止. A, s# o) b" A! G3 v
  2220. LDA #$01
    , d/ }$ T! `1 M) z
  2221. STA <Music_Stop_State( m  `; i" U  E9 A3 |+ e9 C8 g  N
  2222. JSR Music_Bar_ReSet
    3 C+ d# ?9 v- a2 n) U0 Z7 B
  2223. JSR Time_ReSet
    ( ?5 R6 }; e, j% H9 h
  2224. JSR Sound_Data_Clear
    4 n! D2 F* J" H! P5 x/ _
  2225. JSR Music_State_Show5 s! ~3 f5 s( W8 @* P% v3 S
  2226. RTS1 `; L3 X; F+ I  ?

  2227. $ X& e" v9 a# {, x( g
  2228. ;==================================================7 z1 r% p4 J& w( V- o6 c. z
  2229. Music_Song_Play;音乐播放+ P4 d# o+ Y: I$ F8 r' N3 _& ~
  2230. LDA #$00
    $ F6 j" W4 d/ ~' ^: a3 W0 D
  2231. STA <Music_Stop_State. ^% ?4 N9 h+ q6 u7 M. S
  2232. LDX <Music_Item_Cur
    / {, r3 j4 n) G! H
  2233. LDA <Music_Cur,X7 C" s6 v! C  X: v6 M, b
  2234. JSR Sound_Init_Proc9 C1 z% a& d& C/ q4 z5 F$ |
  2235. RTS
    0 c+ x% }+ J2 _* J' N6 u& L
  2236. 7 x# H, o, E3 y/ A' \2 Y
  2237. ;==================================================2 H( j+ c/ _* `7 e" @
  2238. Music_Song_Last_10;上10曲8 {! ]8 `5 P+ E& R2 ~  M4 N! g
  2239. JSR Clear_Last_Track_Name
    * K/ S& i9 I6 f. Z. y& H
  2240. JSR Disable_Text_Draw
    2 I9 n# h% }( a# S! V& e: c* R
  2241. LDX <Music_Item_Cur
    + p2 U9 ]4 e# e
  2242. JSR Set_Sound_Total
    ! y; N8 A2 Y( @# D7 D
  2243. LDA <Music_Cur,X
      [" c! u5 g6 C9 E
  2244. SEC4 p4 G% _; {, v2 r( b1 |
  2245. SBC #106 n/ P) l* L9 x- s, q, f% a1 w
  2246. BCS Music_Song_Last_10_Set
    * h4 G/ W1 {& D; f* M
  2247. LDA #$00; ?0 T. P8 Y" D! n
  2248. Music_Song_Last_10_Set' ?: W$ E3 X( X  S2 Y
  2249. STA <Music_Cur,X
    ! n( n+ i3 B9 r; }% V- L) X. r
  2250. JSR Sound_Reset_Proc
    . f1 q' i7 G% u
  2251. JSR Music_Show
    0 d' g: g8 a$ k$ g+ Q: R: N8 _. d
  2252. Music_Song_Last_10_End7 D+ U3 R' R2 A/ ~2 t
  2253. RTS
    + {6 U- u6 ?* E& h. n( `* B: g
  2254. 4 J8 Y# D8 b+ s9 ?, x9 ]" e; J
  2255. ;==================================================3 P2 e. l' t/ a, z
  2256. Music_Song_Next_10;下10曲
    ) \) g! M% d0 e/ {
  2257. JSR Clear_Last_Track_Name
      `1 O2 g/ |3 U
  2258. JSR Disable_Text_Draw& {4 S. Y& `$ m# {; u
  2259. LDX <Music_Item_Cur
      ~' r( w5 n+ Q9 s- D
  2260. JSR Set_Sound_Total
    + r3 B2 o& C- r; |% d6 O
  2261. LDA <Music_Cur,X
    / k5 v. A3 W& x' r6 ^
  2262. CLC
    7 Z& k3 p0 U* z+ N. Z
  2263. ADC #10" D& E! R5 ?: D% w5 c2 _, ~
  2264. CMP Music_Total2 g5 K' [$ p  x' B  E
  2265. BCC Music_Song_Next_10_Set  b# m1 p4 w$ P
  2266. LDA Music_Total& L$ o, G0 T  l0 h
  2267. Music_Song_Next_10_Set
    8 L' Z# k4 A/ b* e+ I2 j  b/ N
  2268. STA <Music_Cur,X
    : ]# z# i0 O7 i1 m* L
  2269. JSR Sound_Reset_Proc" M1 |$ B  U" {# a* z/ K% G
  2270. JSR Music_Show
    1 O8 e7 k* `3 G: b9 A+ b2 L% p1 F
  2271. Music_Song_Next_10_End
    1 R2 A9 W6 {  W2 P( z
  2272. RTS5 k8 O7 [  B( p! u" U

  2273. & t; w. N7 S- R7 p- U
  2274. ;==================================================8 p7 X3 d# ~3 n1 q8 M
  2275. Music_Song_Last;上一曲
    * J8 G* s. x1 c4 G% l* H; u
  2276. JSR Clear_Last_Track_Name* B% r; q3 }! ^& D
  2277. JSR Disable_Text_Draw4 `! B) z% n+ I
  2278. LDX <Music_Item_Cur
    , g2 g1 [, u$ m  w! g6 `4 i- h
  2279. JSR Set_Sound_Total
    9 m( O, o# v' `  _# s
  2280. LDA <Music_Cur,X" H) @  ^3 O/ i- }9 O
  2281. BEQ Music_Song_Last_Set
    9 c6 {4 x% Q. P$ D5 B% |& w9 E
  2282. DEC <Music_Cur,X
    $ ]6 @$ l7 L+ U& T/ L
  2283. Music_Song_Last_Set
    . [4 e) m7 `) U. U& f- P5 b2 d
  2284. JSR Sound_Reset_Proc. ~2 \# i  j6 G2 r) v
  2285. JSR Music_Show
    % _7 N  W" c5 K8 u
  2286. Music_Song_Last_End! D- p6 M3 \- f/ {: c! T! W
  2287. RTS' I0 i: x& o: |# J
  2288. 1 ~. ~3 O( b9 `: I
  2289. ;==================================================* s1 g1 G5 M9 p  J3 m0 w! o1 U
  2290. Music_Song_Next;下一曲
    - l& p# M9 d4 R' c- G8 e
  2291. JSR Clear_Last_Track_Name
    ! ]3 P6 M# d0 S% S
  2292. JSR Disable_Text_Draw
    8 I, X6 R' K7 ?, \* N1 Z
  2293. LDX <Music_Item_Cur$ s9 U9 Y) o& M
  2294. JSR Set_Sound_Total
    / v. o" ~) Q/ M. j( h" c# I
  2295. LDA <Music_Cur,X
    ' b) C$ S8 ?# y5 O  v
  2296. CMP Music_Total& m2 b$ e8 h- Y' U
  2297. BCS Music_Song_Next_Set5 Q- Y- F- z7 b+ `6 ]$ J, j  J
  2298. INC <Music_Cur,X
    2 W& T0 r0 ~' S" O: ~, f
  2299. Music_Song_Next_Set7 i  _7 @4 M* X- `
  2300. JSR Sound_Reset_Proc
    + @5 Z8 D0 r9 l1 l% M' c+ p
  2301. JSR Music_Show( i4 S+ D  \0 L9 y$ F
  2302. Music_Song_Next_End0 \) y7 P" {: t8 \. o* e
  2303. RTS
    & `; l/ L( z: J9 }9 S4 x! |

  2304. 0 z1 L; N( o8 m
  2305. ;==================================================
      C/ `6 L$ q3 K  I; O0 @
  2306. Change_Select_Item;改变当前选择项3 |9 R' b0 E2 |- \8 r( Q
  2307. ;--------------------------------------------------
    ; G/ Y" W- p3 N
  2308. Change_Select_Stop_Play_Item;停止/播放4 V6 p! e5 g( I' B2 ?& @
  2309. LDA <Key_Once9 {; k7 Q$ f) L/ v4 e
  2310. CMP #$10
    + a- V/ j. c7 g. H1 c- J9 Q1 l8 B1 P0 ]
  2311. BNE Change_Select_Last_Item
    5 h+ b8 Q9 N/ Y& e( I( ]( H+ a
  2312. LDA <Music_Stop_State& T4 h* T$ j) _0 d& w0 o
  2313. BNE Change_Select_Play
    " n/ k1 s) S2 B( N, |$ \8 J
  2314. JSR Music_Song_Stop  C3 h/ ]! t/ U' ~8 Q1 h
  2315. LDA <Music_Stop_State
    ! o3 j( B$ E* Q
  2316. RTS, n/ S; i- F0 E; C9 Y1 ~* K
  2317. ! C( q. ~% D% C6 J6 O' d% k
  2318. Change_Select_Play. k, ^- S) l4 i  |( A; P
  2319. JSR Music_Song_Play
    $ v& d* A; g+ Q' n0 {) }
  2320. RTS  @, D( Y% `$ T

  2321. 8 `1 x# q! M" U7 S
  2322. ;--------------------------------------------------  a1 Y% S/ h9 U; _1 ?
  2323. Change_Select_Last_Item;上一个专辑
    * L3 M6 L# k1 g) U0 C+ z
  2324. LDA <Text_Disable_Flag
    & P$ v; @  w4 l+ q# ~% L
  2325. AND #TEXT_DISABLE_ITEM, s# J- T8 o% [8 s4 B
  2326. BNE Change_Select_Item_End
    2 n- x" Y8 c4 u0 @
  2327. LDA <Key_Once
    & J, B# N7 }4 Q2 [
  2328. CMP #$08* ]) a1 s5 @: @9 t8 e  d7 m
  2329. BNE Change_Select_Next_Item
    3 q' G" e% r3 h$ _- a, M
  2330. JSR Last_Item
    : Q3 i$ U  C4 x$ |
  2331. ;--------------------------------------------------* r$ I  H# O0 @" ?+ _
  2332. Change_Select_Next_Item;下一个专辑" Q3 v; e4 |( V: k* [
  2333. LDA <Key_Once
    - Z/ X! |7 C( F( y4 i4 o
  2334. CMP #$04
      \, A  ]! M% K; _
  2335. BNE Change_Select_Last_10
    " h6 u, u- V9 `0 O* J- X" q! a
  2336. JSR Next_Item
    ' O7 p. f) @& `+ a  q! L( I9 O0 ?
  2337. LDA <Music_Item_Cur
    & q" `, h- [  O( D
  2338. JSR Get_Page_Start_Index6 l" H# Y; a/ Q  W: V8 r4 q
  2339. ;--------------------------------------------------
    + s! d- m4 _; @# m
  2340. Change_Select_Last_10;前10曲
    - e" q' s! J/ g' \, d
  2341. LDA <Key_Once
    4 W  ]' C( l# q% B* Y* j
  2342. CMP #$40
    8 J' P# a% W8 b9 P
  2343. BNE Change_Select_Next_106 l7 I# Q" q9 l8 T- ~4 a3 g
  2344. JSR Music_Song_Last_10
    8 k! R; B) `- P! j3 u+ c
  2345. ;--------------------------------------------------/ M* b: z7 |0 `4 \* R
  2346. Change_Select_Next_10;后10曲
    * C) D; G+ \$ x; a8 z' ?6 f
  2347. LDA <Key_Once  q" _  Q/ w: \! A& |
  2348. CMP #$800 H) l7 i9 k+ B8 {5 G: w4 S
  2349. BNE Change_Select_Last/ O5 z: J! G. s
  2350. JSR Music_Song_Next_10
    : W/ ^+ U' I/ S- _& `/ S
  2351. ;--------------------------------------------------
    ! p  u" R- T5 U
  2352. Change_Select_Last;上一曲
    ' Y& B0 w5 Q: y" N' e7 ^
  2353. LDA <Key_Once
    ) X/ O! X' ]" U3 d# x* I+ `
  2354. CMP #$02& [4 V7 a" m* n; X* h. F
  2355. BNE Change_Select_Next8 V  H3 W: U4 i8 d$ u3 Q4 c2 y4 r9 a
  2356. JSR Music_Song_Last
    : ?9 R) p+ G4 y" F: z
  2357. ;--------------------------------------------------
    4 j+ K  [9 n  n  f: k0 [
  2358. Change_Select_Next;下一曲
    6 l& L  B% B  k, g% T( x! c6 d
  2359. LDA <Key_Once
    ( W# A. {6 ?, s& f, d3 w
  2360. CMP #$01+ v  W7 \  Z+ @. v
  2361. BNE Change_Page_Next
    3 h1 l% d. Q* i! g
  2362. JSR Music_Song_Next
    7 N9 L) g" g/ G2 k# M! }
  2363. ;--------------------------------------------------
    + |' y+ ^+ f1 k/ W2 U
  2364. Change_Page_Next;下一页
    5 \' C( L" Y, L4 ?& b
  2365. LDA <Key_Once
    3 @: V3 p) p# o
  2366. CMP #$201 g# J4 D9 @* s: Y0 ^+ [# V
  2367. BNE Change_Select_Item_End
    ! o, s3 r# J: [  t
  2368. JSR Next_Page' Z% k  r* V0 l/ M. G. e
  2369. ;--------------------------------------------------
    ( Q; f: T: t) B) y
  2370. Change_Select_Item_End# @3 r) i& x3 A7 }1 T
  2371. RTS8 F0 x# z  q6 Z7 H% Y9 G" d
  2372. ) \9 d  Y5 |$ I* o
  2373. ;==================================================
    " _% f* E% c9 A" l
  2374. Show_Arrow;显示箭头光标8 e) Q1 O4 p# N0 d
  2375. LDA <Music_Item_Cur
    3 d6 J; `* N( P0 i
  2376. JSR Get_Page_Start_Index
    ; [3 Y8 i$ w5 E2 E) A
  2377. LDA #$00
    5 t2 B- C5 _1 ]) |. R9 [( K
  2378. STA PPU_OAM_ADDR
    % \8 f* n, P0 t- k9 G" f) c
  2379. LDA <Music_Item_Cur
    / g8 E$ k( S- ?
  2380. SEC- N- M. I' a, i4 N& Z
  2381. SBC <Data_Buf
    3 l- D' D" _' g
  2382. ASL A( R" x7 G: ~9 k% p. T7 J, P7 @: S
  2383. ASL A
    " h0 o3 w+ X. o) _! Q% \
  2384. ASL A) Y  W. _/ }' q$ f' Z# Z3 U8 b
  2385. ASL A! D! p1 j$ s4 E! m! p
  2386. CLC2 m( p! |: L' v0 v
  2387. ADC #ARROW_Y_OFFSET
    & F. _+ p* L( G6 A1 M) b; t; S
  2388. STA OAM_TEMP_ADDR + $00
    & h- }% M1 ]1 _2 |( s
  2389. ;STA PPU_OAM_DATA
    8 L# S4 d- }  c/ ~; b3 \% c3 _
  2390. LDA #$1F6 ^5 X) M: T& M2 L4 M
  2391. STA OAM_TEMP_ADDR + $01
    ! g- {3 v9 o" \, B3 Q) W2 O
  2392. ;STA PPU_OAM_DATA
    / d- k0 W+ Z; F
  2393. LDA #$00% C, T" s9 U& Y: x5 i
  2394. STA OAM_TEMP_ADDR + $02
    2 [- M" q: a  @- E; h
  2395. ;STA PPU_OAM_DATA
    + C7 T, l! E7 k; Z8 S% y
  2396. LDA #ARROW_X_OFFSET/ H* I$ z7 b& P0 [6 K8 {8 s
  2397. STA OAM_TEMP_ADDR + $039 N$ p. }! h& F) l
  2398. ;STA PPU_OAM_DATA, P. t$ _4 E# Z' v, P9 _
  2399. RTS0 {3 r& Y3 j  x/ X

  2400. 9 H- f0 v0 U# u
  2401. ;--------------------------------------------------( D) F! r' Z# @- M1 C0 M; w
  2402. ;命名表数据
    % k9 K0 U. ?: k+ K- T
  2403. Palette_Attributes% M' r/ y* O+ j
  2404. .IF SOUND_BAR_SHOW_ENABLE
    7 w- j1 j  ?7 p+ C& b6 \
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55' c9 ~6 [8 j, F8 k# I( G
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$550 V3 G7 g7 ~  x) ^" r
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75  r# y# x/ S/ Q) A
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA6 }8 g9 m0 i& e- J# Y3 o/ V. _: X( U
  2409. .ELSE
    * @& k5 Q9 V* [, E
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    ! o6 [' k, V4 }
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    * B4 ?" p$ @$ C% f
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75- P1 b9 C3 Y2 _, I9 M4 g
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA2 Q$ L/ h" e( E
  2414. .ENDIF
    4 U% h+ v6 R2 \6 U( }3 a

  2415. / d) K! x, h9 g. w! w4 p. m4 b
  2416. ;--------------------------------------------------) c: r2 N; t: Y, g1 B
  2417. ;调色板数据* L) n) l& d: t# M( t% `5 o3 o% G4 ?" _
  2418. Palette_Data/ _+ _/ J& `$ o8 J
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    * [" l- A* o8 S" a- H+ Y' }
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F7 s0 c4 c( ^: r! [9 R! D8 W

  2421. * y. \$ b/ X9 u, D5 f
  2422. ;--------------------------------------------------9 R) a& [: Y# ]# c* |- G6 i
  2423. Static_Text_Data: ]( N9 e* U5 p8 t8 B7 `
  2424. .WORD Static_Text_Caption_Data
    ! M) T# y* ?$ B; ?. G, p& u7 E, O
  2425. .WORD Static_Text_Author_Data' h* `- J( D# E& S- Z# d- `
  2426. .WORD Static_Text_Date_Data! ~4 ]! N7 A+ v
  2427. Static_Text_Data_End
    2 M, y* [' O1 C- p/ ^  g4 g, g7 l
  2428. & D# F2 F& Q. o5 E, ?+ t
  2429. ;--------------------------------------------------  n9 |; h) }* Z* o1 q- k4 C
  2430. Static_Text_Pos, J2 A& J" C! |$ z
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)1 [, `3 k! b1 n! _* Z  ^3 j3 c# T; M
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
    / w: I$ J! {! C/ \  W
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
    - h5 f" y3 U. E' u- m
  2434. Static_Text_Pos_End
    % @6 y" W! K. q. B$ n# N

  2435. - w2 i7 b4 Z/ D7 T
  2436. ;--------------------------------------------------# ?8 S  U% Z' [( U+ w9 M
  2437. Music_State_Stop
    3 J+ r5 Z7 ~9 e3 `1 d1 W
  2438. .IF SOUND_BAR_SHOW_ENABLE
    9 m2 \- i. h" \8 t9 g8 G* y
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$005 k; `4 e) w( c  c' s
  2440. ELSE3 X! i7 }+ Z. }; |& ~
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    ; w; L& @$ h6 Q8 T9 S3 m2 Q
  2442. .ENDIF3 v7 S8 f+ y" _& L  t
  2443. Music_State_Play
    4 z& s" p5 Z$ m
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$007 D& t5 m, O+ G% w  }- X

  2445. ( W* [+ f1 H5 e' D) D% Y0 ~
  2446. ;--------------------------------------------------
    % F) r9 t: D3 T0 c
  2447. Sound_Bar_Text_Data;声音类型文本
    2 A  g2 j* ?! d7 d8 w& Y' U
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
    / ~+ v/ f* K, K+ S3 s, G" x  z/ U6 y* e
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    2 _: K+ @# ^: T+ @" |
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"/ a7 x( t: C0 ~4 L9 ]& [6 e6 f9 m2 @
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"; i* G+ A( J1 ~( G, Y* \9 C
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00
    . e0 e& y" Z/ k$ P( m9 \

  2453. ' X' D( w0 f( l* p" V1 e
  2454. .IF Track_Name_Pos
    8 L2 Z/ @* I6 H. |

  2455. : S# c6 b2 ^" F- J& K+ e
  2456. ;--------------------------------------------------, d) R' C' z5 D
  2457. Track_Name_Addr_00;曲目名地址索引
    1 B5 t. V, _5 `; {2 L
  2458. .WORD Trackr_00_01: e& S' x/ [- a4 R6 }

  2459. 0 ?+ f/ U4 S8 k, v  X
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
    % C3 l. B1 D& m" b2 i
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"4 Q: o* K+ Z& l! z. ~! j

  2462. 1 A* E9 P# {. u9 k8 D7 h+ f
  2463. ;--------------------------------------------------
    8 z0 o  l% b; V
  2464. Track_Name_Addr_01;曲目名地址索引6 `1 E, S; {- O
  2465. .WORD Trackr_01_01* ?5 M0 s! {9 m. ]

  2466. - ?0 r" H3 a: Q+ K2 s/ R  @+ W
  2467. ;==================================================, G4 I" y5 ]4 U6 u# R
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"  O7 O' {% d6 D9 c
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
    0 m" i/ z  ~6 O# G- V
  2470. / Y0 Y# a$ S+ q# l6 K, u  A& Z
  2471. ;==================================================2 |8 d- \* J7 q$ Z; B
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    ( @. Q7 F3 l/ ?4 |5 Q/ a
  2473. .WORD Track_Name_Addr_00
    7 o' H# a% S6 \7 L
  2474. .WORD Track_Name_Addr_01# G, F5 b+ I0 ]/ b. V( b
  2475. .WORD Track_Name_Addr_01
    , n  q/ _0 [6 G# t- Y5 k/ ]

  2476. / D- E" z1 g. n6 y3 `) O; a0 j
  2477. .ENDIF* [9 ^# V! j% y) b7 t: A
  2478. $ J  K! Z9 o1 g5 V
  2479. ;--------------------------------------------------
    * k/ W. I4 S" b5 d" o" f0 N  {
  2480. Static_Text_Caption_Data;静态文本数据/ t3 \4 J, b2 H# U- W* P6 U
  2481. .DB 16
    9 w4 c' f" A& D& U
  2482. .DB "FC MUSIC 12 IN 1"/ }! P$ @9 C* D1 f
  2483. Static_Text_Author_Data' s* G8 u; P* {- z8 w" F$ V! D0 M
  2484. .DB 25
      z; V0 Z2 k/ l6 B' W' b/ R
  2485. .DB "EXTRACTED BY FLAMECYCLONE"4 r7 Z% @# p8 ]# t
  2486. Static_Text_Date_Data2 v* z- _. w4 }9 c. l8 t0 g  E
  2487. .DB 10
    * w- S0 |9 N. w5 m8 K( t
  2488. .DB "2023.07.23"
    ) i5 s' `  _5 R( }8 E; y! V2 f; _" y
  2489. 5 `* P  I  [2 ?* H" |9 M9 y
  2490. ;==================================================
    6 r' M# h% U; P- e$ }
  2491. Music_Collection_Name               ;专辑名间接索引
    ; L9 ^3 Z8 n0 l- ]5 W
  2492. .DW Music_Collection_Name_000 D! a; \3 ]8 z9 D
  2493. .DW Music_Collection_Name_01. T. ?2 B/ f1 F1 z
  2494. .DW Music_Collection_Name_02
    ; f  f3 n1 K' W2 u' l
  2495. .DW Music_Collection_Name_03
    & n, B$ C1 q2 C- n% X
  2496. .DW Music_Collection_Name_043 H! O5 ^/ z( _1 c7 f* a
  2497. .DW Music_Collection_Name_05
    * x# ?  F+ N4 g9 S! `
  2498. .DW Music_Collection_Name_064 J- p9 c) j5 }9 P
  2499. .DW Music_Collection_Name_07( p- ~# R$ l9 e' g
  2500. .DW Music_Collection_Name_08! q( [' }1 i- Q- C
  2501. .DW Music_Collection_Name_09
    # v$ _3 Q( G* j' r
  2502. .DW Music_Collection_Name_102 B# T* u/ h% N' y9 S$ o- Y, L4 G
  2503. .DW Music_Collection_Name_11
    / K# h0 M* C# F

  2504. - _. I- K, {. g+ `9 t! w% C
  2505. ;==================================================
    . v. S( k7 _& U( m2 ~
  2506. Music_Collection_Name_00            ;专辑名文本数据" b  N( w$ y+ ]+ W& ^
  2507. .DB 11,"1.RAF WORLD"' @- w/ u( X+ d( |/ b2 \; l
  2508. Music_Collection_Name_016 M) t+ ^) q0 N! J
  2509. .DB 15,"2.FINAL MISSION"
    0 R# Q+ X6 u6 l' c+ a7 |
  2510. Music_Collection_Name_02
    / _- G3 M; G6 p: H( V8 \
  2511. .DB 06,"3.KAGE"
    ( o# R! Y7 w& k0 m, i: e, [
  2512. Music_Collection_Name_03! D4 P- y: D$ b6 S5 B
  2513. .DB 16,"4.DOUBLE DRAGON"; X. d. d& Y$ n
  2514. Music_Collection_Name_04
      }; W8 o. }; Q* I8 l: B( P
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    9 o$ R4 }: S* W$ @. t* z
  2516. Music_Collection_Name_05, ?6 o4 ]3 `' D  |7 p
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    1 X" ~1 t3 f& j; X' T8 v
  2518. Music_Collection_Name_06, k/ s  I  R. ~5 Q
  2519. .DB 09,"7.ROCKMAN"
    # V6 |5 q1 V$ c" f! ?
  2520. Music_Collection_Name_07$ F) r1 \6 O) ]
  2521. .DB 12,"8.ROCKMAN 2"$ v( [. C: s: A( m
  2522. Music_Collection_Name_08
      y( T. f5 e: Y' ]  e
  2523. .DB 12,"9.ROCKMAN 3"& o' L- _$ @+ ~
  2524. Music_Collection_Name_090 K+ @0 r7 F& K. T: c0 x0 q. J
  2525. .DB 12,"10.ROCKMAN 4"7 Z/ y5 t4 j# x
  2526. Music_Collection_Name_106 o8 W$ d: |# A" H( C' I& N* _
  2527. .DB 12,"11.ROCKMAN 5"
      }$ k+ `* f( H
  2528. Music_Collection_Name_11, }- y; U% R$ w* c% ~
  2529. .DB 12,"12.ROCKMAN 6"
    0 e( h) o, g4 J- {" N8 V% B% S5 b; x
  2530. / r2 V1 w% S/ i' O& ?$ R% G
  2531. ;==================================================# `! s) V  h& _) T$ c% t
  2532. Track_Name_Addr_Flag                ;显示曲目名标记
    " R6 i/ n$ |( e" O% C' @! N" D
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0
    2 Q$ I7 C+ j1 f' v+ |

  2534. : u4 E, Q9 ^* ]6 f" u
  2535. ;==================================================; p3 o0 R& T4 R2 d- F2 F
  2536. Item_Pos_Data                         ;光标箭头位置: p# I; f: s4 t4 \6 Y% ]8 ^
  2537. .WORD ITEM_SHOW_POS
    " i- ~3 V! {" ~' v. L7 W( _* {
  2538. .WORD ITEM_SHOW_POS + $0040
    , q# X; s) ?) _/ c
  2539. .WORD ITEM_SHOW_POS + $0080
    ( k: w! N5 e+ z: D; W+ m- ^: s
  2540. .WORD ITEM_SHOW_POS + $00C00 f5 x9 V- R$ g% J4 P: @7 J
  2541. .WORD ITEM_SHOW_POS + $01007 e1 v, B, y, I
  2542. .WORD ITEM_SHOW_POS + $0140  h: `- O: }( h- a, C& R
  2543. $ `1 N$ a+ ^" q/ ]2 ]! M$ O
  2544. ;==================================================/ w% g# {8 y1 w3 X0 n
  2545. Sound_Init_Port                 ;音乐初始化入口地址
    # e$ d+ g( a8 W* k0 T
  2546. .DW $BFC8
    # j: B, G  U/ k
  2547. .DW $D7F0
    ) z" z7 [: p, K; s; t1 S
  2548. .DW $9FC00 M- V/ M# x" s; t; _0 y4 w
  2549. .DW $BF70
    0 p! p# c) w; F
  2550. .DW $8003
    2 \) ^; U8 t# \. E* ~1 c
  2551. .DW $BF30
    / i1 E3 u9 i0 A+ l3 p* o, a8 @
  2552. .DW $9003+ i% B. t' b( w" g6 G7 I
  2553. .DW $8003
    9 |! V3 K8 R  r. ^7 i, j) u
  2554. .DW $8003
    % Q0 {4 y  ~$ e' R4 Y5 r3 \
  2555. .DW $8003
    % p" B) P7 c; @/ c
  2556. .DW $8003
    1 E( I! Z4 G3 `9 W0 W
  2557. .DW $8003+ k5 ^# G7 y+ t' M. W
  2558. ( e: `4 X/ h9 Y3 j  H& @+ q
  2559. ;==================================================
    4 v; b, i4 Z: V2 h- Q& ~% U- e
  2560. Sound_Play_Port                   ;音乐播放入口地址& a, A! a, A; W9 m5 ]
  2561. .DW $8000
    3 M! O  v; |- i8 }% J. L) }* @
  2562. .DW $80017 r4 l& h/ T' h7 t
  2563. .DW $A000
    . v7 L; ~' O0 z+ P
  2564. .DW $8003) N) _0 l' B9 j/ N( f
  2565. .DW $80000 U- H, L1 ?/ X1 H3 R
  2566. .DW $8003
    & ~( V5 u' l0 ]! P' z' w
  2567. .DW $9000
    . k" o$ m' k" u9 w6 E% r
  2568. .DW $80000 M+ |' }' G; v$ P4 r" c; V
  2569. .DW $8000
      z! ~, _, r0 r. Q1 v, A, ?
  2570. .DW $8000. M. f! y: W4 D# |8 I7 o
  2571. .DW $8000
    8 B+ `& \9 V& @
  2572. .DW $8000
    " R0 x8 A) O! f# X8 Q
  2573. ' p' q" l7 ], F: `
  2574. ;==================================================  [  G( D: Q2 x2 I* U
  2575. Sound_Reset_Port                  ;音乐重置入口地址  q) Y0 v5 d5 `" Z% [
  2576. .DW $0000
    ! b( b3 ?" B7 I% B" [0 I
  2577. .DW $0000. j( j( J4 W! F0 i5 t; c# J" N
  2578. .DW $0000
    3 d3 t" l: }9 h' f
  2579. .DW $00005 L" b8 z. ^, I9 P
  2580. .DW $0000# X0 B: T9 s. S1 H2 i6 e9 O8 z3 G
  2581. .DW $0000
    # h1 R4 W/ T# x/ y$ I& Z# F: a3 m& {
  2582. .DW $0000
    : R* y4 C- b* B( T& x  h3 b
  2583. .DW $00003 R. A- w' B, }+ ]3 ~; L" i
  2584. .DW $0000  J# b) r+ ?2 a
  2585. .DW $0000/ I3 o$ W7 O( O- U5 Y3 c* `+ e
  2586. .DW $0000! x6 {7 J! S& f8 _" n0 h
  2587. .DW $0000
    ( Y" j4 Q6 }$ j5 R2 O9 B
  2588.   x- Y9 n' L! b2 L. |
  2589. ;==================================================3 r! g: d9 Z/ x' H" X/ ~
  2590. Sound_Total_Port                          ;曲目总数
    * C1 F2 H& y1 r% }2 i2 z7 T: j
  2591. .DB 38- l9 b. l" i$ m
  2592. .DB 33
    0 o! g/ c: P& a' }; M9 R- F6 y
  2593. .DB 49/ @. V& q2 k7 U+ B
  2594. .DB 413 E0 t4 j1 C9 S3 r3 f! n$ F6 V4 r* w
  2595. .DB 83
    ( S& m' I8 O; ?( ~
  2596. .DB 709 w" I4 K8 I1 l/ _
  2597. .DB 50* ~0 Y! a# K8 ?$ [
  2598. .DB 67, P" e% G0 _) E4 Z% }: A5 [$ m7 E2 b
  2599. .DB 575 @; f6 E& h# E4 E
  2600. .DB 71( H2 J. u6 g# k4 q$ C# l
  2601. .DB 76
    # K' A# a; O9 b( |8 {3 X7 m
  2602. .DB 102
      U$ h* A( S  u$ A

  2603. 0 {& R( c- K- ^
  2604. ;==================================================1 u1 C. @$ v. A0 ~$ D, j( N& [
  2605. Sound_Start_Port                      ;起始播放曲目
    5 q+ d/ C( ~% P& }
  2606. .DB 00
    3 X/ @1 f( r6 s3 @2 V+ g1 M5 S
  2607. .DB 00
    # g/ t8 g1 i/ k* R/ ^
  2608. .DB 00: Y" l) \2 C$ m* i# p; I
  2609. .DB 00$ R9 J1 o9 W$ g6 E
  2610. .DB 005 H& w& q% D6 J; T) k. O. b
  2611. .DB 00! A) j. G- F8 C
  2612. .DB 00: _0 o! `0 y" G6 {5 H. n: O' K
  2613. .DB 00# ^1 ]: p3 B1 W7 Z
  2614. .DB 00
    . y& A  V: d& H. t, H. E: J' y
  2615. .DB 001 k- a0 k4 v- @# l1 ]1 ]
  2616. .DB 00
    8 U1 U/ ]+ j) f% y
  2617. .DB 002 A/ W! b2 `1 s. Q
  2618. 4 c3 C8 Z; [7 |, }
  2619. ;==================================================
    : Q) R9 s/ k2 D" K1 k, K0 ^
  2620. Sound_Bank_8000                      ;专辑bank_8000" N7 c, N9 f) @" F" g5 l  G: d
  2621. .DB $10
    ( I1 S2 J2 d- M$ F) C
  2622. .DB $12, i" s3 h. {& F& Z( C7 b
  2623. .DB $149 _: f. D" B8 k2 g) ^6 n: f  m
  2624. .DB $16
    . p+ H% T" h2 I9 a
  2625. .DB $18
    # t4 ?6 `0 y1 Y4 @2 N# v) i& \
  2626. .DB $1A
    ! J8 z9 \- k. H, Y

  2627. ( \( d# \: x* c! k7 u6 Y
  2628. .DB $00
    ; j; M# [  O1 f+ x
  2629. .DB $02
    . Y6 d+ }4 _. R  t
  2630. .DB $0D2 s! l2 V9 M3 A  E
  2631. .DB $04% T+ ~6 ]  h) m. i8 c  p% ~
  2632. .DB $07
    0 e: E! ^/ O' l/ ^* @& J' h
  2633. .DB $0A7 n4 g. i  o6 H) M  }9 }
  2634. . `; ]- f6 ?! c

  2635. # l0 y& c/ j1 ?0 r* B4 h" y
  2636. ;==================================================! n/ n" q; q" k! _
  2637. Sound_Bank_A000                      ;专辑bank_A000+ Z0 |/ g3 x# }3 q: |$ d; L; R; e3 ~
  2638. .DB $11' P( }' h* h% X7 I; I
  2639. .DB $13
    ( z' L4 W# z  n; n
  2640. .DB $15% Q% W6 q* t3 i6 j: x
  2641. .DB $170 p+ D2 ]% q- ^, M
  2642. .DB $19
    3 ?3 v: W1 m8 Z/ P
  2643. .DB $1B" ^3 V( a8 u2 s
  2644. % U3 y% h. u$ ~8 u, E
  2645. .DB $01
    # h( ~& `% K+ d
  2646. .DB $03' S! i' t0 y2 {: h% _; r3 z% O
  2647. .DB $0E
    0 f. ]9 p2 ?  U) K  B% P- F
  2648. .DB $05
    2 d# S4 b+ C- g$ L4 {
  2649. .DB $08& n$ K; A% e( {, U9 w3 |
  2650. .DB $0B
    1 _) e* u. P# [1 p- k" m8 W
  2651.   E+ Q6 ]7 o: Q' u
  2652. & K9 q$ O# T& a0 b: w
  2653. ;==================================================' X  G# i1 Z! k, b
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    7 {9 l2 u: }% T0 L! a; p
  2655. .ORG RESET_ADDR
    . Z% V' X0 A! A$ J& z6 p/ u
  2656. # e  J- a( V' y" e6 c+ x) j
  2657. ;==================================================
    / g4 M$ G7 \6 [, R8 j: U* r8 l
  2658. Switch_Bank_8000;切换bank到8000-9FFF# I6 _' F9 P8 z( m; Z* W
  2659. PHA7 s1 A4 K* @; k, r+ n3 j/ J# S
  2660. LDA #$06
      l4 }0 F: J* B& n) E6 g$ \
  2661. STA MMC3_BANK_CTRL
    $ q) x$ d6 r8 V2 ?
  2662. PLA* W0 }" C) D( G
  2663. STA MMC3_BANK_DATA
    5 Q/ D- `& }8 h8 S1 o; o
  2664. RTS6 D3 |1 s( Z' ]9 F
  2665. ( h% o, S# Q2 E7 w: G
  2666. ;==================================================
    7 E, q& s- @- c, P6 Y2 `1 I6 x
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    ' E6 c% @& ]$ B0 ~
  2668. PHA
    : }) H: H* n+ Y, I1 X) p+ c! `
  2669. LDA #$07
    . }7 t9 r9 _+ f2 ?
  2670. STA MMC3_BANK_CTRL
    0 `  N5 Q0 P% H6 ^$ o" [* j
  2671. PLA
    1 t: U0 Q& g7 E
  2672. STA MMC3_BANK_DATA( r9 L; x7 T) V
  2673. RTS
    5 r. t# |3 d, W9 `4 e% I

  2674. 8 Y: o4 @- w  Q% x6 z# A0 c1 X
  2675. ;==================================================6 ?$ ^/ w0 A/ X$ {. K# O* d
  2676. Switch_Main_Bank;切到主程序bank
    % q) C6 n) h) s; x, ?, I
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK' V: s! i- N  ?5 y+ m1 [3 D
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    ' X! I4 U) h* c1 v# G
  2679. RTS
    ; x2 g3 `6 S: a$ f4 t

  2680. . c6 l& M/ L4 y% Y/ Z1 s6 x
  2681. ;==================================================
    + t6 k6 F5 F; ?
  2682. Sound_Reset;音乐重设(如果有的话)$ T& E0 i# |* F1 R4 I
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    5 q9 g8 W, ~0 {- P% _3 e1 P
  2684. JSR JSR_Addr_Op        ;执行音乐重置
    + E2 s0 X0 ]& f+ }
  2685. JSR Switch_Main_Bank   ;切回主程序9 C: C1 ?7 I" j! q4 o- u% B& G
  2686. RTS( b9 ?4 Z& G6 H7 s) x' E

  2687. . q6 y' O3 _7 ~/ i4 V& |7 d
  2688. ;==================================================9 l0 Q) p/ }! k. d7 u8 q
  2689. Switch_Music_Bank;切换音乐bank# r* G: a! Q- ~2 \; S. S: k; k
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号5 a2 \& p0 ^7 c" B& R) _* s9 |
  2691. LDA <Music_Bank_8000+ ~5 m( U% z8 G) \0 }8 G1 z# g
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank/ n1 m# ]0 o! v. {( T1 O
  2693. LDA <Music_Bank_A000
    ' m+ ^- h/ F6 J' {. o
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank: i# r& w, v& }( K0 w4 f
  2695. RTS# R: n2 O; c( c9 K; I0 X- b5 p0 p

  2696. 5 x% u. h9 [8 _# v. T
  2697. ;==================================================7 x1 a: q/ v5 Z0 L8 m
  2698. Sound_Init;音乐初始化
    0 O8 Z2 I$ C8 {2 z2 }. z" D7 d  [; I& }
  2699. PHA# S9 G) ?7 x) ~: v1 r+ Q. l+ f0 U
  2700. JSR Switch_Music_Bank  ;切换到音乐bank) w* P3 i0 C4 {1 x1 w. s8 _
  2701. PLA
    # S: H" t3 I% K3 x! k1 b
  2702. JSR JSR_Addr_Op        ;执行音乐初始化
    $ r: C+ ?. O/ Q: K' R
  2703. JSR Switch_Main_Bank   ;切回主程序
    + \! |$ R) z' H8 J+ H' ]
  2704. RTS7 ~5 L! e' P) S. U" N$ {+ v

  2705. 2 N5 ^$ h+ B$ e6 Z* z
  2706. ;==================================================
    * d" V) E# Q  P, t8 n
  2707. Sound_Play;音乐播放
    4 F9 \9 q0 \8 g6 J$ s8 {
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    ( i6 O' ]: r( [
  2709. JSR JSR_Addr_Op        ;执行音乐播放
    ; D7 y$ e' L3 S* B/ N4 w' S
  2710. JSR Switch_Main_Bank   ;切回主程序
    9 R3 P+ T% @4 [
  2711. RTS- ~/ d/ b5 o1 z# q

  2712. : _$ H. g! V# D( s, l% y$ ^
  2713. ;==================================================
    ) T. j+ N" C* S8 @1 I$ t+ O
  2714. MainLoop;死循环
    " k: y$ w/ [" I8 h" v1 |
  2715. JMP MainLoop
    ! d6 b, a: i$ w# l6 n; C

  2716. 8 _1 g& U1 f8 J' W0 v5 x
  2717. IRQ_SUBPROCESS_JMP = 0
    % Q  h! I  j. u# v% z
  2718. 0 R$ d( D  ^" V" L* z
  2719. .IF IRQ_SUBPROCESS_JMP
    . u5 W" y% X/ p( M" f
  2720. ;==================================================* z, r6 {9 L* P, O) d
  2721. IRQ_Process_0;IRQ处理过程0
    & e/ `  @& j  w+ V3 L
  2722. + _- a3 g9 B' c, p: U* H& }. C& R
  2723. ;15条扫描线后触发IRQ$ ~8 U) U$ a0 h& }  d
  2724. LDA #15
    9 v! g% Y0 q% b3 c+ R! V- K
  2725. STA MMC3_IRQ_LATCH+ y' U* z% ~) `
  2726. 0 z# _& [% X8 H* d( P2 v! E
  2727. ;设置屏幕滚动0 o: g8 D6 M6 V8 P% E
  2728. LDA <Scroll_H3 }. Q' c& U6 g" ?0 z" d; t
  2729. STA PPU_SCROLL
    2 ]2 _' G- ?4 @6 |$ |: z; }
  2730. STA PPU_SCROLL  P% U( O$ B1 [1 [
  2731. + X) r% G5 D9 Q5 T
  2732. IRQ_Process_0_End
    , k3 A5 I9 u& `
  2733. INC <IRQ_Process_Index9 S1 B/ \/ a; u2 A; n9 B
  2734. JMP IrqProgramEnd
    5 U4 A4 j! \' `' D$ `! L7 v8 s
  2735. * J( j4 ?1 j+ O% i& M
  2736. ;==================================================8 f3 i+ v( D( l6 g+ W2 L' r* P+ @
  2737. IRQ_Process_1;IRQ处理过程10 R4 j9 C3 V8 }

  2738. 8 m" `" ]2 `! X
  2739. LDA #555 O: a' \. X4 u: g/ }
  2740. STA MMC3_IRQ_LATCH
    % m( a2 k8 G5 ]6 Q7 K, J. z. a
  2741. ; n8 C+ e: }9 z  n* O% v: A
  2742. ;设置屏幕滚动, q2 `8 ?$ V" V: ?/ q; h
  2743. LDA #$00
    9 A, R' e" |0 J9 _# T( _& P: w
  2744. STA PPU_SCROLL
    1 u0 r# _0 b  z4 ?3 ?
  2745. STA PPU_SCROLL. w# u- t4 }  l, R! t8 Y) H* G
  2746. 0 }, ^1 I9 d. _
  2747. INC <IRQ_Process_Index
    / X1 B+ O8 x2 ^2 h3 Y- [, h
  2748. JMP IrqProgramEnd  L$ l# A' ~! T

  2749. - F, N3 W+ y% s
  2750. ;==================================================" L% G+ P, m. X& e: Z
  2751. IRQ_Process_2;IRQ处理过程21 F: G! O, K; g/ t, E: z
  2752. ' J' j+ I: L- ], ^- U: g4 ]
  2753. LDA #15' M2 X4 i5 Y( Q- u( f5 w% s1 w1 ~1 \
  2754. STA MMC3_IRQ_LATCH
    ) J8 D- H  E, C
  2755. 5 C& Z8 ?- F$ q( P
  2756. ;设置屏幕滚动9 z& {% H) Q1 f! [- q5 V
  2757. LDA #$00
    + z1 v0 p4 o5 R/ d
  2758. SEC* H; |0 ^1 u4 I+ _' K
  2759. SBC <Scroll_H# i4 j. x3 ]: T6 c
  2760. STA PPU_SCROLL
    $ h8 |" F3 x/ Z% F/ T5 e: |
  2761. STA PPU_SCROLL
    4 I7 D3 T' {9 d

  2762. 4 A: W3 X8 w- X, d' h9 {
  2763. INC <IRQ_Process_Index6 O" g- l) ?# F# g% ?
  2764. JMP IrqProgramEnd- Y9 o/ A% S/ ^# \  }

  2765. ) }" q' V! U6 y3 {) M; V
  2766. ;==================================================- N* J! J0 N  u% i2 ?( R& p9 q4 U* y
  2767. IRQ_Process_3;IRQ处理过程3
    9 q" {) B8 }3 R5 }- e/ W$ V; B

  2768. 5 }. y5 b+ r: s
  2769. ;设置屏幕滚动( N7 x8 L( J6 }9 p7 ~% o. ]
  2770. LDA <Scroll_H7 T6 i/ E; e0 y& ]. ]& W
  2771. STA PPU_SCROLL* d' G' F1 e3 G
  2772. STA PPU_SCROLL3 A7 I$ q- Q6 M- b- n2 u  e

  2773. 6 l8 y" f$ H) O2 g
  2774. ;禁用IRQ4 k; o3 d3 ]" `3 V
  2775. STA MMC3_IRQ_DISABLE& |: x: Y, p( B8 y
  2776. JMP IrqProgramEnd2 _/ O. h+ T* S% W8 H3 N

  2777. 2 ?; O. w. {0 k* ^
  2778. IrqProcessAddr
    $ T" l8 a& B2 q/ k3 _. i% U
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    " G: V7 g" u& N! T7 `) Z; O3 n
  2780. 4 u' d1 [8 G4 X
  2781. .ENDIF
    ; X8 F! T. _# i0 E* ^( C+ G

  2782. 1 i+ b7 C4 }8 o# L3 p+ @( l
  2783. ;==================================================/ {# r2 n1 d* {2 S
  2784. ;IRQ滚动模式常量8 q- n4 O1 |! [- o1 o; }
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
      z; O. [: C( I0 d" y
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动4 h1 w- A% j! |3 a. V
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    3 ]0 K7 v' @1 O& f

  2788. ! J/ M. y5 P8 e: o
  2789. ;IRQ扫描线数据3 R* f2 a! V% Z+ L3 W+ o( D$ s$ g
  2790. IRQ_Scanline_Data
    * w' K" y! Y1 I4 c* G5 t
  2791. .DB 8
    + f' D; k2 `+ ]- M7 r' d$ H
  2792. .DB 549 N- e& K% w, C6 J7 A# X
  2793. .DB 82 `; G6 Y1 a+ x9 ^0 Q) C% ]
  2794. .DB 00 ;关闭IRQ& K5 p- j- C# I  E) x8 E5 h

  2795. ! G8 O" C, k1 B! o
  2796. ;IRQ滚动控制模式
    ; d' F. m! Z6 C( x
  2797. IRQ_Scanline_Mode
    & t; M  J+ }, p/ ]7 r$ D
  2798. .DB IRQ_SCROLL_MODE_ZERO" [- ^' L8 n3 T9 N5 K$ r3 t
  2799. .DB IRQ_SCROLL_MODE_ZERO1 ]! g0 ?1 _) }
  2800. .DB IRQ_SCROLL_MODE_RIGHT0 `4 @3 j2 y2 @0 M# q
  2801. .DB IRQ_SCROLL_MODE_LEFT- A- [: U3 @) T: d8 h) y
  2802. ' `* k: G& t3 {, L: H
  2803. ;==================================================8 t6 I+ ^, T; z! i  ~1 t4 L; n
  2804. ;IRQ处理
    0 d$ K/ R' ?7 j* B7 `/ S, {
  2805. IRQ_Process
    ( q7 P' y& x  G6 K+ f7 v, e9 t2 `
  2806. LDX <IRQ_Process_Index
    & X& Z( J& N1 \. _3 ?
  2807. LDA IRQ_Scanline_Data,X
    ( Y8 y2 Z6 K0 b' Q9 m4 @
  2808. BNE IRQ_Process_Latch# d  B7 U. G: x/ A0 k8 ]0 Z
  2809. IRQ_Process_Disable;禁用IRQ
    2 I! |8 ~5 u; u' j" N
  2810. STA MMC3_IRQ_DISABLE5 R( q& \7 D8 K! Y1 e' ^1 d6 X$ F
  2811. STA IRQ_Process_Index
    ; h: N: J8 _' K; X, d
  2812. BEQ IRQ_Process_Scroll1 a  }5 p- `" q( K& y
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    - {! N7 ]8 J) r5 P, i
  2814. STA MMC3_IRQ_LATCH
    - [. C: V; M; l$ v# T3 N4 y& r
  2815. INC <IRQ_Process_Index
    " G& C8 ~, ?. U" f$ p  W
  2816. IRQ_Process_Scroll;IRQ滚动控制
    7 U5 N/ f; e( V
  2817. LDA IRQ_Scanline_Mode,X
    2 @. L, d! j( U( \6 _
  2818. CMP #IRQ_SCROLL_MODE_LEFT0 E/ p& h2 s# g6 @+ K
  2819. BEQ IRQ_Process_Scroll_Left# i. H  |" B  O6 d" t
  2820. CMP #IRQ_SCROLL_MODE_RIGHT
    % C5 d; A1 @, w' C# v0 y
  2821. BEQ IRQ_Process_Scroll_Right8 F$ D$ u" W' w- k
  2822. IRQ_Process_Scroll_Zero;不滚动5 f+ J  \7 K' T0 `; [
  2823. LDA #$00. `0 |# r6 _$ [( o) A, w# m
  2824. STA PPU_SCROLL0 m( h+ J  y. @+ n- ]
  2825. STA PPU_SCROLL
    6 T8 c" K" _; g7 b! \) k$ g+ Q6 ?
  2826. RTS
    - J3 R# `4 Z7 N% {/ y$ m
  2827. IRQ_Process_Scroll_Left;向左滚动4 \9 s. u, Q' f) ]. o$ A( k% v
  2828. LDA <Scroll_H
    3 H8 h' z6 l" V% ?" m9 d
  2829. STA PPU_SCROLL
    / ^+ O( {2 Z; Z: d6 k
  2830. STA PPU_SCROLL
    . x& m- X, l  B* \! l
  2831. RTS
    ( r7 w" Q6 _3 Y! ^+ m0 K
  2832. IRQ_Process_Scroll_Right;向右滚动
    # N. k) q8 T$ u0 g6 o, E4 G7 H
  2833. LDA #$00
    + u9 F1 ~4 x7 L8 {" N( g
  2834. SEC
    ( q$ B" E8 D: q5 x
  2835. SBC <Scroll_H
    7 X2 c! Q* V% R) u0 V
  2836. STA PPU_SCROLL
    ; r! O5 T. S7 J3 g: S: V- ^
  2837. STA PPU_SCROLL
    5 K( |, `6 z: U$ H$ t
  2838. RTS  C* g" Z7 E/ ]* |1 k7 |4 a% X

  2839. ; P, K! A8 {) d4 m
  2840. ;==================================================
    ! }6 ?. @6 x$ |( K! a# h5 x
  2841. NmiProgram;Nmi中断处理
    1 V/ j7 Q( u+ E
  2842. PHA
    # d2 Z+ ]5 N. S& Z) X
  2843. TXA% Z/ B" F3 j! t# K% P
  2844. PHA
    8 @9 z) a9 h0 R* c1 }: f  v
  2845. TYA: k: ]0 q" w$ m5 A
  2846. PHA
    / u- Z& a7 o! ?

  2847. ! _3 g- C: F5 U0 H* X. C/ @: q& K+ A
  2848. ;读取清除Vblank标志, 防止重复进入' i0 [( I1 s! G. y% ~
  2849. BIT PPU_STATUS$ e4 A* |" h0 z: q7 i2 \

  2850. ; a& u9 c( @. ]( z" x0 L2 o
  2851. ;切换主程序bank# y" k: R  s/ [  c
  2852. JSR Switch_Main_Bank
    3 u) `" |# s" [0 ]

  2853. + F1 [. z- V5 r+ |- w7 K
  2854. ;Nmi处理( e* g# I1 ]# e/ M
  2855. JSR NmiProcess! Y( l; z: G$ x- B7 T9 j

  2856. / r+ P2 j7 h8 d: D% ~1 H1 c2 f
  2857. Nmi_Proc_End
    & s; i, ~* @; t4 ]0 x
  2858. PLA
    5 b/ R$ ?( U1 `" F8 z- M
  2859. TAY2 g% I  T0 ~5 }3 g  x) Q
  2860. PLA
    : s& z  j9 n5 O9 ~  Y
  2861. TAX
    / h  K) a) s- S: q* F
  2862. PLA, n0 P' V" W& t& e1 C& ~
  2863. RTI
    0 V& X9 n4 O+ I$ s

  2864. / f  |+ A8 |/ G2 R
  2865. ;==================================================2 F9 w4 t  m% l6 E+ r$ R
  2866. ResetProgram;重置中断处理
    1 G. g: V1 L  k
  2867. SEI
    * Q7 C: H8 g$ p
  2868. CLD
    4 R3 Q; x, j) @2 b
  2869. LDA #$00/ Q% E/ q" w6 }* h
  2870. STA PPU_CTRL
    ) o9 G4 }0 f+ [* j7 K
  2871. STA PPU_MASK
    + b, b  d" ~' d. }

  2872. $ e8 o9 h  c4 I. [- ?, N
  2873. ;切换主程序bank
    ! Z, k; P0 p# }7 S( c6 A
  2874. JSR Switch_Main_Bank
    $ E0 m1 E" }! q  D% t* |6 \) b
  2875. + F! v" i. g0 B  T3 V: }
  2876. ;程序处理开始9 |& c- v& T3 A/ x5 Y( H
  2877. JMP ProgramBegin" U1 q5 L7 n, Z- K0 ]9 \
  2878. " G/ E, s$ z5 c1 A& r2 C
  2879. ;==================================================
    ) D4 X% N: j' ]: g' O
  2880. IrqProgram;Irq中断处理5 a$ S- U- b3 p/ x' \  l: y, T
  2881. PHA3 H1 W5 J8 M5 }8 O( z9 ]; W
  2882. TXA; h3 a0 t* I3 K$ }2 H- b. P
  2883. PHA
    " ~! D+ j; P0 g: a: m# H! D6 E4 V* u
  2884. TYA: o( e* n) T1 l0 y  g. Y+ Z7 |
  2885. PHA6 W$ C. F# L) I

  2886. 3 J6 y/ A: f; N$ n4 Q
  2887. ;关闭IRQ
    , @; v# v* c2 T( C: |" Q. ]
  2888. STA MMC3_IRQ_DISABLE
    ' g1 K4 [* D! J0 L4 ]' s- z: h" ?
  2889. ) v7 r0 c5 m1 \2 W! w5 n
  2890. ;允许下个IRQ触发
    ' w+ j% v* P2 X) @
  2891. STA MMC3_IRQ_ENABLE
    : r$ Y! ^6 b) v8 v, s

  2892. # S0 i% i! B7 l0 X
  2893. .IF IRQ_SUBPROCESS_JMP. L& S+ q+ ?0 ^, ~: f

  2894. + c: w7 m' }% c3 E
  2895. ;执行IRQ过程
    2 S  G9 n$ I6 A' M% F) _4 N
  2896. LDA <Data_L
    ; @* d- o0 K7 ?. E
  2897. PHA
    . i( b0 ^9 c1 u" {) u2 d  L
  2898. LDA <Data_H8 [9 R6 w: t  W+ s$ p' K3 W0 A# @  ~1 Z
  2899. PHA
    8 f$ F1 \) k! t2 R
  2900. LDA <IRQ_Process_Index
    7 l. \; Y- {% i
  2901. ASL A& y7 H6 j+ E3 s8 K
  2902. TAY4 W) E) k, [4 G# g! u
  2903. LDA IrqProcessAddr,Y6 }$ v$ m- K* Y1 e
  2904. STA <Data_L4 h3 t1 S, q8 Y8 k9 y" s1 `
  2905. INY
    + T  m7 o2 {9 H2 q% d  d
  2906. LDA IrqProcessAddr,Y* C7 a' d  ^2 f/ l: R
  2907. STA <Data_H
    4 A0 Y6 w& Z2 N
  2908. JMP [Data_L]% Z4 s  a# \5 Z* Y( u. z2 d

  2909. # q2 [. ?9 V- v; X  Z
  2910. .ELSE* p0 r; N6 x# r/ g* K/ b

  2911. . N; }7 p7 l  V- [" ^$ s
  2912. JSR IRQ_Process* Q* }; A6 h8 L5 q

  2913. 8 \6 b0 U* f% H- G  [' P  g+ s+ ?
  2914. .ENDIF
    7 k* s9 U% p9 C- f: n/ v) P
  2915. + O% O4 }) k4 r5 c' W" E
  2916. IrqProgramEnd
    ; d7 c4 Y+ m  s1 k! T' H3 p
  2917. .IF IRQ_SUBPROCESS_JMP
    ! u3 z) \% c; _: z8 s
  2918. PLA
    - ]5 o( Z7 H4 N1 n$ c, s; _
  2919. STA <Data_H4 v9 C0 |' \9 y! c  a
  2920. PLA/ }$ X5 x. O8 B" i& g
  2921. STA <Data_L9 Z" f9 H0 m# e- P) m+ G% J
  2922. .ENDIF) r3 O: Z' h; K
  2923. PLA6 @3 K# a9 P  T( E$ @& d
  2924. TAY: b- B" U3 ^7 e0 i" b, E
  2925. PLA
    " x- U4 i) }+ G; _* m# \
  2926. TAX2 l$ p: ^. f% q- {0 @, t3 f2 D
  2927. PLA
    % F& X3 s8 J) u: E+ X( E. A6 R5 Z
  2928. RTI
    & G' N5 `! K* c3 O5 c' ~8 t
  2929. - v4 R1 h+ R$ ?& J
  2930. .ORG $FFFA0 i9 z8 Y5 F( G  b/ P6 [9 p9 V
  2931. .WORD NmiProgram" b* ]" P7 Q+ G% Y2 d  K
  2932. .WORD ResetProgram
    2 y% c& J1 ~( d  a
  2933. .WORD IrqProgram0 t6 Q, u1 x) L$ Q% N# N4 G% _- e

  2934. # v! K4 Y% O3 a
  2935. .BANK RESET_BANK & BANK_DATA_MASK( b9 F7 G. `7 B' M0 d- }. ?: m
  2936. .IF SOUND_BAR_SHOW_ENABLE
    . y& d* @- R- l( x( e
  2937. - W: [# g0 s) K) w+ u
  2938. .ORG $FE00, o% \( J& G* R+ ?/ v8 i
  2939. PHA* x% L0 G: q- P! B
  2940. STY $07BA
    # x6 \' v4 p0 M: g! W6 [
  2941. LDA #$8D6 U; C1 P9 o/ L$ x
  2942. STA $07BC
    2 g9 H* C! r; [# W8 b5 O
  2943. TYA! x4 ]1 c. b* F4 j& S5 j
  2944. CLC; q; w  Z0 Q+ f/ e% ~4 Y8 N
  2945. ADC #LOW(Sound_Bar)! I+ }. P. Y" D: c: y$ s" ]
  2946. STA $07BD
    * m& j5 i6 i! T1 R8 ]& Q+ j8 ?+ @
  2947. LDA #HIGH(Sound_Bar)+ }" x/ K) F: g" h2 o% s
  2948. STA $07BE% Q8 f' t, o) C0 p" `
  2949. LDA #$60
    " G" b2 `( o  X, m/ g, U
  2950. STA $07BF
    & Z2 B8 j$ P8 i
  2951. PLA
    ; B7 R% p/ r& A% r* {8 \0 v% Y
  2952. RTS2 u* `( {4 i" {- h% m
  2953. 9 k, h2 d; c4 k% s( q
  2954. .ORG $FE20) G! g4 O$ k2 r/ R# M$ }. Z" b$ K  X6 Z
  2955. STA $07BA
    # P, U$ [( O; S5 d& u/ m; \  J
  2956. CLC2 l) I; R# }9 P) c% o
  2957. ADC #LOW(Sound_Bar)
    6 c$ V+ t+ I' H. E/ _- c9 I3 q$ Q
  2958. STA $07BD3 w/ p/ e: B# v- k5 V2 L4 m
  2959. LDA #$8D
    . A7 B  @# b7 G3 |! q) |2 ]
  2960. STA $07BC' t1 J7 p3 j  f2 q
  2961. LDA #HIGH(Sound_Bar)$ o; J9 Z% @. B
  2962. STA $07BE
    $ R) S( U0 N2 o" |; R4 l9 N3 x
  2963. LDA #$60
    - Y8 i. D8 @$ K
  2964. STA $07BF
    8 L! j5 ^' A! Q# |2 }7 Y
  2965. RTS
    . S. o8 D3 D( j- R9 n/ o! W5 F
  2966. 7 a2 G: L, f6 X, }* m8 m& K
  2967. .ORG $FE402 y2 S+ P3 @# _$ ^
  2968. PHA
    8 N/ h" z- m1 P( S0 `
  2969. STY $07F1
    ) `/ Q/ b; H' V- }/ g: j
  2970. LDA #$8D: a$ ~. P! f$ R2 m+ q
  2971. STA $07F3
    , l2 p; w& ~3 ~7 l7 ]9 L+ K
  2972. TYA
    # T' t4 P) g" Y* R) E
  2973. CLC' M2 z2 F- I5 U) r- P
  2974. ADC #LOW(Sound_Bar)6 T( o0 H$ d  \; F/ L0 H
  2975. STA $07F4
    5 t7 g% K, c' D3 n
  2976. LDA #HIGH(Sound_Bar)
    # G1 p0 K  R6 g, S/ b" J/ s
  2977. STA $07F58 u6 i& s8 S  j$ W' \; ]0 `
  2978. LDA #$60
    ' G& f" n2 n* ^+ `
  2979. STA $07F6; L% J# `+ D. D4 h! U# A
  2980. PLA
    ( i6 F+ N: |, {5 D
  2981. RTS7 ^% u0 |3 E  y' s# [5 B

  2982. / Z; |* e+ B/ r- C
  2983. .ORG $FE60/ {. G) `6 `. T  |, P( ?3 ?  x2 f
  2984. STA $07F1
    / X2 p% I: B) C- p2 T% Z
  2985. CLC
    ) ]7 A0 e4 E- i- _. c" O- |
  2986. ADC #LOW(Sound_Bar)
    ! p8 T+ f5 D0 Z9 l/ }. ^' ~
  2987. STA $07F4
    % j% G) F, u. w- [* z& Z
  2988. LDA #$8D, f: [; c4 Q2 R" x# A
  2989. STA $07F3
    1 R) D6 d$ i: p* {
  2990. LDA #HIGH(Sound_Bar)
    ; n5 n8 J* S- U8 g
  2991. STA $07F5
    ; g0 `( v2 a. o; z2 `% M: {3 F9 Y
  2992. LDA #$609 Y, D2 {! q& O1 `8 q. b2 V9 @% t
  2993. STA $07F60 j7 Q* x$ j! v0 j3 m; ~- Y. J
  2994. RTS  _* s* Z$ M2 x! \* l
  2995. ) f5 \+ ?' I0 U: T. P' @2 |: J
  2996. .ORG $FF406 i5 e, |- y$ Q2 f. B5 S9 c7 c  m; Q# _
  2997. STA $4000
    / `& X7 H4 @* c* h4 _3 U
  2998. STA Sound_Bar + $00# M0 x4 _1 f5 W3 G
  2999. RTS
    1 E4 V) b7 o3 H( E
  3000. / @+ U0 \5 L2 B& Y8 P# T) y
  3001. .ORG $FF48  A4 t0 C# M1 R- F3 f# ]' U
  3002. STA $4004! z& _- B/ i# E; o
  3003. STA Sound_Bar + $04
    6 y! Z; p$ E" T2 Z
  3004. RTS
    ! n( M  Q( g6 j4 d: J
  3005. . R7 g. C& `/ i3 ^% f) I" W6 [" J
  3006. .ORG $FF501 \/ x& Y' o: y1 [
  3007. STA $40089 L0 I8 K! l* R7 Q: z0 A( g
  3008. STA Sound_Bar + $084 J/ W, |" W# L( u
  3009. RTS/ Q3 w+ d) a$ f

  3010. ! {& a4 ]" E% u- K' B1 h* c
  3011. .ORG $FF58
    6 r: T7 X  `" A* R  H
  3012. STA $400C
    5 r1 P" v/ D& {1 k! \
  3013. STA Sound_Bar + $0C; U2 e* U. n, M, j8 D8 g4 U
  3014. RTS3 ], A9 g$ ]+ Y# U& P/ X* @! f
  3015. ( c- {9 ?) x7 `
  3016. .ORG $FF60! j* d$ M! }* w% [  l. x9 i' ~7 Y
  3017. STX $4000' y: P3 W+ P' }4 L% e5 k, u
  3018. STX Sound_Bar + $00
    - w* ]$ l+ j& D* H1 S& |' p1 ~+ `
  3019. RTS
    . U+ z( L5 z% S: Z# ]
  3020. 8 ?- ^3 q) ]1 a; L, u5 y7 r1 @* L
  3021. .ORG $FF68
    1 w8 E% n7 w) X1 @
  3022. STX $4004' r" |% n$ W0 K9 q; I- T
  3023. STX Sound_Bar + $04
    , _4 b( E' V4 u. a
  3024. RTS
    1 R$ @" f8 B* Z" ]

  3025. % F0 z) G5 ~( u5 A: \$ L4 _
  3026. .ORG $FF70
    ! S+ H+ m: K5 q, [5 K( g
  3027. STX $4008
    5 E6 r. R) j3 X$ f2 |
  3028. STX Sound_Bar + $08% U3 W. ]6 U0 d: p
  3029. RTS9 J  }. `: H* J* k; B
  3030. 8 R: W) b3 t0 g* V
  3031. .ORG $FF787 g' W/ p, w( y
  3032. STX $400C+ S' W2 x. [% T% W' n( i( Y
  3033. STX Sound_Bar + $0C- b9 v5 f3 |9 r& {" ]
  3034. RTS
    1 H9 n# b: A1 o: ^4 \

  3035. + q. |# K0 X& c& E5 s
  3036. .ORG $FF801 K7 i3 k! e3 e" L% h0 ^" L1 E9 D. s
  3037. STY $40006 Y6 y/ H% i$ S
  3038. STY Sound_Bar + $00
    $ O2 X/ o+ I, A  p5 N# x: l
  3039. RTS2 Y2 r) l) C3 y% f3 a  p

  3040. $ [2 W. `) g1 S% u" p0 I, Q
  3041. .ORG $FF88( U: ^( K# z; I$ I1 X) W& }
  3042. STY $4004
    % e" J2 ?1 H( e+ q5 o7 U
  3043. STY Sound_Bar + $04
    % Z! h* s/ n) z
  3044. RTS
    5 e9 X+ ?. V; U
  3045. . `. [1 T1 y4 M  C$ r9 x9 q; s8 Z
  3046. .ORG $FF90  E, E1 n$ y5 w& Y& n% P6 e9 [" L2 i
  3047. STY $4008
    7 a3 J5 D- m% ~8 D
  3048. STY Sound_Bar + $08
    2 m% F/ n5 T- ]1 j
  3049. RTS' w) y0 C- L# o# o( E/ n" s

  3050. $ a" ]% z( Z* {# q! q' c4 C
  3051. .ORG $FF98, _# [$ |5 t1 c, x% d, p0 S, T
  3052. STY $400C
    : x3 r# [. z$ f3 f
  3053. STY Sound_Bar + $0C
    ' [, b4 n, L8 v* a
  3054. RTS- I* j/ T* T# ]' i

  3055. # t8 o2 E4 T8 E& H# Y4 t1 {2 b
  3056. .ORG $FFA0& A, E6 Y8 t: }/ l* h
  3057. STA $4000,X" b2 s4 J% G$ h- s9 U
  3058. STA Sound_Bar + $00,X, D6 [! l, `! S1 X# c1 N7 z6 G: t
  3059. RTS
    3 d- a6 g( G  L4 O/ w+ ]: w
  3060. $ @! x1 m: L! W* S
  3061. .ORG $FFA8
    ( b9 I; D( @+ Z
  3062. STA $4000,Y* q, s+ \) t4 q/ m
  3063. STA Sound_Bar + $00,Y9 H* K7 Q$ g/ i9 e7 P
  3064. RTS
    4 [' O5 d0 J3 D) ^, c; D
  3065. / |0 i0 t" N0 U8 F' K3 S% j* o8 E
  3066. .ORG $FFB05 R" E0 e* V: a
  3067. STA $4004,X6 _9 }; ~' X2 w1 c5 G: T
  3068. STA Sound_Bar + $04,X
    / |0 h0 Q$ y/ x' m
  3069. RTS2 y0 |4 u1 \% c- ~5 L5 M

  3070. % s4 M! J4 l4 ^4 ]1 g+ l' T2 x
  3071. .ORG $FFB8# Q! f$ o( O$ i( T) @
  3072. STA $4004,Y/ e9 w- h) ^! g) K5 |" X
  3073. STA Sound_Bar + $04,Y
    6 D! s  \+ u1 H0 m
  3074. RTS
    1 K# u! J0 |; m; Z

  3075. 3 |# `4 j, g. S. e/ \
  3076. .ORG $FFC0; o- N5 R/ v& L7 f) z2 ?/ u: D9 l
  3077. STA $4008,X# x3 d- f3 e% R* J4 v
  3078. STA Sound_Bar + $08,X3 j- @% C- H. A  U, l) r, \: y
  3079. RTS- k& j4 I" q# T% p. q

  3080. 5 ~$ B7 e" ?5 o6 L% [7 L- k
  3081. .ORG $FFC8
    6 m/ z* {5 S% @! @4 Y  a
  3082. STA $4008,Y' J8 o1 N+ n6 x" m+ Z# K& J# R
  3083. STA Sound_Bar + $08,Y
    ( q* J: n7 g. d, ^% x  `
  3084. RTS
    ' b' k7 g# x- k4 W+ y. b

  3085. - Z% z+ o; q6 @9 W1 B
  3086. .ORG $FFD0* A, J# E# l& A" E2 j
  3087. STA $400C,X5 m9 M: {6 L* v& K6 r* U
  3088. STA Sound_Bar + $0C,X; r, e; [0 Y  w, ]4 p
  3089. RTS5 X+ [. _" r5 X2 \0 E0 r. c7 {. ~( f& q
  3090. 4 v0 D/ d1 h# G8 b7 Q, R
  3091. .ORG $FFD8
    ; u" N/ m; _, u9 E& @
  3092. STA $400C,Y
    9 B* ~( B- h7 [& Y7 x3 P
  3093. STA Sound_Bar + $0C,Y6 e$ @. b0 A* V4 _! p: E
  3094. RTS1 ~. Q6 k3 ^, }: J: F, j
  3095. % w9 i. _' v8 S* z! n6 g. b
  3096. .ENDIF
    ( R1 `; A3 j' E( W8 E/ u
复制代码

0 a; B2 ?( T% t8 ^
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 2855 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 03:44 , Processed in 1.156250 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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