设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 % X+ `; f' M% g; J6 M. U/ A
# T4 ~- z9 Z7 r4 f3 |4 V* p
1.魂斗罗
6 U) Z+ h( W1 U! z  f2.超级魂斗罗
, h9 K$ I, g. T! U1 x, ~: d9 i3.赤影战士( o5 p8 z' X  P' m9 D! ^
4.忍者龙剑传2( E* \. V" d- k1 o; U& u
) k' U$ }2 r9 c0 r8 U' a

+ b0 F& ]; ~7 g3 \' v9 u, A7 G
% D/ f$ ~8 U7 k4 f6 Y+ r  y, e* J4 _; {' p
源码:1 J9 n. h# L/ c8 J5 Z9 G: O
  1. ;[FC音乐][播放器模板]
    8 {1 {( |$ {; {3 a; j  C
  2. ;FlameCyclone 20230710
    1 c$ H2 C+ q; |
  3. * q* b! V" T  E3 M% ~" N& |
  4. ;文件头
    $ M) y6 J8 l4 V+ R# Y: T
  5. ;======================================================================
    0 m! S8 E% W0 {' V5 i
  6. .INESPRG 4                                              ;16KB PRG 数量% R1 |5 M" m: J( M( r
  7. .INESCHR 0                                               ;8KB CHR 数量
    - m" q2 a* {0 {0 h
  8. .INESMAP 4                                                   ;mapper 4
      w, |+ A# F3 Z
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直" L6 n# g' o4 G6 u
  10. ; ?3 J# E6 M4 ?7 M$ V
  11. ;==================================================
    . [2 c% |. d9 o9 S) I) i$ Y6 S
  12. SOUND_BAR_SHOW_ENABLE       = 1& x* H# J+ s& x3 n+ v. ], \" z
  13. ;==================================================
    - H9 ^: X2 g, z# g; w+ H+ l
  14. BANK_DATA_MASK              = $07
    - k! t+ s3 D( t) i1 ?
  15. ;==================================================0 l+ @& g; n. w
  16. SOUND_DATA_BANK_0           = $005 |0 [) J( B( t6 c6 d
  17. SOUND_DATA_BANK_1           = $01( u4 y9 O! b/ y4 W$ z; y
  18. SOUND_DATA_BANK_2           = $02
    2 }5 o4 i1 h6 x0 q
  19. SOUND_DATA_BANK_C000        = $06" N6 W; ?$ n, ]4 }5 E% |/ ~
  20. " \& @' P5 h* p9 A1 {
  21. ;-------------------------------------------------
    1 r! I9 \5 C) m8 t5 X4 \6 o
  22. CHR_DATA_BANK               = $042 M+ G4 k' ^% R. y+ V& P+ [0 ^. U
  23. CHR_DATA_ADDR               = $A0000 P4 V  @$ S# g  j% w7 H+ N
  24. ;-------------------------------------------------
    ' F: z% h+ t* T" ]
  25. PROGRAM_BANK                = $05
    # {+ j, u0 ^3 q
  26. PROGRAM_ADDR                = $8000
    & D+ v) {( R  f
  27. ;-------------------------------------------------9 s6 `. r0 \0 D: K; B) q9 i1 g9 d6 w
  28. RESET_BANK                  = $07
    % R: B& j5 B' h* n* K
  29. RESET_ADDR                  = $FE008 m6 G& t/ K$ z  Y1 W8 ^% x; b9 @# B
  30. ;==================================================" }5 [$ l; @5 z2 c3 B" [1 N8 a
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址  [7 |3 h7 v3 Y* N
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ! m6 x3 |3 M# l  b/ D
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    4 U8 K" \+ a3 ?2 N; r5 d; P( V
  34. ;==================================================; r# B  v5 `* t! O) Z$ e# E
  35. Music_Song_Total            = 039  ;全部曲目总数
    ( @/ G1 @6 y7 N1 f" V% L+ K2 X8 r
  36. Music_Start_Song            = 007  ;初始播放曲目5 R; m7 f8 s1 v  d
  37. ;==================================================
    ! h2 o; s6 P6 V& S; K$ ?3 H& J9 |& m
  38. 5 p9 S4 K5 j: \7 |
  39. ;==================================================
    8 Z: c& r1 u; i$ E! c- F
  40. Title_Text_Pos      = $210D ;标题文本位置# V# L. k6 n4 }, s- i6 W$ s6 o
  41. Author_Info_Pos     = $2284 ;作者文本位置, f" ^- w7 b" ?# C* S% Z+ e& C$ M7 B
  42. Date_Info_Pos       = $22CB ;日期文本位置7 l* N4 D3 y) B) w! h4 z9 `
  43. ;------------------------------, m. `$ _  v( h- @9 b) Q& I
  44. ;------------------------------0 g; i: y$ H: m* i
  45. .IF SOUND_BAR_SHOW_ENABLE. Y3 o0 l; E- y; L! a+ g( C! i
  46. Play_Index_Pos      = $21B3 ;当前曲目位置; @; P$ A7 N$ o
  47. Play_Time_Pos       = $21F3 ;播放时间位置7 n& g4 p' R1 _. B% s; C
  48. Play_State_Pos      = $2233 ;播放状态位置: W! a4 Y3 ?( Q* n% a
  49. .ELSE
    9 x% x1 {* s( X+ A
  50. " g' X5 B7 z# k6 T! ^
  51. .IF Music_Song_Total > 99" T1 F' ]) [5 N  G! _
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    ; w3 S3 a4 i1 p, `0 y: ^7 a
  53. .ELSE6 _3 @: m8 M3 Q8 z1 T/ Q2 O0 k

  54. 2 K  ~' R) P7 d" M
  55. .IF Music_Song_Total > 9
    % X5 W% D2 ^1 F0 ^0 U# ?
  56. Play_Index_Pos      = $21AD ;当前曲目位置: c! `/ {& E2 m& [: R( O8 X
  57. .ELSE% K6 V9 @, ]) h
  58. Play_Index_Pos      = $21AE ;当前曲目位置& x7 }+ J9 h  m9 b
  59. .ENDIF
    ! z. d7 y5 V+ Q4 [; q
  60. 4 n9 V: ?3 X7 z9 Y+ [
  61. .ENDIF( |9 R$ N/ x; o; ~- E

  62. # A6 V  J* P% x4 N" x3 V
  63. ) X. f; O4 M$ @- M
  64. Play_Time_Pos       = $21EC ;播放时间位置
    4 @2 D# K( i) R, a
  65. Play_State_Pos      = $222C ;播放状态位置
    0 C( p; G1 X& |0 j4 }. \
  66. .ENDIF5 _0 \% {. x  }! p
  67. ;------------------------------3 N, g: M) @: P0 j( E
  68. Track_Name_Pos      = $216B ;曲目文本位置
    " L1 X% Q' d# F" V  i& I2 a1 ?
  69. Sound_Track_Pos     = $21A5 ;声道文本位置; k& O0 r+ p7 k' M" x' ~* E
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ( C! c; T. J: R5 g/ U  u( j
  71. ;==================================================
    9 t# b# G  N( U6 P! G3 V! Z2 C5 I
  72. Scroll_X = $00
    & S' ?  c- {8 J8 m) O! {+ ?3 x
  73. Scroll_Y = $06) w% U1 P6 F1 k9 X) n( J
  74. ;==================================================
    . M4 _! S" Y( c( ~. u
  75. RAM_Cln_1       = $0100
      G, e4 o8 H; J" R
  76. RAM_Cln_1_Size  = $80" v5 N0 J3 \' o
  77. RAM_Cln_2       = $00E0
    0 d9 L" {3 j  ^+ s
  78. RAM_Cln_2_Size  = $20
    , I& y0 W# J- v+ C3 E1 v2 ^( G1 C
  79. RAM_Cln_3       = $00E0. E+ `5 j: b4 `7 O0 Q
  80. RAM_Cln_3_Size  = $20' e: s0 i6 U* w+ b- X; _$ r/ I

  81. 3 v6 m$ H) ?4 \9 R2 D, ^$ _
  82. ;==================================================7 \! ?* T" g- v& F7 y
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器+ \1 L- R3 M3 {" i1 r
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    1 f8 L$ o6 q$ P) N9 Y5 c) W
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    8 `. B1 F9 i8 w" ?4 W
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1: M4 r1 O* {8 E9 P
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1  v+ k# W" y( \$ {0 p
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 - C7 I) |( z. K7 w
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    " a- o; {" O2 x. k
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    $ U/ l; d, |  V/ R
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存! @9 V! m& A: Z9 Y& A
  92. APU_STATUS              =   $4015   ;声音通道切换
    ' Z. y- Y; Z- p" e+ j8 ~
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    , m3 F8 ]% V) C; ?$ v# I
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    ! z' }$ z: t+ A6 B; k: l
  95. ;==================================================/ c3 a3 D: K* y3 g5 t. G
  96. MMC3_BANK_CTRL          =   $8000; O  i/ r: l5 j
  97. MMC3_BANK_DATA          =   $8001
    ) e' U0 s- ^1 Q
  98. MMC3_MIRRORING          =   $A0009 e  C) l  t2 m% Z
  99. MMC3_PRG_RAM_PROTECT    =   $A001; f6 b" m( `. L* d
  100. MMC3_IRQ_LATCH          =   $C000
    0 [( P6 _* p, R& K! {. _  o
  101. MMC3_IRQ_RELOAD         =   $C001
    5 D9 e9 j7 Z; A% O; e
  102. MMC3_IRQ_DISABLE        =   $E000
    5 H( f# ?! m7 [% S' F; P; L
  103. MMC3_IRQ_ENABLE         =   $E001
    - a1 ~7 W, k0 m1 y8 H3 v) F

  104. ' Y3 }1 |/ n! X" ^+ V: U
  105. ;音乐数据块2 _7 h( P) `" i) Q2 H, `

  106. ! y5 L" }5 Z2 ?7 _- {
  107. ;======================================================================4 N2 ~- c% q' E3 X1 L: \
  108. .IF SOUND_BAR_SHOW_ENABLE
    4 y  Y! T; @$ o3 }
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK/ n7 @- d1 S, h2 h! V8 u# L. n- y
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    5 o8 o1 s9 D' y0 M3 s4 m
  111. & W) i0 K$ ?5 A. _# ]) v" {/ a" |
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK9 x- Z0 e  S* |8 t
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    9 Y! h$ l( p& g8 Z5 i
  114. " M# H) x" B% V/ I
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK& n+ v9 I7 f' l4 O+ v- z
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    9 N6 z* K2 @, ~* _
  117. " T2 ~6 ?' P6 C( L6 C8 w& O2 c
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % w; G( s& ~" |9 c" `0 P, _- S
  119. .INCBIN "sound_bank_bar/music_data_3.bank"3 s' n2 P' }: d5 V6 C' u! |

  120. # h; Z1 X" F8 ~; r1 t9 j  p2 T
  121. .ELSE* J' h, m" c3 O8 S. r
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    1 j  |' H9 p) b3 K
  123. .INCBIN "sound_bank/music_data_0.bank"
    1 l8 W$ Z: x" r

  124. ! o% m  h: O: z4 y0 `) |" m
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK8 O' A6 u5 j4 q8 `6 K* M1 ]; ?- L
  126. .INCBIN "sound_bank/music_data_1.bank"$ {  X& R$ D. T: f2 b5 w

  127. : F+ a" I8 w4 _. s% H
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    / w, u4 W0 j2 h4 m% |
  129. .INCBIN "sound_bank/music_data_2.bank"6 k6 `# w% x, V$ d( l
  130. # ?5 ~  B- O  Q1 m* I8 [- v. Z
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
      l/ m- L! E9 r5 W0 Q8 }
  132. .INCBIN "sound_bank/music_data_3.bank"
    6 ]; v' C$ G: b( S' E1 D# i$ E
  133. .ENDIF
    8 O3 l, ~/ q' k/ G" a
  134. & m9 w$ ^. n. }  o7 ~
  135. ;CHR图形数据* |- ]5 h& f  L# I
  136. ;======================================================================
    , f: J" I0 x: S1 X1 {# l1 S. F( N
  137. .BANK CHR_DATA_BANK0 w4 }+ i: P; X# ~8 w! a1 O5 Z
  138. .INCBIN "chr_bank/chr_data.chr"
    + J0 e$ k( h& z. Z( }% v$ i! }: B- P

  139. 4 Q9 o6 ]) d. ~. Z0 z; N( p. n0 P
  140. ;==================================================, h) X( B  i! L0 L  h4 I0 T/ A0 c% E0 a
  141. PPU_Addr        = $0300% ~0 J$ i, l, `$ S$ A
  142. Palette_Addr    = $03C00 i9 O6 e  \" L5 R5 g
  143. Sound_Bar       = PPU_Addr+$E0# O- ?5 P; t( D+ c* q
  144. ;==================================================$ x! J. ^. ]/ W+ v* d
  145. Palette_Update_Addr     = Palette_Addr+$0D: Z6 Y3 I+ n3 n3 b& e  P# S/ P
  146. Palette_Update_Max      = $2C: W  n$ f& g& v' d# l
  147. Palette_Update_Min      = $21: a4 V" q. e" |0 b; `$ C+ Y: @% I4 J5 K
  148. Palette_Update_Interval = 60' G" N# h) G3 Q
  149. ;==================================================
    $ z2 l) j) U7 G/ E
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    8 I5 e  B2 y. }( q
  151. Screen_State        = Sound_Bar_Cnt+$01
    $ `! m/ A" `" q/ L) z: j
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    . a7 ^8 g9 _1 h* l% o2 D: X7 P
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03' f0 e, M$ R; ~, j. ?9 N1 Y
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    - ^% u# d& M) R7 R5 f
  155. ;==================================================% ~6 w; g3 ?# J# J8 Z* V& O
  156. Data_L              = $70
    5 g1 }9 E( K; b  D
  157. Data_H              = Data_L + $013 _0 L, C. J& W- |
  158. Data_Cnt            = Data_L + $02% l, z/ u4 Y5 t' v5 U% [. k
  159. Data_Buf            = Data_L + $03" g( M2 g5 }/ _1 h
  160. Time_Wait_Cnt       = Data_L + $04
    ) p. _, k; Q! Y! m
  161. Palette_Wait_Cnt    = Data_L + $05
    1 F# B+ s% g1 F! [
  162. Palette_Update_Flag = Data_L + $06- O+ ?% a' \! t) r* C) V- E8 r0 @$ v& z
  163. Show_Track_Name     = Data_L + $07
    6 G0 M- |# B: J
  164. ;==================================================0 T2 {* y) b  v6 O
  165. Key_Keep            = Show_Track_Name + 1' @: o& X  t; i3 V1 I. w  H3 d4 I
  166. Key_Once            = Key_Keep+$01+ f; S- M' H3 U$ ]4 M5 f6 f6 S
  167. Key_Kemp            = Key_Keep+$02
    1 `3 M  p, B0 C+ f
  168. Key_Temp            = Key_Keep+$03
    1 ~2 X8 F" G/ @- G4 |7 T: X" o% m0 u
  169. Key_Getv            = Key_Keep+$04: R9 u* k+ U$ ?% A8 n2 d) ?
  170. ;==================================================( \3 y( t# y2 l! t. l
  171. Music_Cur           = Key_Getv+$01
    % q! d3 [8 a; l
  172. Music_Last          = Music_Cur+$013 w- X9 G: S- c* o0 [; j8 j! ]
  173. Music_State         = Music_Cur+$02% K, w( `' j0 j5 u3 ?! c2 ?
  174. ;==================================================
    3 B& T5 O7 c2 H1 ~% D4 `
  175. HEX_Data            = Music_State+$01
    3 {0 k1 t- t& f: w2 a# T, }6 W0 @
  176. DEC_H               = HEX_Data+$01# I; a9 f+ L# A8 D* q
  177. DEC_T               = HEX_Data+$02
    5 C" O1 p8 m' `$ y, M6 C7 t4 _
  178. DEC_L               = HEX_Data+$03
    ) N% r# t" V! X% ?3 y
  179. ;==================================================& h/ F7 r( a( I$ B, `+ A
  180. Time_S              = DEC_L+$01  U: F5 q* I+ }
  181. Time_M              = Time_S+$01
    ( [$ l% Z! E  ?+ b& h; c2 }1 Z& g
  182. Time_H              = Time_S+$02. D, w8 m# H& g" a7 G
  183. Time_Cnt            = Time_S+$037 ^" |$ Z/ E# P" L/ s  n# m. E8 _8 V
  184. 5 A2 p0 r) P$ Z6 R
  185. ;==================================================
    3 u, ?0 k/ {. G% R; d) M+ V
  186. Music_Bank_8000 = Time_Cnt + 1
    4 X* X1 h5 M! Y2 Z: F
  187. Music_Bank_A000 = Music_Bank_8000 + 12 S! I0 q' H! }
  188. ;==================================================
    8 M1 k8 x0 A- y( `4 d" l

  189. , Z* O8 T+ M  }( z4 [
  190. ;======================================================================
    0 t$ D5 r  U4 K" h% x0 E! B
  191. .BANK PROGRAM_BANK5 F% w+ ^1 O: ~7 M0 ^
  192. .ORG PROGRAM_ADDR7 K8 N) v1 L9 h3 `% j

  193. 5 G* J& M% U. y: @# \7 h4 w& B
  194. ;==================================================$ o/ x1 n) M, b
  195. NmiProgramProcess;NMI中断程序处理( Z/ W1 f; r7 g' l* D
  196. ;处理PPU图像
    / B7 G. S/ T7 L; _$ q9 ^1 X
  197. JSR PPU_Proc) R4 d" f( Z+ r4 U7 E5 E7 ]0 E

  198. 1 T) _( {6 T: I) P) {# O% F/ g
  199. ;启用NMI中断
    , W: |. ~% J" W/ ^- k, F
  200. LDA #$80! p3 Z3 Y3 j5 E1 g0 t
  201. STA PPU_CTRL
    3 L- B  a  y' h, i; h3 x8 C2 c! q6 F
  202. 1 @' B% z. v1 C" \" M. n
  203. ;更新调色板& I2 X5 Q7 ]# w/ ?
  204. JSR Update_Palette_Data
    7 J$ E- h$ D5 `3 M% ~' S

  205. 8 T3 Y3 }! H0 E0 f8 a
  206. ;显示时间(缓冲)
    7 v" L+ |, Q% n, a7 N  [/ {
  207. JSR Time_Show; y6 ]4 b0 X7 \& O' {

  208. ! T1 Y6 s8 L/ w
  209. ;播放计时+ c2 @9 U# e( n7 g
  210. JSR Time_Count* r' g& R% P/ T2 O/ Q' D# i( n
  211. ; ^9 ~! G! j* u
  212. ;播放声音& Q  Y& h, Y( e
  213. JSR Sound_Play
    4 a* R9 E8 y3 S3 ~2 ~
  214. 0 _) _' `6 _1 w) [( l' I. f
  215. ;切换音乐(手柄触发)- Q8 p! p: {8 \" @
  216. JSR Music_Switch) [0 C5 `* ^" |# u

  217. ( n- E4 y2 I# ?: M5 m1 q' q( D8 L
  218. ;音乐显示(缓冲)
    3 m, m" D4 b8 Y7 S( ^, Z
  219. .IF SOUND_BAR_SHOW_ENABLE
    . Q4 p- f, Z- k/ O
  220. JSR Music_Vision
    7 W; B* E: U4 L- }- L7 d; ^
  221. .ENDIF
    + M  f& V1 }2 H2 M1 q, d+ ~

  222. % ^: f) V" p$ J3 h4 @3 W  y
  223. LDA Time_Wait_Cnt
    6 M: N0 r( f! U  o3 P
  224. BEQ NmiProgramProcessEnd
    / p( ^# }0 Y' ^3 y$ o
  225. DEC Time_Wait_Cnt
    2 z1 [' y- l4 J) N
  226. NmiProgramProcessEnd
    ! P8 d3 W8 G) X! u
  227. RTS
    / g) y) l( L- r& [
  228. 1 x7 e: ^; Q" G. j
  229. ;==================================================
    ; a5 [8 f/ T5 r3 E5 X  {$ a
  230. ProgramBegin;主程序
    . @- l2 W0 o1 g/ o& O
  231. LDA #$00) n6 K1 b( T6 b5 s, ]) }1 r
  232. STA PPU_CTRL3 ^6 G1 ^7 x% t% B: ~$ X
  233. STA PPU_STATUS1 D1 ?8 g% e- ?5 c* h
  234. STA PPU_MASK
    * o, p# W8 ?% _* M
  235. STA APU_STATUS: W0 r9 M; Y* @  w
  236. STA PPU_SCROLL
    ) i/ k9 f& J$ p- X0 Q
  237. STA PPU_SCROLL0 j  [9 S$ i$ w* Q% r3 t
  238. LDA #$C0
    & M! V! `3 o$ C; Y8 ]% U  w
  239. STA JOY2_FRAME( s( d8 N  Y5 W% Q, q

  240. 8 I  A3 e8 W. ~, ]: o9 |* k  x
  241. LDX #$FF
    9 \% g7 U: }: k% D, K
  242. TXS$ @$ f3 \" t2 O( t; |  T
  243. LDA #$00- F7 E( s; g: X! t3 Z* D% \/ g
  244. STA PPU_CTRL
    , f3 b2 R% p7 q/ o- a) L0 N  ~
  245. STA PPU_MASK" c6 @- [* i7 u7 {$ m% Q; Y
  246. STA MMC3_IRQ_DISABLE
    7 j! B8 m. i* U. G

  247. 6 }& g- Y& W( O8 ^/ T" f
  248. ;==============================
    * h9 q: i% y( W
  249. ;调色板清空
    4 D2 Q8 T7 o% f' m
  250. LDA #$3F
      w" x7 Z% i% ]3 r7 K  d: h# |
  251. STA PPU_ADDRESS
    3 g  h0 t5 J. j* [- c/ c
  252. LDA #$00" v- y; h2 Z% O) U! _% @
  253. STA PPU_ADDRESS& M- v6 ]$ o, e
  254. LDA #$0F
      y) x+ _* t+ [5 z  Z
  255. Palette_Clear1 q% H: {) S* F$ A) o
  256. STA PPU_DATA  i$ K9 T5 P5 k9 H1 e5 Y9 a
  257. INX$ X) X( q, w' c" S6 h
  258. CPX #$201 B# `- S- U5 {3 P
  259. BCC Palette_Clear7 }' H' h6 f' C1 O
  260. LDA #$00
    2 y8 S! Z) H2 v4 u8 }( l1 l+ g7 y6 N
  261. STA APU_STATUS8 `! e+ n# w8 k1 N/ X% Z+ m
  262. ;==============================
    & ?' U6 P5 P8 [2 K: ^* r  M
  263. ;初始化背景调色板3 ^. s; P4 J& ~7 |
  264. JSR Set_Palette_Color( g+ a5 ~& E5 D0 @* e- ?3 K
  265. JSR Set_NameTable_Attributes' f$ ]7 @) x! |0 X9 Q  B! [! C% ]) R6 H

  266. 9 Y8 u- q7 C! X4 z% M6 S
  267. ;==============================
    ! G6 ^/ K% t8 ]
  268. ;RAM初始化
    # Y2 z6 h2 b# o$ G8 i" J; V- D
  269. RAM_Clear_All
    6 B" V" g  D8 ~( S9 [
  270. LDX #$00  C' m  k4 g4 `, B
  271. LDA #$00
    % T& A: d) O  S( F. k/ E
  272. RAM_Clear_All_Start$ K1 o/ S9 R' U4 a' @7 {
  273. STA $00,X
    " Z- ^! t* \$ u( L0 j
  274. STA $0100,X2 c2 s: v: I5 Z% e/ O, t& E  `1 p2 g
  275. STA $0200,X* h1 K; a, i: V' U$ O0 v& y# t
  276. STA $0300,X
    9 }( `1 z8 [+ l) C& V' u# d
  277. STA $0400,X
    , U6 b: B) {: G8 y
  278. STA $0500,X: b, C0 [; L8 h
  279. STA $0600,X0 X5 F. X2 q: i. g
  280. STA $0700,X
    * L% J: ]  u6 t' W7 r0 q0 C- U. p6 H
  281. INX
    # |; b0 ~3 \+ Z0 H3 k
  282. BNE RAM_Clear_All_Start
    5 r4 V# b/ F8 n* u0 [6 O

  283.   U; f+ p& f' p7 B; ]6 I% X
  284. JSR VramInit
    ! G3 g. p% l% @9 ]9 i
  285. JSR Init_Palette_Addr$ e) H' q3 i0 z

  286. 6 t; l# }: @. F6 k2 ^
  287. .IF Music_Reset_Addr" N2 g% ]" C# i" `( b- U4 v9 [# x; m
  288. JSR Sound_Reset8 Z) F+ W( h! ?( _
  289. .Endif* l, i8 M1 Z) ^$ n

  290. / _! o! z5 s! I& S6 s, E0 ~: H
  291. LDA #Music_Start_Song-$01
    % j; |! S- B9 H/ M) h" y) H# K9 l
  292. STA Music_Cur
    0 l: Y' y( e# |. {
  293. . W$ a# B2 n1 z- h0 ~, O
  294. JSR Show_Music_Text
    % i) y* E$ p9 Y+ ?2 V

  295. 7 m) g  J5 A+ m$ y0 C
  296. .IF SOUND_BAR_SHOW_ENABLE2 G" K# G) g8 x9 ~
  297. JSR Sound_Bar_Text_Set
    " W+ u, Y) w) E  h( j
  298. .ENDIF
    * Y; P5 D, f/ O; C0 {$ @

  299. / ]9 P8 f) H) X% O8 w# Y
  300. .IF Track_Name_Pos" z/ Z8 k1 w5 V/ Z7 d* q
  301. JSR Show_Track_Info
      b# |2 _+ k6 v2 h% N( H) ]; p$ m
  302. .ENDIF, c( u0 h# o3 n: W7 F
  303. 6 x/ z+ j. u; g; l/ |
  304. JSR PPU_Proc/ K: @! z3 C! f) F/ Y- o( @/ ^
  305. 9 g6 `' I. B" ^2 i2 M% M5 R; g
  306. LDA #$0E
    2 e% W7 f( _$ H$ Z3 I  A! p; l  ?
  307. STA Screen_State* t4 {4 w1 u9 i2 N* W

  308. # Q9 Q% }+ \& F. M% q% X1 w) j
  309. JSR Sund_Bank_Init( A; N3 E' A# B% q# a

  310. 0 J8 _+ ^* D. L) a( @
  311. JSR Music_Show3 e* k0 N- s4 C  C* @& r
  312. JSR Time_Show
    9 S" t- R0 f( R$ Z" F
  313. JSR Music_Stata_Show& [0 z# E7 Q2 @3 y1 Q
  314. JSR Time_Delay
    $ L, |2 [- R7 w9 Z, p$ [: J  Y+ ]! S
  315. + L  N' @1 ^3 S) N
  316. ; L7 m, q4 z1 L, k: A, S
  317. LDA #$80* M) C5 u" N2 U
  318. STA PPU_CTRL
    ) n' U5 R- q; G( H2 @

  319. ' q# E6 R" @' @% w. K
  320. LDA #$20
    . _1 P8 p; a* f* P) S6 Q2 Y
  321. STA Time_Wait_Cnt& V3 o$ R' b& x  ]; P. m* O

  322. 8 R5 Q7 ~3 q* e
  323. Wait_Time_Over* F- F; ]* H! Q6 }+ A
  324. LDA Time_Wait_Cnt
      _/ o9 q# N8 h  ?
  325. BNE Wait_Time_Over
    3 E9 I0 l( l. y7 T

  326.   i0 `5 z; l: t' q; H5 g3 |& b
  327. LDA #$1F
    7 q$ `! Z% B: R; s! u
  328. STA APU_STATUS4 S6 \: c6 ~& u9 l$ J5 y; w( l
  329. LDA Music_Cur
    * h+ @9 }& v8 j0 x# \
  330. JSR Sound_Init
    # `. ?# j( `8 _3 c
  331. 7 R& ~" C: R; Q! U, `
  332. JMP MainLoop
    6 [0 [% x7 [5 Z4 N( D$ k; c

  333. ! q' E& W3 g! u+ f+ o
  334. ;==============================
    9 s1 u% m4 T$ |+ K5 t) H( S
  335. Time_Delay;延时等待8 t' q% i% F8 j1 }7 T; V
  336. LDA PPU_STATUS0 Q( N: C3 D/ N) C& Y2 `3 s
  337. BPL Time_Delay3 l5 |0 Q0 F; ?6 J6 @
  338. RTS3 h# u* V* U$ L

  339. 8 ^& ^! Z/ X+ k- W/ ^+ B# o
  340. ;==============================; p. e( {/ |1 D  }) C; x3 [
  341. VramInit;初始化图形内存
    ; u3 l3 G6 x0 v% }3 H& i: i3 g
  342. LDA #CHR_DATA_BANK' s- r" r+ h9 J& y8 K
  343. JSR SwitchBankA000
    $ m+ @0 @; u) v1 K7 s
  344. LDA #LOW(CHR_DATA_ADDR)" B0 z$ S/ `. ^1 Z. B) U) I
  345. STA <Data_L
    " r& ]" \# X# c) y
  346. LDA #HIGH(CHR_DATA_ADDR)! U, h' D% i" X+ `8 x( u/ F* B1 a
  347. STA <Data_H8 P' a2 |6 @+ U7 N/ B9 K
  348. LDY #$00/ _2 b! C( \( \" B1 T
  349. LDX #$20
    * g" D1 ]7 z% n% ^# ~
  350. LDA #$00
    " {, [' K3 j1 r
  351. STA PPU_ADDRESS' T; m- w; A4 K. J/ v* K4 ~: u
  352. STA PPU_ADDRESS) _; g% W( v; G- Z2 |3 s
  353. VramInitWrite
    6 D. n$ P9 Y: [. N% b6 @
  354. LDA [Data_L],Y
    ! o- p2 q9 \1 R) J+ w
  355. STA PPU_DATA
    " a$ {0 h+ u( P3 W, k
  356. INY7 i+ l1 E+ B2 q; M  f+ b# Y; m, j
  357. BNE VramInitWrite
    9 f+ c! p; B! U" T. r
  358. INC Data_H
      J, }! u5 o- Z- {9 g
  359. DEX
    ' w% ]. \, U4 U2 ?* o4 J+ R
  360. BNE VramInitWrite
    - E5 N" t; r3 T, {* ^
  361. RTS
    $ Z% i6 o- ~% N* n* k8 z
  362. 0 l1 w. F, _4 N0 ]( {
  363. ;==============================# w! L$ ~4 ?7 a+ w
  364. RAM_Clear;RAM清除
    7 @$ z% h# m3 B( M0 q4 k  d! v
  365. LDX #$003 t& ]& u$ }9 M+ D) m
  366. LDA #$00, O5 W* h# R  n8 t" t
  367. RAM_Clear_1
    ) W+ ~+ F0 j. c$ a$ D1 S6 r! F
  368. STA RAM_Cln_1,X
    % `+ G6 v* T; k3 \/ Q2 p' y
  369. INX
    # D' s- c6 T9 {' B# q. P5 {
  370. CPX #RAM_Cln_1_Size
    1 L4 Z# o- c, T3 [" v4 y. G0 j1 Q
  371. BNE RAM_Clear_1
    / Z4 s) H6 P: `4 t. s9 V
  372. LDX #$00
    6 M$ [& N* K( S
  373. RAM_Clear_29 H; Q& U( o0 @7 k
  374. STA RAM_Cln_2,X
    2 t2 q' T3 ^1 F% A8 u2 c
  375. INX( A6 c$ [6 ~2 D# d8 \# h5 N. m- Q
  376. CPX #RAM_Cln_2_Size* y9 Z9 X5 g/ [% |/ R: C5 u% M
  377. BNE RAM_Clear_2
    - X8 Y& [6 |  C) i3 {5 Y) L. o
  378. LDX #$00
    ( |1 h4 |0 o2 o" r0 T) d% v
  379. RAM_Clear_3! s( q( u, X, c: B
  380. STA RAM_Cln_3,X4 y5 b* B! ^( I6 x; n- |
  381. INX8 x4 e2 S. b- T8 z/ t
  382. CPX #RAM_Cln_3_Size5 y9 f# y+ K- N6 s& O, l( h
  383. BNE RAM_Clear_3
    ; ?" Y  u0 R4 s- {! x1 X: r
  384. RTS
    0 r" v, v, N# s4 r

  385. ' J, Q  e( G' p8 M) L' h
  386. ;==============================
      ~8 H- s& @& s6 F0 N+ ^+ g
  387. ;音乐切换
    8 K( f: p: M5 Q
  388. Music_Switch  ~( s, h( n& N) s* S" R$ P
  389. JSR Key_Proc# [+ M1 T- v5 g* Y! l0 J
  390. LDA Key_Once0 o; \' @2 t1 ~# S" z9 \+ n" O& S5 X9 s
  391. CMP #$10. o2 P  p) t8 g, L
  392. BNE Music_Start_SongStop
    - ]- X; T8 r, A( H
  393. JSR Music_ReSet
    3 V  }  E/ a5 j6 F( j7 n* G0 M5 ]( w

  394. ( X! [  u" K  U: n8 i5 @- [4 e
  395. ;音乐停止
    8 g( R3 w2 @( D- [
  396. Music_Start_SongStop' c. [) b) W3 G( `6 ?' F0 k  {8 J
  397. LDA Key_Once
    - f8 G4 P/ G* F. A4 D
  398. CMP #$20
    7 p! `" r. ~/ z  F2 S4 s7 Y9 X& o
  399. BNE Music_arrow
    7 n  U& u4 n4 p' ~. P0 b
  400. LDA #$01
      D# J, b3 C- t5 X0 G5 V+ D$ `
  401. STA Music_State7 c# Z- x4 t( T+ r4 G5 [! _
  402. JSR Music_Bar_ReSet0 Z# j  a" `& ?$ ?) j! {; e
  403. JSR Time_ReSet
      R& Y( {  o( v8 H
  404. JSR RAM_Clear- R' A7 i3 V* Z& e) S; z
  405. JSR Sound_Clear1 K* l- X5 C6 v5 B& R+ W, M) Y
  406. JSR Music_Stata_Show  S' g% t' Q4 e* W- f6 C, e
  407. Music_arrow
    + E& p2 m# m; ~1 j
  408. LDA Key_Once
    ) A# X5 [1 N  E- u. ?: [' t0 C
  409. AND #$CF) z& ?" m1 q; \
  410. BEQ Music_Switch_End
    # ~  x% L6 k* q
  411. JSR Music_Number% F' h3 ]3 k4 J$ |* ~- z: O
  412. JSR Music_ReSet
    # Q- |7 J7 K. ]7 |5 O4 n
  413. JSR Music_Show
    $ K) i$ l( W/ p" ?8 h6 G! t! u
  414. Music_Switch_End$ \7 @  I& H2 O- ~5 p( [6 {
  415. RTS% p+ d1 N* k# O% Y( }
  416. ! W/ y1 D9 J( K, P0 e8 Q
  417. ;==============================
    0 S& ?/ X, F" i% l( p
  418. ;音乐曲目切换7 E2 x% \7 L& J8 f  V
  419. Music_Number
    . c) Q& r/ X6 ~' }
  420. LDA Music_Cur. S8 l0 ?# Q/ M. E% a# u  Z- w
  421. STA Music_Last3 Q7 N; A- f6 W
  422. Music_Decrease
    1 j1 Z2 u3 N- x/ N
  423. LDA Key_Once
    # w( q, U. |, k
  424. AND #$428 p5 v. @- ?  k' I) x) s
  425. BEQ Music_Increase
    % m9 [: S$ _; T0 n6 n
  426. LDA Music_Cur
    7 U+ B! n' m  Z0 x6 P7 `
  427. BEQ Music_Increase: N1 O) p) Q1 j2 f
  428. DEC Music_Cur
    ) P9 _( \0 M. m1 ]4 Z( A; s
  429. Music_Increase, X% q: i! P7 H, X  l: [
  430. LDA Key_Once
    8 B% G' S3 P" r; E+ s3 E" X
  431. AND #$81" i. }; r8 p' h. q
  432. BEQ Music_Decrease_10- A1 _& t/ ^( @( k
  433. LDA Music_Cur
    ! L! V4 J! {3 m: B5 U% n: ~! L% Y( v
  434. CMP #Music_Song_Total-01
    1 t8 V% F$ \6 V4 `
  435. BCS Music_Decrease_10
    7 _  \$ m4 T0 Y, y/ F/ ~
  436. INC Music_Cur
    , o0 \' p; m; ], Z+ Y* J
  437. Music_Decrease_10
    % q0 W) o# `7 k0 G. z
  438. LDA Key_Once
    # x* b, F- Q' `4 t! a" F1 l5 {
  439. CMP #$04
    4 u' l3 x: m  i" D& x3 b
  440. BNE Music_Increase_10
    % ^# y4 R* t6 q# h' w% I6 J( v5 @
  441. LDA Music_Cur
    $ A! u( o! k/ }; t9 ]& f
  442. CMP #10
    3 q! q  J  N1 Q7 L* ?% l4 @, q% e# S
  443. BCC Music_Start_Song_Min+ @( I3 g6 Y* y
  444. LDA Music_Cur/ ]; a9 s, B% B0 y/ @) U( G* Z% X7 Z
  445. SEC
    9 n9 b) u, s( ~2 J9 h5 [  u  z
  446. SBC #10
    - y* k- \! c1 L: o) p
  447. STA Music_Cur- B+ g0 v' T! ]) ?+ l5 m
  448. LDA #$00
    7 J  i8 D( x4 m
  449. BEQ Music_Increase_10
    . M  g* A8 H. G4 s: Q+ H  J
  450. Music_Start_Song_Min
    . m; X! `: J" m- S
  451. LDA #$00
    1 R2 Q2 R8 e3 a: ^9 k
  452. STA Music_Cur
    # n9 Y) K1 M; m4 Y3 Y1 G( x
  453. Music_Increase_10+ y# C& L1 I* h5 M- f
  454. LDA Key_Once2 b6 \# f2 E3 z  }7 ~/ Q
  455. CMP #$08. d/ f0 {; i& t1 v8 ?4 o8 g8 v# @" [
  456. BNE Music_Number_End
    3 L) i1 f8 e2 p" }
  457. LDA Music_Cur4 Z1 g& L# c9 I" s0 f* A
  458. CLC
    4 u1 h0 G. F4 H( D* K% ~
  459. ADC #10
    7 Q' u9 h' M" {0 c' r# |9 d
  460. CMP #Music_Song_Total-01$ T* _$ H/ ?* H% ?8 `
  461. BCS Music_Start_Song_Max
    - S9 |" N. C; e
  462. STA Music_Cur
    : L' E+ S& n, D
  463. LDA #00
    - J) O7 ]( x0 u7 ]
  464. BEQ Music_Number_End
    + {  B4 c7 _1 ^/ q& c4 n
  465. Music_Start_Song_Max
    0 b+ \6 T* Q& y4 Q; Z* \; v
  466. LDA #Music_Song_Total-01$ c+ K. @( m& C. ~
  467. STA Music_Cur
    ; I+ }/ W1 s) j: `/ j& w. W, `
  468. Music_Number_End, a5 f& |" I8 `: P. @
  469. RTS. C/ Q* j% H/ \" _

  470. 9 b  ]2 c9 ~/ r8 Q; s/ P8 t; v, i9 y
  471. ;==============================
    - ~" r) r7 e" F, h& D1 ~
  472. ;音乐重设' v. Q5 G: h% M4 O
  473. Music_ReSet
    5 i4 Y9 q4 {, E, n
  474. JSR RAM_Clear
    ! C( I0 n5 s! e, Z& f
  475. JSR Sound_Clear* m- p' A# q; D; I2 i& `. t8 U/ s
  476. LDA #$1F
    # {9 U! ?$ J9 Z0 x
  477. STA APU_STATUS
    $ c) Y1 M; j5 Q2 F7 w% M
  478. LDA Music_Cur
    3 ^& j& s" t0 |9 a& n- o
  479. JSR Sound_Init3 @" L# b9 K* J% \: m: b- _7 F1 d; `
  480. RTS8 S+ ~0 f" @. N
  481. 6 f% S- f  s) C0 N
  482. ;==============================6 ]3 ^! B# W' @8 y- `, R
  483. ;音乐端口清除
    7 T6 i8 ]$ u$ h. I% M$ |1 f6 h
  484. Sound_Clear
    : j" j7 ~; w7 y7 `( R. ~
  485. LDA #$00
    " d% ^7 u  [3 H
  486. STA APU_STATUS9 A- i/ C4 O. P
  487. LDX #$00
    : r( u- ~# i0 q9 X
  488. Sound_Clear_Start
    ; E: u) \1 j" l
  489. STA $4000,X
    1 F; L" f) U! ], ^: {" {# G( g
  490. INX1 m& x0 ]; [2 m6 y2 z* r% O
  491. CPX #$14# \: Y" R& m# i- Q
  492. BCC Sound_Clear_Start* p9 K- Y9 n0 n, B( i6 B
  493. RTS4 o( y3 b9 ?+ U7 i. l- j" s; e" c
  494. 2 s  G2 A4 p$ j0 A' v$ r* {/ [
  495. ;==============================, h0 l# @8 K5 m3 W9 Y- S
  496. ;按键处理* s# f7 G* L4 a' H3 v
  497. Key_Proc9 K! z( g7 X- d/ |4 e4 J, g
  498. JSR Key_Scan
    , E8 q3 j& F  P- i" w( \2 _
  499. LDA Key_Keep" G3 d6 M* Y2 u9 w# w
  500. STA Key_Temp
    1 J- e3 f5 b- U
  501. JSR Key_Scan
    * L9 T, [* W) x4 l# P/ q8 L# v
  502. LDA Key_Keep, @4 T( q4 p1 Z8 i8 w9 `
  503. CMP Key_Temp4 E" W3 h5 b3 S& N2 M% z
  504. BEQ Key_Get_Once
    ) C6 X2 a# q" }/ z% C4 |/ f
  505. LDA Key_Kemp
    * J8 H% H2 U3 m& P$ \
  506. STA Key_Keep
    2 y) W" K4 n8 T7 ~7 j0 I* e* Z! X
  507. Key_Get_Once
    + C  z* K  H4 [( g7 y
  508. TAY' `/ G2 U" o; d: c# Y2 M
  509. EOR Key_Kemp9 V% w. d: Z" {- ^$ q9 Q9 |& E
  510. AND Key_Keep
    . A( P* k* F; i# U8 \( T9 T4 i5 ~. J
  511. STA Key_Once
    0 j& w% L& r/ _) d
  512. STY Key_Kemp) d4 q7 M) q3 p
  513. RTS
    % l% m/ Q' j. }1 ]8 S! v: q6 H% I
  514. ;------------------------------/ F. d6 V4 h5 w, i  l
  515. ;按键扫描8 I0 o& Y! ^) V2 B. [( ~6 L
  516. Key_Scan
    6 h1 k* w4 O* n1 I& X
  517. LDX #$01
    3 l7 K# ?: |2 A2 ^1 I! _+ R
  518. STX JOY1_FRAME2 N. }% d, X# n' Y  ]2 J
  519. DEX- X9 g$ e5 q9 w9 @" p" H% }8 H9 O
  520. STX JOY1_FRAME
    1 V& t) p: k1 R' l: E8 l! r# n
  521. LDX #$08* E. ]1 k1 w' ?
  522. Key_Value5 s* F0 `5 w; x8 }
  523. LDA JOY1_FRAME/ Y1 A. ~9 J0 H& P0 q" E
  524. STA Key_Getv
    ' ~) ^+ x9 u1 {  J2 z, _( b7 ?
  525. LSR A" s. K# ~; K4 T! U  W1 @
  526. ORA Key_Getv
    ! w& c* g; _" I, m7 e
  527. LSR A
    - i5 z& j' I+ M/ `) O+ Y+ y8 \4 d9 N
  528. ROL Key_Keep9 U) t- S) T. a7 f) ^  f
  529. DEX
      i5 e- L) @% L4 I; f
  530. BNE Key_Value5 \, W' @) P! s1 R4 d
  531. RTS7 \4 @2 {  o8 E7 }* \0 o
  532. * k$ p. F. W, X+ H7 z
  533. ;==============================
    5 b: ~9 l% s  ], v& R& f9 A
  534. .IF SOUND_BAR_SHOW_ENABLE
    1 t3 ~8 i8 _  p! r
  535. ;音乐条显示- p9 h6 f5 [% V. e! m
  536. Music_Vision
    0 d4 `' g4 W& _+ l2 E1 u4 a& `
  537. JSR Music_Animation
    4 p( Z* {( f+ ~, U3 q
  538. JSR PPU_End
    0 c: S6 A2 t! _- \% v4 c7 @$ J% w
  539. RTS
    ( J! G! x( R8 h" c6 p# n
  540. ;------------------------------
    2 x' d- f* t0 c/ L* {: {) }5 e, l: H
  541. ;音乐条显示处理3 Z% K3 W% ~/ o7 S( u' q& C
  542. Music_Animation2 V" v8 W; o' e
  543. LDX PPU_Cur
    8 Z1 k8 }2 J; Y0 Z
  544. LDA #Mode_Line, o4 n6 w. Z' a% n0 Q
  545. STA PPU_Addr,X
    : o* h  G$ ], C/ {$ u
  546. INX& n7 w0 [9 J" l5 M
  547. LDA #HIGH(Sound_Bar_Pos)
    6 Q+ }* `, {% l" @& I: y+ U6 n! r4 q
  548. STA PPU_Addr,X
    + p' V1 t! v4 X% c) t  F: I
  549. INX
    : B& m: k/ [# M$ d2 t* \
  550. LDA #LOW(Sound_Bar_Pos)
    7 h- O* w7 B! |3 l! F7 e
  551. STA PPU_Addr,X* m) G* R( ^# \& }: o; t( c
  552. INX! |2 W0 \5 G- z$ R
  553. LDA Sound_Bar) E* K  |# i& e  y$ Y3 }5 k
  554. JSR Volume_Convert
    1 H# k) \* k/ A* S/ Y: Y. {7 X1 ~
  555. JSR PPU_Return
    ; p5 ]7 s* V, j( I
  556. LDA Sound_Bar+$4
    & [! d0 S2 g' {7 Y
  557. JSR Volume_Convert! z" s; T4 d: p( I- ^& @: r% \# A
  558. JSR PPU_Return
    % N- n  h% l' }* I$ ^
  559. LDA Sound_Bar+$8
    % D4 B, ]& @' O* f2 a5 p" {
  560. JSR Volume_Convert_Ex
    7 ?, r, q: L/ R+ ^
  561. JSR PPU_Return$ I: p/ g3 e- o4 \- s
  562. LDA Sound_Bar+$C* V$ I7 ?# ^! M: e1 F1 F2 [
  563. JSR Volume_Convert
    * q8 `1 q+ }0 t8 S- O2 c, X* B
  564. JSR PPU_Return
    5 g- C- S( j0 C- H2 y; K6 p. [1 E+ I
  565. LDY #$10
    . A7 \4 r7 a$ E9 N$ S
  566. LDA APU_STATUS* F0 I, ?# A4 P9 l; C+ @4 T# G- B
  567. AND #$104 t9 n( T9 [. C' n$ k5 b
  568. BNE Volume_Count
    7 \+ Q0 n; V  @% Q3 {' m' I
  569. LDY #$00
    # u& U6 r9 ]: L$ h, P- a
  570. BEQ Volume_Count
    " j3 g$ \; q7 x  Y" t1 e6 G' y
  571. ;------------------------------
    0 R; X6 i5 I9 R. l4 `& D
  572. ;音乐条处理
    % ]/ K3 `3 i$ u# V* P
  573. Volume_Convert_Ex- B: C; r2 K6 D& e
  574. AND #$1F
    " e. p3 f) t- e' g" E
  575. TAY) d( o0 \$ j: B- y7 `, A3 P( @+ O1 t
  576. BNE Volume_Count; p) I* H" D# F+ @
  577. Volume_Convert
    9 O3 [+ A1 X  G  K5 y  O" s4 {
  578. AND #$0F, k2 a. R8 |6 Z" x
  579. TAY) I8 I8 U! j! a2 Z7 Q1 P# L# C
  580. Volume_Count- h( O6 q8 h4 u: N- \. `/ e
  581. LDA #$08+ v/ W+ s1 ^) {4 G3 i% y
  582. STA Sound_Bar_Cnt; D, O$ [) s  B  C
  583. Volume_FILL
    6 |& h& {! ~# ~' n! B  T" ]4 z
  584. DEY& b2 r. y, e4 B
  585. BEQ Volume_Half
    $ W0 K: K5 m6 ^4 t# Q& T
  586. BMI Volume_Empty4 F5 H+ _. w# M( N4 p- c6 a( ?
  587. DEY
    $ @: `& K0 M' _! G! D- K& u' f; Q
  588. Volume_Full
    & D# ?7 U/ o! K2 i0 U. }' e
  589. LDA #$160 b$ A$ g; M+ b. t
  590. BNE Volume_PPU
      f" k5 ~9 v; A- D" t- Z
  591. Volume_Half" L6 D  N- X8 ]
  592. LDA #$15
    2 r$ W, o, F9 w! k1 \
  593. BNE Volume_PPU
    / S+ s$ H2 o' r1 v/ }9 S
  594. Volume_Empty3 Z$ `' `0 f* p1 @
  595. LDA #$146 i7 c) q: s7 ~# X
  596. Volume_PPU
      [0 s- r( q- X, ~% k
  597. STA PPU_Addr,X
    % L- L1 y  d0 T( o  n
  598. INX0 g9 L# |% v) Y$ n8 T0 B
  599. DEC Sound_Bar_Cnt: l- F# ]8 q: G
  600. BNE Volume_FILL! n* m; f& Y; b! S6 J
  601. RTS
    6 D2 ~4 B2 Z" @( @

  602.   S% m! U8 X) d  E6 ?4 n; ?+ @! l" Y
  603. .ENDIF, ~: D. o0 ?8 E' y6 B

  604. & P4 R1 I+ |5 ]. _% m
  605. ;==============================& m2 X9 r/ i& i" |
  606. PPU_Addr_Set;PPU行开始$ D$ v7 ]" q8 t" N. a1 j
  607. LDX PPU_Cur
    1 W' {/ a9 p# S
  608. LDA #Mode_Line0 o+ X2 n3 ]' v" M  [6 E, w3 m
  609. STA PPU_Addr,X7 C& Y8 _  x! z* K' i
  610. INX8 z5 R2 m" C- W* D. A
  611. RTS; O% b. h; Q, x1 Q+ S
  612. , D/ E9 u! a! W$ q
  613. PPU_Return;PPU转行( X: T% w5 h2 I) W/ x+ a, ?
  614. LDA #Flag_Over
    4 C# ]( j1 d# K1 u" a9 D' Z; q1 v6 f
  615. STA PPU_Addr,X% G) L2 ^) c$ U, C& U8 ], L
  616. INX
    % d4 ^. \( I4 Q; f
  617. LDA #Mode_Return
    6 `: ~7 L4 ~# {
  618. STA PPU_Addr,X
    $ S6 g! Y: K: F
  619. INX. H3 X5 T/ ~& u( a: r+ a9 ^
  620. RTS" j- {2 Y# {5 H7 \. P! z

  621. * ?6 y* A0 _  u
  622. ;------------------------------1 o8 s+ L" O1 x0 u$ J
  623. PPU_End;PPU结束! w2 I' P! V8 d9 t; W& p3 y" q0 Z
  624. LDA #Flag_Over
    / h$ J' n8 N+ H; K
  625. STA PPU_Addr,X
    & g* G: L% e* t4 q1 ^- F4 ~# ^
  626. INX
    9 H. r( c0 M6 c9 w& j8 x
  627. STX PPU_Cur0 |) \6 `# \0 |
  628. RTS
    & u3 Z9 k: K5 v# l
  629. ;==============================0 v/ g0 i: A! I4 D: o. p0 V
  630. Mode_Line     = $FD    ;新起行模式4 V/ X( i( ^" L1 G
  631. Mode_Return   = $FE    ;转下行模式& Q0 v4 J3 w9 L5 j; h
  632. Mode_Clear    = $FC    ;行清除- Y! ^" ?2 k" j% h( C
  633. Mode_CntLine  = $FB    ;行计数写入
    9 Y: ~$ |4 Y9 ?6 X( e
  634. Flag_Over     = $FF    ;行结束标志
    $ X  T; ]  b4 t# |* j  A

  635. + k9 W* m1 G& U1 h
  636. ;------------------------------
    0 e1 d2 p( ]6 W- V' d; H' A
  637. ;PPU处理% F. b8 ?! d* w5 I0 j
  638. PPU_Proc
    . P# o8 a4 a4 H' e6 E( u9 B
  639. LDX PPU_Cur
    8 r1 w. `$ s4 g1 V6 p3 c& }
  640. LDA #$00
    - @. |8 L" s. }: ?
  641. STA PPU_Cur
    # R8 t7 i/ d6 p# D8 P0 x0 b
  642. STA PPU_Addr,X
    , F9 T0 r6 q$ M+ B
  643. LDA PPU_Addr
    2 p2 n. M  J, m+ i0 [
  644. BNE PPU_Proc_Beg$ T# b; Z% `! Y) L
  645. PPU_Proc_Ret
    0 ^% x8 y: ~7 `$ }
  646. RTS
    ; |( B% j5 j  L, a6 H: }; p
  647. ;------------------------------
    ! D# W3 V; }  P1 u0 [$ P
  648. PPU_Proc_Beg  ;处理开始
    ( h2 H8 b; g7 l2 q& K$ t" E
  649. LDX #$00
    3 K# I8 s" j4 D' A2 F
  650. STX PPU_MASK- p  E' ]" _0 U" m! P0 H
  651. ;------------------------------6 g" U8 R# d* p6 |" _; O
  652. PPU_Mode_Select  ;模式选择
    8 @" j. E) E# f( S
  653. LDA PPU_Addr,X& g8 f1 l5 _% ]  n; p7 y: t
  654. CMP #Mode_Line3 H8 ?, V+ }% c  B8 S$ j; f& H8 l
  655. BEQ PPU_Mode_Newline
    3 q; a8 |  W6 |7 U/ Q! Z4 X
  656. CMP #Mode_Return
    3 ^# b3 b0 ~) w' ~  A' w% {' [
  657. BEQ PPU_Mode_Return  x: ]$ B  j3 [" T5 |4 ~
  658. CMP #Mode_Clear
    + U9 K' Y0 }, d' @0 r
  659. BEQ PPU_Proc_Clear+ K: Z3 E3 n8 G  l! v) P
  660. CMP #Mode_CntLine( Q" \5 p3 v+ v7 V6 G0 F8 ], z2 I
  661. BEQ PPU_Proc_Cnt_Line
    # V1 E! I6 _7 Q9 L6 _: @
  662. RTS' O2 p# e# W4 b5 s
  663. ;------------------------------9 K' m5 }. m5 k8 i$ r5 H2 d9 `
  664. PPU_Mode_Return  ;转下行模式
    ! j) X3 Q* S0 V: Z! B
  665. LDA PPU_Addr_L
    ! [* G" s7 O+ `! h/ S
  666. CLC
    # {: [. z; A' I! U
  667. ADC #$20
      U! u2 Q* Z# O& P+ q
  668. STA PPU_Addr_L
    % t; V2 {5 e/ b' w( ?/ c9 W- I& O
  669. BCC PPU_Return_End4 P, i$ ^: \9 e! T0 r* Q
  670. INC PPU_Addr_H
    1 J, t* Y3 ^& `; E6 {9 S  F1 M' P
  671. PPU_Return_End
    4 ^. f, q/ e1 n3 G0 ~3 ^0 J
  672. JMP PPU_Set_Increaser
    4 j5 U1 P) R2 ?
  673. ;------------------------------
    7 q/ y2 B2 t4 x, j
  674. PPU_Mode_Newline  ;新起行模式
    ! s9 W* x0 a* g% N% j5 T! ?. U
  675. INX
    1 \" h" n4 e6 H8 ~! |
  676. LDA PPU_Addr,X, {/ u. y, |* {3 o
  677. STA PPU_Addr_H
    + G! j" M. E- D9 t
  678. INX
    , c& Y5 h" i- P
  679. LDA PPU_Addr,X, r- F0 E, p  E* p
  680. STA PPU_Addr_L
    ! ?! k( k. b' p0 x4 M
  681. ;------------------------------
    9 `, T5 E' j  T3 x
  682. PPU_Set_Increaser   ;设置写入地址
    # P% y2 l) F4 J* _1 `! Q) D+ ~: x. J
  683. LDA PPU_Addr_H
    % ]  j6 F7 h& G! Z" C6 ]
  684. STA PPU_ADDRESS  ~2 c7 r) Z5 s( S" u' K2 g% @
  685. LDA PPU_Addr_L
    - R5 |8 N) \5 I+ @" D9 T: l) j
  686. STA PPU_ADDRESS5 X/ V7 [+ W/ u4 Y4 |6 L0 T( C0 x
  687. ;------------------------------
    / C# {8 ?' {% n5 W  |( T* j
  688. PPU_Write   ;写入数据
      {) q. V# t. N8 o2 U
  689. INX& k- k( h5 z' ^) P  \+ y
  690. LDA PPU_Addr,X, P: ~/ t, Q8 V9 s# c7 n" b
  691. CMP #Flag_Over
    $ O" O6 O- i7 B2 I
  692. BEQ PPU_Proc_End8 w& H: u8 q  @" K- C
  693. STA PPU_DATA* b, U0 Z, O" k6 A; N% U5 N
  694. JMP PPU_Write" o; l/ l2 |8 h0 U5 M
  695. ;------------------------------% g- B: }: g! B7 ^. C
  696. PPU_Proc_End  ;单行写入结束3 m+ P. }. V$ `, g$ P1 v5 F
  697. INX( |2 S5 i: B0 @' s" H% [
  698. LDA PPU_Addr,X
    # M% ~$ l) L. n" d
  699. BNE PPU_Mode_Select& M* U' V1 s% R
  700. STA PPU_Addr
    6 t$ p/ U/ Y# N2 N
  701. JSR Update_Palette_Color
    " r, R$ j# Y) B
  702. LDA #$00" n: T3 D' i- B1 p4 E( X. d" q
  703. STA PPU_ADDRESS
    6 [% A* J1 _$ |* G; `! g5 l
  704. STA PPU_ADDRESS
    - o' C/ _0 a1 ?, g! m
  705. STA Show_Track_Name5 n0 F- \" T5 A( T7 U( u; V& N0 {
  706. LDA #Scroll_X
    , B  ]; q/ G% w7 @4 z8 g
  707. STA PPU_SCROLL. n) W6 y  P8 I& |3 N9 G3 `
  708. LDA #Scroll_Y! A8 [$ ^/ N) d* P! ]- V
  709. STA PPU_SCROLL
    " s5 H; r' l, D9 R( v8 V: @
  710. LDA Screen_State
    8 T1 u1 a* H) Q$ h  @
  711. STA PPU_MASK& t/ z$ m3 D+ v( k
  712. RTS( I. {. K3 F8 Q" X" h9 C$ [" a
  713. # d8 e* A5 R3 D: h& Q( p: H' y/ B5 m
  714. PPU_Proc_Clear( W) X. Q: a) M( n7 M' E8 \5 y
  715. INX
    % x$ ^1 g& y+ |4 J+ ]4 c9 t/ S
  716. LDA PPU_Addr,X
    / \8 ^+ B  Z. p! A- p2 h
  717. STA PPU_ADDRESS4 u3 Z6 S6 w  U3 C* z/ Q% s1 D
  718. INX1 \' t& n' m4 w! E3 X8 Y# j$ b
  719. LDA PPU_Addr,X
    / A* K+ }3 D: O: S- ?% k# _$ l
  720. STA PPU_ADDRESS
    5 j& s, {& x& G7 R6 k3 _
  721. INX- C# q( p- V8 A, k1 c% d' s9 S$ h. ^& G
  722. LDY PPU_Addr,X
    6 q0 v6 D8 d: E9 g
  723. LDA #$000 ~) u2 u' M4 k% {( ~  a
  724. PPU_Proc_Clear_Write( B4 [/ @; y- M
  725. STA PPU_DATA1 M; v' Q) E# o( d* f; y
  726. DEY/ j3 R, I; J- P$ w7 K
  727. BNE PPU_Proc_Clear_Write% E" b  N0 `. M, H# N
  728. JMP PPU_Proc_End$ G1 @1 @  S% [! ?' [% l
  729. # i9 |& f# _) s/ r" i/ s/ d
  730. PPU_Proc_Cnt_Line/ ~5 F* Q7 R* d( h/ r/ F
  731. INX
    , W* o; w+ d8 g* a: G3 E/ B. i+ i/ w
  732. LDA PPU_Addr,X& d. ~; [/ f; d  s) e/ j
  733. STA PPU_ADDRESS
    # V  D8 J: o7 f5 R
  734. INX, _9 |% |! |: S4 `3 ^( V) Q7 |8 y( j
  735. LDA PPU_Addr,X2 t( U* q1 K! {+ |
  736. STA PPU_ADDRESS8 A2 F. n- w2 {) M4 |$ h
  737. INX
    * z- p( u: W+ i; I5 c
  738. LDY PPU_Addr,X6 q. r3 i8 u% |& m2 ^' j: q6 x
  739. PPU_Proc_Cnt_Line_Write
    2 w; a+ P' @' o, H* ~  g' S9 m0 S0 r4 t
  740. INX0 {: H% B3 H2 C& g9 `3 m
  741. LDA PPU_Addr,X
    5 x& ]! h- X( p" k& \* ]0 q
  742. STA PPU_DATA* E6 ]- U0 @. w& }# \% I# Q! d
  743. DEY
    0 C; g4 F' ]* p
  744. BNE PPU_Proc_Cnt_Line_Write
    & I1 F: j9 ^% c. v# W0 B
  745. JMP PPU_Proc_End
    * E5 m2 B$ x2 O% W( e$ K- K  s

  746. # v" a8 e) k9 P8 g8 T( j% A  D
  747. ;==============================$ C: D8 M/ p) U7 b$ i! B- E
  748. HEX_To_Dec;十六进制转十进制! N1 d9 m: ?* W' B; U) [6 S
  749. STA HEX_Data
    - }! L# v: l2 }  ~2 d. ^+ L" W
  750. PHA
      q) O/ z. [  M
  751. TXA
    / X5 Q: \0 ?  `+ e/ `
  752. PHA4 l( K& C8 s1 @% v+ \5 }  H" ]
  753. LDX #$00
    , n! Z9 W' J- [, |# K* Q, c, l8 T: e
  754. LDA #$00
    1 Z/ C( {4 _8 G/ o; \/ t
  755. HEX_Cln% O" }) X( c7 T" s: }8 c
  756. STA DEC_H,X
    2 }1 I, J  l$ G) v+ F# o
  757. INX  L/ w( [. H# Q7 v
  758. CPX #$03
    - g, a, ^. Z( V
  759. BCC HEX_Cln$ m3 u% ~  ~8 M
  760. LDA HEX_Data
    0 u/ Q& E$ {5 H. G9 H8 t! _
  761. ;------------------------------
    ; v! |0 g7 j" I3 z' t4 u8 b
  762. HEX_1009 E. g& p) o4 g/ k  M
  763. CMP #1006 _& r. ~+ S9 S! Z: C& `
  764. BCC HEX_103 x; x1 I& F5 }& _, h
  765. SEC( z; A$ h) b% S9 |- Q/ u0 C
  766. SBC #100
      s! ?" L/ G( e. S3 H( R$ R
  767. INC DEC_H
    ( S2 e) I9 f5 `. k! P
  768. BNE HEX_100
    " a1 x+ H( ?4 _2 r! M# m
  769. ;------------------------------
    # v9 L8 k* V2 E, a1 _& T" N5 V
  770. HEX_10
    : {- U- f4 U0 L% L+ o9 T
  771. CMP #10
    / Q% H' ^1 |7 O5 H6 a7 b
  772. BCC HEX_1
    . x' }: x5 O4 C( F+ N
  773. SEC
    7 ^3 a! W! n! }9 Y/ m. a
  774. SBC #10
    ! `5 l" ?$ b, w  A" ^
  775. INC DEC_T$ t5 t9 x5 F3 f* ~# \& O
  776. BNE HEX_10% T, X# {5 r8 @% E! R9 c+ ~
  777. ;------------------------------$ X% ~! Q# h4 I1 {) ?( a" X
  778. HEX_15 v* Q7 T# Y4 K" l) Z
  779. STA DEC_L  k2 j8 d4 J; m$ v+ c$ b
  780. PLA) U0 J" S" u1 f( P  K0 h
  781. TAX& }2 ]* d2 ~- s& l
  782. PLA9 X5 B6 |5 t; D) R/ I& R8 D& H  w/ u
  783. RTS
    ! x$ q( `: q' }% b) C* ^* g( [. g3 k
  784. ; z' [' Y4 `2 C  g4 F
  785. ;==============================
    # l7 W- [" }; W
  786. ;音乐曲目显示& f2 X9 V, t! ]4 R
  787. Music_Show3 X7 H# w* @6 W# ]& Q: K; Q
  788. LDA Music_Cur
    5 i; A3 d& D) ?/ `% @$ ^: Y; O
  789. CLC, S3 l# J/ [+ |. o3 l0 i$ B% ]
  790. ADC #$01
    * R& S6 O+ b" M# h
  791. JSR HEX_To_Dec
    # b$ [5 d( t2 H1 |, `  }+ S3 b0 A
  792. LDX PPU_Cur3 C( |5 Q( s( {/ b5 X  O; t
  793. LDA #$FD
    8 Q* n" d7 A  p" h
  794. STA PPU_Addr,X5 W( z8 ^  X7 M) t0 \. Y0 v
  795. INX
    . \2 V$ l9 u* \4 ?' s
  796. LDA #HIGH(Play_Index_Pos)
    " i  k2 Y0 Z4 x" ?) B
  797. STA PPU_Addr,X; ~& R& ^0 r4 _) F! h3 W7 [
  798. INX
    6 K& {2 i0 M6 [2 _0 x/ I
  799. LDA #LOW(Play_Index_Pos)
    # X: D% @! O: V
  800. STA PPU_Addr,X0 g; m0 j9 w- i/ W* J
  801. INX" n& `5 q% V& p
  802. 0 P- a% `% F3 C
  803. .IF Music_Song_Total > 99" M! w& @) ~: U" k; [
  804. LDA DEC_H
    1 z* ], g$ m0 {: W" S  c
  805. ORA #$302 `" x' Z: H6 M# ]
  806. STA PPU_Addr,X; g3 m% U% Y" ]5 R7 \3 P# c
  807. INX! E  v, K9 |0 B; h" R8 \
  808. .ENDIF
    - r6 F4 O7 t4 k! z1 D" r, [
  809. % z2 u* J1 ]4 G2 u8 [6 e
  810. .IF Music_Song_Total > 9
    / s3 {8 c+ ]! j3 Z! H* B
  811. LDA DEC_T2 h' a7 Y( n; F! |- `1 Q5 A% l: H8 K" k
  812. ORA #$30
    . _" p7 f) K7 ^- ?
  813. STA PPU_Addr,X0 r7 q+ f4 B9 M
  814. INX
    ( h: i6 A7 M8 f: l7 z. @
  815. .ENDIF$ m2 N; _# A$ _- g, u- D1 L

  816. , D4 ^) U6 n* N# s6 x9 x9 T  @
  817. LDA DEC_L
    * w! W. K2 J; I" }- i8 y0 }
  818. ORA #$30. x6 p# G% D) G7 W
  819. STA PPU_Addr,X" W. n9 h  x$ E, X% e
  820. INX
    ' W% B* t# I4 D/ T
  821. 9 A6 a: w7 h+ V( m1 L- i, b
  822. LDA #'/'
    1 U. R2 n$ k) g+ l- |6 R
  823. STA PPU_Addr,X
    # @* a* V/ N( I- |/ `/ Y
  824. INX# P- a6 F. E" Q: b
  825. Music_Show_Total1 O7 G- F5 \  W* m) }9 p* e
  826. LDA #Music_Song_Total
    + U; d- |6 b' |1 f
  827. JSR HEX_To_Dec$ ?7 Y- Q( e, h3 Y: K0 V* F
  828. + z' V5 i/ M3 W6 e2 ?" p+ i
  829. .IF Music_Song_Total > 99
    / r8 S' z% z$ P6 h" X1 m
  830. LDA DEC_H
    " I" ]" t( k" k5 w
  831. ORA #$30
    - o; L5 D5 z& s- R) L" Z6 F
  832. STA PPU_Addr,X
    7 Q: t3 p! Y) G& ]
  833. INX: l9 w8 d: F) S9 E/ ^$ R
  834. .ENDIF
    4 n* ^7 z" s  U) Q5 Q

  835. % ^9 o5 Y! L% @3 \% Z
  836. .IF Music_Song_Total > 9
    8 r8 t7 T$ l" o( z- j
  837. LDA DEC_T0 v! a" h2 e5 z, M: X
  838. ORA #$30) N7 u0 N8 Z# P& ~. D' I
  839. STA PPU_Addr,X# K& X- h$ H$ u+ j8 ^% C" x
  840. INX
    : ^; H0 H9 X, M4 t
  841. .ENDIF) l8 Z9 a3 W) G3 X+ y, _5 s$ \

  842. ) G4 l/ ~: r8 {9 D
  843. LDA DEC_L( ?3 H/ |8 E+ V0 I1 g
  844. ORA #$306 P8 T( ^+ ^, A' r* I% N6 X
  845. STA PPU_Addr,X
    . h8 q' {) I5 A) K5 v1 O
  846. INX
    3 U/ K- g- [$ k5 G4 ~5 K
  847. " S4 ^1 Z% p. ^% n
  848. JSR PPU_End
    . S" e+ a/ S' q; X$ h& F" l
  849. Music_Show_End. K6 w5 u9 X* t$ x' S" K
  850. RTS' O& e0 w1 ^1 e
  851. ' P9 @# ^- r# Y! V1 _  I6 e
  852. ;==============================
    - u" K  e  y- @9 _# Y
  853. Time_Show;播放时间显示8 |$ k) w1 }# j) x+ W
  854. JSR PPU_Addr_Set; m! }+ \* R- j! [' j; g
  855. LDA #HIGH(Play_Time_Pos)
    ! f& F# {& a7 a
  856. STA PPU_Addr,X- W0 ?% n- W# q5 c8 @8 @: v
  857. INX
    " ^4 [) b' Z+ }4 j% N' x& v4 B
  858. LDA #LOW(Play_Time_Pos)+ C9 l3 e* @! q  }: r
  859. STA PPU_Addr,X1 m% ^; N! u6 w7 l2 ^7 Y
  860. INX& n6 |& ~1 q6 N, P' f. v& t
  861. Time_Show_H
    4 u: K( }! o+ `3 {
  862. LDA Time_H
    $ ^4 a: X6 \8 c" P9 f: j. \9 T" w
  863. JSR HEX_To_Dec+ r' z4 _3 f  u& \: I" l) T4 w2 V* G$ X
  864. JSR Time_Digit
    ! U2 I; G# p# {. I$ i
  865. LDA #':', B5 j/ p& w% o, t: r
  866. STA PPU_Addr,X" N. z2 B' Y* o: E8 X* G
  867. INX. ]- q# B# v8 Y7 d6 v( f9 g
  868. Time_Show_M( d& T0 c4 x, r/ {0 l- f
  869. LDA Time_M$ Q, E; R3 L* {
  870. JSR HEX_To_Dec
    , {$ a* C) R7 ~& V0 n" }
  871. JSR Time_Digit* p6 n$ h5 K0 K& l& N6 E$ I. R9 M
  872. LDA #':'& {( l% T3 t) u7 t" p2 C9 N/ y
  873. STA PPU_Addr,X3 i- ]/ m$ @1 C% ]' i
  874. INX4 |" E6 |# i6 g0 A7 [
  875. Time_Show_S- p. G- b) h# O( G2 l
  876. LDA Time_S
    7 `8 S0 I0 R6 B3 w; w6 H7 S0 _
  877. JSR HEX_To_Dec
    , b# q1 g3 K7 `7 P( W( L, s
  878. JSR Time_Digit
    7 c7 u! |' p; v" v1 _3 O" U
  879. JSR PPU_End- N" ?! M8 }4 [8 N
  880. Time_Show_End
    ( x' n/ _4 ?8 e5 E( Y- W2 G/ g$ W
  881. RTS9 N' x+ @8 m2 o2 C1 \

  882.   V/ q) E; E, _5 c/ H- h: o
  883. Time_Digit( k8 C7 s+ U: @
  884. LDA DEC_T% a0 d6 ~8 z! F* U  j3 M4 e: K
  885. ORA #$30
    8 y; s) `7 k4 ]* l/ c
  886. STA PPU_Addr,X5 }% L* \+ k4 v# X/ f
  887. INX
    0 A: o8 z4 m0 {$ |: b! [+ ^# ~
  888. LDA DEC_L
    3 A  Z8 j% O9 ]
  889. ORA #$30
    , I# C' ?! f' y9 ]% U3 g
  890. STA PPU_Addr,X5 B* s  \# x2 F+ Y& I" l4 E9 [
  891. INX' C) e5 n7 k9 S; m2 S7 s
  892. RTS  t2 x' l. e6 Q3 @" \# A

  893. 8 \6 {: e2 z" }9 z9 G. t1 p( E
  894. ;==============================
    % K) v/ D3 Y& V6 {5 y
  895. Time_Count;计时0 c6 v! u; U, u/ {0 p
  896. LDA Music_State' a1 A% L6 p' j/ b
  897. ORA Time_Wait_Cnt2 U2 }! V1 ]* i4 ]& F
  898. BNE Time_Count_End: ~/ D. T! ?' n3 f% {7 E1 Z3 A
  899. INC Time_Cnt8 r4 P# x% x$ v) }' H6 B
  900. LDA Time_Cnt3 \0 |. T9 \% O" ~
  901. CMP #60
    8 X! W5 z3 c+ o
  902. BCC Time_Count_End
    2 z( s. _, L  V! F, X& G
  903. LDA #00
    ( K* N7 J! _+ B, V1 S/ `2 y& ~
  904. STA Time_Cnt8 _% ?0 y% E( K. g0 c% P6 x
  905. INC Time_S! U8 f' \# Z; n2 {

  906. 3 y! x. z. x. e' d. O
  907. Time_S_Cnt$ d, B; i7 f# E9 v% w9 S8 O% w7 A
  908. LDA Time_S0 ]' _% C5 z1 c/ S% }, ~$ x, S3 C
  909. CMP #60) e3 W# y1 z( c" H9 }2 _& D1 c
  910. BCC Time_Count_End
    + G7 o7 r" o+ O4 @: H2 Q5 Q( I7 N
  911. LDA #006 J" c* Q! N9 d. M' \
  912. STA Time_S  {) I: i( m/ V1 k: l. k
  913. INC Time_M6 Q! u9 F2 ]! f, ~) \

  914. + e  t1 j' ]& n: C
  915. Time_M_Cnt; k' s* m, I% f- b
  916. LDA Time_M' p6 J" G( D5 N# G9 v6 ]
  917. CMP #604 r: w# `) O" @$ P7 j, l% E
  918. BCC Time_Count_End
    0 l3 `1 ]; _9 ]" p5 {: V
  919. LDA #00
      ?2 S/ e! o/ j; j- S, }* N8 j
  920. STA Time_M
    - S; C5 o+ ?! H7 G' A; e0 j
  921. INC Time_H
    3 H7 O6 L( a- U- z
  922. " M) J! z4 `2 F4 I
  923. Time_H_Cnt
    1 A' Y- U8 E* r
  924. LDA Time_H- [8 g0 C3 J( ~! h& H, j
  925. CMP #24
    : K& k/ K9 T4 y  e* f8 v& w. P
  926. BCC Time_Count_End' Y# K7 |1 x' y: Q9 g
  927. LDA #00
    0 Z* _; H9 {0 e# x4 x. g
  928. STA Time_H' o6 f( C  F' j% w4 d

  929. * U0 J% h( `% P  z; k, {2 I& E
  930. Time_Count_End$ t! f- O4 |+ p7 J
  931. RTS
    0 n( t: ?! {8 H

  932. * H5 r) o$ _1 e: R8 }- W5 f7 X) W
  933. ;==============================
    7 P9 S/ z* x/ Q" @! c9 }4 m
  934. Time_ReSet;播放时间重置+ d+ E, o+ y. y
  935. LDA #$006 A; A/ z; N6 C+ b: U, x# W2 r
  936. STA Time_S' p, j/ d3 b7 n1 h9 F* H$ h
  937. STA Time_M
    - l  X1 O) d# S. ^" T7 @7 L
  938. STA Time_H7 {: m) y* ?' S4 `, C8 R- s
  939. STA Time_Cnt6 x2 ~$ o  q3 ?4 K* T
  940. RTS
    1 n# C4 y* V0 A3 n% d" T

  941. # f- n% ?+ p3 g5 M6 V2 f. c
  942. ;==============================
    8 L  H1 r  m! @( h/ p/ A
  943. Music_Bar_ReSet;音乐条重置+ Q( T6 F5 J& O
  944. LDA #$00
    0 L# Y0 k& ]. F; r/ f, r
  945. LDX #$00
    , |# v8 x0 o/ u4 ?4 o
  946. Music_Bar_ReSet_Set  ~  N% G6 \0 ]% h! c+ S; X. z
  947. STA Sound_Bar,X
    * ~( Z( {0 F, U
  948. INX
    ) s5 _# }2 y, F8 O. J
  949. CPX #$10
    & v' B0 [4 k0 M% H/ b( u
  950. BCC Music_Bar_ReSet_Set5 T4 ^2 q/ c' k" n
  951. RTS
    ) v+ S- U' g' P% v4 Q
  952. * l  x) f+ |6 E, a+ r+ S! N
  953. ;==============================4 ~# j3 h7 g8 E/ I
  954. PPU_Data;PPU数据写入
    0 |0 I/ o, t$ j. N; s( W& L% i
  955. STY Data_L2 w: m! w, W* J5 v+ m5 Q' \$ @. x
  956. STX Data_H
    3 O- b! W! P$ n2 g
  957. LDY #$FF
    : H- k' \% J( j: l
  958. LDX PPU_Cur1 U" J0 L, {- _7 z5 q* q  l
  959. DEX
    ; P3 l" d5 l4 C2 }, }
  960. PPU_Data_Beg7 x, Z8 A+ s! P& ^
  961. INX/ R# p6 @7 F# P
  962. INY' x+ f4 G' I9 |
  963. LDA [Data_L],Y
    . [: v6 c& k% F. K4 _. c3 O& ?. U! H
  964. STA PPU_Addr,X
    1 z  p8 o' i( o" ^8 L. G0 ?8 ?
  965. BNE PPU_Data_Beg
    6 q* ?5 ]% g3 ^/ ]& O
  966. STX PPU_Cur
    . R  }( L. J; J" \
  967. PPU_Data_End/ ~; f, I5 Q; v$ a- G3 ^
  968. RTS
    , C) S& O2 R% I- `" G- ]1 U% |
  969. 1 C% _, v* a& h) k) D5 L- S+ t
  970. ;==============================. F+ k3 ^& N& H- Z% b4 F
  971. Music_Stata_Show;播放状态显示- j: K1 o9 f1 _; i" \& N
  972. LDA Music_State
    1 W8 l4 X- d8 Z' e; q
  973. BEQ Music_Stata_Show_Play
      {3 |3 g9 f$ M3 G" a+ ?, X
  974. Music_Stata_Show_Stop
    . e9 m: e( C0 t
  975. LDY #LOW(Music_State_Stop)
      e; q7 S2 P! R- A6 j5 g
  976. LDX #HIGH(Music_State_Stop)
    " i% g1 o. ?3 R  A
  977. JSR PPU_Data+ Z/ \$ _! P( v! Y; o$ i
  978. RTS
      C# z; q" ?6 J$ I
  979. Music_Stata_Show_Play
    ' r( a7 _- M* i7 e" v$ f% R- l
  980. LDY #LOW(Music_State_Play)% l* H( w/ h0 F4 o3 _; ?# X* j
  981. LDX #HIGH(Music_State_Play)9 S- g% b; |' H$ R3 _! G+ F
  982. JSR PPU_Data, C# s6 a4 s2 h4 [, y
  983. RTS3 o1 D/ z2 {$ S" E1 I0 D4 W& S

  984. 4 T6 {" U$ i* g/ w* ~. T
  985. .IF SOUND_BAR_SHOW_ENABLE
    & b) P0 Z8 z% `8 `2 P
  986. ;==============================, U# R; ^+ x, `+ `* y( \9 _
  987. Sound_Bar_Text_Set;标题与音乐条初始化$ A: ?" Z5 S; O- O( e3 `* D2 I5 \+ _9 i
  988. LDY #LOW(Sound_Bar_Text_Data). _% `* l3 u+ e
  989. LDX #HIGH(Sound_Bar_Text_Data)
    1 t/ b5 L# H4 e- Y1 S0 N/ Y
  990. JSR PPU_Data0 ^* U% F9 y- r2 X! K2 ~* r$ T! s7 a/ j
  991. RTS9 ^1 n5 ]% i# F

  992. 5 m$ Y' h* q" v  h  i2 [* A& w
  993. .ENDIF" d2 {8 r9 a  E# r
  994. - b' y  H$ F. D* D
  995. ;==============================
    ( O# D4 r( C& }1 H' Q  |
  996. Set_NameTable_Attributes;设置命名表属性% S1 S9 S( [$ I
  997. LDA PPU_STATUS
    $ C5 Z5 y2 m' y& \
  998. LDA #$239 n+ P7 N  d7 L+ z# @
  999. STA PPU_ADDRESS& t. u$ _! o. O8 S+ W' p4 t
  1000. LDA #$C0& G# T1 n: c4 M8 J3 r& ?% L
  1001. STA PPU_ADDRESS+ a/ h3 i; R: n, K6 r, H" S& I( y4 {
  1002. LDX #$00$ x$ k& ~# E/ w3 G
  1003. Set_NameTable_Attributes_Write
    8 u9 ~- R- d9 M6 ?2 ~
  1004. LDA Palette_Attributes,X: M# n2 p/ Y0 t+ Q$ `+ I
  1005. STA PPU_DATA6 S. J* ~7 ]4 F8 |% r2 v& l2 j
  1006. INX$ N. I8 a1 ~* h- W& c
  1007. CPX #$40
    / d, M' o; S, L1 X
  1008. BCC Set_NameTable_Attributes_Write4 P3 c! |0 `4 d  {. A
  1009. RTS5 `/ B  B9 u6 Y6 F. o

  1010. , p2 ^5 }/ P: f9 c
  1011. ;==============================
    ! t' F9 k0 c2 B, P0 o( Z* _
  1012. Set_Palette_Color;设置调色板数据
    ; {5 P- j6 x' D" s6 g! l  Y
  1013. LDA PPU_STATUS
    ) x  r: @: X# x
  1014. LDA #$3F
    " C  @+ t; g8 r4 f
  1015. STA PPU_ADDRESS. H- N, `1 _: o5 i
  1016. LDA #$00) C8 D5 L$ `% y4 g% q( f
  1017. STA PPU_ADDRESS
    : Q- A* V- @' Y& L0 z0 s( ]% f. J
  1018. LDX #$00
    : V8 N8 G' a! R6 t
  1019. Set_Palette_Color_Write% Y7 _1 n/ l, k0 U- O$ |& n
  1020. LDA Palette_Data,X7 Z6 B% j1 q0 k* e% t
  1021. STA PPU_DATA% g7 R/ W5 d3 A% q" h
  1022. INX; [& x. M" v  w) M* ^) q
  1023. CPX #$20
    % Q% M( Z; T9 ?1 `& V# Q! d& x8 z" K- K
  1024. BCC Set_Palette_Color_Write9 J/ u+ H  V8 Q& N9 o! F
  1025. RTS
    ) W! R% a* V: p0 O
  1026. ( w, M, }( w! I
  1027. ;==============================
    8 M: t) o8 m6 [6 G- ^' X6 o
  1028. Init_Palette_Addr;初始化调色板数据
    # S9 U2 [% b: n1 i' v
  1029. LDX #$00/ k* R" D" _2 b$ k5 T: c+ D; A
  1030. Init_Palette_Addr_Write" a0 w$ |; E, _1 r0 A* Z0 a
  1031. LDA Palette_Data,X# U) q0 S2 E/ z. S0 Z) i. x
  1032. STA Palette_Addr,X  S5 C5 v6 q5 V% b2 M2 F1 P4 a
  1033. INX
    5 [% c( b9 l8 S
  1034. CPX #$20
    , \# u9 ~+ `9 V4 c
  1035. BCC Init_Palette_Addr_Write. R6 Z, T4 H9 X% m9 ?4 i$ ^
  1036. RTS4 Z% W6 V. s2 j& K+ \$ p( l
  1037. ( z$ a$ o( f3 Y8 D
  1038. ;==============================  D- d+ F; ^- D9 B' h6 _
  1039. Update_Palette_Color;更新调色板颜色
    # A2 S8 c( Z9 q
  1040. LDA Show_Track_Name
    ) A' A' L, H3 {
  1041. BNE Update_Palette_Color_End
    ' E! o, t1 Z, U. Q( ^
  1042. LDA Palette_Update_Flag# W1 Z, {; v" y5 j9 o
  1043. BEQ Update_Palette_Color_End( Y: o, E- A! N/ H8 O3 D( i8 l% U, \
  1044. LDA #$3F
    1 R1 R" ?$ [# d1 n5 ?# ^
  1045. STA PPU_ADDRESS
      j+ E: x8 G6 \
  1046. LDA #$00! y: E0 b1 _# Q. N) O  L
  1047. STA PPU_ADDRESS
    & t; T8 O) R3 z1 h: [) n9 @
  1048. LDX #$00
    ( ]4 A- C, C0 ?! l! b
  1049. Update_Palette_Color_Write" q" C0 i5 b5 Z3 ^/ E/ \
  1050. LDA Palette_Addr,X
    2 [) ]. b1 V1 w5 C6 e$ p
  1051. STA PPU_DATA
    + w0 Y; \4 B$ Z! `" M( n
  1052. INX" R8 i/ J3 v; X
  1053. CPX #$20
    / b) C2 n& j$ d( y* d5 D
  1054. BCC Update_Palette_Color_Write
    # M9 h! M! u: x: W" O
  1055. LDA #$00! Q& M/ d7 w- ]5 r! D( ]
  1056. STA Palette_Update_Flag
    5 j) E! ?) a7 q1 E! f7 F1 c
  1057. Update_Palette_Color_End2 f1 H# S1 I- d" T4 Q# {
  1058. RTS# p! k0 J. O  L/ b/ w  z

  1059. 1 o) H5 x2 t7 S
  1060. ;==============================
    $ f" m1 \5 w! ]  z8 G
  1061. Update_Palette_Data;更新调色板数据* a* g! n1 i/ c- F$ ~8 h  Y
  1062. LDA Show_Track_Name
    # Y3 w3 a* w  A  I
  1063. BNE Update_Palette_Data_End9 h/ I( v, G6 }+ A# L- p
  1064. LDA Music_State0 P2 T# {( N. e# R3 R! `2 i+ S
  1065. BNE Update_Palette_Data_End8 u" m, p. ]! v
  1066. Update_Palette_Data_Check
    3 I( s  k+ d/ a/ q8 ]/ ^
  1067. LDA Palette_Wait_Cnt
    4 ?$ v, j# j% j
  1068. BPL Update_Palette_Data_Check_Over/ `! C. R1 a: P) {# f6 G
  1069. LDA #Palette_Update_Interval
    % W8 _6 a9 }0 p2 J
  1070. STA Palette_Wait_Cnt
    3 {8 y- G# M6 `$ j6 w; z1 q
  1071. Update_Palette_Data_Check_Over% c/ J* ~5 a* W( f4 b- ^" f+ D
  1072. DEC Palette_Wait_Cnt( b1 M, m3 h- W# I% W; {, R; L/ H+ a
  1073. BNE Update_Palette_Data_End
    8 f0 s! ~' \. a& G
  1074. INC Palette_Update_Flag
    0 t& \! K+ x2 b7 b. t7 I
  1075. LDA #Palette_Update_Interval. T5 W: l5 l( C% h5 d
  1076. STA Palette_Wait_Cnt
      j8 [. N1 A! Z: ?
  1077. LDA Palette_Update_Addr
    6 P2 y4 g! O; D6 J
  1078. CMP #Palette_Update_Max
    / R/ N3 \* V! D! o
  1079. BNE Update_Palette_Data_Set+ o( l( b) y! q/ q; P8 h
  1080. LDA #Palette_Update_Min - 12 ^& e; \2 ]- p1 ~5 n
  1081. STA Palette_Update_Addr$ {, r: n$ P9 S/ D0 Z4 t' U6 r
  1082. Update_Palette_Data_Set
    ! C- Z& a. f: ]) c8 x
  1083. INC Palette_Update_Addr
    # F: w, _' v' r/ s4 _* }; d& d
  1084. Update_Palette_Data_End
    3 z% Q% |  F( ?9 @$ F. H* ?6 Y
  1085. RTS
    2 E! [$ m, g! t! e0 g4 x

  1086. $ ?7 y9 x7 q& M7 ]. I
  1087. ;==============================
    & W" Y1 d& w1 ~7 k3 C
  1088. Show_Music_Text;显示静态文本6 Q% i* v, p+ S) D# `, j( M$ _: Q2 D
  1089. LDX #$00/ J3 T# _3 Q9 B
  1090. Show_Music_Text_Set+ Q( f  I, g# p/ ?3 f
  1091. LDA Static_Text_Data,X
    6 j: B/ E1 ]8 h$ K. {
  1092. STA Data_L
    8 ^& B. K% ~4 H* X2 r
  1093. INX
    , _' \  p( w" G- E$ s
  1094. LDA Static_Text_Data,X6 P4 \  x: T% U9 I! y6 ]
  1095. STA Data_H5 O6 }. Z# O. u4 @" I
  1096. INX- B$ \) [, Y9 K3 Y( l$ g+ K
  1097. LDY #$005 H+ \5 p4 ^, c+ U& @
  1098. LDA [Data_L],Y
    / k9 U6 K2 ?4 z3 Y. W2 i' S
  1099. STA Data_Cnt
    ) M1 G: C" N% j7 G% _
  1100. DEX% v% j4 H+ u  X$ w1 l1 U
  1101. DEX, |9 p: P+ ~3 u. M' U% h
  1102. LDA Static_Text_Pos,X( H9 Z+ J5 P; `! o0 t
  1103. STA PPU_ADDRESS$ }8 y: {. e) B& n  h* G* ?5 ^+ G6 v# x
  1104. INX* j9 ]: w  B; {5 _/ F- U
  1105. LDA #$20, }$ d$ q& [3 p8 {" W
  1106. SEC
    3 W- t1 R2 H! U9 d
  1107. SBC Data_Cnt! T$ ^; T4 L! k0 J( i$ F; d+ L
  1108. LSR A9 @$ {5 o: t* T9 ?
  1109. STA Data_Buf2 H0 m+ H9 C- Z$ z
  1110. LDA Static_Text_Pos,X
    9 d/ B0 ]$ f* M, t! d
  1111. AND #$E0  Z! H, T0 g) f2 q+ c
  1112. CLC
    ' C9 l* B. H. D3 L9 \/ N' k+ s" `
  1113. ADC Data_Buf) f/ Z. B' E# ^' v6 Y' L1 D2 ^
  1114. STA PPU_ADDRESS
    " b4 e5 N' i; E. ^6 x% s7 f
  1115. INX
    - |- }6 C8 G! b; T' ^/ h! m" D) `
  1116. Show_Music_Text_Set_Write* t) d+ Q5 E' J# _- n4 ?2 E' I
  1117. INY
    8 B5 H5 ^, H8 ?5 J
  1118. LDA [Data_L],Y
    2 Q+ Q  H6 e% ?0 ~9 x
  1119. STA PPU_DATA
    8 [' c3 s  G3 n, ~  Y
  1120. DEC Data_Cnt
    ! Y5 E# G3 M! _- r" _3 G; H
  1121. BNE Show_Music_Text_Set_Write
    + z* t) r' z3 @9 ~
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    & R( B$ `: l2 D* \" o' E
  1123. BCC Show_Music_Text_Set, \, _' ]9 d  m4 @4 }
  1124. RTS
    " z8 O7 E+ S4 g

  1125. + l" j0 _3 Y4 W9 i
  1126. ;==============================
    3 P% ?" |( G# s3 l# I
  1127. .IF Track_Name_Pos;显示曲目信息
    % Z/ i- L/ a# _" B! o0 Q! K
  1128. Show_Track_Info7 V& }; H4 x( x3 A/ u" f
  1129. INC Show_Track_Name( A5 ^5 M( k5 ]4 F% e
  1130. Show_Track_Info_Clear$ J6 M9 b0 ~  `/ S+ ?! x: ~; a
  1131. LDX PPU_Cur7 s/ }  s3 K4 [% @
  1132. LDA #Mode_Clear) l. p- H- O* B$ b; h* m' Z+ B
  1133. STA PPU_Addr,X  j+ \: }" k! _8 y. w: R! U" o
  1134. INX
    " s) ~5 E: F; m5 Q) s  j* o! z+ [

  1135. + @6 I- U& Z5 x, A+ q
  1136. LDA Music_Last
    9 r3 |. A1 f: X4 o. k8 j
  1137. JSR Show_Get_Track_Name_Center_Pos: ?) A6 z+ f( f- \2 V8 \1 W
  1138. Show_Track_Info_Write_Cur
    - u0 N) y, G( A) y
  1139. LDA #Mode_CntLine
    " O2 X. Z6 e7 u. H9 L0 x( W1 z
  1140. STA PPU_Addr,X0 L3 d% Y* N4 ^/ x, C
  1141. INX
    8 v3 h7 ~) l" u6 v" A! g# n  K
  1142. # |& S) O  |/ @
  1143. LDA Music_Cur4 T2 [# X0 I4 K; G. v
  1144. JSR Show_Get_Track_Name_Center_Pos, _; ]) Q4 P( ?  m! b  q8 ~
  1145. 6 Z, \9 {7 x5 w5 `) K
  1146. Show_Track_Info_Write_Cur_Data- @$ @6 ^; X+ j* k9 ]: U
  1147. INY3 {/ n' x) y& ?* D$ Q& ~4 g
  1148. LDA [Data_L],Y
    + _# o6 p, y# P. [! b) e
  1149. STA PPU_Addr,X
    0 e) l3 H* h* I* ~
  1150. INX
    0 S  }" s) t' F; a+ X
  1151. DEC Data_Cnt
    0 {& S* @5 M3 o6 v% Z( c
  1152. BNE Show_Track_Info_Write_Cur_Data
    ( W* l9 r; y9 k/ Q
  1153. Show_Track_Info_End+ X( ?# s: _1 b: P( O' Y! s
  1154. STX PPU_Cur! W3 f( b% v9 ?, K! f
  1155. RTS$ K. W  G3 X4 J, j, |0 o0 p( M
  1156. 9 }! _% V* E' n6 V* K
  1157. ;==============================, d' N, T$ w+ r- y! W
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    , i4 n$ k$ s. n- H$ X9 @5 W
  1159. ASL A
    ( g0 p8 I8 r& ]1 g; e; D( q* J8 S
  1160. TAY; \$ H. x4 k$ R4 Z6 f( C: A5 T
  1161. LDA Track_Name_Addr,Y1 A" P, n- s% k' v
  1162. STA Data_L! D# B& m' n+ T0 b  {8 h* N8 e9 g
  1163. INY8 T2 t: F$ n& h" F8 S# g8 R$ |
  1164. LDA Track_Name_Addr,Y2 }$ y, |6 P3 H7 {7 P
  1165. STA Data_H
    , v2 N/ f7 C/ I3 L0 `! P/ ]
  1166. LDY #$00: U% o. ^2 r7 s
  1167. LDA [Data_L],Y# C# u* P7 B! |# {: T5 ?) @
  1168. STA Data_Cnt
    - ]& x0 Q0 x! L2 ~9 A/ ?
  1169. LDA #$202 G; c+ G* L4 R  x. T
  1170. SEC9 K0 ]8 Z9 [$ h- z
  1171. SBC Data_Cnt0 h6 [+ v1 Y+ G  z- z
  1172. LSR A
    / y( v% B7 W- h0 n9 K
  1173. STA Data_Buf3 q# k/ f$ {, g
  1174. LDA #HIGH(Track_Name_Pos)% c8 c2 Z9 I2 p6 n! W% ?
  1175. STA PPU_Addr,X' U9 p9 ]9 ]# J, B) N% C
  1176. INX; h7 Z! _5 g7 C& U3 F
  1177. LDA #LOW(Track_Name_Pos)
    " r, X! [8 V- {% }' @. H
  1178. AND #$E0" u. o  ]* X2 E* L0 x2 N
  1179. CLC
    4 ?0 h8 d" B" |' _
  1180. ADC Data_Buf$ r* P4 F6 h, l7 X! w  ^# ?0 b) |
  1181. STA PPU_Addr,X
    % {% L7 Y$ x7 p2 }+ v4 q
  1182. INX" @6 w9 H9 u5 w' r' i+ g
  1183. LDA Data_Cnt4 O* U( i& Q. x
  1184. STA PPU_Addr,X
    0 ^5 D! S7 x6 J) l  \& Z4 U
  1185. INX
      v: ]* J; }7 g
  1186. Show_Get_Pos_Center_End; M: C' G6 T6 N4 |+ w) L3 L
  1187. RTS( q) ^2 |* @0 z9 O; \
  1188. .ENDIF+ B! X3 `8 r. }+ f) C

  1189. 2 Q4 O* V3 f" D
  1190. ;------------------------------
    $ `5 K$ J3 |0 n& L* x
  1191. ;命名表数据/ N" y0 B7 p# e6 p
  1192. Palette_Attributes* _; G1 J! L/ k# l( Q+ y) _: e
  1193. .IF SOUND_BAR_SHOW_ENABLE  }( n- p+ ]8 r# {4 r% G+ Y0 \4 O
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00$ a. N9 C9 h" V7 D4 d* s% h
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA5 [+ d) T' `; l( A+ Y* W$ |5 M
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$554 F8 N( {+ z8 N1 V* G. G% L/ h
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$553 u' M# {, _  U/ N, ^* A
  1198. .ELSE
    $ e: E! Q6 T9 j0 ?
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    6 R( v  G( c9 c
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    % q0 j8 B# a9 S# {; g; u
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55+ B# H" l* e: L( e  T; K
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    : X! ~: k8 b4 i4 \/ `
  1203. .ENDIF
      P: U# S! r3 V6 I0 I  @( e
  1204. $ I  K' T: [7 d! D! f
  1205. ;------------------------------2 d( E5 f: I$ Q- ~" f
  1206. ;调色板数据
    7 j$ L9 T5 e8 B+ Q- f$ E0 ]7 t
  1207. Palette_Data
    : X, h# @. u' A9 N. L: {
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F  A8 c& ~* p' Z0 {6 e3 t
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    * t& p" W# J1 k2 A! z. S: x

  1210. 3 |  g& t7 ~7 I* F$ I- ~
  1211. ;------------------------------
    3 u3 l7 B1 [$ d# {# G) J8 X% E  P
  1212. Static_Text_Data) \2 w5 O/ _  _- |( g
  1213. .WORD Static_Text_Title_Data
    + j  \: M$ e6 }, R) Z5 [8 W& k; c: r
  1214. .WORD Static_Text_Author_Data5 e  r% O' ^0 n4 u( \( }
  1215. .WORD Static_Text_Date_Data! J5 H' k7 Z9 x  C4 B$ `
  1216. Static_Text_Data_End5 @  k1 C, B7 w
  1217. 7 \  K9 O0 H! X3 @0 }3 P9 y
  1218. ;------------------------------
    + b1 o3 W* ]& b# l2 K  A1 `
  1219. Static_Text_Pos) @8 Y& w3 L1 h6 k3 _) V, N& U; @
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)/ `' Z8 L* z3 ]: B! R/ C1 k8 {, ?
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    4 e1 K6 y- D# c- U+ o8 Y* m
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)$ S2 D$ W3 t! P( b
  1223. Static_Text_Pos_End+ i) X  @7 h3 |/ f
  1224. % D9 S" ^( P. D& U
  1225. ;------------------------------% \$ |' k4 C  g, Q$ N
  1226. Music_State_Stop
    4 A2 U. K/ ^4 s  m2 }
  1227. .IF SOUND_BAR_SHOW_ENABLE
    & [# j4 M3 u2 r7 \/ C6 K& s5 u
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00* z3 ?* I+ L9 l! n8 `3 _  y
  1229. ELSE
    / D9 t3 ~! }5 [; z4 N  V
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00# Q" N  q: y( m
  1231. .ENDIF8 C3 G) s7 i- l# k- l) W
  1232. Music_State_Play
    6 y8 G( ]) j7 f' \0 |% G0 ?2 y
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    * g7 n3 N; `2 @2 A

  1234. % ]; Y7 d, V7 Z
  1235. ;------------------------------/ W+ `! Q9 i% h
  1236. Sound_Bar_Text_Data;声音类型文本
    . [# y1 ]3 r, i- y2 v8 _# B% \5 L
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)) j/ i& A& @8 a, _4 C9 ^4 e% J
  1238. .DB "SQ1-",$FF
    , H9 l  @* }/ @1 b  L
  1239. .DB $FE,"SQ2-",$FF
    " y: C" H8 I! K- h: I
  1240. .DB $FE,"TRI-",$FF% @' ]/ p$ {  D) l
  1241. .DB $FE,"NOI-",$FF
    9 L0 e4 M5 e  _7 q6 I# B9 m
  1242. .DB $FE,"DMC-",$FF,$009 I" \5 x( k0 p3 G2 v, R

  1243. 8 b4 ?" |% W3 f7 C
  1244. .IF Track_Name_Pos$ W* H- s$ }1 m1 I* d% N
  1245. ;------------------------------
    9 j  Z; x8 Q0 u. t0 H1 s
  1246. Track_Name_Addr;曲目名地址索引
    - ~* B$ I# q: ^* M5 V
  1247. .WORD Trackr_01
    $ e: Z; |+ Z; t/ D3 t& u' p
  1248. .WORD Trackr_02
    9 @7 ^8 X( f3 q4 `' I) m
  1249. .WORD Trackr_03
    8 A7 {+ p, G$ u9 P/ i$ U
  1250. .WORD Trackr_041 Y3 b& a1 k% }& X- f4 F
  1251. .WORD Trackr_05* N) i  ~+ l3 q$ ~% E. ~" T
  1252. .WORD Trackr_06& o6 ]) W" }  f; |* v/ o) P' T7 b. r: q; d
  1253. .WORD Trackr_07
    6 }$ \! r1 J/ c4 ^- ?
  1254. .WORD Trackr_08
    8 g; \3 J* J# o6 I
  1255. .WORD Trackr_09
      H8 q* q8 B2 s9 a% m5 N
  1256. .WORD Trackr_10* N3 @5 D8 D0 Y1 R4 X
  1257. .WORD Trackr_11/ g- X; F$ o2 ]' Z' [3 s" J
  1258. .WORD Trackr_12
    2 u4 {7 z" J+ C( z& g& V. Z# Z
  1259. .WORD Trackr_13
    % {! H& g5 @" h7 {* Z: y
  1260. .WORD Trackr_14
      a3 W, V9 x/ v
  1261. .WORD Trackr_15: F* y# O% k1 P' H. k) i) E3 n
  1262. .WORD Trackr_16
    3 X0 y* s* V/ _7 R6 b2 |3 _
  1263. .WORD Trackr_17
    & k: @# P/ G" o" D
  1264. .WORD Trackr_18/ v6 T( Y" B9 }: k2 o7 [3 f' m$ U
  1265. .WORD Trackr_19) C) h/ a* l3 A4 p# u- f& o' A
  1266. .WORD Trackr_20
    8 A0 Q6 P) d' T' q4 n, S
  1267. .WORD Trackr_21
    - v! G$ {* Y; n; c0 G
  1268. .WORD Trackr_22  K; Y  g; j0 o: P# e
  1269. .WORD Trackr_23! j: z8 {+ U" l( H& m
  1270. .WORD Trackr_24& J4 S6 ]% Z( H2 |) O  w7 A
  1271. .WORD Trackr_25; ?) z3 J* o& W# ?: f; _2 L0 ^
  1272. .WORD Trackr_26
    9 Y; m7 u8 P2 x# O7 ^% k
  1273. .WORD Trackr_27
    8 L& u& a! i) T: z& o
  1274. .WORD Trackr_287 P- g0 U4 b4 d
  1275. .WORD Trackr_290 @2 H  g8 T. w; {$ }/ W: k% ^
  1276. .WORD Trackr_30
      g% d$ K1 z* M; B# l
  1277. .WORD Trackr_31
    , U* P* L- F' `6 p' y
  1278. .WORD Trackr_32/ T. K9 A4 V3 c6 H" Y2 w; d9 ]
  1279. .WORD Trackr_33. a8 w5 @9 {4 v$ F9 E
  1280. .WORD Trackr_34
    7 G6 B$ a. h* M$ R  u
  1281. .WORD Trackr_35$ z6 `% M& E+ f8 ?9 W  {
  1282. .WORD Trackr_36
    0 p" z/ V" v+ p; v& J8 p2 r
  1283. .WORD Trackr_37
    ! d  G) V9 r4 \! L
  1284. .WORD Trackr_385 T. c% ?+ X( F3 e- A" L0 p3 j
  1285. .WORD Trackr_39
    % j$ s7 w( K+ O/ z- v- C
  1286. 0 _3 H4 N% U' S8 k3 x
  1287. ;------------------------------7 d( s4 t! l# M, P
  1288. Trackr_Name_Data8 G% ^% }' W( q9 G
  1289. Trackr_01 .DB $05,"BGM 1"3 J+ h0 d/ k! ?$ }- y2 M
  1290. Trackr_02 .DB $05,"BGM 2"
    9 s  n2 v0 b( B6 o/ @; w  J
  1291. Trackr_03 .DB $05,"BGM 3", K- t& E# l5 C
  1292. Trackr_04 .DB $05,"BGM 4"# t1 {* m8 N  u
  1293. Trackr_05 .DB $05,"BGM 5"
    4 y1 r) K  W; y+ ~
  1294. Trackr_06 .DB $05,"BGM 6"4 z4 o2 g$ M9 x/ E* S
  1295. Trackr_07 .DB $05,"BGM 7"
    8 A8 V' f+ n  a6 W( [% a
  1296. Trackr_08 .DB $05,"GREAT"8 {5 a) v8 l- a; b
  1297. Trackr_09 .DB $08,"BOSS BOM"8 C3 F+ K8 i+ c
  1298. Trackr_10 .DB $08,"BOSS2BGM"- c$ I9 t0 _' \1 i6 J3 b
  1299. Trackr_11 .DB $07,"P CLEAR", Z9 T/ @  X# k% s2 `
  1300. Trackr_12 .DB $07,"A CLEAR"
    " `7 S; ^9 C5 D5 u+ K0 V9 X
  1301. Trackr_13 .DB $04,"OVER"& w$ I* x' X) \) m! c" `$ E7 w# y, C
  1302. Trackr_14 .DB $06,"ENDING"
    , S0 e. {/ v- W0 C8 h
  1303. Trackr_15 .DB $04,"SUTA"
    & \6 C& N# J) |3 k4 \
  1304. Trackr_16 .DB $07,"THUNDER"
    $ m! N, D. O+ W$ T
  1305. Trackr_17 .DB $04,"SHOT"/ B# h' R# @5 C, T# K2 B- h
  1306. Trackr_18 .DB $05,"LASER"' X* \0 ]' }% d  t" h  y
  1307. Trackr_19 .DB $06,"SPREAD"6 f% `0 V1 ~' |* b& k8 c
  1308. Trackr_20 .DB $04,"FIRE"
    ; b9 \/ f0 b# {  x2 p
  1309. Trackr_21 .DB $06,"B SHOT"1 H1 t7 C: V" Z0 H  D5 a8 W+ T! W$ M
  1310. Trackr_22 .DB $08,"T DAMEGE"4 b% g# Z8 l/ z3 M* s+ B
  1311. Trackr_23 .DB $07,"HARETSU"
    7 `, b9 l. }6 [7 |/ n7 W
  1312. Trackr_24 .DB $05,"T OUT"
    3 @2 k- ?8 C4 E
  1313. Trackr_25 .DB $05,"Z OUT"7 S" d4 K: z: k6 Q& \" N1 h
  1314. Trackr_26 .DB $05,"A OUT"# {$ X% |% b1 j! j8 P, p7 B
  1315. Trackr_27 .DB $04,"ROLL"& [4 S3 e' ^# Y/ K0 E' s+ L
  1316. Trackr_28 .DB $06,"APPEAR"
    " J* q& s' I) g
  1317. Trackr_29 .DB $05,"POWER"
    / k( h7 Q% S4 a, l, [  Y
  1318. Trackr_30 .DB $07,"BOKK BK"
    & @! X* r% r9 }9 ]- K& Z0 ^
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    5 A( _) S, A$ n4 }0 _3 j- |2 N9 u
  1320. Trackr_32 .DB $08,"BAKUHA 2"
      F8 j9 Z; g$ }; U; Q8 I4 q
  1321. Trackr_33 .DB $05,"ARUKU"  \. ]5 I- A' h  Y9 T
  1322. Trackr_34 .DB $06,"JIWARE"
    ! x8 v, l% Z+ ?+ x
  1323. Trackr_35 .DB $05,"SILEN"/ l( P$ e' [' R0 y; n" |
  1324. Trackr_36 .DB $05,"P 1UP"
    * Z1 @0 a/ g( E0 i4 g: M5 ~3 T! {
  1325. Trackr_37 .DB $05,"P OUT"* u( P/ n9 R/ ^# }4 Y' }& l( G# u
  1326. Trackr_38 .DB $05,"B OUT"3 Y# N1 R$ Z$ N/ _" {( [0 n5 V# `
  1327. Trackr_39 .DB $05,"PAUSE"
      z; H+ B. Y/ [8 l* H- \0 d
  1328. 1 L; l; `  ?% g9 F
  1329. .ENDIF
    ( ]2 G' O. g# q0 D

  1330. 7 S1 S; g5 A, O5 A/ s" V1 h5 G
  1331. ;------------------------------0 L* D, H* r6 b5 t, x& s
  1332. Static_Text_Title_Data;静态文本数据# L2 _. n; F# T- _) R
  1333. .DB 12* y& O' g  `# h3 K7 W, x
  1334. .DB "SUPER CONTRA"
    2 {) W0 h2 `( T! C) c5 {
  1335. Static_Text_Author_Data
    - d. g$ v2 Y( F* ?. i4 H7 Y% C
  1336. .DB 23
    8 r( Y  Z+ t) b- g
  1337. .DB "EXTRACT BY FLAMECYCLONE"; p$ p" r0 h% Y
  1338. Static_Text_Date_Data: r1 m0 j) A2 K0 |
  1339. .DB 10+ o# ~# M$ G2 h' }; I+ T, k" Z" H
  1340. .DB "2023.07.11"
    * s0 j8 M6 F* E

  1341. 6 M5 V7 t: l7 ~; g5 r
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    : N. X9 Y- n* E% b; L3 R
  1343. .ORG RESET_ADDR
    % q2 {) ?: f. N! p" r
  1344. 6 x1 R  A" _. d) U

  1345. / V4 `' S* E; A% C3 w$ H, s
  1346. ;==================================================
    , f) U( L5 n" \# b, k
  1347. ;切到主程序bank# V6 ~$ a9 q9 G. n( ~/ x% T
  1348. SwitchMainBank
    , S) O  \- h* C$ \' o' t. d. Y" [
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK- C% ]" z  y9 B: k# Q! n6 ?
  1350. JSR SwitchBank8000$ i2 N, F# m9 \
  1351. RTS
    # L) F/ f" n" W: E3 t7 u

  1352. 3 T$ ^- Z) F2 X1 s; I, k
  1353. ;==================================================1 o$ O% b2 O  [! x
  1354. SwitchBank8000;切换bank到8000-9FFF
    * a3 V( g$ j$ R" v/ I# U
  1355. PHA# k! A0 Y5 o# q
  1356. LDA #$06- `' i. d' u% C6 A
  1357. STA MMC3_BANK_CTRL& G, n& f8 {: g7 h9 B  c
  1358. PLA0 s' @/ J% T. b( G, g
  1359. STA MMC3_BANK_DATA
    * P# ?* m5 U. P' j; f4 @0 |8 p. f
  1360. RTS& {6 l/ q* }5 \- W

  1361. ! D& N. |8 s; H  t" K
  1362. ;==================================================
    # O, n$ _" f8 f: ^
  1363. SwitchBankA000;切换bank到A000-BFFF5 O7 T. O9 j6 f% l9 M5 @; g
  1364. PHA
    : F8 d: d% i+ C+ f
  1365. LDA #$07
    ; x. `* q' Y! a$ f) |: v
  1366. STA MMC3_BANK_CTRL
    : r/ @  J  U3 @& \6 d* v6 N
  1367. PLA
    6 l( P; J! G' d3 S& S  l8 c
  1368. STA MMC3_BANK_DATA
    # r: A" [3 L8 ~# a) J; ~# X
  1369. RTS
    % [6 b) \3 B& f" P0 j/ W
  1370. 9 A0 v" E* I* ~9 O1 E5 H6 B6 r8 N
  1371. ;==================================================& }8 V/ k" E) _# D
  1372. Sund_Bank_Init;音乐bamk初始化% f8 j2 H# l  `! W& `1 f! w- Q8 M7 ~
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    * Q' j4 c& Y5 \, k" B( x
  1374. STA Music_Bank_8000
    - [% W. S$ p( x: B8 w) c
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK* E5 z' r! {/ x  H
  1376. STA Music_Bank_A000
    2 p: K% O% ~3 Y! X0 X9 q
  1377. RTS) m4 p, y) L; ~# `

  1378. 1 H, d; h- x$ b) x2 g
  1379. ;==================================================( {0 y# h; O; p, ~* T
  1380. Sund_Bank_Set;切换音乐bank
    , J  s2 U4 d+ T! A+ h
  1381. LDA Music_Bank_8000' `9 z  F) D3 U
  1382. JSR SwitchBank80004 Q+ ^1 ], K/ m# E
  1383. LDA Music_Bank_A000
    6 L5 n. ^( P! J. A4 l8 v
  1384. JSR SwitchBankA000* n6 |" ^; L9 U. L
  1385. RTS
    0 N: W  F+ O' h2 }5 f, L. ~0 Y: ^
  1386.   @: r5 ^( _$ r1 K# e- E3 }5 @
  1387. ;==================================================
    " s6 f  `3 S) O, j% t4 \
  1388. Sound_Init;音乐初始化: Q( O0 b0 k; E+ j" i4 {9 o
  1389. PHA, L$ U1 E; n5 R$ a* J0 S( U- r
  1390. JSR Sund_Bank_Set
    % ?: S( s" g$ b
  1391. PLA
    ' b  w+ |4 {6 ^1 H2 H9 R# K
  1392. JSR Music_Init_Addr+ |' [/ Q9 P& r. F0 J
  1393. JSR SwitchMainBank
    2 ]' B5 o# a5 \- u: Z
  1394. 3 O6 U: j5 |, g4 V
  1395. JSR Music_Bar_ReSet. j- O" o' V7 g
  1396. JSR Time_ReSet
    2 q% X0 H; d3 P5 ?8 j4 B
  1397. LDA #$00
    & u% ]( {! p- W& j7 ]4 }
  1398. STA Music_State
    ( n' _- B/ L* W7 n) {, `  r( J
  1399. JSR Music_Stata_Show
    . s$ g8 [! a) U& Z* x* S
  1400. .IF Track_Name_Pos
    % }0 u5 H; u) h2 o1 S
  1401. JSR Show_Track_Info' R1 T5 _. X  v7 M! Y
  1402. .ENDIF
    # c: _, f0 H- N4 H

  1403. - B5 j8 s; l0 Z% T0 x
  1404. RTS
    , S% ^! y5 q5 }, r/ T: m, }

  1405. 5 _* Y. l; @; v  N7 d
  1406. ;==================================================
    ( r# |' }( g* N2 }% o6 ]# W+ ^
  1407. Sound_Play;音乐播放
    ! s. y# M, B- R- B
  1408. PHA
    * U) b2 q: Q- P1 H$ e: L
  1409. JSR Sund_Bank_Set
    ( N8 X/ s5 k/ m" @' b" `
  1410. PLA
      f! Y. N7 w' S# h+ a+ T0 k& ]
  1411. LDA Music_State8 L# B& t0 n9 B5 a# H5 e
  1412. BNE Sound_Play_End
    ) y0 f: D9 B3 J. T
  1413. JSR Music_Play_Addr! k% ^" G( z0 m" H
  1414. Sound_Play_End
    * t5 E3 @+ r, M& V+ X& l- V  S, P
  1415. JSR SwitchMainBank
    6 T8 a, x& W1 B3 X( j
  1416. RTS
    + ^. q6 p. Y7 G& t

  1417. " ?8 X# Q2 c( S+ T8 U7 x. A
  1418. ;==================================================
    * q4 i  e' c- k" c" I' D' M: ^
  1419. .IF Music_Reset_Addr$ |# @" C& T0 O( e0 d- d) {
  1420. Sound_Reset;音乐重设(如果有的话)+ K+ L5 X( v$ t
  1421. JSR Sund_Bank_Set: B+ M' V" j% i6 r3 q: V
  1422. JSR Music_Reset_Addr
    . ~9 r! b; A% k2 e
  1423. JSR SwitchMainBank2 ?" @+ w) a% L8 I' g
  1424. RTS
    3 Y$ K5 c" M' i9 v. g% ~8 N. S$ j
  1425. .ENDIF
      x/ X$ t- a9 W2 D5 h, f

  1426. ! v( g" I$ p# [; k) S
  1427. ;==================================================
    / p5 x4 t9 m& X3 {4 P; K% h! C
  1428. MainLoop;死循环
    . s! U& j& c5 N9 \& O# z
  1429. JMP MainLoop
    % l! I! u1 p3 p3 E

  1430. . u$ P9 r+ b0 k1 ~5 {1 q! M$ O8 B
  1431. ;==================================================
    9 Q8 A$ N& n4 L; a- R: a  d
  1432. NmiProgram;Nmi中断处理( T! A% @2 Q1 n- G$ u2 d% h. Y
  1433. PHA& k& z* {; y: F4 i% n6 f
  1434. TXA4 ?* N' n* ]7 {" {2 ~: i# C* B0 C
  1435. PHA* ^5 M7 E% @  L' x5 M- \! j, H) X
  1436. TYA
    % d, e" h# n+ H# u/ n- m: X' E
  1437. PHA
    + j- l' I/ A, ]" i9 A( }
  1438. : o# T/ a( e/ G; i$ ?6 o0 s
  1439. LDA PPU_STATUS
    * Z1 _( q* b( `- @
  1440. LDA #$001 ^7 w3 ?8 M' q# C8 i! n: H
  1441. STA PPU_CTRL
    - q& c/ ^2 V$ U$ o& A: r
  1442. 1 \  `+ `) }0 x9 w" c) H; m
  1443. ;切换主程序bank' _7 A5 P, }6 r  H( [$ P0 A
  1444. JSR SwitchMainBank
    # b+ H$ |/ ?! R. U

  1445. 6 _, ], R( Z+ ~4 @. ]1 S( b
  1446. ;NMI处理( s+ P9 I' M! q; D; N' E
  1447. JSR NmiProgramProcess/ K/ W  y& H( k, W/ f
  1448. 3 D' T/ S' P* g% a6 @
  1449. Nmi_Proc_End
    " |, M0 {2 X) V- C* `8 m
  1450. PLA
    9 s+ _% V9 K/ ^" a& L6 r
  1451. TAY
    2 n  u% {; I. W" k7 H
  1452. PLA
    7 v( `6 X" ]# h6 K8 @( @2 ]
  1453. TAX# v" T4 q, I4 I2 T
  1454. PLA3 v& e' b! @. o5 \7 d; _

  1455. # c; A5 C  d9 C. |4 G2 }/ Y3 W# [
  1456. RTI8 Z+ m8 \1 [! B: W! _% A6 u, {2 ]
  1457. ; z( m% a$ T& N6 k- ?0 H
  1458. ;==================================================/ O( @; V  u8 C! L4 T7 ]( y
  1459. ResetProgram;重置中断处理9 W1 w$ s8 U1 W
  1460. SEI# u, A/ P( p' ^: }
  1461. CLD
    ! j: u4 q/ r% Z  W
  1462. LDA #$00
    4 _, p! h! Q- q* L, d& c
  1463. STA PPU_CTRL3 y" r$ i* c0 l
  1464. STA PPU_MASK
    $ m" I! y+ ^0 P  @; n4 @0 n0 g

  1465. * P6 R) P. T. N& P- \2 T4 h
  1466. JSR SwitchMainBank
    & S: E( p) n$ V; u9 b' ]$ ]9 c& l6 Q
  1467. JMP ProgramBegin) I* B7 g  n# u  k( ?& ]

  1468. " `6 G7 [: Z- X, J) g# Y, O, \
  1469. ;==================================================
    # ]# {. D* v6 ^0 c/ }& q( a1 Z$ i
  1470. IrqProgram;Irq中断处理
    2 u4 G% y* r; m  h, x; d7 U" k
  1471. RTI
      F  C0 a% n, f6 z6 q

  1472. : _, `9 a) ]4 G
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ) E/ `. S# K' Y7 x  t; J
  1474. .ORG $FF80; _" X$ E+ m* D5 N) m1 V) K; ?
  1475. STA $4000,X( G+ U1 |, v3 V8 g9 M
  1476. STA Sound_Bar + $00,X2 }3 F; ~* h2 I! u3 g
  1477. RTS
    ! b; ~1 N3 T8 H6 q( w2 ?& F7 t
  1478. : P8 [% E2 M2 E  \& H
  1479. .ORG $FF88
    ) J5 _' v9 s' V  D2 \5 f6 o/ M. ?
  1480. STA $4000,Y7 ~) p( r- D. j5 y/ s. K6 S5 j
  1481. STA Sound_Bar + $00,Y+ Y% o0 v' N4 [. M/ w! S. e# `
  1482. RTS- j0 q& p* [$ E7 q
  1483. 9 h, _" C$ q7 h, ^
  1484. .ORG $FF90
    ! }5 m, G- M# `$ q, }, T
  1485. STA $4004,X- L( m8 K2 a5 a& A* ^' @( t
  1486. STA Sound_Bar + $04,X
    , F1 c6 \) g. C
  1487. RTS! ]1 w$ y0 a0 i0 E* a

  1488. 7 q$ K9 l. m+ G. c9 c
  1489. .ORG $FF98* G& N! `4 W5 R1 r
  1490. STA $4004,Y' W( d7 _4 l* P' k1 ~8 s5 P
  1491. STA Sound_Bar + $04,Y: F4 H/ a; d8 [( L, E: A# E* v
  1492. RTS
    % \/ w! m/ V& m* g3 _) M

  1493. - }2 P% J" W3 _# M$ B0 k' {; l
  1494. .ORG $FFA0
    / U. p2 L1 q0 \* r# L5 D/ G' J
  1495. STA $4008,X2 q5 Z3 F- \  S- a% y- A6 E( r
  1496. STA Sound_Bar + $08,X* O" N. _. k0 E$ y2 _  o
  1497. RTS
    - M, ]" @- @0 x+ I, ]/ N: X9 d

  1498. ' ~1 ~( i/ v' u. K
  1499. .ORG $FFA8! N) n# R9 o; n  l+ i% `$ _
  1500. STA $4008,Y& l4 K8 q7 b3 }
  1501. STA Sound_Bar + $08,Y" j; _7 }, s/ N. f
  1502. RTS3 ?8 N9 }' F' T6 A+ ], O) ]
  1503. % |7 [0 L2 r2 G8 c8 O3 L
  1504. .ORG $FFB0
    ; e2 S) k/ n" O+ y& U
  1505. STA $400C,X
    9 ^2 @3 T6 O, {6 l8 {& W
  1506. STA Sound_Bar + $0C,X
    ; z6 e( ^8 p' V! c8 _
  1507. RTS! {1 Z! `. ?& ]) d3 Z
  1508. ! |. g% A" b0 E: d6 w5 T3 Z0 ~0 k2 |  ?
  1509. .ORG $FFB8% B' f, R1 @& |9 u+ V9 @  T
  1510. STA $400C,Y
    # H2 {! l9 m; |5 ^
  1511. STA Sound_Bar + $0C,Y! u- f: f% t& e. _0 p  c
  1512. RTS
    % |8 |$ G/ O# N) S# `. z5 n

  1513. ! V& J5 s7 j1 B# W! ~, D
  1514. .ORG $FFC0
    1 c9 E* k0 I9 T4 Z1 R7 s# M" ~& k& O
  1515. STA $4000) Q; g/ L. h% S
  1516. STA Sound_Bar + $00
    $ [4 v+ Q8 N' ?; v  Y4 T: T8 P
  1517. RTS
    & \( u( Q4 G- v1 u) i! H

  1518. ) I+ [' Q; y5 A) a8 I
  1519. .ORG $FFC82 a1 J# F2 D; }% y" Z  d
  1520. STA $4004
    : Y  J( W% e1 q4 y  P  m/ N
  1521. STA Sound_Bar + $04
    ; ~5 ]! E: G7 `
  1522. RTS+ x" E( S& _$ |. j- O% x) a

  1523. ' `9 V) |0 m( \9 K5 G0 X
  1524. .ORG $FFD0
    9 }: A8 n1 K# k* B: g
  1525. STA $4008
    1 p' p$ L" b7 Y' `7 A/ i
  1526. STA Sound_Bar + $088 t3 B* f! Z6 l
  1527. RTS
      M6 |7 D+ k% r2 u3 A: ^
  1528. - L7 I% Z. ^$ R: W% a
  1529. .ORG $FFD8
    6 U" W5 E0 Z. b! Q
  1530. STA $400C- c' h( w' P! Q8 X+ N7 h
  1531. STA Sound_Bar + $0C
    % @9 t& I* }5 v6 ]& b: N
  1532. RTS4 j( @9 _1 f; r1 z

  1533. 3 u% _0 N0 t0 J  M
  1534. .ENDIF# h8 l3 J, v8 ]
  1535. , ^" g1 D+ R; b2 j) L' k2 I
  1536. .ORG $FFFA
    * d& |# F7 Q. u: K
  1537. .WORD NmiProgram
    1 W6 v: d2 j2 Z( [
  1538. .WORD ResetProgram5 h# O! x0 Q, a# m
  1539. .WORD IrqProgram
复制代码
. k) r, {( `5 a9 Y7 [' C9 d% \

- ?7 C% G2 ^$ K% ^; a* x. y. e
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1247 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3243 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-26 02:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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