EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
& R9 Q0 A9 R' y' D9 C7 l( }1 G. C2 r; _
1.魂斗罗4 G* a6 l0 i3 u! @+ c' W
2.超级魂斗罗  L3 g. G4 X# Y6 G2 T
3.赤影战士/ _9 H0 J% d* d! K0 E! a6 t
4.忍者龙剑传24 u4 [* j& @! s5 a
. z% c* W9 c9 l- a
6 X1 Z3 _( _7 I$ w5 L5 {$ C

" c1 R% V; j) N
. y0 N( w- t3 ]& n  o源码:) P. O5 ^8 c) |- M, T( }7 J. H5 u# D
  1. ;[FC音乐][播放器模板]* Y4 X7 {! ?- q9 A; H4 p. Y
  2. ;FlameCyclone 20230710
    ; q5 o) }& _8 u7 o
  3. : \: U4 K& ?# l# N2 S
  4. ;文件头3 H, x2 i. N- C/ Q+ g4 f4 }) i
  5. ;======================================================================# F) X- s' \' H; `! V8 T) }# P( ~# \
  6. .INESPRG 4                                              ;16KB PRG 数量
    ( H) n# b6 f% _  Q
  7. .INESCHR 0                                               ;8KB CHR 数量4 C) I( `6 x. \7 g( Q
  8. .INESMAP 4                                                   ;mapper 46 z! }. z* ~6 H. h  T; p( p
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直( k1 G' s+ h) g. X
  10. ! O. O2 l) V" x9 v) o! P
  11. ;==================================================1 o; O; i& g2 f
  12. SOUND_BAR_SHOW_ENABLE       = 1
    , s! w* E: B( O+ n9 C
  13. ;==================================================' Z+ _/ G: J. O; y2 y0 X. a
  14. BANK_DATA_MASK              = $07' l. x( k  f% L/ Q
  15. ;==================================================  X  m3 V9 {& L1 `0 U' a7 O6 k- J5 Y
  16. SOUND_DATA_BANK_0           = $003 D' f+ r9 D, l3 ~" h! f+ X
  17. SOUND_DATA_BANK_1           = $01
    * ?. ^, W9 |  h/ c$ h( O
  18. SOUND_DATA_BANK_2           = $023 M* N( Q. I& O" n8 {. |0 V* a! u
  19. SOUND_DATA_BANK_C000        = $06
    $ U; ^) _$ n0 L1 M( t% b/ ^2 n  x6 v

  20. 8 o1 s% |/ ^9 d% m. `. b
  21. ;-------------------------------------------------
    * {( V* V1 \" H) S+ ?! P- O: F5 T& B
  22. CHR_DATA_BANK               = $04
    0 {' |& t  `' D6 t; G* ~7 Y
  23. CHR_DATA_ADDR               = $A000; d, X- W3 l1 N2 v# K: H
  24. ;-------------------------------------------------
    ; |% g/ t/ ^: ?$ t: Q/ N2 F+ d
  25. PROGRAM_BANK                = $05
    2 C- |- ?- A5 r- X
  26. PROGRAM_ADDR                = $8000
    6 [: F8 L1 G! D9 g6 S/ n2 F, }
  27. ;-------------------------------------------------7 k1 i& L4 W( i
  28. RESET_BANK                  = $07: I; \/ E0 H! x5 G4 `# J
  29. RESET_ADDR                  = $FE00, u$ `8 g* Q: N- o6 l- s
  30. ;==================================================1 B9 |& f1 v+ T# B3 W* s% E
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    , |$ w, a  }9 Q$ h0 r/ Q
  32. Music_Play_Addr             = $813C ;音乐播放地址
    2 g/ K5 V+ z' ^/ D" I. g
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址' T# i- Q: E) e7 k7 h
  34. ;==================================================( F# x- c# I! e  k
  35. Music_Song_Total            = 039  ;全部曲目总数& ^% {- G* E$ t# V3 {
  36. Music_Start_Song            = 007  ;初始播放曲目( I2 d) @& }2 c  m+ }1 m" d
  37. ;==================================================
    - q$ |1 y' S6 r
  38. % g4 G5 x# ?# E, x* @
  39. ;==================================================- `$ `% \0 q3 d8 A' G8 K
  40. Title_Text_Pos      = $210D ;标题文本位置5 s& a$ V( c* W, R0 k2 w2 C- x3 f. s
  41. Author_Info_Pos     = $2284 ;作者文本位置: p0 Z, L! b% w) v% R" ]5 N
  42. Date_Info_Pos       = $22CB ;日期文本位置
    : M+ _! p+ r& F" e
  43. ;------------------------------
    7 v0 l8 v- p; W& C) k3 E5 Z' U2 m
  44. ;------------------------------
    . n5 `- U, P4 B9 I* M8 N/ C
  45. .IF SOUND_BAR_SHOW_ENABLE
    ) b4 C- d9 b5 i  W3 ]; y' q
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    ' `  a( ~& O7 t
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    5 z% n" O7 V. {5 f- j( F" r
  48. Play_State_Pos      = $2233 ;播放状态位置
    ; b" ?/ G0 V' L! Y, L; g
  49. .ELSE9 n0 t6 u! s! M6 b& h
  50. 0 y8 n9 L' j) @" J. w1 ~* R
  51. .IF Music_Song_Total > 99
    0 N: F, h: ?) y3 H+ u
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    ' V1 {0 ]3 v6 L
  53. .ELSE
    ) b0 M$ f$ m, i* O- q2 m2 B9 V2 l
  54. 1 _7 n# y" `8 k- c0 ]( ^! e; ~$ H  v
  55. .IF Music_Song_Total > 9' m3 u: R7 O/ ^6 l8 h- f
  56. Play_Index_Pos      = $21AD ;当前曲目位置' a  ~3 f% l7 x' Y4 F' y
  57. .ELSE
    / ?5 Q. B: h* D' c' y
  58. Play_Index_Pos      = $21AE ;当前曲目位置3 `* s4 _& J) \% M3 s. A  A0 ~9 q
  59. .ENDIF1 h! @* x& K& f$ M( [& f: a: H* S

  60. 2 c9 o* w; i; O! n
  61. .ENDIF
    " c2 M. Y$ V0 l- J' h: h7 D
  62. 6 \/ X  k! L. _: Y7 U

  63. / r# D  J9 N- }' n; o
  64. Play_Time_Pos       = $21EC ;播放时间位置
    " ~  T9 H  J8 w6 ^9 i
  65. Play_State_Pos      = $222C ;播放状态位置
    . S9 T# ~, h* g6 d
  66. .ENDIF' @4 _0 M! H2 v
  67. ;------------------------------$ f' _+ v4 U: S! n+ M3 a7 g: P& Z; }
  68. Track_Name_Pos      = $216B ;曲目文本位置
    , r1 S- o7 B5 {8 R  S
  69. Sound_Track_Pos     = $21A5 ;声道文本位置8 }/ M( K4 z/ V9 |6 N0 C, o6 ~
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
      {* H* j; L! a3 C* C
  71. ;==================================================
    6 A2 \4 M2 X# R- C8 F$ o
  72. Scroll_X = $00
    ( J- S* J0 A: u
  73. Scroll_Y = $06. {/ t  o( M8 E5 N3 w% H* j
  74. ;==================================================
    ! h$ W% Q. B, l3 z/ J
  75. RAM_Cln_1       = $0100' j" D' a! _8 e% x8 n8 E
  76. RAM_Cln_1_Size  = $80
    , \3 L; v# x* b. i% \
  77. RAM_Cln_2       = $00E0
    : Z# b) m  B' r( X$ g3 ^
  78. RAM_Cln_2_Size  = $20
    # `# @! L! E$ Z1 Y
  79. RAM_Cln_3       = $00E0( ^5 \, B+ D# i. f' Z5 C5 m9 \
  80. RAM_Cln_3_Size  = $20- }) c9 C6 V& p6 ^$ g# p" h

  81. 3 O! ~$ ^3 G3 D  w8 J
  82. ;==================================================0 j5 W0 O0 |" c6 x9 K
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    ' w4 V/ t  p4 E, \
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    , e# H: e& ?6 ~4 n$ p" Q# g
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位5 g0 |  I( W0 S' d/ o
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1$ N, N( f; s! e  s) }- k5 E
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
      l7 ]; Q' z% W0 @' C
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 : T2 ^: F/ c- w2 g- f5 e
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ' v0 P7 u8 H0 V# e
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 " I1 @0 B/ L8 b- D, ?5 N& o
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    + ]: }/ N% Y/ n
  92. APU_STATUS              =   $4015   ;声音通道切换  M+ i' [, g/ K* q: C# g$ N/ n
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通. Q6 E! U* y# C6 P& R- u
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    % E# {, {3 T6 O# I. o
  95. ;==================================================; M( Q5 i* F/ Z# M, f% p
  96. MMC3_BANK_CTRL          =   $8000
    # }3 j6 a) W: i0 r3 o
  97. MMC3_BANK_DATA          =   $8001: P. Q! H6 Z2 M! x! z7 }/ u
  98. MMC3_MIRRORING          =   $A000( P' f: u  O5 u4 }* t9 c( f
  99. MMC3_PRG_RAM_PROTECT    =   $A0011 z8 w2 y* p/ C" e* |$ r$ k1 b6 e' w
  100. MMC3_IRQ_LATCH          =   $C000
    & |) G# W; j) E7 d( c5 s
  101. MMC3_IRQ_RELOAD         =   $C001
    : t$ m4 H+ v/ v6 N8 c1 \* t, i
  102. MMC3_IRQ_DISABLE        =   $E000
    ( b8 ?+ r) |2 O  t7 i/ X5 y
  103. MMC3_IRQ_ENABLE         =   $E001
    % x, \% @- A, f6 K; m

  104. / I6 b/ A7 F" e7 O
  105. ;音乐数据块; |1 ?" ]* N; q+ P4 Q; N

  106. # ?- J1 F9 Z; a) ?1 U( p
  107. ;======================================================================8 T, u% \* m. [: \) X
  108. .IF SOUND_BAR_SHOW_ENABLE+ W5 }% B% o9 F, q" v# z. q
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    1 Z5 d5 O4 }; o: `( g/ z
  110. .INCBIN "sound_bank_bar/music_data_0.bank"0 V4 |9 W* U* o- J6 s) Q/ S( v% @
  111. 6 Z5 [) W! X/ E
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    1 ?$ o% N% Q: H% F
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    3 J4 _5 ?# Y3 L, B) O' _1 M/ X. N. Q  }1 `0 E
  114. % k* x- o( I+ ]$ L2 ]5 t) a0 R
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK% R6 G* F0 o1 m) s0 J
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    - u5 e6 t9 }% P$ r  v9 \0 h
  117. # n. C  }+ F  L+ A% c9 f
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % R; g; z- _- t/ `5 T* v
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    / B5 U+ ]. v5 |. v5 W
  120. 7 D5 K& A4 }% x1 \% B
  121. .ELSE
    $ g: s6 B7 I# i7 N/ B
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ! c, x  G* E0 y
  123. .INCBIN "sound_bank/music_data_0.bank"
    2 W0 p8 f& y# o0 ^& `/ L& p
  124. 9 ~6 ], b  T' h2 S+ D  P6 _
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK2 K) N* f, }! s1 g
  126. .INCBIN "sound_bank/music_data_1.bank"! f8 q( k; r( v  D  p" ?2 U

  127. 8 e+ X3 p$ j/ g' G  X
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    / ~) |/ Z- `5 ?7 a5 U
  129. .INCBIN "sound_bank/music_data_2.bank"
    2 |2 H2 N! C3 h2 i, o! v8 G

  130. 5 C# |, {, c+ y$ x: t
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
      ]% }) P* v8 q0 L# s: G. y' @
  132. .INCBIN "sound_bank/music_data_3.bank"  z" {* A* \8 R! t# h
  133. .ENDIF
    9 @4 f- P5 S8 ?- d9 d2 i# V- ]

  134. & r5 o" h- Z% [, v* i5 B
  135. ;CHR图形数据
    4 a( S9 }. T9 S+ \
  136. ;======================================================================+ e# X% m0 p* W; a
  137. .BANK CHR_DATA_BANK# k! S/ P8 G1 }% m' {. p
  138. .INCBIN "chr_bank/chr_data.chr"0 O; D8 K( z; l* e" S# L* B# F1 N
  139. ! ]  l5 `6 z' b" k: B# a5 h/ B
  140. ;==================================================  k  a( D1 g1 a0 ]! y# e4 W, H
  141. PPU_Addr        = $0300
    ' V+ X# p9 B2 u! `; S
  142. Palette_Addr    = $03C0
    / z& y) v. b+ w
  143. Sound_Bar       = PPU_Addr+$E0
    & {0 `8 ]5 ^5 O- F$ F
  144. ;==================================================+ {$ {2 z, H1 r. |# A2 t: C4 Y
  145. Palette_Update_Addr     = Palette_Addr+$0D5 X2 E- m3 T( K( T; a- I
  146. Palette_Update_Max      = $2C
    7 C' F$ X' l: f
  147. Palette_Update_Min      = $21
    / M9 S! G8 o0 }3 x, B$ E& ^0 w5 Q
  148. Palette_Update_Interval = 603 |- [) b4 c& O! k4 |  V
  149. ;==================================================/ x9 @2 t+ ]. t% N0 Y2 ?# ^4 O
  150. Sound_Bar_Cnt       = PPU_Addr+$F02 U: {# x* M( Z8 i' f1 U+ {
  151. Screen_State        = Sound_Bar_Cnt+$01
    + ]6 P3 k" q& g. a2 G
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    : Q: w1 k9 h7 i7 a: A; v
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    5 f( Y/ {  I2 w: X. q5 t
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04% E; o  C; _# \( d  R, f
  155. ;==================================================0 I( C2 Y; @' A- t! E
  156. Data_L              = $70( Z( m1 a2 s4 I2 e( @
  157. Data_H              = Data_L + $01
    , }, M. t: P% u0 I
  158. Data_Cnt            = Data_L + $02+ r  T( k7 V" @, F
  159. Data_Buf            = Data_L + $03" ~( `! i* g4 \* D: \3 g( H
  160. Time_Wait_Cnt       = Data_L + $04
    ' a+ d; x: H1 K! C
  161. Palette_Wait_Cnt    = Data_L + $05
    ( K3 L5 l; l) i* s
  162. Palette_Update_Flag = Data_L + $06
    4 v0 R9 g8 t6 a% j0 ?" ?9 U+ S) y- m
  163. Show_Track_Name     = Data_L + $07) W, p0 ?2 r6 c) Y8 u0 w
  164. ;==================================================
    : I1 v, ?4 R1 B: F8 P7 Y& I$ k
  165. Key_Keep            = Show_Track_Name + 14 U! R4 U/ c6 r! n, a8 f! ?. Z
  166. Key_Once            = Key_Keep+$01
    ( R4 t; i1 R- t" ?/ N
  167. Key_Kemp            = Key_Keep+$02
    / Q- L# x7 ~# B+ w
  168. Key_Temp            = Key_Keep+$03) _, P) ?3 j8 \+ j  I9 t) @
  169. Key_Getv            = Key_Keep+$04
    8 t  B8 V9 b$ |. v6 Z5 k
  170. ;==================================================! n/ z% f5 x9 L; X: A0 P
  171. Music_Cur           = Key_Getv+$01
    / r+ l% K' o, H* e6 k" T. w
  172. Music_Last          = Music_Cur+$01
    ; T: V# {# \! t. f4 @6 u, q$ X
  173. Music_State         = Music_Cur+$023 i0 h/ L$ t) k. O% @
  174. ;==================================================3 p* G: Y. v( E
  175. HEX_Data            = Music_State+$018 b, Y! W1 d) Z8 @) n
  176. DEC_H               = HEX_Data+$018 S' y6 T' B: G/ y3 v- i; T. U9 _
  177. DEC_T               = HEX_Data+$022 Q+ x( T% k4 L/ a& u: o
  178. DEC_L               = HEX_Data+$03- p: Y* q; I5 n
  179. ;==================================================
    7 d  o  v2 o- [; V+ w3 c4 d
  180. Time_S              = DEC_L+$01
    3 p; H" l7 x, x2 G
  181. Time_M              = Time_S+$01! B& e: f; Y* j& U" I" G' V) u
  182. Time_H              = Time_S+$02
    / q1 I3 n) {1 q; s) |5 O7 P& k
  183. Time_Cnt            = Time_S+$03' V+ k4 x% x1 I# g0 Q% I

  184. % |/ y1 g5 r& ?0 i
  185. ;==================================================
    0 a& W) p! L9 F& M
  186. Music_Bank_8000 = Time_Cnt + 1+ r& _1 N: Y; I; [' o
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    ! w4 s2 z, u1 e: O1 @1 a/ ~
  188. ;==================================================
    . @0 W0 [+ D) _, v% ^! I7 R7 L4 N
  189. / u& p, c- r( S( i- i
  190. ;======================================================================! _1 x) b) g4 p  a7 ~
  191. .BANK PROGRAM_BANK1 U! A: K# z7 C$ B% n2 K; M. Z
  192. .ORG PROGRAM_ADDR
    0 O7 a7 B9 ?* `+ K

  193. ! d) h$ O0 `( p9 v
  194. ;==================================================1 c5 [9 x4 T9 p  d
  195. NmiProgramProcess;NMI中断程序处理
    ) A; c9 ~5 n& T
  196. ;处理PPU图像' T  x% A1 H4 `# P
  197. JSR PPU_Proc' x! |- J! R, U0 y, t
  198. - _" W& b0 f& m1 x0 r4 E5 A
  199. ;启用NMI中断
    ( v6 v5 s- ?3 N! h( _  x
  200. LDA #$80. R8 I  i9 h) M" M1 C
  201. STA PPU_CTRL
    - g! U# w; r& S! f
  202. : i3 H: @: x. y" K6 \5 V
  203. ;更新调色板) k, B) {+ u2 c% f" X* y
  204. JSR Update_Palette_Data6 R" c5 H$ x* y+ q8 M; s2 b- i8 k
  205. ( R8 X( J1 s2 x: K" H
  206. ;显示时间(缓冲)
    3 B4 G# O+ W# Y3 N# F+ D* `
  207. JSR Time_Show, k3 O& y# r& _8 J6 w2 p

  208. + G' L. |$ a. `$ k9 i6 J( a$ E8 c+ W
  209. ;播放计时
    * q; ~  V+ Z: w2 n" Z4 m+ C. ^
  210. JSR Time_Count/ X4 U; f; l/ Q! q% d$ Z
  211. 4 w3 Y$ F9 C2 L% _" @; C
  212. ;播放声音
    2 s+ Q) ~; l6 [' U6 P
  213. JSR Sound_Play
    + I/ R3 E9 w* |  F3 d1 K1 n, A8 D* ?  _

  214. " C" `" C7 g  c! {. H
  215. ;切换音乐(手柄触发)9 e% q- p6 E0 {  O! X
  216. JSR Music_Switch
    - _2 v$ k2 R/ y) l* e2 W
  217. 0 {; j* v' R5 ^1 V0 B' D
  218. ;音乐显示(缓冲)
    # p, i& l% A3 z( D$ O. t% Z9 N  E
  219. .IF SOUND_BAR_SHOW_ENABLE
    8 M, Q( Z0 V4 ~; c
  220. JSR Music_Vision
    6 V' T* U" w  E2 m8 M
  221. .ENDIF
    6 }8 U: _  v8 L: g! {, `
  222. # \# D0 A; [2 q6 j' a" \- B# i
  223. LDA Time_Wait_Cnt( e- ~+ a3 V* i& Q* ?
  224. BEQ NmiProgramProcessEnd  s) S( e8 X$ M% T- D, u: {# G
  225. DEC Time_Wait_Cnt4 `+ {0 c' F. ~* R
  226. NmiProgramProcessEnd
    # o: c" ]# b5 _: `: W( q0 D
  227. RTS+ O3 B3 L3 |' _! }' E
  228. , Q& P- F7 h* o6 J
  229. ;==================================================
    - d9 v  o6 T& @" n2 G  r
  230. ProgramBegin;主程序6 V: F2 ~$ R% ^; m
  231. LDA #$00
    1 l- W. O% X4 h
  232. STA PPU_CTRL) x8 ?1 ^5 n* g: y
  233. STA PPU_STATUS
    % b' o) V2 Z% K
  234. STA PPU_MASK
    5 r; f! r9 T$ ^  D9 \; M
  235. STA APU_STATUS
    3 j% ?% {2 t2 ^$ y6 n
  236. STA PPU_SCROLL
    ; \4 E" h* U5 r% m. A# O5 R' {
  237. STA PPU_SCROLL
    ( |* ?% F# u3 t6 C* W4 g
  238. LDA #$C0
    ; D4 o1 M) P9 R) T7 ~
  239. STA JOY2_FRAME
    , }* Q+ f: b7 u6 O3 t9 N  \

  240. $ R. {( }: }- r9 Q. t
  241. LDX #$FF
    " z$ I/ u7 f2 _& x2 n" I
  242. TXS; G( w# P" v) w) E: ~0 R
  243. LDA #$00
    , J9 }2 t: B4 `  n2 w2 Q
  244. STA PPU_CTRL
    + J; g. l  y- k) g- c" r' |
  245. STA PPU_MASK" }  V9 s7 s1 E
  246. STA MMC3_IRQ_DISABLE. _( D. s- d% [8 h; K
  247. ' w# ?4 y: F% O  }" J% [1 ^
  248. ;==============================
    # y2 v$ _8 F9 n' R* x4 x/ N4 @
  249. ;调色板清空! z4 d6 v( r8 Z% @/ u) y
  250. LDA #$3F+ H7 N: f) ^- ~- X7 V9 f8 K8 ^
  251. STA PPU_ADDRESS9 |9 k  u; W/ U" Y1 e: Z
  252. LDA #$00! w* ]. ]! X2 N7 s$ f4 B7 [
  253. STA PPU_ADDRESS
    / D0 J5 r9 X  z
  254. LDA #$0F  M  i+ [# @% q! J
  255. Palette_Clear
    ) ^* E  R: {# o# v5 u: l7 {- {
  256. STA PPU_DATA
    ; U) Z4 B  S( q- b
  257. INX7 K9 K/ ^# K2 j' f/ A0 {6 y/ ^
  258. CPX #$201 k0 x% ?, w/ D8 W: d; I, V
  259. BCC Palette_Clear6 a2 O: W8 q5 o$ s& G
  260. LDA #$00) V# b' B: z3 G7 ^  e. d
  261. STA APU_STATUS
    8 P! }. o) y' |3 ~; m
  262. ;==============================& W0 G' n  E- R8 Y7 x' ~- x
  263. ;初始化背景调色板
    ) \% J: Y0 |( _' f
  264. JSR Set_Palette_Color
    ; k6 p* a, j' z
  265. JSR Set_NameTable_Attributes
    " B( a- _" b; S4 J
  266. ; I: G9 w( D) }& b6 n: z0 j  J
  267. ;==============================1 Z; w  B2 t2 G1 [
  268. ;RAM初始化
    # ?; ~! s' V( O0 ~
  269. RAM_Clear_All
    3 W8 u7 u& D1 m. B
  270. LDX #$00
    * b7 J% I8 U2 o
  271. LDA #$00- F* j5 {9 M, b" f+ y
  272. RAM_Clear_All_Start
    " [! \" B7 B: J  k, G4 x3 `
  273. STA $00,X
    ) B& o( p* [+ k) i4 _7 R$ [% c
  274. STA $0100,X9 f; K7 k6 W7 U" O
  275. STA $0200,X
    ' k0 I, m2 n6 c8 j
  276. STA $0300,X
    - c2 Z# w/ T4 H$ Z; u1 R
  277. STA $0400,X$ `4 O3 E( P0 o% Y3 o5 E# ~
  278. STA $0500,X& j6 T+ ?% [) g" |1 X% c" @1 y
  279. STA $0600,X
    5 h! t4 b3 V+ q. b3 l
  280. STA $0700,X
    % e- H, ~0 F2 q# _
  281. INX* d1 q' ^/ D+ ]6 n6 _' e) l7 V
  282. BNE RAM_Clear_All_Start
    3 Q, A" `' z  {

  283. 4 \  l( X' U' s) {
  284. JSR VramInit
    2 i% x6 g9 g0 d% S: G- R
  285. JSR Init_Palette_Addr
    0 K$ r8 D; \: X5 J; H

  286. 4 N- Q- ~% j* B+ a' X
  287. .IF Music_Reset_Addr
    & Z8 Y( n0 y* j
  288. JSR Sound_Reset$ l( o2 C8 y4 ~/ S4 I) [# j$ w, R
  289. .Endif
    # Y# h& f! W3 \0 |; g7 x8 @# J+ t7 k
  290. 3 m0 _! E5 v/ n, l3 J) e
  291. LDA #Music_Start_Song-$016 U; i/ R4 ?. d" p. G
  292. STA Music_Cur
    + O0 E  W8 `9 ~& x

  293. . M( ~. i$ q6 T1 W; K
  294. JSR Show_Music_Text9 _2 o4 f8 C) L, k/ l
  295. ! }3 ~( k9 |: @* ^# R- Q" C
  296. .IF SOUND_BAR_SHOW_ENABLE/ i7 \+ f6 t* }2 k8 |0 W7 A
  297. JSR Sound_Bar_Text_Set
    $ z; F6 u5 M) d/ o, n' l6 r
  298. .ENDIF; t+ \+ @1 c& ]6 Z& Q

  299. , D% z% ]# X( S( Y* A' }
  300. .IF Track_Name_Pos
    ( _4 b8 B$ Y, h+ j
  301. JSR Show_Track_Info6 x* l* I  A- s. s( T) U
  302. .ENDIF
    * A- c7 o, K( w5 b4 K  `. I

  303. . X; F2 Z& y" k1 W
  304. JSR PPU_Proc
    % {6 L! _! V! D9 v" l$ p

  305. , N: D4 A2 R* u' T# j
  306. LDA #$0E
    ; j2 ]9 N7 R8 T5 F9 p# V) d& U
  307. STA Screen_State
    5 z0 G' o( I" S- M
  308. ! n& `% W% S1 a  _
  309. JSR Sund_Bank_Init& |. m( T" ]3 ?- m, X) ]3 |

  310. / l# i  X+ X0 S, ~- b: I
  311. JSR Music_Show
    / B. f/ L6 n: W* C
  312. JSR Time_Show5 K5 }8 n8 s; p+ n, J' m! L  }& r
  313. JSR Music_Stata_Show
    9 M4 _' X- t! s" P
  314. JSR Time_Delay
      g! _  C9 |) y: x$ H2 ^
  315. : v- U0 q6 M: ~

  316. + q& B, g; j$ X4 d& F+ D- a$ K
  317. LDA #$806 r4 P+ _( Z7 c/ H# R8 T
  318. STA PPU_CTRL6 |/ j0 r) K  ], R
  319. ! u3 B5 Q2 ]8 C
  320. LDA #$20
    " c. i+ k6 L+ Q, i: J$ L
  321. STA Time_Wait_Cnt
    5 V6 [0 G+ s- z

  322. : U  D9 \8 q# e- l; L2 `
  323. Wait_Time_Over2 c4 X6 R+ _: h4 A5 Q
  324. LDA Time_Wait_Cnt* g: f# `, t( ]/ M) Z, w1 `8 a: ^
  325. BNE Wait_Time_Over
    5 T* F3 X6 M) V$ N. [( n; `

  326. 0 u6 M& i$ U( e$ l
  327. LDA #$1F, V# r. E1 K0 S# a. K( L7 F
  328. STA APU_STATUS" \5 U& D. Z3 K8 s) ]
  329. LDA Music_Cur
    8 z6 n6 q) R; N" ]' M
  330. JSR Sound_Init
    , {9 Y$ u5 F9 s, ?! O% O+ w: a
  331. + p4 d8 s7 A6 j
  332. JMP MainLoop9 M5 h: P! d4 p2 C, w7 I" ~

  333. : `$ @6 g) X, U
  334. ;==============================7 r3 ]$ {" S1 M* a5 e( s& e
  335. Time_Delay;延时等待
    3 K7 w- t( r9 T4 o. T+ x' A
  336. LDA PPU_STATUS
    4 {, Y% L3 ]/ b
  337. BPL Time_Delay
    + T0 I. W; ^, m
  338. RTS
    3 q( [0 P& {, ~$ `: [, m+ s
  339. $ \% Z8 G" }: \/ p( h# {
  340. ;==============================* l( K  M0 o& x
  341. VramInit;初始化图形内存* }1 b9 |1 d2 e7 }! C+ r6 g" B+ v
  342. LDA #CHR_DATA_BANK( u0 {$ U# {1 I1 Q1 B& q' ?3 c* z
  343. JSR SwitchBankA000$ Q# X9 F" x1 A$ Q8 W& T* J2 f% h
  344. LDA #LOW(CHR_DATA_ADDR)
    ( P5 R6 U* P4 a8 [7 q8 f4 e
  345. STA <Data_L
    & r( d) R0 N1 V3 q: V+ g" N
  346. LDA #HIGH(CHR_DATA_ADDR)
    4 e5 @' y( U  G1 M/ H& s1 S
  347. STA <Data_H
    : ?* T$ [1 V5 F! \
  348. LDY #$00+ \4 A7 [1 u$ Q
  349. LDX #$20
    : ^9 [, U# i+ L, _2 ]- Y' u
  350. LDA #$00
    1 L  m9 c+ M- Z1 b( n9 ^  |, R
  351. STA PPU_ADDRESS
    1 W3 j: Z. y) ~/ z
  352. STA PPU_ADDRESS
    $ c  V6 V9 w1 ^) [7 N) H6 {
  353. VramInitWrite) L! K, q8 t. I# B3 z
  354. LDA [Data_L],Y
    $ v2 p2 c2 e1 V
  355. STA PPU_DATA7 g' z& I5 ^. j, a. {+ Y- P
  356. INY6 C; b, m% p: {9 G& i% J
  357. BNE VramInitWrite0 v$ ], x1 s% O+ ]! q8 U( [0 k
  358. INC Data_H$ @0 @* ^6 ]4 L* Y! A
  359. DEX
    ; ?4 S: \! b: {, K; q. c5 b& L2 \
  360. BNE VramInitWrite
    , ~$ s. f! r* c9 j
  361. RTS' R& g2 G6 ^" v! h# T& Q5 S4 C5 D
  362. & I1 N' s) o; r2 @/ _
  363. ;==============================
    6 C. T/ U% j& r) M! j  e6 F& o
  364. RAM_Clear;RAM清除
    ; x9 Z+ c7 H* |% k
  365. LDX #$00
    ! D" M2 H( I. X8 c' s
  366. LDA #$00
    + }: J5 p  D7 |/ [% T9 L0 U0 F) T- q8 Z
  367. RAM_Clear_1
    7 D* W2 I* j' `0 o+ A
  368. STA RAM_Cln_1,X
    + J2 z6 z; P2 ]% W/ \. T6 X9 \9 I: p( @# t
  369. INX
      d+ G$ f2 V" J8 K$ d4 S
  370. CPX #RAM_Cln_1_Size
    # U0 F+ O. f. M' r) n+ t
  371. BNE RAM_Clear_1& e# u4 G5 m8 q( Q- Y- H
  372. LDX #$00! Y1 w8 r' {% u* _/ r0 K
  373. RAM_Clear_2
    # @. k7 ?/ W; e+ f8 q2 C
  374. STA RAM_Cln_2,X
    , J# {: X- ~0 V" g
  375. INX
    % K$ P* f0 _  M3 N) C1 Z' u
  376. CPX #RAM_Cln_2_Size
    5 ?, N% L4 y% _: F3 h
  377. BNE RAM_Clear_2( J' j6 @4 ~9 G6 F, u8 j
  378. LDX #$00
      }! r% E5 f( M3 A6 G; T7 V9 R3 {
  379. RAM_Clear_3
    7 n  [! B$ y, R! @+ Z8 j1 ]
  380. STA RAM_Cln_3,X2 X5 g$ d* A& c% x6 k0 o0 l4 L
  381. INX
    : G0 J9 y  e1 E' F8 ^& \) v' G
  382. CPX #RAM_Cln_3_Size& W& d; t! F/ E0 V: i, W* @' V% \
  383. BNE RAM_Clear_3
    6 S( ~6 {" F8 I0 B7 e$ w% z
  384. RTS. g6 f, ~  @7 y
  385. . ?. O2 I) b6 o+ S6 N
  386. ;==============================
    ' ?& s3 n* e: O
  387. ;音乐切换
    ) L% i' s7 o5 M% c% W+ I, E
  388. Music_Switch
    " r6 Z  n  l* {& [9 |: y7 w# d
  389. JSR Key_Proc
    7 `; z8 j7 G" T0 v% |+ S* T; k, S
  390. LDA Key_Once7 P+ D/ b8 a; n$ T8 a# [- M: `
  391. CMP #$10# A9 m4 D# t* S( O
  392. BNE Music_Start_SongStop
    ) c7 a4 I; f; I2 W
  393. JSR Music_ReSet1 z0 R. X( D* j

  394. : T5 z8 L( \0 n4 b6 ^1 E- N
  395. ;音乐停止
    1 H0 \" Z! E% ]( h, [. Q
  396. Music_Start_SongStop0 k+ J: {+ }( L2 ?1 b3 N
  397. LDA Key_Once4 N/ b/ ^" K: q5 D* Q
  398. CMP #$20
    , u3 c- [8 N7 [: Y- U+ L# A
  399. BNE Music_arrow  t8 [4 s- C( c8 y& P
  400. LDA #$01
    * q3 R/ `, }3 w. m' v
  401. STA Music_State
    , t! d& W4 B' R# H( A4 g4 Q
  402. JSR Music_Bar_ReSet
    ' e) m* k2 {; b; Q
  403. JSR Time_ReSet6 K- [5 d5 ^# \
  404. JSR RAM_Clear0 W2 [' h9 E3 i+ R- M! [( L! U
  405. JSR Sound_Clear0 x" Y0 V; U. |# h+ f3 o8 l  |" R
  406. JSR Music_Stata_Show6 b+ @: _' V% v5 U; l
  407. Music_arrow. E1 t- N/ u/ Y( u0 ^  A9 T
  408. LDA Key_Once
    / U* _% ^5 e9 h1 C) Y
  409. AND #$CF9 ~# H* e: o8 V7 \( t
  410. BEQ Music_Switch_End* `7 `3 p9 j! Y" k2 H. c
  411. JSR Music_Number2 B" T# k6 Y$ S9 Q9 L: d) p
  412. JSR Music_ReSet
    ; m$ ^1 z! e8 z- f) Q; u7 v1 R+ r
  413. JSR Music_Show
    8 g2 z, D" ^+ H8 k5 O8 a' l
  414. Music_Switch_End
    ( O& q, R0 s. G! M' \- F
  415. RTS
    0 W) a, F* a. y9 ?1 R# U
  416. 3 v  c. s0 p7 V
  417. ;==============================5 G( j  B6 _+ a6 U' Y
  418. ;音乐曲目切换, M$ y, N& C% |+ Q. H9 x
  419. Music_Number' |0 D. [8 E( N
  420. LDA Music_Cur! L( K1 e  b! c3 d  F* U- @( W
  421. STA Music_Last. [' V* }; _& t
  422. Music_Decrease  J: S7 S. X4 O6 r' }
  423. LDA Key_Once
    * \& h/ g( @% p" C+ n3 I  m. Y$ a7 U
  424. AND #$423 {% s* X" Q3 s7 \' I. s
  425. BEQ Music_Increase
    # \3 a* E2 U/ |5 k) O- _) ~" w3 |
  426. LDA Music_Cur
    $ N( c1 v  q# n
  427. BEQ Music_Increase" i8 O! z% N9 E8 X. }( t
  428. DEC Music_Cur
    & |/ X4 O/ _: |) o2 a
  429. Music_Increase
    5 l6 u' e# d# ?! T& U) A: E
  430. LDA Key_Once: R2 u! U" `8 M6 \
  431. AND #$81
    . Q* `. a! Z3 H
  432. BEQ Music_Decrease_10
    # t0 M" O! T! H' _$ O1 h
  433. LDA Music_Cur
    5 _8 `  M0 ?6 P( X0 E1 ?1 U
  434. CMP #Music_Song_Total-01  C% d: w3 Z" ]: D8 C* |8 k
  435. BCS Music_Decrease_10
    ( v6 n) D$ C% }4 A3 Z+ v3 B! E
  436. INC Music_Cur
    : \/ t0 x+ l* {  ~& f' k
  437. Music_Decrease_10
    6 A6 _2 g' {& }+ ]( Z5 `; \4 o
  438. LDA Key_Once
    5 T9 s0 E. p1 V) R7 N5 g# d
  439. CMP #$04
    3 R; }# X, N& j0 ]- d# }  m4 U
  440. BNE Music_Increase_10
    9 C( n, U: t% ~
  441. LDA Music_Cur
    , H# b+ K3 V- F/ G. H6 C7 d
  442. CMP #10' ?- ?! L9 @5 U! j$ u( a
  443. BCC Music_Start_Song_Min
    ) w1 Y) \, j" U+ n8 W7 N$ {
  444. LDA Music_Cur: K) x3 D8 s5 f" |0 _* F! V% g6 X
  445. SEC! I9 Q; _: D: s4 f' e1 q  [
  446. SBC #10
    7 j* m3 Y8 ~9 t" q+ @+ |
  447. STA Music_Cur
    * u  O1 V0 }" V1 ~& B
  448. LDA #$00
    6 j$ _+ n- `# e
  449. BEQ Music_Increase_10
    ; N3 B; k; X. A
  450. Music_Start_Song_Min7 M6 u: T, k: L0 }1 ^" e' R
  451. LDA #$006 P! P* V% u! u+ `% _
  452. STA Music_Cur
    % x1 q3 w: H# y, u1 U$ D
  453. Music_Increase_10* {( A% C6 U" v6 v- _/ t
  454. LDA Key_Once. {. n" N( ~: Q  F
  455. CMP #$08
      B) _+ e' Z! k! `5 N, D) B1 Q* D  A
  456. BNE Music_Number_End
    1 `3 t* e/ {" {9 s# I
  457. LDA Music_Cur
    : q% M) b# `" m( q
  458. CLC" I) p  S% V# x4 L  Y
  459. ADC #106 T! O2 n* X1 ]$ C% p. V/ _# _
  460. CMP #Music_Song_Total-01( O6 J" a" Y: v" B' G+ O, |
  461. BCS Music_Start_Song_Max* |% t6 B" V6 ]0 x9 {
  462. STA Music_Cur! {8 o  R/ ]. H* F6 C7 M1 `
  463. LDA #00
    , j' J1 X  W& l2 m
  464. BEQ Music_Number_End
    0 U7 W5 ?- d1 W8 F/ o! ]! S4 b4 u
  465. Music_Start_Song_Max: I  s; A. i) w6 ?
  466. LDA #Music_Song_Total-015 b: ?4 K& d7 S( B2 K. x% m  Y
  467. STA Music_Cur" f5 N5 U- ^* ^) ]
  468. Music_Number_End3 i& m- J+ q3 |  Q6 X' C
  469. RTS
    - w- |* `" i) U) S& f

  470. 7 `5 G# q% R5 }4 b" f
  471. ;==============================& x0 s' |% i/ J  k; d
  472. ;音乐重设* D! W) H4 j# Q+ V
  473. Music_ReSet
      E9 ~, |; i: _1 ]! r5 [. s
  474. JSR RAM_Clear2 Z. _$ h1 l+ ?* p/ D2 B: a1 u0 o
  475. JSR Sound_Clear$ b5 O0 G. s! t* z; a- F
  476. LDA #$1F
    ( [1 e0 U% M6 v0 m6 I( E" i! B
  477. STA APU_STATUS
    0 A( L' d# @2 f/ @' c+ A0 g
  478. LDA Music_Cur. D+ Q# F9 }# u% x# d; w3 `* S2 Q9 q
  479. JSR Sound_Init
    . I( V% U* g: G2 V3 y
  480. RTS
      `7 m7 k- g( l5 H: m  D2 |
  481. " L  _' |' L: u9 [; O
  482. ;==============================3 T3 q0 c0 P) S, A! f, i
  483. ;音乐端口清除
    8 f4 H# y- r4 t- y
  484. Sound_Clear
    : l- h9 j! M( g3 b3 L  U, f) y
  485. LDA #$000 ~/ g+ l, D2 x# z0 T! y6 q
  486. STA APU_STATUS8 |; @9 r# ~) T" y3 O  J4 c7 {2 ?
  487. LDX #$00
      o- v% P4 |" a1 |) e
  488. Sound_Clear_Start
    8 j! j$ o, }) I, o. v3 {
  489. STA $4000,X. V4 S2 W( C' r2 E9 b' Z1 b
  490. INX
    ' ^# y" X9 Z( s
  491. CPX #$14. U: L! w. U! L
  492. BCC Sound_Clear_Start" P0 `+ Y0 i/ i' L6 k. V/ l
  493. RTS
    * @; D6 H% x1 l: _& P) u
  494. 2 |+ u: F, |5 ^) I# p5 C
  495. ;==============================
    3 D0 @+ n7 r" h9 X
  496. ;按键处理5 i8 S' g3 r: q# Q4 z9 q# ]: N: w5 g
  497. Key_Proc
    - o& @9 W  r. N9 I
  498. JSR Key_Scan
    % ?8 ?; x; M8 w& p
  499. LDA Key_Keep
    % N+ P" y, Z9 X* f8 M7 h
  500. STA Key_Temp
    - m# ?, P; W% f% f4 D6 B
  501. JSR Key_Scan
    ( T9 Z1 t9 m/ h& M, H
  502. LDA Key_Keep
    ! N% g% l2 X- V; l& P- \3 ~! B1 N
  503. CMP Key_Temp" z! l! g* q+ t$ |
  504. BEQ Key_Get_Once: r# o& S; N1 c2 \) I' I! T* G$ @
  505. LDA Key_Kemp" N5 c: C$ g( ^6 C# z
  506. STA Key_Keep+ Z$ |3 z% V" y" V- e. B
  507. Key_Get_Once. m& j; D/ O: q1 [
  508. TAY
    ; a% ?3 J0 x! j
  509. EOR Key_Kemp$ F, L0 A9 G* P/ ?: ]0 C
  510. AND Key_Keep
    # h6 {2 m( N& O: T' `  Z' ^7 H) Y- b
  511. STA Key_Once3 J  B% Y' A+ L1 d* O
  512. STY Key_Kemp
    0 ~" O) f0 H! K) e6 E
  513. RTS0 n/ R' X" }4 h( V( {( N5 y! J
  514. ;------------------------------
    ! K, v: z+ M0 k1 N* X
  515. ;按键扫描; u/ f6 `! D- Q  V9 n
  516. Key_Scan
      Y7 N8 ?' z6 g8 K  k* D) k
  517. LDX #$01# Q+ b" b9 g2 b# g
  518. STX JOY1_FRAME$ i6 l3 ?8 y2 Q; o+ z% Q5 I. J
  519. DEX
    . z% P6 p% W6 L0 n' a8 L
  520. STX JOY1_FRAME
    6 @% c+ p' G/ X% T# U9 \0 O
  521. LDX #$084 y, e: N5 I" D+ ~( b( {
  522. Key_Value
      b9 h: V, A; U4 L
  523. LDA JOY1_FRAME
    9 X1 Y/ f. p3 ]) S' y# y& o* e
  524. STA Key_Getv
    8 R! M$ i* l  [
  525. LSR A
    : M% Y' X- G+ N' O$ O) U
  526. ORA Key_Getv0 z, a# W1 x" [
  527. LSR A
    1 l) a* A; ~  x- Z% P
  528. ROL Key_Keep
    / n3 D% Y5 ~2 ^8 m7 B) ?1 O
  529. DEX6 ]4 L/ ?; k; g1 V  W( j% R9 G
  530. BNE Key_Value
    + J$ P. B" Y& r  r; |
  531. RTS
    + \+ g3 `, o# e) }7 B/ k- I8 Y

  532. 4 l5 u; e8 S3 `
  533. ;==============================
    2 T; ?# B& Y' l* h
  534. .IF SOUND_BAR_SHOW_ENABLE
    ; D! p( \8 X# y; ~
  535. ;音乐条显示- h  a* E+ p2 a$ X9 y. F7 a/ N: U' \
  536. Music_Vision# }9 U5 U- r) W9 _$ t
  537. JSR Music_Animation
    , l; \2 d, d! W
  538. JSR PPU_End
    7 b" B5 N: _) y8 I- H6 f
  539. RTS
    0 K4 S5 M/ i2 B: Z( v
  540. ;------------------------------) y2 f9 M* |1 ~  k8 a& W9 E" D2 y
  541. ;音乐条显示处理3 x9 R. n& k0 G) d; r/ _, X. L
  542. Music_Animation
    " L2 g. P" n) K, l/ @
  543. LDX PPU_Cur- g! V5 H- F3 p' C: r
  544. LDA #Mode_Line, ^8 W4 p. {8 S) Z( F+ S
  545. STA PPU_Addr,X/ g3 j- X) v8 z: D1 G. L7 \
  546. INX* M+ F3 C; |/ ~* H
  547. LDA #HIGH(Sound_Bar_Pos)6 U% c% A* p" E  q9 v; b, q
  548. STA PPU_Addr,X. U/ v/ e5 J; `, l! {' \$ b
  549. INX9 ]/ b  X- J1 f! E  ]" }4 M
  550. LDA #LOW(Sound_Bar_Pos)$ T4 x% ^' R6 C, s; v
  551. STA PPU_Addr,X
    8 Q  T3 q  k# e; z, u
  552. INX
    , ~3 z3 E9 V2 C' B& k' m3 @
  553. LDA Sound_Bar) A" J, T+ V6 A2 N1 D- T* ]+ h
  554. JSR Volume_Convert
    6 n, x2 {1 h: F5 B, _
  555. JSR PPU_Return
    4 v% q- F3 h/ n2 \! b  q1 E- |. r
  556. LDA Sound_Bar+$4
    / A' y) A' o2 n4 ~7 [+ t) v/ m' D
  557. JSR Volume_Convert! m. j' W7 l. ?! c- m
  558. JSR PPU_Return( ~3 }& W8 H4 j, k
  559. LDA Sound_Bar+$8
    * b+ _  e0 {% J4 @+ t% c  D
  560. JSR Volume_Convert_Ex4 x2 G3 y- G, w$ M
  561. JSR PPU_Return
    , h1 ^9 c2 Y7 c# y( f! b2 G6 f
  562. LDA Sound_Bar+$C2 [0 X, v5 |% `! k# A
  563. JSR Volume_Convert" r( _/ U% y! o7 m
  564. JSR PPU_Return0 k2 h  {& j% N1 j1 ?
  565. LDY #$10
    . g' m7 Z# H, |' }& c
  566. LDA APU_STATUS
    3 \. m( u9 u9 a) F, R3 @
  567. AND #$10; h% ~6 \; z8 j
  568. BNE Volume_Count5 x' J4 U! p2 ^; X4 r
  569. LDY #$00
    * M% d" U& a0 {% i
  570. BEQ Volume_Count8 z. u+ }' w0 P& H5 X. l; L
  571. ;------------------------------" Y1 M, Z) U$ l7 ]
  572. ;音乐条处理; V) y& D! P2 ]  a
  573. Volume_Convert_Ex
    ( q0 G; u5 E) [! N
  574. AND #$1F
    2 @- z# M7 O& B8 C* c' ]
  575. TAY
      m$ T: M! _' o
  576. BNE Volume_Count+ @6 X! x- o! {  Y1 a3 @
  577. Volume_Convert( g* e2 P6 ]+ |) M3 p" u
  578. AND #$0F
    6 h* K( a8 P* s7 r' P, m1 `% X+ z
  579. TAY
    " x% n$ @# {- V3 _# j( C; \4 K
  580. Volume_Count* ~$ T. Z* k3 W+ r5 H
  581. LDA #$08
    5 v; p. Y" f! l5 A
  582. STA Sound_Bar_Cnt& F8 A; V2 w2 i& X4 }; X- k
  583. Volume_FILL* f- ?. c6 D5 C/ t/ R
  584. DEY
    % R) ]. c; C# l/ ^0 P- g" H
  585. BEQ Volume_Half
    9 j0 u1 n% t! ?! ?
  586. BMI Volume_Empty8 w' ?2 T- H/ {
  587. DEY
    ! I) A* r; j, p: S* j3 k/ x3 R
  588. Volume_Full, ^: W* \, T8 Y
  589. LDA #$165 a- V4 h( V3 _+ j1 ?
  590. BNE Volume_PPU3 R- l: }* ^- t
  591. Volume_Half! a! d, s" p# h6 _# g  K# |) x
  592. LDA #$15" j3 e' |* ~1 l7 L; A+ N
  593. BNE Volume_PPU0 t6 H; f3 o. t/ U+ m; u
  594. Volume_Empty0 I* ~9 j1 z6 I; W- E4 `: X
  595. LDA #$144 X6 D" l0 Z) T8 R
  596. Volume_PPU
    0 s" u+ }/ }$ q& j& F
  597. STA PPU_Addr,X
    + Z# u0 C# P4 E
  598. INX
    & f  s* [# X$ S2 _
  599. DEC Sound_Bar_Cnt2 U' H* a0 ]( S1 f2 U# m
  600. BNE Volume_FILL, G6 i+ u  C8 Y& _' ?. |3 E4 S( t6 f
  601. RTS5 Z; ^" \9 }$ Q) e. b- V( J
  602. 8 h, J" K# [* `1 v
  603. .ENDIF' N3 W9 [: O& B/ }# g7 u! z

  604. 5 }! m2 \. P9 D$ A
  605. ;==============================
    0 T9 H, Q- m# [
  606. PPU_Addr_Set;PPU行开始
    1 i3 Y  K& Y1 G
  607. LDX PPU_Cur
    4 _! c6 F( n5 S/ i. r
  608. LDA #Mode_Line
    ( G3 Z2 Z3 V7 d% d3 f% w. o& @
  609. STA PPU_Addr,X
    ; e' c' ]5 }/ @5 d+ D$ W( d' Q/ ?
  610. INX/ L1 w' x* G. o( k7 I, k. t- f$ f
  611. RTS& k% g: J  Y& P+ P3 Q1 ~' ]. L

  612. 7 b: V( c1 G; h) ]4 w- ^: U
  613. PPU_Return;PPU转行* m& \% m- w4 x
  614. LDA #Flag_Over* D/ r3 t+ i1 B  I' `
  615. STA PPU_Addr,X& g* Q! E0 n/ O% ?9 b
  616. INX% Q& V/ D( h& l9 x
  617. LDA #Mode_Return% ?- v$ d, k& y/ ^# B, b3 L& M
  618. STA PPU_Addr,X
    8 [1 j* M9 A& a, y  y0 l" |+ f$ p5 t' Q
  619. INX& i/ T, P% Z/ J. e, U6 b9 q
  620. RTS
    2 \0 m3 _$ v8 b

  621. & c5 o* n2 Z* O  `
  622. ;------------------------------$ T& Q6 A# x3 E2 n4 L
  623. PPU_End;PPU结束' u9 o' ]' l/ `7 f: w
  624. LDA #Flag_Over
    9 m9 S; s8 [6 ~% C- \
  625. STA PPU_Addr,X
    $ R5 {( R$ O* c1 ]
  626. INX
    2 S3 F" W) M2 U) m
  627. STX PPU_Cur# c9 R4 ~  N  C6 C0 u" J4 f/ C
  628. RTS
    - x: H, ?- q2 f5 Q
  629. ;==============================6 @% z2 k+ q) \8 ?
  630. Mode_Line     = $FD    ;新起行模式
    $ @: ~1 M/ p$ D, y: e! ?
  631. Mode_Return   = $FE    ;转下行模式
    ) _# }$ y3 R* L9 M- R9 v& q
  632. Mode_Clear    = $FC    ;行清除; x7 }+ Z2 w( Y- q6 {3 j) t
  633. Mode_CntLine  = $FB    ;行计数写入
    $ M8 }4 _1 j' K7 t, h1 H3 J$ m
  634. Flag_Over     = $FF    ;行结束标志
    + r% L& j6 A; j  h( X" n; f
  635. : k0 M, X0 x# S7 k% n5 \
  636. ;------------------------------
    & o- n$ R, l  m3 P$ N4 v
  637. ;PPU处理
    4 h# B3 {/ N! A$ g
  638. PPU_Proc9 H$ Z( w, s5 j# M) ]/ [
  639. LDX PPU_Cur) M: J& k5 n" j' v# L7 C$ Y
  640. LDA #$00
    ( ~  ?0 G  f/ E
  641. STA PPU_Cur
    7 U' `3 }; D/ D8 q* D
  642. STA PPU_Addr,X6 L' _8 U# C! D* p
  643. LDA PPU_Addr7 I/ N$ J. G0 U3 d, u2 J5 X! W
  644. BNE PPU_Proc_Beg8 W& e7 h6 {0 k4 `
  645. PPU_Proc_Ret
    3 l) t! }! y6 c  ?& }" Y1 ^
  646. RTS7 Q2 P; C/ ?# ^; Z
  647. ;------------------------------
    7 }" ?9 |6 m, H8 F& A
  648. PPU_Proc_Beg  ;处理开始
    % W/ [. X, b2 V3 v& T' i
  649. LDX #$00
    ) v  \; X- X4 d/ B
  650. STX PPU_MASK( r  `; Q$ L8 P* z" n
  651. ;------------------------------$ k% I! J, N/ ]. _0 e7 {6 [! [% I
  652. PPU_Mode_Select  ;模式选择, M  W. }2 k$ h& I, ]
  653. LDA PPU_Addr,X
    - X- b1 [; f, _% u: {/ G
  654. CMP #Mode_Line* C6 I9 V. x6 j3 K1 j; C
  655. BEQ PPU_Mode_Newline
    4 J9 P$ m; @0 g5 {) }; H
  656. CMP #Mode_Return; y& `( D3 D1 _5 m
  657. BEQ PPU_Mode_Return8 L5 v0 u$ ~- B$ b7 t6 B& m
  658. CMP #Mode_Clear6 y0 n' F$ a& r8 g/ }
  659. BEQ PPU_Proc_Clear
    0 R* l) z- u$ V4 D2 [7 s: F5 _
  660. CMP #Mode_CntLine
    % v8 x0 s2 i+ a: u, i) [
  661. BEQ PPU_Proc_Cnt_Line6 W5 p; e/ l2 v) D" I
  662. RTS* W8 R5 k: B, Q' r
  663. ;------------------------------
    $ u) q9 a9 m7 J8 v- ?7 L. N5 Q
  664. PPU_Mode_Return  ;转下行模式
    : U5 l( H+ @- D# x. |) z# h
  665. LDA PPU_Addr_L8 j! S2 J& l+ b- `8 A
  666. CLC5 E) C- z/ ?+ C/ h/ T
  667. ADC #$20
    6 s/ F- A. O( V& Z
  668. STA PPU_Addr_L$ X% P' ~; z+ d2 V* k
  669. BCC PPU_Return_End
    / k2 s% p: D$ g) M
  670. INC PPU_Addr_H1 n) s2 R+ W" W. ?7 H, X$ [3 O0 ]1 X
  671. PPU_Return_End6 H! L0 u3 T9 |' D  X% j
  672. JMP PPU_Set_Increaser
    3 \5 e4 Z1 z! T& C8 v' T
  673. ;------------------------------# p/ S  C5 u; O7 w; n: z
  674. PPU_Mode_Newline  ;新起行模式6 |/ |! _4 ~+ E
  675. INX# ~" c* R; K; Y* J2 x
  676. LDA PPU_Addr,X$ R8 X( W8 q4 a: l9 {8 d
  677. STA PPU_Addr_H
    5 {2 Y! b3 |2 d% V) @4 c# B
  678. INX% Q/ J; N: P, _5 [* j
  679. LDA PPU_Addr,X
    & A0 \$ u% i3 u3 X5 K! R1 V
  680. STA PPU_Addr_L
    ) T$ t4 b% C/ `( n1 C" B" q& ^
  681. ;------------------------------$ v9 a, H! u& t- ?) o* c
  682. PPU_Set_Increaser   ;设置写入地址4 u+ _% E! \2 c
  683. LDA PPU_Addr_H3 u( G- v) A8 A9 C- R" {- e
  684. STA PPU_ADDRESS  Z6 p$ A; G5 I) ^! n# M
  685. LDA PPU_Addr_L
    . u% l% y, X8 L9 G6 A! ]
  686. STA PPU_ADDRESS6 n  X: g7 R% L+ T' V! O# [8 n
  687. ;------------------------------
    * b3 l1 S' j9 ^. o. v# f
  688. PPU_Write   ;写入数据  b9 i3 Y" i5 j  z# W: N
  689. INX* q! F) V) m( k& o4 n
  690. LDA PPU_Addr,X
    0 A) a; j2 J: K/ ]
  691. CMP #Flag_Over
    9 {( W, j; t+ t* g9 o
  692. BEQ PPU_Proc_End
    * ^: b1 X  Q; ]  \  @, M/ B
  693. STA PPU_DATA
    . o/ P0 }2 p9 m- b: k. P' O, X
  694. JMP PPU_Write
    ' ^$ d2 U& K/ F# O
  695. ;------------------------------9 e  J9 E4 Q$ O/ R! `! v' }) H
  696. PPU_Proc_End  ;单行写入结束. x0 Q/ H& r$ P& t; k! ]
  697. INX9 m$ d, O2 c; S  ?# V6 q6 y" {+ m
  698. LDA PPU_Addr,X
    9 v0 s+ z6 E9 R0 c2 ]) Q
  699. BNE PPU_Mode_Select9 J: W7 ?9 i: M/ e8 B. W" X
  700. STA PPU_Addr+ L9 i4 t# ^" W7 q( Z; M
  701. JSR Update_Palette_Color
    2 G) H5 h+ Y0 e8 x3 N! X  |
  702. LDA #$00
    " C; M' B' l2 ?, r% b/ M
  703. STA PPU_ADDRESS
    5 y4 Y4 l1 l: S& J  p
  704. STA PPU_ADDRESS! J+ ]! y' z7 E+ N7 t9 l" V4 w, g
  705. STA Show_Track_Name
    0 }+ ^/ ~# P0 p  R, I
  706. LDA #Scroll_X
    5 E6 ?' e+ w- w; p# m2 }
  707. STA PPU_SCROLL
    5 g! w& y+ b" |  e" X
  708. LDA #Scroll_Y
    & D; q/ ~( ^6 A0 `# t$ X2 I
  709. STA PPU_SCROLL- L' Z6 `! m0 \5 N- ]
  710. LDA Screen_State
    - x: R. b5 K" @8 z
  711. STA PPU_MASK
    8 E7 P3 ^# u5 w/ a+ L/ z1 q7 c  x( A9 t
  712. RTS
    ) C) X% u0 Z) X8 q

  713. * B6 i( g8 K3 B2 x% f& u; g
  714. PPU_Proc_Clear+ _) ]) J2 {! M$ a
  715. INX
    * F2 x0 C7 {6 |: `+ c" c
  716. LDA PPU_Addr,X
    ; t3 o3 |! K% i, g
  717. STA PPU_ADDRESS
    # J& z% @+ Z" N% j$ J4 d0 \
  718. INX  W9 Y" N% K6 G# S# R& D3 R
  719. LDA PPU_Addr,X7 g1 s3 s6 G) {7 ^9 N
  720. STA PPU_ADDRESS
    ; \4 n! O1 o1 h8 T  A- Q
  721. INX
    ' p; n% u& X4 o$ s! u$ E
  722. LDY PPU_Addr,X, }& V6 {; A, q
  723. LDA #$00
    5 J! C7 e5 n  ]8 I: d
  724. PPU_Proc_Clear_Write/ J+ a/ `+ c, q# Q* ]( u( q4 u
  725. STA PPU_DATA" h) C( s$ R/ V* q
  726. DEY
      N' h! c" n* A. N( K( i. D1 _
  727. BNE PPU_Proc_Clear_Write$ E6 V* S, r! r* m$ `5 [& ~
  728. JMP PPU_Proc_End
    ! K4 M. X. J& p4 u$ I. w
  729. $ |- M7 b& `( I8 }, z+ R( G% y
  730. PPU_Proc_Cnt_Line" S, i& W+ ]) x4 O% P
  731. INX) h3 t& _9 W+ ~/ x2 c
  732. LDA PPU_Addr,X
    3 ?5 e# A: g" s
  733. STA PPU_ADDRESS! |1 m- \2 L( p4 r! y9 w
  734. INX
    4 G( h' D2 |" R! y
  735. LDA PPU_Addr,X
    ' M) l6 Z# n% w
  736. STA PPU_ADDRESS
    ) i% w/ ^" G9 o3 O
  737. INX
    * V, P4 k# Y. R) j- N
  738. LDY PPU_Addr,X
    8 Q( Q7 }, h( E! N
  739. PPU_Proc_Cnt_Line_Write
    ! z8 z2 i% i* ?' Q
  740. INX4 F/ |3 ~( v* O# K
  741. LDA PPU_Addr,X
    . Q: o4 h  {7 B9 U* U( g& @0 Z! j2 N: z
  742. STA PPU_DATA
    6 h/ s7 b* {# z' D$ N
  743. DEY- F1 c8 p1 z0 r7 B7 n
  744. BNE PPU_Proc_Cnt_Line_Write, Z: E. F: A; ]& P8 K& L/ C
  745. JMP PPU_Proc_End
    7 a  W6 K' q$ y% V6 {% w# k& ~

  746. 5 c1 E& `: m# Q: H7 |
  747. ;==============================
    7 h6 s2 u8 x: a) x
  748. HEX_To_Dec;十六进制转十进制1 R/ ]; |9 z6 g3 K0 u' g2 }* @
  749. STA HEX_Data
    " Y+ ]$ N+ ^" Z# _# H7 Y
  750. PHA
    : _- F; G8 u% ?$ r% R/ I" c6 e8 {
  751. TXA
    , q) ^6 ?% O; W% b+ _
  752. PHA
    ! I) ^. [* s) p  Z+ @/ E
  753. LDX #$00& ~" o' P; a$ K
  754. LDA #$00
    - y6 ^: F/ {7 M6 ]% f0 E
  755. HEX_Cln! ?) i( G5 T: j6 N1 J$ D
  756. STA DEC_H,X$ \" t  S& M0 {" P) M7 q' z2 {8 w
  757. INX
    3 [0 p" B+ k' |( J
  758. CPX #$03
    - B0 a0 R. a* `1 X: ]8 _
  759. BCC HEX_Cln
    6 S$ K; F4 s* P9 z4 X6 a0 e
  760. LDA HEX_Data
    ' N! F) M* K: @4 ]# E+ g
  761. ;------------------------------$ @- {$ @3 @& @) I# p2 F1 g
  762. HEX_100! q* y9 y* c: B8 \
  763. CMP #1000 m5 k! I) p) L2 _9 D
  764. BCC HEX_10
    ) j4 [) Y% `* K3 e4 ^
  765. SEC! w) B. v0 m" g$ _9 ?& C% i
  766. SBC #100
    + P; Q8 s- D; N" ~
  767. INC DEC_H
    + i, l# r4 u8 B. `
  768. BNE HEX_100# @5 s% y, P3 N6 a( a5 \8 l
  769. ;------------------------------4 g: E& i+ `( `# C$ C
  770. HEX_10
    9 R& q0 B' h+ r# S. Z
  771. CMP #10
    6 u1 D/ ]- u3 G1 m( i# e
  772. BCC HEX_1
    5 k6 ~  L/ ?6 {% H& ?4 [
  773. SEC. O9 ^' f1 k1 U8 P% m
  774. SBC #10
    1 R8 J. {. p: v% ]$ M4 _2 ?1 Y
  775. INC DEC_T, R+ g/ N' ?5 j* P4 j
  776. BNE HEX_10/ X% c, S; X6 @. _- w
  777. ;------------------------------7 P- A4 }7 }) K1 a1 l
  778. HEX_1
    ' G1 r1 }7 L8 K; K9 D+ X' J
  779. STA DEC_L
    . l5 J+ w+ K2 I
  780. PLA9 v$ U( h% u  {5 w) Z
  781. TAX
      Z( H$ W" H9 }
  782. PLA( D! p* N! `$ U* G
  783. RTS2 w9 z* b! l) v4 u

  784. ! Q1 l3 n8 S  s
  785. ;==============================4 b4 M* h$ `; [5 E
  786. ;音乐曲目显示
    ! L" p  ]. ~# _
  787. Music_Show
    - C" ?  z  W2 H" `
  788. LDA Music_Cur
    * }: b9 ^, N# ^4 n  A
  789. CLC
    $ }% @% K7 F2 F1 r6 i! u
  790. ADC #$01( J: z6 R9 m0 Z2 E
  791. JSR HEX_To_Dec
    & u# |2 \5 s" u1 z! e5 ~# U4 x
  792. LDX PPU_Cur! f1 q8 z, v% K- x& Y1 b; G, I
  793. LDA #$FD
    4 [7 m0 n# D. k' ~4 P9 `
  794. STA PPU_Addr,X
    + Q7 H; e7 g, n; g
  795. INX
    & Z; m; |, ]4 Q8 b3 a$ f
  796. LDA #HIGH(Play_Index_Pos)( P/ X3 [+ n: G
  797. STA PPU_Addr,X$ r" k) R6 T  }2 L7 b8 H
  798. INX6 k/ c, R& d/ u4 q$ r
  799. LDA #LOW(Play_Index_Pos)
    + Q4 e9 M' C6 J, b& q% e
  800. STA PPU_Addr,X
    6 X+ t+ {  C8 o( [( S; O- n
  801. INX
    * S  k, E% z' _$ e! w
  802. 1 D# R5 x1 d7 `3 a" D' Q- i0 D
  803. .IF Music_Song_Total > 99
    . _$ Z0 j) l  Y! s
  804. LDA DEC_H7 Y7 U1 u2 S: I( p# p+ f! i5 G
  805. ORA #$305 q2 R. X! Z7 H- e9 D
  806. STA PPU_Addr,X
      j3 t' k& [9 N1 q9 o
  807. INX. i6 B, U. q; g  Y3 J( I7 C
  808. .ENDIF+ a* S6 X' ^9 j4 z) Q4 Q

  809. 0 w4 K. }3 ~, [, q9 K
  810. .IF Music_Song_Total > 9
    # {- _$ m+ F7 I
  811. LDA DEC_T
    7 C* a1 q- p+ ], M( k% C" U
  812. ORA #$30" Z' N" E$ Y: e. X7 r7 Y3 Y
  813. STA PPU_Addr,X
    ! ?" O) Y3 s8 B/ k, ]
  814. INX9 X  g) Q) n* _/ Y
  815. .ENDIF
    ( [5 \) f4 w4 M$ ^) r# ]: a6 N  {
  816. 8 Q* f( t' Q" S/ B8 b
  817. LDA DEC_L
    1 @2 `% Z/ D) F/ d7 _* n+ ~
  818. ORA #$301 I3 e; b9 X: S7 h' A& L7 c: u
  819. STA PPU_Addr,X
    + i/ e' Y  u) \3 K; |7 q7 @
  820. INX( t& L& U& Z, X# n0 e

  821. , A) R+ E- i1 z: }
  822. LDA #'/'
    ) X8 y2 a  N8 ^- W* j+ K% E
  823. STA PPU_Addr,X, ~* X9 U0 P- d( w+ H/ J  b
  824. INX
    / L3 U! N/ c1 W8 Y  P+ }
  825. Music_Show_Total5 Q7 \! s& @2 @
  826. LDA #Music_Song_Total
    , L/ r' F8 ]& v  h- ?" a0 a
  827. JSR HEX_To_Dec
    : u" j" Q9 o8 V3 M7 ?6 d
  828. - K5 T7 C4 M9 h. n/ j. a
  829. .IF Music_Song_Total > 99
    , Y2 d- o9 N. d" a1 R
  830. LDA DEC_H
    , ?! Y! R* ^$ C4 f. m$ a. n
  831. ORA #$30
    # p/ O& R7 e, f
  832. STA PPU_Addr,X, [) D% |$ u- T' {9 i' w; S; y, l
  833. INX% P2 C( `7 P0 K
  834. .ENDIF
    8 Z" V1 \, M* X) l
  835. # k1 i7 R* O' M7 b3 W' r
  836. .IF Music_Song_Total > 9
    5 H* ?# [3 f: y
  837. LDA DEC_T
    4 k" C* Z5 Y* U1 W% x
  838. ORA #$30
    - @. k4 k, i" ?0 R( A& d3 d
  839. STA PPU_Addr,X1 G0 S  @6 g7 x! }; I& H! n
  840. INX
    - w# d% z. O  w) q
  841. .ENDIF, ^6 t: _' I, K- M# c
  842. " c8 b3 j1 T1 i* R5 G, t9 R9 w
  843. LDA DEC_L
    * P) |6 u& c  N0 G
  844. ORA #$30
    " s1 e2 ^4 n  w) B0 e" j) U
  845. STA PPU_Addr,X
    $ C1 }# t/ Z; n
  846. INX, F+ @6 \# j; J+ b  I( j4 Z

  847. 4 ?2 {. v% t, O9 B! R
  848. JSR PPU_End
    % d! c) g1 b# m0 K# S
  849. Music_Show_End
    - z9 e& i5 |/ u- |! ~
  850. RTS. p. e) \2 k5 J3 z: x: }1 ]
  851. # F. y& h, e' A2 c
  852. ;==============================- n4 z; C* B2 C- Q% i
  853. Time_Show;播放时间显示  ]$ ^* ^# G& _7 [3 P
  854. JSR PPU_Addr_Set
    8 J; e- w5 I) v/ X" ~
  855. LDA #HIGH(Play_Time_Pos)
    3 r1 j6 ?: X" R6 g4 G1 Q4 h- M, T
  856. STA PPU_Addr,X
    " l0 @  k8 M: V3 _' R1 Q9 t- }
  857. INX$ C# G: `. }% M. P5 P8 r
  858. LDA #LOW(Play_Time_Pos)% G" {% N( }% H. X) {1 i4 a
  859. STA PPU_Addr,X
    ! ^2 y& E! k, n: ]" N3 m& ~5 ?: K# P
  860. INX6 ?8 D" G) O8 v+ [3 Z  J
  861. Time_Show_H7 J. z0 H* c0 y
  862. LDA Time_H
    " n) r- v" y: k* l4 Q: g
  863. JSR HEX_To_Dec' @8 A$ {( q, d# x- ?$ `
  864. JSR Time_Digit' {/ F  P" H: W  M2 G
  865. LDA #':'
    0 q/ }% q  ?% E: h( {
  866. STA PPU_Addr,X9 t' ^  Y% e# n, s
  867. INX
    9 s1 ?6 n% K. p0 V
  868. Time_Show_M8 i3 }$ \% y8 R. s1 P' M2 h
  869. LDA Time_M
    8 m/ @0 e. d2 {" d
  870. JSR HEX_To_Dec% s/ S8 t6 l- D( V$ F
  871. JSR Time_Digit
    2 H+ @* t* O  h- g+ f, j# h
  872. LDA #':'* d6 W4 N2 K, O' c" S
  873. STA PPU_Addr,X  k- {' I, O7 |. }" c( a# |8 O& O
  874. INX
    : `3 ?. u! h6 l3 V1 t$ z6 G. W
  875. Time_Show_S- y9 O) D) Q8 I6 Q0 a
  876. LDA Time_S) k! `! [! _# V# h/ C- w
  877. JSR HEX_To_Dec
    8 @6 Q- l9 B$ v; [( Y- ?  o
  878. JSR Time_Digit/ S1 _  p  \9 c! ]" U
  879. JSR PPU_End
    6 n' h, G* G0 i+ f! n. A. _
  880. Time_Show_End: p: ]( B( n7 p1 ^# s$ }
  881. RTS
    , s+ A$ N: `& W6 F& d) A: Z9 w

  882. $ q$ M4 X- _, G! Z( D( J
  883. Time_Digit3 u( j5 F. @8 ?7 p. N% U
  884. LDA DEC_T) ]: J# o6 N4 b7 O( r" x0 n
  885. ORA #$30
    6 R% J' P2 e/ w/ r4 B
  886. STA PPU_Addr,X
    & N7 H4 d6 t7 Z/ Q
  887. INX# Q) @9 k7 j" ~% \9 I+ ]
  888. LDA DEC_L" b9 N, O. M- j) Q: Z) y5 Y
  889. ORA #$30
    / M( T$ ~1 Z' F" R; m
  890. STA PPU_Addr,X$ q. H& g3 h( R* d9 W
  891. INX
    / f% Q8 W% Z0 P# Q4 \
  892. RTS
    6 O2 u( O1 o3 a9 a& z! Z  G

  893. % a8 C( f: m% o0 j
  894. ;==============================/ _. x; s0 Y% G9 ~4 L
  895. Time_Count;计时9 y0 m- i7 {: B- }: c
  896. LDA Music_State
    8 _; f. o4 O: R+ |! k) l- o
  897. ORA Time_Wait_Cnt
    % _8 G+ I& d$ H
  898. BNE Time_Count_End3 F7 U/ S# i$ m/ C
  899. INC Time_Cnt# ~7 B, i, {2 ]4 q; c
  900. LDA Time_Cnt/ Y6 _* a. s1 b8 j' G
  901. CMP #607 P5 h) `8 g, z
  902. BCC Time_Count_End
    - V% }4 x' K. _  X7 s3 n' z, g
  903. LDA #003 i9 c( {. m& d; i* S6 I) }4 \' \
  904. STA Time_Cnt; M& M7 m. _* u& q
  905. INC Time_S
    : F% b6 ~. `% u4 J6 b6 X9 c7 C# J7 O

  906. ' Y! f0 Q# Q, e
  907. Time_S_Cnt3 |; E6 t! s8 X# a
  908. LDA Time_S
    0 X) B/ }. k" p6 r0 S8 f* \
  909. CMP #60: S( `0 y  Z# Y5 B  L5 F8 u
  910. BCC Time_Count_End
    % U4 `+ |7 N6 ~( H
  911. LDA #004 v( [0 n" ?- {, y( l
  912. STA Time_S1 R7 R& C) ~: `# e
  913. INC Time_M
    9 H  N/ x- f+ I7 i8 y% ?
  914. ' z/ v6 J% \3 P
  915. Time_M_Cnt% W3 ]2 N3 l* q3 \6 R. O2 X
  916. LDA Time_M
    ( A4 r4 _- K6 @$ T! `5 R
  917. CMP #60
    ) y1 M7 ?% u3 c" w
  918. BCC Time_Count_End
    ' x; U, ?* G8 d
  919. LDA #00
    1 v- q1 c( c5 ^  _5 G7 F
  920. STA Time_M1 c* U- k0 p$ G; e: i
  921. INC Time_H
    : G# V7 U, q& Y/ u8 P# T5 R

  922. ) L0 R: v; @. R1 D# O
  923. Time_H_Cnt
    ( ?/ c. y: M% H, R6 `
  924. LDA Time_H
    ; K+ @2 K* N& ~$ z! Q, I
  925. CMP #24
    5 f% d/ H4 y0 P
  926. BCC Time_Count_End
    5 v% @, x' c9 Q( u+ S1 W
  927. LDA #00
    8 F5 p4 H0 x% {
  928. STA Time_H5 l- X) W5 [/ x( D/ _
  929. 1 L( l; F1 b5 [9 I( V
  930. Time_Count_End
      |/ J9 A, ~1 ~" C5 e0 L
  931. RTS
    : `  J! B3 j" w2 z# ?/ H) [

  932. * Y: M4 f8 D7 w( ~' z9 {  L# P9 t; B
  933. ;==============================9 [1 f8 ^/ E( @' K2 A( d
  934. Time_ReSet;播放时间重置
    0 F& `; b/ w) [
  935. LDA #$00. N: L* Z( c  b# w- o9 f; V
  936. STA Time_S% f. X& @" X: e! q
  937. STA Time_M
    $ h% \, C5 t6 W5 \" r" Y; ~
  938. STA Time_H
    : w+ `( u+ w8 z2 @
  939. STA Time_Cnt) {) L4 v+ L$ j# w
  940. RTS
    & l' c0 n/ M; P1 J  _
  941. " D! C: x& I6 N+ y
  942. ;==============================
    - M6 a2 k$ s3 P/ l! r
  943. Music_Bar_ReSet;音乐条重置
    8 e3 m6 F$ k) y* o
  944. LDA #$00( Z: @$ m! {  Q
  945. LDX #$00
    * l% r4 O# s* Z. g- r
  946. Music_Bar_ReSet_Set/ n  d0 ?. U9 f1 N5 O* \
  947. STA Sound_Bar,X
    . p- g+ Z6 K2 K; `2 b
  948. INX
    , E4 }! T  p7 s! A4 u
  949. CPX #$10
    $ H9 U5 v( q$ j0 s. R7 Y
  950. BCC Music_Bar_ReSet_Set
    1 K; c2 X& Y& c* {( x% t
  951. RTS) I  B3 E( x8 j! ~- D

  952. & Y% W: J0 P( u0 X7 V# f, ?* d
  953. ;==============================5 _5 b" R$ L4 y9 ^# s' I
  954. PPU_Data;PPU数据写入% M2 E7 B( m. `& K8 N1 b" c/ ?
  955. STY Data_L
    ) R: D" p6 P6 Y4 P+ h/ U2 N7 X' c
  956. STX Data_H
    , k  T- h' d" ^2 j5 h9 Q. J$ k
  957. LDY #$FF7 i0 X) ?2 l/ _, j; B2 }
  958. LDX PPU_Cur- U* X3 q' Y, o
  959. DEX
    2 L1 ~# t& \4 e) z
  960. PPU_Data_Beg
    # l+ c5 q" W* c. \4 B4 x# J: H( X  q
  961. INX
    6 O" u$ d- M) L  _
  962. INY
    : B1 t+ J2 p2 J; U
  963. LDA [Data_L],Y
    ; \% I$ v0 u7 D8 X% r; S
  964. STA PPU_Addr,X3 j5 t: a) u4 t9 U
  965. BNE PPU_Data_Beg3 i. e7 f; k) `, [7 I& U
  966. STX PPU_Cur$ m# K' @" |+ ?6 `1 g' o
  967. PPU_Data_End
    # H- ?' D) L# C. l" f
  968. RTS
    % M& O) D' e8 K
  969. ' _$ Q' w% D6 B7 D0 u  X; Q! J8 `
  970. ;==============================
    & W( f/ l9 |) i! i: c- c3 z
  971. Music_Stata_Show;播放状态显示) W% O8 }  J. T% q& a" a
  972. LDA Music_State* j1 W% L2 w3 ^8 I- W  ^
  973. BEQ Music_Stata_Show_Play
    ) i; J( \1 Y1 K9 Z4 T
  974. Music_Stata_Show_Stop+ O3 @$ L- X& a* e! O4 X) p
  975. LDY #LOW(Music_State_Stop)* F& {9 q2 f( b' |
  976. LDX #HIGH(Music_State_Stop)  N- l4 R; {' I- c; I+ p
  977. JSR PPU_Data% A* I$ S8 F! \9 R3 N$ v2 L
  978. RTS
    : L7 `( d$ J: F+ P/ d
  979. Music_Stata_Show_Play
    * C  ?1 _' R0 n' F& y
  980. LDY #LOW(Music_State_Play)3 g7 S% l$ P6 U; u' @3 \% L5 {
  981. LDX #HIGH(Music_State_Play)
    0 P+ s) D' [$ v) g: ?  u. j. r
  982. JSR PPU_Data5 x. K" f4 C! ~2 ]( C8 ~
  983. RTS/ o' n; B4 O& l, R) S0 C% M6 B
  984. # q+ L; M  T. k
  985. .IF SOUND_BAR_SHOW_ENABLE( ]7 {( J9 i1 F# d: ?
  986. ;==============================% Z& `* r. s; y  c9 C8 \
  987. Sound_Bar_Text_Set;标题与音乐条初始化# N4 g8 m3 i  Q; g0 U8 [/ z% b
  988. LDY #LOW(Sound_Bar_Text_Data)2 C) H( k. j6 O* J+ o+ `
  989. LDX #HIGH(Sound_Bar_Text_Data)
    $ T* n' |/ D6 c: w! o5 w0 h6 B
  990. JSR PPU_Data& a- b+ o4 _# `
  991. RTS
    + h9 b, ?4 v: e$ h- f3 z6 W

  992. ! }: N8 P9 p! S( r) @) f: z; y2 s2 v
  993. .ENDIF, L. w- i2 a1 C2 e+ R

  994. " f" w) n% S* T- r( j4 J3 v* n
  995. ;==============================
    & z, O) L* M/ i+ r" w* _7 z
  996. Set_NameTable_Attributes;设置命名表属性
    6 R- z6 O3 u2 |6 }! g# R
  997. LDA PPU_STATUS5 H7 b7 h) g8 p0 m8 p5 e
  998. LDA #$235 L  v8 w( w  y5 |2 H
  999. STA PPU_ADDRESS
      Z/ l8 r/ _& Y; D. B! ?2 i4 d! R" E
  1000. LDA #$C04 ?9 K% \" H! L- Q  ?0 @, z$ p
  1001. STA PPU_ADDRESS
    + H9 l2 F8 i( v0 b; Y
  1002. LDX #$00
    . s( n; g1 f& D- R0 Q
  1003. Set_NameTable_Attributes_Write
    5 d/ r3 W, p( L" ~$ |
  1004. LDA Palette_Attributes,X
    ; g7 G6 G( j3 ]& G! a4 A
  1005. STA PPU_DATA; n0 D4 V" j5 V8 e! ?* ]9 M  [
  1006. INX
    % a8 |: j' o+ w, i4 B# ^
  1007. CPX #$40) Q5 c, c( i2 r2 E1 j. ?" o
  1008. BCC Set_NameTable_Attributes_Write. l. n6 |( u+ P) o6 T. I3 r3 m
  1009. RTS: a% T1 V# T6 k( p7 S1 n0 X
  1010. + B/ D/ ~1 M1 Y& f
  1011. ;==============================: R) e. F; n& S# c& @- \6 m& K
  1012. Set_Palette_Color;设置调色板数据
    ! o0 m6 J6 D* \- N0 \
  1013. LDA PPU_STATUS0 Y3 h  M- t/ Q2 e3 v
  1014. LDA #$3F; g9 J( D9 b; s/ w$ x0 |6 B
  1015. STA PPU_ADDRESS
      i/ @& [) D- ^1 [
  1016. LDA #$00
    / K7 Q: d8 Y3 {* t
  1017. STA PPU_ADDRESS. Y! n8 Y$ E, d
  1018. LDX #$00
    7 M1 C8 ~) D" E7 N; L
  1019. Set_Palette_Color_Write5 C( o( `2 y/ B; o! o' @
  1020. LDA Palette_Data,X
    ! D& I, H1 i6 x9 a
  1021. STA PPU_DATA
    9 E; w& h* P) m2 v# ^# N
  1022. INX1 Y% ~' ], {4 f
  1023. CPX #$20$ w5 c5 }8 ^6 m2 L9 D
  1024. BCC Set_Palette_Color_Write! g% |# x1 z1 w1 G
  1025. RTS
    6 ]( ]* J8 m/ U7 D$ B$ {) I
  1026. : u6 b% _! H# V" q6 M6 }! g
  1027. ;==============================
    8 A0 U* ]& \# j% v
  1028. Init_Palette_Addr;初始化调色板数据" P2 R+ f& b# w0 @& y' L
  1029. LDX #$006 Q6 d, w0 f4 ]
  1030. Init_Palette_Addr_Write: B& W) H0 {! [2 b2 K
  1031. LDA Palette_Data,X
    # _3 v, m. ?4 ]* H$ k' ]) F
  1032. STA Palette_Addr,X3 t. B& Z) I% x, n1 v
  1033. INX
    7 {# `# U4 ^9 l  Z( a* X; {3 t
  1034. CPX #$20/ r9 }; G$ s& ?( |5 B8 {. [; r" E- I
  1035. BCC Init_Palette_Addr_Write
    7 M+ Y% H7 B" [" W8 e
  1036. RTS: y& k. Z' G# Z4 \

  1037. * c) p& |. t- r% ^" G2 N
  1038. ;==============================3 @4 Y! ?: f! h% h# F' J
  1039. Update_Palette_Color;更新调色板颜色9 s  b- v' ~4 B( {% c  G4 M  q) V
  1040. LDA Show_Track_Name4 x. [! H' ?  r% o7 l
  1041. BNE Update_Palette_Color_End8 J0 X$ O/ p  [* S0 |# @! b
  1042. LDA Palette_Update_Flag1 ?" E3 e4 A4 z; X
  1043. BEQ Update_Palette_Color_End1 i3 I/ T& A0 Z" Z9 C/ m6 o
  1044. LDA #$3F' U: a; M& a6 W# K! W! Y
  1045. STA PPU_ADDRESS
    6 g' N4 U5 ]7 w$ S+ h
  1046. LDA #$00
    0 \2 c8 p# V6 w" ~8 P! x& R: a8 x
  1047. STA PPU_ADDRESS
    3 b1 {& Z( j6 z
  1048. LDX #$00
    7 x. F* S% I; `
  1049. Update_Palette_Color_Write+ b! {0 j3 p0 E
  1050. LDA Palette_Addr,X4 F2 o0 U- [$ _. S' x( _. ?' s
  1051. STA PPU_DATA
    1 _: _2 `+ \& b0 B- F1 j
  1052. INX
    ' W' B& P# b! A7 v
  1053. CPX #$20# E  a3 B0 y, g$ ?' A3 N6 t
  1054. BCC Update_Palette_Color_Write: M! W) @' ^) V; h
  1055. LDA #$00
    8 K0 o! B' ?: r- x: d  M+ S% i
  1056. STA Palette_Update_Flag& K% V# `+ t$ n
  1057. Update_Palette_Color_End
    ; _0 K4 G& r" i/ x( K8 p
  1058. RTS
    & d' c+ D4 T) e- x6 @* D$ k2 e

  1059. 8 ?' P+ ?0 ^$ Y$ a/ x% m3 v
  1060. ;==============================
    9 k* b5 _% A' [6 N% A4 P
  1061. Update_Palette_Data;更新调色板数据
    + \& q2 b4 U/ ?# L3 v: O/ s
  1062. LDA Show_Track_Name
    ' u+ g& z1 R- I* D+ e: ?
  1063. BNE Update_Palette_Data_End
    3 n7 c% ?* ]% _/ s( s- i( P
  1064. LDA Music_State, W) B! s! n# d4 s7 O
  1065. BNE Update_Palette_Data_End
    : G1 Z! V7 D3 n* T; _5 B4 E
  1066. Update_Palette_Data_Check( P+ k0 y3 c# N' ^- I4 m& ~2 M
  1067. LDA Palette_Wait_Cnt& w2 W7 X; ^! C. V$ _. v1 ]
  1068. BPL Update_Palette_Data_Check_Over
    % M9 [. U) Y7 q2 h! g5 a+ |
  1069. LDA #Palette_Update_Interval
    ' R4 c  h( p) q
  1070. STA Palette_Wait_Cnt
    4 z' l4 E3 j5 a6 I6 E% L; O0 J
  1071. Update_Palette_Data_Check_Over& ?2 S5 Q+ v7 F
  1072. DEC Palette_Wait_Cnt
    . \7 p# M7 c3 U# W$ H
  1073. BNE Update_Palette_Data_End; N; {8 o( s& G' P! e% C, P8 [
  1074. INC Palette_Update_Flag* f% _" ?; [# Q! ]
  1075. LDA #Palette_Update_Interval
    0 p( h/ w6 r4 O1 E3 `7 ]: h
  1076. STA Palette_Wait_Cnt0 d- |2 ^% f0 Q
  1077. LDA Palette_Update_Addr
    ; _( N) s6 k, [1 U  d
  1078. CMP #Palette_Update_Max# ?/ ~8 P( {5 U& L8 `! m
  1079. BNE Update_Palette_Data_Set+ c1 N+ P  u: f4 ~. D
  1080. LDA #Palette_Update_Min - 1
    $ l- q, n' N3 j2 B" E- v& o* \6 |
  1081. STA Palette_Update_Addr0 v- I6 z# m8 r+ i6 k3 h# I9 Y) F
  1082. Update_Palette_Data_Set
    + b# K. @1 L" \. r5 ~8 Z
  1083. INC Palette_Update_Addr* _! j: ]9 F" w% l2 b  [6 I
  1084. Update_Palette_Data_End& Z$ B7 ?  Q; W; {, E
  1085. RTS
    9 Z! \# ]% Q1 z: ]2 j
  1086. 2 D! ^% `- A, K: t' U% V
  1087. ;==============================
    ' a, d+ h! q9 _& J9 h! U
  1088. Show_Music_Text;显示静态文本
    ! y7 y8 I+ R# z
  1089. LDX #$00
    6 J3 L, I9 `- F
  1090. Show_Music_Text_Set( k9 k. B+ _7 c0 ?2 w& i4 \
  1091. LDA Static_Text_Data,X+ Z8 T( M' l. c  I7 u
  1092. STA Data_L' K) u0 v# C* s
  1093. INX
    ) o* O/ x* ^% S1 p  U
  1094. LDA Static_Text_Data,X6 g: _3 G( L  P4 Z% d4 J- N# }( g
  1095. STA Data_H; {  S! b/ [1 _2 f, O
  1096. INX$ V, \" K2 J) F1 T1 H# {
  1097. LDY #$00! u0 V8 e2 j, V$ C& v3 R" F
  1098. LDA [Data_L],Y
    7 a0 L  d6 O* C' \% F1 O
  1099. STA Data_Cnt
      S+ x. e( B5 {3 w  j, P# {7 ]
  1100. DEX% L+ j# x+ j, W, ~/ `7 Y
  1101. DEX
    ; U. G, F& X( ~9 S& X$ a
  1102. LDA Static_Text_Pos,X) T+ _* Q, a4 I- Z
  1103. STA PPU_ADDRESS
    . c8 A$ Z9 O' ?
  1104. INX
    0 j- O$ S1 y) a3 f5 o# A
  1105. LDA #$20# f) N1 J, ~. L* n; i/ G( h
  1106. SEC
    6 v+ F! a. Q* ~$ I1 O
  1107. SBC Data_Cnt: [9 y' M8 ~6 u; m4 H
  1108. LSR A
    * M8 H) i* a+ w, O% F4 o: o
  1109. STA Data_Buf3 s# u: F9 _5 l& E, s7 ]) u
  1110. LDA Static_Text_Pos,X
    & e" n; F, n' j6 _1 w9 P
  1111. AND #$E0
    - ^! F0 @: ~* @0 m: [
  1112. CLC
    3 {: K/ O) [) s1 B( z5 `2 f  ~
  1113. ADC Data_Buf, O- y( v  D, u1 Y+ s+ H/ F( z$ ^
  1114. STA PPU_ADDRESS
    ! K3 B8 Q6 h& K3 }8 {, n, {) j
  1115. INX- f- |6 U) x2 p( }1 ]
  1116. Show_Music_Text_Set_Write
    9 E3 X9 {1 D3 t: ?; z
  1117. INY
    # s% _0 K2 Q2 B/ V
  1118. LDA [Data_L],Y; E; C4 M: |5 [' ]/ u/ G# G
  1119. STA PPU_DATA
    " B9 R' T/ G8 Z7 U3 V
  1120. DEC Data_Cnt3 h& T& B/ l/ o/ ^; q
  1121. BNE Show_Music_Text_Set_Write
    # @& g! M6 D+ H2 e" [/ }8 ^. O
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos9 k; z0 n9 V* o( t
  1123. BCC Show_Music_Text_Set
    ) H8 I# ?( m2 J' ]
  1124. RTS/ B* i# l8 t' a" \
  1125. & Q1 ]" O' b2 g: n) _. f! N
  1126. ;==============================$ v0 j0 }8 b3 V
  1127. .IF Track_Name_Pos;显示曲目信息
    9 H1 O3 S+ ~+ j
  1128. Show_Track_Info
    6 A: i  @9 |0 B. s5 b# v# |
  1129. INC Show_Track_Name" ?  T- P; X  n. [
  1130. Show_Track_Info_Clear  }. g5 v- D2 ~, `
  1131. LDX PPU_Cur  b3 [3 U( N. K/ v# G4 M' l+ l6 x
  1132. LDA #Mode_Clear+ T6 a. i% D7 r$ W/ I
  1133. STA PPU_Addr,X
    - ^6 {3 E# Q7 w/ c
  1134. INX8 r0 W% |$ \2 l6 S6 N$ D
  1135. 4 u1 P  r8 k/ z# F* s' u( {2 U
  1136. LDA Music_Last) e9 h$ ~4 |0 [( e* a( I: X6 N
  1137. JSR Show_Get_Track_Name_Center_Pos: m& J  Q  X7 D9 b$ ^
  1138. Show_Track_Info_Write_Cur
    2 A2 o% u# [" X  ~* l% E3 w
  1139. LDA #Mode_CntLine
    $ x7 U  U' B; A3 n4 T8 w
  1140. STA PPU_Addr,X
    1 U' r7 N) ]; c+ |7 U
  1141. INX" `+ n, ^) y8 {1 C  V
  1142. * P% P, c' @. J$ D
  1143. LDA Music_Cur
    - N8 C5 r8 a; `+ T; e
  1144. JSR Show_Get_Track_Name_Center_Pos
    2 u# p# j: V( ^% @/ Y, W8 [; G' y  H
  1145. 3 l+ C. g5 Z$ E* Z- D+ i; z, U
  1146. Show_Track_Info_Write_Cur_Data8 Y+ j$ l9 I7 _
  1147. INY
    / |3 M8 x& a, H5 q& O. I5 K% ?
  1148. LDA [Data_L],Y) U) Z& j$ Y1 \2 b
  1149. STA PPU_Addr,X  C% E7 u6 i  t, d2 U# t7 {
  1150. INX
    3 _- Q" y& p" W+ j$ ]8 D
  1151. DEC Data_Cnt
    0 M0 Z: c& ?( _/ u) X. Y% d/ B
  1152. BNE Show_Track_Info_Write_Cur_Data0 t/ J0 v& [; v. O
  1153. Show_Track_Info_End  C0 c1 C+ B3 {+ K- r- ^4 v
  1154. STX PPU_Cur
    % c1 _0 ]+ E; G7 r: |! V
  1155. RTS
    ( N" ?1 w7 V+ _* @* t" }
  1156. : ]' j0 q4 G; Q* F, E* o; s: `
  1157. ;==============================
    ) r4 i- U9 X! E- }3 W7 o
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
      W8 O; Q6 ~7 S- ~& |
  1159. ASL A
    5 A  A: A/ H/ `; `! h* Y1 k
  1160. TAY+ g  P" {" P* ^% u% v
  1161. LDA Track_Name_Addr,Y
    . K' L, O& z$ C3 E8 U% c% T) l
  1162. STA Data_L
    & M2 B8 b" E& s
  1163. INY8 E3 ~( P3 G3 r8 [+ v
  1164. LDA Track_Name_Addr,Y9 N% F+ }  \( i& ]: r5 d9 u5 D3 w, S
  1165. STA Data_H8 F0 n4 ?: u8 M( I1 U3 j
  1166. LDY #$00
    0 t$ M2 j# j, c1 i2 [+ \
  1167. LDA [Data_L],Y
    $ l3 Z  ]8 P9 o
  1168. STA Data_Cnt
    : ?0 b0 X' z: _) b% {: T
  1169. LDA #$20
    . k: ]0 t3 k: l8 j
  1170. SEC
    : L+ k. T; Q+ h/ ^) G# |0 L
  1171. SBC Data_Cnt
      v! e, c9 U8 Q
  1172. LSR A. Z+ u( q" O9 l# Z( [/ D% G9 ~, W6 o
  1173. STA Data_Buf
    , a9 ^* s; Z' b! X7 c
  1174. LDA #HIGH(Track_Name_Pos). d8 x3 {* f) _9 S# V/ z" N
  1175. STA PPU_Addr,X
    & b, _& l( m4 Q& D& A9 E4 d6 S: g
  1176. INX
    5 o# H3 O" G9 {& z$ @
  1177. LDA #LOW(Track_Name_Pos)7 P' q) `0 H7 J' \0 S% W
  1178. AND #$E0+ z& Q( [5 j2 z
  1179. CLC
    " c% q$ p6 h  w
  1180. ADC Data_Buf/ x4 J6 _3 Q4 z4 \3 ~$ U6 C' |+ ^  }
  1181. STA PPU_Addr,X
    ' U: U) m4 K( i+ z) s
  1182. INX
    4 Z  w) H: J0 K3 I- H
  1183. LDA Data_Cnt
    / z9 ?- \2 L0 E7 K( m" V2 }
  1184. STA PPU_Addr,X
    ; K3 P9 y% V/ Z# [% b
  1185. INX1 g& g: K* Q9 A2 ^6 F
  1186. Show_Get_Pos_Center_End) T, l* g3 Y: |
  1187. RTS
    8 Z7 f6 D- P; F" a) K
  1188. .ENDIF+ h7 d5 x* D' y
  1189. # ?5 i! |! X+ X  d4 c
  1190. ;------------------------------$ [& h( z% u/ l5 E/ R) }& ]9 m
  1191. ;命名表数据
    7 J3 l$ B  r4 J4 T
  1192. Palette_Attributes
    7 J! R3 h7 u2 K: @/ o0 _
  1193. .IF SOUND_BAR_SHOW_ENABLE
    - Z' w/ m) `, @* F$ B
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    6 W- ]* r: L2 T0 J
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    , Q% P/ _: S4 y2 C$ z
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$553 U( B* V2 I7 q- \# Y* i
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ) D+ W3 o! w$ t- _5 V" B3 N* q
  1198. .ELSE( L& T- Q" Q# F& E
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ) z0 G' k: K1 X, j) O; W, }
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    " F3 M3 \/ ~" Y" n# C
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$557 k! I& ^8 F# o$ G9 M3 z) W
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    3 w8 q  ^5 A% O6 J/ R6 T: C
  1203. .ENDIF
    4 ?( C! [  J5 K- \: X- w
  1204. 2 {- H- r6 I; D) {8 t6 k/ |! I1 E
  1205. ;------------------------------
    2 k2 t+ F1 Y% X
  1206. ;调色板数据" _8 W) C+ [& H6 i% ]+ z4 }
  1207. Palette_Data
    4 N4 A6 x9 _' K4 b
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F6 B6 I; R0 E- B! @. ]
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
      l2 N+ J; L, z; X
  1210. " H) Y" W# o( r) {& q$ t8 K: n
  1211. ;------------------------------
    * i; s7 C: a' D) a; h& T  O: p! ~# D
  1212. Static_Text_Data
    3 f7 K" E9 c! x$ |1 f
  1213. .WORD Static_Text_Title_Data0 V# i1 }2 p7 h5 l$ \- a7 h
  1214. .WORD Static_Text_Author_Data6 W$ q7 r0 B/ ?# h$ s9 `
  1215. .WORD Static_Text_Date_Data3 `! @0 C0 c  w) p
  1216. Static_Text_Data_End4 \- g% [& f3 N/ F; h5 a+ q

  1217. 7 e& J% P+ f4 E' e9 l7 ~* h4 r% f
  1218. ;------------------------------0 f( `# T2 u1 `1 a
  1219. Static_Text_Pos
    # |4 {( V+ B$ u: Z' w) `
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)8 T; j- A: |6 k6 t
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
      x3 p; A+ m7 p# R' u9 m* O; y
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)! v9 p# F' c9 X" \8 P
  1223. Static_Text_Pos_End! S6 M( M; ~7 m* ~4 E

  1224. 1 y; \3 m- N! Z7 l
  1225. ;------------------------------6 o) A' n8 q9 `; a( H% h6 l
  1226. Music_State_Stop; e* n! O8 x3 n% D, B
  1227. .IF SOUND_BAR_SHOW_ENABLE
    8 S$ b; c" q! K" ]8 W6 ?
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    - Y8 M# I. c2 [  |' Q: Y; `
  1229. ELSE* ]4 Y9 C) f- `$ f/ ?8 V
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    9 w1 q4 W9 g" E' X9 d& R& _7 M
  1231. .ENDIF' x6 T1 }+ ?: M7 I/ l0 a: N
  1232. Music_State_Play8 @0 ]  N, ]' g/ o* u
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00  J; [9 p( x( l& N3 r; ?
  1234. ( Q: w+ T0 k2 \1 o8 D
  1235. ;------------------------------
    ; H/ R8 c( O9 m3 ~( z
  1236. Sound_Bar_Text_Data;声音类型文本2 B; O5 k' o& \: h% e
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)% _7 W& W1 d6 E4 U9 M" d4 Q
  1238. .DB "SQ1-",$FF
    1 g5 i: I+ x0 S
  1239. .DB $FE,"SQ2-",$FF
    . R  }6 t: K& d% B# Z
  1240. .DB $FE,"TRI-",$FF
    2 w% y0 N) T4 h4 x: S' ]0 p* B
  1241. .DB $FE,"NOI-",$FF/ {$ j# O1 ?" y4 a. J
  1242. .DB $FE,"DMC-",$FF,$00
    7 y2 K  g/ h3 F

  1243. : R( p5 S" K( i
  1244. .IF Track_Name_Pos
    6 l& r) w* h" T. X& q
  1245. ;------------------------------7 B5 h: P- ]  v& L( ?2 _1 R
  1246. Track_Name_Addr;曲目名地址索引% u# T* A- N' V! }" A0 B
  1247. .WORD Trackr_016 Y- l, t: i% E
  1248. .WORD Trackr_02/ [8 |# n) @$ ^! j1 n# d; r5 W
  1249. .WORD Trackr_03
    ! t4 V5 k9 J6 a. [3 M) L: K! W) p
  1250. .WORD Trackr_04
    * D, p" i& f' `0 w7 O# t% \
  1251. .WORD Trackr_050 J5 R6 ?2 g2 U. g5 ^7 G/ v: ^
  1252. .WORD Trackr_063 |' f) c1 [9 `% _# H# W* Q' ?/ K1 Y. @
  1253. .WORD Trackr_07
    ' d# Z! `% ~  ?7 b8 I. D
  1254. .WORD Trackr_08
    # [! l: T8 Z2 D
  1255. .WORD Trackr_09
    - {7 Z% n0 Q9 @3 M% L3 h
  1256. .WORD Trackr_10
    ; T- X  X3 w5 R- v% f( h/ }
  1257. .WORD Trackr_11' \) V9 @" @1 H. [& m
  1258. .WORD Trackr_12
    ; A+ R/ N3 V9 c1 x' h6 e
  1259. .WORD Trackr_13
    4 }2 g( S& i2 y, ~
  1260. .WORD Trackr_14
    $ D( J; l9 S3 p! `% l; y* C- B
  1261. .WORD Trackr_15: i8 b$ B; g2 Y
  1262. .WORD Trackr_168 [) M2 H8 J- N- E; P4 q9 D
  1263. .WORD Trackr_17
    9 G, }$ @+ }2 J' }6 g
  1264. .WORD Trackr_18
    4 L% o3 ]* e3 {" P# O8 X2 i/ e
  1265. .WORD Trackr_19
    % X2 c5 T/ |  U  J( O
  1266. .WORD Trackr_20
    3 {/ V0 [/ t! A+ [# C! L
  1267. .WORD Trackr_21
    6 z) r; r$ Y1 z8 h* ^3 R6 {
  1268. .WORD Trackr_22
    , X  x+ w; Z* y3 _$ e  i- x! _/ Z: ?
  1269. .WORD Trackr_23
    $ E' a( T- I7 l- f  J' }: \
  1270. .WORD Trackr_240 j5 o- t* d4 Z; q+ V% T
  1271. .WORD Trackr_25# R) C: A8 k+ G- G' @9 b. u' ]
  1272. .WORD Trackr_26
      M# X4 v! }8 d2 Z- q' w
  1273. .WORD Trackr_27+ E  n% A8 @9 O# C9 O4 T
  1274. .WORD Trackr_28
    ( T& E! U4 C: ^' {
  1275. .WORD Trackr_29
    + [6 u- F  a4 n/ D) r( o
  1276. .WORD Trackr_30
    3 x. R) w! F9 f6 j
  1277. .WORD Trackr_31
    4 w& O- n0 Y% v" s+ u
  1278. .WORD Trackr_32
    1 r" {) _' E/ k: A7 P3 F8 f$ `
  1279. .WORD Trackr_33
    9 @5 ?0 @1 g  k( b# ~  P* I, H& f
  1280. .WORD Trackr_34
    * d) D( ?$ d  Y- x& x1 U
  1281. .WORD Trackr_35: U( K/ ?1 _7 B4 w
  1282. .WORD Trackr_36* K( [: W- v. q" g# U
  1283. .WORD Trackr_37
      b; ~( T6 x1 \1 K- [7 R
  1284. .WORD Trackr_38
    7 w# m  |* G$ F8 b; u
  1285. .WORD Trackr_394 F- K: A+ [1 ?+ S5 V

  1286. 6 T) r) k2 |- y7 v8 N
  1287. ;------------------------------
    0 x# W6 W' Q+ Y0 p4 N7 ?1 [
  1288. Trackr_Name_Data
    # r  G6 O& S* m0 h, E  R0 U( l0 t# D; y
  1289. Trackr_01 .DB $05,"BGM 1"* l  o0 q- f- F4 ]2 h, I: G$ g
  1290. Trackr_02 .DB $05,"BGM 2"
    " G' x) Y, E) X; S: l
  1291. Trackr_03 .DB $05,"BGM 3"
    # E# k6 @4 ?& T  {3 |9 W) P
  1292. Trackr_04 .DB $05,"BGM 4"# C) }" ?# S: y# d
  1293. Trackr_05 .DB $05,"BGM 5"9 P2 H3 y' d( d( x1 ^. V$ T/ Z
  1294. Trackr_06 .DB $05,"BGM 6"5 f, U; M. {+ O: T# K( {& i
  1295. Trackr_07 .DB $05,"BGM 7"
    , r5 R  Q/ O& `$ L0 p
  1296. Trackr_08 .DB $05,"GREAT"* J- H! x1 c! Q6 ]$ p6 Q9 w
  1297. Trackr_09 .DB $08,"BOSS BOM"( U- h7 k( s  }4 f
  1298. Trackr_10 .DB $08,"BOSS2BGM"& R' Q  @. J  b
  1299. Trackr_11 .DB $07,"P CLEAR"" X( J5 b* n* ~; b$ S+ ]& j
  1300. Trackr_12 .DB $07,"A CLEAR"0 z8 i. u4 Y* v. f+ w, S) `9 v
  1301. Trackr_13 .DB $04,"OVER"
    " Y2 c( d9 O8 n/ n) Y0 p; n5 l
  1302. Trackr_14 .DB $06,"ENDING") C" a& n& J) v- }
  1303. Trackr_15 .DB $04,"SUTA"' E7 R+ _$ N. Y5 L/ f9 Z4 |
  1304. Trackr_16 .DB $07,"THUNDER"
    ( D" a( n* f5 z9 o! h) H
  1305. Trackr_17 .DB $04,"SHOT"6 m2 \$ k$ y% m* W
  1306. Trackr_18 .DB $05,"LASER"
    $ a/ F% T/ [* ]
  1307. Trackr_19 .DB $06,"SPREAD"" V+ e) P# D( Q9 r& m. q' Y5 ^
  1308. Trackr_20 .DB $04,"FIRE"! z. j8 K' r' k3 v; M2 u7 Z
  1309. Trackr_21 .DB $06,"B SHOT"
    * C3 Q  ^- @/ P& C4 J
  1310. Trackr_22 .DB $08,"T DAMEGE"
    : H4 {0 a, Q8 u% I% ~
  1311. Trackr_23 .DB $07,"HARETSU"# P# t; Q: }0 S) X$ m# r  X, H( }
  1312. Trackr_24 .DB $05,"T OUT"
    3 P0 N  e7 E" J* L& b
  1313. Trackr_25 .DB $05,"Z OUT"- E$ z- H4 G9 A* A
  1314. Trackr_26 .DB $05,"A OUT") X4 t, q) }6 s. ?6 `4 O; n6 g) F4 s, [# H4 ^
  1315. Trackr_27 .DB $04,"ROLL"
    * P) Y; z* H# x# m
  1316. Trackr_28 .DB $06,"APPEAR"
    ) N" h/ V) R3 G& m* p4 t" B/ M" Q
  1317. Trackr_29 .DB $05,"POWER"4 Q( o! ~3 i% I$ |; t1 J& j" t
  1318. Trackr_30 .DB $07,"BOKK BK": w/ j3 |) R! D& o5 _0 Y4 ?6 G
  1319. Trackr_31 .DB $08,"BAKUHA 1"" u, S. M$ l4 _- ^; D0 v
  1320. Trackr_32 .DB $08,"BAKUHA 2"  B* ~8 k7 {' N( A# G2 @: a" r
  1321. Trackr_33 .DB $05,"ARUKU"$ k- P% U, Y  _+ H8 Q# _$ J
  1322. Trackr_34 .DB $06,"JIWARE"
    ! g( W9 Q1 |  u8 R
  1323. Trackr_35 .DB $05,"SILEN"
    - K  C" d  B# A/ }( a3 d( W4 o7 b# Y
  1324. Trackr_36 .DB $05,"P 1UP"
    4 d0 @6 w. b% Y3 W4 c. `# b
  1325. Trackr_37 .DB $05,"P OUT"/ x! a6 R3 h. B0 Y6 I
  1326. Trackr_38 .DB $05,"B OUT") L2 F# `3 j" b+ V. u0 A
  1327. Trackr_39 .DB $05,"PAUSE"& l1 s1 r1 N2 ^% O+ E$ U3 f0 N; r

  1328. + ?4 _2 m. D, z$ l4 O
  1329. .ENDIF
    9 F  ~8 l- t( m( C: z) J

  1330. ; V; b& T, _3 Y7 {: i
  1331. ;------------------------------  X- Y4 S) w/ _! O2 c' o3 P
  1332. Static_Text_Title_Data;静态文本数据
      v; c) q* w; E4 N6 T8 M
  1333. .DB 128 L4 z3 ~% w6 f8 D
  1334. .DB "SUPER CONTRA". }- n$ \% ^, G1 ~
  1335. Static_Text_Author_Data
    & z+ }. K, v+ I" w6 z4 r% {
  1336. .DB 23
    / F: W" C7 W* r9 I7 U+ Z1 u
  1337. .DB "EXTRACT BY FLAMECYCLONE"+ t4 F" K7 C  l8 W9 _: @
  1338. Static_Text_Date_Data4 a6 V& {5 W/ B0 Q* }& z
  1339. .DB 10: D4 R  M4 @/ M5 ~1 ]
  1340. .DB "2023.07.11"' k) X0 a$ g' s2 G
  1341. : v$ G. F$ i* M  ?+ ]: W9 M
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    ( F( \) b6 B3 n1 ?
  1343. .ORG RESET_ADDR; A2 b0 p& S- p4 ]

  1344. % O+ H9 o) t9 B2 \1 m
  1345. $ I" L0 M) B+ k1 q) [9 I
  1346. ;==================================================( O2 ^+ a+ G  V& H& ^
  1347. ;切到主程序bank/ C9 a8 r$ b! L- f6 |" A/ r% Z5 J
  1348. SwitchMainBank
    6 m* ]8 I2 D1 ~% T2 H
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK+ Y3 k4 f! u( c- j+ W
  1350. JSR SwitchBank8000
    / J. R8 l5 f( U7 f, |6 `, T
  1351. RTS1 r: {5 m- E1 n9 i& h3 r2 g5 }

  1352. 1 c7 K4 G& a: X8 L3 X- a' P/ S/ O
  1353. ;==================================================( }6 v- l4 M# \+ D! E
  1354. SwitchBank8000;切换bank到8000-9FFF  [! ^3 j7 v  |8 i% W
  1355. PHA  c7 {3 E, Y7 I% k- o
  1356. LDA #$066 S7 _6 w/ `; l/ J& m  g0 ~
  1357. STA MMC3_BANK_CTRL* K% x( `+ l& [0 [4 I- ~# n/ V. K
  1358. PLA5 ]" v* p' F9 _0 k) q5 F
  1359. STA MMC3_BANK_DATA7 x1 F9 E, b! j( ^/ }' W
  1360. RTS
    " m5 x: k4 W: L! ~7 F5 D

  1361. ! `5 a7 R3 c- X; ^
  1362. ;==================================================1 }& S6 \9 |4 N
  1363. SwitchBankA000;切换bank到A000-BFFF
    ' q% o- J/ ~' `
  1364. PHA
    , k! y+ {5 a9 h9 L( s- o- R
  1365. LDA #$07
    ( B! d3 v- G* u; n
  1366. STA MMC3_BANK_CTRL
    " c9 R3 P: _" K/ w6 x4 v, Z
  1367. PLA
    9 @0 L4 f/ ~" z. s- E3 {# f! ~
  1368. STA MMC3_BANK_DATA
    0 P# i" @% f/ P  h6 }8 O2 c
  1369. RTS
    1 a3 h1 D0 C) R, Q! i- Y
  1370. 4 h0 l9 m5 k& [3 n
  1371. ;==================================================
    0 n: @/ @6 B: s. w
  1372. Sund_Bank_Init;音乐bamk初始化
    ' u4 Y8 h+ L( g; r& m8 n
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 b" b6 I% e) Y" f1 ]! F
  1374. STA Music_Bank_8000
    8 o; T' s) x# J( U% A$ j
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK& ~1 M0 H) G2 D  {2 n
  1376. STA Music_Bank_A000
    % T: F5 ~% q# M! e- k
  1377. RTS" \1 X8 C0 N$ X( z: [8 x

  1378. 7 y' y. i# i( C/ ]! {2 ^, ^$ b
  1379. ;==================================================
    9 E* |) e( {' d4 s. W% ?
  1380. Sund_Bank_Set;切换音乐bank
    2 E  x. N# l1 u( L% |7 p
  1381. LDA Music_Bank_8000
    5 ]% I' o5 W! p% U! e
  1382. JSR SwitchBank8000
    & Z: l7 y, x9 E( }& {' s, K
  1383. LDA Music_Bank_A000! A1 i( i; V7 ^6 r6 o
  1384. JSR SwitchBankA000
    . C* R+ m! I, _
  1385. RTS
    9 K6 q! R( F; `% d* x9 [

  1386. . i9 P9 z1 ~$ D( O. F
  1387. ;==================================================" y0 R$ M  U4 i3 v- y
  1388. Sound_Init;音乐初始化# h: D2 a2 X, |
  1389. PHA
    ' _( a, t1 |# J! V
  1390. JSR Sund_Bank_Set/ N- T  D) s( m) X" E
  1391. PLA
    9 A1 p. x- p' M0 F4 @
  1392. JSR Music_Init_Addr3 c- y  @) p% M7 R' c+ y3 d1 d
  1393. JSR SwitchMainBank
    # D" r4 l5 ]; p7 _0 S

  1394. 3 A: x" Y$ H& B1 ^& |/ j
  1395. JSR Music_Bar_ReSet$ Y! Y% H$ H7 t& j! L. n# R
  1396. JSR Time_ReSet
    8 Q" p) A9 ~" y# ]& k
  1397. LDA #$00
    - T2 D% v; R% S. u$ G* h! G; N
  1398. STA Music_State
    7 S% }3 F8 B7 E" y$ x
  1399. JSR Music_Stata_Show, g( e. u' v+ A3 N; X7 a: U
  1400. .IF Track_Name_Pos9 m* m7 ?& Q, y5 b( T
  1401. JSR Show_Track_Info( M! ^& i8 b* V4 v8 [6 B5 d5 s
  1402. .ENDIF
    ) e( R5 V. i" T6 E

  1403. 4 a) ~0 c) B! ?+ R, _! i8 v: b
  1404. RTS
    ) J, Y& d" e. ]

  1405. ; Z# O# G% X7 Z" T) q3 S
  1406. ;==================================================
    ' M0 S, Q- U( }% [0 [. P
  1407. Sound_Play;音乐播放* R) p' L- W" t- A
  1408. PHA
    / m8 A! Z- J1 `9 z
  1409. JSR Sund_Bank_Set
    " a; p7 Z4 y9 ^( b* @$ {
  1410. PLA
    : D3 ~7 \' P# I3 P$ U. d  t. r
  1411. LDA Music_State0 v  o/ |2 K2 Y5 X" {+ f1 |4 P0 {0 F
  1412. BNE Sound_Play_End) t" l" t9 \* D7 J# Z3 F
  1413. JSR Music_Play_Addr. E* i6 m, v) l0 x$ ?- w4 _6 F5 r
  1414. Sound_Play_End+ ?7 I: t; E5 {& J( O
  1415. JSR SwitchMainBank
    & r4 @) \% A- h
  1416. RTS, c3 J6 J# k8 ^

  1417. & k% P2 W9 Y! Q; ?: z. X, c! G
  1418. ;==================================================9 `& @% k% j' l& ]. G/ A
  1419. .IF Music_Reset_Addr
      L6 k' p0 d0 U! @
  1420. Sound_Reset;音乐重设(如果有的话)3 r. D+ ?* O; ~
  1421. JSR Sund_Bank_Set
    ; {* c8 V3 X. `
  1422. JSR Music_Reset_Addr* `" P4 b( g  g5 ]# J
  1423. JSR SwitchMainBank
      L) r# k8 a* f* j$ n
  1424. RTS6 z$ B) F3 O( d* o
  1425. .ENDIF
    ! I  J) U  [. N

  1426. 3 u0 G8 I# @8 b, L2 e. C; p
  1427. ;==================================================. I7 C, [8 A- x, C% O, v, z
  1428. MainLoop;死循环5 I( w* z# @1 ]* p) _0 o- {$ y
  1429. JMP MainLoop
    ; G4 V6 u( |5 F  F

  1430. 2 s0 t  ?3 k6 i) i* c: a
  1431. ;==================================================6 S, s! _- J  t  H, u! c; m* N
  1432. NmiProgram;Nmi中断处理
    0 ~9 d/ D. r' l1 x0 Q! K
  1433. PHA
    " Q- l4 f0 X, j- _
  1434. TXA
    % Q# c) Q! [3 l! r; b  D, _. r! O
  1435. PHA8 H. g- F" F7 C5 W  H( }; y7 j; S
  1436. TYA
    0 p2 o2 _+ }0 v& ]7 H
  1437. PHA
    ( g' R6 q/ i7 z/ ?" V
  1438. ) p  s" f7 w, D$ e
  1439. LDA PPU_STATUS
    4 {0 p6 l+ `4 s+ \
  1440. LDA #$00
    0 c) |- _! y6 m* j
  1441. STA PPU_CTRL
    & V  \/ L; |, E6 c
  1442. 3 |* G6 O" Q% b( M
  1443. ;切换主程序bank* u3 z- D( V9 L9 I' \7 \3 I7 E
  1444. JSR SwitchMainBank
      o* A' c3 C0 R3 T

  1445. ; }' y* n6 L0 l& p* y1 G
  1446. ;NMI处理
    / L8 v" M; ]3 _# ?$ d) b
  1447. JSR NmiProgramProcess3 [. x6 X9 k1 U5 U8 ], M. b7 ^

  1448. 5 v7 @5 I4 I& D$ h" E
  1449. Nmi_Proc_End" L, T; M$ Q/ I! U, D
  1450. PLA
    6 l* L7 c) ^) s5 w# w
  1451. TAY; D. U' A2 B- q# b+ Q* D9 e
  1452. PLA9 p  C' K6 r/ ?
  1453. TAX& p- f8 I: e4 w, R! H; X* W3 j
  1454. PLA6 u; g' q/ p4 B- X# v7 a

  1455. 7 E1 K; ~  C. g1 O- d0 e
  1456. RTI6 J* S) b- l- f/ M

  1457. - L4 e' E& o- l2 V
  1458. ;==================================================
    9 b$ ?9 P0 L5 B
  1459. ResetProgram;重置中断处理
    5 d5 E( r8 F4 R  n0 A
  1460. SEI( T, `- W" Y8 a
  1461. CLD$ T; W. M$ E" F
  1462. LDA #$00
    ' ?8 Y9 O3 D. ?
  1463. STA PPU_CTRL
    . ^0 o: k3 w  e$ y& l1 E
  1464. STA PPU_MASK
    " `* u4 P* \/ A/ ]) q* q, m! {2 J  o

  1465. - Z4 U' D( T* S2 A- P- Q" s
  1466. JSR SwitchMainBank' m. v' T6 d# @
  1467. JMP ProgramBegin& B4 n" P' Z) V2 Y5 s

  1468. * ?3 A1 a* @' ?
  1469. ;==================================================4 f; P: M- z1 p" S6 \4 a
  1470. IrqProgram;Irq中断处理
    ; S. M$ L! w  D* z
  1471. RTI) I1 r0 f; a0 v' K
  1472. , G$ c: q5 I) X5 g
  1473. .IF SOUND_BAR_SHOW_ENABLE
      |7 m- M8 X* E' \8 u
  1474. .ORG $FF80
    * e% k) K7 U! E6 o
  1475. STA $4000,X
    1 z/ K$ B& h" b  N. }) d9 z* u
  1476. STA Sound_Bar + $00,X
    ! Z! c4 L- C! k- Z
  1477. RTS1 x* |- ^6 v; O3 {& _0 N- `
  1478. & C3 d* g# m1 G8 ~, s  m: R
  1479. .ORG $FF886 h8 Z& f, h) [. M" h! q
  1480. STA $4000,Y) q3 [+ ^  V  y8 y) k" F
  1481. STA Sound_Bar + $00,Y
    * H  Z$ B0 N% \( X
  1482. RTS5 o( R+ I& N. K4 k- {

  1483. 5 F- I( ^* {  C" k) P* _  L
  1484. .ORG $FF90
    - M+ Y8 m7 C" }$ l
  1485. STA $4004,X1 t1 b, ]$ C5 }& t/ @9 w
  1486. STA Sound_Bar + $04,X: F, I7 y$ a0 V3 F
  1487. RTS
    2 Q6 Y( r$ ?# P8 ^1 W0 v
  1488. ' C, A- s* P$ K8 {+ b! w2 R
  1489. .ORG $FF98
      Q6 u& z" @" a" H( d: W+ ?6 C; ~+ F" Z
  1490. STA $4004,Y
    9 K5 v- x  ?$ U7 B
  1491. STA Sound_Bar + $04,Y8 v5 v: j2 u, y# }, M* L: Y4 c
  1492. RTS
    " Y4 g, ~7 x- v# h1 U
  1493. ; B' W' U8 l( J) X! }* U) }; L
  1494. .ORG $FFA0
    6 [3 ?! ?+ g9 m& T: R3 W
  1495. STA $4008,X
    * R5 C- v! q7 [$ G0 m6 u3 E5 X
  1496. STA Sound_Bar + $08,X
    % @( C: }. N1 h8 e2 G; w
  1497. RTS  F, z1 R# Q3 u' t  r1 E* n

  1498. ( M* z( @1 O3 E8 b
  1499. .ORG $FFA8
    ( l4 a. M1 I) ]! C3 X
  1500. STA $4008,Y! V( L7 `6 ]) G4 E4 D4 C) x/ _
  1501. STA Sound_Bar + $08,Y
    ! s1 E3 F, l' ^( F0 K3 K2 A
  1502. RTS
    ! |4 m4 m0 e; d5 i1 j! p, C% P% q
  1503. 1 g" b% S4 H2 I& x! P* o
  1504. .ORG $FFB0
    ; w+ S$ @# I  @. O
  1505. STA $400C,X
    6 E1 \9 _' C, y( ]
  1506. STA Sound_Bar + $0C,X
    ( O( j, |# B4 }8 ]( w
  1507. RTS3 D9 S9 i1 G4 ?
  1508. 9 f5 s( q& A7 `: u; g9 j) e( ~
  1509. .ORG $FFB8
    / P! _1 l! j* f" Y- X; {
  1510. STA $400C,Y3 k  g0 ?8 s! h1 }5 N. n3 A( D( `2 X
  1511. STA Sound_Bar + $0C,Y
    5 }4 r1 V5 V( k' H/ a% P" x
  1512. RTS7 o# j0 P+ x  w$ t! ^' b+ c
  1513. / n4 S6 R  J4 @9 P- r/ t; {/ f8 `
  1514. .ORG $FFC0
    / h( a' p0 o9 O) @( {
  1515. STA $4000
    . S4 k' o0 c% J/ C
  1516. STA Sound_Bar + $00! ^6 X) x2 ~: B6 ]
  1517. RTS- z% q$ q& g4 n

  1518. . H9 ^" o) [7 t* G7 E& ~2 i
  1519. .ORG $FFC8, K& r5 Q; H) `# F" y
  1520. STA $4004
    . d3 m0 T6 o) K' @4 @
  1521. STA Sound_Bar + $04- h" k% K7 o! u% a! I1 S# Q
  1522. RTS
    5 Q+ I% i5 |/ n# L) H# ?9 T
  1523. 0 J* q; G0 K. M: H1 _
  1524. .ORG $FFD0
    : a0 E: n* j$ v6 \
  1525. STA $4008
    2 ]/ K" a  V+ E# g5 e1 R6 r
  1526. STA Sound_Bar + $08
    4 S7 O) N# i/ z% p/ y1 Y
  1527. RTS( R1 S, x% p) f: f$ _' F

  1528. ) u$ u7 W% g9 [# u6 w; P
  1529. .ORG $FFD8
    * n: \1 r* n7 f$ ?8 G+ D2 r
  1530. STA $400C
    : ~! `  t' A3 l8 Y- {  Z
  1531. STA Sound_Bar + $0C
    9 x# n, {0 V4 [" ?7 z( D
  1532. RTS! h. _1 Q# W7 z6 h* l# j9 P
  1533. 6 U; F" \" U9 E& O# ^& @
  1534. .ENDIF
    + C, Y8 _7 q3 F2 @$ q* O) @

  1535. + o# _# }# [0 H4 a& S; C: Y
  1536. .ORG $FFFA7 |( A$ v) A* t; V
  1537. .WORD NmiProgram- Q/ Y" @/ `) |- S2 b7 H& L, o+ a
  1538. .WORD ResetProgram
    & C/ M6 ~6 n9 B7 }5 m& y
  1539. .WORD IrqProgram
复制代码

( n4 ~* a  Y1 a% c4 i1 s9 v/ L
2 i! u3 g; ]: r4 q
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1240 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3230 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 18:06 , Processed in 1.086914 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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