EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
1 u% V  M! V: a6 O3 q" `- q' h+ z8 L( k
1.魂斗罗
; r# ?( `  l' U2.超级魂斗罗" m6 B7 o7 J6 x  C) U/ }6 A
3.赤影战士/ u+ b8 }. \7 G2 d# X1 i3 e
4.忍者龙剑传27 Z% F: l3 e& h" G6 @# H4 w
$ m/ E3 G7 }+ ?
! J8 k" M/ x( Z/ F$ J4 V9 c; H4 Z1 H

4 |  \+ Y; ?. C+ a9 ~0 ~) `+ \; r+ P* z. A* v
源码:/ e3 n( j8 k+ g9 j
  1. ;[FC音乐][播放器模板]
    " z/ z& }! K, I. g" b$ k
  2. ;FlameCyclone 202307102 j/ P  i$ B' D6 P; ^* ^
  3. ! M$ s$ O- ?( b5 ^. ?2 W, o( C
  4. ;文件头% L$ a$ \  ^; P& W  Z1 b3 }
  5. ;======================================================================
    ! C( v7 V4 W7 l# k6 G8 P) `/ t
  6. .INESPRG 4                                              ;16KB PRG 数量
    - C  U7 s9 h. b3 q
  7. .INESCHR 0                                               ;8KB CHR 数量
    % U6 j1 p2 N" D
  8. .INESMAP 4                                                   ;mapper 4
    " |9 S; S% Y* \7 E2 O
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直& e  _8 {8 k1 `  g, J
  10. 1 C$ |2 d. H$ L: H1 }/ X0 t( [
  11. ;==================================================1 W# M0 c2 s, d+ l  w0 t
  12. SOUND_BAR_SHOW_ENABLE       = 11 G& x! |$ R8 A; e3 [. H$ f* ?
  13. ;==================================================2 y! u5 |* S  o) B+ J/ d  Y7 T
  14. BANK_DATA_MASK              = $07$ e" W* T; h& _; ^
  15. ;==================================================
    - l9 z; ]- s& K" L
  16. SOUND_DATA_BANK_0           = $00$ G3 X' t( V) x: F! c' d
  17. SOUND_DATA_BANK_1           = $01, L/ M* g* d& ?9 Z' }3 v
  18. SOUND_DATA_BANK_2           = $02
    4 I0 c4 r; H0 T  Q4 i
  19. SOUND_DATA_BANK_C000        = $06
    , @' l. a! p& \3 `

  20. ; C+ ?6 f$ ~1 I* o7 d
  21. ;-------------------------------------------------
    : K$ O' ?! Y4 L+ e
  22. CHR_DATA_BANK               = $04+ x$ c4 O9 p; i. D1 T
  23. CHR_DATA_ADDR               = $A000$ F- w; d- T: i3 ~
  24. ;-------------------------------------------------
    - D/ C9 ?. n  X' J0 ?1 a7 C% T
  25. PROGRAM_BANK                = $05% `: V. Z) y4 }* t( f- |- v9 a8 K
  26. PROGRAM_ADDR                = $8000# a; a: E. f) ^  E. r
  27. ;-------------------------------------------------
    3 u/ Q& p, z9 `5 ?+ a
  28. RESET_BANK                  = $07
    - `5 M( |* V; \8 {8 Y
  29. RESET_ADDR                  = $FE00& S. q3 ~, T- p9 w3 ~- |. P4 n0 ~
  30. ;==================================================
    5 P# m  K4 H( f0 j7 ^! J
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址  n! L, e- N) E
  32. Music_Play_Addr             = $813C ;音乐播放地址3 j" e8 d( w3 T" [. w
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    & B3 @2 a/ @, _0 F% G/ _5 f
  34. ;==================================================4 {9 n' h: P* C+ e2 L
  35. Music_Song_Total            = 039  ;全部曲目总数
    . ~* d8 E/ |4 ?9 E' b+ ~
  36. Music_Start_Song            = 007  ;初始播放曲目
    : V2 L  q, p9 L9 ^; d8 L7 d
  37. ;==================================================
    5 T4 L) ?, D6 `$ b  ~6 A7 W& P, e

  38. # o2 B& d. ?" F9 l  X
  39. ;==================================================
    ; a& G2 r& L5 r7 x/ E$ P
  40. Title_Text_Pos      = $210D ;标题文本位置
    0 V, l! D" A" K& v( l
  41. Author_Info_Pos     = $2284 ;作者文本位置
    2 U% R  I1 m7 |; l3 g  {
  42. Date_Info_Pos       = $22CB ;日期文本位置1 A  j. U* x. x. z
  43. ;------------------------------
    4 s/ C0 {- P; J( F- s
  44. ;------------------------------% ^  _9 c/ W2 q4 u
  45. .IF SOUND_BAR_SHOW_ENABLE- \- X1 p0 k7 a5 J. M
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    , D" @+ V" O; v& ~* S3 l
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    8 x+ R2 B3 B7 U! `; j; u4 N7 l4 a& ]+ v
  48. Play_State_Pos      = $2233 ;播放状态位置
    2 ~6 \. |  r. V9 a1 J' s4 @" A& e- T8 V
  49. .ELSE5 ~: }; P/ ^6 F$ Z9 c, t8 L
  50. 3 a% M4 }( ]4 @" G2 A- r4 n
  51. .IF Music_Song_Total > 995 I4 W! N; K* a$ R3 O/ v2 _
  52. Play_Index_Pos      = $21AC ;当前曲目位置" t; }! G, x  s1 n3 {
  53. .ELSE5 R0 u3 T; F$ M

  54. ) j6 N/ u3 y% A/ r% Z; ^2 [
  55. .IF Music_Song_Total > 9/ r' N  L$ U5 u5 e: D. M
  56. Play_Index_Pos      = $21AD ;当前曲目位置$ }; G! j/ ?! K# z# O4 x6 r; k
  57. .ELSE3 O( O3 t& _, ?1 Y3 a; I& P! _
  58. Play_Index_Pos      = $21AE ;当前曲目位置" l/ W' H) T% [0 e. L5 @; J9 S
  59. .ENDIF
    1 E9 u. [1 g  B+ O+ s5 ^$ m
  60. ! h% @/ y( s% u0 o4 O# H! S
  61. .ENDIF
      c3 \/ P2 {+ I) n. K" f$ L7 e
  62. 2 ]& [. q* Y% d' L  P- ^
  63. , n1 d2 u. @4 [' P$ U" G
  64. Play_Time_Pos       = $21EC ;播放时间位置
    + Y" f4 ]" c4 F/ _+ B4 L
  65. Play_State_Pos      = $222C ;播放状态位置
    ; h- e: D4 I' K  `
  66. .ENDIF
    2 V" N, u. U! w4 t. s* i6 k
  67. ;------------------------------/ s3 P. M1 ^# u- j2 R
  68. Track_Name_Pos      = $216B ;曲目文本位置: u) ]# |" B  \* m# H
  69. Sound_Track_Pos     = $21A5 ;声道文本位置& G/ r2 l( @( b3 x$ h
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    , D) J+ w, x- r6 Q5 f1 V. O# n9 D
  71. ;==================================================9 R9 }7 `9 q- t
  72. Scroll_X = $00
    3 O( K7 N7 d0 f' o3 B1 o. |
  73. Scroll_Y = $06
    * t  o" Y, \+ s& Y% [  m
  74. ;==================================================( k0 ~1 Q  c0 F$ d2 ^. Z
  75. RAM_Cln_1       = $0100
    . H2 {& D4 @! ^. S# @
  76. RAM_Cln_1_Size  = $804 F3 Q5 v* i7 c# P; N  _
  77. RAM_Cln_2       = $00E0
    ( P* q, J8 E% w7 N7 g
  78. RAM_Cln_2_Size  = $20( M9 ~) r/ ~' K6 z# i
  79. RAM_Cln_3       = $00E0
    % b# A# q8 ?) x' l
  80. RAM_Cln_3_Size  = $20! H1 c/ {) R3 c9 F+ U8 `) w  v* F- {

  81. , m$ W2 R7 {! Q6 V0 e
  82. ;==================================================
    9 H! o8 o& @$ L: `( a. }( N
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器) t9 n0 O, Y; Z1 O  q; g( |6 e2 |
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    % w) k+ u, P( B7 G6 \
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    1 e' M+ z9 l) I) f
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # a+ U  b3 D; F1 W+ I: O0 u9 Q
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    . g: u. R1 R8 C' p
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    / _; T- [6 W' Y0 t; l4 n8 U
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加6 ]! R: C- d8 p. O$ ?4 P
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 8 C8 q* N  R: M7 l+ k
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    8 _$ w0 n* }8 C2 }
  92. APU_STATUS              =   $4015   ;声音通道切换
    2 J7 b+ g8 r+ ]1 D4 M
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    + O- F& D' X' M9 W. i' v. j
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通! e7 ~) \* @, m3 J# s* @
  95. ;==================================================7 c! L) Z7 G6 \9 i
  96. MMC3_BANK_CTRL          =   $8000* I0 v0 X# r4 U3 L5 G+ U* f
  97. MMC3_BANK_DATA          =   $8001
    5 V( r3 U% Z* u) K4 ]$ F
  98. MMC3_MIRRORING          =   $A000# ?2 A. P. d  ?7 I0 ~4 v; d
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    ' t' \% n( G& ^5 \0 J8 R6 s! X
  100. MMC3_IRQ_LATCH          =   $C0000 M- f3 D2 x# H0 g' E- q
  101. MMC3_IRQ_RELOAD         =   $C001$ Z, F# ~# m* ^0 L5 _# a/ l
  102. MMC3_IRQ_DISABLE        =   $E000
    6 y! D2 H- W5 L2 P- w
  103. MMC3_IRQ_ENABLE         =   $E001
    8 q8 g& f% z) {: j

  104. 4 ?/ x5 [0 h+ z& T( v2 N: {0 \5 h8 V
  105. ;音乐数据块3 r, b/ }9 j, Q# ]6 W) D

  106. + z/ T/ Y2 Q) {5 z7 q/ z
  107. ;======================================================================( B+ e' U, l0 T: q6 c4 |
  108. .IF SOUND_BAR_SHOW_ENABLE
    # s; b* N' O( V; w& m
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 ^- Y5 F3 k% F" @3 k: ^( ?5 L
  110. .INCBIN "sound_bank_bar/music_data_0.bank"4 ?. u4 q6 {' K) z" [% G
  111. + Y9 A4 g8 R- n! N$ ^9 z
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK* @; C* }1 y% j; V0 @: J! ]
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    ' u5 ~* }' o. b- t* ~) }

  114. 8 }+ M7 U: G, a& n* J2 S
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK/ \5 E, i1 e( \: x1 g; n
  116. .INCBIN "sound_bank_bar/music_data_2.bank") U" K5 O$ I7 ^7 @! I
  117. 2 n" x6 n3 D6 ^9 A
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK* o0 `8 l1 L) s
  119. .INCBIN "sound_bank_bar/music_data_3.bank"  S  R: l8 \5 s7 ?

  120. ( r# W) ^, A1 S' M3 l) z& f
  121. .ELSE+ D' \6 c8 R4 F
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK6 S  f" G) T: S' [1 _
  123. .INCBIN "sound_bank/music_data_0.bank"4 t5 l  Z4 t+ f6 n7 P) x3 m7 s

  124. , n& ~! @7 U' b; a" ~
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " F! S) b+ y1 ?1 d$ ^: w, k8 b
  126. .INCBIN "sound_bank/music_data_1.bank"
    ) t  _$ X/ C1 j3 H8 U
  127. $ a1 {; q3 X6 Z/ G% D0 ]
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    9 t" g( i8 ?/ \1 s, m8 J1 J$ F
  129. .INCBIN "sound_bank/music_data_2.bank"
    ; ~1 W# o2 f' L$ v( ~9 w* l
  130. % ]  k0 K' m: S1 b( ~1 ?
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK, g  h, \+ j1 E/ X. ^! p
  132. .INCBIN "sound_bank/music_data_3.bank"* G, o! ]9 l, r  r0 E+ p! ^
  133. .ENDIF! A, O, c% m& `: r" X
  134. " S0 n7 ^5 Z8 k
  135. ;CHR图形数据
    " t0 @: L2 l2 y' \3 ~3 r, `: c$ m
  136. ;======================================================================
    1 T- ]: R5 `4 @& p
  137. .BANK CHR_DATA_BANK
    9 i( v2 q, K& r$ Z1 v$ Y4 c& B
  138. .INCBIN "chr_bank/chr_data.chr"1 |# h2 V6 [2 g. O1 I, x

  139. % H  F  ?* [+ c% s7 G* ^0 t/ O
  140. ;==================================================* X9 p( [3 i( k; P2 ]& v8 o  f
  141. PPU_Addr        = $0300
    7 t0 T6 K6 e; f; q  l
  142. Palette_Addr    = $03C0  C* }9 \/ S1 ]) B& I8 U( m
  143. Sound_Bar       = PPU_Addr+$E0* Y, Q" ~' ]2 J- R6 H9 _6 i+ U
  144. ;==================================================! x5 v' v8 [. x/ b6 q
  145. Palette_Update_Addr     = Palette_Addr+$0D
    ; I, O% N% X8 p0 Z5 G8 L
  146. Palette_Update_Max      = $2C5 Z& I5 _* ^! ~* {7 ~0 r' v: z
  147. Palette_Update_Min      = $21. ^: i! s0 ^! `* X. _* r
  148. Palette_Update_Interval = 60
    5 c4 y& x5 C/ N& V& \" r# i
  149. ;==================================================
    # b  h! k- Q$ O5 S$ ?
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    # g3 Y' @. d; b+ Y& u6 ^1 ]
  151. Screen_State        = Sound_Bar_Cnt+$01
    4 n* x! @) L3 T+ u1 q
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    9 w* i5 p6 i9 I' k
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03- o3 _1 d  n( j, K5 x
  154. PPU_Addr_L          = Sound_Bar_Cnt+$045 }  q# G  ?# ^$ p" a6 Q  T' ?, s9 T  Z
  155. ;==================================================
    6 W/ a9 t  {% M# P! e, o
  156. Data_L              = $70
    8 f( R; e, {: J8 E( |
  157. Data_H              = Data_L + $01" E, F) d1 s2 m
  158. Data_Cnt            = Data_L + $02
    3 H" a. J1 A3 X- y6 O: q2 [
  159. Data_Buf            = Data_L + $038 z! `1 \( O$ P$ S
  160. Time_Wait_Cnt       = Data_L + $04: g1 z; G4 r; t
  161. Palette_Wait_Cnt    = Data_L + $05
    7 n) G1 F# O! S- s
  162. Palette_Update_Flag = Data_L + $062 N% R& K# Z. E4 k: f
  163. Show_Track_Name     = Data_L + $07- @; [2 y5 {5 w8 |
  164. ;==================================================2 y# X! B6 `' G* Z0 z) C4 m4 K
  165. Key_Keep            = Show_Track_Name + 1  k/ x" H; S- ]
  166. Key_Once            = Key_Keep+$01
    . q# d: h7 c" U1 F" ]( a  \
  167. Key_Kemp            = Key_Keep+$02+ [  v. ]) e5 y. g1 N5 ?
  168. Key_Temp            = Key_Keep+$03
    ( {" a0 _4 u' N3 w) k3 R
  169. Key_Getv            = Key_Keep+$04
    , |2 `( k$ G7 N* [+ b% T5 C
  170. ;==================================================. c4 Z; {  |( V* B  w
  171. Music_Cur           = Key_Getv+$01$ u' q+ ?) Y. W& s$ [. r) ]6 U2 {
  172. Music_Last          = Music_Cur+$01- K6 \+ U- {  T  p! t& s
  173. Music_State         = Music_Cur+$02. h/ _, M& R, @+ a& l. l
  174. ;==================================================1 }! u. E" @5 t4 G
  175. HEX_Data            = Music_State+$01- q& }+ c, }" d9 P
  176. DEC_H               = HEX_Data+$017 o8 g$ ]& H' o" B+ @
  177. DEC_T               = HEX_Data+$02
    , ]0 a0 N5 s$ b
  178. DEC_L               = HEX_Data+$030 g9 a$ _- v8 I* X( |2 x3 d4 |
  179. ;==================================================, ^) X5 t8 X/ c: @/ G( B# K. g
  180. Time_S              = DEC_L+$014 `, F6 X2 |4 S8 M, {
  181. Time_M              = Time_S+$01! _. O( K5 h9 b$ H
  182. Time_H              = Time_S+$022 r9 ?% ?# {5 H5 \
  183. Time_Cnt            = Time_S+$03
    - L& W; ?. E% D+ N$ U7 \( f, K: A
  184. % T4 a- o& c/ E2 d5 K
  185. ;==================================================' m, V2 B4 K% N" V* _" p
  186. Music_Bank_8000 = Time_Cnt + 1
    % l* v; D& y. ]0 }9 F
  187. Music_Bank_A000 = Music_Bank_8000 + 13 v; i( Z: [2 P, P& A& G
  188. ;==================================================
    . k# V1 }: [" i0 j  k

  189. " v+ ~" w) u# C1 r/ `  L- w
  190. ;======================================================================" x$ p! y4 |: l- q( K/ \" X
  191. .BANK PROGRAM_BANK! A6 c, g0 |: q* t1 [# I+ [( p4 m7 l
  192. .ORG PROGRAM_ADDR
    1 n7 K9 i: W. A+ _. a! C
  193. ' O  }  \6 W! d0 V; t% W. _
  194. ;==================================================
    % v' H, F5 U; S
  195. NmiProgramProcess;NMI中断程序处理
      V& O2 B. U9 }
  196. ;处理PPU图像# J& R6 B+ F( }& _. R! {
  197. JSR PPU_Proc
    $ G' P. W8 j" @1 a, c% J

  198. 4 X' P8 n6 ]7 Z4 U
  199. ;启用NMI中断
    7 v- V0 \/ ~' x. Z- E9 K( _0 j
  200. LDA #$80
    / K8 l4 D( Q2 z' ]$ v( {/ v
  201. STA PPU_CTRL1 |) V* r3 n6 m0 |9 q
  202. . X8 m: S# D/ v5 C) B6 i
  203. ;更新调色板
    4 k% X" C5 L4 O+ F  G  z  d/ |
  204. JSR Update_Palette_Data
    ' n% n. K+ K4 J7 M* f" y& r& }, Y

  205. / e3 y  ?% R" c% G2 [, ?
  206. ;显示时间(缓冲)" d. e7 t3 H- E# ?- d
  207. JSR Time_Show
    / l1 |; J% S4 `7 V' R

  208. / A+ z& ~& ^1 B# P& R
  209. ;播放计时/ \; T2 L4 J) ^) c
  210. JSR Time_Count
    ) F9 Y4 |& U0 J& Z% S* o

  211. * u- I1 \5 O4 @' N6 E# C: E$ N
  212. ;播放声音% r4 I& O. D% K) N7 O) d
  213. JSR Sound_Play
    7 \" G$ W; B1 Y. L* I

  214. : z6 D3 y4 M) z" i; X0 S+ Z
  215. ;切换音乐(手柄触发)) c8 Y. V/ u! ?6 [
  216. JSR Music_Switch' D+ k  {# Z1 z

  217. ' h1 W6 R; T' B- T8 ~! R; q
  218. ;音乐显示(缓冲)
    8 @3 d/ P8 i: A& ~/ G
  219. .IF SOUND_BAR_SHOW_ENABLE( v$ Q1 ^/ y' i" v6 i8 t
  220. JSR Music_Vision: t1 [4 w7 D6 o8 [* q- H* y+ Y# m
  221. .ENDIF! s9 w4 N6 c; `0 F6 `
  222. / I! K8 y6 _9 L  A2 q2 {
  223. LDA Time_Wait_Cnt
    $ ~2 I  o' a3 ~' L% i
  224. BEQ NmiProgramProcessEnd$ s* n" _2 p  u7 M5 x; ?( `" k
  225. DEC Time_Wait_Cnt
    ( j- q/ \$ z0 X5 f: x
  226. NmiProgramProcessEnd
    7 e. M  m5 A5 M8 A7 ]
  227. RTS
    1 e. M; R; h# i+ a( a! U
  228. ' B3 b* s: x+ i4 f% a- W2 B
  229. ;==================================================* ?3 b; _! m1 M8 F8 N! P! F
  230. ProgramBegin;主程序# `, u' F7 ~; L1 A# G
  231. LDA #$00
    ' c% ?2 v+ \1 ?' V6 ]
  232. STA PPU_CTRL6 G# m! B4 m( @9 i7 ?, f& x# V
  233. STA PPU_STATUS1 `: r# ]4 K! O/ X' J1 f
  234. STA PPU_MASK
    % R9 T  F% H, a* ^4 [4 Y
  235. STA APU_STATUS2 Q4 T! L, k8 F8 ^" ~" r
  236. STA PPU_SCROLL
    / A0 L4 d9 i5 F& V
  237. STA PPU_SCROLL/ R5 c3 ]8 {  v' C; O2 E) i  u" t
  238. LDA #$C0
    ! Y3 v1 p4 K$ r/ v# A
  239. STA JOY2_FRAME5 q! H6 }4 L% b, H& q! Y- Y. O
  240. + b3 r; s7 ~/ N& u* c8 h
  241. LDX #$FF4 @/ g$ T$ ]) i0 @$ g) y
  242. TXS6 Q! N8 Y' N; }, F( P1 ^0 g
  243. LDA #$00
    4 h  |% Y) c$ w$ x% f
  244. STA PPU_CTRL
      \- l' c' f3 X1 P7 q* P
  245. STA PPU_MASK
    - t6 q6 I0 w4 w8 [  @) A
  246. STA MMC3_IRQ_DISABLE/ m( W4 v8 m  }- T6 K
  247. / F/ |# i( v6 _/ X; s" o
  248. ;==============================
    ( H. m7 F, q+ Q% N6 M- I! W, X
  249. ;调色板清空7 C8 S8 i5 w( @7 H% B
  250. LDA #$3F
    5 i  [5 c' J: w
  251. STA PPU_ADDRESS
    7 y% M* Q( x) r: W
  252. LDA #$005 N( `) Y+ T2 n7 X
  253. STA PPU_ADDRESS& O% i5 |% B4 `# o" o8 |+ r
  254. LDA #$0F. y, w' L, t. O& c
  255. Palette_Clear
    # K3 g' U+ y, P: |5 t
  256. STA PPU_DATA! ^: v8 x! K' A4 N$ J0 W" s& Z
  257. INX9 ?! B4 ^! O' V) x5 d/ R# s# d! }
  258. CPX #$20
    4 X  k4 z# q( D, J$ t' A
  259. BCC Palette_Clear
    / d: B, o# `! z3 O/ p
  260. LDA #$00
    , @8 m, d6 I; P$ k0 k
  261. STA APU_STATUS
    3 B" B& ^3 _( Q' x) i& M
  262. ;==============================) O( r8 |- B$ m5 B5 j
  263. ;初始化背景调色板
      i" B9 W' F% k8 y6 U! E
  264. JSR Set_Palette_Color
    / V6 D) B* \. d. ~* |
  265. JSR Set_NameTable_Attributes
    ( k1 c6 ~& h) x, s! V

  266. 1 f9 ^; h  `$ Q( `( x
  267. ;==============================) N  E7 S  z% E* l- V' v# [
  268. ;RAM初始化; e, x3 l2 y- e! i+ }
  269. RAM_Clear_All
    9 W6 M7 V! p5 W4 a8 o
  270. LDX #$009 `+ p8 V4 J  I+ k
  271. LDA #$005 I( M. {) ~# o) ]' e) I1 q0 q
  272. RAM_Clear_All_Start+ u" h9 I. g4 Q% r# v$ v/ C
  273. STA $00,X) C3 V7 j. t% ^5 x- m
  274. STA $0100,X
    # N5 E' ?/ Q: ]. ^
  275. STA $0200,X% j: m1 V$ I* f5 H9 B5 _; V( F
  276. STA $0300,X
    4 H( q" `( ?( [% T
  277. STA $0400,X. c6 x. P8 J: ^) z1 d, H- |
  278. STA $0500,X
    & |0 L/ z8 V/ v, Y
  279. STA $0600,X
    3 q# V0 l- B" w& v: D, C3 n% X
  280. STA $0700,X- e7 u  H; }6 H, _) {3 e
  281. INX$ v) F% p& E& ?9 {
  282. BNE RAM_Clear_All_Start
    ( l* p! U5 a1 Z, {! c
  283. ( u5 K* c& t! I
  284. JSR VramInit
    6 [/ A8 v' p/ F- z8 [
  285. JSR Init_Palette_Addr1 I1 `5 {. c2 N% Y, `0 L5 B
  286. 8 C# d6 `5 t. [# J& b
  287. .IF Music_Reset_Addr" s0 c% I5 g0 r& j& f3 _
  288. JSR Sound_Reset) N: \' ]+ C6 w$ I$ `- f: }- z6 y
  289. .Endif
    2 `' y9 I" m6 B4 k% {( D

  290. 9 Q0 Z3 O* |( I, b+ Z( a) T- M
  291. LDA #Music_Start_Song-$01" o& {/ E4 @' Q/ ^
  292. STA Music_Cur: m8 t6 U! x6 o: Z, S+ K2 y% y6 g
  293. ) k( K" r6 ^& E" k
  294. JSR Show_Music_Text
    : Z4 h6 A% K9 S0 o
  295. 7 J  C- o( O: i- s0 I* V8 q
  296. .IF SOUND_BAR_SHOW_ENABLE
    - B, y8 p3 {% H4 Q4 ~
  297. JSR Sound_Bar_Text_Set
    0 e% D* }5 v7 l  L6 Z4 [
  298. .ENDIF( ^3 F* y; t0 i$ S7 a7 G2 h# ^
  299. ! c" C3 o/ u% b% u5 L
  300. .IF Track_Name_Pos
    ; m3 Y4 M  b# Q9 ~
  301. JSR Show_Track_Info
    & \0 _* f5 l( _6 }  i
  302. .ENDIF5 W/ n  D, A3 L$ [  n, ~4 z
  303. / H% |3 p3 `4 @+ D# `: B6 P. V  R, ?
  304. JSR PPU_Proc
    , N" a5 v4 _, N, F8 G% ], k& W
  305. # k5 V' v/ \1 p# @' r
  306. LDA #$0E
    9 |# f  J# d. J
  307. STA Screen_State
    4 Q, p! }& s! v! F1 a
  308. 1 {" z: A! C( B8 R; Y; q
  309. JSR Sund_Bank_Init( {+ l+ @& E" v, P( \. F% i5 Z
  310. . c& @' F& V+ o& I+ g+ r4 }
  311. JSR Music_Show
    : N: e& I& l' j( c- f/ L
  312. JSR Time_Show& q  K5 ?# C/ c7 r# z$ y
  313. JSR Music_Stata_Show
    : Z1 R8 @9 C  C$ \4 j) E
  314. JSR Time_Delay
    $ h/ a# q2 \; P  P* _" a

  315. & U& }, S: ?0 {* [+ [
  316. , b2 M) K( o3 t( E
  317. LDA #$80
    ; c6 L4 ]$ Z4 W; u9 ~, Y
  318. STA PPU_CTRL1 V$ m. A6 V; l3 J! u1 w0 R5 E
  319. ; g( l# d$ _) M  f" G* |. q% J
  320. LDA #$20% \4 @5 |8 t# E; c: q7 i% |
  321. STA Time_Wait_Cnt
    6 K) ~2 t$ ^* o
  322. 2 D4 H4 n1 v* ~  S, N, n/ G
  323. Wait_Time_Over
    8 p0 }- o2 o  Y( U& S3 {
  324. LDA Time_Wait_Cnt
    ) h, z+ j& Z2 _- G1 h+ i
  325. BNE Wait_Time_Over
    7 |( U  b5 q$ H1 H* L2 K

  326. 9 B5 A6 n! m3 m/ }
  327. LDA #$1F; i2 P; t6 s. z
  328. STA APU_STATUS+ v# C+ d1 }% w' `2 G) _) \
  329. LDA Music_Cur+ V9 V1 D+ K& I# T/ f  q+ U
  330. JSR Sound_Init" K2 T$ a2 N% d! Y2 Z0 w& a5 \
  331. % K  o* `5 \4 B/ B( m( e0 G
  332. JMP MainLoop
    7 _5 h& f4 M7 y
  333. 0 j6 y- Z5 E" s' \" y0 h
  334. ;==============================
    " a- J8 Y- f( e  j, L+ N8 u  Z
  335. Time_Delay;延时等待
    ; L, L! v$ {7 }$ L9 Q
  336. LDA PPU_STATUS
    ' `, U8 ]. G) T6 p3 I
  337. BPL Time_Delay% y: \1 ?& [5 c
  338. RTS
    , Q* E" y; u4 r: Q9 R& P
  339. ; a  l* m1 l4 R9 X) K/ k
  340. ;==============================! G  t+ q" t+ @
  341. VramInit;初始化图形内存3 K3 B: Q0 Q1 E2 C
  342. LDA #CHR_DATA_BANK) [3 f( G& z' ~& p' r* w
  343. JSR SwitchBankA0003 l0 M) Y  n# j5 ?2 s
  344. LDA #LOW(CHR_DATA_ADDR)
    / K3 `2 u' |6 V
  345. STA <Data_L  }+ J. z. M1 u3 h  X
  346. LDA #HIGH(CHR_DATA_ADDR)
    ; \" w/ [' L2 X
  347. STA <Data_H
    ' U0 F; ^$ b0 T3 H* m
  348. LDY #$00) k) `& d8 S0 {! F
  349. LDX #$20
    # [# o) f: t0 ~3 [
  350. LDA #$00
    ( n2 {! d$ e4 Y; P9 U
  351. STA PPU_ADDRESS
    9 U. \# w! F- ~* |' p9 X
  352. STA PPU_ADDRESS
    5 O4 a6 ]+ S# b  g1 Z5 N" v
  353. VramInitWrite
    2 Z. x: k* `1 F! ]+ b+ ^; }& t! A4 U  h5 V
  354. LDA [Data_L],Y7 P, S* M! I& C; ~  `$ |$ a
  355. STA PPU_DATA
      X0 U6 ~4 i0 J. ], ]/ W7 i
  356. INY
    ) ?/ o( c9 K9 Y& {" u
  357. BNE VramInitWrite8 g- D8 x! d; I. c3 V
  358. INC Data_H
    $ P) s+ H( W3 L- w3 W: p
  359. DEX
    8 ]; {- ~! F4 _
  360. BNE VramInitWrite
    / G2 O/ S9 s5 m- T
  361. RTS( z0 j4 [* d! ~4 }7 I7 n( K, r

  362. ) a! n7 Y, B3 R9 N
  363. ;==============================
    4 U8 f& d8 Y& T  W: j
  364. RAM_Clear;RAM清除
    " g/ M* H  x! n3 |# j6 C/ j
  365. LDX #$00& [+ t3 W6 B' y
  366. LDA #$00! i. m, w( N2 [' i  V! {% V' o7 E: ]
  367. RAM_Clear_1/ p( V- @- c& D% R6 F" w6 `8 w
  368. STA RAM_Cln_1,X& F8 T, i' \) H" J0 `9 H& J; Y
  369. INX
    5 @. m* k! G( g2 ^1 q0 [! y7 f
  370. CPX #RAM_Cln_1_Size
    " y4 l) L" Z. a) a4 \
  371. BNE RAM_Clear_1# D( R+ ?. ]. \0 ?" r! z: H% V* c: J
  372. LDX #$00
    9 p) a1 W. f/ f" l
  373. RAM_Clear_2! k3 \8 i+ D, d( g: P
  374. STA RAM_Cln_2,X+ \' I5 O/ b8 V: j8 u) M
  375. INX
    * w  Y( t  H7 C9 E, i
  376. CPX #RAM_Cln_2_Size
    3 B% |% p, o1 b$ I% l
  377. BNE RAM_Clear_2
    3 }4 X4 g  F6 f: P! N3 L
  378. LDX #$00
    6 ]" v+ B: f- D% c3 c* p
  379. RAM_Clear_3& W9 p1 F6 ]4 \
  380. STA RAM_Cln_3,X" n, K! F+ f, G! p' D
  381. INX
    2 f1 Q8 C! ~9 x% P& l2 d
  382. CPX #RAM_Cln_3_Size0 ^, K( Y! U' ^# Q0 L4 L( M- O" [
  383. BNE RAM_Clear_38 e4 _( q7 T- W! u, j- R) T
  384. RTS
    0 W6 r: U, u: @) S+ b

  385. 9 H9 t% a( D$ Y0 A
  386. ;==============================
    . z1 H  i- p1 {" ]. o
  387. ;音乐切换7 ?1 Y4 p# `3 U& y6 ?; z( x2 g
  388. Music_Switch: \7 c% d  k" z- Q4 r5 Y, ~
  389. JSR Key_Proc
      r0 ?0 X. s. I
  390. LDA Key_Once
    8 m( p( k' \" x
  391. CMP #$10  G8 i; ?2 ]) T0 q; y0 p! O
  392. BNE Music_Start_SongStop  i" @+ s4 Q+ C( c% `6 g
  393. JSR Music_ReSet4 ~! o4 R  _- L7 E. X! ?

  394. , o/ V( w$ L0 `5 y2 V. Q! z
  395. ;音乐停止! a& K5 f, w9 b
  396. Music_Start_SongStop
    * ~$ L& _0 B2 @9 ?' Z
  397. LDA Key_Once
    + r! q; t* z- B% y5 ~
  398. CMP #$20& u: e2 M* l! j
  399. BNE Music_arrow  I5 N4 d: e' m3 v% B
  400. LDA #$01
    * {$ _4 d( o) M4 C. C
  401. STA Music_State1 e% K/ F! q! {1 M2 u; W3 \1 C8 f
  402. JSR Music_Bar_ReSet  D% S2 M' c/ |: z' w/ |& N6 S* L
  403. JSR Time_ReSet3 D* O; `" Z0 m- V7 t& |2 W+ `
  404. JSR RAM_Clear8 i9 P1 Z2 q' e: H8 C1 F* u
  405. JSR Sound_Clear
    , h& {" r4 m1 v; X8 v# T# {0 ?
  406. JSR Music_Stata_Show5 h9 {2 L. y/ V9 o/ Z& _0 e0 I
  407. Music_arrow/ P. Q3 ~' A8 N( n, d5 H) Y+ m7 o2 Y- g
  408. LDA Key_Once4 Y! [* X: P+ o) B3 T
  409. AND #$CF
    4 Z! e, s5 h9 j5 _* o
  410. BEQ Music_Switch_End5 l2 E5 W4 E/ F! x& W
  411. JSR Music_Number
    5 b2 \$ o- T( C# n7 t* c* z, v
  412. JSR Music_ReSet
    $ h- V& s: Q( T% W4 M
  413. JSR Music_Show
    % C3 F8 u/ ^9 H1 j6 s2 M
  414. Music_Switch_End" z3 k. \* D2 Q# h& A- B
  415. RTS
    1 E9 k+ P1 b7 V2 T( V

  416. " I. m/ Z7 y. u- b# X/ v4 s
  417. ;==============================
    $ r$ {1 I; x9 U1 D, K
  418. ;音乐曲目切换+ `- `5 m5 @1 w, B3 X$ @8 Y
  419. Music_Number
    ' E$ p0 i: V+ ]% X; t7 Z; J
  420. LDA Music_Cur
    8 l2 I" B. G0 a, L& R
  421. STA Music_Last' S# E* y0 J5 V& L4 U6 j6 |, b
  422. Music_Decrease3 a' d; |9 _5 q  V1 j, m5 [
  423. LDA Key_Once
    ( R$ u8 Y! i2 _, d
  424. AND #$42- H3 x7 B/ o5 T* v
  425. BEQ Music_Increase) d% b: ^7 F$ f2 k* B1 n
  426. LDA Music_Cur
    * Z2 t) |! e8 F! d. y
  427. BEQ Music_Increase
    , c; U& k% r; @9 I- L
  428. DEC Music_Cur9 P% g+ d) j1 ]  [1 A! w5 M9 W. T
  429. Music_Increase/ j5 o3 U: c. T# |2 F$ X
  430. LDA Key_Once
    ! B( h% g* L$ m5 N7 K% _
  431. AND #$81
    ) _0 S% h' E, N- `3 G  Q
  432. BEQ Music_Decrease_109 M0 g2 G$ _- E- K7 ~
  433. LDA Music_Cur
    2 S) \0 Z/ I, A+ ?! a. @2 a; E
  434. CMP #Music_Song_Total-01
    6 x: L1 K! L" @  V
  435. BCS Music_Decrease_10: q- F) n( T( y! X! y
  436. INC Music_Cur
    9 [- n8 ^2 F) l& i+ O% I4 L) W% F
  437. Music_Decrease_10
    " \9 E5 ?; O8 G, s/ E+ {( a5 M' \& G
  438. LDA Key_Once- f4 d* p! f  j3 w
  439. CMP #$04
    : {4 h2 L8 O' |" r) f5 T5 ?% w
  440. BNE Music_Increase_10: Y7 z3 E+ u) @7 L: i5 b/ U
  441. LDA Music_Cur
    * y/ q6 J0 C% \* Y- ?: K
  442. CMP #10
    - C6 k0 J, a0 y, ?" c5 h% G
  443. BCC Music_Start_Song_Min4 {7 c) h1 Z7 x' A) g! G# s. |
  444. LDA Music_Cur
    3 k' ?( ~7 x7 h9 K1 R# ~
  445. SEC+ ^6 y* \4 O+ E
  446. SBC #10! j/ C# w: x! `+ b
  447. STA Music_Cur
    ; W$ a9 ~  }9 M% q6 ]2 }
  448. LDA #$00
    - F4 K% F  E9 s: f
  449. BEQ Music_Increase_109 ?" |2 ]7 ^: ~5 y
  450. Music_Start_Song_Min
    2 c. a" i8 Z% O( e" i0 Y) r
  451. LDA #$008 e# Z' P" C, z* [2 u
  452. STA Music_Cur4 n% z& B) c5 c0 L; ?7 e* T/ Q& g0 O
  453. Music_Increase_108 I; E5 |% q0 ]% }  w0 p& j6 a
  454. LDA Key_Once8 w' _3 _" l5 T5 g  i
  455. CMP #$08
    7 q7 i- `" G/ n; ^0 p) K
  456. BNE Music_Number_End# l0 C/ b/ i. s
  457. LDA Music_Cur5 I7 r8 F; ]# ?9 O; W6 ^  N
  458. CLC
    8 z" @  z8 J$ S; ~2 w
  459. ADC #10
    2 I7 q# X1 E/ j$ M
  460. CMP #Music_Song_Total-01
    ! S  ?+ V$ x. J2 Z
  461. BCS Music_Start_Song_Max
    , j) p' G% C: B# e
  462. STA Music_Cur  j" s  H. l/ a  A$ C
  463. LDA #00
    1 w0 _/ o2 ~& w# I# Q! x5 @
  464. BEQ Music_Number_End( w8 G7 d. q( B: L0 @
  465. Music_Start_Song_Max0 a- B6 \7 W! H' S( g
  466. LDA #Music_Song_Total-01
    $ `! d8 c9 R1 X5 P
  467. STA Music_Cur/ [" i0 B; k  z! [- ~
  468. Music_Number_End
    + y% R, s; C1 `  @: w
  469. RTS
    5 ?! |" X8 o$ Z2 G; K# x+ h8 x

  470. - p! F8 L. {- [+ N$ B* j! b4 A
  471. ;==============================
    + d8 e) J- |+ s# ?2 J
  472. ;音乐重设/ F% S# Z: e0 d# u/ |" Q% P8 Y
  473. Music_ReSet5 ?" _6 x" L( Q
  474. JSR RAM_Clear  y: i8 K  g# y( B& P  ^
  475. JSR Sound_Clear
    ) K) l& n/ u" n6 B) |: s: c( e
  476. LDA #$1F
    + M  h8 S9 @7 S4 R2 `- \! k
  477. STA APU_STATUS
    " q: u5 K9 [+ a  `
  478. LDA Music_Cur& g  x; g1 l  ]# I. {) E& n& b
  479. JSR Sound_Init' J+ f8 f- W, P" ?5 z
  480. RTS: _$ l( L7 ^* J, @8 a& U' Q( D
  481. 3 a/ R/ a, O; R8 w
  482. ;==============================, P0 \; n* C9 L
  483. ;音乐端口清除
    & o& V4 q# y& F* ?1 ?
  484. Sound_Clear
    $ x8 l' t/ F8 }9 d6 ~# w& O+ n! |$ z- ~
  485. LDA #$00- X, L7 s8 C% \' k
  486. STA APU_STATUS$ b4 p2 Q9 e: }8 A8 X
  487. LDX #$00
    , t& p- T# \( N1 T: @( R% i; J
  488. Sound_Clear_Start& ^+ B& @: l  x# i1 J3 S
  489. STA $4000,X
    ( I# n% }( `5 W- V) Q7 V& F
  490. INX: h" T5 C, l$ N# Z/ j7 l
  491. CPX #$14
    * f. F( H4 q. {& X8 N2 F6 j6 T& m, ?
  492. BCC Sound_Clear_Start
    , y+ [1 F6 [1 i+ L% y
  493. RTS: `) _5 k+ g9 F6 d+ F
  494. 4 ^5 t9 F" L# E  X0 z
  495. ;==============================
    - E% |/ `; V8 @$ X1 E) [
  496. ;按键处理9 p: i1 B  ]# R' n* o
  497. Key_Proc
    ) J3 q6 A  f( k- ]
  498. JSR Key_Scan
    0 d; o  J! T9 f. v* g
  499. LDA Key_Keep. o' I3 [/ ?' W- k( d
  500. STA Key_Temp
    1 B' I! e# t" F, E9 f/ W
  501. JSR Key_Scan) Y. L5 J: X  a; Z& A/ q
  502. LDA Key_Keep
    0 f7 d3 k% L8 t. O8 w. P
  503. CMP Key_Temp
    9 F  Z2 J* a" O' a7 X. I
  504. BEQ Key_Get_Once: V6 E0 f) o2 g: F0 {
  505. LDA Key_Kemp! }# F& `( ^3 q/ q9 H
  506. STA Key_Keep
    ) V+ p% c/ w+ q( K0 Y8 T0 B" T8 @
  507. Key_Get_Once
    , ~0 b7 ~+ }  P$ k" K1 n
  508. TAY& A) b* N9 g$ k' ]6 Y* X
  509. EOR Key_Kemp" Y/ P( @: }5 i% z  w$ z
  510. AND Key_Keep
    $ q! j; I; T6 h! p8 Z* t: c' c
  511. STA Key_Once
    8 [# S9 G, E) M% E& d! [9 E
  512. STY Key_Kemp4 a) l6 K$ a+ ^0 ^4 J5 o" w
  513. RTS$ U# k4 O( ~/ L! f9 i1 z( ]
  514. ;------------------------------
    8 ^- H# {1 r, D+ K; a$ [* |
  515. ;按键扫描/ m8 O5 W6 R2 q- P7 N0 o
  516. Key_Scan. J% V4 x* u. C% ?+ W' ]( p
  517. LDX #$01& Y3 j1 \# i: v  N
  518. STX JOY1_FRAME
    ; q5 L- C' a8 T) a
  519. DEX+ ~+ W* Y- M3 D8 W, y; Y6 h
  520. STX JOY1_FRAME- S9 z, ?, g* r( e6 M& d
  521. LDX #$08
    $ A4 G& Q3 x* g% a; C" U6 R: t
  522. Key_Value
    * p. \/ @# q2 i2 G6 l
  523. LDA JOY1_FRAME  \7 B1 X7 n; F. B) I  W" I
  524. STA Key_Getv/ Z3 g9 o8 s6 i, K9 G
  525. LSR A8 y7 h0 y5 H$ o/ R
  526. ORA Key_Getv4 y% a3 q/ a% I$ H2 f- F, i
  527. LSR A
    5 l  `, @9 l! e1 o5 {; o
  528. ROL Key_Keep
    8 w. W2 X* d+ @5 r; _. s: I
  529. DEX
    , r' K& x, E. n  {, d
  530. BNE Key_Value4 _/ V0 B# e) j& m' |2 }
  531. RTS
    # O: @# g$ Y* E
  532. 4 u* t4 Y/ J$ I; W& Q, |4 [; F
  533. ;==============================
    . D0 e2 [& t2 B2 u3 _& a
  534. .IF SOUND_BAR_SHOW_ENABLE$ b1 E% C( E# t8 d3 J4 k/ U9 `
  535. ;音乐条显示
    ; E0 V. g, |1 s# f. y
  536. Music_Vision
    " s7 P, M# T0 Y5 _% t: Q" a
  537. JSR Music_Animation5 I9 [. I  z% p3 K+ f
  538. JSR PPU_End4 I- U( t! @. ~  g" `( N
  539. RTS) Z; Y1 @' ^: W3 e  G: M3 G; c: s4 n
  540. ;------------------------------1 {) ^! Q- a# M6 |- w" j
  541. ;音乐条显示处理
    + `5 O- @" r8 a
  542. Music_Animation% j& ^& S3 d9 S' F1 P2 R
  543. LDX PPU_Cur2 A3 J2 p% y% l( ~8 w  C; J
  544. LDA #Mode_Line, q$ A1 G9 r3 _- f/ D# f
  545. STA PPU_Addr,X7 L  J$ O2 |0 ^0 z9 D. t
  546. INX
    % [$ V" }1 ]1 U3 G
  547. LDA #HIGH(Sound_Bar_Pos)
    6 {! E7 f7 m) c6 `
  548. STA PPU_Addr,X
    , Y8 n5 t3 I  ~( d/ T
  549. INX" z6 ]6 V0 p( ?: Z
  550. LDA #LOW(Sound_Bar_Pos)" f, B8 p/ y; }
  551. STA PPU_Addr,X
    3 f" i, g- _; b$ h  x9 A- Y
  552. INX0 U! y% T& u) G5 Z
  553. LDA Sound_Bar
    ! W% P3 g( v6 r. C8 W( z
  554. JSR Volume_Convert
    2 t: o& g% W" H6 s9 [: b5 B
  555. JSR PPU_Return3 A/ Z) `8 h$ k1 B) N1 ]! w4 S
  556. LDA Sound_Bar+$4
    # Z$ a$ d4 m9 H9 m( @! }
  557. JSR Volume_Convert! E) `/ e0 c* y& O3 y( C1 x
  558. JSR PPU_Return
    / {! \# k/ S0 Y( `7 A0 [: S; K
  559. LDA Sound_Bar+$8
    * H' l0 V8 m0 o2 d) C$ f) O' A
  560. JSR Volume_Convert_Ex& P; ?# G5 |1 w* w4 A7 P
  561. JSR PPU_Return& y6 G" H3 f$ u# _6 ]
  562. LDA Sound_Bar+$C
    ) a4 ?" s7 a4 z: R
  563. JSR Volume_Convert
    , D2 L+ Q5 r- Z! u9 J  k
  564. JSR PPU_Return: F  W( d& Z& ~! U! q
  565. LDY #$10
    5 j$ e- q% w% q# ~3 ~# G' I
  566. LDA APU_STATUS
    2 N% v/ ~0 H+ y1 u4 C( H  ~
  567. AND #$10
    + d3 Z4 O$ i3 G
  568. BNE Volume_Count
    ) s" C; e5 Z  d
  569. LDY #$002 Y7 p' V8 s/ h! I
  570. BEQ Volume_Count
    ( [* Q2 O3 p/ ~7 C2 v+ Y8 s  F" R
  571. ;------------------------------
    3 g2 H+ ~8 F5 c
  572. ;音乐条处理* d3 }: q+ |  B) C
  573. Volume_Convert_Ex
    , }7 b" ^2 I8 G/ B
  574. AND #$1F
    * X2 ~. X! B( I+ N7 }- \4 H& \
  575. TAY
    7 ^" r' o9 c8 _& D  n' S
  576. BNE Volume_Count
      t" }, r5 \  k
  577. Volume_Convert
    $ Q6 m0 H0 m) V+ K7 u0 z
  578. AND #$0F. K6 i: y7 q$ X
  579. TAY) ?6 L+ S! h$ s8 r. x
  580. Volume_Count3 t0 P! i) t4 ^& k' T! ~
  581. LDA #$08
    ! o) q8 m6 ^: Q! H% p" Q( a5 A
  582. STA Sound_Bar_Cnt' s& S9 y9 U- q( n2 B7 B" \( ]7 K
  583. Volume_FILL) I' B% Y/ y9 A5 m, ?9 T
  584. DEY% Z( d- g: [  Y/ \# g: L$ J
  585. BEQ Volume_Half
    - A; O; T, V3 d* `/ ]
  586. BMI Volume_Empty4 P  }$ P" D# x
  587. DEY; z, i. A& \' ^  n
  588. Volume_Full
    . a6 S4 c6 R/ k2 Y% J. ?
  589. LDA #$16; i2 x- C. p# `# J; E
  590. BNE Volume_PPU9 J% H5 M1 H' V3 X+ r2 W! l8 Y
  591. Volume_Half
    * k2 @. M9 c% u0 b
  592. LDA #$15) |( s, a1 H  k4 R
  593. BNE Volume_PPU9 ]( @* n4 a, b2 [+ d: \+ c
  594. Volume_Empty
    4 V& l# W# v; }; c: k
  595. LDA #$14! ?/ t1 `6 Y9 |( _( d; z. z. b
  596. Volume_PPU
    - n2 f" ?& b; q$ o& n
  597. STA PPU_Addr,X1 g% i6 g" Y$ o" M0 p% I
  598. INX- Z. W8 \: l8 D# U& r( O! B. a# x
  599. DEC Sound_Bar_Cnt+ D4 A0 \  k" {: Z2 o8 M
  600. BNE Volume_FILL2 H4 f+ b# z& C( n  e4 e
  601. RTS
    7 S7 @1 [6 h+ K7 z8 \2 l
  602. 9 p1 V: e' M% f% U' |" _
  603. .ENDIF$ {0 ~9 Y5 Y7 s& w
  604. * A0 n) W2 r! E4 e; V
  605. ;==============================* N0 D; S% C; B8 p! M
  606. PPU_Addr_Set;PPU行开始
    ' ~$ D4 Q* O$ Y- n
  607. LDX PPU_Cur% l1 ^' F3 {' x
  608. LDA #Mode_Line% @; s, `1 d% V# w
  609. STA PPU_Addr,X
    % ^6 V$ U. G$ X" `7 h
  610. INX
    6 S2 R# u3 g3 l+ [! y% I
  611. RTS$ |8 |! J- q; _6 Y. f, t  V

  612. " _5 a, V" u; a" [% L2 D
  613. PPU_Return;PPU转行
    % A6 C! q2 j" ~0 u
  614. LDA #Flag_Over# O+ W6 m7 j  N; h) f
  615. STA PPU_Addr,X- m2 S7 R; k5 @2 ~4 J7 V
  616. INX5 ~" C- ^8 ?2 c% ]. C
  617. LDA #Mode_Return
    # ~# @! c7 a4 u$ G+ h
  618. STA PPU_Addr,X5 k0 G% S. l4 q- t9 Y/ ]) x0 n
  619. INX
    % n9 {; y5 W$ C- F+ t
  620. RTS
    ' B. k! Z( @: O$ }7 w
  621. 1 B& \' t/ \( r4 f4 S
  622. ;------------------------------7 y( i$ a) h# g- p3 ~' U
  623. PPU_End;PPU结束
    2 M# Y8 s1 w1 ]& y
  624. LDA #Flag_Over
    9 w6 p: D$ B! ?' ~
  625. STA PPU_Addr,X
    ; D0 B3 N( d2 \( `6 R/ Q
  626. INX/ }6 ~+ Y) G5 `% n; B" x
  627. STX PPU_Cur
    0 D5 K; f. I- S1 j9 c8 U" X
  628. RTS4 D+ R( `9 P, t: j" H( r/ X
  629. ;==============================% O+ t- j! P6 b# w5 r- @0 J% ~3 O. e
  630. Mode_Line     = $FD    ;新起行模式  w5 @/ i# N1 q, v
  631. Mode_Return   = $FE    ;转下行模式. z% h# q+ Q6 [, p0 p
  632. Mode_Clear    = $FC    ;行清除
    3 W7 \# S+ W1 W
  633. Mode_CntLine  = $FB    ;行计数写入
    $ c4 Q6 G9 i: t. ?2 T
  634. Flag_Over     = $FF    ;行结束标志2 a3 Z! A3 E6 i, |( v
  635. - B' {, \) g: f% X% @* o' E1 E0 J
  636. ;------------------------------3 Q- g, V- I5 q# v* a- N# X
  637. ;PPU处理  e, a& m8 W: `7 x0 z1 o
  638. PPU_Proc
    : L9 i+ X& }( B  ?. o; C
  639. LDX PPU_Cur
      ?5 ^; E: }- \; w
  640. LDA #$00
    3 r, H( v7 A1 d1 i+ Q+ |, C
  641. STA PPU_Cur
    ( t: P  k  m1 h4 v7 S1 v# L7 }6 H/ L
  642. STA PPU_Addr,X
    , R: d1 T. ^' u9 d0 c
  643. LDA PPU_Addr
    & a) k' H% m2 F$ W
  644. BNE PPU_Proc_Beg: a  m5 x) O: f
  645. PPU_Proc_Ret
    9 v: ^; ?) q) b
  646. RTS3 W; o3 t4 j3 Q+ y
  647. ;------------------------------
    - A8 O& }. h# G, I- m% @
  648. PPU_Proc_Beg  ;处理开始# N* S3 L6 b! ?& g+ ~
  649. LDX #$00. ~# W5 u2 z1 H: y9 s0 N' q/ Y
  650. STX PPU_MASK
    ! h1 g2 V) o* _* E
  651. ;------------------------------! e; c/ O6 z0 p# c2 {
  652. PPU_Mode_Select  ;模式选择4 u% o* f$ |; Z
  653. LDA PPU_Addr,X1 V+ o' Y8 j" I. o$ ~
  654. CMP #Mode_Line. t1 x% [  s! k. }" G; Q" D2 ~
  655. BEQ PPU_Mode_Newline- `9 N0 u# A3 s% C  [  i
  656. CMP #Mode_Return
    5 N6 e0 R/ n# i
  657. BEQ PPU_Mode_Return
    6 w5 O* i* Y, N0 N0 [3 p7 F! l
  658. CMP #Mode_Clear. ?9 g4 S$ A' D& G. l& F
  659. BEQ PPU_Proc_Clear& P, s. r! q: Z- J& o
  660. CMP #Mode_CntLine$ I7 H0 g8 g2 L& N  o5 F5 G8 ]
  661. BEQ PPU_Proc_Cnt_Line0 s8 I; ?* w9 u( D
  662. RTS1 P" N4 C1 w' T, v
  663. ;------------------------------" u9 s# p0 L$ E! ^/ S
  664. PPU_Mode_Return  ;转下行模式8 U1 L8 Q$ Q: F8 o+ a
  665. LDA PPU_Addr_L
    ' I* [9 e+ |$ f& D
  666. CLC
    " P8 U+ o5 ^( s/ {- J4 L( U$ E$ p
  667. ADC #$20
    , f2 ~5 l" `$ G/ }2 ~
  668. STA PPU_Addr_L0 p" d" b4 N( p! P( }, Y% H
  669. BCC PPU_Return_End" p: W, }) v( U) W
  670. INC PPU_Addr_H
    : b5 c. ?; G$ V; l
  671. PPU_Return_End( v/ g4 _8 P% `! B% M- O7 S
  672. JMP PPU_Set_Increaser+ }8 K6 C, z) [7 Q" u
  673. ;------------------------------( h& a: h% a+ O6 B; H
  674. PPU_Mode_Newline  ;新起行模式$ K4 N2 H( h/ {0 G9 B
  675. INX2 {! G( ~5 U1 Q2 b* p" ^. c' p
  676. LDA PPU_Addr,X
    3 Y' R* l- a5 e; n
  677. STA PPU_Addr_H% J* X/ ^3 W+ }1 D. Q& c
  678. INX
    ; t- z: ?/ N5 e( y
  679. LDA PPU_Addr,X
    9 Y. V1 O& N6 ~
  680. STA PPU_Addr_L
      Z  K( F% }, A8 j
  681. ;------------------------------
    4 ^5 `+ v" d) o9 p
  682. PPU_Set_Increaser   ;设置写入地址
    $ Y% ?0 Q: P! f' M8 b
  683. LDA PPU_Addr_H. E: S& Z$ d5 \3 k1 h
  684. STA PPU_ADDRESS5 o+ G1 e4 o2 h1 x& m/ u+ V
  685. LDA PPU_Addr_L
    % X2 L$ p: e* q( C! U
  686. STA PPU_ADDRESS
    ! o; z4 ?% e) s% w4 m' i
  687. ;------------------------------
    3 Z% T! t$ |- S7 n1 @: h. h
  688. PPU_Write   ;写入数据
    * k1 D8 ?+ [8 o, ^! I
  689. INX
    7 }1 @4 E( D, `2 G9 ~! }7 j
  690. LDA PPU_Addr,X
    2 o3 N" }$ ~9 X; A& D
  691. CMP #Flag_Over
    4 J; W4 D( R( e1 A: }
  692. BEQ PPU_Proc_End3 f5 O: M2 o. T2 V. O7 d+ V
  693. STA PPU_DATA# x6 ^6 N; u* R5 V! E$ v4 P
  694. JMP PPU_Write
    ' p' B& ?* V1 B/ w
  695. ;------------------------------
    ! ^* B# z, V: r8 H5 G# O) k0 c
  696. PPU_Proc_End  ;单行写入结束' _, H: m0 G3 q4 i) t
  697. INX& x& O7 g- N; ~# @# b
  698. LDA PPU_Addr,X
    6 O/ W% _  e  {* D
  699. BNE PPU_Mode_Select
    ( s8 m4 `7 P$ u- Y1 \/ Z( f! D( f8 c
  700. STA PPU_Addr
    # r+ C3 E1 E0 r6 \0 S" [- b1 A
  701. JSR Update_Palette_Color
    9 t, v) N4 @3 B! H6 k4 v
  702. LDA #$00% O9 C0 D( M+ ^6 T4 q, g! U
  703. STA PPU_ADDRESS8 N9 w3 Y7 I6 k1 |
  704. STA PPU_ADDRESS
    9 P5 N4 w9 x0 C! U4 `
  705. STA Show_Track_Name' Z' ]% L' B; q
  706. LDA #Scroll_X
    ; W* G  d, ]) C, e
  707. STA PPU_SCROLL; g7 L5 V  h) D5 ^, h' k
  708. LDA #Scroll_Y4 i% |6 U6 ^% ^' w
  709. STA PPU_SCROLL
    # k  N# v; }$ t7 O: G2 f2 S
  710. LDA Screen_State7 b; V$ J0 P# ?) y$ }  u
  711. STA PPU_MASK% h# L, t) U! O
  712. RTS
    ( R' {' }" M" H. J8 J# [4 F: E" q
  713. 2 l1 s- _7 y' N4 {$ f
  714. PPU_Proc_Clear6 N6 Z/ a  S# [1 O% J6 J
  715. INX/ C8 s6 U# Q: j0 G4 \0 G
  716. LDA PPU_Addr,X
    7 V7 ~$ A% Y0 [+ b; m. i+ ~
  717. STA PPU_ADDRESS& Z' E6 \# [) B' r; \* v
  718. INX
    " t" Q$ W; r$ F9 u0 c+ a) t
  719. LDA PPU_Addr,X  s$ `2 _; c' @  M6 z
  720. STA PPU_ADDRESS
    ; `" f0 m+ c) }
  721. INX1 r, D+ C; z; J. P, v3 X: D" P
  722. LDY PPU_Addr,X$ b5 t" r/ ~: S% @3 v9 f. u# h' e
  723. LDA #$00+ Y- V* v+ G/ O" w' X
  724. PPU_Proc_Clear_Write( p. i6 B4 v& X; N
  725. STA PPU_DATA3 u5 N* J: K! L: c6 O6 w
  726. DEY, x0 F1 A4 t& {/ g! t
  727. BNE PPU_Proc_Clear_Write, D6 c- {% F$ d) B' P" p9 y
  728. JMP PPU_Proc_End
    0 Y% P9 P( ^- B+ [
  729. - P1 c& C7 J! j$ S
  730. PPU_Proc_Cnt_Line- A( o) U1 t. A7 r- V: t1 E
  731. INX
    5 m8 h5 m. Z4 l; x' N& b
  732. LDA PPU_Addr,X: F# d8 m: l7 e, J3 q
  733. STA PPU_ADDRESS1 Z/ C0 c7 f# M/ P' Q
  734. INX  T8 |* u9 T- H0 {0 G9 ~
  735. LDA PPU_Addr,X
    , j. H# p( ^' I. {
  736. STA PPU_ADDRESS# a0 \+ L% a( y' p# D
  737. INX* ~. d) H+ y3 [& B7 o5 G7 X5 @
  738. LDY PPU_Addr,X
    2 \7 i, N. g( e9 c, X& G$ t
  739. PPU_Proc_Cnt_Line_Write
    : s: n  a, z2 \0 j: ~' g' O
  740. INX8 w. m5 ?8 e& H, b( O
  741. LDA PPU_Addr,X
    , \9 q8 }& d+ J/ H2 j9 [% F
  742. STA PPU_DATA% q4 X$ {0 D8 I7 e' o
  743. DEY+ `& T( n0 O) h* d
  744. BNE PPU_Proc_Cnt_Line_Write: j* H, h) h/ H9 _
  745. JMP PPU_Proc_End1 g2 r; H9 \' f& L( k7 L; K% n$ W+ ?3 V. h
  746. " C8 l. Z* T8 C1 f2 D$ |% Z
  747. ;==============================* ]. g) b% C9 J1 G) k0 h
  748. HEX_To_Dec;十六进制转十进制" s% a- P3 ^, V7 {; P: W
  749. STA HEX_Data
    ) p/ M2 J! M6 B5 D& ^
  750. PHA: C: P0 D  M+ y. k
  751. TXA  c! c  `: a4 P) N" c
  752. PHA
    : z" @& _2 `$ z, I
  753. LDX #$004 f4 V) R" d9 ^( E& a$ i' O
  754. LDA #$001 \% W+ |9 G$ E  }! g+ z
  755. HEX_Cln' l& _$ V8 k" y4 G4 N
  756. STA DEC_H,X9 c) ]% C# Q/ G  E# S
  757. INX
    / U" y6 `- w, `& D0 D
  758. CPX #$03  X( C0 h; a7 }6 v* \7 F( x$ h
  759. BCC HEX_Cln* f  u% j8 T: D, s* [$ R
  760. LDA HEX_Data
    % B8 `; y; F* I# l
  761. ;------------------------------' o8 {! r8 _4 v# D( a
  762. HEX_1005 c$ H% U+ C2 K$ ?) N+ A9 _9 u0 l
  763. CMP #1008 w! d5 G) U+ A( l. e
  764. BCC HEX_10& p! |! A+ z3 ^+ x' d% Z
  765. SEC2 D. L) w: I; `3 S" U+ A
  766. SBC #100  O4 `3 J: D9 e. y
  767. INC DEC_H
    : K8 _$ M( y4 {1 j; Z! b2 T
  768. BNE HEX_1002 F9 R  ?4 E& `2 F- E4 p" [% x+ w
  769. ;------------------------------
    8 Y: Z2 `" s! \) V; ]1 w# N# Y# B
  770. HEX_10
    $ i  L6 }8 F  Y) k! Q& U
  771. CMP #10
    ( h" S# g4 _( G% d+ [
  772. BCC HEX_1
    5 E) a; v% J6 Z
  773. SEC7 r; Y8 @. M- b! P7 _9 N
  774. SBC #10
    ) G% y0 D4 d3 m
  775. INC DEC_T
    $ \& Z, p( z+ y" s& N
  776. BNE HEX_10
    ' B; W1 {2 d& h) D- i" O
  777. ;------------------------------
    : t" e; r/ E* l* h+ S. [4 ~3 j
  778. HEX_18 j4 [8 R+ B& c) v2 {% o2 x/ e5 W
  779. STA DEC_L+ S! X; J2 n2 Q7 N+ b& n3 {) M6 U
  780. PLA4 U4 P+ i; H1 X
  781. TAX! X) p: W- m, k* C. O
  782. PLA
    : x3 _$ b" o) P0 m" `1 N6 E. C
  783. RTS4 X8 z( z/ I+ ~) Y4 u$ ?1 E+ G  q
  784. * x, Z" H& `4 D$ d& C
  785. ;==============================6 j# y3 `& H, J! f2 S; |
  786. ;音乐曲目显示
    6 t- a. e7 t/ w4 e' y0 ^, ~: X
  787. Music_Show) G/ Z+ u8 w1 n+ t: ]! c- f
  788. LDA Music_Cur4 N4 X2 h( p! {) ~. Z6 D! W
  789. CLC
    9 O! S8 w. S, a7 w; O, Y, _7 F
  790. ADC #$01" T. ^8 f4 P' i) A
  791. JSR HEX_To_Dec
    * Q3 d9 W  \) ~* L2 [4 I: Z
  792. LDX PPU_Cur+ ~$ A" O) ?; P8 x/ r$ ~
  793. LDA #$FD
    , A2 \2 b0 T+ g+ w" ^( i5 R
  794. STA PPU_Addr,X
    2 Y, e( q/ O2 f6 f% N/ z+ \( J
  795. INX
    8 M7 G$ a; V) Z( ]1 E9 u, j; S
  796. LDA #HIGH(Play_Index_Pos)7 J# S$ v: g+ R0 ?0 P3 d/ v
  797. STA PPU_Addr,X; N* f) C  Z2 p! r
  798. INX
    2 i1 F2 }8 X/ d# G
  799. LDA #LOW(Play_Index_Pos)
    : b+ q* Q, }/ Y: w/ k+ a9 K  e  U
  800. STA PPU_Addr,X
    6 U0 J' i5 Q/ k+ V
  801. INX/ r& X( }8 s2 y6 Y) k

  802. ' X6 i0 }% Y+ @0 F5 P1 w" o  }
  803. .IF Music_Song_Total > 99/ j/ e! ?) w! h. U. B
  804. LDA DEC_H
    " K4 z9 s* o* l7 l) Y5 I1 b: i
  805. ORA #$301 |7 ~$ b9 j4 _+ s: c8 j6 y/ |+ R  V
  806. STA PPU_Addr,X
    - Y1 V' j+ D$ l- j$ u8 [
  807. INX
    0 g, f- T+ ?- Y/ ]1 x
  808. .ENDIF- `" L* Q' N( P

  809. 2 ]' b1 F2 L  Q4 x0 H& ?+ J  _7 k/ M
  810. .IF Music_Song_Total > 9+ [( H6 `: b# Q8 W' k: N
  811. LDA DEC_T5 L! {: a" H0 [3 T9 `/ ], d" P; e4 W
  812. ORA #$30
    + i$ f8 a. g$ k+ ^( M/ f" W' Z& n
  813. STA PPU_Addr,X
    0 a# ~5 ?, e8 _: O
  814. INX
    - i" N. m  {* J8 B2 ^% b  \
  815. .ENDIF
    6 z7 _. K$ j/ z6 @' Z* ?! |1 t

  816. 7 a  }, U! Z4 h& E( A
  817. LDA DEC_L, ?2 r+ A" ]. O0 a% K
  818. ORA #$30$ |7 ~* P6 O- c; i/ |2 n: o. u5 z) l
  819. STA PPU_Addr,X6 g" i/ _6 l: O1 g6 b
  820. INX
    : W1 B0 [+ _; B
  821. % j+ w$ \" c1 A# b" _
  822. LDA #'/': \) |7 M1 O$ b4 w) h) o
  823. STA PPU_Addr,X
    ) L0 e1 J- s4 Z# T: L- x# R
  824. INX6 E5 b  Y0 [: `0 M! D2 V
  825. Music_Show_Total
    3 Z/ [% j; e/ e
  826. LDA #Music_Song_Total
    # ^7 H2 F0 r, ~
  827. JSR HEX_To_Dec
    1 ~  a$ X& Y. N
  828. 8 ~% f# H2 X! U& ?! v! K
  829. .IF Music_Song_Total > 99& ~; k7 r' O. L0 l0 m$ R
  830. LDA DEC_H5 h0 ]$ E3 O/ Y% x4 V0 R
  831. ORA #$309 D2 w# G9 f; O: A
  832. STA PPU_Addr,X
    6 v/ }  Q. v: s7 i- D4 j4 j
  833. INX
    0 Y4 `" v) X5 U  U' r
  834. .ENDIF
    4 a9 G2 h" w/ G/ ]1 T2 B$ E# i8 @

  835. ) O% R6 v/ D8 [" o
  836. .IF Music_Song_Total > 98 Z* k5 f7 O) i7 R
  837. LDA DEC_T8 P! T% x" L6 `$ A6 f- z3 Y9 G$ ~( z
  838. ORA #$30& M3 z  t/ S% y/ @5 o, o$ ?
  839. STA PPU_Addr,X" j+ C& Y: _( o3 s% ^+ B
  840. INX8 {5 A1 L' d8 ~. Z! A7 s7 {
  841. .ENDIF
    0 q+ a+ i, k5 \! ?9 b  z3 j: Y

  842. 3 N. I) c: z1 h/ ?0 o
  843. LDA DEC_L
    " @+ [2 \% \8 Q4 A
  844. ORA #$30  Z! z5 }: ?" D& X7 y
  845. STA PPU_Addr,X
    $ P. n. C) t2 j8 ?8 t1 K
  846. INX
    8 G$ t3 i! c% P* J

  847. - T2 u* c: Q5 g3 @- c  X( Y' u" D
  848. JSR PPU_End
    8 ^7 R" t; m  {0 G; {5 z: P
  849. Music_Show_End6 O+ w# g3 B2 [3 Q/ d3 Z8 z
  850. RTS
    1 Q! Q. Y' \& Y' V  {  @# ^2 _

  851. % O# P0 ]' ^# r+ ~- c5 ^9 m
  852. ;==============================" W- _, V( g; Q! I$ k0 Z1 N) a
  853. Time_Show;播放时间显示) ~( |0 F4 y# |5 D
  854. JSR PPU_Addr_Set7 A. M2 J/ }. |# o7 ^+ X$ A
  855. LDA #HIGH(Play_Time_Pos)
    2 z/ i9 J; O- @% H
  856. STA PPU_Addr,X5 c$ J2 w( o: V+ q% `9 a; ~2 e% l
  857. INX$ d  d- R) t" N, \1 q1 D- R
  858. LDA #LOW(Play_Time_Pos)1 w  V  h5 E% p- c
  859. STA PPU_Addr,X, W/ k: d- x0 B2 T, R2 k  k5 J% I4 _
  860. INX; ^6 O. N9 u& L3 D8 W
  861. Time_Show_H
    ! v: }5 Q, F/ D4 @' V
  862. LDA Time_H
    5 @. j- B1 X% R1 C1 T4 J7 P
  863. JSR HEX_To_Dec
    1 a0 n/ z3 Y; d4 H- E, t$ p2 H
  864. JSR Time_Digit1 U' w! h( i+ \6 n6 S
  865. LDA #':'
    2 X' w- Y. ^5 r" o5 \
  866. STA PPU_Addr,X* r7 C; }( [6 }" [( G* m
  867. INX/ K. O8 @: z2 z+ ^2 p
  868. Time_Show_M( ^. c0 H  v3 `2 H2 ~
  869. LDA Time_M5 h+ G3 W0 C/ \+ F$ z; L& \
  870. JSR HEX_To_Dec- h- d( d& f% n4 {1 k
  871. JSR Time_Digit) p  L/ |0 L9 v/ X0 H- q
  872. LDA #':'
    ! n! W6 c' ]& K* p$ c* C
  873. STA PPU_Addr,X" `! {/ {' [9 _* r& ^! T6 j9 u
  874. INX% o# i6 r3 ?- ?8 v. V
  875. Time_Show_S
    ( D* O6 g( `& S4 u& F6 A9 j  V7 Y
  876. LDA Time_S% y( T* Q, B1 A: t. l$ Q" f. r3 z
  877. JSR HEX_To_Dec: w5 K. r! L; i4 Y' B; N
  878. JSR Time_Digit
    ( B! ~8 ]: ?# V8 q+ M. W2 y# S: d
  879. JSR PPU_End
    6 q2 @9 ?" o# H3 M9 T/ Z
  880. Time_Show_End2 X9 v6 k9 Z$ w3 A+ P3 E) b
  881. RTS5 x- |4 O  j8 f! ]  \; f, \: C

  882. ! B: P* [* `3 z
  883. Time_Digit
      h6 J) P. ^4 w0 o
  884. LDA DEC_T4 g* p  F' Y+ v' P  o; B5 ^
  885. ORA #$30! U# C& _- Z: ^$ M. H( j
  886. STA PPU_Addr,X' \( Y8 d9 I6 l1 ]. O, W5 G
  887. INX7 i. E- Z: f5 e1 S: d
  888. LDA DEC_L6 ]* S4 l3 k' d, L) B
  889. ORA #$30) `* ?% q. K! Q' m2 N: ^5 D
  890. STA PPU_Addr,X2 F; `! q, r2 {+ B
  891. INX
    . ^: j/ ?7 @1 |$ Y
  892. RTS( x2 ]+ D8 |( W/ c- |/ m
  893. 4 P0 s8 q9 C9 `5 B
  894. ;==============================
    6 `# S* e$ ~% m% Z- e  X- I- ?- _
  895. Time_Count;计时
    3 E, c! e8 J4 r, m. D1 e
  896. LDA Music_State
    ) b6 u' S8 a+ W1 v6 @! h
  897. ORA Time_Wait_Cnt- C7 M% m8 _9 L2 D- f- k
  898. BNE Time_Count_End+ @7 Y- D2 w. I/ B) G1 [; X
  899. INC Time_Cnt2 `& p, S9 t9 E' z6 \
  900. LDA Time_Cnt4 y- ^% Z: ?9 ?* J' [
  901. CMP #60
    5 x9 f" r" X7 y* j
  902. BCC Time_Count_End  O9 n- Y6 Y6 W' {: k/ u; j, R1 Y& E( k
  903. LDA #009 R- z$ m1 M' O% J+ I( Z+ c
  904. STA Time_Cnt
    ! t2 ]) Y. |5 U- z. s/ D
  905. INC Time_S, c* f# a; n6 p: p- e

  906. # q; R$ o8 ]8 E4 {9 F' T/ \
  907. Time_S_Cnt
    ' f* h" ^% j2 I
  908. LDA Time_S* n3 {: m( a9 H, E; D2 n
  909. CMP #60
    / M7 d& L5 W" e, ?  M
  910. BCC Time_Count_End
    3 z4 i7 F' j8 s. x6 Y& U+ f$ ^! W
  911. LDA #006 q  ]( g% k0 D$ ?: f* Y2 c
  912. STA Time_S0 X  M9 c4 J- u0 N- Z
  913. INC Time_M
    3 B. h7 z* b2 d* o* `

  914. * N; Q. k0 c5 Q5 y) M* _
  915. Time_M_Cnt
    . w$ r* v5 I6 R( Q; ~+ w
  916. LDA Time_M
    & u( ~5 N- `' ]
  917. CMP #60
    6 y4 X5 w1 H9 V! a, ]2 G' t
  918. BCC Time_Count_End
    9 V& d, W! M. O
  919. LDA #00
    % x/ m' t  Q/ Z( t0 }: v8 K1 z7 w+ Z
  920. STA Time_M
    ( h/ i6 ~' N( m/ X. o& e3 p: R' d& q
  921. INC Time_H
    2 e9 o9 u+ l$ m; t8 t

  922. ' b( @( f7 k/ x/ ]& |; b) ~' }+ P
  923. Time_H_Cnt
    0 p. W$ E8 P" \: v9 ?
  924. LDA Time_H
    2 f! v8 L, m8 j
  925. CMP #24
    7 n3 `% X# t& r
  926. BCC Time_Count_End
    / O3 u( d5 P7 ]. |7 M% o4 V3 K
  927. LDA #00& F8 s" c5 z5 ?$ N* a6 u
  928. STA Time_H
      f1 U  p2 o& J, _! ^. @

  929. ! i: c: f9 A- ~, V0 H, b/ j
  930. Time_Count_End
    $ P! Z* J: [4 e, g! c
  931. RTS
    ) N, a5 S1 E' ]! C- Y( J
  932. 5 Y5 F* r0 S( g6 ~7 q) x* E
  933. ;==============================
    : U) V: {9 C- r" J* F) m
  934. Time_ReSet;播放时间重置+ _9 t+ T, a/ Z
  935. LDA #$00
    % {7 J0 _( Y  P8 C3 W
  936. STA Time_S
    . @- m1 O& |5 m, }
  937. STA Time_M
    / K: D. ~4 O* I6 c: D
  938. STA Time_H. X) G5 w; i" S% l$ W3 L, r+ V
  939. STA Time_Cnt
    9 G+ o2 q( Z+ `7 C
  940. RTS
    # h, O/ O8 _5 A/ O

  941. 7 ]* A# |$ v% g
  942. ;==============================
    + W  j8 m; b# Z9 u4 ]0 Y: w7 ^
  943. Music_Bar_ReSet;音乐条重置* h3 t; s; {/ [0 e! {/ r$ B
  944. LDA #$00) E8 Z7 \0 o& g! [/ q* T
  945. LDX #$00% p7 }3 D& ?! b- M0 e0 p$ ~
  946. Music_Bar_ReSet_Set
    2 [$ _+ c/ L6 h/ z
  947. STA Sound_Bar,X% n$ v# P1 ~  `' j
  948. INX4 b0 z) h% v9 m+ I* c& N
  949. CPX #$10+ [  T' h3 y0 _. D' G7 X+ s. D. d
  950. BCC Music_Bar_ReSet_Set
    8 o; {% i; \( H4 ]
  951. RTS% F2 q4 ]2 B) F8 x2 P( F* ~3 j. H

  952. 5 A6 N+ J' ?* S4 G7 h! N
  953. ;==============================! w0 g! M: A2 C5 c5 K' C% Q9 i% _
  954. PPU_Data;PPU数据写入
    $ g& h$ P7 E4 t6 W. Y& Q
  955. STY Data_L
    ' e3 `5 s* t- j1 D. D* V
  956. STX Data_H
    " N% o" v9 M" W
  957. LDY #$FF
    4 n- y7 o2 ]- B! H0 b+ M; o
  958. LDX PPU_Cur
    . T! ?/ Q* X  W/ g3 S' E) ]9 `
  959. DEX3 N% [$ Q( s* o
  960. PPU_Data_Beg2 {. \; n6 F) T" m3 j1 J# v) [
  961. INX
    0 b. z$ u- c6 F& p* h% T
  962. INY1 u0 R4 B& _) E* H
  963. LDA [Data_L],Y
    , N. O- S$ ?  E
  964. STA PPU_Addr,X
    4 P' A  [" b4 d6 o
  965. BNE PPU_Data_Beg. Y6 r/ R1 \- f/ T" A* y" H) `. f
  966. STX PPU_Cur
    9 ?' k( {( ?5 N* u: K0 |, {
  967. PPU_Data_End
    - p  [2 F6 a& K" L! Z' |
  968. RTS: n" p. ]& y1 A" @& M; Y
  969. 7 v% @9 w3 V6 S
  970. ;==============================9 e8 T: Y. e4 O* l
  971. Music_Stata_Show;播放状态显示
    * @! I# o2 E7 K2 \3 y$ f7 x! l2 x
  972. LDA Music_State
    7 }) r7 R1 r: [3 F- U8 u, Z( o
  973. BEQ Music_Stata_Show_Play- s: m" t4 D$ t; d' v
  974. Music_Stata_Show_Stop# m( U, }4 Q, ]3 g7 q
  975. LDY #LOW(Music_State_Stop)" {. ?1 |5 Y+ N% d1 z+ }0 a
  976. LDX #HIGH(Music_State_Stop)1 j+ }3 b5 t4 }- q5 e3 Q
  977. JSR PPU_Data
    ' P0 u) h5 |+ d0 j. {7 Q
  978. RTS
    $ [" }+ `: Z) o& M& n
  979. Music_Stata_Show_Play( L4 [& h9 K0 x' I) q2 j6 n
  980. LDY #LOW(Music_State_Play)
    4 D# N' ~, m9 `& v  I
  981. LDX #HIGH(Music_State_Play)- G- a9 O6 Z! j; N" F
  982. JSR PPU_Data) ?2 o9 p) Z3 n) Z9 p+ F
  983. RTS& t1 h& ^" {* ~& b" C
  984. + v7 Q5 U4 P" u, }
  985. .IF SOUND_BAR_SHOW_ENABLE
      S3 t: @! O2 u/ ]* w2 f! ]/ n$ q5 u% u
  986. ;==============================+ q* H6 J* E' v. E  j
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ) A! Z8 b9 j5 J2 l- u/ \- K: f
  988. LDY #LOW(Sound_Bar_Text_Data)2 C, t' W7 g! z( q3 J7 w4 m
  989. LDX #HIGH(Sound_Bar_Text_Data)4 |# ^+ E+ ~6 A; ~( H% W+ A" Y; U
  990. JSR PPU_Data
    : W5 C4 w- J. B3 c
  991. RTS% c+ C- U. ^0 B3 ]$ Q
  992. / @$ F* }% f. i" ]/ Y6 m3 q1 l
  993. .ENDIF+ {4 w2 h' P, O$ T. [. K+ M; F

  994. $ ?" g7 [) I0 k- N
  995. ;==============================
    $ H  S0 w- `+ G1 K+ S1 U; ]5 l
  996. Set_NameTable_Attributes;设置命名表属性
    % F8 A/ k" v0 ]) Q! ?
  997. LDA PPU_STATUS9 m# ?8 ~# p. {; }$ B) p' g- j) y
  998. LDA #$23  q0 I$ d5 I8 p  U5 w2 w" _& C! O" j
  999. STA PPU_ADDRESS
    & Z5 L0 a0 i) P
  1000. LDA #$C0
    7 H# |$ ?8 G- H# ^: j$ A
  1001. STA PPU_ADDRESS/ J  d6 i% x1 t
  1002. LDX #$00  K2 \5 N# s8 \
  1003. Set_NameTable_Attributes_Write
    . C& y: Y3 J, A8 A, a' ^1 |
  1004. LDA Palette_Attributes,X  t+ i4 W( Q% f9 m3 c9 P
  1005. STA PPU_DATA% ^8 O8 U  H+ x+ }6 k) c1 ~/ b
  1006. INX
    " H; v. ^) q0 l  n( \
  1007. CPX #$40
    ; e5 _# \1 W& v) U
  1008. BCC Set_NameTable_Attributes_Write9 ~1 Y: l' }9 G& q1 C& Y4 y/ D, e
  1009. RTS5 B% c! D5 ]9 @) E* ]& m; b

  1010. * Q2 @1 x& B$ s- a
  1011. ;==============================# q& z$ L9 y  m# [  T
  1012. Set_Palette_Color;设置调色板数据
    6 C- q; z% l+ K2 _- w+ h) e. j
  1013. LDA PPU_STATUS9 V  S) {* v! N6 g
  1014. LDA #$3F
    8 K5 K3 i  x% l+ z9 C
  1015. STA PPU_ADDRESS- ]% s! F- r/ r! b/ E3 W- ]0 M
  1016. LDA #$00! l; c' w8 S2 x+ ^7 O: i6 g: a
  1017. STA PPU_ADDRESS
    $ C, o+ c7 T6 D' @& B
  1018. LDX #$00) [* {3 u# z3 q  s9 N" U
  1019. Set_Palette_Color_Write
    0 t& A( s) E0 M" g. z! _+ ]
  1020. LDA Palette_Data,X
    # ^( U! @( x6 q* i
  1021. STA PPU_DATA. @2 J  q3 T# b+ g+ }% e/ Y7 s! a8 p" h
  1022. INX% A; R& S& A) f" ]1 |; [
  1023. CPX #$20
    * Y0 Y" T& S* p& |0 L
  1024. BCC Set_Palette_Color_Write
    6 q' f) L* ^/ H  ]5 ]
  1025. RTS
    5 F4 ?9 _" E1 [0 y1 G( g

  1026. 7 ?+ k3 F" w8 q, B' f; C1 f! X, L
  1027. ;==============================
    + k' M5 [; ^+ }' ?
  1028. Init_Palette_Addr;初始化调色板数据5 Z3 E" y, P1 t* T# X: D8 e* E
  1029. LDX #$00
    4 D$ I9 E9 r, \8 P! l9 R( M
  1030. Init_Palette_Addr_Write
    ! R0 t+ H% k/ _  d( \" C2 n7 u
  1031. LDA Palette_Data,X: ]$ }: U: p7 n) A; Z% D
  1032. STA Palette_Addr,X
    , ~0 t5 q2 ]$ R
  1033. INX* o; G7 C! t$ O  }4 B# K
  1034. CPX #$20: c# ]$ D6 l9 A8 X
  1035. BCC Init_Palette_Addr_Write
    ! B: h' t" {. K6 e
  1036. RTS
    9 W% n2 G, S& l' @
  1037. 3 c1 r. i9 U0 ]8 C8 v# X; K9 I
  1038. ;==============================8 s) c" B+ t! S- F# k$ t
  1039. Update_Palette_Color;更新调色板颜色
    # h" }0 ~; X9 Y( s- G
  1040. LDA Show_Track_Name
    3 [! ?7 W8 J" J* Z3 l
  1041. BNE Update_Palette_Color_End
    - G( y! p* g9 Z: ]1 f
  1042. LDA Palette_Update_Flag
    + e5 P# N1 X, D  p1 V: ^
  1043. BEQ Update_Palette_Color_End4 O$ j2 _. f" x; j/ A( V
  1044. LDA #$3F/ a. |  ]# A) G1 [- X! s
  1045. STA PPU_ADDRESS- I4 K1 S9 ^% _' a
  1046. LDA #$00" |) {) U: R6 L. ^
  1047. STA PPU_ADDRESS
    9 V& j& B" ^6 x' w2 i6 c+ V
  1048. LDX #$00
      S. [9 h0 D# H. k, A: u
  1049. Update_Palette_Color_Write
    ! M" ~$ t4 Y" f* G0 E
  1050. LDA Palette_Addr,X+ A9 a6 R" L4 p4 T4 w- Q
  1051. STA PPU_DATA
    $ N+ \* F  W/ }7 i  y) ?$ C
  1052. INX4 _* E+ L5 {, L$ _) f1 a9 H5 H
  1053. CPX #$20/ ~& |9 B" z8 ~1 B& k9 ^
  1054. BCC Update_Palette_Color_Write3 ?' y  W3 L% ?3 x& d
  1055. LDA #$00
    5 g3 E+ l0 q1 A  h: t
  1056. STA Palette_Update_Flag3 T& Y/ z  y$ b0 `
  1057. Update_Palette_Color_End2 F/ w/ B# ?* F2 A. C6 R' E# F
  1058. RTS
    ! P- O6 q7 g% c8 V+ u& s
  1059. + Q. ]& G# h: A( ]8 P- D
  1060. ;==============================
    , c" }% {6 B( n  Y! N1 ~; t
  1061. Update_Palette_Data;更新调色板数据
    + o% t$ w! c: U# V
  1062. LDA Show_Track_Name3 k  Q# P% T" H: ]; E
  1063. BNE Update_Palette_Data_End& o4 n/ _) Y) T4 A
  1064. LDA Music_State
    - K0 s. i! D! A/ a8 w* m
  1065. BNE Update_Palette_Data_End
      d# ^9 `5 `2 }. O" N& Z
  1066. Update_Palette_Data_Check
    3 f1 e% ^* T: @
  1067. LDA Palette_Wait_Cnt
    1 g0 `2 m4 P; d/ [: K9 ]. ]
  1068. BPL Update_Palette_Data_Check_Over
      R4 E9 p8 p/ }/ [2 e. u
  1069. LDA #Palette_Update_Interval0 q6 ]; O# \4 l0 r& m  ?6 A  Y7 d$ _
  1070. STA Palette_Wait_Cnt* g0 c4 A* h$ `
  1071. Update_Palette_Data_Check_Over
    5 d: P# a% |0 a/ N  S
  1072. DEC Palette_Wait_Cnt3 T% q- X2 ^( R5 t" f8 B' d% u
  1073. BNE Update_Palette_Data_End7 h4 p4 n( U% @9 M
  1074. INC Palette_Update_Flag1 Q7 K9 {6 p1 ^* k
  1075. LDA #Palette_Update_Interval
    # C! [" k# \$ _
  1076. STA Palette_Wait_Cnt
    $ S2 v/ \1 b+ o% v6 E9 J
  1077. LDA Palette_Update_Addr
    6 p( ^6 Y" o" j: W9 r
  1078. CMP #Palette_Update_Max. h  E9 w  P! f$ K. s
  1079. BNE Update_Palette_Data_Set
    7 x* o& X* `2 x- L$ ^
  1080. LDA #Palette_Update_Min - 11 g% b$ x3 D2 Z/ J) p9 u3 S2 d* q
  1081. STA Palette_Update_Addr4 [8 t$ T" f/ A4 I  B
  1082. Update_Palette_Data_Set7 o2 F1 K9 q+ i" H& A
  1083. INC Palette_Update_Addr* N5 i' D4 K, k" @
  1084. Update_Palette_Data_End
    ; n% P- I+ O. c
  1085. RTS
      W: K5 n" R: z# `5 ~1 t

  1086. * \. S3 G" `4 b. \
  1087. ;==============================
    % n6 d" n5 Y6 U3 ?" u
  1088. Show_Music_Text;显示静态文本
      l2 [3 N# ?. u7 m
  1089. LDX #$00# n6 x- D- N+ j+ F# F7 j' ?
  1090. Show_Music_Text_Set2 S7 V$ K  {: E6 K$ m, U
  1091. LDA Static_Text_Data,X3 Z/ g" S' j+ K- y+ j+ A
  1092. STA Data_L
    . E+ Q; {. [" _7 Q+ K7 `
  1093. INX: [/ E1 l( @' u  ~% r/ \: B
  1094. LDA Static_Text_Data,X
    ! g7 ]( i6 L. c( Y/ v% j7 x7 u
  1095. STA Data_H
    ( V4 q7 I+ o# N0 T  F4 X( a3 C) m
  1096. INX
    / \4 f8 ~: I+ z
  1097. LDY #$00
    5 B9 L% C9 u$ A4 n$ _& w3 Y) r$ v
  1098. LDA [Data_L],Y
    - }3 y" M7 C3 T: |
  1099. STA Data_Cnt
    5 A& G, a; N; c/ v5 I
  1100. DEX- c" @8 z# j) B8 {2 I
  1101. DEX0 {6 M& f" \$ j+ i3 \" z( o
  1102. LDA Static_Text_Pos,X3 k2 O0 K) x, K; m
  1103. STA PPU_ADDRESS7 n  X0 c, i  c' ^
  1104. INX
    * D" m4 A) D' b- v. H: {
  1105. LDA #$205 E8 f2 y; }3 g1 ]
  1106. SEC9 M8 F1 v2 W% N5 ^2 b5 B  X# w
  1107. SBC Data_Cnt" u* w+ R" `8 P- A% u( C
  1108. LSR A4 \; E. z$ q( L/ S3 ^( c
  1109. STA Data_Buf- [9 [( U0 f5 \
  1110. LDA Static_Text_Pos,X4 e& ]- _1 A" g
  1111. AND #$E08 p2 |' F4 ^4 H3 [9 s! h
  1112. CLC
    ) i9 V6 C6 T5 D  l4 L$ v/ G# M
  1113. ADC Data_Buf
    ) j2 |3 U- e  s& Z) ?
  1114. STA PPU_ADDRESS' y+ p1 A. B: ]% R7 X; o5 B9 @" m
  1115. INX" }$ Q& _( H4 {: ~" V
  1116. Show_Music_Text_Set_Write
    " b8 e& x  O/ j0 |4 B# _4 P. N. r
  1117. INY" S/ w% j1 l  y% a0 o) ^
  1118. LDA [Data_L],Y
    : k1 R5 p! c/ }( g% B) S. F- J
  1119. STA PPU_DATA" j% g8 u- j! C: U
  1120. DEC Data_Cnt
    # S9 S7 R3 B% M
  1121. BNE Show_Music_Text_Set_Write2 }4 k! l" P' D6 B% ~- _9 K) `
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos2 a, M: m, s3 m/ s8 r
  1123. BCC Show_Music_Text_Set) z2 f4 [$ F/ f# _- n9 i
  1124. RTS# ^7 n, T* o) {
  1125. " f' S% `4 d2 g+ Q, {
  1126. ;==============================8 c* Z6 o, L2 z9 t0 E" F  M: _
  1127. .IF Track_Name_Pos;显示曲目信息: g' i" ~4 T' v5 M% R
  1128. Show_Track_Info+ ~: c. Z% ]" o. l
  1129. INC Show_Track_Name. }3 t9 h- D3 J0 u
  1130. Show_Track_Info_Clear
    ' `+ n7 @, g1 t' M4 t
  1131. LDX PPU_Cur
    + {5 P6 ]% y  Q) V# ?, B3 D- T
  1132. LDA #Mode_Clear
    8 S7 T( I; I2 r8 S
  1133. STA PPU_Addr,X" X$ d+ d# }& v) f
  1134. INX- M- o, W+ v8 o9 w3 m( ^6 b0 M# o

  1135. 6 p" e2 R6 k0 J! L
  1136. LDA Music_Last' ^/ o/ i1 f4 ~6 i; Q* m
  1137. JSR Show_Get_Track_Name_Center_Pos
    + l) K" W" \- T  d# _" W
  1138. Show_Track_Info_Write_Cur. N" W- i% q+ A9 Z
  1139. LDA #Mode_CntLine
    2 Q8 W+ G( y1 _
  1140. STA PPU_Addr,X
    ! C& `' j( I6 O8 w  p' u& p
  1141. INX
    ( H* t* O0 o4 Y+ O+ Z9 j) ~

  1142. 4 X* m" n; x5 @- B) M) ?0 X8 U
  1143. LDA Music_Cur
    * o8 l: x/ D+ E
  1144. JSR Show_Get_Track_Name_Center_Pos8 l, H, A$ e$ M% h2 P5 @. f: B

  1145. # o" r6 t) V7 q  Q
  1146. Show_Track_Info_Write_Cur_Data+ r4 v5 ~$ ]6 B$ W/ d5 E! n7 h$ L- o& s
  1147. INY) R" s% W3 k6 X: B! v
  1148. LDA [Data_L],Y
    6 E9 l% Q6 x0 C: A. h; B4 V$ N5 y. S
  1149. STA PPU_Addr,X
    ! b* x* k  m8 q# K$ i: N: `
  1150. INX) _4 z& U2 B6 |+ y; t
  1151. DEC Data_Cnt
    ( @* h* M* e4 Q. J9 V8 Z* e
  1152. BNE Show_Track_Info_Write_Cur_Data
    - @; z6 w5 P! G2 Y% T
  1153. Show_Track_Info_End8 i7 X) W% a# `% F+ p
  1154. STX PPU_Cur
    5 _& ?& g  i, L
  1155. RTS! {8 s3 E( [3 h  q+ M/ r" B

  1156. 3 B3 R& d, S, ?' H! e" T: I* B
  1157. ;==============================: K4 ?& P; K! u  t1 Z3 e! z9 G
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置1 ~$ y3 _2 I- M4 ]5 K+ H
  1159. ASL A& e3 Y5 Y5 f* s
  1160. TAY
    % G" ^; Y( R' t+ |2 U
  1161. LDA Track_Name_Addr,Y
    7 z3 T5 U  @* ?8 ^6 d0 E, B3 k4 u
  1162. STA Data_L; u6 y- v7 U$ O# f; W7 Y0 O
  1163. INY
    / P# E& O$ W2 X. N, d, ?9 l
  1164. LDA Track_Name_Addr,Y
    9 B( G# {# a, _: s7 }# X- ?
  1165. STA Data_H/ t0 m$ z! [6 }$ z8 {* M& v
  1166. LDY #$005 P" ]) J' H! A' c' L
  1167. LDA [Data_L],Y; o0 ^% T& n8 |' [
  1168. STA Data_Cnt
    - B  w; H2 _& r& j: H
  1169. LDA #$20
    % W* T5 F- @5 D0 o& W. T
  1170. SEC
    6 s0 D5 h) C# [% [& ?, ?0 I: v. G
  1171. SBC Data_Cnt3 J. S* z! E, K* O$ k: f4 B
  1172. LSR A
    : e. s2 s) `7 y) x3 D1 D, I/ t5 x
  1173. STA Data_Buf
    4 S' Y) ]( ~( i1 W
  1174. LDA #HIGH(Track_Name_Pos). M4 r' r& n7 H9 q  S
  1175. STA PPU_Addr,X; A# ^% v& J$ @' R) }
  1176. INX
    ' K3 }6 j) I" t# {1 _
  1177. LDA #LOW(Track_Name_Pos)
    ! H! s( d2 V" _$ O* Z  d
  1178. AND #$E0: i- `1 q% M3 B2 a# T0 n2 @( U, i
  1179. CLC) `( {0 B9 m3 p! w% x4 q
  1180. ADC Data_Buf
      D  L/ @+ ]7 M. v) f
  1181. STA PPU_Addr,X
    0 s0 l1 R& }$ n# B! z8 l5 ^
  1182. INX
    $ c  R8 z+ A9 F3 E* H
  1183. LDA Data_Cnt4 Z8 B. V$ [5 s* f  w! V" l
  1184. STA PPU_Addr,X0 F* C' c! I2 ?
  1185. INX
    ( r; F) H1 o% m) Z
  1186. Show_Get_Pos_Center_End
    , o& L9 e9 ^$ y4 V7 p
  1187. RTS
    $ U2 P4 ~! X7 e1 `: C$ |
  1188. .ENDIF, H8 Z, @4 K" s* V; K+ X
  1189. 9 R3 w% K7 L# f, S
  1190. ;------------------------------/ B/ g8 m6 F. u. G( F( d. A1 i
  1191. ;命名表数据
    ! y" o' g0 e0 L* R8 _& j
  1192. Palette_Attributes
    5 g8 C3 ]# j' \0 H  P5 r4 Q
  1193. .IF SOUND_BAR_SHOW_ENABLE
    $ A9 s# j( M2 ^! C6 ~$ F9 W/ o& v
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$007 ?7 E! D8 C. p7 {
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ; h5 s1 a- ^% s9 ?# t; b
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55! A. z9 ^$ X; x0 B
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$552 s0 L7 A) A( ~$ s( }
  1198. .ELSE/ `; G3 w4 m# d
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$005 o7 ^* j) `! a+ |5 C
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF) E( Q) b. W8 r
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55" P/ T" ]% U( {$ ^/ A
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    - D, E; \+ b, D1 s' d9 s' p
  1203. .ENDIF
    ! {, ~& Q( w# ]% ?' i1 ^, J: F
  1204. 3 m4 O6 t" ?' t% t0 a8 O. r' P2 U
  1205. ;------------------------------. ?/ S! _& n7 u- [6 J
  1206. ;调色板数据
    1 L. x! B( [: U0 E) y- m: _2 _  Z
  1207. Palette_Data
    / g8 e0 P( O( Z& ~) q* ?% U
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    # h  o1 ~$ C( c2 u& ^# N
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    : F3 z* {5 c" Z( z- c$ U. `
  1210. . l) O( q, Q# [1 }9 \) F2 }, {0 G
  1211. ;------------------------------7 v7 W: A/ L1 U1 L# A: ?1 K
  1212. Static_Text_Data
    * B' ]( L4 X% x1 m  v
  1213. .WORD Static_Text_Title_Data
    ' K  E# ~3 p- j  _, A# X  g
  1214. .WORD Static_Text_Author_Data0 K& {/ E5 M0 f
  1215. .WORD Static_Text_Date_Data2 I# W. d6 U& P
  1216. Static_Text_Data_End& Q9 q8 y- H& K+ S* x1 u3 a, c

  1217. 5 n' P+ S2 @: v5 o
  1218. ;------------------------------6 J( R; E% u" X, Y. l+ a# k* p% e9 Q
  1219. Static_Text_Pos  V' r1 `  U1 O3 ^6 L# I& Y( t% E
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)$ [4 V# p9 t+ u1 ^
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)( \3 k- ]- L0 j* {7 V% g
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    1 ^0 J/ l! K7 b1 Z7 \; L# \9 ^. e
  1223. Static_Text_Pos_End
    7 Q( |0 N, j& v% Z' \: V% V  y  \

  1224. 7 q* X  G8 u& A3 g
  1225. ;------------------------------
    4 {" Z9 ^: w9 r3 e- j
  1226. Music_State_Stop/ U. M3 @5 I# G$ E: r/ w4 y! V
  1227. .IF SOUND_BAR_SHOW_ENABLE, P8 h1 }) Z1 P! S* @" b  U# m
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$008 z& r# G- m; s( n
  1229. ELSE
    ; ~) E- L% {0 e# e2 `
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    8 ?1 g- ?( P: m! N6 B: [1 T! l- |
  1231. .ENDIF
    . y: {" C+ G" W# T5 e5 n) P, q
  1232. Music_State_Play
    . k  W2 B+ k7 G. M6 p; \9 Y& W
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$008 s5 Q# G, u5 I1 W# E" X% m+ [

  1234. % d; }8 _- B) O
  1235. ;------------------------------
    4 k5 k2 }# `# w. x
  1236. Sound_Bar_Text_Data;声音类型文本9 N- N) I0 p6 R" K/ l
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    . ?9 C$ K" E5 N$ p( P
  1238. .DB "SQ1-",$FF
    " V5 a- [3 Z9 G% {5 y) H
  1239. .DB $FE,"SQ2-",$FF& D' M# k' g/ C; W; N+ _( J/ E# c
  1240. .DB $FE,"TRI-",$FF
    8 A  h1 Q2 I3 N2 s+ B9 Z
  1241. .DB $FE,"NOI-",$FF
    " p; D3 _  e1 ^2 i9 \2 y
  1242. .DB $FE,"DMC-",$FF,$00
    9 o3 g' [' s. H6 U+ W; K5 M6 F1 s
  1243. & Y: A5 s, V( @$ \8 U! T
  1244. .IF Track_Name_Pos
    ) e0 U( l: ~8 N6 T' o
  1245. ;------------------------------
    + X/ n/ }: v. u
  1246. Track_Name_Addr;曲目名地址索引
    , H0 V& V6 W8 q5 ^6 J5 z1 B8 @
  1247. .WORD Trackr_01
    # [* W' w# [. a- P3 F* M
  1248. .WORD Trackr_02$ [, ]0 X1 g7 M( e4 c
  1249. .WORD Trackr_03
    + V6 b8 E& S5 R: d4 a  f
  1250. .WORD Trackr_04
    $ i3 L; x( t& Y! ~# }
  1251. .WORD Trackr_05* c" E! Z4 d" m  b
  1252. .WORD Trackr_06
    - V4 B+ U2 d7 j$ N$ b. R
  1253. .WORD Trackr_07! O+ }- F; q. |$ x
  1254. .WORD Trackr_08
    . S+ \* Z1 k0 [, p7 B+ K3 D1 A" X
  1255. .WORD Trackr_09
    $ S0 m, N- Q- L- h# g8 m
  1256. .WORD Trackr_10
    / x( J& |3 }, C, i- `
  1257. .WORD Trackr_11. k" q- P/ [, Y% d8 w% p
  1258. .WORD Trackr_12% @* m- S" |% `: t" ]4 h; v" v
  1259. .WORD Trackr_13, I, z% I  T( R; J) v" x# N
  1260. .WORD Trackr_14
    ' Y# N8 ~6 L0 C! t: F
  1261. .WORD Trackr_15
    ) M. L) F0 D' `+ ~7 w
  1262. .WORD Trackr_16* d4 Z9 s: ?) H6 D7 g8 i! n! O
  1263. .WORD Trackr_17
    2 m( m- S7 D9 Z9 s! ]6 _% ^1 d0 o: y
  1264. .WORD Trackr_18
    ! v; ~3 e  P' `$ {) k1 c( o1 y/ a
  1265. .WORD Trackr_19
    + [: X5 g# B& u7 Q) N3 a
  1266. .WORD Trackr_20
    % y$ c4 q) E5 {0 |+ z: K
  1267. .WORD Trackr_21% g# \6 O. Z7 {1 `$ ]' b
  1268. .WORD Trackr_227 A3 G( P$ L7 ]5 Q- ]- p
  1269. .WORD Trackr_23/ q  o, j& n0 V' y1 r
  1270. .WORD Trackr_24
    : h6 `8 V1 e; L3 K1 N+ f7 p5 ^
  1271. .WORD Trackr_255 v# F* N: H; J
  1272. .WORD Trackr_26# f7 T1 N7 _; V: |/ M+ B3 @9 p
  1273. .WORD Trackr_27( ]( N; c5 ~* w- M
  1274. .WORD Trackr_28
    " J+ q$ O5 l% m; h. [; E
  1275. .WORD Trackr_29
    ! \: b# |1 T. Q) {& J) N! N7 C
  1276. .WORD Trackr_30+ B" M: O2 E! [  l2 \% D
  1277. .WORD Trackr_31
    ! D8 m8 C+ J5 D% h$ }: o
  1278. .WORD Trackr_32* Z  b$ R$ U  y
  1279. .WORD Trackr_33
    8 v2 ~: c- C0 ]* W
  1280. .WORD Trackr_34# w% w" d, L" g9 s  p: h
  1281. .WORD Trackr_35" ~5 f# z  O, g$ f; C& A, w. S
  1282. .WORD Trackr_36# t7 L$ Z- p4 n9 F4 a1 A: @
  1283. .WORD Trackr_379 e. N& n, e7 Z- l
  1284. .WORD Trackr_38
    $ w. L5 G2 k8 [. e% o
  1285. .WORD Trackr_39) d4 `  n8 Z/ E. g9 z, Q: u3 u  r
  1286. 8 u; Z$ Y# g  T8 E
  1287. ;------------------------------1 X$ T  ~1 w7 E. a4 d
  1288. Trackr_Name_Data
    5 e' |& P) k+ [5 [6 s, @0 y
  1289. Trackr_01 .DB $05,"BGM 1"
    0 e: Y% v. o& _4 r
  1290. Trackr_02 .DB $05,"BGM 2"5 r8 E) N3 g+ F# A
  1291. Trackr_03 .DB $05,"BGM 3"
    3 `/ I3 g9 X! L
  1292. Trackr_04 .DB $05,"BGM 4"
    " T( s) m6 V6 r4 G
  1293. Trackr_05 .DB $05,"BGM 5"
    - }7 f* S5 o5 a; J0 o
  1294. Trackr_06 .DB $05,"BGM 6"
    " b; U: _: R9 V! A3 w2 {5 S
  1295. Trackr_07 .DB $05,"BGM 7"
    ' u8 V4 f% b+ m* p/ ?( j
  1296. Trackr_08 .DB $05,"GREAT"' C9 U! g+ e' R3 n5 B- {
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ! W- h) W. t3 ^8 M; h6 F& b
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    + [' ?# G1 \" W& G$ Y6 z6 p
  1299. Trackr_11 .DB $07,"P CLEAR"8 Z3 j6 e* |3 G/ C" ]
  1300. Trackr_12 .DB $07,"A CLEAR"
    ( k! D7 C; U- E9 i) h
  1301. Trackr_13 .DB $04,"OVER"4 ?/ V" Z. z6 t" m. `" K
  1302. Trackr_14 .DB $06,"ENDING"
    . Y+ o1 r) \  Z, F
  1303. Trackr_15 .DB $04,"SUTA"
    , W, T$ ]  [5 _. h1 `0 q+ |: c
  1304. Trackr_16 .DB $07,"THUNDER"1 D" T$ K9 d: s1 R- @" |
  1305. Trackr_17 .DB $04,"SHOT"! V. |( X  k6 t( g+ Q" T% [
  1306. Trackr_18 .DB $05,"LASER"( N+ z+ H/ K* E1 G0 K
  1307. Trackr_19 .DB $06,"SPREAD"
    0 I; c: z& v5 a) s
  1308. Trackr_20 .DB $04,"FIRE"
    6 N. ]- s5 c6 `# A
  1309. Trackr_21 .DB $06,"B SHOT"
    % e3 N, z: b2 C- o: r( P
  1310. Trackr_22 .DB $08,"T DAMEGE"
    $ I- l. D7 X. L7 g
  1311. Trackr_23 .DB $07,"HARETSU"
    % ^- l+ w4 \7 }, {) Q
  1312. Trackr_24 .DB $05,"T OUT"
    $ B# e  K; g7 S$ @% g
  1313. Trackr_25 .DB $05,"Z OUT"
    0 _& r+ _5 o* S# W( ^
  1314. Trackr_26 .DB $05,"A OUT"
    6 Y* F: D, s7 R# Q) ^7 E+ R+ P8 i
  1315. Trackr_27 .DB $04,"ROLL"$ R4 R0 y6 \4 q6 o( q
  1316. Trackr_28 .DB $06,"APPEAR"
    ) H5 Y! w* Q% U) t
  1317. Trackr_29 .DB $05,"POWER"
    ' g7 z: A: g: N7 q4 S  j4 \8 g  E
  1318. Trackr_30 .DB $07,"BOKK BK"
    # ]7 u& @% D7 ^1 G- j9 x
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    : K0 _' h) k7 Z) L  a
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    $ o+ T: r# h* D/ b
  1321. Trackr_33 .DB $05,"ARUKU"5 U3 A1 h! u1 D5 z+ H, ]
  1322. Trackr_34 .DB $06,"JIWARE"
    . w2 k( _5 ]% H$ m6 |2 V# C
  1323. Trackr_35 .DB $05,"SILEN"
    : \1 q6 I2 V8 I: i& n! u7 q
  1324. Trackr_36 .DB $05,"P 1UP"
    9 j5 k2 x2 y7 I
  1325. Trackr_37 .DB $05,"P OUT"8 v- Z$ {! F. P+ Z+ ]% y8 g) ~" y
  1326. Trackr_38 .DB $05,"B OUT"
    + @0 a; T9 v* N3 J0 G: b$ Y
  1327. Trackr_39 .DB $05,"PAUSE"5 X! Y- U. n( E6 J% e

  1328. * b9 `, r! {" p* u- ~( t, C
  1329. .ENDIF0 O# ~: i( H6 P" q% r5 E

  1330. 8 U0 Z& b" ?% ?- E% f
  1331. ;------------------------------; N# K2 u6 ^2 g
  1332. Static_Text_Title_Data;静态文本数据/ P6 k. H- S* u) d  @( @8 t) s; l
  1333. .DB 12! f2 B# h- ?- y
  1334. .DB "SUPER CONTRA"
    , M- v0 y" ?$ m- Z7 k1 w
  1335. Static_Text_Author_Data8 v, `( i3 v% i5 J! L
  1336. .DB 23$ [9 T* {" s" g6 J. I
  1337. .DB "EXTRACT BY FLAMECYCLONE"; h3 |3 y9 o8 |) i5 _4 \3 A
  1338. Static_Text_Date_Data" G0 S. v. N0 M) ^, o
  1339. .DB 10
    * W% p( K6 `* _" c9 e2 D
  1340. .DB "2023.07.11"
    6 @6 m7 X) X: J$ M  K3 w9 }8 n& ]$ [

  1341. " W" g% v( q1 l" |( e! w
  1342. .BANK RESET_BANK & BANK_DATA_MASK, ]. t: X) M3 D3 w- z3 z+ s4 Y0 w
  1343. .ORG RESET_ADDR
    # N4 d7 N' N4 j9 b, O; d& @$ N

  1344. * q9 h% ~. c; x

  1345. 6 G7 ?) E$ w/ o! P2 s& H
  1346. ;==================================================  u4 F7 Q+ A4 g, E" O2 M
  1347. ;切到主程序bank
    1 C8 c; x! m: X6 z
  1348. SwitchMainBank
    ( l9 n* {1 r& l
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    - W& L  m) i0 S- {
  1350. JSR SwitchBank8000  E- A( k" f* L4 ]" K% t1 [& [
  1351. RTS
    $ j5 ], X* B' ?+ [; X( f' Z

  1352. * p9 C& c# f5 {- T' K. h
  1353. ;==================================================
    8 k, R0 g* f/ k7 M- w% H9 @
  1354. SwitchBank8000;切换bank到8000-9FFF5 J! S3 T2 S- G  `& q+ O
  1355. PHA
    4 s/ Z: O6 k3 w; U
  1356. LDA #$06" P! |3 e6 l# n' |( H
  1357. STA MMC3_BANK_CTRL
    ; z) t  T( b9 v7 Y, {( n# g
  1358. PLA$ v# J% |7 v5 E# {
  1359. STA MMC3_BANK_DATA6 N* E1 i3 H9 E6 l" O$ Z" j6 K3 ~
  1360. RTS
    # p+ C% H5 g# m; K7 ~
  1361. 9 M; {2 F4 z( `; T8 W! J
  1362. ;==================================================* |( U0 x- s( J) e0 _7 ^& N6 J  _, x
  1363. SwitchBankA000;切换bank到A000-BFFF- [3 M6 R, l/ ?8 N
  1364. PHA! f& B9 A2 O6 n: I
  1365. LDA #$07
    8 ~4 Q* W& p% a$ Z
  1366. STA MMC3_BANK_CTRL
    # L) y2 E* ^+ H1 L7 x& X( s
  1367. PLA
    4 V4 O" Q( B/ O( s2 V
  1368. STA MMC3_BANK_DATA9 {  m: b! ]! c/ e
  1369. RTS3 L, _2 e  l" {& a/ w

  1370. # S$ J( \2 T9 g/ C5 A  |9 F
  1371. ;==================================================
    : N4 b8 y& n( t0 f; X" {( L
  1372. Sund_Bank_Init;音乐bamk初始化
    ! \8 A( V8 u; Z( v- \: K
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ! i# u  w3 [+ n4 ~$ r7 g
  1374. STA Music_Bank_8000: C2 i* t' t& ~. L
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK  q* n! k0 u( D( ^8 ^" B; J
  1376. STA Music_Bank_A000$ O; p9 h+ y& B+ i9 G9 z* J% n
  1377. RTS" Q# L2 h" [, c0 \
  1378. , T1 B: d$ W0 ?  U+ C! p, o
  1379. ;==================================================
    9 C0 X# t) J' t2 _! b
  1380. Sund_Bank_Set;切换音乐bank4 p4 l/ [# c* K" u
  1381. LDA Music_Bank_8000
    8 G& H1 z& X+ F4 k2 E% Z" e
  1382. JSR SwitchBank8000
    / X. d7 l' F5 Y6 N+ h3 F5 w
  1383. LDA Music_Bank_A000/ b" ?3 D$ l2 O6 _. U, ^
  1384. JSR SwitchBankA000
    , w, C4 H, h- ?% T+ J: O, `7 v
  1385. RTS* M4 N! I  \0 \( s7 @+ s- A& p* E$ P/ s

  1386.   v, Q" B0 U. Y+ H7 ^6 k) k  p0 i
  1387. ;==================================================6 Z. W9 X% \" }# j% Z: D" E5 y- r
  1388. Sound_Init;音乐初始化
    % V- N; n7 M) B; R# B1 C9 u2 {3 G
  1389. PHA
    ! h0 C- F7 a6 A4 w6 y
  1390. JSR Sund_Bank_Set3 a, @; `! e& v. [' Q! T
  1391. PLA9 n1 y6 d( J# \5 u8 R) r2 Y" {
  1392. JSR Music_Init_Addr
    / B8 X( p" i/ i, y
  1393. JSR SwitchMainBank5 \  C  l, a& v3 {
  1394. & w3 r. c/ y, _: ^
  1395. JSR Music_Bar_ReSet+ l2 k" u7 B! ^' Y: P0 B: O8 |4 T8 x
  1396. JSR Time_ReSet+ B+ ?. V8 p7 ^  X5 v2 U
  1397. LDA #$00
    4 N. T; V4 _) t$ b" ^" p9 e
  1398. STA Music_State7 ?5 w# F8 x% K- f) x
  1399. JSR Music_Stata_Show
    ! s/ [1 g  y. c" F
  1400. .IF Track_Name_Pos4 v. u# m8 T7 T) z2 N" `
  1401. JSR Show_Track_Info
    # \; T$ M# j6 f
  1402. .ENDIF' k0 ^5 j! S9 d9 `

  1403. ; i) n, M8 `! A; f' n
  1404. RTS
    & U7 q7 _8 K( y# T. R# e

  1405. / s, \1 @" ~! q4 w+ A1 ~: C5 t3 `
  1406. ;==================================================
    7 n. H# F& G+ V; y" y$ x5 G
  1407. Sound_Play;音乐播放
    # ?/ A2 w3 C" U) }" F% G# x- ]
  1408. PHA! O4 q9 j6 X9 M) P, r0 K* C4 K
  1409. JSR Sund_Bank_Set
    5 ?( `4 r; `8 \1 N  I
  1410. PLA
    : j) B# \7 q: }! S- x0 ]6 B
  1411. LDA Music_State
    7 y6 U! F2 d- Y/ m( F, g
  1412. BNE Sound_Play_End
    6 }/ o9 U) M, B: Y( i8 `9 s
  1413. JSR Music_Play_Addr2 [: m( Q3 B  K/ h$ d5 V9 M1 ]
  1414. Sound_Play_End; w! ?! {! o+ c+ g. P
  1415. JSR SwitchMainBank
    ; V2 S1 v  {7 f: L
  1416. RTS# x; f5 Q/ }0 o
  1417. 4 e9 V# Q# m; m8 I; J, \
  1418. ;==================================================. @; p8 k7 a: T
  1419. .IF Music_Reset_Addr
    3 F( `. Y( X, r/ D8 k4 T- x
  1420. Sound_Reset;音乐重设(如果有的话)
      J; r5 ^" I0 {2 N" n
  1421. JSR Sund_Bank_Set
    4 _6 A- ~, u3 o" B% k
  1422. JSR Music_Reset_Addr
    $ R# G# [* M! c, A' F1 E$ X
  1423. JSR SwitchMainBank' o+ ?  j* b+ U& J
  1424. RTS
    ; k1 Y" ~' Y4 j
  1425. .ENDIF
    / `8 M9 i+ c3 s5 }' J
  1426. % n: h2 b% N7 n5 Y4 ^+ |6 e
  1427. ;==================================================" |3 b6 p. U8 [2 K, K! K% n
  1428. MainLoop;死循环7 H& C8 h: ~$ q' r$ c1 W6 n
  1429. JMP MainLoop
    3 C' A# K0 N$ ?
  1430. ) L1 Y! b! c' v" ~8 p
  1431. ;==================================================9 s- D  q  c" @# r0 B. @
  1432. NmiProgram;Nmi中断处理. A1 o3 u! y4 F' E; n) ~
  1433. PHA8 O: X) s, X* d7 ?3 m  \
  1434. TXA5 C: o/ b# k2 `
  1435. PHA  Y! T9 i3 j$ K9 k9 `
  1436. TYA
    3 ^" K: m$ l, m$ r. ?% j3 w
  1437. PHA6 N( Y9 \$ `$ [: r" f  {
  1438. 7 n' @8 Y4 p; O+ p6 X3 y8 i
  1439. LDA PPU_STATUS) h2 Y/ m9 U) `
  1440. LDA #$00
      B  ~# T/ _% ?
  1441. STA PPU_CTRL
      H! i, w( N; O9 [! }' V
  1442. # u8 ~$ w) J' ~7 V: v0 u
  1443. ;切换主程序bank2 H6 l: `5 p4 e. G2 ^3 w9 R4 [
  1444. JSR SwitchMainBank
    8 \8 H( Y7 [. t

  1445. 6 l: s4 R$ P9 {) H5 i9 V
  1446. ;NMI处理
    " E9 ~3 A. @2 I  k- C* i, V$ j% P
  1447. JSR NmiProgramProcess  E. g$ s, `: ?

  1448. 9 Z- a1 h' P7 {- j% t9 r% B& c
  1449. Nmi_Proc_End
    & \: i2 X9 E1 U9 [" Z
  1450. PLA
    / b* i3 j% o* W% v# m, \& T6 Z: w& q
  1451. TAY3 S9 A; k( b, a+ `- K, d) P0 l
  1452. PLA
    4 ~- ?7 {  O2 h1 N6 O$ w: [
  1453. TAX! J6 U( ^: |9 T4 u+ a* D
  1454. PLA
      Y8 d% u: n0 F$ e/ V4 C' U! _8 Y+ D/ @
  1455.   u8 H  u/ g$ I" [1 P1 `/ \
  1456. RTI5 g9 Z- n- f' {- S0 n

  1457. 8 F& g) t& l- p& M
  1458. ;==================================================2 m4 U! q; H! m0 K& `) R6 ~
  1459. ResetProgram;重置中断处理
    ! Z+ \% H, f( o
  1460. SEI9 \: Z7 t& H. T6 t4 {! \
  1461. CLD
    . h2 v) X7 k6 u8 j, X. }2 H: M- V, v
  1462. LDA #$00% y9 O- G2 m4 v" x7 W+ J! Z' \% [# C
  1463. STA PPU_CTRL
    3 H: G1 I4 C0 \% A9 y
  1464. STA PPU_MASK
    , X) ]$ ]0 P" e; T9 `8 E

  1465. + b/ K9 F; }  ?. E' j
  1466. JSR SwitchMainBank9 y6 }5 [+ W( L0 M/ \. y
  1467. JMP ProgramBegin
    6 N& f" f$ |4 k( [8 c
  1468. + S0 L: F1 V: Y8 n) z' Y4 l* B
  1469. ;==================================================' I- ?! J% _$ z' d0 P
  1470. IrqProgram;Irq中断处理! ]+ r/ N4 q) n) H3 C
  1471. RTI
      ^% z7 L* k2 H  `# i; `  k! o6 O) z

  1472. 7 f6 `! L: k9 X* o- s
  1473. .IF SOUND_BAR_SHOW_ENABLE
    4 y/ H  `7 m2 P7 r3 h2 w- W% z
  1474. .ORG $FF803 U. _9 D2 N* U3 i- z; m
  1475. STA $4000,X
    ( U  N/ p/ Q+ h4 Z
  1476. STA Sound_Bar + $00,X6 f' N5 l; Y! s, c
  1477. RTS
    9 J) c( d8 P" K
  1478. & z: C" N4 I2 @
  1479. .ORG $FF88
    / F+ u. ]$ K- r  T7 b7 `
  1480. STA $4000,Y' k: z$ u4 l; ^( h
  1481. STA Sound_Bar + $00,Y
    , I7 \" A! t' z3 _
  1482. RTS; {$ n: b* k: L* i/ c' c

  1483. - u& D* d: h) s. N* `
  1484. .ORG $FF90
    6 x7 s: s) Z5 h9 u3 v
  1485. STA $4004,X
    ! d) r* r. x8 T8 ~
  1486. STA Sound_Bar + $04,X
    + T" m. \+ z3 z, {+ _6 J
  1487. RTS
    - t" s; |9 {% P: X. _& g

  1488. $ n! G" T# E; y' h0 Z! p4 t/ E( S
  1489. .ORG $FF98/ D3 G7 _1 I5 o3 S/ i2 w. d
  1490. STA $4004,Y
    / @! L9 c$ e& Z& @
  1491. STA Sound_Bar + $04,Y
    ( X" {) Q2 M7 `
  1492. RTS
    , Q* F& f7 U1 |( ~7 j

  1493. . z1 H- L' K0 ~: c  S4 c! ?( Z, E
  1494. .ORG $FFA0
    $ C" I/ ?5 G! e! ~* F' z9 k
  1495. STA $4008,X5 H  F; e6 Y8 }& J: l
  1496. STA Sound_Bar + $08,X9 C2 y, E9 A3 K& a4 ?7 `; }
  1497. RTS
    2 R8 U# f6 e4 W2 H( C6 r' w. D
  1498. / l& h/ T  a5 M( L7 W& `2 h$ b
  1499. .ORG $FFA8
    3 _# u( a+ u- d* ^
  1500. STA $4008,Y0 s  s+ ^9 V* y" K. g0 U/ [
  1501. STA Sound_Bar + $08,Y! s# m4 o' \# ^; g% d
  1502. RTS: `0 T! K9 T9 S1 H4 W4 x5 t

  1503. 7 x! W* n' r& e3 s$ K
  1504. .ORG $FFB0
    , a5 ?' G1 j6 B: w
  1505. STA $400C,X" h' h& o0 ?7 r( S: `
  1506. STA Sound_Bar + $0C,X3 s/ d% i0 H, i1 p1 h+ ~
  1507. RTS
    7 [4 ?4 j1 L. z0 O+ N4 y3 B

  1508. & Y% t4 p( }' |% N1 ^
  1509. .ORG $FFB8/ @* X* _. ~: c4 f1 M4 d7 x$ v' @
  1510. STA $400C,Y
      p8 C' T) W: S: g2 Z7 _" ~
  1511. STA Sound_Bar + $0C,Y' a/ K/ _- x1 R
  1512. RTS5 Z$ `2 V2 W  l- S3 G# ]( h9 E3 `

  1513. $ L3 e) K7 i5 B3 l1 V
  1514. .ORG $FFC0/ a  T% V. X2 b6 }, t
  1515. STA $4000
    3 P" B1 c* {4 J1 a# g6 Z- r
  1516. STA Sound_Bar + $00
    1 e. m& I8 O8 W6 H# k2 o
  1517. RTS- \' B( d  W4 o2 q. K' t# R

  1518. 4 I- {7 n4 P0 X/ {2 h4 o0 n' E
  1519. .ORG $FFC8  w6 Q$ {4 B$ v0 i# X3 Q
  1520. STA $4004, V) M) y" p2 u
  1521. STA Sound_Bar + $04. ^2 n# M9 P" s* ?" o" @
  1522. RTS
    . d# j* q3 [* ^6 U

  1523.   V) J7 ?2 z7 q. z0 m! T
  1524. .ORG $FFD0  m1 h! f% z: T8 U( F
  1525. STA $40088 L9 e5 F/ B& Q
  1526. STA Sound_Bar + $08& {2 h1 v6 ]2 _8 D' |5 r
  1527. RTS4 Y* P( T) v& z6 h5 W

  1528. 8 R4 v! F/ P8 P' K8 u0 s/ q2 Y
  1529. .ORG $FFD8
    2 Z% v) B- @7 Z) r
  1530. STA $400C! w$ k% [8 x- {! S0 c( S9 F" ]( \
  1531. STA Sound_Bar + $0C
    & Y' x4 l7 ^; A0 f
  1532. RTS+ W& o: F) ?. A) e8 l9 @
  1533. - D, Z3 m8 G, z$ k3 Z" s4 L
  1534. .ENDIF
    : _9 J* O3 H; c5 p4 o

  1535. 1 i1 w7 U, o4 J6 M: V
  1536. .ORG $FFFA- p  |: h  m4 ~; ~# z
  1537. .WORD NmiProgram+ T' d% a( {+ G" R
  1538. .WORD ResetProgram& W) X+ j$ o# U0 V' G
  1539. .WORD IrqProgram
复制代码

! I) ~! d2 n1 g: M
3 o$ d* ~6 p1 q
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1417 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3420 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-11 22:28 , Processed in 1.108398 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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