EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 2 s. a. v! T: J
9 K; i# k0 y9 z. b7 Y
1.魂斗罗8 u3 Q. a9 I* p( [
2.超级魂斗罗
+ C7 A, _/ b4 u2 d0 L, p3.赤影战士
( ~2 _* I/ A& L" `4.忍者龙剑传2
8 v7 e0 }2 L2 c
+ Y, M  o1 z. j
6 [; ^! ^( a% e1 v; l" Q  z. Q! d8 B( \+ s" }7 k- `: d7 B: D3 \- w
7 C. @; E7 D* e8 [- h
源码:* [( b8 Z- {$ X0 F1 k; ?. y
  1. ;[FC音乐][播放器模板]" h0 o+ {! X. q- \7 j3 u
  2. ;FlameCyclone 20230710
    , q! o# A+ @: ]5 L$ J" e

  3. % |. ^5 Z$ B6 A" \% K, D
  4. ;文件头! k8 P: s7 V8 R+ A7 t5 |% f! Z
  5. ;======================================================================
    0 t' b" d% N: J: p6 G8 W- B
  6. .INESPRG 4                                              ;16KB PRG 数量; a  G' v9 C8 c8 W- s$ f
  7. .INESCHR 0                                               ;8KB CHR 数量. |0 e" v& s! ^# V
  8. .INESMAP 4                                                   ;mapper 4$ C( I! ^" q3 h( z/ T. O6 w
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直2 A3 I3 Y/ o" w1 p

  10. 0 F1 q" n: n3 I6 z+ R& `1 G! m
  11. ;==================================================
    , _. @% B' i; m6 E& Y! e
  12. SOUND_BAR_SHOW_ENABLE       = 15 `  ^) o& z! j0 M3 ^+ r" P0 \7 b
  13. ;==================================================
    1 Q% G- z4 @+ R+ [
  14. BANK_DATA_MASK              = $07: e; k% M/ m  \" G3 l  t+ D
  15. ;==================================================/ R* }8 l" Q( Z5 M
  16. SOUND_DATA_BANK_0           = $00% C) ^+ Y( }6 d# o4 H
  17. SOUND_DATA_BANK_1           = $01
    + k2 @2 \* ~7 I9 g$ l
  18. SOUND_DATA_BANK_2           = $02% S# V  x0 t: L
  19. SOUND_DATA_BANK_C000        = $06
    + P5 V6 \' _- B
  20. ; C( H) y4 V3 {& }% a
  21. ;-------------------------------------------------5 G) F( G; Z5 @) @( s4 _
  22. CHR_DATA_BANK               = $04
    ' D% G, f% {7 g% E- @. D
  23. CHR_DATA_ADDR               = $A000+ g  O6 g9 d& D2 E5 ^) l; U
  24. ;-------------------------------------------------
    * O# n. ?7 X1 Y5 f7 c/ ]& T
  25. PROGRAM_BANK                = $05
    9 ?/ N+ t/ U7 B% ?  C, j( F. i
  26. PROGRAM_ADDR                = $8000
    5 ~8 X2 W" [  T/ V) G" m. c
  27. ;-------------------------------------------------
    8 r" Q+ Y0 Z, r; e2 m, Y9 y
  28. RESET_BANK                  = $071 Z/ m9 c8 G  L' ]
  29. RESET_ADDR                  = $FE00
    8 Y: l2 K8 H4 g0 `2 o& r
  30. ;==================================================
    4 y  m' y5 L9 l4 j4 u
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址3 S; _6 T$ O8 x: ?" o
  32. Music_Play_Addr             = $813C ;音乐播放地址
    5 O3 z* y5 |6 u* t1 a2 g6 |. j
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址' M' \, V, w9 V! R
  34. ;==================================================
    9 V" W7 n3 l  `' F$ y# @
  35. Music_Song_Total            = 039  ;全部曲目总数
    ' S+ i9 U" i& q! Q. l
  36. Music_Start_Song            = 007  ;初始播放曲目
    , x0 z1 C# C3 c% k' E+ K  P
  37. ;==================================================; }& q! V7 p8 d) ~) y2 W* I
  38. / Q0 Q& x- a9 K( m7 ]" ~
  39. ;==================================================
    2 J& }, F; H: N2 s% g* t5 M( l
  40. Title_Text_Pos      = $210D ;标题文本位置
    " @+ ?% f  `  Y) \9 B& }3 ~1 N
  41. Author_Info_Pos     = $2284 ;作者文本位置
    ! g- G8 H8 ]0 F: r, m" N2 [! x
  42. Date_Info_Pos       = $22CB ;日期文本位置
    ( j, i- i. Q0 O0 ]; s3 _) F: k
  43. ;------------------------------
    1 P& Z! S5 N* I1 W, I: w
  44. ;------------------------------
    $ J* o) p. S7 f# e* _  W+ p" [
  45. .IF SOUND_BAR_SHOW_ENABLE! F- o1 G! W& l  c
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    ; h; n% N% d* T) `  \# w
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    ' {9 h; J& O; B" w- ~
  48. Play_State_Pos      = $2233 ;播放状态位置. g1 |2 x4 j6 S* p" M
  49. .ELSE
    , ^9 z2 f) g6 }; J" D8 ?

  50. 9 h8 t& Z0 E( L, J1 M0 J
  51. .IF Music_Song_Total > 99  b' W  k, B/ S& R- d
  52. Play_Index_Pos      = $21AC ;当前曲目位置0 P5 j- q5 G6 R; N: A; u
  53. .ELSE+ ]3 i$ }! ?' D! s
  54.   M9 s. I0 T' f
  55. .IF Music_Song_Total > 9
    0 `' p- S, ~6 u. w
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    4 h. m( V& V' O+ R4 f9 f8 c# m
  57. .ELSE$ f' E  d. i) [5 U) T; v  l/ @
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    ( s! T. X8 N3 n1 D& Z: y
  59. .ENDIF2 F2 ?  Q" ~7 D1 R

  60. + J% y# m5 G7 {! N7 U; I2 Q
  61. .ENDIF. D8 y& }8 j9 x& F

  62. , R' x6 c/ E2 F

  63. , |0 Y( J  @% d
  64. Play_Time_Pos       = $21EC ;播放时间位置
    ( y. H6 G/ R& V
  65. Play_State_Pos      = $222C ;播放状态位置
    7 e7 R2 {- \$ ]
  66. .ENDIF
    : l2 o- s) Q' v  g7 r
  67. ;------------------------------9 X* W0 A8 y; A: D! v: W
  68. Track_Name_Pos      = $216B ;曲目文本位置. n% I5 f+ Q. M
  69. Sound_Track_Pos     = $21A5 ;声道文本位置1 L0 y3 c8 {9 V* J* B" u
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    9 C6 D, }3 [, V* c
  71. ;==================================================
    $ {! |& {# }1 I2 a' f& o
  72. Scroll_X = $00) e4 l( E' X  |3 k
  73. Scroll_Y = $06
    0 G( s7 i4 d! u% H
  74. ;==================================================
    9 e4 e/ v- P& S- K% Z( e: w! ~
  75. RAM_Cln_1       = $0100$ B# f  ^3 r  r1 J+ a* d4 t
  76. RAM_Cln_1_Size  = $80% y& m0 X. @3 [6 I  E5 `2 t7 |
  77. RAM_Cln_2       = $00E0
    3 A6 ]. ^, z) o3 p" C$ N
  78. RAM_Cln_2_Size  = $20( Y  l  ]# l4 R' x& h' `
  79. RAM_Cln_3       = $00E0
    7 }) w0 M, [( W6 U# S/ @
  80. RAM_Cln_3_Size  = $20- z0 V6 ?6 L3 }9 ^% J( o
  81. 5 T* Z; i& K# h/ X9 R
  82. ;==================================================
    ; `4 E2 r/ Z0 b- r3 M  [/ P0 W
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器( S8 P! [$ u7 |0 W! l: d
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    7 ?; n: `9 R: U- x" I4 U8 y( ?
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ( N- H* Q4 ?+ J. x$ U- a: ^
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1) F+ j# `" L/ P6 T, A/ c% z
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1! D' ]/ j* y- o9 [2 M. J! H& Q
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 ( n) y7 \* t  x  {  y  |. ]$ x
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    9 M9 E8 X  t1 l$ I$ H9 F0 q8 U4 D2 J
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    + Q% v- `" O* x
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    # F! S5 I* i4 B; F
  92. APU_STATUS              =   $4015   ;声音通道切换8 I/ V9 v4 c% ?( G
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通( ^# j) S" r; p8 ^
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    # j& x5 D: |& Q. k/ s' G* R
  95. ;==================================================
    - {6 h; D  w% w3 q- A! n5 |; ?9 o8 }
  96. MMC3_BANK_CTRL          =   $8000$ w2 s! H" @; `+ \3 H
  97. MMC3_BANK_DATA          =   $8001
    4 R3 u* o+ n" l1 X
  98. MMC3_MIRRORING          =   $A000
    & n9 L8 Z5 r3 |! x
  99. MMC3_PRG_RAM_PROTECT    =   $A001/ H2 @9 Q) n2 \; r% H0 x7 j
  100. MMC3_IRQ_LATCH          =   $C000! k1 N! a4 P' ]2 `/ D$ y
  101. MMC3_IRQ_RELOAD         =   $C001
    1 k* W5 Z7 V$ K0 l
  102. MMC3_IRQ_DISABLE        =   $E000
    : y9 i+ n: U- Q- p0 x3 }' l+ P
  103. MMC3_IRQ_ENABLE         =   $E001
    / X% m% m  f0 r9 K* A: w

  104. ) ?- y+ y! M: a4 x* q9 V9 U
  105. ;音乐数据块
    7 o! g7 [: R+ t: {* @0 O
  106. ' m; [2 s4 y8 v6 V2 s3 [# B8 p
  107. ;======================================================================
    : Y$ e2 d# O7 Y# K- N- @  c; H
  108. .IF SOUND_BAR_SHOW_ENABLE
    ! s/ c* ^0 Y& L% P- S
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ' T4 ~  R7 F6 I% P1 d
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    $ P2 s$ j; V: F4 [
  111. " O, u8 S* a/ Q5 s3 T( I
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK/ {8 Z/ u! D+ I2 c9 \) N8 [
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    0 I) |: E7 V' P% U$ K% `4 d
  114. 6 R: V4 ~* J4 S1 l
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK! u! Y& I3 b( O! Z6 t
  116. .INCBIN "sound_bank_bar/music_data_2.bank"5 W/ ?: y  |3 d* `- v
  117. ) i; O4 C- @5 P9 ?3 h
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK. ^* O) ^, c& x, g- r
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    # m. M( U/ \2 ~3 G7 @

  120. : `8 X8 i+ `1 q1 ^2 A& C" W5 v
  121. .ELSE
    , M0 \, W! z9 ~7 i5 K5 z) w
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK4 D6 F% z; A' F$ |9 U
  123. .INCBIN "sound_bank/music_data_0.bank"
    ( X+ o! ^3 m: O
  124. ( X  u- J+ R% A- c* Q, G
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    # r% Q4 @5 K. ^, l" f
  126. .INCBIN "sound_bank/music_data_1.bank"7 j# i# M- d% X
  127. 8 O( B9 t) E8 s5 E! [0 E( Z4 c+ ^
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    3 s6 S4 a* ~! }2 ]7 D3 V
  129. .INCBIN "sound_bank/music_data_2.bank"3 o0 T/ y' O) \
  130. : X+ E. d8 r& K2 o  g3 m- I
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK- y  J) B* T1 e$ P/ c
  132. .INCBIN "sound_bank/music_data_3.bank"
    " z# Z1 Z& ~- w8 t% t5 i
  133. .ENDIF
    ) M# y# x* f# i: }# I4 W2 X

  134. - [7 d  u' K$ |8 q+ x: }3 z
  135. ;CHR图形数据
    2 i% s/ h6 }& T7 n" a# \  S! Y
  136. ;======================================================================9 i* _; h2 G' g, H& b+ w4 c- u
  137. .BANK CHR_DATA_BANK8 O; j* y* Y! q  [5 w* ~
  138. .INCBIN "chr_bank/chr_data.chr"
    4 }& r) i/ H  A" Z
  139. - {! U/ Z" s  J& V/ r
  140. ;==================================================3 Z8 a- j; i  Q* t( p
  141. PPU_Addr        = $0300
    ) Z6 r: W$ {) T3 N# ?8 H
  142. Palette_Addr    = $03C03 F! r# o+ w( ~+ _
  143. Sound_Bar       = PPU_Addr+$E08 ]% q1 Z: \% L7 y! S4 a
  144. ;==================================================
    * m: l/ P: S5 u, {+ `. u+ b2 T  q
  145. Palette_Update_Addr     = Palette_Addr+$0D+ `1 \2 X1 b! y5 k
  146. Palette_Update_Max      = $2C
    / i5 q  M8 Y; Q3 s  C( [
  147. Palette_Update_Min      = $21% i) u! @/ Y* W/ O+ k) e- [
  148. Palette_Update_Interval = 60! n: P! u( d! F6 s- T
  149. ;==================================================/ a4 g% Q7 K" `
  150. Sound_Bar_Cnt       = PPU_Addr+$F0" N* `( t8 b6 R5 A7 u- q, A8 Z4 [$ T
  151. Screen_State        = Sound_Bar_Cnt+$01
    5 V* P$ T9 `5 m# C5 f- k8 {) ]3 _: ^
  152. PPU_Cur             = Sound_Bar_Cnt+$02. i0 e. k3 s) e7 t$ t7 X" U
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    ) H6 t1 M4 z! {2 Z* y
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ) M& L9 T; B! f# e& R
  155. ;==================================================7 m  B! n) B( \
  156. Data_L              = $70# c$ c' x3 b7 H' m, m
  157. Data_H              = Data_L + $01% W: ^7 K) h# d5 d2 i4 ^/ F
  158. Data_Cnt            = Data_L + $02
    + g0 Z" F; b, d2 _" [0 }
  159. Data_Buf            = Data_L + $03
    ; f& e! b+ |/ q6 r. f
  160. Time_Wait_Cnt       = Data_L + $04, f2 U5 l" u' S9 d% k* A: w- h3 I
  161. Palette_Wait_Cnt    = Data_L + $05
    - T$ [/ \; w' U- G2 H0 @; Q5 r
  162. Palette_Update_Flag = Data_L + $064 N- k; z+ @' j
  163. Show_Track_Name     = Data_L + $07
    4 U/ I+ K3 C7 h5 k3 S& `: l7 E
  164. ;==================================================# ^1 h0 A  q. _" r
  165. Key_Keep            = Show_Track_Name + 1
    7 _# q8 _$ |/ [% f9 k# {
  166. Key_Once            = Key_Keep+$01$ \& V+ m6 o1 o3 p7 I5 V# ?, t
  167. Key_Kemp            = Key_Keep+$02. u' `5 u' ], |) ~: L
  168. Key_Temp            = Key_Keep+$03
    : O3 i( ?* h3 H2 l
  169. Key_Getv            = Key_Keep+$04+ z1 F  G9 d. n
  170. ;==================================================
    0 A5 q2 }% }" Q
  171. Music_Cur           = Key_Getv+$01( h% x+ a: a% B2 u- s; r
  172. Music_Last          = Music_Cur+$01# T/ C, p& z8 b- x, a. _3 d. J
  173. Music_State         = Music_Cur+$02
    : |( s0 ]! L, h( ]
  174. ;==================================================& b1 y* r  `' u  g3 _
  175. HEX_Data            = Music_State+$01: X8 `% y3 [* i% B# ?
  176. DEC_H               = HEX_Data+$01
    3 u+ w: }9 R9 W* I
  177. DEC_T               = HEX_Data+$02
    6 ?5 R- |) N/ n& D2 \; V( C
  178. DEC_L               = HEX_Data+$03
    ; n' r! x( t' o) u% F1 I
  179. ;==================================================
    # p1 L2 b9 l" }* F8 y: v7 w, i
  180. Time_S              = DEC_L+$01- Y6 S/ _* N1 j8 i4 J8 F
  181. Time_M              = Time_S+$013 ^7 V8 V$ G0 G$ E! q; v+ q
  182. Time_H              = Time_S+$02
    , l* X6 Y* Z6 U, _
  183. Time_Cnt            = Time_S+$035 Y7 k" C* P- A2 N. x$ j

  184. . T) k7 `! G- |) H$ q! |7 p3 ^
  185. ;==================================================* {9 o$ I- E. @: f
  186. Music_Bank_8000 = Time_Cnt + 12 Z: m. ~; s5 T2 E6 n
  187. Music_Bank_A000 = Music_Bank_8000 + 1/ t9 i* y8 p  x9 g3 Y5 D. ]- N
  188. ;==================================================5 W. N2 d; `* I4 F( [. e. s; e

  189. $ y9 w! T  D4 F0 c
  190. ;======================================================================
    4 W6 b- r4 `4 \/ w, F" C: \# F* o
  191. .BANK PROGRAM_BANK
    - Z# }$ ^. O: h0 r' {6 U( q
  192. .ORG PROGRAM_ADDR
    ) e; o2 Z4 I& Q6 W

  193. , w8 k! L1 \! T! M0 A" ]
  194. ;==================================================
    " k& B% e/ r) f! W, K& ~& Q9 ~
  195. NmiProgramProcess;NMI中断程序处理
    / a- B& Z0 f2 a6 B
  196. ;处理PPU图像: N" Z& y) [: C7 I! y" |1 V: r
  197. JSR PPU_Proc  ]/ d- _6 B3 R& g1 U' v

  198. 9 |1 t( J  \  x+ |- h2 T
  199. ;启用NMI中断4 w3 U0 H2 y0 Y  [8 k# h
  200. LDA #$80
      ^5 F( k6 m! b* R3 D# R
  201. STA PPU_CTRL
    ; m  a+ w% ^& {0 A1 G! M
  202. 1 ]+ ^4 K7 U% {: J% H" |
  203. ;更新调色板" ~/ `2 e! a5 Y# ~
  204. JSR Update_Palette_Data
    ( |, N& ]# D- {+ e6 E' p/ W. e
  205. 6 ]" m) x7 Q$ y2 Y9 \
  206. ;显示时间(缓冲)& P1 J1 o; R4 `0 e! U9 M/ d- s, |
  207. JSR Time_Show
    6 l, c8 a) m& ]' e! Q

  208. 1 {: Y6 ^0 q, m5 m
  209. ;播放计时# j7 g9 Y) J% V
  210. JSR Time_Count2 q- ^1 m/ _4 v! [* W* M: [+ }; G: F* \, _

  211. * H" `: S) N8 H( C7 G" W
  212. ;播放声音4 N* R+ f' s- H/ u9 E: V
  213. JSR Sound_Play
    & j, M1 F1 {  T; }. f6 ?

  214. 0 S( A6 h, P( X9 I* P, Y: o7 O2 Y
  215. ;切换音乐(手柄触发)7 C( ^/ v1 o# b* {$ k( D
  216. JSR Music_Switch( k# p9 j9 i" \; |) V

  217. 9 V" X& H' f' x  B9 L5 Z! A
  218. ;音乐显示(缓冲)' C8 i( f9 ]  l( H
  219. .IF SOUND_BAR_SHOW_ENABLE
    $ d7 a8 c" \; ]' @
  220. JSR Music_Vision) c2 w6 D* z( @9 z( R( A
  221. .ENDIF/ d+ f  A. C3 y$ b

  222. ; Z, {7 q% z9 u9 x) Z
  223. LDA Time_Wait_Cnt9 k: B  O! q3 N- T. D  c. e
  224. BEQ NmiProgramProcessEnd; H2 x8 K! a' f# ^  |* r0 j
  225. DEC Time_Wait_Cnt  F/ t7 D2 X1 i7 N; h! ^) m
  226. NmiProgramProcessEnd7 r6 {* E( ^" G! ^/ x( B
  227. RTS
    , b: c1 M& c; t
  228. & w4 p, |2 h5 h4 {% Q
  229. ;==================================================
    ; R$ e/ z( v5 c6 ?- q
  230. ProgramBegin;主程序3 l7 c+ G7 o5 v: o1 O! Q2 M, H6 F
  231. LDA #$00
    & M1 d; n. r! e) Q. q' H* {
  232. STA PPU_CTRL
    % L7 K. o: }7 G# k% u/ I
  233. STA PPU_STATUS% L- r2 \# s: j7 k5 k" ?; s
  234. STA PPU_MASK
    - A  ]$ H! W3 n4 G/ c, a
  235. STA APU_STATUS
    7 x; L/ t: I. L
  236. STA PPU_SCROLL$ `, C2 C+ L8 p" f7 ^( K! k
  237. STA PPU_SCROLL6 o+ P0 e3 M: L1 f3 m) Y+ M, W
  238. LDA #$C0* i7 e3 H8 I! N' u3 }9 E4 @
  239. STA JOY2_FRAME; H, E7 Q7 w! f

  240. ; u& t- i- _- l' @& e5 X/ i7 d
  241. LDX #$FF
    ( C% [; \% r9 g' u  T* S
  242. TXS
    : s0 e# `4 m2 P: W2 S+ F2 ?
  243. LDA #$00
    " M; N4 [3 f4 I  Y, [
  244. STA PPU_CTRL! ]" e# C, A" g
  245. STA PPU_MASK
    2 ~0 O  I* G3 J
  246. STA MMC3_IRQ_DISABLE. F' h# W: z$ C6 Y# d) U5 i
  247. : M/ @- J7 {% W
  248. ;==============================
      s+ y4 R  Y- {+ j( G
  249. ;调色板清空& Z* g7 I  Q) M
  250. LDA #$3F! D& t0 i3 X. ?2 {; r
  251. STA PPU_ADDRESS( z$ w6 x) S  O$ ^$ M* F9 G+ q( w
  252. LDA #$00) W- ~9 t$ i) S* n, B9 n) W
  253. STA PPU_ADDRESS5 ?; s0 K  a" j
  254. LDA #$0F
    0 I. @- _9 G" l2 W3 Y, c
  255. Palette_Clear
    $ V7 d4 |2 x0 O7 c5 `9 M8 L
  256. STA PPU_DATA
    4 l6 ?* c0 X. e7 k/ M, e
  257. INX/ C  h: Z, F  ~
  258. CPX #$20; b9 F* I! C3 [) r/ O
  259. BCC Palette_Clear
    " @' x% N3 G; ^$ X) q$ u
  260. LDA #$00
    # ]/ y( `$ O; Z( a5 y
  261. STA APU_STATUS
    % G( _$ N! L/ m" z) F9 \5 Z
  262. ;==============================
    : K7 }! C0 z% c5 g
  263. ;初始化背景调色板- t! u6 @- C& z
  264. JSR Set_Palette_Color
    8 `! P' k2 l! _% [
  265. JSR Set_NameTable_Attributes: g1 K* {$ b0 n

  266. , D- e8 R. n  D8 q- ]
  267. ;==============================: i$ c: e+ M+ F: b/ g8 a( l+ {  j
  268. ;RAM初始化, F7 l6 a( V$ z9 q( |, R
  269. RAM_Clear_All
    # t9 M0 w& k% O+ S) ^$ Z
  270. LDX #$00
    6 m( l/ T+ [& O. _
  271. LDA #$00
    5 f9 l  M2 G; Z( h2 t- n
  272. RAM_Clear_All_Start
    8 C8 U6 g/ Z! v$ y5 z/ V) ]
  273. STA $00,X( U' Y) {, w0 y4 |7 y
  274. STA $0100,X
    . x2 ~% A9 V1 _& n- i2 f
  275. STA $0200,X
      c, D  |3 ~/ x( @) a$ M. ], I
  276. STA $0300,X) O: }9 e/ {2 z! C' u
  277. STA $0400,X
    7 u; o: _. G2 {2 k1 f- V+ j
  278. STA $0500,X% h9 f* U* D3 U( J/ v- a
  279. STA $0600,X) h1 `5 N+ p6 d! e- @+ W# r
  280. STA $0700,X# v; b4 l2 K5 u9 {+ f
  281. INX3 E# ?8 |3 V& ]% Y  L/ ~
  282. BNE RAM_Clear_All_Start) \5 \3 N# O* T5 H( b8 |; S( D

  283. 1 O+ F: [6 K/ @' P- b: G
  284. JSR VramInit) G1 x" [+ u. a
  285. JSR Init_Palette_Addr
    - w% W) k2 t. Y! L, ]
  286. + ^- L+ j9 Y% [" k- T3 y
  287. .IF Music_Reset_Addr$ o: H* B5 o$ M4 F/ v. G7 P
  288. JSR Sound_Reset3 p9 V+ @; U4 B" }7 ^, L$ b" W
  289. .Endif! f8 @& f" u( t" |0 T3 @# D% A9 t

  290. 7 e& V! k1 {& U5 B
  291. LDA #Music_Start_Song-$01" q* _$ _; g: E" o% |) I
  292. STA Music_Cur
    ( y- P  P3 R  T, _( {7 E8 R4 l/ Q
  293. ( J: m+ Q1 x0 Z7 P1 M
  294. JSR Show_Music_Text
    ( Y7 e& y* [  q9 i

  295. ) F. ]7 s0 D. A8 S. T3 E
  296. .IF SOUND_BAR_SHOW_ENABLE: Q. U# f/ p* J$ z. ?1 `2 C+ j
  297. JSR Sound_Bar_Text_Set
    $ w( @. w2 ]6 ]& j" y# J: f( M
  298. .ENDIF
    * t  s" x+ b' Z- d! N# n
  299. $ E2 p, t9 P& d' v$ P+ ~; [) D
  300. .IF Track_Name_Pos
      ^3 G5 ^# c8 S! _& R8 K1 z
  301. JSR Show_Track_Info* m' p1 i4 [) Q: i) |1 q
  302. .ENDIF4 d; ~$ M0 ~5 i' U) v* P8 k" P7 ?) T" B
  303. / \+ k" c! t: v' u6 S. `
  304. JSR PPU_Proc
    9 j/ O9 f5 @" ]; K! P$ H9 H+ Z
  305. ( L# ~" r, x" [% }
  306. LDA #$0E$ |! ~  t# y  `; ?. h! t
  307. STA Screen_State  g" J) O4 N. J' c' m! Z

  308. 5 i! b1 G6 E: W  B
  309. JSR Sund_Bank_Init
    - }7 G7 {7 x+ w: d$ c2 u/ k

  310. 7 m; c( ^' O" w/ j8 E1 e9 ~
  311. JSR Music_Show7 S2 o. H$ I) [$ H7 y2 ?: z
  312. JSR Time_Show
    0 a- |2 ?6 _5 ?1 V
  313. JSR Music_Stata_Show
    8 J- Q+ C9 \5 B$ E, n1 W# Z
  314. JSR Time_Delay
    4 X+ _. e! X  p0 _% h% Z

  315. & K/ v( N. b& @% C, F

  316. 4 }# K, a. a: _3 Z: g8 U
  317. LDA #$80
    8 E5 ^" a  K0 F3 g
  318. STA PPU_CTRL2 q. o' a0 O# O8 s8 Y$ s+ j

  319. 6 I1 n4 x7 e& x2 f' D
  320. LDA #$20, @4 B/ B7 y9 a! ~9 d
  321. STA Time_Wait_Cnt
    6 r  t( Z* c) v4 j

  322. $ P5 T3 I2 y( K1 `
  323. Wait_Time_Over2 M" [0 c/ `: u7 `
  324. LDA Time_Wait_Cnt" h' b8 E: F# W7 V2 @9 E8 Z, V
  325. BNE Wait_Time_Over- o' V3 Z' F% v7 _
  326. . l4 T0 m- V) n. y1 S8 v
  327. LDA #$1F! s' ]% @& O! H+ E' z% I" ]
  328. STA APU_STATUS
    ( u- A0 j% n8 g
  329. LDA Music_Cur$ A$ z0 }# H: X* a- j
  330. JSR Sound_Init: s- I0 t* j' o5 m

  331. 6 _  A$ U& A/ A
  332. JMP MainLoop
    2 \7 e5 n& ~2 c# h. B$ A4 m
  333. 6 _9 c5 m9 C$ B
  334. ;==============================
    4 R% b: R! X3 r6 z
  335. Time_Delay;延时等待9 k- s: V& w, v+ N  t7 Q7 T
  336. LDA PPU_STATUS
    5 }4 X: {( f' s% m/ l4 i6 K
  337. BPL Time_Delay
    ; w7 B. I5 ~7 t1 q5 N% t* C0 }7 n
  338. RTS
    6 m  d  i$ s5 q( W0 o5 O

  339. , T" [7 M, N; h$ B5 J# j9 D6 o9 o
  340. ;==============================" o& d: s8 |; D8 z' x: Q/ \" P7 K9 ?
  341. VramInit;初始化图形内存
    & L& Q! N# B- v+ W2 Q8 x8 V7 [
  342. LDA #CHR_DATA_BANK
    4 ]8 S) A9 u  ^4 K, B$ j' e! N
  343. JSR SwitchBankA0009 ]! T- h8 b0 h% d: V
  344. LDA #LOW(CHR_DATA_ADDR)
    8 v" g/ S$ J6 r
  345. STA <Data_L
    % i% t( X+ p8 I* i' u
  346. LDA #HIGH(CHR_DATA_ADDR)& \- k' V6 G6 d4 K' H# }: A) i
  347. STA <Data_H
    ! ?+ {  H8 l% b
  348. LDY #$002 O0 R- G9 x. A9 ~( n8 W
  349. LDX #$20
    $ }: d, V1 a, N) x: K; h  V2 [1 C3 u5 |
  350. LDA #$00' D4 W! U6 K- A" E' H- R
  351. STA PPU_ADDRESS
    * U  V# q# {- c" `
  352. STA PPU_ADDRESS3 b0 q9 n, o! B8 `, e1 k3 u2 D. a
  353. VramInitWrite: Y1 M3 e7 p) f/ Q6 Q
  354. LDA [Data_L],Y
    6 N' x7 w! S( j- ~7 d/ b
  355. STA PPU_DATA0 u  d8 C# C9 a+ j+ G( W4 }
  356. INY! z% o9 g1 o+ _  w
  357. BNE VramInitWrite
    ! S% Q* r$ T9 \4 A" P, X$ T
  358. INC Data_H0 y3 i5 X7 Q8 q2 m& P3 t
  359. DEX
    % P) g: G. v: ?/ u! t1 O& d
  360. BNE VramInitWrite3 I+ q$ H5 }4 I; q
  361. RTS
    5 i- H2 C1 s% k

  362. $ z: F$ U; ]* _& M. _+ G8 V
  363. ;==============================
    7 e) A% z# Q4 c- d! y9 F& L9 W
  364. RAM_Clear;RAM清除1 K1 N  v& u8 f: D
  365. LDX #$002 |7 B" E9 y! ?, }- q# \
  366. LDA #$00
    $ t4 H  k( u8 s* ^/ l
  367. RAM_Clear_1
    3 h3 W# V. D( b% f+ s: `$ V* X' J
  368. STA RAM_Cln_1,X
    2 e, W5 G1 [3 P
  369. INX
    ' w2 A; _1 S' P3 r" L; j+ u( {
  370. CPX #RAM_Cln_1_Size3 i2 o* S! j( y+ W, [
  371. BNE RAM_Clear_1
    7 ~: C& N, d) T9 N
  372. LDX #$00
    # b1 U) T# o4 Y3 {  B
  373. RAM_Clear_2
    ' ~/ N: T0 {. v5 W
  374. STA RAM_Cln_2,X
    : G$ K$ I- |; E" _  a: |& B) `1 V- t4 C
  375. INX
    7 n& j* S& t6 g7 f% M! s7 o/ i
  376. CPX #RAM_Cln_2_Size+ {% M* q& J5 ?8 v
  377. BNE RAM_Clear_2: L7 X, H4 h' W. J1 t
  378. LDX #$006 x7 b8 Q: y$ W) f
  379. RAM_Clear_3
    3 I$ I  Y- A$ ~  x: O+ N1 G3 W& \
  380. STA RAM_Cln_3,X
    ) q. v8 v: h! t$ }5 G
  381. INX% P1 b7 i" F. c3 e2 v& h- C" u5 ]/ \: h
  382. CPX #RAM_Cln_3_Size( d" B/ |6 l$ A# ^/ n& c
  383. BNE RAM_Clear_3
    ) R5 ^' z" M' I! |8 _
  384. RTS, i( g$ V. T, A( v  P! ?$ x# H

  385. ) ?3 U% i; t4 |5 c% g
  386. ;==============================
    & i* s( ^+ a4 m
  387. ;音乐切换# M: T. Z" f2 ~5 d
  388. Music_Switch- F# c3 r/ U0 \2 C  p6 \/ y& k
  389. JSR Key_Proc
    " T  ~1 t4 ?1 ]& @
  390. LDA Key_Once: u$ k6 `& ^2 N  |: S! S
  391. CMP #$109 T6 k7 x/ [* B; S2 K% M
  392. BNE Music_Start_SongStop
    9 ]1 }9 q  g& q% |
  393. JSR Music_ReSet
    ! J& f1 }1 u9 h8 [
  394.   f9 Y6 [& o( N# h; C
  395. ;音乐停止. \6 N8 G. c8 P& {9 g" M
  396. Music_Start_SongStop; F; y8 `7 B. o! V) i# E4 p* o! l
  397. LDA Key_Once
    4 K- F7 R+ O1 \: @7 L3 S5 E
  398. CMP #$20, [7 g% v: ~; J6 R  G1 Y# V" n9 f8 C
  399. BNE Music_arrow( E( y) t& Y; ~# H8 v
  400. LDA #$01; ^) e7 O: c* }0 T
  401. STA Music_State
    , O" {3 E, b. e+ r' i! N
  402. JSR Music_Bar_ReSet
    0 R0 e$ s4 W  }3 G' p& n5 i
  403. JSR Time_ReSet
    1 T6 Y- X8 o# s5 D1 |; V
  404. JSR RAM_Clear
    0 `1 o2 _+ F& C9 T. z. k
  405. JSR Sound_Clear7 e. t* ~: B# [) ]5 A
  406. JSR Music_Stata_Show
    ' d2 T- ]  b0 B
  407. Music_arrow/ ]; c6 M. M& l
  408. LDA Key_Once
    1 `- w! u7 y$ d; h
  409. AND #$CF
    5 @/ z. y: G* w
  410. BEQ Music_Switch_End0 x# a8 P. n% e+ K2 W
  411. JSR Music_Number
    # F' z: o9 p# ]3 H- h
  412. JSR Music_ReSet
    3 u1 Z% N; [+ _" d* i
  413. JSR Music_Show
    ! T) ?. E) g2 g! ^9 i
  414. Music_Switch_End* z8 y9 V+ z1 D0 o
  415. RTS$ H4 T- v$ J1 b/ W% K3 h3 _/ T

  416. 0 F9 m5 s& k7 y2 Z
  417. ;==============================* h" {9 k8 ]9 z" T8 D3 c
  418. ;音乐曲目切换) o; c1 t: n' C& g* J% G8 w
  419. Music_Number4 L+ r0 w! ]1 U, J$ t
  420. LDA Music_Cur
    ( y$ u/ d( I5 U5 a: M# S' d  J
  421. STA Music_Last
    7 l% X' Q% o4 ]# d3 l% B
  422. Music_Decrease
    7 U+ c+ N8 k$ j; s
  423. LDA Key_Once8 K; _8 E6 \8 \0 m+ n( t2 @+ h
  424. AND #$421 {8 E4 t; t7 \! W1 Y$ M! M
  425. BEQ Music_Increase4 }! S& k& y2 Y' \- u8 }( X7 `5 m2 a# c
  426. LDA Music_Cur
    & J4 Z2 B0 V& D
  427. BEQ Music_Increase
    $ d5 D- w  t7 v1 w% u
  428. DEC Music_Cur1 R. w! Q; I7 f2 K" V
  429. Music_Increase. s, Y* {# \4 m: x3 j5 {- w
  430. LDA Key_Once
    ( B1 Y7 b* _0 V! x. [1 @
  431. AND #$81: X- \( z- E* {% `
  432. BEQ Music_Decrease_10" q! W$ Y/ O0 g/ q* b
  433. LDA Music_Cur# @; d: x& f; [- x. B  [6 o' ?) L
  434. CMP #Music_Song_Total-012 l/ M0 V1 E6 c+ v, K
  435. BCS Music_Decrease_100 U9 y+ P6 _" l4 r& s" c5 p: _
  436. INC Music_Cur. i' A) t! U, ^' ~( t/ I1 p+ w9 y
  437. Music_Decrease_10- o, }( C: {! l
  438. LDA Key_Once6 l5 d* ]1 m6 k/ C% o- x
  439. CMP #$04
    ' v9 g% k0 u9 g2 s# X6 H" u* p, [
  440. BNE Music_Increase_10( Y. K1 }9 c& v' q$ _" f7 A
  441. LDA Music_Cur: {: E8 t8 v1 o: a( S4 k! n. K
  442. CMP #10
    2 P/ V/ }1 k9 c8 s- C
  443. BCC Music_Start_Song_Min7 ]- e( Y1 j) W6 w# `5 A7 w# H5 V: s
  444. LDA Music_Cur5 K7 q, A2 p5 }( v2 C9 Q
  445. SEC2 ~3 ~7 J9 O" k
  446. SBC #10
      F! W' j+ m7 r& Q$ L, f
  447. STA Music_Cur
    2 A& J" H4 }! W/ y1 P- ~
  448. LDA #$00
    3 u9 \1 I, Z& C7 w$ l/ m
  449. BEQ Music_Increase_10
    9 S3 |; U( G1 s) g, U
  450. Music_Start_Song_Min
    3 J1 X  L7 N( l- X4 n$ u
  451. LDA #$00: Q. X- d* z8 h3 m% {# h0 L
  452. STA Music_Cur
    / `% \( h( i" _5 W; i- a  b! Z
  453. Music_Increase_10! p! v6 V: ]& c8 Q; Y1 Q" V" g
  454. LDA Key_Once
    8 f! P8 ^( j4 m; G# D1 Z, r
  455. CMP #$08; u, `. h+ F' V9 A& r
  456. BNE Music_Number_End# X/ v' r4 H7 D# u" l4 N0 z
  457. LDA Music_Cur
    : d! X$ s. G. z6 G
  458. CLC
    $ @5 Z8 ?$ E& i4 m/ t- x8 [
  459. ADC #10( i3 a  _- Z( P/ J& {1 }
  460. CMP #Music_Song_Total-01
    / A% |& f' ?8 S/ b1 E+ ?
  461. BCS Music_Start_Song_Max! V; k% y* U7 _2 X6 y! k2 ?2 f
  462. STA Music_Cur3 u3 |3 t. N+ [- r
  463. LDA #00
    8 t. P3 ?' D& I7 F9 M* z! _
  464. BEQ Music_Number_End
    - _# @+ Q# l$ c# w" S9 {) B
  465. Music_Start_Song_Max7 Z! L; Z- V$ D9 C+ J3 G
  466. LDA #Music_Song_Total-01
    4 n/ {! v) w2 C5 ^" j1 q
  467. STA Music_Cur2 x! d9 B) M# x* B) U6 x/ q$ X2 s
  468. Music_Number_End, k0 x5 @' F0 A/ s2 z/ A1 H
  469. RTS
    ' d- }+ w+ ], H# d5 y8 P' Q- D

  470. : u/ r7 W) t: K
  471. ;==============================
    1 i+ D* _: U' o5 C
  472. ;音乐重设# @" {' A& Q% H  D* s4 J3 C+ U( e
  473. Music_ReSet
    # t! a# h/ y1 i7 H4 o9 c
  474. JSR RAM_Clear
    , v8 L3 ]5 M& h
  475. JSR Sound_Clear
    + ^0 a6 P" k* @+ c. J2 Y
  476. LDA #$1F7 c8 J3 J+ `+ q2 z9 [, X7 p
  477. STA APU_STATUS. m) s$ F! Q  P) ~) ?* r- O& X$ h
  478. LDA Music_Cur
      g3 I7 J* J" c1 n( Z# x3 s
  479. JSR Sound_Init0 d: N! t9 {5 G8 u+ e* d
  480. RTS
    % w) ^& ~' ~6 P0 @% X0 Q( E; c
  481. * O2 x4 U4 j6 Y5 E& G6 d& @, y
  482. ;==============================
    & E% P! w7 c) {5 P% G: x) r6 w
  483. ;音乐端口清除! E/ j5 G- V5 Z0 e
  484. Sound_Clear3 F6 B( ]/ s( S# g& b; G$ |5 p
  485. LDA #$00
    7 [, |) m6 I. E6 {5 S
  486. STA APU_STATUS
    ' O. j, `4 r8 H0 C: w  _0 ?
  487. LDX #$00
    ( B* k4 ^; r& U# L
  488. Sound_Clear_Start; i2 x# Q+ c2 b% a) K7 b" x
  489. STA $4000,X
    0 I! y  l. u( g, B
  490. INX
    8 e0 |* Q' o# H1 J
  491. CPX #$14" p0 M* s! t% `4 g) L2 ]8 f
  492. BCC Sound_Clear_Start
    5 U7 m! b" k1 A2 Y) m% Z
  493. RTS
      {+ m! r- }4 e9 E2 u! d+ q
  494. ) E) N* \1 |) e! V
  495. ;==============================
      y+ S: G; v+ A( L9 F3 Y
  496. ;按键处理" b6 ?! K9 D6 R: D! v# U
  497. Key_Proc
    ) [$ `8 P$ Q% P
  498. JSR Key_Scan
    : L9 o% K3 l1 b
  499. LDA Key_Keep/ z4 c4 @+ @) J3 I5 A5 @
  500. STA Key_Temp
    # [% ?, b/ _  K4 w: V9 z+ z) A
  501. JSR Key_Scan
    - P! Y& z& x/ ]& n" E* j  j
  502. LDA Key_Keep
    8 _" H& C' V( A/ D- ?* ]- ^
  503. CMP Key_Temp! t9 T! n# V" l- A. S
  504. BEQ Key_Get_Once8 w: @; D, W+ r  ~0 _
  505. LDA Key_Kemp
    * z+ d- X, B1 @6 s/ B$ B
  506. STA Key_Keep: _: ?; D( x8 B& b
  507. Key_Get_Once
    % q. m8 P! J3 Z  V5 P- H( [4 ~& H
  508. TAY6 c6 \1 {( I& S; W, p' _
  509. EOR Key_Kemp5 k( c, ~* _/ H/ e7 A' w+ A
  510. AND Key_Keep, D% {" C9 |1 @7 f2 p
  511. STA Key_Once
    # W( a8 H0 J0 z+ @) E  Q  D
  512. STY Key_Kemp- u. ~$ r7 V/ a: Q9 \( B1 I
  513. RTS- T6 A  k7 G, s* A' w! Y+ G' T
  514. ;------------------------------
    / r" s8 i- L: |% m. c
  515. ;按键扫描
    + x* X- ?7 n6 }* G
  516. Key_Scan& Z0 b5 E/ r! M% c0 m
  517. LDX #$01
    9 W2 l3 u' E! V! h0 B) I. i
  518. STX JOY1_FRAME% x5 s! e4 ~; l# I5 {9 o
  519. DEX  j5 y! G) _* q, S$ K) Q! V
  520. STX JOY1_FRAME1 T9 V: E  C6 ?1 ^3 _8 X
  521. LDX #$08
    ) g: f: }' R: ~( }7 E1 O
  522. Key_Value
    ' w8 W7 U" o) C( I4 t0 g
  523. LDA JOY1_FRAME! g/ e$ E, l6 A" f6 s) J
  524. STA Key_Getv3 t3 `& F" j5 I1 B" p' |/ @) Q
  525. LSR A7 ]8 O- u5 H) `9 {" l, V+ b' B" d
  526. ORA Key_Getv, Y; c9 D+ Y) d" o
  527. LSR A
    6 C* s% j* D4 \
  528. ROL Key_Keep
    ( ?  m6 f0 T' q! I. x' ^
  529. DEX
    : n9 _" g1 _! f' `& A& u4 H
  530. BNE Key_Value9 r0 }8 h" J: a9 U
  531. RTS: h& }2 Z; l3 q( f& U) p  d- b

  532. 4 p2 c- @/ Z* S: m3 D% G
  533. ;==============================# R0 L4 G* ^$ D9 L
  534. .IF SOUND_BAR_SHOW_ENABLE' `* N: x8 n' M( D' f$ G2 x
  535. ;音乐条显示2 l6 R. N9 t6 A" N- G
  536. Music_Vision
    & M& w' d' d! X0 M
  537. JSR Music_Animation- J$ A& Y* r; s/ u$ o% l+ D" i) T
  538. JSR PPU_End
    $ g! g! y; [. d, b) E
  539. RTS
    & R" |+ Y6 m. f
  540. ;------------------------------
    2 c# V, z) L# k+ g
  541. ;音乐条显示处理
    $ e+ @9 |* v& K/ z
  542. Music_Animation
    7 P8 ~- U5 `. x8 W
  543. LDX PPU_Cur# B! t' [4 J& O2 e
  544. LDA #Mode_Line! Y0 W1 i% A9 C! l1 x
  545. STA PPU_Addr,X
    4 N7 V( i0 x" L( x" g
  546. INX
    # V5 b7 f$ `+ T! k) K* p
  547. LDA #HIGH(Sound_Bar_Pos)
    3 q" ~1 {2 {9 a( ?" A/ U9 F5 Q
  548. STA PPU_Addr,X
    2 p# X& |- T5 J' ~- n+ g
  549. INX
      l! v) N2 F6 ]+ ]' X
  550. LDA #LOW(Sound_Bar_Pos)" Q2 f7 h7 o- \6 z6 N# p. g8 G; ~
  551. STA PPU_Addr,X
    6 G: l% O9 L6 w. B4 ]5 B5 ]; k
  552. INX
    + `2 p: [6 y$ ]5 _/ W3 u" ^
  553. LDA Sound_Bar
    * y) s* K2 j. b) W
  554. JSR Volume_Convert
    * ]0 w3 i+ Q! K4 X( D9 l8 A" M* d1 [
  555. JSR PPU_Return* o: j- o0 _8 `( C$ _% V: S
  556. LDA Sound_Bar+$4, m7 `4 I4 y' i. Z* x7 M8 M
  557. JSR Volume_Convert
    " s4 P( f4 A- h- D. u5 z
  558. JSR PPU_Return
    2 {) _: f3 G% J# J
  559. LDA Sound_Bar+$8
    0 D' T' Z- J8 W  \7 `. q( N! C1 c! \3 u: S
  560. JSR Volume_Convert_Ex+ l- g8 w+ e- O% V/ Q6 J* G
  561. JSR PPU_Return5 O0 O2 p7 d1 n; P8 t: W
  562. LDA Sound_Bar+$C
    : G& N9 B* ]8 P; B9 P5 x7 p
  563. JSR Volume_Convert
    7 S( k& b) }2 [7 F% c1 ^
  564. JSR PPU_Return2 b3 ?% o% v* a) v
  565. LDY #$10- f9 F! u% i' b& p8 x/ l4 U# g  l
  566. LDA APU_STATUS
    # E, {, d5 O! f' A. [9 D
  567. AND #$10; v1 {' q+ n0 Z- B! I: f3 g6 f$ h
  568. BNE Volume_Count7 G4 p+ [1 R, a; ~
  569. LDY #$00: w, e7 o# a) T
  570. BEQ Volume_Count
    / q" t3 v( h1 y
  571. ;------------------------------
    2 J; s/ m% o. [) J% u* ~
  572. ;音乐条处理
    ; P8 m/ c0 ~. p. N
  573. Volume_Convert_Ex
    6 r% O% J7 w" S8 u+ J! z" C
  574. AND #$1F1 p0 P, I+ o& p- x  x
  575. TAY
    ) |0 w! g6 E5 [: x" _. ]
  576. BNE Volume_Count2 ?' y' o5 L4 D0 o2 P: X
  577. Volume_Convert
    4 Q; q7 y7 Q. k
  578. AND #$0F
      ?3 g3 O  \5 p2 U) ]1 M
  579. TAY" C  m' F! r7 M) K6 D
  580. Volume_Count
    9 f7 C# r& r$ X! }6 c
  581. LDA #$087 @7 V" Q; o* E; u- H4 F
  582. STA Sound_Bar_Cnt
    3 I$ e) C4 q* h6 G$ |# }
  583. Volume_FILL: g% y9 c7 F0 O
  584. DEY, P' i+ b3 e3 w: }% Y
  585. BEQ Volume_Half4 ~$ z/ ]  w' m9 G7 Q% m
  586. BMI Volume_Empty
    5 n" _# s! E' E+ {1 F% @
  587. DEY
    8 N2 p, |7 t, s
  588. Volume_Full
    & p. j; E* Y( J2 B
  589. LDA #$16
    2 u8 p8 @8 D/ r) z
  590. BNE Volume_PPU3 M& R2 @0 \- N7 X
  591. Volume_Half
    5 c. b2 T3 Q" t0 }9 x, m( ]: N. C
  592. LDA #$15
    ' p% L  M9 m7 H! X6 i' g
  593. BNE Volume_PPU& U6 |+ s; y. K! _% X0 h* E
  594. Volume_Empty: Z6 u/ s" Z! @4 s  T8 y( j( u
  595. LDA #$14' r/ M; C& x) t/ g% X6 u
  596. Volume_PPU
    0 a) S7 {; F  ]
  597. STA PPU_Addr,X- K" t( f9 U1 v% R7 G& j0 Q( j4 q' U( y
  598. INX' Q5 J5 U' z' w4 y6 ~5 E
  599. DEC Sound_Bar_Cnt
    . r8 ]) h, L! ~  {0 q1 J
  600. BNE Volume_FILL
    . `4 `9 U: E/ ?: S4 u
  601. RTS. K& \3 `1 e, G, g& N0 z1 @% O
  602. " E; U) `/ l7 ?& z. `
  603. .ENDIF
    ' Y5 \! C; h8 Y3 V
  604. # |/ a1 k% X: B/ Y
  605. ;==============================
    5 ^, P3 r# T% x+ y
  606. PPU_Addr_Set;PPU行开始
    & ]0 w. p1 r9 \' i7 A
  607. LDX PPU_Cur/ @3 @6 x8 c$ w2 o1 v' J! J4 w9 q
  608. LDA #Mode_Line
    ' H# W2 z, e5 Q
  609. STA PPU_Addr,X
    " S0 Q# E) J; K6 g1 ~& F* b' T8 e
  610. INX1 `* N4 ]: N5 _2 J& i- Q
  611. RTS3 U) @; N7 ?# R7 O! W

  612. ' ]" p- H+ E; q2 c+ H; Z9 f
  613. PPU_Return;PPU转行1 @; q% R. p" [. X& c3 w6 g4 y
  614. LDA #Flag_Over# N* {6 _  c. `. G3 ?+ A$ Q
  615. STA PPU_Addr,X& Q* q5 }5 F4 ^" n
  616. INX2 t$ D+ c/ \; w; a& \% `9 g
  617. LDA #Mode_Return5 H# i. L: E6 B! F
  618. STA PPU_Addr,X) W0 |- |, S7 N
  619. INX
    # Y' O3 A: f! I- g( I4 f5 R; A
  620. RTS
    / @- L2 ~0 {7 I5 C) T7 z
  621. % F7 ^# z; r& C% u& c
  622. ;------------------------------
    ) ?! q2 [6 o  [+ d2 h
  623. PPU_End;PPU结束
    8 s) e" b7 y' `2 x% C* F
  624. LDA #Flag_Over4 Y4 a# x& v8 C' B5 s1 ?
  625. STA PPU_Addr,X& k4 w! l% `6 g0 V, z% n1 u
  626. INX
    ) W: S6 U& N) K6 [
  627. STX PPU_Cur* D# @$ {; ~- w5 t5 y& G# a2 T
  628. RTS
    + W( m! ^* t' y
  629. ;==============================- i* @. r9 l. Y9 X
  630. Mode_Line     = $FD    ;新起行模式1 J; y/ s6 H9 B, x- s
  631. Mode_Return   = $FE    ;转下行模式
    7 v5 r& F# F$ y
  632. Mode_Clear    = $FC    ;行清除9 `. t' f, N6 Q6 E# ~, p
  633. Mode_CntLine  = $FB    ;行计数写入3 X, m, e9 T. P! |+ P3 w; O
  634. Flag_Over     = $FF    ;行结束标志' e7 r/ n! ], m  X
  635. / S' H4 K5 z2 q- X. v1 w$ A# @
  636. ;------------------------------
    . ^0 L0 l: s* @" I9 U
  637. ;PPU处理
    # Q9 T* V8 H& K# c
  638. PPU_Proc8 O. Z  Q% H3 t) x0 e0 \3 k
  639. LDX PPU_Cur
    # A9 |  r  {( G. o$ n
  640. LDA #$00; G- C, u3 ?- _! ]' H
  641. STA PPU_Cur
    ' X' p" P# I# j3 i
  642. STA PPU_Addr,X6 X, ]& o! b# X& _) V4 ~$ q& W
  643. LDA PPU_Addr7 k4 _, o* a7 V: q
  644. BNE PPU_Proc_Beg, y" V! }+ E# O
  645. PPU_Proc_Ret  ^5 N. _& c6 |2 n
  646. RTS
    3 P$ l4 m* t$ Y' L. S
  647. ;------------------------------0 b( v9 c' O* H, F( ]4 t8 @" v; a
  648. PPU_Proc_Beg  ;处理开始) s7 Q/ K6 x8 _" z4 d5 _
  649. LDX #$00) l& r" T9 _/ @% Y. f& N+ S" l
  650. STX PPU_MASK
    8 R. z0 x% j8 b1 R7 w
  651. ;------------------------------
    + W3 A; Q" A9 w+ l$ \/ @' c6 n
  652. PPU_Mode_Select  ;模式选择
    # C. {, Z# K  a
  653. LDA PPU_Addr,X0 q# d/ E8 X+ A7 L: ~: O# S" o
  654. CMP #Mode_Line
    % e4 G3 `; @$ @) C& e% ^/ O
  655. BEQ PPU_Mode_Newline9 R8 j5 Q6 k6 R: y, ]
  656. CMP #Mode_Return
    ! V7 w1 ~0 ^2 R, R
  657. BEQ PPU_Mode_Return
    0 L$ A3 [+ p1 {$ N: }8 B
  658. CMP #Mode_Clear' w4 y/ g8 I0 K6 C, U
  659. BEQ PPU_Proc_Clear0 M* w3 T/ A% K4 ~9 U
  660. CMP #Mode_CntLine
    % Z! x6 O# s3 H: X5 l) d
  661. BEQ PPU_Proc_Cnt_Line
    8 F* R7 h( m0 n; {- z
  662. RTS: x: ]) Y* B  ~
  663. ;------------------------------; P) q$ A% J7 C0 a% v' y7 S( Z7 p
  664. PPU_Mode_Return  ;转下行模式" _% E* }9 `3 a( j; f
  665. LDA PPU_Addr_L
    $ Y  C; Y; y5 A9 e$ e+ y
  666. CLC
    1 n; n  ~) r3 s0 N: o
  667. ADC #$20
    8 J! l* J* f2 R. q# o
  668. STA PPU_Addr_L$ S* q3 S* d5 h' j; X
  669. BCC PPU_Return_End) R3 P# u8 v0 O- x/ v5 t
  670. INC PPU_Addr_H
    ; @/ V- J6 ^! J. A! M
  671. PPU_Return_End, @5 v% ~. y: h' g% x1 I
  672. JMP PPU_Set_Increaser+ ~* s# m% |! e/ v! ~) C: m
  673. ;------------------------------
    ! D$ T  |, J  X& K! C0 M+ g
  674. PPU_Mode_Newline  ;新起行模式1 y/ A" R. H; U1 l9 W8 n: k$ I
  675. INX
    4 t6 s) v4 P% W' r# K8 d
  676. LDA PPU_Addr,X7 ?5 D( q0 H2 p1 Y% E: u
  677. STA PPU_Addr_H$ `2 x- q# L+ T2 J1 y
  678. INX) e4 c: ~$ Z2 `2 c+ a. N* W, v
  679. LDA PPU_Addr,X9 N0 }2 D/ I0 W$ o3 s7 q0 ^$ F
  680. STA PPU_Addr_L- b6 F* X4 T, n) w5 A' y& u& R! ^& x
  681. ;------------------------------" X  k* Q$ r2 ?" z" Z' B- A
  682. PPU_Set_Increaser   ;设置写入地址
    - M" J' s8 i2 d# D: B6 s9 V
  683. LDA PPU_Addr_H% c, _3 z4 o5 s9 T% |3 B
  684. STA PPU_ADDRESS
    * h. f: J& Z8 N4 V$ p8 q
  685. LDA PPU_Addr_L
    3 t4 d9 g# T; {% g) k2 x
  686. STA PPU_ADDRESS# j7 u6 m! [& J6 n
  687. ;------------------------------
    * F; g5 u, ^  M/ e( X; I' y' p; t+ [
  688. PPU_Write   ;写入数据
    ! t: E, S9 E9 G6 X9 e' \0 P
  689. INX, C2 N- v! y: A+ A( z- y
  690. LDA PPU_Addr,X
    : ?4 ~) [1 X3 f, Z$ H* x& P7 t
  691. CMP #Flag_Over8 y, X- K( ^8 q, s  h
  692. BEQ PPU_Proc_End- q) N3 D4 h" ~) X9 C, D; t( w
  693. STA PPU_DATA
    $ A1 i+ J& ?" L: e
  694. JMP PPU_Write& z& T, f; o; z1 h; A
  695. ;------------------------------1 Q9 w* \9 W0 N; f' @& a6 s9 {
  696. PPU_Proc_End  ;单行写入结束
    ( N; g  W5 q! C5 _
  697. INX
    $ r: a) Q. K; Y- W0 k, v1 i2 j
  698. LDA PPU_Addr,X
    ; M, B2 r; [2 i' v6 P1 _
  699. BNE PPU_Mode_Select" M2 m; s3 I3 R! v+ X# T
  700. STA PPU_Addr
    # Z4 T" p2 Z2 ?
  701. JSR Update_Palette_Color5 F) g% @& {$ j2 |
  702. LDA #$00
      O3 c' u5 E, P6 S
  703. STA PPU_ADDRESS: z" F, d! u+ |% O! }# u3 Y& q: E
  704. STA PPU_ADDRESS0 k' G+ x$ W6 K% a% r1 U
  705. STA Show_Track_Name
    ' H5 ~+ X8 i! C# \0 q  F! T
  706. LDA #Scroll_X) x" d6 h0 `: f/ M
  707. STA PPU_SCROLL! W9 S; I& [& G4 P5 j% j9 l9 j
  708. LDA #Scroll_Y
    2 Q; W: b- w$ y. O. X
  709. STA PPU_SCROLL
    8 y9 [4 X3 k" `) r  u" e& D
  710. LDA Screen_State
    3 O/ Z" n/ e$ K4 K9 F0 H) @4 U
  711. STA PPU_MASK
    * ?1 L/ M" G! j+ }7 Y; A2 f- Q# G
  712. RTS. j5 C1 d5 g: M

  713. 6 W0 [- D3 W; b/ ?- M
  714. PPU_Proc_Clear
    ' Q1 [. R' }: Z. E, e! l
  715. INX
    ! V7 G$ N' O4 L
  716. LDA PPU_Addr,X4 Y. f2 l, r( i) G9 I; i& w. ?) h
  717. STA PPU_ADDRESS
    ) E  l# C0 P* P% u9 g9 m
  718. INX
    9 L* f' p- \0 b* C1 _- M: T
  719. LDA PPU_Addr,X# e, a. Z, b- }0 N; e
  720. STA PPU_ADDRESS
    3 x. ~1 _+ u' n8 @# @( Y
  721. INX2 A1 e& P3 d, T: O3 z5 }' M' E
  722. LDY PPU_Addr,X
    0 j5 A) }! s; S  t  Q+ k/ _
  723. LDA #$00' o& h& n* p) w- K! I
  724. PPU_Proc_Clear_Write
    & \& ]: b" n" X/ y/ x
  725. STA PPU_DATA
    * o6 ?6 H# n8 y6 L4 J+ a
  726. DEY( D3 a3 B; m# u" d
  727. BNE PPU_Proc_Clear_Write
    ) N1 f1 C) W2 m
  728. JMP PPU_Proc_End
    3 v) C4 P9 U* D( s% `# E2 y) L# ^
  729. ( |- ^7 M$ P7 _/ T5 v* w
  730. PPU_Proc_Cnt_Line
    1 r2 f; E0 n+ d$ ~' _) z0 i( M" v* S) |
  731. INX- f% c  V, Y5 a
  732. LDA PPU_Addr,X
    0 \; _+ G' @. e/ b
  733. STA PPU_ADDRESS& [3 x5 T# l; o! r( O1 X
  734. INX
    . R# F- G" Y+ h% A, E; V1 m3 B' _
  735. LDA PPU_Addr,X
    ) n) |" C0 t6 ]2 \
  736. STA PPU_ADDRESS( P$ i) u' X' q
  737. INX; B* T$ R: ^2 H- J/ q! M
  738. LDY PPU_Addr,X
    % x# B% _( }: l+ V  u, }! Q2 _: z- d
  739. PPU_Proc_Cnt_Line_Write1 k; M; O" v4 j2 Y0 `7 _
  740. INX
    , g. K) b, G! q$ K7 W
  741. LDA PPU_Addr,X
    0 {( J9 {& W3 L3 H/ ?
  742. STA PPU_DATA
    # x) K3 v) A1 Y4 {- w
  743. DEY' x* @; I& |+ ]
  744. BNE PPU_Proc_Cnt_Line_Write
    2 y7 _+ B% W% T5 @
  745. JMP PPU_Proc_End2 d* P0 O, B4 ?! W/ O
  746. 7 J6 T: B; D0 O8 y, c
  747. ;==============================
    9 ]6 u! J9 h2 N7 C' T9 h- `% z
  748. HEX_To_Dec;十六进制转十进制" e) S$ {; }* u3 }( T
  749. STA HEX_Data
      P. K) n- E& a$ B9 E
  750. PHA
    7 S5 {, n! z; y3 h" I5 i
  751. TXA! r; v' ?, V+ K1 ~0 o
  752. PHA
      o/ ?4 e4 E6 b
  753. LDX #$00
    $ K! _2 @: u8 ?. y2 U
  754. LDA #$00
    ; X  J8 |$ n; Z. X; k1 m
  755. HEX_Cln
    % l% ~2 r0 q1 O. P: M, p
  756. STA DEC_H,X
    3 z* E$ e0 S/ p. _0 Z4 `3 p
  757. INX
    5 u2 I1 t: M/ e  U2 ?
  758. CPX #$03
    ) T5 C% N! t0 _) Y3 k8 a
  759. BCC HEX_Cln  a# Z4 ?; p, {
  760. LDA HEX_Data
    ' h" U. T9 s6 Y9 K
  761. ;------------------------------
      r- z8 M+ U/ B& I9 S
  762. HEX_100& i& A' {4 V' N4 A* p
  763. CMP #100
    ! C0 b* g, P( D& a3 J
  764. BCC HEX_109 j8 |0 h  H2 _1 h- G# V
  765. SEC0 s/ n2 T3 M8 u3 j
  766. SBC #100
    " Q$ R) V' V$ q+ @# u  J
  767. INC DEC_H9 O0 }' D' [8 Q8 \; z2 n
  768. BNE HEX_100) v. {' _8 a8 `* X- v) W$ \8 T! N4 D
  769. ;------------------------------
    7 U# v4 [. `# J; i* Y$ ]& r/ x: ]
  770. HEX_10
    7 K0 V! Q6 H5 K% R5 l1 Z9 h0 `( Q$ k
  771. CMP #10
    2 e4 h1 U. G; L% G
  772. BCC HEX_12 {6 u  [$ h% W5 E& C
  773. SEC
    - n  b$ J& Q6 B. N" @0 d! D
  774. SBC #10& O+ g- q6 Q4 S
  775. INC DEC_T, W, W1 v0 e8 Y/ [: Q  P
  776. BNE HEX_107 `9 n( X7 k" {6 j/ g* w
  777. ;------------------------------
    4 B* B  N3 }  n" T. b4 x
  778. HEX_1
    3 W: M! n$ i: V- R& f7 O, O9 }
  779. STA DEC_L( k5 b1 _$ G$ e) S3 ?7 \" E% T
  780. PLA
    " \6 Z5 @6 M" |: l
  781. TAX
    ( K! b# A$ [1 Q( _) }) e
  782. PLA$ S& P- _% k! F  h- f! H
  783. RTS
    % S) o( \2 |5 K# C  L2 a; V- _

  784. ' Z3 K0 M" [/ e( a
  785. ;==============================& l9 v) ]; k# ^( C
  786. ;音乐曲目显示# G; a0 H2 W' O; }9 y& H
  787. Music_Show" T- F5 `3 P* z$ T7 x
  788. LDA Music_Cur. _( k6 X0 @& v6 z  a6 J
  789. CLC
    / I0 ]0 r2 w! U' s
  790. ADC #$01# T, x/ s  {6 X+ t) v' o2 f$ L$ w9 ~
  791. JSR HEX_To_Dec6 G/ x  g0 ]+ W  x; {: F
  792. LDX PPU_Cur9 n9 r% I" R7 l) B7 W0 h5 v
  793. LDA #$FD' |: _( L. z* x# N7 U7 w, D9 I! ]
  794. STA PPU_Addr,X
    4 t; `9 G, ~# L; S5 J
  795. INX- B' o( L4 K/ Q9 m4 c' I( a6 r
  796. LDA #HIGH(Play_Index_Pos)
    0 r% i  O5 v" a* {% {3 V) u2 R8 e, W- g" H
  797. STA PPU_Addr,X0 ^" S* s8 X$ Q$ s! G9 ]
  798. INX
    9 {/ K# [  ^7 Z. |. ?5 y5 Z
  799. LDA #LOW(Play_Index_Pos)
    ; k4 I$ W) ~7 p; U) w
  800. STA PPU_Addr,X
    3 u( U7 ~2 }6 [) i6 u+ {- N
  801. INX
    ) m5 W& M) D& w6 M- I0 ^8 Y& a
  802. ' R+ u7 c9 I4 {7 d" x. {, e0 q
  803. .IF Music_Song_Total > 99
    * g$ ?- {, f! D5 r$ D9 f5 @' H
  804. LDA DEC_H
    & A# @$ g  N% n* M# \. i
  805. ORA #$30
    : A1 I+ I& b9 N
  806. STA PPU_Addr,X
    . A$ s. s2 y  p, H
  807. INX
    + U; t$ j3 ^1 e9 T0 v2 y. y- W
  808. .ENDIF! f$ X; W  X3 d, @. {+ a

  809. : E5 v0 n+ [" H5 `- _% @
  810. .IF Music_Song_Total > 9
    1 C  G6 H5 U* K( b! b* a" Q  [
  811. LDA DEC_T
    % D. a7 H( {/ J' L4 z3 }, [/ ^
  812. ORA #$30  I+ _0 x9 C# ^
  813. STA PPU_Addr,X
    3 C  L7 J" i9 N) y
  814. INX
    " r2 C$ ~0 s3 Y& l# x4 w
  815. .ENDIF" Y) I" `9 [3 V7 T  D

  816. 9 Q- K+ E' s. t, r: n9 W  U* U& ~
  817. LDA DEC_L- a+ s7 _" f0 b4 C2 g$ Y, l
  818. ORA #$30, {0 Q2 b( B& j
  819. STA PPU_Addr,X
    7 E+ ]( U" Q( Q8 p& ]: h3 q. f
  820. INX
    6 [, n( k) }, n! C/ T* o

  821. 7 g( p, `$ }1 C; \* Z% Z6 D0 Q4 U) T
  822. LDA #'/'
    7 m9 b- X7 A" w4 ]! a
  823. STA PPU_Addr,X
    / s' ^5 P5 s3 k/ U* E. X9 f! X  f0 ?
  824. INX
    1 k% n, T. J. p3 G( z
  825. Music_Show_Total, A8 ^& u+ L5 q  o3 y3 d
  826. LDA #Music_Song_Total
    $ Q3 m1 W  V: j7 C7 _
  827. JSR HEX_To_Dec! w# W; w/ }1 d/ Q6 f8 n  ^
  828. : Q% O( l. N' E( }6 }% y
  829. .IF Music_Song_Total > 99- v" E# j6 k# }9 B3 n: o
  830. LDA DEC_H+ S2 A. P5 d) I5 z
  831. ORA #$30
    3 p) Q6 l3 A2 w. M
  832. STA PPU_Addr,X% x/ A6 i) O0 F9 Z) ^
  833. INX
    : e9 a/ O3 D, ]1 B7 g+ r# ]) V
  834. .ENDIF
    ; g$ V- h3 X# F4 P0 ~) q
  835. 5 q( u, H! P% R# W$ R5 C
  836. .IF Music_Song_Total > 9
    ( ]- d; I  |# p* {6 T6 o
  837. LDA DEC_T
    # P: t* ~# }: q3 }, e7 x' @1 o
  838. ORA #$30
    , N. L, h! {) \, N+ ?; Y- r- i4 K
  839. STA PPU_Addr,X
    * E% i( k  q0 M0 a$ r
  840. INX0 [5 d1 [2 k% u* t) \( c
  841. .ENDIF9 z: R% f$ w) V# f( C
  842. $ z+ r$ u0 \8 E' q: s  {
  843. LDA DEC_L) A4 v- S" l. k* l% L8 g: f
  844. ORA #$30: z2 I3 w& y5 k6 P
  845. STA PPU_Addr,X
    + m0 m" n7 l$ g' P# k4 M
  846. INX; @4 ]9 A3 q- C; ?* U2 ^1 a' U: P
  847. . R: K/ m9 @+ G5 r7 _9 z
  848. JSR PPU_End
    1 K8 J+ I: ~1 B/ o6 ~$ V+ `
  849. Music_Show_End6 ?  x/ o' d6 C2 }4 n! o
  850. RTS; C3 E: `* u( P9 G9 ~" u# b& E

  851. % I8 J+ X7 Y. r2 V. F% y( R3 A4 l
  852. ;==============================
    / o$ U, D- o) p- f! [( T" f2 |& R$ a
  853. Time_Show;播放时间显示7 x4 H6 M* @! v6 P
  854. JSR PPU_Addr_Set7 T+ b0 r4 \( m' E  Y
  855. LDA #HIGH(Play_Time_Pos)
    + F. ^* w! c! W8 I3 w" u, k8 B. c
  856. STA PPU_Addr,X
    3 x% W: @; w0 J0 P. N1 T4 a2 ?; g" _
  857. INX3 p8 r, Y5 |  q+ V+ Q, y
  858. LDA #LOW(Play_Time_Pos)3 L3 [  E1 j! v0 w
  859. STA PPU_Addr,X2 u! t/ q6 x/ f/ b8 H. ?
  860. INX, l  o, t: |0 d, g" J& \; U7 `6 `
  861. Time_Show_H3 r; h. t/ b0 G  B) C3 Q, F4 n3 R
  862. LDA Time_H
    4 z. k# @6 r! U* B
  863. JSR HEX_To_Dec
    # V' ~/ r1 R( g" ]6 F" _
  864. JSR Time_Digit! b' [& J/ R$ {: F7 t0 e
  865. LDA #':'* x( d4 I/ P7 V( O
  866. STA PPU_Addr,X
    8 a' i4 ]0 N6 R7 y5 y+ V
  867. INX- o4 y# v/ Q( a, E' K: t
  868. Time_Show_M: T0 T# W* U* Y/ r) _
  869. LDA Time_M
    2 m" ^5 j. [# A
  870. JSR HEX_To_Dec
    ' O2 H7 S4 p$ C) G! a
  871. JSR Time_Digit
    7 \7 U% a1 m8 l. o+ k( s6 k6 r0 z
  872. LDA #':'
    & I+ h( S# {: z: ~$ s- |
  873. STA PPU_Addr,X
    0 G2 K* `! z( C+ W
  874. INX: E/ S  a& F. B# H3 E
  875. Time_Show_S
    ! x& i" x. z( M5 y6 Z
  876. LDA Time_S
    / o% Z& }! `$ z" }# z+ I
  877. JSR HEX_To_Dec  t# ^$ D0 ?. h: ]* ?' j
  878. JSR Time_Digit/ I1 Y+ Z! Z5 g2 S# x& y
  879. JSR PPU_End
    # x# r/ |; {. b- j9 \8 ^7 G
  880. Time_Show_End
    ! ?( p6 T7 \! F0 O/ v. ~
  881. RTS
    3 i$ C& I: v5 s: A4 k* ~; Z
  882. 3 x7 e3 B' i* @3 }
  883. Time_Digit
    1 t( B( T9 v6 c4 q# R; O
  884. LDA DEC_T( h. w$ W/ h+ ]+ {
  885. ORA #$30
    / K1 {6 r, K0 a
  886. STA PPU_Addr,X: f4 b, `0 s+ t! J* V6 A
  887. INX5 ]9 _& K, t6 \2 x
  888. LDA DEC_L
    ; d$ W/ m) E3 H/ _7 P( K
  889. ORA #$30
    " j' K0 I4 U4 h0 i) B! p& q
  890. STA PPU_Addr,X. I5 i4 o" X$ I
  891. INX
    9 e& o; k" n4 H! [8 M
  892. RTS: K6 y' F, X+ h8 @& Q% b+ l7 N4 P
  893. 7 p9 @$ h+ h7 ?: Z& g: K
  894. ;==============================( o, @- M8 v6 q, c, w
  895. Time_Count;计时
    " ]+ }# V6 \0 Q& n  L
  896. LDA Music_State/ R/ ]4 s; v' l* M1 d
  897. ORA Time_Wait_Cnt
    9 L6 o4 Q2 ^- r9 R' ~- |
  898. BNE Time_Count_End
    0 y9 @1 a0 l6 c" {, }3 e% R
  899. INC Time_Cnt- ^0 U  r& @- K1 D2 ?) `5 G! s
  900. LDA Time_Cnt, u, a* m1 m) u- R
  901. CMP #60+ a, d* p5 s5 S$ h2 c
  902. BCC Time_Count_End
    2 s. r4 g& L: f
  903. LDA #003 C+ W, R/ L! J) [, i3 x
  904. STA Time_Cnt
    - \' R' \! x  Q! {4 j9 J& `
  905. INC Time_S
    % }5 @" M; _. @$ T5 @3 }
  906. + L3 ?2 }- u6 ]
  907. Time_S_Cnt! n) [) B% i  u, W( B9 T
  908. LDA Time_S' Y; y, _. n( g$ j7 \7 q. G) J  D# ]
  909. CMP #603 p* Z* N. e4 w
  910. BCC Time_Count_End
    - Q  W0 {  _+ i; q+ a! n
  911. LDA #00
    9 N$ h/ Z6 ]7 d
  912. STA Time_S1 W, M2 G# X# b7 ~  _5 y
  913. INC Time_M
    - h3 i' N2 l& U

  914. , e) h! U4 Q* K. w9 Y
  915. Time_M_Cnt7 @( W! [4 I9 ?0 @) t
  916. LDA Time_M1 I% n; W2 `6 A$ M% c5 K
  917. CMP #60* D, G9 e, y& }/ n
  918. BCC Time_Count_End  [6 T" j: J3 G0 J, g8 B6 J
  919. LDA #00- ]4 V9 T# l( ^! k7 @
  920. STA Time_M, H- ^8 Y% \& S: ?1 f
  921. INC Time_H, u; J/ w/ d3 Q1 g0 w7 l( {

  922. 2 [; g7 m* F3 {, ]* F% o& D& O
  923. Time_H_Cnt8 h3 X2 o: Z& f# P
  924. LDA Time_H) c; l* L5 U6 l6 l) m: `
  925. CMP #24
    1 z& N. v/ I, X0 I: y  k% N
  926. BCC Time_Count_End
      v1 F5 q: M3 g0 O6 t8 c( I
  927. LDA #00
    ; P4 K% l# e3 v! t  ^5 ?
  928. STA Time_H
    5 K1 G3 \: l; p# P; S
  929. % W  [1 L5 A$ J( S( ~1 X+ j
  930. Time_Count_End
    7 R) O3 |/ o3 p6 D6 g8 M
  931. RTS8 s6 u/ g- Z8 v8 a7 t5 i
  932. ; f. |5 y+ `6 K# A
  933. ;==============================' r' G! l1 h3 C: x
  934. Time_ReSet;播放时间重置
    9 j7 {3 U0 y) B1 s, ]$ p) ^
  935. LDA #$00
    # N: Z2 D( ^9 c- m# G
  936. STA Time_S9 V0 j% N3 G# S( O
  937. STA Time_M 4 {' Y- ~9 L% K3 Z& H2 _
  938. STA Time_H
    3 O3 K# [6 r! x) S& Y  B2 o/ x( [
  939. STA Time_Cnt
    0 a: U* Y, p! b! y6 ]
  940. RTS
    + J1 f1 P: h- X; b
  941. 8 x2 N: G; e6 W+ g& b9 b
  942. ;==============================
    , u  y- l' H# [4 l6 G& F+ Z3 }
  943. Music_Bar_ReSet;音乐条重置
    3 W* ]9 c& V& _- M
  944. LDA #$00: C; H5 |7 j0 r
  945. LDX #$001 t3 @+ P* K5 b; H- T
  946. Music_Bar_ReSet_Set
    # y9 }( G: A" D1 d
  947. STA Sound_Bar,X
    " F% y( P2 T' P3 x1 x. Z0 K
  948. INX* m; S: i& w) x% W5 X# `- i; w7 C
  949. CPX #$10
    ! \2 F3 o# e7 T+ _) F/ o
  950. BCC Music_Bar_ReSet_Set5 P! w& G9 h8 B; F& ]
  951. RTS
    . P9 U7 A% o8 }9 L  C
  952. * {8 B# K: a. G: \1 O* {
  953. ;==============================7 V5 E9 v+ b# k3 x
  954. PPU_Data;PPU数据写入
    $ C# K( h1 i2 m( B' a) j# L+ B
  955. STY Data_L
    , O' D6 r6 E1 O) n& g1 Q) X
  956. STX Data_H! \- H) M7 k$ a( H
  957. LDY #$FF
    9 G9 e# d8 k& m" W( O2 T
  958. LDX PPU_Cur7 V2 y3 i8 q% z8 l: J6 C
  959. DEX! A( }' }0 p0 A' e$ N
  960. PPU_Data_Beg
    5 B' X+ t7 J4 ?& B" Z
  961. INX* F. q! P6 V2 e$ S8 B9 t! c
  962. INY$ K- u9 }- q/ p8 R3 W& ]9 p
  963. LDA [Data_L],Y
    ' ?0 \; Y$ L  {% I
  964. STA PPU_Addr,X% c  D* B# [: u! B
  965. BNE PPU_Data_Beg  a/ g9 T' Y1 i  Z% h7 X
  966. STX PPU_Cur* e5 [6 L* C5 X
  967. PPU_Data_End  |& k, U, s$ y; i0 b
  968. RTS
    6 t2 p* p) j0 M
  969. " m" _3 D4 M1 j  R* L1 f+ l
  970. ;==============================
      W2 @! k) L: p
  971. Music_Stata_Show;播放状态显示, J) C- H. C7 b% ?9 Q
  972. LDA Music_State9 z3 l/ z* D: m5 h
  973. BEQ Music_Stata_Show_Play
    * {. T6 s+ O3 {3 Y
  974. Music_Stata_Show_Stop) z* ^* \. s7 c$ o) l% G" x( j4 y- u
  975. LDY #LOW(Music_State_Stop)7 s! G" W0 _3 z7 a6 i9 O: {
  976. LDX #HIGH(Music_State_Stop)
    , o/ R, Q: ~6 q9 _$ o6 @4 @
  977. JSR PPU_Data. O& ~6 |; T5 H
  978. RTS
    " F0 l6 z9 y) B! w7 Q
  979. Music_Stata_Show_Play2 A' g3 b* \5 E1 D+ u1 s
  980. LDY #LOW(Music_State_Play)  f. O' ]0 D3 m8 B
  981. LDX #HIGH(Music_State_Play), `- D, e! O3 {. ?. `$ O5 g# |: m
  982. JSR PPU_Data. s* w8 j6 N' a, A' @
  983. RTS+ G& t/ j  a0 B; a9 |) `' K

  984. 4 |' z2 t% e2 O6 b0 Y" f  S, a
  985. .IF SOUND_BAR_SHOW_ENABLE0 m/ ?: K4 d1 N5 P
  986. ;==============================
      s; Q4 |3 E- X' ^  P3 ~% \" y
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    & r% p% r5 Q7 v  C4 v' I. v
  988. LDY #LOW(Sound_Bar_Text_Data)- v/ v* C2 g9 ^, q- U
  989. LDX #HIGH(Sound_Bar_Text_Data)5 H- ~$ S) c' U( N! B8 u. d* g) |
  990. JSR PPU_Data% {. ~5 g  g5 Y, B3 i6 H
  991. RTS
    8 o6 S$ |0 [1 [  J9 @
  992. 8 [3 [  L9 [3 e. X( ^
  993. .ENDIF
    3 P5 I; w3 q: h/ Q3 P: h
  994. ' G2 }0 L" @7 S# y/ K% K: b8 v& H
  995. ;==============================
    ! y: `! s) a2 d4 m% H
  996. Set_NameTable_Attributes;设置命名表属性" J" ?+ w0 k0 i
  997. LDA PPU_STATUS5 S, g4 r7 g$ F# v( a  g/ ?  k5 N
  998. LDA #$23
    ' Z; \( j+ O; a# |& A
  999. STA PPU_ADDRESS3 d9 {; L4 F7 W2 }
  1000. LDA #$C0
    : w) ~3 }  Y2 q$ y$ k: k3 D
  1001. STA PPU_ADDRESS1 A* _: M( q5 H3 {  v  B) `2 i8 R* Z9 A6 K
  1002. LDX #$00/ U& p3 n* g  |
  1003. Set_NameTable_Attributes_Write
    + R, U5 `7 x$ I
  1004. LDA Palette_Attributes,X
    " E5 `3 B5 d* G2 d. `$ L
  1005. STA PPU_DATA4 g! i6 }0 E- r: S
  1006. INX
    9 t) F3 J: a" Y: L) P( A1 Y
  1007. CPX #$40
      ]4 g$ Z& o: l( R) m7 N+ X
  1008. BCC Set_NameTable_Attributes_Write
    * u0 ?0 l1 N8 j2 Q
  1009. RTS5 L* M. k6 t7 P4 B" U

  1010. % I& w- V& c, C
  1011. ;==============================
    6 w2 j# e0 Z  g* w0 Y
  1012. Set_Palette_Color;设置调色板数据; q1 l2 B; I; G" B2 i% B
  1013. LDA PPU_STATUS
    ; T; v8 R" H& x3 k
  1014. LDA #$3F
    & `8 A# w: S! U0 |3 {
  1015. STA PPU_ADDRESS" ]  `& O& P* f* o0 E$ `4 N
  1016. LDA #$00
    . L0 T0 C+ F$ L1 i: U
  1017. STA PPU_ADDRESS
    & s5 ^$ j' Q& \
  1018. LDX #$001 x2 F" ]8 Y* R7 h* `0 h0 W* t
  1019. Set_Palette_Color_Write
    * r# C8 o4 Y/ U# A6 t5 n
  1020. LDA Palette_Data,X
    * i4 ~) [" x2 t, i* D  v
  1021. STA PPU_DATA
    ) y/ ]1 |5 c4 }; L  g
  1022. INX
    6 Q3 X+ Q: h! G; f4 O
  1023. CPX #$20
    ; D* ^9 n, J2 V6 ^$ w" W
  1024. BCC Set_Palette_Color_Write
    , u. u  `- x0 `' N4 `
  1025. RTS. m- p: l% s( {% z- c! ]4 A: K# H

  1026. * H! |) }2 T+ s8 G+ u7 p& J
  1027. ;==============================: d' j* b& y( |6 `) F3 q6 `; R! Z- N
  1028. Init_Palette_Addr;初始化调色板数据" w8 s: F- C! f/ Y
  1029. LDX #$00$ ]! r. E3 _9 M2 I1 `% h
  1030. Init_Palette_Addr_Write. e( }- z+ S8 `% n) }
  1031. LDA Palette_Data,X
    4 Q4 G( Y+ y1 b: [% n5 E
  1032. STA Palette_Addr,X
    8 I% P1 ^* e* r0 S  B
  1033. INX* E5 @: S0 q9 _1 _  W& Z+ F2 W
  1034. CPX #$206 j( U* H* l: ~0 v5 Y4 K* n
  1035. BCC Init_Palette_Addr_Write! X1 [: ^& n7 J" {: K) i4 n
  1036. RTS
    - f5 U( o  {% g5 X1 b' l2 J  e
  1037. - N" o' ^$ k, X4 f" g! E
  1038. ;==============================2 J; |0 ~; M% `
  1039. Update_Palette_Color;更新调色板颜色& c8 G8 X# l0 r7 m; v$ V! n
  1040. LDA Show_Track_Name7 f+ e" b9 F/ Z4 }6 f+ g, v) K; s! H
  1041. BNE Update_Palette_Color_End
    4 d) k  E% C; [5 ^  p+ @6 S2 {
  1042. LDA Palette_Update_Flag
    $ _6 ~$ c4 Z" }. X' F$ O& ~0 B$ O/ q
  1043. BEQ Update_Palette_Color_End: R9 y% u. V, C3 A) l
  1044. LDA #$3F( u; U8 t0 u/ n% |9 H% w. v4 X
  1045. STA PPU_ADDRESS9 L: h( j% G$ q; N# U3 {% T6 e6 O- |
  1046. LDA #$00
    & m; E0 E: [' U' f0 d$ N3 l. e
  1047. STA PPU_ADDRESS! ]: e: z& i3 S
  1048. LDX #$002 v) a2 g4 L" g$ K1 S
  1049. Update_Palette_Color_Write
    3 ?/ D4 G0 ]0 [# r. I/ V/ q" K9 p
  1050. LDA Palette_Addr,X
    7 G* f5 x. G) i
  1051. STA PPU_DATA/ G3 h7 l2 i2 G6 f8 f
  1052. INX% s1 m  m$ e; \
  1053. CPX #$20
    . L1 f( k; N4 }4 p
  1054. BCC Update_Palette_Color_Write/ I4 ]0 i/ Q6 G4 N9 n$ {/ ^
  1055. LDA #$00
    # I( \. `/ ~, m; t0 [+ J9 h
  1056. STA Palette_Update_Flag
    # K. c" i7 x0 C! g( A& ^
  1057. Update_Palette_Color_End# V5 d9 x  ]. ^$ ]. z
  1058. RTS
    ; ]) q" Y9 w! J

  1059. : b% \5 G& ^- H7 v
  1060. ;==============================7 x; f5 B2 G! O2 g1 |7 S$ }  q
  1061. Update_Palette_Data;更新调色板数据( `) ~/ U. {" ^1 B) Z) z; i& h
  1062. LDA Show_Track_Name- P  V$ j9 n8 e0 A
  1063. BNE Update_Palette_Data_End% J4 S# `4 c) [9 b
  1064. LDA Music_State
    " v5 {% Q, `1 O4 h
  1065. BNE Update_Palette_Data_End
    * h8 t3 Z- K/ V% e
  1066. Update_Palette_Data_Check
    $ ?! ]0 \2 L# n  S3 Y: b  s5 D* M$ L
  1067. LDA Palette_Wait_Cnt/ _* |! ]1 o$ d% S* v: h
  1068. BPL Update_Palette_Data_Check_Over
    : z* v+ B" S/ Y/ p5 ^
  1069. LDA #Palette_Update_Interval
    " j2 K3 L6 ~# ~- O8 D# _8 F
  1070. STA Palette_Wait_Cnt
    0 o) _3 L/ ?& r4 L. t/ z$ T
  1071. Update_Palette_Data_Check_Over1 w! _; J! j% i7 w
  1072. DEC Palette_Wait_Cnt" u0 U7 A  ?; Z5 E. q# {
  1073. BNE Update_Palette_Data_End
    ' L  x* [4 P: a# l. M8 C/ }
  1074. INC Palette_Update_Flag
    : @& b$ D/ Q. F& a) c
  1075. LDA #Palette_Update_Interval
    : f: k4 e& o- i9 D' z) _
  1076. STA Palette_Wait_Cnt. g  V! y. t7 Q5 D; x9 O; T( ?) h
  1077. LDA Palette_Update_Addr
    / L7 @) y& M' X( Y6 c+ [
  1078. CMP #Palette_Update_Max
    % K. m3 j5 S/ w% b/ e' a5 u
  1079. BNE Update_Palette_Data_Set; m; `- a2 q  h4 S7 J1 o
  1080. LDA #Palette_Update_Min - 1
    # v6 ~! P# A$ t# R7 F
  1081. STA Palette_Update_Addr, z9 a4 b$ u& a/ i
  1082. Update_Palette_Data_Set
    9 t6 e* k/ J+ h; }" r: N8 f- {
  1083. INC Palette_Update_Addr
    ( `! ~6 o) V  _% Q
  1084. Update_Palette_Data_End6 f) ]. {' H( X! H
  1085. RTS
    % K* c$ M5 R4 M4 D8 K/ C2 p9 o
  1086. ! _  @- ~9 l* f- H1 \
  1087. ;==============================
    % T  A8 J7 a& [( w5 {
  1088. Show_Music_Text;显示静态文本
    - Z2 ?' b1 q% |1 U, r/ D
  1089. LDX #$00
    , E% ~" X7 k$ \, {
  1090. Show_Music_Text_Set
    % q; P1 H) r! p
  1091. LDA Static_Text_Data,X: [6 ~3 A  j. p& S$ w' c  m; o
  1092. STA Data_L( U' x' h8 `( l& E
  1093. INX: G9 S+ K: l7 c; e% c
  1094. LDA Static_Text_Data,X& v. k: z$ R( c* A) S
  1095. STA Data_H
    % I4 q+ S& A0 S' L! h/ z; L3 A/ ^. J
  1096. INX. v9 ^$ h9 d8 b! n6 }
  1097. LDY #$00& T, c& ~6 s% e0 O( D
  1098. LDA [Data_L],Y2 L, V: g# }" z6 ~
  1099. STA Data_Cnt3 m1 g0 R6 f0 A- r# F
  1100. DEX% [! B# a1 k5 W: _6 y) U8 r) F
  1101. DEX
    + R5 A0 u' v/ K2 s; \/ {
  1102. LDA Static_Text_Pos,X; e$ w0 s) O* n' s9 r2 ^9 ~- H
  1103. STA PPU_ADDRESS
    $ `, T7 y+ E+ w1 F) u6 n2 m* A7 J
  1104. INX% c* V, H3 {" d2 G1 @
  1105. LDA #$20- g3 `7 v" }$ ^" q0 ?2 R. N
  1106. SEC
    - t# S5 K; P3 l+ h2 Q, m/ a
  1107. SBC Data_Cnt
      r- |- M% q4 e8 e* l* i5 |, R2 z7 I
  1108. LSR A2 e$ {9 g: \! }
  1109. STA Data_Buf5 s6 D" y6 l7 p6 i/ H
  1110. LDA Static_Text_Pos,X
    ; j1 ^7 _6 m8 Z, p# P% V) o
  1111. AND #$E0
    5 B2 M, A7 z" \( G
  1112. CLC1 S- H5 z1 T! e, }* {2 C
  1113. ADC Data_Buf6 n" d, x$ I8 k. `# `$ |
  1114. STA PPU_ADDRESS
    2 k, G) {: ^' Y7 C7 _
  1115. INX5 K0 c/ T3 z" s! i& e1 B) i' b
  1116. Show_Music_Text_Set_Write
    # C8 ]9 {( e5 T8 K' Y
  1117. INY% F. I% X! a% S! {& o$ Y& I
  1118. LDA [Data_L],Y
    3 H8 e9 O+ ~- G# ^. g1 P) T
  1119. STA PPU_DATA
    - o8 b5 [! W. O( @1 `
  1120. DEC Data_Cnt
    3 z2 t3 c8 j* \3 a) T  ]2 H4 F7 ?
  1121. BNE Show_Music_Text_Set_Write. G8 t- `" U& \& U" W$ M1 o, h; m
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos7 B; \- y& i% Z) \
  1123. BCC Show_Music_Text_Set$ X" a( s! a! x7 }
  1124. RTS& l  u8 L% h* _! C  m) ~& e2 B: {

  1125. 9 r  E2 j" l! G& P( `! r8 ^& I* ~
  1126. ;==============================2 _8 C# X$ [3 Y' B+ I9 C
  1127. .IF Track_Name_Pos;显示曲目信息
    4 W; h: r. B: o' M$ N4 g
  1128. Show_Track_Info( d3 Q% T' T, ~  G+ Z  O/ F
  1129. INC Show_Track_Name
    6 c% b9 @7 |/ V
  1130. Show_Track_Info_Clear9 J+ G& S8 V, v
  1131. LDX PPU_Cur6 |, U  i1 l  i) B% v+ d: }
  1132. LDA #Mode_Clear
    ; J7 D7 g5 r" z4 a& W3 D- w( L
  1133. STA PPU_Addr,X4 t' d0 p+ |) M
  1134. INX$ C& Z7 @% |5 `5 B' c$ T4 C* ~
  1135. ' H- t4 D/ k/ T; d- I" u! D
  1136. LDA Music_Last
    , q1 Y- U' G( P- i2 N0 n" s
  1137. JSR Show_Get_Track_Name_Center_Pos
    7 D& e* z/ g( m" [
  1138. Show_Track_Info_Write_Cur
    ' M8 b: w$ \& _  X, a) \: o! P0 j3 F
  1139. LDA #Mode_CntLine2 G( W4 `! q) U8 z! t- S( y0 r; N
  1140. STA PPU_Addr,X& G: h$ l! N1 t$ y; }4 G
  1141. INX
      D5 B# |' N' D% y9 h
  1142. / u8 B# \$ V* Z$ p
  1143. LDA Music_Cur8 P4 r2 u4 l% y+ M0 p
  1144. JSR Show_Get_Track_Name_Center_Pos
    ( S% l5 o9 f5 @! i" C) T7 C$ E! T( k7 V
  1145. / j7 L, i" d' y$ S
  1146. Show_Track_Info_Write_Cur_Data
    5 n& e# V: x+ l! {$ i9 q
  1147. INY8 ]( J) L) @; |& @! e( |
  1148. LDA [Data_L],Y
    - ^8 B9 n6 y/ d0 T9 R0 d' g* _% n1 ~" h
  1149. STA PPU_Addr,X+ u9 h5 ]0 T" \
  1150. INX
    . u' B, e8 ^# w# ^$ ^9 r/ `, u4 r
  1151. DEC Data_Cnt
    ) T* A8 ?$ f' q* _, b
  1152. BNE Show_Track_Info_Write_Cur_Data
    8 \* t2 p" j  A2 N, L' h* {' S
  1153. Show_Track_Info_End# j3 z' p7 d. C! Z$ J& H
  1154. STX PPU_Cur2 E' a3 c' a. \6 Z
  1155. RTS' N0 x% X; x6 n5 j

  1156. " U, Z) s" S* L/ ?$ i
  1157. ;==============================& P, f& X* n1 Y! ^' v
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    # X8 x& ~& |2 g2 }2 \
  1159. ASL A
    7 p6 a3 O( t# ^: h
  1160. TAY
    7 a- L1 b3 a, o! t9 {
  1161. LDA Track_Name_Addr,Y4 f1 A# }  q1 K  u
  1162. STA Data_L
    + t9 n9 \5 a* A: G2 r
  1163. INY! t0 h; p+ Y0 d' f) }1 t2 g1 W
  1164. LDA Track_Name_Addr,Y
    8 \! ~" ?7 b- p$ r7 b4 D/ D" U, X
  1165. STA Data_H, |" [) X$ i" O' x
  1166. LDY #$00( d8 |( [% q: q6 v5 I0 p
  1167. LDA [Data_L],Y5 g' V9 ~8 N3 I
  1168. STA Data_Cnt6 g4 x" v- W2 B7 q. x5 l
  1169. LDA #$20
    0 M: z( J* u3 P. Z
  1170. SEC0 n9 f3 n( q$ ^2 t
  1171. SBC Data_Cnt6 N. |$ s4 E# j! W6 h6 R# a7 S
  1172. LSR A
    " P# \- }7 ^2 k- @; c
  1173. STA Data_Buf; j; j+ G' ?+ O: P- _9 U* A
  1174. LDA #HIGH(Track_Name_Pos): @- v4 U7 u5 ^( i4 {
  1175. STA PPU_Addr,X
      h3 o) u, d2 s) W8 P5 }6 T( t- Z: k
  1176. INX1 L5 Q$ D# F$ \3 k
  1177. LDA #LOW(Track_Name_Pos)
    % t' w7 Y  f, F8 d, }: V- P5 P6 w# C
  1178. AND #$E0. e4 x8 {9 X) P6 a8 n1 r- E
  1179. CLC4 @: v& _) u0 ~- _4 @, t# l; i
  1180. ADC Data_Buf- k4 w% y" d3 @% F  }+ |& I
  1181. STA PPU_Addr,X
    1 Y. v! k6 b# l# i: V% O" Q
  1182. INX# ~, t' d6 h; [
  1183. LDA Data_Cnt
    8 b) J$ t, I  o6 }, V. Q2 b5 {
  1184. STA PPU_Addr,X
    * T) v) T' e7 A; |
  1185. INX
    8 ]1 \% e7 F) |: h" }( n( S
  1186. Show_Get_Pos_Center_End4 A; U' ?- Y- B8 m7 u
  1187. RTS* L( M6 ^1 x: c
  1188. .ENDIF
    - y- f; f/ ?2 K+ j; T/ H! L

  1189. ' _  c/ f$ g# P8 z8 d9 H; }
  1190. ;------------------------------$ Q: ?( l/ C4 u7 l
  1191. ;命名表数据
    . J8 [) Y" @( i$ j. h
  1192. Palette_Attributes- ~. y! l; u4 m; v7 f' N& j! I
  1193. .IF SOUND_BAR_SHOW_ENABLE
    * C* m; l2 G2 V# ]. D* `# R
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    8 W% m+ W4 R6 C. k3 T
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    5 J' {" I. U* ?( ]9 d; n  T
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$559 D" [4 T1 v$ i, w8 V
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55; q2 ~# h, Q/ X* ^$ ^* |
  1198. .ELSE+ M6 ~. }0 g* z- Q; w+ g6 A1 Y# s
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00% Z) C7 |% y9 J: n
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF: g5 L, ^2 k# U( s$ E
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55! j' R+ s* D# G
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55" d+ t$ T5 |* h, H
  1203. .ENDIF5 y" @( h" ?7 x; A! J% A0 j
  1204. ; D* I1 K9 v, r+ J5 x
  1205. ;------------------------------
    6 B2 X! M+ T; a/ a3 \
  1206. ;调色板数据! g+ g3 g- z4 t0 S( X0 C! F
  1207. Palette_Data9 m4 X- P% @- C8 Q" D
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    . r; u. |, S$ M. u! I
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    8 @# E9 M0 z3 R+ M$ {

  1210. - T! q2 k0 u( y, [  I$ H
  1211. ;------------------------------
    + N8 W8 O# p7 q1 @4 U, ^$ n7 [
  1212. Static_Text_Data  Q1 E7 h2 H" ^7 J% v/ `1 {
  1213. .WORD Static_Text_Title_Data
    ! Y  l4 W) |( g
  1214. .WORD Static_Text_Author_Data
    2 C) C2 h* `; c- ?3 J. H
  1215. .WORD Static_Text_Date_Data  l% M9 _2 D& b* s' Z. t
  1216. Static_Text_Data_End
    * X0 v: \6 e: ^
  1217. 9 [# {% p" _( P; L6 {
  1218. ;------------------------------4 y$ o+ d6 L; V% @5 B. [5 D- @. [
  1219. Static_Text_Pos
    # A* C. j0 T9 i# R
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)1 Q5 c: \( l+ D% u$ x. \% W1 h
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)) I8 f- D# c+ E* U
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)9 t7 J! s' t! r2 p$ Z! g
  1223. Static_Text_Pos_End$ k! J; M6 `" T* G: h( n

  1224. & m/ b2 n+ V, a$ @. z  `
  1225. ;------------------------------8 x" f5 D4 ?4 j9 N4 f
  1226. Music_State_Stop
    ) z+ ~3 ?# u; z) S
  1227. .IF SOUND_BAR_SHOW_ENABLE
    : U. a9 m; d3 m
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    8 k8 P( U# I; U. b! N
  1229. ELSE- {7 ~: z" x/ T. ^7 k
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$008 U7 A$ I! a* |' N6 w2 |
  1231. .ENDIF5 M; k" m2 I9 p9 t7 Q' N0 u
  1232. Music_State_Play* ]/ y' K# |/ x0 i
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00# `+ f& ~- E4 |4 U! Y

  1234. * N6 Y$ W9 u8 I2 E' ~- q3 r
  1235. ;------------------------------  B/ e. z6 \( z1 L
  1236. Sound_Bar_Text_Data;声音类型文本1 U. [/ x+ _# i( F1 T8 ]( B
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)% ^7 @3 u9 z$ L6 H
  1238. .DB "SQ1-",$FF
    : ~( h( Z( E, V) N7 P
  1239. .DB $FE,"SQ2-",$FF+ R& ]5 V! R  y$ p5 w  p
  1240. .DB $FE,"TRI-",$FF3 d$ h5 C& c% H% j4 n. Q" m
  1241. .DB $FE,"NOI-",$FF
    $ g6 k4 K* F9 w5 X( n( q3 r% x* q, u
  1242. .DB $FE,"DMC-",$FF,$00
    # Z& M" ]3 w9 T' V

  1243.   {' f6 _/ x( o+ y
  1244. .IF Track_Name_Pos
    + ]; {) @* n: S7 f6 U
  1245. ;------------------------------8 a9 I, a8 M4 [" |) h; Y+ c" O% l
  1246. Track_Name_Addr;曲目名地址索引% D( s- W. N0 Q+ w. H$ u
  1247. .WORD Trackr_01) L. X2 r$ N( H9 Q& N; f
  1248. .WORD Trackr_025 t* a7 H) q  K. a2 [7 W8 B/ i
  1249. .WORD Trackr_03
    , u/ Q# H& k& Z, ~0 ~: D5 _( Y
  1250. .WORD Trackr_04- T) s9 b; ^* {  \
  1251. .WORD Trackr_05
    . b$ [5 @1 y- ]* e8 \, k" W
  1252. .WORD Trackr_069 w% _1 }$ t3 t! i$ D
  1253. .WORD Trackr_07
    " m7 F3 @) F0 _! O  R5 e
  1254. .WORD Trackr_08
    7 X6 ?, k, A3 I/ j  M
  1255. .WORD Trackr_09
    , c% K/ J3 @5 a
  1256. .WORD Trackr_10
    % F. x, ^, I# h' \7 k. I$ C3 ^* G
  1257. .WORD Trackr_11
    4 a5 |  J, W# O) e: i7 f
  1258. .WORD Trackr_126 l1 Q9 R* S9 ^/ V$ k) r, K
  1259. .WORD Trackr_13
    9 B9 j6 P% Y6 q6 F
  1260. .WORD Trackr_140 l9 S; p9 O, N+ n  H, d
  1261. .WORD Trackr_15
    / C; Z5 u- r; A; D
  1262. .WORD Trackr_16
    7 B2 Q) ~* ~! g6 g$ Q
  1263. .WORD Trackr_17
    & o0 L* d) y' W# _' ^+ M% ~
  1264. .WORD Trackr_18
    9 S( R; E& k/ B) r2 z
  1265. .WORD Trackr_19
    ' X; H  T, x# t  _) R2 C* ?
  1266. .WORD Trackr_20- q3 E6 |( u8 T# G, M- @4 P
  1267. .WORD Trackr_21
    9 T4 O+ L7 u/ Y9 H; H
  1268. .WORD Trackr_22% s" l; ?/ i9 [- T
  1269. .WORD Trackr_23# @" d$ M+ U# ^) W
  1270. .WORD Trackr_24: R  O1 ^4 l$ h
  1271. .WORD Trackr_25
    8 S" H' G8 f; `4 t3 y
  1272. .WORD Trackr_263 e, p4 h8 Y4 Q1 V
  1273. .WORD Trackr_274 z( l. d( W4 H4 O" F
  1274. .WORD Trackr_28: L) [, B8 V% ?7 ?8 \
  1275. .WORD Trackr_29
    6 ]1 C, ^4 v5 U' g2 l
  1276. .WORD Trackr_30! l2 l) E) n& O! a# F
  1277. .WORD Trackr_31: v7 A4 d) I; @0 \
  1278. .WORD Trackr_32+ p' P, D- Z  U% q0 V
  1279. .WORD Trackr_33: z1 }" L7 N$ {/ e' z
  1280. .WORD Trackr_34& _) H5 @7 G- `1 P
  1281. .WORD Trackr_35& Z% c" T) v0 e
  1282. .WORD Trackr_36
    6 V1 A4 H/ i6 ^5 x7 R
  1283. .WORD Trackr_37
    - }/ N6 H! h; U2 B* f4 m' q
  1284. .WORD Trackr_38
    ' }4 ]; K' u% K. u  u, n$ y* b
  1285. .WORD Trackr_39; Q3 b( Q1 T0 E$ o7 {

  1286. ( w8 S9 M5 b4 O! m7 d! Z& _* O
  1287. ;------------------------------7 V! [  Z6 T; ^& L' P' A1 \7 Y
  1288. Trackr_Name_Data' I. @( `4 j! D. Y5 l' I" Q* f
  1289. Trackr_01 .DB $05,"BGM 1"0 q5 e( O+ r" f0 x' s8 }
  1290. Trackr_02 .DB $05,"BGM 2"
    ( W' P: h# y, d% I. M. S, ]
  1291. Trackr_03 .DB $05,"BGM 3"9 P5 I) ^( ^% `7 ]+ D% _6 d; r
  1292. Trackr_04 .DB $05,"BGM 4"
    ; Q; W: S; H: @: C3 A
  1293. Trackr_05 .DB $05,"BGM 5"1 Z% J) h# f- O8 \  `0 \  o- f: |
  1294. Trackr_06 .DB $05,"BGM 6"
    # g; P$ A8 G+ Q$ R
  1295. Trackr_07 .DB $05,"BGM 7": Y1 v- e( N3 `
  1296. Trackr_08 .DB $05,"GREAT"
    5 O  q: r% \4 a+ Q+ O
  1297. Trackr_09 .DB $08,"BOSS BOM"9 s8 e7 H8 a" Z, H1 I- U* f5 C
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    4 M0 H0 p# [9 _) J" N
  1299. Trackr_11 .DB $07,"P CLEAR"
    * `& ], k3 W2 a5 o! G- w. K
  1300. Trackr_12 .DB $07,"A CLEAR"+ J: |% C! J: l* W/ J3 ]+ W
  1301. Trackr_13 .DB $04,"OVER"
    * `6 U$ U, c4 J% |/ g* t0 J% z
  1302. Trackr_14 .DB $06,"ENDING"/ n2 [/ o" u9 B6 U; `" X# D. {) U
  1303. Trackr_15 .DB $04,"SUTA"2 @! U# k+ ?" s5 A1 H8 h# c
  1304. Trackr_16 .DB $07,"THUNDER", [/ B+ M4 ]0 n
  1305. Trackr_17 .DB $04,"SHOT"( k, c8 V  t1 D. S& o1 V( x
  1306. Trackr_18 .DB $05,"LASER", O) n' ~7 U& c9 Y9 ?+ a7 B
  1307. Trackr_19 .DB $06,"SPREAD"
    0 m9 i; M6 H% _: ]& V3 X
  1308. Trackr_20 .DB $04,"FIRE"% Z. w9 e+ H/ y/ {# F% c6 b
  1309. Trackr_21 .DB $06,"B SHOT"2 M5 y# e2 D5 a; H
  1310. Trackr_22 .DB $08,"T DAMEGE"6 {, `% ^  @- I% S
  1311. Trackr_23 .DB $07,"HARETSU"
    . o6 P' R7 }4 q' T0 u0 A
  1312. Trackr_24 .DB $05,"T OUT"1 _! ~- e1 f! }& O; f6 x1 `$ v
  1313. Trackr_25 .DB $05,"Z OUT"
    : i" P4 ?0 t4 ^4 W- X$ t3 e; s* A
  1314. Trackr_26 .DB $05,"A OUT"9 e7 b3 m  [# p! Y
  1315. Trackr_27 .DB $04,"ROLL"
    : D+ R3 i( v( z9 J/ n" n. Z
  1316. Trackr_28 .DB $06,"APPEAR"
    % Q, Q! {7 f- O' Z/ d1 i! G9 j
  1317. Trackr_29 .DB $05,"POWER", ]2 a6 J& S- _( W! G" C' {
  1318. Trackr_30 .DB $07,"BOKK BK"
    0 `3 e9 x# a" G, K8 G, A1 A
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    ) t2 u. c& f# Q. e4 M% i
  1320. Trackr_32 .DB $08,"BAKUHA 2"
      `( L1 W8 \0 @3 M" S( y5 r. f( Z1 s
  1321. Trackr_33 .DB $05,"ARUKU". ~' M, W5 K- k" |
  1322. Trackr_34 .DB $06,"JIWARE") u5 ]8 J  b) r6 F9 D) G9 k9 L- z4 u
  1323. Trackr_35 .DB $05,"SILEN"( {& N6 T5 |+ G5 f# g
  1324. Trackr_36 .DB $05,"P 1UP"
    " H0 w' Z, v! w3 K0 f* u) d
  1325. Trackr_37 .DB $05,"P OUT"
    " E- V+ n& u& p
  1326. Trackr_38 .DB $05,"B OUT"
    ; k: }* Z8 E% S) e/ R4 E! t
  1327. Trackr_39 .DB $05,"PAUSE"9 Y, D+ w- o6 t. D* I
  1328. ' Y% W; |" w" l: C% y/ m9 q4 e8 }
  1329. .ENDIF
    / o- X2 |. \' S- v. X# G

  1330. & O0 D) u- C# L3 s% ]
  1331. ;------------------------------
    / n9 z0 X. w, t" |
  1332. Static_Text_Title_Data;静态文本数据
    8 _' F. I! t& O, V0 E- f: W
  1333. .DB 12
    ( D7 Z+ v6 o2 j6 R( A) m
  1334. .DB "SUPER CONTRA"
    1 m  w: Z0 t% J: T
  1335. Static_Text_Author_Data6 J, [5 k0 ?) x- B9 |' Z
  1336. .DB 23" k7 \( `: d+ b" X5 H
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    . w; [6 t  g8 U; X* g/ c
  1338. Static_Text_Date_Data
    ( d0 F) H3 s- S" y; ~
  1339. .DB 10
    9 X; y! q  g' A7 D5 D
  1340. .DB "2023.07.11"
    / L- G, K& V, [; r. b$ K
  1341. : I# F2 T6 M& C# A+ v' d) ]
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    1 R5 o, h  F- m, g. `
  1343. .ORG RESET_ADDR, W- N' M8 q2 W, j, w7 l' `

  1344. # `& w& p; H* Z2 n
  1345. # i% U' c( v1 V( N3 j6 Y# ~
  1346. ;==================================================
    6 G3 P  e. z' p+ x1 m5 P( j
  1347. ;切到主程序bank
    6 B8 d5 z, G* A* E( R2 U. u: D7 w
  1348. SwitchMainBank3 Z8 f9 h" Q1 B7 W& L
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    : V$ B% f, p" H, [7 D6 V5 q! r
  1350. JSR SwitchBank8000: n& f2 F8 l% h! x* Q$ f
  1351. RTS
    ) y# R- M* r6 P% X' m$ c- J: [$ p5 H7 z

  1352. $ H4 c: w: q% R+ `
  1353. ;==================================================
    ) }% S  ]$ U4 H9 ]' x) ~& W1 @$ e
  1354. SwitchBank8000;切换bank到8000-9FFF
    0 b$ x/ S' ]8 ]: k: R9 B
  1355. PHA
    * u% ~- i7 B9 n8 ~( C
  1356. LDA #$06  Q! G) w2 ^0 ~( s: [
  1357. STA MMC3_BANK_CTRL* G2 A( ~+ }6 J
  1358. PLA( t; O5 o, v- w
  1359. STA MMC3_BANK_DATA
    # n5 v  v9 G& r3 w5 E1 i
  1360. RTS
    + _& U. ?( `1 i- q

  1361. & @5 }* u' m/ [/ L( [1 N
  1362. ;==================================================
    % A2 _1 t9 }: h  k$ U' P  }
  1363. SwitchBankA000;切换bank到A000-BFFF/ B$ l6 P! @7 h0 R3 \
  1364. PHA0 ~- U; y  q' `/ F
  1365. LDA #$07% I7 I8 p! [! B9 c
  1366. STA MMC3_BANK_CTRL4 U* x/ h0 u: |, [3 n
  1367. PLA
    " e; d4 P' \" r0 H& r
  1368. STA MMC3_BANK_DATA' b: v' l- R9 M& B# L% H7 }/ ?
  1369. RTS
    # k7 G4 I$ E; V2 p
  1370. . O' r) i( P; B& L; x0 Y) I6 q
  1371. ;==================================================
    : J2 i: U. c! W* F5 t$ i
  1372. Sund_Bank_Init;音乐bamk初始化2 r/ m' T( p* Z/ ^/ P
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    - |6 k2 @& c& z
  1374. STA Music_Bank_8000
    2 P7 p2 T* a8 S$ V! K! u
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    , g2 Y6 W+ \8 ^4 P
  1376. STA Music_Bank_A000
    4 Q1 a* c; V5 I5 c  r
  1377. RTS
    : d8 H. S; H  E( l2 V* G: f# n. G

  1378. 3 S+ }! c$ n2 H0 E' E: p* g
  1379. ;==================================================
    & Q! S) a$ s1 w( k: T7 I
  1380. Sund_Bank_Set;切换音乐bank9 g& x6 ~. u' V5 i
  1381. LDA Music_Bank_80006 A3 f' ^* h% m
  1382. JSR SwitchBank8000
    2 z; ?  x6 F* n0 n& T" z: \  |
  1383. LDA Music_Bank_A0006 Z! V: [9 a" E
  1384. JSR SwitchBankA000
    * f; T( W+ m3 X2 i6 x7 ^' ~
  1385. RTS
    4 _' E" D  P( Q- C- n9 d$ o

  1386. ! M! p2 a% E" B4 b$ |7 y% h. I
  1387. ;==================================================
    $ |- O$ l, O$ c, @/ N: w
  1388. Sound_Init;音乐初始化
    . `, C/ V3 S7 j5 `, n" z) N% T" F
  1389. PHA
    5 c. f* n: |4 v$ V
  1390. JSR Sund_Bank_Set
    6 P( o" {6 m& l
  1391. PLA5 v& t6 s. e4 o) j
  1392. JSR Music_Init_Addr
    & h6 R, P5 p$ ]5 z4 h" H- w/ v3 ]* X
  1393. JSR SwitchMainBank9 J4 c5 L* S6 i# l

  1394. 0 ~; {. D% m* c: ^# B2 \
  1395. JSR Music_Bar_ReSet' _: L7 L$ N/ i; `! o7 `# S
  1396. JSR Time_ReSet4 l# e1 }8 I# j7 ~1 q9 |
  1397. LDA #$00
    , Q# z6 o/ X/ k( S* ^3 T# N  G
  1398. STA Music_State
    " d3 {3 l. D/ m" _
  1399. JSR Music_Stata_Show
    & X" ?5 p4 {, r
  1400. .IF Track_Name_Pos8 ^! k8 y& {: {. ^0 ]
  1401. JSR Show_Track_Info
    % _: \- {8 {  M, N, J
  1402. .ENDIF
    ' w' U$ ^% u4 o( x

  1403. % M3 _& s  C% ?, C* m" I4 Y# [) q
  1404. RTS
    1 d9 y: a. C& P3 ]2 b

  1405.   v: u( d: Q. ^  z3 t) A9 Q' C' l
  1406. ;==================================================! S2 L3 x% w+ _4 D3 f5 \
  1407. Sound_Play;音乐播放
    1 l+ t9 I" u% N/ z' O
  1408. PHA) `$ J& o% D  _1 e8 i% m5 E
  1409. JSR Sund_Bank_Set
    ( b% S  s" W) |1 Z6 X0 w
  1410. PLA
    1 E3 t9 _" x( _7 i9 y$ @, J8 b
  1411. LDA Music_State7 {- }0 F+ W5 Y6 B( X8 |  _
  1412. BNE Sound_Play_End
    + _% Z' s6 z: O7 W
  1413. JSR Music_Play_Addr* h8 s; p% C$ i& K. A; q
  1414. Sound_Play_End
    : o  J) w2 [6 S$ Z5 \7 @9 T
  1415. JSR SwitchMainBank
    , ~* D  ?! b! k6 C' h6 b
  1416. RTS+ S0 x& p" m. D  M+ m
  1417. / t' ?( z3 p* d
  1418. ;==================================================$ [0 q+ Z" S" w3 o8 v/ w$ |' i7 E
  1419. .IF Music_Reset_Addr
    0 Q; M1 ]. N- l5 Q3 }
  1420. Sound_Reset;音乐重设(如果有的话)
    # v4 o, l0 _  o, ^5 ^) j0 N2 R
  1421. JSR Sund_Bank_Set
    " I+ }& R0 ?, b4 e& T
  1422. JSR Music_Reset_Addr
    % Z1 ]# O/ z- ?
  1423. JSR SwitchMainBank) v4 X: g5 G; y' ?
  1424. RTS5 c4 ?3 d5 o( i- I. n) ]2 d
  1425. .ENDIF& ?; m; X5 ~9 Z9 ?
  1426.   |: k. \) V% u8 c1 b) |
  1427. ;==================================================
    ! ?/ O4 }  Z7 E( D* V, D$ H" u1 b
  1428. MainLoop;死循环6 ^! W6 o- l+ S
  1429. JMP MainLoop3 h7 g* p8 w( x4 Q4 R" F( b" q
  1430. ) f0 X4 O- d5 _5 p( A3 z
  1431. ;==================================================: F# }# j7 D" B' J# M0 Y8 _. W
  1432. NmiProgram;Nmi中断处理
    / G# P- ]8 ^8 P: S" I
  1433. PHA
    4 j4 M1 T1 j( u0 {% S% J5 k8 z
  1434. TXA
    6 w; F2 r6 A7 O1 y& Z+ f
  1435. PHA
    & \" c0 C+ A9 F8 `* b# K' ^. m
  1436. TYA
    , Y4 J4 q$ e& S2 a# @6 U
  1437. PHA
    2 ]: q$ Y" R4 F. g6 L# e

  1438. 6 l  M0 m- A4 X4 j6 C
  1439. LDA PPU_STATUS
    6 q1 R/ A8 i; n: C# A& h3 p, r
  1440. LDA #$00
    3 R9 k5 s2 A8 b* _3 J9 p( W  u
  1441. STA PPU_CTRL
    " m& \  x8 ?. g3 p
  1442. ! W0 Y+ _& P+ L( |$ T9 M
  1443. ;切换主程序bank: q0 @4 |) h% [* K( T) j& g8 p
  1444. JSR SwitchMainBank
    - G  O7 _6 X6 v( U4 h! `5 H: m
  1445. " B* U) y4 L( @# q+ J/ N
  1446. ;NMI处理
    ( P1 h& A& m5 v0 H4 t# P' s
  1447. JSR NmiProgramProcess
    ; P" {1 z% Q! _5 A
  1448. - q* n6 [- J7 G% x# V
  1449. Nmi_Proc_End3 y* O" D: b9 c8 r( h7 D  U
  1450. PLA2 s! a7 I+ ~+ f  K# m* n
  1451. TAY0 ~* K7 |( r. q
  1452. PLA, x6 n1 ]+ q: E, w8 s* E3 m
  1453. TAX
    , l" |& _7 H: r% r6 B
  1454. PLA  V3 l' |, r2 u& U! u) P4 I/ J
  1455. : U3 @5 L8 z9 K5 J6 x% Z
  1456. RTI
    8 I- j( |+ [0 V. v: F

  1457. , B; u, J% `1 C
  1458. ;==================================================
    ; a. P7 r. t8 w1 m
  1459. ResetProgram;重置中断处理
    ( Y0 Y( U: U/ y( M
  1460. SEI
    ! ~/ A7 w: K! T6 D4 r
  1461. CLD& {; y" i$ `# s3 F' U9 T
  1462. LDA #$00
    1 _- e# T' }0 ?  g* n, b6 a
  1463. STA PPU_CTRL
    + j. o* ]4 f+ N: B1 d
  1464. STA PPU_MASK
    0 O$ |4 i! U  e- C

  1465. + G  X0 z! z) d+ a2 u- I
  1466. JSR SwitchMainBank5 |* @% }" q/ k; _5 |
  1467. JMP ProgramBegin5 `' }8 H# u. j9 i
  1468. 0 \, m' g7 v: @& t9 X: X& G
  1469. ;==================================================9 {7 Y0 t6 R+ W5 a" A8 A
  1470. IrqProgram;Irq中断处理/ V0 s2 `+ b5 O* L- o- y2 X
  1471. RTI
    3 j! s0 H1 m1 b0 x5 I! p
  1472. . B! y; s2 M1 F, a) k) o
  1473. .IF SOUND_BAR_SHOW_ENABLE$ |; R) ^+ w. v, I
  1474. .ORG $FF80& a4 U( D0 T% }( {# t7 e
  1475. STA $4000,X
    9 `7 J6 h7 m! P9 H3 i3 N
  1476. STA Sound_Bar + $00,X  }2 y' o' p: E
  1477. RTS$ V" w2 h: ]: d6 y

  1478. 4 l; t" B0 e6 k3 C
  1479. .ORG $FF88
    ( S/ \: i$ G" G! Y0 g
  1480. STA $4000,Y4 L& e7 l5 X; H( d  A
  1481. STA Sound_Bar + $00,Y
    # O# K. m2 B$ q  V3 H
  1482. RTS; i4 S2 N" _& ^

  1483. 4 ~1 H9 J! z8 P% b! T& Q
  1484. .ORG $FF90
    3 c! N0 j2 y0 I4 o. H
  1485. STA $4004,X
    2 c0 H: P4 n- o' k8 ^4 v
  1486. STA Sound_Bar + $04,X
    " e5 j& K" s, q- p
  1487. RTS. l& b) @6 c8 d* r0 B0 Y! h' U
  1488. + h+ R8 Q# F) {1 H/ w# [
  1489. .ORG $FF98
    $ ^8 h  _3 E3 p% O1 ?, g
  1490. STA $4004,Y
    ' J( l1 |' N$ K% z& g3 H
  1491. STA Sound_Bar + $04,Y
    6 p& _6 t' K, }& _
  1492. RTS
    ' j! ^4 G& ?7 H; M: u0 k/ h4 n8 e
  1493. % R! H$ [- `! {
  1494. .ORG $FFA0
    8 B+ K( A6 b/ S9 u  }- \0 B
  1495. STA $4008,X
    ' O. I, c/ R0 t
  1496. STA Sound_Bar + $08,X( z9 \/ |, ~# p" U' e: a4 x$ b7 i
  1497. RTS
    # h" _( g8 H, C" ~! `8 t

  1498. / |  v( d% z. H) \. k
  1499. .ORG $FFA8
    , V6 D2 _1 y7 J2 |; @* h
  1500. STA $4008,Y
    5 p# o5 d' R. d" W5 ~* S! o' l3 \
  1501. STA Sound_Bar + $08,Y; |& C4 O7 u" G; g- ]( o3 P6 |
  1502. RTS( l4 q$ {6 k* r5 ], ]; I5 P6 U9 V

  1503. . n8 K2 \  M# A. y0 v& _/ }+ L0 H: `
  1504. .ORG $FFB0
    + H( y& x) Y! t
  1505. STA $400C,X1 d' l& Y  Q1 \: {4 D* H
  1506. STA Sound_Bar + $0C,X& n  K: _7 U7 H" ]( _
  1507. RTS
    . X" f* X4 L; ~" ^2 V7 }6 D

  1508. $ @  O' [7 `* B8 T" q( X
  1509. .ORG $FFB8
    ( y6 P8 `8 p1 r) J+ x" s1 d! u
  1510. STA $400C,Y# F7 j7 ?% C# _% G. ~, B& M
  1511. STA Sound_Bar + $0C,Y
    " j: Z- t  O# ^3 |, A: h% R7 Q: F* [
  1512. RTS
    7 ]: k1 d" K2 w& g

  1513. ( D: ^  `/ V6 \
  1514. .ORG $FFC0
    ) h& V9 \5 N. T; o: E3 M
  1515. STA $4000
    . D- g5 ?; _' \4 S7 {4 D
  1516. STA Sound_Bar + $00
    ) F1 h5 x  w4 S/ x" w
  1517. RTS
    - w/ e/ a. B7 E) i

  1518. # c1 W3 Z: o" U5 @/ i
  1519. .ORG $FFC8
    ( u. N) K- \+ G) K; @$ Z
  1520. STA $4004
    - `2 m  O3 l8 `. L4 N  H
  1521. STA Sound_Bar + $040 U& T, `/ E9 I: q4 C3 r$ H
  1522. RTS! }  r1 e9 |7 I

  1523. 8 D1 @" N( L% l: p: a+ k
  1524. .ORG $FFD0
    8 i9 r# g9 r6 w6 Y1 G/ g
  1525. STA $4008
    2 s4 ~9 I* V1 g, S/ Y+ z
  1526. STA Sound_Bar + $082 k! p$ V& P- Z8 w
  1527. RTS
    0 h8 G. b; ~2 ?3 \

  1528.   H' t$ U: k3 u" w" H
  1529. .ORG $FFD8
    " R7 L0 x1 x* T3 c, j; B
  1530. STA $400C
    / G- u4 i9 l, h3 G
  1531. STA Sound_Bar + $0C
    / \8 Y( z% S) p' f1 E. f
  1532. RTS6 ~+ g# e; m8 ~5 ^

  1533. 3 g/ a  T6 ~3 ?3 {5 E3 }. L& r
  1534. .ENDIF
    9 ~- ~9 ]) K9 J8 D8 p
  1535. ; m, u# Q2 m" S& q' T! X
  1536. .ORG $FFFA
    4 H2 [1 r* o" i1 H
  1537. .WORD NmiProgram
    ; }5 r: S. V( I/ J) q
  1538. .WORD ResetProgram
    4 X+ V# I. E0 G; }- v
  1539. .WORD IrqProgram
复制代码
, O3 I: Y% y( p8 g0 t
. Z8 d2 [. r9 }7 c- ?; J
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1271 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3264 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-20 02:15 , Processed in 1.102539 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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