EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
& i( f& \: e$ l) S5 D1 T* K
( ?- G& v& Q5 H! m' P! A( [# K1.魂斗罗
6 K$ J+ T+ p. A& {& t+ e7 k1 p# O3 w2.超级魂斗罗' Q2 C. m/ ^9 k" E% o- E
3.赤影战士
7 I/ K, @3 T$ x: H% I5 }4.忍者龙剑传2
0 u& _" n2 c$ u* \# d
/ m# s% o. ]0 k& R$ j) x
% G5 Q- Y" c9 `# e+ S
  R% A* f2 @# ^( v% `0 v# R0 J3 [# k- C% ]% x
源码:4 ]( A& J) M; G+ ?% W+ k
  1. ;[FC音乐][播放器模板]" |; \2 j! E( l# V. b% ^
  2. ;FlameCyclone 202307106 ?3 d, ?# S" w1 P7 F5 p1 m

  3. 4 a/ s& u4 T  l6 D9 R3 O5 i
  4. ;文件头
    . N! }+ I8 b! U! ^4 U' r
  5. ;======================================================================
    0 R" d3 a7 v1 @
  6. .INESPRG 4                                              ;16KB PRG 数量& x0 g: x4 f+ M; e: N0 F4 d# Y
  7. .INESCHR 0                                               ;8KB CHR 数量
      A& r+ H9 R/ E* p# ^, |2 B
  8. .INESMAP 4                                                   ;mapper 41 v) X% r; l, T3 W* S7 s1 \
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直- B3 b. f4 \" R! Q, l- R3 j

  10. 5 J% k5 `3 b: z) ]
  11. ;==================================================
    3 J5 X9 ~" O" c: H$ G; g1 t
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ( ?* T' z0 n5 X' [4 P
  13. ;==================================================% Z$ @1 p% ?" T+ J/ e& T8 @
  14. BANK_DATA_MASK              = $07
    5 N; _7 U4 x: }. V
  15. ;==================================================
    - W# B' c- B0 S5 O) Y+ j
  16. SOUND_DATA_BANK_0           = $00) y9 }2 W6 o9 L
  17. SOUND_DATA_BANK_1           = $01
    " V1 k0 B& {) Y3 f! Z+ G3 o
  18. SOUND_DATA_BANK_2           = $02. }5 W" E: `) J" g& L& z6 ]
  19. SOUND_DATA_BANK_C000        = $06
    & y& ]. J7 O# e' X% \/ C

  20.   R6 L; ~) d- Z1 Y
  21. ;-------------------------------------------------! e# F& ?$ S( ~! U+ \0 b
  22. CHR_DATA_BANK               = $040 A6 O, J* ^  R/ O" I! ~6 L  b
  23. CHR_DATA_ADDR               = $A000
    ) Z2 u) `' z, l6 ?
  24. ;-------------------------------------------------
    , L! h- p- v" e5 Q! h: G0 F
  25. PROGRAM_BANK                = $055 c* t0 B0 ?9 T2 N
  26. PROGRAM_ADDR                = $8000% }7 c7 P) u" p& V- O
  27. ;-------------------------------------------------
    2 R5 @0 {/ S7 U1 t. d$ V3 ~
  28. RESET_BANK                  = $075 N6 ^8 s* Z+ O( |% O
  29. RESET_ADDR                  = $FE00+ L  j5 d' M1 ~7 A9 K5 u
  30. ;==================================================
    * G: \. j8 d6 ~  B: [
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    - }: _. G# J6 j0 C) G
  32. Music_Play_Addr             = $813C ;音乐播放地址
    % N+ O7 \  O8 T( {& l/ A
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    8 \" ~# ?7 T: I5 \% [8 m  W/ W
  34. ;==================================================
      ~4 U; R( v3 f+ C5 M; o8 q0 u, Q/ ?
  35. Music_Song_Total            = 039  ;全部曲目总数1 v% t: y" |0 u4 g* b
  36. Music_Start_Song            = 007  ;初始播放曲目# R& ~! a' t6 i
  37. ;==================================================+ Z) R3 [2 F, h- G* C' f
  38. 6 Q2 Y2 p1 b, D% a) b0 n
  39. ;==================================================
    * s, N4 t0 i- G" o
  40. Title_Text_Pos      = $210D ;标题文本位置
    % k/ J+ z' G3 C+ P; s, k2 N
  41. Author_Info_Pos     = $2284 ;作者文本位置4 p( q% M; I- ~# {! Z  W
  42. Date_Info_Pos       = $22CB ;日期文本位置
    % w5 h' c; [# g9 m3 F
  43. ;------------------------------8 a' k) C. O( ~) A3 m7 o
  44. ;------------------------------' [+ G$ i8 v/ E# s. p
  45. .IF SOUND_BAR_SHOW_ENABLE
    ) A9 B* K1 r; Z4 h+ B9 B( o
  46. Play_Index_Pos      = $21B3 ;当前曲目位置6 q5 F; L& N& L* s# @# K
  47. Play_Time_Pos       = $21F3 ;播放时间位置9 g0 b1 @# X% l; n5 l5 _
  48. Play_State_Pos      = $2233 ;播放状态位置
    % S; K0 k/ z7 _$ k7 `! P' l  }$ n
  49. .ELSE
    ! O' Y" k& e5 L5 q
  50. ; d; e2 [3 S$ e) R* m6 W
  51. .IF Music_Song_Total > 998 u- N& V& _5 a. t& X
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    ) E. j; A- }+ G; ~; R
  53. .ELSE
    ! f' M) L. `3 V! \

  54. % h7 {. X  r! a1 F" C
  55. .IF Music_Song_Total > 9
    0 ^4 C) V. M" H# |. v
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    3 B; Y( C- }* \3 }9 f( M" b+ u  H
  57. .ELSE+ h5 u9 z& A; J
  58. Play_Index_Pos      = $21AE ;当前曲目位置3 Q& _' M3 n9 U) j
  59. .ENDIF! }" d5 I9 a% F0 C+ S7 j. ]

  60. % m. ?2 l% p- a4 v$ ~
  61. .ENDIF  a/ _  G( t# q  H7 o' |
  62. 4 b' W% R4 ]* S& R4 ]! b

  63. ! C9 h8 r% l$ |; _2 a
  64. Play_Time_Pos       = $21EC ;播放时间位置2 w7 T4 [5 B0 m3 a/ X: X  p
  65. Play_State_Pos      = $222C ;播放状态位置  A4 c4 B. @+ x+ U) ?
  66. .ENDIF, S0 |0 d: j& g$ K+ m! ~4 R
  67. ;------------------------------
    + z1 y! O) S- ]7 a* }, M9 Z
  68. Track_Name_Pos      = $216B ;曲目文本位置' @2 }4 X8 ]  D# s# }  c/ ^$ `
  69. Sound_Track_Pos     = $21A5 ;声道文本位置6 W) q- ^+ W4 h4 f7 v, c0 g# y
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置% P( ]" Y( `3 }& x4 b- u
  71. ;==================================================
    / q1 d4 d8 {- E1 d5 n- A! B
  72. Scroll_X = $00
    / v/ w, w! F3 T, @+ ~
  73. Scroll_Y = $06# J6 J1 o! c6 M. e+ R
  74. ;==================================================
    ! V8 n4 H8 V* {; V) a
  75. RAM_Cln_1       = $0100" Z/ v: e6 A! r. N, F/ T* _! h
  76. RAM_Cln_1_Size  = $80
    4 G' U* W! q8 T! o: q) }
  77. RAM_Cln_2       = $00E0
    " s8 @2 L1 N& d/ J  d9 B3 O
  78. RAM_Cln_2_Size  = $20( p5 v5 L+ o! {& F) ^/ e5 n
  79. RAM_Cln_3       = $00E0
    * g8 B. X5 c$ Z4 f9 L
  80. RAM_Cln_3_Size  = $20% R. C9 h1 k7 ^6 N) ]. r
  81. & G# x: L( v  U5 m9 P0 E; w' w
  82. ;==================================================
    " e) W- C# Q/ l/ i9 c# v/ O
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    0 y' R' t4 U4 B  n. j4 N  q1 T: Z
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    2 T6 E) a& X9 [6 U
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位5 s, R3 M& S. B1 w
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加14 h( u  U8 z4 o
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    4 h2 G- q" L% P7 l# I$ K! U, b  t
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    : v$ m6 W# m7 F$ N2 u; |( d: p
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加: u# D) r! t# ^
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ' O7 P( M2 O# y; T! V
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    2 P& n' ]. f$ x3 |
  92. APU_STATUS              =   $4015   ;声音通道切换& l# r- o% }; s9 z5 N; @
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ; t$ e) R4 w- x5 K- v4 Y
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    , Y! k) _! T1 Q) p. T( c
  95. ;==================================================
    ' S- T, w3 b& H
  96. MMC3_BANK_CTRL          =   $8000
    + y* g& Q* I7 `/ q; Y! K% ~
  97. MMC3_BANK_DATA          =   $8001' u3 J$ j2 E% T' \# T
  98. MMC3_MIRRORING          =   $A000
    4 q- z! @8 q/ I* w9 D$ X- r1 Q
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    & n3 \) C; k; t7 g
  100. MMC3_IRQ_LATCH          =   $C000+ I# w% }& Y+ [% p
  101. MMC3_IRQ_RELOAD         =   $C001$ `7 W' j) x8 o' a; Q8 V' E( d: m4 c) [
  102. MMC3_IRQ_DISABLE        =   $E000
      {1 o; e; S# @+ A3 L
  103. MMC3_IRQ_ENABLE         =   $E001' H% j4 ]+ F+ u9 W% ^

  104. ) S" m" s0 q! \% z
  105. ;音乐数据块7 F2 D% G( x/ B3 F0 _% P) Z% w* N
  106. 4 z1 j6 }0 @2 o$ ~) L% q7 b
  107. ;======================================================================
    - U$ }4 Y: W9 d. J5 S
  108. .IF SOUND_BAR_SHOW_ENABLE/ k- l2 z+ d! F
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ! O. r8 ?2 [1 x- ?% E7 R. G
  110. .INCBIN "sound_bank_bar/music_data_0.bank"! Y0 U; |0 T* }
  111. $ {1 D: u# n1 _: @# J. G7 N+ \+ R: u
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK, v, X1 {: n4 B( s0 a
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    7 J8 P$ K4 B; g+ W5 K/ `

  114. * a% ]. H9 ~4 w# e+ x, N
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    8 H1 a2 h2 {% K% z2 o$ j% K
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    ) |5 P4 k8 B* F
  117. 9 j0 l+ |% n' B8 Y
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    . `# L* h: O& i" H  J4 ^# H& ]! [
  119. .INCBIN "sound_bank_bar/music_data_3.bank"7 q" S6 Z( A4 n5 ]

  120. 6 c8 h0 |1 \% K4 V: ^2 k! E
  121. .ELSE4 v) p& Y* V5 n' }4 d' ]
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK8 E4 Z- j+ m! R7 [! w4 x
  123. .INCBIN "sound_bank/music_data_0.bank", h3 A* M8 q8 K1 D8 W
  124. ( {1 c! z6 S% h1 L! q* V4 W
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK- x4 Y* W& U* C2 |5 Y+ b# a) A
  126. .INCBIN "sound_bank/music_data_1.bank"' U- L8 U, s" S' ^

  127. / P; O4 u" s2 A% J( s
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    0 ~$ u) r9 e1 |1 M3 I
  129. .INCBIN "sound_bank/music_data_2.bank"! ?% G. X6 f/ y6 ^8 F: |1 U
  130. - {5 Y* L& V2 E) W8 p+ I5 c; F$ b& a
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    & Q, G  O5 D1 h
  132. .INCBIN "sound_bank/music_data_3.bank"' j# a! n3 A" R- G
  133. .ENDIF
    / ?% x$ S7 O0 [# O- o
  134. ! b4 o2 I* Q0 ~$ r, f
  135. ;CHR图形数据
    ) W2 G0 F& U/ V# V3 r
  136. ;======================================================================
    . n7 U0 _  J3 B. ~
  137. .BANK CHR_DATA_BANK( d. r  G+ h) w3 S5 @
  138. .INCBIN "chr_bank/chr_data.chr"1 j0 f; u8 a/ F7 g$ j

  139. 1 }$ T: [3 ]) h
  140. ;==================================================, h" _" `: k1 @$ \3 q
  141. PPU_Addr        = $0300! C6 I! g' `0 z
  142. Palette_Addr    = $03C0  ~8 D" Y' G: c" b5 k- a1 P
  143. Sound_Bar       = PPU_Addr+$E0  ~4 a- H+ B8 g3 F
  144. ;==================================================
    3 T! I. s1 I, z  i- C0 J* v
  145. Palette_Update_Addr     = Palette_Addr+$0D
    : h6 V$ R, d6 t( x
  146. Palette_Update_Max      = $2C
    - `* F7 j' ]! I7 E
  147. Palette_Update_Min      = $21
    ) U, c& {7 J% \1 Q( o+ q& g1 d
  148. Palette_Update_Interval = 60- s1 K# j9 o: g2 P% F( ~) g
  149. ;==================================================
    0 u9 |2 g% ^! v% e$ u
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    8 A' g& x2 e" t, ~& G
  151. Screen_State        = Sound_Bar_Cnt+$01+ j' O3 H+ u( _: z+ V$ V
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    1 [3 }3 h! q6 _& Q' j# F
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    6 ^  l8 Q3 F8 i! u
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04: D8 Y$ S) h7 @" j9 \8 F, H8 u
  155. ;==================================================
    3 x5 }6 Z9 m" F: t- C# [$ c
  156. Data_L              = $70& A. f5 f' }/ V* H1 x
  157. Data_H              = Data_L + $01% k) ?1 {& ?4 ?* O/ J$ ]
  158. Data_Cnt            = Data_L + $023 L( F( C$ l1 \9 m( Y
  159. Data_Buf            = Data_L + $03
    $ b* t) m# S! h, a/ N* p/ [
  160. Time_Wait_Cnt       = Data_L + $04) k2 g3 y- U2 x0 s
  161. Palette_Wait_Cnt    = Data_L + $05- }) {1 _% r7 u& k( w
  162. Palette_Update_Flag = Data_L + $06
    2 d* r, S# ^0 N0 Y
  163. Show_Track_Name     = Data_L + $07
    + s- ^4 Z8 i  n2 I7 F* _
  164. ;==================================================& T9 z5 Q% a: o2 t6 Q* b0 D- q
  165. Key_Keep            = Show_Track_Name + 1
    ' z" a, H! ~5 Z* m  D
  166. Key_Once            = Key_Keep+$01
    ' W$ Q; l' ^. `/ o
  167. Key_Kemp            = Key_Keep+$02
    ! G8 m! y* e/ j) V0 E
  168. Key_Temp            = Key_Keep+$03
    " l0 K1 J1 l4 I  l6 G& z
  169. Key_Getv            = Key_Keep+$04
    $ D' r: |/ @7 G$ F/ P1 m. O3 V% g
  170. ;==================================================# |( q) ]' Z; J: W
  171. Music_Cur           = Key_Getv+$010 u2 m6 S# B6 M, w
  172. Music_Last          = Music_Cur+$013 w0 _) ^' B5 {' W
  173. Music_State         = Music_Cur+$02: Q( Q% W$ O1 l8 a! ^' @" x' O' B# R
  174. ;==================================================+ @6 R3 e; l: h) L. |% H
  175. HEX_Data            = Music_State+$01
    ( L' p5 |, F# g+ z: h# l
  176. DEC_H               = HEX_Data+$01
    - o- P* T- K' Q( C0 z' P5 F
  177. DEC_T               = HEX_Data+$02
    3 x& S- ^. w7 a6 r
  178. DEC_L               = HEX_Data+$03
    / S. \! [6 E5 C% S
  179. ;==================================================( S1 ^& v9 A) N0 Y* r0 Z- q
  180. Time_S              = DEC_L+$013 e5 Z$ V0 M" X
  181. Time_M              = Time_S+$019 h: Y$ S9 ~: F3 G+ j+ K3 v+ a3 Z  V
  182. Time_H              = Time_S+$02
    0 C% ^. m- x. F+ @: n
  183. Time_Cnt            = Time_S+$03
    8 V* {( \% o' N" |  P& i. k6 D

  184. ' Z+ L4 u- P+ w. N. n( _6 c
  185. ;==================================================
    ! P/ w+ g3 U$ ^
  186. Music_Bank_8000 = Time_Cnt + 1  y1 `  Y$ i5 {& K* c
  187. Music_Bank_A000 = Music_Bank_8000 + 10 \6 l: V3 H1 y3 N
  188. ;==================================================
    ( p$ o: N+ L6 m# B5 L$ F: J

  189. # w. F* L8 ^# X  g
  190. ;======================================================================
    + b  c7 q6 Z$ ]6 N$ h
  191. .BANK PROGRAM_BANK
    0 ?* i& J7 \( ^1 V/ M* k% U
  192. .ORG PROGRAM_ADDR/ |, H  L: c4 R) z

  193. # e1 t1 K# v% a6 h
  194. ;==================================================- ^2 ]3 P2 |% i
  195. NmiProgramProcess;NMI中断程序处理
    6 H) b) c; D/ l1 Z
  196. ;处理PPU图像7 ~- f4 E, F; d; c. [, i3 T6 G
  197. JSR PPU_Proc# b6 k, D4 s1 Y

  198. 7 w) u% J( J9 r. N' X7 u7 x
  199. ;启用NMI中断
    6 P( y- G& q1 o# `. E
  200. LDA #$803 U+ j1 U2 S8 X) Y
  201. STA PPU_CTRL" k0 b# }7 Y" j% G( ]6 m# k. m. }

  202. & z' e( q" }8 r/ P
  203. ;更新调色板" _9 x" G3 ?: f2 X' |
  204. JSR Update_Palette_Data
    5 D0 n& u0 A, H" P+ D* D

  205. 4 @4 y. G# s) d& A  @
  206. ;显示时间(缓冲)
    # f  a  ^& F, ]) g# _6 U6 @# \0 |
  207. JSR Time_Show
    2 O) K, |2 M. ~/ h9 G
  208. & h" ?  p! w  Y, K0 K) C+ o) M2 w
  209. ;播放计时
    ( r. O( P+ K. k+ z+ _8 a
  210. JSR Time_Count  W/ n- d4 c/ \. B& ?% l& x7 U

  211. 7 s3 g0 Q0 E3 g: d9 \5 n# u
  212. ;播放声音3 @; c& {$ E( R5 G8 L
  213. JSR Sound_Play- A& i. z  n0 @7 @" ]

  214. . Q, e9 w- O. q+ z2 m% P3 t
  215. ;切换音乐(手柄触发)
    5 S: M5 n4 ~- y1 q# b
  216. JSR Music_Switch# g0 V7 V# W3 [) E0 l- g% U/ n8 J3 I
  217. ( n  D% C) ?6 e" q& R# O
  218. ;音乐显示(缓冲)6 R( L# f$ U4 ^$ |2 J
  219. .IF SOUND_BAR_SHOW_ENABLE. G2 f6 c) N* R
  220. JSR Music_Vision
    , o- s; v. ]& ^
  221. .ENDIF2 X6 O3 X7 Y$ Q% ]
  222. ( D7 \: J0 _( Q) w6 ^8 A
  223. LDA Time_Wait_Cnt! ~% ~3 H7 J0 P; S9 x
  224. BEQ NmiProgramProcessEnd* s' U. z3 \  Q2 }0 j: ^
  225. DEC Time_Wait_Cnt1 K2 m: {0 i1 {7 I7 l9 U8 I
  226. NmiProgramProcessEnd' q& ~& f- ~* u& }5 r/ ?4 K6 y
  227. RTS
    ( W2 j; K: l4 i3 Z, K

  228. $ p4 V$ k" R( m1 q" x
  229. ;==================================================( U  J9 n1 u1 v" T
  230. ProgramBegin;主程序$ t. y/ V" h3 f( _( Y" ~2 [, K
  231. LDA #$00' G3 l; ]# ^) k, I* j& j0 A
  232. STA PPU_CTRL
    ; O  b! N: O& E( S7 ~
  233. STA PPU_STATUS! r4 h9 K8 W" W
  234. STA PPU_MASK5 N( a6 y* I6 J# {
  235. STA APU_STATUS
    0 W7 g% k" F# S: A9 ~3 R
  236. STA PPU_SCROLL; G- |- I* \; G
  237. STA PPU_SCROLL
    * w1 s3 F2 @1 a2 T
  238. LDA #$C0
    5 O: \3 G# ?: ]1 M5 y) r
  239. STA JOY2_FRAME( K: y9 X7 ~; w8 u
  240. ( ~: t1 \: _5 R8 K* C6 q+ X
  241. LDX #$FF1 o) r' z! }9 p$ {3 r
  242. TXS3 s6 ~$ [% V; e& m( c/ |& `' J
  243. LDA #$004 t% T. [9 O2 @1 N3 [
  244. STA PPU_CTRL
    % r- N" o3 K7 H
  245. STA PPU_MASK
    , r- g4 [- R8 y. ]$ k6 j
  246. STA MMC3_IRQ_DISABLE
    3 D0 Q# D) D  f8 a. Y7 \2 @
  247. & O' X# `5 _, _6 `4 _2 b3 @
  248. ;==============================' B; f  ~8 r; d" c# v* e
  249. ;调色板清空
    4 e/ @3 v3 j  n8 _
  250. LDA #$3F8 a# I7 Q7 e  I9 X6 e- e( d/ ^
  251. STA PPU_ADDRESS
    . `- c" E, N6 \4 [* P& _. @
  252. LDA #$00
    ) T( ]% V! g1 Q8 {( O
  253. STA PPU_ADDRESS
    : j4 U7 S! T. _  i7 O
  254. LDA #$0F
    7 R, |8 F7 ?9 Z
  255. Palette_Clear% [1 }4 }" l5 S( V2 ?4 i: I
  256. STA PPU_DATA/ B7 ^0 z: u* P
  257. INX2 n  m" f. b* }" h5 h7 D# ~2 {0 _) G
  258. CPX #$20
    0 l. y( X/ x, z! ]8 i# Z
  259. BCC Palette_Clear
    4 N+ d9 p; l" z* X  O
  260. LDA #$00
    - i5 F9 c0 I8 S
  261. STA APU_STATUS
    5 V9 I- d- Z4 F5 ~0 l" n2 O
  262. ;==============================3 v5 F! I7 e9 k( f, i
  263. ;初始化背景调色板
    0 r8 M! s( h' G2 _4 E8 b. v
  264. JSR Set_Palette_Color
    , h3 ~+ l& r. V4 {7 L) D
  265. JSR Set_NameTable_Attributes
    ' t4 o& ~2 N* K0 |4 F2 Z3 V: R# l7 A
  266. ! E, p6 m) \, J2 E3 @' ~, Y! Y
  267. ;==============================
    , X2 p+ j5 ~0 C6 d. }# K
  268. ;RAM初始化) T4 Q0 l/ d% y  T; x! m
  269. RAM_Clear_All
    & q* ~9 y" U( R3 K
  270. LDX #$00
    9 I2 j2 q) M# E" @! S3 A
  271. LDA #$005 }: R7 v/ r6 F* c* v/ Y
  272. RAM_Clear_All_Start" R1 a! @2 E% G4 F* Q2 v( C
  273. STA $00,X
    0 z& W: p  }- _7 e* P
  274. STA $0100,X
    5 g! H" w; [8 Q, Q, ~
  275. STA $0200,X. L- B) Z% l" f' m- H$ p
  276. STA $0300,X& P) m# q. C& f1 I. R
  277. STA $0400,X: z1 e2 x: H1 E/ z
  278. STA $0500,X
      e! U* f; m' N/ q( C* H5 k
  279. STA $0600,X
    ' k$ U  \/ G  _1 [
  280. STA $0700,X2 S: t5 U/ }. k5 e; C% k" r
  281. INX3 e$ f7 S: u( N1 N# d
  282. BNE RAM_Clear_All_Start/ Z6 D0 ~/ Y/ J& _! E! v* K: p; F
  283. % A, ]$ {) ^5 U0 o/ c5 W" [8 W" N8 c
  284. JSR VramInit6 h; Z5 E9 \% a+ l; M3 `+ J6 M8 e
  285. JSR Init_Palette_Addr
      B. @: c4 c2 J' ?% }
  286. 5 M4 }1 ?: e( Y
  287. .IF Music_Reset_Addr* A' p+ G' r( R3 V3 @% F: _# K: y
  288. JSR Sound_Reset
    / ?' m, @9 |1 e6 w) }4 `. L
  289. .Endif) f8 ~2 X3 ~/ L

  290. 6 d- S- ]7 g9 n+ H
  291. LDA #Music_Start_Song-$014 z" _) ^/ ]1 K
  292. STA Music_Cur3 F. g- p/ n8 E, A0 z

  293. 7 z' o- q7 M7 n  l. h2 c. @; Q9 f
  294. JSR Show_Music_Text
    6 |' O4 ]5 m1 p, |

  295. . p( X2 c2 n* d! ]
  296. .IF SOUND_BAR_SHOW_ENABLE
    3 ?, R4 t8 J' ?' o8 r7 B
  297. JSR Sound_Bar_Text_Set* ?$ G8 r- [3 E
  298. .ENDIF
    7 x! R4 v3 ^, z% O
  299. + g3 {" \+ Q. W7 f: S
  300. .IF Track_Name_Pos2 B& \% T6 F8 K  O9 C1 m$ R
  301. JSR Show_Track_Info
    / w# K* f3 p  w! ^& `, G! m4 x. `
  302. .ENDIF
    % I, L3 W/ S+ h/ M4 e
  303. 0 R) z  S# r$ l* J3 @5 I
  304. JSR PPU_Proc
    8 s" s3 P* Z6 {9 I5 d

  305. / r7 A1 R% j1 f" h% H! N6 a6 p. T
  306. LDA #$0E
    . Y+ }+ L& \" {) p6 @
  307. STA Screen_State# R, T$ [& s. m$ N0 s1 u: h2 h
  308. 9 T7 }: |% p  a% \9 l
  309. JSR Sund_Bank_Init8 U6 F- E5 C5 k* ~: C& `
  310. 0 U7 i# l- F# D) @% _- z+ e
  311. JSR Music_Show
    2 l; z+ s. ^8 z5 n
  312. JSR Time_Show
    $ S. |8 N- P2 e/ y
  313. JSR Music_Stata_Show, N( x0 T$ \' B. d3 L8 B
  314. JSR Time_Delay' P3 J" c% `( C& g

  315. ! O( F/ J4 d, @$ v

  316. # o4 h+ y( G+ e) \" \9 G0 w
  317. LDA #$80
    * Z+ z$ ?5 d* J0 I: n
  318. STA PPU_CTRL- f! v6 ?# w1 D. ?5 q# F9 N
  319. 7 x: L( A/ o. R  R
  320. LDA #$204 x; Q6 d. v4 `* _/ M% U, x, z
  321. STA Time_Wait_Cnt* p/ d2 V. g& ~7 _) ^; O

  322. ' p# N; h% o& B: z5 l* n
  323. Wait_Time_Over
    $ V  \4 u- T4 l
  324. LDA Time_Wait_Cnt
    4 `3 @( P  L7 d5 Z# y
  325. BNE Wait_Time_Over
    / T1 R; ^; c, N, @6 D
  326. 3 J% d. U* i$ E0 Q* ^; c* q# }
  327. LDA #$1F
    4 }2 }3 I/ N+ \( x+ G0 L; P
  328. STA APU_STATUS6 C2 ?& H, f- Z' `% t' v/ {4 L
  329. LDA Music_Cur
    8 O5 S. \5 V1 o/ \
  330. JSR Sound_Init
    8 r/ C+ ^& |: K% N& j
  331. , N4 e9 q: [; |, A
  332. JMP MainLoop
    : E) X" u4 ~5 I  ?' @1 g+ N
  333. : V9 r# b7 z' W# \
  334. ;==============================" Q: e, P1 w* ~
  335. Time_Delay;延时等待
    7 j% i3 l/ L% V/ |4 p
  336. LDA PPU_STATUS
    & c4 ], T$ i3 n# S+ L  L9 T
  337. BPL Time_Delay
    - S. I) Z4 v% }! K5 {, D, D5 K4 @- \
  338. RTS+ W1 Z  e" K: a: ]8 x: ?& |& f8 U' Q6 ?
  339. # [- h; M+ x+ ]) V: A
  340. ;==============================
    . z# c: D3 x: p4 q; ^
  341. VramInit;初始化图形内存' \, {* P% y$ G
  342. LDA #CHR_DATA_BANK
    ' ~/ y7 h' b" {+ |; V
  343. JSR SwitchBankA000
    6 n7 o8 K& k) P! ]/ {0 c5 e' g% H
  344. LDA #LOW(CHR_DATA_ADDR)
    $ E/ R2 ~& u' u
  345. STA <Data_L% y9 l( i3 G8 Z# P% b. k: w
  346. LDA #HIGH(CHR_DATA_ADDR)
    4 p! S6 Z3 q9 W, l) l
  347. STA <Data_H
    ; K1 s! }$ a* [* j1 ^% w
  348. LDY #$00
    / W, |# y0 `3 |
  349. LDX #$20- b8 Y  Q7 f- R7 T
  350. LDA #$00
      k) {* R- K; i5 \: v* R3 w
  351. STA PPU_ADDRESS$ K, n. b0 I! y4 [1 \1 d3 X
  352. STA PPU_ADDRESS4 q4 k3 W2 N/ |# X1 M% g
  353. VramInitWrite. G: n9 k7 v1 F* o
  354. LDA [Data_L],Y2 Y' {4 x% r. A" V+ g% a( o5 j
  355. STA PPU_DATA0 [- j3 k4 _  M4 I* T
  356. INY% o2 t3 F7 |' K6 h+ H' b
  357. BNE VramInitWrite
    / S+ @. R# B; m6 c0 A  ]( F* w
  358. INC Data_H4 t. L, D# Q- \7 ?: h2 O; c
  359. DEX
    ! r& V3 Y# v4 \9 X
  360. BNE VramInitWrite5 V1 X% j7 P. a' I
  361. RTS) c& E9 w! w" f( z7 j; V/ h9 V9 h& A

  362. 6 c" ~! [. W; [6 J5 E
  363. ;==============================
    4 @0 D- d7 T$ {$ }( }0 ~! W
  364. RAM_Clear;RAM清除
    ! T0 J8 `: i# U+ Y1 o) W5 Z: E
  365. LDX #$00
    + n0 C/ e+ K8 v2 ]
  366. LDA #$00
    3 ?$ J2 v' R: a& [) v6 s# M0 M+ m
  367. RAM_Clear_1
    $ z* E$ J/ g' N- K# G  Z
  368. STA RAM_Cln_1,X
    9 t: R0 L$ k3 L" q
  369. INX
    & Q5 L% G0 V  F5 z! V4 A
  370. CPX #RAM_Cln_1_Size
    4 J* i- s! a2 S5 ?+ o4 g
  371. BNE RAM_Clear_1
    9 P" q1 E; z* y2 @8 n
  372. LDX #$00
    2 y( v* U9 P% u4 _
  373. RAM_Clear_2
    ) m: t; d+ w  Y
  374. STA RAM_Cln_2,X% C8 k" u; `# ^
  375. INX) [) S5 `- e  v; r; B
  376. CPX #RAM_Cln_2_Size2 {% a4 o6 I7 p5 r% K; B
  377. BNE RAM_Clear_2
    " p: F* S/ B9 E- |1 M
  378. LDX #$00
    : f2 N7 ]& V" ^0 K
  379. RAM_Clear_3
    : T/ W! i! P8 Q" P
  380. STA RAM_Cln_3,X
    0 U: z: P% Z! v7 M
  381. INX" a. E2 i- u% b2 V5 j2 p) J
  382. CPX #RAM_Cln_3_Size% s9 j* w& s! O. v
  383. BNE RAM_Clear_3- ~* k/ k3 z" b0 m5 q7 d9 K
  384. RTS
    ) }! c0 G3 e6 ^2 Y: d
  385. + ^2 Q2 t# Z1 a7 L" o  @6 p
  386. ;==============================
    2 o4 q+ A* M# Z8 }" ?! c
  387. ;音乐切换
    % s9 s4 E: A( H! ^* w. ~6 S, }
  388. Music_Switch
    - e5 ~. D. X- m2 U
  389. JSR Key_Proc: u2 Q4 h; _/ z5 u3 @
  390. LDA Key_Once
    + V* X- I. k9 R9 d% E6 ]
  391. CMP #$100 U- v4 S+ O8 e$ P& k2 }# C
  392. BNE Music_Start_SongStop
    ) H, ~$ D" v/ C1 F
  393. JSR Music_ReSet4 a% A8 I" Q7 E" H1 W2 Y

  394. + P8 [' B5 N! u
  395. ;音乐停止
    5 M) `4 N  _- L& [4 _, ?
  396. Music_Start_SongStop$ \6 A2 _- D. G. t$ j/ {! a# p
  397. LDA Key_Once9 X9 ]7 H  r) x$ t3 r' M- s( r! r
  398. CMP #$20( i6 U4 G+ M  e6 @% e- B
  399. BNE Music_arrow, c& r6 v! n7 I
  400. LDA #$015 H! H& O- D4 v& J- S% l6 Z
  401. STA Music_State
    + E1 h) d0 F. P4 N" c3 @: C" ~
  402. JSR Music_Bar_ReSet
    6 H% y6 |6 ~; d1 k" \
  403. JSR Time_ReSet8 F" N  q2 z9 S* N
  404. JSR RAM_Clear: `$ l0 X6 v+ V, N" u3 b
  405. JSR Sound_Clear/ }# n. f' V9 d, h0 k+ f; y
  406. JSR Music_Stata_Show* i/ x+ K$ B9 f
  407. Music_arrow' O; k- ?" z$ u0 }! `! P
  408. LDA Key_Once
    1 o  p6 R4 U3 P; Y
  409. AND #$CF  q" ^! ]( n) V# ^. D8 I0 |8 \, A7 `
  410. BEQ Music_Switch_End
    5 ^- E$ Z" U  W* [7 }% Q1 u' U
  411. JSR Music_Number% S% \& {( e+ v8 A8 Z3 k1 c
  412. JSR Music_ReSet
    2 z4 z* q/ `. v' i4 @
  413. JSR Music_Show
    ) j, \! M3 A( R9 X8 O" J
  414. Music_Switch_End
    ' E9 j7 z$ F. `& S7 x" Z' Q
  415. RTS  i# Y0 s, `, V9 \- K$ i6 V* d$ m

  416. 9 P. z. n" x  l  y3 n; \
  417. ;==============================* ]( Q* [2 v" k8 q
  418. ;音乐曲目切换4 I4 p+ Z, u: M0 R6 h2 O2 l2 J& W
  419. Music_Number
    * F& l- W0 u% h0 Q2 M/ D: L: Q
  420. LDA Music_Cur5 l. v* u6 p. p4 w) l' J$ o0 G  I
  421. STA Music_Last
    ! D: L0 y, X# n3 w6 k3 d8 H" z
  422. Music_Decrease; s7 X+ }4 N" P9 |* Q
  423. LDA Key_Once
    4 C. p" n( b/ _( C& |
  424. AND #$42+ L# q9 a% ~9 }
  425. BEQ Music_Increase6 U- [+ t. Y* ?# g
  426. LDA Music_Cur/ e; B% Q3 ~/ M. N! v
  427. BEQ Music_Increase# P' W0 ]( ]0 F
  428. DEC Music_Cur5 ?( K+ I6 n! g3 j8 }
  429. Music_Increase
    0 v+ e3 Q8 @4 D  s; ~6 H0 F
  430. LDA Key_Once
    4 I% }- L- s/ V8 ~
  431. AND #$81" N2 S; V6 h  m- h' x& M1 f
  432. BEQ Music_Decrease_10& ?) p" Y+ H; e
  433. LDA Music_Cur' N0 {! B! x+ H( @; J
  434. CMP #Music_Song_Total-01
    2 T8 C9 z' I/ E( `
  435. BCS Music_Decrease_10% i2 G2 l* T' I3 |: r& _
  436. INC Music_Cur
    / t9 j* o: X1 P- Q% S7 v; i5 K
  437. Music_Decrease_10) R; [( Z/ _3 [8 t3 \
  438. LDA Key_Once& z+ ]* P; Q/ L4 I* A) [! o+ t
  439. CMP #$04
    : C% N( E9 s. f5 d4 P- Z
  440. BNE Music_Increase_10
    * r, E5 s3 k' {! }) r0 |2 I
  441. LDA Music_Cur
    ; Z- a1 M) M& r8 M
  442. CMP #10$ |% R- a8 {5 m' {, l& u4 e
  443. BCC Music_Start_Song_Min
    5 x. Y: F/ p1 m; p
  444. LDA Music_Cur  K1 L; T; a8 x8 W$ {. B
  445. SEC
    5 o6 N, D+ J, N: ?! d
  446. SBC #10. q& j& E2 f8 ~- T) v3 c
  447. STA Music_Cur# i- R' e& L# f9 L( v& Z
  448. LDA #$00
    , x4 X7 c- S9 |. f5 O
  449. BEQ Music_Increase_10; k- }" ?) H. J; Z* V
  450. Music_Start_Song_Min
    6 D( H, l0 b; m' B- d% N% Q
  451. LDA #$00
    % U: ]# [& Z6 ]0 G" M* m' ]* c+ Q  o
  452. STA Music_Cur/ K" e1 ~* S5 |% O7 r% \
  453. Music_Increase_10
    7 g( |: u3 S( k! E
  454. LDA Key_Once' J$ e' ]/ N& r
  455. CMP #$08
    ) E+ a- c# o- ~# S( V  A6 S9 m
  456. BNE Music_Number_End
    " J5 L- y0 l4 T4 A" @2 h6 c' R
  457. LDA Music_Cur( V" v  [) `) w- K2 P/ N+ o9 q
  458. CLC9 T, I; ^+ S7 L# g  l* @8 F8 S1 z
  459. ADC #10
    4 A8 L! f7 R' Y. g
  460. CMP #Music_Song_Total-015 D  T: z# F, A5 U% s
  461. BCS Music_Start_Song_Max
    4 ^* s) x, |3 i8 v! v
  462. STA Music_Cur
    ( j/ A8 K6 m% y( G6 @
  463. LDA #00
    7 S' m: f1 o+ O: I7 R9 [  a
  464. BEQ Music_Number_End+ j" u& w# U8 o$ X$ K
  465. Music_Start_Song_Max
    # `' N- e. E* G) z  n% p6 d- V
  466. LDA #Music_Song_Total-01
    # q" k5 l+ f( u% L2 Y% T
  467. STA Music_Cur2 x8 E3 M& |% A1 _
  468. Music_Number_End6 M  d9 C, U. @
  469. RTS! ~1 [6 _/ W1 L
  470. $ r# P1 z5 `# l/ D  p# F
  471. ;==============================+ s% X) @7 r; b3 K) i
  472. ;音乐重设' `# v, q1 M2 M7 R9 Y( L7 {
  473. Music_ReSet
    % k& k1 x3 @( E/ t9 d7 }0 q- p! g
  474. JSR RAM_Clear
    $ {' @5 N- I; B: N9 K  q; p- a
  475. JSR Sound_Clear
    1 B; I# h4 f$ B: }
  476. LDA #$1F
    ( r) ]# _. ^" N) p2 P, M5 h
  477. STA APU_STATUS+ L: k; g, P9 C- }! x
  478. LDA Music_Cur
    / g7 {# N# o% I9 [+ }
  479. JSR Sound_Init
      M$ x1 Z2 K# y
  480. RTS
    - G5 M% n$ \. @8 V

  481.   G" ~$ J5 I8 H  j! b: J/ ^  `
  482. ;==============================
    & g* Q3 G1 \1 |1 m$ ?, p
  483. ;音乐端口清除
    ' d& o/ i1 h; }4 d9 B4 b5 [" }
  484. Sound_Clear' v/ Q+ x1 B* g8 m+ m6 j; c# F
  485. LDA #$00
    * j8 |8 L/ L+ a2 w
  486. STA APU_STATUS$ F  A! D, N6 H) V: V: r
  487. LDX #$00& K. U. ?, ~$ F8 j
  488. Sound_Clear_Start
    8 s3 D8 {2 |/ |. l! r, i
  489. STA $4000,X
    1 @7 d0 [* \7 \5 T
  490. INX3 Q- m, }- @  c5 X' d6 Z+ V
  491. CPX #$14
    6 @. C1 `) P2 ^* R/ N8 F6 S5 c
  492. BCC Sound_Clear_Start$ u0 }9 X9 C: j& L7 c2 U( x
  493. RTS: X0 A6 d( y" K( U+ N0 L
  494. % L" q# z. y! P+ V6 A( b! l- n8 K
  495. ;==============================3 E: h, g. D) \! u6 e% l
  496. ;按键处理4 `9 J: P3 y- D$ V
  497. Key_Proc
    ; z- L4 K2 J, C% ~8 ^
  498. JSR Key_Scan
    4 }& }* H1 X8 o# @# F) i: ~( }
  499. LDA Key_Keep. h" C, ?  ^& L# |: o
  500. STA Key_Temp
    + e0 n6 S9 N2 J5 a) E; |* ^2 [
  501. JSR Key_Scan. h7 y, N+ l6 U5 c+ o. Z) H4 ]; W
  502. LDA Key_Keep4 V. X6 p& |/ M$ Y  T
  503. CMP Key_Temp
    - {; n% _( [0 V! @( I1 M% B2 H2 y/ e
  504. BEQ Key_Get_Once
    0 C3 |$ v! V4 G2 T/ t5 W2 Y
  505. LDA Key_Kemp1 Q% X0 V$ f# e1 }2 V8 j! ^
  506. STA Key_Keep8 T  {: ~" n1 x& u3 C3 I
  507. Key_Get_Once6 q# E8 F4 j2 j2 W6 q
  508. TAY" J; y) I% }( C2 A$ N
  509. EOR Key_Kemp3 z2 n  B" l7 w. H5 u
  510. AND Key_Keep5 m3 |8 }9 O( S3 \
  511. STA Key_Once2 g* H( g& v) ~4 F7 d
  512. STY Key_Kemp
    5 b! {. G9 K/ F
  513. RTS& j& D, j" F( Q; C) f3 J
  514. ;------------------------------- w% ?+ N+ a2 }; F- x( s0 v$ P
  515. ;按键扫描
    $ o8 p7 J  v: q0 r% Z9 A) A( G6 y
  516. Key_Scan) p$ d- k% \, f4 I1 h  f/ y7 P
  517. LDX #$01
    , _! ^- h0 ]4 i4 Z' J, n4 j
  518. STX JOY1_FRAME8 ^& H9 t6 Q2 j' t' b' d0 k( [( q/ u
  519. DEX
    % b1 A! a- s5 T. |. Y1 j2 N
  520. STX JOY1_FRAME
    1 h  |/ V4 W" d
  521. LDX #$089 a  P* H: K9 w! m, ^
  522. Key_Value
    9 j; {4 n# X1 E0 b' q1 X
  523. LDA JOY1_FRAME
    + b2 @  V4 g; b# U* q4 h0 E. [
  524. STA Key_Getv0 }. C0 ~2 w* ?
  525. LSR A
    6 M- j4 C( ?5 K
  526. ORA Key_Getv
    0 Q4 l1 i, C& ^  t( O
  527. LSR A0 D' m# Q# a$ b/ O% ]0 x, p
  528. ROL Key_Keep
    , D* E7 Q/ D* M0 A. n
  529. DEX
    2 b' r; P: Q6 |. B
  530. BNE Key_Value7 e8 K1 n8 V' v4 T/ f( m( _& R0 E
  531. RTS: n! B$ J* `* _( d
  532. 3 D- e7 q9 E1 `1 ^
  533. ;==============================5 t' B5 b3 Q) v* A3 _$ K
  534. .IF SOUND_BAR_SHOW_ENABLE
    5 w  e6 _8 Q+ O- i5 s) x( ~, X6 ]
  535. ;音乐条显示
    ( k! J- I& y+ ?$ ~2 r
  536. Music_Vision
    - y0 N" @' P3 P* V" J$ D
  537. JSR Music_Animation
    ' Y: L7 Y6 X& U  w
  538. JSR PPU_End3 ?. Z( {9 e/ |  `& G7 s# ?
  539. RTS3 Z2 G1 E6 Z  z9 ^
  540. ;------------------------------0 E5 n" m, f+ V& u$ o' G5 W; v
  541. ;音乐条显示处理
    8 s( n$ x. c1 |5 |6 @6 {
  542. Music_Animation; W/ h6 n0 u9 N- n! K2 q
  543. LDX PPU_Cur4 h; k, \& H% d8 [: S" [
  544. LDA #Mode_Line
    " X: {: Z) M. e$ m
  545. STA PPU_Addr,X
    8 l! U+ W# m$ x3 u
  546. INX
    $ \( D& `+ ~/ q; A$ L! D
  547. LDA #HIGH(Sound_Bar_Pos)1 M0 K2 r: s3 P3 g6 {. Z5 A! a! m! |
  548. STA PPU_Addr,X
    0 a0 |5 ]3 F) G
  549. INX
    5 \1 @- g2 B# `  w* U/ l6 ~
  550. LDA #LOW(Sound_Bar_Pos)
    8 q4 n7 J1 I5 D: f  w
  551. STA PPU_Addr,X1 {. d: N9 R0 ?, G& S+ ~, E
  552. INX
    4 ]. C1 I7 y. F3 x' _8 [
  553. LDA Sound_Bar
    9 o* J/ c) o$ {. m( l
  554. JSR Volume_Convert
    % s/ h7 u* j; M, ]+ M3 i& d" P
  555. JSR PPU_Return1 {7 |1 H, j; v$ X
  556. LDA Sound_Bar+$4
    ' V3 h+ t" T( u, G
  557. JSR Volume_Convert
    3 x, G/ V/ @; ~0 a
  558. JSR PPU_Return
    6 b  u! e* ~* c
  559. LDA Sound_Bar+$8
    ! G7 C( \( Y" f% r
  560. JSR Volume_Convert_Ex
    ' w4 a$ ]- Y4 D# K
  561. JSR PPU_Return
    1 s/ _9 c( G# M) G1 u8 f/ v% d2 t/ M
  562. LDA Sound_Bar+$C" m' F1 X6 E: P0 M/ `$ X
  563. JSR Volume_Convert
      |- p9 R5 S5 S- K
  564. JSR PPU_Return
    ' G0 a; ?1 Q7 j' {" Y4 j9 V
  565. LDY #$10
    : |+ e3 ]3 U9 D) m
  566. LDA APU_STATUS3 L- ], S4 Y7 b. Y0 o) O
  567. AND #$10
    % G- Y3 g2 f) w/ ]7 l0 h
  568. BNE Volume_Count! Y! X9 d7 Q: E; t1 r
  569. LDY #$00" o, A1 N  p* s% E( @
  570. BEQ Volume_Count
    6 R7 O. f; A' X% a% c5 l( e2 Z* b
  571. ;------------------------------
    # P" l4 U& H4 R( G4 w8 A: z
  572. ;音乐条处理
    " C* ^# T0 X, e5 q, M
  573. Volume_Convert_Ex1 \6 n0 p: W% d1 o
  574. AND #$1F1 u' ]+ C5 [! m8 e* [1 K' z
  575. TAY
    " n5 {# U) J0 B! o, T
  576. BNE Volume_Count5 ~- z' S; s. W$ a
  577. Volume_Convert
    ; O! I% g2 e4 l5 i9 U) B, S6 a
  578. AND #$0F
    . _. B" ^2 I4 I- ^; C7 x# y+ V6 j
  579. TAY) z$ V0 d# X$ r4 H- v* D
  580. Volume_Count
    9 S# q/ G; W: ]; B$ R$ \
  581. LDA #$080 B5 q$ F, d9 J
  582. STA Sound_Bar_Cnt  y4 q! H: I0 E0 i
  583. Volume_FILL4 ]+ b9 \& S3 D
  584. DEY
    9 n$ }' o2 a% d+ R9 Q
  585. BEQ Volume_Half. ?* a% C- i8 p" u3 q- r
  586. BMI Volume_Empty
    ; \3 |: J4 `/ M/ V) i% @8 e
  587. DEY
    : J4 O. V& I% w3 s9 d
  588. Volume_Full( y( Z7 C$ ]5 g0 ^  O
  589. LDA #$16$ [5 l  R: [. Y6 Q
  590. BNE Volume_PPU
    2 J) e0 c- V8 q% s7 C" u
  591. Volume_Half
    ; z8 c% _% j& N0 P: k( r& ]1 o' ^
  592. LDA #$155 [0 {8 Q3 G: b- P1 S' p
  593. BNE Volume_PPU
    / C" G0 N* U! h+ K
  594. Volume_Empty
    " }7 @; m) U: z2 X  f
  595. LDA #$14
    9 \0 W9 h7 g+ k
  596. Volume_PPU
      h; m4 E2 j8 l
  597. STA PPU_Addr,X
      e. A7 F( b( l( F
  598. INX, e$ B0 F  w8 X. B' }/ d& Z
  599. DEC Sound_Bar_Cnt
    : C9 P' q, `( m7 U) ]2 Q
  600. BNE Volume_FILL
    ' T3 p; H. S- v9 `, V
  601. RTS/ J& r8 t: U' w+ l' y
  602. ' e8 e& P9 q0 M2 [& [
  603. .ENDIF3 E. a/ y1 [4 e; d7 h. n! R

  604. 6 m* q; r; H; ^* L$ L
  605. ;==============================
    " e7 ?* o( k' h0 C7 P! a
  606. PPU_Addr_Set;PPU行开始& d" e4 R$ |1 s3 |2 I0 c0 k
  607. LDX PPU_Cur
    8 Y# ]! n& T$ |7 V
  608. LDA #Mode_Line, J, `8 K! p- M5 X# {
  609. STA PPU_Addr,X  p5 y% T" L" G3 E1 V/ I" P
  610. INX
      T: b6 h4 S& Z, O+ i8 P
  611. RTS' S" u7 j0 N2 Y/ a
  612. 0 [( b( {# z& @* L5 r% o2 U1 b! ^
  613. PPU_Return;PPU转行
    # [! ?$ ~3 n0 f6 u) U0 @+ R$ ^7 f
  614. LDA #Flag_Over- D4 X, ]6 C& {, {( \
  615. STA PPU_Addr,X# ?  k$ z9 {0 o- L. [( @
  616. INX8 W& P$ G* |9 [0 v& n0 r/ j. z8 F
  617. LDA #Mode_Return/ z& t5 }# ~0 q- V1 e) c
  618. STA PPU_Addr,X, o9 T! L0 i) C) K
  619. INX) `* i5 d& E7 z% C2 [8 W
  620. RTS
    9 w5 N& @2 ?6 m2 g
  621. : Y- f' P7 F, v
  622. ;------------------------------2 ^% G* B& A6 J2 N+ H0 c
  623. PPU_End;PPU结束3 n. Q8 J! v- B5 \/ L3 N1 L
  624. LDA #Flag_Over
    # l0 x3 f- a& t9 L$ _
  625. STA PPU_Addr,X& H- V. w4 \7 b  N) y! _
  626. INX) t  ~8 _% b) `% ~
  627. STX PPU_Cur
    . s: c9 z6 \- Y0 X! C
  628. RTS, B2 |6 Y8 I5 Q( E, H6 s! ^, _, @
  629. ;==============================
    $ f) `9 w, B4 h7 V  p3 B. q( ^
  630. Mode_Line     = $FD    ;新起行模式% h5 o; @0 O  A
  631. Mode_Return   = $FE    ;转下行模式$ _# _5 }2 y) Q. G4 t7 t2 d
  632. Mode_Clear    = $FC    ;行清除* [/ s4 a2 T- J. }! y* a9 c
  633. Mode_CntLine  = $FB    ;行计数写入0 j$ M$ s( l  w/ m
  634. Flag_Over     = $FF    ;行结束标志  g' \' ^' G- ^! T: ^4 d
  635. 2 l- m% K! u( r/ f( g9 R* ]
  636. ;------------------------------
    ' Q( v1 z; p. D7 h( w
  637. ;PPU处理( }8 d3 j/ @4 Y6 N' u3 E/ _
  638. PPU_Proc( c  _7 T  f7 g4 l& ^- m
  639. LDX PPU_Cur( M: L9 ^$ C$ y6 C) g# C
  640. LDA #$005 a* c8 M* _& o! i
  641. STA PPU_Cur
    * Y# h' [7 ?- K: ~
  642. STA PPU_Addr,X% N' m( Q) ~+ \. h3 E! X* h  r
  643. LDA PPU_Addr/ ^5 n6 d! q& J, u; x) O
  644. BNE PPU_Proc_Beg6 _* v; {4 a4 ~3 j! S6 w
  645. PPU_Proc_Ret! [# Z/ C( \* u& x' a; W; R4 o
  646. RTS
    % _/ Q7 _3 Z3 E3 D
  647. ;------------------------------
    ) X8 j1 @$ I& L! ?& ~
  648. PPU_Proc_Beg  ;处理开始6 F! a$ r: B! u6 b3 c" S2 I+ n
  649. LDX #$00
    , B- g. ~4 N! q9 S: _
  650. STX PPU_MASK
    7 }" a* ?# ^3 L/ r- V
  651. ;------------------------------
    9 v  k0 H, J( x8 S
  652. PPU_Mode_Select  ;模式选择
    - M! X% Y4 P# S: A7 s
  653. LDA PPU_Addr,X4 s( Y4 D0 t8 l) `. @
  654. CMP #Mode_Line/ }$ M& q; v0 T& x) }+ M
  655. BEQ PPU_Mode_Newline
    ! B% r( @# l& @& P+ J
  656. CMP #Mode_Return0 i$ C! E8 R3 Y0 G4 q' J
  657. BEQ PPU_Mode_Return
    & ]% D+ R3 m- {* S+ z
  658. CMP #Mode_Clear
    4 `! F4 Z( u" \4 w: V: C6 e3 F3 B
  659. BEQ PPU_Proc_Clear
    3 ], r3 U  [  D( c
  660. CMP #Mode_CntLine
    ! t' G# z+ p" `& y6 I( x
  661. BEQ PPU_Proc_Cnt_Line
    4 m" p5 j# W( X
  662. RTS
    " _6 v0 C0 L3 o6 z, ?, d3 ?1 C/ b* I+ c
  663. ;------------------------------
    0 H  H* A: D; Z
  664. PPU_Mode_Return  ;转下行模式: j  T; a- }3 T1 b$ G; \
  665. LDA PPU_Addr_L
    " X; R2 o. Z/ ~% x. ?6 |- O) V
  666. CLC
    & j# l% i; B4 Y+ L( N1 l
  667. ADC #$20
    . o' m* B1 V  K& T; T. K, `# ?! s' L5 r
  668. STA PPU_Addr_L
    6 f) l5 @- c" m: s
  669. BCC PPU_Return_End+ W# Z7 ?% e" W0 x, V8 |
  670. INC PPU_Addr_H
    8 @2 ?  i% [# N8 P8 D. T; ?
  671. PPU_Return_End
    # D, e( t6 K8 a8 l
  672. JMP PPU_Set_Increaser
    + c& y; y, I; K' O% y* O/ Y
  673. ;------------------------------2 t' X/ k2 {* E1 S6 _7 d; {
  674. PPU_Mode_Newline  ;新起行模式7 x* C% Y3 j2 c
  675. INX) f0 J6 y) z# j+ t. B
  676. LDA PPU_Addr,X4 _0 T$ A! _9 \$ K
  677. STA PPU_Addr_H
    2 h- R0 b) H6 }. S# ^3 b, ]. k& E+ l
  678. INX
    ' E; S- W; F* Q1 I, Z2 K
  679. LDA PPU_Addr,X
    7 l- ?% T' \9 N1 G& e
  680. STA PPU_Addr_L
      C+ B% `4 ~9 f+ G- q
  681. ;------------------------------& \9 y) E- X- o' k$ ~/ x
  682. PPU_Set_Increaser   ;设置写入地址
    0 R5 x+ e' Y) i+ c+ |
  683. LDA PPU_Addr_H
    8 @2 P- ]( D6 ^% O
  684. STA PPU_ADDRESS( W6 M5 q3 c; I6 u7 t) z
  685. LDA PPU_Addr_L$ b) F" |6 O0 i$ C9 b9 T/ C
  686. STA PPU_ADDRESS
    , w* F2 m' O% j3 q' v. r9 G' G
  687. ;------------------------------
    - p' J" s2 N  X" U! m4 X& O+ x/ ]
  688. PPU_Write   ;写入数据; E* m2 y$ Y0 a( R  H" i+ c
  689. INX- }6 t& T; X$ _8 G0 r) g  ]
  690. LDA PPU_Addr,X  e! Q$ D9 ?. b; [( H
  691. CMP #Flag_Over
    6 `/ c5 c0 p4 O8 Q
  692. BEQ PPU_Proc_End; s3 ]% y: T2 |3 I2 v
  693. STA PPU_DATA% D+ Z+ y) u! U$ W; a0 n* K! U
  694. JMP PPU_Write8 n! r( m% M0 c+ ~( M* y- m
  695. ;------------------------------
    + m/ p0 ?# |4 R; ^! l3 {$ p% O
  696. PPU_Proc_End  ;单行写入结束
    7 \' r" U  f1 @
  697. INX
    . O7 t; s3 v8 s$ k4 v% D0 W
  698. LDA PPU_Addr,X
    1 K. D* d/ |& k; j' Q! ~
  699. BNE PPU_Mode_Select
    3 s3 {9 ^8 A! R
  700. STA PPU_Addr1 r- o9 C) n' N( v4 c
  701. JSR Update_Palette_Color7 W/ I! v# V5 Q) C' q, a7 F+ c% Z
  702. LDA #$00
    2 D3 u1 l( z2 ?) J% A0 j" I
  703. STA PPU_ADDRESS
    4 _6 w% b/ K) i$ `  V5 v
  704. STA PPU_ADDRESS9 R$ [6 R% l; k. O6 J8 h' n
  705. STA Show_Track_Name1 T4 w! W" @" T' |) \
  706. LDA #Scroll_X* n2 ~3 E; A' Z9 g, w* r
  707. STA PPU_SCROLL0 U  ?! V8 Z& q3 b* \9 }
  708. LDA #Scroll_Y+ p  U+ Z3 t/ u
  709. STA PPU_SCROLL' }# y2 O- |% h- U  _
  710. LDA Screen_State( y1 r3 S' N8 A$ k/ _+ U, k
  711. STA PPU_MASK" A$ x5 U' n0 \
  712. RTS
    8 O+ y  ^4 f' |/ P

  713. / \7 u. F( Z" Q" {* d
  714. PPU_Proc_Clear9 t$ S) u" a7 i. {" e2 r
  715. INX& {3 m$ g+ Y1 g! c0 C. [
  716. LDA PPU_Addr,X( G9 w0 K4 J0 i) f
  717. STA PPU_ADDRESS; P) A$ s8 L, L, Z* j0 o
  718. INX
    " z, ~# p: l8 |& }" a
  719. LDA PPU_Addr,X
    ' U, ?4 |5 u6 k. y5 L1 p8 k9 p
  720. STA PPU_ADDRESS: q( W: d& ^( u* J4 P- z
  721. INX
    1 X) A" {% E+ z$ Q( Y/ G
  722. LDY PPU_Addr,X5 H! `+ ~+ B  b( x5 @. ?
  723. LDA #$00
    # G4 y* j2 ]; M4 k8 H$ {$ y
  724. PPU_Proc_Clear_Write2 }$ q% h" I3 J6 w# g; [3 T
  725. STA PPU_DATA% H/ v) i( j1 ?) o$ [+ k. S
  726. DEY# q/ t# y' f; C+ v! l
  727. BNE PPU_Proc_Clear_Write2 {" |- L8 `7 z5 i$ S
  728. JMP PPU_Proc_End
    . A% \' p! T$ H" s
  729.   K! z9 G3 j' F  a1 g( M
  730. PPU_Proc_Cnt_Line
    ( s" @# l$ i( ~  y4 x+ n* I* L
  731. INX3 k7 y! Q6 [2 I6 X! M# z+ h0 A; n
  732. LDA PPU_Addr,X$ j& o5 W' g+ L" k1 R
  733. STA PPU_ADDRESS
    % C: c2 n2 J4 i; R
  734. INX
    ) e6 m% q4 i+ ^
  735. LDA PPU_Addr,X+ V+ W& D3 E" M
  736. STA PPU_ADDRESS
    0 b! v9 h7 t+ r* X9 w1 C
  737. INX
    " `3 P1 B* q, h9 ~$ m
  738. LDY PPU_Addr,X
    / c. I5 ?$ o/ z4 O2 z) }" W
  739. PPU_Proc_Cnt_Line_Write8 Z. ]6 Z+ g: g& e9 x: F% |2 t
  740. INX
    $ B2 R" |! X/ |- p' \
  741. LDA PPU_Addr,X0 ~5 O" f  e' J" T, @9 ^4 G2 q) x
  742. STA PPU_DATA
    ) W# q8 q( U" S6 O' x; S
  743. DEY7 W, Z0 M8 [% J& J
  744. BNE PPU_Proc_Cnt_Line_Write8 m8 z( N* `5 ~
  745. JMP PPU_Proc_End' x, V: A/ J# N) Q

  746. 4 a$ [8 v; J$ Y
  747. ;==============================* ]" @8 C& G( J4 O. P
  748. HEX_To_Dec;十六进制转十进制
    ! D3 |1 J7 f' \: R
  749. STA HEX_Data0 \  A; Q' H& Z
  750. PHA; q3 k9 N# h6 w3 P7 |' v
  751. TXA$ X. b& j' a, C0 C: h0 S- E
  752. PHA2 E0 [9 k0 Z" ^/ q6 M# V8 F* b4 ?
  753. LDX #$00
    0 g  t5 M9 ?/ ~  r
  754. LDA #$00
    : u. Z- p7 G9 K0 E
  755. HEX_Cln
    . m! B( {$ L2 Y2 N0 |
  756. STA DEC_H,X) H" S7 X5 C# E6 y/ j4 N+ b
  757. INX
    7 {. k  i; k8 y# a: A
  758. CPX #$03
    + A% v* @! k: j2 S$ F6 ]) A" v
  759. BCC HEX_Cln( t) ~/ [; i: |
  760. LDA HEX_Data6 ~; T/ w+ A/ C& Y
  761. ;------------------------------1 `1 n: d7 ?* n6 r' P: d+ ~
  762. HEX_100
    0 u, Y* F& J* D6 {
  763. CMP #1004 g+ s  a6 ~- W1 K) S
  764. BCC HEX_10: T- P/ V+ D. ]1 m$ G
  765. SEC
    . P6 y! b* ^: V9 I3 q* I% ?/ Z9 a
  766. SBC #1002 X% p! G% _- x& R! _/ G: z
  767. INC DEC_H! B3 O* ~0 r5 S! G
  768. BNE HEX_100
    ! y) R- O9 v2 i& b+ F- M
  769. ;------------------------------; x. i; J* T3 U1 @* C1 |% u( I
  770. HEX_10
    8 y5 |6 L; N$ O1 F! Z- N
  771. CMP #10: G! ]2 `% B/ Z4 A  `3 O! a
  772. BCC HEX_1
    ( z% l# m0 c1 P$ n% Z
  773. SEC( c# B7 G0 }" R
  774. SBC #10
    * E& J; Q2 }0 A* A& N' }
  775. INC DEC_T
    8 K! g- [$ ]) P/ T1 g
  776. BNE HEX_10
    - o4 F& m& l" s# W: P) ?7 s& I
  777. ;------------------------------* x: G  i- Q: R/ d6 s) l( F. w
  778. HEX_1
    " P; z* r8 l2 w, S5 m* J
  779. STA DEC_L
    , ?7 s# u" |" K/ l' p. `1 J) `  [
  780. PLA0 u1 y# c% c6 f& i8 H9 {
  781. TAX2 a% R/ l+ W' \7 X
  782. PLA
    3 i/ S0 b7 `8 v: N/ R1 `
  783. RTS
    : l# @$ t8 G6 v

  784. % _7 x& f6 k4 ^. _
  785. ;==============================1 a1 [( [3 ]8 n9 x
  786. ;音乐曲目显示- V0 ]: a4 F: i" K5 N& _
  787. Music_Show% M# a1 s# {' D, \% m
  788. LDA Music_Cur
    % U3 |$ G$ n! V: i8 ?; Q
  789. CLC
    # M5 A- T! @1 V/ D/ M8 M
  790. ADC #$01
    # |5 V( ~4 q3 x& b3 T0 C( C& G3 C! \: w
  791. JSR HEX_To_Dec
    & {0 }) U- z# @  k
  792. LDX PPU_Cur$ T) T6 x; h/ k2 i! c
  793. LDA #$FD& o5 O  l2 F9 t2 @2 u% {
  794. STA PPU_Addr,X
    $ Q2 o% F" E7 u2 O) }+ i" \
  795. INX0 _* \% H+ j7 w3 Q' `9 Y
  796. LDA #HIGH(Play_Index_Pos)
    & }% w( Z$ U. V( L. J$ r
  797. STA PPU_Addr,X4 s- Z# p2 t* F, E9 F9 s
  798. INX
    . z0 A$ I; b5 ]1 w8 q
  799. LDA #LOW(Play_Index_Pos)
    # J* n! R- |4 s; g  ]1 R5 B
  800. STA PPU_Addr,X
    8 e- q4 S0 |" c
  801. INX9 v1 H' v* p! N" ^6 e1 K7 O

  802. 0 X+ D0 y3 u* [8 @* E3 {$ D
  803. .IF Music_Song_Total > 99
    + S- i8 Y+ e: U7 D8 ~: a. C
  804. LDA DEC_H
    " `; I& e# u3 K) s
  805. ORA #$30
    8 M1 f# C" m$ k( h! m/ e6 D. C
  806. STA PPU_Addr,X
    ' m$ r; M+ V& T; v* b& s  e3 w; z
  807. INX
    6 J6 _& s! T6 `  a/ p9 Q
  808. .ENDIF+ P* k8 l/ w' j

  809. & c! N: O8 t0 Y, `/ F; n  z
  810. .IF Music_Song_Total > 9; }% o4 j+ L4 f: }
  811. LDA DEC_T  w6 z, x; j& p! ^* X" K. V
  812. ORA #$30
    " {# N) i8 i( d' v6 [
  813. STA PPU_Addr,X
    , ~3 I4 G5 h3 o) m
  814. INX7 S" a; {6 |& p! {3 I, X: E
  815. .ENDIF
    8 H  F( Y" q& d7 @; A

  816. " M  b/ y7 [6 P$ ~+ r7 Y  K
  817. LDA DEC_L
    - p% b8 k% X8 a9 N- l( d. W; I0 j3 }
  818. ORA #$30
    7 S- }! c7 e' e- B8 c# i
  819. STA PPU_Addr,X1 W& k3 V: A) F* f% H/ s4 e
  820. INX! b( B/ {9 p( m% N! L

  821. 5 r. H' S' I7 f9 H" {4 _& n
  822. LDA #'/'2 M- I( N( ^# g( j+ ?+ p7 d
  823. STA PPU_Addr,X2 a  |' D/ {7 Z5 w$ ?8 L
  824. INX
    " ]$ c6 C9 \1 q
  825. Music_Show_Total
      U0 }0 B* ?% t8 ]
  826. LDA #Music_Song_Total; g$ j& b/ o0 o
  827. JSR HEX_To_Dec3 {; g$ t* c. t$ d$ d4 i. S

  828. 2 P) O$ a" o9 t! |7 ?
  829. .IF Music_Song_Total > 99
    7 r( f1 J4 q; T/ z% w
  830. LDA DEC_H
    4 L3 t9 u3 c- X% f& O! }4 ^
  831. ORA #$30! U* _3 B$ m5 \4 ?7 A) z) ~
  832. STA PPU_Addr,X* o( H1 v. e5 C5 r& p7 l6 N
  833. INX. h4 K& [- N, H: I7 {" y% p- W! a
  834. .ENDIF. }  G2 W; N! Q4 D1 u, T
  835. " c6 n+ O/ e: X- M( f. q0 ]
  836. .IF Music_Song_Total > 9; i( p4 l# y; I1 @5 {  n; {
  837. LDA DEC_T
    2 }* g# Z0 f1 p. s" ~* c5 F: H
  838. ORA #$30
    $ V7 k5 Z  W9 G- j+ q- k
  839. STA PPU_Addr,X
    0 O" P8 g6 ?) ?, S: u! C" k
  840. INX
      X. {: n+ o: [+ e0 a
  841. .ENDIF
    * c2 C; l; K3 C. \3 d
  842. 5 E+ i3 z9 d7 O1 e
  843. LDA DEC_L
    ' e4 `- J1 N* Y" W
  844. ORA #$305 J+ h4 U! l; B$ N9 L" l  P
  845. STA PPU_Addr,X8 Y1 s, s6 M# b! e
  846. INX: A6 I8 ]' V- B9 q7 [: F
  847. 6 r* Z4 J. ]! I8 t2 c2 M
  848. JSR PPU_End$ I4 D! ]( V5 ^& X$ M
  849. Music_Show_End
    0 P& b2 x7 Y7 ~3 _. S
  850. RTS
    4 \3 ]* @' x; c2 D  A
  851. # V( G8 K1 C8 |" ^! w+ `! W
  852. ;==============================& z) f3 e' n# n. p
  853. Time_Show;播放时间显示" X( J7 m9 s/ [+ N  k' I
  854. JSR PPU_Addr_Set' ^) n: F% D, d: W+ i# R1 R- x
  855. LDA #HIGH(Play_Time_Pos)0 b2 C! [& |1 }4 Q# i% |/ I
  856. STA PPU_Addr,X6 r" o5 c) ^+ @4 O
  857. INX  j1 I3 v! d$ i1 Z* s: Z; m& u& E
  858. LDA #LOW(Play_Time_Pos)9 P  v9 p& z( E; F
  859. STA PPU_Addr,X3 z! F. {# U- M# g( V* a- N
  860. INX
    ; x* L$ }/ B) y2 o/ a4 R
  861. Time_Show_H* b  L: f. J( ^( E4 m; Y' @
  862. LDA Time_H. D, z0 x. x2 _% ]0 z* M
  863. JSR HEX_To_Dec
    - k9 x7 R( P2 ~& T
  864. JSR Time_Digit& c1 i# Q+ M! T1 a) @
  865. LDA #':'
    6 `  S& a$ t' m! Y9 F' k
  866. STA PPU_Addr,X
    " h8 u6 m0 H3 N% l, c, u
  867. INX6 a* W& [4 D9 o' g5 S$ y
  868. Time_Show_M
    & O% s% j: B3 O$ y7 ~8 }3 v
  869. LDA Time_M
    % x/ o1 e5 B+ @6 Y
  870. JSR HEX_To_Dec
    % W3 c3 v) }  E+ O# b
  871. JSR Time_Digit
    5 Y" ^& T- i' ^' z# |+ X
  872. LDA #':'% e& I) D& T! r. d
  873. STA PPU_Addr,X( ~  I& s4 r- N& H9 l
  874. INX
    2 J7 Z: O+ h3 T. p6 V
  875. Time_Show_S
    & h$ W" u! I. Y. @8 h. c
  876. LDA Time_S7 ^$ e, L4 L( {. }4 F  w' @
  877. JSR HEX_To_Dec
    ; X# q) K# X8 R2 H5 o4 \6 S. z2 N
  878. JSR Time_Digit
    : ~: p- M9 P2 B* q+ s. W! ^9 q
  879. JSR PPU_End
      S" V% n. l0 v6 k6 \5 u8 `' P
  880. Time_Show_End
    : m6 w3 k. q1 }0 ?  ]5 l8 ~5 ]' a6 i
  881. RTS
    ) l/ o: C6 U! ]$ j

  882. # s. T/ l' {* a: U  D6 {& c( p
  883. Time_Digit# t. A8 _8 I, u3 q( v: a
  884. LDA DEC_T/ R, b1 i, F% M
  885. ORA #$30
    4 b- r* _6 F: X, L# P* a; y
  886. STA PPU_Addr,X
    % i! w; \5 \6 ^) s/ L- n$ l" M
  887. INX/ _; s) a+ J( ]( \, i1 }$ g% f
  888. LDA DEC_L, _6 B# @4 M5 l" l* u
  889. ORA #$30! `5 l% N& C) J; }7 u, f
  890. STA PPU_Addr,X% ^. J# r2 Z5 e) m# O( x
  891. INX( J$ |5 x  `9 _. E' m
  892. RTS
    - U$ l9 e8 q8 i8 q

  893. 2 m7 L; ?$ ?3 A+ R% ~! v  v
  894. ;==============================9 v( p$ }% ]% q0 r# e5 U
  895. Time_Count;计时- d  O! \/ A* W$ w) O1 t
  896. LDA Music_State
    / X) I/ o+ w7 T* s) k! `
  897. ORA Time_Wait_Cnt$ z" ]$ {0 G& E! y
  898. BNE Time_Count_End) @" ^$ x! h& I$ _7 V
  899. INC Time_Cnt" K/ p$ M8 X! l+ y" _1 f
  900. LDA Time_Cnt3 t) u, x& f6 Y9 Y8 |! a& M
  901. CMP #60
    $ H0 ]9 S$ L- V
  902. BCC Time_Count_End; d# r& M, z/ Z2 c. T3 {
  903. LDA #009 ~0 i$ v8 R2 e/ l9 i. F3 K
  904. STA Time_Cnt
    : i; I2 V3 P6 r, g! N) }, N  ^
  905. INC Time_S
    ! d- z2 }( {+ h9 o9 f: ]2 B) d0 e

  906. 3 g0 l: U- L2 e: N4 u* e, }& W
  907. Time_S_Cnt# x7 |1 K% m* C* a  z
  908. LDA Time_S
    - k0 d4 c4 h. u6 z* G+ V
  909. CMP #60
    1 M+ y7 J3 P  n, y7 X1 E4 K
  910. BCC Time_Count_End& w2 o# r* x. Y7 ?1 G3 x
  911. LDA #00
    9 O, Y8 i' k: N8 h. R4 e$ a
  912. STA Time_S
    8 D$ I6 `9 q. U8 r5 p( \9 H
  913. INC Time_M
    ( N6 [, N% X" a( `9 [3 S1 v
  914. & U1 I3 [5 }  e2 S* `
  915. Time_M_Cnt
    # ~6 t3 e( x/ g% s
  916. LDA Time_M
    / X8 F& g; Q0 I. A! y1 a1 t
  917. CMP #60
    0 k3 \7 I& b  |  T$ H/ b
  918. BCC Time_Count_End
    ; w' h; T  l1 J! W0 D6 P, z/ c
  919. LDA #00
    ; E  v( _6 B; L: o  E  A/ Y
  920. STA Time_M
    9 `, h. z2 W( s
  921. INC Time_H
    % Z: n# N. S) ]

  922. / ]% X- Y% [* Y% N3 ]' U1 P8 M
  923. Time_H_Cnt6 w3 l4 B2 Z+ t, ?- H+ S/ t* @
  924. LDA Time_H" O5 g6 ^, h  g2 a  o0 G; |# _: \
  925. CMP #24
    ! Y: N1 ]$ _5 K
  926. BCC Time_Count_End
    2 {( q3 O3 i7 F5 r
  927. LDA #00. [+ p* d- r! t8 A0 A; ~
  928. STA Time_H5 z" ?' I8 S1 @- m
  929. , {; h6 w6 o- w% y& `) E
  930. Time_Count_End
    " o7 s. s- f* w: h4 h6 F0 t8 X* k- P
  931. RTS
    - p( J4 X# f+ j+ I- J

  932. 1 j& H1 P% H8 I, l
  933. ;==============================8 t2 X8 i* f( r8 G9 X
  934. Time_ReSet;播放时间重置
    ) j& c+ Q' G. P+ D/ P/ Y" A
  935. LDA #$00
      U) S- z8 E& r' j
  936. STA Time_S  |- @. x8 E) V
  937. STA Time_M - H2 K' w, W( y3 U* G
  938. STA Time_H0 q- f* t0 b" G- I' g
  939. STA Time_Cnt1 X+ j, e- M8 x. u2 j0 r5 i
  940. RTS
    - t. p0 S- ?9 x% \2 {

  941. / X$ X+ O$ ^5 n7 [& j
  942. ;==============================
    ' X- \% r' P- a- Y' v2 m1 z
  943. Music_Bar_ReSet;音乐条重置
    5 C/ o' J$ I( S6 L" w4 ?7 j
  944. LDA #$00
    6 N$ }* E. E7 ~. r
  945. LDX #$00
    : o( g+ G: T. x' G; u
  946. Music_Bar_ReSet_Set$ x' S# n4 B6 C: Y5 v, m9 m
  947. STA Sound_Bar,X
    / P  l3 R$ M# D9 G+ k8 o
  948. INX
    % i) V8 R. ?' K8 I1 C/ z
  949. CPX #$10
      q4 a9 `+ [, I
  950. BCC Music_Bar_ReSet_Set
    % r7 X) w) C% h
  951. RTS
    5 G6 b% S% e2 `& V7 B4 ~7 D( r

  952. # b% p3 o7 G3 m) M5 M- @% |1 @
  953. ;==============================
    9 N! w8 M6 ?6 m" t
  954. PPU_Data;PPU数据写入
    $ `4 J7 ^/ S' n" C( ^0 D& A, |& ]+ I
  955. STY Data_L2 t4 d' e8 n2 ^% u+ a
  956. STX Data_H
    / y" m) F3 s2 A& K; j
  957. LDY #$FF
    4 `4 R5 J% s' p0 A0 u6 d* ~
  958. LDX PPU_Cur$ p/ C/ N: ?( @# F6 @) N' m
  959. DEX
    ! z& ^- s3 o$ ^0 Z
  960. PPU_Data_Beg
    7 i! y: {; [( a$ P% @
  961. INX
    5 |3 E, ?4 C( A5 I
  962. INY
    # H: s- b( y; y
  963. LDA [Data_L],Y; o/ M+ J5 n2 J5 r
  964. STA PPU_Addr,X
    $ O+ [! ~& |1 B3 ^9 ~9 `% W8 Z
  965. BNE PPU_Data_Beg
    . R0 C9 X, A0 I* t% k" j$ B; k9 p
  966. STX PPU_Cur
    ) T  T# Z/ a5 o! u  i
  967. PPU_Data_End6 v  f2 x6 D3 R! J& Y# b5 j; G0 T( J
  968. RTS& E- s0 O; S* W4 }

  969. 4 w% K% S' X) l
  970. ;==============================" H& k4 z% V6 G( G
  971. Music_Stata_Show;播放状态显示
    ( \$ }* g# i; u% Z; O
  972. LDA Music_State! C$ z# y8 C0 p/ O
  973. BEQ Music_Stata_Show_Play
    ' }8 P" n% @( ~1 X& K! e
  974. Music_Stata_Show_Stop
    , H! |* o: _( y' M* E0 I
  975. LDY #LOW(Music_State_Stop)
    / p& g% ~: R2 Y: w0 h2 H
  976. LDX #HIGH(Music_State_Stop). u3 U! e, D5 q' K: Y' E) q
  977. JSR PPU_Data$ B$ P; R, l% W+ X" k9 ]
  978. RTS, C; \* Z9 w0 l* x
  979. Music_Stata_Show_Play
      T. f. n! H; Q3 P( J
  980. LDY #LOW(Music_State_Play)
    " ]% ?/ P# ]% Q0 L( z1 o9 E6 D7 p
  981. LDX #HIGH(Music_State_Play)
    : P( X( {' C7 h
  982. JSR PPU_Data
    3 L" u1 o- G. h4 }% F$ F
  983. RTS
    : w9 U' h/ l7 K& ?9 X  c

  984. $ s( @" G+ H# S$ A5 B! T. ?0 J
  985. .IF SOUND_BAR_SHOW_ENABLE
    ) H$ h/ J, y" z. V7 u
  986. ;==============================) a/ H+ O: n! Z1 t! B# p
  987. Sound_Bar_Text_Set;标题与音乐条初始化9 s" y! \( H7 A3 J5 p- T" W
  988. LDY #LOW(Sound_Bar_Text_Data), \, C" H% T& j' [
  989. LDX #HIGH(Sound_Bar_Text_Data)
    3 P2 \; e, S! J. o9 H% X
  990. JSR PPU_Data; f* ~  B& h7 ?+ _
  991. RTS) }8 v9 j% X# H/ |. M
  992. 6 e' c; B) l. a
  993. .ENDIF
    # r; _1 H: k0 B' Q) ^

  994. : w% p7 M; M  d8 n  j
  995. ;==============================$ S+ |0 |2 ^2 g) O% g5 O/ l
  996. Set_NameTable_Attributes;设置命名表属性
    . F1 K7 D1 q: d" I: ?7 F
  997. LDA PPU_STATUS, v0 F9 m- _/ l4 h
  998. LDA #$23
    + q, D3 `+ F8 Y
  999. STA PPU_ADDRESS
    5 v  y% V3 k* U  g( f$ ^  b3 N9 [
  1000. LDA #$C0
    5 h( ?# k. i0 b) {' N5 m% c
  1001. STA PPU_ADDRESS
    4 A4 Q7 ^- U, S8 _! [4 B9 q
  1002. LDX #$00
    ) n9 h( U' O/ c) k' z' L
  1003. Set_NameTable_Attributes_Write8 q; j: Q6 [1 h% P- H
  1004. LDA Palette_Attributes,X0 i+ [! U+ }! M, |! k; P6 I
  1005. STA PPU_DATA
    " Z) N/ E$ p8 l4 @9 S
  1006. INX
    ) F4 w3 c4 l# T1 \, X- O
  1007. CPX #$40
    6 c" T+ ]* H, u' D3 ^& r5 V3 m
  1008. BCC Set_NameTable_Attributes_Write# s1 l$ Q! @1 m/ O% q* P  |
  1009. RTS5 n# a  W$ l, ^% r. B

  1010. ) P3 {8 s/ \) e# @+ o
  1011. ;==============================8 ^' n0 y1 K4 I
  1012. Set_Palette_Color;设置调色板数据3 L- d0 I( O5 c: Y4 A
  1013. LDA PPU_STATUS
    , v0 W" O5 }) g" D2 t" J) y$ j
  1014. LDA #$3F
    4 u9 d  a% q9 k2 q; W  X3 t- p
  1015. STA PPU_ADDRESS
    * a  X. m& }0 A1 R
  1016. LDA #$00& k' m+ W, X! s: {
  1017. STA PPU_ADDRESS
    6 k, v3 [9 H3 T+ Z' D' F
  1018. LDX #$00
    1 d$ r1 a5 I; ]% ?7 ?; r
  1019. Set_Palette_Color_Write! i+ s' N  L9 W9 {. F; I/ p& z
  1020. LDA Palette_Data,X
    5 J% R' z) y: x6 X
  1021. STA PPU_DATA
    . C4 o- `+ H% X( ^  f  ?
  1022. INX0 [: {, i5 y6 [2 f+ z+ m2 l" X( z
  1023. CPX #$20; F/ h# K' ^: b, j
  1024. BCC Set_Palette_Color_Write
    " e3 i3 l6 @# s& s* ?
  1025. RTS
    , [: u. U1 e% R/ ?1 s  |; K& C- p0 e
  1026. ; u# R* t  J# P. o4 U
  1027. ;==============================2 {3 ?) x$ i" x/ G7 {# E; v+ W8 }
  1028. Init_Palette_Addr;初始化调色板数据0 k9 J% s& h4 o( u
  1029. LDX #$00+ X. a3 G) T% {1 O4 y
  1030. Init_Palette_Addr_Write. q, H! ]4 y- T3 l6 R- p
  1031. LDA Palette_Data,X
    ' R/ ~: h) ?6 G) r
  1032. STA Palette_Addr,X
    " D- }' E/ E7 ?- y, r+ e
  1033. INX
    & y3 _- Q2 J1 e
  1034. CPX #$20: m/ S4 W- |: H0 B+ G
  1035. BCC Init_Palette_Addr_Write' d2 R; V" U4 W5 U& V
  1036. RTS
    0 j: m' M( T4 V  E6 q8 C) u, r
  1037. & H) d8 [& m/ n4 {% k/ W
  1038. ;==============================
    , S  E5 M+ Y5 ]4 A& m) M2 r, o
  1039. Update_Palette_Color;更新调色板颜色$ w+ D/ B! i: [5 n* x& I* q
  1040. LDA Show_Track_Name: X/ ?3 k  Q/ T
  1041. BNE Update_Palette_Color_End
    $ R, @$ X* c7 f% ]6 [
  1042. LDA Palette_Update_Flag2 |' J& J1 _; M1 U4 f) q
  1043. BEQ Update_Palette_Color_End# q8 |; y% v* R. G. r& T, ~
  1044. LDA #$3F
    ! ^! P, Y2 N* `+ Y0 ~
  1045. STA PPU_ADDRESS/ D! f0 G! a- e# C! ~  r
  1046. LDA #$009 `6 }6 _, _/ @: K" o
  1047. STA PPU_ADDRESS" e/ m# X4 U/ _/ Y6 D
  1048. LDX #$00
    8 M% [6 I8 y0 H0 X9 H1 k
  1049. Update_Palette_Color_Write: U; z+ {! y7 y  R  F' L
  1050. LDA Palette_Addr,X  l' k3 E0 t" ?5 w. F, g' \
  1051. STA PPU_DATA
    5 b* ~8 d0 X( w1 c9 h  Q
  1052. INX
    . k: K6 K% H& c' @/ u
  1053. CPX #$20
    * T8 n/ Q# g  j* n
  1054. BCC Update_Palette_Color_Write
    " H/ ?! g, f, h1 J- ~8 u2 Q2 V! u
  1055. LDA #$00
    . h* |* x$ p! h- @- o$ |
  1056. STA Palette_Update_Flag
    $ s! N+ B1 S. |8 b% R% i
  1057. Update_Palette_Color_End( i. J  X0 T0 ?4 P' q
  1058. RTS; C4 _. o8 O  J3 S. D3 i

  1059. # d. _+ o5 L! z) d: N0 z# h
  1060. ;==============================$ L- |7 X1 }9 R6 o5 F0 ~4 z
  1061. Update_Palette_Data;更新调色板数据! J. w9 o, i" e2 O. E
  1062. LDA Show_Track_Name& j, q. G, F* V$ A/ T3 _! K- P
  1063. BNE Update_Palette_Data_End- H, `, P: q9 |- V% h
  1064. LDA Music_State# ]+ z6 e9 @1 Y- B/ G
  1065. BNE Update_Palette_Data_End
    ( ~1 a) B7 ~- J+ x/ ]* A; a3 t: b
  1066. Update_Palette_Data_Check3 g) {" s) d4 `) L8 k3 k# A1 ^3 ^
  1067. LDA Palette_Wait_Cnt
    - @- Y5 k4 l2 P9 A* ~/ W
  1068. BPL Update_Palette_Data_Check_Over( H( R& h; a( b( C
  1069. LDA #Palette_Update_Interval
    % n: q* E2 k0 M" `, ^7 ~& A- m
  1070. STA Palette_Wait_Cnt
    ) B: O) ]) B1 ?2 l- v& Y
  1071. Update_Palette_Data_Check_Over7 ~- r- o) a' f" O
  1072. DEC Palette_Wait_Cnt1 r  @. q6 {4 y3 \% D
  1073. BNE Update_Palette_Data_End3 _. I9 K; |/ f, y! V
  1074. INC Palette_Update_Flag
    6 e5 d$ T* p) y! U
  1075. LDA #Palette_Update_Interval
    5 |! c0 [6 q$ j3 }
  1076. STA Palette_Wait_Cnt8 q, I4 ]0 U& x+ n% E
  1077. LDA Palette_Update_Addr# x0 t8 q+ k8 ?* G. Q3 e
  1078. CMP #Palette_Update_Max
    7 ~& y: I8 T, c8 J) b3 d
  1079. BNE Update_Palette_Data_Set
    8 I% M/ c9 a7 L  j1 H4 X9 i/ m. S
  1080. LDA #Palette_Update_Min - 1* S8 [2 W' ]" A+ m  @2 y
  1081. STA Palette_Update_Addr
    2 I2 T! r9 m. `3 I* j  i
  1082. Update_Palette_Data_Set
    9 c6 A# c7 I, k1 l
  1083. INC Palette_Update_Addr
    % @: L2 C3 Z2 m3 X, T
  1084. Update_Palette_Data_End* j+ B  |6 B1 C% V; J; J/ Y
  1085. RTS
    ; R: K9 i, y& ?1 h5 H; H3 Q

  1086. 6 w0 m) h' l  Z: _4 `/ F  u0 m* X/ L9 c
  1087. ;==============================  d  c) @+ V+ `; A% j' G
  1088. Show_Music_Text;显示静态文本4 k, W# Y  I2 U* L
  1089. LDX #$00
    $ X/ D: k! P. V( T
  1090. Show_Music_Text_Set2 {1 w: D8 l- d* D( \* {7 H
  1091. LDA Static_Text_Data,X3 R2 ~/ b- k4 t: B
  1092. STA Data_L
    ; O' H4 K( [7 g  y2 c0 V0 `
  1093. INX" X/ P" j% J0 z% @* [5 [
  1094. LDA Static_Text_Data,X' N, d0 \: j9 Y) j# S" y' \4 q
  1095. STA Data_H' d2 R! I: ~. t1 }8 O* H
  1096. INX
    / h' ]) e# V0 _2 b2 y$ A
  1097. LDY #$00
    8 _2 w& D7 D2 D% q# _8 S' |+ Z2 z
  1098. LDA [Data_L],Y% m) ?# u: j6 c( v4 h9 m2 j2 l$ k  q
  1099. STA Data_Cnt5 p; e+ o8 i+ Q. v8 E% M' R  X
  1100. DEX
    $ n: [" O# f3 ]7 C
  1101. DEX
    - q1 W2 D: {$ z  q  u) _
  1102. LDA Static_Text_Pos,X
    / W* I- @; C7 z$ ^: O* T- x- J
  1103. STA PPU_ADDRESS! T6 ~% E! s  L, b' i& [* q
  1104. INX0 o+ Z' W9 T, s" U' K0 m: X  i
  1105. LDA #$205 x6 J% O# ~9 M7 T; e  L$ t
  1106. SEC
      k, G) W$ l/ Z+ X
  1107. SBC Data_Cnt
    ' ], |: F* K( }
  1108. LSR A5 Y) l+ t% x& F0 A4 U
  1109. STA Data_Buf
    7 z2 h8 K. K: v1 _: S3 c, u
  1110. LDA Static_Text_Pos,X
    2 J4 D9 g# u+ m8 o& \6 Z
  1111. AND #$E0
    5 m3 N- ]# r, `3 S. P0 h( V5 @
  1112. CLC
    / l* F! y1 |) J1 ^7 h8 ?) v! d
  1113. ADC Data_Buf  k7 u" j9 H5 B8 f
  1114. STA PPU_ADDRESS  x) A3 D7 v5 r* B  m6 D2 V
  1115. INX" x  q8 f4 o8 i2 O
  1116. Show_Music_Text_Set_Write
    7 _$ [! I9 L+ i  p# t
  1117. INY% D0 X5 q- ~6 K
  1118. LDA [Data_L],Y2 g8 {% a1 s4 z0 C+ F% M
  1119. STA PPU_DATA
    ) w  s% e3 \5 [  Q2 z% {% G
  1120. DEC Data_Cnt
    # M& Y& B, y# H* |! h
  1121. BNE Show_Music_Text_Set_Write# e2 @0 T9 B8 \  M
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos2 e: ?& M7 k4 }. _" l
  1123. BCC Show_Music_Text_Set
    9 Z# |$ F! U0 s7 f& ~/ Z
  1124. RTS
    1 y* R6 @  L# ]

  1125. ' S4 K% x% j8 ]2 N+ a3 G
  1126. ;==============================: `: s9 Q. v% {9 _6 W2 x) Y
  1127. .IF Track_Name_Pos;显示曲目信息
    ) v) L1 y3 b2 M- p9 [# J
  1128. Show_Track_Info$ Y4 ]8 o- F& ^0 L* c( z0 o
  1129. INC Show_Track_Name/ ]) u' E5 ?! L3 [6 @
  1130. Show_Track_Info_Clear  ?; Y' W( i) a0 F8 n
  1131. LDX PPU_Cur% R' t; j& \  ]3 {* M! ~0 Z
  1132. LDA #Mode_Clear
    + t) f" P/ A3 ~! T- e
  1133. STA PPU_Addr,X
    ( N5 g1 |( ~+ j# S' @
  1134. INX4 [( B2 h& \4 N
  1135. - ?1 B( v% M9 u7 ^
  1136. LDA Music_Last" s; g5 Y# G  y( k7 r# ?& f
  1137. JSR Show_Get_Track_Name_Center_Pos
    9 m  l/ r+ ]* V. O  {3 m. C9 Q
  1138. Show_Track_Info_Write_Cur
    % X: B) c& ]8 S. s7 B
  1139. LDA #Mode_CntLine9 r! s+ B8 m) l) l. v; b5 B- h9 V! H
  1140. STA PPU_Addr,X
    - t1 m8 G. y3 Z) t
  1141. INX7 K( ?2 B+ p9 N5 }

  1142. 4 P+ _9 H4 ?; g) O9 Y: |6 h9 o' F
  1143. LDA Music_Cur" a! P2 d# ?  P2 t
  1144. JSR Show_Get_Track_Name_Center_Pos2 ~2 s) F5 E1 ^" ^2 r& E

  1145. - d+ B+ r5 Z+ I& g
  1146. Show_Track_Info_Write_Cur_Data: S/ h5 u1 W9 G) O
  1147. INY8 G* e, a; O, l8 I5 Y: e2 X
  1148. LDA [Data_L],Y
    # \5 M0 @. Z  ]; i8 d
  1149. STA PPU_Addr,X, y5 z# F% R& y# E& R' [' Y  X
  1150. INX' _0 ]% e/ S; |* g/ u" K
  1151. DEC Data_Cnt% Q, V: e+ U  K7 c9 v/ k
  1152. BNE Show_Track_Info_Write_Cur_Data2 s4 ~- y  S) m5 ]8 ]
  1153. Show_Track_Info_End% ?2 C6 A4 o0 s/ \9 W# |) ^! \5 z
  1154. STX PPU_Cur
    5 }! X' J) b4 v
  1155. RTS
    ! [% Q6 d& T2 h+ H
  1156. 6 D  T/ Z6 N8 M( K, b& f
  1157. ;==============================8 g& t4 N- w4 ]
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    ; E$ C" W6 o6 x- _* b3 r6 `
  1159. ASL A
    + r/ p, E) w: i) Y+ H- j
  1160. TAY
    $ c- P  S$ d' U' ]/ x
  1161. LDA Track_Name_Addr,Y
    - B: m9 T$ I4 r0 L5 Q; t
  1162. STA Data_L
    8 }9 C5 P1 T! Q7 r% ?
  1163. INY
    , s4 e; v5 r( u' U
  1164. LDA Track_Name_Addr,Y
    ' G2 d! L4 Y6 D+ g3 e1 Z+ A0 s
  1165. STA Data_H
    1 H8 c0 ^9 }2 E: o7 p% |5 q
  1166. LDY #$00
    5 _5 u/ ?# ^' E5 E6 Y! P$ {
  1167. LDA [Data_L],Y4 f5 ~- i) D; L4 G
  1168. STA Data_Cnt
    2 l. A/ v! @. z3 u
  1169. LDA #$20
    1 ?  r) ?* b3 U" O. b6 z: ?1 Z
  1170. SEC5 }2 `$ _3 E6 }7 C
  1171. SBC Data_Cnt$ z7 x$ f; H. j/ s+ M+ P
  1172. LSR A
    ' l  n3 n8 E2 b
  1173. STA Data_Buf
    . C5 ]* [5 c* G" v5 g# g1 W1 S
  1174. LDA #HIGH(Track_Name_Pos)' g& U8 i$ m. ^- C2 n
  1175. STA PPU_Addr,X
    ; D) W+ J1 n& v
  1176. INX
    4 X# G( b- `, E' Z5 j( @
  1177. LDA #LOW(Track_Name_Pos)
    % i* O/ u) m5 N. q7 U
  1178. AND #$E0
    ! n; j( M# h- S4 ~/ n; g, `. B
  1179. CLC1 t$ E+ T/ f2 |) g" E# ?8 Y- m8 T/ q
  1180. ADC Data_Buf, g4 W( D5 f" K% z+ j% \2 {9 l0 B
  1181. STA PPU_Addr,X' I- a) k+ p0 W
  1182. INX
    " C5 \; r' B. P) V; e( _
  1183. LDA Data_Cnt
    6 E3 c4 k4 _/ H+ T% b+ W/ j
  1184. STA PPU_Addr,X5 _1 {; m& \* ~4 [  ~
  1185. INX6 {; f; A2 ^1 \/ F! G" J% E  ^3 f
  1186. Show_Get_Pos_Center_End! ]% N3 s5 m9 f7 v
  1187. RTS
    ; U/ r2 r3 [8 j$ r! b
  1188. .ENDIF
    ) ^' G; I" }1 L& b8 g. T
  1189. * j4 L: ]# K) a; I% r! [0 w
  1190. ;------------------------------
    - x& {' C; m# V  d6 d" p+ \( R
  1191. ;命名表数据
    7 h- G) a2 h! u
  1192. Palette_Attributes
    / g* y, P9 b/ w3 T
  1193. .IF SOUND_BAR_SHOW_ENABLE# V+ N6 V& t3 ?7 q) e4 _
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00/ A2 C. J, @7 J# A
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA6 W: t1 _. T: d( y: P7 G
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55& c( w0 _$ O8 N) z
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    0 x) ^; d0 @' O' z3 ?
  1198. .ELSE; A! {6 k& s" Q( G' v
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    2 K( @2 i4 ?8 t4 P
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    : O0 y) c4 A, R0 O# V  l' {
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$552 r- o1 Y) y2 E7 q9 I6 K2 o
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55% E, F9 D2 F" {; Z+ E% y  y
  1203. .ENDIF" H: k8 x& p0 r% e) n7 M

  1204. ; s, t, R/ p7 ~3 D) C+ }
  1205. ;------------------------------
    # k9 d  f' a8 D) Q0 `
  1206. ;调色板数据
    ; c. j, ?( ?( E% q7 x/ `( O- A
  1207. Palette_Data: Y! W! Y4 s6 _4 T" y" {
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    0 `" A- y, \5 D7 P# z9 V* c
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    6 [, {% ]! h/ `5 W

  1210. , g! a( y' P! r
  1211. ;------------------------------  z: x# W, r1 ~7 I
  1212. Static_Text_Data) w$ ~* j2 g& F, m$ S! x6 @
  1213. .WORD Static_Text_Title_Data
    " u8 o; Z. g" f
  1214. .WORD Static_Text_Author_Data' g$ v! _3 J5 \" K0 `6 N2 G+ R5 n- o
  1215. .WORD Static_Text_Date_Data
    6 d, r! e7 v& W( Z1 @
  1216. Static_Text_Data_End2 o- F0 f2 H" V* M8 H; {
  1217. ; H3 L; u- t- P8 z- ^/ O
  1218. ;------------------------------1 @8 ?' S! n% o* H
  1219. Static_Text_Pos/ `( j9 d* k& e9 l$ D9 _+ F
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)6 e8 A+ V- G9 Z; d+ @( m3 Y. n! T
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)6 t" y5 [1 j  h- c2 c
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    8 h- H0 o3 f( F$ x8 }9 ?
  1223. Static_Text_Pos_End
    . `: O7 \8 a9 Z
  1224.   V# n, k# {# X' A2 E
  1225. ;------------------------------3 ]2 |& w( b5 |! Z+ ]
  1226. Music_State_Stop: U6 \8 j. E+ m/ d, N
  1227. .IF SOUND_BAR_SHOW_ENABLE
      k6 |) V8 y. G) a
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    ; w/ D* b' q. y: ~' n8 i" V+ q
  1229. ELSE
    1 x4 L8 w) \. `; H1 m: Z* q
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    # O3 T. ]' ~" I9 f7 q
  1231. .ENDIF
    0 `; \+ c: ?# s9 c' i& Q: |
  1232. Music_State_Play
    1 L" M/ \' `" w9 b0 J  w! \
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00+ t* Z; P; K. q' r

  1234. 1 Q0 Q8 i2 [( d) Z7 G
  1235. ;------------------------------# r1 \) i# j9 u. g- y
  1236. Sound_Bar_Text_Data;声音类型文本
    3 f. P7 U9 i* t$ Z  `" Z. x9 U
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)* i6 b6 L, q5 F! }) W' H
  1238. .DB "SQ1-",$FF+ i. q7 p7 H4 u# l( a- w) J
  1239. .DB $FE,"SQ2-",$FF2 K$ \9 T7 b; p# e( f
  1240. .DB $FE,"TRI-",$FF+ _3 V# h5 Z) k
  1241. .DB $FE,"NOI-",$FF
      c9 T1 Z. @* D4 f
  1242. .DB $FE,"DMC-",$FF,$00
    0 U: f& S" s7 E" o2 y* z, ~
  1243. ; \0 `9 M! D: Q+ i0 o
  1244. .IF Track_Name_Pos
    0 j, T) Z9 N$ J* z7 J9 v/ L1 o
  1245. ;------------------------------
    $ i" b- Z; x5 u  {$ \4 F
  1246. Track_Name_Addr;曲目名地址索引
    * Y4 {1 s3 O2 I7 X- j4 [
  1247. .WORD Trackr_01
    * R: J5 c/ ^! a, e4 `( L
  1248. .WORD Trackr_027 I+ \5 d6 V. V
  1249. .WORD Trackr_03
    " N# N# @- d0 R' _( _
  1250. .WORD Trackr_04' X/ I9 a7 u8 Y* h1 l3 h2 l
  1251. .WORD Trackr_05
    2 o7 f# w2 A4 Y. V* z2 m: U
  1252. .WORD Trackr_067 I3 D& K1 |* f; m; {. _
  1253. .WORD Trackr_07
    ) z. F6 Y$ S" V* |2 k4 W
  1254. .WORD Trackr_08/ A2 h0 P8 x1 }$ N8 W( h
  1255. .WORD Trackr_09
    ; R" E8 n7 s4 K/ a
  1256. .WORD Trackr_10
      i, _7 F7 c% d7 Q
  1257. .WORD Trackr_11
    . g" {) W# H7 ?
  1258. .WORD Trackr_125 {6 @9 O/ D3 A$ l, B/ V
  1259. .WORD Trackr_13
    0 e3 @7 c& m1 Z* ]$ |2 A
  1260. .WORD Trackr_14  |8 r& f0 n# e6 H; ^& g, g) [
  1261. .WORD Trackr_15
    . b2 T, ^& p/ j2 C
  1262. .WORD Trackr_168 Y% k' o: t' o# W- W
  1263. .WORD Trackr_17
    * n/ h5 N1 \* F' F' [; U7 l5 z
  1264. .WORD Trackr_18
    0 e; Z6 X! h; a0 E" S
  1265. .WORD Trackr_198 r1 C( x0 G, z( N* }
  1266. .WORD Trackr_20
    6 c- z9 g8 j- X6 W- R: N+ w% `
  1267. .WORD Trackr_21! u! D% ]5 U: {: D' h
  1268. .WORD Trackr_228 z, [. @4 o. Q( n% p2 f  z
  1269. .WORD Trackr_23
    $ t4 [7 D/ L& h/ E( D4 Q( @
  1270. .WORD Trackr_24
    $ B' K1 r  D( k* y" D1 d4 e4 q  I: v) e) n
  1271. .WORD Trackr_25; ]( l4 F* e3 Y
  1272. .WORD Trackr_266 _: |2 c/ H: T& e; T
  1273. .WORD Trackr_27
    , w6 G5 Y* L/ p4 k) j3 `& B7 J
  1274. .WORD Trackr_28
    / r  q( o3 S0 a  N
  1275. .WORD Trackr_29, e2 g" u( e# ~! B3 `8 m8 n
  1276. .WORD Trackr_30
    * z% v4 G7 g! ^! k, y
  1277. .WORD Trackr_31, y) ^# b- [' k
  1278. .WORD Trackr_32
    , M( C0 `/ J. E/ c/ ?
  1279. .WORD Trackr_33
    . r- B: V; z; n, T; l
  1280. .WORD Trackr_34  A* h/ D/ G1 g9 M" [  ]" S) b. e
  1281. .WORD Trackr_35
    # R6 |% B( n! B; L( L1 H( a
  1282. .WORD Trackr_36
    5 t9 p7 p* ]% c" }2 D6 A7 _
  1283. .WORD Trackr_37: ?& r  U; W2 [6 n. |
  1284. .WORD Trackr_380 \+ Z$ S( x% W* ]+ O7 c
  1285. .WORD Trackr_39
    7 _0 U+ r4 M! t0 L+ b7 D7 _' V
  1286. . U5 o# x3 [0 \) Z8 `
  1287. ;------------------------------9 U4 @$ Y6 R0 W( c3 W4 S; \: v, ]; @
  1288. Trackr_Name_Data
    & j! ^3 p0 Y& K3 N5 d1 f! D7 N
  1289. Trackr_01 .DB $05,"BGM 1"% z: Q7 v2 P7 e: W9 m
  1290. Trackr_02 .DB $05,"BGM 2"
    - c9 h6 G' ~9 n/ b
  1291. Trackr_03 .DB $05,"BGM 3"
    ) g# _. o4 j. |9 R: k
  1292. Trackr_04 .DB $05,"BGM 4"8 f9 O# r& ?8 m! B
  1293. Trackr_05 .DB $05,"BGM 5"; |% R5 U' L5 ?6 L4 u
  1294. Trackr_06 .DB $05,"BGM 6"% D  I+ Y3 r3 H3 m5 w5 X
  1295. Trackr_07 .DB $05,"BGM 7"
    " t5 r7 ]* [* m9 K% C5 Q) V
  1296. Trackr_08 .DB $05,"GREAT"
    - z; s6 {4 D) a$ D9 g
  1297. Trackr_09 .DB $08,"BOSS BOM"
    + J8 i$ i! _- }  M8 V
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    ; k$ g: {1 b0 ~  C- J% c4 `
  1299. Trackr_11 .DB $07,"P CLEAR"/ Y& @9 U1 c" J: R  N1 P. z# H
  1300. Trackr_12 .DB $07,"A CLEAR"
    : \- F: @0 d  @
  1301. Trackr_13 .DB $04,"OVER"
    ' A3 e; S1 p( U, j) F( M9 b0 {
  1302. Trackr_14 .DB $06,"ENDING"  U( k' h1 W$ N% N" d
  1303. Trackr_15 .DB $04,"SUTA"
    % O3 F( f, K/ M+ }
  1304. Trackr_16 .DB $07,"THUNDER"
    6 V- x" @: D7 h3 X$ d/ f" `
  1305. Trackr_17 .DB $04,"SHOT"
    9 L6 ?- Z% l" F" F0 w: @( X
  1306. Trackr_18 .DB $05,"LASER"
    - t+ \, e# n/ |3 x: q5 Y1 a
  1307. Trackr_19 .DB $06,"SPREAD"
    ' w1 \- D3 w' e( E+ l' d, K
  1308. Trackr_20 .DB $04,"FIRE"
    . S) B, I( A: F& T7 T' h4 j8 z
  1309. Trackr_21 .DB $06,"B SHOT"! i! q7 d7 b$ f
  1310. Trackr_22 .DB $08,"T DAMEGE"- v/ ?; r6 a5 `% h/ L
  1311. Trackr_23 .DB $07,"HARETSU"
    ) J" j, ]/ Z2 p
  1312. Trackr_24 .DB $05,"T OUT"3 o; O) P/ {5 `' D) @
  1313. Trackr_25 .DB $05,"Z OUT"
    # l8 _1 [! m# [( F& Q, s
  1314. Trackr_26 .DB $05,"A OUT"
    $ z9 n' k4 j4 g8 t2 |1 }6 U
  1315. Trackr_27 .DB $04,"ROLL"
    ( o5 s7 s' z" P, F3 k
  1316. Trackr_28 .DB $06,"APPEAR"# |( P& i8 v" t
  1317. Trackr_29 .DB $05,"POWER"
    ( f3 y* O) u9 ^1 O: d5 P5 b$ [
  1318. Trackr_30 .DB $07,"BOKK BK", J& {4 R4 t4 n5 e. k4 y
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    1 J, i$ N6 `$ K: J
  1320. Trackr_32 .DB $08,"BAKUHA 2"* i& J5 j8 z+ E3 }0 r5 B- ]% n1 m
  1321. Trackr_33 .DB $05,"ARUKU"
    / c+ _6 s) d% V. T' o9 \
  1322. Trackr_34 .DB $06,"JIWARE"
    4 u! s4 }# o- D$ v$ m* p  q
  1323. Trackr_35 .DB $05,"SILEN"( i1 L3 k; x4 T2 C9 E
  1324. Trackr_36 .DB $05,"P 1UP"
    7 q. W+ C" q# T8 m1 V( k
  1325. Trackr_37 .DB $05,"P OUT"
    7 j/ d- O+ L9 b
  1326. Trackr_38 .DB $05,"B OUT"# g! w, B4 m2 w/ ]. X9 P6 o. L
  1327. Trackr_39 .DB $05,"PAUSE"
    - a, V8 B, k# L! b3 u2 g
  1328. , g0 J8 L( Y5 |6 a5 b4 p
  1329. .ENDIF
    - D6 S4 a: {) Y6 @

  1330. + f6 c" e$ a* p4 {
  1331. ;------------------------------
    - {; P: U( I( q* P7 y
  1332. Static_Text_Title_Data;静态文本数据
      S: b' d1 X5 K4 y
  1333. .DB 12" o6 E1 Z$ p8 Q4 X, V; p
  1334. .DB "SUPER CONTRA"
    ( ~1 P1 a0 _, k% o
  1335. Static_Text_Author_Data
    : a* M  W! d$ h
  1336. .DB 232 d: n7 y9 Z, i% Z" g
  1337. .DB "EXTRACT BY FLAMECYCLONE"0 I8 x% ?6 a$ N; p
  1338. Static_Text_Date_Data7 w7 Y; I# w0 O
  1339. .DB 10, q2 {" e% m7 i' T! }$ N
  1340. .DB "2023.07.11"
    ) `4 A: W  J: O. ~  T4 ^

  1341. 8 {. {. @7 ~7 J% `
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    % B" z; C6 C  L' f4 e/ _
  1343. .ORG RESET_ADDR
    + v' a: W5 F, g! E( x
  1344. 2 s9 s8 X8 T# }8 _  w: `
  1345. % ?- e9 Q' q/ M  D, x2 Z* K
  1346. ;==================================================4 @% p. }+ g' L) p" E& {5 T2 L
  1347. ;切到主程序bank) d2 _1 |8 C; e# W6 W3 B9 I9 ~
  1348. SwitchMainBank
    ) _( j5 N$ `, I5 j* I7 j5 q
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK& \7 t0 d$ A& |& O2 N: i* P2 N& C
  1350. JSR SwitchBank8000% y0 {% ~5 |" a2 Y. i, _8 j, P
  1351. RTS0 V2 f0 E+ M: M9 K0 f+ I7 Y
  1352. ! h" s& |. |9 a) k3 G) V
  1353. ;==================================================8 N1 f% S! |' O, ^
  1354. SwitchBank8000;切换bank到8000-9FFF1 F2 y& v# D5 x% w! m. `
  1355. PHA
    2 I+ V! m0 F  V5 Q, j( J0 M: p
  1356. LDA #$06
    6 L% o5 }/ N+ g: n8 [! D0 n
  1357. STA MMC3_BANK_CTRL! t3 |' N* |: P# E
  1358. PLA
      S) N8 L# l( N2 u0 B- v9 O1 e
  1359. STA MMC3_BANK_DATA
    4 B, Q. K  k9 Y9 M$ t' k4 z& ?+ v
  1360. RTS
    6 t" y* o9 v2 P5 {: {% V1 C0 U

  1361. , B( z7 }( w# \" L- l3 S/ o
  1362. ;==================================================" q  j' d/ w* L) R5 ~6 g% X
  1363. SwitchBankA000;切换bank到A000-BFFF/ V6 |1 C- q/ {8 Q
  1364. PHA
    ) \! l0 Z* @9 u' z7 o/ ?
  1365. LDA #$07
    , Z! p0 o; w+ r  M; q( Q7 E7 Z4 ^
  1366. STA MMC3_BANK_CTRL
    # K# H8 j$ t& d( f! N
  1367. PLA
    ' P! {' x% j3 }% ^+ V
  1368. STA MMC3_BANK_DATA
    7 C. i$ g1 K4 T3 P6 s# n: a* _8 d
  1369. RTS
      x7 ^/ k2 v8 J8 Z4 ^! p, V5 b

  1370. 0 j2 d/ o# A/ f
  1371. ;==================================================. ^6 g; ?! r$ R% t$ f( w5 C6 O
  1372. Sund_Bank_Init;音乐bamk初始化
    * W& K$ z4 H! S) G9 O
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK$ F4 D9 W$ Q* W) |: \- G
  1374. STA Music_Bank_8000
    & {+ Z, A8 T4 j6 L
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    $ r' z" Y, j2 C4 s4 i& o
  1376. STA Music_Bank_A0008 g5 M' F1 K# L/ ?
  1377. RTS2 j; r' j: S9 j& F+ F. w) e
  1378. 9 ~7 A* r0 n+ _& i  x( a3 h9 ]
  1379. ;==================================================0 B  ~% k7 [6 l7 Y- S/ O
  1380. Sund_Bank_Set;切换音乐bank
    ) R7 O9 g& S" J0 o2 T7 q
  1381. LDA Music_Bank_80002 m3 x/ U% u; o# {2 ?/ @
  1382. JSR SwitchBank8000( O( `5 W( t8 B" w, O  L
  1383. LDA Music_Bank_A000% X4 E- i# o. C
  1384. JSR SwitchBankA000  Q3 R$ S7 p) }6 q' b
  1385. RTS) q/ u4 y: z0 f6 z- w: C- \
  1386. ) K+ A0 x! ]. B  u  y
  1387. ;==================================================% `7 M. y" R5 }' c8 U
  1388. Sound_Init;音乐初始化
    % [& c' ]! c2 s! G' ]* h! q- X
  1389. PHA
    $ K% \; [1 F7 Y
  1390. JSR Sund_Bank_Set# u) [7 g) P7 z/ X1 T! F
  1391. PLA
    / B9 l6 G, D, s5 J7 |% M: s
  1392. JSR Music_Init_Addr$ D5 h: R; d/ U2 e8 o4 [  {
  1393. JSR SwitchMainBank. L5 Q% H( |+ w+ D0 X

  1394. : [+ Y( l1 M' h* i
  1395. JSR Music_Bar_ReSet: Y. ~$ K- C* @. p. f& W
  1396. JSR Time_ReSet
    3 R% E; u: S* x* [1 T; Q
  1397. LDA #$00/ y. E, n& q# Q% S/ v
  1398. STA Music_State' E6 n% z4 z3 d  D
  1399. JSR Music_Stata_Show
    2 Z: f, _* M7 ^4 m1 e8 g
  1400. .IF Track_Name_Pos' ]. i6 q3 D  x- h
  1401. JSR Show_Track_Info, u5 Z: \3 A) A9 n$ S$ P
  1402. .ENDIF4 D- y: r0 X9 S. d5 }/ U# |
  1403. ) X7 U8 }  b+ }9 Q( g
  1404. RTS
    * t' E+ Z- |: |' b, N- j

  1405. - A, q4 Y. {) b! a( r3 p
  1406. ;==================================================
    ( D" x' r( U. U
  1407. Sound_Play;音乐播放
    + {; j' r4 S! R+ M+ `) c, b
  1408. PHA
    8 S! D8 S, C7 j) c: ?- P
  1409. JSR Sund_Bank_Set  ^. _  z  i1 `7 T/ A. a7 h
  1410. PLA
    ) D/ |* H0 U! y
  1411. LDA Music_State
    & n6 [& f9 \* e" U
  1412. BNE Sound_Play_End
    ( r1 ]/ T& i5 {& }& I4 H7 o
  1413. JSR Music_Play_Addr
    / \6 B2 m$ I" R7 }% B  A
  1414. Sound_Play_End
      ]- n3 G: K2 D6 q- z( Q: B8 d; \! _
  1415. JSR SwitchMainBank
    5 a" k* n8 N, u0 G0 H* |
  1416. RTS
    0 I% ?  q$ C4 o: y3 t
  1417. & T2 r+ ~0 P# [( L' z) Y* V
  1418. ;==================================================1 R  P2 e! s/ V; Q
  1419. .IF Music_Reset_Addr, e* ^  a) ?( o* l# R9 c3 _6 [  @
  1420. Sound_Reset;音乐重设(如果有的话)
    , ^8 w0 m! _: H5 V
  1421. JSR Sund_Bank_Set
    / ^/ k+ \# Y" c* D
  1422. JSR Music_Reset_Addr( @( G; }! D& h! j' T) M+ Y, {' Q) l
  1423. JSR SwitchMainBank, {, I# N% l, B6 ~( _
  1424. RTS
    ) \8 [8 c8 C5 Q8 m) J
  1425. .ENDIF5 s4 ?, [" a5 e$ ]4 K
  1426. 5 g- g1 z/ S9 l/ |" G
  1427. ;==================================================
    5 E' K$ T7 F8 i' \1 z
  1428. MainLoop;死循环  I3 d- y- L8 F. x! H; T! ~# R# ^$ s
  1429. JMP MainLoop
    ; G$ f+ H) |; s, c5 j

  1430. ( H+ n2 l( V( ]
  1431. ;==================================================
    1 Y) \# n, q- V( C) y4 D
  1432. NmiProgram;Nmi中断处理
    $ w$ \7 i" r3 b6 L# \
  1433. PHA
    1 t. Q/ S: r7 M
  1434. TXA5 Y8 [, v6 Q2 n8 }) U, k+ H
  1435. PHA* d$ T/ Z% T$ s/ \7 }
  1436. TYA
    ) o4 d1 ]0 y5 a
  1437. PHA: E- b' @- s2 w- W# Y) ]
  1438. 0 s. ~( k* \& X
  1439. LDA PPU_STATUS
    - F& r( |: M( @* `( u1 M
  1440. LDA #$00, [6 @! S- w- x" D! a3 a- X
  1441. STA PPU_CTRL  Z( b  `+ q+ t3 M% {' j

  1442. 8 `# G* P9 `6 [8 Z) ]  @- c0 E
  1443. ;切换主程序bank# e, G: I7 A- U- ?
  1444. JSR SwitchMainBank
    % ~( ~0 ^( }8 c$ P  W( @

  1445. 0 W7 j0 ^( {' G6 }* a
  1446. ;NMI处理. \0 O1 }' W( H# Z
  1447. JSR NmiProgramProcess5 f7 z7 v5 I6 S& R4 t3 }/ p3 p
  1448. 9 K; [& g) k" H0 {$ ~
  1449. Nmi_Proc_End$ ?/ M% H* s: b! l' w; b, Y' n
  1450. PLA
    / t$ p( m; j% K# v; d, t, I
  1451. TAY$ i6 P4 I& ^5 \# |8 ~
  1452. PLA
    + G! @, e0 |# u. w/ K; q6 G# H2 ?
  1453. TAX/ }' `9 p% J7 K
  1454. PLA, U' E! K- w1 A, z$ }3 i
  1455. + U0 z# ?3 [: {
  1456. RTI
    ' g& ]. \2 ~9 Z: ~
  1457. 3 C0 I0 G% q: F8 a7 O
  1458. ;==================================================* w6 g3 ^( W$ i5 W" V; U$ Z
  1459. ResetProgram;重置中断处理
    7 T' f8 h, h# Z# T4 a
  1460. SEI# a  J% K0 Y7 `
  1461. CLD
    " Y' M1 e5 Z/ }/ w" j4 d
  1462. LDA #$00# F/ ?7 C+ n7 w& ]' F
  1463. STA PPU_CTRL5 D& w$ n% v  P4 w0 M2 p2 c0 X
  1464. STA PPU_MASK
    - m( ~" k, P9 ?: @/ {5 v/ Z" G

  1465. 8 ^$ {8 r; |, V7 b
  1466. JSR SwitchMainBank; C7 _3 z5 N7 w0 E" ?8 X1 A* }
  1467. JMP ProgramBegin+ t8 A* \' t& z, l# n1 o
  1468. 8 A4 K2 ]0 s# y5 F$ @5 T( l
  1469. ;==================================================
    . T. Z1 Y: y. G! J6 Z
  1470. IrqProgram;Irq中断处理  O7 y. h( F7 Y, ^4 G5 {
  1471. RTI, O' b  u, m' D# O

  1472. ) N: b5 P" h6 G
  1473. .IF SOUND_BAR_SHOW_ENABLE
      f5 D; A( K% b& V' @- Z
  1474. .ORG $FF80
    ' f8 A1 x2 f5 ^  f2 w
  1475. STA $4000,X0 Z  W* b7 y8 R  @! a
  1476. STA Sound_Bar + $00,X
    * C' _! h! B$ L( M; K
  1477. RTS0 j3 s# g! X8 K, r5 i
  1478. 0 u1 P% X! S* K' h3 ~' l
  1479. .ORG $FF880 d4 c; l5 j, N' i! ~
  1480. STA $4000,Y
    - `, i, U- U2 a7 i. a0 O4 z
  1481. STA Sound_Bar + $00,Y, ?" K: b2 C3 X4 q1 ~6 W
  1482. RTS, `# o/ F# o% L' [
  1483. 9 ^$ C6 U; L/ c9 h6 D/ L5 F7 g( U
  1484. .ORG $FF90. Y1 ], Y  {* f
  1485. STA $4004,X
    , Y6 u' j: D" C) T
  1486. STA Sound_Bar + $04,X
    ( q9 a+ u: }4 V: N; w
  1487. RTS, z' M8 E' j' Q( Y6 }; u

  1488. / u4 @. l' W2 X: o: ~
  1489. .ORG $FF98
    : i9 }: V! ~+ @
  1490. STA $4004,Y
    $ r. c- e8 X- Q* E- H
  1491. STA Sound_Bar + $04,Y+ S& u! `- A, M8 F- t. Y
  1492. RTS
    6 h# W. ^4 t8 z; Y. z
  1493. ' Y9 \. \* z/ k
  1494. .ORG $FFA08 I3 ~6 [$ J* ?' r2 _8 S+ u7 Y9 R: S+ s
  1495. STA $4008,X
    # c4 ?6 ^. j, T$ R! d- n- q
  1496. STA Sound_Bar + $08,X+ H7 o0 H- t5 l
  1497. RTS
    : r4 q0 H+ ?/ W& ~0 J, w

  1498. + p) s) C( U/ V8 Y* c' N) L7 x
  1499. .ORG $FFA8& A5 ^) S2 Z5 W
  1500. STA $4008,Y1 @" Y; y) _. \6 q1 L: Z% t
  1501. STA Sound_Bar + $08,Y+ H$ h, d! Q) m* x# s. }7 m) j  E
  1502. RTS$ ^7 y! W# k7 b% |1 B* ~
  1503. 6 P9 R( j  _: K1 R, E
  1504. .ORG $FFB0
    $ U4 L2 W& d# R' M" P
  1505. STA $400C,X
    7 J& v: S" i7 h4 `
  1506. STA Sound_Bar + $0C,X
    ( t$ f# U9 ~$ i. A( t3 {
  1507. RTS- W$ U0 s+ R2 _
  1508. 6 j' J  [3 X" {' \& `" r
  1509. .ORG $FFB88 m( q$ a+ u, D! I# A" P6 z
  1510. STA $400C,Y6 D* ~8 `  ^( ~4 |( Z2 A
  1511. STA Sound_Bar + $0C,Y
    1 ]4 [1 _" E) W2 E- f( S6 z9 B
  1512. RTS# _% ]  G% n5 l. \& S- f" S
  1513. & f  c' X& Y. G" W" `4 n
  1514. .ORG $FFC0" O% I' m; j4 h! N& d  v8 y( P0 \
  1515. STA $4000
    * d! \2 H& i0 e; s0 g
  1516. STA Sound_Bar + $007 x9 G, p! z1 e- r
  1517. RTS
    # ^$ J+ [0 L; b4 }( c
  1518. * _3 u  ]' M7 U. ^
  1519. .ORG $FFC8
    ) E$ v* r$ L0 h" T
  1520. STA $4004& D% y/ ?: T5 [+ `% w
  1521. STA Sound_Bar + $04
      A6 j( _0 h* k! s9 ]! S5 C
  1522. RTS
    ( ?2 H9 ]' }( W, P

  1523. ) J7 j5 r) }- ~& p+ e9 J! o
  1524. .ORG $FFD0
    4 {0 y, ^5 j( z3 V+ A
  1525. STA $4008
    # F/ C; ~+ m- X1 C5 T5 I7 T( [
  1526. STA Sound_Bar + $08( v# y- g) P+ S3 z4 O: I1 o
  1527. RTS. U4 S- T' l, h7 d2 d; F4 p
  1528. ) F# C7 S4 L. L! c: c
  1529. .ORG $FFD8: J; w/ u* J5 Y  l
  1530. STA $400C. u" s! T0 P, r
  1531. STA Sound_Bar + $0C
    7 Z/ u% R3 j+ o6 r% [
  1532. RTS( B3 }5 [) S6 p6 o
  1533. 8 w& _$ _) t6 {: f2 u2 a. B: [. M
  1534. .ENDIF( N3 G& {: B+ Y; \# }- y' W
  1535. 6 R/ O. j; {/ K, v! O" m8 }# M
  1536. .ORG $FFFA
    4 k% @" y$ X1 X$ N6 Z; p
  1537. .WORD NmiProgram1 P7 Y' _( |' k. H) x
  1538. .WORD ResetProgram
    % G# b; @: z. P
  1539. .WORD IrqProgram
复制代码

9 j0 S, m6 W7 |4 ?8 T: L6 E. O# |' u$ q) o, D
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1324 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3320 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 08:53 , Processed in 1.141602 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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