EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 ( D! \' |) Y7 t. Q+ V
1 i  V# [; {: g4 t% F
[FC][音乐12 IN 1]
$ E* t0 D( ?3 i8 t3 j时间: 2023.07.23
6 g! H% w7 T) B4 T/ @( I作者: FlameCyclone7 _  i3 F& P8 e# k. v2 ?
- T3 @- r1 [* V0 V6 w4 D& e
收录音乐内容:
, `4 M( @+ u+ V9 |% p2 D1.Raf世界! d6 \: _+ x* |
2.最终任务
# Q5 M* B, R) y. V3.赤影战士8 U$ G4 y9 \  {' j. m3 B7 D8 W
4.双截龙
  B# _7 V8 @; r( t7 X5.双截龙2
/ t( O' M$ ~- w7 m. w6.双截龙3
( C- S6 v; g9 T! A7.洛克人* F% U. \! m" V3 G
8.洛克人2
! J/ C3 I) F  C0 T, @  f0 W9.洛克人3
7 s6 Z$ t5 o% N6 f. a5 i10.洛克人4
0 I: r+ y2 t4 |0 h11.洛克人5$ t) [3 M) p" I+ ?6 E* X8 q% U8 a
12.洛克人6$ b$ D2 N1 c# X0 Z: a( e$ [1 k- }

/ Q! r1 U+ {1 n* i  k4 }操作:
& V8 a$ k. R$ x: f) w( p上键:         上一个专辑: r6 z' Y6 ]& j5 q; F! g4 F
下键:         下一个专辑) l  h. k, J. R
左键:         上一曲
0 _# Y+ G; B8 q右键:         下一曲: j4 W* q4 p+ o. T6 ?$ L! g
B/A键:        前10曲/后10曲
$ P7 X: g, I8 A7 B选择键:       下一页
$ p% u# U% d& i* w开始键:       停止/播放
/ N4 k% \( r0 h# B+ O  s
% O' ^8 Y9 I6 w& ^2 @0 _/ rhttp://flamecyclone.ysepan.com/
' C# Z. ^) y9 O
8 a5 a6 G2 D" ]0 J. L# e; L
' w) Z& P- f7 ^  V: T4 p: b# A' |) a# o+ M3 W7 m( r! j1 k8 V

8 ^; d5 z" M3 ~' ^
  1. ;[FC音乐][播放器模板]: C1 v! w2 J4 {, B( M
  2. ;FlameCyclone 20230710
    & I2 }( b" w- Y: g! \7 C
  3. 9 L( m! t3 s# }) W$ @0 Q
  4. ;文件头
    0 U; [& B6 ~, k* Y9 Z1 l! K
  5. ;======================================================================
    * R! u8 ~' J9 O4 u' y( {& z
  6. .INESPRG 16                                             ;16KB PRG 数量* o: K: Z+ |; @7 Q7 @. {: g8 y' T
  7. .INESCHR 1                                               ;8KB CHR 数量+ C1 j& A9 c  C2 `' n; w
  8. .INESMAP 4                                                   ;mapper 4! \$ K' x  x) B/ N4 N; q  o
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    . L4 h3 D1 g1 u4 I. J1 h$ R( K4 C

  10. 6 Z% x( A4 X6 p1 Z, c1 c7 r
  11. ;==================================================
    ' z! D0 F& L' X( H, [+ m
  12. SOUND_BAR_SHOW_ENABLE       = 1  B" v* i% Q8 G1 {! b
  13. ;==================================================) S) O3 P* M. M; V6 u! `
  14. BANK_DATA_MASK              = $1F
    0 P3 `4 W# F5 o5 F
  15. CHR_RAM_ENABLE              = 00 O# H/ \1 n; {
  16. IRQ_SCANLINE                = 136
    ) Q. \' B) d! g0 |- _- f  G2 b- h
  17. ;==================================================
    8 f) i* t+ D3 c
  18. SOUND_DATA_BANK_00          = $003 X- H7 m' V- d
  19. SOUND_DATA_BANK_01          = $012 E3 O& P9 B3 F9 `- D
  20. SOUND_DATA_BANK_02          = $02
    ) [3 W% P2 q' J, D; h& D
  21. SOUND_DATA_BANK_03          = $03
    ' \+ J' ^' V, K( Z% z- d
  22. SOUND_DATA_BANK_04          = $04$ r) g% P0 |+ Z( K
  23. SOUND_DATA_BANK_05          = $059 U; O) d! Q4 D, \
  24. SOUND_DATA_BANK_06          = $062 a. j9 j* X  {% k7 S7 x0 a
  25. SOUND_DATA_BANK_07          = $07
    % D0 v$ u, }/ {, Q1 n
  26. SOUND_DATA_BANK_08          = $08) v/ ^; R% |2 t' Z
  27. SOUND_DATA_BANK_09          = $097 P5 y9 J, B8 f( ^; `  n9 \
  28. SOUND_DATA_BANK_0A          = $0A) E4 @/ p, u& }7 F( B
  29. SOUND_DATA_BANK_0B          = $0B
    . Y0 c5 b4 c, |- F# j; x
  30. SOUND_DATA_BANK_0C          = $0C
    8 H: Y# n6 V( p3 a
  31. SOUND_DATA_BANK_0D          = $0D0 X6 V/ `! C4 m' I* R0 v, A* @
  32. SOUND_DATA_BANK_0E          = $0E$ F: M( h* e* b
  33. SOUND_DATA_BANK_0F          = $0F
    & t* N0 {, `# Y% X; b4 S( L
  34. 2 n3 g% x1 |- ?& x
  35. SOUND_DATA_BANK_10          = $10/ t# M0 W! }2 t, _% B+ f
  36. SOUND_DATA_BANK_11          = $115 Q$ ~9 [- j) M9 |# I& Y$ R/ x
  37. SOUND_DATA_BANK_12          = $12
    ( o/ ], j" ]4 [
  38. SOUND_DATA_BANK_13          = $13
    / L, b5 A8 P# O1 y6 w/ ^
  39. SOUND_DATA_BANK_14          = $14
    7 }" t  n1 z! v+ ^# }
  40. SOUND_DATA_BANK_15          = $15; f0 l5 L6 l+ E. s
  41. SOUND_DATA_BANK_16          = $16
    : G5 _  G5 S( {0 v+ @
  42. SOUND_DATA_BANK_17          = $17* x- [" P" ^3 S+ c- `* z. e' l& l
  43. SOUND_DATA_BANK_18          = $18
    ! M* B  u  q2 M" }$ ~
  44. SOUND_DATA_BANK_19          = $19+ o8 V" ?& E$ |3 A" R( X6 S( Q
  45. SOUND_DATA_BANK_1A          = $1A
    8 |2 x4 ?4 c, U8 ]! T
  46. SOUND_DATA_BANK_1B          = $1B
    ' _+ f/ w/ I0 }& T5 w' \4 f
  47. SOUND_DATA_BANK_1C          = $1C
    " [# G& G- I$ J4 q, Y* x
  48. SOUND_DATA_BANK_1D          = $1D  L9 B3 \2 u5 m4 R. b

  49. 3 i8 O; ]$ B6 a$ f
  50. SOUND_DATA_BANK_C000        = $1E+ q! t. `' m" N; H3 V( w; |
  51. SOUND_DATA_BANK_E000        = $1F
    5 i0 v+ q2 V  g2 Q4 a
  52. ;-------------------------------------------------2 j6 ?  {! \/ _* _% X0 c2 T
  53. CHR_DATA_BANK               = $20
    ' r8 v5 W2 \3 M8 D4 c3 a
  54. CHR_DATA_ADDR               = $A000
    * x& K% r2 x/ P/ z$ @
  55. ;-------------------------------------------------
    / Z2 q! z& u' m
  56. PROGRAM_BANK                = $00
    + r  a6 J: M2 l" M! f
  57. PROGRAM_ADDR                = $8000
    7 }# ]4 ^+ j1 q2 v* p5 q0 E. h% N
  58. ;-------------------------------------------------& V# q; e! G9 s! b$ M5 ^
  59. RESET_BANK                  = $1F
    3 n$ f8 \$ T) ^6 h# [  b- t0 j0 A# |
  60. RESET_ADDR                  = $FD00
    7 d+ D! l# m) w( A
  61. ( J: r7 _3 `- G5 C- L
  62. ;==================================================0 }$ Y7 F  d: D. t$ B
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数0 L) M: T4 h( D& x% |6 w& v+ q" ~
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引
    . ?1 b" i. O1 l  L( d0 X, Q6 o
  65. PAGE_SIZE           = 5                     ;每页节目数
    4 E8 l7 q! f0 F2 }/ s

  66. / i4 W) S( J) X  j5 R2 f
  67. ;==================================================
    # I( R9 N$ |: `8 \: c
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除. U6 P' C# g. n: C/ e
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数$ f( ~" Z% A3 n
  70. .ELSE
    ' l# b; v, v: C( W3 D* N
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数
    3 Z6 n0 s2 l0 u5 D
  72. .ENDIF
    1 e2 [, h! l, K. z3 ^. b/ L& T7 Z
  73. - C2 Y! z$ v# c( o/ C6 ]
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引! P5 w+ i$ [1 r) }
  75. 4 v% ^8 A9 X; V
  76. ;==================================================% L: P5 O( P( J* i- o
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置
    # \% J4 n' S( A
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2
    7 A: F  H9 F% w; B" j, e: E
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;
    1 X7 C2 h0 j" S2 M; T
  80. ;==================================================
      A  ~0 Z2 J; z- B
  81. Caption_Text_Pos    = $204D ;标题文本位置
    ' o2 A- c6 T3 t- {
  82. Author_Text_Pos     = $2324 ;作者文本位置
    ' L. G, o! f: C7 A' u
  83. Date_Text_Pos       = $236B ;日期文本位置: L" |2 R* K1 q5 ~9 }( P( E
  84. ;------------------------------$ _" Q0 F( b: D% B4 R+ q- j. g
  85. ;------------------------------% S9 O3 o7 f' F  c. s
  86. .IF SOUND_BAR_SHOW_ENABLE/ @" \  `, C2 f0 D) F: [! l4 a
  87. - k/ D9 |# r' p+ B6 s7 `* Z
  88. Play_Index_Pos      = $2273 ;当前曲目位置" B& i1 l# z8 |0 \+ ^- G
  89. Play_Time_Pos       = $22B3 ;播放时间位置& j1 z4 ?& m- }* ^* C
  90. Play_State_Pos      = $22F3 ;播放状态位置
    7 H$ K/ \: Q# y# w8 [

  91. . a/ g. f- O% L" u& P$ [! \9 f  d
  92. .ELSE: i* i' J9 K8 Q* e) V$ g' C
  93. 0 s/ ^3 \" d7 g/ f; V# J, X& O
  94. Play_Index_Pos      = $226C ;当前曲目位置
    5 _  Q0 x; T( u* \6 m8 j, F
  95. Play_Time_Pos       = $22AC ;播放时间位置
    8 f( w. e+ v1 ^* w' _" S
  96. Play_State_Pos      = $22EC ;播放状态位置2 m$ \0 j. h( K1 k  G9 N

  97. + K7 X) e% e) a  j/ Q! Y
  98. .ENDIF
      b3 K, J' {+ q& ~
  99. ;------------------------------" k* y) H; c' o8 V% g7 |
  100. Track_Name_Pos      = $222B ;曲目文本位置( g2 J5 e: G- t  c, x1 }
  101. ;Track_Name_Pos      = $00 ;曲目文本位置1 F2 S- m1 N. U4 \; J
  102. Sound_Track_Pos     = $2265 ;声道文本位置
    ! Y/ i0 @5 |" ]% C6 P  H/ F
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    & j) ^0 A+ d6 }5 I9 B% P
  104. ;==================================================
    0 [% t1 R. r# ^- l
  105. Scroll_X = $008 q: e! p( p% ~& D1 j! e* I2 Y% }! d
  106. Scroll_Y = $009 f, M% f! E" W6 x
  107. ;==================================================
    * V; G9 I" o9 h- f* u
  108. Sound_Ram_Addr_1       = $0100
    & `, b2 M. W! [* s- D/ h
  109. Sound_Ram_Addr_1_Size  = $80
    4 f7 ^  j4 n6 Q# p7 _0 \: C
  110. Sound_Ram_Addr_2       = $00903 f4 G1 B/ `9 x& Q: o
  111. Sound_Ram_Addr_2_Size  = $706 N' h$ _5 k0 s' q, [+ k% `  {$ h3 ~
  112. Sound_Ram_Addr_3       = $0700
    % x& a3 J3 E7 P- g9 j
  113. Sound_Ram_Addr_3_Size  = $006 r" G( L# `3 g3 X
  114. Sound_Ram_Addr_4       = $0400
    + c3 t) I& W% ?
  115. Sound_Ram_Addr_4_Size  = $004 U5 c1 \5 n7 i3 v% x
  116. Sound_Ram_Addr_5       = $0500
    * @6 Q! _* M& ^2 i* U" ^
  117. Sound_Ram_Addr_5_Size  = $40
    6 {. i& N. A1 c& v! M6 J, ~. X
  118. ) N' U# Y& m$ m! ~) U$ W
  119. OAM_TEMP_ADDR   = $03009 |: @1 h2 x0 \5 Y
  120. ! U9 h  }( u8 a! @7 B8 W
  121. ;==================================================
    % G+ t1 I. U  Q9 P- o, m
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    - j. C  b" @2 ?$ C1 m
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器0 y- V$ O5 G, _5 ?0 O
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    3 U% p/ b7 X! q* F2 K
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加18 m- H  P' m7 M4 c: T2 E4 M, T
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    7 r) C/ L5 A. _3 h  P) M
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    4 ?; d7 j. a. }/ w# Z5 e8 n6 A
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    " _" H- s$ R7 E1 e3 I; a" I4 f$ i
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 & b  J+ s5 K. {. n. f6 `
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存0 s* x, B/ c# O0 Z) a2 `' {( d
  131. APU_STATUS              =   $4015   ;声音通道切换* H9 R  Y9 s% J! i) R! e
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通8 L; }2 ~& h* Q! j
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通7 H5 {, b3 w( o% p2 s9 {1 u
  134. ;==================================================% v2 D6 f, P% T+ C
  135. MMC3_BANK_CTRL          =   $8000
    4 B, \0 y6 A. p
  136. MMC3_BANK_DATA          =   $8001
    $ W) h0 E2 G  Q; i9 j
  137. MMC3_MIRRORING          =   $A000$ ?+ `1 m3 `7 w4 H- r
  138. MMC3_PRG_RAM_PROTECT    =   $A001
    ( T0 o4 V% G8 l1 T6 Z' @
  139. MMC3_IRQ_LATCH          =   $C000
    3 l) {. d, k' d" @2 A
  140. MMC3_IRQ_RELOAD         =   $C001: k  j1 d" m" a
  141. MMC3_IRQ_DISABLE        =   $E000- R( |# x- a. w, i
  142. MMC3_IRQ_ENABLE         =   $E001! [- f! ?0 `, F, l! N9 g5 m/ I

  143. " l- m# {  g1 ?9 V+ s% \1 O# w# z
  144. ;==================================================
    6 I- @$ \+ O" [# M0 h7 O
  145. PPU_Addr        = $0200# P5 T9 O+ I. G. J0 K
  146. Palette_Addr    = $02C0
    ; d. }2 r0 c" C- W4 M9 g
  147. Sound_Bar       = PPU_Addr+$E07 K. J/ U( j3 J* Q5 [
  148. ;==================================================  d8 S& F9 n% ]! H4 `0 {, q
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D! e+ G' V( ^) Q6 ]
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11& a7 M% d5 C$ j. u+ L) S+ }. Y
  151. PALETTE_UPDATE_MAX      = $2C
    # \2 v9 f4 E# W- ^
  152. PALETTE_UPDATE_MIN      = $21
    3 S9 ^" r  _* u
  153. PALETTE_UPDATE_INTERVAL = 60
    / m: R( _; y% Y2 G% k# i
  154. ;==================================================
    9 l: u9 u( A$ I, |# t1 B9 q
  155. Sound_Bar_Cnt       = PPU_Addr+$F0
    ( N/ f5 G- x2 u5 L! t& V
  156. PPU_Cur             = Sound_Bar_Cnt+$02
    1 k( |7 p  L) @1 ?
  157. PPU_Addr_H          = PPU_Cur+$031 k( [0 _5 q7 }$ g6 F, E5 b1 N
  158. PPU_Addr_L          = PPU_Addr_H+$04
      a5 ~( W9 U# v* v4 g6 A$ s
  159. Screen_Ctrl         = PPU_Addr_L+$01' c; l' M6 V8 f* z" S  j6 x- g
  160. Screen_State        = Screen_Ctrl+$01- `# @  ^1 D. a2 w. c& r4 C1 G1 J" t( Y
  161. ;==================================================
    0 R) H0 Z' N. u" U6 J* Q
  162. Use_Ram_Begin       = $500 W, K# l; `( R( T8 s, H6 h# s! W
  163. ;==================================================0 H6 K6 {2 y1 E2 V/ F
  164. JSR_Addr_Op         = Use_Ram_Begin* }: [) B5 j* L2 `0 X
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    . }- C6 {3 _! [: Q4 w
  166. JSR_Addr_H          = JSR_Addr_L + $01
    " Q5 @0 C6 i8 [  S, L, z3 a
  167. JSR_Addr_Rts        = JSR_Addr_H + $015 ?) H+ A  d% H6 B! i( o2 A
  168. Data_L              = JSR_Addr_Rts + $01
    ! @' @' K1 L. {+ m5 G
  169. Data_H              = Data_L + $01" c6 E% |/ k- ]- D5 K! s( Q7 c
  170. Data_Cnt            = Data_H + $01
    5 c1 ^# N& q- U5 a3 A' E
  171. Data_Buf            = Data_Cnt + $01# b$ r  y+ r8 c) }- R6 }7 ~
  172. Nmi_Time_Count      = Data_Buf + $016 P; x2 |* M  }( f; ]: C
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01
    * j9 `1 `, x* @. ~! ]% M
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    * x1 D& o6 ?7 c5 Z5 H- J

  175. 3 F, u2 V( |# A6 v8 [4 Q
  176. ;调色板刷新标志' t- x. p! N' P. W' l/ k' z
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01; F' t: k$ W% p- D! W3 P" N" Z
  178. % {4 ~% [2 A0 |0 s( O4 v4 `  H2 L. R: V
  179. ;当前帧文本写入禁用标志
    ' K" _, R9 |) j; j1 C3 b
  180. Text_Disable_Flag   = Palette_Update_Flag + $013 r9 s, m) k- r

  181. 5 W7 y5 G4 ~8 t& S: F  ?
  182. ;==================================================  P' Z1 {6 Y6 D  T( Q+ {
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动
    : q. H  Y& l2 y" O' W8 O4 v7 O
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条& i: @2 j: Z- z. `; z- ^( ^- ], o2 f
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间6 e' H; k1 Y( G2 i* H+ ]5 R
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间3 K+ T8 [+ V  E8 D" m5 q
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间
    ) D, P0 F" a( \6 F# o
  188. ;==================================================
    . Y4 v4 _% w* y# H/ V3 C: e
  189. Key_Keep            = Text_Disable_Flag + 12 x! \$ T; R# `8 e7 H# u
  190. Key_Once            = Key_Keep + $01
    1 H. x- K' Q0 l7 X
  191. Key_Kemp            = Key_Once + $01  K9 t; t+ W4 u3 D! f# |/ A
  192. Key_Temp            = Key_Kemp + $01" C' b% L3 ]/ v# r/ O5 H: r
  193. Key_Getv            = Key_Temp + $01% n( L1 x' v) |! @3 q5 ~) e
  194. ;==================================================8 a8 r+ d! {5 z5 N
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集) J% ?# P4 ]8 r* j; ^0 F
  196. Music_Item_Last     = Music_Item_Cur + $013 A+ r9 ^* e+ J
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    + M% w  C: J3 j; i9 R* p
  198. Music_Cur           = Music_Total + $01  ;当前曲目! A. ^3 M6 b+ F8 M( t! s  Q" m/ z
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目( t) q1 P5 R7 w3 D6 K; F. C2 T
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    7 w( m) r1 z. h# `
  201. ;==================================================$ H1 O1 M$ `: z0 c0 Q$ L
  202. HEX_Data            = Music_Stop_State + $01' p) y' T+ W3 I2 y8 y3 ?
  203. DEC_H               = HEX_Data + $01: {* H' [! W* g5 j- E9 W" D! o* @
  204. DEC_T               = DEC_H + $01
    ( l( c  z# v5 s( \
  205. DEC_L               = DEC_T + $01: V  G- s: `! ^  V. C* x# o
  206. ;==================================================
    : a( M3 k0 \+ s1 y  X2 B5 K3 d; q
  207. Time_S              = DEC_L + $01$ u' {. z) n6 w) Z8 `
  208. Time_M              = Time_S + $017 \/ N5 x  c/ U. t2 h
  209. Time_H              = Time_M + $02* d# x9 a+ m% ~- F1 W+ Y
  210. Time_Cnt            = Time_H + $03) Q3 N: J2 C/ Z. e- {% `4 j9 Q6 c* ?

  211. ' ^9 \( a, h8 \
  212. ;==================================================  Y, b/ z2 B, g6 R
  213. Music_Bank_8000     = Time_Cnt + 10 G, F0 ~, D5 e2 J( Q( m$ P
  214. Music_Bank_A000     = Music_Bank_8000 + 1
    5 i# C" {8 k$ M
  215. ;==================================================4 r: R7 D% N: k+ @) T
  216. Scroll_H            = Music_Bank_A000 + 1% T/ n+ `; `8 v3 D9 @3 D- G) C
  217. Scroll_V            = Scroll_H + 1( x! W* f8 H3 z# b/ d6 A# l9 R* g- v' c
  218. IRQ_Process_Index   = Scroll_V + 1
    $ A8 ^) n( V  v3 B" b; u
  219. ;--------------------------------------------------; n  D2 M% Z) `
  220. Page_Cur            = IRQ_Process_Index + $013 J8 q- w3 x: y+ Q/ P- ~
  221. Page_Cur_Index      = Page_Cur + $01: f/ I2 W; E1 ^0 H- s% v
  222. Page_Cur_Cnt        = Page_Cur_Index + $01' G% H/ x3 S3 T3 r9 B/ w
  223. Page_Last           = Page_Cur_Cnt + $01- n- L: U$ C+ T
  224. Page_Last_Index     = Page_Last + $01& P4 E- O# M8 x; u3 C7 I; ]
  225. Page_Last_Cnt       = Page_Last_Index + $01
    * a8 y% @1 i/ e
  226. Use_Ram_End         = Page_Last_Cnt + $01' O& ^) U8 T# |7 {0 J
  227. ;======================================================================7 k3 G8 v) a' m1 f9 h6 l
  228. ;音乐数据块
    ( c& q1 V. w* W

  229. ; e, o5 g+ H/ d2 v
  230. .IF SOUND_BAR_SHOW_ENABLE- ?5 C! P' j. F& j
  231. 5 w3 `4 h/ X2 B* G
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    : W: S( v8 X+ l) s* G0 {
  233. .ORG $9000
    % l% b  F8 ~" e) L7 S" n5 n: q
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    / R$ q8 u2 O6 K9 v

  235. $ |0 w! ]6 g) s5 A" x3 p
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK! W  f2 E6 [2 M2 D% F
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    8 p% X$ T: s( q( ]4 z$ u

  238. ! i. c8 k8 ~. @( B+ A2 [' _
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    ( B7 {0 c  R. R; S/ h  l% }3 ^+ E
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    ' q) H* f1 \" _. K2 l/ i
  241. 9 A' P3 Y5 `3 x* _# r' P/ J
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    ! D4 s4 \4 t# a) B
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    ! s$ F% I" P5 e5 i  j3 Q6 p" b

  244. ( S% P! f4 a. U8 N, j
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    ! ?/ @' }. ~7 S- L/ U' L8 m
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    4 I" y) c5 ~9 ]6 o

  247. " ]' E" ~; i- L7 c# V7 F- E
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    % s: K; P5 O0 \1 z
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    ; J% S/ |% {' `/ K- _& M) A
  250. $ d3 b& ~' ^$ e+ j# t! N, H
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK) N* J5 y  @) w) m6 G9 ~
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    8 _7 I9 J$ I9 q" P4 b

  253. " J& I+ C9 f9 v, s- v7 e, j9 o
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    ! e" a1 R) a- w  z
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"( y1 v# j7 o- p( r/ M9 _! l

  256. * h/ C" [; O% b
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK3 S. ?4 C8 L0 h: i2 t
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank". X% ]* U. U6 ^# v- A  X

  259. . q; ~' S2 j* j& L/ |
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
      Q/ F( p9 Y+ f3 [) M
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank": W1 y) K3 R  z. _% i
  262. / `' E; [9 j) ?; J( A5 l: ?8 C
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK. U/ [0 d/ d& ^3 R- L$ a' L
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    & N9 b7 o, L; Q

  265. 9 D% Y$ n1 b, f# f7 }3 c- P" ]
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK4 M1 B) Q( r" l
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"3 m, j9 N  {# X  z( z

  268. ; c; J, t4 l# q" m+ [
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK  S5 H# `% f$ ^& f/ ^  ]! c
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"$ [% k) m; ]' H

  271. & ]. h/ d. n+ g, w7 e
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK0 a/ O4 q0 R" ]
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank", Y/ o* C' s1 P# q) y" `

  274. " m' u+ _- X# D5 u% s2 J% j
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    4 L7 i1 K' c& G/ F$ f$ K+ }
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"7 G& ]  ^$ G9 k  z: w7 _4 Z

  277. ! a8 h/ [- ~% d* E; i. }* n
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    % g( Q; E6 K( q5 G5 a
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    ! e6 Z  F2 T4 _) }0 X

  280. 6 ?$ n! L/ m) S% \: p5 J" v  K, t/ w
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK& |0 M7 S9 L9 D# H, @6 L" J
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"
    $ O' L, O/ ], p9 H

  283. ! |& p! Y, K$ j: l
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    : S7 X1 s% {" E1 \
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    , f0 s/ F6 Y5 j0 P/ t2 Y

  286. + y% g4 Z& i5 x+ a3 A* r$ v
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    1 B% ?) J3 D$ i/ J) p
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
    2 @9 r+ O2 m# U8 M7 H: _* l
  289. . _; a  b8 M) `, I
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK/ b! ~0 V: e. A: H/ I
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
    , m% f* z! B" e1 N% @

  292. ; ]  s+ u0 u, A' F; I& }, a/ Y
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
      b- x1 n7 P1 S
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank". {7 Z- Y- n4 |# @6 B. R8 U9 |5 t
  295. , d6 X' {% s. Z
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    ! [2 X7 u/ i3 r0 d; s
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"4 B9 ~: y  q, h/ z+ a

  298. ! _( F% G+ s% j1 z: ^
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK2 ^% M) n( O( k: ]( @: w4 o8 z9 S
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"5 W" Y7 @8 N& j# R% \0 n1 N8 |

  301. ( ]. I9 p) C' L8 C
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK$ ^$ f: X1 N. Q* E. G
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    1 w2 m: x. ]4 p% i( w! b! n; a4 |
  304. ( B$ p8 v, Y1 S
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    ' Q6 n0 p8 y* ^% f" \" O
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    3 f- Y+ f3 O4 G, s
  307. ) J* t& ?4 E) F! b
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    5 N. Z. S% o* {: E+ A
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    0 ^; Z) n2 S; B% N% b

  310. ) M* E8 i% k8 p" O6 B1 L
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK4 j$ Y7 h3 J7 p7 ^
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    2 ]- {4 _( K% b  w) x

  313. * S0 S4 _: p7 c- `6 M* N" c0 c
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    $ U0 ?& c* g7 \) q# L
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank") z" H3 l" B8 m3 O. [# U% g, K& d8 R: [, q
  316. 9 g0 E1 U  D5 @5 V& R1 Y" {1 T
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ) Z9 }7 d5 F# I9 _- v
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    ! l$ X8 U6 k% y7 u3 s6 k5 o" b
  319. . P5 p6 P5 Q) w6 v
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK) p( I( S4 w& A/ }7 U
  321. .ORG $D4005 L- g. d6 j7 n. B( I. u* i
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    $ e, H+ g3 S( }- }( x% D4 U8 K% O7 L" @
  323. ; D: M1 B* N9 F/ d% k9 T
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK$ A& x6 P  o* n% C! u
  325. .ORG $D800
    + \3 d3 \1 ]0 S3 E& ~6 D" ?
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    ; t" r. `8 a" s5 d

  327. + d$ K2 k# R7 A6 q3 L" R
  328. 6 K3 A4 ]! L$ f4 a) G
  329. .ELSE4 j- S' ^3 R) X5 b

  330. . G, q6 B" X0 {2 o  B- E/ z
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    ( b9 f. L$ @# M9 d: m
  332. .ORG $9000
    + [. P' ?* V* q1 ]
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank", w! {- B7 G7 E

  334. : l0 l1 C+ O% {' i" M# P+ {" z
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK) ]) Z5 k+ c, D7 C7 G3 |/ n3 G2 {1 f
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
      C; n, B$ _+ J
  337. * }4 `, P# c" e
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    ! V# F8 d3 `2 t  T6 R" x1 Q* ~
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    % K( f4 l. }( x" S$ d) s

  340. 6 v0 ]) S- U4 p) L* r* G
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    . q3 ~1 o: q& ]- C
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    ) ~$ X( p" X' l4 `+ v
  343. 7 t: S5 d6 {7 C- @; U
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK; u/ E* q' Q" k; ~1 D- k7 K# {( S
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    3 k5 e' n* L9 i7 M. _8 z( |3 M
  346. & _( N) x# N) v
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    4 ?! M- E& {( s- s. l
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    % q3 c" E- i& @

  349. 3 r  I8 ^. k$ q3 h
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK; Y4 g* T9 J. T% |. N3 E$ _# `5 k
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"9 h2 U5 _& {9 z3 i1 c
  352. ) \7 Z" D. b) P
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    / [9 w. \1 L1 s' W2 _
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank". s* R* `# d2 F: u
  355. 0 ^- o$ F, S( C1 C
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    * G) ?: e) Y% _9 g/ ~* q; T
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"4 F' S0 q6 s7 G7 d) s" ]2 t

  358. 0 y- g' w7 p8 T9 U( l7 }
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    $ w3 A! ~5 g. L2 w! x
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
    2 ~& e' Z3 S2 y; A2 q
  361. $ S! ?7 V; N* @9 Q' }) F
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK! o: F0 A# G* Z/ U$ N) \- j% |8 Z
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    2 R2 p6 O+ N. p1 U6 e* H8 r* u

  364. ) S# \& g+ q6 N/ Z. {7 @6 ?9 q
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK+ e5 S* q! U6 |7 Q4 ]; x
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
      S2 ^1 w7 |; I( c& D- D
  367. 1 x: g  X* `( _$ Q8 W+ R  v8 g
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK4 u. R! U  t2 E) [4 ~
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"6 x  ^; U, \" I$ z6 i* h

  370. # D8 b/ d; I) u& e6 R- A
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    - s7 I, R+ C" F
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"% h: O$ o% S1 U

  373. 1 I) n" y- V$ D. ^) o
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    7 I! n7 Z. M1 ~2 }# k
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"7 \6 o* P3 I" e

  376. " ?1 Y7 b1 e! L* @8 ]- s
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    & C+ Z% [* ^4 r# w& R3 }9 x
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"! B  ~/ b% o  D% s0 _+ U4 q

  379. / f# d# h6 i) C, t2 m1 `
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK  l2 ^# @  `# X1 A; J- J: l+ u+ r
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"9 E1 N# W! R# J* p% o  L7 Z

  382. % R+ y  S. K- Z" A/ ~7 C
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK  u; ~( z; F# j3 p$ Z7 @
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    1 _3 l& Z* c: ?% Q  F; c8 L# B
  385. # ?) s+ b; _, D7 ~1 n1 w
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK, k) u5 `! x$ ^/ h! G4 J
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    / p4 }( x( R1 T

  388. 8 R4 e+ V' f. Z7 n& A
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    - ]; Y5 x( W1 z. g7 K- Y; n
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"0 @( t  G7 W  M4 r8 N; @
  391. : }- y& i/ i) O  i
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK. P+ A1 T# v- S# Q1 _
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    5 d7 O4 Z* L6 E5 ~% w
  394. & c  y' u& x' b* G& T
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK; ^3 `- n5 g  R; r
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank". c$ V: s! e3 m4 ?) H
  397. ) k/ ?5 X- T" C7 R6 Q
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    % Y! E9 X9 x7 ]' k8 w/ h
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"8 Z: r7 A, O' g+ N0 J! D3 C

  400. : {; j$ Z5 o( `1 v5 F, \  o4 D
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK5 \( X+ R& t6 h; o# {
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    6 P! T, Z" H+ y/ L- A& D1 Y6 |
  403. : ^1 T& }! y2 t: g2 X
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    , P! a5 \  t. ~5 V
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"
    ( s1 `" F, W; Y7 j) h

  406. % E/ K; q0 `- u+ h$ S8 ~- Z
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    , ^' e6 u) J9 i( w; p; U* k
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
      M2 R% L/ q$ U& a0 ^( l6 B5 m
  409. ) _7 g5 C/ j8 H3 d  Y0 @% x, N: ^
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK. e2 \7 W/ B' C+ A$ |! `% s% L
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    % j- X5 ]  u5 x. U2 n1 }" r1 A+ m

  412. 6 b' _8 C' [' ]4 h6 u' S
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    - [4 e9 r9 y5 u: R* H
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    ( v- _; H' X1 p/ Z! H

  415. 7 O+ {. p$ v  v5 s7 r9 v0 ?7 @( E
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    * A( `- v9 ~* m; Q# G. a% E& Y6 Z
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    , @/ |; y3 Z* d! w) r

  418. 7 P3 z0 N( ~1 I+ ?5 S
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK4 Q' z* c- w. n4 C" R
  420. .ORG $D400
    ! U) N, ~6 `# o7 C  i/ E3 [
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    ! M8 \) m; K: P* D; e2 D# T
  422. ( ^$ v- j- n7 t
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    4 s( j$ z1 T: i! \+ x; N
  424. .ORG $D800: F7 m4 _7 Q4 ]  H
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    ; F! x  t9 q/ \2 J# u/ k
  426. : y, ?' w- g7 @
  427. .ENDIF: z  W+ _  ^0 r+ Z6 ?
  428. . C! m  D+ l7 j7 Q+ W
  429. ;CHR图形数据
    + [# ~5 U6 Y7 g$ p9 u% q
  430. ;======================================================================
    - b0 Y$ q" g7 `
  431. .BANK CHR_DATA_BANK( s2 S0 O& n- ], e/ m
  432. .INCBIN "chr_bank/chr_data.chr"
    : w  [3 ?/ G( w

  433. " J! R& S2 x/ m- P. n4 E0 s- l
  434. ;======================================================================2 x( O% {$ ^. d, g4 N7 ~( E9 e
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK
    2 y+ \- @$ l% C- _" d! y
  436. .ORG PROGRAM_ADDR7 m$ U* Y/ @% v6 v# W+ Z0 R1 m

  437. ' }7 b5 t( g; |
  438. ;==================================================2 t4 T: J, X+ x5 K. @
  439. NmiProcess8 i  n2 j. ]; k

  440. 8 d6 }# d6 [: i4 N1 w1 j2 l2 s
  441. ;关闭屏幕控制( a0 ~, P" J# @" j7 i3 c
  442. LDA #$00
    - Z5 m2 y* S: A  R$ f& @3 X- R+ g
  443. STA PPU_CTRL# ?0 }) u! @& T0 W% Z2 M6 S7 C

  444. 9 \" [  m3 J1 Z# q& c$ E( e
  445. ;没播放音乐就不需要触发IRQ0 s! U) G+ L: P5 d, }6 x
  446. LDA <Music_Stop_State
    3 x5 Z6 G; w7 v6 I( v
  447. BNE NmiNormal
    3 @0 Z( y/ s3 ^" v. r* t, S' K

  448.   I7 A( j- e' }) c  f
  449. ;重置IRQ索引( W' ?/ G& A6 g0 }/ Z
  450. LDA #$00
    ' j! b! m0 g! O7 |  _* b3 e
  451. STA <IRQ_Process_Index1 W* a) J1 y# R6 q

  452. 7 z0 ]4 e. r$ ~  @. j
  453. ;时间秒数为空则跳过0 ]& b, w' O: r0 x
  454. LDA <Time_H
    % ]/ f6 L% f$ N; _2 ?: B
  455. ORA <Time_M' f* V" ?4 B1 n3 \' M* T, a) O4 R
  456. ORA <Time_S5 r2 Y% i& B. h9 P2 S- h
  457. BEQ EnableFirstIrq
    6 I' ]- S  W* B* K/ h1 k4 Z! p+ g7 O

  458. - H1 G! y2 |/ T
  459. INC <Scroll_H. ]( M0 \# Z% _5 Q

  460. ) w; O8 b1 Q, o% s& o+ E
  461. EnableFirstIrq
    " r: g/ q/ ^3 E/ K$ P( p
  462. ;80条扫描线后触发IRQ
    2 Y* y# N" }% z' W( Y) r/ Z+ y
  463. LDA #IRQ_SCANLINE
    : F5 M! H) R. {1 p+ u$ ~9 h# r! K
  464. STA MMC3_IRQ_LATCH% |$ U' i9 P8 R
  465. STA MMC3_IRQ_RELOAD
    ' D" R  U1 T9 W) r5 D1 Q
  466. STA MMC3_IRQ_ENABLE
    , c. ^9 n) w) z3 j3 C
  467. CLI
    2 h2 G  V! N0 b. }( i% W3 m

  468. & e8 w& i1 e  B
  469. NmiNormal6 s( f# V. ~* R0 a" j: ?

  470. 2 F+ F" r) A. l: @1 [& y
  471. ;处理PPU图像
    - S8 F) h" ~3 p0 w! e3 O
  472. JSR PPU_Proc
    ' A9 |. a% X8 o6 T1 q

  473. $ b% V5 j# ^1 N" |" F
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    2 x+ m8 `2 \$ g8 U: B! e$ D; z
  475. LDA PPU_STATUS; B% P' ]7 i9 ~) z5 D
  476. ;LDA #$002 `9 I: ?- t) g! y% S
  477. ;STA PPU_OAM_ADDR
    ! B& `6 {3 c/ r9 }* B; v
  478. LDA #OAM_TEMP_ADDR / $0100& B1 Y: |+ F/ K: P0 c
  479. STA OAM_DMA
    4 R5 G* x6 s* z) V  @" h* z

  480. / R. C( P6 m3 V# P
  481. ;启用NMI中断
    ! C2 _" t+ ^2 ]& y; P7 ^+ A
  482. LDA Screen_Ctrl* t- |1 Z) T; t
  483. STA PPU_CTRL
    / w8 h8 J- p, Z; A5 X* U
  484. 3 c. q/ ?$ C/ P& e
  485. LDA <Text_Disable_Flag
    8 k: c! t& s& Z/ {
  486. AND #TEXT_DISABLE_RAM
    % z' V8 q$ `# {) F
  487. BNE Nmi_Sound_Play9 ?- C' w: S6 [( d+ h+ Z4 f! Z

  488. 2 L* O1 I7 F5 \5 s. x5 w9 ~* @
  489. ;处理手柄输入
    " m  h% S' j# M# V3 H/ i
  490. JSR Key_Proc; r0 y6 h8 S' P2 Q
  491. ; ^) A% h$ [8 }) y
  492. ;切换音乐(手柄触发)! f* ]0 O8 @2 x0 K  s2 a
  493. LDA <Time_Wait_Cnt
    1 Q4 V5 W3 U; @2 x3 T
  494. BNE Nmi_Cursor_Arrow3 }4 x, ]" W* z! u! }$ u
  495. JSR Change_Select_Item8 E5 {4 a3 m5 z5 }( x- g: G

  496. 5 o, _. z* ]1 g; b
  497. Nmi_Cursor_Arrow3 [" u6 @! N! H4 m5 M0 z. m" P0 J$ P
  498. 1 Q! L# s! M! d8 G. i9 B# T2 q
  499. ;处理光标箭头4 D/ R* r, p# o1 {6 X( P2 o# N
  500. JSR Show_Arrow; X, N6 Y: e; |$ G( k

  501. 5 C" Z4 t# I/ B
  502. ;更新调色板
    & Z# W# w+ r& o$ h& d
  503. JSR Update_Palette_Data
    $ X. m: b/ E9 l) a
  504. ! R2 e" o2 Y) `0 ]# a; f+ N
  505. ;显示时间(缓冲)
    # Z0 f; Q/ c+ n& s7 t, ?7 X! n
  506. JSR Time_Show
    . x/ _1 f+ \* ~. l. L
  507. 1 ]: U! c, M: H, Q+ [
  508. ;音乐显示(缓冲)
    & \* U  ^# Z* D# ^# k
  509. .IF SOUND_BAR_SHOW_ENABLE
    3 F. ^# a: n) X  t
  510. JSR Music_Vision. `4 h/ g) _- F, r
  511. .ENDIF/ B7 [' K1 {3 S7 Q
  512. / V% Q. d: b' k
  513. Nmi_Sound_Play& w! |+ l0 b- v- X+ _. V, p
  514. ;播放声音" w' U! `" Z. t" }6 r
  515. LDA <Music_Stop_State
    # ]5 I9 i7 r+ S2 n6 Z
  516. BNE Nmi_Time_Wait_Set7 Y- w5 p) G+ ?% E
  517. JSR Sound_Play_Proc
      e9 W& t+ Q: ]/ I
  518. " R% Z  h7 U$ B1 [7 d& E+ l
  519. ;播放计时
    4 w" w: E9 N: s+ B9 j
  520. JSR Time_Count4 q: u- e% b+ g) T
  521.   B! O& E( T# z2 z
  522. Nmi_Time_Wait_Set6 X9 Q$ @; D5 p& C
  523. LDA <Time_Wait_Cnt
    $ r; U, y$ x  X. Z
  524. BEQ NmiNormalProcessEnd
    - ~* I/ x# p% v' L$ Z1 a0 U" {$ P! G7 s
  525. DEC <Time_Wait_Cnt
      Y+ F8 {: E2 Y3 @
  526. NmiNormalProcessEnd
    ' x6 \& c9 }7 Z7 z2 P

  527. , J% o$ a8 |# H( Z+ J4 v+ j) `) R
  528. INC <Nmi_Time_Count
    8 E9 O4 ^( z/ |1 v! f
  529. 4 W- O/ G1 `0 c: Q
  530. RTS
    ' r/ L. v' q5 |1 \1 R
  531. # [( @! [" Q0 f# M
  532. ;==================================================9 ?) B9 Y6 T  E; y, w7 Q
  533. Init_MMC3$ b. L9 p6 R& ?0 _! t7 P9 @
  534. ;==============================
    & j) z' M% ?: X" `
  535. ;禁用IRQ) \2 `' V; i; U7 B; n& m8 ^
  536. STA MMC3_IRQ_DISABLE' @0 m7 u' u6 o
  537. ; ?* [% ^$ w# _6 N0 y4 Q8 v
  538. ;水平镜像" l2 Y8 b2 ]0 G5 ~" W; Z
  539. LDA #$01
    * n& ~9 |2 _2 l  s2 K' G- e
  540. STA MMC3_MIRRORING
    ' e5 \; R8 b% Y: p) C. K  Y) C1 {
  541. " z; ~* t! l0 u, }5 |) Z
  542. ;初始化图形bank
      j+ v  N8 Z6 D+ D
  543. JSR Init_MMC3_Chr_Bank* u# K; z8 z2 n: t( `+ k% F$ H
  544. ) e* F8 ]  I# f9 S3 s( ?2 c
  545. RTS
    0 U* n/ H8 M1 g9 j9 y
  546. ;==================================================) D; }  W8 i. z' E: e
  547. ProgramBegin;主程序
    ; d! J/ M6 L8 n- W
  548. LDA #$00
    " c( Z- p7 s" ^' }4 W
  549. STA PPU_CTRL
    & |5 W/ d9 [7 P) k5 D9 W2 J5 e
  550. LDA #$00. g- k2 j) E0 j6 y, b5 X5 ?- a: x
  551. STA PPU_STATUS1 ]& h: h6 s# y7 Y" t
  552. STA PPU_MASK# y8 d. a+ M7 Q3 c& Q
  553. STA JOY2_FRAME
    ) x) }. V0 K$ _" p+ a  Q3 R9 r4 _, b6 _
  554. 2 N! T4 Z  m# G3 z( ^
  555. STA PPU_SCROLL  U2 T$ I. v' P  m6 K# p' B$ {1 ~
  556. STA PPU_SCROLL
    / r% ?. f+ W* t* f! T& r9 B  o6 j2 U
  557. " V  L4 t% k0 o% R  T) u( b
  558. ;==================================================6 ]# p( m" ~* m- z2 X
  559. LDX #$FF
    , N! C0 h% q  S* ?7 x7 B  x
  560. TXS
    6 [# f0 b4 N  s; k8 ]/ L& I# v& N

  561. , p3 r  k# {6 O' ?
  562. JSR Init_MMC3
    , q! ^; T) @2 e" }0 e' U$ t  a

  563. ) i5 u2 {3 G4 {1 D
  564. LDX #$02
    6 e% R' t5 ]5 S8 A0 v' y1 ]5 D8 h
  565. Check10 z$ i$ ?8 o  O! E- Q
  566. BIT PPU_STATUS
    : D  P/ B$ \# w% x0 P
  567. BPL Check1
      C  g0 `  \0 S
  568. Check2
    ' m% ~1 T% T% @& z
  569. BIT PPU_STATUS; A# T6 t1 I% r& `
  570. BMI Check2( U4 j  O7 i" G  b# a

  571. + L2 O( h6 m. c: ~' G
  572. LDA #$0F
    3 d3 E* i5 h# V) n* w7 f( `' y
  573. STA APU_STATUS
    ) v$ C3 l0 v$ O3 ?
  574. LDA #$C09 f: v0 S" S: E
  575. STA JOY2_FRAME% l# T7 @% w3 i% T0 Q

  576. : B) w' D8 E4 i4 O  w2 ?
  577. LDA PPU_STATUS: {+ @1 H( |5 {; x$ H
  578. LDA #$105 T+ J* W7 X; V5 J: j  }$ U
  579. TAX
    * K0 T$ }9 w. M( N, n% z: `
  580. Check32 k, |7 k, _" A) O( F
  581. STA PPU_ADDRESS4 j- h% D' u9 o4 P
  582. STA PPU_ADDRESS
    % n( b9 v9 h% H0 f9 u
  583. EOR #$00. a" m6 M9 S4 b4 a) I6 U7 }( C
  584. DEX# ~8 O8 E# ^, v) Q/ M0 }
  585. BNE Check3
    . f- K0 I6 ~" \( }2 B+ h0 S
  586. ;==============================
      p# Z, l0 {& r( y
  587. ;调色板清空
    9 ?% Z" [6 z+ a, K7 C/ k6 T
  588. LDA PPU_STATUS0 H6 n2 D2 r6 q6 M3 m- z) d; h
  589. LDA #$3F) q6 b. Y2 s: Y8 U, i
  590. STA PPU_ADDRESS; Y  ?* E& N" s7 ^9 `
  591. LDA #$008 ~/ `% f3 Z4 K, m# J& o$ \
  592. STA PPU_ADDRESS) H# e, Q% F' s( G. @  [7 a7 Q% E
  593. LDA #$0F; \: F5 z" _( A3 c
  594. Palette_Clear+ Q) a6 _9 O: l( G
  595. STA PPU_DATA$ p. }: Z, P3 U
  596. INX
    4 B0 U+ D# u% i: w+ `- a% e
  597. CPX #$20
    , H/ N7 j6 n/ Y  F, S( g
  598. BCC Palette_Clear
    # V7 a5 m# g* [5 a
  599. LDA #$00
    / [, \2 e: g' T% _# P
  600. STA APU_STATUS  I3 B* a4 x3 }

  601. 4 L2 ?7 O; P* _  s% C
  602. ;==============================
    9 e& n9 }- i4 c3 g( v
  603. ;RAM初始化0 j6 m' R, }6 v) q+ Q, z2 V% H
  604. RAM_Clear_All3 h2 Y; }# \. p4 }
  605. LDY #$00
    1 |5 A+ D% |/ Y' H0 g8 ]" F
  606. LDX #$08" L7 `! z  i' I. g$ m
  607. LDA #$00
    " x/ s, z1 B/ u! i
  608. STA <$00
    % L8 o' [7 Q/ I3 T6 p
  609. STA <$01  Z6 o. ?1 V, t/ r7 ^2 H
  610. RAM_Clear_All_Start" p: Q1 p8 Z+ l; h7 e' `
  611. STA [$00],Y
    * s  A: h* J; u9 w/ p* Z' @
  612. INY/ e3 }1 Z# L% k
  613. BNE RAM_Clear_All_Start+ h7 Q  I# @- L% k) T7 n
  614. INC <$010 ?, ?- I0 G5 X) l
  615. DEX& _+ w) z3 e' L2 g( }5 K
  616. BNE RAM_Clear_All_Start" n  ^" b) o' C

  617. + c0 p8 E; u. W; ^& M8 C
  618. JSR VramClear
    & ?  k. b0 K  P7 q# e; x9 s
  619. JSR VramInit: c) ?* b& b& b/ l
  620. JSR OAM_Ram_Init; D) Y! q8 z  k5 @) V3 v4 E: D
  621. JSR Init_Palette_Addr
    9 o; j# }3 t& v# r/ @2 i. f

  622. 7 x3 A* S9 Y. ]8 q/ h' I
  623. LDA #$FF
    7 }7 T' d9 K. G9 q, d7 T3 a
  624. STA Use_Ram_End
    . f) L1 O6 {, i1 X( p3 t8 v
  625. ;==============================
    8 s1 z& d3 Y( h! G9 v
  626. ;初始化背景调色板
    + {/ e% v4 h' T$ }1 E+ N- V% O
  627. JSR Set_Palette_Color
    8 B  \* M+ `6 _" j
  628. JSR Set_NameTable_Attributes8 S2 \2 }6 `6 }8 B  Q0 `2 `

  629. : ~8 U! S& l: [% c
  630. LDA #$00
    7 u, [1 d  p* `" t
  631. STA PPU_OAM_ADDR
    - C% ], |+ Z# _- l- V5 a0 b
  632. LDA #OAM_TEMP_ADDR / $0100
    ' D! C" ~# r2 m2 p7 @: d3 S5 {
  633. STA OAM_DMA
    " ?/ X! ?% l' ~) B( [
  634. / Y) h# ]7 U1 q& H1 f0 u. b% ?
  635. JSR Sound_Reset_Proc% y# j* A; }! i" q5 x
  636. JSR Set_Sound_Total( M9 q3 i  }( c" K

  637. * Y! u  S" u* d
  638. Init_Start_Music
    ( f  e+ l+ i% \
  639. LDX #$00$ z( C# X# X1 S3 A! w* Z
  640. Init_Start_Music_Write
    + g" t$ n+ L6 w
  641. LDA Sound_Start_Port,X
    0 Z: V% {/ A9 E' V4 S. Z) F  L; j
  642. STA <Music_Cur,X
    . _' D2 n" s; m5 H9 C
  643. INX- X3 {4 o/ p2 o+ c
  644. CPX #ITEM_MAX_SIZE
    3 X3 A6 i5 z4 n: w- x& P( R  e1 {
  645. BCC Init_Start_Music_Write
    ) G! K9 v8 I: B. F& B4 H% \/ y

  646. " M7 M6 {  B  W, s
  647. JSR Show_Music_Text
    - n9 U/ k7 C& q" g" A1 C8 J

  648. + O( J- `; z/ L! u" k
  649. .IF SOUND_BAR_SHOW_ENABLE9 l; f; {2 T! {3 P
  650. JSR Sound_Bar_Text_Set
    $ }& m% L, |5 O
  651. .ENDIF( G$ r$ a/ V1 b0 R2 {* k" C( y' V

  652. " F& H; n4 \. D' T
  653. .IF Track_Name_Pos
    % v; l. C1 J2 O! z  U
  654. JSR Show_Track_Info
    . x* @( G9 u9 I- q! m" P* M4 L; i
  655. .ENDIF
    * G( _+ D- [6 R3 N
  656. - F. f; N; k0 E
  657. JSR PPU_Proc
    ( d5 C7 ]0 X4 f& ]2 ?# v
  658.   j2 k8 w7 S# o1 o. k+ d5 o
  659. ;==================================================
    . J7 I' w8 [' p
  660. ;音乐bank初始化 - C" K; C* S8 L
  661. JSR Init_Sound_Bank) Z3 I6 L' Y1 d( Q9 f! U9 Y! H

  662. 3 _% F5 A1 i# X2 Z% B8 W( K3 I: o) b* M
  663. JSR Music_Show
    ; s2 k# B" k/ {* F& ?. U
  664. JSR Time_Show
    2 S: W; S/ s, W+ n# V' y/ p
  665. JSR Music_State_Show1 z6 v  W, R/ e3 c% I
  666. JSR Time_Delay
    ) V0 @( Q+ Y$ s$ g2 a- C& P

  667. ! |) u: X! H" \* W3 h5 u7 v
  668. LDA #$01- w' n- n& c, b
  669. STA <Music_Stop_State7 K, K& d2 T6 u! K; u
  670. + w" |- d' h9 G  w+ X6 `
  671. LDA #$88
    ! i* z1 {( m8 M9 T- K7 G! P
  672. STA Screen_Ctrl- m! G" H- e' N3 Q/ j
  673. STA PPU_CTRL
    $ V% V6 t: Y# K$ |5 U2 s+ R- t( K& n
  674. / T6 A& I, U+ r( {# l+ u% S
  675. JSR Show_Page_Text
      s' W. q9 I) ?) P* V* |

  676. * n: F2 w- |& l$ S8 e1 C
  677. LDA #$10
    + D, d; p# B! B$ d2 \. J
  678. STA <Time_Wait_Cnt
    ( j2 e3 i9 R8 i2 V7 |- o

  679. / @5 t) k1 C5 v7 ^
  680. Wait_Time_Over- I* B4 o1 S7 j5 z
  681. LDA <Time_Wait_Cnt# n2 y0 L0 @. [: B9 H3 Z
  682. BNE Wait_Time_Over
    - t+ |2 V. P1 x. Z  A* X2 b
  683. / L1 `+ H0 \. ~$ p1 m
  684. JSR Show_Arrow
    * J* r3 ]5 j7 [- P/ G6 o  q- D. T
  685. LDA #OAM_TEMP_ADDR / $0100
    8 r0 H$ w; H* [0 @( Y/ X9 B& L
  686. STA OAM_DMA
    $ V" E6 v8 F8 g0 k% B
  687. 4 l+ I4 e  {: G. ^( P
  688. LDA #$1E
    6 v& k1 f' _9 o2 X& w0 {
  689. STA Screen_State
    & M/ a% @+ g% J  F

  690. ) g2 n6 N, t5 a) e0 `3 t& }' ^
  691. LDX <Music_Item_Cur" t0 c1 \, b0 h& R+ `
  692. LDA <Music_Cur,X/ E6 Z' A2 s9 U4 Z5 v" V  z5 n
  693. JSR Sound_Init_Proc
    5 _4 m7 W; R; ~# v
  694. - l( A" ~; q4 t" O5 I' N
  695. CLI
    : r5 L( |3 Q9 y3 U3 \7 `
  696. JMP MainLoop
    3 Q# X' w4 J. ?/ D
  697. % R! W* s4 ?- v1 b0 S# |* o7 P. r
  698. ;==============================& L2 b# l) k5 n+ o& W( U
  699. Time_Delay;延时等待
    : A! o$ O* n7 V# J' L
  700. LDA PPU_STATUS
    ) m8 l) z: J+ T! \( h
  701. BPL Time_Delay1 \7 B4 b# Y: ]
  702. RTS6 A- a) Q9 ~% Y0 A" O8 j& ^* z8 A

  703. / M9 X9 H7 a! h5 o! s$ e. L# r7 B
  704. ;==============================
    % r$ O  B% j; A7 x: Z* P0 `1 q/ n
  705. OAM_Ram_Init;初始化精灵内存  _& V  `9 @2 h7 z8 a/ p& @
  706. LDX #$007 {0 m2 S+ d# \1 a
  707. OAM_Ram_Init_Write
    , B$ L: O! j  Q
  708. LDA #$F8
    7 N% b6 `. a+ y- y( _* P9 O. U
  709. STA OAM_TEMP_ADDR,X
    & F. g, [3 X' i
  710. INX/ x+ e! O& G0 F. g) ?
  711. LDA #$F8) z; y! I; ]: \& g: U
  712. STA OAM_TEMP_ADDR,X
    , F/ j7 R3 b4 A, I) G9 J1 s
  713. INX
    6 i! m! i& h" z$ a
  714. LDA #$006 _5 ^7 O- C- d- X1 i4 D/ O- S
  715. STA OAM_TEMP_ADDR,X
    * s/ G' @* I' D
  716. INX
    0 f9 O, E9 j* Q5 d/ B5 [
  717. LDA #$F8: P3 _+ D7 _2 N2 K
  718. STA OAM_TEMP_ADDR,X
    0 j4 ?# l6 w  E( _: Z- n7 m6 Y. V
  719. INX
    , m0 |% |  U8 D. }
  720. BNE OAM_Ram_Init_Write# i6 H3 A: N0 ?9 A
  721. RTS( V+ q/ i. @) }% T3 l( y+ ?

  722. 7 R9 R: a  S1 e
  723. ;==============================
    6 x( v; h& Y5 Z/ E4 @  K! w3 t
  724. VramClear;初始化图形内存
    $ l! e! G# H" r! a2 h* o) A
  725. LDA #$20
    # n5 ?( U5 F% R; L
  726. STA PPU_ADDRESS% T% V( P# I+ {5 K! |- Y9 }' @) ?
  727. LDA #$007 k5 Q  K( F5 i  z, k0 M
  728. STA PPU_ADDRESS
    % s1 N* F8 o3 I5 k
  729. LDA #$001 }- ^8 [$ J0 J( B0 \# e' J
  730. LDY #$00
    # E2 a% T% ]! k$ y0 q* E( j
  731. LDX #$10- A. W% E1 }" E$ Z- C
  732. VramClearWrite5 u: |) S( |1 V0 [/ B
  733. STA PPU_DATA
    ' u& S/ c5 k1 P; Y3 n
  734. INY2 M) I+ Y  E9 \" t. G; \
  735. BNE VramClearWrite
    2 D4 T7 C4 j) Z! m3 F) |% |0 ^
  736. DEX
    . x& j' q! w- d
  737. BNE VramClearWrite
    ( F: }% \( O4 ]  o, {
  738. RTS  b+ t7 C7 \! Y# M/ b- O; G
  739.   b& S" M4 J9 i% Y
  740. ;==================================================! c- I* q4 m$ m/ g. M" c
  741. ;设置MMC3图像bank! X2 b! e: M* P* ^
  742. Init_MMC3_Chr_Bank7 q6 D7 X, p5 ?4 }/ w
  743. LDX #$05" F- F/ z5 S' b  s! e
  744. Init_MMC3_Chr_Bank_Write
    2 j8 ^* a, o8 q5 D
  745. STX MMC3_BANK_CTRL, R1 s, ]( n* Z. N9 Z4 Q
  746. LDA MMC3_Chr_Bank_Data,X' n# _4 K7 ?( @7 ^  g8 @
  747. STA MMC3_BANK_DATA) D! y0 z2 r5 _2 C
  748. DEX
    ! D: f, g( i& Y. U5 I: Z
  749. BPL Init_MMC3_Chr_Bank_Write
    ; v! ~( v5 b+ G3 i
  750. RTS9 P2 |$ @2 w. v2 m" k7 ]! w
  751. ;--------------------------------------------------( K3 f6 M" m( Z; s1 \. _7 P
  752. MMC3_Chr_Bank_Data
    $ n8 s" p% e" l
  753. .DB $00,$02,$04,$05,$06,$07
    ! b) n* N% `4 w' {) [# M3 U7 z

  754. ! w) P( Q+ W  b4 o) |
  755. ;==============================
      E0 R/ J$ t5 B6 r2 }7 G& A- W
  756. VramInit;初始化图形内存6 _3 F9 q1 k, z0 n; L" F
  757. .IF CHR_RAM_ENABLE
    * A# v5 z5 X& l/ g. q+ h
  758. LDA #CHR_DATA_BANK* k1 S$ r; T* f, F1 y
  759. JSR Switch_Bank_A000
    4 V9 r# }; ?- k2 Z
  760. LDA #LOW(CHR_DATA_ADDR)
    . W+ `9 l/ O5 V6 _/ I
  761. STA <Data_L
    + B( @1 n$ @$ _& L9 t
  762. LDA #HIGH(CHR_DATA_ADDR)3 W( W. G  B+ S' Y, ~3 z2 d3 L) c: `
  763. STA <Data_H
    ! g  |, v! p, @2 {2 o
  764. LDY #$00  |) u+ p% l& P+ A$ ]
  765. LDX #$20
    " i/ C# Q& d4 m
  766. LDA #$00
    8 w5 {6 F1 L8 j# C2 q3 P
  767. STA PPU_ADDRESS
    1 F# ?& l( G) [2 y0 i6 ~
  768. STA PPU_ADDRESS( {" ~( D. p. g3 ]+ \; }' e
  769. VramInitWrite1 l! t/ n& V- N. [8 e$ b# a; h& \
  770. LDA [Data_L],Y2 h0 B' d( A0 b) v) T
  771. STA PPU_DATA
    ; a) Q  F- o% n; {  L
  772. INY
    8 Q+ p: v9 [+ F+ c8 B. y$ i. ]
  773. BNE VramInitWrite; c- y) R4 {: t, y4 @- d
  774. INC <Data_H. _$ ~0 b* a5 I5 E1 f2 X3 U
  775. DEX3 O6 m  I& y# i7 G5 Y- P
  776. BNE VramInitWrite
    3 J2 T/ ]0 A. R: r4 U0 m+ g9 h
  777. .ENDIF" y# a& u; ]( y4 g
  778. RTS
    : q' O" d; G! z" x# I/ v
  779. $ B' B/ e3 y$ u7 B' w8 A
  780. ;==============================
    & r( W% c- V) n
  781. ;音乐切换5 I& [, W7 J. i% m/ C$ h9 G
  782. Music_Play_Change
    # Q1 W7 f0 Y" Z- c$ G" |: \( N( o
  783. LDA <Key_Once& R+ J% g" Q: l/ D  F7 N% P
  784. AND #$FF8 ~  _: L, U" {' `1 y
  785. BEQ Music_Play_Change_Check+ T' L1 h5 ^% @" E1 e, I
  786. 6 M1 }2 v# d# i' x
  787. ;禁用音乐条刷新0 V, d% Z* H% Y, v& O
  788. LDA <Text_Disable_Flag
    ' |* u$ f6 R0 `
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    + x4 c0 p" V6 p! s
  790. STA <Text_Disable_Flag" s0 h: \' C$ x- U  w/ x- S1 B
  791. 8 p0 y5 ~  y$ v! ?! N  l5 I5 C
  792. Music_Play_Change_Check
    . j& [% j6 T) b; v
  793. Music_arrow9 L3 e! w) ^9 Y& D& }
  794. LDA <Key_Once" j2 Z0 b8 @0 O& t+ X
  795. AND #$0F
    - v+ P/ A# w% |8 H- k6 F
  796. BEQ Music_Play_Change_End
    ( r5 W: U  }  M+ G
  797. JSR Music_Track_Change) V& P) k& I+ t+ ~
  798. JSR Sound_Reset_Proc
    . ~( u! c# Q+ P$ k0 X
  799. JSR Music_Show
    / d. Y/ y- i7 w& K1 z5 Q; g' y* I, q9 j6 m
  800. Music_Play_Change_End1 Z6 J. t$ J: a% |: E
  801. RTS
    1 T( g- [) D  S6 D

  802. . a5 r1 S5 N% J0 ?+ A6 ?
  803. ;==============================1 I  R, i; G! A
  804. ;音乐曲目切换
    2 a' B& L+ A  a) h. L6 y
  805. Music_Track_Change, ?) Q5 m7 R2 J$ B  ?
  806. LDX <Music_Item_Cur
    * g7 z! B" Z, k: ^" u
  807. LDA <Music_Cur,X' _) g) M7 @& K  z! i6 {
  808. STA <Music_Last2 X2 b( g5 ~- D, o
  809. Music_Decrease
    5 [8 D3 S( s/ Q( ~' W, ^
  810. LDA <Key_Once
    ( q- q, x/ |/ h* @0 k8 h- r: S
  811. AND #$421 x! r( d# u& W6 H
  812. BEQ Music_Increase' U/ q  _: R2 u# f& T
  813. LDA <Music_Cur,X6 r" A, f! X5 C: M  |9 R% f
  814. BEQ Music_Increase
    ) a- w2 _# L  \( X. r6 Y2 `' O
  815. DEC <Music_Cur,X
    + |; Q* G* f- S
  816. Music_Increase4 `; V) H9 u. t/ B. [
  817. LDA <Key_Once/ |+ y4 h( q0 S+ K3 U2 E$ i
  818. AND #$81; y$ a& A5 B4 P$ m  N6 j0 O
  819. BEQ Music_Decrease_10$ H7 a" K9 S  B  ?" `
  820. JSR Set_Sound_Total2 ^/ W9 a" d0 H
  821. LDA <Music_Cur,X
    5 C- D% C7 [2 V
  822. CMP Music_Total
    " s* d$ }7 v+ l# S$ p; C3 ]. |
  823. BCS * + 4
    8 h+ Q. ~. Y/ d4 p& a, e
  824. INC <Music_Cur,X% Y% q  `& `# B  ^
  825. Music_Decrease_10
    6 A4 Q& }8 a) C  N* ]! k
  826. LDA <Key_Once" w2 T( G7 z$ }% `$ z( m! `
  827. CMP #$04
    : Y3 i, H! R" \) {2 z- M& w. c
  828. BNE Music_Increase_10' U7 Z& m! }$ j$ ^9 W
  829. LDA <Music_Cur,X
    + \# n" M4 ^6 x; K$ c9 @3 C  a7 Z; Z
  830. CMP #10
    / n6 W( x' j6 b
  831. BCC Music_Start_Song_Min
    9 F& g1 S; ^" N; }# ^. t( t! a
  832. LDA <Music_Cur,X
    # B( N: u! f0 n& S. @
  833. SEC
    9 \/ W& p5 [! g5 k/ T, L7 _
  834. SBC #10
    2 l' ~2 J3 E; e0 e' @
  835. STA <Music_Cur,X( ?: a7 P$ [; W" d& i6 [2 Z7 ]
  836. LDA #$00
      T" N6 N! H0 c9 n6 r! ^
  837. BEQ Music_Increase_10& d+ a$ B& j; T3 d. ?  O: [& |+ J7 E
  838. Music_Start_Song_Min
    0 ~! D8 ~* Y: _( o, u9 ]
  839. LDA #$002 K2 K! P% U( t+ j0 X
  840. STA <Music_Cur,X
    $ N+ w/ z: [$ S1 Y- K( ?! p: ?
  841. Music_Increase_107 y* z  W7 ?! d- r
  842. LDA <Key_Once
    * w( p/ ?3 ]$ b0 m3 g
  843. CMP #$08( B7 Z9 P0 Q; W7 g6 x, g6 N
  844. BNE Music_Track_Change_End" t% y. M* x3 H1 v# E/ ]; f$ {$ [
  845. LDA <Music_Cur,X
      d) `& A5 B) j1 }# `$ _
  846. CLC
    # i" ?) K- e& r
  847. ADC #103 D% K5 }3 R5 D4 s: J
  848. CMP Music_Total
    ) U) D, j" \! {
  849. BCS Music_Start_Song_Max
    # X+ P& R$ T- l, o1 L1 Y
  850. STA <Music_Cur,X
    ' V6 T9 p2 I1 B% w# E  q& `
  851. LDA #00
    % Z4 \! }& u+ Z
  852. BEQ Music_Track_Change_End
    ; y; b: v5 a3 |" a4 W' Q. p- H
  853. Music_Start_Song_Max8 I4 s3 F9 {5 W' E
  854. LDA Music_Total
    + Y% X  ], D4 C" s5 b
  855. STA <Music_Cur,X
    8 T! E& R$ w' O
  856. Music_Track_Change_End
    1 U- c$ b5 }3 X
  857. RTS
    ) T( G  g! i# u" r4 g
  858. / Q  E8 ?' @3 y  N
  859. ;==============================/ \$ ?9 l; g/ ^$ _# o8 u
  860. ;按键处理
    - L1 |- W1 K7 u, x3 y
  861. Key_Proc
    8 n5 [, c7 f$ L3 S0 B
  862. JSR Key_Scan% m  E$ N  ?4 L1 h' M8 L& u* l1 @
  863. LDA <Key_Keep4 W1 A4 [) `, {( z- W) N
  864. STA <Key_Temp; |5 A8 p# {* \5 e7 k6 B* C4 E
  865. JSR Key_Scan- X/ E! B/ O# c( N+ D. _5 J# k
  866. LDA <Key_Keep3 ~1 T3 V8 H; r# s
  867. CMP <Key_Temp
    + J2 L) N5 |$ ?
  868. BEQ Key_Get_Once; @8 i, e- o+ N  v
  869. LDA <Key_Kemp
    , g; H& b9 Y. z4 Z% [+ ?
  870. STA <Key_Keep( H9 t7 v5 l3 `  C1 Z3 D% \+ }
  871. Key_Get_Once
    " E, e9 G4 M  [9 a& e4 T0 Q( v: l
  872. TAY
    & J! V% p4 ~5 o9 ]
  873. EOR Key_Kemp
    ! n' u$ x6 g+ Q
  874. AND <Key_Keep  @3 S9 l2 r# R- S  d6 W
  875. STA <Key_Once
    # N+ }( }. O( A$ c
  876. STY <Key_Kemp
    * R& Z' O+ S1 A
  877. RTS8 ?( c: C0 F' N) R/ X
  878. ;------------------------------) r1 H& N* A! g5 \% O  q1 w  g
  879. ;按键扫描( g7 k2 ]& K- ^" d' o0 }3 e
  880. Key_Scan) o4 C+ b/ q# `) W3 T" Y+ K
  881. LDX #$014 f- l$ P; K+ l. i' S
  882. STX JOY1_FRAME
      m, d, v& E4 H* X, n  J
  883. DEX0 P+ j- k7 i. }8 ~
  884. STX JOY1_FRAME
    7 m3 D  m0 K8 Y! e( j
  885. LDX #$08. y1 D2 U8 Q, C
  886. Key_Value7 \2 A7 {6 p8 [8 f, r8 N
  887. LDA JOY1_FRAME  t* Z8 W& Z# V( G* h! k
  888. STA <Key_Getv
    0 ~8 Y* U! G( m; H6 [, @$ J5 l
  889. LSR A2 ?; M$ ]+ [4 w
  890. ORA <Key_Getv: ]! V- _0 g1 T- ?) Z
  891. LSR A
    # Y9 f# J, y2 \* f" A# J  I1 h1 k2 o0 {( ]
  892. ROL <Key_Keep. f7 }0 R+ x% C) r
  893. DEX; t  f: \3 h+ w% h% {- h* ?/ u2 ?
  894. BNE Key_Value
    & v* x0 p/ _/ `
  895. RTS; s1 N# O1 F2 }% D- C
  896. - P- a' i$ H0 X3 E3 C& z
  897. ;==============================- C) d. u+ W: _: r" O6 }
  898. .IF SOUND_BAR_SHOW_ENABLE
    / U7 z, Z9 U$ s) u
  899. ;音乐条显示
    / C/ K2 d' \( B+ w+ V% S
  900. Music_Vision# |/ l- {  N% e9 S% I0 x9 q
  901. LDA <Text_Disable_Flag0 W. Z) {9 W; u( |5 Q$ W
  902. AND #TEXT_DISABLE_ITEM
    0 C# s# i8 f* A
  903. BNE Music_Vision_End) R, F  J9 |" \, J/ Q- Z+ E% u  U
  904. AND #TEXT_DISABLE_BAR
    # Z6 {0 o: P. g% E2 o
  905. BNE Music_Vision_Set3 ]  H+ z# A* m) t) w9 f; V
  906. LDX PPU_Cur0 y+ R7 W1 u! I+ X4 O& u
  907. JSR Music_Animation
    2 E9 F# l. s/ Q$ y
  908. STX PPU_Cur1 b# b' d  H5 l, q! l. X7 z( Y  d
  909. Music_Vision_Set5 m2 ~% n# W6 _; Y, k7 l' A/ U
  910. LDA <Text_Disable_Flag
    7 e3 {) h; X- {$ ~! Q: I
  911. AND #TEXT_DISABLE_BAR ^ $FF
    ' J' L; V: K. V" Q. t$ u  K
  912. STA <Text_Disable_Flag
    3 c+ [: @- f! y0 L
  913. Music_Vision_End
    ! C4 a4 \( D- a' J  x
  914. RTS0 _- ?5 _* y5 m* g
  915. ;------------------------------0 u. Q! |) `4 z9 A! v  Q! V9 A
  916. ;音乐条显示处理
    4 C4 H) V/ G7 `7 A( ~0 `$ f
  917. Music_Animation
    $ k; K4 v0 C3 N6 p7 d
  918. LDA #PPU_MODE_CNT_LINE
    5 a5 v" [4 S7 E! e2 {% i( z
  919. STA PPU_Addr,X* f: \+ F/ H3 t" j: M/ ^) r  \
  920. INX
    : i9 U7 g0 I( J( S8 p3 h) W
  921. LDA #HIGH(Sound_Bar_Pos)
    7 R% K. i7 c4 A7 ~4 P8 ]
  922. STA PPU_Addr,X( f0 n) M# Q; B+ C; r7 I4 |5 ]
  923. INX
    . e7 F2 Y9 l0 v
  924. LDA #LOW(Sound_Bar_Pos)
    " |6 i9 q7 v' t6 T( k; W
  925. STA PPU_Addr,X
    / I" a/ o$ y4 j( F' G$ E
  926. INX  `* o8 F. i( V: u
  927. LDA #$08
    & P$ P3 }0 v; K$ ^! X
  928. STA PPU_Addr,X' Y& t& S8 B' S: q: k7 x4 S
  929. INX
    8 \) x* C$ s/ f- P, {' ]( M  x  B
  930. LDA Sound_Bar
    5 A6 l5 h; S3 [' P- _  `
  931. JSR Volume_Convert
    2 N4 Z& s2 d3 W4 y+ f7 J0 r

  932. ! w6 Y% S4 E0 k2 r$ n
  933. JSR Volume_Set_Cnt- D6 L1 T! y, P( n, g9 J4 R7 J
  934. LDA Sound_Bar+$40 r+ ]6 M6 d2 n4 r
  935. JSR Volume_Convert3 o: g. q( g* Y$ z$ r4 }; P1 @  |+ g
  936. / O. H: k) |) C$ q0 f* Z2 i
  937. JSR Volume_Set_Cnt% w) T+ M& S( B
  938. LDA Sound_Bar+$88 F! B; e. s' Z
  939. JSR Volume_Convert3 r8 j/ n% T5 i& N5 p4 P3 v

  940. + F' T% ^! e$ W" [+ ^
  941. JSR Volume_Set_Cnt4 v: S/ g# Q; ]( E# g
  942. LDA Sound_Bar+$C
    - B3 N) j8 r7 j
  943. JSR Volume_Convert
    8 {8 @: }0 ?6 C0 o/ }5 T& \

  944. . @7 G9 q- \( |) [$ |* ?
  945. JSR Volume_Set_Cnt/ v- f, l- G% h+ ]# }

  946. & U+ @; V. y+ p6 `; y  |# u
  947. LDY #$10
    : A! X) N' b, _# \  _& s9 ~9 C4 W% y
  948. LDA APU_STATUS7 W9 P' m% N  b3 e+ N
  949. AND #$10& M1 s1 i; d7 c- w( F  `8 K
  950. BNE Volume_Count
    2 m8 T. X7 |! B5 k1 g% y8 c2 Z
  951. LDY #$00: q, o# B' r+ a  B+ N2 A+ [8 m( f. E$ Q6 R
  952. BEQ Volume_Count
    ; `3 w5 n6 t" ?1 P! g7 y3 Y( M
  953. . z0 f7 w& u9 g2 l/ M- A4 o4 Q
  954. ;------------------------------
      Q7 V, J5 K) {  r- H. U
  955. ;音乐条处理1 u) D+ U7 x( g: _" S
  956. Volume_Convert8 L/ ]5 @6 w6 x' ~
  957. AND #$0F
    7 ~6 ~2 _7 G. M. N8 A* G
  958. TAY
    6 B5 L9 i3 y  X9 o, \0 G$ v7 m
  959. Volume_Count
    , M3 F, E7 k/ v
  960. LDA #$08
    * v+ s/ X) K. o* U' I
  961. STA Sound_Bar_Cnt
    9 q6 b; C1 m; v* Y$ _
  962. Volume_FILL
    & G' U3 d6 z( }5 }
  963. DEY
    5 [8 b, M+ ], |& i" c0 }6 P+ x2 W
  964. BEQ Volume_Half. z* n2 C4 X* c) ^
  965. BMI Volume_Empty0 R( g; N  G" M/ D7 U* ~4 M8 e& z
  966. DEY
    " _/ d+ l- M7 n$ d1 ]. ]0 Y- k+ N
  967. Volume_Full
    1 E7 ?* r! |4 Y! ~) k  _8 h
  968. LDA #$16. E/ X- A, c4 f
  969. BNE Volume_PPU
    1 _) |- ^2 z- L/ z; I+ @% s
  970. Volume_Half, ^5 i8 g7 X: y, u& _9 W
  971. LDA #$159 S( |* `7 N) T1 V8 h( S
  972. BNE Volume_PPU
    , T% [! x% Q9 c" v- F
  973. Volume_Empty
    : m" ]. \' p# g' o
  974. LDA #$14
    3 \/ G: Q8 F' x8 G# i+ A
  975. Volume_PPU( m7 C. R8 \' k' {6 l% B/ \, z
  976. STA PPU_Addr,X  k( O3 ^* V/ P2 \# U5 y# Z* t
  977. INX  T9 x9 i1 E* Q: b* [) I
  978. DEC Sound_Bar_Cnt
    / [  \8 e) _: h" w! ^/ L3 o
  979. BNE Volume_FILL2 h5 h' }- n5 a. ]
  980. RTS* a) n5 ?: `/ \

  981. : V/ m1 e$ X5 S! Y& P2 d$ @
  982. Volume_Set_Cnt, a4 M2 ]1 e8 H+ ^
  983. LDA #PPU_MODE_CNT_LINE_NEXT
    : e" ^" t5 `& {, w/ C$ X
  984. STA PPU_Addr,X
    & C2 d1 t% {, d9 ?* G
  985. INX  u! m; K$ |  D$ e1 T- J
  986. LDA #$08
    ' b: F" l8 @9 c, H
  987. STA PPU_Addr,X  O0 n0 `' s; I6 Q2 U) D& i" V
  988. INX
    - M* q  ~: y! ?8 R7 p
  989. RTS. O; t$ w4 T! G* b3 }  `
  990. 3 m; U* n; e4 g) Q) D
  991. .ENDIF  B- }3 P% \  B5 G/ b

  992. / y, V) `+ B" h
  993. ;==============================+ g2 e  d( O; R6 r$ }
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    ' G) E- z- t1 q( F) a
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式: D- @- P1 C. A3 W
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除
    2 M( ~! e* V5 K0 s; |% E
  997. ;------------------------------, p; f* v2 _/ k
  998. ;PPU处理
    2 O  B" j5 B/ y% q; F% J
  999. PPU_Proc
    . A: ^. B: I8 q$ o& Z0 c
  1000. LDX PPU_Cur" V; N7 m  ]! t9 y9 I
  1001. LDA #$00
    2 U7 [2 [9 L" L6 ~) ]$ d& d
  1002. STA PPU_Cur
    4 N( t& _4 V5 f/ v. `  M9 R! S& y* X
  1003. STA PPU_Addr,X/ ~4 W! D  t/ L2 a9 |& X" d! ]
  1004. LDA PPU_Addr4 f$ B% }2 {1 S& X( }- Y
  1005. BNE PPU_Proc_Beg6 Z9 Q, F9 ]! `- U9 s+ x! m0 \
  1006. PPU_Proc_Ret
      V- @! w" n0 y# T
  1007. RTS4 m5 X( S: }$ ~5 E

  1008. 0 C$ z3 @* t1 c# D8 V
  1009. ;------------------------------
    8 Y1 Q8 m9 o# W" T
  1010. PPU_Mode_Return_Cnt  ;转下行模式
    " }0 _! r% R( p5 z3 n" O
  1011. INX. d8 N) |! o: P
  1012. LDA PPU_Addr_L
    7 f0 ~, A2 {- \9 B
  1013. CLC
    , O( q# {" a& b! S9 n
  1014. ADC #$207 F- {1 i: {9 j9 M
  1015. STA PPU_Addr_L
    ' h5 }# V) z/ Q5 f4 q" U  a5 F2 Z& z: S
  1016. BCC PPU_Mode_Return_Cnt_End
    ; R- T5 w8 E* i) o. [# t
  1017. INC PPU_Addr_H
    # o; y$ x% M5 ]0 P! R1 h1 `
  1018. PPU_Mode_Return_Cnt_End
    8 k' o' p0 l  U2 o
  1019. LDA PPU_Addr_H$ ?5 X/ C5 E  `1 m
  1020. STA PPU_ADDRESS
    , R4 b9 u" [3 ?; W% H  O' l
  1021. LDA PPU_Addr_L! E0 c& S. Y/ e1 S& o2 O2 s; y
  1022. STA PPU_ADDRESS
    $ ?1 Q) R9 N7 D; p" Y0 P/ l
  1023. LDA PPU_Addr,X
    . Y& Y) P" \0 H0 [0 p: v
  1024. TAY
    5 r( Z, a$ Q+ \& o3 z/ j
  1025. PPU_Mode_Return_Cnt_Write
    0 o! p. Y' S: e; o8 `. n# b: }
  1026. INX& W: ^/ K0 `& K2 _9 D  M2 n
  1027. LDA PPU_Addr,X, d/ `1 t' i% i; N+ J
  1028. STA PPU_DATA2 B: `& P/ ?# ]- L1 ?, z- Y$ c
  1029. DEY
    $ _8 y! D3 I/ T
  1030. BNE PPU_Mode_Return_Cnt_Write1 c4 w1 T1 Z* \2 n
  1031. JMP PPU_Proc_End5 B; D. G: @+ @: C5 G0 H

  1032. 3 x. x* _% b$ X, d2 C1 }& i
  1033. ;------------------------------
    : N6 n! j- v" M. O( _
  1034. PPU_Proc_Beg  ;处理开始
    2 _5 j7 d/ {; M( J8 B  @( V
  1035. LDX #$00+ D5 I5 M& H- p' f# W: u: A& ~6 F* H
  1036. STX PPU_MASK( V' q* j7 `/ D0 p
  1037. ;------------------------------
    + z: s. u  `1 k0 ~/ @: I
  1038. PPU_Mode_Select  ;模式选择6 u* q  k. v+ b
  1039. LDA PPU_Addr,X; T3 h" b1 T  t0 g
  1040. CMP #PPU_MODE_CNT_CLEAR" e6 ~/ C0 N( |: B
  1041. BEQ PPU_Proc_Clear. q4 z- o1 N$ f8 l2 t9 \$ [
  1042. CMP #PPU_MODE_CNT_LINE
    : G1 y/ }7 |; S5 D' N
  1043. BEQ PPU_Proc_Cnt_Line
    " s) a& u9 R5 Q  o2 U
  1044. CMP #PPU_MODE_CNT_LINE_NEXT7 ^* i) i6 M) L+ |, z1 n7 y- ^
  1045. BEQ PPU_Mode_Return_Cnt
    / d1 R$ F# g1 r3 m# f: f' n0 N
  1046. JMP PPU_Proc_End_Write' Q. }+ D& B: j, B. S! E  x/ }
  1047. ;------------------------------" E- h6 M) M( E& I
  1048. PPU_Proc_End  ;单行写入结束
    % z9 X* |7 ?4 j! o6 T
  1049. INX
      P9 I; p& D: p' L6 g
  1050. LDA PPU_Addr,X2 R  ^$ `! |+ h9 I: f
  1051. BNE PPU_Mode_Select0 s$ k  c1 O# O" N& i- z' D$ p
  1052. STA PPU_Addr7 b  |3 e; U& _+ U( ~2 K
  1053. JSR Update_Palette_Color
    ' k/ Z8 N! v' s5 ^7 h0 r* \# T  Q
  1054. ' L+ }- G. r  T8 X" W
  1055. PPU_Proc_End_Write& c. Y  N/ i) o3 E) x; v+ S
  1056. LDA #$00
    ( R( [( D0 c: c1 P6 y% ]" O+ G
  1057. STA PPU_ADDRESS
    ; v1 l/ C$ F0 B. \6 R% {
  1058. STA PPU_ADDRESS
    $ I) H, k  q6 M4 }7 r: g* u, k0 \
  1059. LDA <Text_Disable_Flag, ?3 e* ]4 Y4 Z, v2 K
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF# _& p+ E. g. E1 M8 {7 Z2 u
  1061. STA <Text_Disable_Flag+ v, T$ z# o1 Y4 [6 q6 l3 h
  1062. LDA #Scroll_X
    7 ?# m4 ^' }& z. r4 T# E
  1063. STA PPU_SCROLL% Z" C+ G5 y& Q1 ~) L5 S; s
  1064. LDA #Scroll_Y
    ; F; k3 |; h( Z3 N2 ?
  1065. STA PPU_SCROLL
    ; O& h5 U+ K1 |
  1066. LDA Screen_State- m  s5 j  v, ]$ k
  1067. STA PPU_MASK
    2 n( c6 j" B! A) s  ]# A$ V
  1068. RTS
    ! H# E4 r4 p! |4 Z' v

  1069. - e# [7 l& \, Q. B1 W+ `% y" o
  1070. PPU_Proc_Clear
    5 s  ?; Q/ t- Q
  1071. INX
    ( i1 t5 I9 d7 H9 k/ _# f& P( @
  1072. LDA PPU_Addr,X
    # A! v9 S- T- n/ G  N$ y+ o
  1073. STA PPU_ADDRESS& E! M4 v! `3 s- F* q
  1074. INX
    # F# {: e* T6 U+ {
  1075. LDA PPU_Addr,X- R( [  z5 e2 V) U  c
  1076. STA PPU_ADDRESS
    ; [4 e/ ^/ g, K5 j( {
  1077. INX. p/ u$ H  A: {: O% f; i
  1078. LDY PPU_Addr,X
    0 I9 M6 z& h3 g' }, Z" G6 D9 E
  1079. LDA #$00
    + J4 ?, }8 N( Y+ y5 V
  1080. PPU_Proc_Clear_Write, r% `' x2 _% Q
  1081. STA PPU_DATA  D$ {8 l6 F  Y; o0 ^! y
  1082. DEY  }8 G/ X& I" j3 m0 _
  1083. BNE PPU_Proc_Clear_Write+ E) m1 k& ~$ X! Q" ~  V
  1084. JMP PPU_Proc_End
    . u: Z/ _* M3 x! {

  1085. 0 I* ^# t* c& ^0 a5 o/ `
  1086. PPU_Proc_Cnt_Line
    ; c+ X. [, n7 [, T
  1087. INX
    , p% G/ x0 X0 l
  1088. LDA PPU_Addr,X
    + Z" U9 Q4 Y: @% N$ F+ v9 X
  1089. STA PPU_Addr_H1 h+ ^6 X2 P" Y, W2 V' J
  1090. STA PPU_ADDRESS  A4 ?7 q# ?% X4 r4 ?7 F+ m
  1091. INX
    ' ]& c9 h( }" E- t2 |
  1092. LDA PPU_Addr,X
    ( N* {: W0 G  ~0 N# n/ d# Y& I
  1093. STA PPU_Addr_L
    5 }  h# ?* P' D9 a7 h% r! n
  1094. STA PPU_ADDRESS! R, P% \! i, ^1 M' g% K$ F
  1095. INX
    ( X: P- a2 Q' `8 v
  1096. LDY PPU_Addr,X
    2 I- Y' W( r( d2 S0 Q9 Z0 R: K
  1097. PPU_Proc_Cnt_Line_Write
    - g* C+ z/ B. M% m5 [6 `
  1098. INX
    6 {8 L( j$ A' v& A  U( J& u2 {7 ^
  1099. LDA PPU_Addr,X
    ) y3 _' x" ]$ m/ O7 [
  1100. STA PPU_DATA/ q. l5 Y! g: N$ e/ T
  1101. DEY' @: x% C& }  M) ?4 i
  1102. BNE PPU_Proc_Cnt_Line_Write8 Q: \; a7 e  N- J% E0 Z# r
  1103. JMP PPU_Proc_End
    0 I# [1 y6 }) W7 ?' L2 L/ V
  1104. " i  M! s9 b* U/ t
  1105. ;==============================! n+ @" {6 {/ N  p( A$ c
  1106. HEX_To_Dec;十六进制转十进制5 C% y7 E* d) o6 U% E* K& M
  1107. STA <HEX_Data
    3 n" e- L9 C  b
  1108. PHA3 I* P, @4 Z4 W8 p  a
  1109. TXA, v( B6 O9 p, r4 M
  1110. PHA
    * M8 [% ]* t; W$ f* X" P
  1111. LDX #$00
    7 v( @  k8 c# x# p
  1112. LDA #$00
    9 V7 T3 j. f( h7 B* ]% M/ D3 [
  1113. HEX_Cln
    ) d  i+ L" b0 |! `" {) l( o
  1114. STA <DEC_H,X
    8 J; d( a. W; A% T! d
  1115. INX0 l0 o/ H4 U: t. Q% t/ g4 P
  1116. CPX #$03- d& c/ ?2 ~+ f  T) ]# p. g
  1117. BCC HEX_Cln) W! s# g4 ^/ Z- h, s/ i4 n
  1118. LDA <HEX_Data
    5 y% r- E% x* a0 c  }0 h
  1119. ;------------------------------& R4 M2 g# A; A1 z) ?& z  O/ @; U
  1120. HEX_100
    - J( `0 L) U0 v( T3 V3 [. T' o
  1121. CMP #100
    ( E5 y/ R; }9 P9 a3 S/ [* y9 }4 @
  1122. BCC HEX_10
    5 A( V$ T! B- O, [5 z
  1123. SEC
    ; o8 ?2 A* i0 l; B
  1124. SBC #100- W6 P7 a  l' B5 X
  1125. INC <DEC_H
    1 a) O$ \+ j1 U& ~' G
  1126. BNE HEX_100
    + k5 W8 {/ U3 M
  1127. ;------------------------------$ Q, a$ z$ V4 R1 q; V% _+ R: g
  1128. HEX_10
    & u) V9 L. w" {, k0 N
  1129. CMP #10
    ) j# m) I; L5 q3 J$ F( U
  1130. BCC HEX_1
    " v8 E7 I! o: S7 F9 l, l, y
  1131. SEC
    ! _# A8 u# w/ t$ t4 T3 v
  1132. SBC #10
    ! l  R* V& w  j7 }6 ]" p' p
  1133. INC <DEC_T1 B& u/ U6 }" c8 U
  1134. BNE HEX_10- s. V* U5 z/ x/ Z9 i+ F
  1135. ;------------------------------  x; f' Z/ @. w* @3 s6 g! V9 D- n
  1136. HEX_12 P' @, c( r: v( t  o# s
  1137. STA <DEC_L
    0 Q! c# O+ T, Y
  1138. PLA% G9 k, A; F" e3 j% }9 ]
  1139. TAX. y; R6 g! p" b" T5 j1 W; k+ l
  1140. PLA9 Z% |$ a4 l7 ], D) Q
  1141. RTS( O) D4 R! t. k
  1142. 9 G: {' [( T" v1 B$ e) x
  1143. ;==============================
    0 P5 g3 P2 D) e1 E3 g5 z
  1144. ;音乐曲目显示$ s% k, p. ]/ e$ r: s
  1145. Music_Show% s  {) {, a& F6 }: @
  1146. LDX <Music_Item_Cur
    ) c9 y) w2 P% W& O/ ~9 V; S8 z; `
  1147. LDA <Music_Cur,X. \- G/ \& L, t- ]
  1148. CLC
    : \( O5 Z3 ~. V* @" U) h6 Y
  1149. ADC #$012 N- j) t* D6 B. V( Y3 ?1 N
  1150. JSR HEX_To_Dec, I6 {- E2 o+ V9 [3 A1 o3 w- b# l
  1151. LDX PPU_Cur9 ^" t. u$ Q/ y3 P' V
  1152. LDA #PPU_MODE_CNT_LINE( s5 f+ D* h* D' ]; [- X5 T: ]3 Q8 z
  1153. STA PPU_Addr,X
    1 b& P) W. t( N$ }7 d5 A
  1154. INX: {' E  D7 g) U1 P
  1155. LDA #HIGH(Play_Index_Pos)
    5 {( G9 |4 t2 p" ^7 R; U) o
  1156. STA PPU_Addr,X
    7 r: Z$ Z; E  @1 k: b6 r) x
  1157. INX6 Z, e5 m7 g9 V0 z; j7 D. Z
  1158. LDA #LOW(Play_Index_Pos)' c7 V2 V6 u" q2 O6 c4 l
  1159. STA PPU_Addr,X: B2 Z3 |) J7 K: P# @9 b; w3 J
  1160. INX- b! K' @! m5 g1 d* D4 i

  1161. / L% U; H0 T% C4 c
  1162. LDA #$07
    " D3 b: ?' X- o: ^
  1163. BNE Music_Show_Length
    8 G$ B2 A) h3 K* g1 \7 p! h/ ^
  1164. , f& t0 W1 `$ H/ b# Y9 F" F4 `  z( M
  1165. Music_Show_Length2 u" Z+ A( Y/ a0 J" [2 a
  1166. STA PPU_Addr,X
    2 [& w/ B) v7 l9 Y
  1167. INX1 {& f2 Y+ g9 v7 ~9 j' j$ ?2 @

  1168. , ?7 j  o0 N1 ]& S
  1169. LDA <DEC_H
    ' E  R0 L, `$ G
  1170. ORA #'0'& k4 ?7 X3 C# L/ ]! O8 x
  1171. STA PPU_Addr,X
    / \  m6 P. p+ T0 r; g: A
  1172. INX
    + K( K; m6 s  C7 _+ W' x7 f0 N5 G

  1173. " b) j! P: }, b5 E# N/ b
  1174. LDA <DEC_T9 V: }9 ]/ T5 r
  1175. ORA #'0'" e- S+ {8 `( B
  1176. STA PPU_Addr,X
    0 ~$ a: Y, D4 K$ ~6 h
  1177. INX8 E7 k8 @, p- p* a
  1178. % D% Z  H5 s+ j
  1179. LDA <DEC_L. M& k. T% T. m& A. g2 G9 T8 s: n
  1180. ORA #'0'
    . F( k+ u9 w- l7 {5 f+ q" X; g0 E+ ^
  1181. STA PPU_Addr,X  z) E# z* W  e8 T
  1182. INX  l- i( j- J& f' M

  1183. 7 V2 n& v' e9 O" j: j) ^2 N0 J, g
  1184. LDA #'/'
    $ E$ @+ m0 a( e' `0 ^1 ~' A/ K
  1185. STA PPU_Addr,X
    % G9 w+ `9 G$ f" [0 _+ b( L% O
  1186. INX' x1 @& o$ {2 Q/ D  w9 E) T$ c% n
  1187. Music_Show_Total( V/ ?$ ^, ~* q4 F8 v
  1188. LDA Music_Total
    # g6 n) [  \9 Z" e% d4 L8 k
  1189. CLC+ a& ?9 j; M+ u3 H$ N- {4 q
  1190. ADC #$01
    3 {) R7 J2 K. P$ z" T' Y) j
  1191. JSR HEX_To_Dec
    $ D; P3 w4 d' p
  1192. 4 ^" _, i6 s4 w1 K9 t0 a: |  O
  1193. LDA <DEC_H$ p3 I" m, l' ~, q. m, |
  1194. ORA #'0'
    ! p7 s+ w9 I& ~% v
  1195. STA PPU_Addr,X. H% t3 T5 |; E: e1 J
  1196. INX0 M7 @7 E' J# q! V& R3 B

  1197. - W1 \( u- z: I
  1198. LDA <DEC_T$ e. ?5 y, d- W& X! Q: {. ~! f
  1199. ORA #'0'
    " e1 i! }2 k1 c5 n5 S* F
  1200. STA PPU_Addr,X' j4 g! b3 _+ ~/ ~* t0 W& N
  1201. INX
    . W  j3 E9 P+ S) P( R8 J3 N" @

  1202. 6 u' F: t& x4 D1 M- z. N$ m- v
  1203. LDA <DEC_L
    ' s# G7 l. M% S2 [
  1204. ORA #'0'
    3 J4 j7 Q+ {) J7 ?( Z+ |  y7 l
  1205. STA PPU_Addr,X! Z" d; H  G% o- X5 _+ i
  1206. INX" A) S8 T, j  k; S

  1207. ! F$ x: p. ^- J* @3 z" h9 e5 [0 n2 w
  1208. STX PPU_Cur2 K6 k& X. ?! f2 z
  1209. Music_Show_End5 p$ \8 F. d  \" A
  1210. RTS) }8 w2 x" J# X$ c  a4 I

  1211. 8 r% B6 Y+ o' J" a
  1212. ;==============================
    2 T" l/ `2 k7 i, o; L% F9 X. s
  1213. Time_Show;播放时间显示# r) q7 Q  f2 ?4 t5 y
  1214. LDA <Text_Disable_Flag6 o) A& e# [7 s% _0 Y( @5 c$ f( z
  1215. AND #TEXT_DISABLE_ITEM
    # L( L' W& [) S& J* h  m
  1216. BNE Time_Show_End
      D$ E$ j1 Z& N0 o7 m
  1217. AND #TEXT_DISABLE_TIME
    1 ?6 m* ^8 z! S% h
  1218. BNE Time_Show_Enable
    & [1 @2 d$ o) g/ |+ D! Y1 c

  1219. 3 u3 T% v% y& w& d2 q3 n+ f" O) |
  1220. LDX PPU_Cur
    3 j0 T2 I& ^) L% X+ H
  1221. LDA #PPU_MODE_CNT_LINE8 c- n- ~# b- G/ K
  1222. STA PPU_Addr,X% G. F* `; o  z
  1223. INX: T$ y( _! D. [! l0 ^* ]9 a
  1224. LDA #HIGH(Play_Time_Pos)" X, h- @! U- Q
  1225. STA PPU_Addr,X
    , L5 d/ C' e& Y/ j
  1226. INX3 D/ o0 K  [+ E8 K
  1227. LDA #LOW(Play_Time_Pos)
    / x# P+ e$ ?2 y
  1228. STA PPU_Addr,X
    ' ~, [( L  \; q; W3 ~
  1229. INX
    ! G8 l0 z, \3 R9 r3 R" y9 p
  1230. LDA #$08: y1 I& N1 U/ o9 ~) B/ g
  1231. STA PPU_Addr,X" `7 U$ C, O; R  n* v& j4 o
  1232. INX
    / T/ Z# e' d8 K* O: X# I0 T
  1233. Time_Show_H
    : @+ {9 K. |) i, }; ~8 R6 z
  1234. LDA <Time_H
    ; }) B- u5 T' |7 b( Y! M+ b! k
  1235. JSR HEX_To_Dec
    ' c5 V7 J6 L/ x8 o
  1236. JSR Time_Digit
    ' Z2 o& [( o. t8 O  j( G: ^
  1237. LDA #':'
    % t7 h& w5 r# @% K8 G$ q  d2 v
  1238. STA PPU_Addr,X" \: H2 e9 M6 l, r9 w. W7 C7 s
  1239. INX
    9 k; t7 ]& m8 {4 H+ H7 }' x
  1240. Time_Show_M& v8 f/ }; o% K( b9 r  ]
  1241. LDA <Time_M
    3 e3 I% Z+ x. {+ J/ U: d
  1242. JSR HEX_To_Dec: c% E' z% c3 l; Y9 y- r% Z
  1243. JSR Time_Digit" `/ Q$ R+ Z4 ~+ \. O$ U
  1244. LDA #':'
    + S" U% t( n5 `  v" J: k! {- A
  1245. STA PPU_Addr,X
    6 ?; u% V1 p: e4 h" M# O  H2 Y) Z/ i
  1246. INX, V! O4 S+ x) ^' J
  1247. Time_Show_S2 X( J/ I* I( d1 h, [7 i
  1248. LDA <Time_S- V5 f( G7 H% o; F) A
  1249. JSR HEX_To_Dec, l& A9 m" G9 ~. U
  1250. JSR Time_Digit
    ) F2 B# H# Y# Q/ x( n8 e
  1251. STX PPU_Cur( @4 W, {0 {$ X9 {. ?* L( n9 q
  1252. Time_Show_Enable, H# ?5 p& y) L6 u( b& c& V6 S/ G1 |
  1253. LDA <Text_Disable_Flag+ b  x4 \. r2 E% _9 v
  1254. AND #TEXT_DISABLE_TIME ^ $FF, Y( _  w8 v  A" |$ s
  1255. STA <Text_Disable_Flag7 v. W  k( }7 S, N  X( @
  1256. Time_Show_End5 |: d9 s% E) i$ y/ U' L
  1257. RTS
    0 c) h$ a. R5 s! @6 w
  1258. 6 M( f  j4 A  B& x3 V! b
  1259. Time_Digit1 x/ A0 @4 |8 `7 S' J& ?4 O
  1260. LDA <DEC_T. Q& n1 G- G6 O. N' y1 T6 {' Y
  1261. ORA #'0'
    1 Z' f; ?% T, X* }" }0 p! b! a
  1262. STA PPU_Addr,X
    $ y: S) f- i7 |0 e0 e, ?; V: v
  1263. INX
    3 v2 G1 l( Y, O% [2 J% V. h
  1264. LDA <DEC_L0 g9 c# S7 F& A# _  y# S( |! s
  1265. ORA #'0'
    # q  X9 z5 H7 q" f1 m3 J8 c. w1 q
  1266. STA PPU_Addr,X2 {; ?7 t% p: o. H0 N1 {
  1267. INX  ^( Y! b2 T+ o+ q  Z+ h7 P
  1268. RTS
      ]5 C7 w& u. Y( q8 L1 A" ^, q: U  Q/ d
  1269. . y( B3 c% b- h& I, H# M
  1270. ;==============================
    / U( h  T  N1 c* y# s$ i' K( n; j
  1271. Time_Count;计时7 I: e9 T+ ]8 g1 a0 t! w% b5 O
  1272. LDA <Music_Stop_State! M4 D5 h& _8 T9 s& V
  1273. ORA <Time_Wait_Cnt* a; j, d/ I, r/ R
  1274. BNE Time_Count_End
    ( r/ W& E8 s2 P! h  a6 r
  1275. INC <Time_Cnt
    6 B- ]. P' Y# g* \' O* X( S
  1276. LDA <Time_Cnt
    0 {; D' g& F2 G) z" t  f
  1277. CMP #60
    1 T- K8 W! t6 M, `- [
  1278. BCC Time_Count_End+ @, e, l+ ^3 x. R/ n! B3 b& z
  1279. LDA #00
    5 e- t" L) F& X* w1 h# v
  1280. STA <Time_Cnt# n! |4 s  B7 Z4 g1 N
  1281. INC <Time_S
    ; B4 @0 W6 Z6 A6 V- x; @" C
  1282. " g/ P3 q5 T  l! c% y4 l
  1283. Time_S_Cnt5 w& k5 c" h# W
  1284. LDA <Time_S
    / Y4 a2 I7 n4 C% U. Q
  1285. CMP #60
    8 t3 D6 Q  M% W8 y. U' p4 V
  1286. BCC Time_Count_End
    " S5 [1 H* p/ X! C" m
  1287. LDA #00
    7 F, t) @2 J3 b4 f, G. a9 t! X# F: D
  1288. STA <Time_S* G5 i3 J! G- X" [* J/ k. r
  1289. INC <Time_M
    * R4 D% B1 h" G3 q$ }

  1290. 2 r9 T, B, x+ S* T0 m
  1291. Time_M_Cnt
    " I+ X) E0 i3 B
  1292. LDA <Time_M" n4 X! q3 S3 `8 O1 P& p
  1293. CMP #60' D5 _, v! g( l( S# `
  1294. BCC Time_Count_End
    4 q0 G3 @  r0 t' p" y: a
  1295. LDA #00
    $ @- X; O+ `- R6 }; M/ ]6 w! t3 ?
  1296. STA <Time_M
    2 g6 l$ B) l! ?1 C( d( k
  1297. INC <Time_H
    ' v- \" F3 D6 I+ q# r
  1298. 5 M1 h7 W" `7 ~; |
  1299. Time_H_Cnt
    2 z1 Z/ f$ t6 A- C/ Q' I; n( U
  1300. LDA <Time_H
    2 O5 G4 E. C1 l/ e5 Z$ V- s( j
  1301. CMP #24
    ( `: s$ ?) S# N4 x
  1302. BCC Time_Count_End( q* |6 z7 d) D( a
  1303. LDA #00
    / H* `3 c% g1 p6 H) T( V" W# }2 S
  1304. STA <Time_H8 A$ o7 c# [1 E' D# L
  1305. : W) X( _& c' v5 X0 S2 j
  1306. Time_Count_End7 A6 e2 t/ ]; }- Q5 F  ?9 E
  1307. RTS' t+ i7 Z1 |8 q4 A# R. U

  1308.   w/ q# N2 O% d* z
  1309. ;==============================; f# T9 Z3 q3 Y% i* g' ]9 G; M
  1310. Time_ReSet;播放时间重置( K9 B# U. B+ S8 A0 M9 {
  1311. LDA #$00
    + C; E' h8 c9 ?
  1312. STA <Time_S8 y% V0 u. y  {1 X8 g$ _
  1313. STA <Time_M
    1 o2 P5 o1 a- D* b
  1314. STA <Time_H7 W& j8 d" ~% C, W: T- t- \
  1315. STA <Time_Cnt
    & r% e, y& u1 @) K; T# B
  1316. RTS
    ; p9 s9 P0 C) }7 f, L

  1317. ' t9 M+ j7 r$ y& U) X; P) x
  1318. ;==============================
    , h! }4 S& x3 ~0 K) @+ a) w
  1319. Music_Bar_ReSet;音乐条重置
    * f6 F& Y7 x7 n; X
  1320. LDA #$00
    - h5 z0 ^3 u6 E, s
  1321. LDX #$009 L7 j# z6 Z9 r7 D: @* P/ U2 B
  1322. Music_Bar_ReSet_Set
    # m. a! Q0 J& H0 t
  1323. STA Sound_Bar,X4 X6 _  ?6 F- R# G' B0 b9 m; g
  1324. INX
    + }% N1 V  |3 O/ D) `/ B' ^
  1325. CPX #$10
    3 }; V( n' d2 R+ X, r# U
  1326. BCC Music_Bar_ReSet_Set# f) e( V' g0 l) i4 ^
  1327. RTS
    3 W6 M$ F( n0 }' e9 {) Z  a3 b! K

  1328. 6 Z4 _8 p2 u, L; _0 ]8 u, A
  1329. ;==============================0 m, @0 t9 c1 J& S1 N& m; X
  1330. PPU_Data;PPU数据写入# r" T2 z3 E  m, B' @% {6 d3 ]" J4 [3 k6 `
  1331. STY <Data_L$ _2 P9 U, ?9 G$ k* O: K7 {% z3 f: i3 i
  1332. STX <Data_H$ Q! i  h% M* v: p/ r- Z
  1333. LDY #$FF) V5 H" B$ k( m2 J; u
  1334. LDX PPU_Cur5 ?2 R: c# `$ N. @
  1335. DEX
    7 }# @" c) j6 _( g! q; j
  1336. PPU_Data_Beg# P8 c* Q7 \: }0 p
  1337. INX' i9 \. N1 `: D, [3 v: y
  1338. INY0 E8 Z, q# A5 @
  1339. LDA [Data_L],Y0 u/ s/ I7 d  H- r9 O$ T% z, X6 g+ [
  1340. STA PPU_Addr,X
    6 R/ B. W6 w0 Q" n5 f9 E& F0 |  {
  1341. BNE PPU_Data_Beg
    2 P. ]0 p' |, M! C
  1342. STX PPU_Cur% @3 g- _4 z% T4 n* a
  1343. PPU_Data_End! A  H5 C& `' ]$ N) f" i: X, L
  1344. RTS9 y* `; i  U, {& |& s
  1345.   ^( ~. \$ K9 W) l, G: D
  1346. ;==============================
    6 }+ W/ K; P' [7 Y) ?$ n" w
  1347. Music_State_Show;播放状态显示
    6 k0 m1 q8 E( o: o
  1348. LDA <Music_Stop_State
    . L5 _0 K9 w6 x
  1349. BEQ Music_State_Show_Play
    $ k4 b0 B" ?  [0 I3 z
  1350. Music_State_Show_Stop
    # a/ d( b. ~0 m) h+ B6 O& v  a
  1351. LDY #LOW(Music_State_Stop): k1 }/ M# K; F9 M& w; {
  1352. LDX #HIGH(Music_State_Stop)- T" l- @# _5 k
  1353. JSR PPU_Data
    2 T' l' W) K" b! I; i
  1354. RTS+ [) g" O2 c* ^5 F6 W# u' \+ F6 q
  1355. Music_State_Show_Play
    % g% J7 g# D' U' t% Q- E3 m
  1356. LDY #LOW(Music_State_Play)
    ) I- C2 A9 X( }2 R, U* o3 ^8 S
  1357. LDX #HIGH(Music_State_Play)
    1 [& M  o) K7 K0 w9 d
  1358. JSR PPU_Data4 j% o, }) ?( l3 V
  1359. RTS: l4 K* K- [2 U) t

  1360. 0 K9 p  j. r, A( d9 j, @; V
  1361. .IF SOUND_BAR_SHOW_ENABLE
    % d- J7 t2 T5 D+ e1 n! ^! L
  1362. ;==============================
    ; W( |, E& X7 o6 S  |) c
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    ( b/ Y' }) c7 e; g
  1364. LDY #LOW(Sound_Bar_Text_Data)
      _( o" L! j8 e. N/ ^
  1365. LDX #HIGH(Sound_Bar_Text_Data)6 ^! u# {! f9 h% c) s3 E  e  A+ y& D
  1366. JSR PPU_Data
    # T! k/ H7 w* X4 |2 R9 R; ]
  1367. RTS4 d: R* h% P$ G/ P: X1 _

  1368. " t  x! X: }: v8 j' i
  1369. .ENDIF
    1 t( |; K: W- |5 f. I  {; t8 A

  1370. 2 C: ^, t" \- u8 |( L7 I$ p) a% \
  1371. ;==============================
    ) D7 ?3 z1 c% d- @4 y" O# s
  1372. Set_NameTable_Attributes;设置命名表属性
    6 R( I" w5 V4 Y% v/ }1 N/ r
  1373. BIT PPU_STATUS* X5 [9 N1 D( e$ A
  1374. LDA #$237 `& R& g7 y% u" Q3 y" |( l! n% Z
  1375. STA PPU_ADDRESS
    9 u& h7 u1 L9 P& E9 g
  1376. LDA #$C0
    2 k4 W9 c- j; G6 n3 |6 s
  1377. STA PPU_ADDRESS& p2 b8 P2 R+ o% h" i& j
  1378. LDX #$00
    * |3 Y4 R+ S* J$ l* [0 x: F
  1379. Set_NameTable_Attributes_Write7 M* c8 V) c9 y7 D$ i7 Z
  1380. LDA Palette_Attributes,X" r# @4 x, P5 @/ S& K7 x
  1381. STA PPU_DATA' s# m2 }& v* _
  1382. INX
    % U1 I! {4 Z) c2 G% V# T
  1383. CPX #$40
    1 N. ~7 p8 i  f% f- Q% m, B7 ?
  1384. BCC Set_NameTable_Attributes_Write$ t1 Y/ a; E3 m9 ^: @% U) Y
  1385. RTS, B2 n( S" \* N( H; y3 J

  1386. # u* G: I6 X( A% d
  1387. ;==============================
    / M" `$ }0 f7 U9 ~/ m
  1388. Set_Palette_Color;设置调色板数据. q# t) x. F  p1 U# u0 f
  1389. BIT PPU_STATUS, B0 b8 h* e1 a+ I/ c/ n; K5 k- H
  1390. LDA #$3F# `! h; |+ I+ O' w8 ?
  1391. STA PPU_ADDRESS5 _' J2 Y, \3 y% D
  1392. LDA #$00* U+ h, L; L) F7 Q0 C1 E
  1393. STA PPU_ADDRESS& b3 x% S) ~8 q9 v) `* \% ?4 j# S
  1394. LDX #$00
    " X0 q, Z3 i9 E% S1 T; V8 k+ c' \7 e
  1395. Set_Palette_Color_Write
    + `% ]) g9 ~8 }; J
  1396. LDA Palette_Data,X
    5 Y5 H$ \! g4 r/ A" J. f4 \' r$ _
  1397. STA PPU_DATA
    7 a$ G8 G# f8 t( q) S
  1398. INX
    2 X, P; z. \8 t) [
  1399. CPX #$20
    1 N6 c( J, t3 J0 o; z
  1400. BCC Set_Palette_Color_Write
    ) _; O; _. K- r8 v) m$ X. o: \
  1401. RTS2 W6 h: T) j2 @4 X( M% W% |% B$ b, I

  1402. % n+ J6 x) F2 B2 D+ x
  1403. ;==============================
    9 r3 |+ D) w/ I% m7 r
  1404. Init_Palette_Addr;初始化调色板数据
    + v& }, `1 Z" o8 ?+ Z1 g4 w& a
  1405. LDX #$00
    , m5 K3 B9 k! k! u
  1406. Init_Palette_Addr_Write; B4 G+ T) g0 B# n& x; @  K
  1407. LDA Palette_Data,X' _8 o( C" L; I" q4 z, C
  1408. STA Palette_Addr,X6 F: \( _3 b% ~
  1409. INX/ e  M8 L  @7 U- U& _
  1410. CPX #$20; H! v2 K8 L3 z1 Q* s) ^% @( @
  1411. BCC Init_Palette_Addr_Write4 W* A$ \: J- V. @+ d
  1412. RTS
    8 ~/ Y1 L, G: \/ O/ f
  1413. 6 ^8 E( X2 M$ T. I2 G
  1414. ;==============================6 a( n, X5 H' b# G) o: c$ D/ N
  1415. Update_Palette_Color;更新调色板颜色, \7 u6 K, \. ?0 Y5 q
  1416. LDA <Palette_Update_Flag7 A. Z& W  d3 y. l0 F
  1417. BEQ Update_Palette_Color_End  x! C$ x6 r9 Q, P+ q* s
  1418. LDA #$3F( ~" E8 o$ c+ S; m6 h) U
  1419. STA PPU_ADDRESS5 f3 C( C9 M: B; T* v; d
  1420. LDA #$0C
    + X5 A, h) U: _5 P' v8 i% q' D
  1421. STA PPU_ADDRESS
    % B/ P4 y8 w& s  q' C$ j
  1422. LDX #$0C; I' G* F& |, ?- z9 x1 x+ j
  1423. Update_Palette_Color_Write8 M7 @3 K' X$ w; u1 O
  1424. LDA Palette_Addr,X
    6 u% F' l. P/ C+ \
  1425. STA PPU_DATA
    ! {, G& u: B; R
  1426. INX
    $ I; G6 r% B( b- ^
  1427. CPX #$14
    ( L% k& z) |  P5 d3 T
  1428. BCC Update_Palette_Color_Write9 _/ {" I! S" ~  k
  1429. LDA #$00# B% [+ h% E+ ]4 q' `  ~
  1430. STA <Palette_Update_Flag1 a2 h! \7 [) m% ]2 G
  1431. Update_Palette_Color_End
    " u; D- V/ z5 F# y: N
  1432. RTS
    ) P' g$ ^9 f% U- A7 K8 L- h7 X7 p
  1433. $ \9 s2 ~! q* K5 N) p
  1434. " N. P8 H' G- d; P; U
  1435. Update_Sprite_Palette_Data
    # D4 J! l  P/ m  K9 A
  1436. .DB $21
    6 k$ o# ], o8 ]$ f! c6 E, `& }$ t
  1437. .DB $21, Y+ J# r7 O9 K& J& L& m
  1438. .DB $11
    0 C9 I3 n0 _* q, E. i4 D
  1439. .DB $01' l+ ?& G! O/ \- `* L" f% N5 H
  1440. .DB $01
    6 X1 ]# O5 M* ~6 Q3 c. a# \
  1441. .DB $11
    : ?, C( d7 ?3 d3 R/ {
  1442. .DB $21' [/ q( \2 O; x) \3 }
  1443. .DB $21
    ( K; z" D& o4 T3 y6 z
  1444. .DB $11& b; r& ?  x1 u; b7 W, c: O
  1445. .DB $01
    * n1 R" V" c/ {% T. f7 Z; t
  1446. .DB $11
    - _7 |* t/ K* j. }  O  ]9 m
  1447. .DB $217 c# B/ P: z" M1 n9 I  c, d8 I# L
  1448. .DB $21! y( e8 f/ M$ L/ W
  1449. .DB $11
    - v3 \$ W' D1 s8 b
  1450. .DB $01
    + t6 @6 b8 l% v
  1451. .DB $11' p( `+ W& c* c: p
  1452. ;==============================1 X$ U2 b( v1 x5 t6 Z
  1453. Update_Palette_Data;更新调色板数据
    4 Z( C* g! u1 ^2 ^( M) u
  1454. LDA Nmi_Time_Count6 L7 t# j: C" o+ d# i" V7 c
  1455. AND #$08
    ( o& E& S6 z/ H$ ^* l0 M
  1456. CMP #$08
    & i* ?% o' G, T8 I- v% I8 ]
  1457. BNE Update_Bkg_Palette_Data
    " ~' b4 _4 @0 |  B6 F; C

  1458. 8 x$ @( X9 _0 O1 \3 x0 a- f
  1459. Update_Sprite_Palette_Data_Set$ y" w3 `* t$ S
  1460. LDA Nmi_Time_Count" Q7 e( Y+ v  G; ~: p2 x$ H
  1461. LSR A. u' \8 w! i0 O; i$ k
  1462. LSR A
    2 [) l9 [8 R2 f6 \. B/ F. f' `2 [+ R
  1463. LSR A7 g% ^, F, h8 `  R$ q/ [/ [
  1464. LSR A
    5 S0 Y' F5 b4 R& W
  1465. AND #$0F
    7 N8 a% z: X  j- j4 o1 z% v+ d' K8 _
  1466. TAX5 x- Q! z; v5 U5 X7 H6 Y: ^- Y
  1467. LDA Update_Sprite_Palette_Data,X
    $ [! |% n7 @3 G) e/ f: [( T! r
  1468. STA Sprite_Palette_Update_Addr
    * M0 j- O( ?; g
  1469. LDA #$01
    6 a$ f9 o5 @1 B
  1470. STA <Palette_Update_Flag& _3 |! u) h4 n/ E* y/ y9 O5 I
  1471. ( A6 ^( ]" S" `
  1472. Update_Bkg_Palette_Data. A% A) m( a( A3 u& ], E5 {5 `
  1473. LDA <Text_Disable_Flag$ i6 j( }5 u; D( @
  1474. AND #TEXT_DISABLE_RAM# f, U! _* I0 x$ {0 |+ f5 V, P
  1475. BNE Update_Palette_Data_End) c; L( B& t* P2 ^2 H2 O
  1476. LDA <Music_Stop_State( q% U; f: P% W, `3 w9 ]. U" N" ]
  1477. BNE Update_Palette_Data_End! y( H9 Z" d" k

  1478. ' b& p2 Q* K, F2 I2 L
  1479. Update_Palette_Data_Check3 i  u; b- S$ S8 w9 ^) `* {$ x4 P
  1480. LDA Palette_Wait_Cnt; P9 g, b5 k! J- [
  1481. BPL Update_Palette_Data_Check_Over
    $ C* R" k+ U' a% v/ J
  1482. LDA #PALETTE_UPDATE_INTERVAL
    , I; @" Y: P$ O
  1483. STA Palette_Wait_Cnt( T% X* H9 S8 X4 b& y0 `0 Y0 M
  1484. Update_Palette_Data_Check_Over" t. M, }5 t/ k: Z+ n3 w; S8 v  C
  1485. DEC Palette_Wait_Cnt8 V; l( o9 \8 F2 X0 m3 e* l
  1486. BNE Update_Palette_Data_End+ u; y4 y2 v( T
  1487. * X  _6 X, B1 r2 a4 ~1 S
  1488. LDA <Text_Disable_Flag$ P3 H* n9 h: k
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME# F6 _, U6 a- y4 J6 }7 V+ A2 g0 I
  1490. STA Text_Disable_Flag
    : Q# @/ @" I' U" @! C
  1491. INC Palette_Update_Flag$ Q3 w. D0 Q) P' n, Z4 _
  1492. # ^' c: J6 i$ d9 L" k/ P0 y
  1493. LDA #PALETTE_UPDATE_INTERVAL
    % m9 z; c7 ^7 _; z* U
  1494. STA Palette_Wait_Cnt4 a. u& {2 C: f( b

  1495. % T  O6 E) h5 _1 S8 j; I! u  v
  1496. LDA Bkg_Palette_Update_Addr) \( ^$ r! I8 B) u
  1497. CMP #PALETTE_UPDATE_MAX, a4 H) u; Y4 @# S8 W0 E9 X
  1498. BNE Update_Bkg_Palette_Data_Set
    % w9 n: K( M# N( z' A& U( Z$ m
  1499. LDA #PALETTE_UPDATE_MIN - 1
    * ?/ }! _7 S/ B& j; m
  1500. STA Bkg_Palette_Update_Addr
    . V3 B3 x+ L0 t3 v  G
  1501. Update_Bkg_Palette_Data_Set8 X6 C; w4 \2 g2 e. `3 l+ g# }, [
  1502. INC Bkg_Palette_Update_Addr( E( e  y' ?0 J% {! r

  1503. ( ^, O5 ^2 e, l& [: X
  1504. Update_Palette_Data_End6 y+ T% ~2 ^& F# W
  1505. RTS
      c, H9 Y- m9 P1 ]0 |7 ]
  1506. ) B% b! Y# w1 i# a6 H) K8 R1 S( i
  1507. ;==============================
    ( U5 [. U( z) n" Y# _
  1508. Show_Music_Text;显示静态文本1 y& u' ~7 ^  H5 v. {3 C
  1509. LDX #$005 l" ~% H/ r5 p* i& Y1 P$ f' ?- m  }
  1510. Show_Music_Text_Set
    : d$ W. N9 ?; {- R5 A
  1511. LDA Static_Text_Data,X# L! ^& p9 s' _* Y" R& w: N
  1512. STA <Data_L7 l. b1 W- O  F. \  z' q  {
  1513. INX& f. a: V# `$ T3 ~8 {  d
  1514. LDA Static_Text_Data,X
    % x( l- d0 n1 I- _# v) E7 a* j5 ^  d0 l
  1515. STA <Data_H+ ~- r/ O+ D  {3 M" D3 j" d- y
  1516. INX
    , s9 \) W5 w/ o8 S7 M& H
  1517. LDY #$00
    ; B* n, g% t. l4 Z% s- b8 x
  1518. LDA [Data_L],Y( x( G. E& L* O* w* i# H+ b5 }' c
  1519. STA <Data_Cnt# W: h( U5 I. i6 e+ _9 F% N
  1520. DEX
    ) K, k1 X" J( [) t) _
  1521. DEX) o& W' h" }; X1 ~4 c/ z$ m
  1522. LDA Static_Text_Pos,X
    ' ^: a$ c  E( `! O
  1523. STA PPU_ADDRESS) |1 r7 y% N: K7 L8 I
  1524. INX- {) H" n+ m3 r
  1525. LDA #$20
    0 D( d8 |0 \+ n0 i& }! ^0 i$ ]
  1526. SEC. d9 l2 `: s, X4 y) L* g; X
  1527. SBC <Data_Cnt" {  j7 z! L0 g3 Z4 T! k& e/ u
  1528. LSR A
    : Y  Y% [7 w" i/ W8 s3 w
  1529. STA <Data_Buf
    9 V$ u" K/ `( E( ^% d; o9 y
  1530. LDA Static_Text_Pos,X( i' {: ?9 ]2 o6 Z8 r4 @
  1531. AND #$E0
    ' R9 |4 O% v7 |) a
  1532. CLC
    * k* O/ M( I: R4 x* z. D- ^6 r
  1533. ADC <Data_Buf
    * U! ~" n+ z& g- R  J: t2 x
  1534. STA PPU_ADDRESS
    1 [9 d2 M) Q1 E: y5 b' s& X; T* Q
  1535. INX$ b1 I% }9 `9 s2 ?5 W$ D" h- c
  1536. Show_Music_Text_Set_Write
    + j4 S- ^3 D+ b% Q
  1537. INY
    4 H+ {0 s( B* A/ t
  1538. LDA [Data_L],Y
    $ O# R! _3 Y* R3 J, O. H  t
  1539. STA PPU_DATA
    , l" d& `1 i/ F3 j  V9 z  a3 R+ S% j
  1540. DEC <Data_Cnt! h( @4 w5 q6 N, A6 {, [+ l
  1541. BNE Show_Music_Text_Set_Write
    ! R4 D7 E) d2 z" m; f+ C
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos' |: R4 l/ `8 T( ?5 n  A2 F
  1543. BCC Show_Music_Text_Set1 n: |% A5 y8 S+ i* P
  1544. RTS& C! a! }6 D& a
  1545. 2 F) T4 D$ Z* J6 l0 R7 k2 T' v/ S# b
  1546. ;==============================4 h- e4 x. @/ y
  1547. .IF Track_Name_Pos;显示曲目信息  J7 @% @& Q+ D' `- T* c3 i0 W

  1548. + C' e" z5 [8 X9 G0 `
  1549. Clear_Track_Info$ f! z: O7 |* r" C  c9 e
  1550. PHA
    * @) z5 a- R4 Z) t& }
  1551. LDX <Music_Item_Cur
    ( {9 e! M, s+ m+ }) w: P% L
  1552. LDA Track_Name_Addr_Flag,X
    / Z; M; p) @' x- Y# J/ l0 r( V
  1553. BEQ Clear_Track_Info_End_Ex7 L9 O& t' s# I, b1 E
  1554. PLA, ~, o" ?& W- ~& M. a$ I2 e4 r2 a

  1555. # e" |. p, Y5 H! e( H2 ]6 n# i
  1556. LDX PPU_Cur
    $ b$ z+ e# Z' `/ B
  1557. PHA% S% S7 S( ^$ |0 m7 D1 t' H
  1558. LDA #PPU_MODE_CNT_CLEAR, J3 X; O* p0 v9 k! G. I! j1 e
  1559. STA PPU_Addr,X1 N4 e" B, H4 a' v. I
  1560. INX
    . b/ T% B9 a/ s$ }3 e4 p3 e
  1561. PLA
    " G3 n9 B) |1 f( y8 `3 N+ {
  1562. JSR Show_Get_Track_Name_Center_Pos: l: a  ?6 m# L5 r5 t8 x
  1563. STX PPU_Cur
    ! d7 s; K3 `0 ^2 Q& O! I& u4 G
  1564. Clear_Track_Info_End
    ' `2 f, x' U* I5 R8 M2 ]
  1565. RTS( @5 |  Y6 V3 U$ O2 ^
  1566. Clear_Track_Info_End_Ex
    , V. `$ ]! H+ l" h9 F
  1567. PLA
    : e* L  X' J  y& O- [- q- ^$ K
  1568. RTS
    0 V* ~1 E3 K; J  r+ W" r! X
  1569. 4 E* ?; q: t$ t/ m
  1570. Write_Track_Info
    5 I, \4 `  b2 X3 }; _: t. y" f
  1571. PHA
    : Z6 r& m# E* Z/ f( |% t
  1572. LDX <Music_Item_Cur% m9 P/ r$ {7 @9 }' O' h
  1573. LDA Track_Name_Addr_Flag,X
    ( R+ [! a; Q7 Q# H
  1574. BEQ Write_Track_Info_End_Ex+ d* b9 `/ Z; Q, u) C
  1575. PLA
    . M3 x( W6 t2 \) U; m& R
  1576. 9 K9 _$ ~$ k) `( M& R/ A4 T2 k8 Y
  1577. PHA$ Y5 h5 e3 n/ c
  1578. LDX PPU_Cur! D) b- B( T8 H& U" ]& Y
  1579. LDA #PPU_MODE_CNT_LINE
    ' s5 L6 w9 Y+ h
  1580. STA PPU_Addr,X
    - `2 t) D2 _; A- _! w: b# T8 ]; l
  1581. INX4 ]! a+ @+ Y7 ~& T. X+ g& S
  1582. PLA
    , R  D2 v  l* }# v! k
  1583. JSR Show_Get_Track_Name_Center_Pos  {/ w$ Z- c% Q
  1584. Write_Track_Info_Data# v+ S9 Q$ k0 U' x- ]: Q5 o) R0 k
  1585. INY/ P' ], G7 R) H* E
  1586. LDA [Data_L],Y
    9 M( |* ]1 j" Y' K
  1587. STA PPU_Addr,X0 u  A' i! b, K& f' w) o
  1588. INX
    4 ?9 {  B* i1 \
  1589. DEC <Data_Cnt* O8 U8 \! Z( T: U
  1590. BNE Write_Track_Info_Data7 h/ }& r5 X+ E( Z' v; F
  1591. STX PPU_Cur- K5 H& _% [( |4 f+ D7 i! L
  1592. Write_Track_Info_End
    & s$ u9 W% h4 i, [. \
  1593. RTS
    ' M. P; d+ ?( X- e5 K
  1594. Write_Track_Info_End_Ex& b2 X! x( f, t6 V' o
  1595. PLA% g* {3 a+ j6 p5 m; r! c" ^! K- }
  1596. RTS4 v# _* D: @0 Z; L/ r, s' \

  1597. : U0 ~$ d( t: }
  1598. Show_Track_Info
    " _) A" N9 |. f* n& z
  1599. Show_Track_Info_Clear
    8 U, ~* E4 o. M9 {
  1600. LDA <Music_Last7 y1 d: O4 {- w- ^' f3 E) p! `* z

  1601. ; B0 `% t* Q% D! ]" h; R
  1602. JSR Clear_Track_Info
    # `2 f4 g& F! P5 u1 ^

  1603. % [( E3 _, ?0 J: U
  1604. LDX <Music_Item_Cur
    / r1 \: {. X0 l2 _
  1605. LDA <Music_Cur,X
    / k: `3 M4 j8 i& L6 ]
  1606. JSR Write_Track_Info; {" M  _2 [9 P, c& }5 y
  1607. RTS
    . e6 A6 R8 q& `
  1608. 6 P8 m2 K( B) @" n5 }
  1609. ;==============================
    # C. i$ T) w  J! J8 V  y
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置
    7 G' D5 z% P4 P/ z* H9 y
  1611. 4 ~2 T+ O, o  W' h
  1612. ;取出集合名索引
    2 ]6 n* n/ S$ J  [9 s1 Z; l5 O; r$ [
  1613. PHA8 T0 E3 r* f' W9 Y6 \. Q8 }7 c) Q

  1614. , H# v$ g# C- `, v% P
  1615. LDA <Music_Item_Cur
    2 U2 O; i+ s, C$ K5 U0 R
  1616. ASL A
    & d) z5 [2 z/ z- H8 b
  1617. TAY( `/ ^6 P2 X' o# ?; ~
  1618. LDA Track_Name_Addr_Port,Y6 K2 l; X- n9 |, o
  1619. PHA1 S+ R* W4 Z% y- m" D
  1620. INY4 o9 k# f/ i1 |& }' W$ Z' Y
  1621. LDA Track_Name_Addr_Port,Y
    7 c& I! |. i8 R& o
  1622. STA <Data_H
    ( Y; z# T* B' j! c
  1623. PLA
    ) Y* P8 k# R0 R! L! q
  1624. STA <Data_L/ b. D& T+ N% e8 ?8 g9 h( {

  1625. 7 d. k; Z2 P/ x; ]4 _4 @9 j
  1626. PLA
    6 Y4 q5 J0 j, p
  1627. : B- W- E: l% C0 S, }2 c
  1628. ASL A! g  X- Q* ~8 U$ N
  1629. TAY5 `7 C! [% D* q2 K
  1630. LDA [Data_L],Y, r! v- e1 U# g" Y$ R; O1 ~# I
  1631. PHA
    3 ]3 \4 E2 D3 v( Z+ r* E  M8 V, m
  1632. INY" W/ H) ^$ b: D9 `* K
  1633. LDA [Data_L],Y" _7 P; N# M) L$ p9 m! q9 @
  1634. STA Data_H
    - S3 l& Z0 e4 O) \0 k7 z
  1635. PLA
    " j6 U' u+ x  |( Z/ K
  1636. STA Data_L
    * c4 c7 ~: R( `" Y) X- |

  1637. . n" _2 z( F. J: o( K
  1638. LDY #$00" W  n0 @% t8 ^0 A  S9 P9 A  a
  1639. LDA [Data_L],Y3 A5 y/ j: h1 N' Q9 b
  1640. STA <Data_Cnt
    ' ?. C) C+ b1 ~; q/ \. l
  1641. LDA #$20
    # n% @! D- M  f7 x9 R9 b+ n
  1642. SEC
    ; d3 j( S8 W* P: Y4 g: |5 |& w
  1643. SBC <Data_Cnt
    / d% x7 D# ^* U
  1644. LSR A  H5 H& Q. w) T. W/ m) `2 i
  1645. STA <Data_Buf3 m% h3 ^5 n( Q% [, M
  1646. LDA #HIGH(Track_Name_Pos); @& x4 _2 U# s7 a% j; [/ N
  1647. STA PPU_Addr,X1 [, o! v1 R- r; r; b7 P* x' Q
  1648. INX
    1 k: C' `* P2 q, N/ }% E
  1649. LDA #LOW(Track_Name_Pos): y+ {/ [" T/ T
  1650. AND #$E0
    7 ^# ?9 I. j% v6 G3 T9 t# n
  1651. CLC0 }) b' `$ U- Z' m0 ]# ?. T1 `
  1652. ADC <Data_Buf
    9 n: T2 I2 m# @  b* R. o$ ~6 ]
  1653. STA PPU_Addr,X
    ) M% _" f( w& N2 ~, v
  1654. INX+ G/ t! p+ x: w& Z: f- D. x  _2 ~, I
  1655. LDA <Data_Cnt$ C) K# x* I7 h0 g3 S5 G# z
  1656. STA PPU_Addr,X
    ) [( P) X1 e5 T. t+ U; H8 A  I+ N
  1657. INX- N* r0 k+ L' k& L. K" f
  1658. Show_Get_Pos_Center_End! d/ d9 G1 P" A, |( \. S
  1659. RTS3 b4 e$ t7 R6 w' x. R+ G* L
  1660. .ENDIF
    * P+ i% N3 E0 d+ ~' q( w! K  u
  1661. : e* m8 i- t* |9 t
  1662. ;==============================
    , ]) m- e) N8 S* \! E1 w8 y
  1663. ;音乐端口清除) W% V- U6 J- |/ }% g
  1664. Sound_Data_Clear; K3 H' G/ r3 m+ M/ k/ ?
  1665. JSR Sound_Port_Clear
    & G2 J6 S2 s- J/ w1 [
  1666. JSR Sound_Ram_Clear
    4 E! b. y* o; A/ o7 i: A
  1667. RTS, l; V; j! Z4 S
  1668. " i% W! l0 q* L  D9 x! B: c
  1669. ;==============================
    % |8 }! b6 ~( k! z  ^
  1670. ;音乐端口清除
    0 I- a9 t/ ~+ k5 L. k1 f0 S
  1671. Sound_Port_Clear
    . Z3 W: U' r( B1 N% Y! V
  1672. LDA #$008 V6 }1 S  \- T& o
  1673. STA APU_STATUS
    * Q- E. T# T9 b% V9 H6 a  O
  1674. LDX #$00& m$ N5 W* L6 G. d- m+ [
  1675. Sound_Port_Clear_Write
    3 ~( J) Y0 j' w/ e4 j
  1676. STA $4000,X
    $ U, \0 f4 K" ?  V$ ^# Z
  1677. INX" ^" v: j; F+ |! C4 A' t
  1678. CPX #$143 h+ W7 G' d& ]
  1679. BCC Sound_Port_Clear_Write
    ) p1 w7 Y0 t, V' R
  1680. RTS' n( p5 d) b0 |2 X, W0 G

  1681. & K: I5 `# P4 s6 v) [% Y: J/ `2 ~
  1682. ;==============================: l9 x" x* S, X4 ^* t& `6 }, f$ V
  1683. Sound_Ram_Clear;RAM清除
    9 q1 L9 E/ {1 j% X' x9 V- k
  1684. LDX #$00
    0 Q. t4 b4 z9 F  l- r7 X: }0 k
  1685. LDA #$00  }% Y  _% }& R/ d6 q
  1686. Sound_Ram_Clear_1
    6 M: g- O  r" l1 N! q4 u
  1687. STA Sound_Ram_Addr_1,X- O: J2 [! {* u' ^7 G+ Z+ m. l
  1688. INX( E. W" I% D+ K3 t6 |. s) p
  1689. CPX #Sound_Ram_Addr_1_Size% e6 @& C% Z# [* k1 e
  1690. BNE Sound_Ram_Clear_1/ u1 W/ U! I8 @0 ^
  1691. LDX #$00  ?$ r. J1 R3 J7 o+ d# Q% A
  1692. Sound_Ram_Clear_2
    " U3 Z# f0 r$ k2 B. W
  1693. STA Sound_Ram_Addr_2,X
    ; l. U' D; ^+ B) c0 V
  1694. INX
    ! V( Y! ^$ `" ~6 s3 j) @
  1695. CPX #Sound_Ram_Addr_2_Size
    , q3 U% U, B. D- Y
  1696. BNE Sound_Ram_Clear_2
    ' J8 P+ S  F/ Y- O
  1697. LDX #$00; Z+ i& E) E) G/ p6 v! t' J
  1698. Sound_Ram_Clear_3) \+ L; v- V4 P, o/ b; ?
  1699. STA Sound_Ram_Addr_3,X
      J! S/ l, r9 f( G
  1700. INX+ m* D$ @: f' C2 r+ H
  1701. CPX #Sound_Ram_Addr_3_Size. z' |; |: U6 `$ N5 w% V( v
  1702. BNE Sound_Ram_Clear_39 Q: z5 `& u6 p2 |: O# {) s/ t
  1703. LDX #$00; E* R7 m+ E# k# T, E* Z
  1704. Sound_Ram_Clear_4
    5 ?3 U4 q* H0 ]9 `
  1705. STA Sound_Ram_Addr_4,X1 B) z! {, B# n0 J$ p2 B6 U
  1706. INX  F3 U! y! x: n
  1707. CPX #Sound_Ram_Addr_4_Size/ g4 u- e3 \3 G" P
  1708. BNE Sound_Ram_Clear_4
    / H" v2 M% V# O' ]& ]) s
  1709. Sound_Ram_Clear_55 \8 s: y& U& ^, s9 S; ^
  1710. STA Sound_Ram_Addr_5,X8 B& k, e/ K, a, o2 ?" N# `  n
  1711. INX4 ]+ S  X5 [. c; H6 @( X
  1712. CPX #Sound_Ram_Addr_5_Size
    7 E1 w1 W: w1 l
  1713. BNE Sound_Ram_Clear_53 ?+ d) V" M( @: l
  1714. RTS
    , c, |, h: `- q( u" v2 R, F! I

  1715. * X* Y" Y$ u6 L, z
  1716. Get_Music_Collection_Name* t1 o) w5 k- ^. @2 n7 k5 s+ q' c0 i
  1717. PHA# d- P+ ^, o1 Z# o4 ]' ]/ j
  1718. LDA <Music_Item_Cur
    : S; }8 s# M0 p+ G" |
  1719. ASL A% d+ n9 V8 ~+ a* v! H* n8 t
  1720. TAY- N9 n, p! ?/ x, G1 X7 y- f
  1721. LDA Music_Collection_Name,Y
    0 |% P" N0 ^8 v
  1722. STA <Data_L, z5 E' p5 d5 \% |% X
  1723. INY
    7 s+ h3 F" k! f6 F6 {5 a  d
  1724. LDA Music_Collection_Name,Y
    9 d7 C3 K( G: a/ \- P. m+ ^
  1725. STA <Data_H/ I7 Y; D$ [( z2 W/ }& d) X3 F
  1726. PLA
    : Z* |4 \7 [/ j- \! @# I
  1727. RTS0 P, |. U' \9 f# Q; ]* m, P

  1728. : y5 u. s- }* {7 H6 f2 y
  1729. Set_Sound_Total, {; `  |9 `, `; \4 z7 R0 L
  1730. LDY <Music_Item_Cur
      O. g* [1 S& ^. R, f2 k0 V" W
  1731. LDA Sound_Total_Port,Y. e8 }7 ^) x4 v3 F! e
  1732. SEC
    ( [3 e, T5 m% t$ F1 Z- n, I
  1733. SBC #$01
    7 v/ K# _$ I5 r" C3 Y7 e
  1734. STA <Music_Total* \- [9 L: e! N
  1735. RTS- ~- W* ?; Y4 L5 _7 e; W

  1736. , @1 `8 S; ?) f( z& ?# A
  1737. Get_Sound_Start
    3 `1 r9 j4 i, Q% {0 h9 n
  1738. LDY <Music_Item_Cur
    - N: m3 x  T8 c# q( V
  1739. LDA Sound_Start_Port,Y
    4 @. ?$ i; k; C! z( E% q
  1740. RTS$ q" ]0 j% `4 a7 b+ V

  1741. 5 d* g# \, w6 S9 N, O1 b0 @
  1742. Set_Sound_Init_Port% R0 L8 B3 p; c9 I4 U% i: r# E
  1743. PHA
    6 z# Q3 F' d! l  S$ c! t
  1744. LDA #$203 v. n4 h  W% Y% O( C3 ~! ?+ G
  1745. STA <JSR_Addr_Op) j% U5 [# E' {+ |1 V, p. c& Y
  1746. LDA <Music_Item_Cur) f' n' g$ p! d, m* s7 D
  1747. ASL A
    : ~& ?. [5 ?& i! ^
  1748. TAY
    ; J6 L+ T8 ?) ~2 ~- x- q
  1749. LDA Sound_Init_Port,Y4 d7 E" X5 p& N
  1750. STA <JSR_Addr_L
    0 ^( u$ k, L; |% p
  1751. INY0 q2 [1 [$ n2 @1 M( [* b* @$ ~) h
  1752. LDA Sound_Init_Port,Y: ]1 K. T' X# h" H# ]: O
  1753. STA <JSR_Addr_H
    . B# K& O" l7 y# D
  1754. LDA #$60
    ' u2 W4 V$ Y6 w. u
  1755. STA <JSR_Addr_Rts2 |0 }5 W# L+ x; F
  1756. PLA  o) p+ o% l6 A$ [$ D
  1757. RTS- b- d/ w4 T9 M* ?

  1758. ! v: u, E7 ?- |5 K3 `; M$ `1 c* ~. @
  1759. Set_Sound_Play_Port
    $ \9 O- H" Q& `% m! G. V
  1760. PHA
    - r" s+ o: W& p" v; [' y
  1761. LDA #$20
    + e6 A9 `$ a( X7 T& u# R
  1762. STA <JSR_Addr_Op- y/ l' V$ v) G4 p9 n
  1763. LDA <Music_Item_Cur
    3 T% ?3 g/ }4 C8 w/ N" b, j1 P
  1764. ASL A3 w! u& R$ q3 T$ e) ]
  1765. TAY: }: l3 n+ g4 @; l( u- s
  1766. LDA Sound_Play_Port,Y8 _: t9 g. n+ Z" U# ]6 H1 [* ~  d
  1767. STA <JSR_Addr_L/ I& r$ }% H' I* H; s* s4 ]
  1768. INY
    4 x" c8 j. Z: n1 a9 M! o
  1769. LDA Sound_Play_Port,Y* j3 M3 w; A, w% o* D
  1770. STA <JSR_Addr_H
    0 |# [3 N* I# e: i  k
  1771. LDA #$60* C9 V' }6 {8 V- g: A' h, V
  1772. STA <JSR_Addr_Rts
    % r  k! {4 [% B# K+ z
  1773. PLA
    ) d3 h- D* H! k/ w0 b8 Z' A
  1774. RTS# q1 j: L0 q6 I. a
  1775. 6 s2 [4 t3 S5 `; {
  1776. Set_Sound_Reset_Port1 O0 ]5 v+ N1 c. s
  1777. PHA3 N; h% G  W: J, R8 T' L7 v
  1778. LDA #$20( |9 }) D6 u# v: N' `& B5 B2 n
  1779. STA <JSR_Addr_Op
    9 Q, ^) z, G; A5 E
  1780. LDA <Music_Item_Cur9 Y+ r0 R3 o# R/ i+ }! ^4 a
  1781. ASL A
    $ o: t7 V% m; D- v
  1782. TAY5 d5 b- H0 ~" x% p, G
  1783. LDA Sound_Reset_Port,Y2 g. I6 }' M3 P6 E
  1784. STA <JSR_Addr_L
    , T2 F% Q  y+ N, o! s( m6 H
  1785. INY6 |! B% @. `! }2 d7 c
  1786. LDA Sound_Reset_Port,Y
    1 G$ i! n- g/ x. m, O7 Y  m
  1787. STA <JSR_Addr_H5 x( q* m5 g5 _  \5 f, B
  1788. LDA #$60
    9 F! g0 A" k0 k2 C
  1789. STA <JSR_Addr_Rts. n5 }  y- a3 |- [6 c$ c
  1790. PLA$ v( G: |' f; {1 H! X
  1791. RTS
    + @$ v: V" @0 Z3 Z; `5 Z/ O" Y' l

  1792. . c1 K3 _) Z4 X' r2 h; r
  1793. ;初始化音乐bank
    ! ^; G+ F4 ^! _) H
  1794. Init_Sound_Bank
    ' K" Z2 M% k+ l# h7 J7 T1 o
  1795. LDY <Music_Item_Cur8 n; b5 }8 c4 K9 P
  1796. LDA Sound_Bank_8000,Y
    2 F' ]  k6 l& i; O" K6 y) b
  1797. STA <Music_Bank_8000
      Z9 w1 w: u! {4 {7 q8 [
  1798. LDY <Music_Item_Cur5 q( I& e0 S' `6 c& O) w4 G
  1799. LDA Sound_Bank_A000,Y
    # |+ o; m# a( i' M
  1800. STA <Music_Bank_A000
    0 A) y. D0 i9 R* N. Z8 N# B
  1801. RTS/ A& j# {: M4 m6 H
  1802. & Y; X& V7 m+ R9 f8 r
  1803. ;==================================================  _: t$ ]7 c) \1 H
  1804. Sound_State_Reset;音乐状态重置: n2 t2 n  @1 L0 g7 T
  1805. JSR Music_Bar_ReSet        ;重置音乐条
    $ I# I- {- w6 c' Y- l/ S6 G# w
  1806. JSR Time_ReSet             ;重置播放时间
    " n( q( _0 Z7 S0 h

  1807. 8 w2 j0 c$ C3 r( O9 w6 @! x
  1808. LDA #$00
    ) v0 P7 K: H7 W$ A% t$ Z6 N6 m
  1809. STA <Music_Stop_State
    : c2 r1 A& V, e! |- [% Q. Y
  1810. JSR Music_State_Show       ;显示播放状态' l# y6 o% c- z$ S: v* q

  1811. 9 B* ?9 x& U( E: u; F2 I
  1812. .IF Track_Name_Pos
    ( B* P/ p  S: F+ J
  1813. JSR Show_Track_Info        ;音乐曲目名显示* G6 l$ Y! m6 ]7 G8 E
  1814. .ENDIF0 E$ A$ L7 h! V8 Z
  1815. / d  Y6 n! o; L* E
  1816. RTS% l0 o+ q1 Z5 S9 w6 H
  1817. 0 r6 c+ |; @- S! a: s
  1818. ;==================================================2 r; _  {0 k! M$ M6 F
  1819. Sound_Init_Proc;音乐初始化处理
    " y% s# ]2 d$ [9 B2 v" N* f* o
  1820. PHA# @% L" C; z" w- x, G
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址
    * ^* M! k4 ~9 S: r  b5 y
  1822. LDA #$00
    2 l: q7 Q! [' Y% O. F0 n3 Q
  1823. STA <Scroll_H               ;重设水平滚动
    9 d+ p, e: o2 Y
  1824. LDA #$0F
    ' m' k% ]! }9 M  N( g" p
  1825. STA APU_STATUS8 k. l* u: m3 g" |7 r
  1826. PLA
    9 {2 T: x' {: \7 Y8 W/ }( C  u
  1827. JSR Sound_Init             ;音乐初始化
    $ M9 E0 t# R7 |1 Q
  1828. JSR Sound_State_Reset      ;重置音乐播放状态
    1 F* p" z- d4 K8 I
  1829. RTS
    2 _" {, G- S1 @  U1 L. X: R9 t

  1830. 4 U5 A  O5 D, A7 y( c: u5 i
  1831. ;==================================================7 P( R5 ~4 _& z1 ~
  1832. Sound_Play_Proc;音乐播放处理
    7 x- v3 _7 J6 X+ A. C+ ?# U+ n& N7 b: p
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址
    ) S/ Z* O  L+ Z+ {8 n$ w* ~
  1834. JSR Sound_Play             ;音乐播放
    5 L! }& n# C; ^' Z
  1835. RTS
    ; E% l2 y& m8 X/ f2 r3 b

  1836. + X  m- i$ k' G3 }9 K
  1837. ;==================================================
    - ]6 S$ i) C0 d) o) t6 l, n
  1838. Sound_Reset_Proc;音乐重置处理
    # n/ N& ]! l1 O9 u5 U- q$ Y
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址
    * l2 {- e' D/ I
  1840. LDA <JSR_Addr_L0 j4 u, n( P& P1 [
  1841. ORA <JSR_Addr_H
    ; U: m+ ^- g  H" f8 o/ G" q
  1842. BEQ Sound_Reset_Proc_Default
    / s1 }- u+ y' k- O  l7 A
  1843. JSR Sound_Reset            ;执行音乐重置
    3 {/ x9 z2 h. H; c0 o& ^
  1844. JMP Sound_Reset_Proc_Init_Sound
    : c; M/ b: l4 e1 s3 `
  1845. # \5 t4 k8 C! p! l
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理9 D; b# J+ m6 a% k5 S6 E3 j3 m/ o/ o
  1847. " X2 D) Y) z4 z( U! I# k
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断) a: q. X- ?$ `7 ^& M# M
  1849. LDA #$00: ?; x$ u7 i9 d: f7 g
  1850. STA PPU_CTRL
    8 T# G2 |) W7 ]* j- R# i5 C

  1851. 0 u, V$ o6 l) e% t
  1852. JSR Sound_Data_Clear
    - }2 X) O. j/ |* O2 o3 `$ e- }

  1853. * N5 Z$ O% `8 M0 Y  y( a6 {; T
  1854. Sound_Reset_Proc_Default_Wait9 f6 `3 g4 l- c- |/ w6 [8 h
  1855. LDA PPU_STATUS! x5 q; P! R+ ?) _2 P
  1856. BPL Sound_Reset_Proc_Default_Wait
    7 p! a* ]0 @9 S4 w6 Y3 D
  1857. 4 T1 Q8 ]8 [8 c% f9 R
  1858. LDA #$00
    ; C2 i# D- x4 Z5 H& y5 ~0 j0 i
  1859. STA PPU_ADDRESS1 b2 C4 M, n9 V0 j
  1860. STA PPU_ADDRESS& Q3 S% Z+ y/ ^& M& o
  1861. STA PPU_SCROLL' `4 K+ c7 f9 m, y6 r
  1862. STA PPU_SCROLL; ^# Z. I5 x, b- K5 _' `
  1863. ! Z  u4 U3 K# d- }! y" G+ Q6 c1 x, N" J
  1864. ;恢复PPU控制/ L& u. T; e  m! f: j2 h4 ?& O
  1865. LDA Screen_Ctrl# U5 O( X9 I0 z) S; G0 F
  1866. STA PPU_CTRL
    - |' n1 q+ m; m/ |4 }8 s

  1867. # C$ H/ u/ ~& `" o- R1 b) C
  1868. Sound_Reset_Proc_Init_Sound
    9 M9 A* _  C: a8 ?
  1869. LDA <Music_Stop_State4 D( ^! B, p* c! Q# |
  1870. BNE Sound_Reset_Proc_End4 j/ [7 E3 d( ^/ T0 x
  1871. LDX <Music_Item_Cur
    # M% Z3 S8 }/ q* l* h
  1872. LDA <Music_Cur,X* j* L- {' p' V5 B& p2 }
  1873. JSR Sound_Init_Proc
    ) {6 }: K# m! j& h% q8 J7 Q
  1874. Sound_Reset_Proc_End; x* g; n* c/ W8 K& \' d
  1875. RTS
    6 A# T3 r- P7 {4 W" Z9 S

  1876. 0 B5 t5 ~' K: q; |; m8 {
  1877. ;==================================================
    3 |7 L6 o# U$ M4 B, x. D5 G8 A9 j
  1878. Clear_Item_Text;清除页项目
    7 w  Z: C1 x# S% M: e/ U* z
  1879. LDX PPU_Cur
    8 p- H# C$ K7 D% k# y
  1880. LDA #PPU_MODE_CNT_CLEAR
    ' `) x# P. r' q- p3 O8 w
  1881. STA PPU_Addr,X* _4 {2 U& ?! V4 c9 n8 I* h) P
  1882. INX: q) q, T7 T& T5 n+ p

  1883. # F- k: g3 p* a9 A
  1884. LDA <Page_Last
    $ s7 i; o2 I5 |2 I4 g
  1885. SEC6 r6 w& e0 d# n- S
  1886. SBC <Page_Last_Index" b5 E! b( R" N, h# p5 g; o
  1887. ASL A  g" t8 i% `6 L* @5 L

  1888. ! m7 B4 D& f# W" {) R, _$ j
  1889. TAY
    ( O  P5 T: _* G% Y9 Y  J0 {
  1890. LDA Item_Pos_Data,Y
    8 l! D7 P- k9 ~
  1891. PHA4 D5 U+ x9 f2 W+ s% X
  1892. INY$ S5 V& P6 v1 M1 l+ Y! D) l4 T
  1893. LDA Item_Pos_Data,Y0 B' B* P% x6 f7 G) }: }/ K
  1894. STA PPU_Addr,X
    / W( ^6 m& [2 f8 V- ~
  1895. INX
    ; S4 L) X1 {7 u5 q- t" G
  1896. PLA4 V. ?4 M: e& H
  1897. STA PPU_Addr,X  ]$ j( y% A8 W2 n; x, |6 |
  1898. INX- b" f; n) h8 I. [- ]3 s- ~
  1899. - i- V( t0 i0 b0 ~
  1900. LDA <Page_Last
    ( ?( l/ L- W8 T  n6 i% u
  1901. ASL A
    8 I1 ]; @" g5 Q9 j3 K- H; A  |
  1902. TAY- N* i/ M% h+ {; L: V( E
  1903. LDA Music_Collection_Name,Y
    ) |  ~2 y0 I0 k
  1904. STA <Data_L* ^# ]+ A  {% b) @& O% _5 Q1 t
  1905. INY
    , z7 D- h8 `: O( ^/ e
  1906. LDA Music_Collection_Name,Y
    8 n3 t1 z8 F' t% F+ \1 O# {
  1907. STA <Data_H
      }% C. h' z+ I

  1908. 7 O: M; L, P0 V3 h3 x3 f1 t
  1909. LDY #$00& U. ~& N. l2 G, n( h3 r. [1 e
  1910. LDA [Data_L],Y; F! w+ D1 h& |+ J
  1911. STA PPU_Addr,X* f6 o! O; @7 R* d7 w+ Y' }; ]" r0 n
  1912. INX
    ' o4 x# P1 |* i$ F: j
  1913. Clear_Item_Text_End
    2 t2 Q; r5 o: @* A
  1914. STX PPU_Cur
    / k) U' c* a0 T
  1915. RTS8 Z$ `" R. O' H$ {2 b

  1916. ; m$ u, x3 B" D" h' v6 d! {
  1917. ;==================================================2 B) N4 s$ s" M2 b; `% N3 z6 [) N4 Z' m7 u
  1918. Show_Item_Text;显示页项目
    & h$ X3 I+ }1 P$ \! x% T
  1919. LDX PPU_Cur5 k8 o, u, n1 o8 s' K
  1920. LDA #PPU_MODE_CNT_LINE
    & Z- L7 m4 P. q
  1921. STA PPU_Addr,X
    ' C- z' g8 F& V9 @( ]* h
  1922. INX
      M8 s2 j1 p, P
  1923. LDA Page_Cur" Q1 o- {; E1 a& r
  1924. SEC6 M0 O- ]: W. j/ x
  1925. SBC <Page_Cur_Index, }6 [' U' K* S: h
  1926. ASL A
    $ u* c( d7 ~& O- o* Z
  1927. TAY
    * A; N4 p) D. O, J5 U1 o
  1928. LDA Item_Pos_Data,Y" u1 y4 d9 c3 h, |0 S8 l) C$ h+ y
  1929. PHA
    ( W0 r6 k- l' X8 ~1 s. T+ y
  1930. INY
    4 A9 T) I9 k! x; K- S+ S( R! i0 s: H
  1931. LDA Item_Pos_Data,Y
    ; t$ H. q& e( p" J+ m
  1932. STA PPU_Addr,X
    2 H& N) @# s/ r6 y" q) ~
  1933. INX
    ! l: \' y% g- {- \
  1934. PLA
    ( R$ t+ ~$ v9 D
  1935. STA PPU_Addr,X& O- @+ c  C' E; \# C1 z" {) x
  1936. INX; E9 h0 s! K& G- w: v( j

  1937. ' ~9 {2 H; V1 Z1 t
  1938. LDA Page_Cur
    % {/ K4 g" P3 t+ a7 B! e7 o. t
  1939. ASL A
    - C' @- k6 _& s& B/ I
  1940. TAY
    " N9 U3 @+ w- u  G) E) }
  1941. LDA Music_Collection_Name,Y
    ) n2 ~& b2 C* U
  1942. STA <Data_L
    " V( k! ]/ [* Q. ]. P
  1943. INY
    & @" c4 \: ?, I! p- a5 O
  1944. LDA Music_Collection_Name,Y  }/ ~$ L; e0 e: y
  1945. STA <Data_H
      w9 f; ~$ Z' v, J, X% Q+ U2 |

  1946. ; A3 C3 n1 F! D- l7 f
  1947. LDY #$000 H  ]# o8 f; n" `4 P4 [! J
  1948. LDA [Data_L],Y
    - q2 X% D% f" r
  1949. STA PPU_Addr,X  q6 z* y# G- ]; T& k+ G
  1950. STA Data_Cnt
    ! G0 m6 [) k- d) s  H$ Y
  1951. INX
    # i6 ?# K! k5 q+ T) j% `

  1952. ) K! V0 D& P2 }8 u5 c! k
  1953. INY
    . [0 O/ v9 y! m9 R9 M) P
  1954. Show_Item_Text_Write. `2 s; v3 c# d; H+ i& y! ^
  1955. LDA [Data_L],Y/ j+ g6 Y( G) {5 A7 Q
  1956. STA PPU_Addr,X
    / A  A2 H8 ?" Z7 B' @2 o  M
  1957. INY& w" D/ m" \* k5 |
  1958. INX# S& j3 r0 B) Q+ d  d" `
  1959. DEC Data_Cnt
    ; `7 o4 a: [  {& t6 _9 ^) [6 r
  1960. BNE Show_Item_Text_Write
    ; @1 V3 z* V! q3 U: h4 e& F! z

  1961. " _8 ~' U/ f3 u5 M- \5 Z( q
  1962. Show_Item_Text_End
    2 R" r3 B+ {4 G2 \, K5 T
  1963. STX PPU_Cur
    * I6 N. ], O9 l5 j8 I7 o
  1964. RTS7 D+ h5 W- B' Z

  1965. ! @2 @8 \1 Y; Y
  1966. ;==================================================
    & O% i% K& P  y3 {: `
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量# ^& o* q2 f6 V4 {) P2 F
  1968. STA <Data_Buf( v3 ^( K2 O: w/ H
  1969. LDA #$00! c6 T. n1 G: e
  1970. Get_Page_Index_Calc: i# d; k" B* s
  1971. CLC
    6 _) Z0 R+ v& g9 b1 ^; F2 C8 Q
  1972. ADC #PAGE_SIZE4 q2 p* z, w# G& |& D9 c
  1973. CMP <Data_Buf
    2 B9 M' [6 V5 R- R: T3 C& G
  1974. BCC Get_Page_Index_Calc
    # {0 W: @1 L, z- Y  k- E; X
  1975. BEQ Get_Page_Index_Calc_End
    2 S# @" G. D- S3 Y
  1976. SEC
    : y! I4 `! C# O) L( o" W# D
  1977. SBC #PAGE_SIZE
    5 @" D8 t' w5 J: y7 c+ ]
  1978. Get_Page_Index_Calc_End
    6 a1 l: Z1 t7 E1 Q8 \
  1979. STA <Data_Buf) g/ x2 z& x: p3 R
  1980. Get_Page_Index_Cnt
    ( m" |' I) ]& X6 F0 z
  1981. LDA #PAGE_SIZE
    8 M$ u/ h+ m# b3 E# [
  1982. STA Data_Cnt
    7 z. }, S/ E8 i4 X% H; a. t& C" H, l
  1983.   w" C5 r' s2 r$ x4 q
  1984. LDA <Data_Buf5 E! u' i9 S: Y6 t
  1985. CLC9 r/ J. b1 Y+ v- g! \
  1986. ADC #PAGE_SIZE1 z. d5 j6 l/ H3 ]: K- @
  1987. CMP #ITEM_MAX_SIZE
    " ]7 K6 P6 w! h$ e1 L7 P# M
  1988. BCC Get_Page_Index_Cnt_End2 I9 h0 ?( Y6 {' g" C, Z6 R
  1989. 0 h3 w9 ?4 I& p$ t' V! b7 ^$ e5 C+ z
  1990. LDA #ITEM_MAX_SIZE% a  ]8 A1 e! H1 A
  1991. SEC
    4 ^$ v& @6 Y, D$ {& Z3 u
  1992. SBC <Data_Buf3 Z9 `0 D( U8 k5 s. s. c
  1993. STA <Data_Cnt
    " ]5 \9 w. H1 e% a% ?- V
  1994. / K* p- G2 U! l' Y) G" Q- y" `
  1995. Get_Page_Index_Cnt_End
    4 F6 R' ]* @& B4 L
  1996. RTS
    $ ~+ j6 L, \5 R/ {( i

  1997. & T- K+ V2 c- @0 C8 r# h
  1998. ;==================================================
    2 ~, r% ?8 M" o, f
  1999. Get_Last_Page_Start_Index
    0 ~0 R8 y% c; k% r! o
  2000. LDA <Music_Item_Last
    ' a; E+ G* F) \. D4 L  S
  2001. JSR Get_Page_Start_Index. P* v" P/ S. P# S& e/ P7 l) M3 A
  2002. LDA Data_Buf
    $ u5 U- Y, s9 i, X- B; Q$ K
  2003. STA Page_Last
    1 J/ E& @6 M/ R0 V) l* Y
  2004. STA Page_Last_Index
    : `- F0 H5 N2 w% `) y
  2005. LDA Data_Cnt0 `0 m6 s# ?" f! Y2 {
  2006. STA Page_Last_Cnt3 J! Z5 \$ f+ _5 `) G4 e
  2007. RTS
    : D4 \. P6 B. o/ a! z2 g

  2008. 1 A3 d2 `% i8 z: t' a
  2009. ;==================================================! t  Z# z" z0 f, O' N! ?
  2010. Get_Cur_Page_Start_Index
    4 _1 a( b3 Q1 N3 [, y* }
  2011. LDA <Music_Item_Cur
    9 Z$ o+ i8 b2 Y* q1 J
  2012. JSR Get_Page_Start_Index
    . Y- b; `/ A/ i: o) b
  2013. LDA Data_Buf
    ) z2 @3 x2 q' n3 f7 S
  2014. STA Page_Cur* L3 B; e7 R1 Y7 D& O$ }
  2015. STA Page_Cur_Index
    : j4 |) t& k( {+ P% `
  2016. LDA Data_Cnt
    7 L# K, w7 n8 l0 _; G
  2017. STA Page_Cur_Cnt
    : z! j+ B, B" I4 c2 X$ w" _/ T
  2018. RTS# j% j% Z. m; K" E# w

  2019. 8 y4 T4 I$ C& B% {7 k7 z
  2020. ;==================================================
    2 V9 F  E  E6 N: H* Z/ D# Y* |' s
  2021. Show_Page_Text;显示页文本% A& _, C2 u9 ~. C+ E3 ^% ]
  2022. LDA <Text_Disable_Flag
    ; w- r4 z/ W6 s, s2 f0 U8 H2 D$ r
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    ! `1 ~3 U6 U4 |8 a7 S0 E, P
  2024. STA <Text_Disable_Flag9 V" L" m+ x/ u2 J

  2025. 0 }% Z7 C' [3 m5 H: m/ F& w: z
  2026. JSR Get_Last_Page_Start_Index) _2 H3 A" y" A/ b  |
  2027. JSR Get_Cur_Page_Start_Index
    ( R2 `% q: d' j2 w3 o
  2028. # g, O! g3 S, e9 n3 Y. t
  2029. Show_Page_Text_Set
    3 I) i+ m6 M3 Q( O
  2030. ( X. h0 k4 S- Q: \5 i
  2031. Clear_Page_Last_Item;清理上一页
      i  S+ _& R, ^- y4 a
  2032. LDA Page_Last_Cnt
    " u/ C4 X1 u: u9 L; n; E! }% Y
  2033. BEQ Clear_Page_Last_Item_End3 b5 A  P$ ~* E+ z1 H: U& t
  2034. JSR Clear_Item_Text# i& R4 i6 t' e; c+ f! R$ ~! o
  2035. INC Page_Last- C: ?7 a: @: k7 m0 Y/ J
  2036. DEC Page_Last_Cnt
    4 W3 |% g% y, s9 s1 r& l
  2037. Clear_Page_Last_Item_End
    & ?' m" |9 {, `
  2038. % i) ]: l5 n2 M" F7 Z) l5 y
  2039. Show_Page_Cur_Item;显示当前页5 U  E# W+ k9 W
  2040. LDA Page_Cur_Cnt5 X% F; B8 {) U  G) Q. D$ l
  2041. BEQ Show_Page_Cur_Item_End& Q' t3 n  j& j, ?& b8 i
  2042. JSR Show_Item_Text
    + Q4 q! c4 b3 J
  2043. INC Page_Cur
    ) X9 g/ T  Y9 D4 H$ v$ V& c
  2044. DEC Page_Cur_Cnt
    % U+ j0 n! x+ c& q% }
  2045. Show_Page_Cur_Item_End* S) z, e3 W9 W
  2046. / k. \. n3 y, _1 m6 y2 j
  2047. INC <Time_Wait_Cnt  ~$ e% `6 F9 a9 L& f
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作6 S) a6 W7 ?8 a! u6 z0 g
  2049. LDA <Time_Wait_Cnt
    0 P0 r- g* o4 Z+ [* h
  2050. BNE Show_Page_Text_Set_Wait
    " u  F0 |! ]5 C& ]+ J+ B$ Z

  2051. ) B1 _9 F$ y& Z! S" b
  2052. LDA Page_Last_Cnt% ]- o8 k  B' x- |3 ?  X
  2053. ORA Page_Cur_Cnt/ h  i5 Y, `1 o. A9 ]
  2054. BNE Show_Page_Text_Set
    ) q6 W7 R$ f& S3 V
  2055. LDA <Text_Disable_Flag
    3 M* y( y8 b3 K2 A
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    % c! B. E( [& ~& S* g+ }7 ]
  2057. STA <Text_Disable_Flag
    , ^+ L, p& _1 p' C. K. P  q
  2058. RTS% i: ^0 B# V7 o; i8 J; a! I

  2059. ) f8 X7 k: K5 j0 F0 N( {: I' W. k' Z
  2060. ;==================================================8 l$ {4 k- w, Y; S2 Y3 p
  2061. Last_Item;上一项
    2 ?0 m& A' e+ I: p
  2062. JSR Clear_Last_Track_Name; w8 R5 {0 |- k, X3 s3 l1 e
  2063. JSR Disable_Text_Draw- I  ^5 j, a# S4 Q: c

  2064. ' j! \0 o2 Q- t9 u' J5 J$ k
  2065. LDA <Music_Item_Cur& `2 K; ?* Z* Y  n
  2066. STA <Music_Item_Last: ?# e' O5 f$ c! A! {  H# h' h5 `

  2067. ( v- F3 A# ?& L$ b1 R4 H7 u+ u3 y
  2068. JSR Get_Last_Page_Start_Index
    ) S% z2 e6 \1 P7 U% J, {; L. Y

  2069. 4 b0 ]# E& I7 S$ A
  2070. LDA #$005 b# l# o9 i1 g% R. Z9 t" B  T
  2071. STA Data_Buf
    ! Q/ K! J% c7 ^% h& ]

  2072. 2 e% O3 B$ w7 C
  2073. LDA <Page_Last( K: o) F: x5 @3 t9 d: b3 m0 l
  2074. CMP <Music_Item_Cur' J# @6 j1 ~, _
  2075. BNE Last_Item_Begin& R1 d! `7 J! P' w* _: Q

  2076. 5 H& @7 }- f* B9 D4 o1 m
  2077. LDA #$010 c! I1 d# h; y2 o
  2078. STA Data_Buf
    ; }. \, U9 i+ h9 t5 R7 z+ u
  2079. Last_Item_Begin
    3 k3 J% m* f" a/ Z( Q, j
  2080. LDA <Music_Item_Cur. c- E# q2 x' O6 x
  2081. BNE Last_Item_Set
    3 }8 @9 d8 t' q- ^7 V6 G1 ]1 Z: }
  2082. LDA #ITEM_MAX_INDEX + 1
    & K( C2 f1 W8 q
  2083. STA <Music_Item_Cur
    ; w  F8 V6 M  K/ ]

  2084. % |, d! w! R! w' U
  2085. Last_Item_Set0 C& @  l& C& Y/ _! A# K
  2086. DEC <Music_Item_Cur+ |) }7 O4 Q' O4 L( R) C5 \+ D
  2087. LDA <Music_Item_Cur
    8 x7 F* W0 O% L8 S
  2088. JSR Reset_Current_Music; H4 C$ ^; n" n- r0 s* \$ v

  2089. , p9 G8 a2 `# l8 s$ l  w
  2090. Last_Item_Play
    ) A/ f7 c0 [( C% g
  2091. LDA Data_Buf2 S' T( N5 s- h& u% P% g$ s7 ]2 Q# `
  2092. BEQ Last_Item_End3 H! Q% D: y) a* P
  2093. JSR Show_Page_Text
    / U  ~" J  U# v
  2094. Last_Item_End( S% Y- l+ N% d- U
  2095. RTS8 x: y" m7 c5 Y* k0 Q& o
  2096. ; n6 U! V7 |7 W  Y4 w2 }
  2097. ;==================================================( F8 a0 t0 f8 s9 I: k5 T' @
  2098. Next_Item;下一项
    - q/ `3 ^4 c" ~4 h
  2099. JSR Clear_Last_Track_Name
    ; ]1 l% U% O6 Y- X, S
  2100. JSR Disable_Text_Draw$ ]9 v& h  a* ], L
  2101. 4 F+ f$ B6 _2 D+ }7 V* W. U
  2102. LDA <Music_Item_Cur
    / q( N8 a( E- i! q. x
  2103. STA <Music_Item_Last
    % A2 o8 j. A- c" Q% a9 G

  2104. 6 s4 ^9 K4 B' A' O# n7 G1 q
  2105. JSR Get_Last_Page_Start_Index
    - h4 c& D% _+ R& w0 o
  2106. $ ], D% }7 A, j# C
  2107. LDA #$007 f6 ^$ p6 o' ^1 H, A) \/ {
  2108. STA Data_Buf  R! a$ w' F4 `; G9 ~

  2109. # z, @5 ]7 a3 G# I. f( l
  2110. LDA <Page_Last( X2 f% I2 i$ ]5 p
  2111. CLC& P9 c$ c& }  K) ]8 D+ T; ^: O
  2112. ADC <Page_Last_Cnt$ w3 f. v  h- }: U3 v. Z
  2113. SEC
    ; X: ~- z3 L( F  S- q: V7 w0 G$ N6 W) ]
  2114. SBC #$01
    + W6 l9 A) p% P8 D# t% `
  2115. CMP <Music_Item_Cur
    6 D: S& R/ `1 ~# E2 q
  2116. BNE Next_Item_Begin( J6 \, V5 |/ x; i) V8 c, B
  2117. 5 ?7 e% o# O3 t9 w! J( Y
  2118. LDA #$017 ^! V- H% R! O% [: j1 Q8 C
  2119. STA Data_Buf
    , {! O2 y: e$ e; w' n" F" {8 ~2 G
  2120. Next_Item_Begin
    9 c' G9 L6 A( ]
  2121. LDA <Music_Item_Cur
    ) F4 L8 o( K$ l# O9 ]
  2122. CMP #ITEM_MAX_INDEX
    : j" s& e* ], D% l& B
  2123. BCC Next_Item_Set
    ; o! ~! x0 n0 o" K( r! [+ ^
  2124. LDA #$FF7 w5 F2 C9 I5 t- n
  2125. STA <Music_Item_Cur+ A% Y1 A# J$ {$ h
  2126. Next_Item_Set5 b$ o; H6 w  I5 l7 u  G/ K
  2127. INC <Music_Item_Cur
    4 Y5 \7 l% B& e# m
  2128. LDA <Music_Item_Cur
    ' D+ }5 _' ^5 w( O2 l; _1 A5 P
  2129. LDA <Music_Item_Cur1 U' i5 S! r! o% K
  2130. JSR Reset_Current_Music
    + s/ s# m6 }+ V5 C! E: h' D
  2131. Next_Item_Play
    0 P$ T" p# |: z& a
  2132. LDA Data_Buf" Z* V% }5 v5 c* V2 {* V: O2 m
  2133. BEQ Next_Item_End
    ! r* N( v* [$ p8 g
  2134. JSR Show_Page_Text7 H( {; R* z" d
  2135. Next_Item_End+ y0 k  n) q( E& G; Z8 m1 R
  2136. RTS9 d/ {, ?% }" I" d( I' I" ]" X

  2137. 8 C, A" D& p" Y" \4 t+ F
  2138. ;==================================================+ \. V; R* G; x% @, H( Q" p/ S% v
  2139. Last_Page;上一页8 z' e% @) w* H  P0 |( Y4 w
  2140. RTS
    . ^# G1 U* K3 z

  2141. " Y4 G# ?* B4 R3 ]3 P
  2142. ;==================================================
    / G; z5 B; d2 T7 B
  2143. Next_Page;下一页( u! v5 q2 W: f
  2144. LDA #PAGE_MAX_INDEX
    % m* f$ d% d# b' Q" d
  2145. CMP #$01( E8 `; p) G; I( E7 D# R+ v
  2146. BEQ Next_Page_End, B, S! O) c' f! _
  2147. / k- ^* B# I2 y) k' ?0 y
  2148. LDA <Music_Item_Cur
    ' {% R& V$ R. c) V2 _* i
  2149. STA <Music_Item_Last
    , z' F  M, u. {1 w. ]3 s2 K2 k

  2150. ' G3 Z- `! S; B9 `- u* d
  2151. JSR Get_Last_Page_Start_Index
    * T0 }$ r, o7 v" T+ v& [

  2152. $ G( V+ b- k8 P* t: Z! D
  2153. LDA <Page_Last_Index
    0 [* J" f$ J4 I% {  s  @& y) Q
  2154. CMP #PAGE_MAX_INDEX/ `3 ?  {4 y! a4 }1 o. Q* K! g- X
  2155. BCS Next_Page_In_End_Page: E3 q- x* c: H; [

  2156. 0 u$ h- @3 {& S
  2157. Next_Page_Not_End_Page;不是在最后一页; R. V/ v) v0 M. \3 \) M2 g7 z: B
  2158. LDA <Music_Item_Cur
    $ j5 z. n+ L' @/ i8 s2 q% e7 ?+ c
  2159. CLC: p2 D+ I, L0 X" W" W0 k
  2160. ADC #PAGE_SIZE
    : U- _  s/ a, u3 Q
  2161. CMP #ITEM_MAX_SIZE
    / A! m7 L! Z4 C$ a  M: E: P
  2162. BCC Next_Page_Not_End_Page_Less
    , B0 E  z1 ]; e0 z2 r2 p1 b8 D
  2163. LDA <Music_Item_Cur2 f- r  v& I, r4 e  n& s8 ~# M
  2164. SEC
    8 R3 @0 N) E5 P1 E9 g: y
  2165. SBC <Page_Last_Index9 U5 B* w9 M$ A8 d% q; s
  2166. CLC& C. I) R  R) x5 `5 U- O* Q
  2167. ADC #PAGE_MAX_INDEX+ K* D5 Y" r3 I
  2168. CMP #ITEM_MAX_SIZE
    % e3 m  V  U% ~3 c
  2169. BCC Next_Page_Not_End_Page_Less- t0 @: e* I6 n' w) |8 R5 t3 B1 q
  2170. LDA #ITEM_MAX_INDEX
    5 O7 C( \5 f* J4 _$ @" f1 Y3 k
  2171. Next_Page_Not_End_Page_Less; b- [; B- |* M! X! e6 s$ x
  2172. STA <Music_Item_Cur
    ' |  g4 x1 b: w7 r/ P6 C3 {3 w# Z
  2173. JMP Next_Page_Reset  d  g, Z/ b* ]- D4 T! p" n" E
  2174. / ^$ }- G( d/ h
  2175. Next_Page_In_End_Page;在最后一页
    5 u6 B( u6 `' \' Y4 |
  2176. LDA <Music_Item_Cur  M. K1 B/ j, i7 U
  2177. SEC
    - y/ u2 T# M/ Q/ z. D8 M* n
  2178. SBC <Page_Last_Index& T7 h$ c5 o8 r8 T+ {! Y- w
  2179. STA <Music_Item_Cur
    / n( L3 s( \+ k  a+ [" ]  X
  2180. 5 |. m2 x  o7 K6 o
  2181. Next_Page_Reset" O) x- z# s0 O2 R3 a& V( _# X
  2182. LDA <Music_Item_Cur
    4 ~, y: i& Q9 {3 S- g6 r$ x
  2183. JSR Reset_Current_Music& W, A( U9 O9 A  z8 W5 l- q
  2184. JSR Show_Page_Text
    $ S" p! Y' a! _' U8 V" ~; X
  2185. Next_Page_End7 d- s: D9 r; ?. v
  2186. RTS0 c; W* s- q8 q* D- e' ?

  2187. 2 }/ d' l" ^; S5 ~/ i2 f
  2188. ;==================================================; ^6 E# |3 \" l1 J3 e$ l, |" q: R
  2189. Disable_Text_Draw;禁用音乐条刷新
    " ]3 g8 \0 H8 H$ q: a* y* L3 [5 R
  2190. LDA <Text_Disable_Flag
    - c1 ~$ I% U: q# A% P& c
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME+ v7 v6 Y& N8 I6 m, f% ^
  2192. STA <Text_Disable_Flag
    ' I0 f- o) I/ X, _
  2193. RTS" M& q7 Y- i( }- K) c( M
  2194. $ j. [9 \# y! }2 m" c6 j  n4 w, t/ d
  2195. ;==================================================
    + b0 U# `9 `/ p  P* p
  2196. Clear_Last_Track_Name;清除上次曲目名; x: \! S) L' v' L" x0 C! z
  2197. LDX <Music_Item_Cur
    ( b$ Y' Q$ K! @
  2198. LDA <Music_Cur,X4 r4 m  I. `3 c' b4 v
  2199. .IF Track_Name_Pos/ W1 j/ I( ?/ J% g5 t
  2200. JSR Clear_Track_Info
    ; Q6 h+ a4 C. L; m& Z) s8 \% U0 n
  2201. .ENDIF9 }6 U& N; v' G4 y' O1 D0 h
  2202. RTS
    ) ~7 J0 W7 a* p  C4 \7 a
  2203. 2 s% V* J; L, p  `( Z
  2204. ;==================================================
    0 K) r# @# n, q( D8 o
  2205. Reset_Current_Music;重设当前曲目
    # m/ G2 q2 {6 k/ \1 B* f7 f. j

  2206. / L% e  y( s* U( A* i+ v, O6 \- t* E
  2207. ;写入当前总曲目
    1 [& K3 S2 e, _! O% @: w; r( v
  2208. JSR Set_Sound_Total! k- \  B$ A6 v
  2209. LDX <Music_Item_Cur
    5 `# B2 R; Y* F6 H4 |- {4 I' ~
  2210. ( i8 u3 G/ V. ]6 p! ?4 v) Z
  2211. LDA #$00
    5 d- b2 }2 h9 t3 c
  2212. STA <Music_Last
    ; p/ j3 ^, S, `4 c) P

  2213. 1 S/ n) J- e, T1 v
  2214. JSR Sound_Reset_Proc9 f6 M" b% g9 F# g
  2215. JSR Music_Show
    . A% e0 ]8 ]  ], {( M2 l0 F+ I
  2216. RTS
    0 X  K! }2 X# }3 Z. C
  2217. 3 E% _. X) b% I0 W8 V/ [. [- U/ \
  2218. ;==================================================8 x1 u1 d6 ]( e2 r6 I5 m
  2219. Music_Song_Stop;音乐停止
    2 V; y  Z# r' Y7 |0 r+ o1 Y" ]! ?
  2220. LDA #$01. e" g: G8 z- F
  2221. STA <Music_Stop_State: c4 N/ ]9 ]9 R# t5 T
  2222. JSR Music_Bar_ReSet
    4 M5 J# w6 b3 H
  2223. JSR Time_ReSet. C& N6 f# L9 Y, O) H$ a
  2224. JSR Sound_Data_Clear
    " I; k& |6 z/ \7 O1 P2 L4 e, V5 ~# G: a
  2225. JSR Music_State_Show' o8 I/ m9 J2 V& F* E8 {6 e
  2226. RTS
    - W2 R2 g1 }, }, W
  2227. 2 N" |( t, e# J$ D
  2228. ;==================================================, U% T) q# w/ P+ H
  2229. Music_Song_Play;音乐播放
    7 ~$ \0 O4 v9 K) P& q
  2230. LDA #$00
    ( Z+ c  s- M1 h- L
  2231. STA <Music_Stop_State
      \+ u. v# M" G4 |) s" w* `+ n, j
  2232. LDX <Music_Item_Cur; d3 ]8 u* }4 h, I
  2233. LDA <Music_Cur,X: @3 l8 V: Y# q
  2234. JSR Sound_Init_Proc
    2 ^: m: }4 A  F
  2235. RTS
    - U% T* {1 X% g3 J# I
  2236. ! T5 ~) F7 M# ?! f
  2237. ;==================================================( n7 ~1 i. c6 c( d# f: R
  2238. Music_Song_Last_10;上10曲- p) {5 S# y2 N/ `8 _( q
  2239. JSR Clear_Last_Track_Name! I  ~$ h0 o& ?8 F
  2240. JSR Disable_Text_Draw4 g9 h% J, _& [. I
  2241. LDX <Music_Item_Cur6 c9 L" V% i, d6 t( g
  2242. JSR Set_Sound_Total
    8 Q% z& j6 x, ~. P! z
  2243. LDA <Music_Cur,X
    9 y- ]4 p# E  C5 o5 O: E" T; U
  2244. SEC
    ( O: A: A; e: L  _
  2245. SBC #10
    8 j' @2 G# X5 ^2 _- p2 X& `/ ?
  2246. BCS Music_Song_Last_10_Set
    3 `8 H5 l& `8 v% _6 t
  2247. LDA #$00: t' c- T- L6 ^5 t, ]/ F
  2248. Music_Song_Last_10_Set0 [7 [, Z8 {* j5 ~, s  ^
  2249. STA <Music_Cur,X) e5 \. j# l, E# u$ e
  2250. JSR Sound_Reset_Proc
    8 m$ ~1 u: S  [7 _+ H5 Q
  2251. JSR Music_Show+ f0 l6 ]8 g( s4 c$ N1 Q  X
  2252. Music_Song_Last_10_End+ o% |/ K6 |6 c$ O+ [& |
  2253. RTS0 a4 t% l) Y& u/ ]6 }9 ?
  2254. ; E2 P6 U4 o% }6 J
  2255. ;==================================================
    0 `+ i" Z4 L9 K) t
  2256. Music_Song_Next_10;下10曲5 N3 D6 k- l0 \9 l1 `$ L
  2257. JSR Clear_Last_Track_Name. o1 H: y7 R9 r" h+ X  w. H' v+ n
  2258. JSR Disable_Text_Draw! }: Y8 F* |" W
  2259. LDX <Music_Item_Cur
    " U& K% S' \/ v/ T3 P" E
  2260. JSR Set_Sound_Total/ J1 F) m& p, t4 \. p8 C  ~
  2261. LDA <Music_Cur,X
    3 ~2 a+ Z' \' J) `4 q' o
  2262. CLC
    9 b: A2 u5 k0 ~
  2263. ADC #10
    6 A5 V, _6 ~- C* \' o- j2 F/ m$ n
  2264. CMP Music_Total* v3 \' D- B4 X" g: u
  2265. BCC Music_Song_Next_10_Set- z- z2 \6 H& \6 t
  2266. LDA Music_Total
    : J* j( I* [, e
  2267. Music_Song_Next_10_Set
    ! ]7 H3 u$ S. q/ E
  2268. STA <Music_Cur,X
    ) ~" q- e# t5 M/ S' j: b
  2269. JSR Sound_Reset_Proc
    & i- x0 L* _& ~# Y
  2270. JSR Music_Show$ n! k; g! `; i7 ^
  2271. Music_Song_Next_10_End
    ) e2 a) g+ D! f& W+ K- Q. s0 T
  2272. RTS
    % {3 [% B/ \- w& T

  2273. 0 }5 ~/ ?9 x, g  H
  2274. ;==================================================& Z3 M0 F1 _: u' i2 h6 ]
  2275. Music_Song_Last;上一曲
    $ L9 h( C( C/ l
  2276. JSR Clear_Last_Track_Name4 h0 ?- |$ y" h
  2277. JSR Disable_Text_Draw5 e* |, M) z/ T1 ?
  2278. LDX <Music_Item_Cur0 S* h, |' M. ~' p* {7 u% B) D
  2279. JSR Set_Sound_Total0 P7 x0 F# L4 m9 N
  2280. LDA <Music_Cur,X+ ]" |( m5 ^; C/ m" W
  2281. BEQ Music_Song_Last_Set
    ; `& s9 I8 b1 w/ P8 N' w
  2282. DEC <Music_Cur,X7 K1 t  G% \1 S! U  n2 M
  2283. Music_Song_Last_Set
    6 t, O, a. W7 ]# r% A
  2284. JSR Sound_Reset_Proc$ o' g% S$ I/ W4 y) H9 Y9 `" x1 X
  2285. JSR Music_Show
      z7 N7 A7 ~/ @3 D) n
  2286. Music_Song_Last_End- U! N- J4 A$ ^# l4 D" D! @
  2287. RTS2 b6 W. J; C, L, c1 ]- Y3 |
  2288. ! `' J5 {* N5 Z9 y0 y7 c
  2289. ;==================================================; m3 |% z2 F4 g1 Z; ]( k" |
  2290. Music_Song_Next;下一曲
    , |  x1 r2 i1 `5 L+ D6 K- b( I! [% V
  2291. JSR Clear_Last_Track_Name
    7 p* O2 M8 C6 ?
  2292. JSR Disable_Text_Draw
    0 ?6 A6 c* _, C( J$ j
  2293. LDX <Music_Item_Cur
    / L& X0 R9 Z$ m" Y0 p
  2294. JSR Set_Sound_Total8 _% I# |6 ]9 z( O) a8 y4 U
  2295. LDA <Music_Cur,X( E& I* y3 f( h0 l, p' r
  2296. CMP Music_Total
    ( [$ {) \+ T$ c3 `0 b( Y9 x* u! }
  2297. BCS Music_Song_Next_Set
    9 F" J! A4 s7 G3 |% ^1 k
  2298. INC <Music_Cur,X
    ( E/ T& x% X3 p
  2299. Music_Song_Next_Set8 `1 l$ k3 H* n3 d4 T) J/ H
  2300. JSR Sound_Reset_Proc# J" a1 d, ^+ B# p  j( M. p8 O
  2301. JSR Music_Show' i2 T- R' Z% z# o3 t
  2302. Music_Song_Next_End! j$ f  G! v2 p$ S8 y
  2303. RTS
    7 b2 j0 b' m$ p
  2304. 8 _, M8 T" E! b" k
  2305. ;==================================================
    1 a5 u3 }' ~; N/ m3 s& Y; B
  2306. Change_Select_Item;改变当前选择项
    " {2 f7 F1 b+ I2 B3 i; s/ P
  2307. ;--------------------------------------------------
      i4 L7 I8 z$ Z+ E$ r9 @* ^
  2308. Change_Select_Stop_Play_Item;停止/播放1 @# J: F  h* R: X* C$ s  v
  2309. LDA <Key_Once# N/ E' T+ s4 i, {+ i1 W
  2310. CMP #$10
      c2 s1 J5 L! J/ r
  2311. BNE Change_Select_Last_Item; w7 J* E9 Y3 K9 R, Z; W# l
  2312. LDA <Music_Stop_State
    9 `+ K( ?8 E4 J& g$ ?+ Z
  2313. BNE Change_Select_Play6 z' ?; C0 g. I
  2314. JSR Music_Song_Stop5 H$ v0 T9 Y- D8 L1 M
  2315. LDA <Music_Stop_State3 Q& N3 w% d4 [$ o
  2316. RTS; m4 l8 N# P; c" M& A

  2317. , d3 j! l4 d, O0 F
  2318. Change_Select_Play
    ' R* _! g( _$ Z+ v5 ^, t& `( _
  2319. JSR Music_Song_Play
    0 A1 x8 t2 q! n8 b5 I
  2320. RTS
    7 X0 S2 i* |; ^6 i
  2321. 2 R0 y2 f' P2 r9 V+ r& ]7 o
  2322. ;--------------------------------------------------7 N; k7 V% q8 C
  2323. Change_Select_Last_Item;上一个专辑
    ) D& z/ E0 v& {2 }3 f) m$ d
  2324. LDA <Text_Disable_Flag
    % ]+ A) N% s! ]" n0 @7 w1 b
  2325. AND #TEXT_DISABLE_ITEM
    ! h$ W. Z7 Z( H# Q0 k9 f
  2326. BNE Change_Select_Item_End
    * y& h4 ^  l) X7 S4 v1 V4 r5 Y
  2327. LDA <Key_Once
      e7 Z/ J5 Y3 h8 C3 X
  2328. CMP #$08- x; Y; ^! n; o. l4 N" y
  2329. BNE Change_Select_Next_Item9 V0 E8 Y: |2 v
  2330. JSR Last_Item9 m8 i+ N* z7 D, j, D. q' u
  2331. ;--------------------------------------------------( I1 p# @5 S- V" d1 q
  2332. Change_Select_Next_Item;下一个专辑
    , I: v5 a8 y" g7 D* N7 ?! ?  f
  2333. LDA <Key_Once; ~0 A; e0 b% C; F; q/ b
  2334. CMP #$04
    + L; ]% V7 o) j& n0 X5 ]( r0 X. v
  2335. BNE Change_Select_Last_10
    " ^9 s- T" \  ~: y) |
  2336. JSR Next_Item4 L- C4 m: ]# A# R
  2337. LDA <Music_Item_Cur
    % O) [/ K1 [, K4 L% t( n% W$ W' e
  2338. JSR Get_Page_Start_Index! [, C* k; h3 P7 c
  2339. ;--------------------------------------------------
    % v' d( T9 E4 n2 V
  2340. Change_Select_Last_10;前10曲
    ! ?: z* }7 A, y1 {
  2341. LDA <Key_Once& i$ ^, X& C) X+ m' A
  2342. CMP #$40
    * `% l" ]* R7 `/ o  y
  2343. BNE Change_Select_Next_100 G. ~! w- c# e: o. s
  2344. JSR Music_Song_Last_10
    ) \) y. C& B& P% D7 F
  2345. ;--------------------------------------------------
    3 u0 W* E. C, z! x6 G! X
  2346. Change_Select_Next_10;后10曲3 q* d9 e4 b( U9 j0 D; j4 N
  2347. LDA <Key_Once
    , ^9 P  p5 \$ Q% h; t
  2348. CMP #$80
    & g* v6 Q  I8 W, f2 o6 `) i
  2349. BNE Change_Select_Last" n" u1 L: F8 N+ d' y, q
  2350. JSR Music_Song_Next_10
    " H+ _2 `- b4 ]3 F% {1 m9 ^6 H
  2351. ;--------------------------------------------------
    7 v! ]9 N! B$ I) k
  2352. Change_Select_Last;上一曲
    0 @/ [+ |& K" F3 ]
  2353. LDA <Key_Once
    ' J: K9 Q  t4 P( K
  2354. CMP #$02
    * \# f0 Y/ g' A+ r$ U) I
  2355. BNE Change_Select_Next% _! F0 D! L/ H/ \5 w" `6 R8 C; t
  2356. JSR Music_Song_Last! X$ K0 t: `' h$ D, _4 R5 Q
  2357. ;--------------------------------------------------/ O2 K4 Z* E! A. v9 K( S# l5 d" C" \
  2358. Change_Select_Next;下一曲; x& b$ [2 P/ N" y* q+ ?/ D
  2359. LDA <Key_Once
    3 b6 j: @3 ^4 ^, t9 l/ g
  2360. CMP #$01. ?! @4 [: F. f7 ~1 K: \2 ^
  2361. BNE Change_Page_Next5 J! G! f- d. ?% C3 @: V
  2362. JSR Music_Song_Next1 W9 ]9 {' w) k% |
  2363. ;--------------------------------------------------/ ]% k  _! P+ V* m% f% v3 A
  2364. Change_Page_Next;下一页+ u0 b/ L- v' e# \. h- e& F
  2365. LDA <Key_Once4 C& o6 v4 z9 n8 q
  2366. CMP #$20) g+ ?8 e1 n' {6 k; h
  2367. BNE Change_Select_Item_End# u1 `9 W- u3 }& w
  2368. JSR Next_Page
    $ x( L0 q# R" Y, g
  2369. ;--------------------------------------------------; U' N. {1 {# _) V& R) G. b
  2370. Change_Select_Item_End
    ' \1 z, w+ a3 r: |' U- H1 h6 L
  2371. RTS
    # h' u' x1 a  m$ X6 l

  2372.   s" `9 R, N" s6 x6 ?% o( C0 z' m+ x
  2373. ;==================================================
    & ]- n6 F4 A8 c; x% o  y, D% r8 R
  2374. Show_Arrow;显示箭头光标
    ( o4 U  n/ d' D2 N2 b- d
  2375. LDA <Music_Item_Cur
    - n+ |: c$ e) g4 \
  2376. JSR Get_Page_Start_Index
    6 f( r& @) S9 `7 }
  2377. LDA #$00
    + F/ Z4 g' X( Z4 T0 G) O
  2378. STA PPU_OAM_ADDR
    ' \* u  |  i9 Q- z! U
  2379. LDA <Music_Item_Cur
    : j8 [! B/ h$ [) w4 m: |8 l
  2380. SEC
    & X# \' e2 |% m4 R+ |. r7 L
  2381. SBC <Data_Buf
    " e" M8 c2 G& s/ ^
  2382. ASL A" k* {& d( ~6 p& x
  2383. ASL A. @: `& P2 s6 c4 i- B* |* E
  2384. ASL A
    2 ]0 j8 K  }- E& ]+ D6 h
  2385. ASL A
    - P6 Q- V5 j4 H( M
  2386. CLC/ ?& F2 }5 _, m0 l" L0 k6 j/ U
  2387. ADC #ARROW_Y_OFFSET
    ! R- W: _- C3 z. ~# }0 G
  2388. STA OAM_TEMP_ADDR + $00
    ! `9 |% [# }5 i- A
  2389. ;STA PPU_OAM_DATA* L( P/ P7 G2 S$ w' \
  2390. LDA #$1F, F2 C4 n% x. Z1 z2 `* n
  2391. STA OAM_TEMP_ADDR + $01- q5 |+ D' V& n( t
  2392. ;STA PPU_OAM_DATA
    ; P8 i( ?, Y* p5 _* ^
  2393. LDA #$00( z' p# Z3 L7 D4 z0 ?' L/ ]
  2394. STA OAM_TEMP_ADDR + $029 A) _9 U" z. E7 ^1 S. |" ]: l9 d
  2395. ;STA PPU_OAM_DATA
    3 d4 O; J, `. r5 u( t
  2396. LDA #ARROW_X_OFFSET
    ' Z1 E7 p( v$ Z! c6 w+ h+ M2 p
  2397. STA OAM_TEMP_ADDR + $03
    9 S5 Y1 H4 X0 D' F3 ?- r
  2398. ;STA PPU_OAM_DATA4 p" c+ Y" V) k
  2399. RTS2 X3 w5 l# n" s% j4 e

  2400.   g: W0 e9 R6 F) ^' x. m
  2401. ;--------------------------------------------------
    0 a3 J+ D' C! {; ~6 }* x! H
  2402. ;命名表数据$ ]4 m1 K8 C8 E# ?) _$ g
  2403. Palette_Attributes
    8 x  {  w: e" j! [
  2404. .IF SOUND_BAR_SHOW_ENABLE/ a' n' s& E5 R6 B/ r: c" w) x3 U  j9 M
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    . i  z4 B6 T) _# _  f" U  @* U3 h' m
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55. H/ n9 n* G  C% |1 j! Y
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75! h0 i& F0 B4 Z# V% Y
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA0 E3 r7 J# r* p
  2409. .ELSE& o4 [$ g: Z9 M/ m: q$ H
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$554 Y' ~; h! U) z) c# p: I1 U
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$555 Q2 m6 p8 X/ t) d
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    # K# q. D2 ~. @; |% b8 R
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    - \8 o8 u9 ]" W% x* g$ t3 O  y0 Y
  2414. .ENDIF
    / l7 w, w. g8 S9 l3 }! T' _2 p
  2415. ' h1 Z; O: }" U5 C/ U! N0 o+ z
  2416. ;--------------------------------------------------: w; Q* x( g# P% B
  2417. ;调色板数据
    9 |1 ^+ F4 ?( W% |! @
  2418. Palette_Data2 }) j9 U6 n, e: h3 H5 G. H" |
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    * Q+ a; f1 h0 N1 ~
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F- B9 t2 _& L3 }: _3 Z- D* Q
  2421. * l/ A& O$ p$ Q' L
  2422. ;--------------------------------------------------8 s9 R$ H1 V! i# t; Y2 B7 h/ Y
  2423. Static_Text_Data
    1 W( ~8 y& M/ N  w
  2424. .WORD Static_Text_Caption_Data
    $ g- m+ K/ B" ?7 c. `7 s
  2425. .WORD Static_Text_Author_Data- V* h. R. E  B/ v1 {
  2426. .WORD Static_Text_Date_Data3 M% ?5 E* C3 n
  2427. Static_Text_Data_End
    2 U1 e& Z( I! I9 ]

  2428. * {* D4 A- C) A' z
  2429. ;--------------------------------------------------
    % A; c' B* F6 }- T9 t( h+ |
  2430. Static_Text_Pos
    % ?5 _" [3 N# v, z% k  A8 |, {6 b
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)0 U" L1 ^/ o/ o3 X, F1 ?
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)8 }2 S8 B+ t" s; u5 D
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
    + R* z1 L# a5 j! s/ w# r) |* X
  2434. Static_Text_Pos_End9 |, T, [) @0 F* P/ _! S2 u

  2435. 6 t% p; |0 I9 R5 c, x/ a
  2436. ;--------------------------------------------------( V5 v9 ]% ^3 [6 F. F
  2437. Music_State_Stop
    " h% O' {2 V* _$ N; J9 E& o
  2438. .IF SOUND_BAR_SHOW_ENABLE
    , C+ T0 x+ S2 x. |8 J
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    3 f. k  H4 w. G9 Y& y5 A- R9 N
  2440. ELSE
    0 S! W+ G* x$ m' X% W' h* b
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    8 }- t. x! {: b0 ^8 Y0 j
  2442. .ENDIF% w1 l! n( N/ B/ q: ^1 D
  2443. Music_State_Play
    7 S& W7 P4 a1 D+ W
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    2 i; T3 H# I+ H. g
  2445. 5 K4 h! F0 U, N- h) ]8 h* K
  2446. ;--------------------------------------------------; A  v( I# z; J
  2447. Sound_Bar_Text_Data;声音类型文本: y3 i9 Y* {, T1 ]0 e. G) s& |
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"* `5 p7 X  u+ ~% w0 c
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    : B6 K7 l2 u9 K5 J! h$ P7 Y
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"
    ( L" @3 T. M/ u* ]: E* ^0 c
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"
    3 ]% y7 M6 L2 W
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00
    - Q: f9 q0 E# j1 X$ T
  2453. - _& I0 Z  w# J5 B
  2454. .IF Track_Name_Pos
    ; M' ]% s( ]) P, C% u

  2455. - n/ w4 z! p3 j; l) B" U
  2456. ;--------------------------------------------------/ \: ?7 \# O7 k# a; J
  2457. Track_Name_Addr_00;曲目名地址索引( g; z9 u) r/ G5 f: }
  2458. .WORD Trackr_00_01
    / ]3 z- Z7 z* F  d) t

  2459. ' K' i( ?8 R6 H- G0 t% `
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
    , Y- U5 l" t# u7 P- L  X' g+ k
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"4 n% i& M2 b6 x
  2462. : a3 W( J* [) w1 j
  2463. ;--------------------------------------------------
    + Q  u* X& |0 Z' `$ Q1 M; a; q9 a
  2464. Track_Name_Addr_01;曲目名地址索引
    2 K# l* s) Q6 G/ w3 W3 m7 s+ r) O
  2465. .WORD Trackr_01_01, n7 E3 y( K. @, \8 ]
  2466. / C- W5 e8 U% `% g
  2467. ;==================================================
      M5 J* Q; a. A; v' j  A& U
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"
    $ n" {' t+ e1 D0 Q8 I8 J6 i
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
    7 |/ B4 H4 l5 d( |6 _8 R

  2470. 0 D  ?' `- t. q9 V7 |
  2471. ;==================================================
    9 l  m) K; I' S
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引" H5 J8 q" ]$ D3 H" p
  2473. .WORD Track_Name_Addr_00
    ' N9 y/ y; _) p" v7 Z
  2474. .WORD Track_Name_Addr_01
    ; q) x0 j4 l. d9 J7 ]9 S+ A- v9 Z. _
  2475. .WORD Track_Name_Addr_01- L' f: x: x: ]) G! S
  2476. / `1 f- u  G$ d. `: Y1 |9 l8 q& W
  2477. .ENDIF6 ?1 Z# |0 W' s$ r% d+ i
  2478. ( y' `: Z. x; [3 V
  2479. ;--------------------------------------------------7 d1 ~$ h% M% t1 q
  2480. Static_Text_Caption_Data;静态文本数据
    # x" l. y. \% Q3 G- U% S
  2481. .DB 16# G# Y' A5 Y( j1 B
  2482. .DB "FC MUSIC 12 IN 1"
    1 D& x7 `6 H+ v# d
  2483. Static_Text_Author_Data
    - T7 ~: a0 W& v. j2 E+ y
  2484. .DB 25
    4 E, U6 J& F) }4 B
  2485. .DB "EXTRACTED BY FLAMECYCLONE"/ J6 O4 Q4 U1 |% F+ k: \7 h
  2486. Static_Text_Date_Data6 P0 o2 f" w& y
  2487. .DB 10
    # j# w$ n& W& ~8 F* C% n4 ?
  2488. .DB "2023.07.23"
    1 k0 {4 W8 H' p/ s4 O# t
  2489. 6 C4 O* u  K+ h3 {
  2490. ;==================================================
    $ O2 c. A0 H: `
  2491. Music_Collection_Name               ;专辑名间接索引5 f( \8 L$ W: l( t. \+ m
  2492. .DW Music_Collection_Name_00
    1 s5 u  r! f$ a" i
  2493. .DW Music_Collection_Name_01
    2 s( H6 l3 o0 i( a) O- o) f
  2494. .DW Music_Collection_Name_02' g5 ^% }& f+ N- J( y1 k
  2495. .DW Music_Collection_Name_03. ?# q5 B5 }# ]. z
  2496. .DW Music_Collection_Name_04
    7 a* v1 l/ t& N
  2497. .DW Music_Collection_Name_051 K! _2 K- `; u. M* h1 Q: I( L
  2498. .DW Music_Collection_Name_06
    4 b9 t- J% W, x: r9 E5 S  z7 c
  2499. .DW Music_Collection_Name_07
    ; q0 j) p8 R0 y! J# h
  2500. .DW Music_Collection_Name_08
    8 d7 o9 r( `+ Q0 V+ M0 P" M6 T6 y' R
  2501. .DW Music_Collection_Name_09
    : f1 u  J. d7 q4 l% V7 S' K
  2502. .DW Music_Collection_Name_10) N* x3 o$ F) i& ?
  2503. .DW Music_Collection_Name_11
    6 F! h$ }2 j3 o" ^- I1 w

  2504. 4 S$ G) S: i* b1 x4 @$ C+ g
  2505. ;==================================================/ w. t5 S4 F) F/ e% @0 `4 U# Q
  2506. Music_Collection_Name_00            ;专辑名文本数据! f7 N$ u6 R# r2 G) C$ \
  2507. .DB 11,"1.RAF WORLD"
    $ u4 F& x8 \) c. p$ S0 i: o" A. X  M% c' Y
  2508. Music_Collection_Name_011 G5 K/ C: H3 }1 o/ J; \# W! T6 v
  2509. .DB 15,"2.FINAL MISSION": z/ k* q0 u4 s8 @" D# u. ?
  2510. Music_Collection_Name_02
    % V' i+ i) Y6 G, m
  2511. .DB 06,"3.KAGE"
    $ E' R  i9 \0 s2 ^
  2512. Music_Collection_Name_03
    / B+ D& a" o) A: u( \) D/ ?
  2513. .DB 16,"4.DOUBLE DRAGON"* |+ A" x# ^8 [& {; @% o
  2514. Music_Collection_Name_04
    & M% ^8 ]+ d; P6 [# V
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    # d. n- D# K. V; }" R% f4 v
  2516. Music_Collection_Name_05
    * f1 X: ]# N5 _2 p& u
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    / k; G7 f& ]- w3 Y# R: Y' B/ r) G
  2518. Music_Collection_Name_06
    ) [0 r+ t3 t+ Y2 X$ K/ O2 p! h
  2519. .DB 09,"7.ROCKMAN"
    & v" ^  Q) v) \# O' U
  2520. Music_Collection_Name_077 A/ t2 }/ j) x; ?% q7 J
  2521. .DB 12,"8.ROCKMAN 2"1 ~' \7 T, H2 N2 l7 n) o
  2522. Music_Collection_Name_08
    ) A# \+ `) z. d- w
  2523. .DB 12,"9.ROCKMAN 3"5 H' n% \$ i% |! a  E9 v7 G
  2524. Music_Collection_Name_09
    . f1 _: H* ?( j' @( K
  2525. .DB 12,"10.ROCKMAN 4"
    & L% V9 c6 K$ o" _0 ?3 Z! W
  2526. Music_Collection_Name_10% }& l( G# o* z" c2 k
  2527. .DB 12,"11.ROCKMAN 5"2 T( m8 ^6 B; r; H) S$ [
  2528. Music_Collection_Name_11# H+ s! I, T; s. F7 B
  2529. .DB 12,"12.ROCKMAN 6", N; E9 ]- r+ y# Z# c4 R4 h" y

  2530. # f' [0 {' w) o3 e& E
  2531. ;==================================================  J! @" w9 {" O
  2532. Track_Name_Addr_Flag                ;显示曲目名标记6 ^6 X$ p" G+ c1 I8 r
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0% z2 i7 ]  a9 M: ^2 K( u

  2534. 2 S# k& x5 ?/ b: m9 ]; O. J5 L
  2535. ;==================================================& P' U* L; I# Q) j( i8 c
  2536. Item_Pos_Data                         ;光标箭头位置
    / B( @7 ~6 k9 p
  2537. .WORD ITEM_SHOW_POS5 ?% ]& m* n6 `1 j
  2538. .WORD ITEM_SHOW_POS + $0040
    1 ^& j! T( d5 T
  2539. .WORD ITEM_SHOW_POS + $0080
    / v+ K$ g& r: M6 g. v
  2540. .WORD ITEM_SHOW_POS + $00C0/ J4 }% u. K/ P
  2541. .WORD ITEM_SHOW_POS + $0100' [# j( P/ u/ D0 [0 h+ o1 {& D
  2542. .WORD ITEM_SHOW_POS + $0140
    ' t1 m4 D3 L# `
  2543. , G% y+ r0 p" f! e2 u0 Q- i
  2544. ;==================================================
    4 Q- ]1 K* S' l8 }0 s, U
  2545. Sound_Init_Port                 ;音乐初始化入口地址& E6 ?( C. V, d* b' p8 [
  2546. .DW $BFC8
    " ]0 B: y& X8 L& I
  2547. .DW $D7F0
    - \  N& ~' [  {. }& t: _
  2548. .DW $9FC0* K0 A' m% ~/ W5 Q( |
  2549. .DW $BF70. X; a! P  N- @
  2550. .DW $8003
    - _, r) z- I5 D, C, a  e5 A0 P
  2551. .DW $BF30
    / [* q$ k' X7 J+ V7 P, X3 H
  2552. .DW $90038 Q0 y1 Y) @& ]% e# C& m- w  n4 x3 U
  2553. .DW $8003
    2 q8 T  Q& O, y% u/ m+ s
  2554. .DW $8003- }3 l2 J# V3 b% i
  2555. .DW $8003* u2 x" V7 ^7 l$ q3 B* I  c- p
  2556. .DW $8003
    + c7 H  c/ o$ q( `8 ^  [, q( B
  2557. .DW $80033 [; c% Q' O+ e- L" U

  2558. + g5 k) `! ?- E$ z
  2559. ;==================================================
    5 \; h  x+ M, Y: X3 A2 b' q) ]
  2560. Sound_Play_Port                   ;音乐播放入口地址
    3 t- c1 z/ s( D% b9 q7 R0 M* K$ S
  2561. .DW $8000
    , o, e3 i- t7 m3 k
  2562. .DW $8001
    5 B" K2 G/ e; [" c( e3 t
  2563. .DW $A000
    " b! o8 x# o. l# C
  2564. .DW $8003
    * h. E6 |3 U4 h2 I- j
  2565. .DW $8000
    - C' c0 ?0 t- k% e) V+ P+ Z3 G6 v
  2566. .DW $80033 X; D5 ~( A) F1 J: [0 Q  o
  2567. .DW $9000
    . ?- ~6 A8 p) q2 f) N( B3 M# _
  2568. .DW $8000
    * u3 {* D. Z5 m/ a4 B% C8 m2 L
  2569. .DW $8000. i2 h1 p! Y" p7 L
  2570. .DW $80000 I" l$ ^# ?2 F6 v5 P# M
  2571. .DW $80005 J+ r5 W6 ~- R" o
  2572. .DW $8000
    1 z; N7 Z  Y( d" W, i0 Q

  2573. & T5 K# b$ H: _4 B  D! M7 G2 x
  2574. ;==================================================$ k# g  K6 v. @
  2575. Sound_Reset_Port                  ;音乐重置入口地址
    * P* l; }3 N+ O* r6 p  ~9 q
  2576. .DW $0000+ m! B, Q7 e% P% u- I) Y  O
  2577. .DW $0000
    + y" R, e$ m2 Q, U
  2578. .DW $0000
    ) [; v' d4 a0 {' [; ~0 {4 I
  2579. .DW $0000
    ! H" }; `  u8 b
  2580. .DW $0000, L- {8 N& u; h' O0 K/ F) \7 W& s
  2581. .DW $0000
    : S2 d5 ]" z+ r6 o8 {
  2582. .DW $0000
    & _( d) ^8 n* n& ]* @5 D
  2583. .DW $0000* `' ]: Y5 @( u& e
  2584. .DW $0000% Z/ U1 s6 ~& Q; }. M" H+ {* n
  2585. .DW $00004 N1 e! I6 R8 Q
  2586. .DW $0000/ ^  O3 N# Q; W+ d7 d
  2587. .DW $0000, x  Y% d1 Z7 o+ i

  2588. 4 O, N. ~, ~5 s8 @" u( y* w9 y8 `1 B
  2589. ;==================================================
    " _; G& a/ N9 ?7 N7 P, i2 K
  2590. Sound_Total_Port                          ;曲目总数4 e% B  w% r9 }& y9 ~4 J* c/ O% E
  2591. .DB 386 K7 b0 |% P, l
  2592. .DB 338 e9 h& ]+ G7 [1 n2 X
  2593. .DB 499 p$ f4 X5 b2 x. e% Q
  2594. .DB 41
    / X, R+ n. x4 B: z# [$ V2 o
  2595. .DB 838 O3 w8 C9 O( C7 n
  2596. .DB 70
    7 `# r6 X: w6 t: T
  2597. .DB 504 M5 p, ~8 b/ U( X! U5 Y% V
  2598. .DB 67
    * ?2 H3 F, S$ s3 N. W0 p$ q5 J6 @
  2599. .DB 570 M1 a; z/ U( n1 _
  2600. .DB 71% O1 w" y1 T7 i6 A- c% I7 s
  2601. .DB 76
    0 E. t: H# b+ Z+ R- r/ n
  2602. .DB 1028 ^# E, U6 }) z0 i9 }! D) n

  2603. ( C! J+ ]) p& |+ [, e' o# n
  2604. ;==================================================
    3 t5 I) i+ C+ J  c& t- S% p& U
  2605. Sound_Start_Port                      ;起始播放曲目
    1 C! a3 u' ?/ G5 r& t' G" B( t- O8 m: ]
  2606. .DB 00
    ; f7 e) j# v3 i, g# \+ i9 f
  2607. .DB 00/ I4 t; ^* n: S5 k2 n. d' i
  2608. .DB 00- t; H% w7 _1 f
  2609. .DB 008 s) \, V- P( G& T" C8 {; k
  2610. .DB 00& |/ s. u* t8 n
  2611. .DB 002 q& m- o. S# i
  2612. .DB 006 z) C6 o2 y6 t
  2613. .DB 00
    2 }$ q" o% Y4 w; Z
  2614. .DB 00* u. v6 L" W$ V/ {! X4 M( O2 t& S
  2615. .DB 00
    $ T: w' q( i- {% O2 I
  2616. .DB 00, }( I0 F2 [+ w- M/ `
  2617. .DB 00" m7 X1 v# J5 E: c2 y
  2618. . O! ?) ?/ ~" G% h' m9 R8 G
  2619. ;==================================================: [1 ], X  W! w# i; S- ?
  2620. Sound_Bank_8000                      ;专辑bank_8000. I- `$ }0 [. c- i! s
  2621. .DB $10
    ) q3 X8 L2 b9 O7 R( w# g- r
  2622. .DB $12! Q" u6 c$ p: G% ^
  2623. .DB $14$ |9 b, s4 }# @  B' E" x! B
  2624. .DB $166 n6 r' Q; M  r5 u
  2625. .DB $18
    - j- g! n) C! _
  2626. .DB $1A8 N7 Y# G$ E( V) d2 z- Y

  2627. 0 g8 ?' ^9 G* x& m- S5 G2 x" E; W1 Y
  2628. .DB $00
    $ e2 ~) {$ a# ?3 I8 e) K
  2629. .DB $02& m2 F2 n1 W0 S7 L4 Q$ u6 h, o
  2630. .DB $0D
    & }2 t+ f: {, g6 C2 e
  2631. .DB $049 A4 T: y3 X7 J  b* ]5 t7 m  n
  2632. .DB $07& W9 Z1 g) `7 C
  2633. .DB $0A' O& j5 V* C" Y# t. n% u  X

  2634. ; {; s( }. ^* Z0 w

  2635. 1 V% F' w5 `4 Y# s2 ?, J! u5 n% w
  2636. ;==================================================7 K5 \, B, G) z$ v
  2637. Sound_Bank_A000                      ;专辑bank_A000% j4 x( ]- S, v" N3 y- C# v
  2638. .DB $11: K( x0 s8 `: A& S" l# c  r& n
  2639. .DB $13
    9 G# m+ y  L, M6 J) Y9 W1 s
  2640. .DB $150 F2 q1 @) O6 j/ E- P
  2641. .DB $177 Z; Q4 ]( k* _2 d
  2642. .DB $19. q6 `5 Z0 W7 z
  2643. .DB $1B8 Y( x) U; A7 c2 l# f

  2644. - A+ n# q6 a2 B  L
  2645. .DB $01
    ' u2 D4 h" z. g% O/ P
  2646. .DB $03
    : R9 @* e& ]' o+ u  u" \
  2647. .DB $0E  g& T  H' H% W, A
  2648. .DB $05
    ! m' v+ J' B+ V: I8 R; P
  2649. .DB $088 T4 G) w: e- a5 \0 N
  2650. .DB $0B4 x! r  S8 y  W- X" B
  2651. ' b% h0 [- v: Y
  2652. 9 o; s  [" X/ o$ U+ f' F
  2653. ;==================================================
    ( _( Z2 X  \# j/ P8 W7 k- q* P3 o
  2654. .BANK RESET_BANK & BANK_DATA_MASK; J; }5 I4 I  Z, |% e& s2 M
  2655. .ORG RESET_ADDR8 |" z$ _) x9 h% ]- O

  2656. 6 T/ W6 ^! C. G. C8 v& U) V: T' s
  2657. ;==================================================
    ) C+ i8 g5 u7 y9 k
  2658. Switch_Bank_8000;切换bank到8000-9FFF  q3 Q8 ^; V; F4 w
  2659. PHA
    6 t7 W+ [$ r9 J. w4 C* l9 Z
  2660. LDA #$06: ]  F7 Z! q- K2 ]- W
  2661. STA MMC3_BANK_CTRL
    0 j3 Q1 A" s1 F( {: p, i
  2662. PLA* D* ]2 z8 q/ L
  2663. STA MMC3_BANK_DATA7 N5 p, C! K( P/ t% F8 _. e
  2664. RTS
    ; R+ P3 D; w" W5 N$ X

  2665. & {. a$ t( Y7 I2 w
  2666. ;==================================================
    / d4 ~! l9 l+ p! `- T9 w
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    0 u* V. F& i+ K2 z1 }8 S. S! V- B( ~
  2668. PHA
    6 W4 t" Q) j( M+ y+ O
  2669. LDA #$07! ]& ]9 h2 d/ z
  2670. STA MMC3_BANK_CTRL) e+ b* j: V  S9 V
  2671. PLA- Y( Z4 p9 }% E1 W7 C  W
  2672. STA MMC3_BANK_DATA
    % L; j9 ~8 u, o  z8 k% A7 [
  2673. RTS
    ; `4 S5 o/ D, `7 z" d- C
  2674. % Z" q, B9 W0 D! e1 I2 _' `- e
  2675. ;==================================================
    3 {6 Z8 d- M3 u5 S/ \( L: D. S
  2676. Switch_Main_Bank;切到主程序bank* C1 T4 J9 X+ n  c2 Q' V
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK- L- T/ \' t8 n; o, d
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
      F) [8 _" |- e; o8 a# o* q2 j3 d. }7 t
  2679. RTS9 K7 {5 G4 z7 X1 m- P2 E
  2680. - `1 c9 Z$ n$ r+ q( M" b) H
  2681. ;==================================================0 p! M, `0 s* m* G
  2682. Sound_Reset;音乐重设(如果有的话)5 b# e7 q% [+ S4 ^4 o; ?
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    ) k9 P5 h0 N: y7 _  j+ k9 x
  2684. JSR JSR_Addr_Op        ;执行音乐重置. |$ G9 p2 W! N* C3 }
  2685. JSR Switch_Main_Bank   ;切回主程序  C, r$ y& R' Y$ L# E. h
  2686. RTS5 E) _" M  `  G- P* b: u# R8 m

  2687. 5 C$ x$ M" v5 J: Y& M2 F! D
  2688. ;==================================================
    8 g- D( B  @1 U# w
  2689. Switch_Music_Bank;切换音乐bank5 _$ B0 J6 F; f+ v; o1 f* z& o
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号3 L8 Q5 F% W# ~6 U0 b% A5 a
  2691. LDA <Music_Bank_8000( W% n3 a6 p' q* P; ~
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank" v0 I; j$ t+ N5 `  s+ p- _- @0 ?
  2693. LDA <Music_Bank_A0002 E- O2 |# b* d" F% ?8 }5 ?1 I7 M
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank* v$ o0 v2 O; K  Y
  2695. RTS
    2 B9 @6 j9 m1 u5 g7 C! Q

  2696.   m) t) X% ]) P! \! O7 p
  2697. ;==================================================
    1 k0 X5 o! k5 C( `3 P
  2698. Sound_Init;音乐初始化
    9 o' O$ F* q/ a: H* b) f2 Q( i8 ]1 w
  2699. PHA1 O% s3 X+ @7 q  f) }
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    ' D& ~# w* k9 l. V& m! {
  2701. PLA9 @4 I& v" X( |6 O# ]. w/ Z. Z8 Q
  2702. JSR JSR_Addr_Op        ;执行音乐初始化
    3 B1 |7 w3 f5 S) v: }" t
  2703. JSR Switch_Main_Bank   ;切回主程序9 s' v8 @4 j. B+ T
  2704. RTS
    + Y7 E. X) n2 h/ D/ y  E4 S. B
  2705. 6 {+ O) d' d" G, ]5 [
  2706. ;==================================================2 @5 c  ~3 C, h
  2707. Sound_Play;音乐播放# \) _  L7 c& ?1 o- n, k9 L6 d
  2708. JSR Switch_Music_Bank  ;切换到音乐bank1 S/ x0 @* L& k0 H7 a7 m
  2709. JSR JSR_Addr_Op        ;执行音乐播放
    " N/ `% E: y: N! s0 Q
  2710. JSR Switch_Main_Bank   ;切回主程序
    - W. e  y, {9 s" d. t4 R2 e
  2711. RTS
    + \1 e) h" F$ ~8 o7 _: u1 y
  2712. $ ?1 I! F' ^8 o% w; |3 e3 l
  2713. ;==================================================
    " o3 b, }  p% T/ G) K
  2714. MainLoop;死循环4 h: U. Q. p: P  G0 c- Q. G# `
  2715. JMP MainLoop. D( m- d; Y# F5 E$ X+ ]

  2716. + [6 {/ W* u$ x9 u+ f, g
  2717. IRQ_SUBPROCESS_JMP = 0
    ( p! q  |: n. t* R, ~" ^

  2718. 8 }5 p) w9 T2 n8 ?& S' s
  2719. .IF IRQ_SUBPROCESS_JMP
    7 E' ]6 U8 ?) l" i$ z
  2720. ;==================================================9 ~3 @% j% y1 \, M4 c* S6 t
  2721. IRQ_Process_0;IRQ处理过程0. ^! P0 u$ B& ]* N' F: v- ?; q' e
  2722. * d8 d$ c! J) k& A$ G, C
  2723. ;15条扫描线后触发IRQ; g1 ]# l" A: q/ k  d4 u! B% s
  2724. LDA #15
    9 l1 z" D/ q! h+ p- |( s
  2725. STA MMC3_IRQ_LATCH
      I4 q) ]8 l7 g3 k" F" B
  2726. ( C3 F$ J' _+ R! R. l4 ?
  2727. ;设置屏幕滚动
    0 r! r9 d% s4 Z6 e' f; k$ y
  2728. LDA <Scroll_H2 `! ^8 y2 F' E  x; r) @
  2729. STA PPU_SCROLL3 Z( Y5 L: a6 q. J5 X
  2730. STA PPU_SCROLL3 R9 {5 Y7 U" W7 ]" N+ A

  2731. % x" X: _! R( u* k0 S
  2732. IRQ_Process_0_End5 g' B1 o6 y1 z& ]
  2733. INC <IRQ_Process_Index
    $ u' I8 c% ^7 c/ s
  2734. JMP IrqProgramEnd
    + b( I+ H( s. H. y- }
  2735. 7 i* Q& M, {$ T
  2736. ;==================================================
    $ A: p% W5 V+ d5 C
  2737. IRQ_Process_1;IRQ处理过程1
    + _2 _7 _/ v' ~

  2738. % t# W7 l- t3 r
  2739. LDA #550 M+ u9 A, b+ L8 @( x
  2740. STA MMC3_IRQ_LATCH" q2 ]3 s( W( h5 g" d; _
  2741. 0 r7 W0 Y/ H) b1 H6 S; O
  2742. ;设置屏幕滚动
    7 U: Y& O6 y5 h' {8 x" L$ Y
  2743. LDA #$00
    0 C. W3 c2 `! {5 Y: i" A4 l
  2744. STA PPU_SCROLL
    - \1 `/ A0 `9 b6 K6 A
  2745. STA PPU_SCROLL8 j6 J1 v2 K7 i4 U

  2746. " A2 i  F1 X' V
  2747. INC <IRQ_Process_Index
    ' |  Y" f" U& z# z1 Q
  2748. JMP IrqProgramEnd
    ' L5 p( }" R7 U7 L/ `) Y8 {/ F" u/ h1 z
  2749. + s- x# h7 v6 L# P& Q
  2750. ;==================================================
    # T9 P$ E9 O6 F4 y" Z* R8 a
  2751. IRQ_Process_2;IRQ处理过程2( M) ]0 N  ^+ T& ?  ?4 l9 v

  2752. + N# h4 v/ O" T  q$ \, j  e
  2753. LDA #15
    6 }2 x' z0 q" x" u
  2754. STA MMC3_IRQ_LATCH+ c2 m" P, _' J* f; P' e5 j0 Z
  2755. 8 |# T: D; Q# E6 \3 g' \
  2756. ;设置屏幕滚动
    5 j6 h; l$ h6 D; a0 J. g- U
  2757. LDA #$00
    8 p# o" {( K0 p% q! n& p
  2758. SEC1 w" Z8 a! L8 w! J' r8 R
  2759. SBC <Scroll_H& X# b5 K+ Z% z
  2760. STA PPU_SCROLL3 f1 c9 U6 F0 `% f# H- {6 a9 y& o
  2761. STA PPU_SCROLL  P. G4 G1 J+ N

  2762. 3 p! y0 j% K- C0 q  e' d
  2763. INC <IRQ_Process_Index
    5 V2 x$ X: _' G/ o. q- Y8 y' ?# ]' ]
  2764. JMP IrqProgramEnd
    - f: x% L2 B6 p6 V: q# _9 _/ I

  2765. 1 v% ~& E4 y+ M2 V3 j& P
  2766. ;==================================================
    " V6 ?7 A! q7 c5 O8 b* e
  2767. IRQ_Process_3;IRQ处理过程3
    2 ]% Y; R* G$ o" E

  2768. ; G" D3 y1 @! {5 j% {
  2769. ;设置屏幕滚动* S8 `6 Z9 N+ j
  2770. LDA <Scroll_H
    : d1 N4 T, B' g8 @9 R- W0 `
  2771. STA PPU_SCROLL5 L# I7 F% \' L: x4 |
  2772. STA PPU_SCROLL/ t' W) \* F; X" u& J

  2773. , e$ q7 c) _1 P4 L
  2774. ;禁用IRQ/ f9 k5 v2 S: N7 f
  2775. STA MMC3_IRQ_DISABLE  ?+ I7 p6 y6 S5 {5 q5 X$ l
  2776. JMP IrqProgramEnd
    ; [$ o" G8 S; E
  2777. " }+ y( S# I& m9 J1 E4 H
  2778. IrqProcessAddr% I( \/ D6 N+ O" A
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3' H. U1 E7 [, C! j7 ~
  2780. + _( k0 ~8 }& l' m  z/ g
  2781. .ENDIF* Z4 U; g4 w% D3 _* ?: N

  2782. ) h' v( ?% s: E6 h0 k
  2783. ;==================================================
    . `! F. N8 F4 n( l
  2784. ;IRQ滚动模式常量
    " C2 m$ f$ E, l4 Y0 b. X: J* n
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
    2 q9 g5 j' A$ t7 ?
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动- C: A& z3 Q2 q" c1 e' ]3 J
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    $ M# Q" l2 D5 h% ~0 @$ o

  2788. - W8 ?3 E2 r. B7 p: D' r; O
  2789. ;IRQ扫描线数据
    . W, X, x7 m+ X4 ~
  2790. IRQ_Scanline_Data
    . ?5 ?( _' q  P; S0 s3 w6 |
  2791. .DB 8
    ' F& n+ V& l( d, V1 s. T% [# c
  2792. .DB 54+ ?: O& ~9 ~$ J- K- g
  2793. .DB 8
      y3 W1 P9 L& ]2 y
  2794. .DB 00 ;关闭IRQ
    4 S6 z8 n; N0 q, j- p
  2795. $ }# O' z5 J: d  _
  2796. ;IRQ滚动控制模式
    ( M% Q9 o; W8 w0 I6 @2 U: h9 V7 I
  2797. IRQ_Scanline_Mode
    , i4 v! X+ N" T0 x7 Z1 k5 I8 ^
  2798. .DB IRQ_SCROLL_MODE_ZERO5 z$ b0 y% R5 g% T
  2799. .DB IRQ_SCROLL_MODE_ZERO+ F' A  j7 p; `% c- k+ N- i9 M7 ^! q
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    % O5 u. V. p9 [1 i9 a+ P  a5 R2 V
  2801. .DB IRQ_SCROLL_MODE_LEFT! K& J8 h: p. H

  2802. $ y, J  v8 N) b/ t' \' }+ l. G/ s) d
  2803. ;==================================================3 L2 u/ a" X/ s
  2804. ;IRQ处理
    ' f2 ^) @) H0 p3 S
  2805. IRQ_Process
    6 a9 ^( l7 B1 J
  2806. LDX <IRQ_Process_Index
    0 O+ i+ o% _+ K/ X4 v0 i$ L5 q8 m
  2807. LDA IRQ_Scanline_Data,X+ k7 q; V- e8 N' i+ q' T
  2808. BNE IRQ_Process_Latch4 u. F# ?* u& [8 T9 A8 R6 i
  2809. IRQ_Process_Disable;禁用IRQ. `% Y* n. [. }7 \; @3 K
  2810. STA MMC3_IRQ_DISABLE
    2 J9 |# B: t( B! h: f. `
  2811. STA IRQ_Process_Index
    + _8 R8 W, R/ K$ J
  2812. BEQ IRQ_Process_Scroll$ P" F1 K# S3 G, ]/ h- V( Q* O3 ?: A
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    ( x# e! a7 W7 d
  2814. STA MMC3_IRQ_LATCH. ^2 T% x2 F8 \: r
  2815. INC <IRQ_Process_Index" k: @: u4 g$ z+ I
  2816. IRQ_Process_Scroll;IRQ滚动控制( |6 t+ v/ ?. U6 ~8 D! P
  2817. LDA IRQ_Scanline_Mode,X
    5 P" ^! q; w4 c) m$ m" i8 Y; h4 V
  2818. CMP #IRQ_SCROLL_MODE_LEFT& m( U! `* O, t, Z, ^; Q
  2819. BEQ IRQ_Process_Scroll_Left3 e5 d3 J$ {1 u+ s1 h
  2820. CMP #IRQ_SCROLL_MODE_RIGHT6 h- K* r$ N% {: H. G, w
  2821. BEQ IRQ_Process_Scroll_Right
    " v: X8 p  _* |8 n& l
  2822. IRQ_Process_Scroll_Zero;不滚动, F5 }$ S& f6 k7 y! b9 b
  2823. LDA #$00$ h- y0 ~: y1 |& Y2 \5 p) n
  2824. STA PPU_SCROLL% u# ~. S3 a( p* {/ A5 U
  2825. STA PPU_SCROLL
    - B, F3 c+ s$ R. ]- }* M5 }) p
  2826. RTS% ]2 r8 l  Z1 s
  2827. IRQ_Process_Scroll_Left;向左滚动0 \4 ?: c1 Q& S/ b5 m" L: F+ d, R
  2828. LDA <Scroll_H
    6 _2 [3 _( C0 n5 a. `8 e
  2829. STA PPU_SCROLL% _3 Q9 X0 ^, z) `% j
  2830. STA PPU_SCROLL6 K% o' @4 ^8 B* n# i2 e4 E
  2831. RTS( N" u) z: ^& @$ j7 o
  2832. IRQ_Process_Scroll_Right;向右滚动
    $ m% X4 v5 o4 C1 S, `$ w7 M
  2833. LDA #$00
    7 t& w$ D% D2 ?8 P/ I1 E
  2834. SEC# ?: h6 p& g4 m% f7 ~
  2835. SBC <Scroll_H
    ( Z1 X* p5 h& D  ~, ~
  2836. STA PPU_SCROLL) I  I/ n$ N- A$ ]
  2837. STA PPU_SCROLL
    9 C6 P" f$ [# c2 V- N
  2838. RTS/ s- m. q) M8 J. s
  2839. # ?# ?7 w0 d* N4 P/ m2 L
  2840. ;==================================================2 w. s6 t9 @& H  y! O1 m, ]
  2841. NmiProgram;Nmi中断处理
    + K; T  @. u" J/ X' A1 x: A) ?: Z/ Q
  2842. PHA  g- @$ Y4 n+ ]0 H/ U  V% {9 L# B- p
  2843. TXA
    : T* F3 b  c  m
  2844. PHA
    ) V- }* a, W' R4 C. `9 s
  2845. TYA# z; R& F1 X% z
  2846. PHA* K( T7 |. w# p/ |6 w0 I
  2847. , V$ x. K4 i9 X3 J( ?5 l
  2848. ;读取清除Vblank标志, 防止重复进入
    4 {9 U5 `( w6 ^& Z2 n+ `/ Q6 z
  2849. BIT PPU_STATUS- d, R- U3 I) ], G; E

  2850. ( x% m- `0 v! j& u! h
  2851. ;切换主程序bank
    ! v5 \5 {: ]/ G$ A: q
  2852. JSR Switch_Main_Bank
    ) C3 g* w' q0 a) ~: v  z* Z; |
  2853. ! H- U5 x! N' r7 V. @. B
  2854. ;Nmi处理
    9 O8 w- G; x- d6 Q- k
  2855. JSR NmiProcess
    6 m6 n; p' H( r; o0 C$ ?9 ?
  2856. ; X/ B# J1 @4 j9 r  \# J) s, N
  2857. Nmi_Proc_End
    + t- ^1 W4 b8 D0 a6 ]3 W
  2858. PLA; Y- j  C: V' c  v
  2859. TAY
    5 r) |- j) Z" v9 Z/ n/ l
  2860. PLA
    " z5 B" J, U( R: m' P
  2861. TAX
    & y* F- O0 N* d0 d
  2862. PLA7 H9 k" m5 s; p! I  F
  2863. RTI
    2 {0 h3 J" n: l; k3 i$ ?

  2864. , d3 _4 z7 K' t: O- ^/ E1 ^& |
  2865. ;==================================================( p! B. f% U4 {  r6 V; R2 i$ R
  2866. ResetProgram;重置中断处理7 C# Z9 b1 g$ Y9 B$ W
  2867. SEI9 D$ \5 p3 l+ O
  2868. CLD: f; C/ i, g* y$ p1 q' C
  2869. LDA #$00
    0 v: a4 i7 R4 V( Y; |
  2870. STA PPU_CTRL
    ( c' W& n4 T7 ]0 H: }' N/ W
  2871. STA PPU_MASK
    5 T$ b2 O# x; V; w1 f+ m9 t$ c

  2872. / v; b9 {% M& L7 {
  2873. ;切换主程序bank# v: c: U4 D  j1 ^; ~; L3 X
  2874. JSR Switch_Main_Bank
    8 w9 j, {6 ?% s9 @1 N- N& q0 W

  2875. 2 r5 t  x' }: f& `6 O
  2876. ;程序处理开始! q' x5 b0 C2 G7 k5 y
  2877. JMP ProgramBegin
    ) A$ D& W5 E. s2 j* h% d1 J+ h
  2878. $ {& c! f' p' X) Q, z9 _/ U
  2879. ;==================================================7 K$ o! T2 M8 H$ h- R8 D6 ^
  2880. IrqProgram;Irq中断处理' D) v! s6 W1 M4 T3 O/ c  L
  2881. PHA
    " v4 N# t3 V* N8 W
  2882. TXA
    7 a( U% c6 S8 K
  2883. PHA- x' z. H5 v- T) P
  2884. TYA
    ' V& ?5 O( E0 i8 Q7 S( G) D- l/ G* M
  2885. PHA
    & L3 N0 F$ x2 ]  C3 B4 |4 _
  2886. % N" f$ i+ |: V8 ^6 G  d3 J  F
  2887. ;关闭IRQ
      L: W, {! C$ u3 |$ ^
  2888. STA MMC3_IRQ_DISABLE
    : ?0 @1 i0 J0 ?8 Q* a0 E- E

  2889. 2 ]" h. Z; B1 h5 X/ y. b' G2 Q$ U
  2890. ;允许下个IRQ触发
    " a- A  `0 o6 l( R
  2891. STA MMC3_IRQ_ENABLE
    / s8 ^9 g, E6 n) e
  2892. - x9 g6 \9 @- r8 N0 N! \3 k; S3 B& Z/ ~
  2893. .IF IRQ_SUBPROCESS_JMP
    6 y+ g$ t# e* D6 c
  2894. - R3 X3 q$ Y; a; ~
  2895. ;执行IRQ过程
    5 d! U* j4 W9 D) e$ z& _
  2896. LDA <Data_L# O' [: `7 {2 n. G6 j, g! r0 R
  2897. PHA+ @2 O' H& }2 M# O
  2898. LDA <Data_H
    & B( l7 U& |- n4 w% a7 S- q" l
  2899. PHA
    $ C: [% Y5 T! H/ ^
  2900. LDA <IRQ_Process_Index
    0 D1 q* g8 l0 T- T6 x0 [
  2901. ASL A* _+ V* ^( Q& d( E
  2902. TAY. D! X4 U4 o$ R; X8 s/ V
  2903. LDA IrqProcessAddr,Y
    9 j' y5 O2 V& Y6 }- Q9 @- C
  2904. STA <Data_L' t* O- p$ L2 R
  2905. INY) \! {3 ~) Z9 O5 S$ C: _, R7 _8 _1 L
  2906. LDA IrqProcessAddr,Y
    7 {' t2 H6 ^$ f' J1 g
  2907. STA <Data_H
    / m. J) X  g% y+ |; E
  2908. JMP [Data_L]
    ( j5 d4 L' ]: s' e4 p

  2909. 3 h) k5 n* ]9 {7 A) v% ^( a
  2910. .ELSE: m  Y% [) @8 C% |

  2911. 1 `! G9 L* [9 L$ Q, [- j
  2912. JSR IRQ_Process3 ~$ w5 M0 I7 O( O9 ]

  2913.   V8 m0 T. i/ a5 |
  2914. .ENDIF" f! q% J+ L' @0 X

  2915. 2 w$ B6 {! Q  j
  2916. IrqProgramEnd
    : _/ ?* `7 S+ V* n
  2917. .IF IRQ_SUBPROCESS_JMP
    5 M& Y; K  t! }8 e7 P6 h
  2918. PLA& r& r% @. W' Z  c* S' X
  2919. STA <Data_H% [) O  j  N$ s4 M# ]6 O; l  y
  2920. PLA. r* P6 M/ R4 D' m8 X6 i! f9 r/ K
  2921. STA <Data_L
    0 t, s5 ?) g7 q( J$ X5 R- q
  2922. .ENDIF
    7 [( S( K0 ]# o$ |* n7 ?. {
  2923. PLA
    3 G1 l" F6 X3 l' k9 b
  2924. TAY
    / a/ ^# G: K( |2 S( s3 Z
  2925. PLA
    / V! I, e1 E: Q" d3 d' `
  2926. TAX0 M7 g6 M: a5 ~' A% A6 z* j
  2927. PLA
    0 f. j& i! W1 l4 C
  2928. RTI5 x7 l) d  p" v+ \# w3 x
  2929. ) Z7 g, P9 u1 p8 R  ]8 p
  2930. .ORG $FFFA
    ; p9 F& E( E- Z$ r% v$ [
  2931. .WORD NmiProgram
    & P( i) @! f8 P5 O6 ^$ ?/ h3 w! r: [
  2932. .WORD ResetProgram- p* @! @" h* y( r+ T" c
  2933. .WORD IrqProgram
    ; v7 }+ B- G1 D" C2 ^# [5 g

  2934. ! `5 w2 J  Q9 L5 u/ @
  2935. .BANK RESET_BANK & BANK_DATA_MASK7 G4 f; g" t  R1 {6 T* k
  2936. .IF SOUND_BAR_SHOW_ENABLE
    0 u: a- k5 A  y9 `4 g

  2937. 3 T" d" M0 s9 f+ I" U- f( H2 c2 E; S
  2938. .ORG $FE00
    9 p: U5 k4 c8 u8 n* c5 v* N
  2939. PHA/ Q8 N* l6 @9 l8 X: Y
  2940. STY $07BA$ h$ N+ D0 {. v5 ~% a
  2941. LDA #$8D7 J/ D% v9 E% o6 _" h! [& S
  2942. STA $07BC
    * L) k2 G) g1 O2 _
  2943. TYA
    ! h0 f% a3 Q, C/ x# K! \
  2944. CLC( k& Y" N7 v0 q+ J* C0 V! k! ?
  2945. ADC #LOW(Sound_Bar)/ Y7 p2 X5 A) s+ X' X0 r9 F* f; ^
  2946. STA $07BD& S4 A* c5 ?4 T. G0 u" ^
  2947. LDA #HIGH(Sound_Bar)& ]/ R6 Q4 L+ Z7 Y) `
  2948. STA $07BE
    $ H# k* \( d8 `" Q* s
  2949. LDA #$60
    5 l8 @" X  ^, C2 q
  2950. STA $07BF
    * u  [! P3 ?3 u. _
  2951. PLA! t) [1 }7 a7 u5 D* v/ d* \2 f
  2952. RTS% O7 c! p9 U$ ~5 }% v
  2953. 1 _8 I4 D( B- |1 w) k4 s' A% v
  2954. .ORG $FE20
    2 m+ ]- L# l. C4 m6 g2 G
  2955. STA $07BA* P$ G* T) i5 ~! z9 m4 p# }1 D
  2956. CLC3 V: K  _& _4 y8 P
  2957. ADC #LOW(Sound_Bar)
    " I+ j( W2 p2 Q. ?; e) s# c
  2958. STA $07BD
    ! w4 p# a2 x5 Y5 b9 M6 @
  2959. LDA #$8D" B" p& @: p3 A; y5 |4 n
  2960. STA $07BC% N* r0 ^) @6 ~* t: x. n0 e
  2961. LDA #HIGH(Sound_Bar)
    ( v# L3 {; y! U# q8 Q
  2962. STA $07BE, U* p2 E+ l' _1 Z8 i. Y/ g7 r
  2963. LDA #$60
    : ]2 I: w% N3 h8 Z
  2964. STA $07BF( p' h* T! T4 g5 I
  2965. RTS% m& F2 F( a- n8 I1 w! a

  2966. ! E7 `3 E9 Q' n& m' {0 a/ U; K
  2967. .ORG $FE40
    ( K+ S: |; }9 F0 @/ [" |
  2968. PHA" m9 ~" m7 t% k& V& R
  2969. STY $07F1) }" G/ x. j0 A& k+ T( K
  2970. LDA #$8D
      P" F6 B$ }) u
  2971. STA $07F37 R  C  w, O2 v  E
  2972. TYA
    ! {! E% _+ }5 T
  2973. CLC
    . O3 z( ?! r! H6 X1 y# E2 I' p3 c
  2974. ADC #LOW(Sound_Bar), R; m8 K) I+ B& r$ T
  2975. STA $07F4
    3 `% D7 N% M( R: Y+ Z5 S
  2976. LDA #HIGH(Sound_Bar)" [8 s0 M# t3 n4 D' P1 i
  2977. STA $07F5
    - d& m  ~1 e1 a, O& _
  2978. LDA #$60
    + s. S; [. V( c( X9 O: C! e
  2979. STA $07F6  N& `$ D' f% c
  2980. PLA( c( N% ^1 E: S( j7 Q% `
  2981. RTS
    ) U" y! M* Y: |9 W1 O/ Q

  2982. & a& {" Y4 ]. M( Z# b' s
  2983. .ORG $FE60
    / ?- ?5 e# l$ k+ O+ X+ i9 m" z
  2984. STA $07F1
    5 _) d' f& T! B- k2 j" h9 K7 f3 t
  2985. CLC- `( }- u1 I& {9 t
  2986. ADC #LOW(Sound_Bar)+ K0 u/ ~/ |& w) A  ?) f
  2987. STA $07F4! m2 x* {2 X7 Q1 u
  2988. LDA #$8D6 S3 ~- C) x& e+ O9 Z# I
  2989. STA $07F33 d5 I. X5 E2 {" g6 ?- J* |
  2990. LDA #HIGH(Sound_Bar)/ j7 V+ I0 l7 n6 e
  2991. STA $07F5
    6 n) l4 Y/ y4 R# `3 d
  2992. LDA #$60; m8 b( ?; \0 L8 R: ^$ ^1 f
  2993. STA $07F6
    - u! m' W7 X/ p4 f# O, w2 b
  2994. RTS
    & ~/ v1 h" i) i. p) u& U' j/ @2 Q

  2995. ! I( G2 U# I$ R- [0 M
  2996. .ORG $FF40* d9 W& V0 E) D9 m1 m. W+ [. `
  2997. STA $4000
    5 w6 d7 |/ H' d3 Q$ w3 g
  2998. STA Sound_Bar + $002 H: n: E' F$ t# W
  2999. RTS
    : @* p! Z( {. r+ U2 {
  3000. & {8 t6 q4 s* s7 ~0 I
  3001. .ORG $FF487 ^! w* G1 A* Z2 l5 [; y* z
  3002. STA $4004. e$ N( Z/ R- Z# g6 W# v# j
  3003. STA Sound_Bar + $041 x1 O& f+ m* p, R+ @
  3004. RTS; _5 H/ I: i8 q9 j
  3005. 0 ?  }3 b4 X: t9 z( P; D
  3006. .ORG $FF50& Z/ C0 d% L; L9 J1 Y* q
  3007. STA $4008, L  t5 @" k& r0 \
  3008. STA Sound_Bar + $08
    9 n5 C+ c# z1 x3 k! |3 F! w
  3009. RTS
    / O0 W( z2 n# K
  3010. - k" Z5 v& o' g# `* N
  3011. .ORG $FF58
    4 T' O  d6 k$ r$ W9 Q6 \: Z- b
  3012. STA $400C* ~# p! }' L# Y% ]$ A5 g! H
  3013. STA Sound_Bar + $0C
    4 M$ Z6 E: x# _. h3 L4 r
  3014. RTS0 l0 d% N9 _0 s; J, A& ?; k

  3015. , Q/ U% s1 Y8 Z" r0 p. p
  3016. .ORG $FF601 ]' x# J, t8 d# m0 s* n
  3017. STX $4000% q# D$ Y5 C0 {0 H% K; n' P: R
  3018. STX Sound_Bar + $00
    4 R8 y6 v# }$ D, s- t
  3019. RTS
    6 V/ s- e8 _7 ]4 y) N% k; A" ?

  3020. 6 V* C; [! J# I/ z3 A1 b6 y' a, R
  3021. .ORG $FF68
    . f3 U9 w3 b! G4 ?. `7 o1 L
  3022. STX $4004
    % \9 C, U+ R$ H5 n% D) p
  3023. STX Sound_Bar + $04; w* B! N- u: ^+ z
  3024. RTS+ n& t1 n+ _! k1 i1 {
  3025. + [; E6 N8 m1 `1 l/ k8 s# m& I8 w3 u
  3026. .ORG $FF709 y3 u- n+ x% x5 y+ T' b% ~
  3027. STX $4008% C4 j1 s. u& K7 i! `2 ?2 r7 u
  3028. STX Sound_Bar + $08$ o2 t( q  ~* H8 X( c
  3029. RTS4 f1 ?  T+ ]9 c4 l# s
  3030. ; K' g( @7 q  r# d: j
  3031. .ORG $FF78
    ! r+ }7 \7 t# y; F
  3032. STX $400C  A4 U3 |* Q* ]3 F- f
  3033. STX Sound_Bar + $0C1 g: X# N! d  l- w8 U6 X4 P
  3034. RTS: j! ?& h0 z( V& g$ I( W- o

  3035. 7 m/ [( i. B4 A9 o
  3036. .ORG $FF80
    ; T8 G( }: Z/ |- A6 g( Z- F; m
  3037. STY $4000
    8 [$ ?5 v3 @' Q' c# p
  3038. STY Sound_Bar + $00
    & l4 k" g; U9 a5 t5 Z# U# u
  3039. RTS) Q3 ~/ h/ J7 ]* G0 t+ u& F

  3040. . d: k7 F; _! x7 M
  3041. .ORG $FF88
    * i9 C" \, t& W, l" q
  3042. STY $4004; G- A- p' w2 j5 Z
  3043. STY Sound_Bar + $04# [" ~, H5 f6 q: h/ h) i6 ~7 ^
  3044. RTS
    ' l1 }  u) J6 N% _# j! q* n5 G
  3045. + l! o. w; l* `3 f  n
  3046. .ORG $FF90) g" s% q7 U7 C5 u. s% D; L7 e
  3047. STY $40088 Q! y; L0 I7 m  P5 m
  3048. STY Sound_Bar + $08
    9 u) w& ]4 d. P! h8 s$ J( j
  3049. RTS0 [6 K' d. V4 Y) p- l: B
  3050. " p  J! K" U/ `2 i% T2 E* h# p
  3051. .ORG $FF98
    % s3 n- B6 k' W& J( d
  3052. STY $400C
    ) F: y# b: O+ ]! U. ~) t. R
  3053. STY Sound_Bar + $0C* ?# B/ q! q  ^4 ^1 o1 W
  3054. RTS
    7 p$ D% @' G9 V0 u
  3055. 2 m$ T! `; |' F* H
  3056. .ORG $FFA0
    0 B$ ]. O5 ~& Y) h. H! G0 L# [
  3057. STA $4000,X
    1 Q+ n7 k: Q, a: b
  3058. STA Sound_Bar + $00,X
    $ y: t4 x& i* z) T) j  {
  3059. RTS
    ' @/ f! F  x$ l* Z+ ^9 C; z% D
  3060. 6 J/ Z, h% j! p7 y  G
  3061. .ORG $FFA83 z4 \2 p  Q& a
  3062. STA $4000,Y
    9 N/ |! A: S; u6 {# ^3 N
  3063. STA Sound_Bar + $00,Y; K" z5 j) D' {+ o4 P2 S! H1 S9 x& V
  3064. RTS
    ; m4 W4 C2 q+ `: L& f( i2 u

  3065. & U2 |- ~- {# G6 W2 j5 h
  3066. .ORG $FFB0& N! O" g" ]4 s% c# z% x  D2 i
  3067. STA $4004,X
      l3 l4 ]: q3 @8 ?( o
  3068. STA Sound_Bar + $04,X
    1 |; _% X8 A3 W9 U  R
  3069. RTS& I. v! B- D$ A

  3070. 2 _/ R% F; w8 q7 H: h# H$ [! z
  3071. .ORG $FFB8' t, G, q1 h$ V! D  l( k
  3072. STA $4004,Y+ f+ Q2 h$ S, m: z8 {. j5 W
  3073. STA Sound_Bar + $04,Y/ k; }: [4 o3 j
  3074. RTS
    7 R3 c$ o6 O( P1 x
  3075. ! _9 a% a% z9 l* r1 v/ V3 \# [
  3076. .ORG $FFC0
    8 R" o5 f+ }9 g; O( u
  3077. STA $4008,X
    / N6 b* r3 ?4 r* {
  3078. STA Sound_Bar + $08,X
    0 v' Y2 v8 p" B* n$ J
  3079. RTS% Q: w3 x! @7 t

  3080. 8 q& W/ C0 z- i; `
  3081. .ORG $FFC8
    $ X' a& ^3 O5 X( X# `
  3082. STA $4008,Y
    % Q7 H. i% f& N3 |3 Z. t
  3083. STA Sound_Bar + $08,Y
    - B5 x+ `2 h, Z/ y4 I& j8 S6 d
  3084. RTS
    : {0 r0 z$ k% B# L. s, r" F

  3085. $ N; Y# H7 V' A- V) m
  3086. .ORG $FFD00 ^& S7 c- [5 b3 Y, e, _
  3087. STA $400C,X
    " L% \- J6 Z4 [, o' q1 e
  3088. STA Sound_Bar + $0C,X, n& J, Y5 M# v* e  _
  3089. RTS
    + Q6 ^/ T! O) e. |6 E
  3090. ' ?& |  T' c, `1 \  l
  3091. .ORG $FFD8: W, S: i4 |6 E% l
  3092. STA $400C,Y. s. I7 |- F) X3 z9 h, A
  3093. STA Sound_Bar + $0C,Y
    3 h  y8 J7 b- \4 a
  3094. RTS) h5 O8 A, c4 l4 n5 k) x
  3095. # B) j: r0 T0 X" h
  3096. .ENDIF
    $ Y" J1 d' F) q
复制代码
( F. v0 `( D( c7 M$ }; }/ z
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3176 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 06:49 , Processed in 1.321289 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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