设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 5 w. U) m5 E$ H7 _  B  W" j
5 H3 v0 X  ]1 N& f# L; ^  a0 w' C' a
[FC][音乐12 IN 1]
& i* s+ N- |+ `4 R4 i0 `' Q时间: 2023.07.23# P/ u2 a+ e0 r) a# y- \% Z3 b
作者: FlameCyclone
  [4 c+ K/ q% |% m, y) o
0 V- @9 V5 U: N% K1 G收录音乐内容:- o5 H- u; Q. U9 ?# j/ @
1.Raf世界) i, S, j/ l4 e
2.最终任务% t2 O& g' j- {+ n+ D
3.赤影战士
6 m2 ]  ^0 n0 a' U' v# s# a6 }4.双截龙
8 ^2 {& J7 c7 b! C4 P0 A0 n5.双截龙2& x# U+ c5 R( v* w. x7 b) K0 t- Y
6.双截龙3
1 a$ e" Z4 \7 c( }* D$ ~7.洛克人6 l( O9 [0 \/ O1 f3 d
8.洛克人2
5 S6 p* X; _- X; @! i; f- f9.洛克人3
( i: [, t. k8 _- g2 Q1 k10.洛克人4
0 L$ }7 a# d' ]8 k  P11.洛克人53 g1 Y7 V  M2 S
12.洛克人6
2 }: ~6 W6 ~+ C1 Z3 M) }! c; D4 p1 c7 [
操作:
+ h# N+ a% _8 m  t) L7 W( x, j上键:         上一个专辑
; F! _/ a: H6 ]0 v, P7 B下键:         下一个专辑/ V; x5 y8 N' Z6 k) f( D( N
左键:         上一曲
6 u: a' F1 J3 h  G0 m7 g右键:         下一曲
8 G" `: N2 C6 K6 P- h) iB/A键:        前10曲/后10曲5 r1 j3 X% k+ I4 l
选择键:       下一页- [7 m0 z* h+ r
开始键:       停止/播放9 T* \& A; ~! B9 C; X+ o' n

1 c( H9 a6 B' R& \http://flamecyclone.ysepan.com/+ K; [$ S2 \7 r0 L! `; K
8 _  w: I  [1 o  o" n7 F3 M, E- H0 w

4 V$ }+ m8 d1 I, L& L1 A2 [. }+ Q7 c6 _3 J* Q0 b
- D* i8 V+ D& [7 I7 M/ F8 N" K
  1. ;[FC音乐][播放器模板]
    + `* j2 E" E  V* Z% u2 G7 H
  2. ;FlameCyclone 20230710/ n( M9 ]  P: n' ~$ p) n3 ?% P- ^

  3. # o, L4 Y9 u8 {$ V: U/ y/ g
  4. ;文件头; S+ U3 }8 C( P$ d8 D8 W) p
  5. ;======================================================================1 x/ B1 b1 Z$ R+ b# s2 {3 [7 I4 v
  6. .INESPRG 16                                             ;16KB PRG 数量! k0 j5 r: E1 l4 J6 t  k0 i6 P; N& }
  7. .INESCHR 1                                               ;8KB CHR 数量
    6 h4 x/ y$ n- L3 l9 c
  8. .INESMAP 4                                                   ;mapper 4
    2 f- S' r( W( w. M: A2 Z6 G3 j1 Q5 P
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    7 r" C" @0 F! w
  10. 8 S1 |  X0 X! X0 F
  11. ;==================================================
    $ u* A+ V8 [+ j4 a" a% ]4 B# {
  12. SOUND_BAR_SHOW_ENABLE       = 1
      H: X2 o- C! o
  13. ;==================================================
    + F8 G! D/ J/ T
  14. BANK_DATA_MASK              = $1F& s7 G: x7 [4 I) L0 W% H+ }
  15. CHR_RAM_ENABLE              = 0# i5 v$ E$ w* C
  16. IRQ_SCANLINE                = 136
    7 s- D4 z, |6 D; W$ g8 |2 h
  17. ;==================================================6 L% s5 T, @7 W4 J8 }# b* p
  18. SOUND_DATA_BANK_00          = $001 Z$ y5 w1 ^) x3 H
  19. SOUND_DATA_BANK_01          = $01  p  o- W' N* H! e9 r. i
  20. SOUND_DATA_BANK_02          = $02
    % r7 W2 R# L3 p% z4 ]4 R
  21. SOUND_DATA_BANK_03          = $03
    3 \: X1 u% f, p; p! T
  22. SOUND_DATA_BANK_04          = $04
    9 j* Q1 L, m6 O" g
  23. SOUND_DATA_BANK_05          = $05  E! Q3 X, c  |. S9 `2 `
  24. SOUND_DATA_BANK_06          = $06) E3 s; k3 s  b) k2 p8 l. y% T
  25. SOUND_DATA_BANK_07          = $07
    3 s/ y& J) w8 x3 W, \* d* i/ X
  26. SOUND_DATA_BANK_08          = $08  l+ H4 F7 o3 w" B; d4 y$ d
  27. SOUND_DATA_BANK_09          = $09' c4 r# z8 p+ d- j
  28. SOUND_DATA_BANK_0A          = $0A
    . [# X9 N  H) J! ]! e, I
  29. SOUND_DATA_BANK_0B          = $0B: t( B  Z2 Q9 y% }0 W; ]
  30. SOUND_DATA_BANK_0C          = $0C6 l# b  O/ W) Z4 Z- r
  31. SOUND_DATA_BANK_0D          = $0D
    - c) A- b2 f. ?' q: Z$ E
  32. SOUND_DATA_BANK_0E          = $0E
    / H" o" G) E5 ]" K
  33. SOUND_DATA_BANK_0F          = $0F! [1 v- n' l/ U3 G3 T
  34. 3 N7 s5 a3 |: ]
  35. SOUND_DATA_BANK_10          = $10
    6 x7 W# I# {) y, I7 t& M2 k# g9 G  r
  36. SOUND_DATA_BANK_11          = $11
    ! u) {5 c. \8 K8 R" F7 L
  37. SOUND_DATA_BANK_12          = $12
    2 {1 t* G: y. ?+ O4 `& r
  38. SOUND_DATA_BANK_13          = $137 o* K- S) u+ }' e: B8 U, L
  39. SOUND_DATA_BANK_14          = $14+ |9 K; n  r8 ~# b
  40. SOUND_DATA_BANK_15          = $15
    . y' T  \+ e8 q
  41. SOUND_DATA_BANK_16          = $16
    # h2 Z0 g$ t% B5 y/ D' `
  42. SOUND_DATA_BANK_17          = $17; p( g; [! L  I( W
  43. SOUND_DATA_BANK_18          = $18$ `2 A. ?! m0 C4 f. S$ D! }
  44. SOUND_DATA_BANK_19          = $19
    9 a3 ]4 _; y4 Y3 c* U) U+ G, E
  45. SOUND_DATA_BANK_1A          = $1A
    ! `3 C+ p* G" I
  46. SOUND_DATA_BANK_1B          = $1B
    9 }- i# x- u# H- `. Q# ?3 k
  47. SOUND_DATA_BANK_1C          = $1C) p5 ^( v% t5 Y# i" T) L: u
  48. SOUND_DATA_BANK_1D          = $1D
    9 a! _( p; q8 K2 T3 G+ X' d; v

  49. ( f, i0 J6 Q, }6 H) F2 ]" `' e
  50. SOUND_DATA_BANK_C000        = $1E
    ' {6 b$ P; D* s
  51. SOUND_DATA_BANK_E000        = $1F
    + b8 F1 S) [! }- J& Y2 p
  52. ;-------------------------------------------------
    * h! A, k0 K' c8 [1 g1 \4 i
  53. CHR_DATA_BANK               = $201 \7 N0 Y" S! \6 q7 `$ t
  54. CHR_DATA_ADDR               = $A0000 E7 L( ?" {/ {" c. \4 r1 i
  55. ;-------------------------------------------------
    4 M, ^7 t! W" Y0 i" S* D' V
  56. PROGRAM_BANK                = $00) u$ Y% K) N8 s6 ~' H$ b6 Z( c
  57. PROGRAM_ADDR                = $8000# Q: c3 ?$ a$ b3 \
  58. ;-------------------------------------------------; Y4 i! s$ ?! \, X" r. W( J' ~0 q" R
  59. RESET_BANK                  = $1F; y4 R; Q" u$ U3 d6 o7 ^5 o( U# W' p
  60. RESET_ADDR                  = $FD00  d9 l+ V2 M6 n/ M- Q. D: ^1 ]
  61. + ^, z  Y, V7 C) R. u1 r3 D; R/ {+ J
  62. ;==================================================
    ) @4 Z9 @- c$ V# c* c* v
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数
    " \8 H. @& B9 l, M
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引
    & Y% x7 q2 N' W: j, r
  65. PAGE_SIZE           = 5                     ;每页节目数: y4 Y* n/ b, s3 l( U& `: `
  66. 8 g9 n6 U; G! R% f! p1 E
  67. ;==================================================
    + n+ h5 N7 U0 G) }2 I
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    5 k  ?' D7 |- Z. Z; h* \% q
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数7 L9 c6 Y1 ]: I$ C0 ]6 p8 A' C6 t0 ^
  70. .ELSE
    7 X' c8 p( O* K! N) f0 {
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数% ?( H# I- i# W6 {  ~! v) B
  72. .ENDIF
    ( K; K' u& X, m1 _5 x+ P

  73. ) n" r2 u' B7 `$ X  J
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引1 Y( u& `' i. p1 u2 @4 ?# V

  75. / I  ^" {" G6 w
  76. ;==================================================- b  ?6 g2 P1 O8 v1 j. n. i
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置
    0 o8 x- `1 ^6 J  D
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2
    1 [- x" P+ y* a1 o5 Z' w
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;
    " X# |$ A2 H# R/ F. c
  80. ;==================================================7 @. z; Q, S; m. o
  81. Caption_Text_Pos    = $204D ;标题文本位置
    % P. ?( L. l7 K: ~0 |" C
  82. Author_Text_Pos     = $2324 ;作者文本位置
    ; j9 S# i) s8 |! ]* {
  83. Date_Text_Pos       = $236B ;日期文本位置6 e$ H* W5 a( }; j) b) F& f
  84. ;------------------------------  H& E, j& g0 `' s
  85. ;------------------------------# q5 ]( {. M2 y  t2 S% M/ D
  86. .IF SOUND_BAR_SHOW_ENABLE
    * U: g+ y2 j. R4 R' e! j
  87. ; R9 _1 K0 {$ F: u9 Q
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    5 g! F' W7 ~  y/ P' K% t
  89. Play_Time_Pos       = $22B3 ;播放时间位置. a, ^' k" N  \$ k% a
  90. Play_State_Pos      = $22F3 ;播放状态位置
    0 ]4 ]  W, o# N" ^1 \1 U3 [. e

  91. , k  f4 B  I" [* L* I3 G
  92. .ELSE. K6 H3 S2 g: x# K4 n6 j' o

  93. % |5 ~$ S. w2 h! W
  94. Play_Index_Pos      = $226C ;当前曲目位置8 J4 u- i0 M3 g4 o, s
  95. Play_Time_Pos       = $22AC ;播放时间位置
    5 Q# C5 a4 G) V* @  B
  96. Play_State_Pos      = $22EC ;播放状态位置, L! f3 u3 B7 G; a
  97. / C4 t0 n6 [- Y7 a1 \. w0 J
  98. .ENDIF
    , l' ~( ^6 w, P, ^# @
  99. ;------------------------------6 d& F# }9 s  m2 o( l/ }( z3 ]
  100. Track_Name_Pos      = $222B ;曲目文本位置
    9 y" j/ Y, j4 Q9 M  s) o) [
  101. ;Track_Name_Pos      = $00 ;曲目文本位置
    5 I* U, H! c+ A0 ]! a
  102. Sound_Track_Pos     = $2265 ;声道文本位置6 J1 j6 V/ `" ~; ?6 h0 g7 \% D
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    ! M; B1 F/ C* `
  104. ;==================================================
    3 ~0 @9 [! _5 U$ |8 X) j7 }
  105. Scroll_X = $00! \8 G5 p9 C0 d. w- p
  106. Scroll_Y = $00
    / W8 j: R8 g- e, ~
  107. ;==================================================/ S) p8 u2 X; g3 H1 ^. O7 T
  108. Sound_Ram_Addr_1       = $0100
    3 a# W. x2 B3 p( U6 I3 @- k
  109. Sound_Ram_Addr_1_Size  = $80
    : i% o) H1 n0 L3 p$ r) k- B7 u6 L$ G3 _
  110. Sound_Ram_Addr_2       = $0090
    ) o5 Y, x. v' z; j- ?; d2 h& b0 t8 {
  111. Sound_Ram_Addr_2_Size  = $70  W, P" @" B9 Q0 k
  112. Sound_Ram_Addr_3       = $07000 h/ Z  r, H8 g
  113. Sound_Ram_Addr_3_Size  = $00* l: W3 h- S/ q. ~0 r; K
  114. Sound_Ram_Addr_4       = $04003 J: d- k/ p' B% D" v5 y
  115. Sound_Ram_Addr_4_Size  = $006 [! {; K4 X! ^3 H% ]: L
  116. Sound_Ram_Addr_5       = $0500
    7 P' O! A1 o# N: f  P; k+ x1 v5 f* _
  117. Sound_Ram_Addr_5_Size  = $40
    % e; l! O  L* o) U# N4 L8 d; A
  118. " g8 [" A% l* ^7 ]: ^; q
  119. OAM_TEMP_ADDR   = $03009 P' v$ D" m) V
  120. # g% P& |4 i" f
  121. ;==================================================
    1 T% V0 p! C0 S  d, f8 a* I& n! U
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器
    * e, K9 A8 ~9 T; S7 B: I
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器3 R( _/ K, r+ @6 g
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    4 b/ s1 \. k& ~4 a4 ~: }2 z4 ^
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1( R2 \; E/ z- L* X
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    , p( `+ ~2 f" v) a. s
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 4 f2 i* C# ]+ Y- ]( o+ E" }( }( @  l
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加/ z& W2 ]* V# N/ \+ O% c: n
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ! ]" G% z' L7 i1 A
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    ( H5 a, |: O4 @7 i1 Q# t0 ^: M
  131. APU_STATUS              =   $4015   ;声音通道切换' d, B& U2 H- Z- `! Z, A
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通. n$ S+ ]* l  q+ T9 n
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通; D4 c! G+ W) H
  134. ;==================================================
    # T8 |+ P$ h2 l; g4 {
  135. MMC3_BANK_CTRL          =   $80008 R4 F; j& z/ b9 I: |1 v8 Z
  136. MMC3_BANK_DATA          =   $8001
      u* Y  O# e+ A% F3 A. a" I
  137. MMC3_MIRRORING          =   $A0001 a( K: [8 N6 ?) `2 f9 j
  138. MMC3_PRG_RAM_PROTECT    =   $A001
    4 ]: `/ H2 ^2 b
  139. MMC3_IRQ_LATCH          =   $C000, [$ S1 S, u" X9 {
  140. MMC3_IRQ_RELOAD         =   $C001
    : ]0 o5 X3 t. y: o& Q: E/ s+ P
  141. MMC3_IRQ_DISABLE        =   $E000
    * Y7 X/ n- u. A( U6 F$ m1 x1 I
  142. MMC3_IRQ_ENABLE         =   $E0019 K( E( ?$ q+ r1 N% ~
  143. 4 ^3 w9 N+ I% B7 ?
  144. ;==================================================
    - P  Q! \& e% Q/ E2 C
  145. PPU_Addr        = $0200
    : A! [; E4 F8 W% b" l
  146. Palette_Addr    = $02C0
    ' r9 n/ K2 k0 D5 ~* b
  147. Sound_Bar       = PPU_Addr+$E0  M  Y" K! k, b6 H
  148. ;==================================================& p6 H0 Z  `/ s" n" k- i+ S
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D  r, q+ t7 W) Z$ d
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$110 N0 \, v1 I* K! k
  151. PALETTE_UPDATE_MAX      = $2C& L; a+ Q9 ]- l; U* C
  152. PALETTE_UPDATE_MIN      = $21, y1 b0 s" V, ~- k# u0 k
  153. PALETTE_UPDATE_INTERVAL = 60, W. i7 R( F( W% I  d8 w7 d+ ]
  154. ;==================================================, A! K: k  ?; w- V" P6 M
  155. Sound_Bar_Cnt       = PPU_Addr+$F02 n/ F4 i, k. h  E' r) m
  156. PPU_Cur             = Sound_Bar_Cnt+$02
    8 M7 k) G2 @8 V% J8 [& ^/ l7 o# X, T
  157. PPU_Addr_H          = PPU_Cur+$03
    4 S( P, N. F; y) t7 h2 g
  158. PPU_Addr_L          = PPU_Addr_H+$04
    5 j* [$ M5 k( @+ Z+ H0 d
  159. Screen_Ctrl         = PPU_Addr_L+$01( n) o9 G  C/ L% H
  160. Screen_State        = Screen_Ctrl+$01  H) W- `% j; k, @
  161. ;==================================================/ T* B1 O5 ]& M3 `
  162. Use_Ram_Begin       = $50. `) L; S& u6 V- Y
  163. ;==================================================
    6 t. ?5 ^) q1 C
  164. JSR_Addr_Op         = Use_Ram_Begin
    9 b6 K/ Z" R" R* f# ?) q1 w9 Z; v
  165. JSR_Addr_L          = JSR_Addr_Op + $01( a" x: V4 f" W
  166. JSR_Addr_H          = JSR_Addr_L + $01
    $ k  Z1 c8 [4 Z) ?! w% a
  167. JSR_Addr_Rts        = JSR_Addr_H + $01. r" r, m/ V  S1 @  G
  168. Data_L              = JSR_Addr_Rts + $01
    ( O" Q& L/ ?0 J4 i; w& e$ _
  169. Data_H              = Data_L + $01
    3 X7 \* I. s% _* V, n9 r
  170. Data_Cnt            = Data_H + $01, W$ Z7 ]' G2 n" h
  171. Data_Buf            = Data_Cnt + $01: m; ]" A( r( u9 T
  172. Nmi_Time_Count      = Data_Buf + $012 P; R# X# L0 y" [$ p
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01& |) l) [5 r/ F7 v
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    6 b% @; A& K8 M: R# C

  175. , R8 E* d+ F2 ?, K! @/ y; h' D
  176. ;调色板刷新标志( W! R* c7 ~  ?- \) @$ a/ K0 C
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01
    3 S) e* J8 g( E
  178. * f$ \# }5 _2 r* B2 \" p& v
  179. ;当前帧文本写入禁用标志
      t! z$ ^: z1 f* e% z; V/ Z
  180. Text_Disable_Flag   = Palette_Update_Flag + $017 Y% k$ q' t% h% _
  181. ' h! Q4 z/ }5 b, b* e
  182. ;==================================================
    ' n. w8 [" V# }$ L( }" L2 P
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动
    ( A9 a7 `& s! |+ J' \
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条' U9 x9 [/ P8 d. O5 w
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间
      [+ {! a9 r8 P
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    # S8 [# b- h! a7 c. N! {
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间
    % U- B- ~. [0 }/ u0 Y3 j) |2 S
  188. ;==================================================
    ) F5 j8 k' s# u$ e3 @
  189. Key_Keep            = Text_Disable_Flag + 1
    ) \6 k" N/ q- X# ^* i) m
  190. Key_Once            = Key_Keep + $01
    ; V0 R( @/ A# B" o8 I2 ]3 [
  191. Key_Kemp            = Key_Once + $01
    : ^/ T) c2 x+ x2 b
  192. Key_Temp            = Key_Kemp + $01
    ; T* l' I- ^1 k6 R1 [$ L
  193. Key_Getv            = Key_Temp + $01
    3 o4 a- U  y3 Q8 R7 w' n3 ]
  194. ;==================================================7 v) Y4 s: O( [- ~# M
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    * L. A* m) t3 p9 h) B
  196. Music_Item_Last     = Music_Item_Cur + $01
    ' T' R8 h4 j2 c# `3 H* P& j# j
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    + r, \# l7 ?' R' a
  198. Music_Cur           = Music_Total + $01  ;当前曲目( D( n" l9 m( u& m) o8 E0 A% }
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目
    * b- A6 F9 n, u6 u
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    * H+ t" Q' c% ~1 _8 H0 y
  201. ;==================================================
    ( G/ o4 E+ b: ~8 s7 J) F
  202. HEX_Data            = Music_Stop_State + $01* @8 X* y8 d- C; q
  203. DEC_H               = HEX_Data + $01% K0 e' t& R- j" Q- l2 r
  204. DEC_T               = DEC_H + $01
    ) e6 y. b. e: E" l" U  J
  205. DEC_L               = DEC_T + $01
    1 L2 @4 H! t1 t' W
  206. ;==================================================* P1 P! y9 P/ f" _+ @% }
  207. Time_S              = DEC_L + $01' M1 [' U+ _" e- E4 T9 O; O) g
  208. Time_M              = Time_S + $01
    1 j3 \/ @# U0 |# H# s7 |! g1 P
  209. Time_H              = Time_M + $02
    0 n8 o, T! u. {3 w+ O
  210. Time_Cnt            = Time_H + $03+ Z' Q* h! C" {/ Y7 j: j7 b1 t
  211. ) R/ H7 O9 s% G! t- E! V
  212. ;==================================================9 k! U& k1 e, K) W" E7 y+ w
  213. Music_Bank_8000     = Time_Cnt + 1
    7 d$ u) g3 c$ }
  214. Music_Bank_A000     = Music_Bank_8000 + 1: z% E  G. r* w" M' G3 ~, Z% }9 [
  215. ;==================================================
    4 I* _4 M% W& c6 h4 ^
  216. Scroll_H            = Music_Bank_A000 + 1
    8 [, g! y- n% }4 S9 `9 E, b
  217. Scroll_V            = Scroll_H + 1; h4 u6 C- S% p
  218. IRQ_Process_Index   = Scroll_V + 1# v' p$ ^" G4 i
  219. ;--------------------------------------------------
    / e) E* r8 u2 S4 J2 s
  220. Page_Cur            = IRQ_Process_Index + $01
    + D* x1 |% _# ^
  221. Page_Cur_Index      = Page_Cur + $01+ J  I  E* k' `9 d# y( J. ~
  222. Page_Cur_Cnt        = Page_Cur_Index + $01. n7 h5 d) b, }/ l8 w, c
  223. Page_Last           = Page_Cur_Cnt + $01
    7 s" j3 W1 I6 `5 Q5 U( m* h6 `
  224. Page_Last_Index     = Page_Last + $01
    ' \7 }  w! f/ f& f8 D7 V
  225. Page_Last_Cnt       = Page_Last_Index + $016 C* d( y* l" t" h: x$ t5 k; v$ @# H
  226. Use_Ram_End         = Page_Last_Cnt + $01! c0 u+ y4 A0 q  |( }) Y/ s
  227. ;======================================================================$ z0 Q. ~# ~% Y8 B4 r) K5 ]$ u
  228. ;音乐数据块
    $ W/ \5 d! {1 C

  229. 0 l( O+ g3 H4 c# C
  230. .IF SOUND_BAR_SHOW_ENABLE/ ^: O5 b( U$ m* u2 n. Y
  231. % h* }$ f1 I2 w* ^8 r" ^
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK7 q7 J! ?" w$ s0 H# E
  233. .ORG $90002 r( {/ T$ W& t/ m% z
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    7 i! }% l8 Q& w* m

  235. & F" m4 W7 X& [" [5 v7 @
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    $ C$ ^) k4 r0 y4 L/ u
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    " Q5 J+ O, d5 A& L4 H

  238. ) B" ^# W+ m! o2 P
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK5 a7 [9 ]. R8 ]9 g: G. i' c% Z: H$ A
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    6 Z, r" e3 i, q
  241. 6 N6 V# W4 k% E( D  T% l, s
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    + G1 T$ X0 o! R6 I* g2 ^" t
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    * p' W1 t. A  p" b
  244. 7 Z& Y. s' ^; F# t
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK4 U# I) ^; A- E3 p" ]. O9 t: z
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    * ^8 A7 A7 D6 Z
  247. , g3 ^3 z% @. [/ X' n
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK0 Y: o% g: V; M  n# p
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank": q. U  z" j0 {& O9 F

  250. 9 F4 c/ r- c3 v/ s
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    ! J! J9 _# |$ b' b# l
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    ! P5 _) h, o0 }) G1 b) s1 B

  253. 2 @0 j! G8 y* E8 c$ K0 ?
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    / e& e) J, Q3 H, r( P" Y$ A
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"" x+ T5 F7 Y$ D# J
  256. 3 [8 J5 U  f" N% N' _) U
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK/ r2 U  Y  u9 N# {% h8 @& M8 K* k
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"! _# Z/ ]  `, V: L. v3 q% G* ?
  259. , G' r" W% }  f" g
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    . B7 m! U2 i5 \  I( j/ d
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank", r! W$ n1 f1 t3 |% p
  262. 9 \  p. |$ [9 p
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK8 q* c0 V2 h' L# D! Y7 X
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    0 f/ Q1 e! z( ?! a% c

  265. % p5 n: ?& s3 ~2 [  N+ z" O8 Q
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    1 }2 T3 }  c: j; v  g
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    & Y, S1 s. S' e5 ^- h) q9 J
  268. 9 p. U4 ^" r/ W( N# p: f. e6 L/ H
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    % i3 ~) y4 a0 e
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    & \4 R/ t6 N9 d" Y  X2 K

  271. 1 U$ Y) k2 m4 Z$ {9 J
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK' z7 G: y% @+ G: l. d
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"8 M* J: B1 _/ s- u+ Q9 j- [
  274. : z( g- ?  `2 j( ?! O/ F+ ~
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK! K; h* E+ B4 l; H
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    ; x+ Y: I+ w8 p9 o! N! P) {3 {
  277. 9 f: J7 k; w2 G
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    0 x  t, z% t: X- i
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    : Z9 O, r6 }& ?* @+ o

  280. 2 ?: k* G. d. y# [3 H
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK3 ~. E6 T6 Z% J+ u4 e6 g
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"2 {  O. y9 F* ~8 V- x

  283. - I$ T# R" c6 t
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    : W+ i0 W1 P4 F4 v. T
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"7 F2 H! R0 D; a9 o3 {' b5 o3 Q3 N9 S

  286. - ~. I+ o4 z- }; g6 Z0 f# N* `
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    & n0 k! |" \1 o3 o1 \
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"# H: d+ g( O! }7 @  o! K
  289. 7 {" c6 b3 Q8 H
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK; D- H+ ?4 R# r" T5 V
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
    ) Z: H! a! q$ [, P  z9 k! F' `
  292. ; ]) y* k/ j1 b$ Q
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK6 J2 `$ ?% Y, x* V  l
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"" m0 @3 \/ H) P7 Q% N8 A# c' W4 A

  295. 2 U0 E# B6 l3 N
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    / Z2 R7 L# A, v( A- r
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"
    0 r6 j& X: Q* W# q

  298. 7 R2 g5 p# q3 [8 [0 r4 C5 U
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK8 v2 [' k9 H; I3 Y3 {' D: u
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"
    6 i2 \6 d8 L9 D5 c$ I  e0 r9 M
  301.   ~7 y( _7 D8 K) Z& n1 \
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK  t& F9 s6 j$ \( r5 W! ?; m& C
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"/ y2 p' E$ a' w7 o& D+ r7 n( N

  304. ! B4 k2 Z9 F' u
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK! h, _* d4 ~; c& h  D- a" h" G6 Q# }
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    , ]/ l) }) k! d- p
  307.   g$ w; n; ]: W# Z% j0 X2 O  h. x
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK5 X$ W5 W/ q2 }9 x3 U1 d
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"% c. U& N5 a' Q0 ]. P- q" t1 k
  310. 0 D; c) G# |& i  a0 a* Q/ I1 M
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK: g9 B* e/ W2 w. L1 I
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    / @! K/ [' E. l0 b" K

  313. 3 _9 \2 U+ ?! K- L: \$ p' ?! r
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    7 j6 C: ]# m3 U6 T
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    + \. D, c+ V+ l' E7 V
  316. $ w: `% H! W0 q" Q6 N* t
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK" G, G  t# a. a- j
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    , t, i4 k9 v2 }! ?- h0 j$ D4 t: N: e
  319. ! c. c! T# L0 r& w
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK4 v" }; H, M2 G' X& J5 l* D0 `5 p( J
  321. .ORG $D400( V0 f- m/ R% l5 z
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    2 t# b- p- ]( F6 c

  323. % x) d% Y4 K( U* p& l, l$ C) x
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    # n% o" F! g3 x' O" ~# T* T
  325. .ORG $D800+ T; L# z/ A1 W2 V
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"# D( O1 r/ ]& c2 [# f
  327. / a0 [2 \+ x7 B* F

  328. ' y9 s% M' m3 n% X9 Z2 [( g
  329. .ELSE
    * N% y8 N: O7 e- r" r$ ?

  330. ' k8 g: w% Q6 V; c) A$ W7 ~
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    ' _7 B5 c. N8 A6 Y& q4 i( c
  332. .ORG $9000; s) I2 k* v' `( a6 c: x1 F8 q
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"
    5 X" s5 t7 i7 |# E+ I

  334. + \9 n; n# s% d, ]& f! S% [
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    ( q+ H- u+ _7 t: I
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    7 ?: t1 \3 o; M! W; I

  337. 9 n9 I8 v" n4 O  V/ g
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    ( L+ z# e! h3 {) a9 N
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    + f8 k, H6 V# d" J) y

  340.   N4 I5 O8 Q4 C+ p: _9 T
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK# p/ t/ V. B8 {  W2 y- T1 v
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank". t9 _. g$ s7 y% M

  343. 9 x2 A2 u# i5 X9 T$ u; o, y
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
      O/ l" |1 Q' }. Q& U
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank". u! F& [; S5 ^3 l/ n

  346. - N2 S$ a8 s4 c9 ?; D$ c/ m
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    ; f" s/ I  B+ B4 _; ]+ B( K* C! \$ y
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"& x$ B$ Z: q8 X' j; e$ L6 k- Q

  349. . c8 G, k0 {- V9 }
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK3 z/ S* H5 v% Q3 \' t* W
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    " `! b, x) V/ o- i4 `: A7 F( @5 ]

  352. + @" n2 I7 i/ k) y7 E
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    0 P8 ?* z4 R) W9 _' a8 L
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"! L4 D2 L9 P) v
  355. 5 M& ?9 {% j6 L, n" K
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK0 B4 v# z+ `' z( h" y
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    ! S/ C3 i! a  f. o
  358. . U6 `; k/ r0 h/ A: G
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    . y+ w. g7 j) w' A# X) U# v
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"" W& u" A/ ]/ }( e1 T

  361. % {6 t' v0 \4 Q3 [4 @4 \3 R; o' e
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK  c1 v5 t# P0 k9 X9 A4 c
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"! g: X  V$ f; v# u0 w5 F; Y  M

  364. 9 C8 S* s9 H% S3 a# H3 d7 b5 a
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK- b. \8 V8 S5 ^6 U0 }' h5 Q) s
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    # w: }& l! [& U, j" \
  367. 5 B1 {6 ^4 V) m4 X9 a# c# U
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK1 q5 A  c  S! K7 K6 w& z
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"2 H' {3 a& j: J8 Y! Y! Y0 ?4 m* w1 f

  370. # G$ L- [, h; C" s) ~
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK' y3 K* [& U& e7 x3 ]7 B% V
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"3 E1 e& @; ^9 ]0 h

  373. 5 m9 d4 ]* t5 p8 K$ |
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    ; k  v% m1 Y0 r0 d  C
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"8 y; U) [  n, `% p0 n* x

  376. 5 y% J1 s2 Q' |$ B( N
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
      f1 U# L1 N% G/ d2 G
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    0 m% [7 \) C0 H# P! D! l1 Y# z

  379. 5 h' E) F6 z" {! r3 a) [
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK8 X5 v* j0 @" p) G+ _" o* O
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank": P& |5 S1 b+ l

  382. ! ~5 k2 M4 {0 e* f0 ]9 b
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    * j1 [" i( Y6 Y, k) Z
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    6 z, A% o% G# Q# R; n
  385. 3 X: k2 H. ]* C
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK5 e  @2 m0 B5 }3 G
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    & v7 O9 L8 g8 Z9 O) G; [9 h& R

  388. $ g# _& \! m& {! ~! m; i
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    5 G! w0 t6 n% k% _
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
    / I; ~. b& {4 ^* {' K( u) J0 l

  391. ( u+ L: J5 a3 l: p: i( j+ a: J
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK) B) P+ X5 O* L" G6 N
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    % J. r( X, r0 d! ?' X6 m. t* m/ v! F

  394. , e% u: `, F5 p& Q
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK3 ~' z& q8 n2 s/ N
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"* B2 Y. n" o" J' N" c3 A0 {
  397. % J2 T3 k: N4 u$ k1 x# d
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK" g- [; L2 q* ^" y, T2 I! U0 f
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"
    + `7 v/ E! r+ @, h2 a" c/ o

  400. 9 B, b3 N, w4 x( f
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    7 E7 G/ M7 |: |
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    0 i3 I4 T) S9 z; L8 R' x

  403. - q: [$ l5 S% _. E- C% [
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK+ w6 q7 W! u4 m6 P* l; N
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"
    7 Q: V/ E0 Y& c1 L% I, Z5 n

  406. ; X3 D" @) [- ]% @5 c% W: ]
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    ' O5 o( K# V5 b3 r2 R+ H2 _* ?: e
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"7 L# z7 b0 H. `/ G
  409. ' Z- @, f4 z2 L7 \/ p
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK8 G0 ?! U2 E0 X4 C
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    $ S* c( B* S9 U0 S$ Y( o' W1 ~
  412. 4 V2 g; N( N) S* _
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    9 L( k* }$ @* X
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"# G3 a0 t4 ]3 V# E3 H' L  j0 X3 G
  415. : x) A- Z& d6 P& ^
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ) t2 p) m2 _" L$ @' ~
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    1 k/ x: ~# J. H9 H8 g
  418. 4 O4 N* Y3 S+ D) w7 w
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    1 C" b- e% \& P0 O  T
  420. .ORG $D400
    # J2 ^& i/ x: v  v' k
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"( [1 ^! m7 W: }

  422. ( u4 s8 T6 |  z0 x9 z
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK) r5 q/ K5 M! Z3 p, i& X
  424. .ORG $D800" C) {1 J$ q: H5 o- Q5 P' B. v1 o
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"  }9 B+ Z" K" h. g
  426. 5 g, R6 R! [) R% ]
  427. .ENDIF; s. Q" p% `, b" I9 b

  428. : y8 U9 ~$ t, t* `* g
  429. ;CHR图形数据7 O4 A2 @# R0 g5 O6 B* H
  430. ;======================================================================
    6 a  l) z5 |% w  l  ?6 f  c
  431. .BANK CHR_DATA_BANK
    7 T4 b0 m7 W* }
  432. .INCBIN "chr_bank/chr_data.chr"5 t' y6 g. i: O  x3 Y* m
  433. 3 m- l3 o! [2 C3 f% [
  434. ;======================================================================
    . G; r. k) A  K% Q1 ]0 Z
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK  [7 m* }& Q! ]5 |$ Y( G4 B
  436. .ORG PROGRAM_ADDR
    2 [$ @: _+ U' l! L$ l
  437. ! H: F+ }6 ?# F* o- l- b
  438. ;==================================================
    ! t. ?% j* \& |
  439. NmiProcess
    % x" E( e: l; ]' b& V1 h) Z) I0 ]9 O
  440. ; y7 b( `9 L. Z) r
  441. ;关闭屏幕控制: k( k% V0 {( a+ P4 q, D" X
  442. LDA #$00' g: w( V2 A1 Q( ?  @  X& }
  443. STA PPU_CTRL" P9 ?+ X4 O6 c
  444. $ G8 a; q, v! Q% Q
  445. ;没播放音乐就不需要触发IRQ9 M3 q3 l$ W# G: ~1 V: Z
  446. LDA <Music_Stop_State8 ^! J+ ~. g. [" V0 j6 j; a4 v
  447. BNE NmiNormal
    : B, o7 ^; P, F+ ^( B
  448. - `0 b/ f$ h3 N0 Z3 ]
  449. ;重置IRQ索引
    ) s9 M) q* Q0 f' L
  450. LDA #$00. [  |2 T- w8 A) S( b
  451. STA <IRQ_Process_Index! U8 ?4 k# F5 U, G4 m+ }5 g

  452. 7 Y3 L3 I4 [4 K; b
  453. ;时间秒数为空则跳过& L) g8 ^4 S$ W8 X, `* j' u
  454. LDA <Time_H
    ! m5 s) V+ f1 ]& g" b' e
  455. ORA <Time_M* @. \! ]7 m2 W' B9 _7 E6 ]9 b
  456. ORA <Time_S2 k! {4 R9 F, ?" {8 b) f* R$ c
  457. BEQ EnableFirstIrq3 w0 Z6 \3 }+ q, l; ]

  458. " Z( p8 u  i( j9 q, H% u' o
  459. INC <Scroll_H6 j* G0 J7 c; |6 {

  460. : B/ y# I' r1 [
  461. EnableFirstIrq , s7 R' g& ~# s2 b5 H4 F
  462. ;80条扫描线后触发IRQ; D4 h) y  u6 `
  463. LDA #IRQ_SCANLINE
    2 d* v& L& q+ x+ s! Q) Z
  464. STA MMC3_IRQ_LATCH
    5 t# i. |) ^+ ?. W$ g* x9 q1 q' k
  465. STA MMC3_IRQ_RELOAD8 D! _. T2 i, _
  466. STA MMC3_IRQ_ENABLE" k1 f5 M; |7 b6 R8 m, y) t
  467. CLI
    , y1 \" _5 t+ S/ a0 O2 U* ?3 i% l
  468. 5 h) [# I( ~/ o) x
  469. NmiNormal
    ) J3 u9 ^: P2 M1 y5 s' G/ {/ a

  470. % b; B  h1 q5 v
  471. ;处理PPU图像/ q3 X- ]9 C7 P4 K: k8 x
  472. JSR PPU_Proc
    5 h; j0 p0 B% V5 H6 e

  473. 6 G4 J0 W$ d0 z8 u$ P8 D3 \
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    9 X& Y$ B' F3 Y5 {! x
  475. LDA PPU_STATUS
    6 |: h3 d$ e- \" Y3 h4 T& w4 B$ w/ E. x
  476. ;LDA #$00
    $ m2 @6 M8 e# @2 S* W0 D- S
  477. ;STA PPU_OAM_ADDR
      |5 r  O3 J  E4 R- x9 ?
  478. LDA #OAM_TEMP_ADDR / $01004 S: s( i& Y1 d" s) F* [
  479. STA OAM_DMA
    $ r1 R* M% O( O2 ~7 N' o
  480. 9 R! j1 ~2 ^% L9 U" P9 s+ B
  481. ;启用NMI中断
    3 P* c7 K& o+ h  a5 i
  482. LDA Screen_Ctrl; r* Q& C1 p( q3 w: S8 u
  483. STA PPU_CTRL! M% o* i4 `# B0 X2 E

  484. , x. r% ~! I# ^
  485. LDA <Text_Disable_Flag& N% a+ t# k; Z# \
  486. AND #TEXT_DISABLE_RAM% M. D0 ^" V) }+ u+ d' ~
  487. BNE Nmi_Sound_Play* n: l, i9 n. M% R: |3 z
  488. $ w  h  [# F' V' k% p# Q0 H
  489. ;处理手柄输入3 ]; ?8 b3 H( Q' C
  490. JSR Key_Proc
    ! [- }+ Q& l6 a. ?4 s. v& N3 `
  491. 2 |  N: s. Y+ T" a5 g& m, B' i
  492. ;切换音乐(手柄触发)6 H# e' _& X- i1 C" Z
  493. LDA <Time_Wait_Cnt
    * n$ t8 U. H5 {# P
  494. BNE Nmi_Cursor_Arrow
    0 ]( \  z0 x+ z9 Y! d$ G7 _6 I
  495. JSR Change_Select_Item
    ! c$ W/ D3 c. N! y3 \. l

  496. 5 i2 w9 z) }% Z
  497. Nmi_Cursor_Arrow
    ) v! C( Q$ J& a1 R9 i2 a) @
  498. 6 Y" \* ]& s0 q9 Q! w$ C
  499. ;处理光标箭头4 K  c; Q) ?; N/ |3 C, [4 Q
  500. JSR Show_Arrow; ^. w  k; \9 }& t
  501.   p- k! K* k' p: e( S
  502. ;更新调色板: D" N( i. B5 r* `5 i& o  x* t
  503. JSR Update_Palette_Data7 |7 O+ J$ t$ P% p- J/ A. x8 b

  504. , O  A! e# |& s+ T  q
  505. ;显示时间(缓冲)
      b% A# l- v; H7 F9 b  u
  506. JSR Time_Show
    " F0 @+ x6 H9 A. \& z; ^$ k& D# @. U

  507. 0 a0 u5 B' ?) D! U, w" f
  508. ;音乐显示(缓冲)# X" z* O6 V' f, n0 k
  509. .IF SOUND_BAR_SHOW_ENABLE
    4 R' E- ^- V- V! I$ B" i
  510. JSR Music_Vision- ?5 A4 T9 Q# ~1 r& U5 \  `0 O$ H* ?* ~0 E
  511. .ENDIF
      F: Q0 g+ G+ Y8 b2 c
  512. & j! {* K( }7 v9 }
  513. Nmi_Sound_Play) v6 O* Q6 K9 Q2 }/ c
  514. ;播放声音* |, c2 R: B. m' ^( d6 {
  515. LDA <Music_Stop_State
    9 y( W% K2 @, x# \  w
  516. BNE Nmi_Time_Wait_Set
    % C) B9 Q2 |4 I: a! ?
  517. JSR Sound_Play_Proc! q# M* W: f5 y
  518. ) z/ K" z" e5 t: C' ?' n
  519. ;播放计时
    , i$ L. h" c2 _' x; s- h
  520. JSR Time_Count1 A0 f  h* B0 D$ J  D5 u3 B, g( U
  521. $ c7 d# d; c( j8 l; v: t+ z: f+ ]
  522. Nmi_Time_Wait_Set
    - g3 m, A" }2 D3 @4 S' X* ?3 L
  523. LDA <Time_Wait_Cnt# ~% i; a+ z2 p+ b  n& B
  524. BEQ NmiNormalProcessEnd
      I1 ~+ O) ~* f0 r# C
  525. DEC <Time_Wait_Cnt7 a' ]8 Z: R6 K% M1 U8 U. X( `
  526. NmiNormalProcessEnd
    1 N2 p7 K1 B+ v7 u6 M3 e4 L( @

  527. 2 ]4 w' ]1 N# T
  528. INC <Nmi_Time_Count
    ) Z; f$ |  _  u9 {3 S

  529. ) Q* {2 e- }1 W8 a: D+ S/ g4 ~% K
  530. RTS: L+ a3 F& k0 ~$ A
  531. 9 D& w" Y' E9 @# t- a7 P' ^
  532. ;==================================================
    & @* C0 l9 s, e% Z4 \1 x* K/ d$ `
  533. Init_MMC3
    2 X! ~; O# z. O/ X" U# _
  534. ;==============================0 _; [9 L! \0 }/ Y& G" a
  535. ;禁用IRQ
    9 O& ~, B2 r9 F5 K8 r
  536. STA MMC3_IRQ_DISABLE
    4 b5 ^; ?% w8 C& l
  537. * P+ L8 v* D/ y/ ~# p
  538. ;水平镜像
    / N9 |# O: h$ S; k7 y2 h! f8 s' J+ O
  539. LDA #$01  R; }! _  j) G+ L; M
  540. STA MMC3_MIRRORING1 L9 h1 q& L5 k0 r# A" z, h% d

  541. * {6 L, w5 f" ?  I2 U8 W; z
  542. ;初始化图形bank
    7 j# W7 W+ ?. u6 Y3 H- a
  543. JSR Init_MMC3_Chr_Bank
    ) N5 K6 k; m% j% s+ P7 K7 I

  544. . D- A( \8 T, a, p# c7 i
  545. RTS
    ' z) ~: l1 q, v* X' _& k. r  W+ K
  546. ;==================================================
    & A% a9 q# z; T* @6 v! c0 L2 c
  547. ProgramBegin;主程序
    . z$ [2 c7 P: e8 w) F
  548. LDA #$00
    , k, J6 \$ j7 r* I
  549. STA PPU_CTRL
    7 b$ O$ ?/ s0 d
  550. LDA #$00, S) d/ X2 _+ G1 }# N: O5 U+ J5 c
  551. STA PPU_STATUS! ?* C# {. G# L5 D" s
  552. STA PPU_MASK7 `2 e+ N% h3 o* e* [# E/ u
  553. STA JOY2_FRAME5 t2 N# T, A0 s' l5 p6 o2 C
  554. - h5 N0 G1 _/ s6 X/ F: ?
  555. STA PPU_SCROLL
    9 h# Q* f/ {: M4 r( s9 H1 R
  556. STA PPU_SCROLL) D" |7 b. J5 ?& T
  557. 1 U' I" Z, b2 u7 a2 s9 P1 k6 A9 @
  558. ;==================================================8 E: h( R5 h- e8 v' `, f
  559. LDX #$FF
    3 h: I0 Y+ s8 u# c, U, d( f
  560. TXS- S+ k8 w* D6 z. [+ `

  561. ; [( |/ C' j: A+ K& c0 s$ R: K
  562. JSR Init_MMC3* {/ @  ]) o# ~0 U- y( R6 f0 M

  563.   D8 I, k) s6 Z# J$ q, w9 O
  564. LDX #$02
    9 `1 k( C: i+ w2 J2 j: W9 v6 D, Z/ C5 i
  565. Check1# F. S3 O3 w  Y& [2 m, ?
  566. BIT PPU_STATUS& D" \6 d7 e5 M7 j$ e+ V- w5 S
  567. BPL Check1
    , z$ u$ T  ?( x4 y0 H
  568. Check2
    ; u9 G5 w# N7 T! k1 [! D3 G
  569. BIT PPU_STATUS& \: w# L% b5 }" ~/ o1 d+ q/ G1 H
  570. BMI Check29 P( n8 `; p8 l1 f  F

  571.   j5 C, t& S/ t/ Q& ^6 ]
  572. LDA #$0F
    6 P. W1 t( M; j# \' L( K) ^
  573. STA APU_STATUS
    9 o( f9 W/ K5 F# u  L. m# o; ?
  574. LDA #$C0/ ~" ]. B( z% }- x1 F9 _+ k
  575. STA JOY2_FRAME
    / z9 A! [  t( ~! ^7 K& i
  576. 8 Y# g/ z$ j9 u' \
  577. LDA PPU_STATUS
    $ i. y. J( D) z: H7 Z' D& m6 i: O: \) u
  578. LDA #$106 R' H  R2 ~7 o
  579. TAX; I- h1 u# F6 L1 q" A
  580. Check3- V% N& ?9 k; C
  581. STA PPU_ADDRESS
    ) B' @3 J. k4 o$ N
  582. STA PPU_ADDRESS& L1 R, U% X$ \0 o4 E+ a0 e
  583. EOR #$00
    ; A1 m+ ^& P& P. b" ?$ e0 ]
  584. DEX* n, j! Q5 j) N& ~7 {3 M5 U' g
  585. BNE Check3
    . f+ N; V( @9 `3 p
  586. ;==============================. F- K6 C4 \9 `) c+ d
  587. ;调色板清空
    6 P; p" p6 j. G4 Z
  588. LDA PPU_STATUS3 ]: Z+ F4 F6 J/ f/ B! K
  589. LDA #$3F
    0 O8 V& \2 Q8 l) {' l2 g8 r
  590. STA PPU_ADDRESS, H% g* G8 k) R2 W, @5 Y
  591. LDA #$00  x0 ]% y! q3 g! H- r# G  O+ ~
  592. STA PPU_ADDRESS) H  V, ]  J) f/ j( ]
  593. LDA #$0F
    1 n& [# H" D! @( O9 n4 I
  594. Palette_Clear9 V3 k5 h) T  E. D% O2 q, I
  595. STA PPU_DATA% D8 G7 M9 [2 k9 ]* X
  596. INX$ W: a' _7 M' ~( R1 `. c8 J4 b
  597. CPX #$206 }7 B. l8 I' I# s
  598. BCC Palette_Clear' x# T6 @' w; a- W3 ^/ T  G) U
  599. LDA #$009 I$ C1 Q# `( _, P. `+ B/ ]
  600. STA APU_STATUS
    ( Y) m0 n! A" \9 J, d
  601. ) O4 X9 p2 Y2 g" l3 l
  602. ;==============================0 _$ F5 B) _. F) M" y1 \
  603. ;RAM初始化
    * E9 d1 \  g! b) P
  604. RAM_Clear_All( p& d9 y* E. ?3 n
  605. LDY #$007 G$ b% W. M. s1 N1 X1 c
  606. LDX #$08
    3 ^6 h: D" V" z% i; a
  607. LDA #$00+ T- H4 e; N, U
  608. STA <$00& Q6 x2 V# Q, H4 ^' N: `' X& J
  609. STA <$01
      I* l. n; Z1 q3 |
  610. RAM_Clear_All_Start- E! f' d$ ]; J9 S
  611. STA [$00],Y  a9 H- t" T+ T+ f- z1 ~
  612. INY+ x: S  Q" y1 Z+ L; `" V
  613. BNE RAM_Clear_All_Start
    : B) ]5 {. |) h
  614. INC <$01( e$ B6 @4 w9 Q* Z6 `- K
  615. DEX
    * J3 P! S# |0 P- l
  616. BNE RAM_Clear_All_Start
    5 x( b0 U1 I. d2 x# c) i$ I
  617. 6 c6 h4 J5 p7 s8 E6 n% ?! e  S, c
  618. JSR VramClear9 [; t! O. L3 d. c9 ]+ h
  619. JSR VramInit
    " M2 O5 c0 P# [2 A. g
  620. JSR OAM_Ram_Init
    4 A5 l+ H% M& k3 Q" \. k( Z
  621. JSR Init_Palette_Addr
    , J9 J1 V3 n/ {
  622. $ v7 j4 {" [* a' r& T+ J" w
  623. LDA #$FF
    % _8 G4 \( Y' p9 w  l
  624. STA Use_Ram_End0 h8 g7 S' J- j
  625. ;==============================
    3 S8 M6 ^4 |( q7 w% u/ t( j
  626. ;初始化背景调色板5 z. l3 Q+ |0 O
  627. JSR Set_Palette_Color
    2 \8 P4 Z! Q$ O/ o
  628. JSR Set_NameTable_Attributes3 |7 ?$ Z  r" ^) `

  629. 7 U" o5 @+ N. e- f
  630. LDA #$00' }2 I- Q1 }. ^. v
  631. STA PPU_OAM_ADDR
    5 D2 y  Z/ n- g) I- b  a/ R4 v# p
  632. LDA #OAM_TEMP_ADDR / $0100
    - K9 Q4 ~/ J3 y
  633. STA OAM_DMA
    ; Z; g/ B4 }8 \) G

  634. 8 L% l5 J+ L; S/ n# T' m! d; j4 _
  635. JSR Sound_Reset_Proc
    9 d3 ~+ d8 @! J5 }1 ?5 D. Z, T
  636. JSR Set_Sound_Total4 R, x/ t  g0 T
  637. - i7 D4 C; e5 p, B9 i
  638. Init_Start_Music9 v3 K& z  o7 Q! m: u- u3 n
  639. LDX #$00, }+ H  Z' [: ~' s  h- [4 S- v) {% S0 l
  640. Init_Start_Music_Write
    $ E9 w0 m8 y1 L# T) M
  641. LDA Sound_Start_Port,X
    9 w4 P8 {' S9 p* K! e# U
  642. STA <Music_Cur,X
    . K+ r2 v2 X: U) z9 z4 J
  643. INX- M5 a! U7 R7 U+ m
  644. CPX #ITEM_MAX_SIZE
    + W/ X+ {; ]- k  W: }" |0 s
  645. BCC Init_Start_Music_Write
      \8 [, S  O7 r- l, Q( W9 I

  646. , k$ ?0 [9 t& w/ V5 b
  647. JSR Show_Music_Text
    $ \; P: E! K# r9 U4 c; A
  648. 4 Z$ O8 A' O1 C, d: Y
  649. .IF SOUND_BAR_SHOW_ENABLE/ c, c/ l0 [5 n6 Z" C7 ^/ N
  650. JSR Sound_Bar_Text_Set
    " ~, c* v$ U6 ^) A
  651. .ENDIF) h% a& F) T, i' {

  652. 0 z- n+ E( `/ {" S/ B& \9 x
  653. .IF Track_Name_Pos0 k- I4 f* J" N1 c& @
  654. JSR Show_Track_Info5 i+ }3 T$ T$ A9 g
  655. .ENDIF
    : z& v$ F* U4 l6 u. i0 {% t6 X
  656. % r/ H" s- p# T- E0 C, m3 M# i
  657. JSR PPU_Proc$ o; ~2 n% z; u1 O

  658. 8 v, O8 Y1 m+ X2 g- t4 u
  659. ;==================================================
    5 S4 X6 D% a. s- N8 b  V" h0 K% }
  660. ;音乐bank初始化 8 J: f# d, b# m7 p  w
  661. JSR Init_Sound_Bank
    ) V- h2 o; ~9 Q4 a' ?; u
  662. 2 N; Y: P: u6 x1 T6 M6 o" v3 D9 J
  663. JSR Music_Show
      e) o6 h. t. z) q' ]
  664. JSR Time_Show) A0 A3 j7 f& J/ B  W. J
  665. JSR Music_State_Show" E+ d+ y5 T; \
  666. JSR Time_Delay
    3 g" b, Y% S# L4 K$ J

  667. 2 X, w* U& D5 t) V  M" |
  668. LDA #$01
    & d: t& C( Q& R  P
  669. STA <Music_Stop_State& @/ R( c& V; z' r# j( z. \/ w

  670. / O4 y; I8 p) `7 u
  671. LDA #$88$ i. {) s% w1 j* j
  672. STA Screen_Ctrl
    1 ?& C! ~; t, z0 i4 T, t# A( E% |4 ^- a
  673. STA PPU_CTRL, k( w9 z3 [8 ?

  674. 9 u$ l1 q5 U0 ~0 ]3 I8 F
  675. JSR Show_Page_Text
    ' G( S( L) B9 i2 q+ k

  676. 9 L9 p. n0 o( z$ B) y! z- z
  677. LDA #$10
    6 t# P+ e1 p; J6 p# q7 p  d
  678. STA <Time_Wait_Cnt
    % Z. {! i( g, m
  679. * |, k$ p% s8 L: `
  680. Wait_Time_Over
    3 J( F) B9 r2 z  S9 E: R
  681. LDA <Time_Wait_Cnt5 p8 a3 Y7 \0 J9 R. F" A+ w$ j
  682. BNE Wait_Time_Over" I( C1 e* k! S6 M& l& m& h2 [
  683. " |/ T4 [; ~, Y- E
  684. JSR Show_Arrow9 ]+ G2 V& ^: W+ f  g
  685. LDA #OAM_TEMP_ADDR / $0100/ X% j9 \  S; _) `9 |2 V9 b2 n, @
  686. STA OAM_DMA* s% a+ J3 z$ }6 P

  687. 3 a/ r% r) v4 o9 O) ~( U( X
  688. LDA #$1E
    ( ]) u3 w; N& t7 E4 m
  689. STA Screen_State
    ' R( C2 Q2 _- `$ v9 q. b2 {) i
  690. 8 L  r; L) P. P; b7 U
  691. LDX <Music_Item_Cur/ i4 Q* x$ r+ C& C. O4 E
  692. LDA <Music_Cur,X
    % ^5 X/ M% h; Z; V
  693. JSR Sound_Init_Proc
    # R! C, m: o1 M9 l

  694.   I$ }( E3 t+ N4 c' D* @8 g* E
  695. CLI
    : l0 U' M  P2 u
  696. JMP MainLoop
    5 o# _, h* s# N% L+ Y0 V

  697.   v* t, B. N4 D- ]+ B, Z9 ]* Z3 k
  698. ;==============================- r: T  F+ o  ?+ X# u" y/ f
  699. Time_Delay;延时等待' V6 o, J% g; {. M1 I3 I
  700. LDA PPU_STATUS$ {6 h0 _0 y) Z, f7 |! c, j/ C
  701. BPL Time_Delay6 D" m) T# Z) O* j
  702. RTS+ b4 `0 t: ~1 B# y3 \2 N

  703. * h8 U; t$ j& a! w- o, }. D
  704. ;==============================. Q8 [# F8 P) S; c7 a
  705. OAM_Ram_Init;初始化精灵内存
    # d) x! H8 L% s# Z: G% r
  706. LDX #$00
    * X1 a' F6 a: w1 c# I
  707. OAM_Ram_Init_Write
    ) n/ p2 H! n3 _& z
  708. LDA #$F8
    1 F; V& o+ i, j4 e
  709. STA OAM_TEMP_ADDR,X* U# h# J9 v6 |+ z8 u+ k" D9 J6 U
  710. INX
    7 o# c7 J- G3 y( C1 P: p' @+ N
  711. LDA #$F80 }' v- l9 V6 Z* d/ y/ e
  712. STA OAM_TEMP_ADDR,X  X% l4 Q* S2 q$ P! u2 ~7 Q0 V4 p
  713. INX
    4 f) H2 ^# @$ d* h/ X, X% {
  714. LDA #$00
    # A; L/ C0 ]- @5 r# _5 }. e
  715. STA OAM_TEMP_ADDR,X
    2 b$ X( x1 t/ I3 K  P1 P9 @
  716. INX
    4 A1 k8 Y# q$ z4 i8 Y- X7 i
  717. LDA #$F8
    . |3 l' s' u, Q" c  m  X7 o
  718. STA OAM_TEMP_ADDR,X
    2 d: Z4 o$ ]6 w' i9 @
  719. INX
    0 p# W9 u$ ~9 b8 p% ]8 @
  720. BNE OAM_Ram_Init_Write% F0 w/ u3 l- @! K+ z- E2 f
  721. RTS% x, z( ]' H! i; L

  722. ! w4 |1 h+ {  M- [, L( T4 j/ z
  723. ;==============================
    $ B, L2 ~. c8 T7 W
  724. VramClear;初始化图形内存2 l) m; N: j7 S' Q9 e
  725. LDA #$20
    5 M8 P( n; d  L8 X- k
  726. STA PPU_ADDRESS
    $ ?; K2 j% j3 p' z$ b7 A
  727. LDA #$00& E) E& p4 c9 ]( _2 P. H' l
  728. STA PPU_ADDRESS. E! l8 z  F: I
  729. LDA #$00
    : \9 w9 @9 ?3 S6 ~" G# R1 }# Q; y
  730. LDY #$00
    . r' m2 l* ^% `
  731. LDX #$105 T- |3 U  c4 k
  732. VramClearWrite
    / R( p6 x/ Q# P6 {$ b
  733. STA PPU_DATA2 E! A; U4 }+ a* G" V& `8 ~
  734. INY
    / d$ G4 a  z% s3 \# z8 O( i/ _
  735. BNE VramClearWrite5 Y% i" ]: _+ i
  736. DEX; C2 |& V& ~- V- J
  737. BNE VramClearWrite
    - o5 H$ A9 F6 R* i
  738. RTS
    5 `" \$ o* b$ g6 ~

  739. ! k/ Z$ d. b/ `1 v" T& L
  740. ;==================================================
    / D1 q) _- h& h& X7 T! ^7 U$ l
  741. ;设置MMC3图像bank
    # l0 M( @* H& K$ _- G  k% @1 b
  742. Init_MMC3_Chr_Bank$ E+ I$ A# |( {6 k. b
  743. LDX #$05
    3 q8 K+ z" n/ U$ J( s# F5 J: o
  744. Init_MMC3_Chr_Bank_Write1 B- E: k7 Y3 G6 L
  745. STX MMC3_BANK_CTRL
    ' }9 N/ l" h0 {1 T' I7 L
  746. LDA MMC3_Chr_Bank_Data,X
      J; G( d9 e; C" i) O4 s
  747. STA MMC3_BANK_DATA" ~. ~: P  ?" B; h# ]8 u8 D5 y+ d
  748. DEX0 H  t; n; @7 c# |) `) p. {1 a
  749. BPL Init_MMC3_Chr_Bank_Write  k) p7 u2 o9 x( C0 \+ T% x
  750. RTS& Z& K, ~: M$ u& W4 o
  751. ;--------------------------------------------------( p! R' i0 i* n, s" z, s9 c$ I
  752. MMC3_Chr_Bank_Data' A: p0 P/ B8 C: L3 V
  753. .DB $00,$02,$04,$05,$06,$07& l7 W3 o! q+ Q

  754. 5 ]# K0 [( m" Q! e# c5 |
  755. ;==============================5 U4 u' Y, T2 C; l! c: L! J% l$ @
  756. VramInit;初始化图形内存2 K7 f" I( z" e* x3 `
  757. .IF CHR_RAM_ENABLE, ?" r1 ~6 k8 A/ O: a. F
  758. LDA #CHR_DATA_BANK  S; ^. g8 y. f, g+ L6 L& h  ]
  759. JSR Switch_Bank_A0005 c0 d- [* G0 f8 [$ F9 s3 H7 A2 X/ @
  760. LDA #LOW(CHR_DATA_ADDR)4 Y" [6 h% w& X
  761. STA <Data_L$ ?7 F4 I# c1 [# O
  762. LDA #HIGH(CHR_DATA_ADDR)( n4 ]6 u! k2 {2 }4 Q
  763. STA <Data_H
    % q1 C" U" e8 R- {% P9 s( U# x" r
  764. LDY #$00
    8 S/ c, [2 O+ a
  765. LDX #$20
    , z0 Q7 T7 @/ @: Q
  766. LDA #$00* w6 i! W2 B  A9 `3 s+ y5 \
  767. STA PPU_ADDRESS) U5 n2 Q: p! \9 z) l5 }3 d. K
  768. STA PPU_ADDRESS
    9 D& S& J' T6 N% p; a( ?- h3 P
  769. VramInitWrite
    7 Z9 \  w1 i1 h' V% H% L1 D, z
  770. LDA [Data_L],Y
    $ `  v8 V* i5 r6 q/ z
  771. STA PPU_DATA
    ; e8 h2 Z6 |# P+ ]2 d
  772. INY+ W5 M  n" w& s/ ^5 c
  773. BNE VramInitWrite& x, Z: o- ]7 V$ m  `9 [7 r0 H7 C
  774. INC <Data_H/ [/ f  S: J3 {. Y) ~: l; E
  775. DEX
    # j# N9 N# P. `* x4 e' f
  776. BNE VramInitWrite
    2 l5 }& v: U8 |* H( c
  777. .ENDIF& \2 v( O* k* h! E0 g
  778. RTS/ Z, @9 {" M/ s$ ~, G; U, q: v, s  H* J

  779. # y- }' |8 B4 m7 W
  780. ;==============================
    5 Y' Z4 {1 y% X; |) c7 ^6 l
  781. ;音乐切换2 L7 u' v! W$ b5 l
  782. Music_Play_Change
    ( M; x% t. q8 r% i3 ~& P2 U
  783. LDA <Key_Once
    6 Z$ [! n+ D: q0 p
  784. AND #$FF# Y* T  |; G- M. S
  785. BEQ Music_Play_Change_Check% ?. C; K0 v8 B) [" y
  786. , c; f  f% _0 Q: \) h: o4 E% T) M
  787. ;禁用音乐条刷新) j, s# m/ s' t1 E" w" I4 g
  788. LDA <Text_Disable_Flag
    9 f# z3 n! |* |, y& J& o  H' E
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    9 \( r" }# `1 v6 u
  790. STA <Text_Disable_Flag' G) y8 U* i, F% b+ G2 ~

  791. 1 {! s) D* D- Z: m# T/ o% @
  792. Music_Play_Change_Check
    ! }4 S  s, U6 n! q: w
  793. Music_arrow; h! x& E8 T- |' X6 @
  794. LDA <Key_Once! ]. B/ v( s' k+ i- |# E
  795. AND #$0F
    3 z# N! p8 I) e
  796. BEQ Music_Play_Change_End
    : G$ ?  C/ |1 b; e4 s7 f: \% I; i
  797. JSR Music_Track_Change, I8 D1 }  r, a1 _: e
  798. JSR Sound_Reset_Proc) k. f% F* j9 P
  799. JSR Music_Show0 z! I7 x: c& P
  800. Music_Play_Change_End
    9 e8 t) {# U; x8 v: {
  801. RTS
    0 Q* m/ E! A/ Y, I
  802. 8 G( S, j4 V3 |  D0 |+ H  _
  803. ;==============================
    & i3 X# r5 T& u% r
  804. ;音乐曲目切换- N5 f4 s: g' E  c5 S) ~2 R
  805. Music_Track_Change0 n  [' f8 s; {9 _
  806. LDX <Music_Item_Cur
    7 n: g- F) O$ e% N
  807. LDA <Music_Cur,X
    # l7 W9 N2 {1 }1 l$ I
  808. STA <Music_Last
    0 Z" `9 x, b% i" d6 I5 R! V
  809. Music_Decrease1 P, ^* v" q' f2 T# Y# I& X0 G
  810. LDA <Key_Once
    , y! k# o! X; n3 o
  811. AND #$423 {5 T' w) m1 ?
  812. BEQ Music_Increase
    ; r3 {/ b1 z. B2 Q% v5 r
  813. LDA <Music_Cur,X( I  U' v5 ]8 i* a
  814. BEQ Music_Increase
    : D0 P- k$ E; ?
  815. DEC <Music_Cur,X
    9 V7 [( v* {! r- M6 b! N1 D7 v) L5 N
  816. Music_Increase2 a- L3 [$ N9 }* E
  817. LDA <Key_Once6 s  l# S/ J/ U8 f
  818. AND #$81
    : Z. \; O. Z3 F# R
  819. BEQ Music_Decrease_10
    ) f, I0 K8 @2 y; b: t2 _/ N
  820. JSR Set_Sound_Total
    8 t. K' c8 A# E9 m# T
  821. LDA <Music_Cur,X5 {& z; p2 o$ L+ ^# ]( m( b. X" Y
  822. CMP Music_Total
    8 Z7 s) M! X" X, t, [: t  A: Z% u
  823. BCS * + 4. E% k& S. d+ V3 [6 J
  824. INC <Music_Cur,X9 d! r, D+ o' m$ G/ P+ U5 K0 J8 I
  825. Music_Decrease_10
    ! e9 o5 [3 t' x$ x
  826. LDA <Key_Once3 G: S& O' M$ o" c; ^" d2 j
  827. CMP #$04* a+ O% W' v5 _0 a4 g) w. R3 }# I+ J2 T
  828. BNE Music_Increase_108 m* P/ r7 a2 V6 K% `1 n2 j: O
  829. LDA <Music_Cur,X
    . ]) p. p+ b8 n
  830. CMP #10
    6 b4 i  p. ?: U9 Q1 e
  831. BCC Music_Start_Song_Min
    5 h: }: \5 N/ a  O0 N" v/ N
  832. LDA <Music_Cur,X
    : a& T' b2 r2 t. K/ b0 ?
  833. SEC
    5 a0 U) _' U4 y' z+ g5 l
  834. SBC #101 g) E# _! |, p- G
  835. STA <Music_Cur,X
    + e9 R, s7 r. x, b+ C
  836. LDA #$00( C- c# T/ \' G+ U
  837. BEQ Music_Increase_10
    ' v+ O- C5 U2 o/ U  \8 q' I) I
  838. Music_Start_Song_Min
    - Q+ h' w! J! T2 C8 \& K* O( N: [6 }
  839. LDA #$00" j2 {$ g% @3 i
  840. STA <Music_Cur,X
    % _) G! Y0 d2 t
  841. Music_Increase_10
    8 `* r, ~; [' n6 E, W
  842. LDA <Key_Once. p# |- j% H+ x4 e/ h5 ~
  843. CMP #$08
    / f9 c* G. ^. N& L- ?$ i# e  h
  844. BNE Music_Track_Change_End" K4 I* g+ R/ M- A, ]" B
  845. LDA <Music_Cur,X
    ; G0 _- e8 h$ [; y% E% _2 t9 ]6 ^9 r
  846. CLC! l: H/ f. G$ ^9 I3 `
  847. ADC #103 b2 U% I8 f! F3 r7 F! M
  848. CMP Music_Total- n$ E: e- Y( \# [
  849. BCS Music_Start_Song_Max
    ' z3 _, p, V) d' N  s$ L7 u) J6 k# h; E
  850. STA <Music_Cur,X1 t7 G: g7 R+ V1 w- ^" Z9 R! J+ A+ ~
  851. LDA #00$ p  h  B  V9 ~. n1 d8 v
  852. BEQ Music_Track_Change_End# q) U" Y" Y3 F) j
  853. Music_Start_Song_Max
    * S; ^1 O, v1 X$ I" f
  854. LDA Music_Total
    : j. [7 \8 o" C( w0 Y8 [
  855. STA <Music_Cur,X* @$ v4 F0 h- R( [5 G
  856. Music_Track_Change_End5 j9 T: K4 D5 k, y4 ~" e/ k
  857. RTS2 c: n2 G2 N8 K# [6 L
  858. & C  k: r4 N6 \' q8 Q6 A
  859. ;==============================; b! g; c6 g" z" e
  860. ;按键处理: M( P9 |3 s) Z) _+ Y5 \
  861. Key_Proc
    # X1 J- F0 v* J; {$ ?) S
  862. JSR Key_Scan. y" Y2 |( b" t+ i2 _" N0 k; P: J
  863. LDA <Key_Keep
    / N; |  z8 k2 E! H7 u0 I, h% g
  864. STA <Key_Temp
    9 _1 I% j( h) u8 t3 k* l
  865. JSR Key_Scan8 ^+ d. j) Y9 @) }2 ]. `+ @. A4 @6 h
  866. LDA <Key_Keep) j6 k/ V: t8 J6 g8 w1 L% r' [4 l
  867. CMP <Key_Temp
    - F) b1 e$ A1 \# z2 z' z
  868. BEQ Key_Get_Once2 T: c! |! W  o4 F
  869. LDA <Key_Kemp
    # y4 @9 v, F: F& o8 l& R  i$ {% ?
  870. STA <Key_Keep
    + b0 x. N9 j* D6 @8 c' {
  871. Key_Get_Once
    : m$ W+ ~- Y) L& Q" O! s
  872. TAY; l4 X" r$ R8 M2 v5 n
  873. EOR Key_Kemp' w' I& H6 {$ B1 t* j
  874. AND <Key_Keep
    7 z& O; A  H  i
  875. STA <Key_Once" l6 ]6 l/ f8 h, s6 U
  876. STY <Key_Kemp% b+ ^/ `4 p2 N8 o' |3 k
  877. RTS% K- V2 y$ ?: u# \
  878. ;------------------------------
    7 M2 F9 o) I$ u* ~
  879. ;按键扫描
    " d( C5 e. g! ]  _- T8 k0 H
  880. Key_Scan
    : }% r& w. V) h2 B( V  m
  881. LDX #$01' _% j( d7 ]3 M8 }
  882. STX JOY1_FRAME
    / t7 q) [8 D# l; A
  883. DEX9 c( L9 S# N( D/ Z
  884. STX JOY1_FRAME
    & u( N: ?& \# d  L: d
  885. LDX #$086 b% E0 }1 z& @5 H# v
  886. Key_Value1 i" d. v1 G! e* n: c5 u/ a- ]2 w6 J. u
  887. LDA JOY1_FRAME
    4 x% I. q5 R& \$ a
  888. STA <Key_Getv
    0 \% a5 L" Z7 Z1 P9 T8 M
  889. LSR A
    6 ]/ Q6 T) m* b* S* Q* d" Q2 u
  890. ORA <Key_Getv
    , Y: P' y/ X$ f0 H9 Y& E) T
  891. LSR A
    # e1 a7 e' S) i3 d+ Y5 O+ v
  892. ROL <Key_Keep$ d  k- p, ?; @
  893. DEX
    3 C, }. X; Q! n. t
  894. BNE Key_Value0 m* i3 ^5 e8 L( e
  895. RTS
    ( Q4 b- \5 T6 i/ F$ c7 i

  896. * G4 H$ m; |6 N& F
  897. ;==============================
    6 o, j  }$ M; C% e' W
  898. .IF SOUND_BAR_SHOW_ENABLE1 p& a. ?2 y0 Q4 M+ s3 p& d% g
  899. ;音乐条显示) [1 C) j2 e) B) `2 Y" G, g: T
  900. Music_Vision& n2 b" Z6 z! W# v1 b
  901. LDA <Text_Disable_Flag
    % V% ]6 |, }) f
  902. AND #TEXT_DISABLE_ITEM
    + c+ l) [9 n7 I
  903. BNE Music_Vision_End
    9 l4 [+ j) Y& V+ Y! x+ F( L
  904. AND #TEXT_DISABLE_BAR
    # U& m9 R& ^+ X* K$ J0 W1 f/ }9 i5 j
  905. BNE Music_Vision_Set
    4 E7 f4 O1 V' E
  906. LDX PPU_Cur1 h* z  H9 m% G6 e: }
  907. JSR Music_Animation0 d# [6 C. G$ {) l  ^$ z2 V
  908. STX PPU_Cur
    * M, x  |+ C$ z3 z0 x
  909. Music_Vision_Set
    ) W* W2 x& z* T- i" {
  910. LDA <Text_Disable_Flag) _4 p! U2 p+ c% t- D2 U" D. {
  911. AND #TEXT_DISABLE_BAR ^ $FF
    * X$ ^  Y; Q" f' {- f4 L: i  ~3 k
  912. STA <Text_Disable_Flag, `; T% ~# [. u6 x( |: j8 P6 Y
  913. Music_Vision_End" s- l& y  Y) |$ C) v: h) c
  914. RTS+ B2 I+ J: W& @* |+ u
  915. ;------------------------------. |6 ]0 w/ i! c4 H! N
  916. ;音乐条显示处理# G$ e  q+ e5 X3 k1 q
  917. Music_Animation- V8 p# W6 m) [& [* c
  918. LDA #PPU_MODE_CNT_LINE
    * X# R+ L3 C6 h- t+ i0 a
  919. STA PPU_Addr,X
    9 a3 N& a  p) v( c
  920. INX) Z4 G+ `( f, Y3 c* [+ n) c
  921. LDA #HIGH(Sound_Bar_Pos). q9 [6 T/ n9 g3 h% n
  922. STA PPU_Addr,X
    ( n" w: @2 y& Z# |) D$ q  ?
  923. INX
    $ c# n; x2 p  |& \: J+ ?
  924. LDA #LOW(Sound_Bar_Pos)
      S8 M) u9 z4 G  e7 \+ u* {4 O# p
  925. STA PPU_Addr,X
    & l5 y; q+ f% [% s' m8 `
  926. INX
    1 z; ~: {" J' m
  927. LDA #$08
    0 s, J- j$ E) I2 o0 c: e$ Q9 J& g
  928. STA PPU_Addr,X* X5 K! W" O$ n
  929. INX* u7 U; k5 Z- r+ A
  930. LDA Sound_Bar  \  U  M; L: d) p' C; c, m
  931. JSR Volume_Convert
    * y! m: n9 i, K4 z
  932. : x# P* W7 [  a& S8 Y; z
  933. JSR Volume_Set_Cnt5 V# W# x% @& N' Q+ \& `: z( c1 l* k. F
  934. LDA Sound_Bar+$45 W4 E! ~# y7 q0 |; p
  935. JSR Volume_Convert+ B4 e# M+ `, J1 _

  936. & K/ O- W; d* H! w# t" k0 ?$ O
  937. JSR Volume_Set_Cnt% p: V/ E$ I6 h! _. q: Z7 G. K( {
  938. LDA Sound_Bar+$8
    & c" E/ C$ V( ^% T
  939. JSR Volume_Convert
    8 v1 o3 A% k4 V: a5 O5 o* ?- \
  940. ! ^1 H. Q$ e. g, U( t+ l
  941. JSR Volume_Set_Cnt- \4 o0 b  q, J
  942. LDA Sound_Bar+$C
    % z% X. m4 p( c7 y5 E6 n
  943. JSR Volume_Convert
    7 @3 q2 R7 j$ \% Y  U2 e
  944. & a  B; N- n* a" q" U. B
  945. JSR Volume_Set_Cnt
    1 R; n% i8 I0 P3 y! P; `' O7 ?

  946. " \% g: }9 K" m* X9 s7 Y1 k
  947. LDY #$10
    ! B: M& j4 c8 h
  948. LDA APU_STATUS
    & J) G) i( ?, @
  949. AND #$10
    2 e1 v& H# q3 k1 n) d
  950. BNE Volume_Count
    7 |3 K5 `: l" d4 C( ]4 e
  951. LDY #$00- ?9 L8 v! Q/ z6 b' v7 m" M
  952. BEQ Volume_Count6 d7 X4 ]4 c+ f8 H$ c$ c1 x2 F# {

  953. 5 B7 m+ W" d9 g1 H* h: L7 K
  954. ;------------------------------5 ]0 ]! D$ G* M
  955. ;音乐条处理
    ) r, I5 v8 e* t6 Q  \
  956. Volume_Convert: Y0 \8 p4 k' Y( N" G, s
  957. AND #$0F9 t6 S$ E8 u0 P, ?9 L
  958. TAY
    2 p) @1 N8 _/ m' n6 c* C+ q6 r
  959. Volume_Count3 G/ Z2 P% ?% `+ ^9 M6 t7 x
  960. LDA #$08
    0 [. y- D" q, b. _9 ]8 [  x; P' T
  961. STA Sound_Bar_Cnt
    % `; _. x- S; G1 S( ^
  962. Volume_FILL
    " J# V; h5 @0 g" Q6 ?7 b7 k* t7 ~
  963. DEY
    ; m: E5 U2 a% F$ \4 ^, j; P
  964. BEQ Volume_Half
    0 l9 r: X& z) p5 r
  965. BMI Volume_Empty
    ) x( m3 z) x( Q! V# A. [8 c/ e, _; q
  966. DEY4 O* t1 f; q( ^1 y0 G2 d
  967. Volume_Full6 J% Y2 E5 r0 e, [* q# t4 \- `# ^
  968. LDA #$16
    8 c$ n9 z, V; L7 l4 g4 h
  969. BNE Volume_PPU! G, m5 o& ~1 h9 Z* V
  970. Volume_Half2 J- x* e9 \6 e7 C
  971. LDA #$15
    5 C6 I& [: M  @5 j  y/ o4 b. W
  972. BNE Volume_PPU: @% R: {/ d! q9 u
  973. Volume_Empty- h' N8 L4 L2 n/ K* N
  974. LDA #$14. x3 C% }: A5 s0 R$ p
  975. Volume_PPU, t  f9 V% \" y2 G
  976. STA PPU_Addr,X& S8 Z1 P, f* h& W; n
  977. INX
    . t1 [8 y9 ?9 j& o  o) S
  978. DEC Sound_Bar_Cnt; n& f( b# l; _$ S& c- O
  979. BNE Volume_FILL
    - T+ M' o4 U* D$ W# k, \; V# ^9 c8 A
  980. RTS
    0 A+ }, _  j" H* H, H& Z
  981. & D. l" N1 T* y$ ?
  982. Volume_Set_Cnt- {; f; V5 I$ D6 c
  983. LDA #PPU_MODE_CNT_LINE_NEXT
      H" y# [" x; ^- K5 x
  984. STA PPU_Addr,X2 q9 c1 @1 H- ]! N) o( B. u4 Z% p. i
  985. INX0 t. \  u! x# t
  986. LDA #$08* }, S$ q  L( }. t% }
  987. STA PPU_Addr,X. G9 E: A: Z6 C: x  S
  988. INX
    # _  a# L; J. B
  989. RTS) A% x3 h3 O" Y5 N  @6 C2 r

  990. ) H- ]! [* J* b" o: b& f
  991. .ENDIF, ~' {; [4 p4 v+ ?/ [4 D" Y& Y: _
  992. ; k* O. N( G5 ~
  993. ;==============================
    # N2 K5 H0 {' N: \6 _( Y# C
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入1 T8 L+ i. T2 G4 F3 }
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式: ]. N) I! v; z- h
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除0 Z% n( X; v8 y; N- L; e/ l6 l% _
  997. ;------------------------------3 R0 H% |' V1 N6 E. p5 W
  998. ;PPU处理
    ) I8 t7 O' E( Q
  999. PPU_Proc
    0 {3 c. B' m5 M( Y2 J
  1000. LDX PPU_Cur2 Z( [5 Y- b$ t5 ]5 l0 r7 W3 N; M
  1001. LDA #$00
    + \7 l/ x6 u! v( ?* J, R
  1002. STA PPU_Cur- D& m9 x5 Z/ L9 d& _
  1003. STA PPU_Addr,X+ `' g/ D9 e0 @0 @- R* p
  1004. LDA PPU_Addr
    3 D. ]# D1 R  x" p7 ~
  1005. BNE PPU_Proc_Beg' x' L0 {  f/ Y' f* J0 ]
  1006. PPU_Proc_Ret# n! E* O9 s7 N7 O. u% j
  1007. RTS! M/ r' t; u( ?( u* F! [

  1008. 1 P9 u* U" z( c: ]
  1009. ;------------------------------
    * y3 E& @  B6 x/ g& C% s
  1010. PPU_Mode_Return_Cnt  ;转下行模式+ @& w& v2 N6 {4 B- |( L1 L* m
  1011. INX
    ' U9 {5 W/ K  a. T. H$ x  h
  1012. LDA PPU_Addr_L
    * i# K+ r: d1 v) b" p
  1013. CLC
    / @6 `) C! Z* Z9 C) r! o
  1014. ADC #$203 z6 X5 S  E* t
  1015. STA PPU_Addr_L3 C0 `' ^5 a6 [2 j8 L- M' w1 {4 y, I# I
  1016. BCC PPU_Mode_Return_Cnt_End
    6 V: U# F. t; L5 u0 r! Y& [
  1017. INC PPU_Addr_H
    8 f8 {" C* \) d' }* W8 Q* [
  1018. PPU_Mode_Return_Cnt_End
    3 }5 X/ Y* \* @1 M! {
  1019. LDA PPU_Addr_H, E6 x+ t! I% g3 j0 w2 t6 @
  1020. STA PPU_ADDRESS
    - s0 s# i( Z$ g. Y& K- i. t0 |
  1021. LDA PPU_Addr_L
    3 P$ j6 ^6 z- l, M
  1022. STA PPU_ADDRESS1 P& P7 _! B  C, X9 E; a7 l
  1023. LDA PPU_Addr,X! Y0 b" {7 u; i
  1024. TAY
    . O0 ~& m8 w! f/ d5 U
  1025. PPU_Mode_Return_Cnt_Write
    0 t$ ]' G8 p7 R$ \$ r
  1026. INX' k4 A: V) L5 |: }/ J) M' B
  1027. LDA PPU_Addr,X0 @, i" ~8 D. {1 X' T' r
  1028. STA PPU_DATA
    3 a1 I, s( r& s2 x) \/ M
  1029. DEY8 M! [& {& g; V+ l2 i0 _- `4 n
  1030. BNE PPU_Mode_Return_Cnt_Write$ u/ `/ Q& ~: u' M# B
  1031. JMP PPU_Proc_End* x' r8 {8 Q! r% D* `
  1032. * g  D  o2 c% j1 D4 [: r' R
  1033. ;------------------------------% |1 l$ o8 w5 m5 o' i; q9 j
  1034. PPU_Proc_Beg  ;处理开始- Q! w# R2 Y* `. E/ z- |* P8 Y. J2 z
  1035. LDX #$009 [  Y1 g# l7 w; x$ q  e2 S
  1036. STX PPU_MASK
    , R2 U) E0 }/ f* I( R4 l
  1037. ;------------------------------
    1 F* S3 `0 @1 L, q
  1038. PPU_Mode_Select  ;模式选择; K5 @* q. R) ~9 a* b, o
  1039. LDA PPU_Addr,X' Z% x0 A, d4 O
  1040. CMP #PPU_MODE_CNT_CLEAR: o. V% k4 w1 N7 V
  1041. BEQ PPU_Proc_Clear5 h0 J0 x$ }- m+ \7 q* f
  1042. CMP #PPU_MODE_CNT_LINE
    # R3 J& c: N" P! ^3 r& g7 m: i* W
  1043. BEQ PPU_Proc_Cnt_Line2 d. z* L& h7 ^! d  p/ X8 j
  1044. CMP #PPU_MODE_CNT_LINE_NEXT
    + }' X* [" m3 R' \* F% T$ O7 [7 X. h
  1045. BEQ PPU_Mode_Return_Cnt( y3 w' u3 c7 [' q7 A
  1046. JMP PPU_Proc_End_Write" ?  U1 _- Q9 s* `  @8 C1 k" z4 B
  1047. ;------------------------------, C, X6 N- ~- |) m
  1048. PPU_Proc_End  ;单行写入结束8 T1 d$ r+ I8 d
  1049. INX
    / w& A4 J& _) f
  1050. LDA PPU_Addr,X$ W7 X' y, m# V* o+ |
  1051. BNE PPU_Mode_Select& N  ~3 x  p8 l1 G  q
  1052. STA PPU_Addr) H/ \; @1 N6 a6 a, F  a
  1053. JSR Update_Palette_Color% e1 A. R4 ?! `% H0 s+ S, g. Y

  1054. 2 ?2 h1 ^0 T, I, l7 I
  1055. PPU_Proc_End_Write% X8 x9 X2 p# B0 o+ A) W# K+ _
  1056. LDA #$00# @; x0 }9 t' f
  1057. STA PPU_ADDRESS
    1 Y8 H9 y, e  ]+ ?0 c
  1058. STA PPU_ADDRESS4 r+ c) q- J7 G
  1059. LDA <Text_Disable_Flag
    ! l- t$ q: H- B
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF9 x" Q" Y* L+ l
  1061. STA <Text_Disable_Flag/ e. f. I& f. B- {) n# [! D( K9 j" ^
  1062. LDA #Scroll_X# ]! F$ t% b( ^& F. ?
  1063. STA PPU_SCROLL5 [7 U1 \: S9 H
  1064. LDA #Scroll_Y9 z0 Z, g) f9 H1 x$ ^  ?' C' h4 b
  1065. STA PPU_SCROLL
    " C" Q. s. t" B( E
  1066. LDA Screen_State
    0 w& E, W+ p9 I
  1067. STA PPU_MASK7 S( w4 ^5 E; ~
  1068. RTS
    ) F4 r" {/ W+ b8 d

  1069. " X2 s8 r' S+ M; s
  1070. PPU_Proc_Clear. w" E' H) `& C! ^* c' t# t1 }
  1071. INX
    2 a  R$ s/ N. u. s7 A
  1072. LDA PPU_Addr,X
    , A) G* ~' P5 A# U
  1073. STA PPU_ADDRESS" X; O; [6 U) l1 J
  1074. INX
    / h* c' ^8 `% u8 P& L0 u. M
  1075. LDA PPU_Addr,X' G# j, N0 L% a' O$ ~- K
  1076. STA PPU_ADDRESS% Z. ~4 ]* A! t
  1077. INX. W$ t  a" p+ n
  1078. LDY PPU_Addr,X* _0 p  Z; Y, ?0 R6 o+ {. I4 a* G& s
  1079. LDA #$00! L' f, C' S; l  n$ w* `
  1080. PPU_Proc_Clear_Write
    % g! u$ t: i6 h; B& G6 P. f, x* a
  1081. STA PPU_DATA5 }& t- D# v3 s2 q( X& H4 u
  1082. DEY
    6 h0 \" r1 ~- L9 R. J
  1083. BNE PPU_Proc_Clear_Write6 q! Y: P+ n1 v. W0 M. ]
  1084. JMP PPU_Proc_End. M6 Z* @3 b7 y3 y8 B
  1085. ! U9 F7 l! g( a+ J
  1086. PPU_Proc_Cnt_Line& i& L3 Z& a% u
  1087. INX
    . X( X/ ]+ F0 g
  1088. LDA PPU_Addr,X
    0 ^' ~6 n) s! Q2 k
  1089. STA PPU_Addr_H3 m& l6 H* ]2 _
  1090. STA PPU_ADDRESS
    9 I6 o. p/ e0 U
  1091. INX$ {& i7 H8 j  \5 a
  1092. LDA PPU_Addr,X
    1 {$ J! E! Y7 \$ S
  1093. STA PPU_Addr_L
    ) e5 E1 j2 U$ x# ]3 Z7 r. d1 a
  1094. STA PPU_ADDRESS8 U% [8 S1 Z2 ^# l9 @% N9 Y
  1095. INX
    " I# @& c$ ]9 M& Y5 V
  1096. LDY PPU_Addr,X* `* \5 I& P1 ^! E. \: @$ u4 H
  1097. PPU_Proc_Cnt_Line_Write. s/ s" Q" s5 ]; l& D6 e
  1098. INX1 M" ~2 i  N; w
  1099. LDA PPU_Addr,X
    . c% I( W- N) H6 v9 `
  1100. STA PPU_DATA
    * s- ]& S! L' c0 I' B: R- M, }+ r
  1101. DEY! {! u5 B7 x2 b+ A: C
  1102. BNE PPU_Proc_Cnt_Line_Write
    * D: L) j) {6 w+ q6 T" A$ |( l
  1103. JMP PPU_Proc_End
    4 b4 x! B7 @( [1 c6 z
  1104. 1 `5 I! H+ V/ _5 e3 j
  1105. ;==============================- z& k: n+ G) G2 q) X
  1106. HEX_To_Dec;十六进制转十进制
    5 g( a$ E) C( o+ `$ E3 b; s0 A
  1107. STA <HEX_Data
    1 @8 D! O0 q4 f  s
  1108. PHA. x0 R1 F" E% B) e* i
  1109. TXA
    8 j2 t+ D. X' h. ^  x0 S
  1110. PHA$ R5 G- ]' O6 ?/ S  R' w
  1111. LDX #$003 [3 E  D" \9 j7 W. C# R5 ~9 k1 x
  1112. LDA #$00
    ) G* r" L& h1 C+ O
  1113. HEX_Cln9 ?" h  O3 l+ D: }: |
  1114. STA <DEC_H,X" q, z7 {% @* x2 K1 N) ]! {5 y
  1115. INX
    , K' G/ W* c, ?4 J
  1116. CPX #$03
    . F/ \% z( a; g( |2 f, I
  1117. BCC HEX_Cln
    9 d- q2 t9 S) m  X" Y2 h, j+ K6 G
  1118. LDA <HEX_Data
    4 F/ ^! A: t6 @2 h7 s
  1119. ;------------------------------
    $ Z0 b% K$ q( @3 s
  1120. HEX_1005 ?+ Q% ^1 q' n
  1121. CMP #100
    / y. O; `' H8 C
  1122. BCC HEX_10# g( u. z4 z9 X
  1123. SEC+ |) y: i8 P5 T% Q
  1124. SBC #100% f  I( r$ l* |  T* T& T  U5 R/ [- r
  1125. INC <DEC_H
    7 B  [& s" h+ d1 s1 {! {
  1126. BNE HEX_100
    ; Q. [9 b* r$ v3 o3 W3 E
  1127. ;------------------------------! X9 w+ e# y; g" G4 K
  1128. HEX_10
    4 X2 v9 t5 z$ Q% I3 d
  1129. CMP #10
    ( G. }) T0 C8 x+ a+ |/ F
  1130. BCC HEX_1
    / ?  q  M  x! C% ^
  1131. SEC
    4 a& l: ^1 [: C
  1132. SBC #108 ]' g6 Q, J5 x7 W! ?( S2 I
  1133. INC <DEC_T* w; B5 R' c7 r+ \  @3 T8 A% A
  1134. BNE HEX_10" w( ]/ ~, r; ]6 B1 }) \7 O  k
  1135. ;------------------------------/ @5 i! W7 N! G* y& Y7 B' U' L; h, r" {
  1136. HEX_1/ L3 h4 B% _) [7 J
  1137. STA <DEC_L
    / K( I5 _9 H" l3 h0 V% ]) m
  1138. PLA
    $ l9 V$ R, K! }" m
  1139. TAX
    6 P, d( u' d1 T) H+ N5 n+ V" L
  1140. PLA% h) D( f1 d8 v$ f4 P" _) M
  1141. RTS9 t7 h# J1 D& p( }$ y/ o5 {8 j
  1142. / M- Z9 ~* k- Z& _/ u
  1143. ;==============================
    ! ^, c9 s$ r" e5 `6 t0 P
  1144. ;音乐曲目显示
    " r0 }& _" e2 Y7 g
  1145. Music_Show
    , E; J' u* X* P% P) |
  1146. LDX <Music_Item_Cur
    ) g* O; S3 w6 V" f
  1147. LDA <Music_Cur,X9 f4 G$ ]1 B7 |" [
  1148. CLC
    - i$ P1 w) |. P9 l" }+ F0 _
  1149. ADC #$018 V1 K5 D, }5 l: H3 j1 V
  1150. JSR HEX_To_Dec" p; Y" C- \9 Y* K, M
  1151. LDX PPU_Cur6 y; a- t; {5 f6 A- ?  i
  1152. LDA #PPU_MODE_CNT_LINE) S9 M; n* D" y8 u" {6 F/ l5 J
  1153. STA PPU_Addr,X( R! q! l8 Z. s6 G
  1154. INX: _+ @& w" R( E. I* Y
  1155. LDA #HIGH(Play_Index_Pos)  m* d) z% P2 i6 b/ ~& P
  1156. STA PPU_Addr,X
    + }; I2 c+ s( c$ _6 {
  1157. INX% D) Y& o1 Q2 Q! V
  1158. LDA #LOW(Play_Index_Pos)
    1 r1 r! j5 g1 R: _! A
  1159. STA PPU_Addr,X
    9 v5 G( V" u& u! e
  1160. INX7 T8 O8 Z/ w# c
  1161. ) v& V$ S7 v# v
  1162. LDA #$07
      D( m( ^* Z# ]: A' w, N7 T( }
  1163. BNE Music_Show_Length/ I+ t1 p" x8 h/ k
  1164. 3 ^( w7 X  c- B
  1165. Music_Show_Length
    4 K1 m$ m. Z6 X5 e" \" G% C& I4 t
  1166. STA PPU_Addr,X
    % \% T, }8 r# Y3 e6 o2 T
  1167. INX
    4 Q- C* j" G4 h! p; |) |# X

  1168. 1 x/ s$ q  m2 O+ I6 m0 X0 ~
  1169. LDA <DEC_H" D0 i* x+ s" S" c' H  I
  1170. ORA #'0': N( n( }. ]5 Y. ?1 Z% x
  1171. STA PPU_Addr,X' P+ o: [6 x! i3 N; f  w
  1172. INX
    0 M7 Q' A8 D0 H" R/ l* ]
  1173. 5 i- [% E; X/ p  f9 e
  1174. LDA <DEC_T
      \# @$ f; g, `# q. U
  1175. ORA #'0'3 @; S4 X* D1 l4 X1 b# _- Q3 s
  1176. STA PPU_Addr,X
    / C0 d4 k* u  t+ `2 ?/ A
  1177. INX4 c' L" `- w; V
  1178. 5 o! E" @) q; v( Y
  1179. LDA <DEC_L
    # K. P% u' _' o% q! X
  1180. ORA #'0'+ T; {$ N. Q' s; Q0 x+ f* _/ L
  1181. STA PPU_Addr,X
    ( F9 f/ d. B% p. p! W8 V; K7 }
  1182. INX
    * {7 j6 E, K) Z+ e8 `2 h- s
  1183. 7 \2 E; W7 G  I/ \( |/ }
  1184. LDA #'/'
    - \) \' U6 I9 f
  1185. STA PPU_Addr,X
    % a4 R1 N! J" P+ o- k5 E
  1186. INX4 ^& s$ m/ Y9 N8 H5 q( F' N1 d7 S9 {
  1187. Music_Show_Total8 u, B! F8 S! c, k( O: g' k' t9 L1 ?
  1188. LDA Music_Total4 I4 S8 k- T; Q+ y" D
  1189. CLC
    # F" Y9 R, G9 s$ \' X
  1190. ADC #$01
    / x" R0 \4 x8 W; P# ~
  1191. JSR HEX_To_Dec
    & V8 P( E7 [) T/ j2 d
  1192. 9 s  R. m! |* x
  1193. LDA <DEC_H5 C* \6 e7 w) _$ N% ]; d
  1194. ORA #'0'
    2 [  B$ J% ^4 f/ Q9 V* \! ]
  1195. STA PPU_Addr,X- d6 R9 o6 Q  H
  1196. INX' e* p: ]+ }, ~+ o
  1197. 5 R8 q* X- A2 X5 g- ~: \2 @! e1 T; Y
  1198. LDA <DEC_T
    / }, g! ~6 u6 U+ ~) W: j. i
  1199. ORA #'0'
    - Z2 `0 ?) g7 u
  1200. STA PPU_Addr,X4 x; e& v5 S- _, n
  1201. INX
    1 U! a1 ^, d, I# f
  1202. . m4 J% `! o. U: z: D
  1203. LDA <DEC_L0 y$ ~# [9 _. F/ z9 V9 ]9 C6 ]
  1204. ORA #'0'
    ! |# D. K5 w# ]; A4 I
  1205. STA PPU_Addr,X9 |0 P6 ?% K+ R; d" N: ^. \2 C
  1206. INX4 ]5 I+ D3 g4 ?; d6 E

  1207. & S# _9 E' b& C7 |. X8 U
  1208. STX PPU_Cur
    + |! b' F% F: t
  1209. Music_Show_End
    6 g6 y) N$ y* B! J/ ^
  1210. RTS
    ( c4 m0 o" O, B7 Z" p' ?) T, u
  1211. % e- X4 C& j7 \
  1212. ;==============================
    % `0 ^  q" A" K
  1213. Time_Show;播放时间显示
    ) F+ A. H3 s* K: R( s, [+ z
  1214. LDA <Text_Disable_Flag
    8 n8 m, O0 O! U$ ]5 ^( `8 z, |4 v
  1215. AND #TEXT_DISABLE_ITEM
    0 S  n$ t8 h6 F7 {
  1216. BNE Time_Show_End' R  Y: t4 d& C; J
  1217. AND #TEXT_DISABLE_TIME: F8 a, P, t$ j4 w8 y9 K0 f% g  i
  1218. BNE Time_Show_Enable0 h0 p6 ]. T$ y1 _3 M- F7 \" {- I' l

  1219. " z4 H0 I# R. e7 x0 }
  1220. LDX PPU_Cur
    * U7 D- O& {) m9 _6 d
  1221. LDA #PPU_MODE_CNT_LINE$ Q% {# ^; ]0 b% W
  1222. STA PPU_Addr,X; O, _  Q) n/ [6 l
  1223. INX
    : N  v& b/ s; j) Q8 @( @
  1224. LDA #HIGH(Play_Time_Pos); C: C& ?+ v7 Z
  1225. STA PPU_Addr,X
    $ Q3 g, D' |5 w
  1226. INX/ I2 C' i+ A$ s$ }- i
  1227. LDA #LOW(Play_Time_Pos)
    / i+ T" d; L- A
  1228. STA PPU_Addr,X
    ( G6 k/ W, E4 B' Q+ Y7 i6 s. m
  1229. INX" C0 C7 K3 ?1 m7 X: Y  C$ h
  1230. LDA #$08
    ) k- k2 s4 u! P9 h
  1231. STA PPU_Addr,X
    9 J' ~' w. V6 }- q3 V% q
  1232. INX
    ' G1 i. k! K* j2 r( Y" r7 A% x
  1233. Time_Show_H
    ; u: ?$ m" v! s* l& a
  1234. LDA <Time_H
    ) i! ^- P8 m% f$ p2 q; h
  1235. JSR HEX_To_Dec4 F$ e; e5 b6 j
  1236. JSR Time_Digit) c. K  S7 |7 d
  1237. LDA #':'
    & c/ `+ k$ B. e
  1238. STA PPU_Addr,X' b( n+ H- X3 |4 b& D9 T% \
  1239. INX* i# L$ s. D7 {' M
  1240. Time_Show_M* x/ O! ]9 U6 {
  1241. LDA <Time_M
    & O" K1 Q" @) b6 @3 l0 z
  1242. JSR HEX_To_Dec! ]# g- r5 d% A- E, f/ a
  1243. JSR Time_Digit
    $ Y" z5 ^+ P# k% ^% r2 }
  1244. LDA #':'
    : q% G7 j3 B. g( V( Z0 p
  1245. STA PPU_Addr,X
    8 l. `- D, h; X3 ]8 Q
  1246. INX
    4 U; o: S# J1 b4 c! ~, ^& G: C
  1247. Time_Show_S
    % K7 w  i2 T$ _& E* p. b  Y
  1248. LDA <Time_S
    $ T) n* Z! w( k! k/ m! o
  1249. JSR HEX_To_Dec+ I2 m" G8 u2 r! l2 W* [. J' {: X
  1250. JSR Time_Digit1 L7 H3 v+ d* p, b# T
  1251. STX PPU_Cur% T; h! w% H, y/ I
  1252. Time_Show_Enable. u8 j: e6 t1 y4 u3 u9 y
  1253. LDA <Text_Disable_Flag$ @. j2 m1 S9 T4 z
  1254. AND #TEXT_DISABLE_TIME ^ $FF
    % u, v/ K2 c+ K9 U  d
  1255. STA <Text_Disable_Flag
    . k" q; S; V1 A4 A
  1256. Time_Show_End
    % a! Z# _5 N/ e, I3 X6 s8 B/ `1 P% B' @
  1257. RTS
    9 ?# Y& g0 B# X( U" R: {0 _
  1258. % D# L0 H+ U% `" N
  1259. Time_Digit
    3 q0 n: a& A3 ~+ R
  1260. LDA <DEC_T
    7 q, R9 [2 w0 p
  1261. ORA #'0'
    5 S8 F) G1 h) m" N0 X* j' I
  1262. STA PPU_Addr,X
    : y/ r, w7 K" y% ?
  1263. INX
    ; z9 E6 X- n6 h$ p5 c7 D' r" A4 P
  1264. LDA <DEC_L
    & R+ A3 |  o" A" p+ Q
  1265. ORA #'0'1 p1 F" A0 n" {* X
  1266. STA PPU_Addr,X, ?' |) w7 ^6 C
  1267. INX! C$ {# B4 {: b5 K- O0 H* w
  1268. RTS
    , I0 Z! \% V" ?! O: [
  1269. # z7 A/ m1 y7 c, c
  1270. ;==============================
    7 D% Z" N6 P8 [9 _3 e7 @& Y) o
  1271. Time_Count;计时
    8 s* v: V1 B# H$ A
  1272. LDA <Music_Stop_State
    ) W3 p9 Z2 g6 k- O& N
  1273. ORA <Time_Wait_Cnt/ ]- D9 Z/ ]) Q
  1274. BNE Time_Count_End
    % @# n9 U2 d) ^" g: U7 D$ m- P0 w
  1275. INC <Time_Cnt
    3 @5 A$ m7 o+ D$ S) m* ?) b
  1276. LDA <Time_Cnt
    / ~% R$ {( ^9 J: C7 s# o9 h+ G
  1277. CMP #601 K. C& |* P1 ~1 c' D1 @2 r' B
  1278. BCC Time_Count_End
    & ?' V: o- w5 Z* |8 \  l( s1 m& K
  1279. LDA #00
    8 o' b* _6 F1 F, l: x/ u( Y* M
  1280. STA <Time_Cnt1 i% ~6 I+ M1 q" v9 t  x0 ^
  1281. INC <Time_S
    1 j* i8 [7 w) ~' w& ^& g' ^
  1282. . V3 t8 c% Y6 S2 Q
  1283. Time_S_Cnt
    8 U8 q. x0 Z  b" s9 l$ E
  1284. LDA <Time_S
    , K' C" N8 u$ w( B8 T& M: q& P
  1285. CMP #602 L( }4 [8 h& ]5 _2 l; J
  1286. BCC Time_Count_End& N: C! F; j4 t  }; @/ D0 ]* H
  1287. LDA #00$ H& ?3 O7 c, c
  1288. STA <Time_S# A9 Q: Z& X$ w
  1289. INC <Time_M
    0 I; Y3 a8 h! ?% K

  1290. / _$ R" s  g* }8 O, e
  1291. Time_M_Cnt" _3 U; D# {; R* m! m$ c. S
  1292. LDA <Time_M
    5 I+ h$ b; |. }3 @' T: `6 W) o8 l
  1293. CMP #60* }9 Q3 ~; \9 b2 J0 }
  1294. BCC Time_Count_End, z% s/ t+ \4 C+ Z8 k" |) [
  1295. LDA #00
    : J! U1 p0 v# p
  1296. STA <Time_M
    , J+ z- [1 _; h# B$ K  z+ [
  1297. INC <Time_H
    $ c) u3 D/ M) C* w) y

  1298. + N8 Y7 S' E7 @; i
  1299. Time_H_Cnt
    # g9 ^( ?9 G6 M6 T
  1300. LDA <Time_H
    $ S3 q4 N3 j' K2 }
  1301. CMP #24
    : m7 ^/ n) m: p: j  O
  1302. BCC Time_Count_End5 H9 I) N. g4 W: }( ^
  1303. LDA #00
    8 S: {8 f8 G- X2 J. G& ~- z" j5 w7 R
  1304. STA <Time_H
    3 b4 B, M0 N4 b! [8 ?: j

  1305. ' N) h. x/ u: r; M4 _
  1306. Time_Count_End! v. g* B/ d+ C3 m8 h
  1307. RTS
    ; W0 l5 U2 X( \, ?. q1 f0 a

  1308. 9 q& I% m; K; {7 k3 J' Q8 h2 E1 g
  1309. ;==============================
    ) s3 Q; M* L) }% Q7 W
  1310. Time_ReSet;播放时间重置
    7 K- [+ H. {7 G4 x& @" J
  1311. LDA #$00
    7 s) q; w& D6 O& \
  1312. STA <Time_S
    * h0 D- T& U: z2 R1 Y
  1313. STA <Time_M
    5 H1 D( Q% `% ], I
  1314. STA <Time_H
    " U5 ~, H( ~% v. @+ R5 j3 u
  1315. STA <Time_Cnt
    % O4 V* W- V$ B+ G& r% W6 [
  1316. RTS2 R4 ]8 a) p% m% L/ n  d' ~

  1317. 5 w( p5 m  A* V; m
  1318. ;==============================
      @% [+ A/ O- G) W" Y4 s
  1319. Music_Bar_ReSet;音乐条重置/ \- |, K, X' V( X- t
  1320. LDA #$00# ^/ Z) V. A& ^
  1321. LDX #$00
    - u1 _$ H* x' Y6 I$ R/ L  R
  1322. Music_Bar_ReSet_Set
    % u! K8 p) z& [( Y9 o$ x. F
  1323. STA Sound_Bar,X8 P% B4 S& J8 W
  1324. INX
    : h7 ]$ F% G) K8 H# G& C: M
  1325. CPX #$10
    ( y" t2 ]6 M: K, N0 Z" g
  1326. BCC Music_Bar_ReSet_Set( n9 b, E) J  d- ]8 d
  1327. RTS) `+ o! w7 ~4 f& s# I
  1328. 0 O5 i: L6 U! ~/ N, p/ K
  1329. ;==============================6 Y( m: E- k# Z
  1330. PPU_Data;PPU数据写入* {! J& x: f4 M
  1331. STY <Data_L" c. x# e3 t0 I  q# R
  1332. STX <Data_H/ a% Q  m) c1 f. ~# [: j
  1333. LDY #$FF- k3 E3 ^' A! q/ q
  1334. LDX PPU_Cur
    " ~3 j& ?3 ^! Y( v
  1335. DEX
    ! B7 ~" p8 z7 s7 h/ E$ h
  1336. PPU_Data_Beg
    2 n' s& |0 Z/ a5 l3 S  u, C
  1337. INX
    8 d' t& K' n2 ]: i3 M9 ?
  1338. INY
    + B/ C3 D, B8 \& J. H6 W) v! c% V! O0 O
  1339. LDA [Data_L],Y2 i  k, C: p' x: a. i. H; ^) A
  1340. STA PPU_Addr,X
    2 [/ `% Y! Z9 p% r8 z
  1341. BNE PPU_Data_Beg6 o: m. A& ~( F* M1 Q; k
  1342. STX PPU_Cur
    ( N$ d# q" I! h
  1343. PPU_Data_End
    / W7 }5 L; ?+ _/ ]/ B* D" y( }
  1344. RTS+ c5 o# \. C7 a: n4 m7 b7 b6 ^' J; s

  1345. : L- f( s7 @# y& \1 Q+ Y- c
  1346. ;==============================7 P* R) g9 W; e' c3 d
  1347. Music_State_Show;播放状态显示- C' o7 T% e' h/ k
  1348. LDA <Music_Stop_State; h' u" s1 o% z! f8 Q
  1349. BEQ Music_State_Show_Play- M/ t3 k. X( b) U# Y* b
  1350. Music_State_Show_Stop% ]2 L; S% c9 k; z
  1351. LDY #LOW(Music_State_Stop)( C- M4 E* H, U: ~4 `- d2 v! w
  1352. LDX #HIGH(Music_State_Stop)  Q% w6 M* m( D7 l
  1353. JSR PPU_Data
    / f; K0 X6 Y- R) m; B8 L
  1354. RTS
    , d4 Z% H  v. a  A
  1355. Music_State_Show_Play% |1 M: j% n3 i: g5 ~8 n1 ^% ^7 b
  1356. LDY #LOW(Music_State_Play)
      Z# X# |& t3 k1 D0 n4 [: J8 r3 ^
  1357. LDX #HIGH(Music_State_Play)
    2 c/ W- o- k5 V
  1358. JSR PPU_Data9 [+ Q9 j% L' e* o: \5 @. C& J
  1359. RTS' B3 d+ f# {" {

  1360. - K- X7 x% F) s' O/ f
  1361. .IF SOUND_BAR_SHOW_ENABLE( i2 |, K9 k$ T6 b6 G7 d
  1362. ;==============================
    4 j% K7 X. E7 u6 j5 q- d( e5 f
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    & T7 e2 ?3 r: c8 `! K4 b
  1364. LDY #LOW(Sound_Bar_Text_Data)
    7 y( ~! S2 ~0 }4 e2 L+ s) h& o
  1365. LDX #HIGH(Sound_Bar_Text_Data)" o' a& k& n  D0 \2 [
  1366. JSR PPU_Data8 v6 O( C9 H4 S' K
  1367. RTS
    # j5 S/ `7 E1 V: R- E
  1368. 6 Q+ M6 L' [3 n# y: ~
  1369. .ENDIF
    ) D- z6 i! [$ m9 Y$ G; P$ [

  1370. - @( }* u0 ~/ H+ X. o
  1371. ;==============================
    : ^# Z- U& E' r+ R
  1372. Set_NameTable_Attributes;设置命名表属性
    $ Y2 K0 X* k' Y% H" i+ J
  1373. BIT PPU_STATUS8 I8 l' k+ r; H+ _4 [, n
  1374. LDA #$23
    ' d2 h$ e8 e& ?- C7 q9 O
  1375. STA PPU_ADDRESS) I$ s& L2 v+ X0 y; |- s9 N
  1376. LDA #$C0  Z0 o! Q1 }6 h# r( j. v9 M
  1377. STA PPU_ADDRESS
    : e6 m! k# `5 o, d  y# T, f
  1378. LDX #$00
    8 ^( d$ V1 R7 P3 I) ^
  1379. Set_NameTable_Attributes_Write
    + q4 ^2 @7 r  g; d/ K6 S% ]* C5 c( x
  1380. LDA Palette_Attributes,X2 D0 N+ h" s0 V+ W
  1381. STA PPU_DATA3 j; Q) y. F( P) R3 |# u* _5 f, b
  1382. INX& n: P. H# [1 ~% f7 E7 M. s
  1383. CPX #$40# A4 V4 U/ K, q- }. v
  1384. BCC Set_NameTable_Attributes_Write
    5 B+ d# d+ d+ e% r
  1385. RTS( D, N: |, H- E( @3 W- U$ K

  1386. ' m) z1 R% A3 `6 x5 W0 f4 K- e
  1387. ;==============================
    3 T& \% n, f9 T
  1388. Set_Palette_Color;设置调色板数据% I( l  D! x. a( L
  1389. BIT PPU_STATUS
    ) F5 p/ ?: p7 g. A
  1390. LDA #$3F: H3 v' H, m) S, H
  1391. STA PPU_ADDRESS( j0 n5 x+ B: U8 d8 d
  1392. LDA #$00$ I" [& X2 _, Q
  1393. STA PPU_ADDRESS
      T5 S5 c, K8 K0 K( A" X& [
  1394. LDX #$005 K8 `$ S* t* r
  1395. Set_Palette_Color_Write
    4 @$ C2 d; C# u0 H! B( @( e0 l
  1396. LDA Palette_Data,X8 W+ N8 _& b  z- @+ m" {" r
  1397. STA PPU_DATA
    ' z/ \0 o5 t$ O. B  y
  1398. INX+ m' E) B+ I4 `
  1399. CPX #$20$ k  V/ k- d3 ~0 z$ h
  1400. BCC Set_Palette_Color_Write, J# I* \! {+ Q, y* A
  1401. RTS
    + d0 {; \' `3 |& D8 \$ R4 r* V; j  o

  1402.   E! F8 R! c1 S7 g2 b9 O! u
  1403. ;==============================! w8 H( K6 z6 J. \, ?7 Z& ?
  1404. Init_Palette_Addr;初始化调色板数据+ a* m  t  [) f6 J3 s$ k3 y
  1405. LDX #$00
    & m1 e! D% O& C2 I* u
  1406. Init_Palette_Addr_Write. y: r" O, {9 n* H2 x* ^
  1407. LDA Palette_Data,X$ [7 O) l( m+ N* |' Y
  1408. STA Palette_Addr,X8 m" _' w8 v* B. p- A  R
  1409. INX
    6 {+ Y: x9 r6 h. a& Q- V$ @
  1410. CPX #$20
    $ @$ p: G* @; S2 C1 d
  1411. BCC Init_Palette_Addr_Write) I- |6 d6 v2 U# {
  1412. RTS$ s2 q) p" L+ M) I

  1413. 3 i0 T. w6 d5 V, _+ }
  1414. ;==============================9 C. t0 W. T& q) J, t6 r/ }' K( t, i
  1415. Update_Palette_Color;更新调色板颜色
    . }$ z9 s9 d; U) A( [
  1416. LDA <Palette_Update_Flag
    - g  T) z$ E0 q7 A( q$ T
  1417. BEQ Update_Palette_Color_End
    ' A2 u# S7 u  c+ i' ^$ ^# i
  1418. LDA #$3F
    5 i9 ^. G: _7 L' \
  1419. STA PPU_ADDRESS. \8 Q# Q0 b8 T# A. O$ ^- C
  1420. LDA #$0C
    6 u7 j2 b* @3 O5 @( P$ {
  1421. STA PPU_ADDRESS
    ' s/ d: t  f3 Z$ S+ n: W. |; X
  1422. LDX #$0C2 F: R1 Z; I5 o& C4 `
  1423. Update_Palette_Color_Write: h  v0 A" V, B  d' E7 ]) e* |+ W+ r
  1424. LDA Palette_Addr,X
    , [' {  x5 W! Q8 M
  1425. STA PPU_DATA* G) `  o* F8 V' W* P: B/ Z
  1426. INX* M! [; A; a3 a) d; C6 t
  1427. CPX #$14+ O" Y2 m% i5 @
  1428. BCC Update_Palette_Color_Write
    : B% H4 \" f: G# n3 c" v
  1429. LDA #$00: M7 i: \, s6 ]# B
  1430. STA <Palette_Update_Flag
    % Z! Z6 q: g, X0 K, J
  1431. Update_Palette_Color_End
    6 P1 _  W# \8 |9 {. U1 v7 H
  1432. RTS" i2 P  ^! K/ M; i2 a, k- i
  1433. ) W! [! U) w# C& O/ f+ ^1 O
  1434. ) f' y9 {3 N! K6 b, c5 W4 ?
  1435. Update_Sprite_Palette_Data0 c1 x$ v) @0 V+ ~  Y5 l9 x
  1436. .DB $21
    8 q' O; N2 v5 N( u- G; \, v
  1437. .DB $21; }+ d1 s) E: R
  1438. .DB $11* L) a. H$ C: @+ X! J
  1439. .DB $01
    * l: f5 w2 A5 K, _, b$ U, F
  1440. .DB $01
    9 o0 A7 {6 r0 v
  1441. .DB $115 S9 v, N3 ?$ S" L; f
  1442. .DB $21/ n* y; K) H2 k4 @4 w* `. s' b& i
  1443. .DB $21( k; V# i' M3 j* {9 M
  1444. .DB $119 \' I# b3 ~# [4 X; f4 H6 u
  1445. .DB $01- y) _. P4 @  T5 G
  1446. .DB $11
    $ x5 D& d& L5 E6 t- Q. p
  1447. .DB $21
    , L* @! x! }: F9 K
  1448. .DB $212 Y+ J' U8 X$ I- e8 i
  1449. .DB $118 }0 O6 b4 U9 Q; R
  1450. .DB $01% m# _$ U% O* I: _) R) L
  1451. .DB $11$ Y4 e) r1 D* U
  1452. ;==============================
    5 t: G& z2 V$ z  O. e' T
  1453. Update_Palette_Data;更新调色板数据
    ) e9 k* `( _3 E7 f6 v2 H. z7 R
  1454. LDA Nmi_Time_Count
    . ?( A% Z5 s: E6 X3 d% `& O; {
  1455. AND #$08
      X& |7 `/ z# R2 l9 ~2 ?9 q  Z) N( n
  1456. CMP #$08+ H0 [8 _8 {4 j$ g( {9 t
  1457. BNE Update_Bkg_Palette_Data
    ( Q7 @7 G+ `3 l" c
  1458. 0 `# x! v( x7 @
  1459. Update_Sprite_Palette_Data_Set
    % `( q- X& [+ n
  1460. LDA Nmi_Time_Count& \3 b3 r) f# Y4 R9 T
  1461. LSR A
    ' {$ W1 r# w# y' k9 C: M# y
  1462. LSR A
    % a* |3 M$ ~  k0 f1 t
  1463. LSR A
    7 x9 X$ l! Y7 K3 l+ R. ~" Z# P
  1464. LSR A
    5 }1 L0 Z' o3 q& M" V5 j1 H% K
  1465. AND #$0F
    1 _* W) z. J: N3 Y2 i
  1466. TAX
    8 E9 s  g2 K& `6 b1 s0 t
  1467. LDA Update_Sprite_Palette_Data,X
    5 u) d: l3 T0 T8 B: V# w
  1468. STA Sprite_Palette_Update_Addr% {' o2 [8 K2 u( b
  1469. LDA #$01# Z% {5 w, p9 f
  1470. STA <Palette_Update_Flag
    . i- R1 M* m. k( _3 N
  1471. $ \+ S! r7 s4 x/ e" t$ `" e
  1472. Update_Bkg_Palette_Data
    , Y' N% D& y% f) t- U! ~" h3 E
  1473. LDA <Text_Disable_Flag
    6 s* o) Z/ {+ R0 j
  1474. AND #TEXT_DISABLE_RAM
    " P7 m5 E- H; f2 A9 f8 C
  1475. BNE Update_Palette_Data_End- ^( b% k- ~' Z  E+ q
  1476. LDA <Music_Stop_State
    * J! R9 k7 z- |0 V* |$ T
  1477. BNE Update_Palette_Data_End  M5 L  [8 ~0 `1 J" C6 d3 @
  1478. 7 H' A' n/ W5 y* |+ w
  1479. Update_Palette_Data_Check3 S5 ^# v7 [- j; P' h5 A. ?! ]- _
  1480. LDA Palette_Wait_Cnt
      |! V) X% {7 p
  1481. BPL Update_Palette_Data_Check_Over
    ) P( V+ A9 c' D- C% K+ y  d
  1482. LDA #PALETTE_UPDATE_INTERVAL
    . i% E3 \* K, v/ S
  1483. STA Palette_Wait_Cnt% p' w5 h+ T+ q% y. V2 O
  1484. Update_Palette_Data_Check_Over% R: F$ Q. V. p6 \1 ^
  1485. DEC Palette_Wait_Cnt% p1 n) f% m. s
  1486. BNE Update_Palette_Data_End  g) D0 N9 e" _" \3 }/ C
  1487. ! o& V; p$ P  \; e
  1488. LDA <Text_Disable_Flag2 G9 G$ j$ d- C5 g$ M
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME! b( Q& p) M& S% i
  1490. STA Text_Disable_Flag% c% a. \/ p$ V7 z9 ?6 X2 ]
  1491. INC Palette_Update_Flag1 B9 q6 v% x5 {2 M

  1492. . i$ X) c$ E! `' w
  1493. LDA #PALETTE_UPDATE_INTERVAL6 ^0 d8 g1 v+ G! \
  1494. STA Palette_Wait_Cnt: ^9 f  B2 b5 N
  1495. & F: X4 h" ^) Q; t
  1496. LDA Bkg_Palette_Update_Addr: I  x. j5 I4 A4 T7 |7 y: ^0 Y
  1497. CMP #PALETTE_UPDATE_MAX- l. I- B, ]! C, Q0 F7 A8 t. B8 w) @
  1498. BNE Update_Bkg_Palette_Data_Set! d, O8 ^6 _/ R% P$ S% X! O
  1499. LDA #PALETTE_UPDATE_MIN - 1- S6 M' q4 [9 u1 A3 M. G9 s4 p
  1500. STA Bkg_Palette_Update_Addr
    ' P7 M- ~# J9 E
  1501. Update_Bkg_Palette_Data_Set5 p' E3 _# P( a8 C- E, y' e
  1502. INC Bkg_Palette_Update_Addr7 I8 h: ]9 v" j; T, J

  1503. 8 |6 S2 r3 ?8 p
  1504. Update_Palette_Data_End3 ~2 }8 K/ g: n7 y3 E" |. U1 X9 h- N
  1505. RTS
    ; L4 n( ^  M7 ~% W  H
  1506.   E2 Z( Z" C0 u% `% P
  1507. ;==============================. s% D$ x. F' A1 s6 J1 Q
  1508. Show_Music_Text;显示静态文本, v( u. M4 r( I- i' i- T! j
  1509. LDX #$00) y$ a# j4 t  H+ B
  1510. Show_Music_Text_Set( K1 }7 t! ^7 s- s8 c! n2 l0 U
  1511. LDA Static_Text_Data,X
    2 l  O8 r: a7 g2 Z- \! _6 V" @( `
  1512. STA <Data_L1 ?/ m0 w! P  l
  1513. INX* L0 ^6 v1 t. i
  1514. LDA Static_Text_Data,X  K0 @9 d$ P& e3 P
  1515. STA <Data_H& g$ D. r% f: A8 t" t  U; V) ~& R
  1516. INX
    2 y( N9 V! N, E+ ~5 T
  1517. LDY #$002 e# x" M+ M$ S+ y2 D/ b% K
  1518. LDA [Data_L],Y
    + ~) l, {$ {1 M: q+ ^
  1519. STA <Data_Cnt
    $ d# s# @/ [( Q8 }
  1520. DEX
    ) Q2 s8 P8 Q$ E# ?3 J$ _) y
  1521. DEX% v* B3 |+ Y4 f1 q; Q9 l% ~0 V
  1522. LDA Static_Text_Pos,X( b. `; x( y! D* \5 O
  1523. STA PPU_ADDRESS
    ) R8 ~7 q- q! O: |
  1524. INX# T% Z/ y( e# _
  1525. LDA #$20( C( o1 q5 X* {& C" S$ G% E
  1526. SEC
    % C$ @" ~' ?* [- l0 B! m9 ?' [
  1527. SBC <Data_Cnt. Y! t% n4 T7 K4 \
  1528. LSR A
    9 i; w1 x# O) K4 ]6 q0 `7 v" l
  1529. STA <Data_Buf
    3 K/ l; o& F8 y; Y' {- Y1 i0 A
  1530. LDA Static_Text_Pos,X" Z8 B; ^0 ]+ p: `
  1531. AND #$E0
    , R6 p+ V0 E# i( i- S, U1 I! y- C
  1532. CLC
    , }" ?, F, q( U# {! ?9 i5 G
  1533. ADC <Data_Buf; Y6 C$ a6 ]1 i* Q
  1534. STA PPU_ADDRESS$ X5 l1 n& [5 B) b' h9 P, z
  1535. INX7 S3 Z* @# l! Y* a8 i1 N' i
  1536. Show_Music_Text_Set_Write
    7 e* U+ J5 m4 T& n& [" x
  1537. INY
    , [: e! {1 Y% E1 a8 O1 W, |
  1538. LDA [Data_L],Y4 u6 ?+ o2 J4 t
  1539. STA PPU_DATA
    " ]! O4 c6 W; N' R: W2 Y4 y
  1540. DEC <Data_Cnt
    & b4 M% L8 c6 e" `7 K1 p$ O
  1541. BNE Show_Music_Text_Set_Write2 H, |5 b/ D6 G1 |
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos0 G7 A2 d4 y* X- V, J
  1543. BCC Show_Music_Text_Set  c" j+ L6 e/ u+ \
  1544. RTS) d, }* k5 R6 P7 j
  1545. 4 ?. [- J+ x# X8 l/ }; H
  1546. ;==============================6 x9 `$ w- f  A
  1547. .IF Track_Name_Pos;显示曲目信息+ N7 ~4 i: K; p, I
  1548. ) W$ a3 L  j3 N) z0 N& W
  1549. Clear_Track_Info
    * J* x+ g& ]( ?) \1 j) z/ m
  1550. PHA2 T# M7 J0 X- |! ~- a( F% S
  1551. LDX <Music_Item_Cur
    6 Q  n+ n0 t6 n! I* S# t9 v1 g( S
  1552. LDA Track_Name_Addr_Flag,X
    & v; p9 j" u2 a1 P, W% V
  1553. BEQ Clear_Track_Info_End_Ex0 l* f! j2 C6 B! h1 M# ^% O; Y
  1554. PLA
      b, n  P; X7 S0 [1 T9 r+ z
  1555. 5 i( @# ~1 a, ^1 ]- R* s& e
  1556. LDX PPU_Cur' s  z& p2 h/ k
  1557. PHA
      C3 X' i+ x3 D) l! ~$ f
  1558. LDA #PPU_MODE_CNT_CLEAR- D) R0 ~. F: S
  1559. STA PPU_Addr,X& k/ ~" u: m: J! ^# {1 l
  1560. INX$ z6 _4 [, M4 n  b6 s* g
  1561. PLA5 l2 T' R. Y+ T" j
  1562. JSR Show_Get_Track_Name_Center_Pos
    * z1 b( y1 U" q' k1 I
  1563. STX PPU_Cur3 Y9 i  ~& n; S2 {
  1564. Clear_Track_Info_End
    ) n1 |, y6 L! O# F
  1565. RTS
    ; H* J0 E7 y7 b5 W; Q
  1566. Clear_Track_Info_End_Ex9 ?& x& L3 K" X1 F( v  |/ ^' ^
  1567. PLA% N+ L3 l+ J0 ^. M" Y) P# u
  1568. RTS' B1 N* B: _/ f- G

  1569. 3 ?1 E- R/ m# J* |/ C! _
  1570. Write_Track_Info
    ( s; [/ ]' x6 z
  1571. PHA
    ' e; P  \; ^# b
  1572. LDX <Music_Item_Cur0 Z4 n! F! t; c8 Q! n: u
  1573. LDA Track_Name_Addr_Flag,X
    ( j# u) F- S/ Q7 A( W* Y
  1574. BEQ Write_Track_Info_End_Ex, p# y! `6 f7 S
  1575. PLA
      e0 u. u4 o$ C) a  J
  1576. ) X8 O1 e7 z- z6 w8 X
  1577. PHA
    ! ?5 l1 ~8 {+ n7 P7 B3 Z
  1578. LDX PPU_Cur, N8 T/ ^7 C7 ?
  1579. LDA #PPU_MODE_CNT_LINE
    / `7 }& {5 J: x$ F1 Y
  1580. STA PPU_Addr,X/ w4 U, O" k2 b/ V
  1581. INX+ E/ V& R  g' k0 Z; _" r
  1582. PLA* h. _3 C; Y! W1 W5 Z% ~
  1583. JSR Show_Get_Track_Name_Center_Pos1 q4 j: z/ V8 j9 n
  1584. Write_Track_Info_Data1 y( W) d; x2 O+ q( A
  1585. INY, z( P" k  o. H5 e1 k+ C8 b+ J
  1586. LDA [Data_L],Y
    : x$ \' C3 C; o4 C
  1587. STA PPU_Addr,X
    1 X2 i/ C+ C2 Z2 m  X" R, ^" |+ T
  1588. INX9 {7 q5 H: ~* J  _" i6 m
  1589. DEC <Data_Cnt- l( f' i( n: T$ \  M
  1590. BNE Write_Track_Info_Data
    ' a$ [6 w+ {9 T
  1591. STX PPU_Cur
    9 i' [0 [5 ]/ G2 {
  1592. Write_Track_Info_End
    ! A$ _' l7 C$ Z; o5 ?( T7 n( n* Q1 U2 {
  1593. RTS5 w6 j- c( E  Y! Q
  1594. Write_Track_Info_End_Ex
    5 a1 ^0 O4 i8 z" ^9 ~0 L1 a2 L
  1595. PLA
    1 s$ a0 a2 B5 T, q
  1596. RTS
    ; u4 ?: s' |) t, T  L# w' N

  1597. " d/ Y9 }. g  N9 o/ W
  1598. Show_Track_Info
    $ i# |! `. x& D& D
  1599. Show_Track_Info_Clear
    " r3 v2 Q  y6 v, @5 r! l4 q
  1600. LDA <Music_Last
    8 A6 i) G. O8 p$ @; D' J$ Z
  1601. ) |& ^. m, a+ d; G$ D8 _
  1602. JSR Clear_Track_Info, T6 I  {( o" v" ~5 ~5 E) b/ A2 k6 `

  1603. + w% a; v9 {; y
  1604. LDX <Music_Item_Cur$ V* t4 I+ ^2 T' G+ L- c
  1605. LDA <Music_Cur,X
    6 Y9 O- K/ g2 W( I9 b
  1606. JSR Write_Track_Info7 X4 i+ @, S3 z& u8 O* f
  1607. RTS
    * s. F: I' y! E, {" `

  1608. ) m& i) _0 W3 z9 u# e+ k
  1609. ;==============================( L" p9 b1 i; H" [8 Z
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置  x1 }! S8 J* j* g" ^* x/ E

  1611. 0 l7 F7 E. }9 M& U; Q" n+ v
  1612. ;取出集合名索引
    . s) R; L5 Y" {! \1 V* v# J
  1613. PHA
    4 _& n$ J# d2 G

  1614. 7 h1 S$ V, J: Y' u9 h9 ]( C
  1615. LDA <Music_Item_Cur
    + `) S0 }8 A0 w
  1616. ASL A, p8 r8 ~3 L# z& m+ k) Z/ S
  1617. TAY3 a; M" ~+ E% r4 q4 q
  1618. LDA Track_Name_Addr_Port,Y
    & Z$ J2 t3 E# u
  1619. PHA
    ' r* H7 J- v0 a3 U+ d" _) j" {% q
  1620. INY
    8 s$ w0 ?3 Q# C5 v: J4 g
  1621. LDA Track_Name_Addr_Port,Y
    6 T! t% Y3 W  x7 z
  1622. STA <Data_H
    3 B, X# z& m, [9 ^" z! W- P
  1623. PLA
    ; o, O  G& O; V( I' t" ]; L
  1624. STA <Data_L
    3 j0 N- z% d% G) Q
  1625. # c* k0 y* m# v% a6 f% j* k" X/ t
  1626. PLA( K& r/ o+ y) R! F  z

  1627. ' a; i& x) R4 o9 a
  1628. ASL A8 U  R, H( t3 Y) ?8 }( \
  1629. TAY
    ( e& ]' X9 d# m' e! S, z- h% v
  1630. LDA [Data_L],Y
    : w0 A! K6 m0 h, r* G
  1631. PHA; m) [% g6 ^; v9 ~1 w
  1632. INY
    1 s! R- h, R5 `# c& b& p5 d
  1633. LDA [Data_L],Y" B$ ?: b# C; y6 ^
  1634. STA Data_H
    " ^; u: ?8 r8 O5 y  `/ ~% ^- f$ ?( x  g
  1635. PLA
    6 p" o3 ^' D, ^! I
  1636. STA Data_L
    / h& D7 X! s' W" J

  1637. ! A" ]+ E$ d% \( |: q' f! e
  1638. LDY #$00
      I* m# O- z& X+ Z! u6 z
  1639. LDA [Data_L],Y& u2 p! }# W$ f1 i( F  y
  1640. STA <Data_Cnt
    1 {1 j! X7 S1 I% ^8 [% W
  1641. LDA #$20* V9 n2 f0 B4 G8 I6 w
  1642. SEC
    " }1 K, H! A. s8 k2 z
  1643. SBC <Data_Cnt
    4 u' l# Q/ P* z
  1644. LSR A
    9 u- @& q6 j; \+ y5 ~/ X6 \. T8 V
  1645. STA <Data_Buf. _+ h# F7 X' ~! W3 a9 k# C
  1646. LDA #HIGH(Track_Name_Pos); L' Y" ]7 i; F
  1647. STA PPU_Addr,X) n) v# J. i6 K7 \# d& C0 O0 H& t
  1648. INX
    , D7 M) Q" Z: Q( E# E. w
  1649. LDA #LOW(Track_Name_Pos)
    % a6 n$ ^( u$ f) h
  1650. AND #$E0
    $ d: \4 N5 ]' o7 x1 }
  1651. CLC
    5 e) o* M' h# k0 t
  1652. ADC <Data_Buf* h, {' b" C- A1 f
  1653. STA PPU_Addr,X
    & D! p5 E* @/ V7 |& U- w
  1654. INX& X6 R! ]  D* ^$ u3 W
  1655. LDA <Data_Cnt) e7 |3 Y' c& C- C
  1656. STA PPU_Addr,X
    9 \/ b8 @& p/ ]( j) [; {! a
  1657. INX
    , z, r( ~: o* _5 H8 s
  1658. Show_Get_Pos_Center_End
    8 \8 @6 Q6 X4 P! k
  1659. RTS, ^0 Z! _# x& W) y0 m
  1660. .ENDIF
    ! S5 ~/ e3 {) M- L" I
  1661. , y* k( j2 ?6 _' H+ Q5 J4 b
  1662. ;==============================6 x/ w* I& N. d1 W4 Z
  1663. ;音乐端口清除
    $ y$ u- h* `2 f0 t* h. A( l
  1664. Sound_Data_Clear/ l" H! t8 s1 @) V/ R# L8 M
  1665. JSR Sound_Port_Clear
    . ?) H+ b0 T9 {) v( |# C/ b- G, N
  1666. JSR Sound_Ram_Clear, o; L7 _0 {. O
  1667. RTS
    * u( _. \  q* i& r# U0 Z
  1668. 4 B3 t: Q7 A- ]0 W
  1669. ;==============================
    - u; ?' r9 O- H& s# g
  1670. ;音乐端口清除5 F: @- A) l# F5 ^6 u
  1671. Sound_Port_Clear) w# y' Y, |- c$ s: N
  1672. LDA #$00
    : f. A1 s2 Y" T1 X( J
  1673. STA APU_STATUS) O. b4 i. J% N3 M
  1674. LDX #$00
    / K: D6 U, J1 p! P6 }: t+ k
  1675. Sound_Port_Clear_Write5 X7 U4 [8 [2 B( o( E, u9 e
  1676. STA $4000,X' Q, d* G9 O$ W7 ~
  1677. INX$ G% }# C5 J' @7 w# d, c
  1678. CPX #$144 X& a( f( i0 W0 w& F7 K) R
  1679. BCC Sound_Port_Clear_Write
    ; e$ z6 i3 k! L; t' H3 `6 R' G7 b
  1680. RTS
    ! [3 F" b, t1 I2 c) |" W
  1681. % [! i/ W, i- V7 X
  1682. ;==============================
    ! Q& p  u9 j! l  f* r
  1683. Sound_Ram_Clear;RAM清除
    / k  g3 ?) r- F" f3 H
  1684. LDX #$00
    # H% w) t' N  f: i+ U0 n
  1685. LDA #$00
    / Y( }1 L+ V* F  a: Y. V: U
  1686. Sound_Ram_Clear_17 U' j+ g' y" T/ s
  1687. STA Sound_Ram_Addr_1,X
    : F/ o6 t3 `9 a9 h/ n* F8 r- i0 D- A  U
  1688. INX$ W) [2 |  _  ~9 ^! \+ ?
  1689. CPX #Sound_Ram_Addr_1_Size# T; I) S* ]7 E4 H
  1690. BNE Sound_Ram_Clear_1# {9 U. D, u0 V. s7 h1 r$ _
  1691. LDX #$00/ @9 _5 {: m; h- k
  1692. Sound_Ram_Clear_2* p  V4 U+ q3 j! L, R+ c
  1693. STA Sound_Ram_Addr_2,X
    $ g/ D7 d/ W# u3 X* v" d
  1694. INX" I* j8 A% h6 w
  1695. CPX #Sound_Ram_Addr_2_Size
    8 x% o" g4 w/ R1 L( ?7 `7 f6 T/ p
  1696. BNE Sound_Ram_Clear_2( a5 ?- @6 a" W, F
  1697. LDX #$00# W5 O9 q4 a  q9 Q) _6 c
  1698. Sound_Ram_Clear_3
    ' @/ F! m: K* G
  1699. STA Sound_Ram_Addr_3,X
    % w6 L7 u* \+ [! [
  1700. INX
    & [6 ~+ o, |& t5 A* w2 s
  1701. CPX #Sound_Ram_Addr_3_Size
    % j  ?8 e9 A# G# X3 O' D
  1702. BNE Sound_Ram_Clear_3
    + i0 `7 \& E! e- L
  1703. LDX #$00; Z- j" l6 s& \9 \+ c* o: T: {
  1704. Sound_Ram_Clear_4
    : q+ h0 n4 S0 s5 e$ ~0 c( L
  1705. STA Sound_Ram_Addr_4,X$ ~6 _- I- a  W1 ^
  1706. INX! Y: s' I/ ?2 k5 w
  1707. CPX #Sound_Ram_Addr_4_Size
    ; g- F( V% t" {) W2 A6 s/ v8 }. Z
  1708. BNE Sound_Ram_Clear_4) F" U; m5 O( T8 N$ o
  1709. Sound_Ram_Clear_5
    0 c& H/ C7 F# {9 A* B+ M  z
  1710. STA Sound_Ram_Addr_5,X
    1 B  w' {! E: x1 G; @4 z3 y
  1711. INX% z9 l9 O# s$ S) O  H
  1712. CPX #Sound_Ram_Addr_5_Size
    ' V6 ^# d( E& v' R
  1713. BNE Sound_Ram_Clear_51 v/ B' p: P% y7 f4 d  {, [5 c# ]
  1714. RTS; O+ Y2 Y, d1 c
  1715. ' ^, c/ }8 q% e
  1716. Get_Music_Collection_Name
    * V2 N* J" V8 T: ~- G
  1717. PHA
    9 z; s. B9 }: N" u! m$ J7 N
  1718. LDA <Music_Item_Cur
    3 H) z; ^# a8 o0 p+ z. K6 U. j( R+ v
  1719. ASL A! ?5 d- F5 F' X6 v$ O: R
  1720. TAY. q0 z0 R; ]7 }
  1721. LDA Music_Collection_Name,Y7 g2 t- H# N# u* s# T8 r; ]
  1722. STA <Data_L
    ( C/ c3 y3 {, }; x& y7 }) ~
  1723. INY
    ) {+ v! S6 s6 m4 K) B8 D/ n( @. L
  1724. LDA Music_Collection_Name,Y
    ' j: l( c6 K+ L8 s. o8 N' N
  1725. STA <Data_H
    * m; Y( n5 V% Y
  1726. PLA( F$ l% U9 C4 y' @- }
  1727. RTS- c+ {, {  W6 b& }
  1728. 5 H1 p$ Q, S* s, i2 S
  1729. Set_Sound_Total
      M/ r+ E; W: X+ P
  1730. LDY <Music_Item_Cur& x; t" u1 H8 g
  1731. LDA Sound_Total_Port,Y
    0 w) D: N' n5 @( H% }
  1732. SEC
    9 Y# u. W) q. _- m- s
  1733. SBC #$01/ n( l* G/ r; I3 H; h: i* M1 _# m
  1734. STA <Music_Total
    ; f* w1 N) D6 L  p( c/ Z1 ?' C2 z
  1735. RTS
    / f/ D/ ]/ x2 ?
  1736. ! P& Q' y/ F7 N6 E. G
  1737. Get_Sound_Start
    9 I( g6 P, X, X7 ^! L" H
  1738. LDY <Music_Item_Cur
    4 x* g; y( y; e& z) P
  1739. LDA Sound_Start_Port,Y
    # X* k  |" x- n4 N
  1740. RTS
    ' [; G7 `1 _% Y8 ]" C
  1741. ( Q. l5 @* V  |# H3 u) j
  1742. Set_Sound_Init_Port
    - W  A% d. H4 K3 }  ]; t- v
  1743. PHA/ L) D1 L' Z1 ~
  1744. LDA #$20% t" r5 o" A1 z1 [- X9 N& L3 V
  1745. STA <JSR_Addr_Op
    . m8 {  S! ?: ?( \4 Y
  1746. LDA <Music_Item_Cur) W* d8 x! v/ j3 }) s
  1747. ASL A
    # w2 L; Q; D9 l* _+ T
  1748. TAY
    " p3 Z3 a" v! X8 _" ?- u5 i6 d; g
  1749. LDA Sound_Init_Port,Y
    9 c' p  I) N+ @& d6 h: O
  1750. STA <JSR_Addr_L
    : A% P( s# D7 x
  1751. INY
    ) r- `+ C4 O* m1 n
  1752. LDA Sound_Init_Port,Y1 }0 z! z1 _0 j, L& r- A+ x
  1753. STA <JSR_Addr_H* q3 U" o% _" _! [
  1754. LDA #$608 m% ]# m( N/ ^$ _/ B7 ~; v2 r
  1755. STA <JSR_Addr_Rts; E  M8 i7 w; a5 \
  1756. PLA# o! L. U1 I3 H& O4 r
  1757. RTS; W1 b9 L  j* b! Q4 i
  1758. 2 G' N* Z3 S7 I4 M! K; z# L5 l
  1759. Set_Sound_Play_Port& Y& U+ U* B3 \; Y& r) G
  1760. PHA* i/ @$ Z6 W0 x# U
  1761. LDA #$20
    6 `. \8 d  i- K- R% H+ H
  1762. STA <JSR_Addr_Op' e8 {- [) i5 X5 z' ]3 V+ M3 k" |
  1763. LDA <Music_Item_Cur
    0 R: }" _( `; a
  1764. ASL A
    0 |9 E. t2 l+ I/ ~1 q4 m- o: ?! U! e
  1765. TAY
    ! f" u: `' E& f. k0 V& O; k1 N
  1766. LDA Sound_Play_Port,Y- Q7 F) h" Y2 R% [9 _/ s
  1767. STA <JSR_Addr_L
    1 Y# W+ J5 `! r- q1 J) C
  1768. INY( e$ y+ y* T2 e
  1769. LDA Sound_Play_Port,Y0 X5 G, x7 q( Y% m
  1770. STA <JSR_Addr_H
    , ~/ s: s5 r& Q: W5 `5 o
  1771. LDA #$60
    ! {( l' P( L7 O8 H* [/ U6 D) B$ e* Y
  1772. STA <JSR_Addr_Rts+ j. \/ l% G% X+ s
  1773. PLA' o( n: D+ i: v) q8 E
  1774. RTS+ a: G7 K2 p( ?  S- D+ z$ D
  1775. . Q' _* N6 g! i) {; V. K1 x1 K
  1776. Set_Sound_Reset_Port
    8 v! T" t4 a- `( O& \2 d
  1777. PHA) Y6 ~& c' B; y5 m$ U; }
  1778. LDA #$20
    ( C" t  ?9 C$ A4 E/ K3 ?) Y6 b) {7 W# b$ @
  1779. STA <JSR_Addr_Op
    8 s5 {, C; g) ~/ e( U
  1780. LDA <Music_Item_Cur
    6 J, P: D) ]' i) o) m2 x
  1781. ASL A7 F' E, z" b$ {' Z2 T& M" ^7 J- o
  1782. TAY! g' \* Z7 K( I6 `/ R  U/ I
  1783. LDA Sound_Reset_Port,Y
    ) Y0 S5 [1 `* x! T9 j
  1784. STA <JSR_Addr_L$ n' U8 B, {$ M0 A
  1785. INY
    $ K0 Q6 ]* |2 B* ], w, ~
  1786. LDA Sound_Reset_Port,Y+ ^" C% N  X! c
  1787. STA <JSR_Addr_H4 Q9 V1 X: J' Z- {2 S8 K
  1788. LDA #$60. b5 E$ i* I  O( t
  1789. STA <JSR_Addr_Rts
    * ]' R4 i) M- ?' g7 p8 t
  1790. PLA
    , U" l% `/ U9 ]1 }! l6 u+ W8 S
  1791. RTS
    , C! A1 Z: n1 _" U

  1792. ! T5 g3 K; b2 N( l2 r1 P7 a
  1793. ;初始化音乐bank
    + G5 j) m7 ~& l% V# K' \3 d
  1794. Init_Sound_Bank
    + ]( Y5 a8 f- H% f
  1795. LDY <Music_Item_Cur+ x* W) Q& O% f" x
  1796. LDA Sound_Bank_8000,Y. t. B' H, W3 F5 p7 [! B
  1797. STA <Music_Bank_8000
    * G1 O7 H! i1 {- _$ c) X3 p
  1798. LDY <Music_Item_Cur
    ' u. ~' k2 \5 e1 Y
  1799. LDA Sound_Bank_A000,Y
    2 I# M$ b) d$ T  x0 Q
  1800. STA <Music_Bank_A000
    ) v- r' x- ~4 ?$ T0 S
  1801. RTS8 C( `  c4 I2 O

  1802. 2 H8 _, E7 X  y2 @) G/ V+ V9 j
  1803. ;==================================================4 `7 P; r, T1 s6 B" x+ g
  1804. Sound_State_Reset;音乐状态重置3 l0 |' P# _1 \; m+ f8 S1 b% v9 C
  1805. JSR Music_Bar_ReSet        ;重置音乐条
    ) b, W7 T4 w) c7 H, _
  1806. JSR Time_ReSet             ;重置播放时间
    5 ~" O  r) |# Q% Z# F

  1807. . m. X) E9 s& f
  1808. LDA #$00' Y; V3 X. _, _) V
  1809. STA <Music_Stop_State
      r' f$ m3 P% f+ _' L
  1810. JSR Music_State_Show       ;显示播放状态) P: Q- \. l  C- \$ t" s/ @
  1811. ; ^- T! W6 I9 t3 Z1 O1 b0 N
  1812. .IF Track_Name_Pos
    6 C3 _9 ~; o7 u  B2 U" G% X
  1813. JSR Show_Track_Info        ;音乐曲目名显示( U6 d3 f1 S6 b
  1814. .ENDIF
    2 o3 z$ \2 i  ~! A

  1815. . W* ?9 u0 O  G
  1816. RTS7 }+ i, g/ Y( M
  1817. ( S2 K: R/ @" Q, G
  1818. ;==================================================
    5 H+ M2 I# P5 V" c  o5 [
  1819. Sound_Init_Proc;音乐初始化处理
    1 Z& q& L' @* T0 M0 h
  1820. PHA6 p( e' M. R/ ?" V2 C4 z* u  B
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址7 b+ ^% H& I& d4 a4 }+ S
  1822. LDA #$00) Y- [6 w& S; X5 \) `  h* o
  1823. STA <Scroll_H               ;重设水平滚动& k) t" N7 t  g, M2 j
  1824. LDA #$0F
    ' x& ?) T7 q# i9 K0 D
  1825. STA APU_STATUS/ F9 i9 X; R  z' f) ?$ z
  1826. PLA7 Z3 |* ^( }7 b; D' y' W2 g
  1827. JSR Sound_Init             ;音乐初始化
    " T$ N3 q1 Y' a1 H
  1828. JSR Sound_State_Reset      ;重置音乐播放状态" v9 F8 v& _0 j7 U/ A* J( D' }
  1829. RTS
    . b. c/ U; P2 k) S

  1830. . n4 n# x  r* W
  1831. ;==================================================9 V/ N; e) Z& |3 U2 }/ R
  1832. Sound_Play_Proc;音乐播放处理1 C; Z4 v( z( n) h
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址) w6 M5 f8 s: U3 {' u& `9 \
  1834. JSR Sound_Play             ;音乐播放
    : U6 ?- u2 b5 c
  1835. RTS
    ) @8 \, W* m" R; {
  1836. / k" z, N, F. O3 E
  1837. ;==================================================" l7 d- H. Q/ i+ |, v
  1838. Sound_Reset_Proc;音乐重置处理
    & u1 r+ t1 c: Q! m( E. o
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址: d$ z, G! B9 S4 `2 y% y5 b. Z' i" H
  1840. LDA <JSR_Addr_L1 v3 c0 }9 N1 h
  1841. ORA <JSR_Addr_H
    ) Q2 S4 h" O$ L0 ?" f
  1842. BEQ Sound_Reset_Proc_Default
    $ Z. T; O$ S- d* x1 O
  1843. JSR Sound_Reset            ;执行音乐重置
    # h" f" }8 B; n9 M* o# E+ l+ i' e5 c/ L
  1844. JMP Sound_Reset_Proc_Init_Sound
    - D9 p" ^  l! I0 q/ X! m% f/ c6 k

  1845. 4 ~" a' ]+ L& _, M: Z
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    7 \: [7 v' x) J$ W7 B7 J* w* m
  1847. 6 Q. u6 Y5 ^  B! ]
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断5 W+ K2 t: }) N8 E
  1849. LDA #$00
    * g- w8 ~, R# X
  1850. STA PPU_CTRL
    0 T  E/ h% p+ n4 z6 c

  1851. . a: ^% r: [/ _4 o$ _7 ^+ ^. u
  1852. JSR Sound_Data_Clear; g# q+ V, ], F
  1853.   m+ O$ `$ n6 K- F" y) u* Z; ]
  1854. Sound_Reset_Proc_Default_Wait5 z$ N7 C' E5 A
  1855. LDA PPU_STATUS
    ) B- \4 t$ Z& i+ a4 j3 a, ~
  1856. BPL Sound_Reset_Proc_Default_Wait
    2 C# w# l; y0 x  F* I

  1857. , X7 m  U" v* O7 f
  1858. LDA #$00+ a% @8 q. N2 [5 ]& i% E# \' t
  1859. STA PPU_ADDRESS/ o4 l, ^0 L5 K1 Y9 y: W4 T2 z' l
  1860. STA PPU_ADDRESS
    3 [0 M! @5 j- h( y, I: @0 G
  1861. STA PPU_SCROLL
    5 @0 q- S; q1 s& Z! x! l8 n' r
  1862. STA PPU_SCROLL) |: `0 s0 p+ `" Q$ o

  1863. : j1 D1 {! [/ |
  1864. ;恢复PPU控制
    4 f; J) d/ Y6 ~$ c5 o
  1865. LDA Screen_Ctrl$ `! ^; U" F+ |+ `
  1866. STA PPU_CTRL
    1 ~9 o+ \" q3 ]# o" h$ z

  1867. . G# G0 F" I$ x( |9 k# c
  1868. Sound_Reset_Proc_Init_Sound
    ! e8 R0 X% e+ r" h# H+ H# t
  1869. LDA <Music_Stop_State; P( r5 r  h2 m" m3 w& t, ?
  1870. BNE Sound_Reset_Proc_End
      Q- F' D, p) p& _5 q( b
  1871. LDX <Music_Item_Cur2 Q: T5 i) l" H* G" r
  1872. LDA <Music_Cur,X. n* h  X1 i# X, i9 K) i+ H
  1873. JSR Sound_Init_Proc
    : z  m4 V$ ]. S$ k6 h5 w8 t3 P
  1874. Sound_Reset_Proc_End! L$ w  ^' ]2 V6 |6 U3 r* v$ o1 U
  1875. RTS; Z( C: x( I, I
  1876. # r1 V9 M/ P. a7 a- M
  1877. ;==================================================
    5 b5 I- y& m& V" E
  1878. Clear_Item_Text;清除页项目
    3 D: P) v  [$ A" J, p4 O
  1879. LDX PPU_Cur
    . D* P, {# y' _
  1880. LDA #PPU_MODE_CNT_CLEAR8 N* n: O6 }9 ~7 d
  1881. STA PPU_Addr,X
    - c0 k9 b2 @6 n8 Z
  1882. INX0 v: u% s9 P! X5 B3 v6 l

  1883. , V; c5 E4 a6 m/ s( g
  1884. LDA <Page_Last
    2 N/ X+ b' b1 O' r4 y& R6 A7 a" D
  1885. SEC
    " A+ D; |. G  d: V5 a
  1886. SBC <Page_Last_Index! A6 N, i' g, p$ |# X
  1887. ASL A
    : d- I# a: l2 M  N+ s0 ]: z
  1888. - |! T# o; P- S
  1889. TAY
    9 j* u7 e5 [4 }6 Y
  1890. LDA Item_Pos_Data,Y
    0 D* d6 ^% n  D: c
  1891. PHA
    8 P3 U: u0 |9 K  G6 a: e
  1892. INY
    0 T0 h, X. f: L9 y( L
  1893. LDA Item_Pos_Data,Y( E, J3 c! ]0 ?8 E# G# s
  1894. STA PPU_Addr,X
    5 X' V& H" F9 ?/ [; F- q8 R8 o; {
  1895. INX
      ~5 ~  ?; R9 s- H
  1896. PLA" H4 J3 b) t, ^/ p7 q+ h! l
  1897. STA PPU_Addr,X+ |3 w2 y' z7 T
  1898. INX
    9 M  }/ Q+ k' P; B! u! ?

  1899. - n6 l2 T; T' `% e. J" F
  1900. LDA <Page_Last
    # w! I0 L- W, N" ?
  1901. ASL A
    ! _* l8 {( w2 D7 h
  1902. TAY
    # {+ o5 K% e% r% D! b) u
  1903. LDA Music_Collection_Name,Y' t2 r1 H* h6 V, u6 ~, Q+ l4 i/ j4 z
  1904. STA <Data_L
    # S: P$ _$ t$ [. s/ H
  1905. INY
    0 L: v8 j# D: f$ l7 J- r' R! |
  1906. LDA Music_Collection_Name,Y
    ' }5 {5 A! |% f
  1907. STA <Data_H+ V2 N* z: q8 F$ W4 U( l$ D

  1908. 1 p1 o' n1 w' q
  1909. LDY #$00
    ( J" Q9 o6 `4 D9 A
  1910. LDA [Data_L],Y
    , ~# g$ B. N" G/ p, S
  1911. STA PPU_Addr,X
    & \. e' y$ \/ z% L
  1912. INX: f) @2 |1 C2 R4 M# T
  1913. Clear_Item_Text_End5 s# U! p9 a) t5 ^9 T9 {
  1914. STX PPU_Cur
    " P- N; ]. f8 ?9 M# j; N9 D
  1915. RTS( M( e$ Q( s2 M! X, m8 }

  1916. ( O' f9 N% y/ U; Z# n
  1917. ;==================================================2 J' r: `0 H) S. d. P9 U. o
  1918. Show_Item_Text;显示页项目1 V# g. k  |% K9 u- d+ `+ G, i
  1919. LDX PPU_Cur
    ( {: [# ^$ C% l3 S% u
  1920. LDA #PPU_MODE_CNT_LINE( d- P: B5 ~! [# J0 V
  1921. STA PPU_Addr,X
    2 w# F6 p/ g3 z/ k' A- j$ c; [
  1922. INX
    7 m* j! r  p/ l; J
  1923. LDA Page_Cur" }7 x+ ?  S- t* |6 P3 n1 v* y( R
  1924. SEC
    + [2 V# `" P+ C0 D. V0 c- e, y
  1925. SBC <Page_Cur_Index6 h9 e+ j9 x( X. M$ D% A
  1926. ASL A
    / S! X: c: ?3 d# e) b+ F' S0 D3 }4 |
  1927. TAY1 L# q. O! S; n" S9 G
  1928. LDA Item_Pos_Data,Y4 K! I# {; ]+ m% U: @" J
  1929. PHA, S& y1 I- l. `  ?8 |% C  k+ z  L
  1930. INY6 W7 ~9 l3 {; S8 u" _, n  S3 ^
  1931. LDA Item_Pos_Data,Y8 i4 d$ V+ Z9 y  O4 j
  1932. STA PPU_Addr,X
    $ Q/ B6 _4 G6 K8 G$ b8 J
  1933. INX4 n; f* ^8 J& W( h% G
  1934. PLA/ D9 G4 u  G- N, ?) `. ^  r; @
  1935. STA PPU_Addr,X+ A. U. E& A* w+ c" X, A4 c
  1936. INX
    % M1 X1 Z( c% _4 y0 h+ H1 ?. ~" ^

  1937. / l3 q- y! U2 ?8 N: {' T& m/ u
  1938. LDA Page_Cur' L- Y$ `3 _4 k3 i- `3 M' b! o# t/ L
  1939. ASL A
    / @4 X! p: n+ c# S1 E- M6 Y9 _. a
  1940. TAY
    8 ]# F7 R% o8 Y, i: N: q6 _
  1941. LDA Music_Collection_Name,Y" u4 I, t' P. V# C: e0 h8 E
  1942. STA <Data_L
    : J5 d: m* e- W1 B, Q
  1943. INY! V4 n9 H) I1 p: l4 n9 V% \) {
  1944. LDA Music_Collection_Name,Y5 n5 F  b) q9 B. W( h! P: f9 ^
  1945. STA <Data_H- ^2 f2 [9 R2 q% R

  1946. " k2 P4 Z# w; v* l
  1947. LDY #$00
    1 K, O5 Z& b, d8 y& w
  1948. LDA [Data_L],Y* N+ x+ k1 ~  E4 d0 _
  1949. STA PPU_Addr,X! t5 q7 h* A) b! S
  1950. STA Data_Cnt* L% w0 u4 O/ T, u
  1951. INX, E# B; `5 H: ?

  1952. % P% C" T) m* n7 t1 j
  1953. INY9 ^% u+ w% o7 z3 N
  1954. Show_Item_Text_Write
    ' H- x' [! E8 ?2 ]' H4 R0 |
  1955. LDA [Data_L],Y: s( @' O4 W% s: X$ i0 f  ]' r/ I5 k" M
  1956. STA PPU_Addr,X& I9 \- _- g( Z& _) `' t. H
  1957. INY( D8 |+ w+ I$ ]2 B9 F0 o( N& ]3 c
  1958. INX
    ) j1 n  A/ r& ~3 H
  1959. DEC Data_Cnt& l  ]# g5 ^4 _" J0 w$ M% C6 z6 s
  1960. BNE Show_Item_Text_Write- V  N2 Y& X: U' ?
  1961. 9 V2 p5 e- d2 m& H
  1962. Show_Item_Text_End, P( V0 ~. i$ M+ g' U* f* F
  1963. STX PPU_Cur
    & E) r9 q3 @& P
  1964. RTS7 y) B, \* a& C
  1965. - B) x9 M# n8 w. {5 z, B6 u
  1966. ;==================================================
      T- v# q3 A! o) c
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量
    8 A4 I% E5 P" F4 Q
  1968. STA <Data_Buf3 P0 I& p. z8 B; g7 n4 C, x4 A5 c
  1969. LDA #$003 w8 X: [5 u5 y
  1970. Get_Page_Index_Calc
    4 c) c; p' w8 M" _6 a
  1971. CLC! N7 y, G" F( l0 {
  1972. ADC #PAGE_SIZE
    1 t# C8 u7 X, w* }: K0 d
  1973. CMP <Data_Buf
    ( l; y( [! F7 x8 a6 ]; M; P
  1974. BCC Get_Page_Index_Calc
    ! L$ \$ Q; _3 o  c4 [; P
  1975. BEQ Get_Page_Index_Calc_End
    - \8 ]3 o# @/ Y; u3 O* k3 y
  1976. SEC% q" v8 z) `  m  g: _1 m
  1977. SBC #PAGE_SIZE" @' s7 k# D4 I; e8 T) R- Y
  1978. Get_Page_Index_Calc_End
    ; [, h9 ~% m, e
  1979. STA <Data_Buf
    ) J/ n0 E" C4 H5 p, `
  1980. Get_Page_Index_Cnt0 Y7 V4 A; n2 q
  1981. LDA #PAGE_SIZE
    - d8 [& Z3 B- ~, S5 W3 a: ~0 @( `" H
  1982. STA Data_Cnt/ C7 l; `. I& z8 U
  1983. * l, C* V" \1 h/ ]4 b
  1984. LDA <Data_Buf  Z9 h' O5 T, I5 H, K5 O4 U
  1985. CLC
    : n7 h0 s5 g3 w+ @- D& M
  1986. ADC #PAGE_SIZE
    / f: X. `) e* N  u% X) g
  1987. CMP #ITEM_MAX_SIZE- u! B: F/ }- s1 l0 b4 K
  1988. BCC Get_Page_Index_Cnt_End* m/ ?) v) M& U
  1989. 0 i8 I2 z$ P. z
  1990. LDA #ITEM_MAX_SIZE* y( E0 m2 v5 O$ z
  1991. SEC
    " v: ^( [+ E% ]; X/ [6 X
  1992. SBC <Data_Buf
    5 g8 Z7 K: B5 m. G
  1993. STA <Data_Cnt
    ! s# Z* R7 e  [

  1994. 7 m2 P* e  D# `4 J5 q! d+ o  B" U
  1995. Get_Page_Index_Cnt_End2 S- S! j: M1 A, Y" u; ~0 K
  1996. RTS
    . W4 H/ Y' a$ ]* ]4 r
  1997. 4 N8 ?. j& ]+ `5 ^8 B7 U
  1998. ;==================================================
    # F8 R9 {# F2 Q- m9 u: t+ e
  1999. Get_Last_Page_Start_Index
    9 L" C' x  {3 g% W
  2000. LDA <Music_Item_Last
    ' z. M9 e7 W4 ?* l
  2001. JSR Get_Page_Start_Index
    % Y* Z! u, \$ a5 H* P
  2002. LDA Data_Buf! ^' m. t; u& K+ t2 Z
  2003. STA Page_Last' q- a$ }2 S- o% r, ]1 `9 p
  2004. STA Page_Last_Index
    0 d; S1 M( a1 `
  2005. LDA Data_Cnt; c! E& S& }3 G+ V$ O5 [
  2006. STA Page_Last_Cnt1 q  ?* s4 p" X% s1 b2 f( P! B/ N
  2007. RTS
    ! I2 H+ K9 q8 N- z" i2 s  P
  2008. & g- a) i' N% P
  2009. ;==================================================% m; s7 A# |6 v. z) a1 C2 f
  2010. Get_Cur_Page_Start_Index1 L  z. M. P1 \; s5 i& S
  2011. LDA <Music_Item_Cur, n3 F% K6 b2 Y8 m$ [
  2012. JSR Get_Page_Start_Index; d) T/ M) C$ [1 T* r
  2013. LDA Data_Buf: N3 {; G: T4 |1 e4 M, O8 x
  2014. STA Page_Cur2 x/ q6 t) W& y  K1 O) n1 v
  2015. STA Page_Cur_Index3 H' Z% O8 h9 L( |) n0 g
  2016. LDA Data_Cnt
    , |+ B7 O+ k, n- E; E
  2017. STA Page_Cur_Cnt  M5 ?$ X4 B1 n  d! ^5 f- w  W, k/ a
  2018. RTS& y# T" i0 p* e2 o

  2019. 2 Z  A, \( {/ G: w& ]2 p# n
  2020. ;==================================================
    % B% D7 B) R* r* S2 n( Q9 u
  2021. Show_Page_Text;显示页文本
    ( l  ~& Y: |* W, A  a
  2022. LDA <Text_Disable_Flag7 \0 Q% d# v! Z$ r3 M; u
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    9 K6 ]; I  x, q/ O! }
  2024. STA <Text_Disable_Flag
    & S# x& }# m7 N1 F/ Y- V
  2025. 2 s5 N* J5 K; L* v4 _! q. X' a' p
  2026. JSR Get_Last_Page_Start_Index
    + y+ g: y2 Z( J
  2027. JSR Get_Cur_Page_Start_Index. v( j+ o+ ]; X6 ?4 @# X, M

  2028. - X$ M' M8 W+ i- w
  2029. Show_Page_Text_Set
    ; U' B7 z4 t# u+ e
  2030. ! r6 p) d9 `7 n9 F8 Z
  2031. Clear_Page_Last_Item;清理上一页
    0 e+ X+ `- p( f$ W
  2032. LDA Page_Last_Cnt: N8 k) {( v) e- d' p
  2033. BEQ Clear_Page_Last_Item_End/ L& u% Q5 \5 v2 [
  2034. JSR Clear_Item_Text
    7 h0 k! D* m8 y
  2035. INC Page_Last4 p0 W4 ^: }6 ~9 a, T( Q7 E: {
  2036. DEC Page_Last_Cnt  o" V% s7 q0 p1 u' L; q6 E
  2037. Clear_Page_Last_Item_End+ @% X2 U% e, v5 j) p

  2038. ) \# {5 X3 \# q. Z0 N( M
  2039. Show_Page_Cur_Item;显示当前页3 {; p8 D5 a- g- U
  2040. LDA Page_Cur_Cnt  k3 q6 O" `/ J# M% |) j
  2041. BEQ Show_Page_Cur_Item_End  ^, {( Q2 z2 v; @* I
  2042. JSR Show_Item_Text
    - o0 X: F; h4 m3 u) K* Q
  2043. INC Page_Cur) N4 X. X% o  \; h. m
  2044. DEC Page_Cur_Cnt3 F# y: u' i1 ^3 b7 K
  2045. Show_Page_Cur_Item_End
    0 p/ h2 P) }/ X+ Y
  2046. ; k5 p$ S- }5 a; s; Q
  2047. INC <Time_Wait_Cnt
    % {& \- Q! Q! j
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作9 m' V7 X: }) z4 `' m, @$ L
  2049. LDA <Time_Wait_Cnt. |" L2 S: N/ |" Q$ W6 N9 a
  2050. BNE Show_Page_Text_Set_Wait! S7 e! s& Q0 F$ L+ `( ~

  2051. 3 R+ x6 M+ D% R+ ~4 j# E9 v- w
  2052. LDA Page_Last_Cnt
    1 e8 Y* f' s; {9 c4 v' F) ?
  2053. ORA Page_Cur_Cnt
    ' _: ?9 ?1 J1 z2 x0 g& W$ K% M1 W
  2054. BNE Show_Page_Text_Set) a+ @6 v' n) b1 \
  2055. LDA <Text_Disable_Flag
    5 Y3 u$ E( l$ Y  `: n9 R
  2056. AND #TEXT_DISABLE_ITEM ^ $FF$ P& a0 Y, O' X# }/ y7 S
  2057. STA <Text_Disable_Flag' A# p2 u4 J/ G6 D/ O3 d% V9 ^
  2058. RTS
    1 @8 Q5 S: I( V% z6 y' F4 L
  2059. 7 n. k2 ?* d' o4 C% d" ?6 J' I' {; e
  2060. ;==================================================
    - w6 t8 f* s4 y+ y
  2061. Last_Item;上一项
    $ k1 K! P9 ~- N3 `( a: ?0 C* K
  2062. JSR Clear_Last_Track_Name
    2 T* S7 R# F, Y" n
  2063. JSR Disable_Text_Draw
    ! q) S* h5 H  Q  q, N
  2064. . v4 ]# q9 G  b% l0 w/ ~0 l, ^
  2065. LDA <Music_Item_Cur& x- O- m* p/ W/ X# R0 r
  2066. STA <Music_Item_Last
    8 e. t, Y, s1 w' V

  2067. - x. ?3 H  y, S+ v' \
  2068. JSR Get_Last_Page_Start_Index
    8 I% `9 i- o4 B/ G' ?; `

  2069. 4 F: P& Q& _7 g6 m/ u$ d2 o
  2070. LDA #$00
    : D' B- L' n7 \- e: @, E& i1 P& W
  2071. STA Data_Buf1 }6 b; ?" u% ^+ p+ H

  2072. ' ~) j/ F$ W" Q+ ?; L9 i
  2073. LDA <Page_Last7 {9 b, P. r/ i# @
  2074. CMP <Music_Item_Cur2 \" w( e. x" I8 B. Y6 ?0 X3 d# m
  2075. BNE Last_Item_Begin9 W6 Z6 T. V' J
  2076. ' P* Q. p5 T0 i( O8 p! W, J' H
  2077. LDA #$01) D% T0 n8 }+ b' G) L  A; d; m. H
  2078. STA Data_Buf
    5 |& B* H0 {6 U1 x( g1 X9 o
  2079. Last_Item_Begin, X2 C; V. y+ ~% c# _% K
  2080. LDA <Music_Item_Cur5 f) t6 {5 @6 G
  2081. BNE Last_Item_Set0 u0 X1 o4 ?! K; g/ k1 v+ r
  2082. LDA #ITEM_MAX_INDEX + 1
    - M" X, V. [1 s4 y" U
  2083. STA <Music_Item_Cur. c) H# C2 B% G! B9 n7 U# v
  2084. 5 T' H1 l: ^( |7 P
  2085. Last_Item_Set0 O! H, n* w* _. o0 F) @
  2086. DEC <Music_Item_Cur5 `+ R3 }1 p  c3 K( m) X- v
  2087. LDA <Music_Item_Cur
    / j& C, u% J: m' ?. P( U
  2088. JSR Reset_Current_Music  [+ {: x. ]( Z) U. R! F& J; w
  2089. " B8 Y; m% S8 O
  2090. Last_Item_Play
    : f* Q2 i/ u/ {3 @" ^: F: `
  2091. LDA Data_Buf+ q: ?6 A* a( f0 G# P
  2092. BEQ Last_Item_End$ I# [- V7 v) l3 R3 @6 Y
  2093. JSR Show_Page_Text, V% D2 |' j8 ~5 p
  2094. Last_Item_End
    % \, T8 T, E. H. X5 j, \. u
  2095. RTS' A! Z1 F* s* Z/ i( D
  2096. ; D: ~9 W) a* q9 @  U3 Q5 e8 `
  2097. ;==================================================
    3 O; x% d* q( ]$ x1 f
  2098. Next_Item;下一项
    1 U) N5 m, a* p0 J
  2099. JSR Clear_Last_Track_Name2 Q: ]% {; n# w6 c, _
  2100. JSR Disable_Text_Draw
    0 j# U. e* x8 {. E2 y

  2101. ' ~$ K# i6 _( Z5 `% B+ z) c) h
  2102. LDA <Music_Item_Cur
    : m: X# A( V$ v: T
  2103. STA <Music_Item_Last+ m/ P7 P, ~! R% F* I0 J

  2104. ; q, }3 \! x: C
  2105. JSR Get_Last_Page_Start_Index( S4 y, ]# U" [+ f* h+ n: g
  2106. 4 Y% s4 c7 u) K0 n% e
  2107. LDA #$00
    8 M- B( H$ A8 b, l6 c
  2108. STA Data_Buf
    8 I" I6 P! M9 _# u* M4 @5 G4 }

  2109. ; h3 Y1 Y/ c3 Y
  2110. LDA <Page_Last
    : P% l1 {! ?* |+ `5 F  r, x5 L- n
  2111. CLC
    5 @# N# U5 _( g+ w
  2112. ADC <Page_Last_Cnt9 a0 a9 X8 v; Z2 g( Z
  2113. SEC
    7 F% [% O' q8 ?6 }& B1 v( {
  2114. SBC #$013 l& [, \0 a' ^/ v6 b  d
  2115. CMP <Music_Item_Cur4 J1 [1 x3 V/ Y+ i- W# v
  2116. BNE Next_Item_Begin
    ; p1 w( N, q; k& X* p: K$ E" s
  2117. : S# N5 m8 @7 \
  2118. LDA #$01$ p0 x: X9 g& M9 T
  2119. STA Data_Buf6 `1 J( U+ n# D# g. ~( m
  2120. Next_Item_Begin$ b8 k& V1 m/ m& W# ]8 S7 d
  2121. LDA <Music_Item_Cur
    % B6 e" \# v# a& D- p+ N
  2122. CMP #ITEM_MAX_INDEX
    ) S% \$ x3 V& u8 q/ H# S$ a/ t
  2123. BCC Next_Item_Set, g4 B- X) ^: w
  2124. LDA #$FF9 S$ A: ?* X9 B7 s* A$ _
  2125. STA <Music_Item_Cur6 {/ u. ^1 V0 X7 ]. u! p* Y  N
  2126. Next_Item_Set
    6 {3 U8 f# m/ y' e2 ]  w
  2127. INC <Music_Item_Cur
    2 D: ^# T1 P2 p
  2128. LDA <Music_Item_Cur
    ! `& k* T' z* m4 N* U! G; P* h' o" W
  2129. LDA <Music_Item_Cur& c" D, Q! m8 i" w  L
  2130. JSR Reset_Current_Music
    ( o$ g, U8 Q# B% X; {
  2131. Next_Item_Play/ \1 K6 u  c$ S2 l* d) R7 b. O
  2132. LDA Data_Buf
    , V5 x# v9 h, q
  2133. BEQ Next_Item_End
    ; X1 n' R' |1 }
  2134. JSR Show_Page_Text
    # y8 R8 u. c! b1 y
  2135. Next_Item_End/ r1 P& \* I+ A$ h$ t0 d
  2136. RTS" m5 b" L! O- g% t

  2137. 6 I* L4 S& r) y9 |! T( g* G
  2138. ;==================================================
    + L3 Z! f; G2 U/ [5 W% D
  2139. Last_Page;上一页& [: g# g$ A* @' H! N
  2140. RTS
    ( F5 {0 |( b+ s  v6 _/ v  I

  2141.   h9 K6 M$ V; O7 y$ L8 W1 `( Y0 v
  2142. ;==================================================
    & [+ B) k' ]& Z% j% W4 O! K# U4 c
  2143. Next_Page;下一页
    1 _: B' l& e. j0 l. E, q7 I' }  o
  2144. LDA #PAGE_MAX_INDEX
    $ g2 o1 W; u; m' I; M- X' H
  2145. CMP #$01
    - k2 P, g2 Q! Q% Y1 f1 W
  2146. BEQ Next_Page_End
    ! }8 E( Q& A! U& Z/ A% f
  2147. . I# G+ z9 W( o! s- G/ `" R) G3 l# N
  2148. LDA <Music_Item_Cur
    6 F4 X4 V' u2 S$ |" D
  2149. STA <Music_Item_Last
    9 T' ~3 b' R: X2 y

  2150. + a2 P: {4 T" A% R' {
  2151. JSR Get_Last_Page_Start_Index
    , g: c8 I( i* @  A! ?! L

  2152. & z: G! f3 e9 i! Z3 o# ?/ F/ }
  2153. LDA <Page_Last_Index
    - B# d, s1 Y1 _" G4 ]1 P) W
  2154. CMP #PAGE_MAX_INDEX% ?3 K. y1 X& `0 I
  2155. BCS Next_Page_In_End_Page
    ' u5 T8 d/ |5 @$ s! O4 @# _

  2156. ( A3 d% I6 ?. I+ `3 f
  2157. Next_Page_Not_End_Page;不是在最后一页, M0 V" u9 Y  r
  2158. LDA <Music_Item_Cur
    ! c# K. [9 `7 E( _" }
  2159. CLC
    6 r8 z2 E7 Q9 F1 I4 ~$ e
  2160. ADC #PAGE_SIZE$ @9 X& J4 e' u
  2161. CMP #ITEM_MAX_SIZE9 m1 |) f! r/ E1 t
  2162. BCC Next_Page_Not_End_Page_Less$ L- c9 Y+ i9 o
  2163. LDA <Music_Item_Cur0 \! H* I# R! P' j
  2164. SEC! X  T6 f' e' p. t1 p
  2165. SBC <Page_Last_Index* S1 ?' ^3 F, x, L' K: o9 ]) {
  2166. CLC
    7 z0 S$ g: Y" B8 x
  2167. ADC #PAGE_MAX_INDEX3 Q" t! w+ l3 ]) v  a% a- N
  2168. CMP #ITEM_MAX_SIZE+ p- Y% x, a  c
  2169. BCC Next_Page_Not_End_Page_Less) H) {# ^7 x4 j" N4 j6 M4 k
  2170. LDA #ITEM_MAX_INDEX
    : @. P9 S, [9 F3 A; M
  2171. Next_Page_Not_End_Page_Less
    8 L1 U. w8 O0 J: J. Y& t
  2172. STA <Music_Item_Cur
    + J+ l" Z" D0 ^+ M
  2173. JMP Next_Page_Reset1 W0 _& Q; K9 s7 X# j. b
  2174. 5 t1 t" x/ T! g* o
  2175. Next_Page_In_End_Page;在最后一页
    ( g0 n1 Y# S1 g0 W! X& `
  2176. LDA <Music_Item_Cur
    6 D1 c6 _) S: ]" z; a
  2177. SEC
    ) m. g* {6 k8 x4 Y
  2178. SBC <Page_Last_Index
    " ^/ O# x8 `( U% O9 ?
  2179. STA <Music_Item_Cur
    6 q* `& i0 o/ m9 A' g
  2180. 4 N: k" D+ n1 U- y4 S" `3 g$ }6 T
  2181. Next_Page_Reset" X8 |5 w/ k: t4 c
  2182. LDA <Music_Item_Cur
    & K% R5 ?; K% b$ A" c
  2183. JSR Reset_Current_Music" }% n5 E2 P+ K8 X7 L* O
  2184. JSR Show_Page_Text+ ^2 R6 q6 s2 v* O) v
  2185. Next_Page_End% B1 h* }) c) H  x, \+ F9 q1 r
  2186. RTS8 H+ N7 r. {9 H$ R
  2187. ( a) U9 x" a7 X
  2188. ;==================================================
    $ j3 [9 I4 R0 D
  2189. Disable_Text_Draw;禁用音乐条刷新2 ~* @* t- z# c* U# Z# A; H
  2190. LDA <Text_Disable_Flag7 h1 S. u0 H8 K  M* n$ j# r2 J
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME. R0 L+ c8 R+ @- P/ L/ \9 z  F
  2192. STA <Text_Disable_Flag6 i3 l" f1 S- i6 H7 L6 x# ]
  2193. RTS
    # q8 t7 e$ [% i6 x* `

  2194. 4 E' F- J4 w: A. o  C% `' A1 W
  2195. ;==================================================8 G& c# _. ~0 t) `; Y
  2196. Clear_Last_Track_Name;清除上次曲目名: L: e5 Q( _) B& ^# x
  2197. LDX <Music_Item_Cur2 T& e/ J, E; R0 N# Y2 V; i
  2198. LDA <Music_Cur,X0 U; k3 |7 Z! o  s2 U  T! N; u, ?$ o
  2199. .IF Track_Name_Pos$ _* q- p! g% p; s  L/ _' ~+ r" `
  2200. JSR Clear_Track_Info
    % }9 y$ g- V6 f
  2201. .ENDIF" J& ]: A9 m1 [) N' {0 r0 E) D8 S; i
  2202. RTS
    ( e' K4 f6 j" y; H6 q* @/ S7 c
  2203. . s0 g5 {" h" p7 q
  2204. ;==================================================0 d, l9 Y! H+ p. X) s2 ?6 t
  2205. Reset_Current_Music;重设当前曲目) ]7 V2 x$ C. m# V" V

  2206. ! g  Q) G. d, Y9 p" l/ v# C6 F# A2 z
  2207. ;写入当前总曲目
    + ^( f- H0 i5 L. q
  2208. JSR Set_Sound_Total2 _0 _5 H* @2 v3 ?
  2209. LDX <Music_Item_Cur- d& R( j# W& w- m- c6 A- }: J

  2210. - c( J9 [* j+ @1 L4 O- Y  Z& o$ ]
  2211. LDA #$00
    - M( o! ]: h$ ~& B
  2212. STA <Music_Last1 d) x  q% O0 x9 M; n

  2213. $ C" C& v  `, n9 r" d, D7 |2 B
  2214. JSR Sound_Reset_Proc
    6 ^! w! p. G4 Y6 ?' p$ y  B8 ]
  2215. JSR Music_Show* E; M+ t+ ?4 c* N
  2216. RTS
    & p- r9 y* ^: |/ w2 \. J. V* G  w

  2217. + ]* m  H1 ^5 G, {. O
  2218. ;==================================================! L0 T8 H- `; W( X( T
  2219. Music_Song_Stop;音乐停止
    . E9 i* j8 `% D8 ~
  2220. LDA #$01
    : e8 n( D' F& u5 x, a- V# c3 E
  2221. STA <Music_Stop_State
    " Y5 F4 o8 L- P4 w9 j, M$ M
  2222. JSR Music_Bar_ReSet
    ( {/ F, Z' M( J* M
  2223. JSR Time_ReSet
    : P6 N5 P, q0 a" g! U) u
  2224. JSR Sound_Data_Clear
    , C9 J# E- {6 U; ]# A1 e6 z6 b6 v
  2225. JSR Music_State_Show% F  S  ~4 e2 V) d0 ^
  2226. RTS3 u7 y' y! |  }# V5 g4 {: |' v
  2227. 5 }" m& h5 c1 N
  2228. ;==================================================+ M9 q9 w% R8 x6 _# F3 o0 H
  2229. Music_Song_Play;音乐播放
    " O% s7 a  x. F0 M, @: n. R" c
  2230. LDA #$00
    : g4 a) S% _  ]* [) ~
  2231. STA <Music_Stop_State2 e% O' a4 Z, p3 Q% m& M
  2232. LDX <Music_Item_Cur
      S4 R8 |4 j# w4 m
  2233. LDA <Music_Cur,X3 P! k, M, q) X! d' w. K' X* ^* p& b: _; ~
  2234. JSR Sound_Init_Proc6 ^* R- Q/ `6 _
  2235. RTS5 @* q( v- `$ z6 o' Z9 `
  2236. ! c; m. z* \& l6 t  O! @; T/ Q) s
  2237. ;==================================================  r/ k% Q; A% ^) V' C6 N
  2238. Music_Song_Last_10;上10曲5 x) ~' e4 P, S# E3 b+ q! l6 ~
  2239. JSR Clear_Last_Track_Name0 V0 S+ F' T( J% }3 ~
  2240. JSR Disable_Text_Draw
    6 F' j2 f. m! M( n* B
  2241. LDX <Music_Item_Cur
    " M7 J6 s/ T8 K! }, ]* J, F' g2 d
  2242. JSR Set_Sound_Total
    1 W3 n. j: e, |+ _6 M4 V% _" ^7 G
  2243. LDA <Music_Cur,X4 i& l/ Q  f/ w5 B4 v
  2244. SEC3 w8 O& B( B# r1 ?  ^1 J
  2245. SBC #10
    * H0 s) k3 ~; v% s" d* P! I
  2246. BCS Music_Song_Last_10_Set
    1 b+ Y5 r* L4 Z7 G
  2247. LDA #$006 C2 y7 F7 z1 F3 f% [) `
  2248. Music_Song_Last_10_Set
    ! u) ^0 r& [- w) d4 _
  2249. STA <Music_Cur,X' m" ?3 g5 N8 F' b
  2250. JSR Sound_Reset_Proc
    & J  e5 G) r' b3 N& q  c
  2251. JSR Music_Show
    ( W7 H$ p* Q' R! f
  2252. Music_Song_Last_10_End0 v0 n' Y# ]& M
  2253. RTS4 g: f/ g. F% t8 w6 N

  2254. ( g/ {$ [  C  I8 C! W. k3 ^
  2255. ;==================================================
    , Y2 f0 A  D, X* K7 F5 b' Y# d
  2256. Music_Song_Next_10;下10曲
    , d4 j9 A) [# `  f4 N) S" H
  2257. JSR Clear_Last_Track_Name
    ; ~& X* I( c0 c6 o$ X: k7 C
  2258. JSR Disable_Text_Draw
    : _) m) F- w0 U( O; h
  2259. LDX <Music_Item_Cur
    ! B( `0 Q. h- J* p
  2260. JSR Set_Sound_Total# e2 p. s7 t1 z8 O9 z' k
  2261. LDA <Music_Cur,X
    8 {: G6 t8 @" ^& {: F" d# c
  2262. CLC
      ]: B, T# Q7 {
  2263. ADC #10* H% g$ }6 C; k' [; D1 r& n  B5 m& u
  2264. CMP Music_Total
    : {9 S& i4 k2 Q' w" ^) E( Y$ C
  2265. BCC Music_Song_Next_10_Set
    * k. C& f  m, W# W, k
  2266. LDA Music_Total
    & n- k' @+ H; p- U' U
  2267. Music_Song_Next_10_Set
    + S4 d) M- O/ j( K
  2268. STA <Music_Cur,X
    , L- q' Y7 v8 p5 P" V: o
  2269. JSR Sound_Reset_Proc- o/ O& k1 ]/ N
  2270. JSR Music_Show% j& J7 G; ]1 _% N( M
  2271. Music_Song_Next_10_End0 h3 u( ?2 e2 `; @7 ?. L! ]- w
  2272. RTS
    . K' ~  V; i( S

  2273. : q$ r' J6 O5 x* r9 k
  2274. ;==================================================
    ( D  @; o1 @1 X4 P" ^8 ^' `) m6 o
  2275. Music_Song_Last;上一曲
    . F5 _8 C3 Q  G. V
  2276. JSR Clear_Last_Track_Name
    , J) s. @& j2 J- r" z; S
  2277. JSR Disable_Text_Draw
    4 ?6 y: S4 z$ P0 v
  2278. LDX <Music_Item_Cur
    # d& _% F8 y& ~, g* z: \8 m
  2279. JSR Set_Sound_Total
    & o& y  C  h) s. }1 E3 W; d
  2280. LDA <Music_Cur,X
    9 X: J5 }; r* [/ z% i
  2281. BEQ Music_Song_Last_Set
    + R* G2 Y% O2 t, J! s% g6 V1 ?
  2282. DEC <Music_Cur,X
    # l! T5 J7 \. k1 x; F$ H
  2283. Music_Song_Last_Set" Z& ~$ \8 _& j
  2284. JSR Sound_Reset_Proc
    7 i- T' {/ ]/ F' o
  2285. JSR Music_Show! ]; L4 x& a7 i2 ]3 h+ j. W% d( G2 p, @
  2286. Music_Song_Last_End/ n, p) D8 y" V2 b7 Z2 P
  2287. RTS
    . f6 U$ Y2 w  V: c$ ]& R
  2288. 6 c8 g+ d* q9 T
  2289. ;==================================================, O9 P% {# x3 p
  2290. Music_Song_Next;下一曲9 n0 I& g+ i: I/ O0 W; I
  2291. JSR Clear_Last_Track_Name
    ; y7 r5 {, v( l( [, R4 j" n* w
  2292. JSR Disable_Text_Draw
    . m* n( M1 d8 |, S7 S
  2293. LDX <Music_Item_Cur8 Q/ V4 \9 K* C& i* u
  2294. JSR Set_Sound_Total
    3 Y  f( P2 t2 l, _( J8 M
  2295. LDA <Music_Cur,X
    $ B8 w& b1 ^" e1 e$ l( @
  2296. CMP Music_Total6 k/ i' U& L. t: a6 v7 }% ~
  2297. BCS Music_Song_Next_Set
    9 r" q$ p* m8 n( J2 _) V
  2298. INC <Music_Cur,X
    4 p' L$ u- j6 f7 ^, O. j
  2299. Music_Song_Next_Set$ R5 z1 C  u8 e$ w" a. @* e9 Z+ q
  2300. JSR Sound_Reset_Proc
    : q( ?2 ?0 c6 F8 @/ l
  2301. JSR Music_Show( a  `8 `8 K  Q( |: m
  2302. Music_Song_Next_End
    2 d  l. h( Q& Q" t
  2303. RTS
    7 M! w# X( y: \6 [
  2304. 8 ^# S, X9 S: H  x* e# C' H/ E( c
  2305. ;==================================================2 H  i4 J2 ^) F
  2306. Change_Select_Item;改变当前选择项* ?0 K: U" _8 E& [
  2307. ;--------------------------------------------------
    8 ?; @" D6 I! T% D4 m
  2308. Change_Select_Stop_Play_Item;停止/播放
      P* X0 S  V; J' S
  2309. LDA <Key_Once5 h6 F! R7 R4 ^& V6 |0 a/ X
  2310. CMP #$10
    " w% g3 L& M7 E2 S8 U5 i. g
  2311. BNE Change_Select_Last_Item( O9 D# x# c" X/ a# c; t# N" r
  2312. LDA <Music_Stop_State. c2 m! C. x( O+ [
  2313. BNE Change_Select_Play
    / i" B4 O+ X6 y% q
  2314. JSR Music_Song_Stop
    1 J; q2 \  J+ P/ G4 ]  [; u
  2315. LDA <Music_Stop_State
    9 H) ~# v' B) b+ T2 g7 [
  2316. RTS
    7 b' n+ [8 N/ |5 \8 g
  2317. 1 [9 b+ Y0 T- O4 |( C8 x
  2318. Change_Select_Play! J! U$ q3 P" z- ]6 C' Q/ C
  2319. JSR Music_Song_Play
    ) U" k6 S6 r9 j6 |! l  k
  2320. RTS  f$ c* f8 S1 l6 h2 e& L1 s/ M% R5 r
  2321. & Y" y, f1 s8 h; a" [
  2322. ;--------------------------------------------------
    0 u4 J, Q' c% a: E2 w, M
  2323. Change_Select_Last_Item;上一个专辑* S- j& E% c/ o
  2324. LDA <Text_Disable_Flag' |& |- ^, {; s; i
  2325. AND #TEXT_DISABLE_ITEM9 Z& u- i4 F( [8 j
  2326. BNE Change_Select_Item_End4 a% {, P$ p( ?8 }; f3 g
  2327. LDA <Key_Once
    - ^- N) E, m5 A4 K
  2328. CMP #$08% z2 {' Z* t9 |. h0 _, N: e  y$ h5 d. G
  2329. BNE Change_Select_Next_Item% u# I; R4 C0 B3 I# A/ D
  2330. JSR Last_Item0 [0 u' m; i1 t4 C7 Q- T0 \
  2331. ;--------------------------------------------------
    9 L2 a. m; s4 s3 H# A1 L
  2332. Change_Select_Next_Item;下一个专辑
    * {, G# Y9 Z' A( _
  2333. LDA <Key_Once
    ! X$ v* G0 M& \- T* Z+ ^; G
  2334. CMP #$04
    - z7 d$ {: u# V+ r# W) L
  2335. BNE Change_Select_Last_10. E2 @) X% v: j7 f! M, E: @
  2336. JSR Next_Item
    & G. y# G& X# |2 Q$ y1 i5 E
  2337. LDA <Music_Item_Cur
    " p* [, x( a5 p" E
  2338. JSR Get_Page_Start_Index+ t: o  v4 D" u& U) R/ _# }
  2339. ;--------------------------------------------------
    / }" F) U' a6 H" o
  2340. Change_Select_Last_10;前10曲
    % E; \6 _* E! |& r
  2341. LDA <Key_Once
    & m, x% w. Z. a; p7 Y2 t
  2342. CMP #$40- A" Y" b6 p: z8 F/ f- M3 Q
  2343. BNE Change_Select_Next_10  P* J. P. A/ A$ H" ^
  2344. JSR Music_Song_Last_100 `( u1 Y+ |+ N. r. F; L
  2345. ;--------------------------------------------------, |/ r" C. x- V3 x* o
  2346. Change_Select_Next_10;后10曲9 f5 s1 r8 `( G+ C
  2347. LDA <Key_Once
    * @, x. y6 l$ C4 R  C( j6 N; X0 ^
  2348. CMP #$80: _  P: F: |4 Q
  2349. BNE Change_Select_Last
      J1 L$ e/ l& h! I" e" g5 @
  2350. JSR Music_Song_Next_10
    7 w8 r, G0 `$ e. q8 Q: C
  2351. ;--------------------------------------------------
    7 }+ v! y6 _% _5 i* S3 o$ d# k
  2352. Change_Select_Last;上一曲
    + h3 H; i- P& _5 B
  2353. LDA <Key_Once! A" W; l: W0 @1 p
  2354. CMP #$02
      b) O+ h# x$ M% o2 f. E4 R3 d8 E
  2355. BNE Change_Select_Next3 y) l7 ^$ e; E  V; w+ O2 W( D. F
  2356. JSR Music_Song_Last2 j# Z# d! G: m
  2357. ;--------------------------------------------------
    0 {& L: L0 d/ \+ h
  2358. Change_Select_Next;下一曲" W7 p9 I0 ]# z/ y
  2359. LDA <Key_Once
    / s7 C! O* I) z
  2360. CMP #$01
    ( \+ F6 k/ x. Y0 s
  2361. BNE Change_Page_Next# h9 ~( }' j% S& q! r3 M- G
  2362. JSR Music_Song_Next
    6 R. ^9 p0 w% {4 k/ L0 l. i, {% I
  2363. ;--------------------------------------------------
    5 W' @  P' N3 t  G* J) w4 B* L* U
  2364. Change_Page_Next;下一页# A5 n* _1 ^, a. X
  2365. LDA <Key_Once
    ! Z! s0 h$ ^9 w: \3 }, ~8 X
  2366. CMP #$20$ X% v  ^9 p" U' p
  2367. BNE Change_Select_Item_End7 x( X+ r3 S" p; Q3 W' A" ]1 T  i
  2368. JSR Next_Page* @: F  \. \9 x7 R3 ?" q  p
  2369. ;--------------------------------------------------4 @6 T. E0 D) t0 w0 q
  2370. Change_Select_Item_End/ e3 |0 R+ r% d* p
  2371. RTS
    % j2 b5 U' S3 @# U

  2372. 3 ]$ T  h4 s1 ?) c
  2373. ;==================================================" e4 L% b8 V' V, z# T/ D1 E
  2374. Show_Arrow;显示箭头光标
    3 X( S2 ^' r% n
  2375. LDA <Music_Item_Cur
    / C* w) }% U. E
  2376. JSR Get_Page_Start_Index6 x7 W" l+ I6 c/ R+ @( I6 r
  2377. LDA #$00# ]: Q; |8 x# c1 V4 k3 C6 {5 d$ x
  2378. STA PPU_OAM_ADDR
    ( Y: ^" u# b3 K8 y
  2379. LDA <Music_Item_Cur
    # o* s6 h  b+ _/ w
  2380. SEC
    ; @5 D: X0 S- s0 A
  2381. SBC <Data_Buf
    + n" V( U8 J5 I, c# f7 T
  2382. ASL A, i! n! d" O* N; P2 U7 r
  2383. ASL A9 U* T' F5 `  E; H; F- C5 d1 k
  2384. ASL A* W) X4 ?4 o- E# `/ b5 @) g
  2385. ASL A
    * S  O6 S! A2 W# B& s  g2 ]
  2386. CLC; e* {/ z/ \6 K4 ]/ F, E: x+ O
  2387. ADC #ARROW_Y_OFFSET
    5 T" K0 G; w" G6 g& N" }
  2388. STA OAM_TEMP_ADDR + $00
    $ p6 @  U6 f, M
  2389. ;STA PPU_OAM_DATA
    % y# m; v! x4 l- ]' g
  2390. LDA #$1F
    5 |+ q! Q0 ]+ P3 W! B) L
  2391. STA OAM_TEMP_ADDR + $01
    # ?4 W7 |9 b: z) |' S
  2392. ;STA PPU_OAM_DATA
    ! Z% E) m( Y: |8 f+ D8 n
  2393. LDA #$00
    ; @7 }% Y; O! C6 n$ X( p
  2394. STA OAM_TEMP_ADDR + $02) f& V9 X5 b# [: R& {
  2395. ;STA PPU_OAM_DATA
    ! ?  E+ T. W& A7 ?6 J7 H
  2396. LDA #ARROW_X_OFFSET
    & V. }9 X+ T( h! i# j& n
  2397. STA OAM_TEMP_ADDR + $03
    - T  B1 ~3 [* ^8 y1 u, m. l6 m* N
  2398. ;STA PPU_OAM_DATA" y% h# R; b5 C' g* G
  2399. RTS: J5 F. B8 i& c  ~# W7 k
  2400. : x0 G' z/ m5 @
  2401. ;--------------------------------------------------- J; q6 N) D$ v5 D
  2402. ;命名表数据1 ]7 c  Y. x& q; k4 z
  2403. Palette_Attributes
    6 \2 D- g1 c4 Z, b
  2404. .IF SOUND_BAR_SHOW_ENABLE
    # I; }2 [/ K$ j, e3 k* A
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    0 ]9 z! z+ ?5 ~
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    2 \' @/ i; W4 U; D8 F) n0 v
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    7 O6 ~8 \0 ~1 S) y3 Q
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    2 S: J) }- u) M! A! w% J" V2 l
  2409. .ELSE, z* A9 ?, l$ y( ?& x  i
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$551 Q* O7 T! J  J2 {" c/ H
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    & y/ u1 J" q0 ~8 s) S. E
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75! `5 Z5 U- R! O2 E- s
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA4 t3 Z; x# `. z! r( @
  2414. .ENDIF
    9 W3 f9 j# j$ N
  2415. ! i3 k4 b9 a6 C( ?5 o
  2416. ;--------------------------------------------------. L8 A- Z: z  Q  d2 M/ W+ j
  2417. ;调色板数据
    8 m# a0 [# P4 k
  2418. Palette_Data$ f* `2 ]7 @" g6 q9 F
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    ; q3 S' K9 q& g% u
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F  V- ]' @* M9 {. C% n
  2421. 2 g& E0 S$ q2 m5 P3 V
  2422. ;--------------------------------------------------
    7 ?# j' G& _6 j. ]
  2423. Static_Text_Data/ j; ^$ c9 ?' A; S2 S3 `
  2424. .WORD Static_Text_Caption_Data
      A; X) R8 G* L  t) I0 [4 o( U* x
  2425. .WORD Static_Text_Author_Data+ i. p/ h3 E! b) h
  2426. .WORD Static_Text_Date_Data; J/ P. z/ w  `" m
  2427. Static_Text_Data_End
    6 K3 ?* i' x8 D) _
  2428. 5 c* {8 _* b  j
  2429. ;--------------------------------------------------
    7 ~; g$ i. ~0 {5 b0 U
  2430. Static_Text_Pos
    % v6 e7 R% i. n9 p# i; B* d* o5 O
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)+ y/ E1 i- a' B" R* v% ^/ [! {
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
    . F8 V" e( X; b( e- O9 C1 h
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
    9 y! ]5 P* D, }, Q, P+ A
  2434. Static_Text_Pos_End6 q' I: U# `: f2 q* i2 R7 p( x

  2435. " K6 Y* Q# g9 [9 }
  2436. ;--------------------------------------------------2 G; T% S% V. n3 e0 c
  2437. Music_State_Stop
    , ~) p" T$ @$ ]2 |2 B! v  b6 u
  2438. .IF SOUND_BAR_SHOW_ENABLE
    # H% K% d5 P6 ]' M& a" u" P' S" b
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00. O- I5 M  M! P  Q# Y- `
  2440. ELSE
    5 O2 C! J1 p) O: i6 f
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$000 |9 L2 l8 H+ Q4 L
  2442. .ENDIF
    ' j/ c' D8 T6 {3 ^; K! G* [: f: t
  2443. Music_State_Play/ I6 B, H* P9 D2 K+ {/ Q3 L
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    8 d: ~) N! h$ ~8 A. Z

  2445. - D/ A" T4 N+ ?* P2 [. Z  p* [
  2446. ;--------------------------------------------------7 a+ R: {5 b5 K2 R& o* L% q
  2447. Sound_Bar_Text_Data;声音类型文本& [2 W4 c0 O8 x* G8 C4 o
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
    0 N/ |+ e, _( C. Z1 Q1 b/ s
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    , [) H2 m/ n/ ]3 Y& \) y# p
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"6 J7 x9 h9 E0 h# P- g# m
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"
    ) S+ ~( E! }7 Y/ z8 q
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00* B' N7 d2 z, {) G0 ~% G
  2453. ; S' Y7 D3 ?0 C1 C- G& |
  2454. .IF Track_Name_Pos
    . l, S$ M+ M5 F" f3 s  U1 t( Q

  2455. * @- G, j. L2 l, ]+ v$ L( B" z
  2456. ;--------------------------------------------------  b2 {. J4 H5 x2 l
  2457. Track_Name_Addr_00;曲目名地址索引
    ) D: s- j9 s' U* G) A7 S, L1 v
  2458. .WORD Trackr_00_01
    ) f! L1 S' M# p
  2459. 7 m9 Q& d3 X/ M5 q; [9 q
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"7 N, ~( g) O3 g9 Y6 i' F" @
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"+ P/ _# v: v, f3 G0 @9 w
  2462. , M$ j( q* g. J. ^
  2463. ;--------------------------------------------------5 W* p5 t3 p2 K% R0 `
  2464. Track_Name_Addr_01;曲目名地址索引! C% b# z! L% G+ ~2 p
  2465. .WORD Trackr_01_01
    $ G( t  a- \! ]$ m9 I4 _

  2466.   Y9 K( o$ u4 F1 ]% e
  2467. ;==================================================
    ( w2 w. R7 r3 j4 S% Y% Q& p
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"( T6 P1 d# M( Y+ @
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
      Q! R: }$ k7 _9 Y4 k/ Z
  2470. / M, |8 `/ O# ]1 c& t8 \
  2471. ;==================================================! g/ S: O- |, B" J. v0 X: Z
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引" t8 V3 c5 ]  }  C, R0 W
  2473. .WORD Track_Name_Addr_00
    # ]8 u8 A% P" _
  2474. .WORD Track_Name_Addr_01( R2 h! X2 f+ u# w. z
  2475. .WORD Track_Name_Addr_01( G% N4 x  y0 T
  2476. # Z# q% r. G3 H
  2477. .ENDIF
    ) G, H, O! U! J) c
  2478. 7 L( I* B2 ?  B  K  n: X) ]: f
  2479. ;--------------------------------------------------0 O: d  A* g7 Q! C( D3 E) B
  2480. Static_Text_Caption_Data;静态文本数据
      a1 Q5 A- k" H% `: k
  2481. .DB 16
    4 \% f! C3 U/ }' q: m  \* m- c* H
  2482. .DB "FC MUSIC 12 IN 1"
    , x5 L. Q, e' }0 j- N
  2483. Static_Text_Author_Data
    6 D5 s' o( P4 c0 Y. ^2 X
  2484. .DB 252 l; h- q6 f: \' x5 I
  2485. .DB "EXTRACTED BY FLAMECYCLONE"
    4 S2 Y" F$ I; h, h' m# _5 i" s
  2486. Static_Text_Date_Data' O2 B) z% q) w6 q0 J, V0 Q
  2487. .DB 100 W, q. o! a, Q( v- N0 {: Q4 }
  2488. .DB "2023.07.23"2 A3 F" q  _3 \! C; A' Z
  2489. ; ^* R! R3 M6 ~, g/ n
  2490. ;==================================================" j; B" V/ Y, v) R' u* f2 g
  2491. Music_Collection_Name               ;专辑名间接索引6 K- _2 ?9 x6 k
  2492. .DW Music_Collection_Name_00" S/ k. B  j& p3 d0 M' C
  2493. .DW Music_Collection_Name_01
    5 I) v. @: ~% p5 d# w$ M% f  x7 @
  2494. .DW Music_Collection_Name_02' t- M4 q8 f2 l  D, D6 M1 S
  2495. .DW Music_Collection_Name_03( ^3 K) n$ Z, [9 w; a
  2496. .DW Music_Collection_Name_04( t, U! [" r9 @) s" W
  2497. .DW Music_Collection_Name_058 a1 \: e! G4 A) X9 p
  2498. .DW Music_Collection_Name_06
    8 z  ?/ V" l6 ?
  2499. .DW Music_Collection_Name_07
    $ s" V. g) }, X+ r7 Z8 ]
  2500. .DW Music_Collection_Name_08
    2 B1 E$ L# w- Q* H) k
  2501. .DW Music_Collection_Name_097 ]/ L) ^! U9 S; m4 m
  2502. .DW Music_Collection_Name_10+ |, a1 _; U. G1 t  o. k
  2503. .DW Music_Collection_Name_11# M0 S4 Y5 [* J5 B2 a

  2504. / y7 L  c& L& d' {' f7 W
  2505. ;==================================================
    ! p/ C. ~% M8 I9 M
  2506. Music_Collection_Name_00            ;专辑名文本数据) [' S- m; j4 Y, h# m$ M0 A
  2507. .DB 11,"1.RAF WORLD"
    1 T, O5 k0 a. D5 m* o# @8 {
  2508. Music_Collection_Name_017 y7 Q7 q5 O# K! C
  2509. .DB 15,"2.FINAL MISSION"
    ; J$ Q. F! w4 _; Y. B" n( `2 S! [# ?
  2510. Music_Collection_Name_02
    ) d7 |# b2 O; f
  2511. .DB 06,"3.KAGE"
    * p' S6 @2 ^# A% G9 k
  2512. Music_Collection_Name_03- s9 z; l6 g$ h& |$ S4 B+ |1 [. A
  2513. .DB 16,"4.DOUBLE DRAGON"
    5 M2 [/ s$ ?% F' C3 _
  2514. Music_Collection_Name_049 f- Z3 X8 W: T7 ?4 h0 b' [
  2515. .DB 17,"5.DOUBLE DRAGON 2"2 n- p+ r& c+ E/ [6 ]: {( m, f
  2516. Music_Collection_Name_05, ^3 g4 T8 t' {4 q( W
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    4 J1 j" d' w1 ^( g9 R9 {8 h
  2518. Music_Collection_Name_06) j# w& k9 s, l" P0 K: c9 h
  2519. .DB 09,"7.ROCKMAN"
    * q" P* O7 O! Q. E6 V! o3 d
  2520. Music_Collection_Name_07# i, L5 g6 I: E3 a
  2521. .DB 12,"8.ROCKMAN 2"* {/ S5 ^2 I4 i1 X; m. J
  2522. Music_Collection_Name_08
    3 ]+ d: Z. u# D% h6 ~  W6 v: a& x
  2523. .DB 12,"9.ROCKMAN 3"- f" ^3 A( C9 g! V9 h
  2524. Music_Collection_Name_09+ J& X& W/ |/ i6 X$ v5 u" k
  2525. .DB 12,"10.ROCKMAN 4"
    ! T" [) X2 b- H$ G
  2526. Music_Collection_Name_10
    8 S2 D5 {, T: a: E- N# q/ f) a3 P
  2527. .DB 12,"11.ROCKMAN 5"* G8 E, V3 O2 P+ n4 X
  2528. Music_Collection_Name_11
    . ^* |6 X' c: g# a  ~# @& w$ L" B
  2529. .DB 12,"12.ROCKMAN 6"1 P! C" l/ h3 |9 H  p
  2530. ) P, y: O3 g( O) ~- E
  2531. ;==================================================$ @  H- m% L" C/ b
  2532. Track_Name_Addr_Flag                ;显示曲目名标记8 z5 |, O2 L& G( |4 z' Y+ f4 \
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0
    4 N# Y6 U/ s( v" R
  2534. - A& e& [2 n; G6 S! ]! G
  2535. ;==================================================
    / r4 N5 v  O( r
  2536. Item_Pos_Data                         ;光标箭头位置
    5 Q+ l. A1 f  O- V
  2537. .WORD ITEM_SHOW_POS
    ' t' z" O1 a( h: u3 O  G' f4 f4 h
  2538. .WORD ITEM_SHOW_POS + $0040) N6 M. b( c) G( \# v% N
  2539. .WORD ITEM_SHOW_POS + $00804 h; m) P& ]; S9 G4 K
  2540. .WORD ITEM_SHOW_POS + $00C0
    3 o4 O( e$ j3 E* O; _& b* f
  2541. .WORD ITEM_SHOW_POS + $0100
    / o+ k* V9 A0 M
  2542. .WORD ITEM_SHOW_POS + $0140  p7 ]7 u0 C; z+ f2 \: o( c9 ?6 h$ v( _

  2543. & ~. D  z% I/ S' |+ ?  k  {
  2544. ;==================================================/ Z8 E  O7 o6 M3 g8 I5 s7 X6 d: a
  2545. Sound_Init_Port                 ;音乐初始化入口地址* C' U; P5 \- l  l# ^
  2546. .DW $BFC8
    0 Q7 T- d! f; I& M; p* F
  2547. .DW $D7F06 e0 x# M* {) O: R0 ~
  2548. .DW $9FC0
    ( ]9 ]. Z9 J1 Y- c0 u' g
  2549. .DW $BF70- @6 T) B4 k- }- T0 E7 B0 O3 N
  2550. .DW $8003
    4 T5 u! E% j3 l3 L, i# z, z
  2551. .DW $BF30
    * g6 i0 Q& D7 n8 ?7 L
  2552. .DW $90033 J$ R: A3 V/ V1 \% w( k1 X5 n
  2553. .DW $80035 o1 x2 s: ?2 G8 d  ?% w
  2554. .DW $8003/ ~$ q. N7 y- ~, }) D" d
  2555. .DW $8003
    0 y$ _2 W3 ^$ }6 c6 C; B# R/ Y
  2556. .DW $8003
    ) Y! J6 ?  k. G- X( n
  2557. .DW $8003
    . Z; c* z# v1 t
  2558. " q* Y0 `( R( k' h% U4 E( F
  2559. ;==================================================
    % `- q2 K: I+ ?
  2560. Sound_Play_Port                   ;音乐播放入口地址/ u) @8 X! j( }. t" j
  2561. .DW $80008 z  Y% i% K; {& M  V% l, I
  2562. .DW $80018 o$ G  }$ v( O( ^- w! E  ]
  2563. .DW $A000
    4 [' i: U* E6 m" z
  2564. .DW $8003
    6 ?) I7 E- @$ l
  2565. .DW $8000
    ! O! z  X3 }) S  h" a+ y+ t3 C4 I) |% r% h
  2566. .DW $8003! w2 G) {7 P4 ?
  2567. .DW $9000
    1 i8 {( ?# ~# X; G+ X( Z0 k! X
  2568. .DW $8000
    4 W4 R. P9 L4 n+ _  D! ^
  2569. .DW $8000
    + n! b6 s" z. @: R) Q1 Y: L
  2570. .DW $8000* d5 n4 f. ]1 k8 f0 O# p
  2571. .DW $8000
    9 y/ W) ?' ^5 m3 b/ o  V
  2572. .DW $80008 F1 X; ?/ g5 Y# G: m

  2573. ! ^1 n- g# e  O& f. F
  2574. ;==================================================4 J3 W( s! v! O
  2575. Sound_Reset_Port                  ;音乐重置入口地址3 ~, {9 \6 l) q
  2576. .DW $0000& F& ?/ q8 |" E2 @$ G$ h
  2577. .DW $0000
    $ `2 A  ?$ \2 h2 Q8 U% U4 X
  2578. .DW $0000
    + @6 W3 k8 F# A; M' h
  2579. .DW $0000
    + L) q2 R9 R  H/ Y4 D+ ]1 K
  2580. .DW $0000
    0 A9 H% I9 Z2 ~4 V: U6 v
  2581. .DW $00007 e& A  q$ k  d' V# c
  2582. .DW $0000
    , `8 o$ M- y- G
  2583. .DW $0000
    7 `- j  N, X2 K1 G5 j. F
  2584. .DW $0000
    + {! q8 j% m. \+ L# C
  2585. .DW $00003 W  R' N5 @7 T& |7 p- j
  2586. .DW $0000
    * ^3 [, ^- J* x" D' X
  2587. .DW $0000; e. ~8 a( j% [
  2588. 8 w' @  X7 `2 b
  2589. ;==================================================+ Y, W( j7 n  o) n1 k0 J6 s. }
  2590. Sound_Total_Port                          ;曲目总数
    / x0 \- G0 W5 z
  2591. .DB 38& J- }# u( B. G6 h* @
  2592. .DB 336 {' F0 u% ^$ c- I' b# X  Y
  2593. .DB 49$ L+ ~* I% p' y* p* E# n5 w$ y
  2594. .DB 416 f' r" ~% i/ t: O8 R+ n
  2595. .DB 83
    1 U. z7 ]- D7 t) M, T, w
  2596. .DB 70- q7 y  ^; p8 _* I6 m
  2597. .DB 504 X: W# o6 q5 F/ g- A
  2598. .DB 67
    4 O* _. S' ^, b" _, @, m6 B, j/ J
  2599. .DB 57( W1 r  h/ K' T5 H4 ?' m) r
  2600. .DB 71) i3 F' d4 j- T( g, M0 o! F% ]
  2601. .DB 769 T3 H, y1 n. n9 c$ p
  2602. .DB 102
    + h. J& X3 d( b) u- b

  2603. 2 Z+ E+ w+ c; j+ e1 E: h
  2604. ;==================================================0 h) ~5 ?1 _" D" J+ s7 ]
  2605. Sound_Start_Port                      ;起始播放曲目6 G1 R* {0 N7 f+ v) r
  2606. .DB 00& A- Z% P5 u1 q$ N9 c
  2607. .DB 00, e, Z( C2 u6 x6 j
  2608. .DB 00
    5 ]* z9 B, J3 B) I1 h+ m
  2609. .DB 00" z7 K' d- Y* x; ~% O
  2610. .DB 00
    ) o/ m8 ~3 C7 {4 G* y
  2611. .DB 008 N6 C5 ]3 E$ R8 J
  2612. .DB 00
    3 H" s1 ?2 d0 @8 L: m8 q
  2613. .DB 00
    + R# U- U" [# m8 _" F' |5 Y
  2614. .DB 00
    ( c6 S: |- a, M7 _
  2615. .DB 00
    , n* Y" O2 }, h$ o* A1 }) T- x
  2616. .DB 00
    # h' `: R; K& O) {* p! h
  2617. .DB 00* d0 }( ~/ D1 Z  d2 j7 Z
  2618. ! n  K; k8 ?1 k3 b+ y+ J
  2619. ;==================================================
    " _- ~8 w  e4 Y# i" ^: X* V  \  V
  2620. Sound_Bank_8000                      ;专辑bank_80004 c3 U: x2 n% |+ L5 Z
  2621. .DB $10* A' `. g) O/ S* z+ A) o
  2622. .DB $12
    " R, ]# F3 u0 H. U5 D2 t5 R
  2623. .DB $147 V. j# R& z$ Z" `& D6 R+ l
  2624. .DB $16, d+ ?5 X. e4 i: G, d3 D$ m
  2625. .DB $18
    : y9 e' y. A+ f1 {/ f% @6 D: z
  2626. .DB $1A0 Q7 K7 H/ C$ S+ n8 ~
  2627. ! Y/ c- S  T- [7 u% X7 Q
  2628. .DB $003 w( Y) x) v4 f  t. A8 ?, h
  2629. .DB $02
    - D9 }8 r5 Q% t' S, I
  2630. .DB $0D% c  ~; y6 P, H  L
  2631. .DB $04
    ! w5 N4 K$ Q2 z1 ^0 H/ O
  2632. .DB $074 p# i6 Z" C0 k! e
  2633. .DB $0A2 z0 w0 q! V( T# t  h+ X) }
  2634. 3 D  X; d# g/ G% f1 Z; R$ F
  2635. 2 H; `! K9 w1 j0 o$ Y
  2636. ;==================================================
    ! K! g/ {) ]3 w! ?  ^2 g) W
  2637. Sound_Bank_A000                      ;专辑bank_A0007 _1 T7 s& w5 k% T4 A
  2638. .DB $113 q9 ?6 s2 b# U4 ~* F! A
  2639. .DB $13
    ) T4 s9 {2 ]9 s) r/ s7 q: L2 q# a
  2640. .DB $15
    # M1 v4 u* i$ j. x
  2641. .DB $17  C" m! m6 G8 h1 t, g
  2642. .DB $19
    8 y4 d0 d& X1 N5 e; T
  2643. .DB $1B: D$ F3 u9 G, t+ R3 F* g2 s1 v

  2644. . H2 M  x* |+ i: U" l2 P
  2645. .DB $01# p" \" B. }) {3 o
  2646. .DB $03# }: [* O; W* X. }: n4 V* f' R
  2647. .DB $0E, x9 b8 O; @8 z! H4 o' t( V" |
  2648. .DB $05  c  d9 d$ D* \  ~
  2649. .DB $08
    ( l' G) D. E5 f3 @. C& f8 W1 E
  2650. .DB $0B$ a0 T3 z: X/ `- s/ t. U- i3 o
  2651. * w% V$ z7 {& `+ n; f, Q& W4 Y
  2652. , R; p7 l5 f+ m- e. d
  2653. ;==================================================  ^1 B( B5 I& Y4 x& f) ]
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    & I! n' u. |+ R" A8 w$ L
  2655. .ORG RESET_ADDR
    5 Z$ G& \8 }; z1 o9 e6 `, C+ E+ v
  2656. / T! ?3 K3 v, f& t% W, u
  2657. ;==================================================" k6 u" v- F1 u$ @: f+ N* f9 R/ C
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    / c" [, i5 C, K9 W' x
  2659. PHA
    ( k% r9 P5 V1 @" l
  2660. LDA #$06& x& M' q- m) E9 |( q& l
  2661. STA MMC3_BANK_CTRL% p( k& u/ D( |" Y; D' c% c
  2662. PLA* Y2 ^7 L: C7 I1 u
  2663. STA MMC3_BANK_DATA
    3 ?9 v/ x0 q2 o' h  m8 N7 A
  2664. RTS
    ) P9 z3 O8 _* m( ^

  2665. ) V3 L- b" n# ~5 g4 L  v" x. B
  2666. ;==================================================# P6 ?- U% L" S, Q+ ?
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    : \; L; s/ c3 _9 y6 E  S5 l
  2668. PHA$ u% ^* z! T$ W9 [/ B
  2669. LDA #$07& e8 A& p9 v8 K/ b8 U, V& b1 z  e
  2670. STA MMC3_BANK_CTRL! @. W0 Z0 @( h" F
  2671. PLA. }8 U- `( w5 Q/ b' I% T
  2672. STA MMC3_BANK_DATA
    2 u( F8 ^" E3 n: i
  2673. RTS
    3 M8 ^( @% P" n9 s+ }

  2674. ! W+ B/ g% [6 O4 N
  2675. ;==================================================( l! o8 o& \, k: |6 @
  2676. Switch_Main_Bank;切到主程序bank/ f8 N5 B. Z2 C5 M! l" n1 t
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
    & d) G: ~; z! T4 \
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank* J; R, j- i* D1 F5 T3 a
  2679. RTS- k0 q2 P/ ^- w/ D1 I# }

  2680. 0 I+ F; H/ H  V3 o
  2681. ;==================================================
    6 }. `2 y* a' l% R. V
  2682. Sound_Reset;音乐重设(如果有的话); }# }# F3 k5 ^* {
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    , `. v! B6 w( z7 v! o# o7 o; ~- w5 a
  2684. JSR JSR_Addr_Op        ;执行音乐重置
      \, k9 p( p. f
  2685. JSR Switch_Main_Bank   ;切回主程序
    ' \) F8 n7 v3 F, J6 b9 }- N
  2686. RTS' D; [; r- {9 u. h8 p5 y; d

  2687. ! C1 }* S! e2 N: C3 e2 z5 j) e  [
  2688. ;==================================================
    / p7 O6 v: h% n
  2689. Switch_Music_Bank;切换音乐bank8 C; F' ]" r1 Z6 e2 h
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号9 D1 C) @) j# i/ M  m
  2691. LDA <Music_Bank_8000+ |+ S$ m7 n" {* V/ l8 A  l$ g% R/ j
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank1 J- _4 D/ K4 m! g; b% N
  2693. LDA <Music_Bank_A000
    ( F' J% _3 D2 \6 i8 q2 k3 C
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank* W) t; t9 k6 O3 E5 D  `$ \  T; j
  2695. RTS
    " `; t$ g8 u5 A5 v- C9 X
  2696. ) E# B4 b: ?( c2 E/ g; k6 \
  2697. ;==================================================
    9 C& v% _2 p9 b  t( m
  2698. Sound_Init;音乐初始化  }, }! P" }  X% B' {( ~4 y
  2699. PHA
    % ]0 q- Q/ l3 B* X6 y
  2700. JSR Switch_Music_Bank  ;切换到音乐bank" T1 |( m) L* A& }  d" U. q6 x
  2701. PLA* \( ~) F  t; y" j3 |( \
  2702. JSR JSR_Addr_Op        ;执行音乐初始化
    5 Q3 ]4 U- n0 P
  2703. JSR Switch_Main_Bank   ;切回主程序
    + U# z+ [7 h- \) ?0 a5 e( U
  2704. RTS# e# x; L0 Y% `

  2705. 2 s! r9 j% `+ h
  2706. ;==================================================
    0 `7 ~1 U; Y2 F1 H6 y
  2707. Sound_Play;音乐播放
    * t. @0 A* |- ~) v" d  ^
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    : U7 B+ I3 b+ \
  2709. JSR JSR_Addr_Op        ;执行音乐播放% v0 m/ l& b0 W5 t, C9 Y6 W" c" J8 x% z
  2710. JSR Switch_Main_Bank   ;切回主程序1 ^: e  u, l0 E; W0 {
  2711. RTS
    * o0 z( h9 z, c/ L; t

  2712. % F1 L4 z8 p5 S( n2 k6 P/ H% D4 Y2 _; g
  2713. ;==================================================: E' M+ m$ I% ^: R& I: i
  2714. MainLoop;死循环
      e( u( ^9 ?4 I
  2715. JMP MainLoop& J. k" O3 Y6 ?! N+ t# P$ o
  2716. - L& C6 v9 P3 ~* ]0 ^2 o7 f
  2717. IRQ_SUBPROCESS_JMP = 0
    2 o, s2 X5 X  q
  2718. $ ]- s# H$ B0 i5 b9 C$ N: D
  2719. .IF IRQ_SUBPROCESS_JMP
    9 l+ x+ J" b) g! X2 ]
  2720. ;==================================================2 ~" Q0 a& l8 f7 ~& s. Q: Q
  2721. IRQ_Process_0;IRQ处理过程0! x& O3 Y; D0 B. W* N

  2722. . m8 w1 R; t- J* B: Z) d2 R
  2723. ;15条扫描线后触发IRQ( E: Q( D% L5 |
  2724. LDA #15/ f) E8 w' r: L# u
  2725. STA MMC3_IRQ_LATCH
    % I! h$ w+ M* U- Q  m

  2726. 6 L, Y# d- a2 S5 L$ a0 q
  2727. ;设置屏幕滚动) A6 g% r. o8 W& c' u% s  ]% |; T2 h
  2728. LDA <Scroll_H1 Z! F3 `; E- R9 Z+ i8 b9 Z: |
  2729. STA PPU_SCROLL0 T1 U7 k1 t4 c  I. O: W/ x1 i
  2730. STA PPU_SCROLL0 `8 F9 H8 d, {
  2731. + T. C* D9 v6 h( \( c, H5 j
  2732. IRQ_Process_0_End$ a; B; K$ U; n
  2733. INC <IRQ_Process_Index% H/ I2 r# |4 [8 B# ~- J( A$ ^
  2734. JMP IrqProgramEnd4 A- w, y4 o: |; p

  2735. : W) ~/ e& ^' T
  2736. ;==================================================8 _/ t  k9 t7 E, B5 X# _8 f
  2737. IRQ_Process_1;IRQ处理过程1
    ' s( R5 k% t4 z) ^! v

  2738. 2 Z5 Y5 t! A2 \) E
  2739. LDA #55
      ?+ ]7 y8 n% P+ h
  2740. STA MMC3_IRQ_LATCH
    ) q+ D6 x* C9 S4 L1 B
  2741. & u6 F5 R+ b; N, H# O6 m
  2742. ;设置屏幕滚动* A& j( T2 g  _5 O4 f2 _* g( a9 _
  2743. LDA #$00
    * q4 Y& r" T2 X. e5 P7 a
  2744. STA PPU_SCROLL$ T) Q: y9 ]7 h: u
  2745. STA PPU_SCROLL
    ) G2 ]+ F2 b' D! z

  2746. ! r7 n! r& a) |0 p+ u: e
  2747. INC <IRQ_Process_Index
    9 c6 o; p0 i. g: d) l
  2748. JMP IrqProgramEnd
    , o/ m: g" k3 L/ R% A; Z! F

  2749.   h6 Y- t' z) s0 n, Z: \+ _1 i: s
  2750. ;==================================================
    0 L4 i7 W1 {. M$ }6 L# M
  2751. IRQ_Process_2;IRQ处理过程2
    0 S+ b; }* f7 [9 {# m

  2752. 7 m% y: L+ S( m
  2753. LDA #15
    ! o4 D: O3 V" L
  2754. STA MMC3_IRQ_LATCH
    : N, ^1 x$ W+ {: W

  2755. + O/ n# H6 h* X  I( V
  2756. ;设置屏幕滚动
    1 X. \$ y, Q* H3 R2 R7 G
  2757. LDA #$00
    6 V2 w0 A1 O( }% }
  2758. SEC, j% u# f, t  [6 ^8 J
  2759. SBC <Scroll_H
    * O# Y! l- B7 m3 @
  2760. STA PPU_SCROLL: E1 t6 |$ N0 d8 S
  2761. STA PPU_SCROLL* y' t$ p. X: z/ T9 n( T- S5 D/ s
  2762.   Q# M$ j6 n% u. w  f8 _$ Q
  2763. INC <IRQ_Process_Index0 J2 T* j# a2 t4 R" s
  2764. JMP IrqProgramEnd
    8 `, }$ x! |+ [+ I' I. E

  2765. 4 n( r$ v$ ?4 J, w: D
  2766. ;==================================================
    # i  J! p& m' P% F$ [- b: s# I. n
  2767. IRQ_Process_3;IRQ处理过程3
    ( X4 v  R( U. \1 E. a
  2768. , _7 u* v4 F" s' b7 N
  2769. ;设置屏幕滚动8 O3 M* B4 D- t
  2770. LDA <Scroll_H
    0 C8 X' z  |) I1 t/ g5 f
  2771. STA PPU_SCROLL
    * x3 ~4 z+ T7 J' f" Q; {4 x
  2772. STA PPU_SCROLL
    * O2 i) ~& a) c6 t3 z* Y1 ]

  2773. . V7 {3 P3 |) L# n5 Q9 R4 D9 {6 S* y
  2774. ;禁用IRQ, E' W9 K* o7 ?$ g& ?- D* l2 n
  2775. STA MMC3_IRQ_DISABLE
    7 v5 j' O$ K0 L: C
  2776. JMP IrqProgramEnd
    # z" R1 q$ R# k8 P6 m) n- l$ [5 e1 O
  2777. , x4 H$ s, \* \/ g' ^
  2778. IrqProcessAddr
    1 T8 }: a8 r/ [% A" i! x# M
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    ; X) [5 E& b- J" f& d. |0 s

  2780. + G0 T! O5 r+ f' u
  2781. .ENDIF% |' D0 U! t6 M! @6 z$ }6 K2 B, |8 |

  2782. ( ^* f4 d6 @& ~/ i
  2783. ;==================================================/ _) H) |( |2 l8 f) {  y. @
  2784. ;IRQ滚动模式常量
    - x! i4 F/ v- n3 A0 _4 z2 D
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
    " T+ t0 U$ D' P: N4 R  P
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动0 m; r: n2 m% B- [7 Z8 U- E
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动# C) [* _2 H4 D8 Q% ~4 P

  2788.   P( j" H$ x6 B; C8 a
  2789. ;IRQ扫描线数据% @. u% W( Z8 y6 r4 w
  2790. IRQ_Scanline_Data! e: H: C4 U$ q+ W
  2791. .DB 8
    8 P7 B; N) z# R& _) T) S+ i) a
  2792. .DB 54
    " f8 w! l0 O6 f1 m: ]3 s
  2793. .DB 8
    1 z1 Q/ p1 J2 b, U, y
  2794. .DB 00 ;关闭IRQ7 w- C# P% K+ O7 g

  2795. 1 k$ s# m/ D+ N+ }, V3 Z8 B
  2796. ;IRQ滚动控制模式
    7 b' Q* T- P& i+ `! h: r0 k" ^. h4 U2 q
  2797. IRQ_Scanline_Mode
    0 v3 ~3 n! e+ O2 \' U9 f+ w
  2798. .DB IRQ_SCROLL_MODE_ZERO) M; C3 i% c* [  i3 q/ ]1 W
  2799. .DB IRQ_SCROLL_MODE_ZERO1 N& q( q2 c4 y( r) n
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    6 A- m- E; L5 I* K+ [% Z
  2801. .DB IRQ_SCROLL_MODE_LEFT
    4 a( E% n: \  Y) ?7 M
  2802. 8 s& Q) p9 R  \# v, T
  2803. ;==================================================1 Q! M1 ~4 @! `" @' [& s
  2804. ;IRQ处理
    0 {: [* J3 e: a3 k! Z% j
  2805. IRQ_Process
    + ]( |( N+ l( i5 D) ?
  2806. LDX <IRQ_Process_Index
    % \  P) G6 P) h+ I9 L  v
  2807. LDA IRQ_Scanline_Data,X  J& c7 W; @" b6 d
  2808. BNE IRQ_Process_Latch
    3 [, q" V4 G; I$ E6 |/ J4 J
  2809. IRQ_Process_Disable;禁用IRQ9 r. G" y- H2 A5 D7 m
  2810. STA MMC3_IRQ_DISABLE
    6 I  l9 \; m' r* ~2 y
  2811. STA IRQ_Process_Index7 P) c) V8 }4 r( o, ~3 G. N6 v
  2812. BEQ IRQ_Process_Scroll
    5 U" V8 N5 {. ]- y7 \
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    9 m' }" Y* `  [, K0 g
  2814. STA MMC3_IRQ_LATCH
    0 X3 i# H# H' I8 B3 A# J  z# C& D
  2815. INC <IRQ_Process_Index
    " c  _5 V1 M$ ^, ]6 Q, E) ^
  2816. IRQ_Process_Scroll;IRQ滚动控制- p/ u9 [7 S% w' h5 k
  2817. LDA IRQ_Scanline_Mode,X
    6 q6 ?( c! @# M0 a! v" N
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    4 K0 j' v! {% x) W
  2819. BEQ IRQ_Process_Scroll_Left+ {" v6 U& A. }3 M
  2820. CMP #IRQ_SCROLL_MODE_RIGHT
    7 ~, E# A7 w! z& y# d0 q& g) v
  2821. BEQ IRQ_Process_Scroll_Right! [% }  P& ^* \0 {4 i1 P
  2822. IRQ_Process_Scroll_Zero;不滚动( w) v. F$ t! R2 b& `. F! D" ~" b
  2823. LDA #$00
    7 I1 [6 s+ j& i& N- _% B, F
  2824. STA PPU_SCROLL
    + {4 z! `( I" V0 z* \% [9 Q
  2825. STA PPU_SCROLL
    5 P" b& w! m8 [- U' g
  2826. RTS& b2 B, w4 f! i7 ?; K
  2827. IRQ_Process_Scroll_Left;向左滚动
    1 P5 `( L. _: ?; _* z
  2828. LDA <Scroll_H
    9 H; b" q( C1 T3 r! T' Z
  2829. STA PPU_SCROLL, Z( c) Q6 W5 h+ S8 e9 r
  2830. STA PPU_SCROLL
    ! Z9 a5 J: G  n  A! ]
  2831. RTS1 ^7 X% r  A2 j6 m; Q4 Z. v0 }
  2832. IRQ_Process_Scroll_Right;向右滚动
    + ^6 u6 N/ c3 a; F) d
  2833. LDA #$000 w3 H9 G) p# t* N- ~9 n
  2834. SEC
    5 \- X, z! o7 I& A
  2835. SBC <Scroll_H
    # _6 e- [$ e3 x. \8 r% L" r4 Y
  2836. STA PPU_SCROLL
    : r+ n0 J' u  E# p
  2837. STA PPU_SCROLL. I! t# h8 T* e# s/ U1 Y
  2838. RTS
    ( B' f  d: F7 a% _9 A$ R7 h0 O$ E

  2839. 8 r  k8 S2 z9 Y. ?9 k1 I
  2840. ;==================================================
    " x- W" p" \, y$ Y
  2841. NmiProgram;Nmi中断处理
    " N+ R2 j7 {. H2 y  o) k
  2842. PHA
    , F9 Y7 k& X4 x) ^, z. |
  2843. TXA
    % F! }9 g' I( B/ ?5 @4 s/ t; B
  2844. PHA" J: {; n! F6 K% B) `8 v. L. o6 y
  2845. TYA
    * |" d0 M8 k2 l4 m! n
  2846. PHA
    * z. U) c3 L8 M: L# y/ }" t1 v

  2847. 2 }; X3 z* ^$ X9 |9 X! Q* A6 B
  2848. ;读取清除Vblank标志, 防止重复进入
    ( C7 B$ C- R: D( G/ P* u
  2849. BIT PPU_STATUS$ o2 c! w% y8 b6 V3 W7 T. m8 C9 T
  2850. ( k$ e! w$ S/ d% {) z" n
  2851. ;切换主程序bank; d- b7 H5 `. J2 M
  2852. JSR Switch_Main_Bank' F( w0 K2 \; d% e6 A( X

  2853.   I3 j+ O# k4 x3 ^% Y$ O" [' z
  2854. ;Nmi处理
    , b  Q" N1 J" M* v4 x/ j, L
  2855. JSR NmiProcess
    % D$ Z( M6 H% D- d6 B! D

  2856. 1 t: e. Q/ R8 ?6 e3 a2 V( }# W
  2857. Nmi_Proc_End
    1 w1 v) V! `$ i1 B2 l, x
  2858. PLA. Q5 ?5 C2 K# w) L- k, f& n( Q" M0 q
  2859. TAY
    - f' M; U  z5 z5 t: O1 ~' D" S
  2860. PLA6 I' M, B1 p5 v- O0 O6 M- y
  2861. TAX
    % H  C& t" o, U
  2862. PLA
    : d" X$ e1 a: S! m( h- Y" Y0 z' Z6 j
  2863. RTI
    $ \$ K  Z" Q0 H, S$ F" f  l

  2864. 9 d! m/ o8 W9 j: F8 S0 x% S
  2865. ;==================================================# e! {( H8 X, J7 i9 L' W: j7 `# m/ a# {2 S
  2866. ResetProgram;重置中断处理
    % t$ _1 b# N" D
  2867. SEI
    . I! s, G& }, w% @4 H
  2868. CLD: g; x; e9 A. f3 ~$ |! R
  2869. LDA #$00* Y* G6 h5 j+ H% W4 G% v
  2870. STA PPU_CTRL
    - g& ^" {7 u, y/ m
  2871. STA PPU_MASK
    2 h$ ?2 f/ J# I' q* b7 o6 G$ x* p

  2872. . g: V) m& D$ p/ N+ Y) E
  2873. ;切换主程序bank
    1 k: N3 R. k' a6 M
  2874. JSR Switch_Main_Bank2 L7 e, X- z, V" h1 L( ~4 Z" I
  2875. . p' M3 e( k2 A( U/ N) S8 V3 a
  2876. ;程序处理开始2 T: j) h2 @8 ^8 h9 }
  2877. JMP ProgramBegin
    : L6 F( w. H' p. I- ~: [

  2878. 2 d  B+ s# A/ A0 o& ~/ o% {
  2879. ;==================================================
    0 ^5 b% P/ `4 ~' `
  2880. IrqProgram;Irq中断处理
    ' k! v& ?* T* l6 k5 b" j5 |
  2881. PHA
    ( X5 O1 U+ O; l9 j* x  \! h* Z
  2882. TXA& G9 p' _+ q& F, g# l, @, R. O
  2883. PHA1 b2 h; A5 S% ^
  2884. TYA
    5 n$ D. V; k! Y( G3 w
  2885. PHA; V% [2 V  Y1 i1 m0 b, u; B0 B: [: _

  2886. ( N3 R1 K3 L- |6 e, H
  2887. ;关闭IRQ7 r" r1 f2 Q% H; ~  O
  2888. STA MMC3_IRQ_DISABLE# K5 H8 z& \6 Z
  2889. ) ]0 @- M2 x& O
  2890. ;允许下个IRQ触发
    3 o  r& ~  P$ z: ]
  2891. STA MMC3_IRQ_ENABLE+ Z4 o. ~& r: s
  2892. 4 D4 x, \( D% s  w6 ~6 M" o9 {
  2893. .IF IRQ_SUBPROCESS_JMP
    5 T! I  |# ~( f# C
  2894. 9 c4 |, B/ c6 c+ u) y" w
  2895. ;执行IRQ过程# k1 j5 Y9 ?% z
  2896. LDA <Data_L% a3 C7 R7 d: V$ m
  2897. PHA
    % i, |- p9 @% h* R7 q" v' t2 e$ y8 f
  2898. LDA <Data_H- b3 Y/ L/ D& m" r
  2899. PHA
    ; }" v2 k5 w+ A# `& j+ F
  2900. LDA <IRQ_Process_Index' t4 }" l# i" y; _  q) g. D
  2901. ASL A
    ! p$ p$ [1 o/ B3 @
  2902. TAY
    # C6 T7 ^9 c5 ?9 H1 i7 o' T
  2903. LDA IrqProcessAddr,Y
    ! ?2 V6 K, E# i. O+ t* M
  2904. STA <Data_L
    ; D8 X  O. q6 @7 M' w7 ~
  2905. INY
    , j* H6 O  }  Y% _5 e* ?
  2906. LDA IrqProcessAddr,Y
    ( ]% {, `9 u& ?5 r6 F
  2907. STA <Data_H
    1 j6 R6 s4 O) R/ D
  2908. JMP [Data_L]6 \2 r& j) H, F. @' d2 H8 X

  2909. 9 n$ v/ `" h' o2 B+ p/ }; u
  2910. .ELSE: N' D6 i4 S8 q* [+ ]# d

  2911. ; t& o) G4 [+ M& j' z/ _' ]: _
  2912. JSR IRQ_Process
    & f, F8 H' y( P3 B' w* V% p# }
  2913. , U3 @* x7 a, t9 g% M
  2914. .ENDIF
    5 c; \: Y$ r+ \
  2915. , V+ g9 u3 u6 G9 u
  2916. IrqProgramEnd
    9 [2 V# ]8 c1 p* A
  2917. .IF IRQ_SUBPROCESS_JMP
    - t% s! ]& o0 [# h5 `7 i
  2918. PLA
    0 x4 Y) s: R: A/ X& L
  2919. STA <Data_H
    ; [0 ?9 _* f) y7 W& }" B
  2920. PLA$ R" l) T) {4 x3 N& G
  2921. STA <Data_L
    * G* }, N& j& _
  2922. .ENDIF! F2 z" ^  ?+ D4 J; v
  2923. PLA% G& @. q7 g2 A. @
  2924. TAY
    8 M* Q3 f0 Q. N0 E+ }% ~
  2925. PLA1 n8 X  K. P$ h+ Q- m+ |
  2926. TAX4 s& V$ D* `5 K- d3 S
  2927. PLA
    ; i( J5 ^8 t9 u; O# y) V$ n
  2928. RTI9 K7 B/ c* B  A% ?! ~0 b7 F
  2929. 1 `% @  f) j/ o
  2930. .ORG $FFFA1 D0 u+ m0 \: x4 X6 e! ?! ~; G
  2931. .WORD NmiProgram& H0 o4 ~1 Z! E+ L
  2932. .WORD ResetProgram
    7 h8 V" J' \4 c1 r% V
  2933. .WORD IrqProgram
    3 j  z, G% z2 g

  2934. 8 L4 z( V4 |$ k: t! m7 b( ]- u
  2935. .BANK RESET_BANK & BANK_DATA_MASK
    5 X/ ^2 t8 i* j, D6 p3 g2 u) A! z9 l
  2936. .IF SOUND_BAR_SHOW_ENABLE
    : `. a, Q/ S6 |* {7 h
  2937. : |- e8 B8 P9 @# Q4 ^; Y
  2938. .ORG $FE00
    % ?0 u, V6 X5 ^$ X% w
  2939. PHA7 g. H" _" i% s1 B% c
  2940. STY $07BA
    1 k  D. e* G1 N3 W
  2941. LDA #$8D
    6 C8 r0 G& b2 y2 N7 J; M0 b, [/ H$ {
  2942. STA $07BC4 S1 U3 p5 Q& Q7 |1 w8 z
  2943. TYA3 A- o0 \7 B- C
  2944. CLC
    6 d! c) a7 [. H4 N$ ^
  2945. ADC #LOW(Sound_Bar)
    2 {& l' B: J' ~1 R
  2946. STA $07BD
    / ?- E1 ^1 o, Q! ]. P+ {* g
  2947. LDA #HIGH(Sound_Bar)8 h5 r& {9 f1 B7 O/ G9 J
  2948. STA $07BE8 \  _, h7 X/ ]) d
  2949. LDA #$60
    0 h1 y4 G) y4 M4 T$ o, B% F% }0 L
  2950. STA $07BF
    6 T/ i2 K5 c1 ^
  2951. PLA
    4 W- Z% K% i3 }/ k" Q- `* v3 K+ z( l
  2952. RTS! Q. H. s4 y8 Y1 \0 p" R
  2953. : ~. f4 I! n- `& Y; j; b
  2954. .ORG $FE20
    2 M$ d1 h0 k+ R3 ^
  2955. STA $07BA
    " y% `  C2 y, }9 H( X6 d
  2956. CLC
    , }% z* k2 I+ _6 [: j
  2957. ADC #LOW(Sound_Bar)) F! {9 \& ?9 [4 i) m
  2958. STA $07BD
    5 R8 N- e! T. z3 p% ~. a
  2959. LDA #$8D$ L% O3 p# X& L8 `7 y; a% }, w0 e
  2960. STA $07BC  G# C: @- O* {" z% W, @
  2961. LDA #HIGH(Sound_Bar)
    3 D% [/ v$ \$ a9 p) C4 a& V* k
  2962. STA $07BE
    : m% r) \$ f3 u; _7 {
  2963. LDA #$60
    6 D7 U- A+ D4 y: W
  2964. STA $07BF9 q  e( `, F7 Z1 T+ S" d
  2965. RTS; w9 D+ e' i/ t, k) Q$ v1 Y3 w
  2966. # m: ^" S, b) b% V  I/ {
  2967. .ORG $FE402 [  m7 i" ^5 ?$ r2 q9 H- c
  2968. PHA4 I- @  w- N. u' U
  2969. STY $07F1
    . o- N4 {4 V3 p8 O: W: P5 a
  2970. LDA #$8D1 L; r$ M, i+ ]" \
  2971. STA $07F3
    ! L7 h6 N8 I/ c, V
  2972. TYA
    ' d$ C" f! D' P" j$ A# Q! K
  2973. CLC
    ! w: R- {  U$ H! T. C
  2974. ADC #LOW(Sound_Bar)
    3 q. `8 O8 a$ J
  2975. STA $07F4
    3 V( C0 d' b: ?# T( u) u; L1 P  D
  2976. LDA #HIGH(Sound_Bar)5 y4 g( G+ A8 f! Z2 e: ^
  2977. STA $07F5( _, a* @' [( C$ F! @
  2978. LDA #$60
    & n( p- ^" S% G8 @. q4 i
  2979. STA $07F69 F8 c1 l- t* I  [
  2980. PLA
    2 ^8 M( w8 u/ _' a& R& w  S, B+ l
  2981. RTS# W4 v2 ?+ N7 x. \3 m
  2982. 3 S3 S( @# T7 w/ o/ H
  2983. .ORG $FE60  \; |/ M+ I% Y! X# r2 u5 b9 X
  2984. STA $07F1
    8 t0 F2 u6 X' Y6 M  O0 w
  2985. CLC
    4 K. B  c' C8 G: }7 ]: F: G2 Y
  2986. ADC #LOW(Sound_Bar)/ e" M3 o. |- U
  2987. STA $07F4
    / y9 O7 C9 Y% G
  2988. LDA #$8D
    9 Z; Y9 f) i% b( ]) C2 k3 X/ W
  2989. STA $07F3& J3 ^2 r8 @6 x4 ]& @
  2990. LDA #HIGH(Sound_Bar)
    8 z$ z7 X7 f" ~0 \
  2991. STA $07F5
    1 C4 O& ~0 ?6 c* ]/ X
  2992. LDA #$607 ^5 e. t8 z' G( Z! n  h4 m" J
  2993. STA $07F6+ N5 o4 v5 V* ?+ ]6 N
  2994. RTS/ g- ]$ _. ~1 L0 ]
  2995. # R3 j; x8 `" D. r
  2996. .ORG $FF40
    ) J) ^9 ]( D& _7 e1 w6 U9 [: v& [
  2997. STA $4000
    . n$ X  N) z0 ]7 f7 ^7 ^- q4 Y
  2998. STA Sound_Bar + $00
    ; U8 R; J1 P" i3 z6 g% Y  i4 d
  2999. RTS
    - m# i. W& _/ ?8 q, _
  3000. ) v7 B; G- y- y" m0 P4 g
  3001. .ORG $FF48
    8 Z' }8 Y2 p, X! W) T* H. e: j
  3002. STA $4004
    , U) G4 [2 M; ]9 x' l' R! T
  3003. STA Sound_Bar + $04' N' b! w  p$ h& ]0 L" d
  3004. RTS
    / Q% @. \/ Y( q
  3005. & ^$ P' M. B8 K# M/ `5 ]
  3006. .ORG $FF502 v  e6 B1 [) h0 N
  3007. STA $4008
    ( }' A8 Q) S2 G9 ~1 z  B7 k
  3008. STA Sound_Bar + $08
    8 W7 p8 i( M' m. \
  3009. RTS4 g( w4 d6 t8 g, ]
  3010. 3 T8 \/ e( \! G& C: c/ |
  3011. .ORG $FF58
    3 {4 T4 m' n( j# R' |2 ^
  3012. STA $400C
    6 K* R3 O- b2 q' Z
  3013. STA Sound_Bar + $0C$ x7 r$ i0 r+ E; C, y3 L
  3014. RTS
    9 `5 }! z; Z- j* }* _7 j. U

  3015. " j6 U8 x2 W; `+ H: [
  3016. .ORG $FF60
    ' L$ Z3 q1 J) v5 p- B- D* o! ]2 F, n
  3017. STX $4000+ J0 i1 N" N: O; z. ^, \
  3018. STX Sound_Bar + $00
    0 t. S4 x- u' F/ Y  |
  3019. RTS! K0 J2 a- _2 b3 F' O  G; J2 v# R

  3020. . [* ~& |! O+ x: f
  3021. .ORG $FF685 T" T9 z- t3 `2 s
  3022. STX $4004
    & E+ |/ C; `4 t
  3023. STX Sound_Bar + $04
    * o3 v  j% J1 r: V; W
  3024. RTS  S: g& v; q  u5 H) ^( K: N5 h
  3025. ! A" ^2 S) |2 D, w2 C6 A2 s4 K
  3026. .ORG $FF70' \; h5 o/ v% C0 F- K* ]
  3027. STX $40087 ]: l/ u# V5 _
  3028. STX Sound_Bar + $08
    9 f  f8 k7 L5 K, ]" z
  3029. RTS
    & n$ r; [5 d! y! k! g9 J
  3030. ; R' S$ w0 {, p/ G. }0 Q9 ]1 T
  3031. .ORG $FF78) F$ r' B* j4 E6 f' W
  3032. STX $400C
    ( F- G' H. O- [# U! J+ J  B/ B
  3033. STX Sound_Bar + $0C
    ) M* @  L6 }6 i" }$ r: S
  3034. RTS
    9 X+ N, z7 c+ j% n4 ?: W) n
  3035. 0 n) M. m) @: w
  3036. .ORG $FF80- E3 f9 E$ r8 x& r  z
  3037. STY $4000
    & o  q0 l9 b% w/ e( V' A
  3038. STY Sound_Bar + $00, r8 K9 J: w' _$ J
  3039. RTS
    4 }- R. S  B2 W7 i% b% B
  3040.   h& F% k3 M5 k
  3041. .ORG $FF88: o5 |3 Q7 ?9 t9 G# `
  3042. STY $4004
    . k( B2 u, D9 I0 |/ U/ z7 }" y9 O
  3043. STY Sound_Bar + $048 @3 ^1 a1 ]& K3 L0 [; _
  3044. RTS
    , p* \3 ~$ N% G$ m& z0 K

  3045. + \2 l7 u7 }# a# b; h* h
  3046. .ORG $FF90
    . X7 q) V* u3 G+ x& j. b, h
  3047. STY $4008
    * Y- |9 l/ f6 U1 s* O. [- N) A6 {
  3048. STY Sound_Bar + $089 W, z3 i- ^4 V, B; D
  3049. RTS' V+ O4 N; W$ W, a! b, O1 B

  3050. : d& u0 O+ a5 z/ o1 F9 w+ t
  3051. .ORG $FF985 o. B6 I0 e6 |. b
  3052. STY $400C
    9 k; u& v4 G2 a+ i
  3053. STY Sound_Bar + $0C, d3 W# |" z) }  S
  3054. RTS
    2 f+ t* X% N  U$ k6 P
  3055. 0 Z* u- Q  _" c+ ?0 R+ s5 }
  3056. .ORG $FFA0
    6 i. W$ M- Z7 h( e- q
  3057. STA $4000,X
    3 d2 a$ o) ]5 |( {% q/ W( a, w
  3058. STA Sound_Bar + $00,X! L( k; @' I$ G
  3059. RTS
    4 P: S6 _: g) \% E
  3060. " t- W6 ~* W7 n) a0 E' j* q
  3061. .ORG $FFA8
    % O( h4 u+ N" i( L# r
  3062. STA $4000,Y" I6 y* ~8 O2 x- a0 M
  3063. STA Sound_Bar + $00,Y! B. }  z  K, V& d, `3 S
  3064. RTS
    " E& z3 E1 J( j
  3065. " q& M/ t$ U' K" [; g- ]- h& o
  3066. .ORG $FFB0) A$ G) b$ V/ f# ^5 g; p
  3067. STA $4004,X6 u0 u- \8 @# L* x/ r& D9 r
  3068. STA Sound_Bar + $04,X
    ' A, x, G! j$ X$ f
  3069. RTS( L+ l: h4 X3 D9 [( k# t9 N0 q

  3070. 4 t# ?& `( n/ @5 G; o; F
  3071. .ORG $FFB8
    4 q& Y/ M3 }4 L+ _" c5 Y9 c7 n; M
  3072. STA $4004,Y
    9 [# f3 ~* V$ c- v3 g6 j) H: I
  3073. STA Sound_Bar + $04,Y' V# Y: ~& ^5 g
  3074. RTS7 b, a/ L; j0 D) @
  3075. 6 ^' t+ S* x/ x0 ]/ L6 C' ?
  3076. .ORG $FFC0
    & s' }) Z: A" m, l! z/ a' L
  3077. STA $4008,X, A5 }$ E& @  d: i
  3078. STA Sound_Bar + $08,X# R" ~& B6 Q: x+ l
  3079. RTS' i  S2 K; p; }4 {
  3080. 4 u! C3 A: F4 E% g! D. l- K! _; h
  3081. .ORG $FFC8
    0 j% v% u! q! `; A
  3082. STA $4008,Y
    + Q" C' H1 t+ F" K4 h- w- b
  3083. STA Sound_Bar + $08,Y: I, e- O1 I2 X) ^9 B5 [$ A
  3084. RTS
    2 r1 B5 x0 q4 u* q+ V

  3085.   r  \7 n- f* {. ]3 g
  3086. .ORG $FFD0$ `: h+ q$ P; i7 k. g) x6 e4 j
  3087. STA $400C,X
    2 N' R: J: k/ n7 K2 T- E& o
  3088. STA Sound_Bar + $0C,X
    ! L0 D4 d: c! h+ b( e/ a/ \4 f
  3089. RTS
    " \0 u4 n7 L( ~2 h1 Q" V

  3090. ! |  e$ _, k/ |: b" T+ ]+ F8 `
  3091. .ORG $FFD8% ?- d2 H) K% C  ?- J
  3092. STA $400C,Y( e4 K; i$ J, M; D$ X! h7 i
  3093. STA Sound_Bar + $0C,Y
    ! B' B+ w. }2 m. v6 X- R
  3094. RTS
    - [) U$ Q# W5 }/ h, |9 |( ~6 G

  3095. ; }) x9 b; u2 a% Z6 ~( B: _
  3096. .ENDIF
    - n8 L9 A) q6 k1 f2 Y- E
复制代码

! o' A9 R3 H3 K8 Q, f: V2 J0 w/ l: `
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3300 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-25 11:44

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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