EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑
% _% x" {) C+ I  K% b; `9 O! p$ r4 G+ t3 t( x0 r
[FC][音乐12 IN 1]
2 W+ R3 T" b  k4 F; A6 a( M$ v* V时间: 2023.07.23$ t+ r' J5 t$ j
作者: FlameCyclone
7 d# Z4 J- m# z% h  I% h+ U! g
  ~8 O; d4 W6 T* Z2 s! l收录音乐内容:6 B* ?1 w) {/ z6 P  E, A4 b- }
1.Raf世界
" F. e' ^1 g2 ]: E2.最终任务
* F; ]8 Q# ~! K7 `9 A$ Y; T3 g% o3.赤影战士
+ U- J; \: `/ X/ W4.双截龙
; E0 Z# X* H' G: `. X; Z& z5.双截龙2
2 e2 C$ Y9 ~* J6.双截龙3
+ X+ g5 X% e1 }+ g7.洛克人
: u9 y' H8 f+ G! Q. O) q  Z8.洛克人2/ C( f! D1 h. u
9.洛克人3
# i' B" ~2 [$ ^/ P% `( t' z10.洛克人4: w* ^. k" w% ]8 _1 c) O
11.洛克人5
! v$ V" X, Y5 s8 B9 w12.洛克人68 ]" [) K7 f8 M3 H/ d. B2 v+ e4 S$ K- N  ~

$ v) ^6 K/ O: e( j* h1 g: k' c操作:
* ]' r  U4 S( b7 w上键:         上一个专辑
5 w* _" s- ~( E* s  v下键:         下一个专辑8 @3 \5 Z8 A/ X# Z/ H3 [; B
左键:         上一曲) `0 Q9 K3 a& ^5 ?, u) ]
右键:         下一曲' R' u& O: l7 j  X' |: A1 S
B/A键:        前10曲/后10曲: R! }% y! y+ l) d
选择键:       下一页/ U  Z$ O/ S9 V6 X/ K8 A, t4 x' K
开始键:       停止/播放
7 l" z/ z: w* S" |' U% m9 y$ t- g+ N7 t. f+ L) X% z7 I
http://flamecyclone.ysepan.com/
7 w1 B6 R, a1 U% S; r2 ?9 R# h6 k( |
( h) I! Z) J' p1 I
9 K: ]$ b* a1 ]. Q# C8 k  C1 ~4 _' r! f

8 o3 g$ }5 i9 H  M' L8 X! Y% L
  1. ;[FC音乐][播放器模板]% r& J7 ?  Y( q
  2. ;FlameCyclone 20230710, c! t; K8 ~4 d/ R7 M& o- L! i' V

  3. 0 q) ]2 P" @* g( D; |5 v
  4. ;文件头
    - s/ T% V/ G7 B( E/ t8 m4 Q
  5. ;======================================================================
    9 n" x+ W+ J4 l+ o
  6. .INESPRG 16                                             ;16KB PRG 数量
    9 f* a" U4 f/ [% m) q9 L- i
  7. .INESCHR 1                                               ;8KB CHR 数量/ }  f4 e# I2 t. |
  8. .INESMAP 4                                                   ;mapper 4
    $ i! ]$ G$ O* n- X! R
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    / S4 e3 D) ^( N

  10. & ?2 O8 n5 U6 M; ^' L
  11. ;==================================================
    3 N0 M5 m$ O; p" r4 Z' I7 l2 n
  12. SOUND_BAR_SHOW_ENABLE       = 1
    " N$ `5 b$ N5 q5 ]" S' u
  13. ;==================================================
    * p# A7 O( \3 ]6 f1 v
  14. BANK_DATA_MASK              = $1F
    2 C" w, [" N6 t( H
  15. CHR_RAM_ENABLE              = 0
    ; p/ C5 i# T0 e8 k- ^
  16. IRQ_SCANLINE                = 1365 I! l0 G2 H$ k: d
  17. ;==================================================0 K8 `( ~/ A9 U) S
  18. SOUND_DATA_BANK_00          = $00
    & P* y5 ?% Q$ k- ~" K
  19. SOUND_DATA_BANK_01          = $01
    : ^; l" v! G1 X4 K8 Z- j
  20. SOUND_DATA_BANK_02          = $02
    8 a+ F/ m+ x6 Q  k8 M
  21. SOUND_DATA_BANK_03          = $03
    0 R$ S5 \; Z. a
  22. SOUND_DATA_BANK_04          = $04
    # J7 U1 {0 z- ^) O+ G8 q
  23. SOUND_DATA_BANK_05          = $05
    1 @3 l% t# ^) _1 ?" o6 ~; D
  24. SOUND_DATA_BANK_06          = $069 e! h8 x6 l4 s
  25. SOUND_DATA_BANK_07          = $07
    8 c: m, d% A% ^3 ^
  26. SOUND_DATA_BANK_08          = $08
    + m' u/ _  i, D2 i( R) t
  27. SOUND_DATA_BANK_09          = $09
    1 r5 c# O+ B/ v) M' W; K7 A
  28. SOUND_DATA_BANK_0A          = $0A
    5 E7 D4 z: B7 L' Q% K( K" V) a0 ]
  29. SOUND_DATA_BANK_0B          = $0B# m9 I  `- o9 D) ]  K8 a4 i
  30. SOUND_DATA_BANK_0C          = $0C2 D7 m5 r0 n( C
  31. SOUND_DATA_BANK_0D          = $0D
    . N+ x* M/ k- I8 |$ x
  32. SOUND_DATA_BANK_0E          = $0E/ n" w& F/ |$ H' h4 t  Z* J& K* Q4 x
  33. SOUND_DATA_BANK_0F          = $0F4 u, \/ i; L& G- M
  34. ) ]8 P% w& U3 ~: Y. j
  35. SOUND_DATA_BANK_10          = $10
    * w1 y( P2 Y$ q. n4 _
  36. SOUND_DATA_BANK_11          = $113 }- E+ e" A/ @+ c/ Q
  37. SOUND_DATA_BANK_12          = $12+ [% N8 C1 T3 s
  38. SOUND_DATA_BANK_13          = $13& D) \! F+ Y4 f- i& P
  39. SOUND_DATA_BANK_14          = $14
    # Z* P# H/ H+ }$ v
  40. SOUND_DATA_BANK_15          = $158 c, ~3 S# H4 b2 w8 j) @
  41. SOUND_DATA_BANK_16          = $16
    * ~" D+ P) u! P
  42. SOUND_DATA_BANK_17          = $17+ w$ G; E+ C9 N7 Q, j4 P
  43. SOUND_DATA_BANK_18          = $18
    3 i# h/ d& l9 C) t- m8 S) v! D6 A
  44. SOUND_DATA_BANK_19          = $19
    " o  z& S" d, z8 \) l
  45. SOUND_DATA_BANK_1A          = $1A
    6 S; L$ J" p5 X$ P. U5 D1 S. l
  46. SOUND_DATA_BANK_1B          = $1B
    5 M7 T3 P. F- B2 L/ P* ?  z
  47. SOUND_DATA_BANK_1C          = $1C$ T% @; |0 k  C9 B3 \4 R9 Y& k- C' B
  48. SOUND_DATA_BANK_1D          = $1D5 |+ v* }' m) G& ^3 j
  49. / h; `7 v! R6 R% V: h
  50. SOUND_DATA_BANK_C000        = $1E
    / R! [/ n& f1 H( s+ p# }
  51. SOUND_DATA_BANK_E000        = $1F
    6 r8 q- X1 x$ x9 `/ v/ J  u
  52. ;-------------------------------------------------& a2 J" B5 H0 j* M" F0 j
  53. CHR_DATA_BANK               = $20  }' ~& ^2 z: r0 t+ X2 r
  54. CHR_DATA_ADDR               = $A0004 t4 t5 v+ p( o' R( S
  55. ;-------------------------------------------------
    2 L; q$ Z- O9 ?% v3 c6 U
  56. PROGRAM_BANK                = $00& O+ e- R1 m! P) \
  57. PROGRAM_ADDR                = $8000, f9 S. q1 m) A# p
  58. ;-------------------------------------------------: S0 y; b, t3 n! r
  59. RESET_BANK                  = $1F) l/ O) H3 j# l% Y1 P
  60. RESET_ADDR                  = $FD00
    * Q5 o4 q6 m8 m3 C( m
  61. , X/ p* J2 I; y! |# u! |
  62. ;==================================================
    ; d! R3 f8 S9 k* C/ ?
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数1 x9 G3 o% C1 ?8 D
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引( r: [8 }' G: k) h/ w1 U9 e
  65. PAGE_SIZE           = 5                     ;每页节目数* N5 t5 k# f1 @' z
  66. ) f4 W9 W; Q. B, V
  67. ;==================================================) e6 U6 Y5 e. K6 B
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    " y: S6 d- L/ d1 @
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数
    : j4 b4 |" i9 W# i- N
  70. .ELSE
    9 t& K4 q. w( c+ k' `2 {* Q
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数
    & d+ l* v; I" Y8 X% k
  72. .ENDIF' F7 y8 f: J/ I

  73. 5 ~0 P1 A4 i: ]1 B
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
    : c2 j) o% P, a( }* c

  75. % a0 t1 W* `  }" O4 R6 Z$ V
  76. ;==================================================; \! e, @+ R# d+ ]
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置
    5 U% i8 {. s# H$ g+ e+ Z' h
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2
    / d, z* V) v! _
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;% Y+ i1 t. D) A$ _
  80. ;==================================================6 y5 I' c% m5 K
  81. Caption_Text_Pos    = $204D ;标题文本位置
    ; T/ F: m5 N: J9 M8 ?! M
  82. Author_Text_Pos     = $2324 ;作者文本位置
    , H7 \5 {% M) {, D
  83. Date_Text_Pos       = $236B ;日期文本位置' r) U% t! `: I, @% t, B
  84. ;------------------------------
    + T! {, Z& ]! X' W5 ~3 [
  85. ;------------------------------
    9 Q) p; \% ~; \/ ~5 r+ i
  86. .IF SOUND_BAR_SHOW_ENABLE
    7 f; O8 [% b2 p9 O) j# m% G6 L
  87. ) ?( j; h  N. T2 b  ?7 y0 Z
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    ; w9 ~$ V1 l2 C+ w; G
  89. Play_Time_Pos       = $22B3 ;播放时间位置/ `' y# P( T1 G( h1 r
  90. Play_State_Pos      = $22F3 ;播放状态位置
    $ p- W( Z* }4 u7 l6 i- ]2 A1 K3 p

  91. ; \$ c# ^- Q$ O. ]: x, S
  92. .ELSE
    % a+ n' p/ ^5 i- F/ D" e( q
  93.   {; m& D  S  P2 p
  94. Play_Index_Pos      = $226C ;当前曲目位置
    0 S& P0 L9 @2 a! w
  95. Play_Time_Pos       = $22AC ;播放时间位置
    % l) J6 g( p8 v; w6 G
  96. Play_State_Pos      = $22EC ;播放状态位置$ }" Q/ ~$ y6 L4 D# C
  97. + ]/ o' M( P2 X1 n
  98. .ENDIF
    & {3 Y" S' @3 K+ r4 N
  99. ;------------------------------
    " ?! J1 u  K. F1 Z! t
  100. Track_Name_Pos      = $222B ;曲目文本位置
    " R- }- R! \3 E. S& W
  101. ;Track_Name_Pos      = $00 ;曲目文本位置2 R/ D  @( ?  e& ~2 o
  102. Sound_Track_Pos     = $2265 ;声道文本位置* Z7 n% @; P7 H: L( d- B0 h8 N6 P
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    7 ]6 L, U) V" {4 n7 L, L6 S5 |$ [6 I0 j5 Y
  104. ;==================================================
    5 o, R9 ]7 O& N: {9 z5 R1 z
  105. Scroll_X = $00
    , w+ e6 D' K9 M! v
  106. Scroll_Y = $00( _5 ]1 t- y( e7 H
  107. ;==================================================
    ) D/ L1 a$ E4 F) |. Y) z) x. w
  108. Sound_Ram_Addr_1       = $0100
    ' V, @$ x+ F+ w  ^, h
  109. Sound_Ram_Addr_1_Size  = $80
    7 _) ?( o  F! X0 a/ s* Z
  110. Sound_Ram_Addr_2       = $0090
    # S( j! m, A% |& Q# c
  111. Sound_Ram_Addr_2_Size  = $709 l  a7 ~% \1 C! Y7 ^
  112. Sound_Ram_Addr_3       = $0700
    ' O0 \5 Y9 [0 ]! _
  113. Sound_Ram_Addr_3_Size  = $00
    - x1 \9 v5 X& u  _; d  w
  114. Sound_Ram_Addr_4       = $0400
    9 N7 r0 e6 ]4 n7 z1 P! }
  115. Sound_Ram_Addr_4_Size  = $00
    8 `" ]" n! }! i1 ]7 H; E
  116. Sound_Ram_Addr_5       = $0500
    9 A1 g* z2 l: i0 H$ w& d) }
  117. Sound_Ram_Addr_5_Size  = $40
    4 Z) n3 J1 r7 W* _+ O' e
  118. 1 a' P, i0 l9 ~
  119. OAM_TEMP_ADDR   = $03000 p/ L) |% F4 m4 h, f; P* ~) B

  120.   t9 p2 j4 e+ S7 \, a) e! Z5 N
  121. ;==================================================
    - C- M! }8 v* a5 i1 x, @
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器0 D7 n1 p6 k( E! U! V
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    5 V% o) X) |( c6 u2 t
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位1 C) c$ [# o9 @5 E% X' v( g  K! ~# O
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    * N/ X5 J) D( U
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    7 T' k0 f8 T. q5 J, z7 J6 x
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    & q: j$ O/ o1 w" x6 L
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    7 {, b7 h. O% K) j* M8 t5 u1 r
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ) X" f! k7 `* G# K4 F
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存! r7 w; `4 s6 ~- `3 y
  131. APU_STATUS              =   $4015   ;声音通道切换  |  r  l" x) s( f
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通2 s6 V- ]/ Z/ Z% z2 r
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通' `4 P: ~" r, A5 ~
  134. ;==================================================
    # y* j/ z5 s* Y
  135. MMC3_BANK_CTRL          =   $80009 N# Z( u- a8 G2 I$ a
  136. MMC3_BANK_DATA          =   $8001  F7 ]% ?9 Y: H1 _* C
  137. MMC3_MIRRORING          =   $A000
    : `' V  F& z1 g# P5 Z* K" S
  138. MMC3_PRG_RAM_PROTECT    =   $A001+ l* w  C* d5 q" H) }& {1 y0 e
  139. MMC3_IRQ_LATCH          =   $C000: P5 B, C( n# j9 K3 t6 X$ l
  140. MMC3_IRQ_RELOAD         =   $C0017 J9 h6 c/ I5 p
  141. MMC3_IRQ_DISABLE        =   $E000
    & n' a; X0 o6 S! H* U
  142. MMC3_IRQ_ENABLE         =   $E001! U- h, b2 n, B
  143. / j6 {; y( x8 Q
  144. ;==================================================+ J/ W# X. r; O. c0 c% L" o# ?8 P
  145. PPU_Addr        = $0200
    % M5 w' z4 y) s6 w/ i* C3 i) U' N
  146. Palette_Addr    = $02C0
    ) m; l) E% i% L9 q* O8 N$ A# F& V" s
  147. Sound_Bar       = PPU_Addr+$E04 {2 b$ N: R' l" j7 `
  148. ;==================================================, b! j) m7 ]" M5 S4 `$ w% z0 M; {
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D
    ) V# v. n6 f0 S2 A" G9 f0 J7 l
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$113 R  R0 u# P- K4 O1 z$ Z; v2 L
  151. PALETTE_UPDATE_MAX      = $2C
    ( c8 {1 M- `4 d# C
  152. PALETTE_UPDATE_MIN      = $21* P% ]" e6 Z3 b9 s
  153. PALETTE_UPDATE_INTERVAL = 60
    : h  P! R, q9 S- p, n7 A
  154. ;==================================================
    8 p' M6 S, |* |2 c% j/ O
  155. Sound_Bar_Cnt       = PPU_Addr+$F0
    0 g/ s: ~$ M  j0 `
  156. PPU_Cur             = Sound_Bar_Cnt+$02% i( a, N* f- B+ [' w5 ?9 x
  157. PPU_Addr_H          = PPU_Cur+$03, O# c- q% Z' k8 T. U* d6 D4 _$ h6 b' v
  158. PPU_Addr_L          = PPU_Addr_H+$04* e% x* I8 q( J8 L& t
  159. Screen_Ctrl         = PPU_Addr_L+$01
      |/ Y% A# U& D1 r1 S& n1 y
  160. Screen_State        = Screen_Ctrl+$01
    % @7 e% h! X8 V
  161. ;==================================================
    5 m4 Z2 k9 ~3 h
  162. Use_Ram_Begin       = $50$ Q, m2 Q3 L2 [- D+ r; m0 r
  163. ;==================================================
    & z( g5 i* E/ J: Q2 C  \
  164. JSR_Addr_Op         = Use_Ram_Begin2 K# F) r# a+ D0 }
  165. JSR_Addr_L          = JSR_Addr_Op + $01: d; P0 U: J: k2 S
  166. JSR_Addr_H          = JSR_Addr_L + $01
    * I8 u0 M5 |& o; H, S7 Q
  167. JSR_Addr_Rts        = JSR_Addr_H + $01( j1 \5 P" p/ M$ V; `9 F8 G
  168. Data_L              = JSR_Addr_Rts + $01* W7 @# E, t! ^( g7 V3 p
  169. Data_H              = Data_L + $01
    , w0 M' d1 T3 C# A2 p: o" n
  170. Data_Cnt            = Data_H + $01
    6 h) A5 x. H" a' ^2 ?
  171. Data_Buf            = Data_Cnt + $01! {) G' L. U0 [& O
  172. Nmi_Time_Count      = Data_Buf + $017 q2 F/ H) o, s, r: `
  173. Time_Wait_Cnt       = Nmi_Time_Count + $010 t) r! M- W9 R# Q
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    ) `4 _! y6 E4 ^2 Z# B

  175. : R  a0 l5 k8 Y
  176. ;调色板刷新标志
    ' y9 X# L/ H0 q# A' h# M
  177. Palette_Update_Flag = Palette_Wait_Cnt + $016 A7 h2 a: S; W3 F/ K
  178. 3 M: i1 ~3 d+ p. B% M. I
  179. ;当前帧文本写入禁用标志
    1 @- B) R. W  [7 R9 q  S8 @- K
  180. Text_Disable_Flag   = Palette_Update_Flag + $01, m6 X$ e. N9 n' k8 `4 g3 }
  181. 4 h) k2 w9 }8 P: E7 S! V% j4 V
  182. ;==================================================. P" p* _4 H! Z: `
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动8 n- a; M2 x' K$ ^3 G4 j3 t! S
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条
    - U) H2 K/ m& z$ N
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间# S2 l  P, @" e$ u( e
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    ) I, A8 v: M/ S
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间6 C& s* a4 K; P6 j  |
  188. ;==================================================9 p" i& l# o- ~' p0 e2 A6 p
  189. Key_Keep            = Text_Disable_Flag + 1
    , f. d7 Z( \5 E
  190. Key_Once            = Key_Keep + $01( L9 w, Z3 z$ R" b
  191. Key_Kemp            = Key_Once + $01. `1 E) h7 K2 i8 N) C- z
  192. Key_Temp            = Key_Kemp + $012 Q; g3 c0 x2 ~' Y$ R) c! {  V
  193. Key_Getv            = Key_Temp + $01% d; D1 a9 {1 n( B% g( I# {( v0 Q
  194. ;==================================================5 \) L5 R/ X. y7 H3 p0 O2 K
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    ' o& }9 K% o% N% [
  196. Music_Item_Last     = Music_Item_Cur + $01( W5 j& R" X( s+ \0 T% f& m0 Z2 m
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    $ f& z5 @' i, p- w& d
  198. Music_Cur           = Music_Total + $01  ;当前曲目
    + H- `5 M, g5 O$ v8 l
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目* y, L, E- q$ d" x
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态0 z2 b* J4 P) ]' y1 {: d
  201. ;==================================================
    ( E1 [' o% ^. \0 b
  202. HEX_Data            = Music_Stop_State + $01" _* D6 b( P7 h' N/ f( h% J
  203. DEC_H               = HEX_Data + $01( I2 k" r: K7 O3 j! i
  204. DEC_T               = DEC_H + $01, k' X2 f. d$ V' q  U
  205. DEC_L               = DEC_T + $01( g6 e$ J* {1 V7 e" L* B
  206. ;==================================================5 H/ m( @* T, X# A
  207. Time_S              = DEC_L + $01
    0 a7 Y6 ~' X% X+ F1 K
  208. Time_M              = Time_S + $01) M  x7 V; q! s3 O: b$ Y
  209. Time_H              = Time_M + $028 }+ j7 b0 S' V) e8 F2 P
  210. Time_Cnt            = Time_H + $03
    $ L4 }8 C3 N) N7 ?. x& R) R
  211. / e# \; M! E6 g) n
  212. ;==================================================1 ?7 H! x6 u  N# _- I
  213. Music_Bank_8000     = Time_Cnt + 1
    , x* J  u6 x/ E9 t- [# n. n) P
  214. Music_Bank_A000     = Music_Bank_8000 + 1. E: c9 C4 L+ g6 e- [
  215. ;==================================================9 F, [, e) _3 M
  216. Scroll_H            = Music_Bank_A000 + 1$ S" t  M* s" P+ [$ c
  217. Scroll_V            = Scroll_H + 1
    - y" Q9 f& w7 \8 S5 x- W! N( o' i
  218. IRQ_Process_Index   = Scroll_V + 1  W3 C, b2 G6 S0 r7 y" b: K5 z
  219. ;--------------------------------------------------
    5 G$ G  j$ ?. v/ t$ _$ F6 Z' m
  220. Page_Cur            = IRQ_Process_Index + $01* Y- [+ v, b$ I4 j
  221. Page_Cur_Index      = Page_Cur + $01  k1 v: C' I5 w/ o3 R1 q& k
  222. Page_Cur_Cnt        = Page_Cur_Index + $01" g) V  _; s. D) ?
  223. Page_Last           = Page_Cur_Cnt + $01
    & C" O' w9 U3 h
  224. Page_Last_Index     = Page_Last + $01
    9 @. B) k, v5 V5 N8 ?
  225. Page_Last_Cnt       = Page_Last_Index + $01
    * a( x" W$ p# a9 X$ Z* Z9 ]
  226. Use_Ram_End         = Page_Last_Cnt + $011 C7 L1 C" g  W) g
  227. ;======================================================================2 g# Y! L/ W4 n0 D
  228. ;音乐数据块
    * F, P0 F  Q1 H1 s/ l, l; }$ b

  229. 3 S5 `8 b- |8 ?, X$ x& @8 |
  230. .IF SOUND_BAR_SHOW_ENABLE
    4 h  Q* v. v3 O- H9 v
  231. & c9 j* d4 S, W2 S& ]' O
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK5 F" ~0 H, q# a/ w
  233. .ORG $9000$ `* U9 {4 D8 x- G+ ?/ A
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    # @& O7 x% L5 Q: T* X. \0 p: |

  235. 5 N: \' `# z1 q* X$ i
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK5 O. J5 V; B, {: g; N
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    & H; n7 `% w. k" Q- D, B8 W" I

  238. 5 \: {  j0 {, h- G  T; C
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK, U  G4 u+ d4 v9 O! Z1 y5 r: L$ R  B
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"& W0 d9 {+ E' I. X1 z3 D6 J9 M# b
  241. 7 f% e' i+ z4 c* t% G
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK. P5 `: R, n' J! ~" e1 z, _+ Z
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    % b8 C) ^8 V+ Q/ t

  244. 0 Q. C( |# k8 P
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    8 Y0 ^  X5 t3 l- x! T4 B9 N
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank") l/ W) _4 v7 ~' j  f! Z5 c

  247. . {6 V. ?0 ?3 k
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK- r8 u, d0 @: S2 }( u, P  ^
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    ; Y6 T! D: w; `
  250. ' z* g! q: Y1 A$ M5 R- W
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    7 J' B8 a! Y4 k: E
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    # m8 v6 P6 a- D

  253. ' b% W) p8 b( V9 h8 ]
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    ! _- _/ W) \* s# q* d
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    7 o2 j7 q; U7 J2 i0 {. \+ U
  256. 1 d1 F6 j' `: w- n
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK$ T9 `2 t- c) S8 Z
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank": h- x9 ?$ b' A6 n+ E) e8 C% O

  259. % _9 B! {( J2 ?6 l7 f
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    8 q7 Z) f- q6 B* f6 U1 M) [
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"6 _1 H; e. f- }4 @. ~

  262. ) ?+ K3 L) \) z8 t
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK6 ^. v& D; f9 W+ m
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    2 P& c; T4 D; _. U
  265.   |! I5 }  R9 `# a& {
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK9 R4 q  r+ {5 i6 S0 n; o) U' M
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    5 w! H' u* P$ v+ W$ ?& {, [
  268. + `4 s+ l3 N  G4 j
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK/ z0 i% ~7 u8 P( f* A* ^* Y, w- @
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"* M1 j! H( b" E2 Q, f5 C- a: c
  271. + i7 N8 n/ z0 l. |( z
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    . `" ^7 P4 n' R% }5 u  j/ @/ M: V) `
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"
    : N' w, u; c/ \5 w; D# b8 `8 v

  274. 1 A  I7 ]3 }! b. D
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    ( \) s# [, [5 j0 C0 i  C% e. m, m6 M1 o: o
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"; ^" a: U/ g1 s  t! ~/ T/ u- W0 f

  277. ' X9 i7 q: m. w2 I7 C8 ]8 _4 Y
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    5 }3 n& F) C3 Q, ]
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"; B* f5 X1 ]. \

  280. ! O' G, A! |5 a! m# [5 B0 j
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK' ^5 L$ f" w( v, X4 q) s8 z
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"6 f8 t$ @8 w3 w' ?- U3 Z

  283. ' k" L+ Q4 G: C5 [1 E
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK! c6 C4 b& V# N
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"- e  ]* K  K8 W* p: W
  286. - \$ K3 q2 N. q( a* D! c# ^
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    " S" i; e0 `7 s% W
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"4 E: d" [  e+ ^$ _2 O4 n/ n

  289. + p+ |) ]( [/ a7 }( V; y
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK, L! b* E$ P9 Z- J
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"1 d% e5 j3 T) t' h- ^' m
  292. ; ?: w" X" c  P' @
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK. r3 n5 X1 w3 k) r  Z8 x: |
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"# f' W/ r! {. }) c9 |# z+ t

  295. ( |& D* v$ p( a  V4 ~. e
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK3 Y  T+ w" g5 _; V6 N
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"/ G  h9 g# [5 {. w

  298. / l  t" ]' K/ w1 h# O: o! O# b
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    * A* {, e  I& `: U! |( H
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"0 P9 N: ~1 b! ~( ?6 w: H+ R
  301. ' R: Z: H5 A3 b7 d5 `$ Q5 r/ g
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    0 A( c7 D9 B5 S; w
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    . J& D0 I) e* Z4 B( h
  304. , A9 a* q3 ?% h# y" R
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
      ]# p9 O: }3 R) u) U
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
      X" Y$ E6 x9 D* Y0 |/ T
  307. 0 z; h' @# \2 T# @
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    # |; }5 ~  D; A* p$ P. V7 W4 |2 C& {
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"& j8 z# I- |  B+ B, W3 J
  310. ) g$ o& h( H9 w* ?$ `1 m& A' s! ]
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    $ i3 l/ v# S+ J1 d+ _
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"# I7 M5 e5 P# S0 }2 h
  313. 2 H( N, |& p* o
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK/ u; A, W! Z+ @: O+ A
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    * F% S, o3 ^& r8 g  \

  316. 8 R* z0 F# p7 C0 }) x& m5 Q  F2 X$ P2 K
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    " G5 G: T- y9 Y: B7 B5 S+ V
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
      z/ Q  x+ m& f7 Z

  319. 0 m" c' u, P3 ], ?* a7 w9 u, u3 f
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    0 O/ M5 ^4 z$ \4 T( t
  321. .ORG $D4005 ?4 q+ q, _/ @- [* z0 [
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    , g# c' e0 e4 w
  323. / m5 i" q) X6 L, N# V8 x8 f
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK6 A/ m4 j. W( B& C* r
  325. .ORG $D800$ Q  E: I* z" T* X2 ?6 `4 ~
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    6 K$ }+ b/ q7 Y; A

  327. % [: Z1 U+ ]6 J5 I4 Z' S% d0 p
  328. 5 [2 U  s1 z, Z  T; B1 ~/ |* X
  329. .ELSE
    0 R5 Y( a5 u% L; h5 f
  330. 5 i7 ?5 d0 o; R9 \: s" I! G
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    4 f$ n8 v1 z& n: s7 _$ f8 L
  332. .ORG $9000+ V' a6 f' S6 _$ a
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"- `% ~+ K1 P8 W" `
  334.   v! i5 }1 h7 ]: @% U3 D  E, N
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
      V7 g0 O3 a6 [$ X- t
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    2 k: q6 V( W( |1 }$ w
  337. % Q2 y7 U  w; ~8 r8 V
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK# A+ }' t9 `8 z' o/ i, X9 A
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank") Q9 B: \4 _6 x3 m  Z' u

  340. - S# l, X# C) F+ V
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    4 P9 N# h) b$ O! E
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"4 \+ |6 l+ y' R0 f2 K
  343. 3 o+ U4 ]4 i& \; o
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    + z' v8 f' e7 Z3 e" ~
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"/ N; p2 f8 e# \# [; V0 G

  346. 5 c$ g& B. J& m; n& W$ g7 O
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    ( m, @* n% m' @- J9 k
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    0 e/ [- _0 w, D$ O6 u) h
  349. 0 _% d* I1 p; t
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK* }! j- d5 f# g
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    4 i& Z/ Z7 g; f( l" q

  352. : J+ A; Q$ f- U! p
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    ; v: w2 a0 w) u
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    5 c; X. `/ `5 v9 d+ W. ~  s5 p) ^' s

  355. 0 a6 n# u1 H. o0 j* e( d  q4 P
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK
    : m) y4 B! y9 R1 b7 q5 P* C8 C+ h$ l
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"# j/ P/ U  T; G' _. R5 y" h

  358. # u9 R. }- x9 ]! G: j, h8 M
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK7 k. M1 Q: |6 s$ [4 Y7 R
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"- c& ^8 E; \; Q$ m5 ~! _1 M$ c9 P

  361. " ^' }2 ~* e7 u2 i
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK0 j1 k+ o0 N1 i& J% @9 f+ ~- j
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    7 Y7 q  E/ V) e
  364. * Q) C- _4 t4 I  T% s% q, ^  _( K
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK$ ~" a7 m! S1 s
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank". W% I. c& G3 P+ H/ P7 o9 \

  367. 7 }5 y$ g  |1 T, f) s8 {: r+ a
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK# f! B  W! O+ S7 @
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    ; K$ b6 Y. A# L% Z& [6 j6 J

  370. 7 i, L) c9 Q% Z
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    9 e8 @2 l* D6 h4 j2 f: O2 k; h
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"2 c, N0 W' D7 E2 _
  373. ' h4 o- W/ i" c9 I1 J: j& e6 R9 q
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    ; N1 g/ v( q- `
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"6 [) i) L0 \; n! N; k7 |. g% T

  376. , v! U* D" p9 a
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    8 ~  _% Q- R6 Q. c- M! z7 ?
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    8 J$ l- q/ `. B! p8 e7 n+ f
  379.   G; ]& K8 V. _+ u; J
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK) K5 l6 I; f+ w9 _/ A/ u6 U
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"
    + S& t! G4 @+ H2 w
  382. ( i5 ^1 z; r5 n+ l
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    % L& z& R7 Q, X" C2 a' M* w" T
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    : t6 E2 z7 n! o$ b5 J

  385. , [" u& M# O1 Q; d
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK
    8 C) T5 K0 t+ H6 r) X' J& `
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"
    0 l8 X, }- N4 v  ?+ }

  388. 1 l; w' @4 y+ c/ i: F4 l
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK# ~. W6 v! [1 |% b& F; q
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"8 g6 b+ l; z: F4 Z) u% ~; ~/ r

  391. # l7 c# [0 t3 P) G+ f9 S( q, X# Q* ~
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK8 h! R* ]$ V# Z, W' I
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"( B# y4 K4 o6 I/ ^* x; h# A' c
  394.   h" R( n( I+ R: _
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    ( h9 d* T  s1 z, Z6 @! X
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
      Y$ T$ G. [: `; e) z+ S2 y  r
  397. 9 e1 P- }( h5 }
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK. d2 W9 q+ d5 H
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"7 ]( P$ C6 n0 j$ M

  400. + ^9 M  v0 r) K( o
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    2 m6 x) x, P9 c3 L1 P2 H
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"* |4 k0 q5 w2 x' u- p" C

  403. 2 t  U1 U! ^# v& x# n9 [8 `! S
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK  X: A* q0 V7 v3 n2 Y- \+ Y* Z
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"3 p5 F% `# B1 p" b+ @
  406. 8 _% @5 ^7 S7 ^. C4 y
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK. y, f9 H8 F" |0 F9 B& l) Y& y
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    * n. L4 f9 ]* v; _: \' w& O, T. J. \4 C
  409. / i2 J# }9 B" ?% D
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    / B# m9 q5 E4 v8 G' `
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    ! H* z& l# z+ r# m2 p7 Q# X2 t

  412. % w2 A, H& X  t$ B% {& A
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK; l  {' w" c: m0 P
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    7 E. e) A2 C6 ]; H. i- d) p
  415. ( x* n" f8 S( n  X4 C$ H
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK- L2 m+ N0 F2 d$ ~/ J
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    / p. K' {+ d; \% V
  418. 0 n! ~8 K/ F/ L; s. M) x
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK: E4 k" R- u& P; E+ \3 Y
  420. .ORG $D400
    ; ?5 f: {$ G" e& U4 E
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    # |& O- g! T/ a. Z2 ~% F6 t
  422. $ {2 H0 K1 ?6 C' v3 ]
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    $ H8 s6 `7 \% c1 c* d' e. N: F) p
  424. .ORG $D800
    * }% \( f) g; S6 C
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank": }1 A' k3 {( x* B3 U! o

  426. 5 ^! p: ?0 d$ R0 l- z5 [$ o0 T1 r
  427. .ENDIF
    3 u4 T6 c7 Y; E( s
  428. 5 N/ c1 X4 o7 ]: {; E% W
  429. ;CHR图形数据
    # T' ^+ c1 z8 O( v2 u
  430. ;======================================================================
    . |9 N3 g. P; B  q
  431. .BANK CHR_DATA_BANK$ |: R6 A( T$ u3 `/ w* x
  432. .INCBIN "chr_bank/chr_data.chr"5 T3 y6 E1 q: N! E7 Z% ?
  433. : a4 j. l9 s' ?) S
  434. ;======================================================================
    $ B- Z+ W1 [/ l7 `4 S/ L* C! R
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK
    4 J. ^0 J" A& i0 A7 ^: F% _+ ~
  436. .ORG PROGRAM_ADDR% L& @, g3 S* V1 V( T

  437. 7 B% k2 x* T4 o" u
  438. ;==================================================
    & I3 m2 ?: }5 v+ i4 Y% Z0 e6 _7 b0 N- E
  439. NmiProcess
    4 t2 T, Z& v+ }1 P4 h& K

  440. 3 b& O# O& {+ l6 E8 m/ L& P
  441. ;关闭屏幕控制
    - U$ \* n; Q% y/ |. p3 o" o9 O
  442. LDA #$00" b9 _" n3 t# a3 S* z
  443. STA PPU_CTRL( f/ ]- L) a- _. V. C0 U2 D
  444. , }  Q" O6 |9 M: W
  445. ;没播放音乐就不需要触发IRQ
    5 e+ a" Q8 Q: s8 u
  446. LDA <Music_Stop_State
    % b7 v8 z1 ^6 L, D3 i
  447. BNE NmiNormal- i4 Z# K7 o$ N% v3 ?) w

  448. & z7 t- \5 L1 _) B* c; L
  449. ;重置IRQ索引
    - [: R3 @7 c& r8 Q/ c3 R
  450. LDA #$004 C  D) K% b8 y: D9 M
  451. STA <IRQ_Process_Index# w% ~; y) t. A& t5 E* Q' S2 K" @

  452. / i) f; R6 O8 V/ B. M+ }* P
  453. ;时间秒数为空则跳过
    : `' Q$ \$ L4 d! @3 Y  l8 t% W! C
  454. LDA <Time_H
    & M* r. @  W5 a2 t3 u' a
  455. ORA <Time_M
    1 a" w; n( B6 {) {. Q5 k. J7 Y# w
  456. ORA <Time_S; `1 A. d2 U5 p/ C2 ]
  457. BEQ EnableFirstIrq
    ) U  ?- W" T! Z8 \4 s0 ^

  458. + e7 Z% x% T2 F9 }: n
  459. INC <Scroll_H
    5 Z" _- c7 u: C, w1 K

  460. 6 a8 `4 _- H" Q8 O/ Y5 @- v
  461. EnableFirstIrq
    0 R. q: c1 ?( i# {1 |6 T6 Q
  462. ;80条扫描线后触发IRQ
    2 n; C/ F- z% R, F
  463. LDA #IRQ_SCANLINE' y: E  J/ o$ Y- j; i" o
  464. STA MMC3_IRQ_LATCH
    7 ?; N. D3 v: Z1 ]
  465. STA MMC3_IRQ_RELOAD0 S- C. k% t% `
  466. STA MMC3_IRQ_ENABLE
    3 p4 B2 ^7 z2 Z! C+ f2 e
  467. CLI- J! u& f4 X1 Y* e" d4 L
  468. 2 d/ J6 |! M. M2 |/ p9 r; r5 k
  469. NmiNormal
    2 x% [/ p: Z; ~( h0 m. t8 L1 f

  470. , W6 L' W, c) W# [; F0 o' p: r
  471. ;处理PPU图像
    " T: |  }# N4 ?# p) b- x
  472. JSR PPU_Proc
    ; P6 R8 \+ Q: u8 d, s- x0 B

  473. ' Q3 E+ j3 N- l1 s1 g/ v0 V
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)
    $ d4 Z+ b8 E! d% N0 F' c
  475. LDA PPU_STATUS3 A& N* Y5 {  B# z3 w7 J7 G" r
  476. ;LDA #$00
    3 P' G8 |, S' w: B
  477. ;STA PPU_OAM_ADDR
    2 @3 r$ e" T% ~
  478. LDA #OAM_TEMP_ADDR / $01009 f$ Q1 `) J2 m) D6 p( Q3 u! E
  479. STA OAM_DMA9 v5 X- l9 D* T) K  t
  480. * G1 B0 ^2 U4 w$ o$ @% g
  481. ;启用NMI中断
    . V2 [; ]6 n. A3 n
  482. LDA Screen_Ctrl" W. V3 a7 S" L( Y& O. T$ D
  483. STA PPU_CTRL- U( A9 R+ B, Z% Z% g5 M
  484. - I0 L% C8 B4 b7 c) L
  485. LDA <Text_Disable_Flag
    " z  `3 c& q3 s* v  h; h+ }
  486. AND #TEXT_DISABLE_RAM
    1 ?: G, k4 u2 m4 N6 A
  487. BNE Nmi_Sound_Play
    ; i" C) T: a' {
  488. 7 ^6 N/ u1 S1 G/ l+ @
  489. ;处理手柄输入2 D) ~+ |1 j9 u2 X, J
  490. JSR Key_Proc7 P1 E6 d) [6 J; i
  491. - {" ?3 D. w: s! @$ b  X8 p
  492. ;切换音乐(手柄触发)
    ; W- }7 `5 g& E
  493. LDA <Time_Wait_Cnt
    % N" S; W  [: ~( @5 B7 D
  494. BNE Nmi_Cursor_Arrow
    ( P% s! y1 b$ S
  495. JSR Change_Select_Item8 l/ L' c$ O. d) u
  496. + p; s8 c! Q4 u6 X- E' E/ ^8 t7 p
  497. Nmi_Cursor_Arrow
    % s; R1 `; e7 c; |/ N

  498. - F; g- L  w' _
  499. ;处理光标箭头4 U. t& T# w; ]
  500. JSR Show_Arrow
    # W9 M6 I$ V. T0 X
  501. ! ~3 O; [& Q2 Y: W, @" K
  502. ;更新调色板3 k( e3 X( G  S, o: m
  503. JSR Update_Palette_Data/ t5 d5 |: i. d; L+ U. S

  504. 3 q! z3 _, ^! @1 _
  505. ;显示时间(缓冲)+ h& j& ]* S- |. z" H8 d) q! ?1 M
  506. JSR Time_Show
    ! z. j' z& m7 I; i* z# ^
  507. ' b  M0 H% W3 L+ c. E3 q# V, ]
  508. ;音乐显示(缓冲)1 p  M- R  Q% D3 {& f+ C
  509. .IF SOUND_BAR_SHOW_ENABLE: b+ p9 x, _% A7 k3 {" v
  510. JSR Music_Vision
    8 k, L% E  a: M9 v6 M
  511. .ENDIF
    # c: Y8 z, J$ Z' _( R$ N: m# f9 v

  512. " Y7 J7 [) Y- o0 c4 F
  513. Nmi_Sound_Play" o" n3 k3 y  n- h
  514. ;播放声音6 X) H/ e& T3 ?! ]. f: m
  515. LDA <Music_Stop_State
    : y/ h3 C: Q' a( v; I+ ~
  516. BNE Nmi_Time_Wait_Set0 c5 r9 K) h1 {( ]9 O3 t
  517. JSR Sound_Play_Proc
    % v2 d' ?1 k1 F/ t2 t. \8 t
  518. 7 r, U4 p5 {, w0 [6 r* f
  519. ;播放计时
    : m: x$ [6 m1 m
  520. JSR Time_Count# _  M; {; q- m- m8 W, P
  521. % O6 v3 Q2 S* ^' Z. g% Y) Z
  522. Nmi_Time_Wait_Set0 w/ Y0 a, b5 @& d) k% M! z
  523. LDA <Time_Wait_Cnt$ R$ L8 v1 l' n7 \  g3 P7 j
  524. BEQ NmiNormalProcessEnd, a$ [" ^# M7 T, a* J6 i
  525. DEC <Time_Wait_Cnt, K) t4 F6 f5 p) _% \: w( y
  526. NmiNormalProcessEnd
    " z; j9 x% Q: U; F2 n" c

  527. # z% V* h5 ]% A( s% W+ v
  528. INC <Nmi_Time_Count; ~( E! s% n8 c6 H

  529. ' ^! ]8 ^% _- L$ `, ^* k
  530. RTS
    3 u( t9 k  H. Q  L. {9 Q
  531. : w8 W. {2 C' E8 h0 N/ P
  532. ;==================================================* x+ ^1 N3 H- ]2 L% U( z: n
  533. Init_MMC37 B% `8 @* c  J% G
  534. ;==============================
    * E' c5 ?+ `. t8 c
  535. ;禁用IRQ
    9 A  E1 l1 u! s! e$ {- ~8 E
  536. STA MMC3_IRQ_DISABLE8 u! D% u, m$ j. J$ @

  537. # f! M7 n3 ]/ u; }" _  A5 Y
  538. ;水平镜像2 h0 d( K+ D' X; D' z
  539. LDA #$01
    . E3 J- Z6 n: G: Z8 F
  540. STA MMC3_MIRRORING( B/ N8 P! K6 b/ N
  541. % I1 G: a3 m' f+ v' _: _
  542. ;初始化图形bank" y4 R( r* Z; _) l! R" k1 s, b% m; N5 ^
  543. JSR Init_MMC3_Chr_Bank& G; m6 Z# D! `( S0 G

  544. . a2 F% c& j  N( X9 x1 I8 r1 @
  545. RTS
    2 ]7 u' i: P5 g& E0 V; u+ S
  546. ;==================================================
    . q9 }; k2 F) P& r' A
  547. ProgramBegin;主程序( F% X, K" r2 X1 M4 q0 \
  548. LDA #$00
    ( N) H( p) t6 T2 `/ t7 I6 B- ^
  549. STA PPU_CTRL( A7 X1 ~- s! Y
  550. LDA #$00
    3 M, K" d9 W7 F& ]( L8 g
  551. STA PPU_STATUS
    : Q- P9 N6 B: \/ p/ M- {1 ~
  552. STA PPU_MASK
    : Q& h! Q) A" p6 h
  553. STA JOY2_FRAME; h/ e9 x2 ?, `9 `7 t( Z0 S+ C
  554. 6 a# L5 K8 ^& h$ ?' A- {5 ]
  555. STA PPU_SCROLL
    9 K$ B, e5 e! h! d
  556. STA PPU_SCROLL
    9 `7 m" ^$ J3 C! F5 T# `4 B" C
  557. 9 w, S: e' O* r4 p
  558. ;==================================================' |; y# G* k# `* C- f" O
  559. LDX #$FF; q% N  X3 W3 i: W5 U$ K9 y0 f" {
  560. TXS
    0 |. m$ v4 I# d# o

  561. , Q3 A  E2 Y3 p$ P. A- v1 n. [3 ]
  562. JSR Init_MMC3. \& d9 m; ]  _

  563.   {4 Y( H5 {  ~2 M- J, o
  564. LDX #$02
      W8 [% B3 P% I
  565. Check1
    + a( {7 Q4 @' F1 m
  566. BIT PPU_STATUS
    + e% y1 H* [1 w5 J
  567. BPL Check1* r: O8 |; |9 w( J. k  i
  568. Check2( N4 w( I1 T6 {+ R3 w5 N
  569. BIT PPU_STATUS
    & F1 W! ^' @! u" k3 u" c: r
  570. BMI Check2
    . y5 d' s5 _3 M; r, e, Z! I+ T

  571. ! m6 [4 i4 N7 }1 R/ d: J# ^* l
  572. LDA #$0F* p8 X( L% A# L/ l: K/ R3 ^
  573. STA APU_STATUS
    " s3 R; q8 f9 q3 s
  574. LDA #$C0# B/ h3 y; L" Z  S2 P
  575. STA JOY2_FRAME
    0 u1 D# b7 y  X' N( n2 u

  576. 2 d1 C* U0 u9 K! _9 y0 @% x
  577. LDA PPU_STATUS" t# h# |, b# |6 d% f
  578. LDA #$10
    / c  _7 p! Y, f0 f! W) P/ {
  579. TAX
    & d7 O% h. w1 e
  580. Check3+ b, x: [, f: {9 F  [8 g0 ~0 Q
  581. STA PPU_ADDRESS
    , z( R- I' ^5 x) W; A* Y7 s
  582. STA PPU_ADDRESS
    + n( w# _0 ?0 [1 w6 R+ c9 V! `
  583. EOR #$00# ^; e5 `, B8 K& q4 X" E9 A! S
  584. DEX3 I7 H7 J! ^. F9 d5 b' W; _
  585. BNE Check3
    $ \, o7 |8 F) ]. L4 m
  586. ;==============================
    ; k" E  \* O! z1 b4 ^" t( I
  587. ;调色板清空6 k3 O' T9 E) q# }7 |
  588. LDA PPU_STATUS
    ) w: l0 p$ |" B
  589. LDA #$3F# I: i( P' f: z9 u" `5 L' R
  590. STA PPU_ADDRESS, J! O: {; d& q" L. k
  591. LDA #$00& h3 H7 E6 x% h: d$ M$ D: T! N
  592. STA PPU_ADDRESS9 P) K9 S7 V1 V/ `- T0 G" `7 G* F! z
  593. LDA #$0F( j, C9 ^6 |: w
  594. Palette_Clear6 u3 K  m5 R4 e) K8 @+ t) P
  595. STA PPU_DATA3 a" T7 C/ W7 l  A4 w
  596. INX
    3 {* L) F0 ^% X' c3 P5 q5 h
  597. CPX #$20
    + h& Z% `  Y8 ~- ]
  598. BCC Palette_Clear. D+ H  w8 f& K  L
  599. LDA #$008 ?/ T) S  c/ |" k/ @/ T
  600. STA APU_STATUS
    8 ~% H6 {2 [0 E: r; ~- G
  601. ! m9 p3 r9 p6 N
  602. ;==============================  z0 D. a2 R) H$ g
  603. ;RAM初始化  f; A' u( f2 M/ a* J2 G1 f7 D
  604. RAM_Clear_All+ P5 N7 [" ^- u2 N! W# J) }
  605. LDY #$009 L5 `) d& V5 e0 p( A
  606. LDX #$08- q$ X( \! I/ l9 b
  607. LDA #$00$ R' Q5 x2 u3 ^) S4 u
  608. STA <$00" W: A6 v; s- R' o+ c! R5 m
  609. STA <$01
    # e7 p) [4 |+ I0 M; u. z
  610. RAM_Clear_All_Start
    - @. p" M' I2 v5 O5 m
  611. STA [$00],Y0 Q( l  Z% E0 T3 Z% z  }
  612. INY
    6 m" f  ]+ q2 t$ K
  613. BNE RAM_Clear_All_Start
    % g4 [# x: C* M
  614. INC <$019 `. o! }% ?1 G" w
  615. DEX+ e1 A5 d! F$ y5 ~2 E2 l9 }, ^& Z
  616. BNE RAM_Clear_All_Start6 C, b/ D+ r9 d& j1 z: l

  617. , X$ k6 |+ Q0 e
  618. JSR VramClear
    " C7 F- n& a6 Q( U; J2 F& p  K" ~
  619. JSR VramInit
    ! R5 C* {+ p1 k* }3 N, h2 a
  620. JSR OAM_Ram_Init
    , O5 C3 N  ~8 I# b3 [: j
  621. JSR Init_Palette_Addr
      _. R0 t& F# X2 e! N* o* P  I
  622. " F! E" v/ J; ]& W* |
  623. LDA #$FF
    * b  t! V$ B% }! t( u" \" v0 }( u
  624. STA Use_Ram_End
      e; G# ^3 ], C$ F5 ]
  625. ;==============================
    1 L; c5 Q3 k6 S
  626. ;初始化背景调色板1 P" o" R3 \+ L6 W
  627. JSR Set_Palette_Color
    1 Y0 ?% |8 q0 r# X9 I8 w
  628. JSR Set_NameTable_Attributes- f( I/ e" v( D6 x+ I6 S/ |, Q
  629. 4 n8 h9 @4 M' D" e+ R' d9 k  _
  630. LDA #$00
    # p# R3 w* v! _$ i; r9 J$ S( }
  631. STA PPU_OAM_ADDR
    8 N$ l& ]- h" t4 l
  632. LDA #OAM_TEMP_ADDR / $0100* |  s+ E; y- o, Y/ A1 K8 K& u; c7 \
  633. STA OAM_DMA
    ; x' U6 J8 f  x- {' {! \4 v7 T* }/ ~
  634. 8 B; E, z% h# t1 e5 G& B; H8 j8 b- x
  635. JSR Sound_Reset_Proc
    - z3 c& L: ~; w. h% T
  636. JSR Set_Sound_Total; s! }: s/ J  U( ~+ N, {" b. P' a; {

  637. 4 {3 O/ m# M9 V
  638. Init_Start_Music
    / O% ]2 {  r1 v& Q1 V
  639. LDX #$008 k$ _, P( ~$ l8 b" W' l1 P" }
  640. Init_Start_Music_Write
    9 X4 u$ m7 m1 l+ J0 t& \
  641. LDA Sound_Start_Port,X
    : q3 c3 Y1 O% k6 L' v
  642. STA <Music_Cur,X
    ( @, [; F% s. J$ d
  643. INX
    - M0 r# T  D7 h8 @' N9 S
  644. CPX #ITEM_MAX_SIZE3 B2 u) G* N: v/ y' U
  645. BCC Init_Start_Music_Write, _* o$ O. ~5 M7 O2 F& H) C

  646. # }7 v! C" V$ ~
  647. JSR Show_Music_Text
    ' t5 S4 U/ S* T5 J" d3 _
  648. ' W2 O- i5 ~5 D3 ?+ V! p1 Z
  649. .IF SOUND_BAR_SHOW_ENABLE: I) V, ^, m1 L1 K2 t
  650. JSR Sound_Bar_Text_Set) y- v! {1 x2 G! x' z. Y
  651. .ENDIF
    5 Y% S$ J, U8 [2 @' ^
  652. 5 L4 `& C/ z3 b! O
  653. .IF Track_Name_Pos
    ! f' \. R: C+ ?6 R2 L9 c1 N
  654. JSR Show_Track_Info
    0 H8 W3 {  R  b) t
  655. .ENDIF
    + ?, a. J9 i) ^  p

  656. 7 Y6 t, \0 {! b- C' e( x! _2 A
  657. JSR PPU_Proc( Y3 P* `7 H& I8 e( Y: O
  658.   a# M) R1 X' @# i# [- V# u) Q
  659. ;==================================================5 r' ?5 C$ ~5 [$ I4 C( a
  660. ;音乐bank初始化
    4 ^) `( w# c. i" U3 n
  661. JSR Init_Sound_Bank
    - t0 Q2 O: q* Z% w

  662. ! y- l; t) Z0 Z) u. V
  663. JSR Music_Show
    ) K! z! Z7 s- N5 E* u
  664. JSR Time_Show
    8 l' r0 b& U- W8 M: _. f7 q& K4 ~" ?
  665. JSR Music_State_Show
      ~. [4 v0 q3 {: E4 J" L
  666. JSR Time_Delay
    1 c0 t6 p5 \% ?0 D& t% d

  667. 2 u$ g: I# L- d9 J' b( [
  668. LDA #$01
      q4 N' T3 |. J* Q$ G
  669. STA <Music_Stop_State
    . k+ l% S9 N! K$ |3 f( j2 ^

  670. 4 s' `  E8 p( {. e
  671. LDA #$88
    7 W+ k6 d9 m4 j1 y
  672. STA Screen_Ctrl; b7 S4 _& m4 j/ n  X. W
  673. STA PPU_CTRL
    & J0 ~/ m+ a* h4 P5 N. }
  674.   D5 r4 b! {  g: E+ E( ~
  675. JSR Show_Page_Text
    * o& s9 o1 l8 R# W; H3 }% F

  676. - c1 S% t2 e/ Y9 C" F! H
  677. LDA #$10
    " l4 j2 M( x; C: s+ ]' ]7 s* ]- ?
  678. STA <Time_Wait_Cnt
    2 h, m1 @+ G9 I; t1 l

  679. , Q2 t* J: j# X/ m9 `+ O" a  T
  680. Wait_Time_Over
    " c) S% K' ^+ s! C8 ]
  681. LDA <Time_Wait_Cnt
    , b- _- ?2 g3 b8 Z/ \6 b' T
  682. BNE Wait_Time_Over- `0 M7 k( R, E9 L* q% I. y
  683. $ ^( F+ X" a# A* i+ f+ a
  684. JSR Show_Arrow/ c& M( [- @/ }3 ?. b
  685. LDA #OAM_TEMP_ADDR / $0100
    6 \  S6 _) n! e9 Z% H& o
  686. STA OAM_DMA
    % i4 D7 h6 C4 p7 t  b! Y' |1 B6 C

  687. 2 `4 l) z) Z5 i( a1 a
  688. LDA #$1E& z2 T+ f2 G: L6 q1 E% y! H5 Z
  689. STA Screen_State
    : `+ J9 Z( R& ~- b: o; O* k

  690. ) m, l( h0 G& \% u
  691. LDX <Music_Item_Cur3 g: b" [8 u# g+ Y- U1 J
  692. LDA <Music_Cur,X* q) G4 _+ t* x% H" ~
  693. JSR Sound_Init_Proc
    2 ^7 Z7 _1 g" t& E- |. ?

  694. ! ^" m3 r6 M. y
  695. CLI: j( j! e5 g0 \4 g6 s' [; v2 ~
  696. JMP MainLoop: y$ l! L" @" F1 r0 g0 t. a( J6 v

  697. $ x, j; V* s6 O, q/ [$ |! L- j5 k
  698. ;==============================1 R' v1 m5 _1 {, o
  699. Time_Delay;延时等待
      H. P7 i. o! @. i8 M" ~5 ?$ f
  700. LDA PPU_STATUS6 N2 H8 |. ~3 X$ T9 Z' ~
  701. BPL Time_Delay
    4 ?! o0 H$ z1 H% S& S5 e" `
  702. RTS8 \% b4 d  Q# Z& L" P
  703. 3 w% U6 ]7 D* s6 N9 I
  704. ;==============================. d3 E* a) q& G# b7 G1 b" ^4 `/ \
  705. OAM_Ram_Init;初始化精灵内存
    ' w$ i# Q3 q( m" i& j  H0 ^- z: V
  706. LDX #$00# s7 x4 T  M4 ?" w
  707. OAM_Ram_Init_Write
    . D5 _7 i4 U( ~$ E; N& s
  708. LDA #$F8+ l6 C. {: {+ S2 p. s$ r" P4 K* H
  709. STA OAM_TEMP_ADDR,X3 `8 k" b+ c3 {' ^5 z# ~1 T% D
  710. INX
    8 {9 Y8 r3 p) e% X
  711. LDA #$F8  K% S/ v1 s' i9 F- ^
  712. STA OAM_TEMP_ADDR,X$ u  E( @5 I) L
  713. INX
      ^6 f" G" t# O: \6 T1 t
  714. LDA #$00
    / A1 i' X5 i8 _- [* L
  715. STA OAM_TEMP_ADDR,X
    . Q& q9 K  Y- u! @$ O
  716. INX
    2 T# P1 E0 n9 t7 L0 q) n
  717. LDA #$F8- N3 k5 a3 o( I; G6 ~
  718. STA OAM_TEMP_ADDR,X
    3 u4 {( [3 q' \2 j6 Y# u+ O
  719. INX
    / ]4 N( C9 I' P# y& [
  720. BNE OAM_Ram_Init_Write
    8 Y2 O1 F6 {+ M+ c' I9 a+ X
  721. RTS2 ~1 G1 O: t2 B5 y1 Z

  722. 2 I7 N3 X7 ?5 Q2 {# K9 X
  723. ;==============================; B$ t5 ~; s: }  n* a5 R( ?  w4 P5 i
  724. VramClear;初始化图形内存3 l' H; h* k% Y) {
  725. LDA #$202 T8 Y# X( B4 P  c
  726. STA PPU_ADDRESS" z' M8 t! N6 M' N3 j4 [1 e
  727. LDA #$00
    4 T- o' K) i, B' Q3 e6 `
  728. STA PPU_ADDRESS: b! ], g4 p  J5 b% s
  729. LDA #$00
    ' ~# j2 c$ ]/ y7 F7 e0 F
  730. LDY #$00
    6 ~1 c  T! Q& B
  731. LDX #$108 \$ G  c: C" j& n, A
  732. VramClearWrite; N2 [# o- o1 I; W2 d7 b
  733. STA PPU_DATA
    ( ^" z( B( I% y' L; f0 w
  734. INY
    9 u& a4 g* u- ^/ _. w3 L4 M
  735. BNE VramClearWrite
    7 F6 c9 U( A: Z  o0 i
  736. DEX
    # M8 a/ @2 H2 i1 }- s: x! I9 ]: u
  737. BNE VramClearWrite
    9 r( b3 h$ q. t" K3 c+ v) G
  738. RTS
    ) w, e, u1 n! u! c2 ?% V4 x
  739. , m# G7 w8 d9 Q& B; t- v
  740. ;==================================================
    ! ^. G2 _4 C7 l
  741. ;设置MMC3图像bank
    ! Z4 F( j; e. i: B, \* m! |
  742. Init_MMC3_Chr_Bank2 U- `6 e% O) A1 L- I
  743. LDX #$052 [/ n+ b7 I- x8 |( e8 J
  744. Init_MMC3_Chr_Bank_Write5 v4 i4 _& V- n/ `
  745. STX MMC3_BANK_CTRL
    ( m# u" h" ]: E
  746. LDA MMC3_Chr_Bank_Data,X
    # A7 J5 h$ T$ Q# Q- O# f: @8 Z
  747. STA MMC3_BANK_DATA, a6 _! _' d. j3 i; M2 Y; G
  748. DEX
    & l! J2 V, X  [$ n$ e( }
  749. BPL Init_MMC3_Chr_Bank_Write! j3 `$ ?5 C: |4 [
  750. RTS
    4 O0 d; ?4 w* o( u
  751. ;--------------------------------------------------, M. X9 {, U# _9 @6 ]; L
  752. MMC3_Chr_Bank_Data+ _3 f. F7 G4 B& e8 A6 }
  753. .DB $00,$02,$04,$05,$06,$07
    0 L9 o( q) [0 w( i
  754. ) @  `4 r2 Z* E! t: r4 l7 t3 ?
  755. ;==============================
    0 A8 B4 F$ K" Q4 c6 U$ X
  756. VramInit;初始化图形内存  L( x; N/ X7 i! c- C2 I
  757. .IF CHR_RAM_ENABLE! E9 j7 @% e" e0 c; U- b7 i1 c) n
  758. LDA #CHR_DATA_BANK- ^$ A+ H, J' x/ T$ h* i- X
  759. JSR Switch_Bank_A000! P0 `5 j8 a6 O8 h% l4 Z$ ?
  760. LDA #LOW(CHR_DATA_ADDR)% M- W0 m" R' x9 @2 u, T" K/ g+ ]- n
  761. STA <Data_L
    & v! W& d- @( W/ p, g, ?1 e
  762. LDA #HIGH(CHR_DATA_ADDR)
    , z0 n( I( U1 E' b9 v7 u$ V
  763. STA <Data_H
    - V: b! g# f- j7 B% `. j
  764. LDY #$003 @( M& o$ t, q; D9 [
  765. LDX #$20
    2 L1 S+ S  n1 ], Y5 L5 P- r
  766. LDA #$005 t8 Y1 @8 g' L/ S" ]: d
  767. STA PPU_ADDRESS
    ) O' H+ }, J, o* J  i
  768. STA PPU_ADDRESS
    3 @8 H6 }9 j' K. C& w
  769. VramInitWrite2 Q. n5 P  Z( ]% p
  770. LDA [Data_L],Y+ @) H! ^1 u" ?: Q
  771. STA PPU_DATA
    & L2 @& U( Y+ Y
  772. INY
    * G% c1 P0 q" ^8 T. [
  773. BNE VramInitWrite
    4 X/ ^0 d& \4 u% z
  774. INC <Data_H9 R& v' \5 w1 c; B  B
  775. DEX9 R+ ]6 w4 H* t
  776. BNE VramInitWrite6 S1 G3 t# `: {) g% U1 r
  777. .ENDIF
    " D, q. r7 E$ u3 `7 t- }7 P
  778. RTS
    6 i" h* L0 ]- {2 a

  779. 5 ~0 X# C2 ^$ @. _: x$ ~+ ^
  780. ;==============================
    ! ]5 a4 m3 q4 z
  781. ;音乐切换8 m7 }0 y. Z) i& L
  782. Music_Play_Change
    ! r6 x$ X% u, t0 m0 w) v
  783. LDA <Key_Once" a4 Y7 F: B: R. X
  784. AND #$FF
    " }3 r0 Q! k. W4 h  l
  785. BEQ Music_Play_Change_Check
    - @2 G! R. Q( D- @
  786.   `( o9 \2 X6 O1 f$ x+ D. u6 N, {
  787. ;禁用音乐条刷新
    4 @9 g" Q1 N( }& J* h
  788. LDA <Text_Disable_Flag
    & c, }& g( U8 m2 Z! h
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME  Y8 d& }- M/ G) |. o/ y
  790. STA <Text_Disable_Flag7 D, I2 C; |5 A0 R# _
  791. 8 H9 Q, ]7 Z! l/ o' u5 {0 ?
  792. Music_Play_Change_Check; s0 K2 J, s( i3 J
  793. Music_arrow
    " X1 ~- E) [: B( ^( Z3 I
  794. LDA <Key_Once; H& {- F0 r/ o2 z% Q( }7 w
  795. AND #$0F2 L/ X/ _1 `0 K$ d$ S$ ?( V6 Q
  796. BEQ Music_Play_Change_End
    $ S1 T. I! f( r, d1 \
  797. JSR Music_Track_Change
    3 W) g  O$ ~" `) L+ ?9 ]9 c
  798. JSR Sound_Reset_Proc
    - ^; r5 M, r- Y" |/ h
  799. JSR Music_Show
    8 Y  V/ W- o8 A2 R7 A
  800. Music_Play_Change_End
    1 i3 K) {$ ?* [* }/ a9 z: Y
  801. RTS
    ) j. Z& ^4 H( m/ J' d, d

  802. ! K6 C$ p4 b( ~7 e
  803. ;==============================% J! m+ R$ C9 R! a2 [$ H! Z. u
  804. ;音乐曲目切换
    9 Z- E2 |, p8 t' j- f1 k; N( y
  805. Music_Track_Change
    * D( x% f- x" [; b3 ?, I- v8 r: ]
  806. LDX <Music_Item_Cur
    5 c/ U& H* A" p* o: X
  807. LDA <Music_Cur,X" X) o  M. j+ ~9 U: B7 o7 E
  808. STA <Music_Last5 j4 h; J8 A5 h1 e2 b; ?
  809. Music_Decrease
    % c, S1 f0 E0 n7 B* S  p
  810. LDA <Key_Once
    ! f2 W4 u! I) u* O
  811. AND #$42
    # b* A1 w1 H+ s+ f$ M+ {: X7 f; `
  812. BEQ Music_Increase/ P# b4 _6 i4 {4 d+ S; R( `$ r
  813. LDA <Music_Cur,X
    8 K0 C7 t% Z3 g1 w& m3 l
  814. BEQ Music_Increase: C& y' ]+ j  J. r6 O5 t; H
  815. DEC <Music_Cur,X
      G6 h9 p( m& A* w1 ?( l+ s/ [
  816. Music_Increase% a. u- O1 k: i+ v7 W. w
  817. LDA <Key_Once! [& u8 J) G: u6 T/ }! A
  818. AND #$81
    " H2 C4 H4 O5 ?: R' n! `
  819. BEQ Music_Decrease_10
    ; Q% F' a1 D7 `6 S$ F
  820. JSR Set_Sound_Total
    9 X9 H+ W1 H7 K& @4 ^
  821. LDA <Music_Cur,X& ]0 w; z% f3 z% G: _9 P; `/ ~3 J4 l
  822. CMP Music_Total" a1 P% }. S% H% g. a
  823. BCS * + 44 U. i  V+ o( `9 R
  824. INC <Music_Cur,X/ Y" Y" U4 J5 E8 K/ q
  825. Music_Decrease_10
    % X$ _% f6 d. n9 b
  826. LDA <Key_Once
    5 b, e: X. W! t$ N& m
  827. CMP #$04- J; Z" [5 v$ K0 I1 x6 G* \% x8 P3 i
  828. BNE Music_Increase_10
    * h/ `1 T- [: a6 U& I/ `; `- ~
  829. LDA <Music_Cur,X1 G* d1 T* c# v% u$ l
  830. CMP #10
    0 S. E9 S9 d' k
  831. BCC Music_Start_Song_Min: f; m' U+ R1 ^) {% q
  832. LDA <Music_Cur,X
    7 h: f0 J' q1 U5 h
  833. SEC! ~6 r: ?6 P4 e; z: y  k  r
  834. SBC #10
    ; H2 i- {/ A+ X4 N. ?/ a5 K
  835. STA <Music_Cur,X1 G! t! f5 f+ i% Q
  836. LDA #$005 I4 ~  \, _! N$ {; N
  837. BEQ Music_Increase_10
    8 Y' W; D" e) J
  838. Music_Start_Song_Min1 b0 Y) V9 q' a8 {+ D4 z9 S
  839. LDA #$00# i2 D2 ]+ F6 C% h. r9 N
  840. STA <Music_Cur,X
    ; I# T, S! W$ Q
  841. Music_Increase_10
    ; k  t7 y3 n* q9 E7 ^6 j8 d+ G
  842. LDA <Key_Once6 f! D) S) n; m4 Z3 y
  843. CMP #$08# l! w, J9 J; P) d, k
  844. BNE Music_Track_Change_End. L6 ]6 K9 E2 w' u7 T8 |
  845. LDA <Music_Cur,X, F+ t2 {- [3 L
  846. CLC, Z  W. h& w+ b* N* F( P( t9 w
  847. ADC #10% D! U4 E# R2 R* v* @1 ?0 q
  848. CMP Music_Total
    # z7 d5 m4 D2 ?" W
  849. BCS Music_Start_Song_Max" d# L1 y* p: a% P, n$ p
  850. STA <Music_Cur,X) J5 }% W8 B) S" l
  851. LDA #00
    & I9 x8 m7 {8 v) {& c& a
  852. BEQ Music_Track_Change_End1 d6 m4 V+ ~/ k! i# h0 k
  853. Music_Start_Song_Max3 ?7 \/ ], v! k4 U5 i
  854. LDA Music_Total
    ; Y  R; R6 H/ L) ]8 f% O
  855. STA <Music_Cur,X; s! N) v  j9 M! ?- ]
  856. Music_Track_Change_End0 i2 u! h  P( y* m5 `$ \
  857. RTS
      ~4 Y9 w, v8 m, ?
  858. 4 f% p) |* d# h4 P" K; u4 m
  859. ;==============================
    # j! c# h6 E4 m, h/ o
  860. ;按键处理
    , f3 C5 y  S$ _0 F' R/ f
  861. Key_Proc5 N4 w# E! v+ S& M
  862. JSR Key_Scan
    - ?4 D! X; j! H: b
  863. LDA <Key_Keep/ n% ]+ j/ e7 f: v- B1 Y* e: v; t
  864. STA <Key_Temp+ ]3 d0 |# o( P
  865. JSR Key_Scan
    % j4 ]1 |! ~" k5 Z5 _# x6 S
  866. LDA <Key_Keep6 C) F) ~, ]) i% L  l% s
  867. CMP <Key_Temp2 w4 R* i) |2 o$ T
  868. BEQ Key_Get_Once
    , ]" {2 @6 s5 v# _0 K" V
  869. LDA <Key_Kemp" O( |+ g; b9 |5 o" v0 [6 R9 x
  870. STA <Key_Keep4 }! Q7 c: o) t1 P" p+ F! t; {/ P
  871. Key_Get_Once
    % U$ x3 V- r1 A) y7 s
  872. TAY& W+ l& f9 ~4 C, x
  873. EOR Key_Kemp  |6 n+ n1 L) G2 g- n: k
  874. AND <Key_Keep
    " c$ F7 x( T, u; |9 r) e
  875. STA <Key_Once( |" G9 I6 U. Z9 W
  876. STY <Key_Kemp
    . Q2 ?0 Y% Y( m
  877. RTS) W& X' d, z9 E+ j9 [1 c
  878. ;------------------------------% @) ~8 a, q" x; @6 @
  879. ;按键扫描7 P" k2 T- k: a2 ^) \0 E: ~' d; c+ G
  880. Key_Scan5 a6 `3 t. ^: H# N4 q* s
  881. LDX #$01, X) [! L" {+ _, N$ w- M! }
  882. STX JOY1_FRAME
    5 o2 S) m3 p7 I8 b  q
  883. DEX& M6 f9 {/ p" M9 ?
  884. STX JOY1_FRAME
    0 U& V7 T: ~! h3 ], @
  885. LDX #$08
    ' ?& r! p* O* K
  886. Key_Value
    5 D8 {+ k0 S6 z+ p
  887. LDA JOY1_FRAME
    & s; C' c( D+ N! Z1 q
  888. STA <Key_Getv
    & m: r( M. S0 F0 p$ G+ B' x
  889. LSR A. _& W" I) J  j
  890. ORA <Key_Getv
    ) ]+ `* Z. [% T8 E/ A( b
  891. LSR A$ g1 ^9 i6 @* U; U3 `/ [) [/ ?
  892. ROL <Key_Keep
    ; K. a# |0 L  A7 ?
  893. DEX
    / c  h% `3 M; a. K; W
  894. BNE Key_Value
    / l, D- O9 ]: \0 {; d4 G( V; ?$ f8 b
  895. RTS
      p) ]0 J! c- S# m* \
  896. 3 g/ L6 G7 y" X+ @9 k+ e: D% E
  897. ;==============================, }( l$ f1 z& J  Y6 ~" H0 c
  898. .IF SOUND_BAR_SHOW_ENABLE& ?! m$ [. t/ N! x9 W
  899. ;音乐条显示+ b* @( `% {$ _; D% b& `7 F. p/ Q  p
  900. Music_Vision
    # o* l$ V+ d- A* a
  901. LDA <Text_Disable_Flag# S7 a8 \/ F: X! ]5 T
  902. AND #TEXT_DISABLE_ITEM: O7 Z6 }/ a' y2 g- o
  903. BNE Music_Vision_End$ E( K  f. i* N8 h/ |5 C
  904. AND #TEXT_DISABLE_BAR* w# l2 e1 w1 r: s
  905. BNE Music_Vision_Set
    5 h9 s; D3 c5 K1 V/ O& [
  906. LDX PPU_Cur5 j3 ^: r3 F( N! d0 `: K1 @
  907. JSR Music_Animation( X& s6 N# s6 ?* E/ E) ^
  908. STX PPU_Cur
    # Z+ j# X6 Q5 g7 a, Y; n7 L
  909. Music_Vision_Set
    - v% z  K. A/ \1 b
  910. LDA <Text_Disable_Flag
    4 x! v, j# S2 X; l
  911. AND #TEXT_DISABLE_BAR ^ $FF! M5 n4 `% Q2 ]. X4 Y% P- _5 T0 E
  912. STA <Text_Disable_Flag* b: O+ H. h) W8 X
  913. Music_Vision_End
    5 A/ H* W7 R3 C8 s6 d
  914. RTS
    / G& E( ]8 W8 x0 H5 h( W
  915. ;------------------------------
    1 R0 y/ w$ t' k2 R
  916. ;音乐条显示处理; [5 |% H- X/ a* i
  917. Music_Animation
    ! D. u8 L! z# F  Q
  918. LDA #PPU_MODE_CNT_LINE6 {, X  {3 q: ?; m: _7 p. Q. |9 S
  919. STA PPU_Addr,X
    3 B( R( |9 i+ b4 z# W4 U6 H
  920. INX  s! @; _+ V$ |" h, t
  921. LDA #HIGH(Sound_Bar_Pos)
    9 u8 h1 W" q* d! U" ]) N
  922. STA PPU_Addr,X
    - ?  H# r" u- f$ [% ?. d- \. s
  923. INX
    9 [3 y& X6 W) \/ _
  924. LDA #LOW(Sound_Bar_Pos)$ `) w" a- V- A7 ]! v( w
  925. STA PPU_Addr,X% @# n) a& A7 P3 }
  926. INX" a/ |% T  T7 q! ^( h; p$ ~4 Y3 q
  927. LDA #$089 Q$ {$ ?, X, \$ P' A* \
  928. STA PPU_Addr,X3 n" x& G$ U5 Q, T- n# q! t+ I
  929. INX
    7 U1 ]6 B8 }1 |9 t) C/ @) y
  930. LDA Sound_Bar  N8 Z  d. t/ ^( d: k, J
  931. JSR Volume_Convert1 k( a% q) p; y1 e; s
  932. 6 `) b( {( Z, l7 J/ _3 G
  933. JSR Volume_Set_Cnt
    7 g/ o3 x( d9 K3 j0 C
  934. LDA Sound_Bar+$4
    : F3 h2 {& L8 ^: _' O1 n
  935. JSR Volume_Convert, t9 _3 J! [$ X+ j* {. a% G3 y6 V) V

  936. 1 \  @3 Q: W; \7 _
  937. JSR Volume_Set_Cnt* T6 @7 N: B  w+ @
  938. LDA Sound_Bar+$8+ C7 g: K, X/ s# x7 ^
  939. JSR Volume_Convert
    " k9 Y8 m1 C. j- S  x0 x! u* W

  940. , K! k+ N1 O9 Z; K/ k9 p
  941. JSR Volume_Set_Cnt
    8 @; k  [# U; I$ Z( S0 w
  942. LDA Sound_Bar+$C0 i/ H7 \1 G, F* O8 U* g5 Q
  943. JSR Volume_Convert
    $ M  K( A; ^2 |5 Q9 E- `

  944. : e  k# W* Q% h' H. ]
  945. JSR Volume_Set_Cnt
    $ h+ f7 C5 O$ ^7 x( t
  946. # V. ^7 o; L3 z9 X
  947. LDY #$10+ G$ n+ ~4 h; E% K6 ]  a
  948. LDA APU_STATUS
    2 A0 s# f2 T+ \( l2 {7 d; Z4 v, u
  949. AND #$10
    # A: D' ^* H. |& B8 E. Q$ n( f7 T
  950. BNE Volume_Count  p8 a/ L  x( y2 {1 n
  951. LDY #$00
    7 `4 V+ h  w# W6 T
  952. BEQ Volume_Count. s- l8 H8 X0 ], K) K

  953. * C) g1 z- w- v6 B5 ^
  954. ;------------------------------9 x! c" A8 g5 e+ U* [6 _8 x( h( [# l2 N" l
  955. ;音乐条处理
    ) |7 X. @. B  D) y  x3 s5 \  m
  956. Volume_Convert
    ( {3 E- T1 ?+ ^5 I
  957. AND #$0F
    7 n% s8 B, z" x2 Y" \
  958. TAY
    # L6 u+ X5 Q5 d( E
  959. Volume_Count
    % P, E9 r# e8 T2 o. L( H
  960. LDA #$08- j, \: `, @4 L- d3 }
  961. STA Sound_Bar_Cnt
    : i2 u! }3 E, S
  962. Volume_FILL0 m; o# `+ W+ X  @) `
  963. DEY
    ! I- ?* u0 Z: X( e8 [( ^
  964. BEQ Volume_Half
    8 {* ]+ `6 C$ U7 \( e% d" P  j0 E/ K: o/ W
  965. BMI Volume_Empty# N6 x) y2 I. h
  966. DEY6 W/ u/ k8 s! q# e3 U+ @/ n
  967. Volume_Full; u1 q. b7 d$ p8 o
  968. LDA #$16
    : e% ?+ j! f( B0 Z% I% |
  969. BNE Volume_PPU  t: I# t, R; C) P" a
  970. Volume_Half5 x4 E7 I6 \, g1 m
  971. LDA #$15# a7 W4 |7 z: C
  972. BNE Volume_PPU
    . n: p2 ^& A  d
  973. Volume_Empty% R+ a: W1 _8 R& N0 e9 c! b
  974. LDA #$140 @& }6 s3 C8 D4 |% @" K
  975. Volume_PPU7 i9 @9 r0 e0 G) x2 q- h# _1 v4 M
  976. STA PPU_Addr,X, N& X# O0 M- {, {6 j. L
  977. INX0 M; e' z2 `$ u7 T( C  z
  978. DEC Sound_Bar_Cnt7 a9 k6 o* P& x( ^2 s- w
  979. BNE Volume_FILL8 O8 ]; f" l1 e6 M( {+ X
  980. RTS4 @4 q3 Y, \+ P2 N* g

  981. % S" `0 Z  {% x! z
  982. Volume_Set_Cnt0 ^4 j$ z3 s$ k: o9 p
  983. LDA #PPU_MODE_CNT_LINE_NEXT2 h6 [1 `  E: n$ V- {
  984. STA PPU_Addr,X
      I- U6 O0 b8 \1 D: W/ h
  985. INX
    7 J, z( }5 b0 w
  986. LDA #$08
    0 f# Y4 s: p$ ]$ e
  987. STA PPU_Addr,X
    ' @( F* b$ q0 O8 A; v
  988. INX, J& D7 \, \. x6 f0 f
  989. RTS8 F) I9 ]3 x& I6 q
  990. 4 O$ N+ _; T0 R& F
  991. .ENDIF9 d. n0 ?: G7 E
  992. + M$ {4 o6 V& h( X5 E- X
  993. ;==============================
    6 `+ l( u8 j; q% F9 ~$ ]" i/ N* v2 M7 W
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入! M# C* o& t9 e+ A* u; B
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式
    ) z% c5 ], G4 ^* ~+ _* e6 m
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除
    + y1 J9 N/ {; ~$ Q& _6 F
  997. ;------------------------------/ L* {7 q& O1 X# |. z* d
  998. ;PPU处理
    $ T- q% S, T/ O1 Y
  999. PPU_Proc
    # P$ a. X7 ^0 B, P( {5 q/ M
  1000. LDX PPU_Cur  }+ M. L. F( q% I( e
  1001. LDA #$00
    , W  C( m6 v" R0 D) ]
  1002. STA PPU_Cur: E. h' k3 r4 o, I, ^
  1003. STA PPU_Addr,X
    * K& i6 D1 @( l- K; J
  1004. LDA PPU_Addr4 D! ~& i6 w; N& j: d8 O
  1005. BNE PPU_Proc_Beg
    3 [* p$ z0 c' u
  1006. PPU_Proc_Ret
    , e3 L7 o/ n& ]( _4 d
  1007. RTS; }; N5 {5 B/ n% L* Q1 |
  1008. , G5 Y  }+ T: X3 e- L- K* V
  1009. ;------------------------------
    . f/ E2 P3 k) K; p7 Q
  1010. PPU_Mode_Return_Cnt  ;转下行模式2 {' Y8 M' P" @
  1011. INX% R/ k7 c" v+ m6 |
  1012. LDA PPU_Addr_L
    3 T+ J9 \; _3 p: x
  1013. CLC0 f& v1 t$ k& E6 y) a
  1014. ADC #$208 d  k: r! c0 M2 K$ e; S
  1015. STA PPU_Addr_L& }3 K- i1 ^& t3 r/ k
  1016. BCC PPU_Mode_Return_Cnt_End
    9 K2 j  V3 V$ p' `! U
  1017. INC PPU_Addr_H
    $ N2 d% a' t5 z1 T$ [/ W8 r
  1018. PPU_Mode_Return_Cnt_End
    $ ^) H% `. ]$ e: B1 G' [. [( r
  1019. LDA PPU_Addr_H; `/ l; q5 k' U% D! G7 a2 ?3 @
  1020. STA PPU_ADDRESS
    : b. ]% t: ?  U: w2 ]1 `- m% _0 r
  1021. LDA PPU_Addr_L
    ! n% I. h# ^; c$ C1 r* A
  1022. STA PPU_ADDRESS
    2 \# g2 i5 s! d! s
  1023. LDA PPU_Addr,X
    / d2 q3 k4 P  P: j" `
  1024. TAY
    1 K: A) ]8 I5 b- ^6 I2 R
  1025. PPU_Mode_Return_Cnt_Write
    / G" U1 t6 Z% D
  1026. INX
      F8 I6 r3 O0 u- y3 d, f; u' \/ Q
  1027. LDA PPU_Addr,X. j" ?# d. b. \" l9 \
  1028. STA PPU_DATA
    6 L% {" Y- l! H6 @. H! k$ G" I8 G5 G
  1029. DEY
    7 P) [# D8 t1 g+ W4 B1 H( v" G3 d
  1030. BNE PPU_Mode_Return_Cnt_Write
    . K5 v8 V; I0 k) O9 I9 B: |
  1031. JMP PPU_Proc_End
    ; W& k+ A  \- n8 a

  1032. . Z/ q, u! A3 E9 D# A
  1033. ;------------------------------
    3 }! P% M9 z3 l9 B- L, b
  1034. PPU_Proc_Beg  ;处理开始3 ?1 v+ D" X: y2 v
  1035. LDX #$00
    " s7 i6 o& }# Y$ K+ H
  1036. STX PPU_MASK- G4 z4 \; m- y: _
  1037. ;------------------------------
    * ?- z6 X& G3 m' g  l$ d
  1038. PPU_Mode_Select  ;模式选择
    - ], u1 {4 R* G% v/ K
  1039. LDA PPU_Addr,X
    2 Q. I" m& u# U1 O. ?
  1040. CMP #PPU_MODE_CNT_CLEAR, d7 l( R3 D6 T) f
  1041. BEQ PPU_Proc_Clear
    ' `$ C/ t- U+ D; ^
  1042. CMP #PPU_MODE_CNT_LINE  w3 ~1 a# @& m( f4 \" `/ Q
  1043. BEQ PPU_Proc_Cnt_Line
    1 s; |: S# U, K" R- k3 \" d
  1044. CMP #PPU_MODE_CNT_LINE_NEXT
    " x+ m7 H- u2 _0 p# C/ H" Q
  1045. BEQ PPU_Mode_Return_Cnt" S3 ?3 K% C$ Y7 S2 ^8 a
  1046. JMP PPU_Proc_End_Write
    % N; B5 V2 C( B. W
  1047. ;------------------------------+ _3 E7 T" W3 v7 C/ D$ c* ?* ]
  1048. PPU_Proc_End  ;单行写入结束! w: Z. E3 p- P. n) T* p: A, r( M! T
  1049. INX! R0 T( f( C5 g% b, o
  1050. LDA PPU_Addr,X6 T8 j( `5 j; m- H- x
  1051. BNE PPU_Mode_Select  ?( k9 i+ E: d3 q, N2 r6 F
  1052. STA PPU_Addr( q% T9 w/ g) {
  1053. JSR Update_Palette_Color
    7 P3 K' L; l6 z) {- t" D

  1054. 5 y! ?# {* O- X- d
  1055. PPU_Proc_End_Write0 l4 z2 ^- Y3 p: z
  1056. LDA #$00- I2 L" Y# K: d2 l
  1057. STA PPU_ADDRESS
    2 N9 _# `2 ?% A# E$ [
  1058. STA PPU_ADDRESS  c4 {; Y( z: @5 {1 ?" N6 _
  1059. LDA <Text_Disable_Flag; }* [2 o$ |$ V9 y8 b6 x
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
      ~7 `8 s/ r- _+ O
  1061. STA <Text_Disable_Flag
    0 v9 k8 I6 R4 u3 Q
  1062. LDA #Scroll_X4 h& v% [, `& c# [. N8 Q
  1063. STA PPU_SCROLL
    " a' T- l- Z' r' [6 H: _: y$ R
  1064. LDA #Scroll_Y- {8 p9 e) i( {
  1065. STA PPU_SCROLL
    & F, X2 g- ]" y0 a$ r
  1066. LDA Screen_State
      Q2 N6 m- R. h' t8 O( h) g
  1067. STA PPU_MASK
    4 ?$ S$ o+ H! w* u& b( ^
  1068. RTS
    ) _8 ^2 R* P8 V1 n0 Q+ p, z1 o
  1069. ! G9 L+ n: ^6 f6 P1 N5 R6 n% x3 V
  1070. PPU_Proc_Clear" ^3 q# X4 W2 w+ q
  1071. INX$ h  R8 {% y4 n
  1072. LDA PPU_Addr,X+ U$ J- y5 H9 Z! C
  1073. STA PPU_ADDRESS  {3 D) R$ @$ b# R0 G; @  H- Y
  1074. INX
    4 B4 {* q2 P- y5 m% e2 w+ K6 r
  1075. LDA PPU_Addr,X9 v# M$ d+ I' }/ C" p2 A/ w
  1076. STA PPU_ADDRESS7 E7 K6 V! ]1 N2 {
  1077. INX
    ' x. Z, h- B8 }  [, f
  1078. LDY PPU_Addr,X
    , W2 u; }# Q& A7 ?+ a5 f
  1079. LDA #$00" ]6 O. A: Y$ w
  1080. PPU_Proc_Clear_Write( }& D$ ?+ x- V  u2 M8 b2 S
  1081. STA PPU_DATA* w, k% ^+ Z$ ~- W1 J
  1082. DEY
    , u/ ~  X# ^8 h. O* a# U$ k
  1083. BNE PPU_Proc_Clear_Write
    1 E; N0 _, l0 w$ }# d' A
  1084. JMP PPU_Proc_End
    ) H' L9 Q4 W2 r8 \% s
  1085. 3 w* q* K! Z. H/ R! M+ `' l/ O/ a5 P
  1086. PPU_Proc_Cnt_Line' J: u! {! w: E* v
  1087. INX
    ( B* |" _) M1 M6 H: _
  1088. LDA PPU_Addr,X2 ~- e4 J3 `- s8 _
  1089. STA PPU_Addr_H
    ' p8 Y- r5 s$ j" p2 {
  1090. STA PPU_ADDRESS+ a0 ~) r5 U, T8 L( X3 G" ]
  1091. INX- R& [2 C+ W( O' L
  1092. LDA PPU_Addr,X
    ( ]9 h: [9 G( N& E
  1093. STA PPU_Addr_L
    ) y1 w' A+ D5 v6 ~4 W
  1094. STA PPU_ADDRESS
    - R$ e$ G% h9 z. b+ M/ T- d. }
  1095. INX" ?0 n. j$ F5 O0 m) ~5 \" M) J
  1096. LDY PPU_Addr,X8 k" j5 y: t4 z* `, y0 `
  1097. PPU_Proc_Cnt_Line_Write
      `- i4 l  k+ @$ ]6 J; X) x* K
  1098. INX4 }' }3 O( f# ~( b" ?- y
  1099. LDA PPU_Addr,X3 l8 s' E0 x$ v$ q/ t
  1100. STA PPU_DATA' H+ O7 F  y+ y- V! Z" m9 q# Y
  1101. DEY
    ) \1 X' w# F! j' V/ Z0 u+ A) E
  1102. BNE PPU_Proc_Cnt_Line_Write
    4 Y% R6 ^; T- n& _* V
  1103. JMP PPU_Proc_End
    / F& S9 A- \2 e: j* ^# i) B

  1104. # W/ J( j2 f7 l! |. s7 x) U/ s+ D
  1105. ;==============================0 r6 }0 O6 H4 H) n0 a+ g" F
  1106. HEX_To_Dec;十六进制转十进制9 `% C1 U% q/ t# v
  1107. STA <HEX_Data
    7 `% ^+ v- e2 j
  1108. PHA& A" }) A+ B8 p2 d; ]
  1109. TXA
    4 t8 c+ k% a+ V" s
  1110. PHA3 p- M. a; X& r6 {2 _; Z
  1111. LDX #$00
    ; b0 }) u  q5 n% T7 ^
  1112. LDA #$00* {- _) l! \6 Q+ D! i3 U: P) ?
  1113. HEX_Cln
    2 W& q: q# {3 ^. x  }. t
  1114. STA <DEC_H,X
    7 x* P  ?# }6 \( ]5 J1 p
  1115. INX
    ) L2 D0 U$ K% O5 q, p
  1116. CPX #$03# W; P: T) @$ D! z8 S; Z. Q
  1117. BCC HEX_Cln& m- D; t: v! W, c% f. v
  1118. LDA <HEX_Data
    ( Q8 `5 A! q* p. V& p0 C) x' c
  1119. ;------------------------------
    + J/ ^+ ]& s! h* ?- t3 C
  1120. HEX_100
    8 G) ~* I, \' O
  1121. CMP #1000 @" \# q! q1 X' S1 [1 p* X& C
  1122. BCC HEX_10
    0 w! v0 U" `: I: \3 l1 {- C
  1123. SEC
    # X/ S* j- ~9 E9 P- L8 @$ T' E
  1124. SBC #100) u" m% w! ^5 o$ d
  1125. INC <DEC_H- ~; H- W# ~) z9 y, t# u+ }( D
  1126. BNE HEX_100$ [# i$ i  o: b: R
  1127. ;------------------------------
    ' B) X' r" B2 N3 F: o& i
  1128. HEX_10; X" Y0 A! F. S
  1129. CMP #10
    ) f/ t9 [6 k& ]8 K. b9 x
  1130. BCC HEX_10 {; u% B% l# _+ o# x6 t, u
  1131. SEC5 H- _/ T5 u, B: Y, y# ~. V* a% E
  1132. SBC #10$ P! R- A) K  G+ t2 E3 B# M
  1133. INC <DEC_T
    ; ^. H3 T7 b& j# N
  1134. BNE HEX_10) H% q6 y0 M7 Z- d9 g
  1135. ;------------------------------6 w2 `3 n7 o$ t: x- s4 ]) O
  1136. HEX_16 A$ J1 A; g& e4 W4 M1 |+ n( z
  1137. STA <DEC_L- x; w- O$ C( o( @: a% t( m
  1138. PLA
    5 o8 W8 h; r3 f! t' ~; x7 K- `
  1139. TAX2 _+ k5 P9 U. u# _6 w2 K' n" B: a+ J
  1140. PLA0 b0 w6 F1 a8 V( p: ]6 f
  1141. RTS' d# D4 w2 u% M) T6 H, c8 C. @6 r) u

  1142.   y: W: M# @  H& o) k6 _) K
  1143. ;==============================
    + Z8 w" @7 C2 D- D0 T1 b& G
  1144. ;音乐曲目显示
    ; ^' J$ I, h' e7 V: i5 ]
  1145. Music_Show& g" c# C3 M- ?1 R5 B' U4 P) \$ M0 _
  1146. LDX <Music_Item_Cur
    % _4 s4 b3 j4 K1 i9 e: H6 B7 e
  1147. LDA <Music_Cur,X
      w, E6 ?) c; ?/ J  x
  1148. CLC1 y  w7 `% M+ q- s  m/ G+ o4 g
  1149. ADC #$01
    6 [5 c& L. p, l" _! f
  1150. JSR HEX_To_Dec
    # T0 D+ H: V$ G
  1151. LDX PPU_Cur
    ( L! L+ W4 F4 }2 _7 ~" j$ }
  1152. LDA #PPU_MODE_CNT_LINE  q/ ?$ g" h- w
  1153. STA PPU_Addr,X
    5 C% q+ F, }5 B0 N
  1154. INX: o) s3 M: h6 @( t# n# ?
  1155. LDA #HIGH(Play_Index_Pos), N9 d7 Z2 `) @8 o! A% n
  1156. STA PPU_Addr,X: z; M! {5 U+ b1 [4 q# S
  1157. INX
    ! h- g5 [9 G$ N* N+ @+ p
  1158. LDA #LOW(Play_Index_Pos)+ g/ F$ t; L* C4 T% W
  1159. STA PPU_Addr,X  H! |: T7 ~4 ^9 y: S
  1160. INX
    0 B7 |, ~& V: N) X  P, N$ Q4 K

  1161.   y4 |$ C' J6 B$ _
  1162. LDA #$07: s' i6 W( K, \' z" s4 `- M2 Q7 y* l# F
  1163. BNE Music_Show_Length
    ; ~! {% L; f; o. S# \
  1164. 2 b0 E: M& O+ O: S1 W8 |
  1165. Music_Show_Length
    ' m7 V3 V% ^2 v- G: _7 E5 u% G, J
  1166. STA PPU_Addr,X
    9 k. a# h, [) |7 R! W& T: h
  1167. INX0 {# @% J) `0 y+ Q/ m5 Q' w
  1168. 4 n8 v5 T3 t  A
  1169. LDA <DEC_H
    . t+ T8 B8 \" |- ]& R
  1170. ORA #'0'
    9 J% I. R) @$ R4 v/ K
  1171. STA PPU_Addr,X# @  x% v& y9 Y. ]$ }+ o
  1172. INX
    & _, ]7 ]+ ]7 c9 @2 k
  1173. - {6 w2 X+ x& g0 p2 x
  1174. LDA <DEC_T  Q4 L7 |8 _" E* Z% }! J
  1175. ORA #'0'
    8 W# ~7 h* Q! z2 R' Q9 `
  1176. STA PPU_Addr,X
    2 S) f7 }$ Y* h/ e/ z) s0 i4 ~
  1177. INX
    / j0 j3 F4 n6 _& b# L. y8 v; l$ k. V
  1178. $ h6 _- [7 v- I
  1179. LDA <DEC_L
    6 H5 g% Z7 e; z7 ]
  1180. ORA #'0'* z- E4 n: a, ~; h
  1181. STA PPU_Addr,X
    $ C* Z% ?5 b0 X- b7 M: I- \% N
  1182. INX; P3 o+ i1 b/ o; N. d/ g
  1183. # G; e6 n/ q- T) X/ r. s
  1184. LDA #'/'
    3 v' i" D2 G  ]3 U# X6 G
  1185. STA PPU_Addr,X+ h( i+ ^+ c. ?9 M
  1186. INX/ Q/ D. e' v! ?
  1187. Music_Show_Total( \, G" q/ k& r4 G
  1188. LDA Music_Total7 I" O" \, R2 f
  1189. CLC
    7 z3 m. V; I& X# E' Y
  1190. ADC #$01
    # {3 ~1 L' f  h
  1191. JSR HEX_To_Dec
    3 T- o# @5 D% j# U7 C3 \+ P' M* a

  1192. " s4 S0 g" j$ m; w
  1193. LDA <DEC_H, b3 u; I1 Q' ^" }9 P9 q
  1194. ORA #'0'
    * M+ {7 l) ^3 h, n+ G9 q+ N
  1195. STA PPU_Addr,X
    . s; H- l% d; d8 p- o& a
  1196. INX0 F9 _5 P. K7 l+ a- ?1 R
  1197. ( R# K$ t, @0 W% B
  1198. LDA <DEC_T: R& f4 f" o$ a, t7 Q
  1199. ORA #'0'2 S" s" Z7 G# v# c4 Q0 m7 l
  1200. STA PPU_Addr,X
    2 a* |3 T6 B7 g0 m$ ?, m, z
  1201. INX+ r* u! K* A8 T  C' J4 [  ?

  1202. / z/ z0 W& P0 x- T, N
  1203. LDA <DEC_L& @8 A! l' A9 |+ n8 _
  1204. ORA #'0'3 w2 l- D. j# ^: s+ p, s
  1205. STA PPU_Addr,X0 p; D5 Y  d& h: F1 |. Q* C
  1206. INX
      s4 q3 ^9 q& J8 D1 x8 y
  1207. " h" N* S/ M( C8 @3 G" M: D& A
  1208. STX PPU_Cur
    9 Y* J" i/ n( r8 p2 r
  1209. Music_Show_End7 f; t' D5 o3 z7 L; t( s: C
  1210. RTS
    5 ?% C. R  f  _" q% R! X

  1211. ( ]3 y2 `8 {5 @$ a# {, @
  1212. ;==============================
    $ q4 V9 d6 {& a/ M, P- \
  1213. Time_Show;播放时间显示
    , H# k& [9 F4 o$ `2 Z5 g  L2 n
  1214. LDA <Text_Disable_Flag+ \' A* a" M0 x2 H$ M" o6 X
  1215. AND #TEXT_DISABLE_ITEM1 V1 `# q( S0 u8 E' @; S1 x4 ?* W
  1216. BNE Time_Show_End
    0 |7 e" O1 q6 o5 s
  1217. AND #TEXT_DISABLE_TIME
    ' k" O* |' _( d" `) I$ \
  1218. BNE Time_Show_Enable
    6 z3 P  ]- R( R; [1 E
  1219. * T2 H! S! R7 r6 K
  1220. LDX PPU_Cur6 v2 j, \$ X3 T  q
  1221. LDA #PPU_MODE_CNT_LINE
    6 [+ X* @, O$ ^3 I$ |; B  O
  1222. STA PPU_Addr,X
    9 J7 D% P% k1 z
  1223. INX8 M; }2 z; Y1 l$ H
  1224. LDA #HIGH(Play_Time_Pos)
    5 q% P) p; P7 w8 q: V3 w- A9 ~1 N/ L
  1225. STA PPU_Addr,X- y3 h- u) A& w. \
  1226. INX8 L$ f3 _0 A9 ^, g8 s  n% h# I
  1227. LDA #LOW(Play_Time_Pos)# j/ S. c$ f+ d2 I& M) u. y5 m
  1228. STA PPU_Addr,X
    0 Y8 H1 `' N1 h* ^' T& |
  1229. INX" Y+ f  O: e! b. Y
  1230. LDA #$08, }' {, l- f7 P) L2 i3 s
  1231. STA PPU_Addr,X
    & p3 ~  |+ Y: B$ U
  1232. INX
    9 U# T( U5 z: x/ j% u  e; U( B
  1233. Time_Show_H6 O! x: ^, i9 k  G+ G
  1234. LDA <Time_H
    $ }/ A$ f8 [- h
  1235. JSR HEX_To_Dec
    4 ]' ]5 z4 i# B- {" h* j) }
  1236. JSR Time_Digit, D. d) j8 I' K1 m
  1237. LDA #':'; a3 a+ y5 y* e( C4 L% j1 }
  1238. STA PPU_Addr,X$ Q+ ^1 h5 {5 C5 n
  1239. INX- C: o0 q+ h6 J# e2 b3 U2 T, r, E
  1240. Time_Show_M
    / B% j- a3 }  d, B0 f( j2 A
  1241. LDA <Time_M- J4 w" ]" C& }7 e2 ~
  1242. JSR HEX_To_Dec
    " I/ [* `* `, i& t- _! m
  1243. JSR Time_Digit
    # {/ o& @! r* y+ n
  1244. LDA #':'- U# _, Z2 }2 ]% Q1 |: R) R# F
  1245. STA PPU_Addr,X/ C4 v9 y1 w# w1 U" i
  1246. INX: G: l' |+ e5 o/ ]6 g
  1247. Time_Show_S
    ; U1 ~8 l" U, a* B
  1248. LDA <Time_S5 R/ @0 J& W8 u  v
  1249. JSR HEX_To_Dec- D' P. i; a4 F
  1250. JSR Time_Digit
    0 e( E# }5 M& X7 f- _0 z/ N
  1251. STX PPU_Cur  a0 @" X, c) C( n5 T) \% _- j  G2 X
  1252. Time_Show_Enable
    3 I6 W) T/ T* m% h( y( m. }
  1253. LDA <Text_Disable_Flag  x/ N6 U' v& E; a. v/ H, C6 V
  1254. AND #TEXT_DISABLE_TIME ^ $FF/ k4 e+ y3 U! I# j' W. x
  1255. STA <Text_Disable_Flag1 K; I% g% U# I0 C+ |
  1256. Time_Show_End
    9 h& R9 t& `& r3 f; W
  1257. RTS
    . \6 l# L7 i4 I

  1258. ! [% Z+ j8 B+ c0 B4 b! @. F9 i" d
  1259. Time_Digit
    7 ~4 i) J* ~2 w
  1260. LDA <DEC_T0 s- P* b4 P) g9 U9 u
  1261. ORA #'0'7 K* b7 w7 d- E* N7 {0 R
  1262. STA PPU_Addr,X! ^. A2 q5 j# _9 p% y% S4 t
  1263. INX
    0 J0 `. \( t$ Y$ i- X) {
  1264. LDA <DEC_L
    + Q( k# U5 H  b1 j& O; D
  1265. ORA #'0'$ o9 T% c6 X' `9 O1 q- s
  1266. STA PPU_Addr,X
    , ^+ j/ w! R8 H) q
  1267. INX/ K5 W5 i4 Z  e7 g3 d
  1268. RTS
    5 Q7 r  L+ x: r( K$ _5 a* }
  1269. 7 @$ K1 C- |% Q7 J
  1270. ;==============================
    , k' Y9 x& q. P* C
  1271. Time_Count;计时" `' C/ u4 D& s; c
  1272. LDA <Music_Stop_State
    - S* I6 h* }/ x, P
  1273. ORA <Time_Wait_Cnt: |" P- S" I  }& r
  1274. BNE Time_Count_End
    ( ]4 M" h; z8 f$ ?
  1275. INC <Time_Cnt! Y* J5 {7 }% I6 |3 g& v6 a6 c
  1276. LDA <Time_Cnt
    0 l3 g% S8 ]: K/ k" f- b$ M- H
  1277. CMP #60
    6 `; A" C' l/ C' l& @- E
  1278. BCC Time_Count_End
    : f( M) S; I2 F  @
  1279. LDA #00; f3 y. q, D* X  Z0 b- I* X, I: f
  1280. STA <Time_Cnt
    - C; w7 t/ z- h; c
  1281. INC <Time_S4 I" p( c* W, J
  1282. 7 p" ]+ j# |: N
  1283. Time_S_Cnt
    ' k* j8 f$ O8 D) N  W! g; f, V
  1284. LDA <Time_S& |1 ?* o8 u- y, B! b" j
  1285. CMP #604 A$ A% u# n! ~
  1286. BCC Time_Count_End
    ; @+ R1 V" @1 \2 Q5 R& o
  1287. LDA #006 p$ h; A) p6 D" r
  1288. STA <Time_S
    ! J% f% ^8 O& ?8 q- I2 f
  1289. INC <Time_M
    - X  `& P2 Q* Q- a" ]9 o( h

  1290. 6 X! Q- X2 C2 E
  1291. Time_M_Cnt* o6 t/ O1 B% N$ j9 X
  1292. LDA <Time_M
    ) H- K( C# r, R! p; {4 Q2 M
  1293. CMP #60
    7 A1 w, S' V% V0 x6 e
  1294. BCC Time_Count_End! J( r3 p" }$ W! l( H0 F1 l4 n
  1295. LDA #008 J* e6 A. K1 z2 i
  1296. STA <Time_M- O, P+ I# K8 P0 o  X; R6 X& h
  1297. INC <Time_H
    0 a( U3 _4 b& |! M0 ]

  1298. 5 Y0 c! O% R* e  {
  1299. Time_H_Cnt
    4 x+ f/ k/ H. ~1 d* p5 k
  1300. LDA <Time_H
      g) I" U6 |- Q& q0 n1 b1 S
  1301. CMP #24
    ! s/ x1 _& f6 p) s2 C4 I
  1302. BCC Time_Count_End
    1 h: n/ v. A. U' ~/ X
  1303. LDA #00
    5 I2 y* k" x5 r' f) M
  1304. STA <Time_H
    2 l' C2 Q4 r8 I8 E1 R1 ]
  1305. ( a. _1 @/ L( ^' L: T
  1306. Time_Count_End
    $ u; f7 u# d1 w: R
  1307. RTS1 f) b3 y1 A0 g" u
  1308. ! R( G+ W1 E' l( {# m
  1309. ;==============================  k' i+ M; G9 \
  1310. Time_ReSet;播放时间重置3 P0 ^: o1 F) P+ m3 B0 ]6 L
  1311. LDA #$00
    0 [, }- M# x( }8 b4 F) R
  1312. STA <Time_S
    8 s  q$ o$ }/ F' \
  1313. STA <Time_M
    " L8 D1 l- K3 q) ]1 \
  1314. STA <Time_H
    $ Q" _5 c" t3 ^; |2 H* q
  1315. STA <Time_Cnt, }. T- a  e2 q; I( z9 x
  1316. RTS" ?! e5 \2 ~3 k$ v) i  J

  1317. " H  H9 @/ A: e( N: w
  1318. ;==============================; ?7 F( B* P  f) ?( H
  1319. Music_Bar_ReSet;音乐条重置
    # }* H* O4 p8 w# w: E$ F
  1320. LDA #$00
    ! t& V3 E5 c! n5 T! ~: p4 Y8 D
  1321. LDX #$00
    / G# e! H% s2 Z$ C5 w0 m& c
  1322. Music_Bar_ReSet_Set
    1 a' Z+ G, _' R5 g
  1323. STA Sound_Bar,X
    * w/ d. p) [9 E
  1324. INX
    0 e( A8 i6 r5 I2 R- b2 Q3 B
  1325. CPX #$104 Q, f( M5 Q8 q# x) p& }
  1326. BCC Music_Bar_ReSet_Set: E2 ^5 }- `" E! h
  1327. RTS
    / _  `8 w) p2 a3 P* |
  1328. % X; J1 [+ l* S
  1329. ;==============================! I: y3 p4 K6 ~; X: Q! m
  1330. PPU_Data;PPU数据写入) G+ G) ?* T. d+ W  x  X
  1331. STY <Data_L
    ) t, X- `4 l% p% W4 k
  1332. STX <Data_H
    - [" l) {7 m/ h5 ]$ `" q
  1333. LDY #$FF- |& I% s* M, c' k9 O  l* l
  1334. LDX PPU_Cur2 i9 x4 M! g7 _* Q1 M' f4 D. u
  1335. DEX* f3 l" l6 @- M
  1336. PPU_Data_Beg
    7 V% a! ~4 w8 t9 m$ \
  1337. INX
    + Z* G* r4 d" q: m5 q1 R0 D
  1338. INY
    5 G$ o% o: s" \% W
  1339. LDA [Data_L],Y
    & U" D2 l" R4 ?( o
  1340. STA PPU_Addr,X, p2 G8 }: h2 f# |$ n3 n
  1341. BNE PPU_Data_Beg" y' p; A# ]# O9 h( f5 h
  1342. STX PPU_Cur2 ?% q7 J% s+ \' B' q2 Q
  1343. PPU_Data_End  x4 O+ ^0 h# ^1 [# Y
  1344. RTS
    ' Z% Q. v5 K* \- t  q2 W8 N

  1345. - W* D9 k+ z7 h4 Z! i+ @
  1346. ;==============================, F: q9 }, W7 P5 ^  U$ E
  1347. Music_State_Show;播放状态显示" @+ o# L+ R+ `  z' {: Y; l- M
  1348. LDA <Music_Stop_State
    * }2 N! r+ I; \( D. A8 x5 a
  1349. BEQ Music_State_Show_Play
    % ]5 t! \% I- j, q+ y9 J# s
  1350. Music_State_Show_Stop
    ' J% a6 |" X7 D6 q( B
  1351. LDY #LOW(Music_State_Stop)
    1 l# J" T3 b  c! a
  1352. LDX #HIGH(Music_State_Stop)
    * `  B# G& l% F) c% s
  1353. JSR PPU_Data
    0 ~% ^( [- q6 W2 W0 t& K, C
  1354. RTS' A* s0 L% j5 M5 m
  1355. Music_State_Show_Play% S! B9 w5 y6 C( V  u$ m
  1356. LDY #LOW(Music_State_Play)
    # ~0 M" r* w) o1 R; `& @( Q* R
  1357. LDX #HIGH(Music_State_Play)) S7 ^! V& g" @: f7 [; g5 V& i9 X
  1358. JSR PPU_Data( ]! ^0 g+ J) p& r: k
  1359. RTS3 c3 `3 [' ^% U2 p5 e' L1 D$ o

  1360. & E% J4 s, ~# ]: ]% `1 x5 L
  1361. .IF SOUND_BAR_SHOW_ENABLE
    $ W  M: B* I8 K% a1 `4 h
  1362. ;==============================& \7 [1 Z( u0 K' w4 @. N$ B9 L2 y, N
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    . J  @; ]) N  k8 A2 q1 K0 X
  1364. LDY #LOW(Sound_Bar_Text_Data)
    $ v9 O- }- B/ E# z: `! b* q* Y& t
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    7 J8 {# A& {  i1 B- |0 L  U5 [
  1366. JSR PPU_Data
    & X$ |* z% X2 s' }- z
  1367. RTS* j. s9 t7 [3 I% \7 G- o

  1368. ! G0 A( t0 ]+ x
  1369. .ENDIF
    ) x. g* Y+ z" F( }
  1370. . c# @) D: s' i; f( x
  1371. ;==============================
    # o* e6 e# q1 B  ~
  1372. Set_NameTable_Attributes;设置命名表属性
    5 t- J  |- y) @1 S
  1373. BIT PPU_STATUS; h/ }. U8 [6 s4 r/ g1 w" z
  1374. LDA #$23: O- r( d- p! ^7 p1 T; ?, i
  1375. STA PPU_ADDRESS+ f( F# b& h* O; [2 e- L- G
  1376. LDA #$C00 a5 e8 @! s1 o, W- v
  1377. STA PPU_ADDRESS/ H. f- \3 x2 K9 z5 X1 J- |
  1378. LDX #$00
    2 u" L2 L- k: K
  1379. Set_NameTable_Attributes_Write
    $ t; M6 `; s+ O' r- d2 d& l! g: n# Q
  1380. LDA Palette_Attributes,X
    6 f$ H. n/ @) |# I0 q' U" z; `7 Z
  1381. STA PPU_DATA6 _4 K6 O. Q; j! p( ]1 p5 N
  1382. INX- B+ ]+ y: ~1 v0 p- f0 J" K/ I8 w0 V! c
  1383. CPX #$40
    ) k+ \* b8 `& I8 t- p
  1384. BCC Set_NameTable_Attributes_Write) ?& p/ B" w( \8 E  I7 W
  1385. RTS
      S4 m/ ?9 a- ]

  1386. / h0 L( [0 ]+ _! r5 N2 ?
  1387. ;==============================
    + h& g% w, p& _9 {( W' f* c0 \* m6 `
  1388. Set_Palette_Color;设置调色板数据) s* U3 e5 r" v2 w- O
  1389. BIT PPU_STATUS* _7 P& Z! n& f. P6 g0 X, w
  1390. LDA #$3F# G0 Y1 h- _& \# K& K3 I
  1391. STA PPU_ADDRESS
    * I& p( W0 i7 |
  1392. LDA #$00' ?4 K4 |2 o  a3 o. v) e
  1393. STA PPU_ADDRESS& p! v' L: y0 R5 @
  1394. LDX #$00
    " B7 z8 P- o: z. |" o) b
  1395. Set_Palette_Color_Write
    # a) l! |* \5 w! n4 s. p
  1396. LDA Palette_Data,X6 p1 M! B" A5 `: U/ _  J
  1397. STA PPU_DATA
    # y; U/ E4 f8 ?
  1398. INX, Y* ?4 I: U* V/ b. U( w
  1399. CPX #$20& R: D7 e8 G4 G# Z  P* Z
  1400. BCC Set_Palette_Color_Write
    ' T4 i( t* ]& J- u8 q! j5 S
  1401. RTS
    : p% S7 R0 ^: k8 a7 r& i7 ~
  1402. ; R; X" S7 r& Z9 v4 s0 ?, Z
  1403. ;==============================
    ( S+ ?' h! ^) F* x- i/ j# R5 j5 e2 q
  1404. Init_Palette_Addr;初始化调色板数据7 }7 o" i. C) k+ W5 [# ~
  1405. LDX #$002 [3 e1 w" g2 c$ @
  1406. Init_Palette_Addr_Write/ p9 u# m5 K, y# m5 _
  1407. LDA Palette_Data,X
    " P1 G  }2 Z5 Y4 K+ i7 a
  1408. STA Palette_Addr,X
    " ^- D4 z# V! _! w3 b
  1409. INX5 B, k5 ?; f: u; v( e& J) e
  1410. CPX #$20
    6 e+ l  R* a4 Y2 ~$ }* s; Z
  1411. BCC Init_Palette_Addr_Write9 C" o/ v3 W) |4 u* }: z5 o' V
  1412. RTS7 z& ^2 v7 l: {( o- }
  1413. , L: S; M. j9 j# L
  1414. ;==============================
    8 D3 Y2 `& f; S! `- Q
  1415. Update_Palette_Color;更新调色板颜色; u: C, f; ~/ [& h' r4 d
  1416. LDA <Palette_Update_Flag
    . J4 _3 a: ^: y' m. _8 M
  1417. BEQ Update_Palette_Color_End- }! [* O0 r+ u0 O! x# G
  1418. LDA #$3F0 ?1 |; z4 g* [) P9 E( n: Q+ Z+ Z
  1419. STA PPU_ADDRESS
    7 Z9 C, p" n- P$ l9 q' d
  1420. LDA #$0C0 `3 N& ?$ Y, ~6 w1 G
  1421. STA PPU_ADDRESS% Y  x/ y4 V8 D+ O1 N, e
  1422. LDX #$0C: W, d' I; E3 p2 K2 O
  1423. Update_Palette_Color_Write, |% L3 _+ D7 ]7 P/ }- R; b
  1424. LDA Palette_Addr,X
    # U. |) w2 p! u! Z- w
  1425. STA PPU_DATA' |7 Q3 B' D+ i8 f4 @* T/ c
  1426. INX6 d. R) E9 _$ t* Q$ \
  1427. CPX #$14
    " Q. x( A, u% O
  1428. BCC Update_Palette_Color_Write4 w' p7 f! S& \; W
  1429. LDA #$001 F4 b, t- }7 y
  1430. STA <Palette_Update_Flag
    " p( M! I3 p5 K$ B) w+ y$ T) I
  1431. Update_Palette_Color_End
    ' w" Y0 k. C, [. B
  1432. RTS7 v3 Z2 f- B& u  u0 p2 J! g1 D

  1433. 1 Z( p4 ?8 N4 f7 N- i# _' t8 B

  1434. ; {. a; J7 [5 r# x! F
  1435. Update_Sprite_Palette_Data
    * e. P" w# \# [$ Z5 x9 w  \1 j
  1436. .DB $21/ T6 p$ }! ?- `* {+ k8 b
  1437. .DB $21
    ! i6 W  C: A  ~2 ]
  1438. .DB $11
    2 L8 K8 N/ ?/ l8 _, V
  1439. .DB $01
      ~" H9 h2 C0 O# }
  1440. .DB $017 A/ M* g6 `% d" P7 X' `! H" R
  1441. .DB $11" w" E( x, y3 \" K3 z( s
  1442. .DB $217 Z: b1 X0 j, a" |9 Y3 m; d
  1443. .DB $216 B4 V5 a& J/ ?% K0 k2 G
  1444. .DB $116 ~' a# q7 V( Y$ W2 U1 F2 b
  1445. .DB $01' _6 M3 Z0 Q1 y$ J. `
  1446. .DB $11; s6 ]7 I; r$ V. T" P4 X
  1447. .DB $21
    - {& J0 M# c0 f  G
  1448. .DB $214 A# a: M/ o! Q; }
  1449. .DB $11& b; O9 c5 R5 u# L4 I3 x
  1450. .DB $01
    7 L, a7 Y1 t/ V# d  j
  1451. .DB $11
    - X! N" w! _6 [) [: ]" l
  1452. ;==============================$ L" T3 s3 U0 q- p+ g
  1453. Update_Palette_Data;更新调色板数据+ x% P$ t$ Z4 O8 w9 W
  1454. LDA Nmi_Time_Count
    7 v6 M& U" a( o- n: w& I' x
  1455. AND #$08
    * V& E- X. t4 G( g& [9 W
  1456. CMP #$083 x7 [. M( A0 X
  1457. BNE Update_Bkg_Palette_Data
    9 e* p# J; @3 \6 F# M

  1458. ' x1 D* y, Q1 [/ o
  1459. Update_Sprite_Palette_Data_Set+ j, x7 s; `7 F( i% B7 C
  1460. LDA Nmi_Time_Count( c: P5 q/ P7 v$ F( J
  1461. LSR A0 A8 T) Q  z) k5 X+ S- T7 w) _6 @1 a
  1462. LSR A! H) R* i2 Y2 O. Z* q8 h6 m0 V
  1463. LSR A
    $ C  `4 e, a, [! G1 B' Y
  1464. LSR A
    , O. x, I5 H8 N4 y" G
  1465. AND #$0F
    ! y; a9 h+ H9 U, {
  1466. TAX
    5 X: H. x9 z2 n' Z' t+ |# f8 h2 `
  1467. LDA Update_Sprite_Palette_Data,X9 Z1 g; F/ ~$ y" J8 A
  1468. STA Sprite_Palette_Update_Addr+ ]9 |+ y, A0 B8 _* c! C2 v
  1469. LDA #$01  F% M$ _5 K6 V2 }( T# C  x( W
  1470. STA <Palette_Update_Flag
    4 ]( j+ g. D* J; D1 S, y/ ?

  1471. / u# u9 I: y6 F9 L7 ]
  1472. Update_Bkg_Palette_Data0 q/ Y$ P" _+ H, n1 p
  1473. LDA <Text_Disable_Flag
    0 R! }6 Q# p& G7 _, G
  1474. AND #TEXT_DISABLE_RAM
    ! s2 v  c. Y" [( V/ n2 N3 ?; ?- v
  1475. BNE Update_Palette_Data_End: C4 W* Y" q  q8 |$ c8 o
  1476. LDA <Music_Stop_State% \$ n8 }$ D3 W5 c
  1477. BNE Update_Palette_Data_End, k" O4 U; k2 L; K, i7 C8 j9 I
  1478. * j; V: W  s" S5 v4 s
  1479. Update_Palette_Data_Check) U: B. h& [( s5 _+ w
  1480. LDA Palette_Wait_Cnt
    ) \4 J; p! _2 B9 F2 @# |/ y- u3 Z# f
  1481. BPL Update_Palette_Data_Check_Over
      k% O2 a) a9 u0 D- A; C' m
  1482. LDA #PALETTE_UPDATE_INTERVAL
    : {3 \3 ^% H1 J' \* C" F
  1483. STA Palette_Wait_Cnt( L/ n  R, o/ r4 }
  1484. Update_Palette_Data_Check_Over
    8 O. g6 h4 u7 p7 j
  1485. DEC Palette_Wait_Cnt& B) O. z* a, M  q* D. j
  1486. BNE Update_Palette_Data_End$ s" O. R; y( S/ ?: i3 V
  1487. " S6 f; n) Y3 M5 b$ D" t
  1488. LDA <Text_Disable_Flag
    6 M4 b6 i! J# J- X# R, P
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    $ F0 G/ @" }# v8 L, f* [
  1490. STA Text_Disable_Flag9 z; Z' C9 \, ^% [
  1491. INC Palette_Update_Flag
    ( {, g8 H) ~. K; V
  1492. , ]" q6 ?/ ?4 l5 s! X/ I6 }
  1493. LDA #PALETTE_UPDATE_INTERVAL
    1 y8 G, ?" G/ _- j" t% J
  1494. STA Palette_Wait_Cnt
    % a2 D7 W% @. a9 h; ~' p
  1495. & v: ?: z: |" `, S3 Y
  1496. LDA Bkg_Palette_Update_Addr
    . M# r6 F. @" J- i6 W$ T, Y: h! ~
  1497. CMP #PALETTE_UPDATE_MAX
    0 @* s# B% R% _  t$ F. H% y# c
  1498. BNE Update_Bkg_Palette_Data_Set
    4 N7 g: G5 @! S1 y6 P- P9 A& W6 y
  1499. LDA #PALETTE_UPDATE_MIN - 16 A: D  y, \/ P& |& c, f$ O8 ^
  1500. STA Bkg_Palette_Update_Addr
    / N- ?* h6 A4 J
  1501. Update_Bkg_Palette_Data_Set1 n2 J. \- e" M) D3 C
  1502. INC Bkg_Palette_Update_Addr' }  S* `& @( Q! G* ]6 `* h" M

  1503. ! d/ z+ \* {8 P) F; @7 _
  1504. Update_Palette_Data_End
    5 _) Y7 Z( F7 ?8 J
  1505. RTS! p/ B' L7 S! [, e

  1506. . P1 b1 |) p! F. @" f
  1507. ;==============================
    : B- O$ H& {% h  v) j: W; v6 L0 D
  1508. Show_Music_Text;显示静态文本
    8 K* K* \4 L) N0 ?1 c& ?
  1509. LDX #$008 [. w3 V5 y* T: o. [7 i' }
  1510. Show_Music_Text_Set
    7 Q6 g' k) Y: n8 }/ z+ X. n; c
  1511. LDA Static_Text_Data,X: `, I0 W) P+ m, E' J" j0 d
  1512. STA <Data_L
    4 e+ ~) d' J/ `( s
  1513. INX' I( q; Z3 e9 B5 ~2 _
  1514. LDA Static_Text_Data,X
    ' [$ H9 q. d7 F7 W
  1515. STA <Data_H$ ?" x1 @$ w' j' }  y1 r
  1516. INX
    1 x* X8 @' t5 _- i
  1517. LDY #$00
    . s- J" q- u+ f
  1518. LDA [Data_L],Y
    + s0 ^+ U/ Z! L5 P2 s% }8 }
  1519. STA <Data_Cnt( r4 r- u) B( P4 C4 p
  1520. DEX
    $ C( g; T  Z0 P# `
  1521. DEX- H6 ~$ ]! m6 r
  1522. LDA Static_Text_Pos,X0 y2 R) q7 y* m' {# f# Q$ `. I
  1523. STA PPU_ADDRESS
    0 o/ W4 y2 I. @# `6 t# \4 F
  1524. INX: J2 n9 d) [& r8 C
  1525. LDA #$20/ k0 F+ \" v' Q$ p4 d& I
  1526. SEC
    # N8 c$ A( V. Y9 }
  1527. SBC <Data_Cnt
    + P1 H& B1 H. p3 G
  1528. LSR A( @) x; \: Y3 v* {
  1529. STA <Data_Buf. t- {; x* F% z( t5 s1 j2 v  x
  1530. LDA Static_Text_Pos,X
    5 \- C% \8 Y0 w3 k" c- x# r
  1531. AND #$E0
    0 \, [) n* m: s* t7 }
  1532. CLC. s$ F9 ^" k, o1 |
  1533. ADC <Data_Buf, t) @* x$ U7 Z) b
  1534. STA PPU_ADDRESS2 R0 e; s: c  H" ~
  1535. INX
    # K4 d) p) t0 |
  1536. Show_Music_Text_Set_Write% |% T  k4 M; o3 O- U, |5 A& q
  1537. INY
    3 D. z' l7 D" r( W1 e9 k: X
  1538. LDA [Data_L],Y
    * v' u6 O- Z8 `3 v0 j. m
  1539. STA PPU_DATA
    8 n& k5 \% \8 P9 v, {7 b3 J; k
  1540. DEC <Data_Cnt
    " y2 C& c: X! ~9 D/ D) S( E3 y& P
  1541. BNE Show_Music_Text_Set_Write3 a: C- Z3 V/ w) W& {  }' \
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos
    % L# X& S$ F: ^  M$ V  ~* {& i
  1543. BCC Show_Music_Text_Set
    % i" N% K$ @! O' J. Y& V3 N
  1544. RTS
    : Q6 Y" |  c* x8 Q/ t
  1545. 4 I$ t9 U: o4 |( |" P8 w
  1546. ;==============================3 b2 G. y( l  _: Z1 N% x
  1547. .IF Track_Name_Pos;显示曲目信息
      m  ?# F. N2 C& X

  1548. 0 d' }$ d$ b1 r3 e5 [/ _
  1549. Clear_Track_Info( U1 J0 Q7 T" W1 i' X0 w; ?
  1550. PHA
    ; A6 k1 H9 c* O+ D* P7 U% n% e6 L
  1551. LDX <Music_Item_Cur
    % R& ~' \, d" O6 C$ c6 }
  1552. LDA Track_Name_Addr_Flag,X
    5 q0 F6 H; I: t& [( ?
  1553. BEQ Clear_Track_Info_End_Ex7 v. `1 ]. |  k- y! ?
  1554. PLA4 ]& a  _: W8 ^
  1555. 3 T: r- J  t0 }. W. s
  1556. LDX PPU_Cur: S% q/ \0 r) ~
  1557. PHA
    # v/ L3 Q  {: ]' [: h  N
  1558. LDA #PPU_MODE_CNT_CLEAR1 j6 ~8 `, F& r# |$ f
  1559. STA PPU_Addr,X# z+ t( ?7 h; i' y
  1560. INX; B/ d6 B$ w- o# F7 }( v
  1561. PLA
    # J" E0 k2 ~! H& p6 _
  1562. JSR Show_Get_Track_Name_Center_Pos4 M1 H6 Z+ X8 w
  1563. STX PPU_Cur
    3 v( C6 `& @" R# x$ d* t! p4 ?2 P
  1564. Clear_Track_Info_End
    , P+ }8 b. l7 k' G9 A% Y3 X. K+ `
  1565. RTS3 `3 q2 Q- @+ h- `8 c2 |+ `/ a
  1566. Clear_Track_Info_End_Ex' N* S# V; Q: _1 g7 Z; j3 D
  1567. PLA
    ! y: i: o) s% ?# u/ k0 J9 _
  1568. RTS
    5 q4 L6 H; a( v

  1569. 9 C, j# m* g4 y- z4 s1 g4 e
  1570. Write_Track_Info
    2 u+ L! I8 o$ O* g
  1571. PHA
    ; L! H1 {; Q! i$ R0 ]' r
  1572. LDX <Music_Item_Cur
    7 [; T- n9 j! U  l! g8 h
  1573. LDA Track_Name_Addr_Flag,X7 T2 S# k' `0 y  U4 j
  1574. BEQ Write_Track_Info_End_Ex
    % ]; j- f& K# h' Q1 a
  1575. PLA5 ?4 G" k- V9 D  }8 D# ^' R
  1576. ( r; o8 g. V, N* S
  1577. PHA
    5 U! W/ y1 O( @- G
  1578. LDX PPU_Cur
    : b7 \$ O/ j& T& B* T$ m; _. P
  1579. LDA #PPU_MODE_CNT_LINE
    ; t4 ?! ]1 Y, S' y* z2 M
  1580. STA PPU_Addr,X
    3 F' q8 e, p) t0 [+ B6 l
  1581. INX  i4 `- f6 r5 Q* y! w3 ~
  1582. PLA% \8 o0 a6 M* L/ Q* t# z+ A1 R
  1583. JSR Show_Get_Track_Name_Center_Pos
    ' _) h" j+ w' B. X) q
  1584. Write_Track_Info_Data
    ; q+ P7 n% Z) \7 Y, [/ O. m% k: _8 j. C
  1585. INY
    ! p3 r2 @, ?( J; y
  1586. LDA [Data_L],Y
    8 k( U4 s  l- V1 Y+ k
  1587. STA PPU_Addr,X
    * `) i( b; O) B9 @: U/ A; k! f& G% o0 J
  1588. INX
    ! P& y; B7 O2 |- T
  1589. DEC <Data_Cnt6 E5 ?* h6 |9 N& Z( h: L0 k9 k- @; T
  1590. BNE Write_Track_Info_Data
    0 C; @) [& }' ?; L4 G
  1591. STX PPU_Cur
    % O$ i* A2 e5 q2 p  j
  1592. Write_Track_Info_End
    ; S$ @, }" M+ N+ r) ^0 V' J
  1593. RTS3 r, \# l" T: |9 _7 D1 Y# S0 K3 ^
  1594. Write_Track_Info_End_Ex8 U" G, Q+ g7 r. d( M
  1595. PLA
    6 l8 ?" ?1 Y' S2 G5 t2 U* F% \1 e
  1596. RTS
    ' I+ @3 |" I4 r8 e6 O

  1597. / \+ C9 ?( R  m$ X, n' b
  1598. Show_Track_Info8 O7 _2 h9 m% P6 K4 K) U
  1599. Show_Track_Info_Clear
    9 s# ?! g2 m* r" K/ I$ c
  1600. LDA <Music_Last
    # v  N4 \% ]( r! v

  1601.   D/ k4 ]. P0 q: l( F5 @
  1602. JSR Clear_Track_Info
    , t2 z7 n/ R! S' c

  1603. # ]$ d( @9 a0 Z* `0 f1 J! d
  1604. LDX <Music_Item_Cur
    : M( `9 c5 l* n9 n9 x, w
  1605. LDA <Music_Cur,X3 U- ?! C6 u  a0 Q6 g( G" p+ j3 Y& I
  1606. JSR Write_Track_Info8 G, Q* |) g1 y4 A
  1607. RTS+ {7 h# @/ r. n1 k1 D

  1608. ; D/ L. X7 |0 b8 k
  1609. ;==============================
    6 }- \( Z! g" s3 b' O, q( g) q, ~2 K
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置( h+ l. A9 A. g  }' b

  1611. 4 D* F" y+ r. [4 ~+ l- K/ K! G
  1612. ;取出集合名索引
    1 m2 X& H# V2 J, }/ @# z9 D
  1613. PHA; P% h" P/ v( w; Q
  1614. ; ]* I9 z3 \3 r4 Z
  1615. LDA <Music_Item_Cur
    5 l, n/ L- C1 M
  1616. ASL A' |. S% I$ a3 X0 D6 p8 {
  1617. TAY2 u: p4 @9 l9 L" k; s4 p. ?
  1618. LDA Track_Name_Addr_Port,Y
    6 i. F, T; _- [4 M
  1619. PHA& l* s0 ^% b1 ^0 [: b! Q/ H
  1620. INY& @9 k  u( b  U3 r) f5 i( b' j1 u
  1621. LDA Track_Name_Addr_Port,Y% ]9 E  \) ?" w: g6 s& S) V
  1622. STA <Data_H  y7 H- ^# G5 `% s# {- M1 ~
  1623. PLA# H5 v. e+ k, j6 I
  1624. STA <Data_L- N& }( x' l9 e! S) q
  1625. - G$ G& a5 b) J* K
  1626. PLA4 S( o% W1 L: t" Z! b# V
  1627. + o3 B/ _5 K1 |8 {
  1628. ASL A
    8 f) x5 H$ X' A" p; L
  1629. TAY
    0 I/ ?( }# y& R" a0 @5 J3 B. t
  1630. LDA [Data_L],Y6 V3 ~' _; \. U% j: \1 c7 I
  1631. PHA3 D; c: r4 O  L( L1 V$ A$ Y" v% J
  1632. INY  B/ R$ {( Q5 Y3 Y: R( K* {) J6 a
  1633. LDA [Data_L],Y" W- e7 Z* \$ U& Y
  1634. STA Data_H4 J/ S4 N: s5 k4 Q  y4 E' ]
  1635. PLA
    ' h/ }, N& h3 ], b% E
  1636. STA Data_L
    1 S/ L. t; O) O- c
  1637. " R) H: X8 M& O8 f; Z# s
  1638. LDY #$00
    - M1 c9 R& i8 E
  1639. LDA [Data_L],Y' f9 L4 k# \; X
  1640. STA <Data_Cnt5 K0 K, `0 f' Y  E0 Y
  1641. LDA #$20% f& C3 x  ~2 u
  1642. SEC+ E: Y. v$ r+ F8 \) z! w2 k
  1643. SBC <Data_Cnt
    4 F! ^) n- [5 m% N! ^% [2 N5 `- k7 b
  1644. LSR A7 {  p# X$ L. X+ ?1 [, k% ^' H. `
  1645. STA <Data_Buf+ r7 m; B4 ]" Z7 q, W
  1646. LDA #HIGH(Track_Name_Pos)
    " Y! O( {* J+ P3 d" ]: Z
  1647. STA PPU_Addr,X& Y) ^# J0 L1 A7 U) }5 N
  1648. INX! [! l3 v8 p1 L2 W  m* f; P
  1649. LDA #LOW(Track_Name_Pos)- G8 z4 R6 X+ Q7 S& g& C+ P
  1650. AND #$E0
    ! }' D. K* i5 t
  1651. CLC# a5 R( w7 n/ c$ ~% J- c& q
  1652. ADC <Data_Buf* @( O* G9 z7 q9 g) X$ i  |
  1653. STA PPU_Addr,X
    ! Q4 R/ t/ q, W8 e% D+ \& h. q" R
  1654. INX6 e) b# y9 A# R. U4 N
  1655. LDA <Data_Cnt
    " R* Q& ?1 d& d9 e: n' q
  1656. STA PPU_Addr,X/ c5 G) T: W# Y( C: P; C
  1657. INX7 Y6 v1 E* E+ d7 G9 J
  1658. Show_Get_Pos_Center_End
    " y; ^; k8 c3 ]
  1659. RTS
    6 ^) ]) Y& Z" |! b" P" c, K3 D
  1660. .ENDIF
      V3 v( ]% F  M6 t, G

  1661. 3 y9 C2 i5 Z9 @
  1662. ;==============================" h; x* e2 x' }: s7 {
  1663. ;音乐端口清除9 D, n  ^! b) d5 }" H
  1664. Sound_Data_Clear  c% Z/ H0 \* {- B, B* F
  1665. JSR Sound_Port_Clear- z6 {; B8 C7 F$ V; Y: C
  1666. JSR Sound_Ram_Clear+ K+ @: k* V. w7 j" F2 i
  1667. RTS
    3 E1 E- `' I) t
  1668. % e& E/ L* P6 M6 c' L% e
  1669. ;==============================
    # }2 B0 a% h/ U
  1670. ;音乐端口清除
    - n, c% D! b3 d- Z5 Q
  1671. Sound_Port_Clear
    & ]  G3 r1 ~9 a4 N; H/ g# ]
  1672. LDA #$00
    ( B* a0 {+ p  T5 _6 I3 g. y; D& R: A
  1673. STA APU_STATUS
    ! W. p) Q) P' Z1 e0 w8 r$ @
  1674. LDX #$00
    # Y! [: a  s, q0 d1 D+ W& y
  1675. Sound_Port_Clear_Write- z, {  m* V$ b
  1676. STA $4000,X# [9 _; Q8 ~/ [+ }7 G
  1677. INX
    3 |( |; P" c" |1 H: }& n: N
  1678. CPX #$14
    & L$ H' z4 N3 X# @1 s: u- p& {
  1679. BCC Sound_Port_Clear_Write
    9 J% q& V' P' q( g; Y: g
  1680. RTS. ^+ w; Z) j% P& `* r1 Y1 }
  1681. * I/ p. L3 }; q/ V8 w, D+ M
  1682. ;==============================
    3 w0 }; n5 {! N. O8 C
  1683. Sound_Ram_Clear;RAM清除
    3 H$ {$ B" u8 ~
  1684. LDX #$001 T7 l, |: L# L2 f# M- ]
  1685. LDA #$006 _- _: \: }/ @* k
  1686. Sound_Ram_Clear_1
    " u2 }' Y$ V% {5 ?+ A; e
  1687. STA Sound_Ram_Addr_1,X
    $ D( T# @0 g8 |
  1688. INX$ j: e% W. h2 [: X! z/ X- `5 j
  1689. CPX #Sound_Ram_Addr_1_Size
    & O) C* F( i! q" B# C$ l
  1690. BNE Sound_Ram_Clear_1% t( Q7 Q* O2 k. b8 W# H
  1691. LDX #$00
    4 B% M: Z$ A- w, l* Y4 e8 \
  1692. Sound_Ram_Clear_24 V. I# V; x; t" e  J
  1693. STA Sound_Ram_Addr_2,X$ {$ @' T5 ~, @+ @8 Z: [
  1694. INX
    # V5 Q/ a& U6 i
  1695. CPX #Sound_Ram_Addr_2_Size% L/ e& J0 u: {: W
  1696. BNE Sound_Ram_Clear_2  Y. i/ `. ^  i. f) V+ k' \- ^
  1697. LDX #$00
    ' ~* y: Y$ g) L$ b# }2 T. b
  1698. Sound_Ram_Clear_36 D+ X+ N% t. F; S3 z7 n) o
  1699. STA Sound_Ram_Addr_3,X
    + N0 Y6 Y$ V0 O
  1700. INX
    & ~( Z3 j' b8 v6 Q' u0 b- Z
  1701. CPX #Sound_Ram_Addr_3_Size
    6 [2 P- m! w2 n  z* V
  1702. BNE Sound_Ram_Clear_3
    3 M  y$ m9 h4 D" F/ m
  1703. LDX #$00
    ; v( L# }' b% G4 U, s
  1704. Sound_Ram_Clear_4
    ; W: \6 p5 z6 b# \& e& p
  1705. STA Sound_Ram_Addr_4,X4 v$ }' d: c! S" {" e
  1706. INX$ T% W3 @( J( O+ S' m6 D
  1707. CPX #Sound_Ram_Addr_4_Size& y, Z# H3 ?; L9 y
  1708. BNE Sound_Ram_Clear_4
    . [- w' i. U: K) v# }. _; v
  1709. Sound_Ram_Clear_5
    ! F: T4 I2 c0 T5 o$ X
  1710. STA Sound_Ram_Addr_5,X2 @; O$ i6 x) E2 Q3 |2 D
  1711. INX
    + \& a2 T& J2 r6 M, M
  1712. CPX #Sound_Ram_Addr_5_Size
    & `9 F( _9 P5 M. x1 r, }
  1713. BNE Sound_Ram_Clear_5) g# q; u% |' e. [
  1714. RTS
    3 h& `9 M$ y- ^+ R# o
  1715. 6 o! c! M% V0 o2 Y9 C0 H6 q7 [
  1716. Get_Music_Collection_Name, V, i, {$ r8 ^  L! S) u% O* K1 S- w2 V
  1717. PHA  w, h5 j/ O. ^9 u# O2 A8 M" [( Q
  1718. LDA <Music_Item_Cur* [2 x# R$ f. P9 t
  1719. ASL A
    - M5 s: o5 Q: k$ @- T
  1720. TAY( _8 R: p+ V; c7 G7 Y: z% T
  1721. LDA Music_Collection_Name,Y
    7 c' @" x; P* Q3 k: b( x6 ^' v
  1722. STA <Data_L
      M0 k, |( r  B7 y0 X; R) L- i
  1723. INY6 p3 N# y; |' I. m$ n# X  l
  1724. LDA Music_Collection_Name,Y
    ) p, I4 w) X& F* @" K
  1725. STA <Data_H! P$ ~- S5 E+ b( Y6 E6 G% |
  1726. PLA
    ; `1 {5 [' e2 @8 a
  1727. RTS+ n/ r7 C* E7 g# d
  1728. ) {1 B! D2 L) \( r& ~2 i
  1729. Set_Sound_Total1 P% C* n7 |1 U' i4 @" t* R
  1730. LDY <Music_Item_Cur
    4 K. [8 _. U/ ~$ f: s5 t
  1731. LDA Sound_Total_Port,Y; {% I9 S9 e* J' n) _/ `
  1732. SEC
    ; a$ |/ i. q7 j$ A
  1733. SBC #$01& m% \5 x. a3 J1 s* o
  1734. STA <Music_Total  J" y: E2 ^  d9 n3 Y, Y
  1735. RTS2 |  L. o2 x, H8 }$ f

  1736. $ A6 T% Q* Z, Z# d) {2 |
  1737. Get_Sound_Start+ L. ^2 J) m. ?" ?+ D6 @
  1738. LDY <Music_Item_Cur
    . m3 Y8 |; J* y' N, t# ]
  1739. LDA Sound_Start_Port,Y
    , M# v8 q, h1 y( G8 [
  1740. RTS: B5 O2 e8 R( s# u( _

  1741. $ _$ C# @  E. C6 z/ e6 U
  1742. Set_Sound_Init_Port* Q: S. v$ r) Z  |
  1743. PHA4 x/ x, ~% @- ^1 O6 D& m! k
  1744. LDA #$20; R& g$ }: E: @/ c( O! c
  1745. STA <JSR_Addr_Op
    # }3 W# ~+ _5 p  e
  1746. LDA <Music_Item_Cur
      u8 x5 y; q4 D% g4 T& ?
  1747. ASL A
    ' [' L, u% ?4 k" |# }
  1748. TAY1 F- {: |% J$ i6 V; Q4 S$ Q; M" @
  1749. LDA Sound_Init_Port,Y, Z% P+ Z% N. G
  1750. STA <JSR_Addr_L. n2 x7 G3 N! n7 K% U
  1751. INY
    : [  f& ^; R& J/ k. F' Z
  1752. LDA Sound_Init_Port,Y4 {! o, p9 y! C8 s% v/ ]& Z2 f' _
  1753. STA <JSR_Addr_H7 I+ W5 G. C! E3 \, {: g
  1754. LDA #$60& \! H& W) \- z! G  O3 ?+ m
  1755. STA <JSR_Addr_Rts( a* W7 `) z6 b: G0 l7 z" Y; c
  1756. PLA
    4 j% g4 ]" ?. A+ J" ]$ o
  1757. RTS
    8 X4 a# E  V& i1 l/ s
  1758. ; N# V' u# o+ q' H' d+ E' h1 _
  1759. Set_Sound_Play_Port! p6 I  ]9 t$ m! y& I% |5 c, V* k
  1760. PHA, h5 d2 c  D* S9 ^# I
  1761. LDA #$203 h  y, j/ A7 b
  1762. STA <JSR_Addr_Op9 Q2 E4 H9 c+ e1 |7 |" @) z4 M+ h* w
  1763. LDA <Music_Item_Cur
    ! e- f+ G0 A' M0 D
  1764. ASL A) d2 C, C, ]8 j
  1765. TAY; N: J0 \! ?6 d$ _8 O, T
  1766. LDA Sound_Play_Port,Y
    8 E0 D2 Q8 d& _: j6 V& t* o+ q
  1767. STA <JSR_Addr_L8 x; R& z' j0 F9 ~9 _1 U
  1768. INY
    7 T7 @* D, o! B
  1769. LDA Sound_Play_Port,Y
    ! m- d5 v" R' i: B* d/ d7 Q
  1770. STA <JSR_Addr_H0 _2 M1 j' O5 y) w$ `1 N1 L
  1771. LDA #$60/ C0 e: q1 _" \9 y0 B' E: D- Y, |" v
  1772. STA <JSR_Addr_Rts
    % B2 z2 ]! H0 O# c2 |" J
  1773. PLA
    8 Z$ ]$ M% E9 E9 J
  1774. RTS
    1 d  ^* ?( Y) z2 r7 B; h. g
  1775. 2 }- B8 {7 Q" t, H& i: r# ]
  1776. Set_Sound_Reset_Port6 g6 H3 ^( s/ B# u1 h! E: K
  1777. PHA
    * y+ H9 V- t0 ~
  1778. LDA #$20
    ) w+ J& D* U: X9 z- ~% H0 O3 N
  1779. STA <JSR_Addr_Op
    ! g# H8 e0 }2 z$ F
  1780. LDA <Music_Item_Cur
    ) n! G! b0 {+ x
  1781. ASL A
      _+ B0 Z0 z# S. V/ R1 E2 S. k
  1782. TAY
    # z6 g: ?2 Z* t9 F8 H+ k# a
  1783. LDA Sound_Reset_Port,Y5 _5 a6 U1 ?/ z2 D" _
  1784. STA <JSR_Addr_L
    5 k- g1 R" ?6 H  ]6 f$ [
  1785. INY
    : v  Y& D/ [5 D: t  E/ J
  1786. LDA Sound_Reset_Port,Y1 W2 d6 G: I" \& n/ ]2 Z
  1787. STA <JSR_Addr_H- l+ b& ^7 |8 T* g2 A2 u2 @- x8 s
  1788. LDA #$60' o4 o8 [! C, y7 c& C7 y
  1789. STA <JSR_Addr_Rts
    9 }4 M  K! q$ V% C" ]. u
  1790. PLA
    5 s! B4 K3 y( Z. y
  1791. RTS7 a7 j& K; h7 U0 C/ k

  1792. $ E9 e$ b6 i, n* ?  O1 f+ z
  1793. ;初始化音乐bank
    7 ~, |  g' y$ }: @
  1794. Init_Sound_Bank
    % m- T6 W  ~6 \2 Y$ o1 H+ z
  1795. LDY <Music_Item_Cur
    0 C% K9 U8 R/ ?0 G$ p9 v8 b8 g6 g
  1796. LDA Sound_Bank_8000,Y( h$ I) m* V4 P% Q7 _
  1797. STA <Music_Bank_8000
    " ~5 v& j, ^9 Q2 ], U, U' [0 F
  1798. LDY <Music_Item_Cur
    : a$ q% Y0 [3 [4 q6 j2 O
  1799. LDA Sound_Bank_A000,Y. @* z+ E4 N4 e& e! k0 `
  1800. STA <Music_Bank_A000
    $ Z5 _: I7 B5 Q! o# L
  1801. RTS
    2 F/ p" G3 y9 Y0 _/ u

  1802. 8 ]/ J: u- q  P# X, R% e
  1803. ;==================================================9 w, H, }0 v6 X  f) ~' R
  1804. Sound_State_Reset;音乐状态重置! H/ J& ]$ a+ H( h8 j# X) Z( @
  1805. JSR Music_Bar_ReSet        ;重置音乐条
    5 f7 o# _+ h2 |2 D
  1806. JSR Time_ReSet             ;重置播放时间6 ~/ \) [* @+ ^- ]2 k

  1807. " L7 j4 X  U# J, J
  1808. LDA #$00
    0 \, P! J( w: G: b# Z9 o1 j
  1809. STA <Music_Stop_State& X, b, ]1 p: ?
  1810. JSR Music_State_Show       ;显示播放状态
    " |) g/ V; @/ H" v, o" w5 v

  1811. & u" S& h, ~- b
  1812. .IF Track_Name_Pos) {6 F1 X* m/ ]9 U7 n* L
  1813. JSR Show_Track_Info        ;音乐曲目名显示9 }/ F7 t3 s; s+ \
  1814. .ENDIF! x8 {" a; _3 C+ e
  1815. ( ?) Z. ^* c9 u) j% {* x
  1816. RTS
    - {$ Q; B( F/ s' a; i3 v2 G! V
  1817. 9 r, Y& k/ u4 q) R; y
  1818. ;==================================================
    : A5 R, s4 X) J; b) `# D+ ]
  1819. Sound_Init_Proc;音乐初始化处理
    " G/ ?1 m9 C: |* b3 o; O! U  I
  1820. PHA3 m1 G$ j, }: @/ |+ y) A& V
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址, s/ M8 b7 Q$ T4 G$ Y
  1822. LDA #$00
    . f! E2 r; F5 E. x9 H
  1823. STA <Scroll_H               ;重设水平滚动  l! g1 u* J0 F# X+ Z
  1824. LDA #$0F* g8 i3 |# d: \. S
  1825. STA APU_STATUS% U: T! r8 Z5 X1 o5 `7 y
  1826. PLA$ C/ h/ Y& @3 ?  y  X# r. C
  1827. JSR Sound_Init             ;音乐初始化
    ) o- w6 R  S6 m2 M+ D
  1828. JSR Sound_State_Reset      ;重置音乐播放状态
    ' B# H5 a1 H+ r8 X: Z
  1829. RTS
    . ]- a+ @8 v% _$ K2 O3 x
  1830. 9 ~6 _( K. S: p8 M) _" L
  1831. ;==================================================" u" w3 l9 ]5 f3 F2 u4 v/ O5 [) y
  1832. Sound_Play_Proc;音乐播放处理& c% b  Z4 Q% e/ Q0 p/ |
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址
    8 F* B7 E: u9 x: Y8 v% j/ [
  1834. JSR Sound_Play             ;音乐播放; d; f% z+ a% G( w
  1835. RTS
    6 A* R- D( J( y& w+ T$ A; n

  1836. ) }3 Q: X8 X5 C; P
  1837. ;==================================================" T% A) `- j" c
  1838. Sound_Reset_Proc;音乐重置处理# F2 s) G2 V8 {) B% p
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址
    ! y8 f  v7 W" L  w' _( ~
  1840. LDA <JSR_Addr_L
    - p/ ], c* Z! ]
  1841. ORA <JSR_Addr_H
    - U8 L. e5 q+ \5 |, k) g- h
  1842. BEQ Sound_Reset_Proc_Default# D2 o2 a- i; F) W
  1843. JSR Sound_Reset            ;执行音乐重置5 \5 }9 F9 H7 c; q* v2 g* G
  1844. JMP Sound_Reset_Proc_Init_Sound
    2 v' _4 O5 K3 I; y4 s
  1845. * r  P8 w) }6 N. B5 D7 E
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    ) O: V; U  B" f( o5 k+ l
  1847. ' m3 q) r8 y3 g) `1 @! }& c
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
    7 |' i8 q/ b% X7 }0 j& v
  1849. LDA #$00) ?/ @8 L( X8 S' o; G7 j. `5 h, B/ V
  1850. STA PPU_CTRL& R/ c2 ?# }  a( r
  1851. 3 g( E5 K5 w8 t3 I2 Z8 v. W
  1852. JSR Sound_Data_Clear
    " p! }" t, E) e. c2 f

  1853. 2 j6 g, [, V  N: a; o
  1854. Sound_Reset_Proc_Default_Wait* @# v9 n( w- h$ N4 s! p) z
  1855. LDA PPU_STATUS
    % F$ ~* b  ^- A( U7 \! J
  1856. BPL Sound_Reset_Proc_Default_Wait
    5 o3 k3 b( T! x; ~& l
  1857. 1 Z* A2 B( n" m5 L: w5 V" X! i
  1858. LDA #$004 m3 e- D% c! ^$ w' w+ s# ~- y
  1859. STA PPU_ADDRESS
    / g/ q5 q  M5 b& m( |1 d
  1860. STA PPU_ADDRESS; z7 q& b  O* b) G4 r- p7 \3 V2 W
  1861. STA PPU_SCROLL
    2 B  E0 \) `7 Y2 z4 B: |' O- y# X3 {
  1862. STA PPU_SCROLL
    4 P# d. x2 y; E- {: X

  1863. 4 r* B, I# y  _3 \1 N4 w
  1864. ;恢复PPU控制
    5 M. K6 h" v2 P0 G# r0 F( m9 \
  1865. LDA Screen_Ctrl+ {  i5 e; K. h, D9 ^! ]6 f+ s
  1866. STA PPU_CTRL. T7 ^/ i( Z% S, l) Y( V1 R
  1867. 5 L+ Z$ g+ ?& R, u
  1868. Sound_Reset_Proc_Init_Sound
    ! Q1 @3 V5 Y3 B: U
  1869. LDA <Music_Stop_State
    ! w$ ^* o# J8 F# O% \
  1870. BNE Sound_Reset_Proc_End. O+ A1 _8 ?7 ~! _1 O  d# v8 f" ]
  1871. LDX <Music_Item_Cur& s9 p5 e/ y; D; e- ]
  1872. LDA <Music_Cur,X* Y3 ^0 j1 X' Y
  1873. JSR Sound_Init_Proc% r- Z0 W& L# r. E$ D
  1874. Sound_Reset_Proc_End6 M) j- U' s/ G: S
  1875. RTS
    9 Y- \5 g) E8 b

  1876. 6 l5 ^" w0 N9 _) u
  1877. ;==================================================1 J5 ~* C- q% m$ H6 F% Q- s0 s
  1878. Clear_Item_Text;清除页项目
    % K2 F& L5 i% J$ v2 c, @  r
  1879. LDX PPU_Cur* o* ^2 X8 |5 \! v
  1880. LDA #PPU_MODE_CNT_CLEAR9 q* ?$ r; `( Q7 A/ G9 O
  1881. STA PPU_Addr,X
    5 Q" f: w  d3 ]9 G6 L3 z  r  z% Y
  1882. INX
    3 e5 ~2 a* Y# @8 b" `. ?/ a9 g

  1883.   Z, G$ t+ k* q3 A4 |" }
  1884. LDA <Page_Last
    5 k( u7 `/ m7 U7 }
  1885. SEC1 K) T. _9 H% D. s
  1886. SBC <Page_Last_Index3 @4 P- T/ N3 Q! G: M3 z) X$ k' E
  1887. ASL A
    1 L" |. U* s2 z  I' u: j

  1888. # Y& p+ ]7 _& n4 [
  1889. TAY9 v8 b3 a6 x7 D- |
  1890. LDA Item_Pos_Data,Y
    : U) _& }- O6 {/ J- q0 u
  1891. PHA, ?' E9 I! j7 f  H
  1892. INY
      l6 O" u7 d4 {. |' e0 G+ b
  1893. LDA Item_Pos_Data,Y8 S- Z, C/ ~1 i/ v. u! q' T
  1894. STA PPU_Addr,X6 b+ R4 I/ H: C
  1895. INX
    7 {! K) q" w: H9 {/ {
  1896. PLA0 S+ [* I/ C. e; Y) Q
  1897. STA PPU_Addr,X
    9 y+ J1 P0 T# m! P8 `8 L; E/ Y
  1898. INX
    ! ?6 v! J5 I0 s% W6 y9 L- I

  1899. , s% s# e4 Y) e- |1 {: D  z
  1900. LDA <Page_Last. W  A: r# ?6 r, A/ g
  1901. ASL A$ Q% l! k$ d* a
  1902. TAY7 j6 z" {4 r4 X! v: N5 H  g
  1903. LDA Music_Collection_Name,Y: W: G4 i  O; }; w! w2 b
  1904. STA <Data_L. j" ]+ y, y+ @8 i
  1905. INY% |+ n, h+ K. u) s4 e
  1906. LDA Music_Collection_Name,Y
    6 _, M! ?" p: C" ]* B6 Q; F
  1907. STA <Data_H) L) T1 W7 S! z: _% M
  1908. . ~. |5 ?' h/ t" I$ B4 H! F: I
  1909. LDY #$00
    3 [" ]& u$ J* S9 P! x: O2 ]7 Z
  1910. LDA [Data_L],Y
    , U& [, K% f; Q& q' \, H% Y; M; Q/ ?
  1911. STA PPU_Addr,X
    % [3 j# u6 p6 L9 ~. T/ ^% [
  1912. INX
    9 r- P, L- F. g: M, ~+ u9 s" o' G2 u
  1913. Clear_Item_Text_End8 H/ S  v& }& b4 V7 k
  1914. STX PPU_Cur
    2 D' b& i6 C" e; Y5 {. D
  1915. RTS
    + x) l+ A& Q7 Q; n! f

  1916. : _$ o  C5 A( f! N$ \$ T& L
  1917. ;==================================================
    5 \& e0 B3 J8 f7 c! z8 _2 T) w9 V, [
  1918. Show_Item_Text;显示页项目7 j) K" G. Z5 e- z; |& o' b
  1919. LDX PPU_Cur' Y% d0 {3 Z+ k0 s* [* P
  1920. LDA #PPU_MODE_CNT_LINE, q9 g+ P1 R9 x- n
  1921. STA PPU_Addr,X
    6 J- O0 ~6 [# x
  1922. INX
    2 @- M' B  U) d
  1923. LDA Page_Cur
    ' p6 ~) e4 C* I
  1924. SEC2 C, D7 K% O( ~, P1 Q
  1925. SBC <Page_Cur_Index
    0 U' {3 R& n& i  E) U6 C
  1926. ASL A
    : L# {* Y5 m; P4 h
  1927. TAY" ]3 z% t( y* B* K0 r) ^; O3 }
  1928. LDA Item_Pos_Data,Y
    + P8 F" m( a0 P2 }* k; k. _, k2 z
  1929. PHA) X9 z7 C- f5 e6 d: {
  1930. INY
    7 c- A. n$ J" n/ q4 U  B
  1931. LDA Item_Pos_Data,Y- j% l6 L$ |6 O# I
  1932. STA PPU_Addr,X8 F' a% X9 n7 g7 f! L. t
  1933. INX9 r2 q- H4 ?! D6 i3 h" ~/ ?
  1934. PLA2 [! n" n8 C% z5 g8 E
  1935. STA PPU_Addr,X
    # x) ^. m% N9 y% e$ e0 `
  1936. INX
    - O2 Z( P: n5 x/ ^/ @6 N
  1937. 2 s6 D" h2 a/ Y' w# ~
  1938. LDA Page_Cur
    * \" z" `0 N4 u8 }+ s/ C/ Y4 J
  1939. ASL A/ t" x* @0 H. a8 I. q( W
  1940. TAY  y+ T. _- t: K% f0 g0 S" [
  1941. LDA Music_Collection_Name,Y
    9 g! R! s- |' [' h
  1942. STA <Data_L, y1 B/ t7 o1 m6 }4 A- Q
  1943. INY* ~/ v8 {: ?' s: K& }
  1944. LDA Music_Collection_Name,Y7 ^; C8 a- ]& z, O6 G5 X
  1945. STA <Data_H
    : N, J- H* ^; r4 o( z

  1946. ' d! u8 K+ W* Q; K0 P
  1947. LDY #$00" J' z  Q' O1 b# M- g& Q
  1948. LDA [Data_L],Y1 K! z$ j' {- J/ i* f
  1949. STA PPU_Addr,X9 U4 q8 L; l6 J$ O
  1950. STA Data_Cnt' I9 @/ X/ E' G0 r& U5 {
  1951. INX+ ~7 z2 l% Y$ t2 [% w3 d
  1952. - u( S8 E+ g% r
  1953. INY2 t5 z/ S, ]  |# Q6 r/ c4 `
  1954. Show_Item_Text_Write
    4 v+ L' h4 i' U* X9 U4 {3 c
  1955. LDA [Data_L],Y0 \! Z0 l5 I( I* k/ V
  1956. STA PPU_Addr,X
    1 h8 c; ]  i$ b( g
  1957. INY9 J, @( X! i* t& [
  1958. INX0 ]" T1 I& e! A" o$ w& A
  1959. DEC Data_Cnt+ W8 U4 h( W0 T; F8 U
  1960. BNE Show_Item_Text_Write
    + n7 \- Q% L$ y% ~2 F
  1961. / C- K# u+ ~4 l0 L6 L* R
  1962. Show_Item_Text_End/ ^$ c3 p6 x/ H4 Q" g' x3 [
  1963. STX PPU_Cur
    ( C5 N; o3 w! ~7 M* J2 P8 b' o
  1964. RTS
    6 l" N0 V5 D( D, \/ K+ t$ g
  1965. - T+ {$ K# m* I1 s3 E& U- c
  1966. ;==================================================
    " U) q9 ?5 _4 i% K! X4 o- }
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量3 u# {  s) C9 _! E0 s2 l
  1968. STA <Data_Buf9 N9 n# t- c7 E: L  r$ }8 w
  1969. LDA #$00
      {) M9 p. C; k
  1970. Get_Page_Index_Calc# |& a. @9 {3 ]( j$ u3 Y
  1971. CLC( h: i$ @8 w* N0 m- K( k% b
  1972. ADC #PAGE_SIZE
    : {2 f8 w& t+ e1 z9 C8 I# y
  1973. CMP <Data_Buf
    % V6 l/ s5 t* J+ @( h! N
  1974. BCC Get_Page_Index_Calc
    + }  _+ j# s! _1 l% p/ m& i
  1975. BEQ Get_Page_Index_Calc_End! l6 ~: p& |) I; Z& I6 e. y
  1976. SEC
    5 C0 a, f1 I; N: s0 T' @# i
  1977. SBC #PAGE_SIZE7 [8 A+ l# L$ }/ i: r8 D  u5 o. Y
  1978. Get_Page_Index_Calc_End! y2 }. Y1 ]& t' G
  1979. STA <Data_Buf
    ' {- |( b# L4 t4 _2 f: H5 Y' }. P
  1980. Get_Page_Index_Cnt
    ( [0 A4 f' G6 }$ F
  1981. LDA #PAGE_SIZE& M  Z) @! C  T" Q  q8 v
  1982. STA Data_Cnt
    ! m1 ~$ K8 U# x$ Y
  1983. - T0 r; _9 J( G& ^4 n4 H7 f
  1984. LDA <Data_Buf& w- {' D! I5 p/ J" \* f
  1985. CLC
    1 q* _1 t; g, d( _( }+ O
  1986. ADC #PAGE_SIZE0 e1 W; C3 ]; j( d
  1987. CMP #ITEM_MAX_SIZE
    7 D2 d+ `$ l0 N# [; v
  1988. BCC Get_Page_Index_Cnt_End
    ( c4 E& k0 ?# b8 o: q/ N3 Z

  1989. 4 `& l+ c* f7 ^
  1990. LDA #ITEM_MAX_SIZE
    3 E1 I" q* g3 o) I: A. c
  1991. SEC5 o: P4 q; Q& f
  1992. SBC <Data_Buf
    " a8 p8 i% C! c) }+ \
  1993. STA <Data_Cnt
    8 I/ c/ [/ r0 D4 o$ E/ r
  1994. * [5 h& ^: _" x# G& D
  1995. Get_Page_Index_Cnt_End
    + w9 z: W- d3 I+ O) A
  1996. RTS5 A! i9 x; w: P* _
  1997. 4 y* K2 E+ g) c9 O
  1998. ;==================================================
    % h1 `' ~3 {# i2 ?8 f& E& k5 Z' v9 g
  1999. Get_Last_Page_Start_Index
    0 }6 n, a5 d/ T' y* `, H9 t# m
  2000. LDA <Music_Item_Last
    4 _2 m  S0 ^8 M! O$ X
  2001. JSR Get_Page_Start_Index
    3 O8 [* `# o- |2 ^& [
  2002. LDA Data_Buf- \- C( H+ T  o2 \4 A" _) W
  2003. STA Page_Last8 L9 A! h3 B0 j
  2004. STA Page_Last_Index
    7 q' u. v: g& ?; e% \/ a( z4 s, ]
  2005. LDA Data_Cnt/ S  I( w+ s1 q  m- ~
  2006. STA Page_Last_Cnt1 T0 `9 i: K$ B9 u' }
  2007. RTS
    " L! `; X5 ]. H  ~
  2008. * n. U! S# _, s9 K$ a" v
  2009. ;==================================================
    2 @2 K7 _8 M% H7 V$ W/ R& k
  2010. Get_Cur_Page_Start_Index" i3 n: n9 j5 I5 L
  2011. LDA <Music_Item_Cur
    $ N7 V2 Q$ }0 Q2 Z1 }# c. L
  2012. JSR Get_Page_Start_Index
    ) |9 s0 b, d. T. a0 h
  2013. LDA Data_Buf
    " s1 k: K, q5 |- s3 ^1 t
  2014. STA Page_Cur
    7 @3 D# Y& g$ `
  2015. STA Page_Cur_Index* y) l' A' k5 A( {1 I- R1 I" _' ?
  2016. LDA Data_Cnt8 |6 P; a. o5 W# H* x
  2017. STA Page_Cur_Cnt, N$ ^" u$ ~. G% f* f; A/ D5 q
  2018. RTS
    ) ^* T) x4 |6 I

  2019. " P2 V: T3 G: U8 }  M8 _1 R! x
  2020. ;==================================================
    4 g" M+ c3 ]% l3 ]' P3 w4 f
  2021. Show_Page_Text;显示页文本
    * I- j$ r1 f& C6 p
  2022. LDA <Text_Disable_Flag
    7 V" I' [5 D  s! t$ n) J* U6 y
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM3 p* p6 }- z9 w! }7 b) g
  2024. STA <Text_Disable_Flag1 }5 ~8 b& H- p: B8 Y
  2025. * C: @( m+ t# B2 Y1 S' p
  2026. JSR Get_Last_Page_Start_Index
    4 {( A4 T" Q/ n6 X% |5 T$ N% ^% A! z
  2027. JSR Get_Cur_Page_Start_Index
    $ Z$ k+ }& j' n8 d+ J) z: |
  2028. : o/ ]' }! [( Q3 N- z+ F+ D/ [- m
  2029. Show_Page_Text_Set
    4 _/ f( n- S0 Q  f) n+ Q7 k. z, b
  2030. 0 X% ?4 `, Z; d+ n! f4 Q
  2031. Clear_Page_Last_Item;清理上一页
    6 Q/ o% S7 y+ J3 R8 M( m- u9 O
  2032. LDA Page_Last_Cnt
    3 ]( G8 \3 ~* n' U( z8 K( A3 C
  2033. BEQ Clear_Page_Last_Item_End
    # e4 V! N1 I$ t7 W$ L: v
  2034. JSR Clear_Item_Text+ P/ `4 \- k" w4 Y' s( e$ o1 F
  2035. INC Page_Last
    ; g, z" ?+ q5 V1 }* T9 ~. k
  2036. DEC Page_Last_Cnt
    % u# a* p+ M0 ^- i. H
  2037. Clear_Page_Last_Item_End
    , t$ i( b* u  X# S

  2038. / ~* g( x9 ]) a1 h8 b% l
  2039. Show_Page_Cur_Item;显示当前页6 j# ~5 u6 c+ A$ S
  2040. LDA Page_Cur_Cnt3 C( L/ T* u! V2 v$ w. W
  2041. BEQ Show_Page_Cur_Item_End+ r6 O4 d2 S2 w& k% ~  }2 w, b5 @; ~
  2042. JSR Show_Item_Text
    1 e7 _- o6 g' f* E: B. w6 x
  2043. INC Page_Cur7 z2 |  w3 ^" L9 P5 _
  2044. DEC Page_Cur_Cnt" F! }! x: o5 R5 S9 }
  2045. Show_Page_Cur_Item_End
    * V- g6 s1 x. J0 V: s6 u

  2046. 8 y' Q( F0 V- c$ \
  2047. INC <Time_Wait_Cnt
    6 U6 {. ?' x# x* `
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作6 I4 `3 J* T4 l% Z; f3 q
  2049. LDA <Time_Wait_Cnt# Q7 ^6 h, F% w
  2050. BNE Show_Page_Text_Set_Wait
    1 G; N9 @" m! V2 n8 T; `% ~" B% ^8 i/ q

  2051. 1 o' k* V: G+ q' V5 b9 r
  2052. LDA Page_Last_Cnt
    . C" C+ ?+ c2 \. p/ z5 _. b
  2053. ORA Page_Cur_Cnt
    , P7 T4 x- m. g& y2 j' A* f
  2054. BNE Show_Page_Text_Set
    " u1 G# |: Y, U
  2055. LDA <Text_Disable_Flag
    2 n. h  {3 U* m3 a" T; u
  2056. AND #TEXT_DISABLE_ITEM ^ $FF1 i  F4 z( v& Y! T: e
  2057. STA <Text_Disable_Flag
    " o6 V- [& `0 c7 Z3 I6 T
  2058. RTS+ B2 ?1 U! |' u; K

  2059. - l5 H% U' o0 b  F3 b" ?8 @( e
  2060. ;==================================================
    ) R& }9 E' s% Q  U* @
  2061. Last_Item;上一项
    + y$ w8 N( w: H0 N5 F% c' w
  2062. JSR Clear_Last_Track_Name
    ! P9 X) l: J9 F# L0 z
  2063. JSR Disable_Text_Draw* s$ L- L( q' R0 y% g

  2064. 1 V; I3 H/ o* V  [
  2065. LDA <Music_Item_Cur
    $ w+ I4 ?! D3 [# O4 b# P. @
  2066. STA <Music_Item_Last
    2 V4 c& b6 u; ~" F5 T
  2067. ; c) }+ ~4 c  u$ @4 a
  2068. JSR Get_Last_Page_Start_Index  O1 k) u2 P) D

  2069. 3 z; A- G* d9 Q* Z1 `- R0 I8 A# y5 c) A
  2070. LDA #$005 j- y2 P7 t& X% i+ f4 B
  2071. STA Data_Buf8 T' U" k+ m0 x3 D- z. q& u  |& b  L# t

  2072. 1 L: G' x6 z  `) M# b& X
  2073. LDA <Page_Last* [# b) q$ {, T8 R
  2074. CMP <Music_Item_Cur. @* x5 D- O# U  _6 e7 @
  2075. BNE Last_Item_Begin
      {- S3 S" z" a2 D3 f0 I
  2076. & w" ~' f" h, o9 Y
  2077. LDA #$010 g2 i& T' c2 R% q9 A( r: A1 B- _
  2078. STA Data_Buf# o! ]8 D  h- x5 T
  2079. Last_Item_Begin/ s" C# G' Y7 U0 r% f) `
  2080. LDA <Music_Item_Cur
    4 X1 V& B0 n; f4 }1 l* L* O6 `
  2081. BNE Last_Item_Set8 w& N% w& L! h) N  c5 `, B
  2082. LDA #ITEM_MAX_INDEX + 1! c( U1 d' Q5 O5 ^9 j' u: R$ d
  2083. STA <Music_Item_Cur
    6 H' X9 v# b& ^

  2084. / i: m" O# d* S$ L( g
  2085. Last_Item_Set( O6 ~$ c. ~3 c; {6 d/ Z
  2086. DEC <Music_Item_Cur
    ; U6 d1 Y: s( P7 `
  2087. LDA <Music_Item_Cur
    ; T% C4 X  ^4 |& ?; ^
  2088. JSR Reset_Current_Music
    * V) Z" \, r; i1 Z% K' z

  2089. ' t. y" R" l, w* g; ]
  2090. Last_Item_Play4 z, m: n" M0 [. o. [  y5 f
  2091. LDA Data_Buf
    / r' n; d/ A2 v1 u/ S# y- D
  2092. BEQ Last_Item_End
    ( ?# u! N  F* x8 m: u
  2093. JSR Show_Page_Text% N$ \6 ~4 P" I4 ^- O2 N
  2094. Last_Item_End. P/ e  s3 |/ }9 I, d
  2095. RTS7 M1 P- d" W8 v+ y+ N2 @6 c

  2096. 3 s. |* H" i7 y) ]1 V( Y9 [+ G
  2097. ;==================================================$ i+ @  O( ~- v" _+ V
  2098. Next_Item;下一项
    0 O4 R3 A. |: d9 ], J- C+ Y
  2099. JSR Clear_Last_Track_Name' g% v# |* C2 c7 u0 r
  2100. JSR Disable_Text_Draw- d" {+ R  d' l

  2101. 1 F) r3 a$ U: [1 \* s3 s
  2102. LDA <Music_Item_Cur+ E/ A3 ?1 X# k* @5 y
  2103. STA <Music_Item_Last
    % s% r0 j. E0 c3 j' _

  2104. $ l) H9 ?7 W) V8 o+ a1 s& p! ?
  2105. JSR Get_Last_Page_Start_Index
    4 r. b# [5 H7 v* n! S) h- e" a$ q

  2106. ! E3 J/ o" d8 g) ^! X
  2107. LDA #$00- a+ j2 a! x& t  f( ~
  2108. STA Data_Buf
    6 \$ V0 o/ R" [5 e( l( a7 c
  2109. ( K% C/ V5 F2 Z
  2110. LDA <Page_Last) N/ L! D/ y8 F; t$ p
  2111. CLC
    . f5 O3 s1 {5 P. ~; }
  2112. ADC <Page_Last_Cnt
    $ z1 n  E$ x  u# @6 |) H5 o
  2113. SEC3 A6 M' i1 ?2 X5 p
  2114. SBC #$014 T& P$ K" T& {7 r
  2115. CMP <Music_Item_Cur2 W0 G  c: H, B4 k; ?2 |# {
  2116. BNE Next_Item_Begin, A7 s% Y: R7 n
  2117. % a8 ?- k  C5 \1 F; q
  2118. LDA #$01
    0 L6 O7 P( l# d  D! |+ k. v
  2119. STA Data_Buf
    . E- {4 }4 K2 J! @' B( z
  2120. Next_Item_Begin! `' ?$ r6 Y- @$ w
  2121. LDA <Music_Item_Cur$ Y# n5 F) X, d) t0 Z; `
  2122. CMP #ITEM_MAX_INDEX% S% x  R; P9 N4 o5 H5 l
  2123. BCC Next_Item_Set
    + [3 x4 M2 t; n$ d7 c
  2124. LDA #$FF
    ' [8 i+ D8 ^1 h7 {& {+ j$ ]
  2125. STA <Music_Item_Cur/ K; p" ^7 q4 g3 D. d
  2126. Next_Item_Set
    + H3 u- h$ H9 i/ b
  2127. INC <Music_Item_Cur
    6 r6 _0 m/ Y( f! t
  2128. LDA <Music_Item_Cur
    1 H; M* Y- ^5 K# ]8 U
  2129. LDA <Music_Item_Cur5 ?4 ~( V& b- @; R5 p. p
  2130. JSR Reset_Current_Music3 T' g$ p4 S3 n. G5 ^
  2131. Next_Item_Play
    . ~1 {) h9 m- d% H3 h$ W/ x. U( K
  2132. LDA Data_Buf( L* n$ M9 e. X, t
  2133. BEQ Next_Item_End  T% n  N" R% k6 ^1 M
  2134. JSR Show_Page_Text
    & ?4 H) m* @, Y. H
  2135. Next_Item_End$ Y! J5 T6 w. ]: Z- f" i
  2136. RTS
    ; f* Z1 _8 p* k/ \0 M
  2137. 5 [- Z, A. a0 B- i1 {5 S% Y
  2138. ;==================================================) a! J% y7 o5 f) R& P) o7 j  N
  2139. Last_Page;上一页/ m, N" x+ F' V8 n  V
  2140. RTS5 X; o+ r* J% m! g& V
  2141. - g0 u% S4 p, R! |7 ^1 J, o" t, C
  2142. ;==================================================7 E* J. h# C$ f. ?3 ?# u7 l
  2143. Next_Page;下一页
    & z( w4 w1 J5 i
  2144. LDA #PAGE_MAX_INDEX
    : F+ w: F" q! ~: k$ r
  2145. CMP #$01
    5 U9 |. s3 |  C" r2 n" O
  2146. BEQ Next_Page_End% b8 m& x% T$ `: n# E

  2147. + H# q. H% x  ~
  2148. LDA <Music_Item_Cur4 Z8 V  {5 j% J. Y$ Q  n; ]3 u
  2149. STA <Music_Item_Last
    ) i& o. ]  L& y' B
  2150. " ~0 I# x9 V# _- r6 F; {
  2151. JSR Get_Last_Page_Start_Index$ i; F# H! Q0 r

  2152. ) D8 s# h8 ^3 ]$ D0 ?3 j% w! O5 ]4 f
  2153. LDA <Page_Last_Index
    & x4 e/ R5 x' E
  2154. CMP #PAGE_MAX_INDEX
    % Q2 j) v; @! T/ r0 x6 \
  2155. BCS Next_Page_In_End_Page0 h$ S  ~& _, G

  2156. - h' m9 ^  Y$ f" F* I  }2 x1 _
  2157. Next_Page_Not_End_Page;不是在最后一页
    + @" o' R9 g: C
  2158. LDA <Music_Item_Cur% d& y$ N$ q4 i: F0 H8 y
  2159. CLC
    ) h$ U* k# [  v+ O( y& c* A
  2160. ADC #PAGE_SIZE1 Q( F5 P; k( l8 S7 x5 d1 o& F" z
  2161. CMP #ITEM_MAX_SIZE* P. {  I1 L, _7 ~4 n
  2162. BCC Next_Page_Not_End_Page_Less
    2 K5 f- ]+ @* ^7 Y. ?" j# l
  2163. LDA <Music_Item_Cur6 @  b- J/ m# {
  2164. SEC
    # B8 n& z5 ]+ U% E: L+ s
  2165. SBC <Page_Last_Index
    , [; M8 F" O1 t! `, G& B
  2166. CLC7 ~& J; P8 a' i0 X: u# {2 Y+ w4 Q) b* `
  2167. ADC #PAGE_MAX_INDEX. }7 n7 q; a! k* W
  2168. CMP #ITEM_MAX_SIZE. _; h/ m; _$ O. K$ n1 W4 L$ r$ N  O* ]
  2169. BCC Next_Page_Not_End_Page_Less
    6 {* i$ F! L/ u7 u
  2170. LDA #ITEM_MAX_INDEX& V' ]+ C4 X/ A
  2171. Next_Page_Not_End_Page_Less
    0 Y, ~* P6 q* L5 ^8 E* Y
  2172. STA <Music_Item_Cur  {2 T% |% ?+ p0 I2 s
  2173. JMP Next_Page_Reset
    6 k$ b% s4 Q* L. Q
  2174. 4 r# x7 C7 D# B% O! c' ]% ^
  2175. Next_Page_In_End_Page;在最后一页
    ) b* P" j6 o" [5 U0 N: ~
  2176. LDA <Music_Item_Cur2 g; A% @+ V' U* ]" Q
  2177. SEC/ {/ h1 W( n2 w: D% @" K
  2178. SBC <Page_Last_Index
    - G$ B8 a- _2 e& w# L
  2179. STA <Music_Item_Cur' E5 A% O* r# i; j. u
  2180. , A% @% m6 F+ ]
  2181. Next_Page_Reset  R7 _  N3 v  L# E# ]
  2182. LDA <Music_Item_Cur
    ; S: ?0 s7 M$ z+ T% A
  2183. JSR Reset_Current_Music
    " p& H$ z. t/ W) v
  2184. JSR Show_Page_Text' s1 [7 o# J  {9 v" l/ Y
  2185. Next_Page_End7 S$ ^: w/ F1 K9 S
  2186. RTS9 E3 j( F. X% m; v, v, c6 U
  2187. % q1 F. C* x( G) x* Y5 x- X
  2188. ;==================================================  ]  K; b2 `) T( N/ z  X
  2189. Disable_Text_Draw;禁用音乐条刷新
    " D9 y5 w3 ^8 @+ j
  2190. LDA <Text_Disable_Flag
    2 \8 a" T( |3 w6 b
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    & q& V" y$ Z9 l0 O% [& o+ j
  2192. STA <Text_Disable_Flag8 ]" X& n9 D4 l/ y' Q( l' M1 y
  2193. RTS" r3 p  u1 n- l' d$ ], i/ g

  2194. ' L( u/ y7 C5 w6 \" \, _2 ^
  2195. ;==================================================# ^0 s# }; }" W1 h0 F# H
  2196. Clear_Last_Track_Name;清除上次曲目名% B6 Y) I; R/ _8 w9 m  }- x
  2197. LDX <Music_Item_Cur9 f$ B( s8 [& F" A/ T# t) B
  2198. LDA <Music_Cur,X4 D, z% B5 X8 b2 S1 `
  2199. .IF Track_Name_Pos) y+ r" ~  K" Z' ~7 D! O0 w
  2200. JSR Clear_Track_Info# Q$ d4 X) F# A; v
  2201. .ENDIF9 G4 S0 y) P1 }( `8 g7 u: [8 p
  2202. RTS0 t* O  Z: Q' l  d

  2203. 0 g# @& o6 Q) A8 u( u
  2204. ;==================================================4 l( s, {* V( @; S# d  C2 @: i" |5 r
  2205. Reset_Current_Music;重设当前曲目/ f! a0 ~; D# H' K1 G# G6 r& _; ]0 B

  2206. $ g) g2 h  D/ ]7 L
  2207. ;写入当前总曲目
    6 m6 g4 D" Z1 l1 G
  2208. JSR Set_Sound_Total
    & q/ U  E  n4 t/ l; @8 I3 ]4 b
  2209. LDX <Music_Item_Cur5 ]. A: y  A8 p) O# b! c

  2210. 7 J! l1 x! K! G' D+ ~$ J
  2211. LDA #$00
    " B4 Y6 P" T& G
  2212. STA <Music_Last0 |8 c5 _2 e) H
  2213. ! P) Q5 f* b8 i9 k# Q, ?# V- a3 Y
  2214. JSR Sound_Reset_Proc
    7 m' H5 j- N# \4 f* t2 u  \; u
  2215. JSR Music_Show( q* B! u: Q! q* R  ]/ ~  n/ n
  2216. RTS1 h' W+ P: S4 R$ b: h, j; \

  2217. % H/ Y- e6 `% t7 V7 Z( _8 }
  2218. ;==================================================) H% F6 R! g5 T2 u
  2219. Music_Song_Stop;音乐停止
    : d9 R6 Q9 v- C0 V, S
  2220. LDA #$011 V1 v5 y2 U  C8 L, f# I. D: M
  2221. STA <Music_Stop_State% B/ Z/ I8 g, Q& G0 F1 n/ r$ Z
  2222. JSR Music_Bar_ReSet* L2 A  g# J, x  l" y) ?
  2223. JSR Time_ReSet
    % @* \5 O6 _( t2 y9 u' y
  2224. JSR Sound_Data_Clear
    ! M1 z$ C2 c) F  S2 k* }- r, p
  2225. JSR Music_State_Show! G6 {$ l( I; H1 t
  2226. RTS, v& M' F' p. \# |) S/ s- b
  2227. . j. e7 W' y! t  U" r1 \1 m! Z% L
  2228. ;==================================================
    , z8 G2 A1 E, B. M& q4 R/ N2 ^$ E
  2229. Music_Song_Play;音乐播放
    / X- y- S' r* w' y6 W; J" j( }
  2230. LDA #$00
    3 v# U: w9 B; `" f; Q! k3 P8 n
  2231. STA <Music_Stop_State
    ! y" V: r* @* b2 f. V* G+ _6 m/ N
  2232. LDX <Music_Item_Cur
    2 {4 D4 _+ o7 x$ `- {3 f. P& @
  2233. LDA <Music_Cur,X
    : |, c; V3 ]3 K, V3 u! i
  2234. JSR Sound_Init_Proc
    7 y/ _! L# J8 @
  2235. RTS
    ! W8 Y) F6 ^- L0 W/ Q3 ?. n5 E0 b6 c

  2236. 8 K' q4 M- R: u5 r1 \, h/ b
  2237. ;==================================================
    2 y% l+ g# z8 F: `
  2238. Music_Song_Last_10;上10曲2 V* G% Y+ p9 j; F9 W6 P( q
  2239. JSR Clear_Last_Track_Name7 n: y) j$ K, @& D" g) j" R0 k" L
  2240. JSR Disable_Text_Draw8 A- u+ h+ |+ E
  2241. LDX <Music_Item_Cur2 m4 Z9 P( h( I' k9 ^
  2242. JSR Set_Sound_Total
    * E" V" f: P, [8 Q
  2243. LDA <Music_Cur,X# d$ H9 |% D1 l/ \+ d
  2244. SEC
    & Z# r' l5 b3 ?% `' w1 m
  2245. SBC #10
    ' U5 O( e1 I* R) G$ {" n
  2246. BCS Music_Song_Last_10_Set
    & w" P7 ^3 V: h% u3 o
  2247. LDA #$00! T/ H- a! _8 N& I4 T0 }
  2248. Music_Song_Last_10_Set
    ! X( m- T( `, D
  2249. STA <Music_Cur,X
    0 M$ }4 p4 Q# c5 ^) r$ P% q+ s
  2250. JSR Sound_Reset_Proc. R% E% v! j0 ?8 B
  2251. JSR Music_Show
    1 K! R9 c: y) q
  2252. Music_Song_Last_10_End
    : G+ F; G$ E/ ]! {
  2253. RTS1 u6 `" \6 `5 B6 ]" m! {
  2254. 8 m; a& M' @% z1 y
  2255. ;==================================================
    5 X; @& ~" C' W: \0 d5 x% y9 n
  2256. Music_Song_Next_10;下10曲# h  q4 _$ H9 U4 x7 A1 b
  2257. JSR Clear_Last_Track_Name
    & O2 i6 |& x3 T! B! B
  2258. JSR Disable_Text_Draw0 ^: {, y6 o" L! E2 W8 H
  2259. LDX <Music_Item_Cur
    ) z% z4 P9 T, Y. s
  2260. JSR Set_Sound_Total  m6 C+ `: d$ v7 f* ]8 Y* t
  2261. LDA <Music_Cur,X: Q( T& z) W% ], v3 k
  2262. CLC: r  E/ T- Z: p2 t' {" \/ a
  2263. ADC #10! U# j6 O2 J/ f
  2264. CMP Music_Total) A" w. M6 c* e: v. z" T
  2265. BCC Music_Song_Next_10_Set
    ! D" b4 x: @# Y  i0 |& p. g
  2266. LDA Music_Total0 I% |7 P# v* g* h1 d* |
  2267. Music_Song_Next_10_Set
    ' \# A0 F- P" S
  2268. STA <Music_Cur,X
    ! x8 M1 X' B( f; f7 T
  2269. JSR Sound_Reset_Proc
    # b1 n7 a; y) v7 _2 M
  2270. JSR Music_Show
    5 ~- @% a5 L7 P1 j* o  D; `# Q
  2271. Music_Song_Next_10_End% Z' g" d( D+ _
  2272. RTS
    * X: Z3 j( a+ a4 ]/ z3 M

  2273. 8 p! q) V3 F- I  N! u9 s' u
  2274. ;==================================================* w& r- L& u* e6 M: y4 }# M3 B
  2275. Music_Song_Last;上一曲
    6 O  q  y, E/ _! {( v
  2276. JSR Clear_Last_Track_Name! @: c; _. \& z; b! f2 j
  2277. JSR Disable_Text_Draw% y5 Q: R/ v. S4 _2 C4 _6 |
  2278. LDX <Music_Item_Cur
    9 M7 x) O& ^/ ~5 G1 D- A, z9 i
  2279. JSR Set_Sound_Total# s+ K9 e( p2 Y8 K5 w, N- e$ h" A
  2280. LDA <Music_Cur,X
    , u; c1 e& u! Y. T; C
  2281. BEQ Music_Song_Last_Set
    . n: x8 V  q) b# v
  2282. DEC <Music_Cur,X, J) h) _' V: q: U: L
  2283. Music_Song_Last_Set- S" s" }1 H7 U7 A; N; k% b7 E0 U. l
  2284. JSR Sound_Reset_Proc9 E- a6 L, `! u  N0 l( X
  2285. JSR Music_Show
    5 \# l3 o9 Z3 }+ x0 S4 H3 _
  2286. Music_Song_Last_End
    5 n2 s9 H: x  ]9 N/ Q) i
  2287. RTS6 `- l1 l0 p! O
  2288. 8 ^2 n+ H# o$ q( P5 U/ \9 }
  2289. ;==================================================
    3 x# U: L# ?4 @; b6 T  c) s
  2290. Music_Song_Next;下一曲
    0 j" ~6 a4 y# P9 B7 N$ J( [9 \
  2291. JSR Clear_Last_Track_Name, k* E2 c( L3 O* V
  2292. JSR Disable_Text_Draw" `5 ^8 F- W- B1 J; p
  2293. LDX <Music_Item_Cur
    - J  a5 f* m0 m2 U1 v
  2294. JSR Set_Sound_Total# |) n, \* ~1 q
  2295. LDA <Music_Cur,X
    8 {1 A4 [, @  ^0 [3 A8 P7 X" c
  2296. CMP Music_Total+ O: u) }+ y8 T( R" O5 J
  2297. BCS Music_Song_Next_Set
    ' L' D' |! v6 t+ c8 L4 B
  2298. INC <Music_Cur,X! H3 z# p: U3 E! ~+ j+ c2 ^
  2299. Music_Song_Next_Set
    + K/ L9 Q  `( A) \& I* Y3 H
  2300. JSR Sound_Reset_Proc: {3 L4 d. t; ?; _; ^; e
  2301. JSR Music_Show
    ' p( A9 O. ^% H; T: L: n
  2302. Music_Song_Next_End, l+ ~9 _/ ]: r; z; W; Q: [. I
  2303. RTS
    8 y5 F7 \5 ?4 \) ?
  2304. ! P! j  y5 h7 }3 V+ t
  2305. ;==================================================
    , [+ ^" @5 S  M; N5 p0 }# M
  2306. Change_Select_Item;改变当前选择项% D1 V4 Y) L  `% P
  2307. ;--------------------------------------------------
    1 A) E8 V( A$ D8 f
  2308. Change_Select_Stop_Play_Item;停止/播放7 e2 k4 I4 n) n6 {* o
  2309. LDA <Key_Once
    # E# n. M7 [. D
  2310. CMP #$10
    8 ]3 g4 c$ ?) C( l0 ?
  2311. BNE Change_Select_Last_Item* q* x( r- t' [; x6 O$ l
  2312. LDA <Music_Stop_State
    2 T/ A% Z1 p9 ^: c: K
  2313. BNE Change_Select_Play( i1 H9 [) ~% u5 N# N6 l+ L; U
  2314. JSR Music_Song_Stop
    5 |  ?  v( V; ]4 W8 Y' b0 h8 ]
  2315. LDA <Music_Stop_State4 L' f0 Q' w9 `0 H  g5 t
  2316. RTS- X, C" B. C  Z3 M; \

  2317. " y+ ^3 Q8 o4 v$ Z  W7 n0 @$ Y
  2318. Change_Select_Play$ ~! s$ T# h5 w, k. I
  2319. JSR Music_Song_Play
    , o1 Q4 X/ |& z. `
  2320. RTS
    - P7 K* g. [( C: A2 a1 r9 t; i9 n( ]
  2321. % @' w! N6 P6 R
  2322. ;--------------------------------------------------" @+ Y+ k) c: D& @
  2323. Change_Select_Last_Item;上一个专辑- v# e6 _, B7 E, i! e1 f5 P6 C9 x, e+ B
  2324. LDA <Text_Disable_Flag
    4 t3 L; ~5 m: j: k
  2325. AND #TEXT_DISABLE_ITEM3 G; O' y; ]) C+ N& |8 I
  2326. BNE Change_Select_Item_End
    % z& c& E1 ]- G+ s5 ?) r
  2327. LDA <Key_Once
    - Y) `; S4 m2 ?- N! ]' d& l
  2328. CMP #$08
    ! S0 i4 `7 b* o5 H8 q
  2329. BNE Change_Select_Next_Item
    ; K# j$ u( R) I5 y: H" G
  2330. JSR Last_Item
    ' f, V. d, r  j# n4 z+ g+ ~
  2331. ;--------------------------------------------------$ z8 A' X4 r& i! \: q+ [
  2332. Change_Select_Next_Item;下一个专辑
    ; U+ x2 ?" J  z' b0 X  X
  2333. LDA <Key_Once6 \0 Z' k9 ~4 c/ x, K, v
  2334. CMP #$04
    ; p: B( k8 E- g& J3 d3 k
  2335. BNE Change_Select_Last_10
    6 n/ n3 M* V( L: v& F
  2336. JSR Next_Item
    2 [3 D( d2 ~, O* Q) \
  2337. LDA <Music_Item_Cur; ~% q# V7 l5 k6 N7 n
  2338. JSR Get_Page_Start_Index
    0 `) ^9 P- J/ C& |, M) t
  2339. ;--------------------------------------------------2 w% d& @( G$ [8 @6 g4 \6 |/ F
  2340. Change_Select_Last_10;前10曲
    ' E; e' R/ d! V% r1 \# X
  2341. LDA <Key_Once6 o$ G9 b, u7 V+ W& x/ T
  2342. CMP #$40  B- E1 w5 n/ x2 `
  2343. BNE Change_Select_Next_10. z$ `; K% M* B) w
  2344. JSR Music_Song_Last_10: c' c: i2 H3 g! p
  2345. ;--------------------------------------------------
    4 y" d: {, U) L" \7 o4 S% P; d
  2346. Change_Select_Next_10;后10曲* V" c" b$ W/ n) ]
  2347. LDA <Key_Once
    & {0 E+ k/ g& \8 q
  2348. CMP #$804 q! J2 a, ~9 v9 M5 b! y
  2349. BNE Change_Select_Last
    # z2 W' z" ?% Y* i
  2350. JSR Music_Song_Next_10$ T; o) G  t- X1 Y6 f- L: l: T/ Q( R) O
  2351. ;--------------------------------------------------
    , V# s9 O' Y7 D$ j) e, j8 }* L$ D
  2352. Change_Select_Last;上一曲
    6 [, u! W2 `9 I+ u8 G# c) K
  2353. LDA <Key_Once0 k( _0 G3 g' h  _6 p1 ?
  2354. CMP #$02
    ; _+ I+ |; c; R0 O8 t# ^
  2355. BNE Change_Select_Next
    3 h. {6 p7 v$ c& I
  2356. JSR Music_Song_Last
    $ f. ^( O; Q- t5 w- m
  2357. ;--------------------------------------------------" _2 ]  H+ l$ @6 c
  2358. Change_Select_Next;下一曲& Z: e  \  O, s* ?8 [
  2359. LDA <Key_Once$ x& ?9 H: O* b  t3 Y# `0 V
  2360. CMP #$017 n: v( ^" D2 b8 C7 j; F4 Q
  2361. BNE Change_Page_Next0 v; `% `5 c5 k/ x
  2362. JSR Music_Song_Next' N9 P! x5 F/ F4 w! T- c7 K2 u
  2363. ;--------------------------------------------------' c( e0 n. }; W  q
  2364. Change_Page_Next;下一页
    % j' `7 n: r- S8 z4 J0 S
  2365. LDA <Key_Once
    ! z0 D0 e" s2 p+ H
  2366. CMP #$20
    6 y6 W1 @- y5 h4 y9 D/ v$ [; m
  2367. BNE Change_Select_Item_End3 I" P2 H6 E; d( z  d
  2368. JSR Next_Page
    2 H& O' m5 e# Q9 t5 ?3 B
  2369. ;--------------------------------------------------- V! J) N9 t& y) T, Q; M
  2370. Change_Select_Item_End
    0 a5 v' d3 g, C- h+ z: u; V0 ?: L
  2371. RTS
    / v5 h: m7 i" l: c) _( U
  2372. . V4 l4 W, ]5 d* Z8 l
  2373. ;==================================================5 o: F/ [2 x& \5 \( U# C* R
  2374. Show_Arrow;显示箭头光标+ `2 l: [4 j$ r4 [, c
  2375. LDA <Music_Item_Cur2 _* \, f4 {; ]  w  v
  2376. JSR Get_Page_Start_Index" h* _8 K+ I0 a& j3 x2 w- R+ h
  2377. LDA #$00  x4 n; Q6 c; ]8 @- a
  2378. STA PPU_OAM_ADDR
    ! _+ S1 {0 U! q9 f, i1 d/ X2 ^
  2379. LDA <Music_Item_Cur) j6 D9 ]! m) g: u  h; |
  2380. SEC
    % ~7 p+ \* w. s+ s( ~  v8 p
  2381. SBC <Data_Buf
    5 g4 `. F- H9 t, a7 N8 e& z  F
  2382. ASL A# Z  k. \9 ]" L! s
  2383. ASL A
    7 C) n6 s# L: L* _
  2384. ASL A
    ! ~) `( N. [) z
  2385. ASL A7 Z$ W& \! }. D7 L2 |6 o
  2386. CLC: \1 P( R4 F, S
  2387. ADC #ARROW_Y_OFFSET
    ) J6 c# J! p0 X
  2388. STA OAM_TEMP_ADDR + $001 K; \, Q( K0 b+ m6 H% O
  2389. ;STA PPU_OAM_DATA& j, r0 |1 C: y! h+ r
  2390. LDA #$1F5 u1 U) ~  x/ U' S7 A; {
  2391. STA OAM_TEMP_ADDR + $01+ P. q: [. b4 b
  2392. ;STA PPU_OAM_DATA8 i/ V# O- m- y0 U- m
  2393. LDA #$00& M% m* m2 ~0 j7 w& o1 Q' N9 c% J
  2394. STA OAM_TEMP_ADDR + $02
    . c# k; E* Y. G* }8 b
  2395. ;STA PPU_OAM_DATA  ~5 }+ @, M8 g5 _1 F
  2396. LDA #ARROW_X_OFFSET- m- `7 B, }' C8 o
  2397. STA OAM_TEMP_ADDR + $03+ X( J# b0 a9 k" W
  2398. ;STA PPU_OAM_DATA) b$ K) G+ S+ z7 v9 {
  2399. RTS3 x4 h6 `3 {6 e
  2400. 4 Y- e3 D# ?/ K/ G
  2401. ;--------------------------------------------------* {! X% M- r9 P& ~' r  V$ o! p7 f
  2402. ;命名表数据
    / w. n/ m; _8 x9 Z9 ~
  2403. Palette_Attributes. `2 m7 _& S; |/ W& ]
  2404. .IF SOUND_BAR_SHOW_ENABLE
    , @- z' J: j0 m& r1 |
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    - A. e" m8 M4 M8 Y: ~! [
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    7 n# F! O$ F; y3 Y
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$753 ?4 T% \. E& c
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    % X% ~0 I. m- i
  2409. .ELSE% V  z7 v% k7 v3 h. h3 B3 |$ [
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    5 c+ m/ s& e5 Y8 C7 I% r
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55& ]8 m- p2 B# u
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    . N3 q- V5 U- t  J3 i  m" d8 Z) D
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    # d+ W2 X% l( j2 H. V
  2414. .ENDIF
    4 i8 R& g/ L: |& l! F
  2415. * O' H& N+ L4 ^( D( ?: j' x
  2416. ;--------------------------------------------------- d6 z, v0 A  p3 A" p1 B
  2417. ;调色板数据
    4 T. U- W( ^1 k& L% v
  2418. Palette_Data
    * [& i- e3 o; E' |) \5 ~
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F% a1 {! L1 Z5 o* ~7 V9 m; M. |6 o) P/ v
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    " }+ n5 Z5 s, O" M$ t

  2421. : R6 a6 d2 V3 b0 a. R8 P5 D& ~
  2422. ;--------------------------------------------------
    / J3 Q* s' d0 X
  2423. Static_Text_Data
    - T: C& e3 V: p, ~
  2424. .WORD Static_Text_Caption_Data
    4 G( N: E$ f# O, }) O
  2425. .WORD Static_Text_Author_Data
    9 E8 J9 h3 W  \( B* @1 Q' h8 }  q
  2426. .WORD Static_Text_Date_Data
    - U# ~9 A# L1 r9 {; j" n/ E2 Y
  2427. Static_Text_Data_End
    ; H: D. M7 k  w  G% s+ ?2 R6 `

  2428. 6 w# _4 a1 d0 {& j% @
  2429. ;--------------------------------------------------
    & e1 Y3 k. e4 }$ }
  2430. Static_Text_Pos# z) W  O1 V+ s7 N0 `
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)6 {% N) x1 e5 ]
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)0 _8 a4 r4 o$ s1 b
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)- j# ]5 A6 i. |' ^5 @* ]  n/ Q
  2434. Static_Text_Pos_End0 K, _' y, [# ?7 l! M4 z  ~" d# i
  2435. / k/ h& ^5 s8 k3 C
  2436. ;--------------------------------------------------0 _% X) m0 b9 M9 o1 S
  2437. Music_State_Stop. Y0 ]- D3 ?& A% A2 V* a  V6 [2 |2 G
  2438. .IF SOUND_BAR_SHOW_ENABLE8 T- s6 B, O) w* _
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    , F* l2 j+ V+ E' M
  2440. ELSE8 }! G5 j  Y: N1 [% `  y( J
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    ( q% V- `5 L. N# f- |" Y- x
  2442. .ENDIF% D: e+ A0 n) Q( B
  2443. Music_State_Play; n- M  Z% f: ]- b1 P/ g
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    8 ~& V/ O; _4 P$ Z/ S% c

  2445. 3 S( b4 q/ z3 f" J4 ^' h* L# u
  2446. ;--------------------------------------------------
    % t6 R; |( u# K9 q. b
  2447. Sound_Bar_Text_Data;声音类型文本
    * f% c: h- q2 X6 `% n
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
    8 H) O; f& r% I9 h5 V
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-", [0 E3 _; {6 b0 j  M/ a( \6 f
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"( K7 C6 O0 K" S- l3 U. Y; @/ S
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"6 R% j" B# _7 m: T) s: t
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00
    6 u8 l: |8 b1 `; j2 R! R

  2453. ! }. B5 E" W) C/ R- Q3 j% u. ^; L
  2454. .IF Track_Name_Pos0 d6 o  @7 T5 E/ A$ z& P0 G, J

  2455. - H% c4 J3 z% d9 g5 v
  2456. ;--------------------------------------------------
    1 `+ G1 `% s: z1 I# O: \& ?1 k
  2457. Track_Name_Addr_00;曲目名地址索引
    6 n" n! Y) t, K6 U
  2458. .WORD Trackr_00_01. y) L, I  [3 X6 `* d
  2459. - \) Z8 r- b3 G! Y, ]1 i- a
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"* F# ?1 v+ Q( |3 |. D1 k3 k" q0 ^) W
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"; B) B/ Q9 i$ t( O- m8 E- U1 C3 `
  2462. 2 w" O* y9 _% r$ D. G: _4 j
  2463. ;--------------------------------------------------* y, o/ a$ F3 B( J: U. Y. u
  2464. Track_Name_Addr_01;曲目名地址索引
    ' x( F5 Q! u7 B) W
  2465. .WORD Trackr_01_01
    $ m( o2 I$ n8 c$ T1 q& b& T1 v
  2466. 3 u( A: b( ]% I' e0 n+ S
  2467. ;==================================================
    2 E1 L- b* T: |8 }# `6 N( E# ]
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"# F% N$ ?3 c, W" D: ]
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
    + j1 `2 }* G: H* v1 S) G6 H  E

  2470. 5 `, z. W' y, U5 B/ o4 t5 A
  2471. ;==================================================
    - E- z( \9 a0 [% l
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    1 m9 u( Y% \7 a& s& k
  2473. .WORD Track_Name_Addr_00/ m$ c" I* C# @
  2474. .WORD Track_Name_Addr_01) h, X0 z$ j* ~2 n0 h
  2475. .WORD Track_Name_Addr_01
    * L( p0 z9 Y4 F) J- W5 M- x& C. F

  2476. & ~$ @% i( ^/ n2 @- `! Z3 ^
  2477. .ENDIF8 t& C" Y2 E; j
  2478. / g5 |/ \) O% `1 W; o
  2479. ;--------------------------------------------------2 D/ h0 S3 A$ l8 y* O
  2480. Static_Text_Caption_Data;静态文本数据  D1 W0 z7 N& @% R( W  W3 I
  2481. .DB 16) S( q& R# r3 H) i
  2482. .DB "FC MUSIC 12 IN 1"
    ( I) L7 i/ T  ^, X
  2483. Static_Text_Author_Data
    5 ^5 ~" x) n" l' S
  2484. .DB 256 m# u. u4 @4 P5 J6 ~
  2485. .DB "EXTRACTED BY FLAMECYCLONE"
    0 j3 S5 _7 T; \% P* e1 Y3 a
  2486. Static_Text_Date_Data
    " S/ w1 y" |3 Z, o, D# p/ \
  2487. .DB 10
    4 B' K  w# P, q6 ~+ _- F$ q! C& P
  2488. .DB "2023.07.23"
    # x4 }6 K5 e2 R% O* Q
  2489. ' S/ C5 a- V. t: Y' K/ [" X9 X
  2490. ;==================================================/ `( s$ }; b4 r# J4 t- U  _5 j
  2491. Music_Collection_Name               ;专辑名间接索引
    + t1 @& S6 n$ b2 v
  2492. .DW Music_Collection_Name_00& S1 D( q9 C) ]& B( J0 A
  2493. .DW Music_Collection_Name_01% [, r8 ?8 o3 b. S2 X
  2494. .DW Music_Collection_Name_02: {6 I' e# ]! ?/ |& J
  2495. .DW Music_Collection_Name_03/ e" c9 D3 A8 y" R
  2496. .DW Music_Collection_Name_04+ m6 g( Q8 [" k8 e. ]- q( N
  2497. .DW Music_Collection_Name_05# r: R9 b; X) m3 T, z+ S
  2498. .DW Music_Collection_Name_060 ?7 E4 G. O9 s* b/ i) L- |; {5 j
  2499. .DW Music_Collection_Name_07
    7 p: [5 o, @8 u" [* r
  2500. .DW Music_Collection_Name_08
    ! W2 A2 h. f/ {& A
  2501. .DW Music_Collection_Name_09. `- }+ c8 y8 w5 s' ]) k
  2502. .DW Music_Collection_Name_105 e- w  z5 J# C5 I1 K1 a6 m
  2503. .DW Music_Collection_Name_116 o0 F9 c- [1 K9 A* d
  2504. 0 p  ~( V; @, h- S" q
  2505. ;==================================================
    ) ~5 H3 W5 Z: I) V; L
  2506. Music_Collection_Name_00            ;专辑名文本数据0 i( V. q7 O# z4 [
  2507. .DB 11,"1.RAF WORLD"1 i7 z& s, f5 E7 A! b& U
  2508. Music_Collection_Name_01/ A8 ]6 ]- ^# l! j4 G9 _
  2509. .DB 15,"2.FINAL MISSION"! q& f1 c2 u4 k7 v. G, b7 d
  2510. Music_Collection_Name_02
    ; R! c+ i# e+ L; q! P: [6 m: }
  2511. .DB 06,"3.KAGE"1 W  `, t- \. k5 n6 T
  2512. Music_Collection_Name_031 W3 X. O) q% {1 ^& _7 d7 m8 m8 v
  2513. .DB 16,"4.DOUBLE DRAGON"
    5 q& y5 [- V2 `* L0 x0 U3 U
  2514. Music_Collection_Name_04( ~! U0 b# S1 N4 O. j9 F
  2515. .DB 17,"5.DOUBLE DRAGON 2"
    - e0 ^9 t. h1 I- _! S
  2516. Music_Collection_Name_050 N0 ]# _% n& B4 ~
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    , Y0 C( m' ^6 |: `6 ~  }
  2518. Music_Collection_Name_06( p9 K& ^  X/ r- ?& V: K0 Y. l* G+ k
  2519. .DB 09,"7.ROCKMAN", K/ }/ j2 Z, T$ i
  2520. Music_Collection_Name_079 h  _4 N+ b6 C* M; C% ^' r: Q7 T- t
  2521. .DB 12,"8.ROCKMAN 2"/ D' L6 o/ _$ ?$ r
  2522. Music_Collection_Name_08
    5 ~0 p, `8 p+ w# V' X. |9 J3 n
  2523. .DB 12,"9.ROCKMAN 3"
    + b; ]' ?0 M- _+ x* Y3 y/ a8 l
  2524. Music_Collection_Name_09
    + c+ C) J! [" W! Q3 F% ~; m3 R
  2525. .DB 12,"10.ROCKMAN 4"
    - |" Z& v8 J: i6 T& d# P
  2526. Music_Collection_Name_10" T% s- t6 w) C, Q: S5 b
  2527. .DB 12,"11.ROCKMAN 5"; c8 A% L  \9 C" l) }
  2528. Music_Collection_Name_11
    * [! K" e% Y  h: `* W
  2529. .DB 12,"12.ROCKMAN 6"" K$ y. P' a8 K& Q
  2530. " @% S/ A0 t& d6 `, N
  2531. ;==================================================
    : o. }$ }- Q( R3 I7 g
  2532. Track_Name_Addr_Flag                ;显示曲目名标记
    + m( d5 \5 ]; k/ C( x; U2 J
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0
    " r% S, P" i  H

  2534. 6 G* i! R- C& d8 }* b+ e
  2535. ;==================================================
    0 H) `. ^6 C+ s5 z8 \% P+ g
  2536. Item_Pos_Data                         ;光标箭头位置6 z$ m3 I; U; S7 V' t& b$ T
  2537. .WORD ITEM_SHOW_POS9 |! B$ G* \4 V3 E) m6 [
  2538. .WORD ITEM_SHOW_POS + $0040) h3 k+ C  s: ~: f3 @
  2539. .WORD ITEM_SHOW_POS + $0080
    7 A7 B7 x0 j/ l9 F" j; x! u
  2540. .WORD ITEM_SHOW_POS + $00C0
    8 t' v+ z4 f! A
  2541. .WORD ITEM_SHOW_POS + $0100
    9 b1 s" B4 C2 J* W, x) Q
  2542. .WORD ITEM_SHOW_POS + $0140
    & m1 P- r5 w- Y+ \# J; h& F

  2543. ) ]9 ?" w8 K2 c9 M# z( l
  2544. ;==================================================
    " w) a6 K6 T% ]! |5 r1 c- C* X4 S/ o
  2545. Sound_Init_Port                 ;音乐初始化入口地址
    6 y5 B: Z& F8 a7 B7 P: M
  2546. .DW $BFC8
    2 S& k( C7 O4 }  d8 T9 U2 G* u2 ~% H
  2547. .DW $D7F0
    + C& z2 L5 R+ c! J
  2548. .DW $9FC0
    " t9 u& q1 O: f* G8 q+ p" O
  2549. .DW $BF70
    ) h; `4 E" f+ z1 e; A5 S
  2550. .DW $80032 |; |! ~+ f, N1 W8 r4 j) ^: Q
  2551. .DW $BF30' a; E# x! ]8 B! v+ G
  2552. .DW $9003
    9 w4 m9 z1 i" Y; U9 I8 t
  2553. .DW $8003/ l* f: Q) [+ B8 t) F# g+ }
  2554. .DW $8003
    - X& h, D$ M* k6 W
  2555. .DW $8003: U, |0 a' I& M/ p3 G( \! X, N
  2556. .DW $8003
    3 S; `! J2 I6 b2 ^6 Y. H
  2557. .DW $8003+ Y5 m! @! r1 ?% u

  2558. # g2 a" S$ T6 J$ {7 A2 {
  2559. ;==================================================0 J' f4 Y7 a, {  H7 ]! S$ \6 s7 j! V7 b
  2560. Sound_Play_Port                   ;音乐播放入口地址
    # b4 x: `/ c5 E4 {
  2561. .DW $8000* t5 \& @9 r% W3 c. Y1 o/ G8 U8 G9 G
  2562. .DW $80015 A# ]4 N, [* q3 l
  2563. .DW $A000. h) ]7 @& P  k7 n. g5 E! e; }
  2564. .DW $8003! M& ], Q: W. V3 |& \: E* g9 l
  2565. .DW $8000
    - R: N1 M) {1 p% G+ @
  2566. .DW $8003
    % E" z( Q- `$ Z4 g2 A  g+ k
  2567. .DW $9000
    - G) H9 l( n3 G: w( i
  2568. .DW $8000  o# x3 A' j  R) C
  2569. .DW $8000
    . H) ^' S* b/ m( ?& E" [, w
  2570. .DW $8000
    1 S( a3 J7 _5 b) x
  2571. .DW $8000; J: ]5 m; a7 Q4 b4 n! k- _
  2572. .DW $8000  j. C2 }) t. M/ M# n" p, u
  2573. , r7 p& y3 y. ^' z
  2574. ;==================================================8 s) v) E# {7 n, i5 h4 T
  2575. Sound_Reset_Port                  ;音乐重置入口地址3 B' o' G1 B% y% t* [
  2576. .DW $0000
    , M8 g  v: v4 m( R% B7 x
  2577. .DW $0000) r2 I: X+ o4 t2 c/ E4 l+ [6 ~
  2578. .DW $0000- l6 T$ p9 l6 M, y% n4 o5 {& N1 q
  2579. .DW $0000# [+ w4 a, O! S8 U8 n; K2 n
  2580. .DW $0000( d: V! ~1 s$ w( t8 ^8 |$ U
  2581. .DW $0000  R+ j1 q) J# u: p6 m+ _3 D5 I  t
  2582. .DW $00007 u0 A" e" ]6 t" ?
  2583. .DW $0000
    4 {7 `3 G' B2 B7 B& q  y
  2584. .DW $0000
    3 H, M  d/ i/ p( [$ N
  2585. .DW $0000. R* L; L* D3 @7 x$ Y# P- f8 Z
  2586. .DW $0000
    ' E# J% T6 n& w4 P# G
  2587. .DW $0000. r& i9 |" y0 |0 {7 U& u  W) S
  2588. ; i/ {* c2 q# R* j  {0 Y, ^" M) g
  2589. ;==================================================
    ! m* w! t, L+ Q9 w
  2590. Sound_Total_Port                          ;曲目总数
    & J# M6 V: w) h. y5 E% ^
  2591. .DB 38
    6 h  |  p' r4 g
  2592. .DB 333 c6 ?5 P* e% b' R$ P% z% ]' K& g
  2593. .DB 49: x6 b' x6 X) U6 H
  2594. .DB 41+ F' Z" J% ~1 S8 t! u0 ^# r
  2595. .DB 83
    + ~4 z& N# D2 `7 s# X5 F- m
  2596. .DB 70' H9 r$ P+ w& o, U4 w! D
  2597. .DB 50( A/ ^5 X9 b  Y, ?1 Z; W8 _/ {( q
  2598. .DB 67" N2 x- h7 v( D& \0 T, p/ H
  2599. .DB 57- {: s2 ~! A) X4 w3 h
  2600. .DB 715 _- L; ?1 w3 E6 ~/ W( Z9 ?# L% E4 }5 }0 `0 x
  2601. .DB 768 Z! Q$ r# _- I
  2602. .DB 102
    9 P0 Y2 Y2 y5 ?2 Q3 r* ~# o& i6 K

  2603. ' d! }3 O8 P+ ~7 B7 T, f9 T- g
  2604. ;==================================================
    1 o/ l* Y: {, u
  2605. Sound_Start_Port                      ;起始播放曲目7 ], \! n/ F+ |( Y6 T' m3 g
  2606. .DB 000 h3 z. j3 c! v8 Z
  2607. .DB 00
    / Y. b' ?/ Q. E% `1 n: {* \
  2608. .DB 00
    ) j  L$ y" i- @* l6 s$ Y
  2609. .DB 008 v4 c4 _, n# j% f1 W
  2610. .DB 00
    + p; E9 U0 M) g3 K/ b8 E
  2611. .DB 00
    8 n5 l- l1 v2 J5 M
  2612. .DB 00$ z: E: _- T0 w" A6 ^: c
  2613. .DB 00% |; M9 s; G8 b8 y$ N6 @; Y
  2614. .DB 00
    1 J1 G5 K" i1 N6 M" c% ?
  2615. .DB 001 S; T. Y; a5 r3 P4 J" l% N/ ]
  2616. .DB 00
    * t" R7 g+ j* h) z8 t# }( G. @
  2617. .DB 00' p9 J$ V( V: B

  2618. & S) x* ~$ H$ s4 d. U, M' v! M
  2619. ;==================================================
    2 l0 r& u& R/ x  X/ Q2 w; f
  2620. Sound_Bank_8000                      ;专辑bank_8000' T2 _* P7 ?9 G" k1 C
  2621. .DB $10
    ( o: e! V+ a. d5 e* G) {' d/ u& d
  2622. .DB $12
    ( ~( n/ A4 s% b  Y3 Z! \
  2623. .DB $14
    2 a/ K8 e% X. f  _& x. b! P! o
  2624. .DB $16/ K3 a5 q: c0 m' v
  2625. .DB $187 a5 Z. G3 ~9 S. c
  2626. .DB $1A4 Q9 P1 ]: g. }

  2627. # D/ Y. }8 Q; C: H3 p8 U
  2628. .DB $00
    9 T- H  t; \( P- v0 \6 e) B
  2629. .DB $028 V7 d* K8 o4 C8 a6 L
  2630. .DB $0D# j# q& @, m" l& s' c% ~% t
  2631. .DB $04
    / C4 D' a4 z) \6 N4 n+ ?
  2632. .DB $07
    / I/ ~$ Z2 }" Q  `: E
  2633. .DB $0A  @( C: f$ I. {0 t1 s& N9 J0 z% L9 E/ }
  2634. ! o5 d$ t9 H7 P; ~

  2635. 5 K( v' S" N4 }
  2636. ;==================================================
    ' U9 r1 S- F( }8 g; I
  2637. Sound_Bank_A000                      ;专辑bank_A000: Q" Y" H' b9 n* n* v
  2638. .DB $115 y2 Y4 V3 U$ H( Q8 T2 o& j; S! y- u. K6 r
  2639. .DB $13
      w* O3 ]4 L/ t
  2640. .DB $150 g* h$ ~( r, l7 f- X* ^+ ^, b( A
  2641. .DB $17) |$ q# J* g# j2 L' b, e3 W
  2642. .DB $19" ~1 @, U: R8 l3 a& h# Z3 Y! i
  2643. .DB $1B
    % Q4 d0 y) y. z- ]5 P
  2644. ' E/ v$ I, o5 F8 N
  2645. .DB $01
    # K5 ]- X3 @5 Z, d( \+ |' y
  2646. .DB $03
    $ }/ l3 ?5 Y* k/ n, k) m' P( R6 H
  2647. .DB $0E" r: C" N6 M7 z* ?, e
  2648. .DB $05# I4 A' f- A2 ^. x6 X( U
  2649. .DB $08
    , ?, ~% p; o- U2 s( P; B. a
  2650. .DB $0B$ c% S: \9 h) d! G# _6 g
  2651. ! C- {! K6 k; m0 B" O% @  S0 Q

  2652.   _3 _) k+ j5 Z. E8 P
  2653. ;==================================================% l$ Y$ y! r& z: f3 R9 N" O
  2654. .BANK RESET_BANK & BANK_DATA_MASK3 z: @& m% y/ m9 I( J$ D8 e" n
  2655. .ORG RESET_ADDR
    ! G' X- Z: Q2 F, K- a+ @* z

  2656. 8 A0 h4 Q1 K( i. l
  2657. ;==================================================
    0 @; L; {7 V" Z) g+ G
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    2 g9 }4 n  Q! b
  2659. PHA
    0 P" l" Y7 i: h
  2660. LDA #$06! H7 \$ U+ Y0 X3 d! O9 c
  2661. STA MMC3_BANK_CTRL1 @. @& K, a" z4 _- I
  2662. PLA
    ; W7 w- r9 }3 M& B- i# z
  2663. STA MMC3_BANK_DATA
    $ J& n- l! N4 p
  2664. RTS
    ' U$ T8 D3 ~5 ^7 }

  2665. 6 J7 s: j" o" P( E
  2666. ;==================================================
    % u( _/ r1 x* {. r+ a( [) @% }& l
  2667. Switch_Bank_A000;切换bank到A000-BFFF1 |1 p/ v+ ^* K; L' H
  2668. PHA
    ( G/ e2 l5 P. u& S5 B3 v
  2669. LDA #$07. P% {- F7 M2 j- g4 T1 r  x2 z9 ]
  2670. STA MMC3_BANK_CTRL
    8 ~- b& ~3 S2 m
  2671. PLA( q+ ?; F, Z3 d6 H' ~2 t9 P
  2672. STA MMC3_BANK_DATA
    7 h& L6 j( A, k2 C& a& n; j
  2673. RTS8 H8 T1 X9 U2 ?# b6 S

  2674. 7 A! b6 a& A; B7 k, a' M. {
  2675. ;==================================================. v- }8 V! C. C6 p5 L1 O# H/ X
  2676. Switch_Main_Bank;切到主程序bank
    8 |% {& `* V- q, ^
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
      A) e( V7 b/ X: G4 g( f
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    ( [1 l" F. n9 m- T
  2679. RTS0 w" ], s  a* T

  2680. # _1 I' }- c" w. H1 L% E9 `
  2681. ;==================================================# x2 ^! z" q5 p9 D
  2682. Sound_Reset;音乐重设(如果有的话)
    9 t! G, q8 |; v- I0 Q6 h8 Y$ G  C+ {. p
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    6 X' K3 w7 i) N% o5 ]$ N3 R2 f/ T! s: M0 x2 t
  2684. JSR JSR_Addr_Op        ;执行音乐重置* b: \3 x1 v; W- O% K. G
  2685. JSR Switch_Main_Bank   ;切回主程序1 h- }: ?& g, {! L* V- @0 X. U) V
  2686. RTS$ a; f9 T# Q( T/ }
  2687. 5 p1 N1 ?8 [  e# U7 ^2 J9 M6 n0 E0 h+ ~
  2688. ;==================================================. e) |5 i3 ]  K$ b, X, }
  2689. Switch_Music_Bank;切换音乐bank8 E) C* G/ M( }4 [- f3 c8 a# l
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号, M: L, o; z/ M; X, O: I! Q5 F+ d
  2691. LDA <Music_Bank_8000
    $ ?0 b2 h; s3 g/ |
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank% H' Q0 y9 j3 Z; `
  2693. LDA <Music_Bank_A0003 c: v. {6 G2 ~
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank7 {2 D+ W, N7 T! N0 r& E* p- ~
  2695. RTS
      t% V8 S4 P  i+ _" U2 `/ ~8 u

  2696. , T1 E: k; K9 }/ G& H1 M
  2697. ;==================================================
    6 d1 q3 B) P/ K" g$ }6 n8 G
  2698. Sound_Init;音乐初始化
    / R7 d6 U$ Q  h5 x# g2 v5 Q9 m& `  v; K
  2699. PHA! [0 o1 c+ l0 |4 G
  2700. JSR Switch_Music_Bank  ;切换到音乐bank/ ?/ n$ q' x# o" L$ G" C1 Y6 z
  2701. PLA! N$ [8 o9 ?. Q- i
  2702. JSR JSR_Addr_Op        ;执行音乐初始化
    / h4 X* [: Z- k( D* |# W
  2703. JSR Switch_Main_Bank   ;切回主程序* q9 p# g( C6 Y5 ]5 Y- j
  2704. RTS$ u" V2 Z2 m. G1 d$ S) W- {

  2705. : i" k8 @" N1 h1 P+ F* B
  2706. ;==================================================
    7 t; Y/ K0 U& c9 t
  2707. Sound_Play;音乐播放
    % M3 u( n; ~( X+ w9 l. l2 Y
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    # J' \! }7 }+ L( o
  2709. JSR JSR_Addr_Op        ;执行音乐播放* |) Q( u# V: g3 b1 n
  2710. JSR Switch_Main_Bank   ;切回主程序
    0 z; o: T2 R: ?6 l: H& T
  2711. RTS
    : h) U0 l3 _# J% [

  2712. ' z7 z% z: P5 |) O( P" ]/ q
  2713. ;==================================================. Z) m& o- x8 h  n# V, k2 l
  2714. MainLoop;死循环
    ; f7 V/ q: }9 O* |7 u1 X# `
  2715. JMP MainLoop
    & v1 K3 W0 P6 q' E4 ?
  2716. 5 D# B) a. t1 r
  2717. IRQ_SUBPROCESS_JMP = 0, N: v) N, Y3 N& O# P
  2718. ( _; U/ V2 ~7 X( b6 u
  2719. .IF IRQ_SUBPROCESS_JMP* S, p% g) o' D2 }0 M- j+ b! ?* a
  2720. ;==================================================* n2 \0 m' L" o0 |/ C' l! W
  2721. IRQ_Process_0;IRQ处理过程0
    9 \  g( y) z: ]9 q; r3 }' Q4 a

  2722. $ w9 }( Z2 ~  ^+ o1 T( T0 S
  2723. ;15条扫描线后触发IRQ
    9 r: Y/ ]1 R. t% H, u9 u- `
  2724. LDA #15/ z% e1 u% i; q. \+ ]
  2725. STA MMC3_IRQ_LATCH
    5 }6 o' h" i/ D- I0 ?7 E& q3 s

  2726. ! Z" l5 l( e9 R
  2727. ;设置屏幕滚动
    ) ~. I) C  K8 ]
  2728. LDA <Scroll_H
    / d' |4 m  W) P
  2729. STA PPU_SCROLL' E" Y5 _$ M# P5 F8 I
  2730. STA PPU_SCROLL" e3 |# q) ^5 c+ l9 S$ F/ t

  2731. 2 n4 ?4 b% S- R9 w2 U( P
  2732. IRQ_Process_0_End0 M  |5 D  }" f, `3 ]
  2733. INC <IRQ_Process_Index+ O6 X* \+ H# H& Q) S
  2734. JMP IrqProgramEnd' u: |0 h6 s: z! T" U' ?

  2735. 7 ~, t( S+ I% c
  2736. ;==================================================8 c, R* _3 h* c! ?6 ~
  2737. IRQ_Process_1;IRQ处理过程1
    ( K5 q( \3 S: R
  2738. & `7 s* Y) o& M- N9 V# x
  2739. LDA #55- c9 W( G* T$ |, J
  2740. STA MMC3_IRQ_LATCH
    * X8 K( R: b& X+ i

  2741. 0 P" u! s) }0 c' [5 z+ U
  2742. ;设置屏幕滚动
    - O/ s( E! U; S: J1 X0 k1 j
  2743. LDA #$00
    # H5 D; s# T, w; L2 `: `. \, R
  2744. STA PPU_SCROLL
    $ r. h" W3 K5 V5 @
  2745. STA PPU_SCROLL: Z$ V7 Q! V; L3 e/ R# L4 y* _% E
  2746. , Z+ ~3 \9 U' a( |
  2747. INC <IRQ_Process_Index
    - H) h4 f) ]( n1 D
  2748. JMP IrqProgramEnd# N' i+ [& i2 X3 C7 C4 R; K+ r) q

  2749. ) z6 p' [: W' L( y2 C6 n
  2750. ;==================================================
    ! o" \  F& M4 [* Z
  2751. IRQ_Process_2;IRQ处理过程2
    8 [3 y6 h/ }8 @

  2752. + q3 @/ h& m) k) D
  2753. LDA #15
    ' A) Q4 i' N+ {/ q% n1 i
  2754. STA MMC3_IRQ_LATCH! X/ G% I1 U9 @# c- F
  2755. 8 T0 O2 S! b3 S& ?4 X: _2 _
  2756. ;设置屏幕滚动2 P! w- y% b2 y
  2757. LDA #$00
    - I0 f7 C/ @* a3 t& Y- i
  2758. SEC2 d/ A3 e: P. _8 A8 u0 t+ \
  2759. SBC <Scroll_H8 u. z: b3 O' E% X0 L
  2760. STA PPU_SCROLL( {4 [8 M! k4 {; ^' {
  2761. STA PPU_SCROLL
    0 \! J/ K0 G# I% T8 j- a3 N
  2762. 5 K6 s* g- T$ b& C$ z! h! I6 y
  2763. INC <IRQ_Process_Index8 P9 v+ D' q9 k6 r: z
  2764. JMP IrqProgramEnd+ W) _& w# A; _

  2765. 9 ]/ w! T4 {. Y; z2 i
  2766. ;==================================================1 D0 ^) |: z# i2 M. t& Q+ \& T
  2767. IRQ_Process_3;IRQ处理过程3
    0 t; v5 o+ J4 ^, y2 Q1 G

  2768.   G3 i. Q/ k( v  y( S8 O1 Z
  2769. ;设置屏幕滚动4 V+ r9 Y' z$ N4 D9 D
  2770. LDA <Scroll_H! K, u. E) v* I3 T- l3 D( h
  2771. STA PPU_SCROLL: K1 n) f# \+ j$ C
  2772. STA PPU_SCROLL1 Z! D, w& m$ e0 ^, I* f# Y' B9 Y

  2773. ( l- S# n* K1 I
  2774. ;禁用IRQ. |" \2 Z; A: h* x. O# b
  2775. STA MMC3_IRQ_DISABLE
    5 g8 ^; k/ f- M4 i( m4 r6 y
  2776. JMP IrqProgramEnd
    8 u2 _* O$ q0 q: O8 A# t5 c0 I

  2777. 3 i& P. h# [2 W: p
  2778. IrqProcessAddr
    ! I% f7 @4 M- Q7 @3 @2 Q& q7 V0 f. W
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    # z/ j. Y9 t$ g; ^7 y6 S

  2780. ) J9 `" Z6 t) j
  2781. .ENDIF
    2 T/ |( W) t6 g( C
  2782. + a2 Z) l4 x5 B5 t. e" N( C9 ^
  2783. ;==================================================" c! r1 D7 o5 ?! |
  2784. ;IRQ滚动模式常量
    * P7 n7 p; b8 m$ h0 @9 W
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动0 U5 X* {5 l0 D
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    1 a6 a1 e) x) a* e6 t; K/ N. ~2 y
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    # K8 _0 y! E% U. m
  2788. " D2 u6 j6 h6 a) j% X5 W
  2789. ;IRQ扫描线数据
      L- O1 u( }/ s: {( g9 J. W/ g5 m
  2790. IRQ_Scanline_Data1 `4 P; O) n) h' ~9 q5 R* _& g# |
  2791. .DB 8' @, U1 M9 T0 x5 l- k
  2792. .DB 54
    ! z& k4 w: f' h
  2793. .DB 8
    , ]4 S# L& {3 `! k- @
  2794. .DB 00 ;关闭IRQ0 e' D) {: f. B* w# x. i
  2795. ' j  c2 l7 z0 ~# N$ R
  2796. ;IRQ滚动控制模式
    , m. B+ F) |1 y8 G+ Y+ g
  2797. IRQ_Scanline_Mode
      }* B- z- V- ~
  2798. .DB IRQ_SCROLL_MODE_ZERO
    9 m# L/ o3 L. `+ x3 N9 ]/ ^7 p! K* R' C
  2799. .DB IRQ_SCROLL_MODE_ZERO/ a/ o' v1 X2 F, t& n8 f+ E
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    9 `# n' m# [3 c
  2801. .DB IRQ_SCROLL_MODE_LEFT( h2 E3 ]% k. n9 o
  2802. * R' b' u; I- |* O- x
  2803. ;==================================================
    " d* u7 @/ X/ u4 c' b5 b0 y- _
  2804. ;IRQ处理! {+ [1 i5 ?- ~" ^. t' q" X; b
  2805. IRQ_Process$ u2 O) |; r' d% u6 ]( e
  2806. LDX <IRQ_Process_Index
    6 G- f" m" F# Y
  2807. LDA IRQ_Scanline_Data,X2 O: W4 L: y1 f6 a2 Z
  2808. BNE IRQ_Process_Latch4 [' ~: O  \: U
  2809. IRQ_Process_Disable;禁用IRQ
    5 |9 y2 A) I; e2 v9 o9 x
  2810. STA MMC3_IRQ_DISABLE
    - A/ g2 X. D6 P: f; @% B9 y# M
  2811. STA IRQ_Process_Index% L" F6 E' H8 U, m
  2812. BEQ IRQ_Process_Scroll
    8 c! i! a. ~) s: F0 d2 c
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线1 f0 z6 q. a! [) _* B
  2814. STA MMC3_IRQ_LATCH2 s4 Z5 v) W6 J% `/ j4 s- C
  2815. INC <IRQ_Process_Index
    ( a+ d3 R3 U  ?6 B/ {- D0 H/ f7 p* c
  2816. IRQ_Process_Scroll;IRQ滚动控制/ G5 o8 }0 U% [. n
  2817. LDA IRQ_Scanline_Mode,X- V# u# q; ]1 [2 ~, h6 c( j4 t# x' {
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    / y- o8 }; E* W' p$ ?
  2819. BEQ IRQ_Process_Scroll_Left
    2 _$ z: J; D, R- J7 H, i
  2820. CMP #IRQ_SCROLL_MODE_RIGHT) i+ G# S6 k- M8 h, U. L7 p8 L9 `" w
  2821. BEQ IRQ_Process_Scroll_Right% P, e9 M2 i0 L1 _  s* m
  2822. IRQ_Process_Scroll_Zero;不滚动: H1 e1 L: C5 E  G4 E
  2823. LDA #$00; D$ a9 M, L9 U3 u- C- J, s6 g
  2824. STA PPU_SCROLL
    % }3 |3 f& G  W( \& T6 t: Y# r
  2825. STA PPU_SCROLL: y# ]% D" ]3 B% ?
  2826. RTS
    1 s, [7 x2 y) L2 B
  2827. IRQ_Process_Scroll_Left;向左滚动& g2 {6 p3 X: j; W- K
  2828. LDA <Scroll_H
    2 H4 F' \2 [, a; U
  2829. STA PPU_SCROLL, a% n2 _. l- ?& G' S3 c
  2830. STA PPU_SCROLL
    . p  v* ~1 X) H; U1 z- e2 C% p
  2831. RTS' N. y! r( T0 s& A3 G
  2832. IRQ_Process_Scroll_Right;向右滚动0 D- ?# j- [8 `6 D& o6 q  }
  2833. LDA #$00
    . R2 m4 T# B. @) s$ _
  2834. SEC. c( r2 m) r2 T  `) {1 O$ v' K
  2835. SBC <Scroll_H
    ' a# m+ K6 v) `3 R  x. w
  2836. STA PPU_SCROLL
    ) x/ q3 }) i# ^! k& ^- ^
  2837. STA PPU_SCROLL
    6 t( _1 d2 t1 {: a  A5 E
  2838. RTS
    - b5 @6 N( U  d/ Y  H8 i
  2839. 2 P, s% d( m& ^7 f, `( C
  2840. ;==================================================
    1 {5 G% L$ V! B1 h- x2 K
  2841. NmiProgram;Nmi中断处理" H- I) H- F+ I* A. T3 n, e* ]
  2842. PHA; a3 w1 D; _$ N" U& l7 r- {
  2843. TXA" d. l9 @" C+ z9 [
  2844. PHA
    5 A  r" {& V- @% U# m
  2845. TYA& {* [! X5 h1 C2 T5 G
  2846. PHA# Y6 q) w) v! Z  {

  2847. 2 x% L4 O) ]8 A2 G" U
  2848. ;读取清除Vblank标志, 防止重复进入& W+ u" S) w# }& U9 B
  2849. BIT PPU_STATUS
    ) D" @. D* E6 |  l. D
  2850. & L8 T% a/ z" T* B
  2851. ;切换主程序bank- s! b9 F' L1 l' t2 F8 A. U& w
  2852. JSR Switch_Main_Bank4 u- [/ b: }% ^; a( b, k9 ]7 B

  2853. ' d, R6 [8 E# ^% I
  2854. ;Nmi处理( B4 j8 O. g) A) F' p( e2 w
  2855. JSR NmiProcess
    ! D: U) }( q6 P' Q2 r6 [
  2856. 8 z3 i1 V) t- P- ]1 `
  2857. Nmi_Proc_End/ F$ r( A- ^/ i
  2858. PLA# U/ c( n0 r1 r- L: |3 Z
  2859. TAY, K% C7 T" W4 y' u1 L, l
  2860. PLA
    ( H! P& [& \2 @; [' P
  2861. TAX4 u, N- E: A' Z7 c0 a( G* r
  2862. PLA& l3 h0 l- y+ H' ^5 v* G5 D
  2863. RTI
    9 V1 P* p' ^7 o) W3 i/ z! s

  2864. 1 ^7 F- M+ f: d5 |
  2865. ;==================================================, ?  V" X5 h( f3 v! A: S
  2866. ResetProgram;重置中断处理
    4 _) K; n; }; I6 ^5 x, T
  2867. SEI
    3 A: W5 c; |, x, e$ }
  2868. CLD
    ' Z7 o* Y, e  a
  2869. LDA #$00
    7 h4 d$ J0 `) ]: }" }, w  G
  2870. STA PPU_CTRL3 Q( ]3 S, ?/ ?8 H5 v) p6 T
  2871. STA PPU_MASK( h' n% A0 a: _- R) p

  2872. - [- N* d3 f6 \
  2873. ;切换主程序bank5 q& f* f+ X0 y) ^* c7 Z
  2874. JSR Switch_Main_Bank
    0 d) B/ M9 q0 O+ \+ u

  2875. $ b7 X" r  V2 h0 p; v
  2876. ;程序处理开始" l! x) B! P4 Z$ C; j
  2877. JMP ProgramBegin
    4 u# J3 m6 j& q% B) W$ k+ [
  2878. 0 K' o4 l5 E4 z+ @2 n2 R) [
  2879. ;==================================================
    5 ~% L0 C) P: Y; m* o( e5 g
  2880. IrqProgram;Irq中断处理
    - E6 H, ^1 C; W/ X  L. z) ^
  2881. PHA
    0 L: L0 g+ m: {! M
  2882. TXA' b* r0 L% H7 f# D3 {5 s9 A3 K
  2883. PHA
    " J( {. ]7 z0 U/ v* [! J! V
  2884. TYA8 r# o5 }! x! M+ O% F
  2885. PHA
    8 R! p! U1 H3 L8 u

  2886. # u% S, S- I4 b/ T7 ]/ w
  2887. ;关闭IRQ1 A7 s) q+ h$ _8 a0 g
  2888. STA MMC3_IRQ_DISABLE
    3 t* q8 ?: }. i# m1 I
  2889. % U5 ^# K, g( t4 A$ B! E; T  o( o6 ?; [% \
  2890. ;允许下个IRQ触发
    : z$ B1 d3 a$ g7 U$ t6 X
  2891. STA MMC3_IRQ_ENABLE9 I, u* |- z4 J8 m" Y

  2892. ) ~! ?( B" c. j8 m
  2893. .IF IRQ_SUBPROCESS_JMP& t/ a  k$ R1 \

  2894. ) H! ?, c; N, H; }5 J  _
  2895. ;执行IRQ过程+ K1 o& h4 b4 S, x. c
  2896. LDA <Data_L( _7 [. t+ P/ i+ [! B
  2897. PHA. m: j6 Q( g- D4 y2 f
  2898. LDA <Data_H
    6 z; y& j9 W+ g
  2899. PHA+ ]) ^; [/ }! _. y& j2 W
  2900. LDA <IRQ_Process_Index2 k2 U5 Y7 b. K, ~. F
  2901. ASL A9 b5 v1 K7 ^4 R
  2902. TAY& y: J) ]- N/ R% X# Z" b7 G
  2903. LDA IrqProcessAddr,Y
    1 P' k/ U+ E. [; C6 s( j6 }; |
  2904. STA <Data_L
    * h! t% k% W/ k
  2905. INY; U5 j. d) o/ D2 @6 `' H
  2906. LDA IrqProcessAddr,Y8 {) j5 V0 v& ?* A
  2907. STA <Data_H
    1 @% ~# }$ m+ U5 T, u& V* \5 _! F
  2908. JMP [Data_L]8 q# a. x& a( n8 T; W- Z

  2909. ; G7 ^: [3 `- R) L
  2910. .ELSE
    . O. {! ~) a4 @9 v6 ^% X
  2911. % k$ l& x/ @* q" E3 E0 h; Q" Z
  2912. JSR IRQ_Process, o/ h' j, C, K- `- |" A! y

  2913. 6 [, v( z7 p: C( G* f2 s# h1 s
  2914. .ENDIF
    4 }+ Z3 @, Y1 v6 M$ l8 d

  2915. 2 s3 c* P4 j' _( q5 [9 \
  2916. IrqProgramEnd
    * r8 l) r- p( l' L
  2917. .IF IRQ_SUBPROCESS_JMP& N/ R* ^! C4 c6 \+ k7 ?) f
  2918. PLA4 ~" ?( |& J- l3 ~6 ^7 D5 f2 R
  2919. STA <Data_H3 E2 d3 ?5 G5 z# g3 H
  2920. PLA
    % f, C, e3 g, _1 ?' o
  2921. STA <Data_L
    & A/ X5 u; M$ F$ s& a* D
  2922. .ENDIF  a; `4 @: t: }  P4 G
  2923. PLA
    / ?( p- `& h9 }  V3 s
  2924. TAY" n5 f0 n9 K$ ?- S, X" s/ S
  2925. PLA
    ( B; T8 M$ K6 l) _/ V
  2926. TAX2 b" a6 T1 ~# K( ]& o: Y. i5 }0 O
  2927. PLA
      k0 R( U4 a- ~% S, T
  2928. RTI
    ( R& b7 P. |; d0 @' Q6 d% ~( C
  2929. 6 D9 J4 K$ Y3 z0 k" e6 f- a3 k
  2930. .ORG $FFFA, _/ W1 F5 W* X5 Z+ q
  2931. .WORD NmiProgram
    # ?. H' h. i8 Q& G
  2932. .WORD ResetProgram
    6 x( }3 @5 X) H6 W; h
  2933. .WORD IrqProgram
    + k6 K2 E' V" u' G$ y. K  m
  2934. 7 D2 [9 l3 t2 Y& i/ `  _1 O3 |4 L
  2935. .BANK RESET_BANK & BANK_DATA_MASK) G( P# @/ I# X: Q5 ]
  2936. .IF SOUND_BAR_SHOW_ENABLE1 p# X0 L: A$ }" V

  2937. ; {4 S# n9 c+ F4 x  B: t: f4 f! J
  2938. .ORG $FE00
    , v: i- V1 [% w; \
  2939. PHA) p2 h3 z6 @& f( B: P& k
  2940. STY $07BA
    6 I- \! W+ }- T2 F! W' n  O0 F
  2941. LDA #$8D$ {/ C  a% `- }2 L/ K; A5 L
  2942. STA $07BC+ V$ D* V* X* N6 m# v
  2943. TYA
    ! _! N& D( W  j# ^
  2944. CLC
    2 F8 V3 u) y1 L
  2945. ADC #LOW(Sound_Bar)' [' B- ~7 l" W- u5 d
  2946. STA $07BD5 I; [9 ?7 Y. X7 E  K
  2947. LDA #HIGH(Sound_Bar)7 t2 |) q( I8 u0 U: @
  2948. STA $07BE
    9 s  p/ _! T1 P  t- k* V
  2949. LDA #$60
    ; _9 v% d* f4 a& F4 g" M, B
  2950. STA $07BF
    # u* i; V, ^8 Q$ a
  2951. PLA" J6 u6 U  ~& v# W* m/ _
  2952. RTS% J$ N: i3 g  N

  2953. : \1 A7 S/ J( I, P/ I+ P' p/ m
  2954. .ORG $FE20
    - y  r& d5 m$ z- i  i+ l
  2955. STA $07BA0 p# o' I( K3 O0 r! @
  2956. CLC
    9 x6 H( i) F: ]
  2957. ADC #LOW(Sound_Bar)
      @) N" \- u1 C" [
  2958. STA $07BD9 B- w' \6 p; Y! t
  2959. LDA #$8D( e- w# T1 ~1 ~/ @/ c% a( Q5 a
  2960. STA $07BC. N7 x! {$ E, O5 H( T$ d0 z
  2961. LDA #HIGH(Sound_Bar), L1 @! o  D" L8 V
  2962. STA $07BE
      J# F( U9 x8 X) V1 h
  2963. LDA #$609 p+ @! h5 s- I9 q" N
  2964. STA $07BF% ?' R. j% P% B7 ^
  2965. RTS/ [: N0 l( y6 @/ ?1 ~

  2966. 1 a* Z5 j* q5 e
  2967. .ORG $FE40
    / W* \$ z$ Z  `: W) ^
  2968. PHA
    1 l: C8 y; L9 R6 H: @% I
  2969. STY $07F1
    5 ^* }- [8 H6 B4 `! j! O0 b2 p! c
  2970. LDA #$8D
    & U- e0 r7 b  @& y* h1 l
  2971. STA $07F3; M/ a5 @' N6 S2 y( m
  2972. TYA
    & G, ^9 [9 h6 E. g* a9 L: V$ O
  2973. CLC+ u- Z, w7 }8 n. Y7 n/ \4 ?* u
  2974. ADC #LOW(Sound_Bar)9 N" W+ I# T4 [( V8 }  X
  2975. STA $07F4
    # x4 r6 ^7 E- ?  @. j; a
  2976. LDA #HIGH(Sound_Bar)
    $ [3 R9 t$ M* \
  2977. STA $07F53 g! h, [% `" [0 e7 U8 I. b
  2978. LDA #$60( n: p# E; T( Z0 H
  2979. STA $07F6
    1 D% t. C+ x# `/ _: S- L5 ?( [
  2980. PLA  D' F7 ^5 r0 K
  2981. RTS* t. x: V) o6 ]1 a

  2982. 1 `% j" L& V  k' ^$ C% ]2 f6 ]
  2983. .ORG $FE600 @/ v3 b5 M0 f8 y( f- K! @- X/ R( z
  2984. STA $07F1
    " S- X3 S% [6 P7 O. B$ ?! S
  2985. CLC
    ) W4 B% b2 {, O1 T/ p
  2986. ADC #LOW(Sound_Bar)5 h5 ~. }/ o& F7 O* x' e5 A- g
  2987. STA $07F42 D9 A3 c8 `$ y& l
  2988. LDA #$8D" ~. D+ e! q' @2 F
  2989. STA $07F3
    2 K6 f" p/ _' e; }3 m! G' Y+ L
  2990. LDA #HIGH(Sound_Bar)
    * |  V& V& z# A" O! l; F
  2991. STA $07F5
    5 n3 j" q7 p& _5 Q" p$ n* J
  2992. LDA #$60
    : R% j: u! `' e1 {# v
  2993. STA $07F62 r" `& a' V4 K6 b; B9 [1 s3 y
  2994. RTS
    ) [! f+ W' ~2 O: \/ T/ M
  2995. 6 O' q$ V$ I3 L. R+ U5 s
  2996. .ORG $FF40! A8 y/ v5 {6 g8 T% r
  2997. STA $4000
    7 ]$ p. ]$ m- f5 b+ X
  2998. STA Sound_Bar + $00
      @( \4 Y0 B5 ~- f1 u8 p' g5 n
  2999. RTS
    0 ]+ z3 I* m* J, Y; N" S
  3000. 7 K. ^9 O8 {% D2 D2 P- l3 T; E: |. V
  3001. .ORG $FF48* q+ K0 h' J: q& v! Q. `
  3002. STA $4004
    $ o, A0 A8 I5 j' D: p3 B" W
  3003. STA Sound_Bar + $04
    % y' ~6 s7 X4 I1 o: S% R6 j- x5 b: b
  3004. RTS9 f3 n9 ]1 V* ~; F$ |( r7 \

  3005. ! j$ f! P9 N/ D( t8 f5 N  d
  3006. .ORG $FF50+ i5 P; u! _+ _2 |1 v
  3007. STA $4008# T/ s6 ]. b/ G( K
  3008. STA Sound_Bar + $08
    , }8 J. i4 a2 W+ ~9 Z
  3009. RTS
    . \) W: _( T" p# M# R
  3010. ' Q5 o" X+ r$ D4 J8 }
  3011. .ORG $FF58. H) G  L# ~" m: a
  3012. STA $400C
    / l9 x6 M3 T) I, ~) ^  t
  3013. STA Sound_Bar + $0C
    " r% f+ O3 j- @' C* n! T
  3014. RTS% l' f; k+ b7 n* Q1 ^$ E

  3015. 0 U$ N$ k' L3 j: f' ~9 Q
  3016. .ORG $FF604 z; N$ @9 `; Q$ q) m
  3017. STX $40004 X+ V" u5 N& G, {
  3018. STX Sound_Bar + $00* {% g3 Z6 Z' \4 ~4 e( p8 S
  3019. RTS
    : @: x% ?/ R* O7 |$ C+ }6 C' b

  3020. ; O* ]  ~' n2 S" |* R
  3021. .ORG $FF68
    2 S3 [( i$ `4 |# G/ {7 L  P
  3022. STX $4004
    & @* F8 i7 j. U- ?6 @( p
  3023. STX Sound_Bar + $04! g6 n$ E1 H4 z/ b' V# |' V1 t: C+ d
  3024. RTS: P* a% ?9 t" [! x$ z& z- z7 ~
  3025. . @4 a! z: y& j, ^; }  {" H
  3026. .ORG $FF70
    , L1 B! h0 @) e- c( E! ]0 u
  3027. STX $4008
    / n5 f3 q$ ^- j5 M$ P
  3028. STX Sound_Bar + $08' p9 ?, D5 Q3 s6 i! Z, Z1 u
  3029. RTS
    ' |  k" g* U* p2 R" h8 c) a! U, X

  3030. ; |4 q  K& F/ w# x0 a" t
  3031. .ORG $FF78
    1 C% E* a9 `( K& S. j6 M8 I
  3032. STX $400C: A9 X9 \5 J. X5 M* \  G' S
  3033. STX Sound_Bar + $0C
    8 a3 p+ u: D( c7 b
  3034. RTS
    9 U; |. }% H$ e/ I% d
  3035. ; ]6 b3 ^3 z' J0 N$ ]
  3036. .ORG $FF802 q3 a+ d& q+ Z# z
  3037. STY $4000
    1 m9 ], I9 L0 {7 m. o% Z# A
  3038. STY Sound_Bar + $00
    ) t/ a4 ]# z, n  ]
  3039. RTS( g8 O: [& c$ q5 s
  3040. % w& S' H, y3 B0 b6 f
  3041. .ORG $FF88/ `: }( E. P6 y( x* c& f/ p
  3042. STY $4004
    # Y% V$ I7 V  z4 J, O6 q0 @6 E
  3043. STY Sound_Bar + $040 M4 A& Q& A4 H1 b3 e8 p& @4 [5 V+ w
  3044. RTS
    8 y0 l4 a3 `! ~8 K3 {

  3045. 6 R% b- s( n/ I( ^5 y, O: s& f. t
  3046. .ORG $FF90
    ( o& M2 g: Z) X3 T* N& {! ^
  3047. STY $4008
    $ Q! D8 n4 z6 I1 K
  3048. STY Sound_Bar + $08
    % E( o3 L& b' Z& b& F$ Q
  3049. RTS
      [* k2 o7 y; M; e# p! E8 I

  3050. , E  Q; K1 N: S  K1 ^$ H
  3051. .ORG $FF98
    # ^" M+ \1 @. |; C! f% v) ~& Q3 n
  3052. STY $400C9 Q4 m- P; J/ A! F( L3 d
  3053. STY Sound_Bar + $0C7 x: p/ ]3 T- M# T
  3054. RTS
    ; H9 M) W% p0 z- I* s/ O
  3055. * R" [4 g6 E0 I, e# ]  Q3 h9 u  c
  3056. .ORG $FFA0
    $ f7 v1 h+ y. {$ f( q- N
  3057. STA $4000,X
    ( i1 [. ?# q: f# J% s  m# {% {
  3058. STA Sound_Bar + $00,X1 \4 V. J, j+ U( D, s, W
  3059. RTS# o2 ]9 _) Z% t0 e& a% P

  3060. ' b. D& a8 Y/ v. ~( |/ V
  3061. .ORG $FFA87 o5 v, n% b& z% C
  3062. STA $4000,Y
    ' u3 L% D/ P7 R, Z( }
  3063. STA Sound_Bar + $00,Y
    - N% O9 [8 Q% |
  3064. RTS
    ) P* t- P% w% @7 s+ x

  3065. " _6 @8 V* d: q1 L
  3066. .ORG $FFB07 H; K6 b& B$ X- w+ f
  3067. STA $4004,X
    & q3 N1 y5 n/ I0 B( a! v
  3068. STA Sound_Bar + $04,X
    8 `% U: {) S2 A1 t3 h
  3069. RTS0 @- {; G, i6 E' O/ I
  3070. 4 i( e+ a4 t6 S: `
  3071. .ORG $FFB8" c% G6 x' _6 Q3 F* H% ^1 t
  3072. STA $4004,Y
    0 w, V  @  a  s3 ^/ u+ _' K% T
  3073. STA Sound_Bar + $04,Y% s' ~7 r$ y3 K+ A5 k
  3074. RTS
    ( j6 W. @  o9 Z7 P" ]5 _5 B% X
  3075. 2 K' R+ \; O( ~$ m% d! X$ F
  3076. .ORG $FFC0
    3 G9 p' P2 K: v! p$ b" V
  3077. STA $4008,X
    ' |2 _4 W3 F! t( @' u- v
  3078. STA Sound_Bar + $08,X- a4 E: b, |6 h0 Q8 M# h# {+ r* N
  3079. RTS
    + p# A' X+ z1 F( f' n8 p
  3080. 4 X+ Q* Y4 B; a% J; N4 v" {
  3081. .ORG $FFC8
    ! k* ~" g( ?$ y; m
  3082. STA $4008,Y
    6 |, b# V# ]5 W& c! n. [
  3083. STA Sound_Bar + $08,Y- \% r5 q- V9 n
  3084. RTS
    9 @( |( F: O+ P& I$ l, h! H* f

  3085. 7 v* Y. q1 X$ n) {' }/ g4 e' p% Q
  3086. .ORG $FFD0
    + t) p5 N( D8 e* v
  3087. STA $400C,X
    8 ?4 R* a+ q+ M; ^1 l3 d" U; j; ]7 b
  3088. STA Sound_Bar + $0C,X, @  T% |! Q7 [1 W
  3089. RTS* t2 J- T6 {  H0 R# q

  3090. $ p- k( K- z! z
  3091. .ORG $FFD8. O; f& B. ~9 m8 _; G
  3092. STA $400C,Y  j; _5 i4 }6 U  |$ }3 d# I$ U
  3093. STA Sound_Bar + $0C,Y
    8 }, b* {2 l/ n8 g
  3094. RTS" N: g8 \7 Z% }7 U

  3095. - a8 E. m" b2 J+ Z: ?0 M
  3096. .ENDIF
    , z7 P( G1 n  M$ O% L$ l. j
复制代码

$ V. m/ \0 F  b8 C8 {7 h% k
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3270 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-26 02:37 , Processed in 1.138672 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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