EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
4 v4 w% `: B4 v4 N' c  z) z) |" s8 G5 z" K2 k6 V2 X
1.魂斗罗2 k6 ]( ?. z1 s6 ?/ s% j7 G
2.超级魂斗罗
3 Y% z2 d; _: o5 I5 h- l0 W  r5 t8 j3.赤影战士# x9 `8 h- c+ b
4.忍者龙剑传2" N* h: ~" O, E" {% {

6 R9 w4 [( B* x+ ?, A! R5 @( n
/ K) a& R$ W4 e  G6 U8 r
; m, y) n. A) W; O* C/ ^( L9 T- V: T: A- W! E( U( j
源码:
- ], |1 m  h; q7 _
  1. ;[FC音乐][播放器模板]) \+ |8 H3 X$ O
  2. ;FlameCyclone 20230710* Z/ k" z$ `7 m

  3. ! F' Y/ i9 w+ r" d8 e4 Y4 ^3 ?
  4. ;文件头& u; z, f6 k; G2 _: D
  5. ;======================================================================
    - O( ]6 [* O0 Y2 N# U  t
  6. .INESPRG 4                                              ;16KB PRG 数量" R* K: p+ E  m: m+ ?
  7. .INESCHR 0                                               ;8KB CHR 数量# `0 T3 ^4 O+ e- m
  8. .INESMAP 4                                                   ;mapper 4# @! h& }& k# {# b5 n: Z$ A
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    + j5 H, ~) t+ y6 [" U
  10. / L3 k& H) {! \& N
  11. ;==================================================5 h7 h+ I9 s+ _
  12. SOUND_BAR_SHOW_ENABLE       = 1
    " c' `1 i% {4 w& @
  13. ;==================================================5 Z9 j0 m0 p! ~! [! d; ~7 ]% W( l
  14. BANK_DATA_MASK              = $07
    / b1 p( {7 \9 E) V9 E- j/ r# m
  15. ;==================================================
    # c& E2 {- U& c( H
  16. SOUND_DATA_BANK_0           = $001 y) Z* N4 R: e. x" T# f8 K
  17. SOUND_DATA_BANK_1           = $01
    . f4 f1 Q7 W6 d
  18. SOUND_DATA_BANK_2           = $02
    + ^1 z+ L% a2 V; r3 ?
  19. SOUND_DATA_BANK_C000        = $06
    ) u/ `1 z* c& m

  20. 4 v7 c$ }1 u! t5 a8 G* V8 ~! Y/ e, b
  21. ;-------------------------------------------------/ y5 ]' h4 c9 l3 J
  22. CHR_DATA_BANK               = $04
    " H7 [0 f. S, w( d, Q  X% X# X5 e) }& k
  23. CHR_DATA_ADDR               = $A000" [6 C( Y5 O' D  _" U4 B" w( Z% u
  24. ;-------------------------------------------------* R( U2 \1 [( l8 U4 N: X
  25. PROGRAM_BANK                = $05
    * N# `& e8 \# B% a4 Y
  26. PROGRAM_ADDR                = $8000
    - {; W  H$ J: ?4 S& c& c8 H& \
  27. ;-------------------------------------------------
    3 Y( M$ m2 W1 a4 j( S$ ^
  28. RESET_BANK                  = $07, L6 E  ~/ l& \, s& ~
  29. RESET_ADDR                  = $FE003 j8 P  F0 J, A( @1 m( }
  30. ;==================================================5 p+ G. R( ^' b* M: W+ o  H+ N8 B
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    6 G, Z5 c6 ?! \% Z8 C  h
  32. Music_Play_Addr             = $813C ;音乐播放地址( }0 |1 [" ]/ v! i0 p% o* `" d, {/ T  l3 [
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址  G% G$ F% ]! h$ c
  34. ;==================================================
      A! d, Y9 s( {  W: d. C" P4 ]) e0 ?
  35. Music_Song_Total            = 039  ;全部曲目总数# K; ?& w" ]4 [* T* c
  36. Music_Start_Song            = 007  ;初始播放曲目2 i2 k3 l5 I3 V: g4 G+ {
  37. ;==================================================
    . o" d3 c: S% m& L
  38. ; M9 }/ A& A* w$ o, D  ^7 d) [
  39. ;==================================================) p5 n: O6 j7 `/ _, |2 B
  40. Title_Text_Pos      = $210D ;标题文本位置
    , B" t; r/ ~4 o
  41. Author_Info_Pos     = $2284 ;作者文本位置; g$ E2 `, h# s% o( w9 l) o2 e) f
  42. Date_Info_Pos       = $22CB ;日期文本位置
    - ^  p- [- r3 d2 L3 A' v
  43. ;------------------------------
    ' G% c7 b3 W5 `
  44. ;------------------------------
    $ B1 `# ]7 w/ f5 F
  45. .IF SOUND_BAR_SHOW_ENABLE
    4 f) J8 q; ?- ~$ j- c  K& P
  46. Play_Index_Pos      = $21B3 ;当前曲目位置' @5 u, \3 Z' W' D7 P
  47. Play_Time_Pos       = $21F3 ;播放时间位置0 g, \/ D% h1 i9 D# {2 Y- O
  48. Play_State_Pos      = $2233 ;播放状态位置
    0 a* n+ S  ~, t
  49. .ELSE$ d! m2 ?, T/ K

  50. 6 d) }* M. R, b+ X" y* `
  51. .IF Music_Song_Total > 99
    8 _& c$ p8 ~' [/ c: J
  52. Play_Index_Pos      = $21AC ;当前曲目位置6 V, m' `# C; G+ b6 [' Q' W
  53. .ELSE# ^2 n0 I8 J; a: W7 h0 K

  54. * `: s6 l% T8 i4 ]4 y7 G! p) W
  55. .IF Music_Song_Total > 9
    / |4 H. e& o; r6 G& y; D" L4 b* L
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    , \4 w  F+ m8 P! |: G* O
  57. .ELSE
    " h2 M6 U3 R9 p! c8 C  f
  58. Play_Index_Pos      = $21AE ;当前曲目位置5 h6 h1 z( d1 J) Y1 g; f
  59. .ENDIF0 l3 [. H& B0 Z; g& ], }3 ]
  60. 5 b, o. q$ R1 p9 p6 S
  61. .ENDIF
    6 a$ `: w3 p) l3 ?+ J

  62. 9 O5 v: D% D5 {" B: O, p% F

  63. 0 r7 W( {9 o* h
  64. Play_Time_Pos       = $21EC ;播放时间位置
      n9 p( h( z$ A# t4 @
  65. Play_State_Pos      = $222C ;播放状态位置
    & `) U- @5 B0 V( F& k: O7 b" c) ?
  66. .ENDIF$ W9 \3 h& \4 l4 E. ?" z
  67. ;------------------------------# b& E  Z& _! p! @1 A- N4 }
  68. Track_Name_Pos      = $216B ;曲目文本位置
    , v0 d' y. E2 V
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    + f% X6 o  f  q& s
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置  P# Q  w6 c% k5 V2 h0 L
  71. ;==================================================
    8 G! M0 Q& V- G. l# G0 s
  72. Scroll_X = $00
    ' m* v7 a# N% w$ l# ]
  73. Scroll_Y = $06$ `4 g% \' }' C  u
  74. ;==================================================# B: ^" `  g; F7 ~
  75. RAM_Cln_1       = $01009 x/ s0 M# Q0 J# N; s: y
  76. RAM_Cln_1_Size  = $80
    : p# k* X$ F/ q: u2 [; ^7 m
  77. RAM_Cln_2       = $00E0( \( Q6 K. A! o) I' `6 ?5 m0 o
  78. RAM_Cln_2_Size  = $20
    # g* b& T2 S) q1 f
  79. RAM_Cln_3       = $00E0# P% N) v% u, ~
  80. RAM_Cln_3_Size  = $206 s+ Z+ |% K+ t8 [# }) t2 t
  81. ; [6 f& ?+ ~+ [; n/ A4 W2 @
  82. ;==================================================
    - z9 l! d- [4 m- F" `+ `! G8 n
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器, s% [; m/ W. z1 f9 C
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器. [$ J2 ^/ X- U1 [/ U8 J
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ' D; z! {0 T4 |: C. l
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加19 n- a( G+ g. L
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    ! c8 u1 j: q3 [2 T
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 5 Y5 }5 J5 f3 ]% A
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加" _4 l& E. g4 E4 l* i- s
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
      f3 Q2 s0 @; a% f& A
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存4 l3 V: I$ E/ F. y: @" @3 T1 q  J
  92. APU_STATUS              =   $4015   ;声音通道切换
    , u' s' `( Q, O3 [) e
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ( E& ^) O7 {' ]' ?: u- B/ v
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    1 y* i% U9 G- y, K2 [) k
  95. ;==================================================% u9 M/ e1 Z' I: k
  96. MMC3_BANK_CTRL          =   $8000
    - e' p' ]; K; K
  97. MMC3_BANK_DATA          =   $8001' N* B- O- X/ X, @, `  ~' U3 q0 B
  98. MMC3_MIRRORING          =   $A000) y8 d* n1 T; t
  99. MMC3_PRG_RAM_PROTECT    =   $A0012 n2 z$ g( ?8 [' p# ?
  100. MMC3_IRQ_LATCH          =   $C000+ Z- c; j$ q+ ]* a% k
  101. MMC3_IRQ_RELOAD         =   $C001+ M. v7 r0 F5 B3 a( D, y
  102. MMC3_IRQ_DISABLE        =   $E000
    5 i: ^" W) B5 j% a) N7 b
  103. MMC3_IRQ_ENABLE         =   $E001
    , S& T0 L( G: P$ }' q1 A" k) m

  104. 1 {# G4 q( c) M1 Q- p8 e4 H  ^; Q7 H
  105. ;音乐数据块
    5 @- F3 |  D  b! I+ |, |9 t1 |6 _

  106. 8 V+ r) u: L4 |9 Z/ @; P: P
  107. ;======================================================================
    ! [4 O. Z" X; W
  108. .IF SOUND_BAR_SHOW_ENABLE
    4 P( d! p, p- ?: c. P- @3 H
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK* V) N+ D! ~% M2 a
  110. .INCBIN "sound_bank_bar/music_data_0.bank"! Y* \1 ], k% J2 q
  111. . w1 J1 {7 }3 L, j  S6 q
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    % H$ f1 A" u% m# Y, |! P1 ?
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    5 w1 g. S+ ^/ z+ U3 S

  114. & D) y1 |$ x9 j) [- ]
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK7 V) S9 \2 _* a% b# i5 l6 }' O
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    0 a5 C: u2 B& S' K
  117. 9 U% k; E# |5 ~- V
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK1 X0 |/ K* |0 S( c
  119. .INCBIN "sound_bank_bar/music_data_3.bank"9 a9 A- u& ~' a8 o- a, _
  120. % j+ D' [2 M8 `6 d% |! J
  121. .ELSE
    7 v0 e. }  w- F/ T. ]. H+ k& x
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK5 ^& j$ p4 e8 m0 i- ?7 X9 q  O
  123. .INCBIN "sound_bank/music_data_0.bank"
    6 W- E; ^3 U. `
  124. 6 B9 b: |- M- Z/ O! S5 ]( e
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    * d1 B' e' C' ]7 Z
  126. .INCBIN "sound_bank/music_data_1.bank"
    - a( h3 Y. a1 b, R0 z4 f& f/ S
  127. + b+ D, n  \$ Q2 {
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    * Q- n; p' Z9 S  p
  129. .INCBIN "sound_bank/music_data_2.bank"
    * q6 B" u! M6 B2 u9 l  O, |( p

  130. 4 _6 }4 t1 \4 {, N
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ( j9 S8 f& ^* _$ [0 r& N' R
  132. .INCBIN "sound_bank/music_data_3.bank"
    / r) Q* H. y" `, m4 |9 r1 n
  133. .ENDIF
    0 u8 H7 u: v* _' Z+ p5 p6 A! q2 E
  134. * C) |/ T* U4 D3 c/ M
  135. ;CHR图形数据' ]0 u! A' O. f' R0 O$ V
  136. ;======================================================================3 x6 o- k/ t' `+ a4 d; Z
  137. .BANK CHR_DATA_BANK
    0 Z5 ~$ @% j2 R6 C- F+ U% f0 @- L
  138. .INCBIN "chr_bank/chr_data.chr"" F! Z, f6 v1 J) {8 Z

  139. , n8 x+ \( C1 g9 b
  140. ;==================================================
    # }$ Z( K% i* g& j$ P8 i+ ^
  141. PPU_Addr        = $0300
    5 \4 v' ^0 J1 d6 O) _
  142. Palette_Addr    = $03C0
      i& r" B: F: {
  143. Sound_Bar       = PPU_Addr+$E0
    % d0 n* C7 x! a" \2 l! Y* t
  144. ;==================================================5 F5 M2 S9 N, m$ Q
  145. Palette_Update_Addr     = Palette_Addr+$0D9 T) k' ]9 F4 N" s# r1 W2 M9 E! q
  146. Palette_Update_Max      = $2C* }2 {2 ?4 l. h/ j" e' Y
  147. Palette_Update_Min      = $21
    7 D% I, ?" R! q4 f2 W; r
  148. Palette_Update_Interval = 60
    6 I4 L" P2 P6 z6 H" V
  149. ;==================================================8 W1 t* `* O' j; C
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    3 I  t  F4 ^" T1 G5 A) l6 i8 g
  151. Screen_State        = Sound_Bar_Cnt+$01
    % l% }5 C2 r3 A/ v. A  O* ?
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    1 n: _' W. R* ?5 E% L$ Z
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    & s# E& }3 ?2 g, m% x* m, W0 c
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    3 J0 z; o0 z4 m) D$ b. E
  155. ;==================================================
    - c4 F# K8 P; \" p. O) p0 n& \6 D
  156. Data_L              = $701 ~' y1 n+ e& Z' K3 n, V4 Y
  157. Data_H              = Data_L + $018 q& l( f9 }9 F! A
  158. Data_Cnt            = Data_L + $02  r0 G* E, A/ Z& h% o: C' z1 @
  159. Data_Buf            = Data_L + $03
    3 W" N: d+ @! d: o
  160. Time_Wait_Cnt       = Data_L + $040 p" B3 W, w; I' k9 {# f1 V
  161. Palette_Wait_Cnt    = Data_L + $05; I) d3 Z* m" L# e
  162. Palette_Update_Flag = Data_L + $06
    3 `/ W0 o- s/ z5 _% M9 e
  163. Show_Track_Name     = Data_L + $07
    : W6 j. y" p) ]0 d* f: x0 r7 h' ^
  164. ;==================================================/ e; J" N4 r( P( C) G2 d
  165. Key_Keep            = Show_Track_Name + 1! @4 ?' \0 @# @; H
  166. Key_Once            = Key_Keep+$01* M9 D( E- H4 B/ n  {! Q
  167. Key_Kemp            = Key_Keep+$02/ e  X! ~6 N2 N: x* g+ k
  168. Key_Temp            = Key_Keep+$036 N8 D% Z! @2 z; ~+ z+ I/ S) `. E
  169. Key_Getv            = Key_Keep+$04% X' E" o6 l# [3 c7 P$ y9 u
  170. ;==================================================2 a% `- h$ }+ N+ }% f2 T
  171. Music_Cur           = Key_Getv+$01+ w' O" b! s. q' ~$ `
  172. Music_Last          = Music_Cur+$01
    . B! a: Z; T: ?/ K9 J5 q, B6 t( d
  173. Music_State         = Music_Cur+$02
    ' b8 j; O" M& |9 O+ l2 E* B) u
  174. ;==================================================
    & |, K! b- H  G/ C! W
  175. HEX_Data            = Music_State+$015 A% x, T; Y. h7 l) x
  176. DEC_H               = HEX_Data+$010 ^$ n% k8 m3 u. |9 P7 `, g
  177. DEC_T               = HEX_Data+$02" n7 u; }- p6 J3 r# A: R
  178. DEC_L               = HEX_Data+$03
    0 \$ {. F/ D0 z5 z. \
  179. ;==================================================
    & _  {: b2 w) G
  180. Time_S              = DEC_L+$01
    9 C2 X: ?, ^+ J+ ~/ e5 z2 g/ i
  181. Time_M              = Time_S+$01
    3 P3 N# Y& d9 ~  g5 y
  182. Time_H              = Time_S+$02$ ^* R9 q3 U, V2 [3 t" T
  183. Time_Cnt            = Time_S+$03% W7 a( m2 o" N# K  D( @6 n
  184. 1 F% U2 P; A+ N. z- \
  185. ;==================================================
    - K5 \+ z- G7 \& V" ?8 E1 }  \6 }+ r
  186. Music_Bank_8000 = Time_Cnt + 1( z+ A% ]5 e' z$ }
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    " P6 E( R4 J# w2 M0 w
  188. ;==================================================3 w0 x8 L, _' P) L
  189. 9 H& O6 }5 H% j6 z1 ]+ ~
  190. ;======================================================================
    - Q, y! i! I) P
  191. .BANK PROGRAM_BANK
    # G5 ?, [# q- _& R+ ~7 W" g
  192. .ORG PROGRAM_ADDR
    4 r& p0 }/ \" A8 i
  193. 6 V& _$ y) j' M3 R1 o+ L- T
  194. ;==================================================
    2 V+ J, W0 q; B7 y5 [$ t8 J
  195. NmiProgramProcess;NMI中断程序处理
    . v" S4 a1 e' `6 r% X
  196. ;处理PPU图像2 q. d7 k# W- j
  197. JSR PPU_Proc
    ( r0 l; t4 c/ S* I

  198. 7 D6 p+ n: Q9 X: @
  199. ;启用NMI中断2 m/ O4 O, }$ N" i9 e
  200. LDA #$80& @% A. X5 s: }: c
  201. STA PPU_CTRL
    ! I- a2 Z% P/ D; u3 K$ G
  202. 4 c8 A6 Z9 S9 t! {
  203. ;更新调色板
    / `" u. g" z2 f- K! G
  204. JSR Update_Palette_Data( q4 r7 B) c! W/ R

  205. : X% \- J* q- j% A
  206. ;显示时间(缓冲)( Y1 ~- a% e* h% S; V: B. H% }
  207. JSR Time_Show
    & ]8 H$ h6 k  T, S0 K- R8 i8 n& S  i
  208. ; [" E! i' \5 ^  G( L2 m
  209. ;播放计时
    5 A9 S; O, T, z% f0 N
  210. JSR Time_Count7 V+ I. P" X3 m# {; k0 @; R
  211. 2 d: N4 K& c  ~: J" ]$ o
  212. ;播放声音
    4 o$ w+ A5 K& u0 z1 B/ i) \
  213. JSR Sound_Play# {; z0 B' ^4 I) O3 l
  214. - y. \8 w+ ?" `' v+ b; A
  215. ;切换音乐(手柄触发)
    ; o; J$ c9 y7 R: Q
  216. JSR Music_Switch2 W) x0 k' \# {# M: j* i* y* p
  217. - O$ c& A- l) e
  218. ;音乐显示(缓冲)
    . \" b$ [4 w6 T2 E% G/ a" K$ y
  219. .IF SOUND_BAR_SHOW_ENABLE: s" d0 J1 r4 C
  220. JSR Music_Vision2 @# M: n: Z9 b! L
  221. .ENDIF$ b; ]7 [  R* s
  222. 5 _4 L5 Q6 D" ]! z4 n
  223. LDA Time_Wait_Cnt
    + g( B! D0 |9 [+ q
  224. BEQ NmiProgramProcessEnd7 }  O1 w) [2 E& R4 a/ |
  225. DEC Time_Wait_Cnt" W3 S& O' [6 m4 b$ O: `
  226. NmiProgramProcessEnd. H, }3 |1 G1 W8 q3 p* o6 R
  227. RTS- R2 E, K2 J& a: ~

  228. 9 q1 t7 D, a' M, O5 K" N" `
  229. ;==================================================
    4 F- l7 E; C* P2 u. H4 c& u# ?: y* n
  230. ProgramBegin;主程序
    - R0 |8 }  U* z( o. X8 i; [
  231. LDA #$00# s: U1 B. m3 g/ I" P0 b
  232. STA PPU_CTRL! `1 p" o0 u- Y3 g" g4 D# ~
  233. STA PPU_STATUS4 c  A/ t2 T' d/ L- I
  234. STA PPU_MASK/ q1 f5 O9 [2 @7 L/ G
  235. STA APU_STATUS% x$ k3 M% p/ R4 T) V* j2 h0 `
  236. STA PPU_SCROLL8 P; E0 ?) c3 J3 Z
  237. STA PPU_SCROLL3 f& h: E$ y! t9 G  s$ Z# v4 }8 ?3 {  Q
  238. LDA #$C0: [, l- m: }! P. w  v
  239. STA JOY2_FRAME
    5 a0 z# h. e9 B% V& \9 l7 Q6 _8 \3 t

  240. " `% [( A7 b5 E- v/ b) J6 V( X
  241. LDX #$FF5 p% w0 [6 F. x# |+ ?5 G" T
  242. TXS1 `9 Q( _8 \2 \' u% W: q/ h
  243. LDA #$00
    3 w* W% j1 _4 V2 S- A$ C. k: x
  244. STA PPU_CTRL  r1 ~/ m# H8 z7 A  P: y& U
  245. STA PPU_MASK
    , r6 U: p  A7 l- k
  246. STA MMC3_IRQ_DISABLE" S/ j: X! W/ P( L) V# t

  247. 7 Q. m" |8 X& {+ p5 c
  248. ;==============================
    ) A, q7 l, L% p3 K: i% V
  249. ;调色板清空
    % E# y1 y7 n* g# C3 o6 \
  250. LDA #$3F
    & S! y' W% _5 `$ F3 J* a$ z7 E
  251. STA PPU_ADDRESS" ]5 C1 R& Z$ y( p, V( C: g
  252. LDA #$00# B- x* ?+ V* {7 k
  253. STA PPU_ADDRESS
    : w: L3 U  n8 l
  254. LDA #$0F3 w& L" |8 S+ ~" U0 b
  255. Palette_Clear  ^% \& y' P, j
  256. STA PPU_DATA
    # D# n1 V# q# Y% H. [+ `
  257. INX
    4 q# H7 |' {; p
  258. CPX #$20" p  |% u! D( h5 R
  259. BCC Palette_Clear
    ; t' M0 ?8 R7 K) Z4 s. w6 z9 }
  260. LDA #$00, R0 d, [. [' ]# z  q" m$ P
  261. STA APU_STATUS) B# S% U: a6 L4 o6 Q
  262. ;==============================- ^& E9 s5 S& K; g* T$ M7 j- _2 }* ~
  263. ;初始化背景调色板
    $ J7 ^! C0 R8 w# T$ O& \
  264. JSR Set_Palette_Color
    5 \' B7 ~$ k. L% I: e6 ~, r8 o7 @! p
  265. JSR Set_NameTable_Attributes
    / y" e/ Z6 K* X% W) F. {
  266. & f% w0 S1 r+ }6 x3 S. w6 F
  267. ;==============================
    - c4 A4 c. [* I" @4 D
  268. ;RAM初始化. N+ S9 B) m( e  ~6 l
  269. RAM_Clear_All
    4 S5 K! [) Q+ u& \: ?
  270. LDX #$00. W8 r1 |" _' ]6 J8 P
  271. LDA #$008 s1 A2 ]; S8 c& U
  272. RAM_Clear_All_Start
    $ E  ~6 I( C5 v4 w" P4 `
  273. STA $00,X
    ( D% J( G9 V6 h4 F! D9 V/ ]
  274. STA $0100,X" `# f4 ], e1 B, s9 P- L
  275. STA $0200,X
    / Z" Q. l6 K2 r# _, F  B) C' `; B- |
  276. STA $0300,X$ ^& T4 x/ o8 h
  277. STA $0400,X0 ~5 n. |  w8 o9 O1 H+ b
  278. STA $0500,X
    $ g$ e; L% B; m: v
  279. STA $0600,X, d4 ]- |1 F9 |, W$ ^2 k% ~1 X
  280. STA $0700,X
    7 G5 \# q  I0 `9 C& l5 h0 J$ Q8 I
  281. INX! N# b' q: e6 L$ k
  282. BNE RAM_Clear_All_Start
    + l" j7 ~) o' P0 d2 J2 e3 c

  283. 2 ^4 F9 H1 P1 p0 _
  284. JSR VramInit
    $ k+ O- Q. j* _3 H3 c
  285. JSR Init_Palette_Addr3 O! i& l. f7 f, A3 D
  286. 6 \$ V9 O( l  n0 V  p  x% j! u- P/ T
  287. .IF Music_Reset_Addr. a& i) H! G! N& a# {; F% [
  288. JSR Sound_Reset
    9 J0 y' k) S# i4 m2 {0 h
  289. .Endif
    . H/ p% O5 x* l: L: j; y' A
  290. + T( h" z; K. \( r) l. B
  291. LDA #Music_Start_Song-$01
      o2 I3 ^8 ^7 s) l) x" t
  292. STA Music_Cur; B$ N# o; G1 u! o' \( a2 [

  293. . P6 U% X& w, G4 S8 ?( v: I! y
  294. JSR Show_Music_Text% `- o8 \7 c0 k7 j, P# o& }: p- r

  295. " U8 X) b9 |0 X
  296. .IF SOUND_BAR_SHOW_ENABLE
    # y: K6 N6 ?' T6 B
  297. JSR Sound_Bar_Text_Set
    6 ^; O# P6 p8 }
  298. .ENDIF
    & s& H4 |( W+ k: V- v! j4 [
  299. ( X8 N& w: M  z
  300. .IF Track_Name_Pos
    & ~) S: m* |8 u
  301. JSR Show_Track_Info8 N3 S8 v* k7 y# V: o
  302. .ENDIF
    & H  H5 d( K+ F6 h2 n( X9 B
  303. 4 L( |! e( R1 u2 s; b: p" e
  304. JSR PPU_Proc
    2 |( k7 {* _1 |, U! Q
  305. 1 s6 g: B" ?' N3 {( B
  306. LDA #$0E
    6 }( Q- k1 N& f3 E& N% b% w
  307. STA Screen_State
    5 ]- ^2 j, i& Z. ]

  308. % `6 A3 B2 w, \: H8 @
  309. JSR Sund_Bank_Init. D' r1 X2 G  g* y2 u
  310. 2 ^5 H" \, h  \& w: `/ v' ?
  311. JSR Music_Show1 ]$ {5 G5 b! u/ z& W4 E$ s
  312. JSR Time_Show8 B6 d0 g0 b6 |' o
  313. JSR Music_Stata_Show, g. V5 J) L/ ^" r& J5 |% K! V
  314. JSR Time_Delay
    - H1 t6 O3 z, t/ i0 \9 w
  315. 7 A3 H. T% h1 }

  316. 3 M1 }/ z. @, |5 U1 `
  317. LDA #$80/ n: O8 r+ _# V# }
  318. STA PPU_CTRL" f5 a0 ?- V! w+ {
  319. : X  v! P; n, @6 ~0 G8 [( J) R
  320. LDA #$20
    ; Z) a/ s* J- J5 D
  321. STA Time_Wait_Cnt6 E6 R% E# ^; A& |' |. @
  322. * ?: `$ G1 U/ n. J1 N
  323. Wait_Time_Over
    / F" Z7 L( o0 v6 l# Q
  324. LDA Time_Wait_Cnt
    - i, d# g, K; r" Y2 |2 B1 I
  325. BNE Wait_Time_Over
    ) ^: R! H- I2 k0 v8 L7 ?6 `: }
  326. 1 o- r) i% t# h% b* u
  327. LDA #$1F
    + @2 R. R- g" y. e6 h2 r$ @
  328. STA APU_STATUS, T6 o. }* \5 r3 e- u) q$ C
  329. LDA Music_Cur
    , B% n; H" o% b+ f) N4 _2 }
  330. JSR Sound_Init2 z' ]' m% B8 o! i$ j8 ?6 c$ C
  331.   K8 V, p! A" m% Z$ S
  332. JMP MainLoop
    9 Q0 C7 u/ t  ]8 W8 P
  333. 9 u* N) J- B9 k& k- ]
  334. ;==============================+ U. h9 ^# H: w7 ~& U, N1 M
  335. Time_Delay;延时等待7 l! E' `8 k& i- M9 E1 X4 s# h
  336. LDA PPU_STATUS
    * F2 i/ J$ i7 a( o+ D
  337. BPL Time_Delay: ]% @6 _: K& b" K6 m2 s) V
  338. RTS
    ) b3 l8 ]1 ?0 m. {

  339. + y6 {, \1 p% F6 ^& o* @
  340. ;==============================
    & H2 s6 n! j% {8 e7 w( O8 R4 f
  341. VramInit;初始化图形内存9 y0 q7 g( s3 e% F) v
  342. LDA #CHR_DATA_BANK+ V3 q/ X. W1 z
  343. JSR SwitchBankA000
    ( b+ w, e; J" C; p$ L( h% q
  344. LDA #LOW(CHR_DATA_ADDR)# R' k) v/ L  i. q, Q9 e
  345. STA <Data_L0 }" Y; i. v3 |- b0 r; [
  346. LDA #HIGH(CHR_DATA_ADDR)
    : H4 ?2 @4 B# U0 {$ m, V
  347. STA <Data_H8 {2 }  g/ s1 \' O( c- p# Z5 `9 F: s
  348. LDY #$00
    , r  H! `5 }. m3 E- ~- C
  349. LDX #$20
    - M( b% S6 l& g7 o( Z
  350. LDA #$00! ~; W8 t- f" m- k
  351. STA PPU_ADDRESS) ^3 w3 M% d  l) J5 v
  352. STA PPU_ADDRESS. A( v$ @$ k# u) O6 c5 v
  353. VramInitWrite: p2 I; F3 a, V! c& d3 b
  354. LDA [Data_L],Y
    $ J( N' o$ T: F1 R/ ?
  355. STA PPU_DATA
    ) H! _0 y$ \) I& [; V
  356. INY
    4 \( f7 `* O8 f5 _
  357. BNE VramInitWrite
    " A+ u/ z7 A5 p6 T& e
  358. INC Data_H
    ; t5 w% q; `: v  Z7 t
  359. DEX, h* Z, ~: K: u8 A5 w
  360. BNE VramInitWrite; e( w3 w- c. E2 T, i$ O  Q
  361. RTS
    # J" u. s+ J$ ?; D+ S1 \
  362. 8 q3 ^7 U% n6 ]
  363. ;==============================
    + g, v6 T+ P& E5 W
  364. RAM_Clear;RAM清除: L' W% n8 H% u# w5 l4 ~4 z& P, R
  365. LDX #$00
    ' q- h7 r6 D  C8 j' ?! N  R7 l2 x$ J
  366. LDA #$00' g" K2 D* j9 Z1 i; I/ Y
  367. RAM_Clear_1
    3 H" ?0 U5 b5 m% H" `3 O# T
  368. STA RAM_Cln_1,X: ~0 N4 C& a0 M9 f" ~2 ^5 @, o6 ?
  369. INX
    ( t2 u; h# g/ g; F
  370. CPX #RAM_Cln_1_Size
    4 L, L4 a' O0 U
  371. BNE RAM_Clear_1
    ) K2 B& k4 W6 O' s1 h2 Q
  372. LDX #$00* ?3 v: a! [# ]( T* W
  373. RAM_Clear_2: J+ n( t6 X0 N+ |/ `  G- N6 h
  374. STA RAM_Cln_2,X
    7 G8 k) }3 \3 M* J
  375. INX, X6 I6 a# B! I  l
  376. CPX #RAM_Cln_2_Size( f' k; u/ ]; p& c0 e  f
  377. BNE RAM_Clear_2+ B! E0 ~* w7 ^$ ~/ A1 `
  378. LDX #$00) C5 t  b! v, L$ j/ D* V+ \
  379. RAM_Clear_3
    + u1 [9 Y! I) _! ^. Z
  380. STA RAM_Cln_3,X
    ! E/ L; G/ {' N6 U/ {( k# I
  381. INX
    ! g! ~" n' e8 o$ k
  382. CPX #RAM_Cln_3_Size6 ~$ T! L0 l, {' [) U2 H
  383. BNE RAM_Clear_3
    1 G( v- m$ r0 R+ @3 W/ r
  384. RTS" v' z8 K" a* S  T

  385. 3 c# n4 y* F3 s) Z. b
  386. ;==============================* Z* p! f. U8 L' `! M+ V- p( p4 E6 R
  387. ;音乐切换  p2 T' i1 p" _! l
  388. Music_Switch
    4 A0 |6 d+ Y) R7 t; H& x
  389. JSR Key_Proc* Q0 t) r! o+ m1 H( z( s8 Q
  390. LDA Key_Once
    $ i+ n8 }9 H1 @
  391. CMP #$102 H2 t$ }! y8 ]
  392. BNE Music_Start_SongStop- |, }+ Z2 X7 v0 ]
  393. JSR Music_ReSet, }5 l- c9 g+ ~
  394. ' H' ]0 h/ ]% l4 _
  395. ;音乐停止
    9 @6 v% G" x7 V" Z
  396. Music_Start_SongStop" C; o, [! z" [! u. R
  397. LDA Key_Once; w1 J7 }3 a0 ]5 `2 M0 P  g
  398. CMP #$20
    + B5 z1 u/ \/ A  U8 y- v
  399. BNE Music_arrow
    + u" i# `0 M" j# X4 E
  400. LDA #$01
    $ z# {  {7 ^& j/ ?) {+ T3 g6 f
  401. STA Music_State/ Y/ b8 b- N. y' i7 @
  402. JSR Music_Bar_ReSet; w4 F  o% ]: R% B
  403. JSR Time_ReSet, f7 {  G' [) E' T  \
  404. JSR RAM_Clear, \. O# h) ~9 {( x' K  m
  405. JSR Sound_Clear% E5 |" ]) k- L
  406. JSR Music_Stata_Show
    6 X3 J1 N% ~8 ?8 q
  407. Music_arrow
    9 V  t* i8 [* |9 O7 T# k
  408. LDA Key_Once1 w& k  m1 P. ~$ a% E& w
  409. AND #$CF
    3 I7 u! l* P$ B$ R$ ~4 L1 F( O, B
  410. BEQ Music_Switch_End
    7 B. k1 Y4 }5 E3 {/ f1 ~
  411. JSR Music_Number0 w4 P% T9 S/ F  h: O) q
  412. JSR Music_ReSet
    : G2 A4 D+ f8 {2 X
  413. JSR Music_Show
    # p7 D( }; `9 u/ [! ?/ [) {% H
  414. Music_Switch_End
    ; e) c+ S, y, J$ ^5 Q& `
  415. RTS
    , I  W0 Q% s, q1 A+ _; s- M3 q. A
  416.   k' Q2 `" f( L( i0 ~8 F8 ]$ O
  417. ;==============================4 o+ y7 s# k1 o
  418. ;音乐曲目切换
    ' ^0 H& s# D( a
  419. Music_Number$ H3 D/ U) c2 j' m( d( g( t$ m
  420. LDA Music_Cur* J3 N8 P. l; k
  421. STA Music_Last
    " H2 T" T! T7 {0 k3 R- \$ L6 S( W# B
  422. Music_Decrease
    ) n. x! B% g8 Z( P" I- h* M! f
  423. LDA Key_Once
    . F3 t6 z/ M5 m* @% _+ J
  424. AND #$42. x8 L% r8 i1 d2 T0 w6 g6 Q* m
  425. BEQ Music_Increase
    / o% |) u) @0 i7 }. Q) x: |1 D& U: F3 u7 T
  426. LDA Music_Cur
    # W+ b, m2 H1 a! }4 d: ~4 M, g
  427. BEQ Music_Increase
    0 [8 K0 V* E% T0 b
  428. DEC Music_Cur3 C, K1 q! B  h+ c2 N% g
  429. Music_Increase4 z6 T9 v4 H2 u
  430. LDA Key_Once
    6 i( y4 x5 u6 O- o
  431. AND #$81
    # e0 S2 w8 S: ~
  432. BEQ Music_Decrease_10
    : T# K* ~0 q' H3 Z5 |
  433. LDA Music_Cur
      Q* l6 A2 F4 o' @, l1 \" w- r
  434. CMP #Music_Song_Total-01
    . B6 C5 T; b5 v$ |- N! s) J
  435. BCS Music_Decrease_10* u( I4 l' R# [
  436. INC Music_Cur; z, Z0 q0 v& t5 L. Q; ?0 E
  437. Music_Decrease_10) u- c$ V5 {. {; |% E
  438. LDA Key_Once
    & ~- t7 L& \" ^
  439. CMP #$048 v3 c/ C% }1 w% m$ O7 o6 t% {
  440. BNE Music_Increase_108 [( {0 D" G3 {! ?
  441. LDA Music_Cur+ O3 P" q+ M9 h$ E. z) ~
  442. CMP #104 H) B* j! R; ]# t
  443. BCC Music_Start_Song_Min
    + p" v& A! v2 U3 N, m
  444. LDA Music_Cur
    ! ?4 D/ K! a+ H, y- T
  445. SEC
    & B) }$ q; x* T
  446. SBC #10* K& s% K- U' }' M
  447. STA Music_Cur! P5 H" q. S  v* d# r
  448. LDA #$00
    + j2 s$ P" E6 S% A
  449. BEQ Music_Increase_10
    7 ~+ q* K0 g& P1 ]' J
  450. Music_Start_Song_Min2 T& ^+ J: B6 k4 ], s" x) M  J
  451. LDA #$00: Y5 S4 Z4 k# ?* D' M, E
  452. STA Music_Cur
    / i6 \6 r% ]& _$ ^
  453. Music_Increase_10
    # Y; ^2 h$ W8 C, ]
  454. LDA Key_Once
    9 D/ X- L8 A0 X& S4 K* X; c  p
  455. CMP #$08) J2 [) n+ s' b! k2 c" h3 V; _
  456. BNE Music_Number_End7 M, e  ]! X2 H% G9 p
  457. LDA Music_Cur
    / a& m  |% k$ R  D
  458. CLC% C) S& U- d/ q/ w6 A% x5 S
  459. ADC #10! F$ q$ d- E, I$ _2 d
  460. CMP #Music_Song_Total-01
    / Z% X1 W3 t: Q0 q! c
  461. BCS Music_Start_Song_Max
    ' t' \; P: t" C- g
  462. STA Music_Cur
    0 ^9 y% B. Y" V1 v
  463. LDA #00, r9 r) ~( V( q
  464. BEQ Music_Number_End) X4 t) s. D; m; n, u
  465. Music_Start_Song_Max$ Q* `! ]$ ?' ~! r- V* G
  466. LDA #Music_Song_Total-019 N3 d- ?* y! j7 L- X" l
  467. STA Music_Cur/ l* c9 r+ |- c* p' M, w
  468. Music_Number_End' B+ Z3 k3 F) W# W( D0 U. K9 ^
  469. RTS, O$ M, ^7 D; X7 w

  470. 3 w# p; s4 F# B' N$ w8 d& |7 f
  471. ;==============================: ?3 |! C4 ^& n6 Q( S' E
  472. ;音乐重设
    : g% N+ z0 K& Z; w  W7 K4 i0 d8 e
  473. Music_ReSet
    8 n! D& K& B6 g0 b' `& ?' A- s
  474. JSR RAM_Clear
    , q/ k& U6 @* A+ v3 E
  475. JSR Sound_Clear$ ?5 p, w" c5 Y; B
  476. LDA #$1F- D- U3 o8 G+ F
  477. STA APU_STATUS
    # e2 L2 P: M0 [; e: [6 @
  478. LDA Music_Cur
    # N6 x; V" Q  x! N" }5 P& @. @
  479. JSR Sound_Init
    7 z3 [* v4 A$ A6 Y+ Z- D: z
  480. RTS) _5 G4 F- W/ R3 G
  481. ! ]. o* p0 |' V0 h
  482. ;==============================
    , D+ L1 W0 v% Q$ m
  483. ;音乐端口清除
    0 s; ~! \2 }5 t, I; M( X; v1 \. n
  484. Sound_Clear
    ( Q/ @8 l; q. i
  485. LDA #$006 s( ~& \; O: q4 u1 K
  486. STA APU_STATUS5 I1 o+ f: e8 w* T! U9 ]
  487. LDX #$00
    - j  ^4 @0 }- n8 g/ U
  488. Sound_Clear_Start* W0 [6 |. B/ i7 d; O4 u6 D& e
  489. STA $4000,X
    8 K! O4 j5 I- `& m5 ~. L% k
  490. INX. }" q: s6 B  ]# P2 E2 p' q
  491. CPX #$149 m; ~# J; j9 |/ T
  492. BCC Sound_Clear_Start. a+ @2 O" k. _& q
  493. RTS' x/ j/ B3 E) s% y1 h% h, |5 g
  494. 3 v& W, C" o/ K  D" c6 C
  495. ;==============================; F0 L7 Y/ J' Z5 C. W% f' U
  496. ;按键处理# A0 b0 W3 p  @* A5 k& Q& `
  497. Key_Proc
    3 Y$ B2 `1 g# Y) h
  498. JSR Key_Scan
    8 }: F8 I+ A1 ~# Q0 n& U: y) D
  499. LDA Key_Keep
    4 O" X/ [6 E" c7 N
  500. STA Key_Temp8 o& F. s* J/ ?* r
  501. JSR Key_Scan
    3 j) z9 q) C8 x7 O5 w
  502. LDA Key_Keep
    5 D4 k4 [5 s# Z6 ?# [5 {
  503. CMP Key_Temp6 v" X0 W% G: |( |5 k! f* e
  504. BEQ Key_Get_Once
    8 C; i' A  l' F. A9 o4 ?
  505. LDA Key_Kemp
    & G7 m% T. A( a7 O; a5 K4 b2 X
  506. STA Key_Keep2 c8 }) P7 s! x( X1 q# G# `5 c
  507. Key_Get_Once9 N3 {* ^& W) |3 M9 l( t0 Z# Z
  508. TAY- v: N, r, e4 Q) f5 }$ T+ \
  509. EOR Key_Kemp/ ~! v& M; I/ j: ?1 O8 G
  510. AND Key_Keep( W- k' e  v( A( |
  511. STA Key_Once9 n0 x* o! E  j8 r3 S" [
  512. STY Key_Kemp/ g: d( _2 l, W/ g, A1 N3 `- S
  513. RTS
    4 l) W4 m: I/ l- z' q- |- U
  514. ;------------------------------
    2 Y) s: m% ^3 b, ~) Q
  515. ;按键扫描
    " z' T( t3 B8 r, b# s4 x$ t
  516. Key_Scan
    ) a/ q; J% P! H9 o9 v! O7 l
  517. LDX #$011 F0 M# x/ ~% v3 c: x* G: [
  518. STX JOY1_FRAME- u/ z. u; O; J/ ^5 y; u& o
  519. DEX
      a; w! D! n- x/ |. V
  520. STX JOY1_FRAME
    2 [6 r- U7 j6 i! x9 i+ Y
  521. LDX #$08
    $ u# Z0 w8 y9 v( q7 ?3 i
  522. Key_Value' k4 G) M/ ^; p" j9 B* c/ [5 f
  523. LDA JOY1_FRAME3 l1 x' u7 Q7 V4 i: X
  524. STA Key_Getv# n, H' n3 D. P- W0 E. k4 g
  525. LSR A
      n  R" j* r% ^$ H  G+ @
  526. ORA Key_Getv
    8 T+ \8 _/ }' B- I
  527. LSR A
    # o! x' N+ K' F9 H) F8 h; F
  528. ROL Key_Keep
    / \5 ?+ [% w! x$ F- ]
  529. DEX
    : m9 m5 ]' u, x+ j8 f
  530. BNE Key_Value6 H4 D; X9 ^" c
  531. RTS' n5 T; ?1 A/ d4 p4 R$ b+ y
  532. . a: C% F- Z. k7 ~' S* S
  533. ;==============================/ ]5 a( b' \* V$ E; C
  534. .IF SOUND_BAR_SHOW_ENABLE
    , i( r; w$ c* ~& y4 P. ]
  535. ;音乐条显示
    ' l; l1 @5 ?9 o& |  i9 x; k
  536. Music_Vision3 y8 F8 y2 U8 O
  537. JSR Music_Animation
    3 t7 R% I7 K; ^0 I8 L
  538. JSR PPU_End
    " d- s0 F9 D+ S  @6 z  G
  539. RTS
    ) E' U1 W' q& A2 q' S
  540. ;------------------------------9 Y' b( q; [4 |! ?0 k% P# p
  541. ;音乐条显示处理3 Q! c& E4 c. R- c
  542. Music_Animation
    & R" `0 l! o- O+ U0 ~  d8 j# z
  543. LDX PPU_Cur
    1 W$ c7 [) g( Z; S- }+ b  R
  544. LDA #Mode_Line
    , e, L5 p$ {7 t+ s, g8 o5 R
  545. STA PPU_Addr,X
    3 J# q$ W& E9 U
  546. INX
    ( {4 h* ]# [# x
  547. LDA #HIGH(Sound_Bar_Pos), V/ C; d9 u, s& A, ~
  548. STA PPU_Addr,X9 d4 P. _8 c* a8 W
  549. INX
    9 k! u2 G$ n5 S  N- F! l
  550. LDA #LOW(Sound_Bar_Pos)% ~/ M1 U7 S% T# T  l
  551. STA PPU_Addr,X
    " j- R6 }: Z# ?) M6 o; \- J
  552. INX' i, f7 C: o+ C  }/ U0 Q7 c7 v9 e6 ?6 I
  553. LDA Sound_Bar8 A' I% X7 `& V7 @! U
  554. JSR Volume_Convert$ X7 U2 W. c' P% `  o9 y
  555. JSR PPU_Return0 j! ?8 L# g/ C1 R: ^
  556. LDA Sound_Bar+$4
    7 ?' v% h& C1 I9 V: \- L
  557. JSR Volume_Convert
    ' g' ~5 ^$ ^/ x! N; }/ r% z
  558. JSR PPU_Return
    , d6 y& e3 X+ D
  559. LDA Sound_Bar+$8) j6 t8 a# H/ e( ?& S) K; U
  560. JSR Volume_Convert_Ex
    - t) e" X6 C0 w( x
  561. JSR PPU_Return- E7 e/ [# {) T4 w
  562. LDA Sound_Bar+$C
    # t) Z/ `# @1 C/ A$ W4 L& H$ k1 r
  563. JSR Volume_Convert
    4 V: S" a- Z2 h; Z3 [
  564. JSR PPU_Return( R8 G& B8 H+ o2 \
  565. LDY #$10
    0 W0 L6 D; W$ M, \, t+ k
  566. LDA APU_STATUS
    + a1 H% Z* R  {: H
  567. AND #$10+ M; I8 c% C! l4 V4 m
  568. BNE Volume_Count
    7 Y* ]- L. T" p. U( R& o1 U5 m
  569. LDY #$00  q5 q$ x2 L: D# B, ~$ E
  570. BEQ Volume_Count! b6 x" _. m1 [& x
  571. ;------------------------------
    2 I5 p% g; b% Y
  572. ;音乐条处理
    2 f5 v0 t; b! X
  573. Volume_Convert_Ex
    ( D) Z8 w9 O6 T' r2 ^
  574. AND #$1F. G& {/ _: ~% F# ^5 P" W
  575. TAY+ Q% _% N0 ~' s6 ]" k3 m
  576. BNE Volume_Count
    & e" ^6 e; |0 `1 j- {
  577. Volume_Convert
    $ m0 o- E+ P1 B8 B
  578. AND #$0F
    1 R$ Q1 q& p4 ~8 I
  579. TAY, s0 b4 w* G/ |% A
  580. Volume_Count5 {- i% z, p4 I6 y0 f
  581. LDA #$08
    ) _& S2 K5 Y6 |* B6 h  F: m6 v
  582. STA Sound_Bar_Cnt8 X/ y4 P9 D& [2 ~# i
  583. Volume_FILL& C  T2 J) K8 \$ ^+ c1 Z- a" a
  584. DEY
    ( I! I+ s6 F! K0 V9 U
  585. BEQ Volume_Half
    $ H& k4 ^7 L: c" i
  586. BMI Volume_Empty
    4 U, s3 r- n9 J
  587. DEY) \, x* d3 l* G: T6 b+ ?# h& p
  588. Volume_Full9 p8 |6 S; F6 c3 ~5 M  G
  589. LDA #$16
    & D$ t  z% l6 r4 o
  590. BNE Volume_PPU* ?* {2 {$ [# `7 u$ e& ~
  591. Volume_Half$ f/ @$ g" v: Q+ S) \6 [9 w  \( w
  592. LDA #$15
      C; d. J% V. o
  593. BNE Volume_PPU- I, ?7 E: h. {, @
  594. Volume_Empty
    + Q- [6 O$ A" E9 R0 T( K( s
  595. LDA #$142 {' s/ h7 e) m' e7 x
  596. Volume_PPU
    9 G9 R  Q0 @; w6 x- B
  597. STA PPU_Addr,X
    ' ~1 `+ T  F; q( M
  598. INX
    * q9 K: z( o- d
  599. DEC Sound_Bar_Cnt
    5 f; v  U0 D4 k) z* {
  600. BNE Volume_FILL- e$ V7 `: `! {, I' H8 p
  601. RTS
    & |* ^2 ^0 w- S2 r

  602.   U4 v% f; c& y3 U' z
  603. .ENDIF
    ' l! _3 z' |8 u& x

  604. - Y, ^4 u4 _: L' e& }  P" Y) Y
  605. ;==============================
    ; j( `6 _  b2 _$ a8 N( s
  606. PPU_Addr_Set;PPU行开始  H. i0 [1 f" F
  607. LDX PPU_Cur$ c) f; m; Z6 D' }+ {) i8 C8 J4 Z5 ~; i
  608. LDA #Mode_Line
    7 s! R7 n! x' C. i* }9 T
  609. STA PPU_Addr,X% C! \7 g: [: Y5 i4 w
  610. INX9 Z( N2 Y: M) u! D% k4 V0 w6 e
  611. RTS
    ) t; {( ^+ L0 |' R4 D) V9 {

  612. : K5 ~) @/ W  G0 ~) J5 ^
  613. PPU_Return;PPU转行
    + U: g0 l! {' G+ g, \/ y$ U6 j
  614. LDA #Flag_Over
    # K/ P- J4 q  ?- r+ [7 E0 [0 y
  615. STA PPU_Addr,X
    $ o8 H# W( j$ E" ]; G
  616. INX6 r0 o* i( @3 ?' K1 ?8 O( R) X8 V
  617. LDA #Mode_Return* t; \% n. j6 ?: @% g5 }' k
  618. STA PPU_Addr,X3 e" n- Y3 ^# A3 r% `) I5 H3 k
  619. INX
    9 G. N( B2 H+ M3 D
  620. RTS3 @9 C4 V: o! X7 s3 U2 P
  621. : ^: B3 r0 y. k2 l" ?9 a# v
  622. ;------------------------------
    : k8 y$ a( O' ^' O
  623. PPU_End;PPU结束2 H# b+ l0 Z  i" d* m* A8 C
  624. LDA #Flag_Over: y! ?- D. C# w0 \% x, r
  625. STA PPU_Addr,X
    * l  Q2 r3 Q7 K8 l8 d6 Q. C
  626. INX; M( D2 e2 D6 }+ P! H
  627. STX PPU_Cur
    7 H3 C& r7 S. f" U, H* j& a
  628. RTS& h" M8 X1 u* X2 G3 ^
  629. ;==============================# I8 @5 E9 x9 A' f
  630. Mode_Line     = $FD    ;新起行模式" i, i4 k8 j: y+ o
  631. Mode_Return   = $FE    ;转下行模式
    / ^1 T5 H4 F% {  q% ~0 E
  632. Mode_Clear    = $FC    ;行清除( l. z7 u; q9 ]: U6 Y
  633. Mode_CntLine  = $FB    ;行计数写入( h% T$ F. v/ T8 Y+ q7 s
  634. Flag_Over     = $FF    ;行结束标志
    7 \# e& D; P) a& ?

  635. ! U4 ~5 S# F2 b1 F
  636. ;------------------------------. k% d- ?" K% |2 t3 v
  637. ;PPU处理( V/ O# Y% {# \6 }% g$ [: `
  638. PPU_Proc
    6 E% L, J8 \# |: ?/ e2 k
  639. LDX PPU_Cur  y3 _# }: u. s2 B
  640. LDA #$00& k# s4 d: a& M) e: _/ `
  641. STA PPU_Cur
    ; O  P" Q  \$ p( v8 W
  642. STA PPU_Addr,X
    5 @7 D" B' m- n# y# Q
  643. LDA PPU_Addr
    7 J$ s0 J/ e6 W- y3 c
  644. BNE PPU_Proc_Beg, }4 `* M0 J, U, @) f/ x+ r& g
  645. PPU_Proc_Ret
    9 C) L7 M+ ]0 o+ U
  646. RTS9 v4 [) e2 a1 X, A- T5 f$ \
  647. ;------------------------------
    - z. }4 O3 D: w8 ]6 l" A
  648. PPU_Proc_Beg  ;处理开始' ?; E1 G" j" D  t0 K
  649. LDX #$00. ?) O  z' X$ s! d' c  d! X
  650. STX PPU_MASK& O8 y: A# A5 N; c
  651. ;------------------------------- J3 t- w' `9 H$ @" m' l+ h
  652. PPU_Mode_Select  ;模式选择
    + _; D# ?& b3 D4 z
  653. LDA PPU_Addr,X4 Z- z8 f9 A* v( r8 a3 h- L: x
  654. CMP #Mode_Line* p, o! }! c$ c5 ^8 u' s) f
  655. BEQ PPU_Mode_Newline0 c- L% I. s5 E) k% @
  656. CMP #Mode_Return% I& Z; F& z2 ~
  657. BEQ PPU_Mode_Return% N* S/ [+ k6 Y$ n
  658. CMP #Mode_Clear0 z2 q$ o2 D8 ~9 a; W
  659. BEQ PPU_Proc_Clear
    6 D; Z# f; w% Q2 Y
  660. CMP #Mode_CntLine7 d/ e/ S/ O8 |& S" G5 Q- ^& E& h
  661. BEQ PPU_Proc_Cnt_Line" M0 q5 S0 n/ O: X! m4 X  \
  662. RTS, M; G, {  t, l2 ]5 }. N; M4 I$ q
  663. ;------------------------------0 D5 p, b, f0 J) [
  664. PPU_Mode_Return  ;转下行模式$ f# x) _' D3 f! Y9 f9 t, ?2 k
  665. LDA PPU_Addr_L
      g& @" {0 m* B- a+ \
  666. CLC5 F, C/ \: {4 ^; D1 \, k
  667. ADC #$20. B# g; y. d/ J  c1 B
  668. STA PPU_Addr_L- r( j" ]1 e) z
  669. BCC PPU_Return_End3 R/ ]$ i! Q! }8 a+ M5 s0 L" ~9 ^
  670. INC PPU_Addr_H( ^- g" I. x) Q; G7 A
  671. PPU_Return_End
    & d% U7 Y5 ?# Q+ V, O; u9 P5 m
  672. JMP PPU_Set_Increaser
    ) @/ a9 K2 L3 |$ ^
  673. ;------------------------------1 i7 |1 ^' X4 o( Z# p! n( n
  674. PPU_Mode_Newline  ;新起行模式6 M0 H. L3 j7 E" H. g
  675. INX
    - B. p5 Z1 q+ j
  676. LDA PPU_Addr,X
    7 H+ |* P. J0 p) D( D/ i
  677. STA PPU_Addr_H
    - E/ y! D4 C3 \( L& V  B$ u: u
  678. INX
    ( ]6 Y- I2 k) w( {; e9 c4 Z$ X
  679. LDA PPU_Addr,X: y3 Z& y. @0 `* S9 d
  680. STA PPU_Addr_L
    " q6 f1 m6 [7 |/ y! S' E! _
  681. ;------------------------------) a1 _9 v' s4 X- t# @
  682. PPU_Set_Increaser   ;设置写入地址
    1 m) G# V# L6 r1 V9 u3 C: P% c' A
  683. LDA PPU_Addr_H
    ; A0 M+ o( r1 z4 z- y4 o2 y- b! Y
  684. STA PPU_ADDRESS0 m; B$ Z) g% |2 M  v4 c' ?
  685. LDA PPU_Addr_L  m8 h+ d3 Y& ~5 F
  686. STA PPU_ADDRESS
    " j8 c3 S+ j5 F' K
  687. ;------------------------------' ~0 r- B6 T, X" t
  688. PPU_Write   ;写入数据/ Z2 s5 S9 \, G
  689. INX
    ' S1 n* B% n0 _
  690. LDA PPU_Addr,X
    / B6 [% }5 x& Y* o8 t
  691. CMP #Flag_Over2 t$ S; h0 _* Q, N
  692. BEQ PPU_Proc_End: b9 B; W. x# M# ~: r
  693. STA PPU_DATA, H5 K0 q6 `4 o8 M1 I
  694. JMP PPU_Write* b4 p- P& D, T! o) e! h/ g% i
  695. ;------------------------------
    . X0 _. v% g5 B( K; z
  696. PPU_Proc_End  ;单行写入结束
    # K$ g; g: j; f+ ^
  697. INX4 a- G! h4 H8 G1 R
  698. LDA PPU_Addr,X8 @% N% C) @( ~& q9 I% k. E, I
  699. BNE PPU_Mode_Select9 m5 Z6 z4 I& A
  700. STA PPU_Addr$ f2 H/ K: f$ K! r2 K9 e, |
  701. JSR Update_Palette_Color
    , r! B0 |$ }# `/ x, j
  702. LDA #$00
    4 N7 {- U) `9 h
  703. STA PPU_ADDRESS
    7 U( Q, K9 l/ J) A" S& I  K# P8 S" b9 N
  704. STA PPU_ADDRESS
    ) G1 \$ C/ H! ^4 l, W
  705. STA Show_Track_Name
    ( N7 ]2 C- h6 K; m0 d3 A
  706. LDA #Scroll_X
    8 }+ U  F: |0 u1 G
  707. STA PPU_SCROLL5 U' ~) `2 Y& B! k/ ^# s- f
  708. LDA #Scroll_Y/ Y0 i  K( U2 {5 y: h7 E3 |
  709. STA PPU_SCROLL2 A: n! A  [, W5 m* ^& J# K
  710. LDA Screen_State  T# ~( t2 u+ o- O3 V! H9 y! e
  711. STA PPU_MASK& A3 l/ k: y; [7 p
  712. RTS4 A( ]3 |% D) c% G6 k

  713. 4 p% }: {; e5 `" @
  714. PPU_Proc_Clear# j; T2 `3 ^8 x' s0 P3 Q
  715. INX
    ; e0 j( I& c# ]8 C! ~
  716. LDA PPU_Addr,X! l* W3 M2 Q3 m5 E' F4 {, x2 |
  717. STA PPU_ADDRESS
    / S$ `0 q# C" o, b+ W, e8 n
  718. INX, h6 K' ~+ ~( y/ B8 \& v
  719. LDA PPU_Addr,X) ?- ]0 S- G. t8 M9 D; c" f# J5 ?' P
  720. STA PPU_ADDRESS$ A/ W; b& Q' H3 B- d. c. ~' @
  721. INX
    + Y$ C5 v% v- R- h
  722. LDY PPU_Addr,X
    " J# K  n6 q% u: N4 Y
  723. LDA #$001 k9 b. H2 v$ R( F
  724. PPU_Proc_Clear_Write) X: ~( k5 w3 H. ?2 ?
  725. STA PPU_DATA0 r0 H* }8 e3 C" @, O) `
  726. DEY
    5 Z! g) T5 ]2 Z% z( `5 n7 {9 G
  727. BNE PPU_Proc_Clear_Write: _4 F9 a4 d/ g3 G; j
  728. JMP PPU_Proc_End* t5 a: s0 Q$ Z! c; O

  729. 8 J- G# T' ~1 N9 M5 R
  730. PPU_Proc_Cnt_Line
    & H. p* h4 k) e3 Y
  731. INX
    & C* U6 ~" ^6 p$ W
  732. LDA PPU_Addr,X2 K) t6 P- K! o; `
  733. STA PPU_ADDRESS. B; c& ?: J7 ]  E: K
  734. INX
    3 E8 _& l3 [0 Y1 Q7 Z2 |# l/ x
  735. LDA PPU_Addr,X, J/ v% ]* [3 ~' k+ _! V2 G/ e
  736. STA PPU_ADDRESS
    , B* D5 B6 |# v5 V' e# T
  737. INX
    : g; \" f) x# q( g) ~
  738. LDY PPU_Addr,X
    - s1 Y, m& _; }! [
  739. PPU_Proc_Cnt_Line_Write
    , S: Z& J) \9 D5 |
  740. INX# R: M' y! v; g6 D' h8 a0 U/ k
  741. LDA PPU_Addr,X6 c, j- x, O8 q6 Y& t8 m4 W5 y
  742. STA PPU_DATA
    5 Y# N' ~) G6 w. U
  743. DEY1 H, j3 u4 j. ]7 l
  744. BNE PPU_Proc_Cnt_Line_Write# B2 S% y3 p) `  `
  745. JMP PPU_Proc_End
    7 B: Q5 r. T1 y7 s
  746. ' v, }) L) x" _# y: l, Z
  747. ;==============================. ]; G. L3 ?, U, l: P$ S; t
  748. HEX_To_Dec;十六进制转十进制/ Q, ?, U6 s( X
  749. STA HEX_Data
    ; ~) p4 l$ `( }. m5 Q
  750. PHA
    2 |% M0 P9 V( f  F" d
  751. TXA
    ( X' S, T* o- E2 A4 j/ J5 r) J
  752. PHA
    $ `6 n: H* B  Z
  753. LDX #$00
    ! N9 \/ {" r' }2 {  z/ h6 g
  754. LDA #$00' u0 ~9 U$ \/ ?# J) m% r
  755. HEX_Cln0 X5 n# d3 C4 \, V$ `6 s% q5 J: _
  756. STA DEC_H,X8 v- j- V* ?4 N) b' i* q/ P
  757. INX" p+ M; h5 R0 w# T% q6 r6 e
  758. CPX #$032 q. y9 I3 K; i; H2 J
  759. BCC HEX_Cln
    ) y. Z, X1 t7 Y7 B2 e% C3 D
  760. LDA HEX_Data
    % {! v2 G/ `+ J4 n8 _9 \1 K
  761. ;------------------------------
    3 e% ]% G2 J  U) C! N1 S9 t
  762. HEX_1004 Y, n- F/ P( O  h5 X9 y
  763. CMP #100" z- v0 Y+ q' N  W8 d3 K: L
  764. BCC HEX_10; M0 n4 b" ?8 I- W9 m
  765. SEC1 l$ `% }4 H/ i0 ]
  766. SBC #100( L1 ~; U/ N4 g  |9 i; X
  767. INC DEC_H) v# L5 ^/ |: g$ w
  768. BNE HEX_1000 _% x6 ^( X& k2 Q0 X! q
  769. ;------------------------------
    * i% v5 u2 ?1 s3 L
  770. HEX_10
    9 ~& P) {( q% ]# ]' k+ u
  771. CMP #104 Z# c. b, b- W% a, J0 K4 X
  772. BCC HEX_1, Y+ B& U; r1 j5 u8 ]5 [2 ^
  773. SEC
    * [+ i- {  m7 \& o* v* X
  774. SBC #10+ I) C- F$ |" \9 ]9 [
  775. INC DEC_T
    5 z& D6 h) Y4 }7 H% S" j5 c- i
  776. BNE HEX_10
    & }# M' d5 n/ F2 I% h. s
  777. ;------------------------------
    ( X, R6 [4 K. g3 F$ p
  778. HEX_1
    % I: T5 F" ^. M: A6 J9 p  b
  779. STA DEC_L5 d8 C) L/ b0 L0 W( e0 p  F+ N' u
  780. PLA& E, N9 N- W6 {& j: a
  781. TAX7 u4 z5 Q. q* K% ^; k; V
  782. PLA; r- h6 m0 T* N
  783. RTS
    4 ^9 W5 Y! L! K% o' E( h! {
  784. - n7 X* C1 o7 L+ ?( s( X# ~* \
  785. ;==============================+ V! y! T; A0 t, H/ P' I: T
  786. ;音乐曲目显示
    " _; d& H, k. s3 u
  787. Music_Show9 D; l: C* t" s' F) [: |! Z8 t+ J4 \  F
  788. LDA Music_Cur
    , ^( T* A6 Q0 u. w1 p! o8 s
  789. CLC
    8 R! h' y0 o, z! h0 ?7 k8 J
  790. ADC #$01
    . t% q% x2 s0 c# r
  791. JSR HEX_To_Dec  N2 i! I( d& D. _5 K- k/ i
  792. LDX PPU_Cur- {, ?* Y9 E9 B1 R
  793. LDA #$FD* C0 a- f6 Z3 t( p+ a3 g
  794. STA PPU_Addr,X
    ) g" I- Z0 K( r) K6 B9 _9 Q& Y
  795. INX
    2 M) @& U7 Y% O/ s
  796. LDA #HIGH(Play_Index_Pos)
    2 D8 L$ S& ^1 F* }3 i% ~
  797. STA PPU_Addr,X
    . h3 Q; O' t  C6 @5 ]' c
  798. INX& Z6 V; W  u0 o' b# @, A+ Y5 w
  799. LDA #LOW(Play_Index_Pos)
    ' h1 J0 p% U) K: L- i. E# ]
  800. STA PPU_Addr,X
    : u# o2 a8 R% Y# I" a4 ^; N, \2 o! d
  801. INX
    7 l6 Q3 O% w+ j3 [

  802. * Z6 ~  D( I/ Z
  803. .IF Music_Song_Total > 99: P1 C& N0 `& z3 k) `% a- t. `, I
  804. LDA DEC_H- |1 {5 A( \' h' J
  805. ORA #$30
    6 s4 z; l+ n3 B# Z7 i
  806. STA PPU_Addr,X" B; }0 }8 n) S2 w* d3 _9 X  m
  807. INX' f0 M% d8 W3 ^$ S
  808. .ENDIF( T; K7 y* l3 \8 J
  809. ( I# F% b" L9 [7 g8 s
  810. .IF Music_Song_Total > 9, _3 n+ V! j+ {. T" H& Z0 W  a
  811. LDA DEC_T
    % k  m2 M  w% R: V+ G" u; R: B! }
  812. ORA #$30
    4 E" @" c6 |# G& r" ]- S) C; N. w
  813. STA PPU_Addr,X' F+ j/ b" ]2 \% c7 Z5 D
  814. INX
    " k9 c6 J' @% W0 m: |. P' P/ L$ r
  815. .ENDIF
    8 P) P1 ?5 j- B; P
  816. / y+ H  E( Q. L2 W
  817. LDA DEC_L# |$ D* F$ N/ ~8 _- x2 Z0 P9 \
  818. ORA #$30
    9 B+ D% {; Y  i
  819. STA PPU_Addr,X
    + r0 E; F1 N3 z) A
  820. INX7 S5 t# I2 d$ w) h
  821. ' N  j# h; a7 w* P2 a7 e! u8 b2 I
  822. LDA #'/'. d, R% |  S7 |7 B
  823. STA PPU_Addr,X
    5 D; J' e6 `( U( u# u- H$ V
  824. INX
    ( d8 r  Q; ^  O- w  Z& X
  825. Music_Show_Total
    . s( S. S% E6 K1 M
  826. LDA #Music_Song_Total! Z% _. O, V$ j/ M0 o
  827. JSR HEX_To_Dec9 S3 g! a! q4 i* I0 P

  828. 2 \4 S& U+ J! W! F% A4 |1 v" d: @
  829. .IF Music_Song_Total > 99
    ' `0 G* ~0 K* N- f" h; H6 A
  830. LDA DEC_H
      o3 c  |0 {; ^$ e
  831. ORA #$30
    ! q8 J/ }/ _9 o7 c4 m+ b8 e
  832. STA PPU_Addr,X
    / K( ?5 P& y" N8 L. n$ X; J9 f* o
  833. INX3 \. d1 U$ X- Z, Y* z" ]! v
  834. .ENDIF" L: t) _# C3 w) R' @
  835. & O5 Q5 w5 o1 P6 f
  836. .IF Music_Song_Total > 9
    5 M  H1 g; I( c% E" z
  837. LDA DEC_T
    . R9 |' Z7 [" S* [' y' l
  838. ORA #$30
    4 v1 \' y; R: ~) E# E4 k5 V( C3 U
  839. STA PPU_Addr,X
    2 k7 I. R$ D2 ^* e3 o
  840. INX
    / j5 o/ J' ^  t1 Q
  841. .ENDIF& |0 ]5 n" e; U- m9 Z- S; L6 @, q) a
  842. : t# `2 _6 b. W; G7 K
  843. LDA DEC_L$ P4 A" ^' A. |, d- T5 `9 A* ^
  844. ORA #$30
    $ v2 M! j" j; L8 {! P, p
  845. STA PPU_Addr,X
    8 f# D' Q$ m" S& |# e' h, T
  846. INX: H! t8 m1 k8 f
  847. ! Z8 y6 o& C8 p" Y
  848. JSR PPU_End' [0 S' r( c$ r, K% Y; k; G
  849. Music_Show_End. ~4 u( g2 C$ i$ Q- ~
  850. RTS
    9 a* Q- G: Y: T3 p5 v, ]) h
  851. 1 u7 s$ O3 o( G7 k3 A2 Z
  852. ;==============================
    8 ?; m0 t. ]( u0 L
  853. Time_Show;播放时间显示3 M& N. o/ j$ h2 E+ [
  854. JSR PPU_Addr_Set0 P/ Z8 z0 E6 `  k- ^8 ]
  855. LDA #HIGH(Play_Time_Pos)( `1 d$ Z4 }8 C2 d: l" {" g
  856. STA PPU_Addr,X, E( y! G3 r& ?7 X. {0 V4 B
  857. INX
    ; c" g6 K4 P7 G0 k& i1 W7 L! b
  858. LDA #LOW(Play_Time_Pos): i& K+ s. w/ G- M4 ~/ p
  859. STA PPU_Addr,X
    : {5 j* u# P9 H( I' y9 s" V
  860. INX
      z4 K. r; V  Z# S% I: F% r
  861. Time_Show_H
    7 s4 M6 f+ Z3 [  ^8 C0 q
  862. LDA Time_H
    # ?% M5 p+ B. }; p
  863. JSR HEX_To_Dec
    2 ]; S& d! [8 W
  864. JSR Time_Digit, h' w4 H& k6 q4 F' Z
  865. LDA #':'
    ; r- Z' U! ~4 t1 h
  866. STA PPU_Addr,X
    1 F# h; j: L, z+ ^0 V
  867. INX6 G2 n  o7 J# @, H9 i; ~- y
  868. Time_Show_M# a1 F" V5 g  ]  H* r
  869. LDA Time_M
    ' ?- p0 b: r( V( Z/ x! `& m
  870. JSR HEX_To_Dec
    9 X/ n# _- }3 f" Y
  871. JSR Time_Digit/ G  z/ [$ Q0 `$ T# h: f# E
  872. LDA #':': _4 o( ?3 z3 m. H  p& N' h7 J; O# ]
  873. STA PPU_Addr,X2 e! i% C) P' }
  874. INX
    0 }3 D1 k- U, t
  875. Time_Show_S
    ( {( B. p# v5 C- p, u9 P
  876. LDA Time_S! u. x, ]* T) _7 I% N7 B* U; \
  877. JSR HEX_To_Dec
    $ S3 f! i% N( K3 n' B& M
  878. JSR Time_Digit2 G' r+ j/ M; i7 Q4 R
  879. JSR PPU_End- d% U1 ]2 ^# P. M0 O* v
  880. Time_Show_End
    7 ]" [9 X( g- G: H" W% u1 b0 }6 y
  881. RTS0 ~) s- p1 ?" H6 H
  882. * d; [3 |0 l  X* [* D/ U: a
  883. Time_Digit  X  @3 {0 ^5 q  q+ K
  884. LDA DEC_T
    1 J0 X* n. y5 V. f) E
  885. ORA #$30! E4 l4 P9 a( B6 F0 A8 z% B) M9 ]1 O
  886. STA PPU_Addr,X- Q, g' E. F" ?( ]3 Z+ M
  887. INX
    ! D- e) N6 H( L6 F% C1 c4 C5 X% Z
  888. LDA DEC_L
    " V& r% M3 ^, H) I5 P9 N
  889. ORA #$30
    $ k& Q/ W2 j+ t* @9 i
  890. STA PPU_Addr,X& K  L! `' |# A5 {, s' J5 U
  891. INX7 p+ U  a$ ~9 \
  892. RTS# i" h1 \% Q* X
  893. & j, v7 u7 S$ m$ p
  894. ;==============================# d+ c8 s/ i7 Q! y& i
  895. Time_Count;计时
    ( U$ L' h0 [# Y3 d9 ]& I9 W( W
  896. LDA Music_State
    ; K4 ?3 ~& c9 Z, s; R/ C; P
  897. ORA Time_Wait_Cnt+ l* L+ s' k, w, [
  898. BNE Time_Count_End: g7 q' p2 I1 R
  899. INC Time_Cnt, j" e, Y( Z% d
  900. LDA Time_Cnt- ?7 Z6 T2 U$ z) ?4 [0 j8 O
  901. CMP #60
      f" E9 v2 c5 B% \
  902. BCC Time_Count_End1 N' E2 x, |% ?) h% g! T2 N' ~
  903. LDA #00" u3 t2 b* Z  H9 z* l6 f
  904. STA Time_Cnt
    % S; S$ [9 ?/ q
  905. INC Time_S
    8 q: J- K3 G) d3 _9 |3 Q3 b( R; f
  906. . ?5 E; g" @+ ^# G
  907. Time_S_Cnt
    . L9 M9 _# _& {  R7 Q
  908. LDA Time_S; |. i7 V  p' k
  909. CMP #602 S& u8 L. P! W) K) y: [+ d9 h
  910. BCC Time_Count_End
      v/ m! y4 f4 f$ L" f6 T/ J
  911. LDA #00' j: o; p' j2 s  ^  p; N9 q
  912. STA Time_S
    : j4 A! s$ W, l- [! j; b
  913. INC Time_M" `3 Z5 \$ z3 P& b
  914. ' M0 `5 J; M9 g( v; z" n
  915. Time_M_Cnt7 x) E) u2 q5 m! }
  916. LDA Time_M( D7 M& Z3 [% n4 B8 C5 ]
  917. CMP #60
    4 g$ l  ?; I/ a/ t
  918. BCC Time_Count_End
    ) A! d, S. v: R( M
  919. LDA #00
    . N( u/ c4 e' d+ G
  920. STA Time_M
    ( o: i. l1 \" O! j. t% b
  921. INC Time_H
    + |$ w% ^* m. f, U$ I
  922. - c2 S, Q0 I8 f' L
  923. Time_H_Cnt
    5 u0 A7 g) }0 V
  924. LDA Time_H8 }% I, g0 s" w1 Z" [8 Y
  925. CMP #24+ r9 {7 Q7 _  k2 H( }9 l; S" e
  926. BCC Time_Count_End: E7 n/ t4 L+ U# P+ U& v
  927. LDA #00+ J( G7 G% B/ X3 A9 U0 x
  928. STA Time_H
    9 Q/ Q% Y; e5 c7 n
  929. + g5 g; I+ P7 \. K  N
  930. Time_Count_End# e8 E& O+ C6 H9 k1 J$ a& A
  931. RTS, m# x- e' o; `5 R# l1 h
  932. 8 x: Q' n- B* }
  933. ;==============================9 m8 a9 ~& N7 U0 }- s
  934. Time_ReSet;播放时间重置
    / V, \( u* o- Y3 M
  935. LDA #$00  m. e2 G% P% p( m# [! ?7 [, ^6 ^$ H1 D
  936. STA Time_S* b! L7 q2 H0 U
  937. STA Time_M " h4 V- }, m7 H. b  \8 D/ t- }
  938. STA Time_H( n& @2 Q1 }0 B- z- k, g
  939. STA Time_Cnt
    , h8 D$ R& I' w! a+ U1 }% W# y( Z
  940. RTS) x5 A: a# u8 j+ F! U" z# o; [
  941. / L  e" l" \# B) X
  942. ;==============================
    2 y6 @/ x& j0 [/ E
  943. Music_Bar_ReSet;音乐条重置
    # K& O6 F7 c) B) I' }$ i- u
  944. LDA #$00! N/ ^% K; g, j- R
  945. LDX #$00  Z- J" U8 e/ i% a5 |
  946. Music_Bar_ReSet_Set
    " g  _1 |' c6 r
  947. STA Sound_Bar,X
    6 F" I9 y- P$ t7 F
  948. INX
    3 y- _' e5 _$ [9 g- e: K  ?& J. L
  949. CPX #$10
    / y. `8 c, w- b, [/ w$ y+ p; W7 q
  950. BCC Music_Bar_ReSet_Set
    1 ^/ w) e6 y! _4 j' D- ]: @
  951. RTS
    9 D% [- t+ S; \; f( L
  952. , K* n( Z: Q% p9 b- ^) ]. I
  953. ;==============================
    6 @$ {, }- X7 K$ M9 W
  954. PPU_Data;PPU数据写入3 ?* B) L9 K4 ?3 ]& \. @# l6 j
  955. STY Data_L) w2 q3 C' T7 i+ F; K
  956. STX Data_H/ P0 x1 _+ D# ?+ ]$ b( l3 N3 ]. o
  957. LDY #$FF" Z3 S0 {( G9 U8 [+ O
  958. LDX PPU_Cur
    + ]3 s- R. G' o5 R
  959. DEX4 n' w: m/ G* g" [
  960. PPU_Data_Beg
    ) @; c2 ]4 J$ A7 ^- e2 Q; j5 @
  961. INX. \2 u) @' V6 v/ \  L) c
  962. INY; b2 Q/ H! b2 L$ a, T2 ~# @& y
  963. LDA [Data_L],Y
      T$ N! z# X$ }
  964. STA PPU_Addr,X
    , J( q. T2 P( M9 g/ X* K& U
  965. BNE PPU_Data_Beg1 o5 ?( H9 _- t& E4 l6 P
  966. STX PPU_Cur, ?. B8 b  S$ w2 N5 O
  967. PPU_Data_End. u$ R- B7 @! S$ N- s! F
  968. RTS
    6 q# \0 p6 O$ z, J* L

  969. 6 J7 w% o5 U/ W
  970. ;==============================
    , d+ S5 c+ n- u- x+ u: I1 a( D
  971. Music_Stata_Show;播放状态显示6 q: E) K/ v6 t! H: _( a
  972. LDA Music_State! y) ^9 U) T! a- r0 @% T
  973. BEQ Music_Stata_Show_Play
    # v: {) S- j* d  H, o( [* p
  974. Music_Stata_Show_Stop
    0 A! [% }" T; P, Q. x) z- U, k
  975. LDY #LOW(Music_State_Stop)5 Q6 P1 m. T) _2 r0 w
  976. LDX #HIGH(Music_State_Stop)
    - y3 z2 d0 F2 P; y1 |
  977. JSR PPU_Data
    ' q: n) W: N& `8 o1 p
  978. RTS1 i5 K1 i; {; p7 _9 B
  979. Music_Stata_Show_Play
    - n5 [2 {  U" h/ y
  980. LDY #LOW(Music_State_Play)7 B+ l0 ^- e, @- f
  981. LDX #HIGH(Music_State_Play)& Z, a& l/ J; }8 v: S
  982. JSR PPU_Data
    ( l3 |2 o( v! v- v$ B
  983. RTS$ [+ B2 b! e0 r- J" v* ~! q4 s9 {
  984. ; C  q2 z5 k5 }+ {
  985. .IF SOUND_BAR_SHOW_ENABLE
    & b9 D; n* v) A2 t* Z4 P
  986. ;==============================
    6 u0 y8 u" g9 v8 @+ }, d6 t
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    + Q9 x. o* A. P9 S$ i" D; b
  988. LDY #LOW(Sound_Bar_Text_Data)6 |9 r0 l7 r6 [7 w) k4 c
  989. LDX #HIGH(Sound_Bar_Text_Data)
    5 y  L: {0 r  p9 b8 M
  990. JSR PPU_Data' R8 ^% P" O7 N: Y* U
  991. RTS
    + }1 e1 ?5 v" B( ]& D9 N
  992. : }/ B  Q- ?8 P7 O
  993. .ENDIF
    : t% N* \6 c1 c2 y) `# h# S/ i
  994. 3 [7 w- q/ a, ]5 \3 o0 Y! b
  995. ;==============================
    6 ~0 f) b* s4 U. {( y4 T
  996. Set_NameTable_Attributes;设置命名表属性7 d0 \3 \' F- U$ @
  997. LDA PPU_STATUS
    & }8 g  V5 V. A' Y+ ~+ \4 {# n
  998. LDA #$233 z" W/ o2 F( o
  999. STA PPU_ADDRESS) G, c6 X6 U4 p  V! Q
  1000. LDA #$C0
    * |6 O. ]; C" {
  1001. STA PPU_ADDRESS
    : G( K4 h2 U% M; ^) q
  1002. LDX #$002 g: z2 s. A% r" f9 m
  1003. Set_NameTable_Attributes_Write2 ?; ^4 ?6 w, q
  1004. LDA Palette_Attributes,X
    $ V8 [, t! K! r3 g
  1005. STA PPU_DATA# F) z  t/ T3 g  S" `& Q; l
  1006. INX+ |9 [7 |. ]! L, X/ {% K) y
  1007. CPX #$40
    ! B5 J+ p" _; u/ k9 _
  1008. BCC Set_NameTable_Attributes_Write* p( J# q" G; Q, F0 ?% v1 b
  1009. RTS
    ! b. G4 }/ o# c
  1010. 4 i) s. n* N" b7 ]
  1011. ;==============================
    ( K0 P( \$ o: a+ K1 X9 Z* w. P
  1012. Set_Palette_Color;设置调色板数据) ^% A8 m( T+ S" X% X( E* A6 R
  1013. LDA PPU_STATUS$ r1 r; i/ l/ s& o& T
  1014. LDA #$3F, s  M# T+ c( \
  1015. STA PPU_ADDRESS
    4 |: K- z! i  R5 i
  1016. LDA #$008 j; V: t- c" L& D
  1017. STA PPU_ADDRESS
    ' u# @! O. k: A% O8 ?; V" T+ `
  1018. LDX #$00
      h, }( y2 A3 D- L, ~; f3 ^
  1019. Set_Palette_Color_Write
    8 c7 R5 |* p8 o8 U. S  h: O
  1020. LDA Palette_Data,X( Y6 v  t$ n& a9 `) _- F* v
  1021. STA PPU_DATA& L, ~( ~" t& \
  1022. INX
    * t% U3 x* `) G  n" }) d' P. l
  1023. CPX #$20
    ( d2 ~0 u( a# r$ k0 Z' K( A- Z
  1024. BCC Set_Palette_Color_Write% s7 W: L5 f" j% b& j% N( \6 ^
  1025. RTS5 ], C( L$ [) T

  1026. , \& h/ b4 ^! e$ R) S  d. Y- k
  1027. ;==============================
    : I3 G) I% h' l5 f# _& D7 E
  1028. Init_Palette_Addr;初始化调色板数据1 `1 X6 ~- s& K; A
  1029. LDX #$00
    : I# x6 m% X+ ]) ]3 [7 f
  1030. Init_Palette_Addr_Write
    3 c2 \6 X) v5 W1 l  c% a1 {
  1031. LDA Palette_Data,X! b3 K, v* B. M2 j# t. T4 K1 {! ]) t
  1032. STA Palette_Addr,X4 {$ _1 o, i2 j$ k& Z/ F( X/ C# \4 k
  1033. INX
    0 j- ^: @9 p, R! o
  1034. CPX #$20
    # T* O/ A7 B9 T. r$ P
  1035. BCC Init_Palette_Addr_Write
    % j: j1 X/ T8 Y* h* s4 @2 A
  1036. RTS
      Y% `1 k9 z9 E4 H" j; H9 [! f

  1037. ( V) M: O5 m/ U7 L) E& z
  1038. ;==============================
    . |6 @3 O( l+ B: P. R! c, _
  1039. Update_Palette_Color;更新调色板颜色' A- s7 i& r0 }3 j
  1040. LDA Show_Track_Name4 G- n1 z" X; O
  1041. BNE Update_Palette_Color_End
    + g* l3 |% c- O  B
  1042. LDA Palette_Update_Flag+ Z. O% l0 F+ i( k
  1043. BEQ Update_Palette_Color_End/ Z% R8 N+ C5 `
  1044. LDA #$3F
    7 v  K" f8 G! O; N
  1045. STA PPU_ADDRESS
    3 D. s7 l. e4 y$ D3 g1 j
  1046. LDA #$00
    3 ]( e; I+ R* x  k7 `
  1047. STA PPU_ADDRESS
    " q( S1 L  e1 T' Q6 l! H
  1048. LDX #$007 d% [+ Z9 H- o. o9 Y- E+ G
  1049. Update_Palette_Color_Write
    7 {+ C7 r, J2 H8 K$ }
  1050. LDA Palette_Addr,X
    : l9 C" f9 H+ \5 f
  1051. STA PPU_DATA& `+ C  {! C, R# S
  1052. INX
    3 Q) _5 n& D. P. Z$ _
  1053. CPX #$20
    - H* i/ e5 ]1 {; x1 H7 X( m
  1054. BCC Update_Palette_Color_Write
    ; |- G- i; r8 b; X' O
  1055. LDA #$004 x8 n4 a, e" p. W2 e7 E3 w
  1056. STA Palette_Update_Flag
    ) j4 o2 B" s# m1 r. D, U
  1057. Update_Palette_Color_End
    $ K9 O% {, B4 Z; f0 u
  1058. RTS
    # J* D8 C& W4 V( B& m5 l

  1059. . h! t: K1 @1 Q2 R
  1060. ;==============================
    9 L2 ~" |4 v1 N7 B% u  b% H
  1061. Update_Palette_Data;更新调色板数据1 _  O+ l& k  u6 E- q
  1062. LDA Show_Track_Name
    5 x9 v  E7 q4 r
  1063. BNE Update_Palette_Data_End: f0 |" ~* P; H* q4 y: k8 x/ |
  1064. LDA Music_State
    # o; n7 C2 k; I6 Z1 ?, S8 c$ j9 s
  1065. BNE Update_Palette_Data_End
    7 c8 @0 m5 c; e7 P; ~$ \5 T
  1066. Update_Palette_Data_Check
    ! B# z% x2 D! T  J" N
  1067. LDA Palette_Wait_Cnt
    . n; W* u# b7 q9 Z
  1068. BPL Update_Palette_Data_Check_Over7 W1 j* e$ K5 z+ I) ~3 i. ]
  1069. LDA #Palette_Update_Interval
    6 ^! i5 B' n+ ?
  1070. STA Palette_Wait_Cnt
    7 }$ `0 d$ ^. V" P  p
  1071. Update_Palette_Data_Check_Over( S+ D, d1 V7 c
  1072. DEC Palette_Wait_Cnt
    7 W0 v* T- Z- F8 i4 P% `- p
  1073. BNE Update_Palette_Data_End
    3 i% B" M3 n2 _' M& A
  1074. INC Palette_Update_Flag9 E4 g: _& B# _
  1075. LDA #Palette_Update_Interval
    4 d8 L  p( J/ O( r. y4 C6 {) y
  1076. STA Palette_Wait_Cnt
    9 e( c( W) @2 P2 P4 V5 s& W
  1077. LDA Palette_Update_Addr
    " f* R# m/ @: n# t3 r, P3 d
  1078. CMP #Palette_Update_Max
    7 I4 `( o5 q( R
  1079. BNE Update_Palette_Data_Set
    % z- W6 M4 |8 K  {- M
  1080. LDA #Palette_Update_Min - 1+ h" b- Z* o# {8 Q8 X" [8 L
  1081. STA Palette_Update_Addr; j" e- D0 j$ p& A, M. @
  1082. Update_Palette_Data_Set
    1 }) _+ \  ?; I
  1083. INC Palette_Update_Addr
    , h, w3 d6 D6 }6 ~+ w/ K
  1084. Update_Palette_Data_End' y5 `/ _% D2 P; y; }* c( A
  1085. RTS3 y2 N) s) m4 a  C" ~6 _9 n

  1086. + {1 B! S1 k" T2 ?+ r! B' |/ L
  1087. ;==============================
    5 x' P! W4 Y: t; Y6 T- t, s
  1088. Show_Music_Text;显示静态文本' i# s" x# }& E" }
  1089. LDX #$00
    6 @4 s7 M9 v* A* [" [0 R
  1090. Show_Music_Text_Set. y* ^4 t; x' h5 v# }) E3 k& W
  1091. LDA Static_Text_Data,X
    " P9 `2 r3 t' o. G3 O
  1092. STA Data_L
    0 `% Y- J7 u' v8 F
  1093. INX
    0 P/ @$ f. |- D  P* z2 P& d. N
  1094. LDA Static_Text_Data,X$ k# c+ r6 B( I) o6 s2 ]- |, I
  1095. STA Data_H" b7 p9 X2 \: b
  1096. INX$ y# \- q( n. ~$ a1 U
  1097. LDY #$00
    / \6 b% @* Q& B9 h
  1098. LDA [Data_L],Y
    ; E; `) ~8 S% y+ t: v: J
  1099. STA Data_Cnt
    # ~1 m0 P! d3 z( ], ^2 X
  1100. DEX
    1 R: P2 ^: u) s1 t
  1101. DEX
    0 X. a# V5 p" ]$ ?) G! f
  1102. LDA Static_Text_Pos,X% ^% X6 D3 _* b: _3 M
  1103. STA PPU_ADDRESS
    6 W8 Y7 \( d* w$ j! @
  1104. INX
    , a! [2 I2 b5 e/ V# y
  1105. LDA #$200 h  p1 c# e( D( \
  1106. SEC* x" n- J1 v9 h
  1107. SBC Data_Cnt
    2 J+ u3 E0 @5 V1 z
  1108. LSR A
    8 ]  T& ~" A3 J3 h
  1109. STA Data_Buf! x' B* n0 M+ a
  1110. LDA Static_Text_Pos,X
    * a; Z- F( E- s
  1111. AND #$E0
    - }, Y0 q5 h6 w! q2 Y9 X
  1112. CLC
    " H# k+ |, d0 |8 G
  1113. ADC Data_Buf# ?+ C# t6 b5 w5 c, I: a
  1114. STA PPU_ADDRESS5 l: w7 P" Z# ^0 I- T1 Q
  1115. INX
    # j; c- m/ A9 @' \. Y
  1116. Show_Music_Text_Set_Write
    $ _2 g2 c3 X9 Z# R! W. i5 M3 \8 t# @
  1117. INY
    5 p8 q/ X6 M3 u$ w" G$ r
  1118. LDA [Data_L],Y+ V" ?8 |: S: k% D. u5 H! Q" e. q
  1119. STA PPU_DATA
    6 k" u8 p9 Q- q4 `: a5 ^
  1120. DEC Data_Cnt6 y1 {" ~) u+ L  }
  1121. BNE Show_Music_Text_Set_Write
    : J# y# m  R  t" K* s+ F, P* u( D8 b
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    9 k4 U* @. M+ m6 H; s6 U0 p0 x
  1123. BCC Show_Music_Text_Set
    % n5 u  E5 @3 f; J
  1124. RTS
    : l& f/ h6 z% q5 B+ l7 G' k% g

  1125. ) {+ S0 g! E2 g% [
  1126. ;==============================: o- M* O6 `3 k0 S
  1127. .IF Track_Name_Pos;显示曲目信息- _7 |) p7 c" ~- A1 P
  1128. Show_Track_Info" E$ r4 I& e; _! Y6 S1 P# l# ?8 ?9 C
  1129. INC Show_Track_Name
    ! u! T" x# j- c' r
  1130. Show_Track_Info_Clear
    : `' P, D/ T( P% U$ u
  1131. LDX PPU_Cur
    & z7 ?4 F0 |( i# B* A6 `! C
  1132. LDA #Mode_Clear  ?1 I9 p% j' R5 e9 f
  1133. STA PPU_Addr,X
    ( n: {2 j" h! Q# p' D
  1134. INX, ^4 P( I/ _/ D) U8 x

  1135. 6 [4 @1 S4 Y# d7 l7 c
  1136. LDA Music_Last
    % t$ U" i6 Y# U7 o
  1137. JSR Show_Get_Track_Name_Center_Pos
    ; ]& l) w3 g! x+ P
  1138. Show_Track_Info_Write_Cur
    . m: g  o4 ]& g+ ^3 i
  1139. LDA #Mode_CntLine
    0 s, x6 r/ U. D. n
  1140. STA PPU_Addr,X- Z3 A2 h' c/ |0 @, d7 p/ v, a
  1141. INX
    & \' P# E1 K4 o: i% _
  1142. 8 a0 P9 ?( n/ o$ P2 O  e
  1143. LDA Music_Cur' m! ~7 q+ j8 F/ `
  1144. JSR Show_Get_Track_Name_Center_Pos7 e5 t# ]; O7 D' I3 _5 u- j
  1145. ( k3 B) j0 o& V* A# J' I5 r. R
  1146. Show_Track_Info_Write_Cur_Data2 ?: v+ ?3 E" X# c' u0 l# U! f% f
  1147. INY
    - I3 w1 W# H" c6 E0 B
  1148. LDA [Data_L],Y0 X! P8 n. a; }4 q# @$ c
  1149. STA PPU_Addr,X3 M/ h: w9 e, ?5 q. F
  1150. INX$ l3 G8 w1 G( p
  1151. DEC Data_Cnt
    $ _3 ~! H# c, x9 O
  1152. BNE Show_Track_Info_Write_Cur_Data; o9 v, E$ f5 S0 C
  1153. Show_Track_Info_End' L" ?: E7 r/ V" r
  1154. STX PPU_Cur3 _6 [- I4 F- }: T8 U0 k) w
  1155. RTS
    ' b2 s2 r! e1 h

  1156. # i$ d0 A6 H  [- j  @
  1157. ;==============================
    ! O, z% `- @2 A4 b
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    ! y# ]9 e4 G( g' a) H4 |1 S' Y
  1159. ASL A
    - H& f( C# s' S5 S0 Y& X% p$ V. o
  1160. TAY
    $ S4 D% q* K' ~0 a8 h( i) N
  1161. LDA Track_Name_Addr,Y
    4 ~. [0 c; F. v( {( P) f" H+ p3 U2 j
  1162. STA Data_L
    3 H+ n7 I$ S9 F* k+ ~
  1163. INY* Z* F: a: E7 \+ J* ?4 B% `7 N
  1164. LDA Track_Name_Addr,Y
    7 d9 c/ f; w) F0 p5 Z7 f/ E
  1165. STA Data_H
    & E& ~+ V3 [; A! J) M) G( ~
  1166. LDY #$00
      [9 E, Q1 [- j3 \: P1 ^" y9 }$ |
  1167. LDA [Data_L],Y
    + r# ]1 R% V9 |) ]# u" h* r! v
  1168. STA Data_Cnt7 B1 a8 s1 U4 L# g# e, I7 x
  1169. LDA #$20. d  j7 q- M6 @* s
  1170. SEC
    8 O, a) g# {2 v8 N4 r) M
  1171. SBC Data_Cnt
    & Z  i7 Z7 m4 b) `( `' s
  1172. LSR A1 }6 t: I- [( d5 p
  1173. STA Data_Buf
    : I& D2 b; F5 C7 Z& I' G
  1174. LDA #HIGH(Track_Name_Pos). l9 o4 z7 f& G' p
  1175. STA PPU_Addr,X
    & M3 q! K* n( P* Q4 j% f
  1176. INX
    0 J. _" Q6 j" G' D6 W' q4 V0 O* i3 J
  1177. LDA #LOW(Track_Name_Pos)
    6 ?7 D, `$ A8 c+ s* S
  1178. AND #$E0" I, A( c) q. P! a
  1179. CLC- V  M4 U( q& r1 M6 S2 D
  1180. ADC Data_Buf
    5 T& T4 i8 [7 l7 \# b" C  B
  1181. STA PPU_Addr,X
    , H7 S3 f( e9 B% l
  1182. INX
    9 W9 q4 Y) e8 Q6 [5 M$ R6 n
  1183. LDA Data_Cnt
    7 P% E2 b7 ]' M+ ]  M
  1184. STA PPU_Addr,X" @* ~1 h! ^/ F, _1 W- U
  1185. INX
    & c  o5 w0 R7 i, c' p, y
  1186. Show_Get_Pos_Center_End
    # W! F# z8 V( Y+ a6 `- b
  1187. RTS
    . \" S  g& w- I9 I7 e
  1188. .ENDIF
    * I0 D. U5 z+ m1 K: t7 [! b( L7 b; ~

  1189. 6 [9 r2 a5 u+ g4 K% f
  1190. ;------------------------------
    % ^) Q2 G2 Q0 S# s1 v
  1191. ;命名表数据, }, H" F$ X. r# R. s+ X; _& @
  1192. Palette_Attributes0 i( I+ h! `/ M3 H
  1193. .IF SOUND_BAR_SHOW_ENABLE
    + R$ T0 {5 k1 `& N1 q! A3 @
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    # b& A$ D1 E+ ~6 [2 q4 d9 Y. [) G+ m
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA% M4 n/ T3 E7 c& E
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$558 f$ {+ z" C! W: S( ?
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55  l! u7 D  L: I8 r, o9 [" s) w
  1198. .ELSE7 ]% p/ Q1 m, h  |+ M5 f1 Z3 K9 _
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    / ]; I" q8 R: C, M+ D2 N
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF& E. q! r& y) i; G
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    " t( j0 ^7 z- o; e0 O2 Z
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$552 E2 z' I7 ^- f% U
  1203. .ENDIF
    8 g  {" V7 x$ V. W/ I4 j

  1204. 2 P! Q1 {0 `% A& [1 F0 t' l
  1205. ;------------------------------9 Y6 d3 x2 o" ~
  1206. ;调色板数据& j, Y! ]/ B* i4 N
  1207. Palette_Data
    - W* e  l5 T" \& X" E
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    / p0 c2 w; @6 D
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    / O& G7 W6 p1 A7 r
  1210. ) I/ R7 ?' a3 |7 o1 t4 Q
  1211. ;------------------------------) r( Q) m: M8 F
  1212. Static_Text_Data
    & a- R; E- v6 P9 M4 I1 x4 p
  1213. .WORD Static_Text_Title_Data
    ) ]3 n* I; g* b, j1 g; u+ U
  1214. .WORD Static_Text_Author_Data5 s6 _1 D+ S3 H* A0 Q# ^! I* t
  1215. .WORD Static_Text_Date_Data$ j6 ^) x) C5 g% U. _2 X" r2 k
  1216. Static_Text_Data_End
    5 [9 D5 [! A4 ~7 Q( B& Q, `2 Y

  1217. : R$ z( q4 v; A$ a6 O
  1218. ;------------------------------: T$ l. Z4 z+ a" i0 z( W
  1219. Static_Text_Pos3 f, K$ A  ]& K2 q1 F' [: |
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)0 R3 B: }) C8 I4 _
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)" _. c# s2 c3 M1 M/ q
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    $ S% V. W8 p4 X6 C7 W
  1223. Static_Text_Pos_End
    / p; k7 ?( ]$ G5 l2 w! d4 |
  1224. . `! C, f* Z  q) u1 |! A) J$ [
  1225. ;------------------------------; e- h6 g" g, D8 v* h
  1226. Music_State_Stop! j8 X4 ^0 d4 t+ Q( f) H8 ]
  1227. .IF SOUND_BAR_SHOW_ENABLE; s- d$ h* s& N  v8 s
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    6 o+ I9 S; W/ A$ I
  1229. ELSE
    ( l, [6 Z6 p$ H9 F
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00- B# X* D* |" g1 N
  1231. .ENDIF5 ?# v6 {4 m" \1 ?& Q2 G
  1232. Music_State_Play7 a9 k" e& _: V
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00) e5 p( |7 K8 P; j5 |

  1234. - P: R5 G! q( g. `
  1235. ;------------------------------8 C: X( ~! K, H$ b3 f, O
  1236. Sound_Bar_Text_Data;声音类型文本: |; W; @3 R+ M  R/ ]
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    7 _6 Z8 k/ m. H( p% t
  1238. .DB "SQ1-",$FF( t7 t7 ~) W# w
  1239. .DB $FE,"SQ2-",$FF. Q1 ]" \; X- R* O( G
  1240. .DB $FE,"TRI-",$FF
    $ k; u7 w$ n+ x; T- N5 Q" l# r# `
  1241. .DB $FE,"NOI-",$FF7 b8 ^+ f7 W) X% w" M
  1242. .DB $FE,"DMC-",$FF,$00
    ' B$ v) ~  p, b" W
  1243. 5 x+ t8 m2 E4 T$ [& \/ ^( c; |
  1244. .IF Track_Name_Pos& @. N$ s6 q  M5 a6 D. [
  1245. ;------------------------------7 y% j$ p, ]7 g. {8 _9 J' d
  1246. Track_Name_Addr;曲目名地址索引5 o* |- P1 S6 M: J7 v, Q2 s
  1247. .WORD Trackr_01* S2 q- o& Q# M2 R! g4 ]& Q
  1248. .WORD Trackr_02
    : n' x* w  [% ]
  1249. .WORD Trackr_03
    ) T5 K; t. g2 L5 d; r4 b
  1250. .WORD Trackr_04, A8 J! ^* x8 t! e5 \, T
  1251. .WORD Trackr_05) Z7 i- _* ]$ ^) L7 q
  1252. .WORD Trackr_06. z, M$ K6 u" g
  1253. .WORD Trackr_07& V# z, A+ n) }3 K. t
  1254. .WORD Trackr_08
    " q6 T- E' Y# T5 [* f8 \# [
  1255. .WORD Trackr_09) e* W$ q8 _; c# d3 j
  1256. .WORD Trackr_10
    , ?. J: c$ c2 a8 n& x8 D* p
  1257. .WORD Trackr_11
    ' ~+ {# j7 c* [! ]; V# ?
  1258. .WORD Trackr_12
    - t& [: n' _8 G/ y$ ~( t; y
  1259. .WORD Trackr_13
    ! d0 m1 k6 o) ]- D& Y! H' b% K
  1260. .WORD Trackr_140 M7 d/ `1 }' a; v9 T
  1261. .WORD Trackr_151 w/ o+ y: C: v" F7 V
  1262. .WORD Trackr_16
    5 A' {& u: @6 K' ^) l
  1263. .WORD Trackr_17/ g( K) Q0 v) Z/ z- h4 G
  1264. .WORD Trackr_189 p7 S  g* f( k/ [% P! G. e8 M9 v5 J
  1265. .WORD Trackr_191 t& J5 B& p: _$ {* K0 K
  1266. .WORD Trackr_20
    , }$ `4 Z; y; I( b
  1267. .WORD Trackr_21
    & h( H0 Z, V, q' k4 K& e  S
  1268. .WORD Trackr_22
    5 ~8 z% |# I: S7 X4 M$ K7 t
  1269. .WORD Trackr_23
    3 o, A& L7 X( `0 ]/ F% p
  1270. .WORD Trackr_243 z# Z( L$ o! S2 w! h+ S
  1271. .WORD Trackr_25. E4 {- {3 k" M2 |: ^
  1272. .WORD Trackr_26- t  b6 v* C, h" M; `* @- V
  1273. .WORD Trackr_27+ z9 G6 P% P: C) N
  1274. .WORD Trackr_28
    ( u. J: N: w5 [5 P! n
  1275. .WORD Trackr_29
    % b- {. ^! c$ i6 l: D
  1276. .WORD Trackr_30
    : A6 t: `6 s5 F5 l. w
  1277. .WORD Trackr_31
    3 d4 Q# w! t: E. Z7 l3 E
  1278. .WORD Trackr_329 E" [/ w8 D+ ~% \9 V0 c
  1279. .WORD Trackr_33" ^) Y; x( Q* y1 @/ ^! c! K
  1280. .WORD Trackr_34
    9 X' M/ o, R) Y
  1281. .WORD Trackr_35. T$ w! Q8 v, u
  1282. .WORD Trackr_36
    % r* Z7 f4 P$ ?: b$ V" }2 \1 X
  1283. .WORD Trackr_37. }" Q. b3 O9 d" `/ m
  1284. .WORD Trackr_38+ e0 V! l, K6 Y9 ]# s! r! N, O
  1285. .WORD Trackr_39- s0 A% v4 d, M% N4 g% E) _- T9 a

  1286. . D6 X9 j! k+ n4 U  X
  1287. ;------------------------------+ ?0 n+ {; r7 \
  1288. Trackr_Name_Data
    # h# T3 A5 |- n
  1289. Trackr_01 .DB $05,"BGM 1"
    3 Z9 b6 A+ n% m. C) ^8 I
  1290. Trackr_02 .DB $05,"BGM 2"
    . J$ \' b0 {! }) a3 N
  1291. Trackr_03 .DB $05,"BGM 3"# w) z' V( E/ B& ?% z1 @" G# m$ C
  1292. Trackr_04 .DB $05,"BGM 4"
    0 J- P- b/ w4 A7 R) M
  1293. Trackr_05 .DB $05,"BGM 5"0 E/ A7 _3 D9 T( u
  1294. Trackr_06 .DB $05,"BGM 6", v) @4 H3 p6 g+ x$ w! I2 ]
  1295. Trackr_07 .DB $05,"BGM 7"
    7 f) j1 y- f! s. g/ h( c  B" q
  1296. Trackr_08 .DB $05,"GREAT"
    $ q4 I2 _# ^! P6 ^# h
  1297. Trackr_09 .DB $08,"BOSS BOM"; u, Y( h' g) w5 g7 `- A- `
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    $ [4 R. a: c1 \0 m
  1299. Trackr_11 .DB $07,"P CLEAR"
    5 m# j1 k$ G2 Q+ F; a
  1300. Trackr_12 .DB $07,"A CLEAR"9 y. ~1 @% A$ G" J" I& j0 u
  1301. Trackr_13 .DB $04,"OVER"- z% ^0 H3 r" f7 ?; r
  1302. Trackr_14 .DB $06,"ENDING"
    " l/ z, f6 f6 Y" V, f
  1303. Trackr_15 .DB $04,"SUTA": R  C/ A( s" W& |% C/ Y
  1304. Trackr_16 .DB $07,"THUNDER"
    0 o4 M8 X" |3 I8 Z7 r
  1305. Trackr_17 .DB $04,"SHOT"& ^8 V0 t% l( G  T& W% x* b
  1306. Trackr_18 .DB $05,"LASER"
    % ^, s6 G: z- f- A2 m( Y- y. G
  1307. Trackr_19 .DB $06,"SPREAD"& _- K5 O( l: J1 U2 }
  1308. Trackr_20 .DB $04,"FIRE"" z9 N  X6 t6 ^4 d* X, _( [
  1309. Trackr_21 .DB $06,"B SHOT"
    : p1 J' d$ ]' Q7 o2 U0 U5 s, p; r
  1310. Trackr_22 .DB $08,"T DAMEGE"
    , a; Y& [3 s7 n, Z7 i- T
  1311. Trackr_23 .DB $07,"HARETSU"
    4 z4 F( e- M  r  V
  1312. Trackr_24 .DB $05,"T OUT"" l/ r: a' t5 W$ n3 _) j
  1313. Trackr_25 .DB $05,"Z OUT", G+ E5 {) |' {* Z# R% O
  1314. Trackr_26 .DB $05,"A OUT"2 {$ Q. s( G- f3 D, e" S. y
  1315. Trackr_27 .DB $04,"ROLL"# c7 k2 ]+ O1 o! d6 N7 n
  1316. Trackr_28 .DB $06,"APPEAR"
    ! h+ D1 O( F7 q) L
  1317. Trackr_29 .DB $05,"POWER"
    * W  Y  A/ _3 @) Z4 {* B
  1318. Trackr_30 .DB $07,"BOKK BK"
    ' @' K' I7 R! b) `) q7 r' a# b
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    6 ]# K8 o. i4 w! P3 S2 i
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    5 }1 s! C. T' |
  1321. Trackr_33 .DB $05,"ARUKU"" `+ n4 I9 K4 V& v( C, z( I
  1322. Trackr_34 .DB $06,"JIWARE"/ G- R' {; U  `: Y. a2 D
  1323. Trackr_35 .DB $05,"SILEN". i9 S+ F; k% h7 I$ ^
  1324. Trackr_36 .DB $05,"P 1UP"2 o5 x( \0 S8 W: d+ v
  1325. Trackr_37 .DB $05,"P OUT"
    ( {2 Y/ Z* H: Y( P( O. R& `
  1326. Trackr_38 .DB $05,"B OUT"
    : f5 Z5 G, k& @0 l6 g. `0 |+ ?- U  F
  1327. Trackr_39 .DB $05,"PAUSE"; D. F1 y' j" G7 c% ?! R
  1328. / @; F$ ^# Y8 O: F$ x9 o
  1329. .ENDIF$ M% J3 o( A+ ~' ^7 z  N, u  A

  1330. 0 o& g. p, ]! q0 T9 N
  1331. ;------------------------------
    * v& n3 f8 ^7 R, U
  1332. Static_Text_Title_Data;静态文本数据- e; Y- A. K- ]% A1 p5 c
  1333. .DB 12
    7 h8 @( P, c! W: l5 D
  1334. .DB "SUPER CONTRA"
    ' v5 M4 ?- W5 T
  1335. Static_Text_Author_Data
    ! J, O/ E2 n" z: O% o# b
  1336. .DB 23
    0 r; q2 i* x: t" J* [0 Q7 B
  1337. .DB "EXTRACT BY FLAMECYCLONE": F! H( v8 V5 C$ {! \$ ^/ `6 X* l
  1338. Static_Text_Date_Data
    9 |" `+ y2 X$ M/ D4 [. i2 f" U
  1339. .DB 10( _, Z& R; t. V! C. E6 [
  1340. .DB "2023.07.11"
    " B; ^( s: I6 d: K4 r$ D5 J& x
  1341. ! h- ~- v, Q$ s+ ^& @' d% z
  1342. .BANK RESET_BANK & BANK_DATA_MASK: n$ A5 b& b* d: l8 O
  1343. .ORG RESET_ADDR
    9 m5 y# q1 N' i% Q- u$ r

  1344. % J- ^( C- C8 ^8 d- ]; F
  1345. " n- P1 r/ v  F- T+ h$ ]5 Q
  1346. ;==================================================& E  H+ H$ r- j) \" M( ]# X5 r" c8 b( x
  1347. ;切到主程序bank& _; W, o4 p' n& J
  1348. SwitchMainBank6 D; w2 e7 P; w5 `/ v5 M6 a7 k% {
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    $ f+ N- o3 Y2 C6 N4 t3 R) x8 ~
  1350. JSR SwitchBank8000" A/ S+ r: I- F
  1351. RTS5 p/ g- N' O) q$ O) M6 W

  1352. . S! l$ F( |8 `5 B- y
  1353. ;==================================================" n% |6 d: S2 J+ N  q8 x. T9 I9 M
  1354. SwitchBank8000;切换bank到8000-9FFF
    : l3 f2 y5 e, K* o4 @
  1355. PHA
    9 U+ Z" L" }- L- V- b5 |2 e( D
  1356. LDA #$06. [+ L- ?' d2 C+ V+ s0 L
  1357. STA MMC3_BANK_CTRL' K+ y6 G7 A) x3 ]; Y1 ?2 ?& H
  1358. PLA' L1 n2 R* f2 A# E  m, h
  1359. STA MMC3_BANK_DATA- }. ?9 @0 K4 X. X) |" \5 w" j
  1360. RTS
    ! p' S; |( U. t9 f( R! f
  1361. # C' i9 v6 V+ _1 B2 Y9 ?
  1362. ;==================================================
      {. O% }  w- j3 `
  1363. SwitchBankA000;切换bank到A000-BFFF
    7 v% X4 K- X9 z- l+ T
  1364. PHA0 Q$ ]5 S2 ^0 h5 X* O
  1365. LDA #$07; h) p, c" ~  |" L2 M2 L5 P' n
  1366. STA MMC3_BANK_CTRL
    % F* @5 S6 ^9 D8 b
  1367. PLA
    6 b- w; f9 S; I1 s) U* ~
  1368. STA MMC3_BANK_DATA* p! e6 {2 ]4 I) i- ]# k% l. }5 I
  1369. RTS0 M4 c. \- t4 z
  1370. 1 @& F) n% s7 Q. |  w
  1371. ;==================================================2 h, ]+ C( k1 J6 N9 K9 }+ H
  1372. Sund_Bank_Init;音乐bamk初始化
    9 E/ @0 R& o$ p, _9 ?- b, w
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK! x5 z0 g* q. i; t9 `2 G1 x
  1374. STA Music_Bank_8000; u( }# u9 N' J0 R6 t" }8 q
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK6 n1 L0 p# \9 T# Q' X' b- a- F
  1376. STA Music_Bank_A000* M' t' K0 ]0 s9 h3 D5 u
  1377. RTS
    9 f2 N: {& F$ Q3 }

  1378. " z* D! I" Q. W3 ~2 Y% }( Q
  1379. ;==================================================4 o9 b: o: f, s% X8 [- v
  1380. Sund_Bank_Set;切换音乐bank
    ) `$ V2 {2 c& I- p$ T
  1381. LDA Music_Bank_8000
    ; X4 K4 w1 R' D. i/ f8 J8 Z+ u
  1382. JSR SwitchBank8000
      ~4 w8 W! }& ]/ F' s" \8 v
  1383. LDA Music_Bank_A000/ x; n$ C7 l  D7 b- \5 [
  1384. JSR SwitchBankA000
    9 G* t& c. c+ \2 L6 c
  1385. RTS6 v9 U0 Y3 E: O% Y& V

  1386. - W/ T& o( V, A9 h
  1387. ;==================================================
    # V2 b+ _2 j( N. E1 Q3 B
  1388. Sound_Init;音乐初始化$ O' @' |# P# \- {
  1389. PHA. v, @" h1 z6 T
  1390. JSR Sund_Bank_Set
    * @. O" s  Y' _- g5 O
  1391. PLA+ V0 M; [  @: W- i
  1392. JSR Music_Init_Addr  q! L9 Z% \7 U, t, `
  1393. JSR SwitchMainBank: A" e; L' J9 H' d- n

  1394. 9 I  E  i6 S5 z6 Q
  1395. JSR Music_Bar_ReSet: X/ `( r, [! S) B
  1396. JSR Time_ReSet; _9 @# Q  T8 G8 T. R$ @
  1397. LDA #$00( _% [$ h4 q; @) I( r6 Z
  1398. STA Music_State+ k- M) z( [! ]% m
  1399. JSR Music_Stata_Show
    " Z! C1 w( O* B$ `
  1400. .IF Track_Name_Pos
    7 m, x  t0 Z, y, C' L5 w
  1401. JSR Show_Track_Info( ?- Y5 u: o0 x9 O
  1402. .ENDIF+ i8 Y4 ]3 R0 |, C
  1403. 4 I) F$ c4 a0 |3 m. b
  1404. RTS
    ' V; A! v- \' Q( B
  1405. ! \5 _) D' U. a& ^" k
  1406. ;==================================================0 b( L5 ^) u, U+ I' O1 b9 ^- T
  1407. Sound_Play;音乐播放
    # F' z+ n" b$ w' J* ]) P
  1408. PHA
    7 z  n6 u7 x: i4 h7 i8 P' a! K
  1409. JSR Sund_Bank_Set" t7 P: ^3 X2 X3 q$ w
  1410. PLA
    - E1 V* o5 [4 Z$ g3 T
  1411. LDA Music_State
    , y$ W: G3 {- u/ A- ]7 [8 n
  1412. BNE Sound_Play_End: i. A- x* v- O
  1413. JSR Music_Play_Addr
    5 C4 ~8 _) H8 k: m1 G) @
  1414. Sound_Play_End
    ) k3 c2 Z& d0 I
  1415. JSR SwitchMainBank
    : x2 ?! M9 _8 L
  1416. RTS
      R! D3 d1 I! w4 o' O* m
  1417. # ]( r- k* X2 o8 ^2 P8 i
  1418. ;==================================================
      ]; R% B; d4 X
  1419. .IF Music_Reset_Addr
    + |8 c+ ~9 [7 k2 t; c
  1420. Sound_Reset;音乐重设(如果有的话)
    % M3 B2 B* ^% t! N
  1421. JSR Sund_Bank_Set* Q1 B0 L7 S# M+ S
  1422. JSR Music_Reset_Addr
    9 k3 `9 G% ?" |
  1423. JSR SwitchMainBank
    # ^+ `- K$ s- P* ~" R$ S+ y: T* X
  1424. RTS
    * e0 h: K1 b# b* Q; q) t
  1425. .ENDIF
    " U* T4 j" l+ L! C) I+ X  |. g0 r
  1426. 7 h' k! `, s5 a' S* |( D# N
  1427. ;==================================================
    . R4 ^/ j" U; e5 v8 l
  1428. MainLoop;死循环
    $ y7 K# ?4 I8 O: \7 |) D
  1429. JMP MainLoop& S# o! {& M/ k1 r! U  q# \

  1430. - q0 T% i3 w4 a
  1431. ;==================================================
    : ^* r$ _+ h1 M7 Z: D
  1432. NmiProgram;Nmi中断处理9 T7 G- G5 X; k. M0 c0 r  n5 D
  1433. PHA- E6 S5 d* b  O; G
  1434. TXA
    8 s' ?" x# A. g3 C
  1435. PHA
    # i& V- J7 `0 H
  1436. TYA
    : u% n6 K1 F# S2 t9 U( c; |
  1437. PHA( r$ p" A( d  i5 J# q

  1438. , H5 E7 _2 }1 w( f$ v! e" S: `
  1439. LDA PPU_STATUS
    ! T, F) \: H; }$ _( {
  1440. LDA #$00  P) i% F/ X& y: o& f  G. Q9 L/ X
  1441. STA PPU_CTRL! k' ~# m( e  h+ v* M- n

  1442. - A5 H/ @. [, K. L8 f
  1443. ;切换主程序bank
    + _7 t0 ^$ k7 E% R7 O
  1444. JSR SwitchMainBank8 ?& U, k# i4 w& J( `
  1445. 9 G+ l! }( K! s" ^. b
  1446. ;NMI处理: Z/ Z. A* H( W6 d+ Z
  1447. JSR NmiProgramProcess% i+ \  ?0 Z6 l. U1 ~
  1448. # h# o7 D( d9 m/ {
  1449. Nmi_Proc_End
    . d$ c& V) T9 }' V7 K
  1450. PLA
    : O6 o8 J8 Y" J- l, w; Y- J7 w
  1451. TAY
    ( Z4 I# i2 d4 h/ O# v& J+ d" G
  1452. PLA
    9 O/ _( [2 d  t- [2 X
  1453. TAX9 F" K' h6 G  r( X9 ?* y
  1454. PLA4 d2 }5 c: x0 R+ ~
  1455. 7 }3 v5 d/ e# r, O9 A" _0 N4 v
  1456. RTI, V. _6 p: S+ t0 x
  1457. 1 C/ G7 C- o7 J
  1458. ;==================================================, k) y! D: U: W' c( v
  1459. ResetProgram;重置中断处理
    & [# z, Y+ j2 T$ c6 D# k9 s
  1460. SEI
    4 |' @9 U! P% I; [8 X7 |
  1461. CLD
    ! n4 P( w( g# r
  1462. LDA #$00
    : z" g9 e; B/ Q4 {; S4 r, w
  1463. STA PPU_CTRL
    - ~0 x6 f$ o1 D1 G
  1464. STA PPU_MASK
    / s7 V6 f) a  ^4 F
  1465. % U- g3 x: T6 \, X* i) f
  1466. JSR SwitchMainBank! W& g9 @8 f  t
  1467. JMP ProgramBegin
    ' v% F4 Z3 G. p+ |4 s, C. `
  1468. : I$ t* X2 \8 g9 E
  1469. ;==================================================
    ' _' I! ]3 Z% X9 v9 @' z/ R
  1470. IrqProgram;Irq中断处理; A: V6 T& y" h" }* ?7 @
  1471. RTI) \: ~+ w: p) J
  1472. ; |/ \. Z# A0 ~* Y5 R
  1473. .IF SOUND_BAR_SHOW_ENABLE
    : h% `+ C- g7 c* y, v6 L
  1474. .ORG $FF80/ t9 B6 m/ q, K4 A7 Q1 C2 v3 Z  k
  1475. STA $4000,X: k. j% _9 \, L8 ]
  1476. STA Sound_Bar + $00,X; `# r: v& O( x. C- p
  1477. RTS1 |+ ~0 Y/ D# }9 F! l& m% ]
  1478. 2 W  P* J# E$ E1 o% L
  1479. .ORG $FF88
    0 F0 g# f- L0 Q+ [5 m  {2 ]
  1480. STA $4000,Y; d( G8 {; z  W  D8 c3 h  F! P
  1481. STA Sound_Bar + $00,Y, i& ]+ e* v3 X2 r' p) [
  1482. RTS
    " m  {7 q4 B& S+ m% X! H0 h
  1483. # S8 F% y+ ?, G
  1484. .ORG $FF909 t. `, Y' d# l, m7 N
  1485. STA $4004,X  [) |5 ]0 `7 w3 q
  1486. STA Sound_Bar + $04,X
    $ H+ x$ X2 d1 o& i7 G
  1487. RTS9 @' Y6 v8 `+ l! i7 S
  1488. ( K+ x9 a5 m' u8 V! a! A
  1489. .ORG $FF98
    ' W6 Q+ }5 {& M) ^
  1490. STA $4004,Y
    9 ^7 G/ v- Y/ R& R4 Z7 ]. h2 r% E4 W+ F
  1491. STA Sound_Bar + $04,Y
    " ?/ \1 b2 [; \) z- a
  1492. RTS8 t4 s  b; f+ R, a

  1493. 9 N/ ~; X/ {. U
  1494. .ORG $FFA0; D. k- Q, {- P9 P
  1495. STA $4008,X$ m2 ]  ^6 c6 @, f# t* L* I
  1496. STA Sound_Bar + $08,X
      }2 U/ B% \; E$ L' l
  1497. RTS. |- q5 \  P: }. v- S
  1498. $ {; O4 P3 g- `: J! d# T
  1499. .ORG $FFA8
    - ~; c) l' _+ T! e1 R
  1500. STA $4008,Y" r5 M5 f7 Y( X3 i
  1501. STA Sound_Bar + $08,Y
    7 M) _' n" f! _2 L/ @. m; H
  1502. RTS$ p% E' a1 h- z) H- C
  1503. ; Z" z# d5 @/ [5 A, G# Q
  1504. .ORG $FFB0+ J# ^8 a; }+ Q
  1505. STA $400C,X0 u0 x1 l) d" X# @9 E
  1506. STA Sound_Bar + $0C,X; C4 W; t, }% |2 Z1 l
  1507. RTS
    ) M1 E3 j' H( n& ?  N3 O

  1508. " |/ I5 ]" h8 d; w4 Z1 O8 z. }; p
  1509. .ORG $FFB8
    9 L& x/ q2 z* m$ P) x
  1510. STA $400C,Y
    - d7 E: C# U9 y9 ^# E) w4 y: C* \
  1511. STA Sound_Bar + $0C,Y% n  J3 M+ }( s( u/ r2 N
  1512. RTS
    % J! i7 ]$ M0 i5 H7 N0 y' g( G( ]

  1513. 6 x$ C  [+ W3 S) E! e1 c
  1514. .ORG $FFC07 e# b2 c. G' T+ Q) ~+ W
  1515. STA $4000
    7 _- Z% U: I! `! }0 t7 m( a9 X
  1516. STA Sound_Bar + $00/ N/ Y2 H! g6 [# q5 V
  1517. RTS$ n  `3 n5 c' E5 n6 e$ R8 ]" `
  1518.   G4 P9 n/ P' C1 B" j
  1519. .ORG $FFC8
    " ]+ t# A5 O. G+ c! }- d- g; O
  1520. STA $4004
    % f" E" |) v/ t( V, }$ D  C
  1521. STA Sound_Bar + $04
    ( U& f: c5 S7 k& e! b7 J) D0 \( }, T
  1522. RTS
    6 J4 g  y% ]- S
  1523. ) W9 r0 k8 O& U5 C
  1524. .ORG $FFD0! S3 y! f$ O" ~! @6 A3 w
  1525. STA $4008
    3 S) Y: U  U3 Z- k
  1526. STA Sound_Bar + $089 ~7 E, f$ M2 ?
  1527. RTS
      Y1 Z1 ]8 J  x! x/ C
  1528. ) `2 S9 V( T& P6 b7 ^) z9 C; j3 O
  1529. .ORG $FFD86 A) x9 i, W- P/ y1 a, f
  1530. STA $400C  L) ]$ K) l1 |9 s
  1531. STA Sound_Bar + $0C( d0 |! i4 `. z3 I) G
  1532. RTS
    8 h$ }) u: P9 d

  1533. " n# P/ }2 |! k* K
  1534. .ENDIF& n# A) f) j6 O, h- T$ D, u

  1535. 3 o" X8 C# v, I' M
  1536. .ORG $FFFA
    2 V5 T( @' I; @( f& F) a5 L
  1537. .WORD NmiProgram( m3 e  {& Y# L" d0 k
  1538. .WORD ResetProgram$ a) d/ c) ^0 p- K8 x
  1539. .WORD IrqProgram
复制代码

' B, m+ P; s4 q# N. R) M( n# l% e& k! g# }  B# F$ R7 d9 {9 G1 k$ f# X1 f
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 903 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2834 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 10:54 , Processed in 1.109375 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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