EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 3 Z' S6 y% h' {
5 _2 R  {& ]# f- x  h: C
[FC][音乐12 IN 1]
3 H9 @7 ^# }) F/ `* u时间: 2023.07.23! ?4 Q2 @: M- T1 F! G7 g# X0 d
作者: FlameCyclone2 C: @# U' o4 I9 Q5 l+ x7 x
6 t$ W3 [5 h; r& Z  }
收录音乐内容:: G' k8 c; f  W% s% y
1.Raf世界; Q& ?: l0 l& y, ^
2.最终任务7 n/ {5 x8 R, O
3.赤影战士
, C  F  a# V6 l% W9 ]/ K; ?4.双截龙
& ~! s) S3 ]' ]* p/ P$ I5.双截龙2  ^. s$ i/ p! U( m
6.双截龙3
6 G8 `. S; d, e  p7.洛克人  C# O7 p/ l4 l5 z+ s
8.洛克人2' l9 l2 M7 J% T; ^' [7 p) H7 h
9.洛克人3
0 I# L  \1 P1 r10.洛克人4$ v0 R3 Q6 A& [" M' y! N
11.洛克人5& n% d) o! [5 I( E! f+ T  z% E
12.洛克人6
. W) j% @. |1 ]' `+ d2 j2 _& V
' P; I. t: J0 I; A% w操作:
# u. D" W: S$ P9 _上键:         上一个专辑
" h& g+ w. E3 @# G7 t  X下键:         下一个专辑
1 S6 x) ?# r! s, D) K左键:         上一曲
2 n$ o" P6 u( o5 J' G/ ?右键:         下一曲
4 ~5 i  t5 Q6 x* ~8 p" MB/A键:        前10曲/后10曲: W, f- }4 M$ C3 c& l
选择键:       下一页, x  D  d) }5 Y1 H
开始键:       停止/播放
9 {* E$ T2 m3 _9 Q0 g, |' Y' V+ ]3 c* a
http://flamecyclone.ysepan.com/1 c  w5 v. {5 M, g7 m' }7 ^

- v" T6 z; I* `5 h
" C4 I1 H# v/ _: c: ?' b) p
9 x/ \7 Y9 a6 c1 M% Q
9 @" V# N1 {2 _# W
  1. ;[FC音乐][播放器模板]. V0 b$ H( K. G7 F2 w& z! t
  2. ;FlameCyclone 20230710
    * S2 u0 l: {- i; i  d+ H

  3. 5 V, w% e9 v3 _/ g1 Z& a
  4. ;文件头) u1 j+ ]: s. W/ g6 p
  5. ;======================================================================
    / z% g$ U; [! P
  6. .INESPRG 16                                             ;16KB PRG 数量
    . |# N5 ^; q7 v  j0 b3 d5 _. O4 s. F
  7. .INESCHR 1                                               ;8KB CHR 数量
    8 o% N; D+ @1 A7 \" G
  8. .INESMAP 4                                                   ;mapper 4
    ! L2 A% @: N$ w( r% x! P8 I7 y
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直1 Q. G# Y7 U3 |" v& }- e( u
  10. / A' n7 Z6 c# q/ o
  11. ;==================================================
    0 Q) Z6 w# b5 @1 v
  12. SOUND_BAR_SHOW_ENABLE       = 1
    # Z6 P6 _" i$ j1 b
  13. ;==================================================
    , h- m% J5 `6 L3 K$ U
  14. BANK_DATA_MASK              = $1F
    , \% e$ p& ?3 m$ h/ o/ b
  15. CHR_RAM_ENABLE              = 0
    8 T; c+ F8 y+ M: V
  16. IRQ_SCANLINE                = 136
    ) U; p' X3 _% t6 l- F
  17. ;==================================================
    & c9 N8 @: v) @$ g( y; {" P+ X9 u
  18. SOUND_DATA_BANK_00          = $00
    ' b7 i) g! U) U
  19. SOUND_DATA_BANK_01          = $01
      V: g- T; i) b! R
  20. SOUND_DATA_BANK_02          = $02  e7 O* A' O& q+ [
  21. SOUND_DATA_BANK_03          = $03- H# U8 ]# P- |  d1 J- ^$ V
  22. SOUND_DATA_BANK_04          = $04
    & V' v  {1 W$ E4 U. K8 J0 B
  23. SOUND_DATA_BANK_05          = $05
    2 \$ ]% p' V! v3 k8 K. o$ _
  24. SOUND_DATA_BANK_06          = $06, |5 B' s" U* H, k+ d' x1 N' {
  25. SOUND_DATA_BANK_07          = $07
    ! Q  c/ n; s+ r* i3 X5 i
  26. SOUND_DATA_BANK_08          = $081 t* ~7 p0 Q2 X& Q
  27. SOUND_DATA_BANK_09          = $09
    8 Q0 k! H: M) W8 S. K) z, P8 y" q
  28. SOUND_DATA_BANK_0A          = $0A( y% e" c  Z; F1 I5 p
  29. SOUND_DATA_BANK_0B          = $0B
    % F( l# y3 y+ g, k7 c+ G( b
  30. SOUND_DATA_BANK_0C          = $0C5 q1 C: j% k; Q/ C. e9 X5 E
  31. SOUND_DATA_BANK_0D          = $0D3 s' o+ l1 R1 a: a
  32. SOUND_DATA_BANK_0E          = $0E7 c1 m2 o+ ]' Q7 w; s* ?. M
  33. SOUND_DATA_BANK_0F          = $0F% }/ o7 \; K& z+ F

  34.   ~" k! H( M& t. y- s% f
  35. SOUND_DATA_BANK_10          = $108 @/ h, I/ M" x+ h+ Y6 S5 G
  36. SOUND_DATA_BANK_11          = $119 i: a3 l- z6 k# ^% o# K( g9 ]# l
  37. SOUND_DATA_BANK_12          = $12
    ; H4 H4 I- ]; V! g" `( Z
  38. SOUND_DATA_BANK_13          = $13
    ' w$ O- K3 z0 t+ B5 K
  39. SOUND_DATA_BANK_14          = $14* m2 z, \: R6 `* J% c/ x
  40. SOUND_DATA_BANK_15          = $155 p5 }) I) c" i% Q
  41. SOUND_DATA_BANK_16          = $16
    6 v3 ^3 I+ P. f  Q& F9 o
  42. SOUND_DATA_BANK_17          = $17% }- P) n0 j/ Y; j  [  }
  43. SOUND_DATA_BANK_18          = $18( l+ N- x9 l3 Z( D" d  ?" d
  44. SOUND_DATA_BANK_19          = $19
    * w% a+ c9 z1 G$ u' v! X& _
  45. SOUND_DATA_BANK_1A          = $1A8 w  \" ^3 k9 t2 m! \
  46. SOUND_DATA_BANK_1B          = $1B
    4 L( C. f9 G  t& ?0 x% e5 ~! ?
  47. SOUND_DATA_BANK_1C          = $1C
    7 z) i- N- o: k
  48. SOUND_DATA_BANK_1D          = $1D
    2 |4 q# _8 ~) T6 x

  49. 3 x+ s# k6 B- T% Z+ ]! k
  50. SOUND_DATA_BANK_C000        = $1E
    + ~* d' U3 P! n  e/ T2 Z" v& e% E
  51. SOUND_DATA_BANK_E000        = $1F
    5 I% H4 K# B' ^0 z
  52. ;-------------------------------------------------
    + ~: F6 [8 Y% k- \  F, c3 N
  53. CHR_DATA_BANK               = $20: u/ C& ]* W7 V+ C# D7 ~
  54. CHR_DATA_ADDR               = $A000/ w- t. B) t! b% |
  55. ;-------------------------------------------------2 e: q8 P! \, P- C0 G, r
  56. PROGRAM_BANK                = $00! _! R: z' ~: K' M( C0 l
  57. PROGRAM_ADDR                = $8000
    ; D/ l  y- S0 J) K+ i8 ~6 F' g
  58. ;-------------------------------------------------3 a4 @9 l. g4 N" G8 H' |
  59. RESET_BANK                  = $1F, a( q. y  m4 M
  60. RESET_ADDR                  = $FD00
    / o; b3 P; _1 L4 f8 F
  61. / b# e: v2 E0 o) n, d! L
  62. ;==================================================
    & L9 a4 D4 Y/ u- w, Y1 |: y" d
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数# }0 G& B+ c& N4 ]- m4 J
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引! l& _4 B) F# Y
  65. PAGE_SIZE           = 5                     ;每页节目数
      l, p+ [6 ]8 U% P, O" q  Q

  66. % H1 M# G3 n6 m" F% t
  67. ;==================================================
    - K0 l! M/ S" @$ P/ J" I
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    ! b$ q- C$ X2 G, |) ~
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数0 E. I2 ?6 `9 E+ A/ @4 T
  70. .ELSE
    9 \1 n* Q0 z1 W, Z# |, u
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数
    " f" z& Y4 h  k% ~/ ?( a9 G
  72. .ENDIF
    , T8 y- H" U  x

  73. $ G, {' Q4 E5 b3 w; o+ O
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
    ) h3 l2 Z4 @2 A/ V
  75. # b5 J7 J7 |2 W& k: H
  76. ;==================================================" i+ B- s% \7 J2 I# M; \0 Q, V- g
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置
    4 j8 a/ x, l. S
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 20 I. ]# h" L6 V
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;4 J* m, S8 o+ {
  80. ;==================================================
    1 s6 a$ P* i1 ~; m
  81. Caption_Text_Pos    = $204D ;标题文本位置
      U1 g  U) ^# \9 ]: {0 u
  82. Author_Text_Pos     = $2324 ;作者文本位置
    5 _, n7 V) U9 O# M) H& Q
  83. Date_Text_Pos       = $236B ;日期文本位置8 ~& O7 d. R$ v
  84. ;------------------------------/ g$ R% J% A( Z; M; s/ D! r
  85. ;------------------------------- E. q0 r- t6 N" H6 V" t
  86. .IF SOUND_BAR_SHOW_ENABLE3 t/ h* U8 s! O5 t% X) N0 A4 j5 i) N
  87. - d! }) Z0 W2 {9 G# F$ x; N
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    . g8 h' O" m$ j3 o. n7 _7 a: A
  89. Play_Time_Pos       = $22B3 ;播放时间位置
    + R4 t3 k" ?* C8 m1 D8 V* O
  90. Play_State_Pos      = $22F3 ;播放状态位置" q5 A; Z) R9 j# n' x

  91. 0 w) S( e) M! P
  92. .ELSE$ s3 ?6 y, y+ \5 v
  93. * K) H2 M, d' ~2 I6 T; t. r7 s( U
  94. Play_Index_Pos      = $226C ;当前曲目位置
    1 O- L' s) c- |
  95. Play_Time_Pos       = $22AC ;播放时间位置
    1 H0 R' Q! }) I
  96. Play_State_Pos      = $22EC ;播放状态位置
    9 X- I* a% a( h& r+ q
  97. + Q# V6 k" K2 t: X9 s7 D* m5 d, d/ m# i4 ], j
  98. .ENDIF
    ; \+ N1 r- V5 u4 c) i
  99. ;------------------------------
    4 ?0 I/ j8 F! n' B6 s
  100. Track_Name_Pos      = $222B ;曲目文本位置  J9 i! _- U8 e  l  R
  101. ;Track_Name_Pos      = $00 ;曲目文本位置5 F4 q# O( ?8 K. `
  102. Sound_Track_Pos     = $2265 ;声道文本位置9 L8 }& ^5 [' J+ u, J" [
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    + [6 k4 J* ]$ k! q1 U0 T- `
  104. ;==================================================
    $ R7 ]& ]. h: G/ k& J
  105. Scroll_X = $00
    * f4 q! S( V3 D
  106. Scroll_Y = $00
    ! B& x8 d% S& f9 H" B
  107. ;==================================================/ {8 X: o8 v! Y: d) y) k: g
  108. Sound_Ram_Addr_1       = $0100
    3 i+ ^) Z, K) O" J$ X# _
  109. Sound_Ram_Addr_1_Size  = $80# u7 h" y, ?) h  U
  110. Sound_Ram_Addr_2       = $0090
    0 {+ L  F( `/ I% @8 h& t' R! W
  111. Sound_Ram_Addr_2_Size  = $70
    7 N/ O7 [4 W4 M
  112. Sound_Ram_Addr_3       = $0700
    ( z/ ~. P0 Z; k. S5 M, r6 w
  113. Sound_Ram_Addr_3_Size  = $000 C2 W; R; v1 e3 k* O
  114. Sound_Ram_Addr_4       = $0400. A5 g, ]; c" t5 D/ y' k
  115. Sound_Ram_Addr_4_Size  = $00
    . n2 e  {  K: B- J0 G9 Z! ?) n
  116. Sound_Ram_Addr_5       = $0500
    * p! h# z# l9 Z- V
  117. Sound_Ram_Addr_5_Size  = $40( ?! d/ D# Y2 X# ?! \: p* G

  118. 7 D; s- Q" v) w/ A# k, R0 \8 X
  119. OAM_TEMP_ADDR   = $0300' ?; E3 y. U5 o
  120. 7 S9 ^; I$ M5 ]  S/ l
  121. ;==================================================
      j" K" e/ C( H* v/ _) _
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器, O2 n/ k/ D* c4 b0 H0 [
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    8 F: c! x% [* p4 {" ^$ O- \
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位- `5 q+ I, K7 D0 o
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1. u  U1 i( Q/ h7 }6 C* ^# o
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    2 \# v. a  C1 w  S- L+ e
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 8 T: T' z* m5 L) R! `8 C
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    " p3 [3 \- Z0 d  ^: k$ N$ \2 v
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 ) G' p+ O) w, h4 J" j
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    # B/ P" Q0 _8 G+ }+ L! T5 H
  131. APU_STATUS              =   $4015   ;声音通道切换
    % G8 y* @) R" Y- N! W2 v4 q
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通/ C3 b- X7 a) p; J5 N
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通% I/ W1 j+ a5 r; x0 I# y
  134. ;==================================================5 Z- b1 a" J4 H# c9 G
  135. MMC3_BANK_CTRL          =   $8000
    7 l1 \; L( G- q5 B$ W) d
  136. MMC3_BANK_DATA          =   $8001- k% e* f: g. X( y
  137. MMC3_MIRRORING          =   $A000
    3 O5 z7 Q- M8 U# D" d7 y
  138. MMC3_PRG_RAM_PROTECT    =   $A0011 j6 u( x9 k) z6 x: ]) y1 O
  139. MMC3_IRQ_LATCH          =   $C000
    3 f( s- L4 d/ [
  140. MMC3_IRQ_RELOAD         =   $C001# D+ n( v0 O. l& k1 j" x. S2 H5 m( r$ \
  141. MMC3_IRQ_DISABLE        =   $E000. v' a$ Q0 l3 \; c+ s+ g- N
  142. MMC3_IRQ_ENABLE         =   $E001
    . e5 f( o- ?& n

  143. ) m4 n- B4 K+ f  z1 {, z  Z
  144. ;==================================================" Z7 H" j. r0 w) |+ h3 U+ A
  145. PPU_Addr        = $0200
    ( w+ v7 H. ]8 f( [& J/ K- U
  146. Palette_Addr    = $02C00 j. u6 `2 ^6 {9 {0 g
  147. Sound_Bar       = PPU_Addr+$E0" u2 z  j4 X4 w$ [; W) y$ Q
  148. ;==================================================! @% {. s$ v( t
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D
    ( b9 A! @8 F- e& y' ?: S/ {4 Z! D
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$111 K/ n) E, o6 ?9 n6 X5 \; M
  151. PALETTE_UPDATE_MAX      = $2C
    ) t# u! |3 P2 V" H9 [$ c: N
  152. PALETTE_UPDATE_MIN      = $21/ [! R: k7 R* J6 y# o
  153. PALETTE_UPDATE_INTERVAL = 60  n/ _& g4 }8 Z
  154. ;==================================================& v  ~% x0 [$ B! d
  155. Sound_Bar_Cnt       = PPU_Addr+$F0
    6 Y+ r5 }$ d2 ^$ m: o( D6 w3 _
  156. PPU_Cur             = Sound_Bar_Cnt+$02& h+ l0 H' [% P. l2 ?
  157. PPU_Addr_H          = PPU_Cur+$03
    , ?5 C! N9 P0 `
  158. PPU_Addr_L          = PPU_Addr_H+$049 O' J* C0 M- K! [
  159. Screen_Ctrl         = PPU_Addr_L+$011 b7 T8 I. Z" V8 t4 Z
  160. Screen_State        = Screen_Ctrl+$01
    , v: x) k. M! b* k& \2 q; Y9 x- b  a
  161. ;==================================================
    . x3 w2 p# }# L" y$ X0 X# Y8 v
  162. Use_Ram_Begin       = $50
    - q3 I( w9 {! W- X! @* C4 ?
  163. ;==================================================
    9 k4 f5 `' L. |; O# L, z: I  f0 ~& B
  164. JSR_Addr_Op         = Use_Ram_Begin
    1 L' q" c2 g- a9 s: d0 Y3 E$ \
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    - Z  E; x3 S0 E  S! E
  166. JSR_Addr_H          = JSR_Addr_L + $01
    + I3 t2 @" n- d" J8 H# T9 n
  167. JSR_Addr_Rts        = JSR_Addr_H + $010 E2 G1 ?: D, ?0 V+ ]' O1 b
  168. Data_L              = JSR_Addr_Rts + $01" s0 {8 r, Q0 t$ q5 l  m3 C! k- F. [
  169. Data_H              = Data_L + $010 y8 H+ s$ K  n; o6 v/ t  o
  170. Data_Cnt            = Data_H + $01
    - {  C2 l# L& y' ?/ W" N
  171. Data_Buf            = Data_Cnt + $01
    * I! k4 s6 g+ u1 t) F1 c1 o
  172. Nmi_Time_Count      = Data_Buf + $01
    . l+ m/ D2 v* E
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01
    - V) J0 K1 y/ M' b2 X/ `
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    4 j, E+ e4 Z0 e( v+ v/ k" \

  175. 2 I5 G* V$ r0 l7 Q
  176. ;调色板刷新标志+ [  o$ C7 B5 ]: Y) x) |
  177. Palette_Update_Flag = Palette_Wait_Cnt + $016 c3 o" n. f* j7 f

  178. . q0 \' h' U+ s9 x5 r: b! N8 i$ n
  179. ;当前帧文本写入禁用标志7 r$ G4 i! ^4 V& \! W) D* r
  180. Text_Disable_Flag   = Palette_Update_Flag + $01
    % x) W1 ^- J& X: n

  181. & f4 ?7 J, G, y
  182. ;==================================================
    $ Y  [, @0 t9 a( n
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动
    ; |0 ^7 o& Z* f7 U  o0 Q
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条* U8 q8 N5 Y! b1 ^6 c
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间7 u' e& t  n& M7 C
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
      D, l5 Z( b+ W$ m4 ~' x# }
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间
    ) _" Q! n: o  k% c1 i
  188. ;==================================================, N* M- P( U9 S
  189. Key_Keep            = Text_Disable_Flag + 1
    ! K: P* c; P* W* c. O
  190. Key_Once            = Key_Keep + $019 \; ]4 a' g0 _4 ~2 |, K
  191. Key_Kemp            = Key_Once + $01
    9 H! y% F6 V1 f" r$ I, P
  192. Key_Temp            = Key_Kemp + $01, u3 z3 O. P( N$ y, _& t
  193. Key_Getv            = Key_Temp + $01
    , b- S+ z! a. o( z* v' Z
  194. ;==================================================( {6 c6 {1 W& s7 I7 A- s' U7 |5 S
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集* [, ^& Z4 A! u1 p% q
  196. Music_Item_Last     = Music_Item_Cur + $01! M$ [7 R& w# ]4 |$ [0 A* m
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    8 q& K5 n( n* j$ g9 P& F8 ?
  198. Music_Cur           = Music_Total + $01  ;当前曲目
    " z- B" u& C4 _+ e
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目
    3 t# ^4 k4 A% B+ f/ Y6 H# @
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态0 R# Z/ J6 M! D$ T" r# a* u  [- A
  201. ;==================================================- c( n  j* W% _: C+ \1 c
  202. HEX_Data            = Music_Stop_State + $01( G+ c3 V$ P! a; w- g5 t' k
  203. DEC_H               = HEX_Data + $019 z9 C. n2 O- T5 Z/ {5 b% M
  204. DEC_T               = DEC_H + $01
    ! r& K( {" D" d0 g0 c9 U. d
  205. DEC_L               = DEC_T + $01: W% f: R6 t1 l& d9 E
  206. ;==================================================7 V* {% v4 K/ d1 c% o9 Q' J' R' v
  207. Time_S              = DEC_L + $01
    & ?) C' I! d; W# B8 ?9 t
  208. Time_M              = Time_S + $01
    ( ^# F. a! v  E! m, j0 n' d
  209. Time_H              = Time_M + $029 l' s+ }* U( D1 M
  210. Time_Cnt            = Time_H + $03
    * G. k0 `3 S+ _% S( I# U0 C
  211. ( v4 y0 a' u) a! ?- K0 H
  212. ;==================================================3 s& L! e+ D$ T9 o
  213. Music_Bank_8000     = Time_Cnt + 1
    % P6 j: G" D( M. O# [' C& k& D
  214. Music_Bank_A000     = Music_Bank_8000 + 1
    ' w3 K$ v/ E: f$ u
  215. ;==================================================
    5 c; P' @' S  I6 a' C
  216. Scroll_H            = Music_Bank_A000 + 1
      ], y4 \3 w- U6 j& d
  217. Scroll_V            = Scroll_H + 1
    % e' N. G/ v  S6 t' X  H5 Z
  218. IRQ_Process_Index   = Scroll_V + 1
    / X! O, w  V  P
  219. ;--------------------------------------------------
    ( `* G9 M& F6 j0 q* D
  220. Page_Cur            = IRQ_Process_Index + $01: o6 o# n. |$ D0 v6 v
  221. Page_Cur_Index      = Page_Cur + $01  v' A) R$ B) b% n3 A
  222. Page_Cur_Cnt        = Page_Cur_Index + $01
    4 ~: a9 Q2 V* Z; c# y' f
  223. Page_Last           = Page_Cur_Cnt + $01
    2 ?" V' ^( t3 f1 u! N$ \' k8 v
  224. Page_Last_Index     = Page_Last + $01
    + L: [/ d% |+ D- b3 X9 b  Y& y/ A; k
  225. Page_Last_Cnt       = Page_Last_Index + $01# B% j2 ^' Q+ F" w% q( C- j
  226. Use_Ram_End         = Page_Last_Cnt + $01
    , R: b( _4 H- [: B$ y. {* c
  227. ;======================================================================+ T' T# n* p# ?1 @( Z& `* r5 S
  228. ;音乐数据块
    1 ^5 P% O0 c, a6 L* F2 Q9 v6 S+ L
  229. 0 j2 s, ~4 a  ?4 o9 l
  230. .IF SOUND_BAR_SHOW_ENABLE
    4 `& p6 g( |6 m! {3 M& ^2 b
  231. 0 f% r8 O) ^3 T! a. |% l, [
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK8 Y. a6 T4 |) `. m  J0 t% [
  233. .ORG $9000& H8 q" {( c/ e0 V
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    # z) z; ~: \$ E3 L& f

  235. ; B2 k% f6 u* i8 [5 }0 F& q
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK" P3 |9 e) y5 H( y4 u+ N/ F) _- D
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    - v) ?2 |  ^8 |, S5 ?+ y2 X  Q

  238. ; R+ n) r4 E+ e4 ^2 H$ C5 c
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    7 \5 V- _+ Z7 w. V4 Z  T* o
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    ' g+ U- }" B) t/ b

  241. / \3 Z# ?, Q% ]8 d3 e5 H7 M
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK1 T% q- ^# I) C/ L! Q
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"# i2 |- ^3 k0 S: K. o

  244. / N) E# g/ h* q3 X
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK. f, @0 r! d: ^% l* F- L
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
      X, o8 v8 V, u

  247. + f' A) e1 ?) {) V
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    4 ?- A3 @, g) y  W
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"8 y: X, Z% W7 U% a3 @9 t

  250. 2 G5 l' O$ T) z$ q* g* T0 J
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    $ ?" t7 }: ^+ E1 E& B+ Q  ^
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    ) `/ u9 l7 Z, [

  253. 5 E& j9 p& X9 g: T" }: W& D
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK' h# x0 C) u$ _' S- {- K/ X, {
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    % ^' d* O, t+ [' v' G: f

  256. / o9 e7 c* L3 `3 D# z# \# O( s+ ?
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK& ?* @0 d6 ?; r( m1 R" \- l! s
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"8 f7 l6 T- Q5 E- F- |4 r

  259. ; B: ~( F  h" p0 p/ x
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    / M9 G& w9 j! A" x' V
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
    $ y* Z7 F  ^: I1 H
  262. % H, J7 x, ~8 Y! [
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    ) a( [" F7 m- `2 w$ U# u* V  J9 \
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"
    & W6 ?4 J, l$ e
  265. " h+ e# {( `  ]( @! S
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    ; A: f! T* W2 d) C
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"7 I! _4 ?; P2 @2 c' ?0 \/ f
  268. ' k) H( ^" z# r: H+ i
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    8 B, m1 \) i# S0 Y
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    0 H% L, z3 G$ X& i3 l- l

  271. ; G7 f+ N3 Z: |" I  M1 ~# ]4 `
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK  x8 |  N: c' w( I
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"* V3 o4 J. A8 e

  274. ! j0 I) Z6 W4 N# Z( L1 Y# O3 v
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    3 M4 {. U! I( j. C; F
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    9 c. W/ h+ w) R* A4 i) g7 o/ h. C' z

  277. 2 M  I7 X, `; l' f
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK) N$ V/ z; B5 T/ L0 ]7 b
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    . d7 ^' u8 i! W

  280. 6 l' e1 K: s: S2 n( l* R
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK$ |2 z/ j; {" k# g
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"' s! m2 a1 d/ n. _
  283. ' h0 @3 d& J+ _5 E; _, G3 J' U
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK& i/ a  h6 O$ Y+ \7 S
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    1 q6 \( v4 e- o: C

  286. & s8 L$ n: Y# h1 ~& w
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK* z' T9 B! b) y
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"' w. c$ e% O% G1 O! u

  289.   H/ _# W/ C2 `8 B. A
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    ! p; @% Q: u( M) Z* w
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"7 r$ }3 d0 U! h9 b/ S0 ~; x* _
  292. : f+ \2 O: P  A  g* a
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK: }9 l! v8 i% K
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    ; P$ Y6 U% o! G2 p" P+ L

  295. , K" ?: N/ N1 I3 y4 s* M
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK, m+ x7 T7 j& \7 W
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"
    3 n' r: G1 P0 d
  298. ; ]6 u) W7 p' y
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK) j! ~& p; O& p
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"$ e7 K  c  Q, c3 P9 M- m1 o
  301. * w9 X4 g4 ~6 s; R8 h
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    ! ~7 |, X, `. W) I. ?7 v: E" n
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"# y) q+ f* x) `) [) a' e
  304. ( j* ]6 Y/ K+ f( C( e* I4 o
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    6 M" q0 D0 m+ @+ W$ }# F2 }" Y, f
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    ; @2 A5 w' h, `9 O1 }2 m/ W) w' H

  307. 0 J( u# C1 l' g9 S$ ]
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    5 N! L9 X$ h5 k( F$ O, Y: u' e
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"% Y+ e) k' A6 y
  310. , y7 q. o5 _" z" }( Z  s: h
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK& t9 e* @  i- p2 s0 d
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    6 E3 G  L3 [! p4 p  m& c  D& e1 S! d

  313. ; |9 E  I* O& ~, @& s
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    + Y% P) q3 J  u* v
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    ! \7 b; E% t" s6 T9 z# U

  316. $ y; {( h, P  Q2 s
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    % o* o( m9 D. d; `+ m" j. x
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    1 V. ?0 u5 p& i$ e' N. b* t

  319. # s& h) W8 U9 }8 N& z4 \! M
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK# W# e6 T$ C/ [6 m+ b* T3 n
  321. .ORG $D400# J4 B! Z' g' \9 Z( U: R* d9 l
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"/ W* ^/ [' Y) W  j6 e& X

  323. 6 k' D; ?, G4 U: i
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK8 t, m8 T0 _* n" |" X
  325. .ORG $D800: S: G9 z3 _6 `) ]0 y' O
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    # t- u7 {- ]  n% d! ?8 U" z" L
  327. 1 N) U% O7 D% \" G( d

  328. 7 V0 }. z# O  z* `1 Q. V
  329. .ELSE
    - p; P0 F5 i6 C
  330. ; ^) L, R- s$ h" m
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK
    6 `8 r+ d. `- S# z9 V3 E
  332. .ORG $90003 u/ M: ^! c: f' A. s. s
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"
    ' w5 Y9 P+ L# ^2 @' m' ^  l3 N4 D' p8 |

  334. % v& x# \4 n7 L( {2 R
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK% k, p- v5 j1 v" h: Z( a
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"; m8 n' D9 @  w. h0 {$ W' a' a) z0 G0 ]

  337. # K% w, e/ R. G6 m2 [
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    ) ~8 x, b% \7 o# R4 H6 x& s1 l
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    2 c; i" N  u, |: _" E0 R9 P) U+ m

  340. * G2 P3 w' j) b1 y
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK- }+ J; n: w% L; I7 Q
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    5 ^; Q. D# i. r6 e

  343.   H1 C% C* w' l! |! W
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK( |( {+ o3 t8 e
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    7 D8 p) s5 ~" S4 m+ z2 u
  346. % G- ~7 a5 l- [3 l2 N
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK
    & q* ?- J- U  \
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    ( l8 L  v" C0 P" Y1 }% |+ o. _
  349. + U6 |" f: o) x4 N1 ~
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK; f( I- h4 J' f  \
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    - g( [8 W6 O5 }1 N5 d3 Q
  352.   d1 Q) Y3 a  e% {9 B: y
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    % P3 ]; A9 k# A+ ]0 q/ n( n% g
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"0 b, t& A' `; E. o, ^. r  y9 T

  355. * n% W* o. s7 j8 X+ \
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK2 k  E& B/ F+ ~/ H6 j( @0 [
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    - R5 M$ j) m7 ?: w6 Z- a
  358. ' c' A/ O0 Y5 X, Z# E  Y3 H5 G% f* V7 }
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    # h& ~6 i% }" Q; q& a- P
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"
    ' g" Z6 T5 w8 d2 o$ P

  361. 0 ~% G# k, z+ H5 \& u! N
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    $ ?; N2 E% o, B0 ], E) y: V: ^" g" ]
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"+ @8 ~& e. _; T! \2 ^
  364.   W7 G5 {0 Y  |7 z
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    2 f7 b& K% U# Z0 F
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank") Y) k3 G1 N0 Q& Z: @3 b, \& c

  367. 9 s9 ?- L2 E, Z
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK& j0 S6 O0 F! S0 E% u% a
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"; }/ c# k9 E$ Q3 ?
  370. + _# B9 u0 e+ s0 |; ^2 h
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    , r5 d/ e4 y% \  ]
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"
    - p3 G9 v. Z# ^5 |

  373. 1 m4 ]. k6 d: `7 A7 q9 F  j6 a
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    - D' i' f2 A7 o3 E
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    9 z& g1 k, r' D5 A2 }1 o% H

  376. 8 w0 |, t$ x$ H/ i, a
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
      y$ [# N' k  Q7 n
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    4 y, W2 e  R' E$ o$ D$ P
  379. % r# h" {% J4 A
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    4 M; I7 T) W  r6 C) F
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"! A) }( }# r/ J8 m1 A8 I
  382. 3 U; m- M- G1 g3 u7 j; d) ~
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK' k  j2 A+ J* q
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    / j% j: [" A3 w* {, N! T

  385. 7 p" r* F% M( c! U
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK  }5 m+ b$ \8 l7 `: \5 N6 C9 ~
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank", @! T! X7 ]) m& a2 E4 a
  388. # E" J" w) T% I$ g
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    " V$ i: ?( h3 d
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"0 t) x6 H: G) ^+ ?( d

  391. 8 J/ |& D& i. F" k3 B( P
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
    / W6 S  q9 u& @7 ~4 Y1 e
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"4 r3 }+ h! U2 b' {8 ?! T

  394. 6 I9 g+ d4 E* F4 `$ i
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK4 J$ U* N: Y* E: J8 e
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"
    . V1 L) |6 I! S3 D+ F; s2 n, w* t, C
  397. ! M+ I5 `( y1 M
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    # R% L3 f% ~/ A  s
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"
    & p. [  J7 k7 m. E& o
  400. * f: k" A7 a% S+ D3 i
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK, ^' J; T5 q0 R! R5 R
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    1 T3 P' ?" `1 |2 _) ~. j4 c& F
  403. ) |9 N7 W4 Y* b! @: `% }  u4 h+ _
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    ! M' k2 }6 ^* Y% i. G1 C5 J, H/ q
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"( n1 H- J; w2 E7 u

  406. $ ?6 m9 f: l' |! {
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK$ z/ F/ ^" {, E+ m
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    / \; c5 b* Z$ s3 c% X) W+ K- {
  409. 8 V" v9 ~3 s9 v7 e4 J  F: R/ b3 \* O
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK2 c' e1 g( v! s) r0 w) N$ T- y
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"5 [2 K' h+ e5 \& x- E
  412. + q; @) x- m% {4 n4 O
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    % p" _) I  q: W
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    4 V% ^& A; N  Y3 I" X2 s$ G0 ]% O

  415. 8 W4 @* A6 m6 h  u0 X% o6 b6 S
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    " h5 K# t/ j# d$ P# z& |7 F
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    ! ~2 y1 X4 h! T# o, j
  418. 8 s. K, o! {4 g& t
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    0 q# N  o$ V/ g5 a1 J1 T; J+ }
  420. .ORG $D400' N) I3 ~. j( L' J  G! P
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"  A/ o1 _" h3 z5 X2 W7 u

  422. 0 D) K5 a  ~: Z! F! v
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    : p( u4 |8 D. p4 A' s
  424. .ORG $D800
    6 u  h/ H7 ]  z9 K  t
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    ; P0 o: K; V; u8 b
  426. - P1 j! t" j4 M# s( {
  427. .ENDIF- _% \* b: c$ x
  428. ( ~. p, M+ s; F/ W5 S; E* i8 j
  429. ;CHR图形数据4 Z7 r- e5 k: ?. E
  430. ;======================================================================: x6 ~) f# k4 \+ n$ ?) n9 M' p9 d
  431. .BANK CHR_DATA_BANK
    9 L3 x1 `3 R/ f) {& C6 b8 U
  432. .INCBIN "chr_bank/chr_data.chr"
    * \' L! ^/ X* M4 a
  433. , s3 h. F1 Z" W! C6 y
  434. ;======================================================================
    + A  D+ ]; ?* o) P! T9 q
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK9 ?  `1 d1 A' U) T! p" r
  436. .ORG PROGRAM_ADDR" R6 c1 H. v  f, k' w/ T

  437. ) m0 ?# U  n- r9 O# }
  438. ;==================================================
    8 ^% o" l- p% l. m, `1 S1 J
  439. NmiProcess* X, g0 u% d$ t% q) b

  440. 6 w8 D. L8 x5 T  J+ W0 R
  441. ;关闭屏幕控制
    8 r! B3 \/ U7 `0 ~/ W' _
  442. LDA #$007 ~) S7 U% g5 b: h+ a
  443. STA PPU_CTRL# q( R3 P  o% s! J( J2 A

  444. % X: t/ ?& b. ]: y6 r) j/ v
  445. ;没播放音乐就不需要触发IRQ
    ' g) a0 V; F% c5 p7 C# q/ o
  446. LDA <Music_Stop_State& {- X0 k/ ^4 q) Q
  447. BNE NmiNormal
    / p. @1 s# W  g8 b. i! u

  448. % P4 L* t. N  p+ A/ b( g9 W: f
  449. ;重置IRQ索引
    5 M2 s) l; `: f% w
  450. LDA #$00
    - ~, W9 Y, f1 _
  451. STA <IRQ_Process_Index
    ; n% T( l) U6 o4 }) R1 Q' w7 F
  452. % r3 B: v7 g! o5 `* ^* n) Q* k8 \
  453. ;时间秒数为空则跳过
    ) p7 A/ u7 [: {
  454. LDA <Time_H6 V6 R1 u: n1 R& Z+ l
  455. ORA <Time_M
    ( \* l+ x, m2 B- U% C$ o
  456. ORA <Time_S
    ) l* g( Y% D$ v) u5 F& L
  457. BEQ EnableFirstIrq
    $ y' K% C+ L1 [7 K

  458. 3 Y3 K8 f' R; Q+ P1 [. M* b/ q5 z
  459. INC <Scroll_H
      `* Z5 T  j3 u& |
  460. ) a/ g1 Y; J1 N1 P7 k" N
  461. EnableFirstIrq / C8 U( ?0 C. R- X7 j) g4 q1 y
  462. ;80条扫描线后触发IRQ7 f. n" G/ G* s/ n3 w7 q% I0 h
  463. LDA #IRQ_SCANLINE& A8 \2 G# U, I9 J. X& J
  464. STA MMC3_IRQ_LATCH. u1 ^1 d/ y  P
  465. STA MMC3_IRQ_RELOAD; P9 z% V% f- I3 |; A
  466. STA MMC3_IRQ_ENABLE
    * |3 E! J/ W8 K/ j. a
  467. CLI
    % G$ S4 X/ E. e- s3 C

  468. # |% H+ R6 {. f9 J
  469. NmiNormal! w% @- A3 J, K; S- H* L
  470. % {, n8 Q1 Z% Y5 g6 z' R2 q: _& d7 t
  471. ;处理PPU图像
    ( W) `! }6 v1 K& O3 B$ w& L
  472. JSR PPU_Proc- j9 ?1 a# e2 v1 O/ i" M

  473. 4 H. g" \' r- n0 ^  v; y  ?# @
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化), F; S4 ]) l# m9 G+ j8 \9 D7 \
  475. LDA PPU_STATUS; E! S7 }2 p" }5 W
  476. ;LDA #$00
    $ h5 [, \2 ]% F2 u- [( ?2 ?0 v( U" V6 C5 A
  477. ;STA PPU_OAM_ADDR
    ! g  ?7 f9 T' r5 D: [
  478. LDA #OAM_TEMP_ADDR / $0100* y% u6 U( r; O9 ^; N9 E
  479. STA OAM_DMA, E8 f7 t! ^2 s) p: R1 V

  480. 7 a2 ^  c- a9 |6 `6 V
  481. ;启用NMI中断1 @- P+ z5 z8 t6 u" `$ N7 X+ [9 O
  482. LDA Screen_Ctrl
    . b, C& x+ R+ O3 U9 J* f
  483. STA PPU_CTRL1 K% @8 v/ b- U7 P, K* _3 b9 ^

  484. $ ~( R) x( |9 B2 J' d7 `$ }
  485. LDA <Text_Disable_Flag! U$ ~, J9 h; a* u+ Z
  486. AND #TEXT_DISABLE_RAM
    - s5 z" S9 l" s% A0 u7 b
  487. BNE Nmi_Sound_Play
    6 x9 \1 t0 \5 [5 j0 l$ g
  488. % I8 b% V! D0 A$ ?, A8 q! ]
  489. ;处理手柄输入
    1 V/ p* ?. Q5 ]) W' u0 [
  490. JSR Key_Proc
    4 ]+ S8 n6 A/ e! y. P

  491. 3 \+ F4 R7 R3 m% k
  492. ;切换音乐(手柄触发)! @5 t* U& h/ o6 P0 z: y" E8 v3 m7 ]
  493. LDA <Time_Wait_Cnt; e  {# Y# {& j
  494. BNE Nmi_Cursor_Arrow
    1 m4 _' m  C: R4 {0 |0 ^
  495. JSR Change_Select_Item
    7 \: @, h, m) W" U4 c- \

  496. 9 Y- L1 D9 j( |
  497. Nmi_Cursor_Arrow+ g0 @9 `$ U/ F! n' \

  498. ) H; L2 t" b- e8 E7 H" H$ C
  499. ;处理光标箭头( o; z1 O  G* v+ @& Y8 q+ s
  500. JSR Show_Arrow2 c0 c" n& r  l& b& B

  501. 3 i4 U% e6 _1 x& g
  502. ;更新调色板' @! V. X0 \* O+ R3 ~# a( M6 a
  503. JSR Update_Palette_Data% B# _" L% _, A

  504. 5 o5 h& r4 Q$ f1 h9 h( z) _
  505. ;显示时间(缓冲)
    1 [' N; r4 B/ k0 o4 v- ?
  506. JSR Time_Show. R. K! z, @' u& ~. g, n8 {( a
  507. 5 e* h: Z  J( O$ d0 H0 v2 Y
  508. ;音乐显示(缓冲)/ p2 E- B; d7 L9 k
  509. .IF SOUND_BAR_SHOW_ENABLE6 ~# k9 k: Y  H4 B
  510. JSR Music_Vision) b! X7 t6 K$ h+ ?# c
  511. .ENDIF- L5 K6 e" V# [. o6 t  G% k

  512. ( t% K: V7 E7 v2 ^. F4 ?. a# E
  513. Nmi_Sound_Play  X/ L+ E9 |2 _
  514. ;播放声音5 u) J, y# o& U9 Q7 D9 [
  515. LDA <Music_Stop_State
    6 `% J# I0 ~, E4 @
  516. BNE Nmi_Time_Wait_Set5 q6 {8 X5 @- Q! P- X
  517. JSR Sound_Play_Proc
    ! j# w& `# L3 o- L6 _! z
  518. 3 o/ R! s% [9 J
  519. ;播放计时
      a! s# ]% U2 e3 W& v
  520. JSR Time_Count' C4 I2 y2 |( F# a. `
  521. $ j# h  _5 G3 p8 ~' ]: a
  522. Nmi_Time_Wait_Set
    ( _# j6 S3 O: O
  523. LDA <Time_Wait_Cnt
    - E7 P4 Y' f" `* k' i. L
  524. BEQ NmiNormalProcessEnd4 B7 z# P1 F3 U2 y0 Y
  525. DEC <Time_Wait_Cnt( o  u# K- y0 h, @$ G3 Z
  526. NmiNormalProcessEnd0 u: `- t& J  a3 Q3 x; O! n3 N

  527. ' [4 W, h% Q. S( D2 f  c
  528. INC <Nmi_Time_Count9 h* b4 j" E7 p/ ^% q6 W

  529. / h' H6 T! w5 I6 m
  530. RTS
    + W9 C7 n# O) E8 d0 E
  531. + ~" c9 r$ \9 g$ e
  532. ;==================================================0 E2 I+ y# u. r+ Z1 |
  533. Init_MMC3
    + h- M1 G3 Q" c! X$ x
  534. ;==============================( v2 O3 C3 Z/ B3 C
  535. ;禁用IRQ9 L' I$ H; A1 ~: C: E
  536. STA MMC3_IRQ_DISABLE* p* Q8 {# N4 V9 V2 I" O

  537. ( h3 x# q/ D' S5 G: p) J9 R% n
  538. ;水平镜像
    / B- P6 s( t7 M" U2 z4 y( T
  539. LDA #$01
    & d& j+ U" O& n7 K! J# N9 L
  540. STA MMC3_MIRRORING
    / i  Q1 J5 m  t, M

  541. # ?$ u  y4 l& h$ f3 c8 U! W/ f
  542. ;初始化图形bank8 s) R( ^- c7 I$ P
  543. JSR Init_MMC3_Chr_Bank1 l+ ^! l, _. O0 X

  544. ( W" E+ {* C) R) Z4 t  y
  545. RTS" N" \/ n# K1 Q
  546. ;==================================================
    : |# H: \# h9 R2 V  }* j
  547. ProgramBegin;主程序; v6 }  ~+ y" X4 w& @' d
  548. LDA #$00
    : _; |1 ?4 b  h4 R' z+ Q; B
  549. STA PPU_CTRL
    6 g% X0 \% r; J  n3 S1 p
  550. LDA #$00  ]# _8 B# o. [' n( F& |
  551. STA PPU_STATUS3 t) H# [+ u- u( ]7 d& |
  552. STA PPU_MASK
    ! b% m* R- f* L" e  f( d. }8 v; e
  553. STA JOY2_FRAME/ O% o$ D( y. k7 }* n% V

  554. - X0 E" n2 P' }+ d& T6 X+ r
  555. STA PPU_SCROLL& W  K- K" f  d# c
  556. STA PPU_SCROLL( Y* d; }6 Y- G
  557. ; ]. E$ Q: r! W
  558. ;==================================================
    7 L# b( z9 c. `4 N$ r) O
  559. LDX #$FF/ f3 c* T$ X' }. J
  560. TXS" o' f6 w# g" v' v: e

  561. / h, r/ W5 L" `. O6 b! j
  562. JSR Init_MMC3
    . ]! y" Q- s2 Y: W
  563. 2 U+ C  _2 Q  }  l
  564. LDX #$02% U0 Z  i1 z6 n* F% |1 l4 y
  565. Check1
    * m- g7 D! [2 z, q4 D2 _( d
  566. BIT PPU_STATUS; T4 d' [' U" \" V
  567. BPL Check1
    / W! F8 B2 f7 _( h1 ^
  568. Check2
    : \# i) I. q8 }1 i) S# p4 u5 c. n
  569. BIT PPU_STATUS; U: L2 [& k" J+ Y% x" ?
  570. BMI Check2
    7 J5 m. O$ X$ q; Q* ~6 P2 W5 f' d
  571. 7 u% o  S7 {4 D
  572. LDA #$0F
    - ~$ E$ |- Q6 E: k
  573. STA APU_STATUS
    1 `' b$ [" e1 r" E
  574. LDA #$C0' j, p$ W" u5 z0 I" c
  575. STA JOY2_FRAME
    + j" d& ~# ^& D7 a2 [( y
  576. , L$ D+ \% Y1 {- C( u
  577. LDA PPU_STATUS/ b* U- `* d2 W( Y- T( A7 b9 P
  578. LDA #$100 _" n  c7 J% C7 I4 k
  579. TAX& B2 E8 g* u0 h; d' P
  580. Check3) b. p. s1 i. q" }' [4 a* \( {$ w
  581. STA PPU_ADDRESS& U' N& X. g; _$ h0 f; [& v6 h6 L, B
  582. STA PPU_ADDRESS5 [8 g. w+ {! w* [4 N7 g8 `
  583. EOR #$00
    : Y5 E" q* t9 H$ G
  584. DEX
    6 M- G) P# `/ c; W, i& y+ V
  585. BNE Check3
    / q! |2 G8 @' ~" O4 a9 Y
  586. ;==============================4 d% ^% w: j7 `
  587. ;调色板清空
    ) X- t5 Y# l: c, U- s' ~0 b
  588. LDA PPU_STATUS
    9 E% T+ S, F, f/ X
  589. LDA #$3F
    + d. t8 ~# Y/ |4 L, `
  590. STA PPU_ADDRESS) ?: g! x' x' r3 V  ]
  591. LDA #$00
    - U; ^8 O" O: K4 [2 _* f, ?
  592. STA PPU_ADDRESS
    / @0 D0 i* g  }: \# o4 g
  593. LDA #$0F
    + }8 G; @) W8 C6 C
  594. Palette_Clear
    7 o: r7 q* {- l0 Y+ |+ X
  595. STA PPU_DATA4 j( K/ |, z( B
  596. INX- y, N6 x5 y( B9 y+ y
  597. CPX #$20
    & G! s5 P7 y2 h0 O4 e  o) K/ K
  598. BCC Palette_Clear
    % k1 y9 p4 `! F
  599. LDA #$00& a% ^/ b0 S8 y' E; X
  600. STA APU_STATUS9 p( M' ~" n- F3 q

  601.   W" ^8 h8 D: W' d
  602. ;==============================
      M9 L5 ]* c6 A' m
  603. ;RAM初始化
    ( {. B  _. [2 A3 @: R, b7 J
  604. RAM_Clear_All
    : w1 n. n8 g$ a7 f% T
  605. LDY #$00
      X$ B# `/ m' N" @% n* ]
  606. LDX #$082 o/ u: ]* c3 _  G8 Z) Q" ~0 o& o0 T
  607. LDA #$00( ^+ S0 z8 `8 C. u
  608. STA <$00; Z$ Y% b$ O! N, F: e- B6 z
  609. STA <$01
    1 y' {* V$ ~0 w
  610. RAM_Clear_All_Start
    , I* U7 H% C2 i2 x* T. U: n
  611. STA [$00],Y+ Q% q( Q4 L4 V3 M; ?1 z9 y  q
  612. INY* o% b; E& N$ [2 S) }. z$ u
  613. BNE RAM_Clear_All_Start
      @" A. m9 ~, K
  614. INC <$01
    / G  o4 B( Z; r( R0 _/ I+ u6 _
  615. DEX+ Q/ E3 _5 y& i# t$ J% m- S
  616. BNE RAM_Clear_All_Start5 D. X- w; i+ ?/ W# j

  617. ; f) A) z. W& Z: d& `/ r
  618. JSR VramClear) q1 _+ L9 Z! j4 M; j# M
  619. JSR VramInit
    ( h- c' r1 y; I4 d2 ^0 M8 [- Q
  620. JSR OAM_Ram_Init
    2 d7 q. H0 Z0 ~: p0 R
  621. JSR Init_Palette_Addr
    * o0 X9 P- e7 N9 O" u" X- y3 }: g
  622. / q2 P$ D" o8 u0 A5 C
  623. LDA #$FF
    / A7 |& W7 j9 B, U; `9 d
  624. STA Use_Ram_End! ^8 B* [" l7 B9 J& f0 g& j
  625. ;==============================
    8 o! Q8 f, D( ]4 L$ ^
  626. ;初始化背景调色板
    9 w- L) i6 A' e$ ]5 c7 z
  627. JSR Set_Palette_Color! M) V" X2 s7 s) g, @4 M
  628. JSR Set_NameTable_Attributes; y% z+ Q, Z  y) ?8 O
  629. - D2 U- w. w5 l# Q' _% e
  630. LDA #$00' @: j! X1 M  e" D) U; z4 k
  631. STA PPU_OAM_ADDR9 R5 |$ W. g! j+ r& d" C! V
  632. LDA #OAM_TEMP_ADDR / $0100
    % _6 p/ m; ]; _- ]
  633. STA OAM_DMA! V0 t3 ^) |9 O( G8 `( c
  634. & u3 B4 w3 h0 @, a3 S! _, Z
  635. JSR Sound_Reset_Proc$ K  H+ |& y/ r4 K0 {# [6 D+ T
  636. JSR Set_Sound_Total$ r1 a1 b9 s* L4 M5 J+ m! X

  637. 4 _' _( A/ m) C
  638. Init_Start_Music: Y6 n% {* u* V' c
  639. LDX #$00& N  z$ ~9 G; |/ u7 @( x
  640. Init_Start_Music_Write& ?8 V$ F# O9 O  v! Z5 `
  641. LDA Sound_Start_Port,X. k6 `( l  |& N0 e- D$ g6 }( O) i
  642. STA <Music_Cur,X* p' T$ K+ \, ]& P$ n
  643. INX
    / l$ t+ ~0 `- b4 g0 A
  644. CPX #ITEM_MAX_SIZE* d" R6 l8 l! H( Y; Z
  645. BCC Init_Start_Music_Write
    + X" \6 w  A, H: `
  646. $ r2 [- N' ?, o1 \3 M- a
  647. JSR Show_Music_Text" @" K+ U1 h* K

  648. 4 j+ e( A* T; Y. [! i4 e0 q  E; U
  649. .IF SOUND_BAR_SHOW_ENABLE
    7 G1 |9 d+ q3 l3 o9 U3 Y
  650. JSR Sound_Bar_Text_Set# ?( k- `: H; E* @8 W9 @+ ~
  651. .ENDIF; U' Q3 R! u" o2 N; [

  652. 0 [! i% r+ ^! D; x
  653. .IF Track_Name_Pos
    0 E9 p* W" q/ E& m1 J" G
  654. JSR Show_Track_Info% Q" I* [" m: B. s6 \
  655. .ENDIF
    - a. b1 x4 z! A  r; I! Z7 j

  656. 2 u0 X" R2 Z2 t- L( F
  657. JSR PPU_Proc; S4 {) z& A( L

  658. 4 ]7 I+ D' f8 |% e8 Z/ {
  659. ;==================================================
    % k' {3 z' y( x5 f% T* K9 k" n
  660. ;音乐bank初始化
    , }5 k+ X, g5 B
  661. JSR Init_Sound_Bank
    $ g1 A: t& z7 Z5 ?' q% B
  662. 8 j$ t& V# g9 I1 Z( N1 \
  663. JSR Music_Show
    9 G4 l8 x6 L# U: ?8 U: x9 ]4 [3 k7 w
  664. JSR Time_Show
    ( f, ?1 c! e) D# Y4 U) }- `; M$ ?
  665. JSR Music_State_Show
    5 U* E! [$ N7 L) ~6 h
  666. JSR Time_Delay
    5 q: z" Q9 V4 F1 ]
  667. - L/ a9 Z6 q) v+ ^3 t. Q
  668. LDA #$01
    . w3 U& C3 ]5 q9 g$ c6 T4 ?6 Q. J
  669. STA <Music_Stop_State
    ; {& L& Z  F/ r- A
  670. ' X5 d. {  ]3 |: E1 ^
  671. LDA #$88, B3 `0 p- A! u) U) M' Z
  672. STA Screen_Ctrl7 R( @  l$ ~) s/ T+ T7 O7 L: J5 q
  673. STA PPU_CTRL  t3 N, `# z5 a7 Z; A

  674. ! N8 e% |0 n( ?4 ~# R
  675. JSR Show_Page_Text
    * c+ s7 A! r2 L' E% b+ K6 N) X

  676. + I2 q: @' V- B
  677. LDA #$10  X% s, L2 r# M: Q" [
  678. STA <Time_Wait_Cnt+ f( b( U# u8 o* T. z+ _
  679. " [& o+ n" Z5 B, B) \# @2 m
  680. Wait_Time_Over8 D: l  C2 o) C6 s+ C: l! c
  681. LDA <Time_Wait_Cnt
    $ ^/ W1 E& r# Q' c1 |9 }
  682. BNE Wait_Time_Over+ f4 ]7 o3 g$ l6 @0 {2 i
  683. 0 R3 ^8 W6 p7 g2 _2 Y( ]
  684. JSR Show_Arrow
    2 B9 ^* L/ z; C; }( q2 H7 a
  685. LDA #OAM_TEMP_ADDR / $0100
    2 r, i/ Z8 b, f: k5 c
  686. STA OAM_DMA
    % a% H# Y$ x2 L

  687. . @" |; g& P0 v2 c& ^  C
  688. LDA #$1E
    $ }7 R% ~' Z% E2 m1 Z+ g
  689. STA Screen_State
    2 ?' D/ ^- a& }8 D) f( s3 Y0 c
  690. * u: Z" s6 l  u3 U2 q9 Y
  691. LDX <Music_Item_Cur
    1 L' k# @+ P" `2 ^  b6 n; e
  692. LDA <Music_Cur,X
    2 @: O' V$ u9 p3 v* y% j
  693. JSR Sound_Init_Proc
    $ @* S3 i+ j3 A! f
  694. , B% V/ ~  ^) J* j) s
  695. CLI2 \4 ~% u1 |7 K" c% j) |2 q
  696. JMP MainLoop
    * g. F" c5 [2 P

  697.   |1 w; d4 z( A" k2 J: D" K3 ~9 t$ M' L
  698. ;==============================
    # v$ ?9 X3 k' u' P
  699. Time_Delay;延时等待3 R0 |8 {/ O! N% `* H& F! u- \; W
  700. LDA PPU_STATUS5 c# f( e% g9 S9 n- T0 P
  701. BPL Time_Delay
    ' i  B7 Y5 }6 h; ^
  702. RTS0 J# H$ {; O* N: `

  703. ) D9 _( _% j/ U+ i
  704. ;==============================
    5 H# Q: x+ H7 e
  705. OAM_Ram_Init;初始化精灵内存  u. P2 ?/ B1 A1 [4 d- c5 Q
  706. LDX #$00
    6 B7 L: g) a( X; M8 j1 W" P+ d
  707. OAM_Ram_Init_Write
    ; W" \8 |- V1 r8 N0 Z  P
  708. LDA #$F8
    ' g% t% K' h% J! Q% y
  709. STA OAM_TEMP_ADDR,X- e3 @4 t( m& z& b# z) q% `
  710. INX
    1 M1 ]( o- h& x( D. V
  711. LDA #$F8
    7 @5 P8 j! d4 m* W
  712. STA OAM_TEMP_ADDR,X5 C5 V3 K# L, {8 X5 N6 E- w# y3 M
  713. INX
    / _* |6 K- A5 N& v
  714. LDA #$00
    9 S! [$ ?9 c2 f+ b. T" r
  715. STA OAM_TEMP_ADDR,X# a( e' k, k4 Y+ S
  716. INX7 S0 z7 t* Z+ u
  717. LDA #$F87 f. m$ M! O& s# z+ M
  718. STA OAM_TEMP_ADDR,X$ x5 M) m9 D: \0 ~; @+ r
  719. INX& e  E: I5 D' ?! I
  720. BNE OAM_Ram_Init_Write- r. P+ i1 ~7 }
  721. RTS
    ) P' s. S& ]( P. ]) U9 C
  722. 7 c) [8 O5 Z4 ]+ F# K: R
  723. ;==============================
    * |2 v+ I( l( A4 `+ f; p5 j
  724. VramClear;初始化图形内存
    3 n# p8 ?& s, `! H( u
  725. LDA #$20! a2 U7 e9 y6 l8 r5 x$ `+ z
  726. STA PPU_ADDRESS/ H9 ~7 f+ r- z7 g  i( a5 V
  727. LDA #$00) f+ d7 f9 b* v2 T* V3 H9 _; w
  728. STA PPU_ADDRESS
      G& J, X" q9 d) o/ U
  729. LDA #$00
    ! G$ `* R7 T+ h) {
  730. LDY #$00
    # D& t5 y& g% U' O7 ~! ~) F
  731. LDX #$10
    ' t: ~2 S0 q% }) Z: T) I3 p0 [, J' J
  732. VramClearWrite9 a7 A# {  l- M# I9 W5 c5 M
  733. STA PPU_DATA
    6 F% ?3 K& Z7 a* p( z% @
  734. INY
    6 X8 X8 l% k$ W3 w
  735. BNE VramClearWrite! p1 @( s) P' X( I4 ^
  736. DEX
    ! _& p- F  k( C' D
  737. BNE VramClearWrite* h7 l2 K1 C4 K; z7 t
  738. RTS. R3 z6 T8 b2 F- ~( A+ _

  739. 5 P: k: A& c! k; l5 m
  740. ;==================================================" @- M2 Y  R# f9 U
  741. ;设置MMC3图像bank
    5 g2 Y7 T7 h/ X. K
  742. Init_MMC3_Chr_Bank% x4 x# Q6 n8 o, V
  743. LDX #$05! ^2 ?  N  r: E9 L8 Y
  744. Init_MMC3_Chr_Bank_Write( f. X  E! v/ E+ c, D0 i
  745. STX MMC3_BANK_CTRL- i0 }7 q7 {- z( T3 `! K
  746. LDA MMC3_Chr_Bank_Data,X; I- r  w  ?5 B- H
  747. STA MMC3_BANK_DATA
    - K, E$ X7 a! [& \5 ?6 |) V* s
  748. DEX. J# j5 l& x! Y: @, l& S7 @
  749. BPL Init_MMC3_Chr_Bank_Write! v8 o' B# X0 A
  750. RTS' W( F4 k1 ^% g& s8 f
  751. ;--------------------------------------------------
    / Q/ o7 R& h4 L8 Y
  752. MMC3_Chr_Bank_Data
    7 @& L: O* A+ W: m! C: z3 R
  753. .DB $00,$02,$04,$05,$06,$072 u: q( T4 q" I% l+ i- r
  754. $ {5 r" Z5 N. P2 o& M; r* m
  755. ;==============================
    0 ^8 J0 V3 i" Q7 R. q3 P+ C$ H
  756. VramInit;初始化图形内存% m" C! z8 G2 {2 k/ b# k. B: g5 I
  757. .IF CHR_RAM_ENABLE
    6 ?$ D, c% v. I* u
  758. LDA #CHR_DATA_BANK
    3 s) z# v; Z0 M
  759. JSR Switch_Bank_A000
    - x  w% ~3 y  i$ r% Z+ r
  760. LDA #LOW(CHR_DATA_ADDR)
    7 U8 F7 I$ d! R- r! Y
  761. STA <Data_L
    $ D) D/ W; Z. F
  762. LDA #HIGH(CHR_DATA_ADDR)
    ' f( c' j7 A7 _! p
  763. STA <Data_H' ]$ j, H& M  D$ k$ e
  764. LDY #$00
    6 z. Z$ Z7 B  z* w
  765. LDX #$20
    4 k4 l7 o- U# X8 i2 t
  766. LDA #$00
    2 Q& M, O" p8 d3 ^' x
  767. STA PPU_ADDRESS! G" t% A+ v; X! I, g8 B3 S
  768. STA PPU_ADDRESS: X* b6 L" C5 W
  769. VramInitWrite
    ! [' t) ?8 l$ X4 G/ g
  770. LDA [Data_L],Y
    2 ~. Q7 L$ b7 B5 w% ?/ j
  771. STA PPU_DATA/ d' F+ J0 D- O4 ~6 Y$ c
  772. INY
    0 W9 r- ~1 M! B
  773. BNE VramInitWrite
    . x4 j6 t9 ]8 [' E
  774. INC <Data_H& z/ G# y) u7 G2 f. W' j
  775. DEX4 V5 x, A' o7 K6 E
  776. BNE VramInitWrite
    7 d: k. b7 U" K
  777. .ENDIF
    , T" e  v$ I" f& q2 P4 U8 C
  778. RTS( g3 M! ~0 x1 ?4 n) ^, @% ^  x
  779. ' |/ _! I8 Q7 C; H8 {, S, M
  780. ;==============================
    : i$ p! K" |9 Q- q" J( b
  781. ;音乐切换
    2 i) d7 h' x- K$ i( \
  782. Music_Play_Change, g, Z, a8 v* `% O
  783. LDA <Key_Once
    0 I2 F5 U# i; B* ], R
  784. AND #$FF* ?  d8 e4 ^: k1 u* q" ^7 e
  785. BEQ Music_Play_Change_Check1 F" U# x* q' N5 v& S
  786. , T& _$ A% v( G8 F
  787. ;禁用音乐条刷新0 F- F( _: D, j+ v1 B! P
  788. LDA <Text_Disable_Flag
    1 s$ G) {/ }8 q" t1 R) \
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME$ ~+ B8 ~9 R% [
  790. STA <Text_Disable_Flag
    & v" V' ?! g7 ?/ [# z( P

  791. 6 p& ~$ f' b& x& D1 S
  792. Music_Play_Change_Check
    2 {1 c6 }' X6 x$ \
  793. Music_arrow& w& D0 e' [' X! d/ J3 g- l
  794. LDA <Key_Once
    4 E6 y# s2 l% t: n. C
  795. AND #$0F
    % C% S: C+ s! W
  796. BEQ Music_Play_Change_End
    5 k* C/ {* q% \2 c4 f/ [
  797. JSR Music_Track_Change# ]6 ~2 Q+ q, L5 r  E9 g% E
  798. JSR Sound_Reset_Proc! n% ?& k" U* [+ l
  799. JSR Music_Show
    % k( s( v9 Y$ i/ q. a% ]8 j$ f) L3 n
  800. Music_Play_Change_End
    2 k4 V8 @& y% b, B9 \' X$ \
  801. RTS
    ' H$ u6 q3 T! p$ u* S+ b

  802. 8 H5 F# P3 x) i, N8 a5 [
  803. ;==============================) {* c. h# [+ N4 E
  804. ;音乐曲目切换* U5 R3 I7 v! C& \0 I  j$ `% x
  805. Music_Track_Change
    . c; Y+ @, l( ^. r" P- ^
  806. LDX <Music_Item_Cur
    2 _4 W: m  n% z0 j, R8 a
  807. LDA <Music_Cur,X; M( D# y" a2 ]& T; T$ j
  808. STA <Music_Last
    * v/ ]# j6 G& f7 J7 [+ H2 f' `- B
  809. Music_Decrease
    * Y8 a6 n7 C- K. b) W' A' r. K$ }2 m
  810. LDA <Key_Once9 E' @9 P; {$ S! @% ?3 y" ^1 B$ v( Q
  811. AND #$42
    0 v. L( a$ W$ i+ _+ j# a
  812. BEQ Music_Increase
    4 O- f$ I, l0 u& O
  813. LDA <Music_Cur,X8 \  a9 ?5 k  Y  M0 Z
  814. BEQ Music_Increase" D! Z8 s+ b/ \# d# C0 }; x
  815. DEC <Music_Cur,X
    5 O3 ~8 [0 }  y1 E( M% F- R
  816. Music_Increase
    , ?; m% s9 t3 H5 c# n  A7 h! `
  817. LDA <Key_Once
    9 l# k0 q$ H- f' e  i1 y+ Q
  818. AND #$81- M- d6 q( f: T' u3 j
  819. BEQ Music_Decrease_10# g2 _, G- U9 f! s9 u, w
  820. JSR Set_Sound_Total
    + k' J  Y# \1 u
  821. LDA <Music_Cur,X
    1 ^* s* l0 ]& A- Q4 E9 q$ |' T
  822. CMP Music_Total
    , y" I# {; O. T
  823. BCS * + 4
    & @; I" ]  q4 D- v" ^. b
  824. INC <Music_Cur,X% u/ h% C# y# v% Y  l' X
  825. Music_Decrease_10& j3 h9 d) @! j$ L' x8 D
  826. LDA <Key_Once
    ( x' w6 o7 O9 G- {8 n: O2 X+ p
  827. CMP #$04
    ! _" T/ j/ V- y5 k5 s0 q& R
  828. BNE Music_Increase_10
    6 G( H6 e# v. `5 D1 U# F
  829. LDA <Music_Cur,X) y1 k; H# N! |2 b
  830. CMP #10
    ) g, T7 B( h: E) T' [7 x
  831. BCC Music_Start_Song_Min
    7 I3 o8 N/ {/ |- @; n, C
  832. LDA <Music_Cur,X
    3 |$ l9 p/ s. A- D2 e2 r5 _5 H! M
  833. SEC0 o+ b+ r# q" N/ [4 P
  834. SBC #104 q/ ?% T/ U% n8 L( B6 L
  835. STA <Music_Cur,X
      @5 z, G- p/ g
  836. LDA #$00/ C* M+ C1 ]3 w; _6 M9 _* u9 Z
  837. BEQ Music_Increase_10
    8 G6 M; C2 Y3 e  c# u& z: k5 F* }* p
  838. Music_Start_Song_Min
    3 u9 B( B7 W, R
  839. LDA #$00
    ' `' K) N2 D* I
  840. STA <Music_Cur,X
    8 ^; E! e0 Y7 I! a2 j
  841. Music_Increase_10
    0 c2 }" C& t& `. X5 W
  842. LDA <Key_Once/ w4 ?) Z2 c0 v+ A4 J( T6 g" j& y! @
  843. CMP #$08, }" d. A2 A% P: l6 u% i
  844. BNE Music_Track_Change_End
    ' X" p" l' Y  C  [7 h' ?. d
  845. LDA <Music_Cur,X  }) G- |# `2 U9 f: H, y$ d3 z
  846. CLC8 q2 a: J; q' }% ?$ k6 Y$ J
  847. ADC #10
    ) [* g. q1 G" Y4 S/ _3 `# c& l# q
  848. CMP Music_Total" c& H5 d6 V3 |) p) ]
  849. BCS Music_Start_Song_Max
    . L. U: y- a' n/ \) Q; _
  850. STA <Music_Cur,X9 N+ b/ B$ C5 e9 s+ W9 V( O
  851. LDA #00
    / z' J, w2 _  p
  852. BEQ Music_Track_Change_End
    6 V, p; O: E% U& H
  853. Music_Start_Song_Max
    5 W, v# }  o  U/ e
  854. LDA Music_Total
    + f) h& h( z1 G  y  v# {; F$ U' C$ `
  855. STA <Music_Cur,X; Q2 F6 {! z- O" F" E1 o
  856. Music_Track_Change_End$ M1 g$ g# h, I! B  C: n- ?6 z( X
  857. RTS
    0 K& |5 L7 Z( G; p" N; W& I

  858. 3 k7 i# v% T- M; d5 {! ^
  859. ;==============================
    7 |4 S" M) ?5 h7 C4 J/ K. ]8 z! j
  860. ;按键处理0 S' N' a' I/ v# q& ]' d9 ]
  861. Key_Proc+ J" X" N  h: E; x
  862. JSR Key_Scan( z  @8 ^2 ~/ g
  863. LDA <Key_Keep' b* W$ \$ E9 f( ^9 p. V$ O
  864. STA <Key_Temp
    * M7 g5 V5 U1 [
  865. JSR Key_Scan/ k. s! ]! n+ I  M; h; {& g
  866. LDA <Key_Keep
    0 W- Z5 v5 d5 {. \! p
  867. CMP <Key_Temp4 R# Q. G+ `' x( p# q9 V
  868. BEQ Key_Get_Once
    0 \! Y( S+ I, B% W; s0 G
  869. LDA <Key_Kemp) j! {2 J# A) a" \* T  Q! E2 K1 K
  870. STA <Key_Keep% y0 d/ X9 V3 N  ?4 Y
  871. Key_Get_Once
    ( Q8 [+ M! f$ Z$ X, }
  872. TAY6 g1 @: V  ]/ O) [: u
  873. EOR Key_Kemp) E7 o: X, d( K* A, d, A
  874. AND <Key_Keep
    3 A" t7 a. Y/ r' v2 P  m
  875. STA <Key_Once9 ^% R8 [) K# Q  k& {/ M
  876. STY <Key_Kemp0 R' x. n7 n; r% p6 U1 ?
  877. RTS9 n( I% t) b$ U( `/ K; n8 c& G9 {0 I/ u. B
  878. ;------------------------------" V' `4 N4 m4 x, O/ r1 l
  879. ;按键扫描
    ; a6 p- u/ o3 ^6 m4 R! Z9 @  _; Z
  880. Key_Scan& V6 J2 f! T: ~7 e3 e' T
  881. LDX #$01
    ; B! T' e9 ^* E4 \& L
  882. STX JOY1_FRAME% S3 }7 [5 r- c) o  n% s
  883. DEX
    , Q' L) g7 f! n& z& q
  884. STX JOY1_FRAME* ?: m$ U4 Q1 F! s5 a
  885. LDX #$08
    ( Z" {) |+ Y/ j* v( h
  886. Key_Value
    9 {; T6 U( z, Y6 ^
  887. LDA JOY1_FRAME
    4 ?: B# F2 f4 L) G( i
  888. STA <Key_Getv
    0 Z" X. }, M  ]
  889. LSR A
    # ?' O; J5 f. P2 L" \
  890. ORA <Key_Getv
    . d. p2 H2 g6 ]4 e) G" d9 {( h9 w
  891. LSR A( z6 @+ e. o$ I; O9 {- s/ e. _0 j
  892. ROL <Key_Keep
    - R" ~4 |0 |6 N/ {) K+ |( y+ k+ J
  893. DEX
    ; V8 C; j/ Y  k/ O: Z0 t) \: ]
  894. BNE Key_Value
    + K& t/ N4 b- P9 l
  895. RTS
    0 ~# W& g" I& _6 @+ w4 u8 ^1 u+ N! ~
  896. 4 L2 W9 Z% D9 k& x1 v$ u
  897. ;==============================$ |6 b  z! G  z2 c
  898. .IF SOUND_BAR_SHOW_ENABLE
    " y, f2 \, q# I$ B* _. x
  899. ;音乐条显示* o1 e0 I& `: T7 {5 Z9 ^3 ]) |
  900. Music_Vision
    4 m5 C" i% I' _1 U$ c/ b5 K& {/ y7 L
  901. LDA <Text_Disable_Flag
    $ {! `& u& o: x2 |
  902. AND #TEXT_DISABLE_ITEM
    4 n  _* S3 @; v/ h4 ~. x% i
  903. BNE Music_Vision_End
    & B  Q4 ]) k# E+ C
  904. AND #TEXT_DISABLE_BAR
    8 X- e! Y8 f. D; ^8 w  T6 X' Z
  905. BNE Music_Vision_Set
    ! V, u$ K# m0 }+ u" I3 _& @, n
  906. LDX PPU_Cur/ D  b! m3 M) q- d" Y$ B
  907. JSR Music_Animation
    & y1 l0 J- S  r) \* k" x% D' t. \
  908. STX PPU_Cur
    / Y! K2 V0 G* @
  909. Music_Vision_Set
    * n& F. v# _4 Q0 [4 Q
  910. LDA <Text_Disable_Flag' x$ j7 d1 z+ L/ C
  911. AND #TEXT_DISABLE_BAR ^ $FF- |6 Q0 C/ H0 l- Y- i
  912. STA <Text_Disable_Flag
    % x* f+ {5 P$ X  g
  913. Music_Vision_End
    * [( I& n: u* k( L
  914. RTS  @0 ?- ]4 ^& G- p! I9 C
  915. ;------------------------------
    ! i  j8 u8 I* o
  916. ;音乐条显示处理* r; z# k7 J0 g1 u) I5 a
  917. Music_Animation# `, P+ b+ O$ _3 N# n% U
  918. LDA #PPU_MODE_CNT_LINE1 g8 w0 H; i) S2 Z5 d. s, L! T( W2 b
  919. STA PPU_Addr,X
    " U: l* o# O  _9 V/ ]  w% ]- e8 q
  920. INX2 _8 |! m# ~/ q5 J1 h
  921. LDA #HIGH(Sound_Bar_Pos)+ A' t5 I* Z" P
  922. STA PPU_Addr,X8 e1 o7 |' j- w: w' w
  923. INX
    - n# T1 p( e# P) i2 X
  924. LDA #LOW(Sound_Bar_Pos)6 V) j0 G# F7 ~9 r. s6 e
  925. STA PPU_Addr,X2 J8 o, a$ u1 U' {
  926. INX: j! w0 x8 N- h. @$ F; b7 U" o3 g& a
  927. LDA #$082 ]7 ?2 s8 Y( c$ W
  928. STA PPU_Addr,X3 X% e" C. a" X5 U) C" R
  929. INX# j* u( \! F( ~
  930. LDA Sound_Bar1 j( q* I. M. V& ~6 j5 t1 q) ^
  931. JSR Volume_Convert
    & }3 e+ f% ^3 B& w* D# p5 W
  932. % P6 |. Y; o' e
  933. JSR Volume_Set_Cnt
    : F! E, a/ C# q# G6 [* T8 Y, b0 g: q" ?
  934. LDA Sound_Bar+$4: W& J/ R* F" r6 [# M& q. o
  935. JSR Volume_Convert) K& \. Y$ E  ~- C; W

  936. : T$ M% v2 b: b+ f: b
  937. JSR Volume_Set_Cnt
    5 k8 }- e% y1 O& u
  938. LDA Sound_Bar+$8
    5 n; x* l$ }  L$ j4 \
  939. JSR Volume_Convert% e7 T+ u8 Y! L. Z* o) m' c( O
  940. 8 L5 P6 a* y2 X  S* z
  941. JSR Volume_Set_Cnt7 v+ Q5 I% Y  y# `/ K0 `& O$ T
  942. LDA Sound_Bar+$C2 k+ i3 l4 ?  ^% ]' G
  943. JSR Volume_Convert
    ( U6 Q$ w$ E: O5 G4 b6 X

  944. ) w8 D* Q5 e; |
  945. JSR Volume_Set_Cnt
    : r0 \, X- D& T% X% X* p

  946. ' U' ?% L$ k. o% ~2 a0 F
  947. LDY #$10
    ! h) p9 \. `; }/ {4 f/ g# M! g5 u
  948. LDA APU_STATUS
    # ], A) [/ @( O3 n  P
  949. AND #$10% F8 S9 |8 y; y" V( D+ B( H
  950. BNE Volume_Count
    8 m" R5 D+ z4 C& O8 _7 S
  951. LDY #$00
    8 p( N! v$ ]: `6 ?4 p
  952. BEQ Volume_Count
    ) |5 y" Y# \: s9 [/ H3 l) }

  953. & I  d- Y* y1 e5 O) J2 P* d
  954. ;------------------------------1 a$ A+ K# c; B6 n
  955. ;音乐条处理
    8 M9 R" i" |" Z& U
  956. Volume_Convert
    ; l4 c6 e, X) P. s: u. W
  957. AND #$0F
    5 c0 l9 s: d- {9 f; _/ N; K8 F
  958. TAY
    ! x+ r4 k4 ]; ~4 u7 {1 l
  959. Volume_Count
    0 [% k( a  C9 x4 l( i1 o$ y
  960. LDA #$08
    ) p9 f8 I1 p  ]
  961. STA Sound_Bar_Cnt# c% y) P7 ]. s! T- K
  962. Volume_FILL8 V8 L8 \# k  x' H! O* P  [
  963. DEY
    + c- Y! @0 Q; l2 s. m- Y% m
  964. BEQ Volume_Half
    % ]+ I9 J( Q1 v; a; {
  965. BMI Volume_Empty* j+ l1 V6 h4 p3 H! H( a& k& k
  966. DEY
    8 [, }: g/ W' ]5 n6 f) t( @
  967. Volume_Full
    " @# Z* U+ t; i) l% _+ s8 {
  968. LDA #$16
    6 z+ T0 }  }! x) _0 D9 T
  969. BNE Volume_PPU+ y# ^$ n: {) ^8 i
  970. Volume_Half
    , r' {$ A# s# _& o8 T+ A- @
  971. LDA #$15
    3 P2 ]; g6 S2 ?( E
  972. BNE Volume_PPU
    2 V6 @8 f" _' I- l6 c" j6 X/ E
  973. Volume_Empty5 M; A( F0 x1 {) d( y
  974. LDA #$14
    9 E4 Z/ M# z4 w8 g  S0 p
  975. Volume_PPU" `. k" M! i7 u5 A; K- F0 }
  976. STA PPU_Addr,X! Z% Y9 U4 y% I! o2 V4 O
  977. INX! r9 H0 H6 U5 V+ X
  978. DEC Sound_Bar_Cnt/ a8 j! i$ M9 c& ?
  979. BNE Volume_FILL* N2 a* y! O- t3 e6 b
  980. RTS  [4 E6 P5 o# f# |2 U5 [3 e, ~0 i

  981. . o6 |! Y6 ]; [6 `, u
  982. Volume_Set_Cnt) z# h# D: _+ u: w0 g! m
  983. LDA #PPU_MODE_CNT_LINE_NEXT* Q6 X3 b+ T1 A
  984. STA PPU_Addr,X
    / ?6 I) l1 [% l
  985. INX
    ' m  O: Z+ b: k( n8 o
  986. LDA #$08; h- Q  |; |! _# g4 ^
  987. STA PPU_Addr,X
    0 L0 j% L- ]3 z8 r0 b+ _; T3 a
  988. INX
    . J1 o) Y- P3 y0 T* k' [
  989. RTS5 C# e1 ]& p8 E+ T4 g- P) B

  990. 6 Y1 M' I9 _/ j: r: V
  991. .ENDIF
    ; R8 R9 y& j4 }2 V: l

  992. ' W7 T/ w) m1 o7 M' v) S, d
  993. ;==============================: d/ Y  ^3 `7 _9 q! \
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    # q# E: j5 E5 A/ ~* \
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式
    / ^7 c) C* N; G
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除
    9 Q" A6 I8 B; f8 s7 @
  997. ;------------------------------9 E" w. z. e- }8 W' L5 c7 O
  998. ;PPU处理
    8 t  C% Z1 w% m1 `4 Q9 O: a. N
  999. PPU_Proc
    6 h8 X+ d5 D& S
  1000. LDX PPU_Cur
    ( x' s" r. p3 J* c. X# L
  1001. LDA #$00
    * |# t" N  E8 j" J
  1002. STA PPU_Cur( r8 W, u& r) M3 k/ x# R- A5 `7 u
  1003. STA PPU_Addr,X, B5 w1 s* l/ o3 C9 ]7 Q9 n. ~3 k
  1004. LDA PPU_Addr
    8 m- I% K0 A- t. [1 s6 ~; D- e
  1005. BNE PPU_Proc_Beg% h, H% e% ~4 A, _
  1006. PPU_Proc_Ret
    # [: I# T9 l+ ?- d. j' [
  1007. RTS! Y2 m8 B, W) n' U" n, l
  1008. 3 E% n0 `6 C" z' K
  1009. ;------------------------------; p5 s3 Z9 }# P, V/ R! r
  1010. PPU_Mode_Return_Cnt  ;转下行模式' A6 j1 Q' \" y* g# I3 b. S0 X, h
  1011. INX* |, C# Q. e. V
  1012. LDA PPU_Addr_L" z& I! H' }3 z+ {  _: ~
  1013. CLC
    / ]+ _3 ]" j0 e% J! _7 _6 V
  1014. ADC #$20
    1 R/ m1 F. x, `
  1015. STA PPU_Addr_L
    . P9 U( L5 k$ X4 \
  1016. BCC PPU_Mode_Return_Cnt_End: J9 `' _- t8 M
  1017. INC PPU_Addr_H# K# n; b3 ?; N9 ?
  1018. PPU_Mode_Return_Cnt_End
    , b) [4 A1 ?3 l5 M
  1019. LDA PPU_Addr_H
      U8 J4 \: h- U. b; v# I" V& Y
  1020. STA PPU_ADDRESS
    / {& c4 e& h- B1 N  f
  1021. LDA PPU_Addr_L
      R; n; Y1 _8 z
  1022. STA PPU_ADDRESS
    6 x1 t& c: P) U3 `: E
  1023. LDA PPU_Addr,X. A: A9 ?: ^6 M; S  R' Q2 R7 j
  1024. TAY
    + D: f/ }/ g" F: h$ ~8 _. s
  1025. PPU_Mode_Return_Cnt_Write
    ) v0 h- W9 P0 x; n
  1026. INX
    3 v1 J# c( P7 }1 f
  1027. LDA PPU_Addr,X, a9 F5 }  @0 a& _8 Q/ B% K, F" @
  1028. STA PPU_DATA
    # o7 X- g& [. ], t1 v* ^
  1029. DEY
    8 A* J  l6 R" Z+ W) F
  1030. BNE PPU_Mode_Return_Cnt_Write! d" N  q9 _- }
  1031. JMP PPU_Proc_End% B) I  n- f/ G4 R+ C0 ^5 \
  1032. # `5 r. u$ S& m# ]
  1033. ;------------------------------2 a2 U- H. [* S
  1034. PPU_Proc_Beg  ;处理开始
    - [; E: P; W/ ~# X" I% o* D
  1035. LDX #$00
    $ H% y+ q6 v$ t6 J9 H6 ?9 [* N
  1036. STX PPU_MASK) \1 h5 h+ w: w7 D$ j6 b" G$ {
  1037. ;------------------------------: l& S: e: n$ J; K8 M  Y9 G, `% d7 E
  1038. PPU_Mode_Select  ;模式选择( \4 s% I3 e0 {
  1039. LDA PPU_Addr,X
    ' ?* s" D! W+ O
  1040. CMP #PPU_MODE_CNT_CLEAR
    / a$ s5 m) J/ m6 c' a6 z
  1041. BEQ PPU_Proc_Clear7 {% }: N+ w9 O+ k4 F
  1042. CMP #PPU_MODE_CNT_LINE
    $ h. v) s, H8 q7 A
  1043. BEQ PPU_Proc_Cnt_Line
    - ~# u; F$ N7 Q2 @
  1044. CMP #PPU_MODE_CNT_LINE_NEXT4 ~& D; v" U% s* ^  q
  1045. BEQ PPU_Mode_Return_Cnt6 U7 Z) w6 ]" M1 I0 e& m
  1046. JMP PPU_Proc_End_Write
    1 f9 e; ]/ _$ M% J: s+ d1 F$ Y
  1047. ;------------------------------
    ' c' Y4 @- J3 v! m5 T
  1048. PPU_Proc_End  ;单行写入结束) }! Q5 X9 m* ~5 t3 D
  1049. INX2 n: p; N# ^* G; \: ]
  1050. LDA PPU_Addr,X: J9 x' i5 A# j3 Q- \1 h+ N
  1051. BNE PPU_Mode_Select7 `* F, j. W7 f/ ~* l5 ?
  1052. STA PPU_Addr
    0 H3 U5 Q! A6 U$ [5 }
  1053. JSR Update_Palette_Color4 v/ ?$ z3 h* Y7 v0 q
  1054. " O7 f4 `% H5 T; e# ^
  1055. PPU_Proc_End_Write, X9 c- Z; @# O3 r
  1056. LDA #$00# r% M0 {* [! X, v# R
  1057. STA PPU_ADDRESS. z  m9 H2 N- b& F( b7 E. S6 X% V
  1058. STA PPU_ADDRESS
    / m$ X6 x2 r: T* l5 c6 a5 a' {3 y' F
  1059. LDA <Text_Disable_Flag: V' ^1 Z4 e2 D1 V# m- t! o7 o
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    ( c! H: k" Y2 f5 H6 h3 e
  1061. STA <Text_Disable_Flag' n+ s% V# e! X+ S
  1062. LDA #Scroll_X% J* T+ @6 q  `1 T2 h) g* C6 k9 f7 g
  1063. STA PPU_SCROLL
    % c+ d0 P1 {) b6 z: s7 N
  1064. LDA #Scroll_Y
    0 V& u% }, y+ }) o. x
  1065. STA PPU_SCROLL" K2 O9 k2 k7 z. i9 w6 q0 Y. ~
  1066. LDA Screen_State
    ' C/ j' w0 L; Y, T4 w
  1067. STA PPU_MASK$ V+ a4 R- m/ W: Q
  1068. RTS
    6 a; s: P  p# f# r$ [& @, k6 a, z
  1069. 4 P0 }% ^4 a0 ^! y( i3 G! X
  1070. PPU_Proc_Clear
      c7 ~$ Y' ]' r/ S
  1071. INX
    : q9 B( {3 K1 D: o. n+ V
  1072. LDA PPU_Addr,X
    ) z  N! v. T. @5 [2 ]5 g
  1073. STA PPU_ADDRESS
    , S- D( g; m8 Z4 c! e0 D3 j% |# A
  1074. INX
    % y6 u  w; X. i# r% ?4 l# s
  1075. LDA PPU_Addr,X
    7 D) D! U& J" x! [
  1076. STA PPU_ADDRESS
    0 v4 l2 [9 |7 B6 V& X# ]
  1077. INX' d* q: g* z' i/ ^- K( I. Q
  1078. LDY PPU_Addr,X
    ) u+ R4 b; U; J# y; K6 m
  1079. LDA #$00( U& J0 T" F  v$ `
  1080. PPU_Proc_Clear_Write
    + r/ {: w) Z! U" Z
  1081. STA PPU_DATA& P+ n! u) e* ?8 S' u
  1082. DEY
    , \' Z# M# e5 V. Y$ [3 i' N. S
  1083. BNE PPU_Proc_Clear_Write
      G6 I, A( J% i+ \2 z/ _$ E
  1084. JMP PPU_Proc_End4 }$ k/ v2 Z! s. d3 _2 R

  1085. * K* o% g/ X/ m; _7 N
  1086. PPU_Proc_Cnt_Line( \' a  B' }8 s3 N  g1 q. Q
  1087. INX8 n$ z) K: [# f* y
  1088. LDA PPU_Addr,X: l- ]6 H8 U) R. [% E' G& v3 \- H  y
  1089. STA PPU_Addr_H2 o& A' i) O7 l& v7 i
  1090. STA PPU_ADDRESS5 u3 x9 @- V" N& T9 @; j) N. J# B
  1091. INX7 c  W9 P' H3 f9 G! K# p, D
  1092. LDA PPU_Addr,X6 Z1 c. ?# m) t1 N/ J: X
  1093. STA PPU_Addr_L
    ( t$ V& w& m2 n& K
  1094. STA PPU_ADDRESS; P2 R0 ?5 {! j: j$ S4 H
  1095. INX* V" \/ P3 D* ^' }4 {
  1096. LDY PPU_Addr,X
    $ \. s/ {7 E" _8 O  J+ D
  1097. PPU_Proc_Cnt_Line_Write
    : S  i0 v6 c/ r3 X# ^2 H& j
  1098. INX# M, O! r2 _1 L  R- W% \4 q
  1099. LDA PPU_Addr,X
    7 s; ?  _6 u- c
  1100. STA PPU_DATA
    + D( s# I6 u& n& f" Y& h
  1101. DEY
    / i+ E- M9 r* j& [5 q
  1102. BNE PPU_Proc_Cnt_Line_Write
    0 ~2 h9 b# |& E% Z2 Z7 H; [
  1103. JMP PPU_Proc_End9 W$ u$ o6 J1 H/ h8 Y# L$ _
  1104. 4 ]' C$ C- i6 N5 H; j. `9 z* R
  1105. ;==============================
    7 g. l  c1 H/ S, v$ G
  1106. HEX_To_Dec;十六进制转十进制
    5 n- M- E! H) E# k9 l! N0 F+ ^( s9 k
  1107. STA <HEX_Data
    7 N! L) m& g  {( @" E/ C. A
  1108. PHA" P9 w& {  S- [& [) J
  1109. TXA0 p/ D" }9 M  }
  1110. PHA
    5 c+ E6 l. T, y& u
  1111. LDX #$00
    4 K6 p+ h, `3 X7 J
  1112. LDA #$009 s( g+ @5 d1 B* e
  1113. HEX_Cln9 j4 i! G8 ^. i2 m$ s
  1114. STA <DEC_H,X- r  i# B5 U& J) o  G
  1115. INX  Y" _, y$ e$ L' M
  1116. CPX #$03
    ) g2 v/ `5 `7 g1 a  r% r$ k
  1117. BCC HEX_Cln. Z) V3 c' E6 P( A# u8 d, ]
  1118. LDA <HEX_Data+ @5 y3 T# j/ ^) R$ g1 I
  1119. ;------------------------------& ^% |( B/ T5 W# c1 P% ~' J
  1120. HEX_100
    9 K& Q! D5 i2 Z8 c4 B1 s2 Q
  1121. CMP #100
    ! c9 ]. |" U; \
  1122. BCC HEX_10
    ' T2 Y% a/ l  Y9 H, E5 Y$ p% I6 ^
  1123. SEC6 v; g# S& m" V8 _+ P3 u( b
  1124. SBC #1006 H& x# v# C7 {( x0 F8 @6 I
  1125. INC <DEC_H
    - H7 {  k3 `  R& f& q( T: Q$ m# z
  1126. BNE HEX_100
    ! m7 s: x1 Q$ g! }, W! \9 x
  1127. ;------------------------------
    1 i' J, Q2 A) k. i
  1128. HEX_10
    ( ^' y, f5 J0 \4 o! l0 v+ h
  1129. CMP #10
      n9 E8 n: W! S
  1130. BCC HEX_1
    ' K, \0 m8 X  c8 D1 n1 }
  1131. SEC
    3 E+ G. i- }. T& a: M
  1132. SBC #10/ R0 K; f' L+ @6 |
  1133. INC <DEC_T
    ; `% t. K$ y1 N& u: }: k
  1134. BNE HEX_10
    2 x/ u9 ]- H7 f8 z" y. J9 V
  1135. ;------------------------------
    7 D: p  g6 v' }4 \) D: `8 I
  1136. HEX_13 l1 W7 Z9 x( t3 v1 |! `4 S( i
  1137. STA <DEC_L2 ]9 z9 x5 E# k& d* h& ^! T
  1138. PLA/ T, {7 B& W) W' u* m5 M1 I# B
  1139. TAX
    - a% T7 P" Q& ]( X
  1140. PLA
    . I9 H8 e% Y3 H% i* O
  1141. RTS
    % _* x  p4 O+ @* V0 w, S

  1142.   q! d0 v; J. m. ?
  1143. ;==============================
    $ x1 l2 v+ M2 {/ J9 A! \8 q
  1144. ;音乐曲目显示
    ' G& Q/ _3 y9 j% w- W4 M1 z
  1145. Music_Show
    + P, X; q9 Q& f
  1146. LDX <Music_Item_Cur
    0 p, n" t. C' }; o  t
  1147. LDA <Music_Cur,X' q5 W- A; e, l" q" a7 W' \
  1148. CLC) P' b& `2 j! e, A6 c0 I# _
  1149. ADC #$01
    4 G7 z$ y0 K! ^1 E
  1150. JSR HEX_To_Dec
    1 i& R2 c7 @5 L
  1151. LDX PPU_Cur5 l$ N% O$ _! \- }8 v' k# t+ m
  1152. LDA #PPU_MODE_CNT_LINE
    ) E4 A7 s5 f1 F8 r# Y' W0 I' {
  1153. STA PPU_Addr,X
    0 J* x# |1 e5 [/ E: a+ J+ \
  1154. INX
    6 t2 H8 @9 q' ^% z) G7 w$ B
  1155. LDA #HIGH(Play_Index_Pos)
    ' X" [" p: y- k. t. ~
  1156. STA PPU_Addr,X
    ) m6 m7 [5 d; z2 {- [
  1157. INX/ g, Z1 X% o% o& ?4 T4 V! b
  1158. LDA #LOW(Play_Index_Pos)
    6 K4 j& ], \# h% d+ e
  1159. STA PPU_Addr,X1 q, Y4 U) K- }( C
  1160. INX
    % K3 C1 d/ v8 K# J6 V( g6 ~
  1161. # Y7 g2 }( W: z4 I- a( d
  1162. LDA #$07& T4 N5 r# H& r) N
  1163. BNE Music_Show_Length
    4 Y$ }8 C$ f- L7 j& q+ R; P

  1164. 4 P* x8 y# G. Q* i8 c/ v; P9 X
  1165. Music_Show_Length
    5 a5 k7 H& w7 b9 B
  1166. STA PPU_Addr,X2 X" c1 u1 D; U7 Q; C( E
  1167. INX
    6 L: d9 Y$ R1 U1 o. A
  1168. " e# ]; k4 s# T4 K. x
  1169. LDA <DEC_H
    7 j8 H5 G! ^' K  u) L. @  K. }7 \
  1170. ORA #'0'$ W7 B. n: o1 ^9 e9 A' w
  1171. STA PPU_Addr,X
    - K. z: j9 O, F% J) U/ \8 X) e
  1172. INX
    / H: ~8 o& Y8 a+ e# k2 @) u
  1173. ' V8 r* t. p6 S" ~
  1174. LDA <DEC_T
    * c  H, a" ~. [' `
  1175. ORA #'0'" V$ z9 Q6 G/ ^2 A* J
  1176. STA PPU_Addr,X
    5 ^! a" \8 l+ C. h* I* F% ^. Q
  1177. INX
    0 h/ M/ w+ j" G0 f. L' l6 I
  1178. 4 I, W( b9 P/ Q' `. W3 M; H1 f
  1179. LDA <DEC_L& K7 f) K: p  z7 G9 t0 d2 ?2 S  R
  1180. ORA #'0'
      Z' A* O% e! l3 F
  1181. STA PPU_Addr,X* d7 ~( a( |( d7 S7 a' \' d
  1182. INX1 o) f: ]! q2 z2 q: e3 i# F
  1183. , m/ d0 b/ I7 K4 g( I  E; r% y- Y
  1184. LDA #'/'
    # r+ w( ?" C5 s; {& w; x! C
  1185. STA PPU_Addr,X; X8 T3 c- D0 f# N% N5 w
  1186. INX) E5 H5 s' _' n8 f
  1187. Music_Show_Total9 ]& e( j6 E' Y: l+ R% w- K3 h& M: h
  1188. LDA Music_Total
    ! N, c8 n" h& ]
  1189. CLC% g7 ~" E# v. [' K6 q: ~: H4 H
  1190. ADC #$01" V# }3 z" l7 w; q" j4 _
  1191. JSR HEX_To_Dec7 t  X/ Q6 `. w
  1192. $ E; h( J4 F8 c% d6 r' f1 W4 c
  1193. LDA <DEC_H: s5 E- w% ~( H; o! I' A9 x5 S8 a# [
  1194. ORA #'0'5 t3 R* T, o  U, G  m
  1195. STA PPU_Addr,X1 }9 f( w, D. \/ K
  1196. INX
    + s8 q: n( D6 q! k- N- T: y6 H
  1197. : J1 W% @; x: t5 l; Q( W
  1198. LDA <DEC_T
    - @4 [% u3 J6 F
  1199. ORA #'0'1 u* ]; i' m! L2 G' }: V8 z0 o
  1200. STA PPU_Addr,X
      {4 _3 L% t0 B9 u+ k; ~4 `9 i
  1201. INX$ ?9 y, b& y) K  p$ F* B  p

  1202. 8 Q: }  Q/ n0 \7 @4 [
  1203. LDA <DEC_L: R) _# B. h; B0 l1 D' l& p
  1204. ORA #'0'
    ; \8 j3 Y* w; _$ |
  1205. STA PPU_Addr,X
    $ @1 W1 X9 [% j, G: X0 F5 f
  1206. INX2 e  N0 y9 \9 d4 h
  1207. 5 b- ^( {" o" {$ d
  1208. STX PPU_Cur
    2 R  q! Y" x! U/ _
  1209. Music_Show_End# t! p: R- b9 N. N# n8 c) N* t4 y
  1210. RTS9 A; {! n9 I, _/ ]: ]8 I; C
  1211. ' B$ G5 U. S5 T! f" e  }
  1212. ;==============================+ `0 S) Z5 `- g
  1213. Time_Show;播放时间显示- J0 }7 p7 t8 _- B4 I; v, T
  1214. LDA <Text_Disable_Flag. N8 w. h: x2 Y9 [, o3 g, v
  1215. AND #TEXT_DISABLE_ITEM: r: x- ]. e  p( l' u
  1216. BNE Time_Show_End
    , k$ `& L0 N  f; a+ j/ T
  1217. AND #TEXT_DISABLE_TIME
    0 N$ Q. W  P; J# ]9 `
  1218. BNE Time_Show_Enable* n3 C  _9 G$ f
  1219. ! Q: n' |) \+ q* n
  1220. LDX PPU_Cur
    8 o9 \" Y9 i6 U: a8 o
  1221. LDA #PPU_MODE_CNT_LINE
    5 r" ~- }* h3 [( u6 O, B6 j: c
  1222. STA PPU_Addr,X
    3 Y, g$ u, V$ `; r3 h/ D. f) T3 q
  1223. INX
    8 p3 T" p) y- w# X
  1224. LDA #HIGH(Play_Time_Pos)" x2 z9 c  {! ?3 T
  1225. STA PPU_Addr,X
    8 Q0 q* O( x8 x* ^9 `/ u
  1226. INX
    ' V! v6 G5 }0 }: p; Y& u
  1227. LDA #LOW(Play_Time_Pos)
    + B, y$ r1 Z; V( p
  1228. STA PPU_Addr,X
    : \  e. |6 t" ~0 M
  1229. INX
    , k2 ]+ K+ O# P1 G9 L
  1230. LDA #$080 t5 W+ O+ A+ R' z1 v% a# n* E
  1231. STA PPU_Addr,X0 Z$ @1 m' {/ x, N, |; B
  1232. INX
    6 D. ]7 i/ ]3 e- w/ D- `! `/ D
  1233. Time_Show_H
    0 h6 U% K9 U4 u6 u
  1234. LDA <Time_H; O+ l4 ~9 M$ R' V
  1235. JSR HEX_To_Dec/ P+ x$ `* e# h4 n7 W; K. a
  1236. JSR Time_Digit
    ; Q7 F3 T% `5 D5 x7 r
  1237. LDA #':'
    & |/ w8 V; W. x7 X; P7 g
  1238. STA PPU_Addr,X5 h2 V+ W; }/ }# G, B$ w# }
  1239. INX: Y# T1 m# t1 Y
  1240. Time_Show_M
    + O% A8 x; v( T' f: s0 U) K
  1241. LDA <Time_M, n, \% U  g  a) g
  1242. JSR HEX_To_Dec1 d& b- m/ i+ U" j' L* b5 D  x
  1243. JSR Time_Digit
    9 K0 ?- c( K. \+ q3 ^/ {2 D) _+ y% w8 [" j
  1244. LDA #':'1 n5 w% ^8 {% q" v1 N
  1245. STA PPU_Addr,X
    , h9 J& F# B( X, @2 w7 @
  1246. INX
    7 O( I2 \1 r# y0 T
  1247. Time_Show_S+ F+ }7 H4 C$ G1 P1 f0 ]1 q
  1248. LDA <Time_S4 @: h' a1 t' `) ]6 a
  1249. JSR HEX_To_Dec
    % S  [0 O  V/ {9 j- S% r( y
  1250. JSR Time_Digit. m% O3 H5 E6 ?/ Z4 B4 D, S+ o# x. n
  1251. STX PPU_Cur
    2 l% J( |) O! Y5 @; P
  1252. Time_Show_Enable
    : I$ h, p+ F, _1 s" R& n: W
  1253. LDA <Text_Disable_Flag! }) N1 ?6 B6 Q: J7 I  t& z
  1254. AND #TEXT_DISABLE_TIME ^ $FF
    9 H1 L  ]" }5 {1 r
  1255. STA <Text_Disable_Flag7 v6 @8 Z0 \0 ~/ a
  1256. Time_Show_End: J" k7 D0 {) Q7 `
  1257. RTS1 x7 l8 U/ i- a0 g
  1258. ; w8 W! S& o& v$ z' [3 Q0 [, v6 z
  1259. Time_Digit! o; W( U4 q: l: m' S: _1 k' h! Y
  1260. LDA <DEC_T: X& f% y' j2 W/ @
  1261. ORA #'0'
    ! }* G. ^9 f& c5 x5 V
  1262. STA PPU_Addr,X
    & ?7 m6 K4 p9 i4 n1 P( J6 _
  1263. INX' M! h& T, r6 ^6 {+ _
  1264. LDA <DEC_L
    # {% u6 J$ B0 S$ D
  1265. ORA #'0'4 B( `/ h. w. C, p
  1266. STA PPU_Addr,X
    ! I) T0 d) b; ^
  1267. INX
    5 u* e. D- Y9 g# `7 d
  1268. RTS
    4 h% @" c( U, X$ {; ~) F, y; h- Y

  1269. 7 d( v( h9 ?0 i3 g6 j7 K
  1270. ;==============================
    $ ~7 I, w: E  ~4 }% }1 B
  1271. Time_Count;计时
    ( s: L: Z3 B% v- l2 L
  1272. LDA <Music_Stop_State
    4 k/ a2 r/ J' {  h1 b# |  K$ B( f
  1273. ORA <Time_Wait_Cnt
    , q  r& P: v. f$ O
  1274. BNE Time_Count_End  T3 w8 q5 _" Z8 q1 a5 |' a$ E
  1275. INC <Time_Cnt# O( G5 u4 K+ X' ^' I
  1276. LDA <Time_Cnt
    $ v% T: x; @# ^4 l7 a
  1277. CMP #60$ ]1 I8 |+ x# [( w3 B# T
  1278. BCC Time_Count_End
    9 g# r" r) u/ k# c, j0 W. _' J6 V
  1279. LDA #00# @  L) V$ b& r2 y2 _
  1280. STA <Time_Cnt7 H; B. {( |; Z' t: X1 g
  1281. INC <Time_S* j6 f' b4 f! O0 S) q6 q* P
  1282. 9 D  ~, g/ \0 k3 E8 j( a  i
  1283. Time_S_Cnt+ @# X. _8 Z: {: E6 Y* {
  1284. LDA <Time_S! p5 ^9 _, r7 K- A7 J3 Q. [
  1285. CMP #602 {7 R" u# S% P
  1286. BCC Time_Count_End
    ! e  g0 W+ A: P) s# T( G
  1287. LDA #00
    + p) O, j. r6 d* m# J( M
  1288. STA <Time_S  d! m: Z6 O; q- B2 t% m& s5 k
  1289. INC <Time_M
    8 @8 o1 [+ f7 ]# W  Y5 m$ B6 n
  1290. ' @1 p; S& f* C! `- {
  1291. Time_M_Cnt. ?9 |2 g0 g8 R, K
  1292. LDA <Time_M
    9 a3 Q5 d( v3 h- r: }% p/ s/ Y1 K
  1293. CMP #60& \* Q+ G# u  e, c3 Z
  1294. BCC Time_Count_End- Z% _) m' M0 s  o. k! q
  1295. LDA #00
    # Q+ L. Z5 P9 b2 K/ }' o  `6 x
  1296. STA <Time_M
    2 R8 M3 M: m" x8 F
  1297. INC <Time_H) Z; p( v1 `4 g. @

  1298. ; Q4 A* V  t0 I7 @( t( B
  1299. Time_H_Cnt3 ~" U" G& Y# R! \" k% k
  1300. LDA <Time_H
    ; Z3 V3 q" B! J9 m1 Z( K% q
  1301. CMP #241 L8 t$ i. j( h
  1302. BCC Time_Count_End
    6 E$ S, W1 k* F8 H
  1303. LDA #00: d2 r6 ^! }. c1 D" _
  1304. STA <Time_H6 h8 H' X) D2 B% }# @& B

  1305. , _+ B: X* X) u* ]- r+ z6 \' j9 Q+ S
  1306. Time_Count_End- k2 p4 `; W. L2 R' U) q7 `# ?
  1307. RTS
    1 K, Q- \6 G1 B/ D0 L
  1308. : Z) ^9 e% S( Z3 ]; X* ?
  1309. ;==============================6 J0 l, {1 G3 b1 y( B' `" u9 T
  1310. Time_ReSet;播放时间重置
    ) d/ S& B; ^1 x6 U- |
  1311. LDA #$001 n5 j7 |% W' u
  1312. STA <Time_S' B" J  r, {& ^& p$ b8 D
  1313. STA <Time_M 8 ]9 j- @8 |. @- K, {* {1 H
  1314. STA <Time_H# C% i/ t" ?4 w) S) M* a! s
  1315. STA <Time_Cnt' q+ \% A- \  a! z
  1316. RTS
    6 g& S, P2 B$ C* P& P# w1 p
  1317. 7 b2 g: q0 s7 {3 r
  1318. ;==============================" a) N5 R* ]3 }; I- `- K5 \) N
  1319. Music_Bar_ReSet;音乐条重置
    3 H+ w2 R/ ?# m4 y! b! G
  1320. LDA #$00) K6 V  {# ^$ g! o2 |( U) o- X3 _6 O
  1321. LDX #$00% P, |. d- V  z! n* A1 }& i
  1322. Music_Bar_ReSet_Set% ^& \( [/ y+ B0 I9 \" B* n
  1323. STA Sound_Bar,X+ M2 S" H/ y& v* C: Z! M4 f. Q
  1324. INX
    2 y% Z' E. e/ A
  1325. CPX #$10
    + ]$ C. n$ C6 T
  1326. BCC Music_Bar_ReSet_Set
    4 u: W2 X0 g& f  M  D
  1327. RTS4 X- M/ e! A* H: o
  1328. " D  p; D4 l& p/ H' C0 N  k
  1329. ;==============================6 f, v* h+ `  F6 Z5 Z
  1330. PPU_Data;PPU数据写入
    1 a  e9 X! J) Z2 Y9 I) t4 z  `- Y! B
  1331. STY <Data_L
    " {$ R  ]# D+ d7 k% T5 ?; ?7 |& y1 U
  1332. STX <Data_H
    ) v6 t; I" `. i9 m
  1333. LDY #$FF. P/ M7 ~$ x4 w" t4 q
  1334. LDX PPU_Cur# V0 R$ F8 V1 L, u3 A: O% A" E
  1335. DEX
    # n4 m8 M9 O& h' M) N& ~/ w
  1336. PPU_Data_Beg
    9 Y- Q3 [3 a3 A5 V- e
  1337. INX+ {" x- A' D* a8 w( U( j
  1338. INY
    3 K- D1 l+ w5 z  N( F: |/ ~* E
  1339. LDA [Data_L],Y
    0 K; a- \' B# g) h2 N
  1340. STA PPU_Addr,X. N6 q$ e  ~! ~+ Q/ A
  1341. BNE PPU_Data_Beg
    % K% ?% @* Z2 B, f
  1342. STX PPU_Cur
      d3 i- u' i$ v, w
  1343. PPU_Data_End
    & K* E2 R: a7 d' x- v, |7 }
  1344. RTS5 r( K: }: H, s: Y
  1345. % q5 U6 L1 K5 l  G( t9 g7 w
  1346. ;==============================0 X& J5 ]* O# V  H+ q6 x- |, Y
  1347. Music_State_Show;播放状态显示3 y) z( T7 @3 Z/ d
  1348. LDA <Music_Stop_State
    ; ]8 q1 {  P& Z+ y
  1349. BEQ Music_State_Show_Play
    5 E( P9 d  H, r5 B" @, B( _
  1350. Music_State_Show_Stop
    . V# A/ H$ ?: }8 r. f( W% V
  1351. LDY #LOW(Music_State_Stop)4 B; ^, t) e# S$ E
  1352. LDX #HIGH(Music_State_Stop)7 T" a. U  y; t( a
  1353. JSR PPU_Data$ n/ d' K/ E/ ^" E
  1354. RTS' u8 ]' [3 ^. ?+ }) e; H2 l3 n
  1355. Music_State_Show_Play
      B' [' h, f: @7 A+ i
  1356. LDY #LOW(Music_State_Play)
    , X( M$ c9 w% l. n7 c. W2 `( M! @
  1357. LDX #HIGH(Music_State_Play)/ _- ^- C9 k* E$ R5 x8 u% i( S
  1358. JSR PPU_Data
    4 o; `1 ^  O" W" n$ D+ p; {5 |
  1359. RTS* a" s+ h9 g. |: z6 _1 C+ l: U; v
  1360.   G0 U8 {- x, t+ t  m1 M, y
  1361. .IF SOUND_BAR_SHOW_ENABLE  z! M& Y9 h  I! a$ _0 w: S7 `7 P
  1362. ;==============================+ r+ N9 T) b- e- Q
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    ; X" ^% O1 l$ ?  d
  1364. LDY #LOW(Sound_Bar_Text_Data)
    . O9 ?% l% i0 {2 d4 U: ]  p
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    . o6 I" N' Q* l2 i5 N; e2 s7 d8 p
  1366. JSR PPU_Data4 ~9 ]5 q# n# K9 ]6 Y5 j8 y1 n
  1367. RTS- l) e; R. b# [, v6 [; p

  1368. ) t3 d: P7 F% J$ R" G7 Z" ?
  1369. .ENDIF
    6 P2 H9 q  W- K7 V* V: }  b& [

  1370. + z) e& G* |# x& m2 j+ ^
  1371. ;==============================1 \8 u& H( x( V. J9 \" n( S
  1372. Set_NameTable_Attributes;设置命名表属性
    / T8 J) n. n& {$ D
  1373. BIT PPU_STATUS% I/ b9 f0 c, J  _8 y$ @. I
  1374. LDA #$23$ O' o' [4 S2 D' ?  W$ R9 {) m0 l) C
  1375. STA PPU_ADDRESS
    , F' R* A5 N# }$ I0 W; {
  1376. LDA #$C05 W9 Y, f/ r% L! r/ q9 f2 p
  1377. STA PPU_ADDRESS/ M! U) x/ q6 L' ]/ |: F
  1378. LDX #$00
    1 {" x; L' E: K+ n) `
  1379. Set_NameTable_Attributes_Write
    . R! O2 L0 G' u  p/ F( I* Z
  1380. LDA Palette_Attributes,X
    7 r1 V0 V7 _2 f( c
  1381. STA PPU_DATA$ K0 b# {% Y" F& r
  1382. INX4 a9 C4 ^8 y) ~. u; q/ R
  1383. CPX #$40
    * x4 ?$ g+ D9 F3 h% o
  1384. BCC Set_NameTable_Attributes_Write
    / z' @- x1 d! f- H5 H  q
  1385. RTS' m% _" i1 H* `/ |) i+ i) I1 u
  1386. 0 S9 J5 O9 E  l. ~; m- \
  1387. ;==============================
    * \8 J$ {* F6 h2 ^8 q2 N* Z
  1388. Set_Palette_Color;设置调色板数据% D4 T1 \7 h* o7 y4 C, ^
  1389. BIT PPU_STATUS
    . e0 i! C0 G0 }+ o5 a6 @% ~# A  _2 a
  1390. LDA #$3F
    . H7 E- ~& B+ z0 I7 c
  1391. STA PPU_ADDRESS0 S+ G8 z# z; U# k! r3 y$ v1 s
  1392. LDA #$00
    . g) d) J* U& F# B, o/ C
  1393. STA PPU_ADDRESS
    9 Z. s; x! E! N8 i5 n/ {; t+ r7 m$ T, _
  1394. LDX #$00
    , ~4 f, T5 U1 j* l- j1 r  w
  1395. Set_Palette_Color_Write
    4 S; X; w6 [1 H9 J0 A+ r
  1396. LDA Palette_Data,X+ K/ U# N- d0 D1 z
  1397. STA PPU_DATA( x' y; _# T) B# f+ P8 q8 J
  1398. INX& j4 J7 b' g+ D- j) ~" @% a: R
  1399. CPX #$20$ t0 V  f2 _% p0 ~- y- \  w* Z" H
  1400. BCC Set_Palette_Color_Write
    ' O6 X% u* {- E6 z) y& ?7 C
  1401. RTS% M( g% G+ t. k% {& s( z

  1402. 9 [" z4 f; C7 g1 z: V
  1403. ;==============================$ n& o/ u3 L- V4 V9 q
  1404. Init_Palette_Addr;初始化调色板数据
    5 G) L0 Y8 Z2 j$ U5 g
  1405. LDX #$00& o" d1 f/ h- y! D9 i7 {' o
  1406. Init_Palette_Addr_Write" a( |8 L# C. F' g- T' U! n
  1407. LDA Palette_Data,X
    % x* G8 Q# E! H  y4 f' R. z/ I
  1408. STA Palette_Addr,X
    # |6 P9 }, ]. x3 O" V+ i- j
  1409. INX) q. Z8 B, ~2 w2 ~) V
  1410. CPX #$20  Q3 I, Y$ y) ^/ Z
  1411. BCC Init_Palette_Addr_Write/ A: i' D) y- ?. W) Y* R/ x
  1412. RTS
    * m* C' F# ~6 x6 P" H# J

  1413. 3 z6 L% v( j" T; w2 J! C
  1414. ;==============================
    # f5 S3 f' }# ^4 Y3 ^9 c/ U2 l
  1415. Update_Palette_Color;更新调色板颜色
    2 b2 q" ^5 D. T$ F
  1416. LDA <Palette_Update_Flag
    7 m* V4 m# |. i* w5 [
  1417. BEQ Update_Palette_Color_End$ V7 U( Y4 }! K; x! U
  1418. LDA #$3F. {4 z5 M1 N. i3 w# x* ?: |
  1419. STA PPU_ADDRESS
    ( x8 J$ i" o. @6 ]4 S
  1420. LDA #$0C
    0 l- `. N. L( r# a
  1421. STA PPU_ADDRESS
    7 U. y. X8 |6 t( p* s
  1422. LDX #$0C
    " z/ W7 T' \- b( H5 {0 n$ e
  1423. Update_Palette_Color_Write
    ' A  Z( u! D. k( R( [  R! Z
  1424. LDA Palette_Addr,X* {$ z+ T9 j5 g6 _; V
  1425. STA PPU_DATA! ^8 n* Q# s0 Q& {5 U0 Q6 X6 z
  1426. INX
    2 O  _) M9 E$ p$ b6 _9 W6 ~
  1427. CPX #$14  u1 t  F9 c0 T! L& Q" O1 Z, {9 `
  1428. BCC Update_Palette_Color_Write
    8 B+ k' @* L: ]
  1429. LDA #$00
    # h5 p1 Z" o4 S5 V2 E9 s: S( k
  1430. STA <Palette_Update_Flag
    4 K  {( ?6 F7 H. R) W: P+ K
  1431. Update_Palette_Color_End& m7 q3 E4 ^5 S& H8 a2 L! h
  1432. RTS. R+ t6 X1 k8 r) F
  1433. 5 `, T4 X5 C/ G5 I  G  Q, p" n
  1434. ! S) R: E/ S- v: p
  1435. Update_Sprite_Palette_Data. M" i- p) d- T* N
  1436. .DB $21, e9 g; _$ d/ G1 ~
  1437. .DB $21  F7 Z0 [+ B8 t6 p* [. g
  1438. .DB $11( d9 y7 u4 d0 h- N
  1439. .DB $01" \+ ^6 t* |' `5 z3 W  B
  1440. .DB $01
      z! L/ i! `5 w$ w& S
  1441. .DB $112 R$ d# |( c# d1 @- G' @
  1442. .DB $21# b/ a' E  a& n4 t! i4 [
  1443. .DB $219 C3 V% {7 t! U8 E$ V5 B
  1444. .DB $119 `, g; C) Y' O$ t( `+ P1 a# X
  1445. .DB $018 \1 x$ R; f/ l# Z) M
  1446. .DB $11( G# f4 n9 A. k) @4 H
  1447. .DB $21  h$ {3 ~. Q) [: y" M+ H
  1448. .DB $21  F* ~" D, l2 a4 t
  1449. .DB $119 L/ g3 I2 o# T) o, E0 V. @# P
  1450. .DB $014 w- j& z' W; A( `+ \! h
  1451. .DB $11& |) v( L' D1 Y1 `4 t; C
  1452. ;==============================4 r7 ]- ~: v" S$ A- w( g
  1453. Update_Palette_Data;更新调色板数据$ @) G: {4 ~! X
  1454. LDA Nmi_Time_Count
    * h% M" S5 U9 L: {
  1455. AND #$08
    . `2 G6 P9 Z* L4 P( J' u( M( p
  1456. CMP #$08
    1 }7 _- s6 y6 q) ?- z  ~5 Q/ w
  1457. BNE Update_Bkg_Palette_Data
    ) [. O. \3 S+ o4 w
  1458. 7 k" w) d* H6 Q. a: A# {7 H
  1459. Update_Sprite_Palette_Data_Set& K4 @4 S6 Q; t7 I1 Q# B5 y
  1460. LDA Nmi_Time_Count
    ) G. ?5 K1 U; v# W- O6 f
  1461. LSR A
    : t' Z! H; v7 q/ N) ~0 B0 H8 _
  1462. LSR A
    3 w0 M! G& y6 r* ~3 i
  1463. LSR A
    # \$ I' ^5 @4 U! S! E
  1464. LSR A
    ) m' k$ f; n  M
  1465. AND #$0F
    & `5 B# `- ?+ v9 O2 ~
  1466. TAX5 F. t# I, F- v5 e& x+ |; i4 U0 M( Q
  1467. LDA Update_Sprite_Palette_Data,X
    # L1 I/ t, ^0 m* m- C
  1468. STA Sprite_Palette_Update_Addr# @% A% y% @8 n7 {9 E  H& U, ]! }( g
  1469. LDA #$01
    . m& F; m, |" I6 M
  1470. STA <Palette_Update_Flag8 T* r* E, Y) V7 ]# T" z
  1471. * S8 L8 p0 T5 t% N1 E7 C
  1472. Update_Bkg_Palette_Data5 @) n$ E' X, T& K0 |  d& ]
  1473. LDA <Text_Disable_Flag4 o& C/ C" `$ z
  1474. AND #TEXT_DISABLE_RAM0 `) e( S7 a7 C: h
  1475. BNE Update_Palette_Data_End
    5 S. g# a6 Y9 g
  1476. LDA <Music_Stop_State
    - D* V$ F. z2 O/ }
  1477. BNE Update_Palette_Data_End0 ]. H/ q, ^  [2 R
  1478. 5 d3 X2 v! S( n
  1479. Update_Palette_Data_Check
    8 E' e" c' }- x5 d* u; n
  1480. LDA Palette_Wait_Cnt0 E3 z' D4 U* R' L* m, z
  1481. BPL Update_Palette_Data_Check_Over4 \! z+ x$ q  E) q2 h
  1482. LDA #PALETTE_UPDATE_INTERVAL  N( ~9 f8 f" ~4 ^7 p, U0 j
  1483. STA Palette_Wait_Cnt& _$ _: y% \: S* {* n
  1484. Update_Palette_Data_Check_Over
    3 \8 W6 o7 v8 f  g" c  d
  1485. DEC Palette_Wait_Cnt! l: j& T1 r' [" B, t" f
  1486. BNE Update_Palette_Data_End3 Z# `" w% H: ^. q& {

  1487. 0 v- K% `9 M  T' i! e4 u) o
  1488. LDA <Text_Disable_Flag- X& C! i: {: Y. `
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    4 ?( y/ _* f+ Z: ~. K# B; ~
  1490. STA Text_Disable_Flag
    8 {4 P7 d! K4 ?! G/ R* w" U2 S( ^
  1491. INC Palette_Update_Flag
    2 x( D( {) _% A( ?; C' r
  1492. 9 p) a$ A+ A3 f* a- O+ T
  1493. LDA #PALETTE_UPDATE_INTERVAL+ n4 _2 d5 v: h% n6 v, o5 D; i
  1494. STA Palette_Wait_Cnt
    . i' v) E6 W* X1 j
  1495. 3 I' [8 ~5 e; s. [  e* Z2 B. K* n3 \
  1496. LDA Bkg_Palette_Update_Addr6 j# I5 z( {, Y7 C
  1497. CMP #PALETTE_UPDATE_MAX  S. n7 X8 b: l3 J* l" a
  1498. BNE Update_Bkg_Palette_Data_Set
    / D8 `) I) P7 m9 [( @
  1499. LDA #PALETTE_UPDATE_MIN - 1
    7 I! H6 I0 ^2 ?4 v
  1500. STA Bkg_Palette_Update_Addr
    5 t3 {% @' `- b! ]# c
  1501. Update_Bkg_Palette_Data_Set
    ' `! g# Y, J1 z1 c) Z
  1502. INC Bkg_Palette_Update_Addr2 O# @, Y* W* k: U9 v

  1503. , U# R; y8 [5 \/ H- N
  1504. Update_Palette_Data_End
    " O1 [( n7 l- ~. z3 p& l! J2 Y, h; Q
  1505. RTS9 ]: i! |7 J% ^' e( q7 ?+ O

  1506. 1 }: f: _5 S# l$ t+ ^% j: C
  1507. ;==============================
    4 l8 y$ H6 N4 g, H  S( p
  1508. Show_Music_Text;显示静态文本
    . d) Q# y5 ]- J& X
  1509. LDX #$00
    : W$ ^, h5 z' u, U
  1510. Show_Music_Text_Set" F' s3 K; n4 S  e
  1511. LDA Static_Text_Data,X5 O& b" K* K1 z
  1512. STA <Data_L( O; [# M8 e, {+ k. x
  1513. INX. t. @$ |& `" w2 l: c0 |* i+ v- b. b$ X
  1514. LDA Static_Text_Data,X  A# X3 X& k- [; C3 U
  1515. STA <Data_H; l; \2 ^3 E- E. H( y
  1516. INX. D; V4 f* o4 |" ^
  1517. LDY #$00% W( K/ s/ A  m* W
  1518. LDA [Data_L],Y7 Y! e" i3 }$ D! g. L
  1519. STA <Data_Cnt, a& E8 B. y9 G
  1520. DEX
    , a6 s. ?  {/ N
  1521. DEX
    ! t8 R7 d, V% D5 n" b
  1522. LDA Static_Text_Pos,X
    / z, \0 ~" F7 ?
  1523. STA PPU_ADDRESS
    & M2 @. n' T0 Y1 Q$ `
  1524. INX2 V* h/ O9 p- @) L
  1525. LDA #$20
    ! I0 t9 p! C. c4 y6 m( D* Z- n0 J/ H
  1526. SEC- ^7 K4 A( e5 o' O1 o& |, S' [% t  @
  1527. SBC <Data_Cnt& j8 G% }6 H( q, L
  1528. LSR A
    8 y1 O8 F' n9 ?( J: v1 ?
  1529. STA <Data_Buf6 |8 C' q- u9 z2 h! o
  1530. LDA Static_Text_Pos,X& H; D. X/ x  i) w
  1531. AND #$E0" G# F. b) P+ V# D7 I' d
  1532. CLC6 x5 o8 b5 S# v6 _) [+ n2 z8 @8 T
  1533. ADC <Data_Buf! Z: K) `2 ?; @
  1534. STA PPU_ADDRESS. u( q6 _( O0 H  o( z+ ~
  1535. INX) D' `3 g+ g0 J7 \& O' [- q: ^
  1536. Show_Music_Text_Set_Write4 r" D" v0 h$ e! u! [1 `
  1537. INY
    ' f: a  C3 r* j& D8 `
  1538. LDA [Data_L],Y
    . ]! o. o1 N9 T6 v0 P
  1539. STA PPU_DATA
    $ z( {6 n8 s2 E& ~% h, T1 U- s2 D
  1540. DEC <Data_Cnt
      h. G. V; x+ W
  1541. BNE Show_Music_Text_Set_Write
    0 ~9 N% i+ ]4 [" g3 l
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos" X0 T" Z4 w7 Z9 S9 T
  1543. BCC Show_Music_Text_Set
    ! K! j7 N6 ~- V/ t
  1544. RTS( m9 r: _) [+ P, O

  1545. 9 D( {! F6 C0 _/ r* R
  1546. ;==============================
    * {) g" G# u" K
  1547. .IF Track_Name_Pos;显示曲目信息
    ! f3 n& s- j! {

  1548. - M# C5 i; [! L0 H2 C( F3 U& A
  1549. Clear_Track_Info' f- s; x% W, {! p5 n; ^$ u5 N
  1550. PHA+ o1 ^9 w' s0 z3 C5 }8 t3 c: M
  1551. LDX <Music_Item_Cur
    + ~1 K) Q( k: B6 B& O" d/ ?2 ]
  1552. LDA Track_Name_Addr_Flag,X
    5 @% @9 d: s, _  K) n! ~
  1553. BEQ Clear_Track_Info_End_Ex
    3 W5 E' J5 `% f+ v5 V& m
  1554. PLA: @/ S9 @( T  A. P% X

  1555.   c. C( A. g" D/ i
  1556. LDX PPU_Cur" `" n/ L. H3 v- l2 I
  1557. PHA: n( k, G8 B6 [
  1558. LDA #PPU_MODE_CNT_CLEAR0 G0 h' o+ m/ k& f$ Q) L( R
  1559. STA PPU_Addr,X
    5 ~5 ]$ ?; \# I+ a" K5 l
  1560. INX
    0 {1 B1 C" b; n9 u/ b
  1561. PLA
    : H# b, J8 ~, T) l, `7 t9 v
  1562. JSR Show_Get_Track_Name_Center_Pos
    ) R9 C* s+ y9 j, w( s
  1563. STX PPU_Cur
    / M" n. L& m& Z" ]: G$ _
  1564. Clear_Track_Info_End
    ' L7 F& X* r* [" b
  1565. RTS' a# Q  x8 h  _# G8 P
  1566. Clear_Track_Info_End_Ex
    # w$ J! b. k3 P+ h" @
  1567. PLA. i: O1 V1 C) y$ L  D
  1568. RTS2 f# N( ], q( L( q# I9 V' {

  1569. 9 t" n* b) T0 u# ^9 P, @5 O6 \
  1570. Write_Track_Info
    1 u; O  A5 y2 o9 V
  1571. PHA
    4 Z  S1 {" p6 R) p4 w$ m
  1572. LDX <Music_Item_Cur8 J) n7 r" u7 ^* B  ^& S1 o! c
  1573. LDA Track_Name_Addr_Flag,X
    9 `  q' P5 @; Y1 p4 B6 V  G: v. }: U
  1574. BEQ Write_Track_Info_End_Ex
      V8 a; j8 ~$ F8 k9 @  ~: N
  1575. PLA% C# b5 o/ b) H4 K- \, [
  1576. * B, @# K1 }- o5 W( x- A8 n
  1577. PHA
    ) Y% S; }- `" r2 H* T" a9 }3 w0 `
  1578. LDX PPU_Cur
      M, ?0 `, o* |$ V
  1579. LDA #PPU_MODE_CNT_LINE. @& Q! |2 m( h2 R; t
  1580. STA PPU_Addr,X* Q1 o2 Y0 f" ], D2 J( K$ S
  1581. INX& N, H. W0 C; C/ [
  1582. PLA
    2 ~- c0 M/ w) z  ?/ w# O
  1583. JSR Show_Get_Track_Name_Center_Pos
    . U+ i0 D1 P+ r& v3 k& x8 n
  1584. Write_Track_Info_Data& c+ H9 w$ Y0 y! y: i8 O
  1585. INY0 O; s; [$ ~/ A/ G$ _! g: x
  1586. LDA [Data_L],Y
    3 s3 g0 S* D0 ~, c7 ?: ^' i
  1587. STA PPU_Addr,X0 a3 h; i# I, C* k7 r/ F
  1588. INX* y2 s+ a3 m7 F7 X! Q% ~) }: o; h) _1 `
  1589. DEC <Data_Cnt
    4 o" {. H+ v+ D
  1590. BNE Write_Track_Info_Data
    + m! v0 Y. Z& |' |9 ^
  1591. STX PPU_Cur
    2 g' {" |8 F1 H
  1592. Write_Track_Info_End
    # `- g2 K1 d2 M$ ]
  1593. RTS
    % D; [: N" U1 P9 h, Y+ q3 D
  1594. Write_Track_Info_End_Ex2 _" m/ [2 {5 P6 I, [
  1595. PLA
    1 h, L7 ]5 V1 P; o
  1596. RTS
    " H' m6 x3 i; c# B' A
  1597. ! K& Q# a+ k/ \7 b: q9 |' i& O
  1598. Show_Track_Info
    8 l; p7 r7 c( w. U& U* [
  1599. Show_Track_Info_Clear
    " ~# W* X( g' Z# K
  1600. LDA <Music_Last% u) [+ m7 o$ i2 a; }% i3 ?
  1601. # w- g, q8 H$ ~; o% \2 q5 B# _
  1602. JSR Clear_Track_Info
    % @& Y6 I/ `9 v" m

  1603. & G  R5 \4 V& T5 [5 m# m+ K5 [
  1604. LDX <Music_Item_Cur5 ?! D1 u! j  Y4 g. o% [/ Z
  1605. LDA <Music_Cur,X9 D% r4 i0 p2 r7 k6 R4 H8 S
  1606. JSR Write_Track_Info
    - z/ R; T+ t' A1 A  e1 y
  1607. RTS
    ! V5 J/ p" z* g& y) X, D  O9 i
  1608. ; X' v& h; Y( e. F* i
  1609. ;==============================
    ' R( @( f7 V! \6 F4 O6 B. b
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置, Y) S" _& g* _
  1611. ( {$ c6 y# K1 ^3 u" y4 s8 V0 F
  1612. ;取出集合名索引
    1 @' m& v" T% H# [! y& N
  1613. PHA
    9 o, ]$ f9 W' c5 r
  1614. ; V* E4 I( E& f# n$ T, ~
  1615. LDA <Music_Item_Cur5 p4 q1 i9 ]5 Y% r& p9 ]
  1616. ASL A
    ; |$ ]( M  D) ^
  1617. TAY
    ( X# _2 J" |' O, |
  1618. LDA Track_Name_Addr_Port,Y
    / W. d' z: R& F# v2 V4 B
  1619. PHA
    . F0 i& b8 D, u- X/ l& a
  1620. INY) C+ q( u2 h/ x: H9 c
  1621. LDA Track_Name_Addr_Port,Y: e# R0 T5 v7 E/ x; r9 _; c
  1622. STA <Data_H
    ' x7 t& Q# \. S+ v" i+ ~
  1623. PLA3 `% L7 m1 D7 s8 _9 e
  1624. STA <Data_L
    & C$ Q' l5 }: u6 g
  1625. ' N  y  O7 \* C
  1626. PLA% S2 h' z. u- x, `# a

  1627. $ z( d/ F1 R. u" S
  1628. ASL A
    . U1 V. C& T0 Y9 a. u0 ]4 l- T8 F
  1629. TAY# H8 V2 Q2 ^. D: w6 @& A! r& [3 J" Y4 T
  1630. LDA [Data_L],Y0 w  I& n$ x; J. }3 R2 d
  1631. PHA
    8 K, _7 x5 Q- d5 D) r
  1632. INY8 c3 Q0 j1 c; D# l5 r& _
  1633. LDA [Data_L],Y( [3 \- C. L1 J3 r8 P& y
  1634. STA Data_H
    / ]( p/ S5 s& C8 k: y1 q! t, `
  1635. PLA
    ; n. G2 w" V2 c
  1636. STA Data_L6 p2 J' j  j# f

  1637. " F! v* I5 m& w  L
  1638. LDY #$000 q& o4 n% ^- S% g4 P
  1639. LDA [Data_L],Y
    1 d! O- O; D) C( g
  1640. STA <Data_Cnt
    8 y+ e& N, q$ s2 z
  1641. LDA #$20
    6 D, s2 G- d6 s/ O
  1642. SEC# X1 h3 U  X3 o* p5 V3 O8 ^3 t
  1643. SBC <Data_Cnt
    $ q- |1 s( A# |( Z5 v
  1644. LSR A! K. [" x; k) Z6 b4 b! H6 x+ h. A+ s
  1645. STA <Data_Buf+ ~$ V# M! s8 R. Y* Z
  1646. LDA #HIGH(Track_Name_Pos)& F) l7 d* G  U- }( u7 H
  1647. STA PPU_Addr,X# }# F# b6 [2 U, R4 p6 v: a0 K- Z
  1648. INX
    8 @! s# c; _% Y9 Z  p% ?
  1649. LDA #LOW(Track_Name_Pos)! j5 ~: O, T" n& Z; K/ j
  1650. AND #$E04 f' P8 Q9 t) m3 _* I; o" y" |
  1651. CLC1 _  U0 M1 b- X8 v. \" M9 e
  1652. ADC <Data_Buf
      U3 j2 U( \; W
  1653. STA PPU_Addr,X
    ! `# O3 Y, ?$ m% o5 \+ S$ G( N: D- K
  1654. INX3 J5 @3 T5 ~; D3 m
  1655. LDA <Data_Cnt% L. }# p* }2 L5 P
  1656. STA PPU_Addr,X
    9 H1 \+ T8 Q! I5 b4 e& @& d% A
  1657. INX
    3 l: a) m% e% @1 V
  1658. Show_Get_Pos_Center_End1 V: z# q+ C1 m- L* y3 }
  1659. RTS8 Y9 G+ Q/ ]+ o" q& D7 |
  1660. .ENDIF
    9 b1 y, A+ S# l3 h8 }' A- b

  1661. # b  p" B2 r7 J+ q
  1662. ;==============================8 _- |& A8 v7 r5 \& N
  1663. ;音乐端口清除( O. R" B/ r* X7 ]; t9 u$ U+ c. Y
  1664. Sound_Data_Clear
    . p( N6 n7 r* D4 |  @
  1665. JSR Sound_Port_Clear
    # Z  V. X! ]' Y+ |9 G! |
  1666. JSR Sound_Ram_Clear% h+ g2 D+ s+ r1 m- q! L
  1667. RTS
    ( |+ i; k9 a' h  H* g/ M
  1668. / B1 Y% E1 y6 m8 {) P9 g
  1669. ;==============================
    5 B; @3 |. C0 t7 B" D- ?7 m' }
  1670. ;音乐端口清除
    . A) |* i# t" H
  1671. Sound_Port_Clear/ H, H/ ^4 z0 a: W8 X7 M  l7 m
  1672. LDA #$000 ~4 x8 Z" b6 z
  1673. STA APU_STATUS* _& V. U7 k, X% y5 s% Z& o  D  Y
  1674. LDX #$00
      i1 T, N1 U6 u6 y6 @5 {( n" o
  1675. Sound_Port_Clear_Write
    / W; ^0 p2 H8 L& `: H; K
  1676. STA $4000,X' M6 f* H+ f( K4 O+ L& G
  1677. INX
    $ [( s* @( \( F: ]7 c6 K6 o
  1678. CPX #$14
    ' m8 P+ B- y* ]
  1679. BCC Sound_Port_Clear_Write
    5 N% j) W; i3 r
  1680. RTS7 ]+ I- E) g/ V) |! @3 |- }

  1681. & \5 X6 S7 ~5 \1 q. m
  1682. ;==============================
    + R  u9 g( @3 n" x6 A
  1683. Sound_Ram_Clear;RAM清除
    5 W7 H4 U" H" J, k3 ~
  1684. LDX #$00, I+ w( j% L. o1 b1 a1 z
  1685. LDA #$00
    ( d$ X' N. L# I
  1686. Sound_Ram_Clear_1. c0 k# @# w' Q" A1 W
  1687. STA Sound_Ram_Addr_1,X
    * N2 z4 L7 E* `( I8 m6 g4 q
  1688. INX- z, B: T% g% d5 x2 x) ~
  1689. CPX #Sound_Ram_Addr_1_Size
    - {. J; L" y5 p- m9 F
  1690. BNE Sound_Ram_Clear_1( d; o% p% b. X, K" L& m
  1691. LDX #$00
    3 B# ^* Y. g+ W" K
  1692. Sound_Ram_Clear_2+ i+ I! C+ k0 N, S* L6 Y/ X. o
  1693. STA Sound_Ram_Addr_2,X
    ' q% g: J* T$ k$ g7 [) D
  1694. INX& j7 {; j2 l5 d- F
  1695. CPX #Sound_Ram_Addr_2_Size+ A  Y- v4 M1 S  S
  1696. BNE Sound_Ram_Clear_2
    + _9 Z! [9 w) h4 f6 i
  1697. LDX #$005 F3 \3 \7 Z8 N$ O; F
  1698. Sound_Ram_Clear_33 u/ |' o! @" g: l
  1699. STA Sound_Ram_Addr_3,X
    % N; s6 @9 \2 q- e( b& c4 g
  1700. INX. |% n% {! C3 j% x7 z  Q3 x7 N
  1701. CPX #Sound_Ram_Addr_3_Size. {$ j3 h0 b+ |3 @
  1702. BNE Sound_Ram_Clear_3) l" @% e) k+ ~# G" c% t7 e
  1703. LDX #$009 r4 c& T4 R" @" H. p
  1704. Sound_Ram_Clear_4" a* L. m; z+ k  |5 Z3 m
  1705. STA Sound_Ram_Addr_4,X
    % O$ F& j! {& C+ I1 `7 i( Z
  1706. INX
    5 l; F& K+ a- N! P; ]0 U
  1707. CPX #Sound_Ram_Addr_4_Size
    & V" r2 w- Q; {9 x' p
  1708. BNE Sound_Ram_Clear_4
    & v: V) H- E: V9 d
  1709. Sound_Ram_Clear_5
    9 h: E. x# q. u
  1710. STA Sound_Ram_Addr_5,X* M7 t0 I+ q. M) U8 M: W
  1711. INX- t0 q# b; R% I% F$ U" Z
  1712. CPX #Sound_Ram_Addr_5_Size* S( C& J1 O1 `* Q% i2 v0 N; ^, W
  1713. BNE Sound_Ram_Clear_5
    % y( s) ~0 f0 C5 \$ [5 m1 R, o  Z
  1714. RTS' }) |7 i* G) E2 g; {& }& x
  1715. 8 a: [/ O+ R1 M
  1716. Get_Music_Collection_Name9 v( C$ z8 R/ L0 C0 D- P
  1717. PHA
    2 v9 g5 U) p' o5 u+ m
  1718. LDA <Music_Item_Cur3 P+ h$ x" q0 O9 N2 X
  1719. ASL A. c% }" S' c( S9 g4 D+ R
  1720. TAY
    ' X6 ~5 K  V. |2 J; I1 k3 W6 g" k
  1721. LDA Music_Collection_Name,Y
    6 J8 _" `# |' Q7 x8 h
  1722. STA <Data_L
    , m* Q/ D: V& G0 d2 s0 h% G
  1723. INY
    3 r4 ?: n& N% L% z! P+ }3 @$ f
  1724. LDA Music_Collection_Name,Y3 j. L+ W* s! m& c( B
  1725. STA <Data_H
    / E$ j6 E& S' C1 Q( E+ M3 ~/ H
  1726. PLA
    / G! s: O2 s2 I& p7 v
  1727. RTS3 S; [) r5 X' p
  1728. 7 a; \, ^# Q$ V$ }8 Q2 z
  1729. Set_Sound_Total! a" i. q( b  w. I
  1730. LDY <Music_Item_Cur
    ; d. W7 O! f  }
  1731. LDA Sound_Total_Port,Y! z2 s# \, y$ Y% J/ S/ V8 r. y" C
  1732. SEC4 W+ K' u7 p$ M0 p  r1 F/ N
  1733. SBC #$01
    % w( p+ N8 L% G8 _. R+ m* a9 @5 A
  1734. STA <Music_Total
    % M9 x' d( {" h" m# F* S/ D( p
  1735. RTS
    * N. G$ P# [; t' B# R" }7 ^) q
  1736. # m7 N# O  ^7 q+ k
  1737. Get_Sound_Start! \; z0 }7 p1 y" B- m5 g( R% D- P& g) ^
  1738. LDY <Music_Item_Cur. I) s6 z  b* E
  1739. LDA Sound_Start_Port,Y
    7 }  @4 }3 L+ b+ @$ j- s& E/ U, w
  1740. RTS& A3 a9 v, E1 n) N) N& z

  1741. 3 H: X" B) M0 x# a# n( B4 |
  1742. Set_Sound_Init_Port
    " N# {- X9 o6 ]0 p
  1743. PHA
    3 C% [5 W# T1 b6 {" i& J
  1744. LDA #$20
    6 W9 D* J1 F& b' X4 J% d( q6 v
  1745. STA <JSR_Addr_Op
    3 N) t0 i" ?6 f9 E
  1746. LDA <Music_Item_Cur3 t+ L3 q% a- w0 F% f/ v+ E. G
  1747. ASL A* P1 m2 }9 k/ e6 G; i6 }4 O( c
  1748. TAY# k4 z. B) |  z4 ^+ H7 h
  1749. LDA Sound_Init_Port,Y
      z- c" E; A0 B4 u6 q3 L# b2 M6 Y
  1750. STA <JSR_Addr_L
    6 m6 a5 k3 n; S
  1751. INY- i+ @6 K: P# x. M" y
  1752. LDA Sound_Init_Port,Y
    # a7 t( O& H9 O# O" j- o+ S
  1753. STA <JSR_Addr_H
    ; Q! ^6 w; m( Q8 {3 C! L
  1754. LDA #$60
    / H4 b/ k9 S0 l8 T) c+ w
  1755. STA <JSR_Addr_Rts
    2 [% R: o$ V( g
  1756. PLA5 l2 M9 M) H8 X0 }
  1757. RTS. m  h4 J5 ]8 F4 b. D
  1758. ! |7 q) l! [+ k
  1759. Set_Sound_Play_Port" _/ Y& v" ^0 M0 p; [7 F
  1760. PHA
    ( U2 d2 L* l/ q1 Z- Q# J4 V
  1761. LDA #$209 O$ T' S/ ]5 L, o
  1762. STA <JSR_Addr_Op" n9 N+ c' r& Y- B, z
  1763. LDA <Music_Item_Cur( P- @7 [1 T" i7 K) ?! L* a
  1764. ASL A& i% B; u2 p* a# @
  1765. TAY* Q! z! y) k  H2 K0 L$ J, w* H( @
  1766. LDA Sound_Play_Port,Y
    - `' i: ~& O6 R2 r1 H. t1 e
  1767. STA <JSR_Addr_L
    $ I( L+ M/ h/ J
  1768. INY
    7 B' f5 L/ {/ ~+ y
  1769. LDA Sound_Play_Port,Y; F2 \8 s  N+ ]6 R- ~* m
  1770. STA <JSR_Addr_H" M  D- @: v" s" s3 b+ _7 s& ?
  1771. LDA #$600 s4 Y( `. {7 f8 m. y! F
  1772. STA <JSR_Addr_Rts
    % o6 M- @4 w, t5 E2 }
  1773. PLA
    : R- h3 ]0 `/ _5 k. t9 `
  1774. RTS# C; }3 y1 R) ~# W; {
  1775.   {& l7 Q! f. s, \2 U
  1776. Set_Sound_Reset_Port
    5 l' l2 X6 O1 z; o9 @  N+ p
  1777. PHA
    + w8 Y2 }1 H' S9 g; ]( k' D' z
  1778. LDA #$201 E4 R7 e" ^: E1 Y8 {
  1779. STA <JSR_Addr_Op
    6 O1 n* w. }. O. m* O
  1780. LDA <Music_Item_Cur/ [7 Y: r4 b5 P. \
  1781. ASL A' N$ z& l4 K- q* |. T5 f
  1782. TAY
    ( Q6 u! E! l! z
  1783. LDA Sound_Reset_Port,Y) F( _: l0 w# J. R, O5 i
  1784. STA <JSR_Addr_L! ?. g$ y. k9 Z) C1 P8 k
  1785. INY, _- J% |  m$ Z
  1786. LDA Sound_Reset_Port,Y3 p1 A: _3 u9 |6 n/ z' c7 B
  1787. STA <JSR_Addr_H
    # J& l# ^: n  q- U* o5 X8 V
  1788. LDA #$60, k% n6 ^  |3 T) [
  1789. STA <JSR_Addr_Rts
    9 P  u, j, i( f  m/ S8 R9 V
  1790. PLA
    & X3 X* E& W; e( K: ^
  1791. RTS
    2 L  n# Y+ k0 q

  1792. 3 q9 D1 I+ }( R# y
  1793. ;初始化音乐bank# C7 Q; j/ n: @& i9 {# ]( W+ k
  1794. Init_Sound_Bank
    3 G) @4 o, q) ?) O
  1795. LDY <Music_Item_Cur
    ; s. K! E- l3 x3 ?9 g% Q
  1796. LDA Sound_Bank_8000,Y* H  A" Y6 _) i! G! i0 j! A
  1797. STA <Music_Bank_8000
    " |. {1 W7 ?8 `
  1798. LDY <Music_Item_Cur
    1 k. m6 D" ^: a+ i7 k8 ]: }
  1799. LDA Sound_Bank_A000,Y$ s; c3 w0 L. D  M
  1800. STA <Music_Bank_A000
    % {1 F5 R/ w- F  N
  1801. RTS
    / u/ P# V+ j/ H$ u. F8 e

  1802. : g2 r) q/ [4 p7 g$ ~
  1803. ;==================================================, s/ s% x- @7 N) O: Z; W( P
  1804. Sound_State_Reset;音乐状态重置2 v/ K+ t0 C& Y: v+ N
  1805. JSR Music_Bar_ReSet        ;重置音乐条+ O: e9 D  ?, \4 D+ F
  1806. JSR Time_ReSet             ;重置播放时间; K) q4 z$ v/ m6 I# U
  1807. 2 F7 \7 n; B* i+ j
  1808. LDA #$00- `1 k1 S3 J% O
  1809. STA <Music_Stop_State
    # [& C5 i0 n  Y/ S% A: f  y; o1 P" I; z- d
  1810. JSR Music_State_Show       ;显示播放状态
    0 u/ |8 w, N3 ~  |$ t, G( [8 k
  1811.   p# s1 P0 I' t7 D+ k  A3 t% I
  1812. .IF Track_Name_Pos. c( F% T+ S' s4 y6 `1 G. |! q
  1813. JSR Show_Track_Info        ;音乐曲目名显示# @6 D4 \! H0 O0 i9 A# @% i
  1814. .ENDIF
    ) i* P4 s( j9 ~2 }3 f# C
  1815. 7 e4 I) {/ [1 v& y% {
  1816. RTS$ w! f. T, V" ~# j3 ^6 O) H
  1817. 1 |7 F" b' s. r" a& V' n; W- W9 _
  1818. ;==================================================" |: \3 g/ J2 Q5 f  [
  1819. Sound_Init_Proc;音乐初始化处理
    . o2 P4 x, E! m* X/ s' R
  1820. PHA
      m' Q1 t+ h  C) [# M& @
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址! F! p  R/ b5 G, d( g5 l
  1822. LDA #$00
    7 a5 Y$ ?5 r* d4 |
  1823. STA <Scroll_H               ;重设水平滚动
    " S+ F7 y/ ~, M6 u; p% C3 w
  1824. LDA #$0F
    2 L9 R: _  y# S5 z4 [9 P
  1825. STA APU_STATUS
    ) D% s1 Q! \3 {3 o$ ^$ Q4 z
  1826. PLA
    7 `2 T  `* W% q1 P! a
  1827. JSR Sound_Init             ;音乐初始化
    4 A$ h! ]+ S2 z- X
  1828. JSR Sound_State_Reset      ;重置音乐播放状态- A: D& ?8 u( ]# C9 ~6 h! B- P
  1829. RTS+ C" q- s7 B% K3 R+ Q( _
  1830. ; b9 Q" s: s/ B& P( D& I' L
  1831. ;==================================================+ O/ }7 Y% i2 f) c& g
  1832. Sound_Play_Proc;音乐播放处理
    3 ]5 B" A0 E, [7 R* {5 R
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址8 @8 A0 z. n; {% A/ x
  1834. JSR Sound_Play             ;音乐播放
    : h* y! p( R+ C$ A, m& D
  1835. RTS: u+ E6 d$ n3 \7 L% `# [
  1836. ; w5 c1 k/ d/ L4 ~0 T7 e" E
  1837. ;==================================================8 t/ h! \/ y6 X% Z/ K
  1838. Sound_Reset_Proc;音乐重置处理( d4 |5 k2 s' L8 r" K8 J( P' I
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址* N/ i# D) U+ I- h, m( [
  1840. LDA <JSR_Addr_L1 m0 K# U2 u" R% K( }3 ]
  1841. ORA <JSR_Addr_H, y3 S) l  l; {0 B) J
  1842. BEQ Sound_Reset_Proc_Default
    8 E& S1 m" a; t
  1843. JSR Sound_Reset            ;执行音乐重置
    & v& `; |- E8 e$ j
  1844. JMP Sound_Reset_Proc_Init_Sound7 ~  r* j5 D! s# P
  1845. ) [- M6 f: |; L
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理. y6 `  ~8 n, c
  1847. 3 V0 W% ]5 Y% [' Q! p4 P+ e
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断6 G  z( v, y* w0 M! m( {* y
  1849. LDA #$00
    4 Y# o0 i4 s4 f
  1850. STA PPU_CTRL
    1 T+ _3 m/ ]: T7 V
  1851. / E7 {( B3 j# k% _- c- F! `+ ~* g! |
  1852. JSR Sound_Data_Clear0 e/ \) i+ g1 q* J. w# c! a

  1853. / q& a7 B3 \" S3 i; q
  1854. Sound_Reset_Proc_Default_Wait
    2 U- }* u  ^, v5 k" F1 x
  1855. LDA PPU_STATUS/ j* H) p/ m" T9 e6 o8 L
  1856. BPL Sound_Reset_Proc_Default_Wait
    ! u/ t9 b3 @8 }" D% C

  1857. * R) x' O& r; M
  1858. LDA #$00
    / Y1 |4 A) q3 P' r
  1859. STA PPU_ADDRESS
    7 X1 v0 c% t6 R1 _5 e' T
  1860. STA PPU_ADDRESS' R6 U; d3 ]4 t" S
  1861. STA PPU_SCROLL! z# b6 N( o9 k( @% o
  1862. STA PPU_SCROLL6 ?0 v! R  o; m& J3 c! Q) r& W
  1863. ( H( k/ @2 @+ W/ t9 I  c5 f( g
  1864. ;恢复PPU控制
    0 w- q4 I$ u5 |( L9 s$ K0 ?- }
  1865. LDA Screen_Ctrl8 k& E5 R1 z) p
  1866. STA PPU_CTRL: L2 a4 [# W' @- ]( }2 W

  1867. ) H/ Z6 Q& A. K  P
  1868. Sound_Reset_Proc_Init_Sound! E/ y3 M8 f; A$ F: K
  1869. LDA <Music_Stop_State
    8 k; y- o4 f+ z' w
  1870. BNE Sound_Reset_Proc_End2 ?1 O6 `% H/ n2 b* x4 ~
  1871. LDX <Music_Item_Cur: Z$ S+ U' l( I/ E: E1 H( W
  1872. LDA <Music_Cur,X1 S( F- S! A0 T8 v. m' ]( L
  1873. JSR Sound_Init_Proc
    ! _4 e( O5 k& V, g( r) o% E4 Q
  1874. Sound_Reset_Proc_End# k0 A3 a2 d3 |3 Y; {1 d) G- P
  1875. RTS
    * I3 W* i! ^  e' f) Q( v( @7 y

  1876. 9 `* V: ~8 R; d9 T
  1877. ;==================================================
    9 r; A% _1 v+ U* _9 x$ ]2 x% ^
  1878. Clear_Item_Text;清除页项目
    6 a6 O4 O# K) b( T' _: _$ d
  1879. LDX PPU_Cur* c1 V- L8 c. V5 w- Q+ I6 L) r
  1880. LDA #PPU_MODE_CNT_CLEAR& G% m+ i/ ]% X5 i3 @  Q
  1881. STA PPU_Addr,X  v; U* K# ^& i, ]4 L
  1882. INX
    6 j" t3 B" C) G

  1883. % A( E8 _# ?& H6 h3 l" o# G! w
  1884. LDA <Page_Last
    ) d7 z; P7 {  U/ s
  1885. SEC
    * K0 C6 l# E; W7 i! `
  1886. SBC <Page_Last_Index
    3 l: K/ ?" M5 i
  1887. ASL A
    - n7 Y3 B4 S" ?+ |' ?8 `5 M

  1888. 1 x9 r' A0 G) D6 Y+ Q6 M
  1889. TAY4 G8 t' a& N' ^: f' _
  1890. LDA Item_Pos_Data,Y8 I& m% K/ S- `" p7 ~/ U$ p
  1891. PHA
    % q* o  {4 K! Q
  1892. INY( p6 F- ?( _+ B3 o) E  _4 T, `. L
  1893. LDA Item_Pos_Data,Y
    " D+ ]9 k7 D/ q: l% t, d
  1894. STA PPU_Addr,X0 d. ~# G, J/ w3 G
  1895. INX7 [* b; G! v2 J! [( N
  1896. PLA
    * {8 \8 {. [3 m  }  p4 u8 w0 S
  1897. STA PPU_Addr,X
    9 |$ Z, Z# {7 ~1 ]% c) S
  1898. INX
    + J$ v5 a) n3 h

  1899. 6 p* o3 d( V( }" U, W
  1900. LDA <Page_Last
    3 s/ _+ L5 C* ?9 w
  1901. ASL A# \$ v1 N, I- j5 w
  1902. TAY" o# z' s$ @+ x5 Z; l" c4 B
  1903. LDA Music_Collection_Name,Y  k" p( `" Y7 `9 H, n# L
  1904. STA <Data_L2 h+ c4 c: H, X" L' T5 Y# }
  1905. INY
    7 Q8 _7 b- j: k8 O0 m1 h! R
  1906. LDA Music_Collection_Name,Y
    % x; p* w+ D9 u. H* o( b0 c: f
  1907. STA <Data_H! b6 P* Y' Y  d

  1908. ) v) V! b* r1 J3 n0 D5 p1 @
  1909. LDY #$00
    8 ^1 z, {5 {9 k
  1910. LDA [Data_L],Y3 D: x0 b; e$ c0 }) ]/ r# j
  1911. STA PPU_Addr,X$ Y! U% y" @; P2 k3 H
  1912. INX+ ^! S1 n; J6 m; T9 v* h- t4 ]1 h
  1913. Clear_Item_Text_End% ^% {' p% }% ~0 m8 S& E+ S5 l# e( w
  1914. STX PPU_Cur
    % m! k1 n" ^+ Y/ ^
  1915. RTS* o( F8 [* j/ g9 h1 m) P

  1916. + v' ?+ ?! ^2 N2 u. V. i+ r
  1917. ;==================================================
    9 {5 H1 m  a! P: P
  1918. Show_Item_Text;显示页项目- U* C& b, }; Y% }- y! |$ S
  1919. LDX PPU_Cur6 ~+ _# A4 |6 d2 G0 m" l- p8 N
  1920. LDA #PPU_MODE_CNT_LINE  I# o3 n' E# h/ f( d
  1921. STA PPU_Addr,X. P9 {( U* j' q& _: F" ~. y
  1922. INX
    7 u% h* B1 W2 z1 u
  1923. LDA Page_Cur
    3 x+ \) @# z% C& Q5 t0 p0 o8 Z
  1924. SEC0 L9 W, A1 X' D; [$ A
  1925. SBC <Page_Cur_Index6 d0 Q& J$ c0 i. U8 S3 ]
  1926. ASL A& J, N7 U" I* R& y) o& p4 @
  1927. TAY$ Q! Q  ]8 w+ W% m& J4 }5 r5 m- M
  1928. LDA Item_Pos_Data,Y
    # O& K; e" l: Z
  1929. PHA# F; B) ]7 O) H. L
  1930. INY8 J* Z) }0 y' U! h
  1931. LDA Item_Pos_Data,Y4 ]. c2 V, c3 C; n* K
  1932. STA PPU_Addr,X: z/ b4 Q% n4 z; L. @
  1933. INX
    6 _" z. r5 I- J) U2 l2 x" |
  1934. PLA
    9 Q3 l) F! _' l1 t# U4 N, |# \" g( m& x. o
  1935. STA PPU_Addr,X
    ( H9 c. R1 A/ r" _8 ]% l7 @
  1936. INX) o  B, v2 d) j

  1937. % G: S% }9 e6 \' E/ ]2 j
  1938. LDA Page_Cur; G% M$ d9 E/ @1 A/ \
  1939. ASL A7 W1 I- m3 L1 I
  1940. TAY- N+ ^* X- N6 ~  |9 V
  1941. LDA Music_Collection_Name,Y' H1 d( Y% q5 ]; X
  1942. STA <Data_L
    ( v6 {  P) `8 E
  1943. INY; N& Q# x, f$ ?* j
  1944. LDA Music_Collection_Name,Y4 p0 m. m9 F, |3 A
  1945. STA <Data_H1 o: d0 U- \: r  Z

  1946. & `$ o! y. t4 B1 Q) s
  1947. LDY #$00
    / i/ g5 Q% G5 `5 T  U
  1948. LDA [Data_L],Y
    $ B& y7 h3 o# s" G9 E$ I
  1949. STA PPU_Addr,X/ j& S: d) `9 z) x! p
  1950. STA Data_Cnt
    7 F: H+ O7 H1 Z- C8 y4 G
  1951. INX" c7 S. C0 b$ @) g
  1952. 3 x. V* M$ p7 l5 H9 g1 S7 v
  1953. INY
    & N' o/ D$ w- A7 i# ~# |# h
  1954. Show_Item_Text_Write
    ! t8 Y6 C" d( R5 L
  1955. LDA [Data_L],Y( J& }5 O: X/ q, `, }
  1956. STA PPU_Addr,X' L# m) \& @) B) a& I
  1957. INY
    " G) I0 R% o  Y" w
  1958. INX7 O, A7 H4 Q, \$ ]! Y+ j) V
  1959. DEC Data_Cnt
    0 m: r" r: g9 b
  1960. BNE Show_Item_Text_Write! L; V* y- B! y8 ]/ t8 v: [

  1961. " h6 M! V: \2 ^' _9 |+ L/ K
  1962. Show_Item_Text_End
    ! a/ j4 s$ W: `* C+ ]. r
  1963. STX PPU_Cur+ R: C# P& h. D0 [. A# G2 a2 s
  1964. RTS
    1 x2 I6 O. a, f$ v4 J) c( ^

  1965. 3 r7 V; [5 K& u* F% m; j; A
  1966. ;==================================================1 l! d7 T1 D+ m5 W+ p, l
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量5 j/ R; I! q, Y5 D
  1968. STA <Data_Buf1 ]1 q  V  v+ S
  1969. LDA #$008 c, ^$ R+ b. k! W7 N
  1970. Get_Page_Index_Calc
    3 O* O  ]8 z4 r: Q
  1971. CLC
    ) ]  Z8 ~7 M9 u  v% ^% b: }0 y
  1972. ADC #PAGE_SIZE( Y) X1 s1 W9 b/ S
  1973. CMP <Data_Buf
    * f2 X' G% j  ?; T
  1974. BCC Get_Page_Index_Calc
    7 Q' d! k5 [4 s7 D- ?
  1975. BEQ Get_Page_Index_Calc_End1 Q; F2 T+ e) l7 }: _
  1976. SEC; I+ u. Y$ s% a9 O4 u  z
  1977. SBC #PAGE_SIZE- Q7 Z+ z( j% N+ g- W: F$ ~2 o4 S( N
  1978. Get_Page_Index_Calc_End
    ! j% _2 Z8 u: M
  1979. STA <Data_Buf
    $ B4 [; r1 D- H6 ~- t$ O
  1980. Get_Page_Index_Cnt: A" V  n& o9 _! ^, S7 A
  1981. LDA #PAGE_SIZE- T( }3 h* U* Q$ ~/ l2 p
  1982. STA Data_Cnt; k: g! D; q* ^% f7 V
  1983. 7 C0 `: V: D& k
  1984. LDA <Data_Buf
    & n7 Z1 L4 r2 S% O) l$ u/ ^
  1985. CLC
    3 B( ?. O; S5 @  L# O
  1986. ADC #PAGE_SIZE
    ! y; Y6 y+ d8 M( M+ k5 P
  1987. CMP #ITEM_MAX_SIZE
    - c2 l' |( y, ?/ ?$ P$ b
  1988. BCC Get_Page_Index_Cnt_End
    / f5 [! f# X* h% ^0 R" I) g0 k; p

  1989. 9 S8 J+ }6 Q& m! a
  1990. LDA #ITEM_MAX_SIZE7 r$ ~! v) g. }* m
  1991. SEC
    2 g- ^, H& y# M, U
  1992. SBC <Data_Buf: [; o7 K; ]) {- I; Z$ ~
  1993. STA <Data_Cnt
    8 ]  y* ^2 J/ P5 c6 s2 C% B
  1994. & }4 B9 J9 F4 t7 ^
  1995. Get_Page_Index_Cnt_End
    7 K8 ?) G7 ^2 n$ F* g# b/ U
  1996. RTS
    & k4 [7 ~# S  X* Z# N+ ~
  1997. , ^8 t, G; n( b! l
  1998. ;==================================================- r; j6 o! b0 [/ B# k' y
  1999. Get_Last_Page_Start_Index
    * o' S& Z7 V5 l6 o0 G9 _, k$ q
  2000. LDA <Music_Item_Last; X  T8 N, ~9 a3 O
  2001. JSR Get_Page_Start_Index6 M8 M1 m0 k9 X% M# `
  2002. LDA Data_Buf
    & V5 F8 d1 x/ \5 T3 s
  2003. STA Page_Last
    4 g, N  p+ U9 m; n. Q
  2004. STA Page_Last_Index, l& c. X( L9 [
  2005. LDA Data_Cnt
    * Y. y* R9 N; M1 x" L5 j
  2006. STA Page_Last_Cnt+ I& Z5 B/ B( E. f( A! N: ]
  2007. RTS
    " T  {6 B. Z% b0 e
  2008. 0 I0 [# r4 Y1 y( s6 c0 }3 X  S
  2009. ;==================================================% P7 M# u2 h, {9 U/ x! Y- y
  2010. Get_Cur_Page_Start_Index
    3 C# a+ b- e% {
  2011. LDA <Music_Item_Cur
    1 S9 b1 M9 \# E8 l7 j1 w# t
  2012. JSR Get_Page_Start_Index
    % a' \" t0 X# _
  2013. LDA Data_Buf, w' n8 I  {0 |0 c) }
  2014. STA Page_Cur0 i- c# Z6 D/ F6 z9 h3 ?& d
  2015. STA Page_Cur_Index* P; X( |* _7 Y" v7 u2 C
  2016. LDA Data_Cnt
    ; x! J+ J4 ]# F* c# T6 K8 T) @# j/ N
  2017. STA Page_Cur_Cnt
    $ S4 a3 Y+ h5 C6 D& y
  2018. RTS
    ' z. F' [& Q7 |" O" e' W+ i
  2019. . C1 g. }9 g$ Y8 p- E
  2020. ;==================================================: V# d; f: U+ X
  2021. Show_Page_Text;显示页文本3 p! L0 s' k5 u/ E+ e7 J
  2022. LDA <Text_Disable_Flag
    + \' w3 X) R/ C; M7 ^3 V
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM6 `2 c' u3 @6 {# L" y( c
  2024. STA <Text_Disable_Flag
    & W( l/ ^9 l1 i
  2025. 7 S* }5 k* H4 a
  2026. JSR Get_Last_Page_Start_Index
    1 I) B2 w( _7 S% v
  2027. JSR Get_Cur_Page_Start_Index
      `1 c6 Q/ [8 |$ [2 k/ `
  2028. # z8 j' B- X( p8 g% J
  2029. Show_Page_Text_Set* a0 x7 l+ v+ A

  2030. 9 A! O, x* D, c" m# n) X5 B
  2031. Clear_Page_Last_Item;清理上一页. H: ?. `7 z$ k2 U' v5 }
  2032. LDA Page_Last_Cnt( i# V! U' p/ v. v  s+ N
  2033. BEQ Clear_Page_Last_Item_End
    " n: A( U; ?! f0 }* h* Y
  2034. JSR Clear_Item_Text' c$ T0 R; ^; {/ i8 v+ F( N" n7 V
  2035. INC Page_Last
    & N, Z; s9 M& O" X+ e% u& W3 h& h
  2036. DEC Page_Last_Cnt
    " Q# z- G4 ~# f; }
  2037. Clear_Page_Last_Item_End8 N! ]  ?9 l4 A9 y& k; i4 v
  2038. 0 c. H* x: z/ J, l( l
  2039. Show_Page_Cur_Item;显示当前页
    / C* Z' L4 [# M9 M' U: s
  2040. LDA Page_Cur_Cnt
    / ]7 c# G6 j- P1 i1 ^1 a
  2041. BEQ Show_Page_Cur_Item_End
    " ~+ b! `# Z! ]( `
  2042. JSR Show_Item_Text
    " k6 A8 L! O0 G; r" i& V  w' I
  2043. INC Page_Cur8 c! p! d5 H" s# p5 U4 X8 P
  2044. DEC Page_Cur_Cnt1 e9 F0 g( i$ j- W# X( Y8 b
  2045. Show_Page_Cur_Item_End* h! M; b# ]4 k# d7 `
  2046. / u! b" L8 q/ z' H0 P4 d2 l
  2047. INC <Time_Wait_Cnt
      P3 O" |2 V! u! H: {0 \
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作
    ) z% i% q1 _: B
  2049. LDA <Time_Wait_Cnt' u3 \4 C' ?' d/ g5 {
  2050. BNE Show_Page_Text_Set_Wait
    & `2 z. {9 t5 b, i' V
  2051. / z" j- o6 U. t2 u6 T) l6 K
  2052. LDA Page_Last_Cnt
    * t9 M" e: y  x7 T
  2053. ORA Page_Cur_Cnt) N) I) o5 D3 v; J$ p0 K- Y
  2054. BNE Show_Page_Text_Set1 F# J( v- u$ s* \' b/ ?
  2055. LDA <Text_Disable_Flag
    ( g! n+ @0 N* q- m0 E
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    0 n/ u1 g. w" M$ H& k
  2057. STA <Text_Disable_Flag
    8 Z9 ~+ y* I% K$ x6 i1 C! }
  2058. RTS
    ' u" q+ w- A; G* }" P3 {( [
  2059. % [3 u6 d- m! J  P
  2060. ;==================================================
    8 a8 A" v+ y6 j; h) d# H6 S
  2061. Last_Item;上一项( j' f  G$ K: M1 ?! b
  2062. JSR Clear_Last_Track_Name+ Y! }% m% S) I* ^, B! t
  2063. JSR Disable_Text_Draw, `$ |0 i+ c6 i; c1 ~
  2064. ! x% ?: V- z2 g# m9 ]* T
  2065. LDA <Music_Item_Cur
    0 ]  u8 P5 z/ Z5 a  O
  2066. STA <Music_Item_Last
    1 |5 p2 }( p( _4 g' ]

  2067. ( H9 u, }) w% h( G  g5 k
  2068. JSR Get_Last_Page_Start_Index
    / G" z# t7 T6 Q6 ~/ J  n. W

  2069. ' i! Q, q& N7 @
  2070. LDA #$00
    0 {5 M$ Y  U* e: t# M' n+ c
  2071. STA Data_Buf
    7 R1 `, @4 g6 z5 {# G0 C

  2072. / u1 n# G0 _7 O9 F- d
  2073. LDA <Page_Last
    & e' Q5 }% x7 l3 G
  2074. CMP <Music_Item_Cur
    ! N- s) r: b- x8 ?3 z3 h5 J
  2075. BNE Last_Item_Begin
    + `- q$ ^5 T% ]. T' H

  2076. 0 w5 K! W/ s; P
  2077. LDA #$013 _$ w9 Z. G  \- `/ _6 [
  2078. STA Data_Buf
    + H+ I2 @. W& |- j
  2079. Last_Item_Begin' k; i! J" {* n8 h
  2080. LDA <Music_Item_Cur; ^: y( }. T$ A) k! H: i4 a
  2081. BNE Last_Item_Set
    " M6 p' Y; \- O$ T$ n) u
  2082. LDA #ITEM_MAX_INDEX + 1$ o5 V0 r3 }( T$ V, `) V9 R) j
  2083. STA <Music_Item_Cur
    / J/ w' f; A, `2 E0 w  k) y
  2084. 5 j1 o6 l  r2 l2 z
  2085. Last_Item_Set9 n" b' d9 H/ B+ \( U* @6 G/ C' K
  2086. DEC <Music_Item_Cur& t& J3 V: P* r1 N8 x5 I- {, Y  E
  2087. LDA <Music_Item_Cur
    8 \2 C" s6 F7 `/ h6 Z* }+ E
  2088. JSR Reset_Current_Music
    ' n9 Q  ~; h; D: O3 g* a( d

  2089. # N6 i& ^4 i9 N. q+ }
  2090. Last_Item_Play7 U( v; N) |" k3 b" `* ^
  2091. LDA Data_Buf% |0 ]) z0 K( t" p: ]8 y( @
  2092. BEQ Last_Item_End
    , s8 g6 p) u& V* v. X" T
  2093. JSR Show_Page_Text
    / J5 ~: v: D6 b, ^& v0 W
  2094. Last_Item_End, ^5 P$ k8 |# [+ S$ i4 o2 c
  2095. RTS
    ( `' A  K, \* n- {8 w

  2096. % _/ v- e3 q* F# r
  2097. ;==================================================; P3 A. E2 L" F) h# ?0 B% d
  2098. Next_Item;下一项
    9 w9 `$ |. B/ y
  2099. JSR Clear_Last_Track_Name/ H& P% Z* X* U4 A
  2100. JSR Disable_Text_Draw
    7 E; d- |+ ^. G, }0 f1 a
  2101. 5 r% a* K* ~+ O  @1 p
  2102. LDA <Music_Item_Cur$ _" `6 L7 {6 G
  2103. STA <Music_Item_Last
    4 Y- ^* S0 H7 E7 y# n

  2104. 2 k. ]$ K( O# e- t* ^- m3 h, W! u
  2105. JSR Get_Last_Page_Start_Index8 C9 C* ~+ Q. r" d5 M( E

  2106. ; O2 _3 Q: i" u9 |; C9 `
  2107. LDA #$00  S: v# H7 x) S) j1 g
  2108. STA Data_Buf
    7 x: E) H) S/ e. r! Y
  2109. , O4 F7 F& T) |/ Q
  2110. LDA <Page_Last
    8 V8 B0 a, A! u
  2111. CLC# L: U3 B" R/ B3 _% P+ y
  2112. ADC <Page_Last_Cnt: [' U  W" I/ ^! y2 ?1 v
  2113. SEC
    6 q$ w1 z- r8 e
  2114. SBC #$01, R; w* L: r) S/ N; w
  2115. CMP <Music_Item_Cur
    4 [- q  m) u. E& `4 r8 \, v. f
  2116. BNE Next_Item_Begin( N5 ]# _/ S$ _4 E; G9 f2 T. `8 Y
  2117. ' X3 G) A/ e8 h6 W2 m
  2118. LDA #$01* G+ N' `! M8 n+ O, V' N! d/ h) N
  2119. STA Data_Buf& X! V+ b* k- p7 l+ ^% z
  2120. Next_Item_Begin, {# w3 p# e( S) s0 L3 @$ N
  2121. LDA <Music_Item_Cur
    ' x& l: D' @0 H; v7 {/ b( H) w0 b5 x
  2122. CMP #ITEM_MAX_INDEX- @# i% E- z/ C9 q+ F5 _: p
  2123. BCC Next_Item_Set5 R$ E5 ^. l0 D+ W7 W
  2124. LDA #$FF
    0 H; }" p! f5 h" Q
  2125. STA <Music_Item_Cur
    2 m1 z3 I/ G+ N* q4 H5 ?
  2126. Next_Item_Set
    9 S& L# e! i' _5 e# C
  2127. INC <Music_Item_Cur
    . \" l, A, M" ?; G
  2128. LDA <Music_Item_Cur
    3 L5 F  j  O2 E0 B+ _
  2129. LDA <Music_Item_Cur+ m0 p0 H* {6 a- V$ a2 `
  2130. JSR Reset_Current_Music/ C% I) Z+ @; C) s  L6 H
  2131. Next_Item_Play. s) ^  g2 \- ^6 B  j
  2132. LDA Data_Buf
    6 \1 F. S* @( A7 \
  2133. BEQ Next_Item_End' C, P3 N  O* d2 I
  2134. JSR Show_Page_Text
    $ n/ ~/ r4 Y, k: |( S9 H
  2135. Next_Item_End
    ) U" E: R/ ]% o0 L( W8 H. M" l. @" t
  2136. RTS
    ) o4 |* x. F5 \( c

  2137. 8 f( X& S* l- E) O* y3 u
  2138. ;==================================================9 c' v; k( i5 g2 S0 I# w
  2139. Last_Page;上一页/ W, m# r1 P, N$ h' H2 l
  2140. RTS0 @" \8 H9 F7 {+ w9 k

  2141. / a/ n; g3 i; z
  2142. ;==================================================  s$ {7 Y+ o* \' N( }. m; X* }
  2143. Next_Page;下一页5 f9 ?) C; ~/ ^5 B3 \
  2144. LDA #PAGE_MAX_INDEX+ G3 r% q3 z( {" T- C3 q1 X
  2145. CMP #$01% Q  m* e7 t8 Y% M
  2146. BEQ Next_Page_End
    3 ~2 I- ]6 n0 R: |: |2 ^
  2147. 1 T+ K5 V  g: l! _  t5 }# ?$ y
  2148. LDA <Music_Item_Cur
    3 V5 j  a) z0 m3 x! t
  2149. STA <Music_Item_Last
    8 C2 `) X! W5 |% x

  2150. . h3 D- x4 o. o$ c) E, O! W
  2151. JSR Get_Last_Page_Start_Index: r& q$ s+ @9 n! _' Q! a

  2152. " @: }+ R$ D7 }3 g! J. j# t. s
  2153. LDA <Page_Last_Index
    7 E) C8 }* F* Q- e! j! B6 P
  2154. CMP #PAGE_MAX_INDEX
    6 w; H% x- Z* z3 h! R
  2155. BCS Next_Page_In_End_Page/ N# [% L% b: J! E- c& p  \. ]; J
  2156. . v! b( M- d8 R" l# I  V
  2157. Next_Page_Not_End_Page;不是在最后一页
    ! d8 R4 e2 e: h1 \
  2158. LDA <Music_Item_Cur5 n% X4 v* S9 R( x1 I
  2159. CLC
    0 s& o% Y' Z) _! M2 r6 a% |
  2160. ADC #PAGE_SIZE
    / q- N7 k  L$ f# r  H
  2161. CMP #ITEM_MAX_SIZE" _/ @9 O' e/ W7 {1 L: x5 K
  2162. BCC Next_Page_Not_End_Page_Less3 K' p! c$ ~" {5 j! x' I
  2163. LDA <Music_Item_Cur+ x9 J" R2 a, v' S
  2164. SEC' }8 Z' m( U8 q9 s" x1 H- Y
  2165. SBC <Page_Last_Index
    8 m" \- ~+ O, v' O( q1 C
  2166. CLC
    & L  h; C: ~7 S/ J
  2167. ADC #PAGE_MAX_INDEX
    1 c7 j4 s$ G% ^  a; ?5 o0 I% M5 O+ Q0 {8 s
  2168. CMP #ITEM_MAX_SIZE
    1 W6 g4 P) r6 t
  2169. BCC Next_Page_Not_End_Page_Less
    # ]# N) z* r/ Z- x, w6 E0 o
  2170. LDA #ITEM_MAX_INDEX# }" w4 {0 E; S. j$ @- ^
  2171. Next_Page_Not_End_Page_Less0 Y- r0 ^: `  E
  2172. STA <Music_Item_Cur
    ' g; s) u0 p* m0 {5 q
  2173. JMP Next_Page_Reset! m7 d0 i. Q' }5 I+ ?

  2174. % N5 @# h, O* \+ m9 w
  2175. Next_Page_In_End_Page;在最后一页
    8 n! s: O& [+ s: p
  2176. LDA <Music_Item_Cur9 M- i; `9 K. V( f  C3 e, E
  2177. SEC
    : a2 J5 X+ _. }3 W3 P  O" G. g
  2178. SBC <Page_Last_Index! E+ x3 V2 \/ ~
  2179. STA <Music_Item_Cur& C5 c: V# A$ p+ F& q$ v
  2180. # O. P. A8 r9 \% n. b
  2181. Next_Page_Reset
    ' v# B; J$ H& v0 x0 m# y
  2182. LDA <Music_Item_Cur
    . o& M& U: X# o) ?9 m7 }8 l. c' P
  2183. JSR Reset_Current_Music
    * _2 X" Q8 n: K
  2184. JSR Show_Page_Text
    # {/ F9 K) n; Q& V6 w
  2185. Next_Page_End  p4 V; V$ p! k2 a$ O
  2186. RTS6 J# f4 }1 f8 C  }: q8 j

  2187. ) L! d2 W5 T3 P6 R! k! @: [
  2188. ;==================================================3 c1 f& B$ |5 c, V% V
  2189. Disable_Text_Draw;禁用音乐条刷新/ U& t7 S/ J0 M8 i
  2190. LDA <Text_Disable_Flag
    5 H& `6 z1 u" K6 |  A. l2 o3 H2 Z
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME3 g" D1 y. c% Z1 |" G
  2192. STA <Text_Disable_Flag
    # J$ Y& x* S) [" e! S8 E" d" ]
  2193. RTS0 Q7 X4 X" N. A$ t

  2194. 3 N4 ?/ P' A/ t+ p8 V
  2195. ;==================================================
    - `+ K- ^$ o1 t0 D$ t8 H1 v
  2196. Clear_Last_Track_Name;清除上次曲目名2 E  o$ d. d+ d. G/ t* |2 U4 l
  2197. LDX <Music_Item_Cur
    * w! m2 D1 p  |. i' U9 H
  2198. LDA <Music_Cur,X
    6 U" F# ]6 C: F/ D' t( W! w
  2199. .IF Track_Name_Pos. _: T# F. Q! s" P4 B' s
  2200. JSR Clear_Track_Info0 ?3 c3 a6 |& Y# V
  2201. .ENDIF
    . Q7 F1 U  ^& Z; ^" ^
  2202. RTS( e0 z) O0 Y% Q% ?5 I- [
  2203. 6 V5 A- p: O: ^# A2 E+ ~( o
  2204. ;==================================================
    . v+ i* K* M- \/ v) R
  2205. Reset_Current_Music;重设当前曲目4 P! }+ M# u3 y
  2206. 0 b7 Z+ y1 @/ E8 j7 \
  2207. ;写入当前总曲目0 m( h, A" Q/ r
  2208. JSR Set_Sound_Total
    ! W- K" g7 `: ^7 @4 s2 `' s5 V
  2209. LDX <Music_Item_Cur
    * P/ j! j# {7 p. l" J

  2210. 2 R: G. N8 ^" D& Y9 g
  2211. LDA #$000 Y. u& @0 l( D
  2212. STA <Music_Last* F8 C0 \, T) M2 b5 r& ^! n

  2213. 7 ~! l2 a0 }8 l- K* j5 i- k
  2214. JSR Sound_Reset_Proc
    ' w! f3 m7 i) N2 ?" H3 |
  2215. JSR Music_Show5 ]* n. s+ S% n3 r: @4 t
  2216. RTS
    / }2 G' W) z+ s8 X" s3 Z$ g
  2217. & F/ i. i! ]0 P4 t
  2218. ;==================================================
    2 Y& ~* J+ x( z" l6 n4 J
  2219. Music_Song_Stop;音乐停止
    1 j+ d( F' b% |* t
  2220. LDA #$019 T+ ]0 e1 }3 d
  2221. STA <Music_Stop_State; t' _2 w; b$ F/ y2 t
  2222. JSR Music_Bar_ReSet0 g, N5 k7 b, M/ f# G  n
  2223. JSR Time_ReSet
    . q( \7 \/ O1 L" D7 w9 |( A! S
  2224. JSR Sound_Data_Clear! H8 A; E. N, P. C/ R
  2225. JSR Music_State_Show
    * l2 L+ `" ]. B7 K; V0 q
  2226. RTS8 ~. @9 |1 n( |7 B6 \4 A8 U! ]1 q
  2227. ! V- S5 M7 e( @3 S, w2 w7 T: r
  2228. ;==================================================
    4 n! U7 Q- }9 E4 K4 y! R. r9 t
  2229. Music_Song_Play;音乐播放
    / Y$ D! {5 m( q& t: l( o0 R
  2230. LDA #$009 e7 m  a! X) H
  2231. STA <Music_Stop_State
    5 u: W3 g; g& H' |, w# J
  2232. LDX <Music_Item_Cur
      ]# n/ ?/ N! g9 c5 l3 _
  2233. LDA <Music_Cur,X( d  |  {& b8 Y( r
  2234. JSR Sound_Init_Proc
      p2 ?0 }8 _2 K9 u
  2235. RTS
    ) |+ H* S* ]3 h+ V1 m/ |% G0 y/ E
  2236. 9 \1 l$ \' L; z8 i
  2237. ;==================================================+ ^4 Q' O. h2 x0 u
  2238. Music_Song_Last_10;上10曲
    + C4 s, {5 K1 E" i7 n5 o1 [6 D
  2239. JSR Clear_Last_Track_Name( c7 l4 M$ \/ A7 B
  2240. JSR Disable_Text_Draw. Q" {: r& W: ?* A3 H# b5 ?/ e
  2241. LDX <Music_Item_Cur( Z/ g* m! e% b" W- i- w
  2242. JSR Set_Sound_Total
    1 Q9 G, H6 G' V
  2243. LDA <Music_Cur,X
    ( F  ^* L5 \4 e9 A
  2244. SEC
    * ]" V9 C& R  @/ f) L
  2245. SBC #101 z- ^/ T- N0 \& R, A( @) Z9 p
  2246. BCS Music_Song_Last_10_Set
    : b# \6 a! W) a3 \9 W: `
  2247. LDA #$00
    ( x* D4 ]* q; u: |3 u
  2248. Music_Song_Last_10_Set+ \) Q: Y0 ^+ R/ d, k% W7 k
  2249. STA <Music_Cur,X
    5 Z* d$ g9 Q8 K# s/ m
  2250. JSR Sound_Reset_Proc/ l, s: X- l2 O! l4 G
  2251. JSR Music_Show
    ! W; M7 A$ E; l0 [! n  b
  2252. Music_Song_Last_10_End) f& U: m+ c  Q( o
  2253. RTS) D- \+ u3 c, ]6 ^
  2254. ( u* T2 q6 t7 e& B
  2255. ;==================================================7 F, T3 G, t; h3 h1 {6 {
  2256. Music_Song_Next_10;下10曲
    ' F0 f, k. ?- m4 U  b* z5 j
  2257. JSR Clear_Last_Track_Name
    . b: |, [# Z; _. H' Z" c
  2258. JSR Disable_Text_Draw
    ! g" W1 {1 O" d3 {1 B
  2259. LDX <Music_Item_Cur
    / C$ k& Q& B1 d& [* Y- c( d
  2260. JSR Set_Sound_Total( e: O, V' i: J% \: w
  2261. LDA <Music_Cur,X
    0 A5 ^$ g6 Q+ m
  2262. CLC+ d5 q; X1 O7 p3 a; C
  2263. ADC #10
    4 Z* `6 P! a- D& s0 {0 _3 ~$ Z& J
  2264. CMP Music_Total$ F+ f* B: w( U2 P6 u* K( H4 D0 {) r
  2265. BCC Music_Song_Next_10_Set
    8 G* K0 Q' j* ~. w( A
  2266. LDA Music_Total
    7 c- n1 j# P. `0 B
  2267. Music_Song_Next_10_Set
    0 {& R0 T/ H4 b, Z- U- D
  2268. STA <Music_Cur,X! @# ^# W+ X. ]6 Y. f& L1 [& K
  2269. JSR Sound_Reset_Proc& q! e/ D- Y8 {
  2270. JSR Music_Show
    9 f; k4 b' A* i+ @8 E  y. m
  2271. Music_Song_Next_10_End
    ! l" ^' {: @. O5 U' ?" [7 U
  2272. RTS/ J. w' V% S  _! Z
  2273. 6 I; m6 L3 _9 a
  2274. ;==================================================
    1 c, g; Q2 j5 v
  2275. Music_Song_Last;上一曲6 i) E$ v8 c, f, D: C: Y8 w
  2276. JSR Clear_Last_Track_Name
    * w& |- ]2 ^/ I* Y0 ^
  2277. JSR Disable_Text_Draw
    + X  V% D  b- [$ H5 p0 ?8 ]
  2278. LDX <Music_Item_Cur6 e: n& m3 b0 {" \( C, t5 y( W
  2279. JSR Set_Sound_Total+ p' u% U! @% m* O* v
  2280. LDA <Music_Cur,X* u5 l( Z4 C+ o4 S
  2281. BEQ Music_Song_Last_Set
    ; b; W- S5 j3 H, u
  2282. DEC <Music_Cur,X3 e+ N6 t+ V: i) X
  2283. Music_Song_Last_Set% ~' f, j/ z0 F
  2284. JSR Sound_Reset_Proc$ a5 \  t. d! L& q
  2285. JSR Music_Show) ^, g8 w  v, y, j
  2286. Music_Song_Last_End1 i% l, ^( m0 b/ B% E# y/ N* k7 q
  2287. RTS
    $ T1 t# [' G# N6 q

  2288. 5 m8 D( [. D6 o
  2289. ;==================================================
    8 w/ ^3 b+ P% f3 F$ _: b" F; Z
  2290. Music_Song_Next;下一曲2 N# \1 Q; c# ^
  2291. JSR Clear_Last_Track_Name
    9 ^, ]. c4 x$ V1 b* r
  2292. JSR Disable_Text_Draw
    ; \! t- J7 N9 Q9 U# Y
  2293. LDX <Music_Item_Cur0 @8 w! H: E, Y6 n2 E! U# _
  2294. JSR Set_Sound_Total
    & i8 K& v0 u1 W8 h$ e/ {
  2295. LDA <Music_Cur,X
    ! D$ O9 a8 t4 l/ y" N6 R
  2296. CMP Music_Total
    / f. @8 d) d0 R3 k% E# }, N1 I
  2297. BCS Music_Song_Next_Set, d: _" H/ J* X+ B
  2298. INC <Music_Cur,X
    & C7 q  c# X  e2 |; a' S
  2299. Music_Song_Next_Set
    . j, v* n0 j& ]
  2300. JSR Sound_Reset_Proc
    9 v, |9 A2 p# {! k1 d
  2301. JSR Music_Show+ a' m* z* g+ O0 `  U  N
  2302. Music_Song_Next_End+ P4 i% G) ~' m8 j2 U7 O0 j. W" N
  2303. RTS& r; g5 f. t# D1 i
  2304. ; K4 E" G" U+ _5 b3 g, X4 S
  2305. ;==================================================" t9 n# m* \, F3 q/ U
  2306. Change_Select_Item;改变当前选择项
    ' f' V1 \  m- V6 P
  2307. ;--------------------------------------------------
    $ }  ]4 A- ~# f
  2308. Change_Select_Stop_Play_Item;停止/播放  o% [2 B9 a1 I
  2309. LDA <Key_Once( \& X% f8 [9 ^+ j% N
  2310. CMP #$10
    0 w$ q: ]1 u/ Z
  2311. BNE Change_Select_Last_Item
    ( `9 H$ h9 H1 r$ a1 T
  2312. LDA <Music_Stop_State! W/ \6 U" y2 p
  2313. BNE Change_Select_Play7 X! j4 B- A! E8 t- H' Q; w
  2314. JSR Music_Song_Stop/ i6 F% a) |4 x& s& y/ o
  2315. LDA <Music_Stop_State
      K) g2 y8 `$ Y* \( g2 R: @
  2316. RTS$ F3 u- Z' w1 W* K4 d$ g* S! w& ~

  2317. $ u; O( ]4 J7 c  W( ~6 t0 X" N$ Y
  2318. Change_Select_Play
    - d: R" L- l, M( c5 Q
  2319. JSR Music_Song_Play7 l' u" @& k" |8 I4 k& u
  2320. RTS8 d- R0 h7 D: U% k) a+ \

  2321. 5 m$ ~( @1 `. \5 u7 ~+ E, g
  2322. ;--------------------------------------------------& D# e' q* o* K& ^( [: Y
  2323. Change_Select_Last_Item;上一个专辑0 e& ~# |) {  H/ q- L* S
  2324. LDA <Text_Disable_Flag
    " l' u) O( ]. {; ~5 ^
  2325. AND #TEXT_DISABLE_ITEM3 J$ ^: I' l7 w- U+ ]. t9 w3 \2 b& {
  2326. BNE Change_Select_Item_End
    9 S* A7 X2 f; Z, F% G# ?. ^
  2327. LDA <Key_Once/ `$ m9 X) |+ c/ n4 d. I
  2328. CMP #$08$ X( e; r* g/ H5 X3 n, H( [8 f
  2329. BNE Change_Select_Next_Item9 E1 U8 ~- E5 \& ]. @
  2330. JSR Last_Item
    8 p( z) p% X, A6 G
  2331. ;--------------------------------------------------
    5 x2 ]( N! W8 s5 Q6 P
  2332. Change_Select_Next_Item;下一个专辑
    3 X6 U. j7 K5 {, n+ ]
  2333. LDA <Key_Once6 r  G0 L, o; K) ]
  2334. CMP #$04; D( I6 y( u  d
  2335. BNE Change_Select_Last_103 P; U# A  m- Y) C
  2336. JSR Next_Item
    9 i' p& B# N- x# m- ], t! H
  2337. LDA <Music_Item_Cur
    : X$ G  M5 U4 ?/ t1 z7 p' r$ u
  2338. JSR Get_Page_Start_Index1 A$ S0 \0 }6 E& I# t# x. J1 g
  2339. ;--------------------------------------------------4 }* }+ T# z! {" P$ R& A
  2340. Change_Select_Last_10;前10曲
    % T3 l$ b+ E  a0 m, p& L& {. z; S
  2341. LDA <Key_Once
    7 r. [! R; l: Z7 h
  2342. CMP #$40% |6 y  {, a7 Y+ l+ J7 ^
  2343. BNE Change_Select_Next_10
    / Q6 Y4 g+ C/ z6 d; X
  2344. JSR Music_Song_Last_10
    : n* M9 s" o" w" I6 t+ {( H5 c
  2345. ;--------------------------------------------------5 K; T3 h+ f, c
  2346. Change_Select_Next_10;后10曲
    # |0 n' Z. k& X
  2347. LDA <Key_Once" L3 p2 D7 N: [, d
  2348. CMP #$807 ?) R) O/ T3 `2 F
  2349. BNE Change_Select_Last. {/ u" V0 d2 u% Z8 O8 V
  2350. JSR Music_Song_Next_100 F: _$ e: p0 J  ?; |
  2351. ;--------------------------------------------------5 i# r$ e  F& q
  2352. Change_Select_Last;上一曲
    . F) f0 S3 U+ K' N$ k
  2353. LDA <Key_Once1 p4 d3 A" x% f2 o' b# `  y+ t
  2354. CMP #$02; l3 v9 G% }) P" N  i
  2355. BNE Change_Select_Next9 j: ?8 t. ^. S1 B& t
  2356. JSR Music_Song_Last
    % m. g1 \! [' m# X. l) A
  2357. ;--------------------------------------------------
    * f  `, m6 t& g* A% ]2 M
  2358. Change_Select_Next;下一曲
    7 b  b5 `" o1 |: B. x/ }, A* u9 h2 h2 N
  2359. LDA <Key_Once
    8 A( B" Y2 M' U9 n7 f8 `
  2360. CMP #$01% d6 g8 @& H  t6 X9 J/ _; I6 x
  2361. BNE Change_Page_Next0 Q4 r4 C- v) G, P% j
  2362. JSR Music_Song_Next* @' N+ Z( c7 L0 i" e5 M  a: B
  2363. ;--------------------------------------------------
    * }" g9 |+ @' A( {4 D& r2 I; B
  2364. Change_Page_Next;下一页9 F8 F' d+ Q0 J/ {
  2365. LDA <Key_Once
    % X7 E3 |) m3 W+ h2 K8 b+ T9 t' a% i
  2366. CMP #$20
    # M4 q8 q: {; @2 T/ _) _, V, y  S
  2367. BNE Change_Select_Item_End/ l, L% T* p% @- R
  2368. JSR Next_Page8 P, ?( s3 r' P
  2369. ;--------------------------------------------------( B. l6 t; R1 n  I1 v' l! E0 ?, P
  2370. Change_Select_Item_End" o, G  z3 i4 c8 u# e% {5 ^7 F
  2371. RTS
    2 i: {" Z3 z+ F0 O

  2372. + x: o# B$ D+ d* _3 N6 }) e
  2373. ;==================================================& G" P: O4 d5 |4 k1 o
  2374. Show_Arrow;显示箭头光标, e$ E8 [7 S9 \9 ^( [0 e# Z
  2375. LDA <Music_Item_Cur
    ; L9 z5 c1 `: ~' B  b! E
  2376. JSR Get_Page_Start_Index
    ' i5 {. Q7 J- _& u' |
  2377. LDA #$002 m( r. |  x* c  y; J; q0 J
  2378. STA PPU_OAM_ADDR
    5 K9 }7 l- M  z& L, d% e
  2379. LDA <Music_Item_Cur
    , K* W1 w7 \6 l9 C; ]9 H4 e
  2380. SEC
    5 n/ B9 D# m. T5 E. G* V
  2381. SBC <Data_Buf% G' J" p7 T9 c; r3 u9 o
  2382. ASL A
    0 q/ _$ e2 d: T9 G% \5 v6 m" |9 a; |
  2383. ASL A
    / J, }7 D6 x% Y$ {+ h
  2384. ASL A' p. |8 M. l6 R
  2385. ASL A
    ) \2 ]2 b0 |# ^/ m) s) @" G5 ?
  2386. CLC
    $ J& i! D3 ?" v3 ^: b- Z
  2387. ADC #ARROW_Y_OFFSET, \5 t1 W( v" j5 h6 C6 K' s
  2388. STA OAM_TEMP_ADDR + $00
    . B2 B$ y! K3 E  ^/ v
  2389. ;STA PPU_OAM_DATA
    ' z$ F+ h* w3 B4 s; X& M! d, n
  2390. LDA #$1F
    ) p3 j. _, _$ W' _; W. R4 c( l
  2391. STA OAM_TEMP_ADDR + $01
    3 ^7 r. ?7 x" h* M. O
  2392. ;STA PPU_OAM_DATA" e  q( W3 Q% I8 O1 g
  2393. LDA #$00: V$ d0 S: B! z. h' \
  2394. STA OAM_TEMP_ADDR + $02
    ( N3 N7 b7 D$ @% l8 T1 x
  2395. ;STA PPU_OAM_DATA
    4 u) O4 n) @7 e+ c9 Z+ Z. ~. |
  2396. LDA #ARROW_X_OFFSET" Y( n1 X% z1 D; b$ y" S
  2397. STA OAM_TEMP_ADDR + $03
    ; Y+ L1 o, g4 l
  2398. ;STA PPU_OAM_DATA
    : `0 m! h9 Q6 N5 `$ b  V
  2399. RTS
    $ k2 ]/ i9 q9 ~7 n: B
  2400. / l7 `) M1 y- A$ l
  2401. ;--------------------------------------------------
    # Q% O1 h; ]- s% R
  2402. ;命名表数据6 S# J% I* M4 M! M; u, d
  2403. Palette_Attributes2 [, j% Q( R3 Y! S% q
  2404. .IF SOUND_BAR_SHOW_ENABLE
    0 ?5 ^1 V+ I/ D( E+ e: \$ Z# w
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
      x, h8 S- e8 T
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$558 M2 h2 J* `5 L* J1 Q$ ~
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    " T) {9 s  n- w( u
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    2 J1 `! S" H# J6 S
  2409. .ELSE, a/ Z' t0 {& q- B, A' q
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    9 z( g& ?& F" t' S7 l
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " P" u  I# q  J" o* z
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75. m( L2 I5 F+ L" k0 |" a
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA: w* @: T( M) }; n! b7 H8 y
  2414. .ENDIF
    5 n9 i; V) @, [0 {  p) S5 N$ i& R

  2415. ( W) v8 c: Y6 d+ ^/ z; N" J
  2416. ;--------------------------------------------------
    % b  v, x, a% \) d' j" e
  2417. ;调色板数据
    " k0 }. G* k5 Z6 _. d7 L2 _
  2418. Palette_Data
    ! ]6 U  _$ M! \4 b
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F" f1 U, f4 W# i* p/ U1 k3 e& x
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F1 o3 k2 I7 P; C% Q% u

  2421. 3 [( V' r+ L+ f
  2422. ;--------------------------------------------------( s1 `# A! o- x6 G1 Q6 {
  2423. Static_Text_Data
    : i' F" ]4 E8 h& z1 k
  2424. .WORD Static_Text_Caption_Data/ ^! d" o0 ~2 j1 l, L
  2425. .WORD Static_Text_Author_Data' i) ^) f) c( U! d  [; |7 [
  2426. .WORD Static_Text_Date_Data
    % b& P( S5 s  y) E
  2427. Static_Text_Data_End$ I% u) s0 n" M; `
  2428. * P4 b0 S% }; Z
  2429. ;--------------------------------------------------
    ' P4 m% Z& w7 ~# Y. {+ D
  2430. Static_Text_Pos2 {! @3 d1 K* |. M( M8 p: D
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos). s; i, b7 U+ Y' ^5 Z* J
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)5 {+ P8 G4 O/ Q' `
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)- [$ M) K6 @5 W. E/ P& R+ V
  2434. Static_Text_Pos_End: l5 x. R' W; f* Y6 o# i+ ?
  2435. , O" R& l/ v4 N0 ^7 ]
  2436. ;--------------------------------------------------# ]% M( u7 c$ Y. G( L6 O
  2437. Music_State_Stop
    $ @5 n$ n! Q- K+ S7 l- f6 `
  2438. .IF SOUND_BAR_SHOW_ENABLE, s  F- g9 o7 f+ Z
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$001 d6 \0 t6 q8 n
  2440. ELSE
    2 n. I$ m- E5 v& X4 f4 h
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$009 r- H, ]/ h3 l! I4 p: C
  2442. .ENDIF1 I4 w9 J6 ?, G1 H% q
  2443. Music_State_Play- `2 U' c6 R) A  M. P  k
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    ! g+ D9 x& r) ]- I+ z+ `

  2445. , i1 }) {0 ?+ S& K+ n
  2446. ;--------------------------------------------------' N8 Y! j1 R& ?
  2447. Sound_Bar_Text_Data;声音类型文本
    2 y: |7 o+ K  p! D" p! c
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"
    % b0 x* L: q# Z# f* a6 |
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    " s- L; Z! }( L% p$ L( {$ {% Q( J
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"
    9 M, H& @8 n. {" Y
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"
    7 A* W/ x  E+ L, b
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00; W1 C0 N  J) D# D

  2453. / U2 ]9 m" o% J; j( z, E: H
  2454. .IF Track_Name_Pos
    - p" d* [& A, @3 n. i- b& ~

  2455. 0 p8 Z( o1 _2 @
  2456. ;--------------------------------------------------
    5 m9 M& v" [7 ?( y$ a0 c! ~
  2457. Track_Name_Addr_00;曲目名地址索引$ F! Q) v, z  O4 Z4 V7 y, q) b
  2458. .WORD Trackr_00_01- K9 f( Y# x' g7 G
  2459. 1 R# q9 T% E) W7 @
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
    . ~+ V, @' G8 g
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"
    2 l  I( j/ Y# ]3 O/ {$ a* ?

  2462. 9 g% V5 |3 _2 ?7 v9 a( f9 M" g
  2463. ;--------------------------------------------------
    * U8 `+ Y( X/ W# s
  2464. Track_Name_Addr_01;曲目名地址索引
    8 g! K2 x+ ~$ x" o- D. Y. b
  2465. .WORD Trackr_01_012 P! j% ]3 S8 C! m
  2466. - z7 n6 c) o' P9 m) C. K
  2467. ;==================================================! w+ R& r; ^! ?* D4 _9 ~3 {
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"
    $ e) u3 u9 M/ I2 M0 k
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"
    3 t8 E! Q5 k! D" Q* M: b
  2470. 2 i; L5 K' Z) m% @  [
  2471. ;==================================================
    5 m4 k% ^, z1 g6 P- }. i. x
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    4 {- D4 n- ^$ w
  2473. .WORD Track_Name_Addr_00' t4 e5 a! O! k& E
  2474. .WORD Track_Name_Addr_01
    , g8 D  j% t4 F9 M
  2475. .WORD Track_Name_Addr_01
    9 o# `- O9 O+ v- p0 S& m$ p4 q
  2476. * l" Z! `6 c: v7 \
  2477. .ENDIF$ b0 B# O( i6 G3 }+ P' Q2 j) M

  2478. 0 F  |6 q* t; X' w- q$ ?8 h( J0 |; c
  2479. ;--------------------------------------------------
    5 U4 Q. U: m1 y  J6 x' a. e! H' V1 A
  2480. Static_Text_Caption_Data;静态文本数据
      [( f" x; ]3 ]8 I. Q
  2481. .DB 16
      e; k8 S% @% L( t& w
  2482. .DB "FC MUSIC 12 IN 1"9 S- J$ N3 v/ {1 r) f
  2483. Static_Text_Author_Data& K' P# h6 w2 W& \: `( h- Y/ t
  2484. .DB 25, m: k4 p$ v9 k# l2 p% Q; Y
  2485. .DB "EXTRACTED BY FLAMECYCLONE"$ D$ `% M3 Y' l' |- g, _
  2486. Static_Text_Date_Data4 M* P; {9 B/ B$ o* W7 q" L; M- ?' K
  2487. .DB 10
    0 E/ D& ?- \9 F! I+ }
  2488. .DB "2023.07.23"
    0 j# @: z# W; N1 D3 r* r7 [
  2489. ( J1 E, j  ~6 T3 U/ P3 q8 H( E
  2490. ;==================================================
    + U9 }5 k+ _: T/ L. O( r0 G4 @
  2491. Music_Collection_Name               ;专辑名间接索引
    6 U! x( S% d. X8 I, z( j% _" K
  2492. .DW Music_Collection_Name_004 i8 q# Z. f; _  ]" D
  2493. .DW Music_Collection_Name_01
    - G4 ?$ Q# _  @# f$ A
  2494. .DW Music_Collection_Name_02
    0 _7 J+ y% m0 s0 t
  2495. .DW Music_Collection_Name_038 `9 j+ ?* q- X5 Z
  2496. .DW Music_Collection_Name_043 n' J; h" }% z3 A
  2497. .DW Music_Collection_Name_05
    $ ~8 h' d! U/ C0 F1 S1 E' [
  2498. .DW Music_Collection_Name_06$ f  C$ L& _+ I& {' d8 @9 Z
  2499. .DW Music_Collection_Name_07
    . J# T$ ]0 x3 b' S
  2500. .DW Music_Collection_Name_08
    * U2 Q9 S7 E3 d
  2501. .DW Music_Collection_Name_099 B- x$ f5 H* ~
  2502. .DW Music_Collection_Name_10
    9 W% ~" |. G3 G6 w; q$ B
  2503. .DW Music_Collection_Name_11
    9 t$ e- m6 l( w1 C. b
  2504. # b7 x/ s6 x7 C/ \; U
  2505. ;==================================================/ Q" `$ N& z+ A: {# T
  2506. Music_Collection_Name_00            ;专辑名文本数据
    . ]1 r6 t" X" z
  2507. .DB 11,"1.RAF WORLD"
    ) a) ?7 ]2 h8 [3 [
  2508. Music_Collection_Name_01
    4 Z8 ^3 \' T* {/ [: G1 O3 b3 D
  2509. .DB 15,"2.FINAL MISSION"
    3 z' i: K% N7 v  I6 M0 [3 c3 f
  2510. Music_Collection_Name_02
    / P; O% K2 u8 n. e" k
  2511. .DB 06,"3.KAGE"/ X8 J: q6 }; u
  2512. Music_Collection_Name_03
    8 o, s. _3 _( J
  2513. .DB 16,"4.DOUBLE DRAGON"4 z6 @) W$ f0 t# U# p8 I
  2514. Music_Collection_Name_04. S% L, @9 ~3 e( y3 U, ]4 x& ]
  2515. .DB 17,"5.DOUBLE DRAGON 2") @0 |$ t% c1 C9 K
  2516. Music_Collection_Name_05! ]* ]. F  E9 i5 T
  2517. .DB 17,"6.DOUBLE DRAGON 3". u, q. L. n( R& C- m8 U7 W5 J
  2518. Music_Collection_Name_06
    , q. J6 v/ `+ V& }; E4 w
  2519. .DB 09,"7.ROCKMAN"
    ) a4 c( M* b1 q7 C" C, W2 d. ~
  2520. Music_Collection_Name_07
    1 m0 J  M$ n7 ]& s
  2521. .DB 12,"8.ROCKMAN 2", Z+ }# E: H+ D. W. \4 g, E
  2522. Music_Collection_Name_08) ^" X+ d2 I5 ~3 h
  2523. .DB 12,"9.ROCKMAN 3"
    & ]4 h' r1 B1 r( V
  2524. Music_Collection_Name_093 r6 J5 u6 k& g4 M) J) N2 B
  2525. .DB 12,"10.ROCKMAN 4"
      r+ K* E/ G: ?. q
  2526. Music_Collection_Name_10
    # s- ^- }+ x; h  ~7 {
  2527. .DB 12,"11.ROCKMAN 5"' }4 H, O" I* v. L
  2528. Music_Collection_Name_11, N1 q8 F) C7 {- ^# |& C
  2529. .DB 12,"12.ROCKMAN 6"
    - c5 a7 Q) W4 ?8 ~: [. i
  2530. + R% E7 Y, w' f
  2531. ;==================================================  b' D5 A: c6 e3 e4 f$ i  R" K) t! s5 a
  2532. Track_Name_Addr_Flag                ;显示曲目名标记. S9 n. P  e( Q3 j2 o7 s
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0
    7 b6 k6 ^1 u6 D( n
  2534. 6 P" {8 e$ ^( K
  2535. ;==================================================3 Y  n, c1 V& F
  2536. Item_Pos_Data                         ;光标箭头位置# y( j* |# {4 p. L2 P
  2537. .WORD ITEM_SHOW_POS
    0 u! `3 C' }) b' F: E7 Q
  2538. .WORD ITEM_SHOW_POS + $0040. T+ l8 v/ A2 n4 e3 h
  2539. .WORD ITEM_SHOW_POS + $0080
    9 I( @% O, g! l2 }3 u
  2540. .WORD ITEM_SHOW_POS + $00C02 C# A5 j/ _/ Q- ~" I+ n
  2541. .WORD ITEM_SHOW_POS + $0100
    ' ^/ F4 Z+ |' p& o8 b4 M& P& x
  2542. .WORD ITEM_SHOW_POS + $01407 T. R6 q$ [" V- c

  2543. ! D- V( X: J6 r6 A+ ~3 [* p: x
  2544. ;==================================================
    2 O3 D" j% I- s9 V
  2545. Sound_Init_Port                 ;音乐初始化入口地址
    1 K: M2 g- W& U' U
  2546. .DW $BFC8
    % v* F* J. h7 Z& C: W
  2547. .DW $D7F0% x& q: X1 o3 S4 [* }' O4 S) m% o
  2548. .DW $9FC0
    $ w5 x2 b5 }# U$ G% K. n. a" G: o
  2549. .DW $BF70
    " R8 ^# K3 z* q
  2550. .DW $8003
    , ^$ I5 m! q' {* t8 T* |- H
  2551. .DW $BF30
      p* S2 U( \, S/ h  W: L$ y
  2552. .DW $9003" w+ d' m7 E: c, {6 t' x) |& }: `
  2553. .DW $8003
    - ~6 z' k! z1 O+ B4 n" I7 _
  2554. .DW $8003
    ; B/ E. I9 j/ }! j
  2555. .DW $80034 U" l! A, B+ U* ~
  2556. .DW $8003
    * {; X2 R. i% p7 M
  2557. .DW $80032 _& {. d+ F" I  r0 b6 t1 g: C

  2558. : `' k% ^! b9 O" S- o4 h
  2559. ;==================================================% p# q5 ^# _! G) J# E7 h/ z1 h  ^
  2560. Sound_Play_Port                   ;音乐播放入口地址/ k* S! |5 E9 [
  2561. .DW $8000
    " }7 O9 p5 P0 q( \3 E( W1 \6 |
  2562. .DW $8001
    / H2 W5 ]6 r* [. h/ V! \! X- b
  2563. .DW $A000: P/ K% A3 x7 Y* ]0 f5 B
  2564. .DW $8003
    ' c: F  E2 |. I* a3 Y$ E5 V7 g" J# M
  2565. .DW $8000
    6 [2 G$ ?3 q  j8 S5 p# x' `$ T- t
  2566. .DW $8003
    : U0 E. K5 y# |; C
  2567. .DW $9000* i& o( l% R9 Z: a0 X/ ~4 n
  2568. .DW $8000
    " k0 C) l6 I: o, W" I4 H: n
  2569. .DW $8000
    2 N- f  q7 T; p$ E/ J' b0 j
  2570. .DW $8000
    ) R0 W" X" R; \" p, ~
  2571. .DW $80005 k0 a$ k; N6 F+ D1 T2 t
  2572. .DW $8000
    ' j8 _9 \- E. s0 o' S3 n" `
  2573. % }$ b7 c- a  r% l
  2574. ;==================================================' P5 L" ^( h# P
  2575. Sound_Reset_Port                  ;音乐重置入口地址2 O; {5 r" p+ m
  2576. .DW $0000( j  n  j, u0 ~( Y$ p* Q. Z  {6 Q
  2577. .DW $00008 _& |  d1 J! L
  2578. .DW $0000# B+ S* ~' v$ m& Q! N5 n
  2579. .DW $0000
    3 w# {" c0 [! b. q7 N: D* Y
  2580. .DW $0000
    . V7 ]" T- t- ?( I5 D, s
  2581. .DW $0000
    0 O, r4 j) h: C0 n# e
  2582. .DW $0000
    / j9 G" Y2 y0 z& l( s* M( n# N( f
  2583. .DW $0000, P/ C$ M7 J. w0 @8 Z
  2584. .DW $0000
    2 B/ b' e; z, p  ]2 i
  2585. .DW $0000' o" a& D- V* q6 c
  2586. .DW $0000
    $ U$ W2 k" p) z+ ?1 r0 O
  2587. .DW $00007 T# L3 H4 s& ~; X# l
  2588. 1 w. T+ a7 Z/ h5 W
  2589. ;==================================================8 o7 i6 V. V( W. C( b5 T& L- I5 k
  2590. Sound_Total_Port                          ;曲目总数# Y1 j! l- A7 @5 l5 E$ ?' Z9 ]
  2591. .DB 380 A- Z# }6 z. W4 G' j* h
  2592. .DB 338 x+ f$ {! t7 y
  2593. .DB 49
    ( C! v* O9 C. ^- v5 k: A- L; o
  2594. .DB 419 j$ w/ C: S7 p
  2595. .DB 83  [1 `) h' ]( n  v9 D
  2596. .DB 70& |7 @  D' O" V' z* s! n- S
  2597. .DB 506 u1 K! [/ ^# q) L2 U
  2598. .DB 67' j1 W' m( j1 ~
  2599. .DB 578 N  e6 z6 o6 U1 z
  2600. .DB 71
    3 w9 c# c; ?6 \: G  ]9 R3 _$ S3 [
  2601. .DB 76
    7 R* r4 D4 A8 ~  \2 X' L: w1 u$ A
  2602. .DB 1026 c; W: L5 ~% s( x9 J

  2603. ) l+ _, O5 X# u$ D
  2604. ;==================================================. \# z& l; F: U
  2605. Sound_Start_Port                      ;起始播放曲目/ r$ j) |, |( q% l* M9 }
  2606. .DB 00
    + Y" u% q: U' @
  2607. .DB 006 `! e, ^2 y! T8 R6 w$ t: X
  2608. .DB 00- ^- P4 T  F* S  c
  2609. .DB 00! y; Q4 B$ K2 _0 k
  2610. .DB 00
      @1 q$ k6 i1 s( R  {
  2611. .DB 005 R2 r! \7 N/ o! |
  2612. .DB 00
    ( L$ t. c! s7 P+ s& s3 }
  2613. .DB 00
    . T+ w/ y- k. k
  2614. .DB 003 a2 `6 t0 V; B: A" z5 \8 ^
  2615. .DB 00
    % w9 S7 [6 U% T& \
  2616. .DB 00
    6 F1 I* E+ E1 l* x0 W( s
  2617. .DB 00! Q6 D. b$ Z, D; a- x# v5 L) y

  2618. 2 L  ^' j" L; I& _( x
  2619. ;==================================================
    ! g, i# ~3 L1 Q: x2 R
  2620. Sound_Bank_8000                      ;专辑bank_8000) D0 n' x3 r' n3 D* w
  2621. .DB $109 s/ ^3 Q: |' Z3 N- r0 _3 j
  2622. .DB $125 U9 L4 U0 k+ a, q4 t) d
  2623. .DB $14* Y; q2 S7 N9 B
  2624. .DB $16
    ! ^0 |, Q9 l+ e( b" p" e$ _
  2625. .DB $18
    ( Q0 V, h' T# b" n  R/ s
  2626. .DB $1A
    0 i. O( n7 g! |: R1 v" h. a

  2627. 4 z# A; P2 `* u" w. c" d
  2628. .DB $00
    * @  u% A9 w- ]2 \8 G# ?" ]
  2629. .DB $02
    ( S* {/ d9 M9 D, _
  2630. .DB $0D7 p; E3 o9 i& e
  2631. .DB $04' @* S+ R! V: h+ b% H
  2632. .DB $07. N$ s" h9 a$ }
  2633. .DB $0A
    5 J2 C$ s4 [5 ^8 D2 {7 `* V( m
  2634. 1 L  d4 i" L' k% Y4 K8 M( O
  2635. ; C! ]# d& g  J6 A0 t3 K
  2636. ;==================================================& I- \  S% ]. R0 K
  2637. Sound_Bank_A000                      ;专辑bank_A000
    ' J, o* S0 d( l5 {3 v
  2638. .DB $110 W; l* ?2 h6 C3 N) ?4 l, T8 k. D
  2639. .DB $13
    ) ^9 b( ~0 h9 ?  v" f* I
  2640. .DB $157 {- H+ T( M) o- v% v2 @
  2641. .DB $17
    ' X* k7 d" `( Z# V+ G: q' E  p: f
  2642. .DB $19
    7 u7 P. A2 z- `# d" g
  2643. .DB $1B
    ; w$ e4 c( ]& G8 B

  2644. + b7 \. ^# I5 |$ {( Q9 s/ G
  2645. .DB $01" O0 p) y9 U7 W& e# b
  2646. .DB $03% z! G! S7 u% S. c
  2647. .DB $0E( Z. {9 D; w5 l' T. i: J, \) B
  2648. .DB $055 i0 }+ T) N3 Z8 \+ g( w
  2649. .DB $08
    6 a+ h3 L6 L2 D+ B1 H# h
  2650. .DB $0B
    2 m+ f# L( f! t( \" W! d9 L; m
  2651. ( R% ~* U  g) i" u
  2652. , D% s" D1 Z1 A( S# X) C
  2653. ;==================================================/ z- O# d0 L: i  ~
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    1 |9 `3 N- c. c% G- p
  2655. .ORG RESET_ADDR
    ) o1 Y1 f1 e: ]* O, I8 @
  2656. + T* V/ T1 ~; x, S* Z
  2657. ;==================================================8 I  ~. Y  k4 l
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    ; c! C2 H; O6 N
  2659. PHA
    8 a; L+ {( i8 W! A" P
  2660. LDA #$06
    9 |- W6 ]1 h0 D% Y" X
  2661. STA MMC3_BANK_CTRL! t  Z  b  M! S; n2 ]) O
  2662. PLA
    / H; N! Z; s. c
  2663. STA MMC3_BANK_DATA8 F+ Q' d( P+ i9 U$ N
  2664. RTS
    ! e/ a: r* y/ p! p
  2665. 7 r; k, W* G& p# B9 e
  2666. ;==================================================
    - D- w5 W3 l7 e) v( M/ i
  2667. Switch_Bank_A000;切换bank到A000-BFFF8 Z; M3 j! z- k' ?! a( ?0 t% d
  2668. PHA2 K% S4 n) [9 x  W1 X4 j4 E6 J
  2669. LDA #$07) _, T4 Y; f# [% F3 b
  2670. STA MMC3_BANK_CTRL2 ?4 F$ f' c: k9 H$ `8 s
  2671. PLA
    & n2 ?0 n- @5 N7 L# S
  2672. STA MMC3_BANK_DATA
    5 K/ X8 e& K& j% O
  2673. RTS
    * [4 |: L* m0 X3 v- B' S  j

  2674. $ k) e0 O& R8 E9 I5 a
  2675. ;==================================================
    , [' _: H' Z' Q; Y5 O# K. q
  2676. Switch_Main_Bank;切到主程序bank
    * K4 v2 F: m9 Y
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
    5 j4 |% l; A) k1 z$ m8 Q
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank6 K& J8 `& v6 C$ x; M; U
  2679. RTS$ c3 R) l( o1 c5 D8 i. o
  2680. " g2 g2 y& Y' U: U* l
  2681. ;==================================================
    0 r: q* j. d& N4 n- |5 j
  2682. Sound_Reset;音乐重设(如果有的话)
    ! R4 C0 d3 f% `
  2683. JSR Switch_Music_Bank  ;切换到音乐bank. G; S9 y* F" ]( a# ^3 H; P
  2684. JSR JSR_Addr_Op        ;执行音乐重置
      Y# X1 p* L3 w( H# C3 f
  2685. JSR Switch_Main_Bank   ;切回主程序
    * f8 y! A/ J0 b' w
  2686. RTS0 @$ |: O3 Z: F) z+ D/ `8 I2 V# o  l% j
  2687. 4 V/ h' ^0 ^: z% {% [
  2688. ;==================================================# _' ]0 y# o* D# h+ _
  2689. Switch_Music_Bank;切换音乐bank
    & U9 G6 R3 S; [; \3 H+ Z" ?* U! f' L
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号4 n+ \$ z. W3 r
  2691. LDA <Music_Bank_8000
    # b/ K; ]3 Z7 m& v, L. y
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank2 ~9 {0 X( h% K' c( U/ S
  2693. LDA <Music_Bank_A000
    ! j. e8 u) U$ G: Q* ~/ b* O
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank+ O4 e. m1 l- }
  2695. RTS
    ) W1 @4 O/ r( X+ [5 V6 `7 w! K" N

  2696. + }) Q+ ~) _/ @
  2697. ;==================================================) j8 M0 m: e6 {; c
  2698. Sound_Init;音乐初始化- S: |# |* s, W& }
  2699. PHA
    6 H- M+ y0 a+ O
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    - Z/ a! ~2 R, w
  2701. PLA
    $ d+ j; e0 h$ \# t4 T8 @3 m
  2702. JSR JSR_Addr_Op        ;执行音乐初始化$ T$ o0 V* G! P/ `" h
  2703. JSR Switch_Main_Bank   ;切回主程序0 v, _1 p; H" i! }
  2704. RTS: ?  X" ~0 v/ i1 j* ^$ O0 V

  2705. $ Q- Q, N* z5 d& p/ `# j0 U% r' g
  2706. ;==================================================
    - A1 @: p% T. V. o4 |0 _6 e2 {4 v
  2707. Sound_Play;音乐播放& b  Q) R. Z$ ^7 ^# w! z* l
  2708. JSR Switch_Music_Bank  ;切换到音乐bank" H/ p" v# V% f
  2709. JSR JSR_Addr_Op        ;执行音乐播放
    8 M8 C0 E5 b2 X$ J. i7 C, B9 B
  2710. JSR Switch_Main_Bank   ;切回主程序9 X2 C: |3 L, k9 y7 E
  2711. RTS1 O( H3 n8 F, B3 ?2 c4 I
  2712. + c4 f5 n1 `/ K* n) N4 N
  2713. ;==================================================) e$ x7 L# W- ^! Q& F" h/ U
  2714. MainLoop;死循环
    6 d* i! X$ n) z: C7 s1 h1 d
  2715. JMP MainLoop* F4 {: S4 X: x, Q% O9 d8 p0 V

  2716. 8 t: F, K; m! U$ _2 G" i5 Y
  2717. IRQ_SUBPROCESS_JMP = 0+ ^& K( E( Y! Q; a. U

  2718. 6 D' J# ?" h' ^, z5 y0 A. x1 \
  2719. .IF IRQ_SUBPROCESS_JMP
    & T% \! S) f; n7 P8 T+ z9 a
  2720. ;==================================================. A5 _) I% H7 f( ^- d
  2721. IRQ_Process_0;IRQ处理过程0* g$ N3 @$ o3 R) q; @$ \# y
  2722. . U6 l: l5 X% P  d3 Y# l
  2723. ;15条扫描线后触发IRQ
    ( c# d, G2 |& ~# |4 b1 Q
  2724. LDA #15
    + O# y* Y& t4 K
  2725. STA MMC3_IRQ_LATCH
    9 W' L( f7 C2 J7 l
  2726. % w# n6 x% n* \6 a. }
  2727. ;设置屏幕滚动
    . @9 O! W3 y0 ^+ c+ e/ U- M$ X
  2728. LDA <Scroll_H7 \) y( A1 f. O% o; t+ H: V
  2729. STA PPU_SCROLL
    # I/ c; _4 q1 z# {7 x  k
  2730. STA PPU_SCROLL& F5 q8 ?8 r7 J

  2731. 9 Y. F% Q9 H! v) L& M2 m
  2732. IRQ_Process_0_End' f3 R# T+ E; z, X' u7 ~
  2733. INC <IRQ_Process_Index4 k: @" T$ m. A/ e2 \
  2734. JMP IrqProgramEnd
    : @% b  _& _; E8 ]1 }" m- A

  2735. 9 t5 \4 Q2 r. f. [4 F
  2736. ;==================================================
    4 H. e! l- W7 ~1 f
  2737. IRQ_Process_1;IRQ处理过程1
    ! y* J* @  P3 X  V
  2738. ) i% V4 `% |5 c% u2 W) b; H5 d; ^* P
  2739. LDA #55
    ' @  A, K) X1 Y* V* ?# f$ h1 q' v
  2740. STA MMC3_IRQ_LATCH
    % J, p" |5 R8 ^4 x5 c: o" d
  2741. 6 C; R! M  D1 E! X
  2742. ;设置屏幕滚动  N) X; Q1 r; g' M; M, l
  2743. LDA #$009 Q# |0 a3 q  }5 [) ]1 h! Q) `# u* \
  2744. STA PPU_SCROLL& K- o4 C! y0 t* w
  2745. STA PPU_SCROLL
    9 o. [& V5 Q( z  D, ]# F+ y. [8 J

  2746. ; v, B& b4 E, k. d: q( L! f6 }2 x
  2747. INC <IRQ_Process_Index
    0 F( l8 P$ T( K
  2748. JMP IrqProgramEnd: q4 s9 l) L' D9 a/ O
  2749. 0 }& g( C) N; G1 a4 K6 P
  2750. ;==================================================, b0 M8 Y0 E' V7 O4 v7 q
  2751. IRQ_Process_2;IRQ处理过程2
    9 N" S2 W& k1 N+ O$ V% ^
  2752. 5 E) @# ^1 F/ z6 m9 N" w9 E+ f$ M: ]
  2753. LDA #151 l3 d) d+ E7 O5 K% i
  2754. STA MMC3_IRQ_LATCH9 \6 c3 i8 Z# l1 B4 ]

  2755. ; v, z$ m  h& _% w- K  Z3 }' ^
  2756. ;设置屏幕滚动. t9 N: X# r4 x& _2 I! L
  2757. LDA #$00; x. B' l/ F" A. z9 z7 f! X
  2758. SEC
    $ ?$ V& l# \9 ?/ m- y( a5 G2 d
  2759. SBC <Scroll_H
    ! O, H* ?3 h: e' K, H: L* w0 N
  2760. STA PPU_SCROLL
    * w+ `0 {; B; j) S$ I9 l
  2761. STA PPU_SCROLL0 S, ^( S$ N4 L$ `

  2762. - r/ j$ i; e' O0 O
  2763. INC <IRQ_Process_Index
    5 W4 X8 I/ Q9 g6 Y6 y9 `8 S
  2764. JMP IrqProgramEnd
    7 W$ o3 i7 K* n1 o
  2765. . ^0 q+ S. R4 _  U4 O  J
  2766. ;==================================================
    + y: D, ?! F" Q  t; R
  2767. IRQ_Process_3;IRQ处理过程39 j# e& N" {0 j' o; c; J$ r% j6 P
  2768. 1 `' C) @" Q+ k9 g
  2769. ;设置屏幕滚动. b- x9 ^; B3 j+ V5 p8 O- q3 V/ ~9 h
  2770. LDA <Scroll_H# J6 t5 |( V1 }9 \- m8 Z9 G$ _
  2771. STA PPU_SCROLL+ D1 u5 S# ~4 @1 r4 U; v5 G; V
  2772. STA PPU_SCROLL
    # R# h& ]% L8 _& g% }
  2773. % X6 W3 L, {8 w
  2774. ;禁用IRQ, y* B2 {- W. U$ U
  2775. STA MMC3_IRQ_DISABLE; i! l! B$ \1 n. X
  2776. JMP IrqProgramEnd
    $ D" j% @: t3 k' i! ]. H* |5 `& r

  2777. : p3 |) a, \9 j) @* z! p
  2778. IrqProcessAddr, \" W3 B+ i1 \9 ?8 w5 _: b" H/ A
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3
    . ~& A  |. t! L: f) Z* e

  2780. ) O$ v8 V* |/ h0 L, R7 z
  2781. .ENDIF. C( e8 u4 `! D
  2782.   e; `7 ]* M6 Y; j: l6 a
  2783. ;==================================================
    ! q" n$ `' m, P8 u5 l9 V+ b
  2784. ;IRQ滚动模式常量
    4 x0 V" B0 O1 J# u3 j
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动& G, z# d) E. R& z
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    1 s9 a7 ^. T% B- X( s' F
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动
    & p& m9 V, h: R! }# s& {. H
  2788. - i/ O( p% Y( v3 R: W4 A% j
  2789. ;IRQ扫描线数据9 T7 z! J. E# e7 }2 S3 A5 E! n0 M
  2790. IRQ_Scanline_Data' {6 `4 O+ Z( h. V5 k
  2791. .DB 8- [! n5 w9 U% h# i8 l
  2792. .DB 544 J2 o+ V9 Q7 t0 I4 r
  2793. .DB 8/ C+ j2 M0 g- J: f$ W- [
  2794. .DB 00 ;关闭IRQ( m. k4 g; K1 d& z
  2795. 7 T2 d+ E$ \) z( c5 D3 L+ Q. N
  2796. ;IRQ滚动控制模式- o0 R7 N1 P  |! S( ]8 \! ]
  2797. IRQ_Scanline_Mode
    0 e% W5 \4 b0 u
  2798. .DB IRQ_SCROLL_MODE_ZERO
    + I) k# V5 G" @! ]& Q& z) ^; l6 }
  2799. .DB IRQ_SCROLL_MODE_ZERO
    ! V$ S! B2 Y, C/ i* ]" D- C
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    2 U& @: r  o" {9 v
  2801. .DB IRQ_SCROLL_MODE_LEFT
    ) |9 ]# ?- M$ U2 f2 t0 k4 i1 e
  2802. : x' P1 |' _* Z7 K1 z% B5 B3 O* ]
  2803. ;==================================================: k8 x6 ]8 Z1 T5 I
  2804. ;IRQ处理
    3 i- z+ g; I7 o2 c
  2805. IRQ_Process" \! b; ?7 R! n' u0 U2 R
  2806. LDX <IRQ_Process_Index
    ' I1 E# p& f- L9 n) l4 S* n
  2807. LDA IRQ_Scanline_Data,X: C: S+ R& |6 g6 j
  2808. BNE IRQ_Process_Latch8 Q. g! m/ A' F5 y& f
  2809. IRQ_Process_Disable;禁用IRQ, ~/ a: N/ l8 |" g. O
  2810. STA MMC3_IRQ_DISABLE
    1 o3 T. A1 u1 S# E+ s
  2811. STA IRQ_Process_Index
    * W! y: W5 E0 [6 K& g
  2812. BEQ IRQ_Process_Scroll
    / ]8 B8 D' ]' c3 ]* y% l
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    7 j. ?/ ]: K( M) m7 k# s
  2814. STA MMC3_IRQ_LATCH0 p& m  P8 ^% @# E$ T/ d
  2815. INC <IRQ_Process_Index. e+ X/ D( h! I& C: n! h
  2816. IRQ_Process_Scroll;IRQ滚动控制6 I6 X: x! l3 E9 A
  2817. LDA IRQ_Scanline_Mode,X
    + |" S3 V4 ^( L! N9 W$ @3 Z
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    & [9 X- l* B+ V6 E" v; T0 p
  2819. BEQ IRQ_Process_Scroll_Left
    $ U; A2 s( `. b  d% y
  2820. CMP #IRQ_SCROLL_MODE_RIGHT
      g0 M$ u8 i& }/ H: i( w. b' _/ t
  2821. BEQ IRQ_Process_Scroll_Right' a5 @( b2 Y$ p4 y9 }3 k$ m* H
  2822. IRQ_Process_Scroll_Zero;不滚动, j; D" ]4 L1 h
  2823. LDA #$00  y4 J# Z: h4 O5 {
  2824. STA PPU_SCROLL
    $ H+ q' a0 }% u6 F3 M! X
  2825. STA PPU_SCROLL0 `! z: n  _& l9 T
  2826. RTS
    1 `) l6 H$ S3 O/ _& ]
  2827. IRQ_Process_Scroll_Left;向左滚动
    + a* X; ]+ r- g7 \; K) ^
  2828. LDA <Scroll_H8 ~+ J* R8 O2 b
  2829. STA PPU_SCROLL! C5 \; L4 c. U
  2830. STA PPU_SCROLL! s: U: w! Q& S* B) ?  ?- H0 h; _  O
  2831. RTS) c/ C! T. e. f# y& p2 g* c
  2832. IRQ_Process_Scroll_Right;向右滚动9 o+ K+ o7 L9 L- q; w
  2833. LDA #$00. L& v: k9 c. x( [: r. x
  2834. SEC1 E7 ]" p+ i5 c, ]
  2835. SBC <Scroll_H
    / w& s& X1 g. x
  2836. STA PPU_SCROLL
    ! T/ M1 W) s* x1 y8 V5 w+ J+ t, P/ b
  2837. STA PPU_SCROLL
    : ]) w. o. U  q  n/ n* x4 r% M
  2838. RTS( h5 X0 w1 S% f- d

  2839. 8 S& c! Q( I: r% ~& D7 S2 p
  2840. ;==================================================
    - C% N" p3 Y$ m6 k
  2841. NmiProgram;Nmi中断处理0 G( `' d& F; `) x
  2842. PHA
    " u2 Z/ \( @  K; O# E( A, A
  2843. TXA
    - C8 H0 V  l' f5 {! i
  2844. PHA
    & g+ j0 U" x3 f; q
  2845. TYA6 P. a- w+ |: k6 D# i- s3 B8 c
  2846. PHA) L0 l# t5 Y4 B% l; k, [, A
  2847. ) z" L% y; l! y3 o5 S0 {
  2848. ;读取清除Vblank标志, 防止重复进入
    6 H2 ^, w( d2 a3 T) |
  2849. BIT PPU_STATUS4 s) {5 A/ I! ^; G4 O+ ^
  2850. + d& S9 I9 W: L4 p- D! T3 N$ g- b
  2851. ;切换主程序bank: F% O: o- c) K( h
  2852. JSR Switch_Main_Bank
    % T$ U8 x* @: o7 G4 v+ Z- v

  2853. 7 Q. J  C' J# @1 e: _) |' e
  2854. ;Nmi处理
    2 d! ]7 K6 [* r9 ?. [
  2855. JSR NmiProcess# v( F0 o, D  Y4 k" a0 F0 x, M
  2856. - u" c4 N' ~- e* L' F$ K8 [
  2857. Nmi_Proc_End$ d0 F+ j3 `% ]  [. n7 I) G1 a
  2858. PLA
    + M! @, C' L" Q" G
  2859. TAY
    + g- U$ I+ x. R/ x0 M
  2860. PLA
    " N' D, n6 C" a( |) w
  2861. TAX$ K$ n( n! m' v6 }" P; _
  2862. PLA! p/ w5 C! s. E, C; Y. U
  2863. RTI( m4 l& D* N! v0 A6 ?
  2864. 0 ^9 y% A3 ^3 Z
  2865. ;==================================================0 c6 w3 d% O4 k6 x, \
  2866. ResetProgram;重置中断处理& }. u1 d. C! l6 [
  2867. SEI5 Z! s( Z& b9 j7 a8 ?4 [- e
  2868. CLD2 f$ j( N" J2 F+ B" [
  2869. LDA #$00, }- r# u$ I# V
  2870. STA PPU_CTRL1 K! |2 U3 G3 A3 g, I. u$ k4 S
  2871. STA PPU_MASK
    $ S) n' ]0 y$ j3 G
  2872. ) |9 ^/ u* ]: w' f
  2873. ;切换主程序bank; B$ ~0 X$ i8 }  r& U% G. I. z4 W$ K
  2874. JSR Switch_Main_Bank& C0 s6 K$ p/ E5 T, j4 d
  2875. $ v  Q# c- v4 s! c/ D: f
  2876. ;程序处理开始& f) v- I4 n0 V8 T0 t! A
  2877. JMP ProgramBegin1 Q2 I' N$ \$ m$ B/ \

  2878. + ^1 e( }" @3 p3 D- N9 ]
  2879. ;==================================================# a$ w( O1 G) m" F: i+ L
  2880. IrqProgram;Irq中断处理
    8 Z6 l( |& g7 ~5 O9 @' A
  2881. PHA& k, y) B' j7 N4 E9 o
  2882. TXA
    3 _" K: K( }, E
  2883. PHA
    6 p( J7 a" D+ U) p" t
  2884. TYA  |; U; K) `3 S5 {5 T+ f" B: T
  2885. PHA7 k, k: a9 U( |' p; `  j

  2886. 5 w0 m& w8 t; r0 T% f4 f
  2887. ;关闭IRQ' d4 Z, x, K* r5 U
  2888. STA MMC3_IRQ_DISABLE
    - Z6 Q2 q+ [' o1 E

  2889. 4 f. \& A! g) f2 K9 j& T
  2890. ;允许下个IRQ触发
    # \; W1 o1 H" I5 ?
  2891. STA MMC3_IRQ_ENABLE
    5 `  n) ~, v7 o7 w8 q

  2892. , M# n/ p* d. e) @
  2893. .IF IRQ_SUBPROCESS_JMP/ u, b. o- H' V1 ]3 s
  2894. 3 v8 d! ?( H' t7 R+ h/ Y
  2895. ;执行IRQ过程5 E# Q; {9 Q% s# r, E
  2896. LDA <Data_L
    9 Q) S! M3 h; q, W( \
  2897. PHA
    3 ]) V4 G% W, M6 F1 s2 Q# R
  2898. LDA <Data_H
    # a. D" t2 [4 Z9 B( K3 B: @1 k
  2899. PHA
    5 ]. T$ V2 V; n0 }, I- e5 {
  2900. LDA <IRQ_Process_Index; W9 s  x1 e; f) R- R
  2901. ASL A
    6 e5 q2 U5 s5 ^
  2902. TAY/ W( C+ d1 P' G) O, _3 M& ]0 W
  2903. LDA IrqProcessAddr,Y
    , V0 S3 p2 j3 B" [- {
  2904. STA <Data_L& a9 d3 s0 X8 s
  2905. INY& M& {' ?) h" `( N
  2906. LDA IrqProcessAddr,Y
    ! I: c1 y* ~& d, o* F1 z
  2907. STA <Data_H  m7 x/ [3 e0 ]7 w  h/ u" j5 ]
  2908. JMP [Data_L]
    $ ~- Z; n" u5 N2 C
  2909. : O% E6 X- V: A- o( |( y6 H5 z
  2910. .ELSE& @  J, Q8 l* b5 B4 ~0 U

  2911. + o/ ^4 t; d6 c4 [+ ~
  2912. JSR IRQ_Process
    , h, m) b, `4 n( i' `

  2913. # m5 Z6 i; `& G
  2914. .ENDIF8 ^" P) K; m3 ^1 A( j' j. q2 L0 v
  2915. ( Y) f% G; k, B/ E- V" _" G3 f
  2916. IrqProgramEnd: m+ Z2 N; l( i
  2917. .IF IRQ_SUBPROCESS_JMP+ O/ A( A1 g8 s/ ^' N
  2918. PLA) B, A3 l# E& Q# b
  2919. STA <Data_H& v6 ^) N6 F* X+ K) g- g
  2920. PLA
    + |5 b: g8 _+ }0 C! z# T9 Y( t( U
  2921. STA <Data_L" @% N6 e. k7 V* t! ]
  2922. .ENDIF" @: k$ }# L7 t, E9 S
  2923. PLA
    0 H9 I% Y/ c1 }1 l- J! n
  2924. TAY
    / k& L: q6 c4 ^! p! _, m' r3 G
  2925. PLA* J1 X8 B' b+ _& L. w9 k2 k, g
  2926. TAX1 R8 K8 J5 b1 d% t4 k$ t
  2927. PLA+ x5 ^. A+ P/ ?9 t
  2928. RTI
    2 W' N  f1 F: V2 H* O  h
  2929. . m" z* ?4 {/ i( H0 c8 Q/ I, U
  2930. .ORG $FFFA4 o, d! M" u/ Y, i/ e
  2931. .WORD NmiProgram# g0 [8 w, \$ |" B3 L9 ^9 X
  2932. .WORD ResetProgram
    1 f: l; @" E' Y
  2933. .WORD IrqProgram
    3 w: J: B2 F' i$ K

  2934. & q( Z. n% H( l
  2935. .BANK RESET_BANK & BANK_DATA_MASK
    # w" ]& x& O" p) c( S
  2936. .IF SOUND_BAR_SHOW_ENABLE& i( J* I: s! y$ E
  2937. 5 B) ^9 E& I% p4 o. c# U
  2938. .ORG $FE00  N8 e7 F" o- X9 c( z& l" k
  2939. PHA6 j/ v6 C1 u6 M3 v# Q. R
  2940. STY $07BA) ]" \4 t) f) P3 C1 D# r
  2941. LDA #$8D* f. a" t; l* D3 ~: M. S9 x
  2942. STA $07BC
    , N7 m/ H# z* Y4 w# F6 e1 s
  2943. TYA  |4 i3 Y1 D/ a; i9 u0 ]  a- U
  2944. CLC
      `; F/ Y3 B0 G
  2945. ADC #LOW(Sound_Bar)
    4 s/ d; V5 H9 Y% ]9 d, i5 _
  2946. STA $07BD9 D+ u  h' b& b# q, {6 V& q
  2947. LDA #HIGH(Sound_Bar)
    ) J) U" T! ^" q$ o% p
  2948. STA $07BE: ]- F# c: R5 J
  2949. LDA #$60
    - _7 m( X. U. f$ V4 ~: [
  2950. STA $07BF1 o/ A, S4 Y1 i* C/ q
  2951. PLA
    + n* f7 G. Y  t+ Y, G
  2952. RTS
    0 K/ G' O" e* f& }/ u# P
  2953. * n: ?/ X5 Q( |7 E: m9 B
  2954. .ORG $FE20& A: y. y; Z2 q& Z4 @% i: F: r
  2955. STA $07BA
    - @7 O$ a! n4 i$ t  N! ~6 }7 ]
  2956. CLC
    ( k# J8 a3 `. ~, F
  2957. ADC #LOW(Sound_Bar)+ E& M+ ^7 ?" H5 k/ C
  2958. STA $07BD! n" d( x* D' g1 l: A
  2959. LDA #$8D& C4 r" S- N+ J, b
  2960. STA $07BC
    - K6 X7 b# l) F
  2961. LDA #HIGH(Sound_Bar)
    + Q0 ~1 r8 l1 b# r& N6 _5 i$ v
  2962. STA $07BE, d- o- F+ }7 ?9 g6 @
  2963. LDA #$60
    0 }- ^( D0 @' X/ p+ S! }
  2964. STA $07BF- \5 L0 A5 F8 |) V
  2965. RTS( B% N# G* E. _8 O6 m

  2966. ) J1 X9 y& F5 u0 A. v# t$ M8 n
  2967. .ORG $FE403 p7 E6 k2 |! D& z" P, x. n- c/ S4 A6 h
  2968. PHA
    0 J$ x! E% F& H$ n6 U
  2969. STY $07F1
    . Q  s( F  u2 K8 F. ]0 {. p
  2970. LDA #$8D' x4 ^; ^8 f7 G. V5 w/ i/ v
  2971. STA $07F3  C2 P4 b# m( X9 ~
  2972. TYA
    ) J8 R& @: x5 h0 ]8 W9 P
  2973. CLC
    . i0 j9 w: M# _( n( h! ]! A7 A
  2974. ADC #LOW(Sound_Bar)
    % y( \5 _. ~# b5 a7 I5 e5 ^- n1 ~+ ]
  2975. STA $07F40 I( W- n& o5 \) K
  2976. LDA #HIGH(Sound_Bar)
    . X; b2 `+ W7 ~2 Q5 E' \# R
  2977. STA $07F5
    # G6 d1 [( L6 O1 ], F
  2978. LDA #$60. }3 I) p) V, u/ x8 ?: A* L
  2979. STA $07F6
    . h" B: j( V2 K" g* K
  2980. PLA0 k& ~' j4 g$ e" E# w- {
  2981. RTS* y+ H% m8 y& ]& X3 c
  2982. ' A# B% y) x. X. y0 v# s
  2983. .ORG $FE60
      I0 b! g$ H6 k, R6 @7 J
  2984. STA $07F1
    4 {  t+ L: n& U4 ?/ u" ^9 ]
  2985. CLC
    $ S4 a: H' |( R: V8 b: b: Y, B9 Q
  2986. ADC #LOW(Sound_Bar)
    ! i  j9 X) _) i) _& k
  2987. STA $07F47 ~4 ]# U' `, l5 a; r1 V$ ]
  2988. LDA #$8D
    2 J% g! i% S- E+ V
  2989. STA $07F3: d* d" {0 [' {" U! I
  2990. LDA #HIGH(Sound_Bar)% t- I  W9 y7 N, I
  2991. STA $07F55 l! u( w: t% A6 T9 b7 ~6 t. c. t8 k/ E
  2992. LDA #$60
    8 j$ I& V$ f4 K9 D3 A1 J  X7 `
  2993. STA $07F66 j2 r. V  |0 A' Z" o3 J
  2994. RTS8 W0 W- `+ b: t

  2995. & g- |# Y' E( B
  2996. .ORG $FF40
    * ~8 |4 A- J6 ?  B9 j, V4 m
  2997. STA $4000
    6 q! X! L/ }. `
  2998. STA Sound_Bar + $00. e) M5 Z0 m2 U& E0 X  q# H1 G' x
  2999. RTS
    . w4 r' R* t" k) q

  3000. # [" X/ g" q/ E0 |
  3001. .ORG $FF48
    ' z5 L+ H9 h) L" Z1 M
  3002. STA $4004
    ; g) ~  J% y: u# r* y: J1 P
  3003. STA Sound_Bar + $04
    ! L. Q7 ]; W( j" w( U
  3004. RTS7 [9 t$ S& |; Y! [
  3005. * ]8 b# E+ Z  k/ ^, c7 w( X8 k
  3006. .ORG $FF50
    1 z, Z+ [( i& B/ K; H# {! o9 S
  3007. STA $4008) i. D9 q& }% M0 P
  3008. STA Sound_Bar + $08
    7 X7 d% O- j0 n4 v; i5 Z
  3009. RTS
    . k& ^0 J* W4 \' F

  3010.   t$ w. a* k; y- r! E* x* G
  3011. .ORG $FF58( f# R- f; {* D+ d- D7 b
  3012. STA $400C
    9 h1 t* T2 U5 c* n# n& r
  3013. STA Sound_Bar + $0C
    , I1 @8 U8 z, |1 [3 q
  3014. RTS
    & }1 t% @) ^. A5 {- L  `. o  d
  3015. 4 {: }0 s) d0 z3 \
  3016. .ORG $FF60: k! \: L% ?# f1 t: B
  3017. STX $4000* S$ A5 `$ O, ]1 S: T
  3018. STX Sound_Bar + $00
      h! n  p& Z) G4 F: D+ X( s1 K7 L
  3019. RTS
    ! {$ D" n9 n& X; ~9 A3 V
  3020. . P/ s( I8 {9 m& K+ q/ |$ q
  3021. .ORG $FF68
    7 F! F. m" _$ e, t, C$ y% m1 j
  3022. STX $40046 h2 j/ X' f( D- i! v, o* a) H
  3023. STX Sound_Bar + $04
    0 R6 B) j% m! G" @0 H
  3024. RTS( F& u4 H! |$ }- s6 f
  3025. $ u; K5 V$ D2 L& d5 c: e1 q
  3026. .ORG $FF70
    7 K2 ^, o, `0 ~3 y# X$ E
  3027. STX $4008
    : E! P  d* l' Q: K8 y) @0 ?8 K( Z1 c3 e
  3028. STX Sound_Bar + $084 d+ M8 J6 U3 `- r! M% ^6 n
  3029. RTS9 c1 x6 c1 f! \! B6 B* C
  3030. % l% C6 X( ^% ~2 i: g! j
  3031. .ORG $FF78$ l: h3 k. o+ }! j  A& A7 [4 B
  3032. STX $400C
    ( [* W# i: U  u2 B
  3033. STX Sound_Bar + $0C
    & o9 ~) n* d( G6 ~  _3 d# U, K% ~
  3034. RTS( A& H8 }. J" x8 ^
  3035. . C6 S. |& y$ T/ B! U3 i* R* S
  3036. .ORG $FF80: M3 V! H; T+ O2 c/ s8 N
  3037. STY $4000
    % ]2 d8 j4 y6 n' [9 m( z  l  J
  3038. STY Sound_Bar + $00
    / ~7 g/ |4 l+ b) N6 K
  3039. RTS% I1 Y- \  Z* v! n- a5 j, W
  3040. ' ~3 X; T  j3 q; A; s7 j1 ^
  3041. .ORG $FF885 h" J6 e! m5 H1 F9 B3 `
  3042. STY $4004% f4 c) M8 o) T7 M4 g" F7 e  ]8 {1 e8 c
  3043. STY Sound_Bar + $04
    - H/ }( k- c6 y% m+ n' ^
  3044. RTS$ F! X) Y2 o( W  P/ a
  3045. # E5 u( _. j4 t4 H
  3046. .ORG $FF904 G/ Y% F! J+ X& X# H
  3047. STY $4008
    ; n8 e$ \/ ~& T( _6 Q5 |2 K, u0 w9 y( ~$ P
  3048. STY Sound_Bar + $083 ^9 j# t% V3 U. G
  3049. RTS
    - G  Y9 s( l/ N1 L
  3050. 5 ^- `# ^/ p/ M# }+ f
  3051. .ORG $FF98
    2 j. w# v& [' c* b) r4 O1 ]3 E
  3052. STY $400C
    , U) G8 y( M# Z3 k. O. r0 C
  3053. STY Sound_Bar + $0C
    & d2 t5 v) b0 y0 x0 U
  3054. RTS4 v) c3 U5 u: Q+ M2 r

  3055. ! Z! x; h# T, c  T% ]6 D+ S$ m2 p
  3056. .ORG $FFA0
    ! {# P5 X) U  P& R
  3057. STA $4000,X
    " K# [. Q" i5 J
  3058. STA Sound_Bar + $00,X
    / [# Q1 E) U# e- ?* ^. G
  3059. RTS( C  G. }$ Z& B' T( t* Z
  3060. ' ?' v1 l7 S0 D" Y
  3061. .ORG $FFA8, T( p& {3 G; o- `0 ]7 T- x! R
  3062. STA $4000,Y- k; w' `) G1 h; B- A
  3063. STA Sound_Bar + $00,Y$ s- k% h( I: _* C
  3064. RTS
    5 w: q6 H6 y8 ^5 z" G* ^

  3065. . I) x* U2 c& s' ]' u/ V" j
  3066. .ORG $FFB04 R# M: ]1 B; {% n, ~
  3067. STA $4004,X
    3 F/ y* t( d1 ^2 l
  3068. STA Sound_Bar + $04,X! Z* K5 H7 y/ B; ]# y" i: L) x
  3069. RTS1 }6 ?  s4 g2 N% }0 A: }1 e; E/ I5 f

  3070. # A9 s; @! L6 @' _' f3 c
  3071. .ORG $FFB8; G. Y% Y. u& ^$ w1 m$ F
  3072. STA $4004,Y: J; L6 h  m3 H8 q& N
  3073. STA Sound_Bar + $04,Y
    ; I- E" r) @5 E+ r
  3074. RTS  V: w4 L$ E- h9 A" o/ W  S
  3075. 8 }9 N. s6 a; e  _0 [; E3 u. S+ V
  3076. .ORG $FFC0: K3 n8 `8 d, U3 d& _1 |7 G
  3077. STA $4008,X# y2 h) F3 o8 Y  \, u1 ~
  3078. STA Sound_Bar + $08,X0 l" {, H% F, e& m" `( o
  3079. RTS
    . a' Q  s+ b$ a, `3 i/ F2 Q- ]% z

  3080. . _" F6 `7 O! e2 z, {9 |
  3081. .ORG $FFC8
    " f& X: `: K* I7 J# Y, T- u
  3082. STA $4008,Y
    7 V# c! h# \9 @9 ~  M
  3083. STA Sound_Bar + $08,Y# O8 i$ [0 O" ]( K
  3084. RTS
    : D) Y  X1 b" H& S$ k4 O. M0 N
  3085. 1 L0 N+ Z0 \( U9 `; R8 n7 g/ Z
  3086. .ORG $FFD0; S5 _" j& P$ x4 }
  3087. STA $400C,X
    # A! r" Q( o. {/ y
  3088. STA Sound_Bar + $0C,X4 P9 A/ P; e0 W6 N/ ]1 Q- w
  3089. RTS
    , ]2 X3 k( A2 _* m% L& }4 h/ F8 W% X
  3090. 6 V. u1 @5 _" C% S
  3091. .ORG $FFD8
    5 D  P* \$ v  A- F7 D/ Z7 l
  3092. STA $400C,Y
    ! R2 G) n* g5 `% Z) j' {
  3093. STA Sound_Bar + $0C,Y8 Y2 s  n8 d. U) _( c
  3094. RTS
    + V% [# T9 U2 E6 F

  3095. $ p0 X' a5 x2 `7 P
  3096. .ENDIF
    - y; o6 R) V* U9 ^
复制代码
9 h% C/ P  j3 H2 u6 D0 X5 w
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3366 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-18 21:31 , Processed in 1.110352 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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