EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
5 H# F. y, D  N/ N- R! W3 Y- @) j; z3 Y1 K
1.魂斗罗
( |  e9 B; A7 [* P2.超级魂斗罗  l# T& K0 q) O- I( o: t
3.赤影战士
8 u' J+ b7 E( v. h( \4.忍者龙剑传2' ]$ n3 a0 l: {. ~0 J

* C) E8 T4 v7 b  p; A
7 r( h. u" h- x" x8 I6 |
% f7 L1 F' m  ]( q2 T  d
1 s" y  t$ O/ L8 A源码:. O* I0 G8 h2 g. |9 B; ^
  1. ;[FC音乐][播放器模板]
    , |8 e/ \7 I& @0 V% \1 B2 v8 A
  2. ;FlameCyclone 20230710
    ( Z4 X, C( L3 y6 J

  3. % c' B! ?6 l2 ^* g  G/ O4 S, q
  4. ;文件头
    + X, x/ ~3 E" w8 K8 R. @
  5. ;======================================================================
    ( K+ P6 W  S( w$ _
  6. .INESPRG 4                                              ;16KB PRG 数量, J1 \$ K# X/ E& M$ k' S6 B/ @- ]
  7. .INESCHR 0                                               ;8KB CHR 数量
    # t7 }$ j/ i2 P6 d
  8. .INESMAP 4                                                   ;mapper 4
    / U) N5 K' y4 C+ o- x7 k4 J) s
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    5 `) R: c: r( j) y* c/ l

  10. & e; h7 O, q2 \1 `- b5 b
  11. ;==================================================
    6 \& x4 J1 V/ Y4 ^
  12. SOUND_BAR_SHOW_ENABLE       = 18 M( i* X. u! P! _  A
  13. ;==================================================; c: [4 J! q1 M1 h0 o. x
  14. BANK_DATA_MASK              = $077 i+ ?# J5 i. L& O  i, Z
  15. ;==================================================
    2 s: v: i2 _9 Y4 o& j
  16. SOUND_DATA_BANK_0           = $00) z, ?% v  h7 U5 z
  17. SOUND_DATA_BANK_1           = $01
    2 }3 J8 d3 Y& q6 ^
  18. SOUND_DATA_BANK_2           = $02
    , F, u: }' j4 i* k+ J8 [
  19. SOUND_DATA_BANK_C000        = $06
    $ `0 m% v' i- u

  20. ! @: `# G# N' F9 k5 [( ]1 Y0 _' o  e
  21. ;-------------------------------------------------/ L8 C9 Z% \6 K; |' B# k+ ]3 c, x& h
  22. CHR_DATA_BANK               = $04
    % @' {# i! ?6 g8 ^2 P
  23. CHR_DATA_ADDR               = $A000
    ( S# o6 ?3 z) `  Q
  24. ;-------------------------------------------------
    # R( z5 L& U0 l, x/ E
  25. PROGRAM_BANK                = $05
    & v, w; b6 F' S% q) g( ]
  26. PROGRAM_ADDR                = $80000 d! |7 R  R' I: @6 U; C" g
  27. ;-------------------------------------------------
    * c- H( K5 q( u0 T+ H6 o' z1 y
  28. RESET_BANK                  = $07# ~2 @( B/ \8 F& T& ~
  29. RESET_ADDR                  = $FE00. B" q+ O, e2 P$ a" |
  30. ;==================================================& a8 t2 m% W) S# [
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    $ I6 i6 m) n9 ~2 t0 J& R. E
  32. Music_Play_Addr             = $813C ;音乐播放地址* E2 m' P& q: s% k8 E
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址: |1 e* O7 r" A9 V& E& c7 h
  34. ;==================================================# R# w0 {/ Y8 V- B; g
  35. Music_Song_Total            = 039  ;全部曲目总数
    + m% t; D3 i7 d: R2 M! d
  36. Music_Start_Song            = 007  ;初始播放曲目
    1 N( Y: L% |: t1 a% F3 i( u; p
  37. ;==================================================
    . L- m* }& [: ?4 a* c9 H8 a

  38. 3 r' ^( [/ o. q  ~# N" \  k
  39. ;==================================================: H( w" y+ p& N6 H% u# n( f5 i
  40. Title_Text_Pos      = $210D ;标题文本位置
    , J3 J5 R9 b: f* |+ I! k
  41. Author_Info_Pos     = $2284 ;作者文本位置
    " t8 N2 L3 n& ~7 ^- X1 u# i
  42. Date_Info_Pos       = $22CB ;日期文本位置; A5 l! z0 L) U8 T3 h
  43. ;------------------------------
    4 _- y! s* v6 k
  44. ;------------------------------
    4 j; F, S% L7 v* v0 ^% U- |
  45. .IF SOUND_BAR_SHOW_ENABLE# ?4 l2 r. [- k1 P
  46. Play_Index_Pos      = $21B3 ;当前曲目位置+ _- [2 a9 D7 k, D% t9 P6 U
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    $ v) j2 a* x% u1 x
  48. Play_State_Pos      = $2233 ;播放状态位置
    : Y0 C; G; `; F) B% r: @7 c. R$ R
  49. .ELSE
    7 p4 U3 u, D2 N; w
  50. 0 a  U' O3 |' `6 ]5 Y$ X$ Y- f
  51. .IF Music_Song_Total > 99
    % U' Z- Z" {" L
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    6 @+ B1 W: b) F% ]6 L  ?2 s" ]
  53. .ELSE% r, N7 y' \- r- S7 i/ Z

  54. $ c/ P4 ?& b6 H$ q
  55. .IF Music_Song_Total > 9" ?8 [* P: I1 Q% x: Z
  56. Play_Index_Pos      = $21AD ;当前曲目位置) ]3 P2 J8 y- J2 n
  57. .ELSE
    : E8 m, N* }. \4 ^' z: e' q; E
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    1 B7 p5 N9 Y: n+ n! a+ u+ `$ \
  59. .ENDIF
    7 m- i( O8 Q& {9 g% u
  60. " M$ L5 f* y3 z2 ]" s& Y; w1 |
  61. .ENDIF
    ! ^/ F- U. E% w7 d: x( C
  62. " M5 V) g" U# Q( n' A
  63. 9 n  S  I, K  |6 g9 g
  64. Play_Time_Pos       = $21EC ;播放时间位置  ], W3 o, H; B# o3 @6 q, k/ ^
  65. Play_State_Pos      = $222C ;播放状态位置
    + ~: E5 k% D0 K. x3 I. b- x; O1 g
  66. .ENDIF
    ' I5 s- A* h& W6 `
  67. ;------------------------------
    & a. l. ^6 H1 F  `
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ) ]3 R0 }: t  x  \9 U
  69. Sound_Track_Pos     = $21A5 ;声道文本位置- [1 T% _; I7 U: t4 g- h7 b2 ]
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    2 R3 V  ^1 i0 }& ^2 D# x5 B
  71. ;==================================================
    3 _) F4 a* j' k4 S! K* b( F- h
  72. Scroll_X = $00
    3 F, P# Q8 f: \
  73. Scroll_Y = $06& P* Y( N1 C( H
  74. ;==================================================
    2 G6 @! j) n% b+ c
  75. RAM_Cln_1       = $0100
    * n: ?' V6 G: U
  76. RAM_Cln_1_Size  = $80% z% n: X; \7 z* G1 R
  77. RAM_Cln_2       = $00E0  v2 f& z1 u$ u& t" F8 [  x/ }- M
  78. RAM_Cln_2_Size  = $20* m  p& O7 p8 s5 ?* I! x
  79. RAM_Cln_3       = $00E0
    ; G: h, W( p8 n2 F
  80. RAM_Cln_3_Size  = $20
    1 b" U% e0 `5 b! Q0 v2 Z. J6 @7 ~2 v

  81. 2 L! t2 J3 Z: w& U7 J- g
  82. ;==================================================% |8 k3 H# L5 I, \; e9 Q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器- G! S' F7 |- }
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器9 [* k* t: D- i2 Z) s
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位3 z' t5 i  u4 k
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加13 C$ o9 c; U4 i/ h; O
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1* Y5 c( T1 w) B
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 + R$ _  W, B5 C, |4 T  J
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    , z# E/ r7 q5 L/ J) ~3 V
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    % q* ~  p% b0 W
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    6 ]# ?* N, b$ A4 g' S/ |' x) L5 H
  92. APU_STATUS              =   $4015   ;声音通道切换' f0 W1 p. p- [0 H1 k( ]
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通' O3 B- {7 q. @; S; p
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通$ {' Y' s3 g% Z; v( |( u; S7 T3 |
  95. ;==================================================, G9 O7 k  i1 V
  96. MMC3_BANK_CTRL          =   $8000
    % g3 t' S% T  C. E' K( X' i
  97. MMC3_BANK_DATA          =   $8001/ a7 v8 g: l" j# @% g
  98. MMC3_MIRRORING          =   $A000
    ' [) D  F+ t2 |2 M4 C
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    , Q( e" K. _& ?- y
  100. MMC3_IRQ_LATCH          =   $C000
    + L, g* D% m* Q3 s
  101. MMC3_IRQ_RELOAD         =   $C001* M9 [1 t& \) V. ?! \: G
  102. MMC3_IRQ_DISABLE        =   $E000
    - a; i* _  b$ w3 n6 n6 v6 h  x
  103. MMC3_IRQ_ENABLE         =   $E001. r9 S4 I0 g% Y0 |" I( B8 n
  104. 8 ~# {  Q- Q3 I- x8 @
  105. ;音乐数据块4 [5 }1 j: Q4 \8 H

  106. . X# g3 L5 [% }1 x) z  @
  107. ;======================================================================" n5 p& W; @5 `: C2 x6 H
  108. .IF SOUND_BAR_SHOW_ENABLE
    . c8 [7 O6 B# l
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK, L% R: C% K9 T) F
  110. .INCBIN "sound_bank_bar/music_data_0.bank"0 F5 k9 `. {4 y  o! J, f% W4 e& B3 i

  111. # f& ~; D) h& Q, |' s# b
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK: l- R) e3 r. s* U
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    ) |: G8 z4 o' t; [; I
  114. ; u1 g8 i2 G8 r
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK. z7 I# A* |2 b) I: H3 Y( Z  v# C
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    4 ~4 l0 e4 R# W6 e: A

  117. 6 l8 @$ D+ v3 t* e2 h
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ) K) [  d% m( \; R$ w
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    " S) X, p  ?+ O$ F- Q9 R8 X8 ?

  120. % V% x1 I1 ]  s& ]4 I# Z, P; ]$ U
  121. .ELSE# n4 a2 U+ p* T" f. i
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    # U0 X5 Q- Y8 l' U+ i9 O
  123. .INCBIN "sound_bank/music_data_0.bank"
      V3 X9 O2 U$ J
  124. ) T: u, c9 n4 N6 r7 v  W: w
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK% J" v+ u3 I0 h% V& f# P# q( k( }
  126. .INCBIN "sound_bank/music_data_1.bank"
    ; G! W6 P2 w/ {/ h( z: |; [+ S
  127.   Q3 a% p# x/ F: c( F
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK9 a' H. Q& ]  H$ ?& ]
  129. .INCBIN "sound_bank/music_data_2.bank"
    6 q1 V: z2 ~4 u# F! q
  130. 8 k, E! c2 l8 `: @
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK. _% w7 o3 o8 U1 Y5 I0 W0 j& K9 A
  132. .INCBIN "sound_bank/music_data_3.bank"
    ! a( m$ m( N0 Q2 L
  133. .ENDIF* q1 C/ H* E4 b$ k; i- O
  134. , c& F  T2 n/ z% {  J( v2 j& s% a/ I
  135. ;CHR图形数据
    6 T9 A- g* Z% B
  136. ;======================================================================
    + z# Q7 T1 C/ B7 t+ |
  137. .BANK CHR_DATA_BANK/ y% N% a! H6 G3 t9 Y2 o
  138. .INCBIN "chr_bank/chr_data.chr"$ W+ c  N5 m7 N# D8 g
  139. ) g- d6 j: `5 Z# T
  140. ;==================================================
    # V+ F/ s, k5 }' `6 E
  141. PPU_Addr        = $0300
    . M6 B3 d: i# k. L
  142. Palette_Addr    = $03C0* P/ A" E2 I  f& p  D
  143. Sound_Bar       = PPU_Addr+$E0) z, U- M. f$ X+ D& Y
  144. ;==================================================# G( O+ K9 H5 A9 k8 R3 h2 o. H
  145. Palette_Update_Addr     = Palette_Addr+$0D/ P  P8 d$ T4 C+ I, ^' ]4 V! s3 Z
  146. Palette_Update_Max      = $2C
    9 f" o( a& Z. d2 M: T) q# M1 i8 ~. I$ T
  147. Palette_Update_Min      = $21
    ! R# O, W; e- n, I+ f% B' ^
  148. Palette_Update_Interval = 60% C7 y# y* _/ z- Z8 J
  149. ;==================================================" j, o8 C5 _8 K
  150. Sound_Bar_Cnt       = PPU_Addr+$F0% c0 x. V8 ~* E1 D
  151. Screen_State        = Sound_Bar_Cnt+$01
    4 Q, [! ?7 f% N7 C) J/ R
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    ! ^9 z9 K6 v+ Y/ X9 n4 i
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03- a/ ~1 W; k  a: L+ v/ [
  154. PPU_Addr_L          = Sound_Bar_Cnt+$040 e) u, W3 s" j4 Y: i7 O
  155. ;==================================================% F# }9 f0 J. V* k; D9 J& |
  156. Data_L              = $70
    8 ]  x' Y, @$ J' U) g
  157. Data_H              = Data_L + $01
    7 W+ E  x6 B- Z  E  F7 W1 Q; n
  158. Data_Cnt            = Data_L + $02
    * o# @# K% v+ r' a0 v& b# |- {
  159. Data_Buf            = Data_L + $03' @% \4 r/ M0 o3 U) w* p4 B! T& @7 Y
  160. Time_Wait_Cnt       = Data_L + $048 k$ A6 y+ U* q0 g9 E% v" u
  161. Palette_Wait_Cnt    = Data_L + $05
    * T$ ]* ?! ^( h
  162. Palette_Update_Flag = Data_L + $06
    2 f/ o2 c4 v5 P7 ?: f' Y+ Q2 A- i' e
  163. Show_Track_Name     = Data_L + $07
    $ p. E/ ?7 c1 u' W1 p" G- n
  164. ;==================================================
    5 m1 d! A8 C: b* c: P2 ?9 |
  165. Key_Keep            = Show_Track_Name + 18 e1 C4 q  b- l4 [3 {
  166. Key_Once            = Key_Keep+$014 w; {3 F( U5 B- t. Z! j& ?
  167. Key_Kemp            = Key_Keep+$02" R, ^+ S( g3 c2 P+ K! z$ ~2 }( B
  168. Key_Temp            = Key_Keep+$031 J9 S8 [) f) Q) ?; K4 u9 D8 k3 J
  169. Key_Getv            = Key_Keep+$04
    . B; G  W; y. w
  170. ;==================================================
    3 x& y: K! H; _; Z! J2 \
  171. Music_Cur           = Key_Getv+$011 j7 ^4 g- O8 X% g
  172. Music_Last          = Music_Cur+$01+ q: B) S( h& w: }
  173. Music_State         = Music_Cur+$02
    9 X# k% J1 b' e0 z# K* b- T9 v' v' `- R4 d
  174. ;==================================================
    # S( O- n. V, j
  175. HEX_Data            = Music_State+$013 a' V% b. N& [2 y
  176. DEC_H               = HEX_Data+$01. |, o" F7 N7 G! K; L8 w
  177. DEC_T               = HEX_Data+$02+ B: |) M1 R4 D8 J" y
  178. DEC_L               = HEX_Data+$03
    ) h# D+ q6 y3 r2 a* D! k
  179. ;==================================================7 c! J' Y( i, y+ y" T: S) E' E
  180. Time_S              = DEC_L+$018 X5 \. p- b& L7 V$ I6 }
  181. Time_M              = Time_S+$01
    7 E: ~4 X! x) Q& z1 f" L
  182. Time_H              = Time_S+$02" B  U+ S  Z3 c" u8 {
  183. Time_Cnt            = Time_S+$03
    ; ~1 r0 x) [' F5 H, b8 w" ]

  184. & V5 W$ w; N* a9 E* i
  185. ;==================================================
    * X6 y: o4 Q0 l# T
  186. Music_Bank_8000 = Time_Cnt + 10 ~2 k6 Y! t4 j$ l0 H
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    3 D# p% y4 p+ L. s* q( U
  188. ;==================================================
    0 T! P1 n1 O, j5 a
  189. 2 U4 _+ r; }" ?, ]! {
  190. ;======================================================================
    % [' E8 e1 }7 o4 b! J1 G$ s
  191. .BANK PROGRAM_BANK
    2 B+ u" N- c! w1 K
  192. .ORG PROGRAM_ADDR8 V' h  \% f! D+ j

  193. / ]7 ?* A' d. K4 R3 g  V3 v
  194. ;==================================================
    % Z+ G* W5 `+ F# a9 ?
  195. NmiProgramProcess;NMI中断程序处理; Q! ]" W. e2 U+ A
  196. ;处理PPU图像
    # s+ Q% f; Q# e# }  {. W& T
  197. JSR PPU_Proc8 J. ~6 L' ]2 ^+ }6 _

  198. " q3 d5 k( g* `" R! M$ F) c
  199. ;启用NMI中断
    9 B0 h5 N' @  O- ]
  200. LDA #$80
    $ {# [( w0 V! H
  201. STA PPU_CTRL! Q' @% k4 v* y& r$ V

  202. % ?6 n. [: V" W" `( [, C7 ?
  203. ;更新调色板
    / i; \5 n* t7 W( v' f( x6 J& H  [- Q
  204. JSR Update_Palette_Data& j. O4 }& e! J5 t
  205. 3 B; U% r) E! o: J" B8 j5 _
  206. ;显示时间(缓冲)9 |# j) {" v7 V+ k
  207. JSR Time_Show
    ! ~9 n  ^( f/ d* m, v9 e" |

  208. 0 _+ S- E. c2 Y. e4 K
  209. ;播放计时
    7 e6 K  {1 F& e9 ?) m& b9 L
  210. JSR Time_Count
    6 e/ V) c# C% n/ O/ J3 r; J& q
  211. . R  ?* Z" K1 H9 `$ c' C) u. |
  212. ;播放声音6 G9 a: }2 D+ U0 |2 i# V
  213. JSR Sound_Play
    7 x6 L$ {# d# W7 r
  214. # x5 L4 M" Z' d* q8 T) w! t
  215. ;切换音乐(手柄触发)
    5 o* o3 |( B% N" x# Y! i
  216. JSR Music_Switch! s! c  ?& M+ E4 s& L0 a

  217. ( B( M* ^+ ~( v/ |) g4 E
  218. ;音乐显示(缓冲)
    ) D9 v- s+ t1 q
  219. .IF SOUND_BAR_SHOW_ENABLE/ p0 m; R) U. B0 j/ Q4 Q% B6 I2 [. b
  220. JSR Music_Vision4 m3 b7 |, `4 C
  221. .ENDIF
    7 w; I: O! d$ u- E0 I8 ^

  222. / x! b$ R% k# F* i' ~
  223. LDA Time_Wait_Cnt* [  @/ t! W- @! O
  224. BEQ NmiProgramProcessEnd
    : V/ a) g1 X" C. H+ |" y& i
  225. DEC Time_Wait_Cnt
    6 K2 X2 |  x5 @
  226. NmiProgramProcessEnd8 q5 Y5 K: |5 |% e: J( c
  227. RTS: W  }% @1 @( g+ h5 w: v
  228. 2 Q) [1 f; y# G* ]+ p
  229. ;==================================================* S; U8 c( b0 b; ^; U$ L
  230. ProgramBegin;主程序( [( S  Q$ ^" ^9 K
  231. LDA #$005 N9 f4 O* f4 A7 M0 ]5 H6 e" x
  232. STA PPU_CTRL
    + y2 k( q" R# n
  233. STA PPU_STATUS
    $ e, ?) c; n0 c: Y% O1 l
  234. STA PPU_MASK
    5 k1 h- v1 L- [3 w" _, @3 D0 p
  235. STA APU_STATUS# A9 b) q1 c/ k. |$ ?% \
  236. STA PPU_SCROLL
    3 m$ ?  O. g) O7 S+ S8 B
  237. STA PPU_SCROLL3 t$ }! I5 m7 o1 U! |
  238. LDA #$C02 H+ m* e  C, s) [6 ^$ G. w
  239. STA JOY2_FRAME
    1 K# M1 L' B6 F3 \9 B; V

  240. 0 X7 z; I" ~3 L/ U2 f: S7 w
  241. LDX #$FF
    ' q8 I2 Y3 `' r. Z8 \) {. W
  242. TXS
    / R6 Z6 O6 r5 ^' X# `- S
  243. LDA #$00
    - }6 T% T$ p8 [. r$ w
  244. STA PPU_CTRL- h* [, l# _  f  O. W1 A
  245. STA PPU_MASK
    $ D7 v* h, s7 s7 |0 K; t
  246. STA MMC3_IRQ_DISABLE
    % a0 [: O- H# V% C2 h
  247. 4 j1 r* `. D; a0 b7 f
  248. ;==============================: q$ Z; P4 g+ C" c3 G/ h; s
  249. ;调色板清空; [( G. k+ ~, P( H8 B$ S' X! Z
  250. LDA #$3F
    + x( X: t+ }4 l& Z3 |% S4 |
  251. STA PPU_ADDRESS
    ; W) M, ^( y' N, P
  252. LDA #$00) @/ Y5 b9 [3 N! Q! ~$ \
  253. STA PPU_ADDRESS/ I+ Z/ z) G* E" Y* r0 c
  254. LDA #$0F4 K( e% @9 _2 [8 o# C( H. K
  255. Palette_Clear
    , v, y4 \9 Y+ C2 Y8 ?9 [
  256. STA PPU_DATA5 Y0 |6 E% q. E/ T) B' j
  257. INX% m. D3 p% f) i* ~8 f0 j# s5 f
  258. CPX #$209 [- o+ U9 u* a+ p7 U0 t
  259. BCC Palette_Clear' ]+ }; o3 U, S# ^
  260. LDA #$00
    5 M! H) I( d( G" A' r
  261. STA APU_STATUS
    7 ]$ \& y( q8 H7 y$ Q0 q
  262. ;==============================
      R" z+ r+ I% f! ?& {; R: g4 |9 s
  263. ;初始化背景调色板( {& v" @, s0 Z$ R
  264. JSR Set_Palette_Color
    ' I  _5 E9 X9 G, E+ D0 o( O$ p( ^
  265. JSR Set_NameTable_Attributes0 q9 ]+ ~% n! e5 V& z( Q' x
  266. ' z2 P2 X# P0 a8 V) ?# Z' f
  267. ;==============================
    * Z; |% _; o( {. Q) j
  268. ;RAM初始化
    ' @, F! W  \7 F/ D4 ?' e# o
  269. RAM_Clear_All
    0 k$ c+ `% R0 E4 l( V
  270. LDX #$00
    ) |0 _$ K2 v0 `9 P+ q+ e$ q5 o1 U0 P
  271. LDA #$008 {$ I' O" c7 L
  272. RAM_Clear_All_Start2 t( C  A' Q/ J2 [) g6 f+ q
  273. STA $00,X
    ! w( a1 ]. d6 o, j& c
  274. STA $0100,X
    / S) g0 i7 |: K9 q+ i
  275. STA $0200,X
    5 u3 |0 H7 g& }+ x6 b$ h' l) |9 L
  276. STA $0300,X$ [$ U2 C4 S- |2 Z
  277. STA $0400,X
    " o; J6 |$ v- G; j1 a- U
  278. STA $0500,X
    6 r+ U, m5 s( C- y$ W% O
  279. STA $0600,X: k! M$ p2 j: T  p- J- z
  280. STA $0700,X+ \0 y# B5 d) p1 ^5 }
  281. INX4 n- y/ U* K- x' G% u" M
  282. BNE RAM_Clear_All_Start
    3 G3 ?. T  ~0 P

  283. + a; ^) \8 q% l3 A6 V; l+ _/ n! u7 o
  284. JSR VramInit
    6 @% n2 H+ Y0 {. h! P
  285. JSR Init_Palette_Addr
    5 s1 [5 ]# @6 X( l# ?1 A6 y
  286. + j0 b1 a' R3 n/ N, f$ y  t
  287. .IF Music_Reset_Addr
    ( V2 R" u- \" S/ m' A2 j+ ]; y
  288. JSR Sound_Reset
    9 ?$ l" a' B2 V' d+ u6 U
  289. .Endif. w& h+ K/ m( p+ X- E

  290. 4 L0 x% I0 ?( X% }  o/ b
  291. LDA #Music_Start_Song-$01  E& J5 T5 w& b2 b7 ~6 z) Z5 P, l! |
  292. STA Music_Cur; G: Y0 I2 x% U  l3 |

  293. - y7 H( \6 k; G0 i" P& j  s- c8 @
  294. JSR Show_Music_Text3 W; l8 R. S0 o% z3 K4 S
  295. : X# q' y0 q: G* v0 X0 k' Y
  296. .IF SOUND_BAR_SHOW_ENABLE
    5 a8 [' v# h9 r+ b* R
  297. JSR Sound_Bar_Text_Set
    $ `) |+ T! Q" C% H# v( Y
  298. .ENDIF9 j/ D# W: L) O% P. y5 c
  299. 3 \# f" |4 z( ^$ y
  300. .IF Track_Name_Pos
    ' B+ i  l% `. p, M. `
  301. JSR Show_Track_Info
    ) P$ w) P- I+ S
  302. .ENDIF, d) \  j) h' J( v, ]! F$ U0 Z
  303. . |3 J0 p, f( N: _4 @; p, o% j
  304. JSR PPU_Proc1 U( ]5 U- |+ K6 u# `; K* J

  305. 7 u5 b  b! L. u0 I9 m
  306. LDA #$0E
      b9 {2 p' i  s' F0 E
  307. STA Screen_State
    5 t) ?1 T* e$ n" f& b
  308. . @, U' E$ s" j. ^+ z5 h* n
  309. JSR Sund_Bank_Init8 m! n, a8 N) ]2 f$ s6 d
  310. + H* \5 c2 C2 g8 P1 A9 t' g( b3 n
  311. JSR Music_Show
    3 a! v- Z. p2 v. i: j
  312. JSR Time_Show
      l& T. y! w* l  q
  313. JSR Music_Stata_Show4 G- H9 B/ M/ R1 [1 E* o; e
  314. JSR Time_Delay# y1 o& A. L' f# b

  315. 1 O! {6 w6 n0 W! m4 }" l3 P! v1 p6 |

  316. 4 Q- D. S/ M0 D) k4 T% q2 N
  317. LDA #$80* l0 M. B( d7 w& ]- _9 K
  318. STA PPU_CTRL
    ! k/ U2 R/ x+ X" ?. A. Y9 U; T
  319. 3 \( ?- K: V0 |# r: W) }! S
  320. LDA #$20! b. p2 a+ i5 S, ]9 e7 p5 H
  321. STA Time_Wait_Cnt
    : f9 H! D* T6 Z

  322. 6 J7 G& G& ^8 ~" Z! d
  323. Wait_Time_Over
    0 t: k8 T0 T7 D- ^
  324. LDA Time_Wait_Cnt
    + J1 ]. m2 P8 }; T
  325. BNE Wait_Time_Over; C7 j2 h! r. g# d

  326. . D, D* ^) A  F) C+ l( \/ k3 S
  327. LDA #$1F
    1 I# ]7 @3 b) k0 N: a7 V
  328. STA APU_STATUS
    $ r+ I( p" ?0 |% x- _; {
  329. LDA Music_Cur; ~+ L5 [' Y8 ~7 C9 z+ S
  330. JSR Sound_Init/ |, C. o3 Y! O5 z) ?; Y) G
  331. 0 X8 a0 h( ]+ y. s' b2 b( f
  332. JMP MainLoop
    % L3 m7 u8 G9 ?

  333. 1 i  u, y8 |% N
  334. ;==============================
    / x! B  U( Q+ k2 t9 b& X
  335. Time_Delay;延时等待
    ) B. B/ V! V% T# M
  336. LDA PPU_STATUS
    8 Q, r% M2 s# W# {5 P- E5 U% b$ p! W* b
  337. BPL Time_Delay
    ' `. H! ?$ k( Z
  338. RTS
      t, t3 f* G# x; a) `; g& i) E

  339. % k1 H; C8 O8 W, N, X; [. N7 R
  340. ;==============================
    ! g  n; g2 x! ]# r
  341. VramInit;初始化图形内存- }7 N, B: `3 k: L2 L/ |
  342. LDA #CHR_DATA_BANK% i* E3 p! c& x% E+ p& o; I
  343. JSR SwitchBankA000' {+ A) H8 F9 {+ L
  344. LDA #LOW(CHR_DATA_ADDR)/ {1 h: L) Z4 k  }4 T, }# O; E
  345. STA <Data_L0 ]4 a7 D! a# G% Y
  346. LDA #HIGH(CHR_DATA_ADDR)
    , j; U: I% a5 f9 l
  347. STA <Data_H  q4 Q, k3 }$ o2 Q6 a
  348. LDY #$00( u: w0 m! F2 W$ r
  349. LDX #$20
    9 M2 \9 d  O' P
  350. LDA #$007 K1 `2 n2 H! m# q+ H; ?
  351. STA PPU_ADDRESS
    6 l' N, b, Y( m9 |. [$ d
  352. STA PPU_ADDRESS- R' P8 `# w2 g) J- p2 |4 a
  353. VramInitWrite
    " r4 z4 J+ }, b3 S( T* ]; ?. V
  354. LDA [Data_L],Y
    6 q; l( t% b7 b% u1 L' E& g
  355. STA PPU_DATA
    " }4 ]4 L- v  A2 T, u
  356. INY
    : u2 S4 `* V" H0 m4 q
  357. BNE VramInitWrite( M& \9 C5 \; I, Z, G- Q+ e
  358. INC Data_H: [% P! r, [  Y$ K% q4 Z! N! S; i
  359. DEX
    1 N& Q7 k6 m0 {8 N% P
  360. BNE VramInitWrite6 V1 M4 u9 v, G' D4 N
  361. RTS9 ]- r1 s" j* F2 I: o: b
  362. ; c4 {! i, h9 @9 [9 v* W
  363. ;==============================
    . D% M% |. L4 m8 J3 D
  364. RAM_Clear;RAM清除% _0 I. y9 w; c' ~, t- G" U
  365. LDX #$00
    + K7 b  O4 Z# m% _% g  P
  366. LDA #$00
    ; q$ `0 D7 V5 Y" C
  367. RAM_Clear_18 }6 a$ Z5 D0 E3 i; U1 O
  368. STA RAM_Cln_1,X
    , F* {; t# j' ~
  369. INX
    5 H, \9 H- Q! `! e2 w2 X) B2 N
  370. CPX #RAM_Cln_1_Size3 B6 x9 B" E# L$ k; b
  371. BNE RAM_Clear_1
    # l1 P$ W1 B7 ^5 s% I) K8 i
  372. LDX #$00" H9 j0 ^, O4 e3 a7 r/ l- Q4 }3 l
  373. RAM_Clear_2
    2 Y, R+ _! ]9 |- C0 a4 J0 _! X
  374. STA RAM_Cln_2,X
    " n+ l# S. @$ S1 }
  375. INX: @) b1 U; k& r5 K1 t8 A2 G
  376. CPX #RAM_Cln_2_Size4 w  k( p/ N1 Q* z3 h( }
  377. BNE RAM_Clear_2
      n! }- b4 v8 j# z0 y
  378. LDX #$00, n( {( {) h6 l
  379. RAM_Clear_3
    5 v1 G7 W# E8 S; a* e' t
  380. STA RAM_Cln_3,X
    3 z7 w# S& N8 s; S( {1 ?
  381. INX
    + g/ Q& |" J& D
  382. CPX #RAM_Cln_3_Size$ [: m; h. g. }  v- a$ N5 K0 n
  383. BNE RAM_Clear_3
    ! V8 Q' }( h5 H! A  y1 }5 a
  384. RTS
    ! `6 U1 J+ x  x5 r
  385. 6 b" k1 U) P3 l3 ]1 }, J
  386. ;==============================" m3 f4 ~) z, ^2 O, B% P' A
  387. ;音乐切换3 ^9 T3 L4 G4 i( I
  388. Music_Switch4 ~, A( Z3 L9 i& O/ W8 d* J% y# ^
  389. JSR Key_Proc& P9 p/ i+ N, v9 [! q* V
  390. LDA Key_Once4 k  x0 [: b" D% ]6 ]
  391. CMP #$106 r6 |$ \) s4 c# l
  392. BNE Music_Start_SongStop
    : p, n0 U: k/ ~/ l
  393. JSR Music_ReSet
    + d6 d8 B0 v  \# q) \  u

  394. ; [. L. n( N9 d* {: w- Y% n0 O  P# S
  395. ;音乐停止
    % B& ]/ R4 n! d. k
  396. Music_Start_SongStop4 W* F7 q! N! P8 ~) L( `% }' O) J
  397. LDA Key_Once! P( e. g7 ], Q& e, s; I% d" v* h
  398. CMP #$20) r7 ~  y0 Z: t! D2 L  _9 u
  399. BNE Music_arrow# k5 ]& l8 @% t
  400. LDA #$01
    * _& C( i/ O+ E0 z. U
  401. STA Music_State: {0 u/ P( Z# e2 r
  402. JSR Music_Bar_ReSet
    " ^3 e0 M/ d' z
  403. JSR Time_ReSet$ l. U3 ~) g1 ?# Q. Z
  404. JSR RAM_Clear
    4 V6 V5 N4 T; R3 `
  405. JSR Sound_Clear5 L) g/ g. f! H' a
  406. JSR Music_Stata_Show3 l; [0 q$ X. J# @) k  R4 d) b! N& i; v
  407. Music_arrow8 _2 q( a8 Q1 p& W: J+ A7 K' o0 N
  408. LDA Key_Once  ^9 h/ ^  F1 r  M7 ?9 V
  409. AND #$CF
    0 k2 I, x! {6 p0 _) r0 W
  410. BEQ Music_Switch_End
    6 q0 T: l" J2 n8 q6 `
  411. JSR Music_Number# H- Q3 `1 }6 X- A8 w/ J
  412. JSR Music_ReSet5 u4 s1 N9 w# ~7 S2 I1 C' @
  413. JSR Music_Show- j% F! e( L1 f3 n% h1 L
  414. Music_Switch_End0 [5 l- {3 F# Q  G8 L! U7 ~2 G
  415. RTS
    ! [+ b5 i! f, y/ u
  416. 3 P- _* A2 i- ^. A' M3 M
  417. ;==============================' M: ]) O' g7 x7 C3 R* R' p. n8 p
  418. ;音乐曲目切换. n$ e( T5 H6 F5 I7 [# ^, w
  419. Music_Number
    7 {3 V/ q" T- K( }8 _* Z
  420. LDA Music_Cur
    2 H. O, q/ b  t, j# ^" ?
  421. STA Music_Last2 U6 P9 e5 h4 H5 M
  422. Music_Decrease
    5 K' b5 P2 u# W  n1 k
  423. LDA Key_Once4 B) y7 C' s+ ?( t, E
  424. AND #$42
    / b- m& q$ i3 h% g* c1 ~
  425. BEQ Music_Increase
    ) D: C6 w: A, `, b! F
  426. LDA Music_Cur6 Q+ m' N9 j$ M4 U5 H
  427. BEQ Music_Increase
    : }. r" `2 Y1 N. q* [/ g+ i
  428. DEC Music_Cur% X- G& ~, w) W9 O' v
  429. Music_Increase" M# i" |, Y" t4 R8 e- v
  430. LDA Key_Once+ B& d  L# \& p& n
  431. AND #$81
    5 V" m, l& A4 y
  432. BEQ Music_Decrease_10
    ) _* `, x+ w2 Y: R/ J7 z
  433. LDA Music_Cur
    . V& x! X; B: ?! X
  434. CMP #Music_Song_Total-01
    2 h* O# m' ?: G8 R% m, s
  435. BCS Music_Decrease_10
    3 a# q0 E1 z2 i" q; s
  436. INC Music_Cur. v% Q, k3 X1 q& S- n. i
  437. Music_Decrease_10
    2 M# T! A6 u# T# Z% m7 @2 e
  438. LDA Key_Once
    9 Y' s. `# h, W/ M' v4 W& p
  439. CMP #$04
    . R+ e  H1 p; z7 r1 e/ w( s
  440. BNE Music_Increase_10! Q& \. `' P; o5 W- x
  441. LDA Music_Cur. W5 i4 N  Q: s: F/ S! k1 l+ F
  442. CMP #10
    ! M8 C1 k- C. ~( F/ m$ P" t7 H
  443. BCC Music_Start_Song_Min
    8 J+ w, i3 i5 }  Q
  444. LDA Music_Cur! s& D9 ?4 F! T+ `: G1 g7 p
  445. SEC. j9 S% ^, ]" _" s; o, e
  446. SBC #10
    3 ~8 Q, d7 e5 W7 D% C" E
  447. STA Music_Cur* S* x$ s! I, q. Y
  448. LDA #$00* A$ s# k& W7 w2 v% c7 S
  449. BEQ Music_Increase_10- @1 u) U/ H) j& q4 @' u
  450. Music_Start_Song_Min
    ) t4 K. o* q2 N; a4 X- D
  451. LDA #$00
    ( c' c6 c# l3 e# j/ b/ m6 H
  452. STA Music_Cur
    2 Y- e2 L6 }3 i. J
  453. Music_Increase_10( s; Z, q4 \$ a$ v" P( D( Y) a
  454. LDA Key_Once
    % G1 f0 `0 r' C8 s
  455. CMP #$08
    ; G' i) ~1 @) i6 D
  456. BNE Music_Number_End% ]2 l# |2 S5 X; `, b0 r
  457. LDA Music_Cur+ z2 h( H+ v0 x7 X
  458. CLC0 P4 _& I5 s1 Z3 I, E: N7 {
  459. ADC #10$ |" B  r2 X& W) B+ F* x! J
  460. CMP #Music_Song_Total-01% a& X, K2 k+ j
  461. BCS Music_Start_Song_Max
    6 D. E# s4 f) G! q$ r3 o
  462. STA Music_Cur" ~' h7 p3 \6 E
  463. LDA #00
    $ t0 D- f7 _5 S9 A. Z& g: D
  464. BEQ Music_Number_End
    : A* }- O) K9 V2 n* z! m
  465. Music_Start_Song_Max
    9 @& E) [" P: ~& |3 I" L
  466. LDA #Music_Song_Total-01& L) a2 m+ G% |5 }& L4 z
  467. STA Music_Cur6 W! j2 s9 S1 n
  468. Music_Number_End- {0 n2 O( p" n7 \! z
  469. RTS6 z. V# H  M( K' R

  470. 4 c5 E+ H) d) U; |* G6 |
  471. ;==============================
    & b, V0 h+ o+ ]2 y8 B  q' O
  472. ;音乐重设# _! s/ D0 b5 D7 d/ X# g2 n
  473. Music_ReSet( R. U# S; d( i/ x! H
  474. JSR RAM_Clear9 B0 e# `; e  T1 d( _
  475. JSR Sound_Clear
    ) M# E2 E2 g8 y1 P
  476. LDA #$1F
    9 O& l- ^0 @6 x4 f  w4 l+ t" }
  477. STA APU_STATUS9 ]. i9 c3 Y, S0 x+ F' `
  478. LDA Music_Cur, @. K; G% n4 T( k. W" W# l
  479. JSR Sound_Init4 d$ ?! P5 i7 w: w  X
  480. RTS. o: I4 y  s, |1 }( @7 Z3 [& [8 M

  481.   n4 i  ~# ]/ G
  482. ;==============================
    . p, @9 J+ H( }: Z$ T
  483. ;音乐端口清除
    ( e- A, x0 J8 U. ^7 ~( O; T$ ], O
  484. Sound_Clear6 P: f1 j! Z+ M9 V+ y' `
  485. LDA #$00- i: g; m. N0 x9 t- G
  486. STA APU_STATUS
    # f  R+ _5 R6 e+ t5 `$ P" ?( X& [) @( C
  487. LDX #$00; Y* H1 E+ s! H; N- W
  488. Sound_Clear_Start
    3 j" j) k9 s/ n5 k
  489. STA $4000,X
    & Z) X8 H; s2 Q
  490. INX- {9 U/ X9 D3 p- O8 U6 }; R& V
  491. CPX #$14
    ) {# |+ ~5 J! `
  492. BCC Sound_Clear_Start
    1 L3 @1 _6 j0 r' P
  493. RTS) P& F9 T/ y$ n% c
  494. 8 ~. {: p5 w2 U) R
  495. ;==============================; G0 y, O' Q9 D
  496. ;按键处理  _1 E- N! L- [
  497. Key_Proc. v# ~8 l0 O% j% ?% e
  498. JSR Key_Scan
    ' p) t7 {$ e, j7 ]
  499. LDA Key_Keep- v9 F# Y8 K( R2 @, D5 c2 N
  500. STA Key_Temp7 W1 i6 j. ~" [  Z
  501. JSR Key_Scan1 @" d" m  @+ y/ `6 i% B# q4 [
  502. LDA Key_Keep' w) a  r+ }% V: Q/ e" o! @
  503. CMP Key_Temp4 g8 M. J8 `+ S8 ]# d) V' K
  504. BEQ Key_Get_Once+ w" J+ e& j2 R7 y, H" _5 w/ f$ R
  505. LDA Key_Kemp
    ) t: y3 Y6 Q5 r8 Z, w7 u
  506. STA Key_Keep
    0 E' S7 V; G0 G# N" C
  507. Key_Get_Once
    9 W6 Y& e- Q9 T5 v4 T8 u) a  \# x) C
  508. TAY/ y) N9 D' U2 g2 F. r
  509. EOR Key_Kemp
    , \, \( x7 G( h
  510. AND Key_Keep
    3 ]$ N) E2 {2 Q! B! b% j& c. G
  511. STA Key_Once4 Z3 p$ q# n- x+ U: m& ]4 n
  512. STY Key_Kemp3 P. j2 v/ ^2 O3 Z; K( Y
  513. RTS
    8 p! w2 S8 P; J# `& `+ [9 D+ F6 B/ u
  514. ;------------------------------
    * \3 h0 f2 y3 G- j: K. ]% m
  515. ;按键扫描
    % d  z) G$ E9 V
  516. Key_Scan
      H+ B' J4 A( K* ~* N8 O
  517. LDX #$012 a  A7 v$ D; l5 I6 c
  518. STX JOY1_FRAME
    . K- O' F' j2 ~: w! T9 }
  519. DEX- c+ G$ W; Y" R; J0 _
  520. STX JOY1_FRAME
    . `* f2 v/ J8 ^0 a
  521. LDX #$08
    + o% ?3 }5 m. Y2 s  j9 v
  522. Key_Value
    . H9 B$ A6 ~1 O. S8 G
  523. LDA JOY1_FRAME
    ( U  M. ^( W$ K- O( Y4 R) W0 ?2 A
  524. STA Key_Getv: Y3 Z- W5 W' }4 \
  525. LSR A0 l: D  `: f" B) O( w
  526. ORA Key_Getv
    : F* H: N1 O4 w0 {+ N) R! `
  527. LSR A
      I3 u4 F1 M# \" \
  528. ROL Key_Keep
    / w! o8 H' d# `! s" f. T  C
  529. DEX
    3 z. x$ s6 c, U/ c; Q' x' X4 a
  530. BNE Key_Value9 S$ t" ^: c7 c' m" @
  531. RTS; ?! p, n$ e& H1 O
  532. 1 O/ c% g% G2 I1 }. z* a- Q* i
  533. ;==============================
    - ]0 d/ z, F, R2 F0 s7 Q  r* }
  534. .IF SOUND_BAR_SHOW_ENABLE  b- x9 h8 s" M9 W
  535. ;音乐条显示
    2 h& N8 D& y) d
  536. Music_Vision  y+ V2 v/ W1 U: e
  537. JSR Music_Animation# u* X3 L4 \1 _+ l( w
  538. JSR PPU_End5 m2 Z- P. T2 w3 Q& J( X
  539. RTS
    7 [, Z- T; }, }, C* i4 y) _: d
  540. ;------------------------------
    ! T" A- t3 S$ s% h% U0 X/ m
  541. ;音乐条显示处理
    # L4 y5 ?: K( k5 v
  542. Music_Animation
    8 e; j! ]7 F: n5 ]3 J: n
  543. LDX PPU_Cur
    " P. f8 D4 x$ t
  544. LDA #Mode_Line1 e# Z3 E! {) I, F2 ]- \
  545. STA PPU_Addr,X
    ! m. k' G: ^9 g) U
  546. INX3 U# ]8 A% z% _+ z! `) t
  547. LDA #HIGH(Sound_Bar_Pos)
      _3 E" I# l4 H6 }
  548. STA PPU_Addr,X  ~7 D/ h% _  ^. E  q$ B# B
  549. INX
    & e# V" o1 E# g3 A
  550. LDA #LOW(Sound_Bar_Pos)7 ^' K' g5 g3 m- C
  551. STA PPU_Addr,X
    3 ]* p+ ]* @0 `  a2 A' K4 ~0 s
  552. INX
    ( H! k% @! d9 W( E/ V' L  h0 o( h
  553. LDA Sound_Bar% f* n! A2 T3 G: V1 f
  554. JSR Volume_Convert: x" ^5 Y/ d3 s
  555. JSR PPU_Return
    . M" [$ [8 \8 w! Q' x4 ^
  556. LDA Sound_Bar+$4
    0 _: p3 G7 \1 P" g# y9 K. t
  557. JSR Volume_Convert
    9 W5 n7 c0 E7 q% I
  558. JSR PPU_Return+ u0 j) ^, x# h8 E- q4 v' G/ q
  559. LDA Sound_Bar+$84 G8 }1 `; i" J2 w$ X$ E
  560. JSR Volume_Convert_Ex
    2 k0 `3 o, V$ J3 R5 g
  561. JSR PPU_Return( C" u( n2 c3 m- _5 E  C% q: `
  562. LDA Sound_Bar+$C" [% |4 w6 H% d. n0 J
  563. JSR Volume_Convert5 Y7 E; F, {+ w1 {- e6 a
  564. JSR PPU_Return
    & w' ~8 u5 m( F( ^: \. O/ [4 E! v
  565. LDY #$10
    5 l* _: u: I6 e
  566. LDA APU_STATUS
    - p! o. h$ a- i* g
  567. AND #$10
    * `4 q5 k. `& N& a
  568. BNE Volume_Count) d1 L% H# l. y# l, d
  569. LDY #$001 j7 g5 w+ T4 x6 V3 E) C
  570. BEQ Volume_Count5 J( g' _' G6 }( P+ a+ @$ p. S( H; Z
  571. ;------------------------------
      k$ F/ U  {. ~5 `, d
  572. ;音乐条处理
    " g2 o& `, Q4 f
  573. Volume_Convert_Ex8 n% K6 T+ v- ~/ b# [1 ]- E
  574. AND #$1F$ u5 ?0 F! X9 ]; Q1 _
  575. TAY" }& b6 T. h. b, I
  576. BNE Volume_Count: p. d8 B. e  O/ }" \
  577. Volume_Convert+ R2 s- Q" m/ C2 G" k; Q
  578. AND #$0F
    ! c/ x0 a" d0 d' ^5 t) D
  579. TAY0 |4 [7 x  g  M* B
  580. Volume_Count, g/ k+ c0 |/ `- |( k8 U* `
  581. LDA #$08( O' E) \( c! d/ Z8 {0 s
  582. STA Sound_Bar_Cnt3 W. @$ U3 Y9 o6 ~
  583. Volume_FILL
    ' |: k6 w( B+ T  e
  584. DEY# a0 [8 l; r8 r- k2 Y: c
  585. BEQ Volume_Half- F9 k; }* f9 N$ v
  586. BMI Volume_Empty
    + G/ I$ L( l" A2 C  p
  587. DEY2 [5 H( |2 h1 t
  588. Volume_Full
    6 _9 a0 v# D9 Z0 Z$ X
  589. LDA #$16
    3 S) L9 i7 n  t7 A+ g5 V6 I
  590. BNE Volume_PPU; f0 h) Y8 i" Z' o* R8 d
  591. Volume_Half
    * k% N: s# k) R3 w5 o9 l
  592. LDA #$15
    % m( ^1 L& |4 K$ h# `  R- F
  593. BNE Volume_PPU. q" `$ L. [4 |* U
  594. Volume_Empty
    ' D- K0 r4 C3 L; K! z. }& A4 H9 H
  595. LDA #$148 m3 ^" G* V) m; `- o! f
  596. Volume_PPU! V' c4 U) M% c5 v' X' g
  597. STA PPU_Addr,X
    . R( Q& O& f7 p2 A, v5 i* H
  598. INX4 S, W. [% i: x+ w- i0 d; _$ L
  599. DEC Sound_Bar_Cnt
    % s+ [' d# D! l- r: R
  600. BNE Volume_FILL
    & x4 S- v0 x2 `
  601. RTS% n7 p4 E: K- u3 p& T$ X

  602. $ ^" O6 Q( f2 x1 F, n1 B8 }2 s4 {
  603. .ENDIF4 x9 b. N1 w6 ^0 u$ w4 R; ~

  604. / C" F) g5 v8 u! {7 U
  605. ;==============================
    2 C; e: Q0 y7 g) Q
  606. PPU_Addr_Set;PPU行开始' o' V) |/ j7 y" m5 i5 ?6 P
  607. LDX PPU_Cur5 E% W0 Z; p0 {3 ]
  608. LDA #Mode_Line0 Y" u/ ?9 L, g6 l
  609. STA PPU_Addr,X7 U& c) o) t# J
  610. INX
    3 B! j% L: Y' o" T% F0 l
  611. RTS7 i, n) y" g; a1 O: l
  612. , h# |' H  i7 B  J6 P
  613. PPU_Return;PPU转行( k1 v: C4 P* u) o( _# _
  614. LDA #Flag_Over
    3 i. E/ T5 L( j  u, ?1 p, ?
  615. STA PPU_Addr,X
    ( s. a/ C/ o( {! X; t# V
  616. INX% q* ~+ [8 k, T0 ^- @; o: E
  617. LDA #Mode_Return
    / m: P: z! h1 f# V
  618. STA PPU_Addr,X
    * [, i  ?- S+ y# v# r5 y
  619. INX6 d9 o4 l0 z3 t+ C( m% P
  620. RTS4 e$ K3 Z' H7 g  N8 e
  621. * r& d+ ]& `6 l) r; v3 V- J5 l
  622. ;------------------------------$ Y' Q0 z. _; C( g
  623. PPU_End;PPU结束4 ^9 q* {  Z5 ^4 T' m
  624. LDA #Flag_Over
    . l6 T6 U' b. v* X: c4 R
  625. STA PPU_Addr,X
    - y' W* E9 R6 X1 k3 f
  626. INX
    % `/ W4 K* R9 \1 M7 g
  627. STX PPU_Cur
    , Y* x9 K, T( w$ w5 D
  628. RTS$ R; O2 H; c5 Y% ^  Y( [# H
  629. ;==============================$ I$ i# I7 l7 J! X. v/ i! Z% q
  630. Mode_Line     = $FD    ;新起行模式& X+ r; d) g' O; A) d
  631. Mode_Return   = $FE    ;转下行模式; b9 E' R+ f0 F+ k' m. [
  632. Mode_Clear    = $FC    ;行清除. Q) O2 D0 z. f; x* ^
  633. Mode_CntLine  = $FB    ;行计数写入) {$ ~9 t; ~% F4 v. d+ E
  634. Flag_Over     = $FF    ;行结束标志
      F( c4 }: `( o# B+ D* J3 Y
  635. " X- Z, t: J. `( O" X$ c9 b
  636. ;------------------------------
      B2 [4 P" D+ ^) P' B
  637. ;PPU处理
    / l# t% F/ E8 ?* {7 T7 @' u
  638. PPU_Proc
    $ Z/ _/ d1 ]; B8 `
  639. LDX PPU_Cur
    1 p9 ~, }, X5 C- \) {# h9 q/ k
  640. LDA #$00- Q" ^2 f7 W4 C7 ?4 p
  641. STA PPU_Cur
    ; c0 M! D9 y% _' H. k
  642. STA PPU_Addr,X
    , w7 X: g5 ^2 J  h5 s7 d
  643. LDA PPU_Addr
    - X5 k2 \1 v& l) ~; P5 R
  644. BNE PPU_Proc_Beg
    3 a" q# J) j* t7 ^' ]2 m: ~6 Z8 h  f
  645. PPU_Proc_Ret; ?2 b5 l/ e4 c7 @% y+ i" g2 s' O
  646. RTS
    : q, Q% P6 X  l4 m  }6 h
  647. ;------------------------------
    6 A( I) ?  Y* j- ]) F( ?
  648. PPU_Proc_Beg  ;处理开始
    : A# e( o8 ~* N, V' W
  649. LDX #$00, ], S! [7 F$ }% z6 J( K7 c
  650. STX PPU_MASK. T+ b$ q9 d% o6 w+ l; Z9 A
  651. ;------------------------------
    : v3 `9 o" s1 _& `; Q/ t5 ~2 S
  652. PPU_Mode_Select  ;模式选择
    : c% r- `. L6 P  ~; K* b# V* R
  653. LDA PPU_Addr,X
    + f9 N& z! E  @0 K
  654. CMP #Mode_Line
    ' ]1 A4 ~. P" D4 j% E$ J
  655. BEQ PPU_Mode_Newline
    , m; `' |# W, C$ n& |
  656. CMP #Mode_Return3 b( ?+ w: N( ]& G8 @
  657. BEQ PPU_Mode_Return
    ( b' E# o' X% S/ F
  658. CMP #Mode_Clear
    * k7 [# R- x9 c2 J, d
  659. BEQ PPU_Proc_Clear+ z* ^, n) z( u, V$ \' m. L
  660. CMP #Mode_CntLine
    3 q# y% r, h9 _- y+ P  S# H
  661. BEQ PPU_Proc_Cnt_Line
    % w+ h* Y, q  N
  662. RTS; ]( F1 }6 G) }" |$ y1 V* J
  663. ;------------------------------
      |2 t( k6 e6 M! y* f
  664. PPU_Mode_Return  ;转下行模式2 \* Z8 Z, ^+ W0 K( k6 F" D
  665. LDA PPU_Addr_L
    $ F1 r, V8 P3 |1 a
  666. CLC
    $ I. T0 K+ M: y( k0 V( \4 m
  667. ADC #$20
    ) Z& U" A) u5 r0 c6 z
  668. STA PPU_Addr_L
      ?) i( x$ u1 b5 B/ v' T
  669. BCC PPU_Return_End
    % h' a% ]1 n& D) a8 I, v4 |, z
  670. INC PPU_Addr_H! W$ a- N( N) C# S4 a
  671. PPU_Return_End
    : Y' z& g2 D( _5 Z3 k" }" D0 |
  672. JMP PPU_Set_Increaser" _1 e2 o1 t) b2 N& _
  673. ;------------------------------% @# X( P) A& K7 e0 {
  674. PPU_Mode_Newline  ;新起行模式2 h: j& e* w$ F$ ~1 ]8 _# B
  675. INX
    ; ]* E; e! T; S% N
  676. LDA PPU_Addr,X" A4 R/ @" o, a  O4 m" k
  677. STA PPU_Addr_H
    8 |6 B( z5 d8 F3 C1 A
  678. INX
    : e' P1 M# q, K. N4 E# E
  679. LDA PPU_Addr,X
    % d3 o; d6 t. A4 V  ]. Y+ O
  680. STA PPU_Addr_L
    : _" M0 U7 V5 t. \( ~
  681. ;------------------------------- p" x2 T, M$ g4 D
  682. PPU_Set_Increaser   ;设置写入地址# ?1 T" [) c( g
  683. LDA PPU_Addr_H" c- Z" b7 P2 S( D6 W& D, t
  684. STA PPU_ADDRESS
      H) O& v/ D- Z. x; r8 m
  685. LDA PPU_Addr_L7 Q0 T/ c+ R: R" J& |
  686. STA PPU_ADDRESS& v: E7 c7 Y4 z1 T) ^
  687. ;------------------------------
    5 \& o% d" N* t4 L/ K
  688. PPU_Write   ;写入数据
    ( L2 `" i! X4 u1 E- v( a
  689. INX
    ! ]6 t4 p/ @  R2 k7 B5 }
  690. LDA PPU_Addr,X
    , a) A0 }9 N4 U0 @
  691. CMP #Flag_Over
    2 W3 A% b- A  R0 j+ n
  692. BEQ PPU_Proc_End- q1 G0 C9 O% Y; H
  693. STA PPU_DATA7 c  b. Z( F* |
  694. JMP PPU_Write, ~; p+ X% ?: I3 j8 Y3 N
  695. ;------------------------------, U* S5 U7 I. G0 B$ C6 r2 }
  696. PPU_Proc_End  ;单行写入结束# B5 b) ^3 S2 [9 N
  697. INX
    : B4 x4 o. b9 a5 n- O! k3 l
  698. LDA PPU_Addr,X& E: f  V2 c, t" K
  699. BNE PPU_Mode_Select
    % A2 ?$ j0 `6 t& o; j7 t& ^
  700. STA PPU_Addr
    ) ^" W: ]7 t$ U2 u, r
  701. JSR Update_Palette_Color
    : Z/ F9 \+ D7 i" t  ~
  702. LDA #$00
    6 ^: x% a) r; ^( d( P+ w
  703. STA PPU_ADDRESS+ g/ H) E5 ]/ K$ W# N7 `
  704. STA PPU_ADDRESS
    # G+ g0 R; `* J" U5 T
  705. STA Show_Track_Name
      x* p; i8 e/ Q4 g5 Z) N* ?1 A' g
  706. LDA #Scroll_X/ Q% F# H" J" a1 ]2 s$ U; F
  707. STA PPU_SCROLL
    $ D3 e1 D- ^( p" k. X$ Q( T/ R, ~- J
  708. LDA #Scroll_Y9 F# M* m* ?: H6 ~0 ~6 j
  709. STA PPU_SCROLL" t0 z! @9 R( g
  710. LDA Screen_State$ Y$ N3 p% n6 Y5 U! Y) j
  711. STA PPU_MASK
    $ f! ]3 I+ \, o6 d
  712. RTS) c  E! ^) b) I8 X: D( x9 K2 Y

  713. & U7 b' t7 O* Y3 q9 J0 W0 U8 R
  714. PPU_Proc_Clear. {" U; o! P3 ^7 m" F) X
  715. INX
    $ B2 e5 l6 r# |- z
  716. LDA PPU_Addr,X
    + ?) X, ^% A5 k/ `- Y
  717. STA PPU_ADDRESS
    4 m4 a# I; w4 I0 [
  718. INX9 |" k( t4 H6 Y- d$ d- S
  719. LDA PPU_Addr,X1 V& ~. g* n  B( L  U1 M4 t8 K
  720. STA PPU_ADDRESS5 O/ W4 q3 G3 t! X3 e: t
  721. INX
    ) ]% X/ g% K9 E% H# `
  722. LDY PPU_Addr,X
    1 ]. f% z. ~9 G. U) j
  723. LDA #$00" G$ {$ M+ H6 M. c2 J
  724. PPU_Proc_Clear_Write8 F1 I* f, j1 y- ]
  725. STA PPU_DATA
    + B  @$ P. N6 ]* Q- L+ ?$ _0 F9 ^
  726. DEY) P$ q7 H9 Y: D, Q3 M) n7 A, o
  727. BNE PPU_Proc_Clear_Write
    / u4 a: C& B4 _
  728. JMP PPU_Proc_End
    % y# s6 X- A: b- C+ v$ j
  729. 0 \; E& A1 q( j6 R& \0 D
  730. PPU_Proc_Cnt_Line$ k" @0 y3 l; G0 g' k7 x! d
  731. INX. h! M+ E2 p' s, Z) G
  732. LDA PPU_Addr,X
    + c2 C; w- H1 Y# B6 b
  733. STA PPU_ADDRESS
    7 V, Q, L( k6 V2 |
  734. INX
    . o/ ]0 f0 J# C# J
  735. LDA PPU_Addr,X: i$ w. j4 ]6 p, v
  736. STA PPU_ADDRESS
    9 l, s4 F/ I, ^, D# m! ?1 d: n
  737. INX
    % `6 G1 L; I* s
  738. LDY PPU_Addr,X/ s1 w, y7 s: a, ^
  739. PPU_Proc_Cnt_Line_Write9 ^/ W6 ^, f. C! i! ]6 ~( r
  740. INX
      M' W" d+ r$ h: v( k; @
  741. LDA PPU_Addr,X6 q' T4 [- [% Y4 ~1 ~2 w5 ^
  742. STA PPU_DATA. X# a# K8 }) v. u: m
  743. DEY* @* t0 j8 g( ?
  744. BNE PPU_Proc_Cnt_Line_Write
    3 }6 p; K5 Z* Y& N, P# M3 v
  745. JMP PPU_Proc_End$ a5 k( _+ V- \& L) X" b3 [
  746. 2 U5 Z; q; b  @" R8 l# c
  747. ;==============================
    8 J: h" T. }$ p) [( V
  748. HEX_To_Dec;十六进制转十进制$ u# t. H8 s7 _, M; h
  749. STA HEX_Data- i& f  m& d5 S6 ^' |4 @2 m
  750. PHA
      p0 b+ g% @. {+ R; K
  751. TXA
    5 e) X# l* J- L# w
  752. PHA
    ! q+ L) Q/ o" b7 o* [/ I1 r* _
  753. LDX #$00
    8 `( @; T+ \* l" G, H, p$ }" ~
  754. LDA #$00
    ! w9 A) ~4 n: Z% w, k. E5 ^
  755. HEX_Cln
    . m; P; j0 A7 m! R
  756. STA DEC_H,X
    % l5 K' U' \4 `
  757. INX  A, C% l* |+ |" _4 {
  758. CPX #$03! v# S1 o; Z: D
  759. BCC HEX_Cln
      M! i  g  z! ?. p/ |
  760. LDA HEX_Data
    % S, S  O; J) I9 `8 R1 W* M
  761. ;------------------------------
    4 T3 d/ g- k8 w# }# Q
  762. HEX_100, I6 |, P' r* P  e) w/ P" F
  763. CMP #100' N3 @" H, z! W% c/ j3 M
  764. BCC HEX_10
    2 E" N7 z: s$ A! s# G( b( ?( Z
  765. SEC
    . p) \& L* [9 f  w& A3 w. \
  766. SBC #100
    ' ]+ s! z: W" T' b- J2 x+ X
  767. INC DEC_H
    9 z/ D+ c: q# e. W1 |7 g
  768. BNE HEX_100" c6 J; _7 ~& v' T1 r) Z/ l0 n
  769. ;------------------------------
    ) B, o5 d9 F) R% j% n$ J  g
  770. HEX_10
    4 |3 G( ~; x( z9 z: m% W
  771. CMP #10
    # n. S1 _' S. j3 |$ J! Q" q4 b( h  m
  772. BCC HEX_1* ?/ {$ C, \: ?
  773. SEC
    ! Z* T' W4 m4 ^+ d
  774. SBC #10
    / n( A! O5 Z* c3 {0 J- A$ k
  775. INC DEC_T; X9 Y( |! f# ^
  776. BNE HEX_10' [- U0 x; c( K" ~* H
  777. ;------------------------------
    . f# [3 t3 ]/ t' h3 A  p- p/ y. j
  778. HEX_1
    : b! p/ r, x4 A, b
  779. STA DEC_L, V% _# ~5 Z6 \) `+ ]& f
  780. PLA
    % P8 R+ ~1 `  _. f8 H- F! B% a; D; u7 ~
  781. TAX
    ( ^4 A( j6 [4 [* C
  782. PLA: t% f) A. `) K3 q/ Y( Z; t
  783. RTS
    , j" ]# A. @: l7 F& Q" i8 _! j

  784. ) l! \) b9 v- E/ [
  785. ;==============================
    & f0 k4 x% P+ `/ b
  786. ;音乐曲目显示- Y3 e! m; l1 F: _. l
  787. Music_Show( l. c& G% K1 B! f0 Q  e, c( p
  788. LDA Music_Cur
    " Q/ {  a8 B) T5 X6 |& F
  789. CLC# t7 G# V6 A" W
  790. ADC #$01
    # |' Z8 g* Y" m% g+ n. W
  791. JSR HEX_To_Dec
    5 q) j0 L5 ]) z* W$ g
  792. LDX PPU_Cur- n3 q% e; I( P' O
  793. LDA #$FD. G: ?. [- B& U' z6 l
  794. STA PPU_Addr,X
    ' l0 c; a, j' {, I
  795. INX
    & @/ r( C5 M+ h, M
  796. LDA #HIGH(Play_Index_Pos)" X" ^% @7 l2 W: D4 i8 y$ J
  797. STA PPU_Addr,X2 |0 l: @; v7 T! m( S$ J
  798. INX1 B3 B) e' m' ]6 _- m
  799. LDA #LOW(Play_Index_Pos)
    " ^& e0 o3 b) [: v/ B) {
  800. STA PPU_Addr,X' y* k- C- b* E' K( i0 L: ]
  801. INX
    + F4 y' F) X# T" V

  802. # j0 d" M4 M+ g' K% h3 J' L
  803. .IF Music_Song_Total > 992 d8 _) I, M- I8 E5 r" a2 p
  804. LDA DEC_H
    , b3 N" \- i* b- _) G2 P% V
  805. ORA #$306 ^5 G8 D8 u: f6 a8 E) ?
  806. STA PPU_Addr,X
    " I/ V" u, R" e: ]
  807. INX
    & f2 C) {' U, G- I+ i
  808. .ENDIF" q6 `1 Y$ G  @% |
  809. ; ?, |3 k' \2 }7 j" Q& O1 ]- q
  810. .IF Music_Song_Total > 9
    ( F7 \6 ^4 \, N! i
  811. LDA DEC_T/ O3 g* S0 T9 W7 u  s3 _$ }
  812. ORA #$30" T7 t0 r/ I  ^, [" K
  813. STA PPU_Addr,X
    - y: G- U! s. j% ]& ]1 `
  814. INX+ E$ ]: j' `: D" L$ }! t: M7 e
  815. .ENDIF
    # o. q5 D  c2 @! O6 b  ?! F5 D# u
  816. 2 O$ O5 _4 l! x, A, k7 _
  817. LDA DEC_L
    / _1 J$ F6 J& z: e5 V
  818. ORA #$305 Y4 q9 C1 }' W, a8 G
  819. STA PPU_Addr,X& J1 \, V/ ^9 m/ I5 Z+ h
  820. INX
    - z2 Z0 I. g! ~0 ?% b

  821. 4 y% k; g3 c/ Y7 T
  822. LDA #'/'2 A6 K8 `, \; }! H0 ^! `
  823. STA PPU_Addr,X: @5 k- g, r8 p9 e0 Q  w$ n
  824. INX
    , L% I8 z+ @4 ?7 U7 U8 F
  825. Music_Show_Total
    7 r. s6 A- \5 U* w: n1 s
  826. LDA #Music_Song_Total
    ! b' N+ C4 A# Z; j; c: x
  827. JSR HEX_To_Dec' m- [" q  p$ d( e/ f; j# A* J
  828. * G  l* r$ g- R) }1 J! u. v
  829. .IF Music_Song_Total > 99
    ( [' c* Y7 }5 V( R2 b* Y% s
  830. LDA DEC_H
    ' w5 u. G4 g" O$ r: ?" J( x
  831. ORA #$30
    " C4 J) \& T) p9 l
  832. STA PPU_Addr,X
    1 c* o" `0 Q4 N, e' M3 H& f. V: y9 n
  833. INX
    . @2 S" f. F* i! o5 ?
  834. .ENDIF0 [$ f4 q, W) G2 h$ `% ^
  835. - c8 w% j" M" Z: W0 ~3 [
  836. .IF Music_Song_Total > 9
      J2 M$ `0 B* M
  837. LDA DEC_T) o( S# F, |  h+ }2 B8 W& G
  838. ORA #$30
    / ]1 m) x' W0 s9 ^  ^% T$ @
  839. STA PPU_Addr,X
    2 R  y: P" N" i0 _
  840. INX! [3 |3 S; K- G6 }4 {/ _* G
  841. .ENDIF
    5 e) w: I& g9 W! q" X/ w7 i
  842. 7 j7 c( l4 H" T6 \/ C8 G
  843. LDA DEC_L  ^6 i2 V& {5 E7 [0 t' @
  844. ORA #$306 L  F+ ^4 |6 y
  845. STA PPU_Addr,X
    / n1 I, {$ [: [! ~% u
  846. INX" f- z& e$ g+ ^8 E+ a$ n. o# |
  847. - R: x' R+ @0 U: T. _7 ?( W
  848. JSR PPU_End
    1 i5 ^& Q& O5 W% `1 P
  849. Music_Show_End
    - m9 i; m1 w0 B) v  }* V! B
  850. RTS( \4 L$ u5 W0 }
  851. . T: K, H- _4 I$ p5 E% @' n# Q
  852. ;==============================
    5 @9 p; h1 s& g  O, J& a
  853. Time_Show;播放时间显示
    ! y- L/ \1 l/ n
  854. JSR PPU_Addr_Set
    & O, z8 r* b: x9 e: G
  855. LDA #HIGH(Play_Time_Pos)
    7 @2 e! K7 J% Z8 }: |
  856. STA PPU_Addr,X  f1 i& B; N; z9 a8 _8 H
  857. INX3 P( H' g  R& W
  858. LDA #LOW(Play_Time_Pos)$ t6 v* l+ }5 Y" |1 z4 o
  859. STA PPU_Addr,X8 L; _; a1 ~8 E) h1 K! t
  860. INX& L' i7 L# N# l5 }" F+ x0 @
  861. Time_Show_H+ i( ?' x- g: a' }5 y/ l
  862. LDA Time_H
    3 T7 Y2 p; W+ o4 J& h- b
  863. JSR HEX_To_Dec$ I+ Z* g# [" t* j5 u
  864. JSR Time_Digit1 e- H+ u9 z# E) x
  865. LDA #':'2 s2 `' U6 d, c; n4 K. V9 {* _
  866. STA PPU_Addr,X% h# r- r  y8 q3 Y9 y/ y! D$ h
  867. INX$ l1 d- F5 N- j6 t: C, c: v
  868. Time_Show_M
    : M' b5 B) x5 f7 U- d7 N* ]4 A% \
  869. LDA Time_M
    + X$ C- V: ]7 h
  870. JSR HEX_To_Dec
    2 N) B% p7 @; e
  871. JSR Time_Digit
    3 j0 F# \$ K' Z
  872. LDA #':'9 T8 I6 {; i- ~
  873. STA PPU_Addr,X& R3 }( o+ M$ E6 M
  874. INX1 i- o$ y4 M; i5 f
  875. Time_Show_S' A& ?+ X( L" i( Y
  876. LDA Time_S" X0 f  F7 p1 ^, C3 `6 M9 D" Z
  877. JSR HEX_To_Dec
    4 n/ S9 G2 T' x; b3 U: T% ~5 o
  878. JSR Time_Digit
    & D- K. E! \9 x1 @3 S
  879. JSR PPU_End/ T( N7 F3 ^" {- ]  B4 |& Z
  880. Time_Show_End
    % z$ ?) b2 h2 u) ]
  881. RTS
    + T6 t' ?& E- O) [; K/ J

  882. * n6 |9 L  J5 C- G: _$ o6 p
  883. Time_Digit: S/ m! W2 m  ?
  884. LDA DEC_T: M4 j) a- B9 r3 l! }3 t( f
  885. ORA #$307 D! s; V* A- q1 X9 T0 A$ N( c
  886. STA PPU_Addr,X* O2 c; K% V+ W6 w
  887. INX% a1 K% V2 E, @1 L
  888. LDA DEC_L) z" [. J' q, }# U1 I4 j
  889. ORA #$30
    ' w* z/ m! K1 E; q5 Z
  890. STA PPU_Addr,X$ k- O4 [3 u; ?. a* |
  891. INX
    + a* s. a8 O( i7 ~4 H6 ~% W; q
  892. RTS
    % x9 Q+ x* O, |; k

  893.   F* x: i; U6 }
  894. ;==============================: p  [" c) b/ ~
  895. Time_Count;计时5 S& U# m8 ~5 v1 R+ H: ]8 e
  896. LDA Music_State0 v+ v  [5 M2 X. g5 R
  897. ORA Time_Wait_Cnt7 V2 ^. q' {! G+ N
  898. BNE Time_Count_End$ }  a! a4 \1 K1 E
  899. INC Time_Cnt- f% R2 r2 _# R. K  a
  900. LDA Time_Cnt( r$ I  L$ d2 K. I3 L8 s7 G
  901. CMP #60! U5 _% J/ Z  Z8 F2 T0 o& a
  902. BCC Time_Count_End0 h/ y- f$ [- [4 l" f8 n
  903. LDA #00
    1 S2 O+ d, e9 P+ N1 h
  904. STA Time_Cnt( {; b% w1 B# p; D# L
  905. INC Time_S( f5 i8 X8 E& A7 L. q! V8 e8 y
  906. 5 @& y1 I# U4 Y& S
  907. Time_S_Cnt
    : g2 F- ?; Z% }8 n/ `2 [
  908. LDA Time_S: w( z& c; }; K4 Z6 y
  909. CMP #60; F+ p& @4 p2 R! |) A
  910. BCC Time_Count_End
    , c& _& J* s7 m: m" Q6 z
  911. LDA #007 r! N7 |( B1 r2 j9 h
  912. STA Time_S
    & M3 [# Z& h6 N+ \1 W! C; g5 |! n
  913. INC Time_M
    / s4 F/ @. ^0 n6 T* O* w7 t
  914. ) h/ G) E* t5 }! W1 M1 H
  915. Time_M_Cnt2 Y; O% l3 D7 A/ P9 j
  916. LDA Time_M
    " K: z, {; ^% M# ?# r; n0 B" e
  917. CMP #60
    ' S  e& V! |4 d' h4 _
  918. BCC Time_Count_End
    , p, v5 |' D7 U9 K5 ~1 E) ]
  919. LDA #00
    / ?/ W% A* ~9 M# z
  920. STA Time_M
    ' }: w+ b. B- s/ B
  921. INC Time_H% u2 e8 j: F+ F
  922. # d+ _* c' l. m7 s! H1 z) [
  923. Time_H_Cnt+ `) \+ C$ j0 M+ Y4 \) Q1 ~
  924. LDA Time_H# D5 s; C7 t3 v% _
  925. CMP #246 D, O! X4 B$ ^; n. I- k% @2 K/ P
  926. BCC Time_Count_End
    6 |2 ]' [3 Z1 `1 S$ m
  927. LDA #00
    0 }! X: ^" g+ a2 n
  928. STA Time_H
    ; U7 m' B$ s5 x! {8 Z, V. @

  929. 0 C' d- @0 P0 C, l! C
  930. Time_Count_End
    8 g9 p# r3 ]5 D% \$ D8 Q) i% V
  931. RTS
    * G9 @( X1 t9 z& Y5 x+ b
  932. % g2 m) r& K' @) m2 g$ Q& @
  933. ;==============================3 o' e1 ]8 f" G+ p: ^+ q
  934. Time_ReSet;播放时间重置) {: C) Z# t; D8 U6 p9 j! B8 N
  935. LDA #$00! s8 Q/ X0 L. M% T5 {
  936. STA Time_S- i; M- g, L! }1 Y6 Q2 t. q
  937. STA Time_M
    " a# A2 D2 \* y/ M
  938. STA Time_H
    2 N; U& ^7 q1 f6 H* d+ g6 z
  939. STA Time_Cnt
    6 c4 c6 n, p( A6 V
  940. RTS
    - `9 n, K2 H6 u0 A% s/ K

  941. $ v5 w5 q+ T% ~: `0 K, n: b
  942. ;==============================  z- i2 @  N9 ?! v# z2 W. ]6 Q, M
  943. Music_Bar_ReSet;音乐条重置' D, T6 T6 l3 j* w: g7 ~+ K7 S
  944. LDA #$00
    $ l5 s9 ?% [: z" q1 C
  945. LDX #$00
    6 Y& a) J! t$ P- G: G
  946. Music_Bar_ReSet_Set
    : I9 D. k4 a7 r* Z* G' ?
  947. STA Sound_Bar,X
    9 }3 b4 ~8 g( l/ Y& h$ k& E. p
  948. INX
    - a9 }) E2 X9 y8 ?+ A  }7 [2 a
  949. CPX #$10: _! |% G% e+ h4 p
  950. BCC Music_Bar_ReSet_Set
    + s! G3 H# C9 X# V5 F
  951. RTS2 B+ B$ g% f  s9 r

  952. . S  G: v5 _+ M, k
  953. ;==============================
    " l% j0 j; A% e8 l8 k" O
  954. PPU_Data;PPU数据写入, d! h! P/ j6 L) r
  955. STY Data_L9 i$ V; t. T1 h9 j
  956. STX Data_H4 ?3 r) d, C8 R1 T
  957. LDY #$FF' L. r, W8 K3 Z2 s! a
  958. LDX PPU_Cur
    " c" j$ o5 C8 \) w* a0 c
  959. DEX9 M7 z8 ?" G: t. U, A0 f
  960. PPU_Data_Beg
    * o' s+ p( \+ D/ X5 d! ?" @- t
  961. INX, B- i7 J3 n" C- {( c$ x
  962. INY7 d( J, p1 ^5 D+ R* A1 Y2 h7 }" W3 U6 i
  963. LDA [Data_L],Y+ x) A- w6 M. R& ?
  964. STA PPU_Addr,X
    ! B2 h4 k3 I* I6 {3 U2 ^
  965. BNE PPU_Data_Beg) [7 L9 T' j2 O4 p
  966. STX PPU_Cur* ]% _( i% m% p: o, Z
  967. PPU_Data_End3 s7 k$ o: Q4 b
  968. RTS1 j  E. i* G) ~& u) x8 Z, Y. p
  969. % A* N5 y3 `% C# {( p
  970. ;==============================* B# J2 {7 F) _1 |- s
  971. Music_Stata_Show;播放状态显示
    , D7 Q9 l, d, J- q% t; _
  972. LDA Music_State
    0 s) U" J/ P. Y
  973. BEQ Music_Stata_Show_Play& c; a" z' G0 c, s  v
  974. Music_Stata_Show_Stop) o& v( I7 Y% S& ]# J2 E: \: j
  975. LDY #LOW(Music_State_Stop)" Z' V, q: Y, D. b- `9 H
  976. LDX #HIGH(Music_State_Stop)
    6 y) R5 V4 t2 p& I( c) D
  977. JSR PPU_Data
    # N. |) r; w5 l( f! @. m
  978. RTS# ]* J% J1 E/ x' s) z3 c
  979. Music_Stata_Show_Play- t; R5 B( B7 l" ~2 ^' ^
  980. LDY #LOW(Music_State_Play)( G& Q/ Y! Z6 k( z% X8 v
  981. LDX #HIGH(Music_State_Play)
    ; r" Q! l- @0 _2 D( B4 P  ]
  982. JSR PPU_Data, m! T  g# {3 ~! b4 i
  983. RTS
    ) e, b. y+ D  ~" ]5 l& ?+ F7 r

  984. 9 U, J$ W3 e% E, K. w" B; _: w
  985. .IF SOUND_BAR_SHOW_ENABLE, h: v4 k, f: @. R2 M* q8 W0 t" f
  986. ;==============================
    8 g- F/ e; }6 t8 s& ~
  987. Sound_Bar_Text_Set;标题与音乐条初始化7 U) y2 e8 `& ]/ t/ \* t
  988. LDY #LOW(Sound_Bar_Text_Data)
    3 w/ b4 E! Q6 e6 n" C
  989. LDX #HIGH(Sound_Bar_Text_Data). s9 Y9 \+ @. m
  990. JSR PPU_Data( `% W$ @1 `  f1 r/ S1 I
  991. RTS) n# S9 R2 n2 n) ]

  992. % P( Q: x3 h& n2 l
  993. .ENDIF
    1 W$ K* V) u' n

  994. / b- X1 {9 C' e0 T* d
  995. ;==============================0 t3 z* d) ?  l
  996. Set_NameTable_Attributes;设置命名表属性
    6 Z0 f& p7 T' f
  997. LDA PPU_STATUS3 p8 G0 X) t1 i3 ]! N- c
  998. LDA #$23' u0 b, |2 D! w5 _+ _" c5 V
  999. STA PPU_ADDRESS0 B) g7 L. o) D* S
  1000. LDA #$C0" ~8 e& ^, h2 }$ [- ?
  1001. STA PPU_ADDRESS
    1 L& `! N+ Y$ n- I) f
  1002. LDX #$00! A4 ]& F6 l9 [5 u& Q& B
  1003. Set_NameTable_Attributes_Write
    2 M* r4 x( E& Z( o# J
  1004. LDA Palette_Attributes,X) }6 ^/ x) _. j. P
  1005. STA PPU_DATA) C$ q2 k( z4 r+ B2 B& _, A
  1006. INX
    ( G: L$ d5 {" ]6 d- x' H* a
  1007. CPX #$40
    , Z) S8 g3 P8 F+ C4 ~
  1008. BCC Set_NameTable_Attributes_Write
    2 D2 k% X7 c  Q3 H- G; A
  1009. RTS
    ( T0 P& C" D( l7 m$ x5 }
  1010. 3 \$ s4 h2 q3 x0 w8 Y9 n* |
  1011. ;==============================
    1 k" k( ]) v* w. K' I! t
  1012. Set_Palette_Color;设置调色板数据
    ( c1 D# M8 q  G9 |/ m% [* n
  1013. LDA PPU_STATUS
    : I9 w% _0 h; W' U
  1014. LDA #$3F
    " m' X! S* D2 m9 I$ G2 Y- _
  1015. STA PPU_ADDRESS
    4 D* T9 Z/ r6 P/ z
  1016. LDA #$00
    0 L! [" G- ]1 R$ }" D
  1017. STA PPU_ADDRESS
    3 y& d% F6 q7 n  b+ ~3 n6 T
  1018. LDX #$00
    8 K8 |$ ^7 n# U' E. Q0 l
  1019. Set_Palette_Color_Write: p% |; F. U8 O/ m
  1020. LDA Palette_Data,X
    + ~; _: J" }/ `5 I) Y" j  v
  1021. STA PPU_DATA
    ! C6 F6 E% Q- p9 d+ n2 |% X
  1022. INX$ R2 k9 T( E& H
  1023. CPX #$20
    6 _: A9 I% |" @
  1024. BCC Set_Palette_Color_Write
    1 I+ B. R  _4 H( x6 n. m' q, \& i
  1025. RTS) j. Z3 D: z5 }$ d' s3 s0 H
  1026. 9 o/ y; R; N5 P( H
  1027. ;==============================+ V6 N* Y& W3 m
  1028. Init_Palette_Addr;初始化调色板数据
    ) a4 \1 t) n& `! i* x
  1029. LDX #$00# Z8 X! ]# g2 ~8 L( J
  1030. Init_Palette_Addr_Write& z5 _7 G( n, B' j+ I
  1031. LDA Palette_Data,X
    2 N$ I: c) `& B1 N
  1032. STA Palette_Addr,X
    ( e; E9 ]  {- q+ t9 p; K1 z$ O
  1033. INX0 n# w; L: {5 }  a, O0 P
  1034. CPX #$20; W: F' B1 L0 g  F! i+ R( o' ?$ p
  1035. BCC Init_Palette_Addr_Write
    " G2 s1 n3 L* y) F. K
  1036. RTS0 J/ T( L1 C! c
  1037.   J$ @1 y- f) q9 o; V% z
  1038. ;==============================
    * r3 `" m3 d6 ^5 Q& ]
  1039. Update_Palette_Color;更新调色板颜色/ }8 E  Y5 V4 x0 k1 W
  1040. LDA Show_Track_Name# d+ V4 c/ s/ T5 }( h# s% f$ r
  1041. BNE Update_Palette_Color_End6 q# y+ h9 _7 n. w
  1042. LDA Palette_Update_Flag
    % M9 j" z+ z( {  V
  1043. BEQ Update_Palette_Color_End) n, K( X8 ?( k  o: E+ ^0 A
  1044. LDA #$3F
    # D6 ~7 s$ S. w1 v3 ]
  1045. STA PPU_ADDRESS
    2 M- B) j0 t( ~! m' {
  1046. LDA #$00
    ) h" P8 B9 v2 @, Z3 E6 n2 \- \
  1047. STA PPU_ADDRESS; y* _% @" {  @% W
  1048. LDX #$00+ ]: A9 h8 R" H7 f6 B
  1049. Update_Palette_Color_Write- |4 z! X+ ^4 \/ ^2 f5 C
  1050. LDA Palette_Addr,X
    & a; |, |' v4 p3 E. K9 L9 F/ Z
  1051. STA PPU_DATA1 o1 U5 R2 z7 O, j. J
  1052. INX
    & P7 D" E5 a9 j$ P& P3 N/ A  K- H
  1053. CPX #$20
    $ M$ C' F$ l& Z2 U+ a
  1054. BCC Update_Palette_Color_Write
    " M) }- l1 W! |# N' b1 N) X
  1055. LDA #$006 I) p6 g: L: B0 g% E. K
  1056. STA Palette_Update_Flag
    & h3 ~/ `# c8 W
  1057. Update_Palette_Color_End
    ; [* t' t; x% G+ S4 v7 R
  1058. RTS
      S7 y7 m- u( E4 S' q: O! \
  1059. ( D3 X7 O" P& F8 G( A
  1060. ;==============================
    ; S9 L6 r+ d! h; x4 b8 V
  1061. Update_Palette_Data;更新调色板数据6 n( @% p: H3 `3 E7 A/ O$ V1 z
  1062. LDA Show_Track_Name2 }* Z5 {1 h5 o# j9 o+ o; |
  1063. BNE Update_Palette_Data_End
    4 X: t; {# ?3 E6 q
  1064. LDA Music_State
    ' n$ f4 g8 p+ y' c% ~% h
  1065. BNE Update_Palette_Data_End
    8 ^; w% J% J! ?, ?2 @5 e5 S
  1066. Update_Palette_Data_Check
    0 F- N- ]( H' j* C' x5 P$ g
  1067. LDA Palette_Wait_Cnt4 N9 U* S3 P$ @0 E1 C
  1068. BPL Update_Palette_Data_Check_Over  M; {6 S3 m4 Q( t% h% C) ?6 r
  1069. LDA #Palette_Update_Interval1 |0 D) R. U4 g" p0 E' n7 P
  1070. STA Palette_Wait_Cnt
    % Z2 E1 w4 r0 T) y
  1071. Update_Palette_Data_Check_Over
    4 v& [: g" _! k% \
  1072. DEC Palette_Wait_Cnt
    7 H; d8 |& \+ [$ N, {8 ~. w
  1073. BNE Update_Palette_Data_End, r' A% `$ ]; l  c5 }
  1074. INC Palette_Update_Flag
    : i9 s% e+ }6 C4 \
  1075. LDA #Palette_Update_Interval
    , R# o0 p% E8 [. x' [0 u+ V5 E
  1076. STA Palette_Wait_Cnt
    2 r' _1 j9 F( E$ e
  1077. LDA Palette_Update_Addr% H9 [, V- l6 D3 V  b! Z
  1078. CMP #Palette_Update_Max
    2 o8 u7 Q0 c7 j0 N4 b
  1079. BNE Update_Palette_Data_Set! E. t, p! a! q
  1080. LDA #Palette_Update_Min - 1
    4 Z1 p! h1 w! s& Y5 o$ \; v
  1081. STA Palette_Update_Addr
    / |1 I( {* f- b) c  b
  1082. Update_Palette_Data_Set
    ' G1 m, W$ w; ^' Y2 w+ I; [. x
  1083. INC Palette_Update_Addr
    + f; C& x9 Q! E0 @
  1084. Update_Palette_Data_End4 E$ A) c3 H# W1 {. ]5 |+ B
  1085. RTS
    7 c- l' N" [2 F4 u6 j  E

  1086. # Z1 T" i! _. ^$ c8 P. I  c
  1087. ;==============================# |6 @5 k' K( ^% k( O
  1088. Show_Music_Text;显示静态文本# \; X: w* W* y8 }. N. e
  1089. LDX #$00  _' z: ~& B2 H: F/ ?/ k
  1090. Show_Music_Text_Set2 B; p8 Z0 u$ {2 `  Y4 A
  1091. LDA Static_Text_Data,X2 c5 O" X8 |' E% v8 H! `: w
  1092. STA Data_L
    9 z+ N  c& i% D$ X" s% R8 h8 a# t; o
  1093. INX9 ?5 u& F; D" n: f. h1 `  G2 i
  1094. LDA Static_Text_Data,X
    % J5 q3 a) v( ?' |( A: Y
  1095. STA Data_H* v8 y" w0 t! v2 `! ]7 p+ C3 H& g4 N
  1096. INX3 O, M+ {3 F+ ?" ~
  1097. LDY #$00: M) R  v+ x( |$ m- P
  1098. LDA [Data_L],Y
    3 K* e! M, g: }/ y% f- l
  1099. STA Data_Cnt
    ! \( H  l0 g2 X9 t7 e8 W& X) t* D
  1100. DEX$ M+ c( t  I( s0 f+ a
  1101. DEX0 N. w; _% h6 F7 _( a
  1102. LDA Static_Text_Pos,X
    4 z& M* D; b% i# x. h
  1103. STA PPU_ADDRESS
    4 Z/ v9 `' m1 E# d
  1104. INX" n. q, d& a7 n4 G1 l8 ]
  1105. LDA #$20; v# k& u: ]) ~2 s& o4 r: {
  1106. SEC) M' W" S( N, V4 ^% d0 C( R/ e7 W
  1107. SBC Data_Cnt. N* r2 X2 X& O- {
  1108. LSR A
    0 W6 B" w1 S4 X1 f6 L- [; L8 r
  1109. STA Data_Buf
    + T4 l$ S6 L$ e4 t" i0 F
  1110. LDA Static_Text_Pos,X
    & f( ?% c( B3 f: q$ V! c4 a: m* _
  1111. AND #$E0% A, o3 b+ L/ x  f' g
  1112. CLC  N* V7 N1 O! a0 ]9 x! A3 V3 c
  1113. ADC Data_Buf5 D5 ]; M  V' j& f
  1114. STA PPU_ADDRESS
    & [5 V) x8 w4 K4 C: J* h" x$ w( e
  1115. INX
    % ~0 S6 H5 s$ m: X. ~0 V
  1116. Show_Music_Text_Set_Write4 ^8 ?, F- o; ?) C  \
  1117. INY
    / K' @% t2 M$ h) N
  1118. LDA [Data_L],Y
    & x# A1 k4 B; L& l
  1119. STA PPU_DATA
      g& X9 I# r, B' X3 O' l$ @
  1120. DEC Data_Cnt  c5 g6 n+ J0 ^
  1121. BNE Show_Music_Text_Set_Write" O" @6 C. S  V
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    2 z1 [! |5 t5 ]% [  O2 p$ w
  1123. BCC Show_Music_Text_Set+ H" b# c% N, m' H9 k+ z+ ?
  1124. RTS
    . q0 x) J) S4 q& N' m# B

  1125. $ @8 I  D; ^2 Z+ r1 G. C# A9 y
  1126. ;==============================3 [- Q* V! Y( C. F) m
  1127. .IF Track_Name_Pos;显示曲目信息  Y7 q. l! v8 g' l) W
  1128. Show_Track_Info! C3 j5 E6 r% Q$ g7 s1 G' E
  1129. INC Show_Track_Name( l6 K' W) _: I0 m8 T3 C
  1130. Show_Track_Info_Clear
    # _, h: \; u1 s6 F1 g$ A  b
  1131. LDX PPU_Cur
    7 t. F/ p: V) M/ z; e
  1132. LDA #Mode_Clear
    5 N3 y2 c" `' r8 W$ p4 N
  1133. STA PPU_Addr,X
    1 U3 m0 \/ L+ ?: q
  1134. INX$ i- d9 n; T* U8 o( L

  1135. ( Z. {' ?; P/ V
  1136. LDA Music_Last
    % v4 L) h$ V1 X! C: X
  1137. JSR Show_Get_Track_Name_Center_Pos
    5 E9 R6 ~3 m4 ~- Y
  1138. Show_Track_Info_Write_Cur
    & P* h: S8 ^; E5 n  ?+ A+ b
  1139. LDA #Mode_CntLine
    $ b- y2 M1 u, J/ J/ S% I7 ?6 `
  1140. STA PPU_Addr,X
    - U4 P) l% a: y" E
  1141. INX
    0 {. Z4 Q) X- ]7 W' ~4 v

  1142. , [8 _5 `+ m( F/ R$ n' J8 N
  1143. LDA Music_Cur1 b: I) \! ?! k: p; v
  1144. JSR Show_Get_Track_Name_Center_Pos
    # f/ y+ J, n) N# z+ g5 S
  1145. " V+ A: w1 h) P1 E2 x
  1146. Show_Track_Info_Write_Cur_Data
    4 M7 c1 `2 I5 R( M
  1147. INY0 p2 {8 a. t" ]  l- B7 D
  1148. LDA [Data_L],Y
    8 `8 }/ x( h: i1 `3 L1 t; v, S
  1149. STA PPU_Addr,X: E- x7 z$ B, X
  1150. INX
    + k5 M8 ]3 g7 N2 b! g. `, w" V
  1151. DEC Data_Cnt
      J  S8 {/ a) F) S+ z! o
  1152. BNE Show_Track_Info_Write_Cur_Data
    3 G6 F! N) H# L
  1153. Show_Track_Info_End7 K6 F6 ^8 r3 {5 K5 |2 f$ L
  1154. STX PPU_Cur
    0 B  K1 w& y# i
  1155. RTS# i4 o3 U; [1 H) R
  1156. . k0 P5 a1 i- G9 W
  1157. ;==============================
    , V/ ?. B- }! J0 p
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    " ]! Z) _2 e6 `) _) X
  1159. ASL A
    0 K6 g7 e* w2 V
  1160. TAY! r$ b3 |! S; [2 |; O
  1161. LDA Track_Name_Addr,Y* m+ j) P( `- X
  1162. STA Data_L$ }$ t- r; d! O6 @& }7 x% `
  1163. INY- j2 ^* u0 B2 ^8 h+ R
  1164. LDA Track_Name_Addr,Y
    % Q" H) V) _2 L# I0 s
  1165. STA Data_H
    4 ]: E* S; O" Z
  1166. LDY #$00
    " r7 k0 D8 |' b7 ]# x8 q# p+ O
  1167. LDA [Data_L],Y
    + q$ m5 Z" }' H, ^" l7 x
  1168. STA Data_Cnt* [7 W' G9 ]  o
  1169. LDA #$20" }3 k) H$ }5 a; ^4 X3 m' g
  1170. SEC  a. H9 K2 _* p7 V# ?/ H, d: l
  1171. SBC Data_Cnt
    : n  h0 ^+ Y: _/ W8 t
  1172. LSR A
    6 i# j, b0 ~* P/ ]" t
  1173. STA Data_Buf' g6 _( }' Z+ P. ]
  1174. LDA #HIGH(Track_Name_Pos)3 C6 _0 F& T" @
  1175. STA PPU_Addr,X/ J$ w' o; f, t: ?4 e
  1176. INX- j& T# d/ b* [# u  D3 M* i. n/ z* ]
  1177. LDA #LOW(Track_Name_Pos)% `$ u5 `: T6 g
  1178. AND #$E01 y) q/ O1 o/ k7 o/ o8 A1 |
  1179. CLC
    ; R+ O/ w% k# C' e
  1180. ADC Data_Buf" _+ P% t& I4 y- s. z' p/ j
  1181. STA PPU_Addr,X- |, s0 m  }: E" b3 d
  1182. INX
    ; V% }' c! Y# }* f
  1183. LDA Data_Cnt
    % z, E7 U2 @4 n; [
  1184. STA PPU_Addr,X
    1 O5 B# G! F! }4 f4 L8 u& u( ^5 q3 u% d' f
  1185. INX
    + y9 @6 Z/ h- l# Y5 K
  1186. Show_Get_Pos_Center_End
    + D+ W5 ^/ I5 n! _
  1187. RTS8 l% ~1 H2 B( t% }  B, ]
  1188. .ENDIF
      ?4 c3 R" z( H

  1189. # h( ~( }  ~! [3 f% H
  1190. ;------------------------------
    " D3 Z6 x0 s6 s6 `# q3 E7 j' Q
  1191. ;命名表数据! Q0 x1 T8 ^  n
  1192. Palette_Attributes
    6 M2 ~! e! P' W( G. D
  1193. .IF SOUND_BAR_SHOW_ENABLE, I8 `  b0 O, E4 O) F; C- r. ]  R* Z
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00( t( A; x$ @" L  Y( _
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA% c. `4 L+ f7 `# S
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$559 \! @% f$ |' n3 q9 O; @
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " \7 W* U$ n. f% u* v5 H5 ^
  1198. .ELSE1 r  J5 M- Q2 w3 N" ], h
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    * E$ y# I, g, g# r# W( P
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF, s- y- r- a5 q4 n, U5 J
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    ; p/ y; G( f2 ], v4 Y8 ]. t# T
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    . ~' J$ g3 R( k, v" o" S0 F. I9 \
  1203. .ENDIF
    * O& m! z& O# J* W5 N
  1204. # Q/ i. d' r3 Y3 u; O. F
  1205. ;------------------------------
    / F$ X/ [( M, R" B0 K$ K
  1206. ;调色板数据
    ) L! C( \4 B& B# A2 H6 T
  1207. Palette_Data% g6 Q# l2 q5 w' w
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    3 q' ~. k  w9 Q: Y- |
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    ' n( [8 C3 d, b: E" ^

  1210. 8 M! s: r4 G. K4 R% o6 e' Y& N
  1211. ;------------------------------9 o, |) Y! P, o0 l. t0 ?: k
  1212. Static_Text_Data6 Q/ y9 o4 [4 ]. F3 R
  1213. .WORD Static_Text_Title_Data( V% O5 O2 Y) O) o. R
  1214. .WORD Static_Text_Author_Data
    ; c6 R8 s' Q( R$ s: @: A% z' y
  1215. .WORD Static_Text_Date_Data1 ^3 M5 Y6 @9 f1 X0 D7 ]
  1216. Static_Text_Data_End" w1 b# @- h1 Y2 h
  1217. 0 `+ j" @/ W: W# B2 e: W
  1218. ;------------------------------
    + ^& _* K6 d4 R, d/ _9 q) @
  1219. Static_Text_Pos
    9 q" F- c3 f# |/ V
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    - K$ Q1 U% c* N- H8 N
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos); p& f1 H% x2 i% G6 C
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    ) ?& N; Z  g: X0 I
  1223. Static_Text_Pos_End  E6 Z, H. _  c; F3 l
  1224. 7 ^" f. a5 Y* o0 A
  1225. ;------------------------------
    ! ?  E$ k# h$ h( ^; T) B7 T) S
  1226. Music_State_Stop
    5 G( [2 p: B" v6 F
  1227. .IF SOUND_BAR_SHOW_ENABLE8 E* s/ w- X( b
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    ( |3 N8 ]+ D: a
  1229. ELSE
    ) n+ ~* f* i; G; H2 @5 z
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$004 R4 L# q( H; ?# ]
  1231. .ENDIF
    - [+ X3 j& a( ^. _. g4 G3 ]
  1232. Music_State_Play6 R* `$ v+ W, i: ^* A# b2 ]
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    - t& @- _  f/ s' L

  1234. , W9 U5 r) I) {) k1 T
  1235. ;------------------------------+ ]9 r- b4 u1 c1 K# u
  1236. Sound_Bar_Text_Data;声音类型文本8 [0 i( k; ]* N' }/ m, ~8 T# \9 \
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)0 S4 G/ v0 i; ?" O# P! |1 `
  1238. .DB "SQ1-",$FF3 ^- W6 [' L; Q' p8 c% o" n/ L
  1239. .DB $FE,"SQ2-",$FF
    9 l8 V, @5 k5 h, D$ I
  1240. .DB $FE,"TRI-",$FF5 q: V8 t& a/ S6 R) L. p
  1241. .DB $FE,"NOI-",$FF
    4 D" }& P  Z6 M; [8 ]  j+ V
  1242. .DB $FE,"DMC-",$FF,$00* L8 B5 T  p% A: Q9 V. f5 [

  1243. 6 B, L) q+ k$ @0 X  P% r  C
  1244. .IF Track_Name_Pos
    % g. T) a3 _5 r
  1245. ;------------------------------3 l0 @% Q9 P# Y' [" c
  1246. Track_Name_Addr;曲目名地址索引, o; x) w8 v5 D$ @
  1247. .WORD Trackr_01& K/ g% E* g# ~) ]1 q4 `# d
  1248. .WORD Trackr_02, S+ m# F* M( `, w
  1249. .WORD Trackr_03/ Q& |6 A" w8 L" W( ?. ~
  1250. .WORD Trackr_048 v/ x+ \. ]0 [1 O- K
  1251. .WORD Trackr_05
    - T' Z$ s6 Z. K8 B
  1252. .WORD Trackr_060 B- ]; S% Q- [, x' M0 D1 _
  1253. .WORD Trackr_07' M( D) ~; }! z% D: M% J; h  H/ b
  1254. .WORD Trackr_087 J2 z" H" C/ f. i8 b: {( I4 O
  1255. .WORD Trackr_09
      v- X  K6 [4 Q( [8 i/ p" W
  1256. .WORD Trackr_10  w4 {: M$ \' w% ~- ^: @" ?) _) V
  1257. .WORD Trackr_11
    & |  T' v! G1 g3 o1 @) D1 x1 K
  1258. .WORD Trackr_12
    8 K) A% m- S/ L" |$ u9 J, V. S
  1259. .WORD Trackr_13
    * v+ I+ H" O5 G( e( ^6 v
  1260. .WORD Trackr_14
    : j6 E' w& _8 K* s
  1261. .WORD Trackr_15
    3 l/ @5 m, k$ n% t
  1262. .WORD Trackr_16
    : J, `! i* _' o) v; S
  1263. .WORD Trackr_17" w. Z+ s6 a8 T% _& q  l6 ?
  1264. .WORD Trackr_18
    " T% y2 Z+ j7 @8 L- e* b6 i# [
  1265. .WORD Trackr_198 G9 J4 l! {( M1 [% F
  1266. .WORD Trackr_20
    % b# u/ G2 H  N4 L) w4 U) @* P
  1267. .WORD Trackr_21
    # e5 _5 f# ~; u& n' E. ?
  1268. .WORD Trackr_22/ D1 I' a" g8 Z/ D' D% M1 v0 n
  1269. .WORD Trackr_23
    & B( T# z9 ]0 _0 ]1 S
  1270. .WORD Trackr_24  }8 H: B, a( O/ _
  1271. .WORD Trackr_25" r/ v+ d' Z. D
  1272. .WORD Trackr_26: A) B! p* x2 L
  1273. .WORD Trackr_27
    " w3 X" w: B, }1 `. H/ K
  1274. .WORD Trackr_28
    ' Y( @$ Q* T- N) l
  1275. .WORD Trackr_29# v( K+ m8 g6 u$ Q1 N1 j% K' y
  1276. .WORD Trackr_30: r* t. H3 ?. i! l4 k5 t) R; c
  1277. .WORD Trackr_31
    3 ~" m* B8 ^% D7 v, o
  1278. .WORD Trackr_325 X; W; t3 I/ M& F' ~/ g5 |* E0 ~
  1279. .WORD Trackr_33
    9 a" k% W) N- J/ G9 V
  1280. .WORD Trackr_342 @7 }+ Z; C# g4 U$ g% y6 h# h
  1281. .WORD Trackr_35$ }3 k0 j3 a$ Y9 D) v/ F
  1282. .WORD Trackr_36
    0 ?' y9 T3 k9 a3 K: n6 M
  1283. .WORD Trackr_37; D4 Z! I5 a# X4 A9 k
  1284. .WORD Trackr_38
    ! r. F2 }/ w2 G: D
  1285. .WORD Trackr_39
    . R& l$ q# }, G9 P* l$ I" `9 O) Y

  1286. 7 p1 K* W& b8 F  R' _
  1287. ;------------------------------
    - D/ d& X( h) p( ?
  1288. Trackr_Name_Data% ?( H4 k" o* U( `- B
  1289. Trackr_01 .DB $05,"BGM 1"
    1 L  T& \* \# C
  1290. Trackr_02 .DB $05,"BGM 2") T" r% }/ ], G$ V! w
  1291. Trackr_03 .DB $05,"BGM 3"
    9 W! k8 `( a( k6 ~
  1292. Trackr_04 .DB $05,"BGM 4"
    9 t+ u7 X" `5 i, e; n
  1293. Trackr_05 .DB $05,"BGM 5"
    2 v# W( b3 f0 G, a( |( O
  1294. Trackr_06 .DB $05,"BGM 6"5 Q) w3 \, V4 x; w
  1295. Trackr_07 .DB $05,"BGM 7"7 x+ f* Q& n( z, j2 q: A. d( N1 Z. y
  1296. Trackr_08 .DB $05,"GREAT"
    5 _. G& h) n$ G& U; ~
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ' f( |# T& {6 b% A" C
  1298. Trackr_10 .DB $08,"BOSS2BGM"/ X6 r4 R1 S/ E2 d# V, R0 }* n
  1299. Trackr_11 .DB $07,"P CLEAR"
    / A; K! G/ N: q5 h) V
  1300. Trackr_12 .DB $07,"A CLEAR"& x1 Y% P# P, Z! U$ P! M' F
  1301. Trackr_13 .DB $04,"OVER"
    , z0 q# m% i- |6 B$ L0 ~9 H4 R
  1302. Trackr_14 .DB $06,"ENDING"
    ; k& Y4 p  v) C& @! o8 M, V
  1303. Trackr_15 .DB $04,"SUTA"  j  W/ O/ s/ Q9 S( O) L% V
  1304. Trackr_16 .DB $07,"THUNDER"
    ( w. f% y. ~8 k  o0 q& C
  1305. Trackr_17 .DB $04,"SHOT"3 ?! n1 b$ F+ h* Z7 w1 W$ c
  1306. Trackr_18 .DB $05,"LASER"+ @* r% a5 [# H
  1307. Trackr_19 .DB $06,"SPREAD", Z5 h" N' q- l
  1308. Trackr_20 .DB $04,"FIRE"8 \; [2 a/ G/ y) |+ \
  1309. Trackr_21 .DB $06,"B SHOT"& ~2 {. L1 \) p; f# ]
  1310. Trackr_22 .DB $08,"T DAMEGE"
    9 [( H6 U: U4 g* r" z
  1311. Trackr_23 .DB $07,"HARETSU"
    $ p/ ^: y' X! V0 F# Y
  1312. Trackr_24 .DB $05,"T OUT"
    8 m/ ]! u$ a" }/ U6 S  l
  1313. Trackr_25 .DB $05,"Z OUT"
    0 _) j+ }: n/ ?0 k
  1314. Trackr_26 .DB $05,"A OUT"
    2 g% e6 e; {+ o* `  w! |- G
  1315. Trackr_27 .DB $04,"ROLL"
    , S+ O; x+ ?+ d  p- `4 A3 \# L
  1316. Trackr_28 .DB $06,"APPEAR": |9 x* X/ `; |! P/ f  t
  1317. Trackr_29 .DB $05,"POWER"
    & J: b: L! t+ S0 ~# t
  1318. Trackr_30 .DB $07,"BOKK BK"
    ( ?! i9 d2 B" J7 u
  1319. Trackr_31 .DB $08,"BAKUHA 1". r9 ?- y/ t$ ?6 X; F! K7 l
  1320. Trackr_32 .DB $08,"BAKUHA 2"6 X* C, A' k+ W9 g! G
  1321. Trackr_33 .DB $05,"ARUKU"' J4 T! _& I; x6 c: j
  1322. Trackr_34 .DB $06,"JIWARE". B$ q" \" ]- U3 T: e$ P9 ?0 r) ~, T- r
  1323. Trackr_35 .DB $05,"SILEN": n; H' ^1 P& v$ {! c5 M
  1324. Trackr_36 .DB $05,"P 1UP"
    , o1 v5 u- t5 i' H
  1325. Trackr_37 .DB $05,"P OUT"
    * Q4 @" E% B  b4 r) n
  1326. Trackr_38 .DB $05,"B OUT"
    # n4 b4 s- h2 C* y4 I: K6 D7 ?% l
  1327. Trackr_39 .DB $05,"PAUSE"3 o/ h' [' l, l$ }; b

  1328. / I8 V6 M' \3 J% T7 A; y
  1329. .ENDIF, B$ Q9 b$ r2 m4 l

  1330. 1 c* q5 V! y% g1 I0 x
  1331. ;------------------------------6 E6 H3 K1 R% ]- [# ?8 G0 `
  1332. Static_Text_Title_Data;静态文本数据8 Z; a7 q5 t) }5 J
  1333. .DB 12
    " n1 p/ B2 b& S2 R5 S4 J; e# g
  1334. .DB "SUPER CONTRA") e  t9 O3 h# K" j9 C
  1335. Static_Text_Author_Data
    6 K. R9 {7 z' q; c
  1336. .DB 23! }0 y& a2 D( j- ~: ~* N
  1337. .DB "EXTRACT BY FLAMECYCLONE"( z/ |) g; _% Z% |) k# T/ Q! o$ t
  1338. Static_Text_Date_Data
    ; v" j5 T# j( @- @2 z9 A4 f
  1339. .DB 10; R8 Z% y( N, d. ]! N
  1340. .DB "2023.07.11". u7 N) c6 ^; w
  1341. * T0 e) y0 b4 L2 [/ A* P
  1342. .BANK RESET_BANK & BANK_DATA_MASK, s+ _2 S" \  c5 F9 ]
  1343. .ORG RESET_ADDR
    % ^  i% g+ j  I  g3 g/ e, r
  1344. / f8 j5 V' p* N
  1345. % Q# o* K2 |! A  F# H; Q: |
  1346. ;==================================================2 }! V) L8 W4 W3 U9 A9 [
  1347. ;切到主程序bank7 o9 t) f' R/ z0 @: a
  1348. SwitchMainBank1 k! o6 z$ h8 |" E3 w) O7 _
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    / P: d$ D$ g" f  t3 b2 s" u$ j
  1350. JSR SwitchBank8000
    & {+ y+ k1 u# G. D4 O1 G1 c9 J
  1351. RTS
    & V# Y- X% }3 K, a" {
  1352. 7 ?! }2 t+ m* j2 `& X4 v
  1353. ;==================================================
    1 `# C3 @( |( G. x
  1354. SwitchBank8000;切换bank到8000-9FFF6 C  a- P0 m0 _1 f. B# |) P- x
  1355. PHA
    , d$ }# I3 _3 Z6 D8 J5 I
  1356. LDA #$06. ]- D1 N, }$ o0 w+ f) m
  1357. STA MMC3_BANK_CTRL9 S- ^, p' X0 Z
  1358. PLA
    " h6 \; d  W! A/ A( d2 r
  1359. STA MMC3_BANK_DATA
    " i# B) U# K4 }0 W  ^1 }3 U
  1360. RTS7 I  z, E) Q7 Q9 ~2 N( ?2 S( i

  1361. 6 m- ?' |, H# N4 c
  1362. ;==================================================
    $ T5 v# f( r( u2 q) [
  1363. SwitchBankA000;切换bank到A000-BFFF
    2 e% X5 W4 h% Z+ f' x
  1364. PHA
    0 a5 p7 N0 f/ l0 I* K8 Z
  1365. LDA #$073 x2 q0 {1 `# O& x4 j2 I) ~
  1366. STA MMC3_BANK_CTRL! }+ Y  w' \0 h! H! G* `
  1367. PLA
    % J( T) m' x) V$ o" }  A: d
  1368. STA MMC3_BANK_DATA
    ( [4 a. d! T; F- y/ r
  1369. RTS
    - r$ E+ ?+ C- D; ^( H9 r
  1370. & R0 R: W, n2 K' R% f) m% Y
  1371. ;==================================================
    $ _  K, \8 t4 C' I' c# S- `
  1372. Sund_Bank_Init;音乐bamk初始化1 s$ X! m% J& c" B
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK' B. }( @8 c+ X$ c. w
  1374. STA Music_Bank_8000
    3 ^; o5 m7 @8 T3 `/ t) [# a
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    / p1 a) U" Q" h1 t
  1376. STA Music_Bank_A000& i2 S  [. I6 d5 x
  1377. RTS% x% K- m. Z' n2 y2 `  K  S/ p
  1378. / S. p1 h5 n6 `' \
  1379. ;==================================================
    $ d. D! L) b) W5 R
  1380. Sund_Bank_Set;切换音乐bank
    ' ]& i! g2 ^6 M6 b% E2 @1 W
  1381. LDA Music_Bank_8000
      b  ^4 x) T1 m0 W6 [; J. S
  1382. JSR SwitchBank8000
    3 t1 [8 i/ Z1 x" w6 [- i# M* ^) O
  1383. LDA Music_Bank_A000
    / x* R0 [1 n6 ]! p
  1384. JSR SwitchBankA000
    ' L  a8 |( _# E8 [$ Q8 h
  1385. RTS
    8 u  Z3 j' d. c. X  F
  1386. , k: g6 k; D/ z2 J3 `- Q8 ]
  1387. ;==================================================
    * c) Y' q/ Q6 v% H+ X7 }
  1388. Sound_Init;音乐初始化: F8 b; X. R6 w* E6 N* X8 L0 i+ m
  1389. PHA
    3 D" J+ B+ R/ `" F! s0 u
  1390. JSR Sund_Bank_Set
    ' X- z7 U/ U7 Q6 Y
  1391. PLA! ?( w' Y6 _: Z8 }: {4 b
  1392. JSR Music_Init_Addr! x* t% U2 P. z, \% H4 J% L
  1393. JSR SwitchMainBank/ O! n7 p" @' Z1 F7 T

  1394. 1 p: @' {1 w/ A0 a( S% _
  1395. JSR Music_Bar_ReSet- F1 M) \7 B+ o  F- R/ l
  1396. JSR Time_ReSet2 u; Y5 c! d7 G6 L3 U1 P7 y8 a+ p
  1397. LDA #$00
    ) J) G5 i) X1 Z
  1398. STA Music_State
    ' D; n  _9 T9 n6 o6 v
  1399. JSR Music_Stata_Show
    - d' [( n1 I6 E' V8 x
  1400. .IF Track_Name_Pos
    ! L+ z, R0 m  y* O# F, Z
  1401. JSR Show_Track_Info
    3 N  V1 [1 z3 M# ^7 g% H
  1402. .ENDIF
    0 d& `" m, H& S- b0 @
  1403. # k& I7 R6 ?9 i
  1404. RTS: p* [; G* @3 w& x& j
  1405. 5 M2 A; `9 O0 r+ [1 o7 c0 i
  1406. ;==================================================! w* w. Z, d! a6 z( P
  1407. Sound_Play;音乐播放
    : @: N6 S& l- g! w
  1408. PHA' F' ~) C0 p) r( m' @& y, X
  1409. JSR Sund_Bank_Set
    - ?+ L! w! w5 Q# W' F
  1410. PLA
    4 C. B, e% D% r" d
  1411. LDA Music_State
    8 s/ b  J- F: T; \
  1412. BNE Sound_Play_End
    ; @& J  F& r) {! H, N5 S; D7 Y
  1413. JSR Music_Play_Addr
    ! q# B6 r/ {4 a/ m
  1414. Sound_Play_End( v5 [& m/ x$ O% {! o; |( A  U! P
  1415. JSR SwitchMainBank
    # ?6 ~# R: N5 W$ [; a. d! @' X
  1416. RTS6 W5 ]+ E; O  k1 m1 w+ `+ i! E

  1417. . G% w( D' o, W; k; g& Y
  1418. ;==================================================& ^7 b1 b2 t8 Y7 i, ?' [  ]- R
  1419. .IF Music_Reset_Addr
    3 v9 ?# s% s9 e
  1420. Sound_Reset;音乐重设(如果有的话)7 F. @8 V5 o3 f& L
  1421. JSR Sund_Bank_Set7 J% d- P6 @* Y7 c* J
  1422. JSR Music_Reset_Addr
    2 t  H% C5 _) x. c
  1423. JSR SwitchMainBank, M! K* `% o  y) b3 W7 p/ z
  1424. RTS
      i: y7 ]# W6 c3 R: _
  1425. .ENDIF
    7 m* [+ g; \/ i8 T4 O2 d5 M

  1426.   y' d& @, i) U+ ^# E& P) k" |
  1427. ;==================================================7 v6 z* U2 ?+ @8 |5 L
  1428. MainLoop;死循环
    ' b* G( `7 r* j+ |; ?
  1429. JMP MainLoop
    " g' d! y& u" Q- H

  1430. 9 k' t& _; A0 ]5 ]$ f' @
  1431. ;==================================================) O; x* K. `1 C
  1432. NmiProgram;Nmi中断处理
    5 T6 _6 Z* `1 @! ^; j& c) _0 p
  1433. PHA  ^% b( q  q8 ~$ X* [8 ?
  1434. TXA
    : \6 q: S" I. t0 b
  1435. PHA
    3 C; o. \1 h' ^$ Q5 w
  1436. TYA# q$ p0 w" n% Q
  1437. PHA
    , R! {3 q% X' H$ n" g7 T  s/ [7 c
  1438. ' j3 L5 {% o1 x/ `; C; ~
  1439. LDA PPU_STATUS" ]% A8 i' x5 u! O; Y
  1440. LDA #$00; ?+ i! q; t- L1 t2 t
  1441. STA PPU_CTRL
    " E2 n: c4 x& ?8 q& f  W

  1442. ) {. x, h. p6 V6 j0 L% ^( M
  1443. ;切换主程序bank& U1 b* [0 ]/ W9 v, e" `% O1 g: I
  1444. JSR SwitchMainBank9 U7 T2 Q. {% a: a& k
  1445. 9 X1 ^* u6 M$ U1 f. l3 T
  1446. ;NMI处理
    5 e* y/ z5 B! w" t: r
  1447. JSR NmiProgramProcess$ U# x1 U: _3 _4 `# G6 y" @
  1448. 1 [& C1 ^, }+ L
  1449. Nmi_Proc_End
    . N: Z& j( E4 h3 \0 L
  1450. PLA" v1 P. {6 E, m; {- M2 l
  1451. TAY: V+ P- g$ _7 P- r! g
  1452. PLA+ G4 n" F3 J) D* }) X  \& o& _3 \
  1453. TAX- w6 x! i& \) D6 T# w9 j9 y
  1454. PLA4 U1 c9 B. n* e! d) C0 W( K2 T
  1455. " e0 [4 ?1 ?! J% G
  1456. RTI& u% T* M, i8 ^' o1 m0 A
  1457. 7 C, A, ~& G. D! \$ r% o- L/ [
  1458. ;==================================================
    : ]) E. ~5 C# y% U8 Y
  1459. ResetProgram;重置中断处理
    2 i3 \3 f& U9 L
  1460. SEI
    9 Z- L& x1 d7 {+ k/ I4 \
  1461. CLD3 I" T$ |- v: z0 u7 S8 k* A
  1462. LDA #$00+ _& y; B) @* M3 W2 {" w. X/ e0 B
  1463. STA PPU_CTRL
    & R& y" J" N6 g! M) _+ a- H5 i
  1464. STA PPU_MASK
    % a. f! N; t9 {# U2 N

  1465. * Z  _# o. C) y. E& n
  1466. JSR SwitchMainBank/ U' X. _5 S3 @) i: a: O* [) Z
  1467. JMP ProgramBegin9 F/ k' o; d! r7 U4 c

  1468. $ B4 ?# n5 `) X0 x8 k
  1469. ;==================================================3 n4 X5 V. C  `: A9 G
  1470. IrqProgram;Irq中断处理9 c: S0 `% o: X/ b1 J
  1471. RTI
    3 ~+ v) [& z; R& v2 I

  1472. : L1 H2 ^# _, g) X5 x( m% `
  1473. .IF SOUND_BAR_SHOW_ENABLE- I, _5 V# Y1 b: F' O& `
  1474. .ORG $FF80
    ' u2 C8 L: R  z1 A; C7 E2 C
  1475. STA $4000,X6 f* R5 D. x2 |! e8 r8 q7 J$ a, n! A
  1476. STA Sound_Bar + $00,X2 F) S0 g1 ~. s# |% W' I
  1477. RTS/ @. G+ C/ D2 a/ c2 q. W# r
  1478. * B# U3 |5 x% K- E) B( _1 K! q& E
  1479. .ORG $FF88! x  g% ]& s/ R: Y* V( |* G
  1480. STA $4000,Y
    " a& w7 Q9 a4 Q8 R
  1481. STA Sound_Bar + $00,Y
    # ~8 M) g# C5 h, h, [7 O. A
  1482. RTS
    2 K& g) g7 `' x$ U; @% J; I+ O
  1483. - i4 U' ?+ \9 h! R
  1484. .ORG $FF90- R3 |5 ?3 m9 s# f: y! n
  1485. STA $4004,X- i5 _9 ~0 T7 k0 Q5 |; L
  1486. STA Sound_Bar + $04,X7 ]* @0 z3 l0 d7 M9 o+ [+ s7 W
  1487. RTS2 E5 t% n" j9 W- O
  1488. 7 C+ L4 o( A* s+ p5 q& v; f: U
  1489. .ORG $FF98. X/ [2 V- `/ ]
  1490. STA $4004,Y
    ) p, L- Z: G% v$ A. k. ^
  1491. STA Sound_Bar + $04,Y/ ?6 ~6 j& A% W5 h# a
  1492. RTS
    , c3 g3 H6 ~: D

  1493. & o. u! r3 C6 c* ?9 E  |
  1494. .ORG $FFA05 R0 w! m" c. U1 M
  1495. STA $4008,X6 Y. e4 j: E- x2 [$ k" [6 v2 f
  1496. STA Sound_Bar + $08,X4 ]. q( Y* a- V) ^) B* @& C
  1497. RTS
    9 M! s% D& t$ Z6 |

  1498. + T# W/ v. g' n3 \  u/ C! u
  1499. .ORG $FFA8
    ; \% Q2 F7 t/ i6 h
  1500. STA $4008,Y- q" `; }( z; l" H* g; O
  1501. STA Sound_Bar + $08,Y4 }! g: m, h& A  R. `. s
  1502. RTS* u# J& V- Y7 |# H" ?

  1503. 2 [$ Y- w- q0 W( B; c" I
  1504. .ORG $FFB0
    % O0 C1 \' x1 q+ L! b# [, I
  1505. STA $400C,X
    - d6 i5 ]7 W" |! O6 r
  1506. STA Sound_Bar + $0C,X* J' P" z9 K5 l, f5 S2 N) N
  1507. RTS! _4 c+ Z# v& e. N9 d
  1508. 8 Y1 s2 E- f3 V( o8 d. ~. k
  1509. .ORG $FFB8. A& B4 q: J1 Q
  1510. STA $400C,Y
    4 x8 ^% B  {) b, o+ H' t
  1511. STA Sound_Bar + $0C,Y5 J1 _* d) w9 S/ L" P0 H: X6 J
  1512. RTS6 y( [7 q' I6 P3 u2 k

  1513. ! Z0 m- |4 h# C! b% G- J$ X7 l
  1514. .ORG $FFC0: X9 @$ F1 ?% E# M# G
  1515. STA $4000- N- K5 G. O* ?
  1516. STA Sound_Bar + $00( X( e6 h, S) y9 C$ H
  1517. RTS
    ( j* q) {' f, w7 y

  1518. 4 o3 \% M* F2 C. o
  1519. .ORG $FFC8
    ; p! j/ R. M& M2 p# h
  1520. STA $4004' Y* s- ]9 z* l; ?
  1521. STA Sound_Bar + $04
    ; {( E% Y4 @- }0 O
  1522. RTS, j- t( \, H' d( s

  1523. % w1 V/ P, n8 P' n' }
  1524. .ORG $FFD03 q; c  M6 S5 _6 z) a
  1525. STA $4008! L+ s7 B) }0 Q" @$ W
  1526. STA Sound_Bar + $08
    ! u' D) f' R  ?& V6 @0 J8 d2 O
  1527. RTS0 }2 k" g$ t, S. J; w; D7 ^

  1528. 6 \- X+ B  I' a0 S
  1529. .ORG $FFD8; u4 P# K8 T+ @
  1530. STA $400C
    * M' s9 S% d; b4 N/ e, g* E4 L$ O# w
  1531. STA Sound_Bar + $0C
    3 @* j. b( m- M/ U
  1532. RTS
    8 o0 p6 c8 w' |# b! W4 u/ |

  1533. 1 N% l  K  ?# Z# o; Z
  1534. .ENDIF& N5 B) P+ B6 Z! Q4 {
  1535. 5 s8 d8 \+ R7 B
  1536. .ORG $FFFA( `! U. H+ }- ?# e$ B
  1537. .WORD NmiProgram
    7 u# K2 k/ a9 P0 ^
  1538. .WORD ResetProgram
    5 S* c3 `  Y5 \; s7 g/ E
  1539. .WORD IrqProgram
复制代码
5 Q7 c  B4 ^9 i5 ]
! i! D5 @' A$ n2 I" |7 C1 U
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 919 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2855 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 04:39 , Processed in 1.078125 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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