EMU618社区

 找回密码
 立即注册
搜索
查看: 265|回复: 2

[原创] [FC][音乐播放器][NES + 源码]

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
( F! k7 P# n  V/ d# [3 W5 h8 u+ y/ Q3 ~8 ?; M# ~2 u+ R0 Z  q  N
1.魂斗罗5 n" ]8 `1 m7 q: I
2.超级魂斗罗
6 C/ C" j- U# |# J" `3 X% G3.赤影战士3 L& o* k- c! s7 e& @
4.忍者龙剑传2" Q0 F% a2 C- ^; y- F

; `( z- C, e" {2 f0 [: G' M& ?% U7 G6 t) ~6 ]

! B, f9 d3 Q. a8 a4 H# H& S$ l. D0 M( P
源码:' y% t/ d% u/ \* E; Y
  1. ;[FC音乐][播放器模板]5 n* M1 {! C0 S; d
  2. ;FlameCyclone 20230710+ i% E- D4 w6 V
  3. 1 d% M6 N4 @/ }7 G7 w, ^, |
  4. ;文件头: b4 W: C, Z" s& P( e  Q" b# N3 e$ z
  5. ;======================================================================4 n* J0 w1 N, ~
  6. .INESPRG 4                                              ;16KB PRG 数量
    % J  P0 v9 S- P9 i2 o+ v; m6 P% P
  7. .INESCHR 0                                               ;8KB CHR 数量
    % x' \# O, c' @  d% v) i1 [. y- o" s
  8. .INESMAP 4                                                   ;mapper 4
    ; r: @$ ~0 U; X6 E, `9 n
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    - H6 w3 p( z" W" T: A

  10. 4 r0 P  n7 D: e
  11. ;==================================================
    ; K/ `/ c4 ]  ~4 w+ Y
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ! R: O- W0 _8 l6 k
  13. ;==================================================! b; C1 w8 T) J: W) F8 {
  14. BANK_DATA_MASK              = $07
    ) w; }- ?7 e7 p) n; M! _
  15. ;==================================================3 i; z( S  j9 P& R% O/ y
  16. SOUND_DATA_BANK_0           = $00: f! }$ x# t$ |; u( Z+ |/ B
  17. SOUND_DATA_BANK_1           = $01
    5 r2 v0 K8 b& ]- l7 c
  18. SOUND_DATA_BANK_2           = $02
    2 W: r4 |2 C) `5 c: n, ?# I4 i( X6 Q
  19. SOUND_DATA_BANK_C000        = $06) `6 F6 E# F1 g1 ]- i
  20. " |5 I. X+ m$ u9 b0 q1 e, I& i
  21. ;-------------------------------------------------9 F/ b$ o# s9 X* W( z7 N+ g9 F6 c+ _
  22. CHR_DATA_BANK               = $047 B3 T% ]" e! a# ]9 x/ W0 [
  23. CHR_DATA_ADDR               = $A000" l" Z4 x/ T, Y8 t
  24. ;-------------------------------------------------, i% Y: d7 {5 m: T  \
  25. PROGRAM_BANK                = $05
    ) I% V+ \1 l1 b4 H
  26. PROGRAM_ADDR                = $8000
    # g+ J: c' c% ?" v
  27. ;-------------------------------------------------/ t/ N& O8 u0 k+ |! n
  28. RESET_BANK                  = $07
    1 c' ~# {) j- S& I
  29. RESET_ADDR                  = $FE00
    " J& C: l3 d& c, d9 e
  30. ;==================================================
    7 b1 p8 P: O% I1 m9 F# j
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    % \4 O* _. z0 K1 d! L
  32. Music_Play_Addr             = $813C ;音乐播放地址9 M0 }! F  e3 X8 d
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    * o1 z8 l* G: |3 z
  34. ;==================================================
    % H" H, s8 Q) a- K
  35. Music_Song_Total            = 039  ;全部曲目总数
    + E6 A# I% H+ D4 n8 m3 |1 L
  36. Music_Start_Song            = 007  ;初始播放曲目
    6 G* r; f% N  B+ R* o( T
  37. ;==================================================! [( \' R& [5 y# M: }7 ^( A4 l
  38. 8 C. {8 F5 D; [9 S5 D' L- [  R" V- [0 i
  39. ;==================================================7 T3 L3 u# s# D6 c! C2 S
  40. Title_Text_Pos      = $210D ;标题文本位置
    & ^, Y; l3 C/ L( \
  41. Author_Info_Pos     = $2284 ;作者文本位置
    % I7 y8 ]4 t* L( Q
  42. Date_Info_Pos       = $22CB ;日期文本位置
    3 i9 l& K  P# g: A1 T8 D% A; a
  43. ;------------------------------8 k' q- B; r1 L6 B, r+ ]; P
  44. ;------------------------------
    " b# B) l) N, o; Y" t) L
  45. .IF SOUND_BAR_SHOW_ENABLE
    # m1 ?! }) m: l: w7 K
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    ' a( w; \6 \3 q
  47. Play_Time_Pos       = $21F3 ;播放时间位置3 a8 @  e$ v  u/ C6 Q9 S. O4 n' ~' @/ w
  48. Play_State_Pos      = $2233 ;播放状态位置
    - i2 C/ p% v( v  _0 p
  49. .ELSE/ s1 M+ V6 ^9 R; n$ _: G: G

  50. 9 _2 \4 d: e) S# T! N+ n  [
  51. .IF Music_Song_Total > 999 H6 j9 m5 m# _) L2 X6 b8 [
  52. Play_Index_Pos      = $21AC ;当前曲目位置( p$ p1 v5 f* `) v$ y7 m/ X
  53. .ELSE
    + d6 E# V. A" |5 d/ ?
  54. 6 f1 Y# j3 L: ^8 i  y9 Y: _% _
  55. .IF Music_Song_Total > 9& k  x, I4 ~; K/ c6 R1 `4 j5 @
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    3 h9 [- S5 P+ M# n3 J
  57. .ELSE1 z# O& R6 ^& N5 O% U5 _  ?
  58. Play_Index_Pos      = $21AE ;当前曲目位置1 ^+ j0 j- [4 ~7 f$ @
  59. .ENDIF
    . b, q" J; Q% a% w
  60. " }  @4 F- `. C
  61. .ENDIF
    & g0 ~- P1 J$ G9 H8 y
  62. % S) C  ^! d  E, _# |2 G% S/ m9 H0 X

  63. - O) N# M/ B6 }/ |
  64. Play_Time_Pos       = $21EC ;播放时间位置
    1 J, n6 I2 E8 |5 M
  65. Play_State_Pos      = $222C ;播放状态位置2 R. E2 I4 w! b  t) N
  66. .ENDIF
    7 R8 z# a& k! }5 }* T# N) d
  67. ;------------------------------
    $ ?* J" j+ L/ i* q1 ]
  68. Track_Name_Pos      = $216B ;曲目文本位置* Z9 `  e2 ?3 S/ |% O" D5 z
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    & g3 }. V9 M0 @% @. B
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置  @& ~! j  ^  f# \6 F
  71. ;==================================================
    1 `* s1 J" E  H3 }/ c3 W4 i
  72. Scroll_X = $00
    $ a/ ^. U6 c8 s
  73. Scroll_Y = $06
    0 [9 i& B( J* w+ i9 @  [
  74. ;==================================================6 o8 y  E4 D6 \, T7 T) Q5 m
  75. RAM_Cln_1       = $01006 r3 Q. y; m$ j) w: I% P8 D
  76. RAM_Cln_1_Size  = $80- p9 F' I6 p  K1 O* O# `1 l
  77. RAM_Cln_2       = $00E0: J! l/ d/ _2 I" j! j
  78. RAM_Cln_2_Size  = $20  A9 s8 _- G' w/ G& B3 w5 w3 U) U
  79. RAM_Cln_3       = $00E0
    * ~4 J* X. r; |+ q
  80. RAM_Cln_3_Size  = $20
    ! s1 f; |- r& j+ C4 e% H

  81. ' ]& B1 U+ S: W  `9 Q( [9 x
  82. ;==================================================
    7 u1 J+ V* ]/ H
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器1 w0 E; a0 `7 M3 C
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    & E" R2 o9 r; j
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    1 c$ \. k: v7 |+ A
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # w+ q1 a7 ?' X$ ^; L" q& z
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1, Z! T5 r! V5 Y3 u% _
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    $ ]: W' s8 k) R8 l* n( P
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    2 k$ B( j9 I3 v  E6 A, e% v3 ~
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 2 w+ n, m, {, C, Q; |1 r, A! l
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存5 P7 B7 S/ J, k  G3 p6 T# h1 G
  92. APU_STATUS              =   $4015   ;声音通道切换- d3 d! A1 M: M4 p1 K' i! [
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    0 {; `5 _% C0 t, ^
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通" i' q" S1 [9 W  `2 B
  95. ;==================================================/ O' m. |4 Y: j
  96. MMC3_BANK_CTRL          =   $8000# }$ y# @4 y+ A$ ~
  97. MMC3_BANK_DATA          =   $8001
    # X# m& }# j/ I
  98. MMC3_MIRRORING          =   $A000% m" t7 W$ S$ W8 f1 j
  99. MMC3_PRG_RAM_PROTECT    =   $A001* }/ `- V4 I1 f3 x6 P( c1 |6 Y$ f
  100. MMC3_IRQ_LATCH          =   $C000
    2 F  N+ q+ z8 q# R- w
  101. MMC3_IRQ_RELOAD         =   $C0010 r2 h) g4 _! k0 e
  102. MMC3_IRQ_DISABLE        =   $E000
      K4 Z* ~( F5 W5 P  e
  103. MMC3_IRQ_ENABLE         =   $E001$ X9 W) b( {, S& U
  104. 1 k6 C6 p) O, k) W0 d
  105. ;音乐数据块7 J) \5 \% a7 \% M1 t" h( ]

  106.   Q+ k" _) R% ~/ i0 n( d" x
  107. ;======================================================================
    2 @- x  h, O3 B1 g
  108. .IF SOUND_BAR_SHOW_ENABLE
    # E  l% H9 v0 F$ }6 h+ V
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    . D0 e4 K0 q0 e, j" k
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    ; b# q/ O. s9 B: ?' o
  111. 5 k: k/ R8 v5 K- k7 L+ f! l
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK0 z/ j" @' C1 r2 J' G. r. n3 @
  113. .INCBIN "sound_bank_bar/music_data_1.bank"8 W/ n) s0 v2 n/ J. x1 f

  114. / \& z0 r* N2 x/ Z& i, }
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK, ?' c4 w$ p/ D: x* Y
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    5 I! q( t% y/ s* z+ U4 h

  117. + k5 N! ~6 Q6 \. L
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    2 `* @  L! N* p7 K5 Z
  119. .INCBIN "sound_bank_bar/music_data_3.bank"0 S) z5 E8 P0 y% d

  120. ! l6 S1 J& ?7 {5 n5 m
  121. .ELSE
    3 C( e" L5 A9 f/ p' `
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    " t! W2 ~0 i$ |% J
  123. .INCBIN "sound_bank/music_data_0.bank"4 ]2 \! d8 q6 P6 W+ m$ K+ [

  124. ' y6 |! e! \$ T$ L1 x4 ~7 t/ e; U
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    & s7 E+ b; ]8 q$ N) s: W5 b
  126. .INCBIN "sound_bank/music_data_1.bank"! T) G7 ?! C6 H
  127. 7 G$ f0 H; t( f1 j3 a( b( O
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK/ V& w' ]9 X' o- @$ h. {
  129. .INCBIN "sound_bank/music_data_2.bank"
    % Z$ l9 Q1 k3 E6 \: n6 p6 p

  130. ) `+ F4 t7 D+ N& y% z
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK% E2 U2 F7 b% g  T. }
  132. .INCBIN "sound_bank/music_data_3.bank"# e, ]/ Q4 B% G0 S
  133. .ENDIF
    . t( s/ Y0 o, E$ T( S8 c

  134. , P! }. x' T) L' H5 w  \
  135. ;CHR图形数据
    / k8 g4 C# k) D2 M: h  _
  136. ;======================================================================( m7 p, G, k/ C. O. n
  137. .BANK CHR_DATA_BANK" Y  g$ X1 ?" v1 P6 x; b
  138. .INCBIN "chr_bank/chr_data.chr"$ w+ U+ F$ y2 Y/ ]/ e

  139. . W, ]6 ^8 d+ q3 ^& K; M
  140. ;==================================================
    * g6 T& K1 ^/ Q% }' @
  141. PPU_Addr        = $0300
    8 C3 l" ]) J+ x# e( d6 r4 f7 G
  142. Palette_Addr    = $03C0
    0 t; P+ @3 V0 a8 W. z: `! S; @6 ]
  143. Sound_Bar       = PPU_Addr+$E0+ v! E+ U- x: a  \/ ~( _5 Q
  144. ;==================================================
    1 [% A" d) n8 n1 b
  145. Palette_Update_Addr     = Palette_Addr+$0D
    8 F2 `5 y( U4 C- l" G2 s9 s5 i
  146. Palette_Update_Max      = $2C
      s: c8 a' L) G; A' e# N2 l
  147. Palette_Update_Min      = $21
    2 V# s' B: z" [8 S. d) D2 Q" Y  N. _
  148. Palette_Update_Interval = 60
    9 V- I$ @5 ]; L1 q) D' d
  149. ;==================================================
    ' k. O+ Y/ w) ?( ~; f* |, P  Y+ f, p
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    5 X4 s4 [1 |9 _5 p8 m
  151. Screen_State        = Sound_Bar_Cnt+$011 V$ m$ k5 F9 Q4 k7 |, l8 L) a; s7 P+ i
  152. PPU_Cur             = Sound_Bar_Cnt+$02* e( C! x' T7 s* b
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03" {* j1 V5 R* y, u* ]
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04- r% U: E) }8 f7 d% b. f
  155. ;==================================================1 L) ~! m1 r0 Y) \
  156. Data_L              = $70
    - W9 K, C# [" J+ x: w1 [
  157. Data_H              = Data_L + $01
    ! N3 {0 Y+ h$ {( B" ~
  158. Data_Cnt            = Data_L + $027 k" Q- @: X8 L; a! N5 |
  159. Data_Buf            = Data_L + $03+ f/ v- a* G, S# B- T, T, }
  160. Time_Wait_Cnt       = Data_L + $04
    : v7 I, n4 {7 {5 Z$ {) g
  161. Palette_Wait_Cnt    = Data_L + $054 {/ B9 `3 E& H+ v
  162. Palette_Update_Flag = Data_L + $06& f" d2 ]) G! T$ X, _, y/ g
  163. Show_Track_Name     = Data_L + $07
    $ ?+ [' K; E8 h4 \4 ?4 x9 J
  164. ;==================================================& Y( f. J  q% ^  @" X
  165. Key_Keep            = Show_Track_Name + 1; J2 K) d- y1 a; |7 h
  166. Key_Once            = Key_Keep+$01* U( W+ m4 _- M$ ]; P' n
  167. Key_Kemp            = Key_Keep+$028 p8 o+ i( u% u. N# u6 q# ^
  168. Key_Temp            = Key_Keep+$03
    - O; X& y& m, c. a' r
  169. Key_Getv            = Key_Keep+$04" D2 O4 l& ?4 h; M
  170. ;==================================================9 I( Q" r3 G' `/ o6 ?$ M
  171. Music_Cur           = Key_Getv+$01
    5 t! j+ i# d! ]% {9 O: H( O
  172. Music_Last          = Music_Cur+$01* |- S' F5 s& g3 T  l
  173. Music_State         = Music_Cur+$02! _, Q8 M8 n, e5 O! G
  174. ;==================================================
    ) \* s! ~% J  c) n% Y9 S7 s  H
  175. HEX_Data            = Music_State+$018 |* e# c. S% f
  176. DEC_H               = HEX_Data+$019 G- _- N, v1 `
  177. DEC_T               = HEX_Data+$02, n; i6 N- \3 o0 j/ g, H
  178. DEC_L               = HEX_Data+$03
    " L' V* P* Q$ w; ^& b- T
  179. ;==================================================
    7 `8 P- v( H( V! I
  180. Time_S              = DEC_L+$01
    0 q0 f7 _, z: r8 @- k
  181. Time_M              = Time_S+$016 y' z2 f9 C( [9 Y- T) T
  182. Time_H              = Time_S+$02
    $ p4 P- N0 K2 o6 [  S* M# o; q
  183. Time_Cnt            = Time_S+$03
    / X  x2 {; y; u

  184. : {( e) p  C$ z  z3 J$ [: p/ T0 |
  185. ;==================================================% j4 i/ S5 h4 e$ R/ ]
  186. Music_Bank_8000 = Time_Cnt + 1
    7 p4 i/ ?3 [9 A* J5 R4 E
  187. Music_Bank_A000 = Music_Bank_8000 + 1- n' c0 c  l( O1 {( m
  188. ;==================================================
    ) \  W- X  w5 p

  189. 0 M3 |- }" b1 i
  190. ;======================================================================
    7 ?/ T  |) u+ k! v+ D1 B
  191. .BANK PROGRAM_BANK# u" A) u, ~0 W: S8 m
  192. .ORG PROGRAM_ADDR
    2 o/ j! Q; \/ g
  193. ; Y1 b- ]# n1 A
  194. ;==================================================0 ]/ b5 u! _% ?, }. Y
  195. NmiProgramProcess;NMI中断程序处理
    # T- i- p9 j  k4 k5 {) ?! z
  196. ;处理PPU图像
    8 I' ~+ G( |7 L) M1 O/ E
  197. JSR PPU_Proc
    0 j0 [8 c' |& |& L4 V; ]
  198. 4 ^7 J: N: F9 h) S7 D
  199. ;启用NMI中断6 Q7 ]* s5 `2 j# `% t- C0 A/ l
  200. LDA #$80
    : j1 I& o+ K4 r3 p# |) {
  201. STA PPU_CTRL$ U' O" v3 ?5 W/ A7 x

  202. . g1 b: N  K% ~' m
  203. ;更新调色板/ @; ?" |! z3 U
  204. JSR Update_Palette_Data  e4 h& g( U# h$ n
  205. + c& O" X# M5 q7 X) U1 }& L
  206. ;显示时间(缓冲)
    $ }3 j. Y+ g+ ]& v) f0 ^
  207. JSR Time_Show
    3 K2 }0 k* L* a2 [" T9 d" B
  208. 3 t6 E6 j% e6 Z$ n7 G; @
  209. ;播放计时, L' i' a7 z% U) Y& u# n( S
  210. JSR Time_Count
    9 @7 S% n$ D# H
  211. ( j( J) H/ v( N. P# x/ [5 S5 B
  212. ;播放声音2 D, b8 o/ R, @' [; K
  213. JSR Sound_Play
    6 W2 g  a+ ?( G5 q/ P5 X# d
  214. 8 W" P! n  ?1 n2 b( e  F1 E7 t3 L
  215. ;切换音乐(手柄触发)7 \- I/ m7 \1 Q/ l0 z/ O: |; p# l9 e; ?
  216. JSR Music_Switch) D: A3 c7 S' n- p3 P" f. L

  217. / |% j  ~6 b' L# @
  218. ;音乐显示(缓冲)/ m1 {9 x& F1 e' Q/ Z
  219. .IF SOUND_BAR_SHOW_ENABLE
    8 f  G$ P- J' X9 }, e  ?' ]( b8 o7 |
  220. JSR Music_Vision
    , v! h7 |: N" H4 Q
  221. .ENDIF
    - Y$ F2 J0 H& b: w: G

  222. + m( q8 S' R/ D
  223. LDA Time_Wait_Cnt7 V, l, D* d8 C8 x" [
  224. BEQ NmiProgramProcessEnd
    # \; n3 d7 @' R3 l- z$ {
  225. DEC Time_Wait_Cnt  N' ^, F+ t* P7 _5 T& ^
  226. NmiProgramProcessEnd
    4 N& X4 H; n( p* ^: Z
  227. RTS
    ' `5 ~: O5 ~$ x  B$ G
  228. ' ?* G# Q6 i4 C8 L
  229. ;==================================================
    % C3 _+ {& h0 ^: u) ~- U1 L
  230. ProgramBegin;主程序2 i5 b. ]7 ^% O1 K6 }
  231. LDA #$00+ c( p9 W6 H5 Q# T
  232. STA PPU_CTRL" N% q% O1 A+ k' Z) q/ v
  233. STA PPU_STATUS
    8 P7 U& D3 D2 k
  234. STA PPU_MASK, i  Y. l# S9 I
  235. STA APU_STATUS
    . O5 s# b6 ?+ Z" t4 A. F
  236. STA PPU_SCROLL) R; K  g. [1 Y# ?7 b5 ^
  237. STA PPU_SCROLL
    - u, L" j" G% V9 E* W! [- O7 z
  238. LDA #$C0! d: m! @+ g% H* P, I
  239. STA JOY2_FRAME) i" W* d& N( ?5 K

  240. / H7 }" G. R( |+ L
  241. LDX #$FF  V; R4 _. P  u" A
  242. TXS, P: o" v# X( |5 l7 c) l
  243. LDA #$00
    2 L! p- E# A1 U9 e
  244. STA PPU_CTRL
    7 \; ^0 S3 h" L2 L; |! l
  245. STA PPU_MASK- x: z) z6 V% G- T& K) l+ ~' ^
  246. STA MMC3_IRQ_DISABLE
    * R: u. F6 @; F3 m, ?

  247. 8 R3 D$ U6 T  s% Y$ c
  248. ;==============================  n9 k0 \1 [" @9 ~: K% B- y
  249. ;调色板清空9 }4 Y$ x) v, b# x
  250. LDA #$3F7 {4 A# T  F( ~5 P2 J
  251. STA PPU_ADDRESS
    - P# ?7 s( ]' [
  252. LDA #$007 C% a" B  I4 v! P  N
  253. STA PPU_ADDRESS; {0 D, t- a1 S# {- c# T2 W5 I$ @
  254. LDA #$0F2 v1 n1 y, ^! p! }* B
  255. Palette_Clear( e9 o, C0 c  d% k0 _
  256. STA PPU_DATA  ^. z. X8 d, z; S9 Y: Q4 a
  257. INX
    2 p  @0 p4 f6 V& O
  258. CPX #$20
    # a" U( l$ ^; i3 t/ G. X* h
  259. BCC Palette_Clear9 R+ J$ z& B3 R$ d9 ]4 T# ]
  260. LDA #$00
    9 e+ d$ j  x5 A3 O, z
  261. STA APU_STATUS
      h. z: W" N, z! _2 N6 F, C7 S
  262. ;==============================
    & S- V9 K5 l5 k: D# R
  263. ;初始化背景调色板
    3 W) m7 j* ~( j' M
  264. JSR Set_Palette_Color/ \0 U& A! d; c% Y5 g
  265. JSR Set_NameTable_Attributes
    5 t! _  V* ]* e0 y- J
  266. ! y' L/ f" K9 n9 k- |
  267. ;==============================
    / b8 i" d3 \9 S. {
  268. ;RAM初始化
    . e" U' G" b, [3 n. z7 X+ v
  269. RAM_Clear_All# [1 Q0 H  \" U0 u- n$ {0 O5 R
  270. LDX #$00
    0 c0 F0 s# C: M* D4 U# ~& q
  271. LDA #$00
    ) z- r+ j; f/ Q: U
  272. RAM_Clear_All_Start4 @. A2 V; |, J( G5 D( ~
  273. STA $00,X; W& g3 o9 V$ q
  274. STA $0100,X/ H0 n! E, w3 w/ u, Z
  275. STA $0200,X) D( n. {" ]  m2 V- O$ a. G7 k! N
  276. STA $0300,X8 A4 |9 f  q$ X! I$ Q; n$ `
  277. STA $0400,X6 d( X3 N$ `* o- @: F& ?- t8 p
  278. STA $0500,X
    3 R: n6 w  F4 j7 M6 h$ Z
  279. STA $0600,X
    % X( @" X' o* \" W( R
  280. STA $0700,X
    . ~/ G  I3 }: {# M; Y
  281. INX
      \: ~8 E/ e9 r5 Q& G- A& P3 b
  282. BNE RAM_Clear_All_Start
    , T8 ~* H8 v+ d) c% b1 j
  283. 2 u) X4 G5 {' h/ b; @5 \
  284. JSR VramInit8 c1 e6 f9 ?0 {" ^8 D
  285. JSR Init_Palette_Addr
    ) W* v% f- r+ [2 I6 G9 S# Q% \5 {& \
  286. 6 M7 M# F/ J: T  P: T/ l5 ^
  287. .IF Music_Reset_Addr
    - w/ ^8 r( w- t0 b: n# x$ \0 @% I
  288. JSR Sound_Reset
    1 ~# }8 Q; }7 X+ l4 b9 b5 D
  289. .Endif
    4 K- W* A0 ]# E* z1 j

  290. : i* ~0 w( v6 A4 v
  291. LDA #Music_Start_Song-$01
    # ~6 p! @/ u, J3 H) W0 x# O7 ^& [% A4 ~
  292. STA Music_Cur1 I- P2 q4 ]; f
  293. ; G) ~! G2 B( Q' I1 T
  294. JSR Show_Music_Text3 |, _9 C# d0 e! O- ?5 q1 V

  295. * F2 j# W4 q7 K- ?$ D$ d0 u
  296. .IF SOUND_BAR_SHOW_ENABLE/ w% E2 ]* h0 J' J( ^$ k
  297. JSR Sound_Bar_Text_Set
    $ k, E( J2 G# `4 o& W
  298. .ENDIF
    & O# A9 o) f( g/ [: v4 @2 u

  299. / P) E0 c8 F& L# k
  300. .IF Track_Name_Pos
    1 h& R) ?1 y8 ?  t, s9 J
  301. JSR Show_Track_Info
    6 o3 k1 `) g4 z; G
  302. .ENDIF3 a: B1 h9 y  C% ~5 Q# M' O
  303. / |, j6 U' Y  v" o4 v0 u# p
  304. JSR PPU_Proc
    ) {, l3 x- S9 {. D" M
  305. : W& t5 p. d7 \; k: N0 E8 R
  306. LDA #$0E1 D1 G$ Y, }% P$ X; D1 f  Y/ {" U
  307. STA Screen_State
    2 S# ^- D3 q9 r+ e8 B$ s2 M
  308. 4 ^1 H3 z& @- N3 }
  309. JSR Sund_Bank_Init2 U7 W, }  c2 i, T1 z4 T3 w5 K

  310. " V5 ^9 K1 A5 L. m* J: K
  311. JSR Music_Show
    & I  p+ K7 B* h7 ]3 ~* K$ M2 {' M9 K
  312. JSR Time_Show
    ( D4 p/ d7 q& S- c0 c: W
  313. JSR Music_Stata_Show6 I  V" ~5 S2 ^5 }
  314. JSR Time_Delay
    1 F1 v& s0 k; d- c; B9 M7 w

  315. 4 e+ `" n* r7 @' U" S

  316. & x* o# ]% M' E! M" T/ ~( d5 A
  317. LDA #$80& l) a) a( M5 r" X( F- t& ]  n
  318. STA PPU_CTRL
      ~8 r/ k' i6 \+ ^5 p
  319. ; u0 g# B7 l2 i8 d8 S/ H% r
  320. LDA #$20
    3 |6 z  w. T) U9 T! P/ k) O5 C6 b
  321. STA Time_Wait_Cnt
    9 n' X1 c, Y5 u  a7 @

  322. 1 y( X/ @7 Z' Q
  323. Wait_Time_Over  ?( j1 O! q7 V& I* }( X, m
  324. LDA Time_Wait_Cnt
    7 V, Z7 p( v7 t; o5 n
  325. BNE Wait_Time_Over9 b# Z0 y  w) C: P# X9 I2 L

  326. : C; ]5 k4 X* r) H" l
  327. LDA #$1F  K( M) W+ |* w
  328. STA APU_STATUS
    " u" q1 j$ X+ z3 I! ^
  329. LDA Music_Cur
    & s1 R9 }! a2 l. {
  330. JSR Sound_Init# H' }. O7 s( b2 U$ K. S* R' _
  331. & q: \, P! W) o9 l9 Q9 N3 C
  332. JMP MainLoop- w$ i$ I# d2 A4 v( C
  333. , G+ `8 F# |7 q4 U* x1 G
  334. ;==============================
    * Z1 W: \, i" |
  335. Time_Delay;延时等待
    + p# f' d9 s/ U; m8 f! Y' A
  336. LDA PPU_STATUS$ t* ]: d+ k; j7 P
  337. BPL Time_Delay
    $ ]! T- h" k1 J/ h- `7 x3 N
  338. RTS9 M& S  O, h2 X

  339. + S1 ?+ F; @; l( p% ?! W; [
  340. ;==============================" J& o8 `- J' f( E5 \
  341. VramInit;初始化图形内存
    3 @( h2 d2 r$ |9 E% `! s
  342. LDA #CHR_DATA_BANK8 _5 y0 j; C; S: [
  343. JSR SwitchBankA000
    6 ?0 s0 w( @, u7 `3 _
  344. LDA #LOW(CHR_DATA_ADDR)$ A9 I/ C) a8 d0 \$ G) P
  345. STA <Data_L
    3 H# f% |4 n  S9 z2 u0 e
  346. LDA #HIGH(CHR_DATA_ADDR)8 L0 v  [! L: c) A' y8 j% O& o
  347. STA <Data_H
    ( d! Z2 |3 T% ~8 t
  348. LDY #$00* g1 ?" ~: Y1 ~; m% z* I, [  T
  349. LDX #$20, j9 f' q9 T3 w
  350. LDA #$00
    5 E& T8 y8 V* `8 ~' J
  351. STA PPU_ADDRESS
    . ~' V3 G: R! ^6 U5 C3 Z
  352. STA PPU_ADDRESS
    % N, s. T4 i" M- I( t
  353. VramInitWrite
    2 m4 E' ~8 J/ u8 _3 G! P4 i' {
  354. LDA [Data_L],Y2 Y* Z% r! L2 M- X0 |6 Y
  355. STA PPU_DATA
    6 R& q: g3 E2 B; p
  356. INY
    7 K- o/ ]& d; O0 D8 Z0 \( ]
  357. BNE VramInitWrite
    + w4 Q3 z2 J9 f7 T$ N+ y& R
  358. INC Data_H- ~/ a+ S1 ?+ Q3 H
  359. DEX
    ) k: b. V0 {' H4 |/ o* T
  360. BNE VramInitWrite
    7 M# g5 E( P- W$ X" D$ p
  361. RTS
    / L. U' J% T. C5 B

  362. 8 M2 B  A, M3 x0 U% Z" t
  363. ;==============================
    " L5 G6 a0 a- v% N# y
  364. RAM_Clear;RAM清除5 y1 i; Q  |8 F0 n
  365. LDX #$00
    % g& m: t+ C# E! @% J: C4 o
  366. LDA #$00
    * M9 J6 R! M% W: r) t
  367. RAM_Clear_16 N6 L) m. u' W  l9 s
  368. STA RAM_Cln_1,X+ u# @; m  x! g
  369. INX9 m1 k0 Y" N* ~1 e3 ~- Q6 D: W% A
  370. CPX #RAM_Cln_1_Size+ ^# h% Y2 y9 n, R
  371. BNE RAM_Clear_1
    . D: w; F6 h  m7 |! l
  372. LDX #$00" c2 _. B3 c8 V% \
  373. RAM_Clear_2
    ) H# k* M& O3 K8 m: r! Y
  374. STA RAM_Cln_2,X
    9 i; i. P  }- ?* q# m
  375. INX, |% C/ s/ L  y4 y8 M
  376. CPX #RAM_Cln_2_Size
    7 ~5 X  |& a7 n; R$ z5 D+ w. ?
  377. BNE RAM_Clear_2
    , h3 w& y. o7 x) L* Q$ X
  378. LDX #$00
    ( W" C" m, p" H" y8 h% J# l, S0 i
  379. RAM_Clear_3
    # H/ m% a  j' L
  380. STA RAM_Cln_3,X
    ' W; K/ p3 a( x1 R# ]; ~4 H9 [
  381. INX
    7 E  B$ }* G& A+ _8 @4 d3 t! P" _
  382. CPX #RAM_Cln_3_Size9 g5 _$ F7 f5 W4 g: y+ f( h
  383. BNE RAM_Clear_3
    8 e6 G+ r  e/ J+ R
  384. RTS
    ) {0 w$ C$ c  f/ K; p: G

  385. : g: _3 D( C, j$ v6 b( N/ ]0 r
  386. ;==============================2 p$ s5 n; _7 r( N3 ?' a, r# e
  387. ;音乐切换
    & d" T. l7 Q. k" A% k, J
  388. Music_Switch
    - b8 L3 y7 n# {( [& K- [
  389. JSR Key_Proc
    " L7 _; ^( e. t8 E* @! _# M5 W* v
  390. LDA Key_Once& t& P; G- G6 d2 ]2 S0 p- }; @" v
  391. CMP #$107 f; Q# Y" f1 h% z; s
  392. BNE Music_Start_SongStop- z$ |6 K$ B' f7 ]' e; A3 j
  393. JSR Music_ReSet( Z/ \2 U/ X  u. W, F* m3 Q
  394. . Z6 X  ]& T# _8 a2 y* B0 m
  395. ;音乐停止9 D' K* z) q' J3 l( X7 A
  396. Music_Start_SongStop
      [5 p5 J. C% y+ e
  397. LDA Key_Once
    ; w0 Q- r/ G- {6 z6 U# `
  398. CMP #$20
    & g: v/ u2 V8 N& s4 O# X9 U0 I% H
  399. BNE Music_arrow
    : o: t) W- |7 l
  400. LDA #$01
    $ u) ^  v/ |4 v  [
  401. STA Music_State
    ) s2 B. n% w4 v) g6 z3 n
  402. JSR Music_Bar_ReSet
    0 j# c. ^2 c. O2 b9 \$ Q
  403. JSR Time_ReSet3 ]2 H5 ^$ [) S6 m6 w0 p
  404. JSR RAM_Clear( L. Q! ~6 t6 a
  405. JSR Sound_Clear  p6 x# v. v: l, B  l/ w
  406. JSR Music_Stata_Show1 \1 U$ f4 z1 w5 A8 g. \: t& k
  407. Music_arrow2 r" f; N! ?! H4 r
  408. LDA Key_Once
    ' f. Z3 ^8 z4 T2 G3 a
  409. AND #$CF* |) i% _1 u% ]8 M: r
  410. BEQ Music_Switch_End; {' g: F9 g; N/ _' o7 x
  411. JSR Music_Number
    " U! {8 I& r/ a& R) O  e
  412. JSR Music_ReSet
    ( Q/ y2 c% [- \! @7 `
  413. JSR Music_Show( B/ E# M1 {" \1 H5 N! K
  414. Music_Switch_End
    9 q% {, |- p2 o: G
  415. RTS
    8 V4 M  U6 u" f. b% U/ [8 @* x' T
  416. * k/ a. [# p- M- T
  417. ;==============================" U: v. p9 i' `3 F4 [
  418. ;音乐曲目切换- b7 z5 o0 v) x# @0 Q
  419. Music_Number4 C8 p3 X. b0 `6 s7 }0 ~% c
  420. LDA Music_Cur# E  w0 v" L) L7 n9 }1 y
  421. STA Music_Last( b3 m4 h, H7 Q7 I4 ?/ I
  422. Music_Decrease
    " b3 }# b* b: D/ [& n
  423. LDA Key_Once
    5 M* }* d+ O5 [2 S
  424. AND #$425 P4 ]2 s; W/ z: x7 A8 C  {, Z9 A
  425. BEQ Music_Increase
    0 k- h4 Y7 n0 a, j8 K1 C  u
  426. LDA Music_Cur
    ! E5 z5 G# t, S6 t
  427. BEQ Music_Increase
    2 W: b# @" D# d# U4 h
  428. DEC Music_Cur0 k* I& ~; w1 g* y& n
  429. Music_Increase1 Z7 H4 ]8 m: b5 y# y$ F
  430. LDA Key_Once
    4 b4 \; r3 C  p- l: D# H
  431. AND #$81) w% C: H$ @$ h: {
  432. BEQ Music_Decrease_10$ S; F% L9 q8 m; k" E! y
  433. LDA Music_Cur
    6 v3 a& [0 @/ N. {
  434. CMP #Music_Song_Total-01" c- B9 t: J% A8 v# I
  435. BCS Music_Decrease_10, W  e/ r- y) n5 B( Q; p
  436. INC Music_Cur
    6 t/ Q* w2 s7 A0 a0 J* P
  437. Music_Decrease_10; l  M2 F, ?* _! e: a
  438. LDA Key_Once3 u% q, @1 ]# u& H' Y
  439. CMP #$04* `7 ?' F0 P: }) @
  440. BNE Music_Increase_10
    ' p( e' K  ?  ~. C& s) ^
  441. LDA Music_Cur
    ) l/ M% T+ Z! a
  442. CMP #10
    / ?$ U& Z* A9 m0 s9 i/ L. K# V
  443. BCC Music_Start_Song_Min
    % u7 a& a9 T% ]; \
  444. LDA Music_Cur: @  A- C; V4 ?6 S1 ~6 p  l% L; r+ t
  445. SEC# i9 g1 S, E: U( c$ Z
  446. SBC #10
    # f. ]: ?5 Q- x; |4 e3 }" e$ s
  447. STA Music_Cur
    1 H7 t4 A6 _6 V( ^( n; M! c
  448. LDA #$00
    2 ], E! {" [! o8 R1 M+ V
  449. BEQ Music_Increase_10( o$ o0 N) h' \- f" L- r
  450. Music_Start_Song_Min  n8 f, Y! ]$ P
  451. LDA #$007 t% i, C$ j" g
  452. STA Music_Cur
    . S* H) _3 I$ Z$ o0 [% b3 Y- J
  453. Music_Increase_10
    ) X% a/ O5 `6 q$ r
  454. LDA Key_Once; P* q* n3 P2 H  g
  455. CMP #$081 a( T) l; V5 k0 t0 I( ^8 m; O- `
  456. BNE Music_Number_End
    $ x. x7 ]! |- E% u* S: w' l, E
  457. LDA Music_Cur( a, k' y; M1 {* c
  458. CLC! S2 g& [* @7 W( H
  459. ADC #109 B( q! X; i) [- t, `) B2 Q* p: o
  460. CMP #Music_Song_Total-01
    9 ]2 S8 V  a( z! C1 Y
  461. BCS Music_Start_Song_Max
    4 z* i$ A! p% u2 X9 u6 P# u6 \
  462. STA Music_Cur: j4 B' h8 _% ]  [
  463. LDA #00
    " j. {0 W) ^7 d; G( X
  464. BEQ Music_Number_End2 z# R+ r6 D- `5 M4 q  j! b& N
  465. Music_Start_Song_Max
    * V/ B# r: p- k6 Q: \. N
  466. LDA #Music_Song_Total-015 _& o5 G: r, Z; M- c8 L4 ~
  467. STA Music_Cur
    ) S% B3 w) p( Z
  468. Music_Number_End  @0 i# Y2 ]* W/ l" r) R
  469. RTS
    5 T$ P' p0 @, r; `7 d" ~1 q
  470. 5 @9 z" Z# k$ R  q' e2 [% R
  471. ;==============================+ S. u' e$ L& x1 y
  472. ;音乐重设: t  ^2 Y) Y) @/ n
  473. Music_ReSet
    ( ?! X( M: k! M0 j. U
  474. JSR RAM_Clear6 [+ e; @1 a' T
  475. JSR Sound_Clear1 _$ i3 m6 ]9 L, B! O9 j3 P1 U' g
  476. LDA #$1F  F6 S9 G9 {# G6 h! A5 z/ b
  477. STA APU_STATUS
    ; t; P& b! }! M0 |+ R
  478. LDA Music_Cur
    5 M7 [% l. G7 F" [% A' c% Y
  479. JSR Sound_Init
    : u7 A, y3 k. d9 ~
  480. RTS4 p  B+ x! H7 i$ D

  481. , j' z) J: M7 \/ w0 Z1 f( d7 \$ d: G
  482. ;==============================$ L5 H% `/ T, f. ]( F- m# o0 \! `5 @
  483. ;音乐端口清除% V- l  d4 B  Y
  484. Sound_Clear4 D# M8 C' w; k2 k3 {
  485. LDA #$00
    1 H7 s& S: Z$ k
  486. STA APU_STATUS
    * d# N2 j! @+ X/ F
  487. LDX #$003 y% K& E" Q& y" p" ?
  488. Sound_Clear_Start
    4 p: b. i$ {2 X' C6 @* L
  489. STA $4000,X/ Z; W/ Q5 H% b, _- _. F
  490. INX$ a5 i, B! {4 J( N/ X
  491. CPX #$145 p$ ~) r2 b$ x7 C" ~( N. h# J
  492. BCC Sound_Clear_Start( ]7 K' _/ c0 h6 C' d. e
  493. RTS
      v$ v2 C6 d% `+ S+ s7 k
  494. 0 [( U3 W* i  @% t. Z( m* c
  495. ;==============================
    ; Z" P8 i4 ], F, t- {
  496. ;按键处理
    . g8 v# b/ R  O
  497. Key_Proc! {2 `+ W5 w  h8 H' _( L% E
  498. JSR Key_Scan- s! M5 j/ t" ~# d. L
  499. LDA Key_Keep) S/ Y8 z& o7 [
  500. STA Key_Temp! m2 k7 b( J7 x2 G9 R5 p
  501. JSR Key_Scan  k# D5 k+ _* B2 b, m. y. ]! Y
  502. LDA Key_Keep
    . \+ \" {# H& I4 k" D
  503. CMP Key_Temp3 Q3 w# e7 W% s% h6 |. ]
  504. BEQ Key_Get_Once
      n* [) w( \: A$ o" Z9 j3 J% K7 _
  505. LDA Key_Kemp
    ) m* U* I0 `" r6 [
  506. STA Key_Keep8 O8 G, A# l6 O6 N! U
  507. Key_Get_Once+ H3 X" ~' ^/ h3 W/ y( A
  508. TAY
    ( I" \6 y* Z+ x! p9 j7 q5 Z
  509. EOR Key_Kemp) Q1 |# G; k/ M# {& R& I$ D
  510. AND Key_Keep
    / ~# N7 T$ h" i$ Y/ U% c
  511. STA Key_Once
    $ k! q6 y/ O$ G" T7 e- s
  512. STY Key_Kemp& f( r, S% V% X6 z
  513. RTS. g( o& h/ _2 |. I' a8 S
  514. ;------------------------------# b% m$ q# [3 d! H
  515. ;按键扫描: O$ B7 r0 d/ I$ P. E" T5 w! B
  516. Key_Scan
    ) f) R2 E2 r+ a' R# K, R
  517. LDX #$01
    ( i3 z- q' B7 [3 z' c4 h& V5 r
  518. STX JOY1_FRAME
    8 R* L" o2 L4 p0 d3 J  ~8 a
  519. DEX3 h0 G0 R  h# v+ ?" m6 ]6 l7 m1 D
  520. STX JOY1_FRAME
    . G* c0 S* j6 G0 g" `3 |; e8 E
  521. LDX #$08
    6 W4 s3 m: [; w1 `' H& A* ~
  522. Key_Value% l: F3 u" B. ~8 Q7 X3 a$ }
  523. LDA JOY1_FRAME( D1 S! w9 V  J- c0 |% I
  524. STA Key_Getv
    ; |7 Y; N. b" q- m% U: C8 t7 y
  525. LSR A
    " H6 o& y, u4 [8 ~  }$ U" F% A! d
  526. ORA Key_Getv
    0 f1 P: v7 K9 o) y
  527. LSR A
    ! i" l; n8 g  J8 d
  528. ROL Key_Keep/ e. ^2 J8 r. F3 V  H) y/ G
  529. DEX! v( W/ \6 G  x8 n; a3 |
  530. BNE Key_Value
    5 h* u5 e( [3 ?, X# J
  531. RTS
    3 C2 A& y5 x! H, y
  532. : C, c" D1 ^5 n+ g' }- ^
  533. ;==============================
    ; E9 u5 f: I/ u" |
  534. .IF SOUND_BAR_SHOW_ENABLE6 n) P) j0 A3 M, z+ l
  535. ;音乐条显示
    , F, j) M8 @) d7 B, z: J; I
  536. Music_Vision/ o4 U% K% x- T9 i5 Y; Q  b
  537. JSR Music_Animation3 C$ d3 B6 k& _1 x
  538. JSR PPU_End6 U6 L+ I* x& j6 C3 a
  539. RTS" P& _5 B1 }( M$ ?" t1 N
  540. ;------------------------------
    - w( q8 ~% }% a/ |' R# y' B5 O8 q
  541. ;音乐条显示处理
    4 ~. I/ h$ p7 Z: l4 r
  542. Music_Animation
    + y8 B9 k7 u% p% y5 y1 ]
  543. LDX PPU_Cur
    * j2 C+ w: R! z2 {! C' h+ ]
  544. LDA #Mode_Line
    3 U( O" @+ z% S5 _: D  N: i
  545. STA PPU_Addr,X
    ! I$ @9 h% E% z
  546. INX
    1 K* |1 A" {/ X* @1 |
  547. LDA #HIGH(Sound_Bar_Pos)
    ; Z, g! P3 Q3 C# @2 u, ^
  548. STA PPU_Addr,X: {8 N- s  N6 S6 _7 ^
  549. INX7 Q0 d) e' }: m
  550. LDA #LOW(Sound_Bar_Pos)4 Q7 B3 r7 I; _' |
  551. STA PPU_Addr,X
    6 p" ~: d$ h6 z. J4 C3 W3 c
  552. INX
    / O$ U6 ?( A1 t0 o. V8 y
  553. LDA Sound_Bar
    - }. B/ E" w2 p5 |7 @! B
  554. JSR Volume_Convert# y. E# i- y" L/ }4 ^
  555. JSR PPU_Return+ u+ Y$ ~1 x4 L/ B
  556. LDA Sound_Bar+$4
    " B* W3 {% |, b
  557. JSR Volume_Convert
    7 }$ u7 _% j* U, S, c7 s  |
  558. JSR PPU_Return8 @4 l& w0 |+ n9 Q9 a) \
  559. LDA Sound_Bar+$8- }4 L$ R/ a: P  n. {9 U
  560. JSR Volume_Convert_Ex' ~7 i( L( Z1 r- T2 ^
  561. JSR PPU_Return
    3 _; d# i8 F9 @3 F0 D
  562. LDA Sound_Bar+$C9 @3 C. ^. v$ i3 ]9 P
  563. JSR Volume_Convert& ?+ s: _* O! _. `0 Z: H* Y' j8 N2 i
  564. JSR PPU_Return5 Z) D: g% j4 C0 |# X# \
  565. LDY #$109 F1 ~* a1 C4 k* T
  566. LDA APU_STATUS9 g6 h- y& F/ G
  567. AND #$102 P" o. g7 g4 U" t' W( e
  568. BNE Volume_Count4 j# ~' b% b6 w8 W$ F  O; g
  569. LDY #$00
    9 J8 G9 U  u% R  Z
  570. BEQ Volume_Count; J- O  N6 G# T: C" y* r2 i
  571. ;------------------------------
    , g4 F: {# k" e
  572. ;音乐条处理# N. `% v' \1 L1 z5 K
  573. Volume_Convert_Ex1 U8 Q/ d: W6 H' |! S
  574. AND #$1F
    # p, _. @7 x+ ?' e& d! Q
  575. TAY& e+ ~3 M9 p4 s0 m4 w! ^( d7 L+ K
  576. BNE Volume_Count, U# Y3 [* A$ p2 {  h# o
  577. Volume_Convert
    0 h6 R. I1 j; ~' r9 H
  578. AND #$0F
    7 f( {3 F& Q/ _. }
  579. TAY
    : y& T  w/ _" x$ v; s* j  D
  580. Volume_Count
    / I4 d7 \! F3 R  v6 y
  581. LDA #$08
    & l6 ?- g8 y$ |* v& n* a8 `: g  _
  582. STA Sound_Bar_Cnt1 A3 _& Y' I4 z' u% H, m( ^
  583. Volume_FILL
    ; ~5 N2 K0 A- Q; p
  584. DEY- F2 D8 ?( F+ _
  585. BEQ Volume_Half% I7 S1 |9 G/ d8 |5 r1 h
  586. BMI Volume_Empty: X. V7 M& I) {7 w5 ?8 q& E
  587. DEY, C+ |* M; m. S8 ^5 [+ S
  588. Volume_Full
    - k  b& ~# \% o
  589. LDA #$16* e; p! D; i) ]) S2 j9 G
  590. BNE Volume_PPU5 O& g) t# @: t- P9 B8 S8 \( [: F
  591. Volume_Half3 A. Y* d2 z2 R2 i! \$ _
  592. LDA #$15
    0 t) T7 _+ `+ f) U8 M5 c! y
  593. BNE Volume_PPU
    0 U6 V3 s" E+ f' U
  594. Volume_Empty
    / K8 K1 F" ~  D7 V9 ]( Y& v. a; ^4 E- p- P
  595. LDA #$14! z6 t5 c# t2 J( Q9 Z$ h, i( M- g$ W
  596. Volume_PPU
    6 |4 _% ]- b+ j- R: ~
  597. STA PPU_Addr,X
    : v% `2 b5 T  F* x8 F
  598. INX
    9 M: V4 |: r' D5 R2 |
  599. DEC Sound_Bar_Cnt
    7 ~/ d" X# \& E3 }! Z$ ]1 ^: {
  600. BNE Volume_FILL
    & I* l* y- }: z" T
  601. RTS
      s/ X& k1 j$ Z" {

  602. " e. P, M6 h; g
  603. .ENDIF% I" H# z2 u. G0 Y% M3 g0 G

  604. 5 p7 Y7 V" P4 T& t. |; F% U
  605. ;==============================3 E: E- `. @4 b% `
  606. PPU_Addr_Set;PPU行开始! I0 Z! P3 |- O  D' t1 W
  607. LDX PPU_Cur* H( m' o0 g$ c
  608. LDA #Mode_Line
    * y3 T' e! p$ P
  609. STA PPU_Addr,X6 }0 g* w( A! M5 _/ ?
  610. INX
    $ R6 F, g& b9 p  @( P
  611. RTS( H' e! A  \* n* R9 I( z8 k
  612. 1 W7 X% v# ]. K0 o
  613. PPU_Return;PPU转行* H: p6 G$ ~: E5 ^0 u) z7 x# c) y% Z
  614. LDA #Flag_Over0 D5 A$ e9 h7 U/ }- x
  615. STA PPU_Addr,X( H3 b6 Q  k4 z0 d
  616. INX9 M; y) q( Z& N
  617. LDA #Mode_Return
    $ T0 Q7 O0 ?4 `/ d; [/ U
  618. STA PPU_Addr,X6 k8 |0 Y# y  k2 _
  619. INX
    1 I* g8 ]8 `1 M- V( ?& s5 O7 }2 E
  620. RTS7 F' t' _3 K3 G/ T. Q" C

  621. ) d; M3 f/ Q8 o8 y1 u5 y% Z
  622. ;------------------------------
    * U3 r/ {( u) M! w0 I1 N
  623. PPU_End;PPU结束
    : ~$ l+ o/ ^8 T, u- q
  624. LDA #Flag_Over
    / B6 Q& g) X, r7 @" f. \
  625. STA PPU_Addr,X
    % R3 p, f8 a! R
  626. INX
    3 Z7 G9 V8 k# P
  627. STX PPU_Cur+ [- S. n1 Q" o
  628. RTS$ s3 K2 o+ v2 I0 z
  629. ;==============================. o  U  f3 `) _0 E5 Z1 |" `/ [
  630. Mode_Line     = $FD    ;新起行模式
    $ Q- }( q$ m  c; C9 c
  631. Mode_Return   = $FE    ;转下行模式- }% \9 a# Z% g* V! [
  632. Mode_Clear    = $FC    ;行清除. W3 d- V; K5 H" Z
  633. Mode_CntLine  = $FB    ;行计数写入$ i, z+ y, }) n6 m% e
  634. Flag_Over     = $FF    ;行结束标志: t, ?5 |2 ?2 ]+ F
  635. & W/ k# Q( w- s( b! ?# F5 ]- J
  636. ;------------------------------& w7 {5 n; J- G) G. e1 T$ d; g
  637. ;PPU处理& Y3 S: T: U! B" Y
  638. PPU_Proc. Q  o. H7 M: r2 L3 ^
  639. LDX PPU_Cur
    # J1 q: ~2 q- }2 [
  640. LDA #$00
    * q  \7 i4 W/ X; C; I  u
  641. STA PPU_Cur3 G* [: w5 _9 X  i) {/ m1 M: I: G; x
  642. STA PPU_Addr,X& Z0 ], O2 e6 W/ p. _6 F
  643. LDA PPU_Addr$ f6 l8 G/ j/ e" x% M$ L4 _5 H- H" |
  644. BNE PPU_Proc_Beg* k- [3 I, O( Q( G) r: Q
  645. PPU_Proc_Ret
    5 q; S$ q1 {5 j" J* p" b- g
  646. RTS
    8 K3 T  Q8 A% ^. E; [+ y
  647. ;------------------------------
    8 ]! b2 D6 T: V) v+ R
  648. PPU_Proc_Beg  ;处理开始
    8 {+ F) |; K5 a' _
  649. LDX #$00
    - |; R: z3 d% D2 s% I
  650. STX PPU_MASK
    0 ?) p* z. p8 b/ f3 W# m" ]
  651. ;------------------------------7 P% \# P) |0 w& M) Y7 P; I
  652. PPU_Mode_Select  ;模式选择  U0 ~! T. C3 _2 M
  653. LDA PPU_Addr,X
    , l) r& P( |3 f; D/ w+ X
  654. CMP #Mode_Line* _$ R9 D( @9 G% f( i, Z
  655. BEQ PPU_Mode_Newline6 x: U, V* A0 r- e1 R: c$ _1 i" o
  656. CMP #Mode_Return
    - ^$ ^" g0 j9 h! V
  657. BEQ PPU_Mode_Return
    6 ~  C* ?9 [, K& @6 D/ y: j' _1 m/ P
  658. CMP #Mode_Clear. O2 v9 i6 |, l, X/ N2 O6 T
  659. BEQ PPU_Proc_Clear3 L6 A) O2 Z" P7 v5 @2 B" w0 `
  660. CMP #Mode_CntLine- b% S; H2 A- Z
  661. BEQ PPU_Proc_Cnt_Line
    . X5 k: Z& l6 W' ]0 M5 }
  662. RTS+ l% Y3 g9 I9 G4 ^7 [7 D  Q1 s7 K
  663. ;------------------------------( c+ ^4 L* H7 t9 }- Y. M0 r% b1 Q
  664. PPU_Mode_Return  ;转下行模式
    1 k, E+ V+ h8 K. L3 f. ]
  665. LDA PPU_Addr_L
    " C0 ?% @$ R: v/ x3 ~
  666. CLC. @1 M( B' B+ x! b/ ^
  667. ADC #$20. l0 l5 n+ A1 x
  668. STA PPU_Addr_L
    + x) \% A( l) m- o  P1 g
  669. BCC PPU_Return_End
    : m1 u, t: X7 \6 O- d2 i% h
  670. INC PPU_Addr_H
    . U$ I. ~+ ~5 }& T
  671. PPU_Return_End2 v4 B4 t% _, G, T! q1 B( v
  672. JMP PPU_Set_Increaser
    6 W6 R7 j  Q  O3 Z; j3 w
  673. ;------------------------------
    - e- \7 v" l7 c* R4 i
  674. PPU_Mode_Newline  ;新起行模式9 _" e7 r  d2 R0 \
  675. INX
    , S3 l9 ^9 x6 J% c# R7 I, b% d! e
  676. LDA PPU_Addr,X
    , `) j  M; n+ A* h0 A  A
  677. STA PPU_Addr_H
    . ]! T, ]3 |- Y' K. _% m
  678. INX9 d3 h1 B" X2 s
  679. LDA PPU_Addr,X  f! ?$ P! a( g$ h6 h# s
  680. STA PPU_Addr_L
    0 F/ \6 u# F2 w9 f5 s) ~
  681. ;------------------------------0 r$ r3 y/ @  ?" j& `/ H" U6 N
  682. PPU_Set_Increaser   ;设置写入地址7 v/ [7 @* d1 \! Q
  683. LDA PPU_Addr_H. E' f& q. {. T& j# c
  684. STA PPU_ADDRESS+ s2 b/ Z; _' W* W: J
  685. LDA PPU_Addr_L
    6 }) c7 c6 _9 f' C' a
  686. STA PPU_ADDRESS
    # K3 ?  j7 G3 ^8 x% @! y, u1 ^
  687. ;------------------------------
      z- e+ l, c4 q  `! T( Q  o
  688. PPU_Write   ;写入数据0 E) u$ r! j' e7 m7 G5 @4 p
  689. INX
    ( t) |5 ]9 u+ g" ^
  690. LDA PPU_Addr,X- @6 y) o1 m$ y; @: M# G
  691. CMP #Flag_Over
    1 F2 s- E, D$ I2 `! A
  692. BEQ PPU_Proc_End: X, n7 f4 `0 b6 W3 P
  693. STA PPU_DATA$ I* t9 O/ |4 \: i* P. E+ H
  694. JMP PPU_Write- N3 y% Q8 J0 |; h6 N7 V
  695. ;------------------------------3 J% f9 n+ Y- x& }0 G( d" `2 U
  696. PPU_Proc_End  ;单行写入结束
    0 }% }5 c8 ^- l# M0 R: [
  697. INX! w3 g6 H0 S% C) K5 Z; ~
  698. LDA PPU_Addr,X
    / ~. T& x# u4 y3 p. y% C9 N9 |
  699. BNE PPU_Mode_Select' t, [8 D! }0 `, `* u
  700. STA PPU_Addr6 u1 |& S4 R* q$ \, e2 ?# T
  701. JSR Update_Palette_Color
    ' M  a2 J! H3 J# C2 s
  702. LDA #$001 Q9 _) `# b/ k" T& A/ N) \
  703. STA PPU_ADDRESS" Q+ S7 r# E- S+ Z0 z8 x
  704. STA PPU_ADDRESS2 A& L- K- R# {
  705. STA Show_Track_Name2 B5 z" o! s5 h! H5 m2 {* n3 s
  706. LDA #Scroll_X1 V1 r. ^- q$ G: k* J- F
  707. STA PPU_SCROLL+ T7 R0 Y3 ?% b0 C
  708. LDA #Scroll_Y
    8 I( E- p& H; c
  709. STA PPU_SCROLL, E! r- y7 @1 ~0 Z1 o6 Z7 F. z
  710. LDA Screen_State
    ) G7 _$ Q  k! ]; I! _
  711. STA PPU_MASK
    $ t' o. `8 ~- Z
  712. RTS2 H  U% T! j1 T
  713. 2 H5 \8 ]4 \0 F" u
  714. PPU_Proc_Clear! b; |2 V/ A" Y6 C
  715. INX
    ' u  f: D/ p6 b! l" a5 T+ A
  716. LDA PPU_Addr,X) M  X" }& a1 w# G7 Q' e
  717. STA PPU_ADDRESS
    % x! t  g( K. d, k/ ]5 F
  718. INX( S' ]0 n' x# F% J- `- P9 A
  719. LDA PPU_Addr,X4 P! z8 k$ m+ M; X
  720. STA PPU_ADDRESS
    7 r+ q0 t- ^5 j. H; K5 @% F$ |# n
  721. INX& [, N% m( J3 z5 c" s& w' n
  722. LDY PPU_Addr,X
    # D- |- I5 K; ~8 ~2 f/ t; W
  723. LDA #$00
    / Y# C* T# Z. j
  724. PPU_Proc_Clear_Write
    # d: d/ }, B% y( ]' V5 h2 m
  725. STA PPU_DATA
    ( ~4 w: m0 p- }" N3 V% ?' ?" H# x: D6 R
  726. DEY4 }4 U0 z6 T+ ], p  ~- M1 J
  727. BNE PPU_Proc_Clear_Write: D, Q5 w% G! [" C: S
  728. JMP PPU_Proc_End
    , r1 _# q  Y0 P. ~. ~4 [

  729. 9 i* u- P/ e$ K+ V# q7 J3 w
  730. PPU_Proc_Cnt_Line
    ! A7 v' h' p. v' x
  731. INX
    6 B* ?3 J+ `  f4 y9 U
  732. LDA PPU_Addr,X
    2 |% p) a6 B8 E4 O' V8 t7 [
  733. STA PPU_ADDRESS( M* G# d+ z/ g& D2 Z
  734. INX1 ?: F+ k+ o/ [8 S& F: K
  735. LDA PPU_Addr,X
    $ o% S' T& \8 X2 C# [( u3 S7 e
  736. STA PPU_ADDRESS3 h" P; o0 y; k. L& ^, @
  737. INX
    : M' w+ g$ {, n8 ~4 z
  738. LDY PPU_Addr,X
    " p( B' N, T' e; X$ G7 G5 b
  739. PPU_Proc_Cnt_Line_Write
    : y; z/ E$ t( S/ L0 o, \7 T  B
  740. INX
    ; W" C/ b0 v& }6 K
  741. LDA PPU_Addr,X5 g, T4 I. C# y8 h# |& @9 ?
  742. STA PPU_DATA
    . a' a# b# ^/ v- @
  743. DEY6 D- M/ b, l( U2 L
  744. BNE PPU_Proc_Cnt_Line_Write8 o+ U/ n) x9 I7 ?: K( z& N
  745. JMP PPU_Proc_End
    - m3 c$ P9 d3 \9 T0 t. ]- [
  746. # w; Z6 w% P3 m% u4 I
  747. ;==============================( v% e; W. S- O* Q4 M9 u* P3 ~
  748. HEX_To_Dec;十六进制转十进制
    + @6 s( M6 D5 r- P! V) P3 k
  749. STA HEX_Data
    4 p$ ^" ~! e& k6 q) x" W$ j6 @" }
  750. PHA( u/ z: W) `6 W6 @' W1 l& B/ H
  751. TXA
    4 D/ X  Q5 w. k) T
  752. PHA/ L( B- k1 y# p' D  q% P0 \
  753. LDX #$00+ d/ v9 n8 H3 l* }1 _
  754. LDA #$00; Q% R; s3 [9 U3 @1 j4 \
  755. HEX_Cln5 z) T& ]" W6 f7 _9 T$ n8 |
  756. STA DEC_H,X
    ! K# ?8 P  ]7 \$ D/ C) `
  757. INX, Y9 ]+ @$ L& Y
  758. CPX #$03- q6 b  `) ?3 G, Q
  759. BCC HEX_Cln
    9 D3 M2 ]+ d( D" m; K- H
  760. LDA HEX_Data8 I3 B# V# |7 u2 t6 L: o( u" |! I/ Y
  761. ;------------------------------
    0 \  K: m; W. I: F# N
  762. HEX_1001 P5 \  n8 I5 U* U& C0 O
  763. CMP #1000 F0 [8 ]8 R. W: s
  764. BCC HEX_10
    9 O- h# @% P- K9 X0 l' \; A7 w
  765. SEC6 E4 @9 _2 k. j% d# v0 l( _& }
  766. SBC #100) j* ]8 t+ K5 O6 a
  767. INC DEC_H
    / G5 h* _, Y7 ~$ C, u
  768. BNE HEX_100
    3 s) W3 J9 a& K+ [4 N) ^9 H
  769. ;------------------------------
    . a7 `7 ~4 }  ^5 T) F. D3 g
  770. HEX_10
    8 k2 l: z, \9 O8 Q, J7 Q/ Y; w
  771. CMP #10. j! R6 `8 n3 |& c/ {
  772. BCC HEX_1: A, c/ j& U& P# Z9 c
  773. SEC
    & r' |7 }! S" \- e
  774. SBC #10
      j  x) b: a4 D: Z. \9 s" B
  775. INC DEC_T
    # R  E' @, X' h& O
  776. BNE HEX_10: P, e3 Z7 J. |3 y% \
  777. ;------------------------------8 A  B' O6 ?3 X+ T1 S$ Y% p0 m
  778. HEX_1# E) f# z# y' w+ W1 T9 M' R
  779. STA DEC_L
    2 e2 T: `% |. W$ w0 o
  780. PLA
    ( O8 t8 b3 d5 i' ?* l8 z1 Q' P
  781. TAX
    - g# Q( }6 ]$ W/ B5 }
  782. PLA
    / I0 {, F5 v; i" j# F
  783. RTS. N7 H; @, b* ^$ V/ }9 |3 O4 j0 }
  784. , L6 [2 u* b! T' I, I
  785. ;==============================
    4 E) J0 x( e+ U! C
  786. ;音乐曲目显示& O4 P/ g8 z: ]$ O# G
  787. Music_Show) X' V6 F% c, P1 x) {2 F
  788. LDA Music_Cur+ l; l5 {0 g) T; I9 h& M
  789. CLC
    : X2 W) Z: e+ l* }; d( }1 P( X* ~
  790. ADC #$017 A  a: P$ {/ {$ K0 E- q
  791. JSR HEX_To_Dec
    ) X' F1 w/ |5 D
  792. LDX PPU_Cur' z$ ]1 X: H; [( E
  793. LDA #$FD
    # I! O) ^$ y' v
  794. STA PPU_Addr,X% b2 A- w6 f+ U$ T
  795. INX
    5 N2 v) J. }: n2 ~3 H% _
  796. LDA #HIGH(Play_Index_Pos)8 t* ^, T( h- w* s9 |2 {
  797. STA PPU_Addr,X0 \6 F5 h5 j  I2 g$ ]9 o; h& ?
  798. INX
    / J2 R( a8 t6 ?
  799. LDA #LOW(Play_Index_Pos)
    ( D5 B' U* n5 I8 m4 J8 ^
  800. STA PPU_Addr,X6 E5 p& G/ d) I, H! ^% m2 \) [$ w/ g
  801. INX
    / h0 V' |  k0 E0 M! X6 i/ J
  802. ; ]) L# O! h# r! _
  803. .IF Music_Song_Total > 99
    % v% B' j+ C# j5 P0 M$ F, a
  804. LDA DEC_H; S+ c! R3 F8 M- Q/ `$ @, t8 ]
  805. ORA #$30; H2 I! Z9 F" H! V7 o! d1 |9 R
  806. STA PPU_Addr,X' M  n: f7 D( {. W# L
  807. INX
    . W8 t* G5 ~. ?% r* J9 A
  808. .ENDIF, s, J. ?7 k9 {+ d# v2 @

  809. " m; v- e% f$ P0 ~# \/ x
  810. .IF Music_Song_Total > 9
    : p" ^9 s' V( C6 k+ T0 v( p6 w% @
  811. LDA DEC_T
    6 |5 b* t5 [% B6 }* v# |
  812. ORA #$30
    , \, \, A: e7 g, r; _: s
  813. STA PPU_Addr,X, g# G% ~  n2 k7 M- h$ {7 B
  814. INX
    & V& @4 {# U$ k
  815. .ENDIF
    / U' [! G& D0 v
  816. 1 C, N, r3 r1 n3 Y7 [! S2 `
  817. LDA DEC_L' y6 e: j9 Y1 E7 G
  818. ORA #$30
    6 c, n) X& ?' E2 f4 g. u* h
  819. STA PPU_Addr,X) O9 V2 J+ m. Q& X6 }3 U5 z$ ~2 I6 J
  820. INX
    ( Z, L( G8 ]) t% a  N/ y1 |
  821. 3 _. u* D' a1 C9 B
  822. LDA #'/'7 L' i# Z2 n. a* g( g( m
  823. STA PPU_Addr,X0 Q3 T% U% x# p0 x2 f: K$ O; R
  824. INX
    ! w8 c1 D- [$ F+ l. Q4 f: A+ @
  825. Music_Show_Total! I5 Y( b: w% }0 y# r% ]: b( M
  826. LDA #Music_Song_Total1 H# }8 q  R+ `0 e2 O# I% s
  827. JSR HEX_To_Dec
    4 P0 J: P& t1 o6 s
  828. 7 m6 C) g5 t- w4 M- D1 \
  829. .IF Music_Song_Total > 99
    0 H' |5 T2 B3 y! f' V( p
  830. LDA DEC_H3 @) z/ z- Z' ?1 E4 ]9 O. |
  831. ORA #$30
      T3 ]* e3 r+ u, m/ G; m
  832. STA PPU_Addr,X( }' r0 n1 C  P3 \  |4 _0 L$ D6 q
  833. INX
    + u% E( U4 W1 ~$ Q8 I5 L
  834. .ENDIF7 ?) m2 p7 {5 k

  835. $ g7 O0 l0 L) V2 B
  836. .IF Music_Song_Total > 9! M! K# [+ J5 M4 Z9 m
  837. LDA DEC_T8 e# Y$ a9 I6 V/ F( m% K. k  f
  838. ORA #$30( m% _3 J4 g/ I; p, ~' ^
  839. STA PPU_Addr,X" \  ^% D8 m6 _. Q7 ?
  840. INX
      c! t* k/ A) F
  841. .ENDIF, v; u! s/ V* v: D% W/ q9 d
  842. 3 f) M; l" L9 q
  843. LDA DEC_L
    4 F+ q7 |* U$ P7 i6 ~
  844. ORA #$30
    / W9 @" @. e0 E
  845. STA PPU_Addr,X
    $ `7 J3 `; n' s/ K* [3 K5 C
  846. INX
    6 G& l/ ^* T6 c
  847. 3 E0 ?0 ?! ~" P* B6 S
  848. JSR PPU_End
    & {7 F+ \8 J4 {: J4 E9 U
  849. Music_Show_End
    , f6 w- N  K" _3 K% Z+ N& L
  850. RTS
    8 c, c) x( C  Q! `' ~) W. o

  851. ; Q! x: m$ l5 A0 {! U
  852. ;==============================
    ( @: E9 X0 r6 I& ~4 S7 q. C$ H
  853. Time_Show;播放时间显示' f- C( R7 {* C' J
  854. JSR PPU_Addr_Set
    ! t$ E2 E& H7 |: y, P1 \! Q) @  v
  855. LDA #HIGH(Play_Time_Pos)% O; L) w( @; x
  856. STA PPU_Addr,X* R! G8 |4 b* M6 f: y5 B6 w8 F
  857. INX, Y1 R* A, n# H6 ~' h
  858. LDA #LOW(Play_Time_Pos)* J6 h+ D# Q# ^& i/ r. }( A8 L
  859. STA PPU_Addr,X* ]  \8 C% m: r! {0 y; X1 \/ I
  860. INX
    * T: N* o: a& G2 x
  861. Time_Show_H7 Y+ n+ ?" D  e6 |- m1 k1 Y/ V
  862. LDA Time_H) s3 G! _+ ?, o) p% c+ b% H- V
  863. JSR HEX_To_Dec
    7 L4 Q# n2 t3 @4 J' @+ w# X5 Y7 r
  864. JSR Time_Digit+ M" R% U9 N8 @( S' ?% l* c! f
  865. LDA #':'
    - S+ b# o3 @2 J9 [0 }
  866. STA PPU_Addr,X3 v! B* w* f4 v/ x- Z, _* L' [# ^
  867. INX
    - A/ u1 `. i+ R0 P4 a! c$ b6 R
  868. Time_Show_M
    " ^3 Q) X; b! @
  869. LDA Time_M
    - V- w3 x( x- q1 [
  870. JSR HEX_To_Dec6 n# Y  J- q% y
  871. JSR Time_Digit" \3 d1 v$ {$ b6 a7 u
  872. LDA #':'$ C& W0 s+ a( `$ I: ~, s
  873. STA PPU_Addr,X! K# \7 T$ z4 i* e1 M$ \
  874. INX/ F) Q, g! j1 c
  875. Time_Show_S; M+ M& r+ M9 @3 k5 |9 N/ J4 G
  876. LDA Time_S
    . f. I0 T4 ^% p+ l5 R2 n
  877. JSR HEX_To_Dec
    1 Z# h7 p" x; Q
  878. JSR Time_Digit' l# u) B+ g- q+ c1 y3 x" z
  879. JSR PPU_End
    " o0 \$ x6 G; }, P1 v
  880. Time_Show_End
    0 w/ u7 K1 o5 {! L7 c
  881. RTS" M/ D* @9 u; b6 I8 b

  882. 6 x7 ^6 T0 f& J  S1 i
  883. Time_Digit
    ! a! c+ I" t9 O& @0 Y4 Z/ ^' r+ |
  884. LDA DEC_T  P: O1 ]. m6 H" m& P8 K- o
  885. ORA #$30
    ' z9 u- {9 r0 Q3 X$ t" v
  886. STA PPU_Addr,X
    9 d+ i0 H  D( g* b& }! W' M
  887. INX  h' I! i7 a! C& p$ T, n
  888. LDA DEC_L; u4 {1 S$ p% [9 W- Y+ }8 ]
  889. ORA #$300 @. U& h/ t- p/ Q' s
  890. STA PPU_Addr,X' f* u/ X2 b& q" T. M& n4 o& W
  891. INX6 F9 P" O: ^/ D
  892. RTS) n# K& K% G4 F9 P* y4 ~

  893. 1 `0 d# E9 f9 w) x: X- f
  894. ;==============================
    9 Q* _% J4 X' n* o
  895. Time_Count;计时7 Z' p& p: ]: q2 Y
  896. LDA Music_State
    : g% W/ x" a9 T; N& o
  897. ORA Time_Wait_Cnt
    6 T3 t8 n9 k% q' w( ^
  898. BNE Time_Count_End) q! w& }3 `5 l7 X
  899. INC Time_Cnt
    6 e/ T1 t. h7 \1 |
  900. LDA Time_Cnt
    3 M2 _' ^) Q) I- z
  901. CMP #60) T0 W5 K) _; L$ i0 m% t- I' e
  902. BCC Time_Count_End2 ^  ~$ t; H1 Q9 @, d  n
  903. LDA #00
    , o% {$ m8 @( F4 R
  904. STA Time_Cnt
    # y7 n4 Q% @8 H! X
  905. INC Time_S
    - Z) [0 k9 v$ h* d+ i
  906. , z0 [! w4 U! g7 V
  907. Time_S_Cnt
    - h6 D/ C1 i# b. C$ l8 P/ M% f' y3 H1 v
  908. LDA Time_S
    6 B! Q' O( |5 O( I7 @6 q3 |: r, m
  909. CMP #60( w: K$ ]! s6 D0 h* S( o/ m4 D' r+ g: x
  910. BCC Time_Count_End
    5 ~1 L1 ]4 i3 D$ P
  911. LDA #00# `) x& R- t; f" Q8 Y2 W
  912. STA Time_S
    5 H+ p- K3 M9 j1 f
  913. INC Time_M2 @0 {! G* m: T4 T+ q& I9 ^/ G" Z1 N
  914. , T( u% K+ d9 ?. |& c; j# F/ M
  915. Time_M_Cnt
    % r7 x! }; K+ N8 g" L! D/ }
  916. LDA Time_M
    2 B$ i, D3 ^( G; K& O4 G
  917. CMP #60' ~6 C' p# w! C# B1 y8 s
  918. BCC Time_Count_End7 J- |/ S) l1 N8 A, Z) x$ W0 v. u
  919. LDA #003 _* I8 a# f. j- g) X: N
  920. STA Time_M7 g1 @% s2 R5 s6 P7 O3 h' O6 O. D
  921. INC Time_H! L& n& M# i$ V. N6 `. P$ t2 K/ x& T

  922.   A% a1 A% {( p1 Z
  923. Time_H_Cnt
    1 L! @$ O$ i  O6 j
  924. LDA Time_H' T3 ]# g# d& O) j9 Z
  925. CMP #24: v; V5 b! q( t) S+ \
  926. BCC Time_Count_End
    $ K# |% n; A4 H! I. D
  927. LDA #00
    # r9 f! k( r2 u, j: A+ e4 f& A; @
  928. STA Time_H
    : a( z3 i' L2 @- \

  929. % p( H, D) t  `! h2 C" Z9 Z- V
  930. Time_Count_End4 H% Z# ?, Q8 X! ~% {* p( G$ s
  931. RTS
    . m* A/ N5 t( M% x& H8 D

  932. & N* c: s3 {2 Q8 w7 g2 `
  933. ;==============================
    " F. x! d  x" k7 k# |* d" W
  934. Time_ReSet;播放时间重置) I4 U7 X3 O. ?5 @7 \" _; y4 z. R
  935. LDA #$00* M) m5 ^$ d; K/ Q0 C( _
  936. STA Time_S
    ; {# O( X( W$ ~4 ?
  937. STA Time_M
    - _8 g- v( c* N! d% ~0 D
  938. STA Time_H
    8 S2 A- `3 v0 y- P" F) X
  939. STA Time_Cnt3 s. ]) k, z! ~. N5 t% O
  940. RTS
    1 m* u1 {4 q/ k9 A, N

  941. / l3 z- S3 y. W
  942. ;==============================
    2 D- l8 n' {; }! l5 |: ~* x
  943. Music_Bar_ReSet;音乐条重置
    % X: h% w7 a4 N; `7 r0 P5 g
  944. LDA #$00
    " L- g, V. e+ S2 ]
  945. LDX #$00  I& O" {: w. x
  946. Music_Bar_ReSet_Set
    ( \: V! u0 K% z- l/ @$ O! @' W
  947. STA Sound_Bar,X
    . k5 [2 X; G5 h: a
  948. INX
    9 @" E! m) M0 z2 F! s) b2 w8 }  M
  949. CPX #$10
    0 }) h/ [8 G8 j- N
  950. BCC Music_Bar_ReSet_Set
    ( n" U! Y- j% r' d
  951. RTS
    ) a8 S- D7 Y. x) K2 Q) B
  952. & Q4 m1 y/ \& y3 d+ C8 M
  953. ;==============================7 a' m7 Y% ]. ]$ [0 |1 C$ f
  954. PPU_Data;PPU数据写入/ ?$ p4 @* T: h
  955. STY Data_L" c. {7 U9 A% C0 l2 ?
  956. STX Data_H
    # c& O* R! t* Z, U, A; [! T, r
  957. LDY #$FF
    , h) G8 I2 v" }+ w0 i9 {3 l+ ]  u
  958. LDX PPU_Cur( J/ u3 T0 f# R
  959. DEX) L* U! e8 t) k  l
  960. PPU_Data_Beg' C8 Z# P' r  X1 @+ F( h) r3 u
  961. INX
    9 E6 `8 z4 d1 f$ W
  962. INY
    $ P4 q: k7 Q- ]$ {* N% T
  963. LDA [Data_L],Y
    9 }, V" q+ N, s$ Y
  964. STA PPU_Addr,X
    & Z& m2 L9 g6 y8 w% d( a9 n
  965. BNE PPU_Data_Beg
    " L1 U. o% C0 w+ L& H" M
  966. STX PPU_Cur; Z# w3 y! E) Z: T' v
  967. PPU_Data_End7 g1 d0 H% {" h9 p8 z6 n
  968. RTS
    # g# _7 k8 O! A2 V' L, z( x

  969. . x7 I( ]+ `  k! `& g7 S
  970. ;==============================
    + H3 s8 z' [- C% m: K6 _- ^
  971. Music_Stata_Show;播放状态显示1 }9 j8 G7 j3 y# f9 [2 |
  972. LDA Music_State% G0 I9 D& l9 x$ Q* \
  973. BEQ Music_Stata_Show_Play( Z/ w) J8 Y3 q( Z
  974. Music_Stata_Show_Stop
    8 V( w& ?- {; ]2 w2 o* I% v# _- n: J
  975. LDY #LOW(Music_State_Stop)1 z7 f# t2 W7 k6 ]8 I( I. t& N( z
  976. LDX #HIGH(Music_State_Stop)
    , G8 T0 k- j& Q' V4 n0 W' o1 H  H3 {
  977. JSR PPU_Data$ s/ p8 [$ z' Z, o9 Q1 q# p; g! V
  978. RTS2 n" c$ l' g% l# s' f
  979. Music_Stata_Show_Play( f" f( O8 S) I5 u+ b% {+ g7 U* [
  980. LDY #LOW(Music_State_Play)
    * v3 d8 n% \! A& U. F+ t- S8 \
  981. LDX #HIGH(Music_State_Play)
    & `9 D, y5 `% H3 h( w9 c. C
  982. JSR PPU_Data
    * Q  |+ i+ P7 j( Y. H- x2 ~
  983. RTS) [0 s0 |$ H& L4 N0 s. _9 v( ?
  984. , c: |' i9 Q3 r
  985. .IF SOUND_BAR_SHOW_ENABLE: T+ r  ?3 m! t9 G4 `7 x4 r; @7 @' i
  986. ;==============================
    - P4 L$ x! T9 F& r1 ]" ]
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    0 R+ k! c3 q/ B" I4 Q
  988. LDY #LOW(Sound_Bar_Text_Data)
    $ I6 ]& t( \" w! p- H& V: {
  989. LDX #HIGH(Sound_Bar_Text_Data)
    ( J6 t0 B  E  p+ y* j+ c# n
  990. JSR PPU_Data0 Z$ u9 s+ H* C" M
  991. RTS" `1 t" S6 j9 U

  992. 4 I& F9 F7 U; z5 \
  993. .ENDIF
    3 u, C4 E; b3 o; I( l$ |
  994. 9 B/ [/ ~/ y2 d' I7 _: _/ k7 k
  995. ;==============================$ C1 i) R" u0 `8 J/ @) r( R3 r% c
  996. Set_NameTable_Attributes;设置命名表属性
    7 X) Z* }: N( i/ Q2 ?3 f- ~- p
  997. LDA PPU_STATUS- S' m6 B- L5 W' v/ @5 }1 ^
  998. LDA #$23
    , ?) L  ?: g0 N# F4 O* x
  999. STA PPU_ADDRESS; H5 c+ t4 g! E
  1000. LDA #$C0
    7 o6 H# D0 w9 b) L1 ?
  1001. STA PPU_ADDRESS
    9 R2 }, ]- e; `# }5 M. C) s
  1002. LDX #$00
    : `2 i9 B! c/ G) {
  1003. Set_NameTable_Attributes_Write
    " l9 |* d/ T% X8 Z* _- m
  1004. LDA Palette_Attributes,X& K1 H0 u6 o% q" l; m
  1005. STA PPU_DATA
    5 g7 Z) E7 {2 _7 W& ~3 m
  1006. INX# `& w0 T' F; a; G% z
  1007. CPX #$409 b# W# X5 |) M7 T3 u
  1008. BCC Set_NameTable_Attributes_Write
    0 Y1 E/ L. o. N) B( i
  1009. RTS
    8 a- ~0 C: \; X; e- Q" w% h
  1010. ( C7 l( m; b) x9 D1 m. z) r" k
  1011. ;==============================. G' g' h  ?$ q) i0 p
  1012. Set_Palette_Color;设置调色板数据" y- R! r( c" u$ e
  1013. LDA PPU_STATUS
    ) m5 Q) v& y( M7 L0 {
  1014. LDA #$3F
    % X$ G" A4 M0 a5 l9 d- U1 m
  1015. STA PPU_ADDRESS5 L9 a8 ?2 Z' |
  1016. LDA #$009 R. l4 ?2 u, n/ b: s/ U7 A7 z3 \
  1017. STA PPU_ADDRESS9 F+ H  Z2 o; H* ^, a* m) o
  1018. LDX #$00
    " A$ ^- v: v" h" s9 r5 H' p
  1019. Set_Palette_Color_Write
    & I1 y5 o, I; @- N: S# B
  1020. LDA Palette_Data,X
      x  |* Z7 H9 A& K" M# w4 B) r
  1021. STA PPU_DATA9 s' z, s. T4 i! X
  1022. INX
    . ~  H. F; F+ A" L% w
  1023. CPX #$20+ T  _; k. Y3 W7 }1 z' ^1 q( B1 `3 b
  1024. BCC Set_Palette_Color_Write
    2 D4 b6 s9 v1 c' |# {
  1025. RTS. |( }7 U5 g& }, x" P+ n2 x1 D
  1026. ' t4 Q2 I# H  m5 a  y! q9 D( B
  1027. ;==============================& ~) \* z$ W% X$ a1 D* N3 i% z% w) y
  1028. Init_Palette_Addr;初始化调色板数据: V6 P% k1 ]# T* Q+ k+ m& L6 r& ]
  1029. LDX #$00( Z1 p, x7 n2 d' S  f1 t& |/ M
  1030. Init_Palette_Addr_Write; m$ R, a2 _+ ^7 e2 T
  1031. LDA Palette_Data,X# g# k: ]! T# A  m- m- U, j
  1032. STA Palette_Addr,X
    6 L1 T7 i& Z6 |  B# q$ ~
  1033. INX! g, J8 w2 N" P' ]- `2 O
  1034. CPX #$203 H' P* w5 ~; A3 ^) N
  1035. BCC Init_Palette_Addr_Write
    ) r4 r$ x. a4 {7 I% m# [1 |. r( ]
  1036. RTS4 q8 P# p- v; G# I* [5 p. O  u# {

  1037. : S( C' q/ b- _  x$ j* w* p
  1038. ;==============================6 h3 b. F. G; _; |
  1039. Update_Palette_Color;更新调色板颜色
    7 N& F9 [2 h" F+ t. P$ Z
  1040. LDA Show_Track_Name0 z+ p  W% ], R: Z; j0 P; S
  1041. BNE Update_Palette_Color_End/ ?/ Y* R5 L( j$ S2 u. M
  1042. LDA Palette_Update_Flag
    ) q7 O3 T: Z3 r' k! p& L$ N
  1043. BEQ Update_Palette_Color_End8 i$ a- [) B8 r0 w
  1044. LDA #$3F
    : H7 X* y3 J8 f* O) n8 h$ q2 @
  1045. STA PPU_ADDRESS% d3 C  N9 f- r( [
  1046. LDA #$000 E7 e/ K/ h. l5 a
  1047. STA PPU_ADDRESS+ W) F6 _. `. X2 ]+ A- ^
  1048. LDX #$00
    - B9 {* w% [! Z
  1049. Update_Palette_Color_Write' C1 S9 ?- x0 D/ X; n3 X: w: [$ [
  1050. LDA Palette_Addr,X
    5 o5 a( s* }# v1 z- i
  1051. STA PPU_DATA  o0 \9 r( q# k
  1052. INX# u' v& ]/ J- A" A+ B8 {& V; V
  1053. CPX #$20
    9 ]) w& X8 ]( ]. v
  1054. BCC Update_Palette_Color_Write) S4 Z7 y& j1 K: s' F
  1055. LDA #$009 R' D3 N! i. L3 a/ b  n8 [
  1056. STA Palette_Update_Flag8 r2 C( E+ ?& X( Q0 U" j
  1057. Update_Palette_Color_End
    " g1 ]7 e, \# g" ~+ N+ U) j0 @
  1058. RTS
    $ b3 ]! ]& H, q6 b

  1059. 4 c0 I) ]2 }0 T
  1060. ;==============================
    - P5 n( h+ q  h; [) q
  1061. Update_Palette_Data;更新调色板数据
    + g0 k  Q! @3 y* u3 D0 v
  1062. LDA Show_Track_Name% T* {0 g1 u+ {' {5 y) S5 l. M
  1063. BNE Update_Palette_Data_End6 T- Z1 X% r' }' a+ [+ S
  1064. LDA Music_State* m5 R* b+ @: d+ U. e
  1065. BNE Update_Palette_Data_End
    - A; C, Y! _( H  O
  1066. Update_Palette_Data_Check% A) g" T) @) Y$ f
  1067. LDA Palette_Wait_Cnt( ~. e2 L1 @- _2 ^( u
  1068. BPL Update_Palette_Data_Check_Over
    3 a" t+ s! ]5 X5 b4 J4 Z# p  o
  1069. LDA #Palette_Update_Interval4 S, n! x7 U4 r0 W
  1070. STA Palette_Wait_Cnt; B0 }  @6 e1 Y& D- ^  d
  1071. Update_Palette_Data_Check_Over
    1 _! J( s( x6 @6 R0 R
  1072. DEC Palette_Wait_Cnt
    ' Z4 x. ^  N7 F. c
  1073. BNE Update_Palette_Data_End
    ' y: q/ L: p# k
  1074. INC Palette_Update_Flag, Q: b" G+ _7 q% p3 ~2 T
  1075. LDA #Palette_Update_Interval
    8 H" `* w, L& q' ~2 g
  1076. STA Palette_Wait_Cnt6 n9 t' b7 W- X3 ]4 D  P
  1077. LDA Palette_Update_Addr: j+ e/ t0 E- K2 j1 P1 N
  1078. CMP #Palette_Update_Max1 b, q5 e$ Z# w7 R" ^
  1079. BNE Update_Palette_Data_Set
    . ]- j- f7 r  h
  1080. LDA #Palette_Update_Min - 17 c% u. n& y% Z- q
  1081. STA Palette_Update_Addr
    ) O0 V2 u8 m( d7 D  B
  1082. Update_Palette_Data_Set- L/ o; O3 P; M7 `$ n
  1083. INC Palette_Update_Addr
      [/ F4 d; w- G! q- l5 D7 m
  1084. Update_Palette_Data_End
    # l- j- d& U. U4 I, S: [. w" A, a5 d
  1085. RTS2 I1 N6 n" f* W
  1086. $ d# C$ J1 O! z- i6 z3 h
  1087. ;==============================+ j1 F& r5 x4 Z: h
  1088. Show_Music_Text;显示静态文本
    ( i4 Y/ n  @+ f1 e( v9 [( h
  1089. LDX #$001 p/ B+ L5 i* C2 }) F" ?
  1090. Show_Music_Text_Set
    ! H/ _8 M1 |. `5 U4 e+ X
  1091. LDA Static_Text_Data,X
    ' O% S; G3 D" f- Z
  1092. STA Data_L
    % A* L3 @9 ^" g8 V) C1 m
  1093. INX" ?' C. X( f+ U' F# z2 V: @
  1094. LDA Static_Text_Data,X
    & |; D1 Q& g- A) S+ J: U
  1095. STA Data_H3 I1 q* a; H% d% T9 D" `
  1096. INX# V* m; o! T& ?+ [( T3 B
  1097. LDY #$00
    % _6 Y) L; C; a8 M
  1098. LDA [Data_L],Y
    ( A9 B* J! k; S, C
  1099. STA Data_Cnt
    7 B# e! B7 @) }2 r" d4 o" m! H
  1100. DEX
    " w! k/ G5 X9 q; n9 x4 c
  1101. DEX; a  ~( t0 k3 s' s. W' i+ h
  1102. LDA Static_Text_Pos,X
    ( j, }1 l3 \# |/ s) Z6 b/ u
  1103. STA PPU_ADDRESS" N2 g6 e$ e8 _- X8 a' P
  1104. INX
    - z4 {8 v) @/ K
  1105. LDA #$20. }- Y3 ~, C9 F$ B% f
  1106. SEC
    7 B0 B$ P. Q1 k( j1 V0 h; u& ?( g
  1107. SBC Data_Cnt% i* w4 i( [7 o9 U4 w: b0 c
  1108. LSR A
    % }* p% u* O& V/ g/ q  H2 N8 ~
  1109. STA Data_Buf
    ( K  W' Z3 H7 c2 E9 k( T; W4 X
  1110. LDA Static_Text_Pos,X7 b5 S, c3 v) C2 V/ p8 }# o
  1111. AND #$E0
    6 _$ t8 O& v) O% o& N1 F( t9 q, w
  1112. CLC
    + j6 o0 q3 B3 Y6 ~/ b
  1113. ADC Data_Buf& D: j4 N* R2 G* g
  1114. STA PPU_ADDRESS
    4 V: a$ M4 ~8 L% D8 Q  H: }) |
  1115. INX% ^- K) a" Y, W+ T7 a
  1116. Show_Music_Text_Set_Write
    1 S# r$ o" B) o4 P+ p/ M
  1117. INY
    ! W% d( s; C3 q/ C0 p
  1118. LDA [Data_L],Y
    ' o2 l( p5 |  ?- r& P2 V5 `! M
  1119. STA PPU_DATA
    8 R7 i5 a' f! d
  1120. DEC Data_Cnt; M# ]$ O+ I8 [. \# ^5 \, O
  1121. BNE Show_Music_Text_Set_Write) P( ]. I" q- t; {9 M
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    / Y& m% n4 u+ R! u" w% j7 z
  1123. BCC Show_Music_Text_Set
    $ ~6 p) x) d" W  J+ d
  1124. RTS
    , k+ x4 ]3 V- ^

  1125. % H& }: z  S  n, ^% e9 i1 q
  1126. ;==============================" ]9 R( a, i4 N! L& K: U- x. n
  1127. .IF Track_Name_Pos;显示曲目信息$ ]6 _- O. D: {, U/ R0 A
  1128. Show_Track_Info2 D: [: ?, k, M/ r- q/ ?. Y, |
  1129. INC Show_Track_Name
    1 N- w4 C+ M( E; S0 n, }
  1130. Show_Track_Info_Clear
    ) g! W1 C- r& @& r- t8 P
  1131. LDX PPU_Cur4 ]; ?, U) {+ @6 J+ B* k6 F9 U! n8 a
  1132. LDA #Mode_Clear
    6 u9 A; ~* p6 K- P
  1133. STA PPU_Addr,X; M( K; W7 b+ c" t6 r3 c
  1134. INX' N( |6 \0 T# C2 H6 I- I  V

  1135. 9 ]" @* o6 a" H: `
  1136. LDA Music_Last
    $ u, O* |: z- \8 z) _6 i5 G9 K! Y
  1137. JSR Show_Get_Track_Name_Center_Pos
    * Z1 l4 s" z! Y( ~, P1 \) h  ^
  1138. Show_Track_Info_Write_Cur
      @1 y# u$ r5 w5 e# |9 z
  1139. LDA #Mode_CntLine
    ) W& @' g/ `* z% Z' D7 O) b
  1140. STA PPU_Addr,X
    ' L" n3 c' @& t0 e: A8 G
  1141. INX
    1 o+ K: b5 D% B! @/ A$ T4 ]8 c/ H
  1142. & _$ j8 T0 h8 X& ?% ]
  1143. LDA Music_Cur8 W9 C3 E* G+ ^' o5 F# d" L0 U+ K
  1144. JSR Show_Get_Track_Name_Center_Pos
    1 v! f9 O. h, Z' ^2 V- D+ ]- f
  1145. - f- n4 T! k* \4 F3 x; _
  1146. Show_Track_Info_Write_Cur_Data
    " d) i# Y& ~2 J
  1147. INY; i. _9 A( {! \) Q: e& [; K
  1148. LDA [Data_L],Y' a  L4 h$ L" e9 n, a8 w0 j
  1149. STA PPU_Addr,X
    * G- I$ F9 n7 b$ x$ `
  1150. INX+ L  e6 o. k8 p  y) ]0 }
  1151. DEC Data_Cnt4 P  O8 N1 {7 A
  1152. BNE Show_Track_Info_Write_Cur_Data
    / r) v1 j) L( ~% B
  1153. Show_Track_Info_End. _  _- g# Q% E, G1 i' u* ]
  1154. STX PPU_Cur
    8 y1 q- f  P! o/ m" k
  1155. RTS
    7 s$ Y7 |$ I2 o8 @) Q% ~3 H: a6 [5 O' N
  1156. / ^; R5 ^5 S% W5 q1 J' {. _! y- s9 x
  1157. ;==============================
    1 d1 n& ~7 O# }! }$ y  V; B' I
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置1 n1 N' S; `: n! \  H
  1159. ASL A; C6 r5 [) u2 q5 j. {! ]
  1160. TAY% x( h- V. J  u7 M0 l' y: e1 q  a
  1161. LDA Track_Name_Addr,Y6 p" y9 W# w! m( g* E
  1162. STA Data_L
    ' [- [9 `# q8 A9 H4 I
  1163. INY
    ; N8 h2 k" r4 A! O3 A/ W, P
  1164. LDA Track_Name_Addr,Y
    , Z9 z' i/ k+ D: \
  1165. STA Data_H; D: S! x! m6 S1 \6 I
  1166. LDY #$00# P# V. j7 L" F$ x9 Q
  1167. LDA [Data_L],Y
    - K( t4 ]) ^! }9 k6 b) v. o
  1168. STA Data_Cnt, k0 }, u8 r! n$ j% n/ n9 J
  1169. LDA #$200 ?# Y3 n4 M* n0 `9 D
  1170. SEC
    & s/ r: W- f! @/ Y7 W1 B
  1171. SBC Data_Cnt2 O- C' N8 Q) o* Z: P/ d- E
  1172. LSR A
    ! A2 J) {' p& m" ]
  1173. STA Data_Buf
    2 n/ G+ p3 n! e( X, |: Y3 m
  1174. LDA #HIGH(Track_Name_Pos)7 L, @# l- X9 [' M" t3 l- A7 G
  1175. STA PPU_Addr,X
    0 N( H2 M  n. g2 }; h' J9 ^* ~# ]: M! ?
  1176. INX$ k5 Y* l) J0 U) N; C. k
  1177. LDA #LOW(Track_Name_Pos)
    7 L$ K7 H: @) c4 n$ K9 v5 @
  1178. AND #$E09 ], y, ?+ X8 K4 X
  1179. CLC
    ' G7 s  C- ^. h  _% S
  1180. ADC Data_Buf
    1 N+ `; U3 ]3 H# v8 l  ?; }
  1181. STA PPU_Addr,X
    % o9 I& w( R, m8 ~
  1182. INX
    3 U7 ]0 `/ ]- @8 D, ^' W
  1183. LDA Data_Cnt
    % t! h) P1 O1 q
  1184. STA PPU_Addr,X; E) |6 e. O! _' a; v
  1185. INX
    ( d% q* r2 O+ G7 O% B
  1186. Show_Get_Pos_Center_End7 l  J' e1 }) l1 a. \" D7 }
  1187. RTS5 w8 N2 L" x( Q; u. v( P1 Q! O3 r
  1188. .ENDIF
    ! O! o( A( @) @' o' Z, v  m

  1189. 9 Q6 V+ G* p$ _0 k& u
  1190. ;------------------------------) e" P3 b7 ]( D8 M8 M& p  ]3 W3 m3 S
  1191. ;命名表数据
    & I. x8 ~# n" l3 _, X, g
  1192. Palette_Attributes5 b% q' x' K, L' F9 n! i
  1193. .IF SOUND_BAR_SHOW_ENABLE
    8 ?: b9 ?; @& Y6 k. w: ^3 `
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    - J  v% I) H: c+ F+ u. i
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    & m3 p! F  I$ X$ c) j2 ^: ^& c
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    , {- g: h: Q* B9 I$ u2 k. ]
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55  ~, H2 c4 Y0 u8 b. v
  1198. .ELSE
    ! M( i8 m- x. T# B* b6 k% d# ^
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    # K; A* ~) X5 e8 ?: }
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    6 i0 O* n' K8 Z0 y
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    4 P, K5 {1 k) z7 o
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ! I$ x$ ^+ U0 a  {
  1203. .ENDIF
    ( c3 G% m; G/ X9 j( W

  1204. 8 w+ U+ \2 p+ U  B4 C
  1205. ;------------------------------7 H* Y$ ~. N- b) J$ v3 D
  1206. ;调色板数据1 d7 |- I. H" @, Q
  1207. Palette_Data# l5 a4 o1 K, {' A5 E
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F, |* i3 m2 [, ^7 C5 c
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F5 s* `  `3 O" x1 y1 Q3 |1 y, u

  1210. 2 @9 l3 F0 Q9 E1 t: u% l8 S6 G
  1211. ;------------------------------: t+ {; K1 y3 f8 @1 c
  1212. Static_Text_Data
    5 n2 j4 K3 ]3 p+ ^+ K7 u
  1213. .WORD Static_Text_Title_Data
    4 `( e( m; A. H) J, z( T
  1214. .WORD Static_Text_Author_Data
    ( X3 M5 H: ^$ S% ], r" }
  1215. .WORD Static_Text_Date_Data6 u2 p' `% u. J9 D% g  E" ~' y
  1216. Static_Text_Data_End9 ^1 [/ }& n5 q+ f* P6 M. K+ Z
  1217. ' {' y/ J* v4 S* O* r( Z8 e' l
  1218. ;------------------------------
    4 I. F7 T8 l; \: U2 y' ^
  1219. Static_Text_Pos
    * C/ X: d. ]; N  ?/ E+ t
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    * U1 {4 Y; J- D* U6 [
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    5 |. ]. b0 _: c5 S7 j
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    " r2 [- ]8 M8 j7 R1 Q1 }* A2 M5 X
  1223. Static_Text_Pos_End( y+ \6 i' h- L9 V$ m4 S

  1224. 5 q3 k6 ?5 J0 B# r3 P; P; a& k1 i
  1225. ;------------------------------3 ]8 _; p5 d( q* @" |+ u. C6 W
  1226. Music_State_Stop
    - F9 d! T) f4 J. L/ ^+ Y& m
  1227. .IF SOUND_BAR_SHOW_ENABLE" j# T3 R+ T3 o+ q" Y- ~) A
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$002 v* Z: R# q$ a- C
  1229. ELSE7 w: c( D5 U, u( Y9 K
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00, K3 C& I+ E& \
  1231. .ENDIF
    1 \6 C! I2 y0 @! w
  1232. Music_State_Play5 A6 J8 v( t) l8 K. B5 v
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$003 i3 \0 a% `4 F% g* C9 g9 _( Y1 |

  1234. 2 @3 T# e% t5 ?: D+ ]9 N
  1235. ;------------------------------
    . }2 g( T; i2 y7 B
  1236. Sound_Bar_Text_Data;声音类型文本
    $ t' f  o( E( C
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos): q* J- x  Q  U& W; y
  1238. .DB "SQ1-",$FF5 I8 F( B$ P: q' H1 c9 K
  1239. .DB $FE,"SQ2-",$FF7 i$ ], ~5 }" w2 U; c
  1240. .DB $FE,"TRI-",$FF
      W3 L# {: z# V
  1241. .DB $FE,"NOI-",$FF9 o/ A7 y: ?- t- d7 M4 C4 ^
  1242. .DB $FE,"DMC-",$FF,$00& Y, }$ R# Q2 [+ Y

  1243. + C( p: r3 X' ^% N& @5 z
  1244. .IF Track_Name_Pos
    3 d8 T$ a4 x9 n/ ~8 L% ?
  1245. ;------------------------------  S+ m  q1 s  q! p
  1246. Track_Name_Addr;曲目名地址索引: m+ y1 _. ]2 S5 }8 e* H5 b9 H. ]
  1247. .WORD Trackr_01- S- w8 Y% ^, J$ i7 Y
  1248. .WORD Trackr_02/ A6 `% n) D( g7 y) M; m6 P  d8 Z% W
  1249. .WORD Trackr_03
    1 r% n* Q" b/ m* G' I' ~! [
  1250. .WORD Trackr_04& n( ]; m, R. I# z. H; h! _( f
  1251. .WORD Trackr_05+ C- Z/ X9 E; W  j3 T. o
  1252. .WORD Trackr_06
    2 Y! U  W. s0 D2 t
  1253. .WORD Trackr_07
    $ b5 Q( o* j/ v0 J9 b* M/ q
  1254. .WORD Trackr_08
    ! ?( `. p. v" l( T
  1255. .WORD Trackr_099 n$ `6 L; y$ ?& d) ~
  1256. .WORD Trackr_10
    2 G6 N% z# I6 `
  1257. .WORD Trackr_11, y8 a/ Z' n! ^6 S  b: x; W
  1258. .WORD Trackr_12& r( Z/ p8 F9 D0 C7 g; D+ I8 X8 I
  1259. .WORD Trackr_13& ~# _. l* n- b, l% f: H+ T  p% g
  1260. .WORD Trackr_14  a/ {/ m' e$ b2 ^* t9 d' f
  1261. .WORD Trackr_15/ {. n6 m6 _3 ]9 X
  1262. .WORD Trackr_16
    $ `. o) X5 [3 x. ]$ r
  1263. .WORD Trackr_170 ^9 I" |+ R6 R9 w' U6 G
  1264. .WORD Trackr_18- C" U# n& i9 P3 F, D( z
  1265. .WORD Trackr_19
    ( C9 g! @' H" ~* X
  1266. .WORD Trackr_20) z1 X: e! f# c  }
  1267. .WORD Trackr_21
    ! A, P$ |: W" L* B' L' w2 |
  1268. .WORD Trackr_228 j5 A' ?1 @7 R' v1 t+ L
  1269. .WORD Trackr_23
      H8 ]! z- D0 R* z
  1270. .WORD Trackr_24
    $ |6 q) O5 G  T2 {" f
  1271. .WORD Trackr_25# D+ x( f  C1 {0 ]
  1272. .WORD Trackr_260 T3 b# z1 I5 A. P" [6 L9 `0 b
  1273. .WORD Trackr_27
    1 Z6 g% T+ B  i4 ]3 Z
  1274. .WORD Trackr_28
    9 d6 L1 r5 S* G& b8 `4 B+ a/ j
  1275. .WORD Trackr_29; }* j: N/ F* B0 H, n
  1276. .WORD Trackr_302 p( }; y  R1 X( ^' C  m
  1277. .WORD Trackr_31  s& g  T3 q0 B
  1278. .WORD Trackr_32
    - P1 S$ `4 l! o* o7 i
  1279. .WORD Trackr_33
    + R+ D/ y0 `4 ~( f/ e7 w
  1280. .WORD Trackr_34
    5 N" g4 x+ v) v+ Y# ?
  1281. .WORD Trackr_35
    ) V, W0 D8 ~7 m# D8 C$ I& S
  1282. .WORD Trackr_361 p3 n8 O( N5 Z! S; ]8 \
  1283. .WORD Trackr_37
    - F5 u2 G0 i' S& N7 r
  1284. .WORD Trackr_38
    5 ^! {4 ?, i/ o9 N
  1285. .WORD Trackr_39
    1 u. R* b! M3 L4 B' L+ }% n/ O  O
  1286. . s! G9 h2 y+ n9 D4 z; f
  1287. ;------------------------------
    ; ~4 T9 w- ]: Q% T1 {0 e+ V( o
  1288. Trackr_Name_Data
    # O$ x; Y  i+ J4 E- ]. y0 f
  1289. Trackr_01 .DB $05,"BGM 1"
    4 \5 w/ t* _, U0 e' v( ~9 e" c
  1290. Trackr_02 .DB $05,"BGM 2"
    1 c& Q: t. P# s$ h: h# w  z
  1291. Trackr_03 .DB $05,"BGM 3"
    , j0 J6 B# Y. Y/ ~
  1292. Trackr_04 .DB $05,"BGM 4") D+ U$ ?& f- b$ f
  1293. Trackr_05 .DB $05,"BGM 5"/ u6 q+ I) V) \; [$ _
  1294. Trackr_06 .DB $05,"BGM 6"
    . \1 n1 x% |4 a8 g
  1295. Trackr_07 .DB $05,"BGM 7"' w) ~6 l4 E& f8 o; A( y+ L
  1296. Trackr_08 .DB $05,"GREAT"0 m4 V+ l% K- b* ]; L3 z$ z
  1297. Trackr_09 .DB $08,"BOSS BOM"
    5 F# o0 X1 J" g  X+ a1 r+ u0 V4 W
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    9 {( n# c' Y4 C7 Z
  1299. Trackr_11 .DB $07,"P CLEAR"1 V+ Z: v8 Z/ u& X# \" M
  1300. Trackr_12 .DB $07,"A CLEAR"" h. L. E! o& `  I' r6 q/ e* C
  1301. Trackr_13 .DB $04,"OVER"
    : l/ j4 u% h/ @9 t/ d. P
  1302. Trackr_14 .DB $06,"ENDING"* {) k* g2 T& Z* G; ~
  1303. Trackr_15 .DB $04,"SUTA"- m  M7 V( g" m5 v
  1304. Trackr_16 .DB $07,"THUNDER"0 k2 l$ d- w9 v3 c0 y- _9 E
  1305. Trackr_17 .DB $04,"SHOT"6 M- q1 j" X% J5 R
  1306. Trackr_18 .DB $05,"LASER"
    - V* A  W6 [) N
  1307. Trackr_19 .DB $06,"SPREAD"
    % n1 ?* }# b7 E0 ]; ^
  1308. Trackr_20 .DB $04,"FIRE"8 c% D4 M; o/ i0 K. a  A
  1309. Trackr_21 .DB $06,"B SHOT"
    5 ~& y5 H3 M' C9 e4 P
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ' [  z2 f) I- P, C
  1311. Trackr_23 .DB $07,"HARETSU"5 R* F5 y" h) E7 f5 m
  1312. Trackr_24 .DB $05,"T OUT"
    3 H9 x6 k7 ~3 i1 ?; f
  1313. Trackr_25 .DB $05,"Z OUT"& k; N" V7 x3 ?( I: w$ n
  1314. Trackr_26 .DB $05,"A OUT"
      R& ~' s5 V# ?' G% `5 d: K
  1315. Trackr_27 .DB $04,"ROLL"0 V% Z' a. c4 G5 t. j
  1316. Trackr_28 .DB $06,"APPEAR"5 s, \* D8 n  [
  1317. Trackr_29 .DB $05,"POWER"7 B1 o1 W1 K+ y, E
  1318. Trackr_30 .DB $07,"BOKK BK"+ {' c4 t2 Q: |6 P; p1 C' b8 O
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    ) ]8 |& T+ V; ?: \" c) z
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    : C* L* [. U( }+ d+ w6 d
  1321. Trackr_33 .DB $05,"ARUKU"
    ; Z; Q1 p3 {. o
  1322. Trackr_34 .DB $06,"JIWARE"* o6 w9 y5 v% _/ d% L
  1323. Trackr_35 .DB $05,"SILEN"
    * `; K$ }, H6 ?+ b: z) M
  1324. Trackr_36 .DB $05,"P 1UP"" K& R$ `# N7 c' \! Q
  1325. Trackr_37 .DB $05,"P OUT"
    ; k, V! `# T$ {' z4 ~' i& m" i
  1326. Trackr_38 .DB $05,"B OUT". ?( G3 c& {3 _: V5 u$ |# e
  1327. Trackr_39 .DB $05,"PAUSE"
    ; C- B1 ]1 M2 R+ R- V7 K

  1328. 1 }* y/ C* e3 F
  1329. .ENDIF! F. p5 [( V; @: s. s& P
  1330. 3 ~& p. }# B# D" v' O
  1331. ;------------------------------
    # ?# H, H: E( l9 j) d3 D
  1332. Static_Text_Title_Data;静态文本数据) D7 ?7 b# H/ Y( h# R
  1333. .DB 12
    & V' V7 A- Q! M4 i8 g2 T; \+ F& @9 K
  1334. .DB "SUPER CONTRA"
      Y; X' ]& a  M% j8 z" z7 L
  1335. Static_Text_Author_Data: i2 D; W8 ^5 e" l6 D
  1336. .DB 23
    ' B$ y! x2 u% P3 X" R
  1337. .DB "EXTRACT BY FLAMECYCLONE"  v2 g5 V& D: d) L3 D: `4 r0 C
  1338. Static_Text_Date_Data
    7 B/ E- P; {' T) {/ F
  1339. .DB 10  K% x3 i0 Q; K) o
  1340. .DB "2023.07.11"# b, h+ q9 Y: b$ l* M

  1341. 1 {* l4 V. o4 v3 T, |9 K
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    5 M1 ]0 Y/ v6 {$ w
  1343. .ORG RESET_ADDR! ?, ^8 k/ R. A! @, T% G  L% K
  1344. 4 h7 R, o7 T- Y) M% A1 t# w
  1345. 8 \, q) _1 f5 P5 f
  1346. ;==================================================
    % q. c5 @7 u  ?  S+ s. D8 g0 i
  1347. ;切到主程序bank$ ^5 E1 G: G, d
  1348. SwitchMainBank
    9 r; |& B7 y: h) Y
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK* G* f2 @4 [* S6 j7 d0 k: ^/ T
  1350. JSR SwitchBank8000' E1 U" v8 S' v
  1351. RTS6 a2 y( g/ I. U' c9 e( }. ^  Y

  1352. / S( J; G1 u8 x1 i  M% ]
  1353. ;==================================================
    ! y# F9 m+ `  z8 j9 P/ Q% }% ?# }
  1354. SwitchBank8000;切换bank到8000-9FFF# y5 G% k% ?( Q5 i, m2 d3 x' Y1 }
  1355. PHA( _0 [/ G# F: G( O* P
  1356. LDA #$06
    ; O, R0 }$ M* y! b, C' T+ b0 e6 u$ J
  1357. STA MMC3_BANK_CTRL
      `% \* ]% M2 m' S
  1358. PLA* L, T1 \$ ]9 t( ^) _7 g
  1359. STA MMC3_BANK_DATA# m% H$ b2 Q; k, o( J. V8 b! u
  1360. RTS
    ; y/ {5 E2 E; z' `

  1361. * u: |- H$ T1 X9 H/ `
  1362. ;==================================================
    $ w3 N4 H# n9 Z2 G8 F
  1363. SwitchBankA000;切换bank到A000-BFFF7 W# B# J0 c8 ?3 ]$ K8 i
  1364. PHA% ^$ Z2 \8 K% R  @: z% l! Z. E
  1365. LDA #$07
    & J4 n5 K6 ~. c  p2 s$ o4 ]5 i; @/ }
  1366. STA MMC3_BANK_CTRL
    , S. N2 B9 N$ i1 c6 H. G
  1367. PLA5 n6 g' k7 h! O2 h( ?
  1368. STA MMC3_BANK_DATA& ]! h3 R5 K/ ^" \' A0 Q/ q3 d- b
  1369. RTS
    " R' K! W- g1 c8 P

  1370. ! }. ~: W( m8 |( u. a( `+ r" v* z
  1371. ;==================================================% w8 l$ M% \" f( f
  1372. Sund_Bank_Init;音乐bamk初始化
      @, P% B8 \8 d- o( J
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK+ R  F7 g; {6 {3 k* W% C9 k% U# ~
  1374. STA Music_Bank_80005 o/ A! z5 @- ~% J! t8 @0 F
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " j$ V. B* {# i4 _' `* A% u* h. j6 H
  1376. STA Music_Bank_A0007 R* ~- \7 w) \! \5 V, [
  1377. RTS
    3 O1 ^  G1 @: n' L

  1378. , h( O. v* h( }0 f( h2 ?
  1379. ;==================================================1 Z, O3 W* `* E
  1380. Sund_Bank_Set;切换音乐bank+ n( L# j+ F8 r# p
  1381. LDA Music_Bank_8000
    4 @: l* c* m8 O) U/ u5 ^7 e' b) r
  1382. JSR SwitchBank8000- D6 f) ~- O3 o& f# D$ ]8 U, r
  1383. LDA Music_Bank_A0003 t& i6 [, |3 A- W: K, m3 [0 B+ O
  1384. JSR SwitchBankA000
    9 }" Q$ d3 S4 m
  1385. RTS
    8 V& }2 @# Q  v; r/ a7 P7 d0 X
  1386. ( ^4 {+ I& t, ^! h
  1387. ;==================================================3 ^- S4 U9 X3 C7 d0 u" |3 Z
  1388. Sound_Init;音乐初始化& x' ^3 ?( C4 V# e! k4 K
  1389. PHA3 v( [1 c! ]5 W" f$ }, ]
  1390. JSR Sund_Bank_Set9 \$ Z7 v- E3 Z# ~$ z. w& u# j
  1391. PLA$ \+ c( T/ H9 b+ {4 H
  1392. JSR Music_Init_Addr
    : _- A4 Q6 \1 W/ `6 [
  1393. JSR SwitchMainBank
    / |) c3 E) ~+ R4 f
  1394. " Q% N7 |4 c2 m5 J. J! _5 p) X! Y+ i
  1395. JSR Music_Bar_ReSet. p0 l& [% f. i2 A% c, L2 M2 D/ R
  1396. JSR Time_ReSet' v- P; L# m. L0 K8 J/ v, f$ ~/ X
  1397. LDA #$00
    4 T6 Q, w5 M+ q
  1398. STA Music_State
    7 M$ F' [/ b2 f8 ?) \# @% r
  1399. JSR Music_Stata_Show! x  G3 t$ i; P# ~2 @4 j$ a
  1400. .IF Track_Name_Pos
    4 Z' ~8 H" _2 f
  1401. JSR Show_Track_Info
    5 E. z: u  D; K! ]4 k
  1402. .ENDIF
    ' Q2 ]  r  Y* a) K9 O* y2 i& ~+ \, S0 J

  1403. , B4 G' L/ p$ x" }! M! W
  1404. RTS- y6 L8 [5 x2 o9 w

  1405. ( o! z' E- I. S. i$ G
  1406. ;==================================================: v# g9 d: ~3 x: R$ l2 B
  1407. Sound_Play;音乐播放
      R  V; t+ O1 U* [$ c" o# X( V
  1408. PHA5 @$ _* P* ]6 u1 H
  1409. JSR Sund_Bank_Set
    8 ]0 w! j6 A7 g, f  T3 n
  1410. PLA2 v" `+ v0 [" i
  1411. LDA Music_State
    . D, @. U9 S7 _
  1412. BNE Sound_Play_End
    5 K% X+ ~4 I8 t% q2 }: B
  1413. JSR Music_Play_Addr! @+ P; w  F. T0 c* l
  1414. Sound_Play_End5 g3 G* }5 i- G
  1415. JSR SwitchMainBank. i' a' |: e( R% I8 e
  1416. RTS
    ) x7 t1 y# |2 o0 N. Q& [% Q4 ?
  1417. ( @; @# k( x" Z8 K& A% _1 Z
  1418. ;==================================================
    7 C. R4 `: T; |
  1419. .IF Music_Reset_Addr9 s1 u' w" Y! M# Q6 w% s
  1420. Sound_Reset;音乐重设(如果有的话)
    - `& j8 S+ K- b! S" I
  1421. JSR Sund_Bank_Set
    % c: z) N4 M+ t
  1422. JSR Music_Reset_Addr
    3 O) ~( Y8 [$ z9 b5 q* n
  1423. JSR SwitchMainBank& l( J# i8 i" q
  1424. RTS( A5 _5 S! \7 K, v5 X
  1425. .ENDIF
    " F! p! W" \, X
  1426. : n: Z$ B0 g1 ^  [
  1427. ;==================================================
    * ~& k' n" ]* Q' [6 x7 H6 c
  1428. MainLoop;死循环' v7 X/ s7 @7 M3 i/ j6 J
  1429. JMP MainLoop% k- x$ w# s5 i( ^; @

  1430. % d4 L: M% Q7 ?$ y8 A
  1431. ;==================================================
    . K# f5 R8 @6 g* g( H" `
  1432. NmiProgram;Nmi中断处理
    4 r9 V2 T) n7 ?. a5 Y
  1433. PHA
    5 F8 j5 }( J" `2 z7 Q8 ?$ i
  1434. TXA$ |5 F; x4 E5 f' {; }5 c5 k
  1435. PHA, C$ _3 J  p: G6 a( M* k) O* O
  1436. TYA
    9 t: Z1 V3 r( ]9 ?* ^
  1437. PHA1 G2 n7 U. |  @6 T
  1438.   q  K: W0 i: A0 c3 U  `0 F- R1 a
  1439. LDA PPU_STATUS$ I" U' k# ~8 [6 @' G7 V! I
  1440. LDA #$00- D& G, r% b- ]6 X% o
  1441. STA PPU_CTRL
    ! j- y' Y& e. J* ?+ ]

  1442. , `# `5 r( L9 r# x2 q9 f* a
  1443. ;切换主程序bank
    1 g# y1 G! m% z/ y! m/ c
  1444. JSR SwitchMainBank
      Q5 p2 [3 x" _- ~! b6 ?8 W
  1445. % ?& G& ?9 i" g( R5 Q0 q% _
  1446. ;NMI处理; f; T4 a. U, ~2 g/ c  M5 T
  1447. JSR NmiProgramProcess# t7 C' T8 M: F. a5 ?6 l
  1448. ( w+ @" q, v/ d" s0 I
  1449. Nmi_Proc_End  r/ W& T5 _$ [1 j" T
  1450. PLA
    " P7 v& X/ S# n0 k# A8 i0 j
  1451. TAY+ _, e8 b0 `4 P* V
  1452. PLA
    # P0 j* f0 `5 o9 O1 F, L/ O; o3 Y
  1453. TAX
    $ W  C5 U; N% W$ {5 Q7 v
  1454. PLA7 O6 Q3 D! K8 G- H& N

  1455. 4 N: B! u9 c# o4 e6 t; j% m
  1456. RTI2 ~5 D& {- E6 f

  1457. + k+ ?3 R3 [+ g) N/ W9 W  z
  1458. ;==================================================
    2 E' ^2 B/ m, T( g( i
  1459. ResetProgram;重置中断处理
    + r- s! S8 t% P, m
  1460. SEI$ c9 Q: u7 P4 J: |+ u% {7 P2 F
  1461. CLD
    0 M9 ^8 _/ a7 K$ l" N
  1462. LDA #$00; [- ]) w0 j' f- v
  1463. STA PPU_CTRL: g2 {: a' a( p" h
  1464. STA PPU_MASK
    4 w$ l. X5 q/ s; `1 g' }- n& k
  1465. ; N1 q- \" `9 o# u% h/ X7 m
  1466. JSR SwitchMainBank6 A, N% Z5 U! J' y% I" o
  1467. JMP ProgramBegin) O8 i# r$ y' Z# Y6 q

  1468. 8 V8 J8 _' D% _' P1 q$ [
  1469. ;==================================================
    5 x" w( m, J3 {9 e# L
  1470. IrqProgram;Irq中断处理0 ]! G$ l( Z" j7 f5 c$ P
  1471. RTI
    ' A8 t, u3 \# w8 d( r; `+ Z: |! d

  1472. 0 }( M, c) w" H) F0 r9 K
  1473. .IF SOUND_BAR_SHOW_ENABLE
    0 `6 h3 c) Q3 W  g
  1474. .ORG $FF800 S, x9 f4 N$ V6 m; V) e6 h) q  e
  1475. STA $4000,X: d+ S1 w1 p# y
  1476. STA Sound_Bar + $00,X# O, T8 G9 ~  n1 |
  1477. RTS
    . D/ t  f3 @3 `: ]/ S
  1478. 5 c  k, M0 t' [1 N
  1479. .ORG $FF88
    - s1 i; j2 s: H: D
  1480. STA $4000,Y
    + T9 z! O( h: t6 U5 m' j5 d' b& t
  1481. STA Sound_Bar + $00,Y' j  y  G" y7 i+ G& Q3 F1 d
  1482. RTS
    ' \# r9 F! d# w3 m' _
  1483. " f# ?, O! ~  ^
  1484. .ORG $FF90
    . N" d7 u& z# q
  1485. STA $4004,X- a' _$ K1 c" {# ~! L
  1486. STA Sound_Bar + $04,X
    ; q) m9 E/ Z8 B: m9 W
  1487. RTS
    ! @6 M' ^: x+ I& C3 c) ]
  1488. ' n  N( |  M' S& e
  1489. .ORG $FF98, e+ q8 T, ^; t+ h7 ^0 H
  1490. STA $4004,Y6 r' i' U4 }; ]. A7 F3 q* \# h
  1491. STA Sound_Bar + $04,Y4 n$ ~% y, R0 `2 n: u3 J
  1492. RTS  O2 Z# X8 Q9 x0 T% y
  1493. ! }) ]+ y: \. w( G' _
  1494. .ORG $FFA0
    7 o) A; a% {! u/ [7 i! @
  1495. STA $4008,X& B( B4 R& U0 K' U0 A; R. M
  1496. STA Sound_Bar + $08,X/ c5 ]. z! g+ |6 [% D
  1497. RTS
    ; ^' b" [8 I5 B+ @
  1498. ( l2 @3 j. t6 E/ u, _9 \* Q; A
  1499. .ORG $FFA8
    ) @0 ~" A$ \- F4 Y7 K
  1500. STA $4008,Y3 e2 Z/ d0 s( n: i
  1501. STA Sound_Bar + $08,Y
    2 [% w& \' q, G$ S- H% m9 E( x$ V
  1502. RTS" _6 u" s; ~( Q9 F4 c1 V& U& U
  1503. 8 d& q3 q5 J/ q% p! P* O/ [
  1504. .ORG $FFB0) l1 X( A7 G: z. b* ?% t4 F
  1505. STA $400C,X/ {+ C; G5 i8 I* y5 l7 k' G* G5 N
  1506. STA Sound_Bar + $0C,X/ d: k5 r/ s9 X6 L2 N
  1507. RTS! Y9 b" x/ B; f& A

  1508. * A1 H( |7 Z: A% w
  1509. .ORG $FFB8
    : ^  {) I  I' f9 W3 O5 m
  1510. STA $400C,Y0 \3 y4 m* k( U9 ]6 v- m
  1511. STA Sound_Bar + $0C,Y
    + B9 R+ G! `3 d' Y6 M" R# c2 G; m
  1512. RTS5 W& t, X6 Y9 g4 z
  1513. # J: F) a" Z2 Q$ \
  1514. .ORG $FFC0* m$ w" W' k" C4 j
  1515. STA $4000
    ; b' b; X, n0 }# E
  1516. STA Sound_Bar + $00
    5 r! ^5 l: X- T3 r
  1517. RTS
    ' p1 T8 O7 P: A  C
  1518. 4 z) W& [3 f: F5 E& H
  1519. .ORG $FFC8
    . `4 ?, H# }6 `* ?! G  [
  1520. STA $4004
    & C7 d# ^) ?' D! Z; o
  1521. STA Sound_Bar + $04
    ) G# l9 Q5 Y! M8 f0 ~8 c; [
  1522. RTS
    + c4 i. p# d% t3 t9 i
  1523. 5 s" C  v/ g) S' v; B! r5 f
  1524. .ORG $FFD0+ D; B4 h( C6 M: q# d( d0 M3 v$ p
  1525. STA $40089 i; H$ d: u- w% N. f3 l
  1526. STA Sound_Bar + $08
    ! l5 M+ o, P3 l/ {
  1527. RTS. t/ z' Q7 `; W
  1528. ! e2 _- A: Z5 R9 f% P" K
  1529. .ORG $FFD88 g2 v4 [% N5 s- U
  1530. STA $400C
    5 ]* d6 \# I8 \0 Z# |
  1531. STA Sound_Bar + $0C
    ( g, I* O7 L6 F& N
  1532. RTS8 U0 u) G& r5 ~; {

  1533. 6 M" z' x. X9 E  ?( k% a4 h
  1534. .ENDIF4 c  N- @* s6 k0 b1 m

  1535. : A' Z- T& U* B$ p& P
  1536. .ORG $FFFA+ l/ ^3 N& U% ], \6 \
  1537. .WORD NmiProgram
    9 m* ^+ l3 C4 G
  1538. .WORD ResetProgram
      ^$ ^* b7 v  X  A. V4 n4 ?
  1539. .WORD IrqProgram
复制代码

% M% n* f) Q3 ]8 r' G9 L/ B# J& ?% o- j5 w& v- X) A7 C
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1138 天

[LV.10]以坛为家III

发表于 2023-7-13 16:43:54 | 显示全部楼层
很赞啊!
[发帖际遇]: fragranse 在网吧通宵,花了 3 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 3115 天

[LV.Master]伴坛终老

发表于 2023-8-5 12:44:16 | 显示全部楼层
必须支持
[发帖际遇]: leshui 在网吧通宵,花了 6 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 06:31 , Processed in 1.121093 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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