EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 0 b; w: e1 {% I: _, p! o5 B- U
' }; r( S. A) `6 y# z3 g, E; I, s
1.魂斗罗' X8 C% d7 j" H, S3 H4 d* H
2.超级魂斗罗
* _- c, w3 v! n' x- p3.赤影战士9 b* d1 E5 {3 e4 \4 @8 G* u7 ]" X% m
4.忍者龙剑传2: h$ p$ ]6 k" j

; W5 z  [% T8 ^/ Y3 h4 V
+ A( o; i0 x9 H5 F& R- R9 i3 [5 K, E! X4 K7 [1 A* w

' g2 W. q+ \; P' O2 Z2 x- Y6 e6 p0 d6 J源码:
! |6 q9 X) {1 h& ]: C7 t
  1. ;[FC音乐][播放器模板]
    ; h, i2 C) j( s( ], ]
  2. ;FlameCyclone 20230710
    ( Z) v* b+ h+ I
  3. 8 ]% r0 W$ t7 B* j+ \
  4. ;文件头
    , u: K9 _* `" i* C. a9 e6 k) B# M- K7 L
  5. ;======================================================================
    9 [! E2 l4 {5 j
  6. .INESPRG 4                                              ;16KB PRG 数量+ M+ z5 m2 y$ F6 R1 I5 B; p8 U$ Z
  7. .INESCHR 0                                               ;8KB CHR 数量; J- p1 x* b. b# ?- Z" e
  8. .INESMAP 4                                                   ;mapper 4" d& d! h/ \7 E& G, K: R* o
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直% z4 z$ s. h8 L1 o
  10. . T7 d* n0 @3 F
  11. ;==================================================
    5 n7 n, ]0 U% X* r) X2 O( c" N
  12. SOUND_BAR_SHOW_ENABLE       = 1  B3 i+ r7 N7 Q* i5 s6 v: }; c8 N" V; _
  13. ;==================================================" `1 r0 c8 \5 [& \; S
  14. BANK_DATA_MASK              = $07' J/ K$ `+ D4 Y1 |7 q8 `- Z
  15. ;==================================================; U; N3 P% P0 U0 d
  16. SOUND_DATA_BANK_0           = $003 a. m1 c" {( d& f5 v3 W  R% _
  17. SOUND_DATA_BANK_1           = $01
    & t; S( o! w5 L+ V1 m
  18. SOUND_DATA_BANK_2           = $02# s+ ?7 u$ x, i# Q7 o1 S/ x4 Y
  19. SOUND_DATA_BANK_C000        = $064 }+ x' \! I9 h& C
  20.   y3 T- x* `6 I. k! `+ j
  21. ;-------------------------------------------------
    : D: O2 p* |1 {# K& n& I
  22. CHR_DATA_BANK               = $04
    # f% m% z& N: O: `0 t$ T  G8 G
  23. CHR_DATA_ADDR               = $A000
    # B  i# F; N& k6 h. f# A7 H
  24. ;-------------------------------------------------
    ! l6 {" f: x) T7 i5 R$ `
  25. PROGRAM_BANK                = $05
    " v$ y% J. \6 h* g) [' i' W
  26. PROGRAM_ADDR                = $8000
    & b' |6 L% g! z0 q0 U4 X: U
  27. ;-------------------------------------------------1 a& d. K% `) ~3 q0 a
  28. RESET_BANK                  = $07) P' E" b$ y# a; U
  29. RESET_ADDR                  = $FE00
    3 r! Z- o9 S- T# Q$ N3 p$ l
  30. ;==================================================
    1 ~* X! b& t: ~
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    & I& }( G- f2 [2 u
  32. Music_Play_Addr             = $813C ;音乐播放地址
    7 e3 ^3 `7 p! s' |5 v! j
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    & j/ e; n% }% o; Z, s* N7 A5 L
  34. ;==================================================
    : _# Q9 y2 `% X* |. g6 V* E
  35. Music_Song_Total            = 039  ;全部曲目总数
    # ^0 s  B" Z! W5 N9 ~
  36. Music_Start_Song            = 007  ;初始播放曲目
    2 h; B' b0 c0 ?: }" L
  37. ;==================================================
    5 q- E/ G/ h$ o" S

  38. " L; P  P& ~! m: N. J
  39. ;==================================================
    ! W* Y6 L% V% ]; m2 m
  40. Title_Text_Pos      = $210D ;标题文本位置5 w8 @+ t9 n$ x, w- r
  41. Author_Info_Pos     = $2284 ;作者文本位置
    ( E( w8 m8 H! v8 F
  42. Date_Info_Pos       = $22CB ;日期文本位置
      p+ V/ X; M8 q
  43. ;------------------------------! G' f: C# V, ~9 |
  44. ;------------------------------9 u6 l- q* i, p+ }# I2 ]
  45. .IF SOUND_BAR_SHOW_ENABLE
    0 l% s) D( f: H9 `$ k3 }7 w
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    - `' H/ g! Y* I& r7 H7 _
  47. Play_Time_Pos       = $21F3 ;播放时间位置4 [( t' I! ^* y
  48. Play_State_Pos      = $2233 ;播放状态位置
    " a9 `; J& N! T7 q) [5 @
  49. .ELSE
    4 n+ I* u2 j& a; E8 H  y0 X

  50. - `( I' o/ V5 W8 y' _/ }
  51. .IF Music_Song_Total > 99
    0 r( y6 Q4 v9 r7 a9 }
  52. Play_Index_Pos      = $21AC ;当前曲目位置! }* g9 x1 w: i/ }* U1 G
  53. .ELSE
    4 ?" L' r: r5 w3 x8 V$ U

  54. # {+ k9 \' w1 e% s4 K0 A" S2 x
  55. .IF Music_Song_Total > 9
    4 Q: I) B% S( |7 t7 M" ^
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    7 P$ H6 W7 y$ C( E4 g2 ^" N5 j
  57. .ELSE
    6 a  V* f" {! v2 h/ H" p
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    ( p: d5 t  D3 h# j5 ]# P
  59. .ENDIF
    # n7 V0 R% @$ G, l5 N% R

  60. 1 s/ p) I3 p# C& n9 }
  61. .ENDIF4 T- L3 I1 N2 O2 \  E! H
  62. / ]$ U* A4 d: Z8 P- }& y
  63. 5 @! ?4 _5 U' k6 R  {
  64. Play_Time_Pos       = $21EC ;播放时间位置
    6 t0 s- i  D! [( ?  E1 z: V6 i
  65. Play_State_Pos      = $222C ;播放状态位置7 g2 T2 n$ u+ K8 T" b
  66. .ENDIF
    9 A- ~! u) k! d) ]2 E2 t1 |
  67. ;------------------------------
    + q, [' @7 ^3 s' d' J; [" C) \4 c
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ) t- i- V* r% q8 B6 c+ a
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    / u! t* A0 T/ R: {$ g" K
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ' ?; p4 l/ L# i
  71. ;==================================================" J# F8 C- m3 ~0 `8 R; F( R
  72. Scroll_X = $00
    $ s7 ?5 @2 O8 |" H) _$ ?
  73. Scroll_Y = $065 b; a. Y0 q9 b+ [& ?6 H/ X
  74. ;==================================================* W& b. v# D6 _0 \7 A  X  a+ |& ]$ H
  75. RAM_Cln_1       = $0100& O; Y) r/ ?" K" L
  76. RAM_Cln_1_Size  = $80
    ) }$ ]' ~' g$ H8 Z, c, a: _
  77. RAM_Cln_2       = $00E0% Q6 T& v5 I8 x# _
  78. RAM_Cln_2_Size  = $20- C) z8 |+ p1 H) P! k3 E) v# k
  79. RAM_Cln_3       = $00E0
    # S$ c) }- u5 G/ ]" G* o1 N
  80. RAM_Cln_3_Size  = $20% H# m/ q- S' V) X/ A5 e
  81. 8 H. _" m9 Z3 K( R7 ^
  82. ;==================================================
    2 _, B7 K# O# P, o: D& ]4 I" {
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    " k# X/ ^7 T2 K, B
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器7 U) H7 v1 C: |2 W) l
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    & H+ Y, ^  j! R- M/ `" I
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    + q, I' g* i( ^6 v: _" |; r% f& X' e
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1% Y( @4 m, Q% g  k; E
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    7 v0 ?& _4 l( K7 z
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加4 e# T. A7 P* q/ [6 ^: n
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
      o1 a% J' C; @. ?; S) Z4 E
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    3 E. z# d" q, x0 V- r
  92. APU_STATUS              =   $4015   ;声音通道切换+ p9 Y7 K0 T) T0 J$ u4 J$ j" m, x" m
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通  c0 F( R( i$ L8 Z3 M5 c) E* Z4 k9 l
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    9 Q' d7 r/ ^  p% H& E
  95. ;==================================================3 E; R* X& x, w9 H( v
  96. MMC3_BANK_CTRL          =   $8000
    + e, x: l( b3 g6 A8 _. E/ p* I7 A$ B
  97. MMC3_BANK_DATA          =   $8001
    5 q; @8 \3 Y/ Y1 [7 E' W
  98. MMC3_MIRRORING          =   $A000
    / D' @8 }0 z% U) ~9 o# S
  99. MMC3_PRG_RAM_PROTECT    =   $A001" ^! [5 {( b: d# f- [: N6 t
  100. MMC3_IRQ_LATCH          =   $C000
    3 j+ a) u' X- }2 X9 N0 P. `
  101. MMC3_IRQ_RELOAD         =   $C001
    # d4 y+ [+ q4 K6 q# W& l( _% A
  102. MMC3_IRQ_DISABLE        =   $E000% y( A! z7 b% J* D8 r
  103. MMC3_IRQ_ENABLE         =   $E001: \6 x+ }5 z+ K5 G# G$ ~4 f, Z1 Y

  104. ' A0 n, l7 q0 x2 l& h7 u
  105. ;音乐数据块2 h" i+ D/ Y5 P& p

  106. , ^  Q( J& s* j( j3 ^
  107. ;======================================================================
    7 ?" m3 H) G: G$ @
  108. .IF SOUND_BAR_SHOW_ENABLE+ y4 w! n& S- u7 r
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK  N# _" j6 w& G; P" g0 q* F
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    & F( H+ E' C0 E4 I: r
  111. & e! d! ]9 l* x1 C" @. s7 `
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ! [9 ~; |8 }0 Q6 m3 d
  113. .INCBIN "sound_bank_bar/music_data_1.bank"  q; V, v6 d# r9 k, @/ \/ E

  114. 9 L9 n% V( ~. i2 U% ~6 b
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    - W& t+ }# t. k  A" m0 y; a
  116. .INCBIN "sound_bank_bar/music_data_2.bank"% b5 ?5 t: M; w8 a. c2 G
  117. ' O/ y, s) [2 u7 x. L! B
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK) H1 u9 N2 m1 ?+ n2 u; j- K5 n
  119. .INCBIN "sound_bank_bar/music_data_3.bank"3 n. Q9 ?5 o# n# R

  120. , [7 ?, ?/ C  ~, l' n
  121. .ELSE+ }7 a4 s, L6 ?( L; F
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK$ \& X* |  {- m. G% D
  123. .INCBIN "sound_bank/music_data_0.bank"4 e1 Q' O9 L* x9 x& f% U

  124. ) `6 s2 X& C( `' x. f( ~3 B
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK8 y* J) {6 k6 ^
  126. .INCBIN "sound_bank/music_data_1.bank"
    * b) g7 A1 `/ [  S' C
  127. 5 k: E& u- G1 d3 k* ]
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    % f/ F- `6 W+ z+ T
  129. .INCBIN "sound_bank/music_data_2.bank"- R. [  |( U: W' @2 f: }5 X

  130. 6 a. b- r, v! P9 O3 `8 d, U
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % u$ Y% k+ w1 y! S
  132. .INCBIN "sound_bank/music_data_3.bank"# @: y7 j) q/ l0 b8 d
  133. .ENDIF5 j- t2 [  Z' z, ~" g  \% a
  134. + n( K5 B' X+ i# D+ P& T. y
  135. ;CHR图形数据
    ; n% G# h( k8 s) S( V" n0 I. ^1 B
  136. ;======================================================================
    2 p* E1 r+ D; l# o0 i  d& {
  137. .BANK CHR_DATA_BANK
    + ~  b$ ?) K* i' r# F
  138. .INCBIN "chr_bank/chr_data.chr"
    9 L/ A) n) r" \+ G# z+ N& J- Z' [
  139. 7 t7 H: B) F) N2 T: v7 N5 b7 ^, v
  140. ;==================================================6 F; \+ ^2 W5 ]6 l
  141. PPU_Addr        = $03009 z0 Z  e$ t$ D5 t+ A
  142. Palette_Addr    = $03C0
    # |+ d* p: d! i0 o8 k$ p& {
  143. Sound_Bar       = PPU_Addr+$E0$ L6 [! W& G  g. i
  144. ;==================================================( d9 L4 u% l2 K* v" \, u
  145. Palette_Update_Addr     = Palette_Addr+$0D$ F- K/ d# Z% ^0 Z  P2 s
  146. Palette_Update_Max      = $2C; r" V/ _4 e0 M
  147. Palette_Update_Min      = $21* ~% g  j$ M& f1 D( W: b3 @
  148. Palette_Update_Interval = 601 Y+ j8 o! y$ i
  149. ;==================================================
    : {( U3 k" g+ O! B, L
  150. Sound_Bar_Cnt       = PPU_Addr+$F0; F, D" g( `4 y% w
  151. Screen_State        = Sound_Bar_Cnt+$01; }0 I# Y( X$ k- |
  152. PPU_Cur             = Sound_Bar_Cnt+$02
      a& ^) T3 j' N  d5 S5 w
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03$ T- u  a  h$ o! c/ ^9 v
  154. PPU_Addr_L          = Sound_Bar_Cnt+$040 Y/ ]3 Y. l8 }
  155. ;==================================================  i. u/ j/ s4 Y$ N2 P- ?  P9 Y
  156. Data_L              = $70
    : s& s$ z) R/ L& q: Q% `
  157. Data_H              = Data_L + $01% G# H3 p3 @0 G9 U
  158. Data_Cnt            = Data_L + $02
    3 A2 A0 N3 ^4 o% T+ D# A$ [8 g8 w& x
  159. Data_Buf            = Data_L + $03
    $ `, h) P, b- [2 [: P, S
  160. Time_Wait_Cnt       = Data_L + $04
    $ h! w7 l6 t1 Q4 J
  161. Palette_Wait_Cnt    = Data_L + $05
    + F6 j# v- b# }/ ?, `, W! {
  162. Palette_Update_Flag = Data_L + $06
    + c- S: T; S7 {( r+ B
  163. Show_Track_Name     = Data_L + $073 l$ B5 p. T3 B
  164. ;==================================================, @1 X& @3 \- L( n; Q1 L* f  i
  165. Key_Keep            = Show_Track_Name + 1
    1 M' f/ v3 V  b$ `- Y3 ^! v& f( y
  166. Key_Once            = Key_Keep+$01/ j5 \) G' O- q
  167. Key_Kemp            = Key_Keep+$02
    2 K6 L5 I* q0 b
  168. Key_Temp            = Key_Keep+$035 {7 {9 G% T3 M2 W' a8 {# f9 ]
  169. Key_Getv            = Key_Keep+$04& `0 W& s1 X$ m9 {$ O$ f/ ]
  170. ;==================================================
    $ K. ?( R+ D" p; G
  171. Music_Cur           = Key_Getv+$01+ p. s0 K2 L& c- z; @; o
  172. Music_Last          = Music_Cur+$01, h. a6 K( A. Z8 x0 |& }* ?6 P# j
  173. Music_State         = Music_Cur+$02" a" o! A5 f5 t6 K
  174. ;==================================================
    ; j% i( v2 `6 ?' O( I  }/ u; D5 N
  175. HEX_Data            = Music_State+$015 l2 ?/ B& ^, x( b
  176. DEC_H               = HEX_Data+$01; H! V2 R* T5 G9 M5 ]! S& }. Q
  177. DEC_T               = HEX_Data+$02# O; g% H, q- f; l
  178. DEC_L               = HEX_Data+$03
    # Z- n, s" v, n2 R% ]0 r
  179. ;==================================================- o) a* z# S# E4 m# L5 q4 f
  180. Time_S              = DEC_L+$01
    / M1 }3 X6 n3 V7 I$ @$ U
  181. Time_M              = Time_S+$01
    ) t" Y. g8 Z3 D0 Z
  182. Time_H              = Time_S+$02
    : o1 [; u) B7 m, |
  183. Time_Cnt            = Time_S+$03
    ' }# ]/ `8 g. l" t, `

  184. 7 m+ i$ M* z6 P# }
  185. ;==================================================
    9 C" c; [: m/ \( S
  186. Music_Bank_8000 = Time_Cnt + 1
    3 d! W! z- A! {# t7 I4 w
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    + d3 n% ?3 v4 Q$ J! Z$ }/ s8 y
  188. ;==================================================+ W* t4 x5 A/ {( u2 v( s7 ~1 S

  189. ! o* d  X! R' I0 W- H8 G
  190. ;======================================================================
    . P+ L  E: ^: Y: L* C
  191. .BANK PROGRAM_BANK6 r) W1 }  q5 p2 s5 O! u
  192. .ORG PROGRAM_ADDR
    7 s' ]- v" z/ b+ Q" D
  193. ! X  W! T4 c0 i
  194. ;==================================================4 a3 h& f  L$ n; {+ E( U/ D+ Y& h) K2 f
  195. NmiProgramProcess;NMI中断程序处理
    ( x0 c/ Q0 D6 g% _
  196. ;处理PPU图像
    / [- ~; P6 C6 n& S
  197. JSR PPU_Proc  d* R9 X: ?& r6 \: [9 ~* @
  198. # n1 l) B1 ^7 \+ E
  199. ;启用NMI中断9 P& l% }) w7 m( g' F- I) E" j) b
  200. LDA #$80
    % ^3 A0 B. |  F5 w: _
  201. STA PPU_CTRL  f) ~/ H) t9 x

  202. : a1 }+ {' t7 }6 u6 y$ _  _. V
  203. ;更新调色板$ U+ ?: M8 E7 p0 O2 q
  204. JSR Update_Palette_Data' H" w( M# d2 C# x; _4 N

  205. ! _: J. O) Q/ I0 {, _1 I- h, Z
  206. ;显示时间(缓冲)
    , y$ u4 T! M2 o$ h. W6 l
  207. JSR Time_Show
    8 z) h) e! O( E8 {0 ^% f4 V( P) ]
  208. / a* r) M9 D: V3 G
  209. ;播放计时" P' U: S1 `9 T- C/ p- }
  210. JSR Time_Count1 p  e2 P$ f, i; t$ Y! ]

  211. 1 a- m! R) G) G8 S  g$ U
  212. ;播放声音* d1 L6 ]9 B+ }8 r3 x- M+ c
  213. JSR Sound_Play
    & i. _  n3 Q2 ~" P% {
  214. ! E0 [2 x4 ~  C  n
  215. ;切换音乐(手柄触发)! N7 C- z) r: c6 \3 j5 j
  216. JSR Music_Switch* a6 K: l/ {2 L& G$ \  l  L9 ?

  217. ) `7 j9 _5 H3 C. m; ~
  218. ;音乐显示(缓冲)
    . h% A- U7 f2 l) B
  219. .IF SOUND_BAR_SHOW_ENABLE
    $ E+ E6 S* x# p
  220. JSR Music_Vision
    3 v( E4 U9 D9 F" H' A1 x# F) P2 Y
  221. .ENDIF8 Y) G& _7 i; p

  222. 3 Y9 @4 g9 B4 {7 k2 A
  223. LDA Time_Wait_Cnt& r  ~, K+ x1 x4 o: g: k) t! x. V
  224. BEQ NmiProgramProcessEnd% R4 U7 z* u- P/ z% o- v
  225. DEC Time_Wait_Cnt4 p- E1 m6 r: ?$ L" P; k% k) D" Y8 e
  226. NmiProgramProcessEnd8 t$ v: ?# y5 T* i
  227. RTS
    7 B# I/ i% w5 g5 r. S* g

  228. : U7 @8 R0 \4 K. |: \, v
  229. ;==================================================, x  p9 w3 ?% s. k
  230. ProgramBegin;主程序
    5 x$ @, z. K7 Z  @2 {
  231. LDA #$00
    & p+ U' X; N6 r
  232. STA PPU_CTRL
    1 K6 i8 [, Z  J) B
  233. STA PPU_STATUS
    9 k3 k7 N* M) `7 u' n" B
  234. STA PPU_MASK
    $ ~! C8 H; e. H+ a: ]0 x
  235. STA APU_STATUS
    ) r! R6 J1 A1 C& F
  236. STA PPU_SCROLL
      L- A: h1 S* Q: I6 |% y7 _% ~
  237. STA PPU_SCROLL  s8 m' s1 j- I' P9 T+ J' ]" p5 T
  238. LDA #$C0
    # \4 v  ]9 W' |" s" l
  239. STA JOY2_FRAME8 R3 T$ u6 n( w* E+ s

  240. , `  ^1 a8 B! }. h
  241. LDX #$FF
    * Y. M2 v% n0 h( t. }$ o1 p, {' R7 }$ c
  242. TXS
    * y% A; K' h% |: D
  243. LDA #$002 K+ q  z5 C! f
  244. STA PPU_CTRL" |4 l3 t8 e  K0 c9 C8 B
  245. STA PPU_MASK4 l) }; s2 e( p2 z: ?
  246. STA MMC3_IRQ_DISABLE
    3 c' S% y4 Q2 m3 {

  247. $ K3 h- _# y7 v5 f4 F3 b% W
  248. ;==============================/ P' F; {/ f# r$ \/ d$ `
  249. ;调色板清空' e" o$ o+ f8 f" g
  250. LDA #$3F
    % s1 F1 {: l/ `8 B/ h* w
  251. STA PPU_ADDRESS
    & }, o. Q3 ~4 Z* c: L
  252. LDA #$00
    : Z/ a9 x  Q- ^( D8 e! o
  253. STA PPU_ADDRESS! f0 m/ Z/ |2 y8 D; B
  254. LDA #$0F
    4 J/ a, r! u$ C9 b3 A# O9 D5 z- T
  255. Palette_Clear; d/ V, |9 t  F* E5 \8 s6 `
  256. STA PPU_DATA- |$ j: W+ p, s6 G) e# Z' e( V* B: K
  257. INX# ^$ s, ^) a) k7 S. l6 a
  258. CPX #$20
    1 h/ F6 J+ N6 \- W7 M
  259. BCC Palette_Clear
    2 j1 U. W- Z% x- b# `2 O6 ?
  260. LDA #$00
    - r; e9 G1 e6 p$ X/ J
  261. STA APU_STATUS
    0 k& ~, q8 l7 ~! p/ b- L6 ~
  262. ;==============================
    1 P$ J" U! e5 z4 a5 A
  263. ;初始化背景调色板
    * g$ x1 s" ?* z5 x: w3 g8 x4 G
  264. JSR Set_Palette_Color
    2 H6 c* R$ M. d: c$ P! ?1 s
  265. JSR Set_NameTable_Attributes1 r) [/ V) a; W1 n
  266. ; J, l8 [+ H7 G  w
  267. ;==============================! x- u" e* n' }
  268. ;RAM初始化
    / t; H& [# E' B& \3 S7 Q
  269. RAM_Clear_All
    $ o  W) O. u8 N/ T8 G- ]
  270. LDX #$00
    , \8 V! @$ S0 R' c  p6 {9 L
  271. LDA #$00
    * l: K# e8 i1 L
  272. RAM_Clear_All_Start- Z; }0 ~4 M" Q7 o9 R2 s  r
  273. STA $00,X7 Z3 U( l" e2 N& {: ~; X
  274. STA $0100,X# O5 k& n& B' e$ g1 @' ^% {- F+ c
  275. STA $0200,X
    3 k# w2 T3 }4 g8 p; l3 x
  276. STA $0300,X
    ; O% S  ~6 v$ r3 q' t3 N. b6 u
  277. STA $0400,X! F7 q* |4 e9 M4 f& `# B
  278. STA $0500,X9 q2 F8 Y3 V# `) B' x
  279. STA $0600,X3 g/ h1 [% X9 \% @8 O7 y7 g% ~5 J: ]0 Z
  280. STA $0700,X% v* `+ Z4 d4 Z# i! D& _! u( Z  e
  281. INX
    . ^, W8 R$ F5 A6 q5 L8 H
  282. BNE RAM_Clear_All_Start. f  ~" \# p* z
  283. + C: V8 x7 r: f$ H, d, z2 W' K3 n
  284. JSR VramInit( Q3 }9 Y( A: ~1 j/ J2 z  Q
  285. JSR Init_Palette_Addr
    # Y! z7 i  P5 P
  286. " e' r. ?" j+ F0 T8 c' V+ m
  287. .IF Music_Reset_Addr
    8 `; o+ N0 U' p
  288. JSR Sound_Reset6 E. b* D; x) M+ H
  289. .Endif+ K$ i  S9 |9 h: G  U( y

  290. : m8 `+ d8 X, }
  291. LDA #Music_Start_Song-$01
    2 b6 N9 z- H8 g3 g' z
  292. STA Music_Cur. ~( O' R$ b8 Z
  293. + y  i0 N' x& w1 e' l  e7 M& p* q. O
  294. JSR Show_Music_Text! H; Z) Z! L2 e1 R% D/ j/ \4 B

  295. 7 j+ |% X+ M; A- ~: P  m5 P7 A6 I
  296. .IF SOUND_BAR_SHOW_ENABLE# b3 p+ Z6 i8 }% ]1 r
  297. JSR Sound_Bar_Text_Set
    2 T2 @, I5 c* Y# b0 P0 ~
  298. .ENDIF$ ]! o. `; W  w0 R* Q! T8 w( C
  299. ) ~. I- u6 Z% s( H& H' z. m
  300. .IF Track_Name_Pos
    1 o) G5 V/ a0 h' y
  301. JSR Show_Track_Info
    ; C! q( q- O, q0 {6 b7 J2 i
  302. .ENDIF3 m# p1 h+ B% m8 w6 |
  303. ' ^8 B9 a% r3 ~% H; \: u
  304. JSR PPU_Proc
    6 T% _+ U& P% j1 w) E5 {( d& e
  305. + n# `- p8 u/ f% V- {
  306. LDA #$0E: O( E2 d1 C0 S0 r
  307. STA Screen_State+ t, v4 y8 ^; W* Z4 q6 U. J

  308. : V8 s9 [: [1 a5 X
  309. JSR Sund_Bank_Init! }( {+ w/ X+ H

  310. : _: O/ E% H4 c2 b3 _6 R& w, B/ d
  311. JSR Music_Show5 F" t4 H# E) F4 v7 A9 @
  312. JSR Time_Show3 R  d% r* T  J6 {
  313. JSR Music_Stata_Show
    & V! D' R9 t/ M+ M
  314. JSR Time_Delay8 x3 K5 l' T2 P' m! e- `

  315. 9 q6 {( N5 \9 ^  a/ I

  316. : [# z# i* f1 @
  317. LDA #$808 o1 p: l3 S3 ^7 w, K
  318. STA PPU_CTRL. P6 ~8 T- X) i$ G

  319. 5 J  u8 G& l% D9 I
  320. LDA #$20
    - Q, J, e7 q0 l$ B8 g* N% `
  321. STA Time_Wait_Cnt& o; g9 y! x/ {, d
  322. 0 g+ r- n- C6 K5 t' d( q+ V% {
  323. Wait_Time_Over# g+ p( V+ c, M1 [9 ?' ]+ D7 w
  324. LDA Time_Wait_Cnt( `& M6 a- h! l# {8 x; ~! x
  325. BNE Wait_Time_Over
    $ g# U. X4 m0 Y7 r

  326. + f8 C; B" w. f* s# c5 h
  327. LDA #$1F" _5 Y/ e0 r% K# Y2 ?9 F3 g; R
  328. STA APU_STATUS2 G; C2 d! X! X& N; f2 `
  329. LDA Music_Cur
    6 s8 L' `+ L- V0 o  X1 |
  330. JSR Sound_Init$ j9 z4 S9 v0 F

  331. 0 H0 u1 |: O, o  R- R' d
  332. JMP MainLoop# S$ J5 y) _* p/ X9 s6 l- \- @

  333. 4 R, q% ?+ s/ i) ], l
  334. ;==============================/ d7 p9 W0 P' a) E7 u) D& O, F
  335. Time_Delay;延时等待1 w9 @8 X/ R2 G6 N* G4 E! E
  336. LDA PPU_STATUS7 U8 v; G: |. T; P8 Q
  337. BPL Time_Delay. D0 ~9 q1 S6 T
  338. RTS  n6 y3 ]% P) I, n

  339. : F2 _% e7 S$ U. e7 ]/ M
  340. ;==============================' F% t2 b8 v1 I: D# E6 F# L& ~5 D
  341. VramInit;初始化图形内存
    / P+ G0 ^, U( M/ z0 V
  342. LDA #CHR_DATA_BANK* ?' _& j8 H  d" ^! r
  343. JSR SwitchBankA000/ `- z6 X: H% @9 h/ C% Z
  344. LDA #LOW(CHR_DATA_ADDR)) {2 b4 ^4 W8 K2 g6 G# c4 N
  345. STA <Data_L9 Y. t' v2 r( W4 R8 H% `( ]0 w, l& z
  346. LDA #HIGH(CHR_DATA_ADDR)- p* p' _: ]6 q
  347. STA <Data_H
    4 M' B. @+ u, f! |2 V# i3 x
  348. LDY #$00
    ' @. X" ]7 a/ k) R# d5 r: s3 k$ B
  349. LDX #$20
    ! }# c" f, ~) x4 ]; W
  350. LDA #$00$ b9 {$ {& O- K
  351. STA PPU_ADDRESS
    ( ]( C" y1 [/ c( F2 U2 @: a! B
  352. STA PPU_ADDRESS
    * z/ m" J, x' H3 M7 r- \) C
  353. VramInitWrite1 g1 z, V, a% e
  354. LDA [Data_L],Y
    + N! E4 K5 z# d* ~& L0 ~% @+ Y
  355. STA PPU_DATA
    + G$ v  t8 R. a- Z5 s
  356. INY
    8 C9 ?0 g. ^# S1 C9 x3 g3 f
  357. BNE VramInitWrite
    ' W$ _2 g" w( l5 u* l1 z$ ?
  358. INC Data_H, J) M& v6 W  ]; c- Z' v
  359. DEX
    1 R5 n3 h; K5 B/ V7 B' ?
  360. BNE VramInitWrite
    8 o+ R6 z% e% {- x0 o$ r! v
  361. RTS  Z  B4 b* \! \2 U2 v* l
  362. 5 K) O, x8 F0 a; @1 L/ r- w" ^: N
  363. ;==============================
    - t, Q; `* s& Y* u7 E! ]
  364. RAM_Clear;RAM清除
    " N% g) O/ q7 j6 R$ R0 Y
  365. LDX #$00
    2 C& r5 v, |, P0 F& Q
  366. LDA #$00
    ; [  Q) `& u) c) A& i
  367. RAM_Clear_1+ D% e# P- t: G
  368. STA RAM_Cln_1,X
    $ E/ p+ U* }5 K" R2 a) ~% U
  369. INX
    , `! Z! _0 C- }+ `4 q( N, ~
  370. CPX #RAM_Cln_1_Size
    ; E4 ]# `4 a. {" t) z
  371. BNE RAM_Clear_1
    2 D0 {2 [$ B& B7 [6 Y
  372. LDX #$00" h& {! y) j7 h% P! X6 g! l
  373. RAM_Clear_25 s% L+ `4 B8 w8 M. Q
  374. STA RAM_Cln_2,X9 {6 s) L) p- O/ o
  375. INX
    $ \& s7 x+ |: q& P- q! z
  376. CPX #RAM_Cln_2_Size
    5 @3 O' W9 T; Z1 `, ^4 v
  377. BNE RAM_Clear_28 j) N1 B# F7 @/ Q* I3 f
  378. LDX #$00% `1 k% K$ m7 v% h
  379. RAM_Clear_3
    $ K) S* u$ G- f  S' W
  380. STA RAM_Cln_3,X
    # a7 e4 N/ R" N8 k2 y
  381. INX' T+ I5 P& {  W/ A/ t4 x8 E+ H
  382. CPX #RAM_Cln_3_Size" V2 R$ J+ c1 y; x* N8 m
  383. BNE RAM_Clear_33 O7 w! p' q0 c% f  K" }1 w
  384. RTS7 T, }6 j  W( H% G! ], [4 j
  385. 6 r- l4 k+ o5 R5 P( q2 y( e8 a
  386. ;==============================
    & W7 ^7 A- V" e
  387. ;音乐切换8 z% S, A) I& U
  388. Music_Switch
    9 `2 j0 a7 D; E7 l' P% D
  389. JSR Key_Proc! i2 f# i7 Z+ b1 n
  390. LDA Key_Once
    ; Z& l( y1 N! F* w
  391. CMP #$10$ k* L( f: ]7 a
  392. BNE Music_Start_SongStop
    - x2 k# b! q6 ^8 ]. r, \! D
  393. JSR Music_ReSet" z* d, ?2 v0 |; Q6 b3 I6 [: k2 S
  394. 8 M4 i" l% l+ R  D
  395. ;音乐停止
    ' x! z) |( e$ V% ^) b+ N& K
  396. Music_Start_SongStop
    " R  C& g( p8 r& |$ ^
  397. LDA Key_Once
      n. Y$ k$ b3 e- \& d
  398. CMP #$20! w9 o; K) S' T' S' Q
  399. BNE Music_arrow! l$ v5 h' w* T
  400. LDA #$01) T$ T4 v( {2 M2 \
  401. STA Music_State
    # I1 L0 A, ]# v9 r$ C9 x* P) t3 `9 D
  402. JSR Music_Bar_ReSet2 q! t) s" f( i# t& j* M. g
  403. JSR Time_ReSet7 R+ p  {7 G+ V: g+ ^: Y
  404. JSR RAM_Clear
    , M2 h2 P& G3 T; t
  405. JSR Sound_Clear4 w  Y7 y6 Q. N3 v% t& v! g" j% v
  406. JSR Music_Stata_Show
    % {6 t/ G  r3 Z7 m
  407. Music_arrow7 I2 i$ O  x* ^5 p7 D- M
  408. LDA Key_Once6 z$ K. K8 \# |
  409. AND #$CF
    " u9 @+ a; g0 o1 g& R
  410. BEQ Music_Switch_End
    / K6 x- @: R% K  G1 [7 C
  411. JSR Music_Number0 Z, p- R% ?% j5 _  b9 S9 I
  412. JSR Music_ReSet
    + \& ~* k7 v' ~0 `% N/ r; R
  413. JSR Music_Show
      @2 [/ H, |$ ?" o6 @: F
  414. Music_Switch_End
    1 [$ K4 W# j$ a/ y
  415. RTS
    + ~0 g" U; \1 g& i+ e3 [
  416. & C9 v  K0 I, P! v9 v0 r$ W
  417. ;==============================
      o* A& y5 p& ^1 `6 X0 g
  418. ;音乐曲目切换
    1 C4 S2 Z" A. O( x. p
  419. Music_Number
    % a4 Q+ ?5 b- a
  420. LDA Music_Cur- m8 P5 N4 ^- {- x
  421. STA Music_Last+ P$ d* V  h- ]! E
  422. Music_Decrease
    ) N) ?  F/ i+ r, V$ w
  423. LDA Key_Once
    7 S1 u3 {1 E0 M; B! |! m# v- b
  424. AND #$42
    4 _0 X: q  }- R  q; v, m# f9 a
  425. BEQ Music_Increase8 l: m- m( P7 h  t5 v. q
  426. LDA Music_Cur
    & R$ K: ]$ g3 A, y7 }0 h
  427. BEQ Music_Increase* g% a8 w. p% V* Z! Q5 A
  428. DEC Music_Cur( W) Z/ ~& P/ U0 h- F: r( L
  429. Music_Increase
    ) o: f0 p1 k- F; z0 R4 C
  430. LDA Key_Once+ W7 ?1 F& l9 p# j! m- ^* T  o
  431. AND #$81
    4 L  v. \) z0 q5 I' [1 B4 C- a
  432. BEQ Music_Decrease_10# u! t( o$ C. P. K. O
  433. LDA Music_Cur) H2 F' @% l6 |/ r
  434. CMP #Music_Song_Total-01
    9 G7 C3 A( N) O7 M
  435. BCS Music_Decrease_10% @0 _% W/ j% a! f6 F: K0 r0 x
  436. INC Music_Cur" k+ ^2 ^# I3 T
  437. Music_Decrease_10
    : Z* D/ A) r+ S
  438. LDA Key_Once* G% V) l' m4 d6 G3 [  L
  439. CMP #$04
    " J  c5 a2 l% [8 X8 @* k
  440. BNE Music_Increase_10& @& ^! N- t: [+ K2 B
  441. LDA Music_Cur4 Q' k9 y( ^! M) W/ t& D
  442. CMP #10
    , u& N( K. A4 e: i
  443. BCC Music_Start_Song_Min
    1 G6 l7 S/ Y% t6 a) o/ T
  444. LDA Music_Cur# C# j9 d6 o; L- u3 f/ u
  445. SEC
    ! s. U5 u. y( ]# d+ L# i
  446. SBC #10
    , ]5 r* N. @  i% v8 P2 x9 O
  447. STA Music_Cur
    ; h! V  J- M2 q( N9 B
  448. LDA #$009 v4 a" W3 G: T! Q* k
  449. BEQ Music_Increase_10) m6 u( c0 h) n, d, N
  450. Music_Start_Song_Min
    % s8 p  ]1 R2 U  d  s' c5 ~2 N
  451. LDA #$009 i2 C& P: ^  j: H
  452. STA Music_Cur( h* N# c2 h) c% E5 ^+ L) \
  453. Music_Increase_10/ J3 C* a0 F8 ?6 V: y) L7 D* q
  454. LDA Key_Once
    ) E. S  [/ |8 P$ P
  455. CMP #$08- T) Z. ?6 h" W) t3 _3 o
  456. BNE Music_Number_End, _' s. L* t4 D$ b: U6 `+ m
  457. LDA Music_Cur
    % Z2 [# ~$ [! X# D& H$ a2 H
  458. CLC) b& A2 `3 J6 t. o( m
  459. ADC #10
    % w7 V' o. M  o& J; [0 ]% ^# G
  460. CMP #Music_Song_Total-012 h# g  U+ l' u) y
  461. BCS Music_Start_Song_Max
    / i) S9 j$ C, J+ S
  462. STA Music_Cur, j4 T& q. B9 B# p
  463. LDA #005 c5 K' @+ h( Y; R
  464. BEQ Music_Number_End
    - n. T) R6 x0 n
  465. Music_Start_Song_Max: z7 ?' f% @9 b* Y! [. P
  466. LDA #Music_Song_Total-01
    2 R( X7 i+ N3 p7 k; |+ ^3 ?1 P
  467. STA Music_Cur5 _, @4 S, a9 E, @" H
  468. Music_Number_End+ p. q! C- O. `# g% _; h# t# ]& t1 `- r
  469. RTS
    ; ^0 N# O% j. E5 S$ R3 `* x

  470. # _" ~  d8 y/ ]: l, Y: j* q
  471. ;==============================
    $ t& {4 [$ A8 _# k, l
  472. ;音乐重设
    6 k: M: c6 I7 b( G& b4 b7 S
  473. Music_ReSet
    : ]7 X; q7 C! H' {! Z5 ^
  474. JSR RAM_Clear$ x& X. [' |& a, ]
  475. JSR Sound_Clear) j: x- |1 m4 A$ L1 m9 d+ r
  476. LDA #$1F2 N- y5 ?. j, b: f" U
  477. STA APU_STATUS
    ! G4 {8 P4 y/ J0 ^  h8 }' i# O" c
  478. LDA Music_Cur
    4 N6 i/ P# g6 L& w5 \( \: B2 E
  479. JSR Sound_Init
    8 q8 g- D+ B& u
  480. RTS
    6 w& u9 B; b- J2 y
  481. # n, H- D3 Z% U6 A# h+ m( p
  482. ;==============================1 E! O/ g5 H' G$ M# z; ]* Q
  483. ;音乐端口清除
    * R% b8 T& h4 Y. K
  484. Sound_Clear. u, x' _  o6 r7 c8 K3 J
  485. LDA #$001 s5 \3 ]$ ]  P+ I
  486. STA APU_STATUS
    3 f2 P+ S; d! D
  487. LDX #$00% g( ^2 B+ ]# S* U* [' F' }
  488. Sound_Clear_Start3 a4 K  C; q/ D/ q1 I- O  B
  489. STA $4000,X
    4 g8 H1 D" {/ V
  490. INX2 U& J% i0 Y* S" D" o, {1 A
  491. CPX #$14* D7 k/ K# K0 n4 ]
  492. BCC Sound_Clear_Start; ^; P& U. g$ t
  493. RTS( k2 H9 d9 G: @, j4 }
  494. $ O- k5 i. U* F" {0 Z
  495. ;==============================$ b& d3 h; F2 t1 V: z. S0 m
  496. ;按键处理$ U# q0 d! [9 K7 \4 I
  497. Key_Proc8 _0 X# e2 N6 n' P
  498. JSR Key_Scan
    $ U& K+ [8 Y6 W5 h
  499. LDA Key_Keep8 V" ]1 A& [* [! W$ F# J/ l% q7 ?! Z  }4 E
  500. STA Key_Temp' Y6 p8 W# w! Z( x& z8 {; G: t+ C
  501. JSR Key_Scan
    ( E9 s" \: ]5 ?6 X
  502. LDA Key_Keep
      @  o  m% P* K- G6 ~
  503. CMP Key_Temp
    8 x* E$ f9 w7 T4 P
  504. BEQ Key_Get_Once3 I0 x) O9 V' m9 {% V
  505. LDA Key_Kemp
    * `7 \( N1 v* B. ^. Q( G3 I
  506. STA Key_Keep! B/ }/ [" a. a
  507. Key_Get_Once
    + M  e; c9 S" w
  508. TAY% {$ ^+ L/ \* G+ S! h% s" U) h$ g
  509. EOR Key_Kemp
    7 h; z+ L7 a2 r8 Z
  510. AND Key_Keep7 V! i$ {; ~7 l* R0 K
  511. STA Key_Once) u/ D# j- A# T5 h9 V( ]- w* d
  512. STY Key_Kemp
    2 h  Z3 r& u* }6 _0 y5 M. Z" j
  513. RTS3 i( f' y4 N5 p: y
  514. ;------------------------------
    % o, J) m- l0 Z6 s7 u1 X
  515. ;按键扫描1 w: p; h, S* T; A
  516. Key_Scan+ \9 @4 M- n5 \+ h- r' V
  517. LDX #$01& L% [: b6 _9 S& U
  518. STX JOY1_FRAME4 X' M0 @/ `6 N3 P8 g8 l
  519. DEX# u# P8 c0 k! H8 r$ S4 j4 A! J
  520. STX JOY1_FRAME! q( J. k, e' G/ J; d  @
  521. LDX #$08
    + Y; R6 D6 [" M3 R
  522. Key_Value
    $ {+ D# }+ g# H0 ^9 @4 g5 ^
  523. LDA JOY1_FRAME
    - b* x8 y! K! q, g
  524. STA Key_Getv
    : i! }3 o/ @5 q$ h
  525. LSR A6 E( M9 b3 ?& ]! I. i$ z
  526. ORA Key_Getv
      M' ]0 ~1 r% N$ Y/ S4 n  s
  527. LSR A: T% ^8 P0 x: t& R, P
  528. ROL Key_Keep
    : a; J' V* |/ e: p
  529. DEX
    6 B9 I1 M( b9 H. M: p; K. t, b
  530. BNE Key_Value
    2 q, t# W; H, Z2 E- k7 s
  531. RTS& h! a1 N* F: v. r( h

  532. & e- }/ e' u, |) h. B' q
  533. ;==============================/ `( |, i; V; Q' X0 Q* c8 n( f/ V
  534. .IF SOUND_BAR_SHOW_ENABLE
    , `' a3 L" Q) i& Z) k% M' o) @
  535. ;音乐条显示- N  K; l" h9 ?9 H. L
  536. Music_Vision
    ( k! e1 L# ]& W5 Z& R1 w
  537. JSR Music_Animation; a, a5 Z7 j: A7 p  h
  538. JSR PPU_End
    ( Z9 w. M  t7 T) O1 A( z' n
  539. RTS& ]$ U- c' G* o( ^- L; X
  540. ;------------------------------
    5 z- ~; t4 ^4 Y) h; F4 ?3 B& r2 q: k
  541. ;音乐条显示处理
    & ~: m: B* ~) l$ o' ?5 |! |, I
  542. Music_Animation* `% i# E- V7 M( R% |
  543. LDX PPU_Cur' z% _) Z: J- D0 [* p
  544. LDA #Mode_Line* c0 j3 N5 Z: b; F5 S  B& y
  545. STA PPU_Addr,X& ~: q4 X6 p( m& o5 }; y- ?
  546. INX
    5 _$ G/ C: N2 N4 B
  547. LDA #HIGH(Sound_Bar_Pos)
    ) m  E1 f# c6 J5 |  ^0 ]" n
  548. STA PPU_Addr,X4 p# D) F: `# @: B
  549. INX
    5 K. b+ Z& k& n' ~, r, u
  550. LDA #LOW(Sound_Bar_Pos)
    & o9 u( h( v; h
  551. STA PPU_Addr,X
    ' E0 s. g) K2 b$ o; K" f, t
  552. INX/ K9 E9 M: M* o1 S+ Q7 E
  553. LDA Sound_Bar# c! ^3 p6 l7 A
  554. JSR Volume_Convert7 @! m9 o- P6 \. M7 s" k
  555. JSR PPU_Return5 t1 K; `2 A4 t: m$ t
  556. LDA Sound_Bar+$4
    ' K& a- h+ d' M* U* [, L% s6 U
  557. JSR Volume_Convert+ `$ X. g. R( t* O7 H2 c! y3 d8 p
  558. JSR PPU_Return
    8 C* U% ?* b" e
  559. LDA Sound_Bar+$8/ M8 @' ~# O  x8 [3 Z
  560. JSR Volume_Convert_Ex) o0 G* R$ _% l  O8 f  M
  561. JSR PPU_Return
    . E# t# Q- d9 D$ s) R, S
  562. LDA Sound_Bar+$C
    5 X# v: D/ r% S  q( P  j- ?4 V7 x
  563. JSR Volume_Convert- P# L) O, j/ p  u, I7 }0 g
  564. JSR PPU_Return
    ( D' [$ A2 Q3 x
  565. LDY #$10
    8 x% P7 p' p0 u) l  H
  566. LDA APU_STATUS% p% \8 q  A8 b3 C( }
  567. AND #$10. O1 ]: ?& d+ Z2 p0 U; h
  568. BNE Volume_Count% K9 I) @& ?2 m% o; \! Z; H
  569. LDY #$00
    $ W8 L* d$ O& m5 R# X9 w/ p
  570. BEQ Volume_Count$ j3 ~) n4 E' c% ~  g2 _
  571. ;------------------------------, l) U& S' @9 ^7 G
  572. ;音乐条处理' z9 P) F6 O* z
  573. Volume_Convert_Ex
    9 ~& E1 C& h# H' J) Q
  574. AND #$1F% Q# Y( s( l) N6 o3 S
  575. TAY2 }. Q+ Y* E6 q, n
  576. BNE Volume_Count
    2 Q9 S" g, m) P, O* R% ^
  577. Volume_Convert0 X( r, N/ J7 r) u; a* `; t2 D6 ~
  578. AND #$0F
    2 F1 x# L* |$ t, H" U
  579. TAY% @4 ]9 o9 G& s  E
  580. Volume_Count
    " u# M9 v( A5 r9 |3 m, m
  581. LDA #$08
    5 Z7 f+ u/ {" R! a  ^2 g3 [+ ]$ Q
  582. STA Sound_Bar_Cnt
      A: i) a5 O+ U* p! ]. h
  583. Volume_FILL
    0 O% {  }/ b1 g7 G8 C% {# u, Y
  584. DEY/ ^  `/ ]0 e/ y- B( G- N; a
  585. BEQ Volume_Half
    & t/ s3 b: u& w6 [7 k$ G( {3 H
  586. BMI Volume_Empty! H9 y: d9 a/ S" N
  587. DEY
    # m0 I; j/ K0 I
  588. Volume_Full
    $ A, Y- J% b3 \7 ?+ D
  589. LDA #$16& o! K! R* M8 G5 }2 `/ G
  590. BNE Volume_PPU
    8 N6 z, O+ C( N
  591. Volume_Half
    2 p4 [3 F* v# X  q  f8 ?
  592. LDA #$15" c& c$ t1 }: K4 U
  593. BNE Volume_PPU4 ^0 x) L( W/ w% l, p. L
  594. Volume_Empty
    , w4 }# d8 g, S6 N& P
  595. LDA #$14# F5 E" `8 b0 K, `! i
  596. Volume_PPU3 o9 L" `0 j, i4 n, h; e8 G( q7 w
  597. STA PPU_Addr,X
    5 f! ~) J% }! ^3 F
  598. INX, X- p1 M7 ^5 G7 j5 E/ P2 z
  599. DEC Sound_Bar_Cnt2 Y( A$ i, w1 Y; l
  600. BNE Volume_FILL
    $ _+ m+ u1 f6 m& [
  601. RTS5 q; U! s/ @2 y  z  s' }- H
  602. ; U" k9 t) L# g
  603. .ENDIF
    ' [- r& F/ y0 E4 o) w1 n

  604. . {: |- A3 t" }" L- J: {% W5 J. W
  605. ;==============================/ m( H4 i0 q* i3 R) e% |9 s
  606. PPU_Addr_Set;PPU行开始. F2 S- d/ l5 D! \$ ?
  607. LDX PPU_Cur
    + e" ?2 b1 l0 j0 U0 M/ q
  608. LDA #Mode_Line
    8 L; x; m/ o$ f" B* R! Z  H9 H7 f
  609. STA PPU_Addr,X
    7 F$ Q- z6 x- {- [. W
  610. INX
    " E9 a" s5 F: [" U; l+ j
  611. RTS
    8 Z+ N. H: h* k1 k. D0 R' F9 l' F; g  J

  612. 2 k+ z- A/ \, y9 p
  613. PPU_Return;PPU转行4 p& p+ U2 q: r6 b3 _7 y
  614. LDA #Flag_Over( j9 A% R- @. W% k. G! o  Q. H
  615. STA PPU_Addr,X
    5 }  T% W& ^: O5 X. |
  616. INX% q5 N! }& a" ~+ M
  617. LDA #Mode_Return2 h" K7 ~* f' }% r
  618. STA PPU_Addr,X: B  t1 `; q0 L4 I. e
  619. INX
      g& {7 a$ I( F4 S2 R1 g( I% X
  620. RTS6 z$ E- O" ~: `# e0 J
  621. 3 G1 u- r& q0 N" w8 W
  622. ;------------------------------) b; A! E# Z9 ]/ P5 p+ S
  623. PPU_End;PPU结束: w' C8 m/ c) [. P9 s; ?
  624. LDA #Flag_Over
    8 t9 M. }; u. L
  625. STA PPU_Addr,X( u1 ]7 ?: B/ |  J. I3 C
  626. INX
    % d5 y, K  D2 h3 }0 s5 }, K
  627. STX PPU_Cur9 O" w! \, k) l3 L7 j
  628. RTS
    ( I7 y- K1 H& \1 D5 Q$ f
  629. ;==============================
      k2 v. n/ w& y! u
  630. Mode_Line     = $FD    ;新起行模式7 I( L* P' C2 |0 i8 K, m
  631. Mode_Return   = $FE    ;转下行模式, {, U  w9 U- x/ v0 f
  632. Mode_Clear    = $FC    ;行清除
    $ w' @( p- W( ~1 v8 _
  633. Mode_CntLine  = $FB    ;行计数写入
    2 Z8 q( T: q9 a+ m3 s
  634. Flag_Over     = $FF    ;行结束标志
    " o* v1 `, B- y) {& b) `

  635. * @& r( L' f& R: a3 L( J
  636. ;------------------------------
    5 H. t, T  ]+ I- h
  637. ;PPU处理; [$ Q! v7 x! y2 K' E8 U& K
  638. PPU_Proc
    ) o8 K$ s% u/ M- u
  639. LDX PPU_Cur
    0 j: Q6 G) S7 K) y
  640. LDA #$004 ]: Y5 E4 G. B8 w9 A. ]0 [4 [5 X
  641. STA PPU_Cur# L& Y- q! g! A- R& V6 `
  642. STA PPU_Addr,X
    . G6 |' c8 N+ V( m0 i/ N2 }3 q  C
  643. LDA PPU_Addr
    6 Y5 t* D5 \8 ]- d) G! Q" G
  644. BNE PPU_Proc_Beg$ L1 c9 S/ o$ _0 ^+ [7 |2 P
  645. PPU_Proc_Ret6 b: W' {4 _7 h" ~6 ?7 t
  646. RTS( M. ?: Q: ~# _4 Y% v( L
  647. ;------------------------------" x: c3 W9 U) N1 }% ]
  648. PPU_Proc_Beg  ;处理开始& ~& |! y: }- a; [' a; Y) z+ s' u
  649. LDX #$00
      b  z( U# Q2 u
  650. STX PPU_MASK; t; p! u' C# o4 j
  651. ;------------------------------
    " D+ i. l& n: o0 s
  652. PPU_Mode_Select  ;模式选择: D2 |! U$ D/ R5 Q4 k( S+ F9 l
  653. LDA PPU_Addr,X5 ^6 ^* n% \& I" X
  654. CMP #Mode_Line
    $ O  ~! {! z" @, q1 C/ L5 z! X
  655. BEQ PPU_Mode_Newline8 Y: x  r$ s# O6 y5 L  d' i5 ?0 N
  656. CMP #Mode_Return
    ; a' B( w& w- B) N2 u0 K( t
  657. BEQ PPU_Mode_Return) [2 Y: Z% q- c# I
  658. CMP #Mode_Clear9 R- T/ Y  z( F2 m
  659. BEQ PPU_Proc_Clear* Z( y% ]8 u5 G/ @, I1 l# [* t
  660. CMP #Mode_CntLine$ l0 ~( n( E" @, E6 A
  661. BEQ PPU_Proc_Cnt_Line" J5 n) @! X1 x' Q, g
  662. RTS4 \: o. h8 b- c8 {+ a  O
  663. ;------------------------------
    # n0 E- w0 p% Z* Y* ^
  664. PPU_Mode_Return  ;转下行模式
    / F" M3 Z. P4 B
  665. LDA PPU_Addr_L
      T" Y; d7 c+ X) u7 d
  666. CLC
    1 U" ^7 ]( Q. }  G
  667. ADC #$20
    5 C+ h; H+ f1 L; i1 q
  668. STA PPU_Addr_L/ K, n* p* G- d! `( T4 ^7 Y# Q
  669. BCC PPU_Return_End
    $ _# `- c7 G& [) [
  670. INC PPU_Addr_H
    6 H, M, w' R# u( I
  671. PPU_Return_End) q9 ^7 U4 x" b2 M
  672. JMP PPU_Set_Increaser2 |  u" l9 l+ C# B
  673. ;------------------------------
    & U# u  p; Q& `9 h3 y8 T
  674. PPU_Mode_Newline  ;新起行模式6 m3 W6 f& ]. [, B7 d6 k; a+ q
  675. INX
    7 {3 q" W' s5 E
  676. LDA PPU_Addr,X
    3 V1 N2 u9 R( P" s( L) y0 A
  677. STA PPU_Addr_H9 i& T6 s6 w* ~
  678. INX
    3 k. }5 \9 x+ F
  679. LDA PPU_Addr,X
    9 w3 v! A$ I8 a5 l) B6 A
  680. STA PPU_Addr_L9 ]% i. {! Z, t
  681. ;------------------------------8 u4 e, }! H6 W. q* M
  682. PPU_Set_Increaser   ;设置写入地址
    1 O5 m& b  {% z9 q
  683. LDA PPU_Addr_H
    + X7 q1 ?# U  q# L6 d6 B% M
  684. STA PPU_ADDRESS4 A) d: v; L$ z- T" q# s& V
  685. LDA PPU_Addr_L
    1 S/ q" [' v! w
  686. STA PPU_ADDRESS
    " N! i8 Q4 Y+ a  d: R7 p, n9 r
  687. ;------------------------------
    $ H2 w% ?% u2 q' B7 I0 |# z
  688. PPU_Write   ;写入数据
    8 y- u. R2 L3 {8 I( X) i1 s
  689. INX
    % j% r, j; v& {# R6 x) y% `, C
  690. LDA PPU_Addr,X
    7 S2 ]- v7 ?6 a2 S7 @2 q& V$ B
  691. CMP #Flag_Over
    # m  ]+ ?4 g( j. H, }
  692. BEQ PPU_Proc_End/ Z% o' x" z( y: L& V
  693. STA PPU_DATA. `$ g' L, ]% y1 Z
  694. JMP PPU_Write
    9 a: M1 L# N. q/ {# t* w6 R
  695. ;------------------------------
    ' i* K* a% j5 o+ n1 v9 r. ?6 T, L
  696. PPU_Proc_End  ;单行写入结束# |# O* |* E. g/ m/ E& I% I
  697. INX
    1 B# `7 O' I- g$ V- |" x4 L* x
  698. LDA PPU_Addr,X3 m1 h+ e) E" Y0 L" y* h5 B
  699. BNE PPU_Mode_Select
    * k) y( }; p  X$ A" c! x1 g2 z1 y
  700. STA PPU_Addr
    8 a8 V- [( J* E: B& j4 D( o
  701. JSR Update_Palette_Color
    , t6 \/ s/ q, W" F1 }" S# A
  702. LDA #$00
    $ |9 m$ G! X3 \) X* d/ f9 ~, _  P
  703. STA PPU_ADDRESS8 r. Y/ Z# A! G
  704. STA PPU_ADDRESS
    ! B) @0 i: X1 x; r+ R2 v
  705. STA Show_Track_Name
    3 d) X. h1 c* b" ?
  706. LDA #Scroll_X3 O1 m! z% G1 l: I; B2 L7 |( d
  707. STA PPU_SCROLL: r) }9 q1 k. p0 g6 z
  708. LDA #Scroll_Y
    1 F# ?& Y# d4 F! s( R* `9 t
  709. STA PPU_SCROLL( Q7 |6 K% C) {4 I+ r- u+ {2 G* K
  710. LDA Screen_State
    0 c% T1 i  v, S( G
  711. STA PPU_MASK% ?, q6 {* m1 ]/ W
  712. RTS5 d5 U* d0 P  P: C9 N9 K, M4 T0 f3 V
  713. + Z+ N' C! C& g$ Z4 r6 E' o
  714. PPU_Proc_Clear
    7 {$ J# X) t0 U
  715. INX
    $ s0 y9 w* c6 Y  O& H) i5 n5 C
  716. LDA PPU_Addr,X: k- x6 F" S3 N
  717. STA PPU_ADDRESS
    2 Y- ?/ S! F3 b4 D4 P/ c
  718. INX
    8 H, p# f+ }1 N/ I
  719. LDA PPU_Addr,X1 @- E6 Q: N" z/ s
  720. STA PPU_ADDRESS
    - D% h2 o( m7 }7 @
  721. INX
    ( Q, G7 q7 n( c( C! p/ S
  722. LDY PPU_Addr,X
    + A' O& K1 h8 G/ g
  723. LDA #$00
    ' o, v1 M) ]# G5 I' C
  724. PPU_Proc_Clear_Write/ u% v# z7 g; L* Q: p& S, A' |
  725. STA PPU_DATA
    ! `$ v. U# _* c6 O& @
  726. DEY/ ~2 n4 a, D6 b/ w1 C/ S
  727. BNE PPU_Proc_Clear_Write
    $ w" T! @7 D, l3 c! a
  728. JMP PPU_Proc_End' C- h) f7 g& E; J. f4 [% \

  729. ! ]4 V) }/ I7 q
  730. PPU_Proc_Cnt_Line
    4 A: q! L) O1 Y! i, d
  731. INX
    5 X' Y# u& z4 ^- F7 w; N
  732. LDA PPU_Addr,X5 h- K6 K3 N3 r, k0 W
  733. STA PPU_ADDRESS
    3 r, ^/ q; d8 W/ }( O
  734. INX% N: k8 F% a9 D6 L% A5 U
  735. LDA PPU_Addr,X
    ; z  V  [/ b" C% Z" I- H
  736. STA PPU_ADDRESS' q3 |, w0 K  k6 ^
  737. INX
    5 ~" i( M: L' I9 y
  738. LDY PPU_Addr,X
    ) G# x! r) R4 i2 p
  739. PPU_Proc_Cnt_Line_Write
    / }2 I" W- [% k9 n
  740. INX! k7 k1 E. R& _7 M1 |
  741. LDA PPU_Addr,X+ A0 Q! F0 ~) e
  742. STA PPU_DATA
    3 s- i- l7 t* y% I+ r0 Q: F, z# y
  743. DEY
    ; W& A! ?9 |' b. _& }
  744. BNE PPU_Proc_Cnt_Line_Write8 \) h: S4 D6 M/ m' C0 |' r! {
  745. JMP PPU_Proc_End6 s$ f; ?5 {( W
  746.   ]2 z2 r+ p% p9 F; K& V
  747. ;==============================
    / d- }3 e& s# N" m* k1 }' q6 j/ t
  748. HEX_To_Dec;十六进制转十进制! Q$ S. j( J( r- U. D4 r* \
  749. STA HEX_Data8 M* ]! D$ s. B' m/ E' X+ Y* A8 J
  750. PHA" W9 l3 F: S2 U& _! X; s
  751. TXA
    6 {" W' S) O! ?
  752. PHA
    / y7 t7 @! k+ M$ r9 }; T2 B. n
  753. LDX #$00
    / G' W% P1 A* M) [. z
  754. LDA #$00
    1 @2 \+ M2 u% B  U
  755. HEX_Cln0 k* e0 B* M7 k0 `% w  {" k
  756. STA DEC_H,X
    ; Y: @- x5 J3 i; m4 |0 S! W7 v
  757. INX
    % |& a7 `. `( r- h; d2 G
  758. CPX #$03
    0 m! f. U3 F2 @5 q& q9 q# `
  759. BCC HEX_Cln+ Z* F% E" e. d' }( U
  760. LDA HEX_Data1 h& Q7 Z# Y  }/ m
  761. ;------------------------------3 c" y1 L& v  x& @
  762. HEX_100
    / U6 F. g* M& r# R0 s
  763. CMP #100
    8 P( ?9 h( K' N& Y+ u, {
  764. BCC HEX_10
    6 @2 N: k) z% r
  765. SEC
    6 ^. A2 D+ }+ H
  766. SBC #100
    $ o% s( j, C3 ?# z8 Q0 h+ A
  767. INC DEC_H
    5 W$ K" [7 ~- T7 ^
  768. BNE HEX_100
    $ ]; M& h/ s, |" t! l0 f! T
  769. ;------------------------------0 Y  q# ]  g1 @9 W9 x6 N; ^
  770. HEX_10
    + F6 R" ?# m+ @% x" q
  771. CMP #10
    9 o) L& w2 d- H& B7 _& A
  772. BCC HEX_1
    . z1 O' v% m" L/ e
  773. SEC8 _( r' R# \+ Z8 q3 `1 a4 [
  774. SBC #10+ V8 I6 D( \+ m5 s% a7 Q0 K
  775. INC DEC_T
    6 q. d7 }/ x- E- O
  776. BNE HEX_10
    + `6 n' H7 ]. h! ^- w+ V' j( ~, K
  777. ;------------------------------
    4 ^  c( H( n( A$ W4 I2 ^5 a1 h
  778. HEX_1
    9 T5 ?; E  `9 v3 l; d6 y; l* F0 _  z
  779. STA DEC_L
    8 B0 O3 @+ O9 a1 O  ^
  780. PLA6 ~; g, R# Y9 x: i7 `, Z6 z( d+ h, F
  781. TAX
    8 \% {1 {  i( C7 t$ U2 _
  782. PLA
    3 Q4 X3 f) p2 g+ P
  783. RTS3 m! R" ~* J" u2 w1 m) H/ q/ \
  784. 6 k" L8 ~) \( n  H7 K
  785. ;==============================' ]' {2 a- h; U9 q4 R' |: P# T
  786. ;音乐曲目显示+ l: `! Z. C: M0 B$ H7 c
  787. Music_Show
    . X- A5 _6 D. ^0 K- h
  788. LDA Music_Cur( b: K1 I0 r9 v, T* ?# `4 P$ H5 u
  789. CLC
    . a" i4 I9 J" V+ K$ `& X4 d
  790. ADC #$01
    7 S0 R& R9 M0 S( s  ~
  791. JSR HEX_To_Dec0 Z1 M2 C" I6 _: t# M8 z
  792. LDX PPU_Cur
    + f2 X- U" ?6 i7 n
  793. LDA #$FD
    . K! I( G5 A3 E; G
  794. STA PPU_Addr,X
    / P# F8 O% Y' N
  795. INX0 A7 ~* ?, f" W$ d1 X" }6 v
  796. LDA #HIGH(Play_Index_Pos)
    % M% ?1 @- _  e2 t  C
  797. STA PPU_Addr,X
    # X' ~7 {3 Q, b6 t" P8 J
  798. INX, X7 x0 i5 |% X. s4 N9 p' Z
  799. LDA #LOW(Play_Index_Pos)
    # T' F" F( Q. O% `% x9 Y& k
  800. STA PPU_Addr,X
    : m% p1 A& s' |' H  ]5 B
  801. INX9 P& {$ g5 P1 a; \3 ~( M

  802. 7 M# M$ O3 @8 u! k8 Y2 g) M0 ?
  803. .IF Music_Song_Total > 99
    + P5 X0 {2 t" f) c# p4 ~6 G5 O% \
  804. LDA DEC_H6 y( ^. \3 q" M  X$ t% O6 s
  805. ORA #$30
    : D: ~) C8 |" x8 \- ]
  806. STA PPU_Addr,X7 T/ k7 @, A3 S9 h) g- p' o# g
  807. INX
    ) q; W5 L1 d1 [, l
  808. .ENDIF/ ~- p2 H' _% @
  809. 0 h1 p8 B, ], Y2 S% N* z% @: R
  810. .IF Music_Song_Total > 91 j+ G) `8 j# F$ _. C
  811. LDA DEC_T
    7 V+ ^/ h9 O% i! H, ?
  812. ORA #$300 v, z8 `3 C4 P* t
  813. STA PPU_Addr,X
    # Y! L  ^/ [8 d) u" K8 g0 ]
  814. INX  x* X! \" u. A
  815. .ENDIF
    - X3 l+ J) R+ a4 v' j' ]

  816. ( \! T2 n: Z# N! H5 ]- e
  817. LDA DEC_L& _" t  i. Q( F7 \! ]" w# a4 R
  818. ORA #$304 u- ]' Y, l0 a7 K' l: B, D/ u7 n# [
  819. STA PPU_Addr,X
    9 F: v0 ^7 q  v0 X) l4 f
  820. INX% c& @7 f4 D" t3 N* y
  821. 8 A5 r1 Q; _- ?% T
  822. LDA #'/'" ]8 _0 |! r2 P- d% ^7 U
  823. STA PPU_Addr,X
    $ w1 l* ~7 @' q5 X# Z  M1 u% ?) e  K
  824. INX
    / K  D9 Y; ?& a  E+ h: O
  825. Music_Show_Total
    ' `8 J1 U! S# [0 {( Y5 m. \
  826. LDA #Music_Song_Total
    # X! G  Y5 I# l- I% u
  827. JSR HEX_To_Dec# ^8 S  a/ B  H3 e2 }

  828. 5 Z0 S) o; B$ U# J5 z8 s0 |6 Z& B: k
  829. .IF Music_Song_Total > 99
    * `8 {% g, g0 I4 z* O: s, F" A
  830. LDA DEC_H
    3 s$ D0 f8 I  {9 u
  831. ORA #$30
    2 d- a. t, A) Z9 p8 `
  832. STA PPU_Addr,X* W$ Q* z% [/ @- ^3 f
  833. INX  y0 e0 B6 J3 X5 h4 I& K
  834. .ENDIF
    . Q$ A8 r& {1 \8 C. R1 E* }$ |( w
  835. 7 a! J3 g- e. G5 U3 b
  836. .IF Music_Song_Total > 9- e/ _7 \4 S7 t: O1 m0 z6 f3 P
  837. LDA DEC_T
    8 e1 Y6 f5 c/ p
  838. ORA #$30; S. Z: E9 C' P; S/ H( T% q7 T
  839. STA PPU_Addr,X
    , t0 l& S6 N; o; P/ ]9 [
  840. INX
    2 f$ K8 N' l6 H9 G1 E
  841. .ENDIF. q9 t2 {* i0 [
  842. . R& V% K1 z5 ]: b5 l
  843. LDA DEC_L" k2 b2 A' H# g9 g( W' E
  844. ORA #$30
    , r; ^' N! {4 W. }0 V# p" |+ S
  845. STA PPU_Addr,X
    # c7 e* t1 s, n6 [- e
  846. INX3 U8 E" h) V( k. ~
  847. ; }% \$ c9 S+ |. E, M; K
  848. JSR PPU_End' _& {+ M& A4 l
  849. Music_Show_End
    $ r+ @7 ~, b+ m: Y! G
  850. RTS
    ' S2 h7 c# u. ?8 V) t' h

  851. . U0 J! T+ i( r+ n3 Y& {
  852. ;==============================9 R1 Q* Z! P  s% B! }+ Q
  853. Time_Show;播放时间显示
    8 B3 E1 P3 A: i! N" B" u
  854. JSR PPU_Addr_Set
    3 s2 T; H5 a: m7 f' _( @0 M
  855. LDA #HIGH(Play_Time_Pos)
    . b& W9 q- v- v$ `
  856. STA PPU_Addr,X  {9 V- j/ U% v; \
  857. INX: P; O& p% z' U
  858. LDA #LOW(Play_Time_Pos)1 w" x1 x; Q+ h: {. C
  859. STA PPU_Addr,X
    ' w, e& e+ N! F  k+ z! u
  860. INX
    $ |1 z2 X& o9 d" D
  861. Time_Show_H
    3 g5 Q0 T6 Q$ O
  862. LDA Time_H
    2 D; y$ q- e! C9 t3 M
  863. JSR HEX_To_Dec# k1 d% G) o5 A; k
  864. JSR Time_Digit5 T" f/ K% j' I4 s- |
  865. LDA #':'
    ; k9 U, B1 I! x6 \+ I" A
  866. STA PPU_Addr,X9 z: R: N5 x  O2 R
  867. INX" q$ B  e" U* e- l
  868. Time_Show_M
    + T7 b  B2 m  ^7 R4 N7 a
  869. LDA Time_M
    1 M% }8 o, D& X# M- K( P
  870. JSR HEX_To_Dec
    , S+ D- }2 z9 P( V4 I* u
  871. JSR Time_Digit5 O- b- L! }$ y% _
  872. LDA #':'
    7 a1 \- v- V% ^: v5 U7 l" x
  873. STA PPU_Addr,X4 {3 S9 @: k3 `* v
  874. INX- `( N( i7 J1 W- y9 \: ]
  875. Time_Show_S3 M' u  Z5 O1 }" r+ f1 }& `
  876. LDA Time_S5 _  i! k: Q( o& U$ D2 R/ n+ C/ U
  877. JSR HEX_To_Dec5 [4 Z4 |) X) g" p- H, }8 d2 A
  878. JSR Time_Digit) I0 u( u9 J( W- b3 X, V+ Q
  879. JSR PPU_End
    $ g, Y9 s  N( r& a/ x) Y- |2 T( T9 j
  880. Time_Show_End
    % @! E6 I4 ^2 |* ^8 Q* H
  881. RTS5 ~% o* y+ J" }& u2 G

  882. : n6 l/ I- \; c4 e- T
  883. Time_Digit9 i6 `) x5 K3 H( ]$ `: n
  884. LDA DEC_T
    1 C1 J$ O' t) D. R3 l
  885. ORA #$30
    ' Q# u" `0 J* Q. h; j- ]7 M/ `
  886. STA PPU_Addr,X1 Y& K5 H  L. E) _9 J5 R( |
  887. INX+ y" b3 q! }" I! e+ C1 x, A% n% S
  888. LDA DEC_L
    " y( q) S0 o+ ]
  889. ORA #$30
    . r5 c; J0 Z! B' }% H+ U5 h
  890. STA PPU_Addr,X
    . ?* q) C! g; q8 t. W
  891. INX9 l, s$ @: N8 Y
  892. RTS! j) _/ l2 C( r8 s. j" B

  893. 6 |2 l% }' Z+ \! v1 v( F: W
  894. ;==============================
    : c+ _+ M- T8 M6 N5 y
  895. Time_Count;计时
    , _2 Z3 h9 F# v# x
  896. LDA Music_State2 k% v6 Y7 s: h" |  L8 t
  897. ORA Time_Wait_Cnt- U' z  h+ S3 i# B- D8 `: A. e
  898. BNE Time_Count_End
    # e$ p& w0 F# Y1 j5 c: L: p- f
  899. INC Time_Cnt- j* ^% t) `& \- Q
  900. LDA Time_Cnt: Y" j$ Q; K4 ~
  901. CMP #60
    " _: y8 b  K6 m5 s% ~! C  h
  902. BCC Time_Count_End
    ; f/ u) n. K. K: @! b! z1 L
  903. LDA #00, T. R7 w0 E0 u$ B. b+ W
  904. STA Time_Cnt
    0 N$ i0 w! R5 G( i
  905. INC Time_S
    + Z; j* s2 v( A7 K: x
  906. , H& w9 ~) }4 r% j- Z+ I
  907. Time_S_Cnt* C& j/ n. a  `2 V6 v1 f
  908. LDA Time_S
    ' ?! L5 m, y' V$ ~" D
  909. CMP #604 N- n/ g$ @6 j. P# I3 F( \
  910. BCC Time_Count_End2 X. U  x' ?' ]9 A7 p' I  y
  911. LDA #00
    5 c, i) l( ]+ [: t7 i, D. [
  912. STA Time_S) m* F( j2 R$ a. h
  913. INC Time_M4 b6 {1 V1 M2 T! L8 u) @
  914. 1 W. D1 X$ G# L- y/ W' g
  915. Time_M_Cnt' Z% f* b+ g- ?- l) A" a
  916. LDA Time_M: J# X* ~% |7 L' U/ h
  917. CMP #60
    % O: U5 \& D- Z$ E  H
  918. BCC Time_Count_End( A: E3 k" V; ^1 q) Y
  919. LDA #00
    2 A: j" h; e' j+ [" H4 @) \
  920. STA Time_M; u. _7 D2 O- w1 Z1 b. d, I
  921. INC Time_H
    - b; s; r3 G" F4 Z
  922. * H. O" P4 q" j" M
  923. Time_H_Cnt
    5 |; _( b- N* `1 Z4 ]" p  A( j4 d' A
  924. LDA Time_H
    - |+ d5 R$ Y2 s2 h+ {
  925. CMP #24
    % b* h' v2 o( ]- C& u$ x5 B6 z
  926. BCC Time_Count_End9 w* ?9 z! h. M4 C* e
  927. LDA #00
    # X# b3 d$ w4 K% r4 V' j: E! p4 x7 [
  928. STA Time_H
    ' A% H- |$ _% X3 U' {! R
  929. , r& J2 B% |+ r  S( k1 t
  930. Time_Count_End; E4 g# R1 I: a( I; H7 ~
  931. RTS2 M9 ^0 V2 ]6 N$ T! ^  H+ g

  932. 0 P9 z9 P! S" A3 D$ H. Z
  933. ;==============================
    / ?9 w2 N! n4 J! t3 k/ `9 l- j  R+ H
  934. Time_ReSet;播放时间重置4 O& W; V* Z" x: M! E
  935. LDA #$00
    ) V: K7 {0 r# i( |# F# ?- {
  936. STA Time_S6 q( ]% f9 V8 W1 ~8 G: i
  937. STA Time_M * V% m5 P, K8 J' N5 U. q; p1 b8 g6 }
  938. STA Time_H
      W* x. J' E0 X5 V( L: g
  939. STA Time_Cnt/ e$ k+ ?2 |5 u- O9 }5 \* F) m- [
  940. RTS
    * `6 V+ F" e, U7 B; g) @( ?
  941.   h; e, Z, a& ]2 J' Q4 w7 y
  942. ;==============================
      s  P8 o# {: W, P0 ?6 `
  943. Music_Bar_ReSet;音乐条重置8 k2 C% W3 y. ^" Z6 A# K
  944. LDA #$000 A5 b0 y$ K" g, L  P. V1 F
  945. LDX #$007 z6 B/ P1 ~+ `- E. A4 |. j
  946. Music_Bar_ReSet_Set- z: t' y# f3 M8 S7 M/ ^% c
  947. STA Sound_Bar,X  Y& S9 R- L/ ]) w; N
  948. INX
    1 @7 |1 R( ?+ z" ?$ e
  949. CPX #$10( e& S% s8 l6 ?0 k# u+ k
  950. BCC Music_Bar_ReSet_Set5 Q, {* A# g. A. w! q$ o' j$ I, s% p
  951. RTS6 t- f2 u& c" T
  952. $ m/ ?$ e% S7 n
  953. ;==============================
    : O: H. \+ I; f
  954. PPU_Data;PPU数据写入) p3 c+ m6 ~4 ?1 ~9 v, N
  955. STY Data_L; ~+ Y$ k$ G7 y( m
  956. STX Data_H
    2 Q5 b8 k7 c/ W8 i* m$ G  ]
  957. LDY #$FF  T  y) j( Z4 ~9 f. Q1 K$ K
  958. LDX PPU_Cur
    8 w( D3 Q& k0 e# _
  959. DEX
    4 R* W7 b' Q+ b& b. M
  960. PPU_Data_Beg
    - ^- q! [" k$ Y
  961. INX
    " ~6 P; W" ]* B3 I2 V7 ]3 K# r7 }* i
  962. INY% h; B, ?! D( @+ O/ z' c
  963. LDA [Data_L],Y
    9 H4 G7 c5 O& P& b
  964. STA PPU_Addr,X: j' Z/ @. v- L9 R# G9 [8 {
  965. BNE PPU_Data_Beg
    9 |0 L* f: Y; r0 U- R' Z
  966. STX PPU_Cur
    7 x8 m: d! r3 q1 {3 m
  967. PPU_Data_End
    ) T9 |7 `0 \; N7 }) T% b: B
  968. RTS
    ! r" f7 n6 `( p  U

  969. + a, P. ^0 B; e' K. q
  970. ;==============================1 _9 [7 b% t" m. f+ v1 D# D9 j! `
  971. Music_Stata_Show;播放状态显示$ M, s4 J; L) E9 i) X3 `
  972. LDA Music_State
    ' c0 Q; V0 G9 v' S& I' E6 g/ D6 x
  973. BEQ Music_Stata_Show_Play
    8 A5 g6 W" ~! Z6 z
  974. Music_Stata_Show_Stop
    4 }; v$ l! ]) t- ~* ?
  975. LDY #LOW(Music_State_Stop)
    6 j; x, B* N; ]/ H; ~2 F& I
  976. LDX #HIGH(Music_State_Stop)! t: r5 x3 b' b( y
  977. JSR PPU_Data0 s& ?5 i2 o! X. ?) L% C% ~: x
  978. RTS
    2 z/ Q/ |  q5 x1 a3 m
  979. Music_Stata_Show_Play
    ( c7 ]5 N8 \+ K5 X  C
  980. LDY #LOW(Music_State_Play)
    + c1 B; t' {. t+ j, w) A
  981. LDX #HIGH(Music_State_Play)
    ; E8 ^! E& h1 T8 i( f" A0 }3 d
  982. JSR PPU_Data
    6 `9 Q# m2 G9 C3 _
  983. RTS
    + ]) L1 d& a! X, W7 p$ t
  984. 1 D$ c/ V: K/ D  `2 U' ~" j
  985. .IF SOUND_BAR_SHOW_ENABLE) r# h8 t1 s6 @$ G) y- T, u
  986. ;==============================0 e0 i6 c5 m: @6 K
  987. Sound_Bar_Text_Set;标题与音乐条初始化5 r! Y! ~0 X& }, G7 \
  988. LDY #LOW(Sound_Bar_Text_Data)4 J' f: Y- ^# [# n8 m# y, \9 b! B
  989. LDX #HIGH(Sound_Bar_Text_Data)  o" W% U6 }: v( l4 I
  990. JSR PPU_Data
    % R, \# F  K- Y) U
  991. RTS
    7 z; {/ D5 `; }" j! t/ i* r
  992. * ]) ?: G! T) v+ P6 ~  ?
  993. .ENDIF- P9 K6 z( a3 n& q! U8 M

  994. * \0 s+ C% b( N
  995. ;==============================
    1 E! O) G  k* K
  996. Set_NameTable_Attributes;设置命名表属性! c0 I. a" W0 K6 A" Y  R2 ~
  997. LDA PPU_STATUS( h' D  a# E* h$ q  [
  998. LDA #$23
    ; n/ u& h3 q2 G
  999. STA PPU_ADDRESS" H7 V: G6 i2 d3 Q2 I- v
  1000. LDA #$C0
      `2 K- r1 Z: ?
  1001. STA PPU_ADDRESS
    " L3 k/ I2 Q! V; g
  1002. LDX #$007 j$ b0 Z. r/ d7 U, t( q& `
  1003. Set_NameTable_Attributes_Write% [$ r- R3 j  a9 s
  1004. LDA Palette_Attributes,X
      F+ @' _' u: ?/ ^
  1005. STA PPU_DATA
    - v+ |1 C6 P  Q" q% m0 `; m/ S; P) t
  1006. INX0 _4 t1 N9 a, e9 k: q4 u5 C
  1007. CPX #$40
    . U' K# M/ U% M+ e  @% Q
  1008. BCC Set_NameTable_Attributes_Write1 S2 f- n$ G* X- n( O1 N; \. C/ ?
  1009. RTS
    # p4 C. o, x4 |# ^% y

  1010. . U/ e: R/ S  A2 ]7 F
  1011. ;==============================& r- R# K7 S" l  }. T
  1012. Set_Palette_Color;设置调色板数据
    / A9 o4 q( {: e# P
  1013. LDA PPU_STATUS
    8 {/ c' L9 u9 n3 C
  1014. LDA #$3F
    9 j' ^$ Z# P. L- t6 q: W
  1015. STA PPU_ADDRESS
    + [: A  E) v9 A  m* l$ ]& h1 p
  1016. LDA #$002 `' v* M5 ~3 q1 ]) U! K
  1017. STA PPU_ADDRESS
    9 {4 h% L* y8 f
  1018. LDX #$006 x" H4 I% x" U7 U5 a1 `
  1019. Set_Palette_Color_Write. h$ _6 U5 t9 Y6 N- Z/ f) [
  1020. LDA Palette_Data,X
    $ s# L2 a9 x- _' q+ h; s
  1021. STA PPU_DATA
    ' O# M( e" W+ [
  1022. INX
    & X4 i( E/ X# b4 X" N% ~
  1023. CPX #$20# v1 D( n4 x7 D+ T8 Y: I
  1024. BCC Set_Palette_Color_Write: i0 N, @/ V8 B+ D
  1025. RTS7 z( {6 K% F8 _) V: L) D
  1026. ( S" {7 _. }  a
  1027. ;==============================! q( J8 _% `; h0 D
  1028. Init_Palette_Addr;初始化调色板数据
    * d% e, [& v7 t5 o' s% c/ j- z9 d
  1029. LDX #$00( n  F5 d; ^  n9 J
  1030. Init_Palette_Addr_Write
    % J0 W( n9 S; v' ^
  1031. LDA Palette_Data,X
    " d0 I3 C! C( Q9 R
  1032. STA Palette_Addr,X9 ?% v( U+ q7 q7 e% d
  1033. INX$ P$ l9 t- Q, A5 f8 k7 V
  1034. CPX #$20
    1 D, C) E2 U% Z' F; y, r
  1035. BCC Init_Palette_Addr_Write
    ' f5 N5 K1 @7 X- e% q# E
  1036. RTS) T% X3 `" C/ j0 ]8 N5 A! o6 Z1 k
  1037. 4 i  u0 I' V; F/ [) n
  1038. ;==============================
    3 c/ Z' P* y& ^5 ]# ^! o! r- L
  1039. Update_Palette_Color;更新调色板颜色! B+ W8 y/ O- K6 R
  1040. LDA Show_Track_Name; y9 \! W* n/ S9 h, x( o
  1041. BNE Update_Palette_Color_End
    . s3 q3 @! M4 a
  1042. LDA Palette_Update_Flag
    ) L' p5 g+ w0 N6 @, H
  1043. BEQ Update_Palette_Color_End4 L2 }2 n7 X9 a: ^% A  L& j
  1044. LDA #$3F
    " S% W& M8 ?* ^" p
  1045. STA PPU_ADDRESS
    2 M+ A* X+ R( M) r% ?
  1046. LDA #$00
    ( J( @( x* x4 J" o  M. Q
  1047. STA PPU_ADDRESS& G* s, Q1 V* s; d4 v- N
  1048. LDX #$007 E( T  k* x  p, D5 t" q# j4 N
  1049. Update_Palette_Color_Write6 G7 W' h3 y1 j8 H' s" h+ ?! h3 R) ^
  1050. LDA Palette_Addr,X1 m( t) V1 Y3 ~6 {4 R" N- ^
  1051. STA PPU_DATA
    * T# U3 X+ r" g% I/ p- ~& f
  1052. INX
    ; a3 U/ b3 ]% H- w4 ~- j
  1053. CPX #$20) r' i1 y- f" n& p/ q
  1054. BCC Update_Palette_Color_Write. m' F# j+ S1 X5 J
  1055. LDA #$00
    8 {* w, G$ o) _; q( p4 o2 J* h
  1056. STA Palette_Update_Flag, M: C5 Q8 V- k' o. V# ]# [
  1057. Update_Palette_Color_End$ J& U$ p. u) G
  1058. RTS  T* O$ L9 O, K- R$ A4 q. ^
  1059. ) P8 M& D. ]* p4 c6 p
  1060. ;==============================) X$ |  f6 k$ P# N! X9 ~; \
  1061. Update_Palette_Data;更新调色板数据9 ~6 }2 l- H1 Q# m2 s0 T* _
  1062. LDA Show_Track_Name
    : y. O" _' F% z* y  K) e
  1063. BNE Update_Palette_Data_End. W6 |9 {7 k- ]+ o& x% J5 o0 [
  1064. LDA Music_State7 t! r2 a' ^+ M) N8 U* r6 z
  1065. BNE Update_Palette_Data_End& b, |. F4 ^* u- |$ b. m) E$ t( Y9 u
  1066. Update_Palette_Data_Check- {$ G6 W2 k' y
  1067. LDA Palette_Wait_Cnt
    5 A8 V, c- M- I* M0 ~. {7 ]; G
  1068. BPL Update_Palette_Data_Check_Over+ Z% C6 Z3 J" a  k2 U3 K9 I
  1069. LDA #Palette_Update_Interval' t, n9 P/ D9 G  U6 O
  1070. STA Palette_Wait_Cnt4 _* x' A' U, |; {6 u
  1071. Update_Palette_Data_Check_Over, C$ C6 j, N$ U$ M2 U- c0 V+ @$ x# i
  1072. DEC Palette_Wait_Cnt4 _. ?" U$ F& F  l" x  y
  1073. BNE Update_Palette_Data_End
    ' w* T& u  M& t
  1074. INC Palette_Update_Flag
    " D4 Q; {& Y( d$ O
  1075. LDA #Palette_Update_Interval
    % C9 z* q* e- [- G
  1076. STA Palette_Wait_Cnt- j& s- n  P; B6 X7 i. ^
  1077. LDA Palette_Update_Addr$ ~2 S' f8 \0 c5 }, z$ e! ~4 @
  1078. CMP #Palette_Update_Max1 o# ?' ]& s" u  Q! M, A1 B+ o
  1079. BNE Update_Palette_Data_Set
    + y# U4 H8 y' X& w# a; E" l$ l7 E
  1080. LDA #Palette_Update_Min - 1
      ^+ I5 u' }. y' h
  1081. STA Palette_Update_Addr- l' {" j1 w; y2 F& ?# Y+ ?( p
  1082. Update_Palette_Data_Set5 H6 l( \# _: N* V
  1083. INC Palette_Update_Addr' R2 Z6 g' |& |0 Y  d
  1084. Update_Palette_Data_End5 m+ s; m: R. w' f4 {
  1085. RTS3 b8 }) V/ R" R4 G. @% z$ N" A
  1086. : }2 f2 E+ {5 ?
  1087. ;==============================# L5 i/ E) @& J/ H! U
  1088. Show_Music_Text;显示静态文本$ o" s- K$ _$ T
  1089. LDX #$006 ]2 I7 r& V$ [6 m9 T
  1090. Show_Music_Text_Set9 h% z7 |1 K  O
  1091. LDA Static_Text_Data,X
    ( c0 q( i7 A: \
  1092. STA Data_L
      s8 A; G4 F3 N2 |
  1093. INX
    2 x& A; n" g1 l! F' e& g1 j
  1094. LDA Static_Text_Data,X; r. i3 v4 Y8 }8 O
  1095. STA Data_H' t3 G4 z  K, M: ^; V% ]
  1096. INX
    3 C8 N' C: ]+ b% i. ?) |
  1097. LDY #$003 G6 o, b  q5 Q$ B
  1098. LDA [Data_L],Y. [8 a4 R/ a/ ]
  1099. STA Data_Cnt
    ) j6 T$ m+ ?6 s2 X
  1100. DEX+ y" H( J# K+ x+ t; h: R
  1101. DEX  i2 [) c8 `9 `: {$ q$ T
  1102. LDA Static_Text_Pos,X% R* Y1 B# M: j) [8 s" g
  1103. STA PPU_ADDRESS* e1 ^: \3 j+ R3 m7 {) {
  1104. INX- M0 j# E- W* a/ D: E* E
  1105. LDA #$20
    1 Q3 Q: }% n, e- ^& n8 U8 w; H
  1106. SEC! s0 x5 q; d1 R% e
  1107. SBC Data_Cnt
    ! f+ E4 V4 y# t( K' [
  1108. LSR A
    / J3 y6 f  D4 F* A# d& t
  1109. STA Data_Buf
    8 l- e4 I) p+ D8 i7 ^- w
  1110. LDA Static_Text_Pos,X% o4 t8 I, q( {
  1111. AND #$E08 c! T0 ]- @5 ], p: o& t, k) ^
  1112. CLC
    ! {. \9 Z  z; V5 P
  1113. ADC Data_Buf
    , R. |9 _# D6 P2 U4 i* Q
  1114. STA PPU_ADDRESS
    - ~3 @% Q7 D; ^1 I" c
  1115. INX1 U, o1 N" Q6 q$ o
  1116. Show_Music_Text_Set_Write* A: X! t- ~' u2 E* B) W8 j
  1117. INY' G7 [$ f; h1 `7 ]' P' ~' }
  1118. LDA [Data_L],Y
    , U5 ^! ?# k+ F9 w: i
  1119. STA PPU_DATA
      t+ a9 C6 o) O5 J) Q( l$ d
  1120. DEC Data_Cnt
    - V6 \+ k' Y  h( ]( i
  1121. BNE Show_Music_Text_Set_Write8 d  P+ A2 c# w( `, g, [; s5 U5 \
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos$ {" d+ k) Y" J) M+ Y7 D9 H
  1123. BCC Show_Music_Text_Set( C$ O4 ], o1 i. o5 Z1 J2 }" L
  1124. RTS3 _3 U# i* Z; C4 _. f4 f

  1125. * k( M) R9 u6 d0 y5 U4 C4 c% T5 F
  1126. ;==============================/ T+ X; @2 T: e: |" `3 Z4 |$ m$ G
  1127. .IF Track_Name_Pos;显示曲目信息- ?7 h2 w& \3 t+ Y! n
  1128. Show_Track_Info
    ; z4 J) m. G$ p% y6 a; U) p& a
  1129. INC Show_Track_Name5 M  }& N; l6 N- X" A; ]
  1130. Show_Track_Info_Clear
    ; l- B+ J! A& a+ `! o2 l
  1131. LDX PPU_Cur  A, L/ t7 f5 \3 o0 |" Y# T
  1132. LDA #Mode_Clear6 {, h3 \: p, W2 w6 A6 Y1 w' v
  1133. STA PPU_Addr,X+ a3 [& E! c* k+ S  D( }
  1134. INX1 \5 m! v7 i$ S" @

  1135. 4 C- p- O0 j( D  q1 o2 q  a6 m
  1136. LDA Music_Last' g9 e; }1 f2 @
  1137. JSR Show_Get_Track_Name_Center_Pos
    9 y2 R% R8 d: V% l: a. ^
  1138. Show_Track_Info_Write_Cur" g4 {3 p3 v+ ~( ^8 t! ]5 A
  1139. LDA #Mode_CntLine
    0 c- O% O- @/ Y7 w( G# _
  1140. STA PPU_Addr,X
    & f4 x8 E* l0 S7 K. V# X1 ?
  1141. INX
    1 t$ l4 Q& X  D# O. r+ }

  1142. 8 F+ {3 o% A2 U6 H; f& l* r
  1143. LDA Music_Cur( t& s9 c0 ?9 A/ ]
  1144. JSR Show_Get_Track_Name_Center_Pos
    + U5 w( P4 J2 D/ q+ r) S& E  x; v
  1145. * q: P1 v0 G+ L) S* k
  1146. Show_Track_Info_Write_Cur_Data
    ( D) F" ?( X: b
  1147. INY
    : {2 g) O7 I; E  Y5 d, m5 u# P1 v9 G
  1148. LDA [Data_L],Y8 h- c. M6 L0 R6 `( P/ M
  1149. STA PPU_Addr,X( ?! h+ Z4 m5 q& O
  1150. INX+ T) U+ K! w# I3 z( H7 o) O
  1151. DEC Data_Cnt- E6 v% q6 ]$ [- ?: n
  1152. BNE Show_Track_Info_Write_Cur_Data- U& _6 f7 c  N& s2 `
  1153. Show_Track_Info_End$ `) |. S" Q" X- {9 i* d
  1154. STX PPU_Cur
    . ~; ?& X. P, v$ c; d8 I
  1155. RTS8 }9 Q( c! E. n3 v
  1156. " G% Q: Z0 ~5 u
  1157. ;==============================9 a4 |0 g! A' h$ J+ `; R
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置7 i% \, v7 n! T
  1159. ASL A2 F: A+ Z& y% w! b( I, ~% h) h# f0 D
  1160. TAY; m. a8 }& _  v
  1161. LDA Track_Name_Addr,Y
    2 G) v8 C, w$ f- X' Z$ @- u1 _
  1162. STA Data_L0 n; e  u9 F5 E9 j- U4 ]3 Z
  1163. INY6 a# j$ Y" N& e: b9 N( E; R8 R
  1164. LDA Track_Name_Addr,Y
    0 [! g& z! _5 r: L
  1165. STA Data_H  V( @( |1 I' j) P3 Q
  1166. LDY #$00. ?# q9 i$ \$ l, n# _! |+ ]
  1167. LDA [Data_L],Y
    / U) _- n1 s( F5 g- |7 w
  1168. STA Data_Cnt$ Q0 H" f/ A" O- f& l2 g3 ]& H" S
  1169. LDA #$202 E# m) }7 P/ p& G
  1170. SEC
    ' v/ i$ E4 L/ E% O
  1171. SBC Data_Cnt
    / x7 B% Z9 g' y6 r- A6 v
  1172. LSR A0 t3 O& h  r0 u6 ]3 q
  1173. STA Data_Buf
    5 W* i5 w3 M' h  X% m, q
  1174. LDA #HIGH(Track_Name_Pos)0 i/ v( A8 O9 {1 D' q; J8 t1 o% |' `
  1175. STA PPU_Addr,X
    4 K! c* K3 D2 @! B/ h# H: X
  1176. INX
    4 W, Y0 D- g0 W- M9 d
  1177. LDA #LOW(Track_Name_Pos)$ [% f1 L$ k# n1 H
  1178. AND #$E0
    0 H# p9 n3 m0 p
  1179. CLC1 {0 v, e0 B. L3 R
  1180. ADC Data_Buf
    $ \# U% t# S7 w+ ^# a
  1181. STA PPU_Addr,X% @( ~& q) @: c4 O
  1182. INX
    + N; I1 Q* Y0 @. r8 A
  1183. LDA Data_Cnt7 d1 i6 c$ b: x, s
  1184. STA PPU_Addr,X, P2 k# R8 z  T( e; x1 o0 e
  1185. INX
    ) {8 e3 r- w1 m% r( n6 n8 G; a3 K
  1186. Show_Get_Pos_Center_End
    " m, E! @+ O% Z% v, M
  1187. RTS
    - X' h- {6 H0 \+ F) I! D& _2 ~
  1188. .ENDIF
    ( a. F. O& D# P

  1189. / b8 x/ _7 K1 v: n/ L/ Q$ B: ~
  1190. ;------------------------------. A7 N. q' Q& r: ?% d2 _
  1191. ;命名表数据" z9 k# z. U! I9 W9 \! r3 p8 L
  1192. Palette_Attributes
    + o2 q1 j) d& m, t
  1193. .IF SOUND_BAR_SHOW_ENABLE
    9 ]& ?$ S; T+ R  I) h
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    - i. z' {( T8 i8 c8 J3 Z
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    4 f* J" j$ A: J6 T5 p) ~* L1 Q
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55+ d! G8 ~4 @3 g. K+ L
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    / s. s; [0 Q& M4 X& F0 r
  1198. .ELSE
    1 L/ e8 S6 G) v, @6 p" d  B
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    $ v. R$ ~, ^- O6 M. {) h& P
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF5 X* s/ P. }3 p% w; G# |
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    8 S: x7 Z- u2 U, n) @( j
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55, [& F/ u4 {& u
  1203. .ENDIF
    9 e0 {' t# u4 J& Q. o4 W

  1204. ' p; D5 l7 C/ b4 [% X
  1205. ;------------------------------
    % l, p1 i8 X( B/ j0 z+ `9 U
  1206. ;调色板数据0 z6 I# m" C. y- D! ]
  1207. Palette_Data
    / X5 Z7 w+ l5 t4 b; V
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F, N* O! i( {  q) P; O
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    ! t! l* ^1 c$ U' R8 G, T
  1210. 1 d) H0 ]* @- D8 f) i
  1211. ;------------------------------
    - Z8 H9 L0 J6 \. B9 U) n( L
  1212. Static_Text_Data6 B& k; k8 h# c" Q
  1213. .WORD Static_Text_Title_Data$ L& K$ n6 [' J1 s& C1 g
  1214. .WORD Static_Text_Author_Data
    ( P* H* X* ]3 C% t
  1215. .WORD Static_Text_Date_Data* ]( V6 a- ]2 r' W4 h- j0 y
  1216. Static_Text_Data_End- E' o0 ]& \& X: w# c% u  I6 u
  1217. 0 g- s7 A' j6 F
  1218. ;------------------------------5 E3 Z1 C" X8 {' ]) i/ X9 w
  1219. Static_Text_Pos
    : ]1 [3 }9 }! O7 L
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos): Z6 x# [5 G5 ?
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    0 D' A# ~$ X( J
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    ; ]8 v  c, S' y& N) B, t# {
  1223. Static_Text_Pos_End
    6 L1 ]  ]1 l; N' K' x. v
  1224. 7 J$ C( m: J* w! i  T# B) b
  1225. ;------------------------------- Y& c, h0 C5 t4 Q  I, f2 W
  1226. Music_State_Stop% `/ f5 I( c# T% k4 U4 S; f! V! n
  1227. .IF SOUND_BAR_SHOW_ENABLE  @6 `# R6 K! ^% A. i
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    8 y# b1 i$ I8 x3 b% o2 V' h" `
  1229. ELSE. w% ?4 F) [- U+ K
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00! X0 h# l' d- {: @3 q6 _) _- `! J* `
  1231. .ENDIF& w* \! F* r( U# L5 O/ ^
  1232. Music_State_Play
    % h7 A5 u, P2 l
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    & G0 D. e% h$ B1 i
  1234. 1 G$ b' E7 _3 x
  1235. ;------------------------------
    6 \8 I: O: K6 V7 w7 f
  1236. Sound_Bar_Text_Data;声音类型文本8 T# s  X% c: {+ o! Y3 J
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    $ `4 Z0 g, b: ?* J
  1238. .DB "SQ1-",$FF
    - q( [* t6 O8 E5 w. T0 N/ X, B$ _
  1239. .DB $FE,"SQ2-",$FF" q+ m# a* W1 B5 U5 }; R
  1240. .DB $FE,"TRI-",$FF
    4 {# z, f# t/ y* ^3 W. u% Y4 }0 g
  1241. .DB $FE,"NOI-",$FF$ F2 P: |/ i5 v2 A5 ~* n* x
  1242. .DB $FE,"DMC-",$FF,$00: ?6 G+ t3 Q! Y

  1243.   D: {  T; ^6 ]& d4 u
  1244. .IF Track_Name_Pos
    & s5 n" p7 m0 n2 p0 k, ]
  1245. ;------------------------------6 }5 _& B& |! l* S
  1246. Track_Name_Addr;曲目名地址索引+ V% {& a3 S# m# X9 j
  1247. .WORD Trackr_01
      p7 V: U) q; S8 G- y) e2 S
  1248. .WORD Trackr_02+ l, H" h8 g/ j6 T
  1249. .WORD Trackr_03
    7 U, ]; O' e3 R+ v  P3 @
  1250. .WORD Trackr_04$ P/ g; Y6 Z$ ^) s6 u3 V
  1251. .WORD Trackr_05
    : q% J8 i. |. \! ~7 k9 H
  1252. .WORD Trackr_06' M8 j9 X6 R/ p, |2 v, g4 z' @  a
  1253. .WORD Trackr_07
    . k" [3 J8 v; _# J. N4 J% I) w2 v
  1254. .WORD Trackr_083 W% Y! e- b, p9 O( |% O* A
  1255. .WORD Trackr_09: z0 O; Y' C; x" D9 J1 i
  1256. .WORD Trackr_10
    # {3 L( e0 Y9 G. {$ q
  1257. .WORD Trackr_111 D( @1 h0 q! p  i7 Y
  1258. .WORD Trackr_127 x8 @  S: F  p' h6 B; Y
  1259. .WORD Trackr_13- g% P, [8 W$ S7 U4 n
  1260. .WORD Trackr_14
    " [, f( Z$ L/ p2 x) F  ]( K
  1261. .WORD Trackr_15* F) p5 `9 y! U8 j
  1262. .WORD Trackr_16( C4 P# u7 G9 K: V8 F5 t0 i
  1263. .WORD Trackr_17
    * K! Y# o4 U' T9 _: x  s+ \* v; {
  1264. .WORD Trackr_189 f3 c4 b$ q/ F/ q
  1265. .WORD Trackr_19
    3 v; L0 t: y0 f3 x  ]) p
  1266. .WORD Trackr_20
    9 a' |7 K5 E+ q* z
  1267. .WORD Trackr_21' t& S1 d! g& D
  1268. .WORD Trackr_22$ p+ M3 w8 C3 {% d9 E# c, o" N
  1269. .WORD Trackr_23+ T0 N3 G# g* ^& Q  {& {% {
  1270. .WORD Trackr_24, h" Z" y9 U9 `# G$ j
  1271. .WORD Trackr_25
    : |) g& H0 L2 U
  1272. .WORD Trackr_26
    / |% W) M( G8 j6 k& `" i
  1273. .WORD Trackr_27
    ) {$ g' a; _( O. R, S
  1274. .WORD Trackr_28: O) t& B* j; q' C: b! M/ C
  1275. .WORD Trackr_29
    % `5 O% M+ N# k% u8 z
  1276. .WORD Trackr_30
    * ]" q9 G5 f6 B7 V- H5 a1 {
  1277. .WORD Trackr_31
    : X, e' g0 ?+ |  y& Q, Q
  1278. .WORD Trackr_32# A2 f5 g/ {9 d4 @! M! A
  1279. .WORD Trackr_33
    ) t1 g1 b8 f- t8 `
  1280. .WORD Trackr_34: y* |4 a; i# l6 M* |/ N. x
  1281. .WORD Trackr_35- ?/ F6 a# L7 f7 w
  1282. .WORD Trackr_36
    ' i4 J+ \2 P5 m, P
  1283. .WORD Trackr_37. [$ T: `3 j7 v& x0 T' W
  1284. .WORD Trackr_389 \; s9 Q# i0 ~' F. r
  1285. .WORD Trackr_39
    ' J) C* S. `9 A) o

  1286. # c6 e. ^9 \  g: R+ r# ^+ _5 s
  1287. ;------------------------------. T* B" A) E% V$ o7 I8 z: O
  1288. Trackr_Name_Data
    ' w) u* s8 q/ X1 [' P
  1289. Trackr_01 .DB $05,"BGM 1"
    # o2 v* a! m0 v  I
  1290. Trackr_02 .DB $05,"BGM 2"3 M& e, D5 R6 v+ g! J" [- N8 G* R
  1291. Trackr_03 .DB $05,"BGM 3"" H: X, I1 G. f1 ~! p. x
  1292. Trackr_04 .DB $05,"BGM 4"9 q) r( c/ {$ f( L3 P; v/ y
  1293. Trackr_05 .DB $05,"BGM 5"! _, D$ U/ ~1 z+ m! e. f. w
  1294. Trackr_06 .DB $05,"BGM 6"
    3 s8 I* D# }$ m# `' ]1 J' W" A
  1295. Trackr_07 .DB $05,"BGM 7"+ c/ i* `/ m9 b  `0 x/ B
  1296. Trackr_08 .DB $05,"GREAT"
    7 n6 `; f/ M  D" a+ ^9 m; v
  1297. Trackr_09 .DB $08,"BOSS BOM"
    : ?3 U; q0 D9 t& E* k
  1298. Trackr_10 .DB $08,"BOSS2BGM"6 s: k* t: |) n, X. C
  1299. Trackr_11 .DB $07,"P CLEAR"# {7 I4 Z; R4 R* ^4 o
  1300. Trackr_12 .DB $07,"A CLEAR"
    ( N  Q+ W* }0 w+ c" c; j7 [( S& E
  1301. Trackr_13 .DB $04,"OVER"
    9 T% B$ F' `* Q6 j4 L/ ~9 y. t
  1302. Trackr_14 .DB $06,"ENDING"
    ' c9 {( V2 P: y$ P
  1303. Trackr_15 .DB $04,"SUTA"
    , D$ @, K9 _$ A& U4 k
  1304. Trackr_16 .DB $07,"THUNDER"
    , W2 X+ ^# m7 q" i, K; a$ x, f2 @7 g( {
  1305. Trackr_17 .DB $04,"SHOT"
    ( L+ P; o* V; T5 }. u- r8 a
  1306. Trackr_18 .DB $05,"LASER"
    2 A9 a. E& U" P* A, y
  1307. Trackr_19 .DB $06,"SPREAD"
    7 W/ x- k' g% o- O8 d% }
  1308. Trackr_20 .DB $04,"FIRE"
    " t, r8 d* C8 H# x- b& m
  1309. Trackr_21 .DB $06,"B SHOT"
    5 P* m) M% P$ l, U3 ^
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ( Z0 ?4 g2 b1 O* [; l
  1311. Trackr_23 .DB $07,"HARETSU"+ ]% K; Y# `  G6 o& {+ [
  1312. Trackr_24 .DB $05,"T OUT"
    - X3 i7 _. c; }
  1313. Trackr_25 .DB $05,"Z OUT"
    ! Z+ [( x, p0 y/ u
  1314. Trackr_26 .DB $05,"A OUT") M$ s! i2 {& N3 W' \
  1315. Trackr_27 .DB $04,"ROLL"0 e  K: S0 K( U" z, t# |; G
  1316. Trackr_28 .DB $06,"APPEAR"
    ( b8 T& [/ L9 U+ K( a( r( A# Y8 k
  1317. Trackr_29 .DB $05,"POWER"
    : Y$ t2 z# Z  @" s: A  p& c# S( w
  1318. Trackr_30 .DB $07,"BOKK BK"4 `  f& A& G, O5 h$ N
  1319. Trackr_31 .DB $08,"BAKUHA 1"* E! j* Y4 W+ ~$ }" }& R
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    9 E1 K* F( ?, K; W' e3 D% K
  1321. Trackr_33 .DB $05,"ARUKU"$ e' P- O" s2 d  [$ ~" c% y8 r
  1322. Trackr_34 .DB $06,"JIWARE"
    4 o1 P9 r- D. ~/ x# |
  1323. Trackr_35 .DB $05,"SILEN"1 I; ~2 R# U3 u! E
  1324. Trackr_36 .DB $05,"P 1UP"
    ; R9 L. G5 G  ?+ V3 [$ h
  1325. Trackr_37 .DB $05,"P OUT"
    7 C* n2 Y4 A: l/ ~* L, F6 ^
  1326. Trackr_38 .DB $05,"B OUT") v; s& x  h) L& [) f' \0 B
  1327. Trackr_39 .DB $05,"PAUSE"+ C: _6 ^% V; T" @

  1328. , S; H+ @5 A6 w
  1329. .ENDIF. V# `0 d* K3 g% p3 t. w: j& F
  1330. ! ^5 G5 F; [" b$ g
  1331. ;------------------------------
    . Z2 h; Y& f0 x$ z: G) G
  1332. Static_Text_Title_Data;静态文本数据
    + X3 K5 E( ~: m2 h+ |! P$ U# P
  1333. .DB 12
    0 b' f8 V7 V% c" n0 X
  1334. .DB "SUPER CONTRA"
    + Q3 T- `- ]/ i  D2 c& a5 J
  1335. Static_Text_Author_Data  e; h1 N. h. \
  1336. .DB 23
    , F: a, d- F2 }" V* n+ b
  1337. .DB "EXTRACT BY FLAMECYCLONE"# Q1 R4 f8 y9 a
  1338. Static_Text_Date_Data
    + P* e* G# ?  l7 p
  1339. .DB 101 [9 y  u/ D& g# w4 i) N7 _- Q4 H
  1340. .DB "2023.07.11"$ s2 ?( P, U9 U7 ^
  1341. ) R1 u7 M! i. m
  1342. .BANK RESET_BANK & BANK_DATA_MASK* x1 t0 k, [. ]. l
  1343. .ORG RESET_ADDR% M7 }; i# j4 T" {4 z
  1344. : n6 j6 w2 o2 t! C
  1345. 5 |9 X7 B% Q4 _# Y+ Z
  1346. ;==================================================
    9 w$ N, M" L' r5 R1 ?1 u% V
  1347. ;切到主程序bank' W, |) l$ O" p6 n5 o' Z
  1348. SwitchMainBank
    ; N& e4 _% z. _* ~3 W/ N, F
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ) F! V$ _+ W: t- k6 w' v. i7 S
  1350. JSR SwitchBank8000
    ( [) ]& p( f- F. r) K4 f5 g
  1351. RTS
      R. C- d, n$ a" z# J: q4 C
  1352. % a. h5 H9 s5 N( h5 K6 g# U
  1353. ;==================================================% @1 K% i( k' S6 I9 F6 s3 X" R; c
  1354. SwitchBank8000;切换bank到8000-9FFF, m3 a; i% q$ ^2 Q' B0 m
  1355. PHA
    ) F( K. {( v4 t7 d# {: C: Z
  1356. LDA #$065 D( M1 r+ |  F3 S' |( ?1 Q
  1357. STA MMC3_BANK_CTRL
    ( w) ~% \+ i% e! V) e. }
  1358. PLA
    : l) h& T3 e+ T5 o: a' C/ N
  1359. STA MMC3_BANK_DATA8 d4 N/ Q1 D3 Z# `0 p, O
  1360. RTS2 L/ D! ]5 Q# p% B1 n. Y
  1361. 3 {* L! d; q# Z
  1362. ;==================================================
    - Y6 K; r$ ^9 `2 X$ ~/ l, Y
  1363. SwitchBankA000;切换bank到A000-BFFF9 i9 @# [$ q9 Q; C4 Z- [5 P
  1364. PHA: u* z7 R) [; O0 \
  1365. LDA #$07& P4 c" C+ Y/ T  a' A
  1366. STA MMC3_BANK_CTRL3 A$ S4 K" ]7 h& L8 [: ^; e
  1367. PLA' w( N+ |' Z, y+ B) z) K7 I* I9 m
  1368. STA MMC3_BANK_DATA8 N' {) p* m2 o+ G6 A" j2 d' T
  1369. RTS+ J/ t' q( c) S0 x3 }9 J, W/ p

  1370. : z0 ]+ M% _, e( e; D, q9 E0 h
  1371. ;==================================================
    + i4 `3 A! S7 E7 s7 N
  1372. Sund_Bank_Init;音乐bamk初始化
    6 C2 ?! Q6 P5 M; y3 t; \
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK8 H' S; [5 k- W- Z6 [+ R) t4 E
  1374. STA Music_Bank_8000
    5 }+ X) Q( h$ J% C& X& z7 J
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK) P. Q. y% k( a" B3 J
  1376. STA Music_Bank_A000! s- f3 [$ ]/ T
  1377. RTS
    8 K5 z# a; Y. E' J
  1378. % P2 u( G. U# I3 _
  1379. ;==================================================
    2 o* H  f; n1 v) M) Y/ N5 D) ~6 g
  1380. Sund_Bank_Set;切换音乐bank# l4 i- n7 g- ~3 |% ~5 t
  1381. LDA Music_Bank_8000+ ^# c+ V/ L$ h. h- U0 I
  1382. JSR SwitchBank8000
    ' ]8 g% R) M+ A6 F: M5 t
  1383. LDA Music_Bank_A000
    6 W3 A: c9 n5 N! I8 a9 e# ^+ F
  1384. JSR SwitchBankA000! M5 X( ~% J3 r3 l! K& }
  1385. RTS" K5 F! E0 S0 A9 t; Z
  1386. " c$ W& Y+ T2 C. d4 f) I7 n. m
  1387. ;==================================================
    ; [5 k+ |2 k3 ]) j4 c3 n! D+ n. A
  1388. Sound_Init;音乐初始化$ [1 W+ l* r6 |
  1389. PHA  ~. E. z  Y/ R2 n0 O+ H$ {+ s
  1390. JSR Sund_Bank_Set4 u1 {4 A! R0 `, Z: ]' H
  1391. PLA2 b2 D2 x) T7 g
  1392. JSR Music_Init_Addr5 l# W* k+ m& X5 ^! q& i
  1393. JSR SwitchMainBank
    # l: I  A/ e- `$ n

  1394. - K/ G8 V# ?5 Q$ _4 l6 y
  1395. JSR Music_Bar_ReSet* g$ |$ u' M9 V5 H: d7 _! }1 s
  1396. JSR Time_ReSet; Z2 i) G3 k) }) _
  1397. LDA #$00
    * x5 x0 V, }: w5 ]
  1398. STA Music_State
    9 W. c6 P/ |/ U5 H; t! ~0 Y* T
  1399. JSR Music_Stata_Show/ O, N. {) j6 D6 s, l  x
  1400. .IF Track_Name_Pos; W1 S$ K, A  i, n2 ]
  1401. JSR Show_Track_Info- v" q. Q4 R$ n
  1402. .ENDIF, \( \& z  _! j7 S

  1403. * K3 Z- \# g( _$ J- o$ S! S
  1404. RTS
    8 w) h6 G, H7 ]1 k
  1405. & _% l" Q  g% L" F$ [0 s
  1406. ;==================================================- u  _( ^: W/ I1 }1 L
  1407. Sound_Play;音乐播放
    8 f  y9 @* R0 O" P) O8 U* x
  1408. PHA9 [6 |2 w# T" {- e# s
  1409. JSR Sund_Bank_Set
    2 i( j( X! a( F; L
  1410. PLA
    3 l" s* `9 N( ?, C3 k4 c# s4 W, |
  1411. LDA Music_State
    & A7 Z7 u; ?( h, x
  1412. BNE Sound_Play_End
    ; O* l' c2 Z0 L' u; c4 E
  1413. JSR Music_Play_Addr
    6 N' s7 I3 U! M
  1414. Sound_Play_End& w5 S/ Q8 l2 C) X0 m# i: `+ N
  1415. JSR SwitchMainBank
    : B, g8 h6 \5 c+ u
  1416. RTS
    , ?! z2 h6 I, X( e+ t1 E
  1417. & d# |. f3 k1 a2 Q% h$ ^
  1418. ;==================================================, R" }4 [5 m2 t! y0 a
  1419. .IF Music_Reset_Addr& w: }5 n- _( P7 Q& G6 j
  1420. Sound_Reset;音乐重设(如果有的话)& r' D/ [3 m8 O2 M' G  G* G
  1421. JSR Sund_Bank_Set7 R2 E3 {7 c9 @; g: G/ l. d
  1422. JSR Music_Reset_Addr1 N3 X  z" R  p( t- k
  1423. JSR SwitchMainBank
    5 V* x; E/ S+ b/ s
  1424. RTS* o3 c* k# `& R1 N9 L6 w
  1425. .ENDIF
    # U- W6 I9 h  _2 Z: W9 z2 `8 j3 Z$ G
  1426. 6 h# t2 A$ E) R' h# P5 N0 D
  1427. ;==================================================
    0 C( @: z9 e9 T8 d2 g- I
  1428. MainLoop;死循环
    , j; W- f5 R# f
  1429. JMP MainLoop5 u, w0 p' P  P, c% u

  1430. 4 C: f5 v9 {6 [# I% Z
  1431. ;==================================================+ j5 j2 V% C# `/ V
  1432. NmiProgram;Nmi中断处理& I' m+ g8 V) @0 J8 z& a' K
  1433. PHA% e  e; C- M' o! e: y
  1434. TXA/ j" k2 e  |# N. d
  1435. PHA
    " s" H% W2 i( Y& D) P% L9 x" _
  1436. TYA
    4 b/ H/ X/ c. T9 ~' [9 O4 \
  1437. PHA
    9 K& H) O% R; `. {* E9 n
  1438. - W4 V' O/ s1 ~) K6 D& O# ~: C
  1439. LDA PPU_STATUS
    / Q) W+ y) I3 }: ~$ N
  1440. LDA #$00
    % p2 i. H, h! Y4 m" `/ y: @5 r* \5 P
  1441. STA PPU_CTRL
    . L" z& x: l, C+ p/ [

  1442. # w* G# r0 A( p0 `' K- f8 P
  1443. ;切换主程序bank( r; A5 ?. i$ a9 h5 M5 @
  1444. JSR SwitchMainBank
    , V0 x4 M( D9 k' X3 t% K
  1445. 3 m) |5 r0 E4 Y* C; N8 I; O
  1446. ;NMI处理
    3 M/ _1 N0 @5 g* J, W
  1447. JSR NmiProgramProcess
    4 O0 o; Z2 B' {
  1448. % V) L4 Y! _2 c: r
  1449. Nmi_Proc_End
    + u6 I( ]! e9 T3 v/ }; X
  1450. PLA! O- p; @5 S; R& \2 M5 e  n
  1451. TAY
    ; }# `; I: [% l5 F
  1452. PLA. ^+ F- {" N5 C0 a2 _4 p0 A
  1453. TAX
    / f( V/ v/ w/ F
  1454. PLA4 r& B8 S/ {( h, B& _1 d( F+ p

  1455. , ]0 V+ e' t% b3 o8 ^  W
  1456. RTI
    6 F6 U6 n+ P# u- w4 c6 j2 e3 l
  1457. 3 j# O/ ]$ i- N# A* E2 }
  1458. ;==================================================
    5 y  w+ F* x, k, _
  1459. ResetProgram;重置中断处理
    # V; `. M% K& o# E7 t; _
  1460. SEI
    ' A: a4 S/ \- K7 i) c) R
  1461. CLD5 V# M$ L* ^/ Q3 {4 y6 R& z
  1462. LDA #$00
    ( L& k9 J5 s9 g; `, F
  1463. STA PPU_CTRL) f( A6 E" X% f) E7 {) i$ W
  1464. STA PPU_MASK
    " y9 {* O. a% K

  1465. 4 O8 T; f4 l; l) S( X7 O3 ^
  1466. JSR SwitchMainBank
    ! c/ r# d, c% X, C1 _1 u
  1467. JMP ProgramBegin
    4 `/ N+ z9 m- h

  1468. * y/ i' M. m" C! S4 r; A9 k
  1469. ;==================================================
    % _# S" I4 K( v% i" r! @, ~$ ^
  1470. IrqProgram;Irq中断处理1 i6 t# m! e' q+ `7 @5 _+ J6 O# l
  1471. RTI6 K3 a3 O" I3 \  m+ k. k; E7 e9 A
  1472. 7 z* f' F" H5 _( \6 J6 D
  1473. .IF SOUND_BAR_SHOW_ENABLE
    & A& O; Z6 ]1 _5 c7 K* C* R
  1474. .ORG $FF80
    5 r) ?9 l! k. M$ B% J
  1475. STA $4000,X, c- b% V/ O6 b# [' J3 z0 Q' p
  1476. STA Sound_Bar + $00,X+ K. h5 L8 l& `& t, @- n7 y  {/ i
  1477. RTS( V6 Q) I/ i* ?* `5 I! t
  1478. , ^! W* f2 i  i0 G; w) T/ g
  1479. .ORG $FF88
    9 ~" f. A1 h$ v5 K
  1480. STA $4000,Y3 a9 W; ~/ T* y1 ]2 m3 [
  1481. STA Sound_Bar + $00,Y
    7 z* u& s+ [! h; y, C8 h: r
  1482. RTS4 h# E4 d; z$ p* }: Y# ~
  1483. # ?" ^( B6 e- q/ `. o; d
  1484. .ORG $FF900 d$ G2 N" H3 a3 C
  1485. STA $4004,X
    ! F8 Q2 Q* I' g( P0 L7 w4 m# F
  1486. STA Sound_Bar + $04,X
    " s; W: W8 G) }; _
  1487. RTS
    1 p3 J4 @. j( z8 n% K

  1488. # f+ y+ Y& i& x- N& Q% {/ i4 R
  1489. .ORG $FF98
    ) V: l: B6 C4 `. Z0 G: z
  1490. STA $4004,Y8 C  t  W3 A! L# \- X. M0 E2 ?
  1491. STA Sound_Bar + $04,Y2 F' f& D/ e* \& [9 m) E
  1492. RTS
    1 c* L6 z& @5 _
  1493. ' Y! k1 v% g/ ?% Y) K$ J. X
  1494. .ORG $FFA0% P9 q) U! z3 [
  1495. STA $4008,X
    ! F0 I" |2 }3 K9 K0 R9 r+ I
  1496. STA Sound_Bar + $08,X
    - F* T" C, B  H: g
  1497. RTS0 Z$ D9 @7 J! G) M; v* ?- d' `$ d

  1498. # W3 G4 s0 l# d1 a6 K! k
  1499. .ORG $FFA8
    + Q  ]5 b5 G  F, Z4 W* @3 g
  1500. STA $4008,Y
    * i8 D' s4 y9 ~7 i. d' S- _
  1501. STA Sound_Bar + $08,Y
    ! C4 q4 c( P$ j2 e
  1502. RTS
    , i/ _; o( Y/ O* p) M. b
  1503. 9 M% z4 g* d2 j% B% j0 U
  1504. .ORG $FFB0# q7 I2 l3 }3 Y4 b$ O# ?! X4 K
  1505. STA $400C,X! u8 k9 K* O) Y# L% H/ I
  1506. STA Sound_Bar + $0C,X( y$ k( {8 J( q% [: b. u: U$ G
  1507. RTS
    3 U5 k/ x! U2 j5 s0 q# g  f
  1508. ( C/ [' M# y7 ]3 L  d% \8 \
  1509. .ORG $FFB8
    : ^# i, q- ?6 w  O
  1510. STA $400C,Y+ T" V3 ~8 O9 ~% m5 S( I
  1511. STA Sound_Bar + $0C,Y
    " s) ?! a+ n: v) K, C3 L
  1512. RTS
    ( m- a; e$ i9 b; o. L# N5 W3 P

  1513. ! s$ e  m: T9 b
  1514. .ORG $FFC0
    ' N% p$ ~" C% B& a
  1515. STA $4000
    / c8 g4 A  ~* R; i7 M2 b
  1516. STA Sound_Bar + $00+ j# [4 ?; P/ M
  1517. RTS
    + O6 |' l' [- F

  1518.   S) U( r" v3 h. R2 j0 o
  1519. .ORG $FFC8: l" g- Z. O3 \; }4 {2 |" n0 e
  1520. STA $4004
    $ n6 _8 n* x; `% @. P. z
  1521. STA Sound_Bar + $04) |3 D! _- E% L6 O) g0 I
  1522. RTS( ]2 y1 s& s% _- [9 o/ [

  1523. & B/ `. }5 [; b: s8 A$ P9 @
  1524. .ORG $FFD0+ {* a9 O1 Q$ V2 N/ L) O
  1525. STA $40087 b7 S0 K, ]. H3 H* J. I
  1526. STA Sound_Bar + $08% r2 J* ?0 E) F. K2 @1 V
  1527. RTS
    2 S( b+ o$ Z2 k0 ^& p' A5 ~$ ~: s
  1528. & {4 b5 T0 O& ~( r& Y* Q4 @
  1529. .ORG $FFD8. l( T- {! n6 H  f9 W1 Z
  1530. STA $400C
    , j& M# q1 [  Y5 d7 S, m
  1531. STA Sound_Bar + $0C& U' o* X* S) q# o( g; F5 v' ~) x
  1532. RTS! b( h7 A" v. w9 f
  1533. - U# S3 g* T. A) }1 U) x
  1534. .ENDIF, M  @: g% f  Z# ^* l+ q! R: Z# o
  1535. + D  v! T( n) _3 S3 e6 S
  1536. .ORG $FFFA
    ' O: Z* D. l& R+ y
  1537. .WORD NmiProgram- e% L6 c" d0 G( s
  1538. .WORD ResetProgram
    0 g- W: [! J, r* l! g2 f# J
  1539. .WORD IrqProgram
复制代码
6 f! a% e/ k& J  q; V* \

% A6 u9 Y: `% K) W9 Y& E
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1362 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3356 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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