设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
. e  ~, K' H5 e; ^
. V/ m% ~1 b' O, t( q) c! |1.魂斗罗
2 f8 \" H- t8 K. j0 a' U% ]2.超级魂斗罗* G) q4 \6 _( u: j
3.赤影战士8 b! |9 ?  p* Z% O. y$ M2 D) f
4.忍者龙剑传2
3 z: |& \) O  H7 Q7 U* X4 M0 z+ s0 f' Q/ N; z( V% u

+ V3 {/ ?9 Q' x# N- h
/ l' v4 V9 z( E. d4 X) D8 m+ J& q' s
2 d' |; B1 B4 K: U4 m源码:
2 ^! V( A1 q+ ?4 u% Z) w% m
  1. ;[FC音乐][播放器模板]
    & X7 Q" o& F6 w5 Q; @
  2. ;FlameCyclone 20230710
    % T! X: m6 x, q; N& q2 X% B# N

  3. $ s: ?1 k% C2 V# n; ~
  4. ;文件头
    + I% N" O/ l1 m. G& _, O$ q
  5. ;======================================================================
    6 w9 l: `0 U" E) R! d! L
  6. .INESPRG 4                                              ;16KB PRG 数量
    : Y$ J/ P. v# Y  \2 a
  7. .INESCHR 0                                               ;8KB CHR 数量
    ) ^4 X5 l( D0 D) o. H
  8. .INESMAP 4                                                   ;mapper 4. j2 e/ |/ G! j- N: t& K1 X
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直2 r$ W6 v: Z5 c& v) V9 j
  10. * E+ {+ V' B' W. T& ]) s
  11. ;==================================================
    ( G  I9 }0 Q) R8 w2 e
  12. SOUND_BAR_SHOW_ENABLE       = 1
    - {, s7 g- j7 \0 K7 k
  13. ;==================================================  P0 ~+ |# w; F! m& ]
  14. BANK_DATA_MASK              = $07
    " S% \" W$ M% d) l8 u
  15. ;==================================================- ]4 [: p. o0 j" U1 N/ K) _, f
  16. SOUND_DATA_BANK_0           = $00
    : @" O/ f( f) T5 Q0 X
  17. SOUND_DATA_BANK_1           = $01
    % w. J- x+ ~% J7 h
  18. SOUND_DATA_BANK_2           = $02; W# }* O8 {/ l/ T
  19. SOUND_DATA_BANK_C000        = $06
    % }5 {5 l$ ?1 M" h# H6 F+ l1 _
  20.   e% _4 I/ O# y4 J( |; V% L1 H
  21. ;-------------------------------------------------) _2 z9 A1 K# `0 v. D  c
  22. CHR_DATA_BANK               = $04
    2 L7 E3 a- U' Q5 ^1 n; i3 a' |
  23. CHR_DATA_ADDR               = $A000
    * C3 e* y: o4 X" g% K/ F( l: r! a- c3 A
  24. ;-------------------------------------------------: `7 b9 v4 C. W& u' h8 P2 A% ]0 F* @
  25. PROGRAM_BANK                = $05
    ; `! O+ x8 T$ N
  26. PROGRAM_ADDR                = $8000
    3 ]% Z. `7 k5 b9 t! g
  27. ;-------------------------------------------------8 J- w2 @* n& i1 y
  28. RESET_BANK                  = $07
    . m: x6 ?2 Q& n6 ?. z3 f
  29. RESET_ADDR                  = $FE004 c8 L& O3 m) h2 x- s% R! l: ?/ J
  30. ;==================================================( d. K1 g" w- m3 n: C& B5 M  k
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址: K3 H! M* j+ t+ ^" \7 ^8 o) z
  32. Music_Play_Addr             = $813C ;音乐播放地址
    5 h+ U$ l1 [4 ?- d1 C
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    4 F4 W4 o1 M2 M4 z( U; D
  34. ;==================================================$ D2 Z' n. ~3 u: U. X7 W- f
  35. Music_Song_Total            = 039  ;全部曲目总数
    ' W' f" ~! ^* G1 M, f6 J
  36. Music_Start_Song            = 007  ;初始播放曲目% X) d! O. F6 p/ t  j' a
  37. ;==================================================; q4 d  n2 X2 e2 A; {- H2 [
  38. , |0 U2 K5 n: Q0 Y3 ~$ b
  39. ;==================================================' y3 ?" a. z2 {2 `1 W: f
  40. Title_Text_Pos      = $210D ;标题文本位置- P( w9 T0 t/ P+ H" c3 k
  41. Author_Info_Pos     = $2284 ;作者文本位置
    % M& a! Q3 l1 b) [
  42. Date_Info_Pos       = $22CB ;日期文本位置$ y' ^/ A: I% t9 \! D+ g
  43. ;------------------------------
    / X5 }- Q0 ~) Q* |4 @
  44. ;------------------------------; R+ K! s* |) p  @( [% g
  45. .IF SOUND_BAR_SHOW_ENABLE
    5 F) F- `1 O/ t" `0 H
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    5 p' @5 X" A( s/ t. q! T- ?+ s
  47. Play_Time_Pos       = $21F3 ;播放时间位置+ C8 g1 z  i! s/ [% D2 V
  48. Play_State_Pos      = $2233 ;播放状态位置
    & W3 ?8 q- z4 x
  49. .ELSE
    / T5 n: Q4 L1 q: q

  50. # B9 G8 _  i! U: Y( t: {  e
  51. .IF Music_Song_Total > 99
    % d; Z/ |3 s# t
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    ) W  j& N3 b, |: x
  53. .ELSE
    $ {2 o8 l9 C0 ]  C+ }9 G
  54. 6 \9 I7 @% m& n- N; H
  55. .IF Music_Song_Total > 99 c1 `  j1 |4 P1 a2 P
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    + ?. S! E* R4 ?4 C  _' ]% J# u
  57. .ELSE& w6 k6 c& T* M9 i1 ~
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    - q$ m: |  ~8 U% h2 z4 i
  59. .ENDIF6 P$ `- s; B6 I! H+ _. K
  60. 5 B* i" l0 n8 t$ O  g& {
  61. .ENDIF
    $ j% h* o- S6 m/ g

  62. 7 U3 r! K, \0 Z8 k9 [. o+ U

  63. 4 B5 _( W8 D& k+ t8 `' r" v
  64. Play_Time_Pos       = $21EC ;播放时间位置
    5 d1 }, O9 W& |8 T5 s( T
  65. Play_State_Pos      = $222C ;播放状态位置2 X' K3 L0 j/ ]+ c7 c: Z2 v4 A
  66. .ENDIF
    + Y  m% d8 x( @4 [. C" m. u! ?0 K3 `
  67. ;------------------------------6 E2 o$ X$ z7 j4 G* ?* k
  68. Track_Name_Pos      = $216B ;曲目文本位置
    2 d( E0 S/ @  x! M6 \) v( |- r
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    2 O0 w4 q& m: Z) m8 q0 v
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置$ L- l6 M4 S: d: f$ r, v$ K. n5 m3 H2 v
  71. ;==================================================
    ; w2 V% I. `! }3 v* C; A
  72. Scroll_X = $00
    5 w  M3 T1 N: [
  73. Scroll_Y = $06$ [5 I: S  A. }9 c
  74. ;==================================================
    . {5 {) y& |  K2 U" \
  75. RAM_Cln_1       = $0100
    ) v1 l! _) Q/ K2 @! Q+ d1 |! \6 B
  76. RAM_Cln_1_Size  = $80$ K/ l9 O; V; |0 p
  77. RAM_Cln_2       = $00E0( Z# G( i, \* a8 d! |7 D5 J
  78. RAM_Cln_2_Size  = $20: Z3 U. W3 |) J! w# B! ~
  79. RAM_Cln_3       = $00E0
    $ U% I5 o) m( i5 ^- a
  80. RAM_Cln_3_Size  = $20
    3 G* H+ K9 w7 L
  81. # a5 V1 N% z8 f# D8 M" j6 B
  82. ;==================================================
    / A$ c& g; a4 e% h) t) J
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    4 k* T% Q5 `7 M3 Q
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器/ [+ r0 A1 r! K$ E4 ~, |# }
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ) d5 V. N$ Q% X/ V8 @! D& ]
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1% F% h0 V" b. z- Q
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1" }" S, m7 b4 G
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    1 P5 A+ o0 r% l1 I3 T- K& Q
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ) N( b# ]; Q( f0 K: O% k7 K
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 7 f2 w* q- l4 Y' u8 `+ U. z
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    9 \; Q' ?3 _" u, F
  92. APU_STATUS              =   $4015   ;声音通道切换' ]+ J5 f- P7 d2 q3 v
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    " `0 r( \7 b  f. e& n4 T, H  I
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    6 u& x7 t& q7 r: e& i/ R9 {* L
  95. ;==================================================) X' `+ V( s4 o# R" s# j; |
  96. MMC3_BANK_CTRL          =   $8000+ ?% o; h6 k/ u2 b% ?4 j: ~
  97. MMC3_BANK_DATA          =   $8001
    8 b( B% A6 y' r3 t! h1 Q$ ~
  98. MMC3_MIRRORING          =   $A0002 U8 c; F: t4 N4 r! L
  99. MMC3_PRG_RAM_PROTECT    =   $A0014 |$ U2 F4 l7 r$ v8 V
  100. MMC3_IRQ_LATCH          =   $C0002 M& l2 S( {# \' U0 C0 f0 v4 N
  101. MMC3_IRQ_RELOAD         =   $C001
    . [, g& b) n3 T+ y
  102. MMC3_IRQ_DISABLE        =   $E000% b7 P2 }* ]: _
  103. MMC3_IRQ_ENABLE         =   $E001
    4 ?# o5 S' T' P! U* p. ]  _' L
  104. 3 T- F0 r( n- |* q: x
  105. ;音乐数据块* s, ]8 N. X# h3 _2 M, o4 e

  106. - v" z; B( ]/ Q& B+ p6 Y! g
  107. ;======================================================================
      x9 _, h! \4 ?' L2 E+ z4 s5 T
  108. .IF SOUND_BAR_SHOW_ENABLE
    2 i7 t6 w) V1 Z" [8 F
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    6 Q+ Y1 y6 J6 M8 E/ g- s; D7 u
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    4 t. e: M% r0 n

  111. 8 ]! k8 V$ H( l
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    : L- F2 a" {) Z7 |4 M' H0 i
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    " h, L" G# T  y* L" a
  114. & i2 C4 C- _9 F% t& v8 s4 X; f
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK9 N+ H- ?0 v- R4 c
  116. .INCBIN "sound_bank_bar/music_data_2.bank"+ K2 B/ C) W; y6 ]4 m# D5 z

  117. - a" N) I( ?: A* Y8 E6 ]
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ; D9 g  ~! {' a/ }$ I
  119. .INCBIN "sound_bank_bar/music_data_3.bank"  Z$ ]6 T: L& Y- R+ n- c

  120. , N# w  E, q, f0 D* e
  121. .ELSE
    . G8 z5 O5 y0 A5 i$ K  s
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    - S& H, J. b# \. b* J
  123. .INCBIN "sound_bank/music_data_0.bank"
    8 {3 T+ J" C: O* v7 _! b
  124. 5 j9 [. f7 x9 G: I% j( ~& L; D! h
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    % ~$ `; ^7 Q9 n6 w! \
  126. .INCBIN "sound_bank/music_data_1.bank"! f( r5 l& M9 H1 e! O+ J' A
  127. . B$ c: ~3 D/ L) T8 v9 h
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    & k7 x# R* z1 {, J6 o: F; K% ~
  129. .INCBIN "sound_bank/music_data_2.bank"
    9 t' e8 N* I2 q' Q4 r# Y
  130. ( |. K: k! |; [8 O3 F
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK( u. u% S8 y  x
  132. .INCBIN "sound_bank/music_data_3.bank"
    ! ~0 ?9 N, o# ~7 H) @
  133. .ENDIF
    4 ]6 s: I5 e6 G( L
  134. 6 o) q+ t- C! V) s2 J) _
  135. ;CHR图形数据/ z4 }" z! q6 K0 R
  136. ;======================================================================
    0 |  t! b: V  d1 e8 }
  137. .BANK CHR_DATA_BANK
    / z/ A+ n7 i. [# g
  138. .INCBIN "chr_bank/chr_data.chr"
    8 E5 M7 L! S0 C8 A, q" i& L
  139. 7 p$ `8 [; ~( J% j, Q
  140. ;==================================================# i7 q0 f# g1 V+ j  ~# c' \( Z
  141. PPU_Addr        = $0300
    # w! p+ u5 g) y+ z4 A6 O6 o6 t
  142. Palette_Addr    = $03C0
    0 B/ j. \6 Q. u& r$ e9 A2 q
  143. Sound_Bar       = PPU_Addr+$E03 _. p& Y8 h$ `% |
  144. ;==================================================
    % |6 }7 V. y: g7 r+ }( d) X
  145. Palette_Update_Addr     = Palette_Addr+$0D
    / i) M/ M  ]5 m2 I; J( v7 T
  146. Palette_Update_Max      = $2C, O) H1 @$ _4 i' W3 X6 q: u
  147. Palette_Update_Min      = $212 B' t! @/ Y, Q+ g. e. C
  148. Palette_Update_Interval = 60! K3 S- j5 A# q& D! ^( X7 K' j
  149. ;==================================================7 [5 ?  w' s6 w# b0 p0 A3 @
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    & l" v2 \9 y# r* Y
  151. Screen_State        = Sound_Bar_Cnt+$01. X; J/ v9 \1 Q6 [' U
  152. PPU_Cur             = Sound_Bar_Cnt+$02
      I0 _  U; u. ^: X  w" V
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    $ K* Y7 \3 O# _
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    # o1 o- R6 Y8 D% D( H" m9 @+ X# w
  155. ;==================================================
    ( J- ]/ ~9 C6 a# v
  156. Data_L              = $703 a9 u& `+ h! A6 S) h
  157. Data_H              = Data_L + $01
    ' ~0 c, c) z! V6 \( z
  158. Data_Cnt            = Data_L + $021 q: n$ R6 j7 q
  159. Data_Buf            = Data_L + $03
    1 k' x* f* Y4 U& Q+ _, s% {
  160. Time_Wait_Cnt       = Data_L + $04. ?, n, V& Q  S# D# P8 U6 m7 W: z
  161. Palette_Wait_Cnt    = Data_L + $05
    7 \+ \: j) D# N+ o3 M% l' z
  162. Palette_Update_Flag = Data_L + $06
    & c* o; S  z9 V8 c: [
  163. Show_Track_Name     = Data_L + $07. P5 s, U8 b( j! P$ w3 y/ u
  164. ;==================================================
    ; A  \7 N. s% l4 f5 w
  165. Key_Keep            = Show_Track_Name + 1
    , ~; B0 U/ B2 z/ @
  166. Key_Once            = Key_Keep+$017 d1 y: X1 Q; J
  167. Key_Kemp            = Key_Keep+$02
    * A2 ?3 b" B+ D0 S; p
  168. Key_Temp            = Key_Keep+$03
    0 h, d/ H4 D& j8 o  n& L6 |) ]# I
  169. Key_Getv            = Key_Keep+$04& w3 ?% ?5 D* e, K, X: F4 x$ H+ }
  170. ;==================================================
    ; d. a1 p' d+ b! F2 `! k
  171. Music_Cur           = Key_Getv+$01
    ) X' z. \/ D8 T  v
  172. Music_Last          = Music_Cur+$01
    6 z: D8 s: k( C7 Y
  173. Music_State         = Music_Cur+$028 ]; \5 A; a2 n# ]: ^' K
  174. ;==================================================- n- P8 Q/ O7 o- _: ]
  175. HEX_Data            = Music_State+$018 Q  ^7 l" o( \3 y; c0 T* ^7 B
  176. DEC_H               = HEX_Data+$01
    5 K% _  J2 M! Z4 f
  177. DEC_T               = HEX_Data+$02
    % Z  k( U$ P: y3 B3 A, ?& r- ]
  178. DEC_L               = HEX_Data+$03
    * x( k) i+ C5 f3 `  N! \
  179. ;==================================================. q+ _$ N& R% D4 Z/ n4 c) J  I
  180. Time_S              = DEC_L+$01$ Y6 s# f% ~/ V) i9 ?1 L1 f% b
  181. Time_M              = Time_S+$01" Y# I7 v/ B# s8 s! r
  182. Time_H              = Time_S+$02
    - j9 v# I( s5 X9 }5 E. Q
  183. Time_Cnt            = Time_S+$03) |4 `6 @4 l1 `0 g6 C7 N! w/ P' v

  184. - d) w9 T- o2 c% U% Q0 l
  185. ;==================================================( u$ `% }  z: B7 \$ X1 j
  186. Music_Bank_8000 = Time_Cnt + 19 C" c1 ]8 h7 l) B, y
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    , l$ j% j& L% v/ |; K3 e# A& u
  188. ;==================================================
    ! K: h: C4 K  v, X0 t; o

  189. 4 J+ x9 R0 F1 k/ e5 M( D6 C
  190. ;======================================================================) P4 p' l7 R$ B2 w' m# x) T7 W
  191. .BANK PROGRAM_BANK
    - W3 p0 ]% w1 G- U1 A8 z
  192. .ORG PROGRAM_ADDR4 R5 g6 r0 |: P+ @. e$ m  T* V7 [
  193. " C1 D+ ^0 a0 _0 B* b: O" x
  194. ;==================================================# j( l$ p1 F2 O' a+ U7 R- j
  195. NmiProgramProcess;NMI中断程序处理+ H( l+ M) H$ T! C
  196. ;处理PPU图像
    8 }1 S5 x9 D* }, _& a' k6 `, c
  197. JSR PPU_Proc4 y  I1 I5 E# ^( |& d- Y

  198. 2 w# {) d+ V$ N: i
  199. ;启用NMI中断
    : o+ c+ P7 Q' Z- x9 O
  200. LDA #$80+ J, A9 z! W. z1 r5 t' {7 ]
  201. STA PPU_CTRL9 q1 D3 d0 ]) w+ J& P

  202. % r7 L/ W3 c* X) I0 p
  203. ;更新调色板
    " k) o; Y9 P4 s
  204. JSR Update_Palette_Data* i5 f% s; I3 J2 s

  205. # s' Y  c; G! V) q
  206. ;显示时间(缓冲)
    - _" `( |, r1 E2 {5 ]& t
  207. JSR Time_Show
    1 t- i  {1 Z7 o, g& ~' a

  208. # B- n' ]4 \6 E
  209. ;播放计时
    " X8 W  o# u- Y7 @9 t
  210. JSR Time_Count
    " }' H5 N# B1 k# W4 M
  211. 2 |1 l  p$ t) W
  212. ;播放声音9 e# e' d' V7 H5 d
  213. JSR Sound_Play
    0 Q  I% E# ?1 z! A% _

  214. 5 W1 N* Y( Z5 h3 g2 I" _6 p# ?
  215. ;切换音乐(手柄触发)
    $ y$ S4 B; ?2 M8 O1 c% `; A) X
  216. JSR Music_Switch
    - [" i& J1 G& Z! _

  217. / v# L, `! `: P
  218. ;音乐显示(缓冲)
    , ^. C3 q9 g* _3 I$ f. V
  219. .IF SOUND_BAR_SHOW_ENABLE
    ; {  Z" F: ?! a; ~6 s
  220. JSR Music_Vision
    9 @& ~" y: S5 g) l& P, U
  221. .ENDIF, I6 p4 S9 h( }6 E) {7 s- i
  222. / J: ~# B0 E: w
  223. LDA Time_Wait_Cnt
    / q' n$ J& y6 x; E0 l
  224. BEQ NmiProgramProcessEnd
    - m9 [! u% s9 L7 z, k0 I8 W
  225. DEC Time_Wait_Cnt( A, Y' T' p2 ^5 J  k2 K( V7 S
  226. NmiProgramProcessEnd: T& o) Z9 M# p" f  Z/ }
  227. RTS' Y( D- x. d$ K2 b4 n

  228. 4 x& C% [, C% Y8 b7 H. W
  229. ;==================================================* [3 h2 p0 }5 d
  230. ProgramBegin;主程序
    " l  N% d! K$ U3 D' s' k3 g8 X* T% i
  231. LDA #$008 q1 g3 ]) k' ^$ j7 l, ~3 r2 K
  232. STA PPU_CTRL0 M# s& I7 k" {/ O: E& l- j
  233. STA PPU_STATUS; p2 L: L9 O/ Z3 [% @$ O8 K" E
  234. STA PPU_MASK* e$ H, R! f" A/ Y1 z
  235. STA APU_STATUS7 ~+ m; b# r& {# B/ b+ c2 u1 S, J# [
  236. STA PPU_SCROLL- H& t1 e) c7 V7 m
  237. STA PPU_SCROLL
    9 q0 [, c4 n+ _; c
  238. LDA #$C0
    4 }+ M2 e, h- u: z# x5 q
  239. STA JOY2_FRAME
    ( H( E# N* ~& g" J& a
  240. # [) @% b1 b8 O
  241. LDX #$FF
    7 h+ D/ ^+ Y0 Q+ y& s) h# }
  242. TXS* I5 ~( d$ r1 r" T5 [) F; i
  243. LDA #$00# j6 |! m2 B% W/ t- o7 z1 f1 y
  244. STA PPU_CTRL  E/ ^3 I- c0 ?3 V. e9 f2 ^
  245. STA PPU_MASK
    & w! I1 c' H$ }6 s2 \; I6 F4 ~4 X
  246. STA MMC3_IRQ_DISABLE" s& Q5 q1 M& W% Y

  247. ( k7 f2 y: q+ ]* V) B3 ^
  248. ;==============================& N, V# p! N6 U! Y! j3 O- I; w; Z
  249. ;调色板清空
    ' `/ m  H0 P- t+ J2 m8 I
  250. LDA #$3F
    8 v! |3 G' L$ c  T$ l' d
  251. STA PPU_ADDRESS
      B# d1 B( A) v. T; [" f  }
  252. LDA #$00
    # u1 s! Q) L7 `, Z9 C
  253. STA PPU_ADDRESS" ~: t( B$ O2 E
  254. LDA #$0F
      T# a! G+ I- d) _4 {, i( @4 g: ], }5 y
  255. Palette_Clear
    8 [& M0 Q" t2 O1 Q# B
  256. STA PPU_DATA
    % c7 J  V8 }8 q- I) {, z4 Q4 P: ]
  257. INX
      h% U' x) ~- ^$ o1 g0 b* w
  258. CPX #$20
    # [  g0 c1 w" M/ k$ {" h
  259. BCC Palette_Clear
    . M3 A, \: r* ]1 `9 A: x
  260. LDA #$00
    5 \3 n! Q9 l) x: y
  261. STA APU_STATUS5 D, I+ B! k, l" {( p) k. E; |
  262. ;==============================
    2 J! ~2 H% Q% }) z* z8 g6 G3 F
  263. ;初始化背景调色板3 y) l1 @0 K& k/ k" S7 X/ Z# s
  264. JSR Set_Palette_Color
    ) T7 R  E' m. C% L; p6 t
  265. JSR Set_NameTable_Attributes4 L" b. f( {9 S. l0 i- U9 C- ]

  266. 3 O. {0 U! t& [
  267. ;==============================" y) I7 D% C( J* Y
  268. ;RAM初始化
    ' z( c! m+ {6 M! Z$ ]3 W. x/ z
  269. RAM_Clear_All
    8 x. A; u( D2 K$ S; r
  270. LDX #$00
    % Y4 W) o  I7 z0 v; ^% O6 E
  271. LDA #$008 q0 v5 G% p- C+ @+ y! @
  272. RAM_Clear_All_Start. C* F8 Y4 ~1 f- V
  273. STA $00,X, ?; r* @( x% {  k1 W9 v0 A' W
  274. STA $0100,X
    / F  L' g! ^( u% v) _
  275. STA $0200,X' F5 H; U; l0 k
  276. STA $0300,X
    - u$ M* v* Z- r1 t
  277. STA $0400,X! J6 T$ ?6 W( O
  278. STA $0500,X
    - I) e  c) Q- R9 x, y2 e" M
  279. STA $0600,X
    ! s. w. ?. z5 I4 C: H
  280. STA $0700,X
    $ g3 ?/ [3 a+ W+ ^9 u7 P
  281. INX
    $ @, o/ Y# @1 K  R4 N
  282. BNE RAM_Clear_All_Start
    ' p) r" t8 N; s, [
  283. & S* ]4 I, y6 t0 j  A
  284. JSR VramInit' }& p3 D  C; I1 f4 F! g
  285. JSR Init_Palette_Addr. o/ A2 K8 G$ Q. {
  286. 5 h+ Z0 j/ [! F! E! [! |1 n' O
  287. .IF Music_Reset_Addr
    . a( q& D) ^& K" z  k
  288. JSR Sound_Reset
    . `, X' Z5 v% J# k
  289. .Endif; g/ E  D5 ]; t! X: P1 V' i
  290. , @$ l$ F9 {1 O' _% B% A
  291. LDA #Music_Start_Song-$01
    ( g( @; N0 t+ Q( h. t
  292. STA Music_Cur5 [  o' }/ t2 d+ t; s6 c
  293. & K  [1 c, W1 J4 {9 q1 d
  294. JSR Show_Music_Text. M3 i7 B; X, C" A0 T/ U: q

  295. # @4 F  K3 B7 @% e: P7 e4 g
  296. .IF SOUND_BAR_SHOW_ENABLE3 G3 q5 Z2 Q7 d! g7 n2 R/ a/ D" ^
  297. JSR Sound_Bar_Text_Set
    8 q. ^  b: Y% g
  298. .ENDIF
      Z/ g3 |% I9 _
  299. ' ]2 b+ \7 ?/ W9 S1 w2 o, f" Q: c
  300. .IF Track_Name_Pos
    5 d. Q: ~1 W$ r/ q; `* Q: q
  301. JSR Show_Track_Info9 F3 s- v' x: ~/ i! t
  302. .ENDIF! k' q. w; h& U4 K1 p9 F' K

  303. 4 Q! v# U! T6 R+ @, y$ L
  304. JSR PPU_Proc
    + H5 w% y, u! B' w# O, B
  305. * w1 |% \8 X8 [* h. R% `
  306. LDA #$0E4 e: ^9 F1 d, {: x3 L
  307. STA Screen_State
    ' d- w) h) N* S- T# o/ a7 Q, i
  308. ( G3 e& e$ T: n1 E# f/ k
  309. JSR Sund_Bank_Init
    ' }7 j: {- l' a
  310. ( {2 Y2 F+ a( b
  311. JSR Music_Show6 \: ^) q$ z  s# p& J  Y
  312. JSR Time_Show
    + i- D; ]5 b7 K# f1 r6 n- ]' @
  313. JSR Music_Stata_Show  @; K6 x( T# S, M5 j. J% K
  314. JSR Time_Delay/ A. F' U" x% r% o* v: C3 o; c

  315. 0 P  A' q/ ^; Z+ |& v0 }7 l
  316. & f4 \& b( L+ T; n" q
  317. LDA #$804 m( u2 m# j& T* B
  318. STA PPU_CTRL! e( w, @& L$ s5 p

  319. " C; n0 ^) E. X) N' J- [9 E
  320. LDA #$20
    / }6 X1 `  n" B' y
  321. STA Time_Wait_Cnt
    ! [  k# z* l) X9 m' c  m

  322.   o, M, y/ \; o5 I$ B6 F6 Z
  323. Wait_Time_Over
    ! k; o1 i7 @; O& q' ^# M
  324. LDA Time_Wait_Cnt, @: q( w, y9 \% U1 h
  325. BNE Wait_Time_Over; \7 L  M% m" q( K5 y; _

  326. ( S( w. ~0 N3 m4 z7 `# c
  327. LDA #$1F
    % A* }0 J3 S% f, j! j1 x  l1 `
  328. STA APU_STATUS! Q! t, ]' l7 O. }# X- S& `
  329. LDA Music_Cur5 e! d# G5 q0 L* z) Z7 M4 N
  330. JSR Sound_Init
    5 D  G/ ?8 |8 H

  331. $ v. R( g( Y: T% k: a4 f
  332. JMP MainLoop
    / K# y3 V; Q: A6 S, L
  333. * b7 c: ~# U5 C, D
  334. ;==============================& c0 R+ A+ j3 s0 n! n
  335. Time_Delay;延时等待
    0 E" Q* I& E+ j* h) O
  336. LDA PPU_STATUS
    , r: ~/ Y5 s! [8 {
  337. BPL Time_Delay
    9 n; s# T( Z' v& C
  338. RTS( B) G8 q) r. y
  339. ; o) a2 E2 f- A" Q3 l3 y; T
  340. ;==============================2 d; N  q, `* S* J3 F. I0 V4 N
  341. VramInit;初始化图形内存4 D) C  }. t7 \+ P2 b6 S' n
  342. LDA #CHR_DATA_BANK
    5 f& a, I8 K. I
  343. JSR SwitchBankA0001 L  f% M( h: \( H
  344. LDA #LOW(CHR_DATA_ADDR)& N- j* a8 M0 Q9 J+ \& e
  345. STA <Data_L
    & T- t0 k, m/ G0 ~
  346. LDA #HIGH(CHR_DATA_ADDR)
    : U7 t, C6 A% j5 u6 F0 G  i9 a
  347. STA <Data_H, [8 {, n3 u2 T: E6 r  R
  348. LDY #$00- f+ I8 t6 w. B0 G% J
  349. LDX #$204 P) N" n% x# O  `! v# b
  350. LDA #$00" O) z# ]. E7 O* M/ @% Q' u
  351. STA PPU_ADDRESS
    " d& [9 b% G1 [8 V- @4 C! U5 V$ \! X" I
  352. STA PPU_ADDRESS
    1 G1 {/ ]  Z; O) }/ a
  353. VramInitWrite
    ' F, q, v% F1 m- _, k  p9 h
  354. LDA [Data_L],Y& b5 n( I" ]1 f. D8 x: I- d( L
  355. STA PPU_DATA
    ( |! o( z3 M$ X; n5 }4 W2 K
  356. INY
    & D$ s/ Q8 Y, \. ^
  357. BNE VramInitWrite
    7 W) M6 y8 D; Q7 v0 N' @
  358. INC Data_H
    3 _. T% t- ]" z: S
  359. DEX
    2 }# T8 K9 s8 h! v. C7 H; ~  n  D
  360. BNE VramInitWrite
    " Z! A2 L/ J' @. Q8 \$ }
  361. RTS
    ( m) H& r8 U! x. ^

  362. , N' I1 N6 t! M( a& e5 p9 g
  363. ;==============================' i& o/ v4 d- P5 ~; {
  364. RAM_Clear;RAM清除: Y. s3 \8 l8 @
  365. LDX #$00' V- R' Q9 Y# p6 Q; A8 l
  366. LDA #$00
      r+ ^# K( ?$ l; ]! ?
  367. RAM_Clear_1
    # `4 A# L0 c, X( @( F$ S; }
  368. STA RAM_Cln_1,X
    5 y- b' l: A; i
  369. INX! u+ _& _- P4 I$ W
  370. CPX #RAM_Cln_1_Size7 y4 T8 T+ g9 M4 s4 A
  371. BNE RAM_Clear_12 y  W+ |% O, f+ x  w
  372. LDX #$00$ P1 T( c4 ~4 k9 r0 A% q. }
  373. RAM_Clear_2
    0 B1 n5 p$ B( l5 N0 s$ v
  374. STA RAM_Cln_2,X
    2 b: ^; A$ `8 q3 ]) c
  375. INX+ h6 Z+ ~# O! t; O+ `  w" W
  376. CPX #RAM_Cln_2_Size
    # l# G, s: q9 }3 B$ u
  377. BNE RAM_Clear_2/ [. `: J, o& f( v0 w$ b3 @
  378. LDX #$00) A# k! U# Z# o& |3 t
  379. RAM_Clear_34 r4 P. E; G6 `# Y
  380. STA RAM_Cln_3,X; u" v) g5 r+ t& h
  381. INX
    : n: Q1 l* ~6 \! |5 G
  382. CPX #RAM_Cln_3_Size
    8 o- ?2 j! Q& M+ Z
  383. BNE RAM_Clear_3
    - ~1 Q5 _, ^' p# V, v- z! X
  384. RTS
    8 ^! Y' ?& i6 u8 r% W( ^
  385. 5 Z4 z* [/ |. \' h8 J$ h( b- D
  386. ;==============================, c5 s1 l) R, S6 U( T) |
  387. ;音乐切换
    # W; u# }2 d. d/ p; Z/ a
  388. Music_Switch3 f+ g8 z7 V3 Y+ ~$ ?, f! [, Z
  389. JSR Key_Proc
    , z, T8 Z( I' ^+ N* T2 y
  390. LDA Key_Once
    + L. V* h, u, w. B7 \. _" r
  391. CMP #$10
    - X5 w  I- M2 R
  392. BNE Music_Start_SongStop% Z- I% G8 J( i% j4 b
  393. JSR Music_ReSet
    ! p' D( M3 Q9 C+ t/ U
  394. " U% R* W( ~5 v' K; }; q
  395. ;音乐停止
    8 f  X! S+ K' x0 y
  396. Music_Start_SongStop# F0 @* J! s* f8 }& z
  397. LDA Key_Once
    % @- D9 Y2 q# ~  ^. C
  398. CMP #$206 X  A; _3 ?( T. }: q; |3 o) d
  399. BNE Music_arrow
    6 w) ^0 H" z  D8 {! q* {, T
  400. LDA #$01
      _" t3 C7 t* e" [) z2 V( N
  401. STA Music_State; |6 M& ~& M7 w
  402. JSR Music_Bar_ReSet
    1 A  w+ }7 r# a, n
  403. JSR Time_ReSet
    7 b8 m# J- i) D
  404. JSR RAM_Clear
    , Q: ^4 e; [/ l" F
  405. JSR Sound_Clear
    . W4 b: F0 F# {& T" z
  406. JSR Music_Stata_Show8 O" Q9 q3 @6 F8 O1 e# {
  407. Music_arrow% R; B) X6 e. B" K9 h
  408. LDA Key_Once9 `5 a- r$ y, \! T. Y7 w
  409. AND #$CF
    : y( D6 \" T" Y. e2 _. I
  410. BEQ Music_Switch_End
    ( G  V: }$ h+ b- k3 ~' I
  411. JSR Music_Number0 h( `) I: e1 g# C6 q+ |9 }, x
  412. JSR Music_ReSet; x5 n. |- g8 p6 z) C: I
  413. JSR Music_Show; I- m2 m4 r2 S# X( h7 g
  414. Music_Switch_End
    6 K0 A& ?. h5 u" l" q7 s
  415. RTS
    * }( C' i$ K( t5 I; j7 Y

  416. . ^% K: j0 f9 y* w+ W
  417. ;==============================; Y2 e0 ?+ ^. c; T1 V
  418. ;音乐曲目切换
    1 F# M$ o+ a% Z4 Q
  419. Music_Number
    ( H3 V7 ]' l' `
  420. LDA Music_Cur
    : T/ F8 I( ^5 F- v
  421. STA Music_Last! f/ k1 c4 x0 b( v
  422. Music_Decrease- i+ W8 d3 d9 j2 n
  423. LDA Key_Once8 N& i/ b+ v5 Z1 f5 M5 u/ f
  424. AND #$420 J+ e1 y4 E0 {
  425. BEQ Music_Increase  w  H! V# M) Z/ x) }6 J
  426. LDA Music_Cur
    6 H. z8 d. b# S& ^* s- x- C
  427. BEQ Music_Increase/ K  o' ?7 I+ I! p
  428. DEC Music_Cur
    . P" @3 {3 m  b2 R
  429. Music_Increase
      D6 z+ h) m4 J! G2 C- x
  430. LDA Key_Once9 V$ J+ b# ?3 R7 C( k7 M1 \
  431. AND #$813 Z( I6 l! c; ]7 d
  432. BEQ Music_Decrease_10
    " \$ o$ m" W$ Z8 U
  433. LDA Music_Cur5 d7 q/ Q/ C2 v) q2 \1 ]
  434. CMP #Music_Song_Total-01
    8 L3 I2 q) R' P
  435. BCS Music_Decrease_102 T0 e; y4 j& O& ?2 b* l9 w: X; m
  436. INC Music_Cur! g& G! c+ s; Y2 {
  437. Music_Decrease_10
    * J, i9 c. y9 R( s% e
  438. LDA Key_Once
    * A8 w. H7 W2 L5 k' _
  439. CMP #$04
    ; ?; c6 ~: {7 |/ `  w! f
  440. BNE Music_Increase_10
    + A7 I% c) H; |
  441. LDA Music_Cur
    4 P5 _2 T+ {& P! G! q
  442. CMP #10( [! H. ?# u/ i- G# f
  443. BCC Music_Start_Song_Min
    9 y" J; C) v' q3 c0 J" j
  444. LDA Music_Cur
      \6 D, K2 y- I0 V/ A6 m, O
  445. SEC; H' k- B* h/ y0 I5 T: E
  446. SBC #10! F# r; k) T* G; X  ?" X1 c
  447. STA Music_Cur
      ~' J, O# Y: S) d; H
  448. LDA #$006 w! o0 k: d- q8 \1 B/ z2 f3 n/ c/ _
  449. BEQ Music_Increase_10
    7 b2 y6 _6 J7 t) ^' m. I
  450. Music_Start_Song_Min+ Z9 R# O& ~4 _9 w& K  K
  451. LDA #$00+ F) N" w6 I% M: `5 Y$ l$ Z
  452. STA Music_Cur
    ' d0 v, H, B, O9 B. U9 X4 ]
  453. Music_Increase_10
    3 c4 F" D4 B( v4 E0 K, i
  454. LDA Key_Once' i  i- n6 m1 [% G( w
  455. CMP #$08
    ( J( j0 g: d0 N! m/ k: M8 @
  456. BNE Music_Number_End5 U1 R4 o, z# ^0 K" `. h  n1 x
  457. LDA Music_Cur
    1 V+ a2 E* A8 \  B1 t3 G
  458. CLC/ g9 B/ h- A0 J# _# j& a9 b3 D
  459. ADC #10! H; A* C, Q3 \1 s1 q9 E
  460. CMP #Music_Song_Total-01/ K. n" l7 u" ]( {3 f$ D
  461. BCS Music_Start_Song_Max& ?) W( B) b" [, O: B: l
  462. STA Music_Cur5 Y" L  T& P: I' G. S. I
  463. LDA #00# ?# _& u! y  H( Q5 `
  464. BEQ Music_Number_End3 d9 o7 d$ ~0 [7 Z6 r9 ?
  465. Music_Start_Song_Max
    / @. a6 y/ ], K  Y) l
  466. LDA #Music_Song_Total-01
    # i: x" y) L% _2 C7 }6 O+ P2 `
  467. STA Music_Cur
    0 q5 F+ n2 h( k5 w  y8 Q
  468. Music_Number_End8 ~% G; L9 k4 D  J' }0 V& a( k
  469. RTS7 x- t1 @! |, b2 |6 X# E: K- t
  470. - Y* x3 s( ~7 K6 ?
  471. ;==============================7 A! d: u5 z0 a6 [0 K) g+ i
  472. ;音乐重设
    3 z( j+ ~# x; f, w  E
  473. Music_ReSet
    % y) [; J, P9 i3 c2 T7 U5 L
  474. JSR RAM_Clear# V; R( }8 ~) f
  475. JSR Sound_Clear8 `8 S; X& q% K0 B  B3 I  d
  476. LDA #$1F
    6 L! {5 w6 Z0 ?4 b- {% o' Q
  477. STA APU_STATUS
    ' C+ \' ~/ W) w4 W
  478. LDA Music_Cur
    ! f2 l( `" M9 F5 V/ M. l- `! w
  479. JSR Sound_Init0 _' p4 R8 a) N  @' P# A- e% J$ K
  480. RTS6 v1 t0 g+ `% F

  481. ) K8 D: s3 {) Z" J9 a
  482. ;==============================
    % Y9 |* T* p) g/ t4 _
  483. ;音乐端口清除
    4 p; P! `( Q! v$ z9 ?
  484. Sound_Clear2 h# b( h6 {2 ~1 G% W
  485. LDA #$00
    , O/ k4 x% {3 D5 L
  486. STA APU_STATUS5 f' Z: D7 g% l6 c8 K3 `4 J( }
  487. LDX #$00
    ) Q5 t7 ~7 G7 _) f0 W6 T
  488. Sound_Clear_Start
    $ r) K, E) |0 m9 Z% j4 P" i9 _
  489. STA $4000,X
    " N6 `6 Y& H$ x
  490. INX6 X% O9 w7 k, t* G! |9 s
  491. CPX #$14
    " c% A( r* y$ k/ x4 k! d
  492. BCC Sound_Clear_Start
    $ ^8 F/ v$ q$ Q8 F
  493. RTS
    : w! |7 d8 N& |
  494. 4 U' N! Z9 N" Q9 x% E! }# U) |6 Y& v& Q
  495. ;==============================# W+ u- G  O$ C9 |9 n
  496. ;按键处理
    & e! k* X1 J! b& U
  497. Key_Proc$ E$ o* U: d* P
  498. JSR Key_Scan) j6 w, l( z# `/ C9 t
  499. LDA Key_Keep& V7 l+ S" X) i. X2 i) M" t
  500. STA Key_Temp
    6 l; T4 o  \- g3 T
  501. JSR Key_Scan
    9 ^7 @1 X1 Z0 t0 ^5 A9 {
  502. LDA Key_Keep4 n! M% d/ B- d! r& H& m+ P; O6 A
  503. CMP Key_Temp
    ' {. c) G4 R" E) q% v. I  h; N' q3 L
  504. BEQ Key_Get_Once% m$ w+ X4 j% [' U5 S- t$ e9 [
  505. LDA Key_Kemp
    ( e( @% p- \! L- u# w
  506. STA Key_Keep
    % Y/ u& {4 W6 S" n: Z2 K" ~8 h3 t
  507. Key_Get_Once
    ' L: N2 N, n1 ?( ^
  508. TAY6 T8 U, g0 i  T) {) ~( s8 @! \
  509. EOR Key_Kemp( k/ p% N2 B$ F/ `9 B! a) {
  510. AND Key_Keep# y- E& K0 V' j$ G$ K
  511. STA Key_Once
    " ~* Z6 F7 o5 b0 z5 R% y) v
  512. STY Key_Kemp
    * P, i2 g6 L$ r8 K1 f% M
  513. RTS
    7 X, J+ d' I. \$ l8 X* B/ }
  514. ;------------------------------
    / s8 z4 s3 B0 |* }
  515. ;按键扫描- `5 C0 w0 A4 X% Z- d0 W- Y
  516. Key_Scan
    . }* z2 V  G8 C3 m$ a
  517. LDX #$01
    * h$ Y4 r( }8 Y
  518. STX JOY1_FRAME: W9 o+ K4 Q- G, s8 v
  519. DEX
    , @5 L' F6 V2 b4 Z
  520. STX JOY1_FRAME2 }) B7 {0 t+ A9 p  l7 D' ~
  521. LDX #$08( P; S* q* L4 m1 `- I1 x$ u' O
  522. Key_Value
    ) p3 O6 D- g* \6 I, g5 }
  523. LDA JOY1_FRAME6 c, W+ @* O5 a! E6 l4 o2 @0 ]
  524. STA Key_Getv4 T, c& A$ u6 y! ^0 {7 _7 k  R
  525. LSR A
      F8 R* h+ [* M7 s
  526. ORA Key_Getv" x& P8 i( l' ?6 ]) n
  527. LSR A& ?7 F1 p8 f- [- `* x2 J
  528. ROL Key_Keep
    6 s: l, ?9 h. y" f& ?9 }( B5 \
  529. DEX
    0 v. n( e, y" C
  530. BNE Key_Value
    , d, {9 S4 n4 b: {& T7 f' p
  531. RTS
    3 E+ P/ C0 K9 p: R" h
  532. ; p4 V+ z. f) i6 b6 ~; j
  533. ;==============================- ?8 d! [/ i5 ?0 O; J. a) L
  534. .IF SOUND_BAR_SHOW_ENABLE
    5 C* l  W5 a: u7 \
  535. ;音乐条显示+ I$ s, c3 J8 H: t( U0 K
  536. Music_Vision* D3 L1 j% x( U
  537. JSR Music_Animation
    . \* O( ?0 G, k. c8 @
  538. JSR PPU_End
      x6 h; U0 D* \) o
  539. RTS
    8 j3 w% q$ q- I2 ^# M- [
  540. ;------------------------------
    8 `$ X; c, b0 _6 u
  541. ;音乐条显示处理( v( h& w$ k$ V$ s
  542. Music_Animation
    , t2 n$ @' ~3 C$ v& K. y# T- l, P
  543. LDX PPU_Cur0 U* s0 R- S* G# K: a6 [
  544. LDA #Mode_Line
    ' z: y+ J  B4 A+ z$ ~& u
  545. STA PPU_Addr,X. S5 A* r% ^- ]! L# f4 i9 h
  546. INX: Q4 R% Q6 I! a$ D6 {
  547. LDA #HIGH(Sound_Bar_Pos)
    1 w% i1 J- y2 D8 H7 w! n2 y' t
  548. STA PPU_Addr,X
    ! P8 i  e9 ^5 R0 a
  549. INX
    6 I, f( m# [' Q( {: T9 @( Z
  550. LDA #LOW(Sound_Bar_Pos)
    8 B) A  I7 c: F
  551. STA PPU_Addr,X
    0 k! u3 x; R& o7 H) ], G7 I
  552. INX
    ) \- i4 o9 ~  i7 ~
  553. LDA Sound_Bar
    ' P7 z) Z) a/ f& `8 g5 w5 J( o
  554. JSR Volume_Convert2 D* a$ N% c/ `$ i' Y% N
  555. JSR PPU_Return$ T$ w* Z6 b) t  Q# W
  556. LDA Sound_Bar+$4
    ! x) i) [9 o6 b# d0 a! f
  557. JSR Volume_Convert( ]( [5 h7 C) ]' P+ C
  558. JSR PPU_Return
    6 l( |7 P/ ]8 y  H' |+ m
  559. LDA Sound_Bar+$8/ L+ B3 v( L3 h4 A
  560. JSR Volume_Convert_Ex
    + w* I& y, Z5 `1 e
  561. JSR PPU_Return
    7 \5 }$ [+ }# q( I. F
  562. LDA Sound_Bar+$C# ~: p) ?$ q0 A
  563. JSR Volume_Convert' q+ ^. v# `+ v( D9 {+ R
  564. JSR PPU_Return
    . r6 v, t3 k* ^6 x" l( M# I
  565. LDY #$101 ]* E6 p1 U9 Y# p+ H+ u1 b
  566. LDA APU_STATUS4 n0 P  U* L7 a& g2 X' F' s4 g8 o
  567. AND #$10
    - V. Q; e( B$ q% ?7 j" r
  568. BNE Volume_Count" R0 I! E! T2 S$ ~; e
  569. LDY #$00
    7 E( w. d. B/ q* U& t6 v3 k
  570. BEQ Volume_Count
    ! f! q% K( i1 v3 }9 m6 @6 L5 G
  571. ;------------------------------
    9 e6 v6 O! e; D" C" _
  572. ;音乐条处理
    6 b2 f/ A4 Z7 z
  573. Volume_Convert_Ex
    7 K. w" f; d2 T# \' a, R
  574. AND #$1F
    * E1 K! W3 @' @
  575. TAY
    4 n8 M; N% W2 ?  p
  576. BNE Volume_Count% C- ^5 W3 H2 Z, E5 e
  577. Volume_Convert% `. j$ E7 H1 a- R! d: s, \5 b: L" b
  578. AND #$0F( Z5 c; W. o* ?: w, m  Z
  579. TAY! F' y. V3 ~2 C; E  |! B2 Y7 [
  580. Volume_Count3 m6 Z4 S* C; d
  581. LDA #$08+ z; O. w7 B! J& M  C
  582. STA Sound_Bar_Cnt
    " Y* g3 ]# S( v& _0 i9 R
  583. Volume_FILL
    % G( @( N0 X6 i% g, J; ^$ k0 H
  584. DEY/ k/ x1 \9 N5 F6 n- T" |' E3 n0 r
  585. BEQ Volume_Half  Q; {7 F. o9 u8 A) f' m8 k. J' `
  586. BMI Volume_Empty
    1 Y7 x+ u3 c' L' i& q
  587. DEY
    * A6 }% W2 k/ L
  588. Volume_Full
    + v( d8 G) o+ s3 ]  K
  589. LDA #$16
    & u9 t8 ], k4 l0 L
  590. BNE Volume_PPU1 W" i; c3 z$ M/ }* G* {
  591. Volume_Half, q3 K5 A& U  Z0 M$ |7 }
  592. LDA #$156 F. I" m+ @6 W* Y7 `' c! X) \  K
  593. BNE Volume_PPU. Y! F. A8 U5 x* x) t
  594. Volume_Empty6 e9 ?( T" e: _
  595. LDA #$14
    ) y; ]0 F6 r* m" Z
  596. Volume_PPU
    1 I$ r" Y* J+ E) l  B, \
  597. STA PPU_Addr,X% X! g3 }$ g4 ?0 k. I! u
  598. INX: A* `0 t* [5 w( T. ]: y2 {
  599. DEC Sound_Bar_Cnt
    1 r: E/ K  b. u/ P0 ^
  600. BNE Volume_FILL* |; R. Y3 n& g2 j' x
  601. RTS
    ' i6 R/ P$ o' y' m/ K( A' k

  602. 9 E' Q9 j$ g( @/ A8 _0 S1 C
  603. .ENDIF
    4 Z+ S) h. P; D$ ^. [4 q) n
  604. 3 |& y2 N5 o" Z) ]) W* T' N& y
  605. ;==============================
    5 C+ G2 E- o. ^! Q9 ]& X: u$ h4 |
  606. PPU_Addr_Set;PPU行开始- F) ~: i* n) N
  607. LDX PPU_Cur
    , K/ A2 a% ~- \! H4 l* X* B
  608. LDA #Mode_Line
    % z4 [  _: f8 v! r8 ^
  609. STA PPU_Addr,X' ?' O2 W# E- t& s$ d( K+ x
  610. INX
    7 R* ^. q0 X0 w3 p) L4 ?# z) |+ o
  611. RTS
    7 X# I3 F! ]# S. q" w/ j- L

  612. ) o! a, }" h& D( T. E
  613. PPU_Return;PPU转行+ V# I+ J; }% n7 X
  614. LDA #Flag_Over
    * L8 Y1 o) M" Q* B
  615. STA PPU_Addr,X8 X+ j5 F. T& u1 a
  616. INX. i" }3 @2 z! d4 Q, c4 u
  617. LDA #Mode_Return
    & L4 k0 |- V# ]  z
  618. STA PPU_Addr,X5 j* E: A1 w* t0 P# Y. g. T
  619. INX' `7 z. d- o- k/ x9 y" X3 B
  620. RTS& b  b: u; h! D4 f" W

  621. 7 \) U* a  j* J) F1 G3 v, v- k& J
  622. ;------------------------------5 y4 x; }4 w$ z$ Z
  623. PPU_End;PPU结束
      o5 j, K" y5 H) l
  624. LDA #Flag_Over4 x2 t, t' s0 ^& ~
  625. STA PPU_Addr,X
    8 d- y8 y" D+ `; o6 X4 d
  626. INX4 x* \. J% x% O( F- j
  627. STX PPU_Cur+ Q. |- G4 V( |: S6 W
  628. RTS
    , ^, S, J; ]1 `# T
  629. ;==============================
    2 d* w# w/ E0 W  r9 ?7 N
  630. Mode_Line     = $FD    ;新起行模式
    : C* Z9 @7 C0 ?* G* \
  631. Mode_Return   = $FE    ;转下行模式
    , a  z7 l2 |2 A6 i0 O
  632. Mode_Clear    = $FC    ;行清除; g# a7 k+ X3 [
  633. Mode_CntLine  = $FB    ;行计数写入8 {+ l6 g( u: Q  w' e$ g3 G3 P" ]! }  }
  634. Flag_Over     = $FF    ;行结束标志
    3 s  d  x2 b5 D9 g$ r& v
  635. 2 |8 M2 c2 I/ i; S* H9 Q  D) G
  636. ;------------------------------
    / ?" o/ R4 u5 |' ~+ W9 ^( B
  637. ;PPU处理
    2 b! {5 \8 q2 H2 V, q0 l/ `# a
  638. PPU_Proc
    - F0 S9 g5 d/ L) I0 p% L3 R% t  j
  639. LDX PPU_Cur$ i" H$ r( r! x, k* A2 z
  640. LDA #$00) [  b2 C! b; s5 A) l+ N
  641. STA PPU_Cur
    . _- P+ I7 m8 A5 n7 S; ?
  642. STA PPU_Addr,X0 K- z9 R( O5 G/ ?$ E
  643. LDA PPU_Addr- T" P7 K9 N: f; r" l
  644. BNE PPU_Proc_Beg1 S4 S* i% A( I/ i: i' T  P
  645. PPU_Proc_Ret) W( i+ ~# O( d  f+ T8 m$ w6 _
  646. RTS
    ! l' l3 G' N" m, M6 [! I. v
  647. ;------------------------------
    $ `: {5 I; w. [* B
  648. PPU_Proc_Beg  ;处理开始
    * X' ^- c4 z7 d$ z5 s
  649. LDX #$00
    : [3 Z4 n% f2 j3 B
  650. STX PPU_MASK& P5 I5 g" O6 m  p( I5 E
  651. ;------------------------------
    : M6 @6 O. j3 I' I/ N4 K8 i& N- J0 ?
  652. PPU_Mode_Select  ;模式选择1 {+ T8 q$ F% f
  653. LDA PPU_Addr,X& C" Y0 z& {% x( ^5 B
  654. CMP #Mode_Line3 @1 E, Q  y+ I6 G
  655. BEQ PPU_Mode_Newline
    ' u% C* q' D4 ]! c; i7 C
  656. CMP #Mode_Return( [( a" C& w: ]5 [( A
  657. BEQ PPU_Mode_Return
    # m( k9 y2 |& `
  658. CMP #Mode_Clear$ Z, ~9 _  n% T7 Z+ I9 Z; i
  659. BEQ PPU_Proc_Clear* w. f$ y8 E. o5 v, x  M6 O
  660. CMP #Mode_CntLine
    6 B* P7 z- w5 Z/ n  g
  661. BEQ PPU_Proc_Cnt_Line
    # ^' e6 _3 F) ?& P. b# G
  662. RTS
    ' Y- m; `1 g, d! s7 s; O& ^) |
  663. ;------------------------------5 O7 V, A$ x# ]' f
  664. PPU_Mode_Return  ;转下行模式
    ) L' m9 J# G/ Z+ e* u) D
  665. LDA PPU_Addr_L$ L! a8 v0 P- N, y) U! e
  666. CLC
    , n+ M! d( ^* Y( O& q& h# L
  667. ADC #$20) |1 p9 V+ k* h7 B9 p
  668. STA PPU_Addr_L
    ( [9 A; i& g$ u3 b5 @9 v
  669. BCC PPU_Return_End
    0 c: A1 {: @' A$ E# f
  670. INC PPU_Addr_H- Y# J" d' L  ^
  671. PPU_Return_End
    8 _3 g6 g( T; f& F. v% m' W7 E  \
  672. JMP PPU_Set_Increaser
    ! f! D* J! H) o# P, v) B
  673. ;------------------------------
    # a. Q& c) L* d/ n, {2 V* r( ?
  674. PPU_Mode_Newline  ;新起行模式/ i" e8 O* s. r# K) j6 t. G2 o( u
  675. INX7 \" l- u$ ?. K4 Z/ t6 {1 \+ q
  676. LDA PPU_Addr,X
    + W- O( S3 S/ L, Z2 s; D0 b/ u8 Q0 A9 R
  677. STA PPU_Addr_H
    : }$ q5 a( N) k2 T& q' k
  678. INX
    + {0 F" {& v2 {6 s
  679. LDA PPU_Addr,X2 C) Y- k$ M; c( }+ t  a
  680. STA PPU_Addr_L% {* D; j! x: A$ N% Q
  681. ;------------------------------: f, ^8 S9 |9 I; [
  682. PPU_Set_Increaser   ;设置写入地址
    # [% \8 w3 u. r! \2 R0 h" p
  683. LDA PPU_Addr_H* s1 Z) p4 O9 z7 ~" g; `
  684. STA PPU_ADDRESS
    6 m; X9 J8 a; v; H
  685. LDA PPU_Addr_L3 ~3 ~+ l& t. r) g, \% E/ W
  686. STA PPU_ADDRESS4 v2 p* Q$ t/ {7 z' k& W
  687. ;------------------------------5 S- f! H1 b1 f3 _0 c" g* ?
  688. PPU_Write   ;写入数据# [# C. v+ ~! ^- I
  689. INX
    0 w8 g( b! z; \$ N6 ?
  690. LDA PPU_Addr,X4 B5 H6 @- j( T/ x2 @
  691. CMP #Flag_Over0 {3 z0 j; w  i6 D$ o
  692. BEQ PPU_Proc_End
    , ?6 Q5 i0 n; O! u5 ?+ x4 B$ U/ z1 O
  693. STA PPU_DATA
    1 p: }1 t, v# g1 E( w
  694. JMP PPU_Write
    , R3 m9 P4 N; w# d) f: o
  695. ;------------------------------$ n4 i4 D; }2 o7 h' c
  696. PPU_Proc_End  ;单行写入结束& A( \  O' r: g% a. G
  697. INX
    ( A+ f' L6 J' {5 x& h; n8 z
  698. LDA PPU_Addr,X
    5 o5 l: G3 Q' D4 b. l7 a! g0 z, G
  699. BNE PPU_Mode_Select/ ]3 O  C6 p+ U) K' s; p" H
  700. STA PPU_Addr
    6 w5 I! P- D1 `6 N! ]
  701. JSR Update_Palette_Color
    * o% Y# ]* @" Y8 w7 N+ J; E
  702. LDA #$00* i( v$ J$ g, ~7 E, F
  703. STA PPU_ADDRESS9 v* b, L6 f3 N
  704. STA PPU_ADDRESS5 ]3 y5 I* \  W8 k
  705. STA Show_Track_Name
    6 P" [* u! M3 c  @9 t8 o' Z. o
  706. LDA #Scroll_X3 _0 b. v* t, D  Z; H* ]
  707. STA PPU_SCROLL
    $ J- c/ \( k) P7 L1 U9 u0 R8 u
  708. LDA #Scroll_Y. G2 o# g3 c8 B7 a' e/ R1 M( ^2 T; _
  709. STA PPU_SCROLL
    ( V- }3 X( C/ f7 Q& z3 ^* k& h
  710. LDA Screen_State" L. ?1 p/ F; O5 n* _
  711. STA PPU_MASK
    " Z* P8 a8 I1 v
  712. RTS
    ' F6 v7 P# i3 T5 k% P1 o8 \1 o5 h

  713. ; \8 ]3 O5 P6 _7 x1 D4 ^* y
  714. PPU_Proc_Clear
    ) T1 [: N& \# M% l) m& R  c
  715. INX# j- X" Q9 N1 v2 [
  716. LDA PPU_Addr,X
    ) q2 N' q6 ]0 p
  717. STA PPU_ADDRESS! a3 f+ P) K! o7 L/ B
  718. INX
    1 t+ [& E" q* q4 N8 ?! n: R
  719. LDA PPU_Addr,X
    7 w* Z3 E- M: f8 M- a
  720. STA PPU_ADDRESS* Z+ ?( A5 n( C) q, j2 V
  721. INX! d# b& t% v8 E
  722. LDY PPU_Addr,X
    9 s8 H" U3 w1 O% ]
  723. LDA #$00
    4 ^" G' ^# q6 ^  f$ ?, T! q! W
  724. PPU_Proc_Clear_Write
    - \/ S' |3 K9 @; a/ X- B7 _
  725. STA PPU_DATA9 e* t; d3 c" x+ @% p) o
  726. DEY
    $ c4 L7 {$ z; i9 F5 R' @9 }( h
  727. BNE PPU_Proc_Clear_Write3 T5 [6 h# O/ m+ d
  728. JMP PPU_Proc_End
    & y3 y6 Z0 x3 g+ c+ |. P9 }* D
  729. " _1 B7 V1 K7 f) X5 L6 g7 L
  730. PPU_Proc_Cnt_Line
    8 S1 W3 W; H" V7 ~, a- a
  731. INX1 E% w* V" h9 d- }# P1 J
  732. LDA PPU_Addr,X- m- H. w. D1 g: W- \
  733. STA PPU_ADDRESS
    * f% ~% {  u" @) h# J
  734. INX4 y3 ^% X- ?* s- W! \2 V  R. K
  735. LDA PPU_Addr,X
    ! g( D. @) I9 O, a6 I5 R
  736. STA PPU_ADDRESS7 ?- ]/ ^2 X5 c8 ]8 _
  737. INX# C; b0 p0 {9 H& w
  738. LDY PPU_Addr,X
    - H4 O7 m/ p$ b& e. ~
  739. PPU_Proc_Cnt_Line_Write6 G) k# h. F3 V9 a3 n/ C& Z
  740. INX
    ! `7 p5 J$ C' X, l
  741. LDA PPU_Addr,X* S2 ~/ L: V: G
  742. STA PPU_DATA% q2 T" e6 O; C9 e
  743. DEY
    7 ^7 z1 s4 ?1 F, v+ R/ Y% X( W
  744. BNE PPU_Proc_Cnt_Line_Write, Y  k* r6 q# \9 [8 W
  745. JMP PPU_Proc_End
    8 N9 Z6 k, [* {. @( Y
  746. - ?5 d5 z. C) j1 c) i$ A5 F( d- |
  747. ;==============================4 Q7 W7 d' a0 `- |+ E
  748. HEX_To_Dec;十六进制转十进制
    ' L/ ?' F* Z! H! a) f* G) Y
  749. STA HEX_Data  g% Z2 z4 y5 h
  750. PHA- t' P1 p  [: x7 U/ z' J; m: E
  751. TXA  K, s% g, [1 E3 p
  752. PHA9 L' L1 G7 ~. H
  753. LDX #$000 T. N9 A1 [! F; u8 T0 e7 y4 C
  754. LDA #$00
    ) p2 ^/ ?; g0 ]* y
  755. HEX_Cln
    , F# H$ }* D: ~/ J1 h
  756. STA DEC_H,X7 u) g5 |- J+ N9 P! P
  757. INX4 R  w, c; C! ]
  758. CPX #$03" c5 {. T( W" f3 T- r/ M
  759. BCC HEX_Cln9 x, v' z5 o3 O7 T6 [( V
  760. LDA HEX_Data
    , t" G& K6 v$ C: F) J0 A3 ~
  761. ;------------------------------1 ]8 w/ K, B8 E7 U3 K9 l$ s+ ]
  762. HEX_100
    6 ?* t4 R/ v: b: t6 D* t& k
  763. CMP #100) C% c* \# M5 s9 \
  764. BCC HEX_10) C: T' p2 u9 b$ T, H# w$ u; j
  765. SEC1 K3 ?6 @& o+ \
  766. SBC #100$ v: c9 {3 H& s
  767. INC DEC_H. y/ }! P; G7 U
  768. BNE HEX_100% i* t! l& m# t4 r0 |! e
  769. ;------------------------------
    ) h: n/ e4 ^3 {$ m& d: g1 V4 A
  770. HEX_10
    " t$ J! V' T" Y0 B& _
  771. CMP #10
    5 L! H$ K0 c) @3 ~$ n
  772. BCC HEX_1
    3 C. u5 L) @9 a$ V0 ~* W- ^
  773. SEC5 r2 D' s: H8 y. y) O
  774. SBC #10( w( [- A8 I! H9 g) I: {8 j, ?8 I
  775. INC DEC_T3 m& E. ]# X8 Z
  776. BNE HEX_10
      i- g' t  n( f2 P1 ]7 r6 ^
  777. ;------------------------------
    7 h) X0 a9 F" _: ~- U
  778. HEX_1
    1 b3 H# T8 w; t  V$ t6 h
  779. STA DEC_L0 z9 [  V) m. R8 f
  780. PLA
    ) n& b/ _4 [" i
  781. TAX
    ( V6 k3 D' d% p; o: q
  782. PLA4 u# K. k% y( X
  783. RTS, u9 a8 ^0 d  s, _$ a! k3 ?

  784. + \' _' o$ M# A
  785. ;==============================
    # |  C' e/ p% u8 C
  786. ;音乐曲目显示
    6 J! n' n+ f9 V3 j- h6 ]/ a
  787. Music_Show9 D8 C4 m  K, Q: D  U
  788. LDA Music_Cur
    ) E0 G3 [7 D( b0 J4 h% m1 W
  789. CLC5 ?0 H( U' Z$ m1 m1 o2 C! U
  790. ADC #$01. G+ t/ V; f6 C6 h) T3 z
  791. JSR HEX_To_Dec6 z$ g' P7 T) j* v- D3 ?0 Q& \
  792. LDX PPU_Cur  d  ]3 p( M( c3 p
  793. LDA #$FD
    5 f) A* @/ u' d5 R. E
  794. STA PPU_Addr,X
    ! b. R" {" h2 _( z$ n& {) G8 N5 t
  795. INX
    6 _5 l3 A$ f: V
  796. LDA #HIGH(Play_Index_Pos), C  a# N* M0 @$ r
  797. STA PPU_Addr,X, @5 e) }5 {2 C- }# _0 k
  798. INX. B8 T9 ?: u$ `. ~$ R
  799. LDA #LOW(Play_Index_Pos)# l1 l, l: V* H: j5 f" V
  800. STA PPU_Addr,X, U+ Q; k6 E6 {& u! l  k" d
  801. INX" T7 k- O) r- m- w  S
  802. - u& [* `& g5 `+ I& A
  803. .IF Music_Song_Total > 997 S! j  e9 u, g3 j
  804. LDA DEC_H, u& f8 r  j# u; _! _
  805. ORA #$303 }9 ]/ L8 T! d6 b
  806. STA PPU_Addr,X5 _# z. h% `7 x3 R7 q
  807. INX( b  v7 J2 @, o* E
  808. .ENDIF" H" ^; o8 V! s- c) ^0 a, D2 U

  809. ) ]; Y9 r% E9 \) y9 o
  810. .IF Music_Song_Total > 9' C1 G# \/ j1 l
  811. LDA DEC_T
    & K) F, W% A8 m* {2 m
  812. ORA #$30; D2 R: n, d$ \; p. t  x4 I
  813. STA PPU_Addr,X) W  _/ ?+ b7 q. m+ g
  814. INX7 `9 S/ l0 L! `/ O) N
  815. .ENDIF8 v9 r9 C7 s# `
  816. 0 G* [+ `4 A  @! y: _
  817. LDA DEC_L
    : s% V) [+ d; G* b* S9 ?- F6 m
  818. ORA #$30
      ?1 H' D; O; L& ?3 _7 h5 J2 P  @
  819. STA PPU_Addr,X
    / a# H; r. m) V9 ?) w6 V! ]& @
  820. INX$ M& _2 l% v/ ~
  821. 9 j  K9 B& `0 [  @
  822. LDA #'/'
    ( s" [1 K  t' O4 f! L% S6 J- N' U: _
  823. STA PPU_Addr,X
    & ]* O7 [1 a( g3 ^* E
  824. INX
    ( P; |2 a# p/ {9 N* i9 p9 t
  825. Music_Show_Total
    9 e) P7 ~% L- f1 w  h9 k: W
  826. LDA #Music_Song_Total7 H5 u3 T$ q0 n( L* l  _
  827. JSR HEX_To_Dec. m  n; s9 y  ]9 {' k' c

  828. & ^, V! F* H0 s3 N2 c
  829. .IF Music_Song_Total > 996 h* k7 N& E$ D1 o( v0 v: g
  830. LDA DEC_H  ~/ N( k+ l8 \" a2 u; }# x! e
  831. ORA #$30( T* O4 O9 h- [0 d/ K' ]: t
  832. STA PPU_Addr,X' f$ L; b' c( X/ K
  833. INX
    5 I: s: o' q) E& X1 H
  834. .ENDIF3 _' S( J1 \/ Q

  835. + ~; x+ v' D7 J/ U+ s
  836. .IF Music_Song_Total > 9
    3 }! t9 e1 G/ i3 c9 Q, E
  837. LDA DEC_T
    ) Q2 a+ w8 }2 a# L- D  Y  k) W
  838. ORA #$300 k) y, H! m/ w* g
  839. STA PPU_Addr,X
    ; b$ m6 @: Z2 C4 o6 a) `1 _$ a
  840. INX! _) |$ p# C$ Q- Q
  841. .ENDIF
    4 C' b2 j; b  Q! Y, |+ s
  842. / P) T  _' k( I$ T1 P! ^% g
  843. LDA DEC_L2 `$ y6 K9 A/ V+ }' H" G
  844. ORA #$30  L2 ]3 I! O) H3 I5 s2 \
  845. STA PPU_Addr,X
    ) k/ T+ f$ c( Z& H* a3 q& Q, P
  846. INX
    3 N4 A5 ~) h) G+ O) h& m2 }/ Y

  847. : ]& S* I$ v4 h. ^4 b3 k. S1 I
  848. JSR PPU_End
    " N" @( j" y  z$ Q
  849. Music_Show_End+ m7 R* j& {5 f1 _
  850. RTS
    7 _" B& s) J: P! `
  851. % B( v' Z1 T: T7 w  F
  852. ;==============================
    : ?; z6 c" ~% b1 n
  853. Time_Show;播放时间显示
    & w' T4 S6 Y4 o+ h0 b. _3 S
  854. JSR PPU_Addr_Set5 ^& l& I, z8 T
  855. LDA #HIGH(Play_Time_Pos)- c5 V& F& S+ @$ A2 G1 K4 x
  856. STA PPU_Addr,X
    4 g% S5 ^; @& O) C( m
  857. INX# V3 q% D. c$ t' \
  858. LDA #LOW(Play_Time_Pos)
    , S! N$ I% O! \  N7 T
  859. STA PPU_Addr,X8 V" |) S5 b2 M  U! N5 \2 J
  860. INX
    . U. r; c6 W% F, h
  861. Time_Show_H
    . x1 K6 ?+ t( k9 T
  862. LDA Time_H* N5 O+ b! r" {( M
  863. JSR HEX_To_Dec9 t0 t9 E, Q. Y1 E: r
  864. JSR Time_Digit4 G' l! Y. m/ U; _4 D
  865. LDA #':'/ U2 R- m0 }) M
  866. STA PPU_Addr,X
      T/ X1 t' F3 ?0 q& Z" y
  867. INX
    ' t3 i& d7 c/ v) P2 d8 t
  868. Time_Show_M, J; T9 ]6 U* m/ c
  869. LDA Time_M4 U9 @9 |8 w: W) L& c- J# y) r2 ^, B
  870. JSR HEX_To_Dec4 e0 j- j; }7 b2 E$ W! V
  871. JSR Time_Digit
    ' {( v7 [- n& W$ b
  872. LDA #':'
    . T9 c$ q" g, z
  873. STA PPU_Addr,X- C. n3 O+ k3 Q& T
  874. INX
    ! u) ^+ X: L# J" N4 _2 I
  875. Time_Show_S5 S, ]6 T# y) ?) K: k' U( o" o
  876. LDA Time_S: b7 H0 ^; I, ?# N9 x; `9 G) `
  877. JSR HEX_To_Dec3 I3 X9 m7 l, F  b+ O
  878. JSR Time_Digit
    ! l  _! M& `; e8 C. t( v4 u
  879. JSR PPU_End
    - u4 @- h9 N# U% a( }5 p
  880. Time_Show_End
    ) \6 F. K& ]* V& ^2 |7 S: ?7 K
  881. RTS3 [/ R) f4 g# d. m. J8 n7 i* t
  882. 5 `, A8 ^3 B# }( ?% E# p' j, z
  883. Time_Digit, y* ]. J# C5 a! f/ z9 ~
  884. LDA DEC_T
    # c% X/ Y$ G; D8 |/ x
  885. ORA #$30
    / W2 {& }, M$ w1 ~
  886. STA PPU_Addr,X
    $ W* d6 R2 b6 d" t
  887. INX/ k& o, B& l1 Z  x1 |
  888. LDA DEC_L4 B& @- X9 [, p# e! c+ {
  889. ORA #$30& J3 F  \  ~* e, r; ?+ U8 b% L) u
  890. STA PPU_Addr,X
    + E6 t+ Z# L: N( l5 ]& @" ]/ [
  891. INX
    % T# d+ y7 J5 ~: v2 w7 I
  892. RTS
    # h6 n4 C% K. q' c8 K& M
  893. ! p4 B& P; V+ ~* e
  894. ;==============================
    2 U. q$ t9 w3 s5 f, A, p' B7 U3 T/ C
  895. Time_Count;计时
    4 r  @( V( I2 ?6 q' O
  896. LDA Music_State! p7 ^  J, a# K$ e, K+ B" B% w
  897. ORA Time_Wait_Cnt
    ' b0 g/ F7 o5 E- O% V1 M0 q
  898. BNE Time_Count_End8 o2 j7 |3 C: K+ [. I% G- J
  899. INC Time_Cnt
    " A8 S7 A: n: D6 w5 l( K& e5 i% X
  900. LDA Time_Cnt
    ; p% S* i4 N7 q6 d7 ^
  901. CMP #60
    ( H% Y: f% h2 j  c5 O2 N
  902. BCC Time_Count_End
    9 P2 Y1 y, k5 b; B; s+ q/ t
  903. LDA #00
    2 p7 d0 P; o4 s: c9 v7 w% p; N
  904. STA Time_Cnt
    . u7 N% c! C0 |; `
  905. INC Time_S
      @7 n: v# K3 w* O) {. O

  906. 5 A+ C' Y1 C% P! Z  V& e2 _
  907. Time_S_Cnt- Q0 u0 U% z8 e
  908. LDA Time_S
    ( W  n( ?# M1 d/ ^1 W
  909. CMP #60
    2 t7 C  ^* s2 ~- D8 _
  910. BCC Time_Count_End0 w6 _" J. I. C0 q
  911. LDA #00
    4 L8 Z8 Z0 o0 _- V
  912. STA Time_S! S& b# \$ {' i- N8 C8 R. W. A# F& x
  913. INC Time_M, F6 o8 R  v$ |- x" R$ z

  914. & |" l& T8 ~, q; B' b  v$ n
  915. Time_M_Cnt
    ) _+ ^+ b) k& }' c1 j, J" e
  916. LDA Time_M
    ' }; n! X: `, o; ]
  917. CMP #60
    1 o) Q5 Z3 E- M% V9 t1 u6 N
  918. BCC Time_Count_End* X0 w: l& [5 L& M6 T7 J
  919. LDA #00" F+ C4 A6 B1 j9 A( i
  920. STA Time_M3 N) L9 c; k* E( L, x! _
  921. INC Time_H3 [5 t/ {* {, @5 q! w, ]5 W

  922. # d: L- {; S8 j( C3 ~5 L) P
  923. Time_H_Cnt
    + X' U# Y4 D0 p/ s% H4 x
  924. LDA Time_H
    , H' h1 R' ^$ M. E! @* |
  925. CMP #24) H- I5 J6 E) V, {: I+ d1 Z
  926. BCC Time_Count_End/ V- v# [9 K1 R* t
  927. LDA #00
    4 E4 l) \  D0 P: k# V/ f7 t
  928. STA Time_H
    # n7 g* c! U6 P1 ~* F
  929. + H7 H' M  c0 D7 ?2 h
  930. Time_Count_End
    + m0 e% v* {+ \/ T
  931. RTS; M- L0 [+ \0 O' O/ Q" ]& v" g

  932. ; s* f. U5 ]$ ~
  933. ;==============================4 h. {7 r* O5 h/ R
  934. Time_ReSet;播放时间重置( ]2 u, d- {" V5 {" [. ~
  935. LDA #$00
    ; s6 B) Q. N: f) f  c" C
  936. STA Time_S
    ) m# T6 _. P6 ^9 a8 U
  937. STA Time_M
    ) f9 m1 x7 O' F4 c( B$ l4 ~
  938. STA Time_H
    , y( `( Y: ]; A- Q  Q/ x
  939. STA Time_Cnt
    , [) Q( [9 p+ u# b' _' V
  940. RTS" e/ {7 F6 i; i+ j6 _

  941. / I' [) _' b7 b/ K9 j: p  m2 u
  942. ;==============================- g2 w  ^5 O2 X3 G
  943. Music_Bar_ReSet;音乐条重置
    & S: a, P( X  w0 t6 u$ G, C
  944. LDA #$00
    8 _8 [$ b4 N. t
  945. LDX #$008 a! M% l; v- r2 Q
  946. Music_Bar_ReSet_Set' m7 R8 t" Q  y/ e
  947. STA Sound_Bar,X
    / f! U- v# c, ~8 o8 Z
  948. INX/ W* k, l$ U6 g) m3 V" x$ }
  949. CPX #$10
    ( H0 ~! K7 N3 M' c1 c6 }6 E
  950. BCC Music_Bar_ReSet_Set1 @6 k" y' [8 [: E
  951. RTS, ~/ o" ]' N, P6 ]

  952. 8 C. R0 ]; x6 v; y, A  }
  953. ;==============================
    * D" m' u6 k% t3 Z( m0 n+ _
  954. PPU_Data;PPU数据写入
    5 m$ n( g+ m3 D! C$ t7 F2 {
  955. STY Data_L
    : R6 j4 ]3 a1 V! w8 h; l1 N( K
  956. STX Data_H: G2 ?' ^& T/ _9 d7 m
  957. LDY #$FF
    # _2 W( u4 f$ i) O
  958. LDX PPU_Cur7 c$ p+ d, C4 X8 z* L
  959. DEX7 h1 X2 v# M* p
  960. PPU_Data_Beg
    ! K: P3 g! l* w1 N' g% P( z) v
  961. INX8 k: e! f8 N1 `& ?
  962. INY% g4 r! |- o" \& O4 f' u3 O
  963. LDA [Data_L],Y
    5 H. r0 A0 I: e. ]/ I5 C
  964. STA PPU_Addr,X
      i( f3 G$ j# X' D, l% a$ L
  965. BNE PPU_Data_Beg
    8 ?9 ~' B( X4 F; J1 K' a9 `: [, Y
  966. STX PPU_Cur! u( i6 [4 X% E! B- K- d1 M7 \7 s
  967. PPU_Data_End
    ! P3 G0 I$ r* T9 W" r  s, ]; O( v4 }2 }
  968. RTS$ y; a- _. R8 U2 G! X

  969. / k. r, }% k8 J$ @/ x- ]4 [/ S- _
  970. ;==============================
    6 T2 G$ l& V5 {
  971. Music_Stata_Show;播放状态显示
    $ T# z6 s) D5 e) M: [/ q
  972. LDA Music_State3 _- l) }% p& P5 ^2 R* p8 V
  973. BEQ Music_Stata_Show_Play2 v8 }" c8 [& H* l
  974. Music_Stata_Show_Stop0 B# b: c: B& y$ ^- Q+ {9 D
  975. LDY #LOW(Music_State_Stop)
    : a1 M6 O# Q6 t9 u* u
  976. LDX #HIGH(Music_State_Stop)6 ]; ^- ~7 o( _2 G( d
  977. JSR PPU_Data% l1 [, N! I: h/ ]7 h+ R0 V
  978. RTS
    . r7 B4 e4 _# j* b& L
  979. Music_Stata_Show_Play8 Y8 {8 }% h4 y" T$ r9 H0 Z
  980. LDY #LOW(Music_State_Play)
    2 a5 z- `7 R5 U; C
  981. LDX #HIGH(Music_State_Play)
    / x- ?4 o" I6 a& I- Y7 L% e
  982. JSR PPU_Data
    ) z' t$ V2 q: E- B3 Q; }& E; g
  983. RTS( e" @% @  O3 M2 ~, N

  984. 5 T! j2 Z# z+ g. r! Z! W  g
  985. .IF SOUND_BAR_SHOW_ENABLE
    6 h3 ?/ W6 Z" M  {: q, z
  986. ;==============================( }' z! {* G3 q% a
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    , |9 m1 B2 h6 O: b3 @
  988. LDY #LOW(Sound_Bar_Text_Data)
    " [9 P/ P2 b% d4 `7 U! M
  989. LDX #HIGH(Sound_Bar_Text_Data)  U; S/ \; G* y8 E
  990. JSR PPU_Data1 \4 W  ~7 M* G
  991. RTS
    " H: ~: o3 ?$ `0 J$ P
  992. + m1 ^  d  c- Q
  993. .ENDIF
    . }; t- A9 @6 {- T! f

  994. 3 l1 ?) c) G6 u: Q# d
  995. ;==============================
    ( Y' m  b8 H" G/ E" ?' D
  996. Set_NameTable_Attributes;设置命名表属性# w5 c3 m8 {  b0 p0 V, c
  997. LDA PPU_STATUS  X6 W& W" `7 q; {" ~
  998. LDA #$23
    2 V& }+ C) b; a8 y
  999. STA PPU_ADDRESS% i8 g; i9 e0 y* g7 N. @
  1000. LDA #$C0
    ; ?: |8 J$ T: G, `$ E& k* A9 ?
  1001. STA PPU_ADDRESS
    - O! c1 D, L2 C( }3 d3 `, w
  1002. LDX #$00
    - U0 p6 S' Y9 W) ]) D
  1003. Set_NameTable_Attributes_Write9 H) x8 |* v# l' w$ Z, q" o0 b' [8 X
  1004. LDA Palette_Attributes,X/ `3 q7 l! Y+ N. {$ R
  1005. STA PPU_DATA
    ! L2 v7 W/ q: L' w9 Y- u9 p
  1006. INX
    # N6 A( d) ~2 \" V
  1007. CPX #$40& b% t# u/ _! H+ _! y
  1008. BCC Set_NameTable_Attributes_Write. g4 _  B5 E0 U$ a$ b
  1009. RTS
    # R9 z" K& e: s6 {9 J
  1010. & {+ v/ J* o/ K" P- U8 P& ~0 E
  1011. ;==============================
    1 r% h) @& I5 v# F; c. ]
  1012. Set_Palette_Color;设置调色板数据
    + h* a5 m; h% {
  1013. LDA PPU_STATUS
    5 Z+ m: |$ S- d
  1014. LDA #$3F
    # S9 K, z) s& P0 P9 L3 e
  1015. STA PPU_ADDRESS
    8 u; m* {% }# G( [
  1016. LDA #$00
    ; B; C8 m1 B9 q
  1017. STA PPU_ADDRESS- J; T# K$ L0 g3 p7 W8 X
  1018. LDX #$00: D. Q8 |+ E2 n. L$ h+ J6 C" M
  1019. Set_Palette_Color_Write# {; u/ f6 M' o' t) P
  1020. LDA Palette_Data,X5 O* M3 _& I; i3 }) u
  1021. STA PPU_DATA
    6 p; K4 o. A0 d2 t1 c2 u
  1022. INX  K2 e" Q5 `6 q* D3 U* o
  1023. CPX #$20! O5 c; C; P* M) [
  1024. BCC Set_Palette_Color_Write8 B( s% A" M# g, i2 U, [5 h+ N7 `
  1025. RTS
    ! `' a5 f1 Z5 Q! a
  1026. # x# y5 [2 r& E1 d; ?
  1027. ;==============================: G$ k! P7 @2 m% I7 ?
  1028. Init_Palette_Addr;初始化调色板数据
    : ]) X1 {) J+ l
  1029. LDX #$00
    4 \! U1 _5 W& c7 e
  1030. Init_Palette_Addr_Write. ?' L6 o# R, o: b2 R  A; O
  1031. LDA Palette_Data,X
    $ O, y- J  H- m3 U( G
  1032. STA Palette_Addr,X
    ! S' u. T8 s# q6 t1 f# s
  1033. INX7 d9 t  w8 D7 a0 N0 r* N
  1034. CPX #$20
    9 L2 n7 f1 p% V' d* M
  1035. BCC Init_Palette_Addr_Write, k6 z. d6 a. y/ f% F# t0 J5 g. k
  1036. RTS  t2 ?( g, G% F* e4 A* e) {
  1037. % D/ c( y; R; G5 s$ Y' Q
  1038. ;==============================
    & y0 {5 j4 k! p. m) j9 a" f1 b% |
  1039. Update_Palette_Color;更新调色板颜色
    3 Q! i5 A, M- U! E
  1040. LDA Show_Track_Name% s# s) ?" G6 V3 r( E8 h! a; x
  1041. BNE Update_Palette_Color_End
    9 C$ I( y. T4 G3 T3 p4 i4 ?
  1042. LDA Palette_Update_Flag
    2 ]) S. c. D2 `, `! |9 i
  1043. BEQ Update_Palette_Color_End
    ( g( q& o8 L: H
  1044. LDA #$3F
    * v8 |$ H) K' j5 E) [3 z
  1045. STA PPU_ADDRESS
    6 \# n1 k, x3 F$ M
  1046. LDA #$00' f! d$ s  O) f7 B) g
  1047. STA PPU_ADDRESS3 D+ L; {6 {& s5 {0 _# ~1 O5 s  S- v
  1048. LDX #$00" o0 a8 t3 F* Z9 s/ a' C0 J
  1049. Update_Palette_Color_Write
    ; x) t; S2 a5 F3 v3 e
  1050. LDA Palette_Addr,X
    ! u( G! R7 r& ]
  1051. STA PPU_DATA3 Y; S& Y) E) G
  1052. INX
    $ e: R1 m8 v3 C; S, s8 `
  1053. CPX #$20
    + |5 s& U7 y/ l% N$ ]
  1054. BCC Update_Palette_Color_Write
    : H: X  }: n. {9 Z: q8 \
  1055. LDA #$00# `* {: y) }' f1 |. r
  1056. STA Palette_Update_Flag
    7 N. S4 s9 |$ _- ?4 A& X
  1057. Update_Palette_Color_End5 L% N$ ]% j+ C5 Q6 ^# e0 [
  1058. RTS3 E) j. x# Q3 a8 E! a

  1059. " i- h5 H# ]. E) V
  1060. ;==============================6 c+ s2 O8 [* G. g& p2 p( X
  1061. Update_Palette_Data;更新调色板数据" L, O5 J$ |9 m1 I  a2 C8 H7 w
  1062. LDA Show_Track_Name
    / [6 Z$ _7 {" }6 c
  1063. BNE Update_Palette_Data_End3 B: i' Z' M# v3 B7 M, h
  1064. LDA Music_State
    5 A% l. K. ^' v7 r: _1 l& X! l
  1065. BNE Update_Palette_Data_End
    # b! W, H& r/ N. C/ a
  1066. Update_Palette_Data_Check% N" X& {' s4 @  P0 ?# R9 \
  1067. LDA Palette_Wait_Cnt8 V2 t" E  E+ {9 K* D
  1068. BPL Update_Palette_Data_Check_Over
    ( H5 |) U  R1 n# P% Z5 R* N5 ?
  1069. LDA #Palette_Update_Interval# Y3 q5 i+ s1 L. I$ p  u6 p7 e4 \/ H
  1070. STA Palette_Wait_Cnt7 K! U. f& q, B
  1071. Update_Palette_Data_Check_Over
    + u9 }; p7 D- x% L1 U
  1072. DEC Palette_Wait_Cnt
    % o, o; `1 C) W9 k, q
  1073. BNE Update_Palette_Data_End; a& E- ~& B( p9 `
  1074. INC Palette_Update_Flag6 Z" z8 |- T: r% A0 A( {0 Y
  1075. LDA #Palette_Update_Interval$ @& x  {* H/ x/ @- F
  1076. STA Palette_Wait_Cnt
    4 e: X% J% U1 e$ k2 Y4 M; @
  1077. LDA Palette_Update_Addr
    5 T* ~. s" Q1 o' c% @" h
  1078. CMP #Palette_Update_Max
    5 a% e7 \6 M, Y1 k& \8 S! I% H, e: T
  1079. BNE Update_Palette_Data_Set
    $ Z& U8 m& T% n# w& b
  1080. LDA #Palette_Update_Min - 19 o+ Y0 p3 q% u
  1081. STA Palette_Update_Addr9 G. e/ w8 ?; R  \
  1082. Update_Palette_Data_Set* ?$ q& F/ m4 R" E
  1083. INC Palette_Update_Addr
    2 w( B4 H) E% a
  1084. Update_Palette_Data_End
    % Q; c  S* b, X* A" P
  1085. RTS
    7 e  f- G/ d/ M

  1086. 8 M+ Q& ]$ O% }
  1087. ;==============================
    ! H2 u6 ^9 R9 L. n4 {
  1088. Show_Music_Text;显示静态文本/ E4 X% Y  Z, o& j  J
  1089. LDX #$00+ K* }9 q& Z$ e( Z9 T2 U$ ?& I
  1090. Show_Music_Text_Set
    % z9 f" E3 O1 i: g3 V, U. Y" y5 @
  1091. LDA Static_Text_Data,X1 j2 I2 G2 r8 I* u7 e$ F5 l
  1092. STA Data_L; U9 O( y3 q$ \0 O$ s
  1093. INX
    * Z4 P( o. C2 C- S0 `$ q: u
  1094. LDA Static_Text_Data,X
    2 P* T# g0 V9 u  w4 w1 e# _# R5 }
  1095. STA Data_H
    - j% z) X. O- H+ v4 `5 W0 h
  1096. INX
    ( H4 j) F9 t* o# k& g5 G
  1097. LDY #$00
    / p( H/ i% d( Z1 p, s5 |
  1098. LDA [Data_L],Y" M! U8 ^) n, V& m7 s. J7 A, C
  1099. STA Data_Cnt; d( V" c& U% X+ c5 v% @+ D
  1100. DEX  i$ I" ~: c6 L1 R8 K" c4 O/ z
  1101. DEX1 N& B0 M' u; {  u/ o5 j
  1102. LDA Static_Text_Pos,X
    ; Q. U9 \7 i+ X6 R) G. X
  1103. STA PPU_ADDRESS
    $ @# s8 Z$ U+ p; p( k5 v3 B
  1104. INX0 d, r- U& q7 N" R5 J" ]) ?7 ~  H, P
  1105. LDA #$20: R% {* ^6 Z0 G! S. H9 G/ ~5 Q
  1106. SEC
    # n( H) ^% \  Z1 a) O5 c2 E
  1107. SBC Data_Cnt
    : D# g4 E$ Y2 @5 C# d
  1108. LSR A
    ) A) D3 b/ ^6 ^+ p) I2 o. N3 X3 s' ~
  1109. STA Data_Buf! L% M% _  @+ ], D4 d" p
  1110. LDA Static_Text_Pos,X. h. u: z! S2 e3 ^: \* D
  1111. AND #$E0
    , ]1 }4 {7 [. D* {8 t
  1112. CLC
    6 N4 f" D' J( g# ?7 W' o4 E( l
  1113. ADC Data_Buf
    : R7 p: j% h5 d4 w% x7 _7 F) }) P
  1114. STA PPU_ADDRESS7 N+ l: k( Q# z: s* n" r- O
  1115. INX$ ~  L' @9 [& D3 H5 [
  1116. Show_Music_Text_Set_Write
    $ |0 L3 f9 A  s
  1117. INY
    ( @' A# p( u0 a& O$ _+ O$ }
  1118. LDA [Data_L],Y. P* z' I# U1 X
  1119. STA PPU_DATA
    5 j6 g& R$ N  k+ E1 \
  1120. DEC Data_Cnt
    ' U, S$ H# k0 ~
  1121. BNE Show_Music_Text_Set_Write
    # W# z! _" |% A  m* L
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos& X8 a" z1 I+ \, p* M% v" Z7 V6 r
  1123. BCC Show_Music_Text_Set
    5 A# [: Y; ^  V7 w0 `8 B3 S
  1124. RTS9 P+ R- O9 q7 ?% l/ z( _6 ?
  1125. 4 O. d" q# d, h; _! e  F3 S; ~
  1126. ;==============================- f8 w* N& e; ]5 i' O! T! T
  1127. .IF Track_Name_Pos;显示曲目信息
    3 a: A+ I+ A3 q3 Y) x$ G
  1128. Show_Track_Info- Q& Z# L4 C3 O* m- V
  1129. INC Show_Track_Name$ S" k$ G  R5 R( q
  1130. Show_Track_Info_Clear
    # i, i! \+ U& x0 x
  1131. LDX PPU_Cur8 j  c$ U8 b2 }0 N: h
  1132. LDA #Mode_Clear- {5 p; t1 X9 b! ]. S. s; o+ W
  1133. STA PPU_Addr,X
    & C- M9 p5 K+ }1 Y
  1134. INX! w" |# Z8 x& i8 {7 r- N

  1135. & F$ F4 h8 e) c4 p
  1136. LDA Music_Last
    4 }4 v. Z1 `: G( Y8 ^; F6 K
  1137. JSR Show_Get_Track_Name_Center_Pos
    + X9 g: E! a! Q  M% S
  1138. Show_Track_Info_Write_Cur
    " S2 P% A& c2 E& g0 `" ~1 F
  1139. LDA #Mode_CntLine1 m, b3 t8 p  \' ?0 W
  1140. STA PPU_Addr,X' L0 S7 E& E6 l
  1141. INX
    2 N3 t  f; e+ C3 m: j

  1142. , \) H; Z! l8 l+ m: g+ h+ s5 _
  1143. LDA Music_Cur5 ~4 B# j/ j- o3 R9 z8 I
  1144. JSR Show_Get_Track_Name_Center_Pos- i/ z( Y' @+ B$ E4 ~

  1145. # ^& t, K9 L1 N8 U7 r
  1146. Show_Track_Info_Write_Cur_Data. B/ t* o) ^# m0 \3 m6 f
  1147. INY
    ; P- g( D1 ?- w) _
  1148. LDA [Data_L],Y
    - K( M/ a2 t2 O% E
  1149. STA PPU_Addr,X
    $ ~7 H( E. c$ H. ]: |# s) U! V
  1150. INX  P1 M0 f  O2 m; S* ]. |
  1151. DEC Data_Cnt
      h1 k9 }( t4 j+ R8 R
  1152. BNE Show_Track_Info_Write_Cur_Data1 \5 o3 S+ R8 d) W. W/ m
  1153. Show_Track_Info_End
    4 K1 w, C3 V  Q# `' O
  1154. STX PPU_Cur: D1 D3 [1 K( {& Y
  1155. RTS. o: ]- d0 U# C: m( |" y/ m: O

  1156. 3 y, I! a$ N) I. ^: O
  1157. ;==============================
    7 S4 ~/ J  K! H! r. h- [
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置/ `/ ?; `* ~3 r. |6 ]! s
  1159. ASL A
    # T9 E$ f- _5 g: k: I6 N
  1160. TAY
    6 r8 ^0 Q6 G2 A4 \
  1161. LDA Track_Name_Addr,Y: D% F5 B1 l5 Y5 P: r0 Q' P% E% z0 g
  1162. STA Data_L! N9 Y. D/ x$ A+ H
  1163. INY6 l5 P6 I7 }- ?! S! m
  1164. LDA Track_Name_Addr,Y
    ' l/ _! d5 |1 Y" R: \. [
  1165. STA Data_H
      c- D1 ~- z7 ?2 Y+ e
  1166. LDY #$00
    " X* n; S3 Z9 Z+ S) \
  1167. LDA [Data_L],Y
    8 `8 W9 d* x. Q5 H! l
  1168. STA Data_Cnt! J0 K' x2 ?8 |- h$ D9 v. W" H
  1169. LDA #$20
    ; ~, b/ ^' ^8 Y# ^- K8 M% J
  1170. SEC: N$ e6 |7 c, v- A1 r- @5 V. E0 E, r
  1171. SBC Data_Cnt7 B6 y3 Z- E( k& ^- D
  1172. LSR A
    2 b7 H/ g9 q; r' w# o+ S
  1173. STA Data_Buf
    6 M) d: h& ~& ^
  1174. LDA #HIGH(Track_Name_Pos)% K0 P: ^3 X3 q" Q
  1175. STA PPU_Addr,X" S, w8 C6 T' y+ `& w+ e! |+ [
  1176. INX0 {" e2 U9 V& u& S: _+ i5 m. F
  1177. LDA #LOW(Track_Name_Pos)% x: w9 Z3 e4 f
  1178. AND #$E0
    9 Q, i1 ]. ]4 r( Y2 I/ @
  1179. CLC$ K( [4 W% v( y+ r- I1 F- l, y
  1180. ADC Data_Buf
    : |4 ]  ]: c% x2 ?8 Q5 g3 L
  1181. STA PPU_Addr,X; k* ^( t7 [- n- ]# ^) t+ R. |
  1182. INX
    * E! Q, H' h! T8 o/ r6 O: _; G
  1183. LDA Data_Cnt  L! s/ ]0 C. h1 r( l. A
  1184. STA PPU_Addr,X
    , {9 w/ f1 g" W7 c9 p
  1185. INX
      P( O+ w. P' g& I% `3 Z# T) S
  1186. Show_Get_Pos_Center_End% i6 Z- j( D" @. d' S- C
  1187. RTS
    $ ^6 ~$ Y+ h+ }. V* S
  1188. .ENDIF
    - h$ L: U5 [% x( G5 z! u6 L" g+ P
  1189. ; O+ _. \0 Y" @2 m2 L
  1190. ;------------------------------
    1 C' g" g  J- ]/ f9 n7 X; I
  1191. ;命名表数据
    # S" k" S) [/ N: y; j. e8 v
  1192. Palette_Attributes- z- x1 |) W" K/ c- M
  1193. .IF SOUND_BAR_SHOW_ENABLE4 `* t, b' C/ h9 r" [
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$004 Z2 |, u% P; K( p: X$ Y
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ; F8 A" J+ G) y7 u8 t: w9 [
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    8 j% F/ y9 Z& k; U3 X! H- L
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55& f3 l0 P5 S6 F, W' I
  1198. .ELSE
    # `' Y3 g$ X+ T0 [8 S
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$006 V. g6 ]& C" i# W% y
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF: j; k1 Q0 U  G, J4 P. k
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$554 B* x, K; p1 g) P) v9 I
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55' X1 \& u3 ~! G3 m. i; V
  1203. .ENDIF8 h+ L$ w" C3 F* t; o6 ?
  1204. , Z% @1 [2 q+ S1 R8 c2 K
  1205. ;------------------------------
    ( w& u' J3 s& @2 s+ b. N4 O
  1206. ;调色板数据- J  m" ^% t6 ^1 @! U4 k
  1207. Palette_Data% H* @3 q% x' B8 [- ^% {
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    / k5 `% P- R4 R, N" L
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F+ v6 U" k9 V: F9 U9 g2 p0 O
  1210.   i! W& y& [3 M1 U' t; t
  1211. ;------------------------------% W' H' ^8 i; H# z! y3 g% Y: J
  1212. Static_Text_Data
    % @& G2 q; C- z' t7 J) d& d
  1213. .WORD Static_Text_Title_Data
    * W- ]1 A3 q  q) ]
  1214. .WORD Static_Text_Author_Data1 X. i" h$ E% h1 s  ~$ p3 A' A* W
  1215. .WORD Static_Text_Date_Data4 c) @& b0 t* P/ |9 _. [$ w  B2 ^
  1216. Static_Text_Data_End
    6 O' l- G- M- ?4 n
  1217. ' U- |' N0 _2 z0 F. W' o* X
  1218. ;------------------------------
    ) d, B  x6 m8 _+ S5 }# t8 m
  1219. Static_Text_Pos7 Y, ]/ d9 I4 r* ^
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    + \8 l& G* D1 o
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    8 e/ |# r7 K$ j$ ^- @: ?9 S. m3 Q
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    2 T! x' L6 _: C) b6 e
  1223. Static_Text_Pos_End
    7 l0 n, u4 x$ B1 l2 P

  1224. - b: d' j. O1 j3 H! i
  1225. ;------------------------------
    , a/ |; g- w; w% D1 X- g2 @
  1226. Music_State_Stop. f8 ~5 P- r( N: a9 U- y" T
  1227. .IF SOUND_BAR_SHOW_ENABLE8 ~5 Q4 b2 U6 W6 w# A9 R
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$005 o8 X- j7 l* H& S
  1229. ELSE( K8 K1 R& c$ x; @& ]
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    0 r. X& {% R4 L1 M3 ^+ K0 o5 B+ e
  1231. .ENDIF
    " z" G: l2 @  ^' R$ H" J
  1232. Music_State_Play+ x/ z( I3 y0 V- z! E/ ~% i
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00$ a9 C# d8 S9 P* P) E$ s, _
  1234. / a# w; ?* ~' s! B% x! Y
  1235. ;------------------------------
    1 C, f- p! d9 r6 \) H
  1236. Sound_Bar_Text_Data;声音类型文本' L* V4 F3 o1 z# F1 L- A3 e
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)" u" ~$ @+ y* }" L9 C
  1238. .DB "SQ1-",$FF
    + c8 J3 d( C% h
  1239. .DB $FE,"SQ2-",$FF3 O+ y6 x4 O/ m
  1240. .DB $FE,"TRI-",$FF0 j- P3 ]# p% l- k3 B7 u
  1241. .DB $FE,"NOI-",$FF5 \+ c2 O4 a$ A" k. F: P9 U
  1242. .DB $FE,"DMC-",$FF,$00: s: ^% S8 x! W9 b/ w+ J
  1243. % n8 w4 Y: j' q7 }3 ^' T
  1244. .IF Track_Name_Pos$ {7 {  A# O% {& ?  {
  1245. ;------------------------------
    1 w+ F4 O% q+ f5 ?
  1246. Track_Name_Addr;曲目名地址索引9 H1 d7 V" f' c: T1 l' @" p- h
  1247. .WORD Trackr_01# i; u* ]) e0 h& s
  1248. .WORD Trackr_02
    5 \5 ?: ^* G; ^1 D/ ?, }0 }2 l
  1249. .WORD Trackr_03
    , [. J; }3 c  }- O
  1250. .WORD Trackr_04
    . n8 g$ a$ z# H/ g: u) W
  1251. .WORD Trackr_05
    - P1 s" {4 g* X) S7 Q
  1252. .WORD Trackr_066 `# q' m) j; I# I0 c# i/ `
  1253. .WORD Trackr_07
    . G# p5 k7 M, w5 `7 n2 N
  1254. .WORD Trackr_08/ s: J& n$ Q$ j/ K5 s) L  h7 N) U
  1255. .WORD Trackr_09
    8 R6 ^; H$ }+ l
  1256. .WORD Trackr_10
    4 q% F* m+ Y/ B# G; |$ G/ h
  1257. .WORD Trackr_11: o: c: I' @3 {3 B# b/ n
  1258. .WORD Trackr_122 B) Z  e& s0 a( H* r( ~3 c
  1259. .WORD Trackr_137 @9 p& x2 ?2 s& g
  1260. .WORD Trackr_14
    5 K9 o. f8 U+ H" Z/ n1 ^) w% D
  1261. .WORD Trackr_15
    + ^$ P' q5 z6 j% C" ?1 x( O
  1262. .WORD Trackr_16
    1 y: J, g; V+ T9 C% Y
  1263. .WORD Trackr_17
    7 X+ K' r8 U& d4 y3 S
  1264. .WORD Trackr_18# C% u. r  i, y
  1265. .WORD Trackr_197 G+ q) P5 j3 V' l) L, h- G' f
  1266. .WORD Trackr_20/ s" V, @. G6 @( p& A# u& |, z
  1267. .WORD Trackr_21
    " l- s  Z) o! q& Y
  1268. .WORD Trackr_22; T; ~& K/ C' V! I1 [  k
  1269. .WORD Trackr_23- K- d  x% s$ D) G
  1270. .WORD Trackr_24# K0 E0 s! @% u1 O$ g6 e
  1271. .WORD Trackr_251 _; [& S) g" H8 ^6 m$ d
  1272. .WORD Trackr_26* X% K# m2 ~" ]" O" B4 z
  1273. .WORD Trackr_27
    + @1 r  @3 ]8 A
  1274. .WORD Trackr_281 B' `* I+ J* ?- a2 U) C; r( W  b4 ?# D
  1275. .WORD Trackr_29
    : b% v% J/ y8 G
  1276. .WORD Trackr_30+ |# q* m* \9 M7 J( i
  1277. .WORD Trackr_313 _6 Z! l  }9 S9 t/ {6 y
  1278. .WORD Trackr_32
    , ^7 z3 ?: z. O2 o8 o
  1279. .WORD Trackr_33# F' c/ v: U' n8 l) R9 J% w
  1280. .WORD Trackr_346 K! O' i  A- q7 ^! {% U: B$ l
  1281. .WORD Trackr_350 p( r. X$ N# r+ ?, |4 z' M
  1282. .WORD Trackr_36  |/ @4 r! F1 f2 \
  1283. .WORD Trackr_37
    : K7 x- _# q. \, }3 k4 j; S+ D
  1284. .WORD Trackr_380 n6 H: K) ^7 ?$ P
  1285. .WORD Trackr_39" t, K3 g4 {# B8 T! E/ a

  1286. + I. q8 e' L1 w  n
  1287. ;------------------------------
    & N* o% x# h: j
  1288. Trackr_Name_Data
    + ^& \6 V7 S$ D" ^! [
  1289. Trackr_01 .DB $05,"BGM 1"
    / v6 b6 s  e8 ^3 M
  1290. Trackr_02 .DB $05,"BGM 2"- N! x. s7 Y8 s6 J0 U  A3 O4 {" c
  1291. Trackr_03 .DB $05,"BGM 3"
    # q  g+ L# _( ]  C% {& y7 q( k
  1292. Trackr_04 .DB $05,"BGM 4"
    ( t/ t; G& ~& ^' ]2 S
  1293. Trackr_05 .DB $05,"BGM 5"
    $ m  e$ p1 h- R1 V+ Z
  1294. Trackr_06 .DB $05,"BGM 6"
    - C# x& F; d  A
  1295. Trackr_07 .DB $05,"BGM 7"
    + {5 }3 A$ S' C* l+ B* _& u, j5 d
  1296. Trackr_08 .DB $05,"GREAT"
    % R! w; N# ]5 k2 j3 @
  1297. Trackr_09 .DB $08,"BOSS BOM"
    $ ]! y# H' `4 L5 b" F
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    * Y- g: o  f) s$ n. \# Q& ]( A
  1299. Trackr_11 .DB $07,"P CLEAR"
    0 h% `9 Y- q. p% y' m; R! A
  1300. Trackr_12 .DB $07,"A CLEAR"* M. n. Y3 G' d! n7 C
  1301. Trackr_13 .DB $04,"OVER"
    ' w& y6 M4 Y5 ?
  1302. Trackr_14 .DB $06,"ENDING"
    7 U, M$ y$ t* @4 b3 w6 j+ l
  1303. Trackr_15 .DB $04,"SUTA"( v7 `0 t$ H$ O
  1304. Trackr_16 .DB $07,"THUNDER"
    & |3 `; `( y# o. V
  1305. Trackr_17 .DB $04,"SHOT"
    / G' ~  q/ L& p" s- G4 C/ n
  1306. Trackr_18 .DB $05,"LASER"
    0 r7 b, i0 C3 X( N" p  h1 T
  1307. Trackr_19 .DB $06,"SPREAD"6 n* a+ Y8 u+ Y3 `& d* y+ j3 B( d3 V
  1308. Trackr_20 .DB $04,"FIRE"
    7 w7 [2 Z: g7 Z; d8 @5 K6 S
  1309. Trackr_21 .DB $06,"B SHOT"2 \$ ]( o9 C- Z
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ( I) ^* C* L  C3 T
  1311. Trackr_23 .DB $07,"HARETSU"
    0 O4 D: H7 g2 m9 @# U" K& @6 Q8 D! ~
  1312. Trackr_24 .DB $05,"T OUT"; w7 J, B/ Q3 h' F0 Z/ }9 c; z
  1313. Trackr_25 .DB $05,"Z OUT"6 [$ }, N6 e+ F8 E7 m, r+ N. ?
  1314. Trackr_26 .DB $05,"A OUT"
    4 i9 B( j+ |7 U/ w; x$ z- O
  1315. Trackr_27 .DB $04,"ROLL"! k1 q) @$ x: ~; ]
  1316. Trackr_28 .DB $06,"APPEAR", _5 f9 y0 e8 \2 ~
  1317. Trackr_29 .DB $05,"POWER"  N2 g0 j+ \  U5 H: o
  1318. Trackr_30 .DB $07,"BOKK BK"
      W. K5 A; H' Y$ j0 |. E& T6 J! a
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    . ~% Z  W* S% ^5 x/ f
  1320. Trackr_32 .DB $08,"BAKUHA 2"6 |+ H. G( a+ A8 g
  1321. Trackr_33 .DB $05,"ARUKU"
    # B7 g# q: F+ ?
  1322. Trackr_34 .DB $06,"JIWARE"9 W5 W2 s/ J, ~
  1323. Trackr_35 .DB $05,"SILEN"
    ( U6 V  s, y" W9 p
  1324. Trackr_36 .DB $05,"P 1UP"
    : ?$ ?( \: k6 [
  1325. Trackr_37 .DB $05,"P OUT"
    9 F/ a9 a1 P. L7 b" J8 J
  1326. Trackr_38 .DB $05,"B OUT"/ _8 y2 w& f& K- X6 a- o; H$ R: L5 v
  1327. Trackr_39 .DB $05,"PAUSE"6 Z. [& s' N" F6 V+ q+ y" b

  1328. # p" k+ [6 X+ A  R+ k7 ?% u- Y
  1329. .ENDIF2 |8 O6 o. o6 n/ y
  1330. . B# ^# v: i3 J/ ^7 _8 ], u
  1331. ;------------------------------7 C' @7 h, y0 d( ~: k& Y7 D  M3 `
  1332. Static_Text_Title_Data;静态文本数据2 ]) Z2 e4 {: N( {0 w. E' U. I
  1333. .DB 12
    # p. R% {" g5 y
  1334. .DB "SUPER CONTRA"! U1 _, U) I/ \, w5 V. `
  1335. Static_Text_Author_Data  o# a* ^! K' E4 S
  1336. .DB 238 ^) v- H6 z' [+ u& J- Y8 R" h
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    7 L) q5 f$ ^! u" T: t  ]7 _
  1338. Static_Text_Date_Data
    . r' L! l+ n% L1 \$ R  b5 e
  1339. .DB 10
    + A* c8 \; N( r( m& @/ A
  1340. .DB "2023.07.11"
    % L0 F$ M& y7 z6 W! d4 G( S8 Z! W2 G4 l
  1341. * T$ o! r6 y7 r
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    9 S, Y1 I$ ~) l9 V
  1343. .ORG RESET_ADDR
    & `# C1 X* Q9 {6 v# z! J' Z
  1344. $ b+ I" O# F8 R5 w% S' J

  1345. $ f- h) w' d" [& J& q. D
  1346. ;==================================================/ Q& \. J6 @* G3 `" j
  1347. ;切到主程序bank
    ; {5 O) R2 g; f1 c5 g
  1348. SwitchMainBank: f% U- R$ Q) Q
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK" t2 E7 E* E: h% }) @
  1350. JSR SwitchBank8000
    $ k4 @) k4 p* @
  1351. RTS
    ) D  t: y' _' p
  1352. 8 M9 K3 i! B8 O/ H5 e, b
  1353. ;==================================================! l* Y* n$ V0 w+ c& n8 k+ F
  1354. SwitchBank8000;切换bank到8000-9FFF
    $ o- f. \; _$ R( N0 P
  1355. PHA
    4 ?, F# P% ^9 B# m) I1 j
  1356. LDA #$06
    - b6 U( @& H7 Q$ @
  1357. STA MMC3_BANK_CTRL  X2 n4 |- Y, T$ _+ L" b8 W
  1358. PLA' b0 u3 K7 b  [' o; L7 B* `
  1359. STA MMC3_BANK_DATA
    ; O" E  y/ X+ v! `! L  O* i4 h' J/ [
  1360. RTS. o: U: y/ A1 O/ ?; f

  1361. * Z, @' R* g8 g
  1362. ;==================================================
    * V( A6 h$ ~) j/ G: E
  1363. SwitchBankA000;切换bank到A000-BFFF: s! f6 Y6 W/ U' j$ J& ?
  1364. PHA
    : x5 H  B3 |+ U; n" w( H  Y7 o
  1365. LDA #$07
    ; v" p1 X- O% }# j1 k7 s
  1366. STA MMC3_BANK_CTRL
    ' t! V4 Q$ I/ r( D; S
  1367. PLA
    ; _& O4 _8 q& y* |* {
  1368. STA MMC3_BANK_DATA0 M- r- ?" r0 k% f( u3 R: a5 u
  1369. RTS* T% D8 i3 r. }/ x+ C, g+ E  A

  1370. , i* {9 y# F3 H# M. |, e, T7 n
  1371. ;==================================================
    . ]4 N6 s; u" E# h( T) w. H
  1372. Sund_Bank_Init;音乐bamk初始化
    " C* `, j7 M& B6 B# r  d8 z
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK4 z- y  t- S! b9 Y* F7 B2 h# u5 s
  1374. STA Music_Bank_8000/ ~' K  r1 F5 R3 L
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    % P2 v" ^$ f7 s4 J3 a2 h
  1376. STA Music_Bank_A000( @/ z* J2 ]' o" Z9 T
  1377. RTS
    1 ^  D+ g) ^* g! B

  1378. $ q# F$ i4 `5 E! U- c: a7 m; ?% A
  1379. ;==================================================
    4 b1 b$ m9 E4 |$ E7 c6 c# v
  1380. Sund_Bank_Set;切换音乐bank
    " N0 `7 U9 X5 l3 Z3 P
  1381. LDA Music_Bank_8000
    0 s! o+ s6 F( k0 c: w
  1382. JSR SwitchBank8000
    6 V; G2 J2 `$ x. F
  1383. LDA Music_Bank_A000
    " ^- S- J* ?- }" h, y6 J( H
  1384. JSR SwitchBankA0001 s9 X& v9 P9 b6 @3 k2 j
  1385. RTS- Z! W( X, t7 M; j+ g; Z" l; Q

  1386. 0 w% v! Y; _* k6 F% F
  1387. ;==================================================3 \0 b5 L5 y6 H5 ?# ~3 S) Y9 _
  1388. Sound_Init;音乐初始化0 b; \/ `- F( a8 q
  1389. PHA
    ! h! J! Q0 m, O$ ?. r- E. D( {
  1390. JSR Sund_Bank_Set
    $ |$ I3 X) T8 v0 W' F4 d  w/ c
  1391. PLA
    ! i3 |6 y, q; r8 d" b3 Y8 x$ X3 W8 Z
  1392. JSR Music_Init_Addr& `5 {( X5 c# q# y: F" i6 S# l& M$ w
  1393. JSR SwitchMainBank
    7 ?3 W3 `/ I7 a( L1 V

  1394. 5 P( i6 a2 t" c$ p4 F
  1395. JSR Music_Bar_ReSet
    . X/ w  w6 C9 a- d6 j: c2 |4 Z
  1396. JSR Time_ReSet
    9 L2 i; H0 Q; d/ u) l8 [  W/ e! x! F
  1397. LDA #$00
    / r8 ?2 s% z6 m, _* T/ y
  1398. STA Music_State, q, `2 t( C6 {9 {3 m0 a
  1399. JSR Music_Stata_Show0 \2 O: ?1 y! k$ h
  1400. .IF Track_Name_Pos2 \# p' [- C" M7 ^, s: G- T
  1401. JSR Show_Track_Info; X- |. p# Y( J  {9 C9 O, E* [
  1402. .ENDIF
    % C7 s9 p' c7 Y$ f' ~2 |/ `
  1403. 2 c0 C, {* Y5 k) i
  1404. RTS0 C9 m' j8 k# c. S

  1405. % F9 m0 _' d5 {# c$ l/ ^  P! n
  1406. ;==================================================5 [& S! d. P3 B8 o0 d- \2 F- ~; J  Z
  1407. Sound_Play;音乐播放
    0 E* w+ k/ y; i4 r. V  Y) F5 d
  1408. PHA
    3 l8 j. ?" H: q9 h3 N- w
  1409. JSR Sund_Bank_Set
    9 A; a- f$ p5 ]( g
  1410. PLA+ [6 J# ?# A5 N$ K0 R; Q
  1411. LDA Music_State7 x4 y, V( s" D4 E% f5 B  M+ k
  1412. BNE Sound_Play_End
    : `) N, J$ H, E8 e5 j! }
  1413. JSR Music_Play_Addr
    8 D- [4 Q- M! m" M& s) V
  1414. Sound_Play_End
    1 ]& u; P% M$ s7 c+ B- I! G: m
  1415. JSR SwitchMainBank* L3 @* n2 f2 [3 N' K9 B# C3 n
  1416. RTS7 G% ?$ o8 r7 L( G$ I8 P  X

  1417. - o2 ]" ?& Z% i: a# l/ Z
  1418. ;==================================================
    % A3 g; b+ Y0 s; y* Z$ m
  1419. .IF Music_Reset_Addr
    ' a) {, w1 i( Y& }) b
  1420. Sound_Reset;音乐重设(如果有的话)9 Y3 Y* b/ a; u: t3 ?
  1421. JSR Sund_Bank_Set1 z" _: W' m  n
  1422. JSR Music_Reset_Addr
    , e4 k/ ]4 L9 z5 C1 R
  1423. JSR SwitchMainBank1 \3 N; Y4 V6 N) l# {& I1 K8 Z1 S' s
  1424. RTS# q& s& K. h4 M& R4 q+ r/ w4 K4 U
  1425. .ENDIF
    1 w% ]" }" I1 s6 V: I
  1426. " Y6 p, ?; G- B* Z' R0 S8 [1 Z% @
  1427. ;==================================================& ~/ B7 }- j, o: K$ g' L
  1428. MainLoop;死循环
    ' V1 r( p* V2 |8 J; `0 [# }6 u0 Y
  1429. JMP MainLoop
    6 J$ P, X: H/ h4 ~: p5 P

  1430. 1 ^% f$ ~8 U3 i" |4 H- q, W
  1431. ;==================================================: }2 c' x1 l" d) m  N4 ?$ d
  1432. NmiProgram;Nmi中断处理
    % y/ J, H; \" o1 y1 R. z; X
  1433. PHA( x1 A: \- M% N! C) W/ S
  1434. TXA* Y& z) g. J$ U
  1435. PHA: a7 O5 W! |0 k: E% g
  1436. TYA
    " s, l% K+ T9 c) W
  1437. PHA
    0 l0 q2 D4 c# V) u

  1438. 6 M6 w4 d9 S* Q& }4 X
  1439. LDA PPU_STATUS) f+ x& q9 p3 l$ \) @! S% ?
  1440. LDA #$00
    ( N: O" Y8 w/ A2 _( H
  1441. STA PPU_CTRL
    9 B) v; ]6 T$ W+ W/ q5 g6 d5 P

  1442. 4 S  G# I; s0 u
  1443. ;切换主程序bank7 Q- F' \2 E) b2 W9 _
  1444. JSR SwitchMainBank4 o& _, r0 E( q$ g' ~- f* K/ L
  1445. - \. N) O, I$ g2 _: i) P! \
  1446. ;NMI处理# V/ r8 o3 n2 O6 n# M7 R
  1447. JSR NmiProgramProcess
    ! G% n3 d& I4 J1 c: a7 U) h

  1448. + u( B/ z/ _3 u6 M  Z: A7 D
  1449. Nmi_Proc_End
    * e4 p% x, S1 d$ e& o; |5 }
  1450. PLA4 g* `+ t5 ?* j/ }
  1451. TAY
    , |7 H& z* }( ~0 E/ [% P3 L
  1452. PLA
    4 f  j0 d( H) y& o$ @
  1453. TAX7 Q& l3 ?) i! ~
  1454. PLA. [, o9 K! t/ @5 N

  1455. - }) ?- j8 G8 j% h
  1456. RTI* w% [8 `1 q+ L+ b) Q: K2 a# C

  1457. ! {1 i' X; v* L8 }
  1458. ;==================================================% V* X- G" q4 d- X
  1459. ResetProgram;重置中断处理6 \# W: m, X8 d2 b2 f4 C- s8 I% C
  1460. SEI, [% \# N. n& T. u& b/ y3 m: t
  1461. CLD
    ( G) I( m- {" ]% H6 O- v
  1462. LDA #$00  \) p" w5 x# Q$ s- n
  1463. STA PPU_CTRL
    5 R7 k1 E3 ^9 S3 o
  1464. STA PPU_MASK! l, a1 F; ^4 U* N
  1465. + H. @) h( ]2 l5 @  F' e- w
  1466. JSR SwitchMainBank- k, I, q) z$ A' n6 I9 _" t
  1467. JMP ProgramBegin
    ; v! ^2 W& ]! p& ]5 `
  1468. 1 O. g0 U  u1 i* K8 z7 Q$ ?: ]. i# s0 n
  1469. ;==================================================. @2 H: w$ @# ^( d8 _2 y
  1470. IrqProgram;Irq中断处理/ s& O- H# }7 U- ]7 K+ ]
  1471. RTI: G" Z, l( }( b4 m( P

  1472. 2 \6 k0 J& T/ F. x& c) V
  1473. .IF SOUND_BAR_SHOW_ENABLE" o, x  |- J. ]7 n# h; i- }$ L$ i+ |3 y
  1474. .ORG $FF80
    % E4 V/ v) Q6 j; n3 v. H4 i
  1475. STA $4000,X( Z, `( R" }3 ~3 Y2 K* U6 }
  1476. STA Sound_Bar + $00,X+ b1 J  A( X1 F! ~6 n9 G8 i
  1477. RTS: T, x( }! X* I
  1478. ' s! L% z* N0 |# U: m! I0 o
  1479. .ORG $FF88
    + w5 c. v) }: Z6 q# }+ W$ f
  1480. STA $4000,Y
    1 x5 W! A- g% X! A. J' M
  1481. STA Sound_Bar + $00,Y
    & @$ g. S8 |/ V% _" l0 u2 p* q/ @
  1482. RTS, g3 ]% C, V$ _3 t. L
  1483. : e8 v6 i% _: L$ D2 k
  1484. .ORG $FF90
      D7 \6 A5 m1 B& {8 ^6 R* T
  1485. STA $4004,X4 Y2 m2 J% Y5 H5 G
  1486. STA Sound_Bar + $04,X
    / Z: {. c- J  w6 W' [& y' R! u, x
  1487. RTS
    - o% A" @9 d8 a

  1488. " a! X- A$ U" R
  1489. .ORG $FF98& S1 ?' [8 ?5 d+ |: T' E1 P
  1490. STA $4004,Y4 _1 A/ K$ {" o4 y2 _1 `, }5 j
  1491. STA Sound_Bar + $04,Y. ^$ i2 n+ t: Q  U4 ]2 O0 H2 J
  1492. RTS
    : i8 ^, ?4 b& J# J

  1493. & ]  h6 G+ d$ n7 U
  1494. .ORG $FFA0
    % n5 C( q- l% J! L: ^
  1495. STA $4008,X" F  h0 c0 H+ [% r
  1496. STA Sound_Bar + $08,X
    & |$ V3 |5 U2 ^0 E$ n* p! Y! |/ r
  1497. RTS/ G0 X" }" ?6 H+ L' H
  1498. 5 e. f0 L4 i3 k& }
  1499. .ORG $FFA8
    7 B0 H4 s, d1 b# h* o* P
  1500. STA $4008,Y
    + X" _4 J% P9 x7 [' ^5 m
  1501. STA Sound_Bar + $08,Y7 M" @0 s5 d# U" z; P! v4 e9 e* i
  1502. RTS
    * {) Y) F: F, ~+ }8 `% M% x3 Q
  1503. 6 N, Q: [% O$ y" _% r. X
  1504. .ORG $FFB0& T5 x: H! y9 m6 r$ K! s
  1505. STA $400C,X9 a! g( y9 {% t* r8 u! p; p
  1506. STA Sound_Bar + $0C,X0 r' f. D0 f; W' D
  1507. RTS
    6 @2 d! u* z) M6 E  C
  1508. 9 w. G1 e  m4 x* R
  1509. .ORG $FFB8
    & {3 `: }) l% N: j0 F8 u6 k
  1510. STA $400C,Y" P7 A* i6 j% @) C4 D/ F5 K
  1511. STA Sound_Bar + $0C,Y' j2 i; r4 s5 l, K: |$ I
  1512. RTS
    # h3 W, ?3 ^5 u$ T1 J
  1513. 6 G0 U1 T$ o. `% Z* d4 B: C
  1514. .ORG $FFC0
    ! h4 b' z" {) g) ]' n
  1515. STA $4000* ]0 U; Q" h2 G4 L. z
  1516. STA Sound_Bar + $00" ?  u5 C, f& a' |0 }  C
  1517. RTS
    2 j9 Z3 g7 T1 N3 k

  1518. # G( Y. v# Z& M! M5 F" o' G+ f6 A
  1519. .ORG $FFC8. x( w: c, |' f* @% R
  1520. STA $4004
    8 W  G* u' z( X# ?% U6 u# P: c5 R
  1521. STA Sound_Bar + $048 T6 L' ~! n- o1 i
  1522. RTS
    3 o$ H& _* i$ K- X9 R) f
  1523. ; m3 Y) n" ~" D, \
  1524. .ORG $FFD0
    " v& r3 ]! e: F$ H+ f% B" k
  1525. STA $4008
    3 ~! h: T8 O/ C* m; p0 z, r- T9 ~4 H1 y
  1526. STA Sound_Bar + $08! c* D1 E; Q; j/ ^# }/ H
  1527. RTS
    : e; L1 ^! R6 c9 l, B

  1528. ' v- ^/ w+ Q7 i( U. V( e+ B
  1529. .ORG $FFD8$ i9 n* |( b/ _6 J. Z3 }" c
  1530. STA $400C
    ; ?2 z0 ?' P+ D/ \
  1531. STA Sound_Bar + $0C1 v- [2 |0 C; k8 [
  1532. RTS
    2 E* C! [' O$ ^

  1533. ; j7 V1 Z1 H9 ]% _+ k5 `; W
  1534. .ENDIF3 q) F7 m9 g! [1 ]: C

  1535. % P+ `, G( Z" b* h5 ]$ s/ A" T5 f
  1536. .ORG $FFFA2 _4 n3 X4 t2 ?. r4 \; W; L1 A" u
  1537. .WORD NmiProgram
    . m* q9 r' V4 l- k# j/ E$ `5 x
  1538. .WORD ResetProgram9 O" x8 t5 o0 x" z5 n* S- j1 ]2 W
  1539. .WORD IrqProgram
复制代码

; f. {, N9 U; a4 |  x2 F7 w
7 H# w0 I( `9 x0 @% @1 n
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1229 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3223 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-6 00:54

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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