EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
5 t2 [5 x0 ~$ A) P
- U# h+ k3 J3 j0 G. V1.魂斗罗
8 [) ]" v4 B4 i2 M' i2.超级魂斗罗
6 A, q) U0 D6 X1 B3.赤影战士+ x5 c8 f2 T) f; w' h1 W9 R( H
4.忍者龙剑传2% N$ R( o& {: c& l0 ?9 Y
+ K: q) T, |9 N6 T, k2 ^
6 L  J  u  V" d; c& |# @+ ]3 `$ [/ j

1 u5 f1 m0 B. A% |) K, g' ~6 n& K, k: f/ H: z# {
源码:
( n# D) `3 I4 d
  1. ;[FC音乐][播放器模板]. J: }1 I5 \  h& h; F: [  P
  2. ;FlameCyclone 20230710% d- w4 j6 `' }* z

  3. 3 p$ I! R- m) \# }
  4. ;文件头% U9 U4 r( Y, {  U1 _2 W
  5. ;======================================================================
    & g4 _( W5 E1 r  s
  6. .INESPRG 4                                              ;16KB PRG 数量2 }! b: N% P- ?# ?) b6 l6 I
  7. .INESCHR 0                                               ;8KB CHR 数量
    ' B2 ]& C/ Z$ X" f9 w! j5 o% m' Q4 g
  8. .INESMAP 4                                                   ;mapper 4* A+ G1 a# e8 U8 x# L9 }6 R5 ^. |  w
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直/ l1 ^% Q5 E  z2 F3 _
  10. ! g1 [1 P  [* ]! E. h/ L
  11. ;==================================================
    ( {2 @+ K2 X* @, L  N0 R. q) C' U
  12. SOUND_BAR_SHOW_ENABLE       = 1! z! U+ \# j( p. O# A
  13. ;==================================================
    & P8 f. D5 m! [3 H. d: |3 K
  14. BANK_DATA_MASK              = $070 |* [$ N' D4 T8 W# x: Q
  15. ;==================================================" I' K- |$ J  A7 T$ N$ d$ _$ J
  16. SOUND_DATA_BANK_0           = $00
    . ~% p- B2 `4 y( ?
  17. SOUND_DATA_BANK_1           = $01+ r, G1 N7 L7 f$ e" @; r
  18. SOUND_DATA_BANK_2           = $024 B6 B! a! C5 R: D
  19. SOUND_DATA_BANK_C000        = $06# N4 P- N% t/ [/ x# f2 B3 m
  20. 6 r+ h/ k& f5 }: W3 l3 k1 V; ~6 I
  21. ;-------------------------------------------------3 w9 B( w& k3 {+ U3 Z! Z
  22. CHR_DATA_BANK               = $04/ E: F  H6 a  _1 B' z6 R% Y4 N
  23. CHR_DATA_ADDR               = $A000
    ; @; o) w4 k& {1 Q' `
  24. ;-------------------------------------------------
    6 l. X% Y3 l# U% ^0 l6 U
  25. PROGRAM_BANK                = $05+ E6 T. i$ f8 ]$ p2 M$ [+ R
  26. PROGRAM_ADDR                = $8000
    4 A& z: t% D# T2 }: Y
  27. ;-------------------------------------------------
    ( h& @8 k. @& W( \3 _4 j0 c4 \
  28. RESET_BANK                  = $07
    * D, S8 v% T! R: F  l3 K5 g% H
  29. RESET_ADDR                  = $FE00: Y5 A* g+ B) X
  30. ;==================================================6 s" Q3 |6 }1 f% X
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    + M9 S# f, ]! A9 H1 i' _
  32. Music_Play_Addr             = $813C ;音乐播放地址. }" }. _$ L' V
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    & n# Z4 J/ e& O" @% Y
  34. ;==================================================
      |9 B3 F* Q& h7 \' F
  35. Music_Song_Total            = 039  ;全部曲目总数* g' @  t' \" P2 |  y3 i
  36. Music_Start_Song            = 007  ;初始播放曲目
    1 I8 k% P; b, `8 s
  37. ;==================================================
    5 J  u& A; n! M) t, ^2 ^

  38. ' v, G5 g- ^- _. V3 L+ C
  39. ;==================================================" _5 |; y  u9 S0 B6 h1 w2 o1 U
  40. Title_Text_Pos      = $210D ;标题文本位置
      t$ O/ N! s# C" {2 O7 j+ R
  41. Author_Info_Pos     = $2284 ;作者文本位置
    " p! m( L3 c# R
  42. Date_Info_Pos       = $22CB ;日期文本位置
    ) q/ o! C) O4 I% w
  43. ;------------------------------
    ( e# a1 l. }3 [$ E+ ~* k% Q: C
  44. ;------------------------------8 P+ C, n9 h! W  w
  45. .IF SOUND_BAR_SHOW_ENABLE6 Y: M- P; G! u
  46. Play_Index_Pos      = $21B3 ;当前曲目位置6 U1 B0 j9 w) u7 k4 A
  47. Play_Time_Pos       = $21F3 ;播放时间位置  ^2 c* X- H- r9 \' p) e% ?4 [
  48. Play_State_Pos      = $2233 ;播放状态位置0 V' z  N1 ]/ z( B2 w5 N
  49. .ELSE, C% F; P6 O) A
  50. , X0 ]* L  r. c( e; M4 S, r% }; E* g$ }
  51. .IF Music_Song_Total > 99+ d. r- I: H6 D6 q8 H
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    2 N4 S8 C8 y% H* ]: H
  53. .ELSE
    ! y( F9 @5 C7 c

  54. % t. B! ]  o6 F  V
  55. .IF Music_Song_Total > 9
    , U$ z7 l; |0 b. t
  56. Play_Index_Pos      = $21AD ;当前曲目位置: V* o$ a* x* k+ Q+ h- ]1 J; u
  57. .ELSE
    - N' L* s$ z% s( A: L
  58. Play_Index_Pos      = $21AE ;当前曲目位置3 b6 X$ m0 }% V' {
  59. .ENDIF. S% H4 ?0 _: c7 n
  60. $ \: d! ~2 c0 w7 i4 J0 t3 j- x9 ]5 P
  61. .ENDIF' R9 y1 n: N3 W4 J, \+ |! ~

  62. / ]2 e( ~. U" Q) g# A0 t4 m
  63. ' G1 y7 l, f6 }* [$ q
  64. Play_Time_Pos       = $21EC ;播放时间位置  r6 ]0 Y% w0 J6 p0 q/ ^
  65. Play_State_Pos      = $222C ;播放状态位置; W- \6 @9 ]" t8 i) k
  66. .ENDIF3 {5 n# x! e$ o. l
  67. ;------------------------------
    ( N' A9 N+ H) ^$ N' F* a2 I
  68. Track_Name_Pos      = $216B ;曲目文本位置
    & B. ?- V8 ^' m0 M1 a1 e* P& P2 Q
  69. Sound_Track_Pos     = $21A5 ;声道文本位置5 {5 G/ S3 Y7 A+ M! l6 [* u
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ! H9 M! M! ?# Y' u
  71. ;==================================================
      d# M- w7 y8 P, i6 J) X8 p9 s
  72. Scroll_X = $00
    ; K6 v& S$ w+ |+ H. _+ Z
  73. Scroll_Y = $06
    ) l5 j$ j% w5 O2 P5 r
  74. ;==================================================$ O5 D, x  H) F7 I* i' ?$ K
  75. RAM_Cln_1       = $0100
    - g; [$ A; @! H: l* y( A0 h; h5 t  ?: x& }
  76. RAM_Cln_1_Size  = $80: ]% Q4 ^" H/ T: t! Q* c1 j
  77. RAM_Cln_2       = $00E0
    ! S4 M9 D  G& ~, C; _8 S( G
  78. RAM_Cln_2_Size  = $20
    ' T& G; n# s( I
  79. RAM_Cln_3       = $00E0" i9 l& \7 e9 y7 Q; `$ i
  80. RAM_Cln_3_Size  = $203 o% ]/ _! {3 c/ _  R1 z- `4 r
  81. ; d2 Z7 [) P/ E, A* q$ k* `
  82. ;==================================================5 t! D( k, M  Q* R
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器( r  ^! ~, f) M0 c2 P3 l. c8 W4 I+ z/ y
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    7 t$ O5 t6 x9 R& K2 ?
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    + o9 L0 m  H: [6 t0 ^! R2 |% B5 x
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    " S& k! w; r8 l* a4 q) n
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加14 J5 k$ I7 W) p+ H7 b# o- b
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 5 F4 D  ]# M; X: j9 t- e
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加) t7 V. z& E" J; m" A+ d* Y1 o" J
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 4 h4 C. x  L6 D( A8 E
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存& P8 e+ L! {! Z9 c9 M' T
  92. APU_STATUS              =   $4015   ;声音通道切换6 U+ v( p$ Z* N: W
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    7 }! M: k1 g& L; I* {
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通+ Y5 _0 ]5 M& T9 R& g+ _
  95. ;==================================================
    " `' {5 u9 F7 D- P
  96. MMC3_BANK_CTRL          =   $80000 U$ t$ P! N' E& Y( ^
  97. MMC3_BANK_DATA          =   $8001
    5 Q6 q- c# V" O4 z$ p3 R
  98. MMC3_MIRRORING          =   $A0009 d6 [( V8 w( u6 O! N# _
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    9 C$ K% y+ y. P5 {; U6 P$ U7 ?" _
  100. MMC3_IRQ_LATCH          =   $C000
    7 y7 @/ h" E, w, x! {! q& L1 B
  101. MMC3_IRQ_RELOAD         =   $C001
    & C6 ], U% ]+ }1 e: N
  102. MMC3_IRQ_DISABLE        =   $E000
    3 ]6 D3 ]* C8 h# e# q
  103. MMC3_IRQ_ENABLE         =   $E001- B. p" r( A3 q5 k
  104.   L7 L" v, c! A2 l; Y- @& E! i
  105. ;音乐数据块& {; i+ x% a* l2 E) G! N

  106. . \; ]0 O) p# T4 Y6 _+ u2 b% [8 T1 X
  107. ;======================================================================" M: s! A5 F% p2 G
  108. .IF SOUND_BAR_SHOW_ENABLE
    4 G* `" K8 Q; F- [
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK9 D7 q: B- l1 |
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    : ?; |# j# f1 H( n% f2 L
  111. & p* V" z: C5 d, X# e
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK2 U/ X3 V8 u+ I( `, a: y, W
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    ( o8 ~3 d1 _: B4 d! B; x: E% `# C
  114. 4 ^4 y# b& ~, v( f! \2 f3 F+ |; v
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK1 p" B+ E5 J! Z* Z9 q
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    % v! d& p. \) g4 R
  117. * M6 w1 T2 F. H) d) c  Q" O, V1 W. u
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    / {! v0 @$ R9 _7 }- M. c9 e, a
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    # q9 s, m6 k8 W& Z" C

  120. " P6 C. p* i8 K) ?/ P8 ^) e1 B9 U
  121. .ELSE8 s7 c, ]' h- g# n9 ~& |
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    0 K, a7 }. l" E6 o
  123. .INCBIN "sound_bank/music_data_0.bank". Y, ^8 _3 f- L6 [" ^1 b* j" ^  G

  124. & x# I7 r5 J% o+ a6 @% t
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    - F" B# S* @8 s3 ~/ F1 r' m% ~
  126. .INCBIN "sound_bank/music_data_1.bank"
    ( }" U3 {" K$ d
  127. ! y* @2 f' _* e0 \: K
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ( }6 U* n0 G% P  n) `. t" A; v) @4 u, g
  129. .INCBIN "sound_bank/music_data_2.bank"8 @- j/ \4 n% e/ ?
  130. 4 q  f; _/ Q* Y2 s5 `2 k
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    8 U( f3 o  [/ C8 y. f0 A
  132. .INCBIN "sound_bank/music_data_3.bank"
    3 q$ z" ^( m7 g! B, x5 v% H
  133. .ENDIF
    * e& r0 D( r9 m$ D9 S# ?
  134. , V+ q6 V+ Z6 A3 b2 q' N
  135. ;CHR图形数据$ d/ q! e$ v, \3 U- P) z. E7 e
  136. ;======================================================================
    " ?: _3 C1 T2 z, P+ N
  137. .BANK CHR_DATA_BANK
    3 l# k1 M; b0 A. ?8 B0 [6 {9 K
  138. .INCBIN "chr_bank/chr_data.chr"
      O) ~2 T# K3 y+ I) ^
  139. 0 f: M5 z' w" v; W7 d
  140. ;==================================================
    , U' R. e% F3 E& @' S5 ]. ]
  141. PPU_Addr        = $0300
    / V0 x, m3 j5 h) h: l% |. O+ E: L* Q
  142. Palette_Addr    = $03C0
    3 ]$ U( y8 x: ^; x/ d
  143. Sound_Bar       = PPU_Addr+$E02 Y. \# F' ]6 d5 L: I4 W5 h% K7 }
  144. ;==================================================  ^: x* z$ V  L- q6 U6 U% s
  145. Palette_Update_Addr     = Palette_Addr+$0D. f& }! H' `/ C
  146. Palette_Update_Max      = $2C
    / H9 e9 M& F7 O2 K" p( a3 s
  147. Palette_Update_Min      = $21$ l( y5 x7 G, r: Q) ?" Q9 Y
  148. Palette_Update_Interval = 60
    & |" r. E. c, n$ _% t+ ]
  149. ;==================================================
    ( D0 Y2 R( A$ F  X
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    ! V6 A3 e, M4 `' {' P
  151. Screen_State        = Sound_Bar_Cnt+$01
      p3 u) {& o& x
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    ) W7 ~% e9 {1 D1 z4 v
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03# q6 t/ ]3 S, z- l
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    - L& `$ y6 G* \: G
  155. ;==================================================& Z# E' j0 I3 w# ^6 x6 V2 P( q
  156. Data_L              = $70
    ' @6 s; ^# Q- ]9 L* G% I. L
  157. Data_H              = Data_L + $01
    4 r2 G9 y# u& H
  158. Data_Cnt            = Data_L + $02; l/ o9 m6 X0 k6 e/ H5 i0 P" y! a
  159. Data_Buf            = Data_L + $036 h( b7 _9 a# {5 Z) o$ O
  160. Time_Wait_Cnt       = Data_L + $04
    8 M! ?5 z3 ]; m- c6 w1 D: o
  161. Palette_Wait_Cnt    = Data_L + $05. T: B3 @0 x/ X8 a
  162. Palette_Update_Flag = Data_L + $06; |7 g8 O/ X& H! J; u- S& h, `
  163. Show_Track_Name     = Data_L + $07
    + f$ V, @5 M- ?5 P0 I7 I1 J2 `5 ~' L
  164. ;==================================================
    - p' X. b* E" C5 j1 m
  165. Key_Keep            = Show_Track_Name + 1
    $ t" S# z  W" Q* N
  166. Key_Once            = Key_Keep+$01$ L3 s) L/ ~; r. z9 u
  167. Key_Kemp            = Key_Keep+$02, ]" I  W4 _4 d/ {; f% x4 {
  168. Key_Temp            = Key_Keep+$033 }- U7 b, R. G) U
  169. Key_Getv            = Key_Keep+$04
    " D' H$ G( b2 b, ?. w4 E0 _! m$ a! E
  170. ;==================================================
    0 f3 q( z1 N- G! H: {
  171. Music_Cur           = Key_Getv+$01
    * i6 N; l/ D1 d- r
  172. Music_Last          = Music_Cur+$01
    ' p1 h- s1 i0 z- S# w  D' V% N
  173. Music_State         = Music_Cur+$02
    : }  p( R: I! C' j+ U1 H, B
  174. ;==================================================0 L# s2 P) T2 d: w+ m. D  {% {7 @
  175. HEX_Data            = Music_State+$01# a6 V% A" @4 H2 P" ]
  176. DEC_H               = HEX_Data+$01
    3 o$ X: v) O; x4 ^
  177. DEC_T               = HEX_Data+$02( Z: e6 _/ q8 H4 P. T( _& S8 d
  178. DEC_L               = HEX_Data+$03
    % Y: E3 t# c) {1 C' K1 p
  179. ;==================================================
    & D, \3 ]6 v9 K9 q  g
  180. Time_S              = DEC_L+$01+ X: Y- F  Y1 o2 i
  181. Time_M              = Time_S+$01
    5 e' V  O1 m  v3 ~* @6 w
  182. Time_H              = Time_S+$02- q9 `/ r7 n- z; K2 W
  183. Time_Cnt            = Time_S+$03% A2 @8 g# T" b
  184. + _3 U, V( B0 ^4 F
  185. ;==================================================
    1 F' o( m# [) w" q+ w
  186. Music_Bank_8000 = Time_Cnt + 1/ u& k8 @; Y  X4 g) K: N: J' }
  187. Music_Bank_A000 = Music_Bank_8000 + 14 c1 C- `! H& u, O7 ?) o
  188. ;==================================================( ~8 J. O) s. \2 \; C4 ]
  189. 9 x2 n) p: p/ C# B) x' i, e
  190. ;======================================================================
    , H# R) U/ B6 q) M% i% o
  191. .BANK PROGRAM_BANK7 i3 _: V( S# R' X" S
  192. .ORG PROGRAM_ADDR$ V, I) s( ?$ L( L# }

  193. ; o! `* a  x$ e1 V6 [& I7 Z9 N/ M
  194. ;==================================================; u3 M8 y) D" O1 \
  195. NmiProgramProcess;NMI中断程序处理
    3 W. R) [% L" t. X' s
  196. ;处理PPU图像, V0 b- ?, h+ h( {
  197. JSR PPU_Proc
    9 B- B; `5 ~8 r. K; B: o1 a2 y" q( \

  198. ! Z  f! l! x- b$ v( E0 J
  199. ;启用NMI中断
    : A0 Z* E/ W$ @% W4 Y" O
  200. LDA #$80
    3 ]/ t6 ^# g. y" L% |7 I
  201. STA PPU_CTRL
    - W' @" w/ C# a0 T9 L
  202. ) A# Y/ R- b! F1 d# G% }1 y) d
  203. ;更新调色板
    9 s8 Q( Z9 U2 ~
  204. JSR Update_Palette_Data" C! o: B4 n' P5 e6 `
  205.   Q5 M2 ?; ]7 e' F8 y% c
  206. ;显示时间(缓冲)
    & [; f) O& I( h: N
  207. JSR Time_Show3 F2 v% u) R6 ^+ B. O: H4 U

  208. ! G$ s& C0 s4 j/ B. j- o
  209. ;播放计时
      @' y# W/ _2 q4 S, W' J/ v
  210. JSR Time_Count
    ' a- v  T! S4 k, @; X
  211. . T) N7 h' N( c- o* K) q; W
  212. ;播放声音
    1 m2 f# S2 h9 Y& m
  213. JSR Sound_Play
    : P& w4 ]  \- X7 H2 B1 C
  214. / \9 H  t4 ?/ t5 q" ?  @, \+ T
  215. ;切换音乐(手柄触发)
    7 Q# x$ S1 Z- @. e2 V
  216. JSR Music_Switch" b* G  g+ O) \+ v) A
  217. ) M; J2 A/ G; F/ k8 ]! D
  218. ;音乐显示(缓冲)
    ' d7 E8 |0 \8 \
  219. .IF SOUND_BAR_SHOW_ENABLE1 r4 P) e" U+ I& c+ x+ K: `
  220. JSR Music_Vision5 j' G' Z6 I  ~. u4 I9 |/ V% x4 O
  221. .ENDIF; |6 P7 N- M: H. o7 W
  222. . q" ?" g% \) p4 T2 c
  223. LDA Time_Wait_Cnt$ v: K% \0 G* p  E
  224. BEQ NmiProgramProcessEnd- g& X# H  z: E! G6 j) i
  225. DEC Time_Wait_Cnt
    * R- w  V  ~3 f; V
  226. NmiProgramProcessEnd! r  E# d6 f6 H, z. t- U
  227. RTS8 S; d" z, [" N5 k" a5 t1 F+ w
  228. $ s) f$ T& q: F9 q2 k. C3 f, |) w
  229. ;==================================================, B! J' ~) C$ ^4 I5 p( O
  230. ProgramBegin;主程序3 s) x: [8 `, l. b
  231. LDA #$00
    & N6 H- K4 x: b  Q  W+ q
  232. STA PPU_CTRL
    - [1 \/ j8 h& t" L6 k
  233. STA PPU_STATUS% F: Y* n2 G: q8 I7 _. ^) H
  234. STA PPU_MASK5 ]) M% _1 N- v7 z; L0 j
  235. STA APU_STATUS
    ' H$ |# Q+ u+ k2 Q; _2 B" M
  236. STA PPU_SCROLL9 L: j2 b$ s" j! x+ T; T9 O
  237. STA PPU_SCROLL
    % o1 P% ]% g/ {7 I6 r
  238. LDA #$C00 x1 c- [1 X  p8 m
  239. STA JOY2_FRAME1 S4 ?$ H; }6 B, e# D& p7 [

  240. 3 i; `/ L+ E- M4 O& X" E7 _
  241. LDX #$FF
    2 P' ?* |+ P" Q$ X
  242. TXS
    ) G0 G  e5 r7 Q  w" V3 I
  243. LDA #$00; }/ o+ w. P: d0 J/ ^& i
  244. STA PPU_CTRL0 g; [" t" |: @& {, C" i1 \
  245. STA PPU_MASK
    5 e7 [2 _  M# ~; {
  246. STA MMC3_IRQ_DISABLE# f8 K+ U: ]1 J- g9 u4 f9 y0 K
  247. % G. h4 j* F, h( G, Y2 D2 ?0 @9 ]
  248. ;==============================9 O) G( s  y) Z9 d  a- i4 h
  249. ;调色板清空, u) R) K' V$ c
  250. LDA #$3F+ e$ q; N$ C$ e' O. @
  251. STA PPU_ADDRESS8 D1 x6 [8 b. ~; Y/ G% |
  252. LDA #$00
    5 F& q  [  h3 U0 ]% Q; N+ d
  253. STA PPU_ADDRESS' C- s  M/ A7 @6 B1 c
  254. LDA #$0F9 V4 X  m  Q* z
  255. Palette_Clear
    6 u8 Z. }) \4 D/ m$ V) F
  256. STA PPU_DATA
    6 O8 F( `& E  j4 R' e0 o" s
  257. INX  y4 z8 I+ M) L* }0 I: E
  258. CPX #$20
    - ]5 i4 G/ T8 j8 t- y2 ^
  259. BCC Palette_Clear. v8 G1 N& W4 l- W2 y
  260. LDA #$00( {# ?8 I: ?) `8 g3 X
  261. STA APU_STATUS
    ! j+ g: h* U  J4 C7 k" D
  262. ;==============================! J8 n4 S8 q) W3 O; g" r8 [1 s  L
  263. ;初始化背景调色板. m6 }* D  `3 M$ i/ p
  264. JSR Set_Palette_Color- E/ G2 F( a4 r+ A
  265. JSR Set_NameTable_Attributes
    0 v8 d% o/ Y# \7 N3 s9 s

  266.   P: b1 G# T  Q
  267. ;==============================. f  `. ~# U6 s
  268. ;RAM初始化$ ^+ T% l1 ^8 N  ?
  269. RAM_Clear_All# R$ Y- V# _' ?: J/ o
  270. LDX #$00/ J, f2 p/ p' U
  271. LDA #$00
    # O3 V& O* R# y* Z
  272. RAM_Clear_All_Start1 ?% H' `& M" F7 h2 n2 p" d
  273. STA $00,X
    1 g! D- c3 F  c2 n# e& E
  274. STA $0100,X. o( ~" Y- ?  l4 o% M  l1 O' k5 P8 G- ^
  275. STA $0200,X: {7 s3 I! n4 r
  276. STA $0300,X
    9 s' e  \$ Z' g5 M9 L
  277. STA $0400,X
    ) v8 |" K! V8 ?( p1 f8 j
  278. STA $0500,X
    4 |+ M. u/ K) k; z
  279. STA $0600,X" k8 I2 k( u/ v! h' l- m' e' M
  280. STA $0700,X5 P1 R# X" n1 N( n
  281. INX
    - k; c3 d  W0 }% u
  282. BNE RAM_Clear_All_Start
    # e: Y7 F% ?% I# [! b
  283. - {# F2 d8 F3 f7 [5 {
  284. JSR VramInit
    2 Z3 t, x$ q  \- j1 t
  285. JSR Init_Palette_Addr
    - v' e- q" X2 ~& c2 q3 v2 b
  286. : o% K4 F0 q5 R7 k2 c: ?4 M6 D1 U
  287. .IF Music_Reset_Addr
    & t% l# d. U: U% T  Z8 t
  288. JSR Sound_Reset8 k' u. N( i7 j* e
  289. .Endif1 g' _; f3 {4 D8 g# ^3 J& h

  290. % [. q( `0 B- v8 r$ }/ [* V
  291. LDA #Music_Start_Song-$01* a! D0 p$ ]. _4 h/ a
  292. STA Music_Cur" _" F8 b  `+ y$ v( i/ o: C: L
  293.   v" a: z$ }; h" x* V& F
  294. JSR Show_Music_Text
    9 P3 e/ n# x2 o6 q/ L( M# D* d7 o
  295. * M, A" b8 A$ D. m# H2 D( ~
  296. .IF SOUND_BAR_SHOW_ENABLE& L3 a# _7 i+ c- C
  297. JSR Sound_Bar_Text_Set! d. b) b/ ~8 e; B( b! S# s+ ]
  298. .ENDIF. y1 U5 @$ r  d, L+ {0 o
  299. ( y3 \1 l  {" A1 e3 a% Q5 ?
  300. .IF Track_Name_Pos
    0 Z! r/ d- r; e+ H
  301. JSR Show_Track_Info
    ) q& |& {/ I# U- U' s5 e- B
  302. .ENDIF
    4 @5 a' C# [& d+ M
  303. 1 ?' V! b# R3 W1 e
  304. JSR PPU_Proc
    ) n  T) y* v6 y2 {

  305.   U8 [9 p; H7 }! w
  306. LDA #$0E
    0 W, K! I: x; n! j8 H& M
  307. STA Screen_State
    : J- y- b6 c& o% @9 J" f4 s

  308. , Z( M2 S2 z2 D( {1 {
  309. JSR Sund_Bank_Init; H; i7 r4 C$ T4 F* \* H) E: u; v
  310. $ {" i& s. |9 H+ a( ?- E5 e
  311. JSR Music_Show- M( e6 E0 c& F8 k! K
  312. JSR Time_Show
    8 c' @, S8 j2 H6 w0 B+ c, |
  313. JSR Music_Stata_Show1 m2 R0 U  e5 a4 t# Q/ H! e
  314. JSR Time_Delay8 G6 c) V7 x- }; y

  315. 6 N* u. z$ F& s0 N0 @, _
  316. . M+ p- E, |, e% d) D% {2 ~/ I$ `
  317. LDA #$80
    ; L1 ]5 N# q5 Q  a5 R
  318. STA PPU_CTRL+ e6 Z( j* G7 j7 K& t* j
  319. & u) C5 [( k- o# j
  320. LDA #$202 _4 ?' m2 s# _
  321. STA Time_Wait_Cnt
    + l6 R% p& N7 i  E

  322. 8 A( J% @7 J/ g9 P! W
  323. Wait_Time_Over
    ) t; F  A% ~8 P$ y3 y6 ~3 T* t
  324. LDA Time_Wait_Cnt$ T# W2 Z( D! z  x/ {$ F2 c# I
  325. BNE Wait_Time_Over5 K1 k$ u5 s* c0 L- E
  326. + w6 [* I% u" t9 D1 ]. D  B, O5 o' s
  327. LDA #$1F
      X, Y, v9 W* m# Y
  328. STA APU_STATUS( F! e( E; F+ z. O% D  |! q3 M
  329. LDA Music_Cur9 r- {% n  [7 e$ h
  330. JSR Sound_Init
    6 z, U( u0 t# W$ ~
  331. . r' j' B$ K7 Z8 S9 F3 @+ i0 c( j
  332. JMP MainLoop
    & J/ ]: ?( ~$ Y: A, |! _
  333. / _. R% w3 B% B% N$ ~
  334. ;==============================
    & z2 C6 u& R1 _! O7 M
  335. Time_Delay;延时等待! ^% R; |$ L( t8 {2 F% `
  336. LDA PPU_STATUS
    + @9 h4 U  N+ ^& {1 y
  337. BPL Time_Delay& f6 I2 M+ W9 y' G) {
  338. RTS7 w% H$ ~; Q* m& N2 h  q

  339. 5 j4 @0 J  ~& [3 ?! {  Y. o# [, |
  340. ;==============================
    % C# W5 z+ |' E- U9 y$ S
  341. VramInit;初始化图形内存5 X6 D* Q6 _% S# u. a
  342. LDA #CHR_DATA_BANK
    0 ~% @) Y) S) \! k" @* [- h
  343. JSR SwitchBankA0000 r& j) ?: C# g+ {
  344. LDA #LOW(CHR_DATA_ADDR)! M. B3 H( t5 ~& _2 {- R
  345. STA <Data_L
    , p4 S$ [2 o- ]6 v" ]# Z4 S8 S2 G
  346. LDA #HIGH(CHR_DATA_ADDR)
    * @5 s1 w! f: G! v% z
  347. STA <Data_H# S5 Z1 w. A  l+ M: v# y1 c9 d: F
  348. LDY #$00! a# B% S& T6 C" F' m
  349. LDX #$20
    ! X7 q" C6 w( K9 ^- ?- V& O
  350. LDA #$00
    : ^2 b" z) o. _( y% X, D5 B( p  J+ p
  351. STA PPU_ADDRESS0 E  h1 n& d- P% K+ S
  352. STA PPU_ADDRESS
    - d% o* V) s7 `5 k
  353. VramInitWrite) \4 G9 ^, H# z1 I
  354. LDA [Data_L],Y
    ( d2 y+ u" R7 s5 W
  355. STA PPU_DATA& d- j+ d+ ]  j$ r/ E4 Q6 Y
  356. INY
    - W4 M) X% f6 S7 w. S. o
  357. BNE VramInitWrite
    ) k1 }' ~" G* ]
  358. INC Data_H
    - i' d2 _: B9 O2 P8 G
  359. DEX! ?' J% w9 @7 J" Y$ l3 t
  360. BNE VramInitWrite
    1 t4 n3 j. [  M( }" k
  361. RTS- |% K, K4 f; H& O
  362. $ A. H1 b: e$ t
  363. ;==============================
    $ W" e! t7 e" Y2 m/ [
  364. RAM_Clear;RAM清除; u; }  i) M% o
  365. LDX #$005 i7 j/ d& Q) }
  366. LDA #$00
      o& D# z# Y3 m( L9 R  {8 @, I0 l
  367. RAM_Clear_1/ n8 U# [/ d$ N' k0 k. q6 B
  368. STA RAM_Cln_1,X
    + O3 y) p! A) ^7 E6 w
  369. INX& w+ v1 e/ r$ F* p3 i
  370. CPX #RAM_Cln_1_Size
    , d* ^# N: r) ]0 o+ Z6 R& |1 Z
  371. BNE RAM_Clear_1+ u" ~# ^, z: e4 z# A8 e
  372. LDX #$00
    ) X8 Q# u+ f/ D; X! f" X! F, t& R
  373. RAM_Clear_2( q" E7 r& M# E- ~/ F( `
  374. STA RAM_Cln_2,X
    ! b3 K) [6 t( Z  j% s: S
  375. INX
    7 U6 ]) l% f4 y! J4 W
  376. CPX #RAM_Cln_2_Size2 u5 ?$ B7 y8 u% f
  377. BNE RAM_Clear_2* G% ^; ]' P9 f9 ?
  378. LDX #$00' @6 h9 i4 [( n) m: D! D
  379. RAM_Clear_3
    6 a! q- ~% O0 o% |5 v- c
  380. STA RAM_Cln_3,X4 ]/ ^$ @& y! T& B: k4 p( @
  381. INX, P; m, T+ K( k
  382. CPX #RAM_Cln_3_Size
    / k4 J7 b. g; s4 W
  383. BNE RAM_Clear_3# J( J5 t, C: C7 c
  384. RTS
    1 d4 Z8 N" \/ c3 P) d1 b

  385. / ]8 X1 k& x9 [& N
  386. ;==============================
    0 b7 m$ }) ~6 N. i
  387. ;音乐切换
    : g' Y; A$ O  Y9 A- x( y! p' f
  388. Music_Switch$ j  u2 M8 b( M8 M/ `/ W; N% F9 d
  389. JSR Key_Proc# T2 `+ x4 i* E, _& }  }
  390. LDA Key_Once' \/ s4 T4 H9 C. W, {& {
  391. CMP #$10
    $ @/ T& ^: |3 M
  392. BNE Music_Start_SongStop
    ( ^/ A4 ]3 B/ ^7 _
  393. JSR Music_ReSet* j* m: y/ S9 h2 H

  394. ( b/ h! H- b! D) ]" a2 }; W3 U4 Y
  395. ;音乐停止4 r$ ]) W, W2 j: O
  396. Music_Start_SongStop! `" I6 |5 u4 Z; V6 A. O6 {
  397. LDA Key_Once
    - X3 r  }* e  p1 F" r, f& Q
  398. CMP #$20- N3 Y, |0 I+ M; }9 U/ O, s. F3 z
  399. BNE Music_arrow0 r, Q' ?+ O, _) n7 s4 D, i; V
  400. LDA #$01# w  w; H* S' X/ V0 c- p* g( c$ Q1 ^
  401. STA Music_State
    ! y# R! d. Y9 i
  402. JSR Music_Bar_ReSet) [% k. `1 p/ J0 e+ u, b% s
  403. JSR Time_ReSet6 C# B0 Z7 ?5 I3 [( g
  404. JSR RAM_Clear
    8 G) p0 X* o' M- a
  405. JSR Sound_Clear1 n0 \; x3 R6 b+ U! i
  406. JSR Music_Stata_Show
    . ?! N  y: U8 e8 g. Y$ Z8 B
  407. Music_arrow* u3 K8 ^' a; l1 J
  408. LDA Key_Once
    0 `# N: T# {) U9 u
  409. AND #$CF% B$ ?9 N( e1 I! a/ Q0 w& n
  410. BEQ Music_Switch_End
    , Y7 y7 E: G3 ?
  411. JSR Music_Number
    ) v' N- o5 G7 Q$ W2 r/ Y2 B$ y
  412. JSR Music_ReSet
    2 m! t5 J8 c1 M, [
  413. JSR Music_Show
    ) ?; U; N# T& g4 V7 M
  414. Music_Switch_End
    2 q5 [; q' v* V' ~
  415. RTS
    & Z0 X1 H; D/ ?7 q* W6 }
  416. ' W% T- H) z( `" {
  417. ;==============================4 t# z) E- H+ S1 Q: U0 ^/ e6 I
  418. ;音乐曲目切换4 |  b4 w3 P% G; r, u" l4 ]4 R
  419. Music_Number* g! o4 S# d0 ~) W+ `, B
  420. LDA Music_Cur
    7 u, @* a& c6 |+ y6 X# s' v
  421. STA Music_Last1 n  F8 h( @/ r0 \0 z; h
  422. Music_Decrease! a1 A* B3 x% g) g
  423. LDA Key_Once( D9 f5 v; Q  t" h. _  B6 y3 u$ i
  424. AND #$422 u$ J9 b) z& q+ q, `
  425. BEQ Music_Increase$ C% K0 p7 F2 @! b+ O4 z
  426. LDA Music_Cur
    , Z1 G6 S* k) W8 H
  427. BEQ Music_Increase' M: H! e# Q6 S4 i! I6 R
  428. DEC Music_Cur
    ' z; n5 j1 Q; ~* i
  429. Music_Increase
    : ~$ b, |9 X- V! h, m
  430. LDA Key_Once5 b. t7 Y- Z' ]
  431. AND #$81
    ! P: h9 O. \  `
  432. BEQ Music_Decrease_109 c" u0 ?5 w8 H$ ^
  433. LDA Music_Cur
    2 l6 x  \6 c9 z8 r
  434. CMP #Music_Song_Total-01
    3 Y" O) u  {( V5 z
  435. BCS Music_Decrease_10
    # `: C7 Z) ~2 w
  436. INC Music_Cur
    + A& ~! D0 i( x3 s8 P+ s
  437. Music_Decrease_10
    ' z$ O( o  Y) f1 ^* p( Y
  438. LDA Key_Once
    8 R: n6 F# I4 U) a- k' p0 m
  439. CMP #$047 q; @2 I2 G* B0 r
  440. BNE Music_Increase_10" R0 {6 Q& j( B; `8 c, ?/ l" |& u1 V
  441. LDA Music_Cur0 }# E& J0 x1 u: v9 y
  442. CMP #100 I- H5 y" w8 D6 S
  443. BCC Music_Start_Song_Min
    8 Z, m8 l, X: o, B
  444. LDA Music_Cur. Z' e  C8 s- x' J/ y
  445. SEC4 R. x  B* y0 E7 m
  446. SBC #10
      {2 C+ R* P) t+ @% x- r: y( s
  447. STA Music_Cur* V  Q1 V$ x% K. K
  448. LDA #$00
    4 M* _, b" q+ l" ~
  449. BEQ Music_Increase_10
    ( P9 Z: c) z, }4 G& ~  `) ]
  450. Music_Start_Song_Min( z3 c1 h3 p1 l+ D) J( c
  451. LDA #$00
    * a* P" J) G0 w# H* t: ^
  452. STA Music_Cur
    $ _, ~4 [+ n% w- G
  453. Music_Increase_103 t, |% A; a  }1 N# L1 E! r. m
  454. LDA Key_Once
    $ ~: O$ }* z4 T- T; n
  455. CMP #$089 _! u/ I6 }. O) Z8 ~  T. P
  456. BNE Music_Number_End
    ) r$ n' ?" D& G0 E% Q! g
  457. LDA Music_Cur3 Y. d4 m! {  s: y6 h, b/ K
  458. CLC* ^( D9 P4 U' U
  459. ADC #10
      R. _) c- O' o/ V) o1 h2 s
  460. CMP #Music_Song_Total-01* C2 T. `0 X  {' A, q/ [* ]% w' ]
  461. BCS Music_Start_Song_Max5 C  F. Q. G% Y* C* _
  462. STA Music_Cur
    * x7 {  S6 a- _" {0 f3 M0 D
  463. LDA #00
    + Z" p# e+ A5 a9 M- \
  464. BEQ Music_Number_End
    + ], d. q5 A, ]' K
  465. Music_Start_Song_Max
    + T" L2 y% N: d, s
  466. LDA #Music_Song_Total-01
    + l/ v7 `0 Y0 ^: ~
  467. STA Music_Cur8 ]: o" N+ H# S" P  r; }+ S
  468. Music_Number_End
    8 |; `5 x, g0 L
  469. RTS
    % D5 c0 Y/ O; x+ Y( |# f% h

  470. - Y/ o& l" Q! Q) Q8 o. x% F, D
  471. ;==============================
    - F& V/ e9 w, g
  472. ;音乐重设
    " |& ]# t+ ~' s) `8 y$ R0 ]! \
  473. Music_ReSet& Z5 }. P8 {0 p
  474. JSR RAM_Clear
    ! _; N5 r# D- t0 I" q
  475. JSR Sound_Clear$ {  k4 X4 T8 H5 w8 O: I
  476. LDA #$1F4 h, V9 {! m: [! S. |% }' v' Q
  477. STA APU_STATUS
    . o# j6 ~. |; ~6 d
  478. LDA Music_Cur" j! T9 w3 Z( z/ t" t! b# ?
  479. JSR Sound_Init7 F# j; j: j, b7 ^# R6 W* O& A4 Q
  480. RTS
    + F9 Z) S- _/ C! f
  481. - y0 _4 y3 D; Y5 k! ^7 m7 K" v
  482. ;==============================. _) {/ n, e. ]
  483. ;音乐端口清除& E* P/ q! D! g( t# }6 T
  484. Sound_Clear
    . j3 [3 B: g. C/ y$ \
  485. LDA #$001 B) u: h, o/ k# r' K; x8 ?
  486. STA APU_STATUS% |' A: j3 a( H
  487. LDX #$00- e2 ~7 l! h  Z# B+ ]
  488. Sound_Clear_Start8 \2 D; n! Z" Q* Q! L9 Q
  489. STA $4000,X
    ; T/ B. ]6 `" u( M0 |! B; A' ~7 Q
  490. INX
    ) B/ ~' A$ d2 ?) P8 F1 I# n  V1 P1 x- b
  491. CPX #$146 p- m. m, C+ M7 ~& D$ m
  492. BCC Sound_Clear_Start0 T  ^5 X! E3 @3 |) G* _) x: _
  493. RTS
    5 o, b0 x# F0 F2 N) E

  494. 5 a  d( x7 L2 x) `3 u' C
  495. ;==============================) ?* ~# G" A/ i
  496. ;按键处理
    4 N* ]6 \4 h( `* v' t1 T  C) f8 t1 b4 r
  497. Key_Proc* ]# i; V/ ]5 J. G' k' }
  498. JSR Key_Scan
    & i1 s6 |5 ^; h6 U1 a
  499. LDA Key_Keep: u9 `5 R0 d0 z
  500. STA Key_Temp! U- f: Z( p) ]: Y4 f+ ]
  501. JSR Key_Scan
    3 }  Z+ Z+ \, e9 o
  502. LDA Key_Keep
      v& `- V3 j( ?) N9 O. R
  503. CMP Key_Temp
    8 x6 a2 a3 ~) f' q1 W+ k4 b+ N: e
  504. BEQ Key_Get_Once
    & r" F. i2 q. I. o6 [3 Z7 o  f
  505. LDA Key_Kemp0 F( U- c( [% x) `6 s8 I. R
  506. STA Key_Keep& k+ |( S0 }, Q  M& l
  507. Key_Get_Once" U9 s+ S0 p/ }/ ?( K$ Q4 U" ]& T% P
  508. TAY
    : k2 j" ~7 L; ~8 e4 @
  509. EOR Key_Kemp
    2 ?( a! `# @' n
  510. AND Key_Keep
    * v$ o5 J) p4 y4 H: S9 w
  511. STA Key_Once
    9 i  d! y3 y! a: U2 L6 V$ f6 p6 X! x
  512. STY Key_Kemp/ q+ @1 X; l$ M3 `
  513. RTS% Y9 Z! ]9 b7 O+ X! c% `$ Y; [0 ?
  514. ;------------------------------
    4 m; \5 ~4 V- E* H4 F6 e
  515. ;按键扫描4 z  s! w( t/ N+ v/ n2 R. \) H+ i
  516. Key_Scan/ @6 a# }# [1 u8 H, ~7 v# b8 P
  517. LDX #$017 O7 k: d4 }6 n& o4 C
  518. STX JOY1_FRAME
    ) n4 C7 w! j2 E. V6 n$ E' f( y/ B
  519. DEX) Q, [. V$ J" B: |9 W* C
  520. STX JOY1_FRAME7 ]  Q7 S5 p6 ?, Z' }# @' q
  521. LDX #$08
    & T+ k5 Z: `' \$ C! \" E1 }
  522. Key_Value9 W; c" z4 v) ]+ C! e$ G9 F
  523. LDA JOY1_FRAME
    % r* y! E' g/ D; Y6 s# ]0 P: M
  524. STA Key_Getv9 L& |5 w3 r: Y- x/ M  K# l& H
  525. LSR A9 R2 O0 p8 R; _7 K0 f1 J
  526. ORA Key_Getv: ]* E: {( v$ p$ }; G0 g4 v* z
  527. LSR A% B' U) s( B! U$ p
  528. ROL Key_Keep
    0 r* i8 m. P# V* K8 B2 U
  529. DEX
    4 j( w% P& K3 c* X
  530. BNE Key_Value
    ( v& `2 j- J( X* {. X* S# E9 C; W
  531. RTS- c& }8 o* t8 o( {9 ?2 x

  532. ( O1 ^' F, \+ x: O1 M+ O
  533. ;==============================
    & ]% I/ c  n4 n' p8 g
  534. .IF SOUND_BAR_SHOW_ENABLE7 \3 U9 m) m, w3 s. v1 z
  535. ;音乐条显示. X: Z. m0 W: J) ?! T
  536. Music_Vision
    + L7 f: [3 D7 |; X* ]
  537. JSR Music_Animation
    5 ^& a# K+ E5 |; s: X
  538. JSR PPU_End
    ! b% L) y6 @. ]0 T& K8 v6 b
  539. RTS7 ?7 P3 i& N0 P. M* _8 R
  540. ;------------------------------4 H" G; z* A# {" y# |" ]
  541. ;音乐条显示处理, K  I2 a' K* R* b$ v
  542. Music_Animation  l2 D( A8 o% }6 J
  543. LDX PPU_Cur
    6 d% ~1 V  R/ J
  544. LDA #Mode_Line
    % H, I0 U1 P+ e7 D, y% M# X
  545. STA PPU_Addr,X/ K3 X( d5 w( O' N- }
  546. INX; W# F8 g* D3 }5 d7 r9 @6 h
  547. LDA #HIGH(Sound_Bar_Pos)
    , ^8 A( A7 O  @6 G! j" q# q
  548. STA PPU_Addr,X
    : r7 }+ _: f( m/ K0 @- T2 U
  549. INX% `9 A# x# U) r$ o
  550. LDA #LOW(Sound_Bar_Pos): S) c8 @& v8 P: F7 C6 M* P
  551. STA PPU_Addr,X6 ?0 R& _" ?  T
  552. INX  Q& F) [2 y8 i, J+ z+ z
  553. LDA Sound_Bar
    % @+ c1 }) u- z- F6 P
  554. JSR Volume_Convert
    . M) }  m9 E, f5 x( V
  555. JSR PPU_Return* c: n1 _& h; S5 y" u0 d' ^
  556. LDA Sound_Bar+$4
    - t: S  A! @/ \' W
  557. JSR Volume_Convert/ p! a/ x6 g1 j) w, s& Z
  558. JSR PPU_Return
    * M- S* X. O: ]" ?( s5 g: N
  559. LDA Sound_Bar+$82 U& _) ~2 \3 v6 }
  560. JSR Volume_Convert_Ex# }1 `9 O5 c2 r1 w3 r5 n: ^+ S, N) a
  561. JSR PPU_Return  B) k# |1 i; ^& O- |
  562. LDA Sound_Bar+$C
    ; h, ?6 a/ V. ^6 l+ E, F$ C8 j5 v
  563. JSR Volume_Convert7 O: k) {: Z" x. R
  564. JSR PPU_Return
    ; D4 T$ ?. u' k1 G) U5 F  a
  565. LDY #$10* W! Y# ]6 K# |( u
  566. LDA APU_STATUS& {& |# q- D7 y6 M) ]
  567. AND #$10! ^; I; S  Y4 U: F4 j* i5 i
  568. BNE Volume_Count
    0 r: c, b& O. v2 c" U
  569. LDY #$00
    4 H4 N8 s, n: ?, N, u/ H
  570. BEQ Volume_Count
    ) R8 b5 Q6 d; S/ Z1 E" \
  571. ;------------------------------
    ) b% J8 u9 W9 t) T7 F0 h* j) Z' Y
  572. ;音乐条处理/ Q$ g- W3 O& M9 y
  573. Volume_Convert_Ex
    0 {/ o" d! J/ r' x# f5 r8 E( M
  574. AND #$1F& c4 B7 `6 p; c
  575. TAY
    : z  o3 ^- X* f
  576. BNE Volume_Count5 y  ^$ u  ^" [. {: ]
  577. Volume_Convert
    & S; g. T9 M2 W% w1 I7 z" L8 j
  578. AND #$0F+ \' E! L, d/ D
  579. TAY
    + U6 ~! U# ~* A# H
  580. Volume_Count
    5 G5 b5 b/ g1 }5 X; c# ^1 ^
  581. LDA #$08
    ) D& m! l4 N, r! W/ w) |0 H
  582. STA Sound_Bar_Cnt4 m) P5 v# X6 W- O
  583. Volume_FILL
    - V9 g' N7 H4 C
  584. DEY
    " p  \2 _* t: M& Q, V; G
  585. BEQ Volume_Half
    # D. T$ l1 T; c4 L/ o# l
  586. BMI Volume_Empty6 M! c8 C! C  Z; B" D
  587. DEY
    : w5 ^' m- y7 @) ]1 d' |
  588. Volume_Full
    : F+ P& H8 H2 ?! p! j7 e( \  n
  589. LDA #$16
    2 A2 d+ W7 u+ r- @
  590. BNE Volume_PPU
    6 Z! \: |5 i) |) B; j! \
  591. Volume_Half
    $ i: y$ g( g, S. |/ M; x) ?
  592. LDA #$15
    + f" Z; G6 E) P
  593. BNE Volume_PPU
    ' q; a9 A5 v6 Y& h/ B# \
  594. Volume_Empty% A8 v  k9 V9 {" v- g
  595. LDA #$14
    ; u( \+ O9 W( t9 ]. O, p& [
  596. Volume_PPU
    2 C& f' ]7 B2 Z% L  J
  597. STA PPU_Addr,X
    8 d" D% g, L- `5 h
  598. INX
    ) g+ [0 @& s6 B8 Q9 p- o
  599. DEC Sound_Bar_Cnt6 C( @  A% R* J5 Q$ F
  600. BNE Volume_FILL
    : u) B; {* N4 t( m' `5 T: y
  601. RTS/ J+ K6 U) j5 {. g# i2 n9 s

  602. 4 q$ Z: R; h( z: E9 u8 ]6 {
  603. .ENDIF. T. z4 K8 X$ P! `. a1 q+ l, j

  604. ) M# ^! d' i/ k* z) h# L5 b
  605. ;==============================3 p7 Q! P& E5 E
  606. PPU_Addr_Set;PPU行开始
    ' q9 Q/ b3 s5 B: x8 x
  607. LDX PPU_Cur
    - S) k9 O8 X- C9 h
  608. LDA #Mode_Line+ O8 @! Z* @6 X# u7 P
  609. STA PPU_Addr,X
    . A8 e" g0 X. I! ]# @
  610. INX- k/ @- q, k" I/ l: q; u
  611. RTS% g- [3 _: v) H3 x0 m
  612. 5 R: O. ]' x* _( [4 |' t
  613. PPU_Return;PPU转行
    ) J3 I0 A2 i, F9 K0 P
  614. LDA #Flag_Over3 E; L$ s1 ?# u6 \) p6 H/ w0 [; D$ K
  615. STA PPU_Addr,X/ E- W+ k# O7 P% V6 F# ~9 o
  616. INX
    ( U, P! n* N8 J1 B/ [
  617. LDA #Mode_Return
      A5 i" T3 k+ i  r) @' t
  618. STA PPU_Addr,X2 W, `# z9 z" _4 n# x6 ^5 ]  T
  619. INX
    0 |1 t$ M6 m, t" g- v
  620. RTS5 {9 Z  T' P/ }8 b  E# P
  621. 8 |  C+ [8 C* G" m2 \
  622. ;------------------------------+ T  u! c- n4 Q
  623. PPU_End;PPU结束
    9 v1 B: \1 W# G1 `+ g4 g% ?  [
  624. LDA #Flag_Over7 H1 L% z) S  X4 X/ |* v
  625. STA PPU_Addr,X& h# a0 r) e% r3 ?$ }, s8 q. {
  626. INX
    2 y4 G8 T5 P$ h' i; P  d% Q! i
  627. STX PPU_Cur: l0 J4 o0 I  Q& S: Z
  628. RTS+ {/ V# f" ?2 b
  629. ;==============================
      ?& `" i! E5 |5 Q) _6 ~
  630. Mode_Line     = $FD    ;新起行模式; b& Q+ H% f% P( R7 i
  631. Mode_Return   = $FE    ;转下行模式6 C' G1 \+ K- y1 j
  632. Mode_Clear    = $FC    ;行清除6 z6 T7 \) v9 X/ ?' R2 H3 Z
  633. Mode_CntLine  = $FB    ;行计数写入' t8 T; ?" R8 I0 ~; F
  634. Flag_Over     = $FF    ;行结束标志. ^* d8 @' ^! I7 w7 Y2 Y

  635. 7 }) Z! W* ^3 ?) n
  636. ;------------------------------4 Z# g& G: j. Z* `. @5 T. o
  637. ;PPU处理9 e9 v! ?4 d) [/ s1 A+ o
  638. PPU_Proc6 p0 R9 b; \3 i: T8 W+ |! n/ D
  639. LDX PPU_Cur
    9 J  U6 k# P/ P1 U: H
  640. LDA #$00
    + F; T  q9 X$ f. Y  k
  641. STA PPU_Cur
    7 F: k* t8 F% o% E) ~. w2 L, B
  642. STA PPU_Addr,X
    & l2 e' I% o4 j9 O& w$ Q5 C
  643. LDA PPU_Addr* p- v8 R# S4 o- f+ a) K+ _
  644. BNE PPU_Proc_Beg
    3 h' b- [6 u7 E1 i
  645. PPU_Proc_Ret+ x& k5 J6 e5 A
  646. RTS$ W' t' {# y2 u4 Z9 O
  647. ;------------------------------
    % \/ N! d: A) `1 T
  648. PPU_Proc_Beg  ;处理开始+ E/ N: Q. ~. m% J) }! V) U6 W1 ~
  649. LDX #$00+ |6 a: D4 L) q6 f/ p0 h
  650. STX PPU_MASK
    2 \" l! L6 |4 B. z$ K
  651. ;------------------------------/ N8 F3 p0 L$ i) t
  652. PPU_Mode_Select  ;模式选择
    " q- L9 t0 i* F- I5 |5 [
  653. LDA PPU_Addr,X9 e& w( o' q0 c- J
  654. CMP #Mode_Line5 C& c- s( s. ^* \: ^- U& v
  655. BEQ PPU_Mode_Newline
    + K+ f" S% [) z$ f7 K7 i* p8 F
  656. CMP #Mode_Return4 c. u0 v8 _" P: I
  657. BEQ PPU_Mode_Return" ^: e' B5 G5 l
  658. CMP #Mode_Clear9 K4 u: F" X9 b7 q, G3 M
  659. BEQ PPU_Proc_Clear) Z) i6 K! p& G) G
  660. CMP #Mode_CntLine
    " F5 w0 Q  }3 C4 E1 N  b7 b
  661. BEQ PPU_Proc_Cnt_Line
    ( _- K0 @7 k2 ^) s8 W
  662. RTS
    6 y- e# A! b' U1 r  h4 u9 l) P
  663. ;------------------------------7 }5 I/ _4 R" I( m/ |2 c3 O
  664. PPU_Mode_Return  ;转下行模式( V) P/ P3 I% @6 @. w
  665. LDA PPU_Addr_L
    1 m) f  S' Q8 a$ T8 a. H5 x4 [) O  E
  666. CLC
    3 l, W. B) s6 o
  667. ADC #$208 Y, M( T& l* F
  668. STA PPU_Addr_L3 P# @: V% @  b$ ]/ G/ \- M
  669. BCC PPU_Return_End  {. Y! v8 j" ^! Z
  670. INC PPU_Addr_H, L+ Z3 S$ S: {/ p( Y. R
  671. PPU_Return_End) H7 O( L* H8 u2 o1 [+ |' x
  672. JMP PPU_Set_Increaser
    2 ]7 y# G5 F$ G9 v
  673. ;------------------------------
    & n- d. {' ~; O' D* L
  674. PPU_Mode_Newline  ;新起行模式
    * _* H- V! {1 J9 D, S
  675. INX' g6 M* }) x7 @$ v% l5 U
  676. LDA PPU_Addr,X
    & R* _3 T# o3 x. D- t
  677. STA PPU_Addr_H
    ) N3 I# a$ t+ N! K5 b4 i# m: [
  678. INX" L! q" N0 Q+ i( c3 r/ O4 x
  679. LDA PPU_Addr,X4 V# n( l/ u" [; z2 O* X
  680. STA PPU_Addr_L
    & l8 `3 v! @7 |: f/ ^+ C) f7 e) D
  681. ;------------------------------4 y* K: @+ j6 F+ z
  682. PPU_Set_Increaser   ;设置写入地址
    ' B: N. v: F4 {9 Y
  683. LDA PPU_Addr_H+ q1 s4 P; T9 _0 h
  684. STA PPU_ADDRESS* J% B8 n8 y4 |. J% t$ n) z7 ]0 \
  685. LDA PPU_Addr_L
    - q, R) _; }; A- e. x  d
  686. STA PPU_ADDRESS4 d8 o# d8 e6 e, E8 j8 h
  687. ;------------------------------
    1 Z+ [8 k  {# e& A# o1 t
  688. PPU_Write   ;写入数据& `3 l8 @! a7 ~# c
  689. INX
    ! f3 `- B. ?6 M" O& e  j! \1 I% |
  690. LDA PPU_Addr,X5 P* x* o( r- ~, Q- [
  691. CMP #Flag_Over# p% b3 P8 `" W
  692. BEQ PPU_Proc_End) t4 @  D2 [9 L2 O
  693. STA PPU_DATA+ c6 c  y& G' K, C  B3 c' Y6 Z+ E7 @
  694. JMP PPU_Write) {7 s; v& p2 z' J
  695. ;------------------------------/ p& M* W( h6 t- h
  696. PPU_Proc_End  ;单行写入结束% L5 T3 U9 ~% W; V1 Y0 e* D! r
  697. INX" [% c' F1 R. t  W( D# Z
  698. LDA PPU_Addr,X
    2 {, C# F: B; y1 A  C0 s1 {
  699. BNE PPU_Mode_Select, s8 }0 e* L" X/ B. _
  700. STA PPU_Addr
    9 h$ a' @* D: U, p0 Y* F
  701. JSR Update_Palette_Color4 s' ~0 Q& f. N9 P
  702. LDA #$00$ E' R9 t% @* I+ r5 t& ~( g
  703. STA PPU_ADDRESS
    4 ]4 i. |' V2 W8 Z& D
  704. STA PPU_ADDRESS
    ! C- \0 a8 X4 V0 {
  705. STA Show_Track_Name! W" A) x% e& P" M9 s5 k
  706. LDA #Scroll_X
    - W: V9 B  t& Q, K$ q  ~
  707. STA PPU_SCROLL
    8 t& l3 m+ W0 C3 Q* n5 t
  708. LDA #Scroll_Y; o. [/ H+ s: f4 c! L
  709. STA PPU_SCROLL" h. G$ l5 B) N, P
  710. LDA Screen_State
    9 D* g5 E4 A* \1 J; ?1 `, j, x! T
  711. STA PPU_MASK  ~+ l% D6 ]4 v
  712. RTS
    % B& ~  z: }4 k
  713. % h- g4 b, v( k+ ^6 A* x
  714. PPU_Proc_Clear
    1 C5 [6 }) d' |. _
  715. INX
    " b1 ^1 G, c9 _# t
  716. LDA PPU_Addr,X8 E! r; r- P- }1 l' l9 v8 k6 x
  717. STA PPU_ADDRESS
    1 v, f7 l: O% B) y& \6 f
  718. INX) n, X0 `' O+ i! F  a
  719. LDA PPU_Addr,X
    ! a0 x& r5 V/ Y% @: O
  720. STA PPU_ADDRESS
    ! W5 g' M- b& v
  721. INX% `. O- W: }1 k: @: c
  722. LDY PPU_Addr,X
    3 z/ @* |' Q6 ^$ i9 r
  723. LDA #$00# d* S( E' w2 f4 s/ W5 U
  724. PPU_Proc_Clear_Write
    * L  r3 D" m  W
  725. STA PPU_DATA9 r4 O) M+ ?0 Q' _& G: N0 S
  726. DEY; s# q) d. n, t# b6 r" W
  727. BNE PPU_Proc_Clear_Write
    8 w4 p) @* K5 y
  728. JMP PPU_Proc_End
    + h! [( U. `5 k" G4 ?& Y( @9 T! {) t

  729. ) c1 v0 K0 K+ k  w5 ~
  730. PPU_Proc_Cnt_Line2 a, ~  ^. s0 D/ U6 }' f5 T
  731. INX. x: s( b: q% s7 ^: N- t$ Z
  732. LDA PPU_Addr,X# n6 P7 ?0 n# Q, F, N
  733. STA PPU_ADDRESS: c4 M6 e* y6 X$ ]- b( z& q
  734. INX
    ) ]1 D5 H: t# w( _& N3 h& F1 L: Y
  735. LDA PPU_Addr,X
    3 \# v8 ]1 P+ s" y, K
  736. STA PPU_ADDRESS9 e( K0 K7 B$ U* g" A2 h& m, A9 w
  737. INX3 j, d* U4 O7 T- F
  738. LDY PPU_Addr,X/ E' h9 V1 }& u1 |
  739. PPU_Proc_Cnt_Line_Write
    : u* o& Z+ d; X, L7 @
  740. INX
    ! ?0 e6 X7 @& I9 |
  741. LDA PPU_Addr,X
    7 I' G* y. ?( b) \7 \
  742. STA PPU_DATA2 C4 S. b8 V8 k6 |
  743. DEY
    + S( O, M  g8 B- ^$ `- G2 B
  744. BNE PPU_Proc_Cnt_Line_Write) D: V( U5 |1 O& Y
  745. JMP PPU_Proc_End
    - F6 V, \2 L3 o1 k& j& F
  746. 7 D0 d3 k6 C  k
  747. ;==============================/ G. S5 @! a% ]
  748. HEX_To_Dec;十六进制转十进制
    1 k5 n) x* x. P7 O  ]% e
  749. STA HEX_Data
      H5 a3 d- u4 b; n! {, p- Y8 M
  750. PHA
    $ i+ m. m* p# h& H3 @  K# b
  751. TXA
    / u2 ]6 Q0 C# C/ X3 z" D
  752. PHA
    1 c/ e! N4 W' S2 q
  753. LDX #$00: u4 S$ ?9 }3 _5 `" \
  754. LDA #$008 F1 ~8 _# _/ e. t# `% V* V/ W% V% m
  755. HEX_Cln
    + t6 y" i% h; a7 h$ t6 Y
  756. STA DEC_H,X8 f$ ]: G! S* p3 N' v5 T: V0 f
  757. INX
    7 b) N: u( e& e: U( K6 ]& y
  758. CPX #$03
    0 l+ G7 m* C7 @
  759. BCC HEX_Cln# a3 |& d: l3 t* s. f0 b5 C! U8 ?3 o/ o
  760. LDA HEX_Data3 T; N/ c# j1 |# L) N9 D
  761. ;------------------------------: e! y) P" J. V) p7 C# X$ e  ^2 F( l
  762. HEX_100
    8 p+ z% j) ~7 u
  763. CMP #1008 H) |, \; M" T4 n
  764. BCC HEX_10
      a% `3 k; J: r. a) `
  765. SEC  G4 l" U; h8 c# Z
  766. SBC #100/ m& N6 e9 q+ ~1 \$ b6 ^
  767. INC DEC_H! {2 t, |0 g' ~
  768. BNE HEX_1000 ?5 C1 C! S# K* p9 P  A- I
  769. ;------------------------------0 N  o4 D0 e. k. y& U
  770. HEX_10
    1 F* E% H2 Q7 W5 l6 e) E/ O
  771. CMP #10- g. _. y: R0 Q* v8 |, F
  772. BCC HEX_1
    + g- q: w9 D5 s" s/ D& L
  773. SEC# |& q- Q/ g4 J3 T8 a0 F
  774. SBC #10
    " B' B# H6 }: `1 j* D( t1 ^" N# e6 k
  775. INC DEC_T
    ; A9 v% b9 D9 Q2 U+ x) O" M
  776. BNE HEX_10
      G: J5 ?, @9 t9 g
  777. ;------------------------------
    5 P* D8 w* d* W! {
  778. HEX_1; q. A& u3 `6 @- T
  779. STA DEC_L
    7 [% ^+ n/ L0 `/ u* b, m4 k
  780. PLA$ [6 q' \3 u2 B5 t
  781. TAX
    / S, ^6 n% _& K# M
  782. PLA
    1 E4 W4 m4 m3 I* J& q* f
  783. RTS
    ) E7 j9 r& R; L1 R5 H
  784. 3 H8 I" T+ t3 H9 z5 V
  785. ;==============================; C2 Y- K. i- g
  786. ;音乐曲目显示1 r' C4 V6 t# x6 A
  787. Music_Show; {/ H% s0 _/ ]0 r  n
  788. LDA Music_Cur
    - G& d" I, B. }- m1 @. g/ e
  789. CLC
    ) c5 S2 v- L- e" w7 y( w
  790. ADC #$01
    % j8 g+ @3 f. ?3 o' q8 k: l+ \' @
  791. JSR HEX_To_Dec
    9 @/ v3 `: D3 E& C- {9 [
  792. LDX PPU_Cur
    ' c0 H4 G1 {8 i; Q  h/ {
  793. LDA #$FD
      o# {! z- @; j( u9 o0 @9 A% F
  794. STA PPU_Addr,X7 s, w' [: ^. N+ U6 v
  795. INX
    % B  J8 e$ T3 i6 F' \
  796. LDA #HIGH(Play_Index_Pos)
    0 ]" I. _3 [' p. X1 P5 M# O5 ?5 r6 ~" b
  797. STA PPU_Addr,X
    7 \( ]1 z8 e* e
  798. INX+ f% Q+ V& T  U0 |$ `+ U/ y; S6 c
  799. LDA #LOW(Play_Index_Pos), M& L$ G0 Y$ Y: y6 j' W
  800. STA PPU_Addr,X
    * m, f/ X( G) o7 G! G2 y# U& v% K( ^
  801. INX
      m6 J% T" L& R  S/ }+ j4 L# b) _

  802. , B7 b, ]8 \& X$ X, c9 `  p
  803. .IF Music_Song_Total > 99
    : h' {# x3 g# C3 w0 C
  804. LDA DEC_H
    * F2 `5 p; P7 |8 N, k! n1 q( H
  805. ORA #$30
    ( t( \& I; F) k+ @
  806. STA PPU_Addr,X% s6 _  f# f! o
  807. INX
    $ E( l$ \2 y3 p$ C
  808. .ENDIF  Z2 Z% j! P+ C, S1 r3 j
  809. 0 }4 a0 d- i+ ~, C2 k3 Z
  810. .IF Music_Song_Total > 9: u$ J: R2 A% [$ {' \$ N/ w+ ]2 N* I
  811. LDA DEC_T
    , u! W9 a, j( d, o
  812. ORA #$300 [- H1 h* \. f  X' u
  813. STA PPU_Addr,X
    , K6 C- c; r) E' ~& ]
  814. INX) G/ _2 t& F3 k
  815. .ENDIF4 J7 ?) y' X  t# i, c+ l
  816. ( G' _5 f% J9 S' Q6 z9 V  M
  817. LDA DEC_L
    ' e" e7 a1 S1 p( O5 u# h
  818. ORA #$30
    6 l* J. \! M. c6 U1 {
  819. STA PPU_Addr,X
    ) q6 \4 b' s5 _+ i* O3 W. j, x: B
  820. INX" a* Y. e' z. @% t; Q
  821. / K  s8 }' m, Q+ d
  822. LDA #'/'
    / q4 M5 `% v- V7 G
  823. STA PPU_Addr,X  P5 v( ]) E  i: j1 k
  824. INX
    : O: ^. |; ^, u* n4 I
  825. Music_Show_Total
    + L8 u! i' a, K5 L, {
  826. LDA #Music_Song_Total3 C. g3 v; {5 Y5 Z7 [
  827. JSR HEX_To_Dec$ \4 O4 L2 G8 @9 R1 k& L5 Z3 o
  828. 4 H5 X5 e7 _7 u7 N4 V" a
  829. .IF Music_Song_Total > 99
    2 k) \  p: F, [8 L
  830. LDA DEC_H& e  K* b1 Z2 J6 p/ [
  831. ORA #$30
    5 t$ }" _! a; o. U
  832. STA PPU_Addr,X
    4 m- y8 y( j) |! v
  833. INX
    # F% W0 O( i9 y! U) J) z
  834. .ENDIF, V- C4 ^/ y# b6 S/ j
  835. # v* p* n+ l7 S: q1 |- X8 n9 ]$ n  o
  836. .IF Music_Song_Total > 9: f; R: _7 K5 N
  837. LDA DEC_T
    2 Q" N; V7 Z3 G9 p  d
  838. ORA #$300 Z& C9 w7 ]8 t" t/ K& M1 e# g
  839. STA PPU_Addr,X( S- N9 K$ N, E# u( a; f
  840. INX
    . R! {) v) w. h& g  {
  841. .ENDIF6 w; a1 i% `& ~: n. |6 m

  842. , n' ?+ N5 k0 n5 u' w4 ]9 e
  843. LDA DEC_L; c- N+ _: @8 ^, K- W) k$ t: c- |9 {
  844. ORA #$30+ l# w$ p' Z/ A  [: E
  845. STA PPU_Addr,X: @7 h+ @+ ]3 W9 y# f9 I% k
  846. INX
    9 w) q) M4 }6 w, ^( b9 p& g$ d; J
  847. + p4 f5 b% o, E4 x: r# z0 d/ y
  848. JSR PPU_End
    & A- q1 ~' P: n3 P/ D! g9 ^
  849. Music_Show_End
    + R, `" ?2 T- s" e% d
  850. RTS) a; |$ I, g. D+ K1 @1 s
  851. % t5 o# O+ v* [& |; b) q2 ~
  852. ;==============================
    : e+ |/ J2 o# G- z% [
  853. Time_Show;播放时间显示
    9 Y1 {( i7 m6 ]* v' L
  854. JSR PPU_Addr_Set
    & q4 W! D! p# s8 t0 O" T  c
  855. LDA #HIGH(Play_Time_Pos)% G3 I" T2 D; |: n3 n+ b6 A
  856. STA PPU_Addr,X) a+ V& B3 |' V/ g2 F. X
  857. INX9 B2 ?+ }3 v7 E0 k9 g
  858. LDA #LOW(Play_Time_Pos)$ x, e1 T! w: r& ]
  859. STA PPU_Addr,X
    - Y& }3 p9 D  l2 G' b5 ~; V
  860. INX
    ) \- [: l* w! T- ]: X- j
  861. Time_Show_H
    0 Q7 E) M$ ]: R4 K0 f& F# l5 S" r
  862. LDA Time_H
    4 q/ B0 t2 b3 E& J
  863. JSR HEX_To_Dec
    ( v- O+ f7 B& x* e: o: w- k9 f
  864. JSR Time_Digit
    6 T( |! C* Z) l& H$ A1 {
  865. LDA #':'8 p0 X% y$ ~. t  ?( \" u
  866. STA PPU_Addr,X
    4 P1 }0 l, b5 c1 j4 t9 ~$ t
  867. INX. U4 L7 g( e' ]
  868. Time_Show_M3 b. d4 x, C' P2 d; T9 ]# I
  869. LDA Time_M
    4 t- }: d9 X6 s( [. P2 W
  870. JSR HEX_To_Dec. e% {% G. U  R  b% f
  871. JSR Time_Digit; Z5 R! A. L) m
  872. LDA #':'2 }9 i! x- q8 P& [
  873. STA PPU_Addr,X
    7 S* b/ c" R- L
  874. INX0 Q. b& @7 C* \9 L
  875. Time_Show_S
    4 l" d6 Z  C4 _
  876. LDA Time_S
    , j' \( x2 b4 r& z  C
  877. JSR HEX_To_Dec
    8 p) R; o  Y2 p
  878. JSR Time_Digit
    - y/ k1 [6 M; N* y* B- G
  879. JSR PPU_End- J3 e1 W! B; _* n7 B
  880. Time_Show_End  a. c4 M% W: Y: V! ~! z$ f* ~8 R- x
  881. RTS1 f3 D1 J1 H  R0 C1 ^* j5 x9 A) H

  882. 7 G. r5 m6 Q' \3 ^7 W% n& z' f( t  r
  883. Time_Digit$ a7 L: H- Y2 s0 ~
  884. LDA DEC_T% m  p! S3 g( U& i% b+ I
  885. ORA #$30
    3 v6 X7 g; V* ~1 }" T% G) p
  886. STA PPU_Addr,X* O5 E( j" B! u" c* @0 o1 E
  887. INX9 E6 y+ _% k/ ]4 y3 M( C9 r4 I
  888. LDA DEC_L
    9 V' [9 q6 A4 b2 T9 T! R
  889. ORA #$30
    0 w8 S+ r) l1 a1 Q* V
  890. STA PPU_Addr,X
    3 X5 F) `4 X1 F% [
  891. INX* ~! j2 ~* U9 S6 m: ^- M+ v
  892. RTS
    # w+ S* R$ h5 \
  893. & B% x) ]% {- e7 Y4 W
  894. ;==============================- _$ E; y& u1 K: f# D
  895. Time_Count;计时
    2 D. S# \/ l+ P/ C! t7 h
  896. LDA Music_State5 }4 m$ t! B2 E7 y6 `3 M
  897. ORA Time_Wait_Cnt8 c& t4 }! k' X
  898. BNE Time_Count_End8 ]# o& B- ]$ M( L9 p$ S
  899. INC Time_Cnt; v& H8 X: @) A  f7 V5 Q- c
  900. LDA Time_Cnt
    : w! r8 @! [! P& Z5 Z0 c6 g
  901. CMP #60
    . f  P% a6 O2 z( X- B% J
  902. BCC Time_Count_End3 \6 g' i) ]+ G( a6 l* K
  903. LDA #00( q+ V9 }. f; Z& [3 w8 E
  904. STA Time_Cnt
    1 Z5 p9 v2 [' |; K# g% F* _$ T; V
  905. INC Time_S2 {! D, q' l( L- k
  906. ! |# p9 q% g2 Q8 R( u1 Q, b
  907. Time_S_Cnt
    * h- |% t( N: ]+ M. z
  908. LDA Time_S  M0 `. W, o+ f# S9 a8 k
  909. CMP #60
    ! ^* x2 C* S0 |+ t$ \
  910. BCC Time_Count_End
    9 c! X5 F* \4 P# u3 a+ u0 u4 G
  911. LDA #00
    2 j: @5 A6 ]9 L2 j! y; e
  912. STA Time_S  I8 Z/ n1 Q; @# n/ `$ a
  913. INC Time_M* \9 M. o4 r7 Q$ O# ?" h# Z
  914. ! ~0 u1 E5 F9 |$ v. c* B2 B
  915. Time_M_Cnt% [* ]# f( f1 b3 o! ]6 a
  916. LDA Time_M
    3 R% j# o, `: T
  917. CMP #60
    ' h+ X, ~- l9 M& p
  918. BCC Time_Count_End
    5 l/ ?5 i1 M0 E6 q3 O4 [' ~$ `/ z/ F
  919. LDA #009 e, e7 k3 P2 W, X
  920. STA Time_M! N' ~+ T; z8 ~/ z. Z
  921. INC Time_H
    8 ~2 `! e5 q4 a+ b4 M0 ~" f# i
  922. ; s, J7 O8 t3 |; L
  923. Time_H_Cnt
    5 ~/ O1 ?7 r0 x
  924. LDA Time_H
    % j. J: |/ l% g' Z2 ~% L
  925. CMP #24
    7 h# p) C: {. Y  U* j
  926. BCC Time_Count_End
    , e, ]& L. L) g! r) l
  927. LDA #00) U  D/ ^/ u2 k3 x% K$ ~. Z. N% j
  928. STA Time_H
    2 q4 B- m2 k7 g- J& ]% k; ^
  929. / K. j5 S6 s9 `' b2 |1 [2 R, `3 b
  930. Time_Count_End* J2 h/ M/ E, x6 ]9 [5 w
  931. RTS, y) ]+ N, m0 K# n9 d0 m; F

  932.   C9 o( ~1 ]0 ~5 R3 u3 I
  933. ;==============================+ A7 |1 k2 x: t# s& L8 ]: d" O, z
  934. Time_ReSet;播放时间重置1 k* K3 x) c* O4 f/ A4 \
  935. LDA #$00  ]7 ~8 K6 C9 Y. C2 A. f
  936. STA Time_S
    * S3 Y* c: Z$ x( A  y. O/ Z
  937. STA Time_M 3 E: }, k3 ^/ x" T% W7 c
  938. STA Time_H9 a5 f0 O" @* Y* N  _6 U& a; s
  939. STA Time_Cnt) _4 B1 d# |- v0 G  G: u
  940. RTS6 @! h6 K: M: a7 k; a
  941. ! z) T4 r$ w5 v1 V
  942. ;==============================# K+ y) n) J9 O/ G% {
  943. Music_Bar_ReSet;音乐条重置
    3 g: o7 T' H+ G
  944. LDA #$00
    ' x1 H; c: K- O
  945. LDX #$00$ V$ ]( y4 a/ O" t+ `* C
  946. Music_Bar_ReSet_Set
    $ V  P* h" @! }% |
  947. STA Sound_Bar,X; v2 M$ w1 P+ N0 _, o3 z
  948. INX
    3 D3 p$ g% V3 Q3 K4 H9 L/ l
  949. CPX #$107 v/ ?: y; a5 u) N" M
  950. BCC Music_Bar_ReSet_Set
    2 R) M1 X: Z9 G
  951. RTS
    + r" W& ]) Z& B

  952. 9 g- e! l  g' e0 z" r$ D2 N
  953. ;==============================8 A) |* {/ M( n6 D; q" Y" g/ E! v, {
  954. PPU_Data;PPU数据写入& {- c' x, |3 ?( x9 `; a( |
  955. STY Data_L4 t; x8 \, ~; h; O2 x# g6 \
  956. STX Data_H; Z9 e+ g/ G8 s2 x3 p& S
  957. LDY #$FF
    8 v+ A5 n4 p7 l8 R8 J1 {! p' n
  958. LDX PPU_Cur
    2 ^- Z# T& I! a# t$ }
  959. DEX8 k: u1 L0 {  ?4 u2 e( p  p1 Q( h6 k- O
  960. PPU_Data_Beg: X0 j  X. C2 A; K1 b  k0 i
  961. INX  e. c: J. o5 A/ T  {
  962. INY
    % j: w0 u) J" M9 ^; {( {
  963. LDA [Data_L],Y
    , g8 [$ F: u7 Q9 d2 r# N" N
  964. STA PPU_Addr,X
    . L5 s! r* z/ Q/ S
  965. BNE PPU_Data_Beg
    . C# q$ I: O) I& i5 w+ H) D
  966. STX PPU_Cur( j/ }$ }  [" }/ |6 s& }) w7 M
  967. PPU_Data_End$ U: o  h/ }7 M8 A- _
  968. RTS" c6 Z! }* h  r+ {8 T4 W) W5 d

  969. 0 o! u3 E" ]9 ]9 r) T$ i
  970. ;==============================* B# s7 z3 O  n  E# E
  971. Music_Stata_Show;播放状态显示( m9 p4 e: `) y
  972. LDA Music_State
    * d9 u$ V+ E4 O. q
  973. BEQ Music_Stata_Show_Play
    6 H% \1 S9 ^! _* ~
  974. Music_Stata_Show_Stop
    % o4 K( i1 X1 K& a1 }) ]% z+ S& J
  975. LDY #LOW(Music_State_Stop)
    , i+ G, D- T: D6 k; s
  976. LDX #HIGH(Music_State_Stop)
    3 t' N5 D/ v9 X0 \/ r5 V8 G/ \
  977. JSR PPU_Data
    - M% x* z7 S5 s' j
  978. RTS
    + T( T1 H2 }* U! v" A  u" ?
  979. Music_Stata_Show_Play; m; c% z9 D/ o5 F+ |
  980. LDY #LOW(Music_State_Play)
    1 J3 @4 U- u5 o2 \: [
  981. LDX #HIGH(Music_State_Play)
    , S! |( q# r6 y3 r
  982. JSR PPU_Data/ e( z, @* x5 ~# k; k
  983. RTS
    3 ~, U) h  b' j: S

  984. # \7 C$ B+ B6 q" a4 v- J$ Z, E
  985. .IF SOUND_BAR_SHOW_ENABLE3 ]+ {8 P* Q- p! t
  986. ;==============================
      A# }$ ^/ o5 ^6 Y$ \
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ' [& ]3 s% g% i1 y* w$ Y0 i
  988. LDY #LOW(Sound_Bar_Text_Data)
    8 x% p) r$ H/ r, ?. W8 }
  989. LDX #HIGH(Sound_Bar_Text_Data)
    : W1 c% P" V0 s( E
  990. JSR PPU_Data* K6 c' M5 I7 l( G
  991. RTS1 F' z4 k3 z' r, g; q5 F' r
  992. 0 S6 d! S4 g5 b3 q
  993. .ENDIF$ M) H# ^" }) K5 v% v" ?+ J

  994. 4 d! _, |) G) ^  W/ S
  995. ;==============================6 i1 ^$ n6 d" A" w" M( T3 Q
  996. Set_NameTable_Attributes;设置命名表属性
      I& w, O& P. t) [* P4 @
  997. LDA PPU_STATUS
    * w$ k  ]& o6 a4 K  d  V
  998. LDA #$23
    $ M! S5 W. R, P9 _/ X: E
  999. STA PPU_ADDRESS5 g2 J! K* G/ L" {: O) [3 Q1 b5 J$ X
  1000. LDA #$C0# p$ D8 |. w- k% d/ W1 H8 Q# J& W
  1001. STA PPU_ADDRESS
    ; g6 k0 E0 {- ~; Q
  1002. LDX #$007 [- l2 ~; c1 l3 S- r
  1003. Set_NameTable_Attributes_Write# [1 _) H# S7 k* [' Z+ p7 I7 z
  1004. LDA Palette_Attributes,X
    ; z. g* X' S1 k) I; ?* @
  1005. STA PPU_DATA
    # z/ B" H! P6 T) R: [! F# L( u$ Z/ ~
  1006. INX
    # I* A% N  Y* z2 S6 L0 @
  1007. CPX #$40# O3 P4 [: C; v0 k; U
  1008. BCC Set_NameTable_Attributes_Write) @  }% x* S3 R4 Y
  1009. RTS3 g5 }8 `9 B/ X' e0 H

  1010. + r6 x9 O" U/ ?0 |2 r3 f
  1011. ;==============================9 `/ g5 [% w, Y+ I, x
  1012. Set_Palette_Color;设置调色板数据, q4 @4 N! h5 U7 E+ u0 }9 L2 r
  1013. LDA PPU_STATUS& u& z7 Q1 G0 f6 K; x; r  r
  1014. LDA #$3F  J, ^. ]0 F7 n+ T
  1015. STA PPU_ADDRESS, p+ l. \. k5 h3 I* q+ O) Z( h
  1016. LDA #$00
    ) R( P$ f. Q# s' b- W' P
  1017. STA PPU_ADDRESS2 Z6 `! H0 X1 [) V# v
  1018. LDX #$00% p2 y# v% ?: U+ u% F
  1019. Set_Palette_Color_Write1 q/ R0 c. @3 X* r1 C) A/ x, @
  1020. LDA Palette_Data,X
    " R* c* Z  k" L2 C
  1021. STA PPU_DATA
    . w- p% _2 c# Z1 }" e
  1022. INX. W. m# I5 a9 e2 y* N& z: P
  1023. CPX #$20
      v; k2 I& O0 h- j
  1024. BCC Set_Palette_Color_Write
    , T5 D' J. B, I3 e8 K
  1025. RTS5 ]; }0 d" ^0 |( Z; m- U$ K( e8 d
  1026. 5 I8 u3 I7 E* Q! _
  1027. ;==============================
    : I* Z4 A5 X. b5 H  f% h( f, d) T
  1028. Init_Palette_Addr;初始化调色板数据# s, Z  U" `% q5 w% [1 `3 I
  1029. LDX #$00% w& h+ c% g" @  m6 X. q; l
  1030. Init_Palette_Addr_Write
    ' W0 `" H. ?8 r# d  w4 U& H$ i
  1031. LDA Palette_Data,X% [% Y. w0 p0 _; d
  1032. STA Palette_Addr,X
    9 o- W+ x5 ~: `/ t, |8 X6 l
  1033. INX2 ~" a+ t3 J* j- Q
  1034. CPX #$206 d! c% c1 [  N0 _. ^$ v) B
  1035. BCC Init_Palette_Addr_Write" b! `! [- h  A2 v+ u2 k/ e# A: E8 X
  1036. RTS4 `/ @7 ~* a$ z9 {" H) ?8 P

  1037. ! p! A- I9 d  X3 E/ j3 \
  1038. ;==============================, r! E! K8 l" j8 c/ X2 y  z
  1039. Update_Palette_Color;更新调色板颜色
    ; i! \# W( \& E) U# ?* W
  1040. LDA Show_Track_Name& ?% G6 V0 j# ?/ w: o. u. i# n
  1041. BNE Update_Palette_Color_End( X: G( Z* R4 ^( t4 t0 ~( s
  1042. LDA Palette_Update_Flag5 n. h9 v2 J4 y$ L* k( U
  1043. BEQ Update_Palette_Color_End
    - z2 C' ?8 d. n; o" x
  1044. LDA #$3F* _7 f$ |* b  n' H
  1045. STA PPU_ADDRESS
    1 _- r4 ~3 v  x" r8 b( r& h
  1046. LDA #$006 \$ g* p' k* k6 H+ L2 Q
  1047. STA PPU_ADDRESS+ G* i" s7 Q; J$ e. v: d, ?0 k
  1048. LDX #$00$ C* z/ s/ m$ ]3 `1 u% R: n
  1049. Update_Palette_Color_Write( ?! Z( a. P3 E" @) W: n
  1050. LDA Palette_Addr,X
    . |# x; j3 z- `- C
  1051. STA PPU_DATA
    / y  u5 V9 s7 b; ]6 x
  1052. INX
    0 ~, Y# W6 K0 _, F% w) R1 j
  1053. CPX #$20% ~( R! i% @7 j- g3 E5 m
  1054. BCC Update_Palette_Color_Write
    - ?$ ]( E' \4 p0 R
  1055. LDA #$00
    2 p: v4 n6 z1 @: H7 l: O
  1056. STA Palette_Update_Flag
    : ?, H7 f7 b: Y( ?
  1057. Update_Palette_Color_End; Q* @( m+ q! W8 B
  1058. RTS1 a2 X+ {% X8 }4 x
  1059. . |- q( z1 H) J
  1060. ;==============================
    & E9 \1 I3 W# r) T2 D; X
  1061. Update_Palette_Data;更新调色板数据* ~3 @0 S+ ^5 w" ], e1 w
  1062. LDA Show_Track_Name
    + ~8 {" k3 @) E6 q
  1063. BNE Update_Palette_Data_End
    . D& a7 B' w; l1 |% g; f7 u. ^. b8 c
  1064. LDA Music_State/ s, K6 C! X! i- s: Y) T
  1065. BNE Update_Palette_Data_End
    0 u5 g9 y# z2 m: }$ Y
  1066. Update_Palette_Data_Check
    3 ^' v# w/ P7 A
  1067. LDA Palette_Wait_Cnt- ?( A# a! {: C3 G/ g; J* Y$ a
  1068. BPL Update_Palette_Data_Check_Over
    7 T! w0 |6 V4 F  c3 W& W6 M
  1069. LDA #Palette_Update_Interval
    ! n9 P4 r; _8 M+ S6 o( i
  1070. STA Palette_Wait_Cnt
    1 h4 L' K" m! E
  1071. Update_Palette_Data_Check_Over; h" V6 v2 E9 H+ O
  1072. DEC Palette_Wait_Cnt
    & K) f; E0 ?+ o8 P0 _% [
  1073. BNE Update_Palette_Data_End
    6 K8 h& f) L% l# O
  1074. INC Palette_Update_Flag  I7 Z# @( U  R; Y( |% ]% m
  1075. LDA #Palette_Update_Interval, W1 w( G# }* v. q) Y7 I  }8 U
  1076. STA Palette_Wait_Cnt1 x/ l. v( M1 b; ~
  1077. LDA Palette_Update_Addr
    ! K% c8 e1 z; b
  1078. CMP #Palette_Update_Max
    + L+ ~9 N! }, K# \0 E
  1079. BNE Update_Palette_Data_Set
    7 D- c0 o$ l* {$ |/ C3 b
  1080. LDA #Palette_Update_Min - 13 `- x% v7 k# Y- q& V; H' _) P& {& B
  1081. STA Palette_Update_Addr
    % `  T7 c9 z# Q0 l; n
  1082. Update_Palette_Data_Set
    * w! I  G3 f$ |8 Q4 l; b) z' m
  1083. INC Palette_Update_Addr
    $ u: a* ?% |" U/ n& A) e- s
  1084. Update_Palette_Data_End
    - e( ~. s( S0 _$ Y  r. S
  1085. RTS
    6 W$ |% g! N) S- a7 z! o( T) z; J
  1086. 0 G7 f. c0 ]$ J) X
  1087. ;==============================( X) X, {4 i% S$ e7 B. L
  1088. Show_Music_Text;显示静态文本
    2 d8 x- |6 y4 M6 V6 S
  1089. LDX #$00, k2 f6 \' F/ U4 x
  1090. Show_Music_Text_Set
    4 `! P* q; ?% P" q  j# ~
  1091. LDA Static_Text_Data,X( X5 d+ |: A$ u" p8 J# N4 R1 t+ a
  1092. STA Data_L
    # w' `9 z6 w( D) `/ B
  1093. INX
    . d7 Z1 t* v% r
  1094. LDA Static_Text_Data,X* T+ ^! {4 h8 v( u2 p1 K
  1095. STA Data_H
    % E2 y. |3 u/ X4 I0 N
  1096. INX
    $ l6 Q/ _0 G1 ?1 z
  1097. LDY #$00" Y3 Z: I; I5 W; F8 H9 ?4 H/ C
  1098. LDA [Data_L],Y
    : o$ |1 e9 x: J, {" j
  1099. STA Data_Cnt
    % M5 ^% K$ e* q4 g5 e. n0 Y( T
  1100. DEX
    9 s2 @8 R3 `, |+ ]! x
  1101. DEX
    : Y" W& E( I8 x( Q2 J
  1102. LDA Static_Text_Pos,X9 L7 r% G( ?1 n5 {* G
  1103. STA PPU_ADDRESS- X, d  s0 w+ \7 K, ]) W
  1104. INX3 p0 h5 F! C- P, a
  1105. LDA #$20% G* j; W4 B6 z( k6 i
  1106. SEC
    / k$ a  P7 I: q9 ~* L$ A
  1107. SBC Data_Cnt
    6 Q1 [7 j) x) @3 I% S, B* J
  1108. LSR A9 y8 Z' j' U9 o/ k( \) Y# b7 M
  1109. STA Data_Buf
    / c6 ]8 a; j6 N
  1110. LDA Static_Text_Pos,X
    7 m1 c6 k0 H7 x9 _) K/ N
  1111. AND #$E0
    , V  n; ^  u8 s9 {
  1112. CLC1 @( I- P8 t8 t: s. w0 U$ c
  1113. ADC Data_Buf9 H  O5 G; {5 `, t$ n- f
  1114. STA PPU_ADDRESS/ b6 `$ [7 |% }* _
  1115. INX
    6 N: s9 [/ p& n- \8 v+ |
  1116. Show_Music_Text_Set_Write+ B5 _0 ~6 Q* a! A- t+ \" U% S
  1117. INY1 t/ {. c$ c* I- H# f
  1118. LDA [Data_L],Y
    / z& B0 Y* T  ^  J1 f4 S! p8 v
  1119. STA PPU_DATA
    5 F6 B$ S0 @7 n1 z2 {
  1120. DEC Data_Cnt/ d+ \+ D0 c8 O. b* n
  1121. BNE Show_Music_Text_Set_Write+ T6 j( I" @/ T- @( @9 l
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    . l& c$ c' P5 c$ P! f5 C, X
  1123. BCC Show_Music_Text_Set, j& A4 G3 k7 o& ^* P. z6 }! f# e9 @
  1124. RTS
    2 U9 `) l% o0 d8 ~. v
  1125. + q5 C: L$ o( R# \4 f
  1126. ;==============================3 J' n/ J$ ~/ W; O" H8 |
  1127. .IF Track_Name_Pos;显示曲目信息
    , _8 u  t) G$ s/ d. v: E
  1128. Show_Track_Info
      _4 _4 u7 k  J
  1129. INC Show_Track_Name$ ?/ P9 ]' [* H
  1130. Show_Track_Info_Clear
    # N) l+ J4 E2 `3 @- b
  1131. LDX PPU_Cur
    : V+ d1 [3 [! Z7 R$ o+ q
  1132. LDA #Mode_Clear( u! |2 B1 s# V- w; D% M/ V9 P
  1133. STA PPU_Addr,X7 o" H5 Q9 k6 h9 V4 c6 S% Z
  1134. INX5 e4 S2 f; `2 J/ Z: C1 i
  1135. 5 D1 Q1 e% l$ e
  1136. LDA Music_Last* c4 C! |2 q% b% ?4 h
  1137. JSR Show_Get_Track_Name_Center_Pos
    8 L# S5 `$ e! @; n+ N
  1138. Show_Track_Info_Write_Cur( y- R0 ^+ j3 j+ t. e2 s
  1139. LDA #Mode_CntLine
    ' u0 ?, l: F4 x2 R# c. f4 T0 [7 A
  1140. STA PPU_Addr,X3 o1 J& X/ b5 o/ g/ [
  1141. INX
    6 h& u; I3 T* s4 K5 ?- f6 P

  1142. 7 G! W0 B. y3 c7 R; Y) O
  1143. LDA Music_Cur- Q" r7 Z6 S) u: {. i9 S1 \7 H# ?
  1144. JSR Show_Get_Track_Name_Center_Pos
    ; g" }  r' o7 K( F

  1145. ( A3 ]- [5 H# A2 m0 s9 o
  1146. Show_Track_Info_Write_Cur_Data, N( {6 U# @/ N9 C4 n
  1147. INY
    8 ~4 J" j! K- c2 b. |
  1148. LDA [Data_L],Y
    : c9 d# G1 `2 V, N: m
  1149. STA PPU_Addr,X. B" B$ `6 M$ e3 H% T; n
  1150. INX
    ) |+ p  F" }% h8 P3 g  w  O
  1151. DEC Data_Cnt* N$ M1 i5 h* s$ t
  1152. BNE Show_Track_Info_Write_Cur_Data
    $ t1 V) H, K' V" ^9 x
  1153. Show_Track_Info_End
    + W( D9 \% ]" O* W) U
  1154. STX PPU_Cur
      o7 D6 i; }. N6 y3 ?( h: g( X& d
  1155. RTS6 Y& o) b2 }& f, a

  1156. 2 P4 R: C! ^& y& B7 J% w/ O
  1157. ;==============================& W0 ^; F  k9 \0 `, q' o
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    + G; \" ~9 R5 [8 W2 h/ P4 M
  1159. ASL A4 e9 |2 ]' ~# ?- ~& ]3 @; _* E
  1160. TAY
    . R+ R1 r2 N+ e' p
  1161. LDA Track_Name_Addr,Y
    $ k4 s: H4 e2 O# i. E1 W
  1162. STA Data_L
    & T  u% ~+ J' R; W& r
  1163. INY
    " W( k' A3 h2 o% A
  1164. LDA Track_Name_Addr,Y# e; w8 \# _6 X2 e0 u; d' ^, r
  1165. STA Data_H0 s7 `& B0 v% g! c  g3 a
  1166. LDY #$00  c4 r6 d3 `! V3 M( }) e
  1167. LDA [Data_L],Y4 a5 M3 i/ R6 S2 }2 L
  1168. STA Data_Cnt
    $ y/ L9 `5 y( M8 U6 N3 `
  1169. LDA #$20
    6 n9 c: i% u/ i# k
  1170. SEC( J* t& _8 |9 |# v+ R+ b( p
  1171. SBC Data_Cnt
      L8 l# Y6 F" [  W% @
  1172. LSR A
    / z8 V9 ?0 [, ]6 U3 [9 J
  1173. STA Data_Buf5 I/ P. {; V7 |, Z% R9 Z
  1174. LDA #HIGH(Track_Name_Pos)
    - L* S& m, W& ]' x' Q  r9 d
  1175. STA PPU_Addr,X& ?/ h9 y3 W! K. D* {6 {; }( {9 I
  1176. INX
    4 g! u: U" v  X9 S9 v; r
  1177. LDA #LOW(Track_Name_Pos)
    : T( I& w+ h$ R! E
  1178. AND #$E0
    8 F" E/ [6 F' }9 |* C& |7 ?* V3 N
  1179. CLC
      I# H/ v' a" m( Z
  1180. ADC Data_Buf
    , R" o* l" V! b; a; y# P
  1181. STA PPU_Addr,X( Q, h2 J/ V, L3 q
  1182. INX9 D0 w0 _( V; _9 y& n( u
  1183. LDA Data_Cnt
    0 v7 u9 ^6 K+ h! T, e+ n
  1184. STA PPU_Addr,X4 z9 c5 z" s1 r7 k3 _) {8 D" @
  1185. INX
    0 k' K6 q) h/ W6 Y" {# O
  1186. Show_Get_Pos_Center_End
    # f5 I: c2 s- q. c: q' R6 Z
  1187. RTS
    3 L& Z5 n  q7 s5 Q
  1188. .ENDIF
    / e) V7 {- Y: F- V( h

  1189.   X- ^/ [& Z7 D
  1190. ;------------------------------9 F/ Y1 J) c9 e5 k
  1191. ;命名表数据
    ; w- e/ [  r- ?; g. W5 `- q! R% m
  1192. Palette_Attributes
    + |2 L" ]2 l7 u
  1193. .IF SOUND_BAR_SHOW_ENABLE
    8 R3 F6 k1 M' c( X5 L* g6 h  _
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00( K3 [4 B; X6 n; x6 J# e! ^
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA" a5 d3 S/ m: w8 z- V1 F; g
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55/ s2 K, i' q4 e. @8 H
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
      _2 R& ~+ Z% n' L3 G, ]
  1198. .ELSE6 X% r2 f2 D6 Q; p% a  w; a! L
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00! {/ I3 L& p2 U: y! _( E: J7 z2 d8 K
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF5 P5 Y) d$ z2 R% q
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    ; ?$ O7 `  {( G" Q
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55- ?* b$ J- p# P* Z  _9 C0 I
  1203. .ENDIF
    5 b( c8 b1 N2 }& w$ i

  1204. 2 }1 t9 V+ B! h% v; n
  1205. ;------------------------------
    8 v+ L6 D9 a2 g& n0 \
  1206. ;调色板数据
    - K) C- c! o/ L% Y3 \% N
  1207. Palette_Data
    ( Y0 x' Q1 v+ K! `% r
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    ) ]0 S/ n3 L( M" H; m/ S: o7 q/ S
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    $ e  o; K* h: [! k' J6 Y
  1210. ; @6 V% C. b5 O2 m8 ?
  1211. ;------------------------------
    ) D6 I  l9 p9 I. {  N
  1212. Static_Text_Data
    : X% X( c6 j6 |9 N
  1213. .WORD Static_Text_Title_Data
    % [( u; s5 w8 |4 [* J, B
  1214. .WORD Static_Text_Author_Data
    9 h+ Z: F/ G& h2 S" f2 S
  1215. .WORD Static_Text_Date_Data3 c: W* R. x) V( h, B4 M1 c
  1216. Static_Text_Data_End8 }1 ~* |5 s1 y, h+ ]: B

  1217. , R9 q0 v  L* `4 b) _0 ^- j
  1218. ;------------------------------5 f" R4 S/ q7 q7 B) r1 J
  1219. Static_Text_Pos
    $ Q$ G) e" H& M2 i4 O" `! p
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)- T& {* W2 O1 ?0 F- X; M5 Y
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    : u- ?# B5 `/ t0 d/ B- j9 ~' t
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    - E) O' Z, ?# Z3 ^; r
  1223. Static_Text_Pos_End
    3 Q  K7 r0 n! b/ ^" \* K' X' X

  1224. 3 F% `/ l, s3 S. [
  1225. ;------------------------------
    3 }. N5 k+ \9 N# Y
  1226. Music_State_Stop
    0 b' F* `7 ~8 l# K
  1227. .IF SOUND_BAR_SHOW_ENABLE5 z. T) z: N: V1 e& d% @5 M
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00! u$ C/ N& n9 K9 M) D! f& ?
  1229. ELSE
    7 H( T: |3 }) d
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    2 S6 d$ o  b- c/ e/ d9 u+ @
  1231. .ENDIF
    ; b9 g* z! ]7 i; q+ o+ C8 k
  1232. Music_State_Play: o% @7 m/ }/ b
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    , l9 s9 D+ Y+ Y/ w. x+ P
  1234. ) c! o9 e% a1 m4 e6 Q
  1235. ;------------------------------1 x/ D- k3 C. ^/ T! r5 l
  1236. Sound_Bar_Text_Data;声音类型文本5 [' k6 Z; ^' u9 N" X
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    , T) T0 a0 S- _* g2 I
  1238. .DB "SQ1-",$FF7 V" H0 p3 E! }$ f3 p
  1239. .DB $FE,"SQ2-",$FF
    , l! Z2 D9 M& x  r& b
  1240. .DB $FE,"TRI-",$FF
    7 {: q9 O# Y' u' v2 a0 D
  1241. .DB $FE,"NOI-",$FF4 K9 c1 ]. \# M! h8 {6 c/ w1 T
  1242. .DB $FE,"DMC-",$FF,$008 p8 }* ^; I, D* Y1 s0 i5 x, E

  1243. 0 ^$ x3 S3 b3 N0 d
  1244. .IF Track_Name_Pos
    , q9 a+ l1 C, ~# [) f; I
  1245. ;------------------------------
    ! [0 E0 n9 ?9 _! ]4 O
  1246. Track_Name_Addr;曲目名地址索引
    & D  F  p1 ~  k! e/ C
  1247. .WORD Trackr_01
    9 d, R+ _% f  F. u
  1248. .WORD Trackr_02
    / n7 ^, o$ y' V/ o0 _
  1249. .WORD Trackr_03
      q" F. L% S+ @3 ~. ]+ ?
  1250. .WORD Trackr_04  c2 U0 T, J% S; H2 d1 G3 A
  1251. .WORD Trackr_05
    ) P% r& U0 N3 c6 Z5 N
  1252. .WORD Trackr_06" g+ ?$ f3 }( H0 p- ~; h3 ^( f
  1253. .WORD Trackr_07
    / `# v! L! `* u2 g# O! K/ L" ~
  1254. .WORD Trackr_08: ]" U, K& P" K
  1255. .WORD Trackr_09# q) S. E7 d8 ?6 |  M
  1256. .WORD Trackr_10
      c7 G& H" ~5 \2 g( W
  1257. .WORD Trackr_11
    " T, A2 }- U) L" Q5 |
  1258. .WORD Trackr_12; M" F: F+ Q+ Y! X
  1259. .WORD Trackr_13
    & ~+ n# }2 p7 J: T1 P% n
  1260. .WORD Trackr_14& v  u  V8 j" B: w
  1261. .WORD Trackr_15! O. y* U3 ^, T! n! S2 b2 {. M
  1262. .WORD Trackr_16
    - @) W' G0 r2 [; j0 r+ F
  1263. .WORD Trackr_17
    ( C8 _  o4 J. E- E9 S$ i
  1264. .WORD Trackr_18/ p9 }9 O# {9 a0 v+ l6 s
  1265. .WORD Trackr_19$ }$ U+ x# I* j, X  m; w" I
  1266. .WORD Trackr_20$ G: k) T5 ~$ X& c
  1267. .WORD Trackr_21$ T! f+ ?& x! e
  1268. .WORD Trackr_22
    % t  k: B( h1 `. H) `, i
  1269. .WORD Trackr_23
    2 f8 O, j9 E( {, b9 W% v0 W9 g9 }
  1270. .WORD Trackr_24
    + R3 F% f2 x# J
  1271. .WORD Trackr_25
    " H- g# v" j: s6 `
  1272. .WORD Trackr_26
    9 A8 K, P. t) }8 U1 S6 t
  1273. .WORD Trackr_27
    ; r5 g, C  \2 Y& C: j- N4 B. R
  1274. .WORD Trackr_28
    9 t/ u: n+ ?5 t" o# w+ h/ g
  1275. .WORD Trackr_29
    , n) M0 }$ s4 F% o( M
  1276. .WORD Trackr_30
    & X2 @' Z2 G! u+ j
  1277. .WORD Trackr_310 {0 z! N9 A7 e( W7 Q5 N6 E% L0 N
  1278. .WORD Trackr_329 ]% S9 A* k. L' K: s
  1279. .WORD Trackr_338 A. I4 @6 r% z4 s$ J+ Y
  1280. .WORD Trackr_347 t& u% s1 |: j4 g2 V
  1281. .WORD Trackr_35
    : g1 M, k2 Z* t# I% v( H# x- M
  1282. .WORD Trackr_36
    2 [4 Q/ A2 z$ q9 t$ L9 S
  1283. .WORD Trackr_376 Y6 `7 ^0 }. b+ `0 J5 Z, V/ E
  1284. .WORD Trackr_38
    4 `% n% k# P) n) a
  1285. .WORD Trackr_39& C! V+ D& }, H! \  }+ U" _0 j% @5 ~
  1286. 3 f; O. X: p- G8 m
  1287. ;------------------------------
    8 a, a  i- [6 c; d
  1288. Trackr_Name_Data- V8 ?% z: V9 p, l
  1289. Trackr_01 .DB $05,"BGM 1"! F6 V( S3 D% u- {1 ?
  1290. Trackr_02 .DB $05,"BGM 2"' a# N7 a+ T* i6 }: J
  1291. Trackr_03 .DB $05,"BGM 3"( l9 Z8 q4 ?$ i: Q1 S& r3 n
  1292. Trackr_04 .DB $05,"BGM 4"8 l$ k8 T* K+ ]/ Q$ \
  1293. Trackr_05 .DB $05,"BGM 5"
    , c# ~7 o9 e1 B
  1294. Trackr_06 .DB $05,"BGM 6"
    , ]$ q4 N3 F- M
  1295. Trackr_07 .DB $05,"BGM 7"
    0 C# f( I* h* S
  1296. Trackr_08 .DB $05,"GREAT"
    . y% z- \8 |7 `" z4 C3 N: b
  1297. Trackr_09 .DB $08,"BOSS BOM"3 Z2 D& W: G! X% S5 q$ z' O7 F5 u" o
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    9 B# e( @- @7 h9 w  }
  1299. Trackr_11 .DB $07,"P CLEAR"
    2 l; r, @% ]& A' M* `0 y& v+ N) R
  1300. Trackr_12 .DB $07,"A CLEAR"
    0 l' s1 B3 v( T7 N
  1301. Trackr_13 .DB $04,"OVER"7 R6 |% k  M. z
  1302. Trackr_14 .DB $06,"ENDING"
    ; V$ ]( E  @3 t8 E! W
  1303. Trackr_15 .DB $04,"SUTA"  W6 a/ S3 L+ ]
  1304. Trackr_16 .DB $07,"THUNDER"  f4 W% W- F/ }: v
  1305. Trackr_17 .DB $04,"SHOT"
    7 Z' @1 [3 `7 M" ?3 p
  1306. Trackr_18 .DB $05,"LASER"$ v8 W6 c+ B: F" H1 v/ o! [2 h
  1307. Trackr_19 .DB $06,"SPREAD"
      r$ Q. J9 u5 n2 X' S; a
  1308. Trackr_20 .DB $04,"FIRE"
    " l4 B9 g, i/ B( q+ d2 q1 h  Y7 f
  1309. Trackr_21 .DB $06,"B SHOT"
    % `. {+ b9 u- b6 D/ n1 h3 Y" J
  1310. Trackr_22 .DB $08,"T DAMEGE"0 ^, b0 V+ B- H9 C! K( k3 c
  1311. Trackr_23 .DB $07,"HARETSU"
    $ j0 `4 I% T$ o& m6 L- }# i
  1312. Trackr_24 .DB $05,"T OUT"
    - f8 y: V3 C* j. Z5 p
  1313. Trackr_25 .DB $05,"Z OUT"! i% J# u  _+ B0 I- q  u& Y# T  A
  1314. Trackr_26 .DB $05,"A OUT"
    $ o1 t# R+ x: K5 J" c; O- L
  1315. Trackr_27 .DB $04,"ROLL"9 z' b& n( p0 w* d. U) y1 `
  1316. Trackr_28 .DB $06,"APPEAR"
    1 H/ f) U2 H  X- U. {
  1317. Trackr_29 .DB $05,"POWER"
    9 B( v6 d8 A7 R; v# R
  1318. Trackr_30 .DB $07,"BOKK BK"
      E! W: n  o/ V1 y
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    1 X1 y/ B  @9 U- C# x) P
  1320. Trackr_32 .DB $08,"BAKUHA 2"3 l/ e2 ?& O  p- |+ l
  1321. Trackr_33 .DB $05,"ARUKU"8 r5 m% C) i( Q
  1322. Trackr_34 .DB $06,"JIWARE"
    + ~) @# }$ L' v) q  a6 k  k
  1323. Trackr_35 .DB $05,"SILEN"' Q1 F$ h# _* a! g3 I3 v8 i% c
  1324. Trackr_36 .DB $05,"P 1UP"( H# `$ V# U0 u
  1325. Trackr_37 .DB $05,"P OUT"
    . A! e- {: d: n& @* O6 S8 A, R
  1326. Trackr_38 .DB $05,"B OUT"( e3 g4 o# [/ U6 i' x$ n( F
  1327. Trackr_39 .DB $05,"PAUSE"
    5 u, s8 x( u4 I: E- L# i6 B

  1328. 3 e# v) C  D2 e0 ?& y  A& o0 @0 x
  1329. .ENDIF
    2 A8 V, b4 Q! U! H/ q" q3 m& f/ c
  1330. % [& P0 L9 z# W# F
  1331. ;------------------------------2 w/ r" p# p; R# {" h
  1332. Static_Text_Title_Data;静态文本数据/ A  \: b" O' B* p+ k
  1333. .DB 124 c6 |% Z9 z) A4 _- j1 x
  1334. .DB "SUPER CONTRA"
      l+ F; F+ V# C0 |
  1335. Static_Text_Author_Data0 b# |3 y! I2 T+ n
  1336. .DB 23
    ) }6 r8 A8 w# I  P
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    & }" C) \, y$ D/ H' c& t, t
  1338. Static_Text_Date_Data' L* H; h' x; }4 ^) [
  1339. .DB 10* E7 }0 z( ]- q
  1340. .DB "2023.07.11"- p4 W: V! e5 i8 g6 O# \
  1341. ) O& g( k" J2 c: D* ~, d
  1342. .BANK RESET_BANK & BANK_DATA_MASK. M, h+ E) h1 P% q" I6 R
  1343. .ORG RESET_ADDR6 j) `6 |6 x0 V" l% [- o
  1344. 0 j# [  G# l+ w/ ]# N6 X2 ]; v( d

  1345. " Q7 v+ w, C$ O; `+ q' E
  1346. ;==================================================
    ! B2 ~$ o7 `! _& Q
  1347. ;切到主程序bank2 R8 n0 r; K, l" }4 Y
  1348. SwitchMainBank4 d" ~8 i2 T7 s7 `+ d( K
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    , Q% a# w) |: s
  1350. JSR SwitchBank8000
    + \! V, h- z, Y/ S
  1351. RTS
    ( w; r2 _% X. [2 x$ `( I! U1 w

  1352. 5 k9 s& y' m. h. @) C3 W
  1353. ;==================================================
    : I: V  R7 I5 K. q( C+ t
  1354. SwitchBank8000;切换bank到8000-9FFF; A6 H+ q* R: w; @1 R( A( B1 @6 y: ]
  1355. PHA
    & V7 F7 y. Y  d
  1356. LDA #$06- z# z+ M3 g2 G% ~
  1357. STA MMC3_BANK_CTRL+ s6 _0 {! Z4 U7 ~/ N* L
  1358. PLA; A7 i: B5 n, u: H' ?, D. s
  1359. STA MMC3_BANK_DATA7 s0 t5 y. d) g& [
  1360. RTS0 v8 k! f/ Z7 _: M* B
  1361. 5 s  j, L2 j" z7 y- o$ @
  1362. ;==================================================
    0 K( a) p/ a) @- a  |1 U& P, |
  1363. SwitchBankA000;切换bank到A000-BFFF
    0 {8 G; t3 c3 ^- C8 k3 A  N
  1364. PHA
    " n" f3 |. |( N0 Z* @
  1365. LDA #$07
    : Y3 G4 o9 [8 U& W) A' v' y: M! G
  1366. STA MMC3_BANK_CTRL
    # t' s( m# m+ N7 J4 J$ |3 ?1 D
  1367. PLA7 K- M  l4 v6 T& d9 q
  1368. STA MMC3_BANK_DATA4 z( c% X# H( p4 C& {6 u
  1369. RTS
    & x! x7 U7 A: w) C  @

  1370. 3 \5 O, B. d* @% S' g9 h
  1371. ;==================================================
    ; K* S# \; r2 D. Z) _' J  z* H
  1372. Sund_Bank_Init;音乐bamk初始化
    5 `5 Y% U3 \: W9 i
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    $ ^: g& [; Q, b& l6 [! s
  1374. STA Music_Bank_8000
    * O$ n8 `& Q* f* X& F
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK" J5 y& q& F% u& _7 S. j+ \
  1376. STA Music_Bank_A000$ [2 c) ~0 t/ p- Y4 j9 b
  1377. RTS& a. B: ~4 L; I. ~8 F- [
  1378. 0 @4 J) m5 {, [# f3 ?/ n9 J
  1379. ;==================================================& g; \2 W/ Q. ]7 O; V1 l4 C- W" V
  1380. Sund_Bank_Set;切换音乐bank3 a8 W5 S) ^. P& `4 f) s/ `! t3 a
  1381. LDA Music_Bank_8000
    / e6 j/ P0 Y9 Y+ z7 S9 g. N
  1382. JSR SwitchBank8000
    6 R! e, y7 N7 Y' l" U
  1383. LDA Music_Bank_A000
    ! y) h" O) ^# I/ N+ J7 a- F
  1384. JSR SwitchBankA000
    & y* `. E6 b' N9 N" B; N. K5 |& b
  1385. RTS
    # R& H$ R: k3 K! U; ]) k
  1386. 6 w7 v( a- F- L) f
  1387. ;==================================================% O8 Y1 p: a6 j/ k0 \
  1388. Sound_Init;音乐初始化
    % w/ }9 c, P; y8 t' I5 Z
  1389. PHA
    . m- S, t* C" g1 p$ W
  1390. JSR Sund_Bank_Set, j3 T' A* m: z1 h3 l8 S
  1391. PLA
    " H, T. q' J+ O- |0 H+ D0 t' J
  1392. JSR Music_Init_Addr) ^/ W. p& {9 D6 H& P) z  e
  1393. JSR SwitchMainBank, k& T5 [5 B5 y( E: I) t
  1394.   I4 U7 m' O# J: V
  1395. JSR Music_Bar_ReSet
    8 m2 ]' N% s; j. ^* b
  1396. JSR Time_ReSet& @0 y2 T1 ]: F
  1397. LDA #$003 Z, S7 {' o% `' S2 e
  1398. STA Music_State
      f# h8 d4 t! ~* t
  1399. JSR Music_Stata_Show
    . J( `* a3 f  i
  1400. .IF Track_Name_Pos
    0 y' N7 i/ M) |- R3 E+ h" G& H
  1401. JSR Show_Track_Info, N* \' W% c' ]! d
  1402. .ENDIF$ l6 Z1 X0 @7 f

  1403. 0 b0 `; l/ X( J2 R
  1404. RTS$ i/ Y. l- G9 q0 ^
  1405. - Q+ {6 Z# Y8 q
  1406. ;==================================================, x7 f7 A, `# O5 i- E# R
  1407. Sound_Play;音乐播放1 j- ?' O9 I# ~
  1408. PHA) Z- l$ u5 A- U. Q4 b0 {8 D
  1409. JSR Sund_Bank_Set8 u7 r' N- [% X, k1 J
  1410. PLA
    , D/ K" j8 X% A7 J& [4 d6 E6 r( q& A
  1411. LDA Music_State! o7 e4 h. M. ~/ c, x- ]$ e  I
  1412. BNE Sound_Play_End% T; }8 X9 o: ]4 ?& J5 [( v9 U5 O
  1413. JSR Music_Play_Addr% O6 p* a- G" L) k) k0 q% H
  1414. Sound_Play_End2 K" }( v: R, n9 Y
  1415. JSR SwitchMainBank
    ) G/ q( @% i1 D( g
  1416. RTS6 J( o9 Z) r- s0 Q

  1417. 4 ~  }; H' w' x3 P. y9 P" @1 _6 j* Y8 n
  1418. ;==================================================- r) A4 W* {/ X2 E+ Z
  1419. .IF Music_Reset_Addr
    7 P, {& M: ^+ y1 Z9 x
  1420. Sound_Reset;音乐重设(如果有的话)
    3 y( P) I' O4 W
  1421. JSR Sund_Bank_Set
    + v+ [; y/ u0 Z# `8 F; V
  1422. JSR Music_Reset_Addr5 T& i+ m% Z" H+ P0 c6 z( p, n4 p
  1423. JSR SwitchMainBank
    0 v. r& l$ _9 x$ D  j
  1424. RTS3 K- Y2 ]& J! V' o- D. ]
  1425. .ENDIF* {! J$ I- z# V* X7 l

  1426. 7 V4 |, r: I' D6 y
  1427. ;==================================================
    6 O+ w% `1 M9 p/ _$ T1 P3 j) C1 N
  1428. MainLoop;死循环3 Y  t! U% O7 h, c4 D( s) x
  1429. JMP MainLoop
    , \% j' ?) s& A3 V& w2 d

  1430. . s: S" _% _# q, r
  1431. ;==================================================
    ; X" A8 n7 g+ ^
  1432. NmiProgram;Nmi中断处理
    ; x- G  X; o( S! C+ F5 \# x) ~: a
  1433. PHA
    : C6 F9 D% ?2 ]( E, d
  1434. TXA
    # m, t2 a3 r8 C9 h& U5 I4 ~
  1435. PHA; {5 k6 K% o6 k0 K$ D8 S
  1436. TYA+ Y3 S. @+ u! j: H
  1437. PHA
    & _6 v/ Q; |  R% D. W0 R

  1438. 7 ]+ P  t; K2 h6 A6 q9 d% R
  1439. LDA PPU_STATUS* _& j0 I" u5 L) g& @# ]2 O' s" K
  1440. LDA #$00  R0 n" |. {: D1 G
  1441. STA PPU_CTRL) ~; r6 r+ L' B
  1442. ( u* L" _$ X3 o! ]0 E$ i9 |5 W
  1443. ;切换主程序bank. a/ ]" ]- ]0 c! Q1 p
  1444. JSR SwitchMainBank1 ^5 P/ q; ?; g. R
  1445. & ^0 ]& e$ Y8 h! E" S
  1446. ;NMI处理0 f) O& d  i! `5 ]6 q
  1447. JSR NmiProgramProcess7 D8 [8 O) Q5 y- l( x* J

  1448. 2 D- S% _+ ]; I6 N" k6 L
  1449. Nmi_Proc_End
    $ T  K; Z3 U0 `. e" V* T
  1450. PLA
    - N# O+ R( ^! ^: @8 H
  1451. TAY
    : y: q3 H8 n6 B9 n6 n# |  a; k& }
  1452. PLA
    : F& [) L4 [4 ~
  1453. TAX6 x! z% a- }, G4 E( `# g
  1454. PLA/ A# `2 p1 E8 j: R5 u1 J, j% k' ?, b) D
  1455. 5 y7 k0 O/ X. m9 ~9 g
  1456. RTI2 V  S; C6 _; b: y7 r

  1457. 5 ^% ]; X" n% D. ?, L" F7 @
  1458. ;==================================================
    * ~: m! _4 L6 y, \2 t. t
  1459. ResetProgram;重置中断处理
    % z7 }2 F" d" z5 V
  1460. SEI
    0 Q' l6 r1 ]9 D- Y1 C5 Q5 b+ E7 M" K
  1461. CLD
    0 _9 y" t- ^3 u! H5 m  w# F+ E
  1462. LDA #$00
    ! ]( j8 H" P# j. k
  1463. STA PPU_CTRL$ W6 g% N+ q6 B; P  w
  1464. STA PPU_MASK
    % D% r' H: H/ x  c2 s
  1465. * u% r" ]! [0 T) ^: q, u! f9 j
  1466. JSR SwitchMainBank) O5 v  Q& v1 r/ ]8 j- ?
  1467. JMP ProgramBegin1 J* b2 R/ t& }: f4 U1 o
  1468. $ V9 p2 Q: j: V) P  q4 S& T
  1469. ;==================================================0 G* P; b6 D) d/ m$ h
  1470. IrqProgram;Irq中断处理9 w7 s0 D( i. V6 B3 R
  1471. RTI5 _% Y' a6 M. X' U* p8 s5 m

  1472. ) I, |. W) n0 M, k3 w* F  ^( k
  1473. .IF SOUND_BAR_SHOW_ENABLE' O* \6 [5 c# G; v, N; C4 ~
  1474. .ORG $FF801 u8 i/ e6 I  F; t0 S" Y! u, c
  1475. STA $4000,X
    ( ^, q1 F# T: A
  1476. STA Sound_Bar + $00,X
    # A" s: ~; u6 d1 j, o" R
  1477. RTS* s3 @* Y  v0 [' H- |7 b9 d
  1478. 6 D1 ?, z" {* e- D; y! S2 W; v
  1479. .ORG $FF88$ T1 d+ f7 y: O" i, O
  1480. STA $4000,Y
    9 H# `6 z: y0 [. }: s
  1481. STA Sound_Bar + $00,Y8 ~; O6 c9 _) C
  1482. RTS2 P( O; v9 H" K
  1483. - ]3 A8 b4 g8 F/ g" x" E
  1484. .ORG $FF90/ B9 S" }, S" B2 C' ^
  1485. STA $4004,X
    $ ]! N& U# Z5 U1 u9 q. I3 y. Z2 m$ g
  1486. STA Sound_Bar + $04,X
    + m6 n# ^% z! `) ?7 n+ j2 y% f
  1487. RTS. m$ I* o/ Y* o3 O

  1488. & c. S1 L4 E( a/ r- }( e2 w( s
  1489. .ORG $FF98
    / c# d& Y+ O& o6 S% l  {
  1490. STA $4004,Y4 F9 |1 j9 C" ^% Y
  1491. STA Sound_Bar + $04,Y
    0 M0 `3 |7 p5 E! N- T$ B5 `5 E
  1492. RTS
    . V4 b: R& x& j; t. A
  1493. + l7 R. C" B0 y7 {
  1494. .ORG $FFA06 @% Q8 K$ u) }; u- g% g; \
  1495. STA $4008,X
    + Q% a$ g8 M( w) e4 i
  1496. STA Sound_Bar + $08,X3 c. J' w" p$ C7 M4 z7 Q
  1497. RTS
    4 m; G4 f. h2 q* k# n+ a$ F& M

  1498. 8 O* K, v3 j) j
  1499. .ORG $FFA8
    " t' ~# F5 E) n$ p, [) _
  1500. STA $4008,Y
    0 {6 Q0 _* W! Z9 X& g
  1501. STA Sound_Bar + $08,Y
    9 p' K5 p' Y6 p9 Y  m" q! k! H
  1502. RTS& p- |6 q, b: Q( e+ k

  1503. 1 M& T% i1 _% I: M& l  n4 x8 l, `& z
  1504. .ORG $FFB08 Y. U* @1 u' K; A+ Y  W
  1505. STA $400C,X
    2 l6 W% j  |; x: ~6 ?
  1506. STA Sound_Bar + $0C,X% h( Y" r2 ^* o4 j+ g0 O
  1507. RTS
    1 p% U$ a( c( w  C  q; M7 `1 D* @
  1508. # M- k: R, Y7 @1 j6 d
  1509. .ORG $FFB8  m. w* a: i  d4 l: L' `
  1510. STA $400C,Y& q7 V6 y1 R# G) @" X7 `
  1511. STA Sound_Bar + $0C,Y
      [% y4 ]- }+ G6 y+ Z; q* @
  1512. RTS+ z0 \% U- F9 Z' E0 w8 R; A: `9 P

  1513. + w2 k; v7 f' o: Z; \% w2 y  L
  1514. .ORG $FFC0
    5 b3 B. F( |- Q$ d
  1515. STA $4000
    ; K8 G" W8 n  z9 M; ?6 g
  1516. STA Sound_Bar + $00
    1 U$ ~! o% i  z0 N
  1517. RTS  k. c- n. o! v* W" n

  1518. : L5 r1 q7 p* k  J
  1519. .ORG $FFC89 R1 J; j& J& h# H  g3 Y0 _$ _( w' h2 C
  1520. STA $4004% q4 e! E: r: @" @8 m9 Q
  1521. STA Sound_Bar + $04
    " Y. J* _+ y  ?& _9 V
  1522. RTS
    3 z  k' E' ~4 ^  k/ a; d9 L% B

  1523. $ x% n, Z* p; n
  1524. .ORG $FFD0
    ; N. j- h- \8 A1 `/ f5 H9 l
  1525. STA $4008
    3 l! r1 M1 w9 e9 t' ^/ r/ }% G
  1526. STA Sound_Bar + $08& u2 T! \$ k" C4 K0 s, G
  1527. RTS( j, W/ j. \" u

  1528. # M! v. c' ?( w. E1 I9 ]' e
  1529. .ORG $FFD8' Y8 y; N; B3 o3 [
  1530. STA $400C. B5 l$ ~" d  v
  1531. STA Sound_Bar + $0C+ X/ C$ a  A7 v  K8 b
  1532. RTS
    " a$ P0 D5 q' C6 _% k3 \  S& e

  1533.   p( }" ^' T8 \* J
  1534. .ENDIF4 }- \: i4 E; ~$ y$ _0 f' P

  1535. 3 g( [9 v4 J3 q9 ~/ v+ h# X
  1536. .ORG $FFFA
    / m- c( b7 e3 e5 u' ?
  1537. .WORD NmiProgram. o& {1 N$ n5 W  m- k
  1538. .WORD ResetProgram) M( H; c. t$ B* W) K  [
  1539. .WORD IrqProgram
复制代码

5 ~( n& e/ u! ]; W8 ?) h" G; L: O0 M, N" `
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1362 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3356 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 03:14 , Processed in 1.070312 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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