设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 + K/ i* M4 b! C+ S' L/ ?

* a; u- u$ b& w0 Z1 |% J1.魂斗罗
+ w  w3 C4 S! P2 @# {2.超级魂斗罗
! L; j# M- J# H% {: M9 s3.赤影战士
0 E; [" m- O8 p* m4.忍者龙剑传2
$ o/ V0 X. u! F4 m  p/ M7 m0 K
2 _+ H- S8 W2 x7 e- ?: T/ o4 e4 r7 V% `
$ l  Q3 v7 W3 O# X2 ]8 A

9 c$ E2 h* _3 `# ^$ a源码:8 O1 X7 X7 K7 |* X! k3 i- t5 y" k
  1. ;[FC音乐][播放器模板]9 `. N0 Z5 S( A  V/ k
  2. ;FlameCyclone 20230710/ f" k4 G* j6 n2 o4 ?
  3. 2 E  E0 O, k' _! J& z$ Q, z
  4. ;文件头
    * P9 y& X7 x% X# w* C- C' F
  5. ;======================================================================
    6 j/ g4 d6 `& V( a4 P
  6. .INESPRG 4                                              ;16KB PRG 数量
    " ^3 P2 w6 U: N" t. v) O  g7 q
  7. .INESCHR 0                                               ;8KB CHR 数量5 L0 O4 N  ?, j! Q$ @
  8. .INESMAP 4                                                   ;mapper 42 t' R4 K/ f- d( {) b
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直0 c" h& v9 s: E- l" q2 ~) K! P
  10. ) ?; O6 P3 }/ o4 Q* Y, \
  11. ;==================================================6 N; ~+ b( z* Z9 B
  12. SOUND_BAR_SHOW_ENABLE       = 1" u6 u5 S9 \1 o  `; _" _, W
  13. ;==================================================
    8 t5 Z% L4 Y3 r# n# r/ s
  14. BANK_DATA_MASK              = $07+ h' z9 z; f, H3 r8 A2 \) A" F4 x' z
  15. ;==================================================
    : ?6 @8 ?; X5 ~7 U. b
  16. SOUND_DATA_BANK_0           = $009 Q% W5 Q" N  J1 x- I& P
  17. SOUND_DATA_BANK_1           = $014 \/ S9 _% R' G$ m5 l
  18. SOUND_DATA_BANK_2           = $02( o9 A: Q0 T9 a( c  ]( l2 k  H
  19. SOUND_DATA_BANK_C000        = $06
    6 k2 l) P, D$ i0 `8 ~# i: p. E

  20. 6 c, ]' V/ s: i" B
  21. ;-------------------------------------------------
    0 B# b$ C5 r1 P5 s4 F
  22. CHR_DATA_BANK               = $04: w  r3 f/ t- b* l5 X0 q0 P" s
  23. CHR_DATA_ADDR               = $A0009 h" [1 B$ D5 }3 R& D6 U
  24. ;-------------------------------------------------
    3 O8 b* M3 Q+ D$ J
  25. PROGRAM_BANK                = $05
    % u& {% x2 a' X' V9 {& r
  26. PROGRAM_ADDR                = $8000% Z2 a/ Y4 ]! w" m+ j0 U4 t# L/ [
  27. ;-------------------------------------------------
    $ b1 s, V6 @$ |9 a
  28. RESET_BANK                  = $07
    ( W  ?7 k5 c/ X3 W8 y: l% l
  29. RESET_ADDR                  = $FE00& J/ u0 H0 m" S% S# d9 j; N9 ?4 z
  30. ;==================================================" v# A3 @8 H4 o: Y' Y6 `) ^
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    . f, B% V/ E8 |; `! c% U  h
  32. Music_Play_Addr             = $813C ;音乐播放地址3 y9 K! r6 k, V* W2 N/ u5 c
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    . `) B. m! e) U
  34. ;==================================================* J+ _6 ]  O2 l+ f7 X1 D) p, D
  35. Music_Song_Total            = 039  ;全部曲目总数# T) G6 W' k9 B8 Q8 u0 X$ f! |' s
  36. Music_Start_Song            = 007  ;初始播放曲目
    + t5 }% a) }5 z0 \# C. g
  37. ;==================================================% K; `' x3 \% r
  38. * u, b! F8 F! ]8 h
  39. ;==================================================
    " w! k) E$ j* S+ |; A( o) m$ O5 r
  40. Title_Text_Pos      = $210D ;标题文本位置
    ; m  ^$ `( ^7 a+ D) P+ W4 f( _
  41. Author_Info_Pos     = $2284 ;作者文本位置
    1 O5 T$ u3 b; P7 j! H/ J: n
  42. Date_Info_Pos       = $22CB ;日期文本位置" [7 l2 K5 t) N4 |4 |
  43. ;------------------------------# `4 i" X9 _' j; ?
  44. ;------------------------------  [& o( k2 ~4 C( `1 j' j2 B; X" n
  45. .IF SOUND_BAR_SHOW_ENABLE' ~( B8 T, K* t4 c* P) ^  ?/ K$ p
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    ! m* j; O5 z$ A# G; j; i$ s  W  V& j
  47. Play_Time_Pos       = $21F3 ;播放时间位置
      ]. ]+ C% F5 o4 {& R* a
  48. Play_State_Pos      = $2233 ;播放状态位置! Z( t  M- x, {% F2 b
  49. .ELSE
    & E0 x7 J0 X: h' ?" ?( a

  50. , j2 l5 ~  ^" I, M$ L2 A
  51. .IF Music_Song_Total > 99
    . c: r9 X- o: N+ ?7 d: i
  52. Play_Index_Pos      = $21AC ;当前曲目位置  N+ a: ^" g2 N5 [
  53. .ELSE2 o4 s0 G% q1 A* ?3 [0 ]
  54. 9 d% o) a& Y# V. I: F
  55. .IF Music_Song_Total > 9' ]# e" D) h3 e% E: u: p+ z
  56. Play_Index_Pos      = $21AD ;当前曲目位置) @; W% @6 I+ E; h4 [, k
  57. .ELSE
    % L- _* W9 q6 v! G( i" X# h& W
  58. Play_Index_Pos      = $21AE ;当前曲目位置  n% t& S0 e' ]$ n8 A! B
  59. .ENDIF
    . M1 T  k/ t& G# ^- B, O+ N
  60. * h$ o$ ~8 R6 ^+ W# B" {
  61. .ENDIF
    2 P$ ^$ l/ `' G8 J$ a. |

  62. ! h6 v# r/ W' m+ g% Z

  63. - `7 E+ j/ p# K9 m: S& p
  64. Play_Time_Pos       = $21EC ;播放时间位置3 r* O7 D" y. I% ^2 ~! I& j2 C
  65. Play_State_Pos      = $222C ;播放状态位置
    7 n6 t0 E1 p3 e7 x5 ?9 A, i* S& C
  66. .ENDIF3 c) r$ d- p7 Q  q% c3 w- d
  67. ;------------------------------4 F  k8 ~; [4 I% E: D
  68. Track_Name_Pos      = $216B ;曲目文本位置
    3 D0 |  M2 g1 A# b3 A6 E5 L
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
      E  e$ {/ H7 Z0 m
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    " D% F5 @% Q; j6 q: b; {
  71. ;==================================================; y& Q  l4 v5 Q2 {2 g% @6 \# B
  72. Scroll_X = $00
    : u! }+ q: f3 O4 ~
  73. Scroll_Y = $06
    : i4 t, M  c+ k2 ^" b
  74. ;==================================================8 v3 a# K0 K6 G" E" N
  75. RAM_Cln_1       = $01006 Q( o1 R# Y6 v4 [. z- X
  76. RAM_Cln_1_Size  = $80
    & |8 |& b' V( r7 o1 ?
  77. RAM_Cln_2       = $00E0
    ( `7 h7 K8 Z: }& y, H1 a
  78. RAM_Cln_2_Size  = $205 O8 o$ t  X; R2 Y" A: K; v
  79. RAM_Cln_3       = $00E0! n. \9 n9 ^: v) r0 I  J8 G( d  P
  80. RAM_Cln_3_Size  = $20
    + e) [8 X- c1 N9 y$ D# `3 Z
  81. 1 }5 w* D9 B, z& |8 i1 ?0 [5 P7 S
  82. ;==================================================7 E2 A. c0 n' h/ O' D2 C
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    ; ^! ?. P2 Y* n, L
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    5 B! G0 u2 [# a4 b
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ; G3 j0 o" c' O2 z- @# V* Q
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    2 I/ S0 k- w- n& H. ^
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    3 T3 x4 }: Z3 ^
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 % P- H# ]% M/ I  Q5 [
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加  F! Q) `0 l" W/ {& X; g2 |5 E
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 8 I1 \4 A. i: k7 k
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存* W) `; M* M; m4 G. _( m
  92. APU_STATUS              =   $4015   ;声音通道切换5 Q& J+ T, [# G( z" b; G7 \
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通# k( i; e3 Y+ |
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通: W# D0 p6 r3 l# i
  95. ;==================================================# J' j+ ]" e8 i4 c" n$ h1 a
  96. MMC3_BANK_CTRL          =   $8000
    5 @3 P: Z8 c+ A7 f3 i
  97. MMC3_BANK_DATA          =   $8001
    8 x9 T1 E' c% N0 f
  98. MMC3_MIRRORING          =   $A000
    % C% ]0 i1 C1 a+ r6 d
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    - ?4 _) z& }, ]; S/ i+ P( W* B
  100. MMC3_IRQ_LATCH          =   $C000$ l% q8 Q4 t" X  P& i4 ^/ |
  101. MMC3_IRQ_RELOAD         =   $C001
    3 Z, G  |  ?* a: o/ h
  102. MMC3_IRQ_DISABLE        =   $E000, ]4 z: ~( R0 c7 }9 I
  103. MMC3_IRQ_ENABLE         =   $E001) o$ l4 G1 j7 e

  104. : d3 r# m  ?6 Q
  105. ;音乐数据块
    # P* t, @0 x' L6 F) b$ f
  106. % ^9 u4 p% n' u1 p  l- M* O
  107. ;======================================================================
    % V* ?2 g1 C: p9 `7 `3 Z
  108. .IF SOUND_BAR_SHOW_ENABLE% M% F) D4 i! l! g& P
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    , F# U8 v+ g8 u! }* U
  110. .INCBIN "sound_bank_bar/music_data_0.bank": x' g$ o& p" e8 l
  111. 8 B% I/ U5 l) l/ R* Z
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ! P1 r2 K' A, t8 S! q
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    ) k/ o/ V* n( i+ I/ `- ^6 d! i
  114. . X* R' h( @) Z% O% Y+ g
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK% I! K: p6 H$ |
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    1 h# v6 O7 j3 n8 L$ u5 i* f$ w
  117. 4 l3 S7 q& G& y/ Q7 |( q( q" R
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK( H: }* P0 F* ?. P
  119. .INCBIN "sound_bank_bar/music_data_3.bank"" q7 l' S* V+ ~6 `' `; f3 n

  120. 4 M' d! H+ [/ x" W# f' p/ z
  121. .ELSE
    ; d% b% a7 ?$ R1 |$ k
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    & l& i8 S1 E* ^) c
  123. .INCBIN "sound_bank/music_data_0.bank"
    4 d/ M! T- R. l9 |3 e
  124. 4 {! S. F, G$ O& {2 O
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK* F5 Z+ @) _" r. u
  126. .INCBIN "sound_bank/music_data_1.bank"
    , P& j6 C: `/ T7 U: D% i! Y0 N
  127. & a6 O* g* @4 O, B: J
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK0 u- a8 `. n' C% K
  129. .INCBIN "sound_bank/music_data_2.bank"' G) _, }( y% p2 L

  130. % l; z5 f6 g2 o- H
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    , K( O: z) Z8 M* A+ c
  132. .INCBIN "sound_bank/music_data_3.bank"0 x1 u/ C# h  m2 G- n
  133. .ENDIF6 d( L) |. s2 t& O4 n
  134. ' R% @& @6 e2 ^
  135. ;CHR图形数据; j9 z$ i. g$ ?/ L6 L. N8 ]. w$ p
  136. ;======================================================================) X5 c, J0 R% p5 p! W- H
  137. .BANK CHR_DATA_BANK
    + M6 R2 r/ b: ^. W
  138. .INCBIN "chr_bank/chr_data.chr"* \9 H  X4 A+ p5 G
  139. ' S; k5 R4 y  p6 X" R
  140. ;==================================================
    ' ^. I6 L; N7 U
  141. PPU_Addr        = $0300+ T' Q% n! Y& Q% \; ?
  142. Palette_Addr    = $03C00 k6 o6 {; \" n( A- q
  143. Sound_Bar       = PPU_Addr+$E0
    9 @% N/ T) ?# l# C4 |7 v
  144. ;==================================================
    ; m* L3 f  I( A" V
  145. Palette_Update_Addr     = Palette_Addr+$0D
    & B# J7 P* |. X. k' e+ e, T
  146. Palette_Update_Max      = $2C
    * p0 N6 E3 a: C# M3 ^
  147. Palette_Update_Min      = $21* e6 V1 J( e9 R7 T& U( k! g2 I; V
  148. Palette_Update_Interval = 605 j5 E4 C5 o' X( |
  149. ;==================================================
    6 v; }8 e- |7 ]+ ^! z. h
  150. Sound_Bar_Cnt       = PPU_Addr+$F04 f/ A9 d5 O- h8 F4 S' u
  151. Screen_State        = Sound_Bar_Cnt+$01% {3 f# u) ^0 M1 I3 }6 N5 o
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    3 o9 _7 k1 x* `+ g8 `/ F  c7 j# D
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
      H  A7 v# r3 u( G
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    # j. [2 G8 }9 z) `
  155. ;==================================================$ p$ b* J# j1 h. c8 y7 _# ^2 U! B
  156. Data_L              = $70; `6 w+ D& y. `) M
  157. Data_H              = Data_L + $01
    ( U- S/ X/ B& x9 V4 A8 m( E; J  C5 ^" d
  158. Data_Cnt            = Data_L + $02
    + l' B; X  M! n7 o+ O6 F! |
  159. Data_Buf            = Data_L + $037 W0 R" i! t: x$ _1 z: M: E  {
  160. Time_Wait_Cnt       = Data_L + $049 i  U" T# W/ X$ r
  161. Palette_Wait_Cnt    = Data_L + $05( h1 `4 O8 g, B1 I: }
  162. Palette_Update_Flag = Data_L + $064 z; g5 `7 G. M3 ~& {3 a
  163. Show_Track_Name     = Data_L + $071 A9 L/ n5 K3 S1 B1 A
  164. ;==================================================
    , r6 B' N8 U$ H% V  ]$ ]
  165. Key_Keep            = Show_Track_Name + 1
    , [# g- w' [1 k9 u/ t
  166. Key_Once            = Key_Keep+$01
    1 M9 c- O7 ^! l4 |! v3 L4 ]3 W
  167. Key_Kemp            = Key_Keep+$02
    . O. I5 t0 c" W0 S
  168. Key_Temp            = Key_Keep+$03
    + D3 a% ]7 ?! T7 j
  169. Key_Getv            = Key_Keep+$04
    $ r( S! H0 j* M" ?& s  `! z
  170. ;==================================================5 X: n6 O, S; c0 d- j" i
  171. Music_Cur           = Key_Getv+$01& h( J! _2 c. y6 s- C$ j5 a0 J' e
  172. Music_Last          = Music_Cur+$01. U- W0 D2 Y8 c3 C
  173. Music_State         = Music_Cur+$02
    5 v; U" S+ @* @, c; z; M: i
  174. ;==================================================
    0 F+ M  i  h% W4 D- x- e
  175. HEX_Data            = Music_State+$01
    # Y- L3 V2 `) M( G
  176. DEC_H               = HEX_Data+$01
    , d+ J# y7 e' H! n- y; U
  177. DEC_T               = HEX_Data+$02
    ' w. J3 b  |$ O3 y6 t
  178. DEC_L               = HEX_Data+$03/ g' S1 N# a! v: ?0 Q
  179. ;==================================================' E. g1 S7 L3 c, m2 O
  180. Time_S              = DEC_L+$01
    2 Z) n, {; U: Y0 ?
  181. Time_M              = Time_S+$012 N5 ~( y- H, F- B, J
  182. Time_H              = Time_S+$02! A1 _, z7 m3 ]9 C
  183. Time_Cnt            = Time_S+$03
    & g, C1 ^- e: z. l, J9 p
  184. % k/ E7 j- f! y8 L* `; f5 |
  185. ;==================================================
    $ t1 T1 G4 `! @+ X* f; l
  186. Music_Bank_8000 = Time_Cnt + 1' W8 i8 S" a. j9 G! [
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    - E5 O- B, {" k) k8 o+ ?: B
  188. ;==================================================4 k: W2 {- d5 E1 R
  189. 6 `/ w# @8 k2 U$ v( c
  190. ;======================================================================/ f- A5 K. }5 T) `9 q
  191. .BANK PROGRAM_BANK
    ' a7 s7 @" q7 ?1 `% K6 q; Z
  192. .ORG PROGRAM_ADDR  C! I+ t( W9 J# @+ F8 ?

  193. & |* p6 J: \$ q9 \
  194. ;==================================================
    5 A" |) q# i8 W6 @5 o
  195. NmiProgramProcess;NMI中断程序处理% n, @/ e5 t6 c+ j' w
  196. ;处理PPU图像+ w7 n+ n$ p7 z+ K/ r
  197. JSR PPU_Proc
    ) S3 |" m' l8 }4 {* G" {0 N
  198. - o# \9 H4 y& g$ O9 p. T3 u6 O3 w. k
  199. ;启用NMI中断2 \/ Q# U9 P7 h; S6 N+ x
  200. LDA #$80
    / b& W7 A) d& a9 Q& A
  201. STA PPU_CTRL- r: |0 f0 \& z5 @2 D
  202. 2 \1 E9 Q; z! G/ d; W( R# ]0 _
  203. ;更新调色板: c1 I# V' O; e- T
  204. JSR Update_Palette_Data, i: J6 h0 q( M& b  L) _
  205. & l0 H  |. [& U# K1 v
  206. ;显示时间(缓冲)
    / I6 \: g3 N# N9 P/ j
  207. JSR Time_Show+ u3 d! i/ A3 S. J0 n& u* g2 E# z
  208. : y; ^' p+ d  f8 I* l6 X
  209. ;播放计时9 D# f6 [( C% F1 ]$ `7 \
  210. JSR Time_Count/ @3 D2 h5 J5 h. E( e3 O" {

  211. , n1 u) H# G  k" X. }# ?1 o8 _* R
  212. ;播放声音0 f# M2 b/ }4 o" a( v" w
  213. JSR Sound_Play, j- W- j/ Y1 v9 |3 _' A+ B

  214. % x  L. K2 [( f9 q* {" E6 x
  215. ;切换音乐(手柄触发), U# t5 F; [. u/ ?. P( Z
  216. JSR Music_Switch, }( p  `: m- j4 x' `

  217. 0 i! z9 h/ e1 W6 D% @0 Q, H5 D
  218. ;音乐显示(缓冲)
    ' a/ g8 X& i9 c. r. N! n! C% l2 ]% z
  219. .IF SOUND_BAR_SHOW_ENABLE: ~' l8 o) s! t
  220. JSR Music_Vision
    / x/ f. j+ E9 z' }9 D1 F" U
  221. .ENDIF
    $ |$ G; y+ o2 m4 [9 X  `2 _
  222. $ |9 h5 {8 {0 V7 q8 k2 K- b
  223. LDA Time_Wait_Cnt
    # ?) E1 X$ W+ @* J$ Y
  224. BEQ NmiProgramProcessEnd
    9 P# c' G5 a) K' O3 h
  225. DEC Time_Wait_Cnt
    : b  w$ _+ t* l* \1 {" }
  226. NmiProgramProcessEnd* {6 w4 w' C6 u% @0 t
  227. RTS
    ! A) e$ {2 z6 A* ]3 [3 m* I
  228. & |5 s9 H+ U5 E9 k2 ^% j& h/ x
  229. ;==================================================: H1 |7 ~) j1 |1 f3 K3 k* E
  230. ProgramBegin;主程序2 p2 G  {3 V" H
  231. LDA #$00
    ) m) a' q; Q5 P# n  j
  232. STA PPU_CTRL
    9 ]7 U; S0 O& e6 X5 i
  233. STA PPU_STATUS
      g( `! {' g+ Q" N3 ^, w
  234. STA PPU_MASK
    6 h8 d' a' K* @% C# O- B0 Q0 c; V
  235. STA APU_STATUS+ x! Q  w5 |+ n; S. ]6 v! G( p* G4 N
  236. STA PPU_SCROLL  }# F+ D. z- o
  237. STA PPU_SCROLL
    / E. S  y2 i/ |4 ]
  238. LDA #$C0
    ! H7 |9 d; R* v) ~
  239. STA JOY2_FRAME
    # s4 E5 P% n3 G

  240. ) \# @9 R/ r# A4 ~) e; B; h. n
  241. LDX #$FF
      B( Z6 J. R2 ?* w1 L& U5 h2 l/ W6 H
  242. TXS
    % R) g% z- c* e( p- h
  243. LDA #$00
    0 b1 f% s' u+ ~/ t2 m9 L9 j
  244. STA PPU_CTRL
    ! y! n1 ^8 `0 X' q8 K
  245. STA PPU_MASK
    - J. s) l7 h: [% B
  246. STA MMC3_IRQ_DISABLE6 h# v' R. C% u! p
  247. # m8 D' u4 e" l8 Q: L. w9 K; E
  248. ;==============================& L5 E: _( j5 R9 O3 p: `& S
  249. ;调色板清空
    * u  m- ]# x3 A9 v
  250. LDA #$3F" [+ f, t7 x% G. N2 c. w( ]) P/ E
  251. STA PPU_ADDRESS$ h6 O2 n( @# w' d
  252. LDA #$00
    ' U" T7 |9 r& R( z# u
  253. STA PPU_ADDRESS
    ) {" Y3 h( k6 f1 b4 p5 N8 {
  254. LDA #$0F
    1 G. k8 s3 F8 t- W% ^, q+ T6 D
  255. Palette_Clear: w9 T( Q3 V' o7 J) T4 D+ ]+ T7 \
  256. STA PPU_DATA
    5 T) X& u0 A/ Q3 @  f
  257. INX4 a4 h) [2 o4 _9 `) H
  258. CPX #$20% X% |8 p) T! v; i
  259. BCC Palette_Clear
    ) Z; ?. K. F2 h# [7 t
  260. LDA #$00
    $ B* d) j: |3 g8 ]/ X
  261. STA APU_STATUS
    # l9 D- ~  W: ?
  262. ;==============================1 [% G3 Y! E6 S4 q
  263. ;初始化背景调色板4 H7 Q' O' u, n) k1 _4 L( q
  264. JSR Set_Palette_Color2 c5 q' s$ D" ]/ \
  265. JSR Set_NameTable_Attributes
    6 Q) W# Y+ p2 t0 D* B1 ?2 \
  266. . @& J5 g7 W4 v# u) W9 V
  267. ;==============================
    % F' n  P9 X9 c
  268. ;RAM初始化
    5 E! G% }- d6 P1 [
  269. RAM_Clear_All0 W7 ^/ g4 ]& c+ Z/ @4 D! l
  270. LDX #$00* n' `; Q! }: F, W' v
  271. LDA #$00
    - ~1 y: r7 [, }* P6 }: }+ E
  272. RAM_Clear_All_Start
    6 Q0 n7 }- e: w9 t% {+ ~
  273. STA $00,X
    ) J7 D1 A! e+ D( A) i4 H( P: u
  274. STA $0100,X
    0 h( x/ x/ N$ k( h/ |6 ?
  275. STA $0200,X. B) _% ~6 J5 K$ P6 V
  276. STA $0300,X) g. B: g/ h: m# ^  D$ p
  277. STA $0400,X
    1 D4 ~  p& G! s+ f9 j; L& @  b
  278. STA $0500,X" Q  U8 D7 h, ]* E) S( s- T6 p5 I
  279. STA $0600,X
    - u/ y/ {: j2 U- u' |8 J, i- d
  280. STA $0700,X9 l5 N" {, f2 `9 Z! h. ]
  281. INX1 M; \4 J1 @8 x8 V1 V. M. s, m; ^8 Y9 F
  282. BNE RAM_Clear_All_Start# A$ D/ ?2 C7 N

  283. # W* ~, B* Y4 g4 V/ z/ Y$ d
  284. JSR VramInit, R; a+ i4 i* ^, ]
  285. JSR Init_Palette_Addr
    7 |: ~- j4 _; `9 P- S, o

  286. " y  ?& Z' v6 N: H5 B: E. W7 {
  287. .IF Music_Reset_Addr6 W: g1 s5 w& M: Q
  288. JSR Sound_Reset
    0 `% z" f8 l& X2 `" h
  289. .Endif" L. Z/ n8 f0 q1 Z; l/ t- j1 @, Q

  290. 4 p. {* M5 `# A9 h
  291. LDA #Music_Start_Song-$01
    7 T; a1 J& O7 r8 F& C# f2 Z
  292. STA Music_Cur7 x' |+ K  d. Z1 Q5 J/ g$ Q

  293. , A9 H0 R8 u; Z1 k5 X/ m2 x
  294. JSR Show_Music_Text
    ( D( ?4 O8 M/ N$ g

  295. + Q9 U* }6 E1 i
  296. .IF SOUND_BAR_SHOW_ENABLE
    : H: i% Q/ Y, m+ j
  297. JSR Sound_Bar_Text_Set) R: i( I. c; Q' `% U
  298. .ENDIF2 b. s- G& ?. _3 s$ T; c/ K

  299. 5 O% k5 X. W9 ^6 F$ U
  300. .IF Track_Name_Pos
    4 B" c/ Y! W% P. _) a5 U
  301. JSR Show_Track_Info
    0 k  Q& _0 X8 {' {# _# V2 c. I; o# T
  302. .ENDIF6 @/ G" g5 [+ |* K$ }
  303. 6 y+ B3 l3 l$ X! a8 V8 l% Z
  304. JSR PPU_Proc
    9 e( I# k6 [' a
  305. 0 C! L: j: J; @4 b6 [0 {5 d" s
  306. LDA #$0E! v3 \0 c5 z9 @6 l1 B2 l
  307. STA Screen_State
    & ~6 [7 z) v% X7 m1 J

  308. " v. c6 _/ p" A, X. W+ W0 \" X
  309. JSR Sund_Bank_Init5 E0 E  L5 \, P: z" o7 ^0 j
  310. : y) F# N9 Q4 N4 O0 p( J
  311. JSR Music_Show2 n5 R$ G! z6 C6 L5 m. H2 |
  312. JSR Time_Show1 }* @  X$ d, f$ R9 |8 h1 z
  313. JSR Music_Stata_Show' \/ U  @! ^$ b9 y) i
  314. JSR Time_Delay6 Q: h1 ~3 z8 {4 h& s  I0 c
  315. , S9 b* B6 S! Q* N. @

  316. ) e; z( }1 x1 n) Q$ w
  317. LDA #$80/ f/ q0 s! _( W9 |& x0 M8 b# K
  318. STA PPU_CTRL' f( K; i" R8 H0 {
  319. + s# u2 N3 v! a8 T, T
  320. LDA #$20
    * K6 d2 s/ A2 e; c4 n: G$ G
  321. STA Time_Wait_Cnt$ E: J! z2 W3 W3 Q5 Y, l9 y

  322. ! w" P! v5 ?7 v8 p+ ~) K2 B! q4 C
  323. Wait_Time_Over
    3 d' h1 X# L6 D; ~. q
  324. LDA Time_Wait_Cnt5 c8 }/ w9 ]5 i! w$ l  A  w
  325. BNE Wait_Time_Over
    * B( I- Q* Z% [4 @' F

  326. * T2 D4 i2 z5 O# W
  327. LDA #$1F
    1 ]" a* a: n/ a% X, u0 l
  328. STA APU_STATUS/ t5 c) E  a, j5 i
  329. LDA Music_Cur0 |: J8 H/ ]- A- n8 h
  330. JSR Sound_Init8 p. p: [2 G; ?
  331. 6 Z% V: F% \; G
  332. JMP MainLoop
    5 z2 x& m  F7 y7 p+ }* I
  333. 2 F5 p' T8 r% p7 Z: B
  334. ;==============================4 N* r, p+ R4 R$ c  D7 K- E8 E3 d
  335. Time_Delay;延时等待
    ) v$ G; D8 O4 ?8 Z1 a
  336. LDA PPU_STATUS9 _* Q. _# n! p7 R4 _
  337. BPL Time_Delay4 U- E4 h8 S  N
  338. RTS9 q8 h) U: b; o: Y+ @' U5 n4 T5 S

  339. 2 B6 n" N% x; L3 r# M+ O" w$ S
  340. ;==============================
    * j: n) Z- b5 R
  341. VramInit;初始化图形内存! |, x3 b# I, ]4 @0 o4 m$ b
  342. LDA #CHR_DATA_BANK, H6 L4 O" l% y4 s& q  h  }
  343. JSR SwitchBankA0000 t; k9 \; c/ ]* o1 y1 r
  344. LDA #LOW(CHR_DATA_ADDR)4 W/ q4 C; E  s7 q3 _1 J, X
  345. STA <Data_L
      l. d4 L5 n' }) e. K0 S- t  e$ Q
  346. LDA #HIGH(CHR_DATA_ADDR)
    5 T$ a& h) D7 i, Q) l4 p9 n, G
  347. STA <Data_H
    ' @: @% p, b' G$ G5 [
  348. LDY #$00
    ' g- H# u6 @$ O! Q& ~
  349. LDX #$20# j- ~) U6 \& T8 c5 i$ |" ^. P* n3 s: r
  350. LDA #$00; o. ]$ {  I7 S) `! f! d! m; \
  351. STA PPU_ADDRESS! x3 P! |/ E6 {7 T  p3 g
  352. STA PPU_ADDRESS" M. N) d5 q3 K5 y# w7 _
  353. VramInitWrite, N+ M/ u1 x: e* R
  354. LDA [Data_L],Y8 F1 J( Z# t  e8 _# a3 t; X
  355. STA PPU_DATA( M/ l2 R' \7 J. P# n) j$ W
  356. INY' b) l9 w" o, V
  357. BNE VramInitWrite2 R# d! j2 k+ D$ A/ U: b( e
  358. INC Data_H
    3 l1 q, M! E4 i6 u9 {# Q* z
  359. DEX8 M1 h7 S3 a4 a) e! F7 D& w1 \; k& [! U
  360. BNE VramInitWrite/ n) I! |* y% o. {: a& k
  361. RTS
    - J: [: K" }5 P, B* G7 |! g0 U; f$ `

  362. 8 C; h9 ]* F+ b  v& Y* j
  363. ;==============================
    , W7 c0 h6 T) ^2 P
  364. RAM_Clear;RAM清除
    3 H& A. e# H4 N+ M
  365. LDX #$00( M) e  L5 J- i0 u% l
  366. LDA #$007 A. U( u# l7 s7 Q& v7 _2 z+ m2 D
  367. RAM_Clear_1. `: g) M. O* _  Q8 M7 D
  368. STA RAM_Cln_1,X; v( t4 t7 h+ ?0 w
  369. INX
    0 C  M+ F' R! e$ F/ K( W, I
  370. CPX #RAM_Cln_1_Size
    1 l5 u; U$ c, o# I1 q4 ?
  371. BNE RAM_Clear_1, o! [  z! Z0 O. p' s
  372. LDX #$004 A8 o! O4 G. o' J
  373. RAM_Clear_2' W9 q$ j# y; n  ~  s
  374. STA RAM_Cln_2,X# H( h5 [% Q7 ]7 D
  375. INX
    ! Q% s4 b4 T: _4 D9 \
  376. CPX #RAM_Cln_2_Size# X2 C" g$ N( u2 c
  377. BNE RAM_Clear_29 C' f8 ^0 Q; N
  378. LDX #$00
    8 r6 F# `$ [7 h$ a
  379. RAM_Clear_3
    * k7 f1 k2 q/ G
  380. STA RAM_Cln_3,X6 M0 c5 [* K0 i4 L
  381. INX
    , U3 p2 p6 D# v
  382. CPX #RAM_Cln_3_Size
    5 E: f; K4 t. d6 x
  383. BNE RAM_Clear_30 X7 o' v3 M5 z2 c5 |2 P$ }  s
  384. RTS; F+ Q/ J' @; e4 V) u* E
  385. 6 ^+ i4 P- f, T" N1 Z
  386. ;==============================2 w. R+ \6 z" p0 J# }+ E
  387. ;音乐切换: m- [( |3 E7 J+ l  e5 P
  388. Music_Switch: G( o( t& n  t6 N' v8 q, N4 `
  389. JSR Key_Proc$ t1 R  B$ x; W# |. b
  390. LDA Key_Once4 e8 ^1 P; T  Z1 x/ p* x% t6 A1 x( H
  391. CMP #$10" S  T2 L! l* D; @, O
  392. BNE Music_Start_SongStop6 [+ J+ |7 W$ s( b9 ]& ?  B' |
  393. JSR Music_ReSet
    & U8 c" [/ y7 n" b! ~
  394. & m6 n2 F9 I6 @8 [' k* H' g6 M
  395. ;音乐停止3 c! I2 t" \* h, i* M; i- i, b
  396. Music_Start_SongStop3 j/ @- i% w* x8 M
  397. LDA Key_Once
    8 Q8 a* g$ k  e6 E3 O
  398. CMP #$20- H7 ~7 I. A% N! V4 m. T* |
  399. BNE Music_arrow
      m. J+ }' K# W" ?
  400. LDA #$01
    : u& }' o! M2 z8 ^3 Y! l$ ]. T
  401. STA Music_State& m3 V( [8 z" o# R* q# H. P* c
  402. JSR Music_Bar_ReSet
    8 ]$ N' R* Y9 b$ w' y7 y
  403. JSR Time_ReSet. r+ s1 f4 ?3 G% ~4 G
  404. JSR RAM_Clear
    2 V: D  U" X# h8 `
  405. JSR Sound_Clear
    + a/ z7 w: b. S0 E6 h2 ^) u& x6 U
  406. JSR Music_Stata_Show
    ) {/ H9 ~' {) N- X4 m6 O4 G2 V' `
  407. Music_arrow
    ( \+ \, ?$ [- e  A
  408. LDA Key_Once
    6 u# y# G1 q- T7 ]
  409. AND #$CF, k  |1 N# c' W, O7 T, r
  410. BEQ Music_Switch_End
    / s# x: G- X( g& C
  411. JSR Music_Number
    8 m1 c3 C0 P+ R0 r/ z( p: A
  412. JSR Music_ReSet: G& V* x$ H$ O
  413. JSR Music_Show" n  F* {+ ?& x6 S" L
  414. Music_Switch_End% x! }# R* J$ w$ D* `) C$ f
  415. RTS: n, D/ d' c! a0 e
  416. % o6 ]+ [8 U7 ?; v' Q
  417. ;==============================
    " t5 H+ F1 Q( a
  418. ;音乐曲目切换) X5 U# ]; }: y9 ^
  419. Music_Number$ E: R7 r" A0 h: }3 r# s
  420. LDA Music_Cur
    . g" Q8 x+ y$ M' A3 [/ u
  421. STA Music_Last% Q% h4 T9 [2 {5 {
  422. Music_Decrease
    $ ?% y8 |0 R: R7 h4 A8 t9 |
  423. LDA Key_Once& J) r' A2 h3 b4 |% H
  424. AND #$42+ ?7 y+ E$ W1 H+ K4 t: j
  425. BEQ Music_Increase
    3 M! `6 c/ ^  `- g, T! Q
  426. LDA Music_Cur& Y. y- [/ d0 ~
  427. BEQ Music_Increase0 y3 V$ J. D  J# Q8 l- {- h
  428. DEC Music_Cur, j% t9 O2 _$ B* M1 n5 z
  429. Music_Increase2 w3 K5 d8 r! o% D- [, U8 Y
  430. LDA Key_Once' B- N5 X. a. [0 c* o7 R: _) N9 m
  431. AND #$813 O' E# u- U$ E) Q2 y6 _
  432. BEQ Music_Decrease_10
    + ~2 Q4 K8 k! C: u
  433. LDA Music_Cur& m% o$ ]- J- `& W4 a# c" D" d
  434. CMP #Music_Song_Total-01
    6 y9 z8 f8 w; g
  435. BCS Music_Decrease_10
    & B- C$ J* N% ]6 j
  436. INC Music_Cur# H' k* d: _; G6 v# H
  437. Music_Decrease_10
    4 r5 F6 z5 K1 J4 u8 `
  438. LDA Key_Once' K: J4 C4 }& u. @! o, c
  439. CMP #$04+ F4 u* F( y7 V, m; `+ H
  440. BNE Music_Increase_10* _% b# u. b1 b7 P
  441. LDA Music_Cur
    : f8 d. [7 ]# c
  442. CMP #10" G, m2 C$ t# K  c. e& q: N
  443. BCC Music_Start_Song_Min
    0 t' q% k6 N+ N. U5 y+ `( }0 y! m
  444. LDA Music_Cur3 H% t. b1 K8 J) _& M; Y8 a
  445. SEC
    # Q" I0 S  l, e  ]% v- D8 B
  446. SBC #10& `. q( z3 ~9 J1 k3 p! N, P
  447. STA Music_Cur; R! w1 Y, c, F9 `$ K$ z1 M
  448. LDA #$00+ m( i% A, E6 r
  449. BEQ Music_Increase_10
    2 C) E  k1 Y- P2 {
  450. Music_Start_Song_Min
    5 Q9 z8 W  d! h# f
  451. LDA #$00
    ; V3 O! X# F, v4 u% c" ^
  452. STA Music_Cur; f+ k- t- G8 g) r2 |: m3 z6 S
  453. Music_Increase_10
    " j- q: v; T7 Y1 Q  G) |
  454. LDA Key_Once: i, d7 S5 t# c+ w
  455. CMP #$081 ]! m- a3 R; X; S/ m8 y+ y: f
  456. BNE Music_Number_End" T; L- L, b2 n
  457. LDA Music_Cur+ z, o1 r) G" J) c
  458. CLC
    / T% _+ |! e' W7 c; y- O. S
  459. ADC #102 C% S  h( }: z# e% c
  460. CMP #Music_Song_Total-01
    3 Q7 l; \# x& |- T8 o
  461. BCS Music_Start_Song_Max8 p* H; i6 a. r2 V# q8 H) [+ t  c
  462. STA Music_Cur
    ! a: y; s$ C( y0 R, W! `- j3 w
  463. LDA #00
    $ I1 U) W9 G; O, ]: m
  464. BEQ Music_Number_End# k( @6 Y: y& z% Z
  465. Music_Start_Song_Max8 P) _, D7 \' Z0 e6 E+ J
  466. LDA #Music_Song_Total-01: b! S! j4 h3 n* B" G
  467. STA Music_Cur* F9 Z4 e- M1 J; p4 F) x6 B) }
  468. Music_Number_End
    % G" |" S7 s; b2 @& j% F& Q) \
  469. RTS1 f( a# u$ M3 }1 o

  470. + I" j, \" |: g( L+ r
  471. ;==============================
    % v8 f: f5 Z  p: j3 S# I" R
  472. ;音乐重设
    1 ~) K3 l$ D2 q& ?
  473. Music_ReSet
    1 W: P; O0 d1 u: b' z
  474. JSR RAM_Clear- c- d, i: W6 @% q3 m& D0 ~
  475. JSR Sound_Clear" F& B4 ~! O3 P$ o) d
  476. LDA #$1F
    $ w* [! S, D3 \4 {2 Z9 j
  477. STA APU_STATUS5 c: R5 C: q9 v2 P4 ~8 D2 B
  478. LDA Music_Cur5 G+ a8 T. n( g
  479. JSR Sound_Init# `2 O" ?1 \( L5 n$ I
  480. RTS
    / h$ p% Q/ X( h$ u; G

  481. " f$ `! ?+ x1 n2 {+ p+ y
  482. ;==============================
    . `: \0 y/ U& h5 p. l, d2 i( i
  483. ;音乐端口清除
    1 u  U1 y; q  N, p3 a4 f3 O$ w3 s, Y
  484. Sound_Clear
    ! S2 q8 c2 p/ p1 r* J: R9 d
  485. LDA #$00! T' \; S+ D# z: h3 w9 k1 p
  486. STA APU_STATUS1 B- b9 L: q8 k* E; D/ \
  487. LDX #$009 Q  X% g& W4 b* S; c" e" u
  488. Sound_Clear_Start
      `/ C7 ?  n5 C: `
  489. STA $4000,X
      A) g& Y! M% ~
  490. INX5 Y! L9 y" X' |, C4 p
  491. CPX #$14  U6 x6 j5 {% A1 P4 E- @9 v
  492. BCC Sound_Clear_Start
    2 P# U- a6 m' t
  493. RTS) g& k2 |" n+ @: l9 z0 f
  494. * j! b+ h: l/ H1 |% N! S) V. X
  495. ;==============================
    ) n; Z5 B; h, z9 @* l/ y2 d/ h
  496. ;按键处理. V8 p6 m+ d  A6 ]2 W2 m9 R
  497. Key_Proc4 X1 D0 {# L7 L4 ]0 \5 ]* B( t
  498. JSR Key_Scan8 h" w2 z! j: R7 A5 O0 K
  499. LDA Key_Keep
    ! p* s# n, {+ Q7 }5 ^) C
  500. STA Key_Temp
      a% H4 ?. d  y" f0 R% I
  501. JSR Key_Scan
    , C. n9 W% {, P' Q
  502. LDA Key_Keep* w  G% O$ o+ I
  503. CMP Key_Temp
    ; j0 \1 W) ^* B" K
  504. BEQ Key_Get_Once
    - o5 J# Z  Y" ~: |& `+ x* m
  505. LDA Key_Kemp
    7 D8 ]" A. U+ c2 {
  506. STA Key_Keep+ ^$ ]4 ?, u# s$ q0 p2 S2 {1 N# @
  507. Key_Get_Once4 w0 f( a/ v2 ~# i! }0 w
  508. TAY
    7 t& l- q5 H- }* p* ]$ B1 O6 x2 Q4 u
  509. EOR Key_Kemp
    9 P9 |2 i; z  b& F
  510. AND Key_Keep8 m. k1 \+ k0 Z
  511. STA Key_Once
    7 S% l% P  z; @  I2 z' F
  512. STY Key_Kemp
    6 Z* M6 x7 O$ g9 E8 N. g  R' i
  513. RTS
    6 n5 a8 K7 P. I) c* y8 D" _
  514. ;------------------------------
    6 C( r; J, D; [2 m& w0 R/ M
  515. ;按键扫描
    " @  ]3 l  ^4 p! ?9 p4 }
  516. Key_Scan6 y" V% D0 A" ^5 U7 }
  517. LDX #$016 d0 J& B/ l; d3 [* h' B$ ^1 s% G
  518. STX JOY1_FRAME( S! Y6 G  z9 u  b: A2 }
  519. DEX
      F! B* s$ \+ a
  520. STX JOY1_FRAME$ Y# K6 ]1 p2 x. S% i
  521. LDX #$08
    8 p$ V6 U' Y0 [/ \
  522. Key_Value
    ' u$ \& n+ A" q* Y% u
  523. LDA JOY1_FRAME
    : A1 D9 }0 m& {5 U
  524. STA Key_Getv1 V2 V; E& N0 ?5 C! K
  525. LSR A
    " ]1 R) L2 {- Y" }  [, ^
  526. ORA Key_Getv" f: h0 T- p7 A5 j9 {
  527. LSR A
    6 s5 j7 i: A' F9 |: A$ p2 q1 [
  528. ROL Key_Keep4 U1 k  S- v8 I0 ~( r# m  W5 J
  529. DEX
    5 @' G. _2 d2 s7 H# K5 Q# p9 S/ x
  530. BNE Key_Value
    7 C( C8 K4 \, G" t0 a- n) S
  531. RTS
    1 n# }, \' [: |
  532. / s3 v& C9 X9 e+ m& y
  533. ;==============================8 ?4 M1 n% U3 G* C4 i7 o
  534. .IF SOUND_BAR_SHOW_ENABLE% K, A$ b# V2 i6 \
  535. ;音乐条显示
    & p# o* Z( I) |! e  w
  536. Music_Vision7 e$ V' Q' ~2 N, e# V) c2 M
  537. JSR Music_Animation
    - i4 ]4 [- ~" u
  538. JSR PPU_End
    2 Z, m3 \- V3 t1 B$ V, |& q0 y
  539. RTS
    0 s# S4 X# A1 ?
  540. ;------------------------------) Q' {$ l$ N+ D& B/ E
  541. ;音乐条显示处理
    $ W$ ~9 F7 N' Q3 F9 B5 N& o
  542. Music_Animation
    % q4 K' e7 O( z, j8 ?, L8 i
  543. LDX PPU_Cur$ G" I  R$ R) ]6 J! I2 O
  544. LDA #Mode_Line
    9 W; e3 I9 N5 {4 Q+ A
  545. STA PPU_Addr,X
    : H* z; }) O$ r, q! c% H! q
  546. INX" _8 J: W& ^8 i0 X7 Z; d
  547. LDA #HIGH(Sound_Bar_Pos)
    / k) j) G8 D8 q4 A" u: n
  548. STA PPU_Addr,X5 r; ?( q1 |; h9 @1 U6 l
  549. INX
    , R; R( v  U: Y8 N( h
  550. LDA #LOW(Sound_Bar_Pos)' ^8 C0 e8 J" [) O/ U" O5 N
  551. STA PPU_Addr,X
    - A# f. @$ F7 {4 _
  552. INX
    ' C4 E" ]1 K# J
  553. LDA Sound_Bar$ B& _: y# t! O3 i/ l' c; k& p8 Y
  554. JSR Volume_Convert
    : }$ j$ W$ `  e* q
  555. JSR PPU_Return- ?9 }2 k2 O" P; r0 n
  556. LDA Sound_Bar+$4
    9 o8 b  R: ]: T8 K# W9 T. @0 L+ {
  557. JSR Volume_Convert
    , C0 A3 G4 ]* r, G6 u5 {0 y
  558. JSR PPU_Return! M1 r& h  D2 \! l3 I$ Q
  559. LDA Sound_Bar+$8  q  j& b9 c8 j2 ^, r' x% B
  560. JSR Volume_Convert_Ex
    $ h8 o* g! H7 m  c/ P
  561. JSR PPU_Return
    3 ?- _2 ~3 o! q! X; {) D; V
  562. LDA Sound_Bar+$C$ N0 Z6 `$ M) x1 ?3 i
  563. JSR Volume_Convert
    - Q3 j% i. S& N$ G9 ]
  564. JSR PPU_Return* X4 V) w: @3 r) j
  565. LDY #$10
    % o0 {2 a2 m8 [
  566. LDA APU_STATUS6 p4 M" C5 @) X' q0 F0 a0 m
  567. AND #$10
    - ]1 r8 k5 ^# W' K
  568. BNE Volume_Count
    4 `' t' B" o/ H9 i* r% w) J; t
  569. LDY #$006 e" x: |- ^, y4 e) D
  570. BEQ Volume_Count8 g9 N& N+ r' f: a
  571. ;------------------------------- \! C& a! ]) i/ V8 Y
  572. ;音乐条处理0 o1 s  x% O& T& x2 Z$ H
  573. Volume_Convert_Ex
    ; y9 |# U- i( B; \  n# x) f
  574. AND #$1F
    7 H- c+ @' |/ i, ~. W# z+ n
  575. TAY
    8 y  Q2 t! i! E- w. R: v
  576. BNE Volume_Count! U5 ?  b; N6 ]: e0 O2 i
  577. Volume_Convert
    8 _5 j* f4 f% B2 u
  578. AND #$0F- n  @9 `# k  \6 K
  579. TAY/ e) x, P0 w# p" q
  580. Volume_Count/ C/ m  U# ?! Y
  581. LDA #$08
    6 d9 t; w; W, T, S: {# f
  582. STA Sound_Bar_Cnt
    - a3 }) ?% ^7 K. w
  583. Volume_FILL
    ) r8 ?) K& y$ c5 m! [$ w
  584. DEY7 f- i( B3 N  w$ w# x5 Z) Z0 o6 K
  585. BEQ Volume_Half
    % R6 {+ Y3 s6 u8 ^
  586. BMI Volume_Empty! o$ w. m4 P: Q- g3 a/ C) ~- G
  587. DEY% B9 S& j/ b8 p, I/ K& x
  588. Volume_Full% k- E5 E5 V" F
  589. LDA #$16* Y6 P9 q3 }! W$ N
  590. BNE Volume_PPU' c) [1 D( E- P% L5 n5 `3 K
  591. Volume_Half
    ( M- H0 m. ]; F, Q/ v( c/ K
  592. LDA #$15
    6 [; n5 x3 e8 X' }$ j
  593. BNE Volume_PPU6 {- u- j* W( ^0 W' |
  594. Volume_Empty
    & x( e$ d( ?0 s. ~( ]# y% t: \& _2 U
  595. LDA #$14
    . Q" J' d7 Z5 p
  596. Volume_PPU+ @* F0 M4 S$ R: i
  597. STA PPU_Addr,X
    ! t7 J* b5 w  l+ E+ }+ e4 _
  598. INX/ i# }  p4 X' x
  599. DEC Sound_Bar_Cnt1 _# N1 _+ N8 p7 G* N
  600. BNE Volume_FILL* ?1 M, Q7 M: i) s+ S( k- B
  601. RTS6 V) _) `. |& F4 L
  602. , ~5 e* l- ]' k1 y9 F
  603. .ENDIF
    " p& {, r, ]2 x0 O+ a

  604. ( {! ]6 s" S7 j$ G; g# r
  605. ;==============================
    1 g9 @  w- J% M* O6 x" x
  606. PPU_Addr_Set;PPU行开始* y% T- h- J/ `4 a
  607. LDX PPU_Cur
    & x8 k2 K8 P2 L
  608. LDA #Mode_Line
    # j4 Y+ _: o' ^, p  N) ~
  609. STA PPU_Addr,X
    + s/ G0 G0 L2 k# |
  610. INX
    ) D) W6 `" x. |1 E: E. [" o
  611. RTS3 a0 Y6 ]: e; t2 a0 Q' P: r: t
  612. 7 b8 C* d' ^+ l2 b2 }% [7 q
  613. PPU_Return;PPU转行( N, U$ f5 H9 G( ^% k
  614. LDA #Flag_Over
    ( F! J7 E5 v3 A. U
  615. STA PPU_Addr,X- }# X0 e7 @2 r. p# Q3 C
  616. INX
    : ~4 i7 N/ u1 }" q0 t) G
  617. LDA #Mode_Return
    + e( u8 Q7 Y4 F8 u! n4 ?& s, k
  618. STA PPU_Addr,X
    & q0 ]/ E2 T; A" O/ o. q
  619. INX
    # ^9 [  m/ E/ n4 q" A7 }5 D
  620. RTS
    5 o) c. A8 X- k% W
  621. + Y! E0 q/ e. g! B7 M4 O
  622. ;------------------------------2 q9 @" }# b' W
  623. PPU_End;PPU结束9 x9 ^8 \9 O6 L4 d- u0 B$ t' g
  624. LDA #Flag_Over
    # L" Q( Z, V( Y/ U" u: r
  625. STA PPU_Addr,X
    3 M( `. F/ O5 w! n0 R
  626. INX
    * y8 b5 E% [9 l! g3 x& b2 }9 q% p
  627. STX PPU_Cur, I5 ?$ U" u% `* s/ G; T: f
  628. RTS
    1 c5 ~* w1 D; r2 t7 I  h
  629. ;==============================( X& f* o1 m5 p. B# k  m1 d
  630. Mode_Line     = $FD    ;新起行模式
    ; g  L: G, E; A" s% q
  631. Mode_Return   = $FE    ;转下行模式8 \; X3 O6 Y* V6 e/ w
  632. Mode_Clear    = $FC    ;行清除
    0 s1 a, p8 Y$ B( H
  633. Mode_CntLine  = $FB    ;行计数写入4 t; g* |$ R/ A- k- d' n% `8 @
  634. Flag_Over     = $FF    ;行结束标志, u: N, |4 ~. o% m

  635. 9 p& ]7 }: x& }
  636. ;------------------------------
    ; D8 Z' \- ~$ Y! v
  637. ;PPU处理) j& L) F3 E/ t
  638. PPU_Proc6 y0 {8 k- {3 |  P1 C& A
  639. LDX PPU_Cur8 a0 I7 V& h) Z$ _2 V3 T
  640. LDA #$003 j# _- F. U3 y9 k# Y
  641. STA PPU_Cur
    6 R7 o6 x# V  B$ D1 ?7 [# u
  642. STA PPU_Addr,X+ q3 R+ c& p& B6 L9 @) \/ M
  643. LDA PPU_Addr* e( S, d4 s3 g7 W( M
  644. BNE PPU_Proc_Beg
    8 S9 r9 N" u9 \, k" U2 G5 ^! v
  645. PPU_Proc_Ret4 v9 M) m# E  T7 w, H
  646. RTS9 j1 X  ^$ A0 N& N$ t
  647. ;------------------------------7 z- O# _4 E0 ^: j8 R" d
  648. PPU_Proc_Beg  ;处理开始
    . M7 y2 ]) J7 Y  ?( f+ h) \8 h
  649. LDX #$00; {5 I  e+ D. K. R) }, c7 A
  650. STX PPU_MASK9 l, K1 L0 p: k+ f# g( D
  651. ;------------------------------
    2 v- `; t5 L. i# p6 U5 d. L6 a% n
  652. PPU_Mode_Select  ;模式选择
    / H3 M5 j9 k  h6 f- J+ z2 ~
  653. LDA PPU_Addr,X5 W$ @, M) d9 B7 ~/ A* R$ W* h
  654. CMP #Mode_Line: `; {/ I8 @$ |1 E
  655. BEQ PPU_Mode_Newline
    * s  l2 w$ e4 |* |% Z
  656. CMP #Mode_Return
    ( l& M0 f+ p9 f& m
  657. BEQ PPU_Mode_Return8 J% e. x/ l9 I
  658. CMP #Mode_Clear
    ' H1 k- H% y0 d* ?* }
  659. BEQ PPU_Proc_Clear
    - j2 u3 o7 G( [& I4 q8 c* G" g4 L
  660. CMP #Mode_CntLine
    9 e+ L, O6 `8 l$ F- r
  661. BEQ PPU_Proc_Cnt_Line* Q. P8 k3 L* ^/ u
  662. RTS9 l  `+ Q2 G5 x- d+ R7 _- j
  663. ;------------------------------" ]2 N( ]4 @, N' a; }  _
  664. PPU_Mode_Return  ;转下行模式4 m+ J% n3 C8 M
  665. LDA PPU_Addr_L
    4 W+ R( P  `* x  t3 k
  666. CLC
    " H/ x5 S+ n6 V
  667. ADC #$208 _0 A3 i- S* i4 d; k7 y% H
  668. STA PPU_Addr_L. O" D9 B  Q- x  q: b& q, A
  669. BCC PPU_Return_End& O) \6 b4 t% ?1 c) g% ?1 u
  670. INC PPU_Addr_H
    7 }& ]' ]! ^4 S$ `
  671. PPU_Return_End
    + F3 G4 e/ w9 C" o! _8 @* y
  672. JMP PPU_Set_Increaser8 y3 n" B) B: T; P" t3 c8 m) I' T! r
  673. ;------------------------------
    1 V- |2 B. f6 E1 j
  674. PPU_Mode_Newline  ;新起行模式
      ]! I4 H" d7 H% F* {: Z7 R
  675. INX
    , u$ H/ c! K6 y, _- M3 M0 {
  676. LDA PPU_Addr,X
    4 e4 t2 @: Y. p- y
  677. STA PPU_Addr_H4 x0 }/ l& E9 n) M
  678. INX0 p1 A" B7 Q+ }7 [
  679. LDA PPU_Addr,X
    % Z: K# ^8 C' z
  680. STA PPU_Addr_L
    - f- A7 V2 h! I/ r5 _. |0 Z
  681. ;------------------------------% i- x9 d9 B; t4 M; R# D
  682. PPU_Set_Increaser   ;设置写入地址, o7 G% t8 D+ X0 z( h
  683. LDA PPU_Addr_H' L/ x2 ^, N+ y5 v$ b+ \
  684. STA PPU_ADDRESS
    1 m' ^' T- O. J$ x4 M
  685. LDA PPU_Addr_L: M. j+ f! t! n" j, D
  686. STA PPU_ADDRESS$ b( w+ K* ^/ Y8 @
  687. ;------------------------------0 ?4 J2 k1 R; o7 G8 i) }
  688. PPU_Write   ;写入数据
    7 w1 K# b0 _3 z" f: W9 B+ [
  689. INX
    1 h4 F8 h" W, X2 \. I( b
  690. LDA PPU_Addr,X) O( \( Y3 G: S1 h/ z* r) h6 A
  691. CMP #Flag_Over7 Y$ j2 R. Q  V5 h) m
  692. BEQ PPU_Proc_End
      x4 u4 z7 J7 C( g
  693. STA PPU_DATA1 h% a4 _: w# _* F
  694. JMP PPU_Write
    3 P4 n* A3 @0 G- b6 c/ M
  695. ;------------------------------5 h& w! a* e7 ]8 `
  696. PPU_Proc_End  ;单行写入结束
    ! F5 V/ m' x* P' _
  697. INX3 g, H, |- A  b* C' F0 H
  698. LDA PPU_Addr,X
    ; v4 G+ G& x- y5 H( {
  699. BNE PPU_Mode_Select5 B0 w) u" M# ^  I9 Z+ T2 m
  700. STA PPU_Addr4 M0 e6 D  r9 ?% T! {+ C
  701. JSR Update_Palette_Color0 M+ B! F+ g/ l5 i+ T  y
  702. LDA #$00
    & r: O. S4 S( u$ [( O
  703. STA PPU_ADDRESS
    , w8 ?1 q8 Y0 @/ B9 C0 a1 L) U
  704. STA PPU_ADDRESS
    ( e$ L2 b+ W; d
  705. STA Show_Track_Name2 S, r+ H6 I. B. I& k' O2 r/ f
  706. LDA #Scroll_X
    7 p2 f. \+ L+ u. K$ g
  707. STA PPU_SCROLL5 g& w1 \! t& C; S6 Y7 T
  708. LDA #Scroll_Y1 v! S& X2 t5 D* u; c4 ^- C
  709. STA PPU_SCROLL
      h$ K# g1 [2 n& [
  710. LDA Screen_State
    4 @; J8 b3 j- |3 ?1 x4 D) L
  711. STA PPU_MASK
    & l, w  b  O' S6 t
  712. RTS
    0 D/ j  @+ |* V7 t# a3 |, l
  713. ) ^/ z$ K) H. t( x$ i7 b
  714. PPU_Proc_Clear
    0 P9 `4 G7 \/ p2 ~5 F
  715. INX" h/ S) X" B; h. `7 v
  716. LDA PPU_Addr,X
    ! Q" s4 W2 c* X# S2 L3 F
  717. STA PPU_ADDRESS
    : P# L8 \5 w" h0 R: r# J# Y
  718. INX
    9 l2 d7 _4 s, h, ]8 R
  719. LDA PPU_Addr,X9 X& s+ h$ E  F- ~& \- o$ [3 ~/ q
  720. STA PPU_ADDRESS+ B* D) W: L. _0 P1 y8 d
  721. INX
    4 Q3 S2 z+ w7 N% ]
  722. LDY PPU_Addr,X* @) t+ G* O  t# Z" N+ C  O- {
  723. LDA #$00
    8 G# A7 w  [/ R% J
  724. PPU_Proc_Clear_Write; U3 c" W" r% ?( O/ _2 i% u9 f
  725. STA PPU_DATA( i" s% T& V2 ^1 W
  726. DEY
    % Q' J: V7 @2 z% J
  727. BNE PPU_Proc_Clear_Write
    / x# ]/ c2 K5 S2 @7 t- s
  728. JMP PPU_Proc_End
    $ E# c; o( a6 Y6 }. a  [0 ~
  729. 6 P9 F$ |8 \, ~6 @
  730. PPU_Proc_Cnt_Line5 Y3 ]- D' u8 M
  731. INX
      M* c, T, q# J
  732. LDA PPU_Addr,X! k9 A# K( v# v% p
  733. STA PPU_ADDRESS
    / F4 _" N( F. n+ x% U
  734. INX) A  x8 A2 e+ m1 ]' a; f7 z
  735. LDA PPU_Addr,X7 F0 V1 r9 r1 j& g2 K' O. x
  736. STA PPU_ADDRESS
    + u) C  p- `/ D
  737. INX7 S! X% S$ k, ^  @1 u
  738. LDY PPU_Addr,X8 b( R8 Y) v7 ~! @. i( V# V$ s2 Z; ^
  739. PPU_Proc_Cnt_Line_Write( p7 `1 u3 n  D% a* t
  740. INX
    8 ?. }+ P  O& t" x+ b2 I9 f9 h, \. y
  741. LDA PPU_Addr,X: h4 ~' F* B/ S" P/ m
  742. STA PPU_DATA) ^7 U! O7 x* q1 {9 ~
  743. DEY1 h( \' c9 _- l9 o+ l% i) Y
  744. BNE PPU_Proc_Cnt_Line_Write
    , `- ~' m5 d. o
  745. JMP PPU_Proc_End
    6 Y8 x. R3 d( @2 W; N. D
  746. * L: \3 l# k6 O$ v- J% R
  747. ;==============================
    ) y* g2 {+ e/ q5 _2 n# q' s# Q% N) `! p
  748. HEX_To_Dec;十六进制转十进制& f# T4 k( ]' _; N. d
  749. STA HEX_Data. H, E3 a, ?' G2 Z$ U% W3 c
  750. PHA+ u- d4 ]- n8 h
  751. TXA1 y  H; ?' d! s2 e/ h/ z
  752. PHA8 b8 d, t( C% n6 }, V! T9 h3 T
  753. LDX #$00. R/ _  K0 M1 q0 c
  754. LDA #$00
    : E* |5 d  t1 U& n3 ?0 c
  755. HEX_Cln
    ; I# w% Q0 n' |* k, }( ~
  756. STA DEC_H,X
    / @' U( I3 ]  L) h6 i* m7 g
  757. INX- d* F4 a$ b- e0 v- z7 g4 S
  758. CPX #$03
    & B( n: a4 O3 p# r8 o" W; k& ~
  759. BCC HEX_Cln3 Y4 q! `" s7 \0 r" `$ Q
  760. LDA HEX_Data/ z1 d6 y* C% f) i
  761. ;------------------------------
    * c4 ~) L5 Y0 k+ C+ Q1 n% x8 D+ T
  762. HEX_100# r5 e* y5 O$ @
  763. CMP #100# P) }7 C% L( C8 l9 S5 V7 C
  764. BCC HEX_10* Z3 I. @! u# l0 g0 A3 ?
  765. SEC4 ^  A" Y/ d) S" Y0 w  V5 o
  766. SBC #1004 e7 i4 y8 E' P& Z4 F( K
  767. INC DEC_H
    ( ]0 j2 |  O; g+ B$ x3 n
  768. BNE HEX_100
    : i( P: q6 _" i2 }/ t4 c, c
  769. ;------------------------------
    7 v6 M$ m& G7 f- Q- Y. _
  770. HEX_10
    8 D: @5 X/ n# ~5 L2 l  f! i
  771. CMP #100 c2 M$ [9 X" A2 B7 N
  772. BCC HEX_1! x; f3 _1 @* k- x" L' U6 `
  773. SEC( k2 j: }9 y! h( L! }9 ~9 [
  774. SBC #10; E' M% B4 E8 b+ h; w; H7 c4 H: b
  775. INC DEC_T, Q9 A" E+ H* i, J/ w
  776. BNE HEX_10
    / J4 v! z( ^$ W5 L
  777. ;------------------------------
    " t$ g& \1 t6 d  |
  778. HEX_16 O0 ~0 K/ ]6 O0 `' f
  779. STA DEC_L
    4 \& \  p# b% {6 y) i
  780. PLA
    + o$ L9 A4 @/ C. R# S; U/ o( Q
  781. TAX) @7 }9 \0 s5 o& X' x1 g
  782. PLA. k4 I! F9 m! P
  783. RTS" S# b" _- w$ S4 N+ f

  784. 2 E0 ]* P' W( ]& z: n
  785. ;==============================
    2 ]& S/ n0 m( K; I# G
  786. ;音乐曲目显示0 z5 H' I5 h( u1 Y7 G1 O5 f# y
  787. Music_Show
    ) y- T  S5 D/ `  }% S
  788. LDA Music_Cur" g% S/ `! }+ C
  789. CLC
    5 ]5 }* a; f2 c' {
  790. ADC #$01% |1 r: i& k+ ?( |; B3 S* q
  791. JSR HEX_To_Dec
    ' T; K3 i2 Y$ O- D# j' L2 w; M
  792. LDX PPU_Cur! w' l& [% r5 u/ F3 a1 N
  793. LDA #$FD( q3 _$ H9 o1 M, S9 Z
  794. STA PPU_Addr,X  A/ L/ b& v4 i5 X& q
  795. INX! J! d  O8 Y9 k* ?: B3 x" c
  796. LDA #HIGH(Play_Index_Pos)
    # z/ j! G0 A- ^6 a5 s6 |1 F
  797. STA PPU_Addr,X
    / v. i2 Q) }* f  ]. s3 Y. O
  798. INX
    " u, [4 ]  S/ v: s$ b( q
  799. LDA #LOW(Play_Index_Pos)
    & b/ K, |) c+ v7 A( p6 i
  800. STA PPU_Addr,X2 d& }; I9 A1 Y  l/ [
  801. INX
    ' A. a/ k6 s; T" z; _, g

  802.   w1 G4 }! ~0 g
  803. .IF Music_Song_Total > 99' x4 t7 h6 }" O* Y( i9 n
  804. LDA DEC_H, j- z  n9 ^3 T. E" v, y+ n. i3 a7 [
  805. ORA #$30. R7 g' }" n5 h/ m/ \; h0 M
  806. STA PPU_Addr,X
    * i6 D& W- E2 v) H: v9 U; W) W
  807. INX. D  B& G8 i8 y! \8 ]7 \
  808. .ENDIF
    . \1 Y9 N* x( y( O9 V

  809. 4 E2 h5 j. A: L0 g, A
  810. .IF Music_Song_Total > 9
    , n% z/ z* J! f( M6 y1 {( ]2 w5 H
  811. LDA DEC_T
    ) s, s: X; B+ O
  812. ORA #$30
    8 ?# y' U2 N1 `% P$ n3 q% r& H8 a
  813. STA PPU_Addr,X( Y. z! L& D1 r1 }
  814. INX
    6 E2 E: k* j6 ~. |
  815. .ENDIF
    % {: k) `2 a4 S
  816. 5 I0 B/ v( c& K; B
  817. LDA DEC_L) x8 i: Y3 U* ?6 u
  818. ORA #$309 ]( O0 q4 N5 T) @; l$ O
  819. STA PPU_Addr,X
    2 a8 _, N, R6 h( _" r/ A
  820. INX
    % X* q, D+ ]. h; w/ Z$ B& i

  821. 8 _3 K; n; B, u: z$ Q
  822. LDA #'/'
    2 g( l/ j4 N8 T
  823. STA PPU_Addr,X& s6 \; N& l$ v2 ?, g- B* g
  824. INX' |- _9 ]% e( {  r& A
  825. Music_Show_Total: S5 o, K+ \* l
  826. LDA #Music_Song_Total. u, ?) l' X: }7 s/ i. n5 \
  827. JSR HEX_To_Dec
    - h+ z% \: Y9 N0 A9 h( {5 \0 M

  828. 3 _6 s: F7 ^. e
  829. .IF Music_Song_Total > 99
    * R! _1 `* a' w% R) `
  830. LDA DEC_H
    $ ?4 Y( \* u/ s+ G; b
  831. ORA #$30* O; d0 }& m7 Q2 Z  m/ j7 a6 f" D
  832. STA PPU_Addr,X+ X3 \* i' C, t. ?) [# w
  833. INX
    ' m( T  R$ }$ s  X7 S; X; y
  834. .ENDIF
    3 C+ w; _- l+ _  W7 W. _, d( R
  835. 6 `: X$ N! p% M! B" h
  836. .IF Music_Song_Total > 9
    9 e" z0 j/ t. C$ N# c
  837. LDA DEC_T: a' z, |  Z) ^$ [- x/ a% V
  838. ORA #$30
    7 [& f8 u  T  i/ X4 h% z! w
  839. STA PPU_Addr,X
    ( G/ x. Q& l9 \
  840. INX
    # e! K6 p. s: z$ ]+ t( A
  841. .ENDIF5 H: B. P, t2 z2 X6 Y

  842. 9 b" \& p! S* B& f" E
  843. LDA DEC_L' O' C* A& v5 d" R6 F1 |
  844. ORA #$307 ~3 z9 b. I( _$ A  O% u- O
  845. STA PPU_Addr,X
    ; V4 A) Q: {) x5 x9 ^' G% `  {4 @
  846. INX
    2 v8 E) r, s6 ]- Z- ]. f  B
  847. # O! N1 `$ s: T5 F: w
  848. JSR PPU_End0 Z# c" @+ S( _9 J; |( i* l- L1 {
  849. Music_Show_End
    : _5 y% Y5 ?. L( a. U1 s
  850. RTS
    8 n' f: ~" [" ^+ \2 t5 E2 H
  851. ' B% l- Q- ]7 E  K" h0 I$ _+ S6 u
  852. ;==============================2 C* X8 v& y+ u/ C8 Z
  853. Time_Show;播放时间显示
    1 V3 S. T0 o+ p4 ^9 [$ X% N" s% j1 S
  854. JSR PPU_Addr_Set
    1 b: V% {) Y& j7 M/ F- ]  M$ x
  855. LDA #HIGH(Play_Time_Pos)
    % E9 `2 a& t% g: M0 n
  856. STA PPU_Addr,X3 U: p$ {0 [. H
  857. INX
    3 M* y% q0 T2 O1 o9 z. N2 J& k& L6 D
  858. LDA #LOW(Play_Time_Pos)3 \( @- F7 r2 n0 d4 c' S* v! U0 {
  859. STA PPU_Addr,X
    + @) q$ T; B) C7 _! j+ r
  860. INX
    7 i4 U3 I! |$ n0 _3 E2 O2 }6 W; ?' }
  861. Time_Show_H8 U4 D' q7 O% q, e/ x5 q$ C+ s
  862. LDA Time_H% p6 g* |) I) O/ I
  863. JSR HEX_To_Dec" m$ w( i* S/ {0 n1 V
  864. JSR Time_Digit1 z: D6 X+ m( V" F5 I: k3 L. _& {& L( Q
  865. LDA #':'+ M& ~5 ]2 n( @! `
  866. STA PPU_Addr,X
    + O4 h$ Q4 @9 |5 V5 W) C3 J
  867. INX
    " q: Z( K2 v+ B0 J" L; Z
  868. Time_Show_M+ K6 r/ E2 V! O4 n  m4 c
  869. LDA Time_M
    $ }! I. d) W- C- T- z  @
  870. JSR HEX_To_Dec+ d$ _8 O# p# E
  871. JSR Time_Digit
    9 [. p, U1 g; o" f8 Y5 Y0 s- h7 N
  872. LDA #':'3 f/ G7 {$ y) c# Z$ ]+ U8 |% V
  873. STA PPU_Addr,X
    $ o7 {* n& e, A" x( D$ z
  874. INX
    7 [. t/ ?+ B/ t1 ], w" G9 ?
  875. Time_Show_S/ m6 x* m- f! w/ c: P, q0 Y
  876. LDA Time_S% U1 Q% C7 m/ I7 T3 o. \1 N
  877. JSR HEX_To_Dec( P* F& B4 l- k# k8 B1 w
  878. JSR Time_Digit! M- ^+ B& E5 l) j" I7 W
  879. JSR PPU_End
    , m/ @1 q! Z, Q2 P8 v
  880. Time_Show_End
    ) F, I; y! A: j9 j4 V0 x
  881. RTS8 t9 k5 Z4 {, l& ~
  882. : N7 k" b& ~$ ?. c
  883. Time_Digit
    / a# I. O' c. X  u
  884. LDA DEC_T
      T$ p) X  o) Q# z2 S2 u0 N; h6 ^
  885. ORA #$303 @8 D4 d. F% S' w$ E
  886. STA PPU_Addr,X7 R: w. }7 C1 V
  887. INX3 z+ U5 ?2 T) n- i3 _6 T$ S! q
  888. LDA DEC_L; U' q+ s  c" W3 N, n' N
  889. ORA #$30& I- B- N1 ?  v' r# ^1 Y7 N+ [
  890. STA PPU_Addr,X) d5 P; a. a  Z  k; I
  891. INX
    1 Y& }7 f' V! x7 Z& j
  892. RTS6 z  l2 ~: C  g) E! ?: s8 j. j

  893. 4 O. B* r7 \- N
  894. ;==============================- u9 f* g2 N0 W2 n& J
  895. Time_Count;计时
      w. b: i% C. w$ ^0 E3 Q
  896. LDA Music_State
    * {( z( B  C: u
  897. ORA Time_Wait_Cnt/ j  B' \) ~6 q7 L, b" k
  898. BNE Time_Count_End
    ; p+ J- L/ @6 i/ z& G' e2 c
  899. INC Time_Cnt- o  W& i+ `# P% m$ m
  900. LDA Time_Cnt, K' [+ u# b2 r% `  u
  901. CMP #60
    7 a9 F: a+ V" J" `2 R
  902. BCC Time_Count_End( c* _" S6 X1 a$ |8 N5 s
  903. LDA #00. F8 F* X" O8 x5 C' q
  904. STA Time_Cnt0 d  @# _/ v' T% _
  905. INC Time_S; L, M( A0 Q! N1 f6 q( m+ c. v
  906. ( N+ B! q0 }: m" c1 V2 h
  907. Time_S_Cnt
      S' K1 i$ r1 X9 [) p4 R
  908. LDA Time_S1 A& Y! l: \$ A6 M/ o$ L
  909. CMP #60( E5 Q  J1 _8 x7 c2 |( G
  910. BCC Time_Count_End, Y$ t1 F4 k' z, o
  911. LDA #00  ]5 j& f) A2 }, g3 m. }$ i' z
  912. STA Time_S1 i  N0 n; ~* i+ ]
  913. INC Time_M
    $ ^8 h3 I% o$ V. a; c4 r6 P1 ^+ E8 ~* w

  914. 6 V9 J& e# {2 s3 v, o
  915. Time_M_Cnt
    5 e; y- @; {& C2 b# Z! x7 ]
  916. LDA Time_M
    3 A, M* y. M4 t* Q/ m( J
  917. CMP #60
      L. d/ C7 g6 [- Y* v" M
  918. BCC Time_Count_End
    ' d- x! K8 h! {" N. n4 X7 Q& n
  919. LDA #00. Z0 s+ F' z$ p6 ~9 K6 O
  920. STA Time_M
    3 f" @% P& V" ^6 N" t1 ?$ d4 T1 _
  921. INC Time_H3 D/ R9 e6 |* ~8 y( K" s  H) S. `

  922. + ?8 R+ W" {6 x7 @. e) f
  923. Time_H_Cnt% i5 y, L1 ]4 {- t
  924. LDA Time_H
    : W$ A. I) m2 v& `
  925. CMP #24
    ! e6 J3 Z5 ?* W
  926. BCC Time_Count_End9 v- b( Z/ u" v' S
  927. LDA #00
    3 a8 p! A. x* g
  928. STA Time_H1 I1 K0 J# X8 j
  929. + w, c& w( B+ g( R
  930. Time_Count_End4 `# ]; ~9 c: b! x
  931. RTS
    - a* e! p! J  r' d2 W( H3 i

  932. 5 |( s' u4 s# d* Q
  933. ;==============================# h6 x/ `3 L1 ?
  934. Time_ReSet;播放时间重置) l% }3 \4 ]( q" F+ Q
  935. LDA #$00! d6 {" ?( [* z0 r
  936. STA Time_S
    4 c- ~; X! I- e8 n, A) P
  937. STA Time_M
    ) A% n1 d5 Y% Q
  938. STA Time_H
    0 R; u3 x  r1 R; v/ @
  939. STA Time_Cnt8 |) J& T! o) ^& G
  940. RTS+ M# _4 E0 d; H. I) c4 f% |: K

  941. : G4 Q) H4 ~6 L  N
  942. ;==============================4 {" U# n) i! z7 O; x
  943. Music_Bar_ReSet;音乐条重置
    . |, N9 G6 T7 K: n* l2 T
  944. LDA #$00
    ! Q* g/ P) Z3 k1 ]4 R
  945. LDX #$00) q7 i( V+ j+ b% L4 H
  946. Music_Bar_ReSet_Set
    5 C. u+ [: f) r2 F- T- k8 ?7 ^6 r5 m
  947. STA Sound_Bar,X' n4 F! v2 I9 p, e
  948. INX( k4 T$ Q7 t  V0 C- T( V! C& b
  949. CPX #$10- p1 a) o5 ~- f
  950. BCC Music_Bar_ReSet_Set! f: o; `5 H9 M" s( H' F+ j
  951. RTS5 M" i' i: q8 ^  ?3 g. g# X" K6 s% K% I

  952. 9 Z: {: [" I# o
  953. ;==============================
    ) w# N; z& h+ s! G* E3 H
  954. PPU_Data;PPU数据写入
    0 Z8 B* J" s0 \) A4 A! o# S( e7 o
  955. STY Data_L4 q9 w5 c6 q9 A* t4 m- a: ~
  956. STX Data_H
    * Q& O5 f; _) T: p/ n) X4 t( H! J
  957. LDY #$FF
    3 K$ ?, P9 ~/ @+ I% ~' R
  958. LDX PPU_Cur
    : r/ |# B4 K! ?. t7 D
  959. DEX
    / `7 t! d& Q3 O; u
  960. PPU_Data_Beg
    / y& ]1 t# c- a! [& Z# T7 K
  961. INX
    2 G3 v; ^  z% q$ \- e3 j
  962. INY
    + g2 O  Z% u. v  u! q: u" x% H- L
  963. LDA [Data_L],Y
    ' B" F0 |8 F' q& |
  964. STA PPU_Addr,X' z3 g  t3 D8 o  q3 p( R4 s; B
  965. BNE PPU_Data_Beg
    ) e6 }8 O4 c/ ?) h: E; j
  966. STX PPU_Cur/ p1 [) b8 }) t2 V
  967. PPU_Data_End
    ! U3 S/ ]. A, A* S) e
  968. RTS) M: q, U, G% X" s9 ?) R, T# c

  969. ; t$ i$ I1 L4 |4 ]: ~
  970. ;==============================
    / u2 _" q( B9 T/ V- v: {
  971. Music_Stata_Show;播放状态显示# r/ N' b  L( H2 m9 e
  972. LDA Music_State
    6 O7 ~/ W6 u, Q& s( W
  973. BEQ Music_Stata_Show_Play
    * k! d2 @5 Q* I' T" U
  974. Music_Stata_Show_Stop
    & J! Z: v! Q& g6 B' @' X( H6 u
  975. LDY #LOW(Music_State_Stop)
    6 D6 u: |+ G) G
  976. LDX #HIGH(Music_State_Stop)! o5 C- |% \# r) u0 \* S( q4 c' Z
  977. JSR PPU_Data7 y% v/ M# o7 [% \
  978. RTS
    , `6 K" w% Q8 e
  979. Music_Stata_Show_Play8 d4 d: o$ R' r( h' ?% ~/ F8 S* `
  980. LDY #LOW(Music_State_Play)
    , b2 J$ `( V, L& b5 ^3 Y
  981. LDX #HIGH(Music_State_Play)
    - ^7 v" }& o* t
  982. JSR PPU_Data
    2 w2 K, A, N$ Y& e
  983. RTS0 `, Z) X* q! @/ Z
  984. # J9 n; m3 v4 P0 T/ Z: H- T
  985. .IF SOUND_BAR_SHOW_ENABLE
    & L* e' r2 I4 w6 P) ]) n
  986. ;==============================6 [6 X+ w. u1 n+ k& Y
  987. Sound_Bar_Text_Set;标题与音乐条初始化* ~+ c& r" r; ]( Z& x3 E; g( M
  988. LDY #LOW(Sound_Bar_Text_Data)
    # U. W+ y& ?) ^1 j, T, l& u
  989. LDX #HIGH(Sound_Bar_Text_Data)
    8 W2 e/ o" R- L- T
  990. JSR PPU_Data
    5 e. b3 v+ X2 w, G) Q
  991. RTS
    3 m2 Y" d+ t! Q5 ?  {- f
  992. / c+ D- N0 F( @* [2 m
  993. .ENDIF) s1 _" V9 i& Z  U" l% R) Y

  994. 2 b" X% C7 K8 v  O1 _
  995. ;==============================
    * g4 {  w' @- w+ B8 H+ V8 T' F$ c
  996. Set_NameTable_Attributes;设置命名表属性- D5 W% s- r' Q. d
  997. LDA PPU_STATUS
    0 `& g  C4 i; V2 u- ?( A- r
  998. LDA #$23. {* G' G$ G- a
  999. STA PPU_ADDRESS* v) S0 u; {! a) k6 c& z& \2 K. ?
  1000. LDA #$C09 H3 y$ j8 d" C9 h* J$ I: G$ |
  1001. STA PPU_ADDRESS! l  d; Z! R6 v6 b" b  R- @6 Z
  1002. LDX #$00
    ; }' c+ Q! ]: k9 w# t) ]1 w5 C2 j
  1003. Set_NameTable_Attributes_Write5 ~' _! `1 i* t' |& {
  1004. LDA Palette_Attributes,X
    : O. s/ l, M4 v! Z
  1005. STA PPU_DATA# s& X# ~2 n8 p  o( J% p+ I
  1006. INX% Z3 C! a2 r% y7 ^  J. A3 D# B5 D
  1007. CPX #$40
    7 n0 Z6 ~5 \) G: [; J: Z1 [) a6 Y
  1008. BCC Set_NameTable_Attributes_Write, b* T, [  [# h5 t* K
  1009. RTS
    0 Y( d  G! i* l
  1010. 6 p. A6 b$ y7 b, ]
  1011. ;==============================
    ; M8 |( T- }! I- u: V! o2 Q
  1012. Set_Palette_Color;设置调色板数据
    2 b# W( l4 c( y* Z( h3 c% j
  1013. LDA PPU_STATUS  ^0 ~9 j& V* M1 W
  1014. LDA #$3F
    % w! q4 M; u4 n! h
  1015. STA PPU_ADDRESS
    ; f% e# C7 w; y- G9 f
  1016. LDA #$00
    0 Z1 V& k4 f# _, G2 I
  1017. STA PPU_ADDRESS" ~/ z- S& c% k
  1018. LDX #$002 ^9 h: ^4 q( c6 D$ ~
  1019. Set_Palette_Color_Write3 t6 m9 w* s3 g3 T& v
  1020. LDA Palette_Data,X
    # \4 Q9 `* c/ A  I) O2 x2 B* T
  1021. STA PPU_DATA- S. p; q" w. Z2 v
  1022. INX: O5 u: d: f" G
  1023. CPX #$204 j, d# z8 ~. Q9 C
  1024. BCC Set_Palette_Color_Write
    " `, F: J& d9 O! ^4 m6 D
  1025. RTS
    . d- j2 {% F" ~& A& Y1 k

  1026. ) q2 v( B0 g8 T4 w' v* t' D9 N
  1027. ;==============================
    - D" n4 h* L; |! G$ _' }6 \4 t4 Y
  1028. Init_Palette_Addr;初始化调色板数据
    ( C' D/ R# [; j- q3 V0 K5 T
  1029. LDX #$008 J7 a1 l. s- f5 h, g; u" m8 }% T
  1030. Init_Palette_Addr_Write
    ' Y# m# E- e0 R" C5 p- \8 ~0 R
  1031. LDA Palette_Data,X! O. Z, v/ j, S7 n0 p2 w
  1032. STA Palette_Addr,X5 \3 U- {1 x& y5 J6 u
  1033. INX, r, Y9 Z( c; t2 P7 r2 \
  1034. CPX #$20
    % P8 M3 D9 B4 X. w( I6 T$ }
  1035. BCC Init_Palette_Addr_Write3 r: n- P- V3 ]) ?& v4 C9 {
  1036. RTS% g! m9 `- S9 d* g! N. A

  1037. 9 l. _" B4 Z" H4 o  s! H) o
  1038. ;==============================+ g( |$ c. n: A/ q
  1039. Update_Palette_Color;更新调色板颜色0 f; ^' A8 u& H( U
  1040. LDA Show_Track_Name% T( n3 i  g9 A/ B* Y0 Z% P( @- ^
  1041. BNE Update_Palette_Color_End, a. N8 z, v0 ]0 a, o2 ]% z
  1042. LDA Palette_Update_Flag2 O( v! t# }$ y6 ]# y, p
  1043. BEQ Update_Palette_Color_End
    # N7 _5 e( C5 d3 V! h
  1044. LDA #$3F: I. o6 k; }$ B' A. {/ z! r$ c
  1045. STA PPU_ADDRESS
    ' t; A3 C" y' m
  1046. LDA #$00- x3 I0 o  p- i  {9 z
  1047. STA PPU_ADDRESS
    . @) h* g+ S5 D2 B, ?
  1048. LDX #$001 m9 k* \# R4 l( T
  1049. Update_Palette_Color_Write
    . Z# v' A/ t: |+ x( o
  1050. LDA Palette_Addr,X  M+ v% w( x. C$ _
  1051. STA PPU_DATA/ v: V, H  D5 m0 o' x
  1052. INX
    7 Q  X' U; W* x4 V* G# G" z
  1053. CPX #$207 B, [6 y* U* R3 b
  1054. BCC Update_Palette_Color_Write
    / K0 b  Y. ?# P. o2 A# u
  1055. LDA #$00
    , ^: \$ T" G) G- ?: \6 V9 j
  1056. STA Palette_Update_Flag
    ; N, Y  n+ _9 V: O
  1057. Update_Palette_Color_End
    * m$ b: j5 t1 B2 n' ?- q* ]/ U9 c) f
  1058. RTS
    1 N' S+ i1 x; a2 k$ F
  1059. * M0 C. Y0 Z$ I0 V9 d0 t
  1060. ;==============================
    & s7 `- b6 D  g8 ^2 Y. ^9 O
  1061. Update_Palette_Data;更新调色板数据, v% ?! _+ B+ c% C( r" b1 c
  1062. LDA Show_Track_Name+ d7 v& M; P3 ]+ z0 \5 }6 B
  1063. BNE Update_Palette_Data_End+ m& c- k! c) p& q( q
  1064. LDA Music_State# b+ t/ p% J; N5 X1 k
  1065. BNE Update_Palette_Data_End
    + p, W+ ~' b" q' T
  1066. Update_Palette_Data_Check7 }6 s4 I& o$ E) c: r9 t
  1067. LDA Palette_Wait_Cnt9 a9 u; T2 [& Z5 d: v
  1068. BPL Update_Palette_Data_Check_Over
    / M! D! B( A+ K
  1069. LDA #Palette_Update_Interval. H5 l, e, ?1 l* v) R/ O. s4 z+ [
  1070. STA Palette_Wait_Cnt/ y% M. }+ ^- e. c# n$ n
  1071. Update_Palette_Data_Check_Over
    : [5 h2 Q6 a5 \. Z1 q3 |& ^
  1072. DEC Palette_Wait_Cnt
    & u' \& h0 Y9 F
  1073. BNE Update_Palette_Data_End8 ~1 l  n" D# Y  F
  1074. INC Palette_Update_Flag8 p% p" \/ L+ X" w% J
  1075. LDA #Palette_Update_Interval& r4 ^$ Z' z: S+ {
  1076. STA Palette_Wait_Cnt5 h( ?: j; m( x# r6 n6 |5 m/ _- B, M9 j
  1077. LDA Palette_Update_Addr
    & }& G! H/ q8 ?3 I9 j( |% H
  1078. CMP #Palette_Update_Max1 U/ c0 [! z; c
  1079. BNE Update_Palette_Data_Set
    # R) |8 r2 r; A5 m. ~" e  j
  1080. LDA #Palette_Update_Min - 1
    ! e  `+ T2 j* y- H6 l" Q# \# _
  1081. STA Palette_Update_Addr  i" c9 l5 e, Q9 ^1 x
  1082. Update_Palette_Data_Set
    0 m, ]" L3 m1 Q) L$ G1 ^; K
  1083. INC Palette_Update_Addr/ }# ~' ^, r' p- e" e) v
  1084. Update_Palette_Data_End
    ' W9 L8 D' S0 a
  1085. RTS  Q$ e1 O8 ?5 w) k2 S
  1086.   [- t( d" O% h& L: v" Z4 g
  1087. ;==============================
    6 `* y7 T8 ~! b4 o
  1088. Show_Music_Text;显示静态文本- _) t4 W1 j' }( m7 d3 j
  1089. LDX #$008 [  L+ I( C- V7 T$ w0 ~4 w
  1090. Show_Music_Text_Set
    5 P3 Z& O  M, }3 C% K6 @3 z/ l
  1091. LDA Static_Text_Data,X
    3 z' q2 |% k6 K1 ^% E% N- p7 I
  1092. STA Data_L
    8 K4 Q% ~" p& x; [2 Q
  1093. INX
    ; t$ P9 n. U- t3 I; f; o$ W+ z
  1094. LDA Static_Text_Data,X
    4 x3 Q2 L1 i3 r# F3 d; X2 T' E
  1095. STA Data_H
    $ G5 O* K/ g% ^" B
  1096. INX
    . e) H# O0 K, Z
  1097. LDY #$000 N" g6 U' N4 w& A9 D
  1098. LDA [Data_L],Y7 i+ L" S# D  D& c9 k2 K
  1099. STA Data_Cnt0 ~$ Q3 G- d0 k$ N0 t7 j" M& y) n
  1100. DEX
    9 B: z' q+ F* D! m  ^5 w. n: v. B- C5 n
  1101. DEX2 W( T0 m5 l% g, n9 j
  1102. LDA Static_Text_Pos,X
    / F; d; j3 b, V
  1103. STA PPU_ADDRESS. a$ H; T: m: S0 l6 u+ O3 @/ M
  1104. INX' D; H# n( _' q3 d7 a& Q1 u& L
  1105. LDA #$20: W3 b3 t8 l! W4 W, c
  1106. SEC
    # g. m7 D" _' i- T+ B6 ^" v+ U! u
  1107. SBC Data_Cnt7 J% s) w; A, t; s! T" j
  1108. LSR A
    ; M5 W# l' v" p# x* ^
  1109. STA Data_Buf
    ) q0 }, M1 `6 W' }
  1110. LDA Static_Text_Pos,X
    " A- W  e" t3 R3 X9 G
  1111. AND #$E00 |+ t* Z" j) F
  1112. CLC6 b; m0 ~- w6 A2 r$ }9 N
  1113. ADC Data_Buf
    . C; `* w7 q9 {7 f1 j* @
  1114. STA PPU_ADDRESS8 @2 N# b+ h! W5 f
  1115. INX
    0 [, E4 u, g* _% @+ G& K
  1116. Show_Music_Text_Set_Write
    ) j; V1 k% B0 c, z
  1117. INY
    7 r" L  W  _# I! N! w& Z! t
  1118. LDA [Data_L],Y  O6 D9 f2 C3 _& B6 Z0 q
  1119. STA PPU_DATA5 i8 e: V% M# N! o
  1120. DEC Data_Cnt
    2 C- ?% M4 a7 l4 r% J* A: u$ k
  1121. BNE Show_Music_Text_Set_Write
    2 \: @! S4 M1 E0 ~  Y; ^! [
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    9 d! Z. B3 Q9 v+ o  C4 z9 |3 Q! T; N
  1123. BCC Show_Music_Text_Set* U& d" \! M" v: @
  1124. RTS6 i  _, N3 s% m' @" s' m) F; H. \+ Q: M

  1125. 4 j6 k6 M6 W# R: H* G3 G: }" f
  1126. ;==============================
    # P9 x, l4 b7 d# T$ U
  1127. .IF Track_Name_Pos;显示曲目信息
    0 l! ~9 a, ?) U% `9 k9 b
  1128. Show_Track_Info1 Z$ Q- Q6 d, f' g
  1129. INC Show_Track_Name; ]( ]1 H$ n! {/ |
  1130. Show_Track_Info_Clear: j1 J' I+ ^4 U- i
  1131. LDX PPU_Cur
    " p3 t+ `: S9 H2 E% d" b
  1132. LDA #Mode_Clear) J" n. f; D7 G+ a! ~
  1133. STA PPU_Addr,X( @, x" ~; i& D; r* o; a
  1134. INX
    8 Q( [, y  Q  D" S# h$ z
  1135. 1 P2 N% U. e  c: @: e' _8 i# P
  1136. LDA Music_Last
    , W/ m" l4 z% i, @7 n6 D, W+ i
  1137. JSR Show_Get_Track_Name_Center_Pos
    9 l0 Y$ \1 z5 H, _, B  a0 H
  1138. Show_Track_Info_Write_Cur
    ) Q# I. ?' B1 X) b$ F4 h7 T8 U
  1139. LDA #Mode_CntLine
    & e1 ?0 {  A9 b; M9 u+ w
  1140. STA PPU_Addr,X
    - H. z9 D" C& x3 G' z2 J6 U* e
  1141. INX) w2 g( @- D3 M% l2 Y

  1142. ! E; [4 |. ?2 {9 S) S( l7 D7 B: }/ d
  1143. LDA Music_Cur. b( K- D9 u* }. _: @! b
  1144. JSR Show_Get_Track_Name_Center_Pos1 k% i+ @) [' N- S' z
  1145. % S8 E$ v  B, R# `" o& x
  1146. Show_Track_Info_Write_Cur_Data) k* q" p6 N1 J7 {8 Z
  1147. INY: H* U* i5 I* H8 ?  A5 B
  1148. LDA [Data_L],Y+ K% Y' ]% y7 D: e" s
  1149. STA PPU_Addr,X3 t$ W% M1 K! v- @; w; d0 R
  1150. INX
      N% y0 ]% O! s# h. q! Q  ^- u+ y
  1151. DEC Data_Cnt
    0 d2 `9 h. }+ q" [2 t" @# o
  1152. BNE Show_Track_Info_Write_Cur_Data
    / C3 h  |# y2 T) S3 f
  1153. Show_Track_Info_End
    ' a7 ^& w8 x- o5 ~# V3 S( ^* J  ~
  1154. STX PPU_Cur  J# M0 L( j8 ]* F7 {, E
  1155. RTS9 e( _, \8 y+ K2 ^. ~

  1156. * `3 [, }' W# o5 z& @2 L
  1157. ;==============================
    : _! h1 L( h! ~. x+ n
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    ' A7 j6 W- l* q4 [. A1 q9 i9 s
  1159. ASL A. M) v+ W$ d4 T% K. H1 ^4 C! |, f, y6 a
  1160. TAY" V: {. g& l5 y; o6 M; P# c
  1161. LDA Track_Name_Addr,Y& t  Z) q) D1 I/ Q
  1162. STA Data_L0 J2 V) p: {: [. N( w- F9 Y! B0 \
  1163. INY) t+ D5 K( B* \3 O2 }
  1164. LDA Track_Name_Addr,Y0 N) J9 ~6 G0 R. Q, U2 Y
  1165. STA Data_H
    ; Y( M# B- C; G2 O2 Y! w
  1166. LDY #$00
    , k7 \% p' H: y! i
  1167. LDA [Data_L],Y: g. O7 L4 T+ y5 H, }* j- {- T
  1168. STA Data_Cnt  `: w/ |( X6 x: |8 t1 ?5 K; R) |
  1169. LDA #$20
    4 t6 U6 {5 d! G8 X. C. w5 R
  1170. SEC
    ' u  U0 ~5 B& M  I/ O. k- U
  1171. SBC Data_Cnt
    , Y# x; k/ V8 h; d2 c3 ^
  1172. LSR A
    " V, q! {6 N/ Z0 Z
  1173. STA Data_Buf
    ! W4 p9 \0 F  d& O2 N
  1174. LDA #HIGH(Track_Name_Pos)# E( ]* a! H% m1 E/ c4 R
  1175. STA PPU_Addr,X3 w/ u  ^# F. Y2 V3 f2 o
  1176. INX
    $ p, z3 W* ]4 V3 l3 a
  1177. LDA #LOW(Track_Name_Pos)6 N8 N, q+ S; V3 \8 c
  1178. AND #$E0/ E" e6 {6 m$ T! [9 a
  1179. CLC
    - n  j% }) t1 g0 N6 ?
  1180. ADC Data_Buf/ w$ m" G7 }4 h% b" c+ V  ?3 ~
  1181. STA PPU_Addr,X
    2 v' C- U3 B9 `0 t/ b3 P
  1182. INX
    7 H  i+ P7 a! F9 |2 A% N
  1183. LDA Data_Cnt
    6 P7 h! h! E2 }1 V" U: B; D
  1184. STA PPU_Addr,X
    6 Q: I1 w- P0 k) H6 Q" l8 g, Z& a& h
  1185. INX
    ; z7 \. |- ?+ {# v2 u6 i3 ^
  1186. Show_Get_Pos_Center_End4 t( A5 ]6 ?& A+ E) c# C
  1187. RTS
    * S; @4 m! J" B* ~4 J/ [
  1188. .ENDIF7 f* l: a4 U" ^2 f% d

  1189. 1 d! J; n* ^% j4 B0 u7 `" w5 g% V" s
  1190. ;------------------------------% U( i- e  _4 n3 \' F8 Y7 l6 @3 O
  1191. ;命名表数据& }: j% _3 P* {2 s
  1192. Palette_Attributes; U6 z: _; s0 @5 E
  1193. .IF SOUND_BAR_SHOW_ENABLE- C# B+ B$ N" n) c
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    / O* a& t9 z5 I) L+ Q* Z* J" w
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    5 X0 t' C; A% i- j4 g. c
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    1 s/ e' G! ~; N
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55" I2 Z1 I7 w5 p9 u0 r8 f3 z( J
  1198. .ELSE7 l- I% n5 g; w6 n
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$008 x4 x8 i1 d8 ]+ K3 b5 @+ k: ~- \
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    9 |; C! o7 a2 ~  g3 z5 s
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    ' U& N+ V' m  n) n
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    6 d' p: N2 r* e
  1203. .ENDIF' v( i( @+ k8 Z: Q; \6 Y3 y

  1204. ) ]2 p# F7 n1 C" B8 g7 q
  1205. ;------------------------------' y. }2 `9 ]+ o4 _
  1206. ;调色板数据
    & F8 _" g4 Z6 h2 G+ a4 `" ^
  1207. Palette_Data: s+ u! _( _6 a+ k: x8 E5 c
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F2 f% Y3 T  o: S' s
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    . F2 }1 g1 W8 _2 S( U
  1210. 1 o! f0 w  N2 r% t7 l  [' A3 }
  1211. ;------------------------------
    3 r& ]" V$ Q' h2 `. x
  1212. Static_Text_Data5 @, E( H, F. y% n3 W; z$ S7 T
  1213. .WORD Static_Text_Title_Data' u+ q0 L- j  h$ b
  1214. .WORD Static_Text_Author_Data# k3 w8 Z0 o" t
  1215. .WORD Static_Text_Date_Data
    ) e+ n+ w/ V) `6 e, Z, d1 [* S
  1216. Static_Text_Data_End& d) A* F; t8 }8 \3 g" x
  1217. 1 [6 u+ [8 G! M6 H
  1218. ;------------------------------
      K: c5 G% H- J$ J  @2 ]+ E8 S
  1219. Static_Text_Pos' B4 y2 u: T7 E( q/ b& e$ a
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    $ b5 M3 w( ]+ i% d3 F( x
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    3 E/ J% L& H( ?; b' k4 g
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    % k/ G1 n. |* h9 U1 n
  1223. Static_Text_Pos_End, ]' k, b& N" s! m$ ]/ X" [; o

  1224. * Z- i# @* H4 r- E& T9 ]" |% U) g
  1225. ;------------------------------: L; i1 f, O5 C" ?2 _0 h
  1226. Music_State_Stop
    4 q1 S6 U5 U  b( b: ~' m  ]2 k
  1227. .IF SOUND_BAR_SHOW_ENABLE
    * s+ Z/ v+ ~. g# G* ]1 [
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00; c1 m1 \: x* a* P1 V7 D
  1229. ELSE, {9 ^- _. C' d0 j* H4 z
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    0 t% j: X4 ^& f8 }! o! H% [
  1231. .ENDIF$ P1 \4 B7 [5 P( X  o
  1232. Music_State_Play
    & ]/ `: P4 I! o9 e6 K- I, `% ]
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$005 k3 X! k; H( X- R" e6 G. s+ m. {
  1234. * O+ o* `7 p( M1 |! @
  1235. ;------------------------------+ X  I2 k# a4 T) n2 o, C9 N
  1236. Sound_Bar_Text_Data;声音类型文本  \( s* x! l) g9 L2 |
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)8 v- A7 K+ `/ Z" k" R
  1238. .DB "SQ1-",$FF3 Z; f- Z3 ~; R* H- c
  1239. .DB $FE,"SQ2-",$FF. h0 A2 q( B2 J' w7 [
  1240. .DB $FE,"TRI-",$FF- j) h2 e3 c' V2 A! t
  1241. .DB $FE,"NOI-",$FF7 p0 P* J* O) H3 Y2 t5 o
  1242. .DB $FE,"DMC-",$FF,$00: z: ^  z( m7 z6 b2 Q9 H3 m
  1243. # R* t& z; \5 e
  1244. .IF Track_Name_Pos: N% Z3 o$ l" l# u% L; E' P
  1245. ;------------------------------
    7 U+ `0 p% G2 I2 c
  1246. Track_Name_Addr;曲目名地址索引) b9 u' m0 w+ `/ }6 M6 V3 r
  1247. .WORD Trackr_01
    & {/ W1 X7 ~7 X, h! v
  1248. .WORD Trackr_02  k0 b  y1 E/ x! z/ o( a& T
  1249. .WORD Trackr_03
    4 I- T) L( F8 A
  1250. .WORD Trackr_04" ~; |0 Q. B5 M2 E: H" V
  1251. .WORD Trackr_05) \! z) u; o( g, h0 o
  1252. .WORD Trackr_06
    3 J6 f  y' }8 F) _! \5 F
  1253. .WORD Trackr_07" G  |, \: u  Y0 G. s+ _* u+ {  b
  1254. .WORD Trackr_086 @- [* O  }8 ?  r
  1255. .WORD Trackr_09
    . o6 o$ ~! Y" a- u3 s1 A0 w% |% ?
  1256. .WORD Trackr_10( M3 [0 n4 ^) {! y2 ?% I
  1257. .WORD Trackr_115 y7 L& x# D& d6 V  S
  1258. .WORD Trackr_12
    3 S9 }( F0 F4 f5 D
  1259. .WORD Trackr_132 n7 g  J& e( a% W4 @6 Q
  1260. .WORD Trackr_14; h1 T& \# o1 \5 z+ j  [
  1261. .WORD Trackr_15
    / O) L# z- I# T# R" j
  1262. .WORD Trackr_16, j, |( x; J/ _' k, l5 B
  1263. .WORD Trackr_17
    - C- g6 K9 h' |0 \' Z
  1264. .WORD Trackr_18
    * D9 e& E. m  b! N- @0 l. `
  1265. .WORD Trackr_197 @% @' r$ M. b
  1266. .WORD Trackr_20, W) L" J/ u- }) c6 ^
  1267. .WORD Trackr_21
    7 r! U2 u/ Y4 K/ G
  1268. .WORD Trackr_22
    . S5 e; q0 K' U/ n6 A
  1269. .WORD Trackr_23
    # Z" z" l& K- J6 [! y
  1270. .WORD Trackr_24) z; T4 e0 Y- P" Z. Y
  1271. .WORD Trackr_25
    + k3 v7 e, T" a/ D4 a' e5 @8 P
  1272. .WORD Trackr_26
    $ T. I4 J7 x% T/ O
  1273. .WORD Trackr_27
    / A) v" [: F9 f1 G7 E( k
  1274. .WORD Trackr_28% w4 i# y0 ^! e% L* l# i: x4 b8 x
  1275. .WORD Trackr_29
    ) h; Z5 P, ~8 ]/ @$ O$ i( v
  1276. .WORD Trackr_30# }9 ]! U) R  f- q* Z
  1277. .WORD Trackr_31' ?0 Q; p: w4 B% s
  1278. .WORD Trackr_32
    9 D5 g6 Y; l5 f- u6 f
  1279. .WORD Trackr_33
    ( [/ Y1 d7 h$ _4 n1 g
  1280. .WORD Trackr_34
    . v- {8 m5 l3 S3 c) q. U
  1281. .WORD Trackr_35
    7 h4 L* F4 i) y  D5 @
  1282. .WORD Trackr_36
    - c5 ]7 Y: {" W- l* N7 W$ @
  1283. .WORD Trackr_37
    : _1 c9 k' D) L
  1284. .WORD Trackr_38
    ; q% F. T; T$ e( Y! ^+ w" R. X( D
  1285. .WORD Trackr_39# L( S* r+ R  d8 \; e1 ?! {5 T

  1286. 5 r: j. o; k. p) e
  1287. ;------------------------------9 q1 r8 X; U" R) p0 E" M; d9 a( }. e
  1288. Trackr_Name_Data
    ) ]3 @) H2 w# K# p8 a( a5 Q6 r2 p7 t
  1289. Trackr_01 .DB $05,"BGM 1"6 A5 ^% z' F* M5 w5 y/ o$ l% J( m
  1290. Trackr_02 .DB $05,"BGM 2"% h5 q+ O- i: ?7 B/ B* D- V, u! d& N" p' M
  1291. Trackr_03 .DB $05,"BGM 3"
    2 t4 \7 e, V# ^
  1292. Trackr_04 .DB $05,"BGM 4"
    . i! g. U  R9 z
  1293. Trackr_05 .DB $05,"BGM 5"
    4 {' g9 A; i: z8 P6 |5 p! ?
  1294. Trackr_06 .DB $05,"BGM 6"
    $ J7 j2 h/ h1 C2 K; ^
  1295. Trackr_07 .DB $05,"BGM 7"- V5 s1 A( A6 X
  1296. Trackr_08 .DB $05,"GREAT") [$ _4 n( ]1 ^& H: t+ w2 |
  1297. Trackr_09 .DB $08,"BOSS BOM"- x, `9 M% V6 g3 U
  1298. Trackr_10 .DB $08,"BOSS2BGM"5 a6 z" g6 [  m5 ?
  1299. Trackr_11 .DB $07,"P CLEAR"7 s& c- ?3 i+ T5 b9 @& j/ |
  1300. Trackr_12 .DB $07,"A CLEAR"* p. T; O6 ?3 M- Q
  1301. Trackr_13 .DB $04,"OVER"( n9 g' P! T, y5 {8 a7 I
  1302. Trackr_14 .DB $06,"ENDING"0 [! ^: D; m7 [; r3 c- C( O: a
  1303. Trackr_15 .DB $04,"SUTA"
    , z% P4 d  M8 p9 o0 F0 W5 V
  1304. Trackr_16 .DB $07,"THUNDER"( t# ]+ ~- T: L8 S% ^$ S
  1305. Trackr_17 .DB $04,"SHOT"
    4 Y" O' h0 n' X* [/ Q! _' [
  1306. Trackr_18 .DB $05,"LASER"1 I: l" @! H3 w# y; A
  1307. Trackr_19 .DB $06,"SPREAD"
    7 E  \8 j- b5 N9 F/ ~/ T
  1308. Trackr_20 .DB $04,"FIRE"
    * R* ?1 i3 x6 a5 p
  1309. Trackr_21 .DB $06,"B SHOT"
    ! ?, K' u1 f) v# ~  ?) r, T
  1310. Trackr_22 .DB $08,"T DAMEGE"2 W; H  U' n0 ]. m
  1311. Trackr_23 .DB $07,"HARETSU"
    ! q5 a3 V' t, K6 O: b. D3 E/ H! j% R
  1312. Trackr_24 .DB $05,"T OUT"
    6 K3 J' S( X3 ]: l
  1313. Trackr_25 .DB $05,"Z OUT"
    9 w: r2 P+ N2 V3 x  I' j
  1314. Trackr_26 .DB $05,"A OUT"( P2 g; [' v4 m- C3 P
  1315. Trackr_27 .DB $04,"ROLL"! D0 y( \  y; l& [5 ?/ ^% k
  1316. Trackr_28 .DB $06,"APPEAR"3 S" J7 S; Q* C( J3 [* R
  1317. Trackr_29 .DB $05,"POWER"
    ' V; o, ]% ^' F$ u( Y$ Y' J6 O7 s  H
  1318. Trackr_30 .DB $07,"BOKK BK"5 P5 ?( g# W/ Q5 H. r8 y
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    # u8 c) @6 s! B+ @" }" `
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    / A5 S5 J& X) [
  1321. Trackr_33 .DB $05,"ARUKU"# Y4 @( j- b+ [/ y) d# x; P7 q
  1322. Trackr_34 .DB $06,"JIWARE"9 L" d) z/ t' u, F$ x
  1323. Trackr_35 .DB $05,"SILEN"
    $ X: t  `8 C6 b5 P# E1 X$ J
  1324. Trackr_36 .DB $05,"P 1UP"
    4 [6 S9 ^1 j8 D0 {
  1325. Trackr_37 .DB $05,"P OUT"
    $ ?( p) z8 T( d8 U8 W5 K( u
  1326. Trackr_38 .DB $05,"B OUT"; j& [" y4 v" a* F" R
  1327. Trackr_39 .DB $05,"PAUSE"& S2 O" w2 y; y' R) l1 h) U

  1328.   X. W% X8 }9 H4 k& S- ~
  1329. .ENDIF
    . v7 C- a0 T4 L+ Y5 j- r! H
  1330. 4 ~( h, u4 C( r4 H- W% }3 P
  1331. ;------------------------------5 b: Z2 `/ `( H" {" A
  1332. Static_Text_Title_Data;静态文本数据- }( B9 ]) ]: k4 H3 T6 @8 _
  1333. .DB 12
    8 j* A( `+ b$ E3 b1 `
  1334. .DB "SUPER CONTRA"' j, ^& @4 U! f' k- i
  1335. Static_Text_Author_Data
    # a) ^7 m" L( `! D9 h$ ^8 s
  1336. .DB 23
    7 Y' I" a  H  i: @0 F
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    9 z1 C/ T, R* f  o1 ?) a
  1338. Static_Text_Date_Data  e5 s$ a0 t9 D
  1339. .DB 10
    8 K3 F1 H5 `( k4 K/ t
  1340. .DB "2023.07.11"2 |8 I: q4 f% l2 W1 ^0 _' h
  1341. : C. B4 n( t  e8 ~' a+ g3 F" ?' Y
  1342. .BANK RESET_BANK & BANK_DATA_MASK; u' P& m$ [0 F0 L$ t7 s2 `0 h+ G
  1343. .ORG RESET_ADDR# N! J5 o1 y* `2 ]9 h3 S
  1344. ' k# t0 K# Y' T: q+ @8 {$ c! L
  1345. 4 A6 j9 q* K2 f( k3 T: a6 L
  1346. ;==================================================
    ; |5 x/ h" L# c
  1347. ;切到主程序bank
    & B5 ^- h/ K) P/ P4 W4 l7 y
  1348. SwitchMainBank
    9 p! `5 X" @, [3 T2 g" f
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK! T0 D0 p% j# t3 \5 g
  1350. JSR SwitchBank8000  j) U& U: B8 s  Y7 H
  1351. RTS
    7 `+ P+ y, Y' r/ @
  1352. * d5 D! H9 a: G) z7 d
  1353. ;==================================================7 Z2 ^! ^; g% {( f2 ]& X% [
  1354. SwitchBank8000;切换bank到8000-9FFF
    * z: w! W# o  Q- F7 l5 N
  1355. PHA
    3 X/ S' O7 `3 t6 W
  1356. LDA #$06: p( b, ~* h. A2 S
  1357. STA MMC3_BANK_CTRL9 P  M4 }) [  U/ S/ c& o
  1358. PLA. j% l9 Z- u; U2 o2 s# W% S. v0 n
  1359. STA MMC3_BANK_DATA0 J- h& \/ O/ W# c% f7 e. g
  1360. RTS6 L) q, E9 Q! b/ h8 z8 ?- C' N

  1361. ( {8 g2 O6 X( _, f/ m: ^
  1362. ;==================================================
    9 p) U, C' i1 }2 @
  1363. SwitchBankA000;切换bank到A000-BFFF
    # F$ v! u* U; m" U* K
  1364. PHA
    $ z7 `# q, P. J
  1365. LDA #$07
      f( ?/ k" @3 M$ R: c. V
  1366. STA MMC3_BANK_CTRL% v* \# [, T: s3 {
  1367. PLA" _9 A0 J0 F, c) a4 n
  1368. STA MMC3_BANK_DATA
      s5 B5 @) Q( C# A
  1369. RTS4 s* r! O! ?; K) y( K
  1370. 1 L& E( ?4 Q- g/ _$ V
  1371. ;==================================================' n6 i6 D( q0 t) y# i
  1372. Sund_Bank_Init;音乐bamk初始化
    0 p3 E* z2 z3 \0 p& x& e0 A
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK! e0 x' e: T$ g3 f/ y2 r" b
  1374. STA Music_Bank_8000
    ) [9 Q( N- p% |1 z
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK  B0 _& W1 i8 k& |# ?( _
  1376. STA Music_Bank_A000
    ' I6 P% C, M2 U1 M8 C
  1377. RTS
    5 V1 a. O$ _" v0 m
  1378. ! @& z  F8 s* w& \
  1379. ;==================================================
    # e/ u) }' s" }7 F  ]9 ?# G
  1380. Sund_Bank_Set;切换音乐bank( `' U0 E$ x7 S
  1381. LDA Music_Bank_8000" ]% N2 d1 P9 T# m; z% s
  1382. JSR SwitchBank8000
    ! t( z- T+ ?% D1 v2 M1 s( h
  1383. LDA Music_Bank_A000
    - G: U0 [, n$ r9 B8 m; S, W) \
  1384. JSR SwitchBankA000' p9 G& W7 u3 U1 m! o
  1385. RTS% A: ~. ?' m$ Y; {- x) L& I3 ~0 B
  1386. 3 _& K# c8 i5 u: D$ Q! A
  1387. ;==================================================0 L4 r. L+ |" L
  1388. Sound_Init;音乐初始化
    4 B( E+ X. Y+ C' Q9 N: f
  1389. PHA
    3 d4 |) c) p1 \$ v
  1390. JSR Sund_Bank_Set
      ?8 W, ]' @" F9 g; w7 p6 i7 g
  1391. PLA
    ! h$ j) V3 r! \& E: h: q
  1392. JSR Music_Init_Addr" ~# s8 c4 ?! u) ?6 V
  1393. JSR SwitchMainBank; l) X0 O+ L& h  s/ T

  1394. / K+ B$ `7 L8 u/ H/ K" h! h
  1395. JSR Music_Bar_ReSet- D, v+ \) h" j0 M
  1396. JSR Time_ReSet
    ; K* @0 ^9 |# p+ ^
  1397. LDA #$009 S" ]% C8 G9 |; E8 s+ d
  1398. STA Music_State6 w/ H( B! d" O+ q: a) n
  1399. JSR Music_Stata_Show. W4 j2 b9 d  B  D. o! a# P
  1400. .IF Track_Name_Pos
    6 ^9 M" K5 `$ L
  1401. JSR Show_Track_Info4 t8 q# P! X% s$ U3 f$ g- ?( s
  1402. .ENDIF
    + Z8 R4 E$ @( O. }: i
  1403. # J+ |. V( R% N% D
  1404. RTS
    $ |7 h# q% l7 y- D& l/ ^- I% e
  1405. * L  l+ t+ b- S* `
  1406. ;==================================================
    4 \4 S! \$ l- L4 I" ^9 k4 [
  1407. Sound_Play;音乐播放" l0 w) A" l* D7 q: H% N( v
  1408. PHA
    8 j- p  b! l/ i5 x0 J; t
  1409. JSR Sund_Bank_Set% k& C) @- F; J
  1410. PLA1 O* b% i9 A  T# z8 f
  1411. LDA Music_State2 y3 {6 o" k$ M( `
  1412. BNE Sound_Play_End
    ( f; z% L: G$ u
  1413. JSR Music_Play_Addr3 Z$ h/ T" ?/ S
  1414. Sound_Play_End
    0 r# R6 j/ T$ G
  1415. JSR SwitchMainBank
    7 T; l) O" H% d' i# `0 }
  1416. RTS
    / A8 C% m( R; ~' K5 }! B1 Q

  1417. * |" K+ {4 \; K
  1418. ;==================================================
    # u0 D& J7 y$ O5 ^1 e5 c
  1419. .IF Music_Reset_Addr
    : S) {7 S+ A, k, X
  1420. Sound_Reset;音乐重设(如果有的话)
    + |' n" s+ `. }/ ^( O
  1421. JSR Sund_Bank_Set* l8 H, V# S1 d3 E  Y$ N
  1422. JSR Music_Reset_Addr
    + X: `$ C3 u, u+ B" f8 n- V7 w
  1423. JSR SwitchMainBank
    * l  `: i+ V! l( `3 Z+ X
  1424. RTS
    # H( D' K  m! y" A
  1425. .ENDIF" C% I+ Z* A3 Y4 Q! h( @

  1426. : y5 K  Y' V/ r) v+ g1 O
  1427. ;==================================================" |& T! Y) l$ [* B+ [+ {- x4 i
  1428. MainLoop;死循环
    . k( t+ K6 G1 n
  1429. JMP MainLoop
    . @" d! S; D' _4 N5 n/ n$ ]
  1430. 4 F$ \$ z1 o: f8 [0 ^
  1431. ;==================================================
    & e" E/ X6 U9 }. I1 @
  1432. NmiProgram;Nmi中断处理! t: ]9 R5 A* c+ s: e9 y
  1433. PHA8 \/ Y6 l0 i* J3 o
  1434. TXA
    0 L) u- B3 x/ E. h5 j  p
  1435. PHA5 x! F/ P7 V  }/ @
  1436. TYA3 Z6 H! O! J+ |  A" ]/ j
  1437. PHA
    3 e+ Q+ m8 M8 q6 b1 J+ t% L0 l

  1438. & [- m* D2 R$ {
  1439. LDA PPU_STATUS
    9 O, \3 O  u7 N8 w
  1440. LDA #$00
    + l: n2 S6 K. `7 J/ T
  1441. STA PPU_CTRL
    4 v2 G0 r4 x& I8 h/ L3 s! ^/ y

  1442. # Q, a# r' J: F8 C5 \* ]
  1443. ;切换主程序bank
    & z2 K0 D) F4 h4 ^
  1444. JSR SwitchMainBank
    & E9 O" m7 g, _* T$ n' }

  1445. 7 X8 L# Z+ q3 l; p" N4 w$ n5 _5 R
  1446. ;NMI处理
    & d  O& I/ b, w- S+ I4 j
  1447. JSR NmiProgramProcess# q: @4 O9 v7 k! k0 [# v% ^
  1448. " |: H6 z, \! Y. `8 X9 [7 D
  1449. Nmi_Proc_End, `2 i3 k1 x: f0 G
  1450. PLA
    7 g& P7 N3 h6 b4 d% f
  1451. TAY
    ( K) ~3 W$ c" U& E3 p- C1 ^
  1452. PLA
    / b+ M$ M9 O, E! Z1 B5 t4 T
  1453. TAX
    . A: O6 j! U1 X8 u
  1454. PLA
    % V# `+ \# X5 |5 B9 H, s% W" V

  1455. % `. Q- _  E: X
  1456. RTI; {- o, k. R7 K; h3 r  g

  1457. 5 X% Z8 `4 N* x4 k8 q$ A$ M0 l
  1458. ;==================================================( K3 ]4 X, K6 t! q! J/ U/ d/ H( V3 G7 b
  1459. ResetProgram;重置中断处理
    2 j3 L6 A1 q! s3 s* j+ m  m1 G% k
  1460. SEI
    ; A0 u# D1 _. |
  1461. CLD; z. c, \" ^8 q0 C
  1462. LDA #$007 C5 }: e( N0 J5 t) N: R- u6 l/ k
  1463. STA PPU_CTRL3 s( |. @, F8 c& j0 K+ r2 o
  1464. STA PPU_MASK' i+ `' B" Y2 f& r( D; F

  1465. 2 K8 P' S0 E( t
  1466. JSR SwitchMainBank
    : s8 f& b5 q3 X0 p. s- \
  1467. JMP ProgramBegin# V! C- Q6 Z) U6 Z
  1468. 1 S5 q" _) v% |  L8 ?7 _
  1469. ;==================================================0 `- _2 x1 U0 p# S5 X4 {1 O: U
  1470. IrqProgram;Irq中断处理
    8 o( B: Y; @5 |+ }- i$ p9 X! H1 {
  1471. RTI+ F1 l7 w' Q/ f8 P& p' i$ D
  1472.   N4 G4 m! t2 k: t$ ]# {
  1473. .IF SOUND_BAR_SHOW_ENABLE9 r' m4 z& a! G) X& T! ?
  1474. .ORG $FF80
    5 z, }& P$ Z  W, p7 }
  1475. STA $4000,X4 n* b7 S4 r5 V7 o& s' H/ P
  1476. STA Sound_Bar + $00,X1 E' ?4 Z; ?3 w- a% }1 r# _; p/ f
  1477. RTS
    3 l; f1 p: d! q" M9 y  E/ L

  1478. & k# S# h2 {! S4 O! _
  1479. .ORG $FF88
    9 [4 W! i$ @- g$ Q" {- K9 X* e
  1480. STA $4000,Y/ D" z8 a1 p! d9 b( P3 W6 A/ ^
  1481. STA Sound_Bar + $00,Y
    ! S+ d4 K& L  y- P. D/ a8 R
  1482. RTS
    ' F5 ~7 T; b& d7 c" \& @# {* x  j1 \
  1483. . h! o) C( M+ E/ H$ Z! T, a4 J
  1484. .ORG $FF902 x- ?) x& o) |( [$ q) f4 B
  1485. STA $4004,X/ ]( S( B; n5 {! X1 ^# D
  1486. STA Sound_Bar + $04,X0 a5 q8 U2 L- _+ j
  1487. RTS! T  K% l: \& r) L& Q" u' d% B/ U+ S

  1488. # ]( ]7 N* [- v  v( D& z
  1489. .ORG $FF98
    ) b! M) O: s, |+ N! U9 k
  1490. STA $4004,Y! Y1 P. k8 v- g- h  ?
  1491. STA Sound_Bar + $04,Y; R$ z+ J$ w8 _' e0 Z7 I( a
  1492. RTS7 p- v) d6 k+ m

  1493. 8 v/ A  Z* \  l: U+ E# k- {' f) D0 F, S
  1494. .ORG $FFA0
    9 I$ z0 s* _: D, Z! A0 s3 {; B2 @* y
  1495. STA $4008,X( W1 b3 {' @9 X8 d- w
  1496. STA Sound_Bar + $08,X
    " j4 S$ h" g$ z) c4 E
  1497. RTS$ F( f5 q: @! V

  1498. $ n- ^8 b1 f  ^8 G7 H3 a1 m& W
  1499. .ORG $FFA8! `2 H3 T2 A" h8 y: {, H0 O
  1500. STA $4008,Y3 b% c9 G# x# M& F
  1501. STA Sound_Bar + $08,Y
    $ X  Y2 B1 b1 h* t0 a
  1502. RTS: N& C+ x8 E- o

  1503. 3 p& u$ ?! O- A3 A6 J' z: Y
  1504. .ORG $FFB0
    ; L5 M. Z/ u  v$ o. M& t( }7 t
  1505. STA $400C,X7 Q) e7 Z" f) }! ?
  1506. STA Sound_Bar + $0C,X
    / T- h) Z4 I9 w0 ~( C& L5 r2 v
  1507. RTS$ o2 q% j; d+ o9 E: d/ V8 K
  1508. " J* p7 n2 M# H/ {* i
  1509. .ORG $FFB8
    , b8 N* J! L9 [( i8 b6 r3 Q+ p
  1510. STA $400C,Y; m. n# N& z5 G
  1511. STA Sound_Bar + $0C,Y& M  |) `' w4 D3 u7 L  [* {
  1512. RTS
    7 Y' H- l9 P/ P2 I2 A, {

  1513. - n5 r1 x; m: g8 H: S. l, O
  1514. .ORG $FFC0
    0 l. A9 U7 W4 `  u, O' v0 w
  1515. STA $4000
    3 D' T8 i+ k  n( K8 I( V9 y2 t
  1516. STA Sound_Bar + $00
    9 c1 j: E8 p+ |/ Y9 H! q
  1517. RTS6 u7 m+ x' c9 C' @5 i
  1518. 4 @4 n3 t; ^: L# B
  1519. .ORG $FFC8) u; q$ M& w- C$ ]& @
  1520. STA $4004  p8 f$ ?1 t% s% M
  1521. STA Sound_Bar + $04
    " z( E2 D  ^( p" R% U
  1522. RTS
    % l$ U3 y% Y. }' }( U
  1523. " d* X* X3 D- L
  1524. .ORG $FFD0: p" n% a* f9 |5 Y& f; z
  1525. STA $4008% h4 A) _- B, }# `" ^- t( _+ X
  1526. STA Sound_Bar + $08
    $ |& A1 i0 D0 V& o( N
  1527. RTS
    8 o( X$ L0 }3 C6 F

  1528. & F6 u( j# M2 \0 C& A/ z9 ?3 b
  1529. .ORG $FFD8$ R$ r" n- s2 ?! `& b3 G5 ?
  1530. STA $400C2 ?  m6 d) {! ]) a5 \
  1531. STA Sound_Bar + $0C
    / I+ n9 {7 J% }+ l% B# K7 |2 v$ O
  1532. RTS
    $ c# h1 `1 b* r2 B
  1533. : J! V* \) h- ~( H' _/ D
  1534. .ENDIF
    % n: p, F7 k- W( e8 D0 R0 G) C( J
  1535. 4 w8 ]; B7 @1 u+ j; }( v/ j2 v
  1536. .ORG $FFFA/ X* M0 ^* H( ?3 y. F
  1537. .WORD NmiProgram  q+ h% p& I  Y2 j
  1538. .WORD ResetProgram4 X, t3 b2 M* R
  1539. .WORD IrqProgram
复制代码

/ ^8 w5 F" W# j! M) N! l3 D% V! o4 ^4 I
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1193 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3184 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-26 17:42

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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