EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-23 20:06:50 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-23 22:29 编辑 ( I1 @2 A8 K  Q" w) h

" @' e% _+ w1 Q[FC][音乐12 IN 1]
# a! K* A( C! |. C5 ^时间: 2023.07.23
! f' q$ @& \- j" }作者: FlameCyclone# H7 i( s* l, O* [1 T

# g1 I" U* a4 t收录音乐内容:
; S6 f$ X7 q" K' Z! M1.Raf世界
: z7 \! F1 H' T* x$ p3 [$ A: l( I1 c2.最终任务
. `/ u1 P/ y* f8 z- O# X) l6 h  B3.赤影战士
1 v- r3 ?5 i, h6 Y8 A3 U4.双截龙# @; s5 V. z9 Y, H" W; H- x
5.双截龙2
: y+ c7 ]" A! U; h& l6.双截龙3
: @* [) ], Y# r: |" f/ C3 t7.洛克人
# M' X, M$ i3 m# b, t% z8.洛克人22 Y  g) \, d7 h/ e( G# [& {
9.洛克人3
; }0 T4 s1 _4 J! B3 H" J10.洛克人4
1 A) W6 G# w- r( K) r+ w0 v11.洛克人5
7 T0 q! n2 }! `2 h4 M12.洛克人6- d# Q  A( B0 K) e( v$ ?$ C! Y
. `# r+ _9 m) _$ ?% `0 ~# h
操作:  Z/ N( s# M: N$ \( X& L0 E/ a
上键:         上一个专辑
2 ^8 f5 i9 x' ^下键:         下一个专辑
1 U0 k8 q7 l) `  U8 ]左键:         上一曲0 b" W) \) d# O1 u( X) W" \" t5 q
右键:         下一曲
; t) Y6 ~1 d  }5 Z" R$ EB/A键:        前10曲/后10曲
, C3 K  V$ O8 F' _4 h# x, y4 {选择键:       下一页
% A) Z) h/ u1 a- b. h开始键:       停止/播放
  V8 j6 [( w1 `$ e* g
+ C  A; W3 {& N4 K7 M$ Khttp://flamecyclone.ysepan.com/
/ x  N- P* \! P# C: {% X1 X% l6 ^
% ~  h5 g: C# @* E/ @) |
2 y% g  U7 K  Q  Q2 C3 o& ~1 S/ Y
% x; J( t- _& D; ]) N
  1. ;[FC音乐][播放器模板]
    : j9 V$ A! m2 z; l' }7 O
  2. ;FlameCyclone 20230710- V! I+ B( W- h. M) T6 @$ Q
  3. % }: v# ~9 d' Z. H# e' J5 v4 q
  4. ;文件头
    ' k) B, M4 J6 @( x; E
  5. ;======================================================================
    0 n) L+ g* ^! J' u8 u
  6. .INESPRG 16                                             ;16KB PRG 数量
    ( W, G/ g7 `$ S$ o  m; q; x
  7. .INESCHR 1                                               ;8KB CHR 数量2 [9 T% {9 s- {8 {5 h
  8. .INESMAP 4                                                   ;mapper 4  q4 f9 m2 U# C0 R
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直7 d  g, p& x& M3 I4 T* d
  10. 4 X. ?' c& E* C4 ?
  11. ;==================================================
    9 }; X0 ^( `2 @9 a
  12. SOUND_BAR_SHOW_ENABLE       = 1
    4 U5 d% c3 F( p
  13. ;==================================================" N( N6 C5 h- p, }2 o
  14. BANK_DATA_MASK              = $1F
    1 G" {9 F1 q0 s3 k2 Z$ k
  15. CHR_RAM_ENABLE              = 0
    0 K) t% S* d$ C/ I* h
  16. IRQ_SCANLINE                = 136& [, n. y- N: ~, V
  17. ;==================================================
    " t5 J5 }: L: M7 I
  18. SOUND_DATA_BANK_00          = $009 r7 {: @% R: g) J/ P4 ^8 Q
  19. SOUND_DATA_BANK_01          = $01
    ( z* p$ i# U. ~
  20. SOUND_DATA_BANK_02          = $02  H9 A$ Y+ k* I, A
  21. SOUND_DATA_BANK_03          = $03
    ; u1 ?2 o* C! V! \  G
  22. SOUND_DATA_BANK_04          = $04
    . ?1 {1 C* |% w9 J
  23. SOUND_DATA_BANK_05          = $05
    ) t, t% ~* `& O" {
  24. SOUND_DATA_BANK_06          = $06
    , f* g4 X2 |5 i
  25. SOUND_DATA_BANK_07          = $07( M" M9 ?/ m; w; |* s0 U# G
  26. SOUND_DATA_BANK_08          = $08
    4 Y& c- L2 M, z/ n" [% P
  27. SOUND_DATA_BANK_09          = $09
    0 Y  h7 [* ?* t" A$ k8 }& ^- D* M
  28. SOUND_DATA_BANK_0A          = $0A: }5 p3 O. B* O0 }: D) X8 V0 s) I
  29. SOUND_DATA_BANK_0B          = $0B
    6 n- a% O9 t2 }( [# |
  30. SOUND_DATA_BANK_0C          = $0C4 k8 K) N' o7 k: o+ i% C
  31. SOUND_DATA_BANK_0D          = $0D; j2 s9 L0 f5 i: ?" b' P
  32. SOUND_DATA_BANK_0E          = $0E; V5 a0 t. {! P+ O5 t+ |/ m
  33. SOUND_DATA_BANK_0F          = $0F
    & {2 b$ }) d8 _9 B
  34. ! M, ]7 t$ g+ V4 b8 q
  35. SOUND_DATA_BANK_10          = $10
    : N% o: u6 ?* |0 U6 d; g& i  g
  36. SOUND_DATA_BANK_11          = $11
    . j$ b0 L3 M* a
  37. SOUND_DATA_BANK_12          = $127 ~' L; o. C; J# J* f" o
  38. SOUND_DATA_BANK_13          = $13  z; L0 y. y  B0 ^* l
  39. SOUND_DATA_BANK_14          = $14
    " F6 e' J& ~$ ^
  40. SOUND_DATA_BANK_15          = $15
    0 H. y. q. T6 Y$ B8 O
  41. SOUND_DATA_BANK_16          = $16
    2 o; I6 t/ n; T3 n, a
  42. SOUND_DATA_BANK_17          = $17
    ( P! w9 \, r% i) I, ^5 Z" }
  43. SOUND_DATA_BANK_18          = $18& x6 v4 s2 u; R9 E$ s9 c1 Y2 n6 U, X
  44. SOUND_DATA_BANK_19          = $19% `- [3 _7 |% _' K/ y% W% |
  45. SOUND_DATA_BANK_1A          = $1A; s& i0 b* [+ B' \( x  O3 p8 ~+ f
  46. SOUND_DATA_BANK_1B          = $1B" G4 v& ]; l* S) o" H( G9 l
  47. SOUND_DATA_BANK_1C          = $1C' s) ^. d' V5 B) e
  48. SOUND_DATA_BANK_1D          = $1D
    6 ]3 n- w& h0 Y8 d: [- [) m) d

  49. % G5 x% C# ?' ?' z5 h1 a4 J9 p! o
  50. SOUND_DATA_BANK_C000        = $1E
    * v3 l" x* n& ?# [9 H' k4 o
  51. SOUND_DATA_BANK_E000        = $1F! {' }  ?9 r) r/ A4 Z2 T
  52. ;-------------------------------------------------
    6 E6 k1 l. H" V( v- n! }
  53. CHR_DATA_BANK               = $20) L  h5 W: c) y$ O) |9 @. E/ a$ M3 O
  54. CHR_DATA_ADDR               = $A0007 e3 I8 O& Y- u7 P4 w/ X
  55. ;-------------------------------------------------' l6 h( N8 d/ ~
  56. PROGRAM_BANK                = $00; f  \" n" {4 ~" L
  57. PROGRAM_ADDR                = $8000
    : b  r: o8 ]( E* M8 l$ S# [# m
  58. ;-------------------------------------------------
    % X% F! |: l8 U0 j% c
  59. RESET_BANK                  = $1F6 Y! V6 i7 U9 ]% u
  60. RESET_ADDR                  = $FD00
    - b0 b: I/ R7 Y# p

  61. 5 e0 E& B5 u* S0 l
  62. ;==================================================
    5 m9 c8 H4 F+ U7 }8 v6 B6 a
  63. ITEM_MAX_SIZE       = 12                     ;最大节目数
    # V' \! Z' j3 A3 O5 {
  64. ITEM_MAX_INDEX      =  ITEM_MAX_SIZE - 1    ;最大节目索引- @. H+ K, S& K) h
  65. PAGE_SIZE           = 5                     ;每页节目数# o; n* Z+ {) I3 A5 B* T
  66. % W$ j3 U" V8 ?# N7 T: O
  67. ;==================================================( Q1 c! m" R3 Y# \9 b# c% c8 m+ h
  68. .IF ITEM_MAX_SIZE % PAGE_SIZE  ;不能整除4 D1 f# {- K' m9 {& p3 P3 c- c' p
  69. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE + 1   ;页码总数" j5 ]3 G* G$ E) q2 g
  70. .ELSE$ y' }; K6 C9 S8 a2 I7 z, R
  71. PAGE_TOTAL_SIZE  = ITEM_MAX_SIZE/PAGE_SIZE       ;页码总数7 D+ E* A1 s4 M6 z  D8 ^4 B
  72. .ENDIF
    ( C# B  a" ~/ M  }/ \9 @' }* `
  73. $ o  e' L* e) s
  74. PAGE_MAX_INDEX  = (PAGE_TOTAL_SIZE - 1) * PAGE_SIZE;最大页索引
      i5 s: V! s9 q3 K

  75. 9 D8 O1 N" F* _9 |* u5 z2 {
  76. ;==================================================
    " }4 Y& D, Y* b8 |" Z
  77. ITEM_SHOW_POS       = $20A8         ;节目名位置
    : c! P9 A2 a% d& C, w. t; D; G$ J
  78. ARROW_X_OFFSET      = (((ITEM_SHOW_POS & $1F) - 1) << 3) - 2# P: }& J5 A9 L: h! b
  79. ARROW_Y_OFFSET      = (((ITEM_SHOW_POS & $03FF) >> 5) << 3) - 1;
    . f0 k0 t  T6 n" H+ K8 y
  80. ;==================================================8 I* y) _6 B# |3 ~
  81. Caption_Text_Pos    = $204D ;标题文本位置
    0 Y: V  T; U1 m4 \7 z
  82. Author_Text_Pos     = $2324 ;作者文本位置
    . z, J- _1 ]" e0 ~3 J4 e5 t) G
  83. Date_Text_Pos       = $236B ;日期文本位置
    2 G8 \* h/ y$ h% `% N7 @
  84. ;------------------------------
    % R$ z& o+ B) t- G4 u1 s
  85. ;------------------------------! N' W. u+ ^8 S5 ~
  86. .IF SOUND_BAR_SHOW_ENABLE
    9 A: D, i; L; T( W

  87. ! L6 w; ?5 D/ z) B! ^
  88. Play_Index_Pos      = $2273 ;当前曲目位置
    3 G* a7 D8 _& k5 L* |" C( i5 ~3 P) ^
  89. Play_Time_Pos       = $22B3 ;播放时间位置# z# k" J2 }6 h1 z
  90. Play_State_Pos      = $22F3 ;播放状态位置
    5 F+ U4 m% X3 M5 N4 l0 ^) M6 q, O

  91. 7 |- U5 }, O3 e
  92. .ELSE
    2 }( E. Z4 ?1 H8 @5 Z3 P
  93. 0 B: U0 B- o5 E9 [* a
  94. Play_Index_Pos      = $226C ;当前曲目位置8 d$ {. ~" e' ]9 A6 T  }& b
  95. Play_Time_Pos       = $22AC ;播放时间位置
    ! D- W8 o% b' C: G% U5 n0 K
  96. Play_State_Pos      = $22EC ;播放状态位置, m: H, p: Z/ w' b* X3 U$ x6 n

  97. " a* F" ~) s) X$ V* {
  98. .ENDIF
    1 @2 {1 R8 c9 T- J+ ]
  99. ;------------------------------% f$ ?& ^- T- ?- p2 G
  100. Track_Name_Pos      = $222B ;曲目文本位置5 J& k" v8 y6 M3 x
  101. ;Track_Name_Pos      = $00 ;曲目文本位置2 @5 z# @7 O6 h  T
  102. Sound_Track_Pos     = $2265 ;声道文本位置
    # f! S( g5 F; r5 G  O1 v( m' q
  103. Sound_Bar_Pos       = $2269 ;音乐条位置2 o% ^0 c. V, h% f$ u' D+ @
  104. ;==================================================0 K  U- e% F) r& ^- j, k
  105. Scroll_X = $004 G8 X/ Q5 L8 a7 h' f6 E7 D4 ^
  106. Scroll_Y = $00
    - X( ?! Z6 S0 W$ ]- W% K
  107. ;==================================================) X; Y( g) @$ \$ N, i; L- E- l9 m
  108. Sound_Ram_Addr_1       = $01005 W; \) H! q: z, f
  109. Sound_Ram_Addr_1_Size  = $80% A" H9 S# W( ^4 g
  110. Sound_Ram_Addr_2       = $0090. P, L$ X3 J- x0 x! J
  111. Sound_Ram_Addr_2_Size  = $708 G% ^* n& x  t) k2 v" P/ h+ J
  112. Sound_Ram_Addr_3       = $0700
    , S! |( s0 H( H+ e0 D
  113. Sound_Ram_Addr_3_Size  = $00
    5 T9 N5 N/ g1 f4 Z
  114. Sound_Ram_Addr_4       = $0400; D( Y$ i4 L) O. E- Q
  115. Sound_Ram_Addr_4_Size  = $00( o4 @+ S0 t  l! _* |
  116. Sound_Ram_Addr_5       = $0500
    . b( ?* B/ R- B; P
  117. Sound_Ram_Addr_5_Size  = $40! M5 c% `5 ^. R' o) V3 ?6 \
  118. 1 m% [8 [) Z" B# S4 v
  119. OAM_TEMP_ADDR   = $03003 Q8 Q  x" H" r+ }( P$ m9 m/ @' p
  120. 9 {5 Y5 Q8 p1 a. U( q$ o6 x; e
  121. ;==================================================! q1 Q$ }  k. _" [& n1 P
  122. PPU_CTRL                =   $2000   ;PPU控制寄存器) c3 m' c+ H1 |  v
  123. PPU_MASK                =   $2001   ;PPU掩码寄存器5 D* V1 b. i, A7 ]: B, T, }
  124. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ! r; l& k! i8 e. ~  l. ]
  125. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # L2 g& h. |+ {+ x' S7 R" d% j
  126. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    + C+ v1 x& l, f  }) z
  127. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 ) f! K; x- l+ N" R2 Y0 _
  128. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加$ \, L7 b" ~$ B1 n2 B1 k3 C& W
  129. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ; {% f- n4 Y% j  j8 E
  130. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    ) r$ ]$ {7 u8 D8 f- G: \
  131. APU_STATUS              =   $4015   ;声音通道切换
    # y2 D+ O3 |& s! T7 S
  132. JOY1_FRAME              =   $4016   ;手柄1 + 选通& e- x* T3 F: ?( T# B* H( P5 x
  133. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    - J/ {# [5 I! u' t8 o. z
  134. ;==================================================( X2 x* x6 b7 Y: m
  135. MMC3_BANK_CTRL          =   $8000! ]( H2 F' c$ |4 ^  ^- D
  136. MMC3_BANK_DATA          =   $8001
    # {# w, m# `7 O" r& k
  137. MMC3_MIRRORING          =   $A0003 D+ C+ v" l  @2 P! L2 c3 o% L) l
  138. MMC3_PRG_RAM_PROTECT    =   $A001
    * `4 h& Z: i) x- g# m8 ^# u, V- T
  139. MMC3_IRQ_LATCH          =   $C0008 [; W4 v, O( E
  140. MMC3_IRQ_RELOAD         =   $C001
      X; Y& u! k9 u" ^+ E
  141. MMC3_IRQ_DISABLE        =   $E0007 A" @6 X- {  h) V& |
  142. MMC3_IRQ_ENABLE         =   $E0018 u( u, c  F! e) o8 s" z

  143. 5 X, }! D5 e# @. A8 G
  144. ;==================================================
    - @+ ^+ n9 z0 ^' x
  145. PPU_Addr        = $0200) ^. E* j; Z: \) O, @& m& E# F- C
  146. Palette_Addr    = $02C0
    7 t! r  \$ H. x' p- w
  147. Sound_Bar       = PPU_Addr+$E0
    2 G) X( ^7 R/ ]2 {1 ?0 h' m& w
  148. ;==================================================5 ?8 x4 c( M! P9 _1 F3 |- F
  149. Bkg_Palette_Update_Addr     = Palette_Addr+$0D, L8 K6 x6 M8 r2 M6 ]! A
  150. Sprite_Palette_Update_Addr  = Palette_Addr+$11
    2 c3 J: j3 Y2 s1 C7 M1 H6 |
  151. PALETTE_UPDATE_MAX      = $2C
    $ Q+ {; D% l4 t
  152. PALETTE_UPDATE_MIN      = $21& w$ m6 _& q) B* B% Z( X
  153. PALETTE_UPDATE_INTERVAL = 60
    6 j2 i' V2 Y& v0 G* D- ]* H6 ?* a
  154. ;==================================================9 q* F; X" \% x' Y
  155. Sound_Bar_Cnt       = PPU_Addr+$F0
    . g  m+ O4 B: T9 y8 p: b/ r7 I
  156. PPU_Cur             = Sound_Bar_Cnt+$02/ @1 Q8 Z: v$ d; s+ ~
  157. PPU_Addr_H          = PPU_Cur+$03$ [5 \! N! F$ t& O  X# o
  158. PPU_Addr_L          = PPU_Addr_H+$048 c1 e9 j1 }2 A0 t; {# X
  159. Screen_Ctrl         = PPU_Addr_L+$01
    4 n& w! U$ V( g7 b- l6 b
  160. Screen_State        = Screen_Ctrl+$015 Y6 l5 [8 M9 \3 h
  161. ;==================================================
    ' ^9 W6 _, b% b! Y3 [2 w; _1 Q. r
  162. Use_Ram_Begin       = $50
    " R* |2 [6 H$ ]0 b
  163. ;==================================================% f  _4 p# v* C; z
  164. JSR_Addr_Op         = Use_Ram_Begin
    $ L  U+ _: Z, ?% x  H
  165. JSR_Addr_L          = JSR_Addr_Op + $01
    # G' q3 C! Z3 S, N3 z
  166. JSR_Addr_H          = JSR_Addr_L + $01
    ; W) L" O. n# _: t
  167. JSR_Addr_Rts        = JSR_Addr_H + $01+ c; g5 E3 {- W/ x# a
  168. Data_L              = JSR_Addr_Rts + $01  L! r+ y0 P" W$ h( Y8 I
  169. Data_H              = Data_L + $01
    ! ~- a8 M2 |( r, V# {
  170. Data_Cnt            = Data_H + $01' n% U  j$ Q: Z! h1 Z5 V
  171. Data_Buf            = Data_Cnt + $01% X# Y- Y4 p# B; A# E* A( [
  172. Nmi_Time_Count      = Data_Buf + $01
    # N, [* t$ H1 b, y* S( l# n  m- s
  173. Time_Wait_Cnt       = Nmi_Time_Count + $01. p. i% \  ^/ K+ O5 l2 L$ g- @9 ]
  174. Palette_Wait_Cnt    = Time_Wait_Cnt + $01
    7 u- x& i# e. K: T, o2 r
  175. 4 _& P4 b1 R* Y" D7 Y% ]6 `
  176. ;调色板刷新标志
    & O2 y6 ~/ d6 j; ^2 M
  177. Palette_Update_Flag = Palette_Wait_Cnt + $01
    & A4 B0 ~+ Q- F- |
  178. - q, r  T2 D6 d' ?/ I
  179. ;当前帧文本写入禁用标志& k& _; I3 @+ e
  180. Text_Disable_Flag   = Palette_Update_Flag + $01
    # G, g2 [) T; y: l
  181. 9 T5 s' @, z7 ~7 f3 z- n
  182. ;==================================================
    ! b5 T  |  e' C" R; |
  183. ;当前帧文本写入禁用标志, 防止缓冲过大导致画面跳动! ~( G8 f4 p1 X* t, Z& e
  184. TEXT_DISABLE_BAR    = %00000001         ;音乐条' W/ O1 {) ~6 x+ t
  185. TEXT_DISABLE_TIME   = %00000010         ;播放时间$ h- a( f- ^% Q2 E! n
  186. TEXT_DISABLE_ITEM   = %00000100         ;播放时间
    9 u8 `2 J9 Q. M9 C* w, `; E$ \) }
  187. TEXT_DISABLE_RAM    = %00001000         ;播放时间/ h* z3 Z# E3 m5 C. D7 q
  188. ;==================================================
    6 v0 C0 B9 r& h( x
  189. Key_Keep            = Text_Disable_Flag + 16 a+ u; Q' v3 d! W  D2 f
  190. Key_Once            = Key_Keep + $01  Z0 j" X' F, p* [' @$ A
  191. Key_Kemp            = Key_Once + $01
    7 }4 a% r- c6 s4 S2 x/ M6 u
  192. Key_Temp            = Key_Kemp + $01% [+ M% A5 |3 B3 E( @  t1 g
  193. Key_Getv            = Key_Temp + $01
    6 ?' K. R/ g% y; q: j( Y  |* j
  194. ;==================================================
    7 g7 W7 m3 h* b" k2 |/ F8 ]! U
  195. Music_Item_Cur      = Key_Getv + $01          ;当前音乐集
    , D) E+ g1 V8 R
  196. Music_Item_Last     = Music_Item_Cur + $013 T# W5 y: t2 q
  197. Music_Total         = Music_Item_Last + $01          ;当前音乐集
    # Z, E# J+ q9 g
  198. Music_Cur           = Music_Total + $01  ;当前曲目% @- U1 ]+ o% w  J
  199. Music_Last          = Music_Cur + ITEM_MAX_SIZE         ;上一个曲目
    + P' M# c& k4 B
  200. Music_Stop_State    = Music_Last + $01         ;播放停止状态
    5 O7 p; C4 a/ t" V
  201. ;==================================================
    1 B4 ~6 g: P0 I" N# M6 `- u
  202. HEX_Data            = Music_Stop_State + $01
    2 b; [5 u+ u/ A6 N5 _$ F
  203. DEC_H               = HEX_Data + $01
    1 ]. E2 p* o( Z, Q* z
  204. DEC_T               = DEC_H + $010 Q1 I5 \; @$ Q4 v
  205. DEC_L               = DEC_T + $01
    : W; a6 f" |3 ]5 m
  206. ;==================================================
    : E6 `9 N4 p9 J( G+ i
  207. Time_S              = DEC_L + $011 P. f7 n7 ^1 ?
  208. Time_M              = Time_S + $01. R2 f+ j3 L) U" S
  209. Time_H              = Time_M + $027 x! T9 _9 ?: O2 I
  210. Time_Cnt            = Time_H + $03' s8 b- l  |3 [* E3 T' R
  211. & I) k1 x# K( o& [8 e
  212. ;==================================================
      e, F4 g3 |, |' k& m
  213. Music_Bank_8000     = Time_Cnt + 1" l/ I" R0 m9 u* T% g* Q
  214. Music_Bank_A000     = Music_Bank_8000 + 1
    : g) B" e+ k( h6 G
  215. ;==================================================  ?4 F% i, n& o- g+ U' s( J+ ]
  216. Scroll_H            = Music_Bank_A000 + 1. b/ s6 `/ g' Y8 u% ]. l& X
  217. Scroll_V            = Scroll_H + 1
    , X+ H$ d. u9 s3 d. g- ~4 K
  218. IRQ_Process_Index   = Scroll_V + 1
    % d/ n% N) j+ y  Q9 U
  219. ;--------------------------------------------------
    0 N' q  o' |9 O: z" ~1 M& R
  220. Page_Cur            = IRQ_Process_Index + $01
    0 R8 F, ^1 k/ H. w3 \3 X
  221. Page_Cur_Index      = Page_Cur + $01- ]0 R' \$ _  C5 G' H  ?4 q
  222. Page_Cur_Cnt        = Page_Cur_Index + $01- a& n. P" E  W' E' w0 o% Y
  223. Page_Last           = Page_Cur_Cnt + $01
      Y! z1 L8 R) T8 n: b, g
  224. Page_Last_Index     = Page_Last + $019 d  R/ e$ Z  ~( `% t* z
  225. Page_Last_Cnt       = Page_Last_Index + $01
    $ j/ a$ |. A5 N9 l" W
  226. Use_Ram_End         = Page_Last_Cnt + $011 ]% d3 ?+ d( c
  227. ;======================================================================
    ) ?! l6 |: L2 f0 b2 J
  228. ;音乐数据块4 K' X  n# y1 l! Z- l1 _2 u
  229. + h: `3 K+ `% y- Q& [% i5 |! x
  230. .IF SOUND_BAR_SHOW_ENABLE
      a* r! h  J0 G2 s1 D

  231. 7 n8 l. c5 I# \
  232. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK' o+ {( Q( w, {
  233. .ORG $9000
    ! q0 F* e$ M1 K' A& _! E4 T' x
  234. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0_bar.bank"5 |5 `: g+ g# r) q# p5 r, i% @
  235. $ v, m. Q& l$ ^1 |7 u6 g, @7 g( t
  236. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK3 h* g/ N2 P0 ~% e7 ~
  237. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"" C5 X7 f7 C9 p! Y, X% p' @
  238. % p0 b! f/ I( l! J7 R
  239. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK7 }' S* n' v+ L
  240. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0_bar.bank"
    3 J& U; e# S/ u2 z& O& ]$ G

  241. 3 G: m- O3 g" ]$ n9 O
  242. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK+ s+ H6 k* }" M3 ^
  243. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    ; l" b" t5 U% u1 N+ y  x; e
  244. 8 j! {; Z% e* d1 @- \8 t- ~
  245. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK4 {$ \1 x! o& _* D% a
  246. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0_bar.bank"
    , w1 j! i4 {: c' A: `9 f9 k
  247. * X; Y7 G1 K$ T! }
  248. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK  k5 g' L8 r' h1 z9 s7 [$ g' X% {
  249. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    ; j; `& X1 s8 |: n  ^
  250. 6 {! l1 k; u( a! N" i1 ?2 J
  251. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK
    5 n2 S0 ?9 Y' R0 y
  252. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"& J3 Y2 ]3 n  J7 Y- W, d- \, B
  253. 6 x- p, c6 N) o' u, @2 |" x
  254. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK1 L( ^( t1 v* @* u! p0 K
  255. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0_bar.bank"
    0 H* v) r/ a. C% e% T& m3 @+ K
  256. 9 F4 q+ H2 R: g( |
  257. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK+ g- K8 F) l8 G' B+ z) X1 R, N9 j
  258. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"
    " o6 n0 ], I3 \: A& K; i
  259. 2 F1 m% {9 [1 b+ J: g3 y7 {
  260. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    % b% f( C3 h; ^4 p
  261. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"6 ~6 L- q- v3 F( j9 M% d% L

  262. 5 H6 o/ `$ E# {! f
  263. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK& n* L5 P9 l; @$ j+ Q. W
  264. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0_bar.bank"- R' m' U: q  W( X) o; B. V+ d& Q
  265. 1 T) N% k+ O! D7 D. i
  266. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK6 f( b3 D( t# q
  267. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank"
    ) n3 i- e; J2 q+ I8 {

  268. 5 g  w5 S* Q1 W  h7 J! s' K4 e
  269. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK/ k% l9 F6 V. e3 N% ~) C
  270. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank"1 u6 ?- L$ Y" L# Y, `$ S( i9 T4 R

  271. 4 k1 f  W4 P" q/ m4 p, `
  272. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    / |0 x6 d7 X8 _+ \  R% L
  273. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0_bar.bank"; W1 v5 y5 \- x1 h. G% ]

  274. 9 Y4 o" ]6 i9 L5 |7 H5 V
  275. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK% y- j: s& ^. c. j
  276. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"  K8 g- W, x1 ?4 l; O* q2 L

  277. / Q1 t) [/ J! n: N) f; {* q. K) {
  278. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK' c- V& V: }" ~- P* i
  279. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    + K/ G* J8 V  h& S. K7 ~

  280. / }+ l: E* v5 _. y. w
  281. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK
    7 C8 x. B0 v6 y* o
  282. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000_bar.bank"
    2 C8 E; D( b; E- T$ L

  283. 6 C8 i- u$ [" x" Y, j  e& k
  284. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    5 I! ]8 z2 `) z2 m9 T5 N' m
  285. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"
    " {3 ~+ D# F1 a! P$ I+ H2 B

  286. 3 v! ^# X# ?( P4 B/ Z
  287. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK  c/ G& l+ n& F7 C
  288. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000_bar.bank"
    % p2 }+ w/ f* d$ B; G# O

  289. 8 a7 Y; G( N% o" Z# o/ T
  290. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    . y  B+ ?7 I' q3 m* j( ?9 ^) J: ^
  291. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"1 A/ @! z/ y) p9 y0 E: b8 A

  292. 2 S- r2 j( K  F
  293. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK" R7 q" y0 n) L. f! G
  294. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"- H% e/ w7 C. ~$ x0 V; j

  295. 4 ^$ R3 c5 m9 R$ G* n
  296. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK. C$ D. s0 _$ Z# F
  297. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000_bar.bank". A9 ]4 i8 s7 k, j& C+ H1 c6 F

  298. 7 F( h# N% h/ q' |& c
  299. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK6 ]7 p3 P$ r7 S0 ~- v
  300. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0_bar.bank"! P3 I! {7 Z' p. Y: g

  301. 3 g4 y2 K: r& G. W5 X
  302. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    ! Z4 V2 l$ c- w4 x4 |% o) T
  303. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    . ?. m9 d3 }% D

  304. 6 C' C2 _, z  x( ~# o( b8 k
  305. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    - `/ o% Y; J, k1 E- a- T1 T
  306. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0_bar.bank"
    9 A* v' L9 N" J7 t% D0 t! n

  307. 1 a  @) [# U) c/ d6 @2 T
  308. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK- x* Y3 p2 h* x% ?  _/ E$ m, H
  309. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"' B8 t, W" ^% E9 T6 n2 k1 f

  310. & P3 ?# X8 ?: d1 S4 k5 ]: L
  311. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
    % r1 R2 _1 ?7 z8 e
  312. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0_bar.bank"9 V! V$ o- _0 W# Y$ O8 @
  313. 1 L* H7 d" H  v, {8 E2 a
  314. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    / X2 `8 V) t5 L) W, o, c( n5 U( }
  315. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    ' H, f5 u1 E; B8 T4 B

  316. 5 l' a$ |& v* L. N# o
  317. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    3 A: O9 h+ J4 o. A; j3 k0 \
  318. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    4 ]' Q! T1 M. N
  319. 3 I& ?3 n$ w$ ]! t8 q, \! W- g4 O
  320. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    " h' i& t0 R# i8 D) z$ @
  321. .ORG $D400; v, e7 h! p% Y6 p8 f8 i2 C" p
  322. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"8 ~+ j- F3 \! O

  323. 6 Q$ z- a: Z0 X
  324. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    4 c0 R) g# q5 f# w3 r  `3 x
  325. .ORG $D800
    ) @0 y) u+ N" \
  326. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"  J& D1 E' K1 N% Z6 e, L2 Z
  327. 6 e5 K! B0 ?; X$ [
  328. $ V! y( e7 o4 j. i
  329. .ELSE' U& H+ e9 S! @

  330. 4 i% y. X2 A1 x, g, w
  331. .BANK SOUND_DATA_BANK_00 & BANK_DATA_MASK0 m' ]( t: O2 {/ o+ U6 A+ M
  332. .ORG $9000
    ' q2 W9 m/ x" r
  333. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_0.bank"( Y' r2 M$ ]' W" m

  334. $ [2 h& ~" e3 u
  335. .BANK SOUND_DATA_BANK_01 & BANK_DATA_MASK
    " R" R9 ?: y# x1 D0 Z3 S1 z9 z
  336. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_1_music_data_1.bank"7 C  ~, S" e! I- w" k: S! y

  337. 6 x0 e% I% ]9 y  x! b: M. o
  338. .BANK SOUND_DATA_BANK_02 & BANK_DATA_MASK
    # ]" x( G  S; v8 S/ c) z2 u
  339. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_0.bank"
    : o; y& B4 x9 v8 T: B" N7 f6 e2 ]
  340. ! B, G5 g2 n. ?, b# n1 E% s
  341. .BANK SOUND_DATA_BANK_03 & BANK_DATA_MASK
    9 [. O/ C+ }9 K
  342. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_2_music_data_1.bank"
    2 U5 h& R) W$ j" }% a. g! t

  343. # z, N9 F8 n$ e; b# e9 Z
  344. .BANK SOUND_DATA_BANK_04 & BANK_DATA_MASK' \" R: l- {9 a! b1 [. d
  345. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_0.bank"
    $ h! |  @( n- U0 }3 D0 w7 P
  346. % L- a+ a2 a2 @+ R& o6 ?0 {
  347. .BANK SOUND_DATA_BANK_05 & BANK_DATA_MASK8 ?: m* x1 H* }' A
  348. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_1.bank"
    0 `9 `" N: x9 X

  349. , }3 f$ r; J/ p  N0 ~
  350. .BANK SOUND_DATA_BANK_06 & BANK_DATA_MASK. w0 @& @% o2 f# c2 H7 t) }% v
  351. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_4_music_data_2.bank"
    ; I  t  e) h! {& B" J
  352. & \- W" r0 f2 i- u
  353. .BANK SOUND_DATA_BANK_07 & BANK_DATA_MASK
    2 n7 n0 {% z& \' ?
  354. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_0.bank"
    2 M+ N- M. \: u3 H) m

  355. 5 n0 N3 P) O- ^% e
  356. .BANK SOUND_DATA_BANK_08 & BANK_DATA_MASK" i, s1 m+ l; s  L. i4 K
  357. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_1.bank"$ Z3 D: R! K: V. f6 k) C5 K
  358. $ q! N" m) W8 a# _9 o% s! Q& h
  359. .BANK SOUND_DATA_BANK_09 & BANK_DATA_MASK
    / H8 D1 P% q9 y" P8 g
  360. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_5_music_data_2.bank"; {- C, s. y7 W* K
  361. 4 M  R; @/ G" R1 A3 P: {
  362. .BANK SOUND_DATA_BANK_0A & BANK_DATA_MASK
    " d3 F( Y; U% L% X( C; W3 F* T
  363. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_0.bank"
    : l9 {! Z5 b7 v7 D
  364. - `+ H! M4 H* {, _& C1 V  T
  365. .BANK SOUND_DATA_BANK_0B & BANK_DATA_MASK  `! P8 N) d8 o7 j  `0 ~  y* U
  366. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_1.bank". j: A  C% N8 u9 P; o$ h, O
  367. ' t8 v) n0 Z& C1 t2 t0 R
  368. .BANK SOUND_DATA_BANK_0C & BANK_DATA_MASK! N; Y/ V$ K, E/ y
  369. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_6_music_data_2.bank", ~+ P. [3 ?# }- ]
  370. , X: C3 [4 T: }' W0 u2 b
  371. .BANK SOUND_DATA_BANK_0D & BANK_DATA_MASK
    # K$ x  l7 W" W. O' u
  372. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_0.bank"& I* G1 Q, l! i$ z% h( e" l8 P
  373. " S' P4 f% o0 k# J
  374. .BANK SOUND_DATA_BANK_0E & BANK_DATA_MASK
    1 P# _7 d' u, S( K% w/ ?4 _% @
  375. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_1.bank"
    ' g" j- q& E1 ~# Z  s- z1 @' f

  376. 9 u8 q, [4 n, ]; g( ?- X! B' |
  377. .BANK SOUND_DATA_BANK_0F & BANK_DATA_MASK
    " [% n" Y& p4 Q7 T$ R1 P
  378. .INCBIN "sound_bank/fc music(mapper 4)/rockman/rockman_3_music_data_2.bank"
    3 @8 n9 J: j7 b  p% |

  379. + {+ u8 n+ {1 \; D8 t
  380. .BANK SOUND_DATA_BANK_10 & BANK_DATA_MASK! v9 K! v$ F. T" A: h4 ]% d
  381. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_8000.bank"2 ?5 l9 ]8 D8 y

  382. " {$ G6 I1 Y0 I: y/ f
  383. .BANK SOUND_DATA_BANK_11 & BANK_DATA_MASK
    & M# \7 _0 u+ \% a- n- d
  384. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_A000.bank"/ ?. f+ \/ q* Y0 Y% `, P
  385. ) B( G6 ?% K. a; q3 }
  386. .BANK SOUND_DATA_BANK_12 & BANK_DATA_MASK/ [: d" p) J2 s+ J0 f4 U9 y  L
  387. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_8000.bank"" U; ^" Z9 O- F  {2 \8 D' B
  388. " f) U  x: W: F- V/ h3 S; Z
  389. .BANK SOUND_DATA_BANK_13 & BANK_DATA_MASK
    3 X0 |" \% o' g% @
  390. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_A000.bank"# V. Y$ r$ K, G2 X9 x: M, w  j& d
  391. 2 }* I1 X( Y; w0 K1 T3 w2 N2 l1 a$ V  R
  392. .BANK SOUND_DATA_BANK_14 & BANK_DATA_MASK
      ]4 K0 V/ U0 p" u+ B3 _. c
  393. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_8000.bank"
    ' D1 L8 M. Z7 Q3 d" Q" d

  394.   E* N. S, C% b# ^% m2 x: P8 ~
  395. .BANK SOUND_DATA_BANK_15 & BANK_DATA_MASK
    , V4 V/ a  _$ {$ e# M5 w% @) C
  396. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_A000.bank"5 o- D( i, Y; m0 J3 O

  397. 2 i) h& I% B4 m$ W. `$ \- n1 K
  398. .BANK SOUND_DATA_BANK_16 & BANK_DATA_MASK
    $ a$ W9 `$ o. A! D2 W4 t% h
  399. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_0.bank"
    ( z5 ?9 ?( k! _! u4 J3 B% o$ k
  400. 5 K: H3 M( \. l& h
  401. .BANK SOUND_DATA_BANK_17 & BANK_DATA_MASK
    . i( \" L0 p2 Z
  402. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd1_music_data_1.bank"
    $ F  X: q0 O3 }' e* k6 u0 i
  403. ( I5 y, _% i1 h$ |5 b
  404. .BANK SOUND_DATA_BANK_18 & BANK_DATA_MASK
    * h7 f3 g1 ]/ |$ c3 p
  405. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_0.bank"$ C9 |& K0 l1 a
  406. & Y: q: h9 _6 |' f# h& d
  407. .BANK SOUND_DATA_BANK_19 & BANK_DATA_MASK
      V% [7 K7 I5 d, f8 }  ]: o
  408. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd2_music_data_1.bank"
    1 c8 A  I9 S$ F( v3 ?

  409. ! W' Y2 C) Z$ I) R" O; B
  410. .BANK SOUND_DATA_BANK_1A & BANK_DATA_MASK
      q+ C+ J7 p" t0 @9 v
  411. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_0.bank"% s. J: T* h" q

  412. 5 @4 }/ ~' I* q8 V1 y
  413. .BANK SOUND_DATA_BANK_1B & BANK_DATA_MASK
    , i! |- R0 I' ^, t
  414. .INCBIN "sound_bank/fc music(mapper 4)/double dragon/dd3_music_data_1.bank"
    ! s& j: z' u$ K

  415. : Q8 e! |% K0 o  T
  416. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
    ; O. }/ V* z# |$ `9 I; U9 H
  417. .INCBIN "sound_bank/fc music(mapper 4)/raf world/raf_music_data_C000_dmc.bank"
    + O! V$ u% ^9 o7 @9 J' f* [' _* M
  418. 7 l3 l2 I8 n. X5 _+ V8 d
  419. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
      b, X, z( R# U1 ?- A. @# @
  420. .ORG $D400( `) U$ \. H+ z5 q( y5 u' [6 Y7 J
  421. .INCBIN "sound_bank/fc music(mapper 4)/final mission/final_mission_music_data_C000_dmc.bank"
    2 ]/ r/ [# \' P1 j" X. u7 t
  422. % p( [# n% J1 _  J% Q( ^
  423. .BANK SOUND_DATA_BANK_C000 & BANK_DATA_MASK
      F; S& e# h- T; X
  424. .ORG $D8001 }) W: |' f/ @  Q+ u4 T
  425. .INCBIN "sound_bank/fc music(mapper 4)/kage/kage_music_data_E000_dmc.bank"( ], u# |6 B( ]. R

  426. 1 a+ d3 y7 t2 X
  427. .ENDIF
    0 \' c% E9 F; O: n6 I* W2 y( o
  428. % q# p8 K- o2 \4 M4 d1 U% u% Z, G1 c
  429. ;CHR图形数据
    4 J$ w6 L" v# K4 }
  430. ;======================================================================" i6 B0 u# e" c
  431. .BANK CHR_DATA_BANK; V, ?; |4 W% K' z
  432. .INCBIN "chr_bank/chr_data.chr", t7 O% E$ r; c; J: V3 ?
  433. & q+ V/ z1 f/ ~6 h6 {
  434. ;======================================================================
    * F6 R8 Q9 Y3 a
  435. .BANK PROGRAM_BANK & BANK_DATA_MASK, ~. m) y- E7 U3 R9 f2 V3 Z& L- M
  436. .ORG PROGRAM_ADDR
    6 e+ S0 r9 d! j2 e# X) {* F- D
  437. 8 e) G8 D4 O& m: V% T+ L& |$ F2 t
  438. ;==================================================0 B4 a, S6 \9 G7 J) @' a- R
  439. NmiProcess1 R" w- g) Q% C4 j9 b; W3 A
  440. / Q% I! `. }1 [* g! n$ ]; y
  441. ;关闭屏幕控制
    0 K* u7 O& q5 |; a* x: [8 ?$ J0 [9 q
  442. LDA #$00, X$ B& m" u& d& |
  443. STA PPU_CTRL; w0 c* O0 B& s2 I  q- ~( p5 B

  444. ; U* Z& C. |: k! P
  445. ;没播放音乐就不需要触发IRQ
    8 ~: X4 T8 A% \9 A
  446. LDA <Music_Stop_State
    ' z" G; p5 F7 W$ X" C; {% N7 f
  447. BNE NmiNormal
    ! J- q" t5 Q2 _) `

  448. , D, G- S6 U: k3 O
  449. ;重置IRQ索引" X- r0 \( o4 p7 T
  450. LDA #$00" {% v$ g* _, [4 E. J8 x
  451. STA <IRQ_Process_Index+ {. o) Q6 B6 O3 p" e! @

  452. : I- v( {; K# Z$ m7 b
  453. ;时间秒数为空则跳过. i8 z9 X5 f0 }
  454. LDA <Time_H
    6 }2 b$ g9 {' z4 A  d+ w1 w0 D2 _
  455. ORA <Time_M
    0 U0 h* ?3 k; ]8 k3 I
  456. ORA <Time_S0 g! o8 T* S' b
  457. BEQ EnableFirstIrq+ b# _5 [9 L  v8 x: M- i8 \/ f

  458. : ^8 Q4 m; v& P! ^* `
  459. INC <Scroll_H7 f( E" ?0 d, ~# `, Y2 w

  460. + e! A/ V  N2 M" `- ~
  461. EnableFirstIrq ; I$ @( w# C0 y: g" W! e
  462. ;80条扫描线后触发IRQ/ V7 B5 I. W. ^8 w* Z; d
  463. LDA #IRQ_SCANLINE8 W. a. r& ?% z) d) p- n* \
  464. STA MMC3_IRQ_LATCH/ V3 J4 P4 Q" E, G+ H
  465. STA MMC3_IRQ_RELOAD, T8 s0 k: P) |
  466. STA MMC3_IRQ_ENABLE
    2 s  |# h2 u6 [: {
  467. CLI
    ; N1 d+ W8 ?, V7 V/ H* I. \9 `

  468. ! }- \+ ^: A6 z7 F& u3 w8 q
  469. NmiNormal9 O( T/ Z  K6 n* W/ t& Q
  470. 3 E/ f- a  a2 D: A5 A" D
  471. ;处理PPU图像5 y7 \/ \! O. W  R4 I4 R
  472. JSR PPU_Proc
    - _) O7 b) V; D- I
  473. ' ~0 R6 L- @+ D/ N5 y
  474. ;写入精灵, 会占用516个CPU周期, 约4.53扫描线, 写入会导致1像素抖动(PPU处理徐优化)4 j' W) v& p% T7 _- |# R. F% h
  475. LDA PPU_STATUS
    1 l4 Y# C- n$ I# }
  476. ;LDA #$00
    : O6 s0 I; l; i5 q) M# M/ K( T$ V0 S
  477. ;STA PPU_OAM_ADDR/ H" j9 _, T3 S* ~) S) U
  478. LDA #OAM_TEMP_ADDR / $01004 D2 W! k% g& D5 l" \# F
  479. STA OAM_DMA! c+ Z3 v5 |  }6 `

  480. + w" @6 U+ u- N
  481. ;启用NMI中断
    : D0 X9 ]+ U& N0 \" k
  482. LDA Screen_Ctrl
    6 k7 z$ [: ~9 S) F3 ~
  483. STA PPU_CTRL0 |; I3 \; k% i/ f4 `

  484. 8 j6 {$ N( P2 ^
  485. LDA <Text_Disable_Flag/ f3 k1 m: i% y: m% w. q: J# m$ F* Z
  486. AND #TEXT_DISABLE_RAM2 V; e$ \. e, _
  487. BNE Nmi_Sound_Play0 l7 I; B7 c- J7 I, J! x" L
  488. " Z! \9 G. Z& r+ f% F* J" p
  489. ;处理手柄输入: g1 f0 h0 a+ w  p) }
  490. JSR Key_Proc
    9 f- E$ x+ C, K4 V' p: x
  491.   Q6 B1 [) C+ m5 ^8 J5 L+ r
  492. ;切换音乐(手柄触发)8 r. p0 I5 Z/ B5 X# c! A) k
  493. LDA <Time_Wait_Cnt
    ' G/ I8 Z# W8 \4 A
  494. BNE Nmi_Cursor_Arrow) A6 R$ l% G8 }. |) M4 b& P6 e
  495. JSR Change_Select_Item, Y) O9 B; Q" Q& R: V
  496. ; C0 w! l+ {9 b3 y7 n9 R% u
  497. Nmi_Cursor_Arrow+ W$ ~- y( G1 o7 q  r
  498. : S2 z* D* A* _1 G# R
  499. ;处理光标箭头0 [% t  {7 {" f. I( p
  500. JSR Show_Arrow
    1 {" `3 [) C+ {5 ?

  501. 0 j- U% |) g( c7 \
  502. ;更新调色板/ d( U3 `* I9 i. n* G
  503. JSR Update_Palette_Data- C/ f9 b* M$ ~3 v0 c7 g8 \$ {6 v
  504. * O7 f$ ~* d( m' I
  505. ;显示时间(缓冲)
    * ^* F' m$ V! o% }5 m: U6 G/ B
  506. JSR Time_Show
    * @  r8 v: x- x# P  h6 G

  507. / Z# ?! _4 g' k- k8 D5 O
  508. ;音乐显示(缓冲)
    8 a  W; V* E( E- D3 `1 J5 R
  509. .IF SOUND_BAR_SHOW_ENABLE
    3 u3 `) @6 G, c
  510. JSR Music_Vision
    ; N+ }: W5 T) h
  511. .ENDIF: K5 q3 {' c# t) y
  512. ! i. {( o+ x+ o
  513. Nmi_Sound_Play: p2 A8 ?5 q+ ^
  514. ;播放声音
    ; J! b, m  K# u9 T
  515. LDA <Music_Stop_State' b& f! m% P/ L" O! i" ^. F4 n
  516. BNE Nmi_Time_Wait_Set
    3 h5 H7 x, R8 l2 r# t( P% _* U0 s
  517. JSR Sound_Play_Proc' V# o/ c% {+ D

  518. " H; P; J2 a7 V9 o/ v2 s- j
  519. ;播放计时
    & J( b4 D, v! s( Y- G$ Z
  520. JSR Time_Count
    * r& m) _7 R+ d+ k! A) |4 z) c

  521. 1 e& ^8 |9 |+ A$ U& ^; N0 Z- l
  522. Nmi_Time_Wait_Set4 h( C8 F. U% I$ G2 Y1 L
  523. LDA <Time_Wait_Cnt  L0 |8 {1 ]! i0 y1 i
  524. BEQ NmiNormalProcessEnd& z3 r: w% R9 s( y
  525. DEC <Time_Wait_Cnt
    4 K  s. O4 Y" ^- Z/ {2 g& z
  526. NmiNormalProcessEnd
    6 P) Z$ O7 x; l
  527. - y4 x+ o2 e7 a) J7 t/ q: }% d- ~) K$ i
  528. INC <Nmi_Time_Count/ Z' a. |' x/ Y) F

  529. / ]* s+ }. J6 A. v5 G
  530. RTS
    $ w; u/ E4 s; o' s

  531. ' g4 b/ ~, ~  d$ ^, s$ G* S
  532. ;==================================================
    # h) m" j3 Y& C* E+ }
  533. Init_MMC3! ~/ A: C( V' U; A) S  ^
  534. ;==============================  q2 Y( L+ b. Y7 Z1 t; H8 F
  535. ;禁用IRQ
    $ c! `5 D- v- p* x% n; o4 F
  536. STA MMC3_IRQ_DISABLE" }$ T; O  d" P- m

  537. - T3 F: I1 z1 f! k5 J( r3 U' n
  538. ;水平镜像
    ( _2 [5 u8 [+ T: w& A
  539. LDA #$01, o4 D) L) G7 p) ?% e& @$ z5 w
  540. STA MMC3_MIRRORING2 A; L! Q3 m/ \9 ]  l

  541. / X3 I' N/ d* G9 `0 N8 o
  542. ;初始化图形bank& n/ V$ P4 f0 X" a
  543. JSR Init_MMC3_Chr_Bank
    2 k& i2 }' t4 x% z9 e  x
  544. : U; C  q. m/ E$ w
  545. RTS
    3 _) I7 r$ H# T$ k7 Y
  546. ;==================================================
    ) f8 _8 h& n  e7 |+ l4 Q1 D' _) i6 d
  547. ProgramBegin;主程序
    % W4 p9 y& x, _4 v
  548. LDA #$006 v( t0 u; T5 L+ ]. j) o6 S
  549. STA PPU_CTRL
    ! q1 ]' ]7 c9 g
  550. LDA #$007 `$ s1 p$ j: K% F2 F
  551. STA PPU_STATUS0 t+ @# \3 X. V: w$ K8 N5 @0 d
  552. STA PPU_MASK
    . m5 x8 g$ @4 d' `/ v) U
  553. STA JOY2_FRAME  K) v  @9 W2 n! r  l, U/ a+ S
  554. . S/ {8 t2 R3 l
  555. STA PPU_SCROLL
    / M/ ?' @6 Z/ E5 E
  556. STA PPU_SCROLL
    " h/ t) b- D3 U3 ?

  557. % |$ [' l6 v: Q
  558. ;==================================================
    $ R% y5 b% H5 @- A5 R2 A
  559. LDX #$FF
    : q+ N3 \3 w  I: W5 o
  560. TXS
    7 ]* \3 I: }" P& k+ q& p+ X" k& f7 g

  561. 4 v. I4 Z8 u+ V' G( G
  562. JSR Init_MMC3* [$ L& J  A2 g; k0 c% z

  563. 5 _8 f* b8 F" r  M1 j  `. j) C
  564. LDX #$02
    6 z" E# H* J, U  C# G3 ]
  565. Check1: K! L0 C1 E) r% \
  566. BIT PPU_STATUS- _3 y& d+ ]9 \& T; e8 ~
  567. BPL Check18 f* P4 ^* L4 ^% o
  568. Check2
    0 t4 ?  D8 r: n# C/ \3 j/ d; F7 C
  569. BIT PPU_STATUS; n2 a4 p: N3 x& _
  570. BMI Check2+ d+ y/ [0 r  q

  571. 3 B" p5 _$ X  N5 `2 [; k% |+ ]
  572. LDA #$0F, ?% g+ Y3 m7 f4 o2 S% z5 s
  573. STA APU_STATUS
    5 S( {% j6 v" ?6 H( [. X9 u
  574. LDA #$C0
    4 W( {# |, C$ f2 @
  575. STA JOY2_FRAME
    0 h- ]8 o" M' D1 ?  O8 G; f
  576. . r1 G8 m* X2 H% j) W* f% p
  577. LDA PPU_STATUS
    & l8 r/ K6 f/ Q# A
  578. LDA #$10( H/ j( |9 D% `/ q4 I
  579. TAX
    2 S' i4 i8 h: K& O0 x
  580. Check3
    9 o4 Y4 s+ }% v3 f" t
  581. STA PPU_ADDRESS+ C. i! I0 s) _# B2 C. U) P9 }
  582. STA PPU_ADDRESS
    ! W) U3 t& }$ X8 z- k
  583. EOR #$00
    + u9 J* g0 t5 F0 s# h  K- [
  584. DEX6 z6 W6 ], m9 d  Y; h7 H+ m
  585. BNE Check3
    ' n* K1 h2 g% J1 l
  586. ;==============================  G) B: y9 ]% h* J# D  C# r
  587. ;调色板清空
    : m/ c0 E: k  z/ d
  588. LDA PPU_STATUS
    : a# C- v% g6 {0 Z/ Y  y: o
  589. LDA #$3F1 F; ?1 H4 R! [1 z
  590. STA PPU_ADDRESS! K% W9 N8 c0 @$ K7 B7 C
  591. LDA #$00
      K/ s3 h, o& N$ o! y9 C' X* @
  592. STA PPU_ADDRESS0 M9 ~  K! H/ V$ W7 B/ C
  593. LDA #$0F3 f0 z: s1 i( s3 ?% E
  594. Palette_Clear
    / Y! G+ p# [/ N/ J% ?+ C
  595. STA PPU_DATA9 V0 M' l% N8 F4 K4 k. U/ Y
  596. INX' K5 [$ I, `& v" L) a! ]) `
  597. CPX #$20
    ' p$ w" ~  _- F; }& ^) L; {
  598. BCC Palette_Clear
    $ L. c7 s, z* O4 m
  599. LDA #$001 w  W  R  D# f* ?3 T
  600. STA APU_STATUS0 k7 i! M, a% H( G
  601. 6 K. O+ t) E9 V5 z$ h
  602. ;==============================
    * Q  L, h, U' q5 j
  603. ;RAM初始化
    9 ]( @5 ^; ~( z
  604. RAM_Clear_All
    3 J1 ]; I1 }5 \
  605. LDY #$001 L5 v$ o+ ]' s. [1 l7 h# w1 m
  606. LDX #$08: e4 h8 O' R. r5 z& ~
  607. LDA #$00
    ; o' ]! |/ g! }* s; K6 v
  608. STA <$00
    . u. `, r3 F' y4 T% ?6 |
  609. STA <$010 }# _" g' z7 P
  610. RAM_Clear_All_Start, k+ `9 `+ D8 h8 x2 N1 `5 L
  611. STA [$00],Y
    7 i3 }8 Q( l( A" r2 v% v* `
  612. INY
    1 |5 s' v. W& u# o
  613. BNE RAM_Clear_All_Start0 l5 r' a9 v+ `* f
  614. INC <$016 G3 U& O. b9 x" g( t8 ]
  615. DEX
    ; _; }9 k4 r+ y. j$ t9 {0 D8 c
  616. BNE RAM_Clear_All_Start
    , J) H$ d! e9 C- [" g6 b+ K9 l( m

  617. 8 z0 S& X  }4 v* U" u- ~1 A$ r# U+ b
  618. JSR VramClear( Q# b) V, |7 Q: ~" R" O  n3 }
  619. JSR VramInit
    2 V9 T' J* V& G" q. ?; l
  620. JSR OAM_Ram_Init# ~& s  \2 t0 [9 P9 X4 r
  621. JSR Init_Palette_Addr  O6 N; }: E$ l4 W# W% j
  622. - ]" U- m/ C1 E
  623. LDA #$FF
    ' Q1 R7 V. G6 |$ B5 ]' V0 z
  624. STA Use_Ram_End
    - x- a* ~4 I+ J& U3 T1 }
  625. ;==============================$ m0 Y5 s: I2 v! A8 V- D
  626. ;初始化背景调色板5 b8 ~) `% L' B5 X' t  i3 d: v
  627. JSR Set_Palette_Color2 U7 B6 ^$ b& b  [5 _
  628. JSR Set_NameTable_Attributes) Z9 O: [3 H- ]* ?: y# X# f& L
  629. $ G$ P3 e! t5 k( w; T
  630. LDA #$00: {0 z! \5 Y8 ^9 T
  631. STA PPU_OAM_ADDR# K0 a8 K$ x6 p. `
  632. LDA #OAM_TEMP_ADDR / $01007 N0 u+ {6 c1 C) N/ F& {  x$ _
  633. STA OAM_DMA! C1 c5 A& @* ~3 d) T8 S- _* _) [
  634. 0 U+ U; N! {% t" _$ d. m
  635. JSR Sound_Reset_Proc0 N# d6 V) I7 s9 G7 b/ V
  636. JSR Set_Sound_Total1 Y2 X4 i7 k- c; t
  637. 0 t8 p! E1 }" n$ K. g; e# K
  638. Init_Start_Music
    / f3 a  ?4 b, q( q
  639. LDX #$00
    3 d  ~1 t. N% R( w  H6 ]# _4 c
  640. Init_Start_Music_Write4 `1 F3 t4 D  G$ l) {0 a2 E
  641. LDA Sound_Start_Port,X
    5 V* S, Q3 U9 N, g( v
  642. STA <Music_Cur,X* |( ?* T+ B( D# W3 b; [  o
  643. INX5 P6 {1 N5 G! r5 W0 F7 n
  644. CPX #ITEM_MAX_SIZE
    / p/ p; f% v. k" L8 h# F
  645. BCC Init_Start_Music_Write0 r7 C$ V. {' y7 I- E) f
  646. ! Z5 X  U! b: c: S- Z
  647. JSR Show_Music_Text2 ?5 `* z  E8 ~% y* y" M% f% }
  648. ; ^  `9 I( L4 I
  649. .IF SOUND_BAR_SHOW_ENABLE8 @4 y) {4 ], ], W! l
  650. JSR Sound_Bar_Text_Set4 _2 A3 _6 M+ g9 c/ [0 _
  651. .ENDIF# H8 z9 [' [# a
  652. ) K0 u7 F9 ?) J* |
  653. .IF Track_Name_Pos
    # n5 d7 L; `  U: E( U
  654. JSR Show_Track_Info( x+ O- s3 D  D; Z$ G8 c3 k5 q
  655. .ENDIF! h) o6 a( G- ]2 u& o9 H

  656. , d5 O# X0 i3 z" u
  657. JSR PPU_Proc* O9 ^+ ~: x8 k% I6 m

  658. 6 E, k% X* q/ F* U
  659. ;==================================================0 J+ ^/ h2 j  H  |5 e, f
  660. ;音乐bank初始化 / t2 D8 q" U4 ^* |
  661. JSR Init_Sound_Bank
      X7 T, P8 ~2 ]5 K) P% y
  662.   G/ @4 d7 s1 d! j: n
  663. JSR Music_Show; o+ R: M" ^; h6 j+ x" [
  664. JSR Time_Show; Q1 {7 u' t% S
  665. JSR Music_State_Show
    + g2 ^1 v7 J& T2 r6 v5 O. g
  666. JSR Time_Delay
    / O$ j) F: a4 Y
  667. , w& u* \! K  x  ^4 g
  668. LDA #$01. r: m, a+ O! i& F
  669. STA <Music_Stop_State4 d0 U, y7 ~, B( e4 m! d' r

  670. , \3 v9 Y* O& m6 P! k
  671. LDA #$88
    5 V* s# V7 T  [7 U
  672. STA Screen_Ctrl3 J8 ^( H& n3 x; N$ m+ X
  673. STA PPU_CTRL( g4 d" d# H* g$ b5 y9 F

  674. 4 J4 O. i/ D# i) c% Z
  675. JSR Show_Page_Text$ p9 Q% b5 s/ |6 v% }

  676.   H5 O4 X9 H( s) B' l: d' x
  677. LDA #$10) e; t3 U5 c0 a/ k% {
  678. STA <Time_Wait_Cnt$ u& |% `2 L& Y1 a

  679. 2 S8 H, F; t) F' i: [
  680. Wait_Time_Over
      K: I9 y! o! i# d
  681. LDA <Time_Wait_Cnt
    % t8 \0 O0 L  h3 |9 f
  682. BNE Wait_Time_Over
    ; G; r' C- c* j& I% O7 [

  683. ' G, ?6 D" S0 Y; N
  684. JSR Show_Arrow* O0 `) K/ P9 L5 v4 m
  685. LDA #OAM_TEMP_ADDR / $0100, w- J2 q; b0 W6 @8 k+ R2 N
  686. STA OAM_DMA
    1 u9 |+ c, `  d

  687. 9 R# a2 Y. f% V! t2 E3 {; m- F+ }
  688. LDA #$1E
    8 y' A5 A+ Y" {& \; ~
  689. STA Screen_State
    : q! U  d6 U0 q' `6 N' e& S
  690. ! [$ v5 ?/ j, q0 R/ D
  691. LDX <Music_Item_Cur" F: z2 }7 p, ]& v7 B1 [
  692. LDA <Music_Cur,X
    2 g# r0 a9 ^, G# x! d8 z
  693. JSR Sound_Init_Proc
    , D/ @! z+ r8 ~- W2 h5 c
  694. 3 o" @6 `3 g# C3 m# ^  B
  695. CLI
    2 O  L+ d; T0 ^9 R
  696. JMP MainLoop) a3 k' s, P0 P: T9 D! A/ X) C6 G

  697. 5 }* ]# |3 |4 m/ E, u' y* s
  698. ;==============================9 i2 Y/ I# K9 @7 k6 D$ [
  699. Time_Delay;延时等待
    1 \) a* B% H2 t; y9 W5 T- u( b
  700. LDA PPU_STATUS; N8 U. ^4 G# V- q9 R4 P' i; U
  701. BPL Time_Delay  b  N5 Y( R3 L( l# x" h
  702. RTS8 k5 D# T6 K. u, y7 z, h

  703. * X! o5 @: v6 U  A* A' B
  704. ;==============================+ R% Z1 i: P+ ]6 P9 W
  705. OAM_Ram_Init;初始化精灵内存
    * Z3 v% ]# e9 S
  706. LDX #$00
    ( b0 e+ O1 N9 Y1 M6 ?) n
  707. OAM_Ram_Init_Write
    ! H* O# g( M; A* o
  708. LDA #$F8  j0 P- Z' \2 Y# q, I0 R
  709. STA OAM_TEMP_ADDR,X
    & U) P1 P7 @# T5 `1 l$ X8 t4 S' |
  710. INX
    ) c/ d8 y- K* t+ k" M0 b
  711. LDA #$F8$ r9 P% C2 J2 M, ]" O
  712. STA OAM_TEMP_ADDR,X
      M  b9 ~+ d0 }4 ^5 f
  713. INX
      u% e9 w; Z2 }$ q. P" K, w+ t. ?
  714. LDA #$00
    ' O+ j3 v+ \" u' X, O. b6 f
  715. STA OAM_TEMP_ADDR,X
    * B& |2 Y$ _3 U! r( h5 l
  716. INX9 V% u5 }* N$ @6 @
  717. LDA #$F87 A8 c: ^1 t) o1 q" s# {: J4 Y
  718. STA OAM_TEMP_ADDR,X
    / l% {# U& m9 `  D( s  S: f) m
  719. INX
    ( Y7 d2 P$ r' U6 Y9 ]
  720. BNE OAM_Ram_Init_Write
    # w5 g9 O3 i% {( R2 R" j! H1 Y
  721. RTS! N  L' D+ p% Y' l
  722. " {/ s& |" w$ c& g* N+ j7 A
  723. ;==============================0 A' D$ Y0 {3 x& ]3 Q
  724. VramClear;初始化图形内存7 B' Y+ ?% r2 ^* P: ?2 L
  725. LDA #$208 t. s; l" K: f/ d: [' H8 K4 p
  726. STA PPU_ADDRESS) u1 l4 X4 r, P7 k5 k
  727. LDA #$00
    : Y2 a3 `  |6 V8 Z" L
  728. STA PPU_ADDRESS
    & s& P" U7 i8 N# F+ Q0 s5 f3 s% H
  729. LDA #$008 `+ ^% s* {$ t. H( q. k
  730. LDY #$00, J% b- s  H7 X3 v" O  p
  731. LDX #$10# M( ?! F' H, N; K
  732. VramClearWrite; l. o9 ?; K  [. N
  733. STA PPU_DATA2 ^; G, y- ~- \( e
  734. INY9 l; c& K; i1 d" Y* L: D
  735. BNE VramClearWrite
    # q- {. g! u+ N0 P9 e  R& x
  736. DEX- v5 o6 a  x  }+ a! ?% C. o
  737. BNE VramClearWrite5 @  Q& u% x/ B( |
  738. RTS
    . K; x7 a) L$ B: @( c. s

  739. , C5 M4 p4 c+ V: d/ J7 w! B
  740. ;==================================================3 N3 r  a9 F1 `( h5 h
  741. ;设置MMC3图像bank/ {' ]. F5 r$ r- l& x
  742. Init_MMC3_Chr_Bank
    9 A" ~0 G! L( E0 t* W" L: q
  743. LDX #$051 S3 Y) x6 T$ `; r" ^( `; J1 j3 B
  744. Init_MMC3_Chr_Bank_Write) O; t; k# i. I; y
  745. STX MMC3_BANK_CTRL
    . \1 z, m9 g% U3 x
  746. LDA MMC3_Chr_Bank_Data,X
    ( O' z; @& T/ A' D
  747. STA MMC3_BANK_DATA
      ], i. \- D- u
  748. DEX
    % y: a. w6 J" F0 \( ]
  749. BPL Init_MMC3_Chr_Bank_Write' Y1 ]0 u% l: K1 Z, j% ]
  750. RTS7 K7 T! Z4 J% o# O, ?9 L9 j4 s, d
  751. ;--------------------------------------------------
    " _9 z) \' S9 w0 n6 x; j# C
  752. MMC3_Chr_Bank_Data- o+ h" w& P' l, l$ c# c
  753. .DB $00,$02,$04,$05,$06,$072 X+ Y& L) R' h0 u4 A) o# F
  754. 4 m3 z" ]. m- c- @& P
  755. ;==============================
    + h8 r. z2 `# s  w% G2 G
  756. VramInit;初始化图形内存
    " j- V7 U, I" @) F
  757. .IF CHR_RAM_ENABLE
    8 ~6 ?" F% v; j4 X9 N* G6 k+ S' z
  758. LDA #CHR_DATA_BANK
    ' p+ W; n5 Z4 S! ~. a
  759. JSR Switch_Bank_A000% m: j7 V9 [7 d6 x2 W
  760. LDA #LOW(CHR_DATA_ADDR)' q9 L* j5 m% m5 C' E8 R
  761. STA <Data_L0 Z. A( N( ^1 {2 e, v) c3 C& z
  762. LDA #HIGH(CHR_DATA_ADDR)
    # B8 Z! Y" m: e
  763. STA <Data_H
    4 A  n4 X* w! D3 |3 N# f7 b
  764. LDY #$00
    " P% A6 e/ Z: `' l9 I' X$ J; m# `
  765. LDX #$20: f9 P! P2 t& R! X9 E: \: l
  766. LDA #$00. K1 j7 q: M! S. C1 e% [0 m4 l2 }7 Q
  767. STA PPU_ADDRESS' |; G* ^; W# r/ V7 C
  768. STA PPU_ADDRESS
      q  p- n1 A9 }" I" y2 N
  769. VramInitWrite
    ! Q+ I* W" G2 m7 }. b9 U
  770. LDA [Data_L],Y8 C) _& n+ G1 p, ~. B$ @* F$ b
  771. STA PPU_DATA2 t1 B0 \$ }7 r' a- i. |
  772. INY
    1 ]" b* E5 q. f# l
  773. BNE VramInitWrite4 w" {% T! ^& i" s7 A1 b( N5 t
  774. INC <Data_H( k' e+ ?% s0 ?6 X
  775. DEX% R5 T4 p) D1 i. {2 L. ?. s, m" ~
  776. BNE VramInitWrite  M( m1 b) g0 A
  777. .ENDIF9 a+ F- C) t8 }' D, X# f0 [6 h
  778. RTS* p3 Z1 X: `$ s4 F$ V

  779. # o) }) N9 [5 e7 z$ e
  780. ;==============================& I+ @. n( d  C0 T3 M* y
  781. ;音乐切换
    ' F# T; `: Z7 L& C0 _& i9 R" Q3 Q
  782. Music_Play_Change% z3 G& m; R; m
  783. LDA <Key_Once, r$ P/ ]2 b; @" d
  784. AND #$FF
    3 n8 b8 S! L+ G/ c% _  q
  785. BEQ Music_Play_Change_Check
    % n3 @$ i4 p  J3 O6 C

  786. # Y# b* `. ^9 U/ Y
  787. ;禁用音乐条刷新, z0 O- x7 g4 g$ x0 _) U5 U: E" \' i1 Y
  788. LDA <Text_Disable_Flag# W+ f1 n" N3 N" k# O* V
  789. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME; U8 p8 E' h. c7 Q5 ~
  790. STA <Text_Disable_Flag7 c, V2 E6 L# U6 P' I" @3 ^: v9 t

  791. ' h# w$ E  B( r9 X* j
  792. Music_Play_Change_Check  r1 b+ G% b6 K4 b
  793. Music_arrow7 r8 y8 E" l; J( i
  794. LDA <Key_Once
    8 C. D6 g* j8 ?8 Q
  795. AND #$0F. T) z  M: y4 A0 e9 Q. w  _
  796. BEQ Music_Play_Change_End, X+ @' {( L6 N, N, B! A, s
  797. JSR Music_Track_Change& I: y5 G7 v4 m  Q  g8 ^! J
  798. JSR Sound_Reset_Proc
    % k( J- @' f  ~+ i
  799. JSR Music_Show. L2 m  m/ R1 `2 Y' r; S
  800. Music_Play_Change_End
    ; C5 x8 X" ?+ B* G  f
  801. RTS
    ' P: x7 Z+ P) z' d6 x/ P

  802. $ C( \" z- @) y6 M5 z) T& B8 _; v$ I" ^" l
  803. ;==============================
    - L# c  g2 h; r! d
  804. ;音乐曲目切换
    / q5 c1 Q: m+ T5 d( T& B+ c: _6 B
  805. Music_Track_Change
    ' D0 e) u" K: d# x* k$ B/ D
  806. LDX <Music_Item_Cur/ J! n' V0 C" P" `- w
  807. LDA <Music_Cur,X1 Z$ j; g) N5 M6 K
  808. STA <Music_Last) v6 _- l8 e8 l5 X
  809. Music_Decrease
    # |  ?5 c; X( K& g
  810. LDA <Key_Once) F- L( o2 c+ k7 F, ~
  811. AND #$42/ |' a+ O- n$ J: C; C0 L% K7 o
  812. BEQ Music_Increase
    + U7 E5 m3 ^# \, P$ F
  813. LDA <Music_Cur,X
    ) J5 \6 Z; A' a; P; D5 G
  814. BEQ Music_Increase& x" k4 c/ f, u0 F  z. b4 U
  815. DEC <Music_Cur,X
    2 o# b' q; `) d7 r/ W" I) }
  816. Music_Increase6 d- e+ u# p; `3 V  g. I% \
  817. LDA <Key_Once$ z8 w) N1 a; |+ O' t7 {; N
  818. AND #$814 v6 k: a% k4 h
  819. BEQ Music_Decrease_10. m, Z! ]& h* l6 }: z- q
  820. JSR Set_Sound_Total
    ! x7 {1 Q, j! W8 ?& n6 g, e8 E
  821. LDA <Music_Cur,X
    $ G# \/ x2 y: z+ j- E5 Y7 n
  822. CMP Music_Total
    8 Y9 J5 D% l" f: G4 i2 V! [
  823. BCS * + 4. d) o6 J$ W3 @( ?8 W8 l4 M$ c, ^
  824. INC <Music_Cur,X+ R# h1 ]% M( ~
  825. Music_Decrease_10
    " A, ]/ p/ f  x
  826. LDA <Key_Once5 _% l( C/ ?# k
  827. CMP #$04* h9 ?, g/ o6 L" h* A8 y
  828. BNE Music_Increase_10! w) a3 ^* ?9 o' g
  829. LDA <Music_Cur,X
      y  y4 P4 Q* f
  830. CMP #10
    ' D* E5 j( Q) q8 \8 h( H# U
  831. BCC Music_Start_Song_Min
    * Z7 A) F& u: G1 o7 w) p& j
  832. LDA <Music_Cur,X, q* B9 S. i( z  M% P% V8 V
  833. SEC
    8 O( W1 L' Z+ L4 X; w
  834. SBC #10
    9 ~; v  E6 r# Y3 q: @, n
  835. STA <Music_Cur,X
    " a( q6 W. [' N6 p: P% S
  836. LDA #$00" t$ K; F4 h2 E
  837. BEQ Music_Increase_10
    & f$ D, N# e' y' J2 \* l
  838. Music_Start_Song_Min8 `: R* t$ \: c  {& I
  839. LDA #$00& c, P* Z& d& U8 j- P
  840. STA <Music_Cur,X- _. [  `$ W7 G/ G: G# V+ T
  841. Music_Increase_10
    ( o( u, F6 q! q7 Q
  842. LDA <Key_Once4 l, }9 l2 v4 C* ~# R) b
  843. CMP #$08* ]+ ]1 M8 p; U0 j1 \/ c1 n
  844. BNE Music_Track_Change_End- W0 W/ [- k/ {5 P# I! k
  845. LDA <Music_Cur,X
      q  G& N" H) f
  846. CLC# K/ c; j1 K0 |% D" f
  847. ADC #10
    - }/ n7 A" i* M
  848. CMP Music_Total9 r5 C$ z) V- t4 x/ w6 X* d4 U
  849. BCS Music_Start_Song_Max
    ) ^& t: {6 g4 f8 y) m, [) e/ F
  850. STA <Music_Cur,X' v4 ^, }( K) i) m6 T) S/ H& q
  851. LDA #00$ K; `! x$ m$ ]0 q8 h# E( w
  852. BEQ Music_Track_Change_End
    * R' C& Y. T" [: ^3 s2 e) L" v
  853. Music_Start_Song_Max
    - I5 s1 L8 J* n( g- L/ [$ e# K8 O
  854. LDA Music_Total+ V: u. ~. t# M7 I
  855. STA <Music_Cur,X) t* t+ c3 `( o$ V
  856. Music_Track_Change_End
    : c: e0 S6 `: ]- E
  857. RTS/ L, y. ~7 Q1 [
  858. / B5 u  v2 G0 |7 F) `0 G" O) ?
  859. ;==============================
    0 S. }; W" P4 l
  860. ;按键处理
    % o) {! s: j7 H5 o7 F1 A7 B
  861. Key_Proc2 [0 {0 T5 ]' T* o8 q
  862. JSR Key_Scan
    + r, y. {- o  }
  863. LDA <Key_Keep) b+ ^7 z0 t7 q
  864. STA <Key_Temp" I$ J& \; P; d6 S
  865. JSR Key_Scan# t& K: |7 }5 G. }$ |" z; `
  866. LDA <Key_Keep, U& J0 n- \( u
  867. CMP <Key_Temp7 K/ o# m* Q# {0 b
  868. BEQ Key_Get_Once, l  M2 z+ O6 K/ j
  869. LDA <Key_Kemp
    2 w$ v& e3 `1 j' O/ S- B& W2 [- b
  870. STA <Key_Keep& N( O, k* t" m0 ~( ?5 U/ Y
  871. Key_Get_Once0 f! v. S1 f3 c) \% l) S' K+ g- X
  872. TAY
    ( L+ g  W, E9 j/ p
  873. EOR Key_Kemp# Y. U5 a( f+ `' X+ ~0 z
  874. AND <Key_Keep! |5 P6 V( c8 H$ R8 z
  875. STA <Key_Once" P! K+ Y5 D) x4 t
  876. STY <Key_Kemp
    $ V& q4 A4 y: X* g+ e* g1 j1 H
  877. RTS
    ( h4 y% ?+ Y* B! |6 l6 h
  878. ;------------------------------+ O& ?$ \+ H7 i' n* r! _9 \
  879. ;按键扫描
    - D" t7 V# Z/ k
  880. Key_Scan
    1 V, K4 u. k( O% f# g0 {+ I
  881. LDX #$01( F% m. A* x1 j% @- h) c" x
  882. STX JOY1_FRAME7 a& y! ?  i6 V5 @1 x% l1 _
  883. DEX$ U  s$ ?- v4 `! _
  884. STX JOY1_FRAME: X9 a* W- e: ?$ }3 e: x
  885. LDX #$08
    / X- \, l8 B( i  ^. X. Z+ O% @" I
  886. Key_Value1 F) j, A9 Z. p+ H0 j9 y1 d0 N3 U
  887. LDA JOY1_FRAME
    & [2 t6 w' n2 u
  888. STA <Key_Getv$ d3 B7 x+ J8 ?) Z- @4 H8 r
  889. LSR A
    4 |$ k3 y) I4 x4 I! A
  890. ORA <Key_Getv# Z7 R$ }& N4 d- q2 n
  891. LSR A
    9 N/ _3 V! E* S" ?+ y( J
  892. ROL <Key_Keep4 c& c! v& I* A
  893. DEX% b% s3 M4 \0 K8 C5 y$ a% _) o
  894. BNE Key_Value4 f$ P; I  q) j! Z
  895. RTS
    " D( b8 i; D4 E  `/ \2 L
  896. ) R% Q1 }9 W: _9 ~+ m% X( c5 h- w  i
  897. ;==============================
    1 I3 Q: J( l+ k# N' A
  898. .IF SOUND_BAR_SHOW_ENABLE3 [& X* s9 I! u: C/ l9 F4 F
  899. ;音乐条显示
    # [* `1 @: l3 k
  900. Music_Vision
    - Q) b( t$ m" ?$ ~% }
  901. LDA <Text_Disable_Flag
      j$ }  x$ _. |7 P9 g
  902. AND #TEXT_DISABLE_ITEM6 [6 P7 ~- e6 c+ D0 F  y
  903. BNE Music_Vision_End6 \1 C2 q' X# d( U
  904. AND #TEXT_DISABLE_BAR
    ) m/ F3 l  @. Y' R
  905. BNE Music_Vision_Set8 w& O. e/ e; z. K3 ~, A4 f  ~
  906. LDX PPU_Cur
    2 q% Z4 Q: ^/ E9 j: H: W
  907. JSR Music_Animation
    ( j+ Y& F3 s/ f& j; p
  908. STX PPU_Cur
    : ]$ P. e* e- A$ J' d, I1 i% T' P# s
  909. Music_Vision_Set
    ! ]& {& L9 @9 s8 R
  910. LDA <Text_Disable_Flag# ?/ R7 M( Y& Q, o
  911. AND #TEXT_DISABLE_BAR ^ $FF
    : M  N; g6 h+ [0 M2 O) e
  912. STA <Text_Disable_Flag0 c7 c2 A( t: [
  913. Music_Vision_End' Q( u' Q$ b( i/ `1 P
  914. RTS
    " C: l7 R, c- W2 y" s
  915. ;------------------------------6 b  j- x1 G; \3 ]: Q
  916. ;音乐条显示处理
    ( h) L5 P. D8 ]# J" P7 H
  917. Music_Animation
    6 l* F3 D$ @' w& X- ?& e" ?7 z
  918. LDA #PPU_MODE_CNT_LINE
    ; S2 |% e" Y/ l( K) K$ Z$ z
  919. STA PPU_Addr,X/ D) e1 I  A3 H7 ]9 f+ x* E  W. s
  920. INX$ h% ~; P1 y+ j1 n2 g9 g
  921. LDA #HIGH(Sound_Bar_Pos); c& c: w& y' x  I; z3 W. M4 B, v5 h
  922. STA PPU_Addr,X
    - S3 G% R- P9 c; Y3 U3 x
  923. INX
    + a9 N) W, {' `/ V0 i
  924. LDA #LOW(Sound_Bar_Pos)
    ) R' f0 D: D( S: e
  925. STA PPU_Addr,X2 f( ?2 W, f4 F* Q. ?$ W0 J
  926. INX
    ( ^; Q, V5 d; G* a
  927. LDA #$08
    9 Z# U% r$ ^( s1 y. l) n* N: _, m
  928. STA PPU_Addr,X
    5 a) B3 s2 i2 g1 U' L- o1 R$ Z7 U- L
  929. INX6 \9 {2 j& G, h8 i: u
  930. LDA Sound_Bar
    6 V6 p% k2 }7 B5 f+ }& S" d7 Z
  931. JSR Volume_Convert
      A4 {+ l3 z6 u* t2 ^$ Q7 t* _

  932. 1 _5 v1 u7 O, B! q! m/ s* O3 H
  933. JSR Volume_Set_Cnt( n  t) c. @7 \, k/ F. z
  934. LDA Sound_Bar+$4
    * u# U: o* r& F, b+ l
  935. JSR Volume_Convert
    + y2 d) x; q$ X8 Q5 X/ u% N

  936. 1 M, U4 ^1 a! q& K% p* l; B
  937. JSR Volume_Set_Cnt1 r* X: q9 |/ n; e
  938. LDA Sound_Bar+$8" w+ t# P3 m) Z0 K: v0 N" n  X
  939. JSR Volume_Convert
      _. I% n' `6 \

  940. ; h, _. x+ F' E2 T) [3 @1 W; l
  941. JSR Volume_Set_Cnt
    ( L( [! ^6 D+ |) H0 s8 l" \
  942. LDA Sound_Bar+$C
    ) S$ @# K1 E# O: F6 r( h
  943. JSR Volume_Convert
    ( s& P% v( ^6 m2 g
  944. 6 z$ L' [( K1 Q. d. s/ ^
  945. JSR Volume_Set_Cnt
    8 r2 L7 `) L. N/ T, i+ f
  946. ; q4 r' {6 d; K6 a1 q5 Z; F$ q
  947. LDY #$10
    ) x, _: u8 I% W# R
  948. LDA APU_STATUS
    ) t8 ?( J: W% ~$ \
  949. AND #$10
    2 p% H$ j, B1 A# y
  950. BNE Volume_Count
    & i  g  B+ K) H, w& \
  951. LDY #$00
    & H; M* f) H3 n9 |* S1 ]% g
  952. BEQ Volume_Count8 [5 b6 C; r" \" ~
  953. 5 }+ z2 ?/ Y6 ~) u, [* |! a2 D- v
  954. ;------------------------------
    * b' s& |- F4 b. o
  955. ;音乐条处理6 s3 l3 N  w6 I' k
  956. Volume_Convert
    / o, p1 c, Y. h9 Y# j5 k/ X- [( _
  957. AND #$0F
    3 c# g- C* W4 J  v7 }! j
  958. TAY
    6 _# c8 a! ?& m# l7 Q# S
  959. Volume_Count# G/ u8 B7 s- j- A" W8 v
  960. LDA #$08" h: A" s3 j; @
  961. STA Sound_Bar_Cnt
    , k2 ~+ B+ i  U6 l, ~  J$ `  S  f
  962. Volume_FILL1 S8 i% b5 b( D6 f0 Y, _) l
  963. DEY
    % h0 Q* p0 A+ ~# s* ~
  964. BEQ Volume_Half
    / ^. a8 V3 A9 \( w( p2 h# W( o
  965. BMI Volume_Empty
    & W) Y, }! |1 ~# m/ ?0 K. f2 k
  966. DEY
    + s# @& m, H8 R8 R) w" {
  967. Volume_Full6 |0 l0 s( ]+ |% m/ E
  968. LDA #$16; D6 u$ w2 H  \* z% Z9 i
  969. BNE Volume_PPU
    ; K0 L$ R& }) R8 {+ a: h
  970. Volume_Half" w( @  R* T( @; r
  971. LDA #$15& a8 A- V# {/ l. ]- z3 n
  972. BNE Volume_PPU) C: I$ K* x* W! B
  973. Volume_Empty6 V' f) G& a, }  V1 |
  974. LDA #$144 ^1 Q* _2 {# U+ l% Q! Q, Z; n/ a
  975. Volume_PPU
    6 f2 K* t/ q7 E! J- P7 o
  976. STA PPU_Addr,X
    ! T2 b9 Q. Z; A3 g! o- y
  977. INX- G5 v( S# V7 ~+ ^) x8 R' a" a: d
  978. DEC Sound_Bar_Cnt
    ' q0 T/ ^. @+ I6 v
  979. BNE Volume_FILL
    4 U% z; x! J, F; L. z8 ^. ^
  980. RTS( p$ u! C" l1 F( {0 y; l4 A
  981. 0 y( ~# o8 V0 i% u" \. ?5 `
  982. Volume_Set_Cnt# a) {8 L' l1 J3 A& N4 x
  983. LDA #PPU_MODE_CNT_LINE_NEXT% }, u% U( u0 k5 `- n% n. P
  984. STA PPU_Addr,X
    1 p9 l' _$ P5 L" @+ j( m% D
  985. INX
    ' Z* L3 X* G7 r( N; a. K  |/ B6 `
  986. LDA #$08
    5 r2 N5 ^& E5 I& N3 R, W
  987. STA PPU_Addr,X! g3 K! d) B0 w
  988. INX$ R, ^" t; e$ ~3 x: X  p
  989. RTS
    ) Y" d7 Q" R" b. t, a/ F8 m
  990. ! A% r7 y" a+ P( W
  991. .ENDIF
    " K# }, K" J, f5 t: u) Q6 Y

  992. & @" Y4 r& B, e  _+ X4 \
  993. ;==============================! N" ~" d3 S' X3 Y) {* ]
  994. PPU_MODE_CNT_LINE         = $FA    ;行计数写入
    % o3 A2 f. b* p
  995. PPU_MODE_CNT_LINE_NEXT    = $FB    ;转下行计数模式1 o# h! \; s3 m. F+ `' ?8 a
  996. PPU_MODE_CNT_CLEAR        = $FC    ;行计数清除1 K& w( Z/ ^: u* t; [/ V
  997. ;------------------------------
    # Q" z# U5 g8 m* f1 W2 J; |% Q- R  E
  998. ;PPU处理
    & d3 z+ I0 w( A0 f$ F# V
  999. PPU_Proc; p; G0 X  [0 p/ n
  1000. LDX PPU_Cur. D+ G3 P4 V5 T" ?
  1001. LDA #$00, c) Z( S# W4 ]! u5 ]3 o/ b1 Q; \
  1002. STA PPU_Cur
    / C) u0 ?. h  X% u, F! G
  1003. STA PPU_Addr,X
    4 Q, r: L# O1 \5 b- A
  1004. LDA PPU_Addr, }! _5 y0 p7 F; ?3 ^
  1005. BNE PPU_Proc_Beg
    2 _7 o- R) D  @& z
  1006. PPU_Proc_Ret
    . O$ G6 L, u8 X
  1007. RTS
    0 b( x+ r; R. X2 K
  1008. : r/ t( @/ `3 |6 e! L1 Q
  1009. ;------------------------------: l% H+ o$ G9 p4 F3 e. }; @* L
  1010. PPU_Mode_Return_Cnt  ;转下行模式
    . X+ Z8 g8 I6 _9 P; i" P
  1011. INX# _+ y+ Q* P  |9 o0 A
  1012. LDA PPU_Addr_L% @1 m0 [  h9 \1 k1 Y  W
  1013. CLC2 F3 s- D* M3 E0 X' O' _2 c0 o
  1014. ADC #$20
    ) t' q. ^- ~- T/ D
  1015. STA PPU_Addr_L3 c$ d! y- R$ x0 ]  v, C
  1016. BCC PPU_Mode_Return_Cnt_End
    ! @5 o! Y- y0 q. f# `4 |
  1017. INC PPU_Addr_H
    ; B! i5 \1 c4 g8 P- B' \
  1018. PPU_Mode_Return_Cnt_End# z' X6 k! X; i
  1019. LDA PPU_Addr_H
    4 l% G  e% {5 L5 o5 y5 M+ N
  1020. STA PPU_ADDRESS7 g5 \5 R  a8 }) N& k( g
  1021. LDA PPU_Addr_L
    5 K- Z; x, \6 _
  1022. STA PPU_ADDRESS4 `8 L! [, x$ ]2 i" P: E7 M
  1023. LDA PPU_Addr,X
    : a, Y- u9 C2 K" x: P) Z' g" q
  1024. TAY4 V' b0 F% W* U2 g
  1025. PPU_Mode_Return_Cnt_Write0 x& A; x9 C! [8 l- g1 U
  1026. INX% n  D( U0 O/ d5 s  t' _$ V
  1027. LDA PPU_Addr,X
      m& T& S/ e2 Y: m0 F1 Z  a
  1028. STA PPU_DATA% d2 f8 ?4 X& \2 C7 G' a+ g' e/ T
  1029. DEY
    7 i( l) C! i( N/ n0 v
  1030. BNE PPU_Mode_Return_Cnt_Write& ~% q9 B  W; L& N' t
  1031. JMP PPU_Proc_End
    $ B! f' f& e% A, }1 y) p

  1032. % }0 y+ ~: ]2 a# b- ^4 N, p) j" `2 O
  1033. ;------------------------------
    ' D5 R; ?! X" _$ m
  1034. PPU_Proc_Beg  ;处理开始6 f  y& n% Z4 A- C; c  f. X# K
  1035. LDX #$00: Y" Q3 A* k. H( e, \2 `
  1036. STX PPU_MASK. T# w- R" ]' G9 b5 t. E
  1037. ;------------------------------
    ) K& Q. H2 c- v* `
  1038. PPU_Mode_Select  ;模式选择- @) l" i) l& F7 d. G4 o
  1039. LDA PPU_Addr,X
    2 H! t! M. J8 F+ g  F$ q
  1040. CMP #PPU_MODE_CNT_CLEAR5 _( c. P" N7 I% b( o
  1041. BEQ PPU_Proc_Clear
    # j& U# ]. i, }
  1042. CMP #PPU_MODE_CNT_LINE" T( d. M( @; V  A) H% N& e) [1 Y
  1043. BEQ PPU_Proc_Cnt_Line2 l0 ?$ V! }/ O
  1044. CMP #PPU_MODE_CNT_LINE_NEXT: o& t# v- _( q. L8 H# ?
  1045. BEQ PPU_Mode_Return_Cnt
    , D# g1 f' j7 k: i
  1046. JMP PPU_Proc_End_Write
    % B! @' r. B* Y6 C8 f
  1047. ;------------------------------  D  K3 p/ L2 J. |0 Q, |
  1048. PPU_Proc_End  ;单行写入结束
    . G/ l) \2 S, }- p' S
  1049. INX
    ( y4 T; N) y* G$ j4 q" T0 w
  1050. LDA PPU_Addr,X$ i; h! M1 t, i3 D' M
  1051. BNE PPU_Mode_Select
    & s; N* L& Q* y$ o$ ^
  1052. STA PPU_Addr, M6 _0 Y- [" L' r
  1053. JSR Update_Palette_Color
    # X* O) @: y! q0 {* Y

  1054. 0 ?' d5 s/ c% u: ~; W0 Y  j
  1055. PPU_Proc_End_Write
    ' X9 Q8 t% s( T* p
  1056. LDA #$00$ v6 S, }3 [3 e1 S: n
  1057. STA PPU_ADDRESS
      j3 a, W8 A& r# ~
  1058. STA PPU_ADDRESS. W9 K1 E% i" }. |& o$ U9 z' t% G- `
  1059. LDA <Text_Disable_Flag, N. R/ g- J# F% q6 ~2 ?
  1060. AND #(TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_RAM) ^ $FF
    5 N$ e- o" x* C/ u. j6 M
  1061. STA <Text_Disable_Flag
    0 v& r5 z& ^/ _) `. W
  1062. LDA #Scroll_X& o5 a- X5 r) t1 m2 e  p
  1063. STA PPU_SCROLL" d2 H- b& B* g2 Q) n0 v
  1064. LDA #Scroll_Y
    * t, ?: v! I% r/ t4 p
  1065. STA PPU_SCROLL% T; R! g% d: x3 n2 j
  1066. LDA Screen_State
    3 C& X# S( ]: @9 F; U+ z
  1067. STA PPU_MASK  W3 J6 v/ J! ^* W' [7 R
  1068. RTS
    ( r" p- [5 Y9 I7 C* U
  1069. 9 I# r2 o2 @8 V$ w, G. r' i" J2 e! x
  1070. PPU_Proc_Clear
    0 C" B  U, o) c! L- Q
  1071. INX
    ! f8 |2 a# P3 t1 A% ]6 l/ O$ Q
  1072. LDA PPU_Addr,X/ A3 v/ m$ [) p7 V
  1073. STA PPU_ADDRESS
    " a, p6 h, J0 j) j
  1074. INX. Y& }. }  R& l8 x  H* m- R4 X
  1075. LDA PPU_Addr,X
    ! P1 c: e1 n: _- P+ N' E
  1076. STA PPU_ADDRESS
    0 @# y' h3 B4 A* ^* O9 ^% n8 E
  1077. INX
    * s7 r& ~5 l" {% C1 v2 i' `
  1078. LDY PPU_Addr,X
    2 E/ p: A. F% b# u4 ]& P
  1079. LDA #$00
    $ z$ o9 y3 V" a# L. q
  1080. PPU_Proc_Clear_Write7 c- N5 C- M; Y2 `! S5 q; }$ t  e
  1081. STA PPU_DATA  O% d6 e- [- j/ Y9 A
  1082. DEY
    # D) V' H% T+ ~6 l8 W: I6 f+ f
  1083. BNE PPU_Proc_Clear_Write
    1 z# Z% v2 d' p8 ~
  1084. JMP PPU_Proc_End! H$ R; m+ y# Y- \- I
  1085. . G# H" h# r' [6 ~% M; D6 I" ?
  1086. PPU_Proc_Cnt_Line
    : y! Z& s9 j2 r
  1087. INX
    & T' W) n3 Y3 l6 B  m
  1088. LDA PPU_Addr,X$ C& v! E. N& V! H8 T$ j" D
  1089. STA PPU_Addr_H! C% s% ]( d7 Z; _& L+ ?
  1090. STA PPU_ADDRESS
    6 v1 ^9 d* u5 R$ ?! ~
  1091. INX
    - L- G( q+ n0 C( \+ b; y+ n3 Q# B
  1092. LDA PPU_Addr,X) |' e! W+ N5 m3 ~2 i
  1093. STA PPU_Addr_L
    . V' B! B8 J' X% [  @! `% _) f1 W' x
  1094. STA PPU_ADDRESS4 h( G- l" y3 _
  1095. INX$ l7 ^- W: Q& b: @! Q) _& r* \
  1096. LDY PPU_Addr,X" o; h5 T' }6 O/ G! z
  1097. PPU_Proc_Cnt_Line_Write
      ^  R1 v- r, _- m' Z+ ~
  1098. INX
    6 V/ K. f- |! z9 n5 _
  1099. LDA PPU_Addr,X
    + ?$ T3 u& I* w: |9 R
  1100. STA PPU_DATA; x' x  e: n: ?# R
  1101. DEY2 `  H9 U) l5 S2 e; |( c! j4 o* W
  1102. BNE PPU_Proc_Cnt_Line_Write
    , {& K: t1 R/ U" Q, Y6 R1 x# o- S8 h
  1103. JMP PPU_Proc_End
    / Z6 ~. t6 i* K  U* c5 {# X

  1104. " G4 j1 o9 j2 m5 L/ N
  1105. ;==============================: I& p1 k; e2 S: A7 d
  1106. HEX_To_Dec;十六进制转十进制, ]6 v" [6 M3 A0 w) q3 T' P' E
  1107. STA <HEX_Data, n& H4 [+ O; c, r5 w
  1108. PHA# h+ u$ [; |7 u/ S
  1109. TXA
    4 ]4 V- C2 ~- m, B) N* V; _& h
  1110. PHA
    7 i+ h& l& T6 B0 D, ~/ g+ j7 Z
  1111. LDX #$00
    4 r' O! A, e) D; }
  1112. LDA #$00
    9 ~4 q& j# |( D
  1113. HEX_Cln
    ; Y3 h4 z7 O* v. P1 O! w" `) C" Q
  1114. STA <DEC_H,X
    7 D% g7 w3 ?" ~3 q, M# v# e3 J/ y
  1115. INX* k  Z/ m3 Q4 ~9 N: F& b
  1116. CPX #$03
    ; ~; G: w- w5 n. N. E
  1117. BCC HEX_Cln
    2 x0 m+ s( J" j+ y# c
  1118. LDA <HEX_Data
    , X& Z. C8 o& k3 Q( `
  1119. ;------------------------------
      u% z$ R# |( M" c. e, {
  1120. HEX_100
    - s1 P+ p7 {2 E; n  I; k
  1121. CMP #100
    ! ]; I4 f- B0 K. B3 m! n# u
  1122. BCC HEX_10
    6 H  p! y( ?3 f5 H7 b6 Y2 ^3 s
  1123. SEC
    ; E( N9 f8 F; n5 y" [
  1124. SBC #100, a! p. w( e8 W( Y5 \% V
  1125. INC <DEC_H* g8 R4 Y8 W' _3 X# s
  1126. BNE HEX_100
    " H  k! ~- [% w% @7 C
  1127. ;------------------------------# E5 Z% ~  N! q. a# H
  1128. HEX_10- O: }" h# u! \/ K4 j
  1129. CMP #100 H7 P" Q2 t" K5 q
  1130. BCC HEX_1
    # s4 P6 |- _0 i
  1131. SEC
    ; `2 I. T: v) {" y# {& }
  1132. SBC #10
    5 M+ R, F' |; K4 x( S* S
  1133. INC <DEC_T
    . M2 s/ \. }7 C3 z
  1134. BNE HEX_10. ?9 e2 Q% g& F: q& i) i+ x# j( Y
  1135. ;------------------------------
    , m0 l6 y1 P$ A* V
  1136. HEX_1  Y2 G; F5 D5 t( M2 l. j
  1137. STA <DEC_L
    $ l* U, w+ H9 `: Z. _- J4 o
  1138. PLA
      Y# J; V5 f7 Q1 i, \, s3 j
  1139. TAX3 z7 I" ]$ J8 ?9 E6 s1 t1 {
  1140. PLA
      D& K& v7 A# P+ h! D! l! L3 h. b
  1141. RTS% a* `, h- k9 }" h# M3 W
  1142. $ ]7 k9 T. b' J# R; U5 v* ^
  1143. ;==============================
    3 h3 ~' v9 C1 b, ?; d* G' ~
  1144. ;音乐曲目显示
    - W9 T7 o1 m! t, [7 |  d& \" p
  1145. Music_Show% |! f7 Z& z5 V+ h' I, ^: u8 y( q3 W
  1146. LDX <Music_Item_Cur/ Y) d! Z# L8 K1 {" G
  1147. LDA <Music_Cur,X
    3 n2 }, U9 P; l1 W/ Y* c
  1148. CLC
    ( n" B$ N) w& B3 Q+ I
  1149. ADC #$01" W! Z2 }' q' ?5 F
  1150. JSR HEX_To_Dec
    ' m: v% N! G8 u8 A
  1151. LDX PPU_Cur
    / a! o, J+ M+ ~" V
  1152. LDA #PPU_MODE_CNT_LINE( \% t  F7 i' V7 C, k1 r" x& P
  1153. STA PPU_Addr,X- ?" O; L, e* i6 b. i" b
  1154. INX
      x7 [' n/ w% v) M# y" T
  1155. LDA #HIGH(Play_Index_Pos)
    ) t8 J% `4 s  A- y) k
  1156. STA PPU_Addr,X4 S& `$ l! ~% e" J  s
  1157. INX8 p. L9 O" f' d! ]* f- }. \( u1 }
  1158. LDA #LOW(Play_Index_Pos)+ k2 e, l4 k1 A
  1159. STA PPU_Addr,X* |' q) P7 {( S" Z0 t
  1160. INX
    ' |: m( m' I( F; R

  1161. 3 z* q; l; B. t  V
  1162. LDA #$07) [6 u" `- O# l, b! {. z9 ~8 {7 s
  1163. BNE Music_Show_Length1 n2 m4 x; J) D( S" r+ B! ^
  1164. ; X! Y, X5 S' D& d: l
  1165. Music_Show_Length& Y6 H7 D! W4 p6 V- i
  1166. STA PPU_Addr,X
    / }& ?- s' C5 T( Y
  1167. INX  U9 f! @1 \9 a8 h# ^: ^
  1168. 0 `+ c% K& X0 o$ X# t# E* n
  1169. LDA <DEC_H
    0 z1 B5 d6 |; g; R! B$ h
  1170. ORA #'0'
    7 g0 j$ s' d- H& y2 l
  1171. STA PPU_Addr,X, }, s7 L7 x- U( r3 \& U* F
  1172. INX2 @& ]* e' g- X

  1173. - w; Q7 N- u5 L+ E+ D( {
  1174. LDA <DEC_T0 l  ^  e; |  x+ n9 |( e
  1175. ORA #'0'1 E- N. X% u. b$ M
  1176. STA PPU_Addr,X
    ' @* `" r6 _4 i+ S& n% I0 \9 ~
  1177. INX' y; N$ O0 b+ ?+ t7 \: f

  1178. + s9 s- g/ w! [" m) S' s
  1179. LDA <DEC_L1 T' u; t8 `5 z. b
  1180. ORA #'0'# N( D, b( r! z, m1 i- B( W
  1181. STA PPU_Addr,X$ D7 I& m8 s& v. v7 p- f
  1182. INX! F: ~, G! P) E  p& w9 x' G  ~# N

  1183. " _, ^" q- E% P/ m
  1184. LDA #'/'; r0 S$ f$ f) e7 O! V# a
  1185. STA PPU_Addr,X
    4 o# d( A( G5 Q1 |
  1186. INX, s4 B' f2 o- H7 y$ w# Z; j
  1187. Music_Show_Total
    # H* ^* V, R5 t5 A: Z$ P  ]
  1188. LDA Music_Total, x) o8 ^6 k# I: z! x' t) H- Q  e
  1189. CLC
    8 t" X1 v/ x, T: E1 i5 e! k) b
  1190. ADC #$01
    + f& j7 x0 m: _6 i2 j2 L/ _2 L
  1191. JSR HEX_To_Dec
    6 L3 t+ v" C5 e0 \# r3 ?( D1 X
  1192. 6 }! M& }2 ?% }4 \6 e; [$ R6 T0 e
  1193. LDA <DEC_H* R7 ^& x' A. e: K! Q' `; B
  1194. ORA #'0'
    ) q$ Q9 s2 o5 ]& \" a3 Q) K' Y! R9 I
  1195. STA PPU_Addr,X
    7 J  E* H1 N8 O
  1196. INX
    : n& w" K$ Y* g: Z
  1197. ' m8 f2 |0 _) z
  1198. LDA <DEC_T
      C/ n: f1 }: X
  1199. ORA #'0'. z4 o$ ]0 t+ L; @7 X
  1200. STA PPU_Addr,X0 M0 E7 @% Q1 z- N5 f
  1201. INX
    ) D# l: }7 O9 h( Y' H
  1202. $ S0 u8 \6 b) e3 y5 _
  1203. LDA <DEC_L
    + M- M% I$ F- g! f+ b* l
  1204. ORA #'0'9 _- ], G5 a/ z0 T
  1205. STA PPU_Addr,X
    # b! u( c2 o, `! ?+ c6 i
  1206. INX3 d; D% Y. c5 \5 X/ h: c7 Z0 ?2 `  L1 f2 B
  1207. ' x( V: Z& i  H: ~7 r
  1208. STX PPU_Cur
    4 [) a# s, W+ l
  1209. Music_Show_End
    ! n+ P( r& I9 s/ V8 P
  1210. RTS$ c8 p5 u& b# Y2 ?- b' u

  1211. ! g6 T6 p+ \5 n6 ~
  1212. ;==============================
    % H. J* r4 w& f1 N# x$ q+ n4 F
  1213. Time_Show;播放时间显示4 c& E& s. Q+ Q2 H( m
  1214. LDA <Text_Disable_Flag; q% g/ ?  ]2 }1 e
  1215. AND #TEXT_DISABLE_ITEM
      C' E3 K$ u/ a8 S( t7 V
  1216. BNE Time_Show_End8 w9 J3 F  J$ U4 ~+ J7 r
  1217. AND #TEXT_DISABLE_TIME
    8 K6 x8 K3 I9 `" B- d' C
  1218. BNE Time_Show_Enable
    / X5 d  g. ^/ o! Q% r

  1219. # Y0 c$ n7 u$ o% V$ l& M
  1220. LDX PPU_Cur% U7 K. ]! \" k' b3 c' n
  1221. LDA #PPU_MODE_CNT_LINE
      l6 t* s: F3 E# N# {; q) E* U& O
  1222. STA PPU_Addr,X4 `! b' i+ l" b9 V0 p8 G* ^3 V
  1223. INX
    1 Q' L4 M% R/ A8 Y& u- @
  1224. LDA #HIGH(Play_Time_Pos)
    & T- t7 N$ S5 S9 R* r
  1225. STA PPU_Addr,X7 e# E2 k# e; `% q6 S( ^( R- {
  1226. INX, k/ ?! R5 t/ s7 i1 C# d3 j) j3 c) n
  1227. LDA #LOW(Play_Time_Pos)
    ; N& n& ]: \6 t- j
  1228. STA PPU_Addr,X
    4 O% L, J  c. N3 U2 w5 h' ]7 l) H
  1229. INX2 ^% A* z, @& F# C7 ]2 r
  1230. LDA #$08; Z7 i( s) s; q" m0 i" v
  1231. STA PPU_Addr,X
    ) U: c; I; A4 t' ]  \+ E
  1232. INX5 E8 v1 M. q* M2 i! E
  1233. Time_Show_H
    : y- g3 X, k5 K7 ~) s1 d' W
  1234. LDA <Time_H/ n  e$ w+ H6 B. P' f3 O. V
  1235. JSR HEX_To_Dec% R3 w/ A3 ]5 {/ F! P2 @% {
  1236. JSR Time_Digit
    - e) P- {$ ^$ n. d
  1237. LDA #':'
      Y2 J3 o- t, ^8 L. j
  1238. STA PPU_Addr,X- L- b  N7 z. n6 E1 L9 j. y" E
  1239. INX5 z0 m) h# D3 J/ C. G' z5 J
  1240. Time_Show_M
    6 u& ^* q; q0 n! F
  1241. LDA <Time_M
    7 s" o& D: X' k
  1242. JSR HEX_To_Dec" }  e! _% N; m6 u1 z
  1243. JSR Time_Digit( {* K; \  `) M7 d5 w' m
  1244. LDA #':'
    0 y( s1 F" }. `. v
  1245. STA PPU_Addr,X$ s+ U2 t. B8 n2 n+ V/ v  B0 I& ~
  1246. INX* R9 z) x$ c8 L0 p) }
  1247. Time_Show_S4 y4 G6 b# k# u/ c8 h( E
  1248. LDA <Time_S0 x& {! \: Q6 i1 N. ]
  1249. JSR HEX_To_Dec
    ; F. b$ j* S+ E$ b
  1250. JSR Time_Digit
    9 C9 z+ t! V' ~' m; `! m, f" n
  1251. STX PPU_Cur
    ' q1 v( e0 k6 d0 r1 q
  1252. Time_Show_Enable
    % U* n) W- \; c
  1253. LDA <Text_Disable_Flag
    9 {: D5 l" p: Y: P9 w! `
  1254. AND #TEXT_DISABLE_TIME ^ $FF
    & v. l3 P6 ^0 O" c. C7 v
  1255. STA <Text_Disable_Flag1 G, Y# L" p, W- T) S! X
  1256. Time_Show_End
    5 b, \! A/ q( }9 a7 e  K
  1257. RTS
    7 D, C9 h9 e; ~8 B& t3 q5 n* b

  1258. - n7 F( |# m* N+ A, L" M+ u
  1259. Time_Digit
    $ h+ O) D$ y& ]" O9 ?0 _2 J
  1260. LDA <DEC_T
    7 c" M& [" R4 I) ~$ ]+ T
  1261. ORA #'0'/ v, F8 F4 w. d- `* i( p0 A3 F
  1262. STA PPU_Addr,X% a, o# c' }! t
  1263. INX
    $ z% q) X, H& A/ t& e5 J. y/ M) G
  1264. LDA <DEC_L+ }# n- j3 S7 y& ]+ @
  1265. ORA #'0'6 h/ }: N8 l+ [8 x
  1266. STA PPU_Addr,X/ J0 S- @  s3 r' r5 v. U3 r3 f; B
  1267. INX
    - H0 k+ \0 S, c
  1268. RTS. N% j1 P, T7 L# x

  1269. , F* s& n- t- T9 U
  1270. ;==============================
    2 n" ^0 K& q2 J/ a* B& }8 Z: z
  1271. Time_Count;计时( a; P  h# @5 d
  1272. LDA <Music_Stop_State' _' N7 S% |+ u( i4 E
  1273. ORA <Time_Wait_Cnt6 b2 F/ s% o! y- J% m1 C
  1274. BNE Time_Count_End
    7 x; N5 D- C- m& @/ ]- Z3 l
  1275. INC <Time_Cnt
    ' U3 b1 O  e/ p
  1276. LDA <Time_Cnt
    + F* N7 [: u# N
  1277. CMP #60
    $ k* a! ]4 B4 {7 j2 U8 `, L+ `" [
  1278. BCC Time_Count_End
    ! `% H$ `. D  R) W
  1279. LDA #006 e4 e, b6 [; P
  1280. STA <Time_Cnt3 E4 m' a! z4 q1 ]( I
  1281. INC <Time_S; c0 U4 p+ _$ i2 I' Z
  1282. / C) r& P! X- W) }% c7 N
  1283. Time_S_Cnt
    4 T8 a9 A0 x& N0 B
  1284. LDA <Time_S
    7 U* O. s7 b8 q& e: M2 f' h& y
  1285. CMP #600 ?& C/ F- ~3 A% R
  1286. BCC Time_Count_End
    ) O$ [) K) ^) c$ I
  1287. LDA #00( F9 p8 [$ d* i8 p
  1288. STA <Time_S
    5 m& Q$ u! j! M1 {: ~( [( ^
  1289. INC <Time_M
    & L: W% y+ v+ b8 K. H/ b
  1290. ! ~5 w' `6 L/ N4 Q; C
  1291. Time_M_Cnt
    & m2 O4 }  g* o( ?6 g) P$ d# S. M
  1292. LDA <Time_M3 R1 H2 m2 O) N# i' F
  1293. CMP #60) _! A, i+ u7 S; o- c% \
  1294. BCC Time_Count_End
    / h; q0 Z0 t8 v2 R# \. G
  1295. LDA #00! o  b& ~- o9 w4 S
  1296. STA <Time_M  f3 D( P8 m; U( g. H* ?/ ]) f* W
  1297. INC <Time_H) Z' l: W0 u# K8 j; j1 n8 G
  1298. ) @6 ~- X5 h- k( Z
  1299. Time_H_Cnt
    $ {( [, L/ ^5 b: j- t0 f/ Q
  1300. LDA <Time_H
    ( V* I+ J3 M8 H6 J
  1301. CMP #24
    1 h7 q5 Z" y6 Z+ r% g3 H
  1302. BCC Time_Count_End. F; o: j4 |* |: s) D8 o
  1303. LDA #00
    ; u$ m5 n' d' @: h) B" B+ P
  1304. STA <Time_H: ]& k( H9 R: f) g1 E

  1305. & J1 t  _8 _7 v0 H( Z) V  y
  1306. Time_Count_End2 P! v' e) g% W
  1307. RTS
    1 G$ f) z( j3 G

  1308. , k/ z7 N3 M. W- m& |2 T: P
  1309. ;==============================+ H) x$ n6 \+ n6 ]
  1310. Time_ReSet;播放时间重置; N9 z- j5 @- ]! i# f0 Z6 i
  1311. LDA #$00  ?2 _$ p$ U3 _
  1312. STA <Time_S
    / w0 [6 s3 K9 \1 e& I* x
  1313. STA <Time_M
    1 F5 M/ [9 ]7 Y
  1314. STA <Time_H
    : M( R) i, W+ H3 ^* L+ c
  1315. STA <Time_Cnt  K, N1 o% t- F" d1 B& U, g
  1316. RTS' n" I/ q& k0 T5 D" ^1 ]/ G
  1317. . o/ F- [1 G9 Y
  1318. ;==============================4 L; i4 F2 c% B7 Y8 |# R1 g1 K* y4 o
  1319. Music_Bar_ReSet;音乐条重置3 W6 i" H4 z4 u; \& h
  1320. LDA #$00
    7 c3 F$ |3 g) }6 m
  1321. LDX #$003 k1 j7 _- d7 q0 u/ y; Z/ N
  1322. Music_Bar_ReSet_Set
    3 q9 R3 C$ ?9 @" P8 r
  1323. STA Sound_Bar,X% S8 s" k# j; |+ E1 @+ \
  1324. INX
      m  O) |3 `. A0 ~/ [
  1325. CPX #$10
    5 M  v+ _; I8 m, j& w
  1326. BCC Music_Bar_ReSet_Set
    $ i& d% S' R3 c
  1327. RTS) C& \) Z( J: t6 a3 |  y
  1328.   n; q1 z$ J7 S; F# J8 w& A$ _
  1329. ;==============================- I# Y! d4 M5 _' }9 o3 O
  1330. PPU_Data;PPU数据写入
      H9 d) f0 E# }
  1331. STY <Data_L$ \2 _3 Q6 o$ K0 ]" I- l  E
  1332. STX <Data_H
    5 J( p' x7 w8 F
  1333. LDY #$FF
      I% X' G5 P) }8 W  ?( r
  1334. LDX PPU_Cur! Y$ q  P* G$ v+ {: b
  1335. DEX& `5 F4 S* i/ L* S* X
  1336. PPU_Data_Beg- m4 v( K- w9 F- A
  1337. INX! p( U/ M. b% W8 |  h$ _2 l
  1338. INY
    - x) J$ j1 b& j+ x5 u7 P/ S( E
  1339. LDA [Data_L],Y
    1 C7 `# B; B' v; H$ I! I- e" W8 R
  1340. STA PPU_Addr,X
    + O% c9 `2 Y' y! a
  1341. BNE PPU_Data_Beg; Y, V6 {. |9 J& ~4 M- q
  1342. STX PPU_Cur
    4 O1 k* A" F8 u" l
  1343. PPU_Data_End5 q. W5 G% b4 z! _/ ?+ W, s; L
  1344. RTS/ ~# B4 ^- b! i6 D! N; q) n# N

  1345. 0 [# O! }; E# ^* a9 W
  1346. ;==============================
    $ Y3 m5 S8 t* J' o0 n3 n
  1347. Music_State_Show;播放状态显示
    : H" W3 x7 R2 r: E6 W: J" T2 p; J
  1348. LDA <Music_Stop_State
    3 U  |1 l6 U) ?3 [
  1349. BEQ Music_State_Show_Play
    : x- I( Y- N- u' H7 E/ u; D7 e- z) I
  1350. Music_State_Show_Stop
    9 R" y2 X, I1 i& x* B& Q
  1351. LDY #LOW(Music_State_Stop)
    ; g+ ^) F! j2 Z, Q  W  {; j+ v/ _% V
  1352. LDX #HIGH(Music_State_Stop)
    2 w1 T3 h% X! u; s7 u/ ~0 |
  1353. JSR PPU_Data- q% k  s, z! X( V1 u# k) {6 ~
  1354. RTS' N; k. R& r4 C: N; B$ f
  1355. Music_State_Show_Play4 f2 ~4 v0 S: Q" c5 W
  1356. LDY #LOW(Music_State_Play)
    + P4 s1 h( D3 m7 K5 ?
  1357. LDX #HIGH(Music_State_Play). [& p$ t2 r; L' u+ G0 N, M
  1358. JSR PPU_Data
    3 U! I, ~. g) {( Q! C0 M7 B4 T
  1359. RTS
    3 }5 u4 `2 @* V" d" @4 s; ~
  1360. " E9 X0 p! {! l$ |0 [! }; M( R+ {5 a3 i1 l
  1361. .IF SOUND_BAR_SHOW_ENABLE+ [5 t' D  k- ]
  1362. ;==============================( p- U$ e/ ?+ R4 V) l9 ?
  1363. Sound_Bar_Text_Set;标题与音乐条初始化
    9 T6 y$ q& N! b0 Y
  1364. LDY #LOW(Sound_Bar_Text_Data)
    2 J+ @8 B; R0 {( f* [; _
  1365. LDX #HIGH(Sound_Bar_Text_Data)
    ) V4 u* i/ i- |! e/ A" |) y
  1366. JSR PPU_Data* u( ?7 K% J* R) J* i& A
  1367. RTS
    9 X9 A; H# Y+ I! }* o  b' |" w

  1368. ' C4 B8 s. `0 a4 v# b8 C0 d% {: T
  1369. .ENDIF5 i. i3 P/ {8 b* H8 ]

  1370. 1 K$ S2 a  ]3 y0 W
  1371. ;==============================- o, y" C( ?. u+ M
  1372. Set_NameTable_Attributes;设置命名表属性4 m4 g3 A9 t. D: A! q
  1373. BIT PPU_STATUS
    9 p; Y) N* J/ {. M2 ~
  1374. LDA #$234 y8 W/ S; q6 b7 @( x6 T
  1375. STA PPU_ADDRESS
    7 U' y, i% o' q# v& g8 v3 T; ~  `$ C
  1376. LDA #$C02 ~  k0 D0 @7 v$ k7 n
  1377. STA PPU_ADDRESS
    6 Y% R( z& q2 w  u" b
  1378. LDX #$00
    + Y% d* B- h" F8 G3 v& C) u# }# k
  1379. Set_NameTable_Attributes_Write
    " x2 x) G$ H" `# k
  1380. LDA Palette_Attributes,X& J( G5 ~+ m! D* n
  1381. STA PPU_DATA# W+ a) C' V* ?" I( h# J9 s1 i
  1382. INX
    7 U+ i3 C% p. q! z7 i# \$ j
  1383. CPX #$40
    3 [5 M4 o/ s  a6 V7 Z! l9 h
  1384. BCC Set_NameTable_Attributes_Write
    ! u+ `4 N6 e# s; S) `' `& ^3 h
  1385. RTS
    ! l# h: M* R+ ]& @% C5 ^) Q

  1386. * p- K. r3 j; n2 b9 ~) O: w
  1387. ;==============================3 V2 g6 Q2 n; _& R+ ]
  1388. Set_Palette_Color;设置调色板数据
    ) v4 d' x- i" b3 b* g
  1389. BIT PPU_STATUS& C# v+ S9 B# t2 X8 N
  1390. LDA #$3F
    ! S& \) v  _1 v, p3 b: _8 _; b  O0 u
  1391. STA PPU_ADDRESS, V* S+ `8 i8 d1 n0 G( s% R
  1392. LDA #$00
    - _! D3 Z- V- U' m
  1393. STA PPU_ADDRESS
    # P$ }9 \3 O& @" F1 g
  1394. LDX #$00
    ' A5 A& M+ a- C2 D* S
  1395. Set_Palette_Color_Write
    + Q6 E8 K' o! w" x
  1396. LDA Palette_Data,X
    # J4 x8 w% D- r; ?7 W1 ~
  1397. STA PPU_DATA5 w# K; Z$ I# o4 ?+ C
  1398. INX: ]/ Q, [& P( \( f
  1399. CPX #$20
    . X6 U3 m! g4 ]! U9 \
  1400. BCC Set_Palette_Color_Write
    2 U, Y% [# i! \: b* q2 K" J" K5 G
  1401. RTS0 d3 E5 L# W3 K5 L/ D

  1402. - O$ I; D) J9 z* {2 U
  1403. ;==============================6 i8 R' P2 p9 \8 y4 E' y4 N0 u
  1404. Init_Palette_Addr;初始化调色板数据1 e  J) o2 {2 x
  1405. LDX #$00, L0 |& j; q4 E
  1406. Init_Palette_Addr_Write
    6 k0 p% Z3 \+ U9 ^, d0 T: `# k
  1407. LDA Palette_Data,X# [, S! Y/ H- z6 Q5 }$ b. z
  1408. STA Palette_Addr,X9 _4 G" H2 A. A3 K! C
  1409. INX
      [/ w7 k1 i$ q4 L4 ~0 U. e
  1410. CPX #$20
    ; Y# E! T1 Z8 ]/ m1 B6 z
  1411. BCC Init_Palette_Addr_Write. d2 i+ }0 Y  y% ]6 P
  1412. RTS! J) [$ E1 e; o1 O
  1413. ! j* ^2 u7 q% j* H7 ^
  1414. ;==============================4 v! ]- H1 l, `2 z1 h, b0 x( B. S8 p
  1415. Update_Palette_Color;更新调色板颜色
    / w$ A0 ]" W& T) T& Q
  1416. LDA <Palette_Update_Flag
    / \( G+ H2 z" r4 f( z, U& M
  1417. BEQ Update_Palette_Color_End
      ?, R, M7 F& K2 d# w
  1418. LDA #$3F
    ; ~. Q9 d3 ]) a/ o; X
  1419. STA PPU_ADDRESS
    . f) ]/ c, F1 B1 {  L
  1420. LDA #$0C( N0 h0 |( u2 T& @( L
  1421. STA PPU_ADDRESS
    ; S7 H2 @' \6 W
  1422. LDX #$0C% f8 u! i* C2 v
  1423. Update_Palette_Color_Write
    : r& b  [( T+ L* {$ i
  1424. LDA Palette_Addr,X
    % T5 i" e( |  i! z
  1425. STA PPU_DATA
    ( m3 c; ]' c) u6 H: {8 V/ {- T
  1426. INX. T3 p7 [# i% u" W! N, o; p
  1427. CPX #$14
    " ?, w1 c  p4 F" J$ R
  1428. BCC Update_Palette_Color_Write
    1 N6 a; W- D0 O+ F
  1429. LDA #$007 N- ]8 b( h8 ~, O5 ]
  1430. STA <Palette_Update_Flag2 I* J5 R. \" B# }0 Z& m- m. \& ~
  1431. Update_Palette_Color_End& w" O. R* H" T. d$ m0 O
  1432. RTS0 `: W# F5 [, x3 W, ^
  1433. 1 R5 F- `% H- k% f6 k

  1434. ; {6 E9 v7 N8 y+ {& g
  1435. Update_Sprite_Palette_Data
    7 C6 G- a7 M% `
  1436. .DB $21! Y% _1 j! i- t+ |* B5 U3 G% n' n
  1437. .DB $219 B  Q; J6 m$ A. r% {
  1438. .DB $11
    2 a% c2 h8 z. `
  1439. .DB $01
    1 K; d. Q' W" V: N& q+ \  T7 }
  1440. .DB $01
    . v: n, F! a* ?; ]; e, b" A; m" C; J9 ~
  1441. .DB $11/ D/ e+ ]9 m( G+ F8 g9 O9 ^! A" F
  1442. .DB $216 S5 E+ s7 b% x/ Z4 D  R
  1443. .DB $21
    0 X& t  X& U$ P" O
  1444. .DB $11
    % q& p& U) \; i9 n0 {
  1445. .DB $01
    " s& a! \" h/ @( ?# v" V* ?
  1446. .DB $11
    , s  V9 z5 Z! Z2 S  ]
  1447. .DB $21
    8 h% a1 ^$ k, Q2 T
  1448. .DB $21  E7 u4 z# Q! l1 @& A
  1449. .DB $115 G5 m5 i; P! a& [; \) Y! u
  1450. .DB $01
    % k. G% }+ L0 w0 W* Q# i
  1451. .DB $116 I+ i# c  k. Z- m/ m
  1452. ;==============================
    ( `; o8 F$ K# l; F, n+ Z
  1453. Update_Palette_Data;更新调色板数据3 O, Z9 y3 ?. i; S& O; R- d9 r
  1454. LDA Nmi_Time_Count6 B- L0 r# ^  v0 [6 L
  1455. AND #$08  R( g- g7 J( H# r3 ^6 W# E
  1456. CMP #$080 h3 c9 O4 \2 ?- o% L
  1457. BNE Update_Bkg_Palette_Data
    , J! v; ]1 _. {/ v& F1 m; L
  1458. 8 h2 {* ~$ _. u5 R9 t
  1459. Update_Sprite_Palette_Data_Set8 M+ P! x5 G. p+ E) F  X3 ?3 x+ ?
  1460. LDA Nmi_Time_Count& g9 I) G7 B  {( {2 V
  1461. LSR A6 Q  C6 Z8 a) d" a+ w1 I( Y+ D
  1462. LSR A
    4 m8 I* ?: G# o" \
  1463. LSR A1 p0 P% ~$ f' k) k0 N2 u
  1464. LSR A0 \) _) W. F/ Z" o, D
  1465. AND #$0F1 R/ _( [, I1 S. e& ]
  1466. TAX
    4 t6 J2 F3 `9 _$ G
  1467. LDA Update_Sprite_Palette_Data,X
    6 K  C3 V5 h& p" Y- K  l( o
  1468. STA Sprite_Palette_Update_Addr
    5 F. F9 R0 x3 r, d
  1469. LDA #$01/ b1 @" g, ~" W
  1470. STA <Palette_Update_Flag
    3 E& g; ^& Q# J/ i+ W

  1471. ; ?. j1 G' E' v4 j5 r4 \' q) w  ]
  1472. Update_Bkg_Palette_Data: }- x/ n: ^+ I2 J
  1473. LDA <Text_Disable_Flag9 Q! ?) e% {$ v5 W/ T( F$ F4 w0 r0 {
  1474. AND #TEXT_DISABLE_RAM8 Y6 b' q# A0 s3 Q
  1475. BNE Update_Palette_Data_End8 n7 h$ o+ O' l- J( P5 X
  1476. LDA <Music_Stop_State7 I/ q. F! @8 [( K
  1477. BNE Update_Palette_Data_End7 ~9 p7 n) p% q1 N# s  E) B" c* H2 m
  1478. * ?% Q6 n: q) G4 p$ E
  1479. Update_Palette_Data_Check% ~+ ~4 ?! k- U. e2 E: S
  1480. LDA Palette_Wait_Cnt3 |2 L/ w7 o" n3 s) c* j
  1481. BPL Update_Palette_Data_Check_Over
    1 ]% G7 W5 Z/ `1 v* _/ f4 L% q
  1482. LDA #PALETTE_UPDATE_INTERVAL
      l8 j: j3 S  S7 _0 ^9 Z* _" G
  1483. STA Palette_Wait_Cnt
    * H( t, [; d3 n9 ^/ R
  1484. Update_Palette_Data_Check_Over, J5 ^) x) |! D& t" Y# ]& X( l
  1485. DEC Palette_Wait_Cnt
    2 v3 \9 R! f% l8 K- K" t8 K. _( Y
  1486. BNE Update_Palette_Data_End1 m8 P. U. Z7 m8 ?, s

  1487. $ F9 I( @$ p% @1 L2 x
  1488. LDA <Text_Disable_Flag
    5 A% V5 k* ]6 |/ `
  1489. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME
    . [5 G  O" g7 d2 A
  1490. STA Text_Disable_Flag
    ( }; P# m% X8 w% Y# p: d
  1491. INC Palette_Update_Flag8 C  d7 l' |% D9 f

  1492. 0 l6 H8 {5 g1 @$ w9 g
  1493. LDA #PALETTE_UPDATE_INTERVAL. q; ^* y; A' Y( H2 r# o2 U9 ^
  1494. STA Palette_Wait_Cnt
    ! g; X0 e& i* [

  1495. # C: {$ t! [. ?0 f" g: f
  1496. LDA Bkg_Palette_Update_Addr
    6 j( v2 v7 I, Z4 b
  1497. CMP #PALETTE_UPDATE_MAX
    1 E1 {5 |2 f, n+ y! Y1 S0 I  ]6 F
  1498. BNE Update_Bkg_Palette_Data_Set
    4 P% v) o$ c. s+ P
  1499. LDA #PALETTE_UPDATE_MIN - 1
    5 r$ t1 }: h# t6 w2 A$ M0 b+ R
  1500. STA Bkg_Palette_Update_Addr
    " s1 ~4 K' n6 n1 {$ c( J& R( `
  1501. Update_Bkg_Palette_Data_Set# z6 w: }9 e$ ~, Y- D9 v  R; ]  X
  1502. INC Bkg_Palette_Update_Addr
    . [! O! d2 p0 j- c  G8 \( n
  1503. ( w& Q2 e* o7 k7 R
  1504. Update_Palette_Data_End0 I, W( _. @. v
  1505. RTS
    4 M3 B3 N- z0 Q1 B1 T- \7 b$ n
  1506. : B# M1 N  g. i3 P  F% \& f
  1507. ;==============================5 Y7 j* `" I2 A$ a9 m4 a
  1508. Show_Music_Text;显示静态文本
    ; l2 z" L, c$ J4 u
  1509. LDX #$00
    ; b5 q' s( z" V. X3 y6 t6 M4 u
  1510. Show_Music_Text_Set
    4 L" ~, ^$ G7 _6 u
  1511. LDA Static_Text_Data,X; S! y1 N0 x; `
  1512. STA <Data_L" g. d( |" _- Q# Y3 q6 e
  1513. INX8 w! ~3 n! ?$ b* |& B
  1514. LDA Static_Text_Data,X
    , [# C$ s/ I9 B
  1515. STA <Data_H4 b; \+ p/ }& y9 `$ n
  1516. INX. L7 g' X5 l/ D9 v8 Y7 y
  1517. LDY #$00
    $ C7 n. s( k: ]
  1518. LDA [Data_L],Y
    # X; m/ y! X1 ]6 |* m% \: `0 r& j
  1519. STA <Data_Cnt
    # g: C5 I( a$ ^: v- G
  1520. DEX( U4 s. x/ O$ B! K
  1521. DEX. E$ v2 G. _. @) F- [+ j1 K
  1522. LDA Static_Text_Pos,X
    - r+ }: X! {" B" R8 e
  1523. STA PPU_ADDRESS
      y2 A- c+ D# s$ B8 m1 h
  1524. INX) r/ D& }& n% p8 m* L9 ^
  1525. LDA #$20
    % R$ z1 _* W4 T) o9 F
  1526. SEC6 H" m" |+ h4 x
  1527. SBC <Data_Cnt
    5 l* S  B* o( v" W/ J; [0 x' U3 C
  1528. LSR A: y! b, Z* M' p8 s+ u
  1529. STA <Data_Buf
    ! t5 e7 r  l" {/ L
  1530. LDA Static_Text_Pos,X
    " F0 S% r3 ]  X. j* L$ j6 p3 N% S
  1531. AND #$E0
    ; y8 w! P; p" N
  1532. CLC
    4 A4 B, }: L7 |. e$ Q% B; P
  1533. ADC <Data_Buf
    / H& T7 p" t# d' }
  1534. STA PPU_ADDRESS9 O, P0 N. S; Z( N1 X
  1535. INX
    * r/ |7 v. g" S- C) {% K
  1536. Show_Music_Text_Set_Write" w, f3 @# u7 m% c6 `
  1537. INY6 n  _; i2 H. E+ a- A7 b
  1538. LDA [Data_L],Y
    - P5 x4 d% [8 M( }. T
  1539. STA PPU_DATA
    $ X5 L" t1 o  Y
  1540. DEC <Data_Cnt: e' b* g* Z" C- l
  1541. BNE Show_Music_Text_Set_Write
    $ a" J* e# u' i% s
  1542. CPX #Static_Text_Pos_End - Static_Text_Pos9 P7 k0 o, G. ^" f
  1543. BCC Show_Music_Text_Set
    1 e8 S* o& o% {! v2 e/ o& N
  1544. RTS
    7 \. k9 c" J; e1 @
  1545. 5 Q8 Y) F9 L! U0 J% N0 I/ M
  1546. ;==============================, U$ U) s/ d$ S
  1547. .IF Track_Name_Pos;显示曲目信息
    & n' L4 p5 \+ I
  1548. 5 A1 [5 a8 |; t
  1549. Clear_Track_Info7 N1 T* N( E3 t! n7 u3 W( e
  1550. PHA
      b4 l0 Y* r2 f
  1551. LDX <Music_Item_Cur
    , v* ?6 F' e( x: s! W
  1552. LDA Track_Name_Addr_Flag,X
    9 K! A7 |/ E8 x0 P; P
  1553. BEQ Clear_Track_Info_End_Ex& u  C7 t. ]& E; D
  1554. PLA$ P8 M9 m8 B$ W: v* U
  1555. ( @( @, |' |, ^( v5 t2 l% ~
  1556. LDX PPU_Cur
    : Q3 a! `6 ^1 J; K
  1557. PHA
      G# O( W6 d+ W2 W. h; _( o; g
  1558. LDA #PPU_MODE_CNT_CLEAR
    1 e* r) ]9 H( I
  1559. STA PPU_Addr,X( S; L3 B% _1 B! C. ?
  1560. INX( e& e+ i& y& Y, U, T7 w
  1561. PLA* p' L/ y5 x. y8 F; U( a: @
  1562. JSR Show_Get_Track_Name_Center_Pos/ H' n7 ?; z; m" i
  1563. STX PPU_Cur$ ^8 p9 f: G) i0 l# Q# s( [$ ~
  1564. Clear_Track_Info_End. i6 g% a+ P: y1 o  b
  1565. RTS7 ^3 |+ O" K% e4 p
  1566. Clear_Track_Info_End_Ex: u- s5 N2 B4 R
  1567. PLA
    # n; i4 T  d4 j" y: }) N0 i# S
  1568. RTS
    . I5 H. A( ^  O& [. w
  1569. 8 x* D/ R3 K5 |
  1570. Write_Track_Info- l% [3 R8 ^% y. A
  1571. PHA2 O8 |( B9 u" v) f6 Y
  1572. LDX <Music_Item_Cur7 N2 j5 Y) {+ |9 C' ?4 S5 D/ Y4 M
  1573. LDA Track_Name_Addr_Flag,X
    ) E& D0 a5 j. j$ b
  1574. BEQ Write_Track_Info_End_Ex
    , @! _5 e; G* P! \
  1575. PLA
    5 P" W6 _$ f) c! V# H

  1576.   r2 d+ S, i0 m0 c
  1577. PHA
    ( v8 k8 x. ^0 h+ C, \' t
  1578. LDX PPU_Cur
    8 j0 |- P- F4 `6 e# W
  1579. LDA #PPU_MODE_CNT_LINE
    " \+ M! D& k( T# _7 L' ^
  1580. STA PPU_Addr,X
      z7 a. v* h$ l. [) {2 {  K" T
  1581. INX
    9 P/ d3 u# t: }( W3 B& a' p
  1582. PLA0 Z0 A: h3 I, E6 ]  s: Z9 q
  1583. JSR Show_Get_Track_Name_Center_Pos
    8 d+ Z) ~9 k, R/ c
  1584. Write_Track_Info_Data4 q  a  z0 E2 _) J& c8 d
  1585. INY
    6 O7 ]! m7 V1 h
  1586. LDA [Data_L],Y8 E' U# H4 f( E( W/ a6 V% ]+ U5 V' L
  1587. STA PPU_Addr,X% \9 P0 b( ?; ?$ u0 i, W
  1588. INX
    9 Q" `$ t. _2 o9 D
  1589. DEC <Data_Cnt! ?& M3 d% p! ]' T% z0 }
  1590. BNE Write_Track_Info_Data6 e9 N8 Q) R8 V4 Z
  1591. STX PPU_Cur' H& T) o$ D7 m9 G0 B: O
  1592. Write_Track_Info_End; d: B) a9 u! `
  1593. RTS  N. G- E7 m6 k; N% b+ [* ]$ m& Y
  1594. Write_Track_Info_End_Ex  C  B7 Z3 I# e! S
  1595. PLA
    & f6 m9 T, {9 S, F2 |
  1596. RTS' R+ }" ^; U. E5 ~

  1597. $ y9 s& a- b* H5 f: v+ i
  1598. Show_Track_Info) m- U- u' L7 _6 s0 }  h; D
  1599. Show_Track_Info_Clear
    / W- J8 C% s  \0 h3 o& o
  1600. LDA <Music_Last
    5 p5 }. O$ K+ ~' V$ O6 N

  1601. 6 d$ c8 r) M3 E6 r
  1602. JSR Clear_Track_Info
    # V; M' p( J) F: k0 R% p5 ]
  1603. / y$ S. o; u- n  q' d$ [( {
  1604. LDX <Music_Item_Cur
    0 L/ Q" f) ?7 s3 I
  1605. LDA <Music_Cur,X
    % e, |# {6 w4 y8 R! u3 Y
  1606. JSR Write_Track_Info) v2 H+ j, t0 e$ Q
  1607. RTS- g( @( Q, e! N
  1608.   i  S7 X% ^' p, N
  1609. ;==============================
    ' _) j# P  j5 B& B( E4 p+ f
  1610. Show_Get_Track_Name_Center_Pos;获取中间位置
    8 q' c3 H) ?/ b. u
  1611. 9 b' j5 ^* s! h2 c' X; x
  1612. ;取出集合名索引
    2 \' o  w6 K# h( Q# A& Y( H6 U
  1613. PHA4 E( l; e5 j/ A

  1614.   I1 e& k, n: S* T1 |" x
  1615. LDA <Music_Item_Cur$ i/ P5 s( _7 v. ~& I- X
  1616. ASL A" ~5 D& X+ C* a; l+ B
  1617. TAY: U9 }. m% U2 r: K0 W. r# I
  1618. LDA Track_Name_Addr_Port,Y
    % M- \5 p; l5 n$ K. @
  1619. PHA
    2 F; `& v' F% \1 L+ L3 c
  1620. INY" P1 |# H6 D& _0 n) E" }$ {$ I0 D
  1621. LDA Track_Name_Addr_Port,Y
    , p) j9 e/ S7 N! O
  1622. STA <Data_H  {* s& ]7 g2 j) I/ Z1 ]4 V$ u
  1623. PLA
    & `5 F% T, k' q
  1624. STA <Data_L+ }' C- s5 t: h" r& E
  1625. ; N! g; C- `" {+ U" I  D6 J5 Y; `
  1626. PLA
    9 D* C9 b7 S8 ~" Z0 P
  1627. 8 E8 b. k# q7 x8 G* d! X
  1628. ASL A4 E4 a+ @7 l2 _- u0 F" K* o
  1629. TAY
    3 N% t# X! q; [' L9 H3 ~  D
  1630. LDA [Data_L],Y
    4 n) i& [  b& u& ?9 d" Z
  1631. PHA2 ~; X  P, G. d! e6 n3 ~1 {
  1632. INY) Y5 `/ d+ K3 J8 R3 u: K' e
  1633. LDA [Data_L],Y9 [+ R5 M5 C! G5 i4 |
  1634. STA Data_H
    6 Q- ~; d! L9 l4 L0 h# M
  1635. PLA/ J: \: X2 c8 Q  X6 m
  1636. STA Data_L
    1 N+ _6 X: f( }- `+ J
  1637. 4 N; u- Z9 h' y0 c8 w' k
  1638. LDY #$00
    ! \0 e" O* N: _( o+ f- ?5 V
  1639. LDA [Data_L],Y, w4 v' M+ i' W2 k, c
  1640. STA <Data_Cnt
      p: }* n/ a: j8 e/ N# W" [
  1641. LDA #$204 Y/ C7 G7 m* R, ]: f! D- g& ~" f
  1642. SEC
    : i/ P/ I6 F# c: c
  1643. SBC <Data_Cnt1 k7 }/ O/ e& h0 C
  1644. LSR A3 f1 S/ ~5 v2 {; s. y
  1645. STA <Data_Buf
    ) k% J+ d" q  B$ h# e6 z
  1646. LDA #HIGH(Track_Name_Pos)
    1 v& |2 p4 B. j2 h8 M7 {
  1647. STA PPU_Addr,X1 G7 \1 |6 X7 W
  1648. INX/ t2 t' c0 D+ i/ s6 k
  1649. LDA #LOW(Track_Name_Pos)4 V6 G- Y; l+ f' \2 H
  1650. AND #$E0% S* }; q3 P" \5 V1 Z  r' U
  1651. CLC) ?( N* X5 m" c4 b/ t
  1652. ADC <Data_Buf: E- Y: }. ]& n, A( U' H
  1653. STA PPU_Addr,X$ X% C+ P$ K% {6 T2 `  x) z% Z/ H/ U
  1654. INX
    - P( e" d% i+ {/ {
  1655. LDA <Data_Cnt1 b( a/ h( x# i% e5 V
  1656. STA PPU_Addr,X
    7 q" ?0 _! |2 Z$ `. o5 Z
  1657. INX
    ) B* w2 j7 a, u0 ]2 L
  1658. Show_Get_Pos_Center_End
    1 r( E, y1 t" r1 N7 [- u: |
  1659. RTS* K1 k% s9 P. |$ W- ~
  1660. .ENDIF
    % U3 Z2 i1 R* ]

  1661. 8 J* E) O" g( e" e, K3 g. T; p
  1662. ;==============================. e- y" j  q8 y. L6 h8 N
  1663. ;音乐端口清除
    ' |& [) D9 p& o- f) f7 r
  1664. Sound_Data_Clear/ r9 p! k8 I) v: l
  1665. JSR Sound_Port_Clear
    7 q6 a* J; d, `
  1666. JSR Sound_Ram_Clear
    # f( {( S2 P+ H2 u  z* e
  1667. RTS5 T9 {. w8 B9 \: F( X0 q6 F, m, j8 k
  1668. 6 K; _2 h) a' m' y1 d
  1669. ;==============================( o2 }9 j% B4 L  I" a5 _& f0 z" V
  1670. ;音乐端口清除. l' w$ g; L3 n# F& ?
  1671. Sound_Port_Clear
      T: i$ A: \+ i' O% ]- @
  1672. LDA #$00
    # F2 O& ~; V' v0 ~" p2 O& b  q
  1673. STA APU_STATUS
    ) n! T" ~& K& ~" ~% h2 {
  1674. LDX #$00
    1 _0 w$ [/ i. O! |9 ^/ R
  1675. Sound_Port_Clear_Write5 I& v, W; p$ C6 G5 e
  1676. STA $4000,X* y+ ~) L, E9 v, ]9 F8 V
  1677. INX
    % C# a* w3 W& y: H5 H* k+ [
  1678. CPX #$14  p! ^; h. g+ |8 s) p- m0 q
  1679. BCC Sound_Port_Clear_Write, x4 v5 s" P8 m! X( p+ ~
  1680. RTS$ z; T, ~% t. t% m6 P
  1681. 8 {! e% N/ M1 d9 O3 t  A9 P
  1682. ;==============================6 N0 H9 Y$ C9 c  R( c/ X
  1683. Sound_Ram_Clear;RAM清除# s( ^6 ]& f  ]/ |. z# Z8 E
  1684. LDX #$00$ a' r* @9 Y6 L" b8 ]
  1685. LDA #$005 C" b4 n  V, J' `
  1686. Sound_Ram_Clear_1' S: J3 U) B, U) e
  1687. STA Sound_Ram_Addr_1,X0 L! A6 a1 G/ p8 f
  1688. INX
      S; e: D+ N3 O7 k! Y& g2 Q
  1689. CPX #Sound_Ram_Addr_1_Size
    ) k( o: a3 T3 H* v# J2 T
  1690. BNE Sound_Ram_Clear_1
    ( E  l/ H! r1 W, m
  1691. LDX #$005 k* s5 m# G0 I' Q' G
  1692. Sound_Ram_Clear_2& S9 `7 L' s1 T1 Z% i
  1693. STA Sound_Ram_Addr_2,X! B; e- J& P/ y1 J  W) @
  1694. INX
    9 ^. r  a. u: S' `- o! N/ E
  1695. CPX #Sound_Ram_Addr_2_Size2 k: q* [5 H* G/ @  J5 a  q, @$ C
  1696. BNE Sound_Ram_Clear_21 S2 \8 O$ }: ?* G2 [( ]% ~
  1697. LDX #$00( Z$ x" r- _0 p$ H& K: g
  1698. Sound_Ram_Clear_3
    3 _5 U, I& O) B7 o! @8 R
  1699. STA Sound_Ram_Addr_3,X
    % o; d9 U; q+ \
  1700. INX, }4 _. e/ A2 W# C  z
  1701. CPX #Sound_Ram_Addr_3_Size9 `& x6 G6 D1 f: k+ K' Z2 C  d1 M1 p! w
  1702. BNE Sound_Ram_Clear_35 L- P; r# |4 e8 |1 A
  1703. LDX #$00
    # M+ v$ a1 {! _4 m9 L9 \2 }+ ~
  1704. Sound_Ram_Clear_4
    5 K8 ]: h2 e& g+ s
  1705. STA Sound_Ram_Addr_4,X
    - f$ [7 i4 I; [4 Y% u# j1 S( [# U
  1706. INX: u/ Z6 K  ?0 S5 q9 G& k1 H
  1707. CPX #Sound_Ram_Addr_4_Size$ p. d2 R: J1 i
  1708. BNE Sound_Ram_Clear_4
    9 |) T1 l1 l* \- ]9 @# y1 c5 c- D4 X
  1709. Sound_Ram_Clear_5) m) [3 m; Q' Q
  1710. STA Sound_Ram_Addr_5,X
    % S2 B3 @6 d& N
  1711. INX: z  T9 P. }+ A+ @
  1712. CPX #Sound_Ram_Addr_5_Size* ]' h- d! ~, o1 z  A
  1713. BNE Sound_Ram_Clear_51 J* K# n) w9 M
  1714. RTS9 f/ l! N/ |8 z& \

  1715. ! N& j( Y2 u; l( s; [
  1716. Get_Music_Collection_Name
    ' {1 b9 w" S5 W  M( e
  1717. PHA
    , `' {% x3 ~2 \/ [# {
  1718. LDA <Music_Item_Cur: h# L5 r7 G& G
  1719. ASL A7 S  H: o3 P( ^- _2 p
  1720. TAY9 B2 }4 O/ m: c' \& S0 l8 S6 e
  1721. LDA Music_Collection_Name,Y& {+ S3 T5 J  r2 ]+ V; E% z2 K
  1722. STA <Data_L2 q& g7 L  H3 H9 s2 s+ _
  1723. INY) V+ ?1 {7 b1 @% Q
  1724. LDA Music_Collection_Name,Y
    ; A! i$ O2 n6 E* C) d7 k
  1725. STA <Data_H
    $ t9 n" `1 D6 t. Y' X3 t& Y
  1726. PLA
    , f. h1 U; X% U6 `5 ~
  1727. RTS
    ) y4 v7 x3 n0 |8 i

  1728. + Q1 G5 a. n: Z" w) ?. |* Y  A9 a
  1729. Set_Sound_Total
    . W- a! ~8 P6 ~; |- }
  1730. LDY <Music_Item_Cur* N7 P# `% _) j0 W+ _( N2 I/ Z
  1731. LDA Sound_Total_Port,Y* b4 T& }3 d4 Z( w7 Q
  1732. SEC
    3 t: }9 V" q+ z% t3 R- T6 {+ S
  1733. SBC #$01
    5 I) d8 y. U6 ?( ^, x& R
  1734. STA <Music_Total
    0 ^5 R& x. C- Z4 H4 O7 V) D
  1735. RTS. y7 \4 w" z3 a8 F: b+ ~& B
  1736. ' x0 ^" q5 q7 ~$ `: w
  1737. Get_Sound_Start
    ; S7 s- {/ r, T! o) c8 R! a" ^  s
  1738. LDY <Music_Item_Cur( ^3 R2 R$ n& i( S$ u, m
  1739. LDA Sound_Start_Port,Y
    7 E& ?9 k" l. S8 N$ e/ H# {& m
  1740. RTS
    . X: x5 h# q* z/ O
  1741. 1 G# E) q8 l; g  n8 A
  1742. Set_Sound_Init_Port7 E& g+ F. a! q- p( z8 d
  1743. PHA
    $ t3 X+ e+ P4 M/ g
  1744. LDA #$20- c7 v$ O4 |" W
  1745. STA <JSR_Addr_Op
    2 R0 R$ Z7 q" ~1 g1 L; m9 J' e
  1746. LDA <Music_Item_Cur
    - X4 g8 n' C+ d, @- b
  1747. ASL A
    1 k) Z, V+ d- C( P& Q" z; ^2 v' N
  1748. TAY
    & n5 l2 Q$ z% e; P4 e
  1749. LDA Sound_Init_Port,Y# l: V& d9 x4 K9 d, m+ B* j
  1750. STA <JSR_Addr_L$ Q% ?. O; x+ G& ~, K3 U
  1751. INY
    5 r. R( N" b* @3 Z9 C2 D  O
  1752. LDA Sound_Init_Port,Y4 H" I& V! w' w1 y; ?) f' t
  1753. STA <JSR_Addr_H7 K0 m# u7 x' y% w# n& Q
  1754. LDA #$600 Z) L3 N4 ~) d
  1755. STA <JSR_Addr_Rts
    7 t. _/ [; S8 T' |: p
  1756. PLA: ?7 ?% O& r% U8 n- X
  1757. RTS
    & l/ r7 `" Q$ W. z

  1758. ; R0 }2 T  B0 n0 T7 Z- V
  1759. Set_Sound_Play_Port
    & h( X1 C$ g$ T# J. ~
  1760. PHA
    % W3 c" O; X( t% @4 J6 t
  1761. LDA #$20
    $ r) m/ _5 U1 _. U
  1762. STA <JSR_Addr_Op# c) z& G; B$ L/ y5 t
  1763. LDA <Music_Item_Cur
    ! P/ [  Q2 N1 p3 \% R6 B5 p4 _2 D
  1764. ASL A, S6 H7 s9 k9 V6 H
  1765. TAY
    - v, L' j4 i( {1 l2 p5 z  O, X
  1766. LDA Sound_Play_Port,Y; v) }, F/ E" z* u& D
  1767. STA <JSR_Addr_L
    - D) {; E  |2 H& e  Q, ]
  1768. INY9 e4 {* }7 p9 B( e; C
  1769. LDA Sound_Play_Port,Y
    5 w( r* C8 I; [5 b; E4 C; u
  1770. STA <JSR_Addr_H
    , L" ~, L' M0 t6 h/ N- c. \6 C; n$ U
  1771. LDA #$60
    ; U. K! M1 l+ C0 r
  1772. STA <JSR_Addr_Rts
    8 f) f: R" T3 a: C; O. g
  1773. PLA, |/ R2 I1 S5 n
  1774. RTS
    & M1 j$ C# H& p- b  B; n5 C" _

  1775. , V1 H. y. i- t* ~: z! w. _: B, }
  1776. Set_Sound_Reset_Port
    - I' w! j6 y6 e* R8 W& W
  1777. PHA, X( @/ \: d* T/ K* I
  1778. LDA #$20" r4 [: `$ W4 b7 o% o& Q5 K
  1779. STA <JSR_Addr_Op- ^- p; A% X  s/ |
  1780. LDA <Music_Item_Cur
    % J: H: T. }( o* ?5 j
  1781. ASL A3 m( H- {! o+ S; d0 u( J
  1782. TAY. z8 c* e4 p, O' A/ A* T
  1783. LDA Sound_Reset_Port,Y) a# F* O! p( v# A/ \/ z
  1784. STA <JSR_Addr_L
    / \( Y% \5 A" `
  1785. INY
    / b3 K6 j" ~! Q2 o
  1786. LDA Sound_Reset_Port,Y
      p0 ?9 q0 ~* ?) ^- J
  1787. STA <JSR_Addr_H
    , e1 P: O2 q4 s
  1788. LDA #$60
    ! W, Q5 ^6 G8 E; ]5 k
  1789. STA <JSR_Addr_Rts3 A; a4 @. O8 @( z- b; C
  1790. PLA
    - V2 R9 H6 @$ [
  1791. RTS
    + i5 b/ j0 X$ B

  1792. & @/ W. e' I1 d3 @( ^9 q- m
  1793. ;初始化音乐bank- A# w. `* W8 \1 A
  1794. Init_Sound_Bank
      Z2 g, U7 p- N0 i9 {1 e
  1795. LDY <Music_Item_Cur! I& q$ g0 L3 x
  1796. LDA Sound_Bank_8000,Y
    & c4 X4 R) H1 {% w5 z" q( F; }
  1797. STA <Music_Bank_80000 ]9 J& Q* q4 W' j
  1798. LDY <Music_Item_Cur& G) t; X9 @+ ?  Z* L% F/ f5 A: h: l
  1799. LDA Sound_Bank_A000,Y. i0 {6 ?3 k' j2 L- M: H/ V4 N
  1800. STA <Music_Bank_A000
    0 }7 t( j# L4 V
  1801. RTS
    6 |- h6 G) g  \. [

  1802. ; G' ^: K/ s4 \) b: i
  1803. ;==================================================  x! |- g& O* M6 C3 M! f' e
  1804. Sound_State_Reset;音乐状态重置
    8 C5 e/ y* Q% C. U
  1805. JSR Music_Bar_ReSet        ;重置音乐条
    8 H) S0 V/ Q' r
  1806. JSR Time_ReSet             ;重置播放时间
    " u( g4 y; P8 ], X4 Y# |
  1807. 8 {1 Y2 S! q  `9 ^9 O! ?
  1808. LDA #$000 G% r" Z7 e& A
  1809. STA <Music_Stop_State
    $ ~- b1 V1 u$ _& y$ I9 ^9 P
  1810. JSR Music_State_Show       ;显示播放状态
    0 `2 M9 g2 g1 O* u
  1811. . @, c( t8 n: f7 `/ t1 @4 [5 P
  1812. .IF Track_Name_Pos8 }' e  A2 ~7 i( ~
  1813. JSR Show_Track_Info        ;音乐曲目名显示
    9 v+ \- i9 q9 F9 U
  1814. .ENDIF% _+ F* y6 {- B8 i4 N: t% d1 v; e
  1815. 6 Y% H, @6 L/ y) {# R1 e5 p
  1816. RTS
    + n/ n# W" t: O' T- z1 {

  1817. ( f6 e! T- r! O- A* x. ]
  1818. ;==================================================
    & {; V# p: `8 H
  1819. Sound_Init_Proc;音乐初始化处理
    + r% o) h  F% [+ u" r
  1820. PHA
    . w) I8 a, A- N3 o
  1821. JSR Set_Sound_Init_Port    ;设置音乐初始化地址! V; i& y3 o: w. B* C* t5 U6 D4 \
  1822. LDA #$00
    ) {+ f8 M) a" ]/ o1 L
  1823. STA <Scroll_H               ;重设水平滚动) U1 S! R- `) i: G
  1824. LDA #$0F
    5 p! D, g7 q$ o. ?( N' ?
  1825. STA APU_STATUS$ m9 J9 _* Y3 ]0 k' |% N6 }
  1826. PLA
    1 t7 A! T  p4 l& h
  1827. JSR Sound_Init             ;音乐初始化9 C' w1 r3 d4 F: H5 X# w5 _' k% W% I
  1828. JSR Sound_State_Reset      ;重置音乐播放状态! B- c, d* d1 z3 x/ u  u/ a
  1829. RTS
    1 f  z) e3 u4 Z% u0 B* f

  1830.   Z( r+ k( _2 B3 K3 l
  1831. ;==================================================
    " C- s$ m5 U( {0 t. z2 P) C
  1832. Sound_Play_Proc;音乐播放处理
    * _6 Z; U/ D; G
  1833. JSR Set_Sound_Play_Port    ;设置音乐播放地址2 ^( u! I# k7 g0 Q
  1834. JSR Sound_Play             ;音乐播放
    4 j/ n. \& Z4 S8 E
  1835. RTS2 S, j# U3 ^5 v! x/ j, N

  1836. * O$ F0 q! p$ A- z- [
  1837. ;==================================================9 @& c  }* J0 m1 B( _
  1838. Sound_Reset_Proc;音乐重置处理
      ?1 Z& |: G7 G8 D
  1839. JSR Set_Sound_Reset_Port   ;设置音乐重置地址
    0 F1 `/ q1 ^( C* Z0 U3 M. ~
  1840. LDA <JSR_Addr_L& {5 Z, B7 ~0 _# ~. g& N
  1841. ORA <JSR_Addr_H- i  t, T5 E! _1 b2 C* I
  1842. BEQ Sound_Reset_Proc_Default9 l; _* ~; _# u7 d5 G2 Z" y) \4 \
  1843. JSR Sound_Reset            ;执行音乐重置
    ( A+ \& k9 w0 P9 Q
  1844. JMP Sound_Reset_Proc_Init_Sound8 ]2 o9 L, r( _2 w0 ^" Y2 Y
  1845. & ~( w; z+ T  N. ~
  1846. Sound_Reset_Proc_Default    ;默认音乐重置处理
    ! g* n. n! Q2 n% ]6 M/ j" U0 ]
  1847. # [/ B1 J* o2 \2 c+ L& ]9 C
  1848. ;清理内存很耗费cpu周期, 这里禁用一下NMI中断
    0 Y; |9 ^" K5 B# Z  Y: v: @
  1849. LDA #$00
    3 l6 \. q. q! n5 q5 L- B! M
  1850. STA PPU_CTRL6 a& h) t6 P4 d

  1851. ! t+ w. b- A! S- T$ j
  1852. JSR Sound_Data_Clear: d5 ^. U/ [  l- O, R! i

  1853. 3 G. |1 _) C: @: O6 R. Y( O& u- C6 ]
  1854. Sound_Reset_Proc_Default_Wait
    + u3 ?! {0 [; h) C% v" O& }
  1855. LDA PPU_STATUS9 Q. o) S7 W' _) w0 S
  1856. BPL Sound_Reset_Proc_Default_Wait. T, A8 Z7 P( P3 y

  1857. 7 S: X0 X$ a: D4 \; Z: u$ Y; H
  1858. LDA #$00$ s2 H4 E$ a+ e$ ~: [
  1859. STA PPU_ADDRESS
    ) D; r7 c" a9 r5 Y
  1860. STA PPU_ADDRESS7 Q9 ]3 i! e" e' q/ @9 G) d9 Q2 V* ?
  1861. STA PPU_SCROLL) ?% A4 I) j; r7 d9 W: }, E9 W
  1862. STA PPU_SCROLL' b) N4 b3 u! w+ \, v  G

  1863. , t& z0 G- x. p& c: s+ }
  1864. ;恢复PPU控制
    % M$ ]4 W2 v7 W; T
  1865. LDA Screen_Ctrl5 k6 V- `' J, c! u
  1866. STA PPU_CTRL
    4 b4 r$ s8 m7 @+ s  ?- v! i1 q7 t
  1867. 4 N, V( S' i7 C1 f/ f% {  d+ ^
  1868. Sound_Reset_Proc_Init_Sound
    3 D" S2 ]; G8 g6 _* }6 b
  1869. LDA <Music_Stop_State/ r+ O3 |2 Z+ h' u% m" E0 p( R. B, Q1 b
  1870. BNE Sound_Reset_Proc_End
    4 C% q2 d2 k2 Y* j) r3 q4 o
  1871. LDX <Music_Item_Cur
    - j; _/ a+ [3 t, ]/ P, s$ g
  1872. LDA <Music_Cur,X
    5 k# s5 J, q- W" {4 ~: X; L1 J; x
  1873. JSR Sound_Init_Proc
    & [; a/ U/ X, c: v/ u% Y/ [' p
  1874. Sound_Reset_Proc_End$ I7 ]$ r2 P2 r, F4 u
  1875. RTS
    - k$ ]3 |3 c3 p- n* ~+ p4 `( A9 I
  1876. , |* m+ h# V7 X  G# T! V( _, ^" F) H
  1877. ;==================================================1 Q/ _, w$ i* ~) S
  1878. Clear_Item_Text;清除页项目% }( G$ @. v& R
  1879. LDX PPU_Cur
    ' }4 {3 Z, h; Y
  1880. LDA #PPU_MODE_CNT_CLEAR4 a6 `; \9 G. d8 X8 d! ~
  1881. STA PPU_Addr,X
      Q8 m, ], Z9 F2 b& A
  1882. INX3 ^) |: O0 i+ r! p$ i+ c8 I
  1883. , w' J8 z& B8 ^9 l
  1884. LDA <Page_Last
    " f  r3 r9 B+ e/ n+ p) ^4 p1 B. X
  1885. SEC5 F3 ~2 k4 a4 J# ]$ K$ H
  1886. SBC <Page_Last_Index
    / B% a3 O' j# T9 T8 b, F. N
  1887. ASL A) t) d, O# v# c, |7 y

  1888. ( ]5 ]% V5 Y8 {* r
  1889. TAY
    , a4 b8 C* `2 o5 }
  1890. LDA Item_Pos_Data,Y
    3 H* D* X) ~9 U) F" T9 n, a
  1891. PHA* o2 `& A8 L/ }6 u4 q1 m
  1892. INY, e1 [6 L. s3 ]% \" a
  1893. LDA Item_Pos_Data,Y0 l  \, }2 S0 N
  1894. STA PPU_Addr,X" k/ }7 |# _7 Q3 R* A0 f7 N4 d
  1895. INX
    8 t; Q% n0 c7 a: ]* Y
  1896. PLA
    ' {/ e* O; N* k
  1897. STA PPU_Addr,X+ p* f2 ~; g' M; N  k0 N5 _& g
  1898. INX8 N  z. L* M2 {, G$ T1 y2 |

  1899. 0 ]5 _9 ^5 x; Q
  1900. LDA <Page_Last; j* a0 v0 U5 G: v% s; N9 ~3 M
  1901. ASL A
    1 v" t$ A# b. b- M- H( Z* ?0 U
  1902. TAY
    9 i5 \' e6 j/ o3 u7 \/ L4 {* u
  1903. LDA Music_Collection_Name,Y% a# `3 A3 d0 ?  d' H3 z
  1904. STA <Data_L
    / `/ [* T+ C) k: A5 H
  1905. INY1 c' l6 h0 A+ t" M3 \9 }# X% z9 d. d
  1906. LDA Music_Collection_Name,Y; S1 t  q  _- v
  1907. STA <Data_H/ A1 X- W2 i6 I; I( u2 \0 X4 G! \  |
  1908. ' B6 V: p8 u4 T/ `8 V! F
  1909. LDY #$003 j, C: v& C) @* }6 @
  1910. LDA [Data_L],Y
    " w- p# Z  C. d/ }
  1911. STA PPU_Addr,X/ t  u- q( q3 z; I9 j) O
  1912. INX
    ; Q( S- J2 ^9 m) g; @* u2 s
  1913. Clear_Item_Text_End* v8 n) C( z6 Q& M% G
  1914. STX PPU_Cur2 h- W) k' A. S3 T4 {# y: v1 f* c5 [
  1915. RTS1 {$ U) \9 V8 w! n: I/ J1 ?% m
  1916. . p6 L8 r0 M! a6 e
  1917. ;==================================================% b# L4 R; X8 K9 j& b5 b; ^- o
  1918. Show_Item_Text;显示页项目0 F# \$ `1 Q+ U9 e- B% y* y  @  d
  1919. LDX PPU_Cur
    ) A# _( {7 F8 E8 s3 o1 P
  1920. LDA #PPU_MODE_CNT_LINE/ Q. M1 T* l( H* {1 @# y
  1921. STA PPU_Addr,X
    8 Q* F" c$ @7 a( T: f
  1922. INX; ?5 m! ?* \. o4 v
  1923. LDA Page_Cur: V9 Q  \: U. T" C$ r2 a* ^
  1924. SEC
    ' |: e0 R' H2 s- j
  1925. SBC <Page_Cur_Index
    ' [) U' y% M# n# |8 P6 U: {3 L
  1926. ASL A
    , E+ a0 Q. v4 D3 @5 H" M
  1927. TAY
    ( U* R3 u0 j8 ^% [) b
  1928. LDA Item_Pos_Data,Y* D/ \: O+ G6 e8 [
  1929. PHA
    6 ?' V7 G) v! `7 _
  1930. INY( F9 l' }: p9 ]' z  T' T
  1931. LDA Item_Pos_Data,Y
    5 P- O9 x, ?- g
  1932. STA PPU_Addr,X1 |  A, M4 W. G
  1933. INX7 @. |' D1 r3 E+ R: `
  1934. PLA2 w) D) t. h! K+ V& v9 X
  1935. STA PPU_Addr,X
    . W& V6 U* k% O# b0 Q- c0 C; L
  1936. INX
    0 w/ {; H) ?7 c- D6 H. ~! G

  1937. $ Q" U+ K! i( t0 T) q+ j
  1938. LDA Page_Cur  }) [; w' S8 s
  1939. ASL A# ]+ m& W+ p6 A5 P) o! E
  1940. TAY" Q; y7 m. K5 z6 Y5 l* S" y
  1941. LDA Music_Collection_Name,Y2 L: \% R( G3 A0 L! a5 Y' V
  1942. STA <Data_L
    " ~+ G; w! \3 }4 Y# ~
  1943. INY+ w7 \8 _8 T7 n) D
  1944. LDA Music_Collection_Name,Y  z! U  n4 t3 |! n/ b
  1945. STA <Data_H7 }- u' `) I2 B* {

  1946. 6 T* P4 o& F: }1 M9 {4 F
  1947. LDY #$008 y& g5 u7 T3 X. I5 J2 f
  1948. LDA [Data_L],Y
    7 ^1 y3 f& j. t; x
  1949. STA PPU_Addr,X
    0 e& Q2 N  ?# w  G+ c
  1950. STA Data_Cnt
    5 g1 d- ~' D3 _  A
  1951. INX0 x) I6 h2 Z+ Z. E) N) E  P

  1952. # Z, \% q; ~) U- a( P7 B) y
  1953. INY
      T8 U. Z" [3 Y$ M/ G/ B5 |
  1954. Show_Item_Text_Write
    0 R3 g+ o/ j8 W! ~
  1955. LDA [Data_L],Y2 L& Z$ f5 h7 F/ q- a
  1956. STA PPU_Addr,X
    ; ]. n6 n; ]' k% B9 G0 _# Q1 B
  1957. INY
    " \+ P& \4 T* ]) X( ?, x7 i# _
  1958. INX
    ; y+ I; t9 x: n1 h0 b' o
  1959. DEC Data_Cnt
    9 f( P; l$ W, g5 O$ @
  1960. BNE Show_Item_Text_Write
    3 l, R7 c( `$ s/ C3 d/ S8 V2 D
  1961. " A4 ^- p4 }* k/ `
  1962. Show_Item_Text_End$ Z* N. R1 f1 V" z+ }7 }- C5 Y
  1963. STX PPU_Cur7 n9 S( a9 p; ?: L7 P2 b9 H
  1964. RTS2 ^" F- f: U% b, [- L
  1965. ) u- j  g+ I7 Y' H# T6 o
  1966. ;==================================================/ H& ]& A. \( P" H# i
  1967. Get_Page_Start_Index;获取当前页号起始与条目数量
    2 k! `7 [7 y2 w8 _* v
  1968. STA <Data_Buf8 \6 ]$ ]! `) m) ~
  1969. LDA #$001 u4 s; f8 s' ]* m3 F+ Z
  1970. Get_Page_Index_Calc
    ' N7 }, e# k; m' N$ [4 ~9 V
  1971. CLC  B# F: d- m3 x3 |0 i
  1972. ADC #PAGE_SIZE
    ) k& Z3 _4 s1 ]. x) n  _" Y
  1973. CMP <Data_Buf8 e: N% ]3 ~: z+ F# C, i. e% l# G
  1974. BCC Get_Page_Index_Calc$ i' M: W, @, m! y) o0 m  S" D
  1975. BEQ Get_Page_Index_Calc_End
      q# @% z6 A& R+ b/ I* {
  1976. SEC& t1 X( M2 O9 a# D
  1977. SBC #PAGE_SIZE# n" A4 b" g1 ^& }! x6 I
  1978. Get_Page_Index_Calc_End0 Z2 Z: ]5 C9 K! i' k' }
  1979. STA <Data_Buf
    8 A% P- \) U  ?; y6 F$ D$ E
  1980. Get_Page_Index_Cnt6 ?" ~2 _- _' x  w6 ~& F% ~4 H
  1981. LDA #PAGE_SIZE0 h% _8 }: k1 e- `" Q! n4 p6 Q7 d
  1982. STA Data_Cnt3 j* k7 `, n+ o* C1 ~
  1983. ) e5 H5 B" L! o% a) l: [  u6 g
  1984. LDA <Data_Buf$ ~& e  u! c( }. [
  1985. CLC
      B. |3 _; ]& {, e$ b
  1986. ADC #PAGE_SIZE
    . b7 m9 L, B+ M3 P% K
  1987. CMP #ITEM_MAX_SIZE0 }5 X2 F1 i% I' Z* z
  1988. BCC Get_Page_Index_Cnt_End
    / [, |3 J+ [6 l
  1989. 2 c4 H8 U$ @! m9 Y" a5 C. L
  1990. LDA #ITEM_MAX_SIZE, ^; i7 ?3 v9 `
  1991. SEC. Z8 H0 A' ^0 l6 P
  1992. SBC <Data_Buf
    & ~5 ?7 z" R- G- s3 h, }
  1993. STA <Data_Cnt- ?: F5 W) E/ p- w. n
  1994. , M8 j0 m3 q8 V  R2 k
  1995. Get_Page_Index_Cnt_End
    1 Q; X4 K( Z8 i/ Q
  1996. RTS
    0 L& F& Y# y" A
  1997.   }7 y1 F; B4 n' M! L* U
  1998. ;==================================================( H0 u$ I; x. E+ T$ m; e
  1999. Get_Last_Page_Start_Index
    % }: y5 p# z  K; p
  2000. LDA <Music_Item_Last4 k% H0 ?6 K  ~2 a" v
  2001. JSR Get_Page_Start_Index, `1 K/ X) M) D3 H+ P
  2002. LDA Data_Buf
    . X% `6 \" W2 w0 p3 [4 }- h
  2003. STA Page_Last* q3 D* E/ f0 f) J0 ?) E
  2004. STA Page_Last_Index) S) I- W' H: [% j" W% a  ?6 ^
  2005. LDA Data_Cnt
    . u: g; w; s$ s7 x( Z
  2006. STA Page_Last_Cnt
    / P  Z6 D% V: b* H+ M2 T  l
  2007. RTS
    $ X/ e0 I/ N; `
  2008. ; m0 V$ d$ _8 U6 Q/ O
  2009. ;==================================================
    ; S: x5 o# c! i6 q+ \/ W' Y# p
  2010. Get_Cur_Page_Start_Index
    & T3 y2 q7 w3 `5 e* [
  2011. LDA <Music_Item_Cur. N% z* w. B6 O7 [' W- W% X
  2012. JSR Get_Page_Start_Index
    5 P5 u+ L: I" ^
  2013. LDA Data_Buf
    - w9 `! p  P; u  X& Q
  2014. STA Page_Cur
    - q0 z7 M# e0 V& S# o' A
  2015. STA Page_Cur_Index. ]2 P( W8 W! |: ?' d
  2016. LDA Data_Cnt! m7 v6 i" {0 X7 g/ F. U
  2017. STA Page_Cur_Cnt6 P  ?: y" }0 y3 S8 T
  2018. RTS9 P7 ]) U# [7 |2 @2 O+ |( q

  2019. 4 b! y/ z! s# O1 e) _1 Y; K
  2020. ;==================================================3 y- |* D7 X; h6 F; D
  2021. Show_Page_Text;显示页文本$ e$ ]' Q+ g2 J0 G3 D
  2022. LDA <Text_Disable_Flag* o5 L" N$ o* K1 S* x& e
  2023. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME | TEXT_DISABLE_ITEM8 i) N5 b/ W2 V" A1 Q; P
  2024. STA <Text_Disable_Flag
    * X$ y1 q+ T3 k1 L) K
  2025. % v( @/ k% b8 F0 [2 ^! c
  2026. JSR Get_Last_Page_Start_Index/ [; H& z7 U1 V
  2027. JSR Get_Cur_Page_Start_Index
    9 c0 Q: M. z7 Q. k$ f

  2028. , y# b5 b# W) T" ^0 }; T4 w
  2029. Show_Page_Text_Set* N3 t! j, I. P" n
  2030. 8 R' r4 V; N5 g
  2031. Clear_Page_Last_Item;清理上一页8 E- |- {/ @* ]8 \/ \! v
  2032. LDA Page_Last_Cnt
      W' j' N- E& {
  2033. BEQ Clear_Page_Last_Item_End* ]$ N/ Y: u3 z) ~& h
  2034. JSR Clear_Item_Text
    " ?0 N8 o; J: w/ I
  2035. INC Page_Last
    ! A5 w' E5 O( ~( C' |
  2036. DEC Page_Last_Cnt* O; _* k/ f6 x* {3 {1 H$ [9 I+ a
  2037. Clear_Page_Last_Item_End
    8 m/ ~& g$ P2 V2 ~$ i9 v7 H& Z
  2038. ( D( q; {. P* c. I/ }
  2039. Show_Page_Cur_Item;显示当前页/ [% Z" {: h0 j& q5 h' t
  2040. LDA Page_Cur_Cnt, S0 v) T3 ~! H
  2041. BEQ Show_Page_Cur_Item_End: X1 P# A/ z- g- l. o/ P! t, L
  2042. JSR Show_Item_Text7 r! `1 }( N, T/ `# d/ J+ d
  2043. INC Page_Cur. x. ?8 a4 y7 I% A* e' \+ W
  2044. DEC Page_Cur_Cnt
    " o/ Q. K/ _8 _
  2045. Show_Page_Cur_Item_End
    ' t: ^6 H! f) S8 A
  2046. 9 B, M8 |: s4 q% \
  2047. INC <Time_Wait_Cnt
    4 ?0 ^# f6 R! B# y9 I1 \5 k
  2048. Show_Page_Text_Set_Wait;等待NMI完成PPU操作0 D0 B: j) `1 k5 M. K( E( W# \
  2049. LDA <Time_Wait_Cnt+ Q( H& f0 Q" e) j! c$ M8 t
  2050. BNE Show_Page_Text_Set_Wait
    3 }5 j/ a. ]+ I2 g4 i9 U0 H* h5 s
  2051. 5 ?  L  J+ E% G( e
  2052. LDA Page_Last_Cnt: e' t) B8 m& }( l9 C. n
  2053. ORA Page_Cur_Cnt' Q) B1 w( {; ?5 M: V; k
  2054. BNE Show_Page_Text_Set3 a  u% b; f) N2 y5 p  R( c
  2055. LDA <Text_Disable_Flag
    $ x% U. O, W6 W  Z' \% [$ S( Y
  2056. AND #TEXT_DISABLE_ITEM ^ $FF
    + a2 T9 z  d+ y* o/ X6 m
  2057. STA <Text_Disable_Flag* \/ X' {: |0 ?5 j
  2058. RTS
    ; g' E, L1 }" W3 k# S

  2059. ; J8 d2 O9 M7 x2 ^) I2 m5 M" \
  2060. ;==================================================
    3 y- B4 `; _3 J3 J  R
  2061. Last_Item;上一项9 M: C3 {1 ~+ w& ~0 W7 I7 t$ o
  2062. JSR Clear_Last_Track_Name
    " j" J) u9 b; e' {, v
  2063. JSR Disable_Text_Draw" Q/ K) r$ r) o
  2064. / P4 j8 W1 _8 ~! _) U3 q. j
  2065. LDA <Music_Item_Cur
    ; k" W+ g' l" @5 i- H
  2066. STA <Music_Item_Last4 X( i0 I$ V& L; V* m; E

  2067. ; Y( Q+ b, B! {: l, q; h
  2068. JSR Get_Last_Page_Start_Index/ X7 o: Z6 a9 Y; ?/ q2 _
  2069. * y4 S' y9 P- B; `' h) P6 g3 R' B
  2070. LDA #$00- l; K; t% m: l+ P" X& q% X
  2071. STA Data_Buf
    - |+ O& y: o3 E$ `$ E* G2 e' v4 ~
  2072. / B8 Z& P6 ~, W2 a! x# P, T
  2073. LDA <Page_Last
    ( ?7 @, ^8 `  P8 A0 U- L( |4 s" C
  2074. CMP <Music_Item_Cur
    : s9 q0 j. a' v) G" x
  2075. BNE Last_Item_Begin
    8 }$ b' X5 h. k

  2076. 3 r5 K6 {0 ~9 D; R, y
  2077. LDA #$01
    3 C3 @. X* S: a# r
  2078. STA Data_Buf
    7 `6 B& O. h  s& E- a
  2079. Last_Item_Begin/ `6 |/ ?* k* I% E, e
  2080. LDA <Music_Item_Cur
    . e. f& X/ o! P" p0 C; g
  2081. BNE Last_Item_Set
    4 v5 n/ J: L9 P: A! E: |
  2082. LDA #ITEM_MAX_INDEX + 1
    5 Q0 T: C+ h* ^2 R8 S2 b9 o! t
  2083. STA <Music_Item_Cur2 L9 _1 q. X7 G# s: t
  2084. , h+ R8 @/ n2 c( |+ L" Y8 a
  2085. Last_Item_Set9 z4 o2 T6 x1 V! |/ F; s
  2086. DEC <Music_Item_Cur
      [0 R6 M. O4 [& c. i# u; E. w/ K
  2087. LDA <Music_Item_Cur
    # n- X1 W* }$ _  m
  2088. JSR Reset_Current_Music
    " f0 p/ O# e% ]- C, V- }2 A
  2089. ; _) D- g2 M* e+ |- X7 W/ i7 i- T
  2090. Last_Item_Play. y0 S2 Q" v3 E1 P/ m( E9 x' Z# Y" U
  2091. LDA Data_Buf* f8 K# F5 @5 p: X
  2092. BEQ Last_Item_End
      H/ P; K! O5 c, o7 M9 \2 _0 b8 u- q
  2093. JSR Show_Page_Text1 H. h, H" y. F2 T& _3 @* m
  2094. Last_Item_End+ p+ m. T8 Q+ D( c+ x4 Z, ]8 C
  2095. RTS7 @+ G. W! A  a$ d

  2096. . e6 C& ?  p: o/ x0 S: R4 r
  2097. ;==================================================
    9 @* k: l6 n9 `  N2 r  t
  2098. Next_Item;下一项8 U' f/ R& v; Z3 ~
  2099. JSR Clear_Last_Track_Name
    ( z3 C6 ^8 T6 l1 ^% r/ |
  2100. JSR Disable_Text_Draw, {4 V: x# V- d% g) v- t2 M3 k

  2101. 6 n% X; R2 B" ]( G* {/ m  A
  2102. LDA <Music_Item_Cur
    # {! m% E) l9 ?3 J% p: X
  2103. STA <Music_Item_Last5 c+ u. W* `! r
  2104. 9 c" w" ]7 ?9 [0 t$ w5 ~
  2105. JSR Get_Last_Page_Start_Index. O9 P* H" O+ U: M- t  _. k
  2106. . b) u* j" C$ c% \9 e% w
  2107. LDA #$004 _% c1 ~# o* G4 {; g3 J: {, H
  2108. STA Data_Buf
    1 \8 V8 _' Y9 m0 M* M" Q( Q
  2109. ' b0 d  M% s7 c4 n( g4 {- B  x/ m
  2110. LDA <Page_Last
    4 b5 T9 G% z. X. N- u
  2111. CLC
    - q* W8 X' s; c% g( i. @
  2112. ADC <Page_Last_Cnt
    - E: |" l" Y* N* O' Y  `
  2113. SEC) j. X3 U- _6 \8 B
  2114. SBC #$01
    : F( k5 b1 i3 _! I) U9 Z
  2115. CMP <Music_Item_Cur
    ! D- F; F5 V/ G! h3 |" i" p' r
  2116. BNE Next_Item_Begin
    # K/ @9 M. e, Z. P1 k0 F2 @
  2117. 3 a$ c( b# E* F$ m& y% ]8 P
  2118. LDA #$01( u0 o) z6 _. m# m8 R7 d7 u
  2119. STA Data_Buf1 k9 ^. [7 j5 t" g1 A6 X
  2120. Next_Item_Begin- q7 s8 y8 q' I
  2121. LDA <Music_Item_Cur1 i" P/ |- ?( P1 G6 J1 \' p! r6 e
  2122. CMP #ITEM_MAX_INDEX
    ! Y3 k# L' I7 _- W5 J# `
  2123. BCC Next_Item_Set
    2 A7 f& Q9 e6 `
  2124. LDA #$FF, P9 q! p* ]2 f! M% L
  2125. STA <Music_Item_Cur
    6 n1 F- }9 i8 |
  2126. Next_Item_Set: z8 {; C0 O# a2 |: K# I
  2127. INC <Music_Item_Cur5 a. p1 `% F- g! d' ^, U
  2128. LDA <Music_Item_Cur
    $ c: b7 t8 Z% C
  2129. LDA <Music_Item_Cur
    3 w* C$ b/ `$ v1 d: `, {4 S
  2130. JSR Reset_Current_Music
    + w6 `. z( V' c3 }
  2131. Next_Item_Play
    " t+ e6 Q$ |9 }2 C
  2132. LDA Data_Buf
    3 V* [) {8 o/ e- T
  2133. BEQ Next_Item_End& v8 \6 U: Q2 Y. L& ]7 C3 b" O
  2134. JSR Show_Page_Text
    ; |! Z: s; _9 y$ M* ]& }% `3 h" P0 [
  2135. Next_Item_End, B. w) w( [! v* ?
  2136. RTS
    : x/ n# E2 p( _# ?

  2137. + W4 D# U) {* k1 A* b  ]
  2138. ;==================================================
    8 ~  C3 v2 ]& G7 a* K
  2139. Last_Page;上一页$ r& C+ Y- D8 y6 }. t
  2140. RTS7 l- `, W& x3 Y1 e8 O( x4 Y
  2141. 4 D$ I. }/ `) u% T7 U6 L  |
  2142. ;==================================================0 s: }0 R) ]9 ]
  2143. Next_Page;下一页
    ! B5 q& N& b6 |9 B
  2144. LDA #PAGE_MAX_INDEX
    + J& r, z  P- @* D
  2145. CMP #$019 q! {, q: p/ y2 F$ Y; n
  2146. BEQ Next_Page_End
    . p' Y  d! B- p
  2147. , b8 u4 X4 w: J8 O- `
  2148. LDA <Music_Item_Cur
    0 R: |# V  {7 Z- \* f4 }
  2149. STA <Music_Item_Last
    ( _' H% d1 k! l2 K5 ^) L
  2150. 2 k+ j* E( ?, [0 @
  2151. JSR Get_Last_Page_Start_Index
    . A5 n6 Y# b! H% h  a
  2152. 1 `1 Y; E4 h; D- t& a
  2153. LDA <Page_Last_Index4 N* N! U' v  L: D- R% ]. t& i& G. K
  2154. CMP #PAGE_MAX_INDEX
    " y; @5 t! r) k
  2155. BCS Next_Page_In_End_Page
    * i% r3 x9 ]# G- K5 ]( ]& [
  2156. * w7 L9 d/ H/ Q8 |2 q+ u
  2157. Next_Page_Not_End_Page;不是在最后一页
    $ B8 H* j- y* z2 l! |
  2158. LDA <Music_Item_Cur& G; e3 R$ Y8 G; x" Y& l$ Z' @
  2159. CLC9 J2 g  R7 G  {1 \0 J  l
  2160. ADC #PAGE_SIZE# Q: }& B1 l6 s5 }: p+ w7 |
  2161. CMP #ITEM_MAX_SIZE* l& N" ]  T4 {& }9 b
  2162. BCC Next_Page_Not_End_Page_Less
    + o* F: \0 J. w8 e6 B. x
  2163. LDA <Music_Item_Cur
    4 G* r; x4 W/ U: k
  2164. SEC
    8 |0 A+ k& P" y3 g
  2165. SBC <Page_Last_Index
    ; u& f- }0 H9 @1 _8 o% f, l  o
  2166. CLC- i# B  k* W  ]0 Z% h
  2167. ADC #PAGE_MAX_INDEX
    - O& P0 s- {1 L# F- O
  2168. CMP #ITEM_MAX_SIZE
    + g! c/ X8 [7 p3 t- {1 I
  2169. BCC Next_Page_Not_End_Page_Less1 _( x, h0 v2 n( \5 L
  2170. LDA #ITEM_MAX_INDEX- z) N8 d  I+ ~- \! Z& s8 E5 J. m
  2171. Next_Page_Not_End_Page_Less# O$ z1 z4 j. C, V
  2172. STA <Music_Item_Cur
    0 o7 Z. T/ f4 g" X% }; R$ Q
  2173. JMP Next_Page_Reset& d# G2 a! b+ @

  2174. 0 L  z# s+ {/ V5 N: c. p
  2175. Next_Page_In_End_Page;在最后一页1 G) }. {1 `$ k0 B. w) z, F( z. ~
  2176. LDA <Music_Item_Cur' H2 e7 H, T0 h
  2177. SEC
    & D8 Z8 ?( P3 h8 c, Y( Z
  2178. SBC <Page_Last_Index
    & M+ L. p, }- Y8 \  L5 v3 A
  2179. STA <Music_Item_Cur  ?, v% c1 \# K; ^9 q- b% M  j8 X

  2180. 9 c4 e1 |( V3 E. K4 ?8 D6 R; r  P
  2181. Next_Page_Reset
    . N+ F0 m. N, U$ P
  2182. LDA <Music_Item_Cur
      h1 J; k- X0 Z
  2183. JSR Reset_Current_Music1 [0 |3 y& ~( n0 m3 M2 k% X8 d3 ~7 ]  G
  2184. JSR Show_Page_Text
    0 ~. k2 B5 N6 C
  2185. Next_Page_End& O# @! k. G% j8 [# B# P. w
  2186. RTS8 A: x4 g5 m4 X$ O& S

  2187. - a9 M* Z* L1 ^3 Y! I
  2188. ;==================================================
    ) @; Q& d$ d9 J
  2189. Disable_Text_Draw;禁用音乐条刷新
    / ~7 v7 Z: S) s) A2 P; T/ Y/ n! `- J
  2190. LDA <Text_Disable_Flag$ ^6 G  W) [1 V. Q) j7 ~( a
  2191. ORA #TEXT_DISABLE_BAR | TEXT_DISABLE_TIME. Z* p. L2 N' _, j, a
  2192. STA <Text_Disable_Flag" U, U# g$ \! D; E9 o/ ^6 f4 R
  2193. RTS
    . y9 |" d/ R! ^% D2 W

  2194. : F" {, _1 Q0 Y; f& ?! `
  2195. ;==================================================
    8 ]  d4 M# ^8 G' `' ~+ T
  2196. Clear_Last_Track_Name;清除上次曲目名
    : \! M7 Q, g8 v7 b* e, A+ a9 ~
  2197. LDX <Music_Item_Cur
    ' i) b# B0 C; ~* A1 p; J9 o6 D; ?
  2198. LDA <Music_Cur,X, p* c% k: {& }* p. S
  2199. .IF Track_Name_Pos7 ]& ~2 B* J7 P6 C! O0 a7 Q
  2200. JSR Clear_Track_Info+ J/ p, E8 A# @; |
  2201. .ENDIF; _" @( B0 x8 O5 P
  2202. RTS
    . u: X2 G1 S# G: B
  2203. 8 \: y1 p+ I" h% i
  2204. ;==================================================& O- C$ T) c% y
  2205. Reset_Current_Music;重设当前曲目
    : h- b# M4 m! u; h
  2206. " F0 I) ?: M! H' x
  2207. ;写入当前总曲目$ i6 J* ]1 q; u; R# {5 p. E( s7 `
  2208. JSR Set_Sound_Total
    4 a# p: w! Z* U% ^: d
  2209. LDX <Music_Item_Cur3 j8 c. c: V. }
  2210. : a# [8 \# T& Z2 t1 w
  2211. LDA #$00
    ( S4 S" z( C0 X
  2212. STA <Music_Last
    5 l- I3 V( b5 J
  2213. % ~2 O/ z1 G! V2 d" w$ v, T. r$ I
  2214. JSR Sound_Reset_Proc
    ! Y7 ^9 d- f8 k) _4 o
  2215. JSR Music_Show* t- `7 p$ Z3 F# n  G4 ~
  2216. RTS
    , y# K+ Q9 d  |! K- t' u% J- ?

  2217. # U/ f# K. n, x6 ^- w
  2218. ;==================================================/ B  p' H/ m; g- R, [
  2219. Music_Song_Stop;音乐停止2 h; V* ]# H% @
  2220. LDA #$01
    - [/ j$ F$ O2 P, \
  2221. STA <Music_Stop_State9 c; F( t/ x. A$ _. c
  2222. JSR Music_Bar_ReSet
    9 D( H  h- F2 j4 C8 b1 V
  2223. JSR Time_ReSet/ r0 i) j0 I! [. Y; W  I. p5 F+ L
  2224. JSR Sound_Data_Clear! z  ?& x- Y, R
  2225. JSR Music_State_Show. S$ I4 D" w) E- C9 y+ f
  2226. RTS
    3 `! M/ B2 c8 Z3 B

  2227. 5 V* n: e8 W' t$ [
  2228. ;==================================================6 r+ v3 [) `: W9 r, E
  2229. Music_Song_Play;音乐播放" c' n& ~- i; h. d. W4 U# c
  2230. LDA #$00% X# x& {) C9 `, O8 Y3 y
  2231. STA <Music_Stop_State
    ! v+ ?" ^5 Z/ [  {: |* F
  2232. LDX <Music_Item_Cur! l: O5 B5 E  N& ?4 i; l. a( n
  2233. LDA <Music_Cur,X! {# \# R1 F* e; d1 a5 C
  2234. JSR Sound_Init_Proc- S$ c" X9 b( G; H
  2235. RTS" o# {* i" C4 {# u* K! U7 t8 t
  2236. * k$ d7 _) S+ C+ ~% d8 j. d' J
  2237. ;==================================================- c; m# ~8 y- v5 k) X1 p
  2238. Music_Song_Last_10;上10曲& E: W$ r- S$ N0 o
  2239. JSR Clear_Last_Track_Name  b* j- Z, |" _$ r7 \- v
  2240. JSR Disable_Text_Draw( ~! A+ U( z0 w  ]3 W  n! D4 t  k
  2241. LDX <Music_Item_Cur
    / k- Q9 K5 s6 j: |/ i. S: ~- f4 Z
  2242. JSR Set_Sound_Total
      j" G- a- P) C
  2243. LDA <Music_Cur,X: q: ^1 T2 Y+ @' F
  2244. SEC
    % b% Y8 I- p& M2 x' r$ d7 A
  2245. SBC #10
    ' ?) J* P  w: Z  w4 O/ m! v, B# X
  2246. BCS Music_Song_Last_10_Set: U( H% S8 ?" A: V
  2247. LDA #$00
    # U' h+ u. b; M$ K6 `( S( [' F/ ~
  2248. Music_Song_Last_10_Set( [. f' b7 n3 A9 ^
  2249. STA <Music_Cur,X
    % l+ J* ~0 {% M; v( I3 m
  2250. JSR Sound_Reset_Proc4 v# _8 ?' F% j3 {
  2251. JSR Music_Show
    + |' f. E  Y3 X" X6 _( J
  2252. Music_Song_Last_10_End4 x$ i) R2 j3 v
  2253. RTS
    6 H# L: Y: Y# w
  2254. & s4 J" N4 ?  U. Z3 K
  2255. ;==================================================3 W- z/ F# ~8 b- F$ D6 t1 b
  2256. Music_Song_Next_10;下10曲+ O5 }% W, J3 N; l. v* _, Z  f
  2257. JSR Clear_Last_Track_Name
    . z4 q  w7 A6 w8 [) b/ D, D% A
  2258. JSR Disable_Text_Draw( W1 o) m' |8 ~5 [
  2259. LDX <Music_Item_Cur
    7 n% E  D2 K0 v" y, q
  2260. JSR Set_Sound_Total8 W4 ]9 {7 j) @" L  k0 {8 H- c9 a
  2261. LDA <Music_Cur,X' t& ^' ~0 A. d9 K& }# c
  2262. CLC
    4 {+ d4 A" k: \8 j' y( }
  2263. ADC #10* ^) e9 g- Q/ C, e' T
  2264. CMP Music_Total
    $ f1 H  B6 {7 y$ K" \5 ^* m; [
  2265. BCC Music_Song_Next_10_Set8 t8 k4 y  D3 {1 H4 o  `( m
  2266. LDA Music_Total3 C) X& ^- O, g$ [( p' f. T# W
  2267. Music_Song_Next_10_Set
    2 z: C: G: ]2 ]  _8 @' _( o
  2268. STA <Music_Cur,X
    ) w, ~! q0 F) l
  2269. JSR Sound_Reset_Proc
    8 N, E4 w4 a( `) J- F3 Q- Y4 y
  2270. JSR Music_Show
    ; l. u. s5 s* s9 ]
  2271. Music_Song_Next_10_End
      _8 K; ~: n/ `9 X
  2272. RTS6 j( v) G- m: o, h8 L

  2273. : W) F9 E& J( f$ ^7 ?: ~1 O
  2274. ;==================================================8 k, ]. N* q) x( g9 o4 [& C  A
  2275. Music_Song_Last;上一曲
    ; h, ^4 g- H9 o( E) M; ?
  2276. JSR Clear_Last_Track_Name2 G$ a0 F+ v$ K1 o) y& d3 ~
  2277. JSR Disable_Text_Draw
    4 ^! W$ A3 ~8 Z9 f7 Q# G1 R
  2278. LDX <Music_Item_Cur& Q- d: R7 N1 k0 ]% W
  2279. JSR Set_Sound_Total
    ' I8 v7 ]3 S( {% c
  2280. LDA <Music_Cur,X- P/ _) _3 o  u  H
  2281. BEQ Music_Song_Last_Set" }, @. z5 n' i& a1 f1 L
  2282. DEC <Music_Cur,X
    ) J( @, |$ z6 O
  2283. Music_Song_Last_Set( \# B7 o$ ?- t+ e
  2284. JSR Sound_Reset_Proc0 s5 e! i1 B9 f9 V4 O: o2 h
  2285. JSR Music_Show" ~" J$ _+ m" b% O* f
  2286. Music_Song_Last_End
      X; k8 a4 V: D( z
  2287. RTS
    9 }+ E1 E9 |5 y7 U/ M8 ~  e
  2288. 5 ?4 y2 ]4 V, R4 B: G
  2289. ;==================================================
    ) K5 B% `( I2 [1 x  {
  2290. Music_Song_Next;下一曲# C; H( x4 z: w4 s7 k
  2291. JSR Clear_Last_Track_Name# D, X" _3 |( ?% M
  2292. JSR Disable_Text_Draw: F( R8 e' _5 D: t) @  G1 v
  2293. LDX <Music_Item_Cur
    5 W6 K) _2 n5 q# A9 ]4 X7 C
  2294. JSR Set_Sound_Total1 X- n" G% ?& M# `4 T8 I. O
  2295. LDA <Music_Cur,X
    " A; ?, |4 F( p1 y7 n
  2296. CMP Music_Total% e5 Z- V, y$ @- F9 s
  2297. BCS Music_Song_Next_Set
    # T* z; V% y# k$ @* x, i# ?
  2298. INC <Music_Cur,X$ {4 f% l5 a" @- r0 q
  2299. Music_Song_Next_Set  |% F) }/ @( ^! k
  2300. JSR Sound_Reset_Proc& J" M$ e- x  ?& \8 s. T4 Z
  2301. JSR Music_Show2 m2 N. U, b* i2 L* T. U
  2302. Music_Song_Next_End- ^" n6 B# b; f( ~$ D0 o
  2303. RTS
    $ ?9 O% q& W9 {; c6 _

  2304. $ t- w: P9 u( `1 c6 }0 g* f: t+ [
  2305. ;==================================================/ g- I" \. l. H. Q3 I! Q
  2306. Change_Select_Item;改变当前选择项  y8 v. D5 k) c- V- _4 O
  2307. ;--------------------------------------------------3 ~- y$ I- f! J
  2308. Change_Select_Stop_Play_Item;停止/播放
    / \  A% ]8 n/ E, S' d
  2309. LDA <Key_Once
    , A5 `2 O9 H* U; T1 N
  2310. CMP #$10, o% I% H+ M" O' G- p( Q
  2311. BNE Change_Select_Last_Item7 ]1 \. ?9 X/ i( @- l( `/ Q5 ?" C0 t2 j
  2312. LDA <Music_Stop_State
    % r7 T: V- C6 \
  2313. BNE Change_Select_Play
    : k( u5 @' M( f" z3 R' ^
  2314. JSR Music_Song_Stop3 P6 u2 c* [3 B0 N- q; p* K1 w+ |
  2315. LDA <Music_Stop_State
    / x4 N" c" W8 G! N+ f6 O
  2316. RTS
    ) t# K" g2 s) g5 S! ], J, {& J$ V
  2317. 5 C0 f1 p' w' R9 r
  2318. Change_Select_Play$ z8 B/ R! K6 Q  i
  2319. JSR Music_Song_Play, N& D& a6 @: S3 m7 R
  2320. RTS3 `- ^1 K: C5 H* _9 ~. G7 q

  2321. 8 l# i  y! v, T: o7 `# Z4 g) n
  2322. ;--------------------------------------------------
    " q7 {9 s) r: ^3 o6 @
  2323. Change_Select_Last_Item;上一个专辑" H, O" d; C( q9 b' i( M4 i
  2324. LDA <Text_Disable_Flag; `, q2 ?. x9 c% i& j
  2325. AND #TEXT_DISABLE_ITEM( ]5 I) ^5 S  f* _0 R
  2326. BNE Change_Select_Item_End. D  j' ]; `) O+ ], u
  2327. LDA <Key_Once
    9 _7 g" Y# K7 k" B
  2328. CMP #$08
    ! Q/ J8 _! D. r" I3 I
  2329. BNE Change_Select_Next_Item& n, [; [4 k  A7 I: K( a
  2330. JSR Last_Item
    0 `) a8 _5 A5 F+ D
  2331. ;--------------------------------------------------) _1 Y! G! ~$ o  P; k& D
  2332. Change_Select_Next_Item;下一个专辑
    3 H( s: q6 \! Z  g
  2333. LDA <Key_Once
    * w) F) i4 d5 G
  2334. CMP #$04
    - {: Q) ?8 G5 F; {( p' H  f
  2335. BNE Change_Select_Last_10
    % K$ j% T( S: {; ]2 H9 P( j! D' _
  2336. JSR Next_Item$ K/ Z3 f  _& ?7 }$ M
  2337. LDA <Music_Item_Cur; Z: m1 J5 u8 |- p1 j1 ^
  2338. JSR Get_Page_Start_Index
    4 e# f) d; |2 u+ `5 M/ z2 E
  2339. ;--------------------------------------------------8 b! t& a' t! }+ w5 N$ b0 U3 V& [
  2340. Change_Select_Last_10;前10曲, I, d4 ^1 e- ^  A5 B- L6 E1 `$ y
  2341. LDA <Key_Once9 r# C( X0 R  \& z
  2342. CMP #$405 X( a( [, `# q3 Q
  2343. BNE Change_Select_Next_10
    + z& C' k+ |8 M# h5 {. x
  2344. JSR Music_Song_Last_10; h& q' k0 ^1 L3 \2 P" J
  2345. ;--------------------------------------------------
    + A" @' n" {. f5 B; l
  2346. Change_Select_Next_10;后10曲* e* j; n. R/ L( V! x
  2347. LDA <Key_Once2 M" w. Z( M1 K; ?+ I. g& @
  2348. CMP #$808 b- t1 k; E4 w) D6 L% d* z; T6 h
  2349. BNE Change_Select_Last0 s$ J# |/ `+ h, U/ u
  2350. JSR Music_Song_Next_10; k$ N" T7 z& Y3 O0 c4 Y4 u
  2351. ;--------------------------------------------------
    4 C; m. P0 q& P$ r) D" {4 Z
  2352. Change_Select_Last;上一曲; @" X# v" `3 g! C# j2 q; V  J5 p
  2353. LDA <Key_Once5 o% z' k' t+ i/ d- {% j: V* a
  2354. CMP #$02" O* p6 y) L: ~4 {2 z" B( R
  2355. BNE Change_Select_Next) I# D3 m9 m+ ]4 s  E
  2356. JSR Music_Song_Last6 S' ]: Y, o1 M9 @3 [* ^
  2357. ;--------------------------------------------------9 ~5 M( J/ V, M8 b& W/ S: E
  2358. Change_Select_Next;下一曲* B$ j; p1 `- z" d
  2359. LDA <Key_Once: \, j, s( O, b3 m& p
  2360. CMP #$01: h# T0 j  m8 x' x, D  w, `
  2361. BNE Change_Page_Next  G( H! t& Y9 _. p* f
  2362. JSR Music_Song_Next
    9 z( W4 j3 e+ |( Y, `" L" s
  2363. ;--------------------------------------------------
    3 ?4 v" W) P; w1 V
  2364. Change_Page_Next;下一页1 B4 G' i% X3 z: s$ t
  2365. LDA <Key_Once
    " S- I6 {% B: b+ k
  2366. CMP #$20/ B) o: M9 c4 Q, d
  2367. BNE Change_Select_Item_End
    ) D4 i* z) ?5 y; c: O
  2368. JSR Next_Page$ v0 w) Q$ l0 k" d, K* [, h9 q
  2369. ;--------------------------------------------------7 ^& C( V( v$ I/ M
  2370. Change_Select_Item_End( R% V8 o% }$ A: y; ~/ e) P
  2371. RTS
    # ]8 c+ P( L+ |& ~2 [0 I

  2372.   L$ ~" Y6 `/ Y2 P
  2373. ;==================================================
    * ~3 M  c  c+ {  c( J# i9 B
  2374. Show_Arrow;显示箭头光标
    4 t( w5 f- Z3 T. S
  2375. LDA <Music_Item_Cur
    & I: Q0 v- b9 w" n7 B! F; x
  2376. JSR Get_Page_Start_Index
    9 v, J: s$ e0 [  G
  2377. LDA #$00
    & Z1 E( Y* V6 J( [4 i/ Y7 x7 S
  2378. STA PPU_OAM_ADDR5 Y4 O# \, }6 s: I
  2379. LDA <Music_Item_Cur
    ( r' F3 o  F6 O, e; M7 Q; U7 x
  2380. SEC! V5 k* r7 R) d, R, U9 D' ]
  2381. SBC <Data_Buf
    ) M2 R& e, I  ~* h
  2382. ASL A
    - ~  V: q1 G. J% q5 Q2 L
  2383. ASL A5 J* t- E+ ^& k# B, X! q9 E( G8 A
  2384. ASL A5 z: g; W( i. M( x
  2385. ASL A
    + l7 O0 C3 f; B8 E" w
  2386. CLC4 Y' c* D4 Y. ^
  2387. ADC #ARROW_Y_OFFSET3 L7 F- ?  H1 ^6 m1 D/ [
  2388. STA OAM_TEMP_ADDR + $00
    2 V* D! F  K& l' P; h8 R: ]& C
  2389. ;STA PPU_OAM_DATA* Y: v3 @7 O7 c: |3 D- _1 h/ ?( G
  2390. LDA #$1F0 r  B" q# O3 I, d2 _$ t$ ]  N$ @
  2391. STA OAM_TEMP_ADDR + $01
    2 i4 D% a# J) C: Z* |! L
  2392. ;STA PPU_OAM_DATA% ]4 ~/ v0 G  w  m* S
  2393. LDA #$00  ^0 ?9 Y% L1 F/ G( f! G
  2394. STA OAM_TEMP_ADDR + $02) f3 g/ M: _% k$ J/ W
  2395. ;STA PPU_OAM_DATA2 Z( P* f5 m* d8 Q5 s2 \$ P
  2396. LDA #ARROW_X_OFFSET
    & x6 D" V( |7 U/ A. W+ G
  2397. STA OAM_TEMP_ADDR + $03, V- J: g% J% ]/ r! L/ O5 ?
  2398. ;STA PPU_OAM_DATA' b7 z" N! c- M- w7 p
  2399. RTS
    $ r$ @7 \+ h4 a7 _

  2400. ' m% u% X. i- \9 t' S- m
  2401. ;--------------------------------------------------. f0 Q2 u( ?8 P3 V1 Q) \
  2402. ;命名表数据
    ( n" q$ Z3 U; h& D* ]2 I' y
  2403. Palette_Attributes
    2 v4 n0 y5 u% i  T
  2404. .IF SOUND_BAR_SHOW_ENABLE
    ( ?' f, ^9 W$ A& H( S- N
  2405. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    ( [) ^5 Q( D( v2 P5 q/ _' p! t% J- ?
  2406. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    , a/ X$ \2 G5 r# g, D( k
  2407. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$756 {4 v2 t* g& J# Z
  2408. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA! _/ S2 p$ L& ]0 q8 ?/ |- G
  2409. .ELSE
    4 V3 m  s( J" c3 a6 p+ O
  2410. .DB $00,$00,$00,$00,$00,$00,$00,$00,$55,$55,$55,$55,$55,$55,$55,$55
    ) t- ~' z! ]- _
  2411. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
      j. c8 Q* J8 a" B9 ]
  2412. .DB $55,$F5,$F5,$F5,$F5,$F5,$F5,$55,$55,$FF,$FF,$FF,$FF,$FF,$FF,$75# {+ |9 t" k( _6 r7 S# a
  2413. .DB $A5,$A5,$A5,$A5,$A5,$A5,$A5,$A5,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
    5 U& \) D! h1 s2 q0 l+ o2 h/ r
  2414. .ENDIF
      I3 c' @1 J( `- E! A" |! v7 [
  2415. " L1 q$ R) a3 U% e" P6 ~
  2416. ;--------------------------------------------------' u% |: |+ S- c
  2417. ;调色板数据
    ; A3 {2 \# h3 d; T4 m4 \( M
  2418. Palette_Data" `& t8 b; @  ~( T
  2419. .DB $0F,$27,$20,$0F,$0F,$23,$20,$0F,$0F,$21,$20,$0F,$0F,$24,$20,$0F
    , P7 v5 \8 g9 [# v: N
  2420. .DB $0F,$21,$24,$25,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F1 c) q+ }9 H5 N( l% Z, W

  2421. 5 ~% p% J6 d* C/ T; O
  2422. ;--------------------------------------------------% R! ]& w% L; Q; h
  2423. Static_Text_Data
    8 G  t- x$ R' m2 t
  2424. .WORD Static_Text_Caption_Data
    + R9 \9 P# d/ w7 y' s5 n4 c
  2425. .WORD Static_Text_Author_Data
    ; P8 i( }. B: f6 a
  2426. .WORD Static_Text_Date_Data
    0 W8 M5 ^  b! b4 x$ k7 ]
  2427. Static_Text_Data_End
    # M: `. U% J% u
  2428. 6 z$ Q$ N0 X# u6 Y8 y9 t4 p
  2429. ;--------------------------------------------------
    . X% F/ A8 B4 f8 ~& _7 F
  2430. Static_Text_Pos0 t# G! E, H* t0 B
  2431. .DB HIGH(Caption_Text_Pos),LOW(Caption_Text_Pos)
    " a/ p' Y: u6 G  S6 l
  2432. .DB HIGH(Author_Text_Pos),LOW(Author_Text_Pos)
    - y$ p& v. w9 f/ t, t0 T$ X! c
  2433. .DB HIGH(Date_Text_Pos),LOW(Date_Text_Pos)
    * h4 Z+ s& R7 O! J
  2434. Static_Text_Pos_End; m" {+ ~$ [3 J! v& W2 E
  2435. : e1 x; e9 G8 w( a
  2436. ;--------------------------------------------------4 M7 `5 j1 d: [
  2437. Music_State_Stop  H. W  u4 F- j% D
  2438. .IF SOUND_BAR_SHOW_ENABLE
    , i( r% p+ f/ g" l% m/ b
  2439. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00
    / b) ]* M* Y5 R" F$ T  w9 A" O
  2440. ELSE
    + `% P" q. w2 l& j
  2441. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"STOPPED",$00; M5 j0 d; K1 H, z3 {9 P% }* C
  2442. .ENDIF
    & t7 i% |. M4 D' b
  2443. Music_State_Play8 U0 A5 g# \8 ]$ Y& m; `
  2444. .DB PPU_MODE_CNT_LINE,HIGH(Play_State_Pos),LOW(Play_State_Pos),$07,"PLAYING",$00
    - b* {, b* B0 R3 h

  2445. $ e; F* J+ H3 K4 U0 @) k
  2446. ;--------------------------------------------------, o  W9 }- K9 W3 k
  2447. Sound_Bar_Text_Data;声音类型文本
    ( o0 G8 d. u4 Z0 a
  2448. .DB PPU_MODE_CNT_LINE,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos),$04,"SQ1-"8 ]* n! s7 C8 ~/ F
  2449. .DB PPU_MODE_CNT_LINE_NEXT,$04,"SQ2-") I: Q2 Q1 {" o) x
  2450. .DB PPU_MODE_CNT_LINE_NEXT,$04,"TRI-"4 s- S% K' }6 d2 i
  2451. .DB PPU_MODE_CNT_LINE_NEXT,$04,"NOI-"' `7 G6 r9 j# W  B. N
  2452. .DB PPU_MODE_CNT_LINE_NEXT,$04,"DMC-",$00
    6 V9 D9 ]- Z1 p3 X' ?* t4 B

  2453. 3 A) j8 D8 k2 _* ?4 W
  2454. .IF Track_Name_Pos7 H6 ]; t" r( S5 ?+ W0 }' Q& N4 X' {
  2455. 7 I( F9 n5 D; j/ t7 B" u
  2456. ;--------------------------------------------------% D% x. J& i. X
  2457. Track_Name_Addr_00;曲目名地址索引
    + C4 c  ^+ Z. e1 l6 }' `
  2458. .WORD Trackr_00_01
    " v) h6 A7 B9 |' u

  2459. ' o4 W+ A% }4 A# Y" h! R# J
  2460. Trackr_00_01 .DB 15,"RAF WORLD BGM 1"
    # Y/ A/ n( X2 z' M2 k7 y
  2461. Trackr_00_02 .DB 15,"RAF WORLD BGM 2"1 \: Y( o5 p% E1 {4 D

  2462. . i; S$ c7 e0 U. B  a) a& g  g
  2463. ;--------------------------------------------------; b4 F  X1 ^5 S1 R3 A" i! @' f
  2464. Track_Name_Addr_01;曲目名地址索引
    1 t. A5 }  E' m8 T
  2465. .WORD Trackr_01_016 ^# O, H# s9 z  _; X
  2466. , [+ A) f" j; X, y" v7 B; C
  2467. ;==================================================+ I$ N0 w$ R$ k& i; t
  2468. Trackr_01_01 .DB 19,"FINAL MISSION BGM 1"& x# }- i8 V) [5 c+ _$ _, S; u
  2469. Trackr_01_02 .DB 19,"FINAL MISSION BGM 2"3 y# g4 p' U$ x0 k/ J& y

  2470. 6 @- y3 ~9 z3 a: S$ w
  2471. ;==================================================
    " s+ i$ z7 y* A  f0 a. H2 d& n( p
  2472. Track_Name_Addr_Port            ;曲目名地址间接索引5 q1 S/ w/ p& m- \  |* G% [
  2473. .WORD Track_Name_Addr_00
    9 _  \' v6 m3 \8 i7 {2 Z5 s# _
  2474. .WORD Track_Name_Addr_01) P. c7 l3 w9 \4 {2 c- Z7 ~' q: d
  2475. .WORD Track_Name_Addr_01
    - O7 l( C. v4 D. \4 J5 v

  2476. " n1 q* @% b/ {" o
  2477. .ENDIF6 F! P6 j) n! T5 E  h; A) G6 p2 N
  2478. + G! s1 ~' v! u- q
  2479. ;--------------------------------------------------
    3 Z* N# y. W7 I& ?4 A
  2480. Static_Text_Caption_Data;静态文本数据9 w, v4 m( |7 m! B6 H0 M0 n, C9 L
  2481. .DB 16
    % F5 R, f/ {" }( k# U( z
  2482. .DB "FC MUSIC 12 IN 1"& J( e0 i* K* c
  2483. Static_Text_Author_Data& n: O4 @8 {1 w$ z& m
  2484. .DB 25) V; G" Y7 m3 B
  2485. .DB "EXTRACTED BY FLAMECYCLONE"$ g% K5 o. q) B, b3 E
  2486. Static_Text_Date_Data
    " |" |/ I, }9 }
  2487. .DB 10+ X2 S1 j4 _0 y9 a0 }: Q
  2488. .DB "2023.07.23"4 j# a: B0 z+ Y* ^# i

  2489. # \7 X. Y  ^1 j
  2490. ;==================================================
    5 w, V7 q# C. W$ N- `/ a+ E
  2491. Music_Collection_Name               ;专辑名间接索引
    3 Q5 z) G& _1 G- o
  2492. .DW Music_Collection_Name_00
    - |7 x. s) m  R3 m
  2493. .DW Music_Collection_Name_01
    3 H$ S4 J2 ?! g2 @# C" K3 T
  2494. .DW Music_Collection_Name_02) U( i9 e/ P* m( T" `" N
  2495. .DW Music_Collection_Name_03
    / ^: i; {9 Y# z' d9 s! h
  2496. .DW Music_Collection_Name_04
    1 |& d( z) B% N# J/ U+ ~* }6 Y+ `
  2497. .DW Music_Collection_Name_051 e+ Z) {5 M) E1 L0 o
  2498. .DW Music_Collection_Name_06
    9 e$ s# E% j$ ?( K
  2499. .DW Music_Collection_Name_07
    / R; ~1 `" Z5 x4 V* y
  2500. .DW Music_Collection_Name_08/ ?" F" a5 D  S% d
  2501. .DW Music_Collection_Name_09
    % \; s8 c, b' x6 f, v
  2502. .DW Music_Collection_Name_10  e4 S9 b% `, ~
  2503. .DW Music_Collection_Name_11' Y' j" `- a! C! K: v! e# F
  2504. 5 [- b' I  n- ?
  2505. ;==================================================
    . d! E- x8 G5 I+ Z! M
  2506. Music_Collection_Name_00            ;专辑名文本数据/ e" Z0 u2 t/ k
  2507. .DB 11,"1.RAF WORLD"
    + Z! H3 H; ], v
  2508. Music_Collection_Name_01+ z: P0 V# v' a# P# b+ a
  2509. .DB 15,"2.FINAL MISSION"
    8 s) n- \6 |" e7 D; B/ F
  2510. Music_Collection_Name_02$ Q, Y- N  O1 A  i. q
  2511. .DB 06,"3.KAGE"3 `  l* e* Z" W. J
  2512. Music_Collection_Name_03
    ! O- C% s' l8 `! A
  2513. .DB 16,"4.DOUBLE DRAGON"( e( ^, N$ K, h9 ^4 P: A/ D
  2514. Music_Collection_Name_04; ?' \# ]# |: d% ?% j. U0 {9 r
  2515. .DB 17,"5.DOUBLE DRAGON 2"* O. t- J' {" x6 L3 K
  2516. Music_Collection_Name_05
    , m7 k; a6 ^0 r/ _" s' }% m
  2517. .DB 17,"6.DOUBLE DRAGON 3"
    7 v5 j5 m4 w4 c" U( a  L  z
  2518. Music_Collection_Name_06! B& u" Z0 w& A7 C$ P' @/ F
  2519. .DB 09,"7.ROCKMAN"6 o. D4 R( X0 Z$ D3 q
  2520. Music_Collection_Name_07
    3 M+ b0 Y6 o2 d
  2521. .DB 12,"8.ROCKMAN 2", t. r0 {% d6 F
  2522. Music_Collection_Name_08
      `& x1 }( M) t* ^
  2523. .DB 12,"9.ROCKMAN 3"( K7 |; s5 f+ L- `( v
  2524. Music_Collection_Name_092 }# _) M2 e/ A
  2525. .DB 12,"10.ROCKMAN 4"- E% j: D7 x1 I" ~' {* Z
  2526. Music_Collection_Name_10
    , D) i- r$ ^1 @7 Z2 O6 D
  2527. .DB 12,"11.ROCKMAN 5"
    & j6 o, P' K( T
  2528. Music_Collection_Name_11" q  F$ e) n: B" p
  2529. .DB 12,"12.ROCKMAN 6"1 R  v# ^# ]2 N1 k* p8 W
  2530. ' n( t6 d! L$ x# r/ d. k8 {. ]
  2531. ;==================================================% ~8 n$ ?( p7 ~) _& R  ~2 S
  2532. Track_Name_Addr_Flag                ;显示曲目名标记
    6 Y/ l% i: F, f+ I% H. u' S
  2533. .DB 0,0,0,0,0,0,0,0,0,0,0,0  k. `, C, q  \* R9 ~
  2534. 1 h) o! D0 s$ W+ S4 ?- {( z& N! D2 E
  2535. ;==================================================
    0 Y! M( y: V8 y% O9 W/ l
  2536. Item_Pos_Data                         ;光标箭头位置
    + V! i% R. x. Y5 @2 ]: z5 ]7 `+ v
  2537. .WORD ITEM_SHOW_POS
    - `. q) l" O: {6 J4 |" z
  2538. .WORD ITEM_SHOW_POS + $0040
    ' g6 ~/ H! Y0 @
  2539. .WORD ITEM_SHOW_POS + $0080
    % b  F- a" _9 y, b
  2540. .WORD ITEM_SHOW_POS + $00C04 T0 G9 s+ u7 q# _
  2541. .WORD ITEM_SHOW_POS + $0100
    ' u. ?, q/ [0 q2 K
  2542. .WORD ITEM_SHOW_POS + $0140
    3 N. f6 a( l! ^2 ]4 E( j3 i& E

  2543. 4 [  t' F" U3 n, ^& Z% Y. v  S
  2544. ;==================================================$ q! [( M) ]5 y5 w
  2545. Sound_Init_Port                 ;音乐初始化入口地址
    ! K/ T5 {) v( W- J* p
  2546. .DW $BFC8: ^, Y2 k9 f+ D2 n/ Q/ J7 u
  2547. .DW $D7F0
    & {2 C9 i9 v3 m
  2548. .DW $9FC0& c/ C, Y8 J; S
  2549. .DW $BF70( T9 ^( z; b: i$ [* G) e5 M7 [8 T% z# P
  2550. .DW $8003" A( C% i- b( [0 D7 L  \" m
  2551. .DW $BF30
    ( v# C- d8 ~" n& H- }. X2 q) g% Q
  2552. .DW $9003- d' X; ~! G" C) ]  b
  2553. .DW $8003
    4 g4 z) J1 ^$ R& }3 V2 \% l
  2554. .DW $80033 p7 H9 w- H# K: X  P1 }1 J
  2555. .DW $8003( v$ S2 q' L! i6 H+ Y' h( W
  2556. .DW $8003
    , j$ B9 N9 I. c! ~6 n
  2557. .DW $80038 K3 ~: Y6 w1 k: s

  2558.   z" ~7 _& A- U- E, e- W, B
  2559. ;==================================================
    & }3 j* r; k7 E# u% F! y
  2560. Sound_Play_Port                   ;音乐播放入口地址
      h+ J2 l  P& z: P4 v
  2561. .DW $8000' l; M- A* p2 j/ J3 V
  2562. .DW $8001
    / H5 i; L! ^" M+ D: ?( J1 z+ n
  2563. .DW $A000
    - _3 h9 }: l& |1 U+ N
  2564. .DW $80036 }0 M7 ~5 C* w' R
  2565. .DW $8000
    & C/ ?3 m  O! b0 s7 S$ {
  2566. .DW $8003
    5 D4 f$ C. f5 d; o0 \$ t0 c' {
  2567. .DW $90000 C( c/ e/ E# m* W8 _4 C+ d8 r
  2568. .DW $8000. |: W4 E  U/ e  J. q/ ~
  2569. .DW $8000' a  d2 b  r: `* q
  2570. .DW $8000! w! w" `# R; a# F# H; Q
  2571. .DW $80008 t7 W: \8 k( ]" j/ z) b
  2572. .DW $8000- f- _+ C( A" X
  2573. ! c! R- Q! U! T( z4 J8 A
  2574. ;==================================================( K2 w) c3 o$ j1 Z6 q( d
  2575. Sound_Reset_Port                  ;音乐重置入口地址7 Z( a0 U" ]  V+ H. n
  2576. .DW $0000
    / Q! l. {' y& |: P: X
  2577. .DW $0000
    6 ~5 H  |5 |# |3 H( N$ C9 `
  2578. .DW $0000
    + |3 d( F2 x- I% ^
  2579. .DW $0000
    # \. C' j$ u8 _( _9 h; p' H
  2580. .DW $0000
    9 Y( `  t: k0 b6 Y  w
  2581. .DW $0000
    - ?1 w1 t& _3 J
  2582. .DW $00005 S0 I0 U6 J1 G
  2583. .DW $0000
    & k' G) {7 ~! B' N" d0 X9 {
  2584. .DW $00009 ?7 t+ Z7 F4 {
  2585. .DW $0000% _" \; O; c# K! x5 ~$ G
  2586. .DW $0000
    3 u& J5 K8 [$ n: n
  2587. .DW $0000
    " s/ Q1 F4 c7 r% x" K" L

  2588. : [% S2 }- ?3 ^, H4 k, c9 z
  2589. ;==================================================; j; _, O4 w' }" k* @) o* m, b8 h
  2590. Sound_Total_Port                          ;曲目总数7 X" |$ b" w! t
  2591. .DB 38
    5 P/ t3 V( P9 d6 M+ ]0 Q
  2592. .DB 33
    # N. b1 f4 d6 M
  2593. .DB 49
    0 Y/ @! K* t1 L- F9 I1 s  W; X: @. i
  2594. .DB 41
    , {$ U; @, ]+ h# e& y
  2595. .DB 83) B5 ^9 [: U' a1 h! j8 {# ~
  2596. .DB 70
    5 @* N$ z  T' ^6 k8 P
  2597. .DB 503 R+ P$ y( d$ F% u; B1 G( [( J
  2598. .DB 67, c$ i" C" L0 n; Z
  2599. .DB 57
    : q# o: c$ o% }/ R( Z% A* j
  2600. .DB 71
    3 ~9 J; l! v) O# y
  2601. .DB 76* a9 U, `) h1 B! }. D2 C
  2602. .DB 102, r* @4 F$ d, \

  2603. 3 Z: ], l" H  e* a+ g
  2604. ;==================================================. i1 O) [. }( X/ X0 o
  2605. Sound_Start_Port                      ;起始播放曲目
    , m! O. `0 d' g# l! z+ L
  2606. .DB 00
    7 P4 m9 X1 S6 B, s
  2607. .DB 00
    ' x+ L9 [3 {4 X: E
  2608. .DB 00  Q2 u  @& [* [# M' i; N5 ]" t
  2609. .DB 00
    ; d# f5 y: ]' o0 \2 `! A3 q8 {7 E
  2610. .DB 00
    , l2 p& d# M/ y
  2611. .DB 00: c4 f4 T" j. U3 V
  2612. .DB 00
    : S) o4 h" c& k
  2613. .DB 008 M: N4 K# s  j0 @, n+ x  Y# z
  2614. .DB 00* a/ k3 z. L7 i/ |  A7 m9 E/ y
  2615. .DB 00* |7 I; D- N: N
  2616. .DB 00
    # e' r+ e4 u# x. s
  2617. .DB 00, w0 h2 R1 R8 G8 z" ~
  2618. & @) D! M, h9 F9 }
  2619. ;==================================================! y2 ?- y8 X: g* {  \2 b
  2620. Sound_Bank_8000                      ;专辑bank_8000% ^4 f: {' M5 }. U8 B9 o
  2621. .DB $10* Z5 P' ~; k& S/ |
  2622. .DB $12' j4 Y) ^- o; H* u) E
  2623. .DB $148 J4 R9 i2 p, j+ E
  2624. .DB $16
    ! `4 g( i# Z% A( z2 Q$ E; E
  2625. .DB $18" a5 B' c2 _6 w$ ]
  2626. .DB $1A3 T$ C# I# Z2 G9 |0 G. h2 n1 ]

  2627. 3 r- q9 O6 F8 C/ z
  2628. .DB $00# R$ }2 \! M; ]$ ^" ^9 G# P9 h
  2629. .DB $02$ R! z! |% f/ u# L( m
  2630. .DB $0D  {' V1 Y9 {4 M7 l- s& g
  2631. .DB $04
    8 f* C, P$ B, O2 i6 Z4 ]
  2632. .DB $07! I2 {( k' C3 M, |
  2633. .DB $0A
    / R9 |7 Q$ T$ M: W
  2634. * [. H  n! F$ P* l7 h2 b
  2635. 9 J; y( {. Z0 J
  2636. ;==================================================
    3 {  J) s4 [8 {; \
  2637. Sound_Bank_A000                      ;专辑bank_A000& z8 p5 {* m9 |+ O; J" t* _$ {
  2638. .DB $11
    8 ?# G, [" P0 c3 J4 W1 j. s7 [, Z
  2639. .DB $13' ?, S* U1 D" l$ B
  2640. .DB $15
    2 j; m  {$ g; \* I( v4 g8 N
  2641. .DB $17
    , h! w' [' R* {" X
  2642. .DB $19) I) D3 F/ g4 T: P; D3 c
  2643. .DB $1B
    ' e4 K# G. B/ J+ T: H

  2644. 1 e* z2 J. u1 T. m7 p3 s" w; B; L
  2645. .DB $01( S( m" a  n0 g7 |6 z& y
  2646. .DB $03  O! N2 k0 C! M- ?
  2647. .DB $0E
    ' T  ?- f. D$ ?3 i8 N4 V! B
  2648. .DB $05
    $ J* E* I, b% q# s$ [
  2649. .DB $08
    ' L/ a; V' }2 T8 B+ g
  2650. .DB $0B
    ! V0 k( _. ?! C

  2651. . u9 P. G2 \" V# O6 ?6 |
  2652. 5 h, M: Z1 w) V, v+ R
  2653. ;==================================================
    ) m6 C' D8 d- d
  2654. .BANK RESET_BANK & BANK_DATA_MASK, j, b* a+ y& E7 ^9 d: F
  2655. .ORG RESET_ADDR
    & N$ ]; k: \9 f9 I3 c# l

  2656. # a6 R  t( v6 s) j( \+ a5 x
  2657. ;==================================================
    . W7 f2 p; a1 L/ G' G" }
  2658. Switch_Bank_8000;切换bank到8000-9FFF
    - M. r" j7 p; ^1 O
  2659. PHA
    , [) {" @  W7 k' A
  2660. LDA #$06
    . d0 w; ]" D; K
  2661. STA MMC3_BANK_CTRL
    0 x* \' L, b+ i; U; g2 @
  2662. PLA
    " `- S( R0 [2 l1 `+ n) T: w! e
  2663. STA MMC3_BANK_DATA$ G7 E7 J% s+ ^3 o( E
  2664. RTS4 h9 H& k% t/ l; ^9 r. Z  I

  2665. . Y% ?5 Z0 W! B6 J7 |8 ^3 l
  2666. ;==================================================+ m# u! x! _5 F4 O% s+ F6 X4 N
  2667. Switch_Bank_A000;切换bank到A000-BFFF# U* n) g- s8 h% e' r
  2668. PHA
    ' ~" @/ M! H& [: M/ h
  2669. LDA #$07
    1 y8 d& E2 N8 w8 t% e. c
  2670. STA MMC3_BANK_CTRL' @+ C- J, F% C" }0 b4 E5 ~) W3 H
  2671. PLA2 w+ h5 z+ l" a
  2672. STA MMC3_BANK_DATA
    % T& a7 s" s/ j
  2673. RTS
    / ?' t. v) A% V
  2674. 1 h0 N  u7 {0 j
  2675. ;==================================================6 e3 B2 z, S9 n/ Q6 `0 w9 F6 E
  2676. Switch_Main_Bank;切到主程序bank
    ! Y% i2 |  r$ k. F
  2677. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ) Q4 S$ P& h1 e/ B
  2678. JSR Switch_Bank_8000   ;设置$8000地址bank
    / `1 q4 i# ], a1 a* ]7 x
  2679. RTS
    ) k- l  A$ J6 n3 }
  2680. 4 X7 o% g- ]; Q! b7 M
  2681. ;==================================================
    & \8 _7 S2 s/ m2 r1 T: i4 t
  2682. Sound_Reset;音乐重设(如果有的话)5 k2 t1 [( j& J. H# ]
  2683. JSR Switch_Music_Bank  ;切换到音乐bank
    3 r( @* b+ b4 U8 o, E4 M5 ]
  2684. JSR JSR_Addr_Op        ;执行音乐重置) }2 m( {' j% |( U% F& j% {4 R
  2685. JSR Switch_Main_Bank   ;切回主程序
    * ~5 }) z4 h9 c# w& D  y
  2686. RTS
    ! j" V; R0 \! q) Y5 i
  2687. 8 ?& Z* Y1 x1 F. l; h5 {
  2688. ;==================================================4 Y. C) h1 _3 L" u5 t# `4 x
  2689. Switch_Music_Bank;切换音乐bank
    3 a6 Y8 |6 c8 }* d3 Q+ ~8 T4 @
  2690. JSR Init_Sound_Bank    ;拿到音乐bank号
    5 L4 U# g! @& P4 t2 V. z' q2 n" [
  2691. LDA <Music_Bank_8000
    $ Z% E7 S' f! {8 L2 z* r% s6 ~
  2692. JSR Switch_Bank_8000   ;设置$8000地址bank
    - o3 F/ X# x- @, @0 p: _/ X9 k
  2693. LDA <Music_Bank_A000, c' a. l* I& n/ ^7 c' l
  2694. JSR Switch_Bank_A000   ;设置$A000地址bank
    6 H: t' P3 q* s8 d
  2695. RTS# T; k) \+ \3 `* b
  2696. 1 A* R3 s, b& L  G7 j
  2697. ;==================================================% V. L( P. V" M+ |& y5 H" |
  2698. Sound_Init;音乐初始化$ t2 t" E4 W- s, W  a
  2699. PHA
    9 F# a+ h& v9 {& q
  2700. JSR Switch_Music_Bank  ;切换到音乐bank
    " e$ {) ]. k& P" y8 Z( i1 y# R
  2701. PLA
    " F; Y+ Z( p- S7 R  O
  2702. JSR JSR_Addr_Op        ;执行音乐初始化9 N9 L, r' E5 U$ t' g
  2703. JSR Switch_Main_Bank   ;切回主程序
    * G8 f" k  I5 E& r0 H5 w1 a# z
  2704. RTS
    ( o; a6 B* D+ C& m! ^* F* [; T, `

  2705. ' @$ o; b' w0 R6 a# K! I/ b7 |6 O
  2706. ;==================================================/ }- U; m# j$ r! v$ r% ~
  2707. Sound_Play;音乐播放8 i1 |1 S/ m( l3 p4 p2 V! C4 K
  2708. JSR Switch_Music_Bank  ;切换到音乐bank, W/ C% l  h" {. U3 M! ^) X6 ]1 |
  2709. JSR JSR_Addr_Op        ;执行音乐播放1 e7 C* D, a3 v- U/ p2 I# Q) ]3 V$ ^
  2710. JSR Switch_Main_Bank   ;切回主程序
    : G( @4 p* m0 L
  2711. RTS
    1 ^4 \2 z4 e3 `
  2712. # x8 {# K( E" X. u) A5 O2 @
  2713. ;==================================================1 o# m$ r1 u0 d% E$ N- [
  2714. MainLoop;死循环
    4 Z& {' F8 {/ B5 T# n' i, g
  2715. JMP MainLoop: {( l2 y3 k( G; r

  2716. 9 T" D. m6 W( F* W. P3 j8 |( {7 y
  2717. IRQ_SUBPROCESS_JMP = 0
    ( ]' y/ T. V7 q9 P

  2718. 6 `& l! U4 b/ O! f1 I/ F* A
  2719. .IF IRQ_SUBPROCESS_JMP) q1 _0 r( P4 d5 l$ A
  2720. ;==================================================
    - `1 X  d% i/ J
  2721. IRQ_Process_0;IRQ处理过程0. i: s( j" h4 a8 h- b6 i- X, A* u! a

  2722. ) q8 ~) ~5 y' A* J4 Z4 \& f
  2723. ;15条扫描线后触发IRQ3 E2 M# e/ }: e9 S( ~
  2724. LDA #15* o, n: R* f- z. e4 Y
  2725. STA MMC3_IRQ_LATCH
    # d: R8 ~+ \! R  A- L$ q

  2726. 1 G: M1 p& r8 W" [0 R2 y+ C& r
  2727. ;设置屏幕滚动) @4 R8 Y  _/ n8 o) L& d( h
  2728. LDA <Scroll_H4 e7 n; t% a( i% Q: @
  2729. STA PPU_SCROLL- M) t5 n3 }4 y# P0 R
  2730. STA PPU_SCROLL! i6 }" T  J. V0 N7 b2 y9 e

  2731. 5 U6 u* h$ z8 m0 b8 E$ p
  2732. IRQ_Process_0_End, }9 N( R! S+ p5 U! t; N, L
  2733. INC <IRQ_Process_Index, P0 c7 Q1 _0 \0 d  n3 r
  2734. JMP IrqProgramEnd
    9 U9 }, F6 F' E7 ?/ g- o5 u
  2735. 6 n) j/ B6 U# c6 h4 J7 \5 y8 K% {
  2736. ;==================================================" L5 O1 Z# B; l8 d1 x
  2737. IRQ_Process_1;IRQ处理过程1; G- Z) n; Z7 g* D% a2 n

  2738. : L3 x  G* C( ~& u6 [0 h! ^
  2739. LDA #55; }2 u2 V$ k% Q& P
  2740. STA MMC3_IRQ_LATCH3 A8 x, g! _5 v& j  ]7 C( j) H, }
  2741. - B' X- G' q5 ^: ]' \4 N  [
  2742. ;设置屏幕滚动4 [" y# T% h) I& C5 I+ |
  2743. LDA #$00
    , K3 q- M) R0 l: M$ c
  2744. STA PPU_SCROLL
    ; I) @6 f0 p4 H1 q& p
  2745. STA PPU_SCROLL
    ( ?$ _% O. N; Y
  2746. " y, c! |$ Q# j7 M4 J! l( S! S
  2747. INC <IRQ_Process_Index) Z* G, s; p9 K, b. n: @
  2748. JMP IrqProgramEnd
      Q. A5 k" ]% U) Y4 j# R
  2749. 0 L: E) O, b. ~; F9 ~  n
  2750. ;==================================================7 ~2 N. p. U6 X$ b
  2751. IRQ_Process_2;IRQ处理过程2
    " g( ]- u: A- h$ N7 l5 S

  2752. $ S2 U, k% K- l) }
  2753. LDA #15, Q: I4 D" h1 Z2 {& \/ O! J" W: B
  2754. STA MMC3_IRQ_LATCH# u: U' q! T0 v; \5 K
  2755. 5 m$ d1 Y5 _! R) M; p3 l8 z
  2756. ;设置屏幕滚动
    1 v8 Y  E: K' T! A
  2757. LDA #$00
    3 n( A7 P5 {* z( M  p/ s: G
  2758. SEC
    1 X/ t, E, a+ m
  2759. SBC <Scroll_H
    ! l0 c/ A* c. S) E3 [; Z
  2760. STA PPU_SCROLL
    9 [3 K& Z) f. V+ J$ C' e
  2761. STA PPU_SCROLL9 d% p2 z% x! q

  2762. & F0 _6 \+ _$ C* o3 \( p3 F7 ^
  2763. INC <IRQ_Process_Index
    ! u4 Z0 g, B+ e. n& \, T/ w1 M% r
  2764. JMP IrqProgramEnd4 Y3 y; f8 L. \) S/ ]
  2765. ( n- q( K, C6 C3 z
  2766. ;==================================================
    8 u/ j3 k. v# d4 J- _: q
  2767. IRQ_Process_3;IRQ处理过程3
    4 ^1 W3 X6 c9 _* u
  2768. & j/ r  |1 ?5 _: c9 L! e
  2769. ;设置屏幕滚动
    9 N" }" l6 K$ c8 i- o( I: i) ~
  2770. LDA <Scroll_H" W9 j# a0 L% j, C( D  m
  2771. STA PPU_SCROLL$ W2 t* L/ c5 m: ]$ f
  2772. STA PPU_SCROLL& N' z9 r' A5 a% [4 X* Z8 v
  2773. , |+ h0 S! O9 |' ?
  2774. ;禁用IRQ. N$ ~2 r9 h  K
  2775. STA MMC3_IRQ_DISABLE
    $ i2 b: s; g& c: \( P
  2776. JMP IrqProgramEnd
    3 z. r# }& R7 b- y& F' v: K
  2777. ; e% I# v2 q9 M2 ]: O3 a
  2778. IrqProcessAddr
    ( b% b4 F0 ~5 Q5 _5 G" b* V9 D
  2779. .DW IRQ_Process_0,IRQ_Process_1,IRQ_Process_2,IRQ_Process_34 v$ ~: w) a5 K0 l! o
  2780. 7 A+ m$ u: c0 o# N
  2781. .ENDIF
    7 J, b3 t# V) i: Q. b2 ]

  2782. - l6 i) a- ], b! p% T, }
  2783. ;==================================================" A! Q$ l) a9 c$ v8 _7 J3 ?. w
  2784. ;IRQ滚动模式常量# Z. g8 O( ~# I, ]  _0 d
  2785. IRQ_SCROLL_MODE_ZERO    =   0       ;不滚动
    1 U- \6 `1 Q  g, X, ^
  2786. IRQ_SCROLL_MODE_LEFT    =   1       ;向左滚动1 [' ?. Y; R, v9 p& \
  2787. IRQ_SCROLL_MODE_RIGHT   =   2       ;向右滚动" t! V/ i) y  e) l, ^2 s
  2788. 1 w( W, T3 R4 \3 Z2 A
  2789. ;IRQ扫描线数据
      ?, j2 K1 G! h  k: V
  2790. IRQ_Scanline_Data
    - b* T1 P! x, Y1 X0 l% D7 S
  2791. .DB 8% x: X; F( U8 p4 [, |6 y5 y
  2792. .DB 54- z0 j7 L( Q, t5 i
  2793. .DB 81 w& t( e# c6 A  I  c
  2794. .DB 00 ;关闭IRQ
      M% `7 @! L/ b! \" U, t( k; @

  2795. 5 e9 G) N: x  a9 W7 a* W4 J; p
  2796. ;IRQ滚动控制模式/ G, a4 \: M. x# i0 o7 U- O
  2797. IRQ_Scanline_Mode; b; U9 @, {0 r1 Y
  2798. .DB IRQ_SCROLL_MODE_ZERO0 y( P, ^( S' \/ G& U3 A
  2799. .DB IRQ_SCROLL_MODE_ZERO) R) [* M- B  `  ~9 C& {4 x8 C
  2800. .DB IRQ_SCROLL_MODE_RIGHT/ w; ]# {, ~8 a4 p: ]# W3 A9 r
  2801. .DB IRQ_SCROLL_MODE_LEFT' e9 b0 d& k" P8 ~& d& r
  2802. 9 C2 W4 Z3 R& ^+ ~% A. c0 v
  2803. ;==================================================
    + d1 ]; j* \8 e
  2804. ;IRQ处理
    3 V5 B1 z/ f8 R, l3 D$ P
  2805. IRQ_Process& C, \3 d" |5 c- M1 Z/ {5 p7 r
  2806. LDX <IRQ_Process_Index
    , X% |7 A7 }8 E: c- R( E/ k6 D! k
  2807. LDA IRQ_Scanline_Data,X
    0 `+ X/ d# ^. s; q: W7 a
  2808. BNE IRQ_Process_Latch7 }- v4 ^8 L/ T1 [9 R4 N- y6 Q
  2809. IRQ_Process_Disable;禁用IRQ4 r. h6 N* J' c
  2810. STA MMC3_IRQ_DISABLE
    ) G5 K7 F2 m. e2 M6 h9 G  V
  2811. STA IRQ_Process_Index
    & W% W5 N1 J" o: A+ E1 X" x
  2812. BEQ IRQ_Process_Scroll7 L' P, u) K- w* q
  2813. IRQ_Process_Latch;设置下次 IRQ 触发扫描线
    ( L) v$ d. |) H
  2814. STA MMC3_IRQ_LATCH6 e: [- W  B# x' M: F2 D
  2815. INC <IRQ_Process_Index6 c- E0 H% i! C8 f
  2816. IRQ_Process_Scroll;IRQ滚动控制1 P2 a% _/ b0 Q2 Q& Y4 @* }
  2817. LDA IRQ_Scanline_Mode,X4 J/ W$ ?1 b4 e2 b4 b6 Z. Z
  2818. CMP #IRQ_SCROLL_MODE_LEFT2 B8 S, y8 N+ b. D
  2819. BEQ IRQ_Process_Scroll_Left: |; n. f! s* E, f, c$ [
  2820. CMP #IRQ_SCROLL_MODE_RIGHT' K$ c  D* K1 a! }& C7 ]6 e; I- a
  2821. BEQ IRQ_Process_Scroll_Right' U7 @! w7 I! O4 H- }( B/ ^! k( P
  2822. IRQ_Process_Scroll_Zero;不滚动
    / A1 c" ?8 I6 J1 K& j
  2823. LDA #$00
    ' E" L0 h. r( `
  2824. STA PPU_SCROLL3 p7 x% E( u* B- ^
  2825. STA PPU_SCROLL
    3 D2 V* m9 s( T/ t; r6 ?
  2826. RTS
    . n2 z( r7 l7 {- D& R& s
  2827. IRQ_Process_Scroll_Left;向左滚动
    1 [$ V( D" Q2 J
  2828. LDA <Scroll_H
    - {6 J6 U# }5 Y1 o* f1 d
  2829. STA PPU_SCROLL
    / s; g2 C+ R: L0 Y( p
  2830. STA PPU_SCROLL3 }9 ]" u9 u' \3 C& D: @* {
  2831. RTS3 n% q0 R& F) r% v2 F6 c3 `  Z, N
  2832. IRQ_Process_Scroll_Right;向右滚动5 S4 m7 E+ E0 B/ t
  2833. LDA #$004 t5 ^, e. v, R. N$ S8 g
  2834. SEC9 }" Z; U) t: I) n
  2835. SBC <Scroll_H. n4 n$ v6 ^% C( N9 S6 E
  2836. STA PPU_SCROLL" z) l/ }6 n  Z( F
  2837. STA PPU_SCROLL
    " K7 }0 I2 a. E  S/ n1 U/ R0 Q
  2838. RTS
    $ G8 @9 X* R/ m2 u$ u

  2839.   p3 _6 P% H% c' W! e8 C+ f- n
  2840. ;==================================================
    / l, k! j1 }7 i: v# e: }8 X
  2841. NmiProgram;Nmi中断处理* f! @% x0 i0 ]+ {& S
  2842. PHA) Q; ]1 d$ o8 L' W3 c2 i
  2843. TXA* r$ Y3 f  M+ `8 k
  2844. PHA
    / e4 I6 N- o# Y1 I+ S
  2845. TYA
    5 @* P/ G1 q2 R( l( I
  2846. PHA2 x7 H$ j: M! _  k2 `$ Q9 Y* \, O% B

  2847. 4 x# m7 z6 T+ A
  2848. ;读取清除Vblank标志, 防止重复进入. a% P6 u( K9 b& Z  E. W: [
  2849. BIT PPU_STATUS1 ~$ r, \, z2 N. Y/ O

  2850. ( D" E. @6 v5 O/ q: p, p& O
  2851. ;切换主程序bank
    % R8 ^  z1 C, L5 c% H( F
  2852. JSR Switch_Main_Bank' m6 Z+ u% f+ I4 u2 s8 E' O

  2853. ! R' d/ ^+ y+ X% ^  M% v
  2854. ;Nmi处理# h- ?7 X$ P. a. B( i1 }
  2855. JSR NmiProcess
    4 H( {, [  y1 ?" L

  2856. 5 S1 T" R# u( @7 c0 G( p
  2857. Nmi_Proc_End
    ( B% u) Z# I0 U) T
  2858. PLA! U) M4 {" q& b( `( y4 K1 k7 `- i, J3 P
  2859. TAY
    + F& b& k4 H0 q/ ~3 E5 M% C
  2860. PLA
    3 b2 R  J4 N% P0 o
  2861. TAX3 ]. T+ w, U" \; T3 o- O
  2862. PLA3 U3 O% ]4 i4 `! {5 o
  2863. RTI6 h/ P+ t7 M6 v
  2864. 4 x" `2 Q5 I7 {2 C( |9 ?
  2865. ;==================================================
    / I# e+ W. l# E
  2866. ResetProgram;重置中断处理
    6 ~" B! e: R: w) D* D. v
  2867. SEI
    - w+ x; w1 u  b( g; v& X
  2868. CLD: @* j5 T8 ]2 Q8 |# P  s3 u% H
  2869. LDA #$00
    : o. h/ P; B2 E) ~
  2870. STA PPU_CTRL
    0 j  [* q8 R7 X
  2871. STA PPU_MASK7 s* Q- `& [# `2 c8 Y
  2872. ! f! L! o' }. L, I( c3 C+ e
  2873. ;切换主程序bank
    2 J5 X8 z& X! z1 d
  2874. JSR Switch_Main_Bank
    + ]: m$ r6 ?: @. a$ ~

  2875. * i9 E) G& W4 B+ _+ M/ W6 g
  2876. ;程序处理开始9 g+ D8 m; W, \) h; Z5 S: D$ s
  2877. JMP ProgramBegin7 E. j$ T. ]2 Z, v, Z' G! `6 g& F
  2878. 0 [" N( c/ h/ O  t9 n
  2879. ;==================================================" w3 I' H4 Q$ k
  2880. IrqProgram;Irq中断处理. D# _9 \0 S. T" Z/ D. z. d" l
  2881. PHA
    . [! q: o" P1 |) ~/ w9 O- _' U
  2882. TXA) V) z& A% X6 o
  2883. PHA
    % q$ X/ Y. y* K; f0 E
  2884. TYA
    , \' }( a# e' R6 A0 x6 M
  2885. PHA
    0 q+ @2 {6 `4 H/ S5 R6 s0 V8 E9 R

  2886. ! _1 d( z) I) {: J
  2887. ;关闭IRQ, X( L5 q/ a3 T# o) l5 M
  2888. STA MMC3_IRQ_DISABLE! W( |3 Q5 p* q) ?3 f3 ]9 G

  2889. & ^/ n' p! h1 D( Z3 L) Y2 V
  2890. ;允许下个IRQ触发1 X, d( f4 `3 Y4 Z
  2891. STA MMC3_IRQ_ENABLE
    2 D7 K# z4 H8 ^8 H/ I* f
  2892. $ M1 U: _9 h# w  m% [% {
  2893. .IF IRQ_SUBPROCESS_JMP
    2 c! D8 j6 v# B
  2894. % Z$ z5 ~# N/ w0 m9 ~, L9 j
  2895. ;执行IRQ过程
    % F4 H1 q) J* d. c: p% I* L
  2896. LDA <Data_L
    8 H. A) S: H( l
  2897. PHA; U3 T$ ?, w$ f
  2898. LDA <Data_H
    0 c. q/ a* {& `6 {1 K9 P: h
  2899. PHA3 k# k: e' \& N1 n( G
  2900. LDA <IRQ_Process_Index0 k- I0 @8 c3 ]  @- ~; s
  2901. ASL A
    % c- W1 T5 k& g2 M# V8 x/ l$ F
  2902. TAY
    2 ^2 @0 n  X3 |
  2903. LDA IrqProcessAddr,Y: K0 D; T' Q* g2 y4 b
  2904. STA <Data_L
    , [# Z# z* q2 A( p( i
  2905. INY
    2 ^" o* d4 `, W% F' g- e7 m! s
  2906. LDA IrqProcessAddr,Y
    6 p* ]( P3 ~# f. i+ G) X0 b: q
  2907. STA <Data_H. _( P9 V0 ~% S- c, x: `, w
  2908. JMP [Data_L]
    1 o5 W. H- Q0 d6 q
  2909. . w- A- N$ L. d: a, H' t6 @! B
  2910. .ELSE0 p$ {; J. f6 A

  2911. 2 ^) Y& o0 m' m
  2912. JSR IRQ_Process
    0 L$ _0 ^4 M0 C
  2913. $ X: c7 f& S  ]* ?+ T; Y' Y) S* w
  2914. .ENDIF
    9 ~& C' H0 `! R
  2915. 2 X$ w. K. O" }6 X8 T9 X: V  j& Y
  2916. IrqProgramEnd! q; ^+ B7 \7 X' h, R
  2917. .IF IRQ_SUBPROCESS_JMP, M9 T+ s! o# v: _7 R3 s/ o
  2918. PLA
    + w0 z! t6 C9 ]5 k' A0 d
  2919. STA <Data_H
    ' a! H& [( i& r7 h
  2920. PLA3 V9 Q( ^" ^8 U0 G/ W' d2 Y$ @
  2921. STA <Data_L: d( l7 s9 o5 \  ~* o1 ~* T
  2922. .ENDIF7 l  X% S8 N/ V( B  n0 p5 Z
  2923. PLA, z* B$ s* U! {/ }( G" t( @
  2924. TAY* {5 _# b6 [2 u6 l( M5 ~) G
  2925. PLA
    6 k& R- K3 ?8 a4 M" c9 M
  2926. TAX8 w( r$ y; u' S- C5 Z
  2927. PLA
    / i2 ?1 A7 T& I  _* {( r( ~0 Q
  2928. RTI6 |8 L8 U7 Z5 j' C8 T% B
  2929. : [6 {5 B) g% V4 `7 Q* d9 @: `3 W
  2930. .ORG $FFFA
    6 J# T3 l8 r; }
  2931. .WORD NmiProgram
    ! Q9 p2 b1 ~; k" A4 \( O( }
  2932. .WORD ResetProgram* ]1 m0 o* V5 M+ \# @. U( S. U/ q
  2933. .WORD IrqProgram4 Y" A6 M# J' s( y# f
  2934. - B5 E8 D( Z# E. J
  2935. .BANK RESET_BANK & BANK_DATA_MASK
    1 ]0 Y- Q" f! Y! b
  2936. .IF SOUND_BAR_SHOW_ENABLE/ W* {/ ^! Q  |6 I
  2937. % w) Q2 V  K* @  S- L' \1 c
  2938. .ORG $FE00; K* f0 j  @% l8 Y6 a# y0 i  I1 G1 w
  2939. PHA2 I9 u8 u# a  Z  |4 ~
  2940. STY $07BA6 s% `6 N, z" h: i
  2941. LDA #$8D
    ; S( X" G$ C; _' K" H# u& G7 q& G
  2942. STA $07BC
    + B5 c& P$ J" x1 I$ O& n1 Z4 K) j
  2943. TYA% @" r" {' O; t& C- K
  2944. CLC
    $ y+ A! }+ a2 v' d
  2945. ADC #LOW(Sound_Bar). ^7 K; O8 N: d; A6 Z; X
  2946. STA $07BD6 T+ h. C' w3 w  K2 |
  2947. LDA #HIGH(Sound_Bar)  B* k; I6 z! g: l& O# S$ g# e' [
  2948. STA $07BE; h9 W8 A; ]' H6 e. S! C, p1 T
  2949. LDA #$602 s8 l/ ^; F% f/ k% a  H
  2950. STA $07BF5 @: j( P3 ^. k1 M6 f* a
  2951. PLA
    ; P! o' ~, [" W, L9 N5 H6 `
  2952. RTS
    7 h/ D/ w3 P4 ]
  2953. . \+ B7 j8 u9 D$ e1 B
  2954. .ORG $FE20* B" }. e$ W3 P# l3 A) r. `0 m& C
  2955. STA $07BA- G, D4 \0 t% ~$ v9 D3 s" p
  2956. CLC0 i! ?) `4 b' S! _& p1 t
  2957. ADC #LOW(Sound_Bar)
    $ k' F. P3 f# J7 ?/ f
  2958. STA $07BD' x8 i3 c4 W" D. j. m, |# g# [9 b
  2959. LDA #$8D, \7 T0 b: K7 K, w
  2960. STA $07BC5 O9 L, w0 S$ a) b; T
  2961. LDA #HIGH(Sound_Bar). c( w& ?* _* q* @2 W* E
  2962. STA $07BE" f) d: R6 `; J, a3 I
  2963. LDA #$600 j" I8 C9 u! `/ L" i
  2964. STA $07BF" j" I$ d, d* Q
  2965. RTS
    6 J* u7 o3 A: {8 C- U
  2966. 4 Z2 Z3 X) A8 U3 [5 ?
  2967. .ORG $FE40
    1 [1 t( |5 M/ n; b: G0 m5 e% j
  2968. PHA
    ) |: r9 f5 Y! E- X
  2969. STY $07F1
    3 l2 T/ l; {- T: l  G9 f' p4 ?
  2970. LDA #$8D
    0 L  G5 X' B3 u( W0 s1 g
  2971. STA $07F3
    4 k9 {- M3 o! m
  2972. TYA4 X7 m0 H) T4 K0 t
  2973. CLC6 S1 H0 F: e( S" e* d( ]3 T
  2974. ADC #LOW(Sound_Bar)$ e  ~4 F2 Z# m; V
  2975. STA $07F41 Y( t5 Q6 }$ B5 z( ]3 c% T8 L
  2976. LDA #HIGH(Sound_Bar)1 e! d. c; u; Y% f
  2977. STA $07F5
    * H9 @- T. {- i' f8 M, D% ^, q6 W
  2978. LDA #$60
    ( u, f+ q. ~6 j1 c
  2979. STA $07F6
    $ z9 F6 s' ]" z0 P% w
  2980. PLA# U2 t+ d: {3 c3 b
  2981. RTS
    + g, ]4 Z. [0 {/ r& j1 C
  2982. 8 r0 }% M9 |5 L' |
  2983. .ORG $FE60* K' ]% N' S% k% ?8 h
  2984. STA $07F1
    8 m5 {: n& |( ?! Z4 p( o) i' R) b7 G
  2985. CLC4 B( o, X+ a. M/ x$ L" d( P
  2986. ADC #LOW(Sound_Bar)/ L3 P9 I# }6 u) W* ^8 E
  2987. STA $07F4
    # B0 }* ^2 _/ Q! ^( P
  2988. LDA #$8D# ~- {' n, k  O3 e* Q8 Z. f
  2989. STA $07F3) U+ ]" x& j$ Q/ R
  2990. LDA #HIGH(Sound_Bar)
    . l+ S' I. Q5 R/ M- `; T8 _) U, L
  2991. STA $07F5
    / |8 c; d# Q' `
  2992. LDA #$60
    / M8 G0 ]$ i" t5 L
  2993. STA $07F6. Q( b* t# @+ z& I
  2994. RTS; p7 L3 w8 K. s
  2995. / T* Z- Y6 C. F7 x
  2996. .ORG $FF40
    5 T0 m$ M& `# u6 F8 P, g
  2997. STA $4000$ |3 ?% C; D- }$ ^
  2998. STA Sound_Bar + $00
    ' Y, S; |9 |+ s9 Z* F. Y
  2999. RTS3 a& `! K% ~9 V2 K, K! Z8 l
  3000. + l9 v% {3 B( T7 Y( F$ A8 e( h
  3001. .ORG $FF48
    # M% U8 I( f% c6 E/ |2 e- W% p1 s
  3002. STA $4004
    0 t. H' V! C- \; t4 ?" j, k  _
  3003. STA Sound_Bar + $04: U: D5 y+ x8 m2 L9 o* Y9 K
  3004. RTS3 X3 U& v/ n8 `3 H3 z0 v, ]

  3005. 8 j9 F# V# ~; `3 ^* i
  3006. .ORG $FF50
    & U* R$ g. d$ P0 J* `
  3007. STA $40083 z$ P( Z5 z- ?
  3008. STA Sound_Bar + $085 q- X) o4 |8 e) n
  3009. RTS
    9 _' _9 d; v0 \! A, l# c0 C# K
  3010. : ~2 E3 @; n8 N6 I% N6 c
  3011. .ORG $FF58) t' z1 F0 `& K. t" h
  3012. STA $400C1 P/ s$ ]+ \4 |
  3013. STA Sound_Bar + $0C
    & O- ^' d! D8 `7 M" B
  3014. RTS
    + r4 _2 \; q* x# u/ V
  3015. 6 {( b2 Y8 C+ C8 i" n$ ?
  3016. .ORG $FF60
    $ `5 {4 K* x/ ^
  3017. STX $40007 r8 a( ^6 F& a, P% e. z
  3018. STX Sound_Bar + $00( b& J5 S% L; C8 K+ [! \1 U
  3019. RTS; V9 P  J; C- M3 z0 y, G
  3020. & M) G( O) l$ o9 f; ~0 B( f
  3021. .ORG $FF68( h  V' n4 q; y) B
  3022. STX $4004) w9 @: M1 J1 h& G) u  R# S
  3023. STX Sound_Bar + $04( [. }* U) D" _% x2 v
  3024. RTS- d$ \3 H0 f' b+ c& L: F* K) Z

  3025. / i/ w6 X4 F5 H5 S8 g" ]( S& W
  3026. .ORG $FF70
    : @4 @7 T; {! @  S
  3027. STX $40081 a/ h' X: b! i. l# @' R
  3028. STX Sound_Bar + $08
    6 j) ]# z- g6 {1 Y
  3029. RTS: F- c4 Q( m: g) \* e

  3030. " p4 W1 P+ w4 U# E6 R3 Z2 ^. J' Z
  3031. .ORG $FF78  R6 e: |& y3 K+ O! b5 b! Z% n
  3032. STX $400C
    " k# x! S9 L! w, D9 @% A
  3033. STX Sound_Bar + $0C
    4 S; j4 q; P7 h
  3034. RTS; [2 D4 M# p- D0 d9 z
  3035. # X& ]" R. N6 D% @: H, L
  3036. .ORG $FF807 r9 j; x# A5 d% A/ j; R" \. r
  3037. STY $4000
    2 V* I5 X7 o& V& l6 ^
  3038. STY Sound_Bar + $00: n% |$ @4 z0 E
  3039. RTS7 [1 v2 k. @$ b& a. J

  3040. 5 a" d7 |2 Y' j$ s
  3041. .ORG $FF88: L' x$ L; ^: j- J" ^5 a9 B4 g
  3042. STY $4004
    & i$ {4 w- s* M: a. o
  3043. STY Sound_Bar + $04
    & L# W) S6 v0 ]0 {
  3044. RTS
    $ H5 n1 @+ _8 |" u
  3045. 9 ?. ?4 {2 J0 U% H
  3046. .ORG $FF90
    + M: W' R2 r1 _7 H# [4 |
  3047. STY $4008' x! X% g% u/ `3 x
  3048. STY Sound_Bar + $08
    8 \0 R. i# S, Q2 r3 \8 l; i% o
  3049. RTS+ t( l7 y, y5 I+ o. R) c3 @* y
  3050. ( {$ U; g1 E6 r
  3051. .ORG $FF98
    * f4 e" z; p, l: E
  3052. STY $400C- ~: L2 i3 D* N
  3053. STY Sound_Bar + $0C$ Q* l8 Z. i1 r
  3054. RTS
    7 |0 s3 B# v5 U2 D

  3055. 2 T& f, ?* R" Y1 s6 K8 R
  3056. .ORG $FFA0% v$ S$ q7 Z6 x' m0 U4 L% }- r
  3057. STA $4000,X& M8 J% D9 F8 Q8 f' X  p
  3058. STA Sound_Bar + $00,X
    ; V6 r' P5 E& u; t
  3059. RTS
    # [; j& c5 B& {$ U8 X' O

  3060. / x8 P# l5 T/ y' J& B+ i% n( g
  3061. .ORG $FFA8
    $ t1 Q' k2 Z1 w5 w7 Y$ b
  3062. STA $4000,Y
    ( D' E6 ?0 ?9 D& K! Z' T1 @
  3063. STA Sound_Bar + $00,Y. s8 \) `5 l( D9 b
  3064. RTS  h2 a% b6 V6 P$ ?' |, D9 N
  3065. ! {! p! x8 {& V, y2 s/ c  q0 }! k# f
  3066. .ORG $FFB0
    ! X, A/ E! [; \& N
  3067. STA $4004,X0 B" p6 y9 d  ]- P
  3068. STA Sound_Bar + $04,X
    + i. j* ~9 f3 m* T8 i% V( |" L/ I4 i
  3069. RTS0 a: |; B. g5 _' b3 }* S  A; h0 n
  3070. / D) @. L5 X2 H, Q
  3071. .ORG $FFB8; S: G1 c4 n( c+ e1 l3 ?& f
  3072. STA $4004,Y4 c9 Y- |3 n" {1 v! d$ H1 ^- @+ o
  3073. STA Sound_Bar + $04,Y
    5 t  S* n+ o6 n6 j! {. N7 I: J* J
  3074. RTS9 J8 L* C$ B! y9 x4 _0 E8 \
  3075. 3 y" I5 L' O% F" \: B
  3076. .ORG $FFC0/ ]" ?4 ]% k, [1 ^  ?
  3077. STA $4008,X
    8 w5 m0 \3 M# i: ~( A6 V' P& f
  3078. STA Sound_Bar + $08,X
    : x" F* p* a) Q) W
  3079. RTS
    - h7 h* P& K- G3 N3 K: [/ k: ]! b& O

  3080. , B' r& J. w5 {# m" v
  3081. .ORG $FFC83 \" J# d3 k+ Q; G/ U0 b- _7 u8 T8 p
  3082. STA $4008,Y& c6 K+ R! N; }% x) R
  3083. STA Sound_Bar + $08,Y
    / B9 z+ [; a& x3 ^1 ~( ~" P2 B/ w
  3084. RTS# d8 M2 w1 W! _6 f. R
  3085. 9 h6 ~! K6 B  J% N, l3 z$ D" R, m
  3086. .ORG $FFD0
    ( w# r0 J) Y/ D% n
  3087. STA $400C,X' D) s, |+ o) J3 u3 S
  3088. STA Sound_Bar + $0C,X
    3 R! V2 t! F) ~& i" F4 |
  3089. RTS; H9 Y1 z3 ^. |4 e% P
  3090. ! d5 Q3 q9 K; T) i9 C& Z  x
  3091. .ORG $FFD8
    9 v7 J" f( c8 r2 q
  3092. STA $400C,Y" ~2 z6 A. @& ~. ^0 g0 @
  3093. STA Sound_Bar + $0C,Y8 N2 \* B2 t3 F. y7 I0 G; f
  3094. RTS/ \3 t/ `  K% y  }3 i# A. k
  3095. - K* e7 j: x  i5 q. Z: L# T2 X. R
  3096. .ENDIF) E3 Z0 ^: E/ I: a( s
复制代码

# P$ V2 {; D! J% D
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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

签到天数: 3145 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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