EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
' K# Y$ |* o1 r) e. \* E3 m9 O9 g# N8 ^  Z4 c5 x$ _8 }4 E- x
1.魂斗罗
5 N  u, a! W4 N9 O2 {2.超级魂斗罗
' H! l# F# O1 @! L0 N+ H7 G( z3.赤影战士6 M) E$ J5 I- b
4.忍者龙剑传2% H# o0 s' c' q. f

2 b4 \, y( }' _5 v& ]& E7 F% g. d3 l0 z* G9 b( h: R

2 W# p! a  [8 h* r# B, j0 e
, Y  ]# z6 v& ^" B& l+ Q源码:0 R" r7 v& o' O9 n1 U" J% l
  1. ;[FC音乐][播放器模板]" ?- X& u! e# ^+ t( P
  2. ;FlameCyclone 20230710
    ' v% ~. e% T8 I/ K

  3. 1 e, d9 a' P' e- j
  4. ;文件头
    * |5 x) F! A4 K5 W& g
  5. ;======================================================================  T! [  r1 a$ V  ], W, V
  6. .INESPRG 4                                              ;16KB PRG 数量. a8 d2 `% E: p
  7. .INESCHR 0                                               ;8KB CHR 数量8 X0 v' O; `1 t8 `4 z
  8. .INESMAP 4                                                   ;mapper 4; C: Y8 Z( P3 B5 e8 L
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直2 x& N0 j2 n6 w6 m

  10. 9 I, P: @, b, `
  11. ;==================================================* u' ?( E0 T" t2 k) |; l( Q
  12. SOUND_BAR_SHOW_ENABLE       = 11 |+ ^  T) ^* U+ @, \
  13. ;==================================================: n& T' x4 p) \# I1 E; R4 a: T5 i
  14. BANK_DATA_MASK              = $07
    ; L% @# u# U. C( J- b* y
  15. ;==================================================2 u/ _( U; y, t0 U2 y
  16. SOUND_DATA_BANK_0           = $00: w' w6 |+ z' R4 ]8 r: `
  17. SOUND_DATA_BANK_1           = $01* p9 C; p( _# S8 ?9 U( ~
  18. SOUND_DATA_BANK_2           = $027 R3 U& k" x9 K+ V4 E
  19. SOUND_DATA_BANK_C000        = $06
    ! R' J+ ?' D* k; I0 j4 ]6 a' ]
  20. ) r7 V1 R: f5 A! N/ v- _
  21. ;-------------------------------------------------1 t+ ?' t7 \  u3 H, G, }' M
  22. CHR_DATA_BANK               = $04
    / P5 d& U8 ~, a) J/ L
  23. CHR_DATA_ADDR               = $A0005 a0 F4 E( c& f/ `. R6 k
  24. ;-------------------------------------------------
    " f3 ~' i1 T4 {! ~7 g2 ?
  25. PROGRAM_BANK                = $05
      o5 [, A! f7 X8 f& l# E! d! i
  26. PROGRAM_ADDR                = $8000! T, K% E. `( ~  @
  27. ;-------------------------------------------------
      Z( f, a& c/ Q8 I( @. ]
  28. RESET_BANK                  = $074 k" K' \& E. {; m6 p
  29. RESET_ADDR                  = $FE002 K; P$ O# R3 z0 i5 a4 k
  30. ;==================================================
    4 Y$ P: X6 Q3 v- z
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址# W- _, j6 K6 @" s7 ?7 U, x
  32. Music_Play_Addr             = $813C ;音乐播放地址
    3 r3 p% ], C1 h' C3 T6 s
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址8 m2 i  _+ U6 `0 T: }! h
  34. ;==================================================
    * ~9 W' C. M) _; t
  35. Music_Song_Total            = 039  ;全部曲目总数
    $ }0 r) p  o9 i; M8 g4 K( e1 Z
  36. Music_Start_Song            = 007  ;初始播放曲目
    & L% B4 m& x' \( W4 {$ X
  37. ;==================================================
    9 ]! p- r7 N6 L. x7 F
  38. . s2 ^( {( N, E. K& E, w
  39. ;==================================================. c- q# ^+ F5 |' H. o
  40. Title_Text_Pos      = $210D ;标题文本位置# v4 m! s; N/ N& l$ n# f
  41. Author_Info_Pos     = $2284 ;作者文本位置
    ; h8 q, F( N, R
  42. Date_Info_Pos       = $22CB ;日期文本位置6 b3 P2 w2 k: ]3 y& k
  43. ;------------------------------1 }: O* V5 H3 B3 R6 {
  44. ;------------------------------
    3 ?8 |: ]6 j7 I% ~0 _8 V# C
  45. .IF SOUND_BAR_SHOW_ENABLE! j1 C) G) W' U+ a* Q
  46. Play_Index_Pos      = $21B3 ;当前曲目位置  {7 R* v' S. ~! b1 Q8 z
  47. Play_Time_Pos       = $21F3 ;播放时间位置! [0 ^: `* O5 {! s2 Q/ T9 ~
  48. Play_State_Pos      = $2233 ;播放状态位置
    , h* h" M2 L0 @  a! @3 }
  49. .ELSE6 u- t+ U) X! B4 q5 K' s: h* o3 Z
  50. 8 i4 A) o0 K& I) C$ U: H: _
  51. .IF Music_Song_Total > 99
    ' @( Q6 q7 R6 D( s9 U' D1 r
  52. Play_Index_Pos      = $21AC ;当前曲目位置3 |5 @  T4 i' V8 A* T% A. l
  53. .ELSE" T# i% E' L. v& X0 x
  54. ( b/ M9 B5 w$ `7 h- U( g, M, F" e
  55. .IF Music_Song_Total > 9( T! d" Y- D! i0 ~1 K, N
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    ! R8 ]/ L" r8 }
  57. .ELSE
    4 G' F$ T0 C4 f5 [' I, _4 I4 {
  58. Play_Index_Pos      = $21AE ;当前曲目位置7 c; G8 i/ j4 G. a
  59. .ENDIF
    + j% T$ o+ d3 M$ E8 |1 z2 ?- P/ m+ @5 e

  60. # b4 |" e  r9 a& b8 K8 N$ S
  61. .ENDIF2 _' F! v4 r. V$ q; B

  62. % z' f( V% V- R& a: ~' w8 M

  63. : A$ b2 W# O, R' b9 G1 B/ t. m
  64. Play_Time_Pos       = $21EC ;播放时间位置
      w4 e% H  b5 j- _. y+ ^2 |6 M
  65. Play_State_Pos      = $222C ;播放状态位置
    & i7 E1 l7 o8 C2 O: p1 t
  66. .ENDIF5 \5 h4 g  L9 E  Q2 }# T+ T
  67. ;------------------------------+ w! G' D+ @1 T
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ' [* g0 o9 T5 O- H
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    1 n8 s( p; c9 [( o  f; y. \
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置2 F# [8 S# o2 K% s
  71. ;==================================================
      Y8 x( f- ^# F( @4 `
  72. Scroll_X = $00
    $ e" J6 e  i; F6 ]" W2 \( K0 p
  73. Scroll_Y = $06
    2 w! j- V  _( i" ^* ^
  74. ;==================================================. o) D0 z5 I) p2 s  i; I- b3 ^' b/ w
  75. RAM_Cln_1       = $01003 v# ?' T' c9 g  u: I
  76. RAM_Cln_1_Size  = $80
    . N3 z6 I! ?; W. r% v
  77. RAM_Cln_2       = $00E0* u7 p. d- j" }5 N
  78. RAM_Cln_2_Size  = $20
    # |, k, I7 I  @: P) ]# V
  79. RAM_Cln_3       = $00E0
    % a* `2 g) ]- V1 Q! _8 w
  80. RAM_Cln_3_Size  = $200 y9 O, F* e! K8 U& u, k1 g, E
  81. 3 k6 T0 n5 f5 O) @7 o
  82. ;==================================================
    ; ^! ^- @1 f6 t% V, f7 N3 D
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    3 ^# I3 E; b. w
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    + \6 ]1 s) q8 |
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    3 e- N1 r9 b$ S2 f3 ^! c# J4 J
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    6 a$ X( l4 D1 h
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    $ z7 o1 R) Z6 k% M
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    ( h+ w& y& H& `! U2 K9 k
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ; q7 M$ i. m. p9 v+ R3 @# |1 B
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 % N1 l5 A2 i& }6 e" U5 _3 F& }) N! e
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存) N0 N: l" t( E) V! L0 Z
  92. APU_STATUS              =   $4015   ;声音通道切换4 y. C  C6 Y3 w
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ; H3 z% x$ Q5 T4 q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通6 p0 o5 ?: @& _: ^, b& o9 W
  95. ;==================================================
    : o0 m9 T2 u# ?( Y, t8 H
  96. MMC3_BANK_CTRL          =   $8000; J8 W5 _' L' z& |/ [. O8 r2 T
  97. MMC3_BANK_DATA          =   $8001( S8 V0 K" q, ?3 D$ P" ~7 }2 e
  98. MMC3_MIRRORING          =   $A000! M. o9 h  C& K5 Z$ z" Y
  99. MMC3_PRG_RAM_PROTECT    =   $A001/ x9 y+ I" I6 q8 P
  100. MMC3_IRQ_LATCH          =   $C000
    $ A- h3 y7 `4 w2 d
  101. MMC3_IRQ_RELOAD         =   $C0019 |3 j3 \( T; A8 y4 m. N
  102. MMC3_IRQ_DISABLE        =   $E000' |. T( f" U, w, n2 {1 ]& @
  103. MMC3_IRQ_ENABLE         =   $E001, z) |- g7 c) S) G  Y% @
  104. 4 `/ r5 c+ W: p  l8 t0 e6 F
  105. ;音乐数据块
    " Z2 x( Y# o% n5 J: v9 Z& Z: }
  106. ( F# S# R! J) D6 Q9 y+ Q
  107. ;======================================================================
    , A, M4 I& f* r1 c+ R
  108. .IF SOUND_BAR_SHOW_ENABLE* X4 u, a: q9 R
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 G4 e' w8 b1 d# Y9 S
  110. .INCBIN "sound_bank_bar/music_data_0.bank"$ a) \& b  ]% ]/ K; R# {8 E1 J. x* _

  111. ; E8 p' W" d; L7 {8 ^: W: L/ S
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK9 u9 g* ]$ ?- e$ N
  113. .INCBIN "sound_bank_bar/music_data_1.bank"* _: H7 d+ g; A2 Y
  114. # j- A4 }1 f( L1 q& z$ K. f
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK3 H. }& @' z+ u4 c1 n/ R2 n6 ?5 r
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    ; ~( W  ^  g9 L* r- T
  117.   Y+ L0 Y: ?9 m& K4 k) D
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK* C9 A6 l) n: }6 h; u  c' Y
  119. .INCBIN "sound_bank_bar/music_data_3.bank". M6 o" ]7 R, x) H" V3 [- @. K
  120. / `& l  u% H# s3 O, l
  121. .ELSE) T1 k1 _3 F0 z
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    " {% O8 o0 k6 j0 u7 x# [
  123. .INCBIN "sound_bank/music_data_0.bank"
    / d1 _7 c( w" F9 m+ a+ R9 F
  124. / ?/ W. Q1 _, Q) f
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    % |8 H7 x5 g- N
  126. .INCBIN "sound_bank/music_data_1.bank"
    7 c4 F/ Z! W# g8 h5 s

  127. 3 V: r2 t% Q- t0 b* E4 U( H1 {
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK0 p+ o+ J3 m6 \9 t1 g, N: |
  129. .INCBIN "sound_bank/music_data_2.bank"
    1 h$ D+ q7 O3 z* H/ S& n

  130. 7 v7 b/ ]; \  S! P3 U% z1 T2 j+ g. h5 t
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    7 n8 {, [0 H! P7 l8 T. h
  132. .INCBIN "sound_bank/music_data_3.bank"
    ; {3 F$ U2 V2 I1 ~, j
  133. .ENDIF
    : u  f6 |" j+ z# x# w

  134. ; b3 A. z8 O( O* W5 q  d
  135. ;CHR图形数据8 s4 k" k8 W: M- b% c
  136. ;======================================================================
    5 z" E( t; A# y/ R5 Q
  137. .BANK CHR_DATA_BANK  S- X* B- S* K* }& k. R& s" A' C1 x
  138. .INCBIN "chr_bank/chr_data.chr"+ n  E5 k0 C& X# Z. C3 p

  139. ; G1 u" p0 M4 y; p" B
  140. ;==================================================: A+ a3 c) O7 ~5 d
  141. PPU_Addr        = $03001 K6 |: J! C1 _+ w  b, }
  142. Palette_Addr    = $03C08 ~7 @, ?0 ]9 ?; K8 k
  143. Sound_Bar       = PPU_Addr+$E0
    : j9 Q$ n( C9 n3 E
  144. ;==================================================
    1 ~1 J9 c. ?! D- K( f* |2 o. ~
  145. Palette_Update_Addr     = Palette_Addr+$0D- B! C- D9 m" }$ D/ r" t, H
  146. Palette_Update_Max      = $2C
      j( E) {) x1 V' H
  147. Palette_Update_Min      = $218 T6 e! R& {* o! z) A
  148. Palette_Update_Interval = 60
    5 t6 x' f  M  [  y1 t- C: ^# D
  149. ;==================================================* @/ R( T( m, W) }
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    5 A! \& X) N7 T5 Y' \2 j* {: `
  151. Screen_State        = Sound_Bar_Cnt+$01
    + k1 |/ s; f" s, W6 }
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    & A4 D) ]$ w* P3 W' \5 [
  153. PPU_Addr_H          = Sound_Bar_Cnt+$037 D& S' j1 {  b2 P- a! T2 b
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    1 q5 Q2 l, m9 E7 P8 o
  155. ;==================================================& B# M/ J0 S' U( ~
  156. Data_L              = $70- a9 g. `' Q" I4 j$ `) `# ^
  157. Data_H              = Data_L + $01: _4 J% n7 ], H+ [7 `
  158. Data_Cnt            = Data_L + $02
    5 |' K+ I. l; S- O9 r
  159. Data_Buf            = Data_L + $03% t# m. N. {4 I. b
  160. Time_Wait_Cnt       = Data_L + $041 N( M; s4 n7 h! v0 n# Y1 _
  161. Palette_Wait_Cnt    = Data_L + $05
    $ h. N7 G) v8 M" j3 m
  162. Palette_Update_Flag = Data_L + $06
    ! x$ j# F* Q( t# w; K
  163. Show_Track_Name     = Data_L + $07, `( c, y/ j* O
  164. ;==================================================
    ( [0 L+ _" P. Z  d2 S
  165. Key_Keep            = Show_Track_Name + 1
    % Z; x5 y' f- P$ [
  166. Key_Once            = Key_Keep+$01
    ( v& w# G1 ]' D% r0 A( b
  167. Key_Kemp            = Key_Keep+$02" a$ r* x( R; t, c; N
  168. Key_Temp            = Key_Keep+$03' t: J8 `) _) u/ @9 I
  169. Key_Getv            = Key_Keep+$04
    ) N  ~# d6 {4 K+ s+ d
  170. ;==================================================9 V) m" J& h( k( l
  171. Music_Cur           = Key_Getv+$011 F1 Q  G7 d2 Q
  172. Music_Last          = Music_Cur+$01
    . A" q7 [( h( }
  173. Music_State         = Music_Cur+$02' n) F" ~) w2 u0 h: m7 s* D
  174. ;==================================================/ O9 `9 H; a1 q/ `, O% y
  175. HEX_Data            = Music_State+$01
    ' M% Q, O( y, N7 u5 N0 r
  176. DEC_H               = HEX_Data+$01
    4 |. e+ Q5 o$ G  n8 j  j
  177. DEC_T               = HEX_Data+$02
    % Y( M- R, s0 c7 e9 i
  178. DEC_L               = HEX_Data+$03
      P) h/ [0 F& P" @5 k( Z
  179. ;==================================================
    - W. L* M) B" {8 _. b7 w  X' I# m! [7 n
  180. Time_S              = DEC_L+$01
    * r2 k& e6 v) y9 g7 A: q( I& T- b
  181. Time_M              = Time_S+$01
    6 c/ P8 I2 @6 \) D" D
  182. Time_H              = Time_S+$028 B) c8 @  p5 ^+ O3 C1 V- w) M
  183. Time_Cnt            = Time_S+$03
      j- V; i/ ]* p4 |9 ]2 f* P

  184. 9 e* c; X1 {( i& S* s
  185. ;==================================================
    0 _6 y8 E" G4 F* }
  186. Music_Bank_8000 = Time_Cnt + 1
    ( q6 `2 X6 P3 V. o  A# ]3 `
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    1 U+ }4 R' g9 k
  188. ;==================================================/ P& m( e' t$ O3 x4 }8 I

  189. " i6 V0 ~" e3 m5 ^+ k6 b
  190. ;======================================================================* n' u' N" ], G3 `( ^2 T( s
  191. .BANK PROGRAM_BANK
    9 m  a( g) W* ?. U9 Z" K! \7 M
  192. .ORG PROGRAM_ADDR
    $ |; x# h' k2 c

  193. 4 f0 O9 f( d4 m% P
  194. ;==================================================
    ! @  b+ N( [  Z9 D
  195. NmiProgramProcess;NMI中断程序处理5 w( K0 N+ Y" u
  196. ;处理PPU图像" Y) ]! U9 n  C: [6 H+ E; x- U
  197. JSR PPU_Proc
    8 A$ Q8 o$ S7 V# `  B3 V( L
  198. $ `! j" a1 T& Q- M" C. X
  199. ;启用NMI中断
    0 B7 N& O1 M5 {% L) i7 v" g
  200. LDA #$80
    ( f( |) `# M% c, U7 U* |: G& ]( V  q
  201. STA PPU_CTRL' @) h- A) E! z5 g

  202. 0 v( Z" ^: T) |
  203. ;更新调色板4 S# i$ d, A. T% X
  204. JSR Update_Palette_Data
    / E0 F+ n2 I; ?7 b' [- Z* k
  205. . E! x* ~. X9 d' i, k% p
  206. ;显示时间(缓冲)& z) H$ c, P8 |
  207. JSR Time_Show
    1 Y9 ]4 d- p! a5 Q/ F
  208. / G1 G7 ]+ U/ G. |$ Y
  209. ;播放计时
    ! M, g3 l- ?$ A: g
  210. JSR Time_Count
    5 O0 K2 f/ ~) v2 r  V8 n$ v# d! Z* }" ?
  211. " w% p/ A- u: Z* n9 W
  212. ;播放声音
    ( F6 y! |( }( F8 T
  213. JSR Sound_Play& q3 X1 P! s! g6 }0 p  k
  214. ' N% q( U6 b1 C
  215. ;切换音乐(手柄触发)1 V, `7 D/ m. ^. e7 ~! a% K
  216. JSR Music_Switch
    ( H; c5 C. T' B9 g" O. y
  217. 4 v6 C5 i* b6 H) m& u6 S* X' Z
  218. ;音乐显示(缓冲)4 F% ]/ \: D' E+ N
  219. .IF SOUND_BAR_SHOW_ENABLE
    1 @4 K2 h- i4 H- ]8 @
  220. JSR Music_Vision/ ~1 Y6 `) P" R9 _" Z$ x8 V' P
  221. .ENDIF
    7 k5 [7 @5 F0 J4 m1 b" v7 Q6 @
  222. 0 Q$ V0 m: m4 M( U$ V# `6 U. ]
  223. LDA Time_Wait_Cnt' t8 P0 K+ W# z$ k. n: o
  224. BEQ NmiProgramProcessEnd0 ?2 ?2 T/ n7 q1 |' M: D' s
  225. DEC Time_Wait_Cnt- R2 e. e" O  a& S
  226. NmiProgramProcessEnd
    ( E4 S2 e+ X% U7 ?" j7 G& q. z5 R
  227. RTS3 d3 B4 u0 I, R; S5 \& S
  228.   I& d, L4 n( m8 i" Q* }
  229. ;==================================================: N# W. S: ?7 [& f# s
  230. ProgramBegin;主程序  s4 O" E/ N0 h0 `9 X" e2 r; i
  231. LDA #$00
    ( J( s1 S- y$ Q" x+ D/ g4 N/ w
  232. STA PPU_CTRL
    ! v, b1 X0 T& {. T
  233. STA PPU_STATUS) g4 o3 ]0 |/ t! b$ d/ y, A
  234. STA PPU_MASK
    2 ?' o9 A/ `: @0 a( }& u7 o* |$ @
  235. STA APU_STATUS
    8 a' _9 s7 A/ h, V. W) N
  236. STA PPU_SCROLL+ Y3 _8 B5 U- k% T- {6 v
  237. STA PPU_SCROLL
    8 g, @# ~, v* G9 B8 u" B
  238. LDA #$C0' f8 ]8 j. B9 A, U) b
  239. STA JOY2_FRAME
    : `2 D) x& T* ]3 H4 K  O/ x

  240. # R/ f, e* u+ b; P2 H7 M& V
  241. LDX #$FF
    6 \/ O) s+ Q- R, @/ r; y
  242. TXS
    7 a# Z; {6 l2 c1 E& ^; H# m' ~
  243. LDA #$00
    - W( ?8 v6 d9 j* G1 r& K
  244. STA PPU_CTRL
    ( ?/ b9 T" h' w) Z+ J4 {
  245. STA PPU_MASK
    7 t, F$ A- E5 S$ \
  246. STA MMC3_IRQ_DISABLE
    9 y, H% u, p" b0 t# [

  247. 5 R& S7 m3 t4 ^1 W7 Q% X" l
  248. ;==============================
    0 e$ F( B  T: {' w* B
  249. ;调色板清空
    " D. u2 ?) q# \  t. v0 y& ~
  250. LDA #$3F7 E) n3 Y2 W6 G% Q; A% A* g' n
  251. STA PPU_ADDRESS
    " V6 E" H1 [8 k# b; ~- a# F
  252. LDA #$001 v; r' R; q5 Q/ U7 M
  253. STA PPU_ADDRESS
    5 T1 o2 }% x. \" _6 f$ w% w
  254. LDA #$0F! r& V& k( L+ w: z" b' t
  255. Palette_Clear2 ?6 f2 W4 [# ]: z. N, {5 B: E
  256. STA PPU_DATA
    9 J/ v, x  |: l- B
  257. INX1 j2 b" |# r. K7 {+ G
  258. CPX #$205 y: I8 ?2 v$ m3 T1 U$ S% K
  259. BCC Palette_Clear
    7 u$ w: c: g! J2 T
  260. LDA #$00: y! A5 h, F2 h, U2 M7 H- F
  261. STA APU_STATUS
    $ M" r" Q8 s- D1 F* K1 D- d0 l
  262. ;==============================9 b& y* M' G! L# j+ s: d# D. ]# d# A
  263. ;初始化背景调色板' `* y+ s# T9 K
  264. JSR Set_Palette_Color6 S* I2 x# K8 y/ L# G
  265. JSR Set_NameTable_Attributes
    4 T; H1 u6 k9 L' @. r( \8 p! I7 Z+ S
  266. - n) B$ }# n* {% M' F- @
  267. ;==============================
    + j: t) E( ?& k; h# b
  268. ;RAM初始化
    & A, r' `5 n7 m. {* v
  269. RAM_Clear_All* ~3 n9 z& s( T1 l" z1 _: ^
  270. LDX #$00
    1 @/ s1 e" N' F8 P# I" Y# c$ r
  271. LDA #$00
    " c; j% T% B- M1 \1 k1 F! o
  272. RAM_Clear_All_Start% F- H1 j# d2 b
  273. STA $00,X
    # x/ m5 x% I2 y/ q8 I8 i( g
  274. STA $0100,X- u- {! h+ k8 g( O- `, z( r
  275. STA $0200,X
    " g4 c  A6 O! e' X+ ^
  276. STA $0300,X9 F: K3 S. z$ ?( N" ]( M2 d2 }
  277. STA $0400,X0 s/ F( D, k( w$ x( Y
  278. STA $0500,X
    ; ^7 _( ?+ c7 \3 r* r. ?0 b
  279. STA $0600,X
    ! E' p* Q9 x- j4 L5 U
  280. STA $0700,X
    + N8 p7 k; G+ J+ ?9 h& L( O+ `
  281. INX
    ' e. V* H6 w' t/ R* P' Y, d/ W
  282. BNE RAM_Clear_All_Start3 j  H, q& G$ I
  283. % d: h! i) L. l2 p9 A1 Y: v
  284. JSR VramInit1 p5 q6 |6 s4 r# o6 Q
  285. JSR Init_Palette_Addr* W/ d$ s& Q  D' ?0 }. J
  286. ) k3 l7 s3 ?' c5 N+ ?) X4 H! s0 C
  287. .IF Music_Reset_Addr
    + }# b9 O' b2 |' j
  288. JSR Sound_Reset
    / L+ s# a$ f7 v0 G
  289. .Endif
    $ E# W& Q* E8 o' a) R

  290.   N5 O" A* T1 J* X  z
  291. LDA #Music_Start_Song-$01( O& G" x. N' q3 z, u
  292. STA Music_Cur
    2 ^7 N* V% `( }+ H; e' Y

  293. ! {  R* r/ e* b" U* L/ X3 t
  294. JSR Show_Music_Text
    * Q  j1 x2 ^( }: P: Y% M

  295. 0 D. w/ l2 v. }% s; z  f7 u
  296. .IF SOUND_BAR_SHOW_ENABLE
    ; F  `7 n) D& [% W: X+ N
  297. JSR Sound_Bar_Text_Set
    4 W) b- i( ]8 T! B
  298. .ENDIF
    * c$ y* L" Q; b7 y3 z5 t( u- p4 A

  299. 1 \0 f3 m5 ?( J4 H4 g
  300. .IF Track_Name_Pos
    ' @3 f" [: l: ?& h" J
  301. JSR Show_Track_Info
    9 \8 L5 c. a1 L; h
  302. .ENDIF8 l6 e  l/ {; _: w

  303. # ^, ]/ ]2 ~9 N
  304. JSR PPU_Proc* K2 S# |+ x9 ~) A4 L
  305. , O4 s3 M6 T3 J# @
  306. LDA #$0E( y8 V* ^; F% q% W5 H+ T
  307. STA Screen_State( c7 e0 [- v$ d- y5 ~

  308. $ x, o/ |) ^& f. J2 |4 C
  309. JSR Sund_Bank_Init5 u+ W( C( Y# X  [
  310. ! [1 e7 Y- P& d1 a7 W) [  k
  311. JSR Music_Show
    , }$ R$ ~8 U/ d7 ]: A% e
  312. JSR Time_Show( V8 B7 _8 k  V; e3 T( Q8 B
  313. JSR Music_Stata_Show
    3 f! F$ C8 q9 O- O# i* f# Z
  314. JSR Time_Delay
    & D  ]/ X8 {" d/ C) d$ k( R9 ]

  315. ( D: m2 I% |) Q& W' l' d5 [+ P
  316. ) v- k( B2 q5 q
  317. LDA #$805 L: @, W7 p! d( l! D0 {
  318. STA PPU_CTRL
    8 P, B: o4 ?, q$ m

  319. 6 M3 B! ~. w) O0 }9 e* M
  320. LDA #$20% H% K" f* C: }" q" x
  321. STA Time_Wait_Cnt1 a- I0 T% ]% }. k. q; M& n

  322. $ N9 d0 n- ~' D0 ^, y: [
  323. Wait_Time_Over0 Z0 ^; ]! l( j3 p: U- ^
  324. LDA Time_Wait_Cnt
    6 g0 U: f5 N9 X7 o+ p0 v  a& j) G( D
  325. BNE Wait_Time_Over
    " m. f$ X6 y: F. f/ ^: {
  326. ( L5 a# g# Z) I# ?% \  u/ r
  327. LDA #$1F
      P* i' w. k. T8 V( `$ n! d
  328. STA APU_STATUS
    , H9 D" p; Y% V  j  t( v' x
  329. LDA Music_Cur
    1 i$ R* m9 v5 X3 Z/ `9 L; Y: `
  330. JSR Sound_Init
    & L0 m8 m. u; R; U6 s: I. }5 V! a
  331. 7 B0 _  A9 G7 R) p0 T+ _9 H
  332. JMP MainLoop; @7 w1 g# s9 S

  333. 5 `0 g4 v1 P1 v# @4 g
  334. ;==============================
    - Q3 P+ P, B7 o0 ]
  335. Time_Delay;延时等待
    6 f" @8 W' s% V( o9 b
  336. LDA PPU_STATUS
    : K! U1 V# T$ i! }' `* Q  D% _8 k
  337. BPL Time_Delay4 X8 U5 y/ V/ |8 b9 P% F" @3 K
  338. RTS
    / }7 u; H! Q& a1 R9 M* P. m

  339. 3 K3 [$ H6 r( a1 Y* |  \% e
  340. ;==============================
    4 O- k; ?  r0 }: V
  341. VramInit;初始化图形内存
    ' g4 T$ P3 D* P5 |
  342. LDA #CHR_DATA_BANK3 N  e, k9 E2 _4 `; B; J- [2 B
  343. JSR SwitchBankA000+ P  W; n" p" |1 Q. i* d5 o0 J9 H
  344. LDA #LOW(CHR_DATA_ADDR)
    ; c& a5 j! M8 H& O
  345. STA <Data_L
    6 {3 Z# s0 e1 J2 g( ~5 G
  346. LDA #HIGH(CHR_DATA_ADDR)/ [) n+ I, p" V9 w
  347. STA <Data_H1 n: A# i) ?7 N( @/ q* I
  348. LDY #$00
    6 h' y5 g+ ?0 e: T' s% l
  349. LDX #$20
    ; L3 v, k! p" `
  350. LDA #$00* y: F9 v! r$ a. f
  351. STA PPU_ADDRESS7 f+ n( q- {/ ?$ `& O6 z1 G6 `$ ^
  352. STA PPU_ADDRESS
    , @  r3 X) ?" j& c& b
  353. VramInitWrite
    9 \1 T: v* F. H% r( I5 G0 C- h
  354. LDA [Data_L],Y
    9 Z1 S4 ~3 h/ H
  355. STA PPU_DATA
    / C! z0 H% v  q' y' C
  356. INY* m. [: |1 c$ P3 R+ a  c$ M
  357. BNE VramInitWrite; r  Z& |( \6 X  e2 L
  358. INC Data_H
    3 k, ^( r/ K/ _: {, G, A4 J& N
  359. DEX9 {  K" w& _, k
  360. BNE VramInitWrite
    ; }# ^+ I( {4 k9 M/ \6 O  t
  361. RTS
    5 d5 R0 m, C9 x

  362. & I! @- R5 t) g: ?- k( a
  363. ;==============================; U% p& g" S0 U$ l- Z
  364. RAM_Clear;RAM清除
    9 z: o' A5 P6 S, L6 z/ E
  365. LDX #$00+ t9 ~: _& s! V( b. ?
  366. LDA #$00: k) z! b# ~; m& T/ j/ X
  367. RAM_Clear_1% R; A4 m* g5 ~( ?  E
  368. STA RAM_Cln_1,X
    3 L- Q2 _$ n" Y" \2 x6 z
  369. INX
    7 s( t- r4 t2 h
  370. CPX #RAM_Cln_1_Size2 R) `* `6 P0 u( [
  371. BNE RAM_Clear_1
    & l9 d7 G8 X; C3 Y+ D
  372. LDX #$00
    ! S3 }6 {- p% c+ t0 x9 V! n( R, S
  373. RAM_Clear_2+ s+ |! U7 ?9 _5 T
  374. STA RAM_Cln_2,X
    . c+ Q% s" e9 a- F' G: z
  375. INX
    0 c& d9 T( u& c, B$ w! m) e8 j
  376. CPX #RAM_Cln_2_Size, K" K  [4 r& J
  377. BNE RAM_Clear_2, ]6 X9 q/ o5 b) p$ B
  378. LDX #$00! @: M- B. p1 L& J0 ^# L" X6 k
  379. RAM_Clear_3. h1 g, Q3 `$ z3 }5 K. j- V3 W
  380. STA RAM_Cln_3,X3 G5 ]: @% ?! [) M; S. x* d
  381. INX* \! K) H( z5 ^  }5 N
  382. CPX #RAM_Cln_3_Size4 M' `5 S2 a. d: H4 U+ V2 w
  383. BNE RAM_Clear_3
    3 C0 \- [4 x* m5 h9 ~$ L( D, S
  384. RTS
    / t# r8 _9 [- @# I8 _: f

  385. 6 C3 k! e3 p6 `1 L$ M0 h
  386. ;==============================
    * N( z0 E- k) q! Y& r- [+ }% a
  387. ;音乐切换
    / N* o* X) E$ E  H# Q% B! r3 ^+ m2 o
  388. Music_Switch
    * E+ ~! v) ~% U4 y
  389. JSR Key_Proc
    2 `! z7 ^" w' x- B+ _
  390. LDA Key_Once
    * h$ L% O9 g5 r* g' {# ]0 ?
  391. CMP #$10
    * ?9 ?& z' N  s
  392. BNE Music_Start_SongStop
    $ w3 v! k( y' k& f$ F0 k
  393. JSR Music_ReSet( I, \7 J/ Q8 W6 _

  394. , T" [  {! g9 v! W' y
  395. ;音乐停止
    2 Y! @* V- f$ w2 a
  396. Music_Start_SongStop
    # [) V7 r% v0 F. y- p
  397. LDA Key_Once7 a1 X5 J8 f8 Q* Q7 v
  398. CMP #$20. |2 M4 j9 ?& i) v! }* P
  399. BNE Music_arrow% X2 Y0 A" N, h) L+ U
  400. LDA #$016 ]) V" d  `% z: b% a
  401. STA Music_State
    - t, T! i# E5 @6 g
  402. JSR Music_Bar_ReSet6 N0 W1 R7 J* x( D; C$ J* ]
  403. JSR Time_ReSet
    & N5 O5 n6 w  W, X1 P
  404. JSR RAM_Clear4 p) \% @4 K& H3 y
  405. JSR Sound_Clear* S+ ?. U! B9 w6 X3 k5 U$ q" s* l
  406. JSR Music_Stata_Show
    ! V  G; I$ _; [' U5 q. l7 M
  407. Music_arrow
    $ y0 T% F/ \5 Y: S) d  F2 j$ [4 S6 k
  408. LDA Key_Once
    $ d1 p8 C( v1 v! Y6 v" s
  409. AND #$CF
    + X+ s* T' i* R* I* @" P/ k7 F: `
  410. BEQ Music_Switch_End7 T% }! j. `( }' F. v' C
  411. JSR Music_Number
    ; e+ u( `* k2 |9 @
  412. JSR Music_ReSet
    - U5 G8 p; g8 i$ l; Y% h
  413. JSR Music_Show+ ]: g8 |, T  |- L- Q
  414. Music_Switch_End3 H$ T+ H& b* n; R4 b1 h- [0 f; L
  415. RTS
    3 Q& ]9 W2 x! Q. P0 u6 N
  416. $ p! F8 ?0 V6 x! K
  417. ;==============================
    - J- W+ Q+ q( |; R( d9 o7 D
  418. ;音乐曲目切换
    1 P- j; t7 |+ @/ i3 @# ~/ _& m
  419. Music_Number0 n. y: t( o5 |3 _
  420. LDA Music_Cur
    " f6 n2 N8 X% ^' T
  421. STA Music_Last
    " j9 F" e( `3 }& D: @# d. O, ~
  422. Music_Decrease% I. E! @0 V6 }1 @8 ~
  423. LDA Key_Once
    # e3 I/ S' r4 `+ m4 V
  424. AND #$42
    $ n0 n- Y+ E, ?# W" |
  425. BEQ Music_Increase' ^5 r# ]$ [/ R( e0 n5 ~9 [
  426. LDA Music_Cur
    2 k/ {" k6 d5 |: I: ~' _
  427. BEQ Music_Increase3 S4 o7 ^5 b$ p, W6 t
  428. DEC Music_Cur9 [; \- M: T4 h0 f
  429. Music_Increase! _" F9 ^+ C; k
  430. LDA Key_Once  e7 r3 p/ v& ^4 t; K& P
  431. AND #$81' D& K$ x+ v( |' N! ~
  432. BEQ Music_Decrease_10
    1 v; v3 J- \$ [7 u+ k
  433. LDA Music_Cur
    / L6 m3 L4 n9 a6 J/ N/ ?9 n% _
  434. CMP #Music_Song_Total-017 i) U2 U& t7 e/ |) ?
  435. BCS Music_Decrease_10
    0 D& m2 w, {% ^( E) s
  436. INC Music_Cur! t& t5 \+ r9 x  p" Y
  437. Music_Decrease_10
    ( Y* x) k( m! N7 z
  438. LDA Key_Once7 l5 M4 [/ |. Q8 [8 ~6 g7 N
  439. CMP #$04! a* g8 s4 _4 D$ q: `" ?/ r$ l* E4 E
  440. BNE Music_Increase_10! Y7 W2 b# o, I
  441. LDA Music_Cur( E! A. J7 a( P9 v& w3 w
  442. CMP #103 v3 ^7 i3 L$ N: o# b& ~8 f- O
  443. BCC Music_Start_Song_Min0 i( U. h, i5 C
  444. LDA Music_Cur
    ; ^4 E: D, @2 C
  445. SEC7 B" Z3 o9 }: C: X3 h
  446. SBC #10
    , B' I1 R" P7 R
  447. STA Music_Cur, A' J6 @! N5 }6 h& _8 f
  448. LDA #$00; E/ v" a* c+ B. l
  449. BEQ Music_Increase_10
    $ i: u& t5 u1 U8 Q( e$ E* r. v
  450. Music_Start_Song_Min# {# ]3 y( C3 p5 m1 d
  451. LDA #$00
    0 J7 Y; K2 w- F# t! Q  d
  452. STA Music_Cur
    8 Q. W' Q, o9 j( e+ T# D: k8 l
  453. Music_Increase_10! ]! B4 h: }; i( I1 i  q! L2 L, t
  454. LDA Key_Once
    ' q3 g5 d9 @9 o5 S( v7 ]$ ?& z
  455. CMP #$08/ {9 w2 N* q( Q8 L' @
  456. BNE Music_Number_End
    4 f7 J- S. ^1 O4 I% P! l7 T
  457. LDA Music_Cur
    1 r: ^! _1 P  O# x3 e; H
  458. CLC# i+ k5 `8 p2 S- p1 Z* ?
  459. ADC #10, A  R' y+ H2 F5 [
  460. CMP #Music_Song_Total-010 Y- ]1 [2 i( h$ Q: v+ t
  461. BCS Music_Start_Song_Max
    & F: v3 d: j3 i5 D: s' z' ^/ Q
  462. STA Music_Cur* r+ a, n9 S) T( N, @1 U
  463. LDA #00
      ]! f. J! V" ?  l+ N% c
  464. BEQ Music_Number_End2 n8 |; j9 s- j
  465. Music_Start_Song_Max9 V* P6 X& w* d  |
  466. LDA #Music_Song_Total-01
    2 g' E7 o* a) J' x
  467. STA Music_Cur
    1 k) a  a- y% b3 P# U" _+ E/ Q
  468. Music_Number_End
    ; w3 {% a5 e8 b* S, q- g5 \
  469. RTS8 @( e8 X1 T' w2 h" Q* M( ]% D7 h
  470. ; R* t) G- h6 A
  471. ;==============================
    / |2 I% p8 V& y$ b
  472. ;音乐重设9 l2 F: {2 l& W  t8 T& o. {2 ?
  473. Music_ReSet4 L4 m# z" I4 {2 c0 `
  474. JSR RAM_Clear
    5 u) n  E' m$ I' F# Z; e
  475. JSR Sound_Clear  t! [5 K1 o$ A2 a6 L, O
  476. LDA #$1F
    8 v! a2 O  |$ `7 x1 R
  477. STA APU_STATUS
    ( E2 x8 Z5 _) ?/ ]
  478. LDA Music_Cur) W  N$ T" D5 {( a7 _  m5 L
  479. JSR Sound_Init
    # y3 @, K, F. x
  480. RTS
    / o* j5 s9 f+ G' _4 `3 ^. o, @
  481. / X1 e1 U( z- \
  482. ;==============================
    " T9 i0 B" [: w! G
  483. ;音乐端口清除
    9 A6 W0 u6 W( P4 `& f
  484. Sound_Clear
    3 q( L/ \( ?4 ^3 m2 |4 ]
  485. LDA #$00$ {; i5 c/ s  `: O* f: i
  486. STA APU_STATUS6 K# E! I( K5 _- o# B+ Q
  487. LDX #$00
    + \; z  q5 J0 u; ]7 \& l: {
  488. Sound_Clear_Start
    9 {  _7 `: \1 c
  489. STA $4000,X
      z; W0 a6 ]2 s5 |( ?  g
  490. INX
    8 E0 I: z3 D- G- t- |- ~0 R
  491. CPX #$14
    # `7 }, T+ u8 l( t
  492. BCC Sound_Clear_Start# J1 F2 d, k& {, h" u# w1 v
  493. RTS
    % m. M$ \- ?  ]/ k. H+ ~, F, F0 g/ r/ }

  494. $ |* ?, |, p" R! E) F: I% s0 s
  495. ;==============================
    + [) f: T7 _) A. J( L! a9 ^
  496. ;按键处理7 a* ~& q/ w9 Y7 k: G
  497. Key_Proc) Y/ ]$ E$ E7 m5 f
  498. JSR Key_Scan
    , s  V$ \$ H1 G3 o
  499. LDA Key_Keep- o8 }% ]; }: ]! L5 q9 P) B
  500. STA Key_Temp
    ! `1 c# Q7 [  ~( m7 R: M
  501. JSR Key_Scan3 M& s$ S/ \- i& |( J( G8 l) i2 Z
  502. LDA Key_Keep1 n/ a+ I, Z7 n+ e5 ^
  503. CMP Key_Temp8 J5 U" W& }! f# V5 w& |  K& v
  504. BEQ Key_Get_Once+ }& A' q& V" n1 |; q3 R
  505. LDA Key_Kemp
    $ c6 V7 w, l# U5 J- f  i
  506. STA Key_Keep6 T$ u7 Q! r& G) j- c
  507. Key_Get_Once# {' G  c! u9 ?# ~% B3 {
  508. TAY  ^) ?) t" g/ q+ _
  509. EOR Key_Kemp
    # ~1 g9 p' n9 K$ N4 c& s% s- s8 S
  510. AND Key_Keep' z" [; s4 {4 k& M- G5 Q
  511. STA Key_Once
    ( I; O$ s" _! T' V5 P
  512. STY Key_Kemp
    % o" \% ?" U! N9 Q$ N
  513. RTS
    , V3 }, D) s+ l- }3 X
  514. ;------------------------------& x* C% K. l, Q3 Z* b
  515. ;按键扫描
    & L; S% Q, ^$ n) @6 l
  516. Key_Scan/ ~' u8 u1 C  ~1 h: i2 x* s$ y% x
  517. LDX #$01
    # _8 ^0 ?9 {7 n$ y, W* t# d
  518. STX JOY1_FRAME0 O) q! u( f% M
  519. DEX& r& N! F  ?- m
  520. STX JOY1_FRAME. \- I3 V( f. F6 P1 l9 z' m
  521. LDX #$089 A3 n: j$ s& ~+ n/ M' m
  522. Key_Value
    3 m- c) W4 k' N
  523. LDA JOY1_FRAME
    3 J0 y# H3 O" B; \3 m/ y  W) q
  524. STA Key_Getv
    * G; I( _4 `$ Z% w
  525. LSR A
    & D& O/ L, `& B! s9 T
  526. ORA Key_Getv; R6 S+ |' V/ S1 w2 j
  527. LSR A# v  F: S  T1 U5 ?; M  I
  528. ROL Key_Keep- F1 H+ t% g0 h+ J/ [9 Y7 h( k$ }
  529. DEX
    4 q# I, O. D) B
  530. BNE Key_Value" K9 [. l. Q( C$ c
  531. RTS
    3 ?' }5 q9 W; I- T5 R

  532. 2 |  O& l8 H* J+ f) @
  533. ;==============================3 x# u% o5 g5 ]3 t# R+ Y/ m3 P/ r
  534. .IF SOUND_BAR_SHOW_ENABLE3 c& n5 `6 n$ U  O4 W0 s
  535. ;音乐条显示* }( k6 M% f4 C/ J, I! ~
  536. Music_Vision! l% k7 m9 ?% R  h( S
  537. JSR Music_Animation
    ' t/ ~6 D2 h+ r5 C. ~* p) k3 Q8 Q% i
  538. JSR PPU_End0 |/ l5 Z1 @/ ~: j# U7 _- \% U
  539. RTS: j* p% f& h. V
  540. ;------------------------------
    5 B" z9 {( k2 C8 T: A" p0 \
  541. ;音乐条显示处理
    9 ^5 r  `/ ?4 G
  542. Music_Animation
    6 h! E/ c/ X& _, u# d8 l6 b3 a: t: l1 x
  543. LDX PPU_Cur
    , c5 ]- m# D* f( U, }& N2 i
  544. LDA #Mode_Line2 B3 J( @0 W/ s* l8 w
  545. STA PPU_Addr,X
    , F0 L; i7 [$ [1 b$ v) U9 z8 _
  546. INX
    / Y0 U6 x: Y' X/ P# [' g* a! M1 S6 ~/ \
  547. LDA #HIGH(Sound_Bar_Pos): t% E1 y" f9 G
  548. STA PPU_Addr,X
    5 F0 _) [/ T/ [5 }. }. s$ q1 T
  549. INX  y7 q: S  J3 P0 D0 p
  550. LDA #LOW(Sound_Bar_Pos)
    % ~. U$ M" Y  Z, W, z
  551. STA PPU_Addr,X
    9 h( R9 q4 [. l/ o- X
  552. INX
    ( ]% m# ?$ C; C7 P
  553. LDA Sound_Bar0 D3 |5 N0 l% R' {4 O  ]$ p
  554. JSR Volume_Convert
    5 k, Y3 M" ?4 f/ ^; ^3 H
  555. JSR PPU_Return9 h. l, o# f9 K0 l7 W
  556. LDA Sound_Bar+$4& {0 k" o# C, h) X% ?
  557. JSR Volume_Convert
    7 m8 [  G2 r( c% o, |" \5 L6 R
  558. JSR PPU_Return
    5 M+ L; ~" b% m. o
  559. LDA Sound_Bar+$8
    ; k5 @- S/ ^0 t
  560. JSR Volume_Convert_Ex
    ) J# b: y) |0 E& k( i
  561. JSR PPU_Return; E  X1 u2 f( ^3 {& i1 O
  562. LDA Sound_Bar+$C
    2 w* Y7 v5 Q) \3 A& [6 C- m( w
  563. JSR Volume_Convert$ z6 X, |0 u. o" R/ M8 V
  564. JSR PPU_Return5 a& F- t( V0 _& b
  565. LDY #$10
    5 w# h1 c  Q! j! N2 f; r7 c# h
  566. LDA APU_STATUS
    6 E1 p- L/ \% }" e
  567. AND #$10" K  g  f9 q" q
  568. BNE Volume_Count
    ' T8 A5 a* n; n  a$ x
  569. LDY #$00
    & P5 ?* o8 s% h. q: Q
  570. BEQ Volume_Count) i& A; V- e9 h' }5 @
  571. ;------------------------------
    ; ^/ x+ {2 U5 L9 o
  572. ;音乐条处理
    - l3 |& S3 n- N9 S) P  f
  573. Volume_Convert_Ex
    ! J; f8 P  m4 p! {) K
  574. AND #$1F
    $ `( Z+ @2 e( V+ M/ r0 ]
  575. TAY
    ; a: \0 U5 L9 w
  576. BNE Volume_Count, F. j" e" b% W2 C
  577. Volume_Convert
    " W# f) _0 l- T* |$ n
  578. AND #$0F
    ( v3 \# C. M  W# k
  579. TAY
    ! W, `1 l3 [3 ?  G1 s% @
  580. Volume_Count- \3 ^: l1 A) |2 S; x7 L/ h( M- r
  581. LDA #$08  E' F( @( p1 v7 E% `0 o  |
  582. STA Sound_Bar_Cnt9 N( e8 ^% |. F/ T( c8 T6 h
  583. Volume_FILL7 L+ B& ?2 \1 t
  584. DEY6 `6 ?3 G% V- y: C3 Q
  585. BEQ Volume_Half: ^% M8 x  ~& _( X2 W
  586. BMI Volume_Empty6 y( a3 u1 ?. w" z
  587. DEY
    8 e; V, l4 M; g$ t
  588. Volume_Full# V# Q2 P: V: h: i% I
  589. LDA #$166 X; o7 y& y! l$ F' G
  590. BNE Volume_PPU6 G/ O! f5 F8 n# H2 r2 @# B
  591. Volume_Half& H8 \! v& ^, B- x* Y% A
  592. LDA #$15
    ( Q% U+ ?" w9 R. y
  593. BNE Volume_PPU1 V7 I. f/ y/ d& @, }+ \, V
  594. Volume_Empty
    2 l  `1 T3 K: B+ S) y
  595. LDA #$148 i! L5 V/ D8 m* @
  596. Volume_PPU
    # H6 w- E, R1 B
  597. STA PPU_Addr,X6 e# Q, v, M2 ^' v# }1 ?
  598. INX7 {; G' G0 e/ |& \  K
  599. DEC Sound_Bar_Cnt
    4 M  w  a$ ^9 E( m" K) k' l- e3 w4 \
  600. BNE Volume_FILL  \3 j: H' n$ o; p
  601. RTS- T% `8 [0 c5 M0 v, ]$ W, F

  602. 7 ~1 A* f, Q( Z' v) G
  603. .ENDIF
    , G9 {7 m" F5 y2 q' f8 x* L- |
  604. 9 k# I6 R. Y% g! H, c" u" p$ f
  605. ;==============================
    , w3 S' g* D4 q: ^$ \1 Y
  606. PPU_Addr_Set;PPU行开始) c. V7 r. X& D; a2 U# H- ?* `4 I# E
  607. LDX PPU_Cur- E' ?4 c; d/ h
  608. LDA #Mode_Line
    ) I0 Y+ D, b  W; K6 b
  609. STA PPU_Addr,X9 O6 X* |" K* t% U1 L, o
  610. INX
    9 z$ X3 u% g* T9 Y8 U5 S- q
  611. RTS8 h$ k" b, R- W
  612. $ s# R- p7 j4 Z0 c
  613. PPU_Return;PPU转行' W* K7 ?) a; o9 H3 L# H
  614. LDA #Flag_Over
    6 ~% I0 M- j4 n3 ]' b5 m
  615. STA PPU_Addr,X, q% `+ ]" Y% G8 @+ `
  616. INX
    : |/ i! H1 J# R; d/ |
  617. LDA #Mode_Return  d' x1 n( h3 G# M5 Y3 r$ j
  618. STA PPU_Addr,X* l; \/ L# I3 u' |
  619. INX
    % n1 g% s1 V, E. x
  620. RTS, H1 X+ H& M3 A6 O" a& f, w/ Y

  621. ; D1 }4 H) w; Z  R+ a. _
  622. ;------------------------------
    8 N# z0 M6 X# F! x1 z& y9 Q, V
  623. PPU_End;PPU结束
    6 x/ p+ B( E" Q$ Y
  624. LDA #Flag_Over) `9 P$ C9 b4 R. ~* j8 d% B
  625. STA PPU_Addr,X; p) T& y+ J$ o
  626. INX
    # X* ]+ A: G' q, L
  627. STX PPU_Cur
    $ N' C/ m& t; I; H
  628. RTS. y0 D! s- W- _/ h
  629. ;==============================
    * L  ]/ M7 B; B# h* Y/ d: k& o
  630. Mode_Line     = $FD    ;新起行模式5 _* G+ g/ {" I+ p3 m
  631. Mode_Return   = $FE    ;转下行模式4 w' l( j( s& j+ k% d& Q& p
  632. Mode_Clear    = $FC    ;行清除7 G, M& O# t# h8 J( X4 S. B
  633. Mode_CntLine  = $FB    ;行计数写入
    3 j7 _0 k1 \( L' S1 U- z
  634. Flag_Over     = $FF    ;行结束标志
    " _+ }) y* k6 ~- y4 v
  635. + s% Z0 B" O: Z* E5 i
  636. ;------------------------------, L+ P* r5 u5 c, b5 \7 f" x& j5 m' q, y/ H
  637. ;PPU处理+ }# h. x& D3 s6 t( f: B# l* D5 k
  638. PPU_Proc* n8 M3 a% \5 c, b
  639. LDX PPU_Cur
    - p: O. X! I/ k. @
  640. LDA #$00
    & }9 O: y8 c" a# h* ]% Q$ v
  641. STA PPU_Cur
    * @- C7 `  W- ?: I4 l
  642. STA PPU_Addr,X* M1 J2 l6 O5 O- |* [
  643. LDA PPU_Addr5 ?5 p& r# }/ ]! j4 a9 k+ T
  644. BNE PPU_Proc_Beg
    : S- F1 J! W7 U& y
  645. PPU_Proc_Ret
    4 w0 r8 M) g8 B
  646. RTS
    ! ?0 V4 K# C4 i# |# r& k, p
  647. ;------------------------------
    ! }2 G  E) F+ k/ R
  648. PPU_Proc_Beg  ;处理开始8 `& W9 R2 [! k' `0 J9 M( E
  649. LDX #$00
    4 X4 Q5 {( p. T' _; g
  650. STX PPU_MASK
    / M& W) t+ h8 k' ^; @2 G0 j  ^
  651. ;------------------------------
    . a" p% _0 C& }6 N. `) ^
  652. PPU_Mode_Select  ;模式选择5 |6 E, E" N1 s# L% r
  653. LDA PPU_Addr,X  D. ~# P3 ^& N+ o" A& @
  654. CMP #Mode_Line& U) ~' }: L# j  K
  655. BEQ PPU_Mode_Newline
    - u( [  V2 Q) [
  656. CMP #Mode_Return
    & B; r* a% g9 `% H& \3 q0 ~
  657. BEQ PPU_Mode_Return
    ( d. v1 s1 K9 |/ c% Z
  658. CMP #Mode_Clear
    5 T) A& t! ~' r/ z, U/ N- \  C7 @
  659. BEQ PPU_Proc_Clear! k5 h/ e  V+ S& y  h) p
  660. CMP #Mode_CntLine
    # T1 v2 O* N/ S- q- L* @
  661. BEQ PPU_Proc_Cnt_Line
    / y3 E0 x. ?: ^) j$ N" w) K; P7 X
  662. RTS7 U! w8 Q2 V( g  C7 `9 M
  663. ;------------------------------
    % i+ s1 d+ K9 F) r4 H- p9 W
  664. PPU_Mode_Return  ;转下行模式- S- \3 A- c# y0 \
  665. LDA PPU_Addr_L* v( o- Y  U( b3 P
  666. CLC
    2 Z+ w3 S* o3 N( y0 C9 Q
  667. ADC #$20) x+ k3 L, Z5 H( n' n
  668. STA PPU_Addr_L
    " B& D' W$ n4 J+ f
  669. BCC PPU_Return_End: m; _9 [1 c( V3 A7 P
  670. INC PPU_Addr_H
    ) x( W" W4 s! J- ]1 A! E: N% L
  671. PPU_Return_End, q% f0 F" m1 W# P( q/ N2 z
  672. JMP PPU_Set_Increaser8 ?6 [) E( a' M$ E
  673. ;------------------------------
    # ^& e5 a! Y5 M% V  N8 j  v
  674. PPU_Mode_Newline  ;新起行模式) {  V. Q( |6 z1 b5 V
  675. INX
    : X1 l  I* N' [+ D* Q' j! x
  676. LDA PPU_Addr,X+ m2 N* ?. w4 N3 q* H
  677. STA PPU_Addr_H
    0 J6 A3 e9 c& ^
  678. INX
    4 h, L+ B. L+ _: l& R
  679. LDA PPU_Addr,X
    7 ^, `! e  a3 f+ r6 r$ N4 O! C
  680. STA PPU_Addr_L$ o: ]# N6 f4 _5 p- ^' h- P$ j
  681. ;------------------------------- _* j# L. u& \7 O3 P' g
  682. PPU_Set_Increaser   ;设置写入地址
    $ [1 n9 m! Q* Y2 P; W  K2 H' |( R
  683. LDA PPU_Addr_H8 J6 Y+ p  b# g6 j% ^9 P
  684. STA PPU_ADDRESS8 \' ?- G" [$ X# h! v, I9 b
  685. LDA PPU_Addr_L" M. \' @* x4 G! g  x4 w
  686. STA PPU_ADDRESS
    4 R5 }$ J- T1 G
  687. ;------------------------------
    . E/ X* E; G9 a% A5 ~; b3 C
  688. PPU_Write   ;写入数据2 t2 \+ ]" s* w8 ^  f) L
  689. INX6 M! e1 W8 v1 p, F% L
  690. LDA PPU_Addr,X
    : c% F  N3 l/ o- e
  691. CMP #Flag_Over6 N/ e0 h, D1 s+ d, T
  692. BEQ PPU_Proc_End  K, x* t, J0 ]* W' q/ P) L
  693. STA PPU_DATA1 X6 m7 F/ G7 b( r# N
  694. JMP PPU_Write
    9 ~" ]3 [  U" x+ M! u0 D+ h/ Q
  695. ;------------------------------! u& y9 l; A1 U7 f8 t
  696. PPU_Proc_End  ;单行写入结束/ E3 J! l  d/ J- ~. s0 U
  697. INX
    + X" U3 t) R; W: F- u4 Q
  698. LDA PPU_Addr,X
      C2 s  h$ c% M% M8 Z9 w" l% E  n& v
  699. BNE PPU_Mode_Select
    : G* A% `/ C0 s; N+ P# e
  700. STA PPU_Addr
    * ~4 _5 o$ V& o' P' b
  701. JSR Update_Palette_Color  \# |8 o% i+ q$ L
  702. LDA #$00' l+ Z# l# t: }4 L% ?) P
  703. STA PPU_ADDRESS
    % A9 {, w9 _- l' K( ?
  704. STA PPU_ADDRESS! y% c' t7 N3 X# f; t
  705. STA Show_Track_Name; @. F& {- v# a+ p" P$ f
  706. LDA #Scroll_X
    5 q) n' f, _9 h- i8 @5 n: v
  707. STA PPU_SCROLL& h6 T( T2 C2 H9 R2 p, G5 A2 ^
  708. LDA #Scroll_Y
    1 m# F. L% ~& ?" g5 g
  709. STA PPU_SCROLL
    : _3 i5 c9 n. K; u( U1 w
  710. LDA Screen_State7 v% ^" r3 X3 g, J$ h1 t
  711. STA PPU_MASK
    : o: Q, s* I" Y  L
  712. RTS: {+ R+ ?. I3 J
  713. / p7 Z) b6 z0 \# c
  714. PPU_Proc_Clear
    1 V- ^* l6 H6 i" n# q* }) y
  715. INX
      Z# k; o0 k3 n( V$ U- |& X
  716. LDA PPU_Addr,X+ V' B* \. W% A7 h3 }/ B
  717. STA PPU_ADDRESS! Y! ^& \2 a7 J/ n; d% |
  718. INX
    2 Z. M1 \5 G" z5 j" t  W- D, i
  719. LDA PPU_Addr,X5 Y( Y) a& \4 l* `& G2 D) g
  720. STA PPU_ADDRESS" j+ s: q1 h# x$ L- e$ h
  721. INX. R& G2 t! j) `4 ~( T
  722. LDY PPU_Addr,X
    1 I3 @  Q9 d/ O8 F( y/ z
  723. LDA #$00
    7 H3 d8 T) }+ _. g2 J( q
  724. PPU_Proc_Clear_Write
    0 O3 ]+ P1 f1 S! f. }1 p
  725. STA PPU_DATA7 Q3 w5 D0 }5 S4 N) K& U" j) C4 Q
  726. DEY& {  q6 B. ^& C
  727. BNE PPU_Proc_Clear_Write
    $ ~& c8 \8 P. {
  728. JMP PPU_Proc_End
    ( ~5 I$ F2 e4 v! R+ b/ p2 b6 i

  729. 8 L8 g3 x6 x' w$ n$ ~% X
  730. PPU_Proc_Cnt_Line+ e( v' F+ e% \9 F( t: f0 x6 i3 `
  731. INX
    " G2 ~3 }) m3 A7 A% V# H/ e5 E8 l2 w
  732. LDA PPU_Addr,X0 r9 ]( \/ G2 h6 e  W
  733. STA PPU_ADDRESS. I6 A" M" F9 Y4 F1 d. L: j
  734. INX
    9 k1 m( p8 Q/ e4 ]! M' r
  735. LDA PPU_Addr,X$ @) o' |6 l: s7 _) Q+ G
  736. STA PPU_ADDRESS+ I! I. ?7 ?+ h" P2 F& L% h
  737. INX3 G. `6 z+ z4 v# O# Y: o
  738. LDY PPU_Addr,X+ m0 z6 f1 j" I: o
  739. PPU_Proc_Cnt_Line_Write
    6 b" i8 [0 q( \) @+ D; o; C* I
  740. INX
    & n. ?1 Y! L- ]
  741. LDA PPU_Addr,X. b2 [- T+ ?* x6 [7 E
  742. STA PPU_DATA! u8 Z3 W( P4 e! |
  743. DEY
    / S% y& g% w$ i" \- i
  744. BNE PPU_Proc_Cnt_Line_Write
    & u7 ?1 _% {3 ^1 C" ^( p
  745. JMP PPU_Proc_End
    " ~7 Z0 f# m! a/ l7 A
  746. 7 o$ S5 p# K) r& ~% j1 s5 S
  747. ;==============================
    ! Z+ a( z  t) S* x# P4 V
  748. HEX_To_Dec;十六进制转十进制
    ) S" w% E. c3 G. I$ i
  749. STA HEX_Data, I$ R' a; N1 V2 |0 ~
  750. PHA' v0 _" P1 {6 t& \
  751. TXA! w6 C, h  Z" W
  752. PHA
    . V+ \8 Z- C7 l$ x0 C- T, ~
  753. LDX #$00+ \; d! R3 B+ _% _( n% k
  754. LDA #$00
    & c& ~6 W' h3 g
  755. HEX_Cln
    ! j) Q8 o% R/ i& A2 L7 {0 O& A2 p
  756. STA DEC_H,X* d) V, a# N; @9 v! a0 B) J
  757. INX
    0 _/ P: S8 T: V0 L
  758. CPX #$03
    ; e, s& B- e0 u- U; }: Q
  759. BCC HEX_Cln
    0 [, v- Y: R/ g  v: X" q
  760. LDA HEX_Data
    / P2 ]: `2 u+ g# _6 j
  761. ;------------------------------
    / @1 o. ]  }+ F1 c0 K6 w6 z
  762. HEX_100
    ) l( R6 C% q9 P4 _
  763. CMP #100
    % R1 I9 p# r9 P1 \; Y
  764. BCC HEX_103 n# Q. q# Z( U0 E
  765. SEC
    , x* o5 T! }$ G) R- z
  766. SBC #100
    . P; j- A2 v8 `  I4 E
  767. INC DEC_H
    / b3 @0 r, O3 W/ ]6 X
  768. BNE HEX_100
    $ u2 L% V' D6 F8 F, w7 H
  769. ;------------------------------+ h& k  ]6 ?  f+ }) B& r0 s, l
  770. HEX_10
    / O; L# L6 m- X1 C' m' L
  771. CMP #10; Q& p9 |7 n+ m% P/ Q9 x" |
  772. BCC HEX_1/ [4 J" A- A! q6 `2 L
  773. SEC3 c* ^( q& d5 _* T0 X$ L
  774. SBC #10
    & {% c/ [2 D- Z5 {! `! M
  775. INC DEC_T0 e; |! ?' E, h! p& V
  776. BNE HEX_10( F/ P: v  i% y0 x7 u0 T& C
  777. ;------------------------------
    & O8 v8 P- ^- y. _4 e
  778. HEX_1
    % A& ?$ \: o3 W) y
  779. STA DEC_L( e# _  i7 [' z5 o, t" m3 O
  780. PLA  Q1 z  [8 O9 \2 v0 v
  781. TAX1 \1 `$ x7 t1 ~1 u9 P
  782. PLA- z8 i- p! C  f: s5 b% ]
  783. RTS: E) @; m# @+ q/ s6 D: Q3 u- b+ \
  784. / D' k: Z' P8 a
  785. ;==============================- J8 E4 B8 L! J$ V. r/ b3 _
  786. ;音乐曲目显示
    . }1 j9 r; J2 I3 ~7 ]3 I/ J
  787. Music_Show
    0 F& A, v6 Y. K* g' L% o
  788. LDA Music_Cur
    $ F$ |' G( m- |* r+ I( i' T$ b
  789. CLC# o/ f4 G5 H  I# [0 k0 I
  790. ADC #$01( g4 i/ s  m% q
  791. JSR HEX_To_Dec- J) C- z0 X5 p/ w; g% O
  792. LDX PPU_Cur
    6 Y6 a0 @2 K' S7 F& [
  793. LDA #$FD( I$ A3 Z% j0 O# t4 h0 j- ^
  794. STA PPU_Addr,X
    $ b" t; N. M6 p  n/ L
  795. INX
    , n  @. e- b9 V8 l9 {0 }
  796. LDA #HIGH(Play_Index_Pos)
    # `; \0 i- S' B1 ]5 D2 ?8 V! \! p
  797. STA PPU_Addr,X
    % K& M0 ^+ @. c9 |8 [9 M& V4 S
  798. INX
    * j. R& d9 e3 `6 N' f4 m4 c
  799. LDA #LOW(Play_Index_Pos)7 w/ L- ]- S) s1 F( O' y; U
  800. STA PPU_Addr,X! _7 I0 a3 ]8 S& N, Q
  801. INX
    9 Y, q* U4 \% i/ t" _  J; k
  802. $ p1 O$ S% U; H1 e- t8 f, y
  803. .IF Music_Song_Total > 99
    % E, M% j4 F; ]
  804. LDA DEC_H, N! I2 T7 p" L: c$ [* o# m; K
  805. ORA #$30& b+ x3 r) ?, {9 Z) P
  806. STA PPU_Addr,X4 U+ s' ^0 B' ^3 d* B. I8 h) R
  807. INX! s7 q7 S/ c, I& N) q
  808. .ENDIF9 y1 U  O: |& C2 a

  809. 3 U: @+ q) A- K& y
  810. .IF Music_Song_Total > 9. L- x' n8 Z5 }  j2 q4 {
  811. LDA DEC_T
    # Q2 i, Q4 Y+ r2 M
  812. ORA #$30
    * v; b% `) z; G3 ~; Q: a) N( ~0 r; ]$ ?
  813. STA PPU_Addr,X
    ) U+ w% D; \/ t0 b
  814. INX/ E( E1 m6 Q9 k7 P% ^
  815. .ENDIF
    9 z8 a( S1 R8 q8 \  S0 M+ B, e
  816. , v: v8 @0 V, o; K3 z; u
  817. LDA DEC_L, j! b+ T: @. O+ C4 K$ O
  818. ORA #$30
    2 ]3 |( e- y! P: ^# K
  819. STA PPU_Addr,X
    / Y: v6 T; p7 |
  820. INX! l$ E9 n# g9 ~, b
  821. ! j8 z6 X: c9 p0 S- T" r5 D' o, Y, _: L
  822. LDA #'/'
    , r$ H1 j" V  P" j! \& r
  823. STA PPU_Addr,X
    6 k) _6 z% ^; A, d3 o
  824. INX6 P. h6 b, E" |9 ^, y5 A% S7 Y
  825. Music_Show_Total
    , A; Y) |- i& `  ?& x4 s. q
  826. LDA #Music_Song_Total
    ) d" g9 X2 V- Q, B5 c
  827. JSR HEX_To_Dec
    ) \# M* I! Q( W

  828. : w2 d" U2 \5 P! U5 ]/ ^# z. ]
  829. .IF Music_Song_Total > 99
    ) D6 I% z! S! e6 I6 k$ l* m
  830. LDA DEC_H
    % S  ]% Z* _  [  \. {8 j
  831. ORA #$30& F& k8 @! w/ ]9 r. b! C: G
  832. STA PPU_Addr,X
    1 A. `  q5 P& n, m
  833. INX
    # z1 @; c9 ~' @7 d. f
  834. .ENDIF
    6 _! ~+ O; m4 v: i

  835. 0 j# x+ W0 M8 F$ i+ J
  836. .IF Music_Song_Total > 9- H6 h- y, |2 I& n% e/ G
  837. LDA DEC_T
      b* S  r' O: M' B
  838. ORA #$30
    0 j7 G) K' }5 j9 j3 w8 O
  839. STA PPU_Addr,X
    2 H+ r; z5 X- u* @
  840. INX
    & _3 c1 g* i. E1 T
  841. .ENDIF; y+ L/ b& Y9 @% \
  842. 2 b6 U/ c0 l# H5 Y# v# _2 G& Y( L/ K
  843. LDA DEC_L/ I2 p! j; F* }: B
  844. ORA #$30. n* Z! e7 I/ Z! U' F# ?& a2 ^9 `  Z1 {
  845. STA PPU_Addr,X- Y$ {2 g6 Q2 P9 b: p
  846. INX
    - `4 t' d( N2 h& E- u, m* `- ]; X9 }

  847. " R( Y/ q  B( X$ C* L
  848. JSR PPU_End8 _9 v* g* d+ W& y
  849. Music_Show_End
    6 o: |; Z" l& o4 g1 c
  850. RTS: x, U( t4 D4 |$ U9 i; ], @, `
  851. 4 m. E  S4 J# `( x
  852. ;==============================
    $ t3 @" c9 X2 X; d' `8 T  O  b" j
  853. Time_Show;播放时间显示+ l# {' P% S; [2 J( C
  854. JSR PPU_Addr_Set! p* N) V* C3 K) Y
  855. LDA #HIGH(Play_Time_Pos)2 i: Q8 I6 E7 i3 }
  856. STA PPU_Addr,X3 A- m- o! U, l- i* F% |2 S# g
  857. INX
    ; \" r7 X/ A( f2 `
  858. LDA #LOW(Play_Time_Pos)5 }2 y' y; T# M' R+ ]
  859. STA PPU_Addr,X( _0 [/ E6 n9 C! q5 n8 u, Z+ x
  860. INX/ Y6 w% q+ P/ _' ?. n) E8 v
  861. Time_Show_H
    9 X& t6 d! [8 l
  862. LDA Time_H
    / q2 E# e+ d5 R9 V; O
  863. JSR HEX_To_Dec7 G: |- r8 B$ |2 a- L$ `( ~7 h4 b& F
  864. JSR Time_Digit
    2 t2 {" T1 @" d; o/ R- A
  865. LDA #':'- M2 E" {# h) U; k3 v1 N
  866. STA PPU_Addr,X( s: M  O& E" v2 M( V# s
  867. INX
    0 Q, d$ c# O0 N+ J
  868. Time_Show_M
    & x  w2 a. g, I& X6 ^( l. N
  869. LDA Time_M
    ! Y" t+ z7 Q- A4 {0 R
  870. JSR HEX_To_Dec
    ! O+ y" i6 r4 R% ^
  871. JSR Time_Digit
    % j! R7 K$ T+ u/ y
  872. LDA #':': Y- ?6 w+ c& Y. I+ H3 E8 i4 H* _
  873. STA PPU_Addr,X) y6 D. J+ w1 I: h6 U
  874. INX
    ! ^/ o; R& y7 h6 r4 L& ^
  875. Time_Show_S
    , w# l; f$ E1 c4 r( W! R  n
  876. LDA Time_S
    1 j# A  Z( M7 y% U9 `. }
  877. JSR HEX_To_Dec
    ) r2 I5 X4 i6 t# G; F6 `8 X
  878. JSR Time_Digit' t- k: Y) a9 K
  879. JSR PPU_End
    + u  x% V5 e9 F5 A$ c, L+ t( k
  880. Time_Show_End
      x9 I& n: Z- d/ `, [7 m3 U  s! z
  881. RTS
    ( m9 e# J, R- _1 ]% ~) a0 k
  882. + O; U: Q+ C; Z5 t2 i& x: e3 T
  883. Time_Digit1 F" }% y% a) ~/ F. j
  884. LDA DEC_T8 D& g( @7 |4 P& F2 M" Z& g
  885. ORA #$30
    1 i4 G7 w0 G6 W$ B5 a; v
  886. STA PPU_Addr,X( P( U6 E& q  u" w0 s9 ~
  887. INX
    # \# V  `; ^' T2 s8 k
  888. LDA DEC_L
    4 a9 B/ S1 D. W! K! f" j8 V! n
  889. ORA #$30: {8 e; |" e6 s8 ~
  890. STA PPU_Addr,X' K( F! o1 g2 K* u/ ]0 T
  891. INX' v5 j5 l. s6 W8 P7 h
  892. RTS
    ( }; N( l; |, s' W" I

  893. 3 {5 D4 r" T" R1 k; k: I
  894. ;==============================& b% }# w& y9 k9 f
  895. Time_Count;计时: `* {& h+ W( j  c
  896. LDA Music_State) b5 P  M# k4 y1 X
  897. ORA Time_Wait_Cnt
    6 y3 g/ j4 R; x. ^
  898. BNE Time_Count_End- y+ ?' ?( w( Z) \/ {8 t$ g8 _
  899. INC Time_Cnt5 b7 w2 V5 K2 t- B6 e' l
  900. LDA Time_Cnt' ?4 u9 h  E1 ]! O  S# I
  901. CMP #60( k1 l' b' _" A6 E4 Y
  902. BCC Time_Count_End
    ' ^& x! b4 T: [* K
  903. LDA #00
    & D1 F( o0 ]5 Z7 m! A% q
  904. STA Time_Cnt
    ( L& `8 l- F9 c, M8 w/ Q) ^
  905. INC Time_S
    . r4 o% w$ ~& t
  906. 7 h  m( J8 Q7 g7 G1 S8 `3 ]( |
  907. Time_S_Cnt; o5 x2 o8 T6 K& `
  908. LDA Time_S& C7 I+ S- e1 ^) f7 l1 y
  909. CMP #60
    6 [+ e6 e1 P$ s5 t" N) ]
  910. BCC Time_Count_End
    * c5 m- e4 ]0 q5 H/ F
  911. LDA #00* o  e  K) u4 A6 t8 o
  912. STA Time_S7 w4 |" n( M2 j( |4 b# P( \) x# W
  913. INC Time_M
    , G  Z+ A# I7 m0 b! K
  914. 4 N# o5 C' @$ p4 r! T" G
  915. Time_M_Cnt+ o* J" r- ?3 \- j* ?9 V
  916. LDA Time_M' A2 w4 {- R& E3 B
  917. CMP #60) e  K/ g! x: G0 J8 N
  918. BCC Time_Count_End+ d! A! m9 ]7 P" D' i- Y
  919. LDA #00$ M; s% D9 p; M- S3 p
  920. STA Time_M+ M2 ~% I; V) y. ~4 q! e0 H" t
  921. INC Time_H
    , j. b0 D& E& f: G; L
  922. 2 p; _3 V5 \' c6 N2 X6 f
  923. Time_H_Cnt& C8 C0 F! ~2 M% |2 ~! D
  924. LDA Time_H
    0 `8 q( X9 M, o/ p2 w+ @: H
  925. CMP #24% x# _8 _+ \  y( k. m( L( ]
  926. BCC Time_Count_End
      c! v& P' J7 L+ Y1 b  k
  927. LDA #002 h: g: A" R6 ~( O# S0 [; R' I& J
  928. STA Time_H
    6 n5 U1 b  |4 U% Q5 P

  929. 3 S' ^; c! T- A8 L
  930. Time_Count_End! s, B0 r7 V. _" Q/ i4 l3 @
  931. RTS3 M, S* K4 u3 Y. R' W4 [
  932. * V1 O& X; Y* v6 O
  933. ;==============================8 U  F. J' z$ j* o1 D$ k9 E
  934. Time_ReSet;播放时间重置
    - E  ^4 _& ~% U& X" W" N5 y
  935. LDA #$00
    ( |/ Y! i8 V  W
  936. STA Time_S) A8 I) E  h9 Q( r) Q0 x/ Z4 U; ^
  937. STA Time_M
    $ W7 Q* q, T: V  C6 T/ n% M
  938. STA Time_H
    8 E, c& @% {# d1 ~2 S/ k5 f1 ^/ @
  939. STA Time_Cnt
    # A" a* \% u, m' e
  940. RTS
    + L/ ]! d$ S. H: k5 T) S
  941. * D" ^; Z! k# j5 _
  942. ;==============================8 {5 p/ A5 E' g/ I# J  _: `" d* u* J' {
  943. Music_Bar_ReSet;音乐条重置8 t- v1 \7 d: l4 }5 i, i
  944. LDA #$00; i/ O* L7 n$ c
  945. LDX #$00
    5 X7 P3 u$ B# x: h3 r/ U6 R
  946. Music_Bar_ReSet_Set
    # g( d2 K) C/ b- y3 u
  947. STA Sound_Bar,X
    : U: O2 T. Z% O" N  Q
  948. INX
      ~& X* X; r; B
  949. CPX #$10
    . u' m; J6 d+ o0 G. U& v; S
  950. BCC Music_Bar_ReSet_Set4 W: m8 V9 w; @5 O& ]
  951. RTS
    / u0 R5 D7 ]7 ^, [  y
  952. 3 o  m+ _/ W# C* W# I
  953. ;==============================8 d2 ]9 R0 |3 v! ^1 \
  954. PPU_Data;PPU数据写入
    # I6 c; G# C( f8 e$ u0 h# k
  955. STY Data_L
    ' \9 ~$ v1 Z& c. B' @
  956. STX Data_H7 ~! e# w6 h  t2 d# H
  957. LDY #$FF
    / L! A3 X+ g9 Z7 ?( T1 \5 `
  958. LDX PPU_Cur
    0 w8 x7 S% }; e
  959. DEX9 g# B! f* j0 n+ ], U7 P* t3 x" X
  960. PPU_Data_Beg
    9 g, [' ^+ E8 f5 d4 d8 p4 a
  961. INX+ X. t2 k% D% x2 h
  962. INY
    + ^1 x, V; E, b+ r) A8 t: j( ?
  963. LDA [Data_L],Y
    % z. I6 Y7 e3 \( U) P: L& S
  964. STA PPU_Addr,X" }: B+ e4 p# q) E! t
  965. BNE PPU_Data_Beg5 R: k9 a! l8 R4 a2 k7 G
  966. STX PPU_Cur
    6 R3 B& ]- E  Q3 ]* Z% s
  967. PPU_Data_End- q5 u% v2 o# A, f8 T
  968. RTS4 C2 `& x; [  V; {' Q

  969. : `1 x4 L+ A% C9 z5 \9 y8 h# T
  970. ;==============================
    7 I, I' x. |& j) A7 D
  971. Music_Stata_Show;播放状态显示* |8 P! p* C# K$ j
  972. LDA Music_State3 g4 p1 |/ u' V
  973. BEQ Music_Stata_Show_Play
    2 |: L) |' o. Y6 V8 h
  974. Music_Stata_Show_Stop
    ' F: Q0 ^9 r2 w7 x; O- s# h& v7 F+ B
  975. LDY #LOW(Music_State_Stop)/ g9 l' _# r1 ~8 X& k
  976. LDX #HIGH(Music_State_Stop)+ x4 m: M( |  n
  977. JSR PPU_Data* l9 o1 i6 ]% E0 N8 ]
  978. RTS2 P$ ]7 n. K' Z- w8 P: _0 ?
  979. Music_Stata_Show_Play
    " ?/ j8 g2 p/ U
  980. LDY #LOW(Music_State_Play)
    ( f' s. l' E6 A8 h
  981. LDX #HIGH(Music_State_Play)" A  k& U# w- K. L
  982. JSR PPU_Data
    9 k9 V& f( W; i8 ~
  983. RTS1 j) m, ?, `) S1 }1 u3 U( f

  984. 8 S* s% S8 A# Z0 |& u, @" e
  985. .IF SOUND_BAR_SHOW_ENABLE
    ! ?1 T* V8 \: y2 n
  986. ;==============================1 a) ~* \" l. W6 W( \
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ; |! c! E$ F/ t, M
  988. LDY #LOW(Sound_Bar_Text_Data)
    + ]! s, X& z7 @
  989. LDX #HIGH(Sound_Bar_Text_Data): K: R$ C- q, Z0 X6 K$ \+ ^! F
  990. JSR PPU_Data
    # l8 g8 h% V0 B- @& e- h9 v
  991. RTS
    0 ~. @# H( {  X; i* m5 N
  992. & m! T+ K+ h6 R) V7 P, @
  993. .ENDIF
    6 S' X8 ^1 t3 O1 g

  994. ' s4 Y% V2 P7 a, o( a
  995. ;==============================2 L/ v: `6 q, ?, J
  996. Set_NameTable_Attributes;设置命名表属性
    ' ~( u) I! v" V7 D6 v
  997. LDA PPU_STATUS
    4 c( f2 c! W1 Y2 t% q
  998. LDA #$23
    8 I+ m' T' n* }$ }
  999. STA PPU_ADDRESS
    9 Q$ Y& m/ ?- V" z1 {/ r7 M
  1000. LDA #$C0
    - S$ p$ k& _+ m2 [: S
  1001. STA PPU_ADDRESS- r1 }0 P2 {2 |, G
  1002. LDX #$00
    + j$ C: i% p9 l8 A, _! _4 B) ]
  1003. Set_NameTable_Attributes_Write
    1 Y8 C0 m8 C1 H0 x! F) v: z7 ?
  1004. LDA Palette_Attributes,X; Y$ q, w8 S; A; U) J7 w( G
  1005. STA PPU_DATA- ~# V# {! c/ Q6 m
  1006. INX
    / P* M; I2 q2 [9 ]; N
  1007. CPX #$402 T$ f1 v: o) |0 g3 W
  1008. BCC Set_NameTable_Attributes_Write; t1 o3 A$ f! @' u  m" N2 [
  1009. RTS
    ; h8 }0 F2 ?1 O3 K. U  Y

  1010. ! b, N( D1 Z: F( U: c* `
  1011. ;==============================
    - l, i1 x6 j, `+ Z$ R* ?0 V
  1012. Set_Palette_Color;设置调色板数据& N! s2 A& a$ m* i$ P
  1013. LDA PPU_STATUS
    8 ~; G3 @9 M4 P# {8 n  U
  1014. LDA #$3F
    % @& |5 k8 m. }' C$ w+ s3 m
  1015. STA PPU_ADDRESS
    . X8 _9 J; o2 {& z" z
  1016. LDA #$009 M  x$ T3 S" N& P( l9 ~4 a
  1017. STA PPU_ADDRESS5 t  A1 a9 d0 l; d* E. I$ R
  1018. LDX #$00
    : [0 y% r% p) t7 b" D4 x* O
  1019. Set_Palette_Color_Write1 W5 o9 S3 O, J6 f7 j4 B
  1020. LDA Palette_Data,X) o# J) d( _% ~9 j/ n3 [
  1021. STA PPU_DATA
    $ H# u1 U( h9 a3 p* \- N
  1022. INX1 m9 ]* S& j) l  I2 s
  1023. CPX #$20
    4 e7 W! L: O' D: X* w
  1024. BCC Set_Palette_Color_Write6 P' t( Z* D5 U
  1025. RTS* u6 m2 y, u3 c1 I& q$ ^
  1026. 0 `) k3 \' a& a4 q
  1027. ;==============================
    ; l8 b5 w. Z* C; b$ o8 n, c
  1028. Init_Palette_Addr;初始化调色板数据, b' y# [# U7 a7 K3 G4 G1 u$ Z
  1029. LDX #$00% S2 t, w  L6 G) L) j+ R$ z
  1030. Init_Palette_Addr_Write
    9 ~  {) D* \- c3 a( r
  1031. LDA Palette_Data,X
    1 v: P- W4 N: ?5 h7 a" w
  1032. STA Palette_Addr,X
    ) Y' s$ [+ g; ^$ O
  1033. INX
    2 }6 G4 G  p0 T. s5 @# ^$ v
  1034. CPX #$20
    # N. A: t8 f* h2 a0 Q. a" ~
  1035. BCC Init_Palette_Addr_Write3 D) a1 X% t5 K: [
  1036. RTS
    6 a+ w& y; O- r, M% C

  1037. : Z) |; H: c& M) [- @
  1038. ;==============================+ F; s8 f3 m* |4 C8 w
  1039. Update_Palette_Color;更新调色板颜色
    * K1 z' e' t6 Y$ P! V! }0 y- B
  1040. LDA Show_Track_Name
    : t# V/ ?* ^( v* O" v
  1041. BNE Update_Palette_Color_End# V: O6 h& p9 u' F/ t) ]: G& X5 B
  1042. LDA Palette_Update_Flag
    + j" v" s# `  Z
  1043. BEQ Update_Palette_Color_End$ u1 n. A( L5 |7 o1 G1 b% ]
  1044. LDA #$3F
      R. `$ s" q9 o) w
  1045. STA PPU_ADDRESS5 {# v* x; ?$ C: B
  1046. LDA #$00
    8 Q- U* P" p( C- V8 n& @' V
  1047. STA PPU_ADDRESS
    8 R, b6 Z' z, _$ ]* z9 R
  1048. LDX #$00
    4 a2 N2 a, \( [/ Z3 S' p( n
  1049. Update_Palette_Color_Write- Y% l' |1 W1 {% h) d) x
  1050. LDA Palette_Addr,X
    ! i- d" E' p2 e  m) b
  1051. STA PPU_DATA3 a* t' H3 S+ k
  1052. INX
    + g  {6 |/ y* I( ?& d
  1053. CPX #$20) v5 g% a: n" e; v
  1054. BCC Update_Palette_Color_Write7 j  Y+ L! {$ u6 z/ I; l4 j0 s: a
  1055. LDA #$00
    4 _) W/ P9 W2 {) X/ l0 j# [4 s0 I
  1056. STA Palette_Update_Flag" D- H1 U6 M- L& P2 X
  1057. Update_Palette_Color_End
    1 x9 |6 Q5 ^- V9 F/ ]) F& \
  1058. RTS
    ' ]( k4 j0 L8 Y3 @# s/ Y
  1059. + y4 R5 K+ f; y
  1060. ;==============================
    % |. k$ z7 q. c/ B* d; j: o
  1061. Update_Palette_Data;更新调色板数据
    " [+ s: P& g' Q
  1062. LDA Show_Track_Name
    / f4 j4 O$ P7 f& g( j4 c( g
  1063. BNE Update_Palette_Data_End
    4 t# U0 d5 G. P$ e. X
  1064. LDA Music_State
    ) \- _. M2 y" _  W
  1065. BNE Update_Palette_Data_End8 M6 I& p9 W; e0 k, |1 j) [
  1066. Update_Palette_Data_Check; B( O# G, M7 t/ H+ R7 J, F7 w5 i
  1067. LDA Palette_Wait_Cnt5 E9 |2 V3 U8 i3 G& j3 q7 G
  1068. BPL Update_Palette_Data_Check_Over
    ' q0 E! J, l0 J% U3 c
  1069. LDA #Palette_Update_Interval& w* \9 k; j: B9 u! R( M
  1070. STA Palette_Wait_Cnt* D% O4 g  J& U" ?
  1071. Update_Palette_Data_Check_Over
    3 Q9 i. O  J$ L% _2 ^& D' I* ^
  1072. DEC Palette_Wait_Cnt( a6 S' i( Q" t5 L
  1073. BNE Update_Palette_Data_End
    ; S- D+ g  Y+ o
  1074. INC Palette_Update_Flag
    5 l( Z1 X. m8 ?& G: L
  1075. LDA #Palette_Update_Interval* w* s, ~% s7 g/ b/ {
  1076. STA Palette_Wait_Cnt2 S, o: z7 A/ v
  1077. LDA Palette_Update_Addr
    ( D+ y, g0 B2 I& G- }
  1078. CMP #Palette_Update_Max) Z' O9 e% [( g' c
  1079. BNE Update_Palette_Data_Set
    1 A' C: h2 u! \" g
  1080. LDA #Palette_Update_Min - 1
    3 W  ]; X( z1 A4 @4 ~; y" A: q. D
  1081. STA Palette_Update_Addr
    & G9 q6 l6 y! p
  1082. Update_Palette_Data_Set
    & s3 Y7 f8 p4 z* i$ S) u
  1083. INC Palette_Update_Addr
    * X1 J& }- H2 S; R
  1084. Update_Palette_Data_End
    4 R5 D5 |+ L, u9 G
  1085. RTS
    4 ^/ O% j! F1 p

  1086. - f3 ~: R' {* n& O
  1087. ;==============================1 }5 t' C% I: N; k
  1088. Show_Music_Text;显示静态文本- A6 G* D! o9 w" h5 {
  1089. LDX #$00: ^0 s' Q& k5 s( |: v. Q( W. P2 y
  1090. Show_Music_Text_Set
    5 w: r  i' `( Y3 Y& m# C8 ?0 u
  1091. LDA Static_Text_Data,X
    , J, }  l! i4 P
  1092. STA Data_L
    1 @/ ?! O6 f% T' X
  1093. INX
    6 g- w' b, ?7 d6 B5 D
  1094. LDA Static_Text_Data,X  A; Z, ]+ H7 R  @5 g8 q) s; M
  1095. STA Data_H$ O) Y5 G7 y( V* r& f* P- c
  1096. INX( I* c0 B- ~4 j0 `) j
  1097. LDY #$00
    % A+ t  U2 J/ Q5 S( X2 M2 F6 x
  1098. LDA [Data_L],Y6 i' G/ n5 P  V# ^/ m, {+ [5 h
  1099. STA Data_Cnt
    2 w% ]. p+ b  a# Q% Z, L" W
  1100. DEX$ x! W/ X  l4 v9 t4 A$ Q
  1101. DEX
    ( K6 ^; Q$ _" V8 l
  1102. LDA Static_Text_Pos,X
    ; E( K  X( U9 y9 m' [9 y- [
  1103. STA PPU_ADDRESS
      C7 }# W4 o# M/ f. G$ a
  1104. INX
    / C9 p  W6 m1 z" ~+ _7 V& y0 v
  1105. LDA #$20
    ! d. N& e  e+ v8 h9 ]9 E# ~
  1106. SEC
    - W3 [2 Y% u" S+ e$ y( ^, g
  1107. SBC Data_Cnt
    % p. L) v6 f5 q! m
  1108. LSR A
    7 @& N+ g! ~3 s, J% J9 F
  1109. STA Data_Buf' p3 _% ~# t) j# M) v9 j7 j
  1110. LDA Static_Text_Pos,X& J/ ~+ s/ @0 Z' K8 ?2 @: N1 P
  1111. AND #$E0
    - C' b6 g9 n1 S$ [
  1112. CLC  Q, w+ U$ ^+ y  Y7 A* s' r
  1113. ADC Data_Buf1 i. @/ o1 J3 U3 b
  1114. STA PPU_ADDRESS
    & d5 X# ?7 n4 L
  1115. INX
      p2 i2 W+ }5 O, H$ M) Z
  1116. Show_Music_Text_Set_Write  F' i# G: t3 D2 R% I
  1117. INY
    ( \/ D: B! c2 V# ~
  1118. LDA [Data_L],Y4 A# d& ~- \9 Y5 u! j9 R% H
  1119. STA PPU_DATA; E" x' W2 M+ t
  1120. DEC Data_Cnt; _8 z$ _% h& ?2 z
  1121. BNE Show_Music_Text_Set_Write
    % m9 U) J  a: X, p8 B, P- H3 C; d
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    ; D0 |0 Y# E/ A' N: r
  1123. BCC Show_Music_Text_Set* h  `1 [  ?3 B
  1124. RTS, z" ?# u. y# r

  1125. 9 d+ H( w  T$ w/ y: x5 j
  1126. ;==============================7 U# d8 v0 r" u8 f+ m2 c1 S$ b& v
  1127. .IF Track_Name_Pos;显示曲目信息' h, ~$ e1 M( @8 V( ]& H
  1128. Show_Track_Info3 E5 U; ~: ~0 D* b" Y
  1129. INC Show_Track_Name0 o, H; A3 P. }4 x6 ?
  1130. Show_Track_Info_Clear3 ^( O1 H' i) f( ?" t  p6 }/ Q( v
  1131. LDX PPU_Cur. X' O6 S  a* A" g1 |4 a, Y
  1132. LDA #Mode_Clear
    0 {. t. c7 m8 R. C; G1 H
  1133. STA PPU_Addr,X# T5 V# K& t! h* _6 @" J
  1134. INX4 N- {8 n/ k1 t7 i

  1135. 4 x7 T( [* g4 K" u' d+ [7 s! y. S
  1136. LDA Music_Last
    , `0 l# `& @: \9 H1 A
  1137. JSR Show_Get_Track_Name_Center_Pos
      d9 X5 x9 J/ w9 c; c7 f" F- g& p- y0 Z; s
  1138. Show_Track_Info_Write_Cur+ O7 p: l" c& Q3 l' g( u& Y9 f7 }
  1139. LDA #Mode_CntLine
    : q- v* s0 c2 T+ Z
  1140. STA PPU_Addr,X# z4 z/ r6 l1 V) c6 a' E
  1141. INX
    ) j* V/ r$ N9 s1 e- P6 Q  A
  1142. " a! d, `, w! \, p
  1143. LDA Music_Cur
    0 P& l" _' {6 o7 V
  1144. JSR Show_Get_Track_Name_Center_Pos1 r. M2 N7 j2 Q0 o- W- r
  1145.   v: m7 m- a/ t7 w) N$ o& V
  1146. Show_Track_Info_Write_Cur_Data
      v5 o! _9 a- C, m" u* s" J* G+ h
  1147. INY
    6 J3 e  N) a! |2 q: X
  1148. LDA [Data_L],Y* r$ Z( N1 p0 z! o1 m
  1149. STA PPU_Addr,X
    . i0 k* u. _' \6 x' b9 D
  1150. INX
    ' g/ Z, E, o3 {+ E7 v
  1151. DEC Data_Cnt
    ' T  l3 s6 j! X
  1152. BNE Show_Track_Info_Write_Cur_Data
    : A1 C: @0 B' \* t
  1153. Show_Track_Info_End
    4 K! }; s* i# `. z6 L% Y; B& W& n+ M
  1154. STX PPU_Cur
    - Z; E+ A) ]7 ^' I, E- q
  1155. RTS
    8 H( i* L2 u$ e5 I: s9 A3 ]
  1156. 3 r  [8 f& d1 F9 c# g6 ~* f
  1157. ;==============================
    $ V8 h4 s! W: `. ^" ^) U# R
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置2 S& G. Q# F$ D# G8 [) t( ?: y
  1159. ASL A
    ! N# H4 h/ P3 x: t$ ?! R$ i
  1160. TAY
    - ?2 U4 g7 u5 M: M$ o* a* o
  1161. LDA Track_Name_Addr,Y) C$ }9 k& p& }* E6 j
  1162. STA Data_L& I" ]/ X7 R& {9 u& s
  1163. INY
    1 S; J5 i1 q5 b  i% T
  1164. LDA Track_Name_Addr,Y
    & V+ x% G6 q, I9 Q9 `7 [' b
  1165. STA Data_H
    . g7 O. ^" l) Y/ X  q4 v7 V# ^
  1166. LDY #$00, h7 \& H/ x. r
  1167. LDA [Data_L],Y
    1 T! V0 b+ i+ E$ q1 h* E5 [
  1168. STA Data_Cnt
    ( B) N1 m# o' P% `8 l' k4 B% @9 M+ d
  1169. LDA #$20* w: i# ?. w/ i) W. A
  1170. SEC) J) C3 Q; b- `/ b) a  U
  1171. SBC Data_Cnt( \  |8 D: A7 M
  1172. LSR A. I. A. Q1 R0 B* v2 W9 o6 }0 S
  1173. STA Data_Buf
    2 \' {: k( Q' r& A% k! l" l- s
  1174. LDA #HIGH(Track_Name_Pos)
    4 R( k7 B- u3 H
  1175. STA PPU_Addr,X
    1 @! J3 L5 a, c7 d. P+ {
  1176. INX8 @6 S$ ^) x& @8 V/ Z
  1177. LDA #LOW(Track_Name_Pos)
    / Z7 j) u0 T# J# s
  1178. AND #$E0
    + t# k3 g. \0 U( T
  1179. CLC( f) P' E3 U0 L
  1180. ADC Data_Buf
    $ G% R" m0 i" ?. I# K: Z# m- L; O
  1181. STA PPU_Addr,X
    2 {: J+ ~- V9 w
  1182. INX/ z" A" ~2 g& T% C3 c. J- Z# @3 G
  1183. LDA Data_Cnt4 t& p. M6 s' V, O. z' V) i
  1184. STA PPU_Addr,X
    6 S) B1 z( K  m) x$ T% y
  1185. INX
    / s' a- e" @7 z5 e6 m2 c* q
  1186. Show_Get_Pos_Center_End* F$ x  V  G% H) u  Q
  1187. RTS9 y$ N& ~% V) C2 a8 ^
  1188. .ENDIF% C9 A2 ?& V& X" V1 ]

  1189. + F' T, l, Z+ {( K% S" B
  1190. ;------------------------------: A5 i3 ]+ T/ C6 I. z4 B2 k
  1191. ;命名表数据9 K- J7 ?& `" X1 m3 X# y, P
  1192. Palette_Attributes7 K2 E, S3 {% M6 I4 J* e  p$ Z
  1193. .IF SOUND_BAR_SHOW_ENABLE
    * H" Q5 ~  u' d% D1 h# y2 f1 ?
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$005 e  ^. x# C" v9 g1 u3 p
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA8 G( S8 d$ _; n! x0 o9 D+ Z
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    3 H6 G+ |, ?& M7 i! I' A
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    6 ?2 T# c; B  B* e# p5 G' ^
  1198. .ELSE( J$ c6 x  ~: \5 s# g  @+ U* R4 ~2 p
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00' g/ O0 ]0 Q7 m" |" a
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF2 `2 A+ w5 D/ _) D8 e
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55. K( J: Z3 W; B6 q: R" h. W
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55" W3 j% g! s, V! v
  1203. .ENDIF- b) p& i" p7 D. W2 N, w
  1204. . `/ T2 M; Q; f# c; f, N
  1205. ;------------------------------+ X1 Z& ?' D- w8 X. k0 Z
  1206. ;调色板数据) z4 v0 g- K$ i  G
  1207. Palette_Data+ z* l# {9 J( r+ M
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F8 A3 M- v9 n/ L* e) P& [1 |: p! N
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F& ~. Q+ ^: n) t

  1210. 7 T3 V" ~6 |/ M" n& Q6 p* k
  1211. ;------------------------------
    ( ~, y8 q7 q8 U; {
  1212. Static_Text_Data. q, c& H0 h( T# l2 Z
  1213. .WORD Static_Text_Title_Data
    7 l4 b' t3 t( C( g; O4 J' r$ k( T
  1214. .WORD Static_Text_Author_Data
    % j- R/ t; m+ f/ I) W
  1215. .WORD Static_Text_Date_Data
    ) W) L# K; V5 G7 @, m+ v
  1216. Static_Text_Data_End5 G* m; E" {2 h! P' l

  1217. 7 j; N  ^8 Q4 L- F- d
  1218. ;------------------------------& N1 D) k  }7 t1 v  \0 [
  1219. Static_Text_Pos' w4 x5 w6 Z3 J2 d3 p
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)# Q% T, F. l9 g  `/ n
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)) g. x% I  K* Z  b2 v2 G3 v
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    # V2 k. s9 e6 o: C, M5 Q
  1223. Static_Text_Pos_End: J5 w( p8 n! D
  1224. ( ~! V; x0 ^/ C/ A8 D$ Q; y2 b% Q& u( S
  1225. ;------------------------------6 T, I% C1 ~2 K6 x! x
  1226. Music_State_Stop* Y5 a+ w) i& ^& S
  1227. .IF SOUND_BAR_SHOW_ENABLE, J7 d% ~% a' X4 M
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    9 C6 t/ _6 b& D3 S
  1229. ELSE
    / i! P5 ?: M& y, E) h1 q
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00! `9 G) A) ~+ H$ F7 G" C  r4 B! p4 ^
  1231. .ENDIF4 G6 W$ T8 M" r& {. ~# l4 O1 t0 {
  1232. Music_State_Play$ F6 Q; H. }( r% r
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    6 q8 }  q& l8 g4 E8 e7 Z

  1234. ; ~" u) ^/ w" M3 y/ P# u2 q
  1235. ;------------------------------) W1 r+ d) k* ^3 d& M: @, u% o$ A) E
  1236. Sound_Bar_Text_Data;声音类型文本
    8 a/ C4 k! Y, w: N
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)% S% S! _  F1 }: K! a$ f1 t
  1238. .DB "SQ1-",$FF
    / J4 S9 r+ @" h9 f8 T5 A
  1239. .DB $FE,"SQ2-",$FF' }. t* O/ Y1 [* ^
  1240. .DB $FE,"TRI-",$FF
    7 W/ f1 m! d; u3 g1 c0 }0 Y6 R2 M
  1241. .DB $FE,"NOI-",$FF
    ( m4 D+ n5 v2 j3 \; H7 I0 k
  1242. .DB $FE,"DMC-",$FF,$00
    7 d7 d0 K5 [# A! L
  1243. # l% k. A" Y' {% {
  1244. .IF Track_Name_Pos6 J9 M$ E+ h' ~6 b) X0 Y
  1245. ;------------------------------- a, I) C6 @" {. K, O8 \7 `+ q5 K
  1246. Track_Name_Addr;曲目名地址索引
    , X% {, I: O9 W, B/ a0 F4 I
  1247. .WORD Trackr_01: v4 i9 l& E* }* |( E
  1248. .WORD Trackr_02
    6 |2 K6 b9 V  d: {
  1249. .WORD Trackr_03
    + r1 W+ y2 O% i8 H4 k. N9 q! A! @
  1250. .WORD Trackr_04
    * _6 C6 s, R; K. A) ^
  1251. .WORD Trackr_05
    7 c7 \+ Z: @) z+ X4 F
  1252. .WORD Trackr_062 m/ i9 ?% u5 `5 Z( N' `
  1253. .WORD Trackr_07. Q5 B, S" S: B& `, e  \4 {: w
  1254. .WORD Trackr_08
      D5 U/ Z. B# |' ^8 J% l0 i5 S
  1255. .WORD Trackr_09
    8 X7 e# P3 \9 P# D) W
  1256. .WORD Trackr_10
    ; R0 k9 d2 [" H6 K& P' o
  1257. .WORD Trackr_110 r) F! L! N" {) x2 q
  1258. .WORD Trackr_12! g$ V2 I, X* k9 G0 q# }
  1259. .WORD Trackr_13% f5 R1 j1 f. x' j- q# Q# J/ i
  1260. .WORD Trackr_144 @- o" Y' P6 c/ I' e5 ]
  1261. .WORD Trackr_15  p1 ^: E# }( }4 }: |
  1262. .WORD Trackr_167 v3 x- x% {. N2 i; l: Y! _
  1263. .WORD Trackr_17$ l0 w1 p1 s; V; x6 l1 X) n
  1264. .WORD Trackr_18$ i/ i; ]4 H0 u7 n- ?
  1265. .WORD Trackr_19+ O) h" ^3 C/ X% t+ _5 i4 ~) o
  1266. .WORD Trackr_20' s0 [7 R* T0 \
  1267. .WORD Trackr_21
    . i3 V5 o5 z; z1 k2 U# o$ r
  1268. .WORD Trackr_223 y- i& V$ e( c, H
  1269. .WORD Trackr_23
    , |8 {' o: r1 d; Y4 E9 }
  1270. .WORD Trackr_24! \7 X3 g5 d$ ~3 o
  1271. .WORD Trackr_259 I1 t: A# \, a3 O
  1272. .WORD Trackr_269 T; g4 r. B# E4 y6 G6 L, n( g
  1273. .WORD Trackr_278 T4 ^- j8 c; s$ {; y
  1274. .WORD Trackr_285 W" e) ~5 _% s% H9 `
  1275. .WORD Trackr_29
    + k# |$ h: e- O1 O  w2 P
  1276. .WORD Trackr_307 P3 v; h6 y0 r4 a: Z) R4 Y) {
  1277. .WORD Trackr_31
    5 Y8 G) k- ~9 |7 v3 K- N7 M# ?
  1278. .WORD Trackr_320 ]6 ^5 m9 i5 \+ l, q2 f6 m
  1279. .WORD Trackr_33
    4 o; V1 g" @6 C6 n
  1280. .WORD Trackr_343 @+ Y) R: g% s; M. N
  1281. .WORD Trackr_35$ R: v( E7 y/ R! s" T
  1282. .WORD Trackr_36
    ' `9 ?3 C; [" k4 G
  1283. .WORD Trackr_37& J+ r& k& O+ Z8 F% X# k
  1284. .WORD Trackr_38$ h+ q3 t. [1 x
  1285. .WORD Trackr_395 r% p  K3 @1 ?) p# ]7 i* N
  1286. : d3 `8 v4 ?; s: ]6 M
  1287. ;------------------------------
    1 ?9 `3 M9 n9 C& i8 I% t# }
  1288. Trackr_Name_Data. G. d; Q& f* N* p( p
  1289. Trackr_01 .DB $05,"BGM 1") ]: K0 B# @4 U+ q" D
  1290. Trackr_02 .DB $05,"BGM 2"7 @+ D0 I( F4 e/ `
  1291. Trackr_03 .DB $05,"BGM 3") `2 X6 `5 ~$ B- _8 Y
  1292. Trackr_04 .DB $05,"BGM 4"- y6 K( E- A8 G
  1293. Trackr_05 .DB $05,"BGM 5"
    ) @$ O1 h) P" ^9 s$ u* f7 K
  1294. Trackr_06 .DB $05,"BGM 6"
    6 Y7 J1 m7 l( @  A& v+ Z- D0 S( H
  1295. Trackr_07 .DB $05,"BGM 7"
    9 p8 {7 c* W+ P* A/ c) D0 q- c
  1296. Trackr_08 .DB $05,"GREAT". |+ @3 d# P, |: B# ~
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ! m  T! a# Z2 {. c3 b
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    9 x+ p% W# V: B5 k% e1 L2 S
  1299. Trackr_11 .DB $07,"P CLEAR"2 G6 X, Z" r9 K6 g: P7 D4 d* t' e
  1300. Trackr_12 .DB $07,"A CLEAR"8 x; W6 R4 r5 o( K. J4 k, _- o
  1301. Trackr_13 .DB $04,"OVER"& T3 i( G! H( M+ m4 w
  1302. Trackr_14 .DB $06,"ENDING"
    - D9 P# S8 j. F2 r) l% X3 u( p
  1303. Trackr_15 .DB $04,"SUTA") c! w! s9 O: p* R6 V. D# l! }) A
  1304. Trackr_16 .DB $07,"THUNDER"
    : O' i$ r# q1 u$ }7 k3 `
  1305. Trackr_17 .DB $04,"SHOT"
    5 x% T! ?$ i* p+ D
  1306. Trackr_18 .DB $05,"LASER"$ K7 P% L5 W  Y, Q" L0 B
  1307. Trackr_19 .DB $06,"SPREAD"2 Q- L+ p+ d! _5 w8 x$ t$ X3 n
  1308. Trackr_20 .DB $04,"FIRE"
    # t3 ]& z- |: J+ z5 z$ L- |
  1309. Trackr_21 .DB $06,"B SHOT"9 ~* W) M, |; w' x8 t( q8 a. ~6 J
  1310. Trackr_22 .DB $08,"T DAMEGE"
    # J* t; s& b% n
  1311. Trackr_23 .DB $07,"HARETSU"+ S4 ?6 l0 h5 f3 \# r2 m, H
  1312. Trackr_24 .DB $05,"T OUT"
    , L- `4 e' B- T: U
  1313. Trackr_25 .DB $05,"Z OUT"0 W3 L  c+ Y: L3 `
  1314. Trackr_26 .DB $05,"A OUT"4 ^; X! e3 }% s$ T
  1315. Trackr_27 .DB $04,"ROLL"
    5 R/ ]3 W# V$ j- R9 B3 P
  1316. Trackr_28 .DB $06,"APPEAR"$ ^0 n' M9 U0 D
  1317. Trackr_29 .DB $05,"POWER"4 g  o! G, Q+ d- g; W& t: z5 b6 t
  1318. Trackr_30 .DB $07,"BOKK BK"  J3 W! W: q5 i$ g6 Z) i& C
  1319. Trackr_31 .DB $08,"BAKUHA 1"' J; {( J7 ?/ a3 q7 l
  1320. Trackr_32 .DB $08,"BAKUHA 2"9 Z! a8 {6 l" W9 R9 _, a
  1321. Trackr_33 .DB $05,"ARUKU"
    2 o: J0 X4 ?1 k/ W/ r# ^5 M
  1322. Trackr_34 .DB $06,"JIWARE"
    3 V1 d$ \- z& N, I9 X
  1323. Trackr_35 .DB $05,"SILEN"# c2 C" b0 m3 ~) J- B
  1324. Trackr_36 .DB $05,"P 1UP"0 ?# y$ u8 e0 ~" I
  1325. Trackr_37 .DB $05,"P OUT"
    % z) H- `% i* [# m
  1326. Trackr_38 .DB $05,"B OUT"
    + K" f9 Z& f# @2 J$ q6 j2 q: k' [
  1327. Trackr_39 .DB $05,"PAUSE"
    0 @# ?. Y9 T1 B0 {5 [

  1328. * N) j5 W) M8 s; g5 T1 t  W
  1329. .ENDIF+ G/ t' o) b( ^5 }  M
  1330. . M/ T: M) X% H  F! U4 q
  1331. ;------------------------------
    * }- Q* ]0 ~! ~, |: W4 j: \0 F- H
  1332. Static_Text_Title_Data;静态文本数据
    ) ]/ {  I# r; H( L
  1333. .DB 125 a7 J# c& z2 e/ _
  1334. .DB "SUPER CONTRA"
    ( |+ R8 I- f  j
  1335. Static_Text_Author_Data
    ) x* I/ s: t( [. ?0 J
  1336. .DB 23' D# ^* \$ J- `8 y- u
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    1 a: z2 Z3 u/ q& |0 o. j3 j8 {
  1338. Static_Text_Date_Data
    ' J' Q, S. o5 Y4 q
  1339. .DB 10
    6 c9 x2 I- b$ D$ M0 N! `
  1340. .DB "2023.07.11"
    + E( W# r6 R8 y; w* g
  1341. 7 Z+ x, B/ p8 Y2 H( a; i- ~
  1342. .BANK RESET_BANK & BANK_DATA_MASK4 M) M( |+ {0 N2 g5 c
  1343. .ORG RESET_ADDR
    ! r7 s: e$ _5 V. {- a) e
  1344. : |5 j1 U# R9 d' s! y. O/ T$ b

  1345. ' `7 p$ Z  l- |1 q8 v
  1346. ;==================================================
    ( d9 L/ Z5 ?8 h0 D$ J7 m3 M
  1347. ;切到主程序bank; C- C4 H. M9 o! ^% |
  1348. SwitchMainBank
    7 t- D3 y* V" \* _
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    + s2 j7 G* k# c* l- {' _, ?
  1350. JSR SwitchBank8000
    1 [- @  R$ j/ N$ `# P* Q
  1351. RTS
    ) V. S8 z8 }4 e: K8 U! Q

  1352. 8 l! M; i5 K* F$ g& i. e3 Y
  1353. ;==================================================! |" p5 Y9 n: u% E
  1354. SwitchBank8000;切换bank到8000-9FFF
    " L2 |5 F* m2 ~& O! K$ l
  1355. PHA
      ]" T$ s( Z  c4 Z) |; u! V8 A
  1356. LDA #$06
    , d' C5 D: G: |/ K
  1357. STA MMC3_BANK_CTRL
    6 a) Y& X- p  f  O
  1358. PLA
    7 z0 e1 {4 B3 {' ~- E4 C2 d
  1359. STA MMC3_BANK_DATA
    5 `, G4 W1 Q3 y! o2 q1 X
  1360. RTS
    + P  J. k6 T/ y( `+ Z2 C7 T1 o

  1361. 8 N, |, `0 _+ A5 U" f
  1362. ;==================================================1 i2 h) K5 D) y4 p( j4 M
  1363. SwitchBankA000;切换bank到A000-BFFF( x2 G* I# z8 {. r
  1364. PHA
    % k; X) r) B& f, @' d9 x- g3 F) x
  1365. LDA #$078 v2 _! n: w; `9 O* k4 i  u
  1366. STA MMC3_BANK_CTRL
    ( B+ F% T+ t7 p2 g  g
  1367. PLA: u  }5 Z' D; w$ y
  1368. STA MMC3_BANK_DATA
    # Z  `' z1 j& g# n
  1369. RTS
    3 F& H  ^* ^, e0 x

  1370. 0 x- k7 ^" z& a2 \$ g6 L+ s7 T8 c
  1371. ;==================================================7 {0 x/ z4 E& O
  1372. Sund_Bank_Init;音乐bamk初始化9 {9 S+ y# X& ~& S2 v) [( G
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ; v8 J" ~# G* a. y3 j
  1374. STA Music_Bank_8000
    ( t" [* e7 O2 Z0 i' m' u$ _: d% l2 ?
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
      R: ~7 c! g0 j6 Z
  1376. STA Music_Bank_A000
    % G2 k) N- m  G) Y  c& n; ?
  1377. RTS
    1 K. T$ N6 m# h; O6 N; S, K& h
  1378. - U: G  \( e- E6 z. ~! R3 Q$ F3 u
  1379. ;==================================================! \6 g1 L* @; Y; J! w2 a
  1380. Sund_Bank_Set;切换音乐bank
    - t  \; r7 V4 p8 \7 p
  1381. LDA Music_Bank_80009 _6 ?0 }) E2 J* X9 p$ E4 Q3 s
  1382. JSR SwitchBank8000
    $ u* m- y, T$ }3 Y8 ?! ]
  1383. LDA Music_Bank_A000% c/ M6 v7 b# z1 E, m* \
  1384. JSR SwitchBankA000
    & m1 z) k, v2 C# Y& {
  1385. RTS  P# t  ?1 q# B! Z) o
  1386. * E- o& }5 B- H; E
  1387. ;==================================================; D# h- \1 d' v
  1388. Sound_Init;音乐初始化' m# ?) b9 a$ C* d' M6 d
  1389. PHA
    # g) \& P2 U0 N0 S/ l3 `$ ^
  1390. JSR Sund_Bank_Set4 G" U8 Z$ x' g. C5 Q4 l
  1391. PLA
    0 U  y/ \1 G* ~5 @0 V2 u; g2 W
  1392. JSR Music_Init_Addr
    . P7 ]7 ]9 L% v1 [8 K
  1393. JSR SwitchMainBank* p& n6 r3 E! }8 r7 J' E
  1394. ; b! r+ d- E) _
  1395. JSR Music_Bar_ReSet  o9 K. Z+ m) ?
  1396. JSR Time_ReSet) c8 ]# l  r( y  b* @
  1397. LDA #$00
    : g  G4 }" ~- F* Z' ]
  1398. STA Music_State
    3 W& q1 a. @; U# i$ G# z7 h
  1399. JSR Music_Stata_Show/ S( B8 f2 |7 Q
  1400. .IF Track_Name_Pos+ U- [3 f0 i1 x* {/ K
  1401. JSR Show_Track_Info
    5 [) R$ y6 |! z( Q2 D( x2 w, y
  1402. .ENDIF
    ; M% M; f/ q7 s! d
  1403. ' C! U3 a  ]+ p+ @" `+ Z
  1404. RTS
    1 E7 n% |% A9 {; L3 S+ c

  1405. - @) x# ], T0 ^: M) Q- V4 r
  1406. ;==================================================
    2 P. _7 z" c7 S# o  a9 k+ t
  1407. Sound_Play;音乐播放
    * k0 _9 ~4 s) o# a5 W- p
  1408. PHA9 x' x6 a# k2 w9 y! D5 n
  1409. JSR Sund_Bank_Set, G9 v5 j. L' C3 U. F
  1410. PLA
    - D# R9 e' B/ Z- V* U
  1411. LDA Music_State5 Z; o$ k" Q1 u3 N1 i5 h5 {6 x+ D
  1412. BNE Sound_Play_End
      }& B, _  T& R) S" i7 u& E6 N
  1413. JSR Music_Play_Addr( q' w$ z0 K) T* ^$ R9 s( `
  1414. Sound_Play_End
    # n* R2 S2 N! D4 r% F. r' a
  1415. JSR SwitchMainBank: Y  F) G2 x% ]# U, V  Y% g0 T
  1416. RTS
    & ~5 r% q. [1 V$ C: \/ M2 ~. x, v
  1417. ! }$ L) T) e3 Z
  1418. ;==================================================: d3 a3 N+ t- u4 g; X
  1419. .IF Music_Reset_Addr5 Q8 v; P; h) D/ A
  1420. Sound_Reset;音乐重设(如果有的话)' `3 G5 @; Z6 T$ k) @) s1 L
  1421. JSR Sund_Bank_Set; |" u! G( l, J3 f* G5 x3 h
  1422. JSR Music_Reset_Addr
    + ?' p/ b! M- e9 J0 |+ ^! I+ G
  1423. JSR SwitchMainBank0 ?! K' G6 _; m) x% r
  1424. RTS
    : p! C9 c0 }$ U+ w  C, f' A
  1425. .ENDIF3 p! U, R, b. [4 F
  1426. 6 n: E& s+ J# k' Z( w
  1427. ;==================================================
    * j* F- B" \0 w
  1428. MainLoop;死循环  s  Z- m5 N* Y
  1429. JMP MainLoop
    ' A. ~- h* z! k9 }0 ~8 c

  1430. $ ~" |7 u# u% z* V; x9 n  X. `
  1431. ;==================================================) q! z" t" y& I: L/ h; H; q6 j: l
  1432. NmiProgram;Nmi中断处理' g0 C  K' Y+ s) U
  1433. PHA
    $ ]) J1 Z- H% S$ q5 w' W) q% \
  1434. TXA/ }9 ^2 w: u6 b+ l  i( i
  1435. PHA$ o: Z- s( c! u8 g7 O# r
  1436. TYA4 }. s  s" ?; F; W/ i1 A- T
  1437. PHA
    % C: S$ d- R4 G4 ^- ~- Y
  1438. * h/ x! Z6 p8 F. b# I* r4 ^
  1439. LDA PPU_STATUS
    0 [  b7 |# |0 u. k0 A! @
  1440. LDA #$00
    ' T$ M5 ~# ~4 |1 h9 }
  1441. STA PPU_CTRL
    . q7 U9 [  K! Y2 `% Z, [+ ?

  1442. 0 T% u2 g- I, [5 n* ^
  1443. ;切换主程序bank
    % p6 z; V, Z2 g$ |
  1444. JSR SwitchMainBank
    4 Q1 Y. S1 Q' r* X2 x2 D$ g$ b1 [! R
  1445. & B) E; w# l4 b- T0 \
  1446. ;NMI处理
    * @( o. }! A! R: A0 L1 _: H8 ~
  1447. JSR NmiProgramProcess
    ( X( c+ r6 f" z3 g. I

  1448. ) o; C" k; M. v! m# y
  1449. Nmi_Proc_End( u7 E: C1 y* L& W& b/ I0 w
  1450. PLA8 Z) o0 l5 Q3 v8 H" v* h) k! M7 k1 Q" j
  1451. TAY
    ! x% ^$ [) ^2 H4 g( j+ F
  1452. PLA8 U# C2 [6 E' e8 g- |
  1453. TAX
    ' H! l( S8 |, U( t1 n, I. J6 j5 b
  1454. PLA
    & g7 T% j6 n- e$ M4 q- |6 U5 x* _
  1455. / G, B. w. T3 v& `& q& h( z) m1 y6 F- o
  1456. RTI6 T  o$ \1 @+ }; t5 [9 B# U, t6 {2 [

  1457. $ h  z5 B+ T& t: D9 ~6 N
  1458. ;==================================================/ s4 \, i  N, |
  1459. ResetProgram;重置中断处理
    4 P5 H2 ~7 P( B1 m: ^) g
  1460. SEI* {: W8 m9 B/ T
  1461. CLD
    9 x" D5 r" a2 f& B; i
  1462. LDA #$001 l" v4 G( i* ~# u
  1463. STA PPU_CTRL) w% P! t- Z. w' n
  1464. STA PPU_MASK# S2 C. ]+ T* K

  1465. 2 s# F, `' P" e. O  a
  1466. JSR SwitchMainBank
    ( a' h7 I1 @. T. v6 ?3 M
  1467. JMP ProgramBegin
    ( v3 r7 E" j4 e

  1468. ) }7 A2 x- A' i/ O0 d  f! `' |
  1469. ;==================================================( w6 ?- ?. B. r* P* G* K
  1470. IrqProgram;Irq中断处理
    9 x% R" B9 T2 i+ e* V
  1471. RTI% G0 W* q3 W0 `& V& F  k4 X' c
  1472. . A# L* T1 p6 q3 e9 Z9 N3 p3 y
  1473. .IF SOUND_BAR_SHOW_ENABLE* S& B5 q6 @4 o* u
  1474. .ORG $FF80. q/ i4 r! }5 R) e9 z
  1475. STA $4000,X
    3 M* c; m$ I) _4 j6 ~
  1476. STA Sound_Bar + $00,X
    1 H; C& w9 b$ \- k* `: }3 N2 B0 D! s
  1477. RTS
    ) K0 r' v. c" {: Z

  1478. , s2 f1 u1 h+ G0 ]1 B0 f  N& i
  1479. .ORG $FF88
    3 ^" Y/ P2 g$ p2 h6 D
  1480. STA $4000,Y+ Z( |  V* M1 h) w( {
  1481. STA Sound_Bar + $00,Y
      Q/ h7 k( `/ I* y
  1482. RTS
    $ W7 u' d1 E& i

  1483. 8 n  _# o8 U: [; Q2 u* {9 L1 V3 u
  1484. .ORG $FF90
    " F( a) @2 B/ m- x
  1485. STA $4004,X
    6 e  S. x' P* V
  1486. STA Sound_Bar + $04,X
    2 j% ]9 V( z7 y+ H4 a! L
  1487. RTS
    " }  V8 j. H/ H$ x; c; s( K
  1488. - x+ M" o) O9 {5 T0 C$ _6 q4 X' f0 v& I
  1489. .ORG $FF98) b6 C8 r. W4 `6 O' p: ?( H
  1490. STA $4004,Y4 ^3 j: ]8 [$ ]8 q
  1491. STA Sound_Bar + $04,Y7 P$ d4 X* i8 m) y# k# _0 Z) [
  1492. RTS+ {  J3 o9 b! n5 O

  1493. 7 B, i) r4 I! [$ Y8 n! s
  1494. .ORG $FFA0# z4 m2 w8 ]/ W% j
  1495. STA $4008,X7 u2 ~: V# h5 C% K; X# U4 A( |+ _
  1496. STA Sound_Bar + $08,X
    * v( {" h9 L4 g0 {) C0 c- a- t
  1497. RTS
    ( R' B' K* f) W0 y/ z  W, i

  1498. 5 s" l/ B6 D5 f
  1499. .ORG $FFA8# K4 [1 s. V) h/ {& k! A
  1500. STA $4008,Y
    , x! [8 E8 A9 I* \3 j0 J
  1501. STA Sound_Bar + $08,Y
    % T1 J5 E" }3 O- T1 n; z
  1502. RTS4 z2 v$ G) X& W' N+ C
  1503. 0 w4 W5 |( U: `
  1504. .ORG $FFB0
    % e$ ^" g  V! t* x. e2 W8 M# f
  1505. STA $400C,X
    0 C7 Y, P, M: V
  1506. STA Sound_Bar + $0C,X: J% c& V, `4 A
  1507. RTS. w9 M/ E* ~9 ~. F4 \: f3 M) r/ q, c+ o

  1508. , L4 g, t. A! W
  1509. .ORG $FFB8
    9 Y8 R% R* G6 m0 ]$ a
  1510. STA $400C,Y. `1 z4 {- m+ b. l& K, q( T7 M% v
  1511. STA Sound_Bar + $0C,Y
    ) z: e5 x4 E; S' {( f5 l: K
  1512. RTS
    & T5 ?6 E; Q0 g, v. q; L

  1513. 6 u( m" G1 w* x- T1 `  u
  1514. .ORG $FFC0% z9 P0 P, J1 T/ |; }
  1515. STA $4000
    / ?( Y, u9 o$ E0 W! [
  1516. STA Sound_Bar + $004 o2 \' T0 W) S& S: L
  1517. RTS1 P9 |6 `, r8 f' `; @2 P
  1518. / a7 x+ y( {' X2 [
  1519. .ORG $FFC88 E: B3 ]8 i# V+ E/ {% j( x/ Y
  1520. STA $4004. w. @1 g0 ?" v% x% y
  1521. STA Sound_Bar + $04( r1 g) R9 U, s  z$ j5 h2 q
  1522. RTS
    : R+ E" M) b  x5 e2 J" \. r) I

  1523. ( f  ?, l$ V; t
  1524. .ORG $FFD0
    ! y, ]4 V( A% \  e( z
  1525. STA $4008
    & @/ {* J# K8 n% M( P% F
  1526. STA Sound_Bar + $084 e0 y6 Y0 A1 r$ ]0 S4 W
  1527. RTS
    ! F: q3 m& M# Z7 j! B
  1528. + B4 [% u5 }" F1 H) Y' N
  1529. .ORG $FFD8, f7 v) Q5 U0 w
  1530. STA $400C
    $ S+ \" Q: j; c6 A# Y1 S' j
  1531. STA Sound_Bar + $0C
    . u% X; }5 t% `' F' X; B
  1532. RTS
    ( [, n* A5 M& y& D3 j4 K* b

  1533. 6 e' M6 C# d( u8 U7 F: q
  1534. .ENDIF2 z( [( U. S) o$ u

  1535. - ]8 }; v% N1 h) |1 A8 i
  1536. .ORG $FFFA% E7 m: U9 i9 M
  1537. .WORD NmiProgram
    3 Y( y3 S0 f- Q3 A3 @/ d
  1538. .WORD ResetProgram
    2 r- [4 {" d; X9 a6 |& I
  1539. .WORD IrqProgram
复制代码

) b+ }  A" B. Y( w: V% H' N$ _( A. c2 r2 P) h4 @/ X) X
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1389 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3383 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 05:43 , Processed in 1.106445 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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