EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
5 d5 A- E2 m9 A8 x" f7 c) T
0 o2 f5 [& N) P1.魂斗罗
) _9 v+ ^' J: g" D! n2.超级魂斗罗4 s% L7 B8 a% r9 ]6 \- h
3.赤影战士
4 N8 e! ^1 D. _- ^: W8 s6 G0 v7 R4.忍者龙剑传2
9 _: r- s* V( w
5 k' v' V  Q  Y
: w9 w8 U8 R( y$ \7 \
& o0 `. _8 O% w) c" H! K! N1 S; H: X/ X) |0 ]' d3 i* \
源码:
5 I6 Y0 y. w% |
  1. ;[FC音乐][播放器模板]
    ! Y! N, ^: m8 I
  2. ;FlameCyclone 20230710+ ^8 P$ G5 p3 L. E' |6 P

  3.   L5 K. `  d. ^& a. ]9 Q
  4. ;文件头! a3 v7 M) s9 L8 ~5 d
  5. ;======================================================================! P6 C/ g6 y: S8 V5 D4 F
  6. .INESPRG 4                                              ;16KB PRG 数量
    $ M0 O. S" P0 t/ H' _7 ^6 E/ U
  7. .INESCHR 0                                               ;8KB CHR 数量
    ; f- }( t1 X, d$ J4 s2 v: e) x
  8. .INESMAP 4                                                   ;mapper 4
    9 ?% W$ h6 l, g# z1 ~' M
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直# }% B: Y( L' }6 g0 f6 W, |

  10. , x/ ]: n7 C7 h% r
  11. ;==================================================( t& U9 q, p7 `6 R" ?# k( q
  12. SOUND_BAR_SHOW_ENABLE       = 1& @/ D+ |9 w" ^) X
  13. ;==================================================4 |2 \4 d5 G; g7 p- P* b* M7 r1 A4 u
  14. BANK_DATA_MASK              = $07" W$ e- @3 A; u  k6 f! D4 H( d0 U
  15. ;==================================================. S6 Z3 b1 H4 n' Q" g( D
  16. SOUND_DATA_BANK_0           = $001 s, G' k4 f) O( s  k6 x5 ]
  17. SOUND_DATA_BANK_1           = $01
    $ i/ B* [, S: s
  18. SOUND_DATA_BANK_2           = $02# z  {8 ~" J& {2 i, G# x% x* Y
  19. SOUND_DATA_BANK_C000        = $06
    & \  v1 F, O8 c2 W% F% J1 [, ]
  20. & u. S9 \$ b$ r, ~" k7 r
  21. ;-------------------------------------------------
    ) I# {$ {/ z$ f1 i. J+ f. ?/ C
  22. CHR_DATA_BANK               = $049 c! \! c" b. ?# H7 [* k  k9 G6 D
  23. CHR_DATA_ADDR               = $A000
    ( D7 A0 X& ~, ]
  24. ;-------------------------------------------------9 _4 a' `! d2 ]
  25. PROGRAM_BANK                = $056 n+ `5 K% |& `8 Y. `
  26. PROGRAM_ADDR                = $80008 W: V# ^9 j/ Z$ e% m
  27. ;-------------------------------------------------
    + [" G) `$ P* t% a& H
  28. RESET_BANK                  = $07
    * r8 z# ?' `! O
  29. RESET_ADDR                  = $FE00
    * G3 U* ?5 \2 J/ [& g
  30. ;==================================================: H2 X& o* R- L+ {5 R
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址# H8 q# I' M: t6 U6 d; m( I$ j
  32. Music_Play_Addr             = $813C ;音乐播放地址
    / ]. B9 ~+ v. z/ r0 C/ I
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址* W7 ^, t) l) \' i7 s
  34. ;==================================================
    ( P9 a0 A# z$ b- H/ c
  35. Music_Song_Total            = 039  ;全部曲目总数* `$ [9 k) W9 H; ]
  36. Music_Start_Song            = 007  ;初始播放曲目
    $ y9 M8 i, y& H5 e$ n5 O4 |
  37. ;==================================================" b7 A1 `+ c0 T8 Q( t

  38. / H8 d' ]$ g- m# e
  39. ;==================================================, M) N' Q: ~9 f1 z* R* ?6 d
  40. Title_Text_Pos      = $210D ;标题文本位置5 B  g' a  O- x( E6 @3 O7 |, N
  41. Author_Info_Pos     = $2284 ;作者文本位置- t* B* c2 V1 \" }/ U8 m# q- n  N
  42. Date_Info_Pos       = $22CB ;日期文本位置
    5 L% A8 j) Q6 q' e" n/ O, ^0 b0 l' i
  43. ;------------------------------
    0 P2 }# C; B; W
  44. ;------------------------------& Q6 |( S  `$ w* c' B" u
  45. .IF SOUND_BAR_SHOW_ENABLE7 s: ?3 L  a2 f0 t! b
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    , H% v3 h' M$ b$ }* w2 H/ K; {) C7 ^
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    0 a5 w8 A4 _, R' k
  48. Play_State_Pos      = $2233 ;播放状态位置
    ; E! A2 V5 Z* i3 `% D6 ]% S# N
  49. .ELSE
      \& e: P: d3 n+ ^: h( e7 |/ v

  50. - K  G# H: Y0 Z8 F
  51. .IF Music_Song_Total > 99- O  s# x. D8 |/ Y
  52. Play_Index_Pos      = $21AC ;当前曲目位置3 k% s9 U6 n  e# w9 u! D! w
  53. .ELSE
    ) a0 |% ?0 U8 N2 W) n

  54. 6 I9 ^( U+ |6 W# b2 m3 Y
  55. .IF Music_Song_Total > 9
    ! `% l; P% M5 y! B& k
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    0 V- W/ c. d; \9 H8 J
  57. .ELSE8 F/ I3 F, a8 T& x2 W
  58. Play_Index_Pos      = $21AE ;当前曲目位置1 g: M6 _2 y% p
  59. .ENDIF; Y; ~; f; l" |: a
  60. , u/ G) {0 K# v6 ^% L# P
  61. .ENDIF
    ; U5 F# I4 B9 D3 w7 P0 {1 w2 L
  62. + r/ _) ^6 _6 D0 m* [' I
  63. 8 W' T- \2 P4 h1 p
  64. Play_Time_Pos       = $21EC ;播放时间位置+ J. E2 S! {0 T7 l3 M
  65. Play_State_Pos      = $222C ;播放状态位置0 ^  o/ o+ ^  ?- Q/ G
  66. .ENDIF" {7 I' d2 x6 c; C
  67. ;------------------------------
    * _+ e4 K5 k7 t1 F6 {" p/ T5 T' w  @
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ' Z/ `9 z: J& a# {* U5 I6 n( u
  69. Sound_Track_Pos     = $21A5 ;声道文本位置/ k( e' w$ g# u+ Z  w
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置9 ^! |1 n* \% M- b( @4 v& M
  71. ;==================================================( Z% g  S! B' `: r- [; S
  72. Scroll_X = $00
    0 w) B$ e3 {0 k5 b1 G" `5 C/ G
  73. Scroll_Y = $06  }& L' X8 }7 o
  74. ;==================================================' P; `( ~) S9 e6 F; t
  75. RAM_Cln_1       = $0100
    & E8 A, H6 d  r) x9 j5 r' v
  76. RAM_Cln_1_Size  = $80
    ! N' S! i! e1 I
  77. RAM_Cln_2       = $00E0  s' L! d1 E0 o5 Z( T/ Y6 p, X9 z$ R
  78. RAM_Cln_2_Size  = $20  s6 g5 q8 H: I; R
  79. RAM_Cln_3       = $00E0
    , N& X! G! k1 S7 x
  80. RAM_Cln_3_Size  = $20
    7 E8 z' ~! v* b! l7 {" L
  81. ! `: k4 L: R2 q2 ~' R. G
  82. ;==================================================8 @$ A7 o( h! ]
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    9 }+ O) P" A2 b8 f- f6 h
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    6 k* T- x- j6 I
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    8 p: I4 S: T/ _0 B- u0 `
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1% J- e2 T# j0 t% [9 S0 M) x9 c
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    2 N1 E+ K* L2 R! ?( f  Q; D
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    / A7 R+ x+ N9 z$ n4 |3 W2 F' o
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加+ A( X1 c+ s% `+ A6 ]9 S  ^1 U
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    * r/ y6 C6 O. l# Q; n3 \
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存# X! r) Q/ A; I6 U9 A) Y3 Q
  92. APU_STATUS              =   $4015   ;声音通道切换
    - T4 W6 d3 C4 a. m6 B1 S
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通, ~# F7 n/ J/ j" Q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通5 b! G+ z* `8 Z+ i$ S; v
  95. ;==================================================/ s8 r4 t3 G- {* z- }2 x
  96. MMC3_BANK_CTRL          =   $8000
    ; Z& E9 u8 j% t, X2 A# A0 d
  97. MMC3_BANK_DATA          =   $8001
    : t0 h, g+ `; O$ A( O3 G
  98. MMC3_MIRRORING          =   $A0007 z+ r' F" M8 c4 L5 l4 w
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    8 [' l3 ~% G9 M* T1 l! T4 h0 t1 a
  100. MMC3_IRQ_LATCH          =   $C0006 L2 r/ z! _. J$ L* ?/ k% s8 J
  101. MMC3_IRQ_RELOAD         =   $C001* ]) |' W( z, q6 L0 w/ V
  102. MMC3_IRQ_DISABLE        =   $E000
    " p. ?6 W; R5 l6 y0 g
  103. MMC3_IRQ_ENABLE         =   $E001
    ! B4 g/ f0 G/ B* ]" B. D

  104. & ^$ M* N6 q8 C; D/ |2 K
  105. ;音乐数据块
    " g0 q& B2 D. f. R& Y
  106. $ f9 U6 U! g; A+ d" n* j5 V
  107. ;======================================================================
    - `  g7 V, Z2 [  c3 t
  108. .IF SOUND_BAR_SHOW_ENABLE# v% }! Q( L) E, `
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    3 v1 F) [/ r: u
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    . U, j3 J% @  [  d, X# B- A' l

  111. ! m$ d9 I2 A! s4 ]- D- j
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ! ?8 a/ a( \% y/ ^3 H& e- L
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    8 R* t7 Q6 `. _& v% R$ f8 [- I
  114. $ M( {* X& k% N' n( q/ I- Y- H
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    . A+ x9 o- h& J$ o1 k9 B& p) G
  116. .INCBIN "sound_bank_bar/music_data_2.bank": X$ _7 W) m, e) a! }' ?. f- R

  117. 4 M1 Q' f$ c4 M6 e9 t$ y
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    1 W5 U4 K/ L0 U# H/ L( w& y& n0 [
  119. .INCBIN "sound_bank_bar/music_data_3.bank"- b5 t9 }+ j, I( l$ [$ r

  120. / o  m$ d4 ^+ T
  121. .ELSE
    2 z1 Y3 j4 o$ J1 f( `3 H
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    # k. F, f+ ^* A' \  P( w
  123. .INCBIN "sound_bank/music_data_0.bank"
    2 u6 H- `' m; @7 c7 k3 g) I
  124. 5 U/ [! N6 R# {3 j
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    6 C; g( [+ d1 |# }8 ^  M  z1 k. B
  126. .INCBIN "sound_bank/music_data_1.bank"8 M5 O: @0 J8 Q% [+ E8 l
  127.   @7 M+ M* d' m
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    9 Z2 u2 i7 `2 C$ F8 Q1 k: l
  129. .INCBIN "sound_bank/music_data_2.bank"* m$ U1 `* x$ |; Y/ N

  130. 0 X  e, T- _) v+ f
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK3 M: l! n) u  F: a% `& Q( e- P
  132. .INCBIN "sound_bank/music_data_3.bank"1 G2 D" l' I- e4 D: r
  133. .ENDIF  c2 I  {, ~' r: J4 w" q

  134. 6 w  m4 i' q3 z( E% G: k0 q
  135. ;CHR图形数据
    3 a; {) z0 Q0 y- x4 e
  136. ;======================================================================. o* H9 ~9 V7 S+ ]. o. B. C
  137. .BANK CHR_DATA_BANK
    4 n7 m( d# c) S; F, F0 ]4 \% {  ]
  138. .INCBIN "chr_bank/chr_data.chr"
    / w- Y5 h2 e( I3 i1 C6 Q3 M; y7 `& M
  139. 3 A/ R' Y- v8 c5 }
  140. ;==================================================
    ) ^5 r3 W3 k; C- R5 M
  141. PPU_Addr        = $0300
    ' P3 x2 J* P: V7 M' X' d
  142. Palette_Addr    = $03C0
    6 ]$ n  \9 i/ A
  143. Sound_Bar       = PPU_Addr+$E0( F7 U6 a& Q0 m3 `" \
  144. ;==================================================$ |4 `8 n; D& S% z. @. y
  145. Palette_Update_Addr     = Palette_Addr+$0D& K% q$ r' U# ?; T" i
  146. Palette_Update_Max      = $2C7 [+ z6 O9 d) F" I& k% l9 [$ f6 {
  147. Palette_Update_Min      = $21
    : s0 [# W! K7 W# O
  148. Palette_Update_Interval = 603 y- ^# N% t4 x* f: `
  149. ;==================================================
    ! o# F0 r0 Q0 p- \5 h% Q
  150. Sound_Bar_Cnt       = PPU_Addr+$F0+ P& d6 o) w" _  h( k
  151. Screen_State        = Sound_Bar_Cnt+$01
    6 A* L" |( v6 y: d4 t- F3 S
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    % K8 r, Y4 ~8 D; t2 a2 p5 L( M
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    6 f  g6 Y+ ]4 _& {! d# d% l  H# _
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    1 {; [& p) h0 \- o* k8 }
  155. ;==================================================3 F9 C8 K. `/ t# t! q1 w6 t# P* V6 g
  156. Data_L              = $70/ c  G9 |6 k- u2 q- z' O
  157. Data_H              = Data_L + $01" ^5 I' }: N& x! c' f3 b$ u
  158. Data_Cnt            = Data_L + $027 Z: r6 Z' D' r/ g1 A. j% b# V2 U
  159. Data_Buf            = Data_L + $03
    4 N2 R6 V. O" P+ Y% Y- V0 y$ Q
  160. Time_Wait_Cnt       = Data_L + $04
    , n) F! @9 w% P# E/ x' g8 B
  161. Palette_Wait_Cnt    = Data_L + $05
    ! N& Q  q( }/ N4 u& {0 g
  162. Palette_Update_Flag = Data_L + $06$ }; |, W, B, m3 r1 ]/ F
  163. Show_Track_Name     = Data_L + $07
    . |6 J2 I, m4 G9 `( w) W
  164. ;==================================================
    & z: m0 E+ D& t+ e2 j3 J
  165. Key_Keep            = Show_Track_Name + 1
    7 @0 V- @" H# I" t0 r, R  G, |
  166. Key_Once            = Key_Keep+$01- K: P2 P* a; W/ q2 k, m
  167. Key_Kemp            = Key_Keep+$02
    7 {8 F0 M; X8 M) _
  168. Key_Temp            = Key_Keep+$03# d! l4 m% l9 b( b, _. R$ Y
  169. Key_Getv            = Key_Keep+$04# s; Y8 ]0 W$ \# ^' A/ Y: _7 Z
  170. ;==================================================1 G/ l! ?6 D" S+ C/ N8 M
  171. Music_Cur           = Key_Getv+$01
    ! F, d2 ~: _: k) {2 ~5 O
  172. Music_Last          = Music_Cur+$01
    : n0 i% k3 W7 i$ I
  173. Music_State         = Music_Cur+$02
    % D3 L" r/ m4 |6 K& i) c
  174. ;==================================================
    ( x  w9 X' o& X0 C7 O
  175. HEX_Data            = Music_State+$01
    # i0 \5 N) ?& o2 L& D
  176. DEC_H               = HEX_Data+$01
    0 n# o6 u9 e. h# [9 H
  177. DEC_T               = HEX_Data+$02; H8 y5 {' Q3 {' e$ g" T% u! ]
  178. DEC_L               = HEX_Data+$03
    . K% A+ J  d) G: y/ P& F, L
  179. ;==================================================
    6 J+ z* h, q$ M# l6 T
  180. Time_S              = DEC_L+$01, D1 G3 A; }9 V' \
  181. Time_M              = Time_S+$01. _+ r" k( C) {% |
  182. Time_H              = Time_S+$02' @. t/ P) p. k! O
  183. Time_Cnt            = Time_S+$03
    ! W- l1 O8 ~6 d) i, K' H7 J1 H
  184. . M# I7 P& X" F8 t5 C1 g; J
  185. ;==================================================4 t0 L4 |' P6 e1 z1 w) X, Z  Y
  186. Music_Bank_8000 = Time_Cnt + 19 P2 W3 z, c$ b1 ~4 p
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    5 ?+ t/ Q; J; ^4 x  w
  188. ;==================================================( s1 l8 n! r5 L- x
  189. " Y! k6 m, C+ q, }
  190. ;======================================================================. S5 E7 a" C) K8 c
  191. .BANK PROGRAM_BANK
    0 O  K& v" a: n+ d* b1 H
  192. .ORG PROGRAM_ADDR# d+ `% s2 A& @0 }
  193. - \. ]& E& L& ?' T3 {1 w
  194. ;==================================================7 A& s# e: S7 v" Y* {
  195. NmiProgramProcess;NMI中断程序处理) F3 }# q0 p4 t" Q+ k
  196. ;处理PPU图像
    & m+ N  u$ \9 X8 q
  197. JSR PPU_Proc
    3 U+ h3 M! v9 l$ z3 g6 K6 B
  198. : g3 C1 n9 M+ i# Z8 x
  199. ;启用NMI中断
    / q0 T. `$ W" T9 v/ I) H
  200. LDA #$804 ^# n3 ]8 B; n& P; C
  201. STA PPU_CTRL5 Q* d4 q* ?5 B0 T9 W
  202. : K, x! x4 [$ c3 Y8 {5 B( ]  e1 q% }
  203. ;更新调色板5 r1 |; l# G0 A" v, }
  204. JSR Update_Palette_Data
    ! s+ L  p! o# x6 |, f
  205. 3 ~  [: I/ W8 j
  206. ;显示时间(缓冲)2 c' h# [5 P% f8 z) a! Q
  207. JSR Time_Show% L( G/ ?% z6 z9 A

  208. & J! O8 R: Z4 c
  209. ;播放计时
    9 s% y4 L/ Q/ r- L. V. C* L: b7 c
  210. JSR Time_Count
    ( [$ p' ~$ l: ^( X# h" N7 J2 E. i
  211. ; P1 H; |2 ^( m' K. X; L
  212. ;播放声音! j4 g4 K: |- d: a2 [$ V1 u) p7 s
  213. JSR Sound_Play& c8 ^( ^, W. A" g* J
  214. " X8 }4 c! m: Z- t; A, }6 V3 N- }
  215. ;切换音乐(手柄触发)$ i( k5 k3 [& H$ G
  216. JSR Music_Switch
    & r$ a7 }" ~. F' `6 G% m

  217. ) G$ V  s: S, o5 w* A+ r7 S1 W6 `" {
  218. ;音乐显示(缓冲)1 x; B6 `6 R5 e; l4 n, `0 d
  219. .IF SOUND_BAR_SHOW_ENABLE
    " J& |% W. @* k6 u
  220. JSR Music_Vision$ p, w. R6 k  C& x
  221. .ENDIF
    , ^) A" K, {, h. V8 g9 s& J
  222. $ e$ [' I/ T. k$ L2 s
  223. LDA Time_Wait_Cnt
    : \: o: ~1 m" F- n
  224. BEQ NmiProgramProcessEnd, k) Z- g% _, A  G
  225. DEC Time_Wait_Cnt& v% k: u- m- X8 }% I  b
  226. NmiProgramProcessEnd6 a4 M% ]6 _4 H, _* k" K- [
  227. RTS
    # a; {, ?( J, H# j; B0 Z' {- G

  228. 6 H; d' A8 @" n0 H8 M9 t8 r
  229. ;==================================================
    % h* G( ]) P. @9 Q$ X" u4 A, ?
  230. ProgramBegin;主程序( a, |6 X2 c+ e
  231. LDA #$00
    * _; p  v9 Z) j2 q8 C) G2 ]& O
  232. STA PPU_CTRL
    6 Y" W4 ?3 m3 q( f, p
  233. STA PPU_STATUS' V3 R+ p7 J4 Q
  234. STA PPU_MASK' W$ y9 c& \- `; e. U' z! W
  235. STA APU_STATUS) f  A2 {4 I- a" i
  236. STA PPU_SCROLL
    " d; {4 x( h7 z1 ^+ p2 _
  237. STA PPU_SCROLL4 X+ \* g, M: t; K' Y
  238. LDA #$C0) U- N: B0 A) I$ N6 L  t
  239. STA JOY2_FRAME& M1 {; }4 j/ n+ O
  240. 1 K8 Y5 M2 P7 {3 I5 F
  241. LDX #$FF: U  _3 h4 c# `, V0 c
  242. TXS! e, h( I1 N9 }2 h# m' Z) x
  243. LDA #$00
    " ]' Z8 l5 e4 f8 [2 a) J3 ?7 O! w
  244. STA PPU_CTRL
    8 U- e/ n& S& x6 ]1 }; A* ?# P
  245. STA PPU_MASK- ?- j. P: d' q! S- t
  246. STA MMC3_IRQ_DISABLE0 }- r( a1 X2 k4 D, d+ k: @' G

  247. ( K( D1 [4 u7 F9 Z8 s! A
  248. ;==============================
    , l8 c# ^+ x; k" W
  249. ;调色板清空7 d3 w. C6 m. z1 w% W7 b' ~
  250. LDA #$3F% X+ ?2 z( K6 c8 ?
  251. STA PPU_ADDRESS$ @' d  `4 I: `1 S8 E# V- W4 O
  252. LDA #$00
    5 p3 M+ S. a' _1 N8 U' h! i1 g* t
  253. STA PPU_ADDRESS
    8 h9 h6 }0 m' D$ C( s: g3 W( n) f9 T
  254. LDA #$0F* i) O( _' [" L6 [9 n; H, {: s
  255. Palette_Clear" F- W+ g7 W! u% S0 W' J- |
  256. STA PPU_DATA  Y4 C' A( g# d' K( {
  257. INX7 S9 S" J+ s: F% S
  258. CPX #$20/ ~+ F% K# o; l7 ~
  259. BCC Palette_Clear. S# M& k5 O. D) D' O
  260. LDA #$00' _2 {3 l' I) g4 i2 e2 Q
  261. STA APU_STATUS! R0 T+ {( l! W6 ?( G6 `# R
  262. ;==============================
    3 d- V% _+ |- Z$ W( i& @: K+ U7 k( Q3 i  S
  263. ;初始化背景调色板
    $ D; M+ t! i0 e5 ?: L0 C' L1 U
  264. JSR Set_Palette_Color
    . {* p$ N- H6 _' a) l
  265. JSR Set_NameTable_Attributes, @6 P2 y5 ?! r/ v' _! R" z. y
  266. * i3 Q' U; n6 I; N$ H* s" L
  267. ;==============================
    2 u4 n1 W% P8 p8 J5 l3 }* `
  268. ;RAM初始化
    ) ]8 W9 H+ C8 g/ g2 R
  269. RAM_Clear_All4 U' K" ^, D! }! G* f# x6 q, c
  270. LDX #$00
    * N3 o6 H/ ]: k
  271. LDA #$00
    4 D/ N9 i# G% X. V$ ^# E  d8 p
  272. RAM_Clear_All_Start
    / Q, h* ?4 u9 b/ U! @: r5 M( I
  273. STA $00,X
    9 L: O% H4 A' e2 U6 R9 V9 g
  274. STA $0100,X
    $ N# I' C+ o5 @6 Z
  275. STA $0200,X/ h- u1 R# U( A* n3 u# T. _
  276. STA $0300,X, N6 G3 v: x1 r" a9 U/ z9 H+ |
  277. STA $0400,X
    $ g! O6 }% ^* O) ^# M# o% S
  278. STA $0500,X
    * B( Q4 g" K2 v! M2 x( \
  279. STA $0600,X7 h' u9 m' s1 G4 }/ [. ]
  280. STA $0700,X7 W( U# E! A' E6 H% o. u
  281. INX
    0 x" J9 A+ P/ g* b
  282. BNE RAM_Clear_All_Start" k- P0 D7 R* G8 A0 N

  283. " D: g: Y, u& k0 S3 I0 {5 `7 L* p6 E7 D
  284. JSR VramInit! X/ w7 I+ G  }: Q  P5 L- p
  285. JSR Init_Palette_Addr
    " ~+ ^: n0 k; t1 |) w9 |

  286. 5 M( K9 R( V. w( V9 b6 y5 u& f) ?
  287. .IF Music_Reset_Addr
    - _: n. Y& Y) O& y  ?# q- t: I
  288. JSR Sound_Reset
    : j9 J7 J6 S. e! q
  289. .Endif
    0 F! f. C/ p2 j) ^
  290. 1 r7 C2 {% \/ e( s+ [2 @
  291. LDA #Music_Start_Song-$01
    6 O/ c' R& A' b# n% D$ `
  292. STA Music_Cur2 v  U+ `) U$ O
  293. 7 t4 m' c. O4 J8 X1 r9 }
  294. JSR Show_Music_Text4 p% {* Y$ ?' N  e" b4 M

  295. 2 z* Y* Z0 o- @: t" X& R
  296. .IF SOUND_BAR_SHOW_ENABLE0 A" Y* V2 @5 a, u
  297. JSR Sound_Bar_Text_Set
    ( ~% \7 @- Y( N6 F1 e+ h) a% }
  298. .ENDIF
    3 ~$ s* K1 l  J9 n

  299. $ s6 |( m$ g7 h# j! c0 M
  300. .IF Track_Name_Pos! M9 U: A$ w- b" o
  301. JSR Show_Track_Info" A5 g- P; S, C9 m1 |. J
  302. .ENDIF
    - b0 _( r$ l/ t+ n- W* a7 F- ]

  303. 2 n+ {  h% M1 ^9 M1 o3 W' f
  304. JSR PPU_Proc
      k6 k' r6 n- W% u' |8 x  g$ F! |

  305. " P9 W7 |# Q- k
  306. LDA #$0E
      O& Q9 x; d, s
  307. STA Screen_State# O0 a" Y0 G- ^

  308. $ K% T0 d& @8 A# t
  309. JSR Sund_Bank_Init
    6 J/ ~' J- r5 u
  310. 5 _! J+ U+ a& ]. K
  311. JSR Music_Show
    9 V8 c9 E, F( K. f0 R2 n5 U
  312. JSR Time_Show
    % a/ w" X. p5 H! L! i7 K
  313. JSR Music_Stata_Show. Y" F3 x: {1 f- N& ?. }
  314. JSR Time_Delay/ f2 M6 T1 ^+ [- C! X

  315. + ^  j) g1 E3 H# |7 U/ d

  316. & B& b' |3 [. s7 l& E, S
  317. LDA #$80
    , ]8 t+ q% {- n& F  H3 e
  318. STA PPU_CTRL9 x. x1 z0 Z& x7 t$ V" x

  319. 0 L7 u  M  S4 I4 ]' l
  320. LDA #$205 M- n5 R& A5 G" y
  321. STA Time_Wait_Cnt
    6 W' q7 Q  p/ ?
  322. . [5 h- Z) M5 o5 |: N+ C
  323. Wait_Time_Over% F$ B7 b9 ?5 H/ S
  324. LDA Time_Wait_Cnt7 k  V7 ]3 s' j) }, r; n' P4 a
  325. BNE Wait_Time_Over
    ! w' ^/ L' D9 s# @2 i, B" q

  326. + z: M% R1 S" a, Q! g
  327. LDA #$1F
    # P. \( v8 h( G& l4 a  Q
  328. STA APU_STATUS; J' d0 ?% O) [
  329. LDA Music_Cur
    5 L, ~8 d5 t  \0 m: [
  330. JSR Sound_Init9 e; d' ]: o7 Z8 t4 O
  331. ) K! G: k: R) n( n! j
  332. JMP MainLoop  g  k" f; N2 p. H

  333.   J3 p4 G4 `' ?! `
  334. ;==============================
    1 t) g1 s1 z, a" @: c
  335. Time_Delay;延时等待
    6 v% ~" n6 w8 ]6 e8 m( m. Z
  336. LDA PPU_STATUS
    6 k! r$ i% u6 p( G' j
  337. BPL Time_Delay
    0 [2 H4 ~7 v  R4 b. Q8 X' ~
  338. RTS. U  U5 o8 q0 @: x

  339. " o  @# z) c" `! O( n. I
  340. ;==============================7 F, I* d& G0 Y8 C
  341. VramInit;初始化图形内存
    / f& l4 c# v% H5 O# u) ]
  342. LDA #CHR_DATA_BANK7 s4 I* U, t7 P
  343. JSR SwitchBankA000# J7 S6 y5 Q- U. Z3 F
  344. LDA #LOW(CHR_DATA_ADDR)
    2 ^# o. [# V$ |& I4 k' j! `
  345. STA <Data_L
    0 r& X* W% ?% {4 n/ c% [
  346. LDA #HIGH(CHR_DATA_ADDR)
      u6 G( K, [6 }% p* a6 G" s
  347. STA <Data_H
    " Y1 w6 b4 K/ d$ I9 T
  348. LDY #$003 q! a1 i! G5 k8 D4 B8 R8 q7 P
  349. LDX #$20# K# p  n2 u) Y
  350. LDA #$00
    0 p% v, b  R2 L& j" V4 N0 e- h
  351. STA PPU_ADDRESS! s5 w! s* P+ ^% |. n  n- ?5 ~
  352. STA PPU_ADDRESS! b+ n8 m" ^- j1 `! u4 u) J
  353. VramInitWrite! f0 Z9 I. D5 z
  354. LDA [Data_L],Y
    8 c! c7 a- D7 m2 ]; g) w
  355. STA PPU_DATA
    " l/ i$ g0 x6 T; F9 e% `7 ?4 `' B
  356. INY. L5 u9 l3 L3 w6 R! o5 V
  357. BNE VramInitWrite" v+ @$ \8 V' C' C3 q# B1 R
  358. INC Data_H: K1 q, V; E5 _- j
  359. DEX4 C7 |9 D$ f0 j% U* `0 {0 T
  360. BNE VramInitWrite
    8 L; O  A* d9 I
  361. RTS1 Q& L9 j/ H! w8 h( V* K
  362. % ]% A8 t% x' V( \
  363. ;==============================3 I. }! |, Z* M  B* l8 F
  364. RAM_Clear;RAM清除
    ! J/ Z/ F) `% X: X$ @7 K! ]
  365. LDX #$00
    ; y6 `. k4 S; j7 k4 G
  366. LDA #$00
    ; V1 s6 ~  u1 }: x  f
  367. RAM_Clear_1
    ( D3 W! B7 I4 ]% t: `' b9 k
  368. STA RAM_Cln_1,X
    / x7 e9 L2 v' Q8 u/ k
  369. INX1 S% h; P! _5 U7 q) c* @
  370. CPX #RAM_Cln_1_Size
    4 L% c* K' _, s
  371. BNE RAM_Clear_1
    1 S7 o) b* D) z8 }  m
  372. LDX #$00
    2 _) s/ J/ ]" A4 y/ G0 _7 h9 V* H
  373. RAM_Clear_2
    ( Z) v: E& I  w! K) ^( Z* e
  374. STA RAM_Cln_2,X+ W. s$ l- Z2 A( s+ e, r% y" G
  375. INX
    9 S) _' {2 O1 Q; k0 |
  376. CPX #RAM_Cln_2_Size( i: u6 e( x" a$ c4 i
  377. BNE RAM_Clear_29 i6 m7 z) |5 [8 \
  378. LDX #$00" v) N6 C* K/ n
  379. RAM_Clear_3
    1 y2 g. ?* ^0 i2 z/ H, ]
  380. STA RAM_Cln_3,X( f( L! P( ^& i# N% d* T
  381. INX' v3 b9 t( h* _: T: q  ~: {! p
  382. CPX #RAM_Cln_3_Size
    & A# s4 e9 T* V" G% Y1 u3 h
  383. BNE RAM_Clear_3
    % C0 k  q4 f! x2 M# F/ O6 H# [
  384. RTS
    ' w. Q6 c* n9 A8 s

  385. 7 d! {8 G0 N2 t$ q9 O
  386. ;==============================8 j. b0 `5 C$ Z3 Z1 ?
  387. ;音乐切换
    % ~3 ]. B3 u( u! W0 W0 Q
  388. Music_Switch
    % I3 n; j, E  \! p0 P3 M4 c$ M9 N
  389. JSR Key_Proc& q7 {) M4 j9 k! j6 u! O
  390. LDA Key_Once3 [  V2 [0 T" H3 z* l) |
  391. CMP #$10
    ) e7 z5 Z/ p& V3 h/ u
  392. BNE Music_Start_SongStop5 Q" d) }+ T1 E) s! Z# B
  393. JSR Music_ReSet$ e1 i' y' ~0 a  _2 y
  394. + U/ @* v+ L# |$ b- P* q, ]
  395. ;音乐停止" [2 S$ K" h; _& Q6 _8 F( m
  396. Music_Start_SongStop
    & {! I' N8 B" ^+ K
  397. LDA Key_Once
    6 f0 t5 a1 H, L6 x' o/ ?
  398. CMP #$206 r2 a" T) J. z0 w) @8 j/ J: K
  399. BNE Music_arrow
    7 r1 V" }- G# L8 r1 c* y. ?
  400. LDA #$01
    # b& l( \4 E5 L2 F4 |
  401. STA Music_State
    - N' q! _2 Z5 c' ~3 a& x1 l
  402. JSR Music_Bar_ReSet( T" v: ?5 q6 ~4 @
  403. JSR Time_ReSet; P3 U, e/ S0 O: J* K6 g: m% c+ @6 J
  404. JSR RAM_Clear) m4 |0 T; `  X* H2 ~% `
  405. JSR Sound_Clear  r- |+ `. T8 U9 l
  406. JSR Music_Stata_Show! b- r7 r* \3 k) Z
  407. Music_arrow4 s8 ?5 _9 ?; Y/ ]
  408. LDA Key_Once
    . [7 D8 I* V. r- L! e
  409. AND #$CF* V8 |6 _- e0 \
  410. BEQ Music_Switch_End& L) g% R+ v4 Q, v6 o0 j) u
  411. JSR Music_Number
      E5 R1 P1 g- w6 s3 f- U$ z/ W
  412. JSR Music_ReSet  W$ a. X" f; f% Y; _2 D1 [% T5 f
  413. JSR Music_Show( T3 n4 u5 U7 H$ y
  414. Music_Switch_End
      s% C( n' p$ k6 J9 f
  415. RTS
    # h0 L: w) N! Q+ D' p5 t

  416. 0 {7 q. v1 O( ]# a# K4 e" ?* Y
  417. ;==============================0 m% P+ W5 m6 ]0 `1 c1 o1 `
  418. ;音乐曲目切换
    1 z8 w+ x: e/ y: F6 u( P$ z
  419. Music_Number
    $ p8 e5 P5 }* U4 L6 y  X
  420. LDA Music_Cur% p8 F9 [( z+ z3 o8 ]
  421. STA Music_Last1 ^+ r. M1 r# C- W# r% W* ^) J
  422. Music_Decrease% T2 ~/ L' B. G5 N9 [
  423. LDA Key_Once
    $ D( @) B9 U# D1 g) F
  424. AND #$42
    ; S' W- {1 H+ m6 R( E4 J! y2 \7 z3 h0 F
  425. BEQ Music_Increase$ Y" h9 e; ~- D- C: Z- N% H
  426. LDA Music_Cur6 L; M2 X; _0 D! [
  427. BEQ Music_Increase. f2 ]9 H8 o) F6 I! v/ |1 K
  428. DEC Music_Cur' B4 }2 B, r8 ~8 R5 ?  g
  429. Music_Increase, U+ _* W9 M7 _
  430. LDA Key_Once
    1 z: Q) H" [; d  {8 @$ I
  431. AND #$81  z2 u- k9 w  y2 {# Z. b
  432. BEQ Music_Decrease_10/ i6 s' d: G) M+ K$ @
  433. LDA Music_Cur! O) ?+ q# T0 f
  434. CMP #Music_Song_Total-01
    & l2 i7 O, I5 I: a% w; D& N/ }
  435. BCS Music_Decrease_10
    ' g$ r8 O# Q6 s, y( Q% r- b0 A$ m
  436. INC Music_Cur
    - D% s" j+ m3 i3 p1 Z* S
  437. Music_Decrease_10
    + \* p6 |; d9 I
  438. LDA Key_Once2 m8 w1 r8 ?% y2 ~
  439. CMP #$04
    * t! g' @  G' J; d0 A
  440. BNE Music_Increase_10
    " t& L6 e& n2 O
  441. LDA Music_Cur
      Q. m; @$ }% R. V1 v# a
  442. CMP #10
    6 \5 y" f' A2 s" P/ i
  443. BCC Music_Start_Song_Min
    9 F6 r& E7 @: `( R
  444. LDA Music_Cur
    1 [9 U' c. o8 q
  445. SEC
    9 `( Z5 F5 G6 n5 H) r
  446. SBC #109 p! G. S" Q2 q. h7 @, v* Z: a
  447. STA Music_Cur$ E3 X( d2 t5 G  Q' l2 \
  448. LDA #$00$ O! N$ D; k1 T2 f
  449. BEQ Music_Increase_10
    " Y. L+ m# `0 ~5 r" \. g: m2 `
  450. Music_Start_Song_Min
    + e, U( `& ^* X. d. n  Z& D7 d3 X
  451. LDA #$00% u$ b" ]  r& q% m+ o* e
  452. STA Music_Cur
    1 ]/ A& W% w7 ]6 w' N1 T
  453. Music_Increase_10+ P/ ]2 ^) X$ J" |
  454. LDA Key_Once
    6 N% r1 M4 D' a
  455. CMP #$08
    . x- B9 u8 U; B0 h. b
  456. BNE Music_Number_End2 Z9 s$ t( D% j5 X& @9 e; ]
  457. LDA Music_Cur
      N& P( j' I; a" E" v% s8 y, l
  458. CLC
    : O) E# B' I* r7 ]: F/ i9 o- c
  459. ADC #10
    ) S- r& T/ D  @7 A0 G6 S! k
  460. CMP #Music_Song_Total-017 i+ [4 W# m3 a' E* y
  461. BCS Music_Start_Song_Max" X/ n  M$ g% K7 {3 Z0 \6 L* K! j0 y- `; [
  462. STA Music_Cur2 r5 z# }8 M8 K, x& s' t
  463. LDA #007 J: O. Q( |. u3 }1 L
  464. BEQ Music_Number_End0 J/ I0 ~2 V  H/ u* R$ k0 J
  465. Music_Start_Song_Max0 G. J. M; K: H: m6 w+ d
  466. LDA #Music_Song_Total-01
    ( m4 g! L/ a" q, Y
  467. STA Music_Cur( x2 U. c8 N6 B5 V& f0 e
  468. Music_Number_End
    0 ~! V# @1 ^- c- |/ L# ~
  469. RTS
    , G! n5 B! I+ B1 ]8 y; a5 _; w9 T4 v

  470. 8 v2 ?' [6 v* k% Z9 y: e  l7 ?* B
  471. ;==============================$ ^6 |5 [) U' s3 `! c
  472. ;音乐重设, ]  z7 `- k7 s/ ^9 R  n
  473. Music_ReSet
    & G2 k/ F$ t7 U9 t& F$ V, z" Q
  474. JSR RAM_Clear
    ; P+ L+ I6 ]& M' o6 S/ x
  475. JSR Sound_Clear5 b6 j! y  I- u- A- q+ K
  476. LDA #$1F
    & r& \% u. X( Z8 ?
  477. STA APU_STATUS, O( X4 Q" J& a1 K/ }
  478. LDA Music_Cur
    6 m2 F  L, E' O8 g
  479. JSR Sound_Init; e+ Z4 Q$ n. j# q" M: e7 O
  480. RTS
    , Z& D9 N" Z5 l2 g& r2 `, v+ X

  481. $ [6 E, I& W: q5 J7 i# A* R
  482. ;==============================
    # ]" P& b( D7 @" h( v
  483. ;音乐端口清除0 d1 C- {+ c7 R# s
  484. Sound_Clear; i) K* W0 R2 Z# g
  485. LDA #$00
    . n: Y* _0 ?) |4 q
  486. STA APU_STATUS+ D3 q: j5 V6 H& H
  487. LDX #$00' ]1 P- u/ H6 A: U$ F
  488. Sound_Clear_Start
    ; V3 n( P7 d# r2 @1 u) ~
  489. STA $4000,X
    1 @5 A0 K; V2 K) l8 d: a% ?
  490. INX1 j2 [5 }; l' ?. w7 C) m9 B. \
  491. CPX #$14
    3 K7 v: X# b+ F- O' Z' [
  492. BCC Sound_Clear_Start; l- W/ u- w9 P: ^- m
  493. RTS
    " b$ D( [$ _% X6 U9 k* l1 `
  494. ) \* B9 M$ o4 H8 {
  495. ;==============================
    ' Q& ~% \6 g1 K8 p- M( n" R( V  Z
  496. ;按键处理
    * [/ v/ U) q. z# v' C/ s
  497. Key_Proc; ~; B4 O) d6 e, j* m
  498. JSR Key_Scan
    + K- e: b1 h! d. C. o- K
  499. LDA Key_Keep. z% c* u6 b% P5 j1 K+ d- J8 l. `% i
  500. STA Key_Temp% v) v8 ~) I# p$ P$ O" e
  501. JSR Key_Scan
    % b* L. O* a% s& G/ n. c$ \9 d- O
  502. LDA Key_Keep7 ^2 S; _6 Y" c& v" `! N+ i0 D
  503. CMP Key_Temp( w" [% _3 e, U( j+ `5 A
  504. BEQ Key_Get_Once
    3 v0 q. L: p  Y5 x# f+ f6 z
  505. LDA Key_Kemp$ _1 b- z" \% g
  506. STA Key_Keep, ~* x" O! j2 q7 b
  507. Key_Get_Once
    1 E8 Q" J+ g) U
  508. TAY, T: X4 I8 a+ I1 y! j8 l
  509. EOR Key_Kemp9 l2 q5 ^: S7 n3 k: o# n
  510. AND Key_Keep
    ; E% Z! X! y' L' O" x6 I
  511. STA Key_Once; ]6 Q% q! ]1 c$ I5 p( \$ W$ F
  512. STY Key_Kemp4 |; R: Q' C% v7 ?+ C
  513. RTS3 z, p2 ^+ \* c
  514. ;------------------------------
    7 z0 [6 @- R( q# W, ?9 M1 p7 T
  515. ;按键扫描0 `& p  o7 F1 s, k; Q
  516. Key_Scan; M2 B( [  J! h( Q' k# W
  517. LDX #$01' L$ F1 |/ ^5 H) U! C  m3 X: `
  518. STX JOY1_FRAME
    0 {+ n. j' X/ k& F7 h
  519. DEX
      Q; y  {  H1 h! A- B; K6 k: N
  520. STX JOY1_FRAME
    & H3 k; U' x: U# x: B* S2 e
  521. LDX #$08
    $ a( y6 ]" |( V! c1 O
  522. Key_Value+ J) U% B2 W, I% d
  523. LDA JOY1_FRAME
    ! L4 U' r4 F; R( y$ U
  524. STA Key_Getv
    5 ^4 _6 w4 i8 e3 i: [- h
  525. LSR A
    / g! {# x$ V3 `" A6 `* q
  526. ORA Key_Getv
    - _0 N# v4 R, V) h" @( R
  527. LSR A2 y/ s0 d1 F0 J8 R  A) M, v
  528. ROL Key_Keep
    ; v& v2 s! J9 ?3 A* u
  529. DEX
      _& h8 [$ z5 E: H
  530. BNE Key_Value
    ( _" m' J! L( w# N. A% K4 |5 N
  531. RTS
    ( _' g: ~" `+ I- b9 c
  532. " `0 N9 g$ R3 C. ^2 G
  533. ;==============================: F) {/ X) d: v* s' B  l7 G
  534. .IF SOUND_BAR_SHOW_ENABLE: l# ?& }' Y1 j$ M& t
  535. ;音乐条显示
    6 S# H# w# o6 \( q9 w0 J3 e
  536. Music_Vision5 i5 r2 a- p$ r
  537. JSR Music_Animation
    $ S' ^/ [8 v4 E3 k# |
  538. JSR PPU_End
    7 S* F; b9 f/ y1 N
  539. RTS& z8 f+ T8 ?2 J# S
  540. ;------------------------------
    6 A1 E; L' V/ q+ S9 h  H
  541. ;音乐条显示处理
    & W+ U9 b; ~- m4 I+ M: N3 v+ F
  542. Music_Animation
    ' ?! A4 ?( X4 X" g+ c5 i
  543. LDX PPU_Cur
    . [9 n/ H. w  Z+ O" R
  544. LDA #Mode_Line
    . p& n" h# d3 }4 V1 @' {6 M
  545. STA PPU_Addr,X/ `2 r: l% {/ l( r7 H! @' \0 j
  546. INX8 O6 p) O- Z, ?% S2 j$ P
  547. LDA #HIGH(Sound_Bar_Pos)
    2 L1 R' k% j9 h3 t
  548. STA PPU_Addr,X
    ; O, u" n/ w9 a- \
  549. INX; k. ]5 y4 ?  X0 q
  550. LDA #LOW(Sound_Bar_Pos)
    % J+ I. A, x5 }5 {
  551. STA PPU_Addr,X
    & I* a1 d, `& B1 c9 D
  552. INX
    / }. I8 [( s0 i6 u# s6 S
  553. LDA Sound_Bar, |" R: M1 E- J5 ]' J+ J
  554. JSR Volume_Convert
    5 A: E" G8 m! k
  555. JSR PPU_Return
    4 `- a0 a  g' \0 Z6 y* n' {
  556. LDA Sound_Bar+$47 b) o. L+ Q4 e5 S$ B1 b0 W! S
  557. JSR Volume_Convert
    - q) N' B3 @; n4 J; e4 T+ T) e' ?
  558. JSR PPU_Return+ c) N1 _' M7 A
  559. LDA Sound_Bar+$8
    ! l! O% g) z% x7 p4 d! e- H
  560. JSR Volume_Convert_Ex
    $ V1 O; }9 @, U+ V' n; G$ Z% F
  561. JSR PPU_Return
    9 t8 j$ l6 ~! W- P: D* I& y9 R
  562. LDA Sound_Bar+$C
    ( k9 n& E! ^- T; G: y
  563. JSR Volume_Convert
    ! K3 p  k' b0 A5 q" Q
  564. JSR PPU_Return' R4 t% L! J$ x
  565. LDY #$10
    * D0 @, k3 ], c9 f. B
  566. LDA APU_STATUS
    : R- q+ h" v6 e$ t- j* L# k
  567. AND #$10
    ( c' z+ a! R* {( w2 l3 y
  568. BNE Volume_Count
    6 h3 ~5 s% s$ G
  569. LDY #$00
    4 ~5 Q/ f/ v5 P, T( |
  570. BEQ Volume_Count
    2 t$ ]. ^& w! h& X7 D0 M; k
  571. ;------------------------------) a! Q; U: g3 i0 E5 E0 R7 I& w3 }
  572. ;音乐条处理
    % D% k8 {" n, u$ p1 F& J
  573. Volume_Convert_Ex' u1 W, S" z/ C7 o! F
  574. AND #$1F
    4 o/ c, u8 `8 |% A2 t
  575. TAY
    & s: x# H8 `  X" Z
  576. BNE Volume_Count* C# q' J2 S" X! Z) b9 b+ k3 ^) B
  577. Volume_Convert& _/ Q' A( a* ]
  578. AND #$0F& P; P* E+ c" B5 s* M' t' N
  579. TAY* m8 ~, P. P( v: q9 L! j
  580. Volume_Count9 \% O7 k$ M- a5 Q: ^' P
  581. LDA #$08
    + B6 g" P5 E: L/ I2 Z
  582. STA Sound_Bar_Cnt
    0 e0 [& e$ X: v0 J" I
  583. Volume_FILL
    * d; i$ u8 ~: L9 |9 }
  584. DEY6 L  X$ K0 \+ g- [" i
  585. BEQ Volume_Half
    / ~. B9 n* J& D' ^8 }2 Y$ l
  586. BMI Volume_Empty6 O2 E0 K3 v3 L: u, T" x
  587. DEY
    1 ~# i5 k: l/ b; G
  588. Volume_Full4 T/ \- S& R6 r* F- B+ B
  589. LDA #$16) @7 d" X0 Z  Q) c; \
  590. BNE Volume_PPU
    $ L/ A& J4 Y% S! ?" e# Z4 h8 l
  591. Volume_Half
    4 r) Z! A5 o1 q$ B0 C
  592. LDA #$15! i/ {& M2 K8 E) k
  593. BNE Volume_PPU
    ) k; [# k. v' T$ L$ K
  594. Volume_Empty
    ; x# f% D& m# n  Q1 m: |
  595. LDA #$141 W6 M8 p1 m, `5 F
  596. Volume_PPU
    1 x/ W0 N7 P- X* U
  597. STA PPU_Addr,X
    / S9 i+ C# Y' m
  598. INX) C5 I! P8 W: ^. f
  599. DEC Sound_Bar_Cnt
    : i- a3 l) V. i. [* N
  600. BNE Volume_FILL
    ( t$ ], c# {8 @& d. g9 Q3 _; b- r+ d
  601. RTS" I  k6 N$ z: V4 o

  602. % F5 ?& n- c5 {0 e
  603. .ENDIF
    / g# I; G4 d' D  m& t: ~
  604. 7 C, A4 K0 a' H" b
  605. ;==============================, l; b+ E9 J+ [. |+ C
  606. PPU_Addr_Set;PPU行开始5 g* ^! Q& l+ g4 r; r5 a& b, T
  607. LDX PPU_Cur
    7 a  [/ D5 r! f" e, ]4 e
  608. LDA #Mode_Line
    & H, H5 E3 z. ^
  609. STA PPU_Addr,X$ r/ [: E: p6 G0 l- f) F' [+ I
  610. INX! G( i. |3 Y5 s+ ~& h
  611. RTS  @% ~, l2 I0 e" B# c

  612. 7 a6 \' }% m5 X. f) ~
  613. PPU_Return;PPU转行0 f6 P6 u- m5 F: W+ F! m& E
  614. LDA #Flag_Over- p! R7 s0 G9 }0 H
  615. STA PPU_Addr,X- e' L9 M4 [+ ]$ G
  616. INX
    + U" U% s% P# a
  617. LDA #Mode_Return5 a* |3 ?6 P; w
  618. STA PPU_Addr,X) ]% l( f3 ?# `5 `# T" G. T! |3 Y
  619. INX
    + `! S% f- D- X0 h" u
  620. RTS
    % m9 j* \2 P8 u  k' T, c

  621. ' ?( C8 z( z8 k( v
  622. ;------------------------------% `/ I7 o: c3 x, b% `
  623. PPU_End;PPU结束
    + V* S- S6 _  `, V; K
  624. LDA #Flag_Over$ w$ A1 L; h; w  {3 P" f3 O. T
  625. STA PPU_Addr,X; ~& Q# Z! X' T+ i# F& L) W
  626. INX
    8 h6 K: D  q0 g- Y; n: w
  627. STX PPU_Cur: h. J9 K! P% i; }
  628. RTS  A# |" Q8 v) x6 a" |/ U
  629. ;==============================% q$ p8 E& F' x* K( A, E* p8 c
  630. Mode_Line     = $FD    ;新起行模式1 t- W! T& u9 `& x: K& R
  631. Mode_Return   = $FE    ;转下行模式
    0 x, P6 z, Y" }
  632. Mode_Clear    = $FC    ;行清除5 M% C- J  I1 p! A% S- e/ u$ T, u
  633. Mode_CntLine  = $FB    ;行计数写入
      M/ I: C& G$ m; G# l( [  H5 z
  634. Flag_Over     = $FF    ;行结束标志& E& {: A7 C+ ^; c) s" N- e4 n
  635. 0 p" i& X  U  _1 h
  636. ;------------------------------
    8 |$ }( X' Z0 k; \+ b8 _) ?1 e, {
  637. ;PPU处理* t- F9 ~' L: }$ f+ Z
  638. PPU_Proc6 _0 P' U+ d  i+ O7 p* I9 e# y
  639. LDX PPU_Cur8 M/ F6 H/ g6 E1 Y) D
  640. LDA #$00
    9 V4 N( j& V% O  X
  641. STA PPU_Cur( p+ y' m& X6 e$ R3 n) Z* n
  642. STA PPU_Addr,X$ F' i- `- _7 Z0 ?- V- p
  643. LDA PPU_Addr
    * v0 w+ ]& E: u' b& B; U* X9 q
  644. BNE PPU_Proc_Beg, x) Y+ w2 h  R  a
  645. PPU_Proc_Ret6 ~3 k; p* s; p' c+ R
  646. RTS
    # ^4 {% t; e7 L* r' {# ~8 U
  647. ;------------------------------
    ( A: t' q% ]: P& x( w
  648. PPU_Proc_Beg  ;处理开始3 ?! e9 k& W% }5 C
  649. LDX #$00
    3 C: ~2 a1 n6 J, w- b+ W8 f
  650. STX PPU_MASK
    $ U' l1 N, A& H. p7 Y3 i
  651. ;------------------------------8 _5 @' p: F% m9 o) \% ]
  652. PPU_Mode_Select  ;模式选择. [' r% W* }' X$ V* I8 d
  653. LDA PPU_Addr,X
    ) Z6 e/ |; Q7 b$ G: z, ~& B8 D
  654. CMP #Mode_Line3 m3 _# u- O1 o! M
  655. BEQ PPU_Mode_Newline, i( g, p5 f' r5 A4 B1 w  p# m
  656. CMP #Mode_Return! v) s9 `- s# H3 S' s; w
  657. BEQ PPU_Mode_Return; O1 I) \. e; X4 t5 t+ N; @
  658. CMP #Mode_Clear# F" }) ^6 Y" n' b
  659. BEQ PPU_Proc_Clear
      L% S( X4 M% o* F
  660. CMP #Mode_CntLine
    - g, D! C. w6 D1 n3 L8 b+ I
  661. BEQ PPU_Proc_Cnt_Line
    9 i+ p! t- s  i8 c
  662. RTS
    , E7 @5 b% X4 K* Q- p
  663. ;------------------------------
    $ |  t  E, s3 D: t& H
  664. PPU_Mode_Return  ;转下行模式
    6 K: d8 X! p/ h1 R% x; b6 S& L# X: S& j
  665. LDA PPU_Addr_L! Z: A9 ?% V5 n, O  a2 c
  666. CLC
    4 `7 r# K) ?  v" b& B! ]
  667. ADC #$20; r6 ^  |, z- C$ n) T/ x: z4 y
  668. STA PPU_Addr_L
    0 c% V! \$ a! ~/ C6 J3 ^( l
  669. BCC PPU_Return_End7 G* q1 o- a8 d* s
  670. INC PPU_Addr_H
    / D9 q; m5 `  \( o/ Q
  671. PPU_Return_End% P0 l) E6 t; b. t) {
  672. JMP PPU_Set_Increaser9 v6 k/ D, A4 ^" @& L! E+ D& x2 y
  673. ;------------------------------2 Y5 Z! S6 ?; s
  674. PPU_Mode_Newline  ;新起行模式
    ' L( ~3 e6 |( K& Z
  675. INX
    1 r) U" w( ~4 L/ n/ a" }
  676. LDA PPU_Addr,X" y7 E9 R$ n( V  F, _/ `0 o
  677. STA PPU_Addr_H& R8 x4 O) x$ x$ x
  678. INX* D* r1 c" K! H2 B$ D8 s
  679. LDA PPU_Addr,X' w2 t2 B% O. X$ L) Y; i- {
  680. STA PPU_Addr_L7 l  d$ y% q& x: o# U
  681. ;------------------------------
    + j( S7 T) O! S, i/ d: T
  682. PPU_Set_Increaser   ;设置写入地址# d! F4 L' y, ^2 E5 J) Z9 J' w3 d
  683. LDA PPU_Addr_H8 \- L. j0 ~0 u
  684. STA PPU_ADDRESS  l0 q, ~4 `9 i# ?
  685. LDA PPU_Addr_L) }( |, y: X; R! @+ I) `  h0 w
  686. STA PPU_ADDRESS
    ! b2 s; q1 J; v( M# Y$ r5 Z: g7 c
  687. ;------------------------------
    : ?, H" x7 J8 I. L
  688. PPU_Write   ;写入数据
    ) h' P: D2 Y1 w& ~, c
  689. INX* i) ~3 T' V. s; [  F% d
  690. LDA PPU_Addr,X
    ! \6 H3 T4 y' q
  691. CMP #Flag_Over$ f7 p4 n: U& s7 \) @
  692. BEQ PPU_Proc_End' K/ x5 t4 m! G# h; `& E
  693. STA PPU_DATA
    * F+ @  d! V  `+ |
  694. JMP PPU_Write* K, p. V: i7 ?5 f) c
  695. ;------------------------------
    9 V# ?5 g' a( f
  696. PPU_Proc_End  ;单行写入结束
    % d% K9 S' Z8 V4 h. |4 A
  697. INX! E( ]- |1 |  D0 D) y  D
  698. LDA PPU_Addr,X
    & r: d. N0 w* p8 A! W
  699. BNE PPU_Mode_Select/ t7 k" p; p, q* H$ H
  700. STA PPU_Addr: z1 l: i9 n9 h$ s' C  x
  701. JSR Update_Palette_Color
    ! ]2 \' p9 A- A0 _3 F3 f9 Y9 B$ M/ Y) q
  702. LDA #$00" c+ |% d# `: r
  703. STA PPU_ADDRESS5 W+ t7 X. o4 O# ]+ b
  704. STA PPU_ADDRESS- t. k* d8 I; _- ~5 F9 v; C
  705. STA Show_Track_Name
    , k$ L. v$ G& I
  706. LDA #Scroll_X3 W! T% p5 ~, o3 e5 V) b: T  ~
  707. STA PPU_SCROLL5 ^6 {8 m# n$ v- S* q7 N: [3 L) L8 f
  708. LDA #Scroll_Y: @- U6 g0 M5 l3 ?; g
  709. STA PPU_SCROLL% [+ Y- y  {  L
  710. LDA Screen_State3 X, Z: ~5 }, @6 Z) H+ J3 Y
  711. STA PPU_MASK6 T4 C3 u3 F! t0 d9 e
  712. RTS$ x! Z* S6 `# S2 X5 y# z" C
  713. # C/ \2 L4 @" }" ?5 [9 s
  714. PPU_Proc_Clear/ Z8 m+ X* R+ a2 Z" h
  715. INX
    4 i) i8 `8 [+ V! p7 h
  716. LDA PPU_Addr,X
    3 ?$ n: c& E0 O  V" K! u7 j
  717. STA PPU_ADDRESS/ q1 T2 E- C5 F0 g/ }& V
  718. INX+ H2 J- d+ `7 f" Q* a8 c
  719. LDA PPU_Addr,X
    ( E2 d* \. H  ?3 N1 \
  720. STA PPU_ADDRESS
    ) b- s. C( S; B  \$ H- Z5 v
  721. INX
    - N2 B& n) W* _% V0 {4 @+ `
  722. LDY PPU_Addr,X
    # P% O8 E) y" Q3 G
  723. LDA #$00; t6 _% v  [. R& U  i; L# ^( y
  724. PPU_Proc_Clear_Write
    7 O0 f% e1 \9 K9 ?) m, \' m: N
  725. STA PPU_DATA2 |  p8 E# O! A
  726. DEY  Q! B1 U% |& Y  \; l" t
  727. BNE PPU_Proc_Clear_Write
    , n3 D; k# h2 ?9 l& D! [
  728. JMP PPU_Proc_End
    ! n- A, {4 z' [  x
  729. 1 O' ?% F: k) k2 t9 Y; r
  730. PPU_Proc_Cnt_Line7 L. _! e. D$ z3 ^  {
  731. INX
    4 A$ i0 m& N# X8 ?6 E3 i
  732. LDA PPU_Addr,X* R% J( \4 i' h, Q+ X0 @9 |) O4 I
  733. STA PPU_ADDRESS. R0 J1 O1 y9 m
  734. INX
    * }% ~' i2 e( x* y6 V
  735. LDA PPU_Addr,X
    # B0 L6 f- O9 P
  736. STA PPU_ADDRESS8 t3 ^, g; N) t% J* k+ ?
  737. INX: X& I$ Y  w+ ?3 ?$ ^/ @# u
  738. LDY PPU_Addr,X, q' Z* S! f" m  }1 v. B
  739. PPU_Proc_Cnt_Line_Write* S% l4 V' Q( Q2 }& P5 Z0 Y
  740. INX
    - K+ h  i5 D- R5 U1 F
  741. LDA PPU_Addr,X
    " O# ~. D$ w; S
  742. STA PPU_DATA6 b9 i6 S) Z2 m
  743. DEY
    0 d4 ~3 J$ G$ X0 ?5 o3 i
  744. BNE PPU_Proc_Cnt_Line_Write
    # ]+ {0 Q! J' O! ^0 X
  745. JMP PPU_Proc_End
    4 g6 {0 _3 o4 x% \) ]: L
  746.   N: }1 _. X: y! k+ j, f( v+ c- x
  747. ;==============================
    ' C& W- n6 `' z/ u- \
  748. HEX_To_Dec;十六进制转十进制# f, r  ]+ l) [$ V  ]* a
  749. STA HEX_Data
    7 \3 y+ O4 O5 E$ Q$ j; Z0 U
  750. PHA& t/ F: Z; c' d; `0 y' Q. l3 b
  751. TXA8 j, ]0 x3 c/ B+ N% |+ v! o
  752. PHA
    : @% e3 |4 [$ ^- i$ |# P3 B) ?5 r
  753. LDX #$00
    3 V; n, j3 a' B
  754. LDA #$00
    ' Q- }& t$ S" O4 v& x) f
  755. HEX_Cln
    # A$ Z9 d' Q: r9 `) p# `# \6 D2 n. [
  756. STA DEC_H,X" E7 G9 O7 g: B6 d, z
  757. INX
    ; ]% p# w8 c5 k, R
  758. CPX #$03
    " p3 I0 k! z1 g0 V9 N: v. c
  759. BCC HEX_Cln
    0 x- {- ?4 J1 U9 G4 _$ |
  760. LDA HEX_Data/ X  H2 O8 ^- w
  761. ;------------------------------8 X2 d5 q2 h, D
  762. HEX_1004 I+ O7 ^3 j# |+ v8 O
  763. CMP #100
    ' _6 q4 ?: H/ `! v& a- T: i
  764. BCC HEX_10! O9 j: N7 H/ M+ \- y
  765. SEC
    & @8 n1 P0 }0 e
  766. SBC #100
    % b" w% o) T8 O! {
  767. INC DEC_H
    7 K4 `  ]6 }6 i' I* p# H
  768. BNE HEX_100
    2 D9 [7 X; q) {. ?2 P
  769. ;------------------------------" N) u6 W/ O$ U2 |; y+ {
  770. HEX_10
    * x+ M. r( G* p) f# V6 x
  771. CMP #10
    7 l5 f% D3 G; J9 z- q
  772. BCC HEX_1
    ' _/ \5 Z8 K* H9 N1 d$ ?  ]  i0 @
  773. SEC0 J8 A3 e8 L% M& [- a
  774. SBC #10* O4 W! [  m- _2 V
  775. INC DEC_T) y6 U4 S+ B( D7 Q6 \6 M* P
  776. BNE HEX_10
    0 X$ b) ^0 ^8 P& u
  777. ;------------------------------3 i; q; _( R$ f; x, m8 a- A( E
  778. HEX_1- m: a1 _% w/ ]& Y
  779. STA DEC_L8 V% R" A6 L1 @5 j) G
  780. PLA% ^9 X/ i& d$ W
  781. TAX' V, ~4 ^5 `; l  C# K0 H# C
  782. PLA- o" Q1 Q5 u6 u1 b9 w. T
  783. RTS0 a: l+ w* M4 g; z4 N, s( U# K

  784. % ?( L: v/ S$ h0 i5 k
  785. ;==============================& X# d9 a0 U, z% }% D6 u7 v* d5 S7 w
  786. ;音乐曲目显示
    % Q% z$ r6 C4 u' P# y2 `! U3 {* n
  787. Music_Show
    1 G5 I* U, g; ?0 R! \$ N1 {
  788. LDA Music_Cur
    ' `. B! [8 b3 U+ i% p) @
  789. CLC+ ~+ O0 x( L5 O# Y7 e
  790. ADC #$01( {3 X8 q! g9 H# v3 ]( d4 W9 e
  791. JSR HEX_To_Dec' t( S2 o8 K. B; {+ K8 {
  792. LDX PPU_Cur
    9 j; c( p. b( h: _7 L
  793. LDA #$FD7 A4 ?5 \9 y! H
  794. STA PPU_Addr,X
    9 I/ i' J  ?# i( ]9 |
  795. INX
    + ^' F$ A0 S$ G
  796. LDA #HIGH(Play_Index_Pos)% k; T3 {8 {% ?9 D9 B
  797. STA PPU_Addr,X
    ; V, \" ?' V" h! x! d+ h
  798. INX
    , U. H6 h4 M4 V$ \3 K' }3 t
  799. LDA #LOW(Play_Index_Pos)
    - q4 E" h! ^# d' @" r5 i  ?
  800. STA PPU_Addr,X
    ( g% E( m: g/ C* K" @8 ?
  801. INX
    ' F8 D7 G, d& T- n* b
  802. 7 K4 h" \" y& u* E9 y2 S& S
  803. .IF Music_Song_Total > 99. {3 b9 N2 ]% H4 u
  804. LDA DEC_H
    0 u9 i, ~9 j1 Q
  805. ORA #$302 L* W& H/ Z# T% {6 q8 u- q
  806. STA PPU_Addr,X+ x  _& M5 ]$ m- O9 P, Q$ t+ O
  807. INX2 r3 y0 T  T8 d
  808. .ENDIF, V. A/ d' C, i8 m. _! H
  809. ) M5 z; j) v& ?9 K" D
  810. .IF Music_Song_Total > 9* V; N  V3 b' C% l" C  U  e0 j3 T
  811. LDA DEC_T  _* d4 s6 I( r7 _# M( y. }" q4 A
  812. ORA #$30
    ; K0 B" K6 x5 U9 Z! Y  u' e
  813. STA PPU_Addr,X
    . X5 [$ d/ k2 I/ L; y4 b: D
  814. INX
    % j5 }8 c) l7 G5 K* F6 b
  815. .ENDIF
    0 }- y& K/ U" Y& o$ ]) W( z

  816. - Z6 ]! Z3 w7 E1 B
  817. LDA DEC_L
    : I& E! g5 u  C& J  F
  818. ORA #$30$ i: U2 I8 T( z+ j4 R; I4 p
  819. STA PPU_Addr,X- i; h' J, f; o9 i4 i
  820. INX
    9 r- M( ~) d# }2 a& U
  821. ( f: i8 k# z. c& U: `! {
  822. LDA #'/'
      K- D$ k) Q2 ^( @$ g; |
  823. STA PPU_Addr,X
    1 |9 C0 y+ d% R  b+ f
  824. INX' X, b9 }' J5 U# o, p- @
  825. Music_Show_Total
    + i8 A" ~5 L+ C+ E, H# T) y4 y8 s1 D
  826. LDA #Music_Song_Total
    4 l: S- Y% w' ^6 {4 T( P8 V
  827. JSR HEX_To_Dec
    * E; Q# i" M4 w& U' D. a$ y
  828. 0 N* s; u! _- I) `8 H
  829. .IF Music_Song_Total > 99; K5 q; v  s( D' s
  830. LDA DEC_H
    : Q6 w4 |6 y* l" c
  831. ORA #$30
    - c  ]( w; C4 b; C. y& l
  832. STA PPU_Addr,X+ L' x% o3 b0 W( Z. V- W
  833. INX
    4 ]/ m$ E/ p9 N; a: g  H% S
  834. .ENDIF
    2 N: R, X# ?" [# T
  835. 9 O& _- i+ _$ _! F0 P1 a
  836. .IF Music_Song_Total > 9
      h# ?7 |* [5 s- H% y3 x# i
  837. LDA DEC_T7 N  L# Y) ~+ X; e1 W/ H- ~
  838. ORA #$307 Z* H- j2 l) k1 Q5 e
  839. STA PPU_Addr,X  k; q4 w8 H  P. I1 S
  840. INX% _4 ~. b6 J$ K6 t
  841. .ENDIF, ]% o8 V1 Z& U; ]3 m
  842. ! T2 ?& N" H2 p) k7 j2 C
  843. LDA DEC_L( U0 n$ q0 I" V* Z; `8 ~
  844. ORA #$30
    6 G/ E; k" K8 c8 i7 F
  845. STA PPU_Addr,X! I8 v* u! d. d# V2 Z8 H7 V( y3 Q( A
  846. INX9 }8 z0 h/ Y3 n% W6 b; h. j

  847. : n3 f+ {: x# n# G# w' z
  848. JSR PPU_End5 a& j2 [5 a6 q% L( e
  849. Music_Show_End
    5 Y! w0 E6 _9 }" V, |
  850. RTS
    # {. L" R. h. }( E

  851. 1 O/ o' \5 D/ R; D1 O: Q
  852. ;==============================
    , S0 b$ i8 N( _4 W
  853. Time_Show;播放时间显示" Q6 ?" j  w( K2 o& w- y
  854. JSR PPU_Addr_Set5 O; K" g5 g# j8 m" ~9 K9 c
  855. LDA #HIGH(Play_Time_Pos)+ r. r6 r, ?; }$ |  e$ L
  856. STA PPU_Addr,X2 s4 M5 `- ]: \
  857. INX* ^* o4 _! h% ~0 k, z
  858. LDA #LOW(Play_Time_Pos)/ M6 J( P) K! c" g" e% j2 _$ N1 ^. \
  859. STA PPU_Addr,X# M7 I4 Y. k7 M$ \( ]) T0 y
  860. INX& S/ Y  q& n* p/ u* V
  861. Time_Show_H3 ?) h9 q% h! R- J0 e6 {
  862. LDA Time_H+ t, Z/ Q4 ^8 a
  863. JSR HEX_To_Dec! s% {& J" H- k
  864. JSR Time_Digit& |, y+ F+ G" ?1 P. v2 R1 r
  865. LDA #':'
    / o% p  d% o, R$ K
  866. STA PPU_Addr,X9 P+ }: ]) a3 b& B/ N* j
  867. INX
    5 V6 \) f) y6 {8 |
  868. Time_Show_M
      Z5 l, z4 g: A9 ~& V. I
  869. LDA Time_M/ J5 |. @3 C; o+ S/ }+ {2 [
  870. JSR HEX_To_Dec
    * k" u: w6 B3 H8 z0 d# L
  871. JSR Time_Digit
    . Q% X1 y8 t  x6 u* r+ l* E
  872. LDA #':'5 s- P' m$ T; H2 ?* r/ u
  873. STA PPU_Addr,X
    0 t0 D; U4 v  C  \0 A
  874. INX; \1 T- o8 _5 \2 k
  875. Time_Show_S. y- i$ c6 k) y2 i& e2 Z  ?
  876. LDA Time_S
    4 \9 a  y/ U4 |. z4 b" Q3 W
  877. JSR HEX_To_Dec
      }+ y/ g7 o% w7 J( P  N* d
  878. JSR Time_Digit3 M$ D7 R9 L* Q8 r) D3 l/ m
  879. JSR PPU_End
    8 K) J3 v+ f) C" E  w2 M
  880. Time_Show_End1 S' J( i5 _6 T0 I# Y' b- s
  881. RTS
    ) R6 X- ~1 v- Z: C* x- l

  882.   Z3 L$ @+ J. |+ E3 x4 e
  883. Time_Digit) @( I& G& H4 R4 _1 J- d- x" k
  884. LDA DEC_T6 A- l6 n" [, {" W* Q
  885. ORA #$300 [5 P8 e8 l9 D( d* D9 G
  886. STA PPU_Addr,X& a1 x! m+ i0 s# \. m
  887. INX
    # F2 G6 P" A  U& J: O
  888. LDA DEC_L
    ( ~0 s, W: N# |/ f8 z0 X( |: @5 f
  889. ORA #$30
    ! [4 @. \$ k1 L
  890. STA PPU_Addr,X$ I- R( E6 g  O" E! c  P7 L) J3 \" j
  891. INX( M% d  I" L1 e' o/ Q; r
  892. RTS
    0 q* H! j- _) b% Z! Z" p9 Q% w

  893. ; E* |: J. F4 j9 r
  894. ;==============================0 t" ^4 g0 Z: {/ f3 x2 Q; j' o; f" E
  895. Time_Count;计时
    9 f/ N! ?+ U9 j5 `' p
  896. LDA Music_State% j. s% {7 X+ g4 Q0 t) _
  897. ORA Time_Wait_Cnt% {  x. }$ l+ `5 h
  898. BNE Time_Count_End
    8 s+ p2 k% j7 H/ m' X2 M
  899. INC Time_Cnt; d7 \$ X1 F. H8 O9 N
  900. LDA Time_Cnt
    ( ~. F1 U  ~! u/ ?* B- ]$ t) I( d
  901. CMP #60
    1 d: G# `$ Y* e' m+ d" q  Y
  902. BCC Time_Count_End5 z3 m# I3 Y$ ]# P5 c" v* U
  903. LDA #00
    + S; u* ^7 {# B5 w* x' f* `
  904. STA Time_Cnt
    " i. D: }% A: f, B" z- a. k
  905. INC Time_S
    2 V) x" Y9 O0 E
  906. 0 u3 o8 n. \, H0 b7 a' R% S6 Q9 i
  907. Time_S_Cnt2 s6 l% H! Z1 T, g6 O
  908. LDA Time_S
    & Q6 A% m5 T9 h
  909. CMP #60
    3 ]% U5 w1 i/ b7 N& v
  910. BCC Time_Count_End
    * u& E, [0 @8 |  S; j5 a; l
  911. LDA #00. I1 X* {8 a+ G: Y2 y; c
  912. STA Time_S
    # N, p2 K, @, t% E) ^1 [+ k- d7 [& v8 P
  913. INC Time_M  Z- v( A0 x" @: J+ D* z+ A
  914. , y5 d; q, M; Z
  915. Time_M_Cnt$ n9 A2 B/ F+ m/ l" [2 F- K" M% S$ s+ E
  916. LDA Time_M
    3 [" {% F- `2 x7 G+ B. d0 [
  917. CMP #60* J4 B% @5 D5 l* ?
  918. BCC Time_Count_End
    . T8 \! l& |9 Q7 l/ N% ]9 \0 l
  919. LDA #002 h0 |: ~" v) z, F
  920. STA Time_M
    1 g+ J- @8 i- ~. v- N% p
  921. INC Time_H3 `9 R& q5 o; A4 I( `# Q
  922. 4 k1 ]  g$ E3 ^! M
  923. Time_H_Cnt
    1 R! x6 ~! W& ~% n3 ~& |( L, f
  924. LDA Time_H  C% J4 z6 H/ y
  925. CMP #24
    4 w2 }' R/ L( O! f: ]
  926. BCC Time_Count_End
    / {' z2 `- l9 k' \. u2 N2 j) a4 J
  927. LDA #00! ^& E0 W/ V0 o+ `
  928. STA Time_H# K7 }- l: s2 t+ t
  929. 2 P+ j, M  j0 ]
  930. Time_Count_End
    . |! J5 p; M, W
  931. RTS* p8 }& N( `  B7 M6 }* q
  932. ( W. e. {# |* l4 c0 B/ {; N: s
  933. ;==============================3 S' U! a  m8 o3 x: l& t# h
  934. Time_ReSet;播放时间重置
    / |; x, T- ^* o! L1 T/ Q7 X% g5 _9 Z
  935. LDA #$00
    # x' m% `7 C, J
  936. STA Time_S
    - F, D# u2 j5 }; |& W* j
  937. STA Time_M 3 c3 }8 u  ^# X9 }8 Y( A# K. A
  938. STA Time_H8 B; {7 U$ _9 n- [
  939. STA Time_Cnt
    : G  ^4 o  E/ K( z+ s( O
  940. RTS" v# q. k$ h8 n4 D3 o

  941. 6 _7 R- X: c; @1 o+ i7 ?
  942. ;==============================" d6 l4 W4 x% U9 o
  943. Music_Bar_ReSet;音乐条重置, v: u0 K% Y0 l9 S9 v9 [9 K$ s
  944. LDA #$009 S) \/ }) Y4 E, \
  945. LDX #$00
    & O4 }3 I' O5 B: j
  946. Music_Bar_ReSet_Set
    % ]8 U6 S1 e8 y# v6 n
  947. STA Sound_Bar,X& j3 D' b! u. n5 E& H9 o/ n
  948. INX+ v3 C8 k4 k/ d+ j% D
  949. CPX #$106 e; G5 F# k4 t5 B1 K6 @7 R
  950. BCC Music_Bar_ReSet_Set; ^) W; F4 L3 H- y& d( C2 s
  951. RTS
    4 w* `# r/ I( R# }' M+ B) o1 `5 B

  952. 4 k) g. T, |" ?
  953. ;==============================
    , E2 \# `0 o' q  W. M) K$ ?0 \8 i4 I
  954. PPU_Data;PPU数据写入
    ( {$ k  ], x& n7 U6 \9 {- o6 F
  955. STY Data_L
    1 H$ Q' x$ I/ O- q( ?7 h- B, I- T) V5 z
  956. STX Data_H
    0 b# l% d. ^% U6 R- u; |# ]2 o, B
  957. LDY #$FF- A& s2 S/ L3 m; F/ U' w1 g% F' Q
  958. LDX PPU_Cur
    : w7 P3 Z/ [  {3 R
  959. DEX, Q4 z. k) j9 r( f) w# o$ z: U4 P
  960. PPU_Data_Beg
    # Q# \4 h8 N  y) P6 T$ n7 ~
  961. INX
    " a3 |" Q% C" C- ^' |; q. D/ N
  962. INY
    ( y( @6 v2 |: N, ^# `6 m2 F
  963. LDA [Data_L],Y
    & {* J) [. z- B& @2 P0 W% ?
  964. STA PPU_Addr,X
    " g8 p+ R8 _5 w: F4 c
  965. BNE PPU_Data_Beg8 m6 h0 n$ R9 E! f3 v
  966. STX PPU_Cur! b  p) o  h7 Q4 A* |
  967. PPU_Data_End
    % E1 _. f9 A6 j4 M5 ^8 k  k+ x
  968. RTS
    ; o: E( Z7 T6 e1 y5 w
  969. 1 _5 F6 V: B$ H3 x
  970. ;==============================8 a# x; n( T; w
  971. Music_Stata_Show;播放状态显示
    : C; ]/ g, R6 D
  972. LDA Music_State; f- d. a) Q% K6 p; i+ g1 H
  973. BEQ Music_Stata_Show_Play  R! f8 F/ r' _+ C& @( s5 T
  974. Music_Stata_Show_Stop
    # ?  l3 ^+ ]% ]  F5 K
  975. LDY #LOW(Music_State_Stop)
    ; }7 \, I' I" P2 R
  976. LDX #HIGH(Music_State_Stop)7 y4 o* y; P! N
  977. JSR PPU_Data
    / J, r. X, ]/ O; [1 V
  978. RTS+ k* o% u4 X6 P, @# b6 ~& p
  979. Music_Stata_Show_Play& o+ Y* o$ Z  D
  980. LDY #LOW(Music_State_Play)
    & W3 z6 x2 |$ a$ u1 I
  981. LDX #HIGH(Music_State_Play)
    9 k0 T8 t* g9 p" E. F/ O
  982. JSR PPU_Data* x/ N# \3 a( R7 ~0 Q/ B' a0 K
  983. RTS
    , v0 ~6 V+ L5 c4 t+ V* a; Y7 T
  984. - a2 c( ?* u8 m# X
  985. .IF SOUND_BAR_SHOW_ENABLE% X* K% [9 j- z8 M  a+ p& P4 u& c
  986. ;==============================  w- K) [' f; k) _
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    : }( R1 m$ _8 Z  p
  988. LDY #LOW(Sound_Bar_Text_Data)9 i) |! s/ p* @; @0 M3 J! ?% t
  989. LDX #HIGH(Sound_Bar_Text_Data)
    ) d; R! U  n) G! k4 m
  990. JSR PPU_Data
    , L8 l$ W* p$ n$ ^' u& ]
  991. RTS7 z5 x) w" n) p# e! v* a
  992. 1 x( }$ h5 Q5 `% w- ]
  993. .ENDIF: h, i' r& p6 P3 S; [4 n4 B
  994. 6 |4 j, z3 s, Y
  995. ;==============================& K2 ?0 m5 E, g- H
  996. Set_NameTable_Attributes;设置命名表属性
    0 J4 h) p0 e& l: P
  997. LDA PPU_STATUS
    3 [1 s6 c2 V0 E& b) K
  998. LDA #$231 W; V8 z- e- L0 m7 i& t
  999. STA PPU_ADDRESS% V, Z0 b% a" ^1 t7 c9 r* |& g6 ~; }8 W" F
  1000. LDA #$C0
    ; H5 t9 X2 g: A- w; T8 s
  1001. STA PPU_ADDRESS* n$ Z8 K1 W4 V1 l7 o3 }
  1002. LDX #$00; q3 a3 W0 H6 ?) h( l; f% }
  1003. Set_NameTable_Attributes_Write* ?" G: s4 D( v: [( W0 ~
  1004. LDA Palette_Attributes,X
    8 H4 _4 ]4 v* W& @) y+ `. o3 b
  1005. STA PPU_DATA
    " x% D! N1 s0 l2 l: [$ F' g
  1006. INX) X! @9 ^! h" n% d9 _2 i. [
  1007. CPX #$405 Z8 V9 @9 Z$ n
  1008. BCC Set_NameTable_Attributes_Write. }1 l# Q& o' c' N& k( J  U
  1009. RTS1 ]4 c9 {9 q2 X9 ?4 j3 m

  1010. : s9 Y4 U4 ]/ b
  1011. ;==============================
    ( b7 d8 n8 K' M- b
  1012. Set_Palette_Color;设置调色板数据
    " _) V! p! y" r/ f  ?
  1013. LDA PPU_STATUS
    . t& e- w! m& E9 G
  1014. LDA #$3F. c. @! H$ }# d9 @
  1015. STA PPU_ADDRESS
    8 f  u1 u& B# z# L- d/ S$ I
  1016. LDA #$000 a: c0 u+ ~5 W- r( u
  1017. STA PPU_ADDRESS
    * ^* T- N! u9 u- L3 A
  1018. LDX #$006 X1 N) x: u8 r% e' P& z* H
  1019. Set_Palette_Color_Write* `. X8 C& V) J; V
  1020. LDA Palette_Data,X; Y5 s5 Q6 t2 _' s* j8 u& Q0 w
  1021. STA PPU_DATA
    9 s' Q3 k- k- A8 }& ^
  1022. INX+ z/ a3 r% S: s& R
  1023. CPX #$20
    2 n* |" b/ I; {4 m: r' H4 X
  1024. BCC Set_Palette_Color_Write1 _& X" W9 x+ g7 W4 f
  1025. RTS
    2 e  r" x( T" W8 f5 J8 M, E

  1026. % [3 ]% D' j* w$ _4 h0 Y
  1027. ;==============================0 R4 ~: n' [  I& _, B
  1028. Init_Palette_Addr;初始化调色板数据
    ! l  b) @' |+ }9 w8 x
  1029. LDX #$002 o- C( _5 \* [' K+ @
  1030. Init_Palette_Addr_Write
    5 ?9 @4 l; Q) \3 V; A
  1031. LDA Palette_Data,X
    9 @' F5 Y8 G1 i; ~
  1032. STA Palette_Addr,X
    7 H. s1 t" G( |# o! }% w
  1033. INX
    ! R8 {) R3 S/ X
  1034. CPX #$20
    1 E' O! @! U% L& J
  1035. BCC Init_Palette_Addr_Write; H1 r2 k4 V" s) I& E/ [/ ~
  1036. RTS
    ! Q; w: a8 p- Q. ?3 @

  1037. ( o& l( K5 M+ \* X+ j  D- x) S/ e
  1038. ;==============================
    0 H, t( i: t& W( W$ i- e
  1039. Update_Palette_Color;更新调色板颜色
    $ `7 v* b; I8 I6 D  D& A6 u
  1040. LDA Show_Track_Name
    , `# x: Q% C" \. j* h  x
  1041. BNE Update_Palette_Color_End* A1 O& U8 p% \2 f! W5 A
  1042. LDA Palette_Update_Flag( ?, l" B! D( y: X
  1043. BEQ Update_Palette_Color_End  r; w: [5 x' [  z* U* F
  1044. LDA #$3F
    - E* i9 ^$ |9 n# M9 {; n- k$ @
  1045. STA PPU_ADDRESS% z5 b! Y# Q3 h  B/ v
  1046. LDA #$00" b9 M; ~, [; h
  1047. STA PPU_ADDRESS
    4 y# f  s0 a8 o9 E4 B
  1048. LDX #$007 w- ]: Q& `! f0 ]+ v2 ]
  1049. Update_Palette_Color_Write
    % F  s/ L! G5 @: \! R/ T+ s
  1050. LDA Palette_Addr,X3 b" U3 a( ]- G+ w) d
  1051. STA PPU_DATA0 K" i9 h! C, T5 d5 b
  1052. INX' i2 r- Z* N# l$ k; s4 j! C6 g
  1053. CPX #$20
    9 {4 d1 K9 Z+ q1 t  D* T1 q
  1054. BCC Update_Palette_Color_Write
    ! a' X& @# y+ N/ j' I) a
  1055. LDA #$00( `; P# c9 a* Z  X1 k
  1056. STA Palette_Update_Flag3 x! B+ ?$ O9 v; \# X
  1057. Update_Palette_Color_End
    ; h3 l+ m8 l' ?3 W% V
  1058. RTS
    5 V" O- M! v, q3 k% R& ]4 _
  1059. 3 z. ^; I; u' L% q' `/ P
  1060. ;==============================
    4 @& f4 ]4 c( w0 L+ I9 V! Y
  1061. Update_Palette_Data;更新调色板数据
    , @: Z+ d9 n" H* |* h& V  l
  1062. LDA Show_Track_Name) h1 }% B0 k; M+ n: W! O/ a
  1063. BNE Update_Palette_Data_End
    5 q& G. C. k2 n. z
  1064. LDA Music_State/ }. Q) u7 r% l- y. |8 ]
  1065. BNE Update_Palette_Data_End* O# \; f# B0 w, y7 M, ~0 I
  1066. Update_Palette_Data_Check9 z( g8 V/ ?, o+ R
  1067. LDA Palette_Wait_Cnt
    " ]# [: I1 J) A5 h1 k7 }4 z
  1068. BPL Update_Palette_Data_Check_Over6 X, f: n( S( D# U7 l  ]
  1069. LDA #Palette_Update_Interval
    5 w# V4 L: W1 y* K5 u
  1070. STA Palette_Wait_Cnt
    $ ]! \5 n3 F5 V* c$ R
  1071. Update_Palette_Data_Check_Over* V' ]4 p% C# a1 X1 M# N& y
  1072. DEC Palette_Wait_Cnt$ |& U+ I% q3 J/ S% m6 K; m! ?' ]
  1073. BNE Update_Palette_Data_End4 ]7 x$ _) G; z( ?
  1074. INC Palette_Update_Flag6 k. g1 \, G- [8 N; l" x
  1075. LDA #Palette_Update_Interval
    & R4 }% b6 j+ v* m+ k: S) K
  1076. STA Palette_Wait_Cnt
    ; d4 J, r+ l( g! t
  1077. LDA Palette_Update_Addr, M1 G  y& m! ]
  1078. CMP #Palette_Update_Max* a1 X. \4 n% A2 L3 F- y
  1079. BNE Update_Palette_Data_Set
    1 ~$ H6 X+ W0 b  z
  1080. LDA #Palette_Update_Min - 1; J1 T* b6 C" F/ x5 U* @
  1081. STA Palette_Update_Addr  g- H1 R$ m; k& l1 Z9 d
  1082. Update_Palette_Data_Set
    4 e5 C( f( o8 {* m
  1083. INC Palette_Update_Addr$ h8 `/ y4 A' H
  1084. Update_Palette_Data_End
    1 R: Y% W3 ^2 P9 q4 y! V. j6 E: M
  1085. RTS
    9 K8 t# k8 K$ F+ r" p

  1086. 8 f% N$ e' Z. I
  1087. ;==============================
    . p. J9 l4 I6 C$ e
  1088. Show_Music_Text;显示静态文本* b7 g) ^+ m$ z0 `
  1089. LDX #$00
    5 |8 ~0 j+ T* B8 c4 |/ ?+ w) F6 n
  1090. Show_Music_Text_Set
    ( Y, `, @, s4 z: O; x  J
  1091. LDA Static_Text_Data,X6 j; I+ J  |5 ]+ K7 D6 A# }4 h2 }
  1092. STA Data_L
    3 R5 x! _* k" P' o, S3 a
  1093. INX
    - Q+ D2 W  i  B5 f5 O) g
  1094. LDA Static_Text_Data,X5 d2 q9 B% i  {8 G
  1095. STA Data_H% D/ E+ ^+ R4 b! n
  1096. INX9 o5 T: V3 L+ w- [2 Q5 d3 @; s2 {9 D
  1097. LDY #$00
    " Z, W- A( _* L$ M5 Y5 V
  1098. LDA [Data_L],Y
    1 d+ ~% G* t( C$ S
  1099. STA Data_Cnt& d# \! p9 f" e1 N
  1100. DEX5 F0 k1 Q" q2 @$ X% S
  1101. DEX
    8 {+ D* e2 Q+ ~# u0 c
  1102. LDA Static_Text_Pos,X
    % f: g0 L6 r& @9 {8 R
  1103. STA PPU_ADDRESS( O3 j$ `- w" z, C, ?" r
  1104. INX
    ! k$ R. J( z  T( B" f  |
  1105. LDA #$20
    $ T7 e5 X: v1 u' Y
  1106. SEC2 j! K% T3 x! X1 ^8 o
  1107. SBC Data_Cnt
    % U0 k' l: W' x) }# w
  1108. LSR A
    ; [: C5 @' A/ T2 G* O2 ?9 p
  1109. STA Data_Buf+ n7 |7 v1 [$ Y4 y8 ]( L# J
  1110. LDA Static_Text_Pos,X
    - E" P5 t% B6 \2 n$ z+ Z6 Q
  1111. AND #$E02 l* ?$ I* q: T1 |! v: v
  1112. CLC
    , q/ _5 F4 p6 ~, ~* }
  1113. ADC Data_Buf* K5 K! N5 h' ^2 N  i
  1114. STA PPU_ADDRESS
    0 ~; P& f6 v1 h8 T2 b
  1115. INX
    6 l6 K" {2 ?. D5 c! I2 d" k
  1116. Show_Music_Text_Set_Write
    + C' _/ g# N& Q0 Z' Q+ s
  1117. INY/ r$ s6 U9 a$ f
  1118. LDA [Data_L],Y% _1 o8 ]3 t: |3 j' \( |0 A
  1119. STA PPU_DATA3 J, d1 T& _$ Z! g0 {$ R! E
  1120. DEC Data_Cnt+ E2 ~2 ], ^; M( T4 W. S
  1121. BNE Show_Music_Text_Set_Write/ N# w0 C  Z$ Q- Y
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos5 x$ F' O+ Z3 B
  1123. BCC Show_Music_Text_Set
    8 F# [. g0 l& o, U+ e& G
  1124. RTS: O8 A' Y, M  L3 {6 x7 Y8 j
  1125. & I* y! B- T! d$ E  m- l! g
  1126. ;==============================
    1 |. i% }- |1 ]/ ~
  1127. .IF Track_Name_Pos;显示曲目信息8 v3 _5 M- _5 L& `1 e
  1128. Show_Track_Info4 d2 T; k5 \+ z  B8 o
  1129. INC Show_Track_Name, K$ F7 o+ m) q9 x5 l! G
  1130. Show_Track_Info_Clear, ~# O  }( N" w3 o- H0 [3 o+ O
  1131. LDX PPU_Cur; h- h, x8 F. J, v$ G, ^! w
  1132. LDA #Mode_Clear2 S) I# c3 F8 ~8 V+ D
  1133. STA PPU_Addr,X- d- |' X! E5 C- _/ @
  1134. INX' ^% C8 M+ b. l: t5 L1 J+ l; J: S

  1135. ) A  K8 m4 s) ~8 O) u; c/ @! u
  1136. LDA Music_Last& f& |% O' y4 ]$ ?4 ]
  1137. JSR Show_Get_Track_Name_Center_Pos
    ( @# \# u# k- }* w8 u4 r
  1138. Show_Track_Info_Write_Cur
    - o4 U, S) [4 e6 ?7 W- S7 [' w
  1139. LDA #Mode_CntLine
    ) C" x  d0 {& S  m
  1140. STA PPU_Addr,X# i, O. x9 k$ l* v5 w
  1141. INX
    ! E3 {/ l  Q( i5 w% d7 \

  1142. / V, T1 l) n  e) @: W: Y; n
  1143. LDA Music_Cur+ ?6 B7 E7 ~; T3 ?* }6 f3 L0 _
  1144. JSR Show_Get_Track_Name_Center_Pos
    7 P& d% t* c; m& c  Y9 C, w
  1145. ! k; \1 V3 n" V' ?( p/ y( s0 M! n8 n
  1146. Show_Track_Info_Write_Cur_Data$ c: E# O. ~" {4 X( M; J
  1147. INY0 L' n+ q+ h8 u. {! l
  1148. LDA [Data_L],Y: |- Q6 v  k! y( Q9 f
  1149. STA PPU_Addr,X  o! E4 \: V  y  a6 h4 G$ a
  1150. INX* J2 e% j* `  ~4 k) D4 G, E* h( S
  1151. DEC Data_Cnt
    - w. F7 y/ z/ ?, J& o1 I
  1152. BNE Show_Track_Info_Write_Cur_Data
    # Q, r4 J2 x' z1 A6 [  C9 J
  1153. Show_Track_Info_End: s% Z6 z5 K9 C4 Z; h
  1154. STX PPU_Cur. _# [: @) y- i
  1155. RTS8 Y( n' E: M( e8 l' H4 k2 q: j

  1156. 9 w2 ^. o4 |# a8 q' r5 q
  1157. ;==============================
    . \2 E: S, ?% n' b5 Y& I$ }5 u; y
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置+ B, B: L* S1 ^' C
  1159. ASL A/ S1 _$ j2 B- d) A2 l
  1160. TAY6 y+ Y' [# ~" t; D1 g
  1161. LDA Track_Name_Addr,Y" k! q5 B& q. W7 K
  1162. STA Data_L, |0 X" D# {0 w
  1163. INY
    # E: f. p9 M0 D' ?9 N! k
  1164. LDA Track_Name_Addr,Y# c4 C" \5 w, A9 D, f
  1165. STA Data_H
    ! I+ x' ~& f/ F( e' p$ P" C
  1166. LDY #$00
    " F. H- S% V7 L. P4 v! X
  1167. LDA [Data_L],Y
    : S! D: R# {9 J2 _( T- ~
  1168. STA Data_Cnt- H# |. s6 \5 V$ G% c# ^) p, A9 G+ i
  1169. LDA #$203 ]$ R0 ~8 p0 ]0 N" O
  1170. SEC* P* C1 g" n' M7 M) u3 t' o
  1171. SBC Data_Cnt
      ?7 v6 M2 U3 F3 b) I0 j
  1172. LSR A
    : q  s- T, y9 s" g, G9 C. P3 s
  1173. STA Data_Buf
    8 ?- J+ \% S4 S1 K2 ?4 ]1 w
  1174. LDA #HIGH(Track_Name_Pos)1 `4 [3 H6 C$ r0 I, H
  1175. STA PPU_Addr,X/ T0 P1 d% Q. P$ {& U5 K" ^
  1176. INX& N1 Z1 o- l9 l2 G% N0 g7 n
  1177. LDA #LOW(Track_Name_Pos)  S8 A6 I/ U, [; B" t" c
  1178. AND #$E06 {  V4 I) p0 }/ S' p
  1179. CLC
    ) N9 V7 O1 ~, F3 B7 G9 Q. v
  1180. ADC Data_Buf
      \" h8 ^) \* g
  1181. STA PPU_Addr,X
    8 I" ?! m) a5 Q
  1182. INX
    $ m2 u- a- E  l8 o! c% \
  1183. LDA Data_Cnt
    ( W5 p! B/ S- b3 |0 i) l7 Q
  1184. STA PPU_Addr,X
    ) l: B- \! m9 ~% \/ ^. [+ ^+ C
  1185. INX! W; G8 C  ?3 h0 J
  1186. Show_Get_Pos_Center_End1 e& p+ N% w7 S" X/ N! s
  1187. RTS
    " D3 w) [6 G' Q2 [+ h0 y* B( h: \5 A
  1188. .ENDIF
    4 |- x0 L6 D2 K1 ]7 L
  1189. + ^  ^* l" A6 N; a. \! }& o5 X" K
  1190. ;------------------------------
    ( K2 ^- e" m, b/ B' E9 f. O
  1191. ;命名表数据
    3 y+ _! ]( O& ]9 n
  1192. Palette_Attributes
    , O3 {; U* Q5 M
  1193. .IF SOUND_BAR_SHOW_ENABLE& I6 S6 U/ y1 B* z) N" D8 o( F
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    + c5 @5 L; f! _
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ) h. w  ?1 p8 l/ n
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    4 z. {  S9 a+ w" @2 J+ z, b
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    * ^2 n+ e/ \8 e
  1198. .ELSE& \, Y# Y* B! P6 P9 H6 ?5 |/ O
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00, s8 w- o5 N; M4 L! z' G; l0 X
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    8 E8 t' N' }  U: x
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55( F7 @1 i  z' t( k1 G
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ; {( g0 B8 Y$ c$ p. k
  1203. .ENDIF; ~, }& J& V5 w* r: d# D* @( A

  1204. ! n+ M( G4 P& t9 r* R
  1205. ;------------------------------
    4 A0 q- k7 I7 j& d, h
  1206. ;调色板数据
    % o) G. }) w' @7 {; o! p) V
  1207. Palette_Data
    2 ?. z- k* C% t! K
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    ; H; E5 a* x1 J8 @3 t; e
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F" m' t2 p- Y+ q/ [
  1210. , I% ]1 o. K: |" i$ c* \, A
  1211. ;------------------------------
    * f1 z' M1 w2 I! F- r
  1212. Static_Text_Data
    - a& s7 K& K; z; _  i- R- m
  1213. .WORD Static_Text_Title_Data5 {% o- c! ?: X* z
  1214. .WORD Static_Text_Author_Data0 O( s! `7 O& S! ]
  1215. .WORD Static_Text_Date_Data
    8 U  `0 s5 U6 }4 F
  1216. Static_Text_Data_End% o9 O% x9 F) `% S7 \
  1217. , l+ L' L# D# U5 i" N
  1218. ;------------------------------
    5 e; j. c' N9 A& ]
  1219. Static_Text_Pos
    2 n" j2 @3 P$ n& f4 X
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    # o2 f8 H0 p$ m( R, l' l$ O( _/ C
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)8 R& A+ f0 y' [* I
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos). r+ D( \1 o. s& s0 @
  1223. Static_Text_Pos_End' d( n% P" b; O; p1 g6 e

  1224. - C. N4 t1 |" U. E; j' ~
  1225. ;------------------------------  S  O8 @* ^3 W7 M, N
  1226. Music_State_Stop
    $ G. }4 ^8 I( K9 D: G% M$ Q9 M, F
  1227. .IF SOUND_BAR_SHOW_ENABLE2 M! F& i/ O0 k
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00$ H/ }+ R) N# K
  1229. ELSE
    , ?3 c. N5 X; |* ^+ v
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    + R, P% J4 p* U% O
  1231. .ENDIF
    & H" e2 ]0 _8 d, P" a) U) J% ~
  1232. Music_State_Play
    & e  e6 h; r; a  e1 x4 r. a
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$008 g$ v5 ^2 X2 q% M5 s& u
  1234. : q. P7 ]$ {. o, x6 g
  1235. ;------------------------------
    ! {7 H: d6 c. P% O  e
  1236. Sound_Bar_Text_Data;声音类型文本
    % L7 d+ V! i  Q1 @, Q% }
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    ) R6 _; m; V' j; c/ d
  1238. .DB "SQ1-",$FF. `+ `/ t, |" S. \$ p
  1239. .DB $FE,"SQ2-",$FF
    ( R3 q  I: h* ?" Q( q- x
  1240. .DB $FE,"TRI-",$FF. j" [% v7 R* m1 `5 B
  1241. .DB $FE,"NOI-",$FF
    4 X9 P, I1 ]0 u0 ~& W2 e. K
  1242. .DB $FE,"DMC-",$FF,$00* y( |& |3 \' V
  1243. . ^$ [6 T. P6 V: r# v# r; k; x
  1244. .IF Track_Name_Pos
    . d! D. c" b3 Y+ g0 o, O
  1245. ;------------------------------
    - M. Q  _* ~+ ]* T( C* {. E8 o
  1246. Track_Name_Addr;曲目名地址索引
    , _' I/ B6 I8 Q# c2 z
  1247. .WORD Trackr_01
    ' q- X; s& U# X" w) e; V
  1248. .WORD Trackr_02
    & h8 \5 k1 h3 Y( n& t3 x/ \
  1249. .WORD Trackr_03
    2 D% a  U  A" ?! P# [
  1250. .WORD Trackr_04
    0 |  N- C1 b4 n2 v/ P1 S6 |
  1251. .WORD Trackr_05  h8 G2 x. Z/ \, _4 }  R1 G  ^
  1252. .WORD Trackr_06! Z. R0 j4 e; B: t. x4 r; ]6 q, n! z
  1253. .WORD Trackr_075 r1 f# c1 \" [! L
  1254. .WORD Trackr_084 @6 _7 L1 b- I3 R5 n5 o8 Z
  1255. .WORD Trackr_09
    . D7 Z) t  N  D
  1256. .WORD Trackr_105 K7 g8 P2 B- q% p6 e' w
  1257. .WORD Trackr_11, X; n  q2 \0 h( t
  1258. .WORD Trackr_12
    5 S) N7 F) v+ }# K6 ]
  1259. .WORD Trackr_13. l/ O  L; S  C4 t, d
  1260. .WORD Trackr_14+ v0 k, ^9 a6 q$ I7 l
  1261. .WORD Trackr_15( t; M. [, `# m2 b, S* K  ]
  1262. .WORD Trackr_16
    6 M8 z2 t0 m) N9 B
  1263. .WORD Trackr_170 x* S: a) j+ {4 W' J1 E
  1264. .WORD Trackr_18# ^8 Z2 i8 Q3 y% K) Y7 Q8 h! @' y+ y
  1265. .WORD Trackr_191 b; o. Y5 S& M' E
  1266. .WORD Trackr_20
    8 A% ]: P% q" C7 O4 R
  1267. .WORD Trackr_213 q5 T: k, L- H  H- _) E* @- z
  1268. .WORD Trackr_22
    * _8 ^! L6 }7 ^5 _. p; e+ T+ c* S
  1269. .WORD Trackr_23" d! z5 y* W. t1 a2 m
  1270. .WORD Trackr_24
    ! }5 R' |. H% `  L" ]! K  [7 ?
  1271. .WORD Trackr_25
    & e, G3 d$ I) @" ~9 F+ e* c# w" r
  1272. .WORD Trackr_26
    & q! B) @$ B8 `& v
  1273. .WORD Trackr_27# s/ S  u% G' }, P3 N
  1274. .WORD Trackr_28
    5 z! G1 c: u7 J4 m  n
  1275. .WORD Trackr_29- Z* Y8 h* G) u( C% i3 ?& q
  1276. .WORD Trackr_30% x& Z' w; f- g% x" c
  1277. .WORD Trackr_31
    + N3 e. v. Q8 Q) R' R. I3 g, O
  1278. .WORD Trackr_32
    2 v4 a' M0 X* ?5 _4 Z5 m$ h
  1279. .WORD Trackr_33
    % L1 A* r" D6 _4 p$ U
  1280. .WORD Trackr_34
    2 J7 E1 K0 ^# y6 f
  1281. .WORD Trackr_35
    ! W5 }5 ~- G' L1 C
  1282. .WORD Trackr_36
      c/ O. `  ~% G% q
  1283. .WORD Trackr_37
    3 y% K5 Y9 G' x
  1284. .WORD Trackr_38
    3 e8 B& g9 r. v& j
  1285. .WORD Trackr_39
    4 ?, k* a3 L$ q+ @7 v6 ?

  1286. 7 P4 Y# l( x* ]4 `2 V7 L! S4 B
  1287. ;------------------------------
    ( r6 U7 t4 E3 P3 o
  1288. Trackr_Name_Data3 Z- O" |) a9 x& k7 m
  1289. Trackr_01 .DB $05,"BGM 1"
    ( B* ]2 T6 N/ N  B( ?1 x2 S
  1290. Trackr_02 .DB $05,"BGM 2"
    + o' Q: W. F0 m1 K: r
  1291. Trackr_03 .DB $05,"BGM 3"
    : j: {' U3 j8 x0 c/ t
  1292. Trackr_04 .DB $05,"BGM 4"
    , N1 a1 v: g' h4 q
  1293. Trackr_05 .DB $05,"BGM 5"1 N: t. p' w$ I7 r- w) l) S
  1294. Trackr_06 .DB $05,"BGM 6"
    9 v3 C: z4 z8 V5 ^5 ?( L
  1295. Trackr_07 .DB $05,"BGM 7"$ [2 V$ D  }* d, g* F8 c6 M7 Q3 z
  1296. Trackr_08 .DB $05,"GREAT"
    # p4 h0 E& Q. x9 i; N0 X$ a  |
  1297. Trackr_09 .DB $08,"BOSS BOM"
    & m. d7 y' v& k! \& Y" Z
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    , v: S: k/ [' ^) k: M! ~
  1299. Trackr_11 .DB $07,"P CLEAR"
    4 k/ {2 v1 s& J
  1300. Trackr_12 .DB $07,"A CLEAR"$ g7 H8 l7 `/ ^& @* O
  1301. Trackr_13 .DB $04,"OVER"/ G3 d% t) P5 v( f1 g# r& o
  1302. Trackr_14 .DB $06,"ENDING"
      x- ?' [3 _( s
  1303. Trackr_15 .DB $04,"SUTA"
    ! p: r6 p  ?8 _, b/ `# W% r: p* U# G
  1304. Trackr_16 .DB $07,"THUNDER"* E- h5 Y8 f) c0 M9 B
  1305. Trackr_17 .DB $04,"SHOT"( a4 U: {; }3 |
  1306. Trackr_18 .DB $05,"LASER"2 Z9 u1 d9 t+ e3 q4 ^  c
  1307. Trackr_19 .DB $06,"SPREAD"
    . D# O+ o" d- x7 k
  1308. Trackr_20 .DB $04,"FIRE"
    ( u* Z5 d: B. Y8 Z
  1309. Trackr_21 .DB $06,"B SHOT"
    * {. g& G0 z3 L4 b* i; C; Z4 k
  1310. Trackr_22 .DB $08,"T DAMEGE"
    & r, B5 a: W. E+ ?# h# l8 U5 X
  1311. Trackr_23 .DB $07,"HARETSU"
    ' Z; g4 \( q1 X- x. e4 |
  1312. Trackr_24 .DB $05,"T OUT"
    3 {/ t/ D( ^$ [$ h
  1313. Trackr_25 .DB $05,"Z OUT", Y6 e. `$ p5 q4 n* m9 w- G
  1314. Trackr_26 .DB $05,"A OUT"
    , j, i/ i; u, |& f
  1315. Trackr_27 .DB $04,"ROLL"6 [3 _$ Q; i% ?: Q1 p6 _4 N
  1316. Trackr_28 .DB $06,"APPEAR"5 g/ [, B! y8 E+ r2 x7 q( f" G* ~) }
  1317. Trackr_29 .DB $05,"POWER"% j; _! j, O7 T4 j
  1318. Trackr_30 .DB $07,"BOKK BK"! V1 a; \" \5 ^# w
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    3 n) ~$ n' E, F$ b4 R
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    $ d3 Q+ I/ r% _+ e  i
  1321. Trackr_33 .DB $05,"ARUKU". s. d6 \3 s& J2 X/ f. F! i$ ~9 Y
  1322. Trackr_34 .DB $06,"JIWARE"/ w; o: {! U) |/ i: l. u
  1323. Trackr_35 .DB $05,"SILEN"
    1 ]" n5 n3 E0 \/ f7 e
  1324. Trackr_36 .DB $05,"P 1UP". |  p, t8 l; S5 d: L
  1325. Trackr_37 .DB $05,"P OUT"
    " U& `9 y5 D5 R/ a7 e4 J
  1326. Trackr_38 .DB $05,"B OUT"
    ' ~" ?* T! P* y; x% Z
  1327. Trackr_39 .DB $05,"PAUSE"
    1 y) X+ _, Q  _

  1328. + W; V. _% C' g. u" ~* Z3 H6 ^
  1329. .ENDIF
    . G& k: u( a. r4 b
  1330. . K# u& A3 p/ s2 R4 t7 t
  1331. ;------------------------------- n$ A8 i- u- V& E
  1332. Static_Text_Title_Data;静态文本数据- b+ Q/ u) s- c: ?' I- g
  1333. .DB 12
    ) U8 r" `% \, d- _1 S: J& G. S
  1334. .DB "SUPER CONTRA"
    : I0 r+ z* Q2 J0 E0 w8 q& W
  1335. Static_Text_Author_Data
    + x' q( U" ]* l
  1336. .DB 236 B& U% y- f, X2 E0 @
  1337. .DB "EXTRACT BY FLAMECYCLONE"- d' F, [+ i. Z& b3 b
  1338. Static_Text_Date_Data2 k2 F( S! q( {: L
  1339. .DB 105 ~/ J; I" o* U% e  E
  1340. .DB "2023.07.11"
    # _  k, ^1 ~4 W2 y
  1341. - T+ A1 f! A, \- S) r
  1342. .BANK RESET_BANK & BANK_DATA_MASK8 |6 U, i" P' v. }8 p. A
  1343. .ORG RESET_ADDR
    $ \6 f) K, c$ r4 y7 _& Z
  1344. 1 g* d9 a! Y' F! e) G
  1345. 9 ?! H  s& U& }- N2 W5 Q
  1346. ;==================================================5 S3 w2 G/ ?% e$ ]
  1347. ;切到主程序bank8 d$ i  b, h/ f+ {2 }& Y2 m1 I2 ~
  1348. SwitchMainBank" \# A+ t+ s1 _6 Z% y# J4 C
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK* d0 Y$ t  |5 A' J% u8 i
  1350. JSR SwitchBank8000
    0 ]# T2 L( f5 p
  1351. RTS
    2 B; D$ d* _1 c& P8 V% [

  1352.   J$ T: W0 p9 \
  1353. ;==================================================# W/ ~" p# e& r& i, G2 `
  1354. SwitchBank8000;切换bank到8000-9FFF2 X/ c9 I( t3 \2 S
  1355. PHA0 ]* s- S$ a" u  e: J
  1356. LDA #$06
    8 O/ p, z+ \5 O- q$ T1 Z
  1357. STA MMC3_BANK_CTRL
    , [2 n) u" v  b- S* \9 Q# x% H' _: Q
  1358. PLA' o0 k$ D, a% [$ r% \0 Y  o8 X
  1359. STA MMC3_BANK_DATA
      A/ r  I. L7 k
  1360. RTS/ K4 K1 y- c, {- v

  1361. $ Z9 c4 `. F5 z' A5 `
  1362. ;==================================================
    1 d1 d* U, Q; Q3 M# R
  1363. SwitchBankA000;切换bank到A000-BFFF2 h1 U/ ~9 i$ p( M; R& X7 x5 V
  1364. PHA0 |- ~* O) b6 F3 O
  1365. LDA #$07/ |0 x: j8 Q- d* w% g: h
  1366. STA MMC3_BANK_CTRL
    ( `* L& t4 ^9 c$ D9 g) {. X
  1367. PLA
      p: q5 Z. L/ @, K
  1368. STA MMC3_BANK_DATA6 T6 R( A8 \6 t* K
  1369. RTS
    % @! e9 n2 i  `! U1 W

  1370. 1 |( l. g9 E" `  `3 u9 x
  1371. ;==================================================
    0 }3 x* Y7 {7 w0 C4 B% ~
  1372. Sund_Bank_Init;音乐bamk初始化
    ) T+ _9 A/ t/ u" ~0 i7 e
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    : {- f) ^0 J, \9 l! s; K
  1374. STA Music_Bank_8000
    ( l, v) H0 G6 i, ?
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " _. D, X$ v" L* f4 o
  1376. STA Music_Bank_A000
    4 l: P. g" X# a/ O. ?. c, _
  1377. RTS
    9 g$ F4 x+ m  W7 L

  1378. 8 @; Z, A# H0 E6 c* Z
  1379. ;==================================================  A& v3 m' x2 ]1 D% M3 H3 W$ b
  1380. Sund_Bank_Set;切换音乐bank9 G5 B% ?9 @1 R, U1 q
  1381. LDA Music_Bank_8000
    ! v( [6 L( f4 M; X. S
  1382. JSR SwitchBank8000
    5 M3 h4 t" m! O, Y
  1383. LDA Music_Bank_A0003 C# g# u7 N- n. i( ^
  1384. JSR SwitchBankA000; Z7 ^: B, m1 H
  1385. RTS1 M( j6 h  D9 q6 \) y+ V6 c
  1386. 0 p- N. n) f; Z# o
  1387. ;==================================================
    8 N" t3 u& m  n
  1388. Sound_Init;音乐初始化
    / z& T- h; G* [$ p9 o* @( P
  1389. PHA
    # H3 t% D6 x4 d# D, \
  1390. JSR Sund_Bank_Set; U, S7 @  r2 R0 }
  1391. PLA
    $ \; K0 P; v" C# b
  1392. JSR Music_Init_Addr! M% Q0 I1 r1 I1 e- h2 O
  1393. JSR SwitchMainBank1 y( _3 _5 _1 o+ i- d+ U: o& @
  1394.   I$ O+ j# _6 X+ `% H
  1395. JSR Music_Bar_ReSet
    6 ]- p( q0 g# _2 U& V' n
  1396. JSR Time_ReSet  t# g: y3 v* G5 C1 p* y0 d
  1397. LDA #$00  T/ \, o4 o# y3 d8 i, b- f
  1398. STA Music_State
    / e/ B; D& I3 o/ h! Q1 T) g3 }/ G
  1399. JSR Music_Stata_Show- B' N8 @& F2 ~! o
  1400. .IF Track_Name_Pos
    & F1 d# b- U. H2 u& ]  f; O8 x
  1401. JSR Show_Track_Info0 v" T7 h! q2 E7 }3 [6 \7 p7 Y) D
  1402. .ENDIF
    * O( W- `7 N- S: }3 ^' Q
  1403. 2 I" o  m0 j  y; ]2 l7 u3 {% R) K2 u
  1404. RTS$ `# t' B6 D- u% f/ B% k
  1405. 7 P) O" M: @* [3 m3 P) O
  1406. ;==================================================# y- o0 m/ ~- X/ b8 |; }
  1407. Sound_Play;音乐播放
    8 _) [# |$ ~. c2 U
  1408. PHA$ Z  H2 w" F! ]6 J
  1409. JSR Sund_Bank_Set
    7 u1 Z+ m  j# m5 z5 [$ F
  1410. PLA
    5 u$ w* v$ E: a* l+ G
  1411. LDA Music_State
      A" Q. H+ P8 ]5 q% p. g
  1412. BNE Sound_Play_End
    + v8 ]' {, ^1 l' E
  1413. JSR Music_Play_Addr3 n. _4 y" E+ P
  1414. Sound_Play_End1 e0 v6 Q" i" q3 N( y
  1415. JSR SwitchMainBank
    ' o6 o1 Z- g1 R+ J
  1416. RTS
    3 }9 \. l" y! H1 G. }

  1417. / p5 Q, c6 A! G: i/ O9 Q6 F
  1418. ;==================================================
    : m5 ^& t7 n: A$ Z" z9 ^/ f
  1419. .IF Music_Reset_Addr# ~6 v; g! g+ I  e1 J  ?
  1420. Sound_Reset;音乐重设(如果有的话)+ D! ]. H& ]- D- H. _
  1421. JSR Sund_Bank_Set
    ! j' _1 l# o7 ^1 o( g# A9 e( k
  1422. JSR Music_Reset_Addr) Q  q& y- d* o1 L  f$ j
  1423. JSR SwitchMainBank( T6 l/ j. h0 p
  1424. RTS
    ; G2 m, w9 Y. z8 E
  1425. .ENDIF2 Z/ I9 [: j& T% c2 [7 }

  1426. ' K5 ?' B/ f. e: R
  1427. ;==================================================
    ( x. L5 y) z2 G2 X" h8 n
  1428. MainLoop;死循环
    / H. L! ?) ?1 ^- P* b  Q
  1429. JMP MainLoop
    0 O1 u' F& U/ L2 X
  1430. 8 Z# ^$ S6 C8 G5 s/ [9 j3 f
  1431. ;==================================================5 J" e* g  z! M1 F5 S" Z: q
  1432. NmiProgram;Nmi中断处理
    " R7 E$ t+ q8 {  R' h3 `
  1433. PHA( h0 {6 n; j7 g$ u  e
  1434. TXA
    5 ^3 E+ s8 F8 d5 \1 W, l2 F" C
  1435. PHA
    " _- g- Q. S$ K  Q: `2 p9 P
  1436. TYA4 e0 P1 @5 h- s$ @
  1437. PHA
    8 w1 R$ H; f3 q/ n

  1438.   p: ~8 `/ v/ ~3 e3 }0 w+ o
  1439. LDA PPU_STATUS( n+ G: h. n2 W
  1440. LDA #$00
    + t0 a( e2 I- C7 s0 h6 y3 Y
  1441. STA PPU_CTRL
    7 {! [# Q6 F: ?2 Q, d+ N* v

  1442. ' ^( h5 D" M+ i# l2 X; D
  1443. ;切换主程序bank# Q( W; n' b8 K4 n9 d$ A5 t  ^% a
  1444. JSR SwitchMainBank
    $ \& U5 l& h; V+ B
  1445. 1 U0 ?' v$ I: Q3 `$ h+ e
  1446. ;NMI处理
    6 {5 k: A% E/ d) s1 x, {
  1447. JSR NmiProgramProcess8 u2 s5 v- g' r- Z+ D$ q" a

  1448. 7 L) s7 S: @- H8 t6 Z1 J% k
  1449. Nmi_Proc_End
    - R. e, {5 {- {8 m, ?" H" g1 X, _
  1450. PLA
    & T) @. q; \+ v3 J/ r7 B0 L
  1451. TAY
    9 A4 D9 D3 }& d& ^
  1452. PLA" Z, E* h* n! g) c$ p# B
  1453. TAX
    - f4 I4 ^2 X5 H
  1454. PLA9 a* ^: V" }# Q, d1 `4 h
  1455. 5 x" D* k. k# b8 N  V  O. D
  1456. RTI+ ~. w1 @6 d+ j' r' N# k
  1457. . G* O+ x+ f$ K- C+ w
  1458. ;==================================================, I6 e( O/ f3 W4 x5 h/ v4 P1 t
  1459. ResetProgram;重置中断处理
    7 `! r7 l$ J  s
  1460. SEI
    0 L) G0 N7 x( P$ Q0 l
  1461. CLD
    ( U7 W9 P7 k/ }- N/ e& v
  1462. LDA #$00& r3 j* G0 C8 k+ W. Z
  1463. STA PPU_CTRL( B) M! l$ p% \1 x- S+ ]
  1464. STA PPU_MASK$ p8 {" @; w$ f8 ~8 G/ z( G& A; N* E) q
  1465. 3 T7 p8 H! q# R) q
  1466. JSR SwitchMainBank8 y  T3 Y7 [  v- s( x0 X) Z7 A% K" {
  1467. JMP ProgramBegin
    ! r8 g# X  T: Q

  1468. 1 L' w1 {  r/ G( r8 V) Q/ c2 J
  1469. ;==================================================- R2 E1 ]4 A/ b3 ?4 c
  1470. IrqProgram;Irq中断处理
    , Q/ t8 ]- f+ b  C* C4 `9 J; w8 [
  1471. RTI
    7 K) L; G5 Z+ `, f
  1472. - K7 c% W+ a8 Z) J+ O
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ' b6 a8 B; a1 J4 ~
  1474. .ORG $FF80
    3 ?1 Z3 P, Z8 J; n6 a- _9 [5 J6 ?
  1475. STA $4000,X
    3 M$ m' H7 K! P3 p
  1476. STA Sound_Bar + $00,X
    : B2 l; P, w8 d% L5 t2 L
  1477. RTS" r8 C! u! l6 k1 j" h+ u* b/ O8 `

  1478.   L4 h  p6 I% s  R* x% j% D
  1479. .ORG $FF88
    & e2 V/ p2 B% N
  1480. STA $4000,Y' L" V8 q& f# `
  1481. STA Sound_Bar + $00,Y
    - A; y% `$ {# F3 w; r3 e+ D. N
  1482. RTS
    # @- X1 s- Z. ]+ W9 P. F4 g& K
  1483. 7 Y0 e6 l! S( F! ]  A
  1484. .ORG $FF90$ V3 F( b3 d2 r0 J) e1 A: K
  1485. STA $4004,X
    0 A& Q( {2 c! U; G
  1486. STA Sound_Bar + $04,X. q5 E! o) K) v. C( d/ ^
  1487. RTS" K9 W) F! l1 S
  1488. ) R" K% H9 P1 @6 ]8 p
  1489. .ORG $FF987 P2 D9 Z- `+ U0 k9 `: B) m; K
  1490. STA $4004,Y& O  ~: n; @: x3 [$ m
  1491. STA Sound_Bar + $04,Y
    - }  i0 V2 I% ^
  1492. RTS
    , w+ u/ ~! {) p2 ?

  1493. " y* n1 P3 M& p. G8 i1 l' U
  1494. .ORG $FFA0- S3 S2 t, s, l( y' R
  1495. STA $4008,X
    4 }0 w) t& J. @% E1 e
  1496. STA Sound_Bar + $08,X
    ) [8 M, K; }. z8 {/ ~
  1497. RTS
    . E! K0 Q3 }5 n7 A+ Z

  1498. 0 ~" w3 X' _/ K/ m
  1499. .ORG $FFA8
    6 ?9 S  b# b7 W2 ?! W* M* j
  1500. STA $4008,Y. ^5 `0 N! z# A: H9 ^
  1501. STA Sound_Bar + $08,Y
    * `, w! n6 C7 T$ k* X! b" {, V2 Z
  1502. RTS
    - O" B* c1 w/ U# G- Q( a

  1503. + l$ g, L6 V: [! |
  1504. .ORG $FFB0) L5 A$ E2 r  ^
  1505. STA $400C,X- R$ z- J) R% G4 B. B* o' f
  1506. STA Sound_Bar + $0C,X
    9 `! b/ Y8 v+ X- h' V, [
  1507. RTS
    % H8 U1 s+ I, s, L& M+ g. ]' w
  1508. & M# v% z* A; E6 a
  1509. .ORG $FFB8
    4 {4 n# l3 k; _1 c
  1510. STA $400C,Y3 i! _8 |! D; J" t+ T2 \
  1511. STA Sound_Bar + $0C,Y: x& E5 {$ S9 q; _5 ?
  1512. RTS7 Q( v3 Y! x3 L) D8 v) [" K' s
  1513. 8 B0 r* z' B, u' F* v6 m) ]
  1514. .ORG $FFC0
    % _# O, P4 l4 f* F
  1515. STA $4000
    0 Q" f# _. H1 k/ F# ^2 D
  1516. STA Sound_Bar + $001 {. z- p- E6 |3 D/ V
  1517. RTS. K. }) @" E7 M0 c

  1518. - w5 \. T2 n3 L* K$ V5 H1 R- P8 D% R( q
  1519. .ORG $FFC8
    ' K3 B0 X0 U" G7 ?6 V) s7 e. ]: w; b- e
  1520. STA $4004
    0 q5 u/ l, C% e3 W$ N
  1521. STA Sound_Bar + $046 J+ C: H3 o+ X7 L5 L
  1522. RTS
    6 M/ d- ^9 }1 o) V

  1523. ; u8 z$ I9 P, P0 U8 b0 Z! L
  1524. .ORG $FFD0
    / A' j, ~" P/ T
  1525. STA $4008
    + W! P! T+ m) Z2 r2 K
  1526. STA Sound_Bar + $08
    $ v9 Y: O! \6 {5 ~0 K! O+ m
  1527. RTS: }9 _$ T' Y. L9 Q0 D' p8 t
  1528. 0 o1 X  m( e  Z3 N9 ?0 k1 E
  1529. .ORG $FFD8
    0 C4 l$ G* I3 I- m& d
  1530. STA $400C
    + Q! r! g1 k$ E5 r6 d( J' P
  1531. STA Sound_Bar + $0C/ b, k8 c& ~4 _
  1532. RTS
    ; e/ Y$ ?/ ?5 T$ j) o" G0 b
  1533. 5 M" F' t$ Y% ~  G
  1534. .ENDIF
    9 \0 s5 n# i& g/ f- ^0 y

  1535. # J4 @( A# @6 _2 \0 ^2 j
  1536. .ORG $FFFA+ F$ i: N* B5 S5 X) F
  1537. .WORD NmiProgram
    ( v* L5 l! s" ~& k
  1538. .WORD ResetProgram7 c1 {7 B& @% U
  1539. .WORD IrqProgram
复制代码

" R+ l4 \& `; V  v1 t
" D6 W) L0 D, k# i7 Y; a+ b
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1324 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3320 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 04:46 , Processed in 1.097656 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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