设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 5 @: Z5 i1 L! O

* r8 G/ L, P0 K4 x/ b. z1.魂斗罗- `" N5 S1 X" O; S( y
2.超级魂斗罗
- I( Q$ t: N4 v. q+ o3.赤影战士
7 e" X7 k  A0 G& V; O" I4.忍者龙剑传27 h- D/ b2 y2 I2 O; ~

) G, O/ \0 L7 K+ G# V' m5 C; p( _5 Y0 a3 U5 X- X
* r( f% M$ F) m4 T3 o. j- f
8 r0 t+ r0 Z4 ^% e" ?& V! @' q, W
源码:
7 O+ Z1 p) d+ f* U( `7 {
  1. ;[FC音乐][播放器模板]' v# p$ i( v! t6 k  e& Y7 z7 r& E
  2. ;FlameCyclone 20230710
    $ X$ F" i9 J& {6 z

  3. $ `( g$ a+ C8 w5 ~) W# n$ e8 h: Y' u
  4. ;文件头
    7 k* f8 l" X2 S) y) G: K5 c
  5. ;======================================================================
    + F* J! O  @5 K  |
  6. .INESPRG 4                                              ;16KB PRG 数量
    2 c; _; `) X" L7 f! l) S1 e
  7. .INESCHR 0                                               ;8KB CHR 数量
    2 Q$ b- @& ~* j- U
  8. .INESMAP 4                                                   ;mapper 4' L" D$ z, p' N% k2 w* D
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    % y+ l  u# k% j! \+ n
  10. " a/ V% }6 x" \
  11. ;==================================================
    ! Y& o6 F) l0 N# c; x' Y- n
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ! z6 T' Q) l4 o
  13. ;==================================================' T9 Y% q7 \# l$ o+ t- M/ ~
  14. BANK_DATA_MASK              = $07
    2 P- x' ~$ v. u. v/ W* w/ E: G
  15. ;==================================================' t  X- n, m( B/ n
  16. SOUND_DATA_BANK_0           = $00
    ! u7 S% J4 q- W
  17. SOUND_DATA_BANK_1           = $01
    + L5 r3 ]& B% h: C6 B. H8 _
  18. SOUND_DATA_BANK_2           = $02
    . [5 s7 W$ Y+ U) g
  19. SOUND_DATA_BANK_C000        = $06
    ! |4 r; c' t$ y" E2 x- x
  20. , s3 E6 i; }2 F* p3 R
  21. ;-------------------------------------------------) D' o  ?* R' y! {
  22. CHR_DATA_BANK               = $04
    2 e8 M% L+ D# F
  23. CHR_DATA_ADDR               = $A000: P" U8 T/ n4 r
  24. ;-------------------------------------------------
    + g  N# h: [, N4 f6 B' c
  25. PROGRAM_BANK                = $05: @- l2 {: t( ?4 W5 M
  26. PROGRAM_ADDR                = $8000& T9 w4 a, ?& z1 {0 U" h
  27. ;-------------------------------------------------
    7 r6 |/ Q$ h% k0 P
  28. RESET_BANK                  = $07
    * j3 t# l& i# W0 i/ g
  29. RESET_ADDR                  = $FE00: y: |1 [3 N$ H2 i6 u- e# {& G0 {
  30. ;==================================================
    - C4 l( e+ o- _& ?( d$ m4 e
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    % g7 ?4 K0 f9 J* p' h# y
  32. Music_Play_Addr             = $813C ;音乐播放地址+ H) r( b( t9 a. M/ K( i8 }. d
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址! B; e* o0 C" [1 B/ o: T
  34. ;==================================================2 Q% Z% ]1 o2 `+ x. Z
  35. Music_Song_Total            = 039  ;全部曲目总数$ F: c8 y  B5 Y5 Q# L
  36. Music_Start_Song            = 007  ;初始播放曲目" _% }' r1 G$ U6 T, w
  37. ;==================================================
    % A+ a% A3 ~: r

  38. + J# R, W" U2 R1 h" L- g6 Z
  39. ;==================================================" b6 y- S5 X* i1 R
  40. Title_Text_Pos      = $210D ;标题文本位置
    ! T; J$ K$ E8 j! d0 Z0 m
  41. Author_Info_Pos     = $2284 ;作者文本位置" ]$ q  Z9 @5 Y* k
  42. Date_Info_Pos       = $22CB ;日期文本位置9 P4 ?; t9 ~: w0 Y% E( h; ?
  43. ;------------------------------
    " J! ?# ]( j" ?9 m2 |
  44. ;------------------------------0 g2 |) G" [7 x, {' E) ~; k
  45. .IF SOUND_BAR_SHOW_ENABLE
    7 l; u2 ?& b+ Y# @% W- b$ o
  46. Play_Index_Pos      = $21B3 ;当前曲目位置. |# w. z3 ?* u0 [1 x2 B$ q6 B
  47. Play_Time_Pos       = $21F3 ;播放时间位置+ w9 V9 @7 b$ A3 U; R( A* _& E. N
  48. Play_State_Pos      = $2233 ;播放状态位置5 J$ z# g: M5 A/ T$ h! U
  49. .ELSE
    ' Y0 O8 |4 c: k, B) R
  50. 8 [) d2 Q4 p0 W6 [- d$ m- s
  51. .IF Music_Song_Total > 99. ]6 t; b; O3 I% J; \
  52. Play_Index_Pos      = $21AC ;当前曲目位置) }) M( a2 y+ Y7 f) R  m+ t
  53. .ELSE
    & s0 b' I" T0 r0 b1 l5 Q+ J# I

  54. - Z0 l: Q1 f) C0 l/ @
  55. .IF Music_Song_Total > 94 Z2 w# ~/ z6 v2 Z
  56. Play_Index_Pos      = $21AD ;当前曲目位置9 q; r+ q/ O: N* N
  57. .ELSE& x3 T# ~/ f( }  z( X/ g
  58. Play_Index_Pos      = $21AE ;当前曲目位置, F7 A8 u- n; ^5 g" f: P7 e3 o5 w
  59. .ENDIF$ X2 D3 ]% C/ g  t5 C2 C

  60. , O1 t( K) o4 |3 {: b) {
  61. .ENDIF
    ( L7 y7 X9 ^: C  n- w( U! q+ ]

  62. ! M- R9 x7 s6 S( r6 H# a% b
  63. 9 ?8 R  r1 e% Q0 _* X+ J
  64. Play_Time_Pos       = $21EC ;播放时间位置
    / }( t; D; v1 d) t/ ?
  65. Play_State_Pos      = $222C ;播放状态位置
    / o" k. z! o( J' c# l
  66. .ENDIF( r: F" ^. U# |! w
  67. ;------------------------------
      D7 y7 o$ m8 s
  68. Track_Name_Pos      = $216B ;曲目文本位置
    7 v6 C5 ~' D5 Z+ ^; @3 L
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    4 h8 {7 p* T! W1 |$ T# C- N/ C5 N. h, x
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置$ V* M! h, E, N
  71. ;==================================================7 U4 m" |1 u: h1 H1 H
  72. Scroll_X = $000 D5 u: X, |: y( z
  73. Scroll_Y = $06
    9 N' v. R8 y7 w' e
  74. ;==================================================5 x) d6 I4 Q+ ]' @
  75. RAM_Cln_1       = $0100
    ! k0 B9 B6 T& d, j
  76. RAM_Cln_1_Size  = $80' h4 P& D, W9 D8 p
  77. RAM_Cln_2       = $00E0! ?+ F% N/ Z- V4 H3 T3 w% \$ y
  78. RAM_Cln_2_Size  = $20. b: X% A. o* Y7 {% k: ]0 i: _2 K
  79. RAM_Cln_3       = $00E0
    5 G! B! C; {! H' @( b8 e  N3 A
  80. RAM_Cln_3_Size  = $20
    4 v7 _8 Y7 u+ M5 p
  81. 5 f$ w( Y: Z+ Z% t/ ^
  82. ;==================================================
    ' p" d0 t2 s/ ?$ v# w$ v* m1 S$ C) v
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器0 c8 C- \  W% {0 r& ~8 D
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器% A% h; t8 O# h0 @8 `4 w9 |
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    / h+ l1 g; h$ C) ?- ~
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    - Q  F* D7 F* U, m0 D1 w0 t
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
      z8 H) n1 e) O) x2 j& O& D
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 - h. @# i1 a1 S: }! c
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加- ^+ V' A2 ?" W2 l" q
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    : B) w( m: _' G6 b. V4 V
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存: P6 u. E9 S/ `5 _0 A8 r9 {. [4 V- k
  92. APU_STATUS              =   $4015   ;声音通道切换
    0 C; C5 D, c! ^1 K
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ! R' p+ O  W0 T. z+ r
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通+ d: V% o9 F% k
  95. ;==================================================
    7 j6 _! r1 R' L0 L& A* i4 F: a
  96. MMC3_BANK_CTRL          =   $8000
    / t, Z8 b* \0 E( \2 j
  97. MMC3_BANK_DATA          =   $8001
    - t2 z, t0 J- C7 c) _. G
  98. MMC3_MIRRORING          =   $A000
    , `4 P) Z$ d, ^! \
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    1 U* r* s+ b' C5 d
  100. MMC3_IRQ_LATCH          =   $C0002 [' r4 e" ^. `6 W2 q9 i
  101. MMC3_IRQ_RELOAD         =   $C001$ g" Y+ L; G4 U+ x0 P1 e
  102. MMC3_IRQ_DISABLE        =   $E000' ?- E9 C, v0 _
  103. MMC3_IRQ_ENABLE         =   $E001
    ) j8 M2 a" L: {2 \

  104. " w8 {/ r; u# G* m7 n/ s* a
  105. ;音乐数据块" p! u1 b& k! `2 p7 G

  106.   @, N% a- \5 P. D  G! t
  107. ;======================================================================9 d6 \* g4 p+ R2 K) n
  108. .IF SOUND_BAR_SHOW_ENABLE
    % k  P& n, w% Z. x
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK9 h# F" V# H% f2 Y! `% R3 @8 q
  110. .INCBIN "sound_bank_bar/music_data_0.bank"3 a5 B, {4 \# x* N
  111. 0 [2 \3 f- n! e0 x4 |# f) g7 R
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    5 C+ F) r- W: U! l8 v. z1 f
  113. .INCBIN "sound_bank_bar/music_data_1.bank"' |  K; K% C8 A7 q
  114. 8 `) R: h7 g0 b4 \1 V# S8 F
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK: _' K5 |! w$ Q9 d' B4 R4 b
  116. .INCBIN "sound_bank_bar/music_data_2.bank"5 N2 {: M0 T* H: ^& [# _( M
  117. " }+ a3 ~: \! l; Y
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ! H4 u: g0 A+ v# ]( p- B/ {: B: j
  119. .INCBIN "sound_bank_bar/music_data_3.bank"( C/ s7 d  n* w9 L
  120. : d& t/ G, B- H# s# E
  121. .ELSE" R2 r9 `/ n  s0 S7 C2 [
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK" ]! G/ X2 ?5 O
  123. .INCBIN "sound_bank/music_data_0.bank"  I! C- ~, m1 d1 E& K

  124. , ]. J% i7 E% |! N# ?1 q+ }& l
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    6 ~  B2 j: D( Z9 I" h6 O3 Y
  126. .INCBIN "sound_bank/music_data_1.bank"6 j4 k+ K! @$ m: y& T$ y  ^

  127. / F5 @' i! F2 w# r
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    0 E% l5 i0 f8 K  t4 b: T5 o
  129. .INCBIN "sound_bank/music_data_2.bank"
    " H5 X8 C+ i# A# j1 A+ d9 Q

  130. # b7 h8 B7 z) V# o' I8 j/ j
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    1 S$ v. |. Z; g$ U9 _3 a! W& {9 ^
  132. .INCBIN "sound_bank/music_data_3.bank"
    ; a" f! J8 y) U' T9 x! E( l
  133. .ENDIF, w  z2 V1 |4 q- `& N2 |

  134. 4 }  E0 |! ?7 h2 l  z8 f- d
  135. ;CHR图形数据1 x, W  ?0 L) U# B5 M
  136. ;======================================================================
    % {8 A% B& }: r
  137. .BANK CHR_DATA_BANK
    ; U) H$ X; ]& _
  138. .INCBIN "chr_bank/chr_data.chr"
    ; j) W  G" h/ T5 c, ?& \
  139. 0 k- V. V; p5 L5 [, J7 h
  140. ;==================================================# a, K; ~& f  y/ ]: N2 j! m
  141. PPU_Addr        = $0300. C! e4 D: w  b" z% u# Y/ D" c. c
  142. Palette_Addr    = $03C0
    ) P3 t! t  W& l* C
  143. Sound_Bar       = PPU_Addr+$E0; M2 `! a! x- G; l6 u
  144. ;==================================================) l: q0 [: b5 ^% V1 x0 H1 y' z
  145. Palette_Update_Addr     = Palette_Addr+$0D! c. t, S2 T% c: Y1 u- f
  146. Palette_Update_Max      = $2C  m" u% C+ X' _% p. @
  147. Palette_Update_Min      = $217 U/ d3 i5 Y! @1 Q- M
  148. Palette_Update_Interval = 603 T8 A/ H( F0 a4 Y; `
  149. ;==================================================
    & K9 m1 G9 h8 e% s; B0 g7 y
  150. Sound_Bar_Cnt       = PPU_Addr+$F0# u0 x3 R5 b, f
  151. Screen_State        = Sound_Bar_Cnt+$015 U" y2 N' z) t, h% G
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    % ]0 z6 `" J. v+ d0 {; t
  153. PPU_Addr_H          = Sound_Bar_Cnt+$031 p2 e! }. n( w  S4 k
  154. PPU_Addr_L          = Sound_Bar_Cnt+$045 n; L5 z- e4 p% r: ]' e4 j6 O7 k- _
  155. ;==================================================
    , \, d# S( W; J, O) e! ?
  156. Data_L              = $70, X0 s1 R, b, L, V7 T9 k6 X
  157. Data_H              = Data_L + $01/ m  y2 E( |$ o0 I+ s! W
  158. Data_Cnt            = Data_L + $02+ i1 A* K/ Z6 H
  159. Data_Buf            = Data_L + $03" Q! d; d8 W- w( S+ \
  160. Time_Wait_Cnt       = Data_L + $04
    2 x  O2 k( E6 P
  161. Palette_Wait_Cnt    = Data_L + $05& w$ y1 o- I& v" W* c# @
  162. Palette_Update_Flag = Data_L + $060 n5 o& d, a/ J
  163. Show_Track_Name     = Data_L + $07" r3 I& V8 L4 F! @# D( B
  164. ;==================================================' L) Y/ p) K  c1 ^9 F. E
  165. Key_Keep            = Show_Track_Name + 11 H9 B' ]  Y% c+ N
  166. Key_Once            = Key_Keep+$01- i1 ?. A! y) L- S
  167. Key_Kemp            = Key_Keep+$02
    / Q0 i- W7 [5 V9 X- N
  168. Key_Temp            = Key_Keep+$03% {% R6 r" s8 `* d; g
  169. Key_Getv            = Key_Keep+$04
      X6 j/ @7 u5 c. V, N6 |! P* L
  170. ;==================================================8 {% W$ g9 ^% j% o
  171. Music_Cur           = Key_Getv+$01: v4 c& m, {3 X+ t$ q  S7 D
  172. Music_Last          = Music_Cur+$01
    + b+ P1 S4 Y% P& l; p" N* f
  173. Music_State         = Music_Cur+$02
    $ I, z; x/ ~9 j" q0 t! @) e
  174. ;==================================================
    * d) a- Q7 {& t- f: I
  175. HEX_Data            = Music_State+$01
    & Y% w' a$ y/ M7 l
  176. DEC_H               = HEX_Data+$01
    % J( g) b) F! X$ }" ?0 I
  177. DEC_T               = HEX_Data+$02
    : ]! k1 \% T. L9 C* u
  178. DEC_L               = HEX_Data+$03
    ' V) I7 r% K# e
  179. ;==================================================2 V6 @; z5 _+ J& X! N! G, b$ s4 {
  180. Time_S              = DEC_L+$01& I- j4 I" G. [$ _: h% o: e/ w# y
  181. Time_M              = Time_S+$017 \! ]- c" y5 h6 Y* [- p4 R
  182. Time_H              = Time_S+$027 s. }2 U, R, g- \, q% {* s( P
  183. Time_Cnt            = Time_S+$036 i" i0 C& M' Y, |! H

  184. 1 M; t5 Z8 Q" t" ^9 z
  185. ;==================================================
    3 N+ k9 M. g  [
  186. Music_Bank_8000 = Time_Cnt + 1$ L( Y- Z2 B0 Z, D7 K: F/ j8 A
  187. Music_Bank_A000 = Music_Bank_8000 + 12 y; C$ v9 p- q4 d, n
  188. ;==================================================, a3 w7 c5 Y& Q' G2 \$ ~" h

  189. ' T, X' S" x4 m- C0 k
  190. ;======================================================================
    % m* ?: }! s" S9 R9 s0 x( m
  191. .BANK PROGRAM_BANK
    8 q! T+ ?* p, g# V
  192. .ORG PROGRAM_ADDR
    0 a% H- j. H4 s. G+ l2 g

  193. ! l2 w, p9 y3 ^& v, e: ~
  194. ;==================================================
    * f3 Z& Y0 c3 d2 Y
  195. NmiProgramProcess;NMI中断程序处理& p( I- Q; E, k7 T0 V
  196. ;处理PPU图像0 s# b: m' x: G$ q
  197. JSR PPU_Proc/ }& q+ h+ _0 ]  Q# q

  198. 9 c, Q/ E8 @/ }, ]4 b
  199. ;启用NMI中断/ N+ C# H& |8 y2 V3 I9 v
  200. LDA #$80
    + f6 R6 b  m: @
  201. STA PPU_CTRL+ _& i$ m$ B2 t$ h% h3 _

  202. $ s6 j) V3 d3 b/ g! P* g
  203. ;更新调色板+ W) z" [: J2 N% `& b$ Y3 W+ R
  204. JSR Update_Palette_Data
    9 T" g6 k, }+ U. y' P
  205. " D) S, }& W0 M8 c# M/ E
  206. ;显示时间(缓冲)
    4 i! H; u: ]. b9 }- U
  207. JSR Time_Show
    + Z. z# p3 L- w( F. i

  208. 1 n) a* g2 p6 j; H# _
  209. ;播放计时5 p& N4 x7 p3 C3 s+ w
  210. JSR Time_Count
    4 t: [/ r3 m% ]1 Z! M2 l7 m
  211. ) p- j- Z! W# L3 w( E* B% b0 ~1 t
  212. ;播放声音, I- _. d1 k% W& _
  213. JSR Sound_Play4 E( U+ o% R4 F4 H" x/ g

  214. 1 g" [( D/ g- p8 \( I
  215. ;切换音乐(手柄触发)9 o8 D2 h9 K1 e6 y: x
  216. JSR Music_Switch
    ; J/ J# m2 C0 L0 M2 j. O# j; o

  217. " t/ F. F$ q8 N, {# H7 k
  218. ;音乐显示(缓冲)& u$ i( M9 f; k7 D. w+ ]" [
  219. .IF SOUND_BAR_SHOW_ENABLE3 _3 L1 A/ i& N% X7 Q7 g. V
  220. JSR Music_Vision$ h+ R- [! |3 ^7 V# \
  221. .ENDIF; q1 x6 F0 w/ \7 f

  222. ! e. ~% @4 \% ~# S8 M" H! o
  223. LDA Time_Wait_Cnt
      o# g2 r# y' N( d4 _2 ~
  224. BEQ NmiProgramProcessEnd& v+ F( p; y  z8 O; W! Q( i
  225. DEC Time_Wait_Cnt" r6 z9 ^$ F9 E& K
  226. NmiProgramProcessEnd
    6 T8 d% h+ i0 a& U% s1 g1 W
  227. RTS/ m1 L9 {8 F0 S. N  o) Z! J
  228. : o! {& J4 t7 O# T9 J" c
  229. ;==================================================& i7 i( F) V# v! P# h1 s6 Z
  230. ProgramBegin;主程序
    8 }# ?, N& j1 t
  231. LDA #$00
    & u! I% S# Z) }6 I
  232. STA PPU_CTRL  H/ K3 E% F" b2 Z
  233. STA PPU_STATUS
    ' F4 d, v7 v3 W0 t+ M) q
  234. STA PPU_MASK$ ?! q7 j' Q4 h( n, B
  235. STA APU_STATUS5 r( E* G5 M/ ?: C# Y
  236. STA PPU_SCROLL
    ( C( ~, W9 K9 w' `9 A" I
  237. STA PPU_SCROLL
    9 N. X! Y! O7 X9 c# m7 c3 `6 d
  238. LDA #$C0- S6 D* B: r6 |, j; q
  239. STA JOY2_FRAME+ {0 `7 b: l+ y. V% W
  240. $ i. v, S; ?- l" K' V
  241. LDX #$FF
    9 i. i8 u9 _- X6 N0 e5 P
  242. TXS$ e5 {; C, o, E0 W5 i$ H
  243. LDA #$002 g. h! x3 S- O7 F
  244. STA PPU_CTRL
    2 z7 D, K, l$ E% y4 D+ g
  245. STA PPU_MASK$ F* O$ r9 A, {5 t) n' Y
  246. STA MMC3_IRQ_DISABLE
    * X, s# C- O6 m8 T/ U' W/ ]6 y3 D# H
  247. & W$ b8 E. T7 f" m9 C
  248. ;==============================4 |( s6 c* }9 C$ s# S8 |/ a# C+ p
  249. ;调色板清空
    6 J7 Q2 X- o, {' J2 x" k
  250. LDA #$3F
    ) O, x# L9 d& }9 x  k
  251. STA PPU_ADDRESS6 J) ~, h2 q' }+ g& f! X! S
  252. LDA #$00% N5 _9 |* ^6 u1 W
  253. STA PPU_ADDRESS: o" p% @: n* Y7 a- _- b1 W
  254. LDA #$0F- ~" c+ K' _) ^: L
  255. Palette_Clear- X2 C8 g3 X0 ]2 b( x: y" k$ a7 E/ j
  256. STA PPU_DATA
    & n7 C. L9 ]  C8 p
  257. INX
    % }7 l4 K6 e) J2 U( G7 a
  258. CPX #$203 m( Y& H; t& f& x/ ~* U* ]% R% A, A, p
  259. BCC Palette_Clear5 C$ D$ F- g! X
  260. LDA #$00. L1 u$ L3 K, @+ l4 C
  261. STA APU_STATUS9 Q9 L2 `; S0 x3 q
  262. ;==============================' ^4 s# w& H1 d2 g
  263. ;初始化背景调色板
    1 |' ?+ V' R% `1 a2 t' t% y5 T0 c$ A
  264. JSR Set_Palette_Color
    ) T0 a9 j; z& O1 w
  265. JSR Set_NameTable_Attributes* |6 R% z; R3 N' i& T; c, l

  266. + h6 f; f( K6 y
  267. ;==============================
    3 _% ~: b# i3 ?
  268. ;RAM初始化
    ; c. L/ Q& Q5 z6 o2 o
  269. RAM_Clear_All5 j2 g/ m# Q, H' L( h) x
  270. LDX #$00/ H" ]1 j4 j0 B+ ]$ k+ M
  271. LDA #$00
    1 \; G8 Y" D( ^/ j  {$ g4 B, U
  272. RAM_Clear_All_Start3 J8 [" Z. t) Y# T. @' g
  273. STA $00,X
    - b; ^) {9 z7 w  T  R
  274. STA $0100,X
    3 p& B! @+ f  g+ c. `
  275. STA $0200,X4 E' s% O0 }( D/ i: T/ P& ^' i
  276. STA $0300,X
    3 i2 C: f4 B, l* k$ m& r
  277. STA $0400,X
    2 \1 R; N3 q* p# g$ k! o
  278. STA $0500,X- I3 S8 `* e, y' N  O
  279. STA $0600,X) H* L& B9 t! l6 Y" m; A
  280. STA $0700,X
    7 r: u) N3 D& F3 e* P- _* s
  281. INX
    1 u% n3 O& @1 u: I
  282. BNE RAM_Clear_All_Start
    0 x8 ]4 r  j+ B" ^9 i6 v8 C
  283. ' ^3 H- m; m/ x7 j9 U, m) B! j4 ?
  284. JSR VramInit
    6 ]% k# g$ j3 F* k- J5 j* Z
  285. JSR Init_Palette_Addr) Q$ A, H' W% Y9 R

  286. ! Q1 L/ K& f' U7 U+ S- C7 c
  287. .IF Music_Reset_Addr
    ) H2 F2 W- r! s+ R
  288. JSR Sound_Reset
    # k1 X. C$ m" j
  289. .Endif: o3 u$ I# I; v( b  `5 o' Y% d
  290. 0 u, }* t- p% |3 r! e
  291. LDA #Music_Start_Song-$01
    / B! b$ K2 x/ K8 M
  292. STA Music_Cur. Z" E8 D! z/ o4 Y
  293. 9 Y  ~/ y6 Y& Y7 v: C9 Y
  294. JSR Show_Music_Text
    6 _# V0 i! }2 ^9 A  P  g

  295. 1 P. r/ t2 V. e4 m' q
  296. .IF SOUND_BAR_SHOW_ENABLE/ T' v. z2 F6 T- C; S$ [# P5 A
  297. JSR Sound_Bar_Text_Set; ~( G! s( Z( p' s- m
  298. .ENDIF
    # ^6 z; {$ \; m, F
  299. + J+ \0 M# t3 R  S) k: W& P
  300. .IF Track_Name_Pos5 j+ V; u4 Y  V( M6 A
  301. JSR Show_Track_Info7 w7 [& f- T& F. U
  302. .ENDIF
    # a! P9 h# L% c5 o" W

  303. ' H& a; F5 F) u; j/ V
  304. JSR PPU_Proc
    / |* X5 P5 s8 [1 ~& ]
  305. : F( n$ p2 _0 `# f! r
  306. LDA #$0E& P6 _" N$ Z, T- N
  307. STA Screen_State
    - g9 M: H: j/ `( V

  308. * W5 Y$ [$ w0 c2 G' O( X  d: j9 `
  309. JSR Sund_Bank_Init/ X" F; I8 H; }4 T3 I

  310. - |' J8 m3 E3 I& T7 _6 f
  311. JSR Music_Show
    / k( C" _2 l; o! B  ?+ L
  312. JSR Time_Show
    ) r, u9 S; p, F2 b
  313. JSR Music_Stata_Show
    ( N& `; p% ^% _3 K
  314. JSR Time_Delay% O# e+ v% C! t" E' c+ T
  315. / o8 k0 A3 v6 a! }) q! X* ]

  316. # W: b0 C! d' w) t. X/ p
  317. LDA #$80
    5 D: l6 d' ^0 C
  318. STA PPU_CTRL& f: z5 S" i* ]# H/ v
  319. 9 t1 ]; `4 l9 C
  320. LDA #$20
    1 ]3 Y6 R" W4 o% B0 o$ a, W1 {3 M
  321. STA Time_Wait_Cnt
    / ^) D* Y5 s# i/ i! Y: D

  322. + g, g5 t. O3 [* C* L3 Q
  323. Wait_Time_Over: |! B5 c2 X3 W
  324. LDA Time_Wait_Cnt
    * [: Q1 Y, L! |. s) G
  325. BNE Wait_Time_Over
    - Z1 B5 x) H& R
  326. 8 f* {3 W6 p! d! k! X
  327. LDA #$1F6 m2 a+ Q4 U5 ~: R
  328. STA APU_STATUS
    " D: {" k7 ~5 p7 n$ j. ~
  329. LDA Music_Cur$ C7 x, C. `! E. t1 c0 T* {
  330. JSR Sound_Init
    ' n+ Z" M4 y" B& U  t$ o9 W
  331. % g' l' j. L) Q9 `+ y2 A! n7 Y
  332. JMP MainLoop
    6 u! n5 n$ `+ ?$ l

  333. / f( ?$ r  V; ?* M6 ?/ z0 k
  334. ;==============================$ I. t. d' ?& a& L; c" ]
  335. Time_Delay;延时等待7 T( ~; y" Q7 c' A: H7 i$ Q
  336. LDA PPU_STATUS
    $ y' F! n) C; d9 F0 K& v8 G
  337. BPL Time_Delay/ z1 q% i- a# i% w4 C4 b
  338. RTS
    5 p! G2 d9 _+ e+ [2 G: q! y) h

  339. 5 k# r" u' l8 `  P$ h4 b9 Q  d
  340. ;==============================
    ( s4 P; F! l! z3 @4 c# W
  341. VramInit;初始化图形内存
    . ~3 ^) `( q, H$ E6 H
  342. LDA #CHR_DATA_BANK
      v) Z8 ?) K' M) \6 X% f2 }
  343. JSR SwitchBankA000
    / n$ ?0 {6 M7 M/ P# B
  344. LDA #LOW(CHR_DATA_ADDR)
    ( Z) Q/ T$ {; T( y
  345. STA <Data_L
    * n; a, z( u& h7 @
  346. LDA #HIGH(CHR_DATA_ADDR)
    ! G$ z( I" H. V( H* S, [
  347. STA <Data_H$ c0 E4 u) L# b) Z7 Q1 b# ]
  348. LDY #$00
    ! [' W6 y% K4 w1 l" W3 a* v. V
  349. LDX #$209 g/ `' m& s: c
  350. LDA #$00: L3 O1 H. ~2 e, t5 @
  351. STA PPU_ADDRESS
    - H$ N" w( y; `) E9 m4 C
  352. STA PPU_ADDRESS
    " j* U) w7 W/ f# L( j  [+ S
  353. VramInitWrite
    8 P8 B2 m8 j9 H: \
  354. LDA [Data_L],Y
    # `. |9 l2 E( M6 a+ y8 h0 @
  355. STA PPU_DATA
    * h2 M0 h+ k+ K" @- ^
  356. INY
    3 ?% G" Z+ a  m
  357. BNE VramInitWrite. _9 S8 ?" B& M1 [4 N. H
  358. INC Data_H
    # j" f- r1 O( ^" x4 g/ t
  359. DEX
    ; U% n: r5 U+ e3 O
  360. BNE VramInitWrite. V, ?. l; N5 v; S# b% d) m9 c+ I
  361. RTS
    5 O- Q4 Y7 I) \9 `8 S
  362. 8 Z% _! ~/ h- [% _- K' ?6 m
  363. ;==============================/ @6 l$ c! o: X2 b* |' Y6 x
  364. RAM_Clear;RAM清除
    - H# \9 |/ k. Q. j9 u6 A+ p
  365. LDX #$00
    5 C- ?+ Z0 V& T6 l# }  E
  366. LDA #$008 @5 P0 X+ [! t* _+ E7 \/ c  J2 Z
  367. RAM_Clear_1
    3 v4 G/ _  u# b& Y0 y% V. g
  368. STA RAM_Cln_1,X
    ! w6 U9 j$ G: k& [; d% v0 @7 y: o5 N
  369. INX: A, A# A% K; U, D
  370. CPX #RAM_Cln_1_Size2 o+ m* n9 M8 r5 ?* V
  371. BNE RAM_Clear_1
    ) e  Y/ A  z9 |% P( Z+ r6 R* ^
  372. LDX #$00$ v) o" \" Q, A3 M
  373. RAM_Clear_2
    7 R; @" x+ }8 e0 r) s( `
  374. STA RAM_Cln_2,X
    $ Q5 s( k. A, V& S9 C& u+ Y- m
  375. INX" X5 g) r2 z7 C- `- S, |
  376. CPX #RAM_Cln_2_Size
    2 i$ K2 w( P% ^1 g  O& n* |# C1 L
  377. BNE RAM_Clear_2' F+ v& e( g9 d" s& \4 L" W
  378. LDX #$00
    ! L: O9 e5 }+ z) u
  379. RAM_Clear_35 `5 A; Q- ]7 p) W7 }0 m
  380. STA RAM_Cln_3,X  F* C9 V) b* r& J( Z- o; [
  381. INX
    4 w& d; e) V( a% {
  382. CPX #RAM_Cln_3_Size
    ' h. K, X- J5 ^) P8 q* s
  383. BNE RAM_Clear_3
    6 W* d% ]& U5 m: a/ p/ Y
  384. RTS+ [8 g) U/ P2 B' p# P

  385. ( w$ @8 ?8 J( ~8 ^  X5 x
  386. ;==============================1 ]7 m5 v+ w$ x" l/ r3 ^/ R
  387. ;音乐切换. _8 p2 Q* @2 ^+ M. t
  388. Music_Switch
    " U9 ^% i1 `- X. C" g) E, Q
  389. JSR Key_Proc7 d/ K" a$ j7 {( w7 D! n0 [; z
  390. LDA Key_Once
    : v& Y/ ?1 p0 C+ [
  391. CMP #$105 b  u% P+ N6 ]! o! s
  392. BNE Music_Start_SongStop! I% \9 d% l5 t# F9 b
  393. JSR Music_ReSet
    7 P# a( d$ s: a, J1 M
  394. 9 E4 A, G" I5 X* r2 ?3 {/ }' p
  395. ;音乐停止! v6 {/ b$ I0 _. J
  396. Music_Start_SongStop
    : f  U9 s: T3 V. n$ k" D2 J5 _
  397. LDA Key_Once
    : V' _6 T# _; w8 M/ Z+ n' [
  398. CMP #$20
    4 j) x0 w7 x* a0 ^
  399. BNE Music_arrow9 U" n$ H; Q  f6 n2 t
  400. LDA #$01
    6 c- Y* `* h9 e( A) G" Q0 T7 S
  401. STA Music_State
    " V+ }$ _6 R! B9 R3 \9 Q
  402. JSR Music_Bar_ReSet
    * f$ u# h' l& N2 q, z
  403. JSR Time_ReSet8 Z  }7 B0 V  f+ w  Z
  404. JSR RAM_Clear0 j! D: Z. i8 @5 N2 D9 U; Q0 P, w$ t
  405. JSR Sound_Clear# H! }7 y4 D* A; D( W
  406. JSR Music_Stata_Show- B8 m1 ?( i/ b6 I6 d$ R0 S% c# ^7 y9 b
  407. Music_arrow
    , ]1 u" N/ n6 y0 ]! v( I
  408. LDA Key_Once
    0 B9 a* _9 B8 o1 e2 w
  409. AND #$CF
    4 U" \) d9 w7 \. X! y9 i) u% Q
  410. BEQ Music_Switch_End
    - ]! L3 J+ |3 h
  411. JSR Music_Number
      X6 n4 j: P; M5 c
  412. JSR Music_ReSet
    ( Z1 b4 j: k1 [
  413. JSR Music_Show
    0 C% s; o# C& ]: A) @& b9 K
  414. Music_Switch_End
    ! X. ~& W4 ^/ t; _9 }0 g* M( f
  415. RTS
    - t: Z. s5 f# Q( G: h
  416. 0 O- d/ s- g1 W4 ^: X
  417. ;==============================
    ( P! v% }; K; Z. Q" F/ e2 H
  418. ;音乐曲目切换2 w4 ^& b6 e0 @7 ~+ r% Y% {
  419. Music_Number  z. b& m, [! d4 k+ j8 X4 K
  420. LDA Music_Cur
    . u; o# ^, e  }! B
  421. STA Music_Last
    4 \. ?4 R, o# z" ?5 r) K: |
  422. Music_Decrease0 T2 I6 a' ?  Z. N: F
  423. LDA Key_Once  q& A; v4 h0 {* c% y
  424. AND #$42
      S% ~. T. Q: T  \7 t* q. F
  425. BEQ Music_Increase9 N4 @0 G0 t3 l( c
  426. LDA Music_Cur- z! N* E6 I% D1 {; h; N
  427. BEQ Music_Increase. {! V0 D. F% u
  428. DEC Music_Cur
    . ^9 C" ~; R, S; R* C
  429. Music_Increase! t0 B5 b/ X7 R3 \3 N' _' j
  430. LDA Key_Once$ c. F  q8 E) U+ w
  431. AND #$81
    $ |  s: x4 x( I
  432. BEQ Music_Decrease_10
    5 _, K6 g  b# I! W( N
  433. LDA Music_Cur
      s3 \9 L9 k3 u* a* O5 T$ m  {
  434. CMP #Music_Song_Total-01* E7 ^% D# Z9 b" h
  435. BCS Music_Decrease_10
    4 B& h" f  [" V$ r1 ~$ j) e
  436. INC Music_Cur3 ~# s& _8 ~: V! s* O! G& x
  437. Music_Decrease_10' B9 O0 O" L- G- L* ^+ h
  438. LDA Key_Once
    . r1 {4 y. h8 |3 N5 k2 {# i. ?- N
  439. CMP #$042 z0 V! l: O( Q9 m( T
  440. BNE Music_Increase_10  V* a. @9 m1 x  w& ?
  441. LDA Music_Cur
    " j3 T- v( h2 c
  442. CMP #10" q5 J5 x% o! A; l
  443. BCC Music_Start_Song_Min9 R; D9 h) ~% |; }* K# F8 t9 u
  444. LDA Music_Cur
    6 G: S5 e+ z; g/ _5 N# |" a# V
  445. SEC
    6 B4 G$ e8 v( j* w4 [6 v
  446. SBC #10. m  c) F% }8 m8 k8 ^
  447. STA Music_Cur* a' a8 k( P5 A- G) M; H
  448. LDA #$00
      z& g4 z8 G1 _, t
  449. BEQ Music_Increase_10
    4 h/ ]: \! w& `2 b. F/ @4 p& \5 k
  450. Music_Start_Song_Min5 ?! |* M4 E3 F9 Y
  451. LDA #$00, m6 B4 [- b& ^" u
  452. STA Music_Cur
    / J* g9 r# w! O; \& S& M
  453. Music_Increase_10& u; v6 N4 b$ i8 ~3 v; B
  454. LDA Key_Once6 s+ ^, _9 s6 `, y- u& v" ~
  455. CMP #$08
    6 Y) B: \! H' v* N3 E4 }- B$ ^
  456. BNE Music_Number_End
    ) i3 D. ]; Q" _; a4 @2 P
  457. LDA Music_Cur" r1 u  H) E6 K- s- x
  458. CLC* s- p7 [1 {) p+ g# q0 f
  459. ADC #10+ |7 `0 n7 i6 |0 ]4 W
  460. CMP #Music_Song_Total-01
    0 u0 |$ y* d% c0 m( Z" T# u
  461. BCS Music_Start_Song_Max
    8 n+ `$ D% D( L' E1 I( Y
  462. STA Music_Cur4 b4 n  Y7 I: g, p
  463. LDA #00+ V7 n$ k  @) N8 d, f# r
  464. BEQ Music_Number_End
    6 B! V6 t" n' [. N* g2 O
  465. Music_Start_Song_Max
    2 U6 J2 n, J% T+ Y
  466. LDA #Music_Song_Total-010 Z9 a) ~: M; w5 X6 Z) _7 f* p% u
  467. STA Music_Cur
    8 S3 e/ f4 w! `" k7 v0 j1 C
  468. Music_Number_End
    : M/ G8 X8 r% T$ V* R; ^/ o8 y; r, j
  469. RTS  j- E7 @3 [6 K5 j

  470. - u! a2 H3 y* d/ K) a
  471. ;==============================* c2 B8 T' [% i8 b: d6 P
  472. ;音乐重设$ ^& R# r1 A. Y  o: h: |  g; I
  473. Music_ReSet
    6 b" [- h: w- k: n( w. [5 ]
  474. JSR RAM_Clear
    & }( b' M% [$ Y7 E
  475. JSR Sound_Clear
    ! I& f# `% T# |! H! }2 o7 R8 T
  476. LDA #$1F
    / t6 b; X$ c( E. q2 p$ G. @
  477. STA APU_STATUS
    2 x+ N: f" m- q& _5 p
  478. LDA Music_Cur
    ( W( Y0 u& Z2 V: ]
  479. JSR Sound_Init3 _0 @3 k# K2 _: a1 d( |: K/ M
  480. RTS
    6 X7 b9 `: C( Z" K! a& n9 O( u
  481. # u* d4 K- A" p/ M5 R' L
  482. ;==============================1 l' I4 L& c4 C* O3 y  J7 Q( |% e5 x, `
  483. ;音乐端口清除2 g9 l1 _2 X8 h! \) T  }
  484. Sound_Clear
    * y' R+ x; |" \
  485. LDA #$00
    ' V9 l, u# L3 ]" ?* _) G( L7 g3 C
  486. STA APU_STATUS2 d( d; i  v7 K6 ]
  487. LDX #$00% R- g# k$ u! d
  488. Sound_Clear_Start
    $ j# i- O, c% _5 b" I/ R( t# q
  489. STA $4000,X4 j9 k: w2 H( U2 ?
  490. INX
    8 W9 a6 E) O5 U& m4 F8 D3 m
  491. CPX #$14' }0 C, k/ H0 n
  492. BCC Sound_Clear_Start
    ; g* n- C, C# ~7 l
  493. RTS
    - ^/ O0 O( ~5 ?
  494. 4 ?, p$ |9 G" [/ z
  495. ;==============================
    : W7 M# h$ v* z9 W7 p; ?
  496. ;按键处理+ N3 j4 @, b# |' z; Z! a& O$ g
  497. Key_Proc
      h$ T  e% \! t/ T8 C/ n
  498. JSR Key_Scan( Q0 [7 c9 P  B0 H( o
  499. LDA Key_Keep
    . |; m# w( @) P  Q+ E; T; a
  500. STA Key_Temp6 p( u% m3 v, k+ ]% j) _
  501. JSR Key_Scan0 t5 o+ q0 K2 i! P: S
  502. LDA Key_Keep) c8 g! o0 q! V) V  {( }
  503. CMP Key_Temp& l) c1 S& t+ N/ N
  504. BEQ Key_Get_Once
    $ ^" m2 ~+ w* }1 l! D$ a: q
  505. LDA Key_Kemp
    % S. p9 j9 u# E1 U9 B. v
  506. STA Key_Keep
    8 Y( j3 ^5 y4 v/ p6 p
  507. Key_Get_Once- S5 s2 ?$ q( G9 i# y
  508. TAY0 l- w; w5 Y' `; E4 H4 |# d; |( G
  509. EOR Key_Kemp
    $ I- ?* w3 ?& p. l
  510. AND Key_Keep- o! ^! m5 b" I6 @/ ^
  511. STA Key_Once7 b& u1 m" t3 E  R1 y
  512. STY Key_Kemp0 B8 ?' b+ b( k# y5 X
  513. RTS
    3 I% _# d, Z2 w# n9 E- W/ t& w
  514. ;------------------------------) O" @9 e6 K+ ~9 s& B
  515. ;按键扫描
    3 f7 N4 q2 z2 Z( z: |# m9 c
  516. Key_Scan
    4 I) S$ [5 Y9 ~  v- S& R+ k
  517. LDX #$01
    . `4 n: b8 t: r8 K  |, v9 k
  518. STX JOY1_FRAME
    : E. s- _# T& L) ~& R
  519. DEX
    6 Y! B! o6 N$ M7 F4 k  Q& }5 n0 ]/ t' p
  520. STX JOY1_FRAME/ f, f% R' C  a0 ^, h1 x- Y
  521. LDX #$08
    8 U2 l6 G( S; l9 P* m
  522. Key_Value6 x# ]9 [8 F) C
  523. LDA JOY1_FRAME+ l3 i; P  b! ^- v- C4 [2 W  I/ C
  524. STA Key_Getv) I: X9 [5 G& \5 p1 ?
  525. LSR A
    + V2 y3 D+ ^5 F2 y; y  ]) {/ ~$ w) K/ p
  526. ORA Key_Getv$ i5 x5 ]$ z( g8 J
  527. LSR A  k) {/ G# ~- t% L9 Q4 h
  528. ROL Key_Keep
    . }$ L+ d! N/ o$ \+ y+ j1 U) ^. V
  529. DEX
    : H+ s/ d/ W$ P  E6 f0 D' n
  530. BNE Key_Value4 f$ o, G; L1 Y7 |6 C3 D$ U! ?
  531. RTS: w6 h6 U8 `( S: D* T3 \1 }( X- D
  532. 4 v1 q  {, s& A# O& N( y9 F
  533. ;==============================
    ) s4 |) p) V+ ^1 Q
  534. .IF SOUND_BAR_SHOW_ENABLE
    $ s: K9 Z& f! i3 [8 y1 f
  535. ;音乐条显示& U3 a/ n' z/ w6 [
  536. Music_Vision
    + M( W) h, b# z6 L8 C% w$ {
  537. JSR Music_Animation
    # B! A% y! o  S2 o8 d7 N
  538. JSR PPU_End0 i& m% O" ]' z, s  S# N
  539. RTS
    6 Q6 f9 b. {" Z* W" v# p& x4 H$ r- u5 P
  540. ;------------------------------
    8 |* W! }% X) N+ d
  541. ;音乐条显示处理
    $ W2 d  g1 _+ V; }
  542. Music_Animation0 V/ |1 F, P5 M" [- Q. q
  543. LDX PPU_Cur
    : q+ s4 b5 C4 I1 `6 l- X: X. E9 f2 u
  544. LDA #Mode_Line
    / j: K2 H9 q6 q9 \$ {
  545. STA PPU_Addr,X- m' q& \. \2 ^1 K% n4 k. V0 u: J
  546. INX9 R) n! `: l& v$ s
  547. LDA #HIGH(Sound_Bar_Pos)6 }7 g5 s- l2 F$ ^: P6 {9 V
  548. STA PPU_Addr,X+ F2 Y' Q* X5 |0 x$ v% c3 W' H
  549. INX
    : P; i3 O7 I- @3 O, \! o
  550. LDA #LOW(Sound_Bar_Pos)
    6 \, E* k, n1 \7 _9 }/ {
  551. STA PPU_Addr,X$ o2 n. x4 e+ f  R- g0 z0 _$ k# }4 [: o
  552. INX# @: A4 V  f& U6 z
  553. LDA Sound_Bar, P2 m6 S: q5 \  r
  554. JSR Volume_Convert
    ; e% q+ j7 [; x% j6 _0 A& f# W! Q) l
  555. JSR PPU_Return
    + A& C& R/ \/ f8 v0 V  M
  556. LDA Sound_Bar+$4
      c0 |# A+ r/ y# Z, A2 d' a4 q
  557. JSR Volume_Convert8 Y9 F- G, q# v/ H$ z( q
  558. JSR PPU_Return
    & k/ ^( A8 e$ l$ Q8 }
  559. LDA Sound_Bar+$89 q! C& R' ?& |: f% e4 B2 p
  560. JSR Volume_Convert_Ex$ [. a2 V" t+ |
  561. JSR PPU_Return  V& W. @3 v8 e
  562. LDA Sound_Bar+$C1 Q6 r$ ^& t: c' \% S. i4 Q4 N
  563. JSR Volume_Convert
    ) ?9 A5 Z% w" [! {) v, t
  564. JSR PPU_Return
    3 F8 l! L5 b2 v3 I! [: M
  565. LDY #$10# {. _: K$ V& {
  566. LDA APU_STATUS
    / Q* m7 u3 S5 A
  567. AND #$10
    + F6 v$ a0 ]& }  s+ C, A& N( ~
  568. BNE Volume_Count" X  D; w( F7 c
  569. LDY #$00) G0 W/ t; g. Q7 ^0 R
  570. BEQ Volume_Count9 b1 B$ l. o1 Q8 a4 P. q
  571. ;------------------------------
    % P4 @' D6 ~; y& [' |
  572. ;音乐条处理
    : A" s+ V) j2 X' b
  573. Volume_Convert_Ex
    # c3 Y, W4 ~4 `8 S
  574. AND #$1F2 h; K2 x# N- S5 O: _; Y. L  |
  575. TAY+ C4 L$ f3 M4 @8 `" N
  576. BNE Volume_Count' O+ i: V& f" A0 X) J1 X3 k4 t( _3 S
  577. Volume_Convert, q, r9 {: Q6 M6 k& }0 |, L
  578. AND #$0F
    + Z4 x7 `  s3 j. [* d5 j
  579. TAY
    . Y6 F1 ]% v& `- Y% g' J5 S
  580. Volume_Count
    4 q  j; g3 k' b/ r% ?7 C1 Y
  581. LDA #$08
    ( p2 z% Q3 ]4 a) H" Q6 o0 m
  582. STA Sound_Bar_Cnt
    4 m  |7 B; M" x+ o$ V
  583. Volume_FILL
    8 x4 N. I  z% v* v5 [7 _
  584. DEY
    # G- u+ R% ]9 D: _4 d' K4 q
  585. BEQ Volume_Half- L1 S3 t& l, Z1 v4 Z7 |( K) m
  586. BMI Volume_Empty
    , H9 r" L6 n# e
  587. DEY! g2 f- b2 S7 Y+ z+ k9 Z; `8 S1 y1 z7 J
  588. Volume_Full) Y4 ]; r. ~2 {, l. e: Z; X# K6 w
  589. LDA #$163 R% c9 Z& U. K* i" W+ n6 G) A
  590. BNE Volume_PPU
    , ~1 d/ [: E( U, i7 ]$ t& Y/ u
  591. Volume_Half
    " L7 A  u! m1 J( ~$ Z
  592. LDA #$15
    ; Z( o# x  s' {6 |0 N' N$ ^5 z
  593. BNE Volume_PPU
    4 L3 D8 v+ j- l% ~/ {: Q/ m
  594. Volume_Empty4 l" j* S! M/ w. ^7 E
  595. LDA #$14
    5 \- `' Y$ c8 \) M( E+ e' l
  596. Volume_PPU
    7 z3 X. b; T0 o" ?8 t( r% P
  597. STA PPU_Addr,X
      L4 Y) a  [* t# R% [+ _
  598. INX
    5 X5 Y8 P1 D6 D3 }9 V
  599. DEC Sound_Bar_Cnt; A8 l* U1 K& t# }# j
  600. BNE Volume_FILL3 @7 u* ]4 n6 B* d7 H8 [
  601. RTS
    1 `, I/ i3 N. ^/ a+ b+ W

  602. # q7 q5 p  I5 a; C4 c" X2 y/ z4 Y9 r
  603. .ENDIF! u* x5 }: ?' e, t2 Y3 x
  604. / h0 s/ _# |5 L5 W
  605. ;==============================! W$ z4 Z. M- F/ L$ V- f9 J
  606. PPU_Addr_Set;PPU行开始
      }+ v+ u9 u7 c1 [
  607. LDX PPU_Cur# H8 Z0 v7 ?3 W' M
  608. LDA #Mode_Line# y8 V; _* ?+ M9 N
  609. STA PPU_Addr,X
    7 ?1 @) W( H- d; P% _( t% Q! c
  610. INX; q$ v  f7 E( N) K
  611. RTS
    . |4 @4 g: [  k' @" a/ ~0 T0 C

  612. 3 h2 @: S2 u, `7 a' X8 w6 g
  613. PPU_Return;PPU转行8 e  d9 |# [8 W% L- [+ D' L+ z: _8 Q
  614. LDA #Flag_Over
    7 O! P9 c' _2 R4 h9 U8 U
  615. STA PPU_Addr,X# d, a  l/ c/ t
  616. INX$ d6 u, `7 c( o; \) |# K% ~7 M
  617. LDA #Mode_Return# f) z/ B# z! J) a( C
  618. STA PPU_Addr,X
    " R' x) D) I* V" j/ n
  619. INX9 r/ A! ]0 l: j8 R1 ~. z4 N
  620. RTS
    2 S5 `1 O; C+ c5 V' T

  621. . S1 A. R+ ^' f( g
  622. ;------------------------------
    ; w& f+ n- ~8 K* z3 _
  623. PPU_End;PPU结束. a, j; w# n) t
  624. LDA #Flag_Over; h! h9 K1 q$ C/ R# W) C3 B
  625. STA PPU_Addr,X
    ! J3 f7 s9 c- o7 S# j  `
  626. INX
    0 c3 `/ a- ^% P
  627. STX PPU_Cur
    3 g8 S6 E- I7 F6 Y. _+ Y4 e
  628. RTS
    5 \8 S) m. l- u# @
  629. ;==============================. N3 P; u* o; _) j4 S
  630. Mode_Line     = $FD    ;新起行模式
    1 P8 V# m* ~9 _: P* W4 Q
  631. Mode_Return   = $FE    ;转下行模式
    2 F4 W+ s& o$ N) g3 C( k
  632. Mode_Clear    = $FC    ;行清除
    8 P! a/ o+ H5 @# x' A
  633. Mode_CntLine  = $FB    ;行计数写入
    : }. H6 O' v( t
  634. Flag_Over     = $FF    ;行结束标志
    ! s& k8 y8 e! @& ?' d) c, t

  635. " A/ f( N5 Z+ j+ ?6 e6 P
  636. ;------------------------------# p0 @: z8 B$ C
  637. ;PPU处理
    $ ^2 b# r/ ~. {0 z& M
  638. PPU_Proc
    5 A! s$ U1 T, U- w3 `
  639. LDX PPU_Cur% U# _: y, Q4 v6 u0 W) Q4 x
  640. LDA #$00
    9 r% w; i' K$ i8 Z3 H
  641. STA PPU_Cur
    ( F9 \+ {0 _- D- I
  642. STA PPU_Addr,X! p8 G, f. B7 ^  ~
  643. LDA PPU_Addr
    " I- N1 _0 w% u2 C
  644. BNE PPU_Proc_Beg$ D* O/ o" \  s1 M7 p
  645. PPU_Proc_Ret
    4 {: N8 G6 k3 ]( Q, L. Z8 O& H" v
  646. RTS
    3 j( A8 Y' B/ c9 m& f
  647. ;------------------------------
    2 @$ y1 u/ o( I% h, e! a
  648. PPU_Proc_Beg  ;处理开始
    5 r$ J/ L; a( ]* v
  649. LDX #$00/ e9 p5 [/ ^' V& F" p# Z% n$ r
  650. STX PPU_MASK
    , w5 G8 @2 R6 K, ^5 ~& A$ _
  651. ;------------------------------
    ( G6 I, h. r; E
  652. PPU_Mode_Select  ;模式选择4 ^. z  @- _9 z, k
  653. LDA PPU_Addr,X
    * o1 V+ N8 ], `4 f* l. B+ V
  654. CMP #Mode_Line
    " [6 f( J) u) F) u" T$ g
  655. BEQ PPU_Mode_Newline
    6 U4 A) z9 l9 Z/ X4 X! m  ?; \
  656. CMP #Mode_Return5 n/ I) ]; x0 P1 W' }) k9 D
  657. BEQ PPU_Mode_Return8 g  J0 u9 ~4 V, p' b1 M2 V! Z
  658. CMP #Mode_Clear
    ) Y4 k' e( u, J8 x
  659. BEQ PPU_Proc_Clear
    . ?2 `! o% {0 J, l# G/ p0 H3 o
  660. CMP #Mode_CntLine9 \% v  n2 s6 E! ?2 ^% j) B) d
  661. BEQ PPU_Proc_Cnt_Line
    1 h5 }! V) Z; n6 U( ^. {% `+ f
  662. RTS) m1 a( e  m( k5 y1 ]9 s
  663. ;------------------------------& |4 @5 T7 \* j0 ~) `
  664. PPU_Mode_Return  ;转下行模式
    * P6 t1 K+ W* J9 Z
  665. LDA PPU_Addr_L
    ' v) y$ N$ B) r6 U/ |
  666. CLC( r2 |' T' m, J+ r) Y- V# r* B
  667. ADC #$20
    " A! O$ A9 D8 @' n! ~8 C
  668. STA PPU_Addr_L
    ' Y7 p& J1 q/ Y9 K
  669. BCC PPU_Return_End
    7 L5 C" i% x& S! E7 c( b) t, K
  670. INC PPU_Addr_H
    8 S) @+ V' c4 y2 @
  671. PPU_Return_End
    . T+ f( W# q! R. y: A
  672. JMP PPU_Set_Increaser. [" A9 I$ O/ S- W. r
  673. ;------------------------------1 ?( ?8 M4 p) e% q# b9 V$ f
  674. PPU_Mode_Newline  ;新起行模式3 B+ B/ Y' l" B( A  i
  675. INX+ Y9 L$ @$ X: u: s
  676. LDA PPU_Addr,X% u. y: k: i) t$ T2 P
  677. STA PPU_Addr_H. w% I* o; Y) `4 P1 t! S6 ]2 X& L
  678. INX
    . P4 |. G" ]! Z; i) R+ U
  679. LDA PPU_Addr,X$ K3 }+ j3 m; `/ {& u
  680. STA PPU_Addr_L, [( z5 j5 `& ^) V1 x  j
  681. ;------------------------------
    : Y/ ~. P/ G$ u. M  ]
  682. PPU_Set_Increaser   ;设置写入地址! Q, \" E6 H9 ^+ k" L
  683. LDA PPU_Addr_H
    - m( A  N4 B6 Y7 B! F
  684. STA PPU_ADDRESS
    ; w7 w5 R' _# D1 P5 M2 O- M" J/ i3 d
  685. LDA PPU_Addr_L. l! ]1 s6 ]# a+ M* q
  686. STA PPU_ADDRESS. p; u/ R0 H3 V
  687. ;------------------------------& J! Z. D) L9 v+ R2 S# l! ]5 Q% b' Z
  688. PPU_Write   ;写入数据# \! D+ C. [# A
  689. INX( p7 V+ L, R: ^
  690. LDA PPU_Addr,X
    - f; l2 H1 i3 A2 p9 ]6 _
  691. CMP #Flag_Over
      n& E- P! Y& @/ V- k/ n
  692. BEQ PPU_Proc_End+ f# n% n& E- l: U
  693. STA PPU_DATA7 a8 R2 l; z  ~0 t+ e: E& g8 I
  694. JMP PPU_Write* t( D0 n& F! f5 U- f: b6 M' b+ O2 ]7 Q0 r
  695. ;------------------------------
    6 j6 T$ k9 n, T
  696. PPU_Proc_End  ;单行写入结束
    ) ^& q4 R; u- u) c( i
  697. INX
    # _" C# C9 L# k, m9 u
  698. LDA PPU_Addr,X" s+ H9 C7 s: j0 `, X) b8 o8 L
  699. BNE PPU_Mode_Select' N' Z% A+ l5 B2 Q) j1 M$ J
  700. STA PPU_Addr/ u2 u1 l# I2 K( e
  701. JSR Update_Palette_Color
    5 ^$ q8 p( B4 p3 C1 c* [1 M1 n$ m
  702. LDA #$00
    7 n6 H5 }4 e% S2 ^$ F( {- `
  703. STA PPU_ADDRESS
    # O/ P# _" {7 i1 F' f0 {1 a) ~
  704. STA PPU_ADDRESS" k" a: N0 j8 e- }0 }
  705. STA Show_Track_Name
    ) |: x; d* k* K$ `; S
  706. LDA #Scroll_X
    7 _' B9 ?' Z& X4 |8 t' i
  707. STA PPU_SCROLL4 s8 E8 z, w9 b7 e5 y& H' O
  708. LDA #Scroll_Y
    + T. ?; i8 Q9 L$ v
  709. STA PPU_SCROLL; X* a% k; K3 d9 b" S
  710. LDA Screen_State
    . i% b, a/ w) [  l+ Z0 b$ U/ E
  711. STA PPU_MASK2 z) B$ f* h0 K; v
  712. RTS
    - M  t/ X% W' a) {9 v' X
  713. & O0 F& R* \& u7 _( w
  714. PPU_Proc_Clear
    7 }5 P& K$ D; R/ O( s  k
  715. INX
    1 U' P5 J( C* y, l" u
  716. LDA PPU_Addr,X% Z" T2 o4 m, T
  717. STA PPU_ADDRESS& m* T9 D7 E. E8 y4 Z) L
  718. INX
    6 M" W% a) q% \6 W
  719. LDA PPU_Addr,X
    , d4 J. m/ q# f( a! ^% R; H
  720. STA PPU_ADDRESS
    , l: l7 o1 C: U: K0 Z! }2 ?
  721. INX- I7 R+ T4 t' g
  722. LDY PPU_Addr,X
    # z) N2 n7 x  T: T+ f5 j% j6 G8 @  c
  723. LDA #$00
    ) q8 d& ^  y0 ^6 a- W5 e' Y* c8 Z' u
  724. PPU_Proc_Clear_Write
    ! I5 G8 E) H, v, ]- F6 F
  725. STA PPU_DATA
    ) }# f. o0 T6 ~6 K6 f2 o. U! }
  726. DEY
    / i7 }* @7 c$ X/ Z
  727. BNE PPU_Proc_Clear_Write
    ; V2 u2 m" n9 f
  728. JMP PPU_Proc_End
    & ^# D1 g6 i2 U6 G) t3 _5 d! C

  729. " s1 \- x2 h# J# r5 n" B
  730. PPU_Proc_Cnt_Line- H8 d+ S5 R/ P  Y' e
  731. INX
    $ L2 h( U: ^2 J( R
  732. LDA PPU_Addr,X; F! F' G; b: w- t
  733. STA PPU_ADDRESS- i: n3 _  [$ ?
  734. INX, t" F; D6 Y$ D
  735. LDA PPU_Addr,X
    . r; l+ Y: W  j
  736. STA PPU_ADDRESS
    " R: y9 o! \; v
  737. INX  d, K6 Y' m& e
  738. LDY PPU_Addr,X
    4 c$ W: c  W' L  _' ?4 H% n
  739. PPU_Proc_Cnt_Line_Write7 _+ U5 H! B6 \5 M& w3 V
  740. INX
    # E# [5 D, F. x- e$ ^" W
  741. LDA PPU_Addr,X
    4 j& Y, u' m9 ?$ M4 |
  742. STA PPU_DATA0 o/ [: ^9 x# h  X
  743. DEY- ^3 v; l3 I7 h6 j3 G
  744. BNE PPU_Proc_Cnt_Line_Write4 ^8 p; {+ P  |; @
  745. JMP PPU_Proc_End
    5 P3 E8 [+ K  C7 Y
  746. 8 ^: `8 }1 z7 l% k3 s9 I( G2 a
  747. ;==============================7 Y4 j6 l# c" o
  748. HEX_To_Dec;十六进制转十进制
    ) }+ G( X9 B  e" C
  749. STA HEX_Data5 z$ z  z/ e/ u9 j
  750. PHA
    5 a% d3 ^1 y$ [9 Q% r2 m! Y8 W
  751. TXA9 p) Z$ R" `( B
  752. PHA
    . V9 _* e" Y1 a+ d9 @
  753. LDX #$005 h0 c. r  L9 P" n# j
  754. LDA #$008 f/ @7 j4 J8 E& q$ n$ o
  755. HEX_Cln
    ' _( ^/ ~5 t& s" _
  756. STA DEC_H,X- K3 z( w0 O' U
  757. INX3 X7 p% ?# p. u7 B( z
  758. CPX #$03
    . d3 {, r0 |$ `" C
  759. BCC HEX_Cln
    & ^: v5 `* _& l8 f! k7 p2 \
  760. LDA HEX_Data$ B, L+ M/ u1 H/ t/ {8 |) r
  761. ;------------------------------
    2 j! T0 d1 l) P- n' t
  762. HEX_100
    - a, }" N( j0 k- ?: Y
  763. CMP #100
    - M# H9 H5 ]+ D7 u% P
  764. BCC HEX_10
    6 U; d% v# u4 {! A4 P! g
  765. SEC
    : o9 }: H+ |- I4 E3 S
  766. SBC #100; |  F8 Y  M& v" j! P9 [
  767. INC DEC_H
    ) q  F' D% W: q. d3 N" y, b( T
  768. BNE HEX_100
    " o* _. u% i/ Q( T
  769. ;------------------------------+ [7 l( I6 ]( G; ~% `
  770. HEX_10
    & g& W6 q( c  z( a
  771. CMP #10% Y1 D: _  T$ z9 w' M! x9 ?/ V
  772. BCC HEX_1$ _8 G/ ?. h: Y3 v
  773. SEC
    " N& N: v4 J: E% g+ c1 W
  774. SBC #10  T9 i6 ^# s( P# W
  775. INC DEC_T
    , |0 O" I' d- f; x4 l( e' I  h
  776. BNE HEX_10
    * `- `# F- L9 A8 b" x. g
  777. ;------------------------------$ N! A3 v0 j" W3 i
  778. HEX_1
    : m& e- e) s1 k2 A2 [
  779. STA DEC_L
    $ S# O1 l) l- _( m4 l
  780. PLA
    + h: M: t- v2 b( U3 R
  781. TAX) x. i5 e  a4 K1 v6 f/ u
  782. PLA5 x) b* B3 |- l# n
  783. RTS8 _  f2 t" ?8 w3 ]. Y

  784. 4 W; ?, Y+ a- D' D' ?7 A
  785. ;==============================4 I. g2 G" d, G/ X+ G
  786. ;音乐曲目显示
    5 r) P/ [: V, U. u& Y
  787. Music_Show0 c/ y* {0 s1 D* e8 l  w
  788. LDA Music_Cur1 B* X9 d5 D# d! t" m3 N, ^
  789. CLC% q% q$ _0 i; W
  790. ADC #$01, I- b2 u- o. D3 N. k
  791. JSR HEX_To_Dec
    # [, l! q$ l0 w$ d2 |7 o* y% `
  792. LDX PPU_Cur
    5 @% v  [2 X! x2 M8 B1 q
  793. LDA #$FD
      l) g  A1 a' ]- n0 q2 v
  794. STA PPU_Addr,X
    7 I/ I- d: B% x1 S& G) ?
  795. INX# o- w) `3 V" Q9 |* C0 P% Y4 s
  796. LDA #HIGH(Play_Index_Pos)
    4 B0 V' N2 w, z- U% [
  797. STA PPU_Addr,X  s+ M4 z8 t9 R% Q
  798. INX: q$ |; B' D3 \" q! A
  799. LDA #LOW(Play_Index_Pos); ?9 @2 [$ ~( b& g2 E
  800. STA PPU_Addr,X
    # t) V5 g0 S, n* I3 Z4 T6 v8 f9 x
  801. INX+ X0 b: T% [/ ?$ {1 l

  802. + ^" A1 {) G  S: Z, m
  803. .IF Music_Song_Total > 99
    6 i7 `" J7 z& a1 R: H) [4 y
  804. LDA DEC_H
      ?; F4 x5 O* Y7 c& ~) r
  805. ORA #$30
    1 l% Q5 d/ v* \, W: _% k" A
  806. STA PPU_Addr,X
    3 l  \8 v: [, d' U) v- }
  807. INX
    2 B& z* s/ p% M8 `
  808. .ENDIF
    % ~& o, U, S9 Z

  809. : u7 \/ q- l2 r
  810. .IF Music_Song_Total > 9
    * q0 [0 K( C/ B3 D, N: S) A
  811. LDA DEC_T. A1 ?; A; m% G; i- W! }
  812. ORA #$30
    ! A+ ], X9 i" A- d
  813. STA PPU_Addr,X
    " j1 [( O+ ?5 u+ M4 j
  814. INX2 p: o: z6 q  {
  815. .ENDIF- b/ v$ C5 J" V  o( O

  816. & C1 A) r3 N7 j. b" |6 I$ J
  817. LDA DEC_L2 r) y1 H; j. y, I
  818. ORA #$306 X6 q) X/ V) p# l4 S
  819. STA PPU_Addr,X
    " P, U0 q/ W8 |5 O3 @" P
  820. INX. e. r! N( z4 }1 j# {+ S
  821. ; i# Z. P" K. ~5 m2 q
  822. LDA #'/'# F# v1 S$ Q8 ?& J
  823. STA PPU_Addr,X
    0 E# Y  ^# ]; t  N7 W  A% |1 g5 q9 _
  824. INX) k6 \) R( f1 y3 L0 s0 b1 S
  825. Music_Show_Total* y7 N8 }3 F7 Q3 ~/ X
  826. LDA #Music_Song_Total
    4 j9 \0 L6 b" `- a
  827. JSR HEX_To_Dec+ i- Z, \2 V2 p+ U, P/ ]! [1 u
  828. , `8 n* T* A2 }/ O: f
  829. .IF Music_Song_Total > 99
    3 K8 y* X$ u3 S$ D+ ^9 Z% o1 ^
  830. LDA DEC_H5 D1 T) q9 A" D) M4 t; C
  831. ORA #$306 A% ~: _0 H& r; Q2 S5 k
  832. STA PPU_Addr,X
    & S+ F( I6 B0 }+ [
  833. INX
    & y; {0 T# v8 p0 W5 a  n
  834. .ENDIF
    % b! ]) v& R; G  E3 U: w0 S) e  j  p
  835. 4 [* W2 \6 o5 j& B6 c) J* G# N- u% s
  836. .IF Music_Song_Total > 9
    + e& _" ~. v: i0 s6 Q
  837. LDA DEC_T+ m# l5 n* O1 C3 J( Y  }* u) l- B
  838. ORA #$30
      e& ^; X8 r' p: A- j9 [* p
  839. STA PPU_Addr,X
    8 U- X+ P  C4 s
  840. INX3 I! ?7 n! f4 d, O+ D0 g
  841. .ENDIF/ \, e- T( g) j3 E" Y6 k
  842. 5 ~- H( ~2 |5 w, T! Q. }* K4 `
  843. LDA DEC_L
    6 N' O  F; R: Q: \8 o
  844. ORA #$30
    1 {4 Z2 p/ p% N
  845. STA PPU_Addr,X7 B4 [% t- @- d
  846. INX% |% f/ {3 ]& s: G* @, `* B$ M
  847. ) s6 o3 y  \( r. A5 g" Q! e5 V
  848. JSR PPU_End
    ( W* W( g" j. h9 r8 C3 V
  849. Music_Show_End, e* m% e* `6 F- b3 U$ g- g
  850. RTS) Q" |5 J: e1 ~* `

  851. - i( y# i! ~: X" F- Y; B
  852. ;==============================
    - p. A! }7 Y. A
  853. Time_Show;播放时间显示
    4 W& N+ Q3 x# c  i7 r7 V7 Z" J: h
  854. JSR PPU_Addr_Set
    * A2 N- E, ?1 ?6 q
  855. LDA #HIGH(Play_Time_Pos)+ t* x! N' f, {
  856. STA PPU_Addr,X
    " x' z3 h, U1 h+ E0 y2 m
  857. INX% l: Z. E7 Q) Z
  858. LDA #LOW(Play_Time_Pos)
    " Z$ K7 {5 G8 l) u4 C
  859. STA PPU_Addr,X
    6 w5 p1 l* C* L) i/ ]% w- V& `
  860. INX! g# `% ], ]+ l2 A9 r4 N8 u7 q; F
  861. Time_Show_H
    $ {# H4 N+ D; Y0 ^( s5 [- Y6 L
  862. LDA Time_H
    + i1 s' o& z' N( m; E
  863. JSR HEX_To_Dec2 d9 _% Z) q9 @- d# H) Q
  864. JSR Time_Digit9 I1 X4 M5 g$ k6 E: E  h
  865. LDA #':'4 E0 }4 R; L) {. i/ R( U" T# t
  866. STA PPU_Addr,X
    6 h: J5 Q5 d2 f
  867. INX
    $ r# E8 j! h& y" H1 J! C' s' s8 ~
  868. Time_Show_M9 g" ]6 M2 V/ B% \6 j) o; F+ w
  869. LDA Time_M
    7 ^- y" u! F: s7 U5 r& ^2 ?8 t
  870. JSR HEX_To_Dec
    - ?) h  i8 F! G" H5 [" a2 Q
  871. JSR Time_Digit
    ( f; u) G# I3 w3 K7 v$ L9 O
  872. LDA #':'
    " ~1 P' T9 @1 B4 M$ ]; F
  873. STA PPU_Addr,X0 Q1 d5 S  A9 ^! @
  874. INX) v3 N" Y9 L1 d+ O; O, k6 _1 ]
  875. Time_Show_S5 p4 r: x! h' m3 O+ c- ]
  876. LDA Time_S
    & M$ s! u4 y; `! J, i
  877. JSR HEX_To_Dec+ u; @# N* @* L2 e
  878. JSR Time_Digit
    # b- x4 _% ?# ?( k# c6 c/ R# ]
  879. JSR PPU_End
    7 {2 ^0 d! u9 X" J6 O) ^& w
  880. Time_Show_End+ ~; D6 {. o. }3 ^5 {: `* K) h% t
  881. RTS
    4 Q5 L% k. Y7 m$ u  w3 I
  882. ; s# ]  q6 P" c/ G3 t' b( e
  883. Time_Digit
    0 B2 j& A% d! D+ z
  884. LDA DEC_T
    ( o  K$ P5 Q+ y8 X
  885. ORA #$30
    ' I: J6 ^6 x' C
  886. STA PPU_Addr,X
    & \8 M, `9 p0 Q1 Z
  887. INX
    4 r- s, X8 |0 ~5 e+ X
  888. LDA DEC_L  I; c& U8 r/ A9 P/ Z+ U: z
  889. ORA #$30. ?& Z1 m' e; `: }" M9 R
  890. STA PPU_Addr,X
    3 j5 q7 n! T7 d& ~- U" K
  891. INX
    ( M/ D* o' a$ F; g
  892. RTS# j8 X- x  }/ ]0 ~$ P- v
  893. * r% Z9 j: U$ u( E3 H' ^+ ~3 N8 l
  894. ;==============================
    , g+ Y4 p: v8 [. M+ @/ K2 x
  895. Time_Count;计时
    * |' f# S& e& F" ~
  896. LDA Music_State' g" {5 _3 j/ U4 S& _6 w
  897. ORA Time_Wait_Cnt
    4 f1 d( m7 D+ ~# p. h
  898. BNE Time_Count_End8 ?1 W+ f2 H. e% P
  899. INC Time_Cnt8 U6 T9 k, j, k$ Z1 ]
  900. LDA Time_Cnt
    ( ^( ]" m1 O2 u* d% c! W% ~3 K
  901. CMP #60
    ; d& x9 I; a8 U" T2 m% h
  902. BCC Time_Count_End8 Q! Q+ G5 \# I$ d* C$ U
  903. LDA #00% B) f. B9 P3 Z+ }9 f
  904. STA Time_Cnt$ J  h" N, [' i, P; O* _
  905. INC Time_S. J) ^7 \0 T- O9 c5 S

  906. ' R/ ?- n# a. c
  907. Time_S_Cnt0 j8 f5 z' R. x, x/ z5 t6 M0 j
  908. LDA Time_S) O6 o# F  k+ r3 F
  909. CMP #60
    9 O1 P8 @/ a5 O( X7 d& D
  910. BCC Time_Count_End
    & O3 o. i" `8 I  |/ p- k
  911. LDA #00& e; @; o4 b9 f+ s# c/ q
  912. STA Time_S
    5 I8 C/ G8 ~' ]
  913. INC Time_M
    9 t0 X% Q, ]* ^

  914. , G+ }5 A8 v6 N4 f! S* `: Y6 X
  915. Time_M_Cnt
    4 Y: g$ M. H0 L2 i7 v/ R" P
  916. LDA Time_M& ~& H  ?9 m" s  i6 F) U
  917. CMP #60, Q5 t. C) [% k, @9 ]9 b0 F
  918. BCC Time_Count_End: a9 J% J$ M+ O3 s' ^
  919. LDA #00; r/ Y1 y( Q* {  m# g
  920. STA Time_M: W+ o0 g- E2 ~% E4 _
  921. INC Time_H
      E9 X1 |- H/ s' C

  922. 9 j9 v, T2 z3 o7 t6 i( T
  923. Time_H_Cnt
    4 o+ D, L1 m. j/ x8 u
  924. LDA Time_H
    4 ?( x0 S4 Q. u9 W$ N2 ~$ K
  925. CMP #24
    5 ]- ?  E  R3 R. W
  926. BCC Time_Count_End$ P! D9 Z! A2 k% p$ ]* i0 S' G/ m
  927. LDA #00* I) G# T. g$ M. r% `  d
  928. STA Time_H5 J8 [; l& ~/ z) q  i  ~

  929. 8 A* H9 x# Y/ a* ?2 |# i
  930. Time_Count_End* x0 E4 \: `  U  J) K/ d" Y- w' Z
  931. RTS0 |, P) B5 U2 \8 G$ `7 g

  932. & z9 L* @% x. K% o8 L
  933. ;==============================/ O0 w+ |! t- P1 \& P1 v7 y2 ?
  934. Time_ReSet;播放时间重置6 b/ r& e# n) [
  935. LDA #$006 d. s# v8 Y! e: Y
  936. STA Time_S
    7 V$ n, |2 V% ?- X; w
  937. STA Time_M
    0 b! ^- n+ B; [% k3 {5 ]0 M
  938. STA Time_H
    5 e* X$ G# Z/ q, F, B( N
  939. STA Time_Cnt
    8 s# g& L5 {& m- J9 b9 `! Z/ L
  940. RTS4 T, L7 u; E  H3 N8 q" ]* A
  941.   B; @1 k6 g+ k) Z
  942. ;==============================
    ( K. d+ I% W: z
  943. Music_Bar_ReSet;音乐条重置
    " k4 ?5 V/ m5 @4 V9 B/ [. j6 ]
  944. LDA #$00
      p( _7 }, ]) M
  945. LDX #$00
    $ W$ \+ b/ y& v( m6 C1 v' M
  946. Music_Bar_ReSet_Set8 m, W, P: k+ D3 w) O3 N
  947. STA Sound_Bar,X
    + R" e2 d* Q' M1 P- r
  948. INX8 b$ a7 S, R/ P3 r6 b
  949. CPX #$10, b8 p2 I6 X4 V; i0 R
  950. BCC Music_Bar_ReSet_Set
    " W( A% L: f  U) M. {3 m9 E
  951. RTS7 Z# e/ r; l* r, v% V7 O4 O

  952. ( I0 P$ L3 A: w* \- ~4 v7 m5 \
  953. ;==============================
    % s0 z; F1 _4 h( u: l: l, |" h
  954. PPU_Data;PPU数据写入
    5 i% k5 K8 k9 E8 {+ D4 f
  955. STY Data_L
    ! f* B, b& B$ W. W% K
  956. STX Data_H- w; z4 l& i% u
  957. LDY #$FF
    & t$ f* j5 [8 Z) I& {+ l" o
  958. LDX PPU_Cur  {* ~1 z. ^3 U4 z9 v
  959. DEX
    0 V" z$ W- X5 ^. r$ L) o
  960. PPU_Data_Beg
    8 ^2 O  a' v: u5 a
  961. INX
    3 O* u8 P) [+ [) `
  962. INY! m7 O! D+ e1 R# E
  963. LDA [Data_L],Y5 y( m' `% c7 o9 n1 |, }+ U
  964. STA PPU_Addr,X8 p6 y( q9 d) |- ~3 m0 ~/ y; L
  965. BNE PPU_Data_Beg
    5 x) k, ^* @9 d* i1 T- w/ R, ]5 r
  966. STX PPU_Cur
    7 d" t. ~9 i/ |, D2 }
  967. PPU_Data_End
    ' @. H" W: Q! h. M1 r
  968. RTS
    $ n1 v, [6 B) ~3 P' i

  969. 3 q' J! p5 c& B) u6 O( M/ F
  970. ;==============================
    ) v0 w  w6 f, W  x
  971. Music_Stata_Show;播放状态显示
    : o! B( H5 n3 `' R& P, P
  972. LDA Music_State
    . q' `: m2 p& ?) y
  973. BEQ Music_Stata_Show_Play
    % }& E* w& e, p. e
  974. Music_Stata_Show_Stop0 Q. R9 s, P% p: M; d
  975. LDY #LOW(Music_State_Stop)
    ( d( [! d* I2 X4 Q. i; ^* W  w9 w! w+ b
  976. LDX #HIGH(Music_State_Stop)
    ( b% w# y) N  Q$ E3 K
  977. JSR PPU_Data
    7 s# ~; B" U( G, \( h2 s9 @
  978. RTS, L: {5 w/ E) `* t2 [
  979. Music_Stata_Show_Play0 V$ L4 K$ @* G+ ]; L% t
  980. LDY #LOW(Music_State_Play)
    # r1 E; t) Q, Z; [1 L
  981. LDX #HIGH(Music_State_Play)1 s7 e. U% j+ t" T  N, v0 v- U
  982. JSR PPU_Data5 P$ r1 b8 U  _7 S# u
  983. RTS9 ]" I- v7 F% `! L8 t( [
  984. * r8 `$ p* W6 p1 m. m5 n
  985. .IF SOUND_BAR_SHOW_ENABLE3 K2 C" ?$ W% K  Q) R+ n9 S
  986. ;==============================
    8 R8 `: c: Y2 _" ?9 ^: ?
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    2 A, q7 N: u8 z; [) D
  988. LDY #LOW(Sound_Bar_Text_Data)
    # h6 ~- ~. h& Y$ K: S) W2 U3 p+ n
  989. LDX #HIGH(Sound_Bar_Text_Data)# N/ d$ }9 K0 ?8 y
  990. JSR PPU_Data
    4 Z$ ?9 L* ?4 {% }6 `
  991. RTS
    4 q" W- W" j8 s6 i2 S$ ~

  992. $ w" y- G( m" D1 i/ u: `4 q
  993. .ENDIF
    4 f: o/ d- `' |  T# \

  994. ) j/ _+ B  ^& e) b# g7 a
  995. ;==============================% }6 c) X; q" s6 K1 H$ a
  996. Set_NameTable_Attributes;设置命名表属性& D( J. b$ g' W& @7 h9 f  h
  997. LDA PPU_STATUS- _5 l) k% y: X# `$ |6 x
  998. LDA #$235 r9 D) D0 F0 y4 w3 L0 b8 ]
  999. STA PPU_ADDRESS  I1 a" [; C9 e+ w0 s/ @- w
  1000. LDA #$C00 v* M: \9 }2 H. p- C  ^5 t# G
  1001. STA PPU_ADDRESS3 }( Y+ T' \% X6 [9 Z
  1002. LDX #$00
    ) ]9 Z' H2 X% v) i: ~: q1 `- s
  1003. Set_NameTable_Attributes_Write
    , {/ U0 K9 a5 s( X+ D6 d0 l
  1004. LDA Palette_Attributes,X
    4 C  M& P& X, l! k. u" i% x# e
  1005. STA PPU_DATA
      q% a# a6 O2 ^. B' u7 ?
  1006. INX
    3 }5 C7 E  X  R1 P5 ~! p
  1007. CPX #$40' t' y  [  r0 {) I0 ^
  1008. BCC Set_NameTable_Attributes_Write# p0 I/ @, Q0 d3 B
  1009. RTS
    ( R/ _4 i# a, ^9 A  q& |
  1010. % W) q) M' A! D2 L) M7 x
  1011. ;==============================+ o% O6 R9 G) h! ]$ O
  1012. Set_Palette_Color;设置调色板数据
    3 w" S7 c5 z7 ~0 j' L& R  `+ ]
  1013. LDA PPU_STATUS$ }9 K( T3 W* X0 l9 t+ A
  1014. LDA #$3F7 ~) a8 v: i  |
  1015. STA PPU_ADDRESS
    : z7 s* t9 t& a7 V# e
  1016. LDA #$006 e( E$ c( l$ v" @, E
  1017. STA PPU_ADDRESS; _$ q5 i; J* l1 G! p( l7 W
  1018. LDX #$00
    $ s& j0 r: D* `" k, U
  1019. Set_Palette_Color_Write
    2 s* X; N- k, k9 |/ H5 A2 L
  1020. LDA Palette_Data,X7 `1 Y6 ?- q2 r/ _3 Z& K3 O0 O+ [
  1021. STA PPU_DATA3 K, _4 Z2 p7 h  ]2 v3 b2 [
  1022. INX! @8 [% }$ d$ ]" ]) c3 B7 y" K
  1023. CPX #$20, o+ P* j# Q1 r% q
  1024. BCC Set_Palette_Color_Write
    2 V* ^* D( J6 J% R* U" Z0 R& G6 Y
  1025. RTS
    * `; x; G  ^; }. Q( r

  1026.   H% C; M; Q/ q/ i9 r, L
  1027. ;==============================
      f& B  y: P  W4 ?4 u/ u/ s% z
  1028. Init_Palette_Addr;初始化调色板数据
    % a1 ?; W" J: X" x6 v4 {, }
  1029. LDX #$00
    $ z* [& F# k" _; a
  1030. Init_Palette_Addr_Write
    6 {% c/ J; P# @7 ]9 L
  1031. LDA Palette_Data,X
    8 H4 f6 A+ D5 F/ m! k/ ?1 A
  1032. STA Palette_Addr,X
    8 z  @2 n, L6 H' j/ j
  1033. INX
    ! V8 H1 j# g- W, x; f! n/ I5 X4 C& i
  1034. CPX #$20. N2 f) }) y! y- u- z0 F# m9 n
  1035. BCC Init_Palette_Addr_Write2 E* B% |- L4 x) P" F
  1036. RTS
    ( a- e" V& W& r' J1 P) c' T6 S, @; k7 [# K
  1037. / z+ V. g* ]# {: p8 z# w# y
  1038. ;==============================7 {' f& i0 |2 {# x
  1039. Update_Palette_Color;更新调色板颜色- q7 s0 u. p$ [  q3 V
  1040. LDA Show_Track_Name
    ( v! S! S" t# o$ v$ Q# d) R3 s
  1041. BNE Update_Palette_Color_End
    % }1 o7 @( a8 z7 {9 i
  1042. LDA Palette_Update_Flag' K( Y2 N# v; B" G. [
  1043. BEQ Update_Palette_Color_End
    : C7 b  g( U3 z
  1044. LDA #$3F7 c5 q; y! T+ z; I* `3 R) t
  1045. STA PPU_ADDRESS; A' d/ ^& w- e% i( h
  1046. LDA #$00! L& x6 Y3 `! ]! U; P8 U  [& I" k
  1047. STA PPU_ADDRESS
    2 B+ A* k8 l& K5 l% [4 C/ n. S
  1048. LDX #$00) l6 ?" W$ V) A9 c0 g2 d
  1049. Update_Palette_Color_Write
    , N+ @* G, E# V/ Z* s
  1050. LDA Palette_Addr,X) f$ R! u% X, @8 D  x6 J& @
  1051. STA PPU_DATA
    5 `/ _6 p& O# F! E
  1052. INX" {2 v' O, t& C4 y  Z2 {" s* p
  1053. CPX #$20
    9 L  H. z4 M. x' R
  1054. BCC Update_Palette_Color_Write
    7 X3 r0 q! O3 x  Y6 Y  ~$ S
  1055. LDA #$00
    % {. Q  y6 X1 `0 T! h" S
  1056. STA Palette_Update_Flag4 J6 W, j3 U  c2 m+ J) P2 ]
  1057. Update_Palette_Color_End+ [& l5 G5 v# C/ ?0 X3 h( F: j" L
  1058. RTS' B: i/ E! n+ ?
  1059. 5 A: s0 k0 F* j7 H$ Z
  1060. ;==============================4 P+ v& M" h/ Q5 p4 F. X* f, h
  1061. Update_Palette_Data;更新调色板数据3 x0 T0 a9 |6 i; Q2 g
  1062. LDA Show_Track_Name
    1 @# e/ N3 C/ u, V* L
  1063. BNE Update_Palette_Data_End$ u3 m0 M! a) C) h7 P: `
  1064. LDA Music_State: @# |2 Z  {4 k6 X; N( l" h
  1065. BNE Update_Palette_Data_End
    / z/ @/ ~8 t; \1 O7 ~$ o
  1066. Update_Palette_Data_Check
    / ^7 X4 z7 z. {/ R6 [3 Y; W" Z
  1067. LDA Palette_Wait_Cnt
    $ b+ ?# y) d1 \* [8 |
  1068. BPL Update_Palette_Data_Check_Over8 x7 r) a  T. ?; o) |
  1069. LDA #Palette_Update_Interval
    8 y  C+ p/ J- m6 `& ?
  1070. STA Palette_Wait_Cnt
    ) V% v( D. p- E* V- q* z8 T  Y$ ^5 o
  1071. Update_Palette_Data_Check_Over
    : {, e+ `0 r) h; _! ?# _2 I
  1072. DEC Palette_Wait_Cnt  `0 t  p- ~& k1 t
  1073. BNE Update_Palette_Data_End
    ) u+ ?* z8 h8 s3 f& b1 q
  1074. INC Palette_Update_Flag
    2 F( \( }; c7 S! m# b; F
  1075. LDA #Palette_Update_Interval
    ( W' d, M& N+ l- T
  1076. STA Palette_Wait_Cnt
    8 p# O; N3 d6 T# X0 _
  1077. LDA Palette_Update_Addr
    & j$ V' t5 K7 G  O, I# V
  1078. CMP #Palette_Update_Max! z4 F0 V- ?7 w1 E5 |6 r
  1079. BNE Update_Palette_Data_Set
    + w7 E0 k4 n' Y
  1080. LDA #Palette_Update_Min - 1$ a6 l" `; {0 x/ |0 ~- }# Q
  1081. STA Palette_Update_Addr& m: M6 w- a) Z4 t& }# ~
  1082. Update_Palette_Data_Set
    8 h3 E) X/ V" ~6 R1 `6 P) }/ e
  1083. INC Palette_Update_Addr3 r0 A7 \! t6 r$ J* H
  1084. Update_Palette_Data_End. {  u* R/ \. O
  1085. RTS1 D  \+ j! |0 l& N
  1086. 5 _+ ]3 B% H2 I1 {1 R8 Y, O
  1087. ;==============================; V0 J& X9 Y+ X  d
  1088. Show_Music_Text;显示静态文本
    0 ], w# y. B, V9 n4 B) o/ v, E0 e: G+ P4 e
  1089. LDX #$00& t( t4 b( T( r' j+ G: t$ I
  1090. Show_Music_Text_Set: o* r& i( b: q( a4 p
  1091. LDA Static_Text_Data,X
    / j- M9 H; V% g/ b( b
  1092. STA Data_L+ k1 O* y$ ?3 j- E; ^" H; b! Z" T2 C, _
  1093. INX
    ! B* t, ?  a, {8 q
  1094. LDA Static_Text_Data,X
    . _+ f' i: s& H  f
  1095. STA Data_H
    " z; j1 @7 J9 j
  1096. INX
    2 a, [% X7 q) }$ F7 z' ?9 Y
  1097. LDY #$00( n( ?2 p) f/ I" P8 `' c1 R: l
  1098. LDA [Data_L],Y2 x9 A2 c2 x- K; x9 I- E+ z' e
  1099. STA Data_Cnt7 d; V5 Q4 V$ S3 I3 J8 O
  1100. DEX
    4 t& o( y5 ^9 N" P' N- }+ }6 t
  1101. DEX
    " l  e. H9 }* Y) ?( W  f
  1102. LDA Static_Text_Pos,X& t' T  ?) K6 P1 u6 H+ `* J
  1103. STA PPU_ADDRESS, I8 y4 o* Z$ e6 Z& j- a
  1104. INX
    8 ^+ T8 Y4 e1 b0 @/ z
  1105. LDA #$20
    0 p+ L* S3 n! m; Z2 s
  1106. SEC
    5 o* _9 f; X' K! x8 Z8 J1 }
  1107. SBC Data_Cnt
    ( Z6 _' X6 [8 \( b  Y
  1108. LSR A9 F, N1 b* i% u. ?
  1109. STA Data_Buf8 {5 R! \* u' u, [
  1110. LDA Static_Text_Pos,X
    ! v1 R# Z! y0 H
  1111. AND #$E0
    / n9 F7 _1 ^1 a" N
  1112. CLC: g; Y7 ~( K+ n0 J
  1113. ADC Data_Buf
    1 G+ m  M% r+ u$ i# r& B3 [* ]9 s
  1114. STA PPU_ADDRESS% t: J" E- J/ ]. b
  1115. INX! a+ k( v& k  z
  1116. Show_Music_Text_Set_Write
    . Q$ N6 |% v, N+ l
  1117. INY
    ( u# i- h9 x* U4 N
  1118. LDA [Data_L],Y- F1 l! v/ P6 ?9 f1 ^( W/ V
  1119. STA PPU_DATA
    3 A3 @, n# O' x: z; y
  1120. DEC Data_Cnt# u' D8 F$ ]+ p, D- e) b
  1121. BNE Show_Music_Text_Set_Write
    ' g( ]2 ?1 P- \+ R7 q
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos7 t  R8 K! i; ?: I* ]7 |4 t- g8 Y+ J! `
  1123. BCC Show_Music_Text_Set
    ! K. @6 @+ z$ ^
  1124. RTS
    6 o' D  o1 }" f2 d

  1125. 2 l) k0 ^, A4 o1 a6 r! J
  1126. ;==============================
    8 W/ L0 e( d1 u0 R4 Y/ y, H
  1127. .IF Track_Name_Pos;显示曲目信息
    ; j* {2 G2 t0 U0 L$ \2 ]
  1128. Show_Track_Info
    + S. g$ J% Z8 v# _: ?
  1129. INC Show_Track_Name4 u" Z- B' Q  w2 x: e1 J- S6 }& _
  1130. Show_Track_Info_Clear$ e$ j& E/ x! U& `. j9 U" m2 r
  1131. LDX PPU_Cur
    ' E( Z/ ]; a9 I! w# q; J4 l; [
  1132. LDA #Mode_Clear
    9 m$ a- ]. @6 C$ ~: D
  1133. STA PPU_Addr,X
    / H! E7 o4 W) ]6 x3 B& A
  1134. INX3 o$ t- W, Q7 i
  1135. / y& \3 n$ t5 Z2 v. I, y
  1136. LDA Music_Last% C% L% ?5 {7 W: W+ z3 G0 @
  1137. JSR Show_Get_Track_Name_Center_Pos7 t) V* X8 ^& t
  1138. Show_Track_Info_Write_Cur8 k$ {& K$ `! h' N# x# [
  1139. LDA #Mode_CntLine2 k% U, b  z$ ?! b$ ?
  1140. STA PPU_Addr,X
    5 u" O5 K" N/ f+ {% P1 a- |
  1141. INX
    5 t, i/ @& Q/ I# P( a

  1142. . Q0 X. \- [" m3 `& ~  L6 N2 p8 t
  1143. LDA Music_Cur
    5 Z2 F5 N+ p  `6 f2 F
  1144. JSR Show_Get_Track_Name_Center_Pos
    3 t/ O8 P4 T2 v( H$ _* M4 V
  1145. 2 e2 k1 z; V9 j
  1146. Show_Track_Info_Write_Cur_Data
    1 R- I. n7 q$ ?/ u
  1147. INY
      q* `+ b% C9 Y& \2 @" E7 C) R9 |
  1148. LDA [Data_L],Y( V) E* h7 I6 L' g, s1 U7 V
  1149. STA PPU_Addr,X
    " j0 [$ g& b" r# j- i) z
  1150. INX
    . ^: z% j' z0 R" f  h' U# \/ D* ^
  1151. DEC Data_Cnt
    # Y3 [& }; L! W) m6 _- A
  1152. BNE Show_Track_Info_Write_Cur_Data5 H1 V( n- K+ e: \! E
  1153. Show_Track_Info_End6 B; Y( J5 C- t  {4 j
  1154. STX PPU_Cur  Q% }$ t6 h, K
  1155. RTS
    . Y- a  u+ Y% N( v5 c/ p

  1156. + z! G# O9 m0 F+ k# X* P8 v$ |/ e
  1157. ;==============================% F5 w6 Z/ e7 a
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置# t: x8 k7 \5 I
  1159. ASL A6 ~: t- c2 i3 H2 j3 O, p+ g
  1160. TAY
    0 k% `. W3 f# ^7 _. R( M4 x3 x
  1161. LDA Track_Name_Addr,Y6 j9 P* h) m% Z, T* a
  1162. STA Data_L0 G& I3 s  N5 C
  1163. INY6 o& `9 z+ @2 f: L3 l
  1164. LDA Track_Name_Addr,Y0 D- l- ^; l3 d+ |
  1165. STA Data_H
    & y* d! Q: {) n& P6 W$ _& V* x
  1166. LDY #$00' R. a$ c& i8 F4 L$ _. h% S& V
  1167. LDA [Data_L],Y
    - ^% S2 ]! S# e
  1168. STA Data_Cnt; Z& p$ L+ W  T& r: H/ t+ ]
  1169. LDA #$20
    & N- @4 L2 n( _( z9 l! L2 z
  1170. SEC
    ( G0 y0 _1 s( p# o/ K: x9 I2 n
  1171. SBC Data_Cnt
    ) ?5 ~* U* j1 w2 a
  1172. LSR A+ ?$ H5 V$ e% j( A. z
  1173. STA Data_Buf
    7 V/ M) N' [, G- F
  1174. LDA #HIGH(Track_Name_Pos)
    9 [% Y$ g2 U- _* x  X  g
  1175. STA PPU_Addr,X
    . R  Z$ a) y4 q: K' p' t6 ?
  1176. INX( c$ f* s8 p& n* p% L5 d
  1177. LDA #LOW(Track_Name_Pos)
    ) Z4 _4 v. E% q3 ]9 Y' U
  1178. AND #$E0; Y: Q* W- s& y2 G# ^
  1179. CLC
    + R. S  n6 ^, S$ p2 y
  1180. ADC Data_Buf2 H- n3 y( B) E* o# g6 g- p
  1181. STA PPU_Addr,X& e+ ]9 Z4 q' [) _5 ^& s7 N8 g/ v
  1182. INX
    ' f6 R; y" {5 y- Z# _5 ^) g
  1183. LDA Data_Cnt
    ( x2 b9 G* S. y. H: |
  1184. STA PPU_Addr,X
    ! A. f$ ]% e$ S, |
  1185. INX* c1 E- l; ]1 @( v6 c+ c
  1186. Show_Get_Pos_Center_End0 j' d9 T7 a7 @
  1187. RTS# |9 y9 U0 p, S. [7 T( K! a% O! f# m7 P
  1188. .ENDIF# s( u( R4 a& N: p/ X

  1189.   X0 r: q6 w4 m: F6 g
  1190. ;------------------------------
    / m: X  Q9 H+ i- R
  1191. ;命名表数据
    8 P- T: J' y6 R0 ]8 c
  1192. Palette_Attributes* F( ~! h( S: r  E
  1193. .IF SOUND_BAR_SHOW_ENABLE9 G0 `6 n( F* @$ c7 ]) ?/ s3 u
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    0 f! ^' c  }7 I
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA' g' ~8 x) A  ?
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55% A0 p1 K% c! {! y9 Z$ {
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$555 {! \; s2 E0 `- y% _2 `, h  t+ F4 ?
  1198. .ELSE
    ; y% _' J9 ?9 c: N+ i- Y, l
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00+ L3 G& r, d% R8 t3 m
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    9 ~3 |0 I# I) g5 d9 ]! `$ Y. w6 ]0 K
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55- j) E) [: c2 W
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " q! Y, J6 ~5 A2 a6 z+ F: Z9 t
  1203. .ENDIF; M5 t% l  g$ I5 l/ j
  1204. . d, O8 C, F+ y% C2 D
  1205. ;------------------------------/ e/ R; w( w% M% i% H# |$ j
  1206. ;调色板数据" C9 N& A6 t# K! v
  1207. Palette_Data, w! U0 F; ^: ~
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    , H( w; A( Z* @; }* o
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    * R- b, h% S7 m) Z" F. a

  1210. . @6 i# _! M5 ]+ q8 x4 t
  1211. ;------------------------------
    & ]5 s3 {! A2 `! X2 ^
  1212. Static_Text_Data2 k8 o0 @* w, @8 l
  1213. .WORD Static_Text_Title_Data
    $ F6 N3 Z- \8 m0 P
  1214. .WORD Static_Text_Author_Data
    - t" I. a$ c- \9 y5 Q! W7 U
  1215. .WORD Static_Text_Date_Data
    7 k" t# W" X* y
  1216. Static_Text_Data_End, m# b" Y! S( |/ r
  1217.   C& o5 N9 ]4 A# w5 d# n
  1218. ;------------------------------% M9 f9 S% k* Q& x% u
  1219. Static_Text_Pos+ ?' g% f. |2 o( T2 J* p- [
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    7 }3 ^/ R& ]6 ?/ k3 y7 G' g
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)% t6 y, u- }$ d! N# c
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)4 n) g" n2 E9 Q5 a9 ]# h) _7 P
  1223. Static_Text_Pos_End% v% a" k$ M$ n% N! y) w
  1224. & b% A% W# {3 Z( G# e7 b: @
  1225. ;------------------------------
    - F9 S4 u0 E5 |, H& `' X3 S
  1226. Music_State_Stop
    6 ^& \/ S! c. g
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ! E7 n" {6 \& W8 m) F) K
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    2 h3 c1 r6 f4 W$ k2 W( z
  1229. ELSE5 H: v0 y/ |4 V7 H2 g
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$008 g/ |9 f" n& |8 G" C9 D
  1231. .ENDIF
    7 L4 K3 d( m1 b: u% ^) f
  1232. Music_State_Play% d! I8 L' o2 ~' _# T- A) q' S
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00% |# M8 X, A( i

  1234. ; ^/ @4 H8 r2 w$ Y
  1235. ;------------------------------) f9 G3 j" G9 ]- U
  1236. Sound_Bar_Text_Data;声音类型文本
    % C1 s: o- n& C2 Z; j6 O4 {
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    . E& H# e% k# i" W) [- n( {6 n
  1238. .DB "SQ1-",$FF; B. }9 @6 ?2 K' ^5 N1 P1 R
  1239. .DB $FE,"SQ2-",$FF$ p+ ^# V5 Z' a
  1240. .DB $FE,"TRI-",$FF
    1 d. h8 ]; B/ h2 Z7 y
  1241. .DB $FE,"NOI-",$FF& F4 a& p+ f6 R" r0 _2 y. O" O
  1242. .DB $FE,"DMC-",$FF,$00
    # y7 y2 P$ j2 Q/ n# f* ]& A2 G" w

  1243. 4 y, z$ B  b. V4 ^8 T
  1244. .IF Track_Name_Pos3 b8 x8 g& H" A" T% d* Q$ p
  1245. ;------------------------------
    : l: Z9 J( p9 x* p% l
  1246. Track_Name_Addr;曲目名地址索引
    % b3 L4 X" M5 `6 y8 c3 p) _$ n
  1247. .WORD Trackr_016 N. p4 k; \' _% k0 B9 p9 b8 D
  1248. .WORD Trackr_02' g6 G0 a) D, N
  1249. .WORD Trackr_03
    & e1 W, Y/ V( D" e, c  D! _5 d- Z
  1250. .WORD Trackr_04
    1 m3 u/ A4 y, i( _
  1251. .WORD Trackr_053 }2 b* _/ b3 K  M1 R
  1252. .WORD Trackr_06
    1 p7 |) H' g# K8 ]8 A/ G
  1253. .WORD Trackr_07
    / v/ D4 E* E& X) l1 G
  1254. .WORD Trackr_08
      F9 ~# j2 T8 d" C3 u! Y
  1255. .WORD Trackr_09: K9 W0 D0 S+ n5 I$ u
  1256. .WORD Trackr_10# C6 Z- \9 d2 q1 r7 z8 k
  1257. .WORD Trackr_11/ Q. O# O* D" o% m
  1258. .WORD Trackr_126 i- @8 P) T: y; d1 d
  1259. .WORD Trackr_13
    9 t0 M5 r, C% w5 Y, H/ D5 [8 g! ^0 ^
  1260. .WORD Trackr_14
    : z4 k  l, N8 X% y
  1261. .WORD Trackr_15
    / X- a, m% u* c4 t1 D: A: B) A) o
  1262. .WORD Trackr_16
    ; J) ~5 k; Q" \) F; t: G/ A
  1263. .WORD Trackr_17
    9 r5 C8 O& a+ \
  1264. .WORD Trackr_18
    ! {6 u% k# B% F$ b5 Q: x
  1265. .WORD Trackr_194 `" k' a$ |* Z
  1266. .WORD Trackr_20
    , w& t5 O  \# `( O, U
  1267. .WORD Trackr_21' q  U  c( Z8 Q1 e9 ~; W2 c1 }8 G
  1268. .WORD Trackr_22& I7 ]6 p1 |4 S4 D, E. z
  1269. .WORD Trackr_23% A! U: ~$ v& a0 s8 B) ?7 H" j/ {) F
  1270. .WORD Trackr_24' W4 Z3 s. A  _9 I
  1271. .WORD Trackr_25
    , J5 P. k, f, t' C- R. l- W% x8 }
  1272. .WORD Trackr_26' B/ y/ Q  a9 |+ G" P
  1273. .WORD Trackr_27
    8 _9 h1 H" Y6 R3 h1 C
  1274. .WORD Trackr_287 T$ x) z1 m0 C$ D  J& s4 {) x& O$ l
  1275. .WORD Trackr_298 Q( T& p+ ]( F
  1276. .WORD Trackr_30, L7 t  s& O% [( M: k
  1277. .WORD Trackr_317 h+ @* X4 A- K2 V$ p
  1278. .WORD Trackr_324 ^) c- I! N& T' Y' Y
  1279. .WORD Trackr_33, ?9 l( y/ ^! e0 w
  1280. .WORD Trackr_34
    # }9 \2 C5 Z. S# D9 o4 V
  1281. .WORD Trackr_35
    $ C: p% F6 O. e& j4 ?/ V
  1282. .WORD Trackr_36: m; `# \& m9 P% F: Y6 s% T. C! {
  1283. .WORD Trackr_37+ i( n. g# K; m: n) l
  1284. .WORD Trackr_382 o9 X7 k0 O; g7 q& _
  1285. .WORD Trackr_39+ P/ `: z2 u. w3 u/ O* @/ ~

  1286. : d$ G/ w; i8 w- E
  1287. ;------------------------------2 e% U( j4 x4 \- \7 C* M& A+ i
  1288. Trackr_Name_Data' e8 e4 p8 J: m8 s* k* y- s
  1289. Trackr_01 .DB $05,"BGM 1"
    9 ~" N8 B/ F* b: ~. n1 S
  1290. Trackr_02 .DB $05,"BGM 2"
    $ w6 ?1 v+ V) A: I7 n. d
  1291. Trackr_03 .DB $05,"BGM 3"
    # [+ C/ q; D2 O% e
  1292. Trackr_04 .DB $05,"BGM 4"/ Z" v6 i3 y( [/ I6 W
  1293. Trackr_05 .DB $05,"BGM 5"1 H$ i% x- X8 L5 j+ G
  1294. Trackr_06 .DB $05,"BGM 6"7 }1 x! H6 N: q
  1295. Trackr_07 .DB $05,"BGM 7"6 I1 l8 l9 F( v5 n! L. b8 C! m
  1296. Trackr_08 .DB $05,"GREAT"
    # q  m5 n. o: c# m3 _$ Y3 t% M; C% K4 }
  1297. Trackr_09 .DB $08,"BOSS BOM"
    8 _  S% I# X! F3 i6 V! C
  1298. Trackr_10 .DB $08,"BOSS2BGM"5 c5 I: V2 Q, ~* |( z7 b
  1299. Trackr_11 .DB $07,"P CLEAR"
    4 Y; |5 ~2 }/ Z2 [- D% U
  1300. Trackr_12 .DB $07,"A CLEAR"! z( {/ }6 h' b0 i' @! ]
  1301. Trackr_13 .DB $04,"OVER". t2 o" ]! r+ h
  1302. Trackr_14 .DB $06,"ENDING"( ?3 h( a* ^1 l7 V0 [
  1303. Trackr_15 .DB $04,"SUTA"2 o3 z# R4 F7 c
  1304. Trackr_16 .DB $07,"THUNDER"* I: m" J! a- X, N$ P
  1305. Trackr_17 .DB $04,"SHOT"; h9 D9 M: Z* R7 Q% D
  1306. Trackr_18 .DB $05,"LASER"
    / K9 E8 y$ m& ?/ w0 E2 R; i* v" ~
  1307. Trackr_19 .DB $06,"SPREAD"4 m( `+ I7 k4 c  [
  1308. Trackr_20 .DB $04,"FIRE"
    ; R3 O  n$ X- c2 g; ?$ t% C( N
  1309. Trackr_21 .DB $06,"B SHOT"" J" A( d  r) g" {% ~; z$ O
  1310. Trackr_22 .DB $08,"T DAMEGE"+ n* `: {' K/ T! F! n
  1311. Trackr_23 .DB $07,"HARETSU"
    6 t) V2 u. E9 U9 z
  1312. Trackr_24 .DB $05,"T OUT"
    # D0 v' F- f& ^. l' e/ {
  1313. Trackr_25 .DB $05,"Z OUT"8 h9 U# s2 g4 r0 S5 r; H& \
  1314. Trackr_26 .DB $05,"A OUT"8 P3 e8 |+ e3 S. K: b0 V
  1315. Trackr_27 .DB $04,"ROLL"
    . _# D2 o2 Y5 l
  1316. Trackr_28 .DB $06,"APPEAR"
    7 z! ~, r: Z/ k8 @! ?, o
  1317. Trackr_29 .DB $05,"POWER"- H. w- m- C7 T0 U
  1318. Trackr_30 .DB $07,"BOKK BK"2 S$ R- x! S0 s0 d3 k7 R& Z7 s
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    7 X2 m1 |' c- ^- {/ p$ r( Y* ~
  1320. Trackr_32 .DB $08,"BAKUHA 2"3 ~+ n5 w; W, ~
  1321. Trackr_33 .DB $05,"ARUKU"
    6 x/ N' p# N5 ~$ r, d2 l
  1322. Trackr_34 .DB $06,"JIWARE"
    5 ?1 Y6 ?4 z5 C+ |) Z
  1323. Trackr_35 .DB $05,"SILEN"5 o2 X0 ?' ]; l( z9 R6 w) ]
  1324. Trackr_36 .DB $05,"P 1UP"
    9 V1 Z0 u' e3 r; J7 O" q
  1325. Trackr_37 .DB $05,"P OUT"
    ' f6 c1 d9 o# A! M* Q
  1326. Trackr_38 .DB $05,"B OUT"
    1 ~: {* I/ y' \
  1327. Trackr_39 .DB $05,"PAUSE"5 M# ~& p) o& H  y  h

  1328. 1 M) k3 z, x: W$ d
  1329. .ENDIF
      R" V) O0 E( R# M9 A% ^
  1330. * ^6 q) T4 Q& T) m: ?
  1331. ;------------------------------
    , x  {. y* J  O  ~$ q1 _! ^
  1332. Static_Text_Title_Data;静态文本数据2 d8 n; S9 u+ u* E5 o* O1 g& U1 h: e% d
  1333. .DB 126 U& m; P+ T. i# ~3 Q8 h
  1334. .DB "SUPER CONTRA"
    - v* g4 h2 a5 C" I
  1335. Static_Text_Author_Data
    + p" c9 }# R/ r8 e, T/ j
  1336. .DB 23) `5 A( _/ e- q
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    / q5 o/ A: g1 K# b1 O( F
  1338. Static_Text_Date_Data
    , D7 A1 X6 }  I: c6 R
  1339. .DB 10/ V  i( f7 x/ M, n: F# x
  1340. .DB "2023.07.11"4 m; o0 [# Q6 k" t" M
  1341. 3 u8 J2 v2 r: r8 E( T# T( L
  1342. .BANK RESET_BANK & BANK_DATA_MASK7 Y9 Y; k% J3 o+ B! T6 o
  1343. .ORG RESET_ADDR
    & [" P, C: `& X8 D* g( H3 y

  1344. + W" R8 F3 V# Q: z. a% L' J2 N! S
  1345. 9 [4 J  ^$ K) }* U0 P$ k
  1346. ;==================================================, k0 J5 `" ^* p  @
  1347. ;切到主程序bank
    8 O# Z' T/ T9 k, s9 w
  1348. SwitchMainBank
    1 M, d& |9 _  P
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ( i  S5 n1 ?9 J& t7 s( H
  1350. JSR SwitchBank8000+ [$ _* {/ }4 S# T" ^5 Y  r
  1351. RTS* E% m: K  Q, T! q8 o: C4 f
  1352. % C- b" U8 J' Y/ u
  1353. ;==================================================
    4 h8 U* Q+ d3 P1 e8 h
  1354. SwitchBank8000;切换bank到8000-9FFF
    ) ?- X" D; k& s! }. J' H
  1355. PHA
    " D* r/ y6 F- Q% x' T
  1356. LDA #$06
    , D2 s! ]6 O+ [1 ~7 R+ Y% k
  1357. STA MMC3_BANK_CTRL) W0 J6 t1 B# K; p! m- n
  1358. PLA
    # y0 p* x) n. e
  1359. STA MMC3_BANK_DATA# Z# C! G0 Y' Y" w
  1360. RTS
    . ?8 {, ]1 k5 d8 G/ P2 |  N
  1361. , A% ]. P1 ~1 g  y
  1362. ;==================================================
    , K7 ?% Y: c1 B6 `
  1363. SwitchBankA000;切换bank到A000-BFFF0 _: ?3 [/ ~0 x, R( A
  1364. PHA7 [3 k1 C6 E% T
  1365. LDA #$077 f. ~. V4 C: X- D; |
  1366. STA MMC3_BANK_CTRL
    / U2 u7 t0 k% {/ q2 K4 M! ^
  1367. PLA4 Q5 u) x* Q; {* r" V* W& o
  1368. STA MMC3_BANK_DATA" z* t& s; s5 x' U4 G9 }
  1369. RTS0 O0 d) z  j2 \4 o! @( K# p, u

  1370. ; ?' B8 v: u! u
  1371. ;==================================================
    , _# q% V  @  k: X7 ^
  1372. Sund_Bank_Init;音乐bamk初始化5 s6 p5 O9 H" i4 j2 |
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK) {7 y/ T% g2 W$ W' m: i) T
  1374. STA Music_Bank_8000& n: x, g4 {; q3 X- @) ^0 {
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK( T* |7 H( R- @$ F1 k
  1376. STA Music_Bank_A000* @& X+ d% [( v9 J2 ?
  1377. RTS+ g, H, E3 V1 g8 U: d' p  g
  1378. 4 o! X+ C, y( r, J4 b* G
  1379. ;==================================================5 H" \/ A' x- E' V$ x& `
  1380. Sund_Bank_Set;切换音乐bank
    ( z2 w% ]2 u+ a
  1381. LDA Music_Bank_8000+ A0 g  E: P1 Q+ N" K( ^
  1382. JSR SwitchBank8000+ Y5 v" i5 i8 Y: C1 H5 R
  1383. LDA Music_Bank_A000/ u+ Y* `; X# q/ s+ P
  1384. JSR SwitchBankA000" n5 {6 p; `5 u7 ^
  1385. RTS" g; q) Y# l2 q

  1386. & `2 V: Y" `* n' x; W; X
  1387. ;==================================================" Z7 b" W% [7 s/ ^
  1388. Sound_Init;音乐初始化
    1 k9 V3 g% a$ Z$ j4 D6 R+ J
  1389. PHA
    ) }  g* q: V9 \$ A0 W! d. A
  1390. JSR Sund_Bank_Set
    / E+ p# ]: B' S3 o5 \8 Z
  1391. PLA
    . X+ r% l# q8 r: I% {9 Q
  1392. JSR Music_Init_Addr
    " `7 A  b$ S6 j/ L* d
  1393. JSR SwitchMainBank
    - @( B# k% z" m- e3 [/ ^7 V( P
  1394. ( y" C7 o/ z. S
  1395. JSR Music_Bar_ReSet; W+ P2 I6 l( o/ H* V# G* `5 E
  1396. JSR Time_ReSet) Q2 r. W1 O' L
  1397. LDA #$003 A: [: b1 U/ I9 |8 C* e
  1398. STA Music_State4 n. d" s' L, j, M1 K& L: ^  P
  1399. JSR Music_Stata_Show
    0 A) [, z) Q9 w& m' m+ ~5 Q
  1400. .IF Track_Name_Pos. _( P/ m( s+ T- K- y" i( h
  1401. JSR Show_Track_Info
    ; J  Z$ l% v) |, i6 F
  1402. .ENDIF
    7 O: ~. T( j( _$ K: Z
  1403. , j) w" s) L4 P# Y; V$ R7 }
  1404. RTS/ {  `7 E0 g. t* z4 B

  1405. ' S$ o# e- n$ k6 r
  1406. ;==================================================2 V, }7 W7 ~- G5 U. ~
  1407. Sound_Play;音乐播放9 F6 Z% R  g% ^* M* L* X0 n8 l
  1408. PHA- D* u$ y8 s1 x' r
  1409. JSR Sund_Bank_Set
    1 I; i. t  Z) u1 z2 ^! ^
  1410. PLA
    + ?& E2 W! w( x
  1411. LDA Music_State
    " v( o9 p, G, }- {) o* |
  1412. BNE Sound_Play_End1 W; O* l2 z& @" S% E
  1413. JSR Music_Play_Addr+ E% H2 M0 _" b& _! X* p* G
  1414. Sound_Play_End+ D! ?2 E5 K" O' Z0 A0 H, d
  1415. JSR SwitchMainBank% M# S3 n! F0 G: c( c" I
  1416. RTS% R: i5 {! N7 K: P

  1417. , w8 P  K+ Z, m
  1418. ;==================================================& K% r3 P( v& c6 H2 B
  1419. .IF Music_Reset_Addr6 b7 I4 d+ b5 b! }3 Z0 p
  1420. Sound_Reset;音乐重设(如果有的话)6 V: Z/ G: N6 N( c
  1421. JSR Sund_Bank_Set8 `+ D% C$ P" d! x8 c+ j) V( S
  1422. JSR Music_Reset_Addr6 i5 d5 A; R: q* K
  1423. JSR SwitchMainBank+ ]1 d4 \# x( u3 u1 E
  1424. RTS4 j( |. v2 a+ ^6 B
  1425. .ENDIF$ ?" E* Q7 s1 A# C$ o

  1426. 8 A# V, `2 W4 t8 e
  1427. ;==================================================# z( R. X8 F/ U' B/ x+ O- o/ Q
  1428. MainLoop;死循环3 R0 K$ [( u4 u& K
  1429. JMP MainLoop# x* |# T2 a. f- Y. c) ]6 b4 E
  1430. ( A( h" L& b  C$ ~+ ~: \6 s9 f5 k
  1431. ;==================================================
    9 P6 f% N0 Q; a4 p0 b! @
  1432. NmiProgram;Nmi中断处理
    - c) O0 J. {. _; w" h
  1433. PHA
    8 ^6 t6 h: T3 [
  1434. TXA! `7 x* R# ^. D# r% j( X; O
  1435. PHA
    3 K. r" x- U, s+ ^
  1436. TYA$ W& h' k2 B8 C( i5 N
  1437. PHA, \/ J6 a- w' {  _8 d( V

  1438. 2 U, ^' ?9 s) J
  1439. LDA PPU_STATUS
    9 \0 E8 z* `2 @+ v/ X. A- B, U
  1440. LDA #$002 ~- E) y) {9 P/ t& u# x
  1441. STA PPU_CTRL, n) f9 {. z" n  c6 C6 `

  1442. : K1 {2 u9 H: ~; q
  1443. ;切换主程序bank4 {- ]5 w* H2 O1 z% I; |  _0 z
  1444. JSR SwitchMainBank
    " g$ S- R! S1 {- I- l6 T$ l7 y
  1445. 3 s; T& q6 r1 [5 Y
  1446. ;NMI处理
    , n7 d2 I. f. I* G4 m: o
  1447. JSR NmiProgramProcess6 O' T, T1 N" z6 n2 N

  1448. , ~- B/ ^2 c% u& _+ i
  1449. Nmi_Proc_End
    * g5 d, p; g5 f9 t% R# \5 c7 g* I
  1450. PLA
    & I8 P+ i& Z, t$ c
  1451. TAY9 N: J$ w1 i5 f# f: }; [
  1452. PLA
    2 R# r; ~/ x. J- A
  1453. TAX- ], e2 o" u. V% ]+ L1 f3 T! |0 t
  1454. PLA
    + F; _' \" I$ b( ^' B
  1455. # P* f: E& E% @9 ?2 y8 r' F
  1456. RTI8 \" W. n! `3 L) ^: P2 w: K$ u2 s

  1457. 2 I5 h5 ^4 U0 o
  1458. ;==================================================
    7 o0 z: B% K! q7 X8 W% }: U
  1459. ResetProgram;重置中断处理' S, O* ^0 W' ~' ]3 Z
  1460. SEI
    5 S9 h" t+ F$ Y- e- W0 j; g$ {
  1461. CLD
    / g+ o( {2 N" c$ N" e* T% m( b: Z
  1462. LDA #$000 B( G, t8 G8 s+ v1 f2 W+ `
  1463. STA PPU_CTRL* r1 P) V5 v0 y- n, i* K
  1464. STA PPU_MASK
    0 f0 B, w' t3 O0 ~/ M. Q

  1465. ' k# z, ]$ M# o. ^8 R
  1466. JSR SwitchMainBank' M- F) B1 e- A' F4 O
  1467. JMP ProgramBegin% A+ U8 ?; D; \  U& I5 b, \

  1468. . J, T  Z6 W6 W7 `  q( i
  1469. ;==================================================2 O4 Y- [9 S8 B9 s5 }5 n
  1470. IrqProgram;Irq中断处理
    4 z7 z1 H" w' Y; q0 }8 n. ~5 s
  1471. RTI: {" j8 [% H% w0 r! y7 P0 K

  1472. 6 M- X- m1 S+ _* B* K" B. x
  1473. .IF SOUND_BAR_SHOW_ENABLE
    . \, w4 q: B% Q1 P3 N
  1474. .ORG $FF80
    3 ~4 E, L9 g0 y# P
  1475. STA $4000,X: v/ n" D0 h' L6 W+ U$ u
  1476. STA Sound_Bar + $00,X# u7 a5 ?- O. k
  1477. RTS) [$ z/ C+ B, w6 \2 x; N- i
  1478.   }# @! `  ]( k2 x1 N
  1479. .ORG $FF88
    9 V2 r( f% V1 x( q
  1480. STA $4000,Y
    9 D$ `# N- P1 c+ h, H
  1481. STA Sound_Bar + $00,Y
    ! }6 `) }* n# D: d( |1 [5 w/ M
  1482. RTS
    " V5 I4 G+ o3 a4 s: t; R6 ?

  1483. & r. B! W) @0 o
  1484. .ORG $FF90, y) t5 h* y$ {8 S, W8 J
  1485. STA $4004,X3 i! w6 T+ w$ g2 W5 K
  1486. STA Sound_Bar + $04,X
    * p7 F3 s3 z7 C) d0 L
  1487. RTS/ f0 [- }+ ?/ X
  1488. , K! ?) l( K, n' t" {
  1489. .ORG $FF98
    + E$ k1 S1 x/ D: ]) S. F
  1490. STA $4004,Y' D7 d4 f( {+ @# D) R. L) p
  1491. STA Sound_Bar + $04,Y! i+ a) N3 R0 f
  1492. RTS' p5 o8 v9 u- H) r' c

  1493. 3 [  a$ g! R0 |! R
  1494. .ORG $FFA0/ d# ]* @! b' {2 k/ s1 w3 q
  1495. STA $4008,X) e, \/ ]' F' V' h$ X
  1496. STA Sound_Bar + $08,X7 V8 i. S5 ]% t/ i# S
  1497. RTS
    9 y4 X- K2 g' t7 c. b, r

  1498. % ^9 [" L% z' y
  1499. .ORG $FFA8& w# |3 w& _1 Z" L
  1500. STA $4008,Y
    0 K) Z. u& ^8 Y
  1501. STA Sound_Bar + $08,Y
    ( f  c, |% g/ _( e4 N) \8 q
  1502. RTS
    - V8 M4 u% Z; y, I/ o4 @

  1503. 2 n8 n5 c1 s% y, F) g
  1504. .ORG $FFB0
    3 b' M) [4 S3 {3 l- Y
  1505. STA $400C,X& g* f1 R" T( s+ Q1 a( j+ c
  1506. STA Sound_Bar + $0C,X7 Y5 y" `% o  q
  1507. RTS
    0 a, }) b* a8 P: K7 C  l$ ?
  1508. ) ~3 c" h. Q+ P" F0 M! L- G
  1509. .ORG $FFB80 p) d1 a7 j) {# j# m3 n
  1510. STA $400C,Y+ ^7 g5 C% u! D* S9 k
  1511. STA Sound_Bar + $0C,Y' P- i% s) y  J3 e- m
  1512. RTS
    8 l: O# T% y% Z
  1513. ' _8 o% ~2 L( w4 }. x4 Z
  1514. .ORG $FFC08 Y  X" I8 {6 Z( |8 ]% n9 S
  1515. STA $4000
    % |9 \; N1 r$ }: g* f6 ~/ g9 o
  1516. STA Sound_Bar + $00- r, N! o. K6 P" V. {" K0 z
  1517. RTS
    ) T) P* g) d' H( q- ?3 [
  1518. # o6 ?, }, S0 z; V
  1519. .ORG $FFC8, I! j2 o- t7 X3 F* Y3 A0 u
  1520. STA $4004
    # a* T; \" ?4 h/ g& j4 S
  1521. STA Sound_Bar + $04
    8 y' t! z& J# O! R: u
  1522. RTS- T( G& e' W, K3 X0 L5 l" u1 {/ o
  1523. 4 @; E7 _; d) m4 Q8 b& o1 G4 u
  1524. .ORG $FFD0- c! R" V1 r/ Q7 P" T1 {/ U) A
  1525. STA $4008! l" X/ a) j" z3 G1 A1 V6 B
  1526. STA Sound_Bar + $08, T) s  y4 G  N- p
  1527. RTS
    $ n: k! I# a' W
  1528. 8 V+ g; j. J. m- o  i. O- G
  1529. .ORG $FFD8
    6 r; N& o- H' Q4 \$ h0 M
  1530. STA $400C9 Q3 H3 V, l# r7 a9 i& N. J
  1531. STA Sound_Bar + $0C: z: M  P; H% d# D$ b3 u  ?
  1532. RTS
    + {: T; r# l3 |
  1533. & L( ?. [7 [. r& ]
  1534. .ENDIF' [7 L) j) }- S, s# A  r( Q" K
  1535. " S+ P5 S8 j; S2 \( l3 n( c  ]
  1536. .ORG $FFFA* W4 N5 R3 F; H
  1537. .WORD NmiProgram5 I' l$ D$ ^7 E2 \: L9 ]
  1538. .WORD ResetProgram
    ) Q8 w9 `1 ]+ U5 A6 L5 R- f, Q
  1539. .WORD IrqProgram
复制代码
2 f( h( [% C9 T; P1 i

4 G( H" R- l/ e7 b7 p$ V) h
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1282 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3281 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-5 06:44

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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