EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
% y+ j( \" [$ \: v9 R2 |) M, F( G" m( s% `& K: ?
1.魂斗罗
) ?" T+ N4 e! Y/ z) C" |1 ?2.超级魂斗罗, f* @# ]# j' v* E* F( _! x  `4 V0 V
3.赤影战士# c' E9 R* _4 f9 ]
4.忍者龙剑传2
# K! H& u! A4 A' l3 T2 m+ b9 }: U8 R% n

9 l9 e8 B0 W6 A8 G* `$ b- F
- C3 F( W! Z1 E/ J, K9 p8 b7 z" I$ q+ ~# o, s  x+ ^4 I
源码:6 n$ s& n1 t& W' d3 E% [* X& D3 Y
  1. ;[FC音乐][播放器模板]
    ) U* A& d2 M6 c) j
  2. ;FlameCyclone 20230710
    ) J$ I$ f$ Y4 x) x; A6 ^' E! U
  3. 2 ]: l7 q% G2 a) `* e) z) O" J
  4. ;文件头
    . K, G, d/ g7 {7 O
  5. ;======================================================================
    7 |1 x7 i( U2 @  x
  6. .INESPRG 4                                              ;16KB PRG 数量0 r. t4 i* `, Z, G/ @4 {
  7. .INESCHR 0                                               ;8KB CHR 数量5 K0 {7 g5 ~3 f3 p+ S8 P  B
  8. .INESMAP 4                                                   ;mapper 4
    ; l; E1 m- t9 I; j
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    4 q+ R: U2 L; P0 H4 d4 t

  10. 5 d$ k7 t# m0 o3 D! W
  11. ;==================================================# |. m% `1 s; ^
  12. SOUND_BAR_SHOW_ENABLE       = 1
    / [8 R: r* s5 W
  13. ;==================================================2 k( w. i; ?/ y4 V+ f
  14. BANK_DATA_MASK              = $07
    8 Y: e$ ?+ n& l& \' u+ t2 {" x% j
  15. ;==================================================
    3 o1 c% s4 M( V& `4 q; |8 _! C
  16. SOUND_DATA_BANK_0           = $001 L/ y7 u$ T4 n  R" E+ a$ i
  17. SOUND_DATA_BANK_1           = $01( [7 I* [% F9 i% i) |+ L9 Y* ]
  18. SOUND_DATA_BANK_2           = $023 K9 F& Q( f0 _* O' Z0 ]
  19. SOUND_DATA_BANK_C000        = $06  C6 d" c9 K7 e& C) j. e; s
  20. 1 n& E# Z4 n4 t4 {. Z' G8 ^3 e
  21. ;-------------------------------------------------- ^' I1 z+ u) y1 F9 `: E
  22. CHR_DATA_BANK               = $04
    1 |- k& T$ w  j& T! l; X: I
  23. CHR_DATA_ADDR               = $A000% g% @0 G3 ?4 h
  24. ;-------------------------------------------------
    ( i  @0 J3 v% j$ z9 X! Z
  25. PROGRAM_BANK                = $05
    2 @+ [; o$ K+ H6 c
  26. PROGRAM_ADDR                = $8000  t6 g; Z3 _3 f" K6 h( c
  27. ;-------------------------------------------------
    . W2 i3 j4 L4 ~
  28. RESET_BANK                  = $07+ |1 k2 U9 N# ~9 V5 U  b
  29. RESET_ADDR                  = $FE008 _9 H; F7 ]+ u. P
  30. ;==================================================6 ~* R$ m0 q4 [) f; P7 G
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
      Y' K& b$ b2 I4 L6 h8 Q! p/ r. t4 s
  32. Music_Play_Addr             = $813C ;音乐播放地址- p7 e$ O  f2 @: a
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址; H6 @; x6 ]! x3 \6 _
  34. ;==================================================
    $ l1 \2 U, d( `9 Y. @6 y
  35. Music_Song_Total            = 039  ;全部曲目总数
    9 V* H7 B/ G2 Y3 R
  36. Music_Start_Song            = 007  ;初始播放曲目
    1 y. f! C4 m* n9 H
  37. ;==================================================
    # A3 r1 U7 {( W8 h1 _& }; [( ~. v0 `

  38. / ?9 E1 l7 X3 Y+ S* s
  39. ;==================================================5 R- E3 [/ z1 r& R' Q
  40. Title_Text_Pos      = $210D ;标题文本位置" l0 ^( Z) h5 z8 `1 n, k, ~
  41. Author_Info_Pos     = $2284 ;作者文本位置3 x# d, ?; U( G; f
  42. Date_Info_Pos       = $22CB ;日期文本位置
    " m2 Z2 F$ H. o1 K5 z/ w
  43. ;------------------------------
      k, o1 y, _! M' E6 O
  44. ;------------------------------
    ' N- q% G3 ^# c4 ]+ K0 N: E/ Q
  45. .IF SOUND_BAR_SHOW_ENABLE1 V1 z: e2 x& T: {6 L0 N
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    2 O- a" x/ N& G3 m& w
  47. Play_Time_Pos       = $21F3 ;播放时间位置+ j& j6 ^$ }" r; z* m, g3 _0 z
  48. Play_State_Pos      = $2233 ;播放状态位置
    5 a+ o* ]" K1 A9 |, s! m
  49. .ELSE- R: u) l/ q  g5 U6 A0 {5 S

  50. ' x2 S+ j% `5 [! g0 x
  51. .IF Music_Song_Total > 99# f6 L! b, u+ H6 z: b9 S( K6 y
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    4 H* m9 ~1 G) E3 J& s0 H
  53. .ELSE
    7 G+ b! |' ?7 l3 C: q, J

  54. 6 q0 s% k- S# f& S% \
  55. .IF Music_Song_Total > 97 h  b; @* o( a5 K
  56. Play_Index_Pos      = $21AD ;当前曲目位置0 `3 L" {( F, }
  57. .ELSE
    2 J# f2 f* g' }# K5 _9 b" p3 x
  58. Play_Index_Pos      = $21AE ;当前曲目位置) X/ H  e+ J: I% k2 h
  59. .ENDIF
    , \9 D6 e; ?6 R: n! }" U
  60. 0 w/ q! j- ?* n
  61. .ENDIF
    # K# t) {3 {( I3 w' S
  62. * p3 C" h! Q6 t- b' P
  63. - T# }# D6 m4 A( F  p
  64. Play_Time_Pos       = $21EC ;播放时间位置8 L% P) c# }( E& ^6 E9 c
  65. Play_State_Pos      = $222C ;播放状态位置
    6 P/ ^( B, y+ s2 V8 [
  66. .ENDIF7 I/ Q4 M$ N" L4 @
  67. ;------------------------------+ R& L% \- ?* x- b' }# M
  68. Track_Name_Pos      = $216B ;曲目文本位置; ~1 R$ k3 u5 p' F) O
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    2 p$ ?% _" Z$ W
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置- E3 {& U6 r8 [
  71. ;==================================================+ z! c5 w9 B- m& [  u
  72. Scroll_X = $003 L8 Z+ `# p& I% k( v
  73. Scroll_Y = $06. ^: P! @; \( t+ U
  74. ;==================================================& n6 U9 P! K) f$ X" _' @
  75. RAM_Cln_1       = $01005 x6 X7 S" j4 B  `4 |
  76. RAM_Cln_1_Size  = $801 X" R4 A, E: n1 i4 }" l) m6 i
  77. RAM_Cln_2       = $00E0
    ) N: q8 p! J# |: B( S  K
  78. RAM_Cln_2_Size  = $201 o8 P: ?* _% U8 P/ C1 i
  79. RAM_Cln_3       = $00E0
    7 O, C8 R0 ?0 B3 m% h
  80. RAM_Cln_3_Size  = $20
    * n& g4 S1 ?4 }* v5 R
  81. / P: T# K+ B: Y1 C* ]" X
  82. ;==================================================% K: _- }) Z# `! m" ]6 U
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    . V3 [& k0 E! f* h- J6 C
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器& b3 `" ]3 L5 [8 V6 ?
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位4 B1 \. d" H: I1 P/ u" Y. F
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1; j# d5 `! Y, `6 |' T
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    : G- o& C4 R; W4 @: T% Q. d) s6 [5 T
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 ! u2 M* M. Y0 G" x7 y) O
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    / G( L) p' g) U
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 9 l( Q1 S. h0 |& k  T% {% |0 ~: j
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存) E# g* |- \/ J! _3 J9 g1 H4 |. J
  92. APU_STATUS              =   $4015   ;声音通道切换
    % \' H8 g$ l5 z. a+ Z6 H9 Y0 A
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    9 F, b- I3 {6 L" [& U" h
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    ' o0 `( i5 u9 F6 Q
  95. ;==================================================; j/ |" [) |% H* J( }$ m. M
  96. MMC3_BANK_CTRL          =   $8000
    1 c9 b+ i0 L0 \9 G: V' p
  97. MMC3_BANK_DATA          =   $8001) A+ M% A4 |* ^1 R  Q
  98. MMC3_MIRRORING          =   $A000
    / x  ?- y8 @4 t! p4 N' t1 Q
  99. MMC3_PRG_RAM_PROTECT    =   $A0012 e* j' ^2 ^, S$ g$ R% E
  100. MMC3_IRQ_LATCH          =   $C0003 \0 Q" F: Y$ ?+ [( x
  101. MMC3_IRQ_RELOAD         =   $C001- q" T3 ~1 B; ^
  102. MMC3_IRQ_DISABLE        =   $E0007 G3 F4 j( z' ^" s
  103. MMC3_IRQ_ENABLE         =   $E0015 G( w) [! S2 y4 |/ x& x& C& K) V
  104. 8 z5 S" S$ z' k" l& F
  105. ;音乐数据块$ k6 y: ~* Y: `/ N( p' O, x
  106. ' ~$ ^/ Z* O3 Z  l1 G, h
  107. ;======================================================================
    # u0 |5 }1 N. h" [
  108. .IF SOUND_BAR_SHOW_ENABLE1 M' ~7 b6 b( ~" o+ D
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK  n2 u4 |) g  ]
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    : a5 E0 ^" J& h5 V, @* E' N
  111. 5 A7 d0 t& C+ \$ V( H$ a
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    9 s, {6 ]0 S2 X/ p/ T1 T
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    4 h+ ~% j7 u* q, Y' R

  114. " G+ p: D2 J% ^5 K
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK  p% S( E# z8 X1 I* ~
  116. .INCBIN "sound_bank_bar/music_data_2.bank": h- c# t2 l* g0 O

  117. 6 [: H9 g5 I' j
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK. d# J6 I, g! H
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    % g4 `5 D9 ]2 ?" s9 n" ?

  120. # e8 U2 P& l5 i4 ^1 _) r
  121. .ELSE
    6 a6 f6 t/ a5 N: F4 {
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ! C) a# t9 k* L1 p8 v
  123. .INCBIN "sound_bank/music_data_0.bank"  G1 g. P) `: j0 b! F9 p4 m5 V
  124. $ h. Q2 Z5 _. O3 [! O: o2 R  Z" @
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK4 c# J6 X, e9 ^) C8 G+ o3 `( W2 G- D
  126. .INCBIN "sound_bank/music_data_1.bank"
    ! A  u: _) [% b+ y

  127. , k5 Q& c! t# x. ~. L' h
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK$ `# D4 V3 G4 f% [* c; s% S2 d
  129. .INCBIN "sound_bank/music_data_2.bank"4 ~  j5 G6 x) N7 r& I7 \
  130. - {+ D/ u+ [9 H. ?
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK* m7 ~# D5 T0 y! E- v
  132. .INCBIN "sound_bank/music_data_3.bank"
    + y5 y* N/ P6 J' @
  133. .ENDIF
    4 E3 H& S) Y  }7 l6 p  J
  134. # i, X+ C: e4 o/ a
  135. ;CHR图形数据9 d( L; G( J9 ]. k
  136. ;======================================================================
    . O" }5 o. a- y& w9 k* u- N
  137. .BANK CHR_DATA_BANK  j  ]: S  @$ P# p. Q' S, T9 Y6 o; V
  138. .INCBIN "chr_bank/chr_data.chr"; U# k3 u, q0 o$ A5 b7 X2 \$ Y
  139. % C# _9 B! O/ ]) @+ d
  140. ;==================================================# W- R+ {5 c3 p" {3 X
  141. PPU_Addr        = $0300* [. v0 n5 e+ S' L6 i6 D
  142. Palette_Addr    = $03C0
    6 y- t  s" _+ R5 F& x
  143. Sound_Bar       = PPU_Addr+$E0$ ]) c- I" D" \& \* P3 V
  144. ;==================================================
    / S- X$ w: r1 \2 G
  145. Palette_Update_Addr     = Palette_Addr+$0D7 b8 [" y; j3 T9 j6 w6 s2 N
  146. Palette_Update_Max      = $2C
    ; |" u9 [6 t2 E, ^7 c& [
  147. Palette_Update_Min      = $21
    # ^: L7 n5 k  P* e2 x
  148. Palette_Update_Interval = 60
    ( a' E# [4 k$ s7 @3 h; p
  149. ;==================================================( W. _! [- p! t3 }
  150. Sound_Bar_Cnt       = PPU_Addr+$F0. U5 l3 [6 R0 x6 z, Y( ]
  151. Screen_State        = Sound_Bar_Cnt+$01
      \3 M: i& c+ _; S+ |/ A
  152. PPU_Cur             = Sound_Bar_Cnt+$025 w, P4 c" i  ~" {/ z* K2 N
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    + U3 a& O! a8 ?7 Q0 Q
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04) C+ B( h% N6 \4 P/ u! E; r# _
  155. ;==================================================
    ( [5 z& W! M% ?) w. w
  156. Data_L              = $70; \% e9 d4 n& j3 a9 H9 T& w8 W
  157. Data_H              = Data_L + $01* @& }' S, [4 t9 j" f& d
  158. Data_Cnt            = Data_L + $02  I5 W8 V( w- S; f: y2 n% o, v
  159. Data_Buf            = Data_L + $03$ X  _! n; U5 z. S! [3 j
  160. Time_Wait_Cnt       = Data_L + $044 \! f" w/ D$ A3 W2 [# ?, I2 N* _3 W  v
  161. Palette_Wait_Cnt    = Data_L + $05
    $ x0 ]" U- V4 D0 d, {0 V# l
  162. Palette_Update_Flag = Data_L + $06
    + z6 s$ L2 g9 N# N/ Q
  163. Show_Track_Name     = Data_L + $07
    * b6 I2 G4 l2 q$ R0 x( \8 i) N
  164. ;==================================================6 `  T+ z: T0 \, b
  165. Key_Keep            = Show_Track_Name + 1
    2 c5 E% k* {2 N
  166. Key_Once            = Key_Keep+$01
    * o6 a" W0 F* L4 Y: q
  167. Key_Kemp            = Key_Keep+$02
    5 Y7 P' Y$ o* q/ x9 ]
  168. Key_Temp            = Key_Keep+$03
    + Z& }0 F( \! g
  169. Key_Getv            = Key_Keep+$04/ T: x* f9 V- A, H
  170. ;==================================================
    6 ?8 v: h* g1 K- `2 x4 ~5 A' C
  171. Music_Cur           = Key_Getv+$01
    # C) b8 }" w; x. L, g, Q
  172. Music_Last          = Music_Cur+$01! _" M4 u; I& |
  173. Music_State         = Music_Cur+$02' e  ?  e9 W' _2 u5 c! ]6 C
  174. ;==================================================2 g  h! G  b! a; T
  175. HEX_Data            = Music_State+$01
    0 w+ {, G$ F+ C
  176. DEC_H               = HEX_Data+$01
    + j3 \1 e9 A8 p( ~( G
  177. DEC_T               = HEX_Data+$02
    2 m; r& i4 Z* `
  178. DEC_L               = HEX_Data+$035 o+ [6 L& i/ x9 h, Q' F
  179. ;==================================================
    6 T9 E8 q" n, t. x
  180. Time_S              = DEC_L+$01
    2 A0 |+ L5 x3 f$ V' y6 t. r- Y
  181. Time_M              = Time_S+$01
    - f+ n* q/ g) i  }- p) k
  182. Time_H              = Time_S+$02
    + t/ o0 p1 E2 P* K% W' c* a+ y! Q
  183. Time_Cnt            = Time_S+$03
    ) z7 f0 l& u( W& ^
  184. + A! P; Z- e; }- Z" J) {
  185. ;==================================================( Z; N3 V  ^. _
  186. Music_Bank_8000 = Time_Cnt + 1% g/ o, [+ r& R
  187. Music_Bank_A000 = Music_Bank_8000 + 1
      v% m. p3 M* ]/ f6 f6 [4 X9 Z
  188. ;==================================================7 `& s' I$ L* v9 K9 d
  189. : L1 J: e$ U+ _: B
  190. ;======================================================================2 l) ?9 o5 j0 P! ~5 O0 x& E
  191. .BANK PROGRAM_BANK
    % ?2 ^, b+ X: {8 O8 R, `" y, B
  192. .ORG PROGRAM_ADDR
    : ^1 }; ]8 K6 X. ^

  193. / B7 s2 J8 F% A) L: q2 Z% C
  194. ;==================================================
    / f5 B7 d& d; z$ J9 Q
  195. NmiProgramProcess;NMI中断程序处理
    2 i& Q" V8 B4 |
  196. ;处理PPU图像
    & d3 W% ?' C" g- L7 }0 x" b
  197. JSR PPU_Proc2 c% Z6 E$ T1 M0 N& |& D4 O
  198. 4 G# G) `2 t6 o0 ~/ F& A* P! l
  199. ;启用NMI中断
    8 W- h* X' d" h. V
  200. LDA #$80
    # t& U9 O4 ^1 [2 x# g' E; k
  201. STA PPU_CTRL4 O" [- h8 w9 j5 k( C  b
  202. 9 ]4 I' s" ]3 v4 i7 R3 E1 R  m
  203. ;更新调色板
    ) [# I2 i; H* k! u1 s/ T) A, r
  204. JSR Update_Palette_Data+ h; ~7 M7 _$ p) l( S6 H) S! K% U
  205.   a; T! g+ o* J  R1 S
  206. ;显示时间(缓冲)% }: c' s- K$ Z- q
  207. JSR Time_Show( j: k/ M* W8 @4 C

  208. , T3 \/ @( q7 Q
  209. ;播放计时
    $ u0 `* ^  B$ @6 T
  210. JSR Time_Count; I" {& y, X% ?' l. v' d7 o. D( }

  211. ) I% z; S- a/ c' A- H
  212. ;播放声音- H$ A0 r3 d' t- z, \
  213. JSR Sound_Play4 {1 Z8 X% d8 \7 {
  214. ! }7 p5 O. S( Y* Z2 S+ y9 `% k
  215. ;切换音乐(手柄触发)
    2 }5 W  w, r% ?% ~# J$ d/ |. ^9 a
  216. JSR Music_Switch
    : i. E6 ]5 l4 G* x1 L9 b
  217. 3 K  f6 q  V% X$ _+ K. d( o) A7 `
  218. ;音乐显示(缓冲)
    : A1 }& X! H' k- ?0 R! v( `& n& S
  219. .IF SOUND_BAR_SHOW_ENABLE
    2 q" |6 @1 E/ y) N* Y# W* J5 V3 n; d
  220. JSR Music_Vision1 f" I3 l$ k/ G- |, q
  221. .ENDIF+ [$ R$ Y8 h/ F% [4 K% s* T8 B1 @

  222. ; J* \0 \4 e& K; F' ?4 p. D
  223. LDA Time_Wait_Cnt' f  P) H. _: }' t' s8 r( O; g
  224. BEQ NmiProgramProcessEnd0 O, j- i; P# I
  225. DEC Time_Wait_Cnt
    ( V, s# m$ t8 P. j& L
  226. NmiProgramProcessEnd5 U7 H1 q: M4 p, L$ C& M
  227. RTS
    - y+ k8 L: I: L7 C# s, G
  228. ; U# C$ _% s  f5 v6 X/ D
  229. ;==================================================. V1 z8 U9 S' J9 Q9 w
  230. ProgramBegin;主程序
    9 m2 l  d" g2 I
  231. LDA #$00. a. G6 g  D( E% C* j/ {" Y* j
  232. STA PPU_CTRL
    - k6 f$ K; s& g0 _. A3 b
  233. STA PPU_STATUS3 d/ m' e# R0 K- f3 i$ ]0 m4 Y  Z" R2 o9 a
  234. STA PPU_MASK
    * Y) f( P1 i. U) h# T- g3 z& g
  235. STA APU_STATUS
    : E+ }( G7 m9 A, F. E& G
  236. STA PPU_SCROLL
    * P9 i$ O3 z4 b: V9 R, I. G+ k; X* p
  237. STA PPU_SCROLL6 @" x' W$ }6 w0 O* G  M
  238. LDA #$C0
    1 ^% W1 h+ Q. W& x% v. I  d
  239. STA JOY2_FRAME! B, D, H* h: l$ |7 {4 l) f% o
  240. " n0 c9 F" Q: y: R% E9 j) w. z0 R* v
  241. LDX #$FF
    . z& g: a7 N7 R, @* E
  242. TXS
    $ ^- Q8 O- a* F8 [, d; L: l3 x
  243. LDA #$00" w- |, y8 x! {0 n/ a/ f- p
  244. STA PPU_CTRL) _# L/ ?5 M, i4 z5 P7 d
  245. STA PPU_MASK% ]. F! [0 z+ c) J
  246. STA MMC3_IRQ_DISABLE
      W7 i0 x% C9 w/ O( y* V
  247. 9 `5 s+ o6 Q2 D4 f- ]! E' ?% F
  248. ;==============================+ j7 ?1 G1 O. A# D
  249. ;调色板清空0 V' g1 D2 a! T2 R
  250. LDA #$3F7 p: m% c' X# e8 b3 l. P. h
  251. STA PPU_ADDRESS# z/ b: Z+ s& W
  252. LDA #$00
    . |0 t: {/ ^8 X5 `3 f3 }: R
  253. STA PPU_ADDRESS4 z5 z* k4 v  x! p4 Z$ G2 Q' Q- d1 c
  254. LDA #$0F
    5 P' Z" O  `$ ^9 j# u; j: N
  255. Palette_Clear
    : M' |" t* w: V% R# G! k  r7 c
  256. STA PPU_DATA( `# @# X0 u; O
  257. INX
    ; s/ C2 u. _+ _$ C
  258. CPX #$20+ |: t* z8 W  O- M. D1 k
  259. BCC Palette_Clear
    & O, t$ c1 p; U
  260. LDA #$00
      u! Q  m5 D3 f: F
  261. STA APU_STATUS
    9 g5 j% S5 R7 k  L7 V. \0 F
  262. ;==============================
    , k0 A! c) e7 C  x8 h, M5 y9 t
  263. ;初始化背景调色板
    $ s6 e3 Y$ G3 o0 [' y
  264. JSR Set_Palette_Color
    + T/ _+ I/ D6 u5 d
  265. JSR Set_NameTable_Attributes
    & |! [, y& L; F" @! C0 r5 _
  266. 5 A% h$ x, ?5 ?2 K( M8 t
  267. ;==============================
    * N  Q0 u" i/ y1 n+ [) s
  268. ;RAM初始化
    : G1 M# N4 j( z. s: b) m
  269. RAM_Clear_All
    - {) A' k$ Y4 c: {( M
  270. LDX #$00( O1 A  r: |( n, d3 c
  271. LDA #$00
    7 H+ [. k5 U  r6 L+ L" I
  272. RAM_Clear_All_Start
    + C8 L; G+ ~6 o" f* {: x
  273. STA $00,X' E" e: _" e. i1 R8 u- P/ F
  274. STA $0100,X. p' S3 x4 A) ?* C! O  _& U9 o5 S
  275. STA $0200,X6 t: _8 F9 V% T7 z# f, W1 Q
  276. STA $0300,X$ C2 G- b0 D+ _) R, X9 z
  277. STA $0400,X$ _: m) t: L2 c
  278. STA $0500,X: B9 ?6 s7 u8 N, u* U" y' ?4 \$ z) E& U
  279. STA $0600,X1 w# o8 d; w& H6 S
  280. STA $0700,X
    ) U8 C4 l- K3 c7 }' N
  281. INX& J1 o  C+ V/ n$ P
  282. BNE RAM_Clear_All_Start0 f: x8 @- ~' v; \" \( Q+ D
  283. 3 E+ u( S# G! V. Q
  284. JSR VramInit9 j- ]* P5 R9 |0 L) F' R
  285. JSR Init_Palette_Addr
    : m5 ^1 `& p, b0 B, |# d
  286. ' c( ?7 M+ V; s8 H
  287. .IF Music_Reset_Addr
    8 I, z& P6 w$ H4 h  s8 r
  288. JSR Sound_Reset7 U4 G9 b2 |6 z7 K3 Y
  289. .Endif
    # l& B5 u% \$ ]7 Q. \8 O

  290.   a) U+ D2 Q) p" q0 d* q) M. L
  291. LDA #Music_Start_Song-$01
    ) I; @6 `4 I3 [' a- M5 z' q
  292. STA Music_Cur
    / Q! a, m& q+ n4 L+ }) U- z+ U$ G
  293. 1 w1 p0 X9 N% e9 ~6 D
  294. JSR Show_Music_Text
    3 p" ?$ v7 p0 K* c  v

  295. ) d: `, g& u% \  b" C  c' Z) F
  296. .IF SOUND_BAR_SHOW_ENABLE
    . x& k* [) d3 h6 r6 [
  297. JSR Sound_Bar_Text_Set2 v: E! e5 p: R  s
  298. .ENDIF1 B# T2 n) E% K- {/ ^0 ~6 h

  299. 3 x9 e- U9 q4 A! B8 a
  300. .IF Track_Name_Pos
      Z, v, p7 I+ d0 Q- q" }
  301. JSR Show_Track_Info
    # ]0 `+ w  L2 B7 b: v9 l0 @' F8 v
  302. .ENDIF- }, r  m6 B8 q) T, F  E
  303. ( ]! \) b/ G* N& N
  304. JSR PPU_Proc
    - M% y7 E- V( N% z" A9 z

  305. 9 B: ^8 V0 c7 G2 O/ g8 o
  306. LDA #$0E% j. e6 t' {7 K0 P2 M9 r. x
  307. STA Screen_State' f' i. H! J, i3 c' n- W  g! q. d
  308. ) W# \" X' e9 \: w$ x
  309. JSR Sund_Bank_Init" R9 @1 W; F3 G4 |( I7 W. ?0 r- |
  310. 8 L) g& G" a; ?: \( ~$ `2 @
  311. JSR Music_Show8 |% ]" v2 }% R
  312. JSR Time_Show; P; j: p5 E) w5 C8 M/ b
  313. JSR Music_Stata_Show2 V0 O; R" h0 r+ v- i
  314. JSR Time_Delay
    , G+ j$ E- D! U7 d# _
  315. $ |) z  z4 o: H( K# m9 g/ g

  316. / F% k8 P9 d$ j7 g5 E
  317. LDA #$80
    8 r! ?0 g, c  C  H" w
  318. STA PPU_CTRL
    ( R( v/ L, y8 b' p. K

  319. " y& d& r3 d, U$ g) x8 _. f
  320. LDA #$20
    ' {3 d- V4 G) B. x
  321. STA Time_Wait_Cnt3 V4 [4 n" W" I& \+ {1 h; U8 H; o( h  I" R
  322. , X) a( o" _6 C8 U, e% w
  323. Wait_Time_Over
    9 R5 |$ `; C1 }
  324. LDA Time_Wait_Cnt
    2 T, p1 ~/ `0 O$ n! s6 L6 ~/ w
  325. BNE Wait_Time_Over
    ) F, @  ?0 U2 U9 r6 `

  326. ; X) J2 h, x1 N9 w. j& Q5 A
  327. LDA #$1F
    # \" ~1 r7 Q* `9 u# R  a# ]8 m* T
  328. STA APU_STATUS
    : ~2 Q1 Q+ L) F: x* t* w" h& P) u# ]
  329. LDA Music_Cur% ~% }+ _' I9 n
  330. JSR Sound_Init9 e4 s( d0 Z0 Y# |2 L' k& i5 C

  331. 3 U5 p0 t3 o, V+ Y2 s7 J9 t! r6 _3 m9 e
  332. JMP MainLoop& T; d- k& h4 c0 I, c

  333. : R; ?- j# N' B( x
  334. ;==============================$ Y4 z8 `, Q1 s0 `% p2 W
  335. Time_Delay;延时等待; D5 c: ]# ~- F7 U4 M
  336. LDA PPU_STATUS& y1 J0 {! z7 b# f! ^8 H2 n
  337. BPL Time_Delay, f; b* s+ ~, H! p, ^6 X
  338. RTS
    ! P' {  ~* J- \1 }

  339. ; x3 i9 a# ^1 R" M/ h2 z
  340. ;==============================
      ~3 m2 K) k. `. k0 ^
  341. VramInit;初始化图形内存3 l/ r, Q% O$ B8 d
  342. LDA #CHR_DATA_BANK1 u3 f& Z1 X' Q$ G1 ]
  343. JSR SwitchBankA000
    . C$ r3 V. k! w7 B8 \/ j
  344. LDA #LOW(CHR_DATA_ADDR)5 ~* j% [- Q! _3 |# z6 g0 C
  345. STA <Data_L
    0 k6 t% D4 A' O, B( u
  346. LDA #HIGH(CHR_DATA_ADDR)
    - f0 }& \  d% J$ D/ S5 w# n+ h9 K( ?
  347. STA <Data_H
    3 Q4 a  \: e7 P
  348. LDY #$004 M* S/ J. _4 V* P2 x0 [: o; C
  349. LDX #$20
      L+ G' X9 y' W! F3 a% J' B; I
  350. LDA #$00( ]' J$ y4 Y' N. v! F
  351. STA PPU_ADDRESS7 d/ r! J* t$ h9 f
  352. STA PPU_ADDRESS5 t: }$ Y( s% D* o+ M
  353. VramInitWrite# ^* x% u8 q7 m7 `4 G
  354. LDA [Data_L],Y
    ) j2 j/ B$ p) x. [+ }3 i
  355. STA PPU_DATA! r2 U+ N6 d. X
  356. INY9 \' e& `! f+ I# F2 o; c
  357. BNE VramInitWrite2 E% X5 o8 v0 G& h& _7 r" _
  358. INC Data_H' K; i- U5 Q, F5 L
  359. DEX- H: G# g+ F1 G* v. p" N  P
  360. BNE VramInitWrite1 o& K# r8 t. g
  361. RTS% |- e3 D' ^) O8 u& @, I

  362. % n& B# _7 h, Y" I
  363. ;==============================! Z, {1 K. S+ ~8 P$ Z
  364. RAM_Clear;RAM清除: ?" A) X. {5 k  y; N
  365. LDX #$00; M0 g& v* I5 b, I7 h. k9 j. W
  366. LDA #$00
    9 h# ~: P6 a$ {2 y
  367. RAM_Clear_1
    ! l5 x. Y# k: c& r/ i! h; `! m
  368. STA RAM_Cln_1,X
    1 A+ Q% s2 {4 [, t8 V
  369. INX
    2 L, r9 Y9 o  N" B: u
  370. CPX #RAM_Cln_1_Size
    0 Q. t4 B" |/ o- x
  371. BNE RAM_Clear_1  k' ^" T% }- x- J
  372. LDX #$00
    8 T' a, n. c+ O( w" p  w
  373. RAM_Clear_2
    ( A3 z1 Z" ^) W
  374. STA RAM_Cln_2,X* Z5 }. k8 F2 e, T
  375. INX
    % j$ K' x2 n3 A. J* \3 P+ f
  376. CPX #RAM_Cln_2_Size
    : T" h* m5 n; F6 z+ h. r+ y5 g- V4 X
  377. BNE RAM_Clear_2
    $ M# ~- e/ y' {! Z" r. ?( c1 n2 }
  378. LDX #$00
    ' z. z: F! w% x7 x$ K! B" W
  379. RAM_Clear_3
    ; [$ `4 z  Q! I' O- v- ?% Z, T4 S- y
  380. STA RAM_Cln_3,X- Z: L" L7 v/ n9 P" F- U# h+ z
  381. INX! t9 ]$ H/ z# U* a  t# m( u+ q
  382. CPX #RAM_Cln_3_Size1 J4 O( X9 l3 n
  383. BNE RAM_Clear_33 m  R$ ]  T) P
  384. RTS
    6 d3 g; g6 x5 S

  385. 2 r8 ^1 b( _6 N9 g- ?( X
  386. ;==============================
    6 }9 G, Y) i. |
  387. ;音乐切换% R. e! C# I% I/ a% a
  388. Music_Switch/ {6 w5 Y1 z1 ^1 T% \" K' [* O2 @
  389. JSR Key_Proc9 ?5 K! C# O1 c. \& p; b/ J$ S, {
  390. LDA Key_Once) W, W* y% b8 r! t6 {3 z
  391. CMP #$10* {0 y3 P; y+ }# x% O
  392. BNE Music_Start_SongStop; ~5 A4 o5 F- |: Y5 k2 A
  393. JSR Music_ReSet# Z" ]- P6 x$ Z: ~0 a1 |# E

  394. 7 I" a. l6 E/ M0 T1 S6 D
  395. ;音乐停止
    * e0 U3 K/ Z3 l5 T% O5 h
  396. Music_Start_SongStop$ [6 c8 ^0 `/ Q9 o) z
  397. LDA Key_Once! }8 {, S! q3 y# ]8 F$ j, B
  398. CMP #$20
    9 w/ S4 a/ t/ r# k$ ~/ Y
  399. BNE Music_arrow( d' |: T) [# D: L/ ~: ~
  400. LDA #$01
    ! z: p5 H/ q0 {4 m9 a+ w
  401. STA Music_State8 q" b% X( ^% V  y$ g
  402. JSR Music_Bar_ReSet$ A/ \$ P9 V1 R2 |: m' ~
  403. JSR Time_ReSet
    8 E) s/ A" [; g* A. Y( P
  404. JSR RAM_Clear
    2 j% k+ P& e: I: g
  405. JSR Sound_Clear
    4 H; z6 u, E6 `* y  H# m
  406. JSR Music_Stata_Show. X& B0 v9 D/ Y, V5 `1 S# x" ^5 [
  407. Music_arrow" o) g. ~1 I1 g$ n: T6 @6 t
  408. LDA Key_Once' m5 r" m1 a+ v
  409. AND #$CF! p4 C0 S. Z- r& N9 U
  410. BEQ Music_Switch_End) J+ P* A! ]' C8 `3 B& f- X; [( g
  411. JSR Music_Number
    " o% z2 ]/ l. ]0 H# q
  412. JSR Music_ReSet
      Q" h6 s8 g4 |2 E
  413. JSR Music_Show
    3 T6 i! w5 P  P; L: h3 a
  414. Music_Switch_End
    : a# p; \; N0 a4 y5 N# l
  415. RTS: f* I: x" m8 ?3 p& j& R

  416. + Z1 U" T7 l8 R. M0 ^
  417. ;==============================
    ' W3 x% A7 L" ~! Y, E9 u. I# y
  418. ;音乐曲目切换
      d, W3 }- \4 _  M: h
  419. Music_Number
    3 t8 x) r% \+ s0 c( \: \% c+ `
  420. LDA Music_Cur
    & N/ W4 W3 O+ ~; M, J
  421. STA Music_Last: S) t4 A, U: e. u, t" @+ z
  422. Music_Decrease2 s) n3 N( p. v4 ]' T% {
  423. LDA Key_Once# _: Q/ s! f+ q$ h. V# C' u
  424. AND #$42
    5 l/ w& j' [. Q7 c+ N
  425. BEQ Music_Increase& O% ]& t4 c+ W4 |/ n
  426. LDA Music_Cur/ Z  b" g3 K& L1 {
  427. BEQ Music_Increase; B1 f/ R6 p, w" j# V
  428. DEC Music_Cur: b. Y8 {+ o( R0 `! n- y! z+ j
  429. Music_Increase& k/ l9 E- g0 d  y/ J, U
  430. LDA Key_Once. x/ c5 X$ C" S+ i8 R# t7 e
  431. AND #$81, l8 m5 S5 S+ h  |$ E
  432. BEQ Music_Decrease_10) G6 y& O5 r0 y
  433. LDA Music_Cur
    ) p# X7 o) d/ E& n$ O! n  I
  434. CMP #Music_Song_Total-01+ K0 K6 ^2 S" g9 t. {0 o' [
  435. BCS Music_Decrease_10) F9 A6 H" }8 V7 N
  436. INC Music_Cur
    5 g. u  L1 y1 B0 {+ b
  437. Music_Decrease_10
    " R5 I. `/ W1 ]9 v4 D
  438. LDA Key_Once
    7 _1 ~) ~' W) X, T% Q! x
  439. CMP #$04" L6 {3 v. h8 [! K+ ~
  440. BNE Music_Increase_10
    5 Z) j5 E! _# D9 i) v9 V# e) X
  441. LDA Music_Cur
    1 ]4 l( k' h! K. x* u+ ]
  442. CMP #10/ k0 c/ H2 H6 h$ m
  443. BCC Music_Start_Song_Min8 j0 ^+ r* n  W; j
  444. LDA Music_Cur/ b8 R4 F# J1 Q- n
  445. SEC
      B8 U! C$ W9 c! {8 X8 s! `: k) y
  446. SBC #10! a  d1 B1 I+ R, O
  447. STA Music_Cur
    # ^+ O- N/ i( Y  X, {3 V
  448. LDA #$00
      j2 f) h( d- X( b, m0 Q) U
  449. BEQ Music_Increase_10
    ! A# ]+ ]! {$ M- X
  450. Music_Start_Song_Min! _1 v) i! a# C& a, O) }( [
  451. LDA #$00
    / j* J- n; i8 j! P4 k6 e* T
  452. STA Music_Cur
    4 v  r( h& {7 S( O6 l
  453. Music_Increase_10  H1 ]0 }! {& K' C( K
  454. LDA Key_Once2 W1 c' x5 E4 h  I; g" b9 r
  455. CMP #$08
    0 Z3 |% l# ?1 [
  456. BNE Music_Number_End$ |9 Y' l  k/ c2 Y  {% m
  457. LDA Music_Cur
    4 |/ b" \9 A) }9 C/ }1 ~! {
  458. CLC
    ) o+ c; z0 G4 t& }7 F1 l
  459. ADC #10
    8 U" X1 T0 J, ?% b4 Z8 f$ b1 J
  460. CMP #Music_Song_Total-01
    1 U% _- U. y# _/ ]" T) ^
  461. BCS Music_Start_Song_Max
    ; w' |) s- J( G; G" n
  462. STA Music_Cur0 N! f9 R- |  y5 e! \) p/ P! Z
  463. LDA #00+ y/ ?3 E" ~, U( [  P( V7 }1 J  h
  464. BEQ Music_Number_End
    1 b1 `  Y0 H) E, g7 v3 ]
  465. Music_Start_Song_Max
    2 I1 @8 b& b. g, G4 n( m# a" ^6 `
  466. LDA #Music_Song_Total-01, {& x) w$ y# i) d4 G) Q4 Z
  467. STA Music_Cur$ T1 Z$ z! y2 q1 o9 X9 i
  468. Music_Number_End
    ) N* j, F7 I5 j& u
  469. RTS+ j$ n; B# J# g. }6 c
  470. # E, `4 B) `$ c  h  w/ H2 O
  471. ;==============================' f) W5 F/ C8 A1 |/ e0 ~- v' u- d
  472. ;音乐重设, V- R( ?; {/ q0 G  t" }0 \/ U! o
  473. Music_ReSet
    ; N0 M  |" |; y6 D- ~8 G. V
  474. JSR RAM_Clear
    : [" m  J: }: q) K1 `! }
  475. JSR Sound_Clear; x1 d% c( c) e# A" V2 L0 r
  476. LDA #$1F
    $ w- ^( Z. A% N: l" W: ]# |) B
  477. STA APU_STATUS$ k$ t" G. v" m# P
  478. LDA Music_Cur
    7 b2 Q; a; \: k7 [7 D9 P4 d2 a
  479. JSR Sound_Init" z0 f5 H* A9 l, f$ f( C( U
  480. RTS) {8 h1 X2 o0 f2 S% v

  481. & ~0 j. o  u; c. C3 J) |
  482. ;==============================
    : D" R0 s$ E. R; r$ H
  483. ;音乐端口清除+ G8 u! f/ Q* b- O  t
  484. Sound_Clear' \2 o& g6 o( |$ X
  485. LDA #$00
    . U4 g* _! Z% i$ D  t* W
  486. STA APU_STATUS0 }% [; Z5 z9 R8 H
  487. LDX #$001 F! [$ [9 }- e
  488. Sound_Clear_Start- B; v5 I$ H7 ?; V0 v2 p( S
  489. STA $4000,X
    + `* f4 S7 e3 E/ f; S) @
  490. INX
    7 ]. Z) {% z7 `. m, q0 }
  491. CPX #$14; W3 `5 i. A$ N2 |! _* _
  492. BCC Sound_Clear_Start
    7 k- n, G/ Y- r# d" H2 T. R- M
  493. RTS  l: S5 W1 z$ ]3 K/ K( c# N

  494. 2 k% k9 v6 ^( n$ P7 h% G
  495. ;==============================
    ; \, U5 E- Z, Y
  496. ;按键处理
      n" c& n, m' u% I
  497. Key_Proc% s- t" c' K  v, d) }% i7 B0 p* D
  498. JSR Key_Scan
    9 v9 p8 P$ e( K" |  o! i! d$ h. j  M
  499. LDA Key_Keep# z9 z2 f" Z: b0 `/ A
  500. STA Key_Temp/ A& Z$ k# N* m
  501. JSR Key_Scan
    : d/ V2 m" l- j) f$ S* m4 b
  502. LDA Key_Keep
    / g: ]9 s* P4 m/ d- W
  503. CMP Key_Temp4 s, \: i' U. ^! J* }* e
  504. BEQ Key_Get_Once
    # i& m) j: M" E# C
  505. LDA Key_Kemp
    # i8 V; e4 Q! a4 f! Z( E
  506. STA Key_Keep- r  a  j. C/ D. E/ R! d) |- o, v
  507. Key_Get_Once8 n) E. I7 v# {1 d, J: [) X
  508. TAY6 k" ~5 H, w( L) A0 Z% M2 ^
  509. EOR Key_Kemp
    3 D2 a! [0 @1 g3 H
  510. AND Key_Keep
    - ^& z  r5 _$ C8 W, ]
  511. STA Key_Once
    ! U. F  y* q/ Y4 ?3 h1 S: M
  512. STY Key_Kemp8 B: o) d: e- S5 z
  513. RTS5 y# E/ v6 j) {, ]  ?6 j$ t2 I( M7 V/ i
  514. ;------------------------------
    # u' ~3 Q7 |% @, o, \) X2 f4 B
  515. ;按键扫描
    ! ?1 ^2 d  o5 _! C$ o
  516. Key_Scan
    5 ?; @: E5 s9 Z1 i6 g3 w( W! u: i4 j
  517. LDX #$01
    ) M, q4 b; U! y
  518. STX JOY1_FRAME
    - Y: y5 n$ U" Z7 j  k9 V! w( V" I: k
  519. DEX
    6 D; Z$ R0 I) Y" `5 V
  520. STX JOY1_FRAME/ x7 h& t) R+ V4 [
  521. LDX #$08/ E# T% `# c9 e5 j, S) @, ]7 D
  522. Key_Value" H4 W: S, G" p+ F. {
  523. LDA JOY1_FRAME+ I  v& p+ F" R  I1 }
  524. STA Key_Getv  R( l4 y/ U" K& n' v0 p
  525. LSR A  ?0 o9 N( @  {0 c
  526. ORA Key_Getv
    ( q$ n9 x+ |7 ?  q
  527. LSR A
    ; D0 E6 @# Z0 F. T6 ]! Y: Z8 l; E8 F
  528. ROL Key_Keep
    " K! |; f  V( n2 ?2 `
  529. DEX
    ) O% H0 a4 P8 h  [
  530. BNE Key_Value4 U+ F/ _# R" u0 M1 S5 a+ X
  531. RTS
    ) V" e( y, E! g5 B  x+ g- y/ {4 k

  532. " I2 z2 C, @2 U) [0 Q6 e$ \
  533. ;==============================# A$ L! h# {" F
  534. .IF SOUND_BAR_SHOW_ENABLE
    5 A0 X; ?+ ?7 W; ?
  535. ;音乐条显示
    8 ^5 e+ Z( Y: p" q/ A/ V2 b
  536. Music_Vision
    ( T0 T7 c! n) F) G; W2 u
  537. JSR Music_Animation$ [& |+ \" E. W8 A
  538. JSR PPU_End2 r6 M; H) l) u6 N; d
  539. RTS
    ) H+ j: c/ b. v  R
  540. ;------------------------------4 m6 M5 h5 u$ k; U7 c) b, h) [- O( ]
  541. ;音乐条显示处理! A8 u- h4 Q/ S% V) ?# O
  542. Music_Animation5 g: @! U6 {3 v7 C! N" a
  543. LDX PPU_Cur
    " A/ Q) I0 m0 A7 F* r
  544. LDA #Mode_Line% t5 _6 Q6 P  {8 ]
  545. STA PPU_Addr,X6 T0 {  e- H% _2 m& P& P
  546. INX
    , u' U/ P9 D. M, n
  547. LDA #HIGH(Sound_Bar_Pos)- }* ~9 }7 `6 w+ A
  548. STA PPU_Addr,X
    ( a9 D- J  R3 E5 P
  549. INX
    ) U, n' C& v& _! E
  550. LDA #LOW(Sound_Bar_Pos)
    " F9 D" L/ G3 j
  551. STA PPU_Addr,X
    ! G' c6 V2 F8 }8 U1 q
  552. INX
    ( d( O- z+ o: w2 U1 `) j
  553. LDA Sound_Bar
    & G0 u1 s# Q) H) X5 k) h
  554. JSR Volume_Convert
    ) \' z1 F3 T" m' T, C3 h3 u
  555. JSR PPU_Return! U, g- Q) q+ d. W/ J8 I2 P5 g1 [
  556. LDA Sound_Bar+$4
    $ Q* h; n! k/ K+ U- l* I& y
  557. JSR Volume_Convert2 ]# N( @! _% c) e/ d
  558. JSR PPU_Return: i  W8 l* W) _! M
  559. LDA Sound_Bar+$8$ ^: g& e  O+ @8 B( A
  560. JSR Volume_Convert_Ex
    0 d; v. T( ^/ I) Z: V
  561. JSR PPU_Return- p5 H8 U2 E/ X
  562. LDA Sound_Bar+$C8 }. @# B; R1 Q& x  `1 U% n$ A2 m
  563. JSR Volume_Convert
    , K) T- q6 D1 F4 N9 y
  564. JSR PPU_Return
    8 |# i! v1 [1 P* E! z4 v% u! \
  565. LDY #$10
    ' S' C  q7 |2 c) h+ }7 _+ P0 e9 P
  566. LDA APU_STATUS
    6 s2 c8 G; n6 p  x
  567. AND #$10
    - ?6 x9 i% y( p+ ?: m3 E
  568. BNE Volume_Count0 M; O4 M+ A6 p, L0 n9 j
  569. LDY #$007 o9 t% u4 n6 }+ \0 s
  570. BEQ Volume_Count1 q' ~+ d4 ^% O) _- ?
  571. ;------------------------------
    ; d, U5 G7 g& W0 A
  572. ;音乐条处理* |4 b4 j& j0 l) C! {8 O1 U4 |
  573. Volume_Convert_Ex$ A* ~& c7 Q% S$ [# ?2 b% W! {
  574. AND #$1F
    . \  q1 s2 Z" S) o" F% r2 w, d
  575. TAY
    0 w7 b7 H- ]( Z# I$ W
  576. BNE Volume_Count& ~. e/ [; a/ J/ C" u1 |
  577. Volume_Convert
    + R3 g1 x: ~5 v; X* Q* F: r
  578. AND #$0F6 L, Z2 P7 @5 {5 f! Y4 }1 E
  579. TAY+ Q+ q! d' F) K# p" x) {4 p
  580. Volume_Count
    # T2 k/ p! S& x0 N) Z% @. j
  581. LDA #$08
    * ~8 ^1 U$ Y! }- Y1 p2 [7 \, m! x4 W
  582. STA Sound_Bar_Cnt
    - _2 N6 o! j8 N1 p( `2 O
  583. Volume_FILL
    2 f) m- D- c3 ?- [  Y- l
  584. DEY
    ! [2 d) D1 ~. R4 u
  585. BEQ Volume_Half
      ?& M* E; n2 i5 a; N5 X8 |+ y
  586. BMI Volume_Empty, e- ?8 [" t$ d( s
  587. DEY# d- F2 {# I$ `
  588. Volume_Full
    8 ^8 M. q  u8 f' I& m3 @
  589. LDA #$16; p6 ^* h& q1 D" I9 K( P5 U' b
  590. BNE Volume_PPU: o: l" `0 {  F$ \  W, J& b& [
  591. Volume_Half
    & p. \/ r$ Q2 u$ C! s7 Z6 s9 b
  592. LDA #$15
    * O  T8 R; D! o# g
  593. BNE Volume_PPU
    3 w& g' g' \8 H/ I  q8 q7 Y- }
  594. Volume_Empty
    % ?3 f& g7 J  F$ A
  595. LDA #$14
    : \! o3 _6 ]3 }0 \5 d) P. K
  596. Volume_PPU
    3 K9 j" V- o1 d6 {2 r* S/ |
  597. STA PPU_Addr,X4 `* M1 D9 {6 y
  598. INX
    ' j  m* G& P, A+ A/ B/ D2 Z* t
  599. DEC Sound_Bar_Cnt! V! F9 _/ d" u1 N8 X
  600. BNE Volume_FILL+ q, ?, Y* o8 j& }3 R) U
  601. RTS
    5 A$ o* S3 U+ p$ U& [5 k' A
  602.   ^( m  T  V% x. L
  603. .ENDIF
    2 n6 q/ c( K1 J" ?% g3 Y

  604. 5 b* Q# z; N" n
  605. ;==============================
    : S4 t1 \; v5 [
  606. PPU_Addr_Set;PPU行开始
    + ^9 P/ J& m9 D/ e8 s
  607. LDX PPU_Cur) r8 d( w  s/ I/ n0 Z$ R
  608. LDA #Mode_Line
    ( l3 X8 `# k' e1 r. u; f/ H
  609. STA PPU_Addr,X
    % e/ [" R" \3 L) N# ~0 Q$ P5 g
  610. INX
    3 ?) }- E( h: c/ k
  611. RTS& [- y/ S/ b( _  B2 y- ^3 o3 b# b0 [

  612. 0 [0 J+ R1 `. N
  613. PPU_Return;PPU转行
    : s% T1 Q6 l( i
  614. LDA #Flag_Over
    7 Y% _/ R3 W. p6 P
  615. STA PPU_Addr,X
    6 z$ D- _0 g, H
  616. INX. O! y1 l1 a: B( r2 Z) `5 K
  617. LDA #Mode_Return# [# ~+ u$ S0 r* B, \; Q' @
  618. STA PPU_Addr,X7 K/ J% N4 X. _% V/ e; ~$ H
  619. INX
    / i" n# ^4 n0 o" E4 P# j
  620. RTS
    1 p6 j: W- Q1 D+ {9 a3 N

  621. : q; \6 B2 N1 T# N
  622. ;------------------------------
    ; b& _5 [0 K8 v6 z
  623. PPU_End;PPU结束
    & ?( ]" q+ {# N8 R- |
  624. LDA #Flag_Over0 N" B- N; r/ j( ~/ l  O
  625. STA PPU_Addr,X: e( D" [- A. I' k/ @6 H" r
  626. INX4 x3 ?! D- m' q
  627. STX PPU_Cur1 I& y# |2 i% U7 B
  628. RTS0 J" |; Q' n) O7 ~
  629. ;==============================
    1 ?* z+ d1 r9 S. r, P" q
  630. Mode_Line     = $FD    ;新起行模式
    $ f: |5 |0 G3 S/ P3 b8 q: Q1 L
  631. Mode_Return   = $FE    ;转下行模式
    2 ]$ p) T. O6 [, M, W0 ]
  632. Mode_Clear    = $FC    ;行清除. J5 K8 {5 q0 E; e+ D
  633. Mode_CntLine  = $FB    ;行计数写入7 a" Q. W; {, p
  634. Flag_Over     = $FF    ;行结束标志: R; F% Q1 ?: u2 ^9 e/ q

  635. ' c4 ]. ]  }0 n6 f/ V; S9 F& W
  636. ;------------------------------
    3 v& G/ R! n; w$ x% \# k: O
  637. ;PPU处理
    6 Y: Z9 k8 R$ H  F" I3 \0 n5 Y
  638. PPU_Proc
    6 @) C/ p- C' G( b0 H
  639. LDX PPU_Cur, k1 _8 I7 Q8 L$ p3 p9 }
  640. LDA #$00, T/ P) u2 Q' a5 K; s
  641. STA PPU_Cur
    ) {' O3 P( x  B2 Z4 h$ f
  642. STA PPU_Addr,X1 {' @3 e3 |; d/ S" g) o! ~
  643. LDA PPU_Addr
    & S& |& w) U4 l4 m, _
  644. BNE PPU_Proc_Beg
    5 P, N: S) Q) K% Q2 }
  645. PPU_Proc_Ret- k6 L( j8 m" |
  646. RTS
    ) P7 }4 c5 x9 c6 z
  647. ;------------------------------! A, r* J$ e; p) `7 ]- \
  648. PPU_Proc_Beg  ;处理开始! U9 B4 N$ Y* C2 b& X3 s3 y( w) Z
  649. LDX #$00( x, @) e% w" v/ O
  650. STX PPU_MASK
    $ g: t" ^6 `& P1 @1 t0 A2 W
  651. ;------------------------------
    - A1 I3 L1 ]" x) |% @2 T4 g, T
  652. PPU_Mode_Select  ;模式选择
    # y4 H: ^0 k' _( Q6 }
  653. LDA PPU_Addr,X1 G+ l2 }9 T8 Z0 ]/ F
  654. CMP #Mode_Line
    + x  B: ]  g2 L" n
  655. BEQ PPU_Mode_Newline
    $ p' i# G" P1 |$ @- w( y
  656. CMP #Mode_Return
    5 m3 ?2 O+ X# b2 h' a7 W" V" c
  657. BEQ PPU_Mode_Return8 s! X8 U$ ]1 w+ d
  658. CMP #Mode_Clear
    1 k* l! M4 @! P1 y6 l
  659. BEQ PPU_Proc_Clear
    6 D; X7 R) E, T
  660. CMP #Mode_CntLine. X: o! g( l, p  s4 R1 V* }9 y
  661. BEQ PPU_Proc_Cnt_Line
    / T, B0 U' L! F0 [  r7 y
  662. RTS
    5 e/ V& ~! c9 m7 Z# H8 Y
  663. ;------------------------------3 b3 I& D5 i; X4 v/ I: J6 h/ E
  664. PPU_Mode_Return  ;转下行模式
    1 x/ Q$ `) V3 N" N8 `2 k- f) L$ m, g
  665. LDA PPU_Addr_L
    2 c1 `; m( D& w" @' i$ M  f, K
  666. CLC
    1 P" x8 L: ^0 z2 i/ G9 x
  667. ADC #$20
    6 E* G, f8 G; Y4 j( k
  668. STA PPU_Addr_L& m: Q, r8 q. r8 I4 [
  669. BCC PPU_Return_End
    : |9 t  ?. u- G% `. M8 [; X  n# O$ k
  670. INC PPU_Addr_H
    3 h* M7 y5 O7 Z) o6 J, l& l: B
  671. PPU_Return_End+ l# e1 x0 v$ O: d3 K
  672. JMP PPU_Set_Increaser" `" H: Z* Z4 f% q
  673. ;------------------------------1 C! D0 I! ?! j1 H$ U
  674. PPU_Mode_Newline  ;新起行模式
    ; w- V- V/ f, L7 U- {
  675. INX
    , u/ R* B1 b5 }" y
  676. LDA PPU_Addr,X% p2 s4 k( C. C% V1 V) [8 H
  677. STA PPU_Addr_H$ F( X) E% X  r4 l& `- P7 T
  678. INX: P* |- v9 R3 O6 N) G1 z
  679. LDA PPU_Addr,X
    + y3 C3 w6 O, M, _8 A
  680. STA PPU_Addr_L0 M" y4 @9 [, a
  681. ;------------------------------
    ) F' `# Z& S: U! J# T2 x1 ]% K
  682. PPU_Set_Increaser   ;设置写入地址
    5 _  j- W$ N7 D% _
  683. LDA PPU_Addr_H1 {: w% L1 L9 |; ]4 }2 Z
  684. STA PPU_ADDRESS% k5 Q+ |6 t6 ^1 \
  685. LDA PPU_Addr_L4 k/ ~! W1 P5 V4 W, {
  686. STA PPU_ADDRESS  K4 ^, a  v7 Q3 k* X
  687. ;------------------------------, m! i& K) o# n( p3 u
  688. PPU_Write   ;写入数据
    " x1 J% r0 y# a. t1 i& L/ J0 E
  689. INX+ L) p! I" N3 v/ M/ Y
  690. LDA PPU_Addr,X
    9 ~; c/ @* i- U
  691. CMP #Flag_Over
    6 L' d( _9 I  \: l
  692. BEQ PPU_Proc_End
    ! w/ p/ e, N" M6 A  L* D& ^
  693. STA PPU_DATA
    , |- g  A5 D% z; K, I( b
  694. JMP PPU_Write
    2 v: k+ r5 j2 e
  695. ;------------------------------
    " H: |2 k4 Z/ Q* Z  N5 J- G
  696. PPU_Proc_End  ;单行写入结束  L) e1 j4 G) s4 g+ K9 `. d: X
  697. INX
    9 V& n7 G9 q6 A7 x
  698. LDA PPU_Addr,X0 ^0 u) ~% V% X# @+ a7 Y. p
  699. BNE PPU_Mode_Select5 O, G( F) e9 X+ J
  700. STA PPU_Addr
    ( M/ L* ?, K. v4 v5 l0 m' h& _
  701. JSR Update_Palette_Color1 R% j, H+ a" h6 h/ y, b, R
  702. LDA #$00
    % x, y/ m. I$ U5 f5 `% f' x8 U
  703. STA PPU_ADDRESS
    2 K: t* c8 {2 }2 ^6 A
  704. STA PPU_ADDRESS
    # j/ B8 }4 B0 Z' C$ i
  705. STA Show_Track_Name4 g$ x6 Q; \9 }
  706. LDA #Scroll_X( _8 l$ Z1 E% ?, s1 t
  707. STA PPU_SCROLL
    - F- |" y+ F) ^
  708. LDA #Scroll_Y8 @% |1 z; r& k8 w5 c: G
  709. STA PPU_SCROLL: h5 {0 j$ h1 K% j1 L
  710. LDA Screen_State
    / w+ B4 C7 L) m! }; |
  711. STA PPU_MASK9 Z9 E0 G. `9 y6 P# r0 `0 a& U
  712. RTS
    + p7 S  ?8 L& {- `7 ~

  713. ; R0 p* K" `9 f; `
  714. PPU_Proc_Clear
    , `3 Q7 q+ C% g# R' E
  715. INX; Z8 m% L: u' k' P6 H
  716. LDA PPU_Addr,X) `' ~3 m* c/ K* z3 q2 q9 O: c
  717. STA PPU_ADDRESS
    . u2 ~' h+ ^5 G. m2 c4 `
  718. INX
    ; ?/ s7 Y4 e4 b* ?
  719. LDA PPU_Addr,X" i( I2 K2 o! U1 g% ]
  720. STA PPU_ADDRESS
    - p0 G! X9 M( m0 k
  721. INX$ {) k/ R3 ]+ Z. B# `
  722. LDY PPU_Addr,X- O5 m$ o" V- q& V- m
  723. LDA #$00
    ; q" c+ H5 p8 ^2 E
  724. PPU_Proc_Clear_Write9 n. R4 l% ?$ {/ W0 J
  725. STA PPU_DATA
    3 L- |; j. X  r5 v1 [) h& |4 d
  726. DEY! I" F: B; t) A3 ]/ a2 y& c% Q1 K& {
  727. BNE PPU_Proc_Clear_Write
    0 o( o# D4 I" E7 A! N
  728. JMP PPU_Proc_End) {( i: |+ P4 E1 I
  729. / \' d5 k- c3 U' j0 m2 S; R& V
  730. PPU_Proc_Cnt_Line
    / L9 z3 e- I# B* U! z! [2 Z
  731. INX
    / m; r1 ?- U" y: Y1 {3 ]
  732. LDA PPU_Addr,X5 t9 U, l  ]1 H" {' [- l- o% D
  733. STA PPU_ADDRESS: B  H( h" s8 ]
  734. INX
    ! t1 Z6 Q! C1 T' a, S+ T
  735. LDA PPU_Addr,X
    # a! Y$ K. W" m- S
  736. STA PPU_ADDRESS- m4 M# k8 z' ?7 g0 `
  737. INX
    4 o) _' R8 X1 |7 R
  738. LDY PPU_Addr,X
    # G: D* s' u1 T! D. }8 [8 |# f3 V
  739. PPU_Proc_Cnt_Line_Write
    * V5 L* I/ `& e5 k0 `! r6 Q
  740. INX
    % _) u# g5 [; o$ y  a0 @; s$ b& c/ _
  741. LDA PPU_Addr,X1 t6 k% H" {$ q* ~& l2 A. P
  742. STA PPU_DATA
    ( U6 m, k- Q5 c) p
  743. DEY
    7 v; k% c6 x, d
  744. BNE PPU_Proc_Cnt_Line_Write
    # i1 U; q! p& @, |5 x+ w9 D
  745. JMP PPU_Proc_End
    9 Z' s0 Y3 A$ l2 V, p

  746. : M3 J/ E! j/ @, }5 m
  747. ;==============================
    * a8 V7 Q6 u, Z1 O9 T4 j$ i
  748. HEX_To_Dec;十六进制转十进制0 v$ M: e- }" T5 W( }3 `3 J9 Y
  749. STA HEX_Data. L% e& d, I5 g5 P
  750. PHA6 F9 v# S$ l: s$ \0 L
  751. TXA/ H% d) O- x9 l2 n/ \
  752. PHA
    & w+ F/ J3 ?) Z
  753. LDX #$009 ?& D9 `4 {" G$ ?$ L2 l
  754. LDA #$00
    . U" U' R7 N6 _' i& z! s! V5 ^
  755. HEX_Cln
    ) t( Z1 y) |( ~& b/ v
  756. STA DEC_H,X
    + r; _+ ~% Q3 K2 p9 e
  757. INX1 g9 N7 L$ B' L$ J% X+ O
  758. CPX #$03+ C: h  j2 I) }& h; y3 r
  759. BCC HEX_Cln
    " p' t2 P/ j4 Y- }3 v: P
  760. LDA HEX_Data
    * _: L9 G  G- {" M+ ]
  761. ;------------------------------: x0 m! b: m5 i! |* T
  762. HEX_100
    , R* E3 b  C' J, N+ h# e
  763. CMP #100
    * r+ h" {$ s) i8 n2 k+ s- |7 a
  764. BCC HEX_108 m  f; I) ~1 ~1 Z& _
  765. SEC4 P8 y" v! k" v
  766. SBC #100
    4 ^" j! W" n) S8 m: f6 j( s5 ?( ~
  767. INC DEC_H8 m/ r5 w% U0 G3 B- \
  768. BNE HEX_1000 t5 U$ G. q& _7 g/ e4 l
  769. ;------------------------------5 ]+ R# n; i: f1 {: a
  770. HEX_10
    9 o' K/ k. \$ l( M6 [0 k
  771. CMP #103 j+ K$ W& D( J. Q, ]/ k* L
  772. BCC HEX_1
    $ M! ]8 R3 N" k; M! ~' K
  773. SEC
    0 H' x3 R9 Q5 C9 A
  774. SBC #102 q% k1 h/ J1 @" }
  775. INC DEC_T
    ) v' G4 }* o" M1 N5 Z
  776. BNE HEX_10
    0 g0 x; E3 J7 }3 e2 V4 X* V. W
  777. ;------------------------------; K& r3 ~8 g. {6 Y; Y% [7 ^
  778. HEX_16 E: `, L( n& w8 u1 s# [( b# Q8 X
  779. STA DEC_L
    * x& |+ @% W" E
  780. PLA5 _3 G2 O/ C- U
  781. TAX
    $ W7 A/ b! G7 S, \& L, n
  782. PLA
    " A5 h: [% J+ [6 Z- M# K$ d: k
  783. RTS& \, K1 O' y% V6 o- L! I' V
  784. - d  E, V) n+ W. ~6 |
  785. ;==============================3 L9 ^5 I+ u; P1 @; Y
  786. ;音乐曲目显示
    3 G# N" C  O, O
  787. Music_Show
    2 A: V  ?5 U5 w5 Z8 w
  788. LDA Music_Cur
    5 G: M2 V) v! T4 F6 n4 l
  789. CLC2 E8 c( U5 y* K' u
  790. ADC #$014 O' D! c. P2 ]( f* }' Q
  791. JSR HEX_To_Dec* s, B- b" F! ]3 C8 ]
  792. LDX PPU_Cur) f7 g8 q1 Y. s+ r0 B3 m4 n
  793. LDA #$FD
    # G4 a. d" t. |) ]- J9 A
  794. STA PPU_Addr,X
    8 T. o& b, `1 o6 I! h* M
  795. INX$ ]. {) }/ V& D9 G, L2 ~" D9 {, y& a
  796. LDA #HIGH(Play_Index_Pos)
    + \. e! Y8 `6 R. i! P
  797. STA PPU_Addr,X
    ! p) j, B( U0 E# p, n) j# f
  798. INX4 y% \+ Q" t- i5 m  ^. @
  799. LDA #LOW(Play_Index_Pos)
    5 q8 \$ P* V) a: j
  800. STA PPU_Addr,X
    8 _" B. N' U/ m& [& K7 ]% T9 G
  801. INX( Y' c1 W) g( `$ T1 E0 D
  802. : E7 R  Y5 b/ G  v% J
  803. .IF Music_Song_Total > 99% ^# ^3 H! o& V2 v& E
  804. LDA DEC_H
    . G" S' ?2 ^& ~( B
  805. ORA #$30# \* i' y. d2 P: P+ M5 H
  806. STA PPU_Addr,X
    ! y# \8 b4 _& J& u
  807. INX  z* z& Z' z5 r% Y# U1 ~( f
  808. .ENDIF
    $ J- U5 o- |. X  X. F$ S8 B

  809. # O2 B/ w- r$ o! n7 `
  810. .IF Music_Song_Total > 9
    $ c( G/ \9 z( @1 V) V
  811. LDA DEC_T  g, x  H7 z: V
  812. ORA #$30; i! W& c- h% G8 y! f9 B
  813. STA PPU_Addr,X8 `2 ]5 y1 x$ ~# e
  814. INX( w: ^5 q- q( L
  815. .ENDIF: l1 A: ^) U: M1 d( a$ D
  816.   r! {" \4 L4 B6 n
  817. LDA DEC_L! J$ o+ [# i; H. B/ k% [. R
  818. ORA #$30
    - y; O8 G6 Z. ]' D9 _9 L
  819. STA PPU_Addr,X
    , o: r, W# e1 J; q: |
  820. INX' g' ^4 v) e$ E: R
  821. ( @0 J! A/ n  }$ |  {( h+ w" k9 H* e7 q6 ~
  822. LDA #'/'$ e0 H9 M$ X# {; }) e1 ~
  823. STA PPU_Addr,X: r& ?& w! `/ P" A: ?: V8 ]
  824. INX) e8 t4 D( }* b- r* ^
  825. Music_Show_Total- j3 W- _, y4 v
  826. LDA #Music_Song_Total
    ' a$ D# W2 n9 S! h( ~  Y8 N
  827. JSR HEX_To_Dec
    $ N3 F% D  K9 n6 W

  828. , T$ i3 ?( P  d/ m1 w
  829. .IF Music_Song_Total > 99% o- v8 O' o: K% z4 i" e
  830. LDA DEC_H2 R+ ?# f* H! T3 C0 B
  831. ORA #$304 K3 I4 s0 `. A* l( ^! e) B
  832. STA PPU_Addr,X
    ( R* u: L7 L8 L: ]  Q1 h
  833. INX7 }% e" Q3 R/ ?1 I( @# D
  834. .ENDIF* M0 z" b6 j/ r& ]( x) U- z
  835. + W' k- X+ j; ?$ p. {
  836. .IF Music_Song_Total > 9; E5 D; z$ d1 F4 A6 z/ B
  837. LDA DEC_T
    , Z) h0 Q5 j: \# x
  838. ORA #$304 A9 R; S+ K1 U$ c4 T6 _
  839. STA PPU_Addr,X( H3 {$ g$ e" ^0 P
  840. INX% |$ E" W) Y( I2 ~/ m' l
  841. .ENDIF" A) A5 T' h4 {2 g* F: D% w

  842. ) N4 y4 y, W1 i9 \( Z6 {
  843. LDA DEC_L
    . T5 x5 ]8 Q0 i
  844. ORA #$30
    - _$ [! L% a' }9 M
  845. STA PPU_Addr,X  k5 x8 ~0 y7 O; W( v
  846. INX
    ) Z" ~# X/ c2 @8 s# f

  847. 8 K6 I9 G, S/ ~$ s! G$ D
  848. JSR PPU_End( k3 @" B# M1 r% e# t5 c* h7 O
  849. Music_Show_End1 N( `% |7 y0 \$ L, O
  850. RTS
    - ]3 L+ r# K7 [8 S1 I8 R+ K  }; W

  851. 7 g( P0 G  H8 |
  852. ;==============================$ l( ]( j' ^7 _$ R% P
  853. Time_Show;播放时间显示% u/ l8 e  m, m/ ~. K9 r
  854. JSR PPU_Addr_Set
    3 x& T& o$ s% t6 T; d* E7 C
  855. LDA #HIGH(Play_Time_Pos)8 S3 J$ I9 j4 K2 q3 a& ^
  856. STA PPU_Addr,X
    ; E3 O8 s+ l/ i( Z2 D
  857. INX
    6 u1 C3 w; I3 W% m) O1 f* F
  858. LDA #LOW(Play_Time_Pos)
    2 _1 A$ c; a2 l% m* f0 u
  859. STA PPU_Addr,X
    6 D# @& m$ V" H* ?% e: }
  860. INX, G" _* m7 M- _. t( u3 @
  861. Time_Show_H
      S% R1 z. H" x4 C  r/ u8 v& y7 w+ G
  862. LDA Time_H* K( K2 x# }2 f' g1 U# G, }/ J% T; s
  863. JSR HEX_To_Dec
    - |' u- T7 O5 a8 S2 `
  864. JSR Time_Digit* \' b7 T2 L; Z; q4 K
  865. LDA #':'5 D; i! ?" C/ V$ I2 P' r7 e( o) |
  866. STA PPU_Addr,X) n% j3 e0 m9 M* ~3 h4 W
  867. INX, L5 ?. ^% K- y6 F
  868. Time_Show_M
    ' J5 M0 ~# R2 J7 F8 |
  869. LDA Time_M
    5 c# j- l2 p: S  d/ S; S( G6 A, q3 |
  870. JSR HEX_To_Dec
    . |9 e4 W" ]$ j' P
  871. JSR Time_Digit
    8 k0 m% ?* v; O" Q
  872. LDA #':'
    * X& q: k1 o' x; z9 F" _
  873. STA PPU_Addr,X
    9 c3 E' \8 `' ~6 Q
  874. INX
    # V: D! d$ {9 F- z( Q
  875. Time_Show_S
    ) M4 F" N2 l, F4 g/ T6 o
  876. LDA Time_S
    4 \* q/ s  x& S: [' s, w
  877. JSR HEX_To_Dec
    / i' v) O* [$ i' W9 F7 z
  878. JSR Time_Digit8 c7 a3 y8 t$ U9 m! M# ?
  879. JSR PPU_End1 \0 b  M0 e+ @/ T
  880. Time_Show_End8 l5 c# M& q7 @
  881. RTS# O, {5 f7 N8 l, j9 h5 h; h
  882. 0 e& }# }4 r: ~, ?6 |  R2 G: d
  883. Time_Digit
    & _; y; m/ x- a$ m
  884. LDA DEC_T, N! y0 R* J% N) F3 r
  885. ORA #$30
    ! N: Y1 h4 Q, F
  886. STA PPU_Addr,X4 o' c( A* c* `* I
  887. INX
    - y* A! S7 @' l8 X4 q# m7 W- W6 I
  888. LDA DEC_L9 i: b9 ^0 ^5 B0 c( ?( L
  889. ORA #$301 @0 x8 F( d  C: K# z9 \
  890. STA PPU_Addr,X( H6 d& H) e2 m' E6 G. P$ \
  891. INX
    * a/ f: D& k; s3 \& s
  892. RTS4 i" l. X& ]! r: u9 ~
  893. : O. D% S2 p3 m; C9 }- s# j
  894. ;==============================+ W4 j; S2 Z& c9 N9 h
  895. Time_Count;计时
    2 r1 g( W  S8 o; q* Q. C! b5 @! e
  896. LDA Music_State
    / A5 j) ~3 ^( t$ Z. v$ u
  897. ORA Time_Wait_Cnt
    ) [6 Y! d; s6 z! s
  898. BNE Time_Count_End
    ; Z7 W/ Z1 C) L6 b  A, v
  899. INC Time_Cnt! }% e7 b6 k3 w7 N' ]
  900. LDA Time_Cnt, }) Z8 E' E. u5 v
  901. CMP #60# o" H& F: h/ U/ v
  902. BCC Time_Count_End" R. x' f3 l  q3 D  D5 m$ k/ A+ O
  903. LDA #00
    ' ^6 l" \# `/ A7 C+ _/ H) U# i9 S; [( b
  904. STA Time_Cnt! |) e! p( m) K9 Y( \
  905. INC Time_S
    , T: p! L6 c/ n8 Q
  906. ) Y  H6 F: @% L. c- c
  907. Time_S_Cnt
    7 ^. Z9 f5 U% C7 @$ i3 L" }
  908. LDA Time_S( O5 R# M% l% U' e# v
  909. CMP #60
    : y% k2 @- B1 D
  910. BCC Time_Count_End
    ) r8 Q" p  Q! t: y! ?- T
  911. LDA #00
    & m' f5 D8 p+ b4 R) ?: Z% l3 L
  912. STA Time_S
    ) C1 t' j3 u! I! V4 P
  913. INC Time_M
    ) j/ S1 W9 ~/ e. G6 t" i0 f. L6 e! I

  914. 3 t. \( E) W; H# C( t
  915. Time_M_Cnt
    # M$ D% n. C2 I6 M/ p. J
  916. LDA Time_M/ ^$ b$ ?$ A: V$ m  d' ~
  917. CMP #60
    2 V+ C8 o! g0 q7 {: q) n; @) t8 I% ?
  918. BCC Time_Count_End( G. X2 e; U1 s" K+ m4 n
  919. LDA #00- X* @) X0 ?  q9 B" v  @4 ?
  920. STA Time_M
    3 s! [; t3 v! L, \/ e( P8 X
  921. INC Time_H
    - `. ]; {  a. Z# Q# Y2 b  S

  922. $ \4 N6 a( H$ x& R9 P  M9 B6 Z$ q1 F
  923. Time_H_Cnt/ [. D) o5 e2 _, H! w, @
  924. LDA Time_H
    : I( }' F$ p0 m  ?* g6 F; |6 F4 {
  925. CMP #249 a; Y4 }4 a7 b- c4 z8 f4 N
  926. BCC Time_Count_End
    ' g0 N( }- Q3 E' \
  927. LDA #00) t, }! f# _/ {( k5 F0 w
  928. STA Time_H
    0 T8 J; F1 v( o$ q( A6 c; o6 P2 s
  929. 5 y) f6 g: j) T9 K& q$ j5 a  y
  930. Time_Count_End( C: ]# j8 ^7 V) o7 F
  931. RTS
    7 c: x4 J$ i0 L% q+ @
  932. ( {/ |( P% Z1 Z6 \
  933. ;==============================3 J5 K+ m, F; F: D
  934. Time_ReSet;播放时间重置
    6 b  d8 O/ p* e/ q0 h
  935. LDA #$00
    - I; j+ s+ U' Y6 Y
  936. STA Time_S
    8 e: W* w5 O2 K1 ]( _
  937. STA Time_M / O4 j. ^) t' E. G; _
  938. STA Time_H/ s7 r8 A  `0 t5 f
  939. STA Time_Cnt
    $ p. ^: @0 O5 x  q# Q9 y$ I4 C3 X% o
  940. RTS
    0 Q7 N: j1 A6 a

  941. ( \9 D5 R7 \/ x# ~; I$ J
  942. ;==============================
    , r) `  }9 D+ i: p
  943. Music_Bar_ReSet;音乐条重置6 C$ m; J% m) k  t
  944. LDA #$00/ z! i' r) q) C
  945. LDX #$00
    0 e3 W9 C) y! G% X0 I
  946. Music_Bar_ReSet_Set0 `( z- Y) J, v4 g, i6 h6 p* d
  947. STA Sound_Bar,X& t5 N+ a/ W/ C' x9 [: `# g, T
  948. INX
    , p1 B6 I  ]' o% i0 N; \
  949. CPX #$10; F: T, D, @6 y8 r! N3 _, ^, w4 I
  950. BCC Music_Bar_ReSet_Set
    & q8 c, Q5 r9 q" m. S& e
  951. RTS" G8 E7 t, t( [: ?0 i0 S! S
  952. 0 s7 Z  r9 l* H4 b. b
  953. ;==============================
    2 O3 C0 E! E. g5 s2 \
  954. PPU_Data;PPU数据写入
    ( A) ^8 H) a1 s# G
  955. STY Data_L
    " }, g! s3 m3 L4 ^
  956. STX Data_H
    $ F6 B6 x1 k) r$ p2 m
  957. LDY #$FF* B' `' Y- @" J: F! C9 {5 f
  958. LDX PPU_Cur4 b9 o2 j" G! R8 A- `& e! d
  959. DEX2 z$ @& C* r: p7 F% z! f
  960. PPU_Data_Beg6 B/ I7 b: x, o6 |! B& R
  961. INX2 T7 h0 m* R6 U+ [! B7 F  }% X
  962. INY. F- S3 D& ]6 v* F  s9 p
  963. LDA [Data_L],Y( l: G9 R5 H- `
  964. STA PPU_Addr,X
    ) n, p/ c  c* s1 z% S1 ?: f6 P
  965. BNE PPU_Data_Beg
    " d- B+ U! Y& Q0 X1 |
  966. STX PPU_Cur* `8 [; r* I5 N0 ?* H
  967. PPU_Data_End+ K' C0 t( J+ J: ^1 |
  968. RTS
    ' j2 H+ q0 {8 ~8 g8 U+ r* h. \4 `

  969. $ ]" f0 C# @1 N" e- H+ [
  970. ;==============================+ i* W, N8 ~0 p4 `' W7 |3 }. L
  971. Music_Stata_Show;播放状态显示
    ( O; Z( ^  w, f% J# w6 F* P9 ]/ H
  972. LDA Music_State
    ; E! i& ?7 @/ A
  973. BEQ Music_Stata_Show_Play' O; N0 I' y3 }* y
  974. Music_Stata_Show_Stop
    & {4 e$ D" P# s" T
  975. LDY #LOW(Music_State_Stop)* r) v  k$ `' ^, W4 B5 @
  976. LDX #HIGH(Music_State_Stop)
    8 @2 w, L7 t  ^4 ?% v# z
  977. JSR PPU_Data) x  K8 W6 J7 x% T- P* u
  978. RTS1 x& p- q2 @* ]* d  k3 ^) F
  979. Music_Stata_Show_Play* P) F6 z3 g5 T* `! Z
  980. LDY #LOW(Music_State_Play)
    % c/ s& l8 q8 L- n+ f/ {
  981. LDX #HIGH(Music_State_Play)
    ! ^2 v8 Z( I3 @+ f% r; Z
  982. JSR PPU_Data: S* i1 X  D5 O" _# T3 I, Z9 _' H' g4 B
  983. RTS
    ; ~4 a7 r: L6 S
  984. $ K; O4 c" ]4 s! E# _! u( {# _
  985. .IF SOUND_BAR_SHOW_ENABLE# L4 |" G/ m& L% |1 @. ^9 I
  986. ;==============================$ ?' _" M9 v0 f# q" n" t
  987. Sound_Bar_Text_Set;标题与音乐条初始化, g  G. d8 P1 x/ `" ?7 c, \$ m! {
  988. LDY #LOW(Sound_Bar_Text_Data)
    6 t1 T! B- w# k8 h- Z: \
  989. LDX #HIGH(Sound_Bar_Text_Data)
    - A$ m& _0 C& Y5 E  d, n5 B) C
  990. JSR PPU_Data6 e' Q* ^3 @, T" L! M
  991. RTS
    , y6 C/ Y) T' ?
  992. ( |5 ~' {# t, y! J: |# k( M: m
  993. .ENDIF$ e1 S1 B- z$ k) x( S6 k

  994. 4 L( x( X* \0 H' q. \
  995. ;==============================
    ( }2 F& a2 R2 ~) t
  996. Set_NameTable_Attributes;设置命名表属性5 W. c( o' m3 j' M6 K
  997. LDA PPU_STATUS  T4 H: @, `& I/ s# J2 f2 J
  998. LDA #$235 R9 O( u. ~9 h4 `6 g! t9 A
  999. STA PPU_ADDRESS, T5 }& f0 s: b) {2 [( k$ @' ?2 u4 d
  1000. LDA #$C0
    , @  [4 @' |! s
  1001. STA PPU_ADDRESS- i5 B5 ]% |' }2 l6 C4 Y
  1002. LDX #$00
    $ t0 {' {" ~3 o7 q8 ~& c. B; s
  1003. Set_NameTable_Attributes_Write
    . g$ q( {4 J# ^5 a8 ?  a4 y
  1004. LDA Palette_Attributes,X
    3 V* J5 I6 g* ?* S' y3 J( s
  1005. STA PPU_DATA
    / }4 H3 ^! n+ `& O1 U" U' m
  1006. INX
    3 H: u8 l2 A6 y& r* Y/ N
  1007. CPX #$40
    3 N+ l3 Z- E9 C2 {$ p2 q3 T
  1008. BCC Set_NameTable_Attributes_Write! ]" v' w8 W8 z
  1009. RTS' d* D. h+ w3 Y
  1010. 6 |1 H9 [. P! ?1 ~- d
  1011. ;==============================
    6 k- R9 Y+ V# v5 [3 i0 T4 N! u
  1012. Set_Palette_Color;设置调色板数据
    # B% Q& N8 N6 q' H% K/ ]# r
  1013. LDA PPU_STATUS- l* c( |! p" [1 K
  1014. LDA #$3F' H" ^: N5 R# d& Q
  1015. STA PPU_ADDRESS
    3 l) g% |+ W. X  J9 I5 j, I
  1016. LDA #$00
    . d' q( p% u1 W) g
  1017. STA PPU_ADDRESS. m9 A% [9 ?# w, b
  1018. LDX #$00
    # x) R5 B5 U2 r7 L5 g) s' v: v
  1019. Set_Palette_Color_Write! S, Q$ A! M0 k- f+ }, N( o3 `+ a% `
  1020. LDA Palette_Data,X" N% r+ }! g' [  _! i* _5 i
  1021. STA PPU_DATA
    ' z3 k( H. l' a2 K- z9 ~" r
  1022. INX4 W; f1 x2 I3 D1 L7 x# |: S9 R
  1023. CPX #$20
    7 n% o+ u  R, _6 v
  1024. BCC Set_Palette_Color_Write
    8 }0 V  S; Z- M. o2 c5 B* n) L
  1025. RTS
    + M% l/ l- |% u  R2 r) R+ W( J+ M0 G
  1026. : g' X" T7 _& m5 F# `
  1027. ;==============================7 ^+ e( z2 W/ T8 O5 B
  1028. Init_Palette_Addr;初始化调色板数据
    * q  q  b6 G. P; P4 n9 b& V
  1029. LDX #$00
    . o3 u" l0 A. B
  1030. Init_Palette_Addr_Write/ Z4 E; w  O2 C& }  ?7 A7 x
  1031. LDA Palette_Data,X/ o6 {" @; q1 Z$ }" F( ]
  1032. STA Palette_Addr,X* R0 b! I9 c2 ~" l  V- {
  1033. INX! R4 }# e' V3 e
  1034. CPX #$20, H* x% f2 B5 S- H% g
  1035. BCC Init_Palette_Addr_Write. j$ L- m. w( F. e% x6 r. V# K9 n
  1036. RTS+ t/ m8 k9 u. v
  1037. / s3 S2 R: Q4 D( l) {2 m1 e
  1038. ;==============================3 G" u( B! X$ t
  1039. Update_Palette_Color;更新调色板颜色) b, R! }0 V6 k' B' z! Q
  1040. LDA Show_Track_Name3 z: t/ \% [; X
  1041. BNE Update_Palette_Color_End
    / {' ?0 r; [/ W1 U8 S5 @# K" T
  1042. LDA Palette_Update_Flag
    7 j6 P& Y* G2 H  @1 d1 {
  1043. BEQ Update_Palette_Color_End1 ^( a- O2 H( A3 ~  G: Q9 N
  1044. LDA #$3F
    8 J9 f! a6 C4 G! B5 M; q* Q2 n- z
  1045. STA PPU_ADDRESS
    ; g' [, z6 i9 K) O6 w
  1046. LDA #$00: \+ c- I5 J1 o# i6 [
  1047. STA PPU_ADDRESS
    9 a$ _( W% Z9 N, J1 X
  1048. LDX #$00) |6 G" o1 S7 o. A; ?% a
  1049. Update_Palette_Color_Write
    * Z/ r7 [* j- o% k) S/ D5 R/ ^
  1050. LDA Palette_Addr,X% Q4 z7 N7 S% d5 C2 m( v! c
  1051. STA PPU_DATA7 F6 T3 D. v) G' G0 J
  1052. INX
    & Q$ X! [" \# |( \
  1053. CPX #$20! v7 x' S( ?& l( f
  1054. BCC Update_Palette_Color_Write
    , M* Y  a# m: E2 f. @. b: [7 t
  1055. LDA #$008 j. i. A' P4 V2 @  N; S
  1056. STA Palette_Update_Flag3 H9 {% j- ]9 A7 D1 u- y
  1057. Update_Palette_Color_End
    & @8 I0 F% V7 R4 Y  K3 e
  1058. RTS
    $ t$ K# |4 Z3 H7 V0 }- K5 \* g

  1059. 4 c# n: P1 k, H5 h
  1060. ;==============================
    9 ]2 X, ]/ {' U; J: E' v$ g# D
  1061. Update_Palette_Data;更新调色板数据2 t8 @. ?' T" k0 q+ Y/ R, |7 i
  1062. LDA Show_Track_Name
    5 r6 r4 l5 H  o. J- ~
  1063. BNE Update_Palette_Data_End
    9 r8 ?' u7 R- F7 [/ I+ P0 }
  1064. LDA Music_State$ l/ p: ?  I/ G  L, T  B5 A* a7 U
  1065. BNE Update_Palette_Data_End# e1 F9 X/ P6 M8 r+ K+ q
  1066. Update_Palette_Data_Check
    7 Q* D/ g* D% Q" i$ b
  1067. LDA Palette_Wait_Cnt
    9 B9 Q- f' ]" z
  1068. BPL Update_Palette_Data_Check_Over- b6 \5 u0 a9 h
  1069. LDA #Palette_Update_Interval1 H5 t" S! D6 n/ c) a
  1070. STA Palette_Wait_Cnt
    # q) ?  o/ S2 m5 j
  1071. Update_Palette_Data_Check_Over
    6 z1 N9 |: r8 X3 f( q0 T
  1072. DEC Palette_Wait_Cnt: L+ N. N% ?( _/ S/ g: d/ Z
  1073. BNE Update_Palette_Data_End9 c$ O0 L$ n; B2 E' A( B
  1074. INC Palette_Update_Flag
    , G8 ^$ t% m& C4 a
  1075. LDA #Palette_Update_Interval
    ! G: X3 y) ^$ M7 i- z4 [' _2 Y7 ?
  1076. STA Palette_Wait_Cnt0 i! @- ~" L/ X/ |+ H7 e
  1077. LDA Palette_Update_Addr0 G% `! r$ p7 [- E3 Y% V
  1078. CMP #Palette_Update_Max
    $ y: a7 }. E0 |- p9 n
  1079. BNE Update_Palette_Data_Set
    " }) r+ {7 t9 p1 h: o  J
  1080. LDA #Palette_Update_Min - 1$ r9 {) X; s# J9 W% R
  1081. STA Palette_Update_Addr
    ; H- }6 T) w9 n6 E+ x+ Q5 N* F6 L
  1082. Update_Palette_Data_Set) ^  @/ k+ z, `$ r1 B( H
  1083. INC Palette_Update_Addr
    ! p7 @; [' P7 k. W2 i9 [8 h1 r% ]
  1084. Update_Palette_Data_End
    0 M( c+ J: ~  a, Y2 H: L
  1085. RTS
    1 s. j+ ]1 z4 ?
  1086.   \0 a3 Q% Y+ _5 r
  1087. ;==============================, [+ s# _9 u6 p( Z6 c9 L
  1088. Show_Music_Text;显示静态文本
    . r, ~9 y* }4 z/ @5 F! _2 Y& q. \
  1089. LDX #$008 e4 L, i' ?) O# a3 x
  1090. Show_Music_Text_Set
    6 I+ P8 C( i6 w: Z. l
  1091. LDA Static_Text_Data,X
    : G; G+ }* ?( o) u; n; `% r
  1092. STA Data_L
    & Q* ?8 {8 H+ r
  1093. INX
    ) j3 t! e, I( I. ^
  1094. LDA Static_Text_Data,X; X" `; E, O" A2 p
  1095. STA Data_H
      ~& P; n6 L4 E: r; S
  1096. INX
    ' O0 e2 H* S  m6 X
  1097. LDY #$00- S6 q! \1 H% E+ H- `" K
  1098. LDA [Data_L],Y1 @# E9 G" d& }$ r
  1099. STA Data_Cnt' j& A  C6 [# `! e: c, T  m; s
  1100. DEX
    * y, w' e8 Z5 v0 W8 ?
  1101. DEX( H7 D9 X2 K. @/ i- F+ S4 l
  1102. LDA Static_Text_Pos,X! V: k) C9 x. s" f5 `: F/ l
  1103. STA PPU_ADDRESS  q/ S, T& P; q4 ~0 b. p
  1104. INX
    7 E; E% j% H8 X  F6 R) x
  1105. LDA #$201 W  w: M; t' [  U" Q- q
  1106. SEC, _) I' W6 p$ K, N6 ]% V
  1107. SBC Data_Cnt
    / b9 B; b$ ~0 Y* k! l
  1108. LSR A$ ]+ |- u. M6 v6 K3 V
  1109. STA Data_Buf
    - b- |, `. w' A+ V
  1110. LDA Static_Text_Pos,X$ p+ t/ q  d2 [9 [  v
  1111. AND #$E0
    ; h. d# A) B: O7 d: j0 ~. J& n, c
  1112. CLC
    $ V# A$ l# e: Z' d' h- N$ I
  1113. ADC Data_Buf
    # E7 |2 i0 N8 V+ N' J" w
  1114. STA PPU_ADDRESS
    5 P6 F/ |  @9 R8 w
  1115. INX. G& u( q0 _3 |0 s  d4 q
  1116. Show_Music_Text_Set_Write
    4 M$ |. X: ^) f
  1117. INY. X! ?5 u5 ~6 ^0 m& N6 _) {; u7 l
  1118. LDA [Data_L],Y$ L& l) T2 i' L8 T# a/ I
  1119. STA PPU_DATA
    ' T# Q! g9 {) z' s
  1120. DEC Data_Cnt3 D& B' [% @6 x" h4 f/ `) Q
  1121. BNE Show_Music_Text_Set_Write
    4 Z* v% |( O' }9 U
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos: s5 O* k4 A/ S
  1123. BCC Show_Music_Text_Set
    ! K4 g) C+ P  A0 `; C
  1124. RTS0 C* }8 K* u% V* s' L0 K

  1125.   L# @! v( k; Y; P& E$ t7 }2 f
  1126. ;==============================; [8 m7 r; P' S4 f
  1127. .IF Track_Name_Pos;显示曲目信息/ k6 e' r' G% g5 a
  1128. Show_Track_Info# p& ]- ]! O+ z! {) P, s
  1129. INC Show_Track_Name* g; \. v" _( U3 d
  1130. Show_Track_Info_Clear" p$ T6 c! y( P" y
  1131. LDX PPU_Cur
    4 ^: W1 l. v$ O! z6 Z
  1132. LDA #Mode_Clear" B6 e, R5 e: l* Q! a  v9 b
  1133. STA PPU_Addr,X
    8 w1 @6 j) A# N9 p- s
  1134. INX- {! `" `! u3 {8 f: d* B

  1135. ; Y4 h+ d  n% t  _
  1136. LDA Music_Last
    ( r- ?) W7 b- H/ X
  1137. JSR Show_Get_Track_Name_Center_Pos
    ( i  D+ [! F$ T* ~1 v4 a, E+ _
  1138. Show_Track_Info_Write_Cur( p; V  Y, C- b6 N
  1139. LDA #Mode_CntLine
    ! v4 B) [3 D# n. ^
  1140. STA PPU_Addr,X
    0 G2 Z: |" W1 P/ K
  1141. INX3 K$ O5 Y- P( g5 L3 g8 b0 |0 A

  1142. 7 @, p! b2 V+ x+ r4 y& F
  1143. LDA Music_Cur
    3 B( U# H, @9 C: r0 ~1 X0 }
  1144. JSR Show_Get_Track_Name_Center_Pos0 p7 d. X& J! V

  1145. 9 T6 ]: C' V$ E$ Q
  1146. Show_Track_Info_Write_Cur_Data
    8 E7 n+ @7 X) C3 T+ _' O
  1147. INY
    / e% G1 v1 e3 w7 M8 s
  1148. LDA [Data_L],Y9 a( @# O4 t% \2 i& b' o
  1149. STA PPU_Addr,X7 T9 D, G0 ?1 E& r9 N2 ~. |
  1150. INX
    # B- s- [7 a4 e0 _
  1151. DEC Data_Cnt
      j1 w4 [. ?7 [
  1152. BNE Show_Track_Info_Write_Cur_Data6 `+ n7 ?8 c! ]/ I+ ^- g( h
  1153. Show_Track_Info_End- J" e4 Y9 S' a: q! U. n
  1154. STX PPU_Cur
    8 l7 L4 h7 e' g+ B% i7 M1 M4 S' V
  1155. RTS
    5 g5 n; X+ A1 W& V* L
  1156. ! U$ T4 h. F0 X, `% F
  1157. ;==============================4 t) v: ?8 W- S2 D/ D
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    9 `* l9 W6 D! N
  1159. ASL A
    % u8 T/ I# R4 J# W9 m+ B
  1160. TAY4 d3 M9 `' W. D- ~# M
  1161. LDA Track_Name_Addr,Y
    4 }% ]2 L& h* M% C; [$ k
  1162. STA Data_L+ \9 [) D' c4 R9 C! y9 P$ ]
  1163. INY' i+ I( C0 B2 m! |
  1164. LDA Track_Name_Addr,Y9 `4 o% h* M% D* e. t$ }5 b
  1165. STA Data_H: C/ f7 h) g" o/ C! X! Z9 @
  1166. LDY #$00
    . d8 P# }: x& Z6 O; W
  1167. LDA [Data_L],Y& |5 ?0 h6 e% s/ Q5 z) j
  1168. STA Data_Cnt6 H/ m( B1 w) [9 F1 @% M
  1169. LDA #$209 c1 I) c- \4 }- M! l" M
  1170. SEC
    3 d6 M6 F6 H. ]+ n7 ?
  1171. SBC Data_Cnt
    1 g4 J, ~4 K' v4 e0 ?
  1172. LSR A7 {9 ~' H' Q+ T- _) ?
  1173. STA Data_Buf) a  K0 S, b7 A5 f4 Y8 W" j
  1174. LDA #HIGH(Track_Name_Pos)+ N3 u" F: h$ j2 B. e; \
  1175. STA PPU_Addr,X% A7 m& W2 S' y! I# K
  1176. INX- O- c0 p8 w* T5 q
  1177. LDA #LOW(Track_Name_Pos)4 \# h9 ]/ S. q% V2 x( K* C- [% x
  1178. AND #$E0
    3 O2 ]3 c/ l+ l) i/ B& ^. \9 V
  1179. CLC& c9 j$ P& ?- m1 E) U2 }
  1180. ADC Data_Buf6 z3 r0 A! F; b7 b6 N5 h1 Z& H7 @
  1181. STA PPU_Addr,X) i4 `( j, L; E' `
  1182. INX
    7 _' J; T1 r. G5 v' H: J6 r7 o
  1183. LDA Data_Cnt5 n: k1 E2 @9 Y+ v8 c' c; U
  1184. STA PPU_Addr,X( ]6 V  M5 ~1 e3 D7 a0 A
  1185. INX/ p- x+ W0 \) Y1 W* j# N
  1186. Show_Get_Pos_Center_End7 g  ?8 E2 e2 ]  ^% ~+ i
  1187. RTS
    3 n3 u2 |7 @/ n+ R6 R5 z# [
  1188. .ENDIF
    , Y! T* ?, |( U9 G5 C

  1189. 0 A4 R% Y/ Z8 W  v! H/ f
  1190. ;------------------------------
    / |7 ~1 B: O$ N+ \2 e9 Q+ Z1 b) O
  1191. ;命名表数据
    " @; b+ P: {3 U
  1192. Palette_Attributes# L3 N% Q( H/ y$ t$ b' N6 c0 t
  1193. .IF SOUND_BAR_SHOW_ENABLE2 n( Z0 w9 k+ d( F+ k+ C' d
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    6 M4 H& ]4 `( I% Z3 e9 D
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    $ f  B! {; e9 U3 }* U
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    1 M' B1 m) L; B
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    1 h% n0 F6 F" y* z: _( x5 Z) f* ]
  1198. .ELSE- ?# y: Z9 a: _4 O( K
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ' N3 S  @+ b* j- Y1 |2 ]: o
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF: p+ }4 E4 X  }8 _8 n% B
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$553 j8 L9 u; ]4 S( j% F8 u  i
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    8 S% g/ y% Q/ }5 J" R
  1203. .ENDIF: a, j. N" L7 P7 J8 F* S

  1204. " Q$ z' f  r  L+ r4 E! L
  1205. ;------------------------------
    * j( u6 F6 W$ H
  1206. ;调色板数据
    ! H8 H) r# q6 E& ~' x4 P7 V
  1207. Palette_Data7 w$ L6 h$ V3 F
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F) Z# O9 a1 ~6 z. X+ R2 H( R
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F' y! F& W' n: c3 w  [7 Q+ V

  1210. $ U" J9 o" j) t& R: c$ A
  1211. ;------------------------------; g2 `3 |$ D4 @( L0 I/ ]
  1212. Static_Text_Data
    ( [) h" h! f6 N. i/ O5 y# t2 s
  1213. .WORD Static_Text_Title_Data
    9 Z2 k9 w6 E7 I3 W0 `/ u+ N
  1214. .WORD Static_Text_Author_Data
    3 V7 W. F& j( i) _, o& _: o8 E
  1215. .WORD Static_Text_Date_Data
    " x9 V8 F1 T0 h; i1 l3 K) R# i
  1216. Static_Text_Data_End
    * M4 j) A0 l( P

  1217. 1 h* h' S4 n- C7 [* W
  1218. ;------------------------------: U$ x+ R, F; c7 j9 [
  1219. Static_Text_Pos: {& q% d. x3 @' [  m4 Q& h
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    8 \0 B# i0 O6 X8 b1 A5 O
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)/ x; z3 t& {) u7 P
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
      r& [4 _" A, k# W+ a
  1223. Static_Text_Pos_End/ `/ P% R5 }3 r# f+ i; T6 @

  1224. $ P  ^7 L) x4 @. l8 F/ o3 Y
  1225. ;------------------------------3 z( b" V. w- b* L# u$ g6 d: [# z
  1226. Music_State_Stop
    + b: K) l# K3 h6 M; |4 w
  1227. .IF SOUND_BAR_SHOW_ENABLE0 ]- M) p2 _" }& T
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00% }1 x8 c/ P5 t7 s! ]9 H
  1229. ELSE
    $ E) R7 E2 y6 g+ I
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00, H- b: ^/ s+ }( {& }: U3 x) {7 k
  1231. .ENDIF) Q2 O1 \! c8 \# a  O) Q
  1232. Music_State_Play, ^0 u* D3 ?* `8 N! R1 n
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    % Y) `( t7 {# E0 V

  1234. % ]  b, ?8 Z" [+ ]# N
  1235. ;------------------------------$ w+ Y/ J# ?$ W$ f  L
  1236. Sound_Bar_Text_Data;声音类型文本* z2 E/ \1 F9 V( F' O
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)7 W' v* c. Y: T) K5 X
  1238. .DB "SQ1-",$FF# I; _* k% x% q% @
  1239. .DB $FE,"SQ2-",$FF+ g8 |$ d7 U) M( V( f
  1240. .DB $FE,"TRI-",$FF' ^6 W& S! _3 u& b1 O$ r2 H
  1241. .DB $FE,"NOI-",$FF& j7 J( z9 e2 \
  1242. .DB $FE,"DMC-",$FF,$003 V2 W7 _4 E! r7 L$ l% J
  1243. 4 d- M. `) \+ ^/ V/ _6 w
  1244. .IF Track_Name_Pos- {1 [+ J6 u9 L% ]
  1245. ;------------------------------
    , \; X/ M$ z- O8 t, A2 L
  1246. Track_Name_Addr;曲目名地址索引
    ! y. u! i$ }) Z) G9 S, r# K0 R
  1247. .WORD Trackr_012 S2 r8 U+ l# \. s' v
  1248. .WORD Trackr_024 q/ O) }1 W- H5 Y$ `
  1249. .WORD Trackr_03
    9 }: R( G" \: W4 O# B
  1250. .WORD Trackr_049 @# `- n9 [+ I4 J9 {' [* x- s
  1251. .WORD Trackr_054 ^1 w4 N' c. a+ f
  1252. .WORD Trackr_06
    2 F  U* ^6 f% z* ^* a' {
  1253. .WORD Trackr_07" a+ x% q4 c$ {( I
  1254. .WORD Trackr_08
    # b3 y, q/ E! {/ k0 w& N
  1255. .WORD Trackr_091 J+ j6 G; l- j" ^4 p
  1256. .WORD Trackr_10
    7 t9 Y" g! T' ^
  1257. .WORD Trackr_11* @$ D, O- Y& h
  1258. .WORD Trackr_12
    & f( m+ }# o# ?, J! y! q
  1259. .WORD Trackr_135 Y" O  P0 W* ~7 _& R  r5 E$ j
  1260. .WORD Trackr_14
    " s5 T; y/ U0 j" L0 d
  1261. .WORD Trackr_15
    : L7 C2 i1 p" \0 H
  1262. .WORD Trackr_16( R7 o2 D, n& J1 T3 t8 _
  1263. .WORD Trackr_17% ]6 M  e2 i/ o: U3 d$ f9 W5 l3 H
  1264. .WORD Trackr_18# L3 O8 s; p; a- |3 c: U
  1265. .WORD Trackr_199 t; [! W! b# P/ }0 @
  1266. .WORD Trackr_20$ _+ {' a; ?& {$ ~
  1267. .WORD Trackr_21: X9 s1 \) n" h8 c8 |3 Q# \+ E
  1268. .WORD Trackr_22$ J+ _* t: u% h# @( ?
  1269. .WORD Trackr_23+ V+ [! y, y2 F& P+ T7 X! X! |
  1270. .WORD Trackr_24. n8 D- H& {; q
  1271. .WORD Trackr_25; o( B/ o, W6 {2 y7 {
  1272. .WORD Trackr_26% D7 m- r* S6 f( {& g5 N2 R
  1273. .WORD Trackr_27
    - B3 A, M' n" v+ X$ u6 Z% A- ?/ Z7 f
  1274. .WORD Trackr_28' c: K8 i, ^2 L% q# J3 w& J
  1275. .WORD Trackr_29& q3 g" f2 y4 ?2 x8 i6 F
  1276. .WORD Trackr_30
    . p# t. W6 Q+ G2 |5 G" V" g
  1277. .WORD Trackr_31
    & S* R+ M) |0 N# u) w  k& d1 G
  1278. .WORD Trackr_32
    ( g& Z7 a4 Q+ H4 b. r) K+ L
  1279. .WORD Trackr_33
      R! Q+ P" F  ?7 V' g
  1280. .WORD Trackr_34
    ! i4 h7 R2 b5 }) ]
  1281. .WORD Trackr_35
    . w8 o  p; `# m
  1282. .WORD Trackr_36
    7 J. j: u6 x1 e2 E7 ]7 ~. c
  1283. .WORD Trackr_37
    . O3 b- V6 o" L" E' M1 I
  1284. .WORD Trackr_38
    5 s5 c$ b6 J( G" a0 ]( ~# m% y( S
  1285. .WORD Trackr_39' Z! m5 v% u0 g9 K
  1286. 0 {2 d  K$ o( N
  1287. ;------------------------------
    ( B) n6 ^% E( C% u
  1288. Trackr_Name_Data) B5 K, R" ]2 Y) ^1 m4 f5 f  n
  1289. Trackr_01 .DB $05,"BGM 1"$ d1 z: H$ E* F9 E! S# i
  1290. Trackr_02 .DB $05,"BGM 2"
    ' w4 t" o5 g( N4 w5 C
  1291. Trackr_03 .DB $05,"BGM 3"# |( \: V* }- E, P$ l
  1292. Trackr_04 .DB $05,"BGM 4": U4 r: i9 k1 z' ]! a' m4 r7 S! H8 [
  1293. Trackr_05 .DB $05,"BGM 5"
    ; O# \* C4 m7 X* k
  1294. Trackr_06 .DB $05,"BGM 6"9 W+ t% K  f7 N$ m
  1295. Trackr_07 .DB $05,"BGM 7"
    * x- S) ~. t0 }' n2 N3 T" S
  1296. Trackr_08 .DB $05,"GREAT"! ]- \' o6 }/ z4 }4 O: i
  1297. Trackr_09 .DB $08,"BOSS BOM"- t$ m/ Y& x" I5 }: v* v
  1298. Trackr_10 .DB $08,"BOSS2BGM"% [- `5 z6 L6 d5 \" y3 P  H
  1299. Trackr_11 .DB $07,"P CLEAR"
    # q7 v, G* }. u- I( e* D5 Y. [" e
  1300. Trackr_12 .DB $07,"A CLEAR"
    3 w% W; E5 k% q8 m9 X- T" o
  1301. Trackr_13 .DB $04,"OVER"
    4 m- F% J3 m5 ]$ h" l& A
  1302. Trackr_14 .DB $06,"ENDING") Q% j$ F9 k  c: D( {3 y; e0 O
  1303. Trackr_15 .DB $04,"SUTA"3 V6 s/ @- Q$ U% y: {
  1304. Trackr_16 .DB $07,"THUNDER"3 N, q* I3 N9 p, @! S  ]8 t
  1305. Trackr_17 .DB $04,"SHOT"
    - M7 G1 F' V% [) O
  1306. Trackr_18 .DB $05,"LASER"
    # E& o3 U$ ?' d. O; h6 w7 b6 L+ U
  1307. Trackr_19 .DB $06,"SPREAD"0 n4 r. ]( F1 w. u( N! \& c
  1308. Trackr_20 .DB $04,"FIRE"
    4 Q  R) b) M2 t6 }+ l0 v
  1309. Trackr_21 .DB $06,"B SHOT"9 P6 ~/ I0 t. {$ M% j. ?5 W
  1310. Trackr_22 .DB $08,"T DAMEGE": s- a: }! r* I7 y
  1311. Trackr_23 .DB $07,"HARETSU"% [6 ^7 X- [  e2 b; p8 V
  1312. Trackr_24 .DB $05,"T OUT"4 P- |4 [9 K3 x# H" s$ a6 {5 ^5 W
  1313. Trackr_25 .DB $05,"Z OUT"
    7 P9 k2 x, u3 c! N  ^) F# V$ y
  1314. Trackr_26 .DB $05,"A OUT"- \0 k+ s. H3 J; S
  1315. Trackr_27 .DB $04,"ROLL") v9 s* v/ I. z' U, z5 @4 S
  1316. Trackr_28 .DB $06,"APPEAR", d+ J5 |9 v9 |& @; |+ E5 e
  1317. Trackr_29 .DB $05,"POWER"
    7 y& ^  f; @( b6 O# W2 I
  1318. Trackr_30 .DB $07,"BOKK BK"
    5 @8 W0 t4 u8 q+ {
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    4 m; {: ?$ h" I0 D2 F% D
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    ; Y) k, z7 q7 O* H! o9 p
  1321. Trackr_33 .DB $05,"ARUKU"
    & ]/ y# `7 N6 i( P/ D0 V
  1322. Trackr_34 .DB $06,"JIWARE"1 z: P- {! m' g* N
  1323. Trackr_35 .DB $05,"SILEN"
    3 w9 n5 L& |$ g" W$ b0 F5 B, A
  1324. Trackr_36 .DB $05,"P 1UP"' _9 ~* U& T1 r$ a5 A- Z/ L
  1325. Trackr_37 .DB $05,"P OUT"
    * @. w* U- z9 l9 D1 r+ R
  1326. Trackr_38 .DB $05,"B OUT"
    1 Q0 }; t8 v! P: o: b: ^' c
  1327. Trackr_39 .DB $05,"PAUSE"- k* L) x2 \( P. a6 S

  1328. % s# \$ q1 ?% M3 s+ o
  1329. .ENDIF4 z# `. J! T7 @9 l# M  l! _

  1330. 3 C+ X- X! }1 `# }6 r
  1331. ;------------------------------# _+ U8 @+ j& t+ j) o) g8 c& ^, n: L
  1332. Static_Text_Title_Data;静态文本数据% k: T4 F0 T6 u( i5 ]
  1333. .DB 12, Z& \; B" @4 X
  1334. .DB "SUPER CONTRA"* L0 b8 b. c4 v' w
  1335. Static_Text_Author_Data
    # ~5 p( j3 g! U( {7 C8 _- \
  1336. .DB 23
    5 E7 n7 E% E7 S* p
  1337. .DB "EXTRACT BY FLAMECYCLONE"# B3 |* n2 h) ]3 ]$ P
  1338. Static_Text_Date_Data
    , i7 j6 W8 K6 {# Z, }% R5 }9 ^1 m# W. r
  1339. .DB 10, `6 g; H  P# l$ M
  1340. .DB "2023.07.11"
    3 ?" a$ J% J; k
  1341. % E  }% @8 b  B- W5 ?
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    * }; @/ P: F1 c) e9 @1 k
  1343. .ORG RESET_ADDR% u3 S  M$ V: O' s) \
  1344. 2 K1 r+ W8 s$ C9 w# w5 P. h

  1345. ' X4 }' N+ T2 K1 j9 V
  1346. ;==================================================
    5 ~7 m! n& F) @
  1347. ;切到主程序bank
    ! K& [# h* W* m$ u. O3 M
  1348. SwitchMainBank/ s/ s9 L6 Z/ r1 v; C: X& @
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK+ M9 r& q( e% ]! n9 V
  1350. JSR SwitchBank8000
    $ f7 z' ?" e" O' X7 b0 l
  1351. RTS
    - c1 d' l% v+ T. M/ v- B2 n! Z

  1352. : \7 T, ]& _6 X" I6 P8 U; r, j; V
  1353. ;==================================================5 d4 u  G* D, m1 \# Y# z
  1354. SwitchBank8000;切换bank到8000-9FFF
    0 o& q$ F. h/ o0 j+ K' S
  1355. PHA
    + g  r" _2 ~4 ^' M: q2 a  m
  1356. LDA #$06
    9 ~" S/ a# l: n6 F$ x6 f! z
  1357. STA MMC3_BANK_CTRL
    * U3 Q' {: v4 r- m
  1358. PLA! s) y5 N* A0 H  b2 w, _
  1359. STA MMC3_BANK_DATA
    . d3 ]! I3 H" L/ g# G- B7 D- M
  1360. RTS# o3 y+ S% G) P+ c' g3 t- x
  1361. % i" Q8 p) w/ r( G: |1 \0 }
  1362. ;==================================================
      A9 Z6 B" g( O
  1363. SwitchBankA000;切换bank到A000-BFFF+ r- s2 m$ E( h  a
  1364. PHA- n5 k2 [  e) {+ {
  1365. LDA #$07
    2 F% S1 Z/ t5 }" a$ ?+ Z
  1366. STA MMC3_BANK_CTRL
    ! u% e. D2 s( b9 r5 L# E) d
  1367. PLA
    1 S  i5 y6 j% K/ o
  1368. STA MMC3_BANK_DATA! ?& L; w9 J7 ]; m, @; L
  1369. RTS
    . c  ?3 Z) q" W4 w4 L- D
  1370. % A0 I& T8 o6 s
  1371. ;==================================================
    : \+ v& L  K6 l  y0 b$ L% i
  1372. Sund_Bank_Init;音乐bamk初始化
    ) O: u2 F: U5 Q7 `0 `1 `# i5 _
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK$ \4 x( p3 m( `; l- a9 x4 z
  1374. STA Music_Bank_8000+ Q/ c$ |( Z# l; t3 x* |2 X
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK  P8 i9 ~+ E7 q" @  p# ]
  1376. STA Music_Bank_A000
    1 }3 a; n% x% X1 H  W0 Q
  1377. RTS3 w5 S" \" A/ R
  1378. ( p$ m( i- V4 P
  1379. ;==================================================
    * d( _, ?) M: S7 V$ e5 {
  1380. Sund_Bank_Set;切换音乐bank8 Q7 h; y' Q5 `9 B
  1381. LDA Music_Bank_8000
    3 K) v8 I; t1 g7 R
  1382. JSR SwitchBank80000 y6 V" D1 I$ O0 W* Q
  1383. LDA Music_Bank_A000
    - [0 Z3 T; x; p' ?) g
  1384. JSR SwitchBankA000
    % I  T2 g* }# U" R
  1385. RTS( `7 g% @7 ?( U% z. z, u+ f. X  H, u
  1386. 1 v3 e- ]+ y3 E
  1387. ;==================================================
    : z2 w: d& o5 ]
  1388. Sound_Init;音乐初始化
    7 h8 w6 H& E$ |# ^/ Z" R8 Q
  1389. PHA8 V, K) W3 u+ Y
  1390. JSR Sund_Bank_Set' Z! m# `. D; P9 S. l# o) [
  1391. PLA1 _* e7 d" {. u# A0 x4 ~' m9 S" q
  1392. JSR Music_Init_Addr- v5 H. b1 q. b
  1393. JSR SwitchMainBank4 Z! P! [/ O. f9 N
  1394. 6 q" L* ^9 `( Q3 {2 v
  1395. JSR Music_Bar_ReSet1 x8 S9 G( N- }, y6 a. Z
  1396. JSR Time_ReSet
    3 v, ^. c' ^; E7 p
  1397. LDA #$00: _* y/ S) D" v
  1398. STA Music_State! V$ S& V5 c8 V$ M  @
  1399. JSR Music_Stata_Show* a1 t" z+ u/ s/ b. F3 o
  1400. .IF Track_Name_Pos
    # M3 F! @. K5 U- M( C
  1401. JSR Show_Track_Info
    + e& b! |: T9 [9 h' w
  1402. .ENDIF
    ( R/ `* y! q! [, }, i
  1403. - L# ~" {* H5 B6 a) V# @
  1404. RTS. u: D( x  h3 Z3 y! n. |+ z

  1405. / M( m- @, ^9 Y, b! W
  1406. ;==================================================: F1 l1 n' e8 M  s. H2 M2 @: \8 {
  1407. Sound_Play;音乐播放3 I+ X/ f* t! r2 n! E
  1408. PHA
      ^) R6 }" f2 \; ^9 V8 o
  1409. JSR Sund_Bank_Set
    0 R6 h: L# B: F7 @5 c2 N+ w& H
  1410. PLA
    ' V1 B' y3 h+ x& f# a
  1411. LDA Music_State
    : f9 R9 x* B8 F) [1 e# Y: f
  1412. BNE Sound_Play_End0 g: n2 g6 q6 {7 s6 H
  1413. JSR Music_Play_Addr
      p& a3 Z" M; v4 j
  1414. Sound_Play_End
    - \* a7 x8 s* t& X  Q
  1415. JSR SwitchMainBank
    ( m5 o% ^' h3 b$ ?9 f# u: \
  1416. RTS7 B: w% H: [# l8 q/ d2 ~8 K1 v5 K
  1417. ' Z+ [1 Z9 k/ T
  1418. ;==================================================4 v2 P7 w' J4 V
  1419. .IF Music_Reset_Addr
    6 q+ a& u; M* q. a
  1420. Sound_Reset;音乐重设(如果有的话)
    * D/ @- G! Z  Z8 ?
  1421. JSR Sund_Bank_Set
    * J/ x+ |# O/ v" r& G. e
  1422. JSR Music_Reset_Addr6 @4 q" ^/ V' T7 ~- D% |
  1423. JSR SwitchMainBank9 l5 {! U* [; n# ?/ F& ?% v$ d
  1424. RTS
    ) E+ h1 u6 D  F0 o; F# V7 }$ M
  1425. .ENDIF5 c8 {1 H5 g- Z( M/ m
  1426. - v8 D* N4 I, P- ^5 o
  1427. ;==================================================
    0 Z( C. I( b" C  b
  1428. MainLoop;死循环, b! {: Q0 e' u. ?6 W
  1429. JMP MainLoop
    0 m2 d5 d. h1 O% J* i" |7 u, o: C& A5 r6 V
  1430. ; e! k+ [6 b  m
  1431. ;==================================================
    % D3 o/ B; W5 F8 \
  1432. NmiProgram;Nmi中断处理2 a5 ?7 f. X; m! V* p; |
  1433. PHA* k2 }% B; n3 w( X5 u
  1434. TXA* c2 d+ `; U1 m3 i  ^
  1435. PHA' j. G2 g- G1 G- w, F0 O2 n5 i
  1436. TYA& D) [3 D0 N7 V8 B8 j( v' @
  1437. PHA3 y9 D/ L# A  N
  1438. 4 S1 C+ ?5 {0 Y
  1439. LDA PPU_STATUS* j3 s! Z& Z* `4 H' m9 D2 _
  1440. LDA #$001 {& d5 C+ J& [8 s" g
  1441. STA PPU_CTRL
    ( v1 z3 {- k$ T2 d7 F

  1442. 6 D* B* _* u. A: u' a
  1443. ;切换主程序bank
    : _. s, U% j0 I- l6 ?( m6 _: @
  1444. JSR SwitchMainBank0 E- t: T' u6 }1 E* k# y

  1445. + o4 Y' e4 M2 J9 d
  1446. ;NMI处理
    $ e7 [3 J$ p) ~4 Q: [
  1447. JSR NmiProgramProcess
    ; S, C6 h4 q: v# a

  1448. ' J& o0 N3 i' R( P  u) O$ u
  1449. Nmi_Proc_End
    # V' P5 y! D/ F& K  J. p* K0 l
  1450. PLA
    , P2 B. Y: t  A- H; l- ]6 {
  1451. TAY
      \* {  X( o0 z2 ~) n5 Y% W1 c! Z
  1452. PLA
    + ~2 P+ N! w- D" l' y5 n0 y" n$ A/ k4 n
  1453. TAX4 O4 W) w; |2 }; y6 ?
  1454. PLA
    , ]% J* a' C, W( ?  S; b/ a6 j1 l" ?
  1455. 6 s7 a9 x" i/ ]$ [2 m8 v* p
  1456. RTI
    6 _) f0 n9 t& Y1 |+ p
  1457. ( O: @, R% `3 S" w# i/ N* ?
  1458. ;==================================================
    , N0 b  h7 l; X. m: p
  1459. ResetProgram;重置中断处理( e# U, e' [# E3 V4 G
  1460. SEI9 @1 C" q8 S& a5 n, o0 A1 R
  1461. CLD
    / ^& U4 e1 t& q& z/ L
  1462. LDA #$00
    ; W2 x) M" t0 o0 ~% p
  1463. STA PPU_CTRL
    ' Z5 }( f3 T# X7 Q
  1464. STA PPU_MASK% J# z: U) m: l# p
  1465. 6 \) s7 M  [7 o9 I
  1466. JSR SwitchMainBank
    , z( P: J4 t" E: n7 n8 |; h* E
  1467. JMP ProgramBegin& a2 q# g* D+ |1 N0 a/ p& [

  1468. 7 y$ d9 G% J( B7 f
  1469. ;==================================================
    0 S) c. Q; S4 p
  1470. IrqProgram;Irq中断处理6 y* H7 x! ~) @2 j
  1471. RTI. U, K5 T: P+ Y* I7 L
  1472. $ k0 L! J$ r7 e
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ( ^* Y6 [" c& o5 J# r6 z
  1474. .ORG $FF80. K; G) F' t3 V6 c2 Z5 \( m; g
  1475. STA $4000,X/ K) y3 z' i# j! x, U
  1476. STA Sound_Bar + $00,X# N. Y; {: I% S1 n0 f) l
  1477. RTS0 a. j- O+ F0 U6 V( x
  1478. / T8 K* k" x  u' ~+ w) R$ L
  1479. .ORG $FF88
    % X; q$ k  d6 Z0 k$ X" }
  1480. STA $4000,Y
    ; M, I2 w5 `$ q$ c
  1481. STA Sound_Bar + $00,Y/ a( ?  i9 Q; K- [: ?: M$ ], |
  1482. RTS
    # t) ?- C% ?( K2 Y+ }% u3 H5 w
  1483. ' x6 _$ p& w! t! V
  1484. .ORG $FF90' B1 Q& z' q5 p: N9 i
  1485. STA $4004,X- k( j; }/ r% [% Y" b2 M
  1486. STA Sound_Bar + $04,X
    $ [9 y- M( M" i- Q; H) p# Q
  1487. RTS( {# r$ ^  c1 B6 ]% j8 v4 q
  1488. 4 s5 e" _, h  m! ]# _1 d
  1489. .ORG $FF98: S3 G& Q2 C" R; F
  1490. STA $4004,Y
    4 e% e+ B5 _" N. d9 G0 x
  1491. STA Sound_Bar + $04,Y; x. d: B, T- h2 z6 P9 O6 f
  1492. RTS
    * g( \( j' M! W7 t9 J
  1493. * N% f! d9 {% ]' ~- z
  1494. .ORG $FFA0* Y" s* }' Q; P  o7 X/ |
  1495. STA $4008,X
    ' n: x, u6 t: h) s$ P% c/ {
  1496. STA Sound_Bar + $08,X
      t1 I( K4 |5 {( d- o( m) h* C
  1497. RTS. B2 M3 v% }- G( l$ E

  1498. 4 k1 \! n; v+ n) h) X3 I0 z- p
  1499. .ORG $FFA86 M) {  I  Z. g3 F9 g1 o1 o* [; f. g) }
  1500. STA $4008,Y
    # p0 }1 ]  ]. c, v; U- W& @; L' U
  1501. STA Sound_Bar + $08,Y5 G8 F0 k, [/ c2 O" _
  1502. RTS
    . C0 [: {# m/ B5 y

  1503. 7 f. h* m; \$ C+ g, b% q# P: f# Y/ T: E
  1504. .ORG $FFB0- [6 N1 Y9 m% J
  1505. STA $400C,X1 a' B6 C* e+ J8 X
  1506. STA Sound_Bar + $0C,X" K3 W2 F; ^  V
  1507. RTS& m$ h# _$ c! N

  1508. 4 B. G/ k) g; a" F
  1509. .ORG $FFB8  Y# N! s* o! ~" G
  1510. STA $400C,Y
    ! m% ?" q# p/ K; C
  1511. STA Sound_Bar + $0C,Y6 V& f9 W" i$ T; H
  1512. RTS
    . s4 y/ R2 R3 K6 _, o
  1513. / W0 G7 z$ `4 q$ q
  1514. .ORG $FFC0  W2 h" A  d5 h" v
  1515. STA $4000/ |: J, @2 B! j9 X
  1516. STA Sound_Bar + $00
    / @7 ^/ ~! N4 f  P! l4 X
  1517. RTS0 i" w% @) d' I) X5 V7 g

  1518. * f3 A4 Z% w% W! o, g
  1519. .ORG $FFC8; c5 w, i3 g& `! y
  1520. STA $4004
    : `' ]8 ?4 V, b1 g
  1521. STA Sound_Bar + $04
    5 s* ^& A) `1 M# J6 k4 j9 S
  1522. RTS2 m' r& Y( |% e. Z. @
  1523. & J8 V1 [  v# u% T. D
  1524. .ORG $FFD0
    , F. F2 `2 F2 g& ?- B5 t+ F) N
  1525. STA $4008
    9 \; u; C, h2 W5 T
  1526. STA Sound_Bar + $08
    . {  P. |& Y( z4 u4 K7 ^
  1527. RTS
    8 q+ m. E  H$ J( F

  1528. 5 o6 o( l* D; X4 h
  1529. .ORG $FFD8
    % P. o: S, [* k2 J9 h
  1530. STA $400C
    ) Z, f" H/ R# U
  1531. STA Sound_Bar + $0C
    ! P: _. k9 [$ A. ~
  1532. RTS
    3 E, @; a# W8 ]3 C
  1533. ! z% [" ?5 u2 B9 o; ~. t8 L% E
  1534. .ENDIF
    0 c- h1 O# w- T- W6 U

  1535. ) Y. w6 ~6 r0 J3 E
  1536. .ORG $FFFA1 v; G6 a: j+ m2 \/ w! G# {* ^
  1537. .WORD NmiProgram9 r8 M! C) h9 _7 m& N6 Z
  1538. .WORD ResetProgram
    9 I+ e1 X& @* W( y/ @( p
  1539. .WORD IrqProgram
复制代码
9 V1 R% Q5 y! t7 X3 Y. L

8 {. O# o; A. A& U* y; W
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1234 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3224 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 22:04 , Processed in 1.093750 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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