EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 1 p% }" s6 C7 S3 o( i5 J
) ?$ F0 C' ?$ }! `4 |/ A+ c# n! K
1.魂斗罗; H3 l# g# ]: A6 D
2.超级魂斗罗
6 m5 M" Y: W) r2 F9 x# \+ R/ ~3.赤影战士) m( o+ e; C6 P" _+ ?% r7 y
4.忍者龙剑传29 ^! i$ o( i0 }
) D$ V$ e. T3 |( P

- p3 M' t7 t5 U) O  A4 v& w% ?/ Z, ]! \7 U; F6 ?
0 X  k( ^% d; T
源码:* m0 N/ \# B% L, Z
  1. ;[FC音乐][播放器模板]8 h2 _, z) _8 M  ?7 T3 m
  2. ;FlameCyclone 20230710
    8 v! q3 \: P2 Z" V" H  J2 O
  3. ( L/ `7 [4 m, h% C* B
  4. ;文件头, m- N4 G" t3 a" N. n; }5 C
  5. ;======================================================================
    8 c* {2 A2 j5 {$ }
  6. .INESPRG 4                                              ;16KB PRG 数量7 k. j8 ^$ A# n+ r; J( [* ~
  7. .INESCHR 0                                               ;8KB CHR 数量
    8 o/ j" A+ r& b/ Y( n6 d" o; l$ L8 |
  8. .INESMAP 4                                                   ;mapper 4
    , W  \; h* X0 g' g! A
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直, I3 ?4 ?. J( |/ n4 o- Z) Y

  10. 4 U/ e- `- b+ J) `0 M
  11. ;==================================================- B4 p6 F* l5 n7 c* R
  12. SOUND_BAR_SHOW_ENABLE       = 1) y' B4 A) {9 V9 Q% j* n* t
  13. ;==================================================
    7 X  N4 N1 M, R$ m3 C* m7 p4 S% C! v
  14. BANK_DATA_MASK              = $07
    # L0 ^2 g: S# U' i( I' B! b
  15. ;==================================================5 i# P" g% d+ f
  16. SOUND_DATA_BANK_0           = $00- j$ l9 y4 m! M
  17. SOUND_DATA_BANK_1           = $015 N1 F. j0 F/ Z
  18. SOUND_DATA_BANK_2           = $02) Q  ]/ @2 M1 f- P& f0 v
  19. SOUND_DATA_BANK_C000        = $062 Z8 P# I3 Q7 X1 e* a/ x

  20. 8 O& [! a, H9 X0 f) I! ]
  21. ;-------------------------------------------------
    4 k- C* B: G, n2 y! @+ f
  22. CHR_DATA_BANK               = $04
    5 @" P7 s/ W9 g
  23. CHR_DATA_ADDR               = $A0001 i$ t7 @/ U4 C$ H
  24. ;-------------------------------------------------3 g% W2 y* p4 Q2 I, O
  25. PROGRAM_BANK                = $05* }9 L; X* v% L7 U3 t% U
  26. PROGRAM_ADDR                = $8000
    & J5 q- B% V& L6 Q9 _: d
  27. ;-------------------------------------------------
    & o3 p  Q5 z& N+ B
  28. RESET_BANK                  = $07
    2 ?$ Y+ Q  E) K% d
  29. RESET_ADDR                  = $FE00. z& x6 ^; B, |9 i% X- [- I; v
  30. ;==================================================! P. V  e' b4 r/ P) S3 ]) Q
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
      s9 A) N* K6 A+ h5 D
  32. Music_Play_Addr             = $813C ;音乐播放地址
    8 E6 T/ j3 a4 i$ R
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址2 b' j. Y$ R4 z' y, F$ j/ u
  34. ;==================================================
    9 ?, ^- ]" v, i
  35. Music_Song_Total            = 039  ;全部曲目总数2 v" x1 x, d# m: N2 l" a* V
  36. Music_Start_Song            = 007  ;初始播放曲目& g7 @& {, g3 n; ^$ A
  37. ;==================================================
    1 g$ I3 P8 ~( @$ ^% i  @/ I& ^0 `0 s
  38. ( Z# M) j: C- m  n! b/ u) k
  39. ;==================================================
    3 ?9 ]8 y4 F; W+ U
  40. Title_Text_Pos      = $210D ;标题文本位置
    5 Q6 c5 y' y# ^2 T, k9 I; A2 O
  41. Author_Info_Pos     = $2284 ;作者文本位置  c: H( b' d! p
  42. Date_Info_Pos       = $22CB ;日期文本位置& {$ w9 E1 q5 L0 s
  43. ;------------------------------) U/ ~; B6 a& G* h
  44. ;------------------------------4 }% w$ q, a% a  O) D, g+ U
  45. .IF SOUND_BAR_SHOW_ENABLE2 O# u5 h, f; z: u3 y6 j& N; h
  46. Play_Index_Pos      = $21B3 ;当前曲目位置/ [2 P) g0 q4 o5 p: b4 u
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    # l' F& b/ S# R( U% P1 C! k2 g0 @
  48. Play_State_Pos      = $2233 ;播放状态位置2 C1 M: {3 K) X4 k9 @* p) y0 A
  49. .ELSE
    - d! F$ u6 L& v- T- y/ {' M7 N+ E
  50. , S. G) R( [: q: @2 t5 @
  51. .IF Music_Song_Total > 99
    8 s- |8 F2 U4 I9 L; U9 u
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    - j8 w; ]( J3 J, f: U
  53. .ELSE
    # a% j4 @  c0 n, C) P! r
  54. * ~( K6 J/ A5 E$ `) {# W
  55. .IF Music_Song_Total > 92 ?* F/ t5 z, [
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    ' e; u. ~0 c" s; i) i0 u
  57. .ELSE2 H1 i1 K4 y7 }" W
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    ( {: Y6 O( t9 q3 e) K( Y. f
  59. .ENDIF% o+ T& e$ Q# V9 ^. I" N

  60. 2 I1 D/ I; a6 w! W) L- [7 H
  61. .ENDIF' ~7 o8 v: r3 b1 z- ~0 y( D+ P: M
  62. 7 ~. J. G2 `  t8 ^
  63. 8 R: x& C# }. @
  64. Play_Time_Pos       = $21EC ;播放时间位置  Q3 b& L, b+ P6 K
  65. Play_State_Pos      = $222C ;播放状态位置
    # V) E( B% O( Y7 }8 O# y
  66. .ENDIF2 y& l4 @4 }  p0 k. r9 K
  67. ;------------------------------: w, |% h4 m5 d2 u* }
  68. Track_Name_Pos      = $216B ;曲目文本位置! c! q7 R( I5 l, |: k2 M
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    & A: w0 O1 A6 l+ i1 [
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置* ?, n9 C: N+ X" |- p+ @* i  H" {8 b
  71. ;==================================================. d2 }; u' M- ^& J5 S8 `" m
  72. Scroll_X = $00
    " I6 z7 j. V. ~5 J  {
  73. Scroll_Y = $06
    ) w# q8 z) n: v
  74. ;==================================================5 _! f% t/ r% h4 Q5 c; N
  75. RAM_Cln_1       = $0100
    ( w6 A0 U+ J& \
  76. RAM_Cln_1_Size  = $80
    & e' V% Y, i# Q) z& ?
  77. RAM_Cln_2       = $00E0
    + [; _8 L% U: n& {, B& R8 _
  78. RAM_Cln_2_Size  = $20  ]7 q* w) F5 L9 h
  79. RAM_Cln_3       = $00E0* X7 M$ P& T) @0 e0 E
  80. RAM_Cln_3_Size  = $20
    . }3 r9 X  E* U: R9 L% o4 O6 Z

  81. 3 s3 @2 z/ |) u) P+ H6 y- I
  82. ;==================================================
    $ D9 J! l# l% [; A3 Q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    ! ?3 h) l" [0 P/ e% H
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器# m, w( ]* [( q$ [7 @
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位6 }3 \' E! f7 k: a# X& g9 g
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    7 U. f. P0 l9 a
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    , H5 ^- W  t) ^4 W/ _
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 " G3 S$ q' P' Y1 B7 O0 y! ]. w8 N  [
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加: z8 [; C1 f4 o4 X( u5 J
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 - E9 M. E# Z$ G& I
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    ) j; \$ i# v- ~  m$ S
  92. APU_STATUS              =   $4015   ;声音通道切换
    9 L+ W" m9 I2 f; k
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    " G! }# `( O- n; E# o
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通: f( a6 q) ]: |3 l5 {2 z9 A
  95. ;==================================================4 n8 ]) z; J0 Y! f1 @
  96. MMC3_BANK_CTRL          =   $8000
    / d  k& ~+ M& B
  97. MMC3_BANK_DATA          =   $8001
    7 b: ^: ?6 }) Q; V. r
  98. MMC3_MIRRORING          =   $A000
    . `* D7 B: w2 \# z4 z3 X' O
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    $ A' s1 f; ]1 `& l  n. N. U
  100. MMC3_IRQ_LATCH          =   $C000: @3 d, I! U+ A, U. R. {; \) h# h) U
  101. MMC3_IRQ_RELOAD         =   $C0013 ~; X# ?: L0 e/ G6 P, h+ A/ ^
  102. MMC3_IRQ_DISABLE        =   $E000
    3 w9 {& G& y8 s; J, D: S4 l
  103. MMC3_IRQ_ENABLE         =   $E001
    7 ?0 l8 |! a8 l% G

  104. # \: l- O, `, a5 n: u0 M6 |
  105. ;音乐数据块$ s$ w, o& P6 l
  106. ' X% O, |, R/ W
  107. ;======================================================================
    : p' M. H6 t4 D# l8 }, J; R
  108. .IF SOUND_BAR_SHOW_ENABLE/ F) u! G1 R7 G0 J; D1 t- u5 B2 D
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    " H  o0 q! b9 \' X7 L% W- C/ \9 C
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    3 M" }# ~, v$ W, O" A  F, [! o
  111. 8 _) S+ p  l2 ^% f* a
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK( R7 z- y* w$ [- B
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    . Z8 e6 L. ~6 s0 K0 T$ d' t* C
  114. ) k7 k# K1 _  y+ s9 c0 Y) ]
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK/ E& f$ S0 s6 A' {
  116. .INCBIN "sound_bank_bar/music_data_2.bank"2 l0 h! X' k3 }5 M. N5 m
  117. 6 G: f+ S# L9 f* N
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    " o, [2 k( Z* \7 s3 W- N+ O
  119. .INCBIN "sound_bank_bar/music_data_3.bank"+ t# c& |* S+ c" W+ J3 O

  120. , F7 u3 l! L, y3 P
  121. .ELSE3 K4 H# Y2 M  O0 U6 |
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK8 L3 i' Y1 U9 J" M# b
  123. .INCBIN "sound_bank/music_data_0.bank"8 j9 M3 S/ `& G* N2 A4 ?- u" v0 Z/ T
  124. 9 e, J6 ]8 _8 K6 x/ O2 [3 J, J# x8 w
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    * T9 n" c5 z6 y: w
  126. .INCBIN "sound_bank/music_data_1.bank"7 k2 d+ W% P; R/ n+ C2 b' t7 \

  127. 9 c, A) n9 \5 [+ N+ w# T" ^
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    4 F; M6 }- L* c1 ^8 Q9 S6 E
  129. .INCBIN "sound_bank/music_data_2.bank"
      _3 W5 ?! C$ d$ B5 i
  130. ' \2 P0 S! S- _
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    - N! f  I# q3 s2 v5 w
  132. .INCBIN "sound_bank/music_data_3.bank"2 ]& b5 O, Z( ~$ b( K
  133. .ENDIF7 ~3 {9 G9 m0 a8 l% C* ^; T# w

  134. ; j* l: a% _' k' S( s# b+ e5 ?1 G) |
  135. ;CHR图形数据
    % k* V9 [6 g+ r1 i# T1 q/ L
  136. ;======================================================================6 z# Y7 n0 f0 U# F4 x& Q
  137. .BANK CHR_DATA_BANK$ r1 R- k3 g1 R
  138. .INCBIN "chr_bank/chr_data.chr"3 ~: U  b+ z; e

  139. 6 `. ]6 C* K9 I7 ~& L
  140. ;==================================================4 v3 E; Y5 ^2 Z  _
  141. PPU_Addr        = $03005 N' w& e3 v% K
  142. Palette_Addr    = $03C0
    + F1 u7 C2 R- \
  143. Sound_Bar       = PPU_Addr+$E0
    ! y5 z% D# p# Z( G- q4 L. c! {
  144. ;==================================================
    # H5 v7 r/ `$ Q. ~0 }: n! j0 g
  145. Palette_Update_Addr     = Palette_Addr+$0D
    # x2 ^! P- T( B9 l) \3 L
  146. Palette_Update_Max      = $2C
    6 d5 O3 p2 y9 ?
  147. Palette_Update_Min      = $21
    / p- x$ B: j/ P( B5 A$ m
  148. Palette_Update_Interval = 60! U5 @: ^' V* z9 m: |1 A
  149. ;==================================================, i- }* U) j1 @) V0 z6 t' N/ |; F
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    7 _: @0 o3 q6 [5 F; S: Z
  151. Screen_State        = Sound_Bar_Cnt+$01
    5 R% m8 z  \0 H& H: D0 k# W% f
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    " P* m4 M1 K% n+ ~# o0 Y
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    8 c* x; C9 I5 h3 O9 S3 b% [
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ; h" N/ W" s/ X( }0 {/ T
  155. ;==================================================4 `' S, u" L2 @. |: i
  156. Data_L              = $70
    # Q. g8 Z$ v! \0 k
  157. Data_H              = Data_L + $018 f) o) Y6 H6 a! z$ P- e
  158. Data_Cnt            = Data_L + $02
    # V& {$ A" {# w+ V
  159. Data_Buf            = Data_L + $03
    1 i+ t; U; ^! e+ \+ X
  160. Time_Wait_Cnt       = Data_L + $04
    $ _7 O7 L5 w# s& K
  161. Palette_Wait_Cnt    = Data_L + $05; t& e' b9 o- B. f5 y" h
  162. Palette_Update_Flag = Data_L + $06
    + `# ^+ N4 [# r6 l5 [4 V
  163. Show_Track_Name     = Data_L + $07
    8 S; ?! B" m9 M8 J: l
  164. ;==================================================' q' {  g" n3 u. f$ Y# t9 V( k
  165. Key_Keep            = Show_Track_Name + 1
    ; U: k) W8 K1 C
  166. Key_Once            = Key_Keep+$01& P+ _: \. H+ M. y
  167. Key_Kemp            = Key_Keep+$02, i5 ?) v" [7 g, i# l
  168. Key_Temp            = Key_Keep+$031 c; k: s" T: c; h. R' F
  169. Key_Getv            = Key_Keep+$04. v! |2 T7 g" B4 W$ v" w
  170. ;==================================================( J1 z% @- Y' _" P7 x1 F
  171. Music_Cur           = Key_Getv+$01: B$ m7 R& a- F$ q) L
  172. Music_Last          = Music_Cur+$016 V: L+ y+ x5 e& c
  173. Music_State         = Music_Cur+$02
    $ X" [, \9 n0 \$ A7 r4 L% B: t
  174. ;==================================================
    $ J6 u& N$ m% R. c
  175. HEX_Data            = Music_State+$01
    8 Y$ M0 O  c/ L4 D
  176. DEC_H               = HEX_Data+$01
    $ G. `/ w: u* g' v, e
  177. DEC_T               = HEX_Data+$020 M3 Z; O2 ~: {; a" {$ f
  178. DEC_L               = HEX_Data+$03
    : ]5 {! O4 V1 x; G
  179. ;==================================================
    / _5 ~* E' W- F& |" u
  180. Time_S              = DEC_L+$01
    & w# v6 I1 N2 |% ]# P/ [) d3 Y
  181. Time_M              = Time_S+$015 T4 x. B8 X+ J; }* S5 g# v* i& W9 [0 I
  182. Time_H              = Time_S+$025 s* r" L8 `+ d" ?+ J
  183. Time_Cnt            = Time_S+$03
    . H! E) r" U, s& S( z; B5 l

  184. 4 p! [9 F0 V) q
  185. ;==================================================
    8 D3 f5 c* u7 K. v* _
  186. Music_Bank_8000 = Time_Cnt + 1( b" W) _6 B& P1 S' X
  187. Music_Bank_A000 = Music_Bank_8000 + 1$ K1 W  L& N$ v' j8 y6 R2 v! G" _$ T
  188. ;==================================================
      r2 G; P: ?/ j

  189. ; f6 {* }" `% [, T- E
  190. ;======================================================================  z# J: R- z6 r  _9 K# u
  191. .BANK PROGRAM_BANK4 f7 ~% X( M; }9 N7 M2 A% v! b
  192. .ORG PROGRAM_ADDR
    ! S+ K+ d' X, l

  193. ! A1 h* O5 _+ |$ [
  194. ;==================================================4 `4 N1 [6 E2 t9 w% {- \( k
  195. NmiProgramProcess;NMI中断程序处理
    8 m; c1 O; u, ]; o
  196. ;处理PPU图像% ?1 i1 `/ A% W5 e. o
  197. JSR PPU_Proc
    6 u1 K$ Z. i$ z

  198. 4 {/ C7 B" C: R6 `, f& k8 B6 }0 Z
  199. ;启用NMI中断
    * U/ p3 Q9 m, w
  200. LDA #$80
    + A8 @; U  P5 Z8 e  D3 ^
  201. STA PPU_CTRL
    + `: e+ l8 l8 m- W
  202. & w+ s( P, O- x3 Z( h
  203. ;更新调色板1 o7 X1 t9 L9 g) q+ v0 }
  204. JSR Update_Palette_Data" K, T4 g5 f1 W& i3 U' }- a

  205. " }8 [) Z1 F, O8 F, e' C( e
  206. ;显示时间(缓冲)
    6 ?  _; s# ^8 T: s' w, C
  207. JSR Time_Show( R' S5 z3 d3 U
  208. - t% _8 O/ S$ A# ]0 V% U6 L% S
  209. ;播放计时
    1 c' Z, N& r& F! m4 g, l
  210. JSR Time_Count
    * o0 M( V; n7 T! i! z# X
  211. ; P' g$ E! G* p$ j/ b( L% ?
  212. ;播放声音* \: r# [; }) G
  213. JSR Sound_Play
    ( Z2 g5 [8 k  L4 P  |# P
  214. 5 ]* `0 D" h8 O+ w  b6 O" R. b
  215. ;切换音乐(手柄触发). g; i. J* U+ F: I/ \' H
  216. JSR Music_Switch
    3 V' N, Q  n; E5 H; c4 d- {7 _- V; M

  217. ' }5 I9 e5 L: \( A5 k
  218. ;音乐显示(缓冲)8 b1 R- V+ C2 s4 y- R$ n0 \  R
  219. .IF SOUND_BAR_SHOW_ENABLE
    & _9 t, G  @- U4 X7 ^; b4 c! E
  220. JSR Music_Vision$ r- ]0 f/ V7 y6 h8 R4 [
  221. .ENDIF) Y# J5 {$ _4 D1 L

  222. & R4 L5 |% ~1 S! d- v- g4 R
  223. LDA Time_Wait_Cnt3 `6 V9 v" |1 @* }* l
  224. BEQ NmiProgramProcessEnd; \: h* }: s2 C
  225. DEC Time_Wait_Cnt9 M2 w- z% d# Z* i) |# A9 W- A: J3 A
  226. NmiProgramProcessEnd
    " u# q8 `/ D+ q( r. P0 C
  227. RTS/ P9 k, G! S1 l6 r# c, v- V  S
  228. 3 \- e, a9 k' ~- P2 s0 n. ~
  229. ;==================================================
    ) s/ _. {: u+ t  P
  230. ProgramBegin;主程序' U2 I/ g8 J/ D
  231. LDA #$00
    4 M/ t" o. q5 i4 ^. _
  232. STA PPU_CTRL
    ' U3 g5 c9 d  C3 j
  233. STA PPU_STATUS# H: R0 @) N! U  v: O3 a! p: P! c5 ~
  234. STA PPU_MASK
    * n2 J5 }* w% I& Q
  235. STA APU_STATUS$ |4 |) a! a) w
  236. STA PPU_SCROLL) }% ?+ N6 z( C9 b1 j- |) J
  237. STA PPU_SCROLL
    5 l6 _5 w0 E, D& o# v+ Z
  238. LDA #$C0
    / c0 j' i0 f$ e- k
  239. STA JOY2_FRAME1 f$ V8 {& {* a! j( D: {3 h

  240. + w# ]. I7 p; d1 x/ k( g# N
  241. LDX #$FF) J: H- Z5 m. H& w  ?) b& K; v
  242. TXS3 e9 k! |  S) I4 B: q2 F
  243. LDA #$00
    7 [+ Y8 C' ?: z  g+ F; |
  244. STA PPU_CTRL: A0 M: A4 W2 G
  245. STA PPU_MASK
    6 Y1 c# |1 o. B
  246. STA MMC3_IRQ_DISABLE* o- {8 o. R4 T8 D
  247. 9 \; W4 k3 q$ d6 N0 d) A, p7 s1 h
  248. ;==============================
    ! |# [. y7 q/ ^) ~$ s; O3 Y. Y
  249. ;调色板清空: U6 y/ F. e' M' }( C$ J
  250. LDA #$3F+ i) O) g: U! F
  251. STA PPU_ADDRESS
    6 X- `2 Y6 a% o- e8 H
  252. LDA #$00
    ( h0 }9 M! J- {
  253. STA PPU_ADDRESS
    + ^& f7 ]5 x0 Z, C1 s# p
  254. LDA #$0F
    9 ?4 Y: x' N) r+ t+ ^- p
  255. Palette_Clear
    3 o$ h& e3 k& _0 ]+ t3 ?6 z
  256. STA PPU_DATA3 Z# B. Y" M+ c/ [- i' b! m, |
  257. INX
      l  `7 C6 r0 k) S6 ?8 R
  258. CPX #$20
    8 J. g4 E+ z1 b
  259. BCC Palette_Clear
    8 o* V+ n" J/ ^+ W
  260. LDA #$00; \/ c3 t$ D0 G' J8 h
  261. STA APU_STATUS" q7 U+ Z! `' d) |  j9 K( [; \" `
  262. ;==============================% g5 F% T2 S% h
  263. ;初始化背景调色板6 I8 |; m9 T" s8 D3 p( d/ L
  264. JSR Set_Palette_Color$ |% f, A& V8 N  K" `
  265. JSR Set_NameTable_Attributes2 h) ^6 c* K. A& x
  266. 3 @- n- n+ \$ p; m# o: J) S
  267. ;==============================
    ' u5 J3 ]( ?5 S3 w
  268. ;RAM初始化
    0 L7 ^: O1 I9 ]$ S2 _5 \6 v4 w
  269. RAM_Clear_All- g1 S2 a9 x. e" k3 P6 @4 M
  270. LDX #$00+ H. _9 L7 g. T0 i
  271. LDA #$00
    " P4 U; N3 I! M
  272. RAM_Clear_All_Start
    3 n* f3 g0 ~4 X* H6 c1 }
  273. STA $00,X
    0 h' @( u" }) l
  274. STA $0100,X
    - Q, i$ i+ Y# U+ @/ [0 q
  275. STA $0200,X1 \) A; G* U: m. n! t/ F% U
  276. STA $0300,X
    7 b) L: f/ r9 ?+ I6 p
  277. STA $0400,X6 I* d6 [0 j" t# K. u
  278. STA $0500,X6 e% g" x5 x8 q  p  t+ S
  279. STA $0600,X
    , @* i: Y9 X" q4 k
  280. STA $0700,X
    : o8 L6 J  F8 f* _
  281. INX
    3 W/ K+ C* l+ _; _/ O
  282. BNE RAM_Clear_All_Start. V( q$ U8 k/ p6 `# f" Y  S1 {8 X- ~- z1 v

  283. 1 B; `: Q! m% a7 T( o
  284. JSR VramInit( S0 g: E/ O8 A7 F% U/ y
  285. JSR Init_Palette_Addr/ ^5 p# Y( c4 w& X5 k
  286. 3 m: ~2 F4 s( k2 Y* ~
  287. .IF Music_Reset_Addr
    ! i. o8 L% G. k# {& x& V
  288. JSR Sound_Reset
    * w$ C  s. O& _, S1 Y# {
  289. .Endif
    ; T( m" m* k+ [8 w$ v/ g- f1 k

  290. 6 L1 ]1 |( K! U1 Y, z# d( m
  291. LDA #Music_Start_Song-$01
    ) F* l* q3 r' ^" K# I* |7 C( |9 M
  292. STA Music_Cur
    8 r' m$ D7 O2 L. C

  293. ( h& V. O$ Z/ F0 z  @' J
  294. JSR Show_Music_Text
    * z; h) e( g4 Y3 n3 \$ J

  295. 5 P: z$ [1 w  e3 A/ o" |8 \
  296. .IF SOUND_BAR_SHOW_ENABLE
    - Q2 x. z1 k: u% w7 C  ~/ G7 J$ b
  297. JSR Sound_Bar_Text_Set, H& K0 e3 p; R1 [+ v
  298. .ENDIF
    0 R) T6 o0 Z9 x/ }, l

  299. / T0 y- T1 \% _# Z" q  _
  300. .IF Track_Name_Pos) j: G( ]- P1 b# l# ?1 S
  301. JSR Show_Track_Info2 p* i* i/ P% R! w5 i
  302. .ENDIF
    4 J7 j3 B7 U$ y- P- e3 o- K

  303. 6 e& F# A1 J+ l9 ]8 J7 j$ T$ S
  304. JSR PPU_Proc* S( D/ \  Z- k. q8 ?5 U# S

  305. / S& ?6 L( T% U8 [1 N
  306. LDA #$0E# R( v( P' f3 A3 r) Z' ~& M
  307. STA Screen_State
    0 N  H# V. G. C! U1 L

  308. 6 K7 o5 c; L5 I6 Y; B% W
  309. JSR Sund_Bank_Init
    : _9 c6 k+ B3 S3 {' N- L) K! b3 z

  310. ( u/ B: ^$ Q, t+ E/ U* O
  311. JSR Music_Show. T0 i0 H7 A$ S; C% B
  312. JSR Time_Show$ H8 b* k7 ?" B3 X
  313. JSR Music_Stata_Show( |( E) E/ @4 [4 g( l; q
  314. JSR Time_Delay3 ~' B& E9 `# W% p
  315. 3 q, ~/ \, w$ J' b

  316. ) K- t* q2 y( M2 p0 \
  317. LDA #$80
    , b; w- X$ N1 p: K1 Z. a0 @
  318. STA PPU_CTRL
    - D3 B8 A* ^' T0 f3 R1 A5 g. @
  319. ( T7 u  c7 P) g# B2 E' d
  320. LDA #$20
    & Y1 J7 O1 j9 w
  321. STA Time_Wait_Cnt; Z: q. l- r# k- Y# G

  322. , s) C' J  t, _. u
  323. Wait_Time_Over9 w- x7 _7 a4 n9 G
  324. LDA Time_Wait_Cnt
    7 g- R8 p. x, W1 ~$ @) N# o6 w
  325. BNE Wait_Time_Over
    , E/ K3 h4 Z1 ~0 r' E/ k
  326. & _6 `/ y) z; z' |7 r
  327. LDA #$1F
    $ d$ ^: K2 [3 j/ q- p6 j. L
  328. STA APU_STATUS# e7 w; w. N, R
  329. LDA Music_Cur. Y, O! k% N$ M- B
  330. JSR Sound_Init
    7 `5 `/ V4 V5 [; n0 o0 z

  331. , }5 h2 M- {' T) Y
  332. JMP MainLoop
    * M' `, W) X* W0 b( G
  333. ) w; ^- b2 m' ^, J9 d, G9 I- M
  334. ;==============================9 @+ i6 b8 s! F. t
  335. Time_Delay;延时等待
    9 o( H# d2 {- m. P. y3 b8 A. W; \
  336. LDA PPU_STATUS, m9 ]0 q  }8 g
  337. BPL Time_Delay$ H, B, Q. K5 I
  338. RTS4 J" M2 A- \8 B, c+ w+ N

  339. ' h* r4 A/ o& W" ^8 ~# l) O' D
  340. ;==============================
      Y6 @9 I8 X6 O- ], E# c# h5 H$ C
  341. VramInit;初始化图形内存. ^: a& g6 a7 Y. K6 r, H2 I( O" z
  342. LDA #CHR_DATA_BANK
    9 S4 C) _& f  Z" e; a
  343. JSR SwitchBankA000
    ; I- K$ q, C7 P9 @
  344. LDA #LOW(CHR_DATA_ADDR)5 y# ^1 `" l! I
  345. STA <Data_L& _  M) o3 V' ~. F4 }; g+ v( o% w
  346. LDA #HIGH(CHR_DATA_ADDR): T# L5 D1 W' s0 y" U! x# e9 u# B4 n
  347. STA <Data_H
    ( c. f! T" b% y
  348. LDY #$00
    % R9 l: @" @3 \( B7 a% Q  `
  349. LDX #$20
    ' I: s+ z0 m+ _
  350. LDA #$00- b5 y1 n0 F+ w
  351. STA PPU_ADDRESS
    6 j) H/ h" t% B3 D- l& [/ K* F4 ~
  352. STA PPU_ADDRESS9 L( h3 k4 j8 X0 x# `1 O1 z
  353. VramInitWrite
    3 c* S, S2 h. {& V/ M8 l1 h
  354. LDA [Data_L],Y* o! e' X# l, X; c
  355. STA PPU_DATA8 W; v4 \9 _% }* G$ D: x3 y
  356. INY. K: O1 K. P: j
  357. BNE VramInitWrite) ]6 X2 k' `* Z; r; F( N1 w
  358. INC Data_H
    ) H* E7 Z3 Q+ Q
  359. DEX4 {3 k; x( a( g) K% ?# T
  360. BNE VramInitWrite
    9 L7 J; a7 [4 E: {3 h/ K3 J
  361. RTS
    + E! p& [& V4 n3 P" G7 d& d# r

  362. * a% e% [" f  {' N, u
  363. ;==============================
    % f5 I: E) D! a: @0 K7 z0 F  |
  364. RAM_Clear;RAM清除
    # I7 R8 Z( c! M. Y3 A  `1 u. v1 A& X
  365. LDX #$00
    2 k# U( r6 L- Q. U1 Y+ C
  366. LDA #$00- Y$ n8 z" |% I( P% V
  367. RAM_Clear_1
    8 K4 \# R3 w. e; T
  368. STA RAM_Cln_1,X
    ! Z+ Q8 T' Q4 F4 S6 r7 x! x# `
  369. INX; B$ h6 h$ i% [1 _" q" k4 Q
  370. CPX #RAM_Cln_1_Size: |" d  h9 @- N; Q6 t$ X; O8 X: ~! E
  371. BNE RAM_Clear_1" U* {! ^  D2 L: k7 w' F
  372. LDX #$00
    ) R3 o& Q. f% A( k, ]4 u. t
  373. RAM_Clear_2$ n5 _7 j  x# s+ v9 y: b
  374. STA RAM_Cln_2,X
    , S( w% T+ ?$ c, f- x( `
  375. INX- n  I/ R+ K$ m) O; T$ d
  376. CPX #RAM_Cln_2_Size4 l- s& z' q% o/ H
  377. BNE RAM_Clear_25 K$ j% \. U7 w: H, c" S9 V
  378. LDX #$00
    5 s9 H. C' c* b6 s2 Z
  379. RAM_Clear_3. l( J, Q; d! |% Q; V/ @* ?
  380. STA RAM_Cln_3,X  O7 k7 c, B8 e: ]
  381. INX) P9 n' c, G& b4 D: b7 z
  382. CPX #RAM_Cln_3_Size7 p1 v) j. G2 g- k% Q
  383. BNE RAM_Clear_3
    ' \, B6 q, y. s
  384. RTS
    2 i, \# [2 M) v. O

  385.   a2 W2 ~2 [/ X! Q! \
  386. ;==============================9 Y  l4 m# D# f0 G
  387. ;音乐切换2 _- K, Y/ K# D* J+ B) J
  388. Music_Switch/ j) {, A8 [$ ]7 A
  389. JSR Key_Proc& P' {1 M) e, C5 o
  390. LDA Key_Once
    3 i7 Q1 g1 V- ?9 _1 _
  391. CMP #$10
    / |' [2 i- F' E' E% Q% l
  392. BNE Music_Start_SongStop/ t- e+ H" @9 Y
  393. JSR Music_ReSet
    * P; Q8 T& ?7 a8 [1 E  ^; ^% A1 t! G

  394. / H3 r) W/ [2 ]
  395. ;音乐停止
    $ u6 E9 w2 T& F
  396. Music_Start_SongStop
    : D" V' ^8 x( N! p* u$ Q/ Y
  397. LDA Key_Once
    , c+ F& X+ J; G- Y
  398. CMP #$20
    ! v$ S! ^2 c* y* h9 N) J3 j/ u
  399. BNE Music_arrow, C$ N; U+ ~; l
  400. LDA #$01
    3 H4 k9 `& l- S: @9 t
  401. STA Music_State, W3 z4 o9 t- @' f
  402. JSR Music_Bar_ReSet
    / b# `8 ]1 H- z  F5 \1 I6 V
  403. JSR Time_ReSet
    / y, F$ _7 }& v' T4 Y
  404. JSR RAM_Clear
    5 O& Y( H. c9 m" K3 w
  405. JSR Sound_Clear
    # r" A0 j7 v% V% I- Q* C0 i) {& N* r. i
  406. JSR Music_Stata_Show
    ( J$ J8 @: Y' ~, i* P6 Z9 ]% J3 [1 ?
  407. Music_arrow
    9 `$ e+ q* d# N- T- a% R- H
  408. LDA Key_Once
    . X4 q  P+ ]3 r( Y
  409. AND #$CF- T' K5 ?# z4 y1 m/ ]
  410. BEQ Music_Switch_End4 [( @* N: R+ h4 J- l
  411. JSR Music_Number$ ^3 @! [7 I: o$ j
  412. JSR Music_ReSet7 f8 @2 A: Y" N# P! E* N
  413. JSR Music_Show7 }! b! }" c4 s
  414. Music_Switch_End
    1 _" D- \* x& d: f: Q& Q. W$ B6 R
  415. RTS
    $ a# h2 X  m/ C$ B8 V$ y
  416. 4 L* M8 {' q0 X$ h
  417. ;==============================
    / K, Z3 z8 \& E7 J
  418. ;音乐曲目切换
    : }4 p) ?, \" I+ R. D: y
  419. Music_Number7 W+ p' z; F2 c" f! m
  420. LDA Music_Cur1 x1 b, K2 ?5 J+ V0 b% M
  421. STA Music_Last
    , i  S6 e# Y. C5 L% a
  422. Music_Decrease) Q' A8 b0 D% n% s: s; z
  423. LDA Key_Once% {2 q( M& }" E1 q
  424. AND #$42( _0 i2 S0 R' Q# g" o
  425. BEQ Music_Increase* r- n  i5 f7 e; S( O
  426. LDA Music_Cur
    ( q2 h2 L( X7 N7 C
  427. BEQ Music_Increase6 ]; _! o' ]+ g' Z) v
  428. DEC Music_Cur4 g. v6 u! d; c, d
  429. Music_Increase+ u; t' _& l- C) O/ R: P
  430. LDA Key_Once
    ) ]; D- c7 Q5 d9 d$ M3 W
  431. AND #$81( g; r% \7 W" O# \% x9 _  G
  432. BEQ Music_Decrease_105 {! [- S4 a6 Q" g  |0 L! l9 W
  433. LDA Music_Cur) S5 [/ O8 h( T* ?3 \" h/ h9 N' j
  434. CMP #Music_Song_Total-01
    + i& B& @9 k5 F% A  ?" }
  435. BCS Music_Decrease_10
    * U  T7 o. p$ Q& ?  K
  436. INC Music_Cur
    3 w( R. G) X; I+ n
  437. Music_Decrease_10
    ( c! b7 N1 V4 _2 S+ I
  438. LDA Key_Once
    7 N# n" S& j, `  D
  439. CMP #$049 x/ L2 q2 }' f$ U
  440. BNE Music_Increase_102 q- k/ V+ o, u' I9 Z
  441. LDA Music_Cur
    7 ~# ^+ I' @8 R4 ]1 ^$ y
  442. CMP #10
    ) I8 N+ u: F* U1 C% r
  443. BCC Music_Start_Song_Min
    4 j$ K& d/ R, I: A# p5 b0 y
  444. LDA Music_Cur3 l( v$ U. Q0 \5 M
  445. SEC: v+ @, Y5 v/ J
  446. SBC #10
    1 p5 x+ I- f$ R2 O
  447. STA Music_Cur- f& {  d) @% A; C6 R, x6 q* b
  448. LDA #$00
    * T4 ?- R& F1 {5 X: l
  449. BEQ Music_Increase_10
    $ ?' l# _' p% [' C& S. X% d
  450. Music_Start_Song_Min- `1 J8 Z/ g/ d! D
  451. LDA #$00
    ( C8 _) A4 x  K% k8 V
  452. STA Music_Cur
    , u& ~+ d5 e% \7 v' O5 c
  453. Music_Increase_10
    - i9 W. |4 e5 X1 h- D3 [; M% y2 b
  454. LDA Key_Once
    1 L- O8 t& X/ P! k' o0 x
  455. CMP #$08
    - {* Y! e  T' }* v1 }. `5 Q9 U
  456. BNE Music_Number_End
    9 ~2 b0 i! c/ [! a5 s
  457. LDA Music_Cur
    ' b! Z3 g6 _, w* i7 q" v
  458. CLC2 x" y# `2 f9 {) m* a8 q1 C; Q
  459. ADC #10
    % |: y% b3 R: u+ w6 b9 K
  460. CMP #Music_Song_Total-01
    0 E  N0 d  v0 w2 t
  461. BCS Music_Start_Song_Max/ _; C$ \1 y. _- @1 f! e/ r
  462. STA Music_Cur
    ) E9 B' z/ J- o
  463. LDA #00
    6 u) G: c7 ]+ }, ~) L0 [' H
  464. BEQ Music_Number_End2 u& g+ y+ i# O  `9 S2 M
  465. Music_Start_Song_Max
    . M* X: [: f$ T; N9 ?3 u3 m' P
  466. LDA #Music_Song_Total-01( N& {6 x) C$ q" @$ u* N6 b
  467. STA Music_Cur! n" g7 y+ k" J# V" p( j
  468. Music_Number_End
    % x: x+ P4 L8 }; S$ k" [
  469. RTS9 @2 F2 ^' W' }7 ]; I

  470. ) y3 G8 u0 `8 n( y* U$ l  ~
  471. ;==============================& t9 f( o& U7 K7 s9 _
  472. ;音乐重设2 l" r0 A% i' F7 O
  473. Music_ReSet
    * h* p4 e% \- X8 H! I' }1 Q
  474. JSR RAM_Clear; r( L) o1 f1 b7 L. f
  475. JSR Sound_Clear
    7 h0 E! c. A4 E
  476. LDA #$1F, }7 s) r/ P) D
  477. STA APU_STATUS
    - {8 j. g- o! w! K5 u
  478. LDA Music_Cur4 b+ e& i7 `7 ^
  479. JSR Sound_Init* p, u# @) u0 z
  480. RTS& X% U+ u. ]. u
  481. . s8 M  H& c) i: Q! f/ E" [: D
  482. ;==============================
    # {$ m; g  z" T
  483. ;音乐端口清除/ h, v9 a: G+ E7 K5 j9 p0 M
  484. Sound_Clear
    4 P! p- C" u7 p3 g! X& |1 T+ p) w* \- G
  485. LDA #$00
    8 l- E7 \  \5 L) q; q
  486. STA APU_STATUS
    6 N; |2 Z. e5 s0 V+ Y
  487. LDX #$00' P) _  I# u1 Y2 i3 ?
  488. Sound_Clear_Start
    " e% }6 Q* K% q9 O9 Z4 j2 q
  489. STA $4000,X
    / E2 l: J. W- ?' o  E
  490. INX3 n- l, ^% Q* }. K6 f
  491. CPX #$14& P: k$ {; B5 g+ x, X. F2 [% J
  492. BCC Sound_Clear_Start1 ]" _" N, K( x4 D
  493. RTS! p: z' E9 u) R5 @, _

  494. & Y' X7 X: O/ i5 S- }. ~: ~  ]) \
  495. ;==============================
    * c/ ?  T5 J" u
  496. ;按键处理/ q4 K7 n% d6 H* ^2 {% m
  497. Key_Proc* I9 `' ?2 x3 j+ _5 ]3 G
  498. JSR Key_Scan& C4 \3 l8 r+ K. o
  499. LDA Key_Keep
    9 o8 z+ H: J# q. a
  500. STA Key_Temp
    2 c. L8 {1 a/ R% H$ J$ k1 q
  501. JSR Key_Scan" E6 ^+ |* X/ J& Q- f7 C
  502. LDA Key_Keep
    ! D. ~, @) [. E* k( \5 A
  503. CMP Key_Temp4 q$ x$ f% D1 ]8 \
  504. BEQ Key_Get_Once
    ; C! g4 U! i+ O0 P1 b- r
  505. LDA Key_Kemp! x. H- ]" J: D/ R/ i) x7 \' P
  506. STA Key_Keep
    : M) r3 m3 _4 K6 S2 W4 b
  507. Key_Get_Once
    - e) n* K; e- V+ m. o$ T) g' Y
  508. TAY
    ' f  F* D# h) L+ Y! `6 @
  509. EOR Key_Kemp
    ' s3 Z$ J* i5 t; O
  510. AND Key_Keep+ w+ ?: O. S) m( z9 A/ t
  511. STA Key_Once
    . A0 R+ |& S. h7 c- f' I
  512. STY Key_Kemp
    7 I& b5 L- B/ b) Z$ r$ G- w. I
  513. RTS
    3 ]3 k) @* R+ d; n! p
  514. ;------------------------------
    ' d5 Q  ~' v+ U+ @  D: x# N5 Z
  515. ;按键扫描
    ! c5 ?4 a5 i" Y: J1 ~
  516. Key_Scan
    7 a0 D' U* ]# k* ?
  517. LDX #$01
    1 ?. R8 c5 d$ h. C& J# Q$ h/ W3 F/ w3 Z
  518. STX JOY1_FRAME
    5 Q: J: k( e" {- }; t  Q, F
  519. DEX6 u0 K) G  e! Z" U
  520. STX JOY1_FRAME5 w& T! j* ?4 l) P
  521. LDX #$088 k- ]& P" G( I) l4 {
  522. Key_Value
    1 M7 T# f3 [. y" ]# q+ r% e' M
  523. LDA JOY1_FRAME4 S$ z* \6 b1 ~. Q9 e
  524. STA Key_Getv
    7 Z8 ^1 V) b' h( g3 W; [
  525. LSR A% V2 D2 N' G  N/ p3 V
  526. ORA Key_Getv
    : W# a+ R# N' l$ j7 n5 D( P# P
  527. LSR A
    0 x9 \; s3 i$ s" H" Q" ^3 k& t! I2 Q
  528. ROL Key_Keep7 z" q! H! B5 j. e6 U$ _
  529. DEX0 c3 u4 d6 j2 D3 r$ _( e" k
  530. BNE Key_Value; X$ v. Z8 y' p# D6 t2 h
  531. RTS9 N; H  q9 W4 s9 k$ h
  532. * x% L( _8 [+ e5 F
  533. ;==============================
    8 I, ]8 r7 j! \7 D5 S, A
  534. .IF SOUND_BAR_SHOW_ENABLE
    " ^/ F4 u( y* G' `; g. x7 O' x
  535. ;音乐条显示5 K7 j( t8 e5 ], R, [
  536. Music_Vision! D& l1 o# l) U6 `8 ^6 m
  537. JSR Music_Animation7 i$ _+ {+ H) o9 h
  538. JSR PPU_End
    8 N6 h! d& i( T/ Y* [1 q
  539. RTS
    & L  C# ]" R, T# r
  540. ;------------------------------
    , A0 W# z7 z4 p
  541. ;音乐条显示处理2 W2 T; w' _1 b0 y* w# f
  542. Music_Animation
    5 [! b8 ^4 m! i
  543. LDX PPU_Cur
    6 [% z8 V/ Y0 g* T% F; I& H
  544. LDA #Mode_Line: f. m# D9 l( E- j) }) O$ S' ~/ p
  545. STA PPU_Addr,X& \# p/ C3 A1 F' l5 I  u# R. F
  546. INX$ Y5 y7 K. J% o5 U8 Q% C
  547. LDA #HIGH(Sound_Bar_Pos)" [1 h# k( \, d+ m; K; F' N# t
  548. STA PPU_Addr,X3 @# Y. b+ X/ v7 z2 S$ A+ `
  549. INX
    + M/ @; r% Y- n4 \" u. L- |/ p
  550. LDA #LOW(Sound_Bar_Pos)8 m( C7 W0 H; t. |$ H
  551. STA PPU_Addr,X
    0 {7 x. C) @" W' }1 u& |! Z
  552. INX
    3 u6 g4 Q4 p" D7 m# {) b  m
  553. LDA Sound_Bar$ T+ K9 p9 W4 Y& h/ \; O# I
  554. JSR Volume_Convert
    ) ~2 G3 M# S% x. p
  555. JSR PPU_Return
    # ~* B& H' Q! g6 z
  556. LDA Sound_Bar+$4: D% _2 k4 s5 V5 }5 @) I+ _4 P
  557. JSR Volume_Convert
    / u7 s& V4 M# D
  558. JSR PPU_Return2 ^! O- r: L% \% v& h  h6 |& R
  559. LDA Sound_Bar+$8
    ) d6 |% K/ K8 A9 S9 m
  560. JSR Volume_Convert_Ex, e* u3 d9 k+ k# Q  {( i$ r
  561. JSR PPU_Return
      J1 S! f4 ~9 h
  562. LDA Sound_Bar+$C. o' A% I. {2 d
  563. JSR Volume_Convert  T& j( z+ K+ b7 U( Z, O2 p0 `/ e
  564. JSR PPU_Return: q$ r: g3 `$ ~( [
  565. LDY #$10
    0 A6 g2 _% x) b6 G- C4 e
  566. LDA APU_STATUS
    " q$ O& X8 C. K5 c" P, R
  567. AND #$10" M1 A; y2 i  i7 p0 ^; y
  568. BNE Volume_Count: o8 i& a8 R6 y
  569. LDY #$00
    % u, G/ W& q( |
  570. BEQ Volume_Count
    ! A. Z, c1 ~. B2 l( D* @: S, Q
  571. ;------------------------------& h% `2 z% q# m' Q, t; f) `) k
  572. ;音乐条处理
    7 ]& I  Y! U4 h1 P! \8 z7 z3 {
  573. Volume_Convert_Ex1 F5 P' k; F0 g5 B9 [
  574. AND #$1F
    8 A2 Z0 U2 t* l1 m. o6 z
  575. TAY" H6 _" U4 B4 X
  576. BNE Volume_Count, \1 o7 V+ M; D9 a* T  S! T
  577. Volume_Convert6 Q0 |: p' Y9 k; p5 f2 Z% n9 h# C
  578. AND #$0F
    1 u# X% N! Z+ d* [+ Z! ~' j) m
  579. TAY
    - x% [" ]- s2 Y  B  a: {
  580. Volume_Count
    0 P' J# q8 P+ |! K9 G. U2 G: e
  581. LDA #$08
    $ Q9 W" Z& j' X: w# H6 `3 D8 a( f
  582. STA Sound_Bar_Cnt3 e7 z) L  ~1 n, F# V" n
  583. Volume_FILL7 B! S. f) |: _$ Y# a: f
  584. DEY; a: I7 A1 s" S! A, w/ x% c
  585. BEQ Volume_Half
    8 Q! v+ l* t- A+ _2 u& M7 h
  586. BMI Volume_Empty
    % G6 h+ j1 \3 `  ]+ A) ~/ G+ |
  587. DEY
    2 K  d' S/ K# O( L( x& v
  588. Volume_Full
    ' @) `: F, N7 P/ I" o1 v4 u
  589. LDA #$16
    & @6 I- |. [: Z5 J- n5 [
  590. BNE Volume_PPU
    7 E% s8 T$ I5 _; v. h. n
  591. Volume_Half
    7 J+ v4 q7 ~2 _6 I3 p# d! w8 x
  592. LDA #$150 u. k2 Z( [- B3 g
  593. BNE Volume_PPU/ S4 j# z0 S7 h# j2 f6 s, W* e- a( O
  594. Volume_Empty
    ' V! @) t6 A: Z, X
  595. LDA #$147 [, _# F  ?9 t9 S! J+ d7 Z& S
  596. Volume_PPU2 j3 ?) R, B* P  b
  597. STA PPU_Addr,X
    : s$ a; \% H  n3 `
  598. INX) ^0 G0 Y9 e4 R- P
  599. DEC Sound_Bar_Cnt8 Q7 Q/ C0 X3 {1 ^% [! q3 Y$ h" y
  600. BNE Volume_FILL
    * r! K8 \2 J( B) x
  601. RTS
    1 J: B+ U3 o4 _& Y; x3 Q
  602.   T1 h! V2 }: U: j# o: ~7 B
  603. .ENDIF
    * a" s1 z" |/ y- t% }6 l. A
  604. 4 h+ j& X9 j. h0 T3 T2 Y7 p
  605. ;==============================- ^% m* }! ^/ ?9 k  a- [
  606. PPU_Addr_Set;PPU行开始% {( {1 Z  i$ Z- Y2 c: w
  607. LDX PPU_Cur
    5 ^) z: k9 L& V; [+ B6 w9 [- _
  608. LDA #Mode_Line$ m4 Y4 J7 d! j0 ?  L$ d0 @( y
  609. STA PPU_Addr,X: m' r0 N. g7 o) M3 z9 q, P: D
  610. INX: q9 C$ c: V. ~+ X4 @- j  j, l
  611. RTS
    # t* P" a/ r1 y  y0 p. C
  612. 7 y0 f3 o5 a4 _: T3 h6 e3 ]
  613. PPU_Return;PPU转行$ h; D" }9 J5 e+ r
  614. LDA #Flag_Over
    5 Q+ v- l3 L% v$ `
  615. STA PPU_Addr,X
    * y  @: O( [7 r4 X6 p
  616. INX$ a( @7 Q1 v' `
  617. LDA #Mode_Return
    ' C4 J  h) q; p  T) b4 k! M4 u
  618. STA PPU_Addr,X% |7 I+ @3 O; F& T
  619. INX; R$ ?+ G6 {/ O, b9 b0 t
  620. RTS3 i9 o. O% k! Q) g0 I0 m

  621. ; D) d! w, i/ `% O' S
  622. ;------------------------------( k9 s% b( C1 t# ~* ~  X
  623. PPU_End;PPU结束
    1 ?2 s3 i/ B4 U3 i
  624. LDA #Flag_Over& k! q3 n; ?4 K6 C- O
  625. STA PPU_Addr,X# B7 l3 F; D0 J! D
  626. INX! J% z0 q+ p# B6 `% S$ {* w6 x
  627. STX PPU_Cur3 R" ?  ]4 _  l  ]! O  |
  628. RTS1 F0 e6 z! q* z3 Z  v+ f
  629. ;==============================" R0 Q1 M5 Z- v, F7 K. i
  630. Mode_Line     = $FD    ;新起行模式
    ) y7 T5 H# ?' |7 _* w, @! B! p
  631. Mode_Return   = $FE    ;转下行模式
    7 Q/ [, o/ {/ `! `
  632. Mode_Clear    = $FC    ;行清除3 l) D8 \3 D6 W3 b: Q
  633. Mode_CntLine  = $FB    ;行计数写入
    8 Q$ h" `' K( ?- q( |" X/ t7 [
  634. Flag_Over     = $FF    ;行结束标志* [0 v4 }* I2 d3 g

  635. . E7 B$ m0 D8 y% g3 l
  636. ;------------------------------# J, c% F! A: S! K! c. w: q
  637. ;PPU处理
    ' A* E8 O; L5 a! Q
  638. PPU_Proc
    " E6 E( u% z& F" ?" [) J/ t( h
  639. LDX PPU_Cur
    & q. J* h% j0 v, [/ }+ F0 Q% C
  640. LDA #$00
    4 P+ n. |5 x- W% |  s" J
  641. STA PPU_Cur3 u+ m8 M9 L* e2 I5 N1 _2 y
  642. STA PPU_Addr,X
    ! W" E* X6 }4 ?6 _0 |# R% h& m
  643. LDA PPU_Addr
    * I0 x( w0 @+ X9 H- j7 w
  644. BNE PPU_Proc_Beg
    ( k) N0 k0 c9 \- D+ N
  645. PPU_Proc_Ret% V- P9 J4 n7 o% N
  646. RTS
    2 D3 e# A% @9 h" \8 O* A$ `, i3 M
  647. ;------------------------------$ V  ]6 _6 q9 b% u# m. f1 i
  648. PPU_Proc_Beg  ;处理开始6 {. I" B2 T# f( k8 @5 G# E0 s
  649. LDX #$00
    ) Y* S3 m- a4 [; D/ a4 o
  650. STX PPU_MASK: b/ O( I0 p9 z  W- t/ W
  651. ;------------------------------
    : h7 J) f' Z+ m  u6 m' E9 O# N
  652. PPU_Mode_Select  ;模式选择+ y# F4 l1 g4 t0 U4 P
  653. LDA PPU_Addr,X
    # ^9 |3 M; S6 k' p/ e
  654. CMP #Mode_Line0 i9 d' v8 @# @% P+ l
  655. BEQ PPU_Mode_Newline! I' p- ^4 [/ j! \* V6 P  }
  656. CMP #Mode_Return
    ) w/ m$ S2 L7 L0 O, s
  657. BEQ PPU_Mode_Return
    & z7 f) a/ c" H1 p9 G
  658. CMP #Mode_Clear( t7 j2 C( \3 b* K
  659. BEQ PPU_Proc_Clear) Z5 r; J" C( p8 A0 G7 ^$ A, [5 D- [# ~
  660. CMP #Mode_CntLine
    3 A6 b, z7 r( c4 a9 m  M
  661. BEQ PPU_Proc_Cnt_Line! z9 U: d. `: @* [) g: S9 T
  662. RTS" t8 x: q! |6 p5 r* ?7 k
  663. ;------------------------------
    1 |: M( H% s  K+ n! A9 N
  664. PPU_Mode_Return  ;转下行模式$ i" e% e- y+ y( w# s
  665. LDA PPU_Addr_L
    % |/ G. g$ D" M
  666. CLC
    ; W  l8 a2 n/ l) O$ z" T5 U
  667. ADC #$20
    1 ~# P/ J& A2 m' T/ O
  668. STA PPU_Addr_L& U3 T% s; F6 j- u) Q, d
  669. BCC PPU_Return_End0 E  W/ {0 L4 G
  670. INC PPU_Addr_H
    $ Y* l" L1 V: H! Q; K) W& Q
  671. PPU_Return_End9 f) s. \# U) W  D! ~! I% P* C
  672. JMP PPU_Set_Increaser# {) k) S0 s6 [% d
  673. ;------------------------------
    ( Q( N5 f# X4 G% Z) u0 U# D& U+ A
  674. PPU_Mode_Newline  ;新起行模式& r' J' W: ]5 F) z; K& e1 X
  675. INX9 O; ~  h- ?0 a5 }
  676. LDA PPU_Addr,X
    . W5 `- B7 u4 h/ H% g- g1 A* ]
  677. STA PPU_Addr_H
    9 D. z" _! v# f9 Y7 B
  678. INX
    ) h# O+ k  W, x. Q( T% N
  679. LDA PPU_Addr,X
    & f- D6 l/ k0 Q7 n9 o; l7 L, @* @  S
  680. STA PPU_Addr_L
    # Z% T" J8 t! A. J2 k! z
  681. ;------------------------------- {" m1 v, |( |) S' W8 _
  682. PPU_Set_Increaser   ;设置写入地址
    8 r  |; I1 i5 w( R3 p) K
  683. LDA PPU_Addr_H, i1 g, [8 l3 \/ z1 S* c
  684. STA PPU_ADDRESS
    0 y* e1 j$ G: G! B4 S, G
  685. LDA PPU_Addr_L
    1 N) o2 k, w1 [) M, Z; c
  686. STA PPU_ADDRESS
    * _# j( F. O- x' I( K% G
  687. ;------------------------------
    . z- `, A) q0 n6 }4 H! h* I+ Y
  688. PPU_Write   ;写入数据) ~( z2 W- C4 G; e. V3 N
  689. INX4 i# [( d; L$ b0 T7 b
  690. LDA PPU_Addr,X$ N" M! w0 Y8 p+ h2 M: @
  691. CMP #Flag_Over4 r; p3 _) C9 x
  692. BEQ PPU_Proc_End/ D9 M3 }8 b' C6 J5 a; U5 R
  693. STA PPU_DATA; l! b0 C6 w; r2 @4 t) z% e
  694. JMP PPU_Write( v' [. h7 `& ^0 R0 `
  695. ;------------------------------
    + k- i) o# e: c1 V* n+ S: f% B( K
  696. PPU_Proc_End  ;单行写入结束
    9 Y$ H2 r! O. d+ n- p0 Z+ C7 a
  697. INX
    . v! o: z. j! g
  698. LDA PPU_Addr,X. ~2 r$ Y5 j" ?( @0 a
  699. BNE PPU_Mode_Select4 I- k: S7 X+ h% I" j4 \
  700. STA PPU_Addr
    5 U5 a$ K; R4 I/ y8 J& h: T
  701. JSR Update_Palette_Color
    * w) s- _2 o% f
  702. LDA #$00
    " ?; ^& b1 |# R" T+ g6 Z
  703. STA PPU_ADDRESS
    + O- x0 E/ J& t  a& d
  704. STA PPU_ADDRESS1 E# u8 y0 F7 m& N
  705. STA Show_Track_Name
    1 w5 j- C" V+ r/ U7 _
  706. LDA #Scroll_X
    / c, ~& u$ n0 l9 r% k+ N* J
  707. STA PPU_SCROLL% ?+ d' |# @3 \; D$ V
  708. LDA #Scroll_Y
    + ?3 F: @9 n" V3 y& d8 p
  709. STA PPU_SCROLL# L. @8 @0 T! m# _" L% z$ L
  710. LDA Screen_State4 V+ `; k  L# T( v8 D1 T
  711. STA PPU_MASK
    + ^( K- Z1 T8 B
  712. RTS
    ) t& x  r8 U! j0 b4 R3 ?7 s
  713. - K( S* o$ |5 i$ @; {
  714. PPU_Proc_Clear  E' x2 H# L, \# T
  715. INX' e6 a7 g0 @  x( |; W: N! l
  716. LDA PPU_Addr,X9 d4 w1 f0 V7 c5 e( [
  717. STA PPU_ADDRESS
    ) N/ L% ]4 A$ v$ b/ E
  718. INX2 |- Y9 K2 z& X' I
  719. LDA PPU_Addr,X
    9 j, ~: B  d; g( U
  720. STA PPU_ADDRESS8 _$ s2 @/ J1 U( X; ?, Y6 o/ e
  721. INX& N! ^0 i2 I. m; h( x3 Y% H5 M- B
  722. LDY PPU_Addr,X
    & F' n5 U! [0 J) e5 L
  723. LDA #$00% E+ h8 }6 b* F0 r' N* [0 W, {- X7 n
  724. PPU_Proc_Clear_Write
    1 C! m* B; P4 R$ K
  725. STA PPU_DATA" P! Z4 h9 x) P* z
  726. DEY% Y$ o, Q. e- U& [; @3 }  u/ S/ ^
  727. BNE PPU_Proc_Clear_Write. `) ?# ]! }) [) l; w; |. R
  728. JMP PPU_Proc_End
    , Q* A/ ]# V# y/ ~
  729. # H1 T" r+ c8 C3 o- ?
  730. PPU_Proc_Cnt_Line
    6 n' ^, s2 i' n' ]6 o' Z- J) _# l
  731. INX* g* J7 ?' a: Q
  732. LDA PPU_Addr,X1 M5 O' }$ U% v. e7 I" n3 G2 M5 v
  733. STA PPU_ADDRESS
    + X) W6 G( y7 e) X0 z
  734. INX& ]) S6 x% W* R9 p: q: T* _
  735. LDA PPU_Addr,X
    # f& \# g# i8 u3 Y% C3 q; e
  736. STA PPU_ADDRESS
    7 a9 y+ X/ x+ r
  737. INX6 A1 J, S( D- `  d+ c
  738. LDY PPU_Addr,X' U5 q. }( e8 [- I  a( D8 i* w
  739. PPU_Proc_Cnt_Line_Write( h- N* r0 s6 \9 B1 o
  740. INX  d1 T2 A* J! z! z" a
  741. LDA PPU_Addr,X
    " Y- Q9 R' e3 {! Q. e. j2 F/ ^
  742. STA PPU_DATA( ?1 L2 E# F2 P6 T* ~: h7 _
  743. DEY9 K, D+ \. K9 r1 Q9 A8 c
  744. BNE PPU_Proc_Cnt_Line_Write
    ) T1 {* B  o1 v4 [/ w+ k
  745. JMP PPU_Proc_End
    ! ~: |$ j# N/ K; [+ F( ]

  746. 7 V( {9 B2 j& c+ ^4 f
  747. ;==============================
    $ P) I0 g+ L, X( e6 ]# c3 Y% ]0 |! u
  748. HEX_To_Dec;十六进制转十进制1 G% |, [; `% H# n6 A, [% R
  749. STA HEX_Data: r3 [% Q( z# w8 O
  750. PHA
    7 s& x: H8 Z) T- {) O6 N% S4 [7 l
  751. TXA' v3 l- I. j! Y8 w: d7 m
  752. PHA
    : G6 n# l# J# ~9 p
  753. LDX #$00
    3 K/ H9 v" u  ~9 {
  754. LDA #$00  L: v3 e" Y3 u, J9 n
  755. HEX_Cln6 Y) B/ }5 h% y8 C# g& S2 h
  756. STA DEC_H,X7 H/ B# ], g: l4 `
  757. INX
    * n3 y& P* n" v1 ?$ N
  758. CPX #$03+ H* x6 v4 Y; H) z
  759. BCC HEX_Cln
    6 ~$ B4 n0 d9 b" D/ @) A6 H( y; }
  760. LDA HEX_Data; i' C3 E8 }  A8 e. a# f
  761. ;------------------------------
    / C! ~# T) M+ l1 X( ~
  762. HEX_100
    4 p0 z7 ^3 N6 K# O$ N: n
  763. CMP #1009 B0 Y+ o3 X' D4 Z/ t4 d; E
  764. BCC HEX_10
      b% A5 g! C6 ]+ l! p/ V
  765. SEC
    8 q& q5 J* M# l1 A3 ~$ `, R+ |
  766. SBC #1008 k7 o2 j7 W4 Z$ O
  767. INC DEC_H
    1 u8 ]  k. H0 `/ U  x+ j0 a* l
  768. BNE HEX_1009 O$ G5 `+ m& }8 Z' s1 B
  769. ;------------------------------
    " R0 n) J- u( u  a; K- u
  770. HEX_106 j- e' x7 o( B( a
  771. CMP #10! g2 ?+ s( f# C0 \4 x$ o3 P
  772. BCC HEX_1' }. Y/ h( v1 d. ~5 ]& ?+ ?
  773. SEC6 g; v7 q5 ?- `+ x, M% @# P
  774. SBC #10
    / C! O" h5 v2 z* Y4 U' r
  775. INC DEC_T
    7 q0 ?* q. n! \+ U* f5 v
  776. BNE HEX_10+ M2 Q+ u/ M* N9 C" P' S5 a) w3 z
  777. ;------------------------------( U9 |0 e  s- ^& N2 m. H6 U7 }
  778. HEX_1: G6 w# g1 X/ S
  779. STA DEC_L
    # `: k& l; q$ W
  780. PLA: b: W+ Z/ `7 @' `
  781. TAX
    3 _' Y- C' X% c2 _" p& L
  782. PLA( N8 E' c2 F0 R* L
  783. RTS$ e$ `" i' q! H8 s- T7 |
  784. " v  |2 J9 \6 c, F. j
  785. ;==============================
    9 u2 o5 ^8 V  l- H
  786. ;音乐曲目显示  D, [$ M& S/ ?5 Y( e& s: g7 k) e: y
  787. Music_Show
    ) u, \. R. I, X+ |
  788. LDA Music_Cur
    4 F: D# d" f4 E# o2 Y. [
  789. CLC, G0 C. `( z3 O$ S& f0 O
  790. ADC #$01; x. D# w, ~# u! Z$ K( O- V% W
  791. JSR HEX_To_Dec7 g1 O: E# P/ N2 a0 R, Q
  792. LDX PPU_Cur
    / [! i+ W1 [' \$ x
  793. LDA #$FD
    + Z4 L& s8 O! `' f$ ?; R0 q2 N
  794. STA PPU_Addr,X: l3 F5 J4 F% T& I
  795. INX9 C3 i$ r( h+ _: E# `
  796. LDA #HIGH(Play_Index_Pos)
    / l* y  T4 C* x
  797. STA PPU_Addr,X% m2 ~5 E7 R; J' ~+ p: Z& ]8 C
  798. INX
    7 j* g9 Y& l) G
  799. LDA #LOW(Play_Index_Pos)
    " K$ v. Y5 }6 ~* I/ J3 i( ~
  800. STA PPU_Addr,X
    1 b+ S5 U8 \+ u
  801. INX
    . e2 @7 s1 Z3 R) O

  802. # [/ E; A( w+ s+ t' H& N
  803. .IF Music_Song_Total > 99
    ) ~1 A# ~: k% \0 @+ F
  804. LDA DEC_H
    ; `& {3 y; l  g3 V% _4 r) B. A
  805. ORA #$30( [) b, I4 q& @* y
  806. STA PPU_Addr,X
    % V3 h2 _. j/ v" p& @. ?7 t
  807. INX1 y8 e# W6 {2 l4 t# R6 [* f
  808. .ENDIF
    3 k( q4 ]' z! ^) S+ p. W

  809.   Q2 T! i' a' }+ G" y
  810. .IF Music_Song_Total > 9
    5 Y8 e4 L" g. a6 @6 X/ y5 k& w
  811. LDA DEC_T
    ) F5 ?" ]! O4 ^4 D" H  A7 P8 V# w
  812. ORA #$30$ F6 a6 `8 Y- d3 h6 k$ G% |
  813. STA PPU_Addr,X6 s9 X- d; t0 o& X. y4 \& ]: h. d9 ~
  814. INX6 N& \: C! b2 E' V& y
  815. .ENDIF
    8 V, h: E0 Q2 w9 ~+ r( }

  816. 1 o  E) r) k* K6 h$ S% g
  817. LDA DEC_L9 j* y% i$ R6 D9 Z
  818. ORA #$30
    3 l% _2 \/ F3 I: x3 b
  819. STA PPU_Addr,X& K# s% `) ?$ I0 n5 \, e6 i3 U" J
  820. INX
    % M6 d5 ?7 p5 n

  821. 3 `5 G, |! g, b. n! d' x9 j- y2 @
  822. LDA #'/'
    ) @5 [8 H3 l; w: s/ b
  823. STA PPU_Addr,X2 T+ @  e' j( I- N
  824. INX
      \% M  j" y2 M: Q6 x( _
  825. Music_Show_Total
    % F2 N( X; n! Q) ?
  826. LDA #Music_Song_Total
    + r4 ]. p3 _; u) e! |
  827. JSR HEX_To_Dec
    8 Y4 z9 A1 ]4 ?& f
  828. 0 U% {, n' }3 v3 m; k7 _- D) r
  829. .IF Music_Song_Total > 99, l4 _0 A0 r- [5 z! V! J
  830. LDA DEC_H( a4 w6 }5 {! F7 Z
  831. ORA #$30: o/ Q0 x) `# [. W& T# W1 M9 G
  832. STA PPU_Addr,X
    # E8 f6 ^; Z' m  A: J3 Z# n
  833. INX# N  A4 t/ P8 ~# M) U3 T$ [+ g
  834. .ENDIF6 v7 x# q, ]4 p; y6 V

  835. 2 r0 r6 a' `( F  O" g4 s/ U
  836. .IF Music_Song_Total > 9
    ( \9 E5 W* ]* @
  837. LDA DEC_T
    . _$ F; C/ e6 E+ T
  838. ORA #$300 y! s- m7 d" J8 r, [2 ^) ?! H& p
  839. STA PPU_Addr,X/ [) z! z1 |3 \# i# p8 h0 b
  840. INX
    . g3 R2 G6 u$ E' K% R
  841. .ENDIF% _0 ]( Z3 `  {8 ?

  842. 9 d. K% h! A6 ?: k$ d
  843. LDA DEC_L
    ' x- w; Y0 V8 E' _
  844. ORA #$30
    5 B/ \* I8 @4 x
  845. STA PPU_Addr,X$ a9 B* l/ p" M9 l1 Y# ]9 V# |' G
  846. INX
    + J0 g. b& U; z! k9 f
  847. 8 d& Q$ |5 R' a: z% b
  848. JSR PPU_End$ \1 C1 Q/ K0 m; Y7 W
  849. Music_Show_End5 |8 M: K4 W& Q7 P
  850. RTS
    8 p5 Z! `8 }1 ]' ^3 H, o8 p

  851. 8 o1 Y; o0 |- y! a! Q
  852. ;==============================( M/ I  g4 H8 G, S  u) M
  853. Time_Show;播放时间显示
    # c" H- U% B% U& K& m
  854. JSR PPU_Addr_Set
    & S' y$ N4 S) |9 D
  855. LDA #HIGH(Play_Time_Pos)
    4 W* X2 X; b% q- P6 O1 n
  856. STA PPU_Addr,X# S+ d# C) g* P4 S" |6 [/ x4 \
  857. INX: ]7 A  o! _- W
  858. LDA #LOW(Play_Time_Pos)
    : L& \; e6 F6 c7 D
  859. STA PPU_Addr,X
    9 H& Q* D  o' i8 ^# y
  860. INX
    6 x8 l' ]/ p) M2 |9 z) l
  861. Time_Show_H
    ) S5 v9 R, S2 e: y. |* D  S
  862. LDA Time_H
    . x/ f$ \: Z/ L, ~; V
  863. JSR HEX_To_Dec0 _& [7 }7 u1 w, r  y, r) {
  864. JSR Time_Digit; G- g; M3 C9 M) B3 B7 I7 R( q
  865. LDA #':'
    5 z  I+ p" B) l( P/ T
  866. STA PPU_Addr,X
    ' ^, T2 T+ [. a6 ~, J8 H
  867. INX# K; C  n3 o1 k4 o5 o
  868. Time_Show_M" ^$ H( n9 Q( f3 L& x+ o
  869. LDA Time_M: [1 t( L5 N! O8 u* S
  870. JSR HEX_To_Dec5 G1 g8 Z7 I# V) q% Z
  871. JSR Time_Digit0 C# `$ H/ w. O
  872. LDA #':'; H- N9 U5 Y0 @/ z/ @
  873. STA PPU_Addr,X
    ! J& a2 P0 ]0 G: X$ i9 Q7 M% l( X% K
  874. INX
    8 a+ y& H/ z& T" s& Y
  875. Time_Show_S
    9 G$ F* M+ M1 {: Q0 N; W
  876. LDA Time_S- a0 f" K+ M8 c
  877. JSR HEX_To_Dec% a/ {$ n/ d1 s
  878. JSR Time_Digit+ \1 G8 C# I" m, `
  879. JSR PPU_End
    0 G" m* a5 p: z9 b" X5 s
  880. Time_Show_End& L, s1 z0 {* U
  881. RTS; Z8 U& h2 y$ n  j* }* h

  882. ( h) ?8 t8 n2 `
  883. Time_Digit! s2 k1 h: [3 g
  884. LDA DEC_T
    , t! G  ^: F* K2 Z! }: f7 Z& ^
  885. ORA #$30
    7 k% O" {+ n0 v, M- \
  886. STA PPU_Addr,X: K* f* ?7 W( H0 r7 o) G
  887. INX
    + _* V# N! i! H' K
  888. LDA DEC_L, o" d7 }/ Z6 J6 F& N% j
  889. ORA #$30! d, `& m9 O4 p, V1 J- ~7 g% H( K
  890. STA PPU_Addr,X) Y7 Y! x2 l: u# f9 c* Y7 @, t1 r
  891. INX* x+ j0 J3 V- U4 N4 b! o7 [8 e) u
  892. RTS
    % f5 `+ t- S) Z2 V0 q+ i: g

  893. 0 Q/ j1 L+ E, O! p9 |$ A5 t& g2 ]
  894. ;==============================' @8 E; o8 {/ t/ ?% a7 L# s
  895. Time_Count;计时
    " C; ?) f  t1 `3 e: }; l
  896. LDA Music_State
    ) c; r' E. h* H2 K* I
  897. ORA Time_Wait_Cnt) S# Q# _" s! D/ S
  898. BNE Time_Count_End6 X- U. ]/ Y) G2 |7 a5 d
  899. INC Time_Cnt, h1 Q- Z! f, B: d& d5 v7 C
  900. LDA Time_Cnt3 F2 E1 _- Z7 l
  901. CMP #60! C4 d" p' C" W& E' v7 K& n' e
  902. BCC Time_Count_End
    + O- p5 [* F9 G8 C; ~- F
  903. LDA #00. ~7 U9 C9 s& o6 g! u/ G
  904. STA Time_Cnt
    - y( v6 ?3 ~! v4 H) ~  d
  905. INC Time_S$ K  P! ^6 d/ c7 A

  906. ( ~' c& N1 W8 a  d8 @
  907. Time_S_Cnt# H  ~( ]: m. I! g$ V- g0 f
  908. LDA Time_S9 z# }7 ^; R7 @9 I3 C2 p; b
  909. CMP #60
    0 P* V6 h+ F1 I- _9 B
  910. BCC Time_Count_End
    + e6 d; B0 D* Y- l
  911. LDA #00' X' w% M" m+ }3 K! P$ F  j* L
  912. STA Time_S
    + c9 q$ G# k& m4 _  C. x& J
  913. INC Time_M; n; b# x5 U( c/ ?+ L/ \

  914. ! g. s! v/ k* f9 t' z, w0 H
  915. Time_M_Cnt
    ( e" l( a: s- \% N$ ^
  916. LDA Time_M6 M! N7 b4 ?2 F5 x. w% r
  917. CMP #60
    + ?6 x  m2 P7 h, H3 W( J. g
  918. BCC Time_Count_End  F  M' \: [" Q1 l, K: H6 c
  919. LDA #00$ s4 f- g7 s: G8 D* E  Z* [
  920. STA Time_M
    , G2 B! O  Y: {: B" l
  921. INC Time_H! D2 g7 y- Q+ t& h$ j

  922.   H& q1 B0 I+ d, m: r
  923. Time_H_Cnt
    - j! Z9 ]2 E( n  Z  a4 n8 p
  924. LDA Time_H
    8 V/ m" K5 y( Y; z2 Y& d
  925. CMP #24; h( ^' B; o$ i- M) ?3 y- a
  926. BCC Time_Count_End
    * r3 k& s; ^) q4 E: q' q
  927. LDA #00
    2 |. O% t6 v8 b( d
  928. STA Time_H
    ; F0 |3 N' T2 D& f* W# C5 w
  929. 7 w$ c6 e+ [: O# Z6 `, b
  930. Time_Count_End
    / Z4 t* D  Z' S$ j( P
  931. RTS6 q! P6 s6 N% L( E+ g( Q$ K/ D7 W
  932.   W1 b: g; K" i: w& H3 f7 W
  933. ;==============================- m( l& n1 }! S1 x& V
  934. Time_ReSet;播放时间重置
    & _7 q7 P7 y! ?8 q  c% a
  935. LDA #$001 @* R' d  c4 a
  936. STA Time_S
    # Y6 l6 d6 u+ o8 x
  937. STA Time_M / Y" z6 w% p. r( x  @* K
  938. STA Time_H
    1 r- `$ }4 v6 ~- e, F* T
  939. STA Time_Cnt
    ; b  ^9 I4 L- y4 J
  940. RTS
    . M* T/ u3 B8 N% Z! a8 ?+ w9 F
  941. " ^+ x1 d# D% S  v
  942. ;==============================
    9 L/ M/ I" P5 y5 W6 x
  943. Music_Bar_ReSet;音乐条重置
    8 D2 Y4 P' h* S* v4 K
  944. LDA #$00/ X$ s2 U/ ^* i- ~% o% D6 ^
  945. LDX #$008 [0 r: c* G( R' f
  946. Music_Bar_ReSet_Set% H4 p2 g* k# b- Q- G
  947. STA Sound_Bar,X  L% h7 E" v: I) J1 G
  948. INX
    1 \: S- E7 O) H3 i6 J; W
  949. CPX #$103 m8 J. h. C8 }% g7 n& s
  950. BCC Music_Bar_ReSet_Set
    2 ]$ ^3 x2 N0 ~% F3 c
  951. RTS
    3 Z3 ]9 E) g2 O, N0 s

  952. ; B5 s3 B9 D+ C# @% j/ J4 Z
  953. ;==============================
    * }& N" ^% D1 s( m9 ]
  954. PPU_Data;PPU数据写入
    ( }; _3 G+ |' }& f  v' T
  955. STY Data_L# v9 }, c5 G2 a5 k3 J. P8 B/ f
  956. STX Data_H9 i5 m: u8 e8 J7 W, o
  957. LDY #$FF( q4 K* \9 A' j5 @" R4 L( {
  958. LDX PPU_Cur
    ; I9 F( ~: t  S% k
  959. DEX
    ( s* z9 x3 h; p, O0 ]/ n" M" ]1 G
  960. PPU_Data_Beg. W# p9 }8 R* s7 k4 E( d
  961. INX, C8 n) k- N2 D4 A# A
  962. INY" o% {; O5 X! L7 y" z/ M3 l6 ?
  963. LDA [Data_L],Y1 e* o9 [; |8 d% ~7 s: V
  964. STA PPU_Addr,X
    9 A. ]1 w0 l1 L, o6 }- u9 b
  965. BNE PPU_Data_Beg& d3 V/ c# g. A7 {1 c0 C/ y4 p
  966. STX PPU_Cur& Z/ A% Z$ y/ X, D; r
  967. PPU_Data_End
    $ f3 y; p: H/ ~0 G1 O- _# x
  968. RTS
    7 g% D/ m4 q9 N( J* N: {* j2 [
  969. 7 V( }" n2 a; j& H1 K* a: e; s
  970. ;==============================
    5 ?" J# e; l! C
  971. Music_Stata_Show;播放状态显示
    . k. v. g. M, x8 v9 i: h
  972. LDA Music_State
    * s. }2 j, N' l  v
  973. BEQ Music_Stata_Show_Play  s% Z- j! ^4 k$ v/ d7 B
  974. Music_Stata_Show_Stop; k- b5 K* n* h; N* j1 H/ f4 `
  975. LDY #LOW(Music_State_Stop)
    ; @% T0 O* D: Q) D" k
  976. LDX #HIGH(Music_State_Stop)5 F/ f% Z# [6 x. b$ J( b
  977. JSR PPU_Data
    & u& M& A6 ~0 R5 [/ P
  978. RTS
    . R/ O5 j8 _& j3 N
  979. Music_Stata_Show_Play
    0 ~( c4 N! @/ c# ^7 ]
  980. LDY #LOW(Music_State_Play)
    ' x, S9 D# G" T$ I# |( w# g
  981. LDX #HIGH(Music_State_Play)' S& v, j8 I5 _  b5 [+ A
  982. JSR PPU_Data
    $ D. y  m8 N  k) L: C: P2 d+ g
  983. RTS6 N& p! @' `6 G$ c  l* e* J: c

  984. - _) e$ P7 m2 W& U) n! L- f) p
  985. .IF SOUND_BAR_SHOW_ENABLE
    7 N& P) |% Z* s7 l
  986. ;==============================6 N; b- ~% x% e
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    5 j3 [6 w& y. K, I1 L; P
  988. LDY #LOW(Sound_Bar_Text_Data). t( c1 \/ e0 g3 \6 Y' ?. o
  989. LDX #HIGH(Sound_Bar_Text_Data)
    2 z8 B$ t4 x8 d5 w
  990. JSR PPU_Data! l! j: k7 l. M+ a: m5 J
  991. RTS
    8 e* f5 |( J0 u9 r5 Y5 r" f
  992. ( E' p" \) G: H$ _, Q0 c) o5 a, _
  993. .ENDIF6 z" S& j# E/ R7 Y

  994. ( H  X2 L& P/ u1 g& j; q
  995. ;==============================' a$ }' r5 w) j& ~% I/ J8 B
  996. Set_NameTable_Attributes;设置命名表属性% O) u. w( q8 y* A# y
  997. LDA PPU_STATUS9 R. R) ~- |( L2 l2 O* J1 F. X
  998. LDA #$23
    ! c% E( Z& B, W+ c: V  R4 C" U
  999. STA PPU_ADDRESS* b; G8 a  d! {. E1 }  @- n& z
  1000. LDA #$C0  ^8 t  r1 K  F$ t2 u+ Z
  1001. STA PPU_ADDRESS
    # I, x- x# W( X, C1 J8 P
  1002. LDX #$00
    . r. ]+ s% j. ^: j9 Z4 G3 k
  1003. Set_NameTable_Attributes_Write
    0 |% o0 F# l+ h$ e0 w( R
  1004. LDA Palette_Attributes,X
    ( H; y) Q! L( `# R
  1005. STA PPU_DATA
    0 e. C' E6 K; s6 F  W" c
  1006. INX
    3 J1 p+ ^+ ^4 ?0 c) g9 f
  1007. CPX #$40
    ; r# V5 D4 f0 ?* \7 t: o) A& U
  1008. BCC Set_NameTable_Attributes_Write% P6 e0 L4 G) G; N
  1009. RTS
    ( W( a6 S0 e# u: S1 I

  1010. " p- ?: C# @3 [4 L5 g4 v2 v, o3 r. ^
  1011. ;==============================
    - f( e  F5 F3 J) U- |+ \) Z
  1012. Set_Palette_Color;设置调色板数据
    ( w- R+ p$ [# {! ^* L
  1013. LDA PPU_STATUS! Y  @) p: d9 p! ]- S, Q
  1014. LDA #$3F: `, d; |  ~+ }' F
  1015. STA PPU_ADDRESS
    0 C: v5 ~2 ~; Y5 H) n
  1016. LDA #$00" ~9 W' N; L2 [. m
  1017. STA PPU_ADDRESS
    ' q; t0 j# ~0 b) T
  1018. LDX #$00
    0 |$ \$ M: O) R" o
  1019. Set_Palette_Color_Write; O" Q4 i) v) N: u
  1020. LDA Palette_Data,X
    4 J% W* ]2 ~) J7 W3 X
  1021. STA PPU_DATA) Y1 o; S% G* \
  1022. INX8 G6 c5 I) s3 y+ Q/ V. ]4 x( Q
  1023. CPX #$208 B& f, d( Z0 ^
  1024. BCC Set_Palette_Color_Write& l0 F% T# ^" A2 o" g9 x
  1025. RTS
    ' W* d4 f6 \' _3 z
  1026. # q% S; N$ o- B! z+ N8 c
  1027. ;==============================: o* b2 Z, i2 ]. y
  1028. Init_Palette_Addr;初始化调色板数据/ [" v/ O. n9 x; L/ j% o8 n, `' [
  1029. LDX #$00, X$ E; k8 |. `4 ^2 Z
  1030. Init_Palette_Addr_Write) J# D0 E# k( [/ k1 M
  1031. LDA Palette_Data,X  R- J- ^3 @' h: x& x5 g9 u5 j
  1032. STA Palette_Addr,X
    * H; R; K  S7 F2 g
  1033. INX# }% _0 x( A% k
  1034. CPX #$209 I) \: ?, ^% z1 c8 z& \; Z
  1035. BCC Init_Palette_Addr_Write& M% s& _" a5 @) Z% s
  1036. RTS
    1 b) Z! }& }! S2 Q8 B% T

  1037. 5 |1 U, v$ D) Z
  1038. ;==============================
      a5 h% t6 |: h% {
  1039. Update_Palette_Color;更新调色板颜色0 _. i( N, Z5 @+ c2 E" x
  1040. LDA Show_Track_Name/ F% T. X- [0 \. |3 |# K+ d
  1041. BNE Update_Palette_Color_End( X( {) `5 l# @
  1042. LDA Palette_Update_Flag
    ( e( S. Q' `$ l- Y
  1043. BEQ Update_Palette_Color_End
    ( j- V' f. v3 f6 ]( u8 T
  1044. LDA #$3F9 f# z3 K5 t% |% U( |! @
  1045. STA PPU_ADDRESS
    7 D& `. T$ Z- i7 F: F6 ^, T, X, }( J
  1046. LDA #$00
    / {0 v# t1 R5 R
  1047. STA PPU_ADDRESS
    3 m6 k9 T( S9 H( H1 F
  1048. LDX #$00
    * [  T0 m$ |6 f8 K" @/ N. }  F0 K
  1049. Update_Palette_Color_Write; V) B( q: c9 Q. X
  1050. LDA Palette_Addr,X( H, {& W; w5 c; S
  1051. STA PPU_DATA
    + N$ H( M$ `6 C9 }- y. [9 @* i
  1052. INX4 Y& U' D% {; K2 ?2 _
  1053. CPX #$20
    4 f! J6 Q3 i+ R" T3 E' L
  1054. BCC Update_Palette_Color_Write
    ! F! q) e3 y  l7 T. ]
  1055. LDA #$00" ~, X: P4 _! ~1 E$ f, ?6 V$ q. {
  1056. STA Palette_Update_Flag. w5 W9 P% y" q
  1057. Update_Palette_Color_End  }; l  u6 ~: [8 [1 W0 W& o- T+ B
  1058. RTS6 m: \  s! f  ?& B: o3 t4 _7 X7 p8 F
  1059. 0 ?& R- ~0 {8 n
  1060. ;==============================
    : T% E0 I: E- g3 o
  1061. Update_Palette_Data;更新调色板数据
    # m  F2 ^# ^/ G% U
  1062. LDA Show_Track_Name7 A! z1 c: E* g1 t" X; m" l
  1063. BNE Update_Palette_Data_End
    * X% J  }7 }6 b& I' i4 c' d8 b
  1064. LDA Music_State
    ' p- s, Z$ i3 P6 M, n2 g4 M1 k
  1065. BNE Update_Palette_Data_End
    3 t  n/ z  i. Z' |
  1066. Update_Palette_Data_Check- M& @& H3 s% d
  1067. LDA Palette_Wait_Cnt
    ! m; z2 ^* Y: n; t. \  `6 G
  1068. BPL Update_Palette_Data_Check_Over
    % W# ], O- F  h5 ^
  1069. LDA #Palette_Update_Interval
    $ o5 S$ n. ^% w# X: Y( g/ M$ S+ G
  1070. STA Palette_Wait_Cnt
    / a- g/ |6 X. q' }, R
  1071. Update_Palette_Data_Check_Over
    & C- I2 v) l0 x
  1072. DEC Palette_Wait_Cnt
    ; m; Z. a1 q0 s; O
  1073. BNE Update_Palette_Data_End
    ' R; T5 F5 C) |+ V4 {: k
  1074. INC Palette_Update_Flag
    : M5 A3 ^; x( x: s
  1075. LDA #Palette_Update_Interval
    * Q$ @. ^& E7 O: g) e
  1076. STA Palette_Wait_Cnt1 D# r  c# V5 |! h- u; f& n
  1077. LDA Palette_Update_Addr
    ' P2 x/ c# _" U$ ]8 J
  1078. CMP #Palette_Update_Max
    0 J. x4 n" f& e. B  I; q) z
  1079. BNE Update_Palette_Data_Set
    8 `0 H& g% [. H0 V
  1080. LDA #Palette_Update_Min - 1
    2 \9 Q2 h4 G! m, A& _
  1081. STA Palette_Update_Addr) E7 H7 b% v) \! ^; w0 a0 I: ^
  1082. Update_Palette_Data_Set
    $ ~" A. {  l7 K, K2 x
  1083. INC Palette_Update_Addr+ c3 z& I8 |( M9 r0 n  d
  1084. Update_Palette_Data_End6 y5 s1 c- H6 I3 |
  1085. RTS" V6 j4 o6 \- J' L" ?
  1086. : q* w! p8 Y% G  V; p
  1087. ;==============================& s+ C& O# |4 |8 y2 w# p# q
  1088. Show_Music_Text;显示静态文本- ?, p9 I2 V' p9 @7 {: [
  1089. LDX #$00
    - x8 b/ x% b$ J
  1090. Show_Music_Text_Set
    / D0 |1 h0 B& E; o6 q; z
  1091. LDA Static_Text_Data,X: v3 d* z/ R) ?/ [
  1092. STA Data_L
    4 N! A9 J6 T/ U! T  J
  1093. INX
    " G7 G3 [4 m1 l6 P2 X
  1094. LDA Static_Text_Data,X
    ( K, V" G9 X: k1 l
  1095. STA Data_H& U% R# K. \! S1 H7 w
  1096. INX8 Y' V6 S: m9 q/ N8 e
  1097. LDY #$00
    , l% ]/ n2 ]# r( w8 Q) _& K  S* b& j% a
  1098. LDA [Data_L],Y- Z  c# {( r  Q; |( \5 d
  1099. STA Data_Cnt
    1 \9 P7 V/ R/ `! w/ A9 }
  1100. DEX
    - F  O/ S- A( A+ x: o1 \
  1101. DEX
    0 [( G" L' I: P2 K' j
  1102. LDA Static_Text_Pos,X
      r* @+ @5 a+ y3 ]! ^* ?6 y& p
  1103. STA PPU_ADDRESS
    * P4 H1 ]  T/ ?7 b5 c# ?' J' l
  1104. INX
    7 U: A* Y. m6 E3 f
  1105. LDA #$20
    4 y6 f4 ~# j5 D1 t
  1106. SEC
    " c. F1 T0 g) v: S9 s" {
  1107. SBC Data_Cnt
    ! d$ `! F' @# P0 w0 _) f% F) t
  1108. LSR A
    & x  H  y: ~  ~# t$ g. \
  1109. STA Data_Buf
    " V- I7 N0 f7 q* r  w6 S$ w
  1110. LDA Static_Text_Pos,X
    * ^5 J0 c0 F* |, K2 l3 f
  1111. AND #$E0/ @3 j9 f! ^, S+ m( K
  1112. CLC
    0 b: x  j' I: q  o3 ^6 [4 {
  1113. ADC Data_Buf0 y0 A- O1 }$ n' g& n( y
  1114. STA PPU_ADDRESS
    - [+ D7 @2 R: q5 n4 Y* S
  1115. INX( ?* i9 Z8 k5 J! H2 m# I, G
  1116. Show_Music_Text_Set_Write
    9 g4 t, x! E, T( L
  1117. INY
    . p! ~% m6 A- {9 b$ A* g
  1118. LDA [Data_L],Y  A( Q; J* R1 a
  1119. STA PPU_DATA, T0 _& ]& @! k1 T. \
  1120. DEC Data_Cnt
    ' |$ u6 N  o8 O. G  `1 \9 _" n
  1121. BNE Show_Music_Text_Set_Write8 @5 G9 _& G. F# M
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos; G  I0 ]- w9 l
  1123. BCC Show_Music_Text_Set
    7 \: r* [# N( b* i
  1124. RTS9 k  {. A8 m" G) [; y* b

  1125. $ F! k7 N4 i7 e( ^
  1126. ;==============================3 B, X6 P4 J6 r# p& N
  1127. .IF Track_Name_Pos;显示曲目信息
    + r9 z8 `5 @: t4 W, s* h
  1128. Show_Track_Info
    0 ^: b/ i3 _' r) A
  1129. INC Show_Track_Name. s' K6 b6 R: m7 L
  1130. Show_Track_Info_Clear
    . Q0 h& c8 ]) C; p" Y# X
  1131. LDX PPU_Cur
    , S1 a2 `# a" J! l4 a
  1132. LDA #Mode_Clear9 ~" w( A# l7 t9 l  ~/ R
  1133. STA PPU_Addr,X) w+ H9 x4 v  m) O+ s" f# [( t6 A. e
  1134. INX- d2 ?; _1 l( X" U2 Z) V

  1135. 5 [% F, Y3 T  w& H
  1136. LDA Music_Last
    $ r/ p. u! h2 K$ f0 c  z
  1137. JSR Show_Get_Track_Name_Center_Pos
      N3 F( Z5 r  H7 `' Z& M
  1138. Show_Track_Info_Write_Cur
    ) V* F) Q% z8 t: u+ ^+ E5 v& u
  1139. LDA #Mode_CntLine; H- K/ e# `0 B2 G: |
  1140. STA PPU_Addr,X8 m+ r. L: c. v+ ^: x
  1141. INX
    % {# F: r+ Z, P; P9 P' Y

  1142. 0 S  E6 ~# A; y' Q
  1143. LDA Music_Cur
    8 Q9 ~& U! f$ c
  1144. JSR Show_Get_Track_Name_Center_Pos7 L& g% [# x! t9 h3 f
  1145. * G% ?/ H+ R, }2 A- E7 k% a
  1146. Show_Track_Info_Write_Cur_Data* H1 `4 A8 {  M8 ^9 Z0 N) U* b. F
  1147. INY( w( b3 ?2 Y  w) S+ ~
  1148. LDA [Data_L],Y) S& @& J' B. z3 O9 F
  1149. STA PPU_Addr,X  J0 ^# o& ^1 D. P# j
  1150. INX
    5 D1 l* i' w& w4 l: K  g# [
  1151. DEC Data_Cnt! e  X2 y9 u' U/ E
  1152. BNE Show_Track_Info_Write_Cur_Data6 [9 o: q9 a2 ^* v, A) }8 r/ P2 }- C
  1153. Show_Track_Info_End) K9 D, z1 h8 N6 ~
  1154. STX PPU_Cur4 m5 Y: V% K. i
  1155. RTS) `8 I# E3 M  q( a0 n# w& W6 d
  1156. ' N- f7 v; c) Z3 i$ M. j2 S
  1157. ;==============================
    - {' ?" g3 D% G* Z  x: \
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置9 \0 b0 ^5 k7 }5 M( z% V; T
  1159. ASL A
    6 A1 ~- o5 q0 \; |8 @# [
  1160. TAY# l6 ~/ m6 E8 u+ o/ g
  1161. LDA Track_Name_Addr,Y
    1 S1 I# G$ W- z! b& J# r. c
  1162. STA Data_L
    " V  _& O4 e- S. i
  1163. INY  o5 G0 o+ ~9 ^! A. N# b" o
  1164. LDA Track_Name_Addr,Y
    / V) k+ o* A" k0 D7 H  X5 H
  1165. STA Data_H
    ' s& v5 S8 x0 i# i3 g
  1166. LDY #$00, w2 a9 _3 Q9 h" O
  1167. LDA [Data_L],Y& v7 H. w( @- m& h' v) }7 e
  1168. STA Data_Cnt
    3 _' w& K3 l% X/ B* F! ^5 c7 N
  1169. LDA #$20+ M  v' h3 d, l" ]* ?. W1 J
  1170. SEC$ x# F: x! ]5 v
  1171. SBC Data_Cnt, A7 r% P6 z0 q3 K6 n- Y3 l9 M
  1172. LSR A
    2 \0 F. T8 T* I) N4 M7 P
  1173. STA Data_Buf
    0 I! t: p) @9 c6 y2 U! k# X: ^% S
  1174. LDA #HIGH(Track_Name_Pos), W1 S+ r7 a& M- y0 d1 M1 _) }
  1175. STA PPU_Addr,X9 ?2 p! G6 o% X% j; C( {; k2 \" V
  1176. INX
    ; o, |, s% d$ g) E0 K) d) i, f. ]
  1177. LDA #LOW(Track_Name_Pos)/ H8 B9 |# x4 d  i
  1178. AND #$E0
    + K6 X* ^6 Q# t! L% o7 ~0 @
  1179. CLC0 D3 ~9 E. d% n: z1 u
  1180. ADC Data_Buf( W. B# E% p& c: l
  1181. STA PPU_Addr,X! @  Q% F/ |$ W0 M# l: f5 N3 s7 w
  1182. INX- @: [9 X2 B& r: B" k3 X" R
  1183. LDA Data_Cnt
    , c2 @; h. z6 H2 G
  1184. STA PPU_Addr,X
    ' Z  O4 ~0 C4 Z* r" E
  1185. INX; i' P. }$ [8 I" \- y: L
  1186. Show_Get_Pos_Center_End* @& c$ m+ _" f. h+ p5 ]/ a  V
  1187. RTS
    1 f8 W( N5 O. F+ j! o8 m- U
  1188. .ENDIF: @- q" p! F, h" k
  1189. 0 \4 B% |. g5 L* W- l' ~
  1190. ;------------------------------
    - K" |* Q4 L6 R6 V! E* M1 h
  1191. ;命名表数据2 l7 ]7 o9 u- r
  1192. Palette_Attributes
    % b5 V+ J( |1 c3 ^0 _
  1193. .IF SOUND_BAR_SHOW_ENABLE
    * F0 \# l3 H* {
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    6 c& k8 I/ v& C, ^- ~
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA0 W( M! c, @$ @7 _2 ~
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55% S* o& G) N, `- v* ]
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55  j' Z7 u' w$ ^8 t' E: o# X4 P
  1198. .ELSE' u5 |: c4 |9 d+ j& }
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    & E" ~, K0 G. ?# k  Q3 {% \
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF. \2 A5 b0 ]6 u4 S2 K
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    3 T4 Q0 k$ O1 k- L' v( v/ N2 L
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$559 T" z# Y6 ~8 o. E2 x, U" l& r
  1203. .ENDIF
    ( P3 W- j8 G. c

  1204. 4 ^! h8 z5 s3 M0 R
  1205. ;------------------------------
    $ W' p' F) k% w' `2 F  @
  1206. ;调色板数据
    ! ~9 z& {& Z. |6 ~
  1207. Palette_Data
    7 g1 ~! _3 N0 F& T6 \; t+ W
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F. u+ M& U  n) i' [
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F3 b: d% F! K1 L7 C' B9 Q
  1210. , S' c0 x8 |8 h7 `0 ]9 F5 k
  1211. ;------------------------------; c1 P9 v" z8 j
  1212. Static_Text_Data
    # T; I" e" c. y8 w2 q. e
  1213. .WORD Static_Text_Title_Data7 s* A+ ~! L# v0 Q
  1214. .WORD Static_Text_Author_Data4 G, D( b% e/ R* Z' e& @
  1215. .WORD Static_Text_Date_Data$ Z, c4 l- j) d- f/ ]* d! f, f0 b
  1216. Static_Text_Data_End
    % `1 e; G( e1 v, W

  1217. 6 a' w5 T- L. ~% t2 t% ~
  1218. ;------------------------------; e& U% _% p1 T% p( Q. R
  1219. Static_Text_Pos
    , Z3 X* }. S& r- H' e9 _
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    ' f& f+ s$ ]! d6 W
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)! k7 c. }) `) P( `
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)5 Q) D  E9 F& |* k
  1223. Static_Text_Pos_End
    / u: u' n% E/ M) V; S1 s/ x

  1224. 9 g3 C. @* v; C2 ^8 A3 n4 n6 s
  1225. ;------------------------------
    $ N; |, c. z2 t" j' ?% R
  1226. Music_State_Stop' d9 F  I. J& }2 H& m8 y$ n  V
  1227. .IF SOUND_BAR_SHOW_ENABLE8 n" [( A! a. \
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    : S" s; J! ^' {5 \! v6 C: Y' @
  1229. ELSE# B5 v; s* e* o
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    2 d9 u, E- T2 U
  1231. .ENDIF+ m1 W- V3 B0 d* L  z
  1232. Music_State_Play
    3 L) G. v: }- T4 c
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00* y0 O; [5 l; p! b
  1234. 9 }4 r4 u" X. p) C) m4 q
  1235. ;------------------------------
    . u- p$ w3 c6 f' h
  1236. Sound_Bar_Text_Data;声音类型文本
    ' x; ]8 b3 }  t+ K0 k( D2 H
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    # ~, @, R2 u) n, S- I+ p, f3 c
  1238. .DB "SQ1-",$FF2 ]" C) S3 L0 L' Q9 q
  1239. .DB $FE,"SQ2-",$FF! l, z# R# N5 z! U' P$ l+ H6 y4 {
  1240. .DB $FE,"TRI-",$FF
      Z1 G$ ^& A% ?/ k% Q' d7 L5 f
  1241. .DB $FE,"NOI-",$FF: J" j0 S, P: ^2 @# P
  1242. .DB $FE,"DMC-",$FF,$00
    * R! A8 ?% j! J- }
  1243. 9 r7 }3 D# \/ |  B0 q) L
  1244. .IF Track_Name_Pos
    ! X! b3 w, k& E" t" [5 n5 a
  1245. ;------------------------------* X6 @: o$ F) d' l, u
  1246. Track_Name_Addr;曲目名地址索引. r# N/ D; a5 A" ?' G
  1247. .WORD Trackr_01
    ) S# Q7 u9 n7 M. e2 l9 W( Z) s
  1248. .WORD Trackr_02
    7 V  d. Q" `0 v3 k! n
  1249. .WORD Trackr_03
    3 A% B" U! J% h' ^7 h6 N
  1250. .WORD Trackr_04, m0 Z; I! ~* t, Y9 }, n7 B- |
  1251. .WORD Trackr_059 |" n# o& j# I3 }
  1252. .WORD Trackr_06
    : p7 _/ H9 [0 O  p' C4 a" K
  1253. .WORD Trackr_07
    & o+ H0 H) c1 `1 Z  ^' |# V
  1254. .WORD Trackr_08
    $ |4 y  X. Q5 l7 Z4 Q: D- b
  1255. .WORD Trackr_09+ E; w0 n+ w, y) |& G1 J$ X2 K& K
  1256. .WORD Trackr_101 L" B3 n! {4 L* F: e2 E4 j
  1257. .WORD Trackr_11
    - S7 C6 ~* a9 R* u4 U
  1258. .WORD Trackr_12
    ' }5 ?# m+ S( I5 G/ s- b
  1259. .WORD Trackr_13( T' S' d7 U4 H: }. [
  1260. .WORD Trackr_14
    1 s" U7 }% c, a+ M( q& V, j
  1261. .WORD Trackr_155 n- U& U0 K7 J$ d1 S
  1262. .WORD Trackr_165 e# M6 W) X1 ?6 @' ?- l6 L
  1263. .WORD Trackr_17
    : E& J: a3 \2 W8 R& h
  1264. .WORD Trackr_18
    ! V# U( Y% q! p
  1265. .WORD Trackr_19
    6 \+ ]" M" |7 U' \
  1266. .WORD Trackr_20! \5 W& p# t4 ~" E; y( \1 T1 I
  1267. .WORD Trackr_21
    - u8 S9 E) t4 q5 I0 E
  1268. .WORD Trackr_22
    ; x# ^2 i9 S- ?) [$ {6 R9 P) [
  1269. .WORD Trackr_23
    ! }* i0 ~9 _1 }  o  S4 a
  1270. .WORD Trackr_24: ]* \* p- z1 O# x( L/ ~
  1271. .WORD Trackr_25: {) \; e) _. Q9 S
  1272. .WORD Trackr_261 X$ w9 s( w& e9 }' w5 H
  1273. .WORD Trackr_27
    7 c% x$ t3 Q( m0 n% s+ c& @) `
  1274. .WORD Trackr_28# J) n2 ^9 w# O! F5 ^  p$ f, W4 d9 ^& t2 a
  1275. .WORD Trackr_29
    4 V4 V5 r- e1 F; y$ b
  1276. .WORD Trackr_30! q, `" H7 e. j
  1277. .WORD Trackr_31
    2 ~; X) r& P) S/ E" i  _: O, Q
  1278. .WORD Trackr_32
    # B) B0 Z% e4 k) \
  1279. .WORD Trackr_33
    2 [; |. j7 t0 G' G+ u! O1 E
  1280. .WORD Trackr_34( e+ `( J, ~: X- s6 d
  1281. .WORD Trackr_35
    5 l1 q% C, W, V, v9 a8 t
  1282. .WORD Trackr_36
    2 c) m, k$ _1 H1 C: S- Q
  1283. .WORD Trackr_37
    ' _5 _8 o+ D1 |
  1284. .WORD Trackr_383 a5 \0 t$ l+ d/ r* v# ^
  1285. .WORD Trackr_39
    : k% |0 o3 X; h
  1286. 3 B9 h% p! Q7 s$ Y8 s8 g
  1287. ;------------------------------
    ; m- F) l% q7 [) p/ `$ X
  1288. Trackr_Name_Data
    ! _" F" e' o7 g9 E* D; s2 S
  1289. Trackr_01 .DB $05,"BGM 1"! {$ B5 k+ N3 c+ L
  1290. Trackr_02 .DB $05,"BGM 2"4 u( A: r, C+ z& t: }
  1291. Trackr_03 .DB $05,"BGM 3"' ?5 @' e/ `6 [! n5 V. T7 _
  1292. Trackr_04 .DB $05,"BGM 4". w1 e! u6 I/ F/ O- o' I
  1293. Trackr_05 .DB $05,"BGM 5"
    , ~# S/ O0 S& z) }2 }) a4 q1 J
  1294. Trackr_06 .DB $05,"BGM 6"9 U$ I& V+ T3 G
  1295. Trackr_07 .DB $05,"BGM 7", L( r! F$ G: f- V
  1296. Trackr_08 .DB $05,"GREAT"! o& s. V8 k) \# Y9 S0 d
  1297. Trackr_09 .DB $08,"BOSS BOM"
    % q& c6 U, E( ~  n: ?: S
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    ; i# U+ O+ F% ~
  1299. Trackr_11 .DB $07,"P CLEAR"
    2 a+ `' |, m  Y1 x
  1300. Trackr_12 .DB $07,"A CLEAR"" Y+ k6 Y+ J, Y! F3 O6 K
  1301. Trackr_13 .DB $04,"OVER"
    . m# F# v# `. D0 u! w) w8 F
  1302. Trackr_14 .DB $06,"ENDING"( v- Z' s) O1 w: v
  1303. Trackr_15 .DB $04,"SUTA"
    & [, M, t" H5 h7 J% r
  1304. Trackr_16 .DB $07,"THUNDER"
    1 Y( D% c8 c: \) A' l9 e. o9 u/ F& A
  1305. Trackr_17 .DB $04,"SHOT"" v6 E! a) s* ~
  1306. Trackr_18 .DB $05,"LASER"/ {% f( ?9 o8 g( K0 ]6 c
  1307. Trackr_19 .DB $06,"SPREAD"
    ; D/ ~7 W) b. v
  1308. Trackr_20 .DB $04,"FIRE"
    ( }. U8 }; y/ Y5 q! d& u
  1309. Trackr_21 .DB $06,"B SHOT"0 A0 F# a/ M& F: ]
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ' F6 C  A1 ]8 u. B/ U) y
  1311. Trackr_23 .DB $07,"HARETSU"( l6 G) K6 t+ s; ^% h3 l
  1312. Trackr_24 .DB $05,"T OUT"
    9 Z$ g' j" V6 R' j
  1313. Trackr_25 .DB $05,"Z OUT"
    7 ]4 K% v; n! G" [2 D
  1314. Trackr_26 .DB $05,"A OUT"# Q  v/ x* V! P! G0 b" q
  1315. Trackr_27 .DB $04,"ROLL"
    ! w' l' L) `+ m2 T- ^4 h. k8 S  x+ Z
  1316. Trackr_28 .DB $06,"APPEAR"7 |7 |  n! @7 g" n  |* O4 c
  1317. Trackr_29 .DB $05,"POWER"
    2 d9 k+ x4 V4 z+ N( L" Y
  1318. Trackr_30 .DB $07,"BOKK BK"9 y  G4 S4 v% J1 e
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    - ~8 l6 V' F5 S( Q
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    4 C; e1 j7 ^5 Q! _. Y9 j; g
  1321. Trackr_33 .DB $05,"ARUKU"/ y. r" j$ u6 ?; i( ^7 z& {
  1322. Trackr_34 .DB $06,"JIWARE": S) }  Q$ k. |- q1 b- C. a
  1323. Trackr_35 .DB $05,"SILEN"! i( g' t* G1 `) u
  1324. Trackr_36 .DB $05,"P 1UP": ?; L$ f% C5 k5 d. e( S
  1325. Trackr_37 .DB $05,"P OUT"- ~" `8 G1 J4 f% A
  1326. Trackr_38 .DB $05,"B OUT") g+ j0 X# ~6 A/ Z
  1327. Trackr_39 .DB $05,"PAUSE"2 d! F0 K  ]& c' H
  1328. 8 \" L+ J& D* N; L' R0 P) [# G. {9 n
  1329. .ENDIF  |% w# T$ o3 k9 t% l, p  s
  1330. / w+ L% L! e2 V3 G6 a9 G
  1331. ;------------------------------
      q. {& g- D( c9 q, S
  1332. Static_Text_Title_Data;静态文本数据
    4 r/ N$ I; x5 ]! I1 T
  1333. .DB 12
    , Q' R+ O8 @6 }& x, G
  1334. .DB "SUPER CONTRA"
    $ p  \$ O* g5 u+ f( _0 \1 ], I
  1335. Static_Text_Author_Data5 I/ v4 d! }& D  W
  1336. .DB 23
    ! \+ E- q& ~# g# h
  1337. .DB "EXTRACT BY FLAMECYCLONE"# @9 t( T* e9 _  g. ^8 G4 V
  1338. Static_Text_Date_Data
      {! v: v0 b; x# F& K9 G
  1339. .DB 10
    0 P& s! ~/ h' q, S1 |' ]* e
  1340. .DB "2023.07.11"2 v3 a' l) q0 |6 f) p9 @+ |
  1341. - X/ ~: J! U  q: Q
  1342. .BANK RESET_BANK & BANK_DATA_MASK( P7 U% l* x5 \/ T# M8 r
  1343. .ORG RESET_ADDR# [( }2 A- w6 |0 O/ n& Z( _1 ?; ~% m
  1344. % l0 E( w" g, q: e5 W
  1345. / D( k3 p, L' {- ?# r2 b/ Z
  1346. ;==================================================
    6 \1 G; u% q. J$ E6 W0 f5 _: U
  1347. ;切到主程序bank& v" k% r) e. {* t0 b- _
  1348. SwitchMainBank
    : \) r) j0 {; K' H1 v! ^; X
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    $ L: g/ E  K$ D' W& L8 w
  1350. JSR SwitchBank8000
    " t6 I% f2 R! f1 U" `
  1351. RTS% B. i1 M1 f- G: ]. V; K* v
  1352. & Y9 g2 M8 h  A7 K" ]
  1353. ;==================================================
    * _% F% R7 C6 o5 w8 l" b* D# O5 @; M
  1354. SwitchBank8000;切换bank到8000-9FFF+ d6 c+ N( ~" a  G$ Y
  1355. PHA: L* V: p6 C* q  M
  1356. LDA #$06" N) W7 q2 k/ U7 W# f" t/ v
  1357. STA MMC3_BANK_CTRL, u9 ^0 H* |6 c3 G9 U% W; A
  1358. PLA6 q$ ]; ^, |. |' o
  1359. STA MMC3_BANK_DATA) A6 `# z7 h  B6 h2 |' Y
  1360. RTS
    $ x6 X9 W, u* t
  1361. 5 d$ K5 E: S2 i5 O+ G" _& i. H3 ?
  1362. ;==================================================
    7 r# j4 }+ S1 ^- f  S6 I0 N
  1363. SwitchBankA000;切换bank到A000-BFFF" f& X4 V& L, }* F
  1364. PHA  D2 F6 E% m4 k8 C
  1365. LDA #$07; X, r; f. I! X) q# w6 u0 Z( g
  1366. STA MMC3_BANK_CTRL
    6 y; T' M, C: G0 s
  1367. PLA0 {* Z- L0 o2 Y* `0 k" ]% L  T9 ?/ f$ }
  1368. STA MMC3_BANK_DATA5 `. W5 _0 {5 }
  1369. RTS/ A- q4 u- H) }+ H" h
  1370. " r9 g0 n6 T* E/ k5 {4 \
  1371. ;==================================================( W$ U3 q8 s% }3 B- s0 g
  1372. Sund_Bank_Init;音乐bamk初始化
    ' T% @# E  Y- L
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    - A* H" K  C# m; Y- P
  1374. STA Music_Bank_8000/ m2 \" x* ]+ k1 G9 W" }
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK4 E8 A' c$ `. X
  1376. STA Music_Bank_A000
      D$ S3 @) N4 E
  1377. RTS
    ' K8 e4 L! E' T* n, W! w
  1378. ( `1 C8 L' Z. ?1 t- S8 m8 l/ \( I
  1379. ;==================================================) p8 p7 b% S6 T! s8 p
  1380. Sund_Bank_Set;切换音乐bank
    9 P% _# i! t( r* V* G* ~! ]
  1381. LDA Music_Bank_80006 c0 a: e5 D, e3 H
  1382. JSR SwitchBank8000; n, Y2 f( \6 W
  1383. LDA Music_Bank_A000
    0 o8 G, V' t+ C( z& M" X" r
  1384. JSR SwitchBankA000. |' G3 A& ^. }( }. o  I. w( M/ G
  1385. RTS
    4 u+ r/ H8 a# ]* r  w5 D: G4 v

  1386. 9 H6 D, v( x  m6 I* O$ g: z% H, X
  1387. ;==================================================
    * ]+ S. t2 F4 X( u: `  X* B2 N
  1388. Sound_Init;音乐初始化7 B& u4 c" k1 {2 h: h+ k
  1389. PHA
    ! _* v8 v& B/ p( ^
  1390. JSR Sund_Bank_Set
    ! [+ s5 B& a2 S6 q+ Z3 s% ~% t2 S! j" V
  1391. PLA
    1 \5 O% X' X" _4 R1 t3 D* @
  1392. JSR Music_Init_Addr8 I& ~5 g% z; O/ d: H. X
  1393. JSR SwitchMainBank
    1 a- f$ B; @9 d8 ~6 H( Q( V" g: `
  1394. 0 r0 S- Q8 o# k5 i' m
  1395. JSR Music_Bar_ReSet
    + L; A7 k. m3 V% b1 k7 S9 F
  1396. JSR Time_ReSet
    9 {  D* |. \) T% U6 R7 e9 Z: a
  1397. LDA #$00, P" n( b! `$ M: U( R* l
  1398. STA Music_State
    8 w5 E" ?4 i# y: a* b. q- L
  1399. JSR Music_Stata_Show8 |7 r: Q+ \( d! w2 ~/ b7 v
  1400. .IF Track_Name_Pos# l% S$ g9 G) O$ G4 \$ [: S
  1401. JSR Show_Track_Info
    7 e6 m  i$ k" O6 w4 Q8 ^
  1402. .ENDIF
    % q( b1 u: A' f1 L, n5 d' @

  1403. 8 m, @, h, \  G( ]
  1404. RTS6 ?$ ~0 G0 ?' ]2 D$ k. P  U

  1405. 2 R4 l: ^0 a3 H  o5 R
  1406. ;==================================================9 |+ _' \* f% Y1 d: I, {
  1407. Sound_Play;音乐播放
    * X; C5 |4 M& U: w4 r) Q
  1408. PHA
    ( T3 M- c# s7 |
  1409. JSR Sund_Bank_Set
    0 ]) m8 ?7 f1 S# `: r3 g. J
  1410. PLA4 f2 ?# Z. O7 h8 w# a
  1411. LDA Music_State' r- ]! j. f. G7 ?/ R6 |' C
  1412. BNE Sound_Play_End1 P! i* |+ X0 Q  ~  `: _
  1413. JSR Music_Play_Addr
    & U1 Q+ S$ ?) A! F; [
  1414. Sound_Play_End* Q& L4 m  y) U4 q" x" Q, q6 W
  1415. JSR SwitchMainBank
    " `% M' y- A5 S* r1 X' ^
  1416. RTS) i* I) Q6 `+ \
  1417. ( \( k& _4 y; f/ V0 I3 `9 n& M
  1418. ;==================================================
    * B: b) j5 i1 a) ~
  1419. .IF Music_Reset_Addr% Y: b$ k2 h) ^, c9 i+ k
  1420. Sound_Reset;音乐重设(如果有的话)
    . l% l/ d- F7 p8 Q. i
  1421. JSR Sund_Bank_Set
    ; z: h4 J  j( @" p6 J
  1422. JSR Music_Reset_Addr
    * W9 q% b; m+ N1 J
  1423. JSR SwitchMainBank
    ' N/ H7 J5 ?/ A
  1424. RTS
    / A5 ?) M$ ^* m6 r9 [
  1425. .ENDIF
    . W) K2 c* B0 R8 H# _& o1 |

  1426. 0 b% F7 N, q% R
  1427. ;==================================================
    9 k* P' f/ p" q# W3 Q9 H
  1428. MainLoop;死循环
    # u& Z( g: i- q7 Y& H, f$ @
  1429. JMP MainLoop
    + X! e8 c$ Z+ p& T0 T2 N# h# Z
  1430. 6 k5 z- h1 g! C9 M* B  {+ c3 `
  1431. ;==================================================" ?6 b6 S5 h( y) e" o& q
  1432. NmiProgram;Nmi中断处理
    9 q. d1 [! x* }$ [3 I
  1433. PHA7 j6 b3 `& A" |- D7 k9 {' G5 G6 `$ b
  1434. TXA, }/ w0 h) e: T. u/ \* c
  1435. PHA3 }- x1 p2 O! N- \
  1436. TYA( t+ l  a% U7 V; Y
  1437. PHA
      Z+ g; h  B& `
  1438. 7 c- R1 @5 [% U" l6 d
  1439. LDA PPU_STATUS
    / G. d2 U/ g$ ?- n% U# a, j
  1440. LDA #$00
    ; ~8 `% Q, Z+ y# P0 O; f( }
  1441. STA PPU_CTRL
    $ x6 U! H* L0 Q; s. @
  1442. . Z9 B* `! |+ v8 |
  1443. ;切换主程序bank8 g9 O4 b) s4 Q0 [; e6 R
  1444. JSR SwitchMainBank
      _0 E  g- t2 Q0 B. P

  1445. 3 M) i- W) Y% `, @, x2 g
  1446. ;NMI处理
      W0 c. v% a6 C' `9 N
  1447. JSR NmiProgramProcess
      x* E) ^5 P* b' d; t0 s
  1448. * G: d3 m* n' ^$ t: n
  1449. Nmi_Proc_End2 p, a5 a: ?: |( Y. N+ ?
  1450. PLA0 b3 j! S% w* [! |) v8 L
  1451. TAY
      x( {6 Y. j9 F" [5 D! e
  1452. PLA& e* h, D+ Z7 ^7 @* V) S$ b
  1453. TAX+ L+ U8 Z. P: c, r6 f6 v7 m4 X
  1454. PLA
    0 Y9 y. \5 }# a/ R
  1455. 3 Y: b8 w+ L) g% ^+ Z: C' n4 e
  1456. RTI; I# ~7 I* X7 I; w! M- d
  1457. ) `, b2 K" |& R- F) Z- Z2 C, L
  1458. ;==================================================' J7 }8 i, \  V6 k" k
  1459. ResetProgram;重置中断处理# p4 t+ n7 r' z7 \% _# ~
  1460. SEI* @* y( A3 q8 X# G1 I: g
  1461. CLD5 S3 [' X) K' V) d( m
  1462. LDA #$00. U: c- m/ Q0 _% X$ a
  1463. STA PPU_CTRL
    ( p8 D7 B: v" S) c
  1464. STA PPU_MASK  G) r, R5 b  i2 H9 ^# k) D; X
  1465. 4 C9 F, @$ q0 K# C; c0 S" {
  1466. JSR SwitchMainBank
    / ^3 q5 \; h- R8 A. n% W
  1467. JMP ProgramBegin; x1 b9 h+ z' Z7 G) B( \. N* O6 w
  1468. 2 |9 H: O4 ?! B5 W6 N2 I
  1469. ;==================================================2 f& d( R2 j. \
  1470. IrqProgram;Irq中断处理  y" I) G1 B7 d- [8 b. M
  1471. RTI7 f9 K" q8 H+ R% @+ h7 x! h

  1472. 1 w: s) N' U, c9 |
  1473. .IF SOUND_BAR_SHOW_ENABLE2 _5 m  K" S/ m3 v0 M
  1474. .ORG $FF80( s0 u3 V0 W; N# V
  1475. STA $4000,X
    2 {! d7 I: |. A
  1476. STA Sound_Bar + $00,X8 V+ W3 k5 c. T! V' m
  1477. RTS
    5 p4 y( z( U# X7 M' M
  1478. : b$ _% v, w' f1 u) K- q& y, ]7 w
  1479. .ORG $FF88
    2 Z" n- e2 B' E1 P4 B1 W
  1480. STA $4000,Y
    ) G0 R7 `, d; v8 l0 g, }. N
  1481. STA Sound_Bar + $00,Y) n# r6 `& B' q
  1482. RTS$ J4 D% Q. f' a

  1483. 2 u5 o. H: ?0 P7 ^5 u6 K
  1484. .ORG $FF90
    " L) A- s( r* w  i# W- H1 Y' X5 J
  1485. STA $4004,X
    0 m4 G- V3 q. D0 \. G
  1486. STA Sound_Bar + $04,X
    / N/ T. [% F' w/ G+ e: i4 @
  1487. RTS
    # e4 Q7 n4 J+ S- }: d: j9 V

  1488. 5 X  f7 s4 {+ N" l/ T
  1489. .ORG $FF98' P8 ~0 M) f0 [1 m9 w7 @0 p
  1490. STA $4004,Y1 t* N& ^0 l* p. l( f# c' w8 r( }& m
  1491. STA Sound_Bar + $04,Y
    1 l( {0 x; g% A+ T5 S
  1492. RTS' B1 B6 c: x9 g7 W( D) \& m, G
  1493. 6 _6 p9 M7 s: F
  1494. .ORG $FFA07 [/ r" Q# {- H
  1495. STA $4008,X
    5 r( P8 n( b/ i. g! @
  1496. STA Sound_Bar + $08,X+ R+ f1 A' C4 Q- g; m" Z
  1497. RTS
    % H8 x5 _, r& e

  1498. * {9 E" U& G2 k3 K% H* I
  1499. .ORG $FFA8( N: g  I' U) |8 y% K
  1500. STA $4008,Y
    4 O$ s8 n. s) U  P
  1501. STA Sound_Bar + $08,Y
    4 i& \) A7 v  A5 _, r
  1502. RTS- N, E  u- S$ ~
  1503. : p. a9 U; D+ m7 ?5 e
  1504. .ORG $FFB01 g6 S8 V8 d& d( V8 W: J
  1505. STA $400C,X
    0 ?, \# X9 U2 [$ p
  1506. STA Sound_Bar + $0C,X
    2 f! S/ ]. S3 Z- Z9 `' J" u3 N
  1507. RTS
    7 ]/ c+ f. v' t& ^" M2 i3 J
  1508. ' ^8 A4 i: u* U) O! R
  1509. .ORG $FFB8; l2 k" M1 I! O- v0 Y/ X& ^
  1510. STA $400C,Y3 P* i; [! G) d2 L0 j
  1511. STA Sound_Bar + $0C,Y( @. F7 }7 ~" _; T; m7 u
  1512. RTS) g3 ], [% H4 W

  1513. . l) n9 z2 S1 [7 q1 Y& U) f6 {
  1514. .ORG $FFC0% S9 R' G1 Q# q! Q3 S
  1515. STA $4000
    + F- r' K: y; t1 d: m: Y
  1516. STA Sound_Bar + $00
    : d; p; w8 M& `
  1517. RTS/ F5 I* B  [" n! e& u

  1518. , M3 i0 z6 ]7 E" R
  1519. .ORG $FFC8: x% l( _; @7 G4 M8 [/ w
  1520. STA $4004- H% Q: Q! r! P6 O; W7 C' k, W
  1521. STA Sound_Bar + $04
    8 [) z+ Z& m5 A  Y( P
  1522. RTS( p" J( z  a7 Z& ~% C
  1523. , L1 G( }! `9 H; n5 m3 q- H
  1524. .ORG $FFD0& f' x- {# h* H
  1525. STA $4008
    : H1 S% y7 R2 }  A' O
  1526. STA Sound_Bar + $08
    " w6 c- S8 Y0 f% @! `
  1527. RTS5 \4 P. v5 H2 q& n' D3 s! h' _
  1528. 4 l: V' f1 s/ [* v$ Y
  1529. .ORG $FFD83 m, `* C' ]6 _& q9 I# x
  1530. STA $400C$ q4 A; R3 ]* E/ S- {$ R
  1531. STA Sound_Bar + $0C
    ; D9 T' F: _; B. z5 \, W
  1532. RTS* S7 Q. {0 l! T8 m) b- p4 w5 G

  1533. $ v' ~+ B# `0 a9 t2 o! m
  1534. .ENDIF3 ?6 Y5 f% P. u  q: F, n) ~$ @8 u4 y

  1535. $ C5 B/ l( |6 L
  1536. .ORG $FFFA4 `8 ^( h% I7 h/ I! ]
  1537. .WORD NmiProgram
    3 F$ T: \8 ?, g% m( x, o3 u$ D8 ]1 @) `
  1538. .WORD ResetProgram  s4 E, @0 q9 s' W$ _9 h% W. y  j
  1539. .WORD IrqProgram
复制代码

( l) q- r5 O  o# a( y( r0 N7 |
# M4 {2 q- i% F1 ?, R
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1236 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3225 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 00:32 , Processed in 1.111328 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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