设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑
6 N" _7 \  r+ g! k: j7 S3 r3 S- f! g; D/ M  I, j
[FC][音乐12 IN 1]
- [2 f( H( e# H: L) F时间: 2023.07.23
3 _) |+ p0 Z% G  k2 L作者: FlameCyclone
2 B$ u& F; m9 z# R- Y  C
- O1 W# Z0 K: q9 D收录音乐内容:
8 G2 s, h9 a: J" p( v, I5 r2 z1.Raf世界5 [( Q2 z5 {& f) \: z: Q
2.最终任务
5 b, L- Y) @8 f' u3.赤影战士' q$ W+ @% ?4 M/ i; z0 R6 ~
4.双截龙
4 e& Q' q: c- }( B$ n5.双截龙2
0 b' S/ E# P! v7 x" v- f. N1 \  j6.双截龙31 x* w) s0 \7 B# X
7.洛克人3 H9 P8 U0 F+ g  E6 B9 S
8.洛克人2' r8 M# O0 o$ O# F
9.洛克人3
# K" U. z6 h" r# d- |& b/ T/ l! d10.洛克人4, V3 r; t9 ]$ _: {( u
11.洛克人5! w0 y0 ?4 P1 ~% G1 k: y. D
12.洛克人6
) _& ~1 J- |9 r) s2 n! k; \" a4 G
操作:4 l. N- V, @: ~  a( G+ t
上键:         上一个专辑% s" K4 ^9 m/ `. V: Z6 z
下键:         下一个专辑6 ?- A2 q. Q& ?% L
左键:         上一曲( Z0 X. Z: v' Q2 O
右键:         下一曲4 m6 \: y8 D! b3 m6 U
B/A键:        前10曲/后10曲
' [$ C6 \8 c8 U3 c: G选择键:       下一页3 x- w: ^+ Q1 i/ \4 b  ]$ z
开始键:       停止/播放
, m- q8 p2 r3 Y) ~1 U) Q- M( d  P/ n" j1 ~3 m: X. d+ H
http://flamecyclone.ysepan.com/( N1 x8 X0 z; B# Y; b  B% W
) O8 c0 Q8 q& U9 c  ?

+ ?6 v+ y, T/ b. i" `" s2 R" i& @8 q! W6 _+ F8 ^( b
( W0 E5 S% z/ q- C! O' |  K
  1. ;[FC音乐][播放器模板]
    / T, n: n9 {( `) P1 f" W  L6 x0 K
  2. ;FlameCyclone 20230710" b! A) T- E4 ~/ [) W( n

  3. , `( W4 {' k- d, w
  4. ;文件头
    + p6 _" c7 S/ z4 a6 U0 C
  5. ;======================================================================
    , O. {2 j& T/ e* S5 r) h( l
  6. .INESPRG 16                                             ;16KB PRG 数量
    , n$ |- z/ @% E. ]( i6 U
  7. .INESCHR 1                                               ;8KB CHR 数量
    / Q$ R% Z: X! D
  8. .INESMAP 4                                                   ;mapper 4
    + ]. U2 N% x% k: K5 ?- u
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直* Y3 T, @4 M2 V, i- b9 \5 I1 x
  10. ) f- @/ j! c# J% q) V6 W( V& `9 K
  11. ;==================================================
    ! h5 f# T" ^6 @9 F+ U
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ( E* }6 j. U$ F. w( I' K$ J
  13. ;==================================================
    + o  i$ }, i; r' [" t8 K
  14. BANK_DATA_MASK              = $1F/ r: t7 l" j' t$ n" \* W
  15. CHR_RAM_ENABLE              = 0* H+ K  {2 X9 L2 G7 M2 p; G# A! c
  16. IRQ_SCANLINE                = 136
    + b, y, y; `$ R
  17. ;==================================================, i, d9 t% R/ U8 R9 Z' x8 m- q
  18. SOUND_DATA_BANK_00          = $00
    9 E6 z& j/ z+ D5 v: v# E2 b
  19. SOUND_DATA_BANK_01          = $01( {7 i, {, i- `" F2 Q( ~: X6 V) I
  20. SOUND_DATA_BANK_02          = $02: @- Q; E% K$ [  m- G/ Y; e
  21. SOUND_DATA_BANK_03          = $03& `8 \. W: g0 M/ ^3 v1 P. ^
  22. SOUND_DATA_BANK_04          = $04
    * w4 q+ A4 X7 _) E, ^+ H6 v  ]
  23. SOUND_DATA_BANK_05          = $05
    " d% ]. r  Z4 y6 X" A
  24. SOUND_DATA_BANK_06          = $06; _3 Y- m* x) }6 J
  25. SOUND_DATA_BANK_07          = $07
      y* A. h1 |6 O2 ?' f5 ]
  26. SOUND_DATA_BANK_08          = $08
    ! B" m; s" }. h5 u" U2 u$ c& X
  27. SOUND_DATA_BANK_09          = $09
    ( ^) j& u0 k: T3 k# {; }! W, h
  28. SOUND_DATA_BANK_0A          = $0A5 ^8 f9 ?. v( d/ r6 s1 d
  29. SOUND_DATA_BANK_0B          = $0B! v6 A# o( J3 {
  30. SOUND_DATA_BANK_0C          = $0C
    + b, {+ A( V' J: g5 _4 M
  31. SOUND_DATA_BANK_0D          = $0D9 n" [/ T9 G& O- h) }
  32. SOUND_DATA_BANK_0E          = $0E
    $ L' v! \5 |( l+ f1 |, I4 B' e1 a- W
  33. SOUND_DATA_BANK_0F          = $0F+ u8 W9 W" `# c9 z3 u! @
  34. 2 j5 R; u8 @4 `. c1 Q% R  q1 d
  35. SOUND_DATA_BANK_10          = $10! K! Z' Q7 ~1 h. Y" |8 n7 {! t
  36. SOUND_DATA_BANK_11          = $11$ W4 p- D( g4 |7 s7 p; y
  37. SOUND_DATA_BANK_12          = $12( q! F. h2 f( t% v8 d
  38. SOUND_DATA_BANK_13          = $13& D! g0 b' E. z1 l3 ?
  39. SOUND_DATA_BANK_14          = $14
    . s8 j8 G' T4 C6 v0 ~, {1 ~" Y- |
  40. SOUND_DATA_BANK_15          = $155 q% J8 x; Q0 e- H/ g
  41. SOUND_DATA_BANK_16          = $165 X3 @9 [# l( l2 r+ p4 l) H
  42. SOUND_DATA_BANK_17          = $17
    - S# ?' P1 _! X# \
  43. SOUND_DATA_BANK_18          = $18! j  @7 e8 ?5 {" L2 G1 E2 _
  44. SOUND_DATA_BANK_19          = $194 X2 a) v% v" z# d& `. Q
  45. SOUND_DATA_BANK_1A          = $1A6 Z/ X2 g  g4 q3 g
  46. SOUND_DATA_BANK_1B          = $1B
    ) e: M$ M) ^1 E: x" w
  47. SOUND_DATA_BANK_1C          = $1C
    + q$ l8 M/ i- `6 d: h! k1 X/ |2 Y$ `
  48. SOUND_DATA_BANK_1D          = $1D
    " {) n. B) v& p+ ^; P0 M2 e
  49. 8 a% o% f0 V3 m7 f
  50. SOUND_DATA_BANK_C000        = $1E  N$ W' }& e& D/ c; x8 u
  51. SOUND_DATA_BANK_E000        = $1F2 k  f. M2 {. W! G
  52. ;-------------------------------------------------7 u9 j" ^5 y8 f; v
  53. CHR_DATA_BANK               = $20
    3 f/ M. h% C2 h0 D/ n4 C5 I0 u
  54. CHR_DATA_ADDR               = $A000
    3 ]2 G1 ?" ]3 t) q& U2 e7 N" P
  55. ;-------------------------------------------------! a& b( H: {* F# }  r; O
  56. PROGRAM_BANK                = $00* I& d+ Y: ?% x3 W3 f2 H
  57. PROGRAM_ADDR                = $8000
    , V$ d* d3 i( y% J
  58. ;-------------------------------------------------
      K1 H  N' a: P: p4 b# z
  59. RESET_BANK                  = $1F% ^9 l) k4 D' e+ Y1 g
  60. RESET_ADDR                  = $FD00$ n" F4 k. v, d) r

  61.   g- F3 L- l& }0 q' b+ Z0 V
  62. ;==================================================  j' H9 d! Q8 f
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数
      c& D: x+ m. U7 l" U
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引3 @! y8 e" |: ~8 g; R# y
  65. PAGE_SIZE           = 5                     ;每页节目数
    . r6 ~& Z, \- {$ q$ N4 u# o5 }( p
  66. : _, R% S: B( T# Y! T* \" n
  67. ;==================================================+ M& s# ?2 N" \! U: \
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除
    + L6 e2 c0 R  `' B0 H6 t* R
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数) J$ }" Q4 r! C( c
  70. .ELSE
    + e4 `+ V1 x1 n+ J
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数
    / a" e* S, r2 w9 l& }5 w8 a
  72. .ENDIF" ?* R: ?3 q0 Y+ n& \4 j$ n" A
  73. 6 g& H1 O' b7 m! v0 [( v" d. v
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引9 r- P. B3 R, J, W' a' u! Z
  75. / U& P" R0 \& S/ R
  76. ;==================================================0 A4 |, r$ ?( z1 b9 ]9 d+ Y5 \
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置: k3 f6 J! i* [1 g' m) C% B# I
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2
    ; L9 S& s  y* F
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;7 T/ B1 @# c9 M5 e' m% z' u. Q9 W4 L
  80. ;==================================================
    : m- i( D9 ]  V. x
  81. Caption_Text_Pos    = $204D ;标题文本位置
    ; \! \0 Z9 R* g6 ^  u: h2 o& o
  82. Author_Text_Pos     = $2324 ;作者文本位置( L2 V, k. |. b" s; c+ p2 f6 y
  83. Date_Text_Pos       = $236B ;日期文本位置" u8 F' |6 K! P/ V
  84. ;------------------------------- q3 y6 R2 i: o. c& @0 J3 s
  85. ;------------------------------
    ; E' ~) h: }" a# `! T1 z
  86. .IF SOUND_BAR_SHOW_ENABLE
    0 f5 M' w9 e+ w. K) a8 {3 Z/ n

  87. - Q8 F1 d/ w1 {4 w) j
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    6 \- a+ {$ C' {: i: M+ w
  89. Play_Time_Pos       = $22B3 ;播放时间位置
    3 I, ?* h+ \& ~  O' N" ^
  90. Play_State_Pos      = $22F3 ;播放状态位置
    9 B) E& @8 ?$ o/ y- H; V% _8 `

  91. ' y+ b7 G; A" E4 h9 S' E# f
  92. .ELSE
    2 c1 {( J2 s) S( X6 v' p+ j. u

  93. ) e# w' Q) @/ ~# e$ h6 Q
  94. Play_Index_Pos      = $226C ;当前曲目位置' O4 e# H: c  g- f+ w' r) I
  95. Play_Time_Pos       = $22AC ;播放时间位置4 u" F/ n+ d: _2 H% p
  96. Play_State_Pos      = $22EC ;播放状态位置& Y+ n4 ]4 c9 `

  97. $ Q3 g( h9 x7 x4 I$ q
  98. .ENDIF
    % w9 n4 r& y# `. q3 u
  99. ;------------------------------  a3 r% {4 D# r; g8 \
  100. Track_Name_Pos      = $222B ;曲目文本位置1 O/ Y2 X7 u8 V2 r. X" R. |( C3 M, x
  101. ;Track_Name_Pos      = $00 ;曲目文本位置5 a" ]8 m& ^  T$ R- j
  102. Sound_Track_Pos     = $2265 ;声道文本位置2 t. Y& p, I! p3 r
  103. Sound_Bar_Pos       = $2269 ;音乐条位置
    # D6 ^0 v9 }' f
  104. ;==================================================
    & C+ I3 ^/ k1 X: A1 t
  105. Scroll_X = $00
    , V- m  {  C1 @' m2 s5 M: L0 m" z
  106. Scroll_Y = $00" n# I3 H5 z3 K, X
  107. ;==================================================  c+ w. L9 B; k$ Q, b1 F9 p# I/ S3 [1 ]
  108. Sound_Ram_Addr_1       = $0100
    & n. x+ D! b- [, n$ d
  109. Sound_Ram_Addr_1_Size  = $80
    2 z" s/ e6 g; \# r$ e8 D: O
  110. Sound_Ram_Addr_2       = $00909 Q6 D' }3 J. t, B0 x/ y
  111. Sound_Ram_Addr_2_Size  = $70
    ; e2 {: c/ [* y. T3 ^% b
  112. Sound_Ram_Addr_3       = $0700
    0 N3 O4 B7 B# G3 j1 ^& i
  113. Sound_Ram_Addr_3_Size  = $00$ j  t7 F9 a0 _- s- R
  114. Sound_Ram_Addr_4       = $0400' k4 l& D1 r9 z* `# [
  115. Sound_Ram_Addr_4_Size  = $00
    ! m+ J% W; ?. N) g- C
  116. Sound_Ram_Addr_5       = $05008 |) J& x; i9 ^/ V& S: B1 d
  117. Sound_Ram_Addr_5_Size  = $40' V' y, a' N: I7 M( p

  118. / E/ O3 O* s; o' Y
  119. OAM_TEMP_ADDR   = $0300" e% k0 w3 A: h0 b$ G9 E
  120. ; C1 I" c6 ~9 E) X+ v
  121. ;==================================================
    3 b1 H7 x5 b% A9 O0 Z- v
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器" I1 S$ p: u8 o4 X! _, Y9 [( ~
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器
    3 L* m/ m+ L5 k  @$ d$ [. _
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    4 v2 ^: U/ D/ i
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    5 p9 B; Z+ X+ P+ X- F  E
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1  }+ I7 P2 j0 h; a
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    4 P! l2 G1 Z+ t( o
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    $ S7 h3 f3 h1 J$ h& O
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    8 c* `! E1 `: L1 H% G
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    ! h8 G8 T4 `& b$ O; W7 b/ g" ]
  131. APU_STATUS              =   $4015   ;声音通道切换
    5 q: Y0 Y9 Q! V+ t7 H# |1 v, ?
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    # O4 r- U, K% D8 l0 l' V# a' K
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    : C  z+ y  I+ M: l& C5 b$ W5 h
  134. ;==================================================
    2 a% k5 F8 V3 j9 @1 c
  135. MMC3_BANK_CTRL          =   $8000
    8 p8 t3 Y4 X1 t+ i  `+ a  P7 C
  136. MMC3_BANK_DATA          =   $8001! z- m; ~0 s- S+ Y. d
  137. MMC3_MIRRORING          =   $A0002 M# M" g  ^0 t* a3 ^6 @
  138. MMC3_PRG_RAM_PROTECT    =   $A0017 [  }* Y6 X' [' v# H! O
  139. MMC3_IRQ_LATCH          =   $C000  {, Y# I  o! L, x& n
  140. MMC3_IRQ_RELOAD         =   $C001
    ) B4 t7 c+ x2 Q9 x% g
  141. MMC3_IRQ_DISABLE        =   $E000* x8 b& T3 s# K6 c, m/ j; X
  142. MMC3_IRQ_ENABLE         =   $E001: U! m7 H( X) L4 J/ s# [
  143. 3 Q/ F. m+ ?! X
  144. ;==================================================
    * J: n( w6 o* L) @7 g8 [0 M
  145. PPU_Addr        = $0200
    , A' W4 D0 X: a3 H8 M1 q0 O3 D
  146. Palette_Addr    = $02C0
    % P) i7 g) F4 K. U
  147. Sound_Bar       = PPU_Addr+$E0
    4 o$ U4 h% f4 h8 a/ w" C8 h
  148. ;==================================================
    - e+ a3 D: a( p4 @) U2 V1 ?
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D: @/ F/ f9 \- B& k
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11+ U- Z/ `+ B+ _. @& A
  151. PALETTE_UPDATE_MAX      = $2C" }, m. N- }6 o  l5 ^
  152. PALETTE_UPDATE_MIN      = $21
    ! e3 |2 }. @: n4 ^
  153. PALETTE_UPDATE_INTERVAL = 60, s( B* @* H- k  l2 t: W6 [0 w: r' O
  154. ;==================================================6 ^8 x3 e+ j( p' ^
  155. Sound_Bar_Cnt       = PPU_Addr+$F0
    : K& _8 j6 l* j& z
  156. PPU_Cur             = Sound_Bar_Cnt+$02
    0 Y3 ]# n8 g8 T1 v- y" P$ ]: w  ~9 B
  157. PPU_Addr_H          = PPU_Cur+$036 {* ]! w" H- g, l% j
  158. PPU_Addr_L          = PPU_Addr_H+$04. ^$ l9 l' S* t0 k! R$ |% R: I
  159. Screen_Ctrl         = PPU_Addr_L+$01
    $ N) H! `; K$ e, x0 J! ]
  160. Screen_State        = Screen_Ctrl+$01
    " R- a& N! }4 }/ P; M+ m/ f4 V/ {
  161. ;==================================================3 q6 j/ f1 d8 Y6 |; Y! }
  162. Use_Ram_Begin       = $50& T5 j; A  c, S3 \# O4 v! g' j
  163. ;==================================================. Z9 q* Y4 X+ l4 ~% e5 w
  164. JSR_Addr_Op         = Use_Ram_Begin( t$ ?" A6 u3 l7 d+ }
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    5 j3 d0 w% z, [3 h' |
  166. JSR_Addr_H          = JSR_Addr_L + $01' ]' [/ W* i; s% p. y
  167. JSR_Addr_Rts        = JSR_Addr_H + $01
    ! v5 g( K1 t( s7 K' a+ D$ M) X9 E, j
  168. Data_L              = JSR_Addr_Rts + $01& ^) A9 g5 u1 f- t
  169. Data_H              = Data_L + $01
    9 C" j: K) U5 H; N( y% b
  170. Data_Cnt            = Data_H + $01, x6 t& Q0 t& \; m
  171. Data_Buf            = Data_Cnt + $010 |7 f0 v" h7 Z3 ~. b
  172. Nmi_Time_Count      = Data_Buf + $01* M  @# L5 {; q3 _
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01
    / c4 [: s0 T# i" G8 s9 Y
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01' n$ ?' z) z* F; f) F+ q3 F8 O. f
  175. ' h0 O' @  C9 O) _$ u+ W" c
  176. ;调色板刷新标志4 U2 c9 p& l, W1 @
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01
    & z( I' N( }% s" {! L$ E

  178. * F8 x6 d# F  M/ k+ o8 w7 f
  179. ;当前帧文本写入禁用标志: ?2 {* _" h: Z" N6 F
  180. Text_Disable_Flag   = Palette_Update_Flag + $01! J0 ~2 K  l+ k* Q2 ]+ X+ W8 j8 e

  181. 8 q0 r* w- o' h; i& @$ z- T
  182. ;==================================================  n  H1 l3 h7 ?( ]
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动# [9 F/ v$ K' h3 W& y9 M) S! [
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条4 |7 \" g. E/ m" L2 r4 N6 ]3 G
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间
    1 F3 [- _& R+ |" E" s/ Z, S
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    $ C5 a: n0 O1 y
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间$ @  [! W/ Z9 ?* W" j
  188. ;==================================================( u- s* }: x, {' H8 s
  189. Key_Keep            = Text_Disable_Flag + 1- c9 X- Z. W5 H: ~/ M
  190. Key_Once            = Key_Keep + $011 Z( Z$ D( k' ?
  191. Key_Kemp            = Key_Once + $01
    " g" v7 R4 q) \; E: J9 t# N! w
  192. Key_Temp            = Key_Kemp + $01
    + c/ b# k  ]1 \! I8 |: f
  193. Key_Getv            = Key_Temp + $01) [* a& F! C) A
  194. ;==================================================
    . L+ i* {/ ^, ?/ O
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    # i: W% m0 S( Z3 d$ u0 X" r
  196. Music_Item_Last     = Music_Item_Cur + $01/ q( Y) D' Q0 s
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集1 C- {( ^' w( j' f( L$ k3 w
  198. Music_Cur           = Music_Total + $01  ;当前曲目- c" p6 u1 U" }* V# B7 W' q" x  |
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目4 Z7 r/ B% C5 i& X9 \; {2 q
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    * A; K0 q3 }& T1 r2 n. ~: O. v7 V
  201. ;==================================================5 N0 N- c9 n3 R8 u& S9 L2 Q
  202. HEX_Data            = Music_Stop_State + $01) o8 s. m9 s- I2 I2 X+ B* i8 D* _
  203. DEC_H               = HEX_Data + $01
    - S  Q, P1 m9 [
  204. DEC_T               = DEC_H + $01
    * O: Z  }; E- F
  205. DEC_L               = DEC_T + $01
    / }1 _3 }( [% S$ _
  206. ;==================================================
    # Y2 ]: U) r7 u  u! u# F8 A
  207. Time_S              = DEC_L + $01: h; d, \5 Q* K
  208. Time_M              = Time_S + $01; b* l, c9 d0 Y/ S
  209. Time_H              = Time_M + $026 W  Q; B: Z+ z1 q6 {
  210. Time_Cnt            = Time_H + $03# I5 h) c/ @& {) ~! E
  211. % g) C3 ^; a! L) @$ F5 V. U
  212. ;==================================================
    ' Q9 I/ E0 z5 F! b: p
  213. Music_Bank_8000     = Time_Cnt + 1
    ; I  U) _5 ^# U  D
  214. Music_Bank_A000     = Music_Bank_8000 + 1! C" n! X& M$ @! [% q
  215. ;==================================================( }  A! x& @- I2 g
  216. Scroll_H            = Music_Bank_A000 + 1
    6 ^% _; t4 \# P& J  d, [% T4 e
  217. Scroll_V            = Scroll_H + 1
    ! S" Q) L! V/ h6 S) d$ V
  218. IRQ_Process_Index   = Scroll_V + 1* k+ L8 S4 W+ J  u0 b9 X: f
  219. ;--------------------------------------------------
    ; b5 u  Y3 H' J5 P8 |
  220. Page_Cur            = IRQ_Process_Index + $01; {1 I; u: \5 r# d" f
  221. Page_Cur_Index      = Page_Cur + $01; K, J. g' L5 M8 o
  222. Page_Cur_Cnt        = Page_Cur_Index + $013 ^; `( o6 T+ O
  223. Page_Last           = Page_Cur_Cnt + $01
    ! b3 K1 ^! V/ Y" T- }
  224. Page_Last_Index     = Page_Last + $01
      |# y3 ]3 L7 s8 f8 w# O
  225. Page_Last_Cnt       = Page_Last_Index + $01
    8 C) F: v% X3 ^) m
  226. Use_Ram_End         = Page_Last_Cnt + $01
    & p+ T1 [6 {+ S( t7 ?' l+ i0 e
  227. ;======================================================================
    ) ^. U4 g( K  W% P4 O! t' j7 l- R
  228. ;音乐数据块4 S/ U& Q/ l- U& k

  229. ) v3 o# x: [5 g6 I: h
  230. .IF SOUND_BAR_SHOW_ENABLE
    3 z2 L! t! ?+ x2 R
  231. 4 r1 D( c8 H  [; Z8 X
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK8 |1 R; X$ _2 r2 s& ]) X( b
  233. .ORG $9000
    + l) s5 p! `8 Q! i6 S! S
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"
    9 {, W2 H+ E! d& {/ ]

  235. - o8 e5 P) v% p# j& \9 I
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    ( I0 i, b6 H5 P& ~2 \7 J# R
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"" ^8 {$ l  D# ?0 H
  238. * V9 [0 k% [/ i( D# t& d+ ~+ U
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    2 S' N: Z& v$ e8 h/ V- o- |
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"- L( Z" N6 w) p# |. F5 Y
  241. & |: z0 H( B" u: G2 n  N
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    ! z) G, B4 u/ J" M5 O* t; @
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"/ J- G/ z6 f3 b$ T) D' w( \6 Q

  244. % I; a2 [( o& D3 Z# x  s# A- P+ K
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK
    8 T$ b9 X% @" {" S
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    , x' U) U; \0 p  t/ G
  247. ! f' W. o5 t* O4 U; }8 C
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK) w! X2 B+ U* y: b$ k" W- v
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    - f$ Z. R% K* O

  250. / G! Q; K( k9 ^! v2 s
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK- z* M" Y& ^5 a9 S* }5 Y
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    4 I3 B! n" h9 c0 l) }2 G2 w

  253. % n4 M# H/ ?5 I% b2 c, y% V" {1 m
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK- i, n3 O& Y1 I/ A
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank") I6 e! u, h2 O1 k" t

  256. / x7 O! w' g6 u9 O8 a6 n% i9 w
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK. u6 T( r( p6 |0 g& p1 K2 R0 j
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    * X) S. g% g( k

  259. 5 A  t3 c, F& E$ L' r" o. Y' k
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK5 u0 W: d# Z% u% F
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank": Z8 _1 K/ y9 D, `: V* J
  262. - V# |. F1 U4 a4 r( w6 t: I5 z
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    ' C2 k7 ]1 H' [6 u% `$ @9 R: E
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"* b/ W& w" y0 F% I

  265. & Z* I8 p" k, ]' h
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK
    ! R3 s& h; X8 p! t9 }
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    5 A" A$ G* f. T* q7 x4 ~7 ^
  268. 2 ^/ q& [+ j" q! A
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK! i8 U- m$ @4 X4 W) [' f' m
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"
    ) l" U/ Z0 [( E9 R( V3 r0 Z

  271. " l" t- _3 R4 B
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK+ q" p  K8 i+ ?6 H7 z8 Y' K- E
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"
    + z. T6 z% }5 U' F' {+ S/ v

  274. . m: U2 s# Z. B; @# k$ U8 |" Y7 ?# q
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK: ?7 K! a3 E  u2 L* a0 z
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank") F7 }" F! l+ X. f  f! [2 i
  277. / y. P7 m5 |# Q1 n" ]
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK) d9 Q! h- o$ N& G: y0 ~
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"( I' l# f8 `0 I  T  }9 m2 }8 h" p

  280. * p) o( p% d6 Z5 t) p
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK* u6 q: b0 I1 d  v
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"
    + M; y  l9 q6 K5 [! }" l
  283. ' [9 ?4 v4 h5 n! [/ V
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    3 r* Y% G+ a0 U
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"( E5 @& c2 p+ `/ d% a# Q2 V! d
  286. * O* E2 |; i0 q; _1 j- @  s' M
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK" t, l! n6 c# Q" K& ?; j1 k
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"" U; s; C; P6 D

  289. / M5 Y2 `/ r, n6 p& ]
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK" c, |$ j0 A& i7 Z; K1 [' \
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"
    8 I, V. X! |8 _  A
  292. + y7 \5 W8 x# H
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK5 l2 g* |" O4 D2 M, l3 ^
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    % V; O" s- W4 f; w

  295. & X) {. ?2 @, }4 d/ C) t7 }
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    & A3 h7 o& g; f+ a
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank"6 ]6 y& e" y& H
  298. 0 W* v9 r) t9 u
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK6 R. Q$ `% \- Q# C
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"
    " F1 [4 ?3 r/ g- \* Z
  301. $ z* G; G. f7 |  B" r4 V3 Q& l
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    ) j  j: g, B; b  P' m* [9 j
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"  Z+ l! R( L$ Y) I
  304. 1 H2 Z. J0 R" X; U% Z; j& Y
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    0 \1 y  y$ ~* I, S$ K$ g
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"  ]( V9 z" Z. q) c
  307. 9 z# ]' \: ]0 ~
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
    / H+ `4 i) u& L% l" d  L
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"6 e8 n( O3 N( u& t1 E+ j

  310. 9 `) ?# z. q( W; O
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK1 ]$ r& K, O" B& p4 S
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"
    1 ]6 E/ ~3 g4 E2 ^$ q; J

  313. 6 |: f! X" i2 [0 c0 A
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    3 }0 a& t1 W: i
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"3 b" L1 L" x3 P9 ^4 s9 V2 @
  316. ' D* Y- m; n: J2 D0 A% Z# W
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK0 Q: _& S, \; T3 x3 T
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    ( G- U, H+ p4 |( F' ]; A  }
  319. 5 u1 Y) q2 V6 v# ^+ U: B+ L
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK/ I" X* q/ }. F) ]6 V5 u% G' U
  321. .ORG $D400. k" L9 y  D/ }( E- M* k. g
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    1 s/ Z: E  O) x& r$ v/ ?* A

  323. , ^3 d- k! B# j
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    6 \" w) N1 T/ L3 V( t
  325. .ORG $D800! A$ `7 f" {7 ^) K
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
      \' [- H* Q6 L" {: l& x
  327. , o4 E2 N3 s2 e2 ]- @3 S1 d6 t# C
  328. 0 y! y1 M: c( v. L2 g5 r- g
  329. .ELSE7 z. k: B% {" ~. Y+ c  j4 r% B+ o
  330. # o3 R& O4 E  q
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK; E- U6 w% N) J2 N3 B- u6 Z+ B
  332. .ORG $9000
    ! h3 X" Q+ b( y/ X. T2 y# ~% d
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"
    9 ~; D: r( F) M; E$ \

  334. + S! X& `* z8 {0 C5 Q8 r
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    ; f% c' ~: h1 ]( X
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"
    / D  J& K4 S! Y1 B
  337. 8 Q9 p) `+ ]! y& E( Y" r
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    3 W3 ^$ N; \; U9 ?% `9 s8 K$ x9 g/ ^
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    1 z7 a9 v  a% q2 J: \
  340. ( w5 t9 i$ I" W' @# r1 {
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    0 E! ]& h9 P$ |- Z* r* _8 C
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank", @1 x4 y7 d% Y! M2 m$ @2 C
  343. ; U2 g/ E8 ?# m5 C; L% w
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK" Q2 c6 Z, a- W2 s. i2 C# N
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    . M( f) M. O* Q2 t
  346. % X. }* R0 |* K* X1 ?7 Y3 M9 K4 |
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK; p8 x) V# Z$ o7 D/ @
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    0 k6 O! c+ N5 K- H: Z: s/ C
  349. 4 A6 p& [- k1 y. e$ S
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    , c7 q4 O! S4 c0 L0 }6 `
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    " |5 b% Z2 e" s7 I4 H/ h0 R

  352. 8 }& G$ }( K( F9 i' J+ u  O
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    ! d3 p4 K* D# S9 S- o: o; v
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"6 q; s* Z0 b( L& N
  355. # q! }* h- K$ L2 a4 p
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK" y1 o! j8 x8 V- ]0 @& o
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"# T% s* _( P; L. b4 Q

  358. % }* L. a5 C, ^7 W) l
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    8 Y7 M4 g6 \7 i! c6 I
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"3 N5 C1 {" r# S* N6 e  D3 x

  361. 6 ?  `; ]  s* R1 f! n8 `
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK8 b2 }( S% K+ c
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    ; Q) O: y- v% [* B6 `
  364. 1 _4 O# y. [- C, ^) o: W
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK5 p$ w. G( k. O+ R( c
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"# v2 S, o, P# V

  367. 2 J" V9 L% p' Y$ c: S- `+ X9 Q7 k
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK
    9 J8 p$ a% X. v4 l& n4 k1 S
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"0 D: R* g6 x0 d5 t

  370. ; a5 q. y! s- u& \7 S9 H" \
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK) j- E. F  R7 ?0 s2 Z& l, A
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"; h) m, J9 |/ Y- {
  373. ) \* P& ]- K' b+ Z6 y
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK  d' d* ?$ U+ l$ j+ _
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"6 D! o2 P' |3 Q
  376. 3 {; e9 @! t+ k4 x$ ~- c$ o3 Q
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK' R! H, h5 N, ?# I( _7 s6 O0 {
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    - s  q+ \0 a1 a* J0 Y, e9 ?! J! D

  379. ; @$ @$ S4 h) Q7 i. O# N5 G% `/ Y
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    # `  I+ q2 W! G9 S  F
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"9 u' I* B: w* j9 C+ k, P: t7 K
  382. - x2 t4 ^, p* y' W+ z: B4 `3 b
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK* k9 R% ]  D# @: k# @
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    # ?% |5 w9 ?6 Q' C  K' }! M
  385. 6 ?4 ?4 l; k; H7 B0 B6 g
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK& Z# \1 N& H8 y! i
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"! B* ~' r; Z* v1 B: `  f  E  p
  388. " a0 ~" f0 B* \. ^7 g9 X) _* f
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK( q5 F1 {6 s3 v) n* o0 x' W8 J9 m
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"- R; K, P3 ]; [, @3 f; d

  391. ) A3 F, X$ ]# o
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
    , y  ]6 K" b0 V: J
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"( k+ U* k) S( H5 i
  394. ( m6 z7 ]0 @2 e6 ~0 n- d6 @; G
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK& U- X7 ?" E) L( t8 D, n" {1 |
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"5 o) w! i) H3 B0 t, K7 z
  397. ' u' H$ d5 @6 a. I
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    2 H1 J# n: g. A* t1 e5 k
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"5 M9 B, p4 j- h0 [9 c4 u% s
  400. ' S7 b/ [, G% Y0 A9 X+ B# L$ ~
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK: l$ }% `! l0 e, \& J
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"' c) ?# _1 n. B8 }* w( N9 A

  403. . e" D' }0 X) A; n" m  Q% w
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    $ [" |& p, x$ ]- x# j* E+ I
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"( m- i# G/ `$ A
  406. 8 }: i+ Q# b0 A4 Z! y! ^
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK4 f2 {0 R$ a+ n7 }  {
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"/ j) t; i. v* D: O

  409. ) l# G# \5 F$ j6 l8 f
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK' }: c1 i/ S, r8 C2 P1 S
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"
    " s. b: |8 @' o. ?) ?
  412. 8 M+ w1 }( L3 Y& \" w
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    3 }4 D1 u' E! j% L" Q
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    / o/ h% b1 W: f( @& k
  415. ! i# N8 c, ?* R( M0 ~- k+ N
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK0 n0 M9 L) M5 q
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"  s+ w! x5 k' r. o* `. f% {

  418. 5 M) ?1 S9 i6 d6 V& p
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK2 u5 I. r+ U5 C# F5 k  v+ |; t
  420. .ORG $D400" I* U* y; J& i7 @
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    7 |5 W5 a; o" Y% B4 G. X

  422. : Q- s( _6 X. m0 W* j5 g
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK0 C0 z8 ~+ l7 {  ?5 z: Q
  424. .ORG $D8008 u& _* a% f- ?5 H' a
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"
    9 G* C: a( d! Z' y" b
  426. " n* n$ A1 [. l, @4 [
  427. .ENDIF/ L3 ^2 O% F& Y+ E) J
  428. ! S4 B# J: c- X" F  z6 f  f; `
  429. ;CHR图形数据6 L* }, I0 m. \/ \% @9 t
  430. ;======================================================================- K" {, S$ Q% y- S4 O
  431. .BANK CHR_DATA_BANK) T6 R: F' I# [: s. w, h) U
  432. .INCBIN "chr_bank/chr_data.chr"
      z( A% ^6 ~5 w5 T5 }/ u# c1 m% l

  433. & \" B6 D+ D4 \( @2 j4 V5 m9 C& s
  434. ;======================================================================
    ' V3 I2 u: I" R) B
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK
    5 W& Z7 G) z  ]* |! X5 W; I
  436. .ORG PROGRAM_ADDR
    4 V) Z9 t9 k+ F  _

  437. 3 q1 }5 |8 v7 a7 |! N, U* v
  438. ;==================================================
    " i# c+ }3 T" s$ I+ H* q1 n
  439. NmiProcess) ~, z: \6 t! k5 R% ?7 ?+ B2 A4 I

  440. 7 _+ d: S4 w- o- e" ~) B( ]
  441. ;关闭屏幕控制2 s6 s) O1 E5 Z; ~- ~: E
  442. LDA #$00
    ) h  M. j7 [/ p1 i0 f! s$ _
  443. STA PPU_CTRL- x. q/ R, W0 r

  444. % h$ ~9 s& J$ p; g/ M6 \
  445. ;没播放音乐就不需要触发IRQ
    : V- [7 D$ Z3 o2 _1 s! g& y
  446. LDA <Music_Stop_State& k" \) A& u+ O' o7 n9 C
  447. BNE NmiNormal6 R8 i' j8 Q: ]5 F# j
  448. * A, m1 j: `  g( d
  449. ;重置IRQ索引: v; N# R' G' T# e( w
  450. LDA #$00
    ) o3 c  |1 G7 ], ?
  451. STA <IRQ_Process_Index
    3 J& \+ s. i# S' q! O( n$ _
  452. , X5 y1 ~* d, |) c! t. |( N% z) ?
  453. ;时间秒数为空则跳过
    ( R1 h0 ?; w3 h  K9 d& o
  454. LDA <Time_H2 @4 n+ d5 }" c: e! |
  455. ORA <Time_M
    1 X  ?- T# I1 m# e# O7 H
  456. ORA <Time_S) q& Z4 y" m4 l1 Y* x( f; E! {7 d) y
  457. BEQ EnableFirstIrq
    + r9 r& l# B5 _, C

  458. 0 d5 Q  A' U2 V  b5 ]" M' Y/ @
  459. INC <Scroll_H
    9 Q% T: q2 G* f9 A7 T/ W
  460. ( Z7 j3 N2 Y8 |- ?% u8 A1 h) }
  461. EnableFirstIrq 6 B  Z3 g  I7 t* F& |
  462. ;80条扫描线后触发IRQ
    / q2 ?, G7 U2 T! a' p
  463. LDA #IRQ_SCANLINE* k: b$ p2 u2 V, \% u! C& X* x$ K
  464. STA MMC3_IRQ_LATCH
    ! x6 c' ~% A% d) ?; ~! E
  465. STA MMC3_IRQ_RELOAD
    ( Q9 T; {  l5 F0 x0 @: w! d- ]7 Z7 Q
  466. STA MMC3_IRQ_ENABLE9 R* S3 o& f, V' g: s. Y% u
  467. CLI/ O5 d" `) E6 s1 ^) ]& J

  468. 5 H4 w: P. i4 x$ N4 M
  469. NmiNormal
    9 a2 E2 z2 C" |, `9 W, ~9 _

  470. ! L. q; S! N" W/ ?5 w9 t
  471. ;处理PPU图像
    1 o6 o6 n* k0 ^& L
  472. JSR PPU_Proc
    5 y% u* B2 h7 V5 F' R

  473. ' O# {- X% N$ E
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)) |: C1 h0 h" H# p& Z4 X; R
  475. LDA PPU_STATUS$ x) q& ]# B. E. H3 _/ R* q2 M
  476. ;LDA #$00
    / S. L& _' e2 ^' B
  477. ;STA PPU_OAM_ADDR
    0 x7 p7 X; y! `, u$ {
  478. LDA #OAM_TEMP_ADDR / $01009 @9 W' P8 o9 ?8 o6 E  u
  479. STA OAM_DMA$ j3 C& v: S8 c* |; g6 E
  480. 4 V# a2 a( P- E; W: K: f" J% R5 L
  481. ;启用NMI中断
    / M/ ^0 j0 I- }
  482. LDA Screen_Ctrl
    ; F* o2 v( W6 e& |0 L) t
  483. STA PPU_CTRL; `# O2 K6 @- {' F. @" b' S; k
  484. $ b9 m; A$ X" ~+ [0 H2 w
  485. LDA <Text_Disable_Flag
    0 b6 E$ B1 }  ?5 R- d6 n! Y
  486. AND #TEXT_DISABLE_RAM" w$ ]6 _1 g4 `3 @9 \. x9 [# z- B+ O; ~
  487. BNE Nmi_Sound_Play
    0 b8 q! c9 c2 {+ ~3 D

  488. / \0 K/ |. R/ n6 a2 t
  489. ;处理手柄输入7 W- n7 q$ g# X6 \2 x
  490. JSR Key_Proc# E7 E6 r7 Z: ]7 a
  491. . b$ m7 l( P3 s2 {5 w
  492. ;切换音乐(手柄触发)& B$ ]# l! s+ q$ p
  493. LDA <Time_Wait_Cnt
    4 K; h5 X, T( r! E6 f8 R/ M
  494. BNE Nmi_Cursor_Arrow
    3 X- r& N* J5 G3 \5 Q
  495. JSR Change_Select_Item; w; [/ k/ b4 r# V: W. e0 \; ~+ q
  496. # \0 a* m' W0 t1 ]
  497. Nmi_Cursor_Arrow- J5 j8 J! F0 W/ [! I

  498. 4 X" F/ J" Z$ ~
  499. ;处理光标箭头
    * K' u) c3 h' X/ x- I6 u% t) G! w/ n% d
  500. JSR Show_Arrow
    $ [1 m/ [' ?# x. c  I1 m

  501. / f/ H, A0 s( Y, j- T8 v% w9 y* [
  502. ;更新调色板0 j0 f! {- w5 A, W/ G# ?/ @
  503. JSR Update_Palette_Data
    + y5 _1 w2 U3 U$ U: B
  504. % E9 s: ]6 f" ?( I2 @; L6 Z
  505. ;显示时间(缓冲)
    % a/ v6 B! ~/ Y- u, b" Z9 X% s1 x- X
  506. JSR Time_Show4 H: s# l( w( r% U, \0 k4 n
  507. 7 }" c! _3 B6 l5 V
  508. ;音乐显示(缓冲)
    / N8 G( K) K$ F3 v3 U& S1 D
  509. .IF SOUND_BAR_SHOW_ENABLE
    , B, P0 `  c. a, w& n- C
  510. JSR Music_Vision* T. s% ~9 ^9 H; O& A1 R# s5 H$ s- L: Q
  511. .ENDIF  I4 ?* S" i+ `- |9 h3 M$ ]
  512. & d- u: r: x+ V0 o. H+ l* {* v
  513. Nmi_Sound_Play
    3 g3 S! k% i2 {& h6 b
  514. ;播放声音
    ; U" ^8 z7 t# ~$ Q" J/ @- [6 T
  515. LDA <Music_Stop_State
      A2 P( J- g) u" X0 d
  516. BNE Nmi_Time_Wait_Set
    ' J! {* ]2 j" N0 k0 n; O( h& i
  517. JSR Sound_Play_Proc
    . G5 o6 U( P  \" r! c8 ?: t1 Q8 U
  518. 5 F( ]3 l% y: N, j9 ]8 z! G; r
  519. ;播放计时
    4 I; J: Z; q# d6 [
  520. JSR Time_Count
    % e9 k* c8 O/ O- n0 N& [
  521. 0 h  F& J: o$ x9 f; b
  522. Nmi_Time_Wait_Set! F4 G9 @- c% f0 j9 u% L
  523. LDA <Time_Wait_Cnt5 |, a9 y. t4 y) Q
  524. BEQ NmiNormalProcessEnd
    + b& H+ d/ z5 ]/ I2 _
  525. DEC <Time_Wait_Cnt2 z# Y( C  C( \. V8 R* u% H8 Q
  526. NmiNormalProcessEnd
    - q2 W! _- K8 K8 t  ]+ L4 p! u4 @
  527. + q! q. W# K: K& S( J
  528. INC <Nmi_Time_Count2 Z9 \. \2 }/ R- k+ p
  529. & P# i3 ]( J. p. T) I4 ]% \& F
  530. RTS
    - d% U# c, l5 I7 c6 O
  531. / l0 h% W/ M+ W/ _. h& v. q
  532. ;==================================================0 H: p8 o+ ~2 N* F# x, g
  533. Init_MMC3- e- G* _* `: b0 n
  534. ;==============================' W5 m; c( a: V% f
  535. ;禁用IRQ
    % U# \# ^& q$ j1 S2 N2 J: ]
  536. STA MMC3_IRQ_DISABLE6 O1 V1 {; C/ r3 \% w% D' l* |

  537. 0 }3 S0 z+ A9 V. l# `+ c; S
  538. ;水平镜像3 o# d2 d* p: E  F1 _
  539. LDA #$01( D3 ~5 I! \- |& @& Q5 n
  540. STA MMC3_MIRRORING. ], D4 O# l# J2 B) |
  541. + Q( z) S4 y+ p" r
  542. ;初始化图形bank
    % |  B4 w& O- X" E  L
  543. JSR Init_MMC3_Chr_Bank
    " B# P5 n3 i5 |
  544. 6 K% x  R  W! v
  545. RTS
    , K% S0 q5 j- n! g
  546. ;==================================================: q; \# T0 \! `! D  q" A
  547. ProgramBegin;主程序
    $ N+ `0 D8 a! C' ]
  548. LDA #$00
    4 V# o+ D/ L4 j# D6 G& o4 E5 Y
  549. STA PPU_CTRL* z' B' \+ j/ j
  550. LDA #$00, E! r" K( o3 k- t$ q
  551. STA PPU_STATUS8 n# D/ T. p( ?! T( x0 E
  552. STA PPU_MASK
    1 \4 e7 e0 S+ C7 C3 N
  553. STA JOY2_FRAME! T3 p" u# ^" w; X- `- E: y# E
  554. ; L) r# P9 [+ v* s$ J
  555. STA PPU_SCROLL- ]! s1 U$ k% o; t" L" K+ j- G
  556. STA PPU_SCROLL2 Q; y# i) j6 V( b' A: i8 v* E3 T
  557. " Q" a' r* V9 }( x, R! l# R& ^- d
  558. ;==================================================
    % f- i$ I6 z! y1 D: G* d# d& h
  559. LDX #$FF
    # n% _& g( j5 A6 X
  560. TXS
    - D: {! D# a6 a. h- z5 V8 [% q
  561. - F( t/ d9 `0 ^/ s- K5 o! k5 e
  562. JSR Init_MMC3
    ) b! n. W; b  [3 h; D7 Z
  563. 2 |+ e) Y( s# Q0 x% [! X' x
  564. LDX #$02! U# z6 @$ ~$ l
  565. Check1
    ( [2 a, x) b% V" z7 X2 u# ]
  566. BIT PPU_STATUS
    ( {7 k8 |, g- x1 h" L% S
  567. BPL Check1
    ! s$ ~. f8 {  A& I- u. X! v5 n
  568. Check22 ]' o* T# f# e7 I% I% ^, U( E5 ~
  569. BIT PPU_STATUS
    ( k7 Z% G# k- H  }0 E8 s- U7 m1 N
  570. BMI Check2* B. ^1 ^4 p% d
  571. 0 y5 N  ?3 N- K
  572. LDA #$0F
    ! X9 S1 [# @0 B' [2 m9 |
  573. STA APU_STATUS' U3 \: l! S) ~- i) E# n: |
  574. LDA #$C0
    ; V, ]* I  N8 ?9 v: O& j
  575. STA JOY2_FRAME' X; `- p: f$ [7 q3 S4 d
  576. : n, X6 p. b8 q( z
  577. LDA PPU_STATUS
    . r3 B' R0 N5 Z+ I3 W8 _' z/ x
  578. LDA #$10
    ) C- `  {( b& p$ U' s+ `" ]
  579. TAX* V. q; N1 d  s8 J) G
  580. Check3
    1 b6 L) r' H4 B+ \
  581. STA PPU_ADDRESS+ E, a7 P# a/ u3 G4 ?) Q
  582. STA PPU_ADDRESS
    8 _" Z6 v: s. g: o
  583. EOR #$00
    5 l& X4 h, a! {4 t+ l
  584. DEX
    " S4 E6 E/ }/ T
  585. BNE Check3- v0 z6 n* `6 Z
  586. ;==============================. X* E  l6 U3 Y, O8 ]
  587. ;调色板清空  w" `/ `8 i+ Y7 E% A
  588. LDA PPU_STATUS
    % b" f  r& L; w* L. \
  589. LDA #$3F
    4 p8 I& G' P* {" f. q0 F, @
  590. STA PPU_ADDRESS
    6 F7 s* E8 i% O) Z
  591. LDA #$00  P5 J/ \+ R- y/ y1 H4 R
  592. STA PPU_ADDRESS; n* O! v# S4 @+ c: }- r) t
  593. LDA #$0F% J: I3 [. l: `. j7 Q" d9 n6 I8 m
  594. Palette_Clear
    $ @' I9 o  T% D, q* ~/ E# y3 H
  595. STA PPU_DATA6 l  o8 Q5 O; l! j+ i
  596. INX
    ) F" N( d8 ~5 u0 ]/ Z
  597. CPX #$205 j& i; T! a; n
  598. BCC Palette_Clear3 S6 Z$ V/ o; e' e% d* M
  599. LDA #$00
    9 V2 s' k9 V# _) h" A
  600. STA APU_STATUS4 [; g0 X, }+ r- g- D8 ~3 ^1 k
  601. / E- C$ u/ ?0 F$ a* D
  602. ;==============================8 Q. I2 W  T3 f5 F; a. O9 g) U
  603. ;RAM初始化
    ( f1 W$ a$ B. w; V$ H
  604. RAM_Clear_All
    ; k! }. i' l) g+ p
  605. LDY #$00/ O; _/ T8 R3 w0 u
  606. LDX #$08' S- i2 b6 d7 x1 G
  607. LDA #$00
    6 D* Y. ?7 h% Z" G. t0 {  G
  608. STA <$00
    5 A# p$ f& R; V! w
  609. STA <$01
    : v! U" ~2 |# }. A2 F
  610. RAM_Clear_All_Start
    + j; n, L1 P: I3 q) E
  611. STA [$00],Y% }$ u/ \  R) r; F
  612. INY
      u1 l2 C8 {1 z3 a
  613. BNE RAM_Clear_All_Start! D& G$ Y$ b+ @( s8 K& z. D
  614. INC <$01
    5 b" o' B# {: T" [! |  z0 S  L
  615. DEX6 r- s! w3 U- e3 N! G3 B  [* r
  616. BNE RAM_Clear_All_Start
    8 y7 W! y7 _1 {/ k: L4 I

  617. : O# M# {& N5 h8 V
  618. JSR VramClear
    - j, w. t" J. t' Q6 |! u) [7 ]( Z
  619. JSR VramInit. h2 C9 O- h1 n9 C
  620. JSR OAM_Ram_Init! O: Z, ~$ j6 L/ g
  621. JSR Init_Palette_Addr
    3 w0 ^, P( o$ s: r

  622. 9 x0 {. w. B5 W" d2 H) Y- \
  623. LDA #$FF3 N8 u: }) B- [0 Z- u& F2 U, O
  624. STA Use_Ram_End. Z3 C. V; y" x- r' z! L1 H' s0 W+ b
  625. ;==============================" _5 n% x6 ]! C3 }  x
  626. ;初始化背景调色板  I  f$ p$ J6 Q4 Q+ E
  627. JSR Set_Palette_Color
    . d+ X3 g7 S6 W& ~0 b0 t* n
  628. JSR Set_NameTable_Attributes1 r9 q' W( Q2 J! P/ \) Z
  629. 9 J3 k7 }: b9 y# U4 A2 C# q/ q
  630. LDA #$00
    9 k2 b. o! x; c# k( g) T" G
  631. STA PPU_OAM_ADDR
    - b7 u% y" M- r7 k. W
  632. LDA #OAM_TEMP_ADDR / $01004 X0 D& B( d  [2 [" ]  j4 S
  633. STA OAM_DMA5 K; _7 N* r' U% K, c5 q( O9 F0 ?
  634. . I0 R/ C8 t; e/ E
  635. JSR Sound_Reset_Proc) f. K* O& E3 X9 D+ v1 b: A
  636. JSR Set_Sound_Total
    5 D6 J# I; R! C; U
  637. : h2 h! p( e1 h8 S6 P/ Z
  638. Init_Start_Music
    8 n# L; _4 I3 w2 w# x
  639. LDX #$00/ g. X' P4 s! T& o
  640. Init_Start_Music_Write, S; _( e: E  M& G8 Q" ^
  641. LDA Sound_Start_Port,X
    , S1 K8 ]1 u/ s! z& F, T7 D
  642. STA <Music_Cur,X. C& A% ]; X$ j( [6 G) d$ `% l
  643. INX
    7 d; `& G6 n8 q
  644. CPX #ITEM_MAX_SIZE$ j" j! H1 n" r; e" q
  645. BCC Init_Start_Music_Write7 B* z2 o+ g3 e( O* p3 Q
  646. & t1 Q+ V8 W! y$ {
  647. JSR Show_Music_Text& s6 ^$ G. U5 y; K8 l1 B: ^% s: d

  648.   ~  _# t9 c3 T) m# M1 P
  649. .IF SOUND_BAR_SHOW_ENABLE+ \3 {  {' c1 ]$ g6 B) a3 S
  650. JSR Sound_Bar_Text_Set
    ! `5 [- @! {7 b* ~  w
  651. .ENDIF
    + A  t4 b! k4 H% E* j% t

  652. 1 D* o' Z+ Z6 i% z& s$ h4 C
  653. .IF Track_Name_Pos
    * B8 Q. n- g7 f" G4 s" W
  654. JSR Show_Track_Info
    * F. O: a) x, P3 P4 r) e
  655. .ENDIF
    ) j: ]: |% P3 Z* C
  656. ! ~5 z$ v- e9 |8 L# M/ L. r2 A% ^
  657. JSR PPU_Proc
    + n8 f  i, g! p- V4 ~; }- `' D
  658. 0 ~8 G, L9 ]; \+ V- ~+ y2 @9 b$ S# Q
  659. ;==================================================
    ( \& o, Z  g. M! j' ?1 I
  660. ;音乐bank初始化
    : g/ t* h6 W) L  k: S6 C9 z% b
  661. JSR Init_Sound_Bank
    6 `- ~) A& F% G0 |* G

  662. 5 ^1 I0 k( g, P( ]0 ]
  663. JSR Music_Show
    7 X* O: s) m, `7 q2 @
  664. JSR Time_Show
    4 g& W$ u( o3 ]+ P% K' V( `
  665. JSR Music_State_Show4 @# H5 z# C$ V0 l/ E* U; [# z7 y; u
  666. JSR Time_Delay- K, F& h! _) W
  667. - I/ T( \# M. J! x" z+ [/ |$ j
  668. LDA #$01
    * w, g0 {. D- d' F2 X
  669. STA <Music_Stop_State
    2 ?7 b3 T5 X" H% @) @1 F/ F
  670. ( J/ D2 Y/ l) V
  671. LDA #$88
    3 Z9 |) `3 p& Q# h2 I, s
  672. STA Screen_Ctrl! U3 O# R" `; ^# a2 a$ n. k
  673. STA PPU_CTRL
    , U2 z: u0 I5 W1 r5 D; X& E. V4 ]
  674. % u/ I- J, y9 c# u# _; a
  675. JSR Show_Page_Text; w# u. R2 j5 k' o0 `, j% o

  676. ; S( y' w/ N+ m2 `1 a1 Q! ~+ v8 L9 I# x
  677. LDA #$10* h! r" |$ }9 `& ^7 `4 n! n3 N
  678. STA <Time_Wait_Cnt
    $ l, l) e$ N: H+ I* w
  679. 9 X$ V0 A9 G; k# A
  680. Wait_Time_Over
    * k8 K. [5 F  o( j& s$ Q
  681. LDA <Time_Wait_Cnt
    ; E7 r( d3 p. r$ }1 y+ k* m
  682. BNE Wait_Time_Over
    ; e9 \3 |4 G: M0 ]

  683. 1 d( M, m2 i) U5 p- M2 o! g& K
  684. JSR Show_Arrow
    - j6 J' Q0 `: h) N# w% @
  685. LDA #OAM_TEMP_ADDR / $0100
    ' ]4 Z2 i' x( e+ T2 S8 r
  686. STA OAM_DMA
    2 k! s  x2 L1 p3 d6 }$ Y& x4 l

  687. - U" O: c8 Y$ Y
  688. LDA #$1E& T0 P" s1 N3 P* m+ k7 p6 q9 Z9 B
  689. STA Screen_State7 `% l6 z* s* n" H- p' j
  690. 5 ^0 h8 Q3 {3 }' l
  691. LDX <Music_Item_Cur
    $ H7 _/ [- V3 ]. {7 M! K
  692. LDA <Music_Cur,X0 y7 r, N2 }3 I
  693. JSR Sound_Init_Proc
    * Q+ M' d. y  ]& h
  694. 8 T3 b& n- ?: e  F$ A" @
  695. CLI9 N& t( l. Y3 u) g
  696. JMP MainLoop! H+ y' w( m4 U# D* J
  697. 6 I4 w8 U* y4 b: \$ d; [" M- _/ q
  698. ;==============================
    " a. X9 Z0 r5 {' M* l
  699. Time_Delay;延时等待
    & J! s/ n$ D* k, d5 K% }
  700. LDA PPU_STATUS
    ) u: ~* y1 E5 x/ E  P2 Z( u7 |, m
  701. BPL Time_Delay6 w$ F" ^, ~  t# B
  702. RTS
    : k- R: y% @) |: a8 Q# X2 p

  703. ' z% f& C0 m; n, ?$ w: r1 c% A5 V
  704. ;==============================
    + X, y2 }2 X0 W1 m$ W, h
  705. OAM_Ram_Init;初始化精灵内存
    9 Z- H: i  a8 K4 w. y9 O& \
  706. LDX #$00
    9 }! d$ ~; q8 G" ~$ i4 D4 m3 b& b
  707. OAM_Ram_Init_Write
    # a, Y+ a8 Y5 C& s
  708. LDA #$F8' ?1 p, T5 G6 U- ?
  709. STA OAM_TEMP_ADDR,X, a0 q8 O7 d1 f/ k# p' `* _
  710. INX
    $ M: E& \" x, n5 O, \2 Q8 p0 k
  711. LDA #$F84 c* s, S" I1 }, I. b% _
  712. STA OAM_TEMP_ADDR,X
    3 m8 O, j6 V; D5 C+ W
  713. INX, v7 j0 x; i4 `. k  `; m8 C
  714. LDA #$00$ @" N+ C. D# B; B8 q. {
  715. STA OAM_TEMP_ADDR,X9 r' ]# w; }: }2 K# w' r) o; {" w
  716. INX
    ! ?" Z6 R; ?/ v* e
  717. LDA #$F8/ j) C: l9 l6 h# N2 |, R2 w
  718. STA OAM_TEMP_ADDR,X) {$ H" ~( D9 Q* \
  719. INX
    # t. u7 Z5 c  P6 E2 o
  720. BNE OAM_Ram_Init_Write( Z% H0 F4 F: m/ p" y
  721. RTS) N+ P3 V# w2 F2 V* S
  722. $ [3 F$ W/ F  d! B
  723. ;==============================& n9 z' P  p5 x
  724. VramClear;初始化图形内存  i3 P6 F8 J2 F6 q: m) M
  725. LDA #$20
    ! R5 q9 B; H$ N, q
  726. STA PPU_ADDRESS1 G8 N* w2 G9 S( G0 o, {( w4 N
  727. LDA #$00, k8 R1 k! A& V
  728. STA PPU_ADDRESS! `! n1 i- ^: U- @/ S2 x
  729. LDA #$00
    6 e$ z" _) T. G2 h
  730. LDY #$00
    3 j. L2 g2 l+ E+ L3 q( o3 L- Y
  731. LDX #$10
    + X5 e3 j% T1 H3 K2 x$ y$ R
  732. VramClearWrite9 c7 j7 I5 b6 X1 z$ ]& x4 d
  733. STA PPU_DATA% q  i4 C( d) n- _3 z2 G
  734. INY
    9 `2 C) m2 a2 T% c; R
  735. BNE VramClearWrite( U& A3 _0 w% h/ j: \
  736. DEX! }4 G9 q$ w# x0 }% c+ n: e1 ^8 V
  737. BNE VramClearWrite4 t$ @7 }2 N4 I, c/ {2 s
  738. RTS
    ( B0 W& A. A8 G9 h9 O

  739. # k- D; h$ Q# X( u! \; z) ?
  740. ;==================================================
    7 W$ |6 j& A" u+ z/ N3 E/ L& G
  741. ;设置MMC3图像bank
    6 i1 }$ K' l1 C' \4 |
  742. Init_MMC3_Chr_Bank7 e* K4 d- b/ \4 a5 u
  743. LDX #$05
    ' D+ q& t+ E/ v* I
  744. Init_MMC3_Chr_Bank_Write
    4 d% i  _5 }* H; f  U- G8 o' [
  745. STX MMC3_BANK_CTRL) M. ]4 u. F3 I1 z
  746. LDA MMC3_Chr_Bank_Data,X
    ! j1 W, O2 s0 Y% {. D- ?
  747. STA MMC3_BANK_DATA! {0 ~) v+ K4 @$ f
  748. DEX
    ( O8 b- l7 ?- A0 B; x! [
  749. BPL Init_MMC3_Chr_Bank_Write! L. j7 L7 N$ Z* P& c# j% O
  750. RTS- Y3 N* F$ Z: l3 z- o2 Y" b
  751. ;--------------------------------------------------
    0 E" r  z( M( y; m) [- B7 e4 _5 L
  752. MMC3_Chr_Bank_Data
    0 @/ V( f4 P0 W# g, Q* @/ C3 ?5 w1 R
  753. .DB $00,$02,$04,$05,$06,$07
    7 P5 S, v& L; Z. b! E8 z! F

  754. ( F" N  D) b4 y& H8 }/ L
  755. ;==============================
    * J+ g$ V% u; c- v, S2 {0 g2 X* A# I
  756. VramInit;初始化图形内存: i+ I, J5 C( }( k8 b
  757. .IF CHR_RAM_ENABLE
    8 |) [. M  u5 o; V0 l
  758. LDA #CHR_DATA_BANK& k# }$ `( O8 E; o& f* i4 X. `
  759. JSR Switch_Bank_A000
    ( Z6 `4 [3 i5 G' r  u( i
  760. LDA #LOW(CHR_DATA_ADDR)% o: h/ w, K4 ]; D' d. e6 a, Z
  761. STA <Data_L& p) T/ E3 Z8 n
  762. LDA #HIGH(CHR_DATA_ADDR)
    7 U5 G5 v" q; Z: I
  763. STA <Data_H
    6 Y8 B& J9 K" ~5 h8 y% `9 `6 @
  764. LDY #$00* y4 K0 L, k- s
  765. LDX #$20
    ( _# [! D! K- f/ Q3 ^
  766. LDA #$00- }2 `) b& v8 a; N5 H( x3 H
  767. STA PPU_ADDRESS0 z0 _! m9 f: [$ r7 ~- A8 z
  768. STA PPU_ADDRESS
    % B& z0 [* e  y4 M" @+ T. z
  769. VramInitWrite
      i) _; ^6 K# U  g$ I
  770. LDA [Data_L],Y
    * a7 M& y" U( M, v: K% _
  771. STA PPU_DATA
    # T, c: ~" t0 G. `* V5 w' p  W6 ?3 K
  772. INY
    0 C! C- t. o3 X8 K, q: q
  773. BNE VramInitWrite
    $ Y; B, s" \0 ?: \. D2 G
  774. INC <Data_H1 b. x. Z4 h% f$ t# v/ D
  775. DEX
    : a8 {  a! O- b% a1 w# ~
  776. BNE VramInitWrite
    ( c* C6 O" }3 V5 i
  777. .ENDIF/ u& V2 Z/ D! H6 M
  778. RTS9 R, a" d- V5 U4 V" Z5 W! }  V# h  w
  779. ( h# y9 ?$ o* N* X. Q0 l# Q
  780. ;==============================. r( C. G% }( S4 E
  781. ;音乐切换
    - P' B2 |& \" O
  782. Music_Play_Change
    : x; s/ U' P' q8 |
  783. LDA <Key_Once0 x' s* l+ W" E
  784. AND #$FF+ a2 r2 g! m$ U8 `
  785. BEQ Music_Play_Change_Check
    3 {9 j# W$ s% @" n) y0 ]

  786. 6 T1 `9 P8 O( A3 ~) s% R; H
  787. ;禁用音乐条刷新" B1 B) M5 _' t( R
  788. LDA <Text_Disable_Flag
    ; g( d  s7 Y- J" a5 C% \
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME" y/ h0 l9 Q! ]% ]; A7 @: n
  790. STA <Text_Disable_Flag& n3 L! Y7 b: B. n4 P& _

  791. 1 F7 H: a9 J5 i
  792. Music_Play_Change_Check
    : K* [/ a( r5 H' g; \' s1 Q
  793. Music_arrow
    1 o0 J6 i" M/ X) s4 R  |$ D
  794. LDA <Key_Once
    3 T* U2 {/ @8 Z* w% _* i  ^' w
  795. AND #$0F/ q8 \8 G* w$ n  g" V& S
  796. BEQ Music_Play_Change_End
    9 Q% V! `3 U+ r% w& O1 P
  797. JSR Music_Track_Change* \: L- X; U" w; B4 p8 c" e
  798. JSR Sound_Reset_Proc
    " n* d9 @! e$ k9 Z+ x
  799. JSR Music_Show, h" n; B. J. w6 t( F0 n  [- k, p. q4 l
  800. Music_Play_Change_End+ W6 {. g1 E$ g% X4 N
  801. RTS
    ( A: v0 a* U8 f& ?+ }" h+ h

  802. 2 W/ L2 l1 |5 k
  803. ;==============================1 {1 `1 y7 V$ ^0 }
  804. ;音乐曲目切换
    ; \' X8 H4 O( i% @9 n
  805. Music_Track_Change: g) {" l' m: F( e
  806. LDX <Music_Item_Cur. e! B$ V' p) F( @0 _) [* E
  807. LDA <Music_Cur,X
    + U: X2 J( ^" {9 T) N0 s
  808. STA <Music_Last
    4 \' w. p+ l0 N/ V" @2 ^! ~4 I
  809. Music_Decrease/ p4 i# A0 a. H; U# K
  810. LDA <Key_Once
    / v# V" u; I' T7 X% ?$ }% G5 N
  811. AND #$42
    8 b" a4 w, ?& E; I+ Q; Q' r
  812. BEQ Music_Increase/ e5 {- U% r1 f9 J. y$ u7 h
  813. LDA <Music_Cur,X$ J0 l* a# `) c4 ?) H
  814. BEQ Music_Increase
    % D1 b/ e0 R6 z# W7 G! T" J
  815. DEC <Music_Cur,X1 U. r; w$ M% u+ Y# c' s
  816. Music_Increase- }7 F) G, Q' K, e
  817. LDA <Key_Once/ C  {0 w+ y1 x# A& A! \- m
  818. AND #$810 l& U& Q/ I7 O$ p( U* Q* ~+ Q
  819. BEQ Music_Decrease_10* j) H; w0 |' p/ {) f
  820. JSR Set_Sound_Total7 E+ U& H6 I4 y( C" R
  821. LDA <Music_Cur,X
    ) N: J& V6 a4 D+ X  }
  822. CMP Music_Total
    # |# j; B2 `4 M1 F
  823. BCS * + 41 ?; y$ j1 p$ s- j, M
  824. INC <Music_Cur,X; N% I0 Q7 g+ R9 I
  825. Music_Decrease_10
    ( i, n( C; V3 O1 Q: Q
  826. LDA <Key_Once
    - c! D' _4 B. S
  827. CMP #$04: I" T3 q; u( C$ J; P1 N9 |. l
  828. BNE Music_Increase_10
    $ e$ F2 g, @9 D0 Q+ k7 O
  829. LDA <Music_Cur,X# W  s) S" O8 \6 \5 U! F
  830. CMP #10
    9 P5 g( V/ `3 K/ y0 i
  831. BCC Music_Start_Song_Min
    ! r6 ?4 V- B1 A8 X
  832. LDA <Music_Cur,X
    ) ~# U; y; t( Y3 z- d
  833. SEC/ m+ }# O0 U3 a1 `* U7 J
  834. SBC #10
    4 u, \: v/ F$ K9 Z3 c
  835. STA <Music_Cur,X
    * n+ D1 l; |5 c0 s3 z) l1 U
  836. LDA #$00# @- X( q/ G) u: N
  837. BEQ Music_Increase_109 w7 i" d3 W% B$ a
  838. Music_Start_Song_Min' b7 P9 i& g4 k; w/ x
  839. LDA #$00
    8 t1 }6 k: n4 J1 @3 G
  840. STA <Music_Cur,X
    * {* j7 N/ |1 g, k; u' _
  841. Music_Increase_10
    9 k& c! R! V4 W
  842. LDA <Key_Once
    $ H- X- D! N$ }; T, M
  843. CMP #$08, L: C3 z; ?- o4 e/ O$ L
  844. BNE Music_Track_Change_End4 d: r' V$ Q: l9 ?, R* J1 `
  845. LDA <Music_Cur,X
    - O7 |# X& Y, v. v
  846. CLC0 h7 }' Y8 \, S2 Y" Q1 |" }
  847. ADC #10
    ; w+ O& H5 W5 E1 Y2 C- n
  848. CMP Music_Total
    9 E2 l+ Q- `6 a9 Z$ `  W
  849. BCS Music_Start_Song_Max
    8 u9 F* @/ z( Z. I3 X$ F2 O, {; @
  850. STA <Music_Cur,X: ^3 p2 C/ y5 ~& Y7 A
  851. LDA #000 \2 b. I5 Y+ s: u% _
  852. BEQ Music_Track_Change_End
    * t4 u( X  X% N6 \5 Q+ w4 y' m
  853. Music_Start_Song_Max8 I& I: Y; P4 |
  854. LDA Music_Total5 l  K+ W- M( c9 U1 g
  855. STA <Music_Cur,X8 L, |" ]( d* j; L8 C( q4 H
  856. Music_Track_Change_End
    9 o( v+ e' ]6 r6 ?
  857. RTS
    6 P- r  k* Q( U3 d& N. L9 w

  858. ; U$ t" T9 ~) D
  859. ;==============================
    8 u8 z( ~0 P6 D$ G5 \
  860. ;按键处理; X# s6 {5 ^) d- [' s4 T- W: g! Z3 g) ]* i. s
  861. Key_Proc. Q. G- c3 y) l% v
  862. JSR Key_Scan
    ) N/ W6 V! {$ c. `* [- ?
  863. LDA <Key_Keep7 i7 U, R# k3 D( I* ~2 M+ ^" Y0 Q
  864. STA <Key_Temp
    9 I+ I0 L) u& ], e+ @( p+ z0 M
  865. JSR Key_Scan; t$ W+ U6 O! |5 [
  866. LDA <Key_Keep. L0 u4 ~- E: z) }' t, b2 D
  867. CMP <Key_Temp. B& ]7 G/ t; a: C* L
  868. BEQ Key_Get_Once
    , }! z2 Q0 G/ P. x, [+ o
  869. LDA <Key_Kemp9 v* Y: ^# R  L! _: j) y8 F( P5 G7 M
  870. STA <Key_Keep* r2 z# R. _8 T8 a9 R* |8 n
  871. Key_Get_Once
    5 I0 U1 g: F' r
  872. TAY  C! G0 b7 w4 A, P
  873. EOR Key_Kemp8 q  ~  c# }/ }' J
  874. AND <Key_Keep
    ( b, f/ Y% P- J3 {+ ~
  875. STA <Key_Once! _; T  ~& q: |# |9 [/ {3 c
  876. STY <Key_Kemp
    ( c+ O8 ?3 o1 g/ j0 G( k
  877. RTS
    # r- e: o5 M( @1 P& f- y4 c
  878. ;------------------------------
    ( a. d' }- ?. U7 I6 s
  879. ;按键扫描
    7 n- B2 I+ s: k
  880. Key_Scan( O) }# E6 V: v: j/ e0 Z
  881. LDX #$01
    - D1 j" N" C# f3 |* i
  882. STX JOY1_FRAME; g* }2 T9 G  E, O; o# [- m9 r  `
  883. DEX+ l" K+ J  g! x& ]# O
  884. STX JOY1_FRAME6 ~1 p! p1 S( i
  885. LDX #$08
    7 O/ ~( G+ c9 u! |
  886. Key_Value7 x' ?# Z0 d- v
  887. LDA JOY1_FRAME
    . e  V# S- I2 {% a
  888. STA <Key_Getv6 G' k) b% w# F2 C
  889. LSR A1 P4 a& C# A  |/ g! H" T' m# G1 D
  890. ORA <Key_Getv
    & w1 V: n$ d# x" |3 E
  891. LSR A8 V3 _5 l! k- ]
  892. ROL <Key_Keep
    7 j) L; P4 J, |# q: B
  893. DEX
    7 w; G! H0 f; i0 ?$ e; `+ P
  894. BNE Key_Value
    5 k( k) \( L. Q& k) ^# v- E: L8 }
  895. RTS3 U' d/ M1 p% r# D7 [/ H# J& l

  896. : o3 R% t9 [8 C, k* M0 U
  897. ;==============================, ^0 e8 D) k: J
  898. .IF SOUND_BAR_SHOW_ENABLE% p/ ~" K1 k* K1 Y6 p# U
  899. ;音乐条显示% y: Y# k1 h9 j' J: x
  900. Music_Vision- R' I/ ~0 I/ K6 V: E& M
  901. LDA <Text_Disable_Flag
    ! L7 D7 j+ v/ B  k+ j4 Z
  902. AND #TEXT_DISABLE_ITEM# Z4 {8 \! p- Y1 g7 z* ~% a8 k
  903. BNE Music_Vision_End, P2 m3 F' e" A" O
  904. AND #TEXT_DISABLE_BAR: J, r- b  V2 y! a' k! z
  905. BNE Music_Vision_Set4 \- T& S3 f  O- z% K
  906. LDX PPU_Cur7 a  F8 S' h9 D$ _4 {$ z
  907. JSR Music_Animation
    8 K4 ^5 R8 T3 x# E. ~1 B# Q, P* p" b
  908. STX PPU_Cur
    * @. I( a8 ^. w! U
  909. Music_Vision_Set) m' \- v& a: }+ q6 h; x  x8 u) B
  910. LDA <Text_Disable_Flag
    8 \0 P. K  h- _! N0 t( E# ]
  911. AND #TEXT_DISABLE_BAR ^ $FF. y. A2 G6 R" ]3 c; c
  912. STA <Text_Disable_Flag
    6 a# Y- g* |7 Y& C! U$ |
  913. Music_Vision_End
    ) k% T, E6 z# `, X  B8 O% U7 f
  914. RTS
    0 M% i; A. o* r0 d1 D8 ?7 q$ H3 l# z( P
  915. ;------------------------------; j8 s: @/ X+ f7 l
  916. ;音乐条显示处理# O$ J+ Z  Q! ^/ P
  917. Music_Animation
    5 Y& ^$ [1 M0 [$ p$ w9 e( F9 k( T
  918. LDA #PPU_MODE_CNT_LINE* Z: e$ o6 C( h
  919. STA PPU_Addr,X
      F2 k* v: C) Q, F0 d; Z
  920. INX" ?! m) X4 k& n: O
  921. LDA #HIGH(Sound_Bar_Pos)
    & L# y2 H2 g$ z! D8 e! E& S
  922. STA PPU_Addr,X
    + P0 @: w# w) X9 ~2 L
  923. INX" M8 K; i7 K/ V: k) d& y4 M
  924. LDA #LOW(Sound_Bar_Pos). Z& ?" ?8 [; i, E/ Q. h. w5 f
  925. STA PPU_Addr,X4 ^" h6 ]& ~; L4 C5 J: g9 Y, W
  926. INX
    * R- T: \/ ?" K
  927. LDA #$08) |( p. G7 y1 ~6 B9 R" Q
  928. STA PPU_Addr,X9 S& u( `9 \- _* l
  929. INX
    ' N7 V5 B: z  D' U/ f3 Z
  930. LDA Sound_Bar4 s$ W1 y, g) G$ s1 H2 |* Y
  931. JSR Volume_Convert
    & q3 y# N4 ~" C/ w, ~7 R
  932. $ T$ L' p  e. F' N' S- P
  933. JSR Volume_Set_Cnt" Y  a& j' n4 ]8 B/ F
  934. LDA Sound_Bar+$4
    0 |( l- _% h7 z. u  S2 C: b
  935. JSR Volume_Convert
    3 h6 @, c# r& ?5 Y! t

  936. 3 ~2 R1 E; r/ @
  937. JSR Volume_Set_Cnt" q3 x9 X- B; z
  938. LDA Sound_Bar+$8; O4 r; B4 i( _
  939. JSR Volume_Convert' c& s  `$ e  a' Z

  940. / n! h( t4 q  i( X# t. X5 O; r
  941. JSR Volume_Set_Cnt2 l3 r# t3 S) y8 W  `
  942. LDA Sound_Bar+$C
    " {' I* n9 e8 u4 k0 u7 G# }
  943. JSR Volume_Convert8 v( z$ p$ V* a

  944. 8 `! a) ?7 O6 C8 H" C" s
  945. JSR Volume_Set_Cnt
    , U' q2 V; a# b# u
  946. 9 u  i& [% `/ u2 F0 f9 ?( B
  947. LDY #$10
    # c9 W/ v: {2 j& ^) K8 U
  948. LDA APU_STATUS; p. q3 w8 R6 W$ Z, f! p  @
  949. AND #$109 u/ i: e. y4 z
  950. BNE Volume_Count1 |: G7 p! y9 ~8 x! K. W
  951. LDY #$00- F! _8 I2 f" \9 k/ }, G
  952. BEQ Volume_Count
    7 r6 ~( P9 @0 O7 r

  953. + X( X; s, u/ l9 X$ [
  954. ;------------------------------3 E# P4 d, r* F* l. U/ I
  955. ;音乐条处理+ j, B1 r, C4 j! T- z- W( g7 q
  956. Volume_Convert; e0 j4 Z7 Z1 J( F! W
  957. AND #$0F
    6 G' p" z1 U; K6 e, s2 ]0 ]
  958. TAY
    + e* ^, o  Q: r) ~
  959. Volume_Count
    & ~% f3 ]. {+ x0 v7 n# Z8 a! Y
  960. LDA #$08
    : r/ ]; r; r1 U  C: U# z
  961. STA Sound_Bar_Cnt
    2 r9 Y' B  }  k. R
  962. Volume_FILL
    8 \( j4 T1 R  E  A
  963. DEY9 k1 B: \" A- Y! P2 a4 C% S
  964. BEQ Volume_Half
    ) m2 l) K+ R! f0 r& u* E) K5 n
  965. BMI Volume_Empty/ ]( c* k9 b5 x
  966. DEY! @7 l$ j; j1 S% @  E9 g  K
  967. Volume_Full, Y1 D, S: O0 b3 h! L- p% n
  968. LDA #$16
    & a" s' z7 u0 J/ l+ a
  969. BNE Volume_PPU9 M& O9 \/ s% l! H
  970. Volume_Half' z, z) W6 s- P: g
  971. LDA #$15/ Z* }8 O  [8 t6 d8 b
  972. BNE Volume_PPU0 D2 w& l& x3 w" T
  973. Volume_Empty0 ^. H/ q  e5 h. I: Q
  974. LDA #$14: a/ W. C7 e5 Z, y! i
  975. Volume_PPU. S" G9 P/ q7 k7 k) B
  976. STA PPU_Addr,X- J( B  V0 N& w% ^
  977. INX5 m- m' e* j/ E
  978. DEC Sound_Bar_Cnt8 C& z5 O/ t0 }
  979. BNE Volume_FILL
    / j, a- Z1 P5 k$ J( T- }
  980. RTS
    , m# W  W* @- ^4 z' `/ }+ |

  981. 1 o3 G- d" E" O: T
  982. Volume_Set_Cnt
    6 y7 b: Y5 T: T$ ]+ S$ Q
  983. LDA #PPU_MODE_CNT_LINE_NEXT
    : j, y( c9 f; Z- n* ~$ M
  984. STA PPU_Addr,X, F+ R- h. k" r$ l. S/ T' l& g
  985. INX) K) t& }' y6 y7 S+ A0 }
  986. LDA #$08. N4 y) U7 Y; H8 ^
  987. STA PPU_Addr,X
    ' p! R* ~5 p. I, Q0 f+ h
  988. INX& ?/ j8 ^) G1 Y5 z' p
  989. RTS- C  A  R$ ^5 B" A1 g1 }

  990. / C* ~# B0 x; _+ M. R& J1 b) v
  991. .ENDIF
    & k* `/ d- N& L: X8 A" E2 t) A
  992. # l, I* E0 {: Z
  993. ;==============================
    - \8 q. D' K5 w. a( Q; @
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    6 m. E& u4 \  H" q6 s; i0 {
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式
    8 i% g% }  r$ s0 @3 \
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除2 v" X8 _1 @6 J" q# y
  997. ;------------------------------
    1 R7 i# w) e6 q. _
  998. ;PPU处理: t  n5 ?! `( E. p, M7 A4 U
  999. PPU_Proc
    ) W4 w0 \1 n' _2 l  Q
  1000. LDX PPU_Cur
    & {; G% d( i) ^* \
  1001. LDA #$00, h7 j% E: K! P# ^2 K
  1002. STA PPU_Cur
    * {9 x" p; }" f+ Y) D0 x: t
  1003. STA PPU_Addr,X
    4 a4 {. y8 ~$ u; k- X* A6 W+ ~
  1004. LDA PPU_Addr
    0 p+ O& ]& `2 z+ _' Y% w7 k5 S
  1005. BNE PPU_Proc_Beg
    $ q7 m, R5 N9 ?3 [9 z# N% J
  1006. PPU_Proc_Ret' B7 h! y6 f! U- P7 P+ m
  1007. RTS: m5 I  d& J+ P2 ^

  1008.   i: s3 i6 o: V
  1009. ;------------------------------- _4 L- E" X; p, g' r6 _8 e2 d( K
  1010. PPU_Mode_Return_Cnt  ;转下行模式& E7 P  a  c1 c4 m
  1011. INX6 m& w9 F& d- B% U1 e) [4 |  s" P
  1012. LDA PPU_Addr_L  l/ l6 O7 I& O
  1013. CLC% U) p' \: Q7 i  e8 o2 O+ \/ M; t
  1014. ADC #$20
    $ W! {6 z8 \3 j! x7 b$ R
  1015. STA PPU_Addr_L) _4 j2 d7 ^7 X/ a  \" V& A
  1016. BCC PPU_Mode_Return_Cnt_End
    1 x; f) M0 U, u0 U/ C
  1017. INC PPU_Addr_H
    7 b5 Y' n2 J& M7 W" F" i
  1018. PPU_Mode_Return_Cnt_End
    3 H& L& i% B( C$ K1 K. v
  1019. LDA PPU_Addr_H2 @  U% k, V* k/ x& T. P, M
  1020. STA PPU_ADDRESS
    3 `, v0 y8 @5 _
  1021. LDA PPU_Addr_L
    ( }; @% g, e: ~8 j
  1022. STA PPU_ADDRESS9 b1 A# o: L6 y3 z: M- j
  1023. LDA PPU_Addr,X+ e" X/ @% |- ?# K! W9 s& L; `. m
  1024. TAY
    # [) w! N' n/ _+ W) Z( J
  1025. PPU_Mode_Return_Cnt_Write  n  Y- P: ~  ]- e9 l  ]
  1026. INX5 K! R& p8 s8 s- R' R( z, b1 D4 K" l
  1027. LDA PPU_Addr,X
    - H  o5 f# V: c; l% U, D3 T
  1028. STA PPU_DATA. m6 t" T) z' h
  1029. DEY
    : C. b) k* N0 k
  1030. BNE PPU_Mode_Return_Cnt_Write/ @& A, A9 j0 E0 K# W. ^
  1031. JMP PPU_Proc_End
    % y: @) x* L+ R" i
  1032. ; l) }4 @) c" Z/ J7 m( b
  1033. ;------------------------------$ q4 F9 n3 f' L2 S0 u6 U6 `: ]
  1034. PPU_Proc_Beg  ;处理开始- U0 E: p  v! L& F+ v
  1035. LDX #$007 @5 [0 i( v: |6 @+ k+ b# k
  1036. STX PPU_MASK
    6 ~( p, p, a/ E' \5 b
  1037. ;------------------------------9 N- T' L, O" k3 P3 w/ H1 d* z
  1038. PPU_Mode_Select  ;模式选择
    ( @; m: @! u) }: ]9 }9 @- ]
  1039. LDA PPU_Addr,X  A  s$ d  d" ], W5 X' v+ G' h. X1 G
  1040. CMP #PPU_MODE_CNT_CLEAR; |; j( x  P& \- J1 t* e0 j8 s! e0 q
  1041. BEQ PPU_Proc_Clear  [, T7 b- f! }, N4 z; C: c
  1042. CMP #PPU_MODE_CNT_LINE
    " R/ ]" c! C5 \2 v! G+ A
  1043. BEQ PPU_Proc_Cnt_Line, O  m) r; ^' `4 @5 y* ]; K
  1044. CMP #PPU_MODE_CNT_LINE_NEXT& j) [9 f5 j, @9 J# o1 B. U8 b% x
  1045. BEQ PPU_Mode_Return_Cnt
    * H; l4 d* c. }1 s3 }% ^
  1046. JMP PPU_Proc_End_Write
    6 r* G- P! r2 l" K1 r3 G, n6 S
  1047. ;------------------------------
    ; Q- Y& w  ?' {
  1048. PPU_Proc_End  ;单行写入结束
    ! e& d( I9 w' N6 Z
  1049. INX
    5 e+ T7 S6 D0 a; z
  1050. LDA PPU_Addr,X
    2 Y9 \% I6 o, l4 P, r1 d6 j
  1051. BNE PPU_Mode_Select0 K1 j4 |% m- G  b- z7 P, p
  1052. STA PPU_Addr
    5 h: X4 o  r' r
  1053. JSR Update_Palette_Color- `0 p0 x- R0 v
  1054. . s7 a+ V2 P2 I+ X
  1055. PPU_Proc_End_Write1 B: t' K& h/ {2 M
  1056. LDA #$00& Z7 S) s2 U( e- |
  1057. STA PPU_ADDRESS
    : D2 Y9 }9 `) f' P$ A, e2 N
  1058. STA PPU_ADDRESS( \, z; D0 @- `% O4 u
  1059. LDA <Text_Disable_Flag% h- D( z! \1 v0 m
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    + c; v8 r7 Z& b' \" |$ r4 X' A. K
  1061. STA <Text_Disable_Flag
    ' G! E8 V+ C7 S6 r1 h$ I
  1062. LDA #Scroll_X
    4 j$ _' E$ R2 e/ r+ S# V# f0 l! O
  1063. STA PPU_SCROLL& L  i4 [( s& E. U% \/ G& J' @7 i
  1064. LDA #Scroll_Y; e3 z( f: T3 U' Z/ |( S6 Q9 c
  1065. STA PPU_SCROLL
    . {, ?# W3 y6 Z" x5 C
  1066. LDA Screen_State
    ) y; Z4 i  g. z
  1067. STA PPU_MASK) F9 Z2 z* z* [  R
  1068. RTS
    , E# T9 E6 k. W4 ^4 n& z

  1069. " [9 c& a9 H1 h; L* l! M  L
  1070. PPU_Proc_Clear" _: \( w3 K( k, d) h2 a) D
  1071. INX
    ; E4 W2 m& T7 b% W/ R0 \: G
  1072. LDA PPU_Addr,X
    3 z7 Z; s; d5 w9 |
  1073. STA PPU_ADDRESS
    6 R* ?# M! O" \7 L0 S1 ^
  1074. INX
    0 |: A$ N  v$ x. ]2 h
  1075. LDA PPU_Addr,X1 y* D: U, }6 \% ^- }
  1076. STA PPU_ADDRESS6 Z# t* P% K( \0 L
  1077. INX
    & _& m; z- G' K* w6 F1 v
  1078. LDY PPU_Addr,X+ V5 X8 O4 F- |* Y
  1079. LDA #$00
    * n  b: M, p1 x# N
  1080. PPU_Proc_Clear_Write. w$ y: x) F6 L% d& y
  1081. STA PPU_DATA
    ( a, w9 O" ?: L% Y1 d. J; n
  1082. DEY
    2 k; c' L1 p! X6 ]7 P. E
  1083. BNE PPU_Proc_Clear_Write
    ' l1 |4 R% J4 M9 S! {
  1084. JMP PPU_Proc_End
    3 K( d9 }- Z* z8 w& H! y6 a

  1085. 0 G2 V: H0 D5 |& e+ Q" r1 @* f4 o
  1086. PPU_Proc_Cnt_Line* f' g/ ~# o3 y+ `
  1087. INX
    $ v. X) B$ c1 V( F$ H
  1088. LDA PPU_Addr,X
    / ~! M- K  F# f4 s8 a( N" ^
  1089. STA PPU_Addr_H7 Z' U1 e4 v" K8 h5 b
  1090. STA PPU_ADDRESS
    , O! G3 M; Y" B6 e  U5 y
  1091. INX
    ) Q2 k% f: m3 g. @  m2 E' Q0 }
  1092. LDA PPU_Addr,X
    % v5 k7 E7 }/ P4 k) f4 i/ O
  1093. STA PPU_Addr_L! Y0 ]9 Q8 K. A% ?4 I1 K
  1094. STA PPU_ADDRESS2 P3 A9 h; H- q7 d3 ?/ [3 j
  1095. INX
    4 Z; I/ t3 c; V* ]9 o4 T
  1096. LDY PPU_Addr,X
    7 C% l) {0 p# y2 ^
  1097. PPU_Proc_Cnt_Line_Write
    5 c7 }; P+ c6 X" [
  1098. INX
    9 X( S9 s9 s, z
  1099. LDA PPU_Addr,X) c& O4 z. l" q) N% y
  1100. STA PPU_DATA
    9 b$ `6 G! x) X1 t7 h/ d. m7 |, D9 c2 w
  1101. DEY
    ! b  }- Y, {3 r1 |6 i! m
  1102. BNE PPU_Proc_Cnt_Line_Write
    : N! j7 F3 _6 F1 W' e
  1103. JMP PPU_Proc_End
    5 a1 G% `: R$ ^3 ]) N

  1104. 6 T' z* n3 J' p) n0 z; o; g
  1105. ;==============================
    / P. z2 R3 H8 d3 v9 `( p* @5 `
  1106. HEX_To_Dec;十六进制转十进制
    - P: V. F# v" |& I
  1107. STA <HEX_Data
    5 I8 c4 a9 e( V5 ^
  1108. PHA+ L1 s; Y* z: X
  1109. TXA
    1 g1 C4 \$ T: `6 u9 l6 b; N
  1110. PHA- l) N9 G4 w  C9 D8 k
  1111. LDX #$002 ^! I# \' R+ ~! U  c0 ~
  1112. LDA #$00# n8 \1 s: f  I8 a% q' L
  1113. HEX_Cln: |$ R$ j% j- ^1 A, `3 ]2 n
  1114. STA <DEC_H,X4 ?# \6 o9 K& U' Y6 m! x
  1115. INX4 x' {3 v7 `" t7 H7 G+ x" e% o
  1116. CPX #$03
    . x1 s6 l4 k+ a' ^( r7 V2 [& i; L9 B
  1117. BCC HEX_Cln( \- c6 |% O" E8 l% j2 C
  1118. LDA <HEX_Data2 f4 m" x1 Q6 n" ^, E
  1119. ;------------------------------
    - ]# l8 ^0 p0 T) w- t
  1120. HEX_100
    ' n4 _4 l9 H% J6 U# t$ E
  1121. CMP #100
    * @, W3 P% R1 \" K: C
  1122. BCC HEX_10& w% \% g4 e7 c9 ]
  1123. SEC2 S' q: H+ V, d
  1124. SBC #100
    3 S! }% q7 d% c6 B/ x/ [4 a. |
  1125. INC <DEC_H
    ! ]5 n+ H  K' o( b9 n: V  \6 y
  1126. BNE HEX_1007 G: @- i+ w+ }9 H2 T
  1127. ;------------------------------
    " C/ b5 J5 \$ Y" V, L
  1128. HEX_10: h5 C3 e' t$ t9 _. Z# d0 R
  1129. CMP #10
    2 ~+ K+ X5 \7 J* _! a
  1130. BCC HEX_1+ b7 S* D: ], A" C6 T
  1131. SEC, @. l. B2 [2 k8 v# _
  1132. SBC #10
    2 x% V" K& L! `
  1133. INC <DEC_T0 u$ n+ V" o* f1 [0 z/ a
  1134. BNE HEX_10# v5 H& \1 i+ R; W! v7 C9 t- E
  1135. ;------------------------------
    0 A5 N% e) t! s, K( X! A9 a5 L
  1136. HEX_1
    ! y' G: k5 Q' j" @
  1137. STA <DEC_L: E) Q- |+ _6 h; g; v
  1138. PLA
    8 o  `5 H; `' O; @! y  ]" b7 H
  1139. TAX5 S- [. R# [, T; P7 z
  1140. PLA
    " n! W9 r& n8 G$ b" b, c
  1141. RTS
    ) [5 U- c: \  z) {  e- Y; n4 c* }" z
  1142. / ?* V' O* u( Q1 X; Y
  1143. ;==============================$ U* m5 S0 Q3 e/ Z& D! ^- v# ]
  1144. ;音乐曲目显示
    4 G6 \- ~; b0 n
  1145. Music_Show
    4 P2 f7 P1 @, X5 [0 O1 p
  1146. LDX <Music_Item_Cur
    ! p$ l3 s: s! j* p  |5 h
  1147. LDA <Music_Cur,X
    1 T! l7 o$ k' t: [8 [
  1148. CLC& x6 q* M/ a6 t
  1149. ADC #$01
    - k+ `" G* l! w4 x
  1150. JSR HEX_To_Dec
    6 H7 W1 t) A& w4 V% ]
  1151. LDX PPU_Cur
    ! U/ G3 f3 ]) u3 S& d7 l
  1152. LDA #PPU_MODE_CNT_LINE
    ! J" H" j4 }/ T% o) S
  1153. STA PPU_Addr,X
    ) \% C- ?+ b4 b) y0 I/ S1 ?
  1154. INX
    1 X/ c) y6 |+ M4 J+ J; Q! A1 Y
  1155. LDA #HIGH(Play_Index_Pos)
    1 e5 k  e8 }4 u
  1156. STA PPU_Addr,X( w. m- M1 \* i# J
  1157. INX0 U" H8 f+ M6 K( u; h- r% J% K
  1158. LDA #LOW(Play_Index_Pos)5 @- x; W, b& l4 c8 |  N* L
  1159. STA PPU_Addr,X$ H" c; h% ?# z. s- N  \2 m
  1160. INX  B# \( g" I0 U

  1161. $ T$ i6 ^! K# D; m* a
  1162. LDA #$07% I3 \7 j5 u% _. V! v3 T
  1163. BNE Music_Show_Length4 |- f& g; b8 V; [$ r

  1164. ) a8 N  S) J8 B  d4 `& ~
  1165. Music_Show_Length: r! x: j" @: ?  ~) `" f' w. o
  1166. STA PPU_Addr,X# M- H9 H, E: R
  1167. INX
    ( s; E) B/ o: x6 `/ K5 i$ a

  1168. 5 x; S' k* g1 p7 u8 l6 a' }- z4 S
  1169. LDA <DEC_H: j( ^  H* N) T" O0 K
  1170. ORA #'0'
    ( x1 j# @6 W; K+ I  b
  1171. STA PPU_Addr,X, j1 K$ ]$ e* c# }3 x
  1172. INX
    8 }0 C0 o$ t3 i6 x
  1173. & \6 ]5 Y2 I4 `; l
  1174. LDA <DEC_T1 j: S( X) v3 S7 L
  1175. ORA #'0'$ k* s8 ~) P5 S9 h% j; }# w
  1176. STA PPU_Addr,X
    3 \( ^  V  D0 O) ?
  1177. INX. f: _, s0 s' ?1 r: I$ g$ R' L

  1178. 9 y' A6 G8 _$ B+ S  Z! d
  1179. LDA <DEC_L( K/ X. F% V+ f* r) l8 r: y
  1180. ORA #'0'# |2 y( g  U8 v$ L+ u/ u  U
  1181. STA PPU_Addr,X  ~. r1 a0 y1 W9 g. z, I* c" L
  1182. INX' E9 K, U4 w$ ]& G) s6 Z. e
  1183. 8 {( S8 {8 m' l* W
  1184. LDA #'/'
    ! {: }+ ^: E7 ?% |7 M0 v+ j6 F6 F
  1185. STA PPU_Addr,X* B$ ~2 A& {5 G8 y' d. f
  1186. INX/ x% V. q3 L& x8 U! R$ _' G: ~( a
  1187. Music_Show_Total$ v' ~9 ]( d- x
  1188. LDA Music_Total$ q3 Y; P" F) s# F, c
  1189. CLC
    2 i+ ?+ }& A9 T& y& c' f: c
  1190. ADC #$01
    1 s2 f6 T2 `' I
  1191. JSR HEX_To_Dec3 W2 ]0 H' `$ ?

  1192. 3 n0 C2 X& q( H" d
  1193. LDA <DEC_H# A" h- N, Q/ y
  1194. ORA #'0'% R4 j' d9 i: |
  1195. STA PPU_Addr,X* `( A  l* W6 A2 Y9 r
  1196. INX, n+ J' `6 o/ h) U5 I. T% a( {3 r

  1197. 9 v) W( W( ]7 Z9 ?1 ~
  1198. LDA <DEC_T, M1 e/ A/ c  f8 S3 Q* v- V
  1199. ORA #'0'
    ( C* v8 v3 t9 X% K+ e5 g" ~
  1200. STA PPU_Addr,X2 A1 M$ {8 T1 z- R# P
  1201. INX% E, S$ E$ |4 [" A8 Y+ S6 N+ F! v
  1202. : N. X( Q6 U! Z% h2 U* m
  1203. LDA <DEC_L
    - @0 V  Q  S) [3 k4 O3 S3 `$ \
  1204. ORA #'0'' }' v7 Z7 ^& W* m
  1205. STA PPU_Addr,X
    . R  _5 d8 b+ L$ C3 C# d2 i/ a
  1206. INX/ t4 z* T6 T: ]6 e$ }4 M
  1207. 2 A- t9 @3 u- ]* C/ `' [- X+ {
  1208. STX PPU_Cur
    2 P3 E" d0 T# I/ a+ N% {$ ?; I9 T( C
  1209. Music_Show_End
    / w1 |. u7 D9 q+ Q5 @$ e" c' J
  1210. RTS) |3 f. ~& g% N+ Y

  1211. 7 G8 h, t( Z9 [' y  G) Y  k
  1212. ;==============================
    : q, D) R5 o+ ~7 Z. {$ b: b4 F, I' ^+ h. g
  1213. Time_Show;播放时间显示
    " D, L% G& u- R8 D! _7 C
  1214. LDA <Text_Disable_Flag
    ' O! `5 V7 |2 G
  1215. AND #TEXT_DISABLE_ITEM. ~8 Z$ z+ `: u: L3 E! B
  1216. BNE Time_Show_End
    3 P  ?% ^  N: M' W4 k
  1217. AND #TEXT_DISABLE_TIME
    , k- ?1 D" l1 i
  1218. BNE Time_Show_Enable
    8 |# J( n3 l9 n& G$ D* S1 [& d
  1219. 5 ]3 Z5 \; Z% G$ T0 U- f
  1220. LDX PPU_Cur( _. U$ d7 Y4 i6 B* W4 _" q# l
  1221. LDA #PPU_MODE_CNT_LINE3 p- x9 K5 H" ]' t
  1222. STA PPU_Addr,X
    1 ?5 ]& }* g% o
  1223. INX
    : e" p  W6 `/ p2 M* I* w5 K
  1224. LDA #HIGH(Play_Time_Pos)
    - z; B% z9 L, e4 O9 Z8 L/ v
  1225. STA PPU_Addr,X
    0 \- t/ p7 T. U  o- C: H; w
  1226. INX
    6 k/ E6 G. ~$ v4 c' y7 ]: q+ Q2 b$ ]
  1227. LDA #LOW(Play_Time_Pos)- f7 U9 _% c2 h' o  _1 ?
  1228. STA PPU_Addr,X  f# k9 H3 V1 I1 u% o1 D& z6 e. x, n4 M
  1229. INX
    8 J! \) x% y; \% X3 K( j; u; Y( Z
  1230. LDA #$08: B4 F1 J# O, w4 u, {/ S# T
  1231. STA PPU_Addr,X9 |' ~3 ~7 x. ]
  1232. INX9 D. i9 ]; }* K. P% q% v$ R* w
  1233. Time_Show_H
    4 e4 w7 @6 L: c: B! G2 N
  1234. LDA <Time_H
    ( M7 A0 [1 @$ \2 I2 X7 U
  1235. JSR HEX_To_Dec! }; G/ |# y/ |& t
  1236. JSR Time_Digit
    % v, X8 e# k: Z# {
  1237. LDA #':'$ _$ p7 _9 k9 H/ W
  1238. STA PPU_Addr,X
    2 q8 y' ?& o( \. v! r8 F
  1239. INX
    5 o1 w; j1 `6 s; k2 O1 |/ M: F
  1240. Time_Show_M
    # O, ]$ g* i' N: s  ^1 S$ q
  1241. LDA <Time_M+ j! C+ i+ T" _. `( F1 ^7 w
  1242. JSR HEX_To_Dec: s: a+ p$ a* H- v2 J' A/ X
  1243. JSR Time_Digit
    , q' M# R/ N8 F
  1244. LDA #':'; D% z8 G/ [; B4 y# O6 f# T9 J' k4 F
  1245. STA PPU_Addr,X( p! f# G# z' O2 r$ }
  1246. INX
    : w0 Q# A9 A+ o+ X2 z
  1247. Time_Show_S( ]4 V$ K6 \% d) b( v( D
  1248. LDA <Time_S2 X# f1 Z* Q1 ?0 e, [  t0 ^# g
  1249. JSR HEX_To_Dec
    - }9 ^0 a+ Q" v8 E+ v" X, M
  1250. JSR Time_Digit4 h. }: l9 f+ G1 L! Y
  1251. STX PPU_Cur
    7 M% j# X' {# C) c, }, n! L
  1252. Time_Show_Enable/ Y: k/ {; E8 Z5 y. R& S
  1253. LDA <Text_Disable_Flag" k0 ]3 c, n4 z. x! }7 U
  1254. AND #TEXT_DISABLE_TIME ^ $FF
    7 k/ s9 V5 P& M; ?' B
  1255. STA <Text_Disable_Flag
    9 h, e* D- J0 T$ Y$ v
  1256. Time_Show_End7 V, v0 M5 X% Y+ J# m; e- k% [3 z
  1257. RTS) l% t  g6 a7 z& w, j- u
  1258. $ G' d- _* r) C7 S! V/ C2 y+ s
  1259. Time_Digit& P1 y1 _: `- B4 l0 z8 m( V
  1260. LDA <DEC_T
    ! A7 d5 u3 e7 o0 K
  1261. ORA #'0', Q) U/ m0 U( f( i9 Y6 Y
  1262. STA PPU_Addr,X
    2 J% u( I* S5 e+ L/ T5 K& |# d
  1263. INX# E$ ~, H5 F( H. R: |& I# P0 m
  1264. LDA <DEC_L
    , w' U5 `! F9 e6 ~
  1265. ORA #'0'
    : I& Z0 z" _9 l  h% c! z2 N
  1266. STA PPU_Addr,X# B; e. m. W6 U8 n
  1267. INX* i- E  w) G: g9 h2 c4 G
  1268. RTS
    5 @' b) y7 c2 U9 i+ j& l
  1269. : \  e% f; ?# a1 V) U% e, R) j
  1270. ;==============================
    $ m5 S7 b+ y2 s0 V
  1271. Time_Count;计时& z! Y- X- q$ ^' }/ {& m
  1272. LDA <Music_Stop_State4 c1 ]2 `; S3 {  B  l2 C
  1273. ORA <Time_Wait_Cnt
    ! n- K! I4 j# c& d
  1274. BNE Time_Count_End
      a4 I1 i: h6 n: C! M
  1275. INC <Time_Cnt
    : K% h9 [6 s. v8 P; d& Y  U
  1276. LDA <Time_Cnt
    1 N: `5 i- |/ ^& J+ q# S
  1277. CMP #60+ f; j- e2 n% q3 \
  1278. BCC Time_Count_End$ ?. I0 }, E$ `0 v2 {
  1279. LDA #00: }0 q! @3 |; V! w% n
  1280. STA <Time_Cnt
    . _4 a! O1 a+ T/ W8 u
  1281. INC <Time_S
    & Z* ?1 M, {1 n

  1282. , \" V$ D' C9 R, n
  1283. Time_S_Cnt4 V/ P" z: w1 B) m6 `% P5 K/ J4 I) Y
  1284. LDA <Time_S
    ( {. }0 H. W' Z. H. }+ E
  1285. CMP #60
    ! e$ _2 D* n% `
  1286. BCC Time_Count_End+ |8 ~* }! ?( q' ~6 `% J& b
  1287. LDA #002 x+ E2 G$ t" V+ t2 v, X* h( U% w
  1288. STA <Time_S
    ( |+ e) I, s5 K, v/ Q
  1289. INC <Time_M
    * `8 K* Z, T1 c- D! J
  1290. # d6 c" L+ y4 k' h7 f  B1 I# x7 E+ S3 b
  1291. Time_M_Cnt
    ! P4 g3 X3 S5 t3 ]! o+ t2 ?6 B
  1292. LDA <Time_M8 Q7 M, t* l+ j# I  T! A7 Y
  1293. CMP #60$ E& s4 I+ u8 f, w, a
  1294. BCC Time_Count_End
    ( q0 t$ z) z: U: g& |5 x
  1295. LDA #00% U4 k$ Z! g- _  J
  1296. STA <Time_M( M% Q; Z# X7 K1 f; P$ p& B
  1297. INC <Time_H
    8 V+ ~! U5 U( t" ]' W. s+ m/ a

  1298. 0 D8 P8 I4 o; O$ \6 R
  1299. Time_H_Cnt
    " {- f! @6 x8 l$ }+ I3 y
  1300. LDA <Time_H
    9 p6 n  g3 A1 W. n) _
  1301. CMP #24* A3 W- R) Z8 @6 `4 Q+ _  R/ D
  1302. BCC Time_Count_End
    / S5 l$ p( K% c$ ]) E  `$ S$ @. D6 V0 @
  1303. LDA #00- d& B) T% b% L
  1304. STA <Time_H4 l4 F) i* x2 c6 t2 |

  1305. ( L5 T/ i. j8 A: ], l# q
  1306. Time_Count_End7 \4 ]" ]: |, g" f3 |
  1307. RTS
    : }& \# z! r* j' q+ R  g

  1308. : e: V- Z7 K9 j$ u
  1309. ;==============================
    # [! \$ H7 B5 |5 B
  1310. Time_ReSet;播放时间重置
    2 v, _6 Y( C. o2 [, Z
  1311. LDA #$00
    1 s3 I9 t( K+ C
  1312. STA <Time_S+ f+ L' l# A  Q7 e; V
  1313. STA <Time_M
    ' k7 n3 c" N8 x! B6 b! X
  1314. STA <Time_H
    . W+ H4 Q5 V1 ^# `, q" A
  1315. STA <Time_Cnt* C2 T* _6 E% N* L7 I
  1316. RTS
    : h1 k) r2 n7 W: S) d

  1317. * s7 I, @9 }- x1 v8 Z5 W
  1318. ;==============================
    * t( d5 _6 R7 g: v5 w7 k8 I. H9 ?
  1319. Music_Bar_ReSet;音乐条重置
    0 W5 J6 E6 p4 l6 {  b# `, z
  1320. LDA #$00
    8 a3 W' ~# x4 a
  1321. LDX #$00
    % n  S. o+ \% B& y. Z
  1322. Music_Bar_ReSet_Set
    5 |# X$ H, f! {& Q0 k' W' ]
  1323. STA Sound_Bar,X6 V; O! \; m2 P" ]3 H9 P
  1324. INX) M; B6 z! M" n3 a- T# z$ U
  1325. CPX #$10
    9 R# c, m4 y0 C5 ~
  1326. BCC Music_Bar_ReSet_Set& v. E* f/ c0 J
  1327. RTS9 j' \& S8 G& Y# r- [7 Q, k
  1328. % @# v$ [$ Q6 l$ u
  1329. ;==============================
    1 o6 F- {5 @+ ?# {% Y" y
  1330. PPU_Data;PPU数据写入) @, P/ E5 k' S, f
  1331. STY <Data_L/ ~: O% x! O: o. T0 l
  1332. STX <Data_H
    : J, g; F% _. s  l
  1333. LDY #$FF
    % g+ a1 O, N; `- U) b+ T
  1334. LDX PPU_Cur" e" B9 w- J# G$ q2 t; ?
  1335. DEX9 `; O  V+ d" X3 m3 t' T
  1336. PPU_Data_Beg$ |" d" |) m9 @* R6 d% L2 @
  1337. INX
    - x- J' F6 I9 U4 R5 k, P6 l9 \
  1338. INY
    : @5 @# |* o" C0 N9 V* F. N; z( K! ?
  1339. LDA [Data_L],Y1 ]. t6 r8 I5 }: D
  1340. STA PPU_Addr,X' _  H/ e. @7 u4 a% f1 |! [+ m
  1341. BNE PPU_Data_Beg
      g3 A' z8 b5 G; T
  1342. STX PPU_Cur
    4 t6 }9 k8 {& C6 ~
  1343. PPU_Data_End7 u& F# R1 n# j: p' ?) W- K" ~
  1344. RTS
    6 j  B- Y( M: Y5 K& h6 j& p
  1345. + Z1 }: Q1 |0 f/ k% ?
  1346. ;==============================! ]5 B! Y4 x8 h+ Q6 J7 ^, o2 a
  1347. Music_State_Show;播放状态显示
      A/ y$ g# P) ~- Y& e; w( Z
  1348. LDA <Music_Stop_State
    ' r6 J  K. m. i* d0 I  B
  1349. BEQ Music_State_Show_Play
    + _' Q9 M2 ^9 W1 k4 c% v7 Z' H
  1350. Music_State_Show_Stop
      W2 o+ @! Y; v+ }; O$ C
  1351. LDY #LOW(Music_State_Stop)
    " R2 y' _; B2 F* N$ A
  1352. LDX #HIGH(Music_State_Stop)$ A) ~8 l: s$ E) s# \6 q9 ^
  1353. JSR PPU_Data
    ' |! |' B# G* ?
  1354. RTS( R/ N% S9 h/ M7 L
  1355. Music_State_Show_Play
    2 |- o) ~/ U5 {
  1356. LDY #LOW(Music_State_Play)' }  M) I/ N4 a7 X% r2 w' K7 v
  1357. LDX #HIGH(Music_State_Play)- N" b* K/ z4 r! Q3 S1 F, y
  1358. JSR PPU_Data: z  n* F8 e1 b# D
  1359. RTS. j( H3 |3 W( [; q/ d' y

  1360. - n4 O5 ~7 ^- E- C4 D! f
  1361. .IF SOUND_BAR_SHOW_ENABLE& e' z+ [! h+ K( q2 @7 o! p
  1362. ;==============================
    & U) s6 ^6 L  |8 s8 t
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    - l1 M& n8 x8 O3 l7 V, s; Z
  1364. LDY #LOW(Sound_Bar_Text_Data)
    0 h/ w1 v" u- ~( k" X7 I. u; Y
  1365. LDX #HIGH(Sound_Bar_Text_Data)5 m& x* ?$ L* U3 g( M; P
  1366. JSR PPU_Data5 y! D7 H, r( v* \& S
  1367. RTS
    & S' E; Z8 J! b# u5 E2 L! ~$ p
  1368. % ?# `* C4 A5 ~! r% X
  1369. .ENDIF# A- P. _* z( ?- z, r
  1370. / w( b- \, J$ J& }1 |: r6 N
  1371. ;==============================1 Y5 Q& r6 p% f0 g/ \! J+ a! e; w
  1372. Set_NameTable_Attributes;设置命名表属性
    - {/ X1 r- i4 F' D
  1373. BIT PPU_STATUS
    3 l+ u( Q) _. r' {+ P' L
  1374. LDA #$23; [; e& X, A: N% z0 o
  1375. STA PPU_ADDRESS& i* r3 R9 q/ V8 a: F0 W
  1376. LDA #$C0
    . W( a, z/ z6 x$ f) J# D
  1377. STA PPU_ADDRESS  s; [9 V% Y6 v/ R* J
  1378. LDX #$00
    9 e! t; Z" ]; @# r
  1379. Set_NameTable_Attributes_Write
    1 A: v  U, y1 L" l) x8 A
  1380. LDA Palette_Attributes,X
    5 Q/ }& [/ ~3 g  _2 e; a% I9 E* o
  1381. STA PPU_DATA
    # t5 X" g+ i  u
  1382. INX8 z+ @3 c+ D, J' E8 |
  1383. CPX #$40$ m1 h+ q' p& m( {9 a" [
  1384. BCC Set_NameTable_Attributes_Write% s  u/ }  i' X* G* s# Z8 B
  1385. RTS* \$ b& F9 z/ [; `" M$ D+ i( P

  1386. 9 o& K" L: t5 i7 [* c& Q# S
  1387. ;==============================
    4 g9 F0 V" l+ A$ g+ k' d/ d% `
  1388. Set_Palette_Color;设置调色板数据
    ) J/ \. E1 I' ~# j- ?, v
  1389. BIT PPU_STATUS, p5 @6 q2 G5 a
  1390. LDA #$3F, K) Q$ X! r' t* e  `
  1391. STA PPU_ADDRESS
    3 m7 o& a. x4 D# e7 a; F! ]) k, g: l# \
  1392. LDA #$00+ H! Q  m9 m  m* E1 }. }$ @  i+ t
  1393. STA PPU_ADDRESS
    5 b9 _8 z7 k7 R( L# j; W' ~& h; H5 M
  1394. LDX #$00& O" Q& l- K+ ~0 w
  1395. Set_Palette_Color_Write& ^. o3 S) q0 o" y  ^
  1396. LDA Palette_Data,X
    3 G2 G  ]  u: Q. O4 c+ c4 z9 K
  1397. STA PPU_DATA
    ) c# u% _* ]+ y6 S+ y
  1398. INX
    " k) O% v$ R: U& M+ H' O. v
  1399. CPX #$20
    : \: b( q; {- Q
  1400. BCC Set_Palette_Color_Write1 h6 h- y( U( z! h- x, N' a
  1401. RTS
    * E+ |: V2 S, L* S% m

  1402. $ X; }2 }. t# ~, H
  1403. ;==============================/ O9 Z: l+ k$ B
  1404. Init_Palette_Addr;初始化调色板数据3 I; h3 m' z+ H# l+ h2 p
  1405. LDX #$00. L+ b$ D; H$ Z6 Z% e& l
  1406. Init_Palette_Addr_Write
    3 _) C1 w+ \" m2 V+ X# B; r* m; u
  1407. LDA Palette_Data,X
    , G* Y* c2 J5 v3 n. E
  1408. STA Palette_Addr,X
    4 v8 G  }, M" l7 J5 I
  1409. INX
    7 E! N' a* ^! r4 D
  1410. CPX #$207 _6 d- E1 X0 a: |  @
  1411. BCC Init_Palette_Addr_Write& w3 `& l. a- ~: \# M
  1412. RTS
    - t/ b1 }9 f" o* i7 T% L- z# O

  1413. - s+ T+ r; ?/ {0 j  W
  1414. ;==============================  P; ]! n+ d+ [9 s" n, z
  1415. Update_Palette_Color;更新调色板颜色) Q1 S# v+ `1 `4 B% y# b$ k' e
  1416. LDA <Palette_Update_Flag* h1 c! q( Y4 u0 H
  1417. BEQ Update_Palette_Color_End
    9 ~1 B* U' |8 q, B1 S, ~
  1418. LDA #$3F5 o6 A' \% q+ l' c
  1419. STA PPU_ADDRESS
    + r: M% P1 e0 q2 b& O+ [
  1420. LDA #$0C+ e; c* Z& c; x$ W' m
  1421. STA PPU_ADDRESS
    0 l( Z$ s5 n; X* ~
  1422. LDX #$0C% i  B& |* Q% J5 y6 X; z2 A
  1423. Update_Palette_Color_Write! N# H1 Y6 ~7 E$ p2 t0 }. i+ F) d
  1424. LDA Palette_Addr,X; f: j1 k* I8 a* u' j9 l
  1425. STA PPU_DATA7 h( o: }- h' j
  1426. INX! |  {, a* Z" P! X! v+ |
  1427. CPX #$14
    , W: b8 I" M" o8 H
  1428. BCC Update_Palette_Color_Write
    9 {* n' u9 j, ?/ M
  1429. LDA #$00$ N- |( g/ k5 W
  1430. STA <Palette_Update_Flag$ @( z, L) r" {: n
  1431. Update_Palette_Color_End$ x& u, F7 Z( k8 I! k! G" t
  1432. RTS
    7 S" G8 k/ `$ @7 r
  1433. ( C4 Q7 b$ ~+ b

  1434. & J" Q) l' C' f* R3 r9 h
  1435. Update_Sprite_Palette_Data
    6 O) y; n- _' h4 Q: K
  1436. .DB $21+ Y5 O. A7 u5 A* Q) u! S
  1437. .DB $21& p( Q9 h. J+ e5 H% G4 C7 a" O, p
  1438. .DB $11: C5 u& \; ]" y
  1439. .DB $01& h% K0 s! ]: m+ D& X* N1 u) t
  1440. .DB $01
    ) ^+ T, k. G% H2 }: ]. F1 Q
  1441. .DB $118 A" D; ~" k3 S) c0 ^9 G; @
  1442. .DB $21: j( r7 r7 R- y% N, }! `
  1443. .DB $21
    $ i+ U" u& |/ n* I' s3 l2 E, j4 I
  1444. .DB $11
    & `& `* p8 j. h) ]. O9 i
  1445. .DB $01. i* x5 w/ n' r& j- G" ~/ H
  1446. .DB $111 d  Z: ~8 A2 K8 D9 j
  1447. .DB $210 p. z3 L) v6 k$ c
  1448. .DB $21+ T6 l0 J. `6 P8 [0 q6 l" @
  1449. .DB $11: h7 l1 [  G$ q3 x
  1450. .DB $01
    1 j! K1 G& [. t. w7 n$ O( }
  1451. .DB $11
    2 z, k6 J7 }/ E- u1 ?% f5 t+ a: L
  1452. ;==============================
    1 X/ l& T8 t1 ~
  1453. Update_Palette_Data;更新调色板数据9 K  l* C& u0 d9 j; u
  1454. LDA Nmi_Time_Count6 a# S$ s4 m3 N. V
  1455. AND #$08
    , J) g4 i  M- p2 e+ a
  1456. CMP #$08) ]0 A; c$ G/ f" D' v8 p& E
  1457. BNE Update_Bkg_Palette_Data
    2 I5 `1 L" s* I% E, V

  1458. + Z  O/ }4 v0 R" ?+ Q" `
  1459. Update_Sprite_Palette_Data_Set
      H" S$ g+ D5 _; N1 u6 ]% u
  1460. LDA Nmi_Time_Count$ j. N5 l2 _# Y$ n# J2 W3 B# g. i
  1461. LSR A
    , K# [; D2 j' e; m. c
  1462. LSR A8 a2 J* B( K! m  R
  1463. LSR A
    ( c& U( W2 R" m0 M" q& F" Q" q" [
  1464. LSR A4 P6 u6 V$ B$ |% y
  1465. AND #$0F
    0 W3 {2 r* l& a: i, @
  1466. TAX
    ' |! X8 P5 r( Q% A$ t6 C
  1467. LDA Update_Sprite_Palette_Data,X" D; G( N) I, K9 |) Z% H
  1468. STA Sprite_Palette_Update_Addr
    4 F8 e' R* ]$ Z+ o4 r
  1469. LDA #$01. e' [. g! {. T) p, A
  1470. STA <Palette_Update_Flag
    , R! F$ w+ N# [0 P! v& Q
  1471. . L+ p1 B5 C# e, Q% @* t& U
  1472. Update_Bkg_Palette_Data
    / U* K; U* ]6 x/ X' K7 r) O9 R
  1473. LDA <Text_Disable_Flag/ g/ w5 M" \" R( Z
  1474. AND #TEXT_DISABLE_RAM
    9 n: D# A. Z$ q
  1475. BNE Update_Palette_Data_End) [: b7 D" ?: |8 I' L+ H: V" z! I; ^
  1476. LDA <Music_Stop_State
    , F8 ]7 D6 E5 z9 Z- `3 I
  1477. BNE Update_Palette_Data_End
    0 M8 S  D+ j5 I" j) S1 {- A- h
  1478. " R5 E& s: B# A( t2 ^- u+ P4 S
  1479. Update_Palette_Data_Check% A. V( C/ _5 k
  1480. LDA Palette_Wait_Cnt8 A5 H& a! |* B$ x* _
  1481. BPL Update_Palette_Data_Check_Over
    : e2 I1 h7 G* r! g, [( Q# m
  1482. LDA #PALETTE_UPDATE_INTERVAL# u+ z) R% l7 u# Y- u
  1483. STA Palette_Wait_Cnt# x$ c$ N& ~5 a2 D, {# |
  1484. Update_Palette_Data_Check_Over# Q/ X2 H8 J; x) h& ~3 Q' V4 ?5 F
  1485. DEC Palette_Wait_Cnt
    ( K% g5 p; Q6 y) n
  1486. BNE Update_Palette_Data_End
    ( ^# G# W& Y; k9 k7 D

  1487. 3 [( C9 O# b! |" ~) j
  1488. LDA <Text_Disable_Flag
    8 r& M$ l' ]- J" f( i, v7 S
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    , J: B; D% r9 f9 X7 J* a5 `- `8 r. u
  1490. STA Text_Disable_Flag
    6 {; u- M4 U2 ^* M9 Q) p; i
  1491. INC Palette_Update_Flag
    & F( l" K2 k& V* Q
  1492. ( D% L; e6 L' t/ T& L' v0 {& p
  1493. LDA #PALETTE_UPDATE_INTERVAL, y6 S- h6 ?, H
  1494. STA Palette_Wait_Cnt. q5 I' g, y& T. v2 ]5 o8 i* G, N! I

  1495. 7 H3 `2 _2 z, K. R6 b+ f
  1496. LDA Bkg_Palette_Update_Addr
    9 a1 |! I+ d5 O8 E6 ]
  1497. CMP #PALETTE_UPDATE_MAX
    9 H; K# S! z/ O
  1498. BNE Update_Bkg_Palette_Data_Set
    7 b% l" x- o0 O
  1499. LDA #PALETTE_UPDATE_MIN - 1
    ! }8 }6 v- j1 p6 }* O( p! _4 S
  1500. STA Bkg_Palette_Update_Addr& ]9 ]2 z' y) Q, B4 a
  1501. Update_Bkg_Palette_Data_Set
    2 e2 ?" |2 L/ B5 Z1 V  A7 @2 t
  1502. INC Bkg_Palette_Update_Addr
    3 J4 g5 i9 i) [3 s8 u& k

  1503. ; X7 t  t' v# l/ q0 G2 H4 a
  1504. Update_Palette_Data_End4 Z( @2 r/ Y7 P7 J/ F
  1505. RTS% x3 }5 G' K) Y+ D% K! f

  1506. 6 Q0 ?( i* ~( B9 \1 q9 \
  1507. ;==============================# f: [$ \1 b4 O: w5 M
  1508. Show_Music_Text;显示静态文本
    4 m& T; ~: e# a* \9 e* I7 y: d
  1509. LDX #$00
      W: Z2 n* h5 a- T
  1510. Show_Music_Text_Set# g2 _' d, u6 C
  1511. LDA Static_Text_Data,X
    2 g) P! x# s$ ^% \9 R
  1512. STA <Data_L1 }1 J2 ^4 Z4 A% I; L- T
  1513. INX% ^- i5 i5 Q+ P: k% j; X
  1514. LDA Static_Text_Data,X
    - N* `7 X7 s; |  K2 G) m
  1515. STA <Data_H8 v) t" s0 h  M+ B: \" r" T  [
  1516. INX
    % E$ m' N( [8 c6 n3 N
  1517. LDY #$00
    0 N0 m2 f, ~6 M- ~# ~# O) h* ?
  1518. LDA [Data_L],Y6 U; i& A+ w! w# k# @9 d
  1519. STA <Data_Cnt
    ! l9 w3 Z; u8 e3 W3 S; k' [
  1520. DEX6 v4 k0 L1 K) c5 l( q
  1521. DEX
    0 \+ z: P: J7 T, G# E2 Q  Z6 W! o
  1522. LDA Static_Text_Pos,X
    ' D$ ~' u  v+ H) s/ U
  1523. STA PPU_ADDRESS' N& Y9 O2 r5 k9 P+ m8 l% S8 P3 h
  1524. INX- |& e- M5 s) C4 ^5 h
  1525. LDA #$20) H1 k# ^8 Y/ k& ^' S1 `8 J
  1526. SEC
    * S$ W; c6 x# W9 X: z
  1527. SBC <Data_Cnt# F1 N; ], K1 A  ~
  1528. LSR A
    3 m, l, V, ]& E' V  ~3 f+ V* W
  1529. STA <Data_Buf/ v6 x6 b! i" |5 Q
  1530. LDA Static_Text_Pos,X
    . o! D7 R1 g! A) ]
  1531. AND #$E0
    : `$ T; m/ A. T4 ]5 n
  1532. CLC
    ( F1 u% Y" d, g& U
  1533. ADC <Data_Buf, ~. p% n( ^5 Z7 x4 C% L% I9 b
  1534. STA PPU_ADDRESS
    6 R# t/ {; m7 J8 Z! r
  1535. INX, ?* x  ?: D( M# ]. x* A( A
  1536. Show_Music_Text_Set_Write- U/ u7 t# N, x9 U: q$ L& n) N# k
  1537. INY! O& \3 F- n& A2 N8 t: w5 l
  1538. LDA [Data_L],Y& \' D+ M3 i4 I
  1539. STA PPU_DATA7 N; V" O) b! N8 ~
  1540. DEC <Data_Cnt
    % U4 P. }3 n( v% _
  1541. BNE Show_Music_Text_Set_Write2 W' ~9 J7 K' K
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos
    / F6 b6 }$ |4 \' v. h  ]
  1543. BCC Show_Music_Text_Set. ?# [7 T3 p7 f' L
  1544. RTS
    $ M+ p2 r5 K8 P* p

  1545. & W5 l' M7 w( A; R6 q, Q' y
  1546. ;==============================
    $ q: `( m: m& G7 c1 F
  1547. .IF Track_Name_Pos;显示曲目信息
    : k4 J+ j. F. `+ T- z: ]6 S; p

  1548. / D* I& k0 U/ U* s' Y2 `: |, A% F
  1549. Clear_Track_Info
    - Q/ t% @1 D4 s' W- d% f
  1550. PHA
    , V/ A7 @7 Y2 T$ W4 n" a' u
  1551. LDX <Music_Item_Cur3 E/ ?+ H% A/ _% W- l
  1552. LDA Track_Name_Addr_Flag,X5 i' W$ A! X7 n* ]9 @/ Y/ A& z& ^
  1553. BEQ Clear_Track_Info_End_Ex
    $ e* Z* ~4 W' t* m+ x: c( l
  1554. PLA5 T$ i8 l: G- H$ Q: Y) |
  1555.   l' L, s; T& F
  1556. LDX PPU_Cur/ j1 I/ U" w4 F
  1557. PHA( O1 Y1 C+ {5 j2 _) g  f
  1558. LDA #PPU_MODE_CNT_CLEAR
    " c5 O- Q0 D% F/ ?: ^: T3 I
  1559. STA PPU_Addr,X
    + _$ Z. k( g+ F5 T/ `
  1560. INX
    8 v7 R3 B1 h! `8 w+ P
  1561. PLA9 t  s. N0 r" v  G" C
  1562. JSR Show_Get_Track_Name_Center_Pos
    8 W" v* S( P$ S" A$ Q1 d
  1563. STX PPU_Cur
    : t% G5 i- a! J0 U/ t- O1 i( t6 ?2 L' A
  1564. Clear_Track_Info_End% f. D! q& g- x* }: }3 m+ T* C! K
  1565. RTS
    ; l, i" o# J  b' T( I
  1566. Clear_Track_Info_End_Ex- W$ ^  \  `& b; E
  1567. PLA
    ; E' h, D% |% I9 j3 D" n: b2 r
  1568. RTS, b. t1 N0 k& Z' B' a
  1569. . u5 V  t; I: b, t  u% I. g0 c
  1570. Write_Track_Info" T" W0 @- \2 T+ `% s' y8 v, O
  1571. PHA
    5 G( l# Y6 q! c# y
  1572. LDX <Music_Item_Cur7 l) j9 y! \; U8 y1 X
  1573. LDA Track_Name_Addr_Flag,X( E+ I- b; d/ U4 W) N
  1574. BEQ Write_Track_Info_End_Ex
    . v7 [/ u; z7 s" v6 F  R
  1575. PLA; M1 b5 S+ x  G6 p/ L4 k6 g& W

  1576. - H# h, ]+ T7 d2 M$ K6 }; d  _. @
  1577. PHA
    $ o4 Q! n+ s' }! U, x
  1578. LDX PPU_Cur
    . s7 z* H$ d* w. {$ U
  1579. LDA #PPU_MODE_CNT_LINE
    , b. m6 k  t, H7 A
  1580. STA PPU_Addr,X
    0 f+ M8 e( Q6 s7 f8 w" j1 K3 f
  1581. INX7 r/ V6 V9 I$ P' z/ n! B+ I7 ]# P
  1582. PLA
    4 K- l- }! \) U; L$ s' w' ^
  1583. JSR Show_Get_Track_Name_Center_Pos
    3 ^7 f  a/ g- X
  1584. Write_Track_Info_Data
    7 V7 Q/ W0 W8 [7 O, ]
  1585. INY  g$ n! b) c. r; w( v
  1586. LDA [Data_L],Y
    ! c: o9 Q( @; T( |" e! \) ^' d; L% N
  1587. STA PPU_Addr,X1 K! \+ o9 o4 v' V/ ]: B
  1588. INX
    ) p! Z, s9 G; U! g1 g
  1589. DEC <Data_Cnt
      u: V( V9 a; ^4 V$ P- I
  1590. BNE Write_Track_Info_Data; y. i- @' \' j9 D
  1591. STX PPU_Cur9 ~' n' r8 Z7 n/ z8 K# {5 k
  1592. Write_Track_Info_End4 \1 i( f8 ~! U, a6 p- A2 |
  1593. RTS$ c2 v, V: u9 v  y. Y/ k: w# T! {
  1594. Write_Track_Info_End_Ex! g& R+ O' n* k0 ^9 g
  1595. PLA
      @' s$ L( y% H
  1596. RTS3 ~, ]8 N* r' V

  1597. . }- ^, y, u# m
  1598. Show_Track_Info8 F9 _& {' q, B4 H9 ^
  1599. Show_Track_Info_Clear7 ^' n7 w; y! i! p' J
  1600. LDA <Music_Last
    ! L8 ]3 _8 Z' ^+ y- S! J. A1 {
  1601. + a" n) j, B9 V$ g4 Q
  1602. JSR Clear_Track_Info( `0 _; J! Z. q4 ~
  1603. 8 }% Q/ V* x7 u! ?% \6 s9 r
  1604. LDX <Music_Item_Cur, k: S, B  ^! s% r' X$ m8 @
  1605. LDA <Music_Cur,X
    . p% @$ T! ^% {/ [: \5 \8 w
  1606. JSR Write_Track_Info% i- Q- R4 ^: b
  1607. RTS
    7 G3 |# E. t- V5 w! C  Q

  1608. ! E, k0 K; G, [2 N4 b+ F! j' |# e
  1609. ;==============================
    * p/ d$ g) E2 W, w) q# c" L  P
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置
    % j4 {) X9 D4 E% Y* |7 w4 R- o8 r

  1611. 1 Y; [% ]" f: d5 _& |0 }2 q& O
  1612. ;取出集合名索引, E  O0 e, I: v1 i- `; Y, V0 F
  1613. PHA& q6 i! P6 q0 h! C2 L9 f

  1614. 6 g* {5 m& w" ~( @6 J
  1615. LDA <Music_Item_Cur
    ( ]1 j6 m% I3 y) O% x* ]# l( H
  1616. ASL A+ a' W$ F1 C2 l. }+ d+ O" Y/ z* i
  1617. TAY4 Q! a' @& W- {% x. t9 v1 w
  1618. LDA Track_Name_Addr_Port,Y( F4 k( V* T6 W& E  L8 Y- P1 ~
  1619. PHA
    # G( P7 L9 t5 I# l; Q! Q
  1620. INY
    9 N8 M# L+ z: w) }
  1621. LDA Track_Name_Addr_Port,Y$ @& Y5 P. F+ @9 D! v) F' S
  1622. STA <Data_H+ S) j" C0 h9 B; v0 K1 y8 z
  1623. PLA
    - d" y- M+ x0 j; q- r
  1624. STA <Data_L
    / [9 n2 Q# |( |  q

  1625. ! f) k8 N" {4 b; g1 ?( F
  1626. PLA) g! {, h' O: K1 D8 a: c# A/ |1 I' i; b+ Q

  1627. ! l. ?3 A+ D* q5 P
  1628. ASL A
    % V" L4 o1 M' N+ e+ _4 j, P" N
  1629. TAY; O+ F3 L, w  [
  1630. LDA [Data_L],Y
    ) J& W7 M9 e0 ]1 @. c, ]
  1631. PHA. L# X4 F7 p6 L6 I1 a& U
  1632. INY, H' U$ c0 {1 ]( J/ u
  1633. LDA [Data_L],Y
    8 H; ~  t6 |) D9 d
  1634. STA Data_H6 B9 B3 l4 m: A0 S
  1635. PLA/ U+ t  d" C- p# G. R! a
  1636. STA Data_L
    5 S( y: Z% t: ]% Z% h% U! _3 u
  1637. ' h" {3 Y- Q! R8 V3 [6 T2 [; X1 B
  1638. LDY #$00
    7 [  U4 q) P5 c6 Q5 o" Z: ~& u* \
  1639. LDA [Data_L],Y
    : q% ^: @8 G2 l9 A& X
  1640. STA <Data_Cnt6 _7 t% O, b. O, O" Y# W
  1641. LDA #$20
    ' i4 M( z$ _  W% V$ |* C8 O
  1642. SEC/ j9 ?7 C2 t2 a2 W
  1643. SBC <Data_Cnt
    ( w2 C2 x$ f; [; ^
  1644. LSR A
    ( `+ `# P, J7 ?4 d
  1645. STA <Data_Buf
    ' c' l9 e: U5 z6 m1 \  p8 b
  1646. LDA #HIGH(Track_Name_Pos)# n% ]2 G3 B: P: a9 ?' Y
  1647. STA PPU_Addr,X
    ; z) m6 b0 h1 a9 M$ n1 X8 D
  1648. INX8 f3 [2 O6 L* O" W
  1649. LDA #LOW(Track_Name_Pos). P. N; e& T$ D! a. N2 e# j+ {* ]
  1650. AND #$E0, u2 Y; ^- J) `! L0 Q$ k
  1651. CLC
    " g& b- y+ T3 V9 M8 T( \  N
  1652. ADC <Data_Buf- f% `/ X! n$ i; ~" A$ e1 @
  1653. STA PPU_Addr,X
    4 j9 X  ?/ r! m( ~! p% U
  1654. INX
    + ?$ ^4 t  a, M) I0 _$ W9 e
  1655. LDA <Data_Cnt
    * @  d7 G& i/ n& S
  1656. STA PPU_Addr,X
    : i% O0 D/ N; L. r  q( r
  1657. INX( A+ v. M' Z- g9 P8 \9 }7 j- o
  1658. Show_Get_Pos_Center_End" e3 o/ H! h! v% S- h% s' U
  1659. RTS, L& C: m4 L% W4 ?
  1660. .ENDIF; Q4 P/ u. c5 d$ O0 t* V7 n. _( s
  1661. 8 b$ m, _; [+ E9 Q( H% ~
  1662. ;==============================1 A" z6 C, W# g% a
  1663. ;音乐端口清除& @% u4 f# h3 Q7 Q
  1664. Sound_Data_Clear
    8 w' s' [' ^: p( U6 Q" M+ v
  1665. JSR Sound_Port_Clear/ }# ?0 f( J* H/ G( z, `
  1666. JSR Sound_Ram_Clear; k/ p5 d1 ~& D9 Z# s7 ^
  1667. RTS
    3 c6 V6 Q' o  Y  @, _
  1668. : h# j8 u5 A! W; k
  1669. ;==============================% W' h; T8 f+ o( j
  1670. ;音乐端口清除+ S, w5 e4 U5 W/ V2 E7 C. n
  1671. Sound_Port_Clear, V* z- g/ y+ }: z% Q" e+ _
  1672. LDA #$009 t0 l& h  |. g- J5 i
  1673. STA APU_STATUS
    - H* [; ?3 @  s5 O% ]" `
  1674. LDX #$00
    ' }2 _# l! _( k+ C  `1 U
  1675. Sound_Port_Clear_Write
    6 \1 r/ L  S* h6 R
  1676. STA $4000,X
    2 o2 E6 Z4 X' ?* T1 D% F5 o
  1677. INX8 {; O/ @/ O- B% L7 Z8 i/ _
  1678. CPX #$14
    ! H+ P6 k" I0 E
  1679. BCC Sound_Port_Clear_Write
    0 [2 p) K! L2 e8 t5 I
  1680. RTS
    ) o$ ~. E- j5 u
  1681. / n$ @  u$ r: u3 x$ Q
  1682. ;==============================+ G1 e9 @: h  m; y/ B0 \/ Y/ _
  1683. Sound_Ram_Clear;RAM清除7 z7 _: m' }3 Y; a8 {* ?# y3 w/ N+ k
  1684. LDX #$00
    ( m  E7 T8 Q/ i# O' b
  1685. LDA #$00
    . M/ f% b; {3 B7 T- P" x" J
  1686. Sound_Ram_Clear_1
      H' w$ h4 |' m: L3 r1 Y, _
  1687. STA Sound_Ram_Addr_1,X6 E. a- s9 u; H# B
  1688. INX
    - w  S) u2 h1 r8 O
  1689. CPX #Sound_Ram_Addr_1_Size& u, R$ U9 [8 z7 ~& O6 [0 a
  1690. BNE Sound_Ram_Clear_1
    + E5 V, K2 @9 p
  1691. LDX #$00# s( J, V$ [4 Q$ t) d
  1692. Sound_Ram_Clear_2! w. k: v2 I/ x: f+ b
  1693. STA Sound_Ram_Addr_2,X
    3 T8 C1 k& {# p" N
  1694. INX
    ) Z0 y8 K7 q8 L" E
  1695. CPX #Sound_Ram_Addr_2_Size
    : R. ?) ^7 T  J* A* m8 E2 S* ^
  1696. BNE Sound_Ram_Clear_2, i. p+ M( J' q$ W/ M2 a  x
  1697. LDX #$00- p8 i# L- [7 L, h5 P) e" `
  1698. Sound_Ram_Clear_31 I0 H. _5 e! d6 N1 h4 n. T: B) C
  1699. STA Sound_Ram_Addr_3,X$ g8 z+ z# |; V  H* X8 a
  1700. INX
    ( d; q9 ?6 K7 ?% l/ m
  1701. CPX #Sound_Ram_Addr_3_Size7 r; J4 K; A4 E7 y& J
  1702. BNE Sound_Ram_Clear_3
    , J0 W% r2 {( r  Y6 J
  1703. LDX #$002 }5 f$ v9 B  W) ^, L" ]4 v
  1704. Sound_Ram_Clear_4
    , g7 ?3 s4 E/ P% W6 Q
  1705. STA Sound_Ram_Addr_4,X
    $ o7 G8 C+ \" A# O3 S/ Y
  1706. INX
    ) r/ N7 _1 M0 y1 ^2 ]
  1707. CPX #Sound_Ram_Addr_4_Size
    8 W5 e; a! u( @9 U
  1708. BNE Sound_Ram_Clear_4) ?+ h3 c! x6 M; a& ~
  1709. Sound_Ram_Clear_5
    . ~& p0 ^/ o  N6 J2 H
  1710. STA Sound_Ram_Addr_5,X" e, K6 K9 K" H5 f+ P' x. e
  1711. INX$ s0 ?' h* h! o
  1712. CPX #Sound_Ram_Addr_5_Size
    6 E6 w. P: G) z0 h# d* E: P
  1713. BNE Sound_Ram_Clear_5
    6 r, \* z$ O" B# `4 X+ a
  1714. RTS( c2 F1 v' \8 o: d9 Y

  1715. - K+ w+ E! y9 ^+ d" J0 a" \. V
  1716. Get_Music_Collection_Name& e/ q, ?# h- M6 I. ~2 i
  1717. PHA
    # A/ ?  h. H7 ~3 u8 e; k/ w
  1718. LDA <Music_Item_Cur
    ! @: K, I' n3 h1 i: ^" I% n
  1719. ASL A
    , F) i' l( Y' b- B
  1720. TAY. b! K+ M+ T+ i" c2 e
  1721. LDA Music_Collection_Name,Y. a; p6 G0 i# y$ Y  L( f1 \) ~
  1722. STA <Data_L! F3 y. [0 c. Z5 q& y0 A$ y
  1723. INY
    + s6 a3 L; z1 I/ J/ h, V( g
  1724. LDA Music_Collection_Name,Y1 w4 ?- E8 t: c+ _
  1725. STA <Data_H& `, [- W  _2 h0 h& ?. J9 D
  1726. PLA- J/ x6 I( k/ n0 A: K, p
  1727. RTS
      Q- w" [0 i8 @" I0 z

  1728. ' X3 y; I; V  I
  1729. Set_Sound_Total* a7 g/ I3 p1 u: m' B# V2 [
  1730. LDY <Music_Item_Cur
    ) V. d- l3 x# P5 @" [1 T
  1731. LDA Sound_Total_Port,Y" R" Q7 {7 A7 j4 b2 `! w% S
  1732. SEC/ H8 E" h5 o* S( ]
  1733. SBC #$01; F; Q; x9 a3 H& o
  1734. STA <Music_Total  S' |) N6 u4 ], F
  1735. RTS
    6 c2 w) f- C) j6 w
  1736. 0 K, O. _" _1 D7 O
  1737. Get_Sound_Start9 @2 L9 e2 _9 s! _+ x
  1738. LDY <Music_Item_Cur
    8 n9 Q" Q4 s# I- E; {3 a+ y3 f
  1739. LDA Sound_Start_Port,Y
    ) }+ F5 |3 m9 m# f
  1740. RTS
    " T" _8 m; Y, S! l* \

  1741. ' ?9 M/ Q, W0 p9 [" O' V
  1742. Set_Sound_Init_Port
    / y; q: y3 l( f, c
  1743. PHA
    0 F$ ~* x- ?/ Q$ d# u% G1 g
  1744. LDA #$20
    6 v! p6 A6 t: L, G/ l: l
  1745. STA <JSR_Addr_Op
    & F( A" l, h8 _& V  T/ P+ n/ T
  1746. LDA <Music_Item_Cur
    # V* Q5 f. _/ h" r! V3 d
  1747. ASL A- u  g) q3 B( ]  q% S* {
  1748. TAY
    # p0 v* v9 n9 e3 j
  1749. LDA Sound_Init_Port,Y# K# A4 v/ J, j" R
  1750. STA <JSR_Addr_L
    . O, n& `" s% j- b' J
  1751. INY
    + e. n, i/ U, Q' B
  1752. LDA Sound_Init_Port,Y
    8 W, D) Q6 R( @8 L. q5 {2 C
  1753. STA <JSR_Addr_H
    8 S, n7 C+ E, m5 g4 g7 o
  1754. LDA #$60
    9 `9 f6 i8 t+ R: L; A5 y7 H
  1755. STA <JSR_Addr_Rts" C: C) f" g; c# q$ [) n
  1756. PLA: B/ \& K9 j6 l1 ~# g. @3 M
  1757. RTS) R0 o' [* t: y+ q" U& p+ _

  1758. 5 Q* Z# U4 ~: H
  1759. Set_Sound_Play_Port- P& [2 i2 Q. c' Y9 X) ^' b% |
  1760. PHA4 E0 L; _; J! ]9 V) z4 O. n8 i
  1761. LDA #$208 {3 B  h' ^- M) R% C7 z# ^
  1762. STA <JSR_Addr_Op# N) n5 N; }: v. w
  1763. LDA <Music_Item_Cur- [, f$ N+ g0 d1 c6 {+ h8 {8 N
  1764. ASL A0 E9 [# @) e/ @7 ^) |9 z6 b7 U
  1765. TAY
    : n2 R. A% H$ T6 B% t
  1766. LDA Sound_Play_Port,Y2 }4 Q( Z( ^$ g& v6 I
  1767. STA <JSR_Addr_L
    ' o' b- P( @6 ~
  1768. INY
    ! T: v6 S0 z4 w6 I
  1769. LDA Sound_Play_Port,Y
    ! M( f# _" F/ V6 h8 \, ~
  1770. STA <JSR_Addr_H
    ; V5 `" f7 `( E6 [9 x
  1771. LDA #$60# X" ?0 \# d- W9 [- K9 Q& R
  1772. STA <JSR_Addr_Rts
    - |% w1 L: {! y, `$ d0 ?
  1773. PLA' O2 [7 T  K% }+ h& g3 d
  1774. RTS. _! V/ o5 o# ~. U2 |/ n8 t

  1775. - C5 Z% T% J" t0 i6 \2 H4 n
  1776. Set_Sound_Reset_Port
    - d% l3 R' ?  i0 G) K
  1777. PHA2 w8 X4 O4 ]/ b7 B0 x/ ^; @( H: K
  1778. LDA #$20
    / M1 d$ {+ [( U. d1 |1 m; C3 t4 E
  1779. STA <JSR_Addr_Op
    ; d, n0 g. x0 o" g: o! X
  1780. LDA <Music_Item_Cur5 }. ]# o% R, R& K; s3 Z2 x
  1781. ASL A
    7 T  z4 q+ w+ ~
  1782. TAY% d2 ~" g# C" I5 ]( {$ v
  1783. LDA Sound_Reset_Port,Y
    ) c7 V/ |+ R7 r4 X/ n0 p: N5 t
  1784. STA <JSR_Addr_L1 }+ N% N) H6 ]: o
  1785. INY: ]( T# ]: Q+ k' ?; O
  1786. LDA Sound_Reset_Port,Y* i; o8 g4 f3 l" z& |$ b) X
  1787. STA <JSR_Addr_H
    " a- f1 U9 }7 s/ a
  1788. LDA #$60/ O; D5 E% S' V7 {
  1789. STA <JSR_Addr_Rts+ R4 d  C0 `7 k# N
  1790. PLA
    ' m& H8 b! m$ e4 Z% W# K% V# }! ]
  1791. RTS
    + J  w  p( f% b) s' E" q) C% Q0 F* A1 t
  1792. 1 C9 z* i5 `/ z- C# l/ X
  1793. ;初始化音乐bank1 z) f; z1 o* x, _" ~$ d
  1794. Init_Sound_Bank4 X! v% c7 R+ l" m( @
  1795. LDY <Music_Item_Cur
    + A2 z8 x- R/ n2 y. X
  1796. LDA Sound_Bank_8000,Y
    7 K8 g4 }. |* o  S4 y* Z: P
  1797. STA <Music_Bank_8000. b0 o! d! [4 o
  1798. LDY <Music_Item_Cur
    9 D$ K3 M9 F# g8 k7 r
  1799. LDA Sound_Bank_A000,Y0 N0 y/ d, T( R. {: q
  1800. STA <Music_Bank_A0000 V: G) o9 I( }6 n+ `0 S8 `7 ^6 t
  1801. RTS
    : a7 |0 f+ A' r% y2 w7 {

  1802. , Z* B1 m8 S, c0 Y$ D! ?
  1803. ;==================================================
    - x# Y0 b# z# z. b( }1 }: D
  1804. Sound_State_Reset;音乐状态重置9 Z- q5 u- K7 ], S) m% ^, r
  1805. JSR Music_Bar_ReSet        ;重置音乐条2 N1 A; u' ]- }
  1806. JSR Time_ReSet             ;重置播放时间! c5 _, k* }" j$ U  T' h

  1807. / {5 U# i5 g  f$ o& K7 Z! M; K
  1808. LDA #$00
    7 o% J* `$ Y& P& H& `
  1809. STA <Music_Stop_State" W# b' ?7 i9 A  _
  1810. JSR Music_State_Show       ;显示播放状态
    - W  B3 l, F) v8 j- @0 g
  1811. * _: F$ j" v- G% V, v
  1812. .IF Track_Name_Pos: ~  f( c8 a1 x+ J* [7 A8 G6 E4 R+ [
  1813. JSR Show_Track_Info        ;音乐曲目名显示: ]5 f; e/ G5 L3 [0 x7 @
  1814. .ENDIF
      {: P4 h% x' c$ |8 {
  1815. 2 i1 t+ @6 y# [2 x( ?
  1816. RTS
    - ]9 Z6 l& H0 D6 |  f

  1817. 6 T4 d3 W0 j/ Q
  1818. ;==================================================
    2 ^7 D$ l- u: h6 ]+ j8 ]
  1819. Sound_Init_Proc;音乐初始化处理
    " D4 T0 m$ `: Z( S) n3 u) w1 Z% A
  1820. PHA% ]5 q, T) z0 s0 C
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址
    " x  C( d+ E& j  ^6 W+ g9 @
  1822. LDA #$00
    * G. }. K6 \- ]! ?
  1823. STA <Scroll_H               ;重设水平滚动
    1 V4 t- @9 }& S: d1 e4 |' m
  1824. LDA #$0F
    9 @: e6 Z4 J( q# }5 k
  1825. STA APU_STATUS/ i' j( S9 B- G0 g  u
  1826. PLA
    , s+ u2 y! J1 K
  1827. JSR Sound_Init             ;音乐初始化& u6 i. ^4 C) Z( t
  1828. JSR Sound_State_Reset      ;重置音乐播放状态& L$ o* f5 |1 I
  1829. RTS
    ' H& N& {( t) q
  1830. 1 y, \9 C2 O4 s& g) ]
  1831. ;==================================================5 j2 ?2 [5 X' K/ d# j4 R+ @
  1832. Sound_Play_Proc;音乐播放处理
    . e) s, r' N) \7 ]
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址- O3 S. _+ P4 o
  1834. JSR Sound_Play             ;音乐播放5 A9 M! F3 ~' }! \4 g
  1835. RTS
    1 j. t% c- W* B- a$ M- O

  1836. $ M  k6 L( s8 ^( e8 M2 v8 Z/ z
  1837. ;==================================================
    $ x" A: ^) P2 ^# W0 g
  1838. Sound_Reset_Proc;音乐重置处理  J, B5 O" L& E0 u4 ^/ O7 o
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址# x7 K6 r) @2 f% V: X6 L' Z
  1840. LDA <JSR_Addr_L) ~$ j2 e# s8 i. C
  1841. ORA <JSR_Addr_H' Z/ |0 ]5 A4 g8 E  w
  1842. BEQ Sound_Reset_Proc_Default
    ! R6 v2 \" N& l+ t0 f! k+ H
  1843. JSR Sound_Reset            ;执行音乐重置' i9 y0 R+ j6 e; \" P) W
  1844. JMP Sound_Reset_Proc_Init_Sound( U( \; u* J2 T7 o$ J
  1845. 1 y7 M3 c( {1 h3 g
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    7 t7 G, \! a) y$ O2 M
  1847. 4 G) E% i; U7 {
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
    # {  V( w. u' R- Y/ i
  1849. LDA #$00
    # c, q" S5 z3 u+ W0 I
  1850. STA PPU_CTRL
    ; l4 G; p0 m2 y3 d# B
  1851. % z9 g' O- J" C! a
  1852. JSR Sound_Data_Clear
    . U7 z+ x/ h$ c8 j
  1853. + z4 c3 H  [4 n$ G5 A
  1854. Sound_Reset_Proc_Default_Wait: R. z& z/ [; Y( ^
  1855. LDA PPU_STATUS
    3 A& y' h) A6 |' U
  1856. BPL Sound_Reset_Proc_Default_Wait
    5 o, F2 i" A9 Q$ p/ o3 a7 t1 E

  1857. & E9 N- C+ Q1 d
  1858. LDA #$004 U7 j+ }, w) T' K: U: W
  1859. STA PPU_ADDRESS- m' z% Y' N) L4 g1 e; T7 I6 f0 n. o
  1860. STA PPU_ADDRESS
    3 g0 _( t4 R' c: K/ N, y- |
  1861. STA PPU_SCROLL
      l7 X) B; @2 H& H5 N7 z
  1862. STA PPU_SCROLL+ O6 d1 T6 e/ T/ t: F+ h6 p+ ~

  1863. % k, p1 O( C) a0 v# T/ h
  1864. ;恢复PPU控制
    1 J/ ?9 ~8 U# g6 r
  1865. LDA Screen_Ctrl
    ; @6 u% q% J- p3 C& B
  1866. STA PPU_CTRL( j( h/ E# Q' t9 n6 M5 S4 `

  1867. % Y* z* e5 p6 f; `$ X0 g( W
  1868. Sound_Reset_Proc_Init_Sound& K6 y: `4 s0 v; b; b# Z7 K/ T8 {, U
  1869. LDA <Music_Stop_State( _7 K% `4 o$ {" B
  1870. BNE Sound_Reset_Proc_End
    % n- m+ c3 F( a* Y8 I+ y7 x
  1871. LDX <Music_Item_Cur3 `% B( D1 j4 Q3 G6 e# p
  1872. LDA <Music_Cur,X
    ( c2 S5 Y# F' s" C8 u
  1873. JSR Sound_Init_Proc  y* r: h1 I) J- N. r) Y$ e8 y$ w* Q
  1874. Sound_Reset_Proc_End) v2 I% C5 v8 K# `5 ?0 D8 E
  1875. RTS
    3 q* x  m; V6 t! k# y3 W" H
  1876. 7 e+ O; A! p4 n6 J4 o# \: `# `
  1877. ;==================================================
    2 ?& z& `7 c- \7 g9 B, f
  1878. Clear_Item_Text;清除页项目5 r, P/ X# p- S2 r! z
  1879. LDX PPU_Cur5 C, p- |1 n! `! h& G5 c3 ?
  1880. LDA #PPU_MODE_CNT_CLEAR
    7 Q7 e0 T9 l, R0 F( G2 \
  1881. STA PPU_Addr,X
    # O( [9 o0 k% ?! X4 T( C
  1882. INX
    , G, U  @' t! M$ w

  1883. ' l1 q* v! Z& J! |9 i/ f, J
  1884. LDA <Page_Last$ Z, C& x) V' U; t: @
  1885. SEC
    5 N' q& k$ u) v- ~+ m; C* V. {0 A; ]
  1886. SBC <Page_Last_Index
    3 ^& l/ o, I( }% A: f
  1887. ASL A# m* S0 C9 I9 S1 T

  1888.   @% S9 r8 x- s
  1889. TAY
    : |! m) n& D* X
  1890. LDA Item_Pos_Data,Y! D% b3 G3 w# R: `7 e3 y
  1891. PHA
    ) h1 T# }0 n3 t) [' p
  1892. INY
    6 X& C  ^0 A/ |6 a
  1893. LDA Item_Pos_Data,Y
    9 Y$ z& w4 M, ]6 `+ `! l7 I1 o
  1894. STA PPU_Addr,X9 O4 ^6 u' ]  a6 w& v9 L. k
  1895. INX
    2 p2 f( M* U; H( Z9 i' e; N4 j
  1896. PLA
    " t- {# T4 h; w8 T9 ]! {5 t
  1897. STA PPU_Addr,X  U7 j7 v% x+ _& K
  1898. INX1 H# X$ P. D% `& a
  1899. 8 q2 g6 v! F0 O
  1900. LDA <Page_Last
    ' B; B, W2 x: D, ?$ h
  1901. ASL A
    . s; v- b2 m8 ?- f2 p: }$ X% D
  1902. TAY
    : v+ n2 U4 [% D8 B1 l+ \" c% `) I! i
  1903. LDA Music_Collection_Name,Y3 `9 W3 O' ]; @6 f, O6 T3 p2 R4 ?; b
  1904. STA <Data_L9 J. J1 L2 {# H6 Y  L4 l
  1905. INY
    ( F, A) {* Q1 S* p& g- p
  1906. LDA Music_Collection_Name,Y4 ]9 ?6 A0 x+ w) l7 `& y8 W, f
  1907. STA <Data_H4 }# C6 t5 f0 n% [' G  X

  1908. 6 w7 T1 B- C  E2 Y
  1909. LDY #$008 u! h- u/ Q: Q2 `- s/ S
  1910. LDA [Data_L],Y6 S7 K* h3 S) i+ k
  1911. STA PPU_Addr,X
    & r9 p# p0 ~/ s5 C! a1 K
  1912. INX
    4 T7 B$ m  B: P
  1913. Clear_Item_Text_End5 h. `9 J' y: ^3 H, @
  1914. STX PPU_Cur
    1 F9 x6 ?( C% E8 n7 R- _5 y5 X. S
  1915. RTS
    7 u8 E0 \& d1 K6 o. F" E3 `
  1916.   ^" c5 W9 w# h$ L$ Y" p$ x1 _$ d
  1917. ;==================================================% c+ E' Y' N" i; V! v! O2 J
  1918. Show_Item_Text;显示页项目9 ~5 K% z; A; S% i
  1919. LDX PPU_Cur
    % I! N! A. X: p7 q
  1920. LDA #PPU_MODE_CNT_LINE0 [" p$ h" P5 i
  1921. STA PPU_Addr,X5 L& ^4 k$ W6 Q8 A* x# @- ?
  1922. INX1 y: D. t7 Z; ^, ^2 Z& ?
  1923. LDA Page_Cur
    ) t6 l. R* e, [& X0 d0 @! c
  1924. SEC( B. F$ z- T9 {& B0 |
  1925. SBC <Page_Cur_Index
    7 G9 f6 f* _: T+ q( L
  1926. ASL A0 g* x" y: m! y* r: K
  1927. TAY/ q5 N& _9 n1 l- f7 g
  1928. LDA Item_Pos_Data,Y
    1 h# G2 O9 Z+ a, ]3 D7 {; I
  1929. PHA
    " e/ F  R8 [4 O8 {5 m& {4 M
  1930. INY
    3 N9 O7 P# q" ^3 F5 s+ `
  1931. LDA Item_Pos_Data,Y0 n$ I/ E& z3 X- t0 Y6 G1 C8 V
  1932. STA PPU_Addr,X* Z# X# j/ z0 C2 p* k
  1933. INX% O+ \. g' f+ h- v3 M
  1934. PLA
    ) \7 M3 ]9 Q3 O6 v+ U2 Q# M5 v" Q
  1935. STA PPU_Addr,X
    ) ?. y! S* ]+ L) T. v0 _, V
  1936. INX* e0 x4 R7 q! a6 M, w  @) n! H
  1937. 2 P4 y- R/ v6 r  s: _2 n: S  b
  1938. LDA Page_Cur
    6 v. D% A) R& o& X8 }
  1939. ASL A/ V/ U9 E3 U. b
  1940. TAY
    6 j. d8 _' Q7 I. o: n
  1941. LDA Music_Collection_Name,Y
    9 N2 `* N& m& X6 ^
  1942. STA <Data_L
    & \, c- {' ]: M- A0 O" W5 I
  1943. INY
    7 I# |% F" p# c
  1944. LDA Music_Collection_Name,Y! \% @9 d( z; ^; {- X6 p# o0 A( l$ V
  1945. STA <Data_H* ~/ J3 P+ @; J

  1946. - J9 W- z+ s+ F3 y+ s5 A$ |/ U
  1947. LDY #$00
    # H2 \1 d  B2 N+ v9 z+ g( ]- r
  1948. LDA [Data_L],Y
    5 ?8 R. b$ k; i4 \  J* K9 O
  1949. STA PPU_Addr,X' n* t9 ]/ @0 R3 T" ^3 [9 Y" Z
  1950. STA Data_Cnt3 C& @/ O9 s& E4 Y8 j7 t
  1951. INX
    . L5 |& Z+ f7 E* n" w  p8 ^
  1952. % [8 d7 Y# V; k: U- q
  1953. INY$ T9 q" h/ m) {5 ^5 W0 I' a
  1954. Show_Item_Text_Write
    " E% B+ z6 t1 V* ~' ~* k+ X( s
  1955. LDA [Data_L],Y
    / X! d, ?- p$ j* T3 n
  1956. STA PPU_Addr,X
    ; A8 [3 o9 ^: {% H
  1957. INY6 s9 G# O& [# l, H1 z$ g$ R: G) p
  1958. INX
    - n0 f  H: T. U( d
  1959. DEC Data_Cnt/ _5 z1 x) C! K% C% F4 e
  1960. BNE Show_Item_Text_Write
    6 a6 H9 |; x) c8 a3 Y% K% |
  1961. 2 `4 X9 ~& x2 t% |
  1962. Show_Item_Text_End
    # Z8 ~# f* Q% b% H4 U, Q
  1963. STX PPU_Cur# x+ t" Z1 J* k2 E
  1964. RTS+ ?5 s6 Q! I* l" s$ d8 P
  1965. 8 m! @5 V3 {+ O7 @4 A& g# ]
  1966. ;==================================================. ~9 n! E: `9 B5 E$ W0 t( P5 \6 K
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量
    ) p  a( C% i$ @! `0 E  C3 l
  1968. STA <Data_Buf# R1 h* k3 x& h, z. `
  1969. LDA #$00
    , U4 ]" e; X& V" e6 e
  1970. Get_Page_Index_Calc
    , l- y( t6 f# b: ?( Z  V9 n+ v
  1971. CLC
    + n; m$ f7 S3 x  n. M2 t' P
  1972. ADC #PAGE_SIZE) p$ X1 l3 \+ T* ~
  1973. CMP <Data_Buf
    ( ?: v1 K8 z: z2 F4 \7 N
  1974. BCC Get_Page_Index_Calc
    ! ^0 D7 M" P# P2 y. G
  1975. BEQ Get_Page_Index_Calc_End5 S' {+ E5 S; b
  1976. SEC
    4 f) L' b9 u% s: O
  1977. SBC #PAGE_SIZE* @/ @6 P2 S0 g- R" e. C6 [/ b
  1978. Get_Page_Index_Calc_End
    7 R& L& [6 O" _0 O+ J) t1 V$ }
  1979. STA <Data_Buf( n3 }+ s! b- S6 Y
  1980. Get_Page_Index_Cnt
    6 r! m  s9 m9 H7 j
  1981. LDA #PAGE_SIZE
    5 U8 p+ f  Q  d, f7 G: o
  1982. STA Data_Cnt; _5 s' c7 G* s3 o

  1983. / j8 x) {! u$ J: a' w+ D# _1 v
  1984. LDA <Data_Buf. G: C; O7 h: }) P0 `- o
  1985. CLC9 B# y' @7 u" G9 {# H/ U
  1986. ADC #PAGE_SIZE% x$ p" n' Z8 v3 A0 R" d6 a
  1987. CMP #ITEM_MAX_SIZE6 V: R9 A$ Z7 {; ^5 R% x  @
  1988. BCC Get_Page_Index_Cnt_End
    4 ?7 l! i9 D6 u( F' H

  1989. ' M3 i6 ]2 ~' i/ H/ D7 D1 e
  1990. LDA #ITEM_MAX_SIZE5 v! f6 }$ G; {: {) O) b8 d8 M
  1991. SEC/ |* L8 C1 u& g  }
  1992. SBC <Data_Buf
    % j' W( I& L6 w0 G0 V
  1993. STA <Data_Cnt
    ( O) v* I  x& O+ w- C. Q
  1994. * x' V. ]6 y4 k9 v8 l/ a5 a
  1995. Get_Page_Index_Cnt_End# T* s8 U( [5 d' h4 t
  1996. RTS4 c! G$ D2 w9 C3 C
  1997. + }  ]3 w1 _, N; }  r  G7 \( k
  1998. ;==================================================4 Y, i4 {3 R0 q8 f- N" r/ e& V0 m4 w( _
  1999. Get_Last_Page_Start_Index- [  i, t# M/ Z4 D  T
  2000. LDA <Music_Item_Last
    9 T# D( |  G5 F: [9 G
  2001. JSR Get_Page_Start_Index
    7 x0 w+ b) ?: p. {+ V" u9 s, y: P( S
  2002. LDA Data_Buf
    5 m$ r. U, x2 ~' n! C
  2003. STA Page_Last4 ?4 y& ?/ ]  ]* w/ C
  2004. STA Page_Last_Index9 b& `5 a" {2 u# }- l
  2005. LDA Data_Cnt6 e7 Q' t7 k7 w& P( X
  2006. STA Page_Last_Cnt
    8 y' U& E0 X$ Q1 m) l+ u2 h- Q
  2007. RTS( X' |. I- F4 w, Y; }/ ~( l: Z* t

  2008. - N: J' j- _: R# h  U
  2009. ;==================================================
    ; {9 P' ^5 q! K! J" |
  2010. Get_Cur_Page_Start_Index
    ) }' G( X' t" z( x; E: ]$ o: n# H
  2011. LDA <Music_Item_Cur
    2 B# D0 q5 P. ?5 A+ e7 w# j
  2012. JSR Get_Page_Start_Index% s0 |, L5 G6 n+ p/ @0 ?* x. u
  2013. LDA Data_Buf
    , Z) i7 y3 j* I/ O0 P' l/ r3 }
  2014. STA Page_Cur& W: A5 n1 Y+ j
  2015. STA Page_Cur_Index
    8 N& G# t: F. Y* n- T  i3 l9 X8 }
  2016. LDA Data_Cnt; `0 y+ U; _" k2 P' [# V. Z$ Y
  2017. STA Page_Cur_Cnt0 l# r# o& K% G6 _% `# M7 s8 s
  2018. RTS- d. v, s* M1 u! @) c$ N: t- B. ]
  2019. 1 {6 b2 l6 E- n& L: M3 f
  2020. ;==================================================! Y) k5 f. J& g( P' _" a
  2021. Show_Page_Text;显示页文本5 p* ~$ s1 k; ?' F
  2022. LDA <Text_Disable_Flag4 ~3 M: ~' _# V' E. M. L* U
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM
    3 D; M. R! y+ T$ n! ^4 ^3 Y  A* V
  2024. STA <Text_Disable_Flag
    3 R: g2 G* \' ~' w8 i6 K( a
  2025. ; ]9 \& @4 K; \8 x
  2026. JSR Get_Last_Page_Start_Index
    7 `1 @( z% d& Z7 [' ~! P" g7 @
  2027. JSR Get_Cur_Page_Start_Index+ Z9 x$ q+ M8 R

  2028. ( M  \3 t+ G) f
  2029. Show_Page_Text_Set
    # e0 m9 j; x( r- I, ?9 G
  2030. & \/ j6 W' D7 Y- u8 E; ?
  2031. Clear_Page_Last_Item;清理上一页7 f9 }; _: a, ^$ J% [3 c- ]
  2032. LDA Page_Last_Cnt0 K1 Y1 X$ J  H" \7 ^
  2033. BEQ Clear_Page_Last_Item_End
    ; K, s1 X7 N" l! n
  2034. JSR Clear_Item_Text* }) N! C7 C& @
  2035. INC Page_Last' n8 M3 I4 ]+ v/ K- \) l- C
  2036. DEC Page_Last_Cnt
    * O" F& @$ c5 {. C( ~7 F- U; x
  2037. Clear_Page_Last_Item_End" z: D, i6 ~, G4 [. }- v6 Q3 y: h

  2038. + r  W5 j( b9 y$ i+ I; U
  2039. Show_Page_Cur_Item;显示当前页
    ( s8 M, o* ]% P' H2 _6 {6 w
  2040. LDA Page_Cur_Cnt
    : w3 \0 m) J$ ~3 t7 l8 A, Q9 w# j
  2041. BEQ Show_Page_Cur_Item_End8 f$ j; u0 m7 _
  2042. JSR Show_Item_Text
    - _: m, y( X' R* s- e
  2043. INC Page_Cur  v. Y4 K5 {1 O1 G6 _
  2044. DEC Page_Cur_Cnt
    6 j! Z( \( q3 u2 N% B7 d
  2045. Show_Page_Cur_Item_End
    3 j6 X0 x; y/ q2 d

  2046. , D) ^# \, E1 m
  2047. INC <Time_Wait_Cnt  q0 m) C; W1 F, T7 V: [
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作: h0 w4 F+ t6 j
  2049. LDA <Time_Wait_Cnt8 k! T& w% T/ |/ q
  2050. BNE Show_Page_Text_Set_Wait. f3 e. p) @' ?
  2051. ( q7 ]2 h# C7 |* {2 @4 q% e
  2052. LDA Page_Last_Cnt2 T6 `% N+ w$ P/ h8 }* @' H6 a
  2053. ORA Page_Cur_Cnt' ~0 E% K3 l( \+ b$ B/ v( T, L
  2054. BNE Show_Page_Text_Set
    . C& c. J& y+ H- w
  2055. LDA <Text_Disable_Flag
    4 f9 ?+ X$ o0 j
  2056. AND #TEXT_DISABLE_ITEM ^ $FF, Y% i/ i, o( V! Y- B& h
  2057. STA <Text_Disable_Flag) [8 L! `! ]. m) y
  2058. RTS; q3 x) k0 G& N% @% }- ?/ N! y
  2059. : X/ A$ X' T  M
  2060. ;==================================================% o5 p  W% u! s  A
  2061. Last_Item;上一项
    ) l2 s$ S* w) B6 K& S6 T
  2062. JSR Clear_Last_Track_Name
    3 B* s# x6 N  J% w
  2063. JSR Disable_Text_Draw
    0 x( z  k- I8 G7 m! D& b% `

  2064. 9 {5 x; m9 x" R& E: Y: v5 [! o
  2065. LDA <Music_Item_Cur$ q, Y* R7 i; S  A2 Y$ n0 d
  2066. STA <Music_Item_Last
    1 B9 I, S' o  Q3 t

  2067. / V7 ~  z7 Q$ w# U" S- p' j
  2068. JSR Get_Last_Page_Start_Index
    4 T% J9 @2 j0 P+ [9 }6 w# g( ]

  2069.   z: ?, |+ m; C5 O3 S( Q3 r: z
  2070. LDA #$00' J; G% o2 j, K3 o- ~. @
  2071. STA Data_Buf7 }# ?: ^" J) M3 D) f

  2072. 8 K9 d. ?" T1 V( J) M! A% N" E# E$ q9 P! ]
  2073. LDA <Page_Last" k% s: N. T, B
  2074. CMP <Music_Item_Cur$ A& ^  M' U7 y" b1 ~( o' J
  2075. BNE Last_Item_Begin
    ! G, z% K( L) e; P% t
  2076. 3 a% c4 w# @5 p$ M& K' j
  2077. LDA #$019 A4 Z1 e& ~. ^8 U
  2078. STA Data_Buf( S$ {) w& F1 [) l, G
  2079. Last_Item_Begin
    ) K( Z! N6 L2 R$ d1 [  A
  2080. LDA <Music_Item_Cur
    5 U/ J, f# `' C% e
  2081. BNE Last_Item_Set% b- ~0 L7 W; g
  2082. LDA #ITEM_MAX_INDEX + 1' x8 b8 q. L9 o8 ~: h& ?
  2083. STA <Music_Item_Cur
    * M& G1 O4 k7 n5 F5 o- f; \. C$ G

  2084. 6 C( ^  i! m1 \6 f: w
  2085. Last_Item_Set
    1 ?+ W  g. U# ?3 ?9 s  Q9 V! z3 l
  2086. DEC <Music_Item_Cur
    6 R, O$ F" A" ^, I8 @. g
  2087. LDA <Music_Item_Cur
    " h" y0 U4 t' A
  2088. JSR Reset_Current_Music6 F+ g  Q5 q, \
  2089. 1 h6 G/ p  Y2 z* L1 K# G9 ~8 U, n
  2090. Last_Item_Play
    5 k* R* ]! f6 `. ]! m/ {
  2091. LDA Data_Buf9 G+ b' B9 J# P6 W
  2092. BEQ Last_Item_End1 O) i; b+ a2 ^& t
  2093. JSR Show_Page_Text
    4 k- z. d. j" a6 W. F
  2094. Last_Item_End! o" b  B9 p) M0 O, s2 t4 H
  2095. RTS, E2 o' j. Q$ @: Y3 ~
  2096. 9 C0 A( J+ i" Q& T9 |6 X7 ~
  2097. ;==================================================3 u9 w# n+ D' N5 T, F& T. {
  2098. Next_Item;下一项
    # @( y7 G$ _/ M) `  s( E0 q
  2099. JSR Clear_Last_Track_Name( h. b% i: N) G3 m0 i7 U+ V
  2100. JSR Disable_Text_Draw
    % l& k3 e, [- z& P% Z: {8 R( }" m

  2101. ! h/ a; L- a! S+ V, Y1 b
  2102. LDA <Music_Item_Cur" C# m$ Q7 p1 V: n, [
  2103. STA <Music_Item_Last
    9 H% t- g' e" b: G7 H2 n0 O( b! t9 ?% F
  2104. 0 A+ u9 l8 i8 L# R
  2105. JSR Get_Last_Page_Start_Index5 p/ P$ `: ^: t8 j* N5 ?8 B! d

  2106.   c3 a$ B8 L6 p( Q# c
  2107. LDA #$005 j/ W' @0 L) t: E4 F
  2108. STA Data_Buf8 L8 ]! p5 u! A( U

  2109. * Z. B: ?2 m) b& B/ o% g
  2110. LDA <Page_Last
    * H4 ^% [0 [+ N/ ?
  2111. CLC
    , `3 O- w1 ^& a* w, h  \
  2112. ADC <Page_Last_Cnt
    + G. i# Q; {4 [4 q$ T
  2113. SEC
    / A# G# Z9 P5 F% F% j* w% {
  2114. SBC #$01' ~2 z9 _. M+ H  z7 F% F1 \
  2115. CMP <Music_Item_Cur
    7 n$ C! K- O* c% N9 y8 A% P
  2116. BNE Next_Item_Begin
    3 z, K# F) X9 Z' W3 p* A

  2117. 8 W+ N3 L# C1 @9 f+ I
  2118. LDA #$01
    / l) Q2 `; x  t/ Y5 w6 j: V
  2119. STA Data_Buf  ~7 b6 q; x: X) P; h
  2120. Next_Item_Begin
    , k2 G& O- F+ V' f. g
  2121. LDA <Music_Item_Cur
    # G6 E- `1 P' o$ X2 h
  2122. CMP #ITEM_MAX_INDEX
    2 o4 e: Y. a- ?7 \
  2123. BCC Next_Item_Set
    % f; d# L* H9 |  o$ M  [' {1 t
  2124. LDA #$FF0 c+ E  H, Y4 Y5 n8 {: `& W0 A
  2125. STA <Music_Item_Cur
    / ?  d3 o% i+ h  E  K
  2126. Next_Item_Set
    ) f8 ]" }7 m( a$ l' l2 U( z
  2127. INC <Music_Item_Cur
    ) ?* x: N+ H, i7 b/ n0 ^3 Z% [  p' J
  2128. LDA <Music_Item_Cur' X: O, m0 ~' _+ r) ]$ l
  2129. LDA <Music_Item_Cur4 ~4 H! a& U+ p2 y
  2130. JSR Reset_Current_Music
    % t& \' H7 d2 z& e  B
  2131. Next_Item_Play
    2 v$ B) s0 e9 F- O* A: Z0 ^
  2132. LDA Data_Buf' I9 C- _$ Q4 b+ U" W: N2 M
  2133. BEQ Next_Item_End* P( B# L; [3 u( U% N; s
  2134. JSR Show_Page_Text
    ; j- `6 I' u" M' v
  2135. Next_Item_End: ^/ [; _, Z2 d; T8 f, h
  2136. RTS: v+ x2 I: K; A) u  n$ e
  2137. & k, A6 J" o0 i+ H) i
  2138. ;==================================================' @8 h! D) ^; P8 r" B+ p
  2139. Last_Page;上一页  l" t9 Y) _0 L& @* S( C
  2140. RTS3 q& C0 U, Z: F. y8 W
  2141. " T7 D+ b$ f" t/ B
  2142. ;==================================================
    % G, C9 b# |0 W% D" k. r5 `9 R
  2143. Next_Page;下一页
    ' ^, j+ ~; N. v5 H
  2144. LDA #PAGE_MAX_INDEX
      K. k; y: t6 P6 w+ E
  2145. CMP #$01) }) |! d+ J7 X6 O8 q) l
  2146. BEQ Next_Page_End! j. r. d( F2 V2 j) ]3 I

  2147. - R% e! d2 L' z+ u% ~& k  w/ Z
  2148. LDA <Music_Item_Cur6 u. t+ }: K- c1 y" W
  2149. STA <Music_Item_Last0 w2 R/ h# F; l( l2 ~7 ~' Q

  2150. ( X; E! a8 [0 A+ y  Y9 R
  2151. JSR Get_Last_Page_Start_Index
    % N# Q: |3 B. U/ l7 m5 V" O

  2152. ' a' y& ]6 p+ M" b
  2153. LDA <Page_Last_Index$ c/ K, _& v# z! S. l, Q
  2154. CMP #PAGE_MAX_INDEX% ~6 v% q. T! |' @+ o. Z9 l. q( j
  2155. BCS Next_Page_In_End_Page
    ( k. E3 u4 S1 }. |+ x# A# h9 j- B- X

  2156. ) y! t  M2 x5 {8 d) `6 F( o8 n
  2157. Next_Page_Not_End_Page;不是在最后一页
      _4 Z: V( T" D) ~
  2158. LDA <Music_Item_Cur" ?6 o& A9 W' f- t& r
  2159. CLC% E" \% a1 L. u' ?2 u$ u5 Q
  2160. ADC #PAGE_SIZE
    5 W2 c' ^" t/ w: h* _7 `' p
  2161. CMP #ITEM_MAX_SIZE
    3 N4 q  {; o  D4 m3 Q. B* i7 \
  2162. BCC Next_Page_Not_End_Page_Less4 E' X" J6 r; ]) |" U5 V
  2163. LDA <Music_Item_Cur$ E/ W) B2 T( |8 a8 \' A9 l
  2164. SEC& w% s" `& H* g/ h3 y: D0 }
  2165. SBC <Page_Last_Index4 r5 v) b  |- P7 Q3 k
  2166. CLC: Y8 A& R9 u4 m' y) Q
  2167. ADC #PAGE_MAX_INDEX
    2 S6 O/ i  r# _% w+ v$ k! s2 \
  2168. CMP #ITEM_MAX_SIZE7 M/ i3 B, f, P# h1 W% \
  2169. BCC Next_Page_Not_End_Page_Less- b! m1 W# u8 T+ h6 O
  2170. LDA #ITEM_MAX_INDEX* j8 ?8 q% q5 X
  2171. Next_Page_Not_End_Page_Less! z2 \7 y4 G4 |) l
  2172. STA <Music_Item_Cur6 c- z/ y4 |. E/ f5 e4 W  A( u
  2173. JMP Next_Page_Reset, k/ R' M- m5 d7 i# o

  2174. ( o4 m, o5 u. h. }1 a  K
  2175. Next_Page_In_End_Page;在最后一页& y6 p% B9 a' r! A& d+ K
  2176. LDA <Music_Item_Cur
    # u: B: w* d+ }& R( x
  2177. SEC* Q1 b. {2 b3 }) B: h" }
  2178. SBC <Page_Last_Index8 c' W3 _" m1 h$ _; O) Q2 q
  2179. STA <Music_Item_Cur. d1 s+ `1 b( C4 H- |! W0 A4 n- x
  2180. ( k6 i) m8 a" G1 X8 Q, I  r6 r
  2181. Next_Page_Reset
    * |4 O/ `: y7 G: {. C1 t
  2182. LDA <Music_Item_Cur
    . f; l9 o, x/ D& j8 A: J4 J
  2183. JSR Reset_Current_Music/ Y6 \* W( j5 l- q7 z! n
  2184. JSR Show_Page_Text/ j/ a- G6 k8 b! C1 F& r6 f; B
  2185. Next_Page_End
    , o  S1 m% U% L9 J3 \
  2186. RTS
    6 {5 \0 p! z* `# A9 D. u

  2187. 4 ?- F+ W& m: n/ a
  2188. ;==================================================, O4 J, P0 q9 u7 Q
  2189. Disable_Text_Draw;禁用音乐条刷新
      F' ]; U- |* e) l- D
  2190. LDA <Text_Disable_Flag) {" ~9 \' P0 Y- j+ }
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    * X+ ^9 [& V4 p6 q* `. D' {3 F
  2192. STA <Text_Disable_Flag
    - P7 u9 U0 F3 }1 X
  2193. RTS
    3 l% |  |" y' l$ d& P2 u1 V  A

  2194.   J, j3 g7 ^1 j2 s2 m% U1 C
  2195. ;==================================================
    * @* q5 O* O, [- A
  2196. Clear_Last_Track_Name;清除上次曲目名" }& g8 u. `0 v3 D; P9 K  j
  2197. LDX <Music_Item_Cur" F1 a; D  q) p: {* F# i
  2198. LDA <Music_Cur,X
    $ L2 L% B% A5 ]7 w. c: W0 W* F
  2199. .IF Track_Name_Pos
    . k% t- }- k9 r/ Q& k/ |
  2200. JSR Clear_Track_Info; G! H+ C8 B# q+ ~5 V) u
  2201. .ENDIF- V! h2 i3 }* [/ A1 P6 H
  2202. RTS% a0 M' c  l% I9 s' C# X
  2203. % ~9 e9 |7 d/ x; Q" b
  2204. ;==================================================
    ) k! y) \1 i, b) g* s; z
  2205. Reset_Current_Music;重设当前曲目1 N( C1 |  f: c& ?+ B0 I) [5 }
  2206. * `0 w6 s2 \# [6 p* n- m- o/ ]7 h- ]
  2207. ;写入当前总曲目
    $ O* J- _0 y5 l
  2208. JSR Set_Sound_Total* O& d3 Z5 J7 k' ]9 k8 P$ q
  2209. LDX <Music_Item_Cur0 d/ }) T: C' r4 m6 O: F1 S6 P

  2210. 3 C4 b' m: h8 K3 r( A. d( `
  2211. LDA #$00
    ' `* z8 G* M. \; N/ }8 s. [
  2212. STA <Music_Last
    & [: y0 k! b" \! `$ l; a8 E$ v% H

  2213. & l) l! u- |/ \# G! r' u
  2214. JSR Sound_Reset_Proc6 d0 a& U6 A' \. c
  2215. JSR Music_Show! F; @* e8 Y" g) D
  2216. RTS
    ! _9 P0 ^, T7 O% p! G

  2217. 0 n) ~8 n. I; d5 J. a7 {
  2218. ;==================================================; @  d* W* W. L, K
  2219. Music_Song_Stop;音乐停止
    ! U8 P# s5 {5 q2 r7 O3 N
  2220. LDA #$014 X2 c/ n) \1 a, i9 X
  2221. STA <Music_Stop_State
    ' @- m* _2 p1 k5 }) a
  2222. JSR Music_Bar_ReSet
    9 h( P+ u4 W- B% t- {  p
  2223. JSR Time_ReSet+ j' t7 v4 v+ s
  2224. JSR Sound_Data_Clear$ F" [' U9 T7 U  x$ Q& G
  2225. JSR Music_State_Show- v7 y+ H5 G9 ~& P6 ]- {
  2226. RTS/ o' I. i7 R& M0 d5 j
  2227. 8 |% N8 Q/ o; e: c/ g
  2228. ;==================================================& O8 ]5 d: m) T3 o) x% D
  2229. Music_Song_Play;音乐播放
    ( A: o! u8 l5 m8 X% D
  2230. LDA #$007 P; y. ~, v& ?& s
  2231. STA <Music_Stop_State
    , \" D: ^4 h, a# Z8 P% J9 X
  2232. LDX <Music_Item_Cur
    ' ^5 r1 Y7 T! t7 w+ [% L/ h: E3 V
  2233. LDA <Music_Cur,X* ~5 f7 N8 m) ]4 N9 _8 ~: Y5 }! O
  2234. JSR Sound_Init_Proc: i* h' b9 }( |6 b  q" A7 ^$ H
  2235. RTS# S3 o+ G, `0 I- [1 U
  2236. * V9 z$ |, A4 K) K7 L9 `8 q
  2237. ;==================================================
    9 l4 g" {1 Z4 |' t9 m  [/ l
  2238. Music_Song_Last_10;上10曲
    , F3 Q) ~+ a7 M& P' r. F
  2239. JSR Clear_Last_Track_Name5 w& R2 L5 J0 y5 q# w' b4 E
  2240. JSR Disable_Text_Draw" w. D) s3 N7 l& [# q2 X0 N6 t
  2241. LDX <Music_Item_Cur
    ; d. a2 F8 w2 J% S* V
  2242. JSR Set_Sound_Total5 `6 i2 y7 }; l; z2 {
  2243. LDA <Music_Cur,X
    ! n; ]5 T& A! L# j% s
  2244. SEC6 N7 d( p) t* G- F' p  f  S
  2245. SBC #10
    4 \+ O& V/ z. w- y$ O' t5 L( y
  2246. BCS Music_Song_Last_10_Set
    : m% C. ~: B; a& _6 D3 ~. x
  2247. LDA #$00" e! i: `) K- G, `
  2248. Music_Song_Last_10_Set
    ' a9 f# q# d& c1 [: J+ G
  2249. STA <Music_Cur,X  j, x. J  o2 J4 i4 t" ?
  2250. JSR Sound_Reset_Proc, F3 A/ {; U; c/ n& S
  2251. JSR Music_Show
    $ {1 o& e# `# j0 x2 V# q
  2252. Music_Song_Last_10_End+ P& w4 @% [$ m$ {  y, \) O
  2253. RTS
    + s' P% W2 d+ S( Z. X

  2254.   P6 ~7 M- n' w; Y; X
  2255. ;==================================================" w  h# i1 A7 }6 P3 }
  2256. Music_Song_Next_10;下10曲7 O0 w+ ~& s# b: L% i( q
  2257. JSR Clear_Last_Track_Name6 V* ~# u# x3 V# s' O6 ^
  2258. JSR Disable_Text_Draw
    1 E0 Y0 ~2 q% |/ V
  2259. LDX <Music_Item_Cur1 _: ^6 Q, p0 m- ]
  2260. JSR Set_Sound_Total
    + g4 h" `" t7 ?1 c; ~& H
  2261. LDA <Music_Cur,X4 p# y5 v! |# K4 `
  2262. CLC, F( D2 r! ^, S
  2263. ADC #10: b/ e' m' h5 R4 E0 k2 h
  2264. CMP Music_Total- _8 ?7 l) L2 d* u; z5 `8 E
  2265. BCC Music_Song_Next_10_Set
    8 c/ `8 l& H" p7 i9 ?; J& S0 q' b
  2266. LDA Music_Total
    ' Z' ]3 `+ k/ O  u$ b; k
  2267. Music_Song_Next_10_Set1 C0 x# ~0 k' ]# L& \' Y
  2268. STA <Music_Cur,X4 ]- L( _: e$ G1 v  w5 W+ C: F
  2269. JSR Sound_Reset_Proc0 \+ M2 g  E9 d* k: v) U: `0 t' F
  2270. JSR Music_Show) r. r6 O; O- K7 J
  2271. Music_Song_Next_10_End
    : w; S0 d8 j2 V% t
  2272. RTS+ h* E6 m/ P, [- a# }: ]+ Y
  2273. 2 i& i/ D0 F- k; M; {
  2274. ;==================================================# e' `; o! d9 f* {. h1 t" F0 ~( K7 _
  2275. Music_Song_Last;上一曲% k* g. y7 ^: F2 Y
  2276. JSR Clear_Last_Track_Name/ Z9 z& L1 D* F
  2277. JSR Disable_Text_Draw
    * o/ v& Y2 S: i4 K  E) s
  2278. LDX <Music_Item_Cur
    % I/ w- C$ S( O
  2279. JSR Set_Sound_Total. `5 x3 d  g! i8 |1 t( I
  2280. LDA <Music_Cur,X
    % n. p3 `* l3 G6 X2 w1 j( P
  2281. BEQ Music_Song_Last_Set
    4 g" |8 i/ l) Q9 [+ w, B
  2282. DEC <Music_Cur,X  V! m, v6 V: f# `" H. t: P
  2283. Music_Song_Last_Set$ N; G! x% u) I/ w6 e
  2284. JSR Sound_Reset_Proc
      P( H! n6 Z' U# S# U" A
  2285. JSR Music_Show
    # c3 L$ l) y6 c6 L+ T$ }
  2286. Music_Song_Last_End& p/ h0 G# R1 u4 s0 @
  2287. RTS
    $ c: {) e2 Q! W

  2288. % m( M3 X8 e) }- p* Z
  2289. ;==================================================
    4 ?1 t3 \' V3 ^. \
  2290. Music_Song_Next;下一曲
    ! Z* O* P# V* f1 m5 ~! P
  2291. JSR Clear_Last_Track_Name# }, \: w, W. f& y$ U0 w
  2292. JSR Disable_Text_Draw
    / B, z' k4 p! N8 y( h
  2293. LDX <Music_Item_Cur7 _. ?/ ^( Y5 H# w& `1 Q
  2294. JSR Set_Sound_Total
    6 w/ h; [+ b' W, l' C
  2295. LDA <Music_Cur,X( @8 F3 c4 E/ f* Z
  2296. CMP Music_Total
    2 \+ p6 O' w- F) Q$ X
  2297. BCS Music_Song_Next_Set3 ^3 f0 h3 b9 m6 d
  2298. INC <Music_Cur,X% @: M$ L. S8 J" q
  2299. Music_Song_Next_Set1 s( W" E. }% U& K" E
  2300. JSR Sound_Reset_Proc0 `! |$ D5 t& Q, L3 ]4 s
  2301. JSR Music_Show
    : M( m& L$ W$ X  O# G/ p
  2302. Music_Song_Next_End% Y: R* ^3 S3 Z4 F# F+ n5 A! l$ t
  2303. RTS
    5 d1 q* x; x" N# {

  2304. $ q7 @7 ~5 ~7 ]$ _4 u
  2305. ;==================================================! A6 j. ~( D0 [3 X& K9 G3 `
  2306. Change_Select_Item;改变当前选择项) p$ s+ U- _- {. J7 P
  2307. ;--------------------------------------------------$ o% g% }7 P- H; a0 z
  2308. Change_Select_Stop_Play_Item;停止/播放! e8 l5 X- F0 h. O6 D1 v
  2309. LDA <Key_Once( G1 b4 M9 p. |! W8 K
  2310. CMP #$10
    4 Y  Y: N# `9 |% F+ u4 b
  2311. BNE Change_Select_Last_Item
    7 Z8 J. H$ r: f2 G" D& f! q2 J
  2312. LDA <Music_Stop_State
      N4 k# B; b# L8 m5 V! z
  2313. BNE Change_Select_Play; O5 O0 X* U5 k+ z( ~
  2314. JSR Music_Song_Stop
    * F6 H1 l% F0 ~# T: k
  2315. LDA <Music_Stop_State
    6 @7 |# G) C0 b: W  Q# ~. E; j
  2316. RTS
    + b# B5 r0 `5 M  Y
  2317. * n. E, H3 @0 A- N
  2318. Change_Select_Play
    # ^# a1 J) z5 @
  2319. JSR Music_Song_Play
    " L4 w4 u4 d( B; w( ^
  2320. RTS8 {4 |5 o+ P4 t- q& r% i

  2321. ' p( K0 s+ _% M7 S* |6 M9 I0 E! q3 O
  2322. ;--------------------------------------------------
    ; M% a, R: }. W8 C, M
  2323. Change_Select_Last_Item;上一个专辑
    5 r; b. n. C# q0 O$ A; r
  2324. LDA <Text_Disable_Flag( ]4 e% n0 l* s& n$ N
  2325. AND #TEXT_DISABLE_ITEM- ?1 u. T$ F  T$ b- v) W
  2326. BNE Change_Select_Item_End; R5 s2 A3 w+ m3 X/ Z
  2327. LDA <Key_Once
    ' J. R" I) D7 E1 H, _: P7 M/ T
  2328. CMP #$08* r% D: _! S4 @8 u% B/ j# x  K; O
  2329. BNE Change_Select_Next_Item
    1 d/ _  i$ j' ?& ^6 s6 h
  2330. JSR Last_Item
    . b: T' J  h% h& E2 x" f1 m0 P
  2331. ;--------------------------------------------------
    5 u. c- N6 u' U5 `* h
  2332. Change_Select_Next_Item;下一个专辑, s; I8 C) f1 G: B+ D$ A8 E, ~, `
  2333. LDA <Key_Once  T  x; T4 y  a4 w! r" A
  2334. CMP #$04
    - u6 d( v0 \9 H, b7 w7 R+ x% X
  2335. BNE Change_Select_Last_104 ~) ~& `( V0 o/ j  F. \0 h
  2336. JSR Next_Item7 D4 }) k$ R. u7 d$ F$ I5 d0 L/ B. H
  2337. LDA <Music_Item_Cur7 g' j& y7 _( ]! J4 ^. C5 @5 M! E
  2338. JSR Get_Page_Start_Index% m, e% f7 n2 ?" G
  2339. ;--------------------------------------------------7 x& w" p) d5 `3 s3 ?
  2340. Change_Select_Last_10;前10曲
    # Q) P7 L& v  i9 ^( t" X0 ]# n
  2341. LDA <Key_Once
    5 e6 f1 n; X5 g5 j0 @
  2342. CMP #$40
    4 c; X* L3 T8 }0 X
  2343. BNE Change_Select_Next_10
    1 `+ s' d+ I: E# `
  2344. JSR Music_Song_Last_10: Q5 @1 J1 i0 ?2 `8 I  p  @
  2345. ;--------------------------------------------------, }# Y3 q/ U2 n9 E8 K# W$ p
  2346. Change_Select_Next_10;后10曲
    ' v0 P% m8 ]' r) N5 B5 Y
  2347. LDA <Key_Once7 {: p5 m/ |& I1 j" `
  2348. CMP #$80
    7 ~  ~* r2 c' o% X9 M5 f
  2349. BNE Change_Select_Last$ ]6 M2 F7 z7 A) G% j
  2350. JSR Music_Song_Next_10
    . [7 M) E+ q0 o9 ?) |  P
  2351. ;--------------------------------------------------, X# u" g: j! ~
  2352. Change_Select_Last;上一曲
    " D* j# s8 H" D' r8 b
  2353. LDA <Key_Once4 m; T& P. p; j" I
  2354. CMP #$02  ]" L9 W4 b' y3 L& S. r% v. R( k
  2355. BNE Change_Select_Next
    ) Z/ R+ ?4 t/ @: \' ^6 N
  2356. JSR Music_Song_Last
    + E- I" {4 W  M' w
  2357. ;--------------------------------------------------- F! M2 c/ f; {1 I) I7 j4 p' t
  2358. Change_Select_Next;下一曲+ p4 B! ~7 h: L  {- N
  2359. LDA <Key_Once
    + B* p4 h4 w+ M" T
  2360. CMP #$01
    ) E! {( E( K. o7 u# ]
  2361. BNE Change_Page_Next
    ! l4 s' F/ H5 W" z) ]
  2362. JSR Music_Song_Next
    ; j+ [; P# u4 w9 X4 ]- V* u/ F& W# m
  2363. ;--------------------------------------------------
    ! C3 I5 {! [' M2 m0 x/ |
  2364. Change_Page_Next;下一页
    4 h( G, G7 c0 M
  2365. LDA <Key_Once
    % {8 |/ \0 b! ?; U8 f$ s" G  `1 i3 {- g0 `
  2366. CMP #$20
    ! H3 p9 \: r. x3 |; }' t/ J
  2367. BNE Change_Select_Item_End
    5 K% z. i  ~* [! b! \' y2 `" z
  2368. JSR Next_Page5 O8 j& _5 D) o4 p
  2369. ;--------------------------------------------------
    9 ]$ j8 B2 {/ [& q
  2370. Change_Select_Item_End
    ( Q0 ?. n' i  W* ]6 u
  2371. RTS
    & c% k. ^$ j, V  w  g+ O5 l1 R# s
  2372. % a: i; {3 P( j) ~/ W! M" b7 a, `
  2373. ;==================================================
    $ y( ~5 p: w9 q
  2374. Show_Arrow;显示箭头光标
    6 E: {1 c- j1 q; A8 |
  2375. LDA <Music_Item_Cur8 e3 N" d) t% g: g" \- }
  2376. JSR Get_Page_Start_Index# E+ t( z/ I4 f8 Z8 S
  2377. LDA #$005 Y7 L+ O1 j' F/ f+ y" w% g
  2378. STA PPU_OAM_ADDR
    6 }/ B/ n: ?, G3 R
  2379. LDA <Music_Item_Cur- e! B, _' Z" B, j! o$ K5 A
  2380. SEC9 i5 d: l2 h: \7 {
  2381. SBC <Data_Buf7 s! E9 V% g8 K3 _# B" o. \( [6 N
  2382. ASL A
    : b5 \. p. E, z1 f. y. x+ a
  2383. ASL A
    % Q% T" i; b+ ]$ E
  2384. ASL A- F# J" f8 @, a/ [7 g6 @
  2385. ASL A
    # }0 h- n" [% O" w3 ?
  2386. CLC% Y0 ~) D2 M  \) s. x  |
  2387. ADC #ARROW_Y_OFFSET+ U* G0 F1 |0 N1 Z3 S9 w7 A
  2388. STA OAM_TEMP_ADDR + $007 ], a% J& |: M* _7 Q& M& {% c
  2389. ;STA PPU_OAM_DATA/ i1 Y( |4 T7 p  G; r" G- a8 h) O  l
  2390. LDA #$1F
    ; t# |0 r9 M/ V1 g
  2391. STA OAM_TEMP_ADDR + $019 X" P6 Q$ D/ A0 z
  2392. ;STA PPU_OAM_DATA
    $ p4 T, [/ _2 u  E0 F
  2393. LDA #$00/ P/ C8 O' F* z
  2394. STA OAM_TEMP_ADDR + $02" ?7 F8 M/ E. f2 V- I3 C$ V8 |
  2395. ;STA PPU_OAM_DATA, v' S- h+ \5 T2 f" e. w9 t
  2396. LDA #ARROW_X_OFFSET4 o9 [' Q6 L8 V7 O& q% y- y" w
  2397. STA OAM_TEMP_ADDR + $03) C% o1 H3 n3 J
  2398. ;STA PPU_OAM_DATA; \3 V) H, f- a
  2399. RTS5 r  q' i6 c% l

  2400. 8 E! j2 r. u" E7 E2 `2 N0 [) G
  2401. ;--------------------------------------------------
    3 H# |- j7 f! s& a- N+ m
  2402. ;命名表数据
    7 W9 x& Z2 D$ M
  2403. Palette_Attributes
    ( i) Q" R) T9 H0 O/ G
  2404. .IF SOUND_BAR_SHOW_ENABLE
    % Y6 p$ [: x6 n( S. S
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    2 D+ [) m; L7 L! @  X
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    5 h' q; }1 j9 Q  h4 [5 Z4 z* ~
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75) N$ b. k  T! Y0 u
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    # X- Q! ]# j& O5 t# o
  2409. .ELSE7 b4 P/ x/ s6 e% T4 {7 |! P. c
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55  E2 ^6 N% ]) F; e' P  O
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ) s" Q1 R6 S; g: r3 \) n% n. `- V
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75
    ; [# N; k) C" ^5 P4 W3 Q' U
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    . ^9 x+ ~7 x; D4 y2 l+ P
  2414. .ENDIF+ z9 O6 e& r5 u( ^' d( ~# ~
  2415. ! ~; r6 Q- _% h% v4 t8 ~, ~( f* i
  2416. ;--------------------------------------------------
    8 U# a# C% j+ C
  2417. ;调色板数据
    / h5 N$ K; t2 }! ]' c: w
  2418. Palette_Data
    & E8 H6 Y+ |" e- @& M3 w: B
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    9 }: R, N4 Z% ?  y/ M8 ^) C
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
      M' m9 {6 B( g. W/ R

  2421. , H, B3 k! }) ^
  2422. ;--------------------------------------------------: \. z4 P6 L: G
  2423. Static_Text_Data& p3 l' C( ^+ `" b
  2424. .WORD Static_Text_Caption_Data
    $ w& ^, Y% I* S8 m9 B2 O" y: N
  2425. .WORD Static_Text_Author_Data
    ; |* m9 E1 c! x% D5 Y: Q
  2426. .WORD Static_Text_Date_Data5 E+ T4 P. P. I( I3 q" U
  2427. Static_Text_Data_End6 m) k8 n0 V0 E* _5 E
  2428. 3 o7 v& p* b, ^  `; C6 k0 t3 w) B% ^
  2429. ;--------------------------------------------------' [9 z' o+ J! V$ b4 b5 g& J
  2430. Static_Text_Pos
    3 x$ d* m7 Y6 }/ C
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)
    , f3 p" J! G& q0 W8 ]9 u8 g9 P
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)' `8 j/ m0 P% F& _# ^' O
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos): b' g0 [* X6 F' E4 C
  2434. Static_Text_Pos_End
    7 x' e. C3 z% @- P  U! r
  2435. $ j' ^! l0 B$ O- l1 d/ D" _
  2436. ;--------------------------------------------------
    0 U- Q! D% q7 R; W! K. g  v
  2437. Music_State_Stop
    ) r8 o% e4 E! }: d' m9 T
  2438. .IF SOUND_BAR_SHOW_ENABLE
    ! `1 {" |# Q& d1 A5 n5 e
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    . N8 j: i2 z$ C) n( K' L
  2440. ELSE/ X+ M- S9 O! r5 R* E  ?
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    5 r( M* i! s3 e% O' K+ x
  2442. .ENDIF
    / U, _5 z: J. ]1 o5 z4 [3 Y2 f+ F* P
  2443. Music_State_Play
    8 Q3 m# f, g+ G9 I0 R
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00. ^, _$ a* ~# l* J3 [$ a

  2445. - v2 [0 |- l* {$ M
  2446. ;--------------------------------------------------' Q4 ?) b, V! @) D$ I2 U' W& N
  2447. Sound_Bar_Text_Data;声音类型文本
    $ h" @" I1 X' [: h
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"8 d- J4 n* p9 E) P6 ?
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-"
    " e; ~% j0 Q& ^0 ?0 n
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"$ Y9 y) I$ j! h3 J
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"
    7 _# R2 u6 i+ S* p# Q
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00: t% j3 [7 {  u9 T# v

  2453. # N  r: v5 ~5 Z  k
  2454. .IF Track_Name_Pos8 w7 X( L* ^* ~7 P

  2455. 0 f% N- l9 [8 |! F
  2456. ;--------------------------------------------------5 r* V0 h2 q- ]: ~
  2457. Track_Name_Addr_00;曲目名地址索引
    ! {5 _% `4 I% }6 K2 W; k
  2458. .WORD Trackr_00_01
      [# O2 H4 Z9 E
  2459. 0 A# ~) Q& s7 p6 J9 p
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
    % H" T) L& T9 p2 l0 \* P8 ^" S& Y
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"# T7 [) z) C$ `' B0 ^, _5 z

  2462. ) K0 P8 g5 O$ r$ N3 K  p9 D4 U4 H0 G; j
  2463. ;--------------------------------------------------
    0 f2 W+ r) b' F1 k/ S
  2464. Track_Name_Addr_01;曲目名地址索引
    ! T/ s: \/ w$ j9 X) v
  2465. .WORD Trackr_01_018 I$ K- }& E  e
  2466. 5 R+ t! }( M6 j7 O! O( ?# ]7 w
  2467. ;==================================================2 |. |0 i3 E" H8 f
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"/ ~9 l+ ]3 w2 Z5 u# b; s
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"6 k" ~, R8 c, C" j
  2470. ) S' \: }- V; O, q0 g/ l) b
  2471. ;==================================================3 ~. d9 A' e7 d  x! C& m
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引
    . I! n" s3 L0 k
  2473. .WORD Track_Name_Addr_00+ k1 X9 {; k( N7 o& \% z: P: {
  2474. .WORD Track_Name_Addr_01
    + c  Y& }0 a! S8 a2 a3 N2 a
  2475. .WORD Track_Name_Addr_018 ^: P& D% A) Y" k

  2476. 6 _8 S2 Z3 u4 C, U  g4 B' v
  2477. .ENDIF
    7 V) \  c# _6 }! E: L  y/ C

  2478. / n' D/ p$ @3 ?; m  X
  2479. ;--------------------------------------------------
    6 Y/ G, l4 d. n
  2480. Static_Text_Caption_Data;静态文本数据- W% ~7 k2 B. l9 a. x# S
  2481. .DB 16. ~0 ]% W2 a  K2 J) s9 k  S
  2482. .DB "FC MUSIC 12 IN 1", p5 O, G# T/ ?6 o  A2 x
  2483. Static_Text_Author_Data
    8 C( \, l7 k' x; u0 Z. r- K" m: @
  2484. .DB 25
    * d/ i% W+ k) c  F; P9 N
  2485. .DB "EXTRACTED BY FLAMECYCLONE"
    ' q, m! y7 |, A
  2486. Static_Text_Date_Data6 \7 F) M% Z3 i: h' b+ E
  2487. .DB 10
    7 n; K2 h+ g* c/ {4 d* i2 S
  2488. .DB "2023.07.23"! G0 i, `/ h: x
  2489. " W# z* {3 {2 }4 p! i, c; k
  2490. ;==================================================
    * o* a! A. I; r7 S! ?! S9 }
  2491. Music_Collection_Name               ;专辑名间接索引
    2 Y- f5 \: i) d0 x1 b( j
  2492. .DW Music_Collection_Name_00
    2 k8 m/ n  B2 l# e7 w6 f/ j3 G
  2493. .DW Music_Collection_Name_01' ~* ]( l* j) Y. Y2 o
  2494. .DW Music_Collection_Name_02+ }8 M, O9 r- [7 \% j
  2495. .DW Music_Collection_Name_03
    ) D. l* m. T2 _* y
  2496. .DW Music_Collection_Name_04
    4 w- ?2 q7 j6 ~8 K" b( m$ j
  2497. .DW Music_Collection_Name_05! U( B) Q! X$ t- I+ w1 G
  2498. .DW Music_Collection_Name_06
    7 W; B8 w1 H8 Z5 n/ W: S/ M
  2499. .DW Music_Collection_Name_07
    9 s7 T6 b* q6 y7 `
  2500. .DW Music_Collection_Name_08$ u  b+ R2 A  b' T
  2501. .DW Music_Collection_Name_09
    2 ^; l7 ~! O3 Y8 w% ?  v6 Q9 h, D
  2502. .DW Music_Collection_Name_10- k/ u" U! T) l
  2503. .DW Music_Collection_Name_11
    " `, B9 |( T% i( t& w) y
  2504. 8 n" L* c- }) {+ L6 J  m& l
  2505. ;==================================================
    6 z8 W6 P! x% K# T  S9 L
  2506. Music_Collection_Name_00            ;专辑名文本数据
    + ?: P4 e. i: h; |- c
  2507. .DB 11,"1.RAF WORLD"* z5 v: Z2 o, w
  2508. Music_Collection_Name_017 H1 j/ C) j7 w2 p' p
  2509. .DB 15,"2.FINAL MISSION"
    4 w+ y% v% h( C: Z- A  n
  2510. Music_Collection_Name_02
    5 F5 W: B6 K; ^' Z1 Z
  2511. .DB 06,"3.KAGE"
    ' A! C) u' `+ }. A6 n
  2512. Music_Collection_Name_038 Q- L0 A; @$ h1 u
  2513. .DB 16,"4.DOUBLE DRAGON"
      I/ ?3 d- U6 c6 k& Z/ |4 U  f
  2514. Music_Collection_Name_04
      u/ B* N8 y  a3 S
  2515. .DB 17,"5.DOUBLE DRAGON 2"" g4 ~. c4 z, D+ [
  2516. Music_Collection_Name_05
    8 v2 k4 Q# \6 e' X$ h: c
  2517. .DB 17,"6.DOUBLE DRAGON 3". j( d9 Q, ]/ p  Y3 O9 L
  2518. Music_Collection_Name_06( `$ s2 j- z7 |. Y
  2519. .DB 09,"7.ROCKMAN"& Z+ z8 t. ]+ y# k* t, r
  2520. Music_Collection_Name_07
    " w- Y+ _3 u3 o
  2521. .DB 12,"8.ROCKMAN 2"
    4 Y4 R$ D# [+ ~1 a- z
  2522. Music_Collection_Name_08/ p7 R. U. H6 f& W$ X9 p
  2523. .DB 12,"9.ROCKMAN 3"
    0 K; U; l- K! B* B4 H, Z
  2524. Music_Collection_Name_097 M( j, S7 N% Y! j) L
  2525. .DB 12,"10.ROCKMAN 4"$ K3 S1 {( V: a, G- |4 _& S9 p* E
  2526. Music_Collection_Name_10
    - h$ a& W0 ?+ _' r, B2 @
  2527. .DB 12,"11.ROCKMAN 5"- J$ N1 k6 i/ e2 Y1 y
  2528. Music_Collection_Name_11* ^, i! [. n+ \- J
  2529. .DB 12,"12.ROCKMAN 6"" t( f. H- V8 X& x7 F9 @) p
  2530. " T+ a9 Y6 D% {/ t
  2531. ;==================================================( e/ [5 w' A( \
  2532. Track_Name_Addr_Flag                ;显示曲目名标记; i& i, ]7 v' Y! ~1 }
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0' v9 r/ c" l$ h# q' g- u$ f

  2534. ( L' S3 g# S  {5 B( |3 y. p$ ?
  2535. ;==================================================
    . K( H( h* w; n
  2536. Item_Pos_Data                         ;光标箭头位置
      q8 G. A! h5 U% t
  2537. .WORD ITEM_SHOW_POS. F% Y3 B1 G1 M5 ?
  2538. .WORD ITEM_SHOW_POS + $0040
    8 d$ l2 r+ K. F# g4 p
  2539. .WORD ITEM_SHOW_POS + $0080( x- {1 o' a$ R: T$ x. p8 w* q
  2540. .WORD ITEM_SHOW_POS + $00C0$ [, M( M. N7 T0 n  _( m+ r, x( Q
  2541. .WORD ITEM_SHOW_POS + $0100+ B% h5 \+ V2 J9 W0 h8 C7 Z
  2542. .WORD ITEM_SHOW_POS + $0140
    # h8 b2 N* Z2 k6 [
  2543. 4 V2 I4 m8 N0 e' x' v& H
  2544. ;==================================================& ?6 p3 z+ M* _  H
  2545. Sound_Init_Port                 ;音乐初始化入口地址- _: o$ f3 @1 b, l) M0 K
  2546. .DW $BFC8
    ) @, ^  i+ ?+ Z6 @# o( ~$ s
  2547. .DW $D7F0
    ' P: W- P! ?; ?6 M5 u+ e/ U
  2548. .DW $9FC0: N+ t6 T8 x2 d* i$ O! f$ z
  2549. .DW $BF70& @3 d7 b- I! l
  2550. .DW $8003
    7 `: h8 B% M6 U/ p1 U. t
  2551. .DW $BF300 ]4 O/ c! j7 \3 C0 u; N7 [
  2552. .DW $9003
    ) a2 X- N8 |0 N, ~
  2553. .DW $8003& k& {3 H) s. Q
  2554. .DW $8003
    8 R. F" K3 [4 ^. ?% g
  2555. .DW $8003( r, X7 D& G) {. L/ M4 a  e
  2556. .DW $80038 o! N) U3 e6 q, h/ c+ [( A& M# R: v" w
  2557. .DW $8003/ I. |- j2 P! `' U6 o, w3 c
  2558. & A: `. r3 B# E% {$ i
  2559. ;==================================================
    ! T2 v+ H. y& r  c
  2560. Sound_Play_Port                   ;音乐播放入口地址
    % ?! C  f8 _# s4 q2 g& {& Z
  2561. .DW $8000  f: ^; h: n* A' U9 a; q
  2562. .DW $80018 N* [1 {+ [0 m6 y
  2563. .DW $A0008 `! r* j: g+ m
  2564. .DW $80034 q# w' s. A  D! H- Q
  2565. .DW $8000
      d5 a& t, Y" p0 g: A
  2566. .DW $8003+ v- F0 Z7 d( ^" [
  2567. .DW $9000, B8 b' k% P5 b& C$ t8 N
  2568. .DW $8000
    1 P4 ^& [$ `3 G2 x; E, z
  2569. .DW $8000( f' z% M5 b$ w3 D  @
  2570. .DW $8000  q0 U1 j- H3 U# v- X, J
  2571. .DW $8000
    $ H0 p) l- H3 \
  2572. .DW $80006 D) t6 B" y4 k+ C8 s5 p

  2573. ! Q! R5 b; U& Z- J1 R
  2574. ;==================================================
    , p' }( D; Q/ \  C3 J
  2575. Sound_Reset_Port                  ;音乐重置入口地址7 r& Y! y, @+ H
  2576. .DW $0000
    ' A5 @) t: o* ~' a! e- w) a
  2577. .DW $0000# n* d8 n9 C- o* q1 f# s* B& L
  2578. .DW $0000$ _! o" S/ o# t; C/ |) N( D' R
  2579. .DW $00008 M  A  d6 ^9 W) `% L; w
  2580. .DW $00002 b, w9 a  a7 R
  2581. .DW $0000$ y1 X5 O+ u# c/ P; o" y" m( v' m
  2582. .DW $0000
      y/ b9 U6 D( `- ^" U
  2583. .DW $0000
    4 i9 T9 C: T6 ]* V2 s+ p- v
  2584. .DW $0000
    . S5 X6 m5 L& K0 S: c" L
  2585. .DW $0000" L' v) Q6 X) P* d
  2586. .DW $0000# [4 k1 k4 B9 k2 C2 p- P* ^5 |
  2587. .DW $0000
    # k1 c& f7 ~0 J- P; S# l

  2588. 1 B, [: ?8 |3 R4 _4 w* d! U1 P
  2589. ;==================================================, j' G7 @3 o) B, n
  2590. Sound_Total_Port                          ;曲目总数5 V& ]8 G5 h$ q
  2591. .DB 38
    # M* j% l- J4 u) {2 o3 w
  2592. .DB 33
    " \4 N9 T) h% ]! |
  2593. .DB 49/ q* R! c$ b* O' R+ ?
  2594. .DB 41& D2 z2 W+ J1 `6 y9 r3 s
  2595. .DB 83
    9 c; C- }& A- K- o, i6 s: q
  2596. .DB 70
      ^7 U( L. v, f
  2597. .DB 50
    & p: W, w0 q- e  n8 q; [
  2598. .DB 67: F4 ^% Z: ~" P5 p/ k  y+ D
  2599. .DB 57
    ! B6 J) _7 ]3 R7 i
  2600. .DB 714 _9 H- x, O# H3 j2 c+ K0 k4 D5 e4 Q
  2601. .DB 765 E* j( c2 K* H6 {9 T/ d& ]
  2602. .DB 102' i$ r$ V! w# i4 K( W+ E

  2603. / j1 g: r( }# A2 }4 ^
  2604. ;==================================================
    - a3 C6 w" M) f% @) R
  2605. Sound_Start_Port                      ;起始播放曲目4 J2 O4 p! M5 U# U+ n) B
  2606. .DB 006 n/ T. N3 D2 N* y& d5 i
  2607. .DB 00
    * q% `. a0 F3 P/ }
  2608. .DB 00( H# X) z6 e& l8 `' w. \
  2609. .DB 00+ R2 f2 d7 c8 q. W
  2610. .DB 00
    6 n+ G7 L0 \. w, l8 L6 |+ R
  2611. .DB 00
    : P5 x& M0 W2 L0 w" @
  2612. .DB 00
    8 ]# I; d$ f; I2 M% l
  2613. .DB 00$ f+ {( B7 @; [; A: A) N1 u
  2614. .DB 00+ f. \, z. @1 h" J
  2615. .DB 00% {) ^6 t1 T! r( {4 a$ g
  2616. .DB 002 j0 M, A1 ~& M3 i  z1 V; w
  2617. .DB 00
    ) |2 h$ f% ]6 D1 Q$ [4 i
  2618. : [, U. E( d; O* o: C
  2619. ;==================================================. a7 v1 U) ]+ P. G. W( E
  2620. Sound_Bank_8000                      ;专辑bank_8000
    % E4 b, w; ^, o9 K8 Z  S
  2621. .DB $104 _/ e5 y/ [4 B6 f
  2622. .DB $12
    $ r' S0 h# Y6 t( S, h
  2623. .DB $14
    3 W; }" Q8 ]8 w+ l
  2624. .DB $16
    / d( N+ Q; D2 Q$ u
  2625. .DB $18
    ! L) [! \- T: I3 J& @- q" g1 L) i
  2626. .DB $1A# _& o, W7 G/ l5 x6 g
  2627. ( a1 P$ z; G& _2 A& l
  2628. .DB $00
    : E5 a  ~' ]) l7 h5 {
  2629. .DB $02
    : n+ I$ T8 [' [+ }
  2630. .DB $0D! r/ v. g8 n$ @$ w& `
  2631. .DB $049 r3 G7 q- |: d5 `) T/ q/ z7 X1 `
  2632. .DB $07) ~3 s. F% F, q2 [
  2633. .DB $0A
    $ l$ v& m: n4 X7 }: N7 k. O

  2634. * _& s2 x/ J/ r1 J" k

  2635. ' _: i# b! l. ^- X5 @
  2636. ;==================================================, C! l$ f# ]: {8 J) ?
  2637. Sound_Bank_A000                      ;专辑bank_A0006 W- a' l1 ~0 p  ~- R
  2638. .DB $11) B2 g. a5 U( V5 @
  2639. .DB $13
    - h. P3 h7 |9 f+ u/ s9 }
  2640. .DB $15
    , _& a& k  a; D* w5 y9 @! F
  2641. .DB $171 b9 L3 J* M! [( s6 ]
  2642. .DB $19
    0 g+ w9 d7 O, M1 F
  2643. .DB $1B
    & R% N; L: Q' X7 B5 H% c
  2644. 1 h4 Z* s" K$ D* E& {
  2645. .DB $01" L/ I2 V4 d& s/ Q3 X+ s" i
  2646. .DB $03) u( w) ^) }; m
  2647. .DB $0E
    + w$ l& C! Y0 U5 z6 x" Y
  2648. .DB $05$ f7 ~2 ?2 \7 L
  2649. .DB $08
    + c; {! t! `7 c% i9 N; `+ w0 {( f
  2650. .DB $0B0 P3 r- W4 P1 _- S3 p& d
  2651. & M1 y: m3 k/ \1 i8 O
  2652. 0 S  o- {( C& c8 k( b! [5 @
  2653. ;==================================================/ ?1 E- X7 O8 N6 O" `
  2654. .BANK RESET_BANK & BANK_DATA_MASK
    0 Z- g& }3 r0 K; ~' x
  2655. .ORG RESET_ADDR% u, k- R1 p6 ]7 `$ T& Q- |

  2656. 1 T  q; C/ Z! b$ B, ?
  2657. ;==================================================; x3 T* l, [" J5 a  m# v( K4 f( c
  2658. Switch_Bank_8000;切换bank到8000-9FFF" H8 w9 H& a: ?: [
  2659. PHA
    3 Z; [5 h5 r# T+ u0 o& ^
  2660. LDA #$06
    - r+ q* W  H( j2 w$ D1 h
  2661. STA MMC3_BANK_CTRL
    0 P3 p3 V" s4 H9 l; u
  2662. PLA" d& o1 t+ a' C
  2663. STA MMC3_BANK_DATA1 |' e3 ^3 J, n, r/ g" P
  2664. RTS) l6 ]( q/ \+ A+ O8 r
  2665. + a6 w( ^  q' Q
  2666. ;==================================================
    " q/ X$ H/ q+ N+ `1 Y# {' j; n7 D
  2667. Switch_Bank_A000;切换bank到A000-BFFF
    ' o3 d& J6 }' Q0 b' S
  2668. PHA
    ; `4 J/ s0 C' O4 p& A
  2669. LDA #$079 G/ O( }( X/ F1 `
  2670. STA MMC3_BANK_CTRL
    * f7 m7 w& H% m7 U  s/ k
  2671. PLA
    6 `3 ?% T5 S, [$ [* u0 U: l5 n! j
  2672. STA MMC3_BANK_DATA
    6 s' U, K; n' Y( o- O
  2673. RTS
    ) v' P- _. P. D. [9 N$ w
  2674.   P6 y# }1 O9 o
  2675. ;==================================================1 o/ Q" c2 e  a/ l# H
  2676. Switch_Main_Bank;切到主程序bank
    & b) b- {4 ?+ l6 S' J# i
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
    . h6 L+ {4 r% N+ l
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    ! Q6 _) [, M# n! \1 V' {: p
  2679. RTS
    $ C% A1 [- `. V+ z/ H" p

  2680. " M( ?1 T" g( _! J6 _4 u
  2681. ;==================================================4 Q- k8 `! q$ Z1 D
  2682. Sound_Reset;音乐重设(如果有的话)' h: O% Y) N1 W' M
  2683. JSR Switch_Music_Bank  ;切换到音乐bank& m+ g; _0 k8 c3 l' {& I. `
  2684. JSR JSR_Addr_Op        ;执行音乐重置( U* [  R- Y- F% r
  2685. JSR Switch_Main_Bank   ;切回主程序- v7 i; i2 M8 Z# r/ A! c; C
  2686. RTS7 J0 ^4 D+ C; {  Q2 Q

  2687. , g7 C! x1 g) Z7 M, P$ b  ^
  2688. ;==================================================3 ]- s9 h1 p& L4 W' f) i
  2689. Switch_Music_Bank;切换音乐bank% `* N- V$ Q' Z
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号
    " T! L. [1 ~# K- e
  2691. LDA <Music_Bank_8000
    6 U6 g1 Y7 `3 ?; @& x: P7 M
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank5 B! M- Z: U7 F" D7 L) F
  2693. LDA <Music_Bank_A000
    0 `: A1 K9 X+ ?
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank2 V2 _+ R" c5 ]8 Z. w* b9 u
  2695. RTS
    $ n' a0 b6 y! b! @  B
  2696.   i! g9 f5 y4 Q# l4 B
  2697. ;==================================================* ~3 j% d6 u. Q  C
  2698. Sound_Init;音乐初始化
    8 C+ r1 I. b5 ]2 U7 j$ p+ Q( V
  2699. PHA
    0 D8 l$ |3 O8 M4 j4 t
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    # x3 B' S4 R; t
  2701. PLA
    - [% W2 W3 r% \$ W& G2 b% i* i% W0 d
  2702. JSR JSR_Addr_Op        ;执行音乐初始化* S8 e' r$ D* K3 F
  2703. JSR Switch_Main_Bank   ;切回主程序. d. T) Q5 \) c6 s: v: d# ]6 S
  2704. RTS4 G; \! t3 [% c$ o6 q

  2705. . |% i: ~( Z5 O8 k
  2706. ;==================================================' c/ A* t5 P& W8 U7 ]; P! @
  2707. Sound_Play;音乐播放
    " O, v5 b" P' l+ p
  2708. JSR Switch_Music_Bank  ;切换到音乐bank
    7 }0 O% s  X4 }* V8 ~( ?
  2709. JSR JSR_Addr_Op        ;执行音乐播放
    8 [1 ^9 i. x% _6 D  b9 j0 }
  2710. JSR Switch_Main_Bank   ;切回主程序
    $ h9 u9 o7 Y7 Z  M6 J+ T# y' v
  2711. RTS
    , n/ n- B# A2 V1 y

  2712. 8 q/ |* V8 g3 d. y- a$ H8 ?' K" s
  2713. ;==================================================
    . w! K4 @3 y* H( l  {
  2714. MainLoop;死循环
    ; ?( r" `5 B. C+ h* i; \) a
  2715. JMP MainLoop4 g" j" l0 y$ `  A& Q

  2716. . T2 o+ q, U4 |' D$ [) ~
  2717. IRQ_SUBPROCESS_JMP = 0
    5 s8 b- M2 k3 r) g, F

  2718. ) \" v8 d2 _3 W. }6 D
  2719. .IF IRQ_SUBPROCESS_JMP  B, M" t, q& R1 O4 F
  2720. ;==================================================; |# K& C- m8 K4 |
  2721. IRQ_Process_0;IRQ处理过程0
    % h4 b- q9 q! @! [6 f$ s, s
  2722. 7 j+ t; h0 A. x" |1 @" z
  2723. ;15条扫描线后触发IRQ! B2 |; T0 _$ A) f6 g$ t
  2724. LDA #15
    4 T1 {8 X' {& w+ H
  2725. STA MMC3_IRQ_LATCH/ K( u/ U6 P: M
  2726. 6 T. N0 A6 u5 j. p5 X( z/ _
  2727. ;设置屏幕滚动8 H/ m3 `' ^* V# C8 M$ u3 @
  2728. LDA <Scroll_H
    ! L1 F! g( M( F9 o
  2729. STA PPU_SCROLL
    4 T0 ]3 K7 s+ K
  2730. STA PPU_SCROLL
    / H: U% w# m: e, R0 m# a# M
  2731. * R3 y: |* p7 V" U5 F0 k' d
  2732. IRQ_Process_0_End- s; d3 H6 N% Y% P; \( k& ?
  2733. INC <IRQ_Process_Index$ `+ I/ S8 n8 W/ ]$ g' Y
  2734. JMP IrqProgramEnd
    : U, S4 \) x( f1 N% J& {; {: i9 w
  2735. 4 D6 S" b* a* ^% a/ R' P
  2736. ;==================================================& Q( `  s2 @( _% n9 Z  V. c
  2737. IRQ_Process_1;IRQ处理过程1
    7 [* u% C& J5 t! l
  2738. 5 W* {" o, U5 L! k' _/ V2 l4 r9 l  K
  2739. LDA #55
    5 j+ }' E& c- @+ h! K/ z
  2740. STA MMC3_IRQ_LATCH
    ' ]$ p+ y7 c, m7 n

  2741. / n4 @" n/ }' s7 Q# @; E7 E0 i) O
  2742. ;设置屏幕滚动
    5 D: ^# _9 p, p9 N
  2743. LDA #$00
    - c7 K$ v) {! @# c( B) p
  2744. STA PPU_SCROLL. d% B# c3 D" Z' _; _
  2745. STA PPU_SCROLL9 l5 Y2 h# B0 Q& K  m! w# Z' ~5 s4 }

  2746. ) B/ N4 M3 Y) F+ `. Z
  2747. INC <IRQ_Process_Index
    / A2 W1 l" H+ p2 R( q
  2748. JMP IrqProgramEnd
    2 C* g0 p9 N1 M& B) e  i; t. j

  2749. 7 N8 f1 G" O9 ~# u) I$ g
  2750. ;==================================================
    5 O$ x! [+ ^0 ]
  2751. IRQ_Process_2;IRQ处理过程2# N4 E# a/ k% x7 I5 J

  2752. . z$ Q: ?; h: k7 h: Q
  2753. LDA #15
    " O# ~: V8 _9 h: m
  2754. STA MMC3_IRQ_LATCH
    8 I! p6 |, Y; C, q
  2755. 1 x, l8 z% E+ O7 v6 K
  2756. ;设置屏幕滚动+ v: @" X! |. V; I
  2757. LDA #$00
    % j8 P, S' V7 c2 t+ W4 F5 p
  2758. SEC
    : }2 w' F. V/ U# f$ G! B
  2759. SBC <Scroll_H
    / O+ @. S' `$ S: W- U) R3 N) V: `
  2760. STA PPU_SCROLL
    9 |/ E  i: q- V
  2761. STA PPU_SCROLL0 r+ M8 E' r' E5 _& \
  2762. 1 P1 e, ^) X3 ~( r$ c# Q: O* j
  2763. INC <IRQ_Process_Index* I% y5 f- z5 R) c
  2764. JMP IrqProgramEnd
    7 O$ r9 U+ u3 m0 E9 r
  2765. * H& t5 j$ w7 M% V% A# h. j: k
  2766. ;==================================================
    5 K' q% ~6 a1 P$ B' |
  2767. IRQ_Process_3;IRQ处理过程3
    7 @% G7 P+ S# F# x& r

  2768. 7 S: A8 L9 j0 D. Q
  2769. ;设置屏幕滚动; `0 v& c8 D# d
  2770. LDA <Scroll_H& t- T& H7 J& D; P$ {4 g
  2771. STA PPU_SCROLL' a2 @* M6 u% j4 R2 u$ k/ Z7 V2 V8 H* Y
  2772. STA PPU_SCROLL
    : N2 _6 ?6 o7 H: h3 _5 ?  `. V
  2773. + V# b5 n8 m0 t, @8 o
  2774. ;禁用IRQ
    9 k' ~+ i, ]' t: X2 \' D7 s
  2775. STA MMC3_IRQ_DISABLE' e) D1 L* q# j2 D" `5 ]
  2776. JMP IrqProgramEnd0 d+ C, L) \% R" F% G
  2777. / `; M* D3 c! u4 k
  2778. IrqProcessAddr
    ! {: a, a" m' r( h- w/ E/ e
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_3) i; Z3 H$ J1 y" Q

  2780. $ ~% b+ j  W( [+ r
  2781. .ENDIF+ D6 G' [1 E) a6 g( U& p& ]( `

  2782.   ^1 b! ^* l9 Q( G( M9 p
  2783. ;==================================================
    ! [- v( y& f. y5 P- |4 [. j
  2784. ;IRQ滚动模式常量
    ! ~# }: ~" _8 G  ]; p
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
    # o+ `$ N8 G3 B* ^6 g, `
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动
    $ b/ a% a- Q' F) M" j0 D1 s
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动8 ^, |# J, _% F6 V6 m

  2788. 7 r1 E. l7 j5 l% ]+ R- n
  2789. ;IRQ扫描线数据" ~4 C' s, e9 |9 o2 j! Y
  2790. IRQ_Scanline_Data
    0 \- G5 ]9 R  K& d" Q9 n
  2791. .DB 8
    : Q- ^" s1 D# ~( C; E
  2792. .DB 54
    : v+ N, j  A  |9 u4 j: W
  2793. .DB 8& H3 n5 t$ O' c) d3 |
  2794. .DB 00 ;关闭IRQ7 ]: ^- J0 Z! z

  2795. 6 z. m6 m. p) T7 W* T: K1 f
  2796. ;IRQ滚动控制模式9 z; \: Y7 \# P( i/ n# c4 h9 |
  2797. IRQ_Scanline_Mode
    " A7 k9 _. \3 T
  2798. .DB IRQ_SCROLL_MODE_ZERO+ W" [: ]3 o( e6 n: i5 T
  2799. .DB IRQ_SCROLL_MODE_ZERO5 N, V2 A' W  |8 F4 J
  2800. .DB IRQ_SCROLL_MODE_RIGHT
    ! K  m7 L- L6 t6 N
  2801. .DB IRQ_SCROLL_MODE_LEFT
    ' X4 ]# C: \2 a* o
  2802. & h6 k+ D; G1 D+ Y4 Y% Q
  2803. ;==================================================
    % n3 r( D6 }( q
  2804. ;IRQ处理
    4 Q0 X5 j1 A0 \$ \. d  j1 X
  2805. IRQ_Process; q) R: |3 a8 T
  2806. LDX <IRQ_Process_Index" J/ R# q9 K+ V, x  {
  2807. LDA IRQ_Scanline_Data,X
    ' e! z9 p  z! o
  2808. BNE IRQ_Process_Latch
    7 w( Q/ p7 A! M1 E! q
  2809. IRQ_Process_Disable;禁用IRQ
    0 M" s; j5 ]) K' a; B& j
  2810. STA MMC3_IRQ_DISABLE
      ]* E# Z* `* E
  2811. STA IRQ_Process_Index" M6 F& k* v& F0 J- k: h+ B. r
  2812. BEQ IRQ_Process_Scroll
    7 {# U! c* ?  P
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线! T- C& R& Y+ E/ O( r; ]
  2814. STA MMC3_IRQ_LATCH% R& G9 e9 Q5 k1 E2 l7 K* B7 }
  2815. INC <IRQ_Process_Index
    ( d1 _; Q% A- \  m6 v" r& l
  2816. IRQ_Process_Scroll;IRQ滚动控制
    & w, p6 Z* |$ |
  2817. LDA IRQ_Scanline_Mode,X( }4 P: r) z/ c, e" u
  2818. CMP #IRQ_SCROLL_MODE_LEFT
    , L! v" {8 @2 i! p
  2819. BEQ IRQ_Process_Scroll_Left2 r& V/ T4 X, C2 q! `
  2820. CMP #IRQ_SCROLL_MODE_RIGHT6 l' b* E- F) r
  2821. BEQ IRQ_Process_Scroll_Right4 }5 I4 T5 o$ z, e: {9 i( O
  2822. IRQ_Process_Scroll_Zero;不滚动" q4 H2 N/ P" D( E/ e- u; S
  2823. LDA #$00
    % W" Z/ }4 t$ @4 A! a
  2824. STA PPU_SCROLL
    ! n2 E/ _& M) q3 l7 p- W$ d- x- E
  2825. STA PPU_SCROLL
    8 b; U, i' ?' x3 T2 u4 l
  2826. RTS2 F2 i4 O; x5 {, n* Q% o- L  X
  2827. IRQ_Process_Scroll_Left;向左滚动
    5 Y. E, S: a' Q/ ^1 b+ }! o$ Z- {
  2828. LDA <Scroll_H
      g9 f: k! H: o: ^4 A$ y- z
  2829. STA PPU_SCROLL
    ) K6 }$ q8 I+ y3 v
  2830. STA PPU_SCROLL# `! i; z% X* l! ~- _! P: E
  2831. RTS
    9 k* ?9 m5 H0 i& Z( I! Z
  2832. IRQ_Process_Scroll_Right;向右滚动
    - _- k) d. E( Y( V. H
  2833. LDA #$00
    ( e2 `. M& }, x5 l/ }* I
  2834. SEC
      U. Z4 e7 e6 c7 Y
  2835. SBC <Scroll_H
    0 J2 K. V6 m( v. w% T( Q
  2836. STA PPU_SCROLL
    0 `3 e9 E1 l' L9 p# N0 o1 V
  2837. STA PPU_SCROLL
    ) k( p% j8 g% t% O- A* S* \
  2838. RTS
    " `% f, b! S/ g0 \4 g' `

  2839. 5 z7 `( p( O( t! [' Y7 I
  2840. ;==================================================$ ~2 N; u; e- `  g3 b
  2841. NmiProgram;Nmi中断处理, x; S% e7 r" C
  2842. PHA
    * N6 m8 @  ?' ~5 m' L
  2843. TXA' h5 n% v( }/ a& v
  2844. PHA2 T/ @: ]" c2 e5 w
  2845. TYA3 K1 N) A/ C+ V; g1 q
  2846. PHA
    % d' P8 L$ t/ ~5 h$ s/ u& I! `$ }

  2847. / n' p5 p. b+ C
  2848. ;读取清除Vblank标志, 防止重复进入, \+ n9 J4 R1 n) H3 w
  2849. BIT PPU_STATUS
    4 s* a3 @4 t5 O8 K0 c+ g

  2850. : o! `; x) `) _# q& u2 H" |
  2851. ;切换主程序bank) W4 I& {3 A+ g6 O2 b9 t/ M  T! }
  2852. JSR Switch_Main_Bank1 B- G) \6 i' J9 Z9 e& P3 ^9 H: h1 R( e5 ^
  2853. 5 c  B: P* E4 w' w+ G/ m7 H7 b
  2854. ;Nmi处理
    ' `' M* ~9 Y, A; `9 M3 x9 Y. \
  2855. JSR NmiProcess, m) _2 J  t0 |

  2856. $ e- Z6 Y: C& J) p/ q
  2857. Nmi_Proc_End* ]5 y: j: r4 `, d' c
  2858. PLA: X  H+ X4 j( H8 K( R  {" _
  2859. TAY
    + P8 u* k' i+ P: _5 g7 o
  2860. PLA0 \3 O# z! H7 H. w
  2861. TAX
    - Y! v% f) x/ v
  2862. PLA& J# j) ^; A: `9 `6 ?4 g
  2863. RTI
    , q& H3 _7 _- B9 [8 ]

  2864. 2 J. ?% G' \! O( a& M# f
  2865. ;==================================================( x, f! I- h3 |* X$ y+ [9 k% T
  2866. ResetProgram;重置中断处理
    2 N' A. p: \" s) p
  2867. SEI& k5 V; a4 e4 Z3 ~2 u3 P
  2868. CLD
    : }9 D  J$ U4 s
  2869. LDA #$00
    6 y1 l' B/ L  c& ?3 W4 [% i% |# F
  2870. STA PPU_CTRL+ \! J# L2 I* w# V4 D
  2871. STA PPU_MASK
    . m9 u0 M! j# s

  2872. ) G$ o! H, I' w/ F5 C* M
  2873. ;切换主程序bank
    0 b$ L! |9 q# o' w# W4 @" l$ w
  2874. JSR Switch_Main_Bank
    7 |! r% I8 Y, Y$ ^8 N6 L

  2875. & u1 ~2 b4 @! R. E
  2876. ;程序处理开始8 s+ f3 q5 O! c1 |
  2877. JMP ProgramBegin( N" w# c! ^# {/ P% z

  2878. 7 @5 Q& @; [$ F0 I& e8 b
  2879. ;==================================================
    3 X3 b  @- f% u- {
  2880. IrqProgram;Irq中断处理
    + z4 x4 m8 f; b) M9 O
  2881. PHA2 D5 T7 V/ Y1 d4 E0 T
  2882. TXA9 V/ Y3 B7 n% l1 R6 V
  2883. PHA
    % o% v# B. `$ R( g$ v
  2884. TYA0 Z5 F' u' j, P# `
  2885. PHA
    $ K9 k: e2 f& G9 o

  2886. 1 o1 g6 d) ~3 a* O- ^& g/ x
  2887. ;关闭IRQ9 m- {( l; f. y' O
  2888. STA MMC3_IRQ_DISABLE& D9 e' Y7 j6 y$ w4 C- z+ k

  2889. ; e1 A: T! q# G' k. v
  2890. ;允许下个IRQ触发- Y) m* _  z/ g* T2 N( U5 |( }' o
  2891. STA MMC3_IRQ_ENABLE
    $ n+ w7 ~7 ?* j/ k9 \; r
  2892. - o. @. A' \# g6 {& {$ z5 m
  2893. .IF IRQ_SUBPROCESS_JMP
    ( K( P. D- z' C$ p# W5 J- Z

  2894. 5 J- K! O$ D: x7 T/ ^5 R
  2895. ;执行IRQ过程5 S( L. I6 |& r0 ?
  2896. LDA <Data_L
    % j8 F( p: ?0 S) F' W+ U. ^. t% C
  2897. PHA, ?: Z1 m$ o0 a8 }& q; e0 k
  2898. LDA <Data_H! U& D  C2 r6 X& j% Y' v
  2899. PHA2 e# t! B" O4 u9 z  @: q# D' P
  2900. LDA <IRQ_Process_Index' K9 S" |( L9 Y' y1 D/ y
  2901. ASL A
    " W# n; }& X! T: R
  2902. TAY- ?) L% k* j% S2 e$ r% ~* C
  2903. LDA IrqProcessAddr,Y0 a+ V( J8 @8 Q( ]6 `: j
  2904. STA <Data_L2 P9 y0 V8 n& Q2 u7 e% i
  2905. INY
    ; Z9 O0 G1 j% C7 n2 e
  2906. LDA IrqProcessAddr,Y6 a$ h& H/ m: P* ?' F4 N
  2907. STA <Data_H0 o# m& k) y6 Y+ ^
  2908. JMP [Data_L]+ }* _$ ^& b" M7 w& T

  2909. ! c1 }# x( n, x
  2910. .ELSE
    5 v1 ]& |& j3 E, A) Z

  2911. ( J- \- H8 o( O, ^6 u0 P
  2912. JSR IRQ_Process
    4 D- Z' t* h/ D9 ^( y) S

  2913. & ]1 ~7 s8 ~* }$ ~! r
  2914. .ENDIF: ~* T, H0 O3 Y

  2915. 7 g7 v, B! |0 `2 T4 F- a0 j  I2 j
  2916. IrqProgramEnd, o& E8 ?3 V* X+ K+ i% |+ ]3 W# q
  2917. .IF IRQ_SUBPROCESS_JMP
    # U) t- `9 \! T/ s
  2918. PLA- \2 p* g% d  k  V) D! x- g
  2919. STA <Data_H9 g& k4 g$ q$ M; P+ H
  2920. PLA- l+ u; u8 e# E7 w9 N2 r
  2921. STA <Data_L
    2 e# [" ]+ K+ l
  2922. .ENDIF
    6 U+ c/ V) H+ L% Y3 N. W1 e
  2923. PLA
    ) Q: K2 g- n4 P' e
  2924. TAY0 Q2 L9 P! C2 ]+ V- ~- y" S
  2925. PLA
    ! A* A6 Q- B. X/ ]2 z
  2926. TAX; ?0 I% W6 k, D7 e* y: f+ D
  2927. PLA' C5 ~7 ]/ ]  T7 k* k
  2928. RTI; C! E4 u; r/ L& J3 z: ^- c

  2929. 2 o$ u4 O+ }$ s2 w3 ^- t# h6 y
  2930. .ORG $FFFA9 M- }" ^" i8 T6 q' j
  2931. .WORD NmiProgram
    1 U/ D; E; }3 {; Z4 ?1 P
  2932. .WORD ResetProgram
    ) X; M' w, N# i' B) g
  2933. .WORD IrqProgram. {2 i" ]! V7 H: Z0 P: m2 f
  2934. 6 D1 V% c# c5 k; y. P8 }- G5 ?
  2935. .BANK RESET_BANK & BANK_DATA_MASK
      E$ T# l# H/ P* H
  2936. .IF SOUND_BAR_SHOW_ENABLE  F& ^7 Y% `. c2 X0 P; v
  2937. " K4 a2 U: Y6 |4 I
  2938. .ORG $FE00# W- q, H3 O" ~: Z) |& g0 T
  2939. PHA
    & q( v' ^; x/ i8 w7 H! C2 P
  2940. STY $07BA
    6 j0 T" E9 g; x9 p4 m" T
  2941. LDA #$8D
    9 n7 h8 B/ Y' g5 I- r1 z9 b5 O
  2942. STA $07BC
    8 Y. Z0 U; O$ _) B4 I3 \2 ~/ v
  2943. TYA
    9 c3 D6 g) D; G) J, d" h
  2944. CLC) H0 Y) V* A' o9 w
  2945. ADC #LOW(Sound_Bar)- O) t( M/ S* h! N: e9 ~
  2946. STA $07BD) X3 R3 i. a( p
  2947. LDA #HIGH(Sound_Bar)6 R. c$ ~: Q$ u- ~8 b
  2948. STA $07BE
    3 k$ @  G- W- Z$ [8 H5 H2 w  A: i
  2949. LDA #$60
    ) E* E9 b7 B9 Z' u
  2950. STA $07BF
    ' a7 s) G/ `2 ^! Y& k8 C3 Y6 G* F
  2951. PLA
    5 `8 O8 j7 q. K2 i# Y* s+ x& N
  2952. RTS
    , _& W$ }3 e- a8 E0 X7 z  F
  2953. ' ^, j: D2 C2 }
  2954. .ORG $FE20
    ! L& q! w- W+ s7 z; I
  2955. STA $07BA
    % s+ @. E8 u' r$ T; d0 j
  2956. CLC
    & l/ q0 Z! U3 u. Q
  2957. ADC #LOW(Sound_Bar); _3 l* S, r- L* [
  2958. STA $07BD
    0 g0 q6 Y8 E1 @0 G4 t  r
  2959. LDA #$8D# U  `, I! W; Z% ~- ]
  2960. STA $07BC
    " b9 A1 F# W  h# g5 _! Z1 Q
  2961. LDA #HIGH(Sound_Bar)1 a. m+ S4 B: `8 O2 F( t# _
  2962. STA $07BE
    0 h( ]. s) C$ Z! D0 x+ I
  2963. LDA #$60, X" G# w6 N- O3 G! Q
  2964. STA $07BF
    * @8 e2 C7 T9 e  D5 t+ R
  2965. RTS4 G  V2 V+ P' B7 j+ ^' d

  2966. ' e6 H' E. ^  p; D
  2967. .ORG $FE40
    $ V  ^, U  O% ^9 t+ d
  2968. PHA
    9 ?# r0 g( y6 W; u2 Q; Z$ F
  2969. STY $07F1' \( x: P; v  o0 r9 R2 C  I  T* k6 j
  2970. LDA #$8D
    9 `! t. f2 @9 I$ I
  2971. STA $07F3, P! O* B9 _9 A1 K; N" Z! Y
  2972. TYA
    9 }/ ^' Z9 ~. i, |
  2973. CLC
    7 h! B/ R$ f% ^- b' b% L
  2974. ADC #LOW(Sound_Bar)$ i3 h5 @# n) b: T
  2975. STA $07F4
    , h3 J9 ]# Q/ V. }0 ^
  2976. LDA #HIGH(Sound_Bar)
    # L% U3 g# _) h; d: Z- V
  2977. STA $07F59 H& ~: p4 X8 l$ E# E& D+ l5 _
  2978. LDA #$60) ^3 m5 Y/ ~8 H$ z3 z
  2979. STA $07F63 g' E6 a0 k: G' D% |- L; D+ u
  2980. PLA8 E% C$ Y. f/ M4 |' [; s
  2981. RTS
    ) U2 @3 s& f( e3 T* i

  2982. ( \) \4 j+ L: }9 l* I3 b. J8 ]8 P; P, g7 g
  2983. .ORG $FE607 r, e0 w0 F7 \  q: p! _0 `1 F) v
  2984. STA $07F1( I) g' M% I' |" B
  2985. CLC( D8 a" q/ l- u3 U  O- c
  2986. ADC #LOW(Sound_Bar)2 s3 _' ?7 R3 i/ T% ~& a4 x
  2987. STA $07F4
    + L  X) D- s/ w6 _* t8 q
  2988. LDA #$8D
    - d  q5 b2 B8 I1 ~  w" P% c
  2989. STA $07F3
    * ]8 q# X2 e; O( r6 O1 C
  2990. LDA #HIGH(Sound_Bar)& P% Y) h4 |; w. f: L$ m, U
  2991. STA $07F57 ~) T7 \8 C6 {' ?7 K* T3 f; o
  2992. LDA #$60
    0 E1 R' A9 @/ A3 E4 D
  2993. STA $07F6
    : y* D1 m/ z( A5 ]6 r4 Q
  2994. RTS
    9 `+ D- u+ r* Z4 ^7 J" m2 E! i

  2995. / p2 q  i* o9 |# T" `* O
  2996. .ORG $FF40
    4 e6 C# F7 X( R5 Y; \" J  s9 N
  2997. STA $4000! b. f( s2 a$ S( A
  2998. STA Sound_Bar + $00  l& s0 ~# Y4 Y4 F
  2999. RTS
    " ]! |$ E7 ?. \% z6 }, e
  3000. 3 e9 d* r4 U/ Z0 D: i! G  p9 \
  3001. .ORG $FF48- W- ^- ~3 [2 f- L* k% y9 D6 ]- `( e
  3002. STA $4004
    " o8 n# P, Y. y
  3003. STA Sound_Bar + $04
    1 D* F, c, A9 U5 e+ O1 L
  3004. RTS! t' @2 ~: {. h4 I2 @0 m
  3005. 0 N2 [5 l! v, {& y
  3006. .ORG $FF50: q+ `* Q7 a4 Z* |
  3007. STA $4008; A: ]/ S: O: x7 q9 y5 Y# I
  3008. STA Sound_Bar + $08
    # d& S. m1 f/ n% N# ]
  3009. RTS; m* d5 @+ U0 C5 R
  3010. . |; v6 A, |: ~) w7 J3 P
  3011. .ORG $FF58
    ) X* C4 M1 y* W/ s
  3012. STA $400C/ z8 `& L9 Z% W0 X7 D
  3013. STA Sound_Bar + $0C8 |5 b1 K4 H- A6 t' P( Q
  3014. RTS
    , Y0 j, t: [9 ^8 p. t

  3015. 6 X5 X% v! Z( x
  3016. .ORG $FF60) _) A* J9 R' v! I! t$ R
  3017. STX $40005 U$ ~& e6 O! U: F1 g
  3018. STX Sound_Bar + $00
    6 R, Q2 `# w4 j0 D0 b) D: B
  3019. RTS( C6 t! a# R' I' X0 G& T. g- T
  3020. & V0 c: R# N! U2 L1 k
  3021. .ORG $FF68
    . G# P" H+ h/ c7 w' R% G! L) r
  3022. STX $4004. z& G- }" A+ u5 q. `
  3023. STX Sound_Bar + $04
    / M! w( g! k- g! D$ K: n
  3024. RTS
    / Z8 n& ^- H: ~- E

  3025. . y' K$ M  @8 V
  3026. .ORG $FF704 ?- n& R+ m! u) L- `2 e
  3027. STX $4008, p7 r! p+ w) W: O# O
  3028. STX Sound_Bar + $08: R; a7 j, Q* L$ L* z
  3029. RTS! U% K( w6 L) m+ k. E9 u& B

  3030. # V! y$ T! R' i* Q
  3031. .ORG $FF78
    ' t2 Y! C( A! W) ~6 a9 T
  3032. STX $400C
    ' S, U2 h. z4 `/ _: `; @% _
  3033. STX Sound_Bar + $0C! Z, O' a/ e1 z  N# K/ O
  3034. RTS% t1 X7 a2 |" ]! y& W' ~
  3035. ! z! z  F. p* m: E# v% J) b" ^
  3036. .ORG $FF80
    6 c+ c0 ?2 I: F/ z3 [8 E7 V0 V( ?
  3037. STY $40005 |, c. u! w: t7 P/ ]9 W5 b- o( q
  3038. STY Sound_Bar + $00) j* f- V' D; V" Z* |# p6 }
  3039. RTS9 F& p" T$ Q& E; b

  3040. : i, J% S3 T( D( e2 K
  3041. .ORG $FF88
    ! |5 Y% u; [+ S* n. a& [
  3042. STY $4004
    3 n. z1 `. e  a; {3 j4 X2 O! r
  3043. STY Sound_Bar + $04
    1 V! |( w; {0 U- q* `6 |& Y
  3044. RTS" q3 [2 L4 d1 X( C( W. c
  3045. 4 H/ i1 _" W* ?7 r, C! ~; s
  3046. .ORG $FF90
    ; A: D/ U' U* N5 ]0 u! _
  3047. STY $40080 a: L/ w/ J2 V: o& |  P
  3048. STY Sound_Bar + $08
    ' E9 B0 A4 N* {& N
  3049. RTS
    & [2 ]3 K# x1 A- u+ l

  3050. ; y: S+ |( d8 S$ g
  3051. .ORG $FF98
    / A4 T/ w6 t  q9 `3 V7 i
  3052. STY $400C
    ) t9 X/ F7 k) M  R' }. e. r- T9 }
  3053. STY Sound_Bar + $0C
    ; f6 c0 M! M& z% O# r$ B8 J, j: d4 b
  3054. RTS& h1 j3 @( R8 l

  3055. & G9 Y* u6 C  y8 P! E& f/ R/ o9 o
  3056. .ORG $FFA0
    1 p- K: j- w6 d& z! c" d1 u
  3057. STA $4000,X# L5 n$ g: O8 {0 s! y
  3058. STA Sound_Bar + $00,X
    1 d' r4 F0 d4 o# L
  3059. RTS
    8 @% ]3 i& @/ |: ^  V+ O

  3060. " P" v, F2 W: q6 y& y  S; ^
  3061. .ORG $FFA8, `! c9 N( c; U/ j2 i+ h
  3062. STA $4000,Y- v8 l3 H6 f( n+ m
  3063. STA Sound_Bar + $00,Y9 [8 V) p( p8 i( A" k  D
  3064. RTS7 G+ @% t- T* ]: E6 u1 D' y
  3065.   a5 f2 a/ d# X
  3066. .ORG $FFB06 R, e) I- {& R% d4 U) f: @
  3067. STA $4004,X
    / B( s: _/ ?9 I1 m/ X# m
  3068. STA Sound_Bar + $04,X
    1 e; h. F) X% q: J. }, e3 O+ v
  3069. RTS2 u1 ~& a& q, S; s
  3070. ' S. x% i& ]+ T0 H
  3071. .ORG $FFB81 U3 _! _" `6 m( Q1 I
  3072. STA $4004,Y; j1 q4 ]: E: r# w
  3073. STA Sound_Bar + $04,Y
    2 H% v9 j6 N  M# P3 K" G: v" e+ p
  3074. RTS
    7 h3 K  l% _# @$ \2 x3 d6 z+ K
  3075. 9 c% w1 \& f- S/ H
  3076. .ORG $FFC0
    # K/ L6 }3 ?6 C; ~0 A# t
  3077. STA $4008,X
    4 O$ E" u$ `* ?- ~# m, c
  3078. STA Sound_Bar + $08,X- u# R5 g8 B9 h5 n, D( b# j: Y
  3079. RTS1 B: V# E; }8 [# q9 F0 T
  3080. 7 P) q; j/ @; E3 T
  3081. .ORG $FFC88 E+ m+ C$ V: X5 s& e7 ]1 G/ P
  3082. STA $4008,Y4 R' [6 o8 f! t% j7 ]- }. A
  3083. STA Sound_Bar + $08,Y7 ?% W5 N0 C: p
  3084. RTS
    0 S) _+ T0 x+ d- E% m, S7 [8 k5 Q

  3085. ; l& R: s$ p* v- v/ c& m
  3086. .ORG $FFD0/ f5 a$ r0 u2 M6 D6 B9 W
  3087. STA $400C,X% D: O) p0 P* }
  3088. STA Sound_Bar + $0C,X7 w2 ~" O. X' h2 t
  3089. RTS
    * T: N3 m0 l3 X2 p; T

  3090.   C5 ]9 v# n1 u0 w. i1 ^+ p
  3091. .ORG $FFD8
    % @% `* l. b* y' P# b
  3092. STA $400C,Y
    ! `0 v2 z" C: U: [8 g
  3093. STA Sound_Bar + $0C,Y
    # s" t7 ^8 ?4 M3 ~7 a
  3094. RTS* z, T7 t8 j% y8 s
  3095. & I& X/ o! I6 i4 c3 d+ q
  3096. .ENDIF
    4 Y; ^. D# S3 V& x# B& P5 ~
复制代码
. a; v7 H) i/ P  ]
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3263 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-16 03:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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