EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
9 o0 X6 [2 H2 o9 }' s
5 w  V7 J# [: ~( h* y8 K3 t1.魂斗罗& h1 p* d& @% [+ t! o6 k! Q7 c/ k
2.超级魂斗罗
7 B3 P/ e( O) i2 \) @3.赤影战士2 }9 v& R! ^% ^! @
4.忍者龙剑传2! y, s8 u2 ?% t3 e( V
% H1 T' d, N% Y9 M

' o+ U( J' N" o/ R0 t* H8 Y- M, X4 ~9 h. f' D2 S; o! W2 p: {& U5 U, s

4 a0 u, u- ^& |' v$ [2 L源码:! h. z: D0 L" o
  1. ;[FC音乐][播放器模板]
    . A! S! c! [9 t* t5 \' z  L+ |& B
  2. ;FlameCyclone 202307104 R, J8 R! ?; F
  3. . z- d# v" h1 B. H
  4. ;文件头/ i$ Q+ c4 X8 n. D  N
  5. ;======================================================================
    / X% o9 x% T6 B$ n) P4 U/ [
  6. .INESPRG 4                                              ;16KB PRG 数量
    ( z( T8 x$ F$ N1 \  l- X! ?7 J. N1 i
  7. .INESCHR 0                                               ;8KB CHR 数量
    1 V1 _  m! _3 q# j7 n5 o( s
  8. .INESMAP 4                                                   ;mapper 42 [/ S# C" Z  {: m
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直6 L" L/ c9 K+ N9 Z! O/ \
  10. 0 T- ~: q+ r7 ?6 J
  11. ;==================================================+ R/ z0 T, u) v, m* N
  12. SOUND_BAR_SHOW_ENABLE       = 1' q5 u  I+ {- J- T, S6 t9 `7 D: v
  13. ;==================================================
    5 ^' R% h* @# [/ {9 R7 [
  14. BANK_DATA_MASK              = $07- ^4 }6 F! o5 N3 o6 `" b- `
  15. ;==================================================
    7 e$ f7 G5 @' |2 P. q- _" J  i
  16. SOUND_DATA_BANK_0           = $00. i: q. N" V( z, F: l/ q
  17. SOUND_DATA_BANK_1           = $01
    ! \; B. x& G: Z# f6 ~: i4 }
  18. SOUND_DATA_BANK_2           = $02& D  F( Z2 e: t% f
  19. SOUND_DATA_BANK_C000        = $06# ]; |2 _5 u( t1 Y

  20. & }9 f* F7 u/ X6 r
  21. ;-------------------------------------------------; ?4 A: J! m$ U
  22. CHR_DATA_BANK               = $04$ N1 ?- u% Y$ w: {. ]- D4 _9 X
  23. CHR_DATA_ADDR               = $A000( V; C0 _( o2 }3 G( c
  24. ;-------------------------------------------------& C: |1 d8 W7 O' p  B; J3 Y, w
  25. PROGRAM_BANK                = $05
    / o, R! ]& _! |0 h6 M! d; o8 U
  26. PROGRAM_ADDR                = $80003 q; y' x: H1 f9 f: @
  27. ;-------------------------------------------------
    * l) h) }5 C# i5 K2 @
  28. RESET_BANK                  = $076 ~& L9 z" z7 W! Y( o4 R
  29. RESET_ADDR                  = $FE00
    , |' ]  `! {4 a# o; l' |4 R6 r! F
  30. ;==================================================1 W8 t3 x3 u9 r% b, z
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    - A0 C& O: ~* l5 G1 w/ ~: F+ }
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ' ^" O6 X. P; }5 y2 {
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    ) ]' U: k" A$ Q' d/ d. i6 g& b
  34. ;==================================================
    $ t& `7 z. C8 b! C9 E
  35. Music_Song_Total            = 039  ;全部曲目总数
    ) X. S6 _. o" k( J* [
  36. Music_Start_Song            = 007  ;初始播放曲目0 Y7 H- E3 p" S: Z; r5 a
  37. ;==================================================7 }" y0 U+ J/ {3 _; T
  38. 2 [1 H4 p) c1 w# W1 C3 z
  39. ;==================================================" ?( q1 g, X# C' B' V9 }2 z
  40. Title_Text_Pos      = $210D ;标题文本位置4 M5 o# l* a( h
  41. Author_Info_Pos     = $2284 ;作者文本位置
    5 V2 y$ ]* O) M& u" L9 I
  42. Date_Info_Pos       = $22CB ;日期文本位置
    ! v: h" T" @* o: M
  43. ;------------------------------
    ' Z$ {% a0 S. n, m
  44. ;------------------------------7 x0 D3 }- p7 Y+ j* q$ q# ]
  45. .IF SOUND_BAR_SHOW_ENABLE7 R1 H9 y* M# S
  46. Play_Index_Pos      = $21B3 ;当前曲目位置' i2 @1 _$ }2 h) V: p
  47. Play_Time_Pos       = $21F3 ;播放时间位置/ r9 u  G- Q) }7 v- i
  48. Play_State_Pos      = $2233 ;播放状态位置
    8 P3 }1 Q7 U  o& a( O! c% ]) K
  49. .ELSE$ v5 E- b, ^# u
  50. 4 M, P* R5 v/ e- t; {
  51. .IF Music_Song_Total > 996 C; a/ t& X3 }
  52. Play_Index_Pos      = $21AC ;当前曲目位置& e; {7 `3 I0 b6 G+ K! M9 C; a
  53. .ELSE
    9 k9 s$ d6 f( E3 p4 Y# I& E: z6 u

  54. $ p% D# O* e2 N" `# @8 w5 i" W
  55. .IF Music_Song_Total > 9  ?2 b4 C& ~2 Y! o( A8 U" g% r0 ?7 D
  56. Play_Index_Pos      = $21AD ;当前曲目位置/ a# b) B$ T  A1 }' C6 @7 L" p
  57. .ELSE
    ' U# O( q# D2 n4 g3 `! d1 H
  58. Play_Index_Pos      = $21AE ;当前曲目位置: Q) T# a1 A# z8 X. P7 u% C
  59. .ENDIF" w8 u6 T2 i, X+ z. {, r  u8 p

  60. + c: o6 q& Q$ d0 @8 a7 Y
  61. .ENDIF
    ; ?' |0 e" ?, J! E2 d- h
  62. & q2 o  |, c" f' Z6 Z$ ?

  63. 0 z: P: Z( U& x' c
  64. Play_Time_Pos       = $21EC ;播放时间位置
    5 |3 D1 e- p: K8 W; g
  65. Play_State_Pos      = $222C ;播放状态位置( R3 J/ H. ]; ]7 X
  66. .ENDIF
    . P" z9 g) Z6 s+ S' D
  67. ;------------------------------
    ; i! v$ x# T- u. p; L2 V, G' K
  68. Track_Name_Pos      = $216B ;曲目文本位置) r9 ^* J1 C0 |8 F$ `
  69. Sound_Track_Pos     = $21A5 ;声道文本位置% U. ?! r4 K2 j* f9 E& ~
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置+ b! W( J# ?8 j- q( w- b& z
  71. ;==================================================
    - V: ~' M, h+ Y; l, P& {
  72. Scroll_X = $00: ^% e* Q$ V+ {0 a
  73. Scroll_Y = $06
    $ H+ x" M" `* I1 I3 ?4 T# O
  74. ;==================================================
    * k6 {* A( E* p* p1 U- g
  75. RAM_Cln_1       = $0100
    $ J2 F) ~7 q6 _0 ^3 k4 B; a
  76. RAM_Cln_1_Size  = $80; x/ X: R- n5 i' v. w9 Z
  77. RAM_Cln_2       = $00E0  G- X  p% |, _$ }, P
  78. RAM_Cln_2_Size  = $20
    / Q- D1 z3 r' q8 Z6 I3 `
  79. RAM_Cln_3       = $00E0
    0 x& v  j' e8 K4 o$ N9 c3 f
  80. RAM_Cln_3_Size  = $20) n; e- q2 K0 b; J+ J) u

  81. ' Y, O3 \1 V5 P6 d2 I. n4 e8 f
  82. ;==================================================  \: [8 b6 h# T6 g& U; r+ i2 R6 _
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    " I9 {  n$ t7 @! h$ B8 [( D) g9 A7 Y
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    0 ^6 ^' Y  T& c+ V7 u1 a% c' v
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    / s/ u# \' w4 f3 }2 W$ v
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加15 c2 |+ \7 U% w7 C2 H
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加12 M4 a; x6 f  m9 R& f+ j! |6 V
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    2 X1 B0 y) W' y( h5 u+ w1 U
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    8 z7 L7 {# V' p( N
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 9 u: ?# c; m0 C6 j
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存3 `+ P1 C2 o  g3 p+ v" `2 ^
  92. APU_STATUS              =   $4015   ;声音通道切换+ n: V! u" I: ?7 h
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    3 }/ y* ?) o6 N: D
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通0 `2 M6 _) m! M: _$ v3 O( [
  95. ;==================================================& d- Z, Z# k. z9 j9 l; r
  96. MMC3_BANK_CTRL          =   $8000( q" |  q3 x$ r/ A
  97. MMC3_BANK_DATA          =   $8001
    0 ]0 r' _# N* L
  98. MMC3_MIRRORING          =   $A000+ q. W6 j9 |  d0 }9 d( [
  99. MMC3_PRG_RAM_PROTECT    =   $A001+ i$ f4 i& j; ^7 r, H
  100. MMC3_IRQ_LATCH          =   $C0008 O3 a5 G: V' V5 W
  101. MMC3_IRQ_RELOAD         =   $C001
    - x' Z2 I/ r& {* G
  102. MMC3_IRQ_DISABLE        =   $E000
    ) }9 B% W( u7 ?
  103. MMC3_IRQ_ENABLE         =   $E001$ x3 F' }4 a# U5 h2 M" O* B6 T

  104. + V& X8 q- G: n  `  n, U
  105. ;音乐数据块
    ) X; S, _$ x+ L4 ^' X
  106. $ h8 e/ k  X" O; S: N7 h! Y
  107. ;======================================================================
    - i% {# x! f- E. s. [0 L( `
  108. .IF SOUND_BAR_SHOW_ENABLE/ G: K9 o- ]  _/ t! g+ `+ T4 C3 M
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK3 E% j. V& }% w( m# a: w
  110. .INCBIN "sound_bank_bar/music_data_0.bank"! N  k) e! y) }  S
  111. ; u* `0 n6 s, Z4 u) C$ J$ b
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK! ~" m) Y4 X) d( c
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    0 ?7 ^; ^0 B/ K3 _& k( `3 ?

  114. 1 C7 c& y2 b6 P2 G: R
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ; t1 o* E  D& s; i
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    5 U. }" w% |2 B0 H

  117. + ]) t  w/ n" ?# N" g6 q, M
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    + B. V; t, g5 b7 O
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    7 {/ g' e7 N% I

  120. : k! F5 M; z9 ^' |/ Q! }0 U$ C( \
  121. .ELSE
    3 h8 b- r; l% ^2 J: ?  `* c6 w
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
      ?: p% ]7 ?3 _3 h' |4 ?+ N
  123. .INCBIN "sound_bank/music_data_0.bank"4 M, K$ ^- h8 N! v7 b

  124. - ~4 q" Q5 z# s8 A  v8 d
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    9 F# V, p7 Z+ n! f3 _* q3 i
  126. .INCBIN "sound_bank/music_data_1.bank"
    ! B* S* J3 U% C' c. d
  127. - G- C9 O0 e$ [( e
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK# s! \' U; m. M1 j7 s- s' I
  129. .INCBIN "sound_bank/music_data_2.bank". _2 f: Q) S7 ~
  130. ( W) @3 d; A$ o& u
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    0 j' A# e$ Q4 K" Q2 t
  132. .INCBIN "sound_bank/music_data_3.bank"
    , j- x) w* g) x& v! T
  133. .ENDIF  c- d/ v7 c) ?  w

  134. & ?& o3 U/ U  {
  135. ;CHR图形数据. a$ Q2 F3 d  P1 J! Z
  136. ;======================================================================2 ~9 }' }  U  G: L
  137. .BANK CHR_DATA_BANK! Z$ T/ g& `+ `
  138. .INCBIN "chr_bank/chr_data.chr"
    & ~) A( g. V4 C9 A4 K. V3 b
  139. ) R" x1 d( f9 d( J3 ^1 A3 ]! Y# l
  140. ;==================================================
    - K/ s" P1 k$ F. [: [: X
  141. PPU_Addr        = $0300
    / N6 x1 s- G5 e& H
  142. Palette_Addr    = $03C0
    . R! i  R3 t5 V0 k9 r
  143. Sound_Bar       = PPU_Addr+$E0( {! z3 r) o9 G( y
  144. ;==================================================
    * k2 u0 @1 o! P, m
  145. Palette_Update_Addr     = Palette_Addr+$0D' p) w) I: d9 E0 c
  146. Palette_Update_Max      = $2C' u' F7 b" H3 B1 f1 n/ `" W
  147. Palette_Update_Min      = $21
    2 D& h  a. m' O
  148. Palette_Update_Interval = 60
    / P+ S0 [. w/ j8 @; n& Z& C
  149. ;==================================================
    ) T7 G2 h" a' A. `
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
      P4 U4 N$ x, D! p
  151. Screen_State        = Sound_Bar_Cnt+$01
    * J- G& a/ t( y7 T  V1 @
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    5 R) U6 p. M# g- g% {- C4 u
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03( _5 u% s5 u+ t2 ~# E; {4 G! i7 @
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
      H- J/ l0 P3 `5 W. h4 K6 }
  155. ;==================================================
    . I3 Y  S0 C7 u8 P
  156. Data_L              = $70
    ; X2 E/ _' U+ m% Z) ?7 W
  157. Data_H              = Data_L + $01
    / n* f7 ?" S$ y9 a
  158. Data_Cnt            = Data_L + $02$ `6 R! e. w' C. Q9 p
  159. Data_Buf            = Data_L + $03  J6 a7 e5 S, d- S4 y! }+ B
  160. Time_Wait_Cnt       = Data_L + $04
    / ^6 d9 R3 z) v8 f) [
  161. Palette_Wait_Cnt    = Data_L + $05( f% o9 T) f5 U+ z. Y
  162. Palette_Update_Flag = Data_L + $064 O( o7 m. X- T6 k, O
  163. Show_Track_Name     = Data_L + $07
    & W# m" v! \: ~' O7 p$ |) ^
  164. ;==================================================
    2 @% r: ~; ^$ d7 A  ]
  165. Key_Keep            = Show_Track_Name + 1
    * V- W6 f; H0 S' G/ ^
  166. Key_Once            = Key_Keep+$01: a  }2 h+ b, I; k
  167. Key_Kemp            = Key_Keep+$02
    ) i0 K) A6 U$ i. s7 X3 _$ `
  168. Key_Temp            = Key_Keep+$03. v; `6 A6 R1 J8 I5 S( Z
  169. Key_Getv            = Key_Keep+$040 F% p) ^. ]7 D8 s
  170. ;==================================================' E) Y& ?- H0 @7 _0 t1 b7 ~
  171. Music_Cur           = Key_Getv+$01& [: R8 r1 C- n0 D* u, l4 e
  172. Music_Last          = Music_Cur+$01; q) C1 w' B% z$ v# B) |
  173. Music_State         = Music_Cur+$02
    8 o/ P3 _, F! Q* A$ L* {1 ^/ h: w
  174. ;==================================================
    + U1 p+ r% c& R- f, {6 ~9 `5 W
  175. HEX_Data            = Music_State+$012 U. P% U( F% G, h
  176. DEC_H               = HEX_Data+$01
    + g: K2 R. }2 ?3 \4 F" T$ V. }6 }
  177. DEC_T               = HEX_Data+$02
    & u! P4 {4 m* m$ t
  178. DEC_L               = HEX_Data+$03) I2 Y# x/ e" ~% H  o
  179. ;==================================================
    2 j6 W& R7 |* G; Z( a; q
  180. Time_S              = DEC_L+$01" t. m2 U, V/ S
  181. Time_M              = Time_S+$011 H$ c; j4 p0 M& r
  182. Time_H              = Time_S+$026 u; @' |! w% k1 D
  183. Time_Cnt            = Time_S+$03
    ; J( n+ q: u1 l& @8 b7 t

  184. $ X" d! f+ Q; S: Q6 S( Q
  185. ;==================================================
    * y. a, }/ Z. L: g4 k
  186. Music_Bank_8000 = Time_Cnt + 1+ j9 T, p1 `2 ]& V% y+ a
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    / F9 k% n$ k" R3 L. x+ e' r
  188. ;==================================================
    ) l/ u6 }, {( X5 L) V

  189. " m9 h" a5 ?" |2 h/ _
  190. ;======================================================================% k) t7 C. |7 ~5 w7 k! V7 ~
  191. .BANK PROGRAM_BANK
    / U; _/ T2 h0 q" s
  192. .ORG PROGRAM_ADDR8 G# v& m7 @+ Z5 L3 F
  193. 3 a, ^! L& J) C3 j: ^. J
  194. ;==================================================
    # r: p% U& ~# Q7 h3 r
  195. NmiProgramProcess;NMI中断程序处理
    % D( Y" N2 |# W9 k( O( Q+ F
  196. ;处理PPU图像
    ! [$ r, A7 Z# K: x9 B* m
  197. JSR PPU_Proc$ ~" N8 m; I! Z3 ]# D

  198.   W% ?- n9 K# o; W' K4 M! Z, R7 g1 a
  199. ;启用NMI中断
    $ r3 e+ k, _5 S+ j" m# z
  200. LDA #$80
    + b- z$ m8 V  e8 x
  201. STA PPU_CTRL3 F4 T! ]4 ~$ h" O/ b0 ]" U
  202. ' x7 L  V% l- C) O
  203. ;更新调色板) F+ f( E, K1 N# }6 F
  204. JSR Update_Palette_Data) t$ A+ M4 X' q6 b1 {# Y, M2 H1 L7 [
  205. ! v% O, G+ J7 h$ ^0 j0 T7 @& A. ]
  206. ;显示时间(缓冲)
    / C# A" v" l# W* F4 n  @
  207. JSR Time_Show
    ' R2 n0 d0 Q0 a, J2 R0 B% G( }

  208. . I) v  O: O( U5 U0 ?6 d1 i
  209. ;播放计时/ ^9 a  U9 `4 a* m+ p) }8 V9 A: i
  210. JSR Time_Count
      J0 a( m4 e/ m3 B- c4 P. Z( Q

  211. ; H5 c- ^" V! E7 {# V9 R: I+ x
  212. ;播放声音0 V7 u- q7 s( D7 z8 N, k: }
  213. JSR Sound_Play
    ! d4 K. f& Q8 E
  214. + T2 D! t5 R$ r* h5 U' i( D& [
  215. ;切换音乐(手柄触发)
    7 [9 e4 c5 a: c! t& G8 o: C
  216. JSR Music_Switch. }% t4 n' c% O+ L

  217. / n' k$ P- j2 U$ i7 c9 }
  218. ;音乐显示(缓冲)
    3 O0 |9 |$ b( W$ P
  219. .IF SOUND_BAR_SHOW_ENABLE* Y! a1 v1 L/ o. S% A) e. X0 b
  220. JSR Music_Vision1 h  y. _  Z( z% o, L
  221. .ENDIF
    ; i( h3 i3 o" w8 j

  222. . u0 T, T: G4 s% u% G
  223. LDA Time_Wait_Cnt
    # N0 ?# ^! X7 l* H/ o/ ^
  224. BEQ NmiProgramProcessEnd8 E2 j2 Q" Y8 B  c
  225. DEC Time_Wait_Cnt9 [. p- \, j" `1 w. a
  226. NmiProgramProcessEnd
    0 K) h& `; p; d5 ?! F# v
  227. RTS
    0 `  W- \1 ^  @2 c7 \( E, O# z; B0 l

  228. 0 I% ]/ L0 b6 @" b* i
  229. ;==================================================0 E4 P* C3 N; W  T3 Y
  230. ProgramBegin;主程序
    ) N0 a2 }: f) |
  231. LDA #$00
    # U4 N0 v( x# _; k; a: _! e4 V
  232. STA PPU_CTRL
    ( c4 r2 [( @* N
  233. STA PPU_STATUS
    5 _: f5 i+ A! f3 P) o# U0 x9 }
  234. STA PPU_MASK
    4 I" c5 F9 j" X1 i8 p" y+ S
  235. STA APU_STATUS/ \0 W5 H. Q( _+ M$ }& h% @) m
  236. STA PPU_SCROLL
    ' L5 D. _) Q; l! P' A4 d
  237. STA PPU_SCROLL; }5 M6 R) g! r+ E7 j
  238. LDA #$C0& g; {- V1 B: t8 }3 _8 k' i: Q
  239. STA JOY2_FRAME, @/ z+ V+ r. g9 T7 e

  240. 7 \' G% t. k% R( y
  241. LDX #$FF
    & d( f) @  ?. C. u& U# G5 j' D
  242. TXS- L- @) U/ x* T# Z) _- {
  243. LDA #$003 z3 K1 ?8 L8 x0 p; G
  244. STA PPU_CTRL
    : r$ `. |0 t+ }) o$ q$ z
  245. STA PPU_MASK
    # {/ e. y7 S. i: B
  246. STA MMC3_IRQ_DISABLE
    + f2 S; ^, l( {- X  |
  247.   x1 p0 w& V+ m3 D
  248. ;==============================
    % q% ^* C* f2 L% z( s+ h  g$ c
  249. ;调色板清空
    " p8 G3 m* Y# ^2 Q  |; e
  250. LDA #$3F
    + S2 L( k. {9 |* B
  251. STA PPU_ADDRESS
    5 H8 a- l0 I( O+ }4 b# M
  252. LDA #$005 r, P1 U$ Z5 H" {7 [* w) u5 l
  253. STA PPU_ADDRESS& {9 D4 z6 W5 l2 t
  254. LDA #$0F
    * D$ w! l. v+ C% n, f9 r/ `* r9 [
  255. Palette_Clear9 `  u3 l/ Q$ ^/ L6 x' a& z
  256. STA PPU_DATA
    - M% }; O, t# ~) R& q" N! J3 L2 {
  257. INX% I' V" o" _5 g2 C
  258. CPX #$20) @$ d# r( C0 ^$ U2 F& W" p
  259. BCC Palette_Clear
    2 X& }% E+ _4 Y0 ~
  260. LDA #$00
    : a6 M) p) W0 K
  261. STA APU_STATUS
    + N) y9 ~# |4 }
  262. ;==============================0 w0 }' N/ P8 e1 O/ p  s
  263. ;初始化背景调色板( V) y- S5 L; b
  264. JSR Set_Palette_Color2 y  n% U0 S2 f* @( ?0 f: s0 e$ z, e$ y
  265. JSR Set_NameTable_Attributes
    8 d) k; V# r! @9 q& t, G* ]

  266.   N2 h5 n: x5 M# `4 A: Z/ ]
  267. ;==============================+ f. a9 q% l3 a5 V! J' o% V5 {0 s; {
  268. ;RAM初始化8 `. }) }, {  W9 Q5 Q% b6 b
  269. RAM_Clear_All
    4 S* o) I+ h/ T, Y+ n
  270. LDX #$00
    & i" c- C% _# o9 g
  271. LDA #$00
    8 ]& N1 X: N! ^& c" N; S( i% N
  272. RAM_Clear_All_Start2 L: L- X% k/ t$ h
  273. STA $00,X, _& g( ^7 q6 o! e, V6 t
  274. STA $0100,X$ M% _: d( x) R6 a1 ~' o+ x' {
  275. STA $0200,X
    3 B, ^" q' L+ J1 @
  276. STA $0300,X
    7 F6 G3 I% }/ D; Z3 `4 L3 v
  277. STA $0400,X
    7 @* W, B/ }8 p1 V' ?" R$ o
  278. STA $0500,X
    9 e1 Q/ ?0 D. U9 k
  279. STA $0600,X6 g) i! I. ^$ m5 F/ ?& S: K
  280. STA $0700,X. i& S/ v* G8 d4 t
  281. INX: q: v" U& T! p2 h( T
  282. BNE RAM_Clear_All_Start3 w/ p' S8 h8 K2 b
  283. - \+ z/ w4 T( I( S; c* G
  284. JSR VramInit
    1 }3 d6 G1 [2 K. c5 m2 k& q; Y
  285. JSR Init_Palette_Addr4 L. s9 X2 `4 z7 `8 \* q- M( E
  286. ( J& d6 f  b. J3 N: g
  287. .IF Music_Reset_Addr# V# A! z( r; v. c+ T1 d: o- l% a% n
  288. JSR Sound_Reset
    5 K+ z, X& p7 ~0 O
  289. .Endif
    3 ?3 N; z- z! x0 I' o0 o

  290. - ~% g/ l! H  T$ |. s: V
  291. LDA #Music_Start_Song-$01
    4 D, F9 r. x5 b! ?  X) T1 i6 V1 W
  292. STA Music_Cur
    & P' K  S2 b4 S: n0 f

  293. 8 }8 S0 V% c9 g( F
  294. JSR Show_Music_Text8 W0 r4 O  t* ^7 o$ {( \
  295. 6 J! M3 n, r% [/ }  ?' [
  296. .IF SOUND_BAR_SHOW_ENABLE
    / T0 Q9 H3 B9 _# T4 |! u- p
  297. JSR Sound_Bar_Text_Set
      ^! d. q$ o( p9 t
  298. .ENDIF
    + x. C! D5 u7 h# U/ q; m

  299. : O% C) E5 ^  @- ]
  300. .IF Track_Name_Pos) V; F0 t& r  Z4 N1 j. `
  301. JSR Show_Track_Info# v& o3 x- h$ d2 l/ {! V: X8 h4 O
  302. .ENDIF
    . E6 T% b& y5 l- P& B
  303. 3 n5 r7 R  J- X6 {# G; |
  304. JSR PPU_Proc
    3 u9 d  ~1 q! y
  305. 5 O/ o6 W' q: W( O! I( T( G
  306. LDA #$0E! u# m5 H2 i: S4 j
  307. STA Screen_State
    ! [* h& F& E0 W, j6 T
  308. 7 _' }  A5 l( Z' b
  309. JSR Sund_Bank_Init; q3 D- y& M$ t0 x+ q
  310. / _; ^/ c) O& `, \- F
  311. JSR Music_Show: `$ Z$ g- b* [2 Q! v  i: ?
  312. JSR Time_Show
    ) `( Q8 V5 o+ Z7 f
  313. JSR Music_Stata_Show
    1 y- x2 c$ n  p" {
  314. JSR Time_Delay% o# z& u/ R) [: ~- [, `

  315. : m% g$ p# `# O& d* M

  316. 9 `; A* @, D+ F( G' c9 n) U
  317. LDA #$80, ~* c8 I9 [, g0 n9 D" E
  318. STA PPU_CTRL
    / o( k1 ~/ z, X# v  k4 T( N( X" k

  319. * e# P% ]; p  b6 g9 s8 {' x5 B' k
  320. LDA #$208 s8 }! \  e: j; q# J. R9 U
  321. STA Time_Wait_Cnt
    & [) F7 ^" L# ?" m+ b$ D# x
  322.   ^8 c0 ^2 O7 G1 E. S9 @# n6 l
  323. Wait_Time_Over
    ! Z7 Y# M" f1 p8 d( \- D0 g
  324. LDA Time_Wait_Cnt
    . F) U, }7 r" T7 ^+ u5 i3 F5 V9 Z
  325. BNE Wait_Time_Over
    $ e6 c" _  g5 ^# K6 e# h- }

  326. 9 C8 D; R" y, u/ t% J
  327. LDA #$1F: ^5 {4 Q3 n4 g  {7 Z" Q; N3 z( z
  328. STA APU_STATUS
    ( p, [# K  h, @2 B5 [
  329. LDA Music_Cur4 G2 I; ?* V* t" s4 f
  330. JSR Sound_Init
    ( Z$ f3 f% S8 T0 V! d, {) T; o( g
  331. 2 J: `" k* n( F' o6 a3 P
  332. JMP MainLoop
    4 `- n" s% I: v! Z, \+ t, V
  333.   e) m. k% B2 i  D
  334. ;==============================, J. T/ X; i' B, c: q$ D
  335. Time_Delay;延时等待+ H: g, }6 f# x6 s7 U
  336. LDA PPU_STATUS
    5 w* ?8 ]& I) G  {5 ~, T. A
  337. BPL Time_Delay
      _4 k& j0 l4 i. f" E$ l5 p: J1 Y5 B
  338. RTS
    1 Q. H) E+ q6 m
  339. 0 U1 S: {4 B/ u' e+ b2 I" r
  340. ;==============================
    - A& S* J1 C; j2 b, P8 \% n
  341. VramInit;初始化图形内存
    9 @0 ]2 a0 W5 F; ?) p* ]2 u/ A
  342. LDA #CHR_DATA_BANK
    ; X4 S' f3 ~  N, F# B$ G7 d
  343. JSR SwitchBankA000
    9 ]4 G; a. U' q8 ]4 G5 L; M! z% l
  344. LDA #LOW(CHR_DATA_ADDR)
    ; ~8 b6 F, x& J! [8 k2 W
  345. STA <Data_L# ?2 u8 m7 O+ C( h! y
  346. LDA #HIGH(CHR_DATA_ADDR)
    % q* f: R: C9 p) @. o4 G
  347. STA <Data_H* q+ ^3 v- C, \
  348. LDY #$000 Y3 d: K* C. u' a% d' C
  349. LDX #$20. a* Y, ~8 \; ~3 F
  350. LDA #$00
    ) b5 J( p7 ?+ h1 ?
  351. STA PPU_ADDRESS* O- E  o+ @7 S  o$ ~
  352. STA PPU_ADDRESS& g- B3 V' J4 G0 t: y# ^
  353. VramInitWrite
    * O" M/ N! G" T  v. ?8 r
  354. LDA [Data_L],Y
    & t& j' H! F$ \7 W8 c
  355. STA PPU_DATA( S1 S) h7 M0 X5 m
  356. INY
    6 r! H3 N& @* [* E: c- Z2 @  y
  357. BNE VramInitWrite
    3 X# G; K, y1 l: l4 W, k. C
  358. INC Data_H
    / k' N& X7 O3 _; l2 f. d
  359. DEX
    6 T* Q( x' E$ O0 e
  360. BNE VramInitWrite
    - M( s9 B; q3 Q
  361. RTS4 A  j, W& ^! w) |! {6 O% ]% W( O0 Z
  362. 4 p1 J( q. O: ]* f8 B) Y; ^
  363. ;==============================1 P% m4 M5 b1 n, O/ A) K1 e$ F
  364. RAM_Clear;RAM清除% Z  X9 Y5 w* M. Q6 N2 A8 c
  365. LDX #$007 l2 a9 A6 {/ O0 `, x1 ~# k
  366. LDA #$00. `. O) \4 E6 t% I9 m9 J
  367. RAM_Clear_1
    1 L7 K# u7 r. g5 t) y# d
  368. STA RAM_Cln_1,X
    " W  B# J- T* _9 ~. b+ G& ?
  369. INX
    : `8 C9 W% d+ v3 ]; ?! f/ @
  370. CPX #RAM_Cln_1_Size% }- {' }4 ^: s5 ?" B- Y
  371. BNE RAM_Clear_1! ^& X% m# W0 d; E1 U
  372. LDX #$00" l5 [0 B, d5 s7 M. A
  373. RAM_Clear_2) j- m- X+ B4 j
  374. STA RAM_Cln_2,X
    . ?; y5 P; L1 K% T9 u$ A9 R
  375. INX
    9 s! ?5 x5 B, y3 |0 h. V, s0 i& N2 j( k
  376. CPX #RAM_Cln_2_Size
    $ Q: l: J6 _! o! t6 p6 R
  377. BNE RAM_Clear_2
    $ i; B- F' y) [% P5 E
  378. LDX #$00
    ! h5 r$ w* H' s1 B3 y
  379. RAM_Clear_38 Z6 S* \7 ~& j3 B- E$ M# @, ^
  380. STA RAM_Cln_3,X
    ) G9 J- L' P7 E  L! v6 v
  381. INX
    / P+ h; x5 u: E% i6 @  d( }  S
  382. CPX #RAM_Cln_3_Size
    6 P1 c  ^! E5 k2 Z
  383. BNE RAM_Clear_3
    - H  i3 _. l! }; H; v* h6 D# V$ k
  384. RTS
    4 Y7 Q8 @% s. F
  385. " {" I& ~- V' H/ }$ i
  386. ;==============================
    1 N1 `! A3 e' C! u4 o/ D: N2 `: _
  387. ;音乐切换- U) g6 C# v9 r8 q! i1 w
  388. Music_Switch
    ) x/ p/ x) S. [# n% Q, E! m7 a
  389. JSR Key_Proc
    1 W% Q1 F0 g6 r3 v
  390. LDA Key_Once
    # A* {3 q6 V, |' S& y
  391. CMP #$10, x1 i# j/ O: T+ X- o9 @& }3 X4 C
  392. BNE Music_Start_SongStop4 ~9 Y/ q3 O5 \) e' }' T
  393. JSR Music_ReSet7 h4 l, k8 P4 X( p
  394. ( c) L9 `. {1 M; r1 \1 E
  395. ;音乐停止
    + V: O7 }& e) F) Y+ t0 ^' ?
  396. Music_Start_SongStop2 n( M" {; m, u4 p' m  ~4 p
  397. LDA Key_Once+ S8 l+ J( @% c$ {! X, }
  398. CMP #$20
    4 w8 U* {0 b3 ~
  399. BNE Music_arrow$ Y9 t5 Q: W$ y" i- H
  400. LDA #$01% w0 B* |! \% q. t6 k3 z1 F0 `' s8 C
  401. STA Music_State$ c+ P! w' a" v  Y3 _
  402. JSR Music_Bar_ReSet2 [! ?4 I5 O* M3 M/ k3 q! D" D  q
  403. JSR Time_ReSet
    * ^( r# E8 X' E0 {, E- J0 q; {2 x, V
  404. JSR RAM_Clear
    1 F# x" `6 w& f. ?6 I
  405. JSR Sound_Clear
    - W* D) J3 r. g" J: W) ?  v" X
  406. JSR Music_Stata_Show7 R. R& ~) P$ n5 s& E
  407. Music_arrow2 z' p. {3 U' {0 A6 u
  408. LDA Key_Once
    4 W$ V- N7 s  Z# Y, A9 z6 `
  409. AND #$CF+ R9 E+ p- a+ m1 Y& a
  410. BEQ Music_Switch_End; Z1 j9 D/ E& N! n! w
  411. JSR Music_Number
    6 A& M4 _0 V( Y5 J2 w% T- b
  412. JSR Music_ReSet' Y- }6 d& j+ F
  413. JSR Music_Show1 D0 a% M1 h( F1 R9 U
  414. Music_Switch_End
    + `6 W& @8 j! `7 K
  415. RTS' F+ b9 w# b0 M  ]% l
  416. + A2 w0 M$ e  E3 i
  417. ;==============================
    3 i! J( {+ l% ~/ W. P1 s  S9 g
  418. ;音乐曲目切换
    6 Z; {9 V3 _; y8 `' ]! C3 n/ ?2 _- N
  419. Music_Number
    $ P. W3 o9 _: _9 Z( u1 k' J
  420. LDA Music_Cur
    + T2 }) v/ p+ }% \  @
  421. STA Music_Last' j3 m, ~, X5 y' J' Z  H
  422. Music_Decrease
    # l$ o2 h! D) ~% o0 Z" }! P# p
  423. LDA Key_Once
    + f- x: j3 D! R( ~' q
  424. AND #$42  D6 p+ ?& }0 H# ?: e1 Z& ?
  425. BEQ Music_Increase# Q: A2 z3 S$ }1 w, i
  426. LDA Music_Cur" ~  q( u) M4 j4 W- y
  427. BEQ Music_Increase! m- M  l. f: n' m( K
  428. DEC Music_Cur
    & P5 [/ V4 M; ^
  429. Music_Increase
    ; I3 Z$ ~( E$ h1 O* F- A" }
  430. LDA Key_Once
    5 _8 B& A3 v$ B' D% G/ P  ]4 k
  431. AND #$81
    $ T0 E! e( T. {/ p9 O
  432. BEQ Music_Decrease_10- S1 d3 b$ L! }; @" g3 d3 w) I
  433. LDA Music_Cur  g& t/ U) A0 z9 x3 v4 ^) Y
  434. CMP #Music_Song_Total-01
    . O# o* P* z$ }& d7 ~. |) F1 G4 z
  435. BCS Music_Decrease_10
    9 @8 T2 v$ t8 A* X
  436. INC Music_Cur
    , I3 v" Q# b% ]6 D1 [1 z9 ~' l' r
  437. Music_Decrease_10' Y# u' q  k5 Z, g$ N; ?% }
  438. LDA Key_Once
    ; R/ \* J& {  S
  439. CMP #$044 J5 w4 p  ~; J" V) L( \, l5 z
  440. BNE Music_Increase_102 e4 O4 O% a8 j, i3 B
  441. LDA Music_Cur
    " @9 `5 M9 a* Q* n% h1 D3 g7 L+ p7 K
  442. CMP #10; d, ^& U; @2 X. g6 s8 g
  443. BCC Music_Start_Song_Min7 t$ Q7 m& _0 G1 \) m: y& ]
  444. LDA Music_Cur
    1 F& Z! C- T4 P+ p, p( O) S
  445. SEC9 h* l- o  e% q2 A) _1 S9 d0 _; N
  446. SBC #10
    % W# @- B+ p& V" ^  m6 m2 Q" Z/ K: d
  447. STA Music_Cur, `7 N2 R/ V8 o, e& Y4 V- K* I
  448. LDA #$00
    0 A9 E* ]  u  {" q2 T6 t2 [( }: w
  449. BEQ Music_Increase_100 t% Q3 q9 _9 I& m, o/ x
  450. Music_Start_Song_Min
    : l" F" R5 U. ?2 C# P: q5 q$ l" m
  451. LDA #$001 b% |, O) l  }) |% x
  452. STA Music_Cur
    3 n+ f: F) ^4 K; c
  453. Music_Increase_10
    " j; w0 A  x4 z- e. R/ p+ T
  454. LDA Key_Once
    1 f- V7 s; j4 E+ @
  455. CMP #$08
    9 Q: ^6 I/ \0 z) W7 p: S# E
  456. BNE Music_Number_End: D# s% Q6 R! c6 f# x8 u6 u6 F
  457. LDA Music_Cur
    4 I" |  g! l$ \$ a
  458. CLC* y% u/ h2 W; m! E- ?1 D
  459. ADC #10
    $ b' X+ g; L# ?6 x5 S  x* ]- ]8 l. Q  y
  460. CMP #Music_Song_Total-01+ Y8 o1 j7 G3 ~9 z* p
  461. BCS Music_Start_Song_Max' S$ S. {5 h! B* z
  462. STA Music_Cur
    3 k" m! x. M  ]2 G
  463. LDA #004 f+ e0 ~  @$ z/ q+ ]+ m$ u
  464. BEQ Music_Number_End
    , g! u" ], g( K# N$ c2 Q5 s. ]  N
  465. Music_Start_Song_Max5 A( j+ |5 u- @( W" h: U
  466. LDA #Music_Song_Total-01
    $ N2 r* d) D- i" p8 [" Z# L
  467. STA Music_Cur' a9 d0 ^1 ~: J) O8 F& Y' W
  468. Music_Number_End
    * h- I0 n9 b! K% v: f
  469. RTS5 R( f) R+ G: K5 M2 A
  470. 9 a- Q' z4 z3 E4 ~; H8 f2 \% N; T9 i
  471. ;==============================8 _  ?, d' V6 A, h  H3 m9 g
  472. ;音乐重设
    ( Z% v& {! `6 I1 T& X# U
  473. Music_ReSet
    + k# J0 Y# v* C) x- \- `) I
  474. JSR RAM_Clear5 B7 r) E4 w; d8 [8 Q  r$ H, @$ Y
  475. JSR Sound_Clear
    # Y1 e2 M6 F: S+ J2 V: [
  476. LDA #$1F
    ; L, ~- G8 H: T
  477. STA APU_STATUS
    7 @0 ^! y. m1 @# P0 y# ?0 x* Y( l5 A
  478. LDA Music_Cur
    ! u( H* u5 S5 y3 K0 x  V# a9 l
  479. JSR Sound_Init
    ! O/ _3 w6 M0 F% c- p; q$ X8 K0 v
  480. RTS
    8 K  p. N0 {/ C: \# s- p' A
  481. . @! E! F8 L- v# ^0 a" X3 J  j: g
  482. ;==============================
    7 w' x8 N* d1 W% C
  483. ;音乐端口清除) T# l0 j2 d( @5 e2 v) T
  484. Sound_Clear0 A" m' |. _7 O  r" ]. ]2 ]
  485. LDA #$00- R% r* d1 L4 @7 B% Y% l
  486. STA APU_STATUS
    ! d( }; H1 W0 q- L: q3 ~# ^
  487. LDX #$006 P# h0 v7 [- ^- w$ `$ T. A) ]$ Z& V
  488. Sound_Clear_Start
    - A! H) _4 ]2 o9 f- j8 v! f
  489. STA $4000,X& x) u" l) ^% q5 u$ W
  490. INX. D! K/ Q6 K' l: L/ y/ b+ I
  491. CPX #$14. Z0 N2 g2 V5 I: ~. z& ]
  492. BCC Sound_Clear_Start9 J$ A8 _3 I0 P" v# v% a
  493. RTS: M5 S% n% t0 C, t- l5 o5 _
  494. + _- u6 a2 y4 j, T. a
  495. ;==============================' W3 [' \: o2 z& \
  496. ;按键处理
    - H' }2 L5 w, a( K9 j9 h* _% [! z
  497. Key_Proc
    # J- l3 A8 @3 u! v1 b7 M! ]+ }% K' U
  498. JSR Key_Scan
    : F* K1 o. K$ {# N8 M- B
  499. LDA Key_Keep% R- m7 Z+ i  D0 V% B4 Y7 Z* L
  500. STA Key_Temp: g2 R- w. _' }" b5 y) O  p1 X
  501. JSR Key_Scan- V% k  h) {' c' b: Y" v$ W
  502. LDA Key_Keep- T) U& s& ]" s0 x
  503. CMP Key_Temp) ]6 }9 L- V2 x- X1 x
  504. BEQ Key_Get_Once
    ( r/ U$ D1 Y% L+ q' Y3 C% }
  505. LDA Key_Kemp; w5 X9 I8 i3 N. ~
  506. STA Key_Keep! \7 V$ l7 S1 l  I3 u, O
  507. Key_Get_Once
    0 b, C! g; F4 q: I" _6 R
  508. TAY
    ' j7 n6 `- L! v
  509. EOR Key_Kemp: w: K8 r$ L+ ~- A+ Z
  510. AND Key_Keep
    1 b' v, ~6 {" b+ u6 t( S
  511. STA Key_Once! R' l% P9 A  j) v% v
  512. STY Key_Kemp, C! }# S+ G4 v) c7 s8 i2 d% n
  513. RTS. O7 H; w, c; t! D" V& b
  514. ;------------------------------4 U3 X: x$ C# o) H( Q
  515. ;按键扫描
    2 @% t. ?' d: Q8 J9 }! a+ c
  516. Key_Scan! i1 K; z. n( R2 j
  517. LDX #$01
    0 n5 s5 S( o! i' a! v. m
  518. STX JOY1_FRAME
    / ?& v5 p- U6 m% R' _
  519. DEX& L9 F5 y, W- U, G& h
  520. STX JOY1_FRAME
    1 Q% s( [9 O0 v! u
  521. LDX #$081 j( F, G/ _; B0 r" s
  522. Key_Value" F( F( `6 X& f) [' F
  523. LDA JOY1_FRAME
    8 O% ]/ u# B2 R% O2 ^5 i! `' U
  524. STA Key_Getv( g9 ?: ?5 V' H: j6 @5 P/ E2 N- N+ K7 F
  525. LSR A
    . i- i. n  U' ^+ @5 t. g' D- }
  526. ORA Key_Getv$ a3 c: U) ^4 @. q2 D" j% l
  527. LSR A$ `  \7 h6 X3 X, q6 m: |) S
  528. ROL Key_Keep
    & d- d5 ], x" V& |
  529. DEX
    : K# d6 T( y# o+ s9 D
  530. BNE Key_Value$ g( |% Q6 u, B
  531. RTS( V! I5 F) B! V( [9 F$ n& |

  532. 2 t7 q$ u8 t7 Q0 Z3 n
  533. ;==============================1 q3 \) @) x2 K
  534. .IF SOUND_BAR_SHOW_ENABLE
    - a/ d7 y# R$ s& _3 C% N& A
  535. ;音乐条显示0 A/ Z9 ?1 ?' t
  536. Music_Vision9 q; V+ _, x% T, R& E5 `" \
  537. JSR Music_Animation
    # q8 y5 g# f( T! a7 d& Y
  538. JSR PPU_End8 w1 s5 n! ]$ l  l/ S
  539. RTS( S7 w7 l7 j- ^
  540. ;------------------------------* L0 t: p  S5 B
  541. ;音乐条显示处理
      ^, L+ {6 N$ x- W
  542. Music_Animation9 ~# D9 `3 k& s& [% q" D# s5 N7 K
  543. LDX PPU_Cur
    8 s7 L- p6 h7 `& p0 b8 N6 X$ t% g6 m
  544. LDA #Mode_Line
    7 S& i- Y2 ~9 O& ]9 i% Q  r. {. d7 h
  545. STA PPU_Addr,X( D# D+ t- O* p
  546. INX
    ( q/ f- e4 D$ G8 s7 E
  547. LDA #HIGH(Sound_Bar_Pos)
    $ q( _$ T  y2 \& x9 j2 L. l
  548. STA PPU_Addr,X% [& M: [$ R& E7 v  a8 R# h8 T
  549. INX
    5 G6 V% C! c: g% _1 ~8 r; S. A$ y
  550. LDA #LOW(Sound_Bar_Pos)0 P8 r4 |4 w, Y" I8 U
  551. STA PPU_Addr,X- k5 C: |4 W" K! L9 @
  552. INX
      U/ f% W0 Y7 H/ u" Z0 j8 j
  553. LDA Sound_Bar$ N& S+ X: m2 K+ f* o
  554. JSR Volume_Convert
    " x8 `+ ]# @3 g
  555. JSR PPU_Return
    2 v1 x0 ]- G4 Q- y. S4 u
  556. LDA Sound_Bar+$4. f& ^2 l$ H  g: c5 M0 G
  557. JSR Volume_Convert/ k! E+ X& I$ M9 }2 K
  558. JSR PPU_Return2 P6 Q. E3 `  K" b! I  u
  559. LDA Sound_Bar+$8" [1 l- T- w5 t6 ?0 a
  560. JSR Volume_Convert_Ex) E$ X4 y( w& f3 `7 A0 E: M8 W
  561. JSR PPU_Return
    ' j8 U7 X4 w! d) z$ n, e- c
  562. LDA Sound_Bar+$C% r; J8 B1 Q! j9 g
  563. JSR Volume_Convert" G% j. D* a8 \( |! ?1 g
  564. JSR PPU_Return
    + }5 A4 l0 B6 l
  565. LDY #$10
    , c% Y- F7 q& }4 r" W: n; V, [
  566. LDA APU_STATUS! j. @7 M- j+ F5 a8 p
  567. AND #$10
    0 r- q4 k, Y1 B
  568. BNE Volume_Count
    / x& B: a! Y, b1 k  k. c
  569. LDY #$007 C5 d3 r# T, P7 @& \
  570. BEQ Volume_Count. a1 G9 i) s, e2 S
  571. ;------------------------------
    ) w% E  [" W* H% j% v. T( @
  572. ;音乐条处理
    : d0 L. U6 |. Q5 _0 O* G4 \$ k
  573. Volume_Convert_Ex( ]  v% j- I$ X) [1 V" ?1 {
  574. AND #$1F
    ( g( [7 o1 T/ m3 |2 C1 f0 j1 k8 R
  575. TAY
    % G6 C$ ?( g4 M. y; g) x! o& w
  576. BNE Volume_Count# T: R1 Z6 I4 |) s
  577. Volume_Convert
    . Z( t' l! h! N( M+ ]" J+ {) W
  578. AND #$0F* e) K+ v1 E. d! f5 w3 Y( g
  579. TAY- W! V# ~  Z+ |: l( n1 N
  580. Volume_Count
    # k" ]0 F0 ]4 U/ s- P
  581. LDA #$08
    7 {, t5 p/ |# @; w. z, y! X* O
  582. STA Sound_Bar_Cnt
    9 f, u# B1 ^, i! Q& U% \
  583. Volume_FILL
    ( X7 \5 V- @2 x/ Y# G+ T  s9 U
  584. DEY
    ! y  a" {$ f$ [# ]& L3 a( }0 l+ B( a( ?
  585. BEQ Volume_Half
    ! S/ @' J* M: o3 G# J1 a% D" m# O
  586. BMI Volume_Empty8 t- q' W8 J2 b! w0 G3 O
  587. DEY
    " t4 d, Z; {8 B6 ?- n
  588. Volume_Full" g" v. l% W5 V, d* l5 K8 B3 I
  589. LDA #$16! ^, K7 t! d9 I! e
  590. BNE Volume_PPU( D# |% d) v% d1 h" a
  591. Volume_Half
    , @% J4 q! t4 j" {8 \6 o
  592. LDA #$15: z/ Z$ x% {' ~' b% T4 h
  593. BNE Volume_PPU
    2 x! A6 I0 T: g
  594. Volume_Empty
    ' j: G, _0 E, w+ n' C! B
  595. LDA #$14* {3 T8 e$ |5 S* }' Q0 M: `
  596. Volume_PPU: e3 P& V9 ]2 }5 P1 q- o9 {
  597. STA PPU_Addr,X% u3 D( R) Q# }# @6 D
  598. INX% b. n! H: C8 u7 T& c& @4 L
  599. DEC Sound_Bar_Cnt
    ; d& W  [$ c& P$ y( Z  c
  600. BNE Volume_FILL
    0 [+ x, [1 T2 n$ V6 z; M
  601. RTS
    8 _1 _. J2 Q* S% u: `+ `2 c
  602. $ W- u. }& c4 D" N. R
  603. .ENDIF7 a% a& W& I* x6 D; G% N0 g
  604. * T9 i5 L" Z. P" K" {+ X/ N
  605. ;==============================$ `" }* }7 e8 l4 i- ^4 c
  606. PPU_Addr_Set;PPU行开始, v9 N: ^4 V* J- f  X4 V2 E
  607. LDX PPU_Cur
    ' t2 f: [) g, [3 \
  608. LDA #Mode_Line
    1 v" `) L) d) G& i, G3 Y# r# F
  609. STA PPU_Addr,X
    ) {3 F8 a6 |$ r8 A4 q
  610. INX
    # ?( A# {. R- }% C' \. M' l
  611. RTS3 R) C7 X8 c( y

  612. " _0 M) w1 m% N$ h" K  C% G
  613. PPU_Return;PPU转行
    . U/ p1 e& v4 ?* E/ G8 h
  614. LDA #Flag_Over
    / S6 M5 l2 z7 x
  615. STA PPU_Addr,X0 Q4 e2 \1 O3 B
  616. INX" u9 j+ R8 V; x8 |- n* X# d
  617. LDA #Mode_Return
    5 W  U: P' L8 x
  618. STA PPU_Addr,X
    . o8 t& O" O) m, {
  619. INX
    / f; x4 U0 Y: J5 a8 m2 z
  620. RTS
    3 M, B+ G1 P8 k1 P

  621. 1 x$ N5 b; p7 }  K, `: L' _0 d
  622. ;------------------------------
    2 J" Y4 O& a( t8 W. z) L
  623. PPU_End;PPU结束6 E( N  P  R5 O
  624. LDA #Flag_Over# Q! e2 P( C1 m. H+ M/ Y
  625. STA PPU_Addr,X
    6 f; t0 ]3 ^# D2 L% t# H4 K  L
  626. INX' O4 I& F, W9 {
  627. STX PPU_Cur
    1 V' v6 {: ]  ?
  628. RTS
    2 u# O5 x. M+ A+ Q* L
  629. ;==============================
    / G/ Q4 ?; [, B7 ?0 ~4 m3 J
  630. Mode_Line     = $FD    ;新起行模式3 g+ _& Y9 y9 Y/ U7 s7 ~' x  y" X- ^
  631. Mode_Return   = $FE    ;转下行模式
    2 V0 `9 R+ D* K- c7 O8 B) N6 X
  632. Mode_Clear    = $FC    ;行清除  {* d+ o6 O& q1 Q
  633. Mode_CntLine  = $FB    ;行计数写入5 ]4 [/ o' U' r! w! x# H- P
  634. Flag_Over     = $FF    ;行结束标志/ u( e4 \' i$ r& l2 S

  635. 4 `4 S" L; X; e2 B
  636. ;------------------------------9 W! ?" V, r$ t3 G( a
  637. ;PPU处理
    * _9 y0 o8 E4 }
  638. PPU_Proc
    / g* E0 V' W+ Q" u, H) R, F
  639. LDX PPU_Cur) d# M5 Y. `& i- p. |- O. X) s0 f
  640. LDA #$00
    * h, {( q% h- c9 T4 t" b! L
  641. STA PPU_Cur
    2 B! l0 B$ a0 l, q
  642. STA PPU_Addr,X; L* p+ I5 m9 L( }9 r
  643. LDA PPU_Addr! t" H6 ?  i5 U7 ]1 h* g
  644. BNE PPU_Proc_Beg
    ! t8 P% U; G# z8 _* ?6 O
  645. PPU_Proc_Ret0 X# s4 Q6 f' C8 `
  646. RTS; s8 i: `4 h9 E7 j! j
  647. ;------------------------------7 v) B5 ?# O6 \+ p% d
  648. PPU_Proc_Beg  ;处理开始
    7 t3 g7 [# N1 }% H/ `* J
  649. LDX #$00
    7 m- [8 y" m, H1 _
  650. STX PPU_MASK% k6 h+ h; n2 Z1 h$ K
  651. ;------------------------------
    $ V. l% V4 m$ j; C7 ]+ H
  652. PPU_Mode_Select  ;模式选择" n2 ~9 m% S- s0 s) T# _' {9 e. Z
  653. LDA PPU_Addr,X
    * f4 p% S) x# u3 d9 N
  654. CMP #Mode_Line
    7 Q& W" s" t! L8 S3 G8 B
  655. BEQ PPU_Mode_Newline
    . \0 p# c+ ]; j. O: j" p
  656. CMP #Mode_Return
    . V- t- |0 B* j# K* M8 I  T
  657. BEQ PPU_Mode_Return
    3 U2 l; T+ k1 Z! U9 T9 ?" A) ?  Z
  658. CMP #Mode_Clear, ~, ^2 w0 H1 s# q
  659. BEQ PPU_Proc_Clear6 v) E9 e4 w7 h" m
  660. CMP #Mode_CntLine
    % d9 h8 X+ X( F
  661. BEQ PPU_Proc_Cnt_Line
    2 K( `8 Z; x# G) J
  662. RTS# B( w) n) y2 `( A, Z
  663. ;------------------------------- \4 X$ i5 G; A/ X: {/ o: Y5 }' X% Q
  664. PPU_Mode_Return  ;转下行模式0 |) W# P' E/ T) [- _) v0 c
  665. LDA PPU_Addr_L5 P, v. o% ~, ^5 p/ ?
  666. CLC
    - D* D& O( \8 Z# K8 ^
  667. ADC #$20
    . _+ ^2 }) Q% n
  668. STA PPU_Addr_L4 M5 V5 X. V; p1 x) e
  669. BCC PPU_Return_End
    . H( s7 G4 F/ M! T7 [6 c' _
  670. INC PPU_Addr_H
    7 c: T4 N5 i* m# x1 Q1 ~
  671. PPU_Return_End2 U6 B& H0 x+ m* h6 }6 j! A4 B
  672. JMP PPU_Set_Increaser
    ( s' C7 `# l  p$ n& _
  673. ;------------------------------; d+ r. ~* _0 g* v5 u' H; v/ W
  674. PPU_Mode_Newline  ;新起行模式
    " K+ _4 A% b# a( L" `
  675. INX, o$ G  `" T) ?
  676. LDA PPU_Addr,X/ g% t8 k% w- A/ \, S9 S
  677. STA PPU_Addr_H/ d6 P: @" ~3 a* _* `
  678. INX
    ! ?+ {( k% N4 ^1 U$ t5 `
  679. LDA PPU_Addr,X4 [) z- g6 |) ]( B; [7 w* ~
  680. STA PPU_Addr_L& w3 T. Y8 _4 \1 Q* f; ]6 A, o! ]
  681. ;------------------------------; E1 }' t: k3 t& ]6 z& B9 s
  682. PPU_Set_Increaser   ;设置写入地址/ e$ K- A! p: j: ?8 M7 `
  683. LDA PPU_Addr_H9 Y+ V: H5 C$ Z' U- D5 O
  684. STA PPU_ADDRESS. c) \7 |% W7 q
  685. LDA PPU_Addr_L7 ?6 W! d' S, j) `5 `
  686. STA PPU_ADDRESS
      M# b9 v5 U0 H9 [
  687. ;------------------------------
    , ]/ a+ e$ p7 s  |" B# B/ S% S$ o
  688. PPU_Write   ;写入数据
    # _) z* t5 K" i* a6 h! [% M5 [
  689. INX1 E9 ]. U' e7 T, I) _! K& V1 D
  690. LDA PPU_Addr,X  g) R8 n  L3 H. r% c; G+ w
  691. CMP #Flag_Over
    * y8 y. r8 L9 f; G  I
  692. BEQ PPU_Proc_End( f2 g4 |5 \  ^( l6 p& A
  693. STA PPU_DATA! f4 [/ S/ _9 z7 I/ l/ c  {
  694. JMP PPU_Write  `3 g; _0 r) l
  695. ;------------------------------
    3 _! z: ~# ]7 i: ^" a
  696. PPU_Proc_End  ;单行写入结束
    8 _1 N4 k4 j7 n) K
  697. INX2 x! W7 ^8 J' `9 D
  698. LDA PPU_Addr,X
    * t- ?# q) G$ D" P/ U
  699. BNE PPU_Mode_Select* ?( V, b8 K% F4 B% q
  700. STA PPU_Addr
    ( m- o8 E# X$ Q6 X. l2 x
  701. JSR Update_Palette_Color
    1 t. h% [3 }8 n8 Y. G. k
  702. LDA #$00* q2 Z$ N; u3 t4 G- |
  703. STA PPU_ADDRESS+ v! G* V) }$ r* n
  704. STA PPU_ADDRESS$ X3 }; j( x5 g; K9 r
  705. STA Show_Track_Name
    $ y% U. N8 o" v# r
  706. LDA #Scroll_X6 S" Y: u  G! |% p+ Q2 `6 y
  707. STA PPU_SCROLL
    ! l* X# j, e- s
  708. LDA #Scroll_Y
    5 j1 o. u$ I8 k  y, a+ g6 R+ E- `
  709. STA PPU_SCROLL
    . \7 B. C1 r$ E+ E' F# n* o
  710. LDA Screen_State+ t, l% Z3 c- p9 W) M
  711. STA PPU_MASK
    3 y9 @, F3 `/ A+ [+ e! e: `
  712. RTS6 W; C( m# _9 l- s3 n

  713. 7 n2 Y: D/ M# \9 g/ T+ b# \
  714. PPU_Proc_Clear7 {5 a) u6 t5 h
  715. INX/ H6 }9 H# q( y! l" x& t+ z1 Y
  716. LDA PPU_Addr,X$ J- Q8 {4 g" m
  717. STA PPU_ADDRESS9 i6 l9 `% Y6 f
  718. INX
    5 a. Z9 _# H) q; U7 Y8 W  o
  719. LDA PPU_Addr,X9 {+ I: s; c' |
  720. STA PPU_ADDRESS
    , ]6 g2 A2 O* @
  721. INX
    ! q9 D! Y( j0 @$ J8 G1 \
  722. LDY PPU_Addr,X6 f/ G4 r1 P+ e
  723. LDA #$005 w8 s# z( M' m3 y
  724. PPU_Proc_Clear_Write
    # @& R. `. u$ }' ]% Y
  725. STA PPU_DATA
    5 F0 X% H9 X6 p4 v6 S$ M
  726. DEY3 p4 p9 L& t5 _, T
  727. BNE PPU_Proc_Clear_Write
    & }+ K" h: ~# _, ?/ ~
  728. JMP PPU_Proc_End
    % |( A+ u& j: W! p: z+ X

  729. ( O6 _' T6 C6 [* N0 ]' A( l1 ?4 K6 V
  730. PPU_Proc_Cnt_Line
    2 D# g% t2 w% Z
  731. INX% y8 L! h( K  e6 L  }
  732. LDA PPU_Addr,X
    . ~' d  A1 d/ b( T! ~/ K! b
  733. STA PPU_ADDRESS" i* b, c3 t7 k0 u) A
  734. INX1 @$ m$ x& g  D  @4 E6 x5 s
  735. LDA PPU_Addr,X1 b0 l3 s0 j- c& O8 P% z
  736. STA PPU_ADDRESS
    " B* W  p! Z+ i3 ?" b+ B) \, k* i
  737. INX5 D3 N/ f3 e  e& j
  738. LDY PPU_Addr,X
    7 V) F( \0 x  Y+ P, d& `' j' F
  739. PPU_Proc_Cnt_Line_Write
    , M, G' }4 F1 \& z$ X" H+ ?: W
  740. INX- `' t) K: y' C) M8 m5 `; T: L0 F
  741. LDA PPU_Addr,X
    ; |7 x. v* d2 v1 L* I
  742. STA PPU_DATA( q: [' O+ i% w& Y* N
  743. DEY% I' s4 O( e" \7 g% I
  744. BNE PPU_Proc_Cnt_Line_Write4 ?: o8 q9 t0 U/ l
  745. JMP PPU_Proc_End  _( w0 v! Z/ h' t2 d8 B  N5 Z4 h, j

  746. ) `7 L# J- n8 w
  747. ;==============================- N) Q8 P2 S! G: J- y" f1 ?
  748. HEX_To_Dec;十六进制转十进制
    ) p7 p  j' c: q0 A9 l2 m% S5 \
  749. STA HEX_Data
    & ^7 d- e) K. n( q, p% z. K
  750. PHA% W. M4 R& `' p+ O' o7 S
  751. TXA9 M: [0 S/ t1 C0 T3 b
  752. PHA
    7 L8 y' g, u% D
  753. LDX #$00
    % m  |1 d1 \6 A
  754. LDA #$00# u2 V( `' @& M4 f. P$ X9 h+ K+ y
  755. HEX_Cln
    , ~$ A; ]8 h4 G) B
  756. STA DEC_H,X$ w3 d& S5 w% a# {
  757. INX+ z( ^' ^: e  q4 ]8 O# f
  758. CPX #$03* P0 M* e3 G7 _  d
  759. BCC HEX_Cln6 K# x" T, ]! d* u9 x
  760. LDA HEX_Data" r+ [& c3 `0 A4 y) d1 b
  761. ;------------------------------
    0 Q" w( w, J% [5 q* b) Y
  762. HEX_100- G( P7 u1 a( ~2 i2 f" Y( r9 ?8 f
  763. CMP #100
    # G* o2 E' v1 t
  764. BCC HEX_10
    : m' e! ^- x) m1 W8 z! X; f* j! V( i& ?
  765. SEC
    6 o+ F& L8 C/ ]9 T8 o, a
  766. SBC #100  W' V; U- i) d& M- N+ t7 ]5 Q
  767. INC DEC_H
    3 @" Y( o) q- f. D/ e
  768. BNE HEX_100  t% ~% o* S+ Q. h# c. ]! ]; @
  769. ;------------------------------6 i3 F4 L! S5 h4 t$ g/ v$ @$ c* m' P2 ?
  770. HEX_10; N1 K) L% Q' n+ z
  771. CMP #10
    & Q2 R2 A8 _8 u
  772. BCC HEX_10 N2 |* A) w& k8 r  r# m5 y
  773. SEC
    7 B$ N6 o* J- Y" c6 |! F+ H1 P: H0 J
  774. SBC #10
    2 Q* E+ [  O! ]
  775. INC DEC_T9 L, O; e8 _# t5 g" V9 u5 C# a4 D
  776. BNE HEX_10, M- W: Y; `! M3 v% a7 b
  777. ;------------------------------
    % x' N% V" Q& l/ D& [' H4 P
  778. HEX_1, x( Z1 h9 C# ?
  779. STA DEC_L- w" a- l$ S# Z& _& p) w9 ^8 r" C
  780. PLA
    : c/ L* h/ A- {! l* p
  781. TAX+ C, s# |6 \6 b, R
  782. PLA5 c; M& f2 Q2 P/ M# `1 G
  783. RTS
    % m; W- G: v& r6 ]8 m

  784. + t( m2 v& C- N2 V' f% Q
  785. ;==============================- F) f; j6 J$ {1 K6 `
  786. ;音乐曲目显示
    0 x) h; G5 M7 ?& b* N
  787. Music_Show
    & B3 q& H6 P& \3 J2 f& }
  788. LDA Music_Cur
    0 q5 h- [& q9 |
  789. CLC
    9 B8 r8 |/ A& E7 r+ X
  790. ADC #$01
    ' c; E  w+ [8 ]7 @/ j$ B
  791. JSR HEX_To_Dec4 I6 h/ K" O- d. p) ?' J& {
  792. LDX PPU_Cur3 p( e& f5 ^' F# Z4 \' R4 Y- n5 Z4 f
  793. LDA #$FD6 l3 c. ^5 e& ]( u1 B
  794. STA PPU_Addr,X& a' e- ^  X$ K, W
  795. INX
    , y' `3 t- p* e
  796. LDA #HIGH(Play_Index_Pos)' m3 q4 c9 O+ O: Q  F
  797. STA PPU_Addr,X
    * a5 a) W2 @, I$ b! q; ]
  798. INX
      ]. c: J# ?/ o' _. y' k6 ^6 e
  799. LDA #LOW(Play_Index_Pos)% s$ D. B4 P: N; F# b
  800. STA PPU_Addr,X, l9 J7 E7 [; O) _$ x
  801. INX! b. R  g" I4 i2 w, Y! d/ y4 X) s
  802. - ^$ M4 g6 K# x. x
  803. .IF Music_Song_Total > 997 ]9 v5 j" ?! k3 N/ z
  804. LDA DEC_H6 \0 Q. l) R7 Q1 z  l
  805. ORA #$30; ]% t0 _: M4 W) V& C7 t. m# c! R
  806. STA PPU_Addr,X
    7 d8 X& r6 I+ I* G/ k8 o
  807. INX/ t- k: ]: }: g. ?, O: X* s( X( ?
  808. .ENDIF. c8 d' s. ~) I: f& J2 r. g* s& r
  809. * p9 h& r/ z, a
  810. .IF Music_Song_Total > 9
    , e/ L) i8 M' x  Y
  811. LDA DEC_T
    ; d0 t5 r2 `8 H' \
  812. ORA #$308 s6 P# J6 v6 a5 M
  813. STA PPU_Addr,X  G# Z8 q5 w9 a, {
  814. INX
    ) d0 N; ]3 J4 J0 k! l* I
  815. .ENDIF9 X( Q9 n2 H! N% ~9 \: O# C4 o

  816. 3 T! L; M( y% S8 [
  817. LDA DEC_L
    ' y& Y& U9 m7 P- Q+ z0 E7 W0 k% s
  818. ORA #$303 I  B" I  D4 _/ X# {
  819. STA PPU_Addr,X  J2 f. m, v( i, t
  820. INX
    - M5 B- K; R" c) E; x- n

  821. - J8 Z+ B' A  l6 p* E/ n$ c
  822. LDA #'/'
    ! J2 y9 W; q* `( L" A" I
  823. STA PPU_Addr,X
    . h6 p+ G2 q% c: R3 g2 t7 S
  824. INX
    " X7 w; a# O, D; L4 `7 |/ L
  825. Music_Show_Total
    + U8 b+ f9 E3 I! I4 v8 W4 A' t* w
  826. LDA #Music_Song_Total: D& [* c2 i5 ]+ W$ c
  827. JSR HEX_To_Dec1 L1 w  l& k5 [4 k; w4 r/ l

  828. ) w. v% g" q* H& q$ u
  829. .IF Music_Song_Total > 99" b  I8 T( G3 w0 l; e* L9 V& ~" j
  830. LDA DEC_H& g5 v6 ?! r* a- K% B% |
  831. ORA #$303 w* n5 ~  R- Y0 D
  832. STA PPU_Addr,X: s, S6 ^# A8 E3 }; k0 n
  833. INX
    - W* h$ t" n; ~/ J0 s2 J
  834. .ENDIF6 u; d4 `+ p# b, o6 T3 `
  835. - I# u" e' }( w* r' }7 e/ Q
  836. .IF Music_Song_Total > 91 B- F& A3 }( r/ W' G# ^; ~
  837. LDA DEC_T" E* d) l6 O2 C& o3 d
  838. ORA #$30' ]/ O) Q: ]6 o/ w  v1 {7 H% b
  839. STA PPU_Addr,X
    0 \2 R9 {) T4 s, N2 H4 C
  840. INX7 M: R: m! q* V: ~) D  O9 D# ^9 d' T
  841. .ENDIF
    . z' f3 ?' B1 a

  842. - }; Z( z% @1 d8 T% v# @
  843. LDA DEC_L
    , \8 A1 A) k% V" L
  844. ORA #$30% W% e9 S5 A, g
  845. STA PPU_Addr,X/ `7 ^+ C3 C3 c/ P. b  ^$ _
  846. INX
    3 G' q9 K+ {$ K% v- f" k2 I' r  n( V- m

  847. ) Q0 T6 m+ v1 R/ k
  848. JSR PPU_End
    " W9 A1 b% d" @4 H
  849. Music_Show_End
    " S3 S& q$ i# }1 {' i1 b* O; [
  850. RTS5 J! V. O8 [; E. r* G& F' p) X0 N; E9 F9 d

  851. 2 i9 o9 R) J2 e2 T% d/ c9 B1 r: K! h# {' Z
  852. ;==============================
    8 e! k3 h& X- w- f
  853. Time_Show;播放时间显示$ \+ U  ?, Z4 R
  854. JSR PPU_Addr_Set6 A. |1 ]7 z1 a8 D
  855. LDA #HIGH(Play_Time_Pos)# a2 R; R% J. Q
  856. STA PPU_Addr,X
    ! O7 a1 ]) N; @) A. r' G
  857. INX# r. I9 S6 ]2 @6 y8 p; M
  858. LDA #LOW(Play_Time_Pos)
    . ~& Q8 F' c9 W% S9 L# ~
  859. STA PPU_Addr,X
    # X) O& i$ @1 W! G( h
  860. INX' G' m  V- R0 L1 E0 G0 z" @( z7 {* E9 b
  861. Time_Show_H
    + w  S4 H3 F, O3 a( C# ]
  862. LDA Time_H  w. ]4 R2 m3 m9 c
  863. JSR HEX_To_Dec, \2 Q8 B. y8 x% D6 q3 a
  864. JSR Time_Digit+ V. L( f1 w& \# P# x
  865. LDA #':'- j$ h' a4 y6 d9 v9 s  d( M9 r
  866. STA PPU_Addr,X1 ~- F5 ?5 q0 \
  867. INX  ?, T, m6 K* s
  868. Time_Show_M/ t8 w! t- I5 p* ]. s$ x
  869. LDA Time_M$ `, e& L! y! F1 i7 Q' z. c! @
  870. JSR HEX_To_Dec$ b' l3 O+ s. B7 ^+ x, c, P. r
  871. JSR Time_Digit. _# Z+ \, _% ?( z1 q3 O1 l
  872. LDA #':'
    6 G: w/ J# K4 \: q% h
  873. STA PPU_Addr,X
    9 f' Y5 X" ]9 L
  874. INX
    3 ?- M! j! @* s, r0 c
  875. Time_Show_S5 }3 C2 z5 |6 _
  876. LDA Time_S
    - U, t# ?8 E5 b" P
  877. JSR HEX_To_Dec# N' g) u/ Y/ P& [; y6 n
  878. JSR Time_Digit3 _: [9 U' B* ^: C: R: }
  879. JSR PPU_End
    + o8 N: O& o7 q% {/ p7 c
  880. Time_Show_End6 `& A: }! Z4 T3 i' b- e- c8 Y
  881. RTS
    . _7 A, M: X5 f; `% \

  882. ( q# ~! U9 ?% i7 |6 X! i
  883. Time_Digit4 Z; M. v7 u1 v1 m( o( S2 b* J4 K. E
  884. LDA DEC_T
    6 P& f# x* y& b  Q+ `: D  C, z
  885. ORA #$30' ^& N* B" B6 V& M
  886. STA PPU_Addr,X; T( I  m$ s% S  s2 q# M
  887. INX
    : x3 F. o. v  v5 s
  888. LDA DEC_L
    * q# J* T# j- s* U* t. u8 n
  889. ORA #$30
    + B+ ^' r. Q4 v4 {
  890. STA PPU_Addr,X
    5 Q/ _4 V. F( r! u
  891. INX# K- W* a. l( n( d- k
  892. RTS, g) x0 t- \) A
  893. $ [% N$ }! J& g' e( g% S; h
  894. ;==============================. x. p: [% W' @
  895. Time_Count;计时3 U5 d  |( f6 K& G) y* D
  896. LDA Music_State
    3 e9 @- i) L5 [, A# q
  897. ORA Time_Wait_Cnt
    9 \2 |; l% F1 y( T: f
  898. BNE Time_Count_End
    3 @1 M' l+ d$ T3 h2 _/ n
  899. INC Time_Cnt
    5 m. ^2 C1 A9 j/ s, O+ h
  900. LDA Time_Cnt$ x& A" ~8 l% r5 h  A  o- W- v
  901. CMP #60
    ) U0 G/ ^. _! e2 I& V
  902. BCC Time_Count_End( f* c" Y  y3 q
  903. LDA #00
    0 x' A  U% Y: @
  904. STA Time_Cnt
    " ^  a5 R) B5 @- A2 S& k
  905. INC Time_S$ s1 v% p* B+ c$ D: F

  906. : i" J7 B9 T& E" T7 o$ b9 ]
  907. Time_S_Cnt
    6 V4 j0 t; y8 l) L
  908. LDA Time_S
    ! r4 F% ]( I  F% `0 m
  909. CMP #60; H0 m# H- B& s7 Z8 f5 P6 ~, F
  910. BCC Time_Count_End0 t8 ]. ~. Y+ k1 \! q5 y
  911. LDA #00
    7 e# q8 P$ r9 d
  912. STA Time_S
    9 F$ o" l+ z( B( ]/ e
  913. INC Time_M# ~; |, f' E6 H! M$ J/ Z

  914. 5 }1 r, Q8 b1 q( K
  915. Time_M_Cnt
    " z9 }/ l8 ]! C) N) Y7 H+ b
  916. LDA Time_M4 z, z. Q  O- ~3 i( c
  917. CMP #60! n& U! h9 v9 N$ p4 S/ b0 Y. N/ y
  918. BCC Time_Count_End
    . b$ h" \7 h: Y8 K& G! R1 L
  919. LDA #00
    3 m3 g3 G; X5 \
  920. STA Time_M
    ! m8 _% l- X+ x, L4 ?9 B+ o
  921. INC Time_H( u  S% f* o* T  S$ y
  922. 4 S+ U) s' V7 {: H5 A9 l6 V
  923. Time_H_Cnt
    ( R% k' U/ n1 w
  924. LDA Time_H
    6 q. s4 D! Z7 r( b" b- Y( n8 u
  925. CMP #247 z' r+ j# b. a( M: R
  926. BCC Time_Count_End
    6 r. Z! i) r( \4 s- B* [
  927. LDA #00
    , G$ f4 \4 Y  _/ K
  928. STA Time_H( z/ U5 [  ~7 ~

  929. ) ~$ _) J. k. `$ G
  930. Time_Count_End
    4 N: {' S  K. }- C5 A3 Q4 \
  931. RTS
    ! f, ~9 y& _4 Y& n
  932. . p" y, W; J: O8 p" L- F- m; v
  933. ;==============================1 G8 F3 \4 }- K
  934. Time_ReSet;播放时间重置4 B( j5 O' M. }
  935. LDA #$00
    9 b9 Y' e# z* A9 L/ B
  936. STA Time_S; M/ }: ^& M8 r! \5 a
  937. STA Time_M
    ' d0 Z+ S' O9 Q$ _  q% N
  938. STA Time_H# q  w7 m  C8 p" X: d) v9 _
  939. STA Time_Cnt1 l! X7 n+ Q$ u9 K. \2 M1 V
  940. RTS
    5 ?& {& B4 n) ?9 V; o
  941. 2 c) u9 t1 O* g7 v
  942. ;==============================! B" s! c1 [4 S) o* n: M
  943. Music_Bar_ReSet;音乐条重置
    ! ~  j+ k9 Q6 Q& Y# m  D$ L2 ?
  944. LDA #$00
    # ^5 a) z  X6 z; |4 @9 |
  945. LDX #$00# e  x5 x4 q% U7 V' r1 c* q/ ?
  946. Music_Bar_ReSet_Set
    8 `0 z9 q% F# f( ^& J
  947. STA Sound_Bar,X
    7 V- z5 [; }" \. A, s2 @
  948. INX
    + X8 C& L( l  ?8 |8 Y/ G" h$ K
  949. CPX #$10
    8 L+ N! c0 Q3 S+ |1 m
  950. BCC Music_Bar_ReSet_Set
    : q+ u0 G0 S8 H2 R& N" W0 c
  951. RTS) z# X/ A; Y5 a& W' l+ _2 {
  952. # q* j1 ~4 T( c
  953. ;==============================
    , C, f6 N# ~5 [
  954. PPU_Data;PPU数据写入6 m: h, Q) \4 R/ v3 f
  955. STY Data_L
    ; s( h& C8 y. a" t  @
  956. STX Data_H) h" X: u3 t! O& l4 ^6 N% l6 J
  957. LDY #$FF
    4 g+ q- }5 C- ^; T) Z7 D
  958. LDX PPU_Cur5 }' M( _& R5 Y! A4 Z. Y0 P
  959. DEX
    * R; d3 \% [/ j$ G0 Y  b: h- K# u
  960. PPU_Data_Beg
    7 {; h+ }' g/ D4 m; m# P
  961. INX# z; ]5 P# S( R. i" V8 z
  962. INY
    ) x! [0 `9 _# O( p* k, `9 o  [
  963. LDA [Data_L],Y  g/ s# W0 X$ {( X6 X2 V% x0 ]2 k
  964. STA PPU_Addr,X
    % b5 c: F$ i8 \  n& D6 s7 i
  965. BNE PPU_Data_Beg
    ( v/ }$ |6 r8 e0 T, X- W
  966. STX PPU_Cur" r2 u, t  L: ?6 J
  967. PPU_Data_End
    ) g0 n6 j2 @9 _+ c  j
  968. RTS, H* y! R; i, W/ F% j7 {1 S2 {  o
  969. - Q$ {9 Y* q& c" G+ e3 n  |4 w. b* Y
  970. ;==============================) z& u+ P) r! n9 g: F' `
  971. Music_Stata_Show;播放状态显示
    2 Y  J5 S0 Y* N; a( r! Y/ s8 i
  972. LDA Music_State# O0 x" e$ f( C* g
  973. BEQ Music_Stata_Show_Play
    + b& E; {9 T! F/ f3 }( g- O* n5 `
  974. Music_Stata_Show_Stop
    0 E8 W" |( `2 k- k) F. I
  975. LDY #LOW(Music_State_Stop)
    5 `6 P! D, {8 _- _3 ?" t: s1 v
  976. LDX #HIGH(Music_State_Stop): r3 p$ Z4 \; [% Q& {
  977. JSR PPU_Data
    ; T. B! x+ n7 o- l/ ]
  978. RTS* ?& Z  D% M! k( Y$ h- k
  979. Music_Stata_Show_Play8 t4 X! _2 j# c( e% J- ?7 [, E
  980. LDY #LOW(Music_State_Play)- b7 R- n) d1 m# M5 |! \1 N2 h- h
  981. LDX #HIGH(Music_State_Play)' M* o! q5 {! s6 h; z; q
  982. JSR PPU_Data7 e4 U' I$ E; f0 R
  983. RTS
    ' U3 K0 f+ ?8 L( \% d* {" r4 j  n

  984. & Q# `, I* c1 w2 R' o2 r. b
  985. .IF SOUND_BAR_SHOW_ENABLE
    8 \& h4 T. J% c' S
  986. ;==============================- d7 k* f. g- g( |0 N( X7 m
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    - ^5 A; R+ X3 q7 G
  988. LDY #LOW(Sound_Bar_Text_Data)! {3 A4 T1 ]. |. o, I$ f, Y
  989. LDX #HIGH(Sound_Bar_Text_Data)
    ! _; K3 P) b5 d5 L( W
  990. JSR PPU_Data
    ( w4 C4 C- y. |0 w: b6 R1 E  y$ j$ `! b
  991. RTS
    * \) H$ l& i; c  S# A% z

  992. 7 V9 U% N; p3 H+ [+ N+ `: G0 H5 s
  993. .ENDIF
    $ @* t/ [7 f3 B

  994. 8 m+ A0 a/ N7 n2 E/ T/ C$ N
  995. ;==============================/ z1 Z( U  }5 i- p, j* |
  996. Set_NameTable_Attributes;设置命名表属性
    4 p$ t( G. q$ m; R8 j9 k: y7 W
  997. LDA PPU_STATUS8 s$ g( f6 a; v) @" Y5 l7 L
  998. LDA #$236 r- C- N/ Z4 y' Q3 S# A* S& t
  999. STA PPU_ADDRESS! B/ t+ c4 B4 K3 I) |) I
  1000. LDA #$C0
    9 t" F2 a% f5 c! H6 T
  1001. STA PPU_ADDRESS0 B' z3 z7 I! ?2 I; H* {( H
  1002. LDX #$002 i, }  S. w, B& m
  1003. Set_NameTable_Attributes_Write+ [0 A" i2 _$ h+ f7 o" y! H4 R8 o3 x
  1004. LDA Palette_Attributes,X
      Y* i1 y3 G6 D/ h, h- g5 l* W
  1005. STA PPU_DATA
    . h+ z- h, Z( r- U: U# }
  1006. INX; ^; X& u6 V# L0 }( V2 v/ H+ _
  1007. CPX #$40
    8 ^! n# A* B+ ?1 z( z. m5 u
  1008. BCC Set_NameTable_Attributes_Write: o$ m" F. X2 x" A; h9 c
  1009. RTS8 ?0 P5 l4 O1 i! C6 X1 k; _

  1010. 0 e  X6 u0 r, E; l) C& ]' U4 l
  1011. ;==============================
    % K+ {! T: g8 S1 E5 |
  1012. Set_Palette_Color;设置调色板数据1 x5 R0 f4 r; `3 ]
  1013. LDA PPU_STATUS
      \  l; K- C/ B! O
  1014. LDA #$3F' D* b& a! ?; v' X8 N
  1015. STA PPU_ADDRESS
    6 o# V8 i. G# A- j0 C4 v* O9 R! Y7 y
  1016. LDA #$003 X7 P4 T1 j8 L. [3 J" j
  1017. STA PPU_ADDRESS
    3 a2 ^" O% p% ~- s
  1018. LDX #$00% L6 d) K0 H- f$ N9 I  m$ V% `' r
  1019. Set_Palette_Color_Write. L- |( @$ h; n! o# Q) a% w! B3 @
  1020. LDA Palette_Data,X7 t" N3 O- m8 I  `+ @& Y
  1021. STA PPU_DATA
    $ a) w& @5 F- N" g4 z8 W
  1022. INX. A: X$ _; P# R0 ?- T7 O
  1023. CPX #$20
    & o6 B: S" M9 f5 z" G
  1024. BCC Set_Palette_Color_Write
      `) A8 ]+ o  d
  1025. RTS
    # i; b, w- W1 p& ?5 U2 v

  1026. , X  `- P. O( s
  1027. ;==============================6 u2 R1 o+ ?( T" k
  1028. Init_Palette_Addr;初始化调色板数据
    9 h# G! E9 f! V1 ~
  1029. LDX #$00, k8 S  @1 J; @* H5 f/ |
  1030. Init_Palette_Addr_Write
    " U8 T3 q6 ^& v+ W
  1031. LDA Palette_Data,X7 l& d5 n4 \2 W+ r/ [" Q: k
  1032. STA Palette_Addr,X& l3 _* x' t4 s  r
  1033. INX
    9 D7 q7 R& f, ]4 g
  1034. CPX #$20
    % F" p5 O+ n4 I5 f7 R6 i" i
  1035. BCC Init_Palette_Addr_Write
    ' _" B6 Z/ n3 V
  1036. RTS/ ^. \/ W0 A! e1 o; e
  1037. ) _; _0 ]& ?) j+ ^" x5 z8 |  W
  1038. ;==============================/ }) a$ Z, z8 H, o6 }2 s
  1039. Update_Palette_Color;更新调色板颜色
    : h* m. Q$ {: a# S; b2 O. d9 `
  1040. LDA Show_Track_Name/ q! C8 U5 E3 c' i# |
  1041. BNE Update_Palette_Color_End
    2 S! f! d1 G. j8 |7 _
  1042. LDA Palette_Update_Flag
    ) X; e6 A! k+ F& x  j* M7 O
  1043. BEQ Update_Palette_Color_End. l* [" \9 [. D$ t. x/ N2 M2 E
  1044. LDA #$3F' z' h. `1 x( ]4 _* o& _5 ~, I- U
  1045. STA PPU_ADDRESS7 V3 |) J0 D( ]; C( o5 y
  1046. LDA #$00
      P+ U( _6 l1 [* M3 D
  1047. STA PPU_ADDRESS' }+ b  ^- v4 L, F0 v$ S8 C0 I
  1048. LDX #$00* D7 _1 ~, m8 J) X' X. `& @
  1049. Update_Palette_Color_Write# f6 z9 T+ S" P: g
  1050. LDA Palette_Addr,X& M$ f4 U2 |9 \1 Z7 T7 P! f* M
  1051. STA PPU_DATA
    , _( P& X3 V2 t. O
  1052. INX
    $ [* h. Q7 I& n" G
  1053. CPX #$20: |9 C& d8 J/ o; ~
  1054. BCC Update_Palette_Color_Write5 M6 {# [! P6 F
  1055. LDA #$000 A4 r/ w; i+ H% y# @
  1056. STA Palette_Update_Flag
    / j) V2 f9 Q& G, L/ t
  1057. Update_Palette_Color_End
    . q1 j) m8 e5 c, l
  1058. RTS
    ( g5 t( f2 Q$ Q

  1059. ) n& @6 G1 i3 r. J6 ?1 E2 |
  1060. ;==============================
    9 S- A  Q. m& k; i
  1061. Update_Palette_Data;更新调色板数据
    4 r5 x- R! V- @$ Y
  1062. LDA Show_Track_Name
    & M. N8 P+ g* K  R& C
  1063. BNE Update_Palette_Data_End# R1 v8 T+ @9 g; ~& M* U9 t( |: f
  1064. LDA Music_State4 K% y+ E& m( G8 Q4 `
  1065. BNE Update_Palette_Data_End) H; u, V2 s+ b+ ^: ^8 J- w2 W4 R
  1066. Update_Palette_Data_Check3 M* ~) ^' b0 U# A3 u' V
  1067. LDA Palette_Wait_Cnt; @6 v3 n! m& b5 Z" ]3 `
  1068. BPL Update_Palette_Data_Check_Over
    5 q  u* W; P& ~, \7 x  A
  1069. LDA #Palette_Update_Interval; g$ c5 J; F7 z! B- N# Q
  1070. STA Palette_Wait_Cnt
    1 x. v; i7 Z8 v
  1071. Update_Palette_Data_Check_Over* L2 Y! x5 U. f0 }0 \6 F
  1072. DEC Palette_Wait_Cnt
    . [& D* {1 [& O" E0 P
  1073. BNE Update_Palette_Data_End
    ( t# h1 h) ]7 J4 P$ [, f9 \
  1074. INC Palette_Update_Flag" E+ S- l, t: `  R. y7 X
  1075. LDA #Palette_Update_Interval: J& H9 T' k" x% Y, q7 p+ p0 l
  1076. STA Palette_Wait_Cnt
    ) J% K0 ^$ ?' r: k4 V
  1077. LDA Palette_Update_Addr
    - z* S  b9 s/ P, Z* E. ^
  1078. CMP #Palette_Update_Max2 L4 g2 i/ i/ g" c/ ?0 V% c+ r
  1079. BNE Update_Palette_Data_Set
    ; S* T9 E4 H9 H
  1080. LDA #Palette_Update_Min - 1
    , o/ ?3 g) d; Z; r% @% p  o
  1081. STA Palette_Update_Addr
    " u8 u- N- ^( k2 D
  1082. Update_Palette_Data_Set; |" r  J! x6 A
  1083. INC Palette_Update_Addr% Q2 Z+ s# \, e8 n& ?6 m1 `/ F7 {
  1084. Update_Palette_Data_End
    ; b4 X3 V+ u/ @8 L: c  P" B; i
  1085. RTS
    2 _: g4 [6 b% [1 Z: o: f5 @' B

  1086. * B2 r% u+ o& r$ X
  1087. ;==============================
    5 @" `' U! r& U
  1088. Show_Music_Text;显示静态文本
    ; r- B8 s4 R" j/ e' n$ W
  1089. LDX #$00( J1 s, J8 n9 U
  1090. Show_Music_Text_Set
    % u! e& H$ A# [( }# B) y
  1091. LDA Static_Text_Data,X
    5 r9 V2 p  C2 ~+ y
  1092. STA Data_L' L, @: k* q2 q  D- G7 x
  1093. INX* D* r3 E; b& S& o4 ?; F
  1094. LDA Static_Text_Data,X
    0 C9 G- q8 n' u" l, X
  1095. STA Data_H2 k4 N; f, ]& E/ T5 P
  1096. INX
    / S5 p- J1 c+ {) G6 I! u' b: A
  1097. LDY #$00
    7 a6 E2 Q9 o; a3 @
  1098. LDA [Data_L],Y
    ; Q+ }& V  e0 l0 l  n$ ?
  1099. STA Data_Cnt
    " r0 G9 v7 c! W" p
  1100. DEX
    & B0 c  ^6 a: y: D6 X
  1101. DEX
    1 Q. X$ G! }' U/ e( a5 G8 I4 ?
  1102. LDA Static_Text_Pos,X" `  Y  {7 I) y* g
  1103. STA PPU_ADDRESS% O6 }" {/ \( U% _2 E% R
  1104. INX
    , [% B  v6 [$ z3 R% `
  1105. LDA #$20
    1 x# H- P1 i1 P2 ]
  1106. SEC
    ) j1 L: j& q" J3 S0 M
  1107. SBC Data_Cnt
    ! Y/ N0 {+ _' `2 v3 B
  1108. LSR A
    . z2 ]3 U" |+ Y
  1109. STA Data_Buf' r' _; ^# l5 ?8 H* k
  1110. LDA Static_Text_Pos,X8 S) {1 V' A* G5 k8 E
  1111. AND #$E0
    * t6 \: E5 _4 x5 w* D/ P
  1112. CLC4 N& s$ D7 X7 p  t" {1 l1 \) {
  1113. ADC Data_Buf1 r/ l9 l- M2 i" V' @! q; E8 [
  1114. STA PPU_ADDRESS, W& q6 u7 x- F* t- t6 ^2 `
  1115. INX: j; p* u9 o" u$ \: @  I
  1116. Show_Music_Text_Set_Write! k+ |1 L6 A3 H; \
  1117. INY$ L) u! i$ t8 O- r& X% q% C4 b
  1118. LDA [Data_L],Y
    7 [: J4 C1 T6 v  E! p  G3 k
  1119. STA PPU_DATA. K1 T& _! H" J7 k- s
  1120. DEC Data_Cnt: T- F, M5 \0 K' S' L5 B/ d
  1121. BNE Show_Music_Text_Set_Write
    9 G' G# b' W5 c8 j9 J
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos, t% U4 O; b& M/ H: ]
  1123. BCC Show_Music_Text_Set
    " q5 t& A6 Q/ u& Y; @. @
  1124. RTS; N6 e& b  b6 C! n( D
  1125. 5 W3 w' U- S7 {% I8 R' P% Z
  1126. ;==============================; s6 S# _- I" j1 J3 g4 M# K
  1127. .IF Track_Name_Pos;显示曲目信息" p; T: a4 ~8 @+ {1 w* d. F
  1128. Show_Track_Info6 Q0 r& A9 I; L, [
  1129. INC Show_Track_Name
    5 c3 u$ {- G5 a
  1130. Show_Track_Info_Clear) t+ ^6 F" ^6 _( {! {" u2 p0 T
  1131. LDX PPU_Cur! K6 n2 b/ f: y) \5 N8 V% Z& v9 s
  1132. LDA #Mode_Clear
    " H6 A: R; U1 U1 @5 K' I2 [" m: x
  1133. STA PPU_Addr,X& t/ z$ w0 ^+ A
  1134. INX7 I! X! _% _9 [

  1135. # T% F+ R! U) c. ~" {- f# _
  1136. LDA Music_Last( B* B: y% e# Q, L0 N
  1137. JSR Show_Get_Track_Name_Center_Pos  S0 U6 y1 p2 n' b3 f% b
  1138. Show_Track_Info_Write_Cur/ p/ _* G" T+ |2 ~6 H0 }3 }' `
  1139. LDA #Mode_CntLine& B- B$ n- A5 |+ }
  1140. STA PPU_Addr,X( E; s& m8 j( e" i! E
  1141. INX
    * p* c1 x2 |4 y  `# n
  1142. 2 {% u/ a; {" S
  1143. LDA Music_Cur
    1 `# w  X% b8 h  ^; k3 W7 K
  1144. JSR Show_Get_Track_Name_Center_Pos
    ; D3 ?# n+ D( f  ?$ h( t
  1145. & X2 k4 B; \& x  M" y% B) `% s
  1146. Show_Track_Info_Write_Cur_Data' @$ z  R) L7 t2 V2 ]$ [7 U
  1147. INY4 a# A! z' B% f! d: i  R
  1148. LDA [Data_L],Y( J* @. A$ g9 N2 E9 U& ^
  1149. STA PPU_Addr,X1 t8 s1 ?8 S/ `* S: }
  1150. INX. t5 `, |! \, M9 S9 C% y( R! E
  1151. DEC Data_Cnt
    ! W3 a& {6 Y5 m1 ^: e: `
  1152. BNE Show_Track_Info_Write_Cur_Data: M* c3 s# K) d
  1153. Show_Track_Info_End
    / H$ V% V4 @/ W: B1 [3 S/ r% F
  1154. STX PPU_Cur
    # x% N9 O# R! g4 C
  1155. RTS
    6 b+ \5 D2 o$ n& k, C" E, f
  1156. ! S( y) |6 }# }6 l* J
  1157. ;==============================
    ) P& H; M! t+ [! S8 P
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置. A0 E9 R$ B( b
  1159. ASL A+ b) {( C' F* }9 X9 _* S6 x
  1160. TAY4 ~; O3 L( p! q3 u$ j
  1161. LDA Track_Name_Addr,Y
    8 H  I$ p" k6 p# r1 O) a" J6 p
  1162. STA Data_L( U# v6 G. U! \
  1163. INY
    * {9 O$ _  m. x5 ~( y$ u
  1164. LDA Track_Name_Addr,Y
    $ a' G* F" f) Z$ O- d' ]7 p4 m4 |
  1165. STA Data_H
    8 A4 g+ Q. H8 }$ e$ D* i/ t
  1166. LDY #$00
    ( l1 O3 z  X$ z7 m1 n
  1167. LDA [Data_L],Y5 P: I4 Y3 n0 Q# o+ g2 Q9 a1 J( E
  1168. STA Data_Cnt( p1 L" H  g( H
  1169. LDA #$201 e! X5 l3 J- w" C2 k1 x" c$ |  z
  1170. SEC
    5 D; ?: a  U( L( g  \
  1171. SBC Data_Cnt
    . o3 ]: \! F# Z% u! T5 p: W4 v
  1172. LSR A
    " o) }) D: `: `: b
  1173. STA Data_Buf
    2 D; Q, Y$ t# @6 M0 D. m/ z
  1174. LDA #HIGH(Track_Name_Pos)
    5 ]% K1 g/ G' E, ]2 {: a' q+ n1 o, u9 }
  1175. STA PPU_Addr,X
    # h' d0 H: r) B" d
  1176. INX
    & h& I0 i1 c, A$ T
  1177. LDA #LOW(Track_Name_Pos)
    , @6 Q5 O; W: o, _3 j# p
  1178. AND #$E0& F. e' N/ g, S
  1179. CLC( ~* d* l$ w  E9 F' h7 p/ s3 L
  1180. ADC Data_Buf
    & E9 \3 n# `) B% g. n
  1181. STA PPU_Addr,X% A! b8 y/ U, U
  1182. INX0 M& `% z) ^5 ]5 j$ R
  1183. LDA Data_Cnt/ Q$ B; J( J! b9 R7 w8 i
  1184. STA PPU_Addr,X; A* e; u$ b5 I( F
  1185. INX
    $ D/ d) |* Y* I( W7 |) b6 J
  1186. Show_Get_Pos_Center_End
    ! \4 U2 A8 v7 a6 X5 P$ C! i
  1187. RTS! e# v. B9 n  t5 @. F
  1188. .ENDIF$ C+ q* r3 N" R9 w
  1189. 1 c. Z: S- ]4 X4 v- y2 u( e
  1190. ;------------------------------; j% x2 Q1 @% f' ^1 I
  1191. ;命名表数据
    % X* S8 _+ r2 G: A$ i( Q/ c$ N
  1192. Palette_Attributes
    # Q8 N: \, d% w: J
  1193. .IF SOUND_BAR_SHOW_ENABLE
    9 i& {* w' f" J. v+ {# c  O7 E8 l
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ( `+ T1 v) q8 \7 c, c
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    $ n3 m  |* V5 z+ L
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55( b/ O6 n$ v3 b# M- ~0 f8 b
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    1 [4 P) p& X9 N" O) g- I2 b
  1198. .ELSE
    / p# C3 F* |( e9 \9 Z
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$008 v% E5 C: B& B# h6 O
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    . i  r% t+ w# o' ~7 Y
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    6 o) a6 q4 b! o, @$ W/ W& O
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ) |: G8 ^% J6 r. _4 Q; A
  1203. .ENDIF; u9 ^0 N; o7 v; V3 @7 K

  1204. " R; ]% b6 y  ]8 p0 R
  1205. ;------------------------------- i$ k9 y  \4 W) K% n
  1206. ;调色板数据8 J6 h+ }( H  W/ J2 V1 s
  1207. Palette_Data" G% [# u) m6 E6 b6 C) X# A7 W
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F/ w8 L; {, L. N# k
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F: _  n4 |9 Z4 A
  1210. 5 h6 J' ~! j) |
  1211. ;------------------------------
    7 s( @' z7 z. u6 u! I( O8 X
  1212. Static_Text_Data. u% J9 c9 R( |
  1213. .WORD Static_Text_Title_Data
    / L% e6 k, h' P
  1214. .WORD Static_Text_Author_Data
    5 \+ p8 C. p8 m  X
  1215. .WORD Static_Text_Date_Data
    ) @8 C* s2 @  R
  1216. Static_Text_Data_End( z- W7 _7 t7 x; _2 d
  1217. / `% a* C3 @! J6 Z! P
  1218. ;------------------------------; b  i6 o- B8 T0 z
  1219. Static_Text_Pos
    / X. _. I7 m2 U/ f% u
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)  j$ v% w9 u% {) o7 i, [
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos); @* N. ?4 M6 |  U' i- a3 ?
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    & h2 ~( T3 ^7 _' a1 U
  1223. Static_Text_Pos_End
    " H# w6 m/ u" I
  1224. " D+ m+ A# l) x; \
  1225. ;------------------------------9 x& ], F. h, [, X9 e3 Y
  1226. Music_State_Stop
    6 N7 J. S! Y+ o/ l2 b; X9 f
  1227. .IF SOUND_BAR_SHOW_ENABLE, A6 @6 T6 H4 w* ^
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    % E" l# ?1 l' r6 B% `: Z- J, r
  1229. ELSE
    3 G/ t! Z% |6 G* O. h' `
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    ! B: _8 b+ r6 j1 t% S1 J: _
  1231. .ENDIF
    1 M& _4 C- L  `+ w0 G8 a# S
  1232. Music_State_Play
    , l5 v' r* V" {7 X+ N
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    % l% {& ?% @" \% q7 z, s1 @
  1234. + w* L+ m* j- _) s, O9 @: U9 R
  1235. ;------------------------------0 c' X0 f  O0 _0 k# k
  1236. Sound_Bar_Text_Data;声音类型文本
    " R" O' H' i* `6 C; o
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)& t8 K2 X5 E+ C, R" L% o5 ~
  1238. .DB "SQ1-",$FF( x& ?8 V) m3 b
  1239. .DB $FE,"SQ2-",$FF
    ' j  P; h- r8 }3 i* X0 a, {
  1240. .DB $FE,"TRI-",$FF' n0 e6 O0 Q+ y: F# W
  1241. .DB $FE,"NOI-",$FF* r1 i5 a" H* V" ^  F, `2 w
  1242. .DB $FE,"DMC-",$FF,$00- E# w8 t: ~: y6 T( L
  1243. 6 i: G. T. O* @
  1244. .IF Track_Name_Pos
      r' T! P+ a$ T* L) \7 n4 |$ c& ~& U+ t
  1245. ;------------------------------
    # i1 f8 t8 A& o" }
  1246. Track_Name_Addr;曲目名地址索引
    ; u: R5 g: s7 v4 J, ?5 B$ D9 i( p
  1247. .WORD Trackr_014 F) m: a5 ]$ J# H6 u# c1 O
  1248. .WORD Trackr_02( L: q6 `" C6 l
  1249. .WORD Trackr_035 i9 E# g* V8 S: \5 e
  1250. .WORD Trackr_04# d% a9 n, t1 o
  1251. .WORD Trackr_052 a2 [0 w3 W! l7 R- o0 U5 [* e
  1252. .WORD Trackr_06% Q6 R& C  v+ Z. ~# r
  1253. .WORD Trackr_07
    7 ^) a$ E  q. a$ Z* h4 _
  1254. .WORD Trackr_08
    & W$ L7 E9 v+ `0 v! }
  1255. .WORD Trackr_09! X; \& ~$ z9 W0 g
  1256. .WORD Trackr_10' j! P- V- L( A; ^3 R! s
  1257. .WORD Trackr_112 _$ B2 d; C: r2 o1 W2 f
  1258. .WORD Trackr_12
    ; s. d: e0 C5 d" j' s, n8 t- n# q
  1259. .WORD Trackr_13) ^6 j4 h& |( X: f6 K5 _6 N
  1260. .WORD Trackr_147 M4 p( g$ h; r) P& H& P
  1261. .WORD Trackr_15
    6 [& q; k3 ^, K) X
  1262. .WORD Trackr_16( r6 U4 ~2 h- j  {. g6 j
  1263. .WORD Trackr_178 Z) |( N( l$ G0 [/ i/ K
  1264. .WORD Trackr_18" [5 Q; w& V- y, X
  1265. .WORD Trackr_19
    6 [( C3 C7 a) ^, O9 \
  1266. .WORD Trackr_20  m& L$ a1 ^% n; `! |/ u8 E1 _
  1267. .WORD Trackr_21( ~2 w6 o: k# y' n
  1268. .WORD Trackr_22  @, o. Q5 d6 h# V' M
  1269. .WORD Trackr_23
    : P# V. g5 u: D8 ]% `
  1270. .WORD Trackr_24
    5 J" ~; ?+ G  V1 Q
  1271. .WORD Trackr_25
    3 w; L" }# y- ?1 e; w, H
  1272. .WORD Trackr_264 F( Q% y4 P+ M2 W$ b6 z
  1273. .WORD Trackr_27
    - W$ M$ v2 n. T. r9 ~
  1274. .WORD Trackr_28: X& p7 v: T4 q& y; [" u
  1275. .WORD Trackr_29
    5 O  d* M1 L' I9 U: H" Z
  1276. .WORD Trackr_30
    # X6 K; }$ {5 @; |: y0 c$ T6 \5 x* `
  1277. .WORD Trackr_31
    & j7 B) |' }2 I$ `" y9 ?0 O
  1278. .WORD Trackr_32: C/ I0 C2 m+ c
  1279. .WORD Trackr_33- h" n  E9 t. \9 o; A5 Q
  1280. .WORD Trackr_341 A7 }3 S6 C+ H, [
  1281. .WORD Trackr_35
    . x# t, j- r7 i1 J* c1 {
  1282. .WORD Trackr_36
    , y) _2 z( l1 i0 L  Q
  1283. .WORD Trackr_375 a: V, \; v5 Y7 Q, Y
  1284. .WORD Trackr_38
    8 A5 s9 \2 K" `" Q8 M
  1285. .WORD Trackr_39
    / F4 i3 _9 u; U* s# }

  1286. ( K2 [- I5 x, v, [
  1287. ;------------------------------5 G* W2 h2 @9 I8 ~  B: j, U
  1288. Trackr_Name_Data9 Z3 h2 j( D, ]
  1289. Trackr_01 .DB $05,"BGM 1"4 _# a6 {; M- x# v: I6 i
  1290. Trackr_02 .DB $05,"BGM 2"
    + x1 X4 i; v7 z( N: d+ {
  1291. Trackr_03 .DB $05,"BGM 3"8 B7 w7 C! \6 {& Y9 K2 h# O
  1292. Trackr_04 .DB $05,"BGM 4") n& G! D5 m: n+ n* m+ k+ w
  1293. Trackr_05 .DB $05,"BGM 5"% y$ p" l! d4 a. f' R
  1294. Trackr_06 .DB $05,"BGM 6"/ \2 g# X6 V7 b2 }
  1295. Trackr_07 .DB $05,"BGM 7"5 ~$ h6 w  M. L0 `) x/ V7 S
  1296. Trackr_08 .DB $05,"GREAT"7 ]6 j" f8 F0 z- x
  1297. Trackr_09 .DB $08,"BOSS BOM"  l: s- I4 }% v* d% `" f
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    6 R" G6 ?: Y8 H& I; e9 A* H( p
  1299. Trackr_11 .DB $07,"P CLEAR"0 A( j# B8 f3 q1 b6 B, [
  1300. Trackr_12 .DB $07,"A CLEAR"" H1 s5 R* u% k9 y
  1301. Trackr_13 .DB $04,"OVER", D9 N7 L- @, g% y1 a, B
  1302. Trackr_14 .DB $06,"ENDING"5 q2 p9 `; K" p# i  Y9 m  A
  1303. Trackr_15 .DB $04,"SUTA"
    1 N2 D) _' I5 g( Q3 A$ o
  1304. Trackr_16 .DB $07,"THUNDER", H5 {) T4 C6 Y3 t
  1305. Trackr_17 .DB $04,"SHOT"4 P/ q$ q% @& a7 d0 d1 e/ w4 @
  1306. Trackr_18 .DB $05,"LASER"' h. o+ F3 c0 x! h  b6 X: f& ~% ^
  1307. Trackr_19 .DB $06,"SPREAD"
    8 \: [8 _9 T% c( S2 Q
  1308. Trackr_20 .DB $04,"FIRE"3 ^* @' [1 `$ s7 _% Q  _
  1309. Trackr_21 .DB $06,"B SHOT"
    ) ?& A: f1 o( t6 A; `
  1310. Trackr_22 .DB $08,"T DAMEGE"
    1 e8 Z. Y7 n+ Y! k9 V+ a
  1311. Trackr_23 .DB $07,"HARETSU"
    ' l# F. }: |4 m$ ]+ G7 I% ]: J
  1312. Trackr_24 .DB $05,"T OUT"+ R6 [) k( D4 ~6 D. y( |  K/ N2 l% K
  1313. Trackr_25 .DB $05,"Z OUT"; f( |; F! f+ u) o5 b4 s) t! z
  1314. Trackr_26 .DB $05,"A OUT"
    7 B8 _3 l* C4 V5 ^  j
  1315. Trackr_27 .DB $04,"ROLL"
    " Z/ [( g2 Q5 ^/ m
  1316. Trackr_28 .DB $06,"APPEAR"
    % C$ \$ [! e& _) v8 A" B& c: q
  1317. Trackr_29 .DB $05,"POWER"
    7 a! B  Y6 f9 W! V: G+ @
  1318. Trackr_30 .DB $07,"BOKK BK"
      o% R$ G$ O- l; {3 p
  1319. Trackr_31 .DB $08,"BAKUHA 1"' L/ U- u/ N# K6 J3 [( e
  1320. Trackr_32 .DB $08,"BAKUHA 2", f" V+ r0 n9 Q& K1 W& @8 \
  1321. Trackr_33 .DB $05,"ARUKU"
    & x" q$ E) B+ }
  1322. Trackr_34 .DB $06,"JIWARE"
    ( q' Z- a: G& A
  1323. Trackr_35 .DB $05,"SILEN"
    + T& U/ ]' Z$ ]4 L* ?
  1324. Trackr_36 .DB $05,"P 1UP"
    * }* e: E4 b  @
  1325. Trackr_37 .DB $05,"P OUT"
      U; Y. l- w5 K0 V: K; ^
  1326. Trackr_38 .DB $05,"B OUT"2 [1 l; t2 t% T
  1327. Trackr_39 .DB $05,"PAUSE"& T( c( ~; c3 @; _7 E8 I& }# d
  1328. 2 M& x- u5 \: ~. ~* V; V8 i
  1329. .ENDIF
    2 B* h8 G5 M+ @! ?2 |2 T8 `2 a
  1330. , Q; R& J& Z3 X  B* @1 m" ~0 o
  1331. ;------------------------------0 K/ e. H6 c3 c8 Z
  1332. Static_Text_Title_Data;静态文本数据' e; T/ J$ g6 k6 c6 p* M
  1333. .DB 124 k" r; C$ c8 k5 t4 K+ z! z
  1334. .DB "SUPER CONTRA"9 r/ U1 d6 W  S5 L4 N4 Y3 j
  1335. Static_Text_Author_Data
    # g7 ]) N, j' q2 Q/ Y1 K8 Q
  1336. .DB 235 E8 K6 H2 p  G2 R
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    + A8 `* m" j% d( @% M. `5 y) _
  1338. Static_Text_Date_Data
    3 W) O/ O6 `. A! _9 f+ L
  1339. .DB 10' j! W  x- V% E# C% I0 _5 d" l
  1340. .DB "2023.07.11"
      Q2 T$ N; T* c' k& M4 {

  1341. 5 r/ N9 @9 A5 o+ N% [4 g
  1342. .BANK RESET_BANK & BANK_DATA_MASK
      v) W  S! `5 l: c
  1343. .ORG RESET_ADDR( }/ I9 k) T3 ~" z9 G
  1344. 9 H4 @. u  q0 ]+ M( x  r

  1345. . W$ r' O' b9 W# g& |7 }1 r. [
  1346. ;==================================================( x" h9 n! _  X; @* `  j7 _
  1347. ;切到主程序bank
    ( x) n5 d1 f9 ^+ [8 _: d0 |
  1348. SwitchMainBank
    ! a! P: Z( D) Y6 t2 b1 {9 L* z! c9 U
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK, K0 Y2 \5 D  w) i
  1350. JSR SwitchBank8000) b+ e7 h1 J0 D* c3 `4 V# n' ]6 @
  1351. RTS. L" w! M# g+ [% ~' P, x# c

  1352. 9 b7 z; b( c  c7 ]0 H) \6 L" _
  1353. ;==================================================! G, F1 P0 C, D, a- F, r. X6 \
  1354. SwitchBank8000;切换bank到8000-9FFF
    8 q) L/ z7 G' }$ R' {* I) e3 w/ R* h6 \
  1355. PHA
      E/ D# v% d0 P9 N9 _) w' I* u
  1356. LDA #$06
    8 v  [: V- y; K2 O! i' c
  1357. STA MMC3_BANK_CTRL; Q: t2 L- t* c3 |2 c  W8 K
  1358. PLA- p  N* x! [6 B; {
  1359. STA MMC3_BANK_DATA
    3 {2 D+ Q1 b8 J( D; v9 v
  1360. RTS
    ' U" j3 Y0 L: m! i( {- R8 p
  1361. : Y) e' \( N7 Q% m6 F! S8 C8 ]1 G$ p$ Z
  1362. ;==================================================
    0 Z, [0 y4 r; X- l; m) H8 L
  1363. SwitchBankA000;切换bank到A000-BFFF
    8 Y, D4 }% P* i5 U# `
  1364. PHA
    / i7 u6 \3 I9 V. i9 S9 b2 |
  1365. LDA #$07
    $ [) X2 L0 {! j: y! \# T6 m( Y
  1366. STA MMC3_BANK_CTRL! H7 z$ s" R; A" \; W- E
  1367. PLA3 ?0 |8 D' \/ x6 D" g
  1368. STA MMC3_BANK_DATA, Q8 W+ W% i3 V7 T8 B& z
  1369. RTS
    , ]. F3 ]1 \& b( G& [' ]

  1370. & U7 |- H, C4 j1 T
  1371. ;==================================================4 O7 I/ S% D0 c: `0 v+ j8 g) ?
  1372. Sund_Bank_Init;音乐bamk初始化% |" y! m* h/ T7 k. V/ I/ P
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    / p1 q  `( |  `, A- w  t1 X
  1374. STA Music_Bank_8000! F2 `* Q8 P; D+ k% w. J
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    4 Z$ l) ~7 o% h( ^1 P
  1376. STA Music_Bank_A000
    . ~" U" A  z3 [' k) B# Q, h- u5 Z) {
  1377. RTS
    1 O1 F6 M3 x. e" Z* _# f6 H; c

  1378. * }1 F6 n. }' B
  1379. ;==================================================5 ~8 F+ C/ B2 b+ O/ e# T: {
  1380. Sund_Bank_Set;切换音乐bank
    ( p# D4 a9 H9 _7 Y
  1381. LDA Music_Bank_8000
    6 L0 F; f4 E+ S' E& m) P9 _1 K
  1382. JSR SwitchBank8000/ W" M" c/ |7 ~( O% m
  1383. LDA Music_Bank_A0004 v- y9 u9 j1 E
  1384. JSR SwitchBankA000. j9 Q- s6 P! I% i+ A3 w
  1385. RTS# a( y, u, B4 X; t. x/ Z
  1386. & Y- L1 W3 R% b* u2 w
  1387. ;==================================================
    ) c. P! P5 N4 J$ U
  1388. Sound_Init;音乐初始化
    ( T! Z6 Y5 A3 |7 U5 @$ o
  1389. PHA' c  l6 J: K  s7 \" Q  U) n
  1390. JSR Sund_Bank_Set" u4 e( b4 K3 X: e, Q
  1391. PLA
    6 L0 M8 @1 J& ]5 A5 k
  1392. JSR Music_Init_Addr" Y2 l7 m& e* n( H2 a: B
  1393. JSR SwitchMainBank. V( S/ {/ q8 l; k5 V" q, a4 D5 ~9 O
  1394. " O, U* |" G) j0 A7 U
  1395. JSR Music_Bar_ReSet. }5 ]: m7 @! l
  1396. JSR Time_ReSet' u0 q7 i( F/ D" Q# G
  1397. LDA #$00: ]% U7 i4 l4 a4 _6 }" r
  1398. STA Music_State6 O+ ]% |, s4 S, G( @% u' ?
  1399. JSR Music_Stata_Show
    & [' ]; V1 B/ A- T. T  H- A# a
  1400. .IF Track_Name_Pos$ b; I1 S3 ~( c! [( ^) G$ A' M4 i
  1401. JSR Show_Track_Info3 J6 f7 B" X: M1 f' x9 @. R$ ^
  1402. .ENDIF) {3 C# s: T, o

  1403. 4 W4 u8 `! _4 D% U9 u8 N/ P. }
  1404. RTS
    3 O7 _( c# L8 R, L+ g1 W

  1405. $ v6 q+ r7 b) E: {/ S
  1406. ;==================================================/ `* V! N: g8 h5 G8 g* q2 t
  1407. Sound_Play;音乐播放
    . X/ T  w5 E7 w4 ?5 N+ U1 t
  1408. PHA
      C( n$ V0 [1 G. v: R
  1409. JSR Sund_Bank_Set
    + f, z$ }" w/ d; c) X9 s8 _6 r9 y
  1410. PLA. i7 O4 i/ _" V6 b* @  e
  1411. LDA Music_State
    + s+ L/ }* L5 l! ^5 C6 G
  1412. BNE Sound_Play_End3 H7 b6 k& f3 @. k7 P' T+ d; e
  1413. JSR Music_Play_Addr0 `- E" ~& W$ e1 z5 L6 L( A; o
  1414. Sound_Play_End
    ' H! Y( ~% F7 d- @7 C6 U
  1415. JSR SwitchMainBank) {' R6 a9 B1 y" N
  1416. RTS
    ' }2 X0 `" t2 D, C

  1417. 3 \; l+ e4 K% ?7 `& z5 \
  1418. ;==================================================
    ! a7 Z1 n! H; t2 a
  1419. .IF Music_Reset_Addr
    ( R- E+ Q% \  k# C, _2 [3 n% D
  1420. Sound_Reset;音乐重设(如果有的话): h6 z( n# A/ `$ d# G1 ?# N/ A* p
  1421. JSR Sund_Bank_Set  V9 [2 D3 S* R$ i
  1422. JSR Music_Reset_Addr6 d  n4 ~5 v* J: U0 @$ v
  1423. JSR SwitchMainBank
    ! M/ ^: R7 R. o% f( d8 d0 a  h
  1424. RTS
    1 V) b4 g$ ~$ l
  1425. .ENDIF6 d; Z& k/ j6 t, w8 w) X4 @

  1426. ( K. P+ `) ?- C1 g' o0 h
  1427. ;==================================================
    : v3 u1 D- y# v4 n
  1428. MainLoop;死循环
    + C) U1 ]; F0 X* p6 O7 o
  1429. JMP MainLoop
    + l* }' O; \6 Z
  1430. + M3 q( M1 e! f
  1431. ;==================================================
    , p% i% D2 h$ P; ~: p% W
  1432. NmiProgram;Nmi中断处理' l0 I( K% W. c2 y
  1433. PHA- l0 ?) i3 e! r' c
  1434. TXA
    " m. X8 n$ f0 O  ^, ~& e; \
  1435. PHA# \  x! X# H$ X
  1436. TYA& ~8 g9 V# q2 `6 T
  1437. PHA
    ! D  ?4 r3 R( {/ X& u

  1438. ' A% |+ q! m+ t% w. \+ `9 Z
  1439. LDA PPU_STATUS
    : L$ W9 b% }8 Z0 K' w8 d
  1440. LDA #$00
    * N: X1 N$ ~% T, Q  C) ^
  1441. STA PPU_CTRL8 V; s7 M% }* L4 X+ i) V2 X9 i! r- I

  1442. + R5 z5 M. H6 l
  1443. ;切换主程序bank9 r5 i7 P# h6 j( f* O' R
  1444. JSR SwitchMainBank
    / `) r0 M# @, y+ J
  1445. & q/ Q( I, q/ |# ?  b
  1446. ;NMI处理+ a  A0 M( h, \" ?, G9 a
  1447. JSR NmiProgramProcess7 f4 g+ q8 @) S2 Z8 X
  1448. + a7 k3 g$ \* X7 c! j* A$ e
  1449. Nmi_Proc_End
    , e% t. J. M, Z4 g
  1450. PLA* a  X1 O2 O$ V4 }$ @3 ^! W
  1451. TAY) {. ]" O" ]0 _5 d  i, O
  1452. PLA
    + b! k% {- w' j6 l( k
  1453. TAX- m" A; W4 d' _$ e: `
  1454. PLA
    4 M1 L. ?  s' n$ G9 o0 n. {7 O

  1455. + t/ {8 Y) Y# m6 e- J
  1456. RTI
    9 h. P: k( q0 Z8 [: k4 P
  1457. ) R! g( Y6 H; D( F! q8 A8 a
  1458. ;==================================================
    ' a* U8 K% o+ G: q# v1 y9 J! V0 d% A
  1459. ResetProgram;重置中断处理* x( X1 N* d0 v3 @1 ?
  1460. SEI
    # t# e& f8 F3 R
  1461. CLD2 R4 g8 r" b2 s6 M# E
  1462. LDA #$00
    ) n6 Z' b' D( a
  1463. STA PPU_CTRL/ C$ C. \8 w% @+ T/ W0 i' j  P
  1464. STA PPU_MASK0 B4 c4 t+ F6 V9 Q3 x; d4 k
  1465. & a( h; U1 I5 j! a0 Q
  1466. JSR SwitchMainBank# T0 P( c* v6 T) _* U: V
  1467. JMP ProgramBegin- X5 u, d- |- u$ r& O

  1468.   z3 A* d  m) l' K& a/ b
  1469. ;==================================================- e6 D8 Z1 @9 ]: E0 ]9 [
  1470. IrqProgram;Irq中断处理* q2 L' M5 I2 C! [' R9 W2 u7 c) f
  1471. RTI5 l3 V2 L$ V+ B; `  L
  1472. ( J6 c2 _$ k! x  U
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ; V- T6 V5 V  }2 w; {, @
  1474. .ORG $FF80
    8 J4 S$ @( I# Z5 c1 U; J
  1475. STA $4000,X' f& o/ u& y+ Y' d
  1476. STA Sound_Bar + $00,X
    : y0 P: X( s. {( L9 F% V
  1477. RTS
    : U5 b  p+ z- x# o8 U: L

  1478. * G8 f0 h" j# L+ v- q9 Z
  1479. .ORG $FF88
    + p( v* Z7 x/ E
  1480. STA $4000,Y
    3 i% w$ P" s7 k! M" M" M! S- f
  1481. STA Sound_Bar + $00,Y# f8 U7 z' f' J: N: D
  1482. RTS( M. R: S" P7 [9 |

  1483. ) I$ U& \: c' V  y
  1484. .ORG $FF909 e) E2 R( E- i0 }  U( G
  1485. STA $4004,X8 b! s5 W- B9 o% d! }. q" n
  1486. STA Sound_Bar + $04,X
    9 X, S+ m0 l1 Y# U/ ]& j" d; r
  1487. RTS3 _3 A0 z# }; b) h3 U% c: n2 }% n

  1488. 6 n9 Q0 g9 c5 q% J
  1489. .ORG $FF98
    6 R6 a7 y4 q+ u  P, r
  1490. STA $4004,Y
    + j3 M" v# Z0 H/ j- `1 C* n1 Q
  1491. STA Sound_Bar + $04,Y
    & O6 f% Y5 H, B6 g
  1492. RTS" {2 T4 }; s- W. s
  1493. : A0 L( ~  b8 K
  1494. .ORG $FFA0
    % f$ E! t5 e: C+ U( c
  1495. STA $4008,X
    % d/ x/ b$ A# r& @$ |
  1496. STA Sound_Bar + $08,X, V- A+ W- b7 w( `, j4 V
  1497. RTS8 O, C1 k; ]9 D: ?8 d2 W" Y5 I
  1498. 1 v$ d  M! j9 }5 P. |
  1499. .ORG $FFA8- l9 x9 q# D1 c9 ?! [4 l
  1500. STA $4008,Y
    ; m6 @8 r( f/ c7 ~0 O" r0 X- V
  1501. STA Sound_Bar + $08,Y
    ( c' g. G# |, L1 R5 n3 a
  1502. RTS) q" v- J& K5 C, S3 B" \

  1503. " k& _- A% ?9 y0 Y1 M
  1504. .ORG $FFB0  K4 d* v8 k. Q" E7 L) v% M  p
  1505. STA $400C,X' R# K9 X( j: R3 l7 @7 E" F
  1506. STA Sound_Bar + $0C,X
    & a' c! m- A# I+ N
  1507. RTS
    ! D$ D- b0 d% Y. x
  1508. 1 L9 ?, Z8 C. L( ^
  1509. .ORG $FFB8
    ( l- r% Z0 @9 v& U  c
  1510. STA $400C,Y
    4 z5 Q- Z8 T7 R
  1511. STA Sound_Bar + $0C,Y" ^' N. r) T+ `4 ~4 [! w8 B
  1512. RTS
    # P+ R; b# }) N2 m+ |; F7 H( a/ e( ]2 r7 B

  1513. & R3 H, ^! `+ K6 c
  1514. .ORG $FFC0
    9 f8 T% e' ^7 ]% ]
  1515. STA $40007 Y6 j2 ~0 E$ Y1 g. n
  1516. STA Sound_Bar + $008 u& e% k0 i' K2 t1 B2 x3 J
  1517. RTS
    * F% D1 m8 z. B! d5 v

  1518. 5 m6 M* u1 z; j% Y
  1519. .ORG $FFC8
    / P4 o9 Z7 X3 B# m% y; z
  1520. STA $4004
    4 V* p+ Y# s5 [2 `
  1521. STA Sound_Bar + $04
    : a+ [  u# x6 G) E
  1522. RTS' G  o/ g$ n( n, @' `( N4 F

  1523. ( \8 G+ S4 s+ |5 {5 C, I
  1524. .ORG $FFD0
    7 Y2 o0 p7 _6 k, j3 }' B; o) L3 H
  1525. STA $4008! b8 c8 u+ h( C& O* U7 P" V
  1526. STA Sound_Bar + $08) W8 s! r1 J# k  v  m) o
  1527. RTS: {) g+ K( p9 H$ F! ?

  1528. * E3 _# d& T, h' h7 ?
  1529. .ORG $FFD8
    ( J/ ]* w1 P( w3 d: ^
  1530. STA $400C$ D! n% y! }8 Y( g
  1531. STA Sound_Bar + $0C6 k5 N4 r: R7 t7 y
  1532. RTS1 x/ ~. x5 {$ V0 ~  ~& }2 Y

  1533. $ k, F0 a, w' w: h0 w
  1534. .ENDIF, p! o! R# v' l* W

  1535. ; J: p4 D3 `( |% F
  1536. .ORG $FFFA
    & t! H8 z: Y" |' s. M/ q
  1537. .WORD NmiProgram
    7 V4 z' O7 f, u" n% m
  1538. .WORD ResetProgram9 N+ `! I2 y; c  Z0 v+ b' a
  1539. .WORD IrqProgram
复制代码
# K2 M( B5 ?9 D8 {
* V/ L! M, c& S; Z  H
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1159 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3145 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 16:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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