EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
# \! s& o- s0 [1 N3 h# d
/ }) v) l6 }- I' P7 Y  x' N" U; s1.魂斗罗
4 f( g. Q5 t4 j" l2.超级魂斗罗
& V6 T3 |' o4 y! |! F# n3.赤影战士
* Z+ I8 f7 ?% S" {6 @+ H4.忍者龙剑传2
3 h2 v/ @3 b* U' n" j
9 _2 P) X+ v0 p8 k8 O/ ]
8 }) ~, v" Z% U' s) H0 }8 r" \
6 I) V- O, i+ G! E! d/ I3 U) K& o* B, h2 u' v
源码:
: X  R* ]( @. t6 J* S
  1. ;[FC音乐][播放器模板]- p5 n. T0 H3 @; ~4 t& B3 B
  2. ;FlameCyclone 202307101 Q5 B( v/ y9 b. d) K7 u& B0 F/ g

  3. % P9 [' k1 M( @. J
  4. ;文件头' V7 l8 l& n; h# X% U) S% |  Q
  5. ;======================================================================9 Y. q. U* C1 S: s/ H
  6. .INESPRG 4                                              ;16KB PRG 数量
    9 d* _  y% R" ~: V1 y% J7 G+ a
  7. .INESCHR 0                                               ;8KB CHR 数量# y* r$ h7 S2 m
  8. .INESMAP 4                                                   ;mapper 4
    3 c; [4 e. c8 u* w/ c8 F6 Q0 ]" q
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直5 N4 L0 i2 h; J% I4 |
  10. 8 k# I% l9 O% w) j8 V# w
  11. ;==================================================3 {5 W) [1 V+ G1 N
  12. SOUND_BAR_SHOW_ENABLE       = 1  n9 Y  \. K4 a2 z: W+ Z5 p0 n
  13. ;==================================================, V& L$ `, A$ d6 i+ R2 E: Y' y
  14. BANK_DATA_MASK              = $07
    0 I4 m8 u/ _+ m5 O* z& D% ]) x2 Z
  15. ;==================================================
    ( d1 I3 t2 W2 E
  16. SOUND_DATA_BANK_0           = $00
    . N' u4 L- P  `( c# |. [
  17. SOUND_DATA_BANK_1           = $01( V6 d8 m1 W: s$ V% Q
  18. SOUND_DATA_BANK_2           = $02! O% J' m) w5 K( z! C2 _% q- W
  19. SOUND_DATA_BANK_C000        = $06
    ! x* M- }5 g/ Y9 ~# P" s1 E

  20.   h0 H+ k. r) ~* `9 k8 `! l4 l7 s
  21. ;-------------------------------------------------
    3 C1 L; @7 V, u- X, Z" ~4 W
  22. CHR_DATA_BANK               = $04
      Y: K0 ~, g# ?  c
  23. CHR_DATA_ADDR               = $A000
    4 v$ O: v, D1 V5 _( G7 M6 H5 f
  24. ;-------------------------------------------------
    7 \% z. z9 R, A) W5 r7 V/ U
  25. PROGRAM_BANK                = $05, ^- K0 ?7 x2 w/ r4 {
  26. PROGRAM_ADDR                = $8000
    # `, w7 w( H; o  a
  27. ;-------------------------------------------------+ ?! J5 z  w% ~3 ^8 f2 y
  28. RESET_BANK                  = $07
    $ J' C6 @/ N. T6 f: e
  29. RESET_ADDR                  = $FE00
    & }( _' K! P7 ^3 Z6 r0 z# B' t
  30. ;==================================================
    ! g( b: ~4 q6 o& B  o+ h
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
      i4 H/ K" @& Q0 C2 s2 u& F& u( g& T
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ( m/ E% e* r+ u7 F
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址3 Y4 I- t3 y( ~9 I6 G& M; Z  Q' q
  34. ;==================================================
    / |1 G8 [! y5 p3 Z
  35. Music_Song_Total            = 039  ;全部曲目总数9 W( n( Z# K  U- C+ x
  36. Music_Start_Song            = 007  ;初始播放曲目# q& C5 b2 e# r+ l
  37. ;==================================================# D! B, R0 J9 \; Q; Q. F

  38. 3 G0 U1 @+ w5 Q( {( O' F. e! R, r
  39. ;==================================================
    * f/ o, Y& R7 r8 z  K  z
  40. Title_Text_Pos      = $210D ;标题文本位置% F5 Q# G9 ]0 u% \9 p: C: L# x' _/ E
  41. Author_Info_Pos     = $2284 ;作者文本位置
    1 X+ D5 P2 [. R% L% k
  42. Date_Info_Pos       = $22CB ;日期文本位置9 m( _8 S8 K" D/ X+ k1 S
  43. ;------------------------------
    ' k1 x, ~( H* n5 O5 K
  44. ;------------------------------& b$ q# v; l; `* }+ @
  45. .IF SOUND_BAR_SHOW_ENABLE7 A: s" S8 |" O& ~( s! ^1 D
  46. Play_Index_Pos      = $21B3 ;当前曲目位置. y! d* X+ y( A2 {7 s+ V7 L. A) J
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    7 \' A8 O( z& o0 a8 P- t
  48. Play_State_Pos      = $2233 ;播放状态位置, {1 o) H  I) W* F
  49. .ELSE0 m: b% R8 A& p6 \

  50. 1 u4 s. y) I8 r# a
  51. .IF Music_Song_Total > 992 u( V6 [' t  f' O+ b
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    " {7 z/ K1 z5 n  r
  53. .ELSE
    . ?( ?0 C: Q: H3 ~$ N( y
  54.   F" L3 I6 {- {4 b! b7 _) d% }! g
  55. .IF Music_Song_Total > 9& X- I7 h" [+ K  k: `+ ^3 n
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    / z9 l& H: {4 _4 t  k* F2 N
  57. .ELSE
    % G6 W" S( s$ q  I: g- P
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    ' g' F$ L1 f" }) _  V6 q
  59. .ENDIF
    % k8 [! Y: o5 Y; o. M' C! j
  60. & |5 s, O2 T: k5 e5 L6 q5 L  ]2 u
  61. .ENDIF
    3 E. |: j- b/ U+ g/ E; H( ?- p, z

  62.   {  ?% V2 S/ g+ f# T: _  c

  63. 3 r  N/ ]3 r+ ]# J- f  r4 i2 {7 J4 Y
  64. Play_Time_Pos       = $21EC ;播放时间位置
    8 Q7 P# }/ c* H. L  Q4 O3 f8 b
  65. Play_State_Pos      = $222C ;播放状态位置0 N# c7 ~  }) h7 _( E1 A
  66. .ENDIF
    . {% k! r" W! [2 K  p5 d1 t
  67. ;------------------------------' h- j; l, q9 ?% K
  68. Track_Name_Pos      = $216B ;曲目文本位置
    & n# S& G8 n5 w# A# x5 M, a) e# ]
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    1 `4 e3 \! z9 r; t8 r( Q# N& d
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    5 r: ]2 @6 i* ~1 E5 C. k: F
  71. ;==================================================1 e2 f6 \3 f9 G$ F9 ^0 Y  ]6 W
  72. Scroll_X = $00
    - H9 E2 W8 [' f& ?1 c
  73. Scroll_Y = $06
    ; ^* d! Z- H; |" l# a
  74. ;==================================================( [8 k5 i$ v/ }4 x) t9 T1 W, s
  75. RAM_Cln_1       = $0100# g) x8 u: d% f- T: A" @7 [
  76. RAM_Cln_1_Size  = $80. c$ y/ I$ t: _$ o
  77. RAM_Cln_2       = $00E0
    " N- s8 [1 i7 }  x# @
  78. RAM_Cln_2_Size  = $202 p* H: b& p/ n3 |7 u
  79. RAM_Cln_3       = $00E0
    & _! B% y8 Y) |  J, W
  80. RAM_Cln_3_Size  = $20
    # j0 V6 a1 @" I3 v

  81. . ~& R2 {6 `: U; Q$ ?5 [
  82. ;==================================================" r& U4 b0 Z) H3 h' w# z" ~1 N! C
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器2 Q0 H2 X5 x8 ]1 F
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器- w6 o8 }4 Q* b; \5 b
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    3 h7 X$ x3 f: h" C% O
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # Y) r  S" v1 X1 i. [! d$ [
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加16 ?0 @" p: x8 ]/ k" P1 s
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    ; e) g0 G" D) |; ?9 t) h- h" e4 `
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    : l* o/ P8 n' u9 ?
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 1 r6 M. p+ ~& j! V! [
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    , R( n  K+ y& q9 ~; T" O+ X( O* D1 ^) P, Q
  92. APU_STATUS              =   $4015   ;声音通道切换' Q& X* S* E  }6 ?& i, {9 ^
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    8 ?$ C: d, i3 C7 j4 W3 U
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通1 B5 E' y; ]- k3 o& M; r
  95. ;==================================================9 ~8 L4 }8 [. U  u. E; c9 a" F
  96. MMC3_BANK_CTRL          =   $8000
    * K- I# k/ l/ {0 A  c) m
  97. MMC3_BANK_DATA          =   $8001/ G2 I+ L+ u) Q- ^
  98. MMC3_MIRRORING          =   $A000
    7 v$ }3 e- m8 a  B3 b$ F2 k6 I
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    " ~3 T/ u, ~) j9 n
  100. MMC3_IRQ_LATCH          =   $C0001 Y9 O  U  x. {/ M
  101. MMC3_IRQ_RELOAD         =   $C001
    4 u( f& y: A8 \! l3 H
  102. MMC3_IRQ_DISABLE        =   $E000/ R! m& w4 Y2 o) P5 ]
  103. MMC3_IRQ_ENABLE         =   $E001$ e9 H, d. F) C/ T+ h
  104. ( P% J5 ~" i; Y; H/ W4 u
  105. ;音乐数据块2 G' n, X( D3 @8 g
  106. ) a2 r+ S6 ?4 @
  107. ;======================================================================) q, s1 N% c* @; }
  108. .IF SOUND_BAR_SHOW_ENABLE( O1 l3 {8 v: D7 t/ f
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    5 l: F9 [, h5 G+ ~9 ?
  110. .INCBIN "sound_bank_bar/music_data_0.bank"8 _6 Z8 |# l1 P' Q3 C
  111. + |  s- J* u" H& p
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    + `  K; i6 _2 p$ h
  113. .INCBIN "sound_bank_bar/music_data_1.bank"* Q" u/ G  I# C5 p

  114. ' {% k: ~8 z6 c% E. o5 d. x
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK  U; A9 T; g; k, G
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    7 ^0 ]  g7 _- C% H. \) U9 J

  117. 1 g7 Q' T. V; L0 y6 O) {2 s
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK! ]- l/ }' F6 u. q8 Z( g+ O
  119. .INCBIN "sound_bank_bar/music_data_3.bank"3 n8 @1 k" A3 b* N" Q8 V5 B

  120. 1 W/ [0 Z  p; t3 q4 f/ L1 y
  121. .ELSE
    9 W" F2 `) ?& Y
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    # q' B; q( L% {# A/ }3 R
  123. .INCBIN "sound_bank/music_data_0.bank"8 ?, u5 G  N/ U; ]& r+ [
  124. 4 y: Y# w  c' i& f7 ^
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ( [9 ?% K/ u4 k: H5 S
  126. .INCBIN "sound_bank/music_data_1.bank"' d: P4 \* m% z! F& D

  127. ; f$ E) R# S+ H8 s' X: D  y/ L
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    & g) ?2 R6 n% V; T4 Q
  129. .INCBIN "sound_bank/music_data_2.bank"
    ; `1 V0 ]6 `, M5 \

  130. 4 F; t2 D! h% ]- R: K; ~/ K
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    % c* J0 c! {+ q: x  {0 \' h2 i" W
  132. .INCBIN "sound_bank/music_data_3.bank"
    2 z7 d. _- h  [6 m  v2 i$ y
  133. .ENDIF
    5 q4 c4 D# z% `3 }  @) n0 X

  134. 6 }% X% ^# f5 F
  135. ;CHR图形数据& b1 ^7 ^, c" C6 p' F% Q8 q) U5 w" N
  136. ;======================================================================+ ?7 W7 N/ y' A/ Z9 W( J
  137. .BANK CHR_DATA_BANK/ P* a# A# M- D4 {8 j* a3 P
  138. .INCBIN "chr_bank/chr_data.chr"
    : @8 x- t: i0 X

  139. + X; k( [0 N$ F4 S; N# l5 }
  140. ;==================================================5 Y% p; V! L8 Y, F' G4 P
  141. PPU_Addr        = $0300
    1 }) e8 _3 b5 C3 W$ l5 R
  142. Palette_Addr    = $03C01 i7 l5 v. r3 x) p
  143. Sound_Bar       = PPU_Addr+$E03 N' [# y( W7 Q8 O: l4 t
  144. ;==================================================
    ! W2 Y) ~# ^  Q6 Q' \
  145. Palette_Update_Addr     = Palette_Addr+$0D  l. j9 Q8 A9 o* ^
  146. Palette_Update_Max      = $2C
    9 ^( k2 N: ^8 w  P0 E
  147. Palette_Update_Min      = $21
    ' w1 d5 e% C: I* C
  148. Palette_Update_Interval = 60, m) a4 Z' Z4 i; a# ^. y4 Y7 z8 r+ o
  149. ;==================================================
    * y2 g. t: [$ z1 p! X% k/ i/ D5 A
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    / Q! J; S- d( @: l5 B% C* e* \, K% H
  151. Screen_State        = Sound_Bar_Cnt+$01
      C" C# s- P$ n7 L8 {! @% t3 C
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    " W: l0 L# I/ h1 o+ g
  153. PPU_Addr_H          = Sound_Bar_Cnt+$034 C$ h  c# @: W) j+ e
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04& i) A. E0 C3 @! r- }0 d3 U9 }. O
  155. ;==================================================6 S$ d4 X: K. |/ h
  156. Data_L              = $70! O6 k$ R, G$ d& t
  157. Data_H              = Data_L + $01
    ) v2 x& [( F+ u# ], |9 G; X3 \
  158. Data_Cnt            = Data_L + $02, U" U9 f) K$ G* n6 X& F- Q2 @
  159. Data_Buf            = Data_L + $03# D7 J/ d& {8 \# s2 k4 _7 H, K
  160. Time_Wait_Cnt       = Data_L + $04
    " Q2 P. [. v9 w* w7 ^7 F
  161. Palette_Wait_Cnt    = Data_L + $05. X( _, ]' Z  [$ T- ?$ M4 [+ r& T2 k
  162. Palette_Update_Flag = Data_L + $06
    ) D2 @. g8 J! x! A* H; U
  163. Show_Track_Name     = Data_L + $07
    5 U2 ?8 `# U. f" I. }& L
  164. ;==================================================
    6 k# ?7 Z  m+ t0 X) A* f' P
  165. Key_Keep            = Show_Track_Name + 1" e( d6 x' `, b; v9 Q1 D
  166. Key_Once            = Key_Keep+$01
    # ]  m( M: G0 n2 g" X- o2 _
  167. Key_Kemp            = Key_Keep+$029 x# U9 F& x5 P' `8 z0 ~( s7 o
  168. Key_Temp            = Key_Keep+$03, ^" U8 A/ H; {$ ^* G
  169. Key_Getv            = Key_Keep+$04/ ~3 V  V/ C7 q. E! q, B. ]
  170. ;==================================================0 k$ t4 Y+ g3 [
  171. Music_Cur           = Key_Getv+$01& g6 f1 @- M7 A9 ?2 {2 ?& B0 e; D
  172. Music_Last          = Music_Cur+$01
    + H2 \" A$ y( u" H
  173. Music_State         = Music_Cur+$02
    * n7 l7 N; }7 E3 i
  174. ;==================================================
    ' w) {: m- ~0 O% V2 I/ m" R
  175. HEX_Data            = Music_State+$01( }" Z6 ~5 G5 i; N0 E" g( }  V/ _" \/ R+ [
  176. DEC_H               = HEX_Data+$01
    , W5 O1 D, b2 X
  177. DEC_T               = HEX_Data+$02% J' p, j+ ~: x0 m. w, V
  178. DEC_L               = HEX_Data+$03% h) Y8 a5 U# m) l+ {
  179. ;==================================================
    ( H+ D" R, {( `2 X% N/ b
  180. Time_S              = DEC_L+$01
    ' K, Z1 |" E2 ~* t
  181. Time_M              = Time_S+$01& R9 l$ J1 C8 M: C1 |5 \
  182. Time_H              = Time_S+$02
    5 {* w7 y) \, d, o
  183. Time_Cnt            = Time_S+$03
    $ P1 ~1 Q5 {, [* L

  184. $ [; i, c$ k7 Q, H) S
  185. ;==================================================
    & C! O: q3 `; |; h
  186. Music_Bank_8000 = Time_Cnt + 1# p0 p* x$ a6 _# D# `$ [
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    9 v8 p5 h6 l% w) _4 P
  188. ;==================================================0 U( R% H& Q- Y7 G  k  Q+ p

  189. 9 \4 t0 h9 }- P6 n2 R) r2 Q
  190. ;======================================================================
    ! d7 G. z0 Q$ t( `
  191. .BANK PROGRAM_BANK
    5 [/ J- d8 c4 s; {- \$ B- L9 g6 C
  192. .ORG PROGRAM_ADDR% ?" I) v: ^4 `0 v" l
  193. ; c3 `6 p2 n+ v' k; P4 N
  194. ;==================================================7 ]# |+ h6 `6 U8 c+ _( ^
  195. NmiProgramProcess;NMI中断程序处理
    + W$ D; }! c. [; j  Q
  196. ;处理PPU图像4 V/ G1 |$ k* `0 w
  197. JSR PPU_Proc
    & v7 T. E- _+ x; V1 S& ]
  198. 3 U7 J8 F& Z4 _0 x1 c' p
  199. ;启用NMI中断; ]; g$ _/ D, K. B5 G- v0 i3 D# z
  200. LDA #$80
    : e5 D" C! y0 l' c% v
  201. STA PPU_CTRL- u" \8 h, s  [0 J. i% |7 i

  202. ; ^2 v/ q5 V3 l- |1 O4 P- \
  203. ;更新调色板- ?/ O$ N5 t& f+ L# {4 G
  204. JSR Update_Palette_Data
    . ]6 ?( J0 U3 B

  205. % d: g' c1 M6 G  ^& L. ?9 f. [
  206. ;显示时间(缓冲)% K+ A2 `" v. x/ S, W. ~
  207. JSR Time_Show8 G) W# [/ I3 ~! Z: ]* {/ N

  208. 6 }1 u) v+ h2 l8 Y$ f
  209. ;播放计时
    # |1 z4 @6 Y- M
  210. JSR Time_Count
    7 s7 `3 ^  W/ `) Y
  211. - Z' `- Y; d: D% R% s& Q3 V
  212. ;播放声音- r" T6 v' I! C* S
  213. JSR Sound_Play
    $ W+ T& \6 Q" J1 h9 |
  214. " T$ v+ y& r; R8 q8 u$ w. D. i/ n$ P
  215. ;切换音乐(手柄触发)5 h+ q: s/ d/ S
  216. JSR Music_Switch
    4 `# w$ u( S; A* x, O$ \
  217. ( h3 [5 Y) @8 R+ G! T
  218. ;音乐显示(缓冲)3 }! C$ R  y& r- ]* f# P. {; `% _4 ~
  219. .IF SOUND_BAR_SHOW_ENABLE
    3 s' M- N! h9 t
  220. JSR Music_Vision
    ( s* O, q: |" y+ ^' ^- H  i
  221. .ENDIF
    - t9 B9 ?( A6 |' H8 P) a2 q

  222. * {+ O7 ~: F# |
  223. LDA Time_Wait_Cnt
    / F. p' l' ?0 A
  224. BEQ NmiProgramProcessEnd: e5 i5 K; v/ Q+ l  n
  225. DEC Time_Wait_Cnt
    + Y6 p( b' }5 k& o: y" Z9 ?
  226. NmiProgramProcessEnd6 M7 u8 T0 f$ \+ M7 Z
  227. RTS
    2 M9 M1 `, ~1 c, M

  228. " B( v9 ]6 Z8 i0 C# i' Q
  229. ;==================================================6 ?  D5 P/ J0 A: D: r$ ], I6 K
  230. ProgramBegin;主程序
    0 L  n/ t& v$ d3 X+ B
  231. LDA #$006 [# m5 d, J! V9 }  u
  232. STA PPU_CTRL
    , }; N5 p& \7 n0 d8 v9 P" i% ]
  233. STA PPU_STATUS( M* G6 m9 J: t( Y: f
  234. STA PPU_MASK6 S# V0 u/ ?  ^+ c5 `% Y
  235. STA APU_STATUS
    0 P4 g& J9 B, V8 \% d6 X0 P
  236. STA PPU_SCROLL
    8 [4 ]. ~5 I. T' [. ~& Y0 }
  237. STA PPU_SCROLL
    / h, z/ [# Z3 W
  238. LDA #$C0( H$ T* t& o& m' J: C
  239. STA JOY2_FRAME
    $ L. B" W) N8 ]- e

  240. & s) v: G4 E. R' m& V: b5 g
  241. LDX #$FF
    9 w8 _2 f: ^" y/ j
  242. TXS
    : o7 X/ Q. S! m
  243. LDA #$004 `- `& z; v3 Z$ q( z* u8 z/ m! `
  244. STA PPU_CTRL
    3 o( z% P) x2 L
  245. STA PPU_MASK" e# O4 `$ [: J
  246. STA MMC3_IRQ_DISABLE
    % u% S: @6 a; |0 \- T. p, w
  247. $ D( C: d" X7 @- u( n2 R* I) b
  248. ;==============================
    1 @( w6 C6 K6 Q- {3 C
  249. ;调色板清空
    ' b/ D1 b% T4 y  W2 N  _% r
  250. LDA #$3F1 Y, V  a% E4 z, e- J# G
  251. STA PPU_ADDRESS) @. t1 {( H8 J4 O" ?  r
  252. LDA #$00  M) \& |: I8 ]( H4 X
  253. STA PPU_ADDRESS
    $ W$ V; n5 g; }3 O+ R2 e
  254. LDA #$0F  y1 M, J. k, X5 }
  255. Palette_Clear7 d( X( R+ _9 y% \  {$ Z
  256. STA PPU_DATA
    ; F" v! y# G! F8 b: J& m  n1 x6 N, m
  257. INX
    9 ]) F# s1 g5 W& [) p
  258. CPX #$203 n& |# s8 F. _! {
  259. BCC Palette_Clear
    . e: d9 V2 u  L
  260. LDA #$00$ c  B( O( V/ X8 j0 j1 n
  261. STA APU_STATUS
    , r+ u3 p3 Z3 K: o% {+ k/ ]* f: ?
  262. ;==============================
    * a4 v/ c5 V" _! L' s) t* T
  263. ;初始化背景调色板
    - e7 p( j9 s; I. q! S  t
  264. JSR Set_Palette_Color0 A! D' k: g. E/ M% x
  265. JSR Set_NameTable_Attributes
    6 T& _/ _, ~# V/ D1 ~( c8 O1 v1 M
  266. + x: n" ^1 c5 k  P2 ^* u; V9 `' A$ r
  267. ;==============================
    2 p1 M; C/ X: V0 n) S' }! d
  268. ;RAM初始化2 s4 d; R' s% m& l
  269. RAM_Clear_All" L' c# O) P. F/ H# I
  270. LDX #$00
    ( u, B  A5 w: `4 h* h$ m" H/ ?
  271. LDA #$006 C( F* Y: f- t8 g1 r0 z' @1 r. b
  272. RAM_Clear_All_Start3 o' Z  }+ U( M0 E
  273. STA $00,X
    # M4 }9 i: n7 u  o: y
  274. STA $0100,X
    - W, i  u2 f4 Y: {& R+ d
  275. STA $0200,X% ^% e6 ^* ?, o2 f+ ]9 L$ |
  276. STA $0300,X( K0 I5 c; |6 y# J
  277. STA $0400,X
    5 E# A+ k7 K9 {) L% B
  278. STA $0500,X4 j  M# Y! {. D1 {2 O( p
  279. STA $0600,X/ u# K% T% x% ]
  280. STA $0700,X
    / Y) i3 \# ~! W! `8 \; ?" V
  281. INX
    / G" X4 |6 E8 O! U
  282. BNE RAM_Clear_All_Start3 H1 J8 C, y7 c! w  P

  283. & ?: K8 L6 E# ~# H( b: [# G
  284. JSR VramInit2 d! d+ l/ t: X1 ^( X5 f! v9 I
  285. JSR Init_Palette_Addr
    6 n( o$ z- \- V

  286. " Z( t+ W! V! l& i% K5 V
  287. .IF Music_Reset_Addr$ H9 `, g% K* M+ V
  288. JSR Sound_Reset
    % E$ c7 |( i% W. j
  289. .Endif5 P1 p! t+ |" ?  g

  290. & c/ z+ w8 k, N* t( B. t
  291. LDA #Music_Start_Song-$015 {( s: H5 Z3 _/ Q
  292. STA Music_Cur5 ?& Q6 U* o, P  Q

  293. 9 z" d/ d9 l/ Y' ~" W
  294. JSR Show_Music_Text
    2 S' p: s6 D' \0 I0 F7 J

  295. 8 v) ]& L' L6 ?5 a4 {, p+ }4 T
  296. .IF SOUND_BAR_SHOW_ENABLE
    5 m+ G0 Z4 W) w
  297. JSR Sound_Bar_Text_Set
      \0 A3 D$ E6 d7 G' `! {
  298. .ENDIF
    ( b0 Z6 x! k0 X; T, `
  299. , X6 Q" l1 n3 a' }" i
  300. .IF Track_Name_Pos
    , y1 B3 D+ K% o) w( M  x
  301. JSR Show_Track_Info
    7 k: N- V+ b8 Y. L
  302. .ENDIF+ L2 T: n& m* Z6 b1 \( |% ^4 b! a

  303. / H/ M/ a$ d  @, \* q0 Y
  304. JSR PPU_Proc
    / P, p2 c4 g3 U" b; L9 ]5 E& y
  305. 4 Z* {# T2 T0 R! c/ ]) `
  306. LDA #$0E
    . s  Z" Z* I6 m- \3 w' L
  307. STA Screen_State5 V3 M4 T# Z4 C! ^! D/ h) P7 h# B5 p

  308. % y4 e2 w% ?6 e
  309. JSR Sund_Bank_Init$ z0 x- g, C! k1 S" c# H; ?

  310. $ O3 S' L$ ~9 Y6 H) G( g
  311. JSR Music_Show
    4 X$ E3 o  V0 U2 q& X$ Y
  312. JSR Time_Show
    % o2 t. c# ], m4 \
  313. JSR Music_Stata_Show
    6 v% ]" b( |8 r. H& ^
  314. JSR Time_Delay0 _* g9 _6 j; R
  315. 9 h8 K% q* ]* F
  316. / H$ D5 Z1 Q2 ?" b4 @! I0 j
  317. LDA #$809 Z3 D% Y) f$ B7 ?! W
  318. STA PPU_CTRL
    / q3 @# K- e5 F) }. W

  319. + p4 G( u- T' A: h- c1 C3 e1 {6 e3 W
  320. LDA #$20
    4 j0 J* R% P% ]& a" b
  321. STA Time_Wait_Cnt
    6 G  D' ?# }! G  y' k
  322. 0 i4 w9 t' K: S+ M! |9 _
  323. Wait_Time_Over
    9 x: e5 {) \# S$ I# ?2 x0 Z3 N& @& z
  324. LDA Time_Wait_Cnt# x  R7 |4 h2 s  K3 Z9 Q
  325. BNE Wait_Time_Over& h; R) F- O0 ?- Q" R. W" O% j+ N! P

  326. ! j5 o9 ?& \+ \$ C) S7 W
  327. LDA #$1F
    " m) @1 d! Q, t  d8 }( J
  328. STA APU_STATUS
    ( @2 _: E# C5 L! m& s/ a1 l
  329. LDA Music_Cur- n/ ], t( o. V3 _$ d9 R
  330. JSR Sound_Init
    ( A! U* [( |/ u) K+ h0 \8 K
  331. 4 U, g9 ?& `3 W2 p. F9 P
  332. JMP MainLoop( ]$ y" u, j6 l9 f$ P' s$ A

  333. 9 b! a# ^1 N1 H6 Z% j( y
  334. ;==============================
    6 U0 A! P1 R7 o4 I4 A* K# S1 S
  335. Time_Delay;延时等待
    3 `! K9 y  I& |3 ?& E$ e
  336. LDA PPU_STATUS
    * V: J' u7 {) U! m
  337. BPL Time_Delay0 n4 ~! [/ k1 F& \# k3 N
  338. RTS
    + Q; }& h! R+ U

  339. * c) {( D  x$ T, ^: m3 k7 D0 h
  340. ;==============================
    2 ^1 B. V( p+ S6 N6 f
  341. VramInit;初始化图形内存
    / N- [9 Y! z7 c! A
  342. LDA #CHR_DATA_BANK' t; L, ?% f# j# u3 X1 z
  343. JSR SwitchBankA000
    * i( V% N  F) \8 |# f, _# r- P% K
  344. LDA #LOW(CHR_DATA_ADDR)
    ' @3 t. ^- I, H7 Q$ ^  X
  345. STA <Data_L
    * A& E9 F' h* m- z) P' W+ C3 \, a; I
  346. LDA #HIGH(CHR_DATA_ADDR)
    / o8 w( B% ^8 f
  347. STA <Data_H
    8 i$ D8 Z! G% R+ Y
  348. LDY #$00
    / s  b1 d' g! X1 |1 P3 g# C
  349. LDX #$20+ Q% T) g" `# I+ z9 Z( x2 Q
  350. LDA #$00! V) r+ q; {1 I0 K1 ~" v4 t& `
  351. STA PPU_ADDRESS$ j4 }* u" {7 D' O( X  h) m
  352. STA PPU_ADDRESS
    * N4 w2 @1 Z; P2 w
  353. VramInitWrite
      b, T/ s" b/ U/ R4 z' N1 _* ~/ M" n
  354. LDA [Data_L],Y
    7 h+ u9 [4 X# o9 w& l
  355. STA PPU_DATA
    4 i% i# n. F  d
  356. INY
    3 T! K9 w$ k1 r3 F) e9 @
  357. BNE VramInitWrite6 B4 L+ |3 X; J
  358. INC Data_H
    1 {$ R$ k, w6 E) Y' o, N! G
  359. DEX& Z- i% B8 ^- {3 j- R9 v" v9 b2 m
  360. BNE VramInitWrite+ R) F$ _9 s) y0 Z; V( m, `  J
  361. RTS
    1 I8 T& X0 C+ b& `) r9 n
  362. ' g7 p* t9 v4 [! t% w& y; r5 _
  363. ;==============================
    & c2 M6 v  m5 ^2 o
  364. RAM_Clear;RAM清除
    ! E9 q7 }, R& J) n3 @) d4 |8 f
  365. LDX #$00* ~4 l1 }$ z# x9 j
  366. LDA #$00# Z6 j; Y  ]# Q' m' l- K
  367. RAM_Clear_1
    & K+ G1 d" X& I! v! T
  368. STA RAM_Cln_1,X9 C/ V: Q4 m/ K& _6 s
  369. INX
    9 L5 r4 X$ w$ ?4 F) _$ y
  370. CPX #RAM_Cln_1_Size3 C9 P% V' t8 b  u
  371. BNE RAM_Clear_1& ?- p& _+ @  E6 N* M( ^  Y8 y
  372. LDX #$00
    1 b4 w) ^( q3 e$ S) J" K- N
  373. RAM_Clear_2
      {6 a0 e4 u! U  F
  374. STA RAM_Cln_2,X
      n8 K& R. w' g' G
  375. INX
    9 u1 O5 O. L- v2 u# K
  376. CPX #RAM_Cln_2_Size
    ; M! N% X# l& l- ~' ~8 H
  377. BNE RAM_Clear_24 J9 b  Y! V3 i9 d* ^; C" ]
  378. LDX #$009 \4 S* \8 `! F) C: G7 `6 D, B
  379. RAM_Clear_3
    1 i6 T1 d( M) X: @$ J
  380. STA RAM_Cln_3,X
    8 P% m$ Z" [6 B7 J" _/ U, `* K  B( C' O
  381. INX2 l1 D# @) V+ o& T+ l  Q$ r
  382. CPX #RAM_Cln_3_Size  f& R% \( }$ H8 [- E) p5 L
  383. BNE RAM_Clear_3, G+ r, ?9 k) }9 }, k( t) V
  384. RTS
    3 c/ V6 ]8 M9 E! b, ?1 M, q: X

  385. ; j6 y  a$ \' {
  386. ;==============================
    6 e. P$ M7 Y$ C( o' Q% ]7 y
  387. ;音乐切换
    : g7 l% W  U4 O/ Y% Z+ M
  388. Music_Switch/ O2 i4 s" v/ J9 b+ ?* y
  389. JSR Key_Proc
    4 o/ D3 Y) {; f3 g9 K' H) R
  390. LDA Key_Once8 N2 a2 N3 p( U1 C
  391. CMP #$10
    $ I9 j" |% x& N: H" N8 b
  392. BNE Music_Start_SongStop8 f3 a" a4 ^. H
  393. JSR Music_ReSet- h2 p$ k4 E& R; F; c

  394. 0 D% ?% X8 i! f  M% \
  395. ;音乐停止
      M5 u! W1 @' P8 ^2 S
  396. Music_Start_SongStop
    # B9 G5 r$ ~2 B6 T" k( h, A! w; ~
  397. LDA Key_Once
    " A0 r2 L, C! ?' }4 V
  398. CMP #$207 o8 p: z  P2 R! i8 I) L* O) {
  399. BNE Music_arrow
    1 u3 |- \5 k0 c5 w  B' O4 O
  400. LDA #$01$ B- S% E# P% n- ^# }( I
  401. STA Music_State7 o& f, w' e0 G0 K8 d- `1 V  c: r; B
  402. JSR Music_Bar_ReSet, q! |  i% \5 d& _8 E6 W: N' ]+ s2 ~
  403. JSR Time_ReSet$ c* H' [! i' ]# F3 K8 p. {4 z
  404. JSR RAM_Clear
    6 R# V& j, q( y# |
  405. JSR Sound_Clear
    2 g# M- y  I$ ?5 k( E, ?& J% P( a
  406. JSR Music_Stata_Show1 `& D7 j5 {* h8 E6 O9 @& A" u
  407. Music_arrow
    * `2 t! P* A2 y
  408. LDA Key_Once
    / s# M- X2 |4 ?; r
  409. AND #$CF
    " C; @% G7 Z0 W: l9 |8 E
  410. BEQ Music_Switch_End$ D$ Y0 e" S& t$ W5 l3 F9 l
  411. JSR Music_Number
    6 E7 P% \' \# e7 r. x
  412. JSR Music_ReSet
    / K! E9 f2 F  G0 m2 J0 X# B
  413. JSR Music_Show
    % G1 I: o+ x, N2 L
  414. Music_Switch_End0 A$ ]9 {' A( G$ D" ]
  415. RTS9 C4 t  p5 e0 a. M

  416. , n( u+ `2 G! S! ?
  417. ;==============================
    ' w" b9 }$ u% ]( P5 N) q5 I
  418. ;音乐曲目切换
    # N  y) j7 \; i4 a# }; X
  419. Music_Number
    5 c/ ?; r# u, Q: |  I+ m. V0 a  p
  420. LDA Music_Cur2 w8 I1 n! j: G& W
  421. STA Music_Last
    9 Q/ e7 e/ N5 @( j0 B5 y2 \
  422. Music_Decrease
    - g: n  V: u8 B0 ~# ]; S
  423. LDA Key_Once
    4 ^' s5 }$ m% t" C) e6 I
  424. AND #$42
    3 @9 K- Z+ \' n
  425. BEQ Music_Increase
    & @( n3 g7 L0 g" z7 ^; b9 x7 e% r4 a
  426. LDA Music_Cur
    ' r/ k2 D# t* N/ U& _' n' `0 w
  427. BEQ Music_Increase: f5 F- x9 M6 V. u1 l7 x
  428. DEC Music_Cur) W, S' U% }6 T8 u8 n
  429. Music_Increase
    % ]2 z  |" g( p- z
  430. LDA Key_Once/ d( V, v3 `! t
  431. AND #$81
    . I$ K9 x7 J8 ~9 p/ V$ p
  432. BEQ Music_Decrease_10- Q3 v5 b5 ]5 g. Q5 v
  433. LDA Music_Cur, {) x  X$ r* Y$ z$ _9 n! _% |
  434. CMP #Music_Song_Total-01
    , P1 w7 ^. v+ N6 H+ a
  435. BCS Music_Decrease_10
    ' e' j2 M$ S# v* M
  436. INC Music_Cur
    8 C2 O0 m0 A& ^% `+ y* t
  437. Music_Decrease_10* C. I4 o8 f5 i
  438. LDA Key_Once5 F: C- P0 g8 }& r; @$ i4 X
  439. CMP #$04- |# b, {) t; q* m4 ?# o
  440. BNE Music_Increase_10
    & Z) G: ^% a* s' _3 d
  441. LDA Music_Cur. P2 k+ K! @6 a+ }" G# }7 E: M& L8 B2 |
  442. CMP #10' h. w9 W$ U) T, q2 t/ o3 o
  443. BCC Music_Start_Song_Min! T3 Z1 i7 ?7 M
  444. LDA Music_Cur; C1 b% h5 A' ?; m9 R
  445. SEC
    2 T# I! K: R/ e, \  \) K
  446. SBC #10" s: g  @+ Z, |1 g" y
  447. STA Music_Cur& _1 Z" R# ?5 g0 c3 W& _
  448. LDA #$00
    : z, h" E, ~. \0 U
  449. BEQ Music_Increase_10" |% P& J& I& c# G/ ]( E* E
  450. Music_Start_Song_Min
    % h) X( C! k4 w% }6 B% s/ \* y
  451. LDA #$004 z! X# k, R- [9 ~
  452. STA Music_Cur
    8 X) V+ l/ V/ s/ P+ x. ^8 j$ H
  453. Music_Increase_10: o6 u, h- H+ J
  454. LDA Key_Once' d+ O9 `  B" p& R! r2 g
  455. CMP #$08
    - e1 @4 Q8 s+ x6 P( v9 D
  456. BNE Music_Number_End& Y# O5 ~3 p* G) d0 _
  457. LDA Music_Cur) @% H4 ?$ Q; |: c2 K
  458. CLC: g/ _7 \/ ?: D0 L
  459. ADC #108 V" H' v- {1 }" h" O9 Q5 g7 `! m
  460. CMP #Music_Song_Total-01; N; x' f: t" C
  461. BCS Music_Start_Song_Max/ M5 V8 v7 M( f
  462. STA Music_Cur
    4 _+ c& c) a1 r! a0 ]; r" C
  463. LDA #00  s0 q1 r' B) i% L, ?, W2 R
  464. BEQ Music_Number_End& L" K+ X' \- O) |, X; Y: s
  465. Music_Start_Song_Max
    1 g. `$ ~; }6 @# B: l
  466. LDA #Music_Song_Total-01% P5 m1 t- P' f9 a$ c! [
  467. STA Music_Cur9 w+ ^3 d# c0 r
  468. Music_Number_End( {4 j6 I0 T" j! F
  469. RTS
    : I6 x2 |/ C3 K0 i! X! l) M% j5 O

  470. 1 m. C5 W2 `& t% {' J9 T0 e
  471. ;==============================. u6 ~) y+ [! P- ~9 i6 @
  472. ;音乐重设
    ; C0 J: K" U6 I3 V
  473. Music_ReSet
    2 I! }- x1 u: h3 O9 X
  474. JSR RAM_Clear  M* t5 k7 R" \
  475. JSR Sound_Clear
    5 [" O9 u4 s+ p# I5 R3 ]
  476. LDA #$1F* R7 T  D8 n. L- P, ?
  477. STA APU_STATUS/ T! `6 A- X. }% b) n
  478. LDA Music_Cur
    : F4 C. G8 F( M9 b" D1 ?
  479. JSR Sound_Init
    & q% w+ m: g* f, [3 ]. y% S6 ?
  480. RTS
    : l( p" G: N& J0 O8 j

  481.   g5 E; i/ L) X- m
  482. ;==============================
    $ A# U/ |: Q- S
  483. ;音乐端口清除
    # b9 S6 R- p0 e0 [( Y% s# I0 q
  484. Sound_Clear
    9 z" g" S; P7 E; i9 j, e
  485. LDA #$00
    " S7 c2 f# [# f. e% R0 _( t
  486. STA APU_STATUS2 w) P  s) C2 M' l2 h# ?
  487. LDX #$00
    * J2 v* j/ q2 c
  488. Sound_Clear_Start# x. r$ n7 a8 _6 e+ Q7 V
  489. STA $4000,X  n: {& k4 j; R) c
  490. INX- B3 @* ~* N9 P$ w
  491. CPX #$14
    0 S0 L$ Q+ Q- V
  492. BCC Sound_Clear_Start& c9 q) o8 k9 m. o' [8 _+ k0 ^( h, c
  493. RTS
    * K; A! `1 f$ l8 ]4 Q9 }

  494. ! w8 |# d, Z! {$ {  V3 U  b
  495. ;==============================6 q7 g* g; K( Z. s( X+ b- r
  496. ;按键处理
    ) q" s  ?  Z" v$ Z
  497. Key_Proc
    2 J* ^" [) c! H5 ^* }2 X# T$ \
  498. JSR Key_Scan4 F1 T6 @# h/ {5 J) ]0 A; W
  499. LDA Key_Keep5 z7 k2 n/ g4 D5 g( P
  500. STA Key_Temp4 ^6 @7 Y! G! s2 X. V" f( M
  501. JSR Key_Scan) P# l  Z0 |- H" d0 T$ u: N) K
  502. LDA Key_Keep8 H7 m4 U+ {5 T2 Z
  503. CMP Key_Temp
    / L+ B; L6 G* j
  504. BEQ Key_Get_Once5 F; ]0 u5 R5 u/ n* U
  505. LDA Key_Kemp2 {2 t* p' `! B1 ]3 g' C
  506. STA Key_Keep
    - B6 |) b2 y& J0 K5 ^
  507. Key_Get_Once
    + p2 g! k+ h1 c" X8 f6 h* L; z
  508. TAY
    9 n) U! e& ?" P1 h
  509. EOR Key_Kemp1 p0 O# }/ U9 N) m4 n$ q
  510. AND Key_Keep
    ' Y9 G3 V4 w" `0 @- x9 g5 p
  511. STA Key_Once
    ! H1 C1 c" x  q% p% z, o* W+ A0 I; l
  512. STY Key_Kemp
    $ ~+ N) I- a8 A& \5 L) ?
  513. RTS, C2 F# J6 g" S! D# Z
  514. ;------------------------------
    0 F% }6 R! l" \3 p& s" b5 S
  515. ;按键扫描
    / r" H7 {' {; z
  516. Key_Scan
    0 J) B3 w# v7 |9 f5 H$ g; d
  517. LDX #$01/ y6 |* B  n$ L$ k: Y, t( ^1 g3 i
  518. STX JOY1_FRAME- w7 B* A' Y! s2 a, q# ^8 Q
  519. DEX
    3 k9 ?- l) M: X- J
  520. STX JOY1_FRAME7 Y' Z6 X2 r9 O( F! b% W$ h9 W
  521. LDX #$08; O% ^$ t, J! s1 S; M9 C
  522. Key_Value; K7 h7 c$ f) ]% q2 ~& T, m! Z
  523. LDA JOY1_FRAME! a' {6 p+ Y  E& ]2 `* q. r
  524. STA Key_Getv  w  O/ S7 A$ f& L2 e) [
  525. LSR A
    . ?# V4 J, F9 S$ R* @" l9 N1 o
  526. ORA Key_Getv& n$ G4 w" V+ e1 a
  527. LSR A
    . J# ?# E& |) p: j
  528. ROL Key_Keep
    2 ]+ S. X) `3 v2 b7 [
  529. DEX/ j/ n# J0 b4 Q3 ]8 O. s& I
  530. BNE Key_Value; m& s4 r/ C+ k. }0 N0 S7 J$ |
  531. RTS9 W' p4 r* j* g+ x; k" H9 @4 `

  532. 1 q0 c6 Q# Q" b5 f$ Q
  533. ;==============================
    & A% Q3 d, G( }
  534. .IF SOUND_BAR_SHOW_ENABLE
    3 x4 Z3 Q) q2 r( w9 d* S
  535. ;音乐条显示- g( Z$ x& |0 [3 }5 B' `
  536. Music_Vision% F1 H0 f% b; m1 I: U: D8 ]
  537. JSR Music_Animation
    ( }& N4 ^+ `) e* s" C: p' H* a- u9 ^5 X% k
  538. JSR PPU_End+ P, d4 Z% a3 z; C4 X+ ~& U
  539. RTS% Q% R- ]4 p! @  s9 v: ^
  540. ;------------------------------
    1 c, w3 C. H4 a: {0 [: ~
  541. ;音乐条显示处理' _& G$ `0 R( T3 ^1 D6 h
  542. Music_Animation
    2 W- L4 V& F1 f- O
  543. LDX PPU_Cur& M8 A7 @, V: J- V. [
  544. LDA #Mode_Line8 X6 n% j4 D  T* g
  545. STA PPU_Addr,X
    - c5 g% I" @% K
  546. INX8 @8 {/ d0 E0 p6 U
  547. LDA #HIGH(Sound_Bar_Pos)
    # G1 @- b; {8 \4 V
  548. STA PPU_Addr,X
    4 {0 \4 r7 x! c; O: r9 J2 P% V
  549. INX
    ) ^; X. z5 R' @6 m
  550. LDA #LOW(Sound_Bar_Pos)- o0 m7 C3 ~/ X3 [
  551. STA PPU_Addr,X/ k8 `) R/ e" H' I$ I% R
  552. INX! J. H; ~# c% C. R) e
  553. LDA Sound_Bar, b7 ]7 Z! r4 b& _0 A8 T3 r9 R: h7 x
  554. JSR Volume_Convert9 c$ D. D- h0 y, M# i5 f5 a1 O
  555. JSR PPU_Return
    : }+ D! d" y- M! w; Z* R
  556. LDA Sound_Bar+$4# T( R) v3 ^$ B4 Z; c- e
  557. JSR Volume_Convert$ U( ~' f) S6 W9 P  p1 \
  558. JSR PPU_Return% b! E0 w" C2 g2 y$ p& S! S. U
  559. LDA Sound_Bar+$8
    ) Q0 E7 l  Q+ y3 h( q. M) d6 ?
  560. JSR Volume_Convert_Ex
    4 q' Z$ H+ j/ d
  561. JSR PPU_Return
    5 D3 l9 ]$ a5 p) E
  562. LDA Sound_Bar+$C
    " h$ S% e% @; x0 v, _5 ~$ q
  563. JSR Volume_Convert7 [% l7 J& N; z8 K( w
  564. JSR PPU_Return
    $ S& q; b, v9 |: ^0 W/ J
  565. LDY #$10
    ! G6 Z! ]; r. A
  566. LDA APU_STATUS/ R  ]( e+ G4 X5 B& M1 I
  567. AND #$10- P) M% h" Y" b3 \8 D9 K. V0 z
  568. BNE Volume_Count0 C; j' x" X: s" b( ~
  569. LDY #$00- T0 p# V# u. ?$ A8 p% j
  570. BEQ Volume_Count
    1 ^" Y. s. h6 T: U+ A8 L8 b
  571. ;------------------------------
    - M5 ~1 `% ^# G6 ]
  572. ;音乐条处理% z; _3 [* E+ v! u4 |
  573. Volume_Convert_Ex
    - U2 G, w( a! _; ]3 r; A
  574. AND #$1F3 }1 T& U+ i: O8 B8 B% O* V
  575. TAY$ I! j2 G. P. x+ D2 ]* |' ^9 c
  576. BNE Volume_Count( a; p# p+ s) r5 j, A, J/ h
  577. Volume_Convert
    0 {/ V6 [' V8 Y1 K
  578. AND #$0F
    : Q9 E5 `' q, l( U7 L. V
  579. TAY3 x( c  A  ?/ S0 }1 t8 y% ?) b
  580. Volume_Count; G/ k* h' l$ g- U
  581. LDA #$08
    . r0 S' \2 y: |6 ^! j, _5 d
  582. STA Sound_Bar_Cnt
    8 O) c: l/ N: h% n0 @# t: s% G( l/ O
  583. Volume_FILL
    7 p: m; i# U6 c) i
  584. DEY2 Y- ?7 f7 I5 y2 c
  585. BEQ Volume_Half' }& r7 r5 D% }6 W: j- ?: ~, G5 T
  586. BMI Volume_Empty
    - X" e7 |- F; e
  587. DEY8 m+ V  ^2 a- n) Y4 Q6 c
  588. Volume_Full0 F- q' i# y% P7 |1 U
  589. LDA #$16) i' l  M5 {( W  Q
  590. BNE Volume_PPU/ S4 L/ \: f7 ^7 \. t$ Q
  591. Volume_Half1 G' j# n: z6 p4 n! R1 X# o
  592. LDA #$150 Z3 t  X' I7 _4 n) _
  593. BNE Volume_PPU) Q' M6 D  D% y' H! B
  594. Volume_Empty# e$ ~8 b$ X+ A1 }( T- o2 z# D9 Q
  595. LDA #$14
    ) k0 ^2 N: C8 @; M2 G1 C; H8 L
  596. Volume_PPU0 @# y  G& @; S6 E: |" c
  597. STA PPU_Addr,X" u6 w3 @9 e6 Q* M" t
  598. INX5 x) X2 h9 g* ~! D. r4 W0 o
  599. DEC Sound_Bar_Cnt6 \$ k" z# @' K; n; C, r: }
  600. BNE Volume_FILL
    & b7 {1 E; |6 {" |9 r3 d
  601. RTS+ h6 W  G/ J0 K& i

  602. 9 U# U. L2 q, e, N6 a
  603. .ENDIF
    - V. Q0 a# o3 E9 d7 w7 m9 {1 Z( |4 o
  604. 6 f) \7 E9 H; J4 O
  605. ;==============================% y, R: L5 R) n* v( c& r" K
  606. PPU_Addr_Set;PPU行开始
    1 `1 ?0 J1 D) e$ e7 n& ?/ N' c: j- \
  607. LDX PPU_Cur1 [) P$ i  c; ], J' k' |3 N
  608. LDA #Mode_Line% c6 d6 V1 W* w8 t& S) R
  609. STA PPU_Addr,X
    # v9 \" T" f  A4 O
  610. INX( d& Y6 b8 l2 n8 b
  611. RTS
    + y+ X7 P4 N3 ]3 a3 S2 B

  612. ) w5 L) R" K  C; H% E
  613. PPU_Return;PPU转行& O! T# ]7 J- j: O
  614. LDA #Flag_Over: ?5 x9 F, ^. j" j2 Z
  615. STA PPU_Addr,X+ F! k# h% K7 ]2 J1 m. H5 d
  616. INX" N! R# e, Y( x9 ~- B& g6 `8 ?0 B
  617. LDA #Mode_Return
    ! j) ^: [* o" i# i
  618. STA PPU_Addr,X
    - ~9 _; v8 L; ^. D6 [
  619. INX
    % V1 E8 N$ |3 O' z
  620. RTS! g1 |, ^7 m3 r! d+ w  Y# r$ d; ~2 v
  621. - L" i" c8 Q! R3 h0 g9 }
  622. ;------------------------------0 W1 P" R  [: q
  623. PPU_End;PPU结束
    : i  t- v' h% L4 w9 ~# c3 I
  624. LDA #Flag_Over
    9 m; k! O' i; i2 i0 x2 C( N' S) W' M
  625. STA PPU_Addr,X
    1 _5 _2 V+ x9 @  e
  626. INX
    ( V4 |8 @5 {7 _- g. b2 y# f; Y% f( R
  627. STX PPU_Cur
    5 A; ]# B- M. p" d
  628. RTS
    2 c  \3 R3 ]  K% B
  629. ;==============================4 ]; |( V" M7 n  I
  630. Mode_Line     = $FD    ;新起行模式; C2 i' ^4 r) \1 \* r  }
  631. Mode_Return   = $FE    ;转下行模式  L3 i7 B. @/ ?, p& r0 J
  632. Mode_Clear    = $FC    ;行清除/ p, D/ I/ A, i
  633. Mode_CntLine  = $FB    ;行计数写入
    0 X" y8 P3 }  D% w! X
  634. Flag_Over     = $FF    ;行结束标志6 l  n7 g( Y* g8 d1 a$ u
  635. 6 H* Q3 T/ }$ k; `3 d& H
  636. ;------------------------------
    % ]' e1 A0 q( X0 r
  637. ;PPU处理7 N2 i/ p! C* c- \+ }8 ]1 Q* o7 |
  638. PPU_Proc
    8 Z) T1 h! m2 M# V% @. H" s2 y
  639. LDX PPU_Cur; z$ _- m+ |5 l) R, z. E1 [
  640. LDA #$00& G5 i4 B. M& t
  641. STA PPU_Cur, K% a" h( q$ ^2 X
  642. STA PPU_Addr,X! H4 N( Y; b: D7 H  G8 U* Y
  643. LDA PPU_Addr- X; j$ O& C6 T- `/ }9 x0 g+ j
  644. BNE PPU_Proc_Beg% p8 c) ]; I( n& X
  645. PPU_Proc_Ret
    , s3 r; u$ x* k3 `
  646. RTS7 I& w+ G, @, G9 \  m# X; @  Y6 v6 J
  647. ;------------------------------, m: h% F6 i6 ~& t2 y
  648. PPU_Proc_Beg  ;处理开始
    1 O: h2 e+ @5 k
  649. LDX #$00& P" E" p( |6 o! D6 S/ g2 X, [2 Z
  650. STX PPU_MASK1 I5 d1 X  E. `' c7 c) `
  651. ;------------------------------5 M3 U- C& S$ |( a4 x  Q. Q
  652. PPU_Mode_Select  ;模式选择  F6 ]' N3 N/ l
  653. LDA PPU_Addr,X& Z6 j* S& X& H: _
  654. CMP #Mode_Line
    6 L) `1 {: [2 h( A2 ?, \( Z
  655. BEQ PPU_Mode_Newline/ s; [1 r0 W8 @* l0 [0 y
  656. CMP #Mode_Return" ]1 a& Y% [+ n4 [, t
  657. BEQ PPU_Mode_Return
    4 R) Y1 \1 t. r2 b' y6 v
  658. CMP #Mode_Clear
    ' G7 x- x$ q7 |0 v: Y3 X
  659. BEQ PPU_Proc_Clear
    3 d/ A! C: k! k% e1 z
  660. CMP #Mode_CntLine! D$ W3 k' K8 M2 P$ V$ m
  661. BEQ PPU_Proc_Cnt_Line
    " Y- ^+ D# t, Y" f* [
  662. RTS
    5 O6 N/ ?2 r, M8 s/ S' u
  663. ;------------------------------4 h( Y2 R" y2 e6 P- U, [6 {; F
  664. PPU_Mode_Return  ;转下行模式& _( I# g! l5 [5 ~* u
  665. LDA PPU_Addr_L
    ' o' Q1 x# G( y9 o4 K( k
  666. CLC
    6 q  i4 A+ J- x6 y
  667. ADC #$20( \7 U  w: ~& Y
  668. STA PPU_Addr_L4 x% z$ z( o$ S  |, _# a7 Z/ h) i1 y
  669. BCC PPU_Return_End
    ! h& c/ Y  N& K7 c8 N2 l6 A9 f
  670. INC PPU_Addr_H
    8 o. y$ g, H1 z
  671. PPU_Return_End/ K. T, w% V  ~+ h1 H" L
  672. JMP PPU_Set_Increaser
    0 g$ U. g4 h0 w# z
  673. ;------------------------------
    % u/ I5 {: [* H
  674. PPU_Mode_Newline  ;新起行模式! h$ R% B  A! x( D, s
  675. INX
    & O8 i$ {: D' v6 F6 T& Q. s' ^% }+ J
  676. LDA PPU_Addr,X: i6 F% H' [; _, B
  677. STA PPU_Addr_H7 Q( k7 O* O3 V! |: r. q7 Z
  678. INX1 a$ W/ x/ r9 l- x3 n
  679. LDA PPU_Addr,X' X% r" T* p" i* e7 q& P
  680. STA PPU_Addr_L
    4 H/ k# z  H) z0 i
  681. ;------------------------------0 c; Q$ P% ?9 \6 k' F7 `- U, A6 P2 w
  682. PPU_Set_Increaser   ;设置写入地址
    + J3 j* S1 d  b2 ?; e6 G
  683. LDA PPU_Addr_H
    : {# K  U0 n- e. g
  684. STA PPU_ADDRESS; B5 x, K3 q7 B  ]
  685. LDA PPU_Addr_L) p  f1 F3 K" W/ B! K' e6 l6 D
  686. STA PPU_ADDRESS
    " e2 P3 q2 [% ?& J8 J% A( Z& L
  687. ;------------------------------! v) \9 c+ E+ G
  688. PPU_Write   ;写入数据
    3 v/ Z$ g" X& Q8 p7 F4 w/ g
  689. INX. S8 U( ~# w; d! d' ?
  690. LDA PPU_Addr,X+ ^9 F. D9 d3 P& D8 ]0 ], _  J3 M
  691. CMP #Flag_Over
    6 p% p! B3 `' d; h" Q) l
  692. BEQ PPU_Proc_End5 H: g" P) d+ k  t6 [
  693. STA PPU_DATA  f, v( Q0 p. ~' C# z
  694. JMP PPU_Write
    , w: h0 Q4 x3 ~" P, u
  695. ;------------------------------
    8 i3 L" L' N8 b+ n! _7 P: T  S
  696. PPU_Proc_End  ;单行写入结束
    : a# N2 v2 ^" U/ B* ?7 U
  697. INX  z9 u# F4 X% Q# H* t7 H7 K' ^# O2 J
  698. LDA PPU_Addr,X
    & m; R$ F* L3 s; P: L' U& Y
  699. BNE PPU_Mode_Select8 T$ L2 [4 t+ u! K. E7 \! z1 }
  700. STA PPU_Addr6 }$ U9 d+ W: p. n4 A) E
  701. JSR Update_Palette_Color% m1 ]7 z* e" N8 D9 G! U: Z8 h% D" X
  702. LDA #$00) a' W. Z% S0 W
  703. STA PPU_ADDRESS
    % U, t5 M- k, o. L; J
  704. STA PPU_ADDRESS
    + D- d" f% i# Q- |5 @
  705. STA Show_Track_Name0 O: H- a& Y1 I6 K2 A# w2 \
  706. LDA #Scroll_X; x4 N- z% R: V7 {. n9 b3 O
  707. STA PPU_SCROLL- w: g; M0 a) A6 }* g
  708. LDA #Scroll_Y8 u* Y0 p. |5 s3 T7 A- |
  709. STA PPU_SCROLL, N2 L) H# `5 d& Y9 O. Y6 o# U4 N
  710. LDA Screen_State# Y9 H5 s" u2 C1 c6 N  i+ h- ?
  711. STA PPU_MASK" k3 b+ K& \. @7 Z' Q. q1 W$ f. w
  712. RTS, u9 r( \* ^3 d" U0 t
  713. . \  T0 j, i7 f1 h
  714. PPU_Proc_Clear' ?5 d6 Z4 X7 f3 n
  715. INX  J, E9 Q8 E$ [$ F
  716. LDA PPU_Addr,X
    & e+ y2 F# s0 b
  717. STA PPU_ADDRESS' F: [) [* G3 Z* X( f7 X
  718. INX  n" B- o* a& L1 w% x0 E
  719. LDA PPU_Addr,X; K( s4 ]9 p) k% \
  720. STA PPU_ADDRESS8 _; _  a. V! m) }# |) I* n' l
  721. INX: K* l; U, D+ V! D- N4 r! v
  722. LDY PPU_Addr,X
    + h( I2 Z+ \- d# s0 R# g
  723. LDA #$00
    # U6 k# i) Z& T3 Z# a
  724. PPU_Proc_Clear_Write- G. {2 N7 @/ _# H  n9 `
  725. STA PPU_DATA; x3 M8 T/ Z1 I2 {& Q' H
  726. DEY
    " H+ }$ R- G5 s4 k: f% l
  727. BNE PPU_Proc_Clear_Write
    * T: b+ D# m1 f' T# g
  728. JMP PPU_Proc_End* [5 j4 }0 Y) Y6 `

  729. # x4 P$ r. L1 W6 V; t8 f# m& z
  730. PPU_Proc_Cnt_Line
    7 M3 c0 g& b* W8 Z, j
  731. INX  ?* n+ }# V  Y/ `7 Y
  732. LDA PPU_Addr,X% [) M( z4 [0 o# q* S) u
  733. STA PPU_ADDRESS- n' {/ n; X8 e+ L# L" t& p/ {
  734. INX9 p( X; T, t6 [0 Q  m' u$ q
  735. LDA PPU_Addr,X% K5 I; a% n6 z( Y
  736. STA PPU_ADDRESS
    + o" c% q" ?% ]. F" {
  737. INX
    # A6 q5 s! s  p9 W: U' r7 {
  738. LDY PPU_Addr,X7 C" p. i, ?& Y/ g! b0 u; I+ N
  739. PPU_Proc_Cnt_Line_Write* u  Y8 z# n$ ~; F* }
  740. INX
    - k$ t4 Q+ U- M( [0 Z2 {
  741. LDA PPU_Addr,X
    * Z; L' U- z3 g  m
  742. STA PPU_DATA$ q% V5 H3 T- a
  743. DEY
    ' _/ k( T6 E1 e6 Q  C
  744. BNE PPU_Proc_Cnt_Line_Write9 S8 @6 t3 E) _
  745. JMP PPU_Proc_End
    / n' p+ H7 m8 Y: q% h$ c
  746. 0 S" {2 o5 p6 x9 X" j
  747. ;==============================
    & |7 ]% K$ C  A3 h
  748. HEX_To_Dec;十六进制转十进制' s2 {+ H( s( |7 M% S1 B0 H7 @
  749. STA HEX_Data- Y) m9 M& D$ ]5 @
  750. PHA5 l' C7 L3 a2 a. b- m1 O6 Z
  751. TXA* E2 w: f: \- I. d1 j$ s% p
  752. PHA9 f" q& E5 s( c( K+ f# m, F2 _% q% ^
  753. LDX #$00
    3 w2 S; c2 [- U" b# K' n
  754. LDA #$00
    - [- w' c9 {& [. x2 U$ u- a
  755. HEX_Cln
    $ S' x% E7 Z' |' u; [$ M. ?  L
  756. STA DEC_H,X! k8 Z7 a8 o/ n9 L: p$ y
  757. INX& f  x% C. P( o
  758. CPX #$038 V0 p3 I/ B( S, ~. ~
  759. BCC HEX_Cln, P3 ?' K2 x5 C+ w
  760. LDA HEX_Data
    8 Y" t: z9 m& c( H2 F% `0 o
  761. ;------------------------------
    $ \) C$ U0 S) y, C( f1 f
  762. HEX_100
    ' ~1 _; f4 S- {4 r
  763. CMP #1003 d2 N6 f, _$ S- [; d# V5 h
  764. BCC HEX_10
    / Y) ?7 V  L& L# \5 }: |
  765. SEC- e+ }: ]% T* \2 N! U
  766. SBC #100
    8 k. A$ a7 O  R) R2 s' q
  767. INC DEC_H# l% p) [! s( K$ e% C
  768. BNE HEX_100
    * J" t8 B/ V- R3 }6 l% W
  769. ;------------------------------- t4 H9 A( E  R8 z( I
  770. HEX_104 D8 l* A5 @* k  d1 v
  771. CMP #10; |+ r- B! t% u, b& `5 N
  772. BCC HEX_1# i% o4 R( H$ r3 U( [" j, T/ U2 `) ^
  773. SEC( k' p0 L" S3 Q6 I' ?% T+ l
  774. SBC #10
    " Z: T! I- x7 J, I6 w! w
  775. INC DEC_T0 @& v9 J+ j1 u5 r  s9 r! L
  776. BNE HEX_10
    - x5 H7 E3 w$ ~
  777. ;------------------------------$ P8 R! X% K) V/ p6 ~$ I
  778. HEX_1
    " w2 ~, ~$ d; B  ]6 B: I
  779. STA DEC_L4 k' k( E3 j  `6 {. s7 v
  780. PLA
    5 F% N! e: E6 `( _' ?; g# f  _
  781. TAX/ P$ W$ t9 Z* H3 u6 [
  782. PLA/ o$ a3 ^4 P5 ?. @  l8 d
  783. RTS* i9 W2 B$ v3 D3 A1 Z! H  m
  784. 8 Q: W; J( l1 j2 g5 Q( U/ K: q" A
  785. ;==============================) C8 u% F2 R. o( J! N: |
  786. ;音乐曲目显示
    ; I- A" f4 r* h. {
  787. Music_Show7 Z2 v7 C0 \! G3 q; q
  788. LDA Music_Cur
    . [; ]# I: `  V+ ?6 p: k  V
  789. CLC% L7 Z/ p6 m, _+ w( K+ g. g
  790. ADC #$01! X; {  }7 I* g6 f, n  R1 P
  791. JSR HEX_To_Dec, y9 X" |/ Z. d9 ?
  792. LDX PPU_Cur
    ; N' |& Z4 y8 y' a
  793. LDA #$FD! d5 j. c7 H: T# ], r9 _: ?1 C
  794. STA PPU_Addr,X2 r4 v1 t* x( u7 E1 v
  795. INX( I* q, p* v7 W8 ~
  796. LDA #HIGH(Play_Index_Pos)
    5 A* v$ J$ C+ B
  797. STA PPU_Addr,X
    9 M1 B& Y7 T. `; F& u1 m
  798. INX6 ?( ]4 c* J# v
  799. LDA #LOW(Play_Index_Pos)
    / ?+ R1 }3 |. Y4 n+ N
  800. STA PPU_Addr,X
    ! X& }: R! \1 l4 {  i% F
  801. INX
    # {# e+ }% c4 R( ~6 i8 [& n

  802. # g4 Z- {& F$ Q1 z) [
  803. .IF Music_Song_Total > 99, @  V# M0 E* ~$ S9 D( T, U
  804. LDA DEC_H
    8 J. \3 Z5 ^3 \$ e8 ]! z0 @, m) \
  805. ORA #$30
    0 o* A) Z9 y' D
  806. STA PPU_Addr,X8 T8 n2 L2 ~3 M8 T
  807. INX+ X2 V' R, o# H
  808. .ENDIF/ R" v$ }7 a: H3 u5 @

  809. 7 q# o* ^- @  G
  810. .IF Music_Song_Total > 99 @1 C: L' Z, _$ u% ~( D" e
  811. LDA DEC_T' M! ^0 @& C$ r5 `" ]) a
  812. ORA #$30
    # m& A; {* B& v6 g* r
  813. STA PPU_Addr,X' S8 }" e) b) V; u7 V1 F
  814. INX
      M3 f0 G. J+ P
  815. .ENDIF& `3 m: o+ g. S. t3 Z" c+ `

  816. " w# E9 L1 K1 H3 [5 ^* }
  817. LDA DEC_L
    . N6 c1 @6 f$ f+ P$ L4 Q
  818. ORA #$30
    3 {! L3 ~) k( k% z$ D
  819. STA PPU_Addr,X
    2 g; l/ ]- P- {0 W6 M
  820. INX
    9 u) @* ]/ G1 Z" n! Z' t
  821. 4 W: |  p6 k: o
  822. LDA #'/'1 w+ Q; D* s$ N" q
  823. STA PPU_Addr,X6 U2 S) s: z0 ~6 k( [$ s7 @
  824. INX
    " j. q7 F, O2 Z9 l6 ^$ z- l
  825. Music_Show_Total
    - _* b8 V5 |& G9 k
  826. LDA #Music_Song_Total
    0 s! D+ F/ ~; x1 J7 J7 G
  827. JSR HEX_To_Dec
    $ H/ V! t5 g6 t" N
  828. 3 ~- r0 `3 y. [9 z$ A" {9 A
  829. .IF Music_Song_Total > 99
    3 Q; k' N. g, w* O
  830. LDA DEC_H5 Q3 d* W2 z4 d+ p7 ~# h7 z3 ]
  831. ORA #$30
    0 U! O9 n- {  {) Y# n: c
  832. STA PPU_Addr,X( _5 X% P  H& @8 q0 y6 @
  833. INX- ~) u2 J0 R/ O9 @8 r2 U( j
  834. .ENDIF  Z# l9 b0 t% V8 V+ F3 D
  835. 8 T" o+ _9 z6 Z' C& [! |
  836. .IF Music_Song_Total > 9$ Z- a& J5 o5 i! _1 _
  837. LDA DEC_T
    , v+ s) O. J. T  D
  838. ORA #$30
    1 X: N* \3 W" x6 l4 Y. B# C
  839. STA PPU_Addr,X
    : H% u6 e7 [! k5 Y% @
  840. INX2 W1 M8 h1 r# a/ T4 s- [
  841. .ENDIF
      \/ x& s1 v  |

  842.   ^, Z4 x6 f4 b3 g
  843. LDA DEC_L
    " ~5 S4 w* E# q# ?% j9 A! r% i
  844. ORA #$300 H. N0 J* ]/ {" `3 z) b
  845. STA PPU_Addr,X
    ( V! b$ X0 ]! Z3 V5 S0 S  N. F
  846. INX
    : k1 @9 p  Y  n4 C/ }
  847. ) N& a1 A: v" c9 D2 Q  G6 N
  848. JSR PPU_End
    : m# i( ]" j# w& L
  849. Music_Show_End
    ; Q7 t/ q3 i/ p1 D8 M
  850. RTS3 W, U. Q1 [7 f& q) N
  851. . ~8 H) M% J  Q1 g. j! l% ~
  852. ;==============================. e' o+ t; V7 R, p
  853. Time_Show;播放时间显示
    ' a$ L( X0 D$ K3 Y; V3 K( t
  854. JSR PPU_Addr_Set
    / ^4 S8 h$ ]# p* X+ y4 c7 g. r! {
  855. LDA #HIGH(Play_Time_Pos)
    $ y4 A& T- A* R
  856. STA PPU_Addr,X
    2 J) ^" [3 J9 _, N" O. x8 A& N4 v- H
  857. INX0 X2 D+ r' I/ ^* }% T/ A( @
  858. LDA #LOW(Play_Time_Pos)0 u# C9 q) R# G. C4 x
  859. STA PPU_Addr,X1 w1 _2 e7 V& k" ?
  860. INX
    / d5 o! r$ C* v. P
  861. Time_Show_H  v' \9 F) _- g9 P5 k. z. v% A1 Q
  862. LDA Time_H$ c/ B) K& D0 S- y7 Z2 D; ~/ s8 g
  863. JSR HEX_To_Dec$ s4 |( i5 Y5 h+ }5 ]
  864. JSR Time_Digit
    2 j" Z1 Z" h5 R- c$ l& [5 L. k
  865. LDA #':'
    % Q# L5 ]. ?9 Z) o
  866. STA PPU_Addr,X' w& v  |) r% b# [
  867. INX) Y4 b0 s$ A$ W5 G- l0 k9 s
  868. Time_Show_M
    " @: \5 ]5 Q8 \
  869. LDA Time_M/ u# a, h4 x- P0 W, S/ B5 q
  870. JSR HEX_To_Dec* Y# i0 Y. K) E% @* f7 L2 F
  871. JSR Time_Digit
    + z/ D" {$ V" ?+ i+ N; Z
  872. LDA #':'
    $ M- _1 z' I# A0 Y
  873. STA PPU_Addr,X
    * H9 x  |" O0 w
  874. INX
    ! T, d4 S9 j4 v+ g0 u
  875. Time_Show_S
    : _, F7 F6 H7 D0 k) C
  876. LDA Time_S3 y: o, s/ }3 a" J
  877. JSR HEX_To_Dec
    4 {6 O' d3 h/ M6 a: O( l& ]
  878. JSR Time_Digit
    / i# o0 j3 c* N8 `
  879. JSR PPU_End; z2 W. p3 C9 B+ P- z
  880. Time_Show_End
    2 \3 n- A% t7 `5 n; E/ l
  881. RTS
    & U, ]" p, L9 e* U

  882. 8 O$ b  x" _" P
  883. Time_Digit
    ' `, n5 ^* V8 ]$ j, k$ }/ [
  884. LDA DEC_T& k0 O7 o- T: B: \+ S6 g
  885. ORA #$30" L& H7 |( }, {" {
  886. STA PPU_Addr,X
    ) f' g) ^! }9 g) b! v, {$ |% }
  887. INX
    9 {- t* X! k) U$ K$ i! K! R2 |
  888. LDA DEC_L* Y/ j6 W  J6 C4 d' A+ A6 k! I: d6 h
  889. ORA #$30
    0 K$ ?& Z/ M, J7 O8 C
  890. STA PPU_Addr,X
    $ K9 d2 b; A; i
  891. INX8 l! U. \8 K; M% ^/ u
  892. RTS0 R. q" p. ?  _& n' I$ j7 M3 u: S9 K

  893. % I& w7 S, ^2 H" K
  894. ;==============================( e( v1 ^) {! q+ W
  895. Time_Count;计时  I/ I+ |# y6 Y8 Z7 {
  896. LDA Music_State0 b% |5 V% N% \6 q2 ]  m4 m
  897. ORA Time_Wait_Cnt
    0 c) `  U! {$ k1 K& z5 c) d# [
  898. BNE Time_Count_End2 d! f1 H7 W, m6 G8 c
  899. INC Time_Cnt
    # g1 Q& `- t' g1 m  H0 Y" Z
  900. LDA Time_Cnt
    6 i/ b2 ^# x& Y9 b3 G
  901. CMP #60& d8 f# P4 c$ ?1 L) b5 K
  902. BCC Time_Count_End4 g4 H5 ?& U2 D1 L
  903. LDA #00
    ! U2 ~  h& P. j' Z
  904. STA Time_Cnt; N" M  `: O2 i1 u3 c7 J
  905. INC Time_S
    / F) S3 Z  d6 o
  906. 3 M9 i1 y: f2 \/ I! l& ]$ M
  907. Time_S_Cnt. J: h0 o7 b7 q: H$ I
  908. LDA Time_S* g4 j, H6 t; o$ D9 N' ~
  909. CMP #60
    4 [+ ]  d$ X9 M8 N" O$ `7 o/ N
  910. BCC Time_Count_End
    . Z, D3 C- t) Z; L' O
  911. LDA #00
      E* C, s( B: _1 Y
  912. STA Time_S# I4 m& R' [/ ?8 ?( Q8 I
  913. INC Time_M
    ) R5 C3 q6 T' P8 n

  914. + |+ n; h& Q# ]
  915. Time_M_Cnt. T% l  S% w' Z% ~
  916. LDA Time_M
    ! Y" f2 a: q/ w' d" L# ~! \
  917. CMP #60
    2 U( v  B7 E8 ?/ Q* _; i3 F
  918. BCC Time_Count_End
    6 [' O# f5 M# B, p
  919. LDA #00
    : L) y* c, o$ [( y
  920. STA Time_M
    ; S! G3 A8 }3 r; L5 ~
  921. INC Time_H
    6 f3 j/ L0 n! N

  922. - H# O7 T9 H1 S, h/ @2 i
  923. Time_H_Cnt
    9 v: |- @# [; x3 ^* _% p0 }
  924. LDA Time_H9 W4 ?* V8 ]. j* I" m1 R
  925. CMP #24
    ; c7 N: y5 `% Y
  926. BCC Time_Count_End
    & e/ B# }# F, d& r
  927. LDA #004 c: k# e6 v* }# x0 R4 C  H
  928. STA Time_H$ H1 b( p% X3 n9 d
  929. + ^' Y! w' T, I- |, R
  930. Time_Count_End
      F0 M- C7 q8 r& w5 E: J4 g# I
  931. RTS
    ; Z/ H9 R+ K3 O# c
  932. 0 ?( S; J3 i3 Q3 z. r
  933. ;==============================
    , a% ~1 e) y) \
  934. Time_ReSet;播放时间重置. ?/ C% _1 U. z2 G
  935. LDA #$00
    & Y& e1 |$ h5 r" Y
  936. STA Time_S' f6 r3 R5 ^' @8 }# O
  937. STA Time_M ; [$ M0 H; X8 B7 j$ F$ h) b
  938. STA Time_H! x) f0 a# c3 K! q
  939. STA Time_Cnt
    ) }/ w5 r+ Q0 @/ {# w
  940. RTS  H* T( V/ K/ \/ m* \9 s

  941. " \% e9 \, z; C, k( E, q4 a
  942. ;==============================
    . Z& ~6 h9 \7 P% m. d7 X$ Q
  943. Music_Bar_ReSet;音乐条重置
    5 U8 Z9 m" l+ @1 v5 j
  944. LDA #$00$ }. P, b; Z+ u5 J4 V! T/ h
  945. LDX #$00
    - H+ F' h& v  _( C+ d8 @# G& O8 F
  946. Music_Bar_ReSet_Set
    " d! U  T/ R  d# e: {- l4 P* M
  947. STA Sound_Bar,X
    ( l& c# `/ Z! }4 v0 M- m
  948. INX
    , s- ]4 Y/ ]2 R- A
  949. CPX #$108 j; M. e& h* }! X! [
  950. BCC Music_Bar_ReSet_Set
    , D, _& ~) T7 m! \0 F
  951. RTS
    - ?! J1 J$ M  w9 R' E- z# C' r. _
  952. & [: m% V$ Q9 |6 M
  953. ;==============================
    7 y6 ?4 \6 M" r" N% Q4 G, a1 D2 ]9 @
  954. PPU_Data;PPU数据写入. \! [' J& W% o% _0 y
  955. STY Data_L1 m; |2 H) ~; ?& O; H7 ?
  956. STX Data_H
    0 \: S5 i4 U: k7 ~  h0 ~: l$ I! d
  957. LDY #$FF1 R" e! `: C; Z5 l
  958. LDX PPU_Cur
    " g4 @6 v. ]* P" u  a* o: V3 I4 N
  959. DEX1 j3 j2 ^3 X4 F2 F( u0 M: F
  960. PPU_Data_Beg8 t& f: l3 @/ p( |+ b* Z" l
  961. INX
    0 o8 N* N0 v3 E% V
  962. INY' w* y( k8 f5 v4 ?! o% v1 ~  X- G
  963. LDA [Data_L],Y# [1 f+ i6 @; b7 o* d! Z2 H
  964. STA PPU_Addr,X
    5 d2 k5 D" `8 g, a% F' F
  965. BNE PPU_Data_Beg
    ( Q& d- m0 e0 l% n
  966. STX PPU_Cur
      M' W  t# n3 n) z
  967. PPU_Data_End
    . {8 V5 O" s& K3 }7 D. h
  968. RTS
    " {; `) i( ~9 C; e5 c+ N

  969. * I3 E* x) M9 F& g
  970. ;==============================0 v- x$ F- B) I' t: d* `0 k+ q
  971. Music_Stata_Show;播放状态显示
    ! }6 g/ d; ~+ u% G  X
  972. LDA Music_State
    ( K6 u  D7 ]9 @( L; M( J! {
  973. BEQ Music_Stata_Show_Play& M) Q' `* c2 t% X7 j; ~7 p# q  D
  974. Music_Stata_Show_Stop$ E. [0 a9 t; Y/ }: h3 A
  975. LDY #LOW(Music_State_Stop)
    6 b& B6 w& {* h7 j7 t
  976. LDX #HIGH(Music_State_Stop)
    8 @1 _& F* A# I# w% g8 i' O. j
  977. JSR PPU_Data
    ) L: `2 p. E3 [& E5 c
  978. RTS  x# g% S2 |  `/ w
  979. Music_Stata_Show_Play6 f! q) \* Y+ s# A6 O* n
  980. LDY #LOW(Music_State_Play)
    3 a  ?1 C# `) \- |: E0 B
  981. LDX #HIGH(Music_State_Play)* _3 ?6 m, J: @* }. u8 C3 p9 G
  982. JSR PPU_Data: C$ ^  f, Q1 T  F/ }4 |+ H
  983. RTS
    % n) c# O( W3 W7 |' C0 V4 C
  984. 7 S" U/ z, ]- l+ a! \! {7 S
  985. .IF SOUND_BAR_SHOW_ENABLE
    : n9 S1 T* C% x+ b! Z
  986. ;==============================# l1 Z7 A& D* h; e/ A
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    & J. s* F+ A+ L1 r2 D
  988. LDY #LOW(Sound_Bar_Text_Data)
    & S! |" e; N- _4 _/ {- _
  989. LDX #HIGH(Sound_Bar_Text_Data)0 u: A* p" d9 Z' l
  990. JSR PPU_Data& `( Z; C  P( z
  991. RTS! |$ e- w! I. e% o
  992. 7 a3 s% m7 c% ~: w9 I( ~
  993. .ENDIF  G+ Y- d. c1 e) p8 t. ?7 }2 S

  994. ' Q7 a+ ]1 B* y0 R
  995. ;==============================9 A6 B* F0 U) H# y0 K( t
  996. Set_NameTable_Attributes;设置命名表属性7 D7 c3 k6 {4 t7 K
  997. LDA PPU_STATUS& X; H( B8 M$ \/ \
  998. LDA #$23
    9 `& W% h! l3 U2 W
  999. STA PPU_ADDRESS
    . q* ^: c7 J" N! Z9 \! w" {* N
  1000. LDA #$C05 E5 k4 m+ v! X& U8 b' c( K
  1001. STA PPU_ADDRESS7 {, Q% c2 s8 o$ d  ~
  1002. LDX #$001 T' F4 H" |( U9 U7 S0 V7 @7 D4 R
  1003. Set_NameTable_Attributes_Write
    * e7 c" l$ [0 k; ?+ F1 c- J
  1004. LDA Palette_Attributes,X4 Q6 W0 r8 G8 q" Z
  1005. STA PPU_DATA
    + B9 Q, M0 S$ b1 Z4 V6 K" L8 n8 r
  1006. INX
    4 `( N) z, o( F3 P& w, B
  1007. CPX #$40+ y3 r9 Z5 e! o: z! v9 `+ J9 |
  1008. BCC Set_NameTable_Attributes_Write6 S1 C" M1 H/ e3 v  e$ F
  1009. RTS
    + ^. i# ?: q. B& M+ t0 Y( `
  1010. ( z! ^% j5 K. U1 `' {
  1011. ;==============================
    2 g. h; w' Y7 X; t' s% d# w: D
  1012. Set_Palette_Color;设置调色板数据
    1 G4 V+ X/ P9 Z; G" n5 O) j
  1013. LDA PPU_STATUS: i, ]& N! A( `1 K
  1014. LDA #$3F! b  r# y' Y3 Y, ?
  1015. STA PPU_ADDRESS. ^/ Q- k4 X* }" _2 Y9 a
  1016. LDA #$00
    : `0 j3 K2 s: Z* J; r) f
  1017. STA PPU_ADDRESS. y) d  m/ L& i# Q4 U
  1018. LDX #$00
    . n3 [9 I) `  T& U% i& k3 V
  1019. Set_Palette_Color_Write" q$ Y7 {) P0 F: V- v3 h
  1020. LDA Palette_Data,X
    + y- V: ~4 K  ]2 u$ l3 i
  1021. STA PPU_DATA
    4 ]0 M( W* K# R9 o9 ^
  1022. INX
      N4 j1 C) c' b8 g7 o
  1023. CPX #$20
    4 \4 J+ I' p: {) w
  1024. BCC Set_Palette_Color_Write
    0 I6 L0 b; G/ m, u* a/ o
  1025. RTS6 A6 d! w( `- D+ s& {

  1026.   q. ?6 T9 G7 {5 B# B1 |( u
  1027. ;==============================
    ! _; t! x; A/ ^
  1028. Init_Palette_Addr;初始化调色板数据6 g7 w: c: G3 e+ }- O+ }! E
  1029. LDX #$00
    # v4 X( Z0 g3 S- J2 E$ Z, }
  1030. Init_Palette_Addr_Write
    $ z" C& S5 u4 t: X
  1031. LDA Palette_Data,X
    # E- Z1 M4 |, A# t% z
  1032. STA Palette_Addr,X& M: i- O5 k$ P+ C' H
  1033. INX8 }% }& h' ~# n
  1034. CPX #$20
    $ @! w0 h( d) s; o% u9 ~
  1035. BCC Init_Palette_Addr_Write( h9 }& J6 Y, c/ g& f
  1036. RTS
    . w% V; m$ ]+ r& N
  1037. + s- [! N" T  g  {$ \
  1038. ;==============================
    " g& G  p; K+ H$ |
  1039. Update_Palette_Color;更新调色板颜色
    ( m" H8 J+ U7 r: K* v. `4 x7 n0 R
  1040. LDA Show_Track_Name  K  F" z' S0 U6 b8 Q6 B
  1041. BNE Update_Palette_Color_End
    8 n5 h3 B0 _( E7 V
  1042. LDA Palette_Update_Flag
    5 {) ^' H; ~) [6 \4 I$ x2 D
  1043. BEQ Update_Palette_Color_End
    / f; P$ w" M2 o! D/ `
  1044. LDA #$3F
    5 U; q" y+ v7 R
  1045. STA PPU_ADDRESS) v7 \* p. F, a3 c
  1046. LDA #$00* N/ b( L) G# c" n# s) G1 P3 s' m
  1047. STA PPU_ADDRESS
    ) n4 W3 }$ F; f' ]& q& A9 G4 X
  1048. LDX #$00
    $ _8 p1 v6 `* K' S3 P* z
  1049. Update_Palette_Color_Write
    6 ]/ L5 O% _  N
  1050. LDA Palette_Addr,X( `6 T0 }! O2 h6 [# u
  1051. STA PPU_DATA3 Y: a* S0 C" R" g9 E
  1052. INX
    2 G5 c% n2 |: U1 d, N* p: b1 {# A* G
  1053. CPX #$20
    ) F: V. Z" ~3 [
  1054. BCC Update_Palette_Color_Write# |8 T; V7 E4 }
  1055. LDA #$00
    ( S8 w& r: L% s: l: x0 I
  1056. STA Palette_Update_Flag
    + C4 R+ z4 t+ P9 [4 z6 E: H
  1057. Update_Palette_Color_End
    . M3 E4 g; f0 C7 i: y2 c
  1058. RTS
    3 [- w6 r+ {: C$ H- T

  1059. , g2 g! O4 l. U; o) R
  1060. ;==============================2 Z) [# I( j! b. e6 Z9 P( v
  1061. Update_Palette_Data;更新调色板数据4 k0 Z# y# E+ U. n( @8 q
  1062. LDA Show_Track_Name6 ~$ v  P+ t( z) C# t7 Q8 ?
  1063. BNE Update_Palette_Data_End5 Q  r& U: q6 Q* d6 L
  1064. LDA Music_State0 M: O; U( e4 ], a. L$ ~
  1065. BNE Update_Palette_Data_End
    ; \' _& g. }6 _1 ]+ \' e
  1066. Update_Palette_Data_Check$ ]: i- [% n; q; x, v! w8 T0 G
  1067. LDA Palette_Wait_Cnt
    : U' {2 j+ i4 z7 n
  1068. BPL Update_Palette_Data_Check_Over: b1 w! [* J: q( ?" R
  1069. LDA #Palette_Update_Interval
    / E2 B3 @* j; T) M7 q5 u% u- M, j
  1070. STA Palette_Wait_Cnt4 Q( ?! E4 ?1 \, l! l2 y3 J, E
  1071. Update_Palette_Data_Check_Over
    , N, j3 D9 z8 \
  1072. DEC Palette_Wait_Cnt" H- B8 t6 _3 c4 U( o, {0 x& k
  1073. BNE Update_Palette_Data_End
    . `/ K% `8 p7 o3 }9 d
  1074. INC Palette_Update_Flag( p: n, c5 Z2 m$ R
  1075. LDA #Palette_Update_Interval  s/ H3 |: e- x6 w4 Q
  1076. STA Palette_Wait_Cnt, h+ |) B* \2 T" \5 r
  1077. LDA Palette_Update_Addr/ P0 m7 \+ A9 m/ h% p/ ^# {$ y
  1078. CMP #Palette_Update_Max
    3 l0 m6 K5 j- U' a& f( r  Z
  1079. BNE Update_Palette_Data_Set
    5 V$ u) M- z! [3 F
  1080. LDA #Palette_Update_Min - 1
    ' Q  s" R7 P2 x# _+ h8 ?
  1081. STA Palette_Update_Addr' O  g/ ~# ]! F3 O+ u. ^( q0 l3 f
  1082. Update_Palette_Data_Set! W+ O& S7 q1 j( J0 D5 b- N8 P
  1083. INC Palette_Update_Addr
    6 p8 B* b) u- \8 M
  1084. Update_Palette_Data_End5 H) o2 z* d2 t
  1085. RTS3 _9 r8 Y: y9 z0 T) K& A$ o6 E0 j1 W
  1086. 3 l7 ~! }1 r/ l( J* v
  1087. ;==============================
    ; f& S4 ]3 O$ ?! @% d# L" _$ F8 c0 P
  1088. Show_Music_Text;显示静态文本4 l( X. t# Q, M5 D
  1089. LDX #$00
    : p. |, b9 R3 C. B/ f* D/ ]7 e
  1090. Show_Music_Text_Set
    % k3 k, e, o! \5 C
  1091. LDA Static_Text_Data,X+ d2 y" w! d  b( k: c; r4 p/ E% g
  1092. STA Data_L
    * B3 S/ k2 y$ u3 @: t
  1093. INX0 A; q+ P4 i) z$ `7 o3 ^
  1094. LDA Static_Text_Data,X
    2 C! y7 ]3 n1 ^% {) t
  1095. STA Data_H  Q  ^. D- W9 p! z' a& ~. }( p/ D
  1096. INX
    6 o1 i4 |* l7 l. e
  1097. LDY #$00
    4 V1 G/ R  i/ q" J* ~4 a1 i" e% P
  1098. LDA [Data_L],Y
    " j4 t- n  j+ z( {
  1099. STA Data_Cnt/ t$ W0 q% {5 T7 M+ r/ S/ ~
  1100. DEX
    # _1 K  g5 g* X. G; q% g
  1101. DEX. Z9 g; T7 r  G. _
  1102. LDA Static_Text_Pos,X
    , |- G% H0 e, {, Y$ }! g$ U
  1103. STA PPU_ADDRESS
    / N( o. H; Y/ U2 i
  1104. INX
    / ?4 g! f$ L  q" e  V
  1105. LDA #$20( g4 r( H( M( \
  1106. SEC+ O7 L+ j# w# }
  1107. SBC Data_Cnt% D. C7 B7 P1 s4 _% C" m
  1108. LSR A
      H) B0 ~+ v2 Z- ]# z/ L8 e
  1109. STA Data_Buf
    ! L0 V, ]. C' _5 `; s) z
  1110. LDA Static_Text_Pos,X
    0 A$ u  w( I8 G- y& i
  1111. AND #$E0+ Z8 l3 ]( Q7 S5 |
  1112. CLC
    4 [9 p* m0 s  p. G8 J  [. v2 N, S$ |
  1113. ADC Data_Buf
    ' i& O8 s7 x" U' d: @& p
  1114. STA PPU_ADDRESS
    8 K6 t' Z9 B3 a5 Y& g$ h
  1115. INX1 T. Q' f# H. q+ x  n" h" t
  1116. Show_Music_Text_Set_Write4 K! s  x( b! R9 h1 [+ ^1 u
  1117. INY" u8 A/ n+ K; \/ \
  1118. LDA [Data_L],Y
    % p: A# E. S) m) h$ |' P
  1119. STA PPU_DATA7 v( V% ?1 o5 a: o3 x. h( e
  1120. DEC Data_Cnt# G; Z% b, b* {& B
  1121. BNE Show_Music_Text_Set_Write
    1 _0 @2 }/ d7 ^4 j  c/ m
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    " r2 k* t! h; p% u% {. W; ?% a
  1123. BCC Show_Music_Text_Set0 [8 H% n0 p+ S# X& B) |* E
  1124. RTS
    3 g3 @, o/ w6 R9 M
  1125. * ], ~4 p0 d3 b3 k3 w
  1126. ;==============================- x8 ]& [* f, W" a
  1127. .IF Track_Name_Pos;显示曲目信息
    / Q' L' x9 r4 i& k5 G8 L! |
  1128. Show_Track_Info$ Z' t/ o: N4 o, L0 J& a
  1129. INC Show_Track_Name
    3 G/ k) q) @: Q/ P) q) [
  1130. Show_Track_Info_Clear% `8 k1 e8 b5 ?/ h: |$ h0 t8 s
  1131. LDX PPU_Cur  n) m0 s# a* ]
  1132. LDA #Mode_Clear
    * V! P$ d: q: j+ ~: j6 N* u
  1133. STA PPU_Addr,X; [% c) ~, S: A9 _
  1134. INX% E! q0 l- {6 q/ X7 j

  1135. 9 q' e8 s: V# _8 r, G! h
  1136. LDA Music_Last
    0 o0 d' w, |  O. N$ j7 b2 O
  1137. JSR Show_Get_Track_Name_Center_Pos
    * H7 [5 d6 i. N% K' @1 t, ?
  1138. Show_Track_Info_Write_Cur
    1 b# f3 E; Y1 D: J! Z$ R5 Z
  1139. LDA #Mode_CntLine5 `, p7 O: z6 ?: M$ N
  1140. STA PPU_Addr,X
    ( X6 L: N$ S7 C6 }9 W
  1141. INX
    ) F7 i. t- J' k' b

  1142. ( a" V# G' K! i% L' E1 n" D( z; n
  1143. LDA Music_Cur
    5 K8 M- S0 ~( k+ Q8 I. ^
  1144. JSR Show_Get_Track_Name_Center_Pos
    & O0 I' F7 s+ f& T: Q. u5 C

  1145. % W  r( t0 n- T+ b. m+ H( X  F
  1146. Show_Track_Info_Write_Cur_Data" N2 G- \: |/ F5 ^+ Y  v* F
  1147. INY3 ?; [* j9 D& H
  1148. LDA [Data_L],Y! j. H( B3 i4 F  n4 `
  1149. STA PPU_Addr,X
    4 L+ `1 m$ @# b$ k
  1150. INX
    6 ^0 n" L7 t2 N- |5 W' N
  1151. DEC Data_Cnt
    1 g0 c8 G0 n1 M7 a2 g( J* O3 k
  1152. BNE Show_Track_Info_Write_Cur_Data
    & Y+ b/ D3 _# q0 y% T' D
  1153. Show_Track_Info_End8 l$ [- A3 D4 a/ i7 d( N* e' [
  1154. STX PPU_Cur# L3 A7 [. l. }# j+ S
  1155. RTS
    + k/ o. T2 w( i' \9 }* h+ u0 [6 [

  1156. 2 Q: r* S8 W, H7 A
  1157. ;==============================
    # w) d: T" d! j& x4 ^" |
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置. W) {! L. ~$ ?$ I; C5 b5 [
  1159. ASL A1 a5 q6 @5 z- i5 ]7 Z  O
  1160. TAY
    2 g& l' J- e6 J/ N* H/ ^. G
  1161. LDA Track_Name_Addr,Y
    7 `; b5 }( L, j7 N: x
  1162. STA Data_L
    ; l6 L% n1 C& @' t* E. _: l
  1163. INY
    0 k2 i4 {1 L( u( s3 ?* @: P
  1164. LDA Track_Name_Addr,Y
    : g  A4 \# d1 ]$ v( W
  1165. STA Data_H+ [; \" s4 j, w+ q/ Y* z
  1166. LDY #$002 O1 w  \( k+ i* G; N7 p
  1167. LDA [Data_L],Y
    $ {; h# W3 j% P. S$ l8 [
  1168. STA Data_Cnt* j1 Y6 A" _! d! a5 Y" a) K5 v8 S
  1169. LDA #$201 Y* N4 c/ d2 X! y
  1170. SEC! c' U7 Z& C7 O
  1171. SBC Data_Cnt( @: n' j" ]8 Q' f# X
  1172. LSR A4 l3 k$ t( H& i$ Q6 C+ K3 c
  1173. STA Data_Buf
    # d3 l. a$ E5 l  ]5 p
  1174. LDA #HIGH(Track_Name_Pos)- p: `% f8 o" e7 d& {1 n
  1175. STA PPU_Addr,X
    - K: Z2 a4 R& r
  1176. INX
    / U- E1 i( z+ W) _5 u$ j' i0 _
  1177. LDA #LOW(Track_Name_Pos)8 \0 F6 m, u! J& K& |. A
  1178. AND #$E0- [1 L$ Y) m/ H4 t/ N7 A: }* a
  1179. CLC4 T6 l6 ]4 }% c! N0 q" O; O
  1180. ADC Data_Buf0 u8 F  V) b0 ]; \
  1181. STA PPU_Addr,X
    $ i$ y; ~% |# I0 a4 ~6 h  a5 L! Z5 i
  1182. INX2 [% s1 E. S5 S% x3 g
  1183. LDA Data_Cnt- y' w  X1 n7 ?& f
  1184. STA PPU_Addr,X
    ) x7 q- j( v, X. h
  1185. INX
    6 C* Y8 @7 K: F
  1186. Show_Get_Pos_Center_End4 U1 M/ U. X  P& t& q
  1187. RTS/ {' k4 A% z, P" L% s' q5 `3 E
  1188. .ENDIF
    - Z+ C: z9 ^/ `

  1189. & X1 ^6 s3 J2 `8 g! M* q
  1190. ;------------------------------0 _* K& G$ ?, n4 Y! x5 Z
  1191. ;命名表数据
    0 s6 q2 M  d3 y2 ?+ n
  1192. Palette_Attributes# J! W( f, O" `4 u) D2 A. ]) W8 M& K
  1193. .IF SOUND_BAR_SHOW_ENABLE
    ( i, ?+ Q/ H( Y  Y
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00+ j9 r9 a# ~: K3 F0 z* f  K* q
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    * C/ i  F- d. c; g) u6 t
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55' A' A! {  j2 k- b- D; ~) @
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    4 a. j& I( d/ }+ m
  1198. .ELSE: _" E. j# l7 `
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00  P3 `9 O; B4 s- e% k; F# t0 U; c) t
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    + D8 N* A# X' x; y0 \0 a4 b" J: q8 v
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55/ w8 e6 l& n. Z% [3 O; O- C
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    $ w  p" h8 O+ B- X$ s
  1203. .ENDIF1 L0 o; Q  B7 L  y0 y
  1204. ! f0 [* ]! i% g8 Z
  1205. ;------------------------------
    6 A. k+ b4 l/ d0 F2 A& J% L
  1206. ;调色板数据
    ! y0 i6 N$ k7 c9 {
  1207. Palette_Data
    4 b# o: }" K9 B3 J$ G
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F, e# g, M6 W* y
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    $ P8 v( t, F" Z7 ~! s+ |2 j$ P
  1210. 9 T& F( }- `) \6 g* h
  1211. ;------------------------------
    ( J* V' M" e! u9 S2 h& v6 {6 I
  1212. Static_Text_Data& r9 o: ~9 o, P
  1213. .WORD Static_Text_Title_Data
    - Q9 d: T/ w6 q1 d
  1214. .WORD Static_Text_Author_Data
    ) D# h, H; @+ ?% [8 [0 S
  1215. .WORD Static_Text_Date_Data3 }6 a1 `6 S' }2 ?8 u/ I9 s1 c
  1216. Static_Text_Data_End: _: `/ Y2 @# H% a
  1217. 5 V9 E- ^1 v, @
  1218. ;------------------------------
    , ~/ r; x9 N; k$ [8 @0 L9 J! F
  1219. Static_Text_Pos
    + [& e( X5 z+ v8 z# M& D
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    " C4 R" l7 u5 }  m$ \
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)' e; a" O; u2 E  z8 F' G: v
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    9 H- e! z( O2 ~, Z
  1223. Static_Text_Pos_End
    / S5 P" b5 M" n

  1224. * n2 e) |7 `3 y5 o
  1225. ;------------------------------4 ^( P5 v, b( _2 n! g* W( i
  1226. Music_State_Stop5 m6 a5 d; k5 `1 p2 I" T; \
  1227. .IF SOUND_BAR_SHOW_ENABLE
    * Q1 f" v) I! r! f6 o
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00+ m+ S$ ]0 e: e; Q  B% N
  1229. ELSE
    0 ~- @- S  v& @. C9 F( g0 j- t
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    + N1 }9 Z& U. E5 c
  1231. .ENDIF
    6 }" l& ^& p# h" g9 v: }9 o
  1232. Music_State_Play! |5 v+ s1 t7 M3 [& R* T
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00- E, t4 u4 T, p1 |. g9 O4 X" y% @) i
  1234. $ {# I$ L  k( d9 {& |9 z( ?, s
  1235. ;------------------------------
    1 v7 Q3 ^. z7 l. k9 j3 I% Z
  1236. Sound_Bar_Text_Data;声音类型文本$ g% Z% Y& @. x- Z4 A& K' T
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos), h) ~5 k* i$ [; w+ t6 R0 s3 |2 B# n% S
  1238. .DB "SQ1-",$FF1 h  h/ k+ h9 d  n$ G
  1239. .DB $FE,"SQ2-",$FF0 T3 Z: _$ |' |
  1240. .DB $FE,"TRI-",$FF$ I# u1 z2 Z3 j/ u9 W$ P
  1241. .DB $FE,"NOI-",$FF# ?* x& |/ n8 d! v* M
  1242. .DB $FE,"DMC-",$FF,$00
    & Y: h% p; o9 `
  1243. & M0 F( ~& q8 D9 j
  1244. .IF Track_Name_Pos3 N1 a# z; d( t# Z2 s- ?: l
  1245. ;------------------------------# \5 X$ r+ `) x- c
  1246. Track_Name_Addr;曲目名地址索引2 C* P3 D/ `& h! G7 b1 i/ m" N, y2 p
  1247. .WORD Trackr_01  b8 o7 a1 c* W8 E2 w/ P. ^
  1248. .WORD Trackr_024 E4 U! b; o/ C% W2 P; M
  1249. .WORD Trackr_03
      N5 L0 u1 W1 L$ E$ A2 p! M) T
  1250. .WORD Trackr_04/ x" x5 G3 a/ G% d: L, D
  1251. .WORD Trackr_05+ H1 e4 {* M# m% g( P+ H# E
  1252. .WORD Trackr_06  S0 b3 }  D1 j* j5 j5 O
  1253. .WORD Trackr_07* M8 t* p7 v6 {4 ?' `8 L1 D9 ~' ]
  1254. .WORD Trackr_08
    0 q. Q# w3 l. e' J4 y
  1255. .WORD Trackr_095 [# i! q3 ~3 o6 H
  1256. .WORD Trackr_10( J9 j1 c. b9 f5 |- _' o
  1257. .WORD Trackr_11/ L3 z. d  g7 M  |! T4 m
  1258. .WORD Trackr_12
    , z; G' \5 ~, B" U4 B9 L) F+ h
  1259. .WORD Trackr_13
    " A+ V9 @, b2 _5 U0 V
  1260. .WORD Trackr_14* ^1 U9 T, d- P# o
  1261. .WORD Trackr_15
    0 |' q& J$ T4 j, j
  1262. .WORD Trackr_16# g3 o: u- r; S3 P* B
  1263. .WORD Trackr_17
    3 V$ K! _5 Y7 d" z2 I! {  u
  1264. .WORD Trackr_18. k" z  t$ z- H! I; {
  1265. .WORD Trackr_19
    / X6 c$ Y7 `& R$ {
  1266. .WORD Trackr_20
    ! ]& g. `% ]5 E5 C+ W1 C1 C/ H- k  y
  1267. .WORD Trackr_21# [; D+ ?( O' g, I% R& a
  1268. .WORD Trackr_221 m) W  l" ?% @) I
  1269. .WORD Trackr_23# X3 E2 E% n7 I/ O  `
  1270. .WORD Trackr_24
    ; l) G" b% \* |) u; h
  1271. .WORD Trackr_25
    8 M! l8 N$ K# }( |
  1272. .WORD Trackr_269 s5 ?3 \! z* l
  1273. .WORD Trackr_27- h+ X4 ^& }7 ^
  1274. .WORD Trackr_28
    : W' i- b  r% q+ v: W
  1275. .WORD Trackr_29
    - c3 K5 n5 H# ^; M3 P1 E
  1276. .WORD Trackr_30
    $ \2 k1 P3 {" D! z/ |
  1277. .WORD Trackr_31
    % R1 Q( v+ S9 I
  1278. .WORD Trackr_32$ J! `$ I3 I4 ~9 }  M
  1279. .WORD Trackr_33
    8 v/ W( x) f8 i7 U2 u
  1280. .WORD Trackr_34
    % l7 Q. H% m, d! [0 i
  1281. .WORD Trackr_35& d6 _3 \+ m0 ]: z2 ^3 i# e
  1282. .WORD Trackr_36
    $ i! y4 h) {  |" H5 }+ {0 z1 M
  1283. .WORD Trackr_378 i3 y, K& i& t! {1 P: _. q% U: R
  1284. .WORD Trackr_38+ G4 l, E, u4 \! ^
  1285. .WORD Trackr_39
    2 z" T; L8 F5 g1 s
  1286. 4 n+ E" l+ j5 P
  1287. ;------------------------------
    % _0 |/ N6 y: S$ S/ t
  1288. Trackr_Name_Data! ~- W0 f. _# O9 ^+ Z! N
  1289. Trackr_01 .DB $05,"BGM 1": C- G, s4 J; d* x$ n1 {. ]
  1290. Trackr_02 .DB $05,"BGM 2"
    3 L$ b5 u  W! ~9 q  C- a9 X
  1291. Trackr_03 .DB $05,"BGM 3"* `4 H  H, Z1 T; P8 U
  1292. Trackr_04 .DB $05,"BGM 4"4 X+ k# w1 i; j& X; `4 L8 Q* |6 @
  1293. Trackr_05 .DB $05,"BGM 5") Y3 c4 W- V, s" r6 |3 U& C- k& i
  1294. Trackr_06 .DB $05,"BGM 6"9 B1 Z! W/ N/ ^3 U
  1295. Trackr_07 .DB $05,"BGM 7"+ j' G: s1 \) v8 G0 a9 _
  1296. Trackr_08 .DB $05,"GREAT"; [( y" K9 n# T( f- y, }
  1297. Trackr_09 .DB $08,"BOSS BOM": d$ e# l1 `; S  u4 g: C
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    ! N% Z0 [6 F$ f/ y) ]/ Q$ h
  1299. Trackr_11 .DB $07,"P CLEAR"4 l1 V/ d$ U% p, s6 D* C2 N& r
  1300. Trackr_12 .DB $07,"A CLEAR"
    5 Y) l, u3 G% U  j  G
  1301. Trackr_13 .DB $04,"OVER"
    # o4 A+ f1 G" T' T& {
  1302. Trackr_14 .DB $06,"ENDING"
    " x& c2 ?& _+ C3 p4 e
  1303. Trackr_15 .DB $04,"SUTA"
    ) _3 ?1 Z: L& \( ~
  1304. Trackr_16 .DB $07,"THUNDER"
    3 T% L) M1 ^. V
  1305. Trackr_17 .DB $04,"SHOT"
    0 @5 T; R; }3 h( n' E
  1306. Trackr_18 .DB $05,"LASER", ?$ f- R# F% R% F- X
  1307. Trackr_19 .DB $06,"SPREAD"  i; G9 Z; j2 }3 y; s) ?% i
  1308. Trackr_20 .DB $04,"FIRE"
    : ?2 |! }. R0 G7 b  ?
  1309. Trackr_21 .DB $06,"B SHOT"* H- u% C8 j! R
  1310. Trackr_22 .DB $08,"T DAMEGE"0 C7 P7 k: a2 J3 u# p  _3 |4 C0 l
  1311. Trackr_23 .DB $07,"HARETSU"
    1 i4 X0 O6 h, H: V
  1312. Trackr_24 .DB $05,"T OUT"
    ! n/ q6 ~5 W1 v2 U3 i
  1313. Trackr_25 .DB $05,"Z OUT"& q5 z( u  f$ g5 @# x0 `. J
  1314. Trackr_26 .DB $05,"A OUT"
    " n% z5 i: I" J) ?, u* z( h0 ~0 _
  1315. Trackr_27 .DB $04,"ROLL": q, c5 P- r! j
  1316. Trackr_28 .DB $06,"APPEAR"
    0 _7 \1 \+ M% Z' P, v* L. v( a
  1317. Trackr_29 .DB $05,"POWER"& l7 y  B0 j& i0 e
  1318. Trackr_30 .DB $07,"BOKK BK"
    6 b9 R4 M/ \- H- N  H/ t- U
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    / Q: y6 `# k- K3 J' E
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    1 U( X# ]0 B- g% k
  1321. Trackr_33 .DB $05,"ARUKU"
    7 M2 `/ G# x3 k& v) e0 s# o0 v
  1322. Trackr_34 .DB $06,"JIWARE"
    5 E- U$ O% q# T/ r3 `
  1323. Trackr_35 .DB $05,"SILEN"4 I2 r. ^0 p8 L; q% n1 X" B% L/ A
  1324. Trackr_36 .DB $05,"P 1UP"9 I$ N1 k1 U5 l. Q  g) d6 V
  1325. Trackr_37 .DB $05,"P OUT"
    6 l4 Q6 j# d! r5 E$ k( _. h
  1326. Trackr_38 .DB $05,"B OUT"
    4 z. F7 u( N( f  C) a2 ~
  1327. Trackr_39 .DB $05,"PAUSE"
    $ L- D1 O5 Y. Y
  1328. ! C; y3 k; M3 k8 _
  1329. .ENDIF" @) i! c$ A3 N$ `, F3 \
  1330. 4 \5 t& o, W9 ]% {2 p0 F+ r
  1331. ;------------------------------. b2 v1 j% |) @1 h$ D! ?3 p/ l" N
  1332. Static_Text_Title_Data;静态文本数据+ p; D( h# C! Z9 i5 q/ o
  1333. .DB 126 h9 q4 N) x4 W/ j+ p
  1334. .DB "SUPER CONTRA"
    0 C9 `5 X" E& Y3 p1 P! t7 D/ R
  1335. Static_Text_Author_Data
    - x; J3 r, U* I2 l, d( k
  1336. .DB 234 T7 [# \% @1 g/ u
  1337. .DB "EXTRACT BY FLAMECYCLONE"8 O* b. p- g% A6 p: O& U/ ^
  1338. Static_Text_Date_Data
    - b& V# X! S" {1 p
  1339. .DB 10
    . q+ y: y/ ^' A
  1340. .DB "2023.07.11"( y0 q3 e" L" v% b- X# `

  1341. - C4 T' f( A# E& V
  1342. .BANK RESET_BANK & BANK_DATA_MASK- e/ x0 {8 M6 U9 w# c
  1343. .ORG RESET_ADDR/ ^+ J  b" z' D7 b6 Z

  1344. 3 j0 s+ Q2 @1 n) q4 Y% V- ^0 w
  1345. / |0 S$ M7 x% @3 g% f  Y
  1346. ;==================================================
    6 }4 z0 L  c. M7 K
  1347. ;切到主程序bank
    8 y& ]# Y0 M/ M; E/ g( R
  1348. SwitchMainBank
    8 }: f- ^% j4 [, I$ {& v
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ; d8 b2 n! J3 Z, B" b
  1350. JSR SwitchBank8000# X& ~$ h) z) A" P4 h  g
  1351. RTS
    8 d, }; f" o% Q. @2 e

  1352. 5 {: j8 K: l/ r2 t4 O
  1353. ;==================================================
      R( @0 E. m5 `
  1354. SwitchBank8000;切换bank到8000-9FFF
    1 J) H/ j2 e' l  W' z* h: M  i
  1355. PHA
    ; }! i. h- L( y: f1 S& T% [
  1356. LDA #$06
    ; x$ x! C8 }4 M+ ?$ w
  1357. STA MMC3_BANK_CTRL
    # z' ^; l+ {' |( \
  1358. PLA
    , T3 u0 S% G' b- }
  1359. STA MMC3_BANK_DATA4 Y& T: {. z  z! B* o# A5 ^
  1360. RTS
    " A9 \/ U! z+ f

  1361. ! I/ y  b5 K$ k' x1 \
  1362. ;==================================================4 N+ t, i4 L6 m4 j. W
  1363. SwitchBankA000;切换bank到A000-BFFF
    ; x! T  K; U& i, R( v: t1 z
  1364. PHA# D4 ~# V& w. [4 M: g; b% p
  1365. LDA #$07
    ) @9 e0 d! w$ i
  1366. STA MMC3_BANK_CTRL
    3 l4 F2 C( J0 P. G; y2 L
  1367. PLA
    - J( R) x1 V, G& Y4 h0 x5 ~3 |
  1368. STA MMC3_BANK_DATA
    0 y( O9 R: f+ }: m3 v# D+ j6 P8 G
  1369. RTS
    , P+ P( K& A7 k' z' k# g+ s- E, p3 F

  1370. & P0 R0 n* J' N& Y: C. i
  1371. ;==================================================
    1 E% W& ^% c6 W: t7 j- Z+ [
  1372. Sund_Bank_Init;音乐bamk初始化- d. i5 v% G7 \$ q. E+ o  o) A
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    * C, o% N- C, U6 @
  1374. STA Music_Bank_8000
    , b  |/ r8 @  _
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK% z  L, \7 v2 F' E: t
  1376. STA Music_Bank_A000$ g6 P# k( K2 y% \
  1377. RTS$ e! M! Q) m& Q! K& T- ?( ]
  1378. 3 N5 E/ `0 M: b0 g1 w0 B
  1379. ;==================================================7 u- U3 p3 ~; y! d4 x! q
  1380. Sund_Bank_Set;切换音乐bank
    ) a$ A" P5 E, e0 L. i
  1381. LDA Music_Bank_8000
      [' F0 C/ W9 j8 D; g, J( P
  1382. JSR SwitchBank8000
    - b& y& P, L" s* s
  1383. LDA Music_Bank_A000
    * ]6 }9 u$ o6 K" |4 K
  1384. JSR SwitchBankA000' S1 a# Z6 h3 _8 [5 g
  1385. RTS
    ! d4 d: W9 \: x) g8 F$ q! d
  1386. & n3 i# g$ E' {( ?8 O, H  V0 M
  1387. ;==================================================2 `' Y: [& E0 K9 p2 u
  1388. Sound_Init;音乐初始化1 ]- M9 B" j" v* Y9 w
  1389. PHA+ l( M, }0 s& `
  1390. JSR Sund_Bank_Set
    ; Q' ~! F2 m- Q1 Y7 e3 A3 b
  1391. PLA
    ! `. z0 f& S% E& d  [
  1392. JSR Music_Init_Addr
    ; V- n* e9 h" H, R: H
  1393. JSR SwitchMainBank( L, w4 f) S. ?, @3 w
  1394. 4 J1 R/ o% j/ c
  1395. JSR Music_Bar_ReSet
    0 O" _& s3 J/ i! I
  1396. JSR Time_ReSet% v5 X- \9 |* @: h. `
  1397. LDA #$00
    & n3 r& r  W  [% k/ _
  1398. STA Music_State
    & V$ I9 ?* b8 Q% L6 V
  1399. JSR Music_Stata_Show: e6 j& u) x0 B0 w3 U
  1400. .IF Track_Name_Pos- J9 A' D! S# e! Z. W
  1401. JSR Show_Track_Info" Y- Z; w5 Q1 e& s9 J
  1402. .ENDIF- n$ W$ c1 Q' [7 {

  1403. + L; N: Y/ C0 k4 J2 E; N8 R/ V
  1404. RTS% r4 C' g5 c2 D2 f; j% T" q6 Q
  1405. % G' U/ V4 K7 ~$ a2 k
  1406. ;==================================================; o/ o8 |' d8 `3 [( ]
  1407. Sound_Play;音乐播放
    0 o# i) t5 X5 c0 n8 y
  1408. PHA- S) S' b6 M# ?+ |- ?1 e2 Q5 k
  1409. JSR Sund_Bank_Set& i5 |+ ~# k! U: B; `
  1410. PLA
    9 b& X! ]  M9 o
  1411. LDA Music_State; j  y5 R& t0 t
  1412. BNE Sound_Play_End
    ; S: a. O: s- k# x
  1413. JSR Music_Play_Addr: |6 s9 N/ Q) H4 q
  1414. Sound_Play_End7 e5 I7 ?  H! e6 D; F
  1415. JSR SwitchMainBank
    5 K& f& |0 o, ^% E( U
  1416. RTS8 @. J7 g3 O# N5 K  c$ N
  1417. ( x$ U% t9 s5 E3 V' N! f0 w0 v
  1418. ;==================================================
    0 K, p; i( C3 i% _8 n7 Z
  1419. .IF Music_Reset_Addr
    % O% Z/ T) o2 n. z; `; V
  1420. Sound_Reset;音乐重设(如果有的话)
    & g0 D4 U8 j! ~2 ?9 l2 N% {  p
  1421. JSR Sund_Bank_Set
    ! h3 c; c3 G  J: _5 v) \8 i
  1422. JSR Music_Reset_Addr
    " z) U8 r' G$ B
  1423. JSR SwitchMainBank+ z% ], J" g0 Z: }% ?1 K/ _
  1424. RTS
    # m* T) f6 H, s3 c5 P: `6 J' U
  1425. .ENDIF
    9 V/ e9 H% D5 A  r

  1426. ( C9 }1 f' G! n1 c  h
  1427. ;==================================================: e; n$ V7 W3 S0 H
  1428. MainLoop;死循环4 c4 ~7 i7 E+ A9 c/ y# L
  1429. JMP MainLoop
    3 _  I& ]$ j! \9 X" u
  1430. : K6 c% X, i- a+ E* k2 P( f8 ~; v
  1431. ;==================================================: C1 v' R) K0 y, E) n  d
  1432. NmiProgram;Nmi中断处理
    5 B! S# Y+ y3 J) U$ g0 B$ I
  1433. PHA" f9 ^2 ?, Q. X3 b
  1434. TXA# X7 p# N: t- q# T; I+ f4 V
  1435. PHA7 f$ k2 d. S, o' W% [
  1436. TYA0 P8 L, p, O. o7 L& P
  1437. PHA1 p8 j! `6 W; p) E

  1438. 7 W0 G* `' [) K( D- U' N2 U
  1439. LDA PPU_STATUS
    3 Y3 ?3 L% X) R: W6 r' i
  1440. LDA #$000 w0 X' s7 k! s. S3 x& r  Z
  1441. STA PPU_CTRL* q2 `9 z9 V) |( b( ?3 I
  1442. # P0 E$ Z3 F  ~( J9 F  _
  1443. ;切换主程序bank
    # ~  T9 ?) r7 D+ ?% Q+ k
  1444. JSR SwitchMainBank
    7 P9 q6 E9 E0 V

  1445. ' l8 X- I. A/ B  G& P1 @+ I
  1446. ;NMI处理
    4 O8 I. O, g! C0 Z
  1447. JSR NmiProgramProcess
    # N2 _4 F2 Q( ]$ K8 a' S
  1448. 1 C0 B8 j- B- w' y6 {3 V$ I
  1449. Nmi_Proc_End6 o9 G7 T$ P' L
  1450. PLA
    & F4 ^; r- `: D: v
  1451. TAY& T& W2 ?$ R% ~' n
  1452. PLA* _4 e# C9 Y- |/ b( w9 V" S7 f
  1453. TAX
    : n( R3 ~0 f1 H4 U2 n7 A' I
  1454. PLA
    ) Q6 n; X$ X: A9 I3 s8 W) Z7 b
  1455. 1 W* M: u# ^1 W7 v
  1456. RTI
    $ r# P% G0 O) c  J) }

  1457. 2 _% G; c4 v- V& g( n. Z
  1458. ;==================================================
    4 G+ C, ]+ F; P
  1459. ResetProgram;重置中断处理5 A4 r2 P/ P- l  p
  1460. SEI% {; ~9 W+ D0 d+ s+ V
  1461. CLD
    4 [9 W/ m. ?  j+ U8 s
  1462. LDA #$009 B8 A: d4 s* E; U
  1463. STA PPU_CTRL+ \1 E6 w1 g2 i# G( `
  1464. STA PPU_MASK7 U0 ^' E+ ?# x( L; M- a  ]

  1465. & G* \" A. }8 A/ N& [
  1466. JSR SwitchMainBank
    : ]' L1 [) M3 T! C7 f
  1467. JMP ProgramBegin1 r2 B( Q, [! f1 v) s$ j
  1468. 9 c% H; U+ r. I
  1469. ;==================================================
    , C0 x* P# I, a5 [7 r  t5 p- c. l
  1470. IrqProgram;Irq中断处理5 ^/ ?3 G% d. e, V
  1471. RTI
    8 V! \6 y% t) T% E; `+ D' F
  1472. * P/ o* T$ d( L
  1473. .IF SOUND_BAR_SHOW_ENABLE
    7 y+ |! s) t9 H7 f4 M
  1474. .ORG $FF806 E% H& o( j# w) k$ F, G3 o4 o9 M. l
  1475. STA $4000,X
    & b! p' w" ~4 V9 B+ s# ?; ~/ q
  1476. STA Sound_Bar + $00,X
    4 j  c9 R; c. E
  1477. RTS
    : P; ]4 |. l3 @  d

  1478. % m. f8 A9 s6 }5 F  a
  1479. .ORG $FF88
    + j) b* G' a+ k1 b, j' g4 c
  1480. STA $4000,Y
    3 W9 {) E9 P" }7 E7 ?! |
  1481. STA Sound_Bar + $00,Y" N: q. N+ r* V# l% ~, X  h% D4 P
  1482. RTS
    , E" m4 s0 ^" S- y
  1483. 7 v4 `# s" ~/ u) A# b
  1484. .ORG $FF90* F; \% i- s4 F3 A
  1485. STA $4004,X
    3 C. n" s3 }- l. X5 ~. O3 V
  1486. STA Sound_Bar + $04,X
    1 ~+ k: I, H4 D8 d8 \
  1487. RTS
    1 U; L* w% ^' F1 K4 `4 C: J8 v9 E
  1488. 8 Y& z9 T  \  _1 L2 q
  1489. .ORG $FF98
    8 F2 k4 W9 e, V: J/ i8 O
  1490. STA $4004,Y
    - X$ I4 }; N: V: X
  1491. STA Sound_Bar + $04,Y% j' f5 ^& [. Y0 O) @4 |
  1492. RTS
    ) \* q* k/ H5 T; W6 _8 e! O
  1493. . b( s/ f* |5 P
  1494. .ORG $FFA0; ^% q- k# c+ I# g9 q5 r+ L, g/ F
  1495. STA $4008,X1 ^6 Y" m6 ^% m1 {& `+ F' U. m
  1496. STA Sound_Bar + $08,X
    ! }- s( D, g  v( w! o
  1497. RTS
    # i7 o( |. a* A" c$ r! B

  1498. 4 g4 k2 J! B0 c8 i
  1499. .ORG $FFA8" N  V, |( t+ m! p- ]+ ]/ D
  1500. STA $4008,Y6 Y! i- S2 y" ~0 p2 u+ a; f
  1501. STA Sound_Bar + $08,Y
    7 C! j0 h. O% K$ P2 x
  1502. RTS
    , q8 Y* K& V$ l2 j/ q( I
  1503. + M6 G4 L+ N% R4 R
  1504. .ORG $FFB0
    ! ~% y. A, @6 `! S
  1505. STA $400C,X
    . o# a! X. ?$ j
  1506. STA Sound_Bar + $0C,X$ R- ^2 {7 J3 N3 `( X- g7 G& }& L
  1507. RTS
    : u7 N' }0 i7 X) h" u9 _' M. a1 \
  1508. ) P' X! c& P" X+ Y
  1509. .ORG $FFB8+ S8 S- P6 u: `- c9 j
  1510. STA $400C,Y5 ~2 z! h) E+ x- r" X
  1511. STA Sound_Bar + $0C,Y
    9 P+ A0 D: c, [5 u( X
  1512. RTS" A8 e2 G2 ]+ i7 K- R9 v5 ~

  1513. $ }4 [9 p, c7 ~/ ^2 ^
  1514. .ORG $FFC0
    ; ~6 G5 k9 x7 ]3 g0 f" S, m. {  Z
  1515. STA $40000 X7 f3 s  s% \2 O
  1516. STA Sound_Bar + $00
    3 x  p. G: x3 q& f  S8 I
  1517. RTS
    6 h* H' ^; h( a( S- `$ k. k
  1518. - s: Q7 p1 d( ~
  1519. .ORG $FFC82 Z* Q/ d  p7 h/ M" B9 j8 C3 {
  1520. STA $4004, M2 ~. ~, t2 ]& D
  1521. STA Sound_Bar + $04
    ( O1 s8 j1 _* U2 H* _7 I/ O* m% f
  1522. RTS
    ( }* O* O- |) T+ Y$ t7 G$ C

  1523. $ J1 l# t! n* J$ Q0 q  M' F- y% H
  1524. .ORG $FFD0
    * O. y1 n& \. c& Q1 ^8 |
  1525. STA $4008
    . O: W- X. i( f: r3 G
  1526. STA Sound_Bar + $08
    ' m) W3 _/ ^$ `0 I8 u* e
  1527. RTS
    ' T. C+ T8 T0 E) A

  1528. - x3 U  _* T; w  E$ t3 q
  1529. .ORG $FFD83 D) X* P  `8 T1 j
  1530. STA $400C! {9 l" q4 [, K+ y) c+ L0 @
  1531. STA Sound_Bar + $0C1 Z$ `% w7 w3 H' d6 q& b
  1532. RTS
    : C' \; L+ K3 W8 Y5 l
  1533.   m. W) C0 U3 M6 N8 [9 H% M0 w2 ^! ~- l
  1534. .ENDIF. H$ `' t0 n" R6 e
  1535. / {' }2 `5 V5 @" j( h: l" y8 [
  1536. .ORG $FFFA
    # |8 {6 K# P3 }
  1537. .WORD NmiProgram
    1 T4 g% v+ a/ N) m  `
  1538. .WORD ResetProgram% }, }# H) K5 Q" W' B
  1539. .WORD IrqProgram
复制代码

2 \2 A  n/ Z! G* c9 i# Y# U4 f( Y: F) U1 N
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1277 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3270 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-26 02:39 , Processed in 1.119141 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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