EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
- |4 i! o4 Y1 v. J- n) p) n
# ]8 X( L+ p1 Y& j* W* {% s1.魂斗罗) ~1 I  ^5 D0 d. H8 B9 ~
2.超级魂斗罗
& v0 l4 C6 B  D/ G, q1 L. |3.赤影战士
  M8 ~+ i' K8 x0 o3 Q4.忍者龙剑传2
7 R# d# b$ k/ K$ ?1 W' i
' `  B/ {- P0 ~! K9 B* Z+ @! q  q# I) }3 z- E
' N9 m$ y$ \/ C2 n* I

7 S1 I7 W: o6 J, n. Q* q. z& M源码:
. c% J+ k+ S+ t( r1 C" Y
  1. ;[FC音乐][播放器模板]
    " B: q. s5 E+ Z4 m. S% k- @) d
  2. ;FlameCyclone 20230710
    & j. `! w5 z4 W2 ]8 B
  3. 6 R" Z1 k# P) o) q' c. ]- F0 E9 d
  4. ;文件头
    6 h0 E% o2 j3 z# N3 H/ E# \
  5. ;======================================================================
    1 b$ ~% S! J# P* y- c
  6. .INESPRG 4                                              ;16KB PRG 数量) I7 ?9 y! E( q0 D/ K
  7. .INESCHR 0                                               ;8KB CHR 数量' K. D( d. Y# g) D6 K- E9 X8 j2 Z
  8. .INESMAP 4                                                   ;mapper 4
    : Z& S# x  x4 R% O
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直7 V' F, _! E+ x' h9 {- N& V2 @% Q
  10. : u1 X' ?  ^5 n0 _7 `/ o+ g) H
  11. ;==================================================$ i, b7 m/ g5 l/ F$ d' Q
  12. SOUND_BAR_SHOW_ENABLE       = 1- Z* N) |4 C' U# E1 S1 [; p# H
  13. ;==================================================% ]( Z0 {- K  t
  14. BANK_DATA_MASK              = $07
    . W+ ]7 |) ^# U  |9 I
  15. ;==================================================
    9 x& c5 j7 P: J% U$ O
  16. SOUND_DATA_BANK_0           = $00
    % H" ^/ z6 r8 t8 D( {& U
  17. SOUND_DATA_BANK_1           = $012 x! q( V" o! H1 l
  18. SOUND_DATA_BANK_2           = $02
      P+ T/ v+ z- B$ b1 {
  19. SOUND_DATA_BANK_C000        = $06) U1 ]  t% ?5 L, z$ k) ]

  20. # f/ G4 f+ B5 |4 c9 E
  21. ;-------------------------------------------------
    ( d& u/ M. m# z4 j* f, K, c
  22. CHR_DATA_BANK               = $047 Q: X0 |/ u% ^! R
  23. CHR_DATA_ADDR               = $A000
    9 i! f( M& d  n  ~* }9 ~
  24. ;-------------------------------------------------$ l( e6 j4 h& c/ A
  25. PROGRAM_BANK                = $05; Q- W8 c; b$ _9 N5 j  o& u
  26. PROGRAM_ADDR                = $8000
    2 u5 x  \  [; ~7 g3 h! W
  27. ;-------------------------------------------------" \% l1 t) L! @) Z0 H2 J' W" C( s3 }
  28. RESET_BANK                  = $075 ~1 D  l0 N- [3 f! [6 ~; O
  29. RESET_ADDR                  = $FE00
    / M4 T. \, y6 |; D" ]+ B  A
  30. ;==================================================% o; ~& ^" K  R4 g/ U. |% `/ @% b
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址- ?: A: z- E% C3 D' l
  32. Music_Play_Addr             = $813C ;音乐播放地址
    + W5 i3 S- ^0 Q( L
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    ) s: `9 T* ~% d# M, G$ K
  34. ;==================================================
    # z, x5 O5 @, e& P$ _0 ~+ C! D
  35. Music_Song_Total            = 039  ;全部曲目总数4 s1 B8 a+ ]+ L( m9 Q5 y' D
  36. Music_Start_Song            = 007  ;初始播放曲目/ v, ?& R, Q- I4 v  x
  37. ;==================================================
    # b' g( u" d% X5 G* @* w1 w

  38. 2 R- f+ n" l: |4 m' E4 Q
  39. ;==================================================
    * u- c; U9 U) F5 m8 l# t/ [6 _
  40. Title_Text_Pos      = $210D ;标题文本位置
    * F% G+ ]/ p# d# O. r/ q
  41. Author_Info_Pos     = $2284 ;作者文本位置$ y. }) e4 V# J4 \7 w5 j7 b! A2 w$ l1 L5 O1 H
  42. Date_Info_Pos       = $22CB ;日期文本位置
    0 A8 o4 w" ^0 e
  43. ;------------------------------( v$ h9 \  @& C) n; ^
  44. ;------------------------------
    7 d' B1 b7 K2 K1 F) t+ Y0 G- V
  45. .IF SOUND_BAR_SHOW_ENABLE
      k, v, E+ l- S8 K. O  o+ z: h
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    , I% I8 l/ C; l  q  E
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    : O. W$ K; u" h# _6 ]) k" K
  48. Play_State_Pos      = $2233 ;播放状态位置- c! Z3 M/ D  P5 K) \. C7 _
  49. .ELSE: R  \/ O& x" f7 L! [' G
  50. / e7 d& O9 w0 w& L+ W# s
  51. .IF Music_Song_Total > 99# v2 e2 O+ d7 ?' y- y! r
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    ( \  {# G% f" [4 ]( s! H
  53. .ELSE
    + @+ k9 q3 A5 o  {
  54. - c, i, y" a: X! B& L
  55. .IF Music_Song_Total > 9$ c) h. ^5 w# q  L+ j1 Q% T
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    # a. T2 P9 @& u* S0 y2 S; o
  57. .ELSE
    ! X- P: |( S9 q  `/ W
  58. Play_Index_Pos      = $21AE ;当前曲目位置) n: o7 A  K9 y1 W5 f& D4 K9 o
  59. .ENDIF! ^9 X" m' L8 D4 A5 h
  60. 8 z' c' E: H$ t$ Z& j6 n! w
  61. .ENDIF
    " O& E5 f3 u- T) Q% }" C9 q2 V# [! K2 Q
  62. - B7 u7 F$ R$ a* e  ~7 ^2 L; ?0 x

  63. " x0 x+ f" U$ k, ]: P/ z
  64. Play_Time_Pos       = $21EC ;播放时间位置
    * v* ]  Z+ g- @: L+ n
  65. Play_State_Pos      = $222C ;播放状态位置* e6 t8 G& l& L5 w( W
  66. .ENDIF
    " `. l+ a; m3 v
  67. ;------------------------------
    - u) K$ m$ E$ M6 N( G  n5 E9 l
  68. Track_Name_Pos      = $216B ;曲目文本位置
    6 ^. F( c7 `6 L3 c5 }
  69. Sound_Track_Pos     = $21A5 ;声道文本位置& T( [, M. L3 t2 ]" q0 R' r- F" i
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置# _9 y$ D/ l6 g: J- x5 d5 X  V
  71. ;==================================================: u1 S4 y6 a% Q3 a
  72. Scroll_X = $00
    % ?- V, B2 G0 [  Z0 F* z
  73. Scroll_Y = $06: z7 s8 T- Y& ?. D
  74. ;==================================================4 _( i0 u5 \1 h3 B; a+ q; o9 Y. A
  75. RAM_Cln_1       = $0100
    4 |& z8 |1 U2 c+ M- Z
  76. RAM_Cln_1_Size  = $80
    . k) y# F& M$ V9 r
  77. RAM_Cln_2       = $00E0
    1 U, y8 V& R$ c& E: ?& c0 I
  78. RAM_Cln_2_Size  = $20
    9 T9 Z  r5 F4 p  f$ t
  79. RAM_Cln_3       = $00E0
    $ y! `/ ^) z. c
  80. RAM_Cln_3_Size  = $20/ v  R0 A8 y/ A* C

  81. 0 l6 X, s. G! ^1 m; z& u
  82. ;==================================================
    ( X6 C( O+ X9 [' {1 ~
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    , I& N0 D) F4 e# \
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器# |) i) ^$ a0 A6 R2 g! S
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位3 ~) Y. G: m. U( t3 [6 p
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # l* e/ u( ]) s* ]; P5 Q
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
      B. \+ Y. @+ j( h8 U) c; @4 n
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 % U  @# I( n! m: @% a
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    6 Y& v% h$ [( Y) U8 J7 u1 i
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 / Y+ L' d1 T% L
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    / t7 f6 b' C5 m8 P
  92. APU_STATUS              =   $4015   ;声音通道切换
    1 e7 l# f2 i2 a2 s% A$ X2 m+ d
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    : k% i% F" t+ Q: X; x) V+ z) @
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    ' m# B0 c* A1 P4 b9 \. Z
  95. ;==================================================
    ! p/ I0 s* X1 l( Q5 w. x+ Z' t! d
  96. MMC3_BANK_CTRL          =   $80002 m1 a7 f- m4 o6 ?5 g+ J- }" t& |
  97. MMC3_BANK_DATA          =   $8001) \3 P% O9 q: [& {4 _/ I  D# m6 E- {
  98. MMC3_MIRRORING          =   $A000
    / I8 W, ~) j. D5 B2 g  }! v
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    9 v. m9 q1 F! v# d4 u1 W/ g2 l; Z
  100. MMC3_IRQ_LATCH          =   $C000
    4 t3 y4 y9 K# N* b  w3 v* ?
  101. MMC3_IRQ_RELOAD         =   $C0015 L, J5 d# Y) _' u
  102. MMC3_IRQ_DISABLE        =   $E000
    + \- ?5 U: d1 V6 Z) i
  103. MMC3_IRQ_ENABLE         =   $E001
    7 \( j; h: g/ I. ]- @# ~: @4 P
  104. ! Q8 N6 v2 V) f; |
  105. ;音乐数据块2 F) O1 \% ], h5 }- b4 P; `

  106. * T' x5 R9 F5 ^1 J& _% _* T" @8 ^
  107. ;======================================================================
    2 e$ V! l& |5 U
  108. .IF SOUND_BAR_SHOW_ENABLE
    ' v" T( P8 m0 o6 p# g! h
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ( l' w$ M3 F# L+ U% }% h- r# P& E
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    ) x' @% @4 }% D9 H6 i, D4 ?4 `, e( \3 \

  111. - X1 k* Z3 r1 H
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK2 b3 S9 y0 M2 U" e; I; W0 i7 c
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    2 Q7 `5 H* O  c4 D6 n* j
  114. & @/ j9 Z1 h, `
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK4 ?  R. t; h$ e- F* J
  116. .INCBIN "sound_bank_bar/music_data_2.bank"7 C  Q; N# @. M( b) W% K
  117. : i/ ~, c# C- r0 m5 C, H1 V2 i$ ?
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK1 T" N) J; y5 Y+ A9 K
  119. .INCBIN "sound_bank_bar/music_data_3.bank"& ]1 s/ a7 y! f' g1 F  I0 ?
  120. ; Y5 U4 A% a5 m
  121. .ELSE& b/ _. ~. Z5 e/ U& G8 P
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    4 d- L8 Q' g/ L/ O2 r
  123. .INCBIN "sound_bank/music_data_0.bank"; F# X- N+ O+ l  p% K
  124. ( }: i  o9 w, ?$ u
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK1 n+ ]) ^  |: O4 P8 M2 Y8 _$ h) z9 \  ^; n
  126. .INCBIN "sound_bank/music_data_1.bank"( y+ U; {+ e) @7 S# F5 E# \' o. X, D

  127. , C- v5 f) w6 O7 a
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ; ^8 w% t4 Z5 {0 Z7 ^5 A
  129. .INCBIN "sound_bank/music_data_2.bank"& i6 |! N$ q! J* E+ W' F: {
  130. ) ^3 s: E% v" P; q
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK& |# D! G* g% L8 _; o3 w
  132. .INCBIN "sound_bank/music_data_3.bank"( I, e4 ?# V2 w$ |2 L
  133. .ENDIF- k& }, n$ z1 N8 r# u
  134. ) [: P! C+ q& r: G( u# R/ E- i
  135. ;CHR图形数据
    6 s- C  ?. @2 F! q( M( ^) X
  136. ;======================================================================
    9 S* A  b/ k8 j4 k" i; t% ~2 N
  137. .BANK CHR_DATA_BANK
    4 |2 d# I! J- h6 Q5 r. {: Q
  138. .INCBIN "chr_bank/chr_data.chr"+ `5 O2 E! i, p( [/ B$ n) B% y

  139. " M6 c7 _4 a( Y8 p- x
  140. ;==================================================
    ' S* N# E# z* y1 A8 B
  141. PPU_Addr        = $0300
    " T& N% H$ t! D2 ?% f$ Q% ?
  142. Palette_Addr    = $03C0
    " f9 x9 [4 n7 U8 T# ]# B7 b' C
  143. Sound_Bar       = PPU_Addr+$E06 G' ?; o$ P5 A' M2 F6 F" O5 S0 r7 U
  144. ;==================================================
    " _2 g1 c6 E8 f/ t
  145. Palette_Update_Addr     = Palette_Addr+$0D! Q& T" v9 {/ Y
  146. Palette_Update_Max      = $2C
    * ]6 a6 o6 }6 {) m, e, q! J
  147. Palette_Update_Min      = $21! l4 u0 Z& q+ O  d5 c. y
  148. Palette_Update_Interval = 60
    ) o& w/ m, m' P$ z! U6 T/ {$ `& j
  149. ;==================================================
    / A/ G. j$ }* Q4 \5 w. E
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    + p% U  J0 I5 |+ v& y2 k2 N
  151. Screen_State        = Sound_Bar_Cnt+$01' D$ `3 F3 e8 K* b
  152. PPU_Cur             = Sound_Bar_Cnt+$02% e6 h$ }  y4 b- B1 C& z
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03, I) S" o  J& _; e0 ?
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    1 X4 @% j' }! x5 v5 [6 g
  155. ;==================================================3 ?; x: j) g& w5 \9 A0 K) s
  156. Data_L              = $70% e1 h% U8 U3 K! H3 [
  157. Data_H              = Data_L + $01& S+ q" K% b# |  h5 r9 @
  158. Data_Cnt            = Data_L + $02' Z1 D0 n. S; U8 c8 C
  159. Data_Buf            = Data_L + $03
    + F* b$ W5 s$ K4 G4 z  }
  160. Time_Wait_Cnt       = Data_L + $042 D  P! ?; P/ B# y7 b
  161. Palette_Wait_Cnt    = Data_L + $05; o$ m% j! ^9 L* M! N5 e5 Z
  162. Palette_Update_Flag = Data_L + $06
    / V1 W/ `; t5 X# V) X
  163. Show_Track_Name     = Data_L + $078 {- F3 c' B* l0 C, B# F
  164. ;==================================================7 f! x* W* Y) @! z. ?
  165. Key_Keep            = Show_Track_Name + 12 K6 b9 |, J8 {5 {6 [5 k2 N
  166. Key_Once            = Key_Keep+$01+ n6 i6 N- J- c5 `% S
  167. Key_Kemp            = Key_Keep+$023 U& W# v5 I6 T! ^9 s% s
  168. Key_Temp            = Key_Keep+$03
    : X" e) ]- L2 C0 W0 h" ~  m
  169. Key_Getv            = Key_Keep+$049 S9 S' }: H: w! m$ z% B0 _* H, e
  170. ;==================================================
    9 h2 x" |6 f$ E. a9 ~0 W# [+ Q
  171. Music_Cur           = Key_Getv+$01) [- F# \4 p- V; ^# u
  172. Music_Last          = Music_Cur+$01/ i$ L- A( B( H( E" ~4 ~' S0 ^; D( `
  173. Music_State         = Music_Cur+$026 p/ k. ?# M) [
  174. ;==================================================* z. s! {. g/ R! @% E2 e
  175. HEX_Data            = Music_State+$01$ t9 w1 L% U- K; s$ ~6 V
  176. DEC_H               = HEX_Data+$01
    ( ]5 B+ i9 ?; Q. r2 x
  177. DEC_T               = HEX_Data+$02
    : Z2 i% x) S- P9 D2 ~% T
  178. DEC_L               = HEX_Data+$03$ x2 R1 I! ?/ L( ?
  179. ;==================================================+ Y4 {( r9 e0 ~3 P0 N! E/ c
  180. Time_S              = DEC_L+$01
      i9 Q7 p2 q5 z( U9 M* N
  181. Time_M              = Time_S+$01- d2 w/ t3 z& X
  182. Time_H              = Time_S+$02+ W  h6 t5 C+ ]& G3 P# o4 }4 U9 P
  183. Time_Cnt            = Time_S+$039 o$ w2 h; R& |0 X5 H/ y

  184. - D5 w% P* e3 z! s# J& x# i6 V) B
  185. ;==================================================
    ! T. d4 E5 Y# r9 f# O+ O
  186. Music_Bank_8000 = Time_Cnt + 1" M0 i* }/ j& t8 q
  187. Music_Bank_A000 = Music_Bank_8000 + 1& K6 j% }) U  U
  188. ;==================================================5 P. a6 W- d- V2 B, q0 u
  189. ' k# h- S1 v! T  u+ m! D7 ?; t* }
  190. ;======================================================================" T( j3 B5 k- L% N
  191. .BANK PROGRAM_BANK) ^8 k- q  \( N9 ~( [6 C. @
  192. .ORG PROGRAM_ADDR
    # ]- R6 o( N# Q' F  O% I& |4 \

  193. * v8 ^+ A5 _, N$ D* X, T
  194. ;==================================================
    & M6 D/ c* x: U% d
  195. NmiProgramProcess;NMI中断程序处理  j3 H. D4 ?: L8 \% C6 n' r
  196. ;处理PPU图像
    % c: f8 O% o2 y0 p
  197. JSR PPU_Proc
    ) Z; H; }! S. d6 |4 ^7 d
  198. : k. N) A3 P/ [7 b7 R
  199. ;启用NMI中断
    & V) L! s9 E7 [/ S' [6 L, j
  200. LDA #$80
    ) L$ P: j/ X( ~( w! H
  201. STA PPU_CTRL
    7 `' y2 J( U* e' |% s' R# x

  202. 2 [. j3 l' `, z" i! S9 [
  203. ;更新调色板$ Q# U' X. {6 P/ M' p! G
  204. JSR Update_Palette_Data
    ; u- S! R$ }9 U5 s' W
  205. 1 R9 I1 O/ H6 u- W- c
  206. ;显示时间(缓冲)3 p/ o) j& X" x/ X
  207. JSR Time_Show& B  m+ g% g& o) d! g9 a

  208. 3 n( u4 d: s; w( M( ?. ]% Z
  209. ;播放计时8 {* L& J1 f. k+ ]( f
  210. JSR Time_Count) Z. e) s6 U6 e) R; ^! i' q5 X

  211. ; w! }/ f* _7 V0 L& i
  212. ;播放声音  F  u& T0 Y# X0 \3 I" R
  213. JSR Sound_Play
    5 x. P1 O5 q2 ?7 a( E6 l/ |4 V9 e

  214. & i+ d2 o3 s! \' G* j$ ^9 k
  215. ;切换音乐(手柄触发)
    . a2 t2 ?- g" T8 H, o
  216. JSR Music_Switch
    9 h  I! H- b# s1 o4 B0 p$ G  O6 t8 Z) \
  217. ) d6 F- }& C* }# J4 m  M0 X
  218. ;音乐显示(缓冲)
    8 ?; B* c) K$ B: g' s' X: P
  219. .IF SOUND_BAR_SHOW_ENABLE
    8 E+ `/ {/ B  [4 u, `7 T4 ]
  220. JSR Music_Vision
    5 x0 w" {% [! [1 T9 O. i6 L, b/ {
  221. .ENDIF
    1 j1 A# @- U! d) a$ j
  222. ! f2 M: b, B0 v8 y/ R8 L
  223. LDA Time_Wait_Cnt
    5 t3 p/ I5 T8 \: u$ L- Q
  224. BEQ NmiProgramProcessEnd* u. D* }7 @& \
  225. DEC Time_Wait_Cnt4 j) z8 }2 y% b) |' ~; g
  226. NmiProgramProcessEnd
    , q6 H# |1 A3 C  K7 h
  227. RTS
    3 y% U1 D$ ]8 J

  228. 6 ^) P1 s4 A5 }& s2 k
  229. ;==================================================2 i" P" }  |/ i0 s+ `! w2 X  d
  230. ProgramBegin;主程序
    % X5 ~1 ^8 n* P+ @3 y, y
  231. LDA #$00% ?+ q  I7 W( I- {! ?1 s
  232. STA PPU_CTRL
      f9 H9 C: m# x& X' ^
  233. STA PPU_STATUS
    5 h6 K1 V- h3 Y& T6 I/ N( ^
  234. STA PPU_MASK. R. y/ b5 Y3 D' [
  235. STA APU_STATUS0 {9 l4 d& T% ^+ @7 e4 C! T! n0 i
  236. STA PPU_SCROLL
    ; S7 b: W; \: ^2 q( t9 p. S
  237. STA PPU_SCROLL. A: m. o) \5 Q9 J3 R
  238. LDA #$C0
    * |* C" d* t0 L; r! _
  239. STA JOY2_FRAME
    : H, x0 l0 }) L

  240. / T; a# C8 O% o( `+ ^
  241. LDX #$FF
    ( d6 w4 p# Z" h4 A' b( R3 V
  242. TXS) O3 H8 ?7 h) _: l' t
  243. LDA #$00: P3 M1 p0 b! N
  244. STA PPU_CTRL5 I9 h! L+ B5 W' U" {, f
  245. STA PPU_MASK
    * o* }0 V' d# d7 D+ @6 \  N
  246. STA MMC3_IRQ_DISABLE
    # {* g+ e4 P1 B  P6 B

  247. " I+ \/ h0 m9 I* o0 B
  248. ;==============================
    ! V' z  \, N9 f
  249. ;调色板清空/ I! D3 T9 d1 h7 k. c9 @' i
  250. LDA #$3F; v7 Z  k; Y/ U
  251. STA PPU_ADDRESS
    4 n4 S1 T4 C4 q" F" s  P' p
  252. LDA #$005 P% n+ S2 n7 Z
  253. STA PPU_ADDRESS
    $ H! F/ Z3 _* Y$ q
  254. LDA #$0F/ r  O, y8 P# M4 z# ^$ N
  255. Palette_Clear1 G: E: S5 ]0 b4 `& X1 H/ y$ H' t
  256. STA PPU_DATA
    7 l+ h3 w; ^0 ^: v- o- ]
  257. INX
    3 g& `/ B, l" f$ ~% A
  258. CPX #$209 w# M: A( A0 r) T0 A3 ^" m
  259. BCC Palette_Clear
    & T; z* x7 a, c$ \" v2 J
  260. LDA #$00
    & b' p% L1 J# A0 X
  261. STA APU_STATUS
    0 \9 h% v& t& e' }* x
  262. ;==============================) q& r+ p) u, u. O5 m
  263. ;初始化背景调色板# X2 o/ U6 K. L: n: d* _) K  I
  264. JSR Set_Palette_Color
      V2 a) R' n8 f7 o! w& b( k) l, J4 l
  265. JSR Set_NameTable_Attributes% l; F. G$ U& D4 f  H4 h& l  w
  266. ! |8 K5 E+ q. n
  267. ;==============================
    6 e& B7 b% e6 }- V2 p2 ~
  268. ;RAM初始化
    # F7 b/ T% s3 y/ t8 O& `& r
  269. RAM_Clear_All
    ( F: a2 E$ g& y& G0 e: s, l  \# ]
  270. LDX #$008 i" b$ V. E1 G2 o/ s+ B* c5 r
  271. LDA #$00
    , ~- f( }) {" ^1 E. D& r' J% U3 a
  272. RAM_Clear_All_Start
    9 Q! j; h- |; T+ u& u* G% A. B4 Y8 a
  273. STA $00,X5 X. a: s0 k/ T2 ^
  274. STA $0100,X
    ; W' `8 L9 r$ e' E5 s9 v' [
  275. STA $0200,X
    ' o/ \& i% W; u/ w0 p. s& U2 C
  276. STA $0300,X  l, F5 l. r1 k
  277. STA $0400,X
    # d2 y$ k! v9 G. @+ i( [& P' J& f
  278. STA $0500,X) Z9 y- ~# V8 J3 {% T3 A5 L5 J
  279. STA $0600,X
    2 R+ ]' ^% C7 J  f5 P" T. j1 D
  280. STA $0700,X. t$ P. G+ [9 R
  281. INX
      L# y4 ?! Z, Y: P1 C& f5 D0 _
  282. BNE RAM_Clear_All_Start5 I* j1 O; K3 y; _" _  c1 c
  283. ! ]2 p, ^0 w% M4 n% t
  284. JSR VramInit/ y7 }% k! U! S( \" F( \: Z" F
  285. JSR Init_Palette_Addr5 G4 x8 N- t( ?2 N

  286. ; ]6 f) y( H) _
  287. .IF Music_Reset_Addr
    " b& V5 @# I& s
  288. JSR Sound_Reset  i( e; U  o! g! q! p" W* {5 L3 `
  289. .Endif4 x) @$ S% q& U! m

  290. ' B4 e1 t) E7 B  O  t" k
  291. LDA #Music_Start_Song-$01; Z  {- H( M) [. R: g
  292. STA Music_Cur
    * u* B7 [/ a" _" K- p# ]
  293. ) [/ l( T4 y, j: h6 I7 @4 S
  294. JSR Show_Music_Text; h! z9 o  z- ~) [3 _. n
  295. ( _! r3 m  t4 D3 ~) g
  296. .IF SOUND_BAR_SHOW_ENABLE9 ~$ g: @: L. t2 D7 S7 P' H
  297. JSR Sound_Bar_Text_Set
      w! M. V5 r% T% F5 |9 B* U
  298. .ENDIF' L$ T6 L$ N. U2 V

  299. ; u; K  n4 q" {$ K( H$ I3 s) e
  300. .IF Track_Name_Pos  D' b6 U) U1 h$ T: P
  301. JSR Show_Track_Info
    . p+ I: q1 D! t( M. B
  302. .ENDIF* E% D& h6 h. M3 t: c

  303. , N- d- \: w; Y2 A
  304. JSR PPU_Proc
    6 k# V5 S6 d; G
  305. 5 D4 N) c& J/ S6 A- K1 l1 p' ^# R
  306. LDA #$0E6 [; M, v6 r4 {8 ?, M5 q/ T3 v" t
  307. STA Screen_State" i. J& m8 h# ]! ]" `$ H  s( x* k" H2 {7 O
  308. 7 c& V6 ^! ^- s' m; d
  309. JSR Sund_Bank_Init& z7 y; s" L* @& a
  310. : x2 @/ n$ [+ L# q3 u9 H
  311. JSR Music_Show: \6 N$ ~, U8 b$ o$ Z; w! q3 o
  312. JSR Time_Show+ z% v# H! t% t" ~, E: K) D
  313. JSR Music_Stata_Show4 ?8 l8 J) K8 O0 @! h# \7 ~
  314. JSR Time_Delay) m6 d) I% c" @& h) E

  315. . F* w- |6 n) M/ k: c! ~$ e1 W

  316. , T8 M, ~7 E; S& ^& @
  317. LDA #$801 E1 g; p( \& M/ S) U
  318. STA PPU_CTRL, H! r) l( c3 u
  319. " C$ \5 n3 ~) r  m
  320. LDA #$20
    % i! ?/ J# Y2 |4 g
  321. STA Time_Wait_Cnt
    ) ]; M$ `7 o. k4 \7 Y. r& b

  322. 9 l- w9 B" T7 n# K
  323. Wait_Time_Over
    5 f- `8 i9 D! J0 I& m
  324. LDA Time_Wait_Cnt
    8 c5 a2 L* l1 Y8 X
  325. BNE Wait_Time_Over
    5 g! _" P, O& ]$ R

  326. 8 k! q- S' O, x! }# d) J
  327. LDA #$1F! Y2 Y- f( A5 P; G( s3 E
  328. STA APU_STATUS1 _5 ~9 v& t+ _7 v; O) L
  329. LDA Music_Cur: D) M! R& |7 q9 l+ r- s1 o
  330. JSR Sound_Init
    # |; S, I' F. A7 `
  331. ! E) Q5 B& R9 [  r
  332. JMP MainLoop$ W7 ?/ {5 [" g7 [: s% m

  333. 0 O- l" v5 ?, j4 q
  334. ;==============================7 C- L0 y  Y3 `% i
  335. Time_Delay;延时等待
    + z3 Y- o5 r, n! m' ]. U$ x
  336. LDA PPU_STATUS" Y! w/ x/ M) E, K- W, v% _
  337. BPL Time_Delay1 u/ |/ o3 H, h
  338. RTS
    # b* ]0 K. w- F" n5 Q& U- m

  339. # _3 a: M8 t6 p* k, k" W8 u3 E
  340. ;==============================
    ' O! x$ p7 v  {9 r& X
  341. VramInit;初始化图形内存
    3 N8 O/ |8 O* n( r9 X5 E
  342. LDA #CHR_DATA_BANK+ Q" X& p( l/ t. E( ?& w5 v* _3 T
  343. JSR SwitchBankA000
    # w- V! M1 Y' U" L* m
  344. LDA #LOW(CHR_DATA_ADDR)3 O7 v1 p! j  I0 n9 ?' R0 h
  345. STA <Data_L
    % v* X* d( B1 I9 J( ]+ X
  346. LDA #HIGH(CHR_DATA_ADDR)
    * ^% o0 X: N% Y5 L$ B; i- k$ Q: B
  347. STA <Data_H
    ' o4 w% l  D5 Y7 n/ R4 U! g
  348. LDY #$00
    8 A) p% R, H7 U: J/ K
  349. LDX #$20
    , R& [9 b( W1 Q1 P  u7 Z$ X/ N
  350. LDA #$00
    3 a4 t& S' i. k5 N- ]
  351. STA PPU_ADDRESS6 V1 v4 h8 M0 B- l5 X9 C
  352. STA PPU_ADDRESS
    1 f) T* w6 M& c4 D7 r. |3 E
  353. VramInitWrite0 @: L, H* u/ B. `$ w7 f
  354. LDA [Data_L],Y
    0 u- D) V( \( X/ o$ s9 S
  355. STA PPU_DATA
    8 K/ R6 {  r3 n1 g5 e& r( i: V* w
  356. INY
    1 |) j0 f4 C0 Q& s4 ^
  357. BNE VramInitWrite
    * y$ V( K3 m+ X* l1 |) O. D
  358. INC Data_H% T( Z  c4 V- D$ L9 N( t
  359. DEX& G) o) n, v, M* b' W
  360. BNE VramInitWrite% z, q4 @! c4 I# N. e
  361. RTS$ G. {. T# g) t* l
  362. 3 s- ^; m: u, F1 ^3 j
  363. ;==============================
    5 U/ y8 [/ w; T9 ?0 d5 E; e
  364. RAM_Clear;RAM清除
    ) j: U9 p9 M( [
  365. LDX #$00
    * x0 G( a3 c3 V: [. s
  366. LDA #$00- P( c( g; T* L1 {
  367. RAM_Clear_1. p) H8 F: s4 J" e
  368. STA RAM_Cln_1,X
    / U- {2 y, s  z& J
  369. INX7 o1 d7 ^; ~( L4 K
  370. CPX #RAM_Cln_1_Size
    6 c" _9 w0 K; F
  371. BNE RAM_Clear_1
    - e0 Y; D; m1 [8 U" @
  372. LDX #$00
    7 g* d8 }4 B+ a! p7 v/ W4 M
  373. RAM_Clear_2
    : E- g" p2 [: c1 L3 m/ X# o
  374. STA RAM_Cln_2,X
    & t3 i0 x7 G- q) v6 `  @2 B& a( e
  375. INX& Z. K' Y0 b! E9 J, f( Y
  376. CPX #RAM_Cln_2_Size
    3 ~& ?3 M2 C* w, E; H& `. V' |
  377. BNE RAM_Clear_2
    . e0 v0 D, A! z5 |' E
  378. LDX #$00
    / s. p" X3 m' F4 {+ w) j& X! p5 x
  379. RAM_Clear_3# p& m% U  [: d% o$ a! P
  380. STA RAM_Cln_3,X' ~- n7 z% y1 Z" b
  381. INX
    ; j" \0 H' R" [( ?
  382. CPX #RAM_Cln_3_Size
    & a" C6 P1 H0 v2 e
  383. BNE RAM_Clear_3
    . R+ u* R. T! L% q
  384. RTS% b5 G) A% V& r' M+ |4 ^

  385. 3 g5 P" a% r7 V' C  Z  I
  386. ;==============================
    8 B- d0 I+ {9 l9 T6 k% N
  387. ;音乐切换
    8 ?- R# W9 D7 x- P$ s- k
  388. Music_Switch( r1 w7 k. [$ i4 t, k+ b
  389. JSR Key_Proc
    " M9 \/ n+ B$ L2 [
  390. LDA Key_Once
      I) |, {7 t3 w. c0 H. w
  391. CMP #$10
    * D8 t5 v8 ^4 ?, q4 }( y! p
  392. BNE Music_Start_SongStop
    3 o- h  g3 c) u8 \$ ~5 P
  393. JSR Music_ReSet/ V; R+ E( j+ Z, n
  394. 7 p8 A9 ]3 `) @6 z  X0 T4 U( e5 k7 O
  395. ;音乐停止
    * C7 M7 q0 f; ^9 W, h
  396. Music_Start_SongStop
    6 W3 k: Z# f* ]+ O1 Y! T% n! m
  397. LDA Key_Once
    5 ]' V; P- _. |: C
  398. CMP #$206 X; R$ T3 H7 P1 w2 H. O4 s
  399. BNE Music_arrow
    8 o# e! k6 k( Z+ T& R5 j
  400. LDA #$01! z8 b& J: g" E6 y% ?2 Y1 k! {4 o
  401. STA Music_State
    5 F+ w5 m) y7 q" E. M- T' |
  402. JSR Music_Bar_ReSet
    - f( ]+ t2 L# Q
  403. JSR Time_ReSet
    4 L* O) u6 _* L/ f' ~3 r
  404. JSR RAM_Clear. `6 C  ]+ U, z, T! O- x/ x, |3 y$ j0 W
  405. JSR Sound_Clear7 m( j* M  f3 a' S
  406. JSR Music_Stata_Show* R) l( O# t1 c6 M$ ?& m
  407. Music_arrow
    ' A' \+ O; T& z2 W: G# R/ ]
  408. LDA Key_Once
      V4 l' l# B1 H4 J$ k  S
  409. AND #$CF
    3 X" j, z) v8 X
  410. BEQ Music_Switch_End
    5 {. H! L4 i: N
  411. JSR Music_Number4 C: @6 D# q$ x7 R( q
  412. JSR Music_ReSet
    0 b% h, P' O: v1 x
  413. JSR Music_Show. X# b! p0 F6 W( Z# v; Y
  414. Music_Switch_End! h: S1 ?6 _& P+ Y" s0 ]# D
  415. RTS6 c) L: q$ y- X2 n3 z& I' {3 P4 L

  416.   _( U  J( l' B1 _
  417. ;==============================, h7 o* y/ n/ \' `
  418. ;音乐曲目切换
    1 g8 S# ^0 n/ G" U; n. M
  419. Music_Number
    2 s) H$ D9 E' C# u& p6 h& [
  420. LDA Music_Cur! y' L( G' x2 U& P
  421. STA Music_Last
    6 G. B- |% I6 W+ m: E
  422. Music_Decrease
    % ]1 [8 P9 J! Y- F) Q
  423. LDA Key_Once* d; B8 l( o, j( v% }0 T* w0 k1 ]  n
  424. AND #$42
    $ k1 m/ @; m/ R/ r8 T
  425. BEQ Music_Increase
    6 S# W! _( @8 z0 G
  426. LDA Music_Cur1 i0 B! \  H: u
  427. BEQ Music_Increase9 \) ]4 f; ?# A; |
  428. DEC Music_Cur7 R' b$ l4 }6 b9 A% g$ X
  429. Music_Increase# P( P" b  |# c% f: }& P# h
  430. LDA Key_Once
    - y! B' Y8 V" v) }% N
  431. AND #$81
    4 T& o+ g) v' E( _5 i- S7 H: |" e* |! T
  432. BEQ Music_Decrease_10( ^+ r: I2 |$ @2 ]6 Q' v& k
  433. LDA Music_Cur
    ' ]0 h& ]$ K) L' J
  434. CMP #Music_Song_Total-01
    3 t9 z: G! a0 Q. j( \) D# e+ w
  435. BCS Music_Decrease_10. H3 C1 x* r9 t
  436. INC Music_Cur
    ; c) [/ A$ J: a. r; v: t, P* X! H
  437. Music_Decrease_10+ i3 G2 m+ u! Y$ Z( a
  438. LDA Key_Once
    + u! b0 Y# b$ l6 @3 ]0 M( A$ w+ K
  439. CMP #$04
    ! I0 Y! F  t6 Y) p
  440. BNE Music_Increase_10
    ) @; ?# J3 @9 r4 X0 Z0 f
  441. LDA Music_Cur! N. L5 P" I5 V; X9 g. J5 w
  442. CMP #10
    0 \8 ?- R7 b1 Q2 f. Y8 P
  443. BCC Music_Start_Song_Min, R8 \" C% I* k; Z
  444. LDA Music_Cur5 W/ d4 V+ M5 w7 S# C
  445. SEC
    ! N( V/ P* b! F, U8 I! g: e6 l4 h# V
  446. SBC #109 x4 w- Y, W. j; K  Y" x3 d
  447. STA Music_Cur1 n7 ?9 W8 s- Y7 O2 u
  448. LDA #$003 c5 w/ {; L( W8 {4 ~
  449. BEQ Music_Increase_10
    * ]; |  i) i# z! D
  450. Music_Start_Song_Min
    4 s; a; i$ s% E) a
  451. LDA #$006 Y8 E6 {- _) W' x
  452. STA Music_Cur; c/ ~: z! c: H
  453. Music_Increase_10
      l& e* @7 O4 t" p4 j/ K- C
  454. LDA Key_Once
    % D( X# f6 L4 g5 Z7 p
  455. CMP #$08
    + a0 }9 U2 i3 P" O6 e
  456. BNE Music_Number_End  {! m2 Y4 Y4 u/ C! l$ @, l
  457. LDA Music_Cur
    . k6 p) g3 g0 Y% F- l9 E0 s
  458. CLC/ Q& o5 b7 |! x! i3 ]) D' q8 L
  459. ADC #10# a, n& |7 _) F- i& E- o
  460. CMP #Music_Song_Total-018 e8 k+ o4 F8 `" m, x# w
  461. BCS Music_Start_Song_Max
    % O/ `& z7 e0 ]" H6 B9 [# a
  462. STA Music_Cur1 G2 ~! m' e9 u& i
  463. LDA #000 d/ O: A: V9 u1 L* X
  464. BEQ Music_Number_End3 g4 |  J- T) U; p) V$ Q& _. L5 i
  465. Music_Start_Song_Max1 `7 g- Z# u6 j1 L7 v2 _0 P
  466. LDA #Music_Song_Total-01
    ) U% y) Q$ c% ~0 x* a
  467. STA Music_Cur
    ! r  s6 K, R  S  i" z. E+ U
  468. Music_Number_End) U# Z9 Q6 c! s
  469. RTS
    , t# Z. r. T' ]- P( @/ _  c3 i/ U

  470. & @! p  ]+ c( v" ], M8 I& U
  471. ;==============================
    # ?% }. n4 L# m/ Y
  472. ;音乐重设; e5 _) N. `( C# x# ^* V
  473. Music_ReSet
    : Y% X+ v2 |6 _3 F2 H
  474. JSR RAM_Clear
    : j! Y% J1 @( I
  475. JSR Sound_Clear
    . ~& b. b9 u, ~0 d  z3 T- {: m) n
  476. LDA #$1F
    - _$ S/ g" h! l/ N
  477. STA APU_STATUS/ W: H1 I* Q7 A6 T, \
  478. LDA Music_Cur
    ( O5 y2 X* `/ S
  479. JSR Sound_Init
    ! ?1 Q, Q. u% n4 m8 W5 s
  480. RTS# U4 C8 D# h6 i. ?2 r

  481. 7 k+ Q' U7 J7 f/ W8 o
  482. ;==============================
    1 }. W0 ]- K, [' O9 z% s. n
  483. ;音乐端口清除/ f2 q- x2 H; k& v
  484. Sound_Clear  o% Z! Z2 ^- H
  485. LDA #$00
    , Q* X5 R( n0 }* ]3 Y0 g5 n
  486. STA APU_STATUS
    6 i% O/ ?. N3 U7 y* S
  487. LDX #$003 y( Z/ m) U% |9 T
  488. Sound_Clear_Start' C5 s) U; m$ w6 ^
  489. STA $4000,X
    5 ^1 H( F+ I: t
  490. INX
    3 v1 ~# c# R2 l1 z# m& A* `1 o
  491. CPX #$14
    / M2 z: s; s% Q& I
  492. BCC Sound_Clear_Start  E, I# Z4 \, R
  493. RTS, ?( S8 F) h& v7 {& f. S! L

  494. . K! k8 @9 t9 v: G+ J
  495. ;==============================, p- R& Y# o0 m- U0 \
  496. ;按键处理
    7 B& e" N( z, B. @: l
  497. Key_Proc
    ' `: }* A, ?5 R, q& ^; I: h. f
  498. JSR Key_Scan
    " B1 m) {# E! R
  499. LDA Key_Keep
    . t' W1 \) A% [- j! }
  500. STA Key_Temp
    8 f6 s6 q/ q' i' z3 u
  501. JSR Key_Scan
    * B0 h; E2 ^; P* i9 S% V
  502. LDA Key_Keep
      N. ]9 C" o6 d8 f+ q. L1 F2 E
  503. CMP Key_Temp  J% n; ~# m; q+ C
  504. BEQ Key_Get_Once7 T6 |5 y& B" F; z7 ~
  505. LDA Key_Kemp# G' s1 I5 A0 H& F
  506. STA Key_Keep
    9 J6 m, Y! y6 [- U
  507. Key_Get_Once) k- n3 }0 B3 F( ~/ y1 ]  H
  508. TAY
    ) f! j3 M5 n  M% U# |& U
  509. EOR Key_Kemp3 k& L' K: r! G' G3 A7 [, V
  510. AND Key_Keep
    / B1 Y- X( Q7 y/ G' W- L
  511. STA Key_Once
    3 T+ K, C. n" u* n0 S  R, T) l" k! [
  512. STY Key_Kemp
    6 O4 q: Q! `. K' U% b
  513. RTS6 \# t' a5 i" ?3 r( `
  514. ;------------------------------) P2 d: ~& b) a$ U0 |
  515. ;按键扫描
    / Y2 e& r5 v7 @2 @% p! ^8 V
  516. Key_Scan: H8 ]$ q' ^8 \
  517. LDX #$01
    ! F1 V4 v; C4 t( `
  518. STX JOY1_FRAME& E- j  p# |" b+ s) e$ H, B
  519. DEX
      L! m! P1 i& [/ d* i) T5 _- ^) d0 ?; Y
  520. STX JOY1_FRAME
    & q3 o% x; P4 t; B
  521. LDX #$08
      ~$ _1 ?& F5 _
  522. Key_Value3 {  L1 R( W3 V: L4 ]) s6 q0 L) x8 j
  523. LDA JOY1_FRAME
    * ~% t" J6 c$ Y" T& G8 N/ B
  524. STA Key_Getv
    " D; [5 K7 R$ d: D2 o8 B
  525. LSR A
    / B0 Q, L' a5 ]5 {1 R1 e8 ?
  526. ORA Key_Getv* C5 ?" F/ ?3 J. H" G! g( v/ U* C2 n
  527. LSR A
    ; C5 h, |# o6 c8 H: e+ l# v
  528. ROL Key_Keep
    ' T. a. Z" [: |6 E
  529. DEX2 f! t# I: h# m' }/ h, o
  530. BNE Key_Value
    3 H/ v, J6 u$ m) w- q% \9 s
  531. RTS4 X  @; _; t- t7 S) o! v$ g

  532. & h) T5 n( L; Z1 @4 ]
  533. ;==============================
    + x3 A6 c" R' O
  534. .IF SOUND_BAR_SHOW_ENABLE
    ' R3 i$ ~. _/ m
  535. ;音乐条显示  I( C/ o* q* k, f
  536. Music_Vision
    8 \0 o3 W  t. s% |, t
  537. JSR Music_Animation( g# s( C: W$ E8 Y* Q# U' I
  538. JSR PPU_End
    - p3 C; a, z0 P/ H: S4 V) [
  539. RTS
      u, n# P4 {% z7 W  T* m
  540. ;------------------------------
    , ^, r/ Q* z/ @. }, p. K( z# @
  541. ;音乐条显示处理
    0 X+ w+ w1 d: A$ V3 S( @
  542. Music_Animation
    " b8 W# K3 _2 x% Z3 z
  543. LDX PPU_Cur5 q% }3 _: K. z; ?1 g. _5 B
  544. LDA #Mode_Line  Y2 e- i2 f3 q9 J- o
  545. STA PPU_Addr,X
    5 n' @+ K% C6 c; B% ]5 |; l: q
  546. INX. C3 Y% G  N2 j  `0 O* B# y
  547. LDA #HIGH(Sound_Bar_Pos)
    # l. {4 Q0 U$ c/ }5 ]' U
  548. STA PPU_Addr,X
    " q4 o9 Y, H4 ~% A  R
  549. INX
    ) v3 c$ {$ l2 I5 _8 P  J
  550. LDA #LOW(Sound_Bar_Pos); V! e1 b* C$ v
  551. STA PPU_Addr,X8 W# ]* I7 Y" p+ U
  552. INX9 M# R8 u' R. S+ [+ K) g
  553. LDA Sound_Bar
    1 N% Q4 [* b- v8 B
  554. JSR Volume_Convert
    1 s4 X  C  d" _! t
  555. JSR PPU_Return
    + A. _1 \: e9 y% ^; T$ L0 r( _
  556. LDA Sound_Bar+$4( L- e# N( n1 _9 K& q8 i
  557. JSR Volume_Convert6 w1 d8 J% G' _8 |/ ?
  558. JSR PPU_Return9 _1 q  r: j9 K& Q6 }
  559. LDA Sound_Bar+$85 B+ e) a9 U6 ]3 G  `$ |. Y
  560. JSR Volume_Convert_Ex! P( N& t& c  ]7 o6 L% }; d
  561. JSR PPU_Return8 H, T  I: y1 |( H3 o$ B( D
  562. LDA Sound_Bar+$C
    : n6 ]1 k  l) X, W! {# \; V% Z; c2 u
  563. JSR Volume_Convert
    0 A7 l7 I- {$ L" c/ _$ k
  564. JSR PPU_Return: p  t( f. {9 u; \- _" S% C
  565. LDY #$100 e: y3 C6 N5 f) \6 B
  566. LDA APU_STATUS
    8 M3 S% x1 ?* U; ]' |
  567. AND #$10
    : f  I7 y( f- o; e1 q0 L- s
  568. BNE Volume_Count
    5 M, T! O* C7 o: y
  569. LDY #$00
    8 C; T' ^! w/ ?% w
  570. BEQ Volume_Count
    ' E, Z& Z2 F' }+ h' g! K
  571. ;------------------------------
    5 ]" V- F+ W2 @* H/ I0 |
  572. ;音乐条处理
    2 K/ D( \! G* B/ p, D: y; h. o
  573. Volume_Convert_Ex
    $ f, y: `5 B/ ?3 ^
  574. AND #$1F
    * V3 @- P6 R$ V4 g( D8 c; a
  575. TAY- V; T6 V: Q/ T4 w8 y! A0 x; X( W
  576. BNE Volume_Count
    4 `' m7 u) @/ Z, _2 p, U$ o" o
  577. Volume_Convert
    6 E% f$ \- L9 o9 |
  578. AND #$0F
    3 S6 X# M; N* e' |0 q4 e) I
  579. TAY
    - _4 K* ]/ i  k  H1 T
  580. Volume_Count
    1 @+ Y6 {& V9 P  b$ H  [2 }
  581. LDA #$08% W5 j+ y( ^  w1 ^% Z8 T( }) u
  582. STA Sound_Bar_Cnt
    + @5 j) M) c. `6 ~$ [# n! I- g7 |
  583. Volume_FILL
    . T2 W5 t% }( W$ O5 `
  584. DEY6 B" }+ v) s; g& t3 d9 q: z
  585. BEQ Volume_Half; O6 K  ~9 o1 ?# g
  586. BMI Volume_Empty
    ) A8 _" K* k$ R3 M
  587. DEY
    ! r8 p6 K$ t2 h% V8 i2 L- D
  588. Volume_Full) a" E8 n' }; t  a
  589. LDA #$16
    . ^  t* u. B3 u  I8 t
  590. BNE Volume_PPU
    6 b6 w9 p" d; p1 k. l$ d2 H+ P, x+ r: `
  591. Volume_Half
    7 P4 `! a& P1 X- Z5 T
  592. LDA #$153 W$ k& w9 `9 |1 k  @9 Z
  593. BNE Volume_PPU8 g/ O/ v# f" @% q7 a) g0 M* P! F
  594. Volume_Empty& P1 l" b1 Y+ o
  595. LDA #$14" I, X0 s5 V* V0 C9 I
  596. Volume_PPU6 Y- h6 F4 E1 |0 Q
  597. STA PPU_Addr,X
    # V+ T7 H) B* A  u- t
  598. INX
    / A" |% d& K4 x) R! v% `
  599. DEC Sound_Bar_Cnt
    " H0 ?1 V3 x. T3 D! }
  600. BNE Volume_FILL
    8 N( c; w0 w2 g% z0 R2 {
  601. RTS
    . ?; G( }& B' r; t

  602.   e. P7 p( Z, Z+ I$ p4 t  A2 F. i
  603. .ENDIF! M, }8 b( Z% s; M. p  X
  604. ; [1 J( n' z/ M1 g! i" k3 e
  605. ;==============================
    7 _  g! y2 {: L, {" \
  606. PPU_Addr_Set;PPU行开始
    5 w: y  x0 H& z5 }
  607. LDX PPU_Cur' l0 G6 D3 p5 J
  608. LDA #Mode_Line8 V; R: {3 B9 ]! `
  609. STA PPU_Addr,X
    - v6 ~0 A: m( b; @6 M5 u9 x8 t( l
  610. INX
    5 |! i0 W5 E( X2 Y
  611. RTS
    9 g5 D- [+ K8 u  E9 [+ y# S
  612. 0 {$ s; Q7 i6 h8 K7 [
  613. PPU_Return;PPU转行% U9 f8 j/ H! I  f* S; w' X) [
  614. LDA #Flag_Over! D3 A. R9 g" y; D) Y! E7 T5 \! R  B
  615. STA PPU_Addr,X
    3 V* q5 d' Q/ z" b
  616. INX
    6 w+ |! q3 D4 l! Z: T6 @
  617. LDA #Mode_Return
    ! Q0 _# @& s1 s) t5 \
  618. STA PPU_Addr,X/ m! [7 K9 a+ x' D
  619. INX% T+ X0 H' `- b* A
  620. RTS% K) X1 d- H# ~6 d( p( J
  621. * s, o* D" I. U. d
  622. ;------------------------------
    + B5 a4 T6 T; W! n2 v
  623. PPU_End;PPU结束
      ~! C1 ?# a. @" `2 e4 R
  624. LDA #Flag_Over
    2 a* g$ O" Z/ J: N8 r# {* Z% J
  625. STA PPU_Addr,X
    ' ^) S0 w3 N9 P" }! _
  626. INX+ b: U' ]- r& {9 \4 b% g/ C: Z
  627. STX PPU_Cur- y. @  X# K& n1 P% ~- O
  628. RTS
    , ?$ a2 L4 R( Q) G8 F
  629. ;==============================
    6 E) V& M" r6 P* [5 M! d4 h
  630. Mode_Line     = $FD    ;新起行模式
    8 B# W( n' I5 M, k
  631. Mode_Return   = $FE    ;转下行模式5 i3 b' y+ D6 w$ g/ A5 f8 w/ s* S
  632. Mode_Clear    = $FC    ;行清除
    $ M$ T$ c9 M1 x, `$ U% H: E% W
  633. Mode_CntLine  = $FB    ;行计数写入) q6 |5 d; B/ |
  634. Flag_Over     = $FF    ;行结束标志) y& u& G4 S/ B5 Y: _( r+ z1 p
  635. 6 K; R- V+ Z3 {2 E6 {9 c
  636. ;------------------------------
    # j" k/ W9 j3 E* M; `0 r" S! K
  637. ;PPU处理
    - x2 l# d# U1 z# i" a
  638. PPU_Proc
    8 F1 I0 o9 N$ @% I
  639. LDX PPU_Cur/ G+ r+ y" i) |0 }/ _- n0 n
  640. LDA #$00
    " g5 B8 e6 X4 v9 c; v( x! \
  641. STA PPU_Cur
    9 q. e5 G* h) V& [
  642. STA PPU_Addr,X
    ! S) k/ [* ~& a" z
  643. LDA PPU_Addr9 U+ O- v4 V3 H; J/ e0 V0 V# Q
  644. BNE PPU_Proc_Beg. E6 \. c! a/ J. M7 i0 b
  645. PPU_Proc_Ret7 g' G) A: G+ ^; u1 ^7 w. s
  646. RTS# H  b! u; G- d! Q0 ^2 q5 T; j$ P  ?
  647. ;------------------------------" {' s  S+ s0 N( k
  648. PPU_Proc_Beg  ;处理开始
    2 Y" M* j* U4 n2 d) y
  649. LDX #$00
    ! m4 n# s$ @8 G# U3 |6 A
  650. STX PPU_MASK
    0 M) W  F5 g, A& H) B! H/ T7 @
  651. ;------------------------------
    ) r$ u( h* J5 M
  652. PPU_Mode_Select  ;模式选择
    9 G2 P) P+ i/ G5 D- o) g
  653. LDA PPU_Addr,X
    5 f) G& ^+ x# x" G* O) w
  654. CMP #Mode_Line  Q' I1 Y- R2 l/ {3 K( Z+ I
  655. BEQ PPU_Mode_Newline" g) Z0 v" h0 d" i5 l8 p! y- D% M
  656. CMP #Mode_Return
    1 |0 O1 R! o, ~/ }  X+ V% ~
  657. BEQ PPU_Mode_Return5 M+ |) K$ M; D. `' t; e7 Z
  658. CMP #Mode_Clear9 C4 d/ A6 s3 I+ b: ~
  659. BEQ PPU_Proc_Clear  l( Z5 m* o+ N, V
  660. CMP #Mode_CntLine" T% Y5 e8 s% N
  661. BEQ PPU_Proc_Cnt_Line6 o/ Q, L* P. _7 J' u; n0 i- J
  662. RTS
      I0 z6 C+ k1 ]2 U* U" S
  663. ;------------------------------/ q% w8 z- Q9 S7 ~: C1 J$ F% ]7 {
  664. PPU_Mode_Return  ;转下行模式
    ! j3 g: Q- e. ]7 e
  665. LDA PPU_Addr_L, ]3 i: m; p4 a' u! \
  666. CLC
    ; j$ C3 l9 Q, J* O: V$ e, y5 S5 a
  667. ADC #$20
    ! b* Z. A2 Z! X2 P: K
  668. STA PPU_Addr_L
    ) {: j& z- w3 e, f5 m
  669. BCC PPU_Return_End0 o+ M7 A* j) W1 g- N5 U6 A
  670. INC PPU_Addr_H
    4 t' t3 ]" m8 w; G2 e
  671. PPU_Return_End) y4 V* \: _0 Z& p- j( {* s  W
  672. JMP PPU_Set_Increaser
    5 r1 A/ P8 j6 L5 @( o9 K0 U5 s
  673. ;------------------------------
    7 t; F+ J% y& g# w2 C( l. B& n
  674. PPU_Mode_Newline  ;新起行模式
    - t: `8 ~, y( s6 O9 z$ a# K
  675. INX. v; L- b+ d4 z; q( b5 J
  676. LDA PPU_Addr,X7 x4 \% P  R5 S/ L3 b
  677. STA PPU_Addr_H
    ! E5 A. E' h$ S- l
  678. INX
    0 h/ d% d$ h& s6 o2 \
  679. LDA PPU_Addr,X
    ; `5 K: g# r3 C% W! U; V) Y, P
  680. STA PPU_Addr_L; W% v4 O  p) O1 L7 r5 h; t9 x, H) Y* ]# \
  681. ;------------------------------
    * v+ M. \: I) X1 A0 X
  682. PPU_Set_Increaser   ;设置写入地址& E; _" J. B+ }+ `5 ^: y
  683. LDA PPU_Addr_H
    9 c, z. c, m/ }: ~6 `1 K4 w
  684. STA PPU_ADDRESS$ W& c% w9 y# s' Z# g: ?
  685. LDA PPU_Addr_L
    " m* ^4 F: O2 G# a' U
  686. STA PPU_ADDRESS9 e  I# Y* X% Q8 j4 o- Q( G8 F
  687. ;------------------------------2 G2 y. i, B' d5 i; K7 C; M7 ]
  688. PPU_Write   ;写入数据
    & z# m6 R) Q  @0 f
  689. INX
    7 ?* \3 `/ s# `) D
  690. LDA PPU_Addr,X
    + o; W: S2 O0 K/ {# V; W8 V
  691. CMP #Flag_Over- O! y/ J; z0 l8 y; m3 ^" t! p2 e
  692. BEQ PPU_Proc_End
    # }; }2 t) M  m. z4 N! T9 f
  693. STA PPU_DATA
    2 m* K( n" n8 Z
  694. JMP PPU_Write6 z) v% ^  T6 Q1 s
  695. ;------------------------------6 t, h1 M/ j$ A
  696. PPU_Proc_End  ;单行写入结束4 _! H; U5 R5 F
  697. INX
    2 ]: D$ h3 b3 f3 C# I6 ^
  698. LDA PPU_Addr,X6 w+ l2 S" M; a/ D- H5 r. u$ U
  699. BNE PPU_Mode_Select) m7 M7 n& j9 `7 `
  700. STA PPU_Addr
    1 y. d$ C" u( M2 F, B
  701. JSR Update_Palette_Color
    $ E) a# Q3 L1 _
  702. LDA #$00! V9 Z* p1 q1 N9 h( F. V
  703. STA PPU_ADDRESS
    & r: v1 N3 r+ t6 D+ @$ h
  704. STA PPU_ADDRESS( Y+ _4 W* v! ^: W0 d+ Y% ^
  705. STA Show_Track_Name8 J! o0 y; _* L" f6 V8 `- t
  706. LDA #Scroll_X* d* U, U: {8 H
  707. STA PPU_SCROLL
    : N, |' o# t/ M. |2 v
  708. LDA #Scroll_Y0 Y. v7 a7 S7 F+ J. w% v, J2 m2 I
  709. STA PPU_SCROLL
    $ f. w# b7 c  ]0 P
  710. LDA Screen_State
    + J. t$ A1 w  O) z2 @
  711. STA PPU_MASK
    9 ~( W8 Q4 [6 _6 Z+ w/ o
  712. RTS
    5 k# Y$ W& R8 r& U6 m4 b6 P
  713. 2 ?7 `5 Y$ h' T5 n( W
  714. PPU_Proc_Clear; c: S+ A* d  U/ M/ r2 ?% V( j
  715. INX
    ; l9 T' r. |2 o4 U- {' _
  716. LDA PPU_Addr,X* \+ H5 S2 i0 @+ L+ @- N" H" y
  717. STA PPU_ADDRESS$ a* D2 ?0 o0 j# o' f7 ?
  718. INX
    . C4 T' K/ E3 Y- d' `! U# v
  719. LDA PPU_Addr,X, G& }8 m7 v9 C$ ^6 S/ x' D
  720. STA PPU_ADDRESS: t; E8 B) \7 W
  721. INX0 u# M1 G& J: ?( ~. P
  722. LDY PPU_Addr,X, ^4 k, x: i0 }4 ^
  723. LDA #$00( b" c& I" l9 s* u
  724. PPU_Proc_Clear_Write
    ) `# ~. b0 P/ u. r# a5 D5 w
  725. STA PPU_DATA
    2 t4 P0 J( s& F; ]1 l
  726. DEY0 v& A. t- t( K" t
  727. BNE PPU_Proc_Clear_Write
    ! `* o; U* B# M$ m4 {
  728. JMP PPU_Proc_End* N' b3 |& p6 T7 {  |. m
  729.   E9 ~& y& F9 q# g$ _. j  N3 W
  730. PPU_Proc_Cnt_Line
    . j) ~. ^5 |1 @9 {. D9 q: g; b$ O
  731. INX
    8 n- D( O3 K4 {! `! B$ H- @3 k
  732. LDA PPU_Addr,X( \: J+ F" g& ?. z
  733. STA PPU_ADDRESS( S, T' I: M8 Z" a" ~# ~
  734. INX1 t- ^0 e6 g9 e3 [! Q. o9 j
  735. LDA PPU_Addr,X
    ' S% K3 I. U; m3 b+ N
  736. STA PPU_ADDRESS' a4 Q: Q; Q$ T
  737. INX
    3 L; {# v/ Q8 c! M2 s
  738. LDY PPU_Addr,X' `* m# ]/ f8 n$ N! p
  739. PPU_Proc_Cnt_Line_Write8 o- g# ~' H5 Z* n2 N
  740. INX$ n  P% g' |% K: p" R$ ^9 M
  741. LDA PPU_Addr,X
    5 o& r$ E+ k5 h( M  c
  742. STA PPU_DATA
    4 E, g, E/ \: @" v- t0 |
  743. DEY
    4 P. I" s. [6 j( c3 ?
  744. BNE PPU_Proc_Cnt_Line_Write
    * m" y' H4 t0 T7 U
  745. JMP PPU_Proc_End+ @. }6 g6 @3 F: r. s7 R2 r
  746. ) x5 j4 g- l8 [8 E0 q& x
  747. ;==============================% p# j' v" v4 T  D3 T7 e( p
  748. HEX_To_Dec;十六进制转十进制* \! i8 v$ k: [" }: o
  749. STA HEX_Data: R6 T7 D* D. A5 b
  750. PHA
    7 C2 l/ O2 U! c, B5 w) @
  751. TXA. r/ A7 O1 G$ G1 {& N& w3 q
  752. PHA' k; `. C, G! ~1 y- J$ J
  753. LDX #$004 `4 b# ]) [- J( k
  754. LDA #$00
    7 z/ R( s/ r( W! o; ?
  755. HEX_Cln
    & V2 }3 `% `. k7 e( Z& k- \
  756. STA DEC_H,X( {. {8 V0 q" u) @: G2 D
  757. INX
    , s$ x- N' m; Q7 z: o
  758. CPX #$03
    : _; m0 C0 o+ w, }- K- c- g; r/ [
  759. BCC HEX_Cln. S" ~. b8 P( ?3 O* \6 o
  760. LDA HEX_Data
    . T0 l' t6 I3 e4 t
  761. ;------------------------------
    ' j+ c0 G9 {9 h' M# [; F2 t  |
  762. HEX_100
    ) x& N: \% J2 y% N
  763. CMP #100
    . }: s2 j( V+ p7 q: ?( i% L; r
  764. BCC HEX_10
    ) K8 i* b9 Y$ G1 Z, u
  765. SEC# a, `! E2 i' z7 i9 U
  766. SBC #100
    $ n; S" t' Z* r( Q# \/ `
  767. INC DEC_H
    6 z* r/ p  Z' Z
  768. BNE HEX_100# b+ H7 D; j! }7 g
  769. ;------------------------------* i+ A5 }$ E1 h2 m
  770. HEX_106 y% j9 V% `/ z* ~
  771. CMP #102 {+ b8 N8 ?& ]; U; A
  772. BCC HEX_1. Z2 c$ {1 ^; X' W! v
  773. SEC
    ! \9 g, T$ G# x5 k
  774. SBC #10
    9 ~6 z4 A. t/ @5 V5 V/ @% K
  775. INC DEC_T
    8 G6 t, r$ N! g2 Z& |5 `
  776. BNE HEX_10
    , ~9 q) X' L- L( n
  777. ;------------------------------. z( F2 ]# s5 C* O6 Z
  778. HEX_1
    + _; F: O! Q/ I" S4 p9 B* S
  779. STA DEC_L( N8 b8 P) G1 J  Z( d
  780. PLA
    ! ^1 C1 U0 g# m. F9 r
  781. TAX& ^2 `+ R5 r' P" o4 w" L! v# P1 i
  782. PLA# S, I" Q! o+ t/ f7 ^- r
  783. RTS
    $ Z  A9 A! u( @5 a* [% j4 A

  784. 7 Q; m. ^4 y9 }0 i5 O6 P
  785. ;==============================9 n) `% Z2 v5 }: ^# f" d
  786. ;音乐曲目显示# r( s( P8 U; z$ s+ S( A
  787. Music_Show  H" K, D* j: `, Y
  788. LDA Music_Cur5 e" ]) E; D! h3 D5 U
  789. CLC6 O( |8 e9 B9 q8 U, l
  790. ADC #$018 l2 A* b" u3 g2 D
  791. JSR HEX_To_Dec( A, ?! a3 f# I
  792. LDX PPU_Cur
    6 c9 ~( v( H! |' z' r' U8 i4 w  Y& }
  793. LDA #$FD
    7 H; ~5 C# I" o' d  o% t- c
  794. STA PPU_Addr,X6 ^& E* B( A" O4 s2 e+ F
  795. INX
    ( p2 x5 j6 c$ Q& Q! i. h& |8 V
  796. LDA #HIGH(Play_Index_Pos)
      q8 G' o) Q' J/ g( C1 I4 A& W
  797. STA PPU_Addr,X8 m7 [1 G* R4 |, }
  798. INX
    1 l, K: v- @$ s' s* q" |- J1 N
  799. LDA #LOW(Play_Index_Pos)
    5 s" D/ M( c. [+ T) b! {
  800. STA PPU_Addr,X5 o( d( e2 q. a- X
  801. INX! }/ E& `) e- t
  802. * P' b) _& x5 @1 i
  803. .IF Music_Song_Total > 99
    , Y/ a, h- M5 j- F
  804. LDA DEC_H
    ( P$ u  j6 \$ o- e$ @& b
  805. ORA #$30; u1 d2 m9 ]4 U& E4 ?2 I2 T1 B
  806. STA PPU_Addr,X" `3 U, h" w$ Q: M/ v
  807. INX
    2 p, n# B6 Q5 d+ J/ ~) K7 J' J
  808. .ENDIF4 h6 E4 z: p( O/ G
  809. 1 k( M/ `8 G- ]. K
  810. .IF Music_Song_Total > 9
    8 z' S! A  ~; k
  811. LDA DEC_T
    : `2 U4 i5 j* i) A5 g  R
  812. ORA #$30/ ^0 {! E% b5 ?1 B
  813. STA PPU_Addr,X
    8 E3 Z4 Z0 |8 B* S4 B- h: K. h0 C
  814. INX% b7 ^% g7 I1 X" [
  815. .ENDIF
    3 j9 N& }& R3 m& G5 Y4 ~

  816. % y9 T  N1 T- V. ?' N" m
  817. LDA DEC_L% o; y9 L  q9 ~7 ^9 M
  818. ORA #$305 N' }  n9 v6 S8 C- \! n
  819. STA PPU_Addr,X; c* T- O  n6 c
  820. INX
    0 }" z! h. r& v! n+ i
  821.   E" y9 L& b: ~3 s9 s
  822. LDA #'/'" ~) K% P* P, K4 B( R
  823. STA PPU_Addr,X. B% C9 y0 X1 l1 I
  824. INX
    : @% X* D9 J+ F+ b. ]3 R- W1 [, v
  825. Music_Show_Total
    , s+ l& Z" B7 T2 B! ]0 Y: s
  826. LDA #Music_Song_Total
    / X: `* T' G& D# W
  827. JSR HEX_To_Dec
    : p: Q3 V$ }) o; e, z

  828. : y! a3 e4 I. S5 |
  829. .IF Music_Song_Total > 999 _" o. v+ K3 e: E6 x8 L1 k
  830. LDA DEC_H: h( {* \( w& O5 y& A: q- n+ k' S
  831. ORA #$30
    ! q5 }8 M' H% N" d: u3 U2 ^, ]( w
  832. STA PPU_Addr,X
    5 z- @1 U0 j$ \. a1 A' n; d1 \3 s* n
  833. INX4 D( f% O. a9 W5 {8 b  `2 v: Y
  834. .ENDIF
    8 O, B0 r0 J! L

  835. 5 s3 b% g( U) \* R5 V) s
  836. .IF Music_Song_Total > 9
    ' x" u: P* t% [/ H
  837. LDA DEC_T" {; O6 ~, U4 i8 w2 Y* _, b1 H
  838. ORA #$30+ x3 Z- J$ V, @3 c
  839. STA PPU_Addr,X: u2 a6 q0 u5 ]8 T0 z2 k
  840. INX1 i% Z+ j3 i& |5 Z; P! ~- E7 ~
  841. .ENDIF
    0 _5 n  N3 ]/ ?- M- _

  842. ! I9 @' N! @7 q9 Q( Q, a
  843. LDA DEC_L
    ) \9 }# Y! @, ~  r" Z% l
  844. ORA #$30
    - N0 ^4 T1 m2 F) Y4 [$ p* \5 F2 i
  845. STA PPU_Addr,X
    / i* ~% X1 j/ C* ~8 Q
  846. INX
      I2 P. d/ [; I# q  \/ g- P
  847. ( G1 Z! P+ e6 `& j1 D6 e
  848. JSR PPU_End
    " M  e+ ^3 d* T9 Y( E3 j$ p
  849. Music_Show_End
      `9 G6 Y6 b: J& \
  850. RTS
    ; y7 O* s/ h0 s  `
  851. : {) {/ U5 E  V* h6 j9 y
  852. ;==============================! g9 v/ m( H/ N6 |, d
  853. Time_Show;播放时间显示
    * Y0 G7 ]  t9 L  p: V$ ~
  854. JSR PPU_Addr_Set
    % }: g! O& [6 M  t( j3 I
  855. LDA #HIGH(Play_Time_Pos)0 N7 o* X" H* E' Q
  856. STA PPU_Addr,X
    5 X" k0 I' G1 J2 P$ |
  857. INX
    ; i0 a! U5 [3 x3 h
  858. LDA #LOW(Play_Time_Pos)8 K. [- P: g" _( u
  859. STA PPU_Addr,X
    ( C( d0 ~3 F8 ]2 u/ `
  860. INX  a: {% D: D. j! \* ]5 W7 V
  861. Time_Show_H5 ~5 R, d1 m9 f! O1 K4 ~0 f# p
  862. LDA Time_H
    ' b" I8 t$ F& P# E8 P9 P
  863. JSR HEX_To_Dec* v' l6 S, u/ R4 E' t5 d
  864. JSR Time_Digit6 I9 l* S7 X2 o9 n! q
  865. LDA #':'" B; {+ }2 N% t% F; a
  866. STA PPU_Addr,X8 g! }3 f) j5 C& V
  867. INX
    : x3 Y0 a& @: H* w! o
  868. Time_Show_M
    ) l7 H" k; w7 E, y; k! D* o
  869. LDA Time_M; i' `0 u7 C9 l, i! W
  870. JSR HEX_To_Dec
    1 |9 p" Q1 f  b# O, I* Z
  871. JSR Time_Digit
    ! s# J2 T8 M- X" e7 M
  872. LDA #':'2 H1 f. t" B* H, \
  873. STA PPU_Addr,X
    % o3 _$ \' Q6 h; R7 a8 Q
  874. INX
    # [7 _8 U2 ^8 d3 A
  875. Time_Show_S; D0 ?8 K' Z( j  r& D8 V
  876. LDA Time_S9 y# X$ l9 k5 J" X/ d; D
  877. JSR HEX_To_Dec
    / |2 ]3 V1 l0 O( C2 u
  878. JSR Time_Digit- Z' l# P: m$ s: X$ q# O8 E
  879. JSR PPU_End3 Q0 j) q" l. e3 [
  880. Time_Show_End+ _3 U' \* `8 D8 H( r
  881. RTS
    1 \! \1 M' [( j& n% I4 X, Z
  882. ) f/ B9 a3 u  `5 N& `
  883. Time_Digit3 e" ^' V6 Z5 u: ^
  884. LDA DEC_T3 U, @6 P% W6 F: v; {  Z( ~# J
  885. ORA #$30
    0 R  I8 l3 v" s7 g7 ^
  886. STA PPU_Addr,X* C2 X. ]+ z7 k
  887. INX
    / I$ e* C) @- ?* O4 P3 o% Q6 n
  888. LDA DEC_L
    2 S" n: |  @7 [: g& o" z* m
  889. ORA #$30- f4 \! J& m. O* @# B2 W# W; Z  m
  890. STA PPU_Addr,X
    # E4 k5 M5 Y* S0 x
  891. INX
    6 ?0 k$ F% K; V: f' a  x, L1 e6 N
  892. RTS( A5 D& F2 S8 r. _5 ^( b  \
  893. 4 p" r, s* K1 l0 I0 @( k
  894. ;==============================1 a* V) R7 Q& ?+ }. _! X
  895. Time_Count;计时$ [! A6 m4 N1 V. w2 S( B
  896. LDA Music_State
    % {8 V) A" f& c. X2 P0 D: e! V
  897. ORA Time_Wait_Cnt& W" h5 s* U0 W+ Z4 r/ B
  898. BNE Time_Count_End
    ) Y" x- W: h" Y, Z
  899. INC Time_Cnt
    $ z. H4 S- p: B# C6 `
  900. LDA Time_Cnt2 b( a+ P; D* P( J. |/ D" z
  901. CMP #602 L. ]8 [6 H( b# v+ B
  902. BCC Time_Count_End
    : F" c0 q6 E( ?5 {' h& h: Y
  903. LDA #00
    * D. G6 }6 X* a) N! T6 Y* _
  904. STA Time_Cnt
    ! m' o6 {1 k! Y' _8 s3 p( l
  905. INC Time_S. Z7 V3 N& O7 z5 ]; i  z) @: v

  906. ; O; K$ H; D1 L# j/ L  J
  907. Time_S_Cnt# {2 t1 g4 Q1 O$ @1 y6 }! F( o
  908. LDA Time_S
    # r. H* p8 ?% H: [  y2 P' G
  909. CMP #60) _( J8 c' F* n4 N' p
  910. BCC Time_Count_End& O9 ?7 z3 J8 A0 Y3 V5 Q: U
  911. LDA #00
    $ s$ N2 v+ [: z$ s) Y7 R
  912. STA Time_S
    ; ^0 h8 z) z6 W' U/ n
  913. INC Time_M
    9 Y5 \- T7 N6 I0 q- M2 Z" \
  914. # P, H. [( \. k% ?! m
  915. Time_M_Cnt
    % l- _3 i9 J# R+ B& s7 }: k8 U- [
  916. LDA Time_M7 t: }% x- A: A% D& C0 `- L
  917. CMP #60
    ) K+ l9 y/ q0 R/ c0 e
  918. BCC Time_Count_End
    1 _0 t6 [' K6 D$ q1 @" p5 i
  919. LDA #003 z9 E5 E$ l/ p6 j/ H, V  N3 ^3 l) c" ?% ~
  920. STA Time_M! p0 I& r8 L7 C0 s+ \
  921. INC Time_H3 E; \) F4 @) o4 ^$ J$ n) _4 j( P

  922. % G! Z5 ^, B- a8 i5 I9 f& W$ F+ o
  923. Time_H_Cnt
    0 a4 x/ g# }. T7 P* m  Z; y9 o
  924. LDA Time_H( H* |8 S- \) ^3 ?! X5 ?$ z. C
  925. CMP #24
    3 e* n9 ]; L8 {- D% b
  926. BCC Time_Count_End
    3 ^: J1 R  e: K7 f3 y( w
  927. LDA #00
    * I. A$ B+ s- p4 |
  928. STA Time_H
    : t3 u+ H5 k; F9 ~1 }% x/ i

  929. 0 e7 |( ?; O6 C: y7 i# ]0 G* @
  930. Time_Count_End
    , X9 }) e$ X) e5 r
  931. RTS& Q/ r6 i* q5 l9 L: t

  932. 4 R3 W; E" `6 T8 `1 ?
  933. ;==============================
    " c0 n( H+ `& g. O( @  O
  934. Time_ReSet;播放时间重置) p# o! f* z# W; w, [! k, G3 _
  935. LDA #$002 w7 J4 p3 W8 A0 i
  936. STA Time_S; m7 b9 E* ~, t- W6 q. M
  937. STA Time_M " h- S' o+ T& ~( Z/ H1 M# G
  938. STA Time_H  j& k1 Q( s5 P' ]* E
  939. STA Time_Cnt- G* }7 u5 t7 i) e  q* H) X
  940. RTS
    ' J5 h% U# P- F! r- k

  941. $ I/ ~; W" C& Y' N/ g6 T$ y
  942. ;==============================/ x: m1 k8 m" n$ o$ G5 @- L
  943. Music_Bar_ReSet;音乐条重置
    5 w- `' J7 O/ b
  944. LDA #$00$ y# \  k% N" `
  945. LDX #$00; K: a! t" ~1 Q
  946. Music_Bar_ReSet_Set/ n; U: Y5 t& j6 u
  947. STA Sound_Bar,X, m; w) U! j$ ]6 _  b
  948. INX
    " ]  ~. S2 r+ R" m( {
  949. CPX #$10. ]- U4 y0 \8 x
  950. BCC Music_Bar_ReSet_Set. W0 _; f# V2 [# c! ?2 L0 p
  951. RTS
    / |: Z/ U; J3 k( ?. r

  952. * V9 \: D' i. O/ r# q* u' O
  953. ;==============================
    ; G3 {4 T* c8 ^6 x9 H
  954. PPU_Data;PPU数据写入
    2 P# }+ y: w- y6 D/ S& ^
  955. STY Data_L
    9 Y1 m+ N% d2 ]
  956. STX Data_H7 w$ V* E! G& B+ a
  957. LDY #$FF
    * R6 t0 T5 [& `5 B# A+ g! U; ?
  958. LDX PPU_Cur8 M0 C% A" u/ k3 H8 @4 E. a
  959. DEX
    + C5 g- [: ?) z* ?
  960. PPU_Data_Beg* `; a! [3 E/ R3 a
  961. INX5 p" v* b" t( v& H4 U, {) s+ h
  962. INY
    - I# x: N. Z7 Z0 S% {
  963. LDA [Data_L],Y
    ! I! `0 o# ?, O- r1 n
  964. STA PPU_Addr,X
      |. Y$ U5 W! @0 a7 u
  965. BNE PPU_Data_Beg' D$ l6 }4 F+ a: ]
  966. STX PPU_Cur' f4 u1 k$ f5 V! A* h
  967. PPU_Data_End
    ! y) c; Y3 _6 @, i) Z$ G
  968. RTS
    : v6 }; M3 m3 E

  969. " F: h) b, Y+ \" F( @
  970. ;==============================
    5 N, H# |6 Q7 F9 \
  971. Music_Stata_Show;播放状态显示
    9 @* c5 Y2 d# W; _5 M
  972. LDA Music_State
    0 N; A$ w- c- S
  973. BEQ Music_Stata_Show_Play
    ) t/ t9 D7 H9 d
  974. Music_Stata_Show_Stop
    " A& N7 M, R: G1 X
  975. LDY #LOW(Music_State_Stop)
    # p1 o/ F" d' m
  976. LDX #HIGH(Music_State_Stop)3 C  g7 i) F5 C0 G
  977. JSR PPU_Data, i5 [9 h7 M- w/ j
  978. RTS
    * q5 l6 x' z# o  n0 g: q& o- x
  979. Music_Stata_Show_Play
    + E& m- w' ], w9 [1 }
  980. LDY #LOW(Music_State_Play)
    7 y0 y! I" }! \% S$ u5 @1 p
  981. LDX #HIGH(Music_State_Play)5 F0 M7 m8 V: e# B) m) P
  982. JSR PPU_Data) {  g; D8 d4 \3 v
  983. RTS7 E: `' y' ]& @: |- Y6 N& i( O
  984. & ?( z4 I8 c! S+ |' Q4 ^  C
  985. .IF SOUND_BAR_SHOW_ENABLE
    5 J! `4 {4 S% b
  986. ;==============================
    3 G: {- H$ J- K# q, b# E
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    * I5 T+ c4 j1 K
  988. LDY #LOW(Sound_Bar_Text_Data)
    0 |& r/ A3 ^& E8 e: W8 L6 _& [6 |' Q
  989. LDX #HIGH(Sound_Bar_Text_Data)
    0 f: S& V/ o, ^% `) `. _1 O- l3 T+ F
  990. JSR PPU_Data
    7 e3 l( M( a& n& Q! Y5 e
  991. RTS; F3 W0 t2 ?4 \
  992. / B& w; i; z# B% r% [
  993. .ENDIF
    * E' z5 {( @9 H3 u; t
  994.   z9 K3 ?3 o1 |2 R, r
  995. ;==============================% q! N% x# G: F5 ~
  996. Set_NameTable_Attributes;设置命名表属性
    9 g3 ~( e! S# Y3 h1 h! m+ ?
  997. LDA PPU_STATUS
    $ F) Q) K8 {0 P! U/ ?1 `
  998. LDA #$23- P/ u4 ^$ Y9 a* C: T
  999. STA PPU_ADDRESS
    : i1 @9 A- |4 f9 A; }  d9 L% |
  1000. LDA #$C09 A$ r) m3 |( `- e- J" d" j
  1001. STA PPU_ADDRESS
    9 r3 V7 r6 \+ B3 C5 |/ Y
  1002. LDX #$00
    8 E3 B  Z$ H7 W; ]
  1003. Set_NameTable_Attributes_Write
    ' u) I0 b2 |5 ?& |' f7 E' ~+ R$ b. q
  1004. LDA Palette_Attributes,X
    ( f3 f0 U/ ?* j3 p% s/ b# z8 Q9 L
  1005. STA PPU_DATA
    1 Q& B' f1 f# C; `* Y" Z
  1006. INX9 d( j8 ^$ B$ w" \& Z, _
  1007. CPX #$40' t3 |7 J: E9 z" s; x
  1008. BCC Set_NameTable_Attributes_Write3 ?3 A- K0 v6 r
  1009. RTS
    / {- X: G0 {. M: |0 ]- ~, S
  1010. 6 E7 u4 z& x9 }+ m" j- W: q
  1011. ;==============================
    8 ], x4 e" q' E3 ]" v+ h0 R6 U( U7 f
  1012. Set_Palette_Color;设置调色板数据9 t' `3 u' }4 f) q& W  v1 e9 k
  1013. LDA PPU_STATUS
    ! E8 U8 O6 N1 k" [! j
  1014. LDA #$3F! I. S& C3 y3 i8 T4 y& o
  1015. STA PPU_ADDRESS- |) Z) z- s* u1 d7 \8 w) q1 E
  1016. LDA #$007 P0 }1 w/ ^5 e- Z
  1017. STA PPU_ADDRESS7 T; e; X  C! |- M* ?1 E0 p8 _
  1018. LDX #$00: y9 n8 f/ k' b+ {
  1019. Set_Palette_Color_Write2 A/ o; R, C7 @$ }7 j& Q! I: L
  1020. LDA Palette_Data,X
    0 O2 v7 p5 Q2 L
  1021. STA PPU_DATA3 h4 @% I% P" `, R$ p
  1022. INX
      {3 D" `3 a: V6 Z* K
  1023. CPX #$20: Z3 p! ?6 N$ u0 t
  1024. BCC Set_Palette_Color_Write
    - k6 w) a1 p' Y, T( K
  1025. RTS5 X3 b  v2 }% \) O( m$ Q/ v' D
  1026. # G) s0 l" ~/ b8 o
  1027. ;==============================2 z" f& [3 M, l7 ?9 a0 f; L! P
  1028. Init_Palette_Addr;初始化调色板数据3 J1 O  k9 A2 ?" c$ k5 o
  1029. LDX #$00
    ' L  F9 j& q7 n  m5 I) H' m  d! n1 N
  1030. Init_Palette_Addr_Write
    ! [. E! [. Q& g4 M) V0 p: \4 `
  1031. LDA Palette_Data,X
    * g/ c8 L; ~% Y2 E
  1032. STA Palette_Addr,X6 |& i7 m( X# ?, [  Y
  1033. INX
    0 L6 F1 e) t! w7 p- `
  1034. CPX #$20
    7 H. J/ U7 p2 P, R# z4 C4 {4 A% g! |
  1035. BCC Init_Palette_Addr_Write8 u- I5 u9 P2 _
  1036. RTS
    + Z8 I4 c- |$ Z# \! z0 C. @5 L- X! l

  1037. * ?1 U; D+ K# W5 w- `" p2 G  G
  1038. ;==============================) a& k$ y) ]5 H+ M# Y* s% W. f
  1039. Update_Palette_Color;更新调色板颜色
    / v& S  ~' c) z2 E8 [+ f+ L2 k
  1040. LDA Show_Track_Name
    ( E+ Y" H4 D$ r6 f- q
  1041. BNE Update_Palette_Color_End
    7 @* F( D$ g" Y
  1042. LDA Palette_Update_Flag5 h; s" _3 N7 @0 |  T
  1043. BEQ Update_Palette_Color_End
    $ p% {3 c3 I3 l1 H, P! [0 b
  1044. LDA #$3F! K% k; e2 O1 x* L
  1045. STA PPU_ADDRESS
    3 [+ H: b2 z+ B; X' h) D  _
  1046. LDA #$00
    # a4 p5 z3 c: s8 V% ]- R  S8 V
  1047. STA PPU_ADDRESS
    ; \" J) F, \; B* ~' O! y
  1048. LDX #$00
    6 G% i0 r3 G0 Y# M
  1049. Update_Palette_Color_Write
    , w6 R! T7 k& t1 Y* r+ J3 O
  1050. LDA Palette_Addr,X
    & b5 V2 ^. b- x$ k/ t$ f
  1051. STA PPU_DATA( |2 w% ^. A. o( Y3 q- ]
  1052. INX
    ' v6 p8 p* y" {$ i
  1053. CPX #$201 J9 P3 y4 Q' M4 r* o
  1054. BCC Update_Palette_Color_Write* m. V3 S- e8 W
  1055. LDA #$00
    * b, F3 A9 A& w# Z
  1056. STA Palette_Update_Flag
    - ~" l! }1 v- j+ F, g+ n# h; Y6 S
  1057. Update_Palette_Color_End
    2 P# T4 m9 c- }( l/ U8 y$ Z$ d6 C, o
  1058. RTS5 D; g' R% r# w2 b' {1 S
  1059. 2 z9 E3 K, x# V" g% U* Z8 f( U  X* I
  1060. ;==============================$ Q( `8 R0 Z3 U# j" o
  1061. Update_Palette_Data;更新调色板数据; l! E' g/ w- y
  1062. LDA Show_Track_Name" S& l. _: Q/ e* \7 O9 j$ p
  1063. BNE Update_Palette_Data_End
    , C& ]1 k5 c# \& I) o
  1064. LDA Music_State0 V6 |& u. c6 J9 C7 C* `3 x; x
  1065. BNE Update_Palette_Data_End$ z$ ?! D# _9 X1 v! i" Z, a& v
  1066. Update_Palette_Data_Check
    8 f$ q& m: u( O, u( D0 p$ H
  1067. LDA Palette_Wait_Cnt' P8 ]' u9 `, P0 c( u& M
  1068. BPL Update_Palette_Data_Check_Over
    ' G  `' |" d' B; G% J5 v
  1069. LDA #Palette_Update_Interval1 z, |, K2 r9 {& Y' |$ f( u
  1070. STA Palette_Wait_Cnt
    + I5 U9 g" w% l6 j; n2 s
  1071. Update_Palette_Data_Check_Over- o* ^6 d3 e! w& W! T7 H
  1072. DEC Palette_Wait_Cnt
    8 j5 f# Q( `0 I, x% |* ]4 P
  1073. BNE Update_Palette_Data_End
    7 h  Y  o  m! b2 _
  1074. INC Palette_Update_Flag6 Q. S% r, i8 J9 p
  1075. LDA #Palette_Update_Interval# F; N2 a. i* ?% f
  1076. STA Palette_Wait_Cnt
    * p2 A7 y  m6 }/ b
  1077. LDA Palette_Update_Addr
    7 R! I6 {, y4 Y3 ^% L1 e$ a( K
  1078. CMP #Palette_Update_Max
    $ j, r- _0 t( o# B/ O% X- r
  1079. BNE Update_Palette_Data_Set2 P6 C1 b7 ^6 c- k
  1080. LDA #Palette_Update_Min - 1. ?0 P% [4 x, u! U5 P( ^; s1 _
  1081. STA Palette_Update_Addr' F& R# z" T1 H" y. s- X
  1082. Update_Palette_Data_Set; Z+ }7 P1 s+ |8 m
  1083. INC Palette_Update_Addr- L  M; G9 O8 X# B
  1084. Update_Palette_Data_End
    * a6 W/ {' ]( ^9 L
  1085. RTS2 z% h7 }' ^2 i3 \8 B; h
  1086. , p' y0 g5 r* S- o
  1087. ;==============================
    % Y  z2 N  E* m* {  D9 ?% s+ Z
  1088. Show_Music_Text;显示静态文本' ?$ j& R9 `7 m' O1 u5 r6 A" {
  1089. LDX #$005 T$ W& N8 R- F- X/ O, o
  1090. Show_Music_Text_Set
    ; Z. k( e  i; d6 `& E: J
  1091. LDA Static_Text_Data,X
    . t* F6 y* O! Z$ g
  1092. STA Data_L
    ) O$ T6 ?4 C# g1 L
  1093. INX5 h8 T* {- N# S8 ^+ E
  1094. LDA Static_Text_Data,X
    ! U, j7 N& ?% M
  1095. STA Data_H
    % U& W/ ^4 D# A. J$ E2 b
  1096. INX' Q, g( j2 a# J8 c6 E
  1097. LDY #$00
    6 G4 ~( f' e4 @" l4 y0 I; p
  1098. LDA [Data_L],Y+ L, V6 x; d  _" S+ d+ I
  1099. STA Data_Cnt  Z$ @; Y5 }8 t, I) T" \
  1100. DEX( v4 E! |& {- Z! F  m- |; c4 ~
  1101. DEX( Z' _) m; U& C" h  w0 m* T
  1102. LDA Static_Text_Pos,X  v# ?5 F% p2 z- u
  1103. STA PPU_ADDRESS, x: f7 Z0 ], o2 R7 n
  1104. INX
    6 z" L% g5 x/ f7 X+ t! D) ~
  1105. LDA #$207 p7 h/ Z" u" B  }) O5 k
  1106. SEC. ~& z. I9 |) e7 Z. q, F, Z) g
  1107. SBC Data_Cnt
    " e5 {2 B; r5 r( ^7 Z
  1108. LSR A
    ' o4 x% L# g# @5 \8 O. S
  1109. STA Data_Buf8 N/ ~! w' w* N
  1110. LDA Static_Text_Pos,X/ a" b! Q. @% I' \) [5 j8 j
  1111. AND #$E0. ^. [9 y: X5 s6 ~; N
  1112. CLC) h$ d3 O' Y" `$ k6 |
  1113. ADC Data_Buf: x" G( f" b$ I
  1114. STA PPU_ADDRESS# W* W& w2 {5 v+ F7 C
  1115. INX. t. r4 z/ }# m% n
  1116. Show_Music_Text_Set_Write8 j. a& n6 b! t- h& h
  1117. INY
    + x& T2 ?6 n' T4 i' }4 ^6 N; ?
  1118. LDA [Data_L],Y/ W- r2 H9 \6 K3 @) `6 b
  1119. STA PPU_DATA
    * `! }& ?  D* Y' }; Z
  1120. DEC Data_Cnt
    4 }$ R4 a2 r7 O# k5 A8 l7 n- W# J$ A) d
  1121. BNE Show_Music_Text_Set_Write
    - ]% _$ `# u0 s* s$ W
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos% G/ Z6 t# d; T( b" t
  1123. BCC Show_Music_Text_Set
    9 ?8 g' [4 u1 J/ s; P9 _) O2 |: x6 d
  1124. RTS
    & J) }- {) L5 ]
  1125. & D( d# [7 Y% u* X1 p8 w6 E
  1126. ;==============================5 N3 D/ }5 E8 M7 ]5 T5 @6 F7 V! G* b
  1127. .IF Track_Name_Pos;显示曲目信息" Q; i" ~$ E$ W" `  y  l
  1128. Show_Track_Info* _: X$ G$ r+ W5 g. {& r& |
  1129. INC Show_Track_Name; X, i) s! q$ D8 e. _
  1130. Show_Track_Info_Clear
    - L; X9 t! z4 N' u7 z: v2 Y
  1131. LDX PPU_Cur
    , M# C$ m& v- S% z4 c5 d" s) t
  1132. LDA #Mode_Clear
    " {! H. Y5 h' Z/ |( A/ w& b+ }8 y
  1133. STA PPU_Addr,X
      I5 X$ k9 w8 S. P$ ~, B
  1134. INX
    8 K& a3 l6 \& B; x
  1135. / @( y* J/ s, [- G* ]9 w
  1136. LDA Music_Last& h' I/ R* ]/ j. g' U, Y
  1137. JSR Show_Get_Track_Name_Center_Pos
    $ t! V& r/ H: u1 C7 X
  1138. Show_Track_Info_Write_Cur" a: I0 h: l0 {
  1139. LDA #Mode_CntLine
    , v: b' a) a, H  ^; n
  1140. STA PPU_Addr,X
    1 Y1 L5 s5 d2 K
  1141. INX
    , H+ }5 C* U8 R' l
  1142. * F' B9 s, ^( J; Z
  1143. LDA Music_Cur2 [+ G: R7 R/ q5 e
  1144. JSR Show_Get_Track_Name_Center_Pos- z' V! A* Q0 R1 Q8 r

  1145. - M5 W5 M7 G; I* I5 \* F
  1146. Show_Track_Info_Write_Cur_Data
    8 P" }: C% H9 z2 q- S: G9 z% Q
  1147. INY; }* t5 {5 ]9 i. a
  1148. LDA [Data_L],Y! I% q& k& G& J# j$ e
  1149. STA PPU_Addr,X% ~8 |. m3 ]( _& h
  1150. INX
    % c" J' m) |7 ]' w9 l
  1151. DEC Data_Cnt) U3 v) g/ f6 y. o/ `9 A
  1152. BNE Show_Track_Info_Write_Cur_Data7 k% I& C: L: r, i0 D
  1153. Show_Track_Info_End" \" t5 H8 O' I; w' c$ G
  1154. STX PPU_Cur
      Y$ \5 c( P% Z1 i) K- O- d
  1155. RTS
    : M1 G; z9 [8 I* f, P9 p
  1156. " B: j: w' o" e5 C
  1157. ;==============================2 i/ l. Q% B, }: ?' w  P
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置4 W0 j# {/ g  G
  1159. ASL A
    1 T  h% R! D- W- G* B
  1160. TAY
    ) F& U! K$ T: c: W; ?7 T" E6 I5 U
  1161. LDA Track_Name_Addr,Y
    ) t+ m1 H; A8 _: }: W2 w& Y
  1162. STA Data_L
    # s) v7 h5 x; h6 X) v
  1163. INY: w/ O# f6 D  Q1 z7 y$ \8 K6 Z
  1164. LDA Track_Name_Addr,Y4 p. O  E+ E  G6 y9 u# |
  1165. STA Data_H( K: `4 y2 H4 U0 S- G7 k
  1166. LDY #$00
    ! p8 e7 g9 ?3 Y6 F! J; U( D
  1167. LDA [Data_L],Y; |* x- k, f! n0 k  D* V
  1168. STA Data_Cnt
    8 x5 w) Z3 \- ~; l. [- ]
  1169. LDA #$20
    2 X# E& C2 h( n9 `7 M8 D% A  O' ~
  1170. SEC; Y2 N* K/ O! d. |' z' `7 e
  1171. SBC Data_Cnt2 P' o% {' x& u, _8 L6 w
  1172. LSR A
    # C+ T6 z9 |" \, K% @( Q8 I' L
  1173. STA Data_Buf& A& C5 I! h/ y1 k8 y9 M
  1174. LDA #HIGH(Track_Name_Pos)  o4 O" _& |$ z# D+ p! L
  1175. STA PPU_Addr,X$ V# k5 f6 _  a7 O! s0 v1 L
  1176. INX
    0 ^: U2 k9 ]' m5 v. N* O+ c: N
  1177. LDA #LOW(Track_Name_Pos)
    / W: I9 W. t+ @. \0 I9 J5 r! ?9 A
  1178. AND #$E0
      o8 y7 P! ?$ O/ n& l
  1179. CLC( ~! Q3 W: ?6 u- o0 X+ q
  1180. ADC Data_Buf; v5 X2 E0 G- ~* |+ y
  1181. STA PPU_Addr,X
    " K* J+ \9 f1 `
  1182. INX0 T! T# ~3 ~2 M4 m
  1183. LDA Data_Cnt6 v; i+ ]6 C0 l( Y
  1184. STA PPU_Addr,X
    4 c2 ~) ?/ F" [1 v- D1 j: l
  1185. INX
      H5 D# A1 \( m6 `
  1186. Show_Get_Pos_Center_End
    2 P. w( m+ D! L5 e4 \# e; i6 \
  1187. RTS+ e3 A8 e+ K' M1 }2 G. w# ]
  1188. .ENDIF; I% K+ O# l& X1 n

  1189. + n0 K) t8 j3 F$ L
  1190. ;------------------------------
    ! l# C; }* R# k! l! H: e. G, @
  1191. ;命名表数据* w4 R% u( N8 n/ v! S
  1192. Palette_Attributes: o9 Q% i( ]8 D0 G4 u
  1193. .IF SOUND_BAR_SHOW_ENABLE
      m+ R9 C+ Z6 H4 Q( H/ j
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00; _6 T9 `( c( I( v; {5 ]& O) S
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    5 J+ s+ K9 J( o
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    . J1 B% ?  U+ S5 \
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55- j6 \" `. I6 E' ~3 h
  1198. .ELSE
    0 a- v# }7 ^& f" o5 e& k
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    * J9 s, w' q0 B1 A$ o
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF; T; u9 @' g' \6 S  C5 r
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55+ Q- j, F: |# U1 A, P7 |) L% ?
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ! N& @% a4 w9 _0 ~$ J
  1203. .ENDIF
    7 @# v$ y- E+ q* J3 `

  1204. + _& |( x5 t9 o/ V
  1205. ;------------------------------
    0 t# x' r3 G; c4 ^
  1206. ;调色板数据$ F9 v. {" k% a8 k" [) x
  1207. Palette_Data3 Q0 i+ g: }* _2 ~
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F) h* R, F4 q6 Z/ j3 I  u: j
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F+ Z7 U2 }/ J6 x( C; B6 k+ B- b

  1210. ; P9 J# S# N0 q3 ]( u9 {  G
  1211. ;------------------------------1 G1 F: R. ]/ H' t' j8 ]1 b2 A# t
  1212. Static_Text_Data
    3 W+ k  v  f  U. D, q; ~
  1213. .WORD Static_Text_Title_Data! x/ ]  [. c& @4 k3 f
  1214. .WORD Static_Text_Author_Data
    , S& e5 v7 X+ m' r; v3 E/ v
  1215. .WORD Static_Text_Date_Data! y2 _; [$ @+ x# E* Q
  1216. Static_Text_Data_End$ X7 u9 h- d, `' Q8 P" o
  1217.   A9 ~. |- Q& Y4 u
  1218. ;------------------------------! x+ \7 J( K# f
  1219. Static_Text_Pos. z4 x7 J2 ^: j7 e7 s3 L9 H
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    ' i5 C; `$ e! Y! k
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)- T' H/ G& V, _: K. q  n* B
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos). a* Z  V/ p" ?
  1223. Static_Text_Pos_End; S: ]1 ^7 v6 T' V$ Y

  1224. # _3 s! r6 y7 `
  1225. ;------------------------------
    5 _! O, B* M; [- i7 W& E
  1226. Music_State_Stop
    * C& ?4 U+ q0 r: b7 s
  1227. .IF SOUND_BAR_SHOW_ENABLE2 {  S2 m5 q' K0 `& G' C
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    1 j, a/ k) y& G' r6 ^7 f8 }
  1229. ELSE9 C2 H" i9 X1 Z- m% Q  ^
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    - q: D- J) }* W6 ^# M# v1 q6 _
  1231. .ENDIF. C& ]! N* b9 F" D8 L
  1232. Music_State_Play" m  E' k- o, K
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    4 b3 Y. E2 {' c
  1234. " `* e$ }: |/ Y" j  w
  1235. ;------------------------------
    & @. w  u" X9 ]* E; ?
  1236. Sound_Bar_Text_Data;声音类型文本# |3 @, r7 Q$ [8 h1 q. X) }
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    , W: |( E- ?5 b5 |
  1238. .DB "SQ1-",$FF
    0 G0 ^, Y0 s; I  b1 k5 @# ?: `
  1239. .DB $FE,"SQ2-",$FF
    . R  S- b" {# D7 l8 Y4 _
  1240. .DB $FE,"TRI-",$FF
    9 A5 i: E7 F# }9 {* q. {1 n% O
  1241. .DB $FE,"NOI-",$FF( S" j& m& [9 E# |; i
  1242. .DB $FE,"DMC-",$FF,$00
    ! n8 B  `* G5 p6 ~+ n+ `

  1243. 1 \4 _: v* N; T
  1244. .IF Track_Name_Pos+ u* I- Y$ s( Y! V( H- C
  1245. ;------------------------------4 L/ C2 y- U- q; [& d  ~
  1246. Track_Name_Addr;曲目名地址索引
    $ ^& d. L) c' d" N
  1247. .WORD Trackr_01; \1 A* w7 f2 J
  1248. .WORD Trackr_029 U) Z0 b/ G. u7 F+ i
  1249. .WORD Trackr_03
    - L0 R$ a3 J( H5 O: F
  1250. .WORD Trackr_046 g  s: ?! t2 W2 u: U3 T$ \" G2 p# s
  1251. .WORD Trackr_05& H  C7 X8 W7 ?0 e; K6 F$ ~$ A
  1252. .WORD Trackr_064 e7 i! r* I; o$ Z* v" m: k
  1253. .WORD Trackr_07+ H1 @- ]1 X$ Q7 U( Q
  1254. .WORD Trackr_08
      B9 ~2 b1 g( u2 O& D: Y
  1255. .WORD Trackr_09) z" u% a: y) c+ `* Q3 f+ r. p' u
  1256. .WORD Trackr_10! T! n3 s$ O& X! H6 ]& d+ s8 I
  1257. .WORD Trackr_117 @* p' ~2 x8 ]# K1 y' U$ V
  1258. .WORD Trackr_125 P/ y/ U' N9 y9 ]+ E2 j6 T$ d
  1259. .WORD Trackr_13$ B. y" O- i: Y) m. }0 t# f
  1260. .WORD Trackr_147 N6 U$ ~/ Z' N, y7 P0 S3 H
  1261. .WORD Trackr_15
    " M; O+ k4 E( z0 V& F3 S
  1262. .WORD Trackr_16
    2 q& l/ O9 o; q" P( D2 _
  1263. .WORD Trackr_17
    1 x* _( N/ d* ]6 ]* B1 V
  1264. .WORD Trackr_18" T$ W: I' {  ^& d9 U. I. }1 g
  1265. .WORD Trackr_19
    , L0 I; [8 i7 ]3 v* @" T
  1266. .WORD Trackr_20( k5 u' u: G3 c1 Y/ w4 O
  1267. .WORD Trackr_21; \- @0 _6 \$ @- k/ N. J1 i' s* {6 F+ ^
  1268. .WORD Trackr_22
    ; i2 M5 P" w  r
  1269. .WORD Trackr_230 _$ I2 ]2 N! s+ Z) P( O
  1270. .WORD Trackr_24
    " |$ ]# h+ [# @
  1271. .WORD Trackr_258 S. F/ n$ }4 V6 i5 c
  1272. .WORD Trackr_262 D4 L" S3 C4 H
  1273. .WORD Trackr_27
    . N4 w/ e2 m  \  i( p) [1 I8 N5 E
  1274. .WORD Trackr_28
    " v# N4 X! ?/ W' E0 H$ R9 Y
  1275. .WORD Trackr_29( K0 a6 V# b! D% ]& z' }
  1276. .WORD Trackr_30
    ) f+ f7 K% e1 I) E2 a  U* q
  1277. .WORD Trackr_31
    + X1 B9 E+ j! s! W" {; R! @
  1278. .WORD Trackr_327 x* N' e. C+ K" F( }: W( ]0 o
  1279. .WORD Trackr_33/ q# p# I: {8 T
  1280. .WORD Trackr_346 k+ a9 I( ^3 n& {5 E% d
  1281. .WORD Trackr_35
    2 `5 z  x/ F( R7 V
  1282. .WORD Trackr_36
    1 M3 |6 l( X2 E; [. u. D
  1283. .WORD Trackr_37
    2 }2 ]* w! H4 g
  1284. .WORD Trackr_38
    % X  t" E+ n( v
  1285. .WORD Trackr_39
    + V, B' q  k  \( H& g. F

  1286. 9 t0 A5 b. d1 l* k  p5 Q
  1287. ;------------------------------1 X7 s' R8 g8 L& Y- ]* Q* _
  1288. Trackr_Name_Data+ s1 i+ {6 b& |
  1289. Trackr_01 .DB $05,"BGM 1"
    % i4 D3 O3 `0 a1 T8 X
  1290. Trackr_02 .DB $05,"BGM 2"
    2 w* X  T2 p7 A
  1291. Trackr_03 .DB $05,"BGM 3"
    : t9 ?3 ^; S' N4 _: O
  1292. Trackr_04 .DB $05,"BGM 4"
    1 z' K% i# a  c. H+ I- r( U
  1293. Trackr_05 .DB $05,"BGM 5"
    , K/ x2 K. V" z  u% r  P$ s* s
  1294. Trackr_06 .DB $05,"BGM 6"% m2 x# k& o% `; h6 o# N/ v
  1295. Trackr_07 .DB $05,"BGM 7"4 X" T1 g3 I/ b- f
  1296. Trackr_08 .DB $05,"GREAT"6 B$ e  P4 [  i5 B4 c5 _  w- ?3 l: a
  1297. Trackr_09 .DB $08,"BOSS BOM"
    $ ?% G- k0 t' c# a
  1298. Trackr_10 .DB $08,"BOSS2BGM", m4 G# `- K2 N) h/ L! s
  1299. Trackr_11 .DB $07,"P CLEAR"8 L+ M1 ]# R: w3 r) w- J) `
  1300. Trackr_12 .DB $07,"A CLEAR"0 m* w- N9 q, j9 v5 Y
  1301. Trackr_13 .DB $04,"OVER"
    . T  i  v+ B$ F4 r0 E: s# ^( Z
  1302. Trackr_14 .DB $06,"ENDING"; [- {& j& S5 o' F
  1303. Trackr_15 .DB $04,"SUTA"
    ( z+ S; E3 v4 |# o$ |, U. T
  1304. Trackr_16 .DB $07,"THUNDER"% n. G/ q" x' m1 g/ p
  1305. Trackr_17 .DB $04,"SHOT"9 E* j: q( x: W
  1306. Trackr_18 .DB $05,"LASER"# N8 ]/ V" w* b
  1307. Trackr_19 .DB $06,"SPREAD"
    ( |" y) Q5 S- G
  1308. Trackr_20 .DB $04,"FIRE"
    3 |8 X- Y! d0 ]# C) J4 n
  1309. Trackr_21 .DB $06,"B SHOT"- f- d& t5 P" u8 b1 F8 c! x
  1310. Trackr_22 .DB $08,"T DAMEGE"/ q) i$ [! s( b5 o/ ?4 e- O/ H
  1311. Trackr_23 .DB $07,"HARETSU"- Q# `2 W, J5 D# O! O. O
  1312. Trackr_24 .DB $05,"T OUT". |# L7 I! v6 i5 h& m$ l+ Q
  1313. Trackr_25 .DB $05,"Z OUT"
    # z" s/ P8 c; u6 H! j7 d: Y- t4 a
  1314. Trackr_26 .DB $05,"A OUT"; d" B& _$ F) f+ L( G
  1315. Trackr_27 .DB $04,"ROLL"6 w" e: L; T" a' ~  ^; y; ^
  1316. Trackr_28 .DB $06,"APPEAR"( {* M3 n" j; p8 m
  1317. Trackr_29 .DB $05,"POWER"/ L9 i0 i( n( c* s6 Z
  1318. Trackr_30 .DB $07,"BOKK BK"
    0 p- ^& t6 p; j8 h
  1319. Trackr_31 .DB $08,"BAKUHA 1"/ o, \( A8 U1 @: y1 ^8 M( }
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    7 o' B2 y, m/ \  s9 B
  1321. Trackr_33 .DB $05,"ARUKU"6 J* ^. z7 g9 u+ R! G
  1322. Trackr_34 .DB $06,"JIWARE"
    ) ~* u, P4 J, u# ]( J
  1323. Trackr_35 .DB $05,"SILEN"
    " v0 w. ~0 S6 n! z
  1324. Trackr_36 .DB $05,"P 1UP"5 ]# b+ Y  g* w0 e" m' u
  1325. Trackr_37 .DB $05,"P OUT"8 R# _+ J" e* B6 k) b8 k* \) ]
  1326. Trackr_38 .DB $05,"B OUT"! `1 X# ~4 v8 {0 |: P# P  o
  1327. Trackr_39 .DB $05,"PAUSE"
    1 U3 T: L! j% G; Z# X8 S) _( l' f

  1328. 7 k" T/ A" B. K$ t# o, O
  1329. .ENDIF: A1 h! u% a2 \5 \( \) O  B8 _6 C

  1330. ! u! Z' {1 p( D. M/ d! v
  1331. ;------------------------------
    6 ~% r3 a: n  _2 J) S! J
  1332. Static_Text_Title_Data;静态文本数据
    8 _! R2 ]4 e  w9 H' P8 F& I
  1333. .DB 12
    # V- t2 S9 D0 b" Z) E. b9 v
  1334. .DB "SUPER CONTRA"
    . Y, s' a% a( J. p  v
  1335. Static_Text_Author_Data
    # y3 J4 Y- c  A$ R# w
  1336. .DB 238 A+ s. N  k) O  d
  1337. .DB "EXTRACT BY FLAMECYCLONE"& Y( i5 K$ s0 ]4 [" ]( ^% g5 D
  1338. Static_Text_Date_Data1 C; u0 P: G, T7 i- {7 R
  1339. .DB 103 G- H: C  r, H* z9 b8 ]- c
  1340. .DB "2023.07.11"
    . R# `2 o" I6 t- X

  1341. 2 N+ m% W  {) f. }6 j
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    : o6 j) u; I) V* O, J( G  g3 w$ s6 e
  1343. .ORG RESET_ADDR
    - s/ r( Z! `) [2 \- F6 D

  1344. 3 f% h; \3 _7 Q: C  @& }: Q9 D

  1345. 3 \* Q, P- `6 ]3 G( w
  1346. ;==================================================
    ' p/ q7 Y. r7 A. l
  1347. ;切到主程序bank
    & _3 w" \: k8 Y" P/ ^* M# ?% R4 k
  1348. SwitchMainBank( [: E) R* O3 |9 U  C% l( b8 H/ r
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK" K; X& s: D/ h
  1350. JSR SwitchBank8000; O3 {$ |" d% b- J6 }
  1351. RTS& x! ~5 t/ @0 P: m4 W# Y  J  Q

  1352. + x0 i5 ?* w! N; D0 ~
  1353. ;==================================================
      J, `$ o5 ?# k0 U
  1354. SwitchBank8000;切换bank到8000-9FFF
    7 u9 l  R3 y  x9 K8 y
  1355. PHA5 D. [2 {) \% W3 r, W3 u$ j
  1356. LDA #$06& z: V4 o8 O, k  c! Q/ H
  1357. STA MMC3_BANK_CTRL! Z5 s% p9 w, r- H! J* \! t
  1358. PLA8 @( Y5 Y$ v" P; Y5 [+ u
  1359. STA MMC3_BANK_DATA
    * a! V* A, _6 Y' N6 A  }2 b: U
  1360. RTS
    4 G6 ~- i5 d3 c7 C0 s

  1361. 1 Z: z/ |) q7 r
  1362. ;==================================================  ~( x; X/ t) w7 l" W
  1363. SwitchBankA000;切换bank到A000-BFFF
    " @( b6 L+ B% Z- ]: F7 D, o
  1364. PHA
    , a% S  R8 Z' |0 `
  1365. LDA #$07
    : V+ Z  b7 n% p
  1366. STA MMC3_BANK_CTRL  E' `2 {' Z9 V
  1367. PLA( U& S$ ?4 c7 C9 `# y/ Y8 {
  1368. STA MMC3_BANK_DATA
    " L$ x7 P0 M" a- i; L( V
  1369. RTS0 ~- D" e' O, ?9 \/ E& m1 ]4 c

  1370. 9 ~! u8 ^/ i% ^" M+ A2 t
  1371. ;==================================================& w0 F6 x1 u' n
  1372. Sund_Bank_Init;音乐bamk初始化
    3 t+ |4 \( Y, A' {
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK9 O% l2 N0 v8 a( z8 G! l" o
  1374. STA Music_Bank_8000
    $ k# M8 p7 U* A' P4 j: V
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    & |0 h, q2 l3 K/ X% Y, N
  1376. STA Music_Bank_A000
    * N) W7 o- {# G* m  J
  1377. RTS
    0 [* ~8 [5 f2 w8 w4 d

  1378. ' l* y! ]# F' u" q8 R4 j
  1379. ;==================================================( }+ H0 Q( W+ _4 f+ J- i" {
  1380. Sund_Bank_Set;切换音乐bank
    6 i! V, T+ y- |- I
  1381. LDA Music_Bank_8000
    ( h% @: [' b# ], z+ H$ U
  1382. JSR SwitchBank80007 E: k9 M( U9 \% X+ l8 I8 G
  1383. LDA Music_Bank_A000
    5 B2 B. d1 C7 Z+ Y/ L* @5 `
  1384. JSR SwitchBankA0002 d+ h; T! }8 z5 ^1 z% R5 O; k
  1385. RTS
    % ~$ P$ w$ t1 W; W5 k& ?/ T
  1386. ) e! F6 {+ {5 o
  1387. ;==================================================5 I3 P% j1 L% G! R. ?0 m3 _
  1388. Sound_Init;音乐初始化. y9 f; N, |( f
  1389. PHA6 @/ e* h; E" i# C
  1390. JSR Sund_Bank_Set  j6 E9 B, z" X( O2 k  q( \" ^4 e( z
  1391. PLA' b: a, x5 p4 Z0 t
  1392. JSR Music_Init_Addr
    2 j& P! O  g8 P! E/ e) [
  1393. JSR SwitchMainBank7 R/ z' J/ m" S- i- {. O

  1394. 9 L7 c" W% u. q7 U6 c
  1395. JSR Music_Bar_ReSet- K; X" e/ @2 [7 m& g+ r  Y
  1396. JSR Time_ReSet) v  l& {' _# }' O( {3 P
  1397. LDA #$00+ _+ F& F5 M* `% B, m
  1398. STA Music_State
    ' S# H  \3 Q3 Y6 ~
  1399. JSR Music_Stata_Show, t2 u- c3 y% N0 Z/ {
  1400. .IF Track_Name_Pos1 a7 c' r) L4 y2 Z5 ]. k
  1401. JSR Show_Track_Info. J, R& m+ y: K+ _: d7 Z, g* [
  1402. .ENDIF& h$ [& O6 y) f0 O* {, G+ V; J) A

  1403. 2 q) u/ k+ D. S" `- T# }1 c; Q
  1404. RTS
    * u# S; g3 h' l" U2 {) o( S
  1405. 8 r3 h. @8 N9 E2 e9 C7 i1 F$ S; m
  1406. ;==================================================( N3 {1 F" m9 b! o
  1407. Sound_Play;音乐播放7 k; j& Z3 \6 N) t2 d$ ~( ]
  1408. PHA* r6 A* R' ^) D' n) Y% T
  1409. JSR Sund_Bank_Set
    # V( O7 o. C: t$ j# f
  1410. PLA' q4 o8 o/ M; I% f: l2 p) j
  1411. LDA Music_State
      B2 Z0 Y. }) t, w7 n3 o) y6 o: d7 e
  1412. BNE Sound_Play_End
    6 s. \2 Q2 w2 a2 T6 }2 {
  1413. JSR Music_Play_Addr
    % L- y, K: b( @" E5 U
  1414. Sound_Play_End# g0 D9 w/ ?: v0 q6 D
  1415. JSR SwitchMainBank
    * W6 Y/ N* N* ~; l. M( w" q' S6 }1 V5 K
  1416. RTS* U) K- f( W: y
  1417. : ]0 i( k" |3 @& [: y2 Z8 m) e- ]
  1418. ;==================================================
    # m3 {3 ~7 |) f7 L8 ]
  1419. .IF Music_Reset_Addr
    8 H: H& l1 ]3 L9 E
  1420. Sound_Reset;音乐重设(如果有的话)( O+ S  s5 T7 w- Q0 u
  1421. JSR Sund_Bank_Set
    ; L0 @, ]( e' L
  1422. JSR Music_Reset_Addr
    7 }8 o: u+ ?% r7 w3 W' D
  1423. JSR SwitchMainBank
    1 M# }, ^; L3 O2 j7 y3 T
  1424. RTS9 m+ G( `* c+ b4 i# v
  1425. .ENDIF$ ]- B# a% S0 Z( F. V& e

  1426. 2 D! a& D2 M- ^: q9 {/ {; e
  1427. ;==================================================3 w7 _9 R6 H  i# F. }$ R' }
  1428. MainLoop;死循环! o. n, a1 m4 P
  1429. JMP MainLoop
    2 d( ^8 h! F, r
  1430. ! B2 f4 E3 |1 e; P  ?  p" D
  1431. ;==================================================
    : t/ Y5 I, V2 `1 k0 E% [' V, h! l
  1432. NmiProgram;Nmi中断处理
    , Y+ L5 L. z& n0 \3 i( ?4 C2 P9 u
  1433. PHA- A' V. a/ G' @
  1434. TXA
    : M6 x5 q# f  ?8 `( ]
  1435. PHA" n4 o4 `# s% P; ~, y" @
  1436. TYA* n3 W$ [* s  X
  1437. PHA
    5 u, x* ~# N0 h* w+ \

  1438. 0 Z% x! c' e. a" j' K( q
  1439. LDA PPU_STATUS, m1 M# Z1 z  k7 `1 j( f
  1440. LDA #$00
    : K5 H) X2 Y9 K) x! y" r
  1441. STA PPU_CTRL
    8 V+ r& ^  H0 o, N1 c1 P9 H

  1442. 8 b$ \% X6 Y7 C: m2 s
  1443. ;切换主程序bank
    2 d. ]2 \. x3 ]0 b: S
  1444. JSR SwitchMainBank6 J! @/ ?% J8 f" T/ A* U

  1445. * \8 x3 m) ^$ Y4 b# ^
  1446. ;NMI处理$ L( H) B9 Y* i% |- p
  1447. JSR NmiProgramProcess, x- M4 |# ~4 R1 f) t6 x- l5 }

  1448. & E, M) L% r* Q- _2 _
  1449. Nmi_Proc_End) _" @. q, T/ L5 D
  1450. PLA" O* \: `! R+ |$ y
  1451. TAY; {1 |. S* J% C' @% B# R+ D7 g
  1452. PLA
    ! Z, R$ `; H' X' D: I1 e
  1453. TAX6 ?' A3 S0 t, F: r& N. C; `) {
  1454. PLA: c) v- h: d0 D6 M
  1455. 1 z* l. r& ^9 f( d/ M
  1456. RTI& Q( V3 i; u. y2 M! P/ m
  1457.   h, O& U3 f3 D
  1458. ;==================================================
    7 w5 a2 ?) h! I/ C
  1459. ResetProgram;重置中断处理) X% m2 Z" [/ ]7 l) D% C
  1460. SEI0 B9 I+ y$ S' z7 ~" i
  1461. CLD
    ) e" p6 T( f6 i, l" _' {
  1462. LDA #$00
    / l& Y1 a" F) V: t& d
  1463. STA PPU_CTRL
    & ?8 n8 C! S% {9 j' Z  @# e
  1464. STA PPU_MASK% |1 N5 r/ n: e' R$ d

  1465. $ g# D9 H" e3 H- w  I* h0 l. U% X
  1466. JSR SwitchMainBank+ M3 Z, i3 P; @
  1467. JMP ProgramBegin
    $ ^$ Y, Y+ O3 i4 P2 s) K$ }& S+ n$ J

  1468. 3 ~: E8 w& P; {4 n
  1469. ;==================================================
    , R4 b* W+ I8 t  Q, ~
  1470. IrqProgram;Irq中断处理8 [$ F, \4 t% h1 V5 _6 V
  1471. RTI; H% ]! U  O! @+ S* m2 j2 I. Q
  1472. 1 J) P8 V9 [+ z% r/ Q
  1473. .IF SOUND_BAR_SHOW_ENABLE7 ^( ^% F) H4 i6 e7 W* _) T% Q& N4 C& C
  1474. .ORG $FF80
    & H, G" q4 P" _
  1475. STA $4000,X
    9 _- ]  ^' X* w6 G  J
  1476. STA Sound_Bar + $00,X( g6 `* w4 z: s& p! O
  1477. RTS7 l0 _6 [8 \) }7 C+ q# _  V

  1478. : _2 M, i! o* c9 Q/ q% x2 k
  1479. .ORG $FF88/ p4 j4 ^, y' W% q
  1480. STA $4000,Y6 \. |5 ~: i( o* M) \
  1481. STA Sound_Bar + $00,Y
    # \2 M" L% K- h" ^5 |
  1482. RTS* [7 p' G  \5 ?+ _1 E
  1483. & V0 K: j' n" C# f2 f- u! w
  1484. .ORG $FF90
    / p2 _- J, t/ X. @
  1485. STA $4004,X
    3 w/ j* Q9 R# Y( z0 {
  1486. STA Sound_Bar + $04,X
    3 N9 s% @: b' @& c5 Y, F- O
  1487. RTS3 V: j3 R- C2 \2 A* X. e

  1488. 1 v6 J; U$ G8 k: F8 U9 x2 h, _
  1489. .ORG $FF98
    ; J# j. P* t0 \
  1490. STA $4004,Y
    9 I  F6 H" C$ v1 {8 u1 G
  1491. STA Sound_Bar + $04,Y
    1 b7 {' C- h% Y, e3 J
  1492. RTS/ k, V1 H- @; s# J5 T' H/ g

  1493. + D: n, e% p5 @% ]& w+ k- V5 h
  1494. .ORG $FFA09 O: V0 h0 A# @, }) }0 E
  1495. STA $4008,X
    7 Z# z' _6 G; o7 X5 q" ?
  1496. STA Sound_Bar + $08,X
    * Y8 k) s8 ]3 }, I7 L
  1497. RTS, Z/ z. |5 D7 e7 G* s8 B; X
  1498. 1 B, J( x" ?1 v  p) g
  1499. .ORG $FFA87 l5 e1 g* C4 B4 h
  1500. STA $4008,Y
    . e. z& w* c8 \# v) r! G; S
  1501. STA Sound_Bar + $08,Y& d" s& }9 E: y( W, x! x
  1502. RTS
    & ^4 p4 ]  ]& W0 d

  1503. ! Z4 Y/ H1 ?5 @' m
  1504. .ORG $FFB0
    6 Y/ ^1 c, @* }$ z+ A
  1505. STA $400C,X
    # U& j' |5 u& H/ h
  1506. STA Sound_Bar + $0C,X/ q) [. w2 [9 `9 {, ?6 b
  1507. RTS8 B9 X  R6 S5 O5 E3 ?( P
  1508. & x3 D3 x+ l2 C& x% \: [
  1509. .ORG $FFB8
    , v5 R+ f/ s& e7 n. P
  1510. STA $400C,Y# z1 P; c& z$ A3 i
  1511. STA Sound_Bar + $0C,Y2 ]+ I, Y( U+ }' F* y5 N% F
  1512. RTS& ]9 s1 `* |1 x1 ?5 ]' o5 G

  1513. - J* h8 ], J2 i# M2 f( ]$ N
  1514. .ORG $FFC0; v6 X5 B. W" F5 G! b* _
  1515. STA $40000 F: |' z/ E5 g& v% p
  1516. STA Sound_Bar + $00: c5 r2 ?" h7 q. @; T
  1517. RTS
    ! U& R: \. S3 N0 M/ w
  1518. - s4 d1 Z1 o8 b- {
  1519. .ORG $FFC8. _2 O! F- H9 o% Q% h, y$ v
  1520. STA $4004
    + Q1 |7 P4 h; v; k0 U* a7 L
  1521. STA Sound_Bar + $04
    * q* M4 C3 ?$ t3 l) f4 A: ~! }
  1522. RTS
    9 {1 u6 ^6 K2 u6 m4 z- [

  1523. 8 S9 [/ D- L! J& P+ E' e9 I
  1524. .ORG $FFD0' Z; _; {" ^0 ]. z" ?
  1525. STA $4008
    6 h6 p$ [  Q, @( r0 ~$ V
  1526. STA Sound_Bar + $08: H8 I/ ?+ u+ U$ ]8 |& {9 Q
  1527. RTS
    5 j# _: e% W7 t: Y# Y4 s8 g
  1528. ; C" ~" e/ T' W, H8 p" r
  1529. .ORG $FFD8
    ( N! ^- M# M: x
  1530. STA $400C/ ]0 s/ m! j  ]8 n& m/ C( f
  1531. STA Sound_Bar + $0C( u8 C; o: z% ?. G( Z. _
  1532. RTS
    8 _/ z" c/ d  ~: x& Z$ c$ |$ J
  1533. & ~7 x. h& \" f' f0 h! ^
  1534. .ENDIF
    & x+ l6 e) K% P' u1 m( |
  1535. 4 c0 h8 r6 g9 i0 `
  1536. .ORG $FFFA2 V/ l9 I8 O2 y% E1 }  I8 @
  1537. .WORD NmiProgram9 Z( B7 o. P$ t
  1538. .WORD ResetProgram4 I! I" j5 y2 H9 _- N
  1539. .WORD IrqProgram
复制代码

. P* ]) u- ^* G$ T+ A6 T6 U
/ ?9 I  _# V* T. y5 k
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1339 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3328 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-7 16:18 , Processed in 1.087890 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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