EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
; S6 n. i1 l5 ^' G$ I1 f  G: t: F* I$ M' c2 J( O
1.魂斗罗
+ F- E! S' o  `6 ^+ z7 ?# \2.超级魂斗罗
+ ]! ~7 F& l- f3.赤影战士
6 c. U5 M( [/ i4 a4.忍者龙剑传26 t$ ^+ H# l* L( Z- i% U  q2 ]0 \" h
" c/ F9 {- [+ P$ M- F! f3 X

) G( m' S1 j3 h* |( W8 [6 B6 B
6 f$ Y: b& w7 |) H) g. M
+ c+ ^; Y3 O4 |, c源码:, v' C8 }$ n# J) [: D2 P' g
  1. ;[FC音乐][播放器模板]5 P& u" H6 J+ x' \" I, K
  2. ;FlameCyclone 20230710
    , R: ^+ Z2 a9 j* t1 t4 h) f

  3. 1 |# N! q/ i: \6 F7 c  s% N
  4. ;文件头% A8 m6 `' O* o. }' r
  5. ;======================================================================7 a5 t/ B! Z* D% q. S
  6. .INESPRG 4                                              ;16KB PRG 数量
    3 p( {5 J4 l4 ^. ^) d
  7. .INESCHR 0                                               ;8KB CHR 数量
    ( d( q* }7 K: L; k
  8. .INESMAP 4                                                   ;mapper 4% g2 t9 o8 T; u
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    4 Z0 p* A, r9 x4 T

  10. ' f( L! N4 H: B' P; b
  11. ;==================================================
    3 I, |. E$ A; q% D4 F
  12. SOUND_BAR_SHOW_ENABLE       = 1* ~, c7 Y- D# [) P( W# d1 J: B
  13. ;==================================================7 x( }+ D) l  [( i" }% `* t
  14. BANK_DATA_MASK              = $076 A6 U, Y5 B/ w+ W" u
  15. ;==================================================. p. `( B6 m# g$ Z& n4 X5 w
  16. SOUND_DATA_BANK_0           = $00
    5 w! n! T, m9 N: k; i- ?# _3 C" l
  17. SOUND_DATA_BANK_1           = $013 [! J* A& E1 G- b( ^3 [) W+ P2 v
  18. SOUND_DATA_BANK_2           = $02
    7 c/ |6 x8 q/ G
  19. SOUND_DATA_BANK_C000        = $06
    & g' \0 O. ~6 [: r7 ~
  20. . a! C' h  j, Z
  21. ;-------------------------------------------------) d# ^- j$ g4 h7 T
  22. CHR_DATA_BANK               = $04
    1 t2 Z7 q6 C! `: j
  23. CHR_DATA_ADDR               = $A000
    / w+ b$ w: Q3 Y5 g* ?
  24. ;-------------------------------------------------; S( V) K# j. p3 x' {- C; h. U0 c7 B; S
  25. PROGRAM_BANK                = $05" _, D1 J  L. \- o8 |( {
  26. PROGRAM_ADDR                = $8000
    . ]* M1 ?2 B9 P# v3 ~6 E9 K
  27. ;-------------------------------------------------8 L. v0 W8 \- x' z  v  {# K
  28. RESET_BANK                  = $07, t8 k- p/ d  Z9 M
  29. RESET_ADDR                  = $FE009 J- x! T4 _1 U6 q
  30. ;==================================================
    ; Z* k1 g7 T4 |' i& \2 J$ D5 L& o
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址* s' c* j8 A* s
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ( _8 l: ]% f9 _3 _/ D* V# b/ F
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址1 f# X' m( g4 h5 B+ b& i1 J
  34. ;==================================================; }' F; W. N9 [3 w
  35. Music_Song_Total            = 039  ;全部曲目总数
    4 q) o! a( r/ }* d
  36. Music_Start_Song            = 007  ;初始播放曲目1 O& Z: M" `  G6 o# v; n5 \" c
  37. ;==================================================
    - D5 u8 C+ Q% ^! w6 B
  38.   I6 E+ }. n7 k- E5 B# u
  39. ;==================================================
      z) e' k2 {2 e" q
  40. Title_Text_Pos      = $210D ;标题文本位置) ~, H% n' z3 R# [
  41. Author_Info_Pos     = $2284 ;作者文本位置
    ! s- _, J: q9 S/ K% Y2 |7 z. }
  42. Date_Info_Pos       = $22CB ;日期文本位置- ^' U5 G1 E) N9 h" v& q
  43. ;------------------------------* a7 B+ Q+ s( c
  44. ;------------------------------
    6 W" y" A' }' t
  45. .IF SOUND_BAR_SHOW_ENABLE/ W2 i; n  d# |4 L
  46. Play_Index_Pos      = $21B3 ;当前曲目位置- |2 T1 g9 Z5 P; y% i; C' c5 U
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    5 b* Z8 o& @) w8 c7 T0 z% d
  48. Play_State_Pos      = $2233 ;播放状态位置- g3 [+ v( J8 b1 u  ?
  49. .ELSE8 g/ {- _  E* n* t* u; b" v/ `
  50. ! ]2 d$ j9 b, `: Z) E
  51. .IF Music_Song_Total > 99
    7 M/ k! }- N% j. r6 R7 U# g
  52. Play_Index_Pos      = $21AC ;当前曲目位置/ L$ Z6 ?9 A5 H; {3 o- y" H
  53. .ELSE
    3 X2 R, k# }2 @: E& l! O2 M6 s+ j. H

  54. + D+ P7 u+ g; n$ q# z5 q
  55. .IF Music_Song_Total > 9
    $ \& P9 h# J. ?9 h1 m) P
  56. Play_Index_Pos      = $21AD ;当前曲目位置& W- @& F4 ]8 t+ R7 x. r% D" B
  57. .ELSE5 ~4 K( K" z: E
  58. Play_Index_Pos      = $21AE ;当前曲目位置. r/ }0 G, ~$ ]; S3 w; ~6 E' H
  59. .ENDIF
    ; M7 ]8 Q. P9 G( W  e# s
  60. . K  h4 ]$ l1 E
  61. .ENDIF
    8 l3 r7 {- ~$ T& H' W* H
  62. 1 p7 L8 q: P: R) W& @. K6 F

  63. . }: ]0 S5 V- y
  64. Play_Time_Pos       = $21EC ;播放时间位置
    " K+ ~3 b# J3 n, c0 _
  65. Play_State_Pos      = $222C ;播放状态位置; b- p1 C: a- F% C1 M9 _. C2 g
  66. .ENDIF# {4 O7 o) u6 P. G
  67. ;------------------------------0 a2 V. x; {  N5 ^$ }4 N8 A
  68. Track_Name_Pos      = $216B ;曲目文本位置
    - Y; H9 d8 h# X. E- n( w  |8 o# _
  69. Sound_Track_Pos     = $21A5 ;声道文本位置  K6 l+ P; w" C/ H" s
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置+ {4 g; q' K' t$ w3 F
  71. ;==================================================
    0 ?$ `7 ~2 x# M
  72. Scroll_X = $00
    * a9 j' F' f1 Y
  73. Scroll_Y = $06
    ) {: e# T3 h7 Q1 f% p
  74. ;==================================================
      S5 V$ L# g3 f1 b1 H" f
  75. RAM_Cln_1       = $0100
      t9 j3 Y1 D( Z! x0 |0 h! z
  76. RAM_Cln_1_Size  = $80
    - b5 i$ u0 C# e6 X" d6 K
  77. RAM_Cln_2       = $00E0% {5 W2 |6 h8 k8 i/ r
  78. RAM_Cln_2_Size  = $20! A/ m$ d/ o; C* Z, ?5 N. P9 c+ H8 T% S  o
  79. RAM_Cln_3       = $00E0
    2 V- i- z( Q/ M% `
  80. RAM_Cln_3_Size  = $20
    / T0 m2 Z& L; h$ q
  81. 0 s* A7 i* A; ]' u5 }3 k8 J. N
  82. ;==================================================
    ! |) O6 J* p& d" N
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器7 e7 M4 H7 `, w5 y
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    5 r) h6 N4 K& X6 G- }
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位4 k* L; y+ M7 u5 \. D7 q: G
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    6 K' T: p) ?- ~, l: e6 n& a
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加16 l8 B: Q# T! e; @* h
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 " C) W2 w& P$ {" D' m! N, i3 N$ |
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    9 p; G+ {! l! d: ?
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    1 i& l  W3 t4 V  z
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存; Z& s& Y' I* i! M$ |7 ]
  92. APU_STATUS              =   $4015   ;声音通道切换
    " z3 Q( [$ J( H. c. F- c
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通$ a, S1 l9 c/ H: o, L  ], q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通, ^, U/ ]5 r; Y6 N& y, B" h, U
  95. ;==================================================
    ' b/ @$ r/ j  d
  96. MMC3_BANK_CTRL          =   $8000. w$ e% {+ {/ e9 g8 Y/ L7 z
  97. MMC3_BANK_DATA          =   $8001
    ' Y9 s9 E  S, s* G+ t+ D
  98. MMC3_MIRRORING          =   $A000
    . n6 z7 _6 q  x8 M6 y. ?3 D
  99. MMC3_PRG_RAM_PROTECT    =   $A0016 D9 V8 i8 c  F/ H9 U: P
  100. MMC3_IRQ_LATCH          =   $C000
    + V1 _2 o: I5 I' o9 m
  101. MMC3_IRQ_RELOAD         =   $C001
    2 H% _: s' t" H. H
  102. MMC3_IRQ_DISABLE        =   $E000
    - g: h. U1 ^" {' j1 X! G5 R- ^/ h: q
  103. MMC3_IRQ_ENABLE         =   $E001. _' d: {( V4 [( Q8 B! r

  104. ( Q) A' R. S7 A: x
  105. ;音乐数据块
    6 w! |% M$ y  u* l2 e
  106. 6 Y$ j+ G. }) e- F4 \, C, n4 _$ C
  107. ;======================================================================
    ! B5 A/ s. D( r/ p  O2 |
  108. .IF SOUND_BAR_SHOW_ENABLE
    # v) v* ]1 A% O8 m! q3 K  e' U2 M
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    : m, {" z& `- `/ `  b: D0 v8 l
  110. .INCBIN "sound_bank_bar/music_data_0.bank"* o& k2 p+ ?/ L# Z9 L- ^6 l2 y, T

  111. - b9 _9 A( D1 F
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK& t# t0 f5 W; d1 G/ ]7 I+ C
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    * u! y  z7 E+ F2 D, u
  114. . w3 D& v7 s: I
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    2 b8 Q7 u" }: p& ~/ W; {& ?
  116. .INCBIN "sound_bank_bar/music_data_2.bank", k6 X+ k. s7 @# E# w6 s
  117. ; f( @* {: W" S, {
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK* l& L: M1 F1 H
  119. .INCBIN "sound_bank_bar/music_data_3.bank"$ }+ R' R7 D0 ]

  120. / X% U3 v. C/ n& }
  121. .ELSE
    9 g$ b* }7 W& [' a" v7 h
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    2 @+ Q  h$ t; _* h0 b, @
  123. .INCBIN "sound_bank/music_data_0.bank"
    * F% {: i, K5 Z$ {7 ~$ u
  124. / c: M* f- i. v% z* _2 n4 y
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    6 U, N& J3 l; j6 k4 w$ X' r
  126. .INCBIN "sound_bank/music_data_1.bank"5 @( L& j1 r2 g: @5 D- v! m! X1 X
  127. / c/ ?- m* s( h4 c& W+ v- X& _) v  {( y
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    , g1 h/ e8 J( ^9 P5 e
  129. .INCBIN "sound_bank/music_data_2.bank"% _& u  B- l* N; O" v& E

  130. ; F/ i# V* b, _4 r8 e3 a+ I! Z
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    & Y8 I, J% @$ R" {* V
  132. .INCBIN "sound_bank/music_data_3.bank"/ H9 Y9 v' J8 x# B( l+ F
  133. .ENDIF" p% M! L6 ~3 }# H

  134. % O' q9 ?" q# i7 ?6 X
  135. ;CHR图形数据
    1 Z5 Y9 N5 Q' n5 t" q; u* j7 m8 s# X
  136. ;======================================================================
    5 a  d- O. S6 W% P( N2 C; M( d
  137. .BANK CHR_DATA_BANK
    , B! h! e' ^- ?1 t' ~( m1 I1 n
  138. .INCBIN "chr_bank/chr_data.chr") n3 N. J  n. [" a7 {7 {

  139. ; ~1 @2 U5 h8 p. a( m. i
  140. ;==================================================7 Q% o' c; |" n# H0 U
  141. PPU_Addr        = $0300
    : `2 s, q8 D/ _7 C  O
  142. Palette_Addr    = $03C0
    ) W1 U1 A. J1 L4 I, l, U- U
  143. Sound_Bar       = PPU_Addr+$E0
    1 P% e* I2 C9 ^1 h; D
  144. ;==================================================& ^( t7 ?7 V& S6 S
  145. Palette_Update_Addr     = Palette_Addr+$0D9 C) K& w) U: v% e% b$ v& \  a
  146. Palette_Update_Max      = $2C
    ) R7 H( V% x! s
  147. Palette_Update_Min      = $21/ {! B  @/ U0 H: \5 i" G7 c
  148. Palette_Update_Interval = 604 ?& K" d% U+ o, J& N& F) P6 J
  149. ;==================================================2 v. y  \% d* ^
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    / l# O7 y5 z- ?& H4 [
  151. Screen_State        = Sound_Bar_Cnt+$01# a( E/ l3 l* I% t/ H% F
  152. PPU_Cur             = Sound_Bar_Cnt+$02! T1 e/ L! M3 k+ X) V% ~3 D3 V. w
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    1 A- G! v' X7 t; D% F4 P
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    - e: T& m4 P' Y6 m. \: @
  155. ;==================================================3 ^& F; e& n  z
  156. Data_L              = $70% B' m$ l1 J& ~
  157. Data_H              = Data_L + $01
    $ y% Z; G: F. k
  158. Data_Cnt            = Data_L + $02
    " Y0 y: a6 H6 s' T
  159. Data_Buf            = Data_L + $033 _6 c0 @6 ]7 ^* O5 q) O
  160. Time_Wait_Cnt       = Data_L + $04
    % s/ g, J5 i+ Q2 D
  161. Palette_Wait_Cnt    = Data_L + $05& i! p# x) {/ {2 V( Y5 g% z
  162. Palette_Update_Flag = Data_L + $06
    ; T( f* z0 b& R8 c4 x
  163. Show_Track_Name     = Data_L + $07
    - n- W( q; e/ A- E3 F4 K4 X
  164. ;==================================================
    % _; x3 F) H* S0 A+ p6 A, |6 q
  165. Key_Keep            = Show_Track_Name + 1
    1 L. J+ {, |. t6 X4 t& O
  166. Key_Once            = Key_Keep+$01
    * z& P" O$ Z1 d( W3 ~) m1 g$ u
  167. Key_Kemp            = Key_Keep+$02  d# s. s0 O6 u* y- H2 G2 B0 Y& L
  168. Key_Temp            = Key_Keep+$03
    , G- Z* t; j7 R( e3 V/ @" o
  169. Key_Getv            = Key_Keep+$04
    0 w. d0 L$ r+ J0 m5 D4 n
  170. ;==================================================+ d4 Q# R- y" m  W5 }
  171. Music_Cur           = Key_Getv+$01
    / T: |3 X# B% h6 |6 f" d
  172. Music_Last          = Music_Cur+$01
    & E* ]0 ]+ _  P% C0 L
  173. Music_State         = Music_Cur+$02
    8 v$ t8 X( o' v0 j4 p$ N
  174. ;==================================================
    4 Y9 e0 X- }% a0 H; X) |' \- F
  175. HEX_Data            = Music_State+$01
    $ W: g0 C" {5 Z! h
  176. DEC_H               = HEX_Data+$01
    : O, K; R% ~. W' L& q6 ?. D% D+ \
  177. DEC_T               = HEX_Data+$02
    , B5 _, F1 q5 Z- ~9 H7 v+ d
  178. DEC_L               = HEX_Data+$03) q- ]2 B6 f) Y+ f7 M2 u
  179. ;==================================================
    9 W- `5 l6 |) h" b6 \, v) g
  180. Time_S              = DEC_L+$01
    , S5 y: T/ q6 d& w& C2 \" M* [
  181. Time_M              = Time_S+$01
    ! n* u! ?# t" x2 \
  182. Time_H              = Time_S+$02- V" \5 c  C. `! e4 W- |6 P
  183. Time_Cnt            = Time_S+$03* z/ F  U/ T; M) Z

  184. ! E7 a: v  J; v2 a
  185. ;==================================================0 Y3 `1 \$ d6 w; q1 T
  186. Music_Bank_8000 = Time_Cnt + 1
    " J/ t8 |0 `& ^0 e5 G
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    , [) G1 c6 L0 \4 R
  188. ;==================================================6 ?6 K1 F( Y1 r

  189. 0 M$ G5 H% t& C7 Y
  190. ;======================================================================
    % S' t$ n0 X( ?1 i% N0 O# ~  t$ p
  191. .BANK PROGRAM_BANK6 l3 b' C$ [' T0 ~0 G. }
  192. .ORG PROGRAM_ADDR/ r7 w- T, ~* V

  193. ! p$ z9 m( L, F  y+ K, |
  194. ;==================================================% `0 H/ B" b( v* W1 ]7 A
  195. NmiProgramProcess;NMI中断程序处理/ F% `# D: i& x! e) f
  196. ;处理PPU图像* q7 P4 H+ G- P% ~4 |8 g2 t7 z
  197. JSR PPU_Proc
    7 m8 {! H$ L8 D& ?2 A0 ~( M

  198. 3 H, U4 L+ c' E0 A
  199. ;启用NMI中断" q- c* J# W# U, ^7 s
  200. LDA #$80* X" R" Q' |/ V8 R6 h, g# K
  201. STA PPU_CTRL# L4 X; \: g; U4 J% a
  202. # v3 J; U& \# Q' o1 c+ q
  203. ;更新调色板
    # L0 R* q6 ]) D( d
  204. JSR Update_Palette_Data
    $ f4 q0 [$ v- i2 T# p0 C

  205. / W% f. W4 R& S( u( X
  206. ;显示时间(缓冲)
    ! Y3 s5 Y) H) t1 Q- P- ?1 N# K& m
  207. JSR Time_Show
    ) f9 u, m& S" @& c  V* {# O

  208. $ l8 m! [* I0 B1 H" S
  209. ;播放计时
    6 M( G& b5 V$ D2 ?
  210. JSR Time_Count
    ( M$ M! O: Q; e" p) R" L
  211. 4 T3 r7 w0 @7 E. B' n3 J6 g
  212. ;播放声音+ K/ B% C2 \1 ~- Y) _; `
  213. JSR Sound_Play
    + L1 b& L6 d4 z" M
  214. & \( t: }4 P( r$ o5 O( J2 Z3 v
  215. ;切换音乐(手柄触发)
    ( p4 z( ?5 }$ c9 L
  216. JSR Music_Switch
    8 S6 O# e- z/ v4 b6 y, c5 s+ F6 ?: S( o
  217. + |5 k% F9 O5 K- G3 Q* l
  218. ;音乐显示(缓冲)* @! m4 n0 u, X9 V& B  i1 S
  219. .IF SOUND_BAR_SHOW_ENABLE
    - p0 t2 G* g1 z
  220. JSR Music_Vision; V% d" ^- v% A* b
  221. .ENDIF
    . H; b9 G$ w6 m7 Y% R

  222. / ^9 X" Z. U$ X
  223. LDA Time_Wait_Cnt: k( v/ S. m! Q2 Y$ y: n- S
  224. BEQ NmiProgramProcessEnd
    2 C, D" Z9 O( Q% ]
  225. DEC Time_Wait_Cnt
    2 f9 C# W( `% t! O% w) T
  226. NmiProgramProcessEnd
    9 `9 r0 j* K3 o
  227. RTS
    5 L9 j( `! p9 Y1 i4 b* m+ |0 h
  228. 4 G$ @! h/ }% Z" y
  229. ;==================================================
    . u& N/ p6 r$ y. ?5 B8 y# ?
  230. ProgramBegin;主程序, B4 O7 \# w  A1 A. p
  231. LDA #$00
    2 T' ~% G- e* C' y/ g5 c+ G  H5 m
  232. STA PPU_CTRL* D# s0 z# Y/ H( l
  233. STA PPU_STATUS
    ; D# r( q* t) l5 b7 }9 }) p; S
  234. STA PPU_MASK
    & \9 k" N& Y- }2 P* M
  235. STA APU_STATUS, ]8 O2 y3 d" W* `) Z( Q. A
  236. STA PPU_SCROLL
    0 e- f3 Z, o6 o
  237. STA PPU_SCROLL/ e' ~; }, b) ~0 |4 e
  238. LDA #$C0
    0 J% y, `, v5 b& Q2 @* N0 t9 o
  239. STA JOY2_FRAME$ ~: _6 M1 W! U5 s# |" `6 H3 {
  240. % I2 S& |3 q& b# |( C
  241. LDX #$FF; s' s# b  ^: z- S
  242. TXS
    4 e' t& o7 q) M
  243. LDA #$00
    ; i' h: E- m, M! |
  244. STA PPU_CTRL2 B  S! v3 P4 u, R7 n& z
  245. STA PPU_MASK0 m- P( a) g- N' C; v
  246. STA MMC3_IRQ_DISABLE
    . Y% M2 Z( R! L! K

  247. % C0 Q+ _: {" \
  248. ;==============================# E; ^* \4 u& R1 @7 W
  249. ;调色板清空
    ' @* U; U, ]4 y' \
  250. LDA #$3F
    0 N5 V* L. j; }# s$ E# S" J  N$ @
  251. STA PPU_ADDRESS+ ^4 ~2 T- c$ f0 j% }% y
  252. LDA #$00) f5 A" m! R0 X
  253. STA PPU_ADDRESS' y0 j2 W9 y- K7 e( ?1 R
  254. LDA #$0F" s" A. n0 ~2 Q* s
  255. Palette_Clear
    " q* l& L  H5 E4 ?; i/ o
  256. STA PPU_DATA" d9 W' G* I" @7 |2 I6 @! f
  257. INX
    & F( c0 T2 r: J& p) M0 Q
  258. CPX #$20
    / h) z! |2 d  }0 }
  259. BCC Palette_Clear+ r5 J4 d1 q+ E$ h# P' \, c/ v2 w
  260. LDA #$00
    + c5 T4 Z; ]2 g7 a9 P' T
  261. STA APU_STATUS
    % Y" l/ n- P' B' T* ?7 U; o
  262. ;==============================" }* u3 f2 c$ A, G3 M
  263. ;初始化背景调色板
    4 _  X* k( B; D4 {! c/ }: @
  264. JSR Set_Palette_Color" y! [: Z2 O. a; x7 H) H4 f1 J6 y
  265. JSR Set_NameTable_Attributes
    ! u  V) f" A, F. b( t: Y5 V

  266. " F3 U$ A1 ~3 O& O' K: B/ D4 E. w
  267. ;==============================
    + q& J  h$ p! \& a0 i
  268. ;RAM初始化
    # P! u9 J1 \8 s
  269. RAM_Clear_All  K/ }( A! w2 I- v4 k
  270. LDX #$00
    2 x- Q; F3 k3 t9 J( l5 i# ?
  271. LDA #$00" e( @3 C; Y" @+ f- X2 S- B
  272. RAM_Clear_All_Start
    ' h; P+ [* ], a1 o! `/ P' @
  273. STA $00,X( w4 c0 ^, K1 N. n: N
  274. STA $0100,X1 U5 U& I9 o- E, A; u; R
  275. STA $0200,X
    ! U) R% ?: _7 K- W$ L- F
  276. STA $0300,X" g+ z6 m! P2 ~4 ]- d7 l# q: @5 F
  277. STA $0400,X$ y8 M+ V& E0 I+ L7 N1 ~
  278. STA $0500,X
    ' @6 d: g6 ?* a* W% t0 h
  279. STA $0600,X
    , Y" ?6 J) @. M1 s# n! x8 m
  280. STA $0700,X2 ]( M5 N- {  K3 o9 G2 j3 B- ^
  281. INX
    / a# Q5 W0 h/ X# |+ D
  282. BNE RAM_Clear_All_Start
    - [9 v  L- t. w- W
  283. 9 K+ q: _1 y. ?9 b4 J& k2 o) p3 P
  284. JSR VramInit
    8 ]5 O( q6 s% i. C- N  Y, U5 [9 I
  285. JSR Init_Palette_Addr5 p. F- b% N; h% c2 z; L

  286. * n" A; ~: P" E1 |0 N' ^, x
  287. .IF Music_Reset_Addr
      \% s. G& B$ n5 C5 L
  288. JSR Sound_Reset! J% O: b/ @) [2 J
  289. .Endif
    4 g2 T9 s: y9 Z9 E5 S8 @: a4 q
  290. 1 @& v! m/ l) h. Z
  291. LDA #Music_Start_Song-$01. B3 w% t9 v# O" o# {: @
  292. STA Music_Cur4 H/ n5 ^6 u9 N& B9 e8 \4 `
  293. 8 y5 [' Z# a- e
  294. JSR Show_Music_Text% L0 U( k( t* \" y$ i% [% p0 R
  295. 2 S7 y/ T) k2 [# l8 J% @
  296. .IF SOUND_BAR_SHOW_ENABLE" S; b' d( l  |3 M  Z, `8 w
  297. JSR Sound_Bar_Text_Set
    - ^2 D% F1 N! i
  298. .ENDIF
    - ^: X4 S+ I9 h4 h

  299. 0 B! R' Q. K: i2 Q
  300. .IF Track_Name_Pos0 r4 D& [) ^" o9 U2 b
  301. JSR Show_Track_Info7 z5 J1 L' f) s
  302. .ENDIF/ G: y  v0 f, Y& J) o# ^
  303. 2 R# l+ ~3 o4 N, _1 X
  304. JSR PPU_Proc
    . c, U- _5 k4 A+ m% i- K

  305. 3 H+ T+ r3 l* h9 Y
  306. LDA #$0E
    ! J9 @/ ~8 K( u) r
  307. STA Screen_State
    & K3 S) s: a/ Z# b& g
  308. # b, B/ \8 o2 w/ u4 @8 T" s
  309. JSR Sund_Bank_Init
    ) v2 E$ L# d- K8 C# ]

  310. 9 f4 q4 b& n6 `
  311. JSR Music_Show
    % n: z4 a$ A4 q6 P; ^& G& M5 N
  312. JSR Time_Show  |5 V0 j5 U, F# z
  313. JSR Music_Stata_Show: b5 l2 Y4 i6 [6 z& ^
  314. JSR Time_Delay( F! X- K6 K9 G3 u
  315. 2 v0 N% ~; Y* ~5 Q- u

  316. 1 B8 E. T  ^7 Z5 p* F8 g
  317. LDA #$80# B+ P9 o) k* A
  318. STA PPU_CTRL
    & B. w" k1 Y# e, a6 G
  319. - D3 X3 ^( J0 [* _9 y0 z  q. ?8 @
  320. LDA #$202 H9 t; w4 Z; I) J' H1 b! y, o
  321. STA Time_Wait_Cnt
    ! \, T: p3 d( E$ @# ?) C

  322. ; F' G8 F+ g, _4 U1 y4 B0 k9 T, D
  323. Wait_Time_Over
    $ T# @& U. s* b5 e
  324. LDA Time_Wait_Cnt) J( |8 w3 k1 s# K# o
  325. BNE Wait_Time_Over  j/ b5 F6 x" ^- e, n% i4 {, E9 x1 h
  326. 6 Q3 ^" P+ ^9 X: L+ l) q
  327. LDA #$1F
    & Q  Y) F, u0 b
  328. STA APU_STATUS
    & Z4 R  Q0 U+ M0 |
  329. LDA Music_Cur
    # G. f# H0 M  [! X% i' B
  330. JSR Sound_Init5 q* K2 Q2 ?- P3 d; `# U8 u6 ~
  331. + F! G* q' D9 E+ |, X7 x0 R3 o
  332. JMP MainLoop
    ( b( f0 u. T& M4 J( r& Y! T7 J( D

  333. ) ~( ?6 u; w. V7 _; n. i
  334. ;==============================
    # y& {: y1 U, J$ b
  335. Time_Delay;延时等待
    4 {# J% O" _% i' n7 A2 k
  336. LDA PPU_STATUS2 @3 [; p# d: m( t* @, P4 o
  337. BPL Time_Delay
    . f8 [# C5 o1 I* Q- r+ C7 S
  338. RTS( @9 K6 ]( `  r+ |, |/ n7 U
  339. - \2 A! O: c& |9 v, \# t
  340. ;==============================7 _# w5 i; X* p4 v
  341. VramInit;初始化图形内存
    0 P' h  B7 L" ?6 q5 {+ j5 W
  342. LDA #CHR_DATA_BANK
    3 h% A  C* ?8 y: X
  343. JSR SwitchBankA000
    ! b0 h8 j0 X, ]
  344. LDA #LOW(CHR_DATA_ADDR)  O  W6 |. w; Y" E. ]! I+ f
  345. STA <Data_L; X& r  k1 Q4 K
  346. LDA #HIGH(CHR_DATA_ADDR)4 b/ _7 [3 h$ f; r3 o4 E$ a
  347. STA <Data_H9 N7 {  n. V5 J; s0 R
  348. LDY #$00
    : |9 _& N) V7 ~
  349. LDX #$20$ F% k# P  p$ E5 j( I
  350. LDA #$00
    7 A1 @. x# L( s. x' c& T2 P
  351. STA PPU_ADDRESS5 i; s) a. `3 j5 O) t2 _' e
  352. STA PPU_ADDRESS) F0 E( ?& l+ H" |* e, L- J
  353. VramInitWrite
    , }8 _$ H( u! ^) f2 Y6 t
  354. LDA [Data_L],Y0 B* U; I$ E6 ]# f! D( }" D5 h$ m
  355. STA PPU_DATA
    9 c8 ~# g  S5 E/ Y; v& S
  356. INY
      P2 W$ J; X2 q
  357. BNE VramInitWrite
    & A. f2 I  ^  u6 i& W6 L# M
  358. INC Data_H9 E" p% C2 Z) Y6 ?/ Q
  359. DEX
    1 n+ Z9 U+ E4 V7 C) O
  360. BNE VramInitWrite4 y0 t$ P+ W, W& w7 z. v; C
  361. RTS& G+ }2 D" J4 x/ s# K, D

  362. : M/ }& U& M8 l# ?# S# _# n; a! a
  363. ;==============================
    . D/ N: ?% P- s
  364. RAM_Clear;RAM清除
    " [' V3 Q9 V5 X! X6 I6 A
  365. LDX #$00
      M6 [2 Q( r+ u4 Q0 a) o6 E
  366. LDA #$00% u% ?8 z7 F0 f, |$ d( i
  367. RAM_Clear_1& u" m/ }; t/ d. P! J
  368. STA RAM_Cln_1,X* H- l" N7 J9 W2 }1 G  K0 b
  369. INX
    2 D" |& ^) l6 }
  370. CPX #RAM_Cln_1_Size. @& I! |: a) F2 f. r% _4 V
  371. BNE RAM_Clear_1. ~# c) H) [5 n5 R' n+ g
  372. LDX #$00
    4 ~4 V9 T, w/ g: H
  373. RAM_Clear_2
    2 }" j9 i6 `' y  h
  374. STA RAM_Cln_2,X
    ) j4 x( ~5 i; u$ I* X" N
  375. INX
    3 {$ H0 s- g' L# `
  376. CPX #RAM_Cln_2_Size
    2 ^  E7 ^+ c# F' D6 c7 a% C
  377. BNE RAM_Clear_2
    3 [2 U6 ^8 b! ^, q7 |1 m1 ]" t+ F5 s
  378. LDX #$00
    ; m7 \' a, {, Y+ d4 ?0 B3 H
  379. RAM_Clear_3
    # W6 l5 |: r5 j! k" j7 u$ n
  380. STA RAM_Cln_3,X
    9 U% \% t2 J" v; I, _! Q7 u
  381. INX
    , S# Z1 Y" H& L; ~3 t' w  t
  382. CPX #RAM_Cln_3_Size
    3 d" K$ t$ q/ i4 j4 P
  383. BNE RAM_Clear_31 l9 D2 w$ G) d$ L' X
  384. RTS  ~5 ~1 j- F  T6 w2 K
  385. 7 U7 r) f  C7 X* K; \' r
  386. ;==============================
    4 J, C' S- q6 m0 H: ]
  387. ;音乐切换
    ; P$ [' r' r/ x3 K3 ^! U
  388. Music_Switch
    & e3 X0 J% N: [1 i- n! v
  389. JSR Key_Proc. s2 o, A1 o5 A1 {; K
  390. LDA Key_Once4 K' k2 u* D2 ~( p$ b5 r- @
  391. CMP #$10
    ! T: g, ~, v/ B# A5 a
  392. BNE Music_Start_SongStop
    ' A+ f5 K* n' k- _& s) h& ?! I
  393. JSR Music_ReSet' F# J/ z1 r# X; C" s( W+ Q: ~

  394. * c0 @- ^- l% s8 q! ~
  395. ;音乐停止" q/ }) S$ h  w1 N  [
  396. Music_Start_SongStop) U8 f) N+ ^3 m" w: Z
  397. LDA Key_Once1 v* u/ @4 p+ W5 V/ e0 b7 }1 j
  398. CMP #$20
    , S5 K9 O: Z% e8 g" n5 m9 e
  399. BNE Music_arrow
    # a! L3 @% h1 Y. F4 V6 `
  400. LDA #$01- y& s& b$ D/ d; }7 p! B7 `. X
  401. STA Music_State6 Z4 z* Z( |; Z9 q9 v. |
  402. JSR Music_Bar_ReSet4 s0 ^! S1 F0 T
  403. JSR Time_ReSet% `5 E: g  x* |; V
  404. JSR RAM_Clear
    $ |# ?1 G* z2 N$ C9 M7 m
  405. JSR Sound_Clear
    / X; R/ a1 \; V+ S  N+ w+ f
  406. JSR Music_Stata_Show
    8 e% ?+ W, U" t- @( j! S: ^
  407. Music_arrow
    9 D8 S5 b$ e, x+ A5 V: y
  408. LDA Key_Once
    3 `0 h& [' s. v/ x7 O* X4 T
  409. AND #$CF
    : B4 y; S( b: Z; U5 d3 @
  410. BEQ Music_Switch_End
    ! E! v4 T  S$ M; y$ B5 U- l9 G( w
  411. JSR Music_Number* e! e0 H% y2 w1 J2 b
  412. JSR Music_ReSet% s2 t2 s. S: b" ~; T* P4 o
  413. JSR Music_Show$ E2 h& q$ Z. i: w! U1 Q
  414. Music_Switch_End
    . y+ _; b5 t8 I' T7 h
  415. RTS. k  B, J7 s9 Q  a/ z
  416. 7 J! [3 F4 ~/ z8 Q0 G2 [: x
  417. ;==============================
    % K% }, @. w) X! M6 E, D
  418. ;音乐曲目切换
    1 l+ {& [3 f( `
  419. Music_Number- b7 ~; X% Z- [9 _* P% n4 n8 ~
  420. LDA Music_Cur
    $ [* c5 w4 B1 D& U. P, w9 e
  421. STA Music_Last2 N+ T  p1 ], t2 L, F+ V9 d  z
  422. Music_Decrease
    6 Z+ Y& _2 j) I# n% u( @& Y0 P8 m
  423. LDA Key_Once5 G# N6 X4 R( ^+ o
  424. AND #$42
    ) a  @) F/ G: o2 w4 T
  425. BEQ Music_Increase9 v9 k2 ^! U/ O& P9 U9 g* P" B9 [
  426. LDA Music_Cur
    # t+ w7 @  e8 O8 |+ u9 k
  427. BEQ Music_Increase
    - I' |; s+ e7 o! I/ p* e$ ]0 G- Y
  428. DEC Music_Cur+ @, o- {' O/ B6 Y* y! \: I; |8 ~
  429. Music_Increase
    0 L. Q, K* k$ u7 C7 Q
  430. LDA Key_Once
    $ I7 @& }! g  z
  431. AND #$81/ l3 u0 g* ~& Q$ i1 h: b) v
  432. BEQ Music_Decrease_10/ ], Y" C( S1 j
  433. LDA Music_Cur# v3 `6 L0 A' Q1 y
  434. CMP #Music_Song_Total-01: n. o0 ~4 M% h8 {* c  [
  435. BCS Music_Decrease_10
    0 l" x5 V3 N  L( g/ W0 u
  436. INC Music_Cur
    ; v& l* W3 z4 r  ?/ m$ T( ?5 }
  437. Music_Decrease_10: t0 n; u' A% M/ v. R8 P
  438. LDA Key_Once
    1 J4 ]3 s% R: F! W, F4 a9 {' f
  439. CMP #$041 E6 \8 k, }4 m
  440. BNE Music_Increase_10
    5 V: x' O. U+ j+ p' J, J% J
  441. LDA Music_Cur
    8 S6 X' z( P! W1 G- M! w& o' G
  442. CMP #10- D: [1 m4 R/ x0 F7 }
  443. BCC Music_Start_Song_Min
    % T1 d% Z- q  `- O5 y
  444. LDA Music_Cur" q' F2 h+ U& @7 {) w
  445. SEC
    ( A) J6 q  O0 u# B% ?
  446. SBC #108 K% `8 S4 @  @9 Y+ P; I1 m8 o
  447. STA Music_Cur
    5 m& s, v3 o( e: U) x6 v9 w
  448. LDA #$00% R5 D9 I& R8 U* z
  449. BEQ Music_Increase_10$ h# s/ }  h# B' T$ p) Q
  450. Music_Start_Song_Min; s7 B: E! e. R# C  s3 F; q
  451. LDA #$00
    0 Q0 X: X, \7 U
  452. STA Music_Cur$ Z! r" J# V* d
  453. Music_Increase_10- o( f& u3 m: q9 b4 q8 @
  454. LDA Key_Once5 B0 w% l. {: Q  }  b8 t1 z
  455. CMP #$08
    4 E8 X3 V8 H( U+ e5 G
  456. BNE Music_Number_End* i, l7 {( c1 a9 I$ [
  457. LDA Music_Cur+ j2 ^# N' Y1 p  i2 ]+ u
  458. CLC" t! l, ^. \& L. n
  459. ADC #10
    0 w. g9 h9 V! c/ y
  460. CMP #Music_Song_Total-01' H! L7 M/ f; W" |. F
  461. BCS Music_Start_Song_Max
    ( x" s1 A- a3 i# O4 a
  462. STA Music_Cur) l9 l6 [! |2 I6 P
  463. LDA #00
    ' J$ K, p& `! H" m, F1 C/ v* j
  464. BEQ Music_Number_End& {7 [7 I3 b/ k/ P: L. `9 s
  465. Music_Start_Song_Max4 _* C1 e# o& j( U6 K! L5 Y: U5 @8 h
  466. LDA #Music_Song_Total-01
    2 A  U2 p# J# J+ h
  467. STA Music_Cur
      Z$ L) u' a' I1 Z6 k- ~; E+ A( G
  468. Music_Number_End" s7 `  F! q+ I
  469. RTS* A  j  M" K7 _6 @6 O+ s

  470. * A: H9 g+ q8 w% W  j
  471. ;==============================
    3 P! z2 p8 H9 x/ i" ~# ]
  472. ;音乐重设4 |& q; {1 w2 M8 K
  473. Music_ReSet
    0 q6 C2 G& e3 p- ?
  474. JSR RAM_Clear
    * T- ?3 Y; [: t( }' i2 ]
  475. JSR Sound_Clear8 `. n" C2 A7 i7 O# J/ t7 o2 c
  476. LDA #$1F
    , K5 B  [: z( G  P) e6 m; R
  477. STA APU_STATUS
    ) r/ O7 a7 n# X  Q- W- r
  478. LDA Music_Cur& B- K; Q! x! h! |$ k7 ?6 W
  479. JSR Sound_Init8 }2 t$ o. V! j6 s
  480. RTS" H' m& ?" _$ e) f: @8 R. I
  481. - c/ ]. @1 _- n: Q1 T: T
  482. ;==============================+ l5 M6 G3 {& s6 r* d' H
  483. ;音乐端口清除, Y' h! |/ j9 c
  484. Sound_Clear
    & X, V% B) ]; k: d( x- Z  V
  485. LDA #$004 U. H6 X8 |" ?  t
  486. STA APU_STATUS/ G% ~: Z6 G2 `4 a7 P) [
  487. LDX #$00
    * d: x  F4 z$ c/ _
  488. Sound_Clear_Start$ ^- P8 S" m/ e1 X* t% h
  489. STA $4000,X
    ! j. U1 I( N4 d: W+ s7 ?, h* ^8 h
  490. INX4 z  V: r- l% ]& {" h! r1 g, K* b
  491. CPX #$147 p2 h, V: V: \9 O8 d6 y  q
  492. BCC Sound_Clear_Start- D# h2 b# J, |5 |) s2 y! H' d
  493. RTS
    1 Q$ D9 t/ L+ x

  494. ! w+ j3 D& r* Y" x2 c8 q7 x
  495. ;==============================
    % C- [: Y: X6 {% s6 m* y; g
  496. ;按键处理
    " {4 t# e0 H% f
  497. Key_Proc; A5 k1 u9 z: l9 z. ?# Z# ]
  498. JSR Key_Scan' A: Y% v+ Z4 K/ y0 }
  499. LDA Key_Keep
    & V9 H. d/ p% }: z6 u( C
  500. STA Key_Temp) b- c& _, @/ z
  501. JSR Key_Scan! Y; j4 R* ]" m' @5 D9 z6 O
  502. LDA Key_Keep
    6 Y5 Q0 m, l" `1 ~, u
  503. CMP Key_Temp3 Q$ R9 A6 \" R+ g  I* A. Y0 R
  504. BEQ Key_Get_Once
    9 o/ S/ y# W0 W% x  [
  505. LDA Key_Kemp+ t5 V* j* X) h$ Z
  506. STA Key_Keep
    . T; J6 s3 Z' ?7 c
  507. Key_Get_Once; C& r5 C- _8 I% r  b0 o# x1 a
  508. TAY0 Z( Y5 w; O1 \6 ?! r
  509. EOR Key_Kemp2 }% c: l; v8 N. B0 j
  510. AND Key_Keep
    + [/ ~, Q  i, S- R# s* F# y$ Y" m7 |
  511. STA Key_Once
    2 t: J* U  n5 g, b: X0 m
  512. STY Key_Kemp
    , Q/ |+ I$ W& y6 m+ e! S
  513. RTS( R4 x5 P7 {4 P) g) ?1 r& C* F2 s
  514. ;------------------------------' _. i4 O8 V" U
  515. ;按键扫描9 Q: P2 o* ]; C8 ~! c. l" _
  516. Key_Scan3 {0 u5 b+ y# @5 Z
  517. LDX #$01
    5 \1 i  [. F( v( ]$ i" M2 ~
  518. STX JOY1_FRAME
    + }  u" A& r% r' \
  519. DEX
    0 k& `  f) g1 f& g7 e4 v. p
  520. STX JOY1_FRAME/ Q) W" b8 t* K
  521. LDX #$08
    5 ~: _" K1 j$ r; H
  522. Key_Value
    0 J, l5 `  O  _1 _+ s1 h  Q% F
  523. LDA JOY1_FRAME
    & ^: k. ^% \, f& ?0 c7 Y
  524. STA Key_Getv' ?* c( o+ R5 q  s5 p. c- B
  525. LSR A' ?. v$ K* \5 Z# D7 L. N5 F  O
  526. ORA Key_Getv3 i9 p' E7 Q) D! D4 _; A
  527. LSR A8 r" {$ D! A3 Q; f3 t
  528. ROL Key_Keep, \2 b" o% R- S
  529. DEX
    * L* M; @# L* B; ?  t) k
  530. BNE Key_Value
    1 U. S9 H2 {7 i
  531. RTS
    $ n' t! W6 U7 O. A! F

  532. 6 J) [4 w8 Z. h) Q! L
  533. ;==============================
    : u8 L4 k1 h$ t8 Q
  534. .IF SOUND_BAR_SHOW_ENABLE2 C8 q& S$ D2 z% {6 B
  535. ;音乐条显示; N: w& r! S2 [( B! g* }
  536. Music_Vision
    9 g) J5 X' r' s9 z8 k+ E
  537. JSR Music_Animation' S" N4 a* `  |0 u! r
  538. JSR PPU_End
    ) Y# j5 H1 F  B- g. g% I& h* a
  539. RTS2 R% I/ x7 E1 x# C5 m$ x% p1 h
  540. ;------------------------------
    4 t3 b/ c7 t2 @1 f& h
  541. ;音乐条显示处理- P. B  x7 X4 j9 h& I9 p1 L$ v
  542. Music_Animation
    ; A$ _( K( X. |% c$ w. f2 U3 g  |
  543. LDX PPU_Cur8 l2 N8 c$ g0 M7 \) T5 V1 g
  544. LDA #Mode_Line2 Z, k, K' }+ }7 n! t
  545. STA PPU_Addr,X
    4 V6 {7 ]# ?3 g% d7 O) s/ v8 {8 S
  546. INX
    0 A1 F- p: F, h# @) |' J9 X- T
  547. LDA #HIGH(Sound_Bar_Pos)
    ! Q9 s' p; ]' M) M$ e
  548. STA PPU_Addr,X9 j: z. |9 Y3 J
  549. INX0 d& h9 e. E- A
  550. LDA #LOW(Sound_Bar_Pos)
    3 Q( h% ]' h0 ]
  551. STA PPU_Addr,X% P! o$ y  d# v6 X8 r# G( X3 `& ~
  552. INX
    # e# L& _6 i5 x4 q
  553. LDA Sound_Bar, K& U% p5 P% J: t  F
  554. JSR Volume_Convert
    ' T' t4 n' C3 K; y
  555. JSR PPU_Return
    + ]) a. S! K1 J7 c9 @( ]
  556. LDA Sound_Bar+$49 v* {# r. x' l( U
  557. JSR Volume_Convert
    & K5 U' X7 O9 z2 w$ ^, H
  558. JSR PPU_Return
    ) w% ^4 B; M6 @( b2 u$ A. r# l
  559. LDA Sound_Bar+$8- e; B' l) J/ N, `/ k6 B
  560. JSR Volume_Convert_Ex0 ?1 l- f3 _4 f* v( a2 K% ?: k
  561. JSR PPU_Return1 T3 j& G" q6 B/ P9 Q: G
  562. LDA Sound_Bar+$C
    1 W  O6 y8 D0 _
  563. JSR Volume_Convert5 e+ o' f* e% I- A/ P0 S  y
  564. JSR PPU_Return
    7 d9 T; {% J1 }  B1 v: D; `: }/ o
  565. LDY #$10
    " T9 F+ r5 D! v& f
  566. LDA APU_STATUS
    6 v& V9 t2 W3 i' Y1 F  q
  567. AND #$10" X+ t) F5 z% g" A1 L2 a
  568. BNE Volume_Count1 e. i  W5 h5 U! E# @$ N. e+ Q
  569. LDY #$001 `. m0 A, e. l7 \
  570. BEQ Volume_Count$ V+ Q, X7 P" j% o3 W, F" W
  571. ;------------------------------- W2 B! ~- B1 @. y. L$ k. v1 b. H
  572. ;音乐条处理3 k. J* g1 d& R. Y4 z
  573. Volume_Convert_Ex, H4 }+ K5 b* d4 d  T; J
  574. AND #$1F
    0 J2 x' ~' z/ |3 E' N/ i" n
  575. TAY; N* G0 W" h0 h& D0 |: E, t
  576. BNE Volume_Count& a3 q$ E6 z7 ]) h
  577. Volume_Convert6 b9 k3 m' J* s4 s5 Y
  578. AND #$0F; `' p+ b# _* j" e: S9 N
  579. TAY
    , z' Z1 D/ f, k( H, i* Y3 P( I
  580. Volume_Count
    ' V/ G/ _$ I) x- ]. L# w# [
  581. LDA #$08
    2 y. d5 t8 w, _( B. @7 u9 ?6 c
  582. STA Sound_Bar_Cnt6 j/ w+ f& X0 b9 v+ H2 c- [
  583. Volume_FILL
    ; X1 Z: @% _) _. l, _
  584. DEY/ Z# Z' C# a0 `0 Y5 I8 g8 H0 s/ h
  585. BEQ Volume_Half+ P  z: M+ n' d! `+ ]) a
  586. BMI Volume_Empty
    9 Q3 w& y/ r$ n# F
  587. DEY
    0 z9 q! J/ ?" `4 Z
  588. Volume_Full
    ; C( B/ B1 q% X. `' R4 G
  589. LDA #$16
    5 x' V4 x* x# z$ I$ r
  590. BNE Volume_PPU
    % i; S7 |% n6 f$ G; K& G
  591. Volume_Half& z- [/ b  |, K+ J
  592. LDA #$15
    * i; n& O6 v3 L# {) H; ^0 U0 D, p
  593. BNE Volume_PPU
    0 d/ E: J, W( J# b
  594. Volume_Empty4 [% h( L4 `4 V5 ]. R# q% W6 S7 L8 c
  595. LDA #$14
    6 G+ E1 I- b" I2 Q
  596. Volume_PPU
    3 {3 S5 c8 B- P% `. H  J  \
  597. STA PPU_Addr,X
    1 J2 v# s. x* a. m9 K6 B9 G
  598. INX' \7 g: r8 i- s* |! I* X- N
  599. DEC Sound_Bar_Cnt$ J9 Y3 U+ Y$ t% z8 h2 W. |
  600. BNE Volume_FILL6 v- M, @8 E- e8 ]  z# T, }
  601. RTS1 T8 e& i# R5 l  G2 U! }3 `

  602. ; N$ S# y/ Y: s7 t" F3 G
  603. .ENDIF
    . J" P9 ?, j  l$ @$ Z; R5 b

  604. / {5 }% Z  E; r4 L2 d2 K# U. H
  605. ;==============================
    # U% X+ O2 _4 J& H. s
  606. PPU_Addr_Set;PPU行开始
    7 U$ ?. d8 G7 U$ Z( T
  607. LDX PPU_Cur
    * q9 Y( Q, X8 @6 i
  608. LDA #Mode_Line+ S4 B1 @* N7 ]5 J
  609. STA PPU_Addr,X7 }( D1 B1 i2 H; q  L
  610. INX9 ?1 `9 D. C; L
  611. RTS
    & o) @% H* A" J8 J3 p
  612. ; R: K  v6 x/ X
  613. PPU_Return;PPU转行( c" q: s* A7 j0 v6 V
  614. LDA #Flag_Over! [# c7 b' w- z1 p! v! Y
  615. STA PPU_Addr,X( x1 v$ z2 g- e* X6 H. y) `7 A
  616. INX
    ; p- g% R: R" x; N" k9 `
  617. LDA #Mode_Return! L0 J9 E& u4 Y1 B7 U
  618. STA PPU_Addr,X5 N  V6 {- K; `" `: ~- |) r
  619. INX9 A- b9 H! {. ~* p6 G0 d
  620. RTS! r: t4 ^/ y; c7 {% `& H
  621. ) _0 w& K& o; C4 D# ~+ q% @$ \# b
  622. ;------------------------------
    % p3 w6 i6 @" W+ W5 R3 H( [
  623. PPU_End;PPU结束
    " \; j" E, ~( E  t8 l
  624. LDA #Flag_Over
    " V4 Y; m6 S3 M. H. s
  625. STA PPU_Addr,X
    6 A4 a8 Y2 s# `/ I0 ]6 T
  626. INX) o/ s8 @* {6 Y" `
  627. STX PPU_Cur7 _5 G( H9 E; h
  628. RTS; ]7 C# j0 @6 r% ]. u  h. C5 |4 T
  629. ;==============================
    5 A9 s# I& ~9 ?4 U
  630. Mode_Line     = $FD    ;新起行模式1 u- g* |5 y3 Q0 `/ f
  631. Mode_Return   = $FE    ;转下行模式3 n$ k3 a) c' N1 [
  632. Mode_Clear    = $FC    ;行清除
    / s: B0 s2 U' ~: e  X4 I- ^
  633. Mode_CntLine  = $FB    ;行计数写入
    ) h8 R! x  T, d! f, w/ I; q1 Q
  634. Flag_Over     = $FF    ;行结束标志
    & a' q; D: D) F
  635. ! K& S' o; x3 x% O( \# `% x
  636. ;------------------------------
    : ]5 X( H/ \! I: m
  637. ;PPU处理5 |+ W$ i8 K& [% s# I
  638. PPU_Proc0 b# n7 @3 m. W1 e. P6 y2 {
  639. LDX PPU_Cur
    2 v7 c! q5 `: S- l4 E% s, _
  640. LDA #$007 e5 E: ]! ?6 _# M
  641. STA PPU_Cur. k0 `) `. T3 k9 Y( x( q
  642. STA PPU_Addr,X
    * M) T+ g" S& X
  643. LDA PPU_Addr
    - U/ T0 I; M  c$ V0 s( _/ f
  644. BNE PPU_Proc_Beg
    * L; w9 \0 C( c% b
  645. PPU_Proc_Ret) ?' T. P* U, L' W5 g
  646. RTS
    0 `* ?3 M0 ^9 M* m
  647. ;------------------------------% T2 D  s1 w. f2 E
  648. PPU_Proc_Beg  ;处理开始' ^9 x+ o1 P# B. O6 K7 }
  649. LDX #$00
    ) ~) }* F/ O0 D0 {/ _8 y' X
  650. STX PPU_MASK4 @( |, o+ r" c1 u0 u. W  w
  651. ;------------------------------
    . b0 j# V0 H* Y$ |3 U0 m3 O7 h
  652. PPU_Mode_Select  ;模式选择
    / N- [" v+ ]6 R9 x
  653. LDA PPU_Addr,X" {8 F3 `; e+ X$ x# X
  654. CMP #Mode_Line; h3 X4 y) l5 A: `
  655. BEQ PPU_Mode_Newline8 }$ r$ Y- J" [2 h4 W9 R* d
  656. CMP #Mode_Return
    9 b$ R, D; P# Z( G0 P4 B) p& e
  657. BEQ PPU_Mode_Return, o$ S& b' ?/ u( v$ x
  658. CMP #Mode_Clear) T/ k0 d8 }- f" {/ ]( w1 V3 _7 |
  659. BEQ PPU_Proc_Clear
    * D# k; f4 Q: `% z% ?# E+ g
  660. CMP #Mode_CntLine% Q9 ~3 B; h5 V& f$ ]: W$ g
  661. BEQ PPU_Proc_Cnt_Line
    : Y$ v7 b, w" n' r4 p7 Q1 a6 V
  662. RTS
    4 O1 w4 U6 a7 b  y
  663. ;------------------------------
    " n8 U( D8 Q" R+ A  x3 M0 O  [1 n
  664. PPU_Mode_Return  ;转下行模式
    3 l  L7 m% {* ^$ [! ]
  665. LDA PPU_Addr_L
    2 I! N8 b- o& Y; e
  666. CLC
    ! b' o$ k# q* d) V$ {8 Z. Q
  667. ADC #$200 ^' z1 f3 u, C5 Q
  668. STA PPU_Addr_L
    3 V# V. m2 T+ B5 y5 U
  669. BCC PPU_Return_End- k, E6 v1 b) s6 A
  670. INC PPU_Addr_H
    2 N, P5 i* T7 O
  671. PPU_Return_End* Q- V8 N9 h7 H! \
  672. JMP PPU_Set_Increaser
    % {1 D, l2 O$ }" x1 i
  673. ;------------------------------1 i2 v. l! L- @' Y
  674. PPU_Mode_Newline  ;新起行模式" k2 ]: J+ t4 B: \8 J* f
  675. INX
    ' l+ H4 h9 n" r- C  k) \0 a
  676. LDA PPU_Addr,X
    ' _1 U" V: u8 N( c  K9 R
  677. STA PPU_Addr_H
    , s7 ^7 e9 R+ a
  678. INX+ [: P) v) ^6 G! J* e5 ]
  679. LDA PPU_Addr,X( E) R: k' K' I! e' f. ?, F  \
  680. STA PPU_Addr_L
    - l; K, W+ K' O2 K
  681. ;------------------------------+ `- G% q* }; o
  682. PPU_Set_Increaser   ;设置写入地址
    - \; u; s- o# V7 k) z/ `
  683. LDA PPU_Addr_H' X  b4 ^# Z" W0 l4 V
  684. STA PPU_ADDRESS& W# W$ A) i1 {
  685. LDA PPU_Addr_L! o. I. g; D- p  B
  686. STA PPU_ADDRESS( p( Q  S' I3 v, b
  687. ;------------------------------
    5 t& \: [4 J( D% @9 @) x) \, r8 [
  688. PPU_Write   ;写入数据
    / [7 t3 s! d1 P1 ^/ @7 \
  689. INX# u) q" k4 \6 y4 J$ ]! a  C
  690. LDA PPU_Addr,X
    6 ~+ D" V! ]: W
  691. CMP #Flag_Over
      N5 A* B) w" C
  692. BEQ PPU_Proc_End$ L  I% d4 d! n* L- n' V
  693. STA PPU_DATA
    5 _; E6 k* @$ K" Q3 R& Q4 Z0 H% ]1 z
  694. JMP PPU_Write
    ; C- }+ |$ q4 ^! A* a7 E) |+ I
  695. ;------------------------------1 F8 @, f# D- m: E- f
  696. PPU_Proc_End  ;单行写入结束; u7 b% S8 ?% u! o) Z0 W/ O
  697. INX9 H' C  O5 w4 P: w" I1 Y, g+ ^+ D
  698. LDA PPU_Addr,X# C6 A4 ^+ X1 ]1 U+ w; c
  699. BNE PPU_Mode_Select( Y8 {0 i4 {7 e" f
  700. STA PPU_Addr
    " v/ I9 a5 {9 I; u
  701. JSR Update_Palette_Color% S- ~. j0 H, O# ?+ u* ?
  702. LDA #$00
    2 l0 n1 b  R* Q( P$ Y
  703. STA PPU_ADDRESS
    + W1 ~& ~4 b" Z0 e) ~- _0 S
  704. STA PPU_ADDRESS
    ! @8 X7 X0 [8 I% `( `1 y
  705. STA Show_Track_Name
    $ p0 ]( p1 u# V7 ~0 `
  706. LDA #Scroll_X
    4 Y& ]6 p# J6 N1 C6 D" T! y8 q6 j
  707. STA PPU_SCROLL
    ; q5 W( r0 D& c6 o% n2 ?5 m+ j
  708. LDA #Scroll_Y
    + f  G- v* ]- A+ P
  709. STA PPU_SCROLL
    + s" y' E! m7 B6 m, B
  710. LDA Screen_State
    0 y' k% i; A" M9 L. y
  711. STA PPU_MASK& [* z- u  s8 K0 E4 P: G* n% r
  712. RTS4 N$ H$ T6 o) c9 ]* `0 T9 x
  713. % k. `5 m4 l" w* c, _( d. S& m* h3 x
  714. PPU_Proc_Clear3 x) q3 U7 X, j
  715. INX( C% N) e3 a3 h, ~/ d* \
  716. LDA PPU_Addr,X5 m; r2 P/ N% U
  717. STA PPU_ADDRESS
    9 k" W7 ~$ A* P* S  O  i
  718. INX6 `' Y- [" M$ u1 W" v* M; J
  719. LDA PPU_Addr,X
    # k( w' F; [  t
  720. STA PPU_ADDRESS5 G: c1 m+ n6 _% I4 Y: A3 y; `
  721. INX
    $ R- Q# h/ A' p. A
  722. LDY PPU_Addr,X
    . o/ N% N3 ]2 D: r
  723. LDA #$00
    / n+ V5 s: d0 S6 }* M' h. p6 x
  724. PPU_Proc_Clear_Write2 D. |  w" z, \" k* c  o) z
  725. STA PPU_DATA( r& s  Z/ S/ B7 z* j3 t1 h+ o
  726. DEY" K9 p, o" V# g' s
  727. BNE PPU_Proc_Clear_Write
    % a) R- |+ h7 C+ c
  728. JMP PPU_Proc_End
    / l9 b. I3 [/ [" ]: ^: k

  729. 7 O* y  O# c0 I5 Y% z  [
  730. PPU_Proc_Cnt_Line0 L9 t8 [4 c* M6 \
  731. INX" g( f! ]! ]% Q# M5 n9 [1 O
  732. LDA PPU_Addr,X
      {2 A5 u3 M1 P0 f
  733. STA PPU_ADDRESS, R, G" ]) ?4 L) @  D
  734. INX7 o6 D# D0 D$ `5 A
  735. LDA PPU_Addr,X
    # q, I: v  c3 K( V! s# y
  736. STA PPU_ADDRESS# q. U. T/ L  i) d
  737. INX- [* `$ |: }8 Y) j* U9 Z6 b
  738. LDY PPU_Addr,X) y) i. Z8 d0 l9 K" \8 R' V! z
  739. PPU_Proc_Cnt_Line_Write
    2 y" c  b/ f$ t& g& `" |
  740. INX
    " n* Y/ t5 R: G. J. u
  741. LDA PPU_Addr,X
    " E: ^1 X, J; A. o( B/ h
  742. STA PPU_DATA
    ; \! K* j* h+ P1 j- l9 V7 ?/ c
  743. DEY
    & j+ q; I5 z3 U5 `
  744. BNE PPU_Proc_Cnt_Line_Write, `1 ^. P7 @- c" D( Y2 T6 T4 U3 w
  745. JMP PPU_Proc_End6 i7 z6 s1 ^& W; k! F4 n

  746. : O5 u% y3 N) n! o7 E! s
  747. ;==============================/ l, a* Q$ g' H& H% J/ v
  748. HEX_To_Dec;十六进制转十进制
    8 `1 \/ `- e9 _
  749. STA HEX_Data9 W. _+ g& M5 ]6 I6 t- W
  750. PHA: v- @6 n2 S5 F! k( |: I
  751. TXA  v) ?) `" ]* A( ~" p% M, G* E  N+ R
  752. PHA
    , R$ x+ @# ~  _
  753. LDX #$00
    ) P' D1 K& E: I: Q% u
  754. LDA #$00% c3 u( `$ n3 r6 f2 X
  755. HEX_Cln
    " q, U7 ^6 d0 P2 c# k7 d# v% X
  756. STA DEC_H,X( i3 |6 C& V4 [4 z1 J; S2 \
  757. INX
    ' Y9 K: Q' u/ r
  758. CPX #$03
    , F8 y7 l% v& o; E
  759. BCC HEX_Cln
    ' Q2 m/ A: G9 p4 o7 n- p7 j
  760. LDA HEX_Data" T7 l( f3 E! t
  761. ;------------------------------
    + \: B  x1 [, L. e( L; h
  762. HEX_100
    0 h6 I/ B! C; ^1 `1 k8 [1 w, w
  763. CMP #100
    ) t3 w2 [/ a. j+ Y
  764. BCC HEX_10
    , e+ @3 B: `4 K+ ]& u$ K
  765. SEC
    6 D% b1 a$ R* x, R1 F/ J
  766. SBC #100
    ! Q6 g: _1 b) x) ~3 m
  767. INC DEC_H
    4 J# {, e2 X1 f8 o
  768. BNE HEX_100
    + y2 Y" O+ c( U. [, C
  769. ;------------------------------0 U8 [% T8 J( G  L
  770. HEX_10
    ) K* `4 Z& p, o! ]! S3 j4 _8 k
  771. CMP #10
    ' d/ A& q1 Q. Q. F
  772. BCC HEX_1
    5 |/ c* y0 R. b% F4 Q
  773. SEC3 O4 K: ~' A6 f; X
  774. SBC #102 Y: a0 p- {1 G. o+ u
  775. INC DEC_T! y" o% r' W. X7 N. f6 D
  776. BNE HEX_108 o0 ]6 u$ P2 I0 ?
  777. ;------------------------------
    + Q- x$ {0 l( ?
  778. HEX_17 A0 {* ?7 A, F3 `
  779. STA DEC_L/ \( u2 b' o4 {( o7 j" ?- z0 I' y
  780. PLA' A/ ~! P. t, D: Y* ^
  781. TAX
    6 a: G) Z" i9 t6 I8 G* V
  782. PLA- H6 P6 i/ Z6 O$ N7 M; u/ q
  783. RTS! m" v& v6 d4 r8 m
  784. $ K% z  ~3 F; r. c8 l- V5 Y6 A
  785. ;==============================
    % P) p' D' ^6 ~4 e
  786. ;音乐曲目显示
    - d2 [9 V; B$ A2 I
  787. Music_Show+ R& t! Y9 ]6 e5 |& w, j; H9 o
  788. LDA Music_Cur+ b: J: K3 n5 M) r# o
  789. CLC
    . I3 A* ]& b0 ]
  790. ADC #$01' \) D  X8 [* T. J5 x% A( k' i
  791. JSR HEX_To_Dec# P( |0 r0 a5 s+ F4 _& J
  792. LDX PPU_Cur
    ( X1 P# P* Z3 J' P. Y9 m; r
  793. LDA #$FD. u, m% _( N9 \  C2 D
  794. STA PPU_Addr,X
    : X) K9 u9 ]* @: V
  795. INX
    ! e0 B7 q+ W' h4 G! x2 V. J* C9 Z8 C
  796. LDA #HIGH(Play_Index_Pos)1 x+ k7 H7 }1 P' s1 F; [
  797. STA PPU_Addr,X
    0 v- N8 Q0 y' ?* D" r: V
  798. INX
    ' E" |' ~& R, @! C% b* K; T9 l3 ^
  799. LDA #LOW(Play_Index_Pos)& z; n5 G1 Z7 D- z0 \. y* R
  800. STA PPU_Addr,X
    7 ]1 V) E& z. ]. u
  801. INX
    % l: O5 \1 I* ?9 Y

  802. / k& p$ C  B& W8 G, V- q+ l
  803. .IF Music_Song_Total > 998 N8 W; }+ z- }1 G+ S
  804. LDA DEC_H
    1 e8 z4 m2 F) C2 ]+ _$ I
  805. ORA #$30: `# T4 T& `; H- L+ W2 {
  806. STA PPU_Addr,X
    6 i3 W8 \9 x6 h, w9 F
  807. INX
    + _: C4 D1 ^  ^
  808. .ENDIF
    ( {7 {7 E& b( V) \- r9 f
  809. ; L; _' w& s+ r' }' R( X, q
  810. .IF Music_Song_Total > 9
    $ B* Q1 E1 O6 Z8 I: Z4 O
  811. LDA DEC_T
    6 }6 I7 @" z7 |
  812. ORA #$303 U* ^+ i- |0 B' r# e0 u
  813. STA PPU_Addr,X3 U- k+ `( k' T! t( L
  814. INX4 f. y0 z) t, S9 \! A8 y/ G
  815. .ENDIF; V. x* u0 _9 w) C; P

  816. + k" T$ \0 B# M  ^% M% v# F
  817. LDA DEC_L& _! n1 n5 ^/ j( p- F/ ~
  818. ORA #$30
    3 {6 }% q9 `9 [, R# Z3 u
  819. STA PPU_Addr,X! a( \" S0 Y3 q! A8 U. E: C
  820. INX
      y& T3 U8 h% P( V

  821. 3 y* M1 C! M: `
  822. LDA #'/'4 e" L# j9 g" L( o
  823. STA PPU_Addr,X! a7 q$ m$ |* S% H+ Q2 B
  824. INX
    ' Q& J$ |6 ^; ]8 O. T- p$ ?
  825. Music_Show_Total0 r, M5 z" }# @( J; ?
  826. LDA #Music_Song_Total. h6 b5 ]" e0 N; ~
  827. JSR HEX_To_Dec
      }5 o% B- l+ c( u8 G" K1 m
  828. ! @/ Z! X" O/ f/ D
  829. .IF Music_Song_Total > 996 I8 Y/ f7 I; Z; Q  L! L
  830. LDA DEC_H; S8 {3 }. M7 d
  831. ORA #$30
    8 Y) j7 q, U! w- L# X4 o1 y0 c4 V
  832. STA PPU_Addr,X
    7 B; P! e1 B# s; T7 {" a! ?& T
  833. INX
    ! k. r, v  u( V% s' G8 D
  834. .ENDIF
    % p* e7 \0 B2 e, |5 t% n; ^7 F

  835. & P# \9 R- u- j1 w
  836. .IF Music_Song_Total > 9
    8 t6 ?8 l( S* d9 J( _5 ~4 T
  837. LDA DEC_T0 P  S9 x% H3 B# o
  838. ORA #$300 ?/ m! x) V( f4 Q8 g  x
  839. STA PPU_Addr,X
    ; ?3 W* y( E: A+ z/ |& F% }
  840. INX* n4 i, u3 h: t1 L4 {; D
  841. .ENDIF3 t7 U: W! ~7 Z4 G1 x
  842. 4 c1 s2 h0 t" m7 c" ^6 p; D0 B
  843. LDA DEC_L' F0 k: I6 E& x$ \4 K! s1 j
  844. ORA #$30
    $ |! X/ J9 a$ h" }
  845. STA PPU_Addr,X
    " T- g$ e' K* w- K( d0 s9 }* B
  846. INX
    2 p, A6 H$ e, `" D: L" C, e1 r' P( P& N+ f
  847. ; Z1 S' U! T# f8 Q! p
  848. JSR PPU_End* u" n1 ^! P, X6 K# z$ z
  849. Music_Show_End
    1 \: z  c& L/ N$ l( l
  850. RTS
    & t* T- o- a3 b' b! n

  851. ! T" {" c0 L# [  j/ s/ ~6 v+ Z  \
  852. ;==============================
    5 q$ h! c! @. U) x5 [' p
  853. Time_Show;播放时间显示
    2 _6 F( ?4 }) M3 r' G
  854. JSR PPU_Addr_Set
    , d2 r5 \( {* i/ ^1 J
  855. LDA #HIGH(Play_Time_Pos)& p( b5 y5 P. v) ]! R
  856. STA PPU_Addr,X! R3 g( H$ z$ W
  857. INX; g5 }! J7 m0 D: G5 O/ P7 b1 g
  858. LDA #LOW(Play_Time_Pos)' ^  `: B, b. Q8 ^. f. d: B
  859. STA PPU_Addr,X6 D% E4 \! U; y# A4 ~5 P
  860. INX: ?5 a# Z& f- p0 S  ]& P$ g
  861. Time_Show_H
    4 G& K  Y* W1 b! t+ Y
  862. LDA Time_H  `5 _2 f3 f' J- m3 h- D; V
  863. JSR HEX_To_Dec
    7 W3 i5 J9 _6 `: d
  864. JSR Time_Digit" s/ z1 d, D6 B4 c- o* E" ~0 L
  865. LDA #':', w! J# ?1 S9 O7 B3 f/ I7 ~
  866. STA PPU_Addr,X
    0 \1 W/ j+ a; \0 I1 d% c6 U
  867. INX; A4 ?# P6 `% g. J7 F" h9 T
  868. Time_Show_M4 g) J0 W# q4 F# e; C
  869. LDA Time_M+ w, t0 ]6 Y; J+ w0 W4 o( L- v# B# }
  870. JSR HEX_To_Dec# [$ Y6 F3 V) S$ o* U4 ~8 D
  871. JSR Time_Digit) X" M% P7 \! O: L4 e! e$ k3 y
  872. LDA #':'8 I/ x3 D' }0 {& ?5 V& q% P
  873. STA PPU_Addr,X9 J! M1 U9 s% E" ?  g
  874. INX
    % d6 Y$ a+ w! o# _5 G( A
  875. Time_Show_S0 c$ ^% g# J) `- I
  876. LDA Time_S
    6 u: w% K5 B% c0 b
  877. JSR HEX_To_Dec
    # P& F1 Y5 \% G) e4 B
  878. JSR Time_Digit
    4 E, A+ L5 |9 ]3 \# G! H& }
  879. JSR PPU_End& @- c7 z) v0 \6 g* C
  880. Time_Show_End$ i% [" f  c9 G* F# A0 ]0 s3 L
  881. RTS
    3 {- Y; v" k$ U4 M+ X

  882. $ G+ h  ?. M$ P7 }8 v
  883. Time_Digit& j7 X9 w$ M9 _1 E
  884. LDA DEC_T
    : J& j9 y% d/ X2 @
  885. ORA #$30* u' l# W# f4 A/ s4 X4 O
  886. STA PPU_Addr,X
      N8 F4 s! B. }9 |
  887. INX: l  ?# d; g- T% `* y6 x
  888. LDA DEC_L
    * S9 e6 V( o9 A$ U& D
  889. ORA #$305 I* W- i1 C. X) I! G6 N5 E
  890. STA PPU_Addr,X
    . a; Q: j. g2 U3 V* B
  891. INX5 h  @, B0 H8 P
  892. RTS" A1 T- E& H% r# P/ o9 e! m; }
  893. 2 E6 W* X% B$ v9 i7 I
  894. ;==============================/ n) I' A- ]2 `  @1 @3 x
  895. Time_Count;计时) \- K6 l2 H% z' G. A8 T
  896. LDA Music_State4 u1 A0 D) T. H/ E! I% x4 X0 v) C
  897. ORA Time_Wait_Cnt( ?. H" p, ]. p; l0 k2 h
  898. BNE Time_Count_End- y0 r: c$ ?6 v
  899. INC Time_Cnt
    0 W: K( z9 a8 O3 j
  900. LDA Time_Cnt
    ; ]- u! X" ^- g% J6 Z) a
  901. CMP #605 X' t9 W. s- r' Y( p" W' P4 r4 i
  902. BCC Time_Count_End5 U/ t8 n3 |6 R' x5 Y: x8 i
  903. LDA #00- l( j6 I0 _; Y& L6 O
  904. STA Time_Cnt' o3 n. a% a; u, n5 e
  905. INC Time_S
    " q- V5 I- i- a6 `6 x4 [  q
  906. ; V- k8 }1 g% o& p2 l4 Q
  907. Time_S_Cnt1 C1 K/ A. ?  J/ `
  908. LDA Time_S4 I! C, l5 m! Z0 S7 |
  909. CMP #60
    . W, d& e+ x2 r- E" f" l
  910. BCC Time_Count_End
    5 B$ A+ B2 \, _, w& \7 [; k
  911. LDA #00
    ' k, K+ d# i7 g/ K! l7 \
  912. STA Time_S
    - W' i% m, e5 H6 \8 `) c. U
  913. INC Time_M/ [+ C+ I- o7 u7 [
  914.   o" I/ z, E5 B0 s, c* ^! t# `; E
  915. Time_M_Cnt
    ; {/ [6 T- I0 l1 L! E6 L" |) G
  916. LDA Time_M7 [# H1 O" j: A" I  l$ O* H
  917. CMP #60
    9 p6 O8 _1 w: U8 q- P2 F- a, \
  918. BCC Time_Count_End7 C* _+ ], Y5 n9 N
  919. LDA #003 W  c8 a3 l; U" @% O
  920. STA Time_M0 x/ q0 ~, T9 q8 d5 K
  921. INC Time_H1 G8 g' X4 u6 M
  922. / y+ t) w5 i4 |
  923. Time_H_Cnt
    & y: A7 u* T* v2 M8 E( ?. G5 ~% w/ c
  924. LDA Time_H0 u; y, Z2 q5 w; A1 ]
  925. CMP #24
    - D. j" H" @( S/ G% H7 m* x
  926. BCC Time_Count_End
    , H3 s0 ~; L% Y0 K- v  i7 D) T. O
  927. LDA #008 m3 s: X, m* W( f, j% _5 B, D0 K
  928. STA Time_H+ w+ m/ Y- w; U$ O

  929. . P/ @6 U( D) u- w$ {* a$ G
  930. Time_Count_End7 A8 J8 {& T" ~
  931. RTS0 h2 {! P) W* n
  932. % B% j# v5 ^6 W' ]5 c- X% n
  933. ;==============================: L3 Q- b( u- m$ I+ T% F
  934. Time_ReSet;播放时间重置7 g9 @2 `. [  i! @
  935. LDA #$00
    1 O" ?: g1 n0 d1 Y
  936. STA Time_S
    4 E; \0 R& }# E7 @1 s, t  h& t
  937. STA Time_M $ h! o' M. b7 `9 B
  938. STA Time_H
    $ y6 y* w  ~" f) t
  939. STA Time_Cnt0 P9 ?4 ~. V3 @6 ~" u3 ~! J
  940. RTS
      f5 d# P, v0 z: E; o( S7 F9 G! c

  941. * v4 Q4 R: [1 b. n4 _
  942. ;==============================' o8 R# H* N0 g6 z/ _! k, ?1 v
  943. Music_Bar_ReSet;音乐条重置8 @$ F- d) J+ ~8 u; O0 @
  944. LDA #$00
      i- b8 j2 }4 U5 x& D
  945. LDX #$002 ~' E$ M% W* G7 a- J( r8 W7 b0 D& x$ }
  946. Music_Bar_ReSet_Set5 o/ l. m& K4 k5 }
  947. STA Sound_Bar,X
    * p" e$ e) `" u6 e
  948. INX
    - o8 b9 z5 @2 u$ P$ n4 m' @
  949. CPX #$10
    & ~% y$ ~& t4 @
  950. BCC Music_Bar_ReSet_Set4 P5 W( y- |& {7 Y  V: \
  951. RTS
    $ ^% |: Q$ W+ S% [
  952. : F( ^( n% w, {2 U" k: r
  953. ;==============================1 O& U# S3 L8 _" F1 M" b2 P) c: [
  954. PPU_Data;PPU数据写入
    , }8 W2 P! ]4 t1 S1 U" u( C, a
  955. STY Data_L
    2 r9 z, a& {5 j. a& S8 i# b
  956. STX Data_H, `7 g! w+ N3 q: f# l( {
  957. LDY #$FF
    : i; |; b% w5 f7 e  J9 y
  958. LDX PPU_Cur) h) A. d& L; R
  959. DEX
    , H8 P8 X0 x; e  M( `: n
  960. PPU_Data_Beg
    % E8 K0 L& K. U: n% F: ?1 K1 l) i# E
  961. INX
    ' p$ l$ ~  Y9 {! j! A2 X1 n5 k
  962. INY+ \" j" A* t3 N3 m3 K% B, `
  963. LDA [Data_L],Y
    + D8 w% ]0 M" _3 s0 U" I, J* ^7 e
  964. STA PPU_Addr,X" Z- ~7 x1 `; u# O
  965. BNE PPU_Data_Beg, i: X* N- }( e$ k- k2 g' T
  966. STX PPU_Cur$ h0 g1 U- m; _$ x9 s8 i
  967. PPU_Data_End
    % |# L( m5 l+ u$ e5 \2 m/ o
  968. RTS
    ) k5 H! ?9 R( H

  969. 8 n% _4 Y6 m8 c! Z
  970. ;==============================
    + V' U, T* e  V) i7 V# Z6 [/ n7 D
  971. Music_Stata_Show;播放状态显示1 n* T+ d) [7 r
  972. LDA Music_State
    ; k7 a" c% t# K& F2 F% L1 s
  973. BEQ Music_Stata_Show_Play
    ) B' B& T4 f1 G' z2 Q6 s1 u6 Z
  974. Music_Stata_Show_Stop7 E( K5 V( s) Q9 `, @2 L
  975. LDY #LOW(Music_State_Stop). O3 O; C" H( }1 |) }
  976. LDX #HIGH(Music_State_Stop)
    # V9 j: m1 l# U: E" H
  977. JSR PPU_Data6 E$ |6 [8 f- z8 \! @1 r/ ]
  978. RTS
    0 P/ [- z# |! P- Y/ F) S  n
  979. Music_Stata_Show_Play4 m8 \) ]0 [6 \3 [' O
  980. LDY #LOW(Music_State_Play)
    & G' ]& x: ]! c" ?
  981. LDX #HIGH(Music_State_Play)  A5 E" C0 R3 i! n' Z$ @% W
  982. JSR PPU_Data( e/ m% @, D; ~$ X7 f
  983. RTS
    * m, ^2 _1 Y' U  |, f' M
  984. 7 N7 T! m# j' v1 r! j6 y
  985. .IF SOUND_BAR_SHOW_ENABLE) p# Y/ @4 `  k* H
  986. ;==============================$ R, q+ [9 Z. ~4 M" e( q
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ' O  T# p4 m& Q% Y
  988. LDY #LOW(Sound_Bar_Text_Data)* T: B% X  f. f2 n
  989. LDX #HIGH(Sound_Bar_Text_Data)1 ^7 C; C9 Y/ m. Q" b* I
  990. JSR PPU_Data8 Y- S; z6 T4 Q( r0 E0 ?
  991. RTS
    6 u% `; l# J  ~0 ^$ C  p; W" Q# J
  992. % U6 g8 g6 x) ]9 b/ S# m& C
  993. .ENDIF
    9 B$ x4 [% i5 L- O& X
  994. # ^! y( [9 _( o! D3 V5 k& n/ p
  995. ;==============================% f' x) U9 u* Z+ ?* d$ k1 H; e
  996. Set_NameTable_Attributes;设置命名表属性
    : j- O: z0 v, x$ U, I- }& k
  997. LDA PPU_STATUS
    # F7 n( ^3 ?  ?( {# n
  998. LDA #$231 m3 O, T7 B- G/ s5 Y% u* a
  999. STA PPU_ADDRESS  I( G# x( k/ I- q' ^" b4 N
  1000. LDA #$C0. n& `1 u- E! M
  1001. STA PPU_ADDRESS
    . X2 L7 w! @  N' A5 Z/ Y* w
  1002. LDX #$008 V4 B+ M& Z! v5 X7 f* s
  1003. Set_NameTable_Attributes_Write
    ) W3 t; V1 H$ i- k
  1004. LDA Palette_Attributes,X
    + Z6 p, C: R5 v1 y! G* ?
  1005. STA PPU_DATA
    0 N# y3 {: y* H( ]7 x
  1006. INX, d' [% m7 q4 H0 g# N4 b3 U
  1007. CPX #$40/ I6 Z8 V, V5 o. L# `) r: z
  1008. BCC Set_NameTable_Attributes_Write( @9 G5 s! V; N) I  S. ?* Y
  1009. RTS
    ' v  j# p! @! w  |- Z
  1010. 7 S1 a9 B/ {1 J0 n
  1011. ;==============================
    " C# E; L1 Z" B4 M, n; j
  1012. Set_Palette_Color;设置调色板数据
    9 w8 G! e  z2 l2 L
  1013. LDA PPU_STATUS  J' Y- F8 n) e: H  }$ P
  1014. LDA #$3F6 ^6 l' p0 a7 `, \. N
  1015. STA PPU_ADDRESS
    / Y2 Z" _. {. L
  1016. LDA #$00
    2 Y% h9 A" Q  S/ B
  1017. STA PPU_ADDRESS$ \" A1 R$ q- E) q$ D8 ~
  1018. LDX #$00
    : E9 B0 P& @  d1 \
  1019. Set_Palette_Color_Write
    & A: Y3 h( o( a
  1020. LDA Palette_Data,X* I6 v/ I% o# r! o/ O
  1021. STA PPU_DATA
    ; h( g) N% P# u0 d5 S
  1022. INX" }6 ?& \# S* `4 d' d! K2 R
  1023. CPX #$20
    ; Z+ q" H% e& X. r
  1024. BCC Set_Palette_Color_Write6 f3 T: S9 H% D
  1025. RTS
    3 ~  a# R8 w2 q8 D; B

  1026. ' }1 g6 T% Y+ t3 ?
  1027. ;==============================2 A2 p; s! b4 W/ c9 T$ v( W$ O
  1028. Init_Palette_Addr;初始化调色板数据! Q2 r2 s$ i, J% G7 {+ g) u4 Y2 k, M
  1029. LDX #$00
    6 I4 M' _! d$ I) V0 X! s* a( j
  1030. Init_Palette_Addr_Write
    / l0 c, S; c) p
  1031. LDA Palette_Data,X! ~5 H9 {+ N: [$ Q0 A
  1032. STA Palette_Addr,X
    4 S# t* l4 H$ C
  1033. INX
    2 b1 }8 q4 A9 T7 E  ^3 o
  1034. CPX #$20
    0 L* ~# p8 a; R) d% D) }/ R
  1035. BCC Init_Palette_Addr_Write
    # A3 v  B. J+ o% W4 `+ ]( \  y5 s3 ]
  1036. RTS
    / T4 h4 @# y5 l7 D0 I& i

  1037. % V: k% D7 s4 c$ }2 u  v
  1038. ;==============================0 M% G* U: G; F6 M7 r9 N
  1039. Update_Palette_Color;更新调色板颜色! u. {( A& D5 z% ?2 E& ~, ~  S
  1040. LDA Show_Track_Name; f0 x2 l2 x( a& W: u; b
  1041. BNE Update_Palette_Color_End
    & m( |; |6 A8 T: B
  1042. LDA Palette_Update_Flag! H3 ^2 B! g8 E3 s, X4 b
  1043. BEQ Update_Palette_Color_End
    + T0 L, X+ m# L0 @
  1044. LDA #$3F4 @( Z* D* y! ~% B
  1045. STA PPU_ADDRESS- c  W" q/ I  Q( e+ A, G% V
  1046. LDA #$00
    # _2 I+ G' c1 I/ p. a+ o$ e( e/ w* K
  1047. STA PPU_ADDRESS) x* T9 Q) I, }& r' q  \
  1048. LDX #$00
      e( \% L) G5 t2 g% e( \( Y6 F
  1049. Update_Palette_Color_Write! l% ^& M1 Q, y
  1050. LDA Palette_Addr,X0 _7 Q+ n2 z# b, }
  1051. STA PPU_DATA$ G; O) G& c5 i6 t4 U
  1052. INX* o4 w/ p* v6 t; l) R" _5 |" D" V; o
  1053. CPX #$20# X' n/ M* a0 p0 E+ x
  1054. BCC Update_Palette_Color_Write
    ; C9 {' V" O# ]/ f
  1055. LDA #$00* x* m5 n' s' l6 h! t
  1056. STA Palette_Update_Flag, F! e* O7 i* w! H- n, _- ~/ C
  1057. Update_Palette_Color_End6 l8 v* a- K6 E  y- l
  1058. RTS
    ; x/ U$ X- j, a# Y) n  o
  1059. ! E/ z2 g; N* C6 }, i5 Z  z
  1060. ;==============================
    / f% q6 {, w6 d" y9 e3 ~3 ?
  1061. Update_Palette_Data;更新调色板数据
    . I) m) J+ y  f, F4 |
  1062. LDA Show_Track_Name% e  F4 P4 u; H' Y' m( O( {
  1063. BNE Update_Palette_Data_End& x8 i. {. D' I
  1064. LDA Music_State3 \/ ?5 J( p) M0 H1 U
  1065. BNE Update_Palette_Data_End
    / J# M. `8 I$ j$ c5 F, g6 n0 F1 N1 o
  1066. Update_Palette_Data_Check
    0 q: @$ E; D6 T* ^. j
  1067. LDA Palette_Wait_Cnt& q$ {! U  b; |* i9 o' d# C/ X
  1068. BPL Update_Palette_Data_Check_Over$ ?% D* J! k/ w
  1069. LDA #Palette_Update_Interval# o6 `' _& h) I- \( |
  1070. STA Palette_Wait_Cnt6 h: I; C8 \. d4 ?+ L; q+ H
  1071. Update_Palette_Data_Check_Over
    6 U; w6 ~9 C  w3 C  E9 ^
  1072. DEC Palette_Wait_Cnt
    ; K, B" T7 t6 n+ _; \: r
  1073. BNE Update_Palette_Data_End" A/ ~* J% X- J3 M
  1074. INC Palette_Update_Flag
    ! Z0 m" M9 b8 R2 z- y9 |: B* o! ?
  1075. LDA #Palette_Update_Interval+ }( \3 I  ]9 r
  1076. STA Palette_Wait_Cnt
    ' q5 S+ O3 X+ Y/ b" }  G; n( u: w
  1077. LDA Palette_Update_Addr1 n) f5 ]6 ^& ~
  1078. CMP #Palette_Update_Max
    + p/ w: \" @( S2 f. _1 v' H& Q) O
  1079. BNE Update_Palette_Data_Set+ k8 g( a% F) ?6 L# V' i. K4 {
  1080. LDA #Palette_Update_Min - 1. L+ ?/ S2 E8 o" Z1 q+ G
  1081. STA Palette_Update_Addr3 c* ^: a9 [$ e" t9 e
  1082. Update_Palette_Data_Set
    ; M# e. k; ~0 b% q' `
  1083. INC Palette_Update_Addr9 V, b: j1 h9 u+ `5 T0 T* B
  1084. Update_Palette_Data_End
    9 m; ?0 R9 W$ z  C; M# Q* ]9 B
  1085. RTS
    & z, G8 A3 Z* }+ m
  1086. 2 w8 R8 h' K0 c5 x6 `4 U) j' a. X7 q
  1087. ;==============================# g4 V' H; v% A5 I
  1088. Show_Music_Text;显示静态文本
    ; C- b( t3 Y4 t1 z  h% M
  1089. LDX #$00
    % M) H& H3 \( \
  1090. Show_Music_Text_Set5 ~, \/ G& |" _( Q
  1091. LDA Static_Text_Data,X$ i! K0 }3 C1 {8 r: M
  1092. STA Data_L6 M5 N( y" f; i5 A! J
  1093. INX
    # t( k5 s' w4 Z1 y7 n1 x: t2 R0 V
  1094. LDA Static_Text_Data,X+ D9 n7 J( j# w% p  N) Z: q
  1095. STA Data_H  s5 w0 B$ r1 R, M
  1096. INX
    5 K6 v" k# n6 ], a; S6 m2 S* f
  1097. LDY #$00
    : h5 i! Y# {. Z4 X7 Y+ S
  1098. LDA [Data_L],Y
    9 L9 n8 _, U( [$ T! D9 e
  1099. STA Data_Cnt
    , }/ J2 l7 O' k. Q( B$ B
  1100. DEX# l2 D# B2 P  A
  1101. DEX5 d; j" ^9 e1 G
  1102. LDA Static_Text_Pos,X
    0 x) ?4 s: M* F9 y
  1103. STA PPU_ADDRESS
    3 C3 r, r* I0 B: O
  1104. INX1 n, \7 i2 q& [
  1105. LDA #$202 i. n: R# ]; l9 D- ^
  1106. SEC3 T5 _' I. O! _2 G  k% {
  1107. SBC Data_Cnt( K/ p1 _5 E) j, |
  1108. LSR A, L9 P9 l6 A, V
  1109. STA Data_Buf
    8 r% B8 j/ `2 J5 {" n3 |2 ], f' v
  1110. LDA Static_Text_Pos,X
    9 E/ F. j1 t9 p: _* f9 f
  1111. AND #$E01 c/ |; Q: v* M/ Z' d5 b3 w
  1112. CLC1 E1 P, s% R: m5 `# n& J; ^& v
  1113. ADC Data_Buf
    . A# n" t. A9 k7 O8 @, q+ ?! @
  1114. STA PPU_ADDRESS
    . Q2 n/ p# t5 q4 S
  1115. INX
    + g2 k8 g, y4 j! m+ p4 t
  1116. Show_Music_Text_Set_Write
    0 j! t1 P1 k( O( m0 k2 V! i1 a
  1117. INY. w6 j( C" \+ A
  1118. LDA [Data_L],Y
    , B7 A5 U5 y& L6 K) [( a: D! ~4 _
  1119. STA PPU_DATA
    5 o- R; D/ r7 i/ g
  1120. DEC Data_Cnt! }7 _8 Z+ V& S- O
  1121. BNE Show_Music_Text_Set_Write8 x, {0 Z9 b$ L. y, R
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos# E3 t! x  ^+ Y6 Y. }6 z
  1123. BCC Show_Music_Text_Set
    3 A! j% [: D7 E/ R
  1124. RTS
    # w4 S8 [2 P& h7 O, @" R) ^

  1125. " n, [1 Z+ O  X+ i' d+ \$ w
  1126. ;==============================+ F4 G9 x+ |) X6 f0 Q; t3 }* c
  1127. .IF Track_Name_Pos;显示曲目信息
    8 K6 _8 {- T9 C. k4 O/ j
  1128. Show_Track_Info
    / e8 N6 F& \6 [0 Z/ b( e& n  d) }9 A
  1129. INC Show_Track_Name
    # n& |2 y1 o' @! V
  1130. Show_Track_Info_Clear; R/ N" q! m( Y* e! y
  1131. LDX PPU_Cur
    ; P0 O" |9 m; `' ^; i! Q% Y
  1132. LDA #Mode_Clear
    ' L, t7 W+ t7 s! N
  1133. STA PPU_Addr,X
    5 `6 x. l2 d! ~( h( K+ I
  1134. INX. ^& F! r! Q) J1 x4 w

  1135. : S% @0 z; M+ F- ?0 \& F/ v0 i9 p8 K
  1136. LDA Music_Last, a( o$ w  t7 J% _
  1137. JSR Show_Get_Track_Name_Center_Pos; L2 j6 n- I: H  O9 u  d
  1138. Show_Track_Info_Write_Cur
    # [7 y( R( o; I" N0 y' W5 w
  1139. LDA #Mode_CntLine/ Z- b, N0 T: k' n) z
  1140. STA PPU_Addr,X# N7 O. J" ~$ p% l5 f! k0 F6 z
  1141. INX$ H3 q, o7 [" f# J9 ^
  1142. ! N0 L: u1 |! F  v4 }; ~. ^1 t+ S; @
  1143. LDA Music_Cur3 B9 |+ S4 v$ d
  1144. JSR Show_Get_Track_Name_Center_Pos
    " t( Y" A- e9 Q6 r, U
  1145. , H  I) `' e0 U6 n2 k
  1146. Show_Track_Info_Write_Cur_Data
    0 ^) V- a" W- {9 l" s' @- I0 N
  1147. INY
    0 ?) d# _  O5 b: N. }& e) n
  1148. LDA [Data_L],Y
    2 ^4 |4 `9 ]  z
  1149. STA PPU_Addr,X
    9 l4 j7 Q# [4 X1 C( f
  1150. INX8 |! r& l& v! g4 W2 ~; \
  1151. DEC Data_Cnt
    ) _4 D6 F5 E  X/ r
  1152. BNE Show_Track_Info_Write_Cur_Data' K/ V4 T" t  R* Y$ h  R0 L
  1153. Show_Track_Info_End8 _) p. X. K/ n& X( o! v
  1154. STX PPU_Cur, Z( Y& Y$ @, b6 |
  1155. RTS
    3 M4 [! C, n" q0 x( F; F  f

  1156. 4 }' g1 I3 e, T  s4 a4 J7 U
  1157. ;==============================' C/ }+ C- c7 X, `4 W
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    4 d0 [1 l2 Y2 ^- Y/ P, j1 _* Q% M
  1159. ASL A4 ^# p# s" f* q+ Z* g% t4 x- p
  1160. TAY
    ( }+ _# D- C. y! Z
  1161. LDA Track_Name_Addr,Y
    / D  V! q/ F8 S+ |9 F
  1162. STA Data_L
    # v! g$ B  Q6 v+ M
  1163. INY6 z1 I9 r! O6 c! }
  1164. LDA Track_Name_Addr,Y4 `0 i9 k& X" m8 U
  1165. STA Data_H# a. U6 _1 e. W
  1166. LDY #$00
    " c8 `" ^" i* ]2 Z5 _* O8 b2 a' \
  1167. LDA [Data_L],Y
    + {) [1 M1 v! Y+ @5 J9 T9 N
  1168. STA Data_Cnt( q( C" R! R) h; }/ p% B3 `9 t! {
  1169. LDA #$201 @- d, q/ u0 I8 p7 k' y  O
  1170. SEC/ U( a5 r  Z+ u6 q2 l0 I
  1171. SBC Data_Cnt6 D! ]4 |7 {& v3 l" B, S
  1172. LSR A
    # y+ j0 V0 s; Z- _6 W  P+ o9 d
  1173. STA Data_Buf
    6 j& W# P, v% ~( t' m; h% Y
  1174. LDA #HIGH(Track_Name_Pos)
    * e: b3 y: m! a2 H
  1175. STA PPU_Addr,X; S8 c# r- X/ }% k5 Y* m
  1176. INX
    + f) Q* I; [. q( d' ]
  1177. LDA #LOW(Track_Name_Pos): j) t5 e+ q4 X. D" Y
  1178. AND #$E0
    7 Z  ?0 ?1 x! l1 ?8 ]5 d4 f
  1179. CLC
    5 p. K1 Q; @, {; S) R0 {. W) e
  1180. ADC Data_Buf
    $ \7 ^2 A, T: {- H2 Y  u* y
  1181. STA PPU_Addr,X
    $ ]+ D- B# Y2 `+ _8 {. }
  1182. INX
    - f- V, ^: t  c
  1183. LDA Data_Cnt3 v8 U* V2 g% B/ p9 `7 t2 ^
  1184. STA PPU_Addr,X
    # b/ I, T1 l, R% u( `
  1185. INX; w) g0 n! }& m- E" C0 q
  1186. Show_Get_Pos_Center_End* O7 e# b( Z. x1 X4 h
  1187. RTS& b) n# k3 h# E: r% n  D
  1188. .ENDIF& _( I( g+ f5 ^

  1189. : N& X2 p2 M( R0 M4 g# @* E3 a
  1190. ;------------------------------
    , u9 l) A( ?" O6 ^5 Y' }$ ~3 ~. d4 l
  1191. ;命名表数据
    . [* |0 ^& K; {& ?# ^
  1192. Palette_Attributes4 l9 }$ O8 P5 D# o/ Y
  1193. .IF SOUND_BAR_SHOW_ENABLE
    # I# }6 c8 _/ i: K& H: h
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00+ @$ ~' b/ B% g7 g. q
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA3 l* y7 x) Y! \; b1 m
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    7 |% N7 u2 m- k! I
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$551 V9 y0 A( ]8 c" _1 m
  1198. .ELSE( T8 y. O; c+ E/ A/ g, }  z% f
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00) Q, Z! G9 b* P& @; B
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
      L- G  }3 s( ^2 e3 o) i
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    8 }8 ~2 }+ A) c1 i/ @, V, N: n
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ( Y! ?: u7 V1 {: b3 Y
  1203. .ENDIF
    8 e9 t  P+ p6 y0 K. Q

  1204. * V9 F. ~+ o7 I# Z
  1205. ;------------------------------
    ) u1 C6 |2 q- N0 R5 R" l
  1206. ;调色板数据" z; o9 p; l& ]- k. d
  1207. Palette_Data
    ! O! C; S0 q2 B
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    5 o2 f9 |5 G+ m1 X, A# {! c
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F: K" r  T# K  U9 \2 K
  1210. 2 t) d: K0 P, S' {2 n9 f  f& ]- N/ Z
  1211. ;------------------------------
    ' p  O2 R; O+ |% G
  1212. Static_Text_Data( E8 I. i, P( G' n; w$ q
  1213. .WORD Static_Text_Title_Data
    6 u. c/ Q7 b3 W, d% Q
  1214. .WORD Static_Text_Author_Data1 y- W2 M+ X0 |! z$ S
  1215. .WORD Static_Text_Date_Data
    $ F; F7 H! y# h+ ]
  1216. Static_Text_Data_End
    7 G; N* I4 B- L  Q% ?' ?
  1217. 1 ]+ [! M9 L$ J+ ]$ l8 }# W2 Q
  1218. ;------------------------------
    ) d7 `" I, b, G, \
  1219. Static_Text_Pos
    6 S. Y. l% g7 K, w" k6 E: {
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)% W/ }% m7 K% U$ r+ B
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    ; m4 k" m5 w- f0 G5 c
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)# H, h9 X5 A! n- L  S
  1223. Static_Text_Pos_End8 ~& }0 F* @4 r- r( v+ @
  1224. ( P" e2 [* l9 O/ G
  1225. ;------------------------------
    " y: e8 {. m0 ^4 n; K5 I  I0 k$ H2 _" \
  1226. Music_State_Stop( M8 M3 I/ ]5 ^! R1 J: R
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ; L. |5 b8 S$ b- F  \( `. U
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00. u3 ^! q- I; n) {
  1229. ELSE  d7 A! g; S9 `4 @
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$000 Y8 g5 W& J7 r& K! s8 H2 \
  1231. .ENDIF
    . I8 W+ o" d/ [9 a* Y
  1232. Music_State_Play
    . j/ f+ i  f! s# N7 ^& E
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    " {/ Y7 `+ p- g4 o' B1 ]7 W, w
  1234. 8 `4 m2 O' |1 J- }0 @
  1235. ;------------------------------
    4 m+ `7 O' ?" @- d
  1236. Sound_Bar_Text_Data;声音类型文本
    6 h- |! g% I9 }) C& X; y
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    1 n1 H: t% j1 c5 P# ?. s' U% m
  1238. .DB "SQ1-",$FF$ D" U* J  v2 u/ x2 c' u
  1239. .DB $FE,"SQ2-",$FF
    # c6 I, V' r4 I1 L6 ^
  1240. .DB $FE,"TRI-",$FF$ c. X2 H* e* ?3 t3 @
  1241. .DB $FE,"NOI-",$FF
    ( d, y7 J& b' R3 G
  1242. .DB $FE,"DMC-",$FF,$00/ B0 c! M  z; g( F

  1243. ( c9 K& \6 n: J# _$ j- n3 K
  1244. .IF Track_Name_Pos& b; i6 t5 F( k- `
  1245. ;------------------------------* {# E( [9 l# c' b, J
  1246. Track_Name_Addr;曲目名地址索引. M! {" W/ ^: a* V* Z1 L' U" z, o
  1247. .WORD Trackr_01" a6 t, x. I; z4 R- k& z7 l8 K
  1248. .WORD Trackr_02
    7 Y( T7 ?) ~+ h$ s# I9 F
  1249. .WORD Trackr_03: o* n4 y0 R" y' K0 q
  1250. .WORD Trackr_04
    5 ^* Z; j' Y  N; y; i2 G7 H
  1251. .WORD Trackr_050 f' m: Y' o6 V$ |' }
  1252. .WORD Trackr_06# n3 q0 i+ T$ f# l7 y; F
  1253. .WORD Trackr_07
    " e* \0 r2 ]& W. A* W
  1254. .WORD Trackr_087 Q% ^: _" x+ x9 e) P
  1255. .WORD Trackr_09
    , c" v5 @" D" n1 }
  1256. .WORD Trackr_10
    3 n2 N0 Q$ r& Y$ D, D5 O& s/ U7 S
  1257. .WORD Trackr_11# G) M  ]8 k5 \$ s
  1258. .WORD Trackr_12
    & Y/ u. k8 r. F' ^; h
  1259. .WORD Trackr_13
    2 @( O) _. q. d9 }$ \% k8 d
  1260. .WORD Trackr_14
    5 B# D. Y$ p4 C# I: a2 [
  1261. .WORD Trackr_15
    1 u3 m1 h6 z1 z, x& ?2 z8 ~
  1262. .WORD Trackr_16
    2 Y. ~2 o% O6 U, N' i
  1263. .WORD Trackr_178 J/ v. ?3 u% a. w
  1264. .WORD Trackr_18
    8 Y) h/ z; W7 a; j' y  C
  1265. .WORD Trackr_19! \& l$ L- X) b- K( Y; S2 v
  1266. .WORD Trackr_20
    ' r/ ^: P6 I# b
  1267. .WORD Trackr_21
    / _2 a1 o9 t7 ~" b$ B3 s2 `' u
  1268. .WORD Trackr_22
    + ]8 A$ n' j& o* A# s; d$ x- X& [
  1269. .WORD Trackr_23
    3 f9 k6 j' K( M, A* {
  1270. .WORD Trackr_243 e& M% ^% `3 X0 `. u
  1271. .WORD Trackr_255 {6 ]( L( b4 e  G
  1272. .WORD Trackr_26
    3 C: }, ]) h9 X  a, p4 {+ w+ V
  1273. .WORD Trackr_27/ p$ O- \  v' m6 b; ~* K5 y" n) _
  1274. .WORD Trackr_28
    # O" d+ Q- n, X& j" R
  1275. .WORD Trackr_29
    1 F; C# ?" X6 z0 M, ~" r" [9 F/ t
  1276. .WORD Trackr_30
    " Y* H. j' z' _! z1 k  m2 _7 P
  1277. .WORD Trackr_31
    , r. t* {' v' v' j. k
  1278. .WORD Trackr_32
    2 m6 l9 L2 d$ m; t8 w
  1279. .WORD Trackr_33
    + i9 @8 g  s' f: J: `4 a1 q& O) K
  1280. .WORD Trackr_34
    8 e" h  }3 ~8 P8 N8 E+ J2 Y, O
  1281. .WORD Trackr_35
    * B" V! H% k/ h; I: \% A
  1282. .WORD Trackr_365 S; ?- Q. `3 j; I  c7 {. s
  1283. .WORD Trackr_37
    ; b  z! o$ s1 O# f
  1284. .WORD Trackr_384 F9 W) P7 l- L8 w6 e9 _  o' L
  1285. .WORD Trackr_39
    0 J* f2 }, r% ]  x  N. ^7 g9 n0 l
  1286. ) k8 g- D; D( s. I$ _4 M
  1287. ;------------------------------
    ; ?, _) V* g* M7 N, A- P, R
  1288. Trackr_Name_Data9 v4 N  |8 Y( y9 H. U
  1289. Trackr_01 .DB $05,"BGM 1"3 y& F9 G+ H$ U
  1290. Trackr_02 .DB $05,"BGM 2": J3 |" L8 r) p1 m: n
  1291. Trackr_03 .DB $05,"BGM 3"
    8 L  ~2 Z/ K+ I9 d- V+ ~' L9 T, L, D
  1292. Trackr_04 .DB $05,"BGM 4"# k; ?1 S* ?* N  \
  1293. Trackr_05 .DB $05,"BGM 5"- H. c# U% S; q1 t$ x0 E% j" {
  1294. Trackr_06 .DB $05,"BGM 6"
    8 F' m$ h. e: V  R
  1295. Trackr_07 .DB $05,"BGM 7"
    9 U2 \8 U, R0 m. V
  1296. Trackr_08 .DB $05,"GREAT"
    - f* p$ e; y" I, W3 c2 n
  1297. Trackr_09 .DB $08,"BOSS BOM"
    ' k, @5 ]: @8 a* M0 L
  1298. Trackr_10 .DB $08,"BOSS2BGM"' F7 Y% Z; }5 {! K# |" w/ [
  1299. Trackr_11 .DB $07,"P CLEAR"
    7 [& D2 p' ^. r& K: I0 v* M
  1300. Trackr_12 .DB $07,"A CLEAR"- Q$ A- }2 O9 g8 F
  1301. Trackr_13 .DB $04,"OVER"0 R7 @6 x4 Q8 ^0 r' Y) e) o& h  f( }& V
  1302. Trackr_14 .DB $06,"ENDING"
    3 [4 O3 x! t2 Z9 r
  1303. Trackr_15 .DB $04,"SUTA"! [7 k; c8 ^3 c& L
  1304. Trackr_16 .DB $07,"THUNDER"- G& b5 A+ |2 ?' t' A/ c5 g" f
  1305. Trackr_17 .DB $04,"SHOT"
    8 Q! {# p* e& }+ x. l1 u7 d
  1306. Trackr_18 .DB $05,"LASER"0 R0 n: R3 E/ f: A( h5 i
  1307. Trackr_19 .DB $06,"SPREAD"
    9 C' |# l2 b7 f8 Q5 n
  1308. Trackr_20 .DB $04,"FIRE", Z. {) [' u# J, f
  1309. Trackr_21 .DB $06,"B SHOT"
    7 }1 d: r- b& @
  1310. Trackr_22 .DB $08,"T DAMEGE"
    , y# Y. K! p$ K" H5 m
  1311. Trackr_23 .DB $07,"HARETSU"
    5 u) f5 D7 O5 W2 D8 [+ a
  1312. Trackr_24 .DB $05,"T OUT"
    % I2 ?2 }. A& D
  1313. Trackr_25 .DB $05,"Z OUT"" f1 U' j3 K: \6 v' v) I
  1314. Trackr_26 .DB $05,"A OUT"
    - k4 g* v9 t# q  ?  B7 E2 S
  1315. Trackr_27 .DB $04,"ROLL": L! }% \4 w* |& D$ n3 v
  1316. Trackr_28 .DB $06,"APPEAR"
    5 E5 d" Y- e7 s2 T/ w
  1317. Trackr_29 .DB $05,"POWER"$ v  z7 N2 X8 O9 a1 s+ K
  1318. Trackr_30 .DB $07,"BOKK BK"
    ) z) J( b( M( e% ]: Z' I
  1319. Trackr_31 .DB $08,"BAKUHA 1"! h& v# u8 K3 H; p+ j' L7 ?$ n! S1 U& T
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    ) M- L1 ?- z- t" x+ i$ v
  1321. Trackr_33 .DB $05,"ARUKU") j- j, [, \! Q( T
  1322. Trackr_34 .DB $06,"JIWARE"4 e/ k! [% m* ?' b: Q1 z
  1323. Trackr_35 .DB $05,"SILEN"
    ! o& M! N9 ]8 h# f: Y7 w' k; U0 A3 o
  1324. Trackr_36 .DB $05,"P 1UP"- \2 G. }& n2 i" d6 E/ u
  1325. Trackr_37 .DB $05,"P OUT"( ]! ]# [. w) q* z( V+ F
  1326. Trackr_38 .DB $05,"B OUT"
    3 q  w4 O. P$ j
  1327. Trackr_39 .DB $05,"PAUSE"
    ) P; z) B5 d% O0 r  a

  1328. ' B% w( S9 s* _- G7 }
  1329. .ENDIF! M* k" @) K% L; S$ q

  1330. 5 p# f9 _4 O  x2 E
  1331. ;------------------------------8 T- S1 y! u/ x  S# s$ e
  1332. Static_Text_Title_Data;静态文本数据
    ! }2 X7 ?  W1 [' c0 ]8 H# P9 f% w
  1333. .DB 12
    , ]" b' J8 P, L3 l" o
  1334. .DB "SUPER CONTRA". J0 K" w5 I1 t4 g3 s
  1335. Static_Text_Author_Data1 B: k! c- s9 w- q0 U) P
  1336. .DB 23
    ' u& R! b6 ?% C% c
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    % _6 J$ `" [' k/ q* Q
  1338. Static_Text_Date_Data
    : D5 g7 k3 u; P8 k- z, l. N1 O
  1339. .DB 108 P$ @' x" k0 i0 t7 d( u# a
  1340. .DB "2023.07.11"
    . v- s9 p0 y% M! L% O" n8 ^$ g/ k4 L
  1341. 9 ]1 p* C. p% o& X# O9 `
  1342. .BANK RESET_BANK & BANK_DATA_MASK% K% ]$ x. _! g; S
  1343. .ORG RESET_ADDR" F! n+ F2 D: Q6 u" N

  1344. 5 }* q# a+ o! [
  1345. " O# |5 ?/ l: o
  1346. ;==================================================% r  f0 K* H( Z) g& s9 o% P* {) j& |
  1347. ;切到主程序bank
    - i) a9 i& Q" N
  1348. SwitchMainBank
    % N  ?" `) a$ s- L: R
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ) Q) ]- ]! n4 X( g  I( L# S
  1350. JSR SwitchBank8000* i4 J$ E6 D6 `" m+ U
  1351. RTS
    : ^+ U& q0 _: z
  1352. 3 Y5 m% \+ A8 Q6 _" g
  1353. ;==================================================
    5 I) o- V, s3 g( g/ I3 v/ ^, ?
  1354. SwitchBank8000;切换bank到8000-9FFF
    " [/ N" H/ j& |+ J% F1 E
  1355. PHA
    + G" Q/ N. h& d
  1356. LDA #$06
    $ [5 z+ W8 D- A, G/ C5 g* i
  1357. STA MMC3_BANK_CTRL$ S) Q2 f/ O% h9 a
  1358. PLA
    5 Q& f6 o' @/ Y& k' [
  1359. STA MMC3_BANK_DATA) i5 d+ g1 y' F" p/ T8 ]* z
  1360. RTS
    - ~% @4 X2 K. T5 `4 N
  1361. 9 X* d1 l: J. i% G. u; U
  1362. ;==================================================
    9 Q) C% W% h& x9 G0 P0 e0 f+ J
  1363. SwitchBankA000;切换bank到A000-BFFF6 X4 Q3 b# {6 z0 }+ p! S) f1 v
  1364. PHA
    . N% ~% w" _$ D7 }. H: a" s
  1365. LDA #$078 t, e$ e, q7 m# m
  1366. STA MMC3_BANK_CTRL. j8 `' Q+ A: s7 ]4 H% X. a0 c' P
  1367. PLA* L8 [& k* S; v7 ?  T2 M" R
  1368. STA MMC3_BANK_DATA8 O3 P. e0 |  }6 s
  1369. RTS0 r+ _: e! g' s8 u

  1370. 9 i7 u& q# @0 a. P
  1371. ;==================================================/ W7 J- C; }" ^9 j
  1372. Sund_Bank_Init;音乐bamk初始化0 l6 M7 s* j7 e- {! O2 M0 j
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    : w' [, }8 i$ S
  1374. STA Music_Bank_8000; p* G0 T  q/ D: Y! q- k
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK8 y6 D, i, F9 `8 _7 C! R4 F
  1376. STA Music_Bank_A0001 g, a8 n3 w4 n
  1377. RTS
    - ~& t1 Y6 _3 W* c1 w+ }. _" _

  1378. # T: Y: J% I% v7 G
  1379. ;==================================================9 z4 ?% X& P. _8 y0 n+ K
  1380. Sund_Bank_Set;切换音乐bank
    " o1 |) ]2 O/ ^' d9 W( O( a
  1381. LDA Music_Bank_8000
    , y, J/ m+ {2 b' q/ U
  1382. JSR SwitchBank8000
    6 w' ?* m6 |6 y3 m
  1383. LDA Music_Bank_A000# v1 }, c) K4 z
  1384. JSR SwitchBankA000' U! w3 r; J* g+ ?" N. R0 R
  1385. RTS
    0 b$ ?1 x' {# T8 t

  1386.   x/ T/ B2 z% l
  1387. ;==================================================
    , `6 n: c0 P9 h7 l+ q
  1388. Sound_Init;音乐初始化
    8 I2 M9 I" C! m
  1389. PHA
    0 u0 u1 `  B0 S# m& C: a
  1390. JSR Sund_Bank_Set: J' u- Y2 y. R8 L* s" u
  1391. PLA1 j* U6 t1 n9 q, D! B; K/ X( W8 g
  1392. JSR Music_Init_Addr
    4 l+ B. @7 W3 }6 h/ u3 F
  1393. JSR SwitchMainBank$ Y: J( z- j2 g  n4 w4 d% Z
  1394. 1 E( @- ]9 Q' Z$ @
  1395. JSR Music_Bar_ReSet7 t5 V! E" n2 R/ u: X  D3 T* J
  1396. JSR Time_ReSet
    * g. q) B. B9 m
  1397. LDA #$006 t* G5 J# Z9 ?2 P* b2 E# o
  1398. STA Music_State
    6 l$ S' t/ t) m9 t1 F
  1399. JSR Music_Stata_Show0 V: s/ e0 F; ^9 ^7 ~
  1400. .IF Track_Name_Pos
    ( R) W& q6 b4 _9 T, @  w
  1401. JSR Show_Track_Info' X2 K% L0 p! e. A) y2 `
  1402. .ENDIF2 N* j$ ~# x* i8 v' y# p+ B  B' t

  1403. , Q" ]  L- V8 T$ O8 ?0 y1 v
  1404. RTS
    $ n9 S1 y3 b, v$ O/ a+ n# E
  1405. % I  U- j& j- n$ H$ Z( F; q' f
  1406. ;==================================================) {6 m, S. p) i# x- h) r/ l
  1407. Sound_Play;音乐播放
    " [: |  z$ F5 Q8 f' L
  1408. PHA
    1 \" h  V% k) t8 V# M
  1409. JSR Sund_Bank_Set
    " B) ]/ {+ o1 |8 h9 K0 h1 Q
  1410. PLA
    1 A) v) a. n" {* m/ L
  1411. LDA Music_State
    ; Q1 O9 ?; X3 a% h$ q7 ^  ^) c9 o
  1412. BNE Sound_Play_End
    ( }" g% V4 |4 B& U4 L# A) ^
  1413. JSR Music_Play_Addr& ^, H; f1 A% U; L3 E! y6 z% ^' R
  1414. Sound_Play_End  D5 o& i% q! e) K
  1415. JSR SwitchMainBank
    % Y# G  i, @7 @- k% d! |
  1416. RTS6 C$ o7 w4 V2 [" ^

  1417. ; O5 h# f4 O6 f2 y( R. ?
  1418. ;==================================================
    - a) k% w0 Q3 Y: s
  1419. .IF Music_Reset_Addr6 K  D! a' Z0 ]
  1420. Sound_Reset;音乐重设(如果有的话)- X! x' `# H$ D" k4 O3 M
  1421. JSR Sund_Bank_Set
    3 d) p/ Q# H) n$ Z
  1422. JSR Music_Reset_Addr2 X( g& [# q4 q/ l5 s; P) a
  1423. JSR SwitchMainBank
    % g& \# t( i" d! V* s
  1424. RTS$ `/ M$ V! O6 T/ o1 X
  1425. .ENDIF" t: m3 y! \* c# T3 B8 T7 c# g( ~7 E3 J

  1426. 8 M  L. U! M- r, v
  1427. ;==================================================
    + d3 L( G' B9 }( [/ F4 T3 G" `- X
  1428. MainLoop;死循环
    ! r% T  @. s$ j3 D: o: K
  1429. JMP MainLoop1 x5 G4 |5 R0 V0 D* t2 t  x: U* F
  1430. . ^  i9 {/ }9 U; _0 \! v6 g4 P
  1431. ;==================================================. {6 Q5 t' y7 B0 y$ U
  1432. NmiProgram;Nmi中断处理  E( @" T5 t9 N. G0 e! k3 }/ t9 W
  1433. PHA  T! k% H/ l# W7 J& n$ C
  1434. TXA- w8 X, x3 Y& L0 O5 n4 A7 ]
  1435. PHA
    8 P7 S& K7 h: M& e) T2 x2 U- X
  1436. TYA- K" q6 |& Y; ~# Z% h! F% c4 V
  1437. PHA  W) s, `: h3 Y5 [+ o

  1438. ) b0 N0 Y- Q1 h8 O, @
  1439. LDA PPU_STATUS
    4 Y' A" x. O( t
  1440. LDA #$00
    2 A9 a- Z0 X& y" [
  1441. STA PPU_CTRL$ I% d# d2 G9 F/ z

  1442. 6 k! ]! `" U' k
  1443. ;切换主程序bank6 W; L) @/ W4 B  t6 o# C8 V' v/ ]
  1444. JSR SwitchMainBank6 b9 C6 p5 s; [; M; T

  1445. 8 ?! F8 ]" j* o/ k
  1446. ;NMI处理' A/ l/ p9 m: O$ g
  1447. JSR NmiProgramProcess
    5 j2 {) S% \9 T% Z! h
  1448. # G: c4 Q+ H: b/ L
  1449. Nmi_Proc_End/ J* p% I- |+ s$ U. n/ b
  1450. PLA
    ( T  v- B- C3 n8 J: a
  1451. TAY# G; P0 p' t' y9 ?1 u: h0 P
  1452. PLA
    % m" d* T( p# \/ y7 g! V
  1453. TAX/ m- _& I2 k+ l0 [* ~0 c
  1454. PLA
    " {- I1 V- x  c; u8 E
  1455. ( y/ t; d# B' n5 Z1 W$ B& G3 B0 z
  1456. RTI
      s4 Y8 A% f) s& `! w

  1457. 9 F8 E: P0 C; d- {7 ~4 S
  1458. ;==================================================
    4 B5 v" }( ]# u# f4 |% q0 W
  1459. ResetProgram;重置中断处理
    ' [2 T5 i% u2 j! I3 o7 k- F7 H
  1460. SEI
    5 y( R/ C8 |9 F) C( K' Z0 R4 I
  1461. CLD" W- G  L7 E/ u& [( B: t2 z! @
  1462. LDA #$00
    . Q2 ~  g  s0 O1 y0 d, _+ P* Q# K
  1463. STA PPU_CTRL( E) w- A$ G- P3 q! d9 H
  1464. STA PPU_MASK
    - k9 B- ^* W, j
  1465. * h- J( T3 j2 }. U$ D  @) J
  1466. JSR SwitchMainBank
    7 f7 Z( m' u& B3 P; t! x! ]
  1467. JMP ProgramBegin
    9 q0 p$ v0 E' U2 `% c: [( r

  1468. 5 }$ O- H6 @! [/ R8 }
  1469. ;==================================================/ H, n' f$ ^% i% u5 s  \
  1470. IrqProgram;Irq中断处理
    6 y0 o: k$ r% s
  1471. RTI5 H( Y9 K8 C" d& s4 P

  1472. ( I; }8 ^. h9 K7 A+ B* ^
  1473. .IF SOUND_BAR_SHOW_ENABLE
    2 a  F& j5 d' a/ w7 m1 _2 S2 [
  1474. .ORG $FF80( S' o! g% W' V; ?1 [- D; |9 B
  1475. STA $4000,X( [. k2 {1 ?7 K7 |  o0 ]) b, ?
  1476. STA Sound_Bar + $00,X
    / v% D% @& N& \$ ?) y) o# \
  1477. RTS& C4 l- k- M* ^4 G. L
  1478. - l3 n8 Y/ O+ V; P" b9 t! M
  1479. .ORG $FF88, x5 N* h1 @: |" m
  1480. STA $4000,Y6 P0 C# K/ B. J
  1481. STA Sound_Bar + $00,Y! ], O. H6 \7 @! I! `$ ~
  1482. RTS% z6 r) a3 O& A# }

  1483. " [- S; z2 |6 j3 c- O4 J
  1484. .ORG $FF90
    # P1 \6 \- R+ K* P( z# H, u: \0 X  F
  1485. STA $4004,X
      K# ~8 O  R4 y6 {5 \. ^, c" [
  1486. STA Sound_Bar + $04,X! F" j# C9 l1 e/ Y+ e
  1487. RTS
    8 w6 f* q9 t8 W

  1488. 9 L, f: i7 M$ |) s3 i- W
  1489. .ORG $FF98( w3 Q) g4 S8 T* x: P: I
  1490. STA $4004,Y8 T0 ?. v5 ]0 I' o
  1491. STA Sound_Bar + $04,Y" N1 N' a( P8 T4 q8 W$ |
  1492. RTS
    & r5 p! M; l. Y/ _

  1493. - m1 _- h$ L( i) G; K9 ]& _
  1494. .ORG $FFA0
    7 P/ `9 V/ M0 M6 n. F) ~) Y
  1495. STA $4008,X
    # Z* o" e+ H9 H
  1496. STA Sound_Bar + $08,X6 d+ j8 v" b7 @  Z
  1497. RTS  a  G6 l0 z9 z

  1498. # h1 c2 f2 Q0 D8 j; Y0 g% h
  1499. .ORG $FFA8/ u( o& H: e, l4 v7 D, S; K$ t
  1500. STA $4008,Y
    0 L: V# P4 I" w, Y* S0 p/ E
  1501. STA Sound_Bar + $08,Y, G: Z& Q) H- w" j! Q
  1502. RTS8 Y7 E  D. U2 n$ r: [6 _* N& b
  1503. $ P" {9 |; w2 V- M
  1504. .ORG $FFB0  f6 \6 a7 U4 p+ V0 U! y* ?/ w
  1505. STA $400C,X. w. Z( i: C; ?" l- A
  1506. STA Sound_Bar + $0C,X
    . N$ U! p3 Y4 D* j2 Z" |/ D
  1507. RTS
    - m7 m# \' L/ n* q( W

  1508. 3 W- |3 [% ^+ L9 e" K; h1 |
  1509. .ORG $FFB85 x2 ]0 `" S. I$ B1 L" O" b+ f
  1510. STA $400C,Y" _5 a) a2 {* G: L1 S
  1511. STA Sound_Bar + $0C,Y+ ~, x/ R- v6 V) k6 x0 f. v' ^
  1512. RTS
    6 c6 [/ u/ b' {$ c+ C0 \8 R
  1513.   `( y. q7 s+ [3 w
  1514. .ORG $FFC0+ C/ O" z9 r) f  O6 J5 s$ f
  1515. STA $4000
    & L9 s+ t/ ^4 `% P5 o& G
  1516. STA Sound_Bar + $00
    / F  ]" G* G. {9 r8 a3 N1 G; t
  1517. RTS/ f' ?. r. D1 v& k+ L, k

  1518. . m0 ~1 l- `$ I" `) O8 }# `
  1519. .ORG $FFC8. j' F( M' C; ~  ~
  1520. STA $4004
    : v+ w4 l6 v, _- F' d' f) Z/ Y9 ^
  1521. STA Sound_Bar + $04
    2 V9 @8 C; g+ s# W; D7 w) R
  1522. RTS4 E$ T+ E' Y6 L! Y6 D3 z$ y

  1523. 3 _$ D; F8 Q3 ?* }- G5 P
  1524. .ORG $FFD0
    + j. z1 n3 U+ d5 V. Y- _( B9 E
  1525. STA $40082 ], w+ ]( g; j! C. n9 y" j
  1526. STA Sound_Bar + $08
    + R5 [& D5 A2 }% q) k7 z
  1527. RTS
    2 B0 m; P: o* w$ x/ j8 ]+ b

  1528. 7 D8 a. ~! k2 T
  1529. .ORG $FFD8; E0 |& p! b' J2 F) n6 |& Q
  1530. STA $400C6 ?  }! T- _2 E8 u
  1531. STA Sound_Bar + $0C7 N6 Y* }( N3 Q8 E7 {( D7 v/ R  \6 ]8 x
  1532. RTS( Q( n6 }8 \, z/ W3 V6 B9 F: e
  1533. ) b% n* ?. T1 a: ?# j
  1534. .ENDIF
    ' {- x8 n/ E) ~" k, [
  1535. 7 Z; y* d9 F" o) i0 C5 c2 t0 H
  1536. .ORG $FFFA
    # J2 y0 Q4 ?" V' j4 b  W
  1537. .WORD NmiProgram3 q8 c, K% N! B1 v
  1538. .WORD ResetProgram* S! g& O: v; r) W+ {7 n
  1539. .WORD IrqProgram
复制代码

. `* u3 m5 v) r
2 W2 @3 w" c6 J3 p
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1212 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3199 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 08:15 , Processed in 1.094726 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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