设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
$ G. Q, x/ h  o; P0 A9 C$ m" U% P8 `" @: h) M& ~9 N. V) [
1.魂斗罗
" h& A0 S# l- [4 Q% S2.超级魂斗罗3 I$ J" M& N% q; I- H4 y/ C
3.赤影战士& r  N* `# O( \1 j2 T- N
4.忍者龙剑传2
9 O: |/ x- o9 B3 {. x3 X
, C6 |) k0 h2 S  l
" X6 m+ k5 Y1 `$ t% @) ?$ \: v5 U# k' p2 q
2 g3 ]9 q0 m% o6 g( g
源码:
6 k- T+ o- O. z$ o* q" T
  1. ;[FC音乐][播放器模板]8 L- q. ?1 m1 F% S5 c6 m
  2. ;FlameCyclone 20230710+ x0 I. ^* y" n- U6 w. u6 _

  3. & X( Y; @- f  f( f
  4. ;文件头
    & \- a3 r8 Q% a' g
  5. ;======================================================================
    6 c) Y6 |/ O, A; R7 A' R( u% F) s$ C' T
  6. .INESPRG 4                                              ;16KB PRG 数量
    % X/ r- D) k6 p
  7. .INESCHR 0                                               ;8KB CHR 数量
    - L, E# ?8 S9 ~  R
  8. .INESMAP 4                                                   ;mapper 4' M8 |! h5 X+ z3 R4 I8 `1 |
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    # T+ [& O2 N+ [7 o; G& \. \9 g

  10. - m( e. H/ c; X9 Z" ^" K, G, j
  11. ;==================================================2 Z7 a  m+ V7 m" Q% i0 H# C
  12. SOUND_BAR_SHOW_ENABLE       = 1
    # {; s) R$ A1 Z  U( g
  13. ;==================================================
    , _/ g, @; f: i0 _- ]7 N9 k1 W
  14. BANK_DATA_MASK              = $07
    ; W9 n. R9 \4 P. j
  15. ;==================================================8 G  u2 ~% U2 _) O- A
  16. SOUND_DATA_BANK_0           = $005 L: C) D$ |+ P# l8 q. J
  17. SOUND_DATA_BANK_1           = $013 a2 U6 ~3 v9 [! L3 P
  18. SOUND_DATA_BANK_2           = $02
    ) B! P- v  |0 x  L+ C6 d7 l/ d
  19. SOUND_DATA_BANK_C000        = $06
    + i5 @" C2 y3 ]
  20. 6 B: }) m5 h. f( O  ^6 \7 h* t
  21. ;-------------------------------------------------
      K% _' ^3 e; n. z
  22. CHR_DATA_BANK               = $04
    " @, h8 R& q" O$ s" ?: m6 k" n; Z* ?4 v
  23. CHR_DATA_ADDR               = $A000* U" N! z5 g, }3 R
  24. ;-------------------------------------------------
      R3 |2 v0 w) Y: V& a& ^# D
  25. PROGRAM_BANK                = $05
      Q$ G5 R" G/ e  A( e
  26. PROGRAM_ADDR                = $8000
    : M9 s  d5 A+ _9 Y; r
  27. ;-------------------------------------------------& A! Z1 D; A* c- \& Z0 X9 B9 H' F$ v
  28. RESET_BANK                  = $07. y8 x8 [1 n6 [% |6 @: y
  29. RESET_ADDR                  = $FE00! b2 t. c: R- r- l6 R
  30. ;==================================================
    ) |  v' G2 T, z1 |, k
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    & n  J8 n" b: D5 d8 O+ S
  32. Music_Play_Addr             = $813C ;音乐播放地址
      ^; X  R% d" ~/ ^& ^" r
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    8 k/ Y/ f1 C- [$ X+ m; T% N, o+ Q
  34. ;==================================================5 h! l% T3 I6 A+ ~7 r
  35. Music_Song_Total            = 039  ;全部曲目总数$ w5 @2 u5 b$ I2 N! Z: S
  36. Music_Start_Song            = 007  ;初始播放曲目/ S/ e2 j5 h2 o( h" y. a
  37. ;==================================================- A, Z2 y3 e" K" F5 e1 n# l. D
  38. 1 @3 E" j: \" y2 G
  39. ;==================================================
    8 R* m6 |6 R7 j$ R' D' z
  40. Title_Text_Pos      = $210D ;标题文本位置
    $ [& q, b8 A( T; @5 e- E
  41. Author_Info_Pos     = $2284 ;作者文本位置( X; }# O/ ?5 s1 P/ z
  42. Date_Info_Pos       = $22CB ;日期文本位置
    + a$ f/ m7 @) F" o: j
  43. ;------------------------------3 [7 g  Q$ w9 G5 i( T5 c) l: ~
  44. ;------------------------------
    , x  M9 C3 ?7 r( J* f( n8 Z
  45. .IF SOUND_BAR_SHOW_ENABLE8 s+ n' u+ r! e' w
  46. Play_Index_Pos      = $21B3 ;当前曲目位置5 k8 Y. Y8 f; B1 G% j7 c
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    & A& J1 ]6 z+ I! i) v! K, c5 x
  48. Play_State_Pos      = $2233 ;播放状态位置0 b6 U  a. X5 h4 ?
  49. .ELSE
    ; K7 j1 K5 `8 t8 k8 d& X1 b4 _

  50. # T4 {5 z6 ^! L  j
  51. .IF Music_Song_Total > 995 M  U" ^! p7 Z
  52. Play_Index_Pos      = $21AC ;当前曲目位置8 D9 K) A- k8 E' a' n
  53. .ELSE& s6 {/ d2 K$ d+ ]' ]
  54. ! J5 c9 C1 j( b8 [6 K0 ?
  55. .IF Music_Song_Total > 9
    ' d. }& W2 C* F1 z0 `- f1 u
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    5 q& M. t0 W  e" X- R$ y3 H4 m
  57. .ELSE  y& S& p- J) R7 U; w
  58. Play_Index_Pos      = $21AE ;当前曲目位置9 I$ j# r/ k$ }# j
  59. .ENDIF
    ; A+ t1 ]7 Z. y( ~- _3 r

  60. / {. M9 W1 C3 l* N
  61. .ENDIF/ g2 |6 y1 m" U+ p( R+ w4 e* K
  62. 0 d4 {& e9 M- u. F  s
  63. , g9 m/ m- A2 M' w7 O  y5 w9 r
  64. Play_Time_Pos       = $21EC ;播放时间位置$ ^) z% ]1 R  f% s( `! e
  65. Play_State_Pos      = $222C ;播放状态位置
    $ Y7 S' V* B; x3 k) x
  66. .ENDIF
    ' \, Y1 k/ i. n
  67. ;------------------------------
    8 W% I' [7 f. C- K
  68. Track_Name_Pos      = $216B ;曲目文本位置
    , X( K% D. D: ^! k# ~
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    / v; w) z" v& P2 y) ^, o
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
      r9 N6 Q4 e* D/ s' @& R3 K+ H
  71. ;==================================================
    - E8 c1 t  t& n2 j4 Q6 R
  72. Scroll_X = $006 i7 M. B5 c! V& g! `, |) f
  73. Scroll_Y = $06$ c9 V# T1 Z( \6 ^. D$ n) R
  74. ;==================================================
    9 W5 B+ E3 j+ c: O) p
  75. RAM_Cln_1       = $0100( W! J9 E/ \* r9 w
  76. RAM_Cln_1_Size  = $80
    7 [# p1 g, e/ h0 D7 L: A3 b
  77. RAM_Cln_2       = $00E0
    " Y/ t% T; I; `4 O. @  n; Y
  78. RAM_Cln_2_Size  = $201 V4 ]8 y1 `# j8 T: z
  79. RAM_Cln_3       = $00E06 p  M/ q4 k: V) g3 x
  80. RAM_Cln_3_Size  = $20& a0 ~! F# m/ W0 }* D! ]! h  x

  81. & P3 l7 r7 a; E: b
  82. ;==================================================
    * H3 N* {% ]  _! l$ x
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器: K/ f8 A! @8 W
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器/ G- K+ G; i2 J4 j' K; ]5 N
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    - F2 E$ x8 @2 w7 b. o* u- @
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    + b/ }# c' P! R1 L, N
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    + K$ M' \2 Q# s1 y& ?( v  K1 b
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    5 }& G' Y0 q/ L
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加% ~  V4 T. M% V! J& A$ k" t
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32   d$ f- G# W8 A- ^
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    $ d! T- q; M: q' x5 l# t9 |, r: j9 ~- k
  92. APU_STATUS              =   $4015   ;声音通道切换
    * i4 c0 M  A0 \' u. Q. c* x! t
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ; d. G# V" w) f, f. d& n& s
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    % W- n, h) I* R9 F! W/ z9 \6 u
  95. ;==================================================
    9 `. l9 k. O# _+ T/ u) u' L- }
  96. MMC3_BANK_CTRL          =   $8000+ q6 |8 t3 J. k# K# b3 Z
  97. MMC3_BANK_DATA          =   $8001( w5 L$ c* a8 G2 h, {- H' F
  98. MMC3_MIRRORING          =   $A000
    ) p; |) B: P8 j" V8 i8 `$ F4 `
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    ( ^9 a* @/ K3 r) V8 Q8 x
  100. MMC3_IRQ_LATCH          =   $C000
    5 F. V5 g( l4 r  n6 j7 v; `, Q8 Y
  101. MMC3_IRQ_RELOAD         =   $C0018 y7 P5 o2 N  h% u- }; [; f3 _
  102. MMC3_IRQ_DISABLE        =   $E0007 F' v0 W# Z0 D- h$ m
  103. MMC3_IRQ_ENABLE         =   $E001: E) e; E4 ?9 J  c5 j/ s
  104. 4 w% U, M/ n. ~  c
  105. ;音乐数据块0 ?/ P" o/ D( ?' U* q& h( {1 H

  106. 4 }# |  u* D$ k/ S
  107. ;======================================================================
    0 v" J! D9 ?3 W& U/ Q
  108. .IF SOUND_BAR_SHOW_ENABLE
    6 M! P2 `4 ~( E4 y. k! y
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    : a% Y& f8 E. k6 @* {- @
  110. .INCBIN "sound_bank_bar/music_data_0.bank"3 |& j( i- X% ?

  111. - u4 v1 t, P& z! N; r
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK9 N3 y- C2 d2 A& \
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    $ g2 f8 G1 g$ d  O# J

  114. 8 ?+ c, M% Q3 H* \2 A# ~
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK: [$ _6 k' v3 ^
  116. .INCBIN "sound_bank_bar/music_data_2.bank"5 D- t' e" _. @7 x, z8 X! G

  117. " l$ \* o/ @- `
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    3 U% K5 w9 h1 }- m) c
  119. .INCBIN "sound_bank_bar/music_data_3.bank"2 r& w) \3 ?5 c5 ?4 y8 |/ F/ F

  120.   d6 x; U- S  ^& U7 m
  121. .ELSE
    5 ]0 l. q9 Y% m+ T! E1 ~
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    * L4 e; f9 n: G! n
  123. .INCBIN "sound_bank/music_data_0.bank"
    , x' m; V, _7 H6 d/ R: c, x- J

  124. ( i, @1 ?( b: Q6 M( B4 b# [( N) b
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    4 x# D: q& j- H  a# W
  126. .INCBIN "sound_bank/music_data_1.bank"! ^, T( w( g- g' n0 t) f4 g5 I
  127. ' S* E, h) V% D! ~6 z: K
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK- T( C* y& s( U& p9 ]1 O2 }9 n
  129. .INCBIN "sound_bank/music_data_2.bank"
    8 p# q% a8 }$ k9 s; f( D3 e
  130. 4 G. o* ^' H5 }8 i% D
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    & o! S0 [: S* S7 l( i7 i
  132. .INCBIN "sound_bank/music_data_3.bank"
    9 X6 A4 x; o8 ^6 `( ]' I4 B. m
  133. .ENDIF
    ! F8 i) p) t& c9 `+ ?/ `+ k9 T

  134. 0 @' E+ k# ?1 b' ^5 @
  135. ;CHR图形数据$ t9 Y* f6 s# d* r  y
  136. ;======================================================================
    + J8 g5 Q* v8 `: K
  137. .BANK CHR_DATA_BANK
    9 q. Z" e4 h2 l. Z$ V# z2 h
  138. .INCBIN "chr_bank/chr_data.chr"0 ?3 U+ ^6 R  |
  139. 0 ^& }" Q) X, |3 c# f7 x
  140. ;==================================================( @' n- Z7 e# ^
  141. PPU_Addr        = $0300: ~" c2 F* Z) v/ z! i; F7 I
  142. Palette_Addr    = $03C05 J( l# k' [, n# F) \
  143. Sound_Bar       = PPU_Addr+$E04 c0 ~  S, C$ j5 G( S: I% i9 B
  144. ;==================================================6 g0 q# l/ y4 A4 K& b7 X* i) E# r
  145. Palette_Update_Addr     = Palette_Addr+$0D
    + v& `$ x2 {2 e; `" p. ]
  146. Palette_Update_Max      = $2C
    7 F/ f6 F: @2 z  B: g3 [$ J
  147. Palette_Update_Min      = $21, L3 [: y9 ^" I0 t2 l& Q
  148. Palette_Update_Interval = 605 Z" [3 K8 b$ ?( U# W
  149. ;==================================================- Z! v/ J( I% L  C! w
  150. Sound_Bar_Cnt       = PPU_Addr+$F0' \  q5 ?$ j$ g. X: q/ s
  151. Screen_State        = Sound_Bar_Cnt+$01, V. s( \2 V: i" |4 l
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    2 d. v" v/ t0 o; u) \) t$ G
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03/ ~  {; `, V2 z. g  j
  154. PPU_Addr_L          = Sound_Bar_Cnt+$043 G, l+ Q$ ?& H5 P' F
  155. ;==================================================
    , F' c4 g2 Y& j8 h4 D# L+ l8 ~
  156. Data_L              = $70
    $ {2 ?; k# F, x- k, n& n2 l) Z8 r
  157. Data_H              = Data_L + $01+ t. y4 ?" `9 L6 _8 p, r/ ]8 f
  158. Data_Cnt            = Data_L + $023 H* f% t; _5 m- ~' _3 K. o
  159. Data_Buf            = Data_L + $03
    + S2 u! s2 Y+ z
  160. Time_Wait_Cnt       = Data_L + $04# }% b- p# T% Q% `9 |
  161. Palette_Wait_Cnt    = Data_L + $05
    # K! }& U: V! G, \  H- s
  162. Palette_Update_Flag = Data_L + $064 E9 G$ x0 H7 R8 V2 K" q. ~
  163. Show_Track_Name     = Data_L + $07
    7 [$ k( R& m/ Q. Z7 F; [" Y
  164. ;==================================================
    8 h4 j5 b% p4 m0 H/ k. v% q* Z! a! W
  165. Key_Keep            = Show_Track_Name + 1
    8 D- V* U+ L5 l+ R* p4 a& s
  166. Key_Once            = Key_Keep+$01
    ' S8 K9 ?; P0 N* ~
  167. Key_Kemp            = Key_Keep+$02
    8 ^# e# ~" V. S
  168. Key_Temp            = Key_Keep+$03- H6 P7 D9 s- Z4 U1 r, e' A( V
  169. Key_Getv            = Key_Keep+$04
    9 r* i3 @* S, B) ~; ?  A
  170. ;==================================================, w/ m5 ]! j% P- N* g% p" ]
  171. Music_Cur           = Key_Getv+$014 v4 r# h) E8 o( M! `8 C2 W
  172. Music_Last          = Music_Cur+$01
    0 \. W3 I9 v' }6 m; J& I; p1 _2 @
  173. Music_State         = Music_Cur+$02% E" D# g! J5 G. d( [. i& m! K
  174. ;==================================================
    + ]& l% o8 R$ L- p7 ?: Z
  175. HEX_Data            = Music_State+$01
    : ~, W# A, g6 {  ^, ^! X
  176. DEC_H               = HEX_Data+$01% G( h+ f5 o# y5 J: ?  D5 A
  177. DEC_T               = HEX_Data+$02% g  h1 I& g. L2 ?) ^& K% a
  178. DEC_L               = HEX_Data+$03
    1 \. b% W0 E! B" }8 R% `  X
  179. ;==================================================
    7 `% S+ P6 o6 ]( a1 U; k
  180. Time_S              = DEC_L+$01
    & t0 h* s( x# f
  181. Time_M              = Time_S+$01. J9 N$ g" U  k0 k' ~4 \$ e
  182. Time_H              = Time_S+$02
    3 [5 D8 r2 `0 c" e3 @! u
  183. Time_Cnt            = Time_S+$03
    2 `5 U0 {# ~7 ^$ w

  184. ' h4 l2 I/ D+ Q7 X
  185. ;==================================================* D- h1 r' \0 `- J2 d( W) E4 @. [
  186. Music_Bank_8000 = Time_Cnt + 1
    ) d; K. ~- X2 Z! @  m
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    " J6 g; a6 \/ F4 Z( D/ g
  188. ;==================================================
    # t8 I$ Q. u; h
  189. $ r) m1 m7 w( E/ X; K* [
  190. ;======================================================================
    6 A' y; O& d2 K
  191. .BANK PROGRAM_BANK
    , Z/ X) i' F; b
  192. .ORG PROGRAM_ADDR- L' `; ]/ ]. L# p, c$ @: ~( H
  193. 2 P, M! R$ [; ^' N) u
  194. ;==================================================, x- k3 x$ G. R" r
  195. NmiProgramProcess;NMI中断程序处理3 i! Q( f& a: i. U2 w1 |! C2 K
  196. ;处理PPU图像
    5 C4 u  ?& n5 T# S/ D
  197. JSR PPU_Proc
    * l$ k, H8 u- o& C% D* E. S

  198. * C8 x  R& h- [5 l- v* h( }
  199. ;启用NMI中断$ N$ F/ X3 Y6 P3 D
  200. LDA #$80# u2 V6 c7 o" ~( R: l+ I
  201. STA PPU_CTRL
    % U$ @8 ~+ g, I0 m6 t

  202. , G2 _% Q8 y8 Z7 I- M( k
  203. ;更新调色板! {. F! M) M  k
  204. JSR Update_Palette_Data
    $ J0 r0 f* X/ P" c( A' M

  205. / u* _2 v' k& c
  206. ;显示时间(缓冲)
    ( C: I& e# q5 k+ k$ F
  207. JSR Time_Show
    ; e# ?& t. }! ~; S0 c
  208. : C' ~" @& ]) a( P( S3 s
  209. ;播放计时. G8 d* g( d0 U$ Y2 s
  210. JSR Time_Count4 K3 U! N% J9 Q, h

  211. ' D6 O; j4 e) t/ a
  212. ;播放声音+ f4 Q; l" L: J4 y8 J4 r
  213. JSR Sound_Play
    1 _  O) }% m2 U1 C& l/ W5 ^- E+ v

  214. 7 G) M$ x: c" s
  215. ;切换音乐(手柄触发)
    1 {4 r7 Y5 N! l( y
  216. JSR Music_Switch
      U9 L' l' M9 f+ x9 Z7 }8 v' l3 \
  217. 1 e* v: A" W; q8 A- A  u9 s3 _
  218. ;音乐显示(缓冲)! P, f- g/ }1 l) H7 _  I4 I# ~
  219. .IF SOUND_BAR_SHOW_ENABLE, ]( o5 J  L1 M. k5 p( L
  220. JSR Music_Vision
    ' ]# Q# Z9 D% V: Q( p0 V
  221. .ENDIF- `% }- e# S( h9 F, H( |8 v

  222. " e6 l! P8 J$ Y# v
  223. LDA Time_Wait_Cnt
    3 R) T. W' [3 x4 L
  224. BEQ NmiProgramProcessEnd9 \9 I7 O& m; A4 n7 ~4 J: I
  225. DEC Time_Wait_Cnt
    8 j7 z6 ], V8 h" ?
  226. NmiProgramProcessEnd
    4 I7 b4 O: ~1 Q$ [- S' u
  227. RTS
    " x" y2 V! S  w, B* N4 u1 h7 r1 _
  228. ! y+ {/ V# X( S) K2 }
  229. ;==================================================
    3 o& m4 G5 C0 y$ j5 d( u8 N
  230. ProgramBegin;主程序# Z' r7 J; Q( I( U
  231. LDA #$00
    * v! x8 O2 o. j$ U# C
  232. STA PPU_CTRL" K7 `: r& }) F2 y. i- g) T1 N
  233. STA PPU_STATUS' i7 B* M0 F+ W2 k8 T2 O/ x
  234. STA PPU_MASK
    0 H. A3 L. k" d! P& B2 t
  235. STA APU_STATUS* H7 Z3 Z) z4 R0 z0 C
  236. STA PPU_SCROLL
    ; L8 X" T' V/ D5 g" l# p6 K
  237. STA PPU_SCROLL. O% ?5 U% K7 X" ]
  238. LDA #$C0- x8 Y1 d) [# v8 R; T! q) ]
  239. STA JOY2_FRAME$ C: m2 B: n. l3 J6 r  y3 y

  240. * p/ c5 G" Q) x- G; o# G0 _
  241. LDX #$FF
    * M1 a$ s; {; J; I
  242. TXS
    6 L& `9 k, |4 \' n/ R! e
  243. LDA #$00
    6 v+ Z4 |6 a5 k9 l: o1 [1 t3 S
  244. STA PPU_CTRL/ d8 W, }; }. {) X+ R( R2 \- j% d
  245. STA PPU_MASK
    ; U2 N5 D% T4 n$ ^
  246. STA MMC3_IRQ_DISABLE
    # c% q: L  |9 O* x1 x
  247. 6 [% j+ y* n& q3 d% {, S  w) o* f
  248. ;==============================: P* O4 X- C5 c1 s
  249. ;调色板清空9 W6 `6 N/ k7 g& _( ?* @
  250. LDA #$3F
    : b, R, b; U2 @3 s. S
  251. STA PPU_ADDRESS
    ) l, o+ I+ j* A+ u
  252. LDA #$00/ N# V3 [/ a5 K$ {" D3 b' Z) L# T' b
  253. STA PPU_ADDRESS0 Q$ N$ u# w+ D) h
  254. LDA #$0F/ x/ L1 v9 a: o" D7 D  K. ~
  255. Palette_Clear
    + s2 D: h( i: `; z/ p2 n
  256. STA PPU_DATA
      D, O5 v5 }, \; Z
  257. INX
    / M8 k! b. _" ?) ~  P
  258. CPX #$20
      S# Z1 U& b; C) Q+ `0 V5 ?  j
  259. BCC Palette_Clear
    # |' @1 w0 m: L  s" _# J
  260. LDA #$00
    7 N/ R" I* C9 \8 r* g1 N& {' h
  261. STA APU_STATUS
    $ B4 f7 o0 o' I. }) o$ P6 V
  262. ;==============================7 M* S% r6 F4 G% x$ N1 ]7 Q" S
  263. ;初始化背景调色板
      C# R7 t; E6 i5 _) O
  264. JSR Set_Palette_Color; g" {0 [, f; E3 z* l! Z/ k
  265. JSR Set_NameTable_Attributes- y- p) E$ s; N8 |: |  e7 X

  266. 1 `' @0 ?( v& w# F0 j5 c2 D
  267. ;==============================
    # b. ~1 I3 t0 `) ]7 N* q' x( z
  268. ;RAM初始化2 v5 j' o$ C; q1 w) S  u/ H
  269. RAM_Clear_All
    8 D6 \, z" ^1 S$ d
  270. LDX #$00) N5 e# {! u$ t
  271. LDA #$00. d/ |2 a3 d$ g& v" ?# q
  272. RAM_Clear_All_Start4 `0 R& Q7 e. G# w7 g
  273. STA $00,X
    7 G4 q/ C( t8 Y6 {2 M+ v/ q
  274. STA $0100,X* Y$ J1 r  y' b
  275. STA $0200,X
    * G" }! s- O3 l0 T( g# [
  276. STA $0300,X
    4 [  C- f5 U# j. ^. X; y5 X
  277. STA $0400,X1 R8 T( y' k9 @* f  G! M; a7 Q
  278. STA $0500,X1 F4 ]1 h* R3 W3 n; n
  279. STA $0600,X
    : d3 d$ }: R: v! @
  280. STA $0700,X
    , c( B1 ~4 _% I3 j* C/ s
  281. INX
    7 |4 a* R3 V, `) L$ x* T7 ]# V
  282. BNE RAM_Clear_All_Start
    : |4 n% E9 |, c" g: K) t/ i
  283. ( J) Z& x) O! T* F
  284. JSR VramInit, J" z9 x# d7 K1 C! t
  285. JSR Init_Palette_Addr, b9 h  K9 k9 [, Y  O- k& g  W

  286. 4 G1 {, w+ O( Z" g% m
  287. .IF Music_Reset_Addr0 `% |+ |, o7 H, u4 H* P
  288. JSR Sound_Reset
    , ?5 N0 Z! [1 B1 ^( r8 l
  289. .Endif: j6 J& b& N. f

  290. 5 p/ F; w3 G- S! P9 S0 n
  291. LDA #Music_Start_Song-$01
    - w8 |2 k3 X- p( L
  292. STA Music_Cur- a/ ]4 T. {, ^7 m4 d5 ^7 E' e$ j9 i

  293. 1 A, H  Q% O4 J( l* t( ^% h
  294. JSR Show_Music_Text' @4 j# _' j0 ~; O( p' x
  295. % q' S+ F* A+ u
  296. .IF SOUND_BAR_SHOW_ENABLE, K% z% e3 @$ i) s) y; p! j6 e2 g
  297. JSR Sound_Bar_Text_Set
    2 M6 h% J# f8 }
  298. .ENDIF
    ; ~) {5 A1 u- M( L4 k! A
  299. 0 H& S9 V2 H. F
  300. .IF Track_Name_Pos
    , L4 t; M! [. Z
  301. JSR Show_Track_Info
      H4 d  b. p2 r0 _& Q3 B. b
  302. .ENDIF: D/ t2 q2 C  `( L) v$ A0 k; S

  303. . \  W5 [0 ^' n# \6 f
  304. JSR PPU_Proc* ]8 S( }" C" ^' }6 T
  305. : W8 a6 y8 m7 I7 T
  306. LDA #$0E
    9 j& S: G& C, C2 d$ y9 m# W3 W; G
  307. STA Screen_State
    % A/ C+ N2 K- m2 z

  308. & b. k% a6 W5 @( u2 W
  309. JSR Sund_Bank_Init! U! z3 U4 y" O" F

  310. 7 v' E2 ~% Y4 k2 y1 K0 L7 A
  311. JSR Music_Show
    2 K1 o- m  A; T( B9 L( x8 L
  312. JSR Time_Show
    & Y& i- H7 I# ?. N, f! L) I2 `
  313. JSR Music_Stata_Show
    , t& O# W, |/ w# S) a
  314. JSR Time_Delay! u9 V: r4 v, E* A5 R5 ?/ Y: v* H

  315. * n8 c$ j$ E3 r7 ~  ?' k& O
  316. 4 X& S  K1 O* y- _* n; W8 q9 e
  317. LDA #$80
    2 B( ~$ ], v2 W9 v$ B4 Y- V7 Z
  318. STA PPU_CTRL
    4 A% O  }4 {" d. Y2 @

  319. 8 V1 y/ Y$ z3 n
  320. LDA #$206 D, m% F* j0 q! t: M* M
  321. STA Time_Wait_Cnt+ R. j4 A/ A) ^3 f

  322. - |- z3 T1 L' n+ s; W
  323. Wait_Time_Over
    ) j  Y/ j1 B$ @+ M) L0 m3 B
  324. LDA Time_Wait_Cnt, t' }# o# O: Q' j
  325. BNE Wait_Time_Over& \& c0 L! t+ @8 G
  326. ( j2 ^! V  M2 A1 h. k5 C% L
  327. LDA #$1F
    # X1 `8 e4 t# n! u: Y
  328. STA APU_STATUS
    9 I% H6 M+ V7 ?
  329. LDA Music_Cur" }- D1 u9 ~6 @
  330. JSR Sound_Init
    # a% `) G7 e0 \$ p+ D

  331. $ r3 D6 x3 ?  T7 ?
  332. JMP MainLoop! G6 o% i* c# Y1 y  l
  333. ) D: n. Y, @0 ^. y4 m+ H9 g6 q
  334. ;==============================- C6 V- s/ y1 }5 [9 [) Y
  335. Time_Delay;延时等待3 e# V+ _- b3 m: S1 ~: m% e5 ^
  336. LDA PPU_STATUS" A6 `! w. U! V. O: p6 j4 ]
  337. BPL Time_Delay
    4 L% ?+ m% I& _& q* q1 d- z
  338. RTS' J# {% i. W8 o$ j0 h
  339. : V7 i" q, z0 j, ~6 g3 Y
  340. ;==============================
    ' i, A" h" b0 }  P0 t
  341. VramInit;初始化图形内存4 J: X  `2 e3 p
  342. LDA #CHR_DATA_BANK
    3 {5 _" |2 w" ^: ?7 x+ N
  343. JSR SwitchBankA000
    / o! x& [  L0 D2 Q4 u. q
  344. LDA #LOW(CHR_DATA_ADDR)
    9 Z, X, Q" \, o) Y
  345. STA <Data_L* o. u  \! v7 e  U; X3 z1 g
  346. LDA #HIGH(CHR_DATA_ADDR): _8 N0 i( H: y4 R! H0 a- W
  347. STA <Data_H
    $ ^$ s3 B) k2 J+ y
  348. LDY #$00
    ( W5 U' |. a) V0 w% u7 h- V6 P; r
  349. LDX #$20
      H( _( X( C3 ^, \# @
  350. LDA #$003 F& l: m5 f7 y  W- s$ V7 N
  351. STA PPU_ADDRESS
    - T. j* B! B: I8 ?! c% ?
  352. STA PPU_ADDRESS; E$ |( V$ n" N5 ]
  353. VramInitWrite4 i0 t+ [/ q8 m; i9 u
  354. LDA [Data_L],Y, i: Q2 u! ?/ A( H# y! ~. d2 S
  355. STA PPU_DATA3 o" L- A2 S6 y
  356. INY$ O& F  i( h$ I. y3 \
  357. BNE VramInitWrite; d( @/ b# T+ ?( p
  358. INC Data_H
    + m- j4 y3 h! T) n( r; C+ @
  359. DEX
    9 c$ i/ T8 {( K% _$ Z. N" U
  360. BNE VramInitWrite
    6 u6 b" V, Y4 ^! V( S" X
  361. RTS" P% J% w6 l, j/ y$ J" v5 N/ C
  362. + P$ \2 \, S  H0 J9 D
  363. ;==============================# s, ~" V% S7 U+ i
  364. RAM_Clear;RAM清除3 A5 B, X4 \- i1 ]
  365. LDX #$00
    * ?/ w& G; M4 a& q  X- g% ]3 q
  366. LDA #$00
    7 N& L" }, n" T3 j% u
  367. RAM_Clear_1
    % W, V  c2 c8 \8 F- [6 i; Q' u0 p
  368. STA RAM_Cln_1,X$ s9 T* d2 I# c0 U
  369. INX4 @& X& b9 O4 p  Q( v; P
  370. CPX #RAM_Cln_1_Size% e- _0 ^2 O/ @  j% A- p$ X/ }
  371. BNE RAM_Clear_1
    ( c3 C# }& r6 `/ _; y; O" r4 Z
  372. LDX #$00
    " f- N' {- }! t& \9 _
  373. RAM_Clear_2$ @, R6 h1 V4 q  R& q! O
  374. STA RAM_Cln_2,X# T7 r% t7 w' E! g! W$ n
  375. INX' k! Y2 `6 D. F4 r3 O
  376. CPX #RAM_Cln_2_Size
    1 t$ n; y6 v* ~0 ~2 t* k
  377. BNE RAM_Clear_2
    / J0 [/ k/ f- d3 T
  378. LDX #$00( e4 m- a) K! g2 ~
  379. RAM_Clear_3
      B" o) }( t6 S+ A) a
  380. STA RAM_Cln_3,X0 \: N1 C' ?3 G: d6 w+ t' H' G
  381. INX
    6 }5 @! P  S: _
  382. CPX #RAM_Cln_3_Size# n2 Y' P- Y- U# d/ |, @
  383. BNE RAM_Clear_35 T; @* A- S8 j6 U1 m# ?( Z
  384. RTS- |/ d$ ~% o! K" R: k
  385. 8 q* B$ l4 w1 v0 N
  386. ;==============================
    ' {4 P7 g5 L/ {% F( S! K/ v' [) ^
  387. ;音乐切换
    + N" D* e' {9 i
  388. Music_Switch
    9 W1 G. [) M: U4 l0 h% @6 K
  389. JSR Key_Proc
    ; f5 ]# ?" k4 }9 k
  390. LDA Key_Once( U' n& O" j* H( ]( k0 B1 t$ {
  391. CMP #$106 ^# ?9 A; F7 E0 o: {. n# D
  392. BNE Music_Start_SongStop
    . v9 l* }) ?% U9 e
  393. JSR Music_ReSet7 n0 p. l- a3 ]7 @  t2 V! s
  394. . }( [( w: z* y( ?
  395. ;音乐停止
    9 h% z: Z( Y; u: k3 Q
  396. Music_Start_SongStop+ C. B" a; p5 w% H  v- T) l0 {
  397. LDA Key_Once
    8 `7 K8 B7 z& g! _, U
  398. CMP #$20
    2 m) V! k8 z" f1 H
  399. BNE Music_arrow* c3 v5 ]2 w% r2 Q7 a! E  P
  400. LDA #$011 j4 {3 v! Y' w2 y: u8 a
  401. STA Music_State
    4 f" R& L1 k) |7 d3 e7 K
  402. JSR Music_Bar_ReSet- H2 a- Y* [1 ?7 i+ C) W5 B" ^2 N8 w
  403. JSR Time_ReSet
      ~4 N6 V+ @/ \7 G3 u
  404. JSR RAM_Clear: [+ P7 |* X# s- y) c
  405. JSR Sound_Clear. P. }; A0 v  F8 w( N
  406. JSR Music_Stata_Show
    / V; B/ B( \, t$ n5 Y' W6 K, C: M
  407. Music_arrow% U' z" o* q' K$ l  e
  408. LDA Key_Once, T8 H. c& O4 t' f
  409. AND #$CF
    2 w" ], P9 _; U! g
  410. BEQ Music_Switch_End
    $ J7 s" K; y& u5 f! \$ G
  411. JSR Music_Number+ F; ?/ ~4 {/ Z# w8 m
  412. JSR Music_ReSet7 w; N  s& h. `* W" e, ]9 c7 R* ]
  413. JSR Music_Show# G5 [2 B* c# s' j
  414. Music_Switch_End
    & d% \5 f4 f$ x  N2 O8 Q
  415. RTS, Q. A2 s" E/ d# x

  416. 7 o! ?9 V7 m  Q) C8 Z1 G, T; j8 w
  417. ;==============================
    0 b9 I- y% b" k2 n2 i. ?0 i0 e) @  b
  418. ;音乐曲目切换" P6 D( U) b7 C4 |4 x& e- v
  419. Music_Number
      \' E1 x* `7 S2 b6 j
  420. LDA Music_Cur
    / h6 x% m- M1 l! r) ~+ x6 ^0 h% V1 o
  421. STA Music_Last3 ^* z* s0 `' m
  422. Music_Decrease0 D! x* u( |* e; ?. v
  423. LDA Key_Once
    ' R* M4 |- u. p$ F' C
  424. AND #$42
    $ G/ k% ^. z. m0 c4 U6 ~' H
  425. BEQ Music_Increase1 X& Q  l7 a- R& O, W
  426. LDA Music_Cur
    1 r. I6 ~7 v/ @& A3 K, u7 S3 v
  427. BEQ Music_Increase  Q/ b- n; @5 r, a% T
  428. DEC Music_Cur
    2 W1 X3 p8 _9 J
  429. Music_Increase" P! Q" k( }$ d) `
  430. LDA Key_Once
    . L0 P( q, d# g$ V2 H* A
  431. AND #$81
    9 R7 y# l) ^( e, v
  432. BEQ Music_Decrease_100 b  @! d; l9 f3 I
  433. LDA Music_Cur9 n% J5 {) M" X- D# F  t
  434. CMP #Music_Song_Total-01
    . O: v4 C% M! d) j, t! |; y+ e
  435. BCS Music_Decrease_10
    + ]+ y" D- \8 r* {
  436. INC Music_Cur' P/ S# z" i2 x! q, O$ a' C
  437. Music_Decrease_10
    2 m* j) J5 a5 E
  438. LDA Key_Once) `  F2 ?" F# w# `& S" v
  439. CMP #$04, j; J. s  X; Q5 \3 x- @
  440. BNE Music_Increase_10
    + i( m  F( ^2 N  z
  441. LDA Music_Cur. N; H$ {. P5 G! p
  442. CMP #10
    7 c7 p0 ]& p3 h: Y/ v7 W
  443. BCC Music_Start_Song_Min
    * p. T4 v2 {4 d0 @; c* ]! [
  444. LDA Music_Cur9 x9 Y' z& s: N: G. Z) a
  445. SEC0 u8 @0 \0 A/ d+ c; ~, f
  446. SBC #10. p2 `/ G# z* X
  447. STA Music_Cur5 M) y! w  M$ t+ _) Q( k4 Z: d" B
  448. LDA #$00
    9 X' Y6 p+ b5 Z% I6 h2 F
  449. BEQ Music_Increase_100 r* F1 R. F- T4 y6 Z
  450. Music_Start_Song_Min
    2 E3 G' u+ \# C8 Y% i# D, a
  451. LDA #$00
    - z$ m" d4 L3 \2 a
  452. STA Music_Cur9 R; R  _, g. k/ S$ S7 q
  453. Music_Increase_10' {. X( p0 s; u
  454. LDA Key_Once& g/ H  ]: F- s
  455. CMP #$08
    $ ?! U; v, n* A9 N3 y( ?
  456. BNE Music_Number_End5 ~6 b1 E, [* E# w2 Z) G7 t( {
  457. LDA Music_Cur2 R3 |+ x! w# @7 B1 {! S7 U
  458. CLC
      a8 U8 [+ d- {
  459. ADC #10
    0 l( J8 A4 |7 h5 W
  460. CMP #Music_Song_Total-01
    0 |. e* I$ X% z& w) N
  461. BCS Music_Start_Song_Max
    3 X2 |: S, f9 U! h/ z% a3 h7 e
  462. STA Music_Cur- q8 }# d8 W1 M7 K( l
  463. LDA #00
    7 @6 B5 D8 p' _) x# Z7 c, a9 N" }
  464. BEQ Music_Number_End% W! v0 T# {* j9 l$ N8 j
  465. Music_Start_Song_Max7 [7 q8 T$ r% G
  466. LDA #Music_Song_Total-01- o! y& W1 p4 }2 B& ?; Y
  467. STA Music_Cur
    % q, L" m7 V' C" U, n( N4 Q
  468. Music_Number_End! n5 Y! B+ K7 p6 K4 o* W5 W
  469. RTS8 f1 J* u  D* z

  470. 3 `+ Y5 _) m( u; F1 F* t
  471. ;==============================
    2 v1 A; [& ^: _
  472. ;音乐重设- ]$ o) R/ i. L4 E& {+ Z
  473. Music_ReSet5 R6 I, P) F  q
  474. JSR RAM_Clear2 C8 o# U* r5 U8 x  W1 \* F4 k
  475. JSR Sound_Clear7 s. p; H0 x3 w+ B5 e, _
  476. LDA #$1F/ L& B# s) d+ j" L% L$ q5 t4 Y
  477. STA APU_STATUS* H6 Q$ E0 q! V4 g) M
  478. LDA Music_Cur
    3 x& g7 U0 g) J
  479. JSR Sound_Init4 J' j, Z6 w7 s5 }
  480. RTS8 |+ x" ?* |# j; ~4 q
  481. 4 k8 c& |: y# {. _: a2 [! a
  482. ;==============================* f+ _* U: E! H
  483. ;音乐端口清除
    * {* V- h. V  I# q+ o$ d
  484. Sound_Clear
    3 j) c, @- _, @" e8 D+ N
  485. LDA #$00
    7 i% J* V9 {" g, R- X" X
  486. STA APU_STATUS
    : c7 M$ @. ?+ s0 \/ b1 M- r' D- L
  487. LDX #$00
    . Z* h# E5 {4 T  I$ M
  488. Sound_Clear_Start7 p% s4 Q" d& H- }+ `9 @
  489. STA $4000,X6 t9 K0 C8 O6 q+ Y- I
  490. INX
    * M  s! U( ~" m  J# _* M4 G3 H
  491. CPX #$14( n. Q, z" j. `4 D. a9 \
  492. BCC Sound_Clear_Start
    # }: ~3 K0 T+ K! I" u" g
  493. RTS
    6 n5 v8 x: Y/ b% l4 g7 @* j& S4 i
  494. 4 @" j1 x4 m( H
  495. ;==============================
    & q% T; W7 b. i! A  ?
  496. ;按键处理' t( Z: c3 R1 s1 }5 V
  497. Key_Proc
    4 J4 A4 v1 }) C: [3 X" A' d
  498. JSR Key_Scan
    : O* m( n, ?" t$ G. u
  499. LDA Key_Keep
    3 g3 j( ~- |3 s% w) S
  500. STA Key_Temp3 g! N6 p7 I/ x$ P
  501. JSR Key_Scan" q$ J5 |& t2 M' W5 J! z
  502. LDA Key_Keep
    ' x) b/ ^; a' b' E5 @
  503. CMP Key_Temp: n) `$ S3 c3 O+ ?5 X# l) O1 N
  504. BEQ Key_Get_Once
    % d8 W  s2 |& h( [6 @2 f6 j
  505. LDA Key_Kemp
    / z6 D7 o% N* w% {* v4 _' V
  506. STA Key_Keep$ f& J1 k- l# Y% J0 e
  507. Key_Get_Once
    ; g, ^/ ^; v; i, R! m  X+ C7 a4 l
  508. TAY
    : M! g# A% `. Z; P5 A! F
  509. EOR Key_Kemp" I. X/ ]( N( V& l1 m7 U: @) n4 y
  510. AND Key_Keep
    3 h. C, W; Z3 J+ k0 c
  511. STA Key_Once/ H$ I( X- d# O6 \! v7 k
  512. STY Key_Kemp
    , h9 s3 \* g. V  g( Z' n- d6 f+ [2 |
  513. RTS
    0 G5 g* q2 c  |# B
  514. ;------------------------------. V1 U& @7 I' C7 n
  515. ;按键扫描# O% w: H+ t- g# A. I! p
  516. Key_Scan9 Q7 }! k) u( d; W8 Y; w! N- m
  517. LDX #$01
    9 l  V! W# ]: S2 A' S" p
  518. STX JOY1_FRAME* i6 J6 ]( H" H) m# `
  519. DEX! ?0 s' w& \; |" X# I% {
  520. STX JOY1_FRAME
    , L8 u: f* f1 g/ g; _7 k2 _
  521. LDX #$08# c3 k% \, u  ]1 `
  522. Key_Value3 B. f# d: F! W
  523. LDA JOY1_FRAME3 L; \5 g& H1 Q/ g
  524. STA Key_Getv
    , t3 X! c1 k3 G
  525. LSR A2 D+ j1 Y: O; R8 }
  526. ORA Key_Getv. w5 M5 ?' e) L$ D' w- P& L
  527. LSR A
    6 P: o0 c( j0 F+ b/ P
  528. ROL Key_Keep
    " j# M. X; F0 z- x, _
  529. DEX# d6 ?( n) V; U( b
  530. BNE Key_Value' |. c( _& x: M" `3 k
  531. RTS" L) l2 L# g- ?. D2 j$ H& @
  532. : W/ {2 D* [9 p! ?3 p
  533. ;==============================, x% s. X- X! `$ M! i! D/ j( C
  534. .IF SOUND_BAR_SHOW_ENABLE
    3 U6 T8 m  z9 [& s7 P! F
  535. ;音乐条显示" D" |/ E4 V# P# H6 H1 t
  536. Music_Vision
    ! q5 w" E6 V$ r2 M2 k- D6 Y2 {
  537. JSR Music_Animation  O  w6 c/ ?2 w, D& H: ^, n% W! M. o- s
  538. JSR PPU_End4 ?+ P7 z6 R# M, y  C+ ~1 T
  539. RTS
    " y0 \/ c: q# G6 A; [* p
  540. ;------------------------------9 O% P  n9 }9 ]8 k0 a6 K
  541. ;音乐条显示处理
    9 u; W! @. O2 n
  542. Music_Animation' ^7 T6 x& k; X
  543. LDX PPU_Cur2 G8 Z% W' r; G# X# P5 u
  544. LDA #Mode_Line
    & Z. M$ X6 E$ t
  545. STA PPU_Addr,X
    ; a' Z  x3 ~; s- H: D: P
  546. INX
    / T# E8 n; I1 o9 h8 ~
  547. LDA #HIGH(Sound_Bar_Pos)
    4 V) j  P7 I. f0 S, t) ]" E
  548. STA PPU_Addr,X
    4 s# Q5 m# Q; P$ ]4 s# Y
  549. INX! j6 I  v6 L) f: e7 y1 a7 u
  550. LDA #LOW(Sound_Bar_Pos)
    % t& U! b( R9 v0 G
  551. STA PPU_Addr,X5 y8 x% R0 N: Y4 {* o
  552. INX* Q0 w2 q+ D( V7 I$ I% n
  553. LDA Sound_Bar
    " ^. o) A" `# H- b9 {4 K1 y6 B3 m7 {
  554. JSR Volume_Convert
    7 z! L& u, Q9 x1 |( p
  555. JSR PPU_Return
    # K( H# r3 m6 `- r0 r' v' n1 p
  556. LDA Sound_Bar+$43 l' y+ Z) h; [1 \0 D+ E
  557. JSR Volume_Convert
    9 _/ J. D  x3 F. R% C) T1 d. l. Q
  558. JSR PPU_Return
    # }5 h& e/ u& v, d7 P* m) B7 U
  559. LDA Sound_Bar+$83 t  Q: e0 r7 Z: F  G0 [
  560. JSR Volume_Convert_Ex: Z! v. ?0 w: g6 k
  561. JSR PPU_Return
    . ?0 E- Q3 T& f- \$ z) }. F" K
  562. LDA Sound_Bar+$C7 c9 p7 d, }- f7 l. i9 n. n  y( v
  563. JSR Volume_Convert& M+ @& z6 N5 p
  564. JSR PPU_Return
    ! I3 Q4 B8 g: |$ h4 m
  565. LDY #$10" P: E: l$ }# M
  566. LDA APU_STATUS
    7 _+ _& n* S+ G
  567. AND #$10
    7 O+ v. ^4 ^) o  |& J. |
  568. BNE Volume_Count+ x, r5 w5 U. x0 P: z
  569. LDY #$00
    , P- Z# e. V8 e( x7 z4 Q
  570. BEQ Volume_Count
    & j# Y+ w8 v. N% X! S
  571. ;------------------------------$ v9 K0 R+ r$ ]$ \
  572. ;音乐条处理
      a( c; J& D# N0 Y/ O0 V! r
  573. Volume_Convert_Ex/ ]3 p; v' i5 ]; D7 m) T2 P5 a3 N
  574. AND #$1F
    5 C) s0 _# S  q7 _
  575. TAY
    8 Z; P- c$ X1 m. w* ~' k- `
  576. BNE Volume_Count& k- t+ C5 W- `; _. n4 D
  577. Volume_Convert
    % d* V0 o8 Q0 Z2 m
  578. AND #$0F8 L/ g1 l, J7 S) s4 P
  579. TAY/ j2 B, W' a& T/ j
  580. Volume_Count" ~7 K% p8 ^" Q9 a0 w
  581. LDA #$08) C7 X' v7 V' |6 V: m$ D6 K
  582. STA Sound_Bar_Cnt* H& V! c2 U2 X4 c3 b
  583. Volume_FILL) F% \4 D+ [  E  c5 O
  584. DEY0 V6 C( E4 Z4 Z  E$ c, P5 I2 t6 `
  585. BEQ Volume_Half7 m4 s& A0 `, f4 L7 T: Y0 H
  586. BMI Volume_Empty; V2 |( N# E8 |- e
  587. DEY" \* Q4 m' C! r5 X' O3 t$ ?; j) n
  588. Volume_Full
    8 y4 D$ W* G$ N* V; P4 a7 @
  589. LDA #$16
    . z+ P- B/ R# K( @' H3 ~% P% S" a
  590. BNE Volume_PPU
    + {* _1 O$ C* d1 U. h% r
  591. Volume_Half
    & x' ^7 ]( n" Y9 ~2 U9 H: k
  592. LDA #$15
    2 `, M1 Y; z6 M
  593. BNE Volume_PPU1 b2 ]; Z3 R: y) o- a# |" U
  594. Volume_Empty7 @6 |4 a7 j4 d" _+ [
  595. LDA #$14# L7 x) B& M2 Q( e' `
  596. Volume_PPU' Y3 d& q$ q% T5 Y8 {
  597. STA PPU_Addr,X; x. S) Y$ K1 d$ v  L5 g
  598. INX
    * M/ b, @2 ]: [( u
  599. DEC Sound_Bar_Cnt# `9 d1 Y+ V. K" M
  600. BNE Volume_FILL; B; \& |' ?' ~& D/ a) Q2 _' Q1 v% K! u  S
  601. RTS
    " o4 Q( _( k  Z8 V* [6 \- y

  602. - C4 W% f: ?; r/ ]3 F$ K9 x# S7 B
  603. .ENDIF
    1 x) Q) |( ?# _3 E% q: Y* i

  604. 6 T' B8 t, W/ Q& S, x% ~4 q
  605. ;==============================) |. P* {) h9 }- K& \- N0 b
  606. PPU_Addr_Set;PPU行开始
    / u2 q; k4 M  d9 n/ h
  607. LDX PPU_Cur  Z8 \+ ~7 o6 M) C2 z$ @  |( s
  608. LDA #Mode_Line, y/ t4 D7 [. i6 h. _# V
  609. STA PPU_Addr,X
    # f- Z3 N1 P6 u2 U: `% S
  610. INX
    3 D# l* D5 Q& s& }* \( N: k6 @9 B
  611. RTS+ j# K  Y: u. N5 b9 }( V% h! P

  612. - D% e( [! m2 U6 X
  613. PPU_Return;PPU转行1 j" o5 e1 m/ Q$ e
  614. LDA #Flag_Over6 s2 e( V' ]* k0 d5 Y
  615. STA PPU_Addr,X- Z2 A- e+ [; T5 C
  616. INX& a' F8 q( k% {' t+ A( b. b- p/ b% r3 |
  617. LDA #Mode_Return
    6 v' |  @/ \' U- R& d8 H' Z
  618. STA PPU_Addr,X
    0 F! z0 ^' z8 T; Q( \2 M/ l8 W
  619. INX
    ( Y/ z* y) p- {% Q6 X- L6 v1 V4 ~
  620. RTS
    ! L4 L) T6 R. s  ^/ K$ X3 M
  621. $ ?7 E; M3 ^+ z5 U( m' z; o5 p
  622. ;------------------------------
    - H5 H; }1 ?! S: l7 F
  623. PPU_End;PPU结束/ d. v! y- r) [+ p7 c; E3 S
  624. LDA #Flag_Over
    / T  q4 y& v( A) s
  625. STA PPU_Addr,X
    ) \2 h/ M4 W% c: J: I" c& Y+ A: H
  626. INX
    * a$ l! i4 K- s, z
  627. STX PPU_Cur. E  p. F) U% q0 A) M6 p! o! `) s
  628. RTS
    ) _8 [2 z6 K7 F* {5 Q+ q
  629. ;==============================
    ' Z( F+ v  ]: [! o  u+ d* U
  630. Mode_Line     = $FD    ;新起行模式( w. v8 ~6 q4 G# n( Y3 C$ ~( l
  631. Mode_Return   = $FE    ;转下行模式) |4 C  Y# |: I! S- `+ t% \6 a
  632. Mode_Clear    = $FC    ;行清除
    - N9 w& w8 M3 v4 @- i6 h9 p+ W
  633. Mode_CntLine  = $FB    ;行计数写入
    3 l- o, g8 O% N# H; q: O- X
  634. Flag_Over     = $FF    ;行结束标志0 l3 j' g  F- J/ L3 @* e8 E
  635. ) [! g$ L: T# D
  636. ;------------------------------
    3 [6 ?( m0 [0 x4 W+ z
  637. ;PPU处理
    6 ~, p% ]( D# w6 z+ k7 i3 ~: b
  638. PPU_Proc9 p+ X9 j( ^# G! V6 G
  639. LDX PPU_Cur
    8 @4 [0 A/ c; V% J
  640. LDA #$00' x3 C3 U2 g4 E
  641. STA PPU_Cur
    3 M+ n: V( t. ~/ @$ y3 ^
  642. STA PPU_Addr,X5 o" A' G/ w/ R7 e+ X! o) }( w
  643. LDA PPU_Addr
    ; M4 p2 r" u' }& a
  644. BNE PPU_Proc_Beg8 m1 G% l* y( F% o
  645. PPU_Proc_Ret( n4 w: P+ Z- p9 v0 o
  646. RTS0 I6 u! w( W* L) N
  647. ;------------------------------
    ) Q$ f: b0 N* S' j- |
  648. PPU_Proc_Beg  ;处理开始
    ) q6 y2 b4 i7 X8 i4 Z) y
  649. LDX #$00
    : L1 b  N, V8 `+ O
  650. STX PPU_MASK* z& z9 k7 i9 T5 [0 x9 H  m8 M% R
  651. ;------------------------------
    $ D. }4 \% {4 j5 K. }6 Z+ Z$ `
  652. PPU_Mode_Select  ;模式选择; }) |6 v) A; _6 X7 L$ e
  653. LDA PPU_Addr,X
    7 Q+ \% a  \4 r$ y
  654. CMP #Mode_Line" p' a1 F2 E% i$ M+ l
  655. BEQ PPU_Mode_Newline8 ?. ]% y; ]0 m
  656. CMP #Mode_Return
    + n/ g! q9 y7 g$ M+ a2 W
  657. BEQ PPU_Mode_Return
    6 ]( Y1 f- ^8 K
  658. CMP #Mode_Clear
    6 m( H6 P) a( Y3 l7 y- K8 k1 h/ r
  659. BEQ PPU_Proc_Clear$ @2 I+ s6 M: B+ d" S
  660. CMP #Mode_CntLine8 D. r- k/ U+ Q  @! `& s
  661. BEQ PPU_Proc_Cnt_Line0 m5 `% f, g9 [
  662. RTS/ m5 G: ^% K; ?- v. ?3 f; K/ [
  663. ;------------------------------
    1 P4 I& y9 V$ l* ^* I
  664. PPU_Mode_Return  ;转下行模式6 e% i6 Y# ?) A7 z: t3 w" @3 g
  665. LDA PPU_Addr_L
    % ~, C9 l, B$ ?2 s% v' A
  666. CLC
    ( y. m" o: k" z$ g# u" s- y7 S
  667. ADC #$20
    ) i+ ~3 L/ ~/ p- P, a. b2 L
  668. STA PPU_Addr_L
    ! r( Z0 }1 ^: E, \3 j! e: b+ E
  669. BCC PPU_Return_End& _! V. k6 l! r9 N; e* }* v
  670. INC PPU_Addr_H0 T/ I% f7 L# ~7 D5 C
  671. PPU_Return_End( l6 t: E* k3 t' d( R
  672. JMP PPU_Set_Increaser1 c9 P/ r' h. o: S) [1 M
  673. ;------------------------------& z! l# ?: z2 K5 D  I* g/ ~8 W
  674. PPU_Mode_Newline  ;新起行模式
    8 N# w  `6 a+ r
  675. INX' k5 ?: ?5 B( Y, i6 r
  676. LDA PPU_Addr,X+ y- O, |2 d, J8 W) C
  677. STA PPU_Addr_H
    . c+ i) R" m4 q. T
  678. INX
    - l' W$ f! C6 O4 i
  679. LDA PPU_Addr,X
    ( g2 `$ A! ]+ ?
  680. STA PPU_Addr_L
    1 K* B9 R) X# `  [/ C) m2 C
  681. ;------------------------------. a2 P# s5 K2 ?" p' {* T5 @+ {
  682. PPU_Set_Increaser   ;设置写入地址
    $ W" j3 g; T! X6 C- T0 b
  683. LDA PPU_Addr_H. a4 B9 V3 \! X: v
  684. STA PPU_ADDRESS( g' O, J* j/ V5 N8 V- g# g
  685. LDA PPU_Addr_L
    " V% M& x( u' A4 O9 E
  686. STA PPU_ADDRESS, r- x/ }2 w( e1 w7 }9 O5 g
  687. ;------------------------------
    + f0 ^. \" ?0 N3 W) b( c# }
  688. PPU_Write   ;写入数据
    ' R9 m9 w$ I2 O- \% q" _
  689. INX: a4 v: }8 G) j- s. b
  690. LDA PPU_Addr,X
    7 H" ~4 M7 d7 m+ g- @$ A
  691. CMP #Flag_Over
    ; h) P9 P' O; x1 K* v9 c7 w6 r, o
  692. BEQ PPU_Proc_End/ h! x: W7 U, p
  693. STA PPU_DATA
    3 P: n. m1 m! a2 ^6 h  U
  694. JMP PPU_Write( h, p5 w! d, E5 A
  695. ;------------------------------7 x4 I7 u) S' ]; \0 ?* @5 L
  696. PPU_Proc_End  ;单行写入结束
    . p7 w0 T! c7 Y3 ]5 ?3 j
  697. INX
    ; R' `) [# y+ Z, c/ D
  698. LDA PPU_Addr,X7 J+ U1 p1 {/ B" m- G% J
  699. BNE PPU_Mode_Select
    * X3 R# g* A( g0 }
  700. STA PPU_Addr
      c& b7 q0 {; i
  701. JSR Update_Palette_Color  j5 Y! R4 H/ ^; ?, _5 v. N
  702. LDA #$00
    . U# A* S; s2 n
  703. STA PPU_ADDRESS) i. O: V% }$ X) _* b
  704. STA PPU_ADDRESS: u) C+ c3 ]! M3 F( y
  705. STA Show_Track_Name
    , N- s; b/ A; m0 p' _
  706. LDA #Scroll_X
      N# Z  B1 m5 |* h. \! k
  707. STA PPU_SCROLL
      s0 H9 `1 |5 |9 l: T" V$ P
  708. LDA #Scroll_Y
    6 u3 b* t' }/ T* E6 g/ L' U
  709. STA PPU_SCROLL# W' J4 I# V# p( p* R7 i* v
  710. LDA Screen_State
    : V# i7 O! a2 K/ A1 _
  711. STA PPU_MASK
    : O" }8 n* `; L  ~. A" D" M2 M
  712. RTS
    ; O: v7 ]/ [/ ?& w+ P( _8 G; u

  713. + e: ?. G$ [# P
  714. PPU_Proc_Clear
      K+ k  c: O4 f4 A6 W" M! ~
  715. INX
    ; G, y3 W+ O3 Z  V5 l# _- D
  716. LDA PPU_Addr,X
    " c: a2 F$ U- J! V2 F: v/ {* i2 b
  717. STA PPU_ADDRESS! E, p9 m( |2 N
  718. INX
    0 R7 {2 d' r- Z# q& I, _! X1 Q8 _) n
  719. LDA PPU_Addr,X
    ) X6 _* L: Z) E8 ?
  720. STA PPU_ADDRESS
    6 w3 d8 X* C# ^: x
  721. INX
    / d8 u- I6 g) F9 K$ N( w
  722. LDY PPU_Addr,X# h- h( ^* q0 _9 a  W' U
  723. LDA #$00
    7 w+ E- c: i: A  Q1 B
  724. PPU_Proc_Clear_Write
    5 L; V  V( Z4 m# M  a* i& h
  725. STA PPU_DATA
    , t: U) B/ Z6 F" Z- p
  726. DEY
    - L) I- }# G* T1 B
  727. BNE PPU_Proc_Clear_Write
    ' d8 G* I& l' ^* A
  728. JMP PPU_Proc_End' W( e! B' W: o; ?+ T
  729. & Y& B7 S1 X; j5 c
  730. PPU_Proc_Cnt_Line$ W; X- f" s+ X4 R4 i
  731. INX
    , H: U% v, c# n# M4 y/ Z& ~
  732. LDA PPU_Addr,X
    0 c) U+ E" Z! B6 u0 y) j
  733. STA PPU_ADDRESS
    / N4 Q/ i( f# m# \' Y3 F4 r1 n
  734. INX
    : d! q  k7 f8 |# G
  735. LDA PPU_Addr,X
    % t! H! A' A2 o  W
  736. STA PPU_ADDRESS% s6 n+ _+ a- t! y
  737. INX* z/ z- s6 T9 h: o
  738. LDY PPU_Addr,X
    . t7 w7 R& x4 i  r  W
  739. PPU_Proc_Cnt_Line_Write
    5 u' j* h4 }3 P. m$ d
  740. INX5 _) G9 x, e6 x8 w' g
  741. LDA PPU_Addr,X9 r* n6 w7 J! l: @
  742. STA PPU_DATA
    1 i7 `/ `) x8 W- i4 h
  743. DEY; b2 N2 c; G: V) R6 {: b/ j
  744. BNE PPU_Proc_Cnt_Line_Write
    ' i! p% w4 @: i4 T: U7 K2 j# R
  745. JMP PPU_Proc_End
    ! T/ }0 O; Q1 x0 @

  746. 8 o0 u! ?  [) T2 J- r  d
  747. ;==============================  e; J" J5 E& l0 G* Y. \
  748. HEX_To_Dec;十六进制转十进制
    ( P2 e' c8 s+ `2 m  U! J5 y
  749. STA HEX_Data6 z# O: a+ [' t
  750. PHA  j4 ?/ p, |7 w, Q0 l
  751. TXA
    5 m7 C6 Y5 J8 ^" G
  752. PHA
    # z* c" A3 l: B! g& I! T
  753. LDX #$00+ A# N- U& U7 w$ N# \$ U
  754. LDA #$003 e( i: u% y' y# v5 ]" z& x! j
  755. HEX_Cln
    & n% B% p) w* x
  756. STA DEC_H,X* @! l( u" Q( T  g& g
  757. INX
    , U: ~  W$ `% c. [
  758. CPX #$031 O; r; J& _2 c3 U, a# G
  759. BCC HEX_Cln' ^4 V4 r  H% B* q  o( S
  760. LDA HEX_Data7 r/ [+ D7 \( H
  761. ;------------------------------
    5 V- U# |" g! N0 q
  762. HEX_100
    $ u8 P  K! ^' d- x2 t. ?) c
  763. CMP #100! W. x0 J) v: x1 j2 [( d+ w* R. |# z
  764. BCC HEX_10
    / z: L7 K" H- t8 D
  765. SEC+ G+ q1 F: g, e; ~8 c6 X, ~+ R
  766. SBC #100
    / l  {2 t' @; K* v/ `! B1 S9 i
  767. INC DEC_H
    * Y  {) F, \  e4 Z6 L/ D# S( x/ U
  768. BNE HEX_100
    7 n* b! e" o: O& s
  769. ;------------------------------
    0 g. C/ h% c2 z# @
  770. HEX_10# e4 [6 ?' P7 _0 U& M) s
  771. CMP #10
    " s; E! j- c. Z: r$ C. b
  772. BCC HEX_1$ q( [( M5 s4 ~3 ]- @' j  y
  773. SEC
    % A" I9 m+ b) P7 S
  774. SBC #10- h& o: F8 ~9 z/ i. q  A- T
  775. INC DEC_T
    . Y; H: o+ p, q" k0 |
  776. BNE HEX_10
    8 }1 ]  D* X3 u9 i
  777. ;------------------------------
    , I- \  O$ U' ~2 s
  778. HEX_1( J6 o1 ~9 c! [( M$ o
  779. STA DEC_L+ Y: t6 t+ A2 w
  780. PLA) {7 N3 z  z5 ]9 |1 k
  781. TAX1 A/ d8 s6 P% G
  782. PLA
    4 u+ X' b9 W, a4 b* \
  783. RTS0 _$ d8 B/ u( ?
  784. " u, k# O3 x" s5 f) J
  785. ;==============================
    & f, d! M/ E1 n- L% t( ?" E  c! C2 T
  786. ;音乐曲目显示
    & ?, l$ }0 }% A# |
  787. Music_Show- P4 ]. t* P0 Q, b
  788. LDA Music_Cur! B1 _9 P9 c% o# e8 A# G9 c
  789. CLC) D3 x( D- f+ `1 B* ]$ ]# n- Z2 T
  790. ADC #$018 a2 j7 g/ l4 u  z# n& @; k2 k
  791. JSR HEX_To_Dec; t4 V" s+ L6 G: l
  792. LDX PPU_Cur
    3 Y4 X3 ^' @' {7 Y3 P
  793. LDA #$FD7 K+ }7 v! a$ D
  794. STA PPU_Addr,X0 a6 ^& l1 F  k# o3 |
  795. INX) Z3 E) w/ O* E4 p
  796. LDA #HIGH(Play_Index_Pos)
      T% N! F4 x/ V
  797. STA PPU_Addr,X& n9 w- E- f+ ?, `% F" y
  798. INX
    0 Z' c. Q9 g: U/ V/ H/ l$ }4 A
  799. LDA #LOW(Play_Index_Pos)
    ( k/ p# F8 d$ i
  800. STA PPU_Addr,X
    * b) n8 F; z) J, [3 a+ p
  801. INX0 R% u* o2 p. x1 c: [
  802. 9 h# Y- O2 J' X0 r2 g7 k
  803. .IF Music_Song_Total > 99" Q1 O+ B. E6 u% i
  804. LDA DEC_H: e' X$ j. n; C# L$ g* @) D) s
  805. ORA #$301 m8 S) E- C( i( X
  806. STA PPU_Addr,X
      O! q, Z1 _4 f' e& q
  807. INX& u  D# w: A$ r
  808. .ENDIF
    # @6 N3 O3 Q' ~% t2 k

  809. / W) k, T6 _+ c5 W. A4 x3 c5 _9 T' `$ f
  810. .IF Music_Song_Total > 90 e- \+ I+ j: @: J3 t# F) d
  811. LDA DEC_T
    ! @$ `  n1 B, B; R
  812. ORA #$30
    : L7 B  x" R7 S
  813. STA PPU_Addr,X. H  z4 m& f* U  v1 i$ g, [2 [& h
  814. INX
    5 f  T# n$ v3 M$ B- N
  815. .ENDIF. l* Z! w6 D2 p0 e/ `# p5 ~7 l+ T" e7 J
  816. 1 c( K" [2 Q- t) j$ Y# U
  817. LDA DEC_L: S. x# r" H1 u
  818. ORA #$30; b( J  h, O6 C6 C) k
  819. STA PPU_Addr,X
    / h" L% ]$ ]/ A& Y+ w5 f
  820. INX
    ' h0 a( R6 |( @. v# Z  r

  821. / j, ?8 v  _  o" J& \/ k0 G
  822. LDA #'/'& b, s3 F5 K6 `0 C- C  u: y
  823. STA PPU_Addr,X8 C* z* G6 R% U" H2 N+ d" V& P# p
  824. INX0 N, U, `/ u7 D+ ?; \  e, g+ ]7 [
  825. Music_Show_Total3 h0 u- l! a; H; y2 r* d. {, n
  826. LDA #Music_Song_Total
    : _6 Q4 N, F  b; M! \
  827. JSR HEX_To_Dec
    ( k3 L! ^2 F- A# u6 B

  828. % X; J% k6 c/ o
  829. .IF Music_Song_Total > 99
    % U  `' I+ @  }: Y2 I! Z- G% {
  830. LDA DEC_H
    6 O+ x4 p* `& G
  831. ORA #$30
    % m; @- u6 T2 E  f9 X2 h
  832. STA PPU_Addr,X
    ! U8 H1 F4 d7 g% q0 m
  833. INX
    " T6 F% X" A' o8 J5 F/ S. z% G
  834. .ENDIF
    5 n1 x% ]% w2 `
  835. ) F7 n/ R( o: v% a: n) _1 W; C
  836. .IF Music_Song_Total > 97 \/ G8 D' O1 d6 q) L; d
  837. LDA DEC_T
    ) s# T/ R! ^' c* A6 m
  838. ORA #$30; N+ |6 F5 F' w5 m5 Z
  839. STA PPU_Addr,X$ n1 {2 u" y0 f
  840. INX
    % v2 E1 o. E  g( d" e
  841. .ENDIF
    ) L/ }0 l) {* q  v

  842. ( Q, ^' \% K! @) c
  843. LDA DEC_L' b$ J+ x5 L) n! P9 }
  844. ORA #$30! f# E! e8 M) Y7 C4 v* b
  845. STA PPU_Addr,X& Q$ y: L% c  ~/ H0 C2 l
  846. INX. N3 h$ E. s- Q( u

  847. ! k9 @7 {4 _; s( S! r) ?6 v, v
  848. JSR PPU_End) B! P0 D9 j! e) u; }& y1 ~2 u% e
  849. Music_Show_End
    % w6 @- ^- i6 p# P2 q( r% ]
  850. RTS; \6 x1 G7 ]& k. ]4 T
  851. 5 f, q7 }2 r- y& m& [1 O
  852. ;==============================
    7 D1 w% e0 b& D1 l9 t/ [0 L
  853. Time_Show;播放时间显示) V) F) a0 o* K
  854. JSR PPU_Addr_Set
    ( B  l; G( J3 M3 d2 n( N
  855. LDA #HIGH(Play_Time_Pos)
    : o- _" M3 D" b& K  f; @' N
  856. STA PPU_Addr,X
    ! S0 C% Q* Z9 a1 X- _; X4 X
  857. INX3 E4 V- R  @, G' I
  858. LDA #LOW(Play_Time_Pos)# _8 h3 K7 S/ V2 c
  859. STA PPU_Addr,X
    $ N4 R7 v# u7 V9 K# s! ^5 K
  860. INX$ [# O1 D4 U" i$ z
  861. Time_Show_H
    9 B' }* {, k, @& M4 G) n4 Z) v
  862. LDA Time_H
    1 l, x5 ]; D& o# i8 h' y, D/ ^
  863. JSR HEX_To_Dec
      X. c) q. d; I$ X/ i$ @: H0 O5 v
  864. JSR Time_Digit& N; k7 A% l0 r: H2 W7 k9 n
  865. LDA #':'& R" c! ~  y) u# V( @
  866. STA PPU_Addr,X7 D. Z& y% l+ r* u6 E3 g
  867. INX/ ?& b% z& p0 X# ?- e2 x2 \
  868. Time_Show_M) T7 J7 N$ h" U/ n- `) m
  869. LDA Time_M9 {9 w0 c2 h  D+ u2 C
  870. JSR HEX_To_Dec
    5 b. E; T. d. l
  871. JSR Time_Digit% d+ u  M- c( M% r
  872. LDA #':'" N0 e+ L0 j8 l3 q3 j0 b
  873. STA PPU_Addr,X9 _- |: a& z  f" Z/ t
  874. INX
    % T) R. _+ c) N4 U
  875. Time_Show_S
    / K  E  A% e- _! [
  876. LDA Time_S
    ( X. c" \, g) f
  877. JSR HEX_To_Dec5 m0 }( p" E9 k7 ~) z" u0 Y9 ~; x
  878. JSR Time_Digit' @9 y$ O( c# P: S  U3 U
  879. JSR PPU_End
    $ {; L4 R) j3 b6 f% H$ _8 s
  880. Time_Show_End: x: l9 T) _2 n8 U
  881. RTS7 l$ a/ N, R+ P, w6 x) N$ d
  882. 5 z1 ?/ Y# l' Y* `( _# x' U  ^
  883. Time_Digit: e+ o" C8 Q; X6 X  E/ I& ]7 N
  884. LDA DEC_T
    0 L2 r& g' q1 m6 u9 O
  885. ORA #$30
    7 `, f( J( V3 e5 f
  886. STA PPU_Addr,X
    $ w0 K2 h/ i: [" F7 q& |) v
  887. INX
    6 R0 J  H9 M+ |4 R) l" `4 N7 F1 Z
  888. LDA DEC_L) q/ `: f$ U2 G$ ?+ v) s5 r
  889. ORA #$300 s( t- K& g6 t- E; N
  890. STA PPU_Addr,X, c4 I7 W" o6 s1 h8 N
  891. INX+ r6 j5 j% X) ~( w( n* B. t
  892. RTS
    8 ~  E3 F; ]. C9 ]/ t
  893. 2 C  n: X8 F6 X2 W
  894. ;==============================- c) `) c" v( y; ?" W- Q: x
  895. Time_Count;计时8 m) w# g) V; _: J4 Y
  896. LDA Music_State
    ; Y% X1 a# F! I6 D. ~
  897. ORA Time_Wait_Cnt" n  n: q* H+ T, N/ d6 l
  898. BNE Time_Count_End
    / I( N* v7 J" a' J3 A; r9 x; }
  899. INC Time_Cnt. p% ]" n# q7 C( d* L$ ~% l) x
  900. LDA Time_Cnt
    $ j% w2 t% {( R( G/ R: B& N$ i# O
  901. CMP #60
    $ O8 Y3 N, Z( ~+ H2 ^
  902. BCC Time_Count_End, B  j% g' O2 A* Q" f  e, {
  903. LDA #00
    + V  w  g2 w2 L
  904. STA Time_Cnt
    ! ?, G8 F" C$ A% `
  905. INC Time_S6 {, S4 S* U" L- ?4 B/ ?
  906. . y$ N. Y4 G9 {, N2 Y! f
  907. Time_S_Cnt
    . b" G+ G2 Z- d
  908. LDA Time_S
    9 k2 T1 T7 N/ j( y7 m- e$ ^
  909. CMP #60
    " D& u- c# W4 U
  910. BCC Time_Count_End
    ; ?- s/ ?# m5 H" n* t% B' |
  911. LDA #00
    5 v2 i4 W5 w# p5 \7 S% m% P
  912. STA Time_S
    - L8 g: d" O- }" J2 O5 U/ t% B
  913. INC Time_M, [- A! ?) N6 U6 K4 Y- n; N9 n* J: t

  914. # o: ?+ b, K9 D+ v# o% h  @* m# B7 [  p
  915. Time_M_Cnt" Y) D- M6 t5 n, o4 H6 R% d4 |
  916. LDA Time_M- b* n2 y3 b: Q
  917. CMP #60: x0 C- v/ k' {! X# R9 w( _
  918. BCC Time_Count_End- W! a7 E3 X7 l; B' p
  919. LDA #00
    . c( {# Y  u0 F% |5 G: e# r& I
  920. STA Time_M+ x1 z- B3 R1 K* N7 O
  921. INC Time_H
    ( _2 q* f, z2 O! g8 k3 \
  922. % M: J6 I* ~5 i& Q0 |+ v, B+ G
  923. Time_H_Cnt
    ) O' g+ O; b2 T$ M" j, T; w$ m: }
  924. LDA Time_H# ^3 Y0 }' d2 w: w6 z& n) s
  925. CMP #24! N' n8 X. h: v, Z  U4 |& ?4 o. T( y
  926. BCC Time_Count_End+ l0 p( w; Z% D7 Y4 x# U
  927. LDA #004 S7 v6 v+ S* n3 X7 i5 f
  928. STA Time_H! _. z; U% f0 }5 ?5 E
  929. 4 T5 p2 Z  @% ]% |
  930. Time_Count_End
    2 L! g* n5 s! i; ^
  931. RTS
    ; _# C3 `  W8 A( r$ F# S

  932. . O  s! W9 v' ^8 f! N2 s
  933. ;==============================1 u1 ]1 v: _- }+ J  p
  934. Time_ReSet;播放时间重置
    4 L& x7 l, D& i9 s& x% K& u$ [
  935. LDA #$00
    6 o4 g6 V9 C- R2 p! S( ]% e
  936. STA Time_S! W( A9 [6 [" F' D0 m
  937. STA Time_M 4 d* A( a! C. D: n, \, [, u
  938. STA Time_H
    2 q$ o! J' ~. t3 q, P, x7 @& I
  939. STA Time_Cnt
      d, V& y( {: w3 g1 y: V
  940. RTS& z$ N/ r  ^/ }2 l( X
  941. + t* z% T9 {) L4 ~$ N
  942. ;==============================; _( ?  O) a: E  {2 d
  943. Music_Bar_ReSet;音乐条重置& ^% @7 y0 H! P1 W
  944. LDA #$00( ^3 X% G2 h0 \( a6 r6 n5 K
  945. LDX #$00: G0 U0 W: Q5 Q# m& Q1 M. }
  946. Music_Bar_ReSet_Set
    ! ]' y" p# T+ o/ f& w
  947. STA Sound_Bar,X
    / g9 F" K4 }. Y$ ~5 D: a- \! O, Q
  948. INX
    2 i" E8 T0 H1 l0 X, S% a
  949. CPX #$10
    # ?- M0 d4 [2 A/ d. S3 b
  950. BCC Music_Bar_ReSet_Set
    $ f4 U) r- a1 r/ o
  951. RTS9 e( [% s' J6 C- r6 j8 H; e5 u
  952. " R. M: @' H" _" t! q# j; S
  953. ;==============================
      v6 i" T3 H( c7 O5 @
  954. PPU_Data;PPU数据写入  Y$ `) ^' j9 O, ]* B
  955. STY Data_L0 }6 w* x0 I: ?$ [( ^5 p7 y
  956. STX Data_H
    9 p( g, o* Q; h! P
  957. LDY #$FF1 F' P! ^9 F" j/ x7 [4 O! v
  958. LDX PPU_Cur
    % n  Q4 B0 H& j8 L9 c8 G
  959. DEX- d: a7 O9 R0 \. c) ?% |
  960. PPU_Data_Beg
    ) d7 L2 x% k8 V' n' `' t- w( W. B
  961. INX( Y0 a7 d0 l/ U& s
  962. INY+ ]1 v% C: c2 w6 x$ K
  963. LDA [Data_L],Y4 \9 s  j/ C/ K# V* y
  964. STA PPU_Addr,X6 y9 f3 n4 {0 M2 e
  965. BNE PPU_Data_Beg+ Q' O9 t$ h; T/ V$ u" @# k
  966. STX PPU_Cur
    * D* f( A: C1 c$ _2 v
  967. PPU_Data_End4 i! B1 x" M# i1 w. q2 f
  968. RTS1 n) g4 h! L+ ~& {+ v5 a; f! h
  969. 9 Q2 m9 G$ D# d* {& I# u
  970. ;==============================
    , [/ q5 C: A! K, S; O
  971. Music_Stata_Show;播放状态显示% l; Z3 F+ i" k
  972. LDA Music_State
    % Q8 [2 T& V8 s
  973. BEQ Music_Stata_Show_Play8 a$ m( \  b% ]/ e8 @
  974. Music_Stata_Show_Stop! {2 \& V2 q) N' ~% J9 q+ d
  975. LDY #LOW(Music_State_Stop); C4 A4 N- m2 I  Q" _# F
  976. LDX #HIGH(Music_State_Stop)+ j' e( {, R0 G7 s
  977. JSR PPU_Data4 n8 ^3 |" c3 h1 `) n7 d6 X: {8 ^
  978. RTS
    ; j; @# u- M6 L( g( D% E1 K$ @( W
  979. Music_Stata_Show_Play3 f6 \  [/ @6 u, |
  980. LDY #LOW(Music_State_Play)
    ) t0 h- X( u$ d0 c8 @( v4 d* L! Z4 o
  981. LDX #HIGH(Music_State_Play)
    $ N9 R3 p) j3 w6 H& D: [3 V
  982. JSR PPU_Data
    7 S+ [8 f- t* r' w; ]/ v+ r
  983. RTS. \, k- R3 @- ]* S

  984. 2 z6 h+ u4 V! s  r5 o
  985. .IF SOUND_BAR_SHOW_ENABLE
    3 @; G! _# o% s! {4 {' l
  986. ;==============================
    ! M; L$ ]+ P: ?2 G. h' U
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    2 g& s) @1 Z. A
  988. LDY #LOW(Sound_Bar_Text_Data)
    ( _, A' i- t; o
  989. LDX #HIGH(Sound_Bar_Text_Data). B7 i; r1 J) }7 u% ^/ h
  990. JSR PPU_Data9 }1 w" l% i  w6 @
  991. RTS
    9 H- O+ x. d4 [$ p* U$ X5 ?

  992. % \" X1 }  n( X8 H" x
  993. .ENDIF. `/ d3 @$ y' K8 m
  994. ( P" T- H& N2 I: h+ P
  995. ;==============================
    ' L, _4 q# a' x6 n
  996. Set_NameTable_Attributes;设置命名表属性  v1 @. ^0 \0 p
  997. LDA PPU_STATUS
    2 r% w; k% J# q  u. y3 d4 K
  998. LDA #$23
    ; f+ G! z& ~, i. V
  999. STA PPU_ADDRESS4 {: |8 d" }' I! ]" U! J
  1000. LDA #$C0
    1 B/ b8 e. W# e
  1001. STA PPU_ADDRESS# ~! w7 E! P8 `; F3 I. J$ T4 G# k, g
  1002. LDX #$00# a1 d$ i) C, |9 ~$ L  r
  1003. Set_NameTable_Attributes_Write5 Z& m8 B: |. b/ D
  1004. LDA Palette_Attributes,X2 [  t: c! @; c% z/ j4 e' A
  1005. STA PPU_DATA6 C/ O3 E4 B$ S; F. _" G& U7 j
  1006. INX* H7 C* z9 i' ~% _& @8 j
  1007. CPX #$40
    3 f7 l: ~$ N3 r  o
  1008. BCC Set_NameTable_Attributes_Write
    " D8 u% K; x- W/ [8 n7 |/ e+ A
  1009. RTS
    ) j. J; l0 F9 p9 [9 d8 z
  1010. : x& g7 ~/ C7 Q- \) s
  1011. ;==============================
    " S3 u/ \3 [1 V; o
  1012. Set_Palette_Color;设置调色板数据0 u3 c. @& Z. y6 F
  1013. LDA PPU_STATUS
      n* G/ W* Q3 N
  1014. LDA #$3F8 J; F! F+ Q! [3 }3 Y8 N/ n$ `
  1015. STA PPU_ADDRESS
    6 X1 B- J2 E  B
  1016. LDA #$00# J" ^) N! y, ^
  1017. STA PPU_ADDRESS* q  D/ F& v6 x) n$ `6 d) z
  1018. LDX #$00
    9 d' N# J* ]" n! O9 k$ C
  1019. Set_Palette_Color_Write
    . ?, u! o2 b) a6 U6 L1 U
  1020. LDA Palette_Data,X3 R; U4 ?2 A8 ^1 d
  1021. STA PPU_DATA
    9 m) w  U6 I1 {: v
  1022. INX
    . t& D6 v7 @" c$ G. z- @! B; `
  1023. CPX #$20  B/ m$ R& y1 l  U8 \9 m
  1024. BCC Set_Palette_Color_Write
    " g0 P: w( }# N0 I/ \, P/ K5 `
  1025. RTS
    ) S! ^" Q7 e5 O, ]0 `/ w

  1026. + o9 B$ t% r) F5 z0 w1 S4 V; A
  1027. ;==============================, W- Z; ~9 t8 ]2 B% n  j6 H) o
  1028. Init_Palette_Addr;初始化调色板数据$ j! m8 ~% O2 n
  1029. LDX #$00+ H% h# W, p  V! g; I  f! w& Q
  1030. Init_Palette_Addr_Write
    ' A* B: y( j' N) G" L5 x7 c& L# R
  1031. LDA Palette_Data,X, A# O7 d, H( z2 w
  1032. STA Palette_Addr,X
    $ D3 K1 c" A$ D- h5 N
  1033. INX
    ; z& G  B: y  T" j: \9 a& X
  1034. CPX #$20, K; h1 h8 Y; r# X0 B
  1035. BCC Init_Palette_Addr_Write) k; q3 A0 Y5 V: @: j
  1036. RTS4 v+ C' Z; a: W$ e* S
  1037. " k5 X% d  N7 _
  1038. ;==============================
    - o- [2 G. r# }4 }3 D& W
  1039. Update_Palette_Color;更新调色板颜色: h2 G- @! `3 C( H1 W
  1040. LDA Show_Track_Name+ z4 ]# O; s" u" h  M' |
  1041. BNE Update_Palette_Color_End9 g( X3 i8 I6 j% G3 H) {. n7 D" e
  1042. LDA Palette_Update_Flag" M/ r- d7 Y" r8 j6 G8 R1 `0 w
  1043. BEQ Update_Palette_Color_End2 s1 P, }+ T% s2 A
  1044. LDA #$3F
    7 q) K; V- [7 a9 F4 y$ B9 P
  1045. STA PPU_ADDRESS
    5 P- Z0 h3 R& z' b1 V
  1046. LDA #$00
    6 l( k' l9 S2 M0 i# d0 S
  1047. STA PPU_ADDRESS
    9 t+ z$ l2 h# @  F) n+ g1 A6 H
  1048. LDX #$00
    4 h! Y  L3 w, b8 {  m% a7 |
  1049. Update_Palette_Color_Write
    : d! A  a" A& A6 `* x, e/ B# i
  1050. LDA Palette_Addr,X: ?, \2 X( B6 o% s0 @+ M7 Q; p# C
  1051. STA PPU_DATA+ z2 J1 m4 Q: q2 @
  1052. INX
    ; C: v3 {0 B+ n: N1 M9 z! {
  1053. CPX #$20: e' G; W# B3 U1 S2 o" m8 f
  1054. BCC Update_Palette_Color_Write) T5 m$ d" ?0 b" _7 U* F$ y
  1055. LDA #$00  ^3 b' ^: E( o) {" m+ y
  1056. STA Palette_Update_Flag3 P; N1 J; Q) P& m0 Y- X
  1057. Update_Palette_Color_End
    ) q% J, f% m, H5 H
  1058. RTS) e; p/ t0 i9 {* g, U
  1059. 6 b* _# ~: u& ]" {  G
  1060. ;==============================. O) ?% K- @4 v( _& ]0 {4 `
  1061. Update_Palette_Data;更新调色板数据6 X$ _4 o  D5 u4 S6 g1 n  o3 {
  1062. LDA Show_Track_Name7 y/ G& l, p+ s6 a8 }# F. L
  1063. BNE Update_Palette_Data_End! s" O1 k. j9 e' H
  1064. LDA Music_State
    , |: u) j5 M- s* \* K& P' Y
  1065. BNE Update_Palette_Data_End) h" A8 M* h4 G) b# o
  1066. Update_Palette_Data_Check/ G" O+ `+ R0 ~
  1067. LDA Palette_Wait_Cnt. X' C  U: j: u4 q
  1068. BPL Update_Palette_Data_Check_Over' s6 K/ k( x# B4 Y
  1069. LDA #Palette_Update_Interval7 T9 o: i) j2 B$ H
  1070. STA Palette_Wait_Cnt
    2 T( j0 x; U7 h8 y# C5 k
  1071. Update_Palette_Data_Check_Over: d9 C. z5 c4 ]) j6 y6 u# p* Y9 n
  1072. DEC Palette_Wait_Cnt: X  L8 x& z" t( J
  1073. BNE Update_Palette_Data_End
    : F0 e3 U  @; O
  1074. INC Palette_Update_Flag
    & k( ]+ `2 m2 v$ ^( _
  1075. LDA #Palette_Update_Interval3 }3 f7 |5 r0 I7 j  s5 A- b
  1076. STA Palette_Wait_Cnt
    ( m- k, R7 {. v( L
  1077. LDA Palette_Update_Addr$ L, o" {8 D: X2 l/ Z
  1078. CMP #Palette_Update_Max
    # M5 v. |( B0 k! y* _" ^6 W  {- M
  1079. BNE Update_Palette_Data_Set/ K  p) n3 a4 @" d  ?1 V; Z- [
  1080. LDA #Palette_Update_Min - 1
    # P: Y2 f; ]0 e9 J8 ^. y
  1081. STA Palette_Update_Addr
    0 y! g5 ^: I7 x6 i/ e
  1082. Update_Palette_Data_Set) `/ ?3 }0 e+ z# d
  1083. INC Palette_Update_Addr
    + ~& a( W; B' Q! v4 _; l, b3 p5 ]0 I
  1084. Update_Palette_Data_End
    : h! \, L2 D0 u8 W1 ^  U+ l3 c5 ?  ~
  1085. RTS6 o. N+ z$ a% j  h: k- L
  1086. : d' G$ f1 S& q
  1087. ;==============================1 O& h1 Q* P9 B5 F
  1088. Show_Music_Text;显示静态文本7 |; m5 `+ _0 `5 E# O" `3 o
  1089. LDX #$00! v3 q2 W" Z0 @/ h1 r
  1090. Show_Music_Text_Set
      s1 [9 R& H1 L; v9 j' D
  1091. LDA Static_Text_Data,X
    ' ]" A" a- Z8 R; |. u0 K
  1092. STA Data_L
    3 F* Y! r- t/ S
  1093. INX" I4 t. v8 a2 L0 r1 z3 c
  1094. LDA Static_Text_Data,X0 T1 H% C2 c9 F4 i
  1095. STA Data_H; H2 T$ D* {+ i7 t8 l  Y" F% ~
  1096. INX
    : E. i. K" C5 z" P/ b
  1097. LDY #$00
    " X7 w+ l2 E8 s
  1098. LDA [Data_L],Y
    ( c  e+ q3 ^0 [( O% t! X
  1099. STA Data_Cnt, f% A* C0 U9 e# n2 {9 `
  1100. DEX
    " p( v& G6 I1 F5 S  a6 X3 B
  1101. DEX
    8 w# W) O' Y' Y9 @) k0 T( p
  1102. LDA Static_Text_Pos,X
    / G7 d0 w/ G3 b' o$ x
  1103. STA PPU_ADDRESS$ y7 r0 H  t+ J. Q
  1104. INX
    # ?$ D  Y2 M' n. v0 W  O( y' O
  1105. LDA #$20" K4 j# l) b6 S' p0 k  ]; w
  1106. SEC
    . N3 a# {3 G6 Y4 P6 n7 d1 `# H$ y
  1107. SBC Data_Cnt
    / m* T: @; n9 i$ g, B* i7 ]
  1108. LSR A
    ' N4 ^/ V: k" [: z8 z
  1109. STA Data_Buf
    . o  S& R; P8 ~! n% [
  1110. LDA Static_Text_Pos,X
    / `/ Z9 {; `* E; G6 E0 l
  1111. AND #$E0
    " @. y, W) C. j: H! P/ U( C
  1112. CLC
    ; z8 X8 Z/ U+ g, }9 Q: n8 e6 Y
  1113. ADC Data_Buf
    . y0 W* \( t5 e& Z
  1114. STA PPU_ADDRESS
    * G' I: v  B& i2 D3 i$ n
  1115. INX8 W; T% B8 ]! v9 l4 I/ b% [
  1116. Show_Music_Text_Set_Write/ `; P# l) L, n, ?
  1117. INY
    - x% q- N2 `" r$ v
  1118. LDA [Data_L],Y( ^1 s! x6 _" S/ W
  1119. STA PPU_DATA
    1 G5 k' i0 t, w& r# }& ~
  1120. DEC Data_Cnt* m+ \4 Z1 H4 J
  1121. BNE Show_Music_Text_Set_Write( c" _: A" f2 K" S; t' ~
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    8 A0 K$ u, @4 d" t: ]; X0 A5 l
  1123. BCC Show_Music_Text_Set; \4 l: @' f" N
  1124. RTS
    4 y2 y, g. G: |2 A) a- z
  1125. & ?6 p* G/ R* M
  1126. ;==============================8 U; a9 u1 B  R+ W2 \
  1127. .IF Track_Name_Pos;显示曲目信息
    0 T; v3 o- U0 r6 L
  1128. Show_Track_Info
      x7 h( m3 ^6 i
  1129. INC Show_Track_Name
    1 ?+ \' s5 f/ W4 f+ s9 m5 G6 W
  1130. Show_Track_Info_Clear
    3 H* p% j( s, n
  1131. LDX PPU_Cur& w1 N' V1 v' X
  1132. LDA #Mode_Clear& m2 K9 ~* c& M9 l4 M/ n
  1133. STA PPU_Addr,X
    . ?/ {  r- ?4 W
  1134. INX- G8 d. F1 C* [% N, y: m3 w
  1135. : c: F6 a& g& h" j3 R
  1136. LDA Music_Last
    ; Q, M, o9 [$ ^5 C: \5 c
  1137. JSR Show_Get_Track_Name_Center_Pos) p. u% D' u7 ]0 D: W: {" a, t) G
  1138. Show_Track_Info_Write_Cur
      i5 b1 R5 D, J* R
  1139. LDA #Mode_CntLine2 P7 H5 X. N" f' g/ G0 e# R2 Y
  1140. STA PPU_Addr,X" [4 `( O5 w1 m! d9 @: H
  1141. INX/ o9 c# Y6 |" W9 A' G$ d( I

  1142. + E' k  L% C0 K- U, ?9 j
  1143. LDA Music_Cur- {- J. K5 P5 X0 X5 ?/ C) n
  1144. JSR Show_Get_Track_Name_Center_Pos% y% b4 `; [0 C& A- t0 B( e

  1145. ; f* y/ P4 X, P6 Q  U0 M
  1146. Show_Track_Info_Write_Cur_Data
    0 e6 L- F- V1 {
  1147. INY. W/ V$ X$ k+ {' M( O1 x
  1148. LDA [Data_L],Y. a& Q+ B2 N- B* {: z6 G
  1149. STA PPU_Addr,X# w5 D# e$ q% Z" B0 [' L
  1150. INX3 W. W8 m& M! b: `
  1151. DEC Data_Cnt
    4 M! k3 R% R+ e: G
  1152. BNE Show_Track_Info_Write_Cur_Data
    0 C9 y: t" l) F/ g9 y) M
  1153. Show_Track_Info_End
    $ j1 m. ?5 e8 ]: S) s4 m. _9 ^1 N" }
  1154. STX PPU_Cur2 K7 V; k$ H0 c
  1155. RTS, T/ C( O* Q* @6 Q
  1156. 4 ]4 `2 X3 h7 {" \# k% W$ l& u
  1157. ;==============================
    8 k; ^# |3 Q  X" J# C  n- N
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置  u5 |+ M5 t. y$ @5 h) W3 ~( l
  1159. ASL A; f! F- ^, s- K) O
  1160. TAY# s% Y: g- a3 E/ a1 K) ]5 u; f
  1161. LDA Track_Name_Addr,Y; N# z6 [" ^! F; q" n5 J9 j* ]
  1162. STA Data_L4 ~6 S' m+ _3 v2 N. f
  1163. INY0 M4 ~1 [; m9 |! o0 c0 Q% A5 b
  1164. LDA Track_Name_Addr,Y
    # {: Z1 R) D* C8 d7 G
  1165. STA Data_H# S. r( _& i( d) v6 ^
  1166. LDY #$00  Z. b1 O/ ~  Q5 m
  1167. LDA [Data_L],Y$ u: W: Q' N0 T* G/ y4 _
  1168. STA Data_Cnt
    , z7 x  R9 X' V8 d( q
  1169. LDA #$20, j. S% Q% j# ]6 b
  1170. SEC
    ' W/ {4 n7 K8 q
  1171. SBC Data_Cnt- [' {' X- h) W+ h1 l9 O( a2 M
  1172. LSR A
    # b6 L- d0 ~  P& G5 d2 S4 S
  1173. STA Data_Buf% J0 \( o, l( r6 C
  1174. LDA #HIGH(Track_Name_Pos)  r) ~+ Q3 C# x* O; \4 r4 t
  1175. STA PPU_Addr,X" X$ z/ o4 v( d! v! {3 y) F
  1176. INX
    $ e: s- I' u: B, o
  1177. LDA #LOW(Track_Name_Pos)
    2 b+ q6 Q. k4 w  K" R* f, Z
  1178. AND #$E0
    3 V7 N$ ^- X7 v
  1179. CLC* r% H5 L1 h7 x
  1180. ADC Data_Buf
    6 @/ v, w; A; i( w1 _( J
  1181. STA PPU_Addr,X
    + ?1 _) q- u  q( M# Y: F8 R
  1182. INX
    ' d* l9 }6 L( t. E  W
  1183. LDA Data_Cnt
    ' O9 _* d5 i; ~  B. E2 o4 W' }
  1184. STA PPU_Addr,X
    9 A* u/ R" V# M. b; L6 i. S9 v
  1185. INX! }& o# w' R6 c9 ]3 H, s* c
  1186. Show_Get_Pos_Center_End
    ; A0 P, c! F1 r, @* a- M
  1187. RTS
    , R5 I9 {, z0 }) e, E# E
  1188. .ENDIF
    ) T2 v" X4 n& ]# H+ R. u

  1189.   N: t( R  m. ^1 X+ n; O* U
  1190. ;------------------------------' q0 s1 V0 o8 k% R
  1191. ;命名表数据( y' I# _& I+ |) _9 A9 D6 ^+ P* B% j+ e
  1192. Palette_Attributes8 b3 \9 \8 ~$ U3 [; E. d& f0 s$ u4 S
  1193. .IF SOUND_BAR_SHOW_ENABLE
    ( u7 J+ `6 o, e7 b
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$003 j( E, ?! ]0 G! i( h
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA! ]( h9 u7 u2 x/ H9 p7 n3 y( g
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$553 `) A) i( w$ t
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    5 x! {, Y6 ?* p* k
  1198. .ELSE/ l$ u( N, d( c$ l0 F
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$004 ^  q! E  i) |' T
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    0 I0 B: x! B; y3 O: i' f$ G
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    3 D8 y& E+ _& w' j# P
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$559 y7 k; n- D  Y
  1203. .ENDIF
    & j/ ^0 U- k3 D

  1204. 4 Z% {% _/ V0 Y) r
  1205. ;------------------------------
    * O' w4 b; {6 [% }8 ^8 m
  1206. ;调色板数据
    3 e5 p" C8 {7 U) L) M1 Q
  1207. Palette_Data
    + ]3 c+ U1 F3 V/ u* E9 F/ k
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F: K. E- z" [1 V  H) C; M; g
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    % `0 k- C4 d9 G! ^$ ?

  1210. ! r# k  g) R# w
  1211. ;------------------------------; b& B0 ^! V6 D
  1212. Static_Text_Data
    9 |* e6 E& Z, s/ |# j0 B3 A& {' e
  1213. .WORD Static_Text_Title_Data) _7 F' M4 p# [4 @
  1214. .WORD Static_Text_Author_Data! a9 u2 @' q5 E1 V4 _
  1215. .WORD Static_Text_Date_Data
    5 I0 K3 {& k6 q2 H8 {9 _
  1216. Static_Text_Data_End
    # P1 p- M( ~1 g" L

  1217. $ L2 g4 N, ^" N9 M5 z2 ]! A( X
  1218. ;------------------------------) O9 `, G" Y8 I( h) _3 [0 m
  1219. Static_Text_Pos, i5 c1 ]5 y) \- U9 c
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    " n8 O" C5 G: h" g% c+ z" U
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)1 D; z$ H  y  X  Y" ]/ [( e
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    : |0 o6 b3 x2 E
  1223. Static_Text_Pos_End. x' |4 u( O7 v8 ~/ O. m
  1224. " b% U3 d! ?$ ?  f, d+ p
  1225. ;------------------------------
    + S, ~( D) X# j
  1226. Music_State_Stop, _( `5 D* B$ Z/ z# g
  1227. .IF SOUND_BAR_SHOW_ENABLE" r# j3 H/ A. |# |
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00# x3 ]. p* t5 L
  1229. ELSE0 l$ D# R4 J+ Q' l
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$008 d3 `6 S$ }/ ^; M5 l0 b' x" b
  1231. .ENDIF; A' @3 s7 ^: `  B2 x
  1232. Music_State_Play
    & [6 @/ {# T6 E* w% W( @
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    % x. a, N/ o: ^: I, K8 w6 |

  1234. 8 K3 A0 o: L1 M9 x; y9 R5 d
  1235. ;------------------------------
    3 P0 r7 f2 t  ~% Q* L# t
  1236. Sound_Bar_Text_Data;声音类型文本) E3 k% U0 Y. ^1 O
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)! M( t- F* R6 k0 g7 t! d& j
  1238. .DB "SQ1-",$FF! k) l7 @. m0 U8 o: i. n
  1239. .DB $FE,"SQ2-",$FF) p; s* N9 b- H( V/ _
  1240. .DB $FE,"TRI-",$FF
    ; H% Q" s, F4 {) Y2 ?
  1241. .DB $FE,"NOI-",$FF: a" z$ l, T0 Y+ s
  1242. .DB $FE,"DMC-",$FF,$00
    $ b6 ^" j( [! q, m9 N

  1243. + ^3 ]  n6 B2 N  s# R2 X- t% h
  1244. .IF Track_Name_Pos' A$ n/ \, A% X3 m4 j8 ]( o
  1245. ;------------------------------
    ' v* b; |0 i  T, Q4 b- V
  1246. Track_Name_Addr;曲目名地址索引
    . Z8 t2 t' z% a2 s7 A8 w  e# Y. O  k
  1247. .WORD Trackr_01
    + x/ p/ k9 q# ~5 Z6 ^$ r
  1248. .WORD Trackr_02
    ( S' B( f7 O# I) }. w( x9 c' g/ s
  1249. .WORD Trackr_03
    # y; e  T4 x3 N$ `7 s9 U% \% _( z
  1250. .WORD Trackr_04& D- z% D4 P3 c4 B% g! O
  1251. .WORD Trackr_05& a' l; m  c3 q8 V* |
  1252. .WORD Trackr_06
    8 X# w: ]+ k. {5 N7 c) k' N" F# C# j- [
  1253. .WORD Trackr_07. S  d, X' F% L7 i) H! ?+ g. w0 `" P0 Z9 T
  1254. .WORD Trackr_08
    9 {; j$ Q8 D, h6 Z1 T
  1255. .WORD Trackr_09! X- I5 U! p# l3 z0 F
  1256. .WORD Trackr_10" R9 x: d" i5 @$ I  \% k5 F
  1257. .WORD Trackr_11) \! }1 H* p2 b" f  n
  1258. .WORD Trackr_12+ Y* O# X2 @7 ~' G; T/ K
  1259. .WORD Trackr_13
    - j* N7 K! d% {1 ]% `% i# K
  1260. .WORD Trackr_14
    4 ]- e' E9 V6 P) i
  1261. .WORD Trackr_15
      X1 i: D6 ~2 t0 \
  1262. .WORD Trackr_16: ~4 h% K4 j( h- p- [
  1263. .WORD Trackr_17$ x0 I, D4 F6 q# ]  z( O
  1264. .WORD Trackr_18
    $ [  j7 N! l9 u  D$ _: u
  1265. .WORD Trackr_195 v1 A% O9 _' y
  1266. .WORD Trackr_20
    $ W  Z9 [/ Z' O. o6 x% w
  1267. .WORD Trackr_21
    $ h, F7 y/ y5 ^8 W7 y7 F
  1268. .WORD Trackr_22# K7 A# ]& }6 }4 j5 a  T$ j4 \
  1269. .WORD Trackr_23
    5 p1 ]5 ~, y4 |* I
  1270. .WORD Trackr_24  g6 j! y: j" A3 F# V9 Z
  1271. .WORD Trackr_25
    2 w7 ?, v. F* b* X' A* c
  1272. .WORD Trackr_26
    * T+ f! Y( W/ k' G+ k: M
  1273. .WORD Trackr_27  e, v8 a& u0 A$ B! N
  1274. .WORD Trackr_28
    + N) L4 T7 J8 b# q3 m5 x
  1275. .WORD Trackr_29
    ' @) ?' D' a: s* L. q
  1276. .WORD Trackr_30
    9 F! v9 P# ^' h9 I. m+ A* _
  1277. .WORD Trackr_31& L) a& m3 `0 j$ C$ X+ U
  1278. .WORD Trackr_32
      W. X5 h# d1 q
  1279. .WORD Trackr_33( V( j  M5 e/ t3 j
  1280. .WORD Trackr_34. m- Y- a4 v: L# `% [+ r) _
  1281. .WORD Trackr_35, v7 U( _8 O  ]. ?- l7 J
  1282. .WORD Trackr_36' x% x1 c) t/ I: T+ r& g+ b
  1283. .WORD Trackr_37
    + q0 T* G. L2 W
  1284. .WORD Trackr_38
    . `3 m% U* Z4 n8 K" ?
  1285. .WORD Trackr_39
    9 r( }$ Z7 B3 @* ^: {3 B3 y( i( P
  1286. - {  I9 A3 Z: }/ w1 l8 R' L2 P
  1287. ;------------------------------+ _( C5 n, T  ~/ g9 h* A
  1288. Trackr_Name_Data9 n: B: A* u8 ]! u8 O8 c. [
  1289. Trackr_01 .DB $05,"BGM 1"# G( h7 c# ^; N3 c5 `
  1290. Trackr_02 .DB $05,"BGM 2"
    9 g' n# ?7 p6 ^4 j0 x
  1291. Trackr_03 .DB $05,"BGM 3"
    4 r4 B" h& m& d
  1292. Trackr_04 .DB $05,"BGM 4"
    $ _+ w/ }  r9 S4 |) A
  1293. Trackr_05 .DB $05,"BGM 5"
    3 G7 ?/ h( ~9 x  l" O& H
  1294. Trackr_06 .DB $05,"BGM 6"
    5 v$ O+ h  r4 W( e7 ~+ l, p: I
  1295. Trackr_07 .DB $05,"BGM 7"
    / e, h# s, X$ [4 [
  1296. Trackr_08 .DB $05,"GREAT"
    . M6 D* U1 ]5 e$ I: |- N$ ^
  1297. Trackr_09 .DB $08,"BOSS BOM"' w" K7 X% a0 \9 |  H& b& E
  1298. Trackr_10 .DB $08,"BOSS2BGM"/ W0 f8 g0 ]8 D$ U1 K
  1299. Trackr_11 .DB $07,"P CLEAR"6 V) N, v+ p0 I; s
  1300. Trackr_12 .DB $07,"A CLEAR"
    + C9 N( T* j8 j- o
  1301. Trackr_13 .DB $04,"OVER"
    ' l: r5 X. @! c; G; A
  1302. Trackr_14 .DB $06,"ENDING"
    ; O& `: R/ o7 X* G; ]2 [+ ~
  1303. Trackr_15 .DB $04,"SUTA"
    ! ?+ |' y+ Z' K+ N. C
  1304. Trackr_16 .DB $07,"THUNDER"; D$ e3 M# X; K0 A
  1305. Trackr_17 .DB $04,"SHOT"
    - B& o' k% k* K1 o+ d% i7 H) W
  1306. Trackr_18 .DB $05,"LASER"2 j" x1 S4 U- E$ P
  1307. Trackr_19 .DB $06,"SPREAD"
    " Q6 P8 k' ?; x
  1308. Trackr_20 .DB $04,"FIRE"$ S. R5 b/ h7 d5 M
  1309. Trackr_21 .DB $06,"B SHOT"
    ! U; L( p; S1 f$ }, ~* g3 x9 W/ G0 P
  1310. Trackr_22 .DB $08,"T DAMEGE"
    % y0 G5 }# t* @" @, O. [7 M2 q
  1311. Trackr_23 .DB $07,"HARETSU"$ M& G6 D) t; E- ]
  1312. Trackr_24 .DB $05,"T OUT"
    4 K4 k3 n) y6 i# \& k$ I& u
  1313. Trackr_25 .DB $05,"Z OUT"3 q1 w6 D9 y% j6 s4 @9 [
  1314. Trackr_26 .DB $05,"A OUT"! I. L! W" N8 B$ ^
  1315. Trackr_27 .DB $04,"ROLL"1 K2 W6 Y) W3 N: u
  1316. Trackr_28 .DB $06,"APPEAR"  @1 b; N* X' ?, b: r* b3 j& }
  1317. Trackr_29 .DB $05,"POWER"
    8 L4 z; K, Y+ `
  1318. Trackr_30 .DB $07,"BOKK BK"
    " v8 w( ]' @$ q/ P
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    4 H" E7 C, @. ?1 y+ @  W
  1320. Trackr_32 .DB $08,"BAKUHA 2"1 X/ }# }; h: c7 I6 j. B+ p
  1321. Trackr_33 .DB $05,"ARUKU") {9 o! N0 h5 f- v, p6 _
  1322. Trackr_34 .DB $06,"JIWARE", M! l, B4 l1 B* K  Z4 p; X# ?
  1323. Trackr_35 .DB $05,"SILEN"
    * e5 x3 [1 `3 ]4 D
  1324. Trackr_36 .DB $05,"P 1UP"3 S! G2 w* h# i5 X7 F
  1325. Trackr_37 .DB $05,"P OUT"- h' x5 M; V4 c. F& y( h  A
  1326. Trackr_38 .DB $05,"B OUT"
    6 g, S: Q, c; L  V6 j
  1327. Trackr_39 .DB $05,"PAUSE"; [! x8 q# z& X4 C' X5 M
  1328. 5 Y  E5 j1 v5 f7 h- _" n) Y
  1329. .ENDIF- F4 A( ?* r0 }8 o* R# D- J
  1330. 0 e1 \6 j6 ^, ~; u. V2 q" T1 F2 O
  1331. ;------------------------------- f1 S% U$ Y( q' X9 e
  1332. Static_Text_Title_Data;静态文本数据
    6 U& s! E( r0 V( t( c
  1333. .DB 12
    4 G0 k& X$ n( @9 u+ t; ^. b8 N0 o& |
  1334. .DB "SUPER CONTRA"; P- m7 h9 D8 U) F* y* j/ I
  1335. Static_Text_Author_Data
    & N# X9 |* f1 _) M
  1336. .DB 23
    0 Z& P, r# |  l- z' J  d
  1337. .DB "EXTRACT BY FLAMECYCLONE"" g6 Q7 y1 Q1 u) A3 l
  1338. Static_Text_Date_Data3 E4 c7 q8 ^$ A& j
  1339. .DB 109 p; c& @7 E6 @: q. J  X0 e! C1 i
  1340. .DB "2023.07.11"
    , ~$ P; E/ z, A* N. N( Q/ y

  1341.   I$ N$ l' G1 A: W8 L% b
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    9 d9 m3 v' ]5 f! A, Q4 j% b
  1343. .ORG RESET_ADDR1 c2 k/ a* F- x' y0 X

  1344. # X$ ?+ ?5 w* K" t

  1345. - {! [# }$ _+ [, N4 u2 Y! _
  1346. ;==================================================
    $ u2 B8 J: \$ N/ V0 U; U
  1347. ;切到主程序bank$ K& U! G6 i1 b2 A. Z
  1348. SwitchMainBank
    : e" q8 \' {5 G* C. Y* L. u% v' Y8 k
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    " [+ u2 Q  m. d3 }
  1350. JSR SwitchBank8000
    5 ~& `4 u, I6 g2 b. f( n" U
  1351. RTS8 k7 w! |8 A6 h- Q2 F( t3 Y
  1352. 5 j0 x# e( N7 ?: V6 h" ], D
  1353. ;==================================================
    ( H! \6 X+ ~$ e4 @6 R/ [) m
  1354. SwitchBank8000;切换bank到8000-9FFF
    + c1 S9 T4 D  {& F( s# s: C$ E
  1355. PHA
    2 A9 ^3 T8 R4 t1 v- c3 Z
  1356. LDA #$06
    6 i' Z4 V; ^9 t( U$ M% h& @
  1357. STA MMC3_BANK_CTRL1 F# M2 `  ]2 a2 }' Q3 d7 M% o
  1358. PLA. P) v8 s4 e8 d) p  i$ @5 q
  1359. STA MMC3_BANK_DATA
    5 n8 x: w. v" M/ g2 O3 C
  1360. RTS
    " i: g# R( ~( j0 P( j9 d* w0 t
  1361. ( e  p8 u; Q) j7 c3 P# B! d5 v0 K5 z- B
  1362. ;==================================================
    $ t, W( k4 ^# c- K) m1 J3 B. ]
  1363. SwitchBankA000;切换bank到A000-BFFF
    8 ^1 n' k( h+ N
  1364. PHA
    ; [" E+ I& j6 A# j- ^4 I9 K
  1365. LDA #$07
    - A3 i2 H* ?; |/ N
  1366. STA MMC3_BANK_CTRL4 i: O2 T7 e$ h& ?
  1367. PLA* ~* T/ ~# b1 C: a! r$ H* ~
  1368. STA MMC3_BANK_DATA& P" P3 N1 v4 ]
  1369. RTS; f; o! x. q: v6 C) B  j+ J0 N
  1370. * y/ `0 |9 \9 {1 ~* [/ S
  1371. ;==================================================- q6 A2 w4 t- r
  1372. Sund_Bank_Init;音乐bamk初始化
    + e, n" L. N4 E- h+ \
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK' O2 c# T. N5 t: v& U, ?' a
  1374. STA Music_Bank_8000, ?# [4 n3 E  R9 ]+ E( m
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK' @3 t4 r! F1 Z0 T
  1376. STA Music_Bank_A000
    6 O5 `% s! s( }" c' s
  1377. RTS
    + D. {, {4 u" X( T% ~, V* n8 b
  1378. ) y& F( E' [  w& J; F
  1379. ;==================================================9 Z( T$ j- E3 u$ ^2 ~, a7 X
  1380. Sund_Bank_Set;切换音乐bank
    : z$ ~6 E$ c0 a% ?2 k
  1381. LDA Music_Bank_8000
    : L% [# l4 L* e. z1 I
  1382. JSR SwitchBank80006 [1 _+ O$ s% \& f: d
  1383. LDA Music_Bank_A000
    7 l6 P" l; r' r* ?/ S
  1384. JSR SwitchBankA000
    ; F$ z; x* s; n% S2 g% y
  1385. RTS
    + [1 U' Y5 ^+ _2 I; p" I
  1386. ! I2 ?7 }3 h) e3 g, W
  1387. ;==================================================
      R  {! F6 K3 U+ a) Q
  1388. Sound_Init;音乐初始化
    ' Q% f& f; d" f8 l+ y
  1389. PHA$ t4 C! H' g) n% z" z1 n* ^
  1390. JSR Sund_Bank_Set
    % r1 l/ V3 c1 H: c$ E8 ^0 s( i7 G
  1391. PLA
    , f7 J2 A" b# J$ ?
  1392. JSR Music_Init_Addr
    . @4 t; s( U1 L) V% k
  1393. JSR SwitchMainBank
    + u2 a2 E% I7 I* Y

  1394. ) S( n2 ?+ S# v5 y5 n7 Q
  1395. JSR Music_Bar_ReSet! C! N7 ?- o/ s. j: V$ t
  1396. JSR Time_ReSet
    4 R9 v/ E/ ]( F" s4 t+ o! @5 A7 b
  1397. LDA #$00  w$ d  ^% \4 k6 D( I$ U
  1398. STA Music_State; C' @( c; C; T6 ?9 b/ M+ a
  1399. JSR Music_Stata_Show
    9 D& ^9 @8 s5 \- Y* o
  1400. .IF Track_Name_Pos  E# O5 K5 _, X
  1401. JSR Show_Track_Info
    + c9 a0 M2 P& @$ `( R3 r) h
  1402. .ENDIF
    + [4 m% `+ ^; B; z5 f
  1403. ; s, S7 o: W- e# Q! w4 }
  1404. RTS' {/ K' Q6 u' B$ L2 A

  1405. + O/ R; @: i  W3 X) O) X9 d( C6 L' O
  1406. ;==================================================' I9 _7 p+ g: C- k) T7 q/ D
  1407. Sound_Play;音乐播放; T1 C; t' |: y+ }
  1408. PHA
    / j, T: p/ K  Y6 a7 I$ Z+ Z6 F
  1409. JSR Sund_Bank_Set: @, Z$ Q) l! J( E: \! m" g
  1410. PLA
    . e% \+ f1 B) C' T4 O
  1411. LDA Music_State$ z( _; H4 C6 d* ~, U
  1412. BNE Sound_Play_End% \+ u* q3 j6 W  n: [4 W' Y, `/ |. m
  1413. JSR Music_Play_Addr
    & h/ D+ E% W7 s: M
  1414. Sound_Play_End! Z& B/ o! Q5 h: v# y) d, Y
  1415. JSR SwitchMainBank
    2 B' t8 M+ W( G/ R
  1416. RTS& H3 N. L* {! }1 ~" {! k

  1417. 8 T9 M/ ?+ s3 _' t+ k
  1418. ;==================================================% A, p9 }3 e* V$ S$ N  _( n, r0 y
  1419. .IF Music_Reset_Addr
    : _2 b) e# ^6 w9 Q
  1420. Sound_Reset;音乐重设(如果有的话)
    ) Z+ T' G+ u: ~! X8 r
  1421. JSR Sund_Bank_Set
    % _/ J3 F1 |, T7 L* `
  1422. JSR Music_Reset_Addr
    9 S2 k: e. A! }: s: L
  1423. JSR SwitchMainBank
    5 c2 W4 H0 L1 F& u, h$ S" J0 Q
  1424. RTS
    ( G9 I! s+ G6 b. G! Z
  1425. .ENDIF
    ' q0 I# i0 l7 l+ m& O7 Y
  1426. 2 f; d  a) e: s  u6 h+ {; B( g, L
  1427. ;==================================================9 F2 C- O& }' c! R9 F
  1428. MainLoop;死循环
    ! J0 ^; v$ b" r6 h
  1429. JMP MainLoop( `  {( O4 |) G* T

  1430. $ `. N1 [4 m7 f
  1431. ;==================================================
    - N: b4 \6 v; P9 i5 V
  1432. NmiProgram;Nmi中断处理
    : ]3 S3 U9 ~' @# ?# u- L- s: q
  1433. PHA8 H+ p" h( J. q
  1434. TXA1 N( ?/ j( r& b/ ^: \* E
  1435. PHA$ ]7 ^" A' Y1 h2 P
  1436. TYA
      ~% G9 h6 e) S) Q* h
  1437. PHA
    ; i* ], w/ z) }* q4 n
  1438. 3 T/ C' J, E1 l# [: e
  1439. LDA PPU_STATUS! o$ H  Y! y- p+ z# i' d
  1440. LDA #$00
    , V5 |/ N" w, q# ?
  1441. STA PPU_CTRL
    * h1 p. k$ ?7 M5 P! y! S- i

  1442. ' l) S2 n: |. _
  1443. ;切换主程序bank/ J9 V: u& I% B% j5 ~! H! b
  1444. JSR SwitchMainBank% ?( k6 C/ p* J3 {# K, C
  1445. ' H% F, M4 ]7 \; a. F
  1446. ;NMI处理
    * Z  B, E, Y& r! [" O1 C
  1447. JSR NmiProgramProcess5 N* f. v: E7 m, T/ L0 t' v8 A

  1448. 7 v5 H- k1 b4 @2 U
  1449. Nmi_Proc_End# P( n1 B( O9 H) S1 q
  1450. PLA
    $ `# z9 V3 {( V4 e" x
  1451. TAY
    - y7 R0 B0 M, e" b
  1452. PLA
    7 T! g8 l' _3 D0 n! N
  1453. TAX
    % Y8 x  G4 l3 ?6 ?; X
  1454. PLA' i' T+ u1 P; c7 G
  1455. % g' V. P9 k1 b* {4 l3 g
  1456. RTI
    . R' o! f% k9 I4 P9 ~* p
  1457. ' ]2 \1 ?( k7 E
  1458. ;==================================================
    1 Y) \0 D) F  |& }( m
  1459. ResetProgram;重置中断处理  B1 s. X$ p$ c& ^& t4 I
  1460. SEI
      G) w3 _/ o+ m) x, x. y
  1461. CLD" K' A7 o# x1 p
  1462. LDA #$00
    , J6 C8 ~( F( K* ?
  1463. STA PPU_CTRL( @% z0 s# H6 E2 R! g
  1464. STA PPU_MASK. B' d! c* ?) @) N% z1 `  d

  1465. ) ]% P" B. K' v( J  O
  1466. JSR SwitchMainBank% A; O$ k' v" h
  1467. JMP ProgramBegin
    / e( j) Q2 k' g% V+ p

  1468. ; K+ g  G) L# K+ ~
  1469. ;==================================================( r& n: J9 s  p1 w; ]
  1470. IrqProgram;Irq中断处理4 O0 q! w: c  j, G0 _# {+ f- E
  1471. RTI
      ?# X5 L: k% S! S) D# {" n% Q. c% L
  1472. 5 D! z4 \  f3 C$ ?9 B: Y
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ( e+ q/ W- f4 }
  1474. .ORG $FF80
    0 V, s- d0 e& r. X  q8 t4 D
  1475. STA $4000,X9 i& M' b# u. P4 h0 _" d
  1476. STA Sound_Bar + $00,X, s' C$ i! L$ f. j
  1477. RTS
    6 N& s& `  H; f/ O

  1478. 6 A5 e" d/ I  Y- a3 y+ W
  1479. .ORG $FF88
    # w" ^' x( T* @5 r
  1480. STA $4000,Y. Q; j0 ~6 N5 ~( g1 E6 r
  1481. STA Sound_Bar + $00,Y! v: y# y2 u4 y7 }' a" n
  1482. RTS7 `5 l: n$ L8 a; F

  1483. 0 N5 o) m) h% }) z- G
  1484. .ORG $FF901 E0 Y1 ]3 H9 {7 m" O% q- j/ g1 j
  1485. STA $4004,X( P, z% I. z( {' o7 L
  1486. STA Sound_Bar + $04,X
    " {  m3 K& Q$ |* R/ M0 R
  1487. RTS
    : Z( |+ o# ]" g8 {0 o0 s( h" X5 m

  1488. : `2 z4 j7 {' q: r) g
  1489. .ORG $FF98
    / G0 x0 N: D0 ]& X. n
  1490. STA $4004,Y" g: E3 }: c5 ?# k
  1491. STA Sound_Bar + $04,Y3 R: |/ i& I1 W1 P3 g$ R
  1492. RTS
    # i" e( P8 L  }4 a
  1493. 0 t$ N3 B3 x$ l3 a' c1 X6 @* P2 n: q
  1494. .ORG $FFA0
    5 L+ g1 V. V- r# P
  1495. STA $4008,X( L  `3 N% n& I, Z& F# ?
  1496. STA Sound_Bar + $08,X* k6 C3 ^6 [' Q) V
  1497. RTS! x/ c3 Q4 ~9 s

  1498. 0 S; F3 L1 a+ y
  1499. .ORG $FFA8
    # D0 Y$ ~/ \+ A' w9 z
  1500. STA $4008,Y
    & S0 S, @" F7 D+ t% Y6 L4 x
  1501. STA Sound_Bar + $08,Y
    : V7 @" s7 V6 f+ K9 `# H* i
  1502. RTS
    % G4 ^3 N# k/ C

  1503. : T3 l2 Z& _8 ]; D2 R( A
  1504. .ORG $FFB0( e( V. J# o( r/ y$ e5 A2 V$ w) N
  1505. STA $400C,X
    4 T/ A# h; {/ W. i
  1506. STA Sound_Bar + $0C,X
    # ^6 C+ Q8 v2 R8 @, L. j8 U
  1507. RTS, u1 w8 ~" @7 D! c9 P) Q
  1508. - h' D& V* _# z; i8 W: Z5 F, k$ M
  1509. .ORG $FFB8
    0 n) n! O1 n+ c% b
  1510. STA $400C,Y# y% c# o1 w) r
  1511. STA Sound_Bar + $0C,Y1 T, ~" E0 F, T$ e3 G- K
  1512. RTS
    : c' A* w* h& X& v; q' B

  1513. 3 I( s; H& L# e, {1 G
  1514. .ORG $FFC0
    ( z: W/ O& o2 R- T1 Q
  1515. STA $4000
    & I2 k- A$ A3 W# I$ ?3 s- y: ?
  1516. STA Sound_Bar + $00
    ' [( a3 E% P) D- d8 {* w
  1517. RTS" m6 u: l! K6 X) U: F. @' I
  1518. 8 N; P+ r: }+ p5 N  n$ D% a
  1519. .ORG $FFC8
      ^/ R+ J8 _: w5 O" H3 i
  1520. STA $4004
    / Z) n8 Z8 ]4 x: H' B
  1521. STA Sound_Bar + $04' Y8 B6 X  g9 c* t! a8 [2 I
  1522. RTS
    " x8 \$ o& k5 L0 Y! m5 n, E

  1523. 2 _, L0 ]8 \5 t1 m& q7 Q0 |
  1524. .ORG $FFD0/ ]9 `' I0 i! w1 X. p1 r: E9 R
  1525. STA $4008
    ' ?5 }/ k+ a! |. r/ M
  1526. STA Sound_Bar + $08& f. c5 n& L0 m9 C, \& t+ w
  1527. RTS, l$ @4 b6 B. }

  1528. 3 U4 |& j: u1 |
  1529. .ORG $FFD8
    2 F9 X! H$ U: C3 `
  1530. STA $400C
    8 |' |: }% W; H* ^, \5 w+ K
  1531. STA Sound_Bar + $0C6 W" v1 {1 w9 J! x. q
  1532. RTS
    1 {! \/ }0 ^( d' ^" e; M' S$ a

  1533. 6 y! N7 z/ N2 q/ C( P4 l
  1534. .ENDIF
    # s9 v; w- F6 [# P

  1535. ' _2 r2 P9 b5 X1 F( @: H  E
  1536. .ORG $FFFA
    * D# U- S  F( V
  1537. .WORD NmiProgram- E" Q1 C* ?6 R% a# F
  1538. .WORD ResetProgram
    $ t# j" Z3 A7 r) F- Y/ r
  1539. .WORD IrqProgram
复制代码

* t% q4 m3 h9 R) v6 ?
: i" c+ z1 R5 c
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1176 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3163 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-6 08:26

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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