设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
. D- G8 v" e. Q; [2 |+ n
8 x7 a# H7 B) c/ p1.魂斗罗1 r5 g$ ^/ R1 |+ N; u
2.超级魂斗罗
- K* i+ }) M9 S* Q+ t2 }3.赤影战士# \! u- K) Q9 D
4.忍者龙剑传2& q) J" Y+ ^8 z
3 f) [# [& ]  O

0 y& r/ v6 w5 ~$ ~, t6 S
- J# J: ^4 S4 t* {4 s( \# z( P% ]$ Q
源码:+ t+ t3 _3 ]* Z+ X" s/ M* _- ?
  1. ;[FC音乐][播放器模板]4 i- y5 l: e/ O
  2. ;FlameCyclone 20230710. v% Y3 H- C+ x, C
  3. $ g; }: U/ e! c; _% ]
  4. ;文件头
    2 q, a- ~# D; M
  5. ;======================================================================4 H0 H6 u2 c( {) ^/ o7 \8 ~7 C
  6. .INESPRG 4                                              ;16KB PRG 数量2 D# g: ~' P7 D5 G; x
  7. .INESCHR 0                                               ;8KB CHR 数量% _  n, A7 d+ Y) I; o! o4 D
  8. .INESMAP 4                                                   ;mapper 4
    $ Z8 [: W6 f) p: A  t0 g9 S
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直- M( Y7 k" m% J

  10. ) X1 @+ G. N! f9 C
  11. ;==================================================
    7 x. p7 S" L3 }
  12. SOUND_BAR_SHOW_ENABLE       = 1
    * M( m4 J& _, H' ?6 r2 E
  13. ;==================================================
    7 N1 G0 m7 a: B+ ^
  14. BANK_DATA_MASK              = $07
    1 `6 k! }8 A* o7 h6 N' b0 R
  15. ;==================================================; ]3 F' N0 b# e
  16. SOUND_DATA_BANK_0           = $00
    ; ~  q* a7 N9 |, U# r
  17. SOUND_DATA_BANK_1           = $01) J6 A7 r) g0 @- }. W
  18. SOUND_DATA_BANK_2           = $02
    8 t4 a7 F6 v' [
  19. SOUND_DATA_BANK_C000        = $06$ q5 Z, x% {8 p
  20. ) g, b  D  ?: r3 k5 r/ D3 H/ C
  21. ;-------------------------------------------------& _' r$ a) y; m. X. p' u" ?
  22. CHR_DATA_BANK               = $04: r3 q. B8 j6 [: h, F: M
  23. CHR_DATA_ADDR               = $A000
    9 t% P/ Y: Z& s5 B7 t/ J
  24. ;-------------------------------------------------1 T9 N7 S" p) V. ]: X. [; k2 ?
  25. PROGRAM_BANK                = $05
    9 t: p" p: j: W% {) C4 T
  26. PROGRAM_ADDR                = $80008 H6 X- @$ @  i3 m
  27. ;-------------------------------------------------* r5 `8 T' _% V/ x9 q( U1 R
  28. RESET_BANK                  = $077 W4 g& R% D8 F2 i. e) L
  29. RESET_ADDR                  = $FE008 r' x7 V- ]9 [4 c
  30. ;==================================================) f( L3 P$ |: Q3 @6 w
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    ) R: X* ?) N2 s) F0 K
  32. Music_Play_Addr             = $813C ;音乐播放地址9 s8 a, l8 X; h" q: [; M/ @- t4 N+ ]* G
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
      z- C% s$ a, C2 Y: f
  34. ;==================================================
    - ]( i  {/ }/ k" [$ V. c9 ~7 F  Q2 a
  35. Music_Song_Total            = 039  ;全部曲目总数1 z8 [  Z: y$ B. R" e4 ?. k; A5 Q
  36. Music_Start_Song            = 007  ;初始播放曲目
    6 ?9 }# \1 J5 D8 T) q2 F
  37. ;==================================================% s! I, }5 L" G& i( A) ^

  38. + p7 [1 w/ K/ [3 M# h
  39. ;==================================================, ^3 {" P3 `9 E( R  u9 F
  40. Title_Text_Pos      = $210D ;标题文本位置
    9 ]* Y3 a: K  ?. T
  41. Author_Info_Pos     = $2284 ;作者文本位置6 j1 t' i& b+ D  R+ E
  42. Date_Info_Pos       = $22CB ;日期文本位置
    2 F# g" a: K( y8 t; M
  43. ;------------------------------
    3 c) V  V- H. I
  44. ;------------------------------
    $ Y9 h) M' K( k
  45. .IF SOUND_BAR_SHOW_ENABLE$ f; {% ^$ f$ G/ L
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    $ f3 L2 l: Y! B( N
  47. Play_Time_Pos       = $21F3 ;播放时间位置7 H+ d! R  E$ V/ E, J$ U1 {2 L
  48. Play_State_Pos      = $2233 ;播放状态位置
    3 K+ }3 F. f( B. B1 I
  49. .ELSE
    # K0 E' h5 n7 t0 k9 T$ q( q* \
  50. ( D! Q1 e0 x/ [0 a: x8 X
  51. .IF Music_Song_Total > 99
    + H; F! ?% V2 D1 |
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    4 S( E$ q9 n( h8 Y! z1 r: i" p$ t
  53. .ELSE* P$ i0 {7 c4 u7 {
  54. / ~0 W2 t3 x% ~
  55. .IF Music_Song_Total > 9. v; p1 Z/ N, t4 ~
  56. Play_Index_Pos      = $21AD ;当前曲目位置2 T  X/ Y# R' k! y" n% Z
  57. .ELSE# w, K2 U3 T/ k0 ~5 ~% `
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    ! K0 k# @. H# h8 x  U
  59. .ENDIF3 M3 J0 p& D! u

  60. : O( T7 l( e7 C# F( x7 b, ]
  61. .ENDIF4 r  H# i6 @/ ^6 N
  62. 1 l5 ]( p5 i/ S0 T

  63. % o& {' L/ b3 B' v- w" _: B! h
  64. Play_Time_Pos       = $21EC ;播放时间位置
    + {# r4 m, J0 Z
  65. Play_State_Pos      = $222C ;播放状态位置
    0 [& m% g6 t6 {
  66. .ENDIF# A! K9 z1 D- m+ ~
  67. ;------------------------------
      Y* H. l/ {& k$ f1 J# ]
  68. Track_Name_Pos      = $216B ;曲目文本位置0 T) _1 x$ G' p2 T: A+ ]7 o5 ~
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    4 x8 T4 M% O1 P. f, x
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    / y/ \+ F7 N' e% _
  71. ;==================================================  w/ B( i) [* {3 x
  72. Scroll_X = $00$ l$ W! b1 t; s8 w, m
  73. Scroll_Y = $06+ Z' P% f, Z9 W
  74. ;==================================================4 C7 o! H- R' G
  75. RAM_Cln_1       = $0100$ R0 f* ~# c* X, C. @- X
  76. RAM_Cln_1_Size  = $802 i. j" X5 o! o7 l$ X+ R
  77. RAM_Cln_2       = $00E0
    - E! p) }+ J# T; O5 G
  78. RAM_Cln_2_Size  = $205 C' g0 z2 W2 X
  79. RAM_Cln_3       = $00E0" v- F9 F# U) s2 z+ D. b
  80. RAM_Cln_3_Size  = $20
    - i! t; L% M  k1 U/ P0 E0 M
  81. 2 _0 J( V$ R7 e% D
  82. ;==================================================8 t3 o  n4 b9 x1 K2 Y1 o# V! L
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    2 A+ |/ J1 _+ F  X/ n5 z% {+ S
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器8 X0 j1 Y3 p, a" Z
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    & ^  T7 o( L6 O6 _* a/ l
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1; ~& n1 L4 ?5 n$ v3 ?) m) }4 }
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加19 p8 q2 C* W: a3 Z. K* Q3 Z
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 5 J' e+ O$ L& Y7 z7 G. N+ L. u
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    1 g. \2 \: P8 R3 I1 e
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 ( b- u2 p; j, T
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    2 Q7 L2 s/ _+ W1 R% g' X2 x2 V  s; B. N
  92. APU_STATUS              =   $4015   ;声音通道切换
    ; u# r- y0 w+ p5 J( C0 m
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    1 c0 N+ x# W9 N
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通2 w' C, k; ~( W4 H
  95. ;==================================================
    ) j& y7 H5 }1 U$ k7 Z# F1 C
  96. MMC3_BANK_CTRL          =   $8000: g( k, H' H; M4 _* d  ^
  97. MMC3_BANK_DATA          =   $8001, |* |4 m5 W  f) Z( Q3 k- P
  98. MMC3_MIRRORING          =   $A000$ I! }1 j6 Q1 O9 i& N
  99. MMC3_PRG_RAM_PROTECT    =   $A0019 x' W0 M( j$ F7 K6 a; b
  100. MMC3_IRQ_LATCH          =   $C0005 V1 q9 T# p/ X; j; t. `
  101. MMC3_IRQ_RELOAD         =   $C0013 k  m0 v& |, h+ s! K: n4 r
  102. MMC3_IRQ_DISABLE        =   $E000
    ' D' f3 G- X  W4 ~$ b0 W
  103. MMC3_IRQ_ENABLE         =   $E001, b  m' k- K& t1 Y3 M- Q
  104. 3 t  L/ _$ h3 O) E9 u" s
  105. ;音乐数据块
    3 O- o3 J: A8 j- t: ~: @

  106. $ w. t0 X6 T, R* c1 ~4 O3 |1 ^1 e$ g
  107. ;======================================================================9 y1 A2 H, s$ h$ x7 [: _
  108. .IF SOUND_BAR_SHOW_ENABLE
    ) [8 F: p( Z+ O
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    - B0 I3 r1 F) _! ?2 V7 ?3 g
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    ; \* {* k' w" a1 D' g( A+ P  }" b

  111. # o5 W5 ]8 W( O( ]! l/ ~
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    1 F3 G3 G# m' N  l" C: b
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    - b# c  U$ N& `8 }6 Z4 W2 U0 \' a/ q
  114.   N5 C) `. P2 b4 T% f! d1 F
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK& K/ a" ]( |7 f4 I0 |
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    6 @9 p4 m2 {) g) f

  117. - v* v: b, q, s& ^
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK# t: c: r# N7 [7 o
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    ; C$ U5 ~7 w3 H) |# V
  120. " ^( R3 R* ^* b9 K5 t  j
  121. .ELSE
    + J  S2 L! i3 ^
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK9 Q0 @1 N, p7 B. a4 l
  123. .INCBIN "sound_bank/music_data_0.bank"
    / J/ Z- E) ]; o3 f% X

  124. - b' b! e0 d. F" [& o/ [0 W1 \
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK% i# T* F& i, F: d0 _  a; }, ~& U
  126. .INCBIN "sound_bank/music_data_1.bank"
    0 U+ L3 H: n; Z7 {, f

  127. ! U' X4 y# T* Z4 s; P
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    $ N* Z+ U: n9 _. o4 ~0 A; `
  129. .INCBIN "sound_bank/music_data_2.bank"9 s. p$ O- f# ~  q" M

  130. . b  T/ D' N$ E
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % C' I$ Y( X  o
  132. .INCBIN "sound_bank/music_data_3.bank"
    - p% H/ S. l9 E: ^% ?. J; f; S
  133. .ENDIF. M! D% Z3 z( W, g0 S4 c6 `
  134. ! B6 l. ?$ Q3 q7 e8 ^
  135. ;CHR图形数据& v& Q3 o  c6 a
  136. ;======================================================================! {; ]1 A) @" W% x; F' J
  137. .BANK CHR_DATA_BANK
    : E. F6 ^4 S3 H# g" I
  138. .INCBIN "chr_bank/chr_data.chr"  ]) q$ a) F5 G! K: h) D5 l# d

  139. % e! U. i  Y$ x5 G
  140. ;==================================================' I. t9 v! F! J* z4 M. B
  141. PPU_Addr        = $03002 w/ z6 p9 l. Z& H
  142. Palette_Addr    = $03C0
    % f% v3 [$ Q  F: u- U
  143. Sound_Bar       = PPU_Addr+$E05 G0 T# M' n' V4 h! R0 ~, T
  144. ;==================================================
    8 {: Z  P, K4 h% O
  145. Palette_Update_Addr     = Palette_Addr+$0D% F; Y2 b$ W% ]9 T
  146. Palette_Update_Max      = $2C" f, u/ [4 U9 q8 }, U. _
  147. Palette_Update_Min      = $21/ U  |2 t$ \8 Y1 v7 n1 ?' r1 v' |
  148. Palette_Update_Interval = 60
    & y, h0 _. m9 q( F2 G! X/ \
  149. ;==================================================$ @  y' f* a6 J# g! K) m
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    ! ?& n/ @, `& G' x2 X5 n& H0 {& ^
  151. Screen_State        = Sound_Bar_Cnt+$01# Y5 t) ~$ i/ a% h
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    : A% H  C5 C1 \
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03! A5 }( V% c7 [! y+ y
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    6 w! i& l$ C+ A: j( t) ]* c
  155. ;==================================================
    3 V5 V% M+ r2 J- R
  156. Data_L              = $70
    2 Q" |$ }5 V! S6 X  [# Z7 i3 }, p
  157. Data_H              = Data_L + $01' G/ F  z' _, I. K' g2 s
  158. Data_Cnt            = Data_L + $02* k$ r9 L! t! O& G7 T. |& d' |* \
  159. Data_Buf            = Data_L + $03" s$ u$ i& e+ }4 e, Q( g
  160. Time_Wait_Cnt       = Data_L + $04
      c$ `4 `) m/ m5 H: }7 [
  161. Palette_Wait_Cnt    = Data_L + $05( j" o9 a+ g, }
  162. Palette_Update_Flag = Data_L + $064 P; j1 L8 t1 Y9 P; [
  163. Show_Track_Name     = Data_L + $073 d# j: H5 O9 e& R  K' Y
  164. ;==================================================7 L; E2 W5 a! A6 O8 p. U
  165. Key_Keep            = Show_Track_Name + 1
    7 O& W9 p# ~9 n- j! i
  166. Key_Once            = Key_Keep+$012 t9 t6 e9 e0 n4 w9 S) B( t! W
  167. Key_Kemp            = Key_Keep+$02
    & S" P4 J- T# e, \
  168. Key_Temp            = Key_Keep+$03
    & o& i9 d% E1 H
  169. Key_Getv            = Key_Keep+$04$ \# e% K8 G3 I" Q5 d
  170. ;==================================================* a/ \8 Q  t7 Y7 w! x6 M+ Y' N4 `
  171. Music_Cur           = Key_Getv+$01, C7 x6 p( Y% Z; k4 _& }
  172. Music_Last          = Music_Cur+$01
    # i) L) L/ e, l4 b- o
  173. Music_State         = Music_Cur+$02: t1 [4 n7 I3 H0 I4 [! c" D
  174. ;==================================================( }  u* _) C' {7 m
  175. HEX_Data            = Music_State+$01
    5 c3 U' F% B6 y) ?& ^" r
  176. DEC_H               = HEX_Data+$01
    & E# V) G3 u- ~3 S4 j
  177. DEC_T               = HEX_Data+$02/ D" K' s5 K) ]8 H* b
  178. DEC_L               = HEX_Data+$03' y- ~5 [- \  e8 s) G
  179. ;==================================================9 A0 ]' i% F5 q& L5 j
  180. Time_S              = DEC_L+$01
    4 C7 J; O* _0 O3 l
  181. Time_M              = Time_S+$01+ G/ Y8 G6 T: L( g7 X5 _
  182. Time_H              = Time_S+$02/ [# N& C. m4 I0 K6 ]1 i
  183. Time_Cnt            = Time_S+$03
    ( V- U0 A3 x4 H# Y3 q6 i

  184. ! r) Y8 R6 K' q3 {
  185. ;==================================================. c9 \( i# j: o& r
  186. Music_Bank_8000 = Time_Cnt + 14 w0 k! O0 _, q3 R8 O; G
  187. Music_Bank_A000 = Music_Bank_8000 + 1$ {  |. a3 K( \) `8 e$ I
  188. ;==================================================# E9 d- q) c7 E- F3 z6 e% [- ?

  189. 8 y$ N( T$ r3 U9 N, g' u; Q
  190. ;======================================================================3 H# {8 b% j; v1 ~, g; X- h  C3 ^
  191. .BANK PROGRAM_BANK$ p6 w0 x# U5 E  D; d0 R
  192. .ORG PROGRAM_ADDR, ^% S2 b! ]4 U& m2 Y! ~# U
  193. & h8 d6 {+ C5 J
  194. ;==================================================! ]0 G0 U/ i# g1 q! A4 s" n
  195. NmiProgramProcess;NMI中断程序处理7 Z8 |8 C1 o& ^) m) q6 b0 i
  196. ;处理PPU图像
    ; V7 o* c' Y! h
  197. JSR PPU_Proc
    - U. `7 \! s8 [6 Q: Q

  198. & n; D/ n7 ~6 z, `$ \& P. _
  199. ;启用NMI中断
    ( F; K* K/ @0 `& m
  200. LDA #$80/ L. w+ j% B1 R7 t& Z9 e
  201. STA PPU_CTRL
    " ?; Q1 Y" e- }1 W
  202. , T- x; i1 Y1 u/ g! G! A# R6 Y
  203. ;更新调色板. y. P0 U) X& v8 M
  204. JSR Update_Palette_Data
    1 d" v3 k8 p- ^% o0 f$ L$ t
  205. ; A2 P$ Z$ Z8 V6 W  N7 G: U
  206. ;显示时间(缓冲)
    + m& s  e2 Z: [2 S3 h$ J% C+ V
  207. JSR Time_Show
    $ G% q- O8 \# Y( C

  208. 9 f. M% l; ~& _
  209. ;播放计时; d* o' a2 M5 O, p5 B6 `  a
  210. JSR Time_Count
      L& I4 m9 s8 b: v/ h7 z
  211. - ~9 t7 S4 [3 _7 l
  212. ;播放声音& e# [6 R8 ^; e8 t2 c% A2 E
  213. JSR Sound_Play- e8 G. a7 t; H
  214. 1 K2 X5 P0 H* M6 ]
  215. ;切换音乐(手柄触发)
    ) L' S# A" D# T3 v9 A
  216. JSR Music_Switch
    2 G1 R& K* W. \8 x, Z/ l
  217. 9 D" t  w. O) I4 B1 V! W
  218. ;音乐显示(缓冲)1 Z- Z* Z6 s; Q( z0 k) o
  219. .IF SOUND_BAR_SHOW_ENABLE
    4 l0 t! i/ W; z: O
  220. JSR Music_Vision
    8 V/ x3 k+ Z1 H1 k
  221. .ENDIF. ~0 d6 q8 S; g" ~+ d9 P

  222. 8 ]6 F3 ?& Q. B, Q7 }; V" ?
  223. LDA Time_Wait_Cnt8 _, K% C, D+ w
  224. BEQ NmiProgramProcessEnd/ [. U  U# _, k, k" u( u, i
  225. DEC Time_Wait_Cnt) r3 j+ S" r! G6 D" w7 P5 z
  226. NmiProgramProcessEnd0 R; K2 c9 n* v# p0 c
  227. RTS9 j" ^, o1 @6 g
  228. ! n* R" O4 E0 ^& B0 a2 U3 G
  229. ;==================================================$ ^7 t3 z# y5 k' L
  230. ProgramBegin;主程序
    9 z5 E8 F8 J* `/ B: @
  231. LDA #$00) L8 x$ @% \: t! m
  232. STA PPU_CTRL
    4 a5 x* C7 B4 G/ {
  233. STA PPU_STATUS& H" b7 [: N" R- c! p) `  h6 m( a
  234. STA PPU_MASK
    5 G3 u1 b7 Z; L2 u7 }% q
  235. STA APU_STATUS" C/ |  v7 r9 C3 j
  236. STA PPU_SCROLL5 W; w8 `& ]# S+ u
  237. STA PPU_SCROLL. t8 v- Y: y- U: n
  238. LDA #$C0
    - E$ J! E" t/ Z; t$ i
  239. STA JOY2_FRAME
    ) c; G8 m0 A3 Q2 Q, Q

  240. * O. q! u* b# J1 E
  241. LDX #$FF
    8 x& {/ V5 k% S  P. Q/ A
  242. TXS
    - F# [7 O. @1 Q; F7 x1 C
  243. LDA #$00& ~# ?. i+ M2 J* z" l5 L, t: ~+ L
  244. STA PPU_CTRL) e: n9 K9 J0 u9 ]0 t, N7 b
  245. STA PPU_MASK+ |6 F( x2 j- V7 N: o+ g
  246. STA MMC3_IRQ_DISABLE
    " I5 W& S8 Y  T" P" B% T0 q
  247. 2 u2 f% C3 x1 M2 ~' }: ]
  248. ;==============================5 R9 V  _" i/ S9 V& [2 r" h
  249. ;调色板清空  G6 v' m" g4 q) g* n
  250. LDA #$3F: G+ f7 M. Y8 i4 v2 l* M3 `# G
  251. STA PPU_ADDRESS& J4 g/ I0 l8 y0 b
  252. LDA #$00
    7 e) {" h1 p. L
  253. STA PPU_ADDRESS% J0 G" F2 Z3 `8 O" ]
  254. LDA #$0F
    # d% ^) w4 a+ L* K; z$ h* u
  255. Palette_Clear
    , S  [" \/ _  o: R
  256. STA PPU_DATA/ r0 y& `! Y& H1 E" N: X' ^- U
  257. INX& U- ^. J3 g1 M5 \
  258. CPX #$20& \2 c7 Z, t  c. K1 Y
  259. BCC Palette_Clear9 v" u( G1 l- G( l6 U# Y8 D
  260. LDA #$00, D" \9 S4 u6 q3 C
  261. STA APU_STATUS% ?  A$ S( D, Q: L# P
  262. ;==============================
    ( i8 H! F' g" ^* ?  C4 t2 L
  263. ;初始化背景调色板
    1 l3 X6 ~/ p( A/ b5 i
  264. JSR Set_Palette_Color. w/ `  y6 p  `8 e+ Y3 w9 V7 z7 v3 F
  265. JSR Set_NameTable_Attributes- y& D3 T; u* G# c9 d8 _0 j
  266. + S1 ?- t. n( ?0 D1 k5 D" t
  267. ;==============================
    & Q/ f) k. _7 M" K8 }1 i7 E9 y
  268. ;RAM初始化
    & b. ]: j* G0 m  t- i
  269. RAM_Clear_All  |5 ~, P* F* p) V2 E
  270. LDX #$006 B6 F, x6 |: m4 \5 A4 C: F% m9 S
  271. LDA #$00$ W& g. D. j4 B0 J! c4 p3 Q, k9 q  g
  272. RAM_Clear_All_Start
    3 ]$ E  Y5 S; H4 O! r" b  }
  273. STA $00,X
    ( }+ S2 P' C( \7 T
  274. STA $0100,X- ^' C  i: F; p
  275. STA $0200,X! ~0 S3 D" R4 A3 t5 S: G% f0 K
  276. STA $0300,X2 A7 ]$ i5 l) _
  277. STA $0400,X
    ; w# m3 i. L. V  `: f: G; M
  278. STA $0500,X
    . x: }# B* ]( T) @
  279. STA $0600,X
    ) R% |9 F; J* J: l- C) f# r8 N2 P
  280. STA $0700,X
    + L* ^. X- l- }+ v0 r3 m
  281. INX
    & O+ o/ w" E+ V1 |7 c8 w4 s: N) R
  282. BNE RAM_Clear_All_Start' O) r/ }! m9 x' D: z

  283. " j' Q; O. k# I5 s% m; \% e7 L; B
  284. JSR VramInit- d* w3 t4 H% }+ q9 Z4 d7 y: W  i- K
  285. JSR Init_Palette_Addr( l: ]) K, K4 X- q- c; E/ t

  286. : Y4 }4 ~& F. o4 U
  287. .IF Music_Reset_Addr- W3 a" B: B1 {
  288. JSR Sound_Reset* D( |6 t1 t9 t  N/ G+ e  B! L% }
  289. .Endif
    : \4 Q: ]3 B! x. l2 o' @
  290. 7 S1 U9 s4 S4 L* P* s4 P3 V
  291. LDA #Music_Start_Song-$012 A/ S9 X+ w; o  N. y
  292. STA Music_Cur
      u# \( w$ j  m6 {5 i5 j8 w

  293. 9 ~" Q4 F8 ~' ?! P
  294. JSR Show_Music_Text
    0 k% \5 F. u% f; G, ?( J8 {
  295. + g; V+ j/ r& {) Q, P* {
  296. .IF SOUND_BAR_SHOW_ENABLE
      I; ]* {! X  p3 @! b
  297. JSR Sound_Bar_Text_Set
    $ b1 Y- s  y6 X7 K' J! @1 }
  298. .ENDIF
    ) Q% r' @5 V" O0 f/ _1 G! w* E/ p

  299. / x; e6 C& e( x' p, w) m  h" |& z7 k
  300. .IF Track_Name_Pos
    / k% w4 c# P; Z# x" G. Y! }& w( A
  301. JSR Show_Track_Info
    - `+ P% ], h7 t& }
  302. .ENDIF* |9 b2 B/ `  S" V
  303. / q( J' u& q( o! F( \3 p3 u2 t
  304. JSR PPU_Proc
    , k9 U, J) [2 w3 U

  305. 0 a5 k7 A% @6 Y# F
  306. LDA #$0E
    . k/ l6 \3 O2 n7 K, z
  307. STA Screen_State
    , z+ i! o& R7 p  ^
  308. - I: V1 z' E- F1 |# _/ p4 k
  309. JSR Sund_Bank_Init$ s6 C8 o  U: m. Q" G  N
  310. + L. D* |0 x$ v) x$ b2 V
  311. JSR Music_Show4 r6 z2 q, r: [$ b0 G5 e& @- W
  312. JSR Time_Show  Z0 @8 P$ U% U1 Q
  313. JSR Music_Stata_Show) U+ W; \3 x; K8 V1 \4 L2 J  E* A! [
  314. JSR Time_Delay# y" s3 m- l: |, F' z
  315. 1 S+ M# P: V7 O' ?& I* @' M& q
  316. 3 J9 `; r! Z+ c' f: g
  317. LDA #$80) t( s7 Z6 X( s1 w0 q4 Y4 r7 u
  318. STA PPU_CTRL
    0 u' r0 D  @- ^( W  |

  319. * W( U% S  D& ]9 o  V
  320. LDA #$208 I" a6 h9 Z% {) |  z
  321. STA Time_Wait_Cnt4 S& r8 K# U5 B! M) j2 M

  322. . W3 c& w8 c/ n+ q9 p9 J
  323. Wait_Time_Over, E: l3 g/ n9 m- {7 m; s. R9 G
  324. LDA Time_Wait_Cnt
    - f# d2 Q* K( |) |0 F9 v- _1 Z
  325. BNE Wait_Time_Over8 `% Z* w; M, K( z7 w! w$ @$ H

  326. ; b  A- J( i0 Q5 ~
  327. LDA #$1F
    ; b  ?4 n, t0 {# {
  328. STA APU_STATUS
    7 P. j' ]0 c% M/ H: g, l
  329. LDA Music_Cur1 o+ C, X2 k. M! @
  330. JSR Sound_Init- H- R  K: P, O9 Q# [+ J) ]

  331. * c' y3 W! o! `; D
  332. JMP MainLoop. {% T0 [/ G/ f/ q5 c9 ~: _& o( Q: ?
  333. ! n% Y# E: _7 ]# i4 M
  334. ;==============================9 N9 q) s* c. |: S
  335. Time_Delay;延时等待3 z3 N; k% A1 ^9 {
  336. LDA PPU_STATUS
    . Z0 Q" M( e* \0 B$ `* u$ l  R
  337. BPL Time_Delay
    ( @% G* H0 M/ b, u$ @5 W7 K
  338. RTS
    7 B1 \1 }3 i7 \! a; P  s
  339.   t; [+ C9 O, I; h% M% p" U- r
  340. ;==============================
    - T! |9 q8 \5 [) h7 ^
  341. VramInit;初始化图形内存
    - v8 ^+ q, K  h9 a& {+ n4 [
  342. LDA #CHR_DATA_BANK
    7 e- v$ C/ z$ y- w( G. ^: f* O
  343. JSR SwitchBankA0005 B4 Y. t3 M( s) Q) f7 N
  344. LDA #LOW(CHR_DATA_ADDR)5 ^$ _5 O) d# y# C9 \5 C$ R) n
  345. STA <Data_L$ R$ d2 Q8 z6 a+ b# l% {7 K1 U
  346. LDA #HIGH(CHR_DATA_ADDR)! T* H0 x  G0 w" Q
  347. STA <Data_H8 l2 u9 j, q- C0 l$ e2 f
  348. LDY #$00& ^3 P0 m  H! C# a$ a
  349. LDX #$209 A* N" y1 M- u* {5 L3 A, Z
  350. LDA #$004 s& D5 S: n' Q1 B& [- `* ^" ^
  351. STA PPU_ADDRESS
    9 w+ j, G) F6 k( H( ^
  352. STA PPU_ADDRESS
    3 {7 B( d# A9 f# e
  353. VramInitWrite
    ( G6 N- V" D- T
  354. LDA [Data_L],Y- b) N/ C1 j2 G9 B
  355. STA PPU_DATA' a" h$ F' [8 O4 l- k" I: q. w
  356. INY
    : d0 T; |' {+ {
  357. BNE VramInitWrite. z, r4 J) S/ S) j1 v$ _
  358. INC Data_H$ w0 r" b! t7 ~+ h
  359. DEX
    + m; W5 T& R- ^7 H8 m9 r- {2 H
  360. BNE VramInitWrite
    8 ?! y1 N2 O9 j
  361. RTS+ u& [+ T5 @2 Q- X) ]* V; Z: ]

  362. 0 D) l1 p5 b  m: O
  363. ;==============================3 A( J. n7 \5 a! m4 L+ {0 @! q
  364. RAM_Clear;RAM清除$ g$ V* v: o8 b
  365. LDX #$00- ?  W+ R6 ^* L1 L) t
  366. LDA #$006 S. P. _" b# @
  367. RAM_Clear_1  O: p1 ]! g& c" b3 a, J
  368. STA RAM_Cln_1,X
    7 w, Y% @3 N. L% S' v2 W
  369. INX0 S! I* G" w- t  L4 U4 [6 O% a
  370. CPX #RAM_Cln_1_Size
    : b3 r* b& ^! _/ _# G+ N
  371. BNE RAM_Clear_1
    + u& Z5 A# [* s0 Q& E. \" T
  372. LDX #$00& V  W. X9 g- z# T6 K
  373. RAM_Clear_2
    $ b9 ?3 H2 t: {$ t
  374. STA RAM_Cln_2,X
    ; O0 e& r# l8 o3 \; i! _, [
  375. INX3 h# S: g7 r, G8 c. I. r* A+ V
  376. CPX #RAM_Cln_2_Size
    * v, @6 a9 L( z) z3 h3 E: F
  377. BNE RAM_Clear_2! u, J: F$ B9 M! |; }' V
  378. LDX #$00( Q; i& e/ F' M) z) c# m+ q' ]
  379. RAM_Clear_3/ r) @* t# ?+ a
  380. STA RAM_Cln_3,X9 Y; [( z' x1 T/ V) F4 W( q  C
  381. INX; x' f( t7 B( O
  382. CPX #RAM_Cln_3_Size
    1 v, L9 o% F5 {, ?& ]* Y' B" S
  383. BNE RAM_Clear_32 y4 k) L  m$ h3 x4 b6 ?& T+ K
  384. RTS
    " N' {7 D5 O/ H4 n6 s$ \3 F
  385. % Z9 A; n/ U% q& m. c
  386. ;==============================8 B* ], l0 j: P# `; m
  387. ;音乐切换2 n9 @3 y0 x4 P
  388. Music_Switch
    . _& ]7 t; z7 ^4 ^1 F8 I! `( B: U
  389. JSR Key_Proc
    * J' `) _, K! d3 x6 h7 N9 Z! a
  390. LDA Key_Once
    # Y/ e% ^: ^. p
  391. CMP #$107 Z# l9 ?! Q) T$ O2 |4 a
  392. BNE Music_Start_SongStop( I8 c. e) I; {% @, V
  393. JSR Music_ReSet
    : n4 k( K* R/ v& l5 H

  394. 1 f  U* }+ W5 d% h( _
  395. ;音乐停止
    ) h2 S( p6 q5 r, u
  396. Music_Start_SongStop9 g4 ]. t9 u( s' t. {! T
  397. LDA Key_Once, S( _+ f4 u% d& Z  g
  398. CMP #$20- W/ [. ^' g- K  F! e) x
  399. BNE Music_arrow
    4 p; m. h: |7 v% \- H2 l5 \+ |" w
  400. LDA #$01
    + R$ r% l0 g. V4 P3 S& W
  401. STA Music_State+ S* f, c: E6 N; a+ ~' {  m
  402. JSR Music_Bar_ReSet
    9 K! J2 o- Y6 E* i$ ^" e6 G' N0 B
  403. JSR Time_ReSet
    / b! e( r: J" a5 _) h
  404. JSR RAM_Clear. X2 _( }; A( K' z8 j
  405. JSR Sound_Clear( u1 |1 _1 q, E8 x
  406. JSR Music_Stata_Show
    . P/ a% O/ F5 Z6 H  @% ]
  407. Music_arrow
    " F9 W& g" O2 ?- L" D9 w1 Z
  408. LDA Key_Once) r2 n' S& \$ n* u
  409. AND #$CF' p( N, K, J( |' z
  410. BEQ Music_Switch_End( U7 Q, J: x! r& N5 S
  411. JSR Music_Number
    % H5 S( j# c# F; G
  412. JSR Music_ReSet
    - Q0 N% f0 C: ^9 l/ O3 D
  413. JSR Music_Show
    $ m' y: r* u4 z* L* S
  414. Music_Switch_End
    % p: l( _+ Q( r
  415. RTS4 h% w) p  C5 r1 p7 E6 I
  416. ! Q/ i+ ^& p/ Q. F# T0 V
  417. ;==============================- `! I8 [8 T, b0 f+ k) ]! Y
  418. ;音乐曲目切换
    2 r+ ?+ W- `2 h5 a+ D/ N
  419. Music_Number' J! Q6 W! e5 F4 q0 C
  420. LDA Music_Cur
      o7 M( g2 M7 S: o1 ?) ]1 U
  421. STA Music_Last
    ( m( S. u3 d' n" z& ]' I- H+ I3 j
  422. Music_Decrease% E- J$ m1 c: d, G# K! u7 @# u, _7 c
  423. LDA Key_Once6 M- T, a1 p. d
  424. AND #$42
    - L$ d4 [2 ^( T9 o; {
  425. BEQ Music_Increase
    . S5 h9 K3 x8 K, f. z
  426. LDA Music_Cur
    " |, K- |1 {7 ^7 l4 ^6 H, t! f
  427. BEQ Music_Increase
    ' b4 O9 c; R+ w6 h. B0 o2 l3 p
  428. DEC Music_Cur
    / ?# D9 B& O0 H( j" A7 L
  429. Music_Increase& S8 W' H, B+ a4 k  ?1 ^: T" J
  430. LDA Key_Once; @- W9 S# T" J3 y$ p3 n. Q$ B
  431. AND #$81
    % A7 W- t( p. g1 x
  432. BEQ Music_Decrease_10
    : O) x; v, f) ^) G+ o* l: D8 L
  433. LDA Music_Cur
    3 L! `0 Z# k" V- [
  434. CMP #Music_Song_Total-01) e* e4 C6 h8 X; d2 v5 W" ?$ ^5 ?
  435. BCS Music_Decrease_106 Y; Y5 ?8 V1 f
  436. INC Music_Cur
    " V2 {" q( V0 Q& c/ P
  437. Music_Decrease_10
    5 X. h1 m. I8 G: ^1 P! Y6 t5 L
  438. LDA Key_Once( A& |) ]4 J8 r5 y# T& T
  439. CMP #$04* A2 V- A! H5 F3 E" a
  440. BNE Music_Increase_10/ A7 h, `% x$ X7 N' N8 A9 _
  441. LDA Music_Cur, M  P& N3 `( G5 t  d, A! |
  442. CMP #10
    ( F7 }8 j- b. n# a1 z- F
  443. BCC Music_Start_Song_Min, N: g8 ^/ A: d: V6 ^- K0 [% d% Y
  444. LDA Music_Cur: c$ a* {2 R% o/ _. h( ?$ A* C* r
  445. SEC1 N7 r/ p/ {- {. i$ {5 W8 k& h
  446. SBC #10; v) ]" S0 K! l# m
  447. STA Music_Cur
    6 N; ?* z+ \  U) K0 K9 I' p7 B
  448. LDA #$00
    " [1 ~! W; D2 E3 V# |& V( R
  449. BEQ Music_Increase_10! A& H. }3 j* i+ P; u
  450. Music_Start_Song_Min
    & e- h# _1 E6 a" x4 H3 h0 z
  451. LDA #$001 |- K# \6 F3 z# [2 @" H7 \. k
  452. STA Music_Cur( g: B% o. [, O2 I% v
  453. Music_Increase_10
    5 p% k  ^8 J8 |! ~. |: n4 \0 x: d
  454. LDA Key_Once
    ! A: F7 p/ U& @4 j
  455. CMP #$08
    ( |! Q) P8 R& O# z7 t! r3 f6 P% O5 x! y
  456. BNE Music_Number_End( T- k; y* r' i/ L
  457. LDA Music_Cur
    9 o3 y! b6 C8 f
  458. CLC
    $ W9 W. l7 }/ N: x, B
  459. ADC #10; t! o. B- i) q& A2 v- H/ _
  460. CMP #Music_Song_Total-01
    3 e8 @* o; Z: F4 {) v5 L$ ]
  461. BCS Music_Start_Song_Max
    2 _1 {9 d$ a' _) B6 d: b
  462. STA Music_Cur; m9 e" f% L6 u2 T; B) Y" D5 M1 R
  463. LDA #00+ Y, I6 x# K! O; P  A0 I9 ^/ u
  464. BEQ Music_Number_End
    % Q! b) f! o+ G% [9 x
  465. Music_Start_Song_Max$ n, l2 f7 l7 U; B7 i  K) P
  466. LDA #Music_Song_Total-01/ f8 P& Z# W9 {; r/ H& }
  467. STA Music_Cur* R0 h3 n  ~  v4 |* F2 Z% Y" S' S
  468. Music_Number_End
    3 s9 H2 C+ d4 s* o; @& G1 I
  469. RTS) s% `% j9 U& V6 p/ o
  470. # |: g  _2 C% Q
  471. ;==============================3 M; {4 S( }- G- \: J
  472. ;音乐重设) @  v# T: K: K0 c7 _- A! M+ [$ P
  473. Music_ReSet4 h  K( g3 @# t# T# S, _
  474. JSR RAM_Clear& ]. Q6 y- F6 X; ]( L( L3 g
  475. JSR Sound_Clear) s2 t& z2 h$ j1 S: U8 N- R! Q
  476. LDA #$1F
    + T/ ]# [, ]$ N# @9 y0 C: T
  477. STA APU_STATUS
      b! s; }/ r8 p
  478. LDA Music_Cur
    ' Q( r3 v* i6 [! M7 Q4 j( G. t0 w1 G
  479. JSR Sound_Init
    ( P4 b' \$ h1 z6 i$ h
  480. RTS7 W. n7 q9 E8 I( k- e# ^
  481. 0 w$ |, Z" R& R, B% m9 D
  482. ;==============================7 z* t$ E! _2 R# O
  483. ;音乐端口清除
    1 @+ t" E9 C, v3 B6 m' R; H7 J, \
  484. Sound_Clear
    ) y$ R. ^3 ?" m5 c4 q* x' q/ m* O# H
  485. LDA #$00
    - R$ W, h3 Y+ D) E# ]
  486. STA APU_STATUS
    # f* [" S2 K4 I2 l) G* r
  487. LDX #$00
    ( P! E1 {0 F! [" `- |
  488. Sound_Clear_Start
    . I, R, _) O* |( T, ]" _
  489. STA $4000,X
    # x  a# U* K4 Y' i7 E* ~
  490. INX
    % e& |. n( w0 Z. r- M- s/ J
  491. CPX #$14+ w; z. f/ l" I2 V. S
  492. BCC Sound_Clear_Start
    * _$ Z- g1 z* [- U  m' r2 D
  493. RTS
    1 y& s' g& _0 O+ n& ?" e) J. d. Y

  494. " g  l) i: X) P& V8 Y, j
  495. ;==============================
    1 q1 v6 g* ^- D: Y7 T$ l! L$ J
  496. ;按键处理; ?" d3 y5 S8 x6 t0 }4 a
  497. Key_Proc' R+ [' H7 z# X( P0 c
  498. JSR Key_Scan  v: ^" `5 |$ Q1 E
  499. LDA Key_Keep
    ) z! g) [* S; h. Y
  500. STA Key_Temp  E/ i1 ]0 B5 i7 t
  501. JSR Key_Scan% i* Z0 K/ Q- M7 N, V
  502. LDA Key_Keep
    $ A$ p* w7 M" B, z
  503. CMP Key_Temp
    + f% }" L7 i! u# c
  504. BEQ Key_Get_Once# f, w6 q7 Z- W
  505. LDA Key_Kemp
    . ?( t0 W" Z' g8 `- ~
  506. STA Key_Keep
    / \& L" L& x; ]2 C
  507. Key_Get_Once
    / x! J3 G- Q* n% L; r) d& i* u: X; W
  508. TAY' _# {6 k1 |- V/ {8 I( ~- s/ F
  509. EOR Key_Kemp
    + q! ~& g$ P6 U- d$ E: ]# T; Q
  510. AND Key_Keep4 a9 X( U; R8 y: t4 M
  511. STA Key_Once
    , J( N) H. `4 q
  512. STY Key_Kemp; p* _6 Y2 n9 D9 `
  513. RTS8 q1 n, ?# J7 E1 g/ n3 g* i* D
  514. ;------------------------------: Z  G4 v# S  |1 C8 }; m3 X/ n
  515. ;按键扫描) Y+ F4 i& n+ R2 r5 Z. V
  516. Key_Scan1 J( E' e$ G1 C0 m
  517. LDX #$01
    ; i$ N" S4 l3 ~. f( i: r$ h
  518. STX JOY1_FRAME- ?  i' z, N) f( x
  519. DEX
    ( M% {5 x' s3 J" U2 S
  520. STX JOY1_FRAME8 ^  [5 e; L. l
  521. LDX #$084 _1 Y. j/ ]6 P- o8 @
  522. Key_Value
    0 W, u% h1 n0 L: R; B, u
  523. LDA JOY1_FRAME
    2 C/ @3 i. A. [* m; f
  524. STA Key_Getv
    / U5 ^! f7 |4 o9 `! t( w
  525. LSR A0 ^9 H1 }8 r" R+ i+ l4 B) [
  526. ORA Key_Getv
    # r5 ^6 M* M6 j2 R/ E( `' Z
  527. LSR A
    # L4 Q- B2 s  h/ p& A0 J
  528. ROL Key_Keep) y, g2 H6 r6 D$ Z
  529. DEX$ C. |* N( h) Q$ r& Y# H- c) ]( ~
  530. BNE Key_Value
    ! z; j) [1 I0 G9 D) n6 K
  531. RTS  j! T+ m$ u7 g: f6 n  y

  532. ( V4 D  L* _- j7 [& Q* g
  533. ;==============================0 A3 N. @! Y( ]. Z; `- v
  534. .IF SOUND_BAR_SHOW_ENABLE3 r* ~4 h, `* G& J! P
  535. ;音乐条显示- u' D' a# c6 g3 Y
  536. Music_Vision" z0 w! p' ~9 i3 G8 Y5 V6 H
  537. JSR Music_Animation" g$ ]. T( q7 s- F- j
  538. JSR PPU_End4 p* k( w" x" P; h! [' Q! o
  539. RTS
    ; o1 i. A: m' v5 a3 s% @' Z
  540. ;------------------------------
    ' i! J& c( l5 M: ?
  541. ;音乐条显示处理
    " A% S3 ^; G2 ~, h
  542. Music_Animation
    ! @$ H" }. G% G; Z% F# a
  543. LDX PPU_Cur3 z2 z9 N: K3 `& h7 h; @) B% S: `" c
  544. LDA #Mode_Line! p( ]$ H6 ^: h! Y
  545. STA PPU_Addr,X5 I8 a8 w4 @( D$ {. e
  546. INX$ r' C# M* u5 w* C2 m! t
  547. LDA #HIGH(Sound_Bar_Pos)$ Z1 @# {/ ?! `) A3 `( H
  548. STA PPU_Addr,X7 G: B8 z+ d' T1 |( V* ?6 D$ Q
  549. INX
    & O. j% g- E2 e. T5 Y
  550. LDA #LOW(Sound_Bar_Pos)2 ^% M0 z& I0 D6 A/ M
  551. STA PPU_Addr,X% l& A  G$ S7 z% k3 W7 m8 k
  552. INX
    7 x. Y& m: r) \3 P6 e" P& E
  553. LDA Sound_Bar( S  [+ O7 r, N$ ^$ [# U4 N- M
  554. JSR Volume_Convert
    ( e9 p3 g! V* f) e; y, v
  555. JSR PPU_Return) n1 `2 ~3 k/ M: h2 c; S
  556. LDA Sound_Bar+$4/ M& Q- u, j3 l! @# a! M1 ~# J( V
  557. JSR Volume_Convert; a( f# c& B+ t) D$ d9 @; E
  558. JSR PPU_Return
      L( l8 R1 ^) a4 G6 f
  559. LDA Sound_Bar+$8: N; `! J2 S1 u  s/ S
  560. JSR Volume_Convert_Ex1 i2 k' ^9 Y) f( r. O
  561. JSR PPU_Return
    ( W7 f( f7 e- B; @" \9 ~- d
  562. LDA Sound_Bar+$C
    " E: }* p5 w, V3 e4 v; q6 N6 b+ H8 u
  563. JSR Volume_Convert
    - y. P( C0 A, k. E
  564. JSR PPU_Return
    * x. X8 U/ ?3 v, f9 X. P
  565. LDY #$10" a3 h8 A9 f5 g8 ^! {
  566. LDA APU_STATUS: o$ x! m- y" \  m% e7 L' A  Q
  567. AND #$10
    2 A( H0 v; L4 r9 m& {
  568. BNE Volume_Count
    ( v/ o% v7 I2 _
  569. LDY #$00- Y* x! ], w! ?  a; g
  570. BEQ Volume_Count2 p* @( w% k3 x% \& g( Z. d
  571. ;------------------------------" O4 x6 ?! d6 G/ N$ X
  572. ;音乐条处理
    9 }4 y2 q$ R1 M' X" w8 m  t3 j
  573. Volume_Convert_Ex
    " t, }/ E. h' `3 A
  574. AND #$1F
    2 ^- J; I" q" o% F) h
  575. TAY
    - ?: n" u3 `* g+ |6 t+ b% `
  576. BNE Volume_Count( f/ p5 O4 m8 R1 g3 O. A
  577. Volume_Convert: ]1 J; m" y: J/ ~* m
  578. AND #$0F
    0 h' c$ G! k, M* v/ _) I, R
  579. TAY
    % i6 J$ I7 i1 u; G) q
  580. Volume_Count
    ; O" K9 K3 Q7 d. b% Q4 G
  581. LDA #$08
    . z- B- {8 z% K5 o
  582. STA Sound_Bar_Cnt! Q! Q3 }+ N0 N) U5 z
  583. Volume_FILL6 }% H- j6 a" u: C' {1 o. Q" g, @
  584. DEY
    7 L1 T4 x/ C4 T# v
  585. BEQ Volume_Half$ ]  y& b. u) o. {5 l5 }# s& z
  586. BMI Volume_Empty
    8 ~* Z- ~. N. H
  587. DEY
    ) Y  {& ^. s; z. A* v
  588. Volume_Full
    + ?3 ^" S1 q$ w1 h: t
  589. LDA #$16
    + K  y! y0 V: i0 ^. X" r% @
  590. BNE Volume_PPU  \4 H7 g, k) A2 z
  591. Volume_Half0 [. E5 d1 `; N" [- ^0 k/ m' u
  592. LDA #$154 l4 k0 }& r0 B. b8 a' d
  593. BNE Volume_PPU
    8 a8 y1 Z4 w: S2 k9 p' c8 ]) O/ ~" n
  594. Volume_Empty
    # y. _4 @' s# C8 ?/ u
  595. LDA #$14
    : m1 x' f) p+ s  R4 E- q. q& ]
  596. Volume_PPU, Y6 n% u/ u* |4 Q, |5 R
  597. STA PPU_Addr,X* H; x! l: D* r8 q) R5 R  I
  598. INX5 A/ v4 w3 S. {7 N- e& ]3 w. o9 v
  599. DEC Sound_Bar_Cnt
    * `  o$ P# u9 E0 f
  600. BNE Volume_FILL
    : V8 X+ u" b! s7 u) I
  601. RTS- p/ p$ I- r- _7 [8 [
  602. : G- V0 T* A- |
  603. .ENDIF2 y" U* k1 M% R- @. |5 P( w
  604. % v# P  D+ M4 J- X
  605. ;==============================
    5 i" ]) A# b; d+ B, V; D# ~2 g
  606. PPU_Addr_Set;PPU行开始5 k& p# n+ P5 c, i% e
  607. LDX PPU_Cur7 N* z! V! Z4 ~$ F
  608. LDA #Mode_Line
    4 R" Z+ b: ?( ~/ [
  609. STA PPU_Addr,X
    " S( S" c" C# e$ Y. D
  610. INX  }9 e3 y- o0 A
  611. RTS6 E. N; H1 E. b' ~' _, |: _6 y

  612. : b7 [# h+ v; ~! U3 R9 o1 V
  613. PPU_Return;PPU转行
    , y3 X7 |" S" @& o8 n2 h( j7 P
  614. LDA #Flag_Over
    # {5 y# ?9 K, |+ H/ x
  615. STA PPU_Addr,X5 t! l5 q6 u) `5 i
  616. INX2 h; F4 C' t, P& z9 I6 z/ W* _. s4 }
  617. LDA #Mode_Return
    ( a% U" D0 C5 I' S. h. c) U& s& H* K
  618. STA PPU_Addr,X* l+ ?0 V5 W: I% x6 Y+ ]
  619. INX
    ; s9 M6 S2 J, f* K, A- L3 {1 Q- s
  620. RTS: E& b9 g6 H# r8 U

  621. $ ~$ c% M6 G% M0 ?/ Y6 K) u
  622. ;------------------------------2 {- |5 d4 Z/ q1 J9 u
  623. PPU_End;PPU结束4 V) ~* f1 V0 t) o/ ~4 o7 Q7 {* `
  624. LDA #Flag_Over
    0 g' o, c+ p: p
  625. STA PPU_Addr,X
    , ], _' \# @( K+ [
  626. INX; N' w+ r' Q' Z' n, r
  627. STX PPU_Cur, a% T( Z; X/ z4 r% V, p% v* `
  628. RTS8 a. ], a5 ?0 d1 G& N6 t) E" f7 i
  629. ;==============================
    7 q2 k" T' k0 E8 G. @& q
  630. Mode_Line     = $FD    ;新起行模式" ^5 V! N7 i: W  \
  631. Mode_Return   = $FE    ;转下行模式. S  Y. |9 e: c5 r$ ?7 C) [
  632. Mode_Clear    = $FC    ;行清除
    7 v, z  j! X3 D. C9 [, p% l: b. y
  633. Mode_CntLine  = $FB    ;行计数写入9 c4 X' A+ C0 ?/ a+ E( p8 x% ~
  634. Flag_Over     = $FF    ;行结束标志
      M- @% N) n9 O5 z
  635. * R3 [6 i! C1 i7 _' f3 f
  636. ;------------------------------
    4 K1 }6 U/ Y$ p  ~  z# A$ e
  637. ;PPU处理( w4 z4 y  C' n, g6 W6 w
  638. PPU_Proc1 S1 G8 D( x: `' \- l9 ?( P
  639. LDX PPU_Cur
    $ D7 V1 I: ?, ^! J* V9 g4 }- [
  640. LDA #$00' H: _9 z! `+ Y- q4 c/ d/ k
  641. STA PPU_Cur# [) Z3 e5 p( @9 k5 ^* T! R
  642. STA PPU_Addr,X2 y6 S5 a6 {5 r) q  q3 Z1 F
  643. LDA PPU_Addr9 \( F2 R+ A8 {  }
  644. BNE PPU_Proc_Beg3 i6 H7 j9 ]0 D# r( j( b- C. w, \
  645. PPU_Proc_Ret
    9 J" \, @2 z% j) A$ G1 P
  646. RTS
    0 a9 J6 J% S" n2 H/ x( {
  647. ;------------------------------
    # y9 u' M9 l" X
  648. PPU_Proc_Beg  ;处理开始
    % Q4 T; J- f, S/ {4 T' `( ~  ]% a3 b, h
  649. LDX #$00- `9 x; f4 K! A7 M
  650. STX PPU_MASK
    5 |1 {. B8 _: G: [  U
  651. ;------------------------------) W6 @6 w' O0 P% p
  652. PPU_Mode_Select  ;模式选择& O$ X2 O% K2 X2 _) d* U* G
  653. LDA PPU_Addr,X
    ) N9 E6 y5 Y$ |- R6 ~
  654. CMP #Mode_Line
    9 k. W" p8 V5 a3 q
  655. BEQ PPU_Mode_Newline" i7 p$ m- m4 O/ g  F. k7 Q/ a, P- D! M
  656. CMP #Mode_Return! N% {/ |1 E" `
  657. BEQ PPU_Mode_Return
    : L7 t: [( m& G
  658. CMP #Mode_Clear
    ( `# w1 U) a+ f! u6 u3 J, P" e
  659. BEQ PPU_Proc_Clear0 x$ o5 w: H( J* Z5 I
  660. CMP #Mode_CntLine
    $ o+ \) s9 K1 t: f8 N, `$ Z- k
  661. BEQ PPU_Proc_Cnt_Line
      N' s, k2 K. \7 Z  u$ X- z
  662. RTS" s8 ]  b) `6 A4 }( f* ^
  663. ;------------------------------( A+ l& C5 d. G; X1 d5 \) _
  664. PPU_Mode_Return  ;转下行模式5 c  i! F9 U7 `
  665. LDA PPU_Addr_L
    0 R0 Q0 ~- M/ P3 m+ M' g3 v
  666. CLC) |, O9 q/ O' o6 g" }1 x
  667. ADC #$20
    5 x7 l+ W' W" `  O% ]9 M  ]0 z
  668. STA PPU_Addr_L
    / a2 ~; [% q: n" l- f7 h* y
  669. BCC PPU_Return_End
    $ k; C3 N: Q% q$ i( ~
  670. INC PPU_Addr_H* R. a3 L( K1 y* g: @
  671. PPU_Return_End7 |( x: U$ n, ^
  672. JMP PPU_Set_Increaser
    - k+ I( o! @; Y1 b$ x3 T& T% G- ?
  673. ;------------------------------
    ; N4 m  _6 B- c& C* l5 M- b
  674. PPU_Mode_Newline  ;新起行模式) n" h) g7 {4 L$ P) G& o. h; d
  675. INX
    + N6 _  u* F$ s6 l) W
  676. LDA PPU_Addr,X3 ~0 u" R9 \  K; t$ Q; R+ a! N; V
  677. STA PPU_Addr_H
    - }* B5 E( F/ Q7 j/ Q3 a
  678. INX- ~% n! x& _% E; `+ I
  679. LDA PPU_Addr,X8 s% K4 g2 p0 z0 C
  680. STA PPU_Addr_L" |+ F' J2 U7 o* m# S7 |* |
  681. ;------------------------------1 Z( p1 k6 E: e- u2 u2 m" X2 C# z; G
  682. PPU_Set_Increaser   ;设置写入地址, K* H0 i, Z/ ?" Z4 D# F/ r, m1 A* w
  683. LDA PPU_Addr_H
    ! s! f* h  I! h2 T: K2 m
  684. STA PPU_ADDRESS
    $ |8 O* X, b5 a
  685. LDA PPU_Addr_L5 K% n& _7 u6 K1 j+ x: b
  686. STA PPU_ADDRESS
    + M: `7 ^1 O! _. [7 @+ j1 a( D
  687. ;------------------------------
    , l' e* C5 F: ]3 e& ?# w
  688. PPU_Write   ;写入数据* w2 M' E& u9 g: F4 _# j8 y
  689. INX
    & y2 v7 l$ M# [
  690. LDA PPU_Addr,X
    7 F1 W! g$ ~, k
  691. CMP #Flag_Over
    0 j$ W! l7 b: o8 s
  692. BEQ PPU_Proc_End
    : q+ N( g! @5 m# u
  693. STA PPU_DATA  A3 G% ]8 M4 C
  694. JMP PPU_Write3 J- F0 q; v7 m9 H' J
  695. ;------------------------------
    5 Y+ l( }" L# I
  696. PPU_Proc_End  ;单行写入结束
    3 m9 ?$ q4 S( I; A1 `& y
  697. INX
    8 a. u; b7 \# c  p
  698. LDA PPU_Addr,X+ b, X, g/ |, ?" w
  699. BNE PPU_Mode_Select
    ; t  H  W! G/ E9 W) D6 q
  700. STA PPU_Addr7 t, |. u4 N3 O" M% d3 K
  701. JSR Update_Palette_Color
    & U' r' k# F8 n9 Z9 X3 N; O
  702. LDA #$007 `' S# l) y& v+ ?' d/ d" G) m
  703. STA PPU_ADDRESS5 n5 C) F  d' j" p7 j
  704. STA PPU_ADDRESS
    & _' V# J5 P  ]
  705. STA Show_Track_Name0 T) R0 m/ U2 C5 s
  706. LDA #Scroll_X
    # y# D+ h0 Z* z; L  r  f
  707. STA PPU_SCROLL% C$ f$ Q6 O% g4 S* A6 e$ z
  708. LDA #Scroll_Y
    8 U8 t0 p& F1 t2 L
  709. STA PPU_SCROLL! u9 f& ?$ P7 |. R2 r
  710. LDA Screen_State
    3 e3 r. u3 b3 d- M  C
  711. STA PPU_MASK
    & Z5 p; m; b* n) ?9 Y  \3 t
  712. RTS
    # ^+ C5 b3 }: A3 X3 t6 o' ~4 M! L. G

  713. # k/ l1 P+ E% U5 d# _2 b
  714. PPU_Proc_Clear
    4 ]2 x+ ]! [+ a' p, s; i4 K4 S
  715. INX% b7 r4 X# u/ R: \
  716. LDA PPU_Addr,X
    - N# u/ n1 l, a8 z9 b$ _$ E
  717. STA PPU_ADDRESS8 [* Q- q; S6 N. N- V; H+ g
  718. INX
    8 I: h. a3 ]6 N, y5 @4 l. s/ c' D
  719. LDA PPU_Addr,X3 O- r- ?: U! f  K
  720. STA PPU_ADDRESS
    4 Q3 k& f: Y3 E6 m) o
  721. INX4 M% W* s0 ?1 K1 p
  722. LDY PPU_Addr,X  K( y, J4 K5 Y2 N9 C
  723. LDA #$00
    5 V5 U2 b6 ^: t0 n$ ]0 B
  724. PPU_Proc_Clear_Write) [9 ?5 o( a3 u5 U" Q( z# l/ |8 u* J
  725. STA PPU_DATA
    ) ]5 D' |8 k! Q( _. u
  726. DEY
    6 C* F/ R1 j7 y6 x
  727. BNE PPU_Proc_Clear_Write" z4 N; W  V- J9 S/ Q3 w' H9 U. }2 E
  728. JMP PPU_Proc_End
    : U2 B, @( m: r2 A' \0 V: n! P

  729. ! o5 h, v$ x' l& i6 \5 K( Y# H* g
  730. PPU_Proc_Cnt_Line
    & U- X% f, {( U2 w
  731. INX
    8 n$ T8 c; X2 g! W& R: h% N3 m
  732. LDA PPU_Addr,X
    ' L6 y( U/ d: y6 h+ D0 Z
  733. STA PPU_ADDRESS1 o1 m- h$ p  N4 T* F
  734. INX& d0 i/ l, X* V9 o) {
  735. LDA PPU_Addr,X
    . {% d. b3 f* k& f/ a' Y
  736. STA PPU_ADDRESS2 ~1 j! x! T# v  g
  737. INX  \6 w  V* Z& s
  738. LDY PPU_Addr,X
    # G' i0 ]. c2 O2 Z( l
  739. PPU_Proc_Cnt_Line_Write3 v7 f$ f; d( b& y. P( j- U
  740. INX3 T6 H# e+ S2 O) C# p2 k3 A  @
  741. LDA PPU_Addr,X
    ) T; E3 Y% {3 Q- V/ d
  742. STA PPU_DATA2 W1 D2 i8 y; J9 I
  743. DEY
    5 y3 \9 I' Q  c# B, D
  744. BNE PPU_Proc_Cnt_Line_Write
      R2 C: j9 V- T* `
  745. JMP PPU_Proc_End" M/ A8 o) v9 J7 w* ^) V3 y

  746. ; j; {; z4 S$ Q1 d3 n
  747. ;==============================9 U3 N- m1 v% k  u' p
  748. HEX_To_Dec;十六进制转十进制! e; ~! T: z5 g
  749. STA HEX_Data
    3 t7 {  N: H. @
  750. PHA
    0 M/ L& ^& e" b6 R
  751. TXA
    6 y2 L$ V5 G- i; L8 R
  752. PHA
    * \, |+ X/ Q1 G) I+ B" p
  753. LDX #$00
    ; O3 J6 A5 ~0 y1 F4 J6 Y! r" q
  754. LDA #$00
    2 I8 h- Z8 n8 H- Y/ u& ~) Z5 F) J
  755. HEX_Cln9 D3 B* a) K) y: Z
  756. STA DEC_H,X: x& y( R$ p/ M, S, {$ V
  757. INX
    % k3 F5 a/ f- E- u7 j. \8 h
  758. CPX #$03
    9 ~( U' k2 E7 f. y* F" W
  759. BCC HEX_Cln; P5 o7 ~  j  o  K# F9 A
  760. LDA HEX_Data
    $ f3 U* _; j, ]2 J! T: h. s; e/ B% p% C
  761. ;------------------------------
    3 x. y" M  ]! N( d5 l
  762. HEX_100& L9 h: }- n9 I" H; a( \
  763. CMP #100/ Y, ]8 t$ r2 X0 e
  764. BCC HEX_10
    ! ~& Y7 A- @+ Y- Y* a# I
  765. SEC
    * |7 }5 P/ `1 ?' j# B# f( W
  766. SBC #1000 X0 J. ~7 u, ]* x. |
  767. INC DEC_H: w1 K$ j. J& k! ~& a, H9 w- Y
  768. BNE HEX_100% G5 |4 y8 D; N/ C1 x" e
  769. ;------------------------------9 t: E# R& c2 X9 V! p
  770. HEX_10
    0 z4 c7 R$ s+ A/ g3 B
  771. CMP #10
    - q9 |& @# I5 ~
  772. BCC HEX_1
    ' X5 t: w. h7 N7 l# F. B
  773. SEC
    2 T/ N+ i' K; [& B; ]
  774. SBC #10- V! s. c1 R3 m5 \7 K) L$ d  m
  775. INC DEC_T
    " E  R3 }% I1 [
  776. BNE HEX_10
    ! A% _- j5 G5 |+ X& z2 Z
  777. ;------------------------------
    + Y0 k7 F3 T) O% O7 y
  778. HEX_1" W8 }: J- `& p8 u  b& C3 W
  779. STA DEC_L3 l' U  i* d$ K3 N9 X
  780. PLA
    * J- N2 R/ }0 w5 @
  781. TAX* K- ?, ?+ w% g+ m+ J4 c
  782. PLA
    + G* j3 ^. E9 R( x, }
  783. RTS
    0 f- ]( X6 x, _8 b2 D8 s$ T4 c
  784. . c1 W6 }. K% n6 L  M% l
  785. ;==============================
    % Q" \9 |& T/ F8 v9 W! ]
  786. ;音乐曲目显示. X; N/ u0 V! E- }! ]: L" d
  787. Music_Show
    3 w. c6 g% Q4 n  f. x, t7 ^
  788. LDA Music_Cur5 E$ i5 f  c$ t2 L2 W, u" M: ^
  789. CLC
    . ?: c, a1 D8 g- ~
  790. ADC #$01
    # g2 c) D, ~0 F* t
  791. JSR HEX_To_Dec3 ~& s4 k* z+ S% G  J
  792. LDX PPU_Cur4 h, T% ~6 ^7 g5 n( W
  793. LDA #$FD
    * o$ c6 [" R/ h
  794. STA PPU_Addr,X% j9 h- s4 H& j' I
  795. INX5 c& v1 I, f& W) F
  796. LDA #HIGH(Play_Index_Pos)
    + o. }( w/ C" V5 e, H; q1 W
  797. STA PPU_Addr,X+ B# I4 P1 n% N1 }/ f, p
  798. INX' p6 O% S* i. M* ]' I: o
  799. LDA #LOW(Play_Index_Pos)
    " ~* B+ |9 x/ E, k+ ]. A
  800. STA PPU_Addr,X2 K1 c4 A- j: a1 r
  801. INX- z3 s2 ~; K4 i0 N

  802. 8 I4 v% D0 J: W, p" G" `* C' B: s
  803. .IF Music_Song_Total > 99
    9 Z2 d2 J' T4 g7 `
  804. LDA DEC_H
    7 ]& W) Y, D1 _+ y" \  T
  805. ORA #$30
    + S/ T7 r' s/ z6 L* D
  806. STA PPU_Addr,X
    9 V) v! d; u' M2 x) \! D: F7 K* t+ L
  807. INX- G, l5 \# V! S% C
  808. .ENDIF/ C0 }" Y' ]$ e6 Y9 t

  809. ; w7 o* }  {, i
  810. .IF Music_Song_Total > 9/ Z) w" }) p3 N6 v# \
  811. LDA DEC_T) e, Q& n' \( m9 [  H
  812. ORA #$30
    7 Y5 B; N; @  r6 K
  813. STA PPU_Addr,X
    6 D* I* v) A/ ^0 y3 G
  814. INX3 j6 H, n) |1 E6 I9 Y
  815. .ENDIF! W2 @0 `5 b1 M& f3 a4 G( x' D
  816. 3 E) G6 X. C; u
  817. LDA DEC_L9 A  C% {# N* L
  818. ORA #$30$ J: K) ~  Z, h1 W0 F
  819. STA PPU_Addr,X
    % Y; X0 A& r+ @) f1 i
  820. INX
    ( [2 L4 r+ \: t2 R& e

  821. # X& s* ^. ?$ O: h' ?1 w
  822. LDA #'/'
    0 A! j+ |7 ^2 {! y
  823. STA PPU_Addr,X
    9 o) p' q2 [2 d' ^* e- ~: s
  824. INX  H- J" k. G. |& I6 X5 N3 u
  825. Music_Show_Total
    9 `0 k3 }- H! f+ h
  826. LDA #Music_Song_Total
    2 P  }# v# T2 W% m" j
  827. JSR HEX_To_Dec
    9 t- p+ i0 t7 B
  828. 4 V7 O) ?0 b  h6 u
  829. .IF Music_Song_Total > 993 X# Z$ S  X8 `3 i9 w
  830. LDA DEC_H+ m, V7 b2 P9 u' s
  831. ORA #$309 B3 G# K2 E' a
  832. STA PPU_Addr,X' z+ e0 W9 m; o! Y% D5 s
  833. INX
    . j/ ~  Z5 H5 b( D% l
  834. .ENDIF
    ' H! Z$ v  U! ?1 B- z7 q9 ~& T

  835. + i" z" |, c* N
  836. .IF Music_Song_Total > 9
    ( B; j3 `* M: F3 g# N
  837. LDA DEC_T
    + A7 e/ M* z5 f
  838. ORA #$30
    8 f' ^! d1 b; w) D" O( R2 Y$ K  G
  839. STA PPU_Addr,X* s# q9 |+ v0 B( G; v. ]. `
  840. INX
    ; m) o' z1 _" K6 c6 ^0 d( X
  841. .ENDIF, |+ Z) k) u0 [
  842. ' C* I( p9 V: `# X# P" X) u' ^) u
  843. LDA DEC_L
    3 Q! i" a; S: l" I& w7 n
  844. ORA #$30: ^& s+ ~# z# z! j$ l7 ~  f6 M
  845. STA PPU_Addr,X( y! Z0 {9 e7 U3 h0 ?0 P( b& ^
  846. INX
    ) ~* ]- [1 B$ x, Y- h$ p/ R6 h
  847. / c( x2 f% J# r- D5 K/ G
  848. JSR PPU_End
    % K+ k% y6 X# N" B9 i# F8 b4 m
  849. Music_Show_End
    4 ]4 f8 O( R9 {% A0 o1 b+ m
  850. RTS3 S4 f( b- G: }9 u0 B* z
  851. 7 N# J1 w$ R" `& H5 I7 O2 ^
  852. ;==============================
    ' f6 o' Z9 x- B; `! M* u
  853. Time_Show;播放时间显示1 E- `8 z6 W3 p4 h9 _: B5 t
  854. JSR PPU_Addr_Set
    % P! A& t+ V9 x, t
  855. LDA #HIGH(Play_Time_Pos)
    " m( b: G& ?$ k' K5 }9 A
  856. STA PPU_Addr,X/ y1 w$ y- X  |( f
  857. INX) l& G2 J/ [' m! Q! V' @/ [
  858. LDA #LOW(Play_Time_Pos)9 F  D, d6 I, \( _: M6 _
  859. STA PPU_Addr,X( K) k9 i. R6 s% O
  860. INX
    ' [% h0 u, w2 S: x- n
  861. Time_Show_H
    ' I5 N0 F0 q5 Y
  862. LDA Time_H
    & W, w! _( t% i% O9 I7 x: A+ K
  863. JSR HEX_To_Dec
    ( F' m8 i! [: p6 S1 d% E
  864. JSR Time_Digit
    ; G; F& N5 U$ [$ y- C- O
  865. LDA #':'
    + T# P/ A, |0 K
  866. STA PPU_Addr,X( k( q, H" o8 b' i5 H. g" B" Q
  867. INX* e+ v8 B: q  u' e5 k2 m
  868. Time_Show_M( u) B5 o4 b  E' N3 s! E; e
  869. LDA Time_M
    1 ], X, f2 O! B5 y9 l& V- d
  870. JSR HEX_To_Dec
    % E4 Z) a" C) S/ r
  871. JSR Time_Digit* a8 W; i4 X: l) {! D' D
  872. LDA #':'# j) N8 q0 J$ H' r
  873. STA PPU_Addr,X' m( m/ ]1 }5 j; A* X" j0 ~% m
  874. INX6 S( x# u% U$ T8 l0 y4 K
  875. Time_Show_S
    + X" o/ i% O- ]) E2 W
  876. LDA Time_S4 B: L! q* y2 A9 q$ `$ u
  877. JSR HEX_To_Dec& G( A6 d5 i9 N2 S+ z
  878. JSR Time_Digit
    - b9 T7 c" Y0 u3 @+ A
  879. JSR PPU_End
    . R9 @7 m  [( t+ w
  880. Time_Show_End  H( ^$ N9 }! E
  881. RTS+ b4 q7 {3 X3 H9 J! X- t

  882. 3 b3 q1 s( F/ I
  883. Time_Digit
    % a% Z- f8 D, n6 A/ k6 `7 |: w4 S; T
  884. LDA DEC_T+ c0 d5 o9 B- v1 E1 }) l
  885. ORA #$30$ h5 q3 ?- K6 U
  886. STA PPU_Addr,X
    " x; H/ O" N% @! A0 ]' ^6 C( t
  887. INX3 }. W4 Z$ U$ j9 {: E9 ~( o
  888. LDA DEC_L
    * q6 H- x5 g3 x. [
  889. ORA #$30
    6 R$ |5 U3 Q2 J. L
  890. STA PPU_Addr,X
    & a" M! e7 e0 C% N3 D. H
  891. INX
    . k) B6 b; S2 C+ s
  892. RTS7 x' E$ D  |  j5 ]
  893. / m  t  w9 ^* K8 Z4 @1 U( ]
  894. ;==============================
    3 i3 |2 l; P4 w( d+ Q
  895. Time_Count;计时
    / ^6 `  {+ H$ c# D1 B6 u
  896. LDA Music_State
    / r- G" X6 z: Q5 [% h( r
  897. ORA Time_Wait_Cnt( m- J1 r/ S. o) R
  898. BNE Time_Count_End" t) l, o- I7 r- G, Q/ J6 p- n
  899. INC Time_Cnt
    : |5 g; \. R3 j2 f9 G: q. n* C
  900. LDA Time_Cnt
    / D8 v- f' t* N
  901. CMP #60- \3 m1 i- ]. V6 ^
  902. BCC Time_Count_End
    0 y) Y" O/ }, L6 [8 N
  903. LDA #00$ F  x& y. c2 E$ ?" f
  904. STA Time_Cnt; `+ ^7 O" D+ G1 Y' h( a% D
  905. INC Time_S
    # k% o7 P' v$ e* N/ [
  906. & f/ U# p, D2 U) @- ]
  907. Time_S_Cnt
    7 Z- M0 I  I. Z& j& T) u' e* o- n
  908. LDA Time_S
    9 K* e  P* [  t. z. t
  909. CMP #60
    9 x) P, }% {2 F$ B6 M0 d3 U" L
  910. BCC Time_Count_End) T0 d( P& l" Y, q# Q9 P2 Z
  911. LDA #00% q/ L- M; a( q) Z
  912. STA Time_S
    9 K6 B, L' d$ v/ H  P
  913. INC Time_M
      p  @1 p4 d) T

  914. % c/ t5 ^& r. f$ l- c
  915. Time_M_Cnt: l# L3 Z9 t% i9 j! \$ \, W
  916. LDA Time_M
    / Q3 e4 O+ N: M* s6 F
  917. CMP #60
      `- F+ g" E4 ]4 G( l
  918. BCC Time_Count_End1 `. A* }! c7 U- v  b
  919. LDA #00) |3 z3 I. o( e
  920. STA Time_M
    7 B% O4 M- t# R8 q4 m5 b, Q
  921. INC Time_H
    $ ^4 M& X% f3 K7 S6 A1 e9 [
  922. / G% }) e1 V. @1 Q
  923. Time_H_Cnt
    7 |, F% _; J: I% w* {# k
  924. LDA Time_H
    + s, j! o- j5 b& X
  925. CMP #247 i. T8 @) `! {( W* G, R
  926. BCC Time_Count_End6 b4 G: {; i* g6 o' t% s2 b2 N
  927. LDA #00
    ! j8 c; |# Q2 a: o0 `0 Z3 w
  928. STA Time_H1 z6 I: E. B+ l, G; N' s
  929. ) `& `* _/ x) i) ~; T
  930. Time_Count_End$ _7 x, \1 r0 S  h+ g
  931. RTS" {5 n* |0 b8 O! N3 `% l
  932. ; k( M, [4 t6 d( ]8 V# c! h
  933. ;==============================
    7 g$ K- B( d+ e) ?/ y- s
  934. Time_ReSet;播放时间重置
    4 M1 d9 A4 d) L, {5 ?* z
  935. LDA #$00& G% L  [- j4 M
  936. STA Time_S
    ) g! s" [. G" l+ S+ c; }
  937. STA Time_M
    2 e/ z8 y& D7 Y& v3 ^
  938. STA Time_H
    + b3 f: w3 k/ G3 G( D5 X# C+ }, L# [0 b
  939. STA Time_Cnt  y* o$ o5 V9 e
  940. RTS! A8 R8 e7 R. z1 H

  941. ( N- N  e# k/ r" r3 n
  942. ;==============================
    # @7 J5 k0 z1 y3 [( c
  943. Music_Bar_ReSet;音乐条重置+ H: T# o5 W5 |! g" ~
  944. LDA #$00  H; x5 P+ m8 U0 r
  945. LDX #$00. P: E9 E) z, Z
  946. Music_Bar_ReSet_Set
    5 y  y  a1 E1 h/ A
  947. STA Sound_Bar,X3 C  N- v; E. O' y. m
  948. INX
    + ^5 ~: p$ B) j
  949. CPX #$100 D  A, E; @$ ]7 r$ Y) X6 i! M( [
  950. BCC Music_Bar_ReSet_Set
    - g! P4 x+ y& s* Q: \
  951. RTS
    3 ^+ Z- O! [# l: g; @$ E2 i6 Y7 j
  952. $ m/ s7 ~6 S0 o4 {
  953. ;==============================
    6 }7 {2 q/ w" @9 t: |. n
  954. PPU_Data;PPU数据写入
    1 t$ e* M: y9 `/ o# Z. M, f
  955. STY Data_L$ Q7 \1 O; ]  D. D8 ]- q/ ~4 F
  956. STX Data_H' Y7 H% L% A" l6 |2 Z& q/ K
  957. LDY #$FF# i0 ^( m( C1 a. V# K* a7 N
  958. LDX PPU_Cur
    8 Y& h0 l6 L" l1 n2 d
  959. DEX6 o! j3 T# p0 v2 ]2 d
  960. PPU_Data_Beg
    " T+ {6 ?! t8 |9 h  r# g' c) a
  961. INX
    3 X1 p+ C7 S$ K. K1 ^. w: `
  962. INY
    : g# ?  \# T+ S; u* l( L3 ?
  963. LDA [Data_L],Y! @, A0 ]* V+ a( Q% z
  964. STA PPU_Addr,X
    ; _' V: d7 L( B- X7 l% G* u5 w: _
  965. BNE PPU_Data_Beg
    * H: M5 ]! W) |& j. I5 f% M8 @
  966. STX PPU_Cur
    8 W% p' j/ F$ E; Q- Y- b5 C
  967. PPU_Data_End
    % y  }: Y6 L7 O% G
  968. RTS
    . h& H3 u9 a$ T9 A# D$ G

  969. 1 U. a, M. I- S, a, d/ _. Y7 Y
  970. ;==============================) q1 s: X7 P* p  g0 ?# t) C8 u
  971. Music_Stata_Show;播放状态显示
    5 B; ]' X7 w1 H+ X$ f% `) F0 s
  972. LDA Music_State
    2 Q4 s9 c( A6 A
  973. BEQ Music_Stata_Show_Play
    ' g6 i# U: [+ g: ~2 R2 E
  974. Music_Stata_Show_Stop8 ?+ r+ r- k6 Y4 H  y
  975. LDY #LOW(Music_State_Stop)3 F/ e) p# ~  {
  976. LDX #HIGH(Music_State_Stop)* ^4 X( }% F( p5 D/ m
  977. JSR PPU_Data' J+ B  I) K* a0 E& o
  978. RTS
    ) {! y( w1 O. x3 n
  979. Music_Stata_Show_Play8 t$ `: z  @! |+ [
  980. LDY #LOW(Music_State_Play)8 g) P& `) a" z
  981. LDX #HIGH(Music_State_Play)
    ) f2 j; [) u; H! m7 B' U7 C7 D; p' q
  982. JSR PPU_Data& O% j3 N" ^, e0 ]! ^
  983. RTS5 \8 i, J7 {9 \: z. X
  984. 6 [  s8 s& H0 W' B
  985. .IF SOUND_BAR_SHOW_ENABLE- O+ ^+ Z! X2 _  ?% U
  986. ;==============================: Y% H( D, ~. z
  987. Sound_Bar_Text_Set;标题与音乐条初始化6 Y/ d( n2 F9 w# m1 W6 _
  988. LDY #LOW(Sound_Bar_Text_Data)
    & i7 G9 \# w% P! @1 [3 Z
  989. LDX #HIGH(Sound_Bar_Text_Data)
    6 d( K) M* Y! {- }  y6 l
  990. JSR PPU_Data
    + M" o* l" F, C) c/ e
  991. RTS
    9 N. E8 c4 K) I$ e1 V" [6 ]

  992. ; ?: f) o# c9 C. `( L6 q( z8 G
  993. .ENDIF2 m0 f# {+ }" Y: V$ h; z
  994. " |3 d8 K5 c+ v, `% `
  995. ;==============================/ Y" n6 w. H. B' b( {. q
  996. Set_NameTable_Attributes;设置命名表属性/ B" U" z: U/ I  H$ s8 B
  997. LDA PPU_STATUS
    8 k$ L1 R/ V7 L# K1 Z( B5 q
  998. LDA #$23- Z8 G" {( N! T- |  S
  999. STA PPU_ADDRESS' c4 ?* z+ v! N* H) ~+ ^& |4 A+ k
  1000. LDA #$C05 [; N& w3 \1 Z& z. [. K4 D' X
  1001. STA PPU_ADDRESS
    3 s( b6 X' P1 u: z8 `% K
  1002. LDX #$00
    4 m7 f1 B5 r- S) N
  1003. Set_NameTable_Attributes_Write+ N. @8 c  F, m& j5 p
  1004. LDA Palette_Attributes,X1 f+ _6 E0 P* t* ^$ H+ f
  1005. STA PPU_DATA- Q* ?  X% v9 I* W( k* u
  1006. INX
    $ O( _/ d! u6 N# \+ D3 I, o, h
  1007. CPX #$40
    " I1 ^2 s4 Q5 O
  1008. BCC Set_NameTable_Attributes_Write
    7 H- U5 H) T( M7 M3 H
  1009. RTS
    2 v: C* G+ N# G
  1010. , V6 n; q  _9 v4 o' J7 l+ T
  1011. ;==============================
    : F# _  F4 |$ @
  1012. Set_Palette_Color;设置调色板数据2 A1 d: r" J# ]# ?8 Z, v
  1013. LDA PPU_STATUS
    ! e. e% w/ d2 Z# j3 @0 ~5 ~8 g
  1014. LDA #$3F
    0 |- Z5 c( b0 t' F7 {6 G
  1015. STA PPU_ADDRESS
    , X  w" q% s4 y* d" C
  1016. LDA #$00
    ; ?& j" \3 m. X& i2 R3 S2 ^
  1017. STA PPU_ADDRESS
    9 u; Q8 t0 C( E
  1018. LDX #$00# r8 x/ z& P& W$ u& u5 O5 `. d( ?( T
  1019. Set_Palette_Color_Write
    % N/ s( D: l: d) f
  1020. LDA Palette_Data,X
    9 T& a/ U7 e6 W" R1 G
  1021. STA PPU_DATA, r, t8 e* G4 e) t( V, v1 b- x/ w% w+ }
  1022. INX
      B& R8 l  T) Y2 D4 N1 B7 d0 d
  1023. CPX #$20& R! p* }* c  e5 D" v2 `! p! P2 M
  1024. BCC Set_Palette_Color_Write5 C& g" L# X  z4 F  ^
  1025. RTS$ A/ q3 z3 e! C0 a
  1026. 4 Q( U8 N$ q% L; ^7 U# E
  1027. ;==============================
    # Y( G1 B( {/ a5 o
  1028. Init_Palette_Addr;初始化调色板数据$ j. z: `3 J7 |
  1029. LDX #$000 U/ Y6 ?& r3 Q4 b: r- @
  1030. Init_Palette_Addr_Write
    * F% t5 `) i9 N1 R
  1031. LDA Palette_Data,X6 D: u7 j/ U! u; b8 _
  1032. STA Palette_Addr,X
      K- [3 w5 ^8 w" U: S
  1033. INX
    $ U0 x/ F7 w; x+ u! F$ C
  1034. CPX #$20
    ! K; B! X  b* B
  1035. BCC Init_Palette_Addr_Write7 s+ f4 u7 h5 A2 [" M# t& N! K
  1036. RTS
    * V+ n  g" |7 x5 R
  1037. - C" H/ N6 b0 w$ Y
  1038. ;==============================
    4 ?- [% {. Q' @8 p8 Y  g" Q( Q
  1039. Update_Palette_Color;更新调色板颜色
    8 e9 i3 S- k, Z8 a/ n: r  `% i" |
  1040. LDA Show_Track_Name( s2 `4 u* a: G! w4 u9 g+ y% i
  1041. BNE Update_Palette_Color_End+ N  |8 X! c. z# Y$ e' ~: e
  1042. LDA Palette_Update_Flag( M1 @7 c: C$ V  H( E$ \- O
  1043. BEQ Update_Palette_Color_End
    ! w: S. R7 X$ x7 ]! y
  1044. LDA #$3F3 x, P$ ]. H9 `: C+ f5 A* [4 n1 @4 C* P
  1045. STA PPU_ADDRESS/ B# T+ w2 w" X% w. x4 y
  1046. LDA #$00# E  D# q' m  O, f
  1047. STA PPU_ADDRESS
    1 \) j9 z6 S4 p! n
  1048. LDX #$00) G8 _' D9 C7 u) ?) F* U3 ~
  1049. Update_Palette_Color_Write! X- g* P! k  T9 y7 e
  1050. LDA Palette_Addr,X) Y- v' u- t! B3 F0 O' }
  1051. STA PPU_DATA
    * ?+ G1 Q* B( ?* K  [) x6 x$ p) H
  1052. INX. X- x2 M8 W3 r; D( i) }
  1053. CPX #$20, I. ~$ y8 a, M' ]
  1054. BCC Update_Palette_Color_Write
    + Q# }* A1 t/ |5 y/ M% R6 ^
  1055. LDA #$00; \1 }8 p3 o7 }
  1056. STA Palette_Update_Flag9 D: r. |) J# B6 J1 ?9 u
  1057. Update_Palette_Color_End
    , |+ Z7 e, a, w: O6 Z  ~4 c
  1058. RTS
    $ _3 b( u+ C% w! _- {
  1059.   i& G& \; h% v' ^+ ~
  1060. ;==============================8 r: |' L! p7 o/ U! _4 _
  1061. Update_Palette_Data;更新调色板数据
    3 s4 `+ P7 Z: G4 |- h' o! H) p
  1062. LDA Show_Track_Name
    ' Q# T2 u1 N3 v. H+ c' b9 i4 c; n: E
  1063. BNE Update_Palette_Data_End
    * p  @/ V" _) J: B( a3 V, p
  1064. LDA Music_State
    6 `, w( _: V( Z4 i1 e% G3 Q
  1065. BNE Update_Palette_Data_End6 F% k' @5 t9 N& R# |
  1066. Update_Palette_Data_Check9 r. B2 J  A- ]/ X" t  N, J
  1067. LDA Palette_Wait_Cnt
    9 S* N1 q' I! ]* j/ g2 f
  1068. BPL Update_Palette_Data_Check_Over
    ! X* G" p, Q1 `5 u6 b0 P
  1069. LDA #Palette_Update_Interval
    * v* t8 k9 V6 h2 X1 M& }% R# o3 f
  1070. STA Palette_Wait_Cnt; y5 \4 t% ?3 C; \
  1071. Update_Palette_Data_Check_Over, ^5 J- g+ \6 |* @4 i- b8 I
  1072. DEC Palette_Wait_Cnt
    7 P8 n! A5 G: v2 h! ?; J6 b
  1073. BNE Update_Palette_Data_End
    % F9 C6 c0 V! {. t8 I- z2 c
  1074. INC Palette_Update_Flag4 \& D' ^# K6 F7 s) d3 O& j( W( {$ E
  1075. LDA #Palette_Update_Interval' S5 y/ R1 {7 @9 D& o. T; T
  1076. STA Palette_Wait_Cnt
    / v' q, K  J% _! k
  1077. LDA Palette_Update_Addr; k. B; H2 ^9 ~
  1078. CMP #Palette_Update_Max  l0 U" O% _% h  Q, g
  1079. BNE Update_Palette_Data_Set
    9 K1 y4 t+ ~( Z! ?- D
  1080. LDA #Palette_Update_Min - 1
    ! B0 j* N' Q: B" ~1 D& K
  1081. STA Palette_Update_Addr; u9 C4 a4 ?  q4 {4 f2 Y2 X' c" M
  1082. Update_Palette_Data_Set
    ; v+ F2 q: x  n6 F3 U
  1083. INC Palette_Update_Addr) v, e, X; i+ `
  1084. Update_Palette_Data_End0 n. P" Z; l8 w6 o2 U- r6 H* f
  1085. RTS
    ! I: H1 z' B* c2 J4 ~: R; t; F

  1086. % e! e5 u/ J1 Z( E2 j
  1087. ;==============================9 r/ G* T0 {* \# i3 n! `
  1088. Show_Music_Text;显示静态文本
    & }+ q: U; }7 J9 \; u
  1089. LDX #$00
    6 ?1 J# o4 C# n: W0 f- N; d$ d
  1090. Show_Music_Text_Set& |/ R; x6 ~2 I7 C
  1091. LDA Static_Text_Data,X! c4 z, N+ k8 [; R' A- Y, e2 A0 a9 Z
  1092. STA Data_L" w9 X# ]. E% u! Q0 y( P1 v% G
  1093. INX
    6 t; \- F: _& i2 e6 P8 N) M
  1094. LDA Static_Text_Data,X9 }% E3 ~/ D- q+ \8 Z4 q2 q+ I6 q
  1095. STA Data_H
    5 v8 g" M3 \, v5 M# V! j9 k$ F
  1096. INX
    6 T; D/ |+ e3 l$ R) n; M: [
  1097. LDY #$00( E% X6 S4 U' J& k+ C
  1098. LDA [Data_L],Y! K: M/ t0 f. k+ I
  1099. STA Data_Cnt/ Y3 D0 l, F' c, G) D0 A* P  C; b3 C
  1100. DEX
    - D+ w2 ~' a/ Y* h+ S
  1101. DEX/ F: T; A3 i. y
  1102. LDA Static_Text_Pos,X9 R! n2 h% d3 _
  1103. STA PPU_ADDRESS. c/ [* T4 [7 P6 X
  1104. INX
    . ]0 Y1 Q; e3 s  ?
  1105. LDA #$20
    ; r, Z. F" \2 f" {" t- I
  1106. SEC: Z5 ?; f7 s! m7 k/ _. y
  1107. SBC Data_Cnt& D; y. r3 P8 I# ~+ Z
  1108. LSR A
    9 y* |' M6 u' Q# @( Z: T$ _
  1109. STA Data_Buf
    ! p- M" W% P; c2 G& q
  1110. LDA Static_Text_Pos,X) d/ S$ U4 V, T+ [. x: q$ d1 E5 A
  1111. AND #$E0
    3 d# s' p& q" `1 H- n" H1 l
  1112. CLC
    , Y9 y9 S$ o8 w$ g( \1 ~5 o
  1113. ADC Data_Buf3 Y" q" d/ R0 h5 l: C
  1114. STA PPU_ADDRESS$ R; L* \$ q" W8 d9 F! b
  1115. INX
    7 ]$ h$ r  {9 y$ y  t
  1116. Show_Music_Text_Set_Write
    . l1 T3 J$ H" k3 d2 e& f# U
  1117. INY
    3 ^7 k; u6 C' }! ?, o
  1118. LDA [Data_L],Y
    ( Y1 R* \, T% D  {
  1119. STA PPU_DATA
    9 h+ F( n% F" y& m; ?. C& T
  1120. DEC Data_Cnt
    - [. L# e1 _" F2 e+ x& s1 a
  1121. BNE Show_Music_Text_Set_Write
    8 L- A8 \, D0 H0 H$ Y! q1 y
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos4 K* z. z: Z: I' K: u  x  j
  1123. BCC Show_Music_Text_Set
    & w; Y9 T4 J2 G0 Z/ @6 y# Q
  1124. RTS$ `) F% C$ p) B8 ~7 ?7 I5 f
  1125. 7 L2 T9 X4 Q( D+ F; F
  1126. ;==============================( A0 ^4 l6 G: `
  1127. .IF Track_Name_Pos;显示曲目信息
    7 W; X* n/ J% J& E9 a, t( H! j9 I4 @
  1128. Show_Track_Info
    ) C) |/ F8 @( P! M1 l/ L; m
  1129. INC Show_Track_Name
    ' G0 q8 R$ M3 M
  1130. Show_Track_Info_Clear
    / y8 v( u9 B- t
  1131. LDX PPU_Cur
    2 }+ \% f1 m( \+ G! m8 I
  1132. LDA #Mode_Clear
    9 N" P$ g& p# x) c8 `
  1133. STA PPU_Addr,X
    8 }* y/ Y" G6 a# Y+ L
  1134. INX
    & A% H  u* R# @# q
  1135. 3 X, e! c* \0 n
  1136. LDA Music_Last8 e4 H' w! R8 M; q. X7 D
  1137. JSR Show_Get_Track_Name_Center_Pos
    # k7 p4 k7 c( H
  1138. Show_Track_Info_Write_Cur
    & B4 ^+ O2 t6 z  I# M
  1139. LDA #Mode_CntLine4 J5 \& v3 B& W
  1140. STA PPU_Addr,X
    6 D  \3 n- O: H5 f6 G3 B
  1141. INX
    # T% B6 x' k' H) E) c
  1142. ( l7 C) U) M( d; A+ l0 K  ]
  1143. LDA Music_Cur
    : E6 ]3 J! k/ s  |* u/ \& m3 B  F
  1144. JSR Show_Get_Track_Name_Center_Pos4 I: X( ~8 y# ^$ X1 l

  1145. ! Q8 f/ R# d( G1 ?- Q
  1146. Show_Track_Info_Write_Cur_Data
    0 [& _' F) f4 ~. Z/ H4 p5 ^1 Y1 w
  1147. INY
      y8 l$ P* W0 [, j) h3 y& T
  1148. LDA [Data_L],Y; D5 f) ^2 O0 R. d5 q" O
  1149. STA PPU_Addr,X! m9 B$ x9 w7 q( D) Y  P  u* l
  1150. INX3 n: ~, |. I4 N5 z; c4 g/ M
  1151. DEC Data_Cnt" G' Y. p; J9 P* x0 Y& C; f
  1152. BNE Show_Track_Info_Write_Cur_Data
      r% z% n: b3 D8 A
  1153. Show_Track_Info_End/ t2 \# M" [5 E/ g" l+ i
  1154. STX PPU_Cur0 l2 m, \  m' t& Q7 {* Z0 ]
  1155. RTS
    ) o$ Y2 Z4 v3 u2 R

  1156. + t; z( K+ n+ j' ], `2 _
  1157. ;==============================4 ~+ _! z2 P0 Y# P% w' {
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    : V7 Y8 E2 d1 V( W/ a8 r
  1159. ASL A3 R0 B+ Z2 o, M7 k
  1160. TAY/ y( s$ J: ]$ `. P3 E
  1161. LDA Track_Name_Addr,Y+ ]8 G) B" c, H( J$ `* z
  1162. STA Data_L
    + M3 F. O" D% U. f1 T
  1163. INY
    * U3 z9 K1 q8 u9 O4 k; J
  1164. LDA Track_Name_Addr,Y
    8 u5 h) m- c2 d# j
  1165. STA Data_H
    5 Y4 L- Y0 r6 l) D$ N7 m
  1166. LDY #$00
    7 u5 o- F! j: K3 c+ Z3 o! l& m
  1167. LDA [Data_L],Y9 ~* L3 K  ^) S  z  d* y+ }2 K
  1168. STA Data_Cnt
    5 o9 @  O" K9 V6 H6 A
  1169. LDA #$20
    ; l6 H- y& r  e5 Z
  1170. SEC( N  J( a9 }- y* A" P& K+ O
  1171. SBC Data_Cnt
    # Y4 `6 V4 Q# F0 J+ @2 a  x
  1172. LSR A* Y3 Q5 r' T7 R* h4 P: W5 k
  1173. STA Data_Buf
    + _" q, b" m  k6 {, k. i" B  n
  1174. LDA #HIGH(Track_Name_Pos)
    $ u4 q+ }# l% b/ r! l
  1175. STA PPU_Addr,X+ z' ?, Q, u0 N, ?: F" I3 }
  1176. INX2 z. D' n, F. M8 J
  1177. LDA #LOW(Track_Name_Pos)
    8 `4 U6 c2 f- j5 t1 e8 W
  1178. AND #$E0  m/ j+ L3 j. h5 }8 J
  1179. CLC
    1 d& l8 m( P" x
  1180. ADC Data_Buf
    , Z  E( i+ x) O
  1181. STA PPU_Addr,X' _7 X1 b/ t7 b  Q, l
  1182. INX
    * t) M0 n& F. i  X( d
  1183. LDA Data_Cnt' w# v, a) A& L" h# v7 E- a5 ^. r
  1184. STA PPU_Addr,X  i9 @0 ^% R. @2 @8 J& y$ t
  1185. INX* a, X) W' k: e& b0 I
  1186. Show_Get_Pos_Center_End
    . ]& ^) z1 f! F7 z# y2 Z. J# a8 I
  1187. RTS  z- M8 q2 s% f) ^" V; z+ h
  1188. .ENDIF( T( [7 G, S* E2 j: _

  1189. # X6 J6 m: u1 t- C! i$ ~. P* e
  1190. ;------------------------------3 x4 @9 W1 Q# a  a1 |, f
  1191. ;命名表数据
    . H0 \: K  U( M. d
  1192. Palette_Attributes+ K" n: U- P! Y6 T9 O7 D' l
  1193. .IF SOUND_BAR_SHOW_ENABLE
    - ~# v: t9 |  C+ W- N- T2 h
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$000 O! D( d  z3 L
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ( [$ m! }/ M9 c
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55# E, Q1 {4 c7 e) |% Z
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$558 K( \* W/ Y/ ]4 l; ~, X
  1198. .ELSE
      G6 }, J7 x& u- y4 t( Z5 r! y
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    $ X# }% l+ M3 \/ J0 I. g* ?
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    ' H% I  A& J4 e& W/ W% B
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55& q& y# k/ [8 Z
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ( D9 P) ~+ V' M, f' [0 f2 I
  1203. .ENDIF& u. l  A2 v8 z
  1204. 8 u4 N2 G/ h" t1 U8 a! \* y. T
  1205. ;------------------------------
    1 U& c6 n5 N1 t" K; J
  1206. ;调色板数据
    0 E+ \2 ?' {  L9 Z4 R" z( e
  1207. Palette_Data& t. D$ M& @' W9 u0 \' t. P1 L
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    ( \1 x+ V: m7 S  V7 H+ Q7 ]9 q% o# \- Y5 s
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    7 A- o# Z' i# w
  1210. 0 y! u& E+ W; L% u7 {2 t
  1211. ;------------------------------. M/ x, B- f& p: V/ t
  1212. Static_Text_Data
    1 [( W/ v8 e' ~4 F9 [+ F% m
  1213. .WORD Static_Text_Title_Data8 P/ |$ l3 x# J# v5 f- c% x, U& v6 R
  1214. .WORD Static_Text_Author_Data
    5 y- l+ S5 ^+ m& P) B' z
  1215. .WORD Static_Text_Date_Data7 s: M0 e' o1 {$ A/ T) a: d) R6 k
  1216. Static_Text_Data_End5 k) D# b# D) E1 M% z0 _0 W, P9 y

  1217. 0 |: l& ^$ O: b6 T" R
  1218. ;------------------------------# I; S0 b$ B6 R# B" x. b; t
  1219. Static_Text_Pos
    1 Y3 b5 i7 p" _1 F6 @4 G
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)1 {5 p2 W4 Y4 E/ q
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos). @* V/ Z3 w9 m
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)/ g6 o! f- G& B% G+ J* D! A
  1223. Static_Text_Pos_End- R$ j5 H- @  G& w6 ^4 @0 {( K5 T

  1224. $ C1 P* [3 j+ I( [5 `
  1225. ;------------------------------: \9 C1 u& d8 [7 n# z2 Y+ j7 R
  1226. Music_State_Stop
    5 A% T% ]" A9 z
  1227. .IF SOUND_BAR_SHOW_ENABLE
    0 B5 _! t5 ?- c3 ^
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00  |& W5 k1 j2 w, V- W
  1229. ELSE
    ( _9 Y% E1 Q6 |' Z5 h; H
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    5 V4 `' x# H! c" V& U7 z( M/ T
  1231. .ENDIF# |. l8 Y) Q) [, t, E
  1232. Music_State_Play
    & e# B: R, Y4 j6 m; V
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00% ]( v5 f, T8 H8 A: l# Y. L
  1234. 2 V5 f" V6 b; F
  1235. ;------------------------------
    5 F2 R( M! p7 c  Y" i
  1236. Sound_Bar_Text_Data;声音类型文本; a% H4 C2 r8 T9 c7 d7 G
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos), U7 q" V& w3 O6 V6 T
  1238. .DB "SQ1-",$FF
    5 j4 t3 I( \8 u1 ?: r
  1239. .DB $FE,"SQ2-",$FF
    " @; X9 \5 ]. C3 ]
  1240. .DB $FE,"TRI-",$FF
    . M+ C5 ^9 W2 `1 `7 }% ]  m! G
  1241. .DB $FE,"NOI-",$FF
    4 V# l; b' `! H) K& [
  1242. .DB $FE,"DMC-",$FF,$00
    % l) A2 f. @5 i" r6 e- q

  1243. 1 v/ j& P3 H& b0 Y5 H
  1244. .IF Track_Name_Pos
    3 u# V  v# ]6 ?6 e$ E
  1245. ;------------------------------
    ; j2 r" D* G" ~; M% i# U1 q, z( d* G
  1246. Track_Name_Addr;曲目名地址索引+ S2 h6 \$ ~, y$ }, \6 F
  1247. .WORD Trackr_01
    9 L! N1 }7 i4 z5 ~6 h
  1248. .WORD Trackr_02! l, i+ x/ J' {: I7 g
  1249. .WORD Trackr_031 z4 s5 h: I  t6 D- G
  1250. .WORD Trackr_042 ]+ W9 G2 ?- H# I) {9 _- I
  1251. .WORD Trackr_05
    $ k1 q8 ]: x4 R9 E* v5 m# l
  1252. .WORD Trackr_06
    ( _: Y( E3 J* }) _$ n
  1253. .WORD Trackr_072 a! H6 f! ^, w2 I$ T" {! \
  1254. .WORD Trackr_08; G& L: B  {# P
  1255. .WORD Trackr_09
    + c3 A8 t# z  t4 y7 H2 A; @
  1256. .WORD Trackr_105 n8 ?4 y! l, E, H( z: s
  1257. .WORD Trackr_119 P+ x% M/ |" I( i) {1 U6 k9 L
  1258. .WORD Trackr_12; u7 [" c- Y; ~/ I, f- j
  1259. .WORD Trackr_13- T  X4 l! S& s) q+ [5 E9 W
  1260. .WORD Trackr_140 I% a* p! E9 d( |' R4 `
  1261. .WORD Trackr_15
      T2 M1 j' Q( A% t
  1262. .WORD Trackr_16
    1 }+ z3 W& K! Y' X( |
  1263. .WORD Trackr_17
    9 s  _- `, A2 b. n& X
  1264. .WORD Trackr_18: P. \0 \: Q$ A# |
  1265. .WORD Trackr_19
    7 X. B' P# o  p- r+ e) X( v
  1266. .WORD Trackr_20
    ; h4 L/ B( r; S- b
  1267. .WORD Trackr_21& \& F$ H- d  N( Z+ N( c/ F+ _
  1268. .WORD Trackr_229 L/ K  Y/ a" R0 s/ j
  1269. .WORD Trackr_23
      |* S- `! N$ U' v$ Z2 T" {
  1270. .WORD Trackr_24
    % k; |8 E  Z7 f
  1271. .WORD Trackr_25
    3 `5 m0 e% k$ \# e: ~
  1272. .WORD Trackr_26* T" D1 T2 h) O1 E
  1273. .WORD Trackr_27# J/ e2 J$ c( N3 s& z/ Y# ^
  1274. .WORD Trackr_28
    1 s6 o' G# l+ q3 U1 L( @
  1275. .WORD Trackr_29
    ! f, P3 A& f) V4 H* M& d% ~% j
  1276. .WORD Trackr_30
    , P" m1 T* U% S- L1 z# P2 Q
  1277. .WORD Trackr_31
      i, p! X! ]  e) y" n8 y
  1278. .WORD Trackr_32" U- P0 d$ i0 d, h
  1279. .WORD Trackr_33
    4 A- ?' B6 P8 c) J
  1280. .WORD Trackr_346 |7 q. w- i: I" j
  1281. .WORD Trackr_35; k0 Z( n7 v0 D! Y5 z
  1282. .WORD Trackr_369 s0 W' ?# l  E1 a5 {' C# U& @* `0 k
  1283. .WORD Trackr_377 K6 q: T# R; r! T3 Y4 N+ ~
  1284. .WORD Trackr_38/ n' c6 _9 }9 H3 R
  1285. .WORD Trackr_399 {0 A  `7 d% l" s7 S4 z% L/ C0 g

  1286. : ^& f6 ?7 c3 E! E5 Q- e/ E2 _
  1287. ;------------------------------
    2 B# X! S. m8 a' i, I1 I& u
  1288. Trackr_Name_Data
    ( A  W5 l/ H# F, D; O# _
  1289. Trackr_01 .DB $05,"BGM 1"
    % R/ Z9 s5 n8 j
  1290. Trackr_02 .DB $05,"BGM 2"
    1 ^, N* J7 N1 v$ A
  1291. Trackr_03 .DB $05,"BGM 3"
    2 _3 I7 }* R8 c" q
  1292. Trackr_04 .DB $05,"BGM 4"/ `: R  N6 ~$ h& w3 l( {7 E
  1293. Trackr_05 .DB $05,"BGM 5"0 N- `0 ^( \* _. H2 v
  1294. Trackr_06 .DB $05,"BGM 6"
    3 o! b! e" A( H" Z
  1295. Trackr_07 .DB $05,"BGM 7"' N- v* r. }* z" S% r5 G1 L
  1296. Trackr_08 .DB $05,"GREAT"- e/ n7 d! s; |$ E
  1297. Trackr_09 .DB $08,"BOSS BOM"
    1 y" U) a. `. S8 @
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    4 g# W8 b+ y+ j$ U  U& y" n
  1299. Trackr_11 .DB $07,"P CLEAR"* F$ F: d$ h- z. m5 D4 U
  1300. Trackr_12 .DB $07,"A CLEAR"6 x3 Q- s( R, A5 e" E
  1301. Trackr_13 .DB $04,"OVER"$ T6 F- \$ Q( ^5 g+ p
  1302. Trackr_14 .DB $06,"ENDING"
    2 A; R; u. m/ j* ~
  1303. Trackr_15 .DB $04,"SUTA"
      @; r# e& s* [2 k
  1304. Trackr_16 .DB $07,"THUNDER"0 U% Z" N. n4 `- }" ^
  1305. Trackr_17 .DB $04,"SHOT"
    , r9 O) _- j# `+ r# e
  1306. Trackr_18 .DB $05,"LASER"
    2 U# h6 s$ X' }6 f# [7 L
  1307. Trackr_19 .DB $06,"SPREAD"
    & P0 G0 g- E$ V( c  D
  1308. Trackr_20 .DB $04,"FIRE", N8 _' Q: R% m
  1309. Trackr_21 .DB $06,"B SHOT"2 V* C7 M9 Y) O) |- m4 t$ G
  1310. Trackr_22 .DB $08,"T DAMEGE"! N4 c% ^. D4 b' \
  1311. Trackr_23 .DB $07,"HARETSU"
    # I# b. I8 s) p; F* d, v4 o0 t3 F
  1312. Trackr_24 .DB $05,"T OUT"5 c6 }" [; N7 f! R5 v: c: z
  1313. Trackr_25 .DB $05,"Z OUT"* w# X2 l5 a4 B- f  g1 M6 @
  1314. Trackr_26 .DB $05,"A OUT"
    * R3 F7 S/ [- S0 @7 N
  1315. Trackr_27 .DB $04,"ROLL"
    ; Z+ D+ _' A5 O% a0 j! g' f4 S- `+ {
  1316. Trackr_28 .DB $06,"APPEAR"
    ' S2 c5 ^7 W- A5 d: M9 Z  y
  1317. Trackr_29 .DB $05,"POWER"+ A7 S3 c9 Y+ a( }1 x
  1318. Trackr_30 .DB $07,"BOKK BK"" L5 D4 _6 H* |2 G* R' M) w
  1319. Trackr_31 .DB $08,"BAKUHA 1"3 C- {4 S, @( Z# m# E  D
  1320. Trackr_32 .DB $08,"BAKUHA 2"% s- c& L) }5 c7 Y. J
  1321. Trackr_33 .DB $05,"ARUKU"
    $ d- C' i3 S3 T2 F& C; x) @
  1322. Trackr_34 .DB $06,"JIWARE"
    : T5 E: Z1 t' |  M, ?) E. ?2 L
  1323. Trackr_35 .DB $05,"SILEN"
    + Z% u4 V" V* n
  1324. Trackr_36 .DB $05,"P 1UP"
    " O0 l* [6 N  ^: Q% K" H, \9 Z, a
  1325. Trackr_37 .DB $05,"P OUT"( ]5 u! E, [+ D
  1326. Trackr_38 .DB $05,"B OUT": x5 b/ |/ e6 L# h
  1327. Trackr_39 .DB $05,"PAUSE"
    8 D% ~2 k: u2 e! _! e- R7 e
  1328. # l( A6 M( _4 q5 U" R4 @) \% X
  1329. .ENDIF
    # j+ a" C6 ]0 Q! U% J  f0 l  p3 T
  1330. 4 Q* B$ N6 t4 x! |6 ^
  1331. ;------------------------------
    8 S! q  @- r: l0 U% F, P
  1332. Static_Text_Title_Data;静态文本数据
    * a& e% m2 f" S# R& p  q
  1333. .DB 121 c3 |( T5 F& k* _! H
  1334. .DB "SUPER CONTRA"8 N) c# y+ q' q- H0 \/ P4 r
  1335. Static_Text_Author_Data$ G! ~4 G2 T0 Q3 L
  1336. .DB 237 }- h  p- W) F, \6 k8 [8 c
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    - q6 I2 H/ ?; s4 G: ?% e, d: T
  1338. Static_Text_Date_Data* c, S5 N1 `8 Q: P; C
  1339. .DB 109 _( K0 L. I% x* p8 ^
  1340. .DB "2023.07.11"7 Z; r+ t  ]- M. T# z# Y. u
  1341. ! D& o: K; {, i2 k# h
  1342. .BANK RESET_BANK & BANK_DATA_MASK+ W! x0 I* |7 x- n! O- D( L
  1343. .ORG RESET_ADDR
    0 q& X7 d* T- q

  1344. 5 o) S' z$ P7 V2 F# _
  1345. , M( j% l5 Q6 x" N# f
  1346. ;==================================================) t! d$ r& J/ i
  1347. ;切到主程序bank
    ) R) ?3 N9 p. C! z
  1348. SwitchMainBank: D5 Y& I5 b1 D0 c$ O5 s
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK2 Y6 w0 j% }, b/ n, y6 P
  1350. JSR SwitchBank8000- ?$ J1 `+ D' ?2 h# ^- C" Z
  1351. RTS
    ! O: C6 B& D# @1 ?2 M) [! r

  1352. 0 E- t0 S( C: x- l
  1353. ;==================================================% k9 F( W: B, k  ?: i* j
  1354. SwitchBank8000;切换bank到8000-9FFF5 J) [- R+ K: y* f1 U: S$ R
  1355. PHA
    8 b& w! k6 T. p; S; O' i
  1356. LDA #$06( V' y& B1 m% g, a9 s
  1357. STA MMC3_BANK_CTRL
    8 e9 I4 a. |7 P
  1358. PLA0 c* B' A! Q" j4 R* F- I
  1359. STA MMC3_BANK_DATA
    8 ^; Z9 k0 q$ J7 ?2 w% K
  1360. RTS
    . E: k5 i- ^8 j3 z) L/ X

  1361. ' G( Q- `# j% j
  1362. ;==================================================
    - ^& d4 U# S) a
  1363. SwitchBankA000;切换bank到A000-BFFF
    8 c2 q% I. M0 n, u
  1364. PHA
    / H- v. j2 Q8 Z' \
  1365. LDA #$07; t5 [) S/ ^* g$ e1 I
  1366. STA MMC3_BANK_CTRL
    ' S1 _  ]4 @; e0 M  O
  1367. PLA
    6 D( x. p, B& P$ j6 h# v
  1368. STA MMC3_BANK_DATA0 a0 Y/ F; L. t
  1369. RTS
    9 Q% N8 N6 J+ r
  1370. ( I  o" P8 z" z/ x+ ?- ]6 F
  1371. ;==================================================6 ^' L* g$ D& v% e. j
  1372. Sund_Bank_Init;音乐bamk初始化
    1 a- k. }9 s4 Y; e/ K) @: G& Z
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK& V# ]% \- q; S( G
  1374. STA Music_Bank_8000
    : P2 O% H( w* `1 L1 K% N$ A  B+ ~
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK% u. I$ |/ z& T/ Q& L5 M, C6 F
  1376. STA Music_Bank_A0000 _* B. ~. f( R' X8 B
  1377. RTS! L  ^  u1 y3 e

  1378. + \( B6 y% a) B! i+ |
  1379. ;==================================================6 v9 g5 B% c( h6 _) s2 H3 N
  1380. Sund_Bank_Set;切换音乐bank
    4 v; M+ k) p$ C' y" }; ]1 ]* q: r
  1381. LDA Music_Bank_8000
    2 y. J, o& U- Z3 z3 Y
  1382. JSR SwitchBank80002 Y3 b, \" E$ X1 n0 p2 U: H
  1383. LDA Music_Bank_A000
    # v( o* ~' d/ C
  1384. JSR SwitchBankA000
    # D  g" @, ~$ @$ G* b1 b& ?
  1385. RTS
    ; @; r0 B4 |" a/ \1 N, a! G: K8 u& \
  1386. : J! N) e9 T; X! a1 L. z+ `, T
  1387. ;==================================================
    0 _* {7 i: f  h/ }
  1388. Sound_Init;音乐初始化
    ( q* j) a" R! O& ]6 c
  1389. PHA  \& W- _* y% [7 d4 Q/ d) ~# F
  1390. JSR Sund_Bank_Set2 S7 l/ `. j  E$ p
  1391. PLA- H8 N# n9 T, L$ M/ _
  1392. JSR Music_Init_Addr% l) Q( Y$ v0 C8 G: G& T' K5 ?. ~
  1393. JSR SwitchMainBank/ I* j; U& F* n: @* M; d
  1394. $ l* w" Z9 m6 Y- d0 ?5 z
  1395. JSR Music_Bar_ReSet
    $ t3 V5 R1 R% @& v& w7 P# s1 P+ |
  1396. JSR Time_ReSet
    4 }; j. s/ z. m* k' H' e9 k
  1397. LDA #$00' {  `" S  V4 J! f# Z
  1398. STA Music_State
    / y2 w- z& N2 |3 C8 i
  1399. JSR Music_Stata_Show
    7 K- L, c$ s9 G- S1 |, v" ?
  1400. .IF Track_Name_Pos
    % M( z" K; f/ V3 s* A. Q% Y* _
  1401. JSR Show_Track_Info
    9 `  l7 T7 J6 _0 _" n, J
  1402. .ENDIF
    ' N# ^: y2 f# Q$ \  m
  1403. ! }& L0 n5 _' O# c* e
  1404. RTS
    * j, Z4 x- h7 f# @7 b) H' x( d
  1405. 5 }5 g  B% X* {  k" `$ b3 U
  1406. ;==================================================1 t2 A, ]; [) W, c& A8 u) B$ x! h; ?
  1407. Sound_Play;音乐播放
    5 P. c4 q- S1 z  U' S" Y* C+ p3 s" W
  1408. PHA
    : [; E) @) V5 x6 V" l  C
  1409. JSR Sund_Bank_Set: r' X) ?: e- s
  1410. PLA$ X: l7 P  f9 u& ]8 Y: y
  1411. LDA Music_State
    ( s. ^2 Q" E2 P, i& {
  1412. BNE Sound_Play_End8 P  o: K* {& X
  1413. JSR Music_Play_Addr
    " x+ @) _* [: ~0 R% T' r% E4 @
  1414. Sound_Play_End
    6 R: V9 U! H" A  i
  1415. JSR SwitchMainBank9 T$ w$ Z& i* [8 ?) S0 L. z
  1416. RTS
    1 c5 ~, }  O- P, g- i
  1417. " G4 }+ }) |6 F3 P) r
  1418. ;==================================================
    2 S0 F+ }- O' m) m2 q; P5 G1 {6 m
  1419. .IF Music_Reset_Addr
    : f9 ?: b- ~/ \  u$ l
  1420. Sound_Reset;音乐重设(如果有的话)
    ' d4 F! i8 ]7 q% t+ ]5 x- i
  1421. JSR Sund_Bank_Set
    ) K! f( j4 x, j; @1 t
  1422. JSR Music_Reset_Addr% {9 \8 }! M5 @  I  P
  1423. JSR SwitchMainBank9 r. z: k3 N+ w9 p1 _
  1424. RTS: O2 Q6 R* l- ?' X: Z
  1425. .ENDIF
      A/ o, y6 _- x! i6 _0 B
  1426. 1 N) q) U' c; w3 y3 g
  1427. ;==================================================. U- n* G- i& q% x, G
  1428. MainLoop;死循环6 ?* J& F( s1 @; ^# P' H) V
  1429. JMP MainLoop, y  J: n( K2 E; J

  1430. 9 ~, d8 i% `' R
  1431. ;==================================================' Q; v' t! t# O2 A2 t5 q0 n
  1432. NmiProgram;Nmi中断处理' o/ C9 r% U' |' L" F
  1433. PHA& L) l' k. ?5 K3 T5 ~2 t
  1434. TXA9 g5 R6 i. j! ?
  1435. PHA' E/ D5 u- A! A& C4 O6 E
  1436. TYA
    , n$ p! R1 m; F3 c6 `6 _$ w7 P
  1437. PHA) j1 x- ]* `- @$ ]% g3 r5 ^
  1438. 3 ]6 j9 \6 ~) T' w- C
  1439. LDA PPU_STATUS) a, D% W7 K& Q$ A6 u# a
  1440. LDA #$00
    8 ?$ {) J: `, g) e4 T
  1441. STA PPU_CTRL
    7 ~& Z- ?# K6 E& s! O! [/ n

  1442. + V/ p7 d4 P, [# ~
  1443. ;切换主程序bank
    ! B, ^; S2 d$ ^% l9 l7 B% z; i
  1444. JSR SwitchMainBank
    7 B. y/ r9 S( N6 R0 t

  1445. . s) }: T8 @# I4 E0 E5 @; e
  1446. ;NMI处理2 F  [$ P2 D, z! y; u
  1447. JSR NmiProgramProcess; F8 U5 T+ p$ d) F- m5 ~* U8 g2 C! `
  1448. - I* L4 H4 g' N( u' z
  1449. Nmi_Proc_End
    + L/ ^& `' a) h) d
  1450. PLA+ l2 {7 ^, Z: e4 @  U7 p% ]1 B& r
  1451. TAY
    , |- J4 @2 }# x7 o" S/ `* ~# L: l! H
  1452. PLA' A8 j" D0 `! P- f) x2 k8 ?2 ~
  1453. TAX- Y4 }* z( y; {8 V5 g' m
  1454. PLA
    # y' y# N# V3 O' |

  1455. ! r5 o! G9 R  I% R+ B6 ?$ X/ E  u
  1456. RTI# d* n5 F0 ~4 H0 X
  1457. 4 J! {4 p: H/ T7 c2 X( `
  1458. ;==================================================7 L6 j; \6 O2 B) ~9 d
  1459. ResetProgram;重置中断处理
    / F9 E0 L9 B  M) w8 k
  1460. SEI
    ; d* c- b4 f7 y3 x3 h
  1461. CLD
      @% a' b8 U% w2 R/ k# J" W7 m' u
  1462. LDA #$00
    ' o0 g( E* x! F7 p: V4 W$ j
  1463. STA PPU_CTRL! F" Z) {4 m2 }6 k
  1464. STA PPU_MASK
    " O4 d/ ?2 @; X) l

  1465. # s) l7 K. n! O/ k
  1466. JSR SwitchMainBank
    / c3 D! \- Q4 L# v; J
  1467. JMP ProgramBegin
    ' i; C- e9 e& e: }4 G, _- p! ]
  1468. 3 V! G3 i) V, Z& d
  1469. ;==================================================( ]% b3 c4 d; q) c/ z8 r  C# I# o
  1470. IrqProgram;Irq中断处理9 K, N7 w8 D6 M, \  \
  1471. RTI/ G/ h2 B0 l4 \1 i- \
  1472. ! l8 g6 e! ^% n* m' p9 F
  1473. .IF SOUND_BAR_SHOW_ENABLE5 R$ F; N/ h8 @6 n
  1474. .ORG $FF80- E5 }/ Z, r/ j2 V# F6 L7 e; {
  1475. STA $4000,X' A9 d& Y2 c2 w; N6 j
  1476. STA Sound_Bar + $00,X
    ! H# ]( ?0 `, G. x3 n. g3 e8 _
  1477. RTS
    * x# c9 C2 Z/ J" D

  1478. 0 s0 S. g+ Z; a8 v8 J. e
  1479. .ORG $FF882 Z+ f, i& L5 m- M/ K- ]- u
  1480. STA $4000,Y. z5 b* u+ k8 i! h
  1481. STA Sound_Bar + $00,Y
    ! t$ O9 F* q9 g0 b0 u
  1482. RTS8 h+ k6 K- s" v- ]

  1483. 1 U) b2 A7 t" `- _% T
  1484. .ORG $FF90
    ; Q) ]& g6 Z1 ^' R  f& f6 M" M  v
  1485. STA $4004,X* U6 {7 A' m1 G* S5 o
  1486. STA Sound_Bar + $04,X
    6 R' m4 C. a* F* F+ ]% ~+ _
  1487. RTS) ]  i9 k- K) `4 h9 O4 [
  1488.   |4 i: O1 F) d0 z0 A# q/ |
  1489. .ORG $FF98$ V! t7 }  Y$ W: Y( {9 E3 b
  1490. STA $4004,Y
    ) P% H! Y6 p6 q3 j( S* q" R
  1491. STA Sound_Bar + $04,Y
    - J+ H: Y* p: [
  1492. RTS" _# b& w$ g" {, u

  1493. + T) P8 W! L0 W$ k; S, N/ e
  1494. .ORG $FFA0' y, V9 }( D' F& q4 w, |
  1495. STA $4008,X5 {5 L. \5 f( G% u, c: S, ]+ Y& G
  1496. STA Sound_Bar + $08,X
    8 g( r" A8 o: M4 m5 D( x2 [+ W
  1497. RTS
    7 h0 P( b' L8 b" q8 n) R
  1498. 8 t, u9 ~: x8 m( l, D
  1499. .ORG $FFA8
    + R. _8 u/ {5 N8 j  H- e" T2 M
  1500. STA $4008,Y& {! p: e8 m+ z6 I/ C& R
  1501. STA Sound_Bar + $08,Y
    2 D) V, M2 ^6 c* D
  1502. RTS
    % ^0 J7 C( I9 z& J. ?0 o
  1503. & d8 ?, }4 T- \! \5 T5 T) X7 w
  1504. .ORG $FFB0
    0 O! {2 A: i% }' r8 k6 W5 ?' P
  1505. STA $400C,X
    # i7 }5 `, Y) D
  1506. STA Sound_Bar + $0C,X
    9 V; r& B2 k" [/ N8 j& S
  1507. RTS
    & k) y+ Y) {" W8 V  B# g( w/ C* T) o

  1508. 4 H# y  L( p8 e5 p/ M4 O# f- y
  1509. .ORG $FFB8# U( o5 T$ V' n' y$ {
  1510. STA $400C,Y
    4 `  _1 Y9 C2 T3 P
  1511. STA Sound_Bar + $0C,Y$ J% C/ W7 w/ w( i
  1512. RTS% F  o, r% S7 x; e% Z

  1513. 0 l  U4 z/ ?5 V' }4 _4 h2 u$ R1 V
  1514. .ORG $FFC0& a7 L* e$ m7 u) L- x
  1515. STA $4000
    8 t8 O) S4 Z! u
  1516. STA Sound_Bar + $00( |+ W" d8 V' {
  1517. RTS' y" @* B: U7 \4 ?
  1518. , m! B4 I6 ]% K0 U9 S
  1519. .ORG $FFC85 o' j& B. S( K  a3 y$ Z
  1520. STA $4004
    # [; L) `9 c) e, |$ }% q
  1521. STA Sound_Bar + $046 t. Q1 v  C: l* v7 b; l
  1522. RTS( W+ M% _1 I% `+ C  l

  1523. 4 }  {5 p' y% y* W5 t0 b; B
  1524. .ORG $FFD0
    $ g9 }6 E$ \$ ]
  1525. STA $40080 O5 n8 Q; `, t6 s7 y
  1526. STA Sound_Bar + $08+ Z" u$ q9 G2 ]' R6 V
  1527. RTS. D$ b* [& S2 K' N7 h$ ~
  1528. + b  n; D3 Z5 \3 I
  1529. .ORG $FFD8( v3 J2 c  w/ J! S; B1 T: g7 H
  1530. STA $400C
    ' F9 [8 e' T8 ~3 j! L
  1531. STA Sound_Bar + $0C, m; C: D+ v" C5 U  r9 n$ ?
  1532. RTS
    $ w  u* {6 w' h5 I0 O1 T
  1533. ! ]0 y! B) Z, I
  1534. .ENDIF
    . U" u! g4 Q6 ?! c0 j" M1 h/ H/ p

  1535. 6 q* U" N) N5 M: I! u4 j8 U
  1536. .ORG $FFFA8 F0 P; P( J6 w% ]4 E
  1537. .WORD NmiProgram
    3 w& ]1 }8 v6 y) c
  1538. .WORD ResetProgram
    * Y; s' Q9 V  o8 B
  1539. .WORD IrqProgram
复制代码
$ m) [9 r+ e& f8 {* d) N

" h. a& k' O7 s' U6 {
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1194 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3184 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-26 19:18

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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