EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 ' V; n# |$ }9 e9 p+ ^$ h0 _, P
3 C- O7 X2 |! A3 N+ y7 O- {
1.魂斗罗
" b5 s4 c+ \9 @9 h/ a( a, m) R2.超级魂斗罗* Y" ]9 R( p; v5 r9 J3 r
3.赤影战士  _$ g9 M7 m& K0 O" E, F9 D4 W, a
4.忍者龙剑传2. e3 z# {: Q6 x" a

# R; s$ z, s% x2 L7 L8 j4 x7 s+ M8 l5 \7 i

- e7 ]1 N: {. K. K+ `/ B& }
* e: u; v! _8 ~2 k1 M源码:
5 Q0 n2 I# W/ o, P2 P
  1. ;[FC音乐][播放器模板]( M1 `' [# \: j6 n
  2. ;FlameCyclone 20230710: c, L2 n( Z4 r, A( i6 U) v

  3. ' Q+ n4 u+ b. z4 j& C# Q
  4. ;文件头! x/ I& `+ f& n9 d
  5. ;======================================================================
    5 v5 \5 T7 `: A8 e3 b' O8 {  T
  6. .INESPRG 4                                              ;16KB PRG 数量" S5 O0 t, i7 e1 ^0 R
  7. .INESCHR 0                                               ;8KB CHR 数量
    $ \: c; c  [% E
  8. .INESMAP 4                                                   ;mapper 4
    7 x2 d( l$ E6 l9 X6 c$ [
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    6 M3 {# `- t, y4 B& I3 r3 z+ A
  10. - S2 t: {* h" V3 r+ \; {
  11. ;==================================================) S) ~- a, h* [- M4 j& T) T! g
  12. SOUND_BAR_SHOW_ENABLE       = 1, T& @7 C2 A2 Z- s  r: V
  13. ;==================================================- t' V& T8 T9 D$ [8 D+ {5 ^+ e
  14. BANK_DATA_MASK              = $07& U) T5 ?# x& g. L' ]
  15. ;==================================================
    / Q% @1 I% N" t, b. X; {
  16. SOUND_DATA_BANK_0           = $00
    0 w+ {! d8 p2 `9 a! d
  17. SOUND_DATA_BANK_1           = $01
    ' U) G7 R" r) C" F
  18. SOUND_DATA_BANK_2           = $02
      q2 p8 o0 O2 f2 O
  19. SOUND_DATA_BANK_C000        = $064 x8 ]1 W% }& ?) H& j- r

  20. 3 X6 R; o& k3 m9 k3 k
  21. ;-------------------------------------------------
    ! o( _2 l: m1 n# _, @8 d, \) R9 L
  22. CHR_DATA_BANK               = $04
    7 @, _- R; d* A! z# |* I
  23. CHR_DATA_ADDR               = $A000
    2 S6 Z* k0 m- ]  j
  24. ;-------------------------------------------------8 t% h. S9 g0 w. A/ T5 N7 j0 L
  25. PROGRAM_BANK                = $05
    ' ?8 V& j8 N; z; U& U
  26. PROGRAM_ADDR                = $8000
    ' j% _7 K" E6 i0 I
  27. ;-------------------------------------------------5 Z: e" e* T7 `7 C/ |
  28. RESET_BANK                  = $074 r3 @4 P" s2 `3 R
  29. RESET_ADDR                  = $FE006 i8 L/ {2 u- R
  30. ;==================================================; D7 F- z, d, d5 |! Z
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址5 Y% ~7 R! n, X; m2 |0 P
  32. Music_Play_Addr             = $813C ;音乐播放地址- L5 b/ \7 i9 |
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址: n& s  Q5 p  @8 b& X: P
  34. ;==================================================$ B$ u9 v5 h2 _+ Y
  35. Music_Song_Total            = 039  ;全部曲目总数8 U/ V: ?  `, M  I! Z; D# t2 r
  36. Music_Start_Song            = 007  ;初始播放曲目
    0 @; h2 A2 b6 z7 ?+ _# ^; {3 ~
  37. ;==================================================
    3 a! I8 ~3 z: P( L! b

  38. / k# e( l3 `' v0 d8 _, U+ J
  39. ;==================================================0 P* L  ~# m: a5 Y; _* L& n
  40. Title_Text_Pos      = $210D ;标题文本位置
    $ U5 F% y) {- z/ @, D1 D( P6 h& s: ^
  41. Author_Info_Pos     = $2284 ;作者文本位置  f$ ]2 c- e( t6 }- z7 G0 j
  42. Date_Info_Pos       = $22CB ;日期文本位置
    " R; i& Q+ a6 M
  43. ;------------------------------
    $ p* |1 T: R" U: p
  44. ;------------------------------
    3 Y* Q( S  S& I& S* |( a+ \
  45. .IF SOUND_BAR_SHOW_ENABLE
    2 w$ N( Y$ a8 k* F8 n, ?0 m" B
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    7 K9 ?( H' _5 |  P& T- b  A! s! x( q
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    * o/ T- t. J8 {
  48. Play_State_Pos      = $2233 ;播放状态位置
    # F" X3 z2 ]* P* I% y( F6 S. `
  49. .ELSE5 b4 e) T! u, _5 {  Y& |, }, \
  50. 3 F$ {: g. h# P! E
  51. .IF Music_Song_Total > 99% }8 ?$ H4 Q2 Q) b  c  J; I/ |
  52. Play_Index_Pos      = $21AC ;当前曲目位置7 t$ @5 f$ L: y, g
  53. .ELSE6 V8 U6 E2 |% V% g
  54. 5 R2 I  o# D: X9 c
  55. .IF Music_Song_Total > 9% y- _6 F$ ]8 p8 v
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    . w; y  j: [- F) {* ]$ h5 E
  57. .ELSE
    . J1 ?( n2 R5 |, E) L, D- \
  58. Play_Index_Pos      = $21AE ;当前曲目位置, m  U& Q6 V& X. o5 I% M4 h8 m8 _
  59. .ENDIF2 F1 Z8 S9 K5 j& C

  60. & f5 v- k& i2 O# C( C
  61. .ENDIF
    " W4 J/ J; X7 S8 A

  62. / R/ p9 O, c& E* e- E
  63. + {# N; Y! |, L; F, y. m# x  I
  64. Play_Time_Pos       = $21EC ;播放时间位置0 Y- ^: F' Q- V2 E/ ~+ [) A
  65. Play_State_Pos      = $222C ;播放状态位置& V& J& |, p+ j! M4 e. t/ n1 ~
  66. .ENDIF
    ; w1 X8 t8 X3 z! B7 b
  67. ;------------------------------
    # o% F9 M( U) P. k  d' p
  68. Track_Name_Pos      = $216B ;曲目文本位置
    / K7 ?; Q' o7 c, ]" h  ?
  69. Sound_Track_Pos     = $21A5 ;声道文本位置3 U9 q" M# Z# p  a1 \: L0 O
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    7 p( Q- j# @) ^
  71. ;==================================================
    6 k0 ^" v: p9 b7 q
  72. Scroll_X = $009 M5 P. Q  J, G  }
  73. Scroll_Y = $06
    ( M$ u) k  h8 E$ \8 }7 \
  74. ;==================================================7 r: M; Y8 x! P0 @$ ^0 s
  75. RAM_Cln_1       = $0100
    6 C2 H  g" y- ^1 L4 _- R3 r" O
  76. RAM_Cln_1_Size  = $80. r2 b) Y/ ]5 K4 I! l% x0 @% T: L
  77. RAM_Cln_2       = $00E03 |2 _! p- A4 ?  v& R' \
  78. RAM_Cln_2_Size  = $20" c+ X& R$ K9 }' `; @3 A8 l# s; a" q
  79. RAM_Cln_3       = $00E0
    / Z1 \" g8 n, m+ d0 J3 [7 f
  80. RAM_Cln_3_Size  = $207 y* t0 b; t& @* R7 v) H

  81. ' X: G  \( r: I( D6 V# y' f
  82. ;==================================================9 J; P* z  T8 S% C; c9 t
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器/ C9 P0 D* V  X6 q/ p0 `
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    - R4 v* N+ C, U; H
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位; r$ _9 c" _4 R. ~5 V6 l+ i
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    8 r; A  J( ?- ?
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    ' ^7 r( T! @6 T' ^8 R+ O5 v6 H8 ^/ b/ L
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 , S, K1 r# s* @$ a0 J! L5 k
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加, D% N5 E9 y, y* ^6 e
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 ; d0 D5 k/ i3 `: H" u" d
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存8 u: x( d. D2 w3 l
  92. APU_STATUS              =   $4015   ;声音通道切换
    9 p% p) p) [' k* G4 p5 }4 N8 m
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    * ~6 F" f9 Z& J7 ^5 b
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    ! Y# U7 g- L4 o6 ~/ k/ U7 O
  95. ;==================================================
    ! G& ~3 o+ e% f8 G/ V# ^: `
  96. MMC3_BANK_CTRL          =   $80008 |, A% j; A/ Y2 z5 S: v/ H
  97. MMC3_BANK_DATA          =   $8001
    * ?4 Q6 N9 k  H2 x1 k
  98. MMC3_MIRRORING          =   $A000
    9 \! F5 N3 F. N# H
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    6 z/ k: c. M4 H. W: X
  100. MMC3_IRQ_LATCH          =   $C000
    8 F& r0 g. h& m: o. J0 b8 P; i
  101. MMC3_IRQ_RELOAD         =   $C001$ ?' R6 [+ U  I% N
  102. MMC3_IRQ_DISABLE        =   $E000
    5 E' B5 I4 N: x) z2 M4 S0 h
  103. MMC3_IRQ_ENABLE         =   $E001
    3 I+ v+ J$ w, x- H8 n
  104. , n* M  W& }" H( [2 L4 y
  105. ;音乐数据块7 F; [8 H/ I" G% x2 i

  106. " s1 x8 X: p: x2 D4 v$ E$ U. X
  107. ;======================================================================
    0 f+ _# c0 V$ |0 O
  108. .IF SOUND_BAR_SHOW_ENABLE- c& e/ L. v" F
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ' }/ k2 C) [  u* e9 v
  110. .INCBIN "sound_bank_bar/music_data_0.bank"1 C3 b- m+ k7 C( f& N

  111. 7 T) R$ ]9 K% P# ?0 R- w
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    3 |  T$ G5 t) v& F1 W, a) x  y
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    3 K5 z( I/ u1 H, t) B
  114. 2 G, X2 E2 d; w2 `3 N; M( E
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    0 z$ }/ D/ W1 I: Z/ v
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    # p: P3 @' m, m$ ?* |
  117. + [: U2 a# d+ Z( O' q) f
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    : D+ r. W5 z" G1 S
  119. .INCBIN "sound_bank_bar/music_data_3.bank"; L* W0 P. @% s2 z5 R9 B  {

  120.   `2 Z- B5 X  L  @2 p
  121. .ELSE! h7 \' }$ L4 @+ q8 N+ U' l
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    4 a7 t( Q9 N: e- |
  123. .INCBIN "sound_bank/music_data_0.bank"% E3 K$ Q) X8 h6 L3 k2 Z; f/ t
  124. , ?+ g5 h8 r! S+ u
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK* e) j; n+ a, n- F5 Y9 O
  126. .INCBIN "sound_bank/music_data_1.bank"
    ; W" Q+ ]( u% \* I5 I: |2 X" O

  127. $ \& Q/ P4 l; p
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK( u( t* e% q4 q. I/ G# f7 F5 p
  129. .INCBIN "sound_bank/music_data_2.bank"# H, Q+ F, ]4 A! [6 v; B
  130.   W; r3 P, _: g
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % ?* W1 L0 g/ O- K. a0 S
  132. .INCBIN "sound_bank/music_data_3.bank"+ n4 i  l% b# K" N+ I
  133. .ENDIF2 S) r4 ^# t! i: i9 v2 u& w4 U
  134. ) g* r! M6 H/ Y2 J8 [! `
  135. ;CHR图形数据
    : @. t7 Y) D" E0 w- M+ B6 K% c
  136. ;======================================================================
    6 t9 }  ?) k4 m
  137. .BANK CHR_DATA_BANK
      b, e# `; ^* A/ P6 P
  138. .INCBIN "chr_bank/chr_data.chr"
    9 A( C0 m9 O2 c0 w3 F/ |! O8 f

  139. ) M! [. p8 L- @, y: D- M" ^" {
  140. ;==================================================
    4 q* X/ A* P* V5 n
  141. PPU_Addr        = $0300! a& W6 m) c; `  R% D0 w
  142. Palette_Addr    = $03C0# E& o$ D6 @+ a
  143. Sound_Bar       = PPU_Addr+$E0
    / Q" H9 Q8 V- p: d( g
  144. ;==================================================' `) K  ~. j; X, b
  145. Palette_Update_Addr     = Palette_Addr+$0D4 h" `' f1 C. h3 R! p
  146. Palette_Update_Max      = $2C/ z% V4 g4 p5 N: m# n/ I
  147. Palette_Update_Min      = $21( Z& b! F3 L7 c
  148. Palette_Update_Interval = 600 n' `5 X) P. I( @& K' D. |# v$ i  {
  149. ;==================================================
    $ o7 p4 u) M; A  m
  150. Sound_Bar_Cnt       = PPU_Addr+$F0" D2 Y1 `9 N' t* \
  151. Screen_State        = Sound_Bar_Cnt+$01
    $ r2 _; x4 n* Q! ]
  152. PPU_Cur             = Sound_Bar_Cnt+$024 ]# n  W  J/ k+ y$ P" _: u
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03% p8 w9 R$ y. }, \8 D
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ( {1 m* Z7 N( Z& B5 m+ Z$ u
  155. ;==================================================" `. q+ p1 l& c& u" C
  156. Data_L              = $70
    " V1 h) \7 G$ T6 _' ]
  157. Data_H              = Data_L + $01
    , i+ A/ ^9 O/ F8 _
  158. Data_Cnt            = Data_L + $02
    - O' H5 K* m6 |; y$ i" f1 F
  159. Data_Buf            = Data_L + $03
      f. z! [# G$ U1 e' B6 P
  160. Time_Wait_Cnt       = Data_L + $04
    0 b2 E. c0 A  Y" R5 }
  161. Palette_Wait_Cnt    = Data_L + $05
    ; T  Q6 m9 a! P0 T1 X! v. `
  162. Palette_Update_Flag = Data_L + $067 o" L+ J. G  [) Z
  163. Show_Track_Name     = Data_L + $07: Q* X7 ^" u4 d: G
  164. ;==================================================  E: l& J3 [- z( F- b  I6 K/ a' Q
  165. Key_Keep            = Show_Track_Name + 1
    7 @1 {- O+ D; Z. m/ i
  166. Key_Once            = Key_Keep+$01' v* |1 `' ~6 o9 U! J! n
  167. Key_Kemp            = Key_Keep+$02
    3 J9 Y# q2 h7 |# T  r3 v0 ?' j
  168. Key_Temp            = Key_Keep+$03* G. ]% {  `+ R, F- b0 b: ~! u
  169. Key_Getv            = Key_Keep+$04" Q: J& ~2 F% A( Q+ _! ?/ S
  170. ;==================================================2 B& o2 O) N0 l) Y5 f0 U# f, T1 [' ~2 Y
  171. Music_Cur           = Key_Getv+$012 g4 q: V- L6 @% A1 @3 b: X
  172. Music_Last          = Music_Cur+$01
    " ?# H6 x8 o3 C) i  n
  173. Music_State         = Music_Cur+$02
    ' K% ~* M/ B9 X/ B* I& `
  174. ;==================================================
    3 h9 F: r7 U  p  h+ ?& ^
  175. HEX_Data            = Music_State+$01
    4 g* ]# o$ |& y. v9 `$ v6 C
  176. DEC_H               = HEX_Data+$014 c% T1 J* s4 m/ i, a9 a; }' N
  177. DEC_T               = HEX_Data+$02
    3 R( w8 e. N4 \; j% s% Q
  178. DEC_L               = HEX_Data+$03
    4 D9 _  {  o& G- K
  179. ;==================================================9 b5 X. d- U2 D7 n% d  \: r
  180. Time_S              = DEC_L+$01
    7 g& I8 Q9 ]& z) o
  181. Time_M              = Time_S+$01
    + i" B! Q" g7 r4 b, v: B. R
  182. Time_H              = Time_S+$02: P: T# h7 r6 p' f! ?# [
  183. Time_Cnt            = Time_S+$034 }  J0 P1 D' i* Y* u

  184. # d- k. {  y: C+ l
  185. ;==================================================
    - L2 J! v2 r2 \) A
  186. Music_Bank_8000 = Time_Cnt + 13 n. x" P7 Z6 E5 j: C4 S
  187. Music_Bank_A000 = Music_Bank_8000 + 1# i/ D+ X) ~3 S& d
  188. ;==================================================
    1 ?$ g2 P; k" x+ C
  189. : }4 }* U: {/ Z: o1 B
  190. ;======================================================================! r! H% T3 a8 Z
  191. .BANK PROGRAM_BANK; t/ u9 m. d" ~/ H$ f7 o
  192. .ORG PROGRAM_ADDR
    7 ^8 t2 A0 I6 i' Q5 V

  193. 4 ?3 e& b0 v4 K
  194. ;==================================================$ K3 \& ?9 a/ ]! r/ v
  195. NmiProgramProcess;NMI中断程序处理3 A! u- g& s1 J) ]5 S
  196. ;处理PPU图像& A* @8 s( R9 u3 v
  197. JSR PPU_Proc
    % o. d1 ]& U- G: C

  198. $ d! @  f% N9 E' e  l4 G3 q
  199. ;启用NMI中断
    " w& G$ ^3 e2 j: J8 S5 S& D1 v
  200. LDA #$80" w+ x! Q' R' H. t7 a# v
  201. STA PPU_CTRL
    ( j! C3 B3 w; O- a

  202. ( T, H$ t) i/ M0 P, J
  203. ;更新调色板
    / _5 o8 W6 f3 h3 ]" m7 s2 b9 s* D
  204. JSR Update_Palette_Data" W  t! u5 u' x/ E: W

  205. + [% @) n% N2 T0 j$ Z
  206. ;显示时间(缓冲)4 L3 g1 E/ ]# P% X3 ]  c
  207. JSR Time_Show+ ^4 F5 R7 W. V0 X
  208.   Q6 {$ D3 b, m) d
  209. ;播放计时; q6 q3 i' ]' z; j0 J. N
  210. JSR Time_Count$ _1 d9 V2 [' }) r( m
  211. # n+ ^  |$ @6 [( i4 Z6 R
  212. ;播放声音$ A" g- Z2 L6 A2 j1 x
  213. JSR Sound_Play
    , M/ c+ [1 W8 T  r! y
  214. % @: \& N) a& \% t0 p, Z  n+ t
  215. ;切换音乐(手柄触发)
    9 }  h0 U' I9 \+ \% z
  216. JSR Music_Switch" u4 s: j/ l# _

  217. 4 A' C" y( H) v. ]( a2 h/ D
  218. ;音乐显示(缓冲)5 e* c0 q1 R; h) ?7 i2 H+ z8 L- R
  219. .IF SOUND_BAR_SHOW_ENABLE
    9 b6 g4 v3 |  B" x# x
  220. JSR Music_Vision5 B2 R8 @( \; c! H2 h( ^$ u) ^- F
  221. .ENDIF
    $ J0 F" }: B- l
  222. 3 J& Q5 u6 C; i$ ]; b' u
  223. LDA Time_Wait_Cnt
    8 J# ~: L0 T. r: N3 Z$ y6 ~
  224. BEQ NmiProgramProcessEnd
    4 F' c% k0 o8 g. D5 }
  225. DEC Time_Wait_Cnt
    $ q8 a5 j8 @. |3 t( o
  226. NmiProgramProcessEnd1 v9 K+ ?  ?. A9 y
  227. RTS+ H! Z* h/ c; M& J8 A! p
  228. , g% j9 G% h: P. ]: Z6 H+ Q
  229. ;==================================================
    6 J% m& ]  j( q  R; T) V2 O9 y% I; k
  230. ProgramBegin;主程序. H) i0 y/ Y8 T, U+ m7 B- C
  231. LDA #$00
    % x, w: c( J& q- x% z
  232. STA PPU_CTRL" t/ d& Y9 a+ r( o0 o
  233. STA PPU_STATUS& A+ ^) v' g5 N: T. u! z
  234. STA PPU_MASK
    - z! L) r5 O  R6 L
  235. STA APU_STATUS. Y9 n7 ]7 D, Z6 R" A  ~
  236. STA PPU_SCROLL2 _" W- r5 n5 x1 T' l& w8 J6 S
  237. STA PPU_SCROLL8 Q2 K+ ]8 c. ?
  238. LDA #$C0
    ' b( b( B: h5 F
  239. STA JOY2_FRAME5 c8 C1 A: Y2 B

  240.   V, J2 C- M' f8 ]
  241. LDX #$FF
    3 U- Q$ s* ^0 s& q- P
  242. TXS
    ! n, x* D6 j( [5 }6 Z, p
  243. LDA #$00
    # v1 a: c, ]% F( y0 n
  244. STA PPU_CTRL
    , Q- T+ g( v3 i8 i* v3 [" P) e1 A
  245. STA PPU_MASK
    / p; W0 i# W0 u+ X
  246. STA MMC3_IRQ_DISABLE$ B6 m; ^$ X- Z6 U1 |
  247. 9 l8 c: y: M9 A' J! F3 U' _& a: U2 [
  248. ;==============================* e  _& n* A; {! t/ A% _
  249. ;调色板清空- H) @1 H- a) v2 t7 W8 e
  250. LDA #$3F; r' n  X7 j: A7 y. G, ?, O
  251. STA PPU_ADDRESS; ?! U$ {* {; @2 z
  252. LDA #$00
    * U' O5 B7 \' {
  253. STA PPU_ADDRESS' L/ T( D$ V& q6 L# m- M! N
  254. LDA #$0F0 H: L  s4 `- S1 ~5 h# }3 `- M
  255. Palette_Clear9 m3 l: D: k. O5 A; l8 o& D( f
  256. STA PPU_DATA5 o3 G+ `0 h: z/ u
  257. INX
    : j0 Z- \2 N' h, @6 ?
  258. CPX #$20
    * I7 V5 j4 W# ?+ g
  259. BCC Palette_Clear3 [8 w( ~+ g4 _$ W
  260. LDA #$00
    ( W" A9 Y0 O- {' L2 @" x1 J6 b
  261. STA APU_STATUS8 M( V4 c8 r, E) E
  262. ;==============================
    , g0 D+ p! M( H# z. u: Z, V# Y0 _
  263. ;初始化背景调色板6 Q8 R) k8 ]9 W$ [6 k/ o% P7 ^
  264. JSR Set_Palette_Color
    6 }6 z/ x, \/ u, v$ E% @( ]3 ~* j
  265. JSR Set_NameTable_Attributes1 G5 p8 z- l+ m* a% Y8 D4 ?

  266. 7 I% a2 ]! x+ s# ]6 Y7 r1 ]
  267. ;==============================
    4 A& Q1 h& J$ [
  268. ;RAM初始化
    1 o( \. e7 i1 n2 c9 o
  269. RAM_Clear_All9 X' h) w# L  A1 N
  270. LDX #$00$ L6 |  D7 F3 f8 g( R
  271. LDA #$00
    . S& n/ V. B% o5 ]3 H0 X- U
  272. RAM_Clear_All_Start
    ( _" x* \# g' n7 C+ W
  273. STA $00,X
    & h6 t8 B& M9 T% K- h
  274. STA $0100,X" u- `, v$ Z+ t7 }) W! k; e& S
  275. STA $0200,X
    7 B: o+ n7 |7 ?" J( {
  276. STA $0300,X% z0 f+ ~1 Z  e6 c( A( H
  277. STA $0400,X
    ) \- X6 j7 a/ b: z! P
  278. STA $0500,X" S0 h" Z0 J% V
  279. STA $0600,X
    ) V  m+ s) p  s
  280. STA $0700,X# D5 G* f! V6 R" N$ t6 F$ O
  281. INX/ J- g" c0 O1 V- D$ E& x3 X( O
  282. BNE RAM_Clear_All_Start
    0 o1 \4 o$ A9 m" z9 ?2 W

  283. , _- R) t0 }& J6 @$ F
  284. JSR VramInit
    9 m8 @4 M  M! m5 R" {0 C# O9 u
  285. JSR Init_Palette_Addr1 H; P5 _. v6 {9 z8 f) u% L

  286. " T9 ?! G( Y3 G5 I# c. W
  287. .IF Music_Reset_Addr
    : k  B& k. S& W* ^- T
  288. JSR Sound_Reset+ j6 }2 s  W8 G! a0 N: {
  289. .Endif6 _5 q5 y$ n. h% l
  290. % y. V; R* _+ k1 A# i& B5 ]
  291. LDA #Music_Start_Song-$01, o3 c* u5 A9 R0 p8 D; A
  292. STA Music_Cur& F6 Q1 E1 o" Y! \9 p% M0 V
  293. # l8 B$ J# [7 u3 {/ K
  294. JSR Show_Music_Text5 W3 |$ R! P) P  [2 ?
  295. 5 k, F) w8 x' m4 q, p7 p4 }+ R
  296. .IF SOUND_BAR_SHOW_ENABLE  N, p" l& T, v
  297. JSR Sound_Bar_Text_Set* T' c$ J! c9 N
  298. .ENDIF  M- Z# o0 \1 x6 T1 ~1 Z
  299. 0 E7 P9 H' X- O$ H0 {$ e- M% ~0 z
  300. .IF Track_Name_Pos2 B: K+ a, |+ ?, m# U
  301. JSR Show_Track_Info
    5 Z% i* \- I$ F& _; H1 K
  302. .ENDIF
    * z2 ?9 `4 q0 P6 O# Z+ w

  303. 5 r7 @( k/ D; k* K
  304. JSR PPU_Proc  {1 I! m% X6 m

  305. ! b7 o$ n. k' N5 M0 z% {: |
  306. LDA #$0E
    * d0 i$ {% K1 Z( u& O( i( M0 H, K1 S
  307. STA Screen_State# V8 B+ Y2 i9 z% F

  308. 3 L4 V) D! H& ?
  309. JSR Sund_Bank_Init
    . {! W$ s0 m+ D! |1 R1 C2 |, m( X

  310. . h- ^8 `& x" P5 q0 t
  311. JSR Music_Show
      o8 b. H5 a  m+ J9 X
  312. JSR Time_Show
    ! X2 L, h% l% _8 r: X0 O
  313. JSR Music_Stata_Show2 E1 U( \+ X0 x  L# O$ E3 O3 Y
  314. JSR Time_Delay5 |- L$ \* r, W% D

  315. - O- P/ Y; C! o9 s$ w, r

  316. ; [7 e! i) C5 K4 S" I0 n- {
  317. LDA #$804 q: S/ v+ y  k! q
  318. STA PPU_CTRL
    ) m$ Y) d  i9 ^3 k! c
  319. 4 A" s3 T. b" A. x/ K
  320. LDA #$20/ Y8 W  D" }2 b+ |& y% z; S2 R
  321. STA Time_Wait_Cnt' v% x  V) w4 I4 `8 ?. c
  322. ; O* t, r! p$ [5 w0 f7 a  Y0 G! O1 k
  323. Wait_Time_Over* z& q; }1 c$ D% |  A1 N
  324. LDA Time_Wait_Cnt
    8 l# O" K2 E) [% L# `% a
  325. BNE Wait_Time_Over
    / Y$ o  r7 t. U5 }' C8 l9 U
  326. % s+ A* D7 Y6 l
  327. LDA #$1F9 Y+ Z* X* ~0 W5 p. H) Z9 i2 F
  328. STA APU_STATUS4 m; ]5 |, z# [- g" b# ~4 V9 e
  329. LDA Music_Cur
    + g3 ~  g2 X' ^- P% W7 {+ t5 Z8 q
  330. JSR Sound_Init) j8 m  Z% F  P6 ?
  331. 3 w4 U) }, Y4 e% L
  332. JMP MainLoop
    2 [) C* M/ R' ~1 M  l+ e3 D' V  Y

  333. " U: v  {6 Y  `6 j
  334. ;==============================, P. w- A7 E, p! Y
  335. Time_Delay;延时等待  F6 o/ R- p1 _
  336. LDA PPU_STATUS6 D8 \/ L/ _) ]" G) |8 v# p" j5 s
  337. BPL Time_Delay0 B8 g& m0 |+ J5 R
  338. RTS
    / e- n; k" r# `. @0 o4 d
  339. ' z8 X0 ~/ W+ f% m/ o; W2 t# K9 M
  340. ;==============================2 @; R0 x- M! y# J/ }/ N& s
  341. VramInit;初始化图形内存0 j' o8 n( B  }8 @: d
  342. LDA #CHR_DATA_BANK* J7 d/ B( C8 |
  343. JSR SwitchBankA0005 O3 \$ r7 ~+ y  W
  344. LDA #LOW(CHR_DATA_ADDR)
    6 p5 Y# N/ j- ~1 [
  345. STA <Data_L
    4 B8 M! {5 J# O- ^) b, F+ P
  346. LDA #HIGH(CHR_DATA_ADDR)
    - S, h% a" |7 J2 G' p
  347. STA <Data_H
    " L4 L# T/ r) z
  348. LDY #$007 {8 E9 A: {3 U7 }4 g+ y$ y
  349. LDX #$205 P. n0 S, N. l& i- K
  350. LDA #$00
    & H& r4 U+ Y# X4 {6 P; `! I0 e
  351. STA PPU_ADDRESS/ r9 s% b1 }3 ?! `: |; G8 O( A" |
  352. STA PPU_ADDRESS
    1 M$ n8 z4 E$ g! X- k( M
  353. VramInitWrite' w! A7 G! S: u3 e' E
  354. LDA [Data_L],Y
    ; Z) Q4 u9 ~, F2 o0 r8 d- P( W
  355. STA PPU_DATA% ?$ H% N' Z8 i
  356. INY9 D& ^6 M2 y& u/ w* t: x" ]
  357. BNE VramInitWrite9 |1 f2 D1 n8 U& d
  358. INC Data_H
    9 ^4 ]8 i; a% g* `  }& \
  359. DEX9 t/ I1 q0 q# I
  360. BNE VramInitWrite1 n9 q/ @% ]6 P  |- R) e: X/ B- W! u9 O
  361. RTS
    ! B0 B; p9 c; v' M: |3 ~/ A/ e6 }
  362. 7 S8 }; \8 V0 O
  363. ;==============================
    5 q1 T# Q5 ]! P9 X4 h
  364. RAM_Clear;RAM清除
    5 h3 n4 `; z5 P# l- T$ _
  365. LDX #$00
    ) _9 h' z! J4 s0 p# T& L
  366. LDA #$00
    6 D$ J( h5 X) o# g* r' ^
  367. RAM_Clear_1' ~+ ^+ f: z% v9 k: T0 H
  368. STA RAM_Cln_1,X
    ) z; d$ Y! n2 C, X- k
  369. INX
    , }4 e2 O& z5 ]
  370. CPX #RAM_Cln_1_Size9 m" n5 d% C9 A4 g
  371. BNE RAM_Clear_1
    - D' ^5 q* C4 s, W9 }
  372. LDX #$00
    8 Z) j0 [8 K6 G( A2 u7 Q
  373. RAM_Clear_2
    # t3 s) L8 ^' D3 D5 j
  374. STA RAM_Cln_2,X1 @6 N. J6 P, B6 {7 C' S: P7 ~
  375. INX$ E* M! n' J( _
  376. CPX #RAM_Cln_2_Size5 G3 A& Q/ {. x5 I! u. ?% g
  377. BNE RAM_Clear_2
    0 I+ y' m+ L4 i# r: V3 Q
  378. LDX #$00, U  u. O' _2 q& P
  379. RAM_Clear_3! i: R5 _; K) ^8 H- B. q$ K) l
  380. STA RAM_Cln_3,X2 C3 O" P+ a. b( t3 U
  381. INX
    0 A& x2 S, U& G( j# W' h* A9 x; t
  382. CPX #RAM_Cln_3_Size  v; Z& F# n7 M
  383. BNE RAM_Clear_3
    4 c9 [0 L8 l9 q" |, K$ ?: B
  384. RTS% s! k  j+ a5 e( m$ s
  385. ; K5 ^3 A8 D8 x
  386. ;==============================2 v& @/ k) o+ Y2 u0 K" ~& b
  387. ;音乐切换
    , k2 p1 ^0 j. O* p$ R; _
  388. Music_Switch2 F( k! A. Y/ a
  389. JSR Key_Proc6 y# W( P0 g* X5 j8 m- o
  390. LDA Key_Once
    % d+ I$ b4 l; Q5 e! |: W% \4 j9 n; `
  391. CMP #$10" z; t6 z, R% N) ?0 ~, F- D
  392. BNE Music_Start_SongStop
    $ z1 i$ V. A# y
  393. JSR Music_ReSet7 B# i! t2 N9 p( J; s

  394. 8 ^$ ~+ z6 q( @7 U
  395. ;音乐停止! L; P7 C/ ^! G
  396. Music_Start_SongStop2 s% F0 d( w# N' H. Q* Z5 D: p, G
  397. LDA Key_Once
    + B. @! ~& d( [! N6 T; G! H
  398. CMP #$20
    5 O5 T/ c5 v' n5 C" ^/ v+ I% p* }
  399. BNE Music_arrow
    ! w7 L, f$ g( I: o! e$ m) _
  400. LDA #$010 p# T, B: ?( E7 h% a7 L* O+ c
  401. STA Music_State  y/ E3 O+ q1 D7 A( p, X5 l
  402. JSR Music_Bar_ReSet- P  @/ b( s* B, }2 y
  403. JSR Time_ReSet+ \& b: Y7 F/ R) k( Z
  404. JSR RAM_Clear9 w. p: s- {% F. G% @
  405. JSR Sound_Clear
    2 {8 f" j2 {; Y5 q9 @- t
  406. JSR Music_Stata_Show
    1 x7 l1 I( [9 A0 t/ l
  407. Music_arrow
    1 T( n- L- `" I0 }8 v* F/ j0 n4 T; G
  408. LDA Key_Once
    ; e5 B$ O- @3 M% Y0 m. \
  409. AND #$CF
    4 p4 O, S9 h9 @- k1 ~
  410. BEQ Music_Switch_End
    ; t# |" X' f, U( b/ i" d+ C
  411. JSR Music_Number
    , [. T) m# i. n- _, ?
  412. JSR Music_ReSet
    1 J  s5 e4 ^+ D' w/ |
  413. JSR Music_Show1 q6 [' t9 i: |
  414. Music_Switch_End
    , d" U: M/ B5 I# z
  415. RTS1 s$ Q; A0 ?* h) Z4 Z% F

  416. " i# w8 s! z5 G4 e/ d( q. e
  417. ;==============================& {* R( h0 E& y" b0 `
  418. ;音乐曲目切换" m4 {' V: q: l8 `$ H  y
  419. Music_Number+ ~7 {" k' R1 p. d$ k6 H9 v
  420. LDA Music_Cur! O2 p+ c% j: u( v* x
  421. STA Music_Last# h% `  C$ ]# J/ D
  422. Music_Decrease/ f7 G7 f7 t3 l
  423. LDA Key_Once
    4 w$ V: ~* B9 W
  424. AND #$42# l) o, k( U; P" d
  425. BEQ Music_Increase
    3 {0 q  r+ Q4 x) N7 W' s
  426. LDA Music_Cur
    2 H& U# n* F3 `+ {$ X$ f
  427. BEQ Music_Increase9 {/ E2 B8 M; C7 n" R
  428. DEC Music_Cur
    , i0 v6 y- G  u/ P. U" q+ y
  429. Music_Increase
    0 s* T, _8 u) t" W
  430. LDA Key_Once2 l; @2 I7 u9 Q. M
  431. AND #$81( f+ X$ n: e3 L
  432. BEQ Music_Decrease_10$ P  [  F: h; X/ t4 R! F3 @
  433. LDA Music_Cur
    / W9 h: C" A+ O7 v* l% A
  434. CMP #Music_Song_Total-01
    6 ^8 r/ @! d* E( E
  435. BCS Music_Decrease_10" g  c! @  I! w
  436. INC Music_Cur' ^' A, [$ N8 y' E6 Z& N5 k
  437. Music_Decrease_10" ]+ F9 z/ c/ K; q
  438. LDA Key_Once) \: {2 L- q6 P2 c
  439. CMP #$04# T) K  A8 A1 v% I
  440. BNE Music_Increase_107 r, d( q/ z0 B! H! R" P
  441. LDA Music_Cur  P/ Z. [  B' c, i
  442. CMP #10
    2 @1 F8 K: I- ]: J- y
  443. BCC Music_Start_Song_Min) T% i8 l6 m( u3 r3 F& x
  444. LDA Music_Cur: q! q- v( \, Q  d
  445. SEC
    : A* k1 |6 I+ \  m! k! G
  446. SBC #10
    9 b1 @0 m. t, `0 [  ]
  447. STA Music_Cur
    $ |9 F: s7 o' O$ {
  448. LDA #$00
    + ]$ A2 n& P( C; R( d* H8 z) `5 \
  449. BEQ Music_Increase_10- o$ @8 ?. `' H& ?: o5 q( l8 d  o
  450. Music_Start_Song_Min
    / x9 M$ E" ?% _, Y1 L
  451. LDA #$00/ A2 o0 L. m# J- H% K
  452. STA Music_Cur
    4 K6 {9 ~( ~* O8 q. s' E
  453. Music_Increase_10
    2 m3 `5 _' G- e  @/ h8 G/ g
  454. LDA Key_Once3 l' D8 \: X- w0 U
  455. CMP #$08
    8 D6 C# \1 C/ [1 _
  456. BNE Music_Number_End
    ) u- Z& T3 R( U! Y# r3 z3 V
  457. LDA Music_Cur
    1 i7 C/ j# e4 `  z
  458. CLC
    7 y) a7 |* X/ Y
  459. ADC #10
    6 ^1 ]% R" ^  D" r- y7 E1 \
  460. CMP #Music_Song_Total-01
    . G/ D6 m3 n% y! l' v
  461. BCS Music_Start_Song_Max& F" x& a, R# q) Y- ?
  462. STA Music_Cur' Q, B# q, z0 w% J7 ]* h1 Z  ?
  463. LDA #00
    4 d0 U7 W/ J# l% z" Q1 }: t" q+ B
  464. BEQ Music_Number_End# V, ~& ?! W- q  L  b* c7 W
  465. Music_Start_Song_Max
    $ X+ d5 R9 U) P1 _. s2 ~
  466. LDA #Music_Song_Total-017 U- P- |9 j0 l6 A
  467. STA Music_Cur, U& h0 d8 M" z7 B& h! T: l
  468. Music_Number_End
    % C+ r) |: S9 j$ Y
  469. RTS  g- y$ Y# ^* c5 x+ a
  470. ) s( G; p& m0 k) h; O
  471. ;==============================; H3 T' i7 d" S/ ?/ b
  472. ;音乐重设
    . p  @1 A/ B) e1 N. o
  473. Music_ReSet6 p6 r) Q8 R8 X& I0 z
  474. JSR RAM_Clear
    . {4 D4 ?+ a& r5 G9 T0 J
  475. JSR Sound_Clear
    9 S; E: A9 s& o, \
  476. LDA #$1F
    8 u  S( m, K' o# G7 N* f) Q. `
  477. STA APU_STATUS
    9 \5 z* H% J0 Y: m5 w
  478. LDA Music_Cur+ ^$ i" l4 [! b$ N! ^& V- |
  479. JSR Sound_Init
    6 C: F' ^8 _8 ~6 c, ~8 D: I
  480. RTS
    ' |1 V3 X- r3 b2 q
  481. 4 d# ]: w1 n1 ^6 N) }0 V
  482. ;==============================
    # r& s- F) z( v4 b9 b1 s# G
  483. ;音乐端口清除
    ) B6 ?& v. L, B! q
  484. Sound_Clear
    & u4 T' ]# z; Y
  485. LDA #$00
    6 O; ^" o' A: T5 r: }7 d' }
  486. STA APU_STATUS
    ; N; l# Z2 D$ R+ D- z& C' ~) L
  487. LDX #$00
    : N1 H( o1 G4 f3 {0 V
  488. Sound_Clear_Start
    * x, P- H4 b2 y1 \3 b6 @
  489. STA $4000,X
    ! ~5 k! P" {0 ^0 L# q8 {) Y
  490. INX
    2 z6 p0 K' k% D# I; z( y
  491. CPX #$14
    3 y5 d% x5 x/ p
  492. BCC Sound_Clear_Start5 Q! v3 V  u2 w" ~+ B) g  ~
  493. RTS
    & |. \4 o2 x7 D( I$ l) u
  494. : |$ M) h" v8 N
  495. ;==============================( D, D" y) I* N" B; ?; M' {. ]
  496. ;按键处理( G8 z; B* n# v
  497. Key_Proc; }* q; C6 V8 i8 W9 S
  498. JSR Key_Scan8 u; c' ]2 g  g6 }
  499. LDA Key_Keep
    0 h* i- `/ m2 V. F0 j& _
  500. STA Key_Temp7 G8 `& T$ j  T) B
  501. JSR Key_Scan- H7 i9 u5 o  s# w/ q( O0 G  m" J
  502. LDA Key_Keep
    9 I* H: E9 Q: W8 s; f, J
  503. CMP Key_Temp8 O$ _& Z$ g! \6 f4 p
  504. BEQ Key_Get_Once( u/ W- V3 I2 b9 ]6 G
  505. LDA Key_Kemp
    * z3 Y8 Q/ `) o5 [: }5 K4 e
  506. STA Key_Keep
    $ R( N7 I( C# _# d  m/ [2 r
  507. Key_Get_Once: I( |/ Q0 X2 j* L; W
  508. TAY* ?; v  g5 K$ l$ C) k' W
  509. EOR Key_Kemp: {, k1 h4 ^0 @3 ?$ R' Y) o4 o
  510. AND Key_Keep
    - w) s. y$ n3 `2 F- {
  511. STA Key_Once: _7 @: G% g( r( J
  512. STY Key_Kemp
    $ w0 N# W- g) k% W" H: A0 X
  513. RTS
    5 C" d4 _) m5 K/ [4 b
  514. ;------------------------------
    9 T# M5 Y  C8 \- d& D
  515. ;按键扫描8 I0 l& X- K0 Z3 F; t- ^! {, L
  516. Key_Scan
    9 R! Q5 T! N$ `# A
  517. LDX #$019 F6 s1 N  B) `7 ^" _+ A4 s
  518. STX JOY1_FRAME7 L8 U8 b  a& \- Z
  519. DEX8 {% v; N) i- K0 l' d7 R
  520. STX JOY1_FRAME5 \/ Q3 [& v# U- t3 {0 m3 c, l4 v
  521. LDX #$08, H; w! @' _. j" G5 y1 `
  522. Key_Value. M4 o" ~4 P9 m. H* j
  523. LDA JOY1_FRAME4 n8 T2 f0 g- D# _/ M* z. N
  524. STA Key_Getv
    : D( D$ Q& }4 y/ R7 ]
  525. LSR A
    0 U2 {. m3 X; _9 I1 o
  526. ORA Key_Getv3 m) {8 e0 Y* s* u3 n- S% y8 u
  527. LSR A
      ?2 o% D0 ?2 D
  528. ROL Key_Keep
    9 b; m  c8 ^5 _% Q* D6 K
  529. DEX
    7 }5 R* V7 A4 F& l7 n6 ]1 C- _
  530. BNE Key_Value; A3 c, ^6 i. w7 R0 L3 V
  531. RTS1 P+ J) n1 ]/ h8 k" @
  532. 4 L+ D) `  g0 M) z2 ]- R* P
  533. ;==============================
    ! s0 c# Q* G$ ?
  534. .IF SOUND_BAR_SHOW_ENABLE& B3 r# ^  ]- E) p. A1 C
  535. ;音乐条显示. j( W% V$ _) h( a: V+ a
  536. Music_Vision
    5 \6 {  x6 t7 P% [
  537. JSR Music_Animation
    ; T- f3 m# y1 Z5 p0 |; ?
  538. JSR PPU_End: i  J' g/ P; T5 R/ B
  539. RTS
    3 P  r  t+ U/ H0 i, f- d' Y$ P
  540. ;------------------------------/ x; v5 c" f' D7 h* j: Z# L4 ]
  541. ;音乐条显示处理
    & W. k; W  R; A+ u( B) ^
  542. Music_Animation& m( T/ F" M1 B
  543. LDX PPU_Cur/ {" m  a% r) M/ f! A  D
  544. LDA #Mode_Line+ r3 P: r5 y+ M3 j
  545. STA PPU_Addr,X
    4 X$ m) S3 A0 v7 H" r+ o8 S* _; V  R4 N
  546. INX
    / m, L6 O$ w( p- v% }* R; m% ?8 }
  547. LDA #HIGH(Sound_Bar_Pos)+ p9 w4 u5 k( }7 V2 M5 w9 j
  548. STA PPU_Addr,X
    8 I3 ?  f! g: m3 y" b6 w! i! C
  549. INX
    5 j' l) a" M) ?7 w( m& f) [9 r
  550. LDA #LOW(Sound_Bar_Pos)5 A: b2 F0 R+ H* J: u, x! f
  551. STA PPU_Addr,X
    # k# t+ w. M) Z; F
  552. INX/ D7 u% d( B4 S
  553. LDA Sound_Bar) J- @1 [  s  o# v
  554. JSR Volume_Convert
    * |% \  n: E" N' }, H( o6 |$ p
  555. JSR PPU_Return
    1 v" J. A! u( F9 A; F) l* G# P6 |
  556. LDA Sound_Bar+$4
    ; K. E- f$ W9 h6 F' I
  557. JSR Volume_Convert9 `. ]( i( ~9 H* P8 S/ k
  558. JSR PPU_Return
    ) k8 D4 w) S( z" p% p3 ]
  559. LDA Sound_Bar+$8
    - s/ j+ b+ h. V9 F
  560. JSR Volume_Convert_Ex6 ~9 F& D; Q( Y: m3 h% {! a8 G
  561. JSR PPU_Return. s5 H* p' @/ p
  562. LDA Sound_Bar+$C+ _4 f3 {5 G( S& k& O3 g9 z3 |
  563. JSR Volume_Convert
    * h, H2 f  U* K( [
  564. JSR PPU_Return8 r: N  l% U3 a$ q9 w
  565. LDY #$10
    % n- C  S4 a+ ^. H$ f% _% F
  566. LDA APU_STATUS  ~% w& ]) z* n+ D, X6 h- d
  567. AND #$106 C9 v- `- A: V6 W! q7 t! N/ O
  568. BNE Volume_Count  P" `1 V. {' N! h2 I
  569. LDY #$00/ W" k2 H* l  J
  570. BEQ Volume_Count% ?+ l# W$ Z$ m. }
  571. ;------------------------------
    - U& M8 R) }3 F- T
  572. ;音乐条处理
    8 W/ }# i* B3 ?% x8 r' @5 f, |
  573. Volume_Convert_Ex
    7 {& J$ w( t2 {# ?$ B
  574. AND #$1F
    5 v: G, r" z' M, G
  575. TAY: ], a9 o$ H1 a& ?, ?
  576. BNE Volume_Count
    : s- G5 b$ I& l' j( m+ w
  577. Volume_Convert# h3 n4 r$ G) ~+ |. ~
  578. AND #$0F
    + k$ P+ ?6 }$ E+ Q
  579. TAY7 N  b) R( t6 C6 o
  580. Volume_Count) O2 m( J2 W2 H; S  `/ o9 O! u
  581. LDA #$08
    7 {' K& a/ ], R5 J& U: x% r
  582. STA Sound_Bar_Cnt
    6 d$ N# ^; _( \7 \. g
  583. Volume_FILL6 A4 ]$ q9 Z& ^( R
  584. DEY0 g( K5 G& `! j0 A7 `- D/ ~
  585. BEQ Volume_Half
    0 T9 R5 M) y# T* b" \5 n
  586. BMI Volume_Empty
    . g! k2 y, [( W7 S
  587. DEY
    - s: C  K1 M: y/ _
  588. Volume_Full
    3 z' M! G/ q. ]- B. [
  589. LDA #$16
    " f4 i% V& G% F/ D$ Q5 \+ |
  590. BNE Volume_PPU
    & D7 U0 k  y) J' b7 K6 a! v
  591. Volume_Half
    ' i4 ^( m' t- U1 z) m+ T
  592. LDA #$15
    / Q% Y' K: r% @/ Z
  593. BNE Volume_PPU
    8 e% o4 i  z6 ~
  594. Volume_Empty5 N& @. S4 w/ h' d4 [' p4 V
  595. LDA #$14
    $ O* x3 Z1 A7 H0 _9 H8 e+ C) D
  596. Volume_PPU8 R. j7 A+ z/ O& T
  597. STA PPU_Addr,X4 h; D( C3 G+ ~: o! u
  598. INX: \0 ^2 r0 E$ e0 g6 M- S3 ^( c
  599. DEC Sound_Bar_Cnt6 V2 {" k6 M2 [
  600. BNE Volume_FILL- M* i& o& f( R$ t, a4 o& t( e! ?
  601. RTS- @* ]# H7 W6 g4 b

  602. 6 X, ?$ c1 Y7 q- q# P5 Q  S
  603. .ENDIF
    2 W+ i+ H" k8 t# V3 E

  604. , F+ Z" O8 N+ |
  605. ;==============================9 K% T% k7 w, N
  606. PPU_Addr_Set;PPU行开始
    ! c: S$ v! Y3 ^" U+ T
  607. LDX PPU_Cur& ]# c( C& G% |( \' b
  608. LDA #Mode_Line6 a2 Y  G+ `5 [
  609. STA PPU_Addr,X
    ) `1 N3 O7 {: l4 x
  610. INX7 u' g0 Q3 h8 G7 ~1 m  U
  611. RTS* U4 w; M( }% n& C
  612. " l; j  V  \# V' g
  613. PPU_Return;PPU转行+ w9 k, s! \# ?. C; L
  614. LDA #Flag_Over. G$ r+ I! {) T5 D- v/ g
  615. STA PPU_Addr,X* Y: ?( O* n1 L: F4 w8 [8 L
  616. INX
    $ F7 X3 G& _( N9 W, c  y
  617. LDA #Mode_Return( r+ C3 e" g4 ?: i3 m' C
  618. STA PPU_Addr,X$ p$ l$ ]6 G2 |2 m3 T) J+ `% s
  619. INX+ e8 o6 c& q8 `8 [6 M% Q. h' w  L, s
  620. RTS
    # H: Q+ C$ i9 f9 s# o* _

  621. 8 d4 Y9 Q4 O2 I% J* [  H. d
  622. ;------------------------------
    " C; H, ^" @& A9 t" J6 V) _0 U
  623. PPU_End;PPU结束2 n! ^+ @. D' Z6 p8 |: l! Y& U4 N* l0 g- R
  624. LDA #Flag_Over* |! y" I) x6 V  [. ~& z8 s( b3 ]9 P
  625. STA PPU_Addr,X
    6 t$ ?7 U" O- S* ?) z' T
  626. INX
    # K% V6 M/ J3 l, B9 \- {
  627. STX PPU_Cur
    & ~3 \/ @, f9 {- |* g* a
  628. RTS3 U+ h; {2 G7 a' h+ ]& O& V
  629. ;==============================
    ! K: b: m- W- C+ j% ?' U  D
  630. Mode_Line     = $FD    ;新起行模式2 s  L+ H/ p% U0 y
  631. Mode_Return   = $FE    ;转下行模式
    9 u! J% H0 Q7 n* x/ \3 P/ x
  632. Mode_Clear    = $FC    ;行清除
    8 U% \$ r7 p5 H& k$ `5 N2 F1 ~9 V
  633. Mode_CntLine  = $FB    ;行计数写入8 t7 r( f  L, ?; a$ ~) J8 T6 x# Q
  634. Flag_Over     = $FF    ;行结束标志" ^* L9 ?( q1 @  T6 b( S. g8 y
  635. 6 y- ?0 l7 e! E" X
  636. ;------------------------------
    ; Q( H# ~, r+ w4 E6 L
  637. ;PPU处理) e/ Y, ~/ e- T+ _* C
  638. PPU_Proc7 _! P- Q. Q" [3 u. s1 }# w
  639. LDX PPU_Cur
    " J+ c/ Q  y0 A1 Q) d8 k
  640. LDA #$00# r# ~/ H1 j- v9 q2 m; f
  641. STA PPU_Cur
    * f* ~" e6 h% A. c, R& K6 T9 E8 a
  642. STA PPU_Addr,X
    " I. v$ v3 E# t5 u' R* x
  643. LDA PPU_Addr3 M  t/ Y9 X) I6 d* E
  644. BNE PPU_Proc_Beg5 Y; V0 v. a7 p" k0 H
  645. PPU_Proc_Ret! J  K. j1 H; T$ Y6 w
  646. RTS6 w* y/ f8 v; Q1 T, N5 m" R$ g! b
  647. ;------------------------------
    0 @# L- W& C+ L6 m( }5 t. o
  648. PPU_Proc_Beg  ;处理开始* e; j" x+ \" V. I9 t
  649. LDX #$00) J! g* s* Z1 f* C6 f% l6 k
  650. STX PPU_MASK
    ; g. a) V# F8 Z' u! M- m
  651. ;------------------------------; v6 ?+ C; G) V; f- o
  652. PPU_Mode_Select  ;模式选择6 K  y' s% e% o5 f* ^, s) ~& c
  653. LDA PPU_Addr,X9 M1 V- \. n7 E! E- B' r
  654. CMP #Mode_Line" W; C! C5 B! z' B" Y/ G8 Z; J
  655. BEQ PPU_Mode_Newline% F+ _. V6 V- x; m
  656. CMP #Mode_Return$ e* F4 E  j# v% |3 q
  657. BEQ PPU_Mode_Return
    ' e7 E3 n. k" b. F
  658. CMP #Mode_Clear
    , K% `( j: r+ G7 R! o
  659. BEQ PPU_Proc_Clear
    0 L5 C' _: `- l4 K% _. R) G/ i
  660. CMP #Mode_CntLine
    $ ~  K! }/ j$ c  R
  661. BEQ PPU_Proc_Cnt_Line+ m6 j( x- v% |
  662. RTS
    : R: L* s8 u! @2 J! A4 d
  663. ;------------------------------! b; N4 v; G( N* J9 m2 ~" P# @6 x
  664. PPU_Mode_Return  ;转下行模式
      c2 D+ O: m2 B" P
  665. LDA PPU_Addr_L6 e* a- a3 x" \* ^% h% V0 p' n) ]
  666. CLC7 y/ w7 H7 L' W2 \
  667. ADC #$20) R/ y9 N3 U# r3 |3 t+ P8 m
  668. STA PPU_Addr_L
    ) V6 b, f: v$ s
  669. BCC PPU_Return_End- l. d( ^9 w3 ^$ y8 c* T/ k+ I
  670. INC PPU_Addr_H
    / K8 z& x0 n7 B" h, {
  671. PPU_Return_End( q/ ]7 v" R) g& _
  672. JMP PPU_Set_Increaser, N& j# x! x/ w! z" ?( N
  673. ;------------------------------
    , v. \! q" u, t' f4 _! l; W' ^
  674. PPU_Mode_Newline  ;新起行模式
    + _# J4 M% y8 N6 M9 X
  675. INX) {$ p) n& g- H" N
  676. LDA PPU_Addr,X/ B0 Q0 Y2 i6 f4 L
  677. STA PPU_Addr_H
    : {" O5 c& r; e7 L& Q/ \
  678. INX% o; R* F% ^0 A$ I
  679. LDA PPU_Addr,X# v/ C, Q2 J7 d* ^( N
  680. STA PPU_Addr_L; r* |" V$ k0 _/ c: i" D
  681. ;------------------------------5 m) B% p9 D* K! g
  682. PPU_Set_Increaser   ;设置写入地址& [5 k7 d, {0 r
  683. LDA PPU_Addr_H
    6 S/ v: E6 \0 A8 J# ?
  684. STA PPU_ADDRESS+ w2 _6 ^- D; E) @
  685. LDA PPU_Addr_L# F9 B- G/ P8 B$ c
  686. STA PPU_ADDRESS
    # a- \" M$ F: Q/ c' t% L: }, Q2 D
  687. ;------------------------------
    1 J8 j4 ~6 {1 r9 [
  688. PPU_Write   ;写入数据3 ?6 P# \; I5 h7 a5 O9 E: f
  689. INX
    . Y, Z2 D* w3 E
  690. LDA PPU_Addr,X; F1 {" N5 N7 L$ u- Q$ U7 K
  691. CMP #Flag_Over4 ]' E8 w: b6 D0 O9 R$ u
  692. BEQ PPU_Proc_End
      m' l3 C" ?- O! {3 |+ V
  693. STA PPU_DATA" S1 ]2 O/ z' o1 Z( k% M* q
  694. JMP PPU_Write" }- g# _- ?2 b$ u1 h7 }, L& h# c  W
  695. ;------------------------------- W2 {  B2 ~# W  v2 W( p" l. {/ l
  696. PPU_Proc_End  ;单行写入结束9 {( R3 V4 l% ^& U
  697. INX
    $ j! i; _, |) {
  698. LDA PPU_Addr,X
    0 M, d; O/ |" g9 S$ K
  699. BNE PPU_Mode_Select
    + A, _: J% k) r% k+ c# f
  700. STA PPU_Addr/ p0 D, ~6 ~; M1 u6 \; W; r
  701. JSR Update_Palette_Color
    8 Y$ \% e1 N4 y2 c. E. B
  702. LDA #$00
    7 H" N$ \- W3 ]. i  A7 @
  703. STA PPU_ADDRESS/ f/ M$ v$ b0 w4 S
  704. STA PPU_ADDRESS( j1 I2 a$ R0 h# \' z
  705. STA Show_Track_Name
    + H4 v& Z# F3 h* O! m
  706. LDA #Scroll_X
    ! ?' v. T) `" Z3 F1 Q4 y
  707. STA PPU_SCROLL( T. ^7 g  s! r; j) C/ ]
  708. LDA #Scroll_Y9 ~/ {9 k5 h) @4 V" Y& Q  B7 J
  709. STA PPU_SCROLL' o. n9 k  o+ w: m* V0 M
  710. LDA Screen_State
    - `0 e( a9 K) w; Q8 [- q' y/ a
  711. STA PPU_MASK
      O2 n0 e/ ^$ a3 a, U
  712. RTS; X# g* H0 N: H

  713. & w. U9 B& Z; I
  714. PPU_Proc_Clear
    " y, {6 p( d% l7 {! `4 |: s  H
  715. INX: A% f3 r0 ~* `9 z' s/ v+ v
  716. LDA PPU_Addr,X- `" A0 x2 B7 R. l. m0 {$ e, o
  717. STA PPU_ADDRESS
    ) l1 M; Z5 v0 {7 C: N* b
  718. INX  k; s7 C& _" V+ S. R. S8 R
  719. LDA PPU_Addr,X* F& k8 g5 ?2 r
  720. STA PPU_ADDRESS
    $ k9 ~% W( w% E) W9 I8 s, v9 f
  721. INX
    ) S0 N) \1 O2 ~" q2 a
  722. LDY PPU_Addr,X* i' @5 w5 J4 P) E" {$ X
  723. LDA #$00
    ; G, z. g- Q2 R; J2 b
  724. PPU_Proc_Clear_Write( \5 r$ Y8 B  @
  725. STA PPU_DATA
    7 N- b1 Y5 d. _+ \7 w* a
  726. DEY9 k& x/ x( ~- h& G& z; c7 q
  727. BNE PPU_Proc_Clear_Write
    $ `1 S, f6 ~5 M: d2 d6 b" @  D
  728. JMP PPU_Proc_End2 x- L5 h6 }$ Z9 D3 {  r

  729. 4 L$ @. @9 i8 N# ]3 m
  730. PPU_Proc_Cnt_Line, }5 t3 K  K5 {3 V0 ^! j
  731. INX
    $ q3 K; n4 r2 g; H3 }" Y; w
  732. LDA PPU_Addr,X
    ( G3 v* i9 x4 ?& I/ n( o0 W! |
  733. STA PPU_ADDRESS
    ' r9 z; F4 b- u4 X& f& N
  734. INX
    , j+ Z6 ?7 }. R# g5 ?
  735. LDA PPU_Addr,X
      S" g- B' y2 Y3 \0 Z7 y
  736. STA PPU_ADDRESS+ j; ?- E9 V# s$ J$ [
  737. INX
    # S( k1 z/ Q/ S1 J
  738. LDY PPU_Addr,X4 O) R; ^* L7 Q  c, f9 O$ D
  739. PPU_Proc_Cnt_Line_Write
    ) f" J, l. C& H$ E0 x
  740. INX
    + Q# B" q9 ]% ^9 @& F
  741. LDA PPU_Addr,X! I: C5 z9 v8 s0 v+ S: A
  742. STA PPU_DATA
    1 f: o$ t9 E1 A6 u( C$ D
  743. DEY/ }  N2 i: z6 F8 }/ \5 @$ S! j
  744. BNE PPU_Proc_Cnt_Line_Write" F# }4 o7 @: S9 [
  745. JMP PPU_Proc_End
    ) v# J% b9 F7 O" v& T; n  Y
  746. 8 R$ d4 `. @/ [% P  e" N! r
  747. ;==============================
    + l, _* m/ h0 ]: ]& e4 {
  748. HEX_To_Dec;十六进制转十进制% d: v& ]) S5 `. A7 U. ?8 m
  749. STA HEX_Data& `. C# P7 m6 b# y
  750. PHA; k$ n' W3 h; z4 T8 G
  751. TXA" R$ A9 \: P' q/ C4 \5 F
  752. PHA
    0 Q) E3 L$ I! Q& _% P6 z7 V- |% [
  753. LDX #$00
    5 U. F9 T9 e, U+ r
  754. LDA #$00
    # b5 S( j; j1 z0 x$ `1 s
  755. HEX_Cln! P+ y; d. N: K6 i
  756. STA DEC_H,X* K: i5 W  Y/ F4 Y+ N
  757. INX( K  u; G: r5 P
  758. CPX #$03
    7 |3 P, `$ {* _$ r1 Y
  759. BCC HEX_Cln
    + r1 S' o9 H! ~4 |  E0 L
  760. LDA HEX_Data
    , y' S2 ?. @3 I) s
  761. ;------------------------------
    9 n7 Q! i, e  t9 M
  762. HEX_100
    : ~/ G# H  i' s
  763. CMP #100
    ' C5 J; Q8 m0 q: e( h
  764. BCC HEX_10
    8 N5 @/ K/ L9 ?
  765. SEC
    + m* F; s: e1 k3 H
  766. SBC #1002 `; [, R- Y! z1 R9 I1 I
  767. INC DEC_H, z" h5 r5 y$ b) W7 e
  768. BNE HEX_1009 u8 \1 ]8 O9 S# |
  769. ;------------------------------! U/ R/ D+ t; V* Q5 E3 b+ [
  770. HEX_109 C# R/ v0 U7 g6 `8 l. R
  771. CMP #10
    ( A" A: }. B2 ~6 s, `
  772. BCC HEX_1; {. ]# ^! u& J9 c8 n* Y; I
  773. SEC. I  o8 ?- O: o4 W% _. _1 F
  774. SBC #10
    ) J: y- a) K2 N) s+ u* _
  775. INC DEC_T
    $ d+ C/ r3 L5 {# ^9 X: K
  776. BNE HEX_10* J& o% _* U. C9 ^6 P
  777. ;------------------------------
    8 o3 L9 @' c- b6 s$ w9 t. Y
  778. HEX_1
    0 E( B1 M* v- g* K' Z
  779. STA DEC_L
    / R2 T- O. O- o9 T/ j# E, F! q% K: |
  780. PLA7 G- P  d+ l# I  x5 W
  781. TAX
    ( V- g  I4 F4 l) ]7 t; Y+ a& }2 U
  782. PLA% d, r# G" w0 s1 N8 q1 M# S
  783. RTS' J; |$ O" O% ]) j4 T/ }/ ^
  784. $ \- n1 A: K% m" l; ]& \
  785. ;==============================
    1 x. |; @; Q' g& i# S0 L
  786. ;音乐曲目显示9 @/ t* C4 N" A. I
  787. Music_Show
    " e/ [' d; a' z
  788. LDA Music_Cur0 {* K3 A9 r7 p2 M; m( B! ?
  789. CLC# ~& c# t( ?4 o
  790. ADC #$01/ `! j' X8 |2 V- f& }7 [4 P5 F
  791. JSR HEX_To_Dec3 u% R9 I0 X# C4 x. f5 y+ O0 B
  792. LDX PPU_Cur
    $ Z8 [# C9 t0 ?& c/ j4 a
  793. LDA #$FD
    ! k, }/ S( l, D* k! t
  794. STA PPU_Addr,X
    - t( N# B6 ^: M" E6 S" v7 A
  795. INX+ c4 @) Y' T0 y
  796. LDA #HIGH(Play_Index_Pos)$ p0 f! M( _/ _1 g6 ~& H. ?; F9 k
  797. STA PPU_Addr,X
    4 f. N4 L# F& p! r
  798. INX7 o4 [9 C6 z+ K! O
  799. LDA #LOW(Play_Index_Pos)
    / q3 P" k" N6 L" A
  800. STA PPU_Addr,X
    # b2 `, R: H- b! T: g- J
  801. INX& g/ Y* N$ @6 l3 e1 A

  802. 8 Z- j1 N7 ]; y" j9 \' h, r
  803. .IF Music_Song_Total > 996 ?' z8 V0 z' Z; ^
  804. LDA DEC_H
    % k: z9 b% F6 q: m5 x4 Z  u0 L
  805. ORA #$30
      L5 v' {9 A. v. k* g2 O7 p
  806. STA PPU_Addr,X
    3 M8 b8 o8 V  g* p6 N0 x! E
  807. INX* W1 a5 u$ v8 A' R7 z
  808. .ENDIF
    # c4 C! ]/ ~/ O
  809. 7 u) M/ z+ e4 I+ d+ x' b
  810. .IF Music_Song_Total > 90 W1 Y7 @# U% N; M* U
  811. LDA DEC_T
    . ^7 k' [) T$ s& K/ Y& ~* O
  812. ORA #$30, E& {. _( L3 F+ r+ U  V3 ~
  813. STA PPU_Addr,X+ U; P1 a6 Y4 h; u2 ]$ Q! s. ~
  814. INX
    6 f# ]) f4 ?1 x$ I
  815. .ENDIF  j1 |/ D. N0 i4 o0 _* e5 A
  816. $ H; h' N$ E  n' p% d- X
  817. LDA DEC_L
    9 v% t2 D( i3 p  @
  818. ORA #$30
    - I! D& z8 d/ |  X; @0 H  z" X6 q- K
  819. STA PPU_Addr,X
    : k3 f. S: Z" \. C( H* F, _& E" H
  820. INX
    & @, b6 p. \7 m

  821. ; Y. n; y, `6 i" m
  822. LDA #'/'
    4 W; T5 s5 P2 c$ C) Y
  823. STA PPU_Addr,X0 l6 q3 F' Z0 Y$ x# J
  824. INX
      I  n9 x9 W8 V) J7 ?
  825. Music_Show_Total7 @8 S& X+ x9 P
  826. LDA #Music_Song_Total6 y( q% H4 y' }) y3 R: e
  827. JSR HEX_To_Dec. [5 Y2 ^2 B( y/ U4 V' y

  828. ! q# R3 m; ~) m  a3 P: d: n1 g' z
  829. .IF Music_Song_Total > 999 K7 S. A! W- v
  830. LDA DEC_H
    ; A7 q9 j6 R, j9 o
  831. ORA #$30
    . p+ x- T! g( W8 d
  832. STA PPU_Addr,X* n& ^2 U) f% A% U4 ?2 w' d
  833. INX
    2 ?( u) l  G3 ]5 Q1 J" b
  834. .ENDIF% ]/ I2 a3 D1 Y% |. m  S
  835. 0 Z6 a6 V# g' t7 h% F
  836. .IF Music_Song_Total > 93 w  t# o4 ~4 ^! \7 d
  837. LDA DEC_T
    * P! m# H/ i+ }0 x* `
  838. ORA #$30
    8 y2 b) P; ]/ q- n, c2 R) L& m
  839. STA PPU_Addr,X
    * R& M7 |% H6 i$ ?
  840. INX
    6 Z" H+ T0 f  k% H8 ]
  841. .ENDIF
    " q; X, i" w$ [0 k( L' {

  842. 4 t: z5 X+ B% \; t9 r& K& I
  843. LDA DEC_L
    ) k0 j3 d. k% P
  844. ORA #$30: j/ i) ?7 H; H( t5 Q
  845. STA PPU_Addr,X( y1 C& |9 U4 c; G8 A5 a
  846. INX
    + H+ X" C1 {- |$ M! [

  847. ' U; P9 H8 ]: L2 X
  848. JSR PPU_End* P7 ?7 X# B2 T; h+ M+ N. i4 t8 f
  849. Music_Show_End: e) S1 @( N( ^, m6 ^4 d
  850. RTS
    ( e$ I' |- y7 A

  851. * K+ V$ e& x: }8 L1 P5 o6 C
  852. ;==============================
    ! s' {. c" {6 B8 K* G
  853. Time_Show;播放时间显示
    6 ]; B  E- b1 n$ y8 M
  854. JSR PPU_Addr_Set( {, d2 x% V5 F: L
  855. LDA #HIGH(Play_Time_Pos)
    7 Y4 q+ k8 h9 P
  856. STA PPU_Addr,X7 ^5 g- b# p/ g) g5 ^& N+ Q
  857. INX
    0 T# K% v& `5 p9 K4 V' x# T
  858. LDA #LOW(Play_Time_Pos)
    0 Y$ j, }; {  ]
  859. STA PPU_Addr,X0 j5 M8 p- }. V. R
  860. INX* H2 W) T0 A3 D$ y
  861. Time_Show_H+ i( M+ H" C4 C/ B" v- K/ w
  862. LDA Time_H  i. v' T' T! i; |8 y
  863. JSR HEX_To_Dec
    & r  @$ Z5 F+ C: i( p4 ^) e
  864. JSR Time_Digit: o9 v# w. N: R% ~0 `
  865. LDA #':'
    # h/ ]+ R$ R, l* P3 t  y
  866. STA PPU_Addr,X, _) z0 q# I/ X, p" X% v- w
  867. INX  }0 x8 C& G! _( |( J
  868. Time_Show_M
    ; a1 e; G6 P5 ^  t/ m/ Q( p3 U# V
  869. LDA Time_M  p- S9 ^- @. Z9 D+ w. k6 W# b/ K2 P
  870. JSR HEX_To_Dec
    - F3 `0 N4 n6 P/ k- ~. z& [/ s
  871. JSR Time_Digit
    : c& O1 U- e; S( g& }8 J2 `
  872. LDA #':'
    1 h# D# O4 ?' `/ D  l/ Q; v5 K
  873. STA PPU_Addr,X
    5 }0 z0 \' s& j- y2 z# g
  874. INX
    & z8 l4 O8 l" q/ u: b! P
  875. Time_Show_S% K# R% q7 |+ I' B
  876. LDA Time_S
    2 o7 ^" d2 o" X/ {% ?
  877. JSR HEX_To_Dec
    * q2 |6 k9 j3 @5 w  i
  878. JSR Time_Digit+ K# A$ d5 [* I. y* t* E
  879. JSR PPU_End
    & i* Z0 d2 v7 n7 A9 F
  880. Time_Show_End
    & l) T0 Z8 x% E& N  z. X
  881. RTS: N( p+ ^& i1 M4 E2 [! K# m
  882. 0 {- Q  J$ T3 q5 }" |) f+ A
  883. Time_Digit! y' P0 r( b/ J2 }/ s: [
  884. LDA DEC_T2 A3 |+ p- F# S" H
  885. ORA #$30
    3 Y$ E: B( O4 Q; N, k
  886. STA PPU_Addr,X
    * G7 T7 R1 Y; s0 @
  887. INX
    * e1 c6 `+ F2 b) E  c, T3 b0 y. C/ d
  888. LDA DEC_L) w$ Q& u# f9 t* n6 r
  889. ORA #$30
    * f  r( x3 q# s" f0 V9 H
  890. STA PPU_Addr,X, W: F2 U9 U( R7 b$ o
  891. INX) M( Y: O8 z" k
  892. RTS
    & M. b! D4 ?7 h+ o* c

  893. 7 U  P2 s& g; x+ e( l
  894. ;==============================
    # G  {' Z5 [" k- \: |6 P
  895. Time_Count;计时
    / P; W9 z7 l% P6 L. w
  896. LDA Music_State
    " g9 L5 T- i% @- ^' a" s, |  L
  897. ORA Time_Wait_Cnt
    & f' ^) u# G2 k! C4 O. X
  898. BNE Time_Count_End
    $ v3 z& I$ l" \0 d& k' @- o( q$ m
  899. INC Time_Cnt
    2 {0 [; f1 T* ?+ e" T9 ~8 ?$ c: `
  900. LDA Time_Cnt
    7 v7 |( ?2 K6 P8 l: O3 C
  901. CMP #60
    $ Q9 C7 c1 A/ A+ O7 g: G: a
  902. BCC Time_Count_End
    1 G( G6 y  B" A0 U' y( }
  903. LDA #00
    7 [' ^, M8 [. k. c4 F4 [
  904. STA Time_Cnt
      L/ q$ x; h0 o. y
  905. INC Time_S
    ' |* Z/ x! |+ S8 a  w
  906.   b& }% C, h0 c$ h4 H; \6 c' e
  907. Time_S_Cnt
    5 o5 w( D! o" \) I8 x6 c& k
  908. LDA Time_S6 n9 b$ W  f4 n; m
  909. CMP #60
    & O/ @3 F$ `+ o$ U+ @0 a+ @2 W
  910. BCC Time_Count_End
    2 ?6 h) Z% D0 R9 b4 A, l
  911. LDA #00! [, }4 M: U7 u4 O1 E
  912. STA Time_S
    " f7 C9 F; Q% Q6 Y: K, D8 z4 i
  913. INC Time_M
    7 a  P* x, V' A3 O* l1 H

  914. 9 a; k$ i0 b; d+ i0 X- Q3 w, H
  915. Time_M_Cnt
    * g( G# N% p5 j- _- |0 u
  916. LDA Time_M
    8 i0 j% j7 _0 c% H* A, E
  917. CMP #60
    9 ^  Z+ B2 j: n  p7 O
  918. BCC Time_Count_End
    + M: a' {% d, f, V; ~/ {8 M: k( ~: X
  919. LDA #00
    0 N2 f6 d: U& r. f( z/ N9 B/ F
  920. STA Time_M
      m3 H3 U4 r3 P8 R( b9 B( G
  921. INC Time_H3 l- o) c( z# I8 n/ V$ z
  922. # f. ~5 S9 m5 B; L! x$ f# f
  923. Time_H_Cnt
    ( O' _9 T2 E# C7 m& \" f8 y4 [
  924. LDA Time_H& Z; B$ c% x9 f7 O4 h- \
  925. CMP #24
    8 F- ]/ i; g8 u4 s
  926. BCC Time_Count_End- s9 v/ J" q; U
  927. LDA #00  M; h% P( V6 C, o( D
  928. STA Time_H
    . _% Z' N5 a* H- o

  929. ; j. X( }  C) p2 a
  930. Time_Count_End$ X% S$ U$ o8 T" U5 B
  931. RTS
    0 O& M) Q, Z; n

  932. # W2 y: y0 g! `* H! Z" o
  933. ;==============================
    0 L) r5 M( S# J) m- P- V
  934. Time_ReSet;播放时间重置6 G+ y5 H0 U! z& F; J3 g
  935. LDA #$00
    % I3 e" @) r' u1 I2 V
  936. STA Time_S  s4 T  Y8 h# u5 Z( m
  937. STA Time_M 5 U8 M1 t# q$ a! W: ^# Z" R+ Y
  938. STA Time_H
    3 v; D# x: f# W+ M' Q: M8 E
  939. STA Time_Cnt6 j- L- h5 ?9 H" n
  940. RTS
    ! Z( Y3 [; }- v  L2 g
  941. " d7 ?/ c9 _9 e- z+ }
  942. ;==============================7 m$ |2 R5 N# l  I. K
  943. Music_Bar_ReSet;音乐条重置' q' u- `: y5 }# `$ \! B/ f. O
  944. LDA #$009 Z, Z* J1 T: c& B, T4 G4 h: U
  945. LDX #$005 d1 c, @0 E, i
  946. Music_Bar_ReSet_Set
    - y% K' J5 f& j
  947. STA Sound_Bar,X5 c% U0 l" i$ Q* G% V; k
  948. INX
    . E6 ?  h) u6 b" q+ j0 d
  949. CPX #$10
    ' |  O2 a7 {: W2 c* U
  950. BCC Music_Bar_ReSet_Set7 K- ]3 d' ~+ d) i6 E; D0 L: T
  951. RTS
    ; c2 g5 w. P1 Y

  952. # n( Y. ?3 ]4 P' k- U1 h
  953. ;==============================$ {( n4 Q5 [5 w6 }3 O( {7 J
  954. PPU_Data;PPU数据写入% ~! \( A/ U# i$ [7 h9 B9 A4 @
  955. STY Data_L
    - Q5 u+ B5 t& g& k1 M* m" W! J
  956. STX Data_H5 H4 s, E* L5 S# Y8 h0 {
  957. LDY #$FF& O7 _% i2 f2 f: r* G# j. v( F
  958. LDX PPU_Cur: d- \4 O, A' B) g" D
  959. DEX
    + D- s2 _9 J; S5 z+ T3 }# L
  960. PPU_Data_Beg
    % o" [5 [$ A" o  H/ M
  961. INX
    6 T# t, w0 y2 V2 D
  962. INY8 o7 Q2 U9 W" }0 \, V# Y
  963. LDA [Data_L],Y
    1 F3 W4 z1 ]% B: D( }' m
  964. STA PPU_Addr,X- p7 ^% C( u2 }5 \2 Q! d" f+ }1 U  |
  965. BNE PPU_Data_Beg8 S# a3 d7 k# A) G+ l  G
  966. STX PPU_Cur, R+ l7 V% C- u6 v
  967. PPU_Data_End" ^9 ^6 c6 y9 O! Z: Y$ [9 ^7 `
  968. RTS; j7 n0 s9 n. S; H, Z# X; g+ J
  969. & Q+ a! X8 @" ^4 `3 A
  970. ;==============================2 I  R+ V$ x0 \2 Q
  971. Music_Stata_Show;播放状态显示
    % s8 U( Z/ E0 E- c& D# h
  972. LDA Music_State& B1 P2 x: _6 [, C9 |
  973. BEQ Music_Stata_Show_Play
    9 M! m/ U5 S; V. E: x: P  K, \
  974. Music_Stata_Show_Stop2 F+ Z$ t3 R/ a" T+ u1 R) q7 m
  975. LDY #LOW(Music_State_Stop)
    $ z" u9 N- M5 k1 t8 ^9 X
  976. LDX #HIGH(Music_State_Stop)) @% r2 E& @2 x/ d% w. ?' V
  977. JSR PPU_Data/ X3 l7 X: ]. ]& {, w4 B0 |6 `+ h
  978. RTS
    ) L9 \4 h. P" |0 F5 m
  979. Music_Stata_Show_Play. @2 P5 f+ \  C1 ]' E# V8 X+ {0 X9 B" ^
  980. LDY #LOW(Music_State_Play)
    & _# V& ?. p( B0 m3 L
  981. LDX #HIGH(Music_State_Play): o- u0 [! i  y( v
  982. JSR PPU_Data
    1 X  ]" p$ u% }/ e1 X
  983. RTS
    ' ?$ t8 }) ~. Z1 v5 s: o
  984. ! m! r2 d% c" R. u2 r9 H7 r4 U
  985. .IF SOUND_BAR_SHOW_ENABLE! L  y* G% P: C4 I  M9 J
  986. ;==============================
    ! i6 d& s) l5 D( t. ^9 g/ C9 c
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ; |: c% K& Z6 P; V- J$ Y3 E' P
  988. LDY #LOW(Sound_Bar_Text_Data)( c9 {  q1 d1 F' b8 U
  989. LDX #HIGH(Sound_Bar_Text_Data)
    3 x& R  w+ D) d1 k( f- i, N: J0 B
  990. JSR PPU_Data4 F" ~9 S/ t$ O+ a
  991. RTS
    ) A3 E$ G$ g: q, h+ A+ c" Q
  992. 4 F+ h; k3 A+ k8 y8 D- ]0 }% F
  993. .ENDIF
    $ ?% A- L( g' T

  994. ! G* `% e- C2 ^; G' [, B1 i
  995. ;==============================3 ~9 g+ j( @& s" |+ d' T
  996. Set_NameTable_Attributes;设置命名表属性
    + n; U+ e" L' \" {. V# U
  997. LDA PPU_STATUS( H1 w% a& h& B, M: [- u  i6 r) o+ S! r
  998. LDA #$23
    0 Y# v7 j* A* l( \5 V! p4 D  t- j
  999. STA PPU_ADDRESS: H$ L/ U, L) Y9 o' n; r, @7 h
  1000. LDA #$C0
    $ t8 `* f7 e- d6 ^
  1001. STA PPU_ADDRESS1 n2 W* U: i1 O. P7 |; H3 S+ Y
  1002. LDX #$00
    : z( B* @3 S3 D1 ?* ~+ k8 \" Q' U
  1003. Set_NameTable_Attributes_Write
    " p3 d" l) y  g8 t# V
  1004. LDA Palette_Attributes,X
    / \9 Y; T( I( ]0 R3 p: s5 e
  1005. STA PPU_DATA
    5 q$ H% v% r/ `+ i/ ^
  1006. INX
    5 M  }% G* Y* V
  1007. CPX #$409 Z1 u$ H1 A' Q* ?' \+ @
  1008. BCC Set_NameTable_Attributes_Write" L9 B/ C/ \' O* f7 D
  1009. RTS
    9 s' n8 ~  k/ Y+ a- a6 Z+ m

  1010. + V  d8 p' a2 T6 N( h- ?
  1011. ;==============================
    " ^+ ~6 y# v4 V
  1012. Set_Palette_Color;设置调色板数据& X3 N) v5 ?0 b  @3 f( M4 B- V1 t) A
  1013. LDA PPU_STATUS
    2 q- `. L; j# t  a
  1014. LDA #$3F; m& d) L- X2 ^! ?
  1015. STA PPU_ADDRESS
    ' P; h2 [6 C3 p, v% L
  1016. LDA #$00
    - Q" b* J- c$ b, l! G* N
  1017. STA PPU_ADDRESS5 A  q' g% I2 f( w
  1018. LDX #$00( l# U: h, g2 V! z5 x7 G
  1019. Set_Palette_Color_Write; l8 p" Z" w' \9 _7 g' p0 `: f7 O
  1020. LDA Palette_Data,X
    5 E) z; Q( Z6 Y# e) F% V! ^* N
  1021. STA PPU_DATA
    3 L5 ~' l. G3 p' J
  1022. INX: R; r, c1 |' H+ A+ |) y
  1023. CPX #$20
    7 _9 u$ m" f; X
  1024. BCC Set_Palette_Color_Write
    - D: ?7 j) V. S
  1025. RTS7 S) y; g# x& w, w/ |% Q1 v

  1026. 3 M1 m7 K$ V8 ^5 G8 ?/ l- P
  1027. ;==============================
    1 X- ~! g8 m4 T. |
  1028. Init_Palette_Addr;初始化调色板数据
    4 y0 y3 S. C% ~% }) C' a; `
  1029. LDX #$00
    / W% s; I" F2 R9 U3 U' L- K
  1030. Init_Palette_Addr_Write
    8 Y& h' T+ J; ^
  1031. LDA Palette_Data,X$ V4 c, w4 O# i& e% O6 f9 M
  1032. STA Palette_Addr,X
    3 @! Y/ s+ v% T3 l7 Z! z. m
  1033. INX$ L) x* `# t+ ~& d9 b4 x; T
  1034. CPX #$20; i( N2 p8 E. A& r
  1035. BCC Init_Palette_Addr_Write" W: D3 m1 A4 j7 w
  1036. RTS
    2 }* w9 `" g2 b1 T" Z$ x

  1037. : \3 e0 ~1 R( ^, t. L9 m' U& N& L" e
  1038. ;==============================
    & ?# b: r9 {$ ~
  1039. Update_Palette_Color;更新调色板颜色
    , X" @+ ?- ]1 H. a+ c5 Q' a' a! B
  1040. LDA Show_Track_Name
      c5 {2 J) x2 M0 b* H
  1041. BNE Update_Palette_Color_End
    6 e9 ?! w  ~9 a; a
  1042. LDA Palette_Update_Flag3 S3 j: q, B8 J- u- Y) q
  1043. BEQ Update_Palette_Color_End
    8 s3 N6 l0 P) O& V9 I7 O) x
  1044. LDA #$3F
      c* c# M, ]2 ~4 M
  1045. STA PPU_ADDRESS- Z+ F- X% o) r# r8 d$ _2 }. [
  1046. LDA #$00
    ( {( x0 p$ Q0 l1 E" A
  1047. STA PPU_ADDRESS
    % R. f# x; `6 l  d3 N
  1048. LDX #$00
      U9 ?# L, e2 v5 ?5 v& N8 ?+ i
  1049. Update_Palette_Color_Write+ h: e8 I& F) c
  1050. LDA Palette_Addr,X1 c6 _/ y0 m8 o& ~* V. J
  1051. STA PPU_DATA
    # c- G7 w+ k% c) W3 v/ Q: e
  1052. INX
    ' [4 W- N5 {" B5 t/ b2 p2 m& W& N8 j) G
  1053. CPX #$20
    " P( b- ~4 v! Z: s
  1054. BCC Update_Palette_Color_Write- f& s5 y$ c! e9 d# I
  1055. LDA #$00
    / k; I* [/ c9 u( U1 t% H- B. p2 k
  1056. STA Palette_Update_Flag
      L" S$ \6 h% u8 d( R
  1057. Update_Palette_Color_End
    6 z: p- N) o2 F" ?! Y
  1058. RTS
    / J7 j" @& b! R( O& a1 y, @& ~  m

  1059. & A" d: O& C. b- N
  1060. ;==============================
    & j: \5 [' A) u" Q
  1061. Update_Palette_Data;更新调色板数据
    " u7 b  x& K2 |- G& }  e9 Y
  1062. LDA Show_Track_Name* M/ D  G2 w2 @/ T+ C
  1063. BNE Update_Palette_Data_End
    9 r8 b5 f3 n' {+ c
  1064. LDA Music_State+ C9 L7 i/ r" K  V
  1065. BNE Update_Palette_Data_End1 S8 H9 W3 ?$ M
  1066. Update_Palette_Data_Check1 ?$ m/ n$ \  |/ }- D) L
  1067. LDA Palette_Wait_Cnt
    ) w" y3 k7 ~1 T* {( w0 e  d) a
  1068. BPL Update_Palette_Data_Check_Over
    $ N6 s4 b# V- X, k7 G
  1069. LDA #Palette_Update_Interval9 C: k% o* Q$ H3 B' a9 q  u' ?
  1070. STA Palette_Wait_Cnt# _) [, u$ c! l$ z% _5 l
  1071. Update_Palette_Data_Check_Over& X/ N+ {0 h5 {/ N4 z# @0 A3 w
  1072. DEC Palette_Wait_Cnt
    $ e3 M. q8 h- E, X
  1073. BNE Update_Palette_Data_End5 [) N! D* @4 I: p2 a
  1074. INC Palette_Update_Flag
    ) o1 o% |  }, F* k. R% b
  1075. LDA #Palette_Update_Interval" K0 J' n/ k8 i- C, z
  1076. STA Palette_Wait_Cnt0 P' @" D; T4 I" \0 ^, F0 A
  1077. LDA Palette_Update_Addr- X- W+ |' h; C
  1078. CMP #Palette_Update_Max
    - ?' `9 n; r- j' r  L8 J3 v$ A- f
  1079. BNE Update_Palette_Data_Set" C* }. l! j( @# p
  1080. LDA #Palette_Update_Min - 19 J! g% q$ O, ?# }' ^; k
  1081. STA Palette_Update_Addr
    3 J4 h& ^: _# F$ d+ o9 Q
  1082. Update_Palette_Data_Set
    ' h' z$ e- `6 n! |  Z4 m- h
  1083. INC Palette_Update_Addr- T6 k* I6 G( c, Q! c. \, T
  1084. Update_Palette_Data_End  j) c! ?) I6 t& D" [/ s; w
  1085. RTS: ~; f& o, I3 t- ]  V! A% T: c
  1086. # `5 E* W/ `$ W' G1 E
  1087. ;==============================
    ; u& D: u4 S  {2 K" g
  1088. Show_Music_Text;显示静态文本
    / K3 c3 K; ]3 j% ]/ b! a! A" J) e
  1089. LDX #$00
    " t: \! c: W; l) W! m
  1090. Show_Music_Text_Set
    & j& k/ C8 h7 [5 U  H! V9 Q3 a
  1091. LDA Static_Text_Data,X5 B% I% d3 c& A
  1092. STA Data_L# u! G3 o" T* k, l+ B7 ?! N) G; g8 C
  1093. INX
    5 D9 ]9 i( _0 I3 p2 e. B5 F% A
  1094. LDA Static_Text_Data,X8 L7 X! B. C5 _% n- Y
  1095. STA Data_H
    ! i7 @3 G. W# T
  1096. INX0 c' ^9 p' w3 m- A/ m: ^, e
  1097. LDY #$007 v' z( k+ H$ E7 K
  1098. LDA [Data_L],Y
    ( S0 D' K" G! x3 s. c. ~
  1099. STA Data_Cnt
    9 C* V5 N: l7 ]
  1100. DEX, M6 b  ]2 n& n* i* H5 H, `1 Y, D
  1101. DEX
    . }6 X+ n& E9 \/ B5 Y% @( `' K- u
  1102. LDA Static_Text_Pos,X
    + k* V5 A" b! s; d
  1103. STA PPU_ADDRESS
    5 B  \0 q$ B3 g4 Q2 J# P
  1104. INX/ w: ~- C& q4 B
  1105. LDA #$205 i: i8 N8 l5 ^3 K! j& w
  1106. SEC8 X4 v. w: u8 D/ z/ z4 F
  1107. SBC Data_Cnt
    # U* [( |0 Z# i* e; v
  1108. LSR A- q% ]  D5 A3 U- i! F4 ?
  1109. STA Data_Buf( Q+ Q9 \6 E8 T7 p- n2 W" S
  1110. LDA Static_Text_Pos,X, o0 W" g* b) V% b
  1111. AND #$E0/ M- M* Y' p/ x1 @
  1112. CLC+ A! J# P" P% ^
  1113. ADC Data_Buf
    : K, _! o2 `* N6 l
  1114. STA PPU_ADDRESS
    ! v4 G4 V- N/ N) P% p: P. k
  1115. INX+ t, s. y7 T* D3 _- N. y: `/ g
  1116. Show_Music_Text_Set_Write
    3 y3 {/ U3 @, @1 I& N/ y5 z
  1117. INY: ?! h7 f2 S$ W/ H: w- {% s
  1118. LDA [Data_L],Y& p5 |9 K5 }* W$ a
  1119. STA PPU_DATA
    / `' O4 O4 `% W
  1120. DEC Data_Cnt* T  e3 w& j5 z' L; e
  1121. BNE Show_Music_Text_Set_Write/ D) g$ F) }0 Z. b: v+ J
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    ! Z- {! C( q, |$ I+ w7 L5 Y
  1123. BCC Show_Music_Text_Set# E; K* R# s% C+ M9 L
  1124. RTS+ q2 b$ E' C/ G! w! u4 W

  1125. # |& d3 l, H- u+ [2 i
  1126. ;==============================
    / [  ~* ~3 D6 v1 d* \, t
  1127. .IF Track_Name_Pos;显示曲目信息
    , P& w5 f! u2 d/ O0 d+ P3 T# f7 g
  1128. Show_Track_Info
    " X8 I/ N0 D( R% l+ h
  1129. INC Show_Track_Name
    $ o8 }: O; v- s- I, V
  1130. Show_Track_Info_Clear: @; Y3 ^  f4 h% }% |
  1131. LDX PPU_Cur' ]5 G6 Z' E) _3 w0 D* h. g+ i
  1132. LDA #Mode_Clear
    ' e/ k) \8 F2 I6 h. A
  1133. STA PPU_Addr,X
    & M) R0 L* F& E! p* c9 R
  1134. INX# Q' b8 V8 {8 h& }2 Q

  1135. 9 r3 |; r* K- E
  1136. LDA Music_Last
    & Y5 ~% H  H0 M4 a1 a
  1137. JSR Show_Get_Track_Name_Center_Pos+ W* N8 z! V1 s+ }( q
  1138. Show_Track_Info_Write_Cur" E0 l2 ^" l8 {1 s
  1139. LDA #Mode_CntLine+ X. o  x3 E7 _5 {- C9 }: k+ F! i
  1140. STA PPU_Addr,X
    . a4 s7 ]) g, T0 \3 n. k
  1141. INX9 M9 X4 F6 r6 O1 N) y1 U& d6 d1 X

  1142. & o' V  U& t" M
  1143. LDA Music_Cur: }- _: L6 m' x! o1 r
  1144. JSR Show_Get_Track_Name_Center_Pos% O! E" P, H/ X& s9 M& V
  1145. & H* B! r, n% h1 y- `" d  M
  1146. Show_Track_Info_Write_Cur_Data# Y& L0 y" p- T+ v
  1147. INY" E* J" Q$ `4 O; l" \7 i' U7 K
  1148. LDA [Data_L],Y
    3 P2 W% N+ e% X! K. z2 f) X( ?8 i
  1149. STA PPU_Addr,X% K' ?; [$ H) T- V! w* B
  1150. INX6 H& D( Q* v6 D: f( n
  1151. DEC Data_Cnt: ?% N3 X# w. n* v# u4 D* v& ]) g0 J/ U
  1152. BNE Show_Track_Info_Write_Cur_Data0 s, @- x6 p+ b* }8 ~
  1153. Show_Track_Info_End
    ) L/ P9 `1 p9 H7 j( }
  1154. STX PPU_Cur" s; j, f* v1 E8 B: R! ]/ d
  1155. RTS" \7 t6 V  ~3 ]$ K/ K
  1156. . A- `* w0 D: t/ e0 L$ f+ K( m
  1157. ;==============================* B: L3 N$ @! J9 Y. _+ [
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    . Q8 O0 P3 s  V) i8 c/ C0 N) n
  1159. ASL A
    / l0 n9 @9 x0 x/ x' m' i% o0 |4 x
  1160. TAY
    " a6 d8 S! S1 [5 A& `
  1161. LDA Track_Name_Addr,Y) Y$ ^% W- \9 `9 [! e3 [
  1162. STA Data_L
    $ X! f. S" d- S# O1 u. u; r' m# X2 g. [
  1163. INY/ t8 J  S) m* r
  1164. LDA Track_Name_Addr,Y
    ) T) q$ H! _- f' D+ C3 v, ^
  1165. STA Data_H
    + k5 U" M* Q9 y1 y
  1166. LDY #$00
    ' i& Q" L' Q. B9 J
  1167. LDA [Data_L],Y9 l# k0 c8 _; Y( Z% ~, |% @7 _
  1168. STA Data_Cnt% d* P. n3 B, x) k
  1169. LDA #$200 n1 d/ q3 P" E
  1170. SEC2 D% |: Y& s: Q! ~5 g
  1171. SBC Data_Cnt8 w- m4 \% Y, u" n: y
  1172. LSR A
    ( L. J/ s/ I/ n0 G7 m( E7 f
  1173. STA Data_Buf
    , r# Z, K) f7 c7 }  g
  1174. LDA #HIGH(Track_Name_Pos)
    * g, V9 \- N- f* o" v! s1 q
  1175. STA PPU_Addr,X( I5 P! K; V- Q9 o% e, H8 }
  1176. INX
    % M4 Y8 l3 X7 G: d( w
  1177. LDA #LOW(Track_Name_Pos)# k, f' y5 ^: m& Z2 }+ w: {- e
  1178. AND #$E03 Q7 i% K( ?2 Y. Q- W3 s* S
  1179. CLC
    # q& ]: S- O  v. p0 m" S6 |
  1180. ADC Data_Buf4 }9 F- b! C% }) M# r; f
  1181. STA PPU_Addr,X3 U" X/ w7 @/ w  S& l7 |, ]
  1182. INX
    3 B( N6 A9 ?! Z- U+ D' R
  1183. LDA Data_Cnt# c$ I: g! v  K. e; Q& R6 b
  1184. STA PPU_Addr,X
    $ C; ~6 l" Q7 q
  1185. INX
    , e0 T8 F, D5 q1 u, G! k
  1186. Show_Get_Pos_Center_End
    ! `' k5 z1 f& F* I5 F$ N+ l: j
  1187. RTS
    $ @5 _" z" a! h+ J( {6 F" n" M; a
  1188. .ENDIF9 I+ C6 _0 V- v1 `: a& F

  1189. 8 Y, G0 a  M* L9 A
  1190. ;------------------------------/ D) U8 T  w( k& ?
  1191. ;命名表数据
    2 ?  Q" m# M: f# ~$ I6 C3 Z
  1192. Palette_Attributes  |* G, J: q. ]1 M
  1193. .IF SOUND_BAR_SHOW_ENABLE
    ; h! H) h$ ~! _, |0 M; \
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$003 g6 H5 s& h4 I7 X! g
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    1 i+ f4 G+ Y" i( F
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    7 _* d4 R7 H) c. |- M! e
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    5 n' g2 {* `* f& O
  1198. .ELSE9 u* @5 n# V, ^4 `5 O0 Z! K
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00& m' X6 P% X; r0 Y7 b/ `& Y
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    # f/ l8 x: w8 L/ [
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    1 p( c9 [7 U! \4 T8 Z( H5 K
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55  @) O. I4 w7 V' U8 i* \
  1203. .ENDIF
    ) `: J) w. v  _3 x0 b# f7 s
  1204. ( s& F8 F) y. s/ z4 a
  1205. ;------------------------------
    2 m7 w. F% Y- |( f( l
  1206. ;调色板数据
    * n7 C1 _; j3 P
  1207. Palette_Data. Q4 i0 M. q2 @# Q
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F! u( ~. r  ?8 r0 n- P5 S
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F. v: K6 `! {  r: h( l2 d
  1210. ; ]9 B6 c( J6 Q" _1 X! Z3 F: N  X* G
  1211. ;------------------------------
    4 I# @  z6 c: L, D; S7 e
  1212. Static_Text_Data, X  B! z3 T, b  _  Q! |! x
  1213. .WORD Static_Text_Title_Data4 S9 I7 x) D6 Y
  1214. .WORD Static_Text_Author_Data
    ! K/ w' |) S# r; }
  1215. .WORD Static_Text_Date_Data8 ~1 @5 n0 W) `. h4 i
  1216. Static_Text_Data_End
    7 N2 }9 ^1 v8 b: u9 a" R( S

  1217. ) V) e' n  X7 @9 p
  1218. ;------------------------------
    6 X8 K# W: t9 N$ G) T# T
  1219. Static_Text_Pos% c4 ~6 O5 J) H6 O3 Q2 _
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)/ G; p+ Q4 g! D3 F) u# e/ }
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    % n* h: l! n, ?6 s) ]
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    7 p" H3 d) G0 C1 b, v
  1223. Static_Text_Pos_End0 v- p9 M& z8 w0 `0 m
  1224. - g; `  G2 y* l6 w* S# u
  1225. ;------------------------------
    % s; ]1 @* t  @- Y, I; A
  1226. Music_State_Stop
    - m: ~3 R1 l! L# q1 Z
  1227. .IF SOUND_BAR_SHOW_ENABLE
    2 Y2 z, J/ M8 C& M/ M" x8 C
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$008 t" A9 {! |3 I  o. i* R: s
  1229. ELSE
    & v3 \1 `/ I2 N
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    3 O2 H, i: O' b+ }
  1231. .ENDIF
    ! J% L$ A$ @( l. V' X
  1232. Music_State_Play
    ! N$ z6 O# S: u$ w7 w
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00- z$ L0 A- x1 i  o: ^, r; p! P

  1234. , z9 v6 Q3 j: v; P
  1235. ;------------------------------
    / I- T% L; p& P! Q# J9 m
  1236. Sound_Bar_Text_Data;声音类型文本4 `4 c( K+ L6 I5 g4 i
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)1 J0 I7 N/ h3 H. s; @8 n: J
  1238. .DB "SQ1-",$FF
    % Y( b' _8 h# K& H9 E
  1239. .DB $FE,"SQ2-",$FF  G  q# ]5 |9 [6 N( H1 h
  1240. .DB $FE,"TRI-",$FF
    7 g9 S& k' ]5 ^/ ?) k! H+ I
  1241. .DB $FE,"NOI-",$FF
    $ e. o' p* i( t8 l% L; ~. `5 ~% v6 _
  1242. .DB $FE,"DMC-",$FF,$00
    1 x" ?+ Y6 T' z2 {' p
  1243. 7 K  h( L# S9 _0 v
  1244. .IF Track_Name_Pos
    , \$ O( H  T% O- O4 u
  1245. ;------------------------------4 V% [" u1 P3 k2 @& B
  1246. Track_Name_Addr;曲目名地址索引
    % Q3 X7 o3 Q% _3 B
  1247. .WORD Trackr_01
    4 y0 n. G/ L: c
  1248. .WORD Trackr_02
    ) u+ O& U2 ~% B
  1249. .WORD Trackr_03
    ! ^. ~7 {$ v  z* O& W# a; M0 k
  1250. .WORD Trackr_044 D+ b" f. j7 E2 V# |5 t+ O
  1251. .WORD Trackr_05
    4 q6 J- M+ ~. U) J8 d1 h
  1252. .WORD Trackr_06
    7 Q- f7 Q+ Q6 _2 \. ]2 g6 C
  1253. .WORD Trackr_076 g- Y. o1 s5 v, b; x( \
  1254. .WORD Trackr_08
    : I: G7 m6 f9 v
  1255. .WORD Trackr_095 E$ D* h/ q9 D1 A: U; D
  1256. .WORD Trackr_10" \' E) u2 a4 W" m
  1257. .WORD Trackr_11$ j+ R7 W' E5 w% v
  1258. .WORD Trackr_123 v. }: G5 N" R9 L( P
  1259. .WORD Trackr_13" L1 {4 o7 V" g: F4 J1 I
  1260. .WORD Trackr_14
    ; X% v: T' G6 ?8 t0 J
  1261. .WORD Trackr_15
    ! o. ]  M  b. F: u' @. U% v
  1262. .WORD Trackr_16' P3 g8 W7 I1 k3 t7 ~
  1263. .WORD Trackr_174 ?# h% o8 n0 P0 [& K1 Y
  1264. .WORD Trackr_18
    6 I. G7 e/ J2 z+ ~. b( X( s0 B% L
  1265. .WORD Trackr_19
    9 X2 n8 R  h+ n5 ~" C3 Q2 ~
  1266. .WORD Trackr_20
    , s) j2 g- U' T
  1267. .WORD Trackr_21
    . A* _$ |2 p! [8 \
  1268. .WORD Trackr_22
    # H8 R& |8 A9 J, |9 S: o' L- B- m
  1269. .WORD Trackr_233 ]( t8 o6 ^4 F2 `' H
  1270. .WORD Trackr_24
    2 B1 {. i9 ~" W- Q
  1271. .WORD Trackr_25. R3 I( t9 t: I7 C8 G% Q
  1272. .WORD Trackr_26; R+ u% ^. c( v# l
  1273. .WORD Trackr_27
    + X7 N3 y  c( X+ Q, |
  1274. .WORD Trackr_28
    ( u# n. c2 ]8 B( J! X2 ~/ u/ @
  1275. .WORD Trackr_29
    9 i$ d& Y' R5 S% f$ F% j: p$ S0 N0 g' k
  1276. .WORD Trackr_307 h: H& Z, z% l2 Q, N& x& e- k, Q6 S
  1277. .WORD Trackr_31
    ' I8 [5 h: K2 v* s- v" E5 C
  1278. .WORD Trackr_32/ ^4 ^7 k+ h( j1 O. v
  1279. .WORD Trackr_33
    , e' J  D5 s$ V" O
  1280. .WORD Trackr_34* a9 u8 ?4 M6 J0 C: B  X; }% @
  1281. .WORD Trackr_35
    ; r1 P' H8 Y6 n) x1 ~
  1282. .WORD Trackr_366 ~! n2 ?2 F8 x7 b- S" \
  1283. .WORD Trackr_37
    1 O% H1 i$ A0 }1 z5 l
  1284. .WORD Trackr_38
    8 s8 _- Q  J4 Z3 y
  1285. .WORD Trackr_399 n# S& I, a$ t1 J* _6 j1 b/ N

  1286. 6 L% U. H  v$ }2 E1 w. X7 g7 E
  1287. ;------------------------------
    & {- U/ h7 K0 I8 w  B6 N
  1288. Trackr_Name_Data
    ' s2 C3 R3 o9 K# D4 r5 Y: H
  1289. Trackr_01 .DB $05,"BGM 1"% v2 K" q1 h  M# d  g- c8 @0 F2 h
  1290. Trackr_02 .DB $05,"BGM 2"& H" T. b% t: P9 A
  1291. Trackr_03 .DB $05,"BGM 3"' y( E  d2 F9 u
  1292. Trackr_04 .DB $05,"BGM 4"" x# q# m& X1 @( W5 V" Z) F
  1293. Trackr_05 .DB $05,"BGM 5"
    % @6 Q: R( i! ]3 V$ I
  1294. Trackr_06 .DB $05,"BGM 6"
    # ?) D, c0 j& a1 i- I
  1295. Trackr_07 .DB $05,"BGM 7"
    " ~$ M$ b0 ^1 I. {2 m0 C: ], l
  1296. Trackr_08 .DB $05,"GREAT"
    - l. t& K& m. Q3 o$ v0 V
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ( ?$ s& }! V9 B$ D8 m
  1298. Trackr_10 .DB $08,"BOSS2BGM"' s! U$ a! E$ f9 \! q
  1299. Trackr_11 .DB $07,"P CLEAR". K) f$ S- R" B2 q4 t7 }
  1300. Trackr_12 .DB $07,"A CLEAR"
    ' e  D7 W( N4 `2 V4 m* Q
  1301. Trackr_13 .DB $04,"OVER"
    8 n; g, y2 N% \) D3 u
  1302. Trackr_14 .DB $06,"ENDING"* f& p6 k9 P! n& p8 ?8 I6 ^7 S2 N/ N
  1303. Trackr_15 .DB $04,"SUTA"
    ; Y  @" P" a- v4 Z, F
  1304. Trackr_16 .DB $07,"THUNDER"+ m5 ^1 G  Y" v& V' M
  1305. Trackr_17 .DB $04,"SHOT"
    5 m- V# l- @$ f0 Y3 v* G
  1306. Trackr_18 .DB $05,"LASER"
    3 j/ |4 n# ]! s; u
  1307. Trackr_19 .DB $06,"SPREAD"/ l' E7 v3 F6 H0 e- I/ ^) @# r
  1308. Trackr_20 .DB $04,"FIRE"
    ! d( t! s/ d, j0 c$ u4 c8 D
  1309. Trackr_21 .DB $06,"B SHOT"5 s0 E4 R/ {# y$ s
  1310. Trackr_22 .DB $08,"T DAMEGE"
    & G% D1 n0 M8 ~: U5 b3 K' W7 a
  1311. Trackr_23 .DB $07,"HARETSU"7 G" g: ^; W9 U( ?" u7 o
  1312. Trackr_24 .DB $05,"T OUT"- _, \# w! @7 e$ I* o% V
  1313. Trackr_25 .DB $05,"Z OUT"
    + r7 a5 U$ f" [* [0 w
  1314. Trackr_26 .DB $05,"A OUT"
    , D( R. `- j0 H# n4 z
  1315. Trackr_27 .DB $04,"ROLL"
    6 G' Z. i0 b% u! V2 |) F% r" b
  1316. Trackr_28 .DB $06,"APPEAR"( C: b, E; ~2 s
  1317. Trackr_29 .DB $05,"POWER"
    8 J# [! E" ?- B; \! o
  1318. Trackr_30 .DB $07,"BOKK BK", q4 ~9 O$ T8 p; N( C
  1319. Trackr_31 .DB $08,"BAKUHA 1"% @5 ]* F6 a& p6 @4 t
  1320. Trackr_32 .DB $08,"BAKUHA 2". E. p, B9 X  B. O& Z: h) k) T
  1321. Trackr_33 .DB $05,"ARUKU"  }0 \) }: x0 h( X7 v
  1322. Trackr_34 .DB $06,"JIWARE"
    & j2 C, }2 L: l
  1323. Trackr_35 .DB $05,"SILEN"
    . \5 M1 d8 R: K5 u$ e
  1324. Trackr_36 .DB $05,"P 1UP"
    + s. Z5 y/ \( r: u$ P3 W2 M  S$ j. l
  1325. Trackr_37 .DB $05,"P OUT"( t) H0 A) z, f" _  I/ x6 m, Z4 g
  1326. Trackr_38 .DB $05,"B OUT"
    ! N. O3 B' N6 u; z, M
  1327. Trackr_39 .DB $05,"PAUSE"" l/ O; Y# p; u

  1328. 1 Q/ j6 Z. R6 h) |4 O" [
  1329. .ENDIF
    2 ~, V, D$ d0 Z- q+ h

  1330. : L8 k$ l- `3 o8 f- _* ~! ^2 t
  1331. ;------------------------------6 L: h, I% p9 _
  1332. Static_Text_Title_Data;静态文本数据
    ( A$ u: V* ~! }2 f; O
  1333. .DB 127 r" @# @1 F  e! q+ j
  1334. .DB "SUPER CONTRA"
    / A6 E. Y. z# I2 s# r
  1335. Static_Text_Author_Data  j5 E8 w/ U- S( j3 t' t$ g
  1336. .DB 239 ]' F/ A- Q; t9 ]0 _
  1337. .DB "EXTRACT BY FLAMECYCLONE"5 R, T; k) ^* I  Y6 ?
  1338. Static_Text_Date_Data
    : i: G7 S& d/ o; L: Z$ F
  1339. .DB 102 b  w7 q  N# V3 S. V" i
  1340. .DB "2023.07.11"
    ) X* G! ]& m0 m/ d0 G( z0 {* h  n9 j

  1341. , e8 y  e! b& a! ]
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    ( D: u+ _" R( ~( ]# B! }
  1343. .ORG RESET_ADDR
    0 q7 `, d  J3 H, _# `& I
  1344. " t4 p( O0 K8 [1 B/ j3 O, U

  1345. # g0 v7 p' H- R; n0 q
  1346. ;==================================================
    ; l1 s5 I+ h8 Q, ?
  1347. ;切到主程序bank
    4 H6 w" D. ?" g' q9 J
  1348. SwitchMainBank
    ) B3 L$ @1 d& `6 v7 D" \* _
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK& @4 x  p1 f( p
  1350. JSR SwitchBank8000
    ' T! G' p$ W  m" G! _" \& i) T
  1351. RTS  o/ e2 q7 r2 O4 X. U9 D% ]) Y* g/ [
  1352. : s+ c7 k. R  U" P
  1353. ;==================================================
    & D# ?$ F# A9 p& k8 ~" q
  1354. SwitchBank8000;切换bank到8000-9FFF; H1 Z4 g8 e9 [
  1355. PHA. v) {9 ?6 C( }& L( o3 P
  1356. LDA #$06
    7 Z# t; [. q+ }/ c( I5 u6 {
  1357. STA MMC3_BANK_CTRL4 K0 \6 s( i" I3 m( Y
  1358. PLA+ x% `* F2 @% M) Y$ W
  1359. STA MMC3_BANK_DATA
    & V8 l1 `, K$ P7 [; T( j; p3 s
  1360. RTS( g! B; A# Q- V9 j; |

  1361. , A# b% ?. e1 [1 @& a' G
  1362. ;==================================================
    - G% o) _* N8 A9 r$ Y( V
  1363. SwitchBankA000;切换bank到A000-BFFF
    , P2 W! ^. f0 H  }7 ^
  1364. PHA
    + u$ t% }4 g4 n- W5 p; h
  1365. LDA #$07  Z' f# G. F. H# `6 A, J
  1366. STA MMC3_BANK_CTRL
    + [8 b$ z9 i. W
  1367. PLA
    ; S/ @' w! \4 o8 D5 u
  1368. STA MMC3_BANK_DATA
      Q% L- U. v: Y' o7 x3 @9 {
  1369. RTS
    3 ?* f1 ^) o- u4 X3 \6 [. C" l

  1370. / F& h+ \4 t: R( J) b$ F$ ?
  1371. ;==================================================4 E, H2 F3 _# s& g5 m6 h, P* P( U
  1372. Sund_Bank_Init;音乐bamk初始化
    , N5 Z; E! a3 o* m( `1 V/ k
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    # H& W2 ^: r0 V. @$ t1 _3 B
  1374. STA Music_Bank_8000
    9 L. E* o5 p$ g3 }, G/ F
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK8 C" ~9 X, r/ ^5 P: G, ^& x* ~
  1376. STA Music_Bank_A000- m4 G3 W7 P5 ?, b
  1377. RTS
    / E; Q5 X6 |* g7 {! x' f3 O. q

  1378. 0 e7 t' w. Z3 g1 j$ F
  1379. ;==================================================  @  ~( B- Z, _  N/ H
  1380. Sund_Bank_Set;切换音乐bank- B0 F6 l: W6 }8 a4 N
  1381. LDA Music_Bank_80003 r# K1 T$ K" T% f
  1382. JSR SwitchBank8000
    . |2 f- z1 Y3 [4 u0 b  ~
  1383. LDA Music_Bank_A000
    / G5 u! \6 F& @1 h; x: E. i% V2 {
  1384. JSR SwitchBankA000- G+ v9 q( B' B1 T
  1385. RTS1 j- o9 z+ o4 a5 D# @  V4 P  ^+ j
  1386. + y. P1 X' i) ]  N, \% d( l1 ^; W7 |
  1387. ;==================================================
    * A. X. ^+ Y3 {
  1388. Sound_Init;音乐初始化2 n4 A! z1 K+ n% n
  1389. PHA1 Z1 {8 U9 B4 \5 n9 @8 W- L
  1390. JSR Sund_Bank_Set
    9 F; `- D; v( X8 G0 c3 R( M7 I
  1391. PLA
    5 V) C- h# D2 W  \) Q
  1392. JSR Music_Init_Addr
    # p" z" e$ r9 e( Q9 \9 Q& K
  1393. JSR SwitchMainBank7 d. s6 v9 a+ Y
  1394. & o3 B$ F( P3 p2 d# _0 k
  1395. JSR Music_Bar_ReSet
    6 h& Y$ }, n2 y
  1396. JSR Time_ReSet
    % g  J2 Q, `9 H+ w: N
  1397. LDA #$00' Q" l9 {  }5 R# ?7 W3 j
  1398. STA Music_State
    " e7 D$ w% ?# p. z: B4 l' q/ i- u
  1399. JSR Music_Stata_Show6 B1 g0 M1 q; m, _# A
  1400. .IF Track_Name_Pos
    : B4 {; ?( V! Y4 A9 L
  1401. JSR Show_Track_Info; O: ^8 u3 s: y  F! @1 m
  1402. .ENDIF# `' Y! N- W  }% u1 ?# `; ]# `
  1403. ! [! \+ h( D4 K
  1404. RTS
    ) j( i8 _# e# V
  1405. $ X& I4 \6 l, v, z( V! c- B
  1406. ;==================================================1 B% r1 \% W0 X. ]$ R8 X2 Y
  1407. Sound_Play;音乐播放: O* ]  i2 ]7 v/ B# |/ q; }
  1408. PHA
    % L* q+ U8 g& l5 I7 D
  1409. JSR Sund_Bank_Set$ {3 B3 G* Q7 |. [7 c
  1410. PLA: Y& o8 d: `, }- c
  1411. LDA Music_State
    . G8 ^+ r+ M  [. @# i: Z$ M% F
  1412. BNE Sound_Play_End5 ^  b2 G/ L3 D, B; ?5 e
  1413. JSR Music_Play_Addr
    6 F1 g6 c3 j7 ~4 e+ Z
  1414. Sound_Play_End& I- s4 c/ x, o5 K9 N6 z, F+ ?
  1415. JSR SwitchMainBank
      V! q* w; v. v+ U1 P6 S
  1416. RTS5 z- A& E$ U, Q& e3 m) ]1 j
  1417. ; W# S6 F9 c, f; t+ d0 i4 }% s2 a
  1418. ;==================================================* x) N3 M: I1 b& n# x; \# Y
  1419. .IF Music_Reset_Addr
    5 U6 K) p+ M, ~8 T4 O5 h3 n9 [; i+ |' n
  1420. Sound_Reset;音乐重设(如果有的话)
    " c/ `0 L9 E# A( t2 s5 [( A
  1421. JSR Sund_Bank_Set
    / J# n( E& H  A- C
  1422. JSR Music_Reset_Addr$ {" X8 ?; e# M( A/ M
  1423. JSR SwitchMainBank
    / _) r; a) H- |1 G% a- j6 n( Z/ ^% c
  1424. RTS
    & y: R6 m$ w# t" q+ ~
  1425. .ENDIF
    ; p5 d/ T! \7 {. C' K7 L4 b

  1426.   F8 d6 X7 w; o$ I4 [
  1427. ;==================================================
    " ?1 B# I3 `" l: F, o$ P6 d( X
  1428. MainLoop;死循环
    ; o; j* G6 M& T; Z/ U
  1429. JMP MainLoop/ `2 V$ }9 S, h4 j; S* b. [) F
  1430. 7 S) b7 T; i, Y8 x* _
  1431. ;==================================================
    5 W2 i0 d  _* ~4 }
  1432. NmiProgram;Nmi中断处理
    * ]7 \/ j- d5 j5 e$ O
  1433. PHA
    ) h- g* x- D, R" X
  1434. TXA: X# f3 }- q8 c; W( L2 L2 V9 j
  1435. PHA( U& F# O5 E8 M4 g6 T, g
  1436. TYA
    / v# S+ H5 P: _7 L1 d
  1437. PHA
    # j7 a  b5 T! e' M' `

  1438. ( ~" k2 N& D* Q. H' K9 x& r
  1439. LDA PPU_STATUS
    7 C+ Z2 J! Q' O" V. A5 q
  1440. LDA #$000 T! m: r+ X' c: [0 h8 D6 t
  1441. STA PPU_CTRL, d5 ]- P# Q" m7 o! r. g- ^

  1442. . ]" p# R: b# Z- j4 r
  1443. ;切换主程序bank1 r- f2 Y+ R/ a, m
  1444. JSR SwitchMainBank; m9 c! }+ e9 A# L9 y- t5 y0 U
  1445. $ l: M# D. N: J9 ^4 G
  1446. ;NMI处理
    + h: M$ E8 H7 b  C
  1447. JSR NmiProgramProcess
    7 u, |. i6 g6 H+ B( A9 R

  1448. ) ^" l& R6 U: W* z% v
  1449. Nmi_Proc_End3 u5 z0 R+ U, u$ q. N  r/ c
  1450. PLA
    # `  n" s$ @+ d, @; k$ a& B3 B
  1451. TAY
    6 W& |" O; y% W% p
  1452. PLA
    9 P+ s0 r* K8 v5 }( m/ |
  1453. TAX# v$ l  O( E" e
  1454. PLA
    9 {- Z% }3 k5 X
  1455. 2 Q8 m/ m$ R2 `# F) ?
  1456. RTI* Z- O- e4 o  P9 ~( n
  1457. 5 I( t% w) Y: E9 i5 e) \
  1458. ;==================================================% q% g8 @6 j, r9 h: e  W
  1459. ResetProgram;重置中断处理( J2 X5 \* `& r. k
  1460. SEI
    2 e9 L# J: z( ]0 A; {! g
  1461. CLD
    2 s, ?# N1 z& B4 L/ s
  1462. LDA #$00
    ) D; A) i2 P1 K- N9 X' _
  1463. STA PPU_CTRL* [, [) ~9 r) p* |4 C% q  Q
  1464. STA PPU_MASK2 `+ j2 Z; f, L. G
  1465. 1 U, k; i/ ]; f$ \0 v$ x
  1466. JSR SwitchMainBank& Z* E! P( g1 _0 V
  1467. JMP ProgramBegin8 ^; d) C5 E6 y- L! f
  1468. 1 c3 N0 p! X8 J- ?) g' q
  1469. ;==================================================
    / x0 M  f+ R5 E
  1470. IrqProgram;Irq中断处理( _- G, I1 ]# P7 |" X
  1471. RTI9 n8 q/ V5 c$ S0 U  \! u2 T
  1472. 2 X: o6 F' T7 A, N* @3 y; K
  1473. .IF SOUND_BAR_SHOW_ENABLE
    + a: [3 d* l- m- a, j
  1474. .ORG $FF80
    4 i4 m6 Y( \6 o" I! F
  1475. STA $4000,X$ c) j( x9 r6 ^8 |! l
  1476. STA Sound_Bar + $00,X% d, S+ z7 K6 \; F4 }
  1477. RTS( \" Q$ m" w4 Q, K2 r
  1478. 6 Z3 [8 L5 k% l' r) y; ~. r$ ?
  1479. .ORG $FF88
    ( F4 V! C- Q- c6 R+ r
  1480. STA $4000,Y0 }9 T* Y( G# |0 ~7 {$ D4 i
  1481. STA Sound_Bar + $00,Y8 |: H5 C  ~* n8 i% E% u# G/ |- x
  1482. RTS1 A6 f' d9 k0 {- E! v+ I1 V, t

  1483. 0 _5 o' }" m" M$ E7 o
  1484. .ORG $FF90
    0 V! j7 S' k! u+ h
  1485. STA $4004,X0 @; |: ^) r( U. @& w: V  r9 I3 a! o
  1486. STA Sound_Bar + $04,X
    2 T9 H9 W9 ]9 o7 ~$ ^
  1487. RTS
    & i2 a4 n! m) t/ @

  1488. % u1 E' P8 _/ ?  _5 Y8 W' O) E
  1489. .ORG $FF98
    / @, v  I8 S( G! ?9 z! z
  1490. STA $4004,Y. \3 Z. C5 ?. H' n/ F
  1491. STA Sound_Bar + $04,Y' ?5 Y# l( ]" S  ~0 D
  1492. RTS
    " {( t8 Q5 A2 n& c5 g- @; U4 G

  1493. $ `- N4 Y/ Y3 M, g* M& ^( Z. }9 N
  1494. .ORG $FFA0
    8 }( Q- z7 @# L3 r& m5 [* o- a
  1495. STA $4008,X
    ( {4 k; Y$ w; t% q
  1496. STA Sound_Bar + $08,X2 c0 _. J5 b7 E! X8 s
  1497. RTS
    , l; H5 w! T2 ]' A
  1498.   C8 r& ?( m3 i7 E0 e
  1499. .ORG $FFA8
    ; z4 [8 n( u( D
  1500. STA $4008,Y2 P5 U; l1 b2 ^; b! v* F3 F! h
  1501. STA Sound_Bar + $08,Y3 s/ b6 C$ n9 u" m: E0 `. f
  1502. RTS/ ~( V9 O2 T7 I" A' K
  1503. 7 Y+ L* }' g6 J5 A* F; r7 b
  1504. .ORG $FFB0
    ' S: V8 N( y# C( N
  1505. STA $400C,X
    8 t3 X7 C( r9 x- ^) k3 J
  1506. STA Sound_Bar + $0C,X  d+ U& l1 W9 m% @' e* z
  1507. RTS
    0 r- k+ v; \; O

  1508. 6 N& ~! a6 c' {8 u/ _% @3 i
  1509. .ORG $FFB8* s& C# `, w0 b4 j! i: `
  1510. STA $400C,Y
    ; R2 L) F$ f9 C7 N0 W
  1511. STA Sound_Bar + $0C,Y
    & b3 B0 n9 A6 n* t5 E
  1512. RTS! ?+ C! K# ^0 W' j6 f

  1513. 9 q. J" ]" R! h  g! G* ^5 L1 P
  1514. .ORG $FFC0, ~( y, b& x1 t* o
  1515. STA $4000
    2 f1 ^6 H  `- c3 z) A
  1516. STA Sound_Bar + $00, x! h- o( A& Y, i4 _( q
  1517. RTS
    / x; T6 ^1 D- i5 J$ I; N

  1518. 7 f( t6 E; c2 y+ W5 a7 c
  1519. .ORG $FFC8
    9 n: j% b$ J& j
  1520. STA $4004
    ( E: d5 u; D; ~- Y
  1521. STA Sound_Bar + $04; A* X5 B! }" N
  1522. RTS
    $ [+ J/ y6 E4 B5 r" _% V
  1523. ) x- p- ~8 p6 e  f# o
  1524. .ORG $FFD0! A' O* U  C/ }4 a9 I# R6 Z
  1525. STA $4008
    & ]$ u/ q/ L  w, Q  ^
  1526. STA Sound_Bar + $08
    ( q7 {" e# o% T/ d2 F
  1527. RTS
    2 u- I8 r1 [2 n4 ~; J, a
  1528. 2 v) Q2 Z) n) u  A' d# `) R
  1529. .ORG $FFD8
    ; S6 W; r: P/ F0 a
  1530. STA $400C
    & w, C4 A7 T/ Z( j6 T7 y
  1531. STA Sound_Bar + $0C
    + J! m! M( }8 }' ]( f
  1532. RTS
    . g! i" z0 q; k* ?

  1533. : E) x# ?. n* @
  1534. .ENDIF
    " ?: u" I% k8 Q( \0 y0 R# w* E' G

  1535. " _7 r4 W( }: F* x
  1536. .ORG $FFFA/ W3 I* U) N0 x, r/ F. n/ H
  1537. .WORD NmiProgram
    / o* C; b* @# i* v; Z: I0 ?# y
  1538. .WORD ResetProgram
    5 r2 W: Y3 ]5 E7 ]9 ]
  1539. .WORD IrqProgram
复制代码

7 m# |9 }: O" ?. c9 d5 Q: Z, k! N; w$ e8 o: u. i/ {/ a
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1192 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3176 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 06:49 , Processed in 1.158203 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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