EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 8 S5 e; ?4 @, ^# Q) l% H9 ~

& ]+ o' B; s0 I' i& p  f1.魂斗罗* [, ?1 ^- F) ]1 D, u
2.超级魂斗罗4 d5 A: l1 J1 v) n6 i/ f
3.赤影战士) b0 [4 A* I( _: a6 d8 j
4.忍者龙剑传2
. D. X  t8 _- m4 O* B1 N$ R2 x
9 d  R- [$ I! g2 z6 v% a* X, E: L0 N: ]& B# F3 x

. R; v* T9 m+ c! {; y
4 L& C6 i) P: m% Z5 u% Z源码:
9 b  T+ l/ d! l8 G
  1. ;[FC音乐][播放器模板]1 l8 R1 W3 n# B' ?8 S- K- h6 |  ~
  2. ;FlameCyclone 202307108 {- U& ^0 z/ F$ W+ v  b# O3 @4 H

  3. 4 x' _! E# i# l/ ], u" t
  4. ;文件头0 p1 }' u0 K3 P8 ~1 B
  5. ;======================================================================8 O/ Q# _9 J# t* f/ y
  6. .INESPRG 4                                              ;16KB PRG 数量5 `( o9 A0 g" A( }
  7. .INESCHR 0                                               ;8KB CHR 数量
    0 ^4 n  E3 n" ^7 u& `' _8 h! O4 L2 [
  8. .INESMAP 4                                                   ;mapper 44 a% W& i% z2 G8 y1 }- ~; j
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直: \- e2 K4 [0 ]1 g/ M8 g) O
  10. % q- y1 Q7 g8 r1 X3 t; P; e
  11. ;==================================================$ T8 r& Q4 l' Y, _2 W" ~5 }
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ! ~! |( y( p$ B  N7 e( m& T
  13. ;==================================================
    . |* \1 b7 P- j) J. H, A, @
  14. BANK_DATA_MASK              = $07; S* }8 S* M- ~0 s& E7 Q
  15. ;==================================================
    , e% m0 ^3 |# U( b$ b; R
  16. SOUND_DATA_BANK_0           = $00  d1 t2 B) I1 ^8 r: Y
  17. SOUND_DATA_BANK_1           = $01* {# ?8 X4 V9 H) p
  18. SOUND_DATA_BANK_2           = $02+ s1 }3 b$ w) N- ^$ Q) L9 U( T
  19. SOUND_DATA_BANK_C000        = $06
    ; w7 G$ f  ?- e" S$ X4 l% z+ v

  20. * ^" x: y3 m1 Q5 p! t
  21. ;-------------------------------------------------
    / Z( Q1 m4 s9 o- h: |! s
  22. CHR_DATA_BANK               = $04
    * @( k0 g7 y! s6 p& R
  23. CHR_DATA_ADDR               = $A000+ f  k: S/ c# o; J+ ^
  24. ;-------------------------------------------------
    + }9 I  r  d3 |, ~6 J! J
  25. PROGRAM_BANK                = $05# M1 o! `1 t' ]7 s- d+ ?
  26. PROGRAM_ADDR                = $8000
    + c- e; q& q9 E- [& c
  27. ;-------------------------------------------------! z# ~; B) G+ C5 V( F& w
  28. RESET_BANK                  = $07! x" x, V9 ^/ u, U! m+ U, F
  29. RESET_ADDR                  = $FE00# ~' V9 k1 K" Y) _* ~6 }
  30. ;==================================================  Z  Y$ {: S. J  k' F  ?5 V8 k3 Q7 d
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    $ _" z; F6 O7 ^- k2 n
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ' r6 z- P/ K0 w2 Y0 b" j" z, O7 t. F
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址0 O. G% v& j5 ~) C0 e$ ^3 y; P
  34. ;==================================================
    ( i! k+ N% L/ l% ^- S6 ]2 f4 S
  35. Music_Song_Total            = 039  ;全部曲目总数' z( J6 \; U9 Y* `1 j4 u
  36. Music_Start_Song            = 007  ;初始播放曲目; C7 H- G/ g) F, g
  37. ;==================================================7 _% C9 X" ^4 o3 W% J3 z; ?

  38.   l, p2 i% ~+ D' {( [8 I
  39. ;==================================================
    ! a( M/ u2 |' ~8 a- Y- N
  40. Title_Text_Pos      = $210D ;标题文本位置
      x+ c: K/ m: I) l
  41. Author_Info_Pos     = $2284 ;作者文本位置; p* {- m' A) Q* v
  42. Date_Info_Pos       = $22CB ;日期文本位置
    ! e) `( Z& N8 G! z' h. x! J. R; R
  43. ;------------------------------5 O- c& K3 Y/ B
  44. ;------------------------------
    - k% x' C; a1 p' u5 A
  45. .IF SOUND_BAR_SHOW_ENABLE
    8 t3 C8 q9 o9 i& t7 r  [
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    8 e& W9 @" p! X# p  Y
  47. Play_Time_Pos       = $21F3 ;播放时间位置7 j8 R5 l5 E) L; k0 G. N
  48. Play_State_Pos      = $2233 ;播放状态位置1 a" a+ E( J3 |& a8 y% E% p1 m8 f
  49. .ELSE
    2 J4 s. ]: X  `% |8 v4 V

  50. 6 L: e( S$ l2 i6 J; E$ @+ B: q
  51. .IF Music_Song_Total > 996 I2 ?  S- [2 v. ~) K' U2 N
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    % T; n( v- d- }. Z. j
  53. .ELSE- ]0 s$ {! y: j  |6 u

  54. ) ~/ e8 T! M7 N4 k
  55. .IF Music_Song_Total > 9' G$ B2 }* Y* x1 e% a" U9 t
  56. Play_Index_Pos      = $21AD ;当前曲目位置* A& d* o8 L* R, S% o
  57. .ELSE0 F3 G/ p0 D% ~
  58. Play_Index_Pos      = $21AE ;当前曲目位置+ |* l+ V8 K4 ?% r8 k# }
  59. .ENDIF
    " h: C4 Z; n2 @

  60. 7 ~0 P7 G4 u6 W7 R9 r/ M
  61. .ENDIF
    ' n" A" y, ~/ R7 M+ k' D
  62. 6 T. p; {, n% j. ~$ [8 n  N# _

  63. 9 M/ T. A$ X% d& I) ^  H/ ^
  64. Play_Time_Pos       = $21EC ;播放时间位置
    ' q0 r1 l4 `  }6 C
  65. Play_State_Pos      = $222C ;播放状态位置' N; i: o' J5 K6 T" h
  66. .ENDIF
    * N5 u" b- t4 f7 r3 R  |
  67. ;------------------------------
    ! L1 K0 f6 I1 `. P4 \8 r. t
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ! I& h: J* _  `( Z3 z; u
  69. Sound_Track_Pos     = $21A5 ;声道文本位置2 w1 \0 m1 Y! u5 J- @3 F* T
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    1 E0 b/ P. @3 R; B
  71. ;==================================================
    + [, ~, O5 }, n! k- L! Q
  72. Scroll_X = $003 z: Y. O5 n( \
  73. Scroll_Y = $06
    & k: `( n3 M  l
  74. ;==================================================6 i% v! J3 H- f* K, C
  75. RAM_Cln_1       = $0100
    9 h: e: }, D5 _* p* G! A+ k8 t
  76. RAM_Cln_1_Size  = $805 v3 b& I* Q8 u7 I: R
  77. RAM_Cln_2       = $00E0. @: @: P6 @6 j
  78. RAM_Cln_2_Size  = $20
    ) M$ Y2 l( Y9 ~/ n  @) j* h% @" `
  79. RAM_Cln_3       = $00E0/ V% S! o* A" n( s- Q( I0 h7 ^
  80. RAM_Cln_3_Size  = $20
    9 t  f( |7 I' ]: j) @' P7 j9 n3 o
  81. % ~1 a9 }5 A4 L
  82. ;==================================================
    1 k. q  Y0 l7 G6 Z0 R! ], d
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器) M$ K2 k7 `5 F* H0 `+ g8 h
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器9 R" e2 V6 W" S$ p3 w
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位+ V# w9 ^, j, D: J/ B9 Q
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    . _' H* K; B% w2 k* M( V
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1' @) j2 g# c3 P
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 $ G# T) V$ m) w
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加6 a4 B. @7 }6 q$ P9 @6 E$ c
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 % p' @, {% Z6 Q+ {( t$ L# x' b2 u
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    & H  n$ [3 t, `& u. o& [% D1 B
  92. APU_STATUS              =   $4015   ;声音通道切换5 ]! ?( M6 x6 W
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    7 e# W4 X+ J! p% Y: q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通) w- O5 d# n8 b9 E7 W0 K
  95. ;==================================================! z' F4 o. k; s. f
  96. MMC3_BANK_CTRL          =   $8000
    ! T7 z! D8 Z4 ^& |; ^6 i' E
  97. MMC3_BANK_DATA          =   $80017 x( A2 ^0 u2 z- V" ^6 Q, I+ ]
  98. MMC3_MIRRORING          =   $A000. t8 P" a7 y' B$ J0 X9 P+ v, C
  99. MMC3_PRG_RAM_PROTECT    =   $A001$ M$ Y+ T- a/ D3 J) R4 n) ]7 ~
  100. MMC3_IRQ_LATCH          =   $C000
    2 F9 j) J' m# w( F$ d
  101. MMC3_IRQ_RELOAD         =   $C001
    . ?) m! Y7 _4 q, R
  102. MMC3_IRQ_DISABLE        =   $E000$ Q' r7 v% `0 K) ?! V2 ~
  103. MMC3_IRQ_ENABLE         =   $E001" x- p; d" K0 E6 t( ^5 G, r  T
  104. 2 ~  B& R5 e# t- R0 T
  105. ;音乐数据块  l0 h# E  h2 w" A
  106. # L0 f8 W* `. E; z1 o3 }
  107. ;======================================================================1 @) O5 ~" z1 h& N
  108. .IF SOUND_BAR_SHOW_ENABLE
    % {# o+ [. |1 M3 p0 ^2 S6 ^7 f. Y
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    $ K- p# U: C: R: x- T
  110. .INCBIN "sound_bank_bar/music_data_0.bank"; s" _* R( Y5 n0 k( m2 l% d

  111. & C8 [' \8 [9 f4 ^& \7 d
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK& V% z% b3 K* J+ A& i8 _
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    2 U+ p+ G5 p% A( t

  114. ! @; r2 w+ y- E4 D5 a2 f8 @- n+ a2 X. H3 l
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK( X3 \$ j, Z% j1 Q) X/ a
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    $ k6 Z. E! q/ g. a1 }

  117. * m. C4 m+ r) P% H. d5 V  \! G
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK6 K) f  u1 x* J: ?7 I
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    1 h" ]9 k5 x: w. D- m: `

  120. 7 `# {7 ~* h, w" p
  121. .ELSE$ X4 G8 {' f+ l1 U- u! }
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK2 l& h1 j% p1 k
  123. .INCBIN "sound_bank/music_data_0.bank"
    % f- F$ c( ?. }6 L7 H$ Y; z
  124. & i) n3 _0 g& D( }/ s4 }; J
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " Q, f$ Q* L4 P0 z
  126. .INCBIN "sound_bank/music_data_1.bank"* e0 w' o+ Y1 d6 h

  127. 8 Y$ r, @. |# H4 L% O( c
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK1 w( Z1 R) r  C) z8 V4 I
  129. .INCBIN "sound_bank/music_data_2.bank"
    9 N7 w! m" X6 n3 Q
  130. * R5 t9 h: ^" T# P! E
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    + @9 b! s# _) g& y+ K+ w
  132. .INCBIN "sound_bank/music_data_3.bank"/ z: [" r0 D* n: P* [6 t2 E; U
  133. .ENDIF
    0 ?  }4 x& Q2 {( }

  134. , @& k# W' w$ p9 b# ?1 L8 h4 d
  135. ;CHR图形数据
    + ?3 B+ t4 C# l6 ?; Q: O. h
  136. ;======================================================================
    + |4 `0 V1 U- s* B# D1 x  k
  137. .BANK CHR_DATA_BANK
      J) \; {4 I* v4 o
  138. .INCBIN "chr_bank/chr_data.chr"# d6 S% m  F! \) H" ^, D0 X' B
  139. / q6 O  o; M) w' h9 _$ z* Y, o
  140. ;==================================================2 I4 V2 g; n# M1 c& w' o0 C
  141. PPU_Addr        = $0300
    : _- u1 ?& e2 [# _
  142. Palette_Addr    = $03C0
    # `1 z' X- h  z& ~/ \& R1 i
  143. Sound_Bar       = PPU_Addr+$E0
    6 E9 T& ~; o) P
  144. ;==================================================$ z1 R* j! \& s7 J1 L7 ^& N" I9 B
  145. Palette_Update_Addr     = Palette_Addr+$0D
    ; n) f/ o& ~& ?3 Q5 w0 }5 ~
  146. Palette_Update_Max      = $2C
    ( Y) h  G! t2 f& s& G
  147. Palette_Update_Min      = $21
    ) g5 S/ G* c  s  E7 j+ {
  148. Palette_Update_Interval = 60
    1 G& c+ V5 k$ Z+ X$ G. `7 Z  i
  149. ;==================================================
    . ~& a0 |" Q8 `* q* \
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    / i3 p: P# ?: d% N
  151. Screen_State        = Sound_Bar_Cnt+$01
    & |1 z; W9 r: F6 i# D2 U
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    + v3 u! p& B0 o5 E
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    / I2 i  z" y9 @0 J
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ! r% r/ [$ R/ F1 k* P/ ]# h
  155. ;==================================================" f& v7 E# A6 W& h3 N' b
  156. Data_L              = $708 V, Y" L1 B( K$ X7 {& ^! \
  157. Data_H              = Data_L + $01
    # r! G1 ~0 h. L" _% y
  158. Data_Cnt            = Data_L + $02
    ) {6 _+ c9 M5 F" v9 K
  159. Data_Buf            = Data_L + $03
    0 j3 O$ }8 o7 d/ v. n; C) G4 E6 P/ z
  160. Time_Wait_Cnt       = Data_L + $04
    : Y+ ?: j! Z8 y  B
  161. Palette_Wait_Cnt    = Data_L + $052 K+ k: i, P6 p; d2 c6 F
  162. Palette_Update_Flag = Data_L + $063 q2 U8 b5 ?2 |  ?
  163. Show_Track_Name     = Data_L + $07; r8 x1 Q1 j# J6 R
  164. ;==================================================
    4 R8 j' U9 ]( t  l% A7 o
  165. Key_Keep            = Show_Track_Name + 1
      Y8 y: `( |7 |
  166. Key_Once            = Key_Keep+$01; i  b( z/ @" G% ?. f: L* T
  167. Key_Kemp            = Key_Keep+$02" I  v4 R8 X' D7 G; _# ^$ h
  168. Key_Temp            = Key_Keep+$03
    % N. m' {$ f/ j: b# Y5 Z0 N# T
  169. Key_Getv            = Key_Keep+$04
    " x! Q8 h4 B; A6 L* b
  170. ;==================================================
    ( b/ f4 `5 i8 I
  171. Music_Cur           = Key_Getv+$01
    $ Z  s5 R6 m: W2 V8 B8 X+ i
  172. Music_Last          = Music_Cur+$011 s- S+ G, C! m+ V
  173. Music_State         = Music_Cur+$02
    0 n/ z- V& [, A4 D, M
  174. ;==================================================
    7 b: [1 f) H0 `  c
  175. HEX_Data            = Music_State+$011 v( U2 f) T/ y/ t6 K" n
  176. DEC_H               = HEX_Data+$012 m3 i+ R8 }* B0 {0 `; a
  177. DEC_T               = HEX_Data+$02) A2 o, z" k3 Z6 Y
  178. DEC_L               = HEX_Data+$03: N$ g' G4 v+ g) K* D
  179. ;==================================================
    / f( i  L1 }  @" p- D4 ^) T+ c
  180. Time_S              = DEC_L+$01- v+ M& z) X( w6 M
  181. Time_M              = Time_S+$01
    ; s' }- |0 q8 w$ s) {6 u
  182. Time_H              = Time_S+$02
    5 a7 G% V7 T  l; F1 I
  183. Time_Cnt            = Time_S+$03. ~, c6 }  O1 T! S
  184. " ~/ D$ B& R+ k6 Z* |
  185. ;==================================================
    ) _) s$ X; T& O' R$ Q' m( }8 P
  186. Music_Bank_8000 = Time_Cnt + 1
    / K  Y2 d, p! s5 x, ^
  187. Music_Bank_A000 = Music_Bank_8000 + 1, e7 {! B( B  r6 a: I6 J5 e' j
  188. ;==================================================  w" e  l- @; E( j2 \0 _
  189. 5 p& g( Z$ t/ y5 Y, ^; G5 q
  190. ;======================================================================# ~' n1 s% F( J; U( }+ V# t2 B
  191. .BANK PROGRAM_BANK* T8 I" G2 u  N7 V6 W, d7 W& Y
  192. .ORG PROGRAM_ADDR8 E0 d& {  i, D1 K

  193. . `. H: w# k6 J8 ?+ w
  194. ;==================================================* H0 I- h9 V$ j/ F/ p- [
  195. NmiProgramProcess;NMI中断程序处理
    9 C: }9 E6 K2 x4 H$ w
  196. ;处理PPU图像
    : Q. w5 `% I2 ]8 E5 p( l
  197. JSR PPU_Proc
    - C& P1 r& E/ q$ Z

  198. * @: \( K) r% I8 e1 t
  199. ;启用NMI中断& Y# P# }* d- h6 y3 x, o  r# s
  200. LDA #$80$ J" Z& i, }# G
  201. STA PPU_CTRL
    , A+ @  ~; _) Y- ?8 K; U8 X; A
  202. 6 Y2 \6 K$ g' z+ m+ b
  203. ;更新调色板
    / R, Q( G, h4 l$ q: t
  204. JSR Update_Palette_Data: `% V/ {; [# k: x0 C5 j

  205. / T* ^% D% _; T3 {3 ^
  206. ;显示时间(缓冲)
    ; k5 t$ a; M1 Y/ t0 P/ H* T; j
  207. JSR Time_Show" ~6 l: x8 ~3 k# e4 O

  208. ( z! O" s; B( E3 A6 G- s) L
  209. ;播放计时9 k# q4 x6 U" ]7 h4 ]/ q- H
  210. JSR Time_Count
    ) ~- S) Z9 F% D) ?9 e7 S* l9 a' Q+ l
  211. " J3 P8 d6 i0 V& n' F/ z1 t
  212. ;播放声音
    1 I5 T1 Z' ^' L  K
  213. JSR Sound_Play& E# J% ?, x5 {5 H

  214. 4 t9 \0 q- w$ ?6 O
  215. ;切换音乐(手柄触发)2 }" Z: D/ g+ p+ b  g7 e3 y
  216. JSR Music_Switch( j6 z# `5 u+ {. r
  217. 4 J. _# D0 i: P' q3 |! H
  218. ;音乐显示(缓冲)
    6 q7 p% ]0 x% E1 R, z6 E# r
  219. .IF SOUND_BAR_SHOW_ENABLE
    % M: V( R# Q$ ?8 x8 A/ P* P9 P( i
  220. JSR Music_Vision5 c- Q* I: t$ Z% w0 O
  221. .ENDIF2 z1 [6 H* G8 t& G# ~2 I
  222. ( [# \: }  ?, e# ~/ `. P  r
  223. LDA Time_Wait_Cnt
    / w2 [/ C1 b$ h+ n2 d. }
  224. BEQ NmiProgramProcessEnd
    . n0 L8 ]' z1 ~% N
  225. DEC Time_Wait_Cnt" u2 y$ _6 I1 D
  226. NmiProgramProcessEnd7 j( S$ k; {' h! u6 A1 a, Z
  227. RTS
    8 L% Q' t2 F$ O" \: ?9 b' a+ ]
  228. ( O$ {; `, ?: }& V
  229. ;==================================================- s. m& Z% l* \# N$ _0 F+ e) `
  230. ProgramBegin;主程序
    * v$ I5 E1 J% @- I. X
  231. LDA #$00' |0 t# i& `; @
  232. STA PPU_CTRL8 n# ~! o2 t* H' ^6 C3 y* |% H
  233. STA PPU_STATUS
    / D5 k0 m! Q! G
  234. STA PPU_MASK
    ) q' c- Q7 ~: W# L
  235. STA APU_STATUS
      ~3 M' f: O3 U
  236. STA PPU_SCROLL
    * ]' Y1 u; u% X, }
  237. STA PPU_SCROLL. v( H" |% j  D  n8 {4 x/ B
  238. LDA #$C0( R. G- X6 l" f9 ^# D; N8 Q1 @
  239. STA JOY2_FRAME: I" S8 d! a0 ~) i" D; D2 R" Z- ~
  240. 6 K! ]7 a6 E$ o: E7 I# n- x0 M
  241. LDX #$FF2 a: c, @' ]( O, s4 M
  242. TXS
    2 h% `" l% k; z7 X0 q& n' l" q; P
  243. LDA #$00/ H: {9 Z5 R7 v
  244. STA PPU_CTRL
    " a4 v3 \3 b* {, n6 t
  245. STA PPU_MASK
    3 R+ t- l, M) W+ W
  246. STA MMC3_IRQ_DISABLE
    " u: u/ O8 V2 r; C( }& z
  247. ; t, S( {1 b" A$ R* x. i
  248. ;==============================
    $ q- c! d! ~- p5 q8 |0 A$ Y
  249. ;调色板清空
    / _2 @: S5 I8 b- v* r- I
  250. LDA #$3F/ D; `  y4 q' u, D0 d3 F4 O, t
  251. STA PPU_ADDRESS; _" T; P1 M# k" v) t
  252. LDA #$00# ~- k. M0 Z. s8 Z2 h3 j
  253. STA PPU_ADDRESS) w: R; l. K' J8 j! @7 Z0 y* V7 W
  254. LDA #$0F( {( K& Q+ G% N
  255. Palette_Clear
      f1 D4 j) N" B& a6 d5 t& J" l
  256. STA PPU_DATA1 q8 [6 @1 n, a2 N$ s: x$ ?
  257. INX/ h8 w" ~% h* J2 x% ^
  258. CPX #$20
    ' b+ T! h: n6 Y* u8 n' p
  259. BCC Palette_Clear
      a( Y" o0 X7 u4 v& Z
  260. LDA #$00, I0 G8 V* Y. O5 j( r" M' d
  261. STA APU_STATUS5 S6 b$ L  T5 _0 m+ R* `  y
  262. ;==============================  f! A( y5 |7 r9 k
  263. ;初始化背景调色板
    6 N# W' |- D; i7 ?9 J1 @2 Q1 c4 ]
  264. JSR Set_Palette_Color. E" c0 R* p8 D, {' i7 K
  265. JSR Set_NameTable_Attributes
    9 E3 V  e' V+ d3 P" M
  266. 6 k! A6 l7 l, k
  267. ;==============================$ d3 }9 V7 f9 ~3 |4 n6 K# S: i$ |
  268. ;RAM初始化- v- H1 y& P! s) w% M, X8 K4 q
  269. RAM_Clear_All
    ! f* s! T3 U# w. Z" @# E& ~' N
  270. LDX #$002 d$ F0 G* _1 i4 a
  271. LDA #$00* a, ?" X$ e& \, t
  272. RAM_Clear_All_Start
    / N* f. K4 V/ M: \% S9 E: g
  273. STA $00,X
    ( E  O4 X  k- i& _/ b
  274. STA $0100,X
    ' }' f7 o4 R/ d
  275. STA $0200,X
    2 L! U1 ?* O; O
  276. STA $0300,X+ w% ?1 ~5 Y+ i& |2 X6 ]
  277. STA $0400,X2 B/ ?, {3 S+ T! K
  278. STA $0500,X0 y" N# \9 v6 S) G/ e+ N4 G
  279. STA $0600,X
    0 B6 d) Z' s- s- o$ A; U
  280. STA $0700,X
    $ I# E, Z4 o: h* ^. n
  281. INX
    9 S2 a; {' {. B' w; L
  282. BNE RAM_Clear_All_Start
    6 V3 i1 _4 g+ F* s. a  F6 W
  283. " O% x: d4 P& C
  284. JSR VramInit$ q$ C$ U6 [0 K& x& {$ k/ Z; z$ G1 B, g
  285. JSR Init_Palette_Addr. J* I0 k1 z! l( B5 S# |
  286. 5 c9 s/ ^. k, R* f; O7 _! j# e
  287. .IF Music_Reset_Addr4 i. o1 _: F7 z+ [' V8 @
  288. JSR Sound_Reset2 T. y" o/ J0 N
  289. .Endif
    " x9 U) _* u, ~/ {) V$ |) d* m
  290. + D; _" T) t" M
  291. LDA #Music_Start_Song-$01& A9 P9 q  F% \' D' H& v0 s
  292. STA Music_Cur& u: q6 c/ Z$ c9 u4 x3 i3 r
  293. 4 t6 L; }' K; ]/ ~7 E5 p
  294. JSR Show_Music_Text$ L! W+ B' E  Q5 V2 o
  295. + ]6 T# @% ~  a0 D; Q
  296. .IF SOUND_BAR_SHOW_ENABLE! R' z$ `$ k& k+ W' W' ]) I
  297. JSR Sound_Bar_Text_Set
    ( `. {) x- ]+ M& m1 V
  298. .ENDIF  _  }6 P3 @4 Q2 M! ^6 v  c( w+ j

  299. , e9 d; s5 Q1 M3 K2 X
  300. .IF Track_Name_Pos' E0 E9 i# J9 b) Y
  301. JSR Show_Track_Info
    7 _4 _7 c: j) Y' {; X7 S6 [1 }
  302. .ENDIF% a, T. _7 ]' M8 [5 a; \9 A
  303. ) {; f' ?7 M: {" J
  304. JSR PPU_Proc
    1 s+ C; p8 H' Y9 @! S2 g

  305. " c$ w# R. R% O
  306. LDA #$0E" o* V9 s7 x: ^! K' B
  307. STA Screen_State9 Y; v( m  k, n7 T& m2 a0 T

  308. 5 P; D' t4 p7 e
  309. JSR Sund_Bank_Init; K# j2 q+ A0 R0 w
  310. % ~7 F% l# J, n6 ?) [. l6 i; ^# T
  311. JSR Music_Show
    , f, y7 J/ Y! w% j, F, g% c: T
  312. JSR Time_Show
    ! j6 z3 N$ I  r5 t: b4 J
  313. JSR Music_Stata_Show! b* z9 l+ \7 G
  314. JSR Time_Delay
    1 k  e" y( `1 O+ K4 {

  315. & x1 L5 J" t5 V- b  ?6 q( N1 h5 \3 d
  316. 3 l  |: l! z8 y" T
  317. LDA #$80; _( h# y$ G# o
  318. STA PPU_CTRL
      H0 A( ?7 G  z9 n

  319. 2 n% a# r  {) {# ?2 E! y( _9 K: V
  320. LDA #$20
    & G" O: o; u% c% c
  321. STA Time_Wait_Cnt2 d  q' e) j  U# f" H3 f+ C

  322. 5 Y' K) t/ f5 W6 Y" w# N) @6 f
  323. Wait_Time_Over
    8 E: K) Y! t) N3 O& x
  324. LDA Time_Wait_Cnt
    # Z+ x0 f. B. n% B% P5 m
  325. BNE Wait_Time_Over6 ^* ?  Z. T1 F2 }9 w% x
  326. 6 [# K/ t. R& o+ R7 N# h6 H3 k5 t
  327. LDA #$1F, `  M; T# x, x8 G* _; r& z
  328. STA APU_STATUS
    ) c; n9 g$ v( L
  329. LDA Music_Cur
    6 l& Y% e  @% X3 H' g8 `: T/ N
  330. JSR Sound_Init
    9 ^* V: ]9 s! o/ E% E# M- Y% b
  331. 1 j. r3 M! |- k$ P' e4 S# o
  332. JMP MainLoop. b  E( K. s6 n1 y; K, w* O
  333. ( Z5 r* |6 h" I8 T  v
  334. ;==============================. L. w4 l8 j$ K1 a0 P- D' N
  335. Time_Delay;延时等待
      R! e6 s) ]- K' S) _+ R# `
  336. LDA PPU_STATUS+ x; |' m' W8 c4 i. r) g
  337. BPL Time_Delay9 v8 C9 E* ]; J8 D
  338. RTS
    : w3 M" D5 e: k- ~2 F+ a

  339. 4 S$ r8 I0 D% W# P2 v8 z8 Z3 T/ V
  340. ;==============================& i; B% K! T5 }3 M2 H6 z+ m
  341. VramInit;初始化图形内存
    5 M5 c1 m1 [. C. u
  342. LDA #CHR_DATA_BANK* @% J6 T5 R9 Q0 c% o9 t% N( h' D
  343. JSR SwitchBankA000
    % Y' y- h4 g" v0 B6 Z
  344. LDA #LOW(CHR_DATA_ADDR)+ O1 ]# G3 J4 m  @6 G1 k
  345. STA <Data_L
    2 ]5 z+ M$ m* p7 U" K; f
  346. LDA #HIGH(CHR_DATA_ADDR)( b' s6 v. A: O6 l
  347. STA <Data_H
    " h: ]# h8 }7 a6 `; J
  348. LDY #$007 n2 c. }/ Z, L0 X, z
  349. LDX #$20
    0 @, ?2 w5 B0 q' N7 m
  350. LDA #$00' n7 l2 {4 x' ]- G; ^
  351. STA PPU_ADDRESS$ ~; n) t5 j4 l
  352. STA PPU_ADDRESS
    : M* Z7 E- n+ }4 s! }
  353. VramInitWrite
    ) Y/ r. p/ H& [5 r+ Q3 N" D. o" d
  354. LDA [Data_L],Y% }  x5 e% K! D" a+ P
  355. STA PPU_DATA
    2 m! r6 u* ?4 u# s4 a, J! l6 w* j
  356. INY5 d: S: g) V6 b( r' l  Q
  357. BNE VramInitWrite6 l) h$ k. V. V! e" k
  358. INC Data_H
    / c  [% P+ a0 i6 \0 \* H
  359. DEX' `( W0 U" v( Z/ V) T1 m# {6 E. y
  360. BNE VramInitWrite
    ) g. S4 [- V& j6 ~+ s" L: ~( m
  361. RTS
    6 ]% J0 k$ t- J5 `9 M

  362. . u. n8 m8 U0 U7 c
  363. ;==============================4 O$ z7 W% l& ^% I
  364. RAM_Clear;RAM清除
    ; t, A1 b  L7 `3 [& K6 I4 H
  365. LDX #$00
    / p, D( s+ \8 N9 \9 Q! Q! C
  366. LDA #$00
    * q. c) P  e, t0 W0 U6 M  Y+ j5 G
  367. RAM_Clear_16 f3 }1 C( Q% z( t: w
  368. STA RAM_Cln_1,X
    * T; o! P& }, Y" J4 z" Z
  369. INX
    ' @: [3 ^+ s1 j- q- ?% Y
  370. CPX #RAM_Cln_1_Size
    5 l0 U9 O# q* k8 i
  371. BNE RAM_Clear_1
    8 L+ ~: m( s5 |
  372. LDX #$00) E+ g" D6 ?- |# _2 h- ?
  373. RAM_Clear_2
    $ S# a$ P8 k0 Z2 ?4 R. x! O
  374. STA RAM_Cln_2,X
    5 L$ H3 }/ h3 }- F2 H
  375. INX4 z; ^% Y2 Q  }2 O7 G5 h' K! ]
  376. CPX #RAM_Cln_2_Size9 c0 X% P0 V5 Y: t. |7 f
  377. BNE RAM_Clear_2
    ! R- w" X! Q6 N& X1 G
  378. LDX #$00* K; u' [2 i! T# X9 r
  379. RAM_Clear_3" e6 v1 p7 ?) `
  380. STA RAM_Cln_3,X3 Q, K7 O1 b; L1 i6 f2 X
  381. INX: |4 C& Z/ w3 q$ N+ U8 G, e
  382. CPX #RAM_Cln_3_Size- Z" w3 ]6 f1 ^  C# w" e, D
  383. BNE RAM_Clear_3
    " y& X8 h' e8 ^+ B2 [; I+ p2 m6 `8 [
  384. RTS) a' G1 y7 }  L% Y1 K2 \/ u+ W. B

  385. / e4 H* z, S7 Y
  386. ;==============================
    : x6 S8 Y1 q6 p* A* P
  387. ;音乐切换
    7 }" l1 e! }9 [" }+ Q9 }; r* X: x: S
  388. Music_Switch+ N, `+ J% O% c% O: K4 F( m. e
  389. JSR Key_Proc) X5 _- Q! f& W' l9 O
  390. LDA Key_Once
    ) c! D/ T! W, C/ z5 ?- e9 K3 A. d
  391. CMP #$10) t; U) Y$ L3 w  O3 d+ L4 ]4 a
  392. BNE Music_Start_SongStop% `; b/ p, o- G$ N" D- d
  393. JSR Music_ReSet7 I  B' P1 [& E' W: @& C

  394. / {8 V" N% ~2 |8 e
  395. ;音乐停止
    6 g' v& d' f+ @7 ?9 \% Y5 I! W) d
  396. Music_Start_SongStop
    ( z, K& |7 A1 y) i+ y: ]
  397. LDA Key_Once! V, o/ m; j4 C' X9 @3 v, ]. M
  398. CMP #$20
    6 ~* m' D/ T$ b- Y
  399. BNE Music_arrow
    " z* N+ ~5 C/ E9 O* Z) P. q; f
  400. LDA #$01# r2 R: ?" L" m4 `, ^/ P7 v; ?0 {
  401. STA Music_State
    ' K- [* ~+ _6 }! [6 {; C9 x1 _
  402. JSR Music_Bar_ReSet
    6 o* q7 f) n& L3 v- s
  403. JSR Time_ReSet
    ! m2 l6 S2 q* S0 \
  404. JSR RAM_Clear1 M1 q2 ^6 S" p4 M0 V
  405. JSR Sound_Clear
    % A% l% V  m! K. B
  406. JSR Music_Stata_Show
    ( ?5 @: Y  e& {; D) i+ d
  407. Music_arrow$ h& L! y3 b7 j# ?! p- G  N7 q# Q
  408. LDA Key_Once+ j0 L, V( h# d) j2 F, n# |
  409. AND #$CF: H' F; B% |, B4 j
  410. BEQ Music_Switch_End  w: P& @: S* ?4 Y
  411. JSR Music_Number1 ^2 [* n. \0 w9 d. ^
  412. JSR Music_ReSet
    ) z/ R5 `/ J. ?7 l2 m; j# \. h
  413. JSR Music_Show
    * t0 h0 E3 S2 Z* a* r
  414. Music_Switch_End
    / {4 x) M8 g$ y3 `! n# T
  415. RTS
    ) R8 [/ x7 m1 V

  416.   w, ?1 T9 z5 A8 t
  417. ;==============================
    : w) v4 {- U+ z$ |# y9 w# x
  418. ;音乐曲目切换
    0 \$ @) g2 G  `9 S# [, ?6 Q# L  }/ X
  419. Music_Number
    1 W4 \8 i) h; G# l- g
  420. LDA Music_Cur
    ; v5 I, R2 b6 W4 ~6 E
  421. STA Music_Last9 p1 ], \* G, G" ^( \/ q: p; U
  422. Music_Decrease
    ! M. L2 O- c9 m/ F( Z
  423. LDA Key_Once: S, g0 f4 I0 i. r
  424. AND #$420 c$ ^4 s1 p+ {8 O% C
  425. BEQ Music_Increase
    6 V0 [3 }0 ]/ A# V
  426. LDA Music_Cur
    " r- x1 g9 P! \6 G$ e
  427. BEQ Music_Increase0 E, C. Y. n/ g2 L+ t5 C
  428. DEC Music_Cur
    6 f( B% M& G; V! n6 o6 ]
  429. Music_Increase
    . x  |4 y/ f0 [# A- ~1 I' F
  430. LDA Key_Once( ]% M" v+ K5 Q# ]( t) V
  431. AND #$81
      C  P! `& ^, K4 ]+ y  K8 I
  432. BEQ Music_Decrease_10
    6 E$ j, d0 H2 g, X) A
  433. LDA Music_Cur
    ! @, i1 X( S/ n: h2 P
  434. CMP #Music_Song_Total-019 K' N# Q! K2 k; L. P& \, m
  435. BCS Music_Decrease_10
      f  m) g" o  h* S
  436. INC Music_Cur
    + B% M: I, O- L8 K1 G
  437. Music_Decrease_100 U3 F# D! [0 C% g
  438. LDA Key_Once
    ; ]/ S" r1 {# l: J, T; i, K9 A" F
  439. CMP #$04
    $ X0 v* e/ I% r  d) }) |
  440. BNE Music_Increase_10
    ' e  R% H! M+ W! \. }# h0 F; O- O
  441. LDA Music_Cur
    ' }* G; p' _- A6 e% Y5 _. T5 ~& A
  442. CMP #10+ ]& F6 j/ ^6 E0 t" n
  443. BCC Music_Start_Song_Min
    ; A2 F( r8 |# g. o; g9 _+ E
  444. LDA Music_Cur1 {, E. }  U2 n2 }! X" \
  445. SEC, _" ^7 H9 @% T) N- f9 ~, h2 p
  446. SBC #10; [& N2 s/ H7 U: H* P+ ^1 R! H
  447. STA Music_Cur
    ' E' I% a" _# f) X8 h; `- h& u
  448. LDA #$00
    ( s4 S- e+ P0 C1 E. I( P3 O
  449. BEQ Music_Increase_10$ K- U0 u+ B" H# v' `$ Q4 q
  450. Music_Start_Song_Min. B1 H6 |( e! }1 p/ }3 G
  451. LDA #$001 @. j: q1 b. ]; t
  452. STA Music_Cur- w# d4 |) m# J3 r
  453. Music_Increase_100 S! E; c; H2 T5 ?1 O
  454. LDA Key_Once
    ! c# i' r% Y4 i" M9 }, A
  455. CMP #$08
    / q1 L( v; M* B9 w* |
  456. BNE Music_Number_End- A- R" V2 N) d8 q4 I: ^1 V
  457. LDA Music_Cur$ L1 g' ~' e6 v" G5 g/ m5 Y
  458. CLC
    ( r/ A8 h, A- g; }
  459. ADC #10# X$ ]  l$ f' k$ x1 [
  460. CMP #Music_Song_Total-01
    8 O4 i; v3 G1 A' C$ }1 C0 M
  461. BCS Music_Start_Song_Max
    8 x2 x# _1 ^0 S8 k
  462. STA Music_Cur
    4 ~. ]0 Y  s9 Y
  463. LDA #00
    0 u0 X, N" l$ o# q+ j% I* w
  464. BEQ Music_Number_End+ B, a2 m( o! y- c, a; U
  465. Music_Start_Song_Max
    . t3 l5 k& B0 [4 c
  466. LDA #Music_Song_Total-01
    " H" Q- p  i3 s% i5 ]2 N
  467. STA Music_Cur
      V% W+ t  Y* }4 q. q7 D
  468. Music_Number_End) D8 p2 f+ k9 y/ V3 o6 S: A
  469. RTS1 x0 r$ Z8 w/ e6 L1 [* O- c) L
  470. 2 a! {5 A! e* B3 l/ o$ z5 h# F
  471. ;==============================+ `; U' n: I* D8 K* z
  472. ;音乐重设
    : n4 S" y- E; p4 t
  473. Music_ReSet
    # Q1 R  w2 _% Z) x6 x" K
  474. JSR RAM_Clear
    & ~2 ?" H# D/ m$ m7 K/ y' x, u
  475. JSR Sound_Clear
    , Q6 J+ j8 V3 x2 I
  476. LDA #$1F
    1 I7 t7 P0 M( x' ?; J4 x
  477. STA APU_STATUS
      a5 V) l7 r' \2 `' o
  478. LDA Music_Cur
    2 i) D8 ^7 S  M: z/ S
  479. JSR Sound_Init7 D8 b+ u4 e# y9 z& i) w
  480. RTS
    # Z$ k: r! T3 Y# v. e

  481. ' k2 [+ n7 i3 G( p" X7 w6 d' U
  482. ;==============================6 s% p- [1 U. X$ {& ]" W- |! \6 A
  483. ;音乐端口清除. d! w/ P& i0 V- @5 R  K7 k
  484. Sound_Clear- Q0 L: a) J3 G
  485. LDA #$00
    ! w  M. L" L) b5 u. z) O( \2 U
  486. STA APU_STATUS
    , m. i9 b# a5 e5 [9 C& F1 }5 v
  487. LDX #$00$ b6 L! }* c( N% H+ F% M
  488. Sound_Clear_Start1 w" W0 e7 B- [! }+ N4 U
  489. STA $4000,X2 Z+ v( m+ {) @- e+ C. z6 h
  490. INX" o7 u0 A0 A# W- u9 T6 M
  491. CPX #$141 x) p6 n2 R. ]6 D9 x  H, l' J
  492. BCC Sound_Clear_Start, E9 J  Q3 _" H" C
  493. RTS
    8 l( A" }4 s# L4 c7 m  f% B

  494. 4 R( W- R' n5 q% A1 H: X$ C% k
  495. ;==============================
    1 A5 c' X7 `. {
  496. ;按键处理
    + T9 d8 `# I6 T7 P. `
  497. Key_Proc
    5 \/ n  X' S! @; E- Q9 ?9 ]" ?
  498. JSR Key_Scan
      G% E- n% [' A/ G3 D
  499. LDA Key_Keep0 S% [* t( g2 E& F
  500. STA Key_Temp
    6 U- C( |+ _6 D( o
  501. JSR Key_Scan: F* I- p! b. G0 L8 f
  502. LDA Key_Keep( r! y" |1 k9 O' }: n6 Z+ l$ v& _
  503. CMP Key_Temp1 j5 C3 o$ m) f. W) x0 N: p
  504. BEQ Key_Get_Once! S6 K' u! i5 w
  505. LDA Key_Kemp/ W9 @8 d: d" @2 q
  506. STA Key_Keep
    ! w0 Z, Y  T4 R% ^- N/ Z
  507. Key_Get_Once: b- n2 o( |$ r* C7 c( l
  508. TAY- m7 H" t- k' K4 }' B
  509. EOR Key_Kemp, \8 _% ]8 u* y6 I4 g
  510. AND Key_Keep) K4 `3 F5 V6 l  f: V; u
  511. STA Key_Once
    % ?# B' ]) t5 P9 A, ]+ f
  512. STY Key_Kemp
    6 u; w( Y9 Q. S9 {: ^) `" C
  513. RTS$ e% ~  S2 J0 m
  514. ;------------------------------
    ' M* t3 @7 h$ }
  515. ;按键扫描1 I. P8 K3 t; J# G: v' |
  516. Key_Scan
    6 v% t6 O8 b2 L: N% V9 A% \
  517. LDX #$018 h0 d8 D: X( L: P( U2 L
  518. STX JOY1_FRAME9 j: w% N) b% B/ X
  519. DEX
    " _# ]9 ^- {& K" g1 w" d  ]
  520. STX JOY1_FRAME# K$ o! f4 L0 J% C
  521. LDX #$08
    + F: _0 j. }/ Q' n2 V! S) x
  522. Key_Value
    3 z9 H; \* r8 R7 j- W, |( ~
  523. LDA JOY1_FRAME8 G2 O! X- ^' ^+ [8 ~
  524. STA Key_Getv
    * r' s1 K, u2 y0 Q, w
  525. LSR A
    * G! H" Y! @$ v! I; d6 @- F# R
  526. ORA Key_Getv5 F/ J6 R; o& W. e) _) G
  527. LSR A
    9 p# P6 b, U5 _5 `
  528. ROL Key_Keep* u& U) X5 J5 }7 Y
  529. DEX6 U& o6 b7 h3 c. M/ `/ _7 c
  530. BNE Key_Value
    ; u& S- }# |2 C
  531. RTS3 a& W& ^0 o& D; Y

  532. $ j+ ~# P% ?1 j$ C" r2 J
  533. ;==============================
    4 h4 s4 A0 N8 D% l4 D
  534. .IF SOUND_BAR_SHOW_ENABLE
    5 S( H0 A( \1 M
  535. ;音乐条显示
    5 R9 Z4 Q( f, q/ c$ X3 L5 K1 D
  536. Music_Vision
    ! s( Q- s; B, c
  537. JSR Music_Animation
    $ n" f( x( E. f5 w
  538. JSR PPU_End
    . C! @5 D6 T) n
  539. RTS
    + v% D7 q$ y$ B4 X. ]3 g
  540. ;------------------------------  t' |; m/ L! _
  541. ;音乐条显示处理& I" s) F: l" ^7 o* w2 t
  542. Music_Animation. ]# [3 A  F% A# h4 L- x
  543. LDX PPU_Cur
    1 o, i+ T) b  M) ^# y
  544. LDA #Mode_Line
    / a) ^# g8 c1 V: t# v
  545. STA PPU_Addr,X
    0 g& X. t" U) o: K
  546. INX
    / L% f! c' z3 v% ?8 m" v# X
  547. LDA #HIGH(Sound_Bar_Pos)
    % P6 v' I0 m% ?6 f! M- E6 y  |$ ]
  548. STA PPU_Addr,X
    ' d2 E4 H- e7 r0 G( q5 H; z
  549. INX% ^& |. v$ {) B" K9 I6 y( V5 U
  550. LDA #LOW(Sound_Bar_Pos); w/ u/ I' v3 {8 |2 n' z3 ]' C; V
  551. STA PPU_Addr,X
    , n: \  y! V+ R2 \1 k% x
  552. INX( n0 l) {( j: |  c2 I) m5 o! O# S
  553. LDA Sound_Bar
    * K0 M1 B  T0 [& a6 |8 K
  554. JSR Volume_Convert
    : e+ S0 G) g+ X! H2 U* J! h7 z8 C- j
  555. JSR PPU_Return  _% _( ~; y9 h1 @. f) w9 M) B
  556. LDA Sound_Bar+$4
    ; {" r# P" [3 ^
  557. JSR Volume_Convert/ A2 v8 \- z/ [1 n" ~$ j# |. ^; X9 w
  558. JSR PPU_Return
    * l2 U) C! a! |  S. y7 H
  559. LDA Sound_Bar+$8
    5 y4 {8 A" x' V$ X
  560. JSR Volume_Convert_Ex
    6 J/ y. [3 n& R0 J; N! X! d. c( Z" [7 G
  561. JSR PPU_Return
    ( d3 j; d7 [: a4 z- B
  562. LDA Sound_Bar+$C
    9 H8 {% p, X* h  K( p& C5 y
  563. JSR Volume_Convert
    ( ~( c9 k. ~9 ~2 Z
  564. JSR PPU_Return
    ( q5 K7 M- c# w
  565. LDY #$10
    ) g! I5 m( |+ y7 ?5 U9 o
  566. LDA APU_STATUS4 F% v$ f5 G8 E* Z: u3 {% i- U
  567. AND #$10) I1 g8 W# q' y3 S& f* Q
  568. BNE Volume_Count
    ) s- t3 U2 y% ]  ^$ ]
  569. LDY #$00
    + l+ F8 ?( d& k2 C3 ^$ t" W
  570. BEQ Volume_Count
    % E) v4 m+ n- L$ c# h
  571. ;------------------------------( Q2 b- J( h% j" ~# x
  572. ;音乐条处理
    * z# ~6 A! o, g, I
  573. Volume_Convert_Ex
    " s5 L8 w3 x: c' ?7 s& [
  574. AND #$1F
    + s: C# ^6 M; F4 w6 \
  575. TAY! A! v, O. Z$ L8 Q( J
  576. BNE Volume_Count# [' F+ _7 A; v4 l: L; X
  577. Volume_Convert2 P0 S! M' K* ]% c. R
  578. AND #$0F
    - U% N+ V! k/ ^4 p" V/ h; u) B
  579. TAY
    * R: g; Q7 u* a$ c& W0 ^
  580. Volume_Count
    , v( V  f$ c3 F4 D0 {; u2 z
  581. LDA #$088 L, D3 `1 f* B/ p& [: p
  582. STA Sound_Bar_Cnt
    / w; Q2 D% W8 S5 Z2 r5 O
  583. Volume_FILL0 I: b* T% W. S5 m$ q; I: O! l
  584. DEY
    2 G8 y3 k% h( }* d3 ?
  585. BEQ Volume_Half
    ! a4 |! q- h2 C1 T* b
  586. BMI Volume_Empty8 d3 w) {' w# h/ t$ C1 _2 g; ]
  587. DEY  z! v" }7 ?% \! c
  588. Volume_Full
    , Q6 a, z7 v; h/ l4 }  f
  589. LDA #$16) `! D6 d( Q0 c6 T: o
  590. BNE Volume_PPU
    1 X: d) w$ X+ X
  591. Volume_Half$ b- D6 S8 ^4 R+ J9 Z# x
  592. LDA #$15
    . }% U" n9 ]4 ^4 s( m0 t0 I# I
  593. BNE Volume_PPU. Q8 f! Y! A, ~. ]9 A" S
  594. Volume_Empty9 J: z+ t' J( a* r8 k
  595. LDA #$14
    0 M- [5 }* T# A- j( w" J
  596. Volume_PPU
    , i. [; U$ @% ~, H3 A
  597. STA PPU_Addr,X
    $ G* u! U8 h& h8 N, \
  598. INX
    7 }- v5 P' p8 p5 b
  599. DEC Sound_Bar_Cnt# S0 L! k3 X# J3 L5 _+ R$ W/ M
  600. BNE Volume_FILL2 R; I4 A" p& t3 L2 j2 K4 L: f
  601. RTS1 }# ]5 a4 [. T7 \) k1 m

  602. : n! q( a1 f' [  Z9 u) \/ x- Z
  603. .ENDIF) h. m- m2 m: a" M- v: D  \) N

  604. 5 M, c* R( X! Y- U  D% V
  605. ;==============================
    1 p5 S) I* v$ d7 i4 G7 P
  606. PPU_Addr_Set;PPU行开始
    * U1 i2 W7 n) S4 y/ Z2 Z
  607. LDX PPU_Cur$ R& t+ O% x( U% `, w/ C
  608. LDA #Mode_Line! \1 p2 |( [; i
  609. STA PPU_Addr,X
    & ]: L/ @! N3 k3 k, R% i$ F
  610. INX" Q) a2 y7 h' Z! @
  611. RTS
    ; ?6 d! w) J! r/ |

  612. 0 b! x% O5 Y& h3 f& W1 G; h
  613. PPU_Return;PPU转行# T* I$ B6 E- ^. n1 c
  614. LDA #Flag_Over
    3 P; W7 Z. @7 L) c
  615. STA PPU_Addr,X
    * c9 Y5 K3 P2 y% M: V7 L( J
  616. INX, b1 h8 w' G) M, k
  617. LDA #Mode_Return. w/ O6 E% f' B: |0 L
  618. STA PPU_Addr,X
    . p/ U( o  I9 k4 R
  619. INX
    : P1 H+ C: C# ]# |* o# L
  620. RTS# q; Q5 z; w& k* k

  621. 6 b: L0 [( a2 M3 c* W
  622. ;------------------------------7 |! E5 F/ H: T" S7 y
  623. PPU_End;PPU结束2 M- ]: @$ {( n' O9 a4 S( K' e: j
  624. LDA #Flag_Over( O* k1 B+ p9 X1 \0 ]" P& H- Y
  625. STA PPU_Addr,X
      t- Z) T  T! k3 k1 z& T! F
  626. INX
    8 r  Q. ]: X2 E. z% O* h
  627. STX PPU_Cur6 N8 S1 i% ~1 n9 F/ {5 S0 p
  628. RTS
    7 p' U8 e9 e7 I2 O' M  m
  629. ;==============================; D# m2 o& Z  _! u
  630. Mode_Line     = $FD    ;新起行模式8 X  S5 N5 {$ g
  631. Mode_Return   = $FE    ;转下行模式
    4 z3 ]1 K/ s7 F5 b- Q/ U( N2 ]' }% U
  632. Mode_Clear    = $FC    ;行清除
    . w/ Y3 `) ?% T6 {0 m  r
  633. Mode_CntLine  = $FB    ;行计数写入) z3 s0 K+ C) V$ b6 s/ O5 V8 y- U
  634. Flag_Over     = $FF    ;行结束标志
    1 V2 r% e2 q2 N, q

  635. 2 B8 |- W% o$ t" Z
  636. ;------------------------------
    ; ?* k6 r4 ^& S' ~
  637. ;PPU处理) Q$ k% K9 w5 s7 O  N
  638. PPU_Proc
    , e' M( ^5 n- \) }/ y6 V! `& F
  639. LDX PPU_Cur" W: F6 ^( L" V9 f4 R6 c# O" X
  640. LDA #$00( \- X: j# y0 i6 o! k/ r
  641. STA PPU_Cur
    4 [) e8 m  k6 q" g; `9 X
  642. STA PPU_Addr,X
    $ ~6 y! Q# S/ j# z& E0 g
  643. LDA PPU_Addr) B0 z7 H* _$ v1 A- X- w# S0 h9 c
  644. BNE PPU_Proc_Beg! h) ]' e% D0 u/ ]5 p) _
  645. PPU_Proc_Ret
    * w7 p! Z1 r" F; D
  646. RTS5 `- J5 u+ K( u5 F- Z& L- p. T
  647. ;------------------------------
    " K2 x) O7 r) h7 a2 U
  648. PPU_Proc_Beg  ;处理开始
    ' k$ c% J. B4 q/ w# I
  649. LDX #$00% U% ?: Y2 K/ K' ^( [3 R/ k
  650. STX PPU_MASK
    4 [8 l' j  N$ m8 s0 v/ |5 U. S
  651. ;------------------------------
    5 j1 h$ N- W  ?! G$ ^6 Q
  652. PPU_Mode_Select  ;模式选择
    " s* L6 \  s  l+ K, h
  653. LDA PPU_Addr,X/ B8 m9 a$ ~* y( M( e
  654. CMP #Mode_Line6 L2 z+ \8 r: T& r: h
  655. BEQ PPU_Mode_Newline
    $ j% [+ W3 l6 u+ u' i* s( V/ T
  656. CMP #Mode_Return
    9 H, q& S) m+ g, `+ i: [. w
  657. BEQ PPU_Mode_Return+ h  j2 w" ~" H
  658. CMP #Mode_Clear
    9 x7 \4 G. X/ L" s8 P
  659. BEQ PPU_Proc_Clear1 V! V! ?) X, f) R; |1 v
  660. CMP #Mode_CntLine
    5 e+ k1 R& Q$ D+ ^
  661. BEQ PPU_Proc_Cnt_Line' `0 G7 @, {5 J: l6 t4 x
  662. RTS8 X, S6 \$ M4 }1 D. ?: E8 z
  663. ;------------------------------. Z. e8 B- Y! }$ q
  664. PPU_Mode_Return  ;转下行模式% r1 @5 H9 @5 {: F
  665. LDA PPU_Addr_L- }1 H2 Q7 w# m' [% D+ @* b4 l
  666. CLC0 J4 D$ z' K, n) M! Y
  667. ADC #$20
    ! t# c. {7 M. i" \2 N
  668. STA PPU_Addr_L% V; o2 }& i& ~& C
  669. BCC PPU_Return_End
    / l$ q' x, N! `. @
  670. INC PPU_Addr_H3 P+ A/ F7 i) f2 K. G  w( d. j
  671. PPU_Return_End1 ^3 V% |& |3 A; l3 r4 d; p" ]3 f. V
  672. JMP PPU_Set_Increaser
    3 Y1 h6 N& i. a% [. O3 Q
  673. ;------------------------------, T4 T$ p2 C- G. v# }. V$ Z
  674. PPU_Mode_Newline  ;新起行模式  C% H/ T5 E# R  a& R3 V
  675. INX
    2 E$ ]$ _' _6 J
  676. LDA PPU_Addr,X+ {& w3 X7 A9 N$ W5 t* x1 I: m
  677. STA PPU_Addr_H
    $ s6 A8 l) r% Z
  678. INX
    " [0 E) Q( b% H3 m- L, P: ^
  679. LDA PPU_Addr,X5 X, o$ h9 Q3 p# R2 q
  680. STA PPU_Addr_L
    + T4 d+ l3 {+ Z, O
  681. ;------------------------------
    ! B% {1 r% o0 P7 x# Y: N( M* w6 I' Y
  682. PPU_Set_Increaser   ;设置写入地址. _; d7 l; a3 ]3 h
  683. LDA PPU_Addr_H* W: }: W$ }+ l( q
  684. STA PPU_ADDRESS: N! N* w" x* D* u
  685. LDA PPU_Addr_L
    8 u$ ^# D1 h7 r0 c2 S3 X- D. @; K
  686. STA PPU_ADDRESS
    . @$ S! y7 d% U/ v/ Y
  687. ;------------------------------$ ^7 k4 b1 v5 |. R; e  p& r* @
  688. PPU_Write   ;写入数据3 a; `/ q9 u0 W1 o* G7 D! l' T
  689. INX
    0 }2 ~: s- v" S
  690. LDA PPU_Addr,X
    / z% f0 _$ c4 @5 N
  691. CMP #Flag_Over" V' a$ H8 l6 [4 n1 o
  692. BEQ PPU_Proc_End
    % z6 o) [5 {1 ?6 S
  693. STA PPU_DATA
    ; ^6 N: u. ]( E
  694. JMP PPU_Write$ o& r. n9 D5 |) m
  695. ;------------------------------) _0 `- Z) b; N8 G3 R0 R
  696. PPU_Proc_End  ;单行写入结束- Y5 j' v3 k  r  N% ]6 c
  697. INX9 S3 O0 J1 ?3 N: T, L% ?, w' S# z( e
  698. LDA PPU_Addr,X
    $ v0 d+ `* O7 o+ W; H; o
  699. BNE PPU_Mode_Select  z5 m5 v- C( @7 _# b! |- g" _
  700. STA PPU_Addr* z/ G1 Q5 K* c2 ^0 H! W
  701. JSR Update_Palette_Color2 \6 N) W8 T( A% D6 P- r! o- e
  702. LDA #$00
    ; F: N8 z7 E/ J$ n+ y- Z1 p
  703. STA PPU_ADDRESS: ~( V6 R) N4 i3 K3 G1 ?# y+ i
  704. STA PPU_ADDRESS! j+ M, s- t) }9 ]2 \+ ?
  705. STA Show_Track_Name
    7 E* K* V% D  f3 b  J
  706. LDA #Scroll_X6 Z/ Y+ c. P# m) a6 }- v
  707. STA PPU_SCROLL
    ( n) r# f0 q" v, Q
  708. LDA #Scroll_Y$ r2 b/ I! f9 v. A
  709. STA PPU_SCROLL2 ?9 A# F8 t; t' m# n+ w8 h
  710. LDA Screen_State. w9 L( P4 v5 A) z9 X* e
  711. STA PPU_MASK, i% y+ e1 d6 D: h5 M3 ~. {
  712. RTS: H. d6 h1 [, D0 b5 N' H
  713. % f  F3 \7 F' J
  714. PPU_Proc_Clear
    1 B& h6 Z: H. \* Y" V9 a6 N7 e
  715. INX
    ( F( t# h$ c0 O3 P" W# R% t
  716. LDA PPU_Addr,X
    7 h" y1 c$ V$ E- P6 o# v
  717. STA PPU_ADDRESS
    6 K! e6 @- i- U( {5 J
  718. INX' v1 b& D  o, j9 _
  719. LDA PPU_Addr,X
    3 P& {& t+ D1 g0 |( i, a$ R: Z4 F
  720. STA PPU_ADDRESS2 C) A/ a3 S4 p1 z6 \0 k
  721. INX
    6 X9 s8 T+ c; o6 }/ ?& A
  722. LDY PPU_Addr,X
    / T; _2 x) I( L) J& K) Z8 n
  723. LDA #$00
    5 s1 W, |$ e- x( E& }, T
  724. PPU_Proc_Clear_Write
    # y6 l, Y0 k$ P. k2 C+ n
  725. STA PPU_DATA9 p9 L! g# R* n: H8 S' B" M: C- _1 N
  726. DEY/ _* Y! X2 m7 L& U9 F
  727. BNE PPU_Proc_Clear_Write/ ~# t# F" l8 h2 K) o9 A1 J
  728. JMP PPU_Proc_End
    ( _5 u1 C  E) L7 l+ M. m4 @
  729. $ z( J8 D/ h  \/ r- C8 N9 e) M
  730. PPU_Proc_Cnt_Line
    5 ?- T. i9 W% z2 b& U* i
  731. INX
    0 D5 v: {) l7 W- ^9 M" ]9 y# D, B
  732. LDA PPU_Addr,X& d  m2 n" P3 X
  733. STA PPU_ADDRESS6 C* ?) y% n/ y3 T/ g& M: J
  734. INX
    * a& @. Q" L# m) P' ^$ o
  735. LDA PPU_Addr,X
    : u  E3 ^  ?# j+ ?+ Z
  736. STA PPU_ADDRESS
      ]4 g! K9 j: D) ]+ H
  737. INX% |- q8 a# F/ ]) i2 @. _
  738. LDY PPU_Addr,X# H  i5 _) [/ K; p! z# V! Y! C$ Z
  739. PPU_Proc_Cnt_Line_Write4 G6 F0 ^8 X# W/ M( Z7 z% p
  740. INX, i% B' i4 q$ ?
  741. LDA PPU_Addr,X5 c. I# D, Y" y' a3 S' u* F# {: ?
  742. STA PPU_DATA
    0 o; l5 t9 O9 S& a* J+ a4 {
  743. DEY
    6 _+ f+ U/ a7 \% D# Y2 z) |  N
  744. BNE PPU_Proc_Cnt_Line_Write
    . y! F/ ?! |) U
  745. JMP PPU_Proc_End4 {; T3 O$ F  Z. e# K4 l% k

  746. ' G% l2 `# V7 _$ k, P  {
  747. ;==============================4 D. n8 F  \+ G9 r: ~7 \+ l( @" c
  748. HEX_To_Dec;十六进制转十进制
    9 N$ M6 D) D1 i# V0 s& b
  749. STA HEX_Data8 X) O7 M: u5 v4 D7 Y
  750. PHA
    # C; M  A$ n& Z; a! C, D1 M7 W  n
  751. TXA
    0 q! w4 K- M8 h" N" m
  752. PHA' m5 J  L7 J4 _; h$ _
  753. LDX #$00
    ' p2 h( i2 l5 ]: V6 q& T
  754. LDA #$00
    4 Y! b$ d+ a9 X$ i$ r
  755. HEX_Cln4 k: U. a" J) ?7 o9 B) k* Q! F& Z8 K
  756. STA DEC_H,X
    ! W) h0 B/ `6 C, L7 w. g( q% _+ Y4 L
  757. INX
    8 D) B  L# J3 m, R% l4 p
  758. CPX #$03
    + X& h5 j- W" h  b& ~7 |. |
  759. BCC HEX_Cln* u& h, \( Z7 k1 ]2 e9 B% l* r
  760. LDA HEX_Data5 |# N3 r' H% N- ], `6 i
  761. ;------------------------------8 a- G) o! A* c$ r
  762. HEX_100
    ! ]- ?! a; S# ~* c0 \" A. ?" U
  763. CMP #100  T7 ^, p1 X3 m6 ^: ?( W& v0 Y" M
  764. BCC HEX_10
    0 |+ K. y4 C. T0 C
  765. SEC
    ' g9 _% {2 y6 K/ e& k1 |
  766. SBC #100
    & o6 k/ S% }# j6 u1 Q
  767. INC DEC_H
    1 P* U* o2 [7 L1 \$ Y4 E, {/ m! d
  768. BNE HEX_1000 A9 A8 X7 _+ X* K
  769. ;------------------------------7 Y* _8 ~) |; B3 |7 v8 M) u
  770. HEX_10
    : V0 ?6 l' t4 c6 L/ \
  771. CMP #10! x: K/ V4 n* }- Q2 v9 L
  772. BCC HEX_1
    ) g" Z. G( g( Z; r7 S% }) F
  773. SEC. w/ x* ~9 |6 E+ n* v; J
  774. SBC #10
    ' p; O: F& O' Q6 T
  775. INC DEC_T+ S: W$ L6 u3 I
  776. BNE HEX_108 |. K/ `/ N0 G" f, e1 L
  777. ;------------------------------
    ' a- T0 W2 k. Y: h; y2 s, u5 u# z
  778. HEX_1
    , O- [3 ]) X* z' u1 G& u" J- }
  779. STA DEC_L  i& F, Q9 x& k2 v5 j; L
  780. PLA
    & j0 v: J) i- U
  781. TAX
    9 b- w) I) w* @, i+ S
  782. PLA2 I8 i0 V' d7 t! f8 o% _
  783. RTS. S, M2 J9 \- u  H+ K0 C9 N' u
  784. ( b* V0 D7 x6 b$ w' m/ q
  785. ;==============================+ E6 g& Z' I0 ?0 @! |7 g8 d
  786. ;音乐曲目显示" m, @- g- Q, Q8 Y! x) j' z
  787. Music_Show
      y& E1 }9 o) {  F9 u, B
  788. LDA Music_Cur& y. G: ^% k' O" M
  789. CLC
    / `( `# t' l5 t/ s" b* C! M
  790. ADC #$01
    8 c* S' M3 F4 x' y; r) c
  791. JSR HEX_To_Dec
    ) A1 }6 C* d% X9 |7 J+ H) @( Z$ }
  792. LDX PPU_Cur
    0 X( U7 O5 g; J0 e7 g( p
  793. LDA #$FD) B1 u. `6 L* W2 g, T. j3 P1 w. a
  794. STA PPU_Addr,X; T( ], h( |, a, I
  795. INX
    5 p1 W, u" ]: Q
  796. LDA #HIGH(Play_Index_Pos)
    + z$ [# {" Z0 I
  797. STA PPU_Addr,X( @0 K. \# q* Q+ l4 X
  798. INX
    5 ]: R$ Z7 C$ ^8 s* X, ^
  799. LDA #LOW(Play_Index_Pos)
    ) w2 V4 {& h8 e) z5 V
  800. STA PPU_Addr,X
    6 A) q) [" l* n1 x6 K0 @: n
  801. INX: x; _: m: i1 i5 d( b
  802. ) I/ X1 j' b' m+ E8 m9 a; b
  803. .IF Music_Song_Total > 99
    3 C- \) a( m/ O/ l1 H- }. G
  804. LDA DEC_H3 B5 ~# w* o% o
  805. ORA #$30
    , F( @( K  F/ B* Q" z$ m
  806. STA PPU_Addr,X
    4 h* E9 ?* j5 n% Q
  807. INX; \9 o  y9 X2 p. l0 Q! Y) k- e
  808. .ENDIF: C  @; |- p5 [, n" K' o

  809. 4 D- Y, b3 F, U, K! U
  810. .IF Music_Song_Total > 9  s4 k& c; ]$ X! I, T
  811. LDA DEC_T
    9 f. @" Y8 Y" K" y0 L, ~
  812. ORA #$30% T4 u! \# G  J
  813. STA PPU_Addr,X+ n% J8 U0 N8 M! O% T
  814. INX
    # y" X$ d  g  A" C$ h& Y
  815. .ENDIF
    6 W& h5 @$ K1 B/ n% |& H% A" E+ C

  816. % S3 c! K  J; C: Z- H! y0 A7 Y
  817. LDA DEC_L, `) K" x, l6 u& P* F) _1 `2 N4 L2 y
  818. ORA #$308 K+ v+ o! b+ \- t4 l$ s
  819. STA PPU_Addr,X4 D0 X8 Q9 T! v0 `6 o
  820. INX
    $ e& f: }3 J* n- [' p' O7 q

  821. 4 }, A0 y, ?" Y
  822. LDA #'/'8 p7 ?6 [! V( s. V- C  r
  823. STA PPU_Addr,X
      y' Q, O+ D3 R* E; g: l
  824. INX+ ]1 ^2 A- z$ Z; Q/ P
  825. Music_Show_Total
    2 y4 e9 H" N: ]1 ?) V& b8 k( I
  826. LDA #Music_Song_Total
    - A: x/ H, c, \7 j& A0 U
  827. JSR HEX_To_Dec
    8 N, Y; F% K3 i; N
  828. 0 C1 ?* O9 }5 H+ Z- B: H+ N
  829. .IF Music_Song_Total > 99+ l/ D' \8 v7 S; m8 s5 ?
  830. LDA DEC_H
    & j0 o& }2 }/ N7 Y# l# ~, U
  831. ORA #$30. f5 y  A9 @: u! n
  832. STA PPU_Addr,X, T* q" r. a2 W  n
  833. INX! k9 U' k3 F$ t2 _0 v- p
  834. .ENDIF$ m* L3 A5 f, _% i

  835. 8 l. u' s- W4 w8 [! v6 S# [
  836. .IF Music_Song_Total > 9
    . _& j) M7 |% I0 i! h
  837. LDA DEC_T
    / S9 v5 Q3 |# j( M6 R
  838. ORA #$30- m1 g/ T* ~4 b# M) o- ]6 l/ @+ r2 q
  839. STA PPU_Addr,X. G$ H# Y( Z2 x# Q+ f. S9 Q! g7 g
  840. INX
    ( ?9 W1 J% x, ~8 j, f' d
  841. .ENDIF# y+ h' V" H; N7 r# R% ~2 }) y
  842. 3 r! `9 B6 W. R  A
  843. LDA DEC_L
    $ ^- |6 e' L' X: S* Z9 K& `
  844. ORA #$30" S: n" M2 v: V/ }( m3 L5 U. m
  845. STA PPU_Addr,X3 Z0 ~1 o( D5 \% `7 c) M' H
  846. INX6 a- C7 F' }# [1 @# v. L0 h
  847. 8 ]1 W; B# w9 K$ M% O. r
  848. JSR PPU_End0 ]# K! Z  E8 ^0 Z! A, J7 Y
  849. Music_Show_End
    ! K. X0 N+ a# |: g! v: a
  850. RTS
    : @) B5 j# v- |7 k( G& ^. `' E
  851. 3 m" R: }) H" Z3 @$ E- ?8 `# s
  852. ;==============================; a3 K! V; `( ?
  853. Time_Show;播放时间显示
    , o0 `* m; q0 V; |. j6 b, g8 B$ F
  854. JSR PPU_Addr_Set% S2 W* J, T( ~% {, `
  855. LDA #HIGH(Play_Time_Pos)
    2 e( Z4 y3 k% I0 X5 q' u# C" W$ N
  856. STA PPU_Addr,X
    7 v, g* J/ }$ ^9 v
  857. INX# _( F. E7 T2 J, x% r9 ^7 O# \
  858. LDA #LOW(Play_Time_Pos)
    6 U  p- t4 P5 x5 u2 Y7 r
  859. STA PPU_Addr,X7 f2 _1 D' z% f  @# T8 U3 R
  860. INX6 P. Y5 c, h3 `
  861. Time_Show_H0 ?$ Q0 x( ?* X0 Q0 c* V6 [3 g
  862. LDA Time_H
    5 m) e5 z7 {5 N% n$ S8 U
  863. JSR HEX_To_Dec( ~" p2 i- ?+ r$ q
  864. JSR Time_Digit
    / q% a; X6 ^: R( c
  865. LDA #':'
    0 H/ }' G; a6 n& ]3 Q8 S, C! N
  866. STA PPU_Addr,X
    0 R) I0 f# j2 f
  867. INX
    2 q: L4 [& ^6 g+ ~+ e
  868. Time_Show_M8 R1 u4 c8 E4 Z8 X9 I
  869. LDA Time_M) _, k; q- s% r0 L! \: H
  870. JSR HEX_To_Dec
    : I+ C5 c/ q' ^1 Y$ ]7 n; x8 e
  871. JSR Time_Digit
    9 c2 a; C1 q( x9 q: F
  872. LDA #':'
    0 p  x- d& W# l) s! x6 _
  873. STA PPU_Addr,X
    7 B. k8 a2 P2 S3 t
  874. INX
    1 l: J& K1 _! J$ t5 N& V
  875. Time_Show_S/ L2 W: h( v* p  x9 m
  876. LDA Time_S
    1 v/ O( `5 t" |$ Q2 Y- u9 [
  877. JSR HEX_To_Dec2 h  Q' s4 u0 `4 t) V7 v
  878. JSR Time_Digit6 j$ G2 L* t; h
  879. JSR PPU_End
    : y3 f2 L% z+ [# e1 M: y' s: \) ?
  880. Time_Show_End4 c2 i8 y  U* n# u+ Y
  881. RTS+ P& |( k! l5 D! o& Y" Z5 `6 U1 g
  882. " \" K6 C7 B# s7 y' W% }
  883. Time_Digit
    " a' |7 ]- F& I/ z$ B9 u/ U
  884. LDA DEC_T$ Z. k  Z0 I" h: ~3 K- I6 `
  885. ORA #$30( K4 O0 z9 Q: G9 i! X9 D  K
  886. STA PPU_Addr,X5 A4 O$ k9 R6 J0 z1 c
  887. INX
    - C) b' O: I- E! u9 D5 {' ~: ?5 l
  888. LDA DEC_L0 O6 ?9 J8 ^- u, J# r9 Q
  889. ORA #$30
    ; d$ q- ^$ ^/ i6 N
  890. STA PPU_Addr,X8 a+ {7 _, U! q
  891. INX
    2 D) h9 |4 ^1 C& y' v; X
  892. RTS
    " t" r3 @6 ~/ t" A& u7 ~

  893. 9 U( o$ b4 K0 x  V" l8 l
  894. ;==============================
    / O- q; j5 y" N: l$ e% K
  895. Time_Count;计时0 u% D, ]' k, Y4 C
  896. LDA Music_State# K: j# X, `% `2 S/ K, `5 X
  897. ORA Time_Wait_Cnt
    + Y2 q  S: E. d) `3 T; |+ S
  898. BNE Time_Count_End, s* O# E3 l5 G
  899. INC Time_Cnt
    2 R3 a: D9 U6 a& v' |3 Z
  900. LDA Time_Cnt
    . _/ c' g! e# ^4 F
  901. CMP #60
    - C. x9 E8 i+ f7 ?" V, R% J
  902. BCC Time_Count_End
    & w- s7 V/ N# k0 a: f
  903. LDA #00" w' N! w. U1 x- W/ D0 {  ~
  904. STA Time_Cnt3 K, f  y4 z4 p# w  z- ^
  905. INC Time_S
    - m; ^% Q1 g  Y& ^7 k

  906. 6 |1 f3 f# [2 r$ z
  907. Time_S_Cnt
    7 P7 U$ ]" A& p% j9 Q# e" s
  908. LDA Time_S3 l, I( v' q8 W* T* @5 H
  909. CMP #602 U  c3 M, X/ v1 E7 o
  910. BCC Time_Count_End0 L3 K3 P' R: Y0 _9 V! N. I/ m1 n
  911. LDA #00
    , H# u/ R( r) v
  912. STA Time_S
    / E, k! b. f/ s3 A6 _6 e
  913. INC Time_M
    3 r8 `7 O2 d# i% J( f* H
  914. / m7 Z7 M1 d4 k/ R$ g6 `) C+ o) X
  915. Time_M_Cnt* x8 o; n) I, G0 m
  916. LDA Time_M+ ?, t/ n9 v# d# O2 t
  917. CMP #60
    6 ?: F  N1 f. W& v. {) J9 u" T
  918. BCC Time_Count_End# T1 O. E9 ~9 y& s* _
  919. LDA #00
    & Q/ o' S! ^  g3 J
  920. STA Time_M- _+ q+ q* y6 X2 ]5 W
  921. INC Time_H
    ! b# F9 K4 w( g# {9 _( T- b

  922. : @+ b& O0 _. s' b
  923. Time_H_Cnt. j% C  M+ i' Q) y) N
  924. LDA Time_H. c7 _" u) ?( |
  925. CMP #24
    : |7 ]: g% F, O" Q$ {' c) E
  926. BCC Time_Count_End
    6 l" a! X. M9 ?' [2 l: V) `( Z
  927. LDA #00
    4 O! Y) f' }$ w* z3 n' x
  928. STA Time_H
    ; Z3 ]" e' @7 n& s0 ?0 |
  929. ) t: o5 j6 M/ u
  930. Time_Count_End
    ; [7 S* a- U* g) `2 l4 F) F5 b
  931. RTS4 a' k  C- z4 D5 o/ r

  932. 2 Z# s$ m' T- w& w
  933. ;==============================
    9 r4 S* p. g( V2 p
  934. Time_ReSet;播放时间重置4 ]& x9 P4 \9 j$ F" l5 i
  935. LDA #$00* z) T: d5 a! B
  936. STA Time_S
    9 g8 T) Y' J1 h1 U0 h) J$ g
  937. STA Time_M . S3 G- G( `' S- [
  938. STA Time_H  a% X- o2 U  h
  939. STA Time_Cnt" E* e1 B2 s4 V( P
  940. RTS
    & y+ z& A( K6 S' B5 Z
  941. & K+ l, \3 S+ T
  942. ;==============================1 B8 o. ^4 R0 s
  943. Music_Bar_ReSet;音乐条重置  a3 r0 x( B; c
  944. LDA #$00+ v1 y) J5 {3 U3 {
  945. LDX #$00" h/ y, F& t) \. V; \
  946. Music_Bar_ReSet_Set
    2 `2 R- X2 G* [( b: g
  947. STA Sound_Bar,X
    . K. r# L& ~7 u0 h8 V# U0 ]
  948. INX+ K, n3 X1 B6 s7 C4 o
  949. CPX #$10  L0 j: f% o* J* q3 c/ p5 p4 D
  950. BCC Music_Bar_ReSet_Set2 t7 v& _5 z" X4 m
  951. RTS1 f' @/ g3 F; ^3 @2 S

  952.   N, `2 m+ W8 R5 ~9 t
  953. ;==============================
    1 u+ x/ V( N" O& v' K: q; I
  954. PPU_Data;PPU数据写入: ^  a" y$ P: u* t: i2 H( g0 o
  955. STY Data_L' r8 \/ J2 W4 Q
  956. STX Data_H8 c. X7 z' ~5 M* G' L' b
  957. LDY #$FF3 \) t- Q- _0 D* g. u$ v
  958. LDX PPU_Cur0 j4 B8 x( ^3 u1 P6 O- W
  959. DEX8 R3 f: K! c6 d3 k; V
  960. PPU_Data_Beg& n; c  Y. q& E! V# ^! ]9 {
  961. INX
      R6 r" v1 E' e3 \: ]
  962. INY
    1 p; }- m8 |# y) V
  963. LDA [Data_L],Y
    + v5 i$ \: x3 Q  k+ V, t3 D
  964. STA PPU_Addr,X8 J& h5 }5 N& `. Y
  965. BNE PPU_Data_Beg
    3 M7 b  o# \( m( P" d
  966. STX PPU_Cur
    / T" h$ C/ D- g
  967. PPU_Data_End& i! @$ t" g. R& }) i
  968. RTS
    5 F1 N+ D% a9 P: {- n
  969. " U" R- a- _$ @' m
  970. ;==============================
    ; x% K; x5 Y- I2 `, a
  971. Music_Stata_Show;播放状态显示( f2 S+ ~- I. F' y7 z; F8 C
  972. LDA Music_State0 G, E' _4 U( ]' w0 e
  973. BEQ Music_Stata_Show_Play
    . |1 j1 R- V0 x# M7 _" m9 H
  974. Music_Stata_Show_Stop, N; ~: k6 e) `' J3 R, \' G; [
  975. LDY #LOW(Music_State_Stop)
    & L  {% f; T8 D$ @9 f! `, y& P
  976. LDX #HIGH(Music_State_Stop)
    2 f, T: B  ], g/ E  f. \. u
  977. JSR PPU_Data
    ' j; c/ m5 |, v
  978. RTS
    - n" V" t9 }0 ^1 l$ f# C" w
  979. Music_Stata_Show_Play. ^" v% u% ^. X, v
  980. LDY #LOW(Music_State_Play)* o, x' s9 k0 S: ~
  981. LDX #HIGH(Music_State_Play)
    9 E' y) x) x) u) y
  982. JSR PPU_Data2 n2 g+ @6 Z. B6 w9 v
  983. RTS
    * `  u' V' x. |7 h$ x  b

  984. * R+ K. B) L' Q( k9 u& K
  985. .IF SOUND_BAR_SHOW_ENABLE
    3 H8 m4 G3 ?( |# c1 K% z# ]1 X
  986. ;==============================
    0 f0 i- J, B" v$ {/ D% t
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ' i1 P& L2 v$ ^. v
  988. LDY #LOW(Sound_Bar_Text_Data)
    % `' H/ B. _6 s* T/ P- F
  989. LDX #HIGH(Sound_Bar_Text_Data)
    # e) M5 E( [& S3 L* E9 d
  990. JSR PPU_Data
    ; d# m6 n% r* a) ~
  991. RTS
    6 T4 O# w/ }0 L+ ?
  992. 4 l6 Z7 c  q% D2 ?
  993. .ENDIF8 O& d" t6 v0 e+ m6 D# C6 Q

  994. / g% w3 W. N6 O0 k
  995. ;==============================+ `% K" b8 T* h  ~6 [: P1 Q2 C& n: q
  996. Set_NameTable_Attributes;设置命名表属性
    ) c& x7 y0 ?- ^9 K: h! r
  997. LDA PPU_STATUS
    : Y: J) F) R: B# j) ]8 t9 e
  998. LDA #$23+ y4 E4 g& i9 D2 Y
  999. STA PPU_ADDRESS5 }. o; u: m/ C, r0 Y7 ]8 f4 N
  1000. LDA #$C06 R1 o9 v$ U  c7 c( \
  1001. STA PPU_ADDRESS
    ; p, x) {( i, ^
  1002. LDX #$00
    0 Q; b6 Y! S9 a8 j2 V
  1003. Set_NameTable_Attributes_Write" m" T1 ~3 c4 ]( z) p
  1004. LDA Palette_Attributes,X
    ! U0 D  Y9 F$ i# }
  1005. STA PPU_DATA$ g* X% y& M# C0 A% `
  1006. INX
    + ^# _, q0 S7 Q% ~% B  O
  1007. CPX #$40! r  K3 M9 C, y  X; c9 j3 x
  1008. BCC Set_NameTable_Attributes_Write
    - d. L: d7 U; E0 z6 E
  1009. RTS
      `4 N- \% e% w" S/ x

  1010. 3 c; Z1 p! `+ V. S* v" H9 N
  1011. ;==============================
    " v9 J6 O3 L( A% E5 V2 C
  1012. Set_Palette_Color;设置调色板数据
    4 M; F5 K; g, r! D  W' e. Y& m
  1013. LDA PPU_STATUS9 w7 A! G; S4 n, }* }( J' F
  1014. LDA #$3F
    ! m: q, J9 O# j% Y& z/ e7 F
  1015. STA PPU_ADDRESS
    + E4 Y$ m0 v8 d8 s4 a2 P
  1016. LDA #$00
    / {, b5 J8 r% F' |: A
  1017. STA PPU_ADDRESS
    : L. t1 \5 y3 B" W  c7 j
  1018. LDX #$007 b5 y! }6 v* F* c0 T, h; p
  1019. Set_Palette_Color_Write) A, w* O+ u3 p
  1020. LDA Palette_Data,X
    4 o% \* n% w9 e" [. _9 f; ]  v2 [
  1021. STA PPU_DATA. a8 X( r+ p4 E+ x: |
  1022. INX
    2 D8 p9 a& {" W3 h5 o6 |
  1023. CPX #$20
    ! h, [2 W# o0 w- h5 b
  1024. BCC Set_Palette_Color_Write! W( l- V8 d- s7 \. l
  1025. RTS
    # `3 R6 _- ^7 h8 i, z( o
  1026. . h( {  q/ @4 `4 f1 m1 ~) u
  1027. ;==============================
    ( S! ~7 U+ U7 X. u
  1028. Init_Palette_Addr;初始化调色板数据# S4 U% s% G6 b* }8 r
  1029. LDX #$00' F2 n, N% z# H% S3 {; g
  1030. Init_Palette_Addr_Write" A* m6 m6 V, E' d) a
  1031. LDA Palette_Data,X
    5 O* X$ Y% Y: O1 h0 l+ l
  1032. STA Palette_Addr,X
    , L8 |5 T" p+ M$ l  ~; {$ k* i
  1033. INX4 J" m4 D1 ^  t& p; F
  1034. CPX #$20; X+ {' k2 n' I0 t; S
  1035. BCC Init_Palette_Addr_Write6 C* g, u/ R& Q. b0 Z) X; e
  1036. RTS8 ]: W/ {# k- x" Q

  1037. . R' X0 x( R  a; c9 g  S
  1038. ;==============================; o/ q8 g0 {1 d+ \
  1039. Update_Palette_Color;更新调色板颜色
    # I0 L3 s; |" V: ~
  1040. LDA Show_Track_Name8 x% Y# o3 G0 z" @* a; C1 U9 {- }
  1041. BNE Update_Palette_Color_End. v- z8 X5 {0 r1 O: [
  1042. LDA Palette_Update_Flag
    $ j1 G4 i1 C* C" j7 U. f
  1043. BEQ Update_Palette_Color_End) d. {' Z+ E6 k+ ?6 Q
  1044. LDA #$3F, V2 z5 }5 r+ Y, `. S
  1045. STA PPU_ADDRESS% E6 y8 }, p1 s! ?# Z
  1046. LDA #$001 l+ G4 r# J0 f+ O7 Y
  1047. STA PPU_ADDRESS- X; U7 I1 f2 V$ Y' e( K
  1048. LDX #$00
    8 b0 V# u2 U  Q" w) k2 O6 ?0 S
  1049. Update_Palette_Color_Write' I4 }' ^8 D; {6 k
  1050. LDA Palette_Addr,X( p8 D8 v1 f. u6 a6 l
  1051. STA PPU_DATA
    ! d4 }7 s* [3 k5 }, ?
  1052. INX8 `, y" y! g5 r
  1053. CPX #$20
    % t, O8 Q9 e: N8 @. J5 g
  1054. BCC Update_Palette_Color_Write- h, A3 R" i$ Z& y3 S* D
  1055. LDA #$00! E. n9 ]! B' ^# d+ W. |3 E( n3 D
  1056. STA Palette_Update_Flag
    6 i# v2 q2 G& R% G1 m- K8 h" ^
  1057. Update_Palette_Color_End, `7 p8 c4 @/ U8 \6 @" g
  1058. RTS
    7 r2 v. l" G! V6 |7 o+ v# g

  1059. $ P% w3 v, X, v9 L
  1060. ;==============================# k& M, R: ~( C0 V: G0 t7 ~# {
  1061. Update_Palette_Data;更新调色板数据
    & e$ l5 o8 p. k" |3 h  w
  1062. LDA Show_Track_Name$ j5 O& T: D& w6 k* e
  1063. BNE Update_Palette_Data_End
    8 {2 V6 Z; ]+ z
  1064. LDA Music_State/ ~' t) L- K: `& p- z
  1065. BNE Update_Palette_Data_End
    * c0 w  c& I! Z/ N# E3 g6 O6 I
  1066. Update_Palette_Data_Check3 @3 T1 [* C0 Q) X3 Y2 q4 K$ m) e
  1067. LDA Palette_Wait_Cnt! T$ q" j3 h  h* g0 E2 V  B# e) r
  1068. BPL Update_Palette_Data_Check_Over& \* r  Q: Y6 r4 _- @) m
  1069. LDA #Palette_Update_Interval
    ' m% Q( @$ J) N  H
  1070. STA Palette_Wait_Cnt
    / G/ ?7 i: k8 |. w& K& ?
  1071. Update_Palette_Data_Check_Over
    / C$ G# p, ~. J/ z
  1072. DEC Palette_Wait_Cnt( a% u0 W( S8 S
  1073. BNE Update_Palette_Data_End
    : E" m0 e) G/ H" Q
  1074. INC Palette_Update_Flag
    ' t" M- z  ]; x
  1075. LDA #Palette_Update_Interval
    7 A" B2 k0 S; w) V8 ?6 W" |' T
  1076. STA Palette_Wait_Cnt2 I( b" b8 K( [; z, @
  1077. LDA Palette_Update_Addr
    4 ]9 |, i# t  P5 y9 D1 t. U
  1078. CMP #Palette_Update_Max
    " q! r. y) U% J( r$ |& H4 S% Q- E% \8 k
  1079. BNE Update_Palette_Data_Set
    ( |) p" w- ^8 G. y5 T1 S& _
  1080. LDA #Palette_Update_Min - 1, r  _3 h; U: p9 M5 f  [. S
  1081. STA Palette_Update_Addr4 d* I" l- K- ?8 M
  1082. Update_Palette_Data_Set
    5 e& {5 j! O9 R) c; Y6 j3 D8 D! D8 g
  1083. INC Palette_Update_Addr3 Q# Q% @. V6 K# |3 T
  1084. Update_Palette_Data_End4 }! X& c$ L- `
  1085. RTS
    0 b' X) L, d5 Y2 H/ g

  1086. ' n: y$ p  i  j  T
  1087. ;==============================( P" c2 n8 C+ L0 U6 ?. R
  1088. Show_Music_Text;显示静态文本0 C% [- q, V' m) X. e0 b/ z
  1089. LDX #$000 l6 Q! j* C; B' A* G: B$ _
  1090. Show_Music_Text_Set
    ( c, Q( Y8 q9 k* k9 S) f2 C( X
  1091. LDA Static_Text_Data,X5 Q5 x; h& k4 z! s7 J
  1092. STA Data_L/ X, K6 l: U" Y5 ?, _1 J
  1093. INX
      \8 g' P$ [0 x; y/ c
  1094. LDA Static_Text_Data,X, j7 q  z% n7 c1 [3 M- i
  1095. STA Data_H
    : X& s& ~' g6 P
  1096. INX
    * ?* p% K) |' m5 q+ k! d
  1097. LDY #$00
    . u! z  b# q* p$ `" Q+ L. B
  1098. LDA [Data_L],Y
    9 d# `  J) e* E3 n" n8 h
  1099. STA Data_Cnt
    1 i8 N, j/ |: v+ X" x- x. t. X3 z
  1100. DEX3 m  O3 p7 S! o
  1101. DEX7 ^! m" k, j4 \, Y$ F
  1102. LDA Static_Text_Pos,X
    : w3 u+ ^' E" R" M
  1103. STA PPU_ADDRESS
    " C; z$ q) \- l; R  M
  1104. INX
    / m% G  t0 U& X; g9 o: d% P/ {
  1105. LDA #$20
    6 c- u' K6 l6 [% W, Y# g9 G
  1106. SEC, U* l8 A$ w" _; U. ^
  1107. SBC Data_Cnt+ L+ p" @5 \6 _( i' @4 w7 `
  1108. LSR A
    ( T+ k. B$ b& H5 g$ X
  1109. STA Data_Buf, i1 |# H0 r( Q; P# R6 B+ g4 ^3 Q
  1110. LDA Static_Text_Pos,X. O5 w# k8 u" ]8 T, ?
  1111. AND #$E0( ?8 ?' i5 r( ?7 i0 O4 ~
  1112. CLC* B( ~. m% h7 C4 Y" b. D
  1113. ADC Data_Buf- i2 P4 _' T9 \2 U: m  |- P" d
  1114. STA PPU_ADDRESS
    $ _! P, ]# ?8 ]8 Q$ T7 r
  1115. INX
    2 Y8 x/ ]) p! y. D& T% n
  1116. Show_Music_Text_Set_Write+ o8 ]9 F$ h4 L
  1117. INY" c0 h$ U6 d% w  L5 J) n3 G6 j/ X
  1118. LDA [Data_L],Y
    . s0 b. V' t# b# E+ C# Q: X0 \
  1119. STA PPU_DATA
      h) E* B, @  T  e2 Y+ U- c
  1120. DEC Data_Cnt0 }- Y1 n( t/ x, t, X
  1121. BNE Show_Music_Text_Set_Write, X3 y& D4 G4 g5 t+ p3 D
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos1 g$ R% d& G  w, j
  1123. BCC Show_Music_Text_Set  @# ]- R: [2 v4 i! N: m
  1124. RTS7 t1 m8 Z. L) t( x
  1125. ' n7 E  H1 ^) s( z* g# i) D
  1126. ;==============================' V3 u' U& z7 e8 ~/ q3 \# a
  1127. .IF Track_Name_Pos;显示曲目信息  n$ D1 O7 m& [! V4 U
  1128. Show_Track_Info+ @+ g( y6 J" a1 a; U  U; G; q9 F
  1129. INC Show_Track_Name. {- d3 W4 M& r, @: n) P& ]
  1130. Show_Track_Info_Clear
    . Y6 x  M( q4 u0 r
  1131. LDX PPU_Cur
    2 X4 [; {/ j0 J
  1132. LDA #Mode_Clear
    % y, a: m' x3 U: P3 Q: M1 D
  1133. STA PPU_Addr,X+ U& R0 X3 d. B7 Z7 b" N9 M1 G
  1134. INX
    , M" m9 ]0 c3 o
  1135. 7 ^/ e  n7 Q- M* a
  1136. LDA Music_Last
    0 H# G+ j+ U# q) I" z
  1137. JSR Show_Get_Track_Name_Center_Pos
    : k- \1 j- {8 w
  1138. Show_Track_Info_Write_Cur
    + p' T9 }3 ?5 Z0 E9 l+ c3 Y$ S
  1139. LDA #Mode_CntLine
    6 s1 I7 u7 k5 r9 Z  r5 l  ~, s
  1140. STA PPU_Addr,X7 L4 o& u1 [: L; v$ n  c( G0 J# B
  1141. INX: M9 z' u2 d# ]6 J
  1142. ' P$ H( }" o" l1 h7 \# t
  1143. LDA Music_Cur0 e7 j$ k9 M2 X7 b6 n
  1144. JSR Show_Get_Track_Name_Center_Pos
    ! K4 x1 T: ?0 v0 X* L9 u5 F

  1145. - z. c" R8 ]2 z# q- a* {/ v
  1146. Show_Track_Info_Write_Cur_Data
    0 Z- K/ b5 r5 h0 I+ c! S
  1147. INY; }- I. j3 Z& d& \) M; G6 q+ F
  1148. LDA [Data_L],Y1 J5 c5 t" J- n
  1149. STA PPU_Addr,X
    1 q' W# Q/ Z0 [7 o& I
  1150. INX
    ' T- H5 t, `6 k% r4 E6 S* M5 z
  1151. DEC Data_Cnt9 S) I: y9 U/ _8 `# {0 F
  1152. BNE Show_Track_Info_Write_Cur_Data
    / T1 _% o7 Y8 e6 U# _
  1153. Show_Track_Info_End9 v5 m1 n- b5 M+ R8 l! x7 \5 ]
  1154. STX PPU_Cur' [& M7 [" G) Y
  1155. RTS
    & N% p: Z2 a- z6 e5 L' f
  1156. 0 B2 D4 X8 H9 c9 J* q3 Y* O
  1157. ;==============================
    # M! E/ C0 g3 a/ y  N3 L
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    " O6 H  `: y# M
  1159. ASL A* B: m; f+ e7 z
  1160. TAY
    . h$ D9 p5 v6 i2 i- b* k( y/ S1 V
  1161. LDA Track_Name_Addr,Y
    , y. ~$ f  c( a9 k9 t
  1162. STA Data_L6 B; J% m' Q1 v, I, K' x; n
  1163. INY
    9 T7 X2 g$ R( M) L6 }; q. G( x' J3 a
  1164. LDA Track_Name_Addr,Y
    # j* w7 L4 f6 o* G) V
  1165. STA Data_H
    # X( b+ }, s: T0 H
  1166. LDY #$00$ v- {9 ^& L3 P  E! y# f' Z8 B5 c
  1167. LDA [Data_L],Y- h: }* T! u4 U2 p9 ]6 s8 l
  1168. STA Data_Cnt6 I1 y  ^9 t5 u; l, C% M' ]
  1169. LDA #$20. O$ {2 \8 _- P& J& }# P. ~% H
  1170. SEC
    1 g" ^& [: ~9 ~" c2 r% w) Z) K1 y
  1171. SBC Data_Cnt+ z, M. k7 ^3 ^8 Y
  1172. LSR A
    + D# t" f' y) q' n" a) E
  1173. STA Data_Buf- @0 x& Y. ~# u2 i! m0 G
  1174. LDA #HIGH(Track_Name_Pos)# H, a5 p, D6 U) C  n# R
  1175. STA PPU_Addr,X* C5 x7 v4 L- l; k( [
  1176. INX
    ) E) m# ^! e: k5 E& I7 E
  1177. LDA #LOW(Track_Name_Pos)1 j& A, @1 W! r8 n# I6 h
  1178. AND #$E0
    ) p$ x% E# }+ d0 |
  1179. CLC
    3 e; [, V8 K3 @
  1180. ADC Data_Buf) y! A8 W7 z1 f1 b. c5 y  F3 B
  1181. STA PPU_Addr,X
    $ P6 L' Q& Q) w$ U6 f
  1182. INX* _0 h$ g6 V5 r# j  M* R% x
  1183. LDA Data_Cnt
    4 ]  J, Q' X8 ?, z( X' y
  1184. STA PPU_Addr,X8 r6 d8 a( x) E
  1185. INX
    . ^1 x& X5 M4 r& n- I
  1186. Show_Get_Pos_Center_End
    7 |. P2 l; q  W, G" y, p4 V' i  D
  1187. RTS! H9 ^, U- z9 P! c  J
  1188. .ENDIF
    0 r8 ~3 e7 U# H& ^1 a' }
  1189. 9 t, q9 ^* a$ R# a. k1 b
  1190. ;------------------------------
    * M0 s: c  D7 ~* L! E  k9 N7 k7 R
  1191. ;命名表数据
    . M" `% z3 \4 X  h
  1192. Palette_Attributes2 C  q. ^$ Y0 M, d
  1193. .IF SOUND_BAR_SHOW_ENABLE' K' U3 N0 R$ g+ b- z' B7 H9 a
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$007 f* ]+ H* P! G: m% |* V" _7 F6 X2 B
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    + P" x' x5 d; ?4 z) M" u7 m
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    + Y0 H8 R, \* x
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55+ ?, g1 a. s6 L8 R* x" R. S8 {
  1198. .ELSE
      `9 {! ?/ N- S
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00' W# X  ?5 X5 h
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    " g+ e6 h& e# J' d  H8 S$ l
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55& h3 R7 m. P; q5 X/ k, Z4 M  p
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55/ D0 R+ a0 c7 I+ c+ u- f
  1203. .ENDIF, [9 B+ _( D' n

  1204.   g$ B  D5 i8 c* {# `7 y
  1205. ;------------------------------" u) K7 A6 M( n1 a" z0 }4 I& n
  1206. ;调色板数据
    % l% ]. [6 _) ?3 [; v! C
  1207. Palette_Data. ^9 ?$ A3 l6 I! j2 @
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F+ ?2 U: O. w; f8 r- L; O9 I
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    # J& F' X- V: \) ]
  1210. 3 }" c: s! o$ @! [# H" a% P
  1211. ;------------------------------0 H# g& Q, \. W! w0 H( l8 k, @
  1212. Static_Text_Data
    ! x* H" K# P/ O" z2 }" R: j( }
  1213. .WORD Static_Text_Title_Data4 H6 K+ z" j" N% A( b) I2 K) c
  1214. .WORD Static_Text_Author_Data; `# N4 [7 J6 t% J3 _0 ?: y! G* w
  1215. .WORD Static_Text_Date_Data
    : k0 Y5 I" e' e7 b1 A
  1216. Static_Text_Data_End
    4 t: V7 ^+ b5 k; w& W
  1217. ) Z1 a, \. W0 _1 _
  1218. ;------------------------------
    3 {9 q- L: {0 y+ d% S
  1219. Static_Text_Pos# s. \- E# W4 L0 J+ G
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    * J9 f- t; ]2 F9 ^# h1 _; {
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)  s6 o& s+ ]' `* l* U, k4 @9 l
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    4 X( L7 K6 ]( F2 c& Y& S3 Y- W
  1223. Static_Text_Pos_End* n1 l$ f2 b+ v2 W; ^
  1224.   A3 _/ h6 Q( y. ]) R- x
  1225. ;------------------------------0 L7 u! d& f4 ~( r; a6 m0 ?
  1226. Music_State_Stop  d. t- \- b  |& ^
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ; h% V2 f3 O; E
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    % v; V) \5 E+ ?# Y
  1229. ELSE3 f1 ]7 b# u* n
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    ! ~  {- h- n, i0 d3 n9 ^4 `
  1231. .ENDIF; R8 B& T. a, _* k
  1232. Music_State_Play" }' r6 u  Y0 Y! |2 Y9 G( Y# M
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$009 E) B8 |4 A9 d

  1234. . Y( E+ F) M0 [5 ^! F: P
  1235. ;------------------------------! R, G% e2 x# g5 ^
  1236. Sound_Bar_Text_Data;声音类型文本
    + q3 q; W. g% [0 k7 n( w
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    8 T8 o: P2 z/ O- t9 h+ \
  1238. .DB "SQ1-",$FF
    * ?# }' I  g5 B0 N
  1239. .DB $FE,"SQ2-",$FF, T! ?7 \$ N) s, s2 T  ~, [
  1240. .DB $FE,"TRI-",$FF9 [6 `1 G0 L* s  `4 a! k) q
  1241. .DB $FE,"NOI-",$FF( J, h, m: ~) l8 ^8 q2 A
  1242. .DB $FE,"DMC-",$FF,$001 }2 `" u4 `: `, L. f
  1243. # o" y  a+ H! l. E) f
  1244. .IF Track_Name_Pos
    % Y. f- v: H$ A3 ?' g+ A6 ~7 {
  1245. ;------------------------------
    * B0 B8 u0 \$ h8 Z( \5 d% b
  1246. Track_Name_Addr;曲目名地址索引
    ! Q. s$ v$ Y) q5 ~, Y3 x
  1247. .WORD Trackr_01
    8 H4 D" g6 q$ {( L
  1248. .WORD Trackr_02
    7 M0 G2 ?6 h( U& q6 q! j
  1249. .WORD Trackr_03( M; s  ?  _& W' h+ B0 l
  1250. .WORD Trackr_04
    . l+ @. \, l5 F0 H4 Z, b7 ]
  1251. .WORD Trackr_05& w! ]$ I3 v+ v( y3 p  c
  1252. .WORD Trackr_06( H0 ^( b2 a: ?
  1253. .WORD Trackr_07/ v3 A) c; t- W4 L5 A) J
  1254. .WORD Trackr_08: f3 e  z, V, \9 i& F& M
  1255. .WORD Trackr_095 m7 }' ?! J$ L1 Y+ e, \- h
  1256. .WORD Trackr_10. l9 u( `: g4 v7 s7 {1 h) y" f5 a
  1257. .WORD Trackr_11
    & T0 Y# C8 z% s' f% l" s3 r6 f  R
  1258. .WORD Trackr_12
    ) w- z2 E9 O5 u! w, `+ {, P
  1259. .WORD Trackr_13: P% Q3 V+ T" e# G! K+ I" A
  1260. .WORD Trackr_14
    + A; }* a) B- F+ X. n
  1261. .WORD Trackr_150 f. S1 c5 Y. v, K7 C7 V- g
  1262. .WORD Trackr_16+ G; Y+ Q1 D3 X5 W1 y
  1263. .WORD Trackr_17: e/ D7 z* c; C- Q$ |! G
  1264. .WORD Trackr_18
    1 a5 V4 Z$ i/ |; A! i. g- ^* M
  1265. .WORD Trackr_19
    $ A: n1 ?: N/ h# e$ L0 a7 q" ^
  1266. .WORD Trackr_20% s9 L; z& J: j/ G3 z0 a
  1267. .WORD Trackr_21
    0 l6 Z# m2 ^3 Y
  1268. .WORD Trackr_22
    " I, b0 ?- B+ O9 R% O% |7 P" Z$ A" h
  1269. .WORD Trackr_233 Q8 p5 L7 ^. o+ M, m% v/ ]# b/ Z
  1270. .WORD Trackr_240 v- X: r* c) b# O2 S
  1271. .WORD Trackr_25
      X- l6 S+ a; r+ O
  1272. .WORD Trackr_26
    % n: C5 O9 p# ~/ a% d
  1273. .WORD Trackr_27; Q) E; n6 d4 f: f
  1274. .WORD Trackr_28
    - m9 r. x) F( b
  1275. .WORD Trackr_29
    + v) n7 n6 F) K. m* l2 T
  1276. .WORD Trackr_30
    ) B; L" v: X. ]
  1277. .WORD Trackr_31+ c2 T, b* R: `
  1278. .WORD Trackr_320 t: f2 ?+ n! E& v
  1279. .WORD Trackr_33/ k- W, n7 m9 _, m. P, H
  1280. .WORD Trackr_34$ d$ X" Q  V, ^# a$ ^6 x
  1281. .WORD Trackr_358 n4 s2 n9 @" C& m) K
  1282. .WORD Trackr_36
    4 m3 ^8 n- p) w1 Y8 e9 ?. G
  1283. .WORD Trackr_37
    + f% y  n, Z: i. r6 h' }* D
  1284. .WORD Trackr_38+ I, a2 t- H& e) ]7 Z  M7 d
  1285. .WORD Trackr_39
    " z9 K/ u# j0 K" k( ^3 K
  1286. - U/ t# S  O* r% L" N" S2 x; C
  1287. ;------------------------------( O) ?1 f  N7 S4 m- E, i* s
  1288. Trackr_Name_Data/ I: A& B& ]( T5 ~
  1289. Trackr_01 .DB $05,"BGM 1"3 x1 N: f$ C, U9 `9 ^
  1290. Trackr_02 .DB $05,"BGM 2"
    7 w. C8 E$ T: F3 ]3 O* n
  1291. Trackr_03 .DB $05,"BGM 3"
    7 o, D, Q$ O, c0 K, E! a" _; G
  1292. Trackr_04 .DB $05,"BGM 4"
    2 w- h6 x  E. i# O
  1293. Trackr_05 .DB $05,"BGM 5"
    & c* P; c5 S2 k% B9 @+ s' }3 O
  1294. Trackr_06 .DB $05,"BGM 6"
    , X. o$ x, L* f4 z% L/ L
  1295. Trackr_07 .DB $05,"BGM 7"
    7 G/ ?8 M4 ?% F3 m3 f
  1296. Trackr_08 .DB $05,"GREAT"" t7 \4 ?3 F' G0 l! g0 p) s8 U
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ( ~6 R2 i: O3 \4 L7 l
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    2 ^' A1 j- t8 M3 t: I
  1299. Trackr_11 .DB $07,"P CLEAR"
    " L; Z- J5 j$ w9 h1 P0 V4 q# [- ^
  1300. Trackr_12 .DB $07,"A CLEAR": o- M- z/ j: I- h2 u% B
  1301. Trackr_13 .DB $04,"OVER"
    ; q1 K: O  d& s
  1302. Trackr_14 .DB $06,"ENDING"7 D+ P  U  \. q3 O/ L6 N5 Y
  1303. Trackr_15 .DB $04,"SUTA"
    . t1 J( i* H5 l: @
  1304. Trackr_16 .DB $07,"THUNDER"7 k3 L$ r2 E6 s2 O0 N3 {
  1305. Trackr_17 .DB $04,"SHOT"
    7 B  e7 \! }6 Z. e. Y) e
  1306. Trackr_18 .DB $05,"LASER"
    / M. V$ V' I0 c
  1307. Trackr_19 .DB $06,"SPREAD"
    9 z' m& e8 t: ?" F
  1308. Trackr_20 .DB $04,"FIRE"8 x9 J7 W9 W7 p; a# ?
  1309. Trackr_21 .DB $06,"B SHOT"
    ; M- ~  y. R9 G7 ?% L, @6 }' y
  1310. Trackr_22 .DB $08,"T DAMEGE"% U" T: v7 }/ f: r
  1311. Trackr_23 .DB $07,"HARETSU": b( f7 A" ?. h8 V6 A
  1312. Trackr_24 .DB $05,"T OUT"1 D3 _- t8 L! H4 f( S5 M, N* i
  1313. Trackr_25 .DB $05,"Z OUT"
    & A. T* w- D* ]7 x! E) Q3 y- k$ f& q
  1314. Trackr_26 .DB $05,"A OUT"
    & K3 W5 l5 J% y" R$ |6 f
  1315. Trackr_27 .DB $04,"ROLL"7 R4 @9 d" u# M
  1316. Trackr_28 .DB $06,"APPEAR"1 E- U  E; B; `( w8 P9 E
  1317. Trackr_29 .DB $05,"POWER"  S+ m3 |- V) K# i4 T
  1318. Trackr_30 .DB $07,"BOKK BK"& d& A" R1 u+ F+ w  {5 q
  1319. Trackr_31 .DB $08,"BAKUHA 1"5 X, i$ K8 ~: Q# O
  1320. Trackr_32 .DB $08,"BAKUHA 2"; p5 e2 e- g  [, m% s! L: r: K
  1321. Trackr_33 .DB $05,"ARUKU"
    : z( n4 o* @7 T
  1322. Trackr_34 .DB $06,"JIWARE"
    " ]# }2 ]- z. t; s5 v7 a. }& H
  1323. Trackr_35 .DB $05,"SILEN"* L3 ^2 p4 h  s# m2 G; V
  1324. Trackr_36 .DB $05,"P 1UP"9 V9 o2 A, Y) I2 E
  1325. Trackr_37 .DB $05,"P OUT"
    & ~, P! u, x- N9 j& L! m) ^
  1326. Trackr_38 .DB $05,"B OUT"
    # \1 @  H4 p. Y* G' n5 M
  1327. Trackr_39 .DB $05,"PAUSE"
    : ?* z: S8 x* e4 U/ p/ R
  1328. * g- ?2 g" W3 I7 }, g
  1329. .ENDIF! c3 X/ ^- j! w+ z: J: |! M" ]
  1330. % Q- K0 X) d, e' ^  P3 J6 R
  1331. ;------------------------------
    * U! c$ D- R' ?  P, E! a
  1332. Static_Text_Title_Data;静态文本数据
    / |8 k# L0 v4 l9 \
  1333. .DB 12  k; V. P/ f& ^$ _5 e: v; t
  1334. .DB "SUPER CONTRA"6 n7 q& R& d; l1 M2 R
  1335. Static_Text_Author_Data5 d% v  Z7 K: u( j$ |. j
  1336. .DB 23& \2 R, Q" j: z7 H6 q! l4 q
  1337. .DB "EXTRACT BY FLAMECYCLONE"5 ~: L- g& Y) x& X: e  ]
  1338. Static_Text_Date_Data# Q# S/ \& n( j+ i2 [
  1339. .DB 10' W3 V  T: ^/ H9 A% l6 x7 \# h
  1340. .DB "2023.07.11"
    7 h2 r9 E; y& O! O0 {# x& B& D& n

  1341. # o4 @& g6 `9 m, f
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    ! h/ Q% ?1 O( w/ D- P6 d
  1343. .ORG RESET_ADDR: W( o; h. ^6 K

  1344. ; m7 `, B( T3 D1 L# M3 V* M5 h) q

  1345. , ~2 C- Z& {8 P
  1346. ;==================================================
    & `7 v. M# G1 |4 J5 ?- V% U, K
  1347. ;切到主程序bank3 I9 N9 i  w' \: I) _. d' W
  1348. SwitchMainBank* i" l' ]; J" ?6 p& k
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK# n* b! V2 [, b0 M: V/ m
  1350. JSR SwitchBank8000" S3 i; _5 Y: S
  1351. RTS
    7 ]' R' j* [8 k3 A+ L

  1352. 8 G8 _& Z! R  ~" I! K* Q6 L' o4 S. G
  1353. ;==================================================
    ) i' Q" v1 B2 {  |2 J: z
  1354. SwitchBank8000;切换bank到8000-9FFF" n1 h5 d! ?* y, `+ W/ h! U' Y
  1355. PHA# S) u  ~  n4 u- n
  1356. LDA #$062 ^/ ~, J$ w9 h. f/ V- d
  1357. STA MMC3_BANK_CTRL* S  [; s# g2 F5 `9 u
  1358. PLA
    ; i  t, i- c4 Z$ [6 |
  1359. STA MMC3_BANK_DATA
    , b* M- l& ^* ?7 r
  1360. RTS
    , J3 W' I: P( f# ^: I* t0 Y

  1361. 1 ~% c3 n, W7 Z8 i: z6 O2 R' \
  1362. ;==================================================
    ( Y# v$ V  R, w
  1363. SwitchBankA000;切换bank到A000-BFFF
    7 F0 y  j3 k  U/ ]/ `: u% c5 ~/ |
  1364. PHA
    ! B) y: [9 w) o4 t5 N- k
  1365. LDA #$07+ d5 u- D) p9 L0 T7 C  h
  1366. STA MMC3_BANK_CTRL7 I7 w3 q6 S; t  q
  1367. PLA
    / d5 I; ?& t3 `# O) z% L" [
  1368. STA MMC3_BANK_DATA- a$ ^, l! p9 Y. b; j4 H4 @* g
  1369. RTS
    : v9 e0 K9 l/ Q1 u% [) w% y. `
  1370. ( X/ O7 g. o. E# O
  1371. ;==================================================: C$ \3 @5 ?: }) g. v& Z' f6 `
  1372. Sund_Bank_Init;音乐bamk初始化
    ' d# M- h9 g1 y
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ! \( U; O6 Q: H# n+ r
  1374. STA Music_Bank_8000
    % [7 P& Y; K: \8 i& A6 r
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    : }! h) B( t3 a; i6 S! v
  1376. STA Music_Bank_A0007 U  A- P4 V2 `1 o4 y& s2 U% a# `
  1377. RTS% f3 E4 K. D  `2 w1 e2 C

  1378. ! R$ g7 M+ q. ?
  1379. ;==================================================$ e: _5 ^5 b- {; y6 O2 T
  1380. Sund_Bank_Set;切换音乐bank% k$ Q4 P0 t1 D! T6 [' J
  1381. LDA Music_Bank_8000
    3 a8 r; D0 v* E  C/ G  @4 \# T
  1382. JSR SwitchBank8000. m( _% D0 L: n2 f  u
  1383. LDA Music_Bank_A0003 y2 S, \$ A9 I, v
  1384. JSR SwitchBankA000
    & L% Q/ i. w# M; P" h0 e
  1385. RTS4 u. z6 `0 D" U% p! X& F! a
  1386. - p% e' N' z/ m9 r8 {0 }2 e6 k
  1387. ;==================================================
    6 z/ V5 L7 Q! t# {& n
  1388. Sound_Init;音乐初始化
    ; e- ^# J6 l; M1 j  w
  1389. PHA
    3 f: D, i( J6 I; ]8 |( T3 n) o* s
  1390. JSR Sund_Bank_Set; |! F6 A7 T. ]! t
  1391. PLA! c$ u* r# j- u; H
  1392. JSR Music_Init_Addr
    / ~# R" c( q4 q# b, G- p7 N$ B, O
  1393. JSR SwitchMainBank; h  w: v( W9 L, m  @: w
  1394. 6 z5 d8 q1 h: g, x# z5 S. F4 L
  1395. JSR Music_Bar_ReSet) f7 Q+ \+ A$ T  v% J
  1396. JSR Time_ReSet  C/ F) ?9 c. v
  1397. LDA #$00" _! q2 n+ Q" H4 {3 o0 O
  1398. STA Music_State0 m% k5 X, W2 X' h! j  `
  1399. JSR Music_Stata_Show" o: n; W+ J  f7 N
  1400. .IF Track_Name_Pos
    # Y& m# y  M$ Q: z; L2 \, |
  1401. JSR Show_Track_Info5 T' p( i. t' O$ H. b8 l
  1402. .ENDIF
    % }5 I, u- K1 p7 z

  1403. 1 S- k  D+ b2 h( z' n, C
  1404. RTS
    1 q$ p% g& ]2 G0 n- c) ^7 a
  1405. 9 m$ R% J. G$ a1 L+ X
  1406. ;==================================================* K6 Y, n4 ^( l* ~9 I# O7 O0 J7 X
  1407. Sound_Play;音乐播放' o1 o  ?  B6 Q5 x% J9 ~
  1408. PHA
    + L( w7 D# `# n" ?7 }1 g
  1409. JSR Sund_Bank_Set
    3 |/ S% c% I! f) P' c
  1410. PLA
    ) J( |8 r: ]/ Y2 Q1 @
  1411. LDA Music_State
    $ r  \; o& H; s  ~
  1412. BNE Sound_Play_End: s! U; a$ N  c1 S) H+ h
  1413. JSR Music_Play_Addr
    / Q; q2 t6 l$ w
  1414. Sound_Play_End. V+ K7 h  m/ L  L
  1415. JSR SwitchMainBank* g2 V9 {9 D, [' ~) e
  1416. RTS, u9 t3 Q7 u# G4 p

  1417. % f, }+ l& G/ `0 `
  1418. ;==================================================% n- A4 O( v  }% m, p" d
  1419. .IF Music_Reset_Addr
    7 G0 @* c2 E9 A% g# Q6 }2 o. K
  1420. Sound_Reset;音乐重设(如果有的话)
    - t, p' U$ `' c( f
  1421. JSR Sund_Bank_Set9 K$ y, Q! Y5 N  o* Q- z, e
  1422. JSR Music_Reset_Addr# N3 J; Y" r, A9 j+ Y! Y
  1423. JSR SwitchMainBank) v/ p' s; n1 V# d+ f$ P  ?% \. N) F
  1424. RTS
    4 W. z$ c' I5 F
  1425. .ENDIF
    $ {5 B, u- J, S- Q7 h4 I) i
  1426. 5 ?/ S- g" s6 c8 J4 c2 C
  1427. ;==================================================
    9 r' }) |. W, O$ S
  1428. MainLoop;死循环, L  s) ?: L4 i; {: t
  1429. JMP MainLoop0 ~# g1 k( c$ \' H6 S; L3 t

  1430. 6 L5 |$ v; w3 _: Y1 z. e6 A( U/ F7 v
  1431. ;==================================================1 {6 I6 p1 ^3 _  T5 ]4 N5 z
  1432. NmiProgram;Nmi中断处理
    / r' F7 F+ N9 F& V
  1433. PHA0 R6 s3 G2 ?/ _* r4 J
  1434. TXA
    , I' i! v1 w) P# B8 N
  1435. PHA2 n8 J$ s1 h1 n9 {- y- e
  1436. TYA
    & n- C  j; M: s6 C
  1437. PHA2 v# Y. W! ?; t6 k0 Z
  1438. ( ?$ Z9 p* t5 }  Z  a. O* `
  1439. LDA PPU_STATUS  \9 v8 O* `7 R' P
  1440. LDA #$00
    ; G3 M0 q) [1 h: k; i
  1441. STA PPU_CTRL
      M% q. \6 D- o3 {
  1442. 9 ?. Q; |: t9 f: \5 L" J. }9 z5 t" z
  1443. ;切换主程序bank
    % \' C+ ?: o$ Q- z
  1444. JSR SwitchMainBank# q$ O# J# q+ M6 I; q& A! p1 h
  1445. ! ^# P  H/ ^7 b1 I' ^
  1446. ;NMI处理4 f- h+ j! \4 P( i+ P! E
  1447. JSR NmiProgramProcess7 l( I  U5 T3 q1 q

  1448. * _. ]3 L8 _( Y/ ]( V  R
  1449. Nmi_Proc_End
    1 X% }! [. F& m! F+ p' q9 [& Y
  1450. PLA5 C# P3 e* v! ?) ~& o- X
  1451. TAY$ q7 O8 G* V# P
  1452. PLA
    # V: j6 _# t0 U: Y& [1 V1 R; p
  1453. TAX5 b/ \1 E/ t: h2 u) @4 V. z9 Q8 t
  1454. PLA
    $ l9 C6 a8 F/ [+ n
  1455. + @+ K8 f$ ]( f5 f3 T4 q
  1456. RTI
    # Y$ B9 P3 s) m7 s) K; i, A7 n
  1457. 8 o# Z5 E7 K( n! i) N. p
  1458. ;==================================================
    ' r. o9 l9 J3 F$ m7 ^7 e
  1459. ResetProgram;重置中断处理
    : S  I! ~; g% Z! c. M! }5 w
  1460. SEI
    $ F3 i6 Q3 y9 c" r. Y
  1461. CLD6 y1 i) d# E9 S: T9 r$ R% j8 W' F6 B: N
  1462. LDA #$00
    ; b$ f0 _* K1 L3 n9 c
  1463. STA PPU_CTRL( s# L! z; {2 U" ]$ K6 k6 D
  1464. STA PPU_MASK
    3 j4 K. I7 ^$ P/ a0 V

  1465. 3 B) R! x7 }0 ?) u0 ^
  1466. JSR SwitchMainBank
    * l9 [8 y0 a" U) m/ i
  1467. JMP ProgramBegin
    3 a2 s4 L. K0 M1 w* k+ @
  1468. : B  o1 a! m1 T
  1469. ;==================================================
    4 p9 Z4 U% Z$ }' m' r
  1470. IrqProgram;Irq中断处理. N& k, c6 O, c- |
  1471. RTI
    2 N/ s% F) N- ~6 {

  1472. 3 ^. W+ `: v3 C1 O0 o! V- a
  1473. .IF SOUND_BAR_SHOW_ENABLE( _" _* K6 d; Q
  1474. .ORG $FF80; o) g4 r1 u0 n6 r( t
  1475. STA $4000,X0 U  Y1 C$ l: }* O
  1476. STA Sound_Bar + $00,X
    7 X: b/ D/ i" p  F+ B/ F* T
  1477. RTS
    5 v8 x) u& X1 r+ r* V

  1478. 6 J  O  a% c3 h' k" p' h  [+ Z7 m
  1479. .ORG $FF883 d) @# H! |4 T  r9 o2 J
  1480. STA $4000,Y4 [2 e" q  x; j) Q% H3 ]
  1481. STA Sound_Bar + $00,Y6 H4 i. @, j, C& |0 F6 Y7 V8 T$ A
  1482. RTS
    + H% `0 E) ~$ f/ G: H1 M4 j

  1483. % Z* `, ?9 L5 t/ H( ]. I/ O5 O. c
  1484. .ORG $FF90* H" s3 D* ?8 J
  1485. STA $4004,X3 X2 E6 a: O. R; j
  1486. STA Sound_Bar + $04,X
    4 C! t& f2 C) k  Y8 _
  1487. RTS
    7 ~" X8 D; G, B' O: ?
  1488. , K$ ]) F2 ?4 N4 O3 }
  1489. .ORG $FF98
    4 o+ c# i& c8 {3 a
  1490. STA $4004,Y
    0 i: C! e5 B0 E
  1491. STA Sound_Bar + $04,Y
    2 k; }6 H! V* g7 z
  1492. RTS! h7 E  C! p! _( K: l9 i' k, m, U
  1493. 9 L" A) O$ g& S2 w9 Z: V: [/ \
  1494. .ORG $FFA00 z$ z3 S4 B* I6 ~& m  |2 _
  1495. STA $4008,X2 Q2 G8 k! R2 G) `9 I$ f8 V, `
  1496. STA Sound_Bar + $08,X
    + b+ t) B7 o+ D% d* w. \5 X
  1497. RTS5 q- G) C& H; n3 h7 I

  1498. 3 \) D' r. w8 M) m7 G
  1499. .ORG $FFA8
    " @: |8 v2 v1 D2 x% Y
  1500. STA $4008,Y; Z2 a* @7 _% Q: }) \1 ~6 C. Y, G8 g
  1501. STA Sound_Bar + $08,Y" R2 v  I3 T/ C/ ~4 a9 y* ]
  1502. RTS" l/ V- [/ ?! a1 J
  1503. 3 x+ X: j/ n- |& T7 ?
  1504. .ORG $FFB05 E" G3 `% @0 p$ x3 M& k! m% _
  1505. STA $400C,X% j$ @, p$ i% L' C
  1506. STA Sound_Bar + $0C,X: J2 u6 z) n0 J3 S5 ]1 K, ^; D( a
  1507. RTS2 L2 y0 |/ b& m; @1 _; [% h$ @" g
  1508. 2 q% L6 @  {& P9 [' @
  1509. .ORG $FFB8
    8 {9 R+ \/ G# y, P& Z
  1510. STA $400C,Y$ H. U6 H0 Z% a8 Q7 B2 J2 S& C! z
  1511. STA Sound_Bar + $0C,Y; f" U" R1 `) S# A* q4 i. y
  1512. RTS
    # I8 }6 i$ w% }4 {  r; ~$ t

  1513. , S( j& g8 ?! |% {% o1 \5 L& Y
  1514. .ORG $FFC0' l" ~1 J2 O" \- W" p
  1515. STA $4000
    ) a/ p4 ^* P. u4 S+ U) G
  1516. STA Sound_Bar + $001 |; Z; |: N: X. Z3 Q; s% E. F
  1517. RTS
    5 a$ G* P2 m* y6 Q
  1518. % B! w( g8 F# m
  1519. .ORG $FFC8) b% [8 Y# n. w$ C+ p9 W5 c0 w
  1520. STA $4004' u$ W! ]' U  L8 T9 g" u
  1521. STA Sound_Bar + $04
    " B6 W4 v6 f2 n) Z
  1522. RTS
    , p/ N5 }! S+ K) ~! c. G& G( b/ V4 C
  1523. " C' v$ u9 u# q8 H/ r: V6 y5 s. u
  1524. .ORG $FFD0' ]* X2 o: a4 y" M5 v' e
  1525. STA $4008* W/ S* t6 J1 T9 P- {& m: P8 W' q' G; }
  1526. STA Sound_Bar + $08+ c9 G, M! I" z' ^; @+ i* H" V4 h
  1527. RTS+ c6 k9 A% l& J5 @' W" V. f) b

  1528. & i& ?) k- E: ~, e# m. ?
  1529. .ORG $FFD8+ h: ]- H+ Z6 J, F7 H; W2 k; }( V
  1530. STA $400C
    6 U/ `' R$ z3 x; `
  1531. STA Sound_Bar + $0C; `% g4 X1 E) l( H, h- E
  1532. RTS2 o* U$ W) E" k7 D: Q1 E' l8 G) a1 S* Q

  1533. ( q- y& i5 w" X, v9 |) L
  1534. .ENDIF
    ! e4 }# Z4 ]" e9 x- H
  1535. ) t2 b3 V# S; ^1 B# g4 `) \
  1536. .ORG $FFFA
      p$ r6 |$ f& t+ r# G0 P
  1537. .WORD NmiProgram$ K/ B0 h( k8 p# N
  1538. .WORD ResetProgram; g/ h+ I  b6 s& T5 a1 g# i+ C8 Y
  1539. .WORD IrqProgram
复制代码

0 m* S" v0 K( g6 D) Z7 }8 f+ b2 H( q8 p
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1324 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3320 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 10:26 , Processed in 1.108398 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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