设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 7 V- P  ?5 b3 O& X; b, t) t3 g

7 p; l5 s8 v9 |. m, K2 W1.魂斗罗
- p6 C- i. |/ s2 ^2.超级魂斗罗( m5 L9 ~8 D* @7 u
3.赤影战士
% ?+ \! r# k+ Y4 i. c3 ^4.忍者龙剑传2' k3 w% H# C; x
- f) x( L# a! ?$ \

0 S# K+ {% K( G# |. j
: w( X5 b5 Y% k' g. x: g9 `2 W$ }" w" S( N6 g
源码:
  S) `! F; Z0 b$ S
  1. ;[FC音乐][播放器模板]
    # u. n: N( S+ [& X# Z) ~: e
  2. ;FlameCyclone 20230710% p; ?( u* z1 l+ i3 D
  3. & V2 v" T. m. d# m
  4. ;文件头8 F4 Y# I( i8 z. a8 M
  5. ;======================================================================
    5 M/ u8 o( u6 c7 n4 Q
  6. .INESPRG 4                                              ;16KB PRG 数量& T' e# T: V9 n, P4 C1 y" b
  7. .INESCHR 0                                               ;8KB CHR 数量
    # D0 D- q5 N6 E$ l
  8. .INESMAP 4                                                   ;mapper 4( f4 l: C9 [+ i$ s  J; |6 P9 X
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直- `( ^! H7 y% W  P8 {3 E

  10. ; g2 ?- ?" Q2 u5 g6 b* y
  11. ;==================================================
    . J3 U# m+ I8 D; g
  12. SOUND_BAR_SHOW_ENABLE       = 1
    " S) ~( [+ E2 R  @+ [' ~
  13. ;==================================================
    4 F. k' O0 K8 {7 {4 r/ B8 |& u1 ^2 ^
  14. BANK_DATA_MASK              = $07
    - G- y! d5 D6 u& g5 W% G0 ~& J
  15. ;==================================================
    ; G) l0 G* L- E" T9 B% P
  16. SOUND_DATA_BANK_0           = $00  G0 h: x/ s* W( e# J
  17. SOUND_DATA_BANK_1           = $01
    / L$ P. V6 w( z. k/ V& V$ p
  18. SOUND_DATA_BANK_2           = $02; _' M, S) S( B: n" h3 |) W
  19. SOUND_DATA_BANK_C000        = $067 J( E3 R7 ~  T! x' l. c2 Q  y
  20.   V4 b* B9 o7 q* k$ u" D4 Q
  21. ;-------------------------------------------------% d1 U& x7 z8 k" `  Y8 J
  22. CHR_DATA_BANK               = $047 u& h( c9 @; q9 F" w
  23. CHR_DATA_ADDR               = $A000
    5 C! n8 V5 w3 y. L* S) f; X
  24. ;-------------------------------------------------; l8 E5 `% D6 u5 t! v" ?
  25. PROGRAM_BANK                = $05
    0 d- r/ K; \" m/ [: w7 w
  26. PROGRAM_ADDR                = $8000# m8 M* |" X3 ^3 w! T9 S* Q
  27. ;-------------------------------------------------
    . @1 H! I* V/ K0 a& Q5 b
  28. RESET_BANK                  = $07- c+ L  P: k: F& ]
  29. RESET_ADDR                  = $FE00. e' q; e' a' `7 _* @& m8 o
  30. ;==================================================
    8 W3 [# b$ F  ?! G
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    ! M8 R9 F- ]7 C3 O2 h' C8 n! W
  32. Music_Play_Addr             = $813C ;音乐播放地址' i. r. d2 n$ g
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址2 D8 r* G" O; H0 M* W
  34. ;==================================================- H+ P7 z0 w7 n: Q
  35. Music_Song_Total            = 039  ;全部曲目总数" z4 j" f3 W" O0 v1 _6 t
  36. Music_Start_Song            = 007  ;初始播放曲目, c" f9 `4 h1 |
  37. ;==================================================9 b2 v) \9 _* I1 X
  38. # D# `7 ~6 `9 O0 G
  39. ;==================================================4 O1 A1 ?# c$ w# ]  R
  40. Title_Text_Pos      = $210D ;标题文本位置
    + e/ o! z7 A: ^, s' Y
  41. Author_Info_Pos     = $2284 ;作者文本位置% q, S) M  ^$ N4 ^) I
  42. Date_Info_Pos       = $22CB ;日期文本位置
    0 U  A* `) j$ ?) j  `5 k4 f, q
  43. ;------------------------------
    ) [+ T* B2 w9 w: M$ m- k9 k, i
  44. ;------------------------------8 h7 a1 z0 w% ~' ?
  45. .IF SOUND_BAR_SHOW_ENABLE
    6 E  B0 X1 ~0 s" V- `8 E
  46. Play_Index_Pos      = $21B3 ;当前曲目位置- ~1 }  V! l. x2 X
  47. Play_Time_Pos       = $21F3 ;播放时间位置: n, d2 I0 {* [+ S, @4 r. ~0 U
  48. Play_State_Pos      = $2233 ;播放状态位置
    / B2 x! k# @4 r; }% i
  49. .ELSE
    3 s5 W: z6 s% g
  50. ! ~, T. K  b8 l) R( n1 p) y
  51. .IF Music_Song_Total > 993 p+ U5 `% n3 q; b( k3 B; ?
  52. Play_Index_Pos      = $21AC ;当前曲目位置" d& k+ J) u: {0 s0 @
  53. .ELSE
    6 f2 p6 L  G+ R! Z$ c7 w

  54. ( ~( S8 n! f+ L6 a+ b# E+ t
  55. .IF Music_Song_Total > 9
    : U5 M' a1 k8 W
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    0 U! B! D7 n. a5 t: d, l; G" p
  57. .ELSE
    / S. {2 F' a* d- C, i
  58. Play_Index_Pos      = $21AE ;当前曲目位置. B5 m  G+ x+ w3 y
  59. .ENDIF. a% Z( _7 w( {2 K0 h3 ]1 F
  60. ( O! n" r: @; q# l; {
  61. .ENDIF) N5 S( f1 m) S7 A

  62. 7 G" _) W8 _. j# E- b
  63. 3 g6 e  \+ {% K" h
  64. Play_Time_Pos       = $21EC ;播放时间位置& N/ E4 x; y. M) t
  65. Play_State_Pos      = $222C ;播放状态位置% x$ i- H+ L# Q; ?- e8 Y
  66. .ENDIF
    1 S7 s/ A! o' {8 z$ }* m
  67. ;------------------------------
    . K5 P/ d# {4 q. ?; P
  68. Track_Name_Pos      = $216B ;曲目文本位置4 _5 _* J6 a; i0 D( t2 m! O
  69. Sound_Track_Pos     = $21A5 ;声道文本位置6 T) K" f( r0 Y2 Z# m
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    2 V8 \% w. T( n, ^- A
  71. ;==================================================
    ; Z: h; V% ~5 w, ^6 O
  72. Scroll_X = $00- J7 C8 [, o5 R% i4 L
  73. Scroll_Y = $06
      d7 K" v- M! u( N
  74. ;==================================================; l5 w2 E) I; F! I7 \/ S
  75. RAM_Cln_1       = $01005 q. ]) D0 i/ D6 ]: s
  76. RAM_Cln_1_Size  = $809 O) {) U* w0 [
  77. RAM_Cln_2       = $00E0
    - {- |1 R9 n3 B
  78. RAM_Cln_2_Size  = $20+ X# C! v" R/ P! i, J4 v' ]
  79. RAM_Cln_3       = $00E0- G( {) d/ y. S. d; Q
  80. RAM_Cln_3_Size  = $20' r% X% Y4 [" T$ c" c, {6 ?  E/ ~, t
  81. 7 `9 G5 O  e* X4 c  e" @+ i
  82. ;==================================================0 `! d# x& f$ ?4 A- V
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    % k, Y- K8 f) ~  }2 o6 x
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    $ D; d5 J9 C4 r/ G# H5 r$ L5 w
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    # j  I+ _) v9 f. ?
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    1 V3 ^$ A. l1 M
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    & w  u. R" K( @6 N* v& V" V8 i5 D
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    4 c# V! S; k- c8 F$ D* ~
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    % `8 W2 U: O! q3 ]/ v
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 : J! P1 Y% ?+ i& D& O, `
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    $ H# S! z+ d$ G0 j6 r# ^7 G
  92. APU_STATUS              =   $4015   ;声音通道切换. o" m. Y( G2 y! l8 }+ _, F
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通& `8 e7 v# }; m! w
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通& D8 J2 J* N5 X( y9 U/ P
  95. ;==================================================
    1 O( p( r/ [+ e1 i
  96. MMC3_BANK_CTRL          =   $8000) D9 o% d+ H; m
  97. MMC3_BANK_DATA          =   $8001
    + c4 t* b# }9 ^, t
  98. MMC3_MIRRORING          =   $A000
    - G1 J; }% N1 \6 g/ e* h& q
  99. MMC3_PRG_RAM_PROTECT    =   $A001% P( v% ?- z6 a
  100. MMC3_IRQ_LATCH          =   $C000; A! x2 X5 ^  y! V  z2 J" O
  101. MMC3_IRQ_RELOAD         =   $C0013 Z6 I) V2 q) E: L% W
  102. MMC3_IRQ_DISABLE        =   $E0005 G8 }( k; S( G( N2 x4 b6 v& s3 i' ^
  103. MMC3_IRQ_ENABLE         =   $E0012 g6 Z4 I' p: w7 v
  104. 1 o  m) ?+ l2 T
  105. ;音乐数据块
    0 e* t4 h* c& C; s2 |" z
  106. , X: k" L# l; j/ m( C
  107. ;======================================================================. a9 M3 C" H' U# d9 x& L! w' x
  108. .IF SOUND_BAR_SHOW_ENABLE
    8 W1 T: Z/ b/ i! n. s
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    6 ?& X( F8 g" l0 H
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    ; A$ Z3 q0 C9 B; Z# Z! p

  111. " D0 I/ j, y: l5 {5 D
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK; ?2 A6 h5 w) r
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    : E6 H; W% d3 \3 T8 S
  114. 5 E. S. ~8 g) H; [9 ^
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    & N6 k0 m0 H! W
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    " z6 M; v# O( X- q$ x" |

  117. 6 O/ W) r- D, S( U. H/ [% @) |2 u  G
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    8 z. i' l# p& O
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    0 X, Z. P! K9 A; ]- Z
  120.   x9 |; ?. Q1 J, j' S
  121. .ELSE4 C9 x! k$ B, J4 |: P6 [" h$ f3 a
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    : L+ Z/ E1 T/ e" u0 K6 [8 t
  123. .INCBIN "sound_bank/music_data_0.bank"
    ; U% j# h& Q5 {  e0 S
  124. 9 D; T, J! Q3 U. @* `' A. v
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK2 R2 k0 D; S" J3 Z
  126. .INCBIN "sound_bank/music_data_1.bank"$ b) N/ W" o  m
  127. - ]4 Z: @8 n; K4 o# Z* b; ~3 _: g  n
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK; J; s2 u6 N- h0 B
  129. .INCBIN "sound_bank/music_data_2.bank"
    " L: ~2 Z  R0 b# p4 r
  130. ) z$ x) y3 a" H: s4 |/ d! E
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ; Q! f- h' i- L6 ?$ e0 B
  132. .INCBIN "sound_bank/music_data_3.bank"
    9 \" A2 S4 D4 V* z& A! N
  133. .ENDIF8 p4 x0 y* l# h1 |$ s) [5 j- k

  134. ! r6 `9 q0 L3 q( B/ P. r* {
  135. ;CHR图形数据0 [# [& x# s/ ^: \5 ^( F1 E5 U
  136. ;======================================================================
    ( _# f% w, `- L2 n5 c" D3 ]
  137. .BANK CHR_DATA_BANK6 G- Q: O' D, R
  138. .INCBIN "chr_bank/chr_data.chr"
    ! P- I8 E9 v; z& b+ B4 R) P

  139. - A( l' W6 o- Y* P' ?) L
  140. ;==================================================
    ! s, F6 i9 t  J) b1 r+ V
  141. PPU_Addr        = $0300
    : n: s( E" h4 \. Q2 Y- U
  142. Palette_Addr    = $03C0
    $ U8 t. K- x' k' |
  143. Sound_Bar       = PPU_Addr+$E0
      H0 ?0 o) r) d- p; Q. |, d
  144. ;==================================================, E( ]  }4 o# u5 k: x/ d* b
  145. Palette_Update_Addr     = Palette_Addr+$0D
    2 J& w) A, c0 }% O, G- U
  146. Palette_Update_Max      = $2C
    7 ?' z8 E7 X$ h
  147. Palette_Update_Min      = $211 l" E. t6 t6 A( F4 T: [4 u
  148. Palette_Update_Interval = 60
    1 S  S" A  }& M5 X" R$ M
  149. ;==================================================
    ) Q$ `- n3 P& D0 V; D
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    2 C" C; o; p' b9 f: P( E
  151. Screen_State        = Sound_Bar_Cnt+$01
    : @- L' \$ B9 e# ^% G
  152. PPU_Cur             = Sound_Bar_Cnt+$022 y$ Y; I* A. |' L6 i# }
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03& j$ i7 C. J$ \+ V
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    + q2 k" }. G, O2 m8 G# e7 C
  155. ;==================================================
    - E) q, G0 k" r( F  x( P
  156. Data_L              = $704 h6 I! U3 c& L) I1 ^5 ~4 v
  157. Data_H              = Data_L + $01
    1 f; C, v' h3 E% B. C! u. E
  158. Data_Cnt            = Data_L + $029 f+ Z0 G' f- f, u4 B+ {) a  K
  159. Data_Buf            = Data_L + $037 m1 Y7 _* s) h& d2 j: d
  160. Time_Wait_Cnt       = Data_L + $042 ]; y, V/ F1 @3 W' F: _
  161. Palette_Wait_Cnt    = Data_L + $05
    & W, ]5 S/ p7 N) c
  162. Palette_Update_Flag = Data_L + $06& r) ]# M/ U( ]" b" V
  163. Show_Track_Name     = Data_L + $079 Z/ b4 J7 J- k
  164. ;==================================================
    % B* D0 }$ o; m) q9 y
  165. Key_Keep            = Show_Track_Name + 13 F" F- p  K3 t8 k# S: l4 m  U
  166. Key_Once            = Key_Keep+$01
    / W$ P. Y: H' g; q$ D5 s
  167. Key_Kemp            = Key_Keep+$02
    * o. O2 v7 q/ z3 ]" I( P
  168. Key_Temp            = Key_Keep+$03
    ) Z9 ]: ?2 b+ J/ p4 I2 `: u' n8 u
  169. Key_Getv            = Key_Keep+$04
    , I4 E" K& x9 C) }! C/ Q# k& n4 a
  170. ;==================================================& w# R  ]2 }7 V% z2 h3 u/ c" A4 Z% S
  171. Music_Cur           = Key_Getv+$01% w5 B5 n9 ~$ G* i0 z; j
  172. Music_Last          = Music_Cur+$01; ~1 s" S" @7 n8 [' N
  173. Music_State         = Music_Cur+$02
    $ s6 V( R! A4 r  M
  174. ;==================================================' h/ K& b1 G9 X* Z; ?; q, `
  175. HEX_Data            = Music_State+$01; i' A3 K# r0 U4 n2 k" e
  176. DEC_H               = HEX_Data+$01
    & P2 E. \& G; J
  177. DEC_T               = HEX_Data+$02
    ) D$ B/ Q! y6 t' t- s% t
  178. DEC_L               = HEX_Data+$03" I9 G8 X/ b3 R3 F- e5 l
  179. ;==================================================0 o4 p2 \% ~0 t4 [# o6 t0 K
  180. Time_S              = DEC_L+$01
    * s* \& b0 j% x- g1 G
  181. Time_M              = Time_S+$01. Y6 S0 Y/ t" j$ Q; c9 j9 S
  182. Time_H              = Time_S+$02
    % i' m2 B% w; P4 m
  183. Time_Cnt            = Time_S+$035 E6 ^* z4 U4 o# i! H
  184. 5 D( }( D4 q  x- U
  185. ;==================================================# C; H2 |: n- f
  186. Music_Bank_8000 = Time_Cnt + 1  ?2 a4 {! G) X* a& A7 T
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    : l% ~- r1 _- X7 }% X9 q4 t
  188. ;==================================================# n* J% {( R+ G0 ^

  189.   ]8 g  C8 z9 ]7 S% V* O
  190. ;======================================================================
    , F' T4 B4 A/ p7 _  [/ n
  191. .BANK PROGRAM_BANK
    $ o8 Q( D/ ?/ X! L* n
  192. .ORG PROGRAM_ADDR2 y% i; y1 r# U3 |  e7 l0 G! f, A7 Z: w7 z

  193. ( k& j+ w/ v- |, ^
  194. ;==================================================
    # |/ a" Y6 ?( e+ ^
  195. NmiProgramProcess;NMI中断程序处理% F- F% Y  \. [& B1 ?6 ^' |$ O
  196. ;处理PPU图像/ c5 K% U" D7 q; x$ |$ d" c1 n
  197. JSR PPU_Proc% D5 P/ @* S  b! q8 A

  198. - D; Z+ `" f! G7 N1 A3 Q: t
  199. ;启用NMI中断& U; Y$ d# K$ W& y5 \6 x& H
  200. LDA #$80
    9 {$ i8 E# y) [2 Y$ u& Q! o# S% t: G
  201. STA PPU_CTRL( e2 q3 P+ V3 w4 \% W% n
  202. , ?8 c& K7 o  {! r
  203. ;更新调色板
    # ~+ `' C8 B1 N% J) M: C: n) K3 \' u
  204. JSR Update_Palette_Data3 X% t8 }0 q0 a" t' x

  205. / x9 R3 F5 `- d. h
  206. ;显示时间(缓冲)
    2 K% F* R& `- I  G
  207. JSR Time_Show) U, o( H1 N6 F' [: b+ U5 V+ p

  208.   T; Y  k$ L5 I0 m( S3 i
  209. ;播放计时( a, o1 y3 C+ e4 T" N/ X+ p
  210. JSR Time_Count; |: i6 ~: }/ W; e$ n# c
  211. . q/ o3 d, X1 g2 E6 C  w
  212. ;播放声音
      n2 o5 M$ `( ]
  213. JSR Sound_Play( o  X/ }& l8 n- j

  214. + C' M- U7 E; G) h/ \, w) t0 S
  215. ;切换音乐(手柄触发)+ l& K: l1 [9 ~3 ^" \' b
  216. JSR Music_Switch
    # _$ h1 a: w! ]0 T8 J/ n3 k

  217. 1 l, P2 u. M: }0 t0 B
  218. ;音乐显示(缓冲)
    , K2 s! \% D" g, M; g' \3 H+ ~
  219. .IF SOUND_BAR_SHOW_ENABLE# k5 q0 L2 \5 P
  220. JSR Music_Vision
      y  g( d: M. Z5 i+ |9 }; u5 r
  221. .ENDIF
    ' l: Y( F8 h5 `+ I5 r8 S

  222. 5 {0 ]4 A8 }* T2 m
  223. LDA Time_Wait_Cnt& H) X. I: k0 m4 ?
  224. BEQ NmiProgramProcessEnd, J, z6 B3 @1 Z" n0 m3 l$ j! V0 z
  225. DEC Time_Wait_Cnt3 b, h! D. x) k8 V/ z; q) Q, Z
  226. NmiProgramProcessEnd
    4 h6 B- G6 f" U6 Z$ Z+ t: T
  227. RTS, ~  t* [2 b6 x" j8 W  X

  228. 0 E$ A4 {5 x  G
  229. ;==================================================
    . o8 {7 x" r& C
  230. ProgramBegin;主程序4 C  U# [4 |. ]  v
  231. LDA #$00$ Y: n- l2 L' V, d+ V' V" E" G
  232. STA PPU_CTRL
    / H0 O% [$ [$ K2 q6 ]8 |
  233. STA PPU_STATUS7 u, D# ~" m0 Z7 a% m" A6 N
  234. STA PPU_MASK
    * M3 @% u9 W' a  f% ^; }
  235. STA APU_STATUS; j7 ~* P, m8 c. t
  236. STA PPU_SCROLL
    + W7 o7 d2 ~% B% E7 I! v
  237. STA PPU_SCROLL: V+ `* ]) K' T  X+ C# m
  238. LDA #$C0! d, k9 L% X6 M& w
  239. STA JOY2_FRAME6 r3 w- V/ `6 r5 c* i

  240. 9 i- w! c" e8 a4 H0 P+ e. ~9 L" y
  241. LDX #$FF" v2 d- C: T3 j( Y; x& q2 e5 {
  242. TXS
    # V9 U) l1 p1 q; u. k
  243. LDA #$00
    ! }# F3 p' P1 m6 g/ I7 q/ v
  244. STA PPU_CTRL7 \7 V1 z/ }7 ^6 V( V9 q
  245. STA PPU_MASK
    + c" N$ m; h' ?
  246. STA MMC3_IRQ_DISABLE
    3 @/ Q0 E6 B! J8 g
  247. ! A, [, p1 l8 ^1 p+ F6 M
  248. ;==============================2 S, E4 n4 i  _: ?7 V: U7 \$ d, @
  249. ;调色板清空! e3 x) h$ d- `* \& y  r
  250. LDA #$3F- }  `4 Q$ p; z9 Q: g, j3 A* E
  251. STA PPU_ADDRESS& P- f: k' _! L4 y
  252. LDA #$00
    $ F2 G- M$ C0 \3 a( H: O& x- I
  253. STA PPU_ADDRESS
    ( X& [( I; a( X6 H- w
  254. LDA #$0F
    " G+ H2 G4 E5 a# m' p, J
  255. Palette_Clear
    4 \4 M. ~  ^) d, c5 N2 I, J
  256. STA PPU_DATA( g+ y+ [/ g5 b) N. n/ s+ m' q
  257. INX5 l, ]7 u1 u# w8 K0 ?, a
  258. CPX #$208 c1 I: C! M8 u
  259. BCC Palette_Clear2 K4 Z1 S- h; X, q4 z6 I0 j1 ~
  260. LDA #$00
    ' f# B! a$ }/ E
  261. STA APU_STATUS
    9 \+ D+ Z) u) m& U  s
  262. ;==============================( J% S9 z2 [8 V8 v3 S& {3 X$ Y
  263. ;初始化背景调色板
    . |! c3 ~% V4 ]" Y% Y& o# k
  264. JSR Set_Palette_Color
    ; Q2 k, h3 H2 K/ L  M* q( e
  265. JSR Set_NameTable_Attributes- X) I6 J& ^" y6 d

  266. 4 e+ F! K/ n! C4 o
  267. ;==============================8 \3 R+ N* ~. h$ l3 U
  268. ;RAM初始化
    ; f+ n/ D$ U) Y1 H* f* ~/ C& e7 ~
  269. RAM_Clear_All! M6 b4 d: a2 `: T. [0 N8 t
  270. LDX #$00
    + f' d) a% f9 j+ H; s) t
  271. LDA #$002 z" ~3 l+ x* a7 n( d: ?
  272. RAM_Clear_All_Start
    7 s. w7 O  |3 G+ n, J
  273. STA $00,X
    ' q- P: G/ i; ]+ d& o
  274. STA $0100,X
    * Q8 U* K* R1 ~" b6 ^4 u2 H% r6 s
  275. STA $0200,X7 b, Q) F2 F# h2 Q5 g: }2 u" F
  276. STA $0300,X
    . `, t8 H4 Q6 ~7 e! U& w; |
  277. STA $0400,X3 f9 [5 q" Z3 T# r  n4 T  C3 q; S
  278. STA $0500,X
    / [' S& V* W2 [$ Q9 S* e
  279. STA $0600,X$ x  \' R, E: k% C/ s+ C
  280. STA $0700,X; q  E% b2 \" @1 o
  281. INX/ W& }. n( z, P% J
  282. BNE RAM_Clear_All_Start
    1 K0 n9 G5 L' ~. ^0 D' J
  283.   y! h- c) k( j+ c2 i- @& z
  284. JSR VramInit) Z3 L" B' v7 m% B) Q9 F
  285. JSR Init_Palette_Addr" M, b4 y' @0 f1 [0 U% K
  286. " W! Q7 P. T9 t" n* Q( O
  287. .IF Music_Reset_Addr7 e# P5 W7 j9 Z9 l
  288. JSR Sound_Reset2 A8 V5 {; k% T. O  F4 s
  289. .Endif
    9 n' U/ n) V# _% P0 A' D9 d& m
  290. 1 H* ^- A. p6 g/ ~
  291. LDA #Music_Start_Song-$019 H2 c9 G4 c- j, E6 n+ A6 I. W5 X7 p4 k
  292. STA Music_Cur
    / K! ^: Z! M" r, j+ W$ N

  293. 3 J) Z8 m+ ]4 v# O1 C* o0 H4 J
  294. JSR Show_Music_Text; Q* a' y- S- D
  295. . |- A( j, B3 o) \* A4 R) B
  296. .IF SOUND_BAR_SHOW_ENABLE3 e9 S3 m6 U2 X, F
  297. JSR Sound_Bar_Text_Set( E# N/ k1 B# @6 Z7 }( ?
  298. .ENDIF
    & g: j- d* B) v0 Y

  299. ' z, X& U' I# @, ~* g
  300. .IF Track_Name_Pos/ ^5 F# Y1 S0 o( e# R, d' s$ M
  301. JSR Show_Track_Info! N% \& V# v( [% `+ }
  302. .ENDIF1 k& ?+ B2 `1 j' w5 C: J
  303. 0 [6 I4 B8 P: i9 O
  304. JSR PPU_Proc  }2 l; A# d8 A( Z% o3 R0 F& }
  305. 5 v8 F5 o3 Y5 J5 Y- e% ]9 Y0 i* K
  306. LDA #$0E  C9 ~3 s2 e% a2 E$ }
  307. STA Screen_State3 p; L+ M3 m% |% f# a

  308. : i5 i0 V3 I- D. }  R6 ]( Q, b
  309. JSR Sund_Bank_Init
    1 j$ h( x7 x% C' C( f  O. H. D& {  x
  310. 4 r/ c0 x0 V. {+ E6 w3 `8 n/ S. x
  311. JSR Music_Show+ E7 `- \- B9 O3 C
  312. JSR Time_Show
    0 D6 u( ]. Y# z; x% y
  313. JSR Music_Stata_Show
    ; w7 |* m+ M3 q6 q8 E: i+ H/ f
  314. JSR Time_Delay
    6 P0 ~0 s  R% I. i
  315. 7 h$ u- d' P8 h0 ^" e

  316. ; h$ p. O, L! E9 V5 X
  317. LDA #$80  B$ t& F' `' }) L1 a* r/ n* t
  318. STA PPU_CTRL
      t2 W0 f- M1 I0 u, s

  319. ' ^) N" c' x$ L! a, x
  320. LDA #$209 [, _  [  K( a  e2 r
  321. STA Time_Wait_Cnt
    9 u0 T* k5 ^& Q! r8 d3 _0 |
  322. ' Y8 b0 S* T. F+ Q" w
  323. Wait_Time_Over) A- m1 ^. @3 \5 ]! w
  324. LDA Time_Wait_Cnt
    * y+ @0 m  N: w
  325. BNE Wait_Time_Over6 w& n2 @8 r3 W+ _

  326. & b- f- i. {4 ~: X5 l# I3 s
  327. LDA #$1F2 p" G  w) X. }1 K
  328. STA APU_STATUS) N. a1 ^" d. C! E& I2 c. k
  329. LDA Music_Cur1 Z0 Q% R4 T; u* W/ @
  330. JSR Sound_Init
    , d4 b  u9 \: k8 d5 Y
  331. 0 l7 p6 M* K0 g7 U  N+ G% \
  332. JMP MainLoop& |/ R4 s9 q: N! }- y* Q6 Z
  333. " X5 j1 {1 b) a
  334. ;==============================0 H- N' o! ]+ N$ L: C. q* n
  335. Time_Delay;延时等待
    * M0 a' d' J" Y: T& Y1 {% L- n( A' b
  336. LDA PPU_STATUS1 {! K# b; ~# G; l( w) e# {1 f
  337. BPL Time_Delay
    8 b1 u1 e" {$ X% [3 n- l, |. a
  338. RTS
    ( r) r! t+ M4 b- Z# Z$ ]4 Y- p

  339. 5 j% J" g- G& L* y) ~) r
  340. ;==============================% q) J: q4 b/ c6 D8 B5 g
  341. VramInit;初始化图形内存- }+ A% \4 E5 l0 @5 s9 B; x
  342. LDA #CHR_DATA_BANK' S9 |7 V5 B1 L( x- O; j
  343. JSR SwitchBankA000
    * |# A; j" D% X- W1 Y9 j' x
  344. LDA #LOW(CHR_DATA_ADDR)
    0 e3 @0 Z) A9 s+ B7 U3 y" c0 S0 C* I
  345. STA <Data_L
    0 `% \& Y4 M) `  w. u1 [! c
  346. LDA #HIGH(CHR_DATA_ADDR)
    . I& u/ Q: n" M. ~5 W6 {
  347. STA <Data_H9 a& z3 m- y( O% Q* u" z$ {* M7 A# m
  348. LDY #$00+ J/ K6 l/ F, n" `* N2 l
  349. LDX #$20/ s- F: u# m' v+ R' p: c5 D8 Z* B
  350. LDA #$00
    8 g$ D5 J5 o9 U+ x" q
  351. STA PPU_ADDRESS
    , o2 d4 q# v; [* a  w& Q
  352. STA PPU_ADDRESS
    # h) V0 K( o7 O0 \
  353. VramInitWrite
      q* R- v3 y( ~, d3 {% z7 q1 q, f& t
  354. LDA [Data_L],Y
      d+ S+ T+ A. C( ^$ h& u
  355. STA PPU_DATA/ H2 {2 ^& a# B5 ?) P' K" J( R
  356. INY
    4 s0 v- D7 _; i! G; N
  357. BNE VramInitWrite6 ?. `1 p3 l. X3 _7 t
  358. INC Data_H
    4 M3 E2 B- i8 [6 x% ?* H
  359. DEX
    - p  t+ \! n. V9 I. U
  360. BNE VramInitWrite
    " Z0 M  t/ k# t- B6 J3 y, U# C
  361. RTS
    ' `( C8 G8 h: I
  362.   D3 }/ ~3 s2 b+ z7 J& g
  363. ;==============================
    ' X& y+ u9 M( G$ D4 g* F: H
  364. RAM_Clear;RAM清除
    " ~8 Q7 q7 x  u5 |$ J
  365. LDX #$00
    0 d( g8 O0 \0 X8 I) `
  366. LDA #$003 L/ E- p- M1 z( r
  367. RAM_Clear_1& p6 A. l3 r+ P, r% P
  368. STA RAM_Cln_1,X# J4 U# y! V: L
  369. INX
    2 H# U7 c* W- c$ g4 E
  370. CPX #RAM_Cln_1_Size4 Z5 q7 x1 b/ a" p9 t. L" d
  371. BNE RAM_Clear_1- M( T4 r) n! D0 L+ r
  372. LDX #$00
    / D# E6 o, j; B4 ~- N+ Z# Z
  373. RAM_Clear_2+ @3 N- f' B2 J) H5 ^( r9 ?; C4 @
  374. STA RAM_Cln_2,X6 Z) Y' Y4 [; `
  375. INX
    7 V$ D+ h. _' L2 j9 w
  376. CPX #RAM_Cln_2_Size
    * b: r+ t& v$ C1 t$ J
  377. BNE RAM_Clear_2, o* s9 E- H. L$ w; f& G' A
  378. LDX #$005 j2 |$ Z& x, e  b/ _8 U% Q
  379. RAM_Clear_3: ~7 W& b) o5 }. S( c! v
  380. STA RAM_Cln_3,X
    5 {" n( C: k0 v1 p8 A9 S# N2 ~
  381. INX
    * Z4 ^3 T3 _/ N& K. y( _/ R
  382. CPX #RAM_Cln_3_Size
    " f+ @; {5 d2 b0 g6 h
  383. BNE RAM_Clear_3
    # R* r& W) k+ [1 U  ^1 Z
  384. RTS- c! }- k; d& i& A% B5 U0 l. z

  385. / q; W, B( H6 B4 w- d/ `7 v
  386. ;==============================% t8 A8 D5 X+ B" K8 \
  387. ;音乐切换
    " R+ B7 f# n. N" ^' Y$ I- X) \/ q
  388. Music_Switch* U- {* r  [( |) M. E4 l
  389. JSR Key_Proc
    4 A% _! c8 a0 d) n) n- }& q
  390. LDA Key_Once" @8 z1 x/ h3 V% i5 r, u
  391. CMP #$10/ \+ H4 ]7 N9 k2 |: W- K
  392. BNE Music_Start_SongStop, _4 Q+ o  r; A
  393. JSR Music_ReSet
    ( J: `4 h1 K/ @0 A; s7 f& N( c" N9 g

  394. 1 w6 A+ Z6 w9 W9 c1 \9 M9 e- ?. z5 Q
  395. ;音乐停止- i/ \0 m1 c  W" X8 a: B
  396. Music_Start_SongStop
    8 {, x" A6 _5 h4 f
  397. LDA Key_Once3 c; D3 G; H/ I
  398. CMP #$20
      ~  Y8 m+ {3 X$ p
  399. BNE Music_arrow
    4 k3 a, v7 }/ \+ t! S! h4 M9 B
  400. LDA #$01
    * ?( p+ ^6 i4 `
  401. STA Music_State* n) m- X# R1 z5 I5 `% c" o1 v
  402. JSR Music_Bar_ReSet
    , Y: Z6 C( H- Y3 _0 ?
  403. JSR Time_ReSet
    # ]$ R) o# w/ G# S/ v, i& p" |& V; P
  404. JSR RAM_Clear8 r) B$ F3 g# J) @6 c6 Z
  405. JSR Sound_Clear' r$ @  A3 F; @4 U: s6 y
  406. JSR Music_Stata_Show% z3 K, ~0 J- k. M+ Z' ^
  407. Music_arrow
    $ q3 O4 Q) W, x& q* Y
  408. LDA Key_Once
    3 y9 k6 K! n3 T* G6 X
  409. AND #$CF
    5 Q; E+ ?7 Q) H% k% r6 h; K) N
  410. BEQ Music_Switch_End5 w4 O! I6 K. y8 ]* m8 i0 p! `
  411. JSR Music_Number1 U9 q$ G4 H% R7 Q, l0 i
  412. JSR Music_ReSet9 m8 v( J1 O; |
  413. JSR Music_Show
    $ L! i- ?. K) o' B2 _* X
  414. Music_Switch_End2 J: U- A$ F2 L/ g* f% B
  415. RTS
    4 F9 T; ]' {3 k8 {/ C2 K
  416. , J0 j+ o0 ]# S1 F3 e2 p' |
  417. ;==============================
    * |( T# c7 O/ u  T; @
  418. ;音乐曲目切换. A  i1 Y+ B& E: V# j5 E
  419. Music_Number0 s9 |4 z$ n! l, ?$ g
  420. LDA Music_Cur& r* l! ~8 O$ _, a' ?- g% y; Z
  421. STA Music_Last
    " D4 S0 q; H1 x8 [1 r
  422. Music_Decrease
    ( c0 R8 X) a8 B! e6 c/ g
  423. LDA Key_Once
    9 W  }  Z6 e( `5 R. Q$ P
  424. AND #$42, x* e5 D! \- \# E) x) u( a$ q
  425. BEQ Music_Increase
    # Y& z& f* A( V& |4 ]" E
  426. LDA Music_Cur; a5 g1 A4 j6 g4 c) b4 m
  427. BEQ Music_Increase
    , L! b+ _) \$ l* S/ [/ A6 G
  428. DEC Music_Cur7 |* `+ |* I7 F) s  n1 s
  429. Music_Increase* a1 \0 l! s0 [6 ~
  430. LDA Key_Once1 t4 @" f4 ?# U5 t8 K" r
  431. AND #$819 d' E7 g# J8 m6 j* h7 L9 p) V
  432. BEQ Music_Decrease_10+ \$ `+ C1 M. `0 Q  Y
  433. LDA Music_Cur
    ( {+ |4 r" K. y7 Q: Q" o/ U& H. D
  434. CMP #Music_Song_Total-01
    / O2 \+ q' n5 q. a
  435. BCS Music_Decrease_10, [+ v5 ?. R2 c! m% N8 ]4 A% h2 Z1 h
  436. INC Music_Cur
    + u, _: _9 s! Q+ p. `5 z7 `( G
  437. Music_Decrease_10& F" f3 z" f8 Y9 X
  438. LDA Key_Once$ o3 q/ E2 T: m- y3 E- b' B) F- Z- q
  439. CMP #$04
    7 e. q" Q& Z2 d, P4 [  I) p
  440. BNE Music_Increase_10! |5 \! ~' r  J4 n5 Z/ v
  441. LDA Music_Cur, A2 e' I) x- W5 e2 l( C/ e
  442. CMP #10
    9 j+ N/ @% ]2 r
  443. BCC Music_Start_Song_Min
    ( i0 u! Q7 t: \" G2 N! v$ |* X
  444. LDA Music_Cur* f$ x. i) e0 y# k0 P0 H
  445. SEC
    + T$ m; s" C& I' z% O
  446. SBC #10
    , _# y. i' y7 `
  447. STA Music_Cur
    : Z5 ]" H$ P4 b( o7 S- j
  448. LDA #$00
      ^( U& W, ]* Z; T+ V' `
  449. BEQ Music_Increase_10
    ) f& Q3 f2 x+ }1 x1 a% T
  450. Music_Start_Song_Min
    ; E5 a& z) g. G! r- ?
  451. LDA #$00
    ! k8 G% Q" G4 ~
  452. STA Music_Cur# {* f3 @4 i" P. W( i6 Z/ i, B/ T( L
  453. Music_Increase_10/ z1 ~7 U5 ?1 N4 \( t/ ~: J
  454. LDA Key_Once
      R, g  s! Z9 K( X( X
  455. CMP #$08
    6 D6 C. P* [7 V8 f9 `! H2 ~
  456. BNE Music_Number_End2 D% g( C% H+ N/ N
  457. LDA Music_Cur
    " K$ y% j2 d" _
  458. CLC
    8 U( K9 N) P& _/ v1 v% p$ _4 A
  459. ADC #10
    0 Z: t, c7 h: P* P2 [! M
  460. CMP #Music_Song_Total-01
    4 V/ Q) E" w8 Q4 I" h  v
  461. BCS Music_Start_Song_Max( Z9 T* z( W) M# |
  462. STA Music_Cur
    8 u/ x6 S$ q9 s6 }2 t
  463. LDA #00
    - D5 U5 L% L7 L, C) `0 V; q
  464. BEQ Music_Number_End
    . W9 a) j+ ~- G& {: a  {0 J
  465. Music_Start_Song_Max
    + Q$ m+ t+ ^1 o  S8 T
  466. LDA #Music_Song_Total-01
    ' }) H5 g+ u2 y2 m$ @' B  M" f
  467. STA Music_Cur# k+ }/ D6 \9 B/ f; ^
  468. Music_Number_End
    3 g% l* S4 h# q
  469. RTS
    5 U7 k# ]1 k1 i
  470. 9 a! b! \0 ?. t1 P6 R) ]
  471. ;==============================. |" h: g$ S" p7 b9 L5 L
  472. ;音乐重设
    8 Q) n) f1 O- B, S5 L* p* c
  473. Music_ReSet; I2 Y# H0 x) S. E* O5 Y- [& C
  474. JSR RAM_Clear
    $ e7 J6 t# u3 C) b8 [
  475. JSR Sound_Clear9 ?9 |/ ?+ V: o  B% v
  476. LDA #$1F$ T1 T. a& L" x" V' |+ z
  477. STA APU_STATUS( i4 F2 L. e; p
  478. LDA Music_Cur' B' t" D9 e$ Y
  479. JSR Sound_Init
    / ~+ Z( u- f" z0 b4 g. p% L
  480. RTS
    1 ~2 r2 M% Q% s9 S0 K
  481. 2 R  ^) r9 h! O" C7 g. t, s
  482. ;==============================
    3 W' v) Y/ n6 o' p. o! I4 r
  483. ;音乐端口清除
    4 Z1 Q7 p1 C5 j/ v% T" f% g
  484. Sound_Clear
    5 M4 r. Y- o* Y6 a# w1 b7 H0 E
  485. LDA #$00
    % B" d, T0 @7 r, @7 ?
  486. STA APU_STATUS
    6 K7 j9 ]8 r" @3 G2 H# z6 k4 u
  487. LDX #$005 a7 `  S( k* q. X
  488. Sound_Clear_Start, h; W: S2 E  Y/ l/ J- ~: N# K
  489. STA $4000,X
    4 n- ]: n; G2 I  S% G
  490. INX
    7 u; ^/ N$ w# z- o& T
  491. CPX #$141 G& j. c" O! P
  492. BCC Sound_Clear_Start
    - o& _- o( H9 p! e4 Y) Q
  493. RTS: Y$ W3 E/ `" J
  494. ! L1 W4 Q4 ]3 M" ^/ X. k* M) c
  495. ;==============================0 }  F4 S6 t! t7 e0 R( M1 H, b" h
  496. ;按键处理4 |* [( h7 w4 [; l# S8 v4 `8 R! T
  497. Key_Proc
    * u# N5 I9 w1 `# v
  498. JSR Key_Scan. n0 {3 @1 Z2 x, r
  499. LDA Key_Keep' j% P$ @5 g! }$ d/ M7 u* f
  500. STA Key_Temp
    - k( s' N  K; x# Q
  501. JSR Key_Scan/ k. ]: s. ^& K, l- _
  502. LDA Key_Keep
    0 ~/ Q2 z& i* m% V9 q
  503. CMP Key_Temp- x( `2 n4 S  f  ~1 ]% [, D
  504. BEQ Key_Get_Once1 h6 d; ?# ^, e; _* j9 w% |; ]  F
  505. LDA Key_Kemp
    , S- J6 A3 H6 J( N6 d# z& U
  506. STA Key_Keep' }6 x" w0 E1 E1 l
  507. Key_Get_Once/ G/ M; h% ~% r
  508. TAY
    # U- t2 E5 e, }9 M% j
  509. EOR Key_Kemp
    6 t! p: @1 R0 Y" n
  510. AND Key_Keep
    8 X1 K# g0 y& H- n) s/ c; w
  511. STA Key_Once/ Y# W) `) B9 u4 N# I2 S/ W% s
  512. STY Key_Kemp8 k" z: I# ?& T" |4 G) v
  513. RTS/ e- Q3 C2 x# @& O: P  g0 A1 {
  514. ;------------------------------
    8 U/ Y6 l6 j$ w& q& F; ^
  515. ;按键扫描4 P+ E, o/ j9 u1 J1 i& M/ ^
  516. Key_Scan- H6 X2 ~, l% e
  517. LDX #$018 Q' m5 `& G! {7 _5 B7 R) Y* [
  518. STX JOY1_FRAME
    + `/ C5 W8 J" {6 W3 D, g
  519. DEX3 h2 _. u1 p. o; _/ ~( E+ t
  520. STX JOY1_FRAME1 K& g6 P# }( P" {$ r! }  l
  521. LDX #$08, a/ Z6 w# s0 e% y4 T, X
  522. Key_Value
    / b% Q/ d' t, G! z6 K/ u9 K
  523. LDA JOY1_FRAME
    8 S9 B$ }' `- V! {* D
  524. STA Key_Getv6 k* y* c; W* R1 \: G7 Y2 t
  525. LSR A
    ; T: U9 [4 L/ q& x
  526. ORA Key_Getv
    / D# R5 S3 x6 `9 J( P( _4 \5 V
  527. LSR A
    7 C1 X' n+ r9 K0 T
  528. ROL Key_Keep# z6 ]8 ?! |# W- R& L" U
  529. DEX
    & ^  }8 v" T4 u1 l8 p1 E" f
  530. BNE Key_Value) j1 {+ P$ T7 |
  531. RTS' ?, `9 h6 a4 S7 f* A
  532. & e- g# g8 [4 y' ~
  533. ;==============================8 M. F1 u2 N. a6 [: J
  534. .IF SOUND_BAR_SHOW_ENABLE  |8 r0 C8 J  R4 [" K; R+ K5 x* S
  535. ;音乐条显示
    1 b" r1 `- X5 V& U
  536. Music_Vision( x2 _/ n4 x& u8 I2 @: g, o; F1 {
  537. JSR Music_Animation1 ?- E& ?  \- `" Q2 n% j: K! j, u
  538. JSR PPU_End0 L& x  z- Q- m4 g, {+ n
  539. RTS
    " o! {% A- l9 Z" _
  540. ;------------------------------
    4 L% C% R* C% ]2 q3 I
  541. ;音乐条显示处理" g/ |% p2 y0 t0 k+ W1 B0 V4 D
  542. Music_Animation
    4 w7 m$ N+ \9 Y0 a  F) Y
  543. LDX PPU_Cur
    ' v6 Z, D( |5 R
  544. LDA #Mode_Line
    ( E3 o! Y9 z; ?) y# J9 k
  545. STA PPU_Addr,X
    " v7 U$ {2 P8 \4 j. o
  546. INX% W$ e, l9 K% G
  547. LDA #HIGH(Sound_Bar_Pos)
    ( u& w% B6 f! o8 \: J# O- X- W
  548. STA PPU_Addr,X
    9 h8 ]( H; v2 V7 a
  549. INX7 }9 M2 w0 y' v0 r0 L1 F3 ~
  550. LDA #LOW(Sound_Bar_Pos)
    & U( t; }' G, P
  551. STA PPU_Addr,X7 o" x$ |7 U& x* j. O  y0 H" X! K. {2 H
  552. INX7 a; ~0 A0 v, E
  553. LDA Sound_Bar
    ! J+ [; l! l" W# H" J' b
  554. JSR Volume_Convert
    5 F! n; `+ x4 @- A3 x/ o1 T
  555. JSR PPU_Return8 h  P, [% v' A) C' s) {% x& m
  556. LDA Sound_Bar+$4
    : a3 s" Y9 L5 e2 E4 q( J$ D
  557. JSR Volume_Convert* d  _1 ^2 j) G; W9 l7 e3 u3 x
  558. JSR PPU_Return
    ( e) c+ M0 j7 F: J. R( B+ i
  559. LDA Sound_Bar+$82 H0 d$ R! {/ B; M" B3 @
  560. JSR Volume_Convert_Ex
    " Y3 q7 {1 ?. y0 M
  561. JSR PPU_Return
    , w' b3 W5 ?9 X5 e- E2 ?4 Q
  562. LDA Sound_Bar+$C4 X# u4 A# x$ n
  563. JSR Volume_Convert+ W" k$ x/ }3 T, f9 w- m4 R
  564. JSR PPU_Return
    , m& g. E, h+ Z! F$ K  _3 k
  565. LDY #$100 F+ J, S% x; q3 x( V6 _
  566. LDA APU_STATUS
    4 v7 ?' D, F( Z" I! b
  567. AND #$100 [' \/ K& H8 R! v( }: ]/ K: W
  568. BNE Volume_Count; |8 O& j% O/ v1 s. Y# I2 j
  569. LDY #$00/ x0 F* a+ [# b& q  i- s4 s
  570. BEQ Volume_Count% ]) [2 ^# N( x
  571. ;------------------------------. \: l; f! ~  i: O$ G2 L
  572. ;音乐条处理
    1 P* `0 F8 o6 t  C
  573. Volume_Convert_Ex9 k( L3 m0 P3 h3 C" S- x
  574. AND #$1F* d( I, K. h5 g& Y9 ^, A, J
  575. TAY" q. c: Y- P1 {
  576. BNE Volume_Count
    & w( Z& x8 Y6 J  Z. `* {6 Z. `
  577. Volume_Convert. r9 W7 b. N7 Q( {
  578. AND #$0F
    5 @2 C% s7 ^8 v% ?
  579. TAY
    - R' G7 I( o/ D1 A- `. P' x
  580. Volume_Count: A9 E% n5 J) y& Y# V
  581. LDA #$083 D6 t  i# w( y/ _/ ]  Y# `
  582. STA Sound_Bar_Cnt' A" s2 p# x1 L" u! [5 l. t7 X. b
  583. Volume_FILL
    8 Z+ h8 U  i) |' @( y  B1 r, Z
  584. DEY* y  M- C( [/ b
  585. BEQ Volume_Half7 m0 ]! S. L9 o- D) |
  586. BMI Volume_Empty
    ( o) t& g+ R9 s2 }1 Y. t. s: g9 |
  587. DEY
    2 r+ t/ V1 y+ G3 W
  588. Volume_Full
    4 t' Z1 L0 S1 }* J4 i1 ^
  589. LDA #$16
    ; ]* P! E, c! s$ p* g
  590. BNE Volume_PPU
    - ?( g2 x' o  z1 {9 d; D* j
  591. Volume_Half% @2 R' [* v# y, |
  592. LDA #$15
    1 }; g" E5 I* e4 I% d) \) w
  593. BNE Volume_PPU
      M2 T$ Y6 _& m9 g+ }) c1 F0 c
  594. Volume_Empty
    ! u& @4 ?! t5 \( T
  595. LDA #$14
    ' ^' V! z' l7 V% S* Z" z
  596. Volume_PPU* Y8 z# Q# p7 I% y! i0 v9 X
  597. STA PPU_Addr,X/ ^, x  [  V0 O" }8 \0 N
  598. INX
    2 ?* U/ p) i. @; x; A. S5 x9 g
  599. DEC Sound_Bar_Cnt
    4 F% t& a; @: T4 ^& T
  600. BNE Volume_FILL
    1 p( L0 g  H1 v1 Y, h
  601. RTS6 L& {5 k$ I6 `) {( j" }
  602. / ^! Q. D1 a/ |' \! h
  603. .ENDIF0 |( m7 _$ e3 D7 q: g

  604. $ ?6 X% V, z) T" m% z4 S2 r
  605. ;==============================
      z6 d7 Q) R" Z  h
  606. PPU_Addr_Set;PPU行开始8 \. c6 A2 Q0 ?" f, S# x
  607. LDX PPU_Cur
    9 D3 V5 _, N( \) J- [
  608. LDA #Mode_Line
    - x; N, c8 e$ {4 z3 u( I- x1 }
  609. STA PPU_Addr,X* f" |* ]# M1 Y8 b
  610. INX, _) r+ t; a! [6 N* n
  611. RTS
    . c: w* T0 i0 C; D7 }" z2 _, u

  612. 5 G: p: [+ J7 c* I% b; H) T
  613. PPU_Return;PPU转行1 `% ^$ x% U1 o2 s# G- i
  614. LDA #Flag_Over0 w: x: J( [& }* Y( C: }1 n. _
  615. STA PPU_Addr,X" N' g. x; E" [& G
  616. INX
    & E6 j* a% a1 r- R
  617. LDA #Mode_Return
    ' z( y0 d; F) Z6 D' q* j$ C, f$ A7 l! c+ R
  618. STA PPU_Addr,X! m2 m2 E  b3 H+ {0 k8 j
  619. INX
    0 }' t/ V9 z1 B. \$ `( L+ O' |1 `
  620. RTS0 O& M2 [/ e( }, J! ^0 N3 F1 L
  621. 7 k. h! x$ I1 \8 p! Q3 Y+ ]2 L! f
  622. ;------------------------------
      }% y- X' B3 Y
  623. PPU_End;PPU结束9 q/ A* Y1 }+ E
  624. LDA #Flag_Over/ n+ g3 |$ G$ t' [7 F2 x
  625. STA PPU_Addr,X
    + n* Y5 @/ f# p$ i" e; L5 J
  626. INX
    6 L3 a% t- v, g: B* J1 Z% r
  627. STX PPU_Cur0 c' }. h5 l+ S$ P" E
  628. RTS
    0 d- R/ h( `% w$ o9 D
  629. ;==============================
      e+ @) e* c( u& q
  630. Mode_Line     = $FD    ;新起行模式$ `8 a9 \2 ^) n' k
  631. Mode_Return   = $FE    ;转下行模式# [6 ^/ S7 n, K9 ^! h7 q
  632. Mode_Clear    = $FC    ;行清除
    0 G/ r, q9 r0 F# }$ }+ W
  633. Mode_CntLine  = $FB    ;行计数写入
    % g; {  F; e# X$ _
  634. Flag_Over     = $FF    ;行结束标志. }9 r5 J; {* O0 t: b
  635. 2 T$ C! n8 q8 z% z5 g; F5 E# T% O
  636. ;------------------------------* x4 ?! A! k& b% @( i
  637. ;PPU处理
    / Z2 [! G) j  h/ ?, |7 ]5 I& }
  638. PPU_Proc
    ) U' A- l! o9 T( M9 Y- Z+ V
  639. LDX PPU_Cur
    3 x' j. A( S! c! D3 u( d
  640. LDA #$00
    / G/ C) @2 o- r; }# k0 u
  641. STA PPU_Cur
    * w3 X6 y5 [' E* ?/ I
  642. STA PPU_Addr,X
    3 K1 Z  u' a6 s/ u: M3 x  P* k
  643. LDA PPU_Addr' @$ y* o: O  I# R$ k) d
  644. BNE PPU_Proc_Beg( q' Y/ s' I. g# O1 i
  645. PPU_Proc_Ret
    . `+ q! V# ?0 k) U! U/ o6 o, G# ^7 w0 _. b
  646. RTS! R# [5 C4 I/ N
  647. ;------------------------------
    1 `0 |$ L( m  C4 T( @) A* G- g
  648. PPU_Proc_Beg  ;处理开始# c- C; F3 ]3 T# G+ O
  649. LDX #$000 R* A1 H. y5 r3 Z7 x+ ?" y6 U
  650. STX PPU_MASK( a8 y/ q7 |* N
  651. ;------------------------------. Z- x' _# x+ D# A- c# t
  652. PPU_Mode_Select  ;模式选择) @, X( E( \/ l
  653. LDA PPU_Addr,X
    ; v5 P( c2 b& c6 U. a
  654. CMP #Mode_Line1 g& D. Z  L1 d& |6 s8 E
  655. BEQ PPU_Mode_Newline" K% v$ K+ |' w3 d; R- N. E1 W. ?
  656. CMP #Mode_Return1 S9 u- D# E- [
  657. BEQ PPU_Mode_Return
    * D& m1 p3 h6 ^& O! W; |7 P
  658. CMP #Mode_Clear  J' e3 o! x- u  [+ Y
  659. BEQ PPU_Proc_Clear
    8 p5 ^2 E8 p& ~. e
  660. CMP #Mode_CntLine
    ( M9 w, Y; V- T1 ?
  661. BEQ PPU_Proc_Cnt_Line8 R3 W$ [' \! K4 _2 _# e- D! B
  662. RTS+ i+ u: g5 A, j$ x3 Z5 m5 ^
  663. ;------------------------------
    * T& {+ H/ [( p- \" n6 e1 B
  664. PPU_Mode_Return  ;转下行模式* s* n/ M% m# Y
  665. LDA PPU_Addr_L% u/ c4 H3 S; c3 o; y7 N2 P
  666. CLC; c6 h( D3 N) ^8 v
  667. ADC #$20
    # N: ~8 D5 N- w4 K; {
  668. STA PPU_Addr_L
    9 }+ c" S/ K! E; q# r6 d
  669. BCC PPU_Return_End. J7 U  L5 J# I, N
  670. INC PPU_Addr_H4 n0 r  @1 K/ b' Y; G$ ]! J8 h% w% l
  671. PPU_Return_End
    % m8 a  ^' u6 D7 _" G& Y1 C3 p
  672. JMP PPU_Set_Increaser, |0 j, R! E' N" D0 H5 f( S: @& H
  673. ;------------------------------
    . P) |: C% m, E
  674. PPU_Mode_Newline  ;新起行模式
    6 _$ P: E4 E/ O
  675. INX) S6 A3 L# r3 P1 b6 x
  676. LDA PPU_Addr,X/ a$ j5 M6 f% Y0 Y
  677. STA PPU_Addr_H1 W( n8 \8 M; _1 B5 c
  678. INX7 I* W* b+ R/ w; Y
  679. LDA PPU_Addr,X& g" ~. f, t& K) b3 g& [9 S9 }
  680. STA PPU_Addr_L1 R+ @& l) V% W! w3 F  n  [$ i
  681. ;------------------------------; O( a* E& R* s# l- o' n9 T
  682. PPU_Set_Increaser   ;设置写入地址
      ^& b# G- g/ i4 q
  683. LDA PPU_Addr_H8 o  b5 M/ d5 `5 v& C
  684. STA PPU_ADDRESS
    7 r; T, I  z* M
  685. LDA PPU_Addr_L. j! u+ c+ \$ \4 M! }- `" a- ^
  686. STA PPU_ADDRESS
    $ b, g- k' y" @7 ?8 f" S
  687. ;------------------------------
    2 Y/ z; @3 m( k/ P5 u0 s+ r
  688. PPU_Write   ;写入数据
    $ p* Q& v+ |1 A5 e
  689. INX- V0 a8 y& e4 T9 Z
  690. LDA PPU_Addr,X
    ' x% U1 A7 Z) c# G
  691. CMP #Flag_Over
    5 J7 ?9 b% e9 c5 M
  692. BEQ PPU_Proc_End; S8 y4 j$ j( g" U, {
  693. STA PPU_DATA8 j) m, ?. q2 F
  694. JMP PPU_Write
    3 B7 f, g' O( X% S
  695. ;------------------------------
    * Z6 p9 n, Q- v) Q
  696. PPU_Proc_End  ;单行写入结束- \( ~  K$ ]* X  R# \
  697. INX
    % ~# ?7 }2 Y: Q% H
  698. LDA PPU_Addr,X
    2 j2 j  E7 g- M* S" |$ @: ?
  699. BNE PPU_Mode_Select
    6 P# G2 q3 Z3 Q0 F
  700. STA PPU_Addr: n; D$ W4 u( ]% e# z8 ?0 Y7 t4 @
  701. JSR Update_Palette_Color
    9 Q9 Y$ |4 r, L
  702. LDA #$00" I3 l4 p, ?5 a* {- F; y( _
  703. STA PPU_ADDRESS) Y8 b+ B7 m- E2 a2 E6 t3 @' F
  704. STA PPU_ADDRESS) U: K/ T2 V$ T) s5 D! [  `  X
  705. STA Show_Track_Name
    & U" z( f7 ^; i/ g3 @6 @
  706. LDA #Scroll_X7 r9 n- q0 O1 |! k
  707. STA PPU_SCROLL2 r( A% P7 C' y2 ~2 N7 X
  708. LDA #Scroll_Y, p& U" t0 O2 `7 i7 @' _6 V
  709. STA PPU_SCROLL; u3 t" T# q& A9 l1 d
  710. LDA Screen_State% R* i+ c3 Q9 {4 ]
  711. STA PPU_MASK
    " R: C& k3 j: y9 M$ _5 w
  712. RTS( ]( J* Q: a" q6 e9 r

  713. * v1 ^' k8 e& ?9 y% y$ o* T5 L
  714. PPU_Proc_Clear
    6 u3 u& Z7 z0 [$ S% o9 S, x; L+ w
  715. INX
    % S4 I/ _- Y2 A, R, W5 T2 `6 g
  716. LDA PPU_Addr,X
      C2 J+ T, i, u/ h5 u
  717. STA PPU_ADDRESS
    ( Z& m9 B6 d* t& p) y
  718. INX) v( j2 g+ S' J* F  r
  719. LDA PPU_Addr,X  |6 g3 a. G5 |7 |' n, q
  720. STA PPU_ADDRESS
    4 e6 V/ A8 w& J9 Q" b6 t  x
  721. INX
    ( g# ^7 |9 m. a+ l! \
  722. LDY PPU_Addr,X: x: {) ?7 k9 C1 g
  723. LDA #$00
    - u4 i. w3 i/ d4 ]8 V9 F' G0 [/ j
  724. PPU_Proc_Clear_Write
    6 M$ Y* o7 `' B  L
  725. STA PPU_DATA
    2 {  c) E; b/ \, s9 C4 r
  726. DEY7 C. F1 F7 S% P+ b
  727. BNE PPU_Proc_Clear_Write( u9 a/ S1 c+ C6 D& V4 T: q& v' E
  728. JMP PPU_Proc_End
    - [  T8 P; f# F/ D; d  Y; S- j

  729. & `% U3 t& F: w' K* Z0 ?6 _3 H
  730. PPU_Proc_Cnt_Line
    $ u' W5 b& J/ R& D( b
  731. INX% r6 |/ z$ B2 z0 b( I' X! c
  732. LDA PPU_Addr,X
    : ?4 A; C# A, V& W. i3 Z$ }
  733. STA PPU_ADDRESS
    & [5 X/ o7 R7 ^! M% ]7 u
  734. INX+ m$ C4 r1 Y3 }& p# s' Y
  735. LDA PPU_Addr,X- }3 J, \' M3 G7 u# Q0 f
  736. STA PPU_ADDRESS
    4 o1 e/ `) B  C0 R0 B- \3 o
  737. INX8 `4 l5 `2 d+ e$ y' c
  738. LDY PPU_Addr,X# ^3 q( o& o# h0 p# N1 B
  739. PPU_Proc_Cnt_Line_Write! C9 X5 T3 o4 r# @- D
  740. INX
    4 |9 e% s8 ~: |" I! c7 v; |# s) s
  741. LDA PPU_Addr,X1 r! {0 J. i2 e* a/ _
  742. STA PPU_DATA
    ) T$ g# Q8 L% U
  743. DEY9 j5 E+ i% u. {- U+ `9 Z
  744. BNE PPU_Proc_Cnt_Line_Write
      q; Q: F! u6 p  u! E; L
  745. JMP PPU_Proc_End
    $ `9 {. C1 ~; g( |- V! ^

  746. % o$ F. l4 J$ c' N  e
  747. ;==============================! }, _6 L* K3 Q' K
  748. HEX_To_Dec;十六进制转十进制; a: X, l4 f2 E1 t) J, Q* C/ z
  749. STA HEX_Data4 D* F& g1 z0 U+ E' f1 Y& o7 [
  750. PHA. q( X) ~0 ?+ \7 @, q& D
  751. TXA2 O. \0 I) v3 _3 ^+ A
  752. PHA# ]9 \1 k; y0 z) _" M$ k
  753. LDX #$00
    ' ~. B5 K1 i2 Z! z0 s
  754. LDA #$004 N% V7 X+ A& `& F$ O
  755. HEX_Cln$ L; B# f0 c  s# U
  756. STA DEC_H,X
    8 A: W0 @7 ]4 _3 C5 [9 I' p
  757. INX
    , L( |: _5 [8 }6 R! ?  r
  758. CPX #$030 U, h. v6 x  E
  759. BCC HEX_Cln5 z5 T! w8 ~: Q& p4 `/ s2 ]
  760. LDA HEX_Data
    9 e9 d/ l0 {& x! F6 Y, n
  761. ;------------------------------$ f$ k) B) \% N1 R+ _2 w5 g) B
  762. HEX_1007 n5 d- z+ b, N, b/ D
  763. CMP #100
    3 `$ l. c& x( u3 M+ h6 S: Z# ]
  764. BCC HEX_10" u7 l" `' v4 U' z# ?
  765. SEC
    ; P! e5 D  _# T+ \) }6 P; t
  766. SBC #100* w  l% Z, a4 ~1 S# `5 I
  767. INC DEC_H
    5 I' q' T  l  W3 W8 L6 ]# t$ _
  768. BNE HEX_1003 |1 ]3 e7 E7 w9 d. j  l- b8 x
  769. ;------------------------------
    ; p& e/ |  J/ b& H
  770. HEX_10
    ) g* x: g8 Y; c2 M
  771. CMP #10
    2 o: x7 M0 W2 \  }
  772. BCC HEX_17 @& t' q, n. ^" W: W4 @' q
  773. SEC
    4 A* J- U% B8 X# s; d2 u
  774. SBC #10
    * A# E/ u5 q! T
  775. INC DEC_T
    1 y# o6 c# E& o  {
  776. BNE HEX_10- w3 y  l4 |4 y
  777. ;------------------------------! h, E3 ?! @. _* [6 B1 G
  778. HEX_17 ^, z9 D/ q7 T" a% d
  779. STA DEC_L
    * C; b* A; U' n' @5 _& j+ O
  780. PLA3 P' d6 ~5 F3 n# a- m% L: W& q
  781. TAX
    # ~3 a2 H" i' J0 g
  782. PLA
    " @1 H; m, h- b4 [
  783. RTS" T6 O0 K& J- l! a) B8 ?2 y+ M6 W, L
  784. , O4 A0 H  s- c: c# f" n
  785. ;==============================
    8 A: n+ j$ ~; }- r3 g
  786. ;音乐曲目显示
      ?& a3 d; W- {: ^4 X
  787. Music_Show
    ( Y3 ]2 ~- T) V% h4 g. s8 I
  788. LDA Music_Cur
    2 S5 j; t( T1 i# @4 `
  789. CLC
    $ g9 J9 X$ b: j8 Y* h. m" O/ q
  790. ADC #$01
    # z: c  Y' |; s
  791. JSR HEX_To_Dec
    / X6 [! _. h9 i8 k' j0 v6 A
  792. LDX PPU_Cur
    ) c" p) c6 t% M+ v. ~9 j7 p
  793. LDA #$FD& P9 I9 C7 n! E! e3 _; k
  794. STA PPU_Addr,X  h, y7 R2 t- I4 }- R
  795. INX  x  a8 E4 ^9 |  r
  796. LDA #HIGH(Play_Index_Pos)" d  m2 O$ b" b4 A; K2 R. w- ^
  797. STA PPU_Addr,X
    9 {( |5 w/ f* {& \
  798. INX
    1 p3 R. ~- C. G- Y8 c
  799. LDA #LOW(Play_Index_Pos)
    & q( s8 p1 J$ S) p- V
  800. STA PPU_Addr,X, z) I6 R7 d# ?$ n, m* I
  801. INX5 w9 J- q- T" \7 g) _
  802.   a4 Z3 ^5 R9 Q, Z, C
  803. .IF Music_Song_Total > 99
    0 r# x3 I' m- Y5 }; p5 R( ^) G5 f# n
  804. LDA DEC_H
    # K( @# J1 v( }: z& S
  805. ORA #$30. }3 g7 K4 x! J+ }3 w, U
  806. STA PPU_Addr,X+ p, R% k; @5 _! k4 z
  807. INX' s: q, g* T" @. H, _* @* I
  808. .ENDIF
    : F6 a4 P2 p9 R+ ^

  809. ) {, l+ y5 U5 Q
  810. .IF Music_Song_Total > 9
    4 e5 R+ ]$ s9 k+ _' T) y9 E) P
  811. LDA DEC_T
    % r! \) @$ Y+ q8 l. c6 ~
  812. ORA #$30
    8 d+ ^( G# f- `
  813. STA PPU_Addr,X
    / X9 J/ d6 F# }0 j6 e# K9 R
  814. INX* M2 t7 o- k( C, U! x
  815. .ENDIF
    4 a# T& }- N/ G
  816. + |7 o; X; Z" H* o7 l
  817. LDA DEC_L0 Y' l. ]: w# E0 r
  818. ORA #$30
    9 W/ E- z* Z9 y; O3 b# ^
  819. STA PPU_Addr,X
    0 b- R; y  O8 d- M* }1 v* J, t8 c; ~
  820. INX) k! e3 y* U1 F: Y% P

  821. 0 e4 B! i" `% P7 i" w2 q4 B
  822. LDA #'/'
    * T! v, l1 c5 Z1 A( V. ^
  823. STA PPU_Addr,X
    4 N% x) T7 }. i4 U# J' R  ~- w
  824. INX
    ' U2 L) X; N% ]8 n9 G8 y
  825. Music_Show_Total' x% ]& c& H  g$ n  V) I
  826. LDA #Music_Song_Total
    6 ^' ^& d0 d- T6 Q2 _* q" V  F
  827. JSR HEX_To_Dec
    , u& X% r3 G4 y3 H

  828. ) N; E$ R1 y7 v
  829. .IF Music_Song_Total > 99& B1 A( G5 j, J) c( P- o. x& z3 a3 a
  830. LDA DEC_H
    0 U- b7 k0 ^. r$ h" v, V4 z
  831. ORA #$30
    & m& M; ^4 ^' R
  832. STA PPU_Addr,X
    " w; ?4 K0 j0 P4 N( S* c$ V- [9 T
  833. INX
    9 |8 _6 T0 c7 `. L* `
  834. .ENDIF
    : K2 {; [2 U/ Q$ w+ l3 |8 B
  835. $ x* A6 Y0 n. m8 F
  836. .IF Music_Song_Total > 9
    * V5 z& U: o, \/ r; c
  837. LDA DEC_T) L7 F7 ~6 p2 Y1 `) e
  838. ORA #$30
    % v- W1 C+ m, B) @( r" Z$ x$ R
  839. STA PPU_Addr,X
    , Y' g7 z& Q0 g+ ^9 m) c
  840. INX
    5 g0 |1 p7 E1 j: C& j
  841. .ENDIF' ]4 j( Z1 I3 r6 n$ U

  842. ( k9 C& n' ^( u; G4 _2 ^, ]
  843. LDA DEC_L# q5 v! t5 w/ K! S, M( V
  844. ORA #$30# p, i" \- R: k/ x7 [
  845. STA PPU_Addr,X
    8 J# ?% _7 k6 c  V. \' p5 {
  846. INX% A) o! d  I, V- O/ P- [- X

  847. 6 J% ~" L+ D* w0 L1 F
  848. JSR PPU_End: [  v% G3 w9 c" z
  849. Music_Show_End
    1 s# F8 q$ z( F
  850. RTS: H7 f0 z( f* Q
  851. 1 Q+ ~0 z- E. q3 c/ w5 u3 ]* F: f& ^
  852. ;==============================- |& Y! C8 S0 n: e
  853. Time_Show;播放时间显示$ j& E4 {2 |3 f! Y# `3 o
  854. JSR PPU_Addr_Set* f, g: G0 l5 Q) R& z
  855. LDA #HIGH(Play_Time_Pos)# R5 ]: M! A9 r$ ~$ [4 m
  856. STA PPU_Addr,X
    4 M% i! j4 r; ~6 K+ W
  857. INX
    ) w- x0 d: M" |9 K8 f8 K+ q# w2 E
  858. LDA #LOW(Play_Time_Pos), K, _2 t: e6 L7 d
  859. STA PPU_Addr,X
    , c' e- @" U+ y' V5 I( t
  860. INX
    ' J/ A7 d" B* Y
  861. Time_Show_H$ j. Y2 @! E7 O* g0 G
  862. LDA Time_H0 v  W9 p; _1 @* y  M  L2 t
  863. JSR HEX_To_Dec
    6 k6 ~8 n& ~5 [5 K% l
  864. JSR Time_Digit! M/ w5 e7 \7 O! D8 A$ I! @
  865. LDA #':'
    # ~/ j2 h8 A& `# U
  866. STA PPU_Addr,X2 O2 ?8 J8 v- W( c+ I+ W! B2 h) R- }
  867. INX
    + l- R! \1 [) V+ \
  868. Time_Show_M% V! T. a4 T) X% b
  869. LDA Time_M9 I# w' i: ?6 ?- e& m% b# b$ Q
  870. JSR HEX_To_Dec
    . \0 K; c1 g, R6 H1 u
  871. JSR Time_Digit
    ; Q# \; `( V; A0 c
  872. LDA #':'
    5 T$ o; i; m( I5 ?7 q
  873. STA PPU_Addr,X% X9 f$ _; X+ f& W7 A/ w
  874. INX
    0 Y+ p& D1 ^/ I$ X1 }( P6 w
  875. Time_Show_S
    ( e0 n( A/ p  I9 P' H
  876. LDA Time_S6 \: }! i! {8 J( o  ^& z% o! n
  877. JSR HEX_To_Dec
    * I* N; x) A/ M7 ?( @# {! A
  878. JSR Time_Digit0 p, }' v& g' T) f' W( u9 p
  879. JSR PPU_End. G8 ]  V" U1 L9 R
  880. Time_Show_End
    2 R! k* F* T/ i# O# H
  881. RTS
    . s5 \! p0 Y. ~" P2 ]- n
  882. % Y3 Y! w" a/ [$ @% l. X& }
  883. Time_Digit
    % }2 V  v) d; y2 h  _" x4 P8 b
  884. LDA DEC_T
    3 [. A0 N+ S7 p! b/ F9 x. O: b5 Z
  885. ORA #$30
    ; I7 Q. m8 ?0 b8 E+ ?8 H4 F
  886. STA PPU_Addr,X
    1 P' l; E9 `5 @; g0 i. b% x- N; ?
  887. INX
    $ k0 G/ x. O. Q; Y3 [. P# G
  888. LDA DEC_L
    9 [- g8 c% s6 X4 i
  889. ORA #$30
    6 L1 u/ V3 T/ _* |  F& K
  890. STA PPU_Addr,X" _% s$ ~5 o( h5 u( c, X7 x. L
  891. INX
    8 G) s! T! j. u  S7 d1 R; X
  892. RTS
    1 |# y3 f4 V& g0 `7 v" ]. H5 D

  893. 6 c6 `: D4 C$ d9 g5 L
  894. ;==============================  Y1 S  |& Y1 {% m4 {5 B
  895. Time_Count;计时
    6 \) d8 J$ ^2 Q! Z# c; D$ j
  896. LDA Music_State
    ' r2 ?2 t6 p1 S# E  _3 g3 v
  897. ORA Time_Wait_Cnt+ k: a+ y4 d" N7 k& Q( X9 L/ S8 I
  898. BNE Time_Count_End) o" p, p- N* R4 W5 T
  899. INC Time_Cnt  @: T3 Q( C9 N5 F' V
  900. LDA Time_Cnt7 [' v, m6 V* J1 _" J* [; V
  901. CMP #60, I: [: z! e% u: Y) A& o1 e) _/ O
  902. BCC Time_Count_End4 @# a! _- m$ Y) R6 S! L8 a* I
  903. LDA #00
    2 c# h" L+ L- J0 p2 x' q
  904. STA Time_Cnt& C) e7 L& G' ]  f  {
  905. INC Time_S3 A& s3 N$ E$ X# ~3 v  @
  906. % Y0 }: E. B. U
  907. Time_S_Cnt! r' L6 T. z9 L
  908. LDA Time_S. `9 ?) }) Q; u4 S& H, C3 T
  909. CMP #60
    5 ^5 }7 J+ j) V5 s% m. i. G9 u3 A1 `
  910. BCC Time_Count_End; q# P# |$ j* h/ V
  911. LDA #002 s$ I$ g+ s& T6 U& K0 b  S
  912. STA Time_S& k1 S2 r8 k4 ^9 p/ w
  913. INC Time_M5 `$ C6 ?1 g) m( n- \

  914. 6 `2 t. b; F: Q, |# x* u, y  `
  915. Time_M_Cnt! B. n9 ]  A+ K
  916. LDA Time_M
    9 ~/ D1 g2 D. m; T7 ~6 @# m
  917. CMP #60
    : ~8 w. z3 `: [& W
  918. BCC Time_Count_End8 }# c. t! H6 B3 w1 ]
  919. LDA #00
    . e( \" w$ n, \9 p1 Z. s& j$ y
  920. STA Time_M
    # E  L  O9 R4 i% F+ [" ^8 w
  921. INC Time_H
    ! N5 E- @  W, f/ k# E; M6 f
  922. 3 Q$ [6 x2 U) L, @$ D* [" \
  923. Time_H_Cnt- \- A, ]8 b( F7 U- z; z/ C
  924. LDA Time_H2 _  m& W9 U/ k. v5 ]# Z: b; S  e
  925. CMP #24
    5 c  F( q  @. p7 S% K3 H) q
  926. BCC Time_Count_End
    & u9 D. a6 I; f$ r. K# L6 M
  927. LDA #00
    ! H( Q9 v% {% v( H
  928. STA Time_H6 h- z+ [) b- ?8 n

  929. 4 D6 A* h8 j$ w0 q5 }
  930. Time_Count_End" p& u* x* `; {
  931. RTS* o- R! B8 ?9 M  e/ M# s& e6 R+ {
  932. ; T5 v: z  \# s1 P* S
  933. ;==============================+ ^/ {, H4 y: J. D, n& o
  934. Time_ReSet;播放时间重置. i' i) d3 p/ V7 M5 v
  935. LDA #$004 q* H8 g7 C$ y7 T9 W
  936. STA Time_S1 X- [3 r2 l& d% E7 y
  937. STA Time_M
    : v6 h% }& U3 F" ~6 P, K' U6 w
  938. STA Time_H
    * G  P  c& @) D; U
  939. STA Time_Cnt
    6 A1 d+ s4 U$ \, {; N- p# N
  940. RTS' L( H. _7 m5 N. H3 `, ~

  941. 7 G# J( c4 x! Z4 E6 i! ^
  942. ;==============================
    4 F5 U, }( f5 J+ \+ e$ @
  943. Music_Bar_ReSet;音乐条重置
    % i5 U# P8 J  X% P8 y% I: _
  944. LDA #$00
    / X, n# ?2 ]' x3 I& M& O
  945. LDX #$00
    ! b7 ~: X) ~7 N
  946. Music_Bar_ReSet_Set7 X) m, d3 V6 B- M; @
  947. STA Sound_Bar,X. ]4 U- l. |& l+ v$ w( B- j( g
  948. INX
    ) j; G9 y# S7 m, `  R
  949. CPX #$10) \7 L6 A3 r6 u2 h/ F% _5 O2 S
  950. BCC Music_Bar_ReSet_Set! C0 C5 P8 F. m( N+ P3 W
  951. RTS
    ; K2 j- e7 ~% O) X4 t- ~  X
  952. ; g5 @( o+ D# _3 g# r
  953. ;==============================1 I) t' _2 C8 l2 @- j# |. l
  954. PPU_Data;PPU数据写入$ x! O! u: D  X  q2 r# ~0 v) H
  955. STY Data_L
    0 p! I2 }8 j: K0 g( Z4 v0 t
  956. STX Data_H8 j$ y  T6 Q! F; o, X, c% L
  957. LDY #$FF) d; a0 w/ z5 e( I
  958. LDX PPU_Cur
    7 d- X2 z, s2 y) P; q0 T" l
  959. DEX
    " Z4 M6 D4 f. U* |
  960. PPU_Data_Beg
    2 J. t( P+ a, q: o) @
  961. INX
    4 x: r# Y+ F; `/ o2 f% k
  962. INY9 e( b6 y, I! P" B+ w/ j9 [9 `
  963. LDA [Data_L],Y
    % w/ f5 m) A# L
  964. STA PPU_Addr,X" P0 @" f4 W; H5 w1 u  q1 u
  965. BNE PPU_Data_Beg
    $ W, ?0 b9 o) R4 Y7 f
  966. STX PPU_Cur
    & f' y. A% q" G: [% J# O: b
  967. PPU_Data_End1 M5 ~* W" [8 b$ o
  968. RTS5 Q$ r, b  j' r" C% a9 R; V
  969. + ]6 {* d4 b1 a) U) {
  970. ;==============================
    ) M& {) k) u* c: y0 C7 U
  971. Music_Stata_Show;播放状态显示0 Q8 @  ]: ?& l) T: D
  972. LDA Music_State( A$ w9 g, s* _8 r) T
  973. BEQ Music_Stata_Show_Play
    $ L# k' j6 @6 E( |
  974. Music_Stata_Show_Stop* r7 a. b1 R9 I+ I% h
  975. LDY #LOW(Music_State_Stop)
    / e/ U6 v2 }$ J2 T) Z: |
  976. LDX #HIGH(Music_State_Stop)* P& K0 e& }# u! [4 L# U/ v
  977. JSR PPU_Data
    0 s' w4 Y+ `5 u' \8 O
  978. RTS
    4 ~6 ?! v) v0 r  H' ~/ U$ ^
  979. Music_Stata_Show_Play5 c; H9 b/ ?8 x; \- d" N
  980. LDY #LOW(Music_State_Play)
    . T7 w6 ^1 R, Q) l* q  n  X9 A6 ^* H8 M
  981. LDX #HIGH(Music_State_Play)
    5 f) s. F+ y% L7 p
  982. JSR PPU_Data
    8 Y8 Z( J" c  U& i( ^& c
  983. RTS
    ! `$ R% ?" |8 D4 R
  984. % q: k0 J/ x7 w
  985. .IF SOUND_BAR_SHOW_ENABLE
    4 q5 s( E5 ^# X3 D& V4 [  P# ~8 `
  986. ;==============================* {# ~* s4 h) g/ W
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    . b7 A3 V$ ?% M! s  k6 {
  988. LDY #LOW(Sound_Bar_Text_Data)+ {  p% ^9 w3 b. F
  989. LDX #HIGH(Sound_Bar_Text_Data)
    * M7 v$ ?( C5 Z3 i
  990. JSR PPU_Data
      @: Q- r) o* }: Y, u/ H& g
  991. RTS0 M8 Z  \4 r  o% K! Q

  992. 6 y6 t9 o. s$ d1 G) J; {
  993. .ENDIF
    , E! q% {$ I8 B

  994. 1 X) c: Q/ ~6 A  O  a
  995. ;==============================& H0 }+ M1 p( R- R
  996. Set_NameTable_Attributes;设置命名表属性
    + }. L" ~# N# r( w9 d
  997. LDA PPU_STATUS
    ! \0 N% q& Z: S9 W3 x! H5 o
  998. LDA #$23& R9 f5 e8 o' T0 p0 {9 o) e6 h
  999. STA PPU_ADDRESS0 V: l$ H# U% c
  1000. LDA #$C0+ S  k( j  @# E; W/ a/ z1 W, {2 Q; ^; B
  1001. STA PPU_ADDRESS
    3 L# @# E" k* N" J
  1002. LDX #$00! e: i; j1 t3 W! B
  1003. Set_NameTable_Attributes_Write% v9 Q2 l7 w+ T' d$ A- \
  1004. LDA Palette_Attributes,X
    . G' {' p. i5 b% d
  1005. STA PPU_DATA3 u" P$ @# U* b7 P+ r
  1006. INX! |5 q! C+ ^4 A
  1007. CPX #$40! }& z) C* A3 @  o
  1008. BCC Set_NameTable_Attributes_Write
    : K$ ~  r; V) |! j6 f
  1009. RTS: v" y2 v0 f8 K# ~' I
  1010. " c/ ?6 X9 H* f5 O$ P, r# P" v5 M
  1011. ;==============================5 C" e$ v% j$ S0 B
  1012. Set_Palette_Color;设置调色板数据0 x; u7 {' f- o
  1013. LDA PPU_STATUS
    ( m7 |3 f$ e# q& h' H1 }+ X
  1014. LDA #$3F0 f, A/ p3 C8 @! l' R6 J) a1 v& {
  1015. STA PPU_ADDRESS$ E2 W. _! z: ~
  1016. LDA #$00
    $ ^' X# B( D0 i, D) J
  1017. STA PPU_ADDRESS) o1 |9 e2 c" @8 w. d6 z: l
  1018. LDX #$00
    3 P3 u$ \/ Z  E3 r1 _; i, Y/ z1 J
  1019. Set_Palette_Color_Write
    / F$ ?) r$ {. N( [& m6 ^4 f
  1020. LDA Palette_Data,X
    : C0 u4 e3 R5 W/ r/ A. Q
  1021. STA PPU_DATA8 r1 W) q3 m# ~
  1022. INX/ ]( \! \5 ~5 k/ ^& S
  1023. CPX #$20
    : b. `8 H. W  b2 ~3 A
  1024. BCC Set_Palette_Color_Write
      T2 U( [; ~$ ^' V6 B( p
  1025. RTS) P& l1 ^# O: j7 m  n+ u
  1026. $ a+ A5 K' l. W! h+ V2 F
  1027. ;==============================# B* k  f5 w3 B* A! ~
  1028. Init_Palette_Addr;初始化调色板数据
    , B8 i+ `9 A2 D5 B( V% ?! \
  1029. LDX #$00  s* {5 H% i; g! \
  1030. Init_Palette_Addr_Write
    / W' L$ |, M% f& ~
  1031. LDA Palette_Data,X
    , ~- L( y+ H. e
  1032. STA Palette_Addr,X, @7 F6 W: C' O! Y- g. g4 a
  1033. INX* K5 z& M2 G2 l8 C: ~! ~
  1034. CPX #$20
    . f5 {+ s4 k, M% E4 q& D6 n3 Y. v; k
  1035. BCC Init_Palette_Addr_Write4 k0 G) G& ]6 k1 O/ d5 M
  1036. RTS% x: E. k; s$ I5 g2 h3 k; F) F9 Y7 ~
  1037. 5 l; n0 C" [& Q& B4 P& T
  1038. ;==============================# y! Z! r% [+ D0 o% V, Z
  1039. Update_Palette_Color;更新调色板颜色
    7 r; h' W! s  \7 o" g
  1040. LDA Show_Track_Name4 U% v0 r# f$ `( l! u
  1041. BNE Update_Palette_Color_End
    & i* u: k: @" \8 e8 P2 }7 {
  1042. LDA Palette_Update_Flag# k. [' i% |8 @- I* r* m1 w0 {
  1043. BEQ Update_Palette_Color_End
    ( b7 ~' P) [' V- k! u: b
  1044. LDA #$3F! G2 I3 K6 ~- M; ^5 Y& I
  1045. STA PPU_ADDRESS
    0 X/ A) o5 M5 \( D
  1046. LDA #$00, E) z; T+ o( c' p
  1047. STA PPU_ADDRESS
    + A- s; m  B- Y+ U9 k
  1048. LDX #$00
    2 l1 B( `8 b% `! T
  1049. Update_Palette_Color_Write3 I8 q3 a% F6 `0 n
  1050. LDA Palette_Addr,X; k9 S1 r. @% i* P" F6 _+ L( g. f& ]0 R9 A
  1051. STA PPU_DATA' S/ _- q. ~! S/ u( ~
  1052. INX
    , _+ T5 O/ H, \8 G
  1053. CPX #$20
    . z& e8 @; P* }, L5 C) `$ q
  1054. BCC Update_Palette_Color_Write
    4 ?# Q: z: s$ m
  1055. LDA #$00
    + W+ D) T4 A+ x
  1056. STA Palette_Update_Flag# |* b4 R! g- W5 z: g4 ^
  1057. Update_Palette_Color_End1 p* J  g4 C: r" ^8 m' l3 h+ e5 T# M
  1058. RTS
    ! @7 D9 f# ]/ J/ b' K. V: u3 b/ B
  1059. . r% w* Q. {3 `- z$ U9 e; m/ I
  1060. ;==============================
    8 G& i* P; k3 r5 u
  1061. Update_Palette_Data;更新调色板数据' ?6 Q5 v4 {2 }6 k
  1062. LDA Show_Track_Name2 R" e& m( M$ [! x) e4 ?
  1063. BNE Update_Palette_Data_End' X) ~  ]) X1 M
  1064. LDA Music_State
    $ C  Y! r$ w9 o' C8 K
  1065. BNE Update_Palette_Data_End
    # P' B) W* I0 s1 {% {5 E
  1066. Update_Palette_Data_Check8 w& X4 Y! }5 U4 ?
  1067. LDA Palette_Wait_Cnt
    / R5 w+ u/ p6 K* u, D  ~
  1068. BPL Update_Palette_Data_Check_Over
      \) p5 ?" z' ^$ \! ^
  1069. LDA #Palette_Update_Interval; K( Q$ t& C3 ]( i& l
  1070. STA Palette_Wait_Cnt9 p( C3 X7 Q6 [0 }' ?7 }
  1071. Update_Palette_Data_Check_Over
    , R& C7 W7 s# P5 P2 m1 h
  1072. DEC Palette_Wait_Cnt7 T" _0 P( j3 Z$ Y5 ]* f
  1073. BNE Update_Palette_Data_End% @& J% A2 w  [8 f. f
  1074. INC Palette_Update_Flag
    : \, w1 L! e1 s; b' ~
  1075. LDA #Palette_Update_Interval
    " k- Q0 @* z7 \" U
  1076. STA Palette_Wait_Cnt9 ?4 U1 x* L- i6 B7 e
  1077. LDA Palette_Update_Addr
    * ]& E8 |" r3 H7 x8 b; {
  1078. CMP #Palette_Update_Max6 H5 m4 R2 J/ M# T( h' x
  1079. BNE Update_Palette_Data_Set2 |$ T1 W6 Q# j1 \+ a
  1080. LDA #Palette_Update_Min - 1' C7 J7 @" x& y! w8 J5 R
  1081. STA Palette_Update_Addr3 K( Y2 {! y, D: F5 s
  1082. Update_Palette_Data_Set: c: a5 B6 {3 c  x. \
  1083. INC Palette_Update_Addr
    4 q7 v# V( u0 }( Z" G% t
  1084. Update_Palette_Data_End
    ; t* K* d( T; b. h4 s" r$ c% X1 i; f
  1085. RTS' _) H; P  a) f9 h9 d

  1086. 6 ]. _. ^! e3 b8 d1 }. l/ [' A1 E
  1087. ;==============================
    9 B1 y8 D+ a5 s3 ?( r
  1088. Show_Music_Text;显示静态文本* A+ G) S' B* f; G) ^3 I! O/ d
  1089. LDX #$00: _, ]5 P* s( p9 {3 p
  1090. Show_Music_Text_Set
      u, \) q$ u! T2 b3 F" B2 ~& o) b
  1091. LDA Static_Text_Data,X
    8 t2 o' `  F- L' D" ]6 d, ~
  1092. STA Data_L7 ?, V  o* e# ?- _1 W
  1093. INX- K9 \0 ~1 T: {+ P/ G1 E$ u4 S0 _
  1094. LDA Static_Text_Data,X2 e' a* E6 [# d7 u- R" i8 [
  1095. STA Data_H# L. \! y/ S7 s6 s5 W
  1096. INX2 o$ L! j" c: M/ |" y+ q
  1097. LDY #$00+ M6 F3 z6 \% K% w
  1098. LDA [Data_L],Y* A1 v( ?; \' Y5 W
  1099. STA Data_Cnt
    . V! M2 ^+ Y( w, c& ^  K
  1100. DEX
    - v! Q9 u. p. Y% C# F
  1101. DEX! _& i7 ^8 u4 H( ~" q, _4 y: |
  1102. LDA Static_Text_Pos,X
    . U- W" ?. W9 e/ \
  1103. STA PPU_ADDRESS
    " z3 ]0 K! w8 J) ]
  1104. INX- V, }- d6 X* z: y1 @* @
  1105. LDA #$20( O" c" P* q( u( u% c9 |4 U- x
  1106. SEC
    - A& f2 H$ n4 S/ _. m2 r6 y1 l
  1107. SBC Data_Cnt3 ?5 [, t. F- I7 ?; \
  1108. LSR A
      B! R# S5 T$ s. [1 R+ _
  1109. STA Data_Buf
    4 _5 N/ Q2 x& F; d4 b2 o
  1110. LDA Static_Text_Pos,X3 Z4 {5 z& o% T- L/ m  X# `5 H1 L9 U
  1111. AND #$E0/ T2 e& }6 W7 |0 I) V0 Q4 T$ o0 W# L
  1112. CLC
    ( b3 |! j) g3 y( \
  1113. ADC Data_Buf7 F* V8 O4 T/ \& |- b
  1114. STA PPU_ADDRESS2 K( `: R# L" H8 Y5 y
  1115. INX' V+ L$ a. Q+ C, b5 v5 L# _, G+ B# a
  1116. Show_Music_Text_Set_Write; n% p1 N  O. y; O3 F! I8 `0 R
  1117. INY
    $ U: z0 I0 ~3 L
  1118. LDA [Data_L],Y
    1 l* ?# T# p8 W6 j, ], o
  1119. STA PPU_DATA+ t) x: D2 Y2 S( \, p; i& F6 y
  1120. DEC Data_Cnt2 o' F& J( Z1 T$ F6 T
  1121. BNE Show_Music_Text_Set_Write
    . F1 `$ V$ W4 J$ Z- {. {0 |
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    ' e6 I. T( x6 B$ P( P4 O8 D
  1123. BCC Show_Music_Text_Set
    6 M- Q0 D7 T4 h
  1124. RTS
    4 y: X( l0 }0 Q, P
  1125. # D+ S! H; u7 V& L, @
  1126. ;==============================/ d+ y# f/ D4 c7 z& Y
  1127. .IF Track_Name_Pos;显示曲目信息6 |2 [' |) l3 i. Y. J, L; q2 T
  1128. Show_Track_Info. ^9 u3 @# x9 L( @0 I7 [. _' {
  1129. INC Show_Track_Name, Y4 Y. j( F# t& f
  1130. Show_Track_Info_Clear
    * _" b$ Q  x6 b0 e- E
  1131. LDX PPU_Cur( |5 a+ \! |+ }: |! }5 s" W
  1132. LDA #Mode_Clear
    6 v3 w+ Y/ ?) _, A3 E) A, ]  w% t! _
  1133. STA PPU_Addr,X/ {; F; \+ i2 G. ?" }/ S0 |
  1134. INX
    5 u5 N: ?& X! o' Y- ]* F

  1135. 1 z. v7 H! l; c8 a+ m' ^: A, l2 R! ]7 v
  1136. LDA Music_Last
    4 |' ]0 c, g# E5 N4 m& ^
  1137. JSR Show_Get_Track_Name_Center_Pos0 h6 @9 R8 _0 r  d6 c
  1138. Show_Track_Info_Write_Cur
    ! F: W, Z7 T3 k0 o- {
  1139. LDA #Mode_CntLine, Q( K  M6 k- B% O
  1140. STA PPU_Addr,X
    ! L  |1 |: J% R& ~
  1141. INX
    - @: G/ b. b" [# B+ D& q
  1142. , ?4 f4 \4 Z* \1 X; t9 g
  1143. LDA Music_Cur: I2 F+ r6 ?# W% _9 k
  1144. JSR Show_Get_Track_Name_Center_Pos
    - J, z1 j6 l$ m4 ^- l% M  E
  1145. ) g- E, |% h8 L/ V, X
  1146. Show_Track_Info_Write_Cur_Data
    3 q7 S+ r- |- I, ], m) u
  1147. INY9 B5 O4 P* b% H& T
  1148. LDA [Data_L],Y# g& N/ {" l# R3 n- U0 j, W8 a' k
  1149. STA PPU_Addr,X" B. H% D' ]. Y! b) ?' B) T
  1150. INX  x4 n: a: q- o6 |; ~
  1151. DEC Data_Cnt
    0 @  F. D/ U2 W( ]1 v+ R/ n( {  A
  1152. BNE Show_Track_Info_Write_Cur_Data& x7 K% W0 Q* B0 ]8 v
  1153. Show_Track_Info_End
    ; m! m  I9 f1 T+ N( o6 t, p- r
  1154. STX PPU_Cur
      s; \  S6 E0 K4 C* n2 F3 M0 H
  1155. RTS& P6 U, d: R# u) |1 k& U5 T

  1156. 7 ^) G; w" X* S. Y1 a5 R
  1157. ;==============================0 j6 n4 P% z: @6 e$ k
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置- G, a2 K7 e6 r- S' c  Z- l
  1159. ASL A* `: z7 t9 Y9 \
  1160. TAY% ^- i! w8 k) S# D$ Y- l
  1161. LDA Track_Name_Addr,Y
    % A+ O6 Z7 V; Z5 P, P3 l' [6 H5 a
  1162. STA Data_L- r& w3 L; N- M- V: r
  1163. INY2 |2 Y  B7 ^$ @  ]6 t$ `$ }
  1164. LDA Track_Name_Addr,Y
    ) y6 V  E+ Z4 ?' O7 S0 x% e# T9 |, @5 F
  1165. STA Data_H$ N- I# Q$ o: p
  1166. LDY #$00
    % |! ?8 Y: L* I% P) i; n
  1167. LDA [Data_L],Y
    * i: r( i! K7 h% d- n( r7 W
  1168. STA Data_Cnt
    , ^4 u) q( I; Z. L
  1169. LDA #$20
    9 l( h* r* T/ Y
  1170. SEC0 M. j3 x# F! ^7 ?0 R, H, K7 a
  1171. SBC Data_Cnt, }  `- ?" ]) y( i. S4 q1 X
  1172. LSR A
    # X2 w6 s1 {  y5 P8 v
  1173. STA Data_Buf
    2 k( p# f) g# u  y2 u( W
  1174. LDA #HIGH(Track_Name_Pos)7 v3 V& K6 v0 J; w6 X2 p$ p
  1175. STA PPU_Addr,X
    , d/ N; S9 O9 i. E, G  B
  1176. INX
    6 `) l& |- f  V. ~
  1177. LDA #LOW(Track_Name_Pos)6 V' n2 g3 N+ {
  1178. AND #$E0
    . ?- P! z" @- _: i' r
  1179. CLC4 n6 l7 P: X9 N  ~' l& K
  1180. ADC Data_Buf
    & w$ Z, m% E6 H0 v6 ]0 w' m, C" @
  1181. STA PPU_Addr,X
    % M+ Q) ]% \/ T  a, W- b
  1182. INX
    ( c$ W4 C+ j9 @% c$ o! D. A
  1183. LDA Data_Cnt
    # ~2 ?4 a/ V2 C0 q- F( y* B
  1184. STA PPU_Addr,X3 b3 X$ o2 L9 d5 X
  1185. INX
    ! A- \8 N. H  ?  s! s0 k/ {
  1186. Show_Get_Pos_Center_End) D2 U1 i, g# Y  `& O+ A+ J
  1187. RTS
    % m  r' h& ^8 M/ |
  1188. .ENDIF" M; b& y, ]5 a9 @! E$ x

  1189. ' x, ?' ?8 U+ z5 M% d, @  Z  ~
  1190. ;------------------------------
    & E9 c- {9 p9 w# j- J; k3 k
  1191. ;命名表数据
    " j% J6 l3 t9 L9 f- ?
  1192. Palette_Attributes
    + F1 B  D  ?4 n0 ~
  1193. .IF SOUND_BAR_SHOW_ENABLE1 t& R' c4 R( F. v+ i
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    : L4 o" W2 ~  D# _' s7 D% y, g
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    + C& G. l5 n  {3 m/ M- w5 N4 n
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    4 y  V; X* f- z6 w9 J, D
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    : g, s; l* h( t9 w0 V
  1198. .ELSE
    . t% q0 U( d( c) Y
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$006 u* [& r0 X9 \: z/ d; |
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    3 ?/ F% H6 K$ g" m2 X
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    3 `  f! c. H& B6 Q
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55# L4 o/ t! X$ A" K3 t! a7 a& Z
  1203. .ENDIF8 J; `& B) _( F6 {8 s

  1204. - g7 A6 p" ^# e; Q5 H
  1205. ;------------------------------
    $ i* Q7 o1 G% Q
  1206. ;调色板数据$ p) ^+ Q7 W; O1 G
  1207. Palette_Data
    * l" v. L1 T9 K1 l. x$ J9 o0 G7 o
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    " w8 B7 E* y9 M) j
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    / V1 p! B1 P; o! _2 F' ^
  1210. * ~- X5 ]( k' k7 T& T
  1211. ;------------------------------
    ; L7 b0 F9 U6 q' Q5 }
  1212. Static_Text_Data
    2 r4 j% E9 q0 X& }- y
  1213. .WORD Static_Text_Title_Data3 ~: a5 s! P$ u, N1 G7 i4 b( X
  1214. .WORD Static_Text_Author_Data6 G2 x* y7 |* K$ U# I& u
  1215. .WORD Static_Text_Date_Data4 A4 T/ ?7 `8 j3 F) H: q
  1216. Static_Text_Data_End
    , A4 z4 ~, K; n2 g7 n

  1217. 5 U* i/ U6 E8 Y& B
  1218. ;------------------------------, x5 h$ s' R  Y3 Y* L
  1219. Static_Text_Pos
    ' B, [5 t  X$ i8 {$ x
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    0 e4 R/ P5 u" v% C/ ~) d
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    - Y! Z2 o' |) ^! Y# i3 V
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    : |0 w9 C) K  Z0 b6 u0 \$ {% e
  1223. Static_Text_Pos_End
    ) o( M% H1 V; T* l' i. p" r
  1224. $ P+ j; ~+ R0 N0 p( ^: y
  1225. ;------------------------------2 ?  r% ?4 I4 _/ |) o' W
  1226. Music_State_Stop
    ) ~. w; O9 G" p: w5 P
  1227. .IF SOUND_BAR_SHOW_ENABLE- N' `: O6 k( v+ n: Y
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$001 z3 u0 I" e: p1 P* T$ U" n3 `
  1229. ELSE
    ; {$ i% ?' [2 h! s% x2 p
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    1 s; }' w- L0 M
  1231. .ENDIF% ~' s& `7 m9 v/ d
  1232. Music_State_Play% X6 n: l3 W0 v/ q
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    2 O6 f9 \, d; `; S" L4 A

  1234. , a! i1 {1 V9 A! `
  1235. ;------------------------------7 Z0 S/ K/ I  I' l
  1236. Sound_Bar_Text_Data;声音类型文本1 H$ X" `/ b  O
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos); o0 d% s; q, N; e3 x6 h0 I
  1238. .DB "SQ1-",$FF' s- p, Q7 j. x4 q8 C* D! Q. V
  1239. .DB $FE,"SQ2-",$FF
    4 V3 |# x  W7 m- o: U% v
  1240. .DB $FE,"TRI-",$FF
    - l& ~, n9 J; R% s. q
  1241. .DB $FE,"NOI-",$FF
    9 L) H2 G2 S$ i% m
  1242. .DB $FE,"DMC-",$FF,$00
    / ~* b" P, m* i# ?+ n/ |- Q

  1243. + A. [4 Z% x' L* c9 e# G
  1244. .IF Track_Name_Pos
    5 h+ u! ^9 E) g, v' N0 i, g
  1245. ;------------------------------" ~0 h4 _% X& I, _) i5 v, |- {
  1246. Track_Name_Addr;曲目名地址索引7 x2 J6 q8 s" a% L* s: O
  1247. .WORD Trackr_01
    - N3 l: [' G6 V' G
  1248. .WORD Trackr_02' P! E3 E: Z) x# \4 _6 N
  1249. .WORD Trackr_03
    2 \$ [- m& }: Q/ Z; D0 F
  1250. .WORD Trackr_04
    5 k, y( R9 T9 z7 V8 T9 p  x5 p
  1251. .WORD Trackr_055 b3 K4 J1 J3 @, B
  1252. .WORD Trackr_06% I, _% k+ F+ E& D, X9 u4 a
  1253. .WORD Trackr_07
    6 r6 B" k* l% Y! |
  1254. .WORD Trackr_08" I/ p0 P5 p8 Z$ e0 I* X2 s: b
  1255. .WORD Trackr_099 C2 o" W$ O, N- z* k! F& W
  1256. .WORD Trackr_10
    ; c) N5 @2 T" Y: V
  1257. .WORD Trackr_116 t0 y  o  t# |6 R) ^/ P
  1258. .WORD Trackr_12: Q- e. `' t$ f2 [9 Q# Z9 l; A: Y
  1259. .WORD Trackr_13
    9 O3 y' z) `# z( `: |; P& I) n
  1260. .WORD Trackr_14
    , _2 Z$ b2 A& ^! \* W
  1261. .WORD Trackr_154 ^4 p- j; K* E4 T6 N/ b
  1262. .WORD Trackr_16
    0 {$ X7 w# W5 ~' j) ]' i& l9 r
  1263. .WORD Trackr_17- O- I: G5 |( t+ \. J, G$ ?
  1264. .WORD Trackr_18. r0 u% s+ Y/ P/ t3 v
  1265. .WORD Trackr_19
    ( T7 V9 z+ S- ^3 j( z
  1266. .WORD Trackr_20
    : \1 v8 \+ V" H4 j9 V/ D( X
  1267. .WORD Trackr_217 ^1 F4 [, t/ m* X2 O
  1268. .WORD Trackr_22) Y4 S. }0 \6 K
  1269. .WORD Trackr_23
    / m" k6 v+ W8 g; Z
  1270. .WORD Trackr_24
    7 f! h. E5 ^  Y" U& d( m( L
  1271. .WORD Trackr_25% W5 n+ w0 c6 P1 \3 b
  1272. .WORD Trackr_26: N7 W1 h: l; B5 J6 A/ l
  1273. .WORD Trackr_27
    2 y0 W0 V( B7 L- {8 @5 w
  1274. .WORD Trackr_282 I4 \  }' m' r
  1275. .WORD Trackr_29
    8 B2 ?' L  i  J0 c7 x
  1276. .WORD Trackr_301 [7 T) F% j/ ~6 c* B" x/ @
  1277. .WORD Trackr_31" q/ ?+ u# z8 z9 x; e
  1278. .WORD Trackr_32
    5 d5 N6 w" j; Q2 _) T. u
  1279. .WORD Trackr_33
    9 S7 |, A8 e) [* i* q/ t
  1280. .WORD Trackr_34! q0 ]7 q8 e8 b9 Q& G6 ]5 B
  1281. .WORD Trackr_35
    5 y( x- Y: F, t( V, q3 E
  1282. .WORD Trackr_36
    * u* D% g4 J2 ^4 R. H
  1283. .WORD Trackr_37
    : ~1 v2 z( X' Y) r4 n6 }5 h
  1284. .WORD Trackr_38
    * U1 V  |2 T+ @) k. w- t
  1285. .WORD Trackr_39( m& h  U, W- O9 f& |/ B3 N' ?

  1286. ; Z9 G& a5 [2 m+ |+ W0 I( T! O
  1287. ;------------------------------( r2 p$ o, T- g& J: c$ l) M" m8 y# U
  1288. Trackr_Name_Data7 {( e3 Y9 z6 ~5 v( K0 a3 ~
  1289. Trackr_01 .DB $05,"BGM 1"6 U) W4 @! f. W* l
  1290. Trackr_02 .DB $05,"BGM 2"
    * i& a2 e( h% S) t+ L/ f! O; ~
  1291. Trackr_03 .DB $05,"BGM 3": f$ u( Q$ ?3 ^" t
  1292. Trackr_04 .DB $05,"BGM 4"
    6 a% e2 a0 P1 w, _
  1293. Trackr_05 .DB $05,"BGM 5"9 q, s( ?7 c/ Z0 ~* F- `0 T9 T
  1294. Trackr_06 .DB $05,"BGM 6"8 @0 s9 B% {+ m1 C
  1295. Trackr_07 .DB $05,"BGM 7"
    * A# J1 [8 X- ~! L6 C& g
  1296. Trackr_08 .DB $05,"GREAT"
    8 x. o5 O5 E. L1 I) N5 l" C
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ( e; }5 D& \$ i+ U& m2 u# N
  1298. Trackr_10 .DB $08,"BOSS2BGM"! }& q" X5 y; R& M1 A! u
  1299. Trackr_11 .DB $07,"P CLEAR", ^" A& ?! r/ [) ^
  1300. Trackr_12 .DB $07,"A CLEAR"
    / j+ v- b8 J5 A
  1301. Trackr_13 .DB $04,"OVER"
    6 a1 `$ a8 V, c3 J" [: R& r
  1302. Trackr_14 .DB $06,"ENDING"/ V2 J* Y$ C. @( X! [# \
  1303. Trackr_15 .DB $04,"SUTA"
    ' h  C. V6 x+ f: J
  1304. Trackr_16 .DB $07,"THUNDER"" K7 m, c9 U7 y8 ]
  1305. Trackr_17 .DB $04,"SHOT", P1 B; i; A2 `: S# `! A' q
  1306. Trackr_18 .DB $05,"LASER"8 ], Z) t+ N# x: L3 O
  1307. Trackr_19 .DB $06,"SPREAD"& A$ `. k" \" o) L* ~
  1308. Trackr_20 .DB $04,"FIRE"8 _, c3 |9 t' L, c0 `: |9 I
  1309. Trackr_21 .DB $06,"B SHOT"* u( Q9 ^& l& S7 @' i3 `5 c8 {9 \
  1310. Trackr_22 .DB $08,"T DAMEGE"
    2 V  r0 H3 s+ F+ X7 W2 F5 s+ K
  1311. Trackr_23 .DB $07,"HARETSU"
    ! S. F& C: B* ~' Q2 ]( V1 ]
  1312. Trackr_24 .DB $05,"T OUT"( t* i) e5 ?9 V* z
  1313. Trackr_25 .DB $05,"Z OUT"
    6 Z: `6 y" U. i, h3 h' S
  1314. Trackr_26 .DB $05,"A OUT"2 b# F+ F7 O7 F  ]
  1315. Trackr_27 .DB $04,"ROLL"
    6 w- B. }% u, `% `6 F
  1316. Trackr_28 .DB $06,"APPEAR"( f9 u8 E9 ^( o/ b
  1317. Trackr_29 .DB $05,"POWER"
    , `4 V4 q7 {- D8 i+ D
  1318. Trackr_30 .DB $07,"BOKK BK"8 [9 |0 f9 A3 _8 ^8 q
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    : Y. g5 d3 |7 q  r) l
  1320. Trackr_32 .DB $08,"BAKUHA 2"# v1 j+ X5 k1 C3 R% U& J9 Q3 I1 a
  1321. Trackr_33 .DB $05,"ARUKU"! y$ ?1 m$ a! p& L* x6 M
  1322. Trackr_34 .DB $06,"JIWARE": _4 @  i$ N! D) D
  1323. Trackr_35 .DB $05,"SILEN"
    8 _* {" B2 }' S& n
  1324. Trackr_36 .DB $05,"P 1UP") ?" w. A9 z& R4 \- H8 X9 a
  1325. Trackr_37 .DB $05,"P OUT"3 c4 F& @+ q3 d" Z6 I, L
  1326. Trackr_38 .DB $05,"B OUT"8 ?4 s1 L& R4 Q5 o4 w# x
  1327. Trackr_39 .DB $05,"PAUSE"2 v( Z1 r2 t5 @' ]" L. E! h
  1328. * d) Q* X8 }1 C$ [% d
  1329. .ENDIF) ?: c/ ^, P# B" t

  1330. 3 y. s" @9 Y, @4 \, }6 G
  1331. ;------------------------------& B2 J3 ~8 r* ~& P, O! }
  1332. Static_Text_Title_Data;静态文本数据
    . b5 Z2 ~" G, @2 z
  1333. .DB 12
    * F; l( O+ F& i, L! K1 W% i
  1334. .DB "SUPER CONTRA"
    ! H8 _" h$ Z" O5 ~
  1335. Static_Text_Author_Data
    , X, [$ S& ~" C% i
  1336. .DB 23/ g1 e) h6 n$ A4 N( n% Q' c# D
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    / T- R. F% ]$ `1 u) X/ X6 D) M9 f
  1338. Static_Text_Date_Data
    , w. y3 M! v* ~
  1339. .DB 10. ]3 q( T* K- |9 _" v
  1340. .DB "2023.07.11"
    $ \9 j& k9 q' x9 J; o8 q: W
  1341. 0 Y6 R- x# ]9 L
  1342. .BANK RESET_BANK & BANK_DATA_MASK, Y0 L3 f& ?* x7 X- n
  1343. .ORG RESET_ADDR
    6 G; w' f, _2 i! {8 u0 Z' A& ]
  1344. - @. z+ k9 h" B" O3 M
  1345. ( F8 k# u* F) }2 R+ `" f- d
  1346. ;==================================================
    . I9 c* u! a4 M- N
  1347. ;切到主程序bank
    . o( P1 F0 A/ i5 p2 n, w4 t& ~' b
  1348. SwitchMainBank0 L9 m( R7 e/ `5 \" S. b2 j3 |
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    0 l0 v, H) k; ?( |$ r3 Y9 m
  1350. JSR SwitchBank8000
      x0 a8 {% C- U% E1 U# ]
  1351. RTS1 b5 p% \* C0 s
  1352. * Q; v! W% _! ]5 j! E- H' ~! x
  1353. ;==================================================7 C0 T. N+ e2 S
  1354. SwitchBank8000;切换bank到8000-9FFF
    - J  q* z( R% [
  1355. PHA' l, p( u, m* Y% g& W# _. k
  1356. LDA #$06
    1 R) f  {9 ?& K+ S4 ?1 m
  1357. STA MMC3_BANK_CTRL4 V1 _5 E, B6 N4 H* o* {4 j* f
  1358. PLA) u& d9 X# e. R( L- i
  1359. STA MMC3_BANK_DATA/ H) r. i+ m. p0 D- ^& T0 G" G
  1360. RTS
    ! J' B- b2 G3 \; p

  1361. " O, ]* L+ k: j* ]" E
  1362. ;==================================================
    " D) \! ?+ u# H* k. a: d5 I
  1363. SwitchBankA000;切换bank到A000-BFFF
    4 Y1 |" f* x7 g. \2 D
  1364. PHA/ `8 M# v+ |7 W2 J- {; j. ]
  1365. LDA #$07
    * P2 g7 O: U" W6 W3 }: j8 W, k* ~
  1366. STA MMC3_BANK_CTRL
    ' S, x7 h" w  j( j4 V% w, l, U
  1367. PLA
    8 l) f+ z' [( ^, W* R! l  R* g
  1368. STA MMC3_BANK_DATA$ w' J  t2 B0 n5 q* i
  1369. RTS
    2 u( \  d1 h3 t  K
  1370. - [" o/ D& E# R  L8 \7 v6 ]
  1371. ;==================================================
    & b7 S( y7 j( K5 A8 l
  1372. Sund_Bank_Init;音乐bamk初始化6 f/ j6 N: J7 {8 r9 Q9 ?5 n
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK' ]" F! G; b8 j
  1374. STA Music_Bank_8000" L- r  g' P$ ?: r$ }
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK0 O1 ~; X) T3 W5 k
  1376. STA Music_Bank_A000
    3 C  I$ o' i0 o, n
  1377. RTS
    9 s' U5 G8 B/ F8 s" o+ n2 ~% \
  1378. , B. U! I" v/ b5 a3 i, a1 E1 z
  1379. ;==================================================+ W2 M; ^7 K! l3 d$ c8 p$ L1 f
  1380. Sund_Bank_Set;切换音乐bank
    4 a% }  D: t: P  q' L4 \3 `
  1381. LDA Music_Bank_8000$ q6 n8 g3 o6 q1 X+ y2 O, ~
  1382. JSR SwitchBank8000" ?. [3 H4 B/ J7 F
  1383. LDA Music_Bank_A0004 H7 e9 Y. n0 O5 s8 \" F
  1384. JSR SwitchBankA000% R1 a2 F- F% Z# V3 y
  1385. RTS
    6 S8 R; B- g& j2 ~

  1386. 9 F0 ?1 }6 u4 b  E+ u, e
  1387. ;==================================================# t$ X& I1 w8 y# s5 i4 H
  1388. Sound_Init;音乐初始化
      s, t( `4 w5 r; W6 W1 y3 ?
  1389. PHA
    ) D; Q/ [/ A% Q$ b& j* m' z
  1390. JSR Sund_Bank_Set+ g( w5 F8 r1 t6 G/ x9 G! \# s5 l
  1391. PLA  a& v# G+ Q% i/ d8 f
  1392. JSR Music_Init_Addr
    & k9 U( n& H# H# F0 D
  1393. JSR SwitchMainBank
    / g1 e  i- x: b, a

  1394. $ c8 S0 Q6 l- V$ Z; p
  1395. JSR Music_Bar_ReSet
    & |. }0 S9 f! d8 s3 E
  1396. JSR Time_ReSet
    + p) t: K& P2 J
  1397. LDA #$006 @5 S7 M- D/ T+ R7 e
  1398. STA Music_State
    2 f7 a) J, o- {2 y
  1399. JSR Music_Stata_Show
    7 i5 O1 M9 r1 F) c( m/ @: N$ e; O" N% v; |
  1400. .IF Track_Name_Pos
    % ?, O4 o5 z! Z+ \5 R  I
  1401. JSR Show_Track_Info
    6 E! y' v" G8 {
  1402. .ENDIF$ q, v; N/ _! z1 S3 {! ?
  1403. ; D0 ~7 i7 u. E% ^
  1404. RTS7 `3 P: y, D* Z+ O0 t( n

  1405. 3 r/ @8 H6 r  m; Y( K7 r/ @
  1406. ;==================================================, k% {/ _% E1 v1 G- y. l
  1407. Sound_Play;音乐播放$ c8 _3 D& @( e( F4 T6 n# h, }; H
  1408. PHA
    , A; [0 m# Y8 n$ G8 J. S
  1409. JSR Sund_Bank_Set
    ; G( ?- J! d0 N- \
  1410. PLA* L. d: g1 W7 b, r$ c5 ^( w$ {
  1411. LDA Music_State* T' U) U4 N9 t% y* {
  1412. BNE Sound_Play_End' g; U% r; K- c7 \! f0 R4 Y
  1413. JSR Music_Play_Addr
    ; f9 s: C0 q% D0 ?
  1414. Sound_Play_End
    ( K" g& ]5 @8 g
  1415. JSR SwitchMainBank
    ; U1 [. o4 J. [
  1416. RTS
    $ U# I4 V0 _. {

  1417. : c$ w3 L+ P% N# ~' q# j
  1418. ;==================================================
    3 R' z& H( }% T, c4 ]/ E
  1419. .IF Music_Reset_Addr
    7 M4 f" q5 ^* w5 F: U
  1420. Sound_Reset;音乐重设(如果有的话)( V8 @/ b+ [5 B' S' p
  1421. JSR Sund_Bank_Set
    ) ]7 p1 X2 `9 F
  1422. JSR Music_Reset_Addr$ L# T4 a! y% |7 U
  1423. JSR SwitchMainBank
    3 S% L6 V' f9 u
  1424. RTS
    % V% _5 r+ F, x& H  c
  1425. .ENDIF
    ; @: G2 w9 M  U4 k/ {: I
  1426. , D) U# Y4 |: t" D! ~
  1427. ;==================================================( T( l1 L' W0 b
  1428. MainLoop;死循环; A9 r5 y' b- s4 x
  1429. JMP MainLoop. W9 G4 ~4 r+ t) v  O
  1430. 9 y3 x" Z* n& M% |8 ^$ E8 c
  1431. ;==================================================
    ) p+ `( e3 E2 `8 i( C, v, B
  1432. NmiProgram;Nmi中断处理" b9 E0 Z& B1 c
  1433. PHA& T7 B% \' J5 H6 I
  1434. TXA' A- ^" z' o3 F) k) A
  1435. PHA
    / w4 r6 `* V# K
  1436. TYA1 G' p, B, s7 k5 I5 k+ i; \
  1437. PHA
    ) v- m- o4 Q0 m5 v$ H! P! J$ o* S
  1438. $ _2 |( @8 v5 K$ H: \# F" e
  1439. LDA PPU_STATUS
    % u( x  M7 {  F8 G) V# b6 k: f
  1440. LDA #$00
    ! h; P2 f- Z3 a
  1441. STA PPU_CTRL' _7 G" Q* a4 i3 ?; A. q8 Q( B  A
  1442. 4 a! U4 n9 [. u( {
  1443. ;切换主程序bank
    + r' U  _0 e7 i& ^
  1444. JSR SwitchMainBank
    ; X( Z( J+ ]2 Y

  1445. , v: s  J/ m! \* z3 z
  1446. ;NMI处理. v8 e+ T1 R( Q# O0 B" S
  1447. JSR NmiProgramProcess
    3 E( c' F8 @% T! t0 b8 a" Z  s- k% F

  1448. ) `# S  H6 o( W: B
  1449. Nmi_Proc_End, h- ^- @6 V" k
  1450. PLA0 T# l: Q7 ^0 i7 i0 U
  1451. TAY/ [& I" P- f. {
  1452. PLA
    ; o5 a; d9 e' A$ ]+ R) a5 ]
  1453. TAX# J( U7 _2 R7 M: |  x. \
  1454. PLA
    2 ^: K4 _1 X9 `8 {3 f
  1455. 0 @% @2 ^$ E8 I# P3 y
  1456. RTI
    % a7 J+ |' b  I/ T( ^

  1457. 0 y; Z$ l# ?- S" q2 ?8 v) {$ u. p
  1458. ;==================================================
    # W5 f, [& M. V9 o8 y2 a$ Z
  1459. ResetProgram;重置中断处理
    ! h( P" ]. ?. [8 _5 J2 l# q
  1460. SEI
    9 `* C$ K& {/ T5 f& k4 E+ T6 l
  1461. CLD
    8 F% k+ ~! q" g
  1462. LDA #$001 w1 l" ^% L* A$ E* K3 [
  1463. STA PPU_CTRL
    9 ~8 ]8 s- B3 w) ~8 w$ Y- x
  1464. STA PPU_MASK
    3 i2 w0 b( f- D. G! R
  1465. * n0 f$ G& e9 y; S: L+ g9 {! c4 g
  1466. JSR SwitchMainBank
    7 J: l5 v: E& ]: C0 e" W1 m
  1467. JMP ProgramBegin
    ; U2 V5 V/ P7 D0 R, k" o

  1468. " t) ?6 C7 r  U. j. S
  1469. ;==================================================( y% X( }( Y/ ?$ U
  1470. IrqProgram;Irq中断处理
    5 {* V+ t# [5 U5 \9 \6 `
  1471. RTI" x" W8 b/ L2 |$ e) ?7 G4 J
  1472. 1 o1 I$ g5 L) Z- w5 q. X
  1473. .IF SOUND_BAR_SHOW_ENABLE+ D9 M& i$ I- ?
  1474. .ORG $FF80, E9 x2 i) g& _& u% k" a  }
  1475. STA $4000,X
    4 s( N! f- T1 T5 Q4 b2 u1 R+ B
  1476. STA Sound_Bar + $00,X
    4 C! @0 m( n7 d0 k2 e; l
  1477. RTS
    0 F4 V. O7 X2 }' L

  1478. % G+ v% @# E' F
  1479. .ORG $FF887 L# N4 x1 W% J' k! A) m  I( ?  ]
  1480. STA $4000,Y
    3 M0 V& M2 C7 |2 \- V9 L' d
  1481. STA Sound_Bar + $00,Y
    0 `2 b4 ~- m; \3 n6 Y! H' ^1 D% m4 w0 v
  1482. RTS
    1 G# L( y- G9 C3 k
  1483. ) D- R1 M: q# o/ K
  1484. .ORG $FF90! |* T- n* E: G% \8 X
  1485. STA $4004,X" f2 e! A, L8 [; L; y% E/ {. j
  1486. STA Sound_Bar + $04,X
    1 _0 H5 ~6 T5 e, |0 v3 P
  1487. RTS4 w8 d2 A5 y) P- z& I$ Q  s
  1488. . w2 v+ o( N& q$ J# ]& L* D, h
  1489. .ORG $FF98
    - J9 x+ e1 y& N  X5 Y+ R$ r
  1490. STA $4004,Y
    ; v: P% u2 V4 N# E3 R  F' }
  1491. STA Sound_Bar + $04,Y
    - U4 p) T0 b0 ]7 w/ W2 D5 U
  1492. RTS
    ) A* Y# h( r# O( [1 Z$ }

  1493. 5 f0 H) v3 g6 Q/ }
  1494. .ORG $FFA0
    4 L( F# ]# t  s7 ~
  1495. STA $4008,X
    ! G5 [1 h0 h, f, }
  1496. STA Sound_Bar + $08,X- b; ]6 |& b* v  e$ n" s0 N( \
  1497. RTS, I2 f9 q* C8 o
  1498. : f. r, n/ g  {$ X
  1499. .ORG $FFA8
    % M. h3 Y# h( h  A
  1500. STA $4008,Y6 Y6 W" P' x! Q! i: w' f
  1501. STA Sound_Bar + $08,Y- |3 A! ^  m! z) o5 |4 n  ?
  1502. RTS. H' |3 T9 }1 o( m
  1503. ( U) R9 w) P* Z$ G# U* e' T" e
  1504. .ORG $FFB0
    # P- `! H* q, O% I) `' Q2 ], P
  1505. STA $400C,X
    # z8 Y$ K+ a2 R2 C2 M+ t3 }
  1506. STA Sound_Bar + $0C,X9 a, R. y$ z6 T- S6 J) X  v
  1507. RTS9 o0 ?) N! K" ^$ }6 k* |/ Y
  1508. 0 P# j9 H0 ]! k7 c
  1509. .ORG $FFB8
    5 k( e5 X# A% |5 L" }0 g  _' j( ^
  1510. STA $400C,Y
    % _; _* N% l, k# Q2 v8 Z5 S) ]
  1511. STA Sound_Bar + $0C,Y( w, V- S: q5 J: Y
  1512. RTS4 N; H+ B) y4 \" i# a

  1513. # ~# O8 d' X2 \) s1 L
  1514. .ORG $FFC0  S3 m' W; h& p* H6 B& p6 o
  1515. STA $4000
    3 x, C/ M/ ?; V# t) H
  1516. STA Sound_Bar + $00
    $ n% k* g4 O4 u
  1517. RTS  R0 `* B6 j3 b" n! T

  1518. 6 a) e$ H" ?( m2 T4 @
  1519. .ORG $FFC8
    & H% t( W. o) ^7 u6 I8 }
  1520. STA $4004- i0 c( W$ y/ @
  1521. STA Sound_Bar + $041 a! O' I% }% I
  1522. RTS
    . ^9 h8 `, M- H" G/ h/ `, O
  1523. ; s& w/ \% H* ~+ [" l; A/ ]
  1524. .ORG $FFD0
    ; s- V9 ]" s$ T5 m, j1 f
  1525. STA $4008
    % k  E( f2 P+ R
  1526. STA Sound_Bar + $083 J( i1 u1 g% [: B  G% C1 I
  1527. RTS8 }0 A. U7 {0 B
  1528. 3 f" V) O+ ~2 H- n/ _
  1529. .ORG $FFD8
    3 g% W+ y9 r+ r
  1530. STA $400C. b/ b0 p. L; r. y9 C
  1531. STA Sound_Bar + $0C
    - K' J2 {- l! p4 p% Z
  1532. RTS  E! j: e, j! h( ?" }7 K

  1533. : D: l) i) Q- g/ P; A! c
  1534. .ENDIF
    ' O, N3 c2 ^  g4 A* ?+ e7 K8 ]$ i

  1535. & o- T# L. X9 r+ B
  1536. .ORG $FFFA
    ( c) a8 [4 {  D0 p2 `
  1537. .WORD NmiProgram
    3 q% w9 X7 ]2 a
  1538. .WORD ResetProgram
    5 q' g1 C7 a* Y! a. [! f
  1539. .WORD IrqProgram
复制代码
" _& t% q& e/ A& y1 ]

# p# d( Z$ z8 p$ R/ S) E
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1300 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3300 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-25 12:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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