EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 3 h% K  ^, Y3 z+ O, q

' H! u. b' z& p0 b1 z1.魂斗罗  b5 ?2 q. j% m2 P) T$ Y' ?
2.超级魂斗罗
  X( V5 V* B  x3.赤影战士
2 |/ A) K$ K' N5 K; }. v4.忍者龙剑传2& F( S% r  B8 r/ c; s

7 @9 i( P9 E. Z, X
; U. x& A' s8 X
- l# m) r2 g2 W7 c1 {* |5 H
, i$ N3 d6 T3 c/ T: J源码:: V  Z' i/ R/ v2 \9 J; F% J
  1. ;[FC音乐][播放器模板]
    ( ^/ p+ r% U* @- \! H
  2. ;FlameCyclone 20230710) r" Y& `# m5 f
  3.   @! k7 K) @2 i1 U3 r# X  z8 y
  4. ;文件头
    ; I4 J4 S8 _4 K9 F1 K5 G
  5. ;======================================================================
    2 ^( G% s# M2 \4 N. ^
  6. .INESPRG 4                                              ;16KB PRG 数量/ E8 C# Q. A% Z) t. p
  7. .INESCHR 0                                               ;8KB CHR 数量
    # m( [: N( {% }- b
  8. .INESMAP 4                                                   ;mapper 4
    . P+ a. ], x" c( V, K6 B, Y
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    8 [8 E! ?& t# R; D
  10. , X, L8 H+ d( [3 t
  11. ;==================================================
    + g2 z' R- x4 R- K) o
  12. SOUND_BAR_SHOW_ENABLE       = 1
    * ?0 j1 X2 W" M: g. N/ V1 `6 E
  13. ;==================================================
    ( y; n! e6 m3 k; n% P
  14. BANK_DATA_MASK              = $07
    3 n) S) d* v3 X+ g6 M! S. Y" G
  15. ;==================================================
    # z. Z! K% \$ n4 Y
  16. SOUND_DATA_BANK_0           = $00
    / F9 @+ }, }( `
  17. SOUND_DATA_BANK_1           = $01- R- n* Q4 {3 F! l
  18. SOUND_DATA_BANK_2           = $02
    3 `- R$ B6 V* r- R+ Y5 z
  19. SOUND_DATA_BANK_C000        = $06
    : G# q5 |& v5 a# ~) n$ ?
  20. * f6 Z! h) Y0 M0 s$ i* I7 R
  21. ;-------------------------------------------------
    / `3 M* Q9 r) P# Y
  22. CHR_DATA_BANK               = $04
    3 A( J, K7 K7 D) b8 g
  23. CHR_DATA_ADDR               = $A0008 ~6 H0 v5 V0 t0 y. `
  24. ;-------------------------------------------------
    " o+ E7 r) A1 ]1 j: P
  25. PROGRAM_BANK                = $05. L2 k: F' N$ h7 t) R4 K7 u' ~: l' z
  26. PROGRAM_ADDR                = $8000
    8 S' K6 _/ J# l' Q; Y! J8 z
  27. ;-------------------------------------------------$ V' T# J) M( c) H$ T7 i
  28. RESET_BANK                  = $073 z$ I: ?* O* P' v7 B
  29. RESET_ADDR                  = $FE00
    8 n) M% i9 V, ~2 a1 j, `
  30. ;==================================================
    3 N$ l* G- X! `2 x  V
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    7 l0 u4 y  P9 U) u, |0 L
  32. Music_Play_Addr             = $813C ;音乐播放地址
    % l9 E: w  z: I; t8 Z
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    8 E. u6 t# [9 ~
  34. ;==================================================
    ( A- k, ]+ w; X: X( i
  35. Music_Song_Total            = 039  ;全部曲目总数
    0 N' G# ^$ Q5 L! K  Y2 ^
  36. Music_Start_Song            = 007  ;初始播放曲目6 b* u3 \  O9 _" _9 O7 `8 j  m
  37. ;==================================================  K+ O# y5 I3 D. l! K: m

  38. + Z1 M. |( p9 Z, i% Z  l6 m# Z! ~
  39. ;==================================================0 B( D2 }7 b' s5 _
  40. Title_Text_Pos      = $210D ;标题文本位置# P5 ~3 h8 p: `% b/ Z. m2 s; [
  41. Author_Info_Pos     = $2284 ;作者文本位置3 \+ T# n2 @: X  ]
  42. Date_Info_Pos       = $22CB ;日期文本位置
    , y$ W  |8 w$ J. Q2 ]
  43. ;------------------------------1 U2 R% P7 K: D7 P
  44. ;------------------------------
    ' R" G& X$ I3 z5 z1 G! z
  45. .IF SOUND_BAR_SHOW_ENABLE
    ( D; W. X$ y/ Q0 j1 Q/ u
  46. Play_Index_Pos      = $21B3 ;当前曲目位置$ C  V, q4 i0 J. C+ |5 C$ K
  47. Play_Time_Pos       = $21F3 ;播放时间位置" |8 l% i. D$ y( V8 V
  48. Play_State_Pos      = $2233 ;播放状态位置+ X, m- }! u: A" c" G
  49. .ELSE
    ' H7 E$ |: R+ e$ [. T

  50. 9 c( X' c! C3 ?2 \5 e+ \
  51. .IF Music_Song_Total > 996 f+ ~1 H8 R' D. R
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    / k" f6 l* ?# C8 j* S/ |" l' `+ e
  53. .ELSE" @- p1 f  I' Z  n& P1 `, T

  54. - k2 G: L' \  D' t
  55. .IF Music_Song_Total > 97 b9 O( a3 L; L+ [8 w. H; ?9 Q
  56. Play_Index_Pos      = $21AD ;当前曲目位置9 f' E' o- `1 Y0 j
  57. .ELSE1 b5 e: [$ |5 y3 q
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    8 v- Q+ X9 \. w4 S3 v
  59. .ENDIF6 n' v0 q  q$ n. P* _
  60. 5 N3 ]" \3 E- m2 f" q3 V
  61. .ENDIF6 f: M/ N) M# |) C4 }

  62. 2 G) W" U3 M* P2 }

  63. 0 I) c8 Y- n5 g1 N% l2 b* o$ Z
  64. Play_Time_Pos       = $21EC ;播放时间位置) r  F+ C7 S) L9 F7 M
  65. Play_State_Pos      = $222C ;播放状态位置
    ) r# H. m6 T# w% `6 L, V, g
  66. .ENDIF# ^6 j- r) G0 t8 G: G5 s6 Q7 A/ E  Z
  67. ;------------------------------0 k/ R$ y, P$ u# u9 A+ U1 _
  68. Track_Name_Pos      = $216B ;曲目文本位置7 c% ?; ?  {2 E2 J9 [  v
  69. Sound_Track_Pos     = $21A5 ;声道文本位置* E3 o& Q: [+ }% ?. c
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置  B6 |; O. Y+ i. A$ u
  71. ;==================================================
      `, X' d  |7 K3 h$ H
  72. Scroll_X = $00$ P- K( G% u- Z
  73. Scroll_Y = $06  Q- ~/ f7 d! `  B" F  C
  74. ;==================================================; f+ D% A) {0 }9 f
  75. RAM_Cln_1       = $0100
    ' l/ n* }; ^  y( \# V1 y: c
  76. RAM_Cln_1_Size  = $807 _) j: z' Z+ @% |. n4 v7 z
  77. RAM_Cln_2       = $00E0
    0 v& {( d) e1 q( d6 Q% \* z; b
  78. RAM_Cln_2_Size  = $20
    * I% S  f9 w( x3 R# W7 B2 u
  79. RAM_Cln_3       = $00E0, D2 T, [' X4 B6 F+ y, F0 p
  80. RAM_Cln_3_Size  = $20
    + l! _3 _5 g4 P

  81. 7 k0 w; s) F1 ]6 B
  82. ;==================================================
    9 l1 O# @0 v/ m
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    , F2 f7 v, Q! r& W
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器' ?" t) G" x# |- \
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    + s0 w% v* d+ R/ l5 ?3 ?1 X) G: m
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1* h" o* d% N7 v! R6 e6 K8 ^
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    . [  i8 P+ \% ~  m
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    ' m) }" m1 g5 y9 p6 c+ c  w+ t2 ^
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加- O; |5 E4 y$ h; z* D- W
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    ( F8 |" \6 A& h5 G9 ?( Q
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存2 g# f9 X2 k: k( M. y
  92. APU_STATUS              =   $4015   ;声音通道切换
    . u* X1 z; ~5 x6 d8 P) U; T
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通) g9 ]4 n: _; x5 L0 Y# J
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通6 L8 M3 }9 D! T' r( q. l$ l
  95. ;==================================================5 S! `5 E5 e6 D& H
  96. MMC3_BANK_CTRL          =   $8000! J! _* J. z3 L. I0 b
  97. MMC3_BANK_DATA          =   $8001& X) p4 k1 R( h
  98. MMC3_MIRRORING          =   $A000
    & F, S/ a0 C: S$ {" `  Y& e
  99. MMC3_PRG_RAM_PROTECT    =   $A0012 b* W# Q; P+ Z9 z9 [* F
  100. MMC3_IRQ_LATCH          =   $C000
    7 [' |2 m% P5 ?; \. @6 u; [/ |4 ~0 S
  101. MMC3_IRQ_RELOAD         =   $C001  J& p* ]+ U. b" i/ Q, x) \/ b$ c
  102. MMC3_IRQ_DISABLE        =   $E000' o7 }* M% }9 ~6 y
  103. MMC3_IRQ_ENABLE         =   $E001& t  y: w; [0 z' d
  104. 4 C8 E! p- W) K' J% {
  105. ;音乐数据块
    & |* n7 R( M$ W' B3 N5 T( G

  106. . \6 h- X3 O. j4 i: S; |7 ^
  107. ;======================================================================+ f) _8 o* c( C! n+ h6 y; l, L
  108. .IF SOUND_BAR_SHOW_ENABLE
    3 b. e  z8 `; `2 g
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK6 a+ a8 i8 Y6 p: v* K
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    . h" Z5 r! k6 \0 L) q

  111. ) a) P( A% m5 [- W' d4 s- T
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    2 c7 \" W5 Z8 a4 {2 @  t2 }
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    / f6 f  W7 U- |" ?" h" x
  114. ' V, c7 S: A& M) w& ^
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK0 N6 b5 L5 y! s' t# p/ Z: I: a
  116. .INCBIN "sound_bank_bar/music_data_2.bank"8 G5 v- k7 @/ ]8 A" ]9 J" Q$ b' I
  117. & d9 i+ j* i- }! ]4 R
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    2 ~9 ^' e: _3 B& N' |
  119. .INCBIN "sound_bank_bar/music_data_3.bank"4 U% o+ z9 e( l8 r, K% H

  120. ( d. i/ j4 D$ K2 O. a9 v+ r6 n
  121. .ELSE
    6 d6 u1 `8 h1 k6 R) Y! }
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    % v9 ?* z' \3 l" x: `2 u* O+ J5 F
  123. .INCBIN "sound_bank/music_data_0.bank"
    ' e2 m  Z. w4 e7 }$ U3 v
  124. 8 q' Z! w9 ^( F; _; E* C5 F9 t; q
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    - U1 _( t' H9 @, `
  126. .INCBIN "sound_bank/music_data_1.bank"
    5 k0 O7 _3 N% C8 J& U$ x6 N
  127. ( _  H. Y% g6 A8 o5 S! `) ~2 G
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ( w, e7 u- n! b% L1 s9 k3 \- w6 C
  129. .INCBIN "sound_bank/music_data_2.bank"# F* E8 W  A! @9 z  l
  130. , M9 G5 k3 A$ l9 ^. U/ m! P
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ' z. d% v3 `- X) _+ ]4 v
  132. .INCBIN "sound_bank/music_data_3.bank"; ]+ `' G; X+ f# b* O
  133. .ENDIF
    : P( q4 L% g1 i# w9 G2 X! P

  134. 0 p) ~" {5 Q% g/ l7 W; d' O
  135. ;CHR图形数据+ i8 @* V  {2 U7 j3 i/ T$ B( }
  136. ;======================================================================
    ( W4 l# n) K6 a$ Z1 K
  137. .BANK CHR_DATA_BANK) q, m# R9 ?; Z, \0 e
  138. .INCBIN "chr_bank/chr_data.chr"
    ! v" ?# \, [; @* ?2 q

  139. # W0 e, L; K8 a
  140. ;==================================================; ^0 ?6 O1 b8 }& ^* p; V2 }
  141. PPU_Addr        = $03002 m/ ~- h( z# i% D# }* K
  142. Palette_Addr    = $03C0: @6 t6 F! C7 T8 u* j& }9 c) |5 f
  143. Sound_Bar       = PPU_Addr+$E0) ]8 R; M/ @+ z( c& u
  144. ;==================================================
    , j, x) g( ?. d& _2 K& o
  145. Palette_Update_Addr     = Palette_Addr+$0D; M3 T8 C! g. m: @: T$ m
  146. Palette_Update_Max      = $2C( K  A# q! q- `6 J0 x& O: W
  147. Palette_Update_Min      = $215 I: M1 {8 l! f+ Y& S0 i4 W
  148. Palette_Update_Interval = 60
    - O* U8 x* z+ N9 a8 ^- z5 ]/ m0 z
  149. ;==================================================
    7 t7 d* I; [; W9 g/ z; @
  150. Sound_Bar_Cnt       = PPU_Addr+$F0, a( y1 U: A! ?6 |
  151. Screen_State        = Sound_Bar_Cnt+$01
    ' L) o% L$ C; n7 Y) n3 g3 h# |' I
  152. PPU_Cur             = Sound_Bar_Cnt+$024 U; C. [9 U7 E9 R# b$ U2 q7 r
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03( a) y1 R4 r. a( Z3 _% b" y* y
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    . b) Y0 }+ I% l& C0 X
  155. ;==================================================
    ! q3 ?: M! l' J9 j3 i
  156. Data_L              = $703 ]0 t- h$ @2 M/ D/ _; F
  157. Data_H              = Data_L + $01/ i/ `) B2 I, {$ C* u% h
  158. Data_Cnt            = Data_L + $02
    ! C" f5 H8 K# h2 d; i
  159. Data_Buf            = Data_L + $03/ P2 p+ N5 V  \4 i9 X2 s
  160. Time_Wait_Cnt       = Data_L + $04
    7 T( F$ }' z, T5 F& w
  161. Palette_Wait_Cnt    = Data_L + $05& W/ {) Q/ Q* v/ h, V9 X' W0 W
  162. Palette_Update_Flag = Data_L + $06% |4 ^4 W1 U; Q. d
  163. Show_Track_Name     = Data_L + $07/ w) G, `+ `' T* A. R8 b1 j
  164. ;==================================================* v) C7 P# U- q# O* Y1 }: F3 i2 R
  165. Key_Keep            = Show_Track_Name + 19 s( [* y% q4 [7 }9 j6 t
  166. Key_Once            = Key_Keep+$01$ d# ^4 _; o1 M6 e! t+ L
  167. Key_Kemp            = Key_Keep+$023 x3 d, c# E+ s2 O( C: f
  168. Key_Temp            = Key_Keep+$03
    7 U7 Y/ d% R1 G" Z0 ]# m  S
  169. Key_Getv            = Key_Keep+$04
    % {1 l. B( m8 a6 y& \
  170. ;==================================================# L3 M  Q2 D8 P/ Y; I. k* l
  171. Music_Cur           = Key_Getv+$01
      @! B- A; B5 O: U
  172. Music_Last          = Music_Cur+$01" s; R, P/ D1 i( D% [6 a! G- t9 q
  173. Music_State         = Music_Cur+$02
    2 U( q* @3 ~; W, ]) ~3 i* m
  174. ;==================================================- Q, q! H" z* I
  175. HEX_Data            = Music_State+$01
    : R+ I5 ~3 B: r1 c  n2 i
  176. DEC_H               = HEX_Data+$01
    2 E$ u& H& [* B3 R3 O- [! d
  177. DEC_T               = HEX_Data+$02/ c1 B; e$ V# A' W7 t4 f, }7 ~
  178. DEC_L               = HEX_Data+$031 S. e7 f/ n# O# h0 i1 B. N
  179. ;==================================================+ V+ y3 `: w. I2 w, b# g
  180. Time_S              = DEC_L+$01
    1 D% ~9 X9 {6 V& F+ T; {
  181. Time_M              = Time_S+$01/ N: s' {6 e3 Q' E2 F  i
  182. Time_H              = Time_S+$02
    5 C( v" Z( l6 c8 K3 l% g
  183. Time_Cnt            = Time_S+$03( I: s- p5 O6 U3 i

  184. 2 `' @) r2 m* _, s$ B0 O& F
  185. ;==================================================0 M* D3 L. M$ ^: v2 ^6 {5 e+ W
  186. Music_Bank_8000 = Time_Cnt + 1
    % g1 q, X& U) p0 e. U. A& t3 L7 X4 a: A
  187. Music_Bank_A000 = Music_Bank_8000 + 1
      x8 ^5 U0 v# R( V
  188. ;==================================================
    , j, L  o$ i3 j9 a
  189. , Q2 M7 T' R% A* U4 A* [* w: w# b% u# _
  190. ;======================================================================
    / D4 A4 `' r. c4 T
  191. .BANK PROGRAM_BANK$ v. |$ O8 U% r
  192. .ORG PROGRAM_ADDR
    & W4 _* o5 s, |4 _
  193. 3 ~+ p& P+ b0 v0 `& r2 g
  194. ;==================================================
    # \0 B$ V$ L) a. i' ^9 C- Y1 j
  195. NmiProgramProcess;NMI中断程序处理7 H8 a  H  V' T9 w% v& W- Q  U
  196. ;处理PPU图像3 `, D/ v+ _  a' L- W
  197. JSR PPU_Proc
    $ o8 H( P7 n; {5 ]/ d' ]
  198. 7 E  b$ J+ }0 `2 N7 S/ ~
  199. ;启用NMI中断
    , X6 a" z0 A! K- P+ O% k( @
  200. LDA #$80
    ) D" y: b7 d8 K; j7 j2 r& e
  201. STA PPU_CTRL# F9 w  J& l2 x3 w$ V& S
  202. 8 R' o1 C, q. H- \2 H
  203. ;更新调色板6 B1 p8 z/ D2 o7 t6 C
  204. JSR Update_Palette_Data
    1 a) B# r$ X# w. s+ K4 W

  205. 1 _& |/ X+ d. |/ H7 c
  206. ;显示时间(缓冲)" u/ H% p; ^! i. J* H4 I/ u0 @9 G
  207. JSR Time_Show$ J" N3 i8 ]+ X/ D1 Q* s# G! r
  208. ( ]# |3 n1 g2 S% N
  209. ;播放计时( C2 B4 O8 D7 q1 d$ o5 k9 @
  210. JSR Time_Count
    ! B5 t& [, r9 I% g3 Q# m* f

  211.   I' v; t. \* k$ t6 `+ n. I0 y
  212. ;播放声音7 X7 x! S# ~! a1 {% m9 t/ D1 F  Q8 d
  213. JSR Sound_Play* M0 [0 ^/ E4 M/ a) `
  214. 1 k1 ]6 R3 `) ^8 O& S9 j
  215. ;切换音乐(手柄触发)
    * ?# t4 _3 l/ R4 `9 ^  e" `
  216. JSR Music_Switch% a5 G/ P" C5 Q( L9 C  f

  217. + J3 X0 O; h. x+ ~/ E3 h
  218. ;音乐显示(缓冲)
    $ P$ D& ~' u% @3 @  }4 [
  219. .IF SOUND_BAR_SHOW_ENABLE2 B) g1 n, v7 ^' O5 }# T% u
  220. JSR Music_Vision
    ' ?6 W  C1 e& N* A
  221. .ENDIF, [2 p3 N/ ~$ p) W

  222. % T, E/ G# [, _- x. k: H
  223. LDA Time_Wait_Cnt2 ^6 J, V' S5 ~0 V: C
  224. BEQ NmiProgramProcessEnd% I) _, m0 I1 n1 h9 ]9 L$ j
  225. DEC Time_Wait_Cnt
    ' p6 C; I3 k. `- k7 g/ Z: {9 r
  226. NmiProgramProcessEnd
    ! _4 K7 s( S. D5 e* e
  227. RTS# r# `4 O) Y: V* B8 d6 c6 H
  228. * Y- t) V, H1 r4 |) g
  229. ;==================================================
    - A& K3 q* m1 R; ~
  230. ProgramBegin;主程序# g5 d9 H  K/ |7 j, x; q# s& ?
  231. LDA #$00* Q) E7 A, T# {$ H4 _( d: C7 d
  232. STA PPU_CTRL0 I: ~" U* z3 l8 U6 s( @
  233. STA PPU_STATUS! Q+ k7 I4 K& s5 |; G
  234. STA PPU_MASK
    . j7 D5 K' |  x
  235. STA APU_STATUS: z1 Z, O8 _3 C, o
  236. STA PPU_SCROLL" N# \0 x9 V  x: w0 Q) Q( l  W
  237. STA PPU_SCROLL
    0 S; [3 \0 z$ C$ u# U" e# n
  238. LDA #$C0# e/ x* c  v7 r0 }, Y) W* e
  239. STA JOY2_FRAME
    3 h# k7 I: I# E; b' @+ U
  240. ; T/ Z, k1 o2 \, l% C
  241. LDX #$FF
    1 n' c3 \3 w9 f5 q& \
  242. TXS
    ( m6 p- M0 A$ c3 U6 T' L$ r0 ?
  243. LDA #$00
    - G7 ?  K- B5 O& ]
  244. STA PPU_CTRL
    8 t7 B, H4 t- A! C1 j3 ^5 s1 I
  245. STA PPU_MASK6 ~/ O- Q6 _8 J4 I$ M4 ?& O
  246. STA MMC3_IRQ_DISABLE
    $ R% I4 I0 R3 P% C7 K

  247. , U' h; ~' i- V, V
  248. ;==============================/ ]" r+ {. r3 j6 K* G+ g/ Z
  249. ;调色板清空
    ) `2 }2 w, }4 z
  250. LDA #$3F
    4 N; D/ G4 g+ n0 s6 p
  251. STA PPU_ADDRESS
    6 W0 C7 s. u- W$ T2 `, J9 Z
  252. LDA #$00
    1 w* h2 U8 t2 F7 f* J! o# W
  253. STA PPU_ADDRESS
    & u' e/ f* t- P! W$ |
  254. LDA #$0F
    * D! j: r! ~2 |9 G
  255. Palette_Clear
    8 b; T$ j( {) Q& y+ k" z0 K9 J( ~, E
  256. STA PPU_DATA
    : t2 {3 |# K# n
  257. INX
    # R. _' B7 y/ G+ q. V9 j4 E
  258. CPX #$20) B. n( _# i* e6 a9 M+ A, @
  259. BCC Palette_Clear
    & K% L1 v9 n! d# i  K6 k0 C
  260. LDA #$00  M4 `: C3 z) `$ O
  261. STA APU_STATUS, I( H3 I- N5 T6 u
  262. ;==============================5 O! ]6 d2 K) i& l2 N- K: d
  263. ;初始化背景调色板
    9 C4 U5 d" Q' A) ~
  264. JSR Set_Palette_Color' W7 d1 y) X: l/ p
  265. JSR Set_NameTable_Attributes
    . x$ k4 x5 m& e
  266. 4 a8 y+ R3 G  t( r- v# D& m, @
  267. ;==============================! f4 ~" m! U* t0 a2 h+ F$ V' k
  268. ;RAM初始化
    1 d: ]5 {1 W; q0 d( T( J* q( {4 e
  269. RAM_Clear_All0 f' W* x, H( d+ B0 n1 {! X& O
  270. LDX #$00
      A5 N2 _) n. W7 ~
  271. LDA #$001 \/ E$ i4 a. T8 V/ o2 D. p7 G
  272. RAM_Clear_All_Start
    + u/ l* t) O' c9 X
  273. STA $00,X: k/ p* u0 v& i& R& z' a; K9 b
  274. STA $0100,X
    7 q  \' y' D0 S5 S
  275. STA $0200,X8 F1 r$ r, b1 h1 u
  276. STA $0300,X
      g: D$ c. O) p
  277. STA $0400,X1 D- M& \( G9 L! W. ~7 B- R
  278. STA $0500,X
    + o2 h( b* \% G3 E3 Q
  279. STA $0600,X
    9 w, {2 a5 o4 E/ H5 O) l  j0 u6 h- z  p9 O
  280. STA $0700,X
    : @+ m8 w' |" {
  281. INX
    6 E3 _1 a, h% b/ P0 ^- L& h7 [& J3 O
  282. BNE RAM_Clear_All_Start
    8 Z3 G" l8 n7 ~7 p9 f+ V

  283. % c8 g. U& Q8 z$ H3 z  |0 U) [
  284. JSR VramInit
    % o* M5 N3 F' q
  285. JSR Init_Palette_Addr, m& b4 V7 l3 b; v

  286. % |. v! }) p3 u! N  C/ K# f; r5 I3 Z
  287. .IF Music_Reset_Addr; C' U4 x) j% D% v( c4 {% ^) a' o
  288. JSR Sound_Reset
    ! s6 C0 ^! y! }* d" V$ v
  289. .Endif, \5 r- o- W' F. D/ l4 j

  290. 8 r8 C3 H/ |. Y+ n8 a- G
  291. LDA #Music_Start_Song-$01+ c/ Q  I$ h4 {) a7 d
  292. STA Music_Cur
      k: ?( f+ }) n6 O7 P; [* U  y

  293. " m5 e& U1 a$ M! k
  294. JSR Show_Music_Text
    " A0 a2 ]7 N* o( R5 u- k
  295. ! Z- |5 K# n- e: o4 `  q' W
  296. .IF SOUND_BAR_SHOW_ENABLE" e* k9 I: F- [
  297. JSR Sound_Bar_Text_Set
    & s+ h! s* j7 L3 r# g; `' f
  298. .ENDIF$ ?/ T) i! z$ q0 K4 l/ F

  299. 5 S. t, l* S1 O, A
  300. .IF Track_Name_Pos
    ) d7 k, o; r3 N" E% X) H. l
  301. JSR Show_Track_Info
    ; n9 d6 ~0 r6 L: _, ~
  302. .ENDIF
    , }1 e( w, y# `# e6 O

  303. 1 m9 [3 }) z9 K1 B4 a/ ?
  304. JSR PPU_Proc
    5 h2 j( z8 Z( D" `

  305. 6 u! {6 {5 A1 J' g) \0 z8 _/ j
  306. LDA #$0E( P# U. b% Q0 {9 i9 e5 _) L
  307. STA Screen_State
    & ?8 m9 I( x' _; Y2 e
  308. / `  [* ^6 M" G: ^8 u8 i
  309. JSR Sund_Bank_Init" C) ~! a& q5 L- I1 u

  310. 7 O8 v% S5 e- {3 m% ^* Q6 g
  311. JSR Music_Show
    ; V' |2 b7 I  E! `1 p* y" o
  312. JSR Time_Show0 M7 c2 _2 M9 _
  313. JSR Music_Stata_Show- ?9 m( H5 C2 Q( n
  314. JSR Time_Delay
    * ], G* n' O4 d, Y

  315. + ^6 J4 u0 `' `

  316. + k/ d- x( e% H" v7 G  T+ {1 @
  317. LDA #$80# e2 W: ^7 a$ Q' ~; T
  318. STA PPU_CTRL9 @8 }5 d* x2 x# [. U, `  i1 _

  319. 7 C. z/ s& ?, M+ Y, \- N/ x
  320. LDA #$209 Z  A# W0 B( s
  321. STA Time_Wait_Cnt: E6 [% O2 r8 ?8 a& a

  322. + m6 a. r7 y% E" ?+ S4 ?
  323. Wait_Time_Over
    ; e- C& t8 s9 B1 T! D% m
  324. LDA Time_Wait_Cnt
    2 {5 m+ T" Q1 I
  325. BNE Wait_Time_Over! z* H  V" K/ T0 {" v$ u# }

  326. & S* l4 [+ f+ k5 N# v
  327. LDA #$1F
    $ f( y# x% A* k9 \* e
  328. STA APU_STATUS
    % W9 c4 l5 q/ |# }$ x
  329. LDA Music_Cur8 n4 D$ y) w! l! @2 y! C
  330. JSR Sound_Init
    % C: b0 K; c9 g0 p
  331. 7 |$ }, o$ B. M2 x
  332. JMP MainLoop. [  D1 W1 X  e: k* N- l0 W( K

  333. # g* m) }" i! }
  334. ;==============================
    4 b( ]9 A% C( H$ Z6 `
  335. Time_Delay;延时等待
    % [! |$ S' i2 e6 N2 Z
  336. LDA PPU_STATUS
    2 V' \" w" o& c& I: C3 ^+ E
  337. BPL Time_Delay+ t* s  O5 x) {7 A. B. j2 {9 j8 V
  338. RTS
    ' x! h7 O$ P! E! F0 s2 _
  339. ( H2 y1 U7 z4 t
  340. ;==============================
    0 }. {- \( `2 M; z/ S1 q
  341. VramInit;初始化图形内存- @0 ^/ @& ?0 J2 z# Z" A3 Z" ~3 {0 |& c
  342. LDA #CHR_DATA_BANK
    : }, j1 z) G: _# q
  343. JSR SwitchBankA000
    & o& L/ d0 x* ]+ C' X/ W* W4 C) V* L
  344. LDA #LOW(CHR_DATA_ADDR)
    ! Q* [0 R$ e0 v% W( B, F+ b6 b
  345. STA <Data_L9 z7 F2 J: |6 B& W: Q# C; a
  346. LDA #HIGH(CHR_DATA_ADDR)1 n- m  T% F5 M: g9 u+ {  {
  347. STA <Data_H. U# l, U0 r9 z" v% G
  348. LDY #$00) L# c9 Y* t- u* e! a
  349. LDX #$20
    % I; T% t7 k$ N7 B: p
  350. LDA #$00
    - G4 a( J9 ~9 K" T7 E& r5 o
  351. STA PPU_ADDRESS
    " X$ [5 D' H/ Z7 i2 X
  352. STA PPU_ADDRESS
    . F* z# m; t3 {5 c! L
  353. VramInitWrite
    8 d: [& A: w! `6 o
  354. LDA [Data_L],Y# D0 }5 ]( t: n+ L- w; ^
  355. STA PPU_DATA
    * n: o# N4 j- a8 T5 k
  356. INY
    3 z, n5 s( j, O8 \$ @- z
  357. BNE VramInitWrite8 W9 o3 _! r7 Z4 }4 J  Q  m& Y  [
  358. INC Data_H
    # H$ {1 f, I* i# _6 w1 k
  359. DEX
    * A5 k! E0 X% [/ R( V" H
  360. BNE VramInitWrite! Z: ^2 _5 ]) [! y$ F7 x
  361. RTS: @# ^$ p  g9 N$ [  Y  A
  362. 1 _% {1 n8 Z5 n; y9 o2 ^
  363. ;==============================8 Y: }' }2 H$ d# ]0 Z. B
  364. RAM_Clear;RAM清除" E" }' u! Q% {8 m/ h8 x
  365. LDX #$00
    6 Q. i6 J$ x. X& X+ `
  366. LDA #$00
    9 S1 g+ Y7 z4 L+ j# e5 `6 b
  367. RAM_Clear_1$ {% j8 R1 @4 M% L
  368. STA RAM_Cln_1,X6 _- }' P" Y4 F
  369. INX& h& |( H+ n8 b4 ^
  370. CPX #RAM_Cln_1_Size! z! a) ^9 j  L* Q5 O% A
  371. BNE RAM_Clear_1/ Q& B+ x/ h1 O# V: e  j
  372. LDX #$00
    8 v7 m- t; D  ~4 S. X6 q8 Q9 L
  373. RAM_Clear_2
    9 Z- Z& e1 m2 ^& v6 ^5 Y  x
  374. STA RAM_Cln_2,X
    ; b$ f; t+ ^0 H8 x' V/ v  r3 n' Y' C# E- i
  375. INX9 `; {3 n8 |! M2 h
  376. CPX #RAM_Cln_2_Size
    , N4 C! N; u0 n0 O: c8 @8 e
  377. BNE RAM_Clear_28 k+ l: Z( Q' L2 r; c( b
  378. LDX #$00
    $ f& B3 j7 n5 k
  379. RAM_Clear_3! W- ^, b; l' T; o6 F# c: u0 Q
  380. STA RAM_Cln_3,X$ f5 I( X/ O% E8 Q. D
  381. INX
      \9 v* k4 d8 s: F
  382. CPX #RAM_Cln_3_Size
    3 |7 I9 z2 H/ T  F" c& C9 J1 U
  383. BNE RAM_Clear_3
    # k$ p/ H3 s( x/ Q9 ^3 s6 W
  384. RTS. c! |: P. }9 Q- v3 u, v7 W

  385. . Q0 r3 X: ~, C* m( S
  386. ;==============================6 r7 [- d1 n. S+ A
  387. ;音乐切换( ?+ P1 m6 ?( L  k6 x
  388. Music_Switch
    ) N8 b4 k. J( p4 U, v- F) H! ^
  389. JSR Key_Proc3 Y6 D# H, x. K5 F
  390. LDA Key_Once
    / @0 d' g+ v5 o6 R/ ?* J9 K! G
  391. CMP #$10
    6 {  r# f' r$ {' w( T$ Y
  392. BNE Music_Start_SongStop9 J" H1 G$ e; g  F. M
  393. JSR Music_ReSet( D0 s7 g$ _. C

  394. 1 M) U8 Q1 I/ ]6 ~7 Q
  395. ;音乐停止9 @! Y, u' u: j
  396. Music_Start_SongStop) M$ Y! l+ J- E3 L5 w: C$ O
  397. LDA Key_Once, ~4 Q/ L& M) Z
  398. CMP #$20
      q5 P& [! @' e+ Y/ x/ \: K/ p
  399. BNE Music_arrow
    6 G2 N/ V5 m( [- |, y
  400. LDA #$01
    % e- s1 X* Y! m" ?! A
  401. STA Music_State
    # `2 ~$ {/ _, v. b  A
  402. JSR Music_Bar_ReSet& G$ ]. @- H( N
  403. JSR Time_ReSet
    7 f2 _* [) c8 b. I
  404. JSR RAM_Clear
    1 l# l9 w( g$ }1 V3 l* l+ q) a
  405. JSR Sound_Clear
    ; ?' v5 V* N  |5 O
  406. JSR Music_Stata_Show
    8 z9 W8 K; _. Y3 P# B# ~
  407. Music_arrow# a! ~2 a7 @" Z% C
  408. LDA Key_Once
      x. g( G( \' _9 g/ l4 `
  409. AND #$CF% u+ u1 {; U" [/ D  |. U* [+ \' U
  410. BEQ Music_Switch_End
      L9 a2 s# c3 O+ v% Z; M! V
  411. JSR Music_Number
    ; J) R/ I7 m0 Y9 C
  412. JSR Music_ReSet% u( G0 l1 M% f/ O, E7 ~
  413. JSR Music_Show5 a* X' p$ u) s( n
  414. Music_Switch_End
    * N5 |2 M% H( d: t" |) ?
  415. RTS* `3 h) m$ j% h3 M  B
  416. ' X) G: G" ^, w! O7 F
  417. ;==============================
    ; U+ g8 ]) j  I
  418. ;音乐曲目切换
    $ n% e& p- q3 U  Y5 I
  419. Music_Number4 W5 a. J, K3 w8 I8 }6 {/ O( u5 S
  420. LDA Music_Cur( v. _6 v; v% _/ E, P
  421. STA Music_Last
    6 [: h, s/ n; |% V' H* C
  422. Music_Decrease5 s! s; ]7 e; h" c$ x# q6 j
  423. LDA Key_Once4 U& @* q- n6 d& g8 X
  424. AND #$429 k! w, D6 f) N% ?) x! s
  425. BEQ Music_Increase' z  J# R5 q2 d
  426. LDA Music_Cur
    ) q- _" T, t0 N
  427. BEQ Music_Increase
    2 _7 X6 Z0 F8 I1 q5 F1 m. C' \4 Q$ v, L
  428. DEC Music_Cur3 D! M) {0 r  I/ m
  429. Music_Increase; Q! i0 l8 o3 D' i# q7 _" }
  430. LDA Key_Once4 n, {+ Y/ E* J3 L8 }; ]: Z2 ^
  431. AND #$815 y& H; M: p: W- u+ S7 h7 k0 c
  432. BEQ Music_Decrease_103 W# p" ?7 d9 _  n$ {
  433. LDA Music_Cur" E+ `$ Z; c( \5 o2 P! R
  434. CMP #Music_Song_Total-015 p! C6 T* k# U- U# ]
  435. BCS Music_Decrease_10' `2 J! K  N3 r3 ?2 [5 x& e
  436. INC Music_Cur4 N1 b) p9 ?3 T4 ]3 t) a6 N) a
  437. Music_Decrease_108 I" j# p9 x& J  o( ]* I
  438. LDA Key_Once: {( [- T: _: r  ^+ h
  439. CMP #$04
      w! E2 K$ Z0 _
  440. BNE Music_Increase_10: ^1 d8 b6 L6 I8 W+ d& ]
  441. LDA Music_Cur4 l) v7 h5 u2 C8 ?
  442. CMP #10% w6 {. w* }8 u9 K* Z5 f3 ^
  443. BCC Music_Start_Song_Min- y6 G, B9 M; d; T( F
  444. LDA Music_Cur
    4 e  }2 Z5 m: J7 j! p% q
  445. SEC
    6 ~, {0 S% Q8 f9 S
  446. SBC #10
    5 t* p; |8 I2 c# C+ f
  447. STA Music_Cur
    ! }1 \7 ?+ p3 w+ m* y
  448. LDA #$00
    : {( o& D2 y$ x" v, F
  449. BEQ Music_Increase_10$ Z7 p7 w6 l' E2 m, L% b$ ~
  450. Music_Start_Song_Min7 m5 v( G+ H5 T5 m. |
  451. LDA #$00" N3 B$ Y; y0 H+ c4 _% M
  452. STA Music_Cur
    , o5 G8 i5 v) m1 u& t5 A  G& r6 m
  453. Music_Increase_10
    7 T; y; k9 l+ K/ J8 v
  454. LDA Key_Once
    / O. T: k, i& D7 g6 T" S$ K. Y
  455. CMP #$08) k. d3 E1 B' J
  456. BNE Music_Number_End
    9 R5 x5 b; A+ y# d1 a+ P2 E9 ]% O
  457. LDA Music_Cur7 r1 N/ r2 h4 U( Q* _) E5 }
  458. CLC  ]3 Y4 ]$ ?% d$ e7 V) ?
  459. ADC #10
    : j7 j4 A! K, [& b( ~  K% |: y
  460. CMP #Music_Song_Total-018 S! b0 y& A2 z+ ?$ n" S" _
  461. BCS Music_Start_Song_Max
    % V7 b6 t7 C. R6 F2 {$ n' n/ V, l
  462. STA Music_Cur
    & ~0 p; A/ t. p0 q
  463. LDA #001 r+ K! _( m+ y9 a; V: O
  464. BEQ Music_Number_End0 A# m. R0 F% @0 U. u
  465. Music_Start_Song_Max7 Y% k3 \! V  ?1 G& {$ ]$ z
  466. LDA #Music_Song_Total-015 g* k" Y5 C1 V6 Y
  467. STA Music_Cur* E$ C1 A9 y, N: W
  468. Music_Number_End
    % j, S; e# d! c3 o
  469. RTS
    7 O: }1 a$ z# a( B
  470. ; [1 S/ f. b. w. {2 |2 t
  471. ;==============================' d: m" G9 `8 i6 b& N
  472. ;音乐重设
    # p4 w  p' J/ p, @) R& @7 E
  473. Music_ReSet5 g* T' @; R9 C
  474. JSR RAM_Clear. o4 w6 L0 H* A7 p, d
  475. JSR Sound_Clear. _) o( }: L' s( ~* r9 `
  476. LDA #$1F3 i' i7 E' t$ q( o8 r
  477. STA APU_STATUS
      ^, M) ?  G7 ?5 U/ g$ z
  478. LDA Music_Cur
    5 z1 y& [  L3 A: D& N$ M
  479. JSR Sound_Init
    ) z/ r( s8 ~* A; }& i: E
  480. RTS
    9 j9 O, L& |/ T, A6 C0 ?3 T

  481. # A+ ^- G- C$ n
  482. ;==============================
    # x# M% B! o9 H# X" H( n8 V
  483. ;音乐端口清除  a7 I3 ?" B9 A
  484. Sound_Clear
    0 S, K. Z: E2 S# T3 s
  485. LDA #$00
    0 r  p8 q+ W' ]' y' ?, I
  486. STA APU_STATUS
    - d% n% C6 H& `, |* Q3 G/ B
  487. LDX #$00( e% g$ G4 x/ n( s# x
  488. Sound_Clear_Start" h% g+ O# ?* Y0 g
  489. STA $4000,X
    - [8 c4 {# d1 E# T7 g
  490. INX! [8 ?. \7 M' C3 d
  491. CPX #$14
    - b. z4 ~; D1 ?0 }' d
  492. BCC Sound_Clear_Start
    ' q1 O0 t0 m/ o( P
  493. RTS
    & g% C- ], [! N. F0 [# A6 k8 o
  494. : e9 `4 e. B8 V8 i' [
  495. ;==============================2 Z' p, Y' m  }6 p# u
  496. ;按键处理
    ( _( s6 p+ ~* k- y/ M* G6 ]
  497. Key_Proc. _5 x! J% O7 ]" C
  498. JSR Key_Scan
    ; @* c' |+ i- d% S/ Y
  499. LDA Key_Keep8 A0 G8 y$ S1 c- W6 c
  500. STA Key_Temp
    ! f$ r9 l9 [" d4 a
  501. JSR Key_Scan
    * }0 ?) P. n- K' Q0 Q
  502. LDA Key_Keep
    4 {& y+ d+ @7 w" e: V
  503. CMP Key_Temp6 s% J/ M( J4 |& y5 W
  504. BEQ Key_Get_Once
    4 e" n$ h9 Y" l2 a# {! j, p
  505. LDA Key_Kemp, B9 k% k" v4 i/ T# e% V( b
  506. STA Key_Keep
    , m  n+ }8 A! I8 M- j6 F
  507. Key_Get_Once
    6 C# L' w2 t& {  `% S
  508. TAY
    ! A) h) N5 _- O, I
  509. EOR Key_Kemp
    $ \6 x4 }5 b5 B- d2 O
  510. AND Key_Keep$ V8 ?: n  b, A( b8 j# b* }
  511. STA Key_Once: n9 B" d3 f3 e: Y' Y( j
  512. STY Key_Kemp
    5 Q+ |5 o" {7 |, Z  ]( W! u
  513. RTS
    0 r& Z/ ]4 R. f+ h5 m1 J* L# j
  514. ;------------------------------# n1 U: N" |6 p  h' A
  515. ;按键扫描
    $ c! d" n8 N! ~( {
  516. Key_Scan
    2 A0 M7 b# h9 [- q
  517. LDX #$01
    ; a1 M9 t, V. y
  518. STX JOY1_FRAME  V4 E8 ?; c+ ]
  519. DEX' t; }) r$ x9 h! E/ U& Y8 u" l
  520. STX JOY1_FRAME
    - j7 i- l  M% B  p8 d9 ?/ ^
  521. LDX #$08/ h/ \" _4 J7 z5 r
  522. Key_Value" }  J+ _# [, z1 p0 F+ U
  523. LDA JOY1_FRAME
    4 T7 S1 ?5 T8 x) q$ m- S
  524. STA Key_Getv
    : v4 B+ }6 Q8 r1 v! L& d( z
  525. LSR A
      f; Z$ l& M4 Y; [, ^1 T* I3 c/ [# p  u
  526. ORA Key_Getv; U, i3 Z  P+ w1 J6 r- E
  527. LSR A% x* d% Z6 T/ S; j7 z
  528. ROL Key_Keep
    + V/ L; M" M. p
  529. DEX5 b6 Y$ I. Y% M6 N$ g; b
  530. BNE Key_Value
    % d3 a7 i% J: g& R
  531. RTS& ]2 X% s6 T/ _& L$ ]+ k7 T! Y
  532. ! u3 \4 o$ X* X$ h% \6 [  {( h- f
  533. ;==============================- U9 j' b4 N) j0 S" z
  534. .IF SOUND_BAR_SHOW_ENABLE
    9 j2 L( V; K+ d. @: b5 A- t
  535. ;音乐条显示
    6 Z# {  b. ~) d4 E7 c
  536. Music_Vision2 Q, D2 y+ T" K# c" J$ F  n' ?5 N
  537. JSR Music_Animation
    8 ?8 k/ k4 O6 R3 }$ h4 g' @9 N
  538. JSR PPU_End3 e: l( A  q$ z8 H. Y& B! Q8 E
  539. RTS- n4 c( K; N- }! H4 b
  540. ;------------------------------& m# s, t  c5 y
  541. ;音乐条显示处理
    . Z) z+ H& B; U4 Y4 `
  542. Music_Animation: Y4 K; ~5 K1 }! K# w
  543. LDX PPU_Cur
    1 T  D) q* h- ?0 |: |8 A. x% J
  544. LDA #Mode_Line
    7 u. ^" e4 K; m
  545. STA PPU_Addr,X1 O. w& U+ @3 s& t8 ]' ^* j1 [
  546. INX
    * I; ^2 l$ w+ w3 l4 |
  547. LDA #HIGH(Sound_Bar_Pos)
    8 @' l+ N+ M; t8 S. i
  548. STA PPU_Addr,X
    0 F; H) J) U6 k  h* [8 g
  549. INX" W# d; ^9 l- ]& S% G% k) \
  550. LDA #LOW(Sound_Bar_Pos); l' e; [- t! `( M
  551. STA PPU_Addr,X8 C" m/ ^& }, I$ K! A
  552. INX
    + _0 A( K* A1 d( O
  553. LDA Sound_Bar7 _  ^9 |0 X, z% N1 j
  554. JSR Volume_Convert
    / `  x- j7 R% J6 S" {( F$ l
  555. JSR PPU_Return
    : G& M1 V9 i& `; K! F, I
  556. LDA Sound_Bar+$4# x* ^4 h# J6 `* b3 i. N
  557. JSR Volume_Convert
    7 ~* z2 @% e+ M3 p& a9 ?( T# p5 q
  558. JSR PPU_Return
    ; Y4 A) z3 n0 b
  559. LDA Sound_Bar+$8
    ( C& l: \7 S2 s; h! x; l- |" p
  560. JSR Volume_Convert_Ex
    ( |1 V5 N* D( e4 H. D8 |4 R9 }
  561. JSR PPU_Return
    . n# q2 `( {" v- z. l! O1 C
  562. LDA Sound_Bar+$C
    + e7 q" T# l  H* B5 C7 S1 ?/ r
  563. JSR Volume_Convert% y5 j7 M1 G8 `9 ~2 L, P, a
  564. JSR PPU_Return
    ' V1 U# ]. o- n* s
  565. LDY #$10
      |- G6 i6 Z! k5 C7 t; W8 w
  566. LDA APU_STATUS9 g" G1 M* X% \' y. ?& H* \% f
  567. AND #$10& L6 g/ {& g4 k: M/ r9 d
  568. BNE Volume_Count
    ! I0 R) H2 Q8 B/ M( i6 Y3 O
  569. LDY #$00
      t  b  ^# g% b5 J2 K+ V
  570. BEQ Volume_Count3 E. ]) B3 T5 d& o7 `# x( n* e- g6 l
  571. ;------------------------------: F+ d0 `  ?% o5 \6 L
  572. ;音乐条处理: U( m' k$ N  G, I
  573. Volume_Convert_Ex; R, R; o- l  P+ ~! @) s
  574. AND #$1F
    / R; Z- `# w9 V$ Y0 P
  575. TAY
    ) a4 u$ ?' j8 z: @: E" O' x' X
  576. BNE Volume_Count) B/ j0 `- M( m- a2 U/ i
  577. Volume_Convert% e$ I0 I, Y8 Q  j5 p4 k
  578. AND #$0F  f* W- Q4 q$ t  @/ x4 ~' M1 R# ^
  579. TAY0 @  v, c" Z* }# p
  580. Volume_Count
    / K: T9 u, K. T$ x8 W( n" z; L# U
  581. LDA #$08
    7 P% c) p0 v( ?+ ^2 r  Z
  582. STA Sound_Bar_Cnt9 y. @2 m+ Q' v) A
  583. Volume_FILL. Q- `4 A+ o% d& y
  584. DEY( H9 M4 R- K4 ]6 S. I* o
  585. BEQ Volume_Half6 v, [2 {, f4 o8 L! [
  586. BMI Volume_Empty
    " H; \8 d0 d- V
  587. DEY
    # s) H7 y$ M6 X" t
  588. Volume_Full; x, R. _/ W, T, }8 d. v
  589. LDA #$16
    # k1 p: @! O( r
  590. BNE Volume_PPU+ c8 ~6 }: b' \- P" C
  591. Volume_Half
    : n, [6 N& D1 F1 L" z! p
  592. LDA #$15$ g( q2 Q& i. T& J0 b
  593. BNE Volume_PPU9 V+ ^! I4 _% w- h) V# c  l
  594. Volume_Empty8 n: q5 R& ?3 r; E
  595. LDA #$14- `/ t; y. W; k) h
  596. Volume_PPU
    3 S6 ~1 E5 f, G3 Y. E  e: ]: C
  597. STA PPU_Addr,X& f! M1 L8 o: E/ n% c3 s
  598. INX
    3 o6 C* o4 [/ ~
  599. DEC Sound_Bar_Cnt
    $ V0 Z; H/ Y) C1 I
  600. BNE Volume_FILL
    7 l2 ]: J7 I& Q3 X9 H* T! L
  601. RTS, z6 U$ W/ W% K, ?7 f
  602. 1 R2 A' x8 }" ?6 k# w
  603. .ENDIF8 f: K  p" r) `: f

  604. $ T/ y; ^* ~6 i4 V
  605. ;==============================
    ; C0 l# [5 b& u* z* @3 ?& T6 F
  606. PPU_Addr_Set;PPU行开始2 u4 [9 j" j* [' p( w
  607. LDX PPU_Cur' {" h( j" `& E7 ~- k5 T
  608. LDA #Mode_Line0 X) w% z+ z# ?7 e
  609. STA PPU_Addr,X/ E3 F+ H, k9 E& s$ ]4 U) a, B
  610. INX! B; U2 S6 g2 [
  611. RTS, L. t  M! c" K- F0 L7 b6 n

  612. 4 H; F+ b% z4 k/ Q# D
  613. PPU_Return;PPU转行2 F' H3 x! }  o: c" \9 b
  614. LDA #Flag_Over
    1 I3 {) Z7 D& h: Z, L
  615. STA PPU_Addr,X
    6 D2 {0 k1 v2 `4 V) W; i- h1 y
  616. INX8 I$ B8 `, T" @' \2 H" e& J* F7 s
  617. LDA #Mode_Return* j1 h# w6 \$ q+ e; s0 H
  618. STA PPU_Addr,X- d( d, q% f* y+ c  M# s
  619. INX# C3 ^# p  q, U! r) S0 [
  620. RTS
    * d2 ]% w3 q$ }3 K' r

  621. # K* c2 I) s. }
  622. ;------------------------------
    + Z' O  O( K& ?" Z+ p% L& S% E
  623. PPU_End;PPU结束
    * K: h2 b. J9 F; U6 x* N
  624. LDA #Flag_Over
      F( i! q0 j/ j5 C4 |
  625. STA PPU_Addr,X- F  q/ G/ T# s: s5 R& }2 Z% H
  626. INX
    ) ]# _0 @4 Q% ^* T
  627. STX PPU_Cur
    , N! p, k' p  {, y  A
  628. RTS& C% w# [# L  X" |
  629. ;==============================6 ?6 s( I5 t4 T5 p1 W% V/ \
  630. Mode_Line     = $FD    ;新起行模式2 L; B$ K, L3 H+ ^/ t2 q, H. O
  631. Mode_Return   = $FE    ;转下行模式
    . p  D0 @+ y5 K/ K
  632. Mode_Clear    = $FC    ;行清除8 `; m/ x" |3 j" @8 Y$ T4 D
  633. Mode_CntLine  = $FB    ;行计数写入
    # p+ q/ `# F; V2 c& a
  634. Flag_Over     = $FF    ;行结束标志9 g' x; B* M. \  M4 Z1 o/ I! Q
  635. 7 g1 ?0 |$ ^5 s5 E) }
  636. ;------------------------------8 U: T* @/ |* N- C
  637. ;PPU处理
    0 F2 Z5 C$ \* g6 ~
  638. PPU_Proc1 N* G7 }9 \, j1 z3 N8 D" `8 ?
  639. LDX PPU_Cur1 r8 b2 u  Z0 U$ W' S
  640. LDA #$00
    0 z3 G9 }$ E7 `( Y
  641. STA PPU_Cur
    7 b9 M9 c7 F8 L9 A0 }% a
  642. STA PPU_Addr,X4 ?" A3 F/ R0 ~7 _. b- o
  643. LDA PPU_Addr
    # M* [4 I( O- ~% e
  644. BNE PPU_Proc_Beg
    4 Y$ X% H3 v3 M, o: i
  645. PPU_Proc_Ret
    9 h# ]+ @5 w  N5 H! V9 I$ H
  646. RTS
      O- G- c8 f5 C
  647. ;------------------------------
    2 B; i2 `9 u0 b  }
  648. PPU_Proc_Beg  ;处理开始
    1 N1 r4 W  `5 u8 q% i. p
  649. LDX #$00
    . A3 l( ^8 u  X/ A! B  y
  650. STX PPU_MASK
    / i' x" h( n# g
  651. ;------------------------------
    0 Y- l. k; ?# [' g  {: d0 n2 ~( F3 h
  652. PPU_Mode_Select  ;模式选择, \' o* y, r+ m9 T2 S
  653. LDA PPU_Addr,X
    5 I4 K' c; Z/ A" ?# ~8 s* N
  654. CMP #Mode_Line$ P; T$ u9 `. [; N( K) X+ A( m! v8 H
  655. BEQ PPU_Mode_Newline% u# n3 q% l' `" R7 K' d
  656. CMP #Mode_Return. ^$ ~' @4 `( G
  657. BEQ PPU_Mode_Return% s3 T; B, m: d) y/ d
  658. CMP #Mode_Clear- x1 |! `$ B3 c9 n* |9 J: G& g4 H8 k) E
  659. BEQ PPU_Proc_Clear
    / n7 ~5 b% J; z" ?- r( p' X1 q
  660. CMP #Mode_CntLine% z( O* @! {) g. R, U* P" L
  661. BEQ PPU_Proc_Cnt_Line9 Q$ h/ a- v: g3 \
  662. RTS1 j6 @) {3 B& o: i4 Q5 t) u+ L& t
  663. ;------------------------------, |% ~9 U$ |. Q4 P
  664. PPU_Mode_Return  ;转下行模式- ^; f" q5 j6 q# o3 I5 `
  665. LDA PPU_Addr_L3 x7 f6 ]3 \. e! z3 a$ |
  666. CLC. z+ n: b6 A' L2 P' ~3 W* A3 [
  667. ADC #$20
      |5 Y  s. f2 I/ ~8 J
  668. STA PPU_Addr_L
    0 m" G" v6 S9 L! b/ }4 \0 b
  669. BCC PPU_Return_End6 A) {- V& M2 ~
  670. INC PPU_Addr_H8 s' U: J: m+ x% O- v& C# M
  671. PPU_Return_End3 u$ V3 p# o- h- K  ~7 @5 B
  672. JMP PPU_Set_Increaser
    3 p; }( r' L  z: D* E9 _
  673. ;------------------------------
    2 i* a1 i- B3 B
  674. PPU_Mode_Newline  ;新起行模式
    ; I! C, U. G4 z
  675. INX
    8 y/ c7 M( ^+ A% w* e
  676. LDA PPU_Addr,X
    & k  X2 m$ D2 {
  677. STA PPU_Addr_H' S8 h& o; c2 U. W, ~! C
  678. INX; |: f: [! J* W& K, y/ M+ F) W5 X: \
  679. LDA PPU_Addr,X0 S4 ?  A$ q. O: g, ~
  680. STA PPU_Addr_L& t5 D) @6 b3 w3 U
  681. ;------------------------------
    * W& U. n; \# h7 k- v0 c' Z
  682. PPU_Set_Increaser   ;设置写入地址4 g, y* x& C: J* [$ x0 E. d0 Z
  683. LDA PPU_Addr_H/ M4 M" f& v- K8 J, B* E5 G
  684. STA PPU_ADDRESS
    0 M, r* M( B" d2 ?
  685. LDA PPU_Addr_L
    + p9 O6 P8 ^" M6 M1 m0 Q
  686. STA PPU_ADDRESS# ]! D7 S2 a- o
  687. ;------------------------------# m' y! ^0 o1 M
  688. PPU_Write   ;写入数据9 G$ I- z8 y! C* G' G
  689. INX
    - S2 o$ z0 N7 P0 Q( A
  690. LDA PPU_Addr,X6 c/ K  x' e, D" B
  691. CMP #Flag_Over
    2 a& _3 w5 e: J/ f/ B0 {5 S9 O
  692. BEQ PPU_Proc_End0 s1 |+ m7 D/ Z; Z# w8 Q
  693. STA PPU_DATA; }5 z& ]4 ?% c6 Y
  694. JMP PPU_Write2 i7 P# h+ j+ s* x# r
  695. ;------------------------------5 Z$ @+ m9 T5 D5 C7 \9 Y* _
  696. PPU_Proc_End  ;单行写入结束
    # i2 L. [8 Z/ H- M6 F9 H
  697. INX% i4 Y: g" x- s( K1 B  A
  698. LDA PPU_Addr,X$ C6 B1 f; t" L& C
  699. BNE PPU_Mode_Select
    7 }4 x3 t  u% g' p4 t+ {
  700. STA PPU_Addr
    9 S: _( n" f: b
  701. JSR Update_Palette_Color( n0 D- x5 @' o( F' d
  702. LDA #$00
    7 {! i) @$ M& b$ d# e
  703. STA PPU_ADDRESS6 D& ~$ \8 \% M) Z2 P% P, v# D4 r+ H
  704. STA PPU_ADDRESS4 J2 S  C2 i$ c& ~3 P
  705. STA Show_Track_Name& F% c9 ~) F7 \: S& J
  706. LDA #Scroll_X
    8 S$ \/ n) ?# m+ E1 g- C- X8 i/ h  ~
  707. STA PPU_SCROLL
    " M0 r; u' d5 K
  708. LDA #Scroll_Y
    9 A# L/ k4 A" \/ W7 G: E+ G- E
  709. STA PPU_SCROLL
    & S; E: L! M7 E
  710. LDA Screen_State% i) y& d5 v& y& e  l. r; P- j
  711. STA PPU_MASK* y' S2 D) V9 ]( V) B0 L
  712. RTS
    % V7 g/ A/ x7 V" k" j

  713. + ?1 [" F% {& z9 P" h4 E
  714. PPU_Proc_Clear1 [! ]$ w2 ^% p. V' U2 i' s
  715. INX+ U. I% d, U. ^# s2 P! e/ R
  716. LDA PPU_Addr,X
    + u3 k: o) Y: W3 J9 L/ D
  717. STA PPU_ADDRESS
    3 W! K9 q2 ~% i$ v8 T* i% }
  718. INX( c, C2 ~! X0 r
  719. LDA PPU_Addr,X" p% B  ?5 \7 U( Y
  720. STA PPU_ADDRESS
    ; a1 F( J7 K' R. M+ u, p( s$ n
  721. INX
    5 g! |- Q# J2 {& ?( q. ~3 c$ m
  722. LDY PPU_Addr,X
    3 r2 @! }4 j3 n" Q3 j* f  I
  723. LDA #$00
    - V+ S9 J8 @4 K' x" w5 N4 p
  724. PPU_Proc_Clear_Write
    7 ?" x! D: \4 n6 o6 X0 K9 w& v/ ^
  725. STA PPU_DATA/ V! V+ i# k1 W1 F  V: n
  726. DEY2 j8 w# p9 i' L4 d7 @3 B3 [  M
  727. BNE PPU_Proc_Clear_Write
    7 W% y% \5 ~: z: n/ o& w4 {9 ~
  728. JMP PPU_Proc_End7 D. n2 |# F6 l  J
  729. - G; n1 k: D% _+ F6 @
  730. PPU_Proc_Cnt_Line
    ( b$ l0 l" c: a& {' q
  731. INX9 A" F  r9 V( g. C' j
  732. LDA PPU_Addr,X
    8 w3 E6 ]/ R. d: M6 m* v
  733. STA PPU_ADDRESS6 m2 t& I2 H6 `  v& b, E7 s
  734. INX+ B' y+ V  |5 t% f1 }: P) K/ o
  735. LDA PPU_Addr,X
    * g/ ?* D% G  ]4 ?
  736. STA PPU_ADDRESS' G4 n0 R0 R% f4 l, K. z3 O4 k
  737. INX
    2 ^2 ]+ q2 ]3 w$ s; O8 E2 p+ g! e
  738. LDY PPU_Addr,X
    ( q( j- P0 {8 E. _7 H3 ^
  739. PPU_Proc_Cnt_Line_Write
    # V; T3 C$ Z0 q# C2 x4 d
  740. INX4 P0 D0 r( x7 r3 }
  741. LDA PPU_Addr,X
    6 H, f5 K* i" P! P  i1 {5 v+ y
  742. STA PPU_DATA4 V0 ]  b5 l! e: t
  743. DEY  b8 L5 z( `  u
  744. BNE PPU_Proc_Cnt_Line_Write
    1 [/ f2 x7 n5 h$ O; h
  745. JMP PPU_Proc_End
    * n/ P& P6 C4 c$ [2 x6 O

  746. 8 w1 ^( v0 L4 a- j
  747. ;==============================
    ; L4 q  x3 m/ e  ]; X' c: c( ~
  748. HEX_To_Dec;十六进制转十进制; _1 J. [! \- |1 I, Z3 N  U
  749. STA HEX_Data# ~! `( N  A( b' J1 T  t' H
  750. PHA
    1 _: N/ l9 c3 v6 ~. D0 _
  751. TXA* c* G3 F7 G% t
  752. PHA
    ( o% Y7 N. u. t0 J
  753. LDX #$00& h: L  B) ^  V/ S! w
  754. LDA #$00( K8 d- Y# t" ~% J& a! S  w
  755. HEX_Cln8 S$ |3 T( \4 }+ t
  756. STA DEC_H,X* ~6 a& z5 d" b& _/ i4 v: t# k. f
  757. INX
      e2 O8 e! \, F
  758. CPX #$03
    " H9 d& l( u7 }# t) T. D
  759. BCC HEX_Cln' \) v1 r" ]* ?) L9 A
  760. LDA HEX_Data
    ; m! t8 Z8 c2 d
  761. ;------------------------------* L% R; Z9 G6 I% M  r, I
  762. HEX_1005 y8 J0 E6 n2 d( @- s
  763. CMP #1007 \8 E- c! V2 E1 j9 I
  764. BCC HEX_102 f' ]! u/ L) L' {( D+ [
  765. SEC
    4 b; u- Y7 A, V5 h# [( B
  766. SBC #100! y- L. f5 P  p6 ]& @& h
  767. INC DEC_H
    " ^/ r1 v4 d  [% G1 T, u; [* Y
  768. BNE HEX_100$ j4 y+ {& N2 \: @" S& Z* [5 m
  769. ;------------------------------& ]8 F6 a/ f9 @, p$ A
  770. HEX_10
    2 J) B  J8 @. b
  771. CMP #10( V, n7 i* \0 c: d2 _! o
  772. BCC HEX_1
    4 K% N8 C" z3 ~1 ~
  773. SEC
    ' y8 u$ v& t% w5 `1 v3 S
  774. SBC #10
    , N$ a# e. y, d# T3 \' {
  775. INC DEC_T
    * Q. n$ g) j: X: E4 |; A  w
  776. BNE HEX_10
    & `# P/ }( W( X) M4 u* E4 O7 `8 |* r
  777. ;------------------------------
    / D' k5 i& a0 n
  778. HEX_1
    2 c: ^( ?$ i% R" ?& z5 V' R
  779. STA DEC_L
    5 n! C. N7 l, _4 y
  780. PLA
    4 B- d* M( k; Y3 p
  781. TAX) e5 ~, W' E/ n) ]! \2 R. k6 C  F% q
  782. PLA
    7 D; {  c/ P' v1 ~* l
  783. RTS$ [, X  `: W  K% b3 i  F- k

  784. : Z2 K1 ^/ W3 e' k3 R
  785. ;==============================
    * C3 a6 l: k( L2 c7 @
  786. ;音乐曲目显示# ]8 Z- r& U6 ]- c% s0 Z
  787. Music_Show1 n: d/ t' n+ A
  788. LDA Music_Cur. h  s% ~5 I. m
  789. CLC" G# N8 b1 b* s; i
  790. ADC #$01
    8 t+ ?2 _6 R3 d2 I* S/ U' r9 y
  791. JSR HEX_To_Dec
    3 B( V/ P- G8 _1 j8 P
  792. LDX PPU_Cur
    ( f+ Z% T( P- S3 Z1 _
  793. LDA #$FD
    / k$ f/ D! T- e$ H' r
  794. STA PPU_Addr,X5 Q; A+ ?! T. V3 C
  795. INX: G8 A  t- l$ C5 v6 f' n9 v
  796. LDA #HIGH(Play_Index_Pos)
    * z9 C$ {; {  A, i( h% R; q1 T
  797. STA PPU_Addr,X. F0 c* S4 {9 w! E* y% k4 V9 b
  798. INX1 F$ c6 b4 w, ~& }( |
  799. LDA #LOW(Play_Index_Pos)# u: @9 o- v' Q# G: B
  800. STA PPU_Addr,X- P7 g  l3 V7 g* w9 Y# j2 y: s
  801. INX
    6 z. A9 y$ L/ Y8 h& ?
  802.   P; J6 }; a) d5 J; o
  803. .IF Music_Song_Total > 99" Q8 d/ I9 d; }1 R
  804. LDA DEC_H
    " ~, ^4 F' U  |! O5 X, `
  805. ORA #$307 R2 k5 W. p- S4 L$ M% z: S0 S6 L9 @0 a
  806. STA PPU_Addr,X
    / l9 s: Y/ u! A5 i; U" a6 Z. q/ s' G
  807. INX
    / Q' T. x7 I- k9 g8 b$ L
  808. .ENDIF2 a- H% X6 a- D5 X7 x

  809. $ M( O9 r5 j( H2 p! ~
  810. .IF Music_Song_Total > 9
    1 E! v9 W  U6 A( s/ p. z- E+ P2 }  w
  811. LDA DEC_T  \+ B+ n9 Q# y4 W; [
  812. ORA #$30
    * K/ g& b- m# x* n
  813. STA PPU_Addr,X
    8 b* ]2 ~3 H/ R3 y  ?' o6 [! Q
  814. INX7 D, d. z# j5 `
  815. .ENDIF9 t, Z0 k& x. K9 s% l5 i
  816. , z, g. w( x' E3 i
  817. LDA DEC_L/ F! P$ V* P6 @2 C5 j
  818. ORA #$30
    / g1 m" i# Z2 b! R
  819. STA PPU_Addr,X1 u* V9 E; B, m+ x, M7 t
  820. INX
    % k, v0 f* a) l( t  m% [* G- X

  821. $ x0 L, Q3 ?$ D/ k- @
  822. LDA #'/'
    # y) Z( o$ k! R; q0 w, C6 P5 I
  823. STA PPU_Addr,X
    " V2 s4 U# a0 b9 K/ A7 y3 d3 n
  824. INX! U5 Y: W, W3 ?4 T- M
  825. Music_Show_Total
    ) O9 p  R6 |. ]3 j3 K
  826. LDA #Music_Song_Total
    % Q2 V, O3 u; o) R
  827. JSR HEX_To_Dec
    5 V9 t% ~; L1 i0 K  _. ~

  828. 9 G+ h( y  c+ F8 f. H  x5 C" `- Z3 Y" z
  829. .IF Music_Song_Total > 99
    8 d" y( y& W  r3 H5 g% I
  830. LDA DEC_H/ t- h" H) Q/ i2 X; ?4 {
  831. ORA #$300 W: j1 @5 s  K1 z( F
  832. STA PPU_Addr,X
    * D. M/ C3 v  V' ?3 c  B8 U! K
  833. INX
    ( K- [) T" s/ m
  834. .ENDIF
    ' A# |' g7 B- L
  835. 7 g* c0 }3 Z' \8 |. L! a
  836. .IF Music_Song_Total > 98 a# }3 u9 v, v: |- Q/ |: U
  837. LDA DEC_T
    ( z" k  K2 z9 j
  838. ORA #$304 E/ b" D/ ]" ]
  839. STA PPU_Addr,X
    / w' F4 P8 S: m, i. H% p
  840. INX% @, X6 f. _2 |5 ~0 V9 c$ {" C9 X
  841. .ENDIF
    ) z$ |/ q; `% V9 C' t

  842. $ R* L$ v" N- d$ Q6 k
  843. LDA DEC_L2 P7 n0 y; y, `
  844. ORA #$30
    3 i8 F/ g! v8 F# |1 \/ k
  845. STA PPU_Addr,X
    % X8 L" u( a  K8 c
  846. INX
    , i$ w  d/ i3 `$ y/ v  G; l+ ~# s

  847. ) D8 w' ]6 ]! E/ I. V" D9 e- a  @
  848. JSR PPU_End/ I2 o7 D5 o0 {5 S
  849. Music_Show_End
    2 ^' ^/ c  L" T# u3 E
  850. RTS
    - w5 @; M* _; t  q% c
  851. " i$ V5 y( [% l" ]
  852. ;==============================$ z# }' S; L! H% _" w* i6 B( ~/ }
  853. Time_Show;播放时间显示
    0 w7 o) Z. D8 q( a2 E6 g
  854. JSR PPU_Addr_Set
    $ i1 r/ H8 a! T: D8 t! Q: z
  855. LDA #HIGH(Play_Time_Pos)
    - n3 q  f% n; p' R
  856. STA PPU_Addr,X
    ; `4 @/ t1 q' P' P$ e: l
  857. INX" ~$ j' H- L9 M
  858. LDA #LOW(Play_Time_Pos)
    ( G) U; W$ c, g: I8 }
  859. STA PPU_Addr,X+ }/ P2 N+ q0 m* T5 B3 e+ X& @
  860. INX8 Z4 x3 T4 w: S- G0 T
  861. Time_Show_H
    & a- |  a1 R( d# r0 }9 S  v
  862. LDA Time_H
    - g3 h& h3 ?* c$ A1 A" l
  863. JSR HEX_To_Dec4 p: I( {$ N, x, b2 ]
  864. JSR Time_Digit
    " `4 X/ J! c- k% R+ m5 W% U
  865. LDA #':'
    . [% D1 k: U- I3 \* J
  866. STA PPU_Addr,X* R4 J0 }9 H" _3 ]) [
  867. INX4 ^# w' E' Q: t: T0 ~+ Q
  868. Time_Show_M3 K6 x9 B: j3 ]% J6 S- f# v
  869. LDA Time_M: l; h8 v# f2 T8 c$ D; y1 Y
  870. JSR HEX_To_Dec) o/ s* z/ _% X8 G( H/ R8 @
  871. JSR Time_Digit2 }. l* f0 y3 I; r
  872. LDA #':'
    * K* N' p# P$ o0 M8 M
  873. STA PPU_Addr,X
    9 |7 e/ a: y2 m5 w
  874. INX4 w5 @4 k/ z* ]+ F
  875. Time_Show_S- a5 X  b) R# f: n4 I* L- Z2 q$ ^
  876. LDA Time_S7 }9 b! Q* [: E: X6 I7 D/ S
  877. JSR HEX_To_Dec+ B5 X6 \3 Q6 b& |/ X4 q  \- h, i
  878. JSR Time_Digit
    + Y8 Y/ i  U0 T3 ^; k) v9 B) S# B  f
  879. JSR PPU_End/ j% |  L" P- @8 N
  880. Time_Show_End, A$ h6 S7 ^7 B; N6 }
  881. RTS' Q, x6 \7 D. p: B2 `

  882. ' k0 t% [6 R, \9 C3 U: c
  883. Time_Digit
    ; W$ w  j; U; B- R
  884. LDA DEC_T
    / O& Q  g) `+ s( X6 x/ @$ x/ Y" ~
  885. ORA #$30! q: A/ I5 t, M3 |6 ?
  886. STA PPU_Addr,X
    ( o! c& X3 \( R
  887. INX
    8 \3 {3 ^/ x5 y& b7 u) `$ e6 N, A
  888. LDA DEC_L$ z+ e  a! k# d1 R* ]; S
  889. ORA #$30
    # q! n5 U5 i& |  t3 R* j: G3 K9 F, m
  890. STA PPU_Addr,X
    8 P: x' S: n8 c4 w7 ]: R
  891. INX$ Z- p1 x% G/ J5 i+ B* T
  892. RTS
    1 S/ O. i/ I8 Y' O# U" M

  893. 3 ~: z) X" Y5 G) v4 L
  894. ;==============================
    & e4 g% S, h' q% Y# R
  895. Time_Count;计时0 @' R; B/ V1 d2 M
  896. LDA Music_State$ {7 F1 j! F0 S. O$ z: q5 A! K
  897. ORA Time_Wait_Cnt
    : S) ]: h! v+ y3 l+ v( B& v* F
  898. BNE Time_Count_End( E+ Q: t: k1 u( S
  899. INC Time_Cnt/ C9 C+ m( P6 j2 M7 v3 C; }1 ^
  900. LDA Time_Cnt9 l% J/ ?. A& v  I. y  {
  901. CMP #60
    , ]6 s; @+ W% [4 j# L. S
  902. BCC Time_Count_End( }$ j! k, z. {# c
  903. LDA #00
    & J: Y4 ^* W" d
  904. STA Time_Cnt
    . R, r  \' u( H0 ?% \  |$ w/ `5 I
  905. INC Time_S. Q! z4 n& a9 q0 S0 C0 w
  906. - L0 D- p9 w; s" B* T
  907. Time_S_Cnt0 R4 G& _( J2 D7 V% D* g
  908. LDA Time_S
    0 d2 G* d3 T0 H4 `" u
  909. CMP #60
    ( e% Y2 D' N7 x, r. Y: s/ L3 q
  910. BCC Time_Count_End
    ' z" e: r! V" J5 B" \* x; l
  911. LDA #004 N1 m& g4 A7 _7 ^: o! I5 ?
  912. STA Time_S5 M0 {5 o) ?- I0 k7 Z' R! Z
  913. INC Time_M1 z1 X; e9 g& g" Z! \
  914. # T1 t. d, Q0 K/ U5 |! t- \7 K
  915. Time_M_Cnt: V9 r4 ^: v0 Z! z* _3 B- g9 Q, j
  916. LDA Time_M7 A/ X9 W7 W  k2 F
  917. CMP #60) C4 k2 Y( U5 ]  Y/ y
  918. BCC Time_Count_End6 Y* ]4 [- h- v" S
  919. LDA #00+ D; S8 D: Z5 O1 @
  920. STA Time_M
    ! f' U/ y6 o" I& I
  921. INC Time_H2 g+ O: U1 M8 w) H8 t
  922. : O0 ]8 i. o' m. x1 H& T
  923. Time_H_Cnt4 j$ b% t8 M! y, x
  924. LDA Time_H) q4 v% A) C8 c7 S" ^
  925. CMP #248 m) _, V1 J/ l1 d: g# w
  926. BCC Time_Count_End
    7 D# `+ e  b" ^
  927. LDA #000 f: O( {! ?3 f6 c0 t' S4 q  N4 E
  928. STA Time_H' A2 `1 i- v$ B& K  Q( S+ h
  929. 7 J& J8 D# |7 m: j
  930. Time_Count_End" E( R+ K0 S" |# `! d
  931. RTS. Z: a# P. T& v0 u9 k5 }
  932. 7 }# I9 B) G/ ?" K' p. p
  933. ;==============================
    - I, N  a" I% |8 ]. o0 N$ f; N
  934. Time_ReSet;播放时间重置
    $ s9 j3 J1 I9 \" Y4 \" |) O; q' Z$ a
  935. LDA #$006 n# n. G6 k% m9 U& ?
  936. STA Time_S+ d$ U: q% a! w
  937. STA Time_M
    * z& a4 p- k: W1 b( j6 K6 Y
  938. STA Time_H9 q0 y0 U, E" \
  939. STA Time_Cnt
    ) r% F; Q3 P) c# w  C& R3 ^) C5 E3 J# u
  940. RTS* w: q, `4 Q' ^
  941. : A: z! ~6 ]5 V+ k7 l6 S: [
  942. ;==============================
    4 i( @; W* H# p8 z& |% p! i6 p
  943. Music_Bar_ReSet;音乐条重置4 b3 Y) Z: e8 Z6 B2 {
  944. LDA #$00$ p3 H7 b; L: l  V9 t  R2 c9 X
  945. LDX #$00
    " l  J' d1 [7 P. e
  946. Music_Bar_ReSet_Set! m/ g2 X$ D5 R' ~: q0 }
  947. STA Sound_Bar,X: G3 J, Q3 Y( M; G/ I' J% A
  948. INX  I. N) p: a% }2 ?3 R
  949. CPX #$10, n) V. R! k9 }" P9 ]
  950. BCC Music_Bar_ReSet_Set
    ! A, x7 C' y/ G  W
  951. RTS
    ! i; C" P5 o5 g% Y+ H
  952. ; K- ~6 s2 h7 F' Y
  953. ;==============================% z3 [8 |5 g9 Q* j9 m
  954. PPU_Data;PPU数据写入
    * y9 A9 v" @! E! Z7 y% R, I6 j
  955. STY Data_L1 B  ~) y. Z, \, J4 P
  956. STX Data_H, y/ Q: g1 U/ g
  957. LDY #$FF" Y' P: V; y5 j/ ~$ y- r8 J
  958. LDX PPU_Cur
    * `/ j9 a& H2 d
  959. DEX' r5 h8 {1 q* z* s- P
  960. PPU_Data_Beg: C4 T4 d% |& w* N) {+ U
  961. INX4 V- b. \  F9 X
  962. INY
    0 {5 `1 M1 z; l! J9 m
  963. LDA [Data_L],Y2 X4 ^5 T0 z  T+ ?& |0 Z& w
  964. STA PPU_Addr,X" h+ j7 i2 A) y
  965. BNE PPU_Data_Beg
    & I' s: S3 g$ N* R  h9 p7 E
  966. STX PPU_Cur
    3 ?8 P5 a0 d& M2 h& ?2 z6 d, S
  967. PPU_Data_End
    , H, D" Y; w. j1 Q  I2 r
  968. RTS0 g4 W/ B4 Q& I) O) h
  969. 5 l6 N  h8 Q0 L- P+ n7 b
  970. ;==============================
    , L! C8 {7 j' d& E( Z/ ^5 q
  971. Music_Stata_Show;播放状态显示
    2 ]. Q& h* l* G
  972. LDA Music_State+ a5 j+ a& S$ l: `" W
  973. BEQ Music_Stata_Show_Play
    8 m& X* T' e+ l
  974. Music_Stata_Show_Stop3 [  ?3 B" i% S/ N- T( a  S
  975. LDY #LOW(Music_State_Stop)
    & E# l% S; M0 C' V, A4 j
  976. LDX #HIGH(Music_State_Stop)3 b9 `+ b# @8 W+ v8 ?
  977. JSR PPU_Data3 r: v  V3 p" c# {6 J% P" k! r# A
  978. RTS
    4 q0 K# e2 w# Y
  979. Music_Stata_Show_Play1 U+ a' y: B  A# `
  980. LDY #LOW(Music_State_Play)
    ' X, {2 U6 d, \& S* v
  981. LDX #HIGH(Music_State_Play)
    ) N: u% f! T+ b3 t( K& ]* E/ S- |0 d( N  G
  982. JSR PPU_Data5 I/ w6 B6 Y- k8 Z  N1 j- K2 L
  983. RTS
    ; m% h+ O# k* {7 _
  984. $ e6 F4 V1 {! }- u+ H5 V
  985. .IF SOUND_BAR_SHOW_ENABLE
    ' \  D& \3 Q7 F  N3 ^# A+ h" o  X4 D
  986. ;==============================
    $ I1 |5 ]" e/ u- N, ^
  987. Sound_Bar_Text_Set;标题与音乐条初始化7 ~9 R+ m' g8 f" k1 g- e  u
  988. LDY #LOW(Sound_Bar_Text_Data)
      {) m, l' U# T; n
  989. LDX #HIGH(Sound_Bar_Text_Data)8 w2 n- h6 T: \
  990. JSR PPU_Data: A8 a% p+ H/ E
  991. RTS- y3 A; Q( q( O% U7 e( J
  992. 6 q: A& u# `% E4 {# n
  993. .ENDIF! Z& B$ p1 Y: U, f) ?- J
  994. ' @, a( w1 e: V: b5 q
  995. ;==============================
    1 l$ W4 ^1 u3 v- L$ t
  996. Set_NameTable_Attributes;设置命名表属性5 F' C% Z4 I3 E* e
  997. LDA PPU_STATUS8 k- O7 D. k; w% _
  998. LDA #$23
    : d3 R8 R* ~- c9 c
  999. STA PPU_ADDRESS- Z5 G- ^& T" N6 k* w6 }
  1000. LDA #$C0
    ) C6 \: C4 v& C: j& e; E7 {
  1001. STA PPU_ADDRESS3 [. F. \% S; q- w2 ^2 p
  1002. LDX #$00  F; B- h/ o- T$ t2 I
  1003. Set_NameTable_Attributes_Write
    & _4 r! E! P# b0 l5 C/ B/ L
  1004. LDA Palette_Attributes,X
    2 R4 F9 m2 x. e' a
  1005. STA PPU_DATA
    / ?1 U/ S' d1 t2 [2 h: ]' W$ V2 r9 e
  1006. INX
    . {: r5 h$ c1 X' b' Z3 T& E2 }" L
  1007. CPX #$40* {' u( ]( ^3 K. \& t( P
  1008. BCC Set_NameTable_Attributes_Write& [9 q; P6 w, {( F8 Y$ i+ Y
  1009. RTS! E3 Z* d% F4 j

  1010. ! k; }( L' [" A) Z: `8 U
  1011. ;==============================
    " D) J1 G- o2 ^, j" v! w/ Y
  1012. Set_Palette_Color;设置调色板数据
    ( M2 d; I( v/ g3 {. \; l; O
  1013. LDA PPU_STATUS1 F6 f: }; v' x0 H
  1014. LDA #$3F
    ! P' a! w7 l- P: f0 U- x% c  t- p
  1015. STA PPU_ADDRESS
    / [3 V7 k; w) y0 o
  1016. LDA #$00; n* `* q* ?6 W
  1017. STA PPU_ADDRESS5 d4 m" a; D& m+ w) _
  1018. LDX #$00
    ; K* Z( o2 V# ?5 b6 y* K0 \4 H
  1019. Set_Palette_Color_Write
    2 G& X. Z. s# o5 f# C, k& Y# T/ ]
  1020. LDA Palette_Data,X8 P0 X  s; ^; p( @# X
  1021. STA PPU_DATA
    3 D% p$ h$ e0 i: X
  1022. INX
    1 z# W# o3 j' H' m% e
  1023. CPX #$20
    # ~- @& C& A- c9 D+ j" H$ T
  1024. BCC Set_Palette_Color_Write
    7 {( C( Q8 Z0 L0 Y
  1025. RTS
    ) T% ?  n9 d# W4 A# f, m) Z1 s6 z
  1026.   T1 y3 Z* ^! O4 p; J
  1027. ;==============================
    1 q/ M! `& e4 s7 R: |1 l+ `6 k
  1028. Init_Palette_Addr;初始化调色板数据* x1 G4 u" g! x, k" @7 E
  1029. LDX #$006 @% u, x" [& G/ l; x: g
  1030. Init_Palette_Addr_Write
    6 V0 D5 X6 z" ^, C" n  B4 r
  1031. LDA Palette_Data,X
    0 D' }0 K  A' |# w  A6 @
  1032. STA Palette_Addr,X+ T- e) ?+ H5 R& V7 B- h
  1033. INX
    4 u1 {, G: @' D& A- U( @3 ]1 H/ k
  1034. CPX #$202 u8 I+ E% N2 S. J" _
  1035. BCC Init_Palette_Addr_Write
    ! d7 n+ A, ~9 q+ P+ _  N
  1036. RTS2 |3 `( I/ X1 u
  1037. ) ]: R4 f% u7 d' ?3 x% r
  1038. ;==============================
    & V# @  s, r) u8 o; z+ ]4 E( b
  1039. Update_Palette_Color;更新调色板颜色  T: [: @, t% Y5 ~
  1040. LDA Show_Track_Name4 {% @6 N# a. w8 A( D9 q! E# ]) [
  1041. BNE Update_Palette_Color_End
    $ ^" m5 z" P0 R; w9 \8 K3 j
  1042. LDA Palette_Update_Flag
    0 e1 E( Q2 J5 v- ~
  1043. BEQ Update_Palette_Color_End$ r9 k' _3 c2 i
  1044. LDA #$3F
    8 `6 B+ U) K/ }$ D6 `1 U. {
  1045. STA PPU_ADDRESS
    & J7 {6 T- |" j+ j2 a/ i
  1046. LDA #$00
    ; o5 ^% j& `6 L& I; P+ j2 ^$ Q
  1047. STA PPU_ADDRESS
    3 ]- m9 s; R+ `: z1 E; b- g  Y
  1048. LDX #$00
    - y. K  B+ `; k( m4 x0 Z
  1049. Update_Palette_Color_Write$ q: g# x" I  z' S4 A7 d; T. l  y# @7 o: M
  1050. LDA Palette_Addr,X9 h+ J  b. S0 H
  1051. STA PPU_DATA
    . p+ a, {8 l. ^6 e8 ]
  1052. INX, D% M0 b& K4 c( q( R4 K/ \0 b
  1053. CPX #$20
    : ]2 j+ {: b- @+ K% I$ x  s
  1054. BCC Update_Palette_Color_Write5 C# i* S% V" D2 v+ v1 ]7 V/ o
  1055. LDA #$00
      ]* J! T( Z0 h9 a) w& O
  1056. STA Palette_Update_Flag
    ' A$ A* L1 t  f% Z
  1057. Update_Palette_Color_End
    + G+ f8 N* g2 f. \8 a
  1058. RTS
    6 C9 B" {6 M2 u
  1059. + ~3 D. ?) I$ B! ]( c: S" O
  1060. ;==============================
    7 L+ t; b3 B5 j8 I
  1061. Update_Palette_Data;更新调色板数据( I+ N" P4 F3 X
  1062. LDA Show_Track_Name3 G  F* P# }: P( v3 Q3 ?
  1063. BNE Update_Palette_Data_End
    3 d) Q5 O, B! `5 f9 X; a
  1064. LDA Music_State
    $ V8 h$ N) Y2 b
  1065. BNE Update_Palette_Data_End
    + k' |: ]6 {, p2 S/ [5 H/ o
  1066. Update_Palette_Data_Check2 d" f7 |8 x0 p
  1067. LDA Palette_Wait_Cnt6 a9 [8 n$ O. ^, c
  1068. BPL Update_Palette_Data_Check_Over5 N" L8 A# W; v
  1069. LDA #Palette_Update_Interval
    1 Y- V4 q7 n" M" a2 D
  1070. STA Palette_Wait_Cnt$ Z8 T2 `+ {% K3 w# W
  1071. Update_Palette_Data_Check_Over" ]" f9 j2 @0 h/ C/ F! t7 v
  1072. DEC Palette_Wait_Cnt  w  a3 G- K1 ?( I+ }! R
  1073. BNE Update_Palette_Data_End
    9 F2 D( K* S+ u+ y# n' U
  1074. INC Palette_Update_Flag
    4 _$ C5 H, ~+ a3 d" o; u; n5 w
  1075. LDA #Palette_Update_Interval& U* w$ ~/ n9 K/ z! }
  1076. STA Palette_Wait_Cnt
    ; I7 K! P& i4 k' g
  1077. LDA Palette_Update_Addr; j; O6 C9 b& T) J( F
  1078. CMP #Palette_Update_Max
    8 x. l6 u- x: _. o) v5 b, @
  1079. BNE Update_Palette_Data_Set, K) x; A+ l/ F" `& S! w; y; C
  1080. LDA #Palette_Update_Min - 12 L5 L- a5 Z0 G3 y
  1081. STA Palette_Update_Addr* X/ Q* z4 j* S+ J1 [1 [( j
  1082. Update_Palette_Data_Set
    - ~7 K8 t; c7 h4 F4 e' w
  1083. INC Palette_Update_Addr
    - U* C0 T, a2 Q! T2 o6 [4 o
  1084. Update_Palette_Data_End' {1 e* @/ i) U5 c
  1085. RTS$ q7 g3 p8 P: H7 x
  1086. ) c2 ~: m' U9 J& [
  1087. ;==============================
    8 l$ B- N/ P9 l" p
  1088. Show_Music_Text;显示静态文本
    4 h+ B6 Y; s/ r: T( M
  1089. LDX #$00
    / w, Q& i$ K0 b3 _( j' `* q# t
  1090. Show_Music_Text_Set
    , k0 U$ x2 o8 e0 f; r
  1091. LDA Static_Text_Data,X4 \" m( d. \* m; I6 \
  1092. STA Data_L3 I8 d, o2 A1 _8 @; Z
  1093. INX, d# J) g$ y/ n+ n' M( G
  1094. LDA Static_Text_Data,X" K% c( g2 r$ j  ]
  1095. STA Data_H
    7 v6 b1 i% j2 m1 Y2 s! P
  1096. INX
    0 [3 m) l. D& W  u
  1097. LDY #$00' e9 B9 k  q$ \, Y( X  `
  1098. LDA [Data_L],Y2 ?/ _$ R% l* B5 p
  1099. STA Data_Cnt6 L# y: A/ \$ R; A  [: [) T( U1 x
  1100. DEX8 J8 u/ a, z$ a0 c) V- G  V
  1101. DEX
    ! X% C7 q, H% z0 o
  1102. LDA Static_Text_Pos,X! o$ V& w) R) Y' J$ a- x
  1103. STA PPU_ADDRESS
    & C5 t5 ^2 X& Q# ?3 d2 n
  1104. INX
    0 O! F* _5 `+ _2 X) p& Z
  1105. LDA #$20
    ! u1 |! T# N1 n/ H1 d% y
  1106. SEC% V7 L* `) K; J/ C8 v+ u: t! a0 b
  1107. SBC Data_Cnt! ?* O* @) r# M
  1108. LSR A# j  F; _2 v! D) t+ x9 a
  1109. STA Data_Buf
    # B' e6 X" n7 O' q
  1110. LDA Static_Text_Pos,X+ N2 Q7 w+ J% h9 D4 F, ]! T
  1111. AND #$E0; T! ?. f4 [: p& r, n
  1112. CLC* [# Y$ b* h2 H0 L% I# Q! A
  1113. ADC Data_Buf
    . V, L, e+ G, b
  1114. STA PPU_ADDRESS9 q4 J9 G% E( O$ s* E; k' a" ^% Y
  1115. INX9 x2 `4 W, E0 {  `/ x9 Y
  1116. Show_Music_Text_Set_Write
    " W7 G3 U: g9 [- \
  1117. INY
      V3 i# n+ D$ J$ s; P4 v
  1118. LDA [Data_L],Y4 A" y3 E6 e4 G
  1119. STA PPU_DATA" I! _- a) |, [; A, R2 i
  1120. DEC Data_Cnt
    0 X4 w. N$ P2 Y- O; G2 V! o
  1121. BNE Show_Music_Text_Set_Write
    0 Q. n4 b) u3 r" r
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    / Z! Y; n0 o" M; A+ _: {+ \' F* _* M
  1123. BCC Show_Music_Text_Set1 b! \  G. Q3 h& k/ }- H
  1124. RTS
    1 J8 I- ~8 _( A! B% Z, f
  1125. ) H1 l' n) ~+ D: ]: r- I7 B
  1126. ;==============================
      b, D  k2 P* O" W6 s  a& j
  1127. .IF Track_Name_Pos;显示曲目信息
    5 q" w, w5 \: Z5 j) f# Q( N$ Y1 z  R; C
  1128. Show_Track_Info$ z; N; G* q% A% a% x. x" s- P
  1129. INC Show_Track_Name* F7 r  h" @* u2 n' n
  1130. Show_Track_Info_Clear
    ! i* b, K0 {  s( s; `( B
  1131. LDX PPU_Cur! q5 ]' D' @% Z9 X5 D! ]- ]
  1132. LDA #Mode_Clear! ~3 Z8 X* b; g0 V5 G: l, _6 i; a8 F
  1133. STA PPU_Addr,X
    / V2 X8 _% K8 q' F& a2 S
  1134. INX6 X. b9 ^/ G- M6 X+ y
  1135. 9 n# J  e7 j4 [6 D
  1136. LDA Music_Last
    1 H# e5 `9 a8 F" w
  1137. JSR Show_Get_Track_Name_Center_Pos) g, J" e+ m( }0 k( t  _! c
  1138. Show_Track_Info_Write_Cur" s( [: r7 k& b0 q2 u2 B
  1139. LDA #Mode_CntLine
    7 N6 d$ H1 O; |+ @4 ~" v4 @3 Z; I
  1140. STA PPU_Addr,X
    # z) Q. W' v3 @' t) b  o
  1141. INX! x) F! g8 M% F- E* _: Q! C
  1142. - r' {9 @9 C; @% O% V
  1143. LDA Music_Cur0 W5 Q# n) J# [& w7 g
  1144. JSR Show_Get_Track_Name_Center_Pos% u$ y) }& p& K0 ^
  1145. 6 ^9 D- ~5 d7 R. U/ t0 Z: M
  1146. Show_Track_Info_Write_Cur_Data
    6 o# \/ W0 }* w8 m
  1147. INY
    ; t4 Y: e% h8 A( W$ U' d2 r
  1148. LDA [Data_L],Y# |* W: _5 T0 A
  1149. STA PPU_Addr,X% Y3 H. ]- ]6 t
  1150. INX. @3 O9 Y( j' t
  1151. DEC Data_Cnt
    4 ~2 d( V; [- ]9 X8 T
  1152. BNE Show_Track_Info_Write_Cur_Data, v8 @5 @2 z8 ]! M
  1153. Show_Track_Info_End2 N1 n; ~8 f9 y+ D/ R  @9 o6 T$ r
  1154. STX PPU_Cur
    # _+ I" E- N, u6 ?
  1155. RTS
    $ X5 A9 h% q2 e

  1156. / U6 T, ~/ L# b) H. s$ n7 X
  1157. ;==============================
    - m! A5 w8 H/ r/ b) s8 \
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    + z7 a$ b" _+ ?. o
  1159. ASL A
    * Z7 m& R1 M0 A4 t3 u  ]2 g
  1160. TAY
    : w3 T% I' V4 |/ u2 t
  1161. LDA Track_Name_Addr,Y
    8 ^9 m; R4 `3 Y9 p8 y
  1162. STA Data_L
    * d% R! ?- S2 f3 T2 |- Y" ^7 a# W
  1163. INY
    5 Z. j' J1 E1 s; @" w  Z; g0 @
  1164. LDA Track_Name_Addr,Y0 Y% x; f; L. W1 V, m
  1165. STA Data_H
      @5 ^% Q! [0 l! J& s& E
  1166. LDY #$006 u4 l# Y1 ~4 I% G, g
  1167. LDA [Data_L],Y
    . R1 Q# z& d5 F" G# N
  1168. STA Data_Cnt# U1 b+ [9 c0 u1 Y: h
  1169. LDA #$205 ~7 C5 V1 k2 ?0 L5 n
  1170. SEC, Q9 m% }: k% `( h# k" w7 Z
  1171. SBC Data_Cnt. @/ F0 v  w8 B  v
  1172. LSR A
    ( [+ y2 N1 w2 d
  1173. STA Data_Buf7 F$ ~* C% z' n2 w$ ~
  1174. LDA #HIGH(Track_Name_Pos)
    $ K* }3 Y0 ]. ]1 ]/ m
  1175. STA PPU_Addr,X3 `$ [1 L) y; k- U* B3 ^5 o
  1176. INX4 i3 ]0 W& C4 W4 A0 W
  1177. LDA #LOW(Track_Name_Pos)% n* X" y# K. t* R9 ?' Y) r' R) i; t
  1178. AND #$E0& r) S' y; O  i8 z: S3 h7 z
  1179. CLC
    # f1 a: @6 x5 g; F2 X5 R5 i
  1180. ADC Data_Buf- S2 E# C: Q" r, u
  1181. STA PPU_Addr,X
    2 p7 ]& g0 W9 d6 c, t% {
  1182. INX
    - Y: e/ m" f9 ?6 M/ A/ b
  1183. LDA Data_Cnt/ Y) Z* F. R* O# h
  1184. STA PPU_Addr,X. Z1 ]0 E- m1 N
  1185. INX
    % U0 I( U( k( k0 |+ p  U) t
  1186. Show_Get_Pos_Center_End/ ?* [) S" J: {& _
  1187. RTS) e$ K# p! ~& |7 v
  1188. .ENDIF
    / s: H7 x9 h3 Z- C
  1189. 1 O- D1 q9 d9 q1 }2 Y! o; Q4 Z
  1190. ;------------------------------3 K, r% R% B& T
  1191. ;命名表数据* j8 ?, t! F. T6 P$ B: o/ W# W: q
  1192. Palette_Attributes/ y; Q. Q5 S9 F
  1193. .IF SOUND_BAR_SHOW_ENABLE
    # r" v" ?6 h3 p/ f, H; w
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$009 V2 I& R# R: ^0 A" v  K( y
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    8 Q$ k! |  l; }
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55& A# [5 q( f  S. X
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55, x# R& P& v  ^% o! n* `' t2 K
  1198. .ELSE
    2 X2 {! T) D7 B
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    / T% \+ {; E+ M
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF# Z- o1 M+ Q' a6 a$ c- r
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55( k+ H; S3 m+ |6 a# v1 l
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    8 V0 Y& T7 q: E- F* c
  1203. .ENDIF  S4 f3 Z1 I7 z5 v0 {% n; `( Z
  1204. # ?: z6 I7 p3 t% o
  1205. ;------------------------------4 u( i4 y" }! `8 P
  1206. ;调色板数据
    . Y; \8 m: f2 s: V
  1207. Palette_Data! l$ \, [. P. l, i  j4 d
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F) k) M: i/ W! ?. u- E6 Q
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F/ g$ Q& \* m7 Z' ~
  1210. # e* X7 i/ R0 z+ b# S
  1211. ;------------------------------" H  Y. l& v" E
  1212. Static_Text_Data
    / D- B% Q: H4 j# j/ |
  1213. .WORD Static_Text_Title_Data* @8 d- Z* `* [
  1214. .WORD Static_Text_Author_Data
    - ]  U8 D- A; t$ C3 X; P
  1215. .WORD Static_Text_Date_Data8 T$ G5 M6 U" C: S) C' ?
  1216. Static_Text_Data_End
    $ S: {( P1 C/ g$ h' a# b

  1217. , V' O/ I* @( s" x: I- L) T
  1218. ;------------------------------% g2 X2 l4 l1 i. E2 H) z) I
  1219. Static_Text_Pos4 q) V+ V! L# d7 b3 ]$ `. {
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)3 Y  L2 \. L& [4 S6 ?
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    ( Q7 e% ]5 x/ E
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)2 H9 q4 ^: Z$ C3 P4 X5 H# e
  1223. Static_Text_Pos_End* G, m+ I7 o/ \
  1224. 2 U4 ]( I" p; {& Q0 m' r: U
  1225. ;------------------------------: _  d# ]" q6 ?% F2 i0 |
  1226. Music_State_Stop
    & s* |1 e) _- C. @
  1227. .IF SOUND_BAR_SHOW_ENABLE# k) n9 t1 d4 x1 F5 [  e; R4 t7 `
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    $ ^. X; U* d- G! C% }
  1229. ELSE
      h6 Q6 Y) |2 F  r  W$ s3 E
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00  G+ P7 [! L' T1 O( ], N% G1 N
  1231. .ENDIF; V% {$ k0 T+ {  e
  1232. Music_State_Play
    / _6 q4 f7 Y7 i) `! j2 D
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00$ |( v" N/ K$ A- J$ `* j
  1234. . m! {5 E8 ^8 `
  1235. ;------------------------------
    6 [& v' l: i% T
  1236. Sound_Bar_Text_Data;声音类型文本  N" E% {* H1 S( r+ Q
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    4 a( ~3 s) i1 \: Y/ Y
  1238. .DB "SQ1-",$FF2 |: L# I$ D+ g7 P0 [: S
  1239. .DB $FE,"SQ2-",$FF: m) J; y% A- \4 w7 m% L; B1 V  Q& z
  1240. .DB $FE,"TRI-",$FF4 q) [( D" p) h3 r* m) w# i
  1241. .DB $FE,"NOI-",$FF3 T& M7 t" a2 T2 C6 X
  1242. .DB $FE,"DMC-",$FF,$00
    2 z/ e% `- Y8 G  O

  1243. , K% C$ s6 h+ {  ?
  1244. .IF Track_Name_Pos2 P& C: G% e  F5 c8 a& p! M
  1245. ;------------------------------1 k* C9 A' `- L0 Y5 P6 ^! K1 J! Q
  1246. Track_Name_Addr;曲目名地址索引
    % A- z2 ~: j2 \) U8 _, a4 e
  1247. .WORD Trackr_01/ s( }& K' Y) z$ e1 x
  1248. .WORD Trackr_02
    5 L* W# G' F. ^; V3 h: P
  1249. .WORD Trackr_03
    1 ?  d3 P4 O: g$ J. @) [# U! t
  1250. .WORD Trackr_04
      |: E9 e, Z" q& R6 ~, k4 ~
  1251. .WORD Trackr_05+ g1 C( f4 B& I7 ^! K
  1252. .WORD Trackr_06. Y3 i0 S6 b) O5 t' D' M
  1253. .WORD Trackr_07
    # W8 W$ A4 w. A5 j7 @. |
  1254. .WORD Trackr_08
    5 @, V5 c) |6 W: N( J  X/ ]
  1255. .WORD Trackr_092 U9 z/ B2 ?4 ^$ ^$ G0 T; l4 ]* x
  1256. .WORD Trackr_10
    9 D3 C/ d) L/ e
  1257. .WORD Trackr_11% a, M+ c- H. P: n2 ?; V
  1258. .WORD Trackr_12
    6 j6 i1 x2 [, @
  1259. .WORD Trackr_13
    0 d# m5 l+ k# a. ]/ ]; G; {
  1260. .WORD Trackr_14
    / x) q) U& R3 e2 w6 |" F7 @
  1261. .WORD Trackr_15- A8 P' W+ v! Q
  1262. .WORD Trackr_16: Z% a6 q5 y) C3 a/ N
  1263. .WORD Trackr_17
    ( K$ J. ]0 |" F1 F# \" u. I
  1264. .WORD Trackr_188 e, [; w& I# i# F7 i
  1265. .WORD Trackr_19
    - |1 Y" o2 o' @1 v
  1266. .WORD Trackr_20& Y6 y( z: A2 }; w
  1267. .WORD Trackr_21
    8 |+ B" u* T( e9 n9 b2 B
  1268. .WORD Trackr_224 x( `; t8 c+ Z; M& i/ ~# o
  1269. .WORD Trackr_23. O$ V! z# T* [9 d8 C% f6 a
  1270. .WORD Trackr_24; I' T, J( G& m+ @6 L/ o
  1271. .WORD Trackr_25' M; q9 P2 g. a5 X) S: y
  1272. .WORD Trackr_26; _9 }& G( R4 |5 H3 ~
  1273. .WORD Trackr_27
    , F# g) G1 N" _1 T. H$ \4 z! x
  1274. .WORD Trackr_28
    ; J8 w4 {' K2 R; e  c  O
  1275. .WORD Trackr_29
    3 g0 \- V  G9 k2 E
  1276. .WORD Trackr_30  C# s7 N, s. I( U% d* z9 f
  1277. .WORD Trackr_313 v. N' T( n% B7 T$ ], |+ E% S
  1278. .WORD Trackr_328 T1 ~! W5 u$ S' ^0 Q* z  m
  1279. .WORD Trackr_33
    4 [" k$ ^" R1 W& _+ |9 D
  1280. .WORD Trackr_34$ ^6 {: O* P, ~( y2 R0 p
  1281. .WORD Trackr_35
    ' S% x% m0 b6 y6 D9 k/ {! o
  1282. .WORD Trackr_36
    , s% z$ w) q5 q
  1283. .WORD Trackr_37
    % ^% d% y0 q* x' J3 N$ b
  1284. .WORD Trackr_38
    : ]+ b2 o  D# z) ]
  1285. .WORD Trackr_39
    ; V% }! T8 M0 s
  1286. . d) a6 ?. v: ?
  1287. ;------------------------------
    . X1 K0 i/ L9 M5 `, r
  1288. Trackr_Name_Data* J, C( W8 s5 D, h+ X
  1289. Trackr_01 .DB $05,"BGM 1"
    * ~& E& n! L% f" a( s
  1290. Trackr_02 .DB $05,"BGM 2"  u7 H. X8 k/ c
  1291. Trackr_03 .DB $05,"BGM 3"
    6 F2 B+ s# K$ x' J$ k9 h  P' ~
  1292. Trackr_04 .DB $05,"BGM 4"
      Y" _- y) x6 b* e
  1293. Trackr_05 .DB $05,"BGM 5": ]6 @( [( P" `6 y8 C! j# W
  1294. Trackr_06 .DB $05,"BGM 6"
    * v6 Y' t) r3 s& |- H
  1295. Trackr_07 .DB $05,"BGM 7"
    ! A: E/ z; J: ^0 D: x
  1296. Trackr_08 .DB $05,"GREAT"
    $ U, M% ~+ j& e6 }! G1 S0 O
  1297. Trackr_09 .DB $08,"BOSS BOM"
    4 \- Y* V5 f2 t+ e7 h! c
  1298. Trackr_10 .DB $08,"BOSS2BGM"& ~1 P" w+ B" C  {- @# ~( a- d9 S
  1299. Trackr_11 .DB $07,"P CLEAR"
    $ D2 O8 T3 Z: F+ h/ ]
  1300. Trackr_12 .DB $07,"A CLEAR"3 Z( w3 M9 s, z  Q
  1301. Trackr_13 .DB $04,"OVER"
    ( r0 N7 R5 [8 V% A9 x5 r/ {
  1302. Trackr_14 .DB $06,"ENDING"
    / F& e9 l9 C* s# Q( x
  1303. Trackr_15 .DB $04,"SUTA"! D+ ]1 `; I% T& i
  1304. Trackr_16 .DB $07,"THUNDER"
    . M0 Q0 T) J( n2 O! s
  1305. Trackr_17 .DB $04,"SHOT"$ V/ D8 }. Z# U% y0 R4 a
  1306. Trackr_18 .DB $05,"LASER"
    ( ^1 Z, r( w* }( c6 R$ F
  1307. Trackr_19 .DB $06,"SPREAD"& h) I/ |4 M+ [6 f# Q
  1308. Trackr_20 .DB $04,"FIRE"
    6 c4 X5 w  S- t( `
  1309. Trackr_21 .DB $06,"B SHOT"5 M/ M) X  F9 H5 {: P
  1310. Trackr_22 .DB $08,"T DAMEGE"
    % e0 {; z  b* a; Q+ r3 h9 O" \0 t
  1311. Trackr_23 .DB $07,"HARETSU"- S7 B5 ~! Q9 Y) @
  1312. Trackr_24 .DB $05,"T OUT"
    + J' n) O' i1 `
  1313. Trackr_25 .DB $05,"Z OUT"
    - z3 M! h9 B3 W1 ]* H7 F) Y/ g
  1314. Trackr_26 .DB $05,"A OUT"4 i$ B' u' Q2 Q. P
  1315. Trackr_27 .DB $04,"ROLL"
    % ?3 i4 m+ t9 y6 |  X( T. @
  1316. Trackr_28 .DB $06,"APPEAR"
    " x- p; L# a3 i+ G
  1317. Trackr_29 .DB $05,"POWER"; Y2 U% ], g0 y; k" [8 I/ P) N7 @' {
  1318. Trackr_30 .DB $07,"BOKK BK"6 x* w  {% p% I. i5 }7 p& k+ f8 f
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    " \2 D4 E8 k& s' h, e6 _) M
  1320. Trackr_32 .DB $08,"BAKUHA 2"$ S1 B0 V  ~( Z3 n5 s& K
  1321. Trackr_33 .DB $05,"ARUKU"# k! ]% _7 P3 T+ ?! N$ \
  1322. Trackr_34 .DB $06,"JIWARE"1 B2 c  s% b, _6 n0 f2 w
  1323. Trackr_35 .DB $05,"SILEN"; h. h8 `; }( k6 V3 q
  1324. Trackr_36 .DB $05,"P 1UP"' ]! l* X$ z0 g. T2 {
  1325. Trackr_37 .DB $05,"P OUT"  r2 t9 h5 C2 L
  1326. Trackr_38 .DB $05,"B OUT"/ W% E- Y* R; \6 S
  1327. Trackr_39 .DB $05,"PAUSE"
    5 P) H$ U( P% l, U7 G

  1328. " q4 a8 m. o: S  z4 T
  1329. .ENDIF
    % }9 G3 p( z9 _

  1330. $ O( ~+ G7 J" L0 F+ q# g) Z
  1331. ;------------------------------0 v/ G3 p- ~0 ~, ~; d% W. t( s
  1332. Static_Text_Title_Data;静态文本数据
    + k6 @  I% C' ?% _
  1333. .DB 12+ N& ^/ q/ T" n/ m- s
  1334. .DB "SUPER CONTRA"
    6 y; [( p1 ^- u- |; J' V8 w# Z
  1335. Static_Text_Author_Data3 c( Z3 f. S3 C# a' Q7 _
  1336. .DB 232 l5 Z- H5 y, ^7 n4 ]) b: O
  1337. .DB "EXTRACT BY FLAMECYCLONE"  z9 H% g: v3 l  G! O0 A+ R
  1338. Static_Text_Date_Data
    ! H; A+ A( Q: f: z# D% n, k" V
  1339. .DB 10/ N& F5 Q! x4 L% o- s
  1340. .DB "2023.07.11"
    . D& Z/ z; u  H: s& H6 ?
  1341. ( Y: s0 a; V" ~' z* Y) C
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    ' N" _0 N; Z- H- U! j* A( Z
  1343. .ORG RESET_ADDR
    . s. U8 m- Y0 s3 U4 Q

  1344. + |" s3 B$ P% q( F- U+ K) m. \4 _
  1345. 4 \7 |$ x& ^5 y  l7 {
  1346. ;==================================================- h6 {% R$ d1 r. d0 ]
  1347. ;切到主程序bank
    0 q% a' ]* Y0 k# t2 A9 J9 X' c
  1348. SwitchMainBank5 r. l( r; P$ D: T: g5 _
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK% m  I8 ^7 d; W7 E9 I. k/ Z" I
  1350. JSR SwitchBank8000" i' W1 X5 Y- f/ U' g. s
  1351. RTS
    8 X$ ?+ m* ^/ n) m& K

  1352. / |+ a1 m. E: u% d- |$ q: L/ ^. J
  1353. ;==================================================7 p1 t8 e; }/ z
  1354. SwitchBank8000;切换bank到8000-9FFF* |0 g; [& F2 Z% _/ o
  1355. PHA
    ! [4 x) U3 C' C6 m
  1356. LDA #$06# v1 K) q( I0 n" c3 W
  1357. STA MMC3_BANK_CTRL" ], I% \3 f& w. h0 {3 B: q% G
  1358. PLA
    8 M& j9 w) S! @& ^2 U
  1359. STA MMC3_BANK_DATA( s! [' d* R, A- n$ u! f
  1360. RTS. X- g, j) v  r# \4 g9 y

  1361. $ k8 d: w, j' Z; {$ c$ t
  1362. ;==================================================
    % j! k, J# Y& |% T
  1363. SwitchBankA000;切换bank到A000-BFFF3 c( J5 S+ p5 C2 f9 ?6 o8 R8 O2 R; t
  1364. PHA& }% i6 A4 n- d
  1365. LDA #$07
    ! R; x( A& }" a8 D( U9 D, f
  1366. STA MMC3_BANK_CTRL" B* R6 ^$ h  @, }/ b+ `
  1367. PLA7 O( n& B6 y8 D; @
  1368. STA MMC3_BANK_DATA
    ! a" z9 z# i6 V$ F5 J) a
  1369. RTS% z; G% T4 T! t4 U( r. h
  1370. ! `! p& F2 D  R, s$ n& h
  1371. ;==================================================
    7 x" w' H2 [  J" W2 u
  1372. Sund_Bank_Init;音乐bamk初始化
    ! }9 Z( T, L6 s1 h
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    $ V/ J1 C: f( C2 g- d5 ~
  1374. STA Music_Bank_8000
    ( F3 u9 z# G" `2 |/ _" N( A
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    7 K6 x: j3 `$ d8 F1 d! T
  1376. STA Music_Bank_A000
    3 K6 B, B  P* q: X
  1377. RTS1 c* b; P8 x; i8 e

  1378. 3 o2 W# h$ j: i$ o; R$ `  m: e
  1379. ;==================================================4 o& f0 _, s8 z* Z4 z0 ?
  1380. Sund_Bank_Set;切换音乐bank
    & B1 q; ~/ g  ~, x. T1 z
  1381. LDA Music_Bank_8000
    & |( Q: K: f) M+ m
  1382. JSR SwitchBank80007 y. r0 P  v8 ^( g
  1383. LDA Music_Bank_A000' w( L3 P8 U9 B! W' f
  1384. JSR SwitchBankA000& V, W+ R1 `* ]; G
  1385. RTS
    6 d; S/ x% W+ a% u3 X- ~

  1386. 6 i. T0 r# u& g
  1387. ;==================================================
    1 O% A0 B, N) P. ~  N
  1388. Sound_Init;音乐初始化
    ! N4 [( _" X  b& b  M. j5 J
  1389. PHA! K. K% F  a. ^9 M2 Q
  1390. JSR Sund_Bank_Set: H1 s' S5 \% f6 O
  1391. PLA9 `! S: H  I/ [
  1392. JSR Music_Init_Addr$ Z; ?" f- m7 O( n! L
  1393. JSR SwitchMainBank, f2 |; T' S3 G) x1 @

  1394. * k, ^$ u% `  W9 Z' F0 [" t; O, A- r
  1395. JSR Music_Bar_ReSet0 a5 [4 G3 x" e* D
  1396. JSR Time_ReSet- Q) ~' w/ N2 B/ g
  1397. LDA #$000 P) |" E$ a1 y7 z0 i8 q" Q
  1398. STA Music_State
    " Z) w3 q. `, }( ^
  1399. JSR Music_Stata_Show; j3 B7 _( Q4 B5 o
  1400. .IF Track_Name_Pos
    6 g, Y1 c  E9 j2 N4 C
  1401. JSR Show_Track_Info5 b: D* k& O7 `; g
  1402. .ENDIF- f* W' u7 c& g9 Y

  1403. 1 F6 z  g# N3 l, W  _
  1404. RTS
    ) |+ M4 P) Q0 ~& t3 S
  1405. ; u6 ?  u' D5 p9 a1 p% }
  1406. ;==================================================
    ! C7 G4 v0 z: j
  1407. Sound_Play;音乐播放) A3 {/ E' V+ i9 o! k3 |7 H  R2 m
  1408. PHA
    4 E% @" ]$ D2 ~9 o, f
  1409. JSR Sund_Bank_Set3 w( K/ p, S$ i. V2 A
  1410. PLA  K  l- i; Z) G
  1411. LDA Music_State/ a. p& }; z" o3 W
  1412. BNE Sound_Play_End: c  i2 v4 b5 {5 ^& ?- o& Z
  1413. JSR Music_Play_Addr) m* U; S3 h. P6 ^: {, o
  1414. Sound_Play_End! S3 S1 s, m3 l( \
  1415. JSR SwitchMainBank
    ) H$ ]2 B- z5 _& I+ N) g8 g7 @, o; [0 p' F
  1416. RTS' T' l% R# L  s7 K, t6 d
  1417. * J' G. G: S5 I3 v
  1418. ;==================================================
      o' p; I( O  d* v
  1419. .IF Music_Reset_Addr1 D, K. d$ }8 d' v# r' W7 L
  1420. Sound_Reset;音乐重设(如果有的话)5 w* I* }, k1 S: J! `: I/ N
  1421. JSR Sund_Bank_Set2 X" _4 T% o6 F+ X; ]
  1422. JSR Music_Reset_Addr# b5 n' b2 C( |& M0 Z
  1423. JSR SwitchMainBank$ H$ n# L) e, b' ^) k3 u1 f8 m. i
  1424. RTS
    3 _/ f  h1 S; {0 m$ V# {
  1425. .ENDIF7 d* {6 D' k# |; [5 l
  1426. 1 I; N2 o5 L: P6 ]0 p
  1427. ;==================================================0 @1 k. @2 \# p" ?5 e
  1428. MainLoop;死循环" y4 i0 b/ `, @9 E9 Z0 w* ?
  1429. JMP MainLoop
    - b6 F1 L5 p# }: @
  1430. " Y8 M( y' Z3 W1 h7 |  P  ^
  1431. ;==================================================
    * D5 s/ z( Y7 J2 ]  p
  1432. NmiProgram;Nmi中断处理/ w# |' w8 |2 E6 Y
  1433. PHA( N5 o: _" E$ N4 d
  1434. TXA
    6 S( t* _9 i' K. s5 i# q
  1435. PHA3 A$ o' D' e3 M" b; J1 D( j8 Q
  1436. TYA
      N, N0 N( Y4 i( A' w. t0 v
  1437. PHA. J9 x  V% [2 v% N0 \( D" ^

  1438. 5 {6 F8 |6 f- ?# b6 F" A9 C, \9 H
  1439. LDA PPU_STATUS5 ]4 @* o% E* K
  1440. LDA #$008 \% ~9 H8 d; ~* H, W0 I" B
  1441. STA PPU_CTRL+ |7 a$ a3 M' I- a

  1442. - E  y* t. M7 m
  1443. ;切换主程序bank
    / _3 T- }0 h; b( u. b7 [
  1444. JSR SwitchMainBank
    2 L, g. g! p0 I! l7 ]0 u
  1445. ! r2 N% m6 w: W8 t/ f" R
  1446. ;NMI处理  V- r, e- k0 W2 @3 `% B5 I- {
  1447. JSR NmiProgramProcess8 t/ C+ Q! `0 l# V) E
  1448. - C& Q. c9 ^  A: G/ N3 K
  1449. Nmi_Proc_End5 A5 u4 L! [5 X4 b
  1450. PLA4 z# K1 y2 n3 {8 M7 }; O
  1451. TAY
    0 H" x( l0 f3 n1 A2 l
  1452. PLA
    6 a9 {  ~2 l9 L5 L1 E. a$ D
  1453. TAX4 g, i8 J* j" m+ Y9 P" m& N" F' W1 V) o
  1454. PLA; C2 V0 s7 }/ d7 V2 X  }

  1455. ) b) v$ m2 j5 w, F( p) a
  1456. RTI
    0 \' X: A7 F/ G, ~7 {' r5 ]

  1457. , U* a! J2 h5 I, ]1 l( D
  1458. ;==================================================
      N1 R/ K- d; F1 t7 O; l/ L0 T
  1459. ResetProgram;重置中断处理! E+ Y# w7 X$ F' n/ O" v4 d
  1460. SEI
    . E6 ]  g  D' r0 N0 k
  1461. CLD
    $ K5 ]2 F$ H4 C/ T! P, L, v
  1462. LDA #$00
    ! ^4 i6 Z* O5 x; R% l
  1463. STA PPU_CTRL
    4 g0 b8 _2 U' N) J" ?
  1464. STA PPU_MASK" x5 D' W9 G' s, ^9 Z
  1465. ! F" R7 b* e: H6 I- n. Q1 d9 }. L
  1466. JSR SwitchMainBank
    & @  @% M9 m9 F' E% d
  1467. JMP ProgramBegin2 M8 x: N4 j1 ?
  1468. $ k5 f) d% I$ c- ?& y- v
  1469. ;==================================================1 e$ r- f! }7 g# N6 C! [( T
  1470. IrqProgram;Irq中断处理
    1 {( y/ n9 i9 [# p) k
  1471. RTI
    * n, N0 Q% q, T+ B4 T! o* ^
  1472. 4 o& L& R7 N9 Q. S
  1473. .IF SOUND_BAR_SHOW_ENABLE
    6 t4 h/ l9 \& t- R6 G( n, ^* E
  1474. .ORG $FF80
    ( y# ]) o, D5 ]; e7 A5 S
  1475. STA $4000,X2 h! m) ~; z! l9 v$ A, w
  1476. STA Sound_Bar + $00,X
    : T' n: [: l* [3 H8 m$ D3 H
  1477. RTS
    ! m0 a$ I# @) U* ]: ]

  1478.   c# z. z9 q/ M8 n% I
  1479. .ORG $FF88( e$ P+ }9 p2 M0 N1 ]; U+ }6 |
  1480. STA $4000,Y
    8 b; L$ A  z- S9 c4 M- e* |7 v
  1481. STA Sound_Bar + $00,Y
    9 l" k8 x5 \4 Q" {
  1482. RTS) K6 P3 T) d4 h  S6 ^* h: d
  1483. ' w5 R' x9 M2 v# F! O: }( E
  1484. .ORG $FF901 Z. O) q- a8 Z+ V
  1485. STA $4004,X2 H& N5 l! q& _$ _9 Y) G
  1486. STA Sound_Bar + $04,X2 V$ y  U+ R9 f5 G2 R
  1487. RTS
    # i9 q. ^; b8 _; I" J

  1488. 7 R# e$ K( B7 z* G: o$ [  ~
  1489. .ORG $FF988 C3 W" z: w  q" D3 _: G& N( w
  1490. STA $4004,Y
    ' o4 c4 Z. e. l! y+ u5 }9 k- k) A
  1491. STA Sound_Bar + $04,Y  k: r# ?  S) u7 b
  1492. RTS
    * S7 K! V; J4 h7 c$ ~5 ]
  1493. 9 ?; H0 ^3 i- O
  1494. .ORG $FFA0
    4 a) J% O4 E0 J' t; f  ^1 _3 l# e
  1495. STA $4008,X! U7 h: J; R9 g9 e  I4 E
  1496. STA Sound_Bar + $08,X
    ' U$ O. O& a6 M7 o' ]
  1497. RTS. F  U+ V3 M# @9 n
  1498. 1 x3 ]1 }& E. |/ L  R  N7 v8 n! v
  1499. .ORG $FFA8
    1 P4 D8 }( f% c/ D# _
  1500. STA $4008,Y
    & P9 K# Y# v5 ~: q, ~4 ?
  1501. STA Sound_Bar + $08,Y$ H% G% J4 v* j. {  W4 `' X4 _
  1502. RTS0 Q6 _) \: L% s
  1503. ' e) X7 A+ M+ i0 h
  1504. .ORG $FFB0. ?3 h; e! S- y
  1505. STA $400C,X
    : k. L3 E  @! H' \0 T
  1506. STA Sound_Bar + $0C,X
    / Y, z" C. Z. B9 a* l
  1507. RTS0 Z5 o/ i) i0 k8 j
  1508.   p! i' i- ]; Y% r, u# d
  1509. .ORG $FFB8
    7 W) ], `: K9 @* \# L
  1510. STA $400C,Y
    6 P, @. J* K: k! R" z
  1511. STA Sound_Bar + $0C,Y: Z5 {) J" H0 s, z; N
  1512. RTS, \/ X9 y& h* i! _5 W( r
  1513. 8 s" C0 L. D0 R0 r. X4 D4 n
  1514. .ORG $FFC0
    1 C- a/ _. n, ~- I9 c: W
  1515. STA $4000
    3 e% \! @% l# Q+ k) A  T
  1516. STA Sound_Bar + $005 S* ^: z$ _/ T7 I$ ?3 M, N7 W
  1517. RTS
    9 l8 S( ~2 }, g. [6 e* h$ K' F
  1518. # ]$ t' u/ @% f" ]; h1 f
  1519. .ORG $FFC8/ K) h' x5 ^7 O* V& l9 m
  1520. STA $4004
    " \6 x% ~% P- Y- y/ ^3 G- A- _
  1521. STA Sound_Bar + $04- H  d$ h1 w( T, r5 d; A
  1522. RTS
    ( V( ?3 d. ?; u8 l
  1523. 7 d; p) F: L+ N: G2 g+ E: @* s7 h
  1524. .ORG $FFD0
    % M) s: j+ q3 O2 T1 y. P3 U
  1525. STA $40085 a+ |/ G% D0 y3 g+ R2 r0 q, |
  1526. STA Sound_Bar + $08& ]: W6 L: d1 o% c% o
  1527. RTS
    - ]- y: |4 B  |4 [/ E) W
  1528. ( E! l& l  O) {6 f8 w9 D
  1529. .ORG $FFD8" Q  J# P8 Z! h, {9 s: N; U* r& F
  1530. STA $400C; \2 |9 K; X. S0 f3 f
  1531. STA Sound_Bar + $0C7 j* i! t3 x. i5 X* ]7 I5 }
  1532. RTS: I8 x. L* X$ A3 i
  1533. , ^: s- T3 K3 _+ c
  1534. .ENDIF
    - X+ z9 c( [+ k" i4 _) l
  1535. 4 Q. V7 q) b2 n3 E  E  E
  1536. .ORG $FFFA8 x; @0 }3 A. C3 K
  1537. .WORD NmiProgram
    9 W# S; L4 g3 l9 o( t( Q6 p) ~
  1538. .WORD ResetProgram% R, q- K1 s  S1 T: y' o6 L
  1539. .WORD IrqProgram
复制代码
, Y% J; k/ ^0 q  ~' _& b" K  X

% x5 L8 v6 H. n' u7 {
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1418 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3420 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-12 04:44 , Processed in 1.141601 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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