EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
3 Y. R. C% P9 X+ G* M% u  D* F& y) S0 o7 |  u3 p' M
1.魂斗罗
- W; A1 ?. _- ]8 \5 p. o! l5 P+ F2.超级魂斗罗
$ A  B3 C; o# x3.赤影战士; j  m5 C# S7 L$ U$ G( x( l
4.忍者龙剑传25 X) a5 w$ X' A, p3 U
5 @6 j% o" L; ]$ Q3 Q

0 M" ]% s$ o2 b$ f2 M( c' p4 n# P% ~" c7 U# e" L/ J, O( n  E0 ^

5 ~' |  J, D- z  L6 G- b5 e% Q源码:7 q- d' I- u* W+ c9 l; g! C0 y! P) j9 o
  1. ;[FC音乐][播放器模板]+ i  ]- {5 |& M% r4 \6 n/ Z+ ?/ O
  2. ;FlameCyclone 202307102 q. m& a1 B" Y" u

  3. . S( k5 W# L2 J3 F/ j+ i
  4. ;文件头! N0 J. v2 V2 G/ O' }) P
  5. ;======================================================================7 I6 O3 P; W$ J, v( y
  6. .INESPRG 4                                              ;16KB PRG 数量5 C  c& f: a* }2 }' E3 y4 e! L
  7. .INESCHR 0                                               ;8KB CHR 数量! o+ J, r8 b8 f; }6 ^; Z
  8. .INESMAP 4                                                   ;mapper 4
    2 t& Q) S3 k; m2 H5 n
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直) ^. q* \* H, A+ Q+ k! I1 M
  10. 8 z- o0 ~( {/ h  z8 G
  11. ;==================================================
    " C) _+ r1 c! d% ]5 f
  12. SOUND_BAR_SHOW_ENABLE       = 1
      o  O# l9 Y7 d
  13. ;==================================================' [# n; j% N9 U" K0 d
  14. BANK_DATA_MASK              = $07
    $ j6 U7 O2 V3 E- K# `+ V
  15. ;==================================================) |" F; V5 t3 C# o
  16. SOUND_DATA_BANK_0           = $007 d4 O% S- `( J, z) t% w
  17. SOUND_DATA_BANK_1           = $01
    - i/ }8 g/ T* m0 Z6 g- |9 S
  18. SOUND_DATA_BANK_2           = $02
    $ V& F2 C( L7 ?/ w4 C' H, U
  19. SOUND_DATA_BANK_C000        = $066 s- }. M- K3 N8 }  g
  20. & |. E/ `3 y( p7 Y( z5 _* E
  21. ;-------------------------------------------------$ I( P/ D) Z* |4 v  o
  22. CHR_DATA_BANK               = $04
    7 q* y! b$ R, @" \5 G! d5 P
  23. CHR_DATA_ADDR               = $A000
    2 K3 l. i+ A! ~1 {
  24. ;-------------------------------------------------
    4 `% B* w5 X' R9 K: N# d/ A6 v! p
  25. PROGRAM_BANK                = $05  t: l9 M& u0 b6 h1 j- I
  26. PROGRAM_ADDR                = $8000
    . o8 U2 s% L% R3 {2 j
  27. ;-------------------------------------------------% W# E7 L2 \" F
  28. RESET_BANK                  = $07+ y7 `$ B. f! c9 ~( C" F
  29. RESET_ADDR                  = $FE00( T6 X. u1 o& x7 q+ \
  30. ;==================================================: K6 Z' ~) @# b$ C! |6 V# q# d
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址7 u: P6 J% _! Z
  32. Music_Play_Addr             = $813C ;音乐播放地址
    $ G1 V; }( ?% K" \" k
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址) C  y- ~& |- t/ u
  34. ;==================================================6 z' D- K" O4 q* y( M+ h* p
  35. Music_Song_Total            = 039  ;全部曲目总数
    8 O( |4 |6 u/ N( H+ a- @4 [  U
  36. Music_Start_Song            = 007  ;初始播放曲目
    : F  x/ Y0 U& Q. j; G: G
  37. ;==================================================$ ]% u- N( j; m" _1 o5 J

  38. / p) Z/ l- }2 l1 w1 a* _
  39. ;==================================================: V) r4 E$ L  i4 z  T9 k1 l$ w% R$ v
  40. Title_Text_Pos      = $210D ;标题文本位置
    ' E1 a" Z* g* {) c% c
  41. Author_Info_Pos     = $2284 ;作者文本位置3 ~8 L) Q9 t5 l1 S
  42. Date_Info_Pos       = $22CB ;日期文本位置
    ( k9 _0 V. g& @3 O
  43. ;------------------------------* b  `' t) w6 l1 Z
  44. ;------------------------------
    ) [. U+ ?* q# s6 j, l% R: R
  45. .IF SOUND_BAR_SHOW_ENABLE
      `. X0 d1 {. Y0 L4 Z1 I( f6 D3 \
  46. Play_Index_Pos      = $21B3 ;当前曲目位置5 h. e# [# B/ I6 J, \& d% v, l
  47. Play_Time_Pos       = $21F3 ;播放时间位置* P6 e' X+ m+ t4 Y2 r
  48. Play_State_Pos      = $2233 ;播放状态位置
    0 ~+ J$ h/ h% O2 b! @5 O
  49. .ELSE
    & j; g, `  o$ f4 v8 k

  50. 1 {3 z. }( o, W# p; S5 f+ t, e
  51. .IF Music_Song_Total > 99
    0 ]6 ?# e( n' ]$ V8 g5 v# N
  52. Play_Index_Pos      = $21AC ;当前曲目位置+ m" x  u5 F! e
  53. .ELSE
    2 w( W* \! C+ r
  54. 9 l0 z% p! ]; L, V
  55. .IF Music_Song_Total > 9
    # _4 r/ \* u0 N8 D& ^
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    . T! D1 V% L. r
  57. .ELSE
    # }# X/ G9 K9 W8 O
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    . e! @# s/ {2 {/ z. i
  59. .ENDIF( S2 A* g2 [9 ^! u6 ?4 C  r1 ~

  60. 7 v# o$ a; p  M: Y, v  P. R
  61. .ENDIF/ m8 ~0 d  N/ k$ g, j/ j8 L' ?9 Q

  62. / }3 V* G1 @! a6 {4 v
  63. ( i& U" u0 _7 A0 q& ~6 Y* p
  64. Play_Time_Pos       = $21EC ;播放时间位置( s/ u2 D. R9 r1 c. m
  65. Play_State_Pos      = $222C ;播放状态位置1 U/ I. Y* a# L. u: }; d
  66. .ENDIF: t% q* g# `# s$ A# Y: X) u
  67. ;------------------------------
    , L; H$ {6 G9 Z/ `/ s
  68. Track_Name_Pos      = $216B ;曲目文本位置
    $ c2 Q; i) i, F: q4 M1 v- M' e
  69. Sound_Track_Pos     = $21A5 ;声道文本位置& W" ?, a8 Y4 ]4 P6 c6 W3 j- d
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置% Z! q- G8 r+ d7 z
  71. ;==================================================
    0 E0 r& n; s; f0 o
  72. Scroll_X = $00+ L; z9 J8 y/ ~9 t' r% ~
  73. Scroll_Y = $06
    ) R- c: A4 q0 o: L& C
  74. ;==================================================
    + }- b: R# F( Y2 A; q5 Y7 ]; u
  75. RAM_Cln_1       = $0100
    # ~& i" z) H# J3 d+ v7 i: R
  76. RAM_Cln_1_Size  = $80- W) ~! z7 @* Y% g$ Y8 c3 |, S
  77. RAM_Cln_2       = $00E0
    : V* L1 R$ w9 Z0 S0 S: H4 g7 ]
  78. RAM_Cln_2_Size  = $20
    ! y% q2 m2 Y0 B; p) v
  79. RAM_Cln_3       = $00E0
    ! [6 Y# _0 R8 J/ y+ |
  80. RAM_Cln_3_Size  = $20+ t8 k; l4 s$ c, M: G7 H
  81. : a9 s6 [! y& J- d* \  y
  82. ;==================================================1 G) X, K" ^% Y# Z. X  c
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器: F, f( N5 M; g7 V( O/ l' b
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器7 F9 @$ z$ i% w9 W
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    & P# v5 M9 c" U. s$ h$ l! `' b
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    % |, f* G. k) M4 c, J0 B) {, L
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    - k3 K& p$ K7 d
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    * ~  K' r4 l1 x) b' i+ }6 r
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
      b7 }% Q9 Y3 _( Q' M. P: T2 C, }! i
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 / N4 U' x3 [1 u
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存/ G' m! z% ^/ R& u  G( ^) [! a
  92. APU_STATUS              =   $4015   ;声音通道切换( ?9 M3 ]8 {/ G7 Z+ n2 Q6 f
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通& r4 _8 Z+ t4 \: j/ m( w
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    % y9 J: w7 l) |( M# ]6 [4 w
  95. ;==================================================. V9 _: N: X) T1 J* W& `: r0 V
  96. MMC3_BANK_CTRL          =   $80002 I. b6 Y' k$ P# G
  97. MMC3_BANK_DATA          =   $8001, P: C2 j6 U% J4 @- S* w  J4 |
  98. MMC3_MIRRORING          =   $A000
    # ~  `8 c) b& ~4 y% s
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    / J1 n6 S/ X' V# s) s
  100. MMC3_IRQ_LATCH          =   $C0003 ^5 U# f  r% y! z
  101. MMC3_IRQ_RELOAD         =   $C001+ g. Q+ m' F9 g: a$ ]
  102. MMC3_IRQ_DISABLE        =   $E000% |3 b: V& k5 f+ a7 g, C
  103. MMC3_IRQ_ENABLE         =   $E001: @5 x, _8 t) C' G
  104. 2 b9 P1 t7 @: w. G
  105. ;音乐数据块1 M) K. z  u4 t+ g6 {
  106. 0 L! ~" u, Y1 l# X! M
  107. ;======================================================================6 W7 J, @/ T% h# p9 Q$ p2 ?
  108. .IF SOUND_BAR_SHOW_ENABLE; ~2 P% q9 R8 e5 ?% q3 E7 x! S
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    / N: S! |5 T7 E5 ]' K5 x% W
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    4 M3 S7 h% e1 E6 M+ a$ i. ?" l
  111. 2 W) B2 H" c* _4 ~% H6 B7 i
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " P1 p! H- F% J/ r1 a5 d+ B4 R
  113. .INCBIN "sound_bank_bar/music_data_1.bank"; Q/ K1 }) \; @9 W% z% M9 u3 M7 d
  114. 1 U9 F4 `3 b" q
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    % `" s) V  p* E8 u( I3 N& c
  116. .INCBIN "sound_bank_bar/music_data_2.bank"6 m) u2 R5 R* m4 y
  117. / d' \# i1 s6 E4 l
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    / @6 u; \* j+ c% F: j
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    - |: Y" P+ g6 Z
  120. 1 e  x* U; Y. }0 `" D9 i
  121. .ELSE
    3 C4 y7 _2 v! |! Z+ G7 `2 ?
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK. a9 g$ v- s. R5 _2 ?' M- D
  123. .INCBIN "sound_bank/music_data_0.bank"
    + Q5 m2 P" {) d9 I0 B! q
  124. ! ~. P, e- k: b  m
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ! H5 {9 v4 a  d7 G- b1 T
  126. .INCBIN "sound_bank/music_data_1.bank"
    7 Q  _! Y5 F9 i+ T* i: I, _

  127. ) D/ {- `2 a: y* a0 c; z& D
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK7 [4 Z; E6 F( a- C$ t$ `6 r7 {0 L
  129. .INCBIN "sound_bank/music_data_2.bank"& ]; S4 v% i- J; g$ l+ w
  130. 8 ?3 _. C: c% Y  ?& l& d) ~
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK. S) W# ~! A8 l; @5 X% }1 k, t/ u
  132. .INCBIN "sound_bank/music_data_3.bank"7 {( k9 ?; K" W5 q
  133. .ENDIF8 L3 G& b3 G- L+ O4 F

  134. 2 ], a  T. ]$ r& p) Y! j; b; f
  135. ;CHR图形数据
    # ?+ T# d  `8 s1 p9 o. c
  136. ;======================================================================
    : k, N3 a, g! ]$ s: a5 o
  137. .BANK CHR_DATA_BANK
    / y  C4 m* ~& d
  138. .INCBIN "chr_bank/chr_data.chr"5 U$ U) N2 y5 l# `3 J# l) k
  139. 5 l! G) X( E/ S" d
  140. ;==================================================3 w, ~; T' m: X0 X0 T" C
  141. PPU_Addr        = $0300: M! M! o1 {& ?: ^! [
  142. Palette_Addr    = $03C0
    3 S0 q/ R3 c, f) n; t- F
  143. Sound_Bar       = PPU_Addr+$E0
      Y3 W3 {2 P: E) D; c( y# R5 G
  144. ;==================================================
      W! v2 n, {( w* ~" M( K: @0 j* h
  145. Palette_Update_Addr     = Palette_Addr+$0D
    1 |( G  F  r7 }( V( |2 B) R
  146. Palette_Update_Max      = $2C  d# O8 N& A2 p. t! u
  147. Palette_Update_Min      = $21, C( E/ G9 @5 _
  148. Palette_Update_Interval = 600 |0 P5 \( G: b& P8 L
  149. ;==================================================
    7 g4 c: u- K' G" [& I
  150. Sound_Bar_Cnt       = PPU_Addr+$F03 u4 _" ?) r: P; m, i7 M, `% d
  151. Screen_State        = Sound_Bar_Cnt+$01
    % \1 q5 \& s7 Z2 V' Q
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    5 H: B% Z0 L3 ~5 e
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
      m4 e! a- y' b4 m- I# u
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    # |: A9 p7 L! t. d8 v  q- s3 e5 V
  155. ;==================================================
    * a  A$ X4 M% i
  156. Data_L              = $70+ M. k7 s* y* v: p0 v5 m
  157. Data_H              = Data_L + $01
    $ {% o  ^' g4 o8 u- l
  158. Data_Cnt            = Data_L + $02
    " f# W7 _' d. X, j, e
  159. Data_Buf            = Data_L + $03
    4 I+ q$ d% A9 x) F5 H; ~" k/ P
  160. Time_Wait_Cnt       = Data_L + $04$ H4 _* Y/ P* g4 R/ a, ~" Y* z  w
  161. Palette_Wait_Cnt    = Data_L + $05+ w. ?& J: ?9 N1 d  l$ u) i
  162. Palette_Update_Flag = Data_L + $06
    5 D, p1 C. l! N* w4 }
  163. Show_Track_Name     = Data_L + $07
    + W, R* Y7 X" [- V( G( o' D
  164. ;==================================================
    & J9 k  t7 t3 `5 V
  165. Key_Keep            = Show_Track_Name + 1
    ' \/ r6 r4 A6 R1 s" R
  166. Key_Once            = Key_Keep+$01
    - j9 i$ i1 N* l; \) s
  167. Key_Kemp            = Key_Keep+$02
    7 d) S1 L; o  y5 K$ P
  168. Key_Temp            = Key_Keep+$03
    6 U1 }/ l) E8 l# y' m
  169. Key_Getv            = Key_Keep+$049 J; F: j* b$ W/ k! Y
  170. ;==================================================/ u8 X9 ?% t+ L6 p$ I, |$ w& ]1 L
  171. Music_Cur           = Key_Getv+$01) s& _& T* B. R+ s
  172. Music_Last          = Music_Cur+$012 u4 n" V  |5 ?. z( A6 i
  173. Music_State         = Music_Cur+$02. F$ K% t* @5 i3 J) W3 u
  174. ;==================================================
    7 K- F( W/ C. m! T" Q- F; \6 `: @
  175. HEX_Data            = Music_State+$01% w7 `4 _9 u7 w& m' V8 |
  176. DEC_H               = HEX_Data+$013 k7 K  V# q+ P6 F
  177. DEC_T               = HEX_Data+$02% g5 S1 a# M" o+ z" Z
  178. DEC_L               = HEX_Data+$036 G! h2 f% \. U2 c/ B0 t
  179. ;==================================================$ i3 ^/ s. T3 }3 B) }( ?9 @1 o
  180. Time_S              = DEC_L+$011 s7 H& m6 R. e  u
  181. Time_M              = Time_S+$016 [" Q3 s5 E$ V! I% e2 {3 Z7 \
  182. Time_H              = Time_S+$02
    2 ~. |! }) w! _- y
  183. Time_Cnt            = Time_S+$03% ]4 r! D7 ^+ H7 a  E7 i) _
  184. + z; c( K, M2 _& W8 K6 D
  185. ;==================================================. V; R6 B* u0 J$ \% D# n
  186. Music_Bank_8000 = Time_Cnt + 1$ W3 N: S8 J$ [2 c4 F7 `' f1 ~) a
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    3 G& [+ H% M: M7 Q: K+ u" g
  188. ;==================================================
      b' I4 ]5 r" S$ t
  189. / g' J6 N: r9 N1 V$ ^* k' W1 ?
  190. ;======================================================================% w: Z; o4 R7 j+ O
  191. .BANK PROGRAM_BANK, N% c& F' }! g6 ~
  192. .ORG PROGRAM_ADDR
    % D- r) k" V- o* y8 G- e
  193. % i8 q; \/ J! ^& y. }
  194. ;==================================================
    7 k3 _. O( O1 V
  195. NmiProgramProcess;NMI中断程序处理* N2 {2 {# i7 P% M/ p6 \9 Y" q
  196. ;处理PPU图像
    " {& [1 o+ X: _* {! P* c
  197. JSR PPU_Proc
    ! k5 W1 p8 @- M0 r4 f$ s2 G

  198. - O5 w3 ]5 `/ Y& @9 i" G4 X4 v5 y, J
  199. ;启用NMI中断
    ( ]& W1 @/ H( O6 }* e: g5 L
  200. LDA #$80
    1 L8 A1 M/ w$ d
  201. STA PPU_CTRL8 Y# {# D- P4 y" |" f3 w
  202. 1 g' s% F5 |8 D% K9 }8 P) j4 T
  203. ;更新调色板- X) h1 E. C' S! {
  204. JSR Update_Palette_Data
    6 v* a3 U; H; X6 s* a  s

  205. ' l/ M2 g9 A* x0 l- Z
  206. ;显示时间(缓冲)
    ; ~  {' C7 `+ F) l% @1 y  t- f5 f: F% L
  207. JSR Time_Show$ D% M/ Q) p1 L, a  {
  208.   ~6 {# T, ]( n. K# W, R
  209. ;播放计时
    5 L  v4 {. ]. Y2 `" n* L1 s/ m* p
  210. JSR Time_Count. T, r  r5 v7 P$ Z

  211. ; w2 Q+ J  ?, k
  212. ;播放声音$ R) i/ t) d: d( z7 E1 s
  213. JSR Sound_Play
    ; S1 \$ O4 {7 _$ K# k" O

  214. " k' S$ E3 G" F6 H" f" N5 ]. {# `
  215. ;切换音乐(手柄触发)( k) V& m6 G( K6 m) [
  216. JSR Music_Switch
    2 }1 t, z1 O' I" d  d
  217. . ]8 {/ e3 p4 ?+ i6 J
  218. ;音乐显示(缓冲)
    9 t; \% m  C' A$ M
  219. .IF SOUND_BAR_SHOW_ENABLE7 R3 B* N" t' ^$ w/ s
  220. JSR Music_Vision
    % v4 i& t: G# L% w
  221. .ENDIF
    ) o" i1 l0 u6 {3 ~
  222.   ~; Z! x/ _% J% E* f5 b
  223. LDA Time_Wait_Cnt
    , F& V. U" [) @8 I* i: s
  224. BEQ NmiProgramProcessEnd: _* ?! G- H- J) N2 m1 S
  225. DEC Time_Wait_Cnt
    $ V3 f8 ]# F. d( }) g
  226. NmiProgramProcessEnd7 l9 o; C) E  c4 ?
  227. RTS
    * H4 L4 Z% R9 h' g

  228. ! Q' o/ E) @6 m* f2 e
  229. ;==================================================( t% x: k+ S# K& |1 [6 M# d
  230. ProgramBegin;主程序
    ( M0 z3 E' D) F
  231. LDA #$00
    7 ~& d! E/ A, r1 V  D6 X7 T1 Q6 v, ]
  232. STA PPU_CTRL
    8 d& [- k! |4 }( c9 `- ^
  233. STA PPU_STATUS" i1 o/ @- V0 ?( J  d
  234. STA PPU_MASK
    0 W+ Z; g6 H; u/ R; C
  235. STA APU_STATUS
    # m* i2 I( {& w- v
  236. STA PPU_SCROLL
    + A; |' o: [+ p: I  i  K9 |/ G8 D
  237. STA PPU_SCROLL
    4 @- ~0 o3 e% ]6 w  I' m: d
  238. LDA #$C07 f- i' T6 o: f. S2 j3 h
  239. STA JOY2_FRAME
    . }& ]* Y! s; p' ^+ Z' W4 N9 w4 G

  240. " h8 m2 g* k$ x3 `" K% H5 F' Y/ X
  241. LDX #$FF' r  g' A$ c5 _0 b0 i+ t$ _; e
  242. TXS
    9 N# ~* c8 q6 O1 W8 K
  243. LDA #$000 y# G$ U) R' w- m3 l
  244. STA PPU_CTRL
    9 ]% V- F8 O# V2 b7 w1 M
  245. STA PPU_MASK
    ' ?# ^& I' [/ l. E3 C, E9 b
  246. STA MMC3_IRQ_DISABLE
    2 y$ t: B* q- ~

  247. " ^+ D# @) J4 i/ }8 h9 N
  248. ;==============================
    ) G# d( c6 l1 f
  249. ;调色板清空& g6 ^/ L- k, r% c2 m8 g
  250. LDA #$3F
    5 u6 ]- T$ N$ l# T' e: _
  251. STA PPU_ADDRESS8 B% }3 E' O' _$ _- j& i
  252. LDA #$00! Y* g% j% b( }2 [  S
  253. STA PPU_ADDRESS" A3 n0 [+ G% M( h
  254. LDA #$0F
    7 ~; ?2 S2 O9 l; N
  255. Palette_Clear! X. e! r4 |3 l" {1 o9 n; f
  256. STA PPU_DATA( E+ m3 q% J( l* ]9 e: X
  257. INX
      U, Q% D" O" O: S
  258. CPX #$20
    3 j( `2 ]. i% o! Y9 V# a( W
  259. BCC Palette_Clear
    6 O! r/ i* V( R, {+ [
  260. LDA #$00
    ' n- J( r  b& n. u3 h! ?+ D- ^5 t
  261. STA APU_STATUS
    7 o( \3 ]4 `% I
  262. ;==============================4 ~' ?+ T2 a& k+ S5 W" E
  263. ;初始化背景调色板. }3 a+ t1 l0 G; m# Z9 e2 t
  264. JSR Set_Palette_Color: u2 t+ A. x/ O  T
  265. JSR Set_NameTable_Attributes$ ?, E2 V" \& _2 f8 u: u
  266. # ^' X' V6 P* |) p
  267. ;==============================
    1 O  z. J) G9 i- P
  268. ;RAM初始化
    4 K( c* h3 e$ V, l
  269. RAM_Clear_All$ B0 m+ U% @: w; k
  270. LDX #$00" Q; M8 Z$ l( p4 [1 o/ f: R' t
  271. LDA #$00; v, H: C' E, ?% A3 O
  272. RAM_Clear_All_Start, q* a& g  b- v2 s! x$ O. X
  273. STA $00,X
    5 g' i" R7 C# L9 c) m7 E& u
  274. STA $0100,X8 t; v& Y$ ?0 p% _; d
  275. STA $0200,X
    9 U; g- S) F' ]$ \' }. y( T6 Y/ _
  276. STA $0300,X/ r7 w  ]0 k& s
  277. STA $0400,X
    : a' r9 E; k4 L
  278. STA $0500,X8 S/ [! `: y$ b+ u. K
  279. STA $0600,X
    % S! r; K. v/ b( A
  280. STA $0700,X  T# u- f3 ~& ]/ @
  281. INX
    2 ~3 m3 x& n/ l4 W) d
  282. BNE RAM_Clear_All_Start" v  y. @7 u" F& I* U; y

  283. ! m; x+ F% {2 |1 Q! p! q
  284. JSR VramInit$ J) u  X9 s$ f! j% j
  285. JSR Init_Palette_Addr" a( i; G; z/ V- k
  286. " s; u3 E& w, m- h
  287. .IF Music_Reset_Addr! X  `: S3 T0 V6 y$ Q1 p5 o
  288. JSR Sound_Reset
    * ?9 y. s) I4 f
  289. .Endif, r0 {! Q( `+ D& }
  290. 6 R$ Y  o1 H- }
  291. LDA #Music_Start_Song-$01
    ( W8 H( g+ S1 p
  292. STA Music_Cur6 I7 Y3 t6 i* r3 r2 L

  293. , v; M! Z" K9 s- Q" {. q
  294. JSR Show_Music_Text
    , ]; z! T' @1 f. [, Q4 M0 ?

  295. : G/ L3 b" V- \3 ~4 x
  296. .IF SOUND_BAR_SHOW_ENABLE# z8 o$ p) G9 ~* P9 v
  297. JSR Sound_Bar_Text_Set3 v0 |$ e: n5 M; G7 _0 ]5 M2 S9 G
  298. .ENDIF
    . _' n1 @1 q) X+ [' \
  299. # r! R9 _5 o8 U7 T$ F6 U) w& O
  300. .IF Track_Name_Pos
    0 ~9 F: V3 l! W8 D
  301. JSR Show_Track_Info
    * h' G9 x5 u" ~* P6 O7 F/ Z
  302. .ENDIF0 \) }  k  w. l2 H, C) }) Y

  303. $ `. |0 k- r8 v% D- w0 b' X
  304. JSR PPU_Proc" o; @7 d2 ^: p0 B( Q
  305. ; G) v8 a# {/ m" ?2 o
  306. LDA #$0E: x6 r4 y3 n, Q! G1 l
  307. STA Screen_State. N2 B: ]: B/ F5 _6 Y
  308. ' e: d- `" t: X+ F: r1 T
  309. JSR Sund_Bank_Init$ I: _" ^! X! W" D4 P# n

  310. 1 B5 U# ?# o* z2 A/ K; S: {
  311. JSR Music_Show
    ' [* f0 {2 a$ Z2 K: T9 s
  312. JSR Time_Show
    + G8 y5 ^) h; ^; I
  313. JSR Music_Stata_Show; L* _, w" c, y5 \
  314. JSR Time_Delay
    " `0 d3 [4 t4 I. O

  315. 7 ]+ M( V' \$ B
  316. : c2 W: f$ x2 \8 Z3 Q
  317. LDA #$80
    , i" e! _, @4 O1 Q2 K' {) `9 k$ F
  318. STA PPU_CTRL" `: @) ]* u" t) q" F

  319. - S( V8 F" ]& g7 A) z! P8 z
  320. LDA #$20
    $ l+ ]6 B& y5 L2 i% m: ~
  321. STA Time_Wait_Cnt9 B) a( o2 z3 t
  322. - i# Z% C' ]& }6 y4 O
  323. Wait_Time_Over
    4 W3 o' U/ X3 \# S" a
  324. LDA Time_Wait_Cnt
    9 E! z1 k& e4 x6 i: a; B/ \+ o' S% k
  325. BNE Wait_Time_Over" s4 c% c& V1 d0 d
  326. 5 c  f1 }1 i! p8 b
  327. LDA #$1F
    ! g: s. a! B2 q) g
  328. STA APU_STATUS
    : {7 B* c8 k: {' x% O- v* W
  329. LDA Music_Cur2 s* y, f& c$ R; {6 Y) M2 s2 `
  330. JSR Sound_Init
    . z/ u4 p  t* i4 u8 g

  331. + V7 ?2 g3 N$ Q7 J5 F
  332. JMP MainLoop
    7 s# [* \& i  F4 h9 ~% n
  333. 5 w: |! ]* Q9 ~# Q6 I2 G& S  l
  334. ;==============================" B6 @; ?$ D) g* z4 }: l6 P! _
  335. Time_Delay;延时等待7 p- v" W! W: l8 I- P
  336. LDA PPU_STATUS- d  z  ?  p+ m) W5 E
  337. BPL Time_Delay
    7 q1 D1 E1 h: d/ Q5 j
  338. RTS) i" `  Y9 d: \3 f3 C; u4 j: t0 Q9 Q
  339. 4 R& Z3 |( F3 A: q, ~6 S$ I
  340. ;==============================
    5 [; ^$ _- O0 c2 k& q  S
  341. VramInit;初始化图形内存! Q! \. \* a8 M
  342. LDA #CHR_DATA_BANK
    8 S0 ]4 {) T$ Y
  343. JSR SwitchBankA000
    3 n: Z9 s+ Z" F
  344. LDA #LOW(CHR_DATA_ADDR)
    8 }4 S5 A; R: b0 y1 s% D
  345. STA <Data_L
    - B2 P0 E9 g  e+ G& T+ i/ a2 a( |
  346. LDA #HIGH(CHR_DATA_ADDR): r! U0 G1 h1 \. W+ A9 y$ k: r+ S
  347. STA <Data_H
    6 N  ?  D( l! _- w. \8 B
  348. LDY #$00
    9 T7 ?) w) O! p
  349. LDX #$20
    2 v0 s" _* g7 u7 f  C0 C& d- g+ s9 |
  350. LDA #$005 f* p3 ~1 D8 \. r
  351. STA PPU_ADDRESS+ e. @' l; n! Q2 B9 e) q1 o2 _: X
  352. STA PPU_ADDRESS2 ]; i8 G# v2 D4 C
  353. VramInitWrite
    ; K$ z# q7 c$ F3 T
  354. LDA [Data_L],Y
    " _, {, _+ ~& [" ^% C) q" m
  355. STA PPU_DATA
    ' Z( Q. ?  G+ u* @8 S
  356. INY9 ^! `0 Z9 @% `4 k9 [2 s
  357. BNE VramInitWrite
    6 k0 y7 J1 v* T, Y# N
  358. INC Data_H
    ' B6 k, y3 }5 b
  359. DEX3 u) l# f- Z' J+ A) d+ ]7 H% L
  360. BNE VramInitWrite2 J" L* t$ M/ n, D5 ?
  361. RTS
    - s& ^8 l9 Q  M. |4 `0 O' h( n6 x
  362. 6 F2 D! z% H5 y8 Y4 @, k8 q
  363. ;==============================
    0 R+ c* t8 L  }3 A: ^- p4 k6 d
  364. RAM_Clear;RAM清除
    6 q. E9 k4 c8 x# N! i
  365. LDX #$00) g2 ?5 @/ b5 W& W: [
  366. LDA #$00
    # Z% c5 a* w% {$ I. d# S3 X& E0 e
  367. RAM_Clear_1/ x0 y, W6 J7 b& A7 A8 b0 X
  368. STA RAM_Cln_1,X
    7 \( D  U' S" C& X' b4 |
  369. INX
    , M7 p! L3 j( C* t3 ~8 G/ G
  370. CPX #RAM_Cln_1_Size9 T3 }! m* I% R
  371. BNE RAM_Clear_1
    , V6 w3 D4 K7 c
  372. LDX #$00
    " I. u% @2 D( G* Q0 |
  373. RAM_Clear_2
    ( i4 u3 v4 F- g. e' ^" U8 E' F
  374. STA RAM_Cln_2,X3 r7 ?/ u6 X4 @# |4 B- X
  375. INX
    ; P; }% c0 S0 b- n
  376. CPX #RAM_Cln_2_Size
    ( r' F/ E( F; ^
  377. BNE RAM_Clear_29 \& Q  y, I* ]" B
  378. LDX #$00
    3 U, ]* j$ [6 R1 Q; ?) W
  379. RAM_Clear_3
    ! Q6 j. D: V8 `3 k- u3 d
  380. STA RAM_Cln_3,X
    ! l8 Q* K* x8 [
  381. INX
    ( t2 \3 X4 l) |. _' ~$ z
  382. CPX #RAM_Cln_3_Size
    9 K" t: B0 q6 Z! \2 w2 D; m
  383. BNE RAM_Clear_3
    1 W$ [) }$ }* d7 y6 h
  384. RTS- p& I, p5 \5 n" U2 a* D; z
  385. . i0 Q0 N# B) X" e
  386. ;==============================
    ' {. R2 w5 ~, S5 g1 X. M
  387. ;音乐切换1 P! R- v# C3 \2 c1 B1 \8 W
  388. Music_Switch
    , e/ o) W  q* R7 o1 V
  389. JSR Key_Proc
    3 h- a+ C: D* a5 d  x
  390. LDA Key_Once6 h. v' d2 N( Y. H. K. \
  391. CMP #$10
    1 U2 j* Y9 j# O  r- X* L( @: h) p' p3 J) Z
  392. BNE Music_Start_SongStop( r, s) Y3 x! y+ t. G
  393. JSR Music_ReSet- ]) }; O; ]) V5 }- @
  394. + f' [1 u5 d/ f& ]+ p% A. F$ A1 s
  395. ;音乐停止
    - g8 B7 o) i' X
  396. Music_Start_SongStop
    6 M' x; c2 o6 k6 O% p
  397. LDA Key_Once& _9 d; w. T" m/ b1 O* p+ M, v
  398. CMP #$20& c. l8 ^# T$ q2 K# P
  399. BNE Music_arrow
    5 p% ?* v* ^% ]& Q+ f5 t& g: c
  400. LDA #$012 P1 L/ g2 q& `& h# k# D% |6 }
  401. STA Music_State
    8 L2 z4 x& r' R$ T8 @; |
  402. JSR Music_Bar_ReSet. d  F4 d, b& }( L, y
  403. JSR Time_ReSet- m$ e$ r) e, v+ h; H. k: }- ]
  404. JSR RAM_Clear1 \& B7 _- ~3 E5 o- }
  405. JSR Sound_Clear
    ( m# n( ?  O1 p  J4 s$ m
  406. JSR Music_Stata_Show
    $ D2 N7 K6 B% Y0 o
  407. Music_arrow
    ' `" x7 \1 _. v; v$ O* V
  408. LDA Key_Once8 V' W5 O8 O. x, }
  409. AND #$CF
      l1 x" {- g2 c2 l4 C1 z$ g% r
  410. BEQ Music_Switch_End
    2 t  r! x# C  \& |# L2 |$ X
  411. JSR Music_Number8 T( N5 p2 B7 i4 p
  412. JSR Music_ReSet% y8 p; t# V3 M4 H" G
  413. JSR Music_Show
    4 {4 F; U/ S9 {; o- a6 _0 x( u& ]
  414. Music_Switch_End0 j# a6 H! m2 c, s4 S" M1 {
  415. RTS
    1 K* D0 g* ?9 [6 h& t- |2 [
  416. $ y! B: G3 ]" P* a
  417. ;==============================3 |/ }; L& d' v8 T( F; ^9 W6 z& R
  418. ;音乐曲目切换: j$ w' ~' t, g
  419. Music_Number0 x4 i$ F5 Z9 w1 H0 z% l9 O, z
  420. LDA Music_Cur
      v* n' q8 P/ l; V0 d% L6 |4 q
  421. STA Music_Last1 m+ b3 ~- l0 b2 f1 o" d
  422. Music_Decrease
    + `# F/ j# N) {. _/ o2 G6 U2 X
  423. LDA Key_Once9 W8 h7 u& D/ J; M, t) U( b8 s4 M! u
  424. AND #$42$ f' v# f! b3 F2 f/ D
  425. BEQ Music_Increase" \; P# J0 P: m5 ^2 q
  426. LDA Music_Cur1 n( w4 L" X7 g- `
  427. BEQ Music_Increase
    3 V2 o4 K9 B3 t
  428. DEC Music_Cur/ t1 Q; ^( c/ b5 A# e) b
  429. Music_Increase8 {: r5 W( j4 R3 [9 t- z
  430. LDA Key_Once( G# U5 |! {8 |6 G. }
  431. AND #$81
    0 k8 S$ u8 L. e5 e+ Q* @* O) a. l) h
  432. BEQ Music_Decrease_109 s' ]9 w: ^3 u, F
  433. LDA Music_Cur* k  N( j# g$ f3 f
  434. CMP #Music_Song_Total-018 ?3 f, j% R: Z0 o* p" T2 ]
  435. BCS Music_Decrease_100 o3 |5 |9 ?& N
  436. INC Music_Cur/ s6 @3 ]- ^$ k
  437. Music_Decrease_10* O4 R9 d/ d" Y3 B8 [* @' T
  438. LDA Key_Once/ b& J; H) g2 n' x6 x! P
  439. CMP #$04
    ' I; D& }3 V8 c  V% j4 R# G/ |0 D4 z
  440. BNE Music_Increase_100 _# x* [" q8 J" P+ P" O
  441. LDA Music_Cur. F1 E- c) g( h0 _: E+ |7 m) K3 o
  442. CMP #10* Z; @* ~0 P! r3 r& y. _
  443. BCC Music_Start_Song_Min+ M* p, k! ?& o/ g& t2 g' v, h
  444. LDA Music_Cur
      b4 x1 p( L5 @1 S. b$ \3 ~/ d
  445. SEC
    # N# @" D6 y6 ?: M! r) L3 I
  446. SBC #10
    # K* z& B9 q$ F2 _
  447. STA Music_Cur( a* S, M) R* t3 O/ w) w
  448. LDA #$002 O; R& F7 {8 [
  449. BEQ Music_Increase_10
    3 T# k  o- |* y6 D9 o4 x8 {  k2 ]6 k
  450. Music_Start_Song_Min9 S: L" Y) f2 {1 ~6 [& V
  451. LDA #$00
    , p9 W: [* s5 v* x0 Y3 h! A0 N) R
  452. STA Music_Cur. n! {0 k: w% T8 A9 a9 m9 p3 y
  453. Music_Increase_10
      o6 g$ O1 n7 J8 a
  454. LDA Key_Once3 t0 x0 M$ i8 L) q. _# b& y
  455. CMP #$08
    , w: Z- N' G' S
  456. BNE Music_Number_End8 E2 u* b. Q/ t6 X5 U. b5 X
  457. LDA Music_Cur1 ?0 m) j7 @. `; m4 ]2 w9 C1 n2 K
  458. CLC8 j& e  O7 g# Y" ?9 S1 T5 {
  459. ADC #10/ X5 k) R0 V+ ?
  460. CMP #Music_Song_Total-01; F( o2 F& y' j& X6 W/ V5 R1 K
  461. BCS Music_Start_Song_Max) r9 l1 ~8 q0 @' C# U  y
  462. STA Music_Cur
      O9 j6 Y2 s& [
  463. LDA #00
    ( N, B. P- U. Q3 s. F
  464. BEQ Music_Number_End( N6 Z& U1 w4 r4 y
  465. Music_Start_Song_Max
    " A# d) P) {$ g9 ]; g& ^
  466. LDA #Music_Song_Total-01
    ( o# E; p+ e0 C0 |; y) D, u
  467. STA Music_Cur7 f0 u/ k- H, ?1 U+ M
  468. Music_Number_End- u/ L( D' ~3 y& J7 ~
  469. RTS
    7 B; G! s8 Y0 b8 D

  470. # o. Q% p3 \/ {! k. d& q7 ?% |% ]
  471. ;==============================
    3 Z, |8 d/ [) X. ^- E
  472. ;音乐重设
    1 D, I& Q5 I- I" U  _9 U) }
  473. Music_ReSet( C0 [( V$ b* v
  474. JSR RAM_Clear
    ( g# o: I2 d; q2 m& \- [, N
  475. JSR Sound_Clear
    ! k. F* A$ D: b' O, j# X: n
  476. LDA #$1F
    ; U1 c$ M$ i" W1 Q" c
  477. STA APU_STATUS
    & T8 t# `! r$ \' Q$ ?/ H
  478. LDA Music_Cur
    9 Q: V6 {9 l) H5 L1 A$ N( j# ?9 |7 M
  479. JSR Sound_Init4 O7 o0 e5 P; ^- v% d; H0 v% j
  480. RTS" T5 {5 U- X) _! _" \

  481. ' [1 Z: J; T- S  @( ~: s3 v) F% r
  482. ;==============================
    0 B& p. N5 K, t. I4 }$ z
  483. ;音乐端口清除1 H- {' T# [3 P0 P6 N
  484. Sound_Clear
    ! B  n$ P- P/ X: D
  485. LDA #$00
    3 V6 E, W' A& _, i
  486. STA APU_STATUS* }! k" h' g" h8 `3 h, L
  487. LDX #$00
    $ t0 r- t5 ~  Z2 H7 W+ X# Z+ G
  488. Sound_Clear_Start
    / S  b" R$ ^1 J, D7 f
  489. STA $4000,X
    4 i$ j7 y5 |5 ?. ?
  490. INX1 V0 r% e9 E' R# L2 j! a7 |
  491. CPX #$147 j; D; ~2 N% ]* Q  c7 p( D
  492. BCC Sound_Clear_Start
    % w3 v! k$ Y! a0 U
  493. RTS
    * Z3 b, I, x  @- h

  494. ; W; V" c) u- u. S& B, Z
  495. ;==============================5 y! L: H  G0 O! T* R
  496. ;按键处理1 a- Z( x" o4 i# |0 `
  497. Key_Proc
    . Y8 {% R9 D1 F3 p5 N5 m& g& L
  498. JSR Key_Scan' u/ j1 [! D) i( A9 R1 N
  499. LDA Key_Keep. t7 M0 T/ o7 G/ f; ~& X0 V6 \& Q
  500. STA Key_Temp3 F7 m& f" m( y& W8 ?
  501. JSR Key_Scan1 H1 z* @9 h7 @9 V) K+ @, q
  502. LDA Key_Keep
    4 {! ~8 P1 p! m1 r
  503. CMP Key_Temp
    : S4 v3 |6 o6 w' L) u& V
  504. BEQ Key_Get_Once
    ! ?! H( P8 F1 c" Q6 i1 [0 M. }3 f7 f
  505. LDA Key_Kemp' a( q& f3 W( f1 x* P6 J. Z! n
  506. STA Key_Keep
      c- F) M# X4 j
  507. Key_Get_Once
    ( N. T; [6 J& }
  508. TAY# ?" l$ j* P; Q9 r4 s& d( y5 Y; A
  509. EOR Key_Kemp
    6 k' \4 u8 l% l! g; D+ j) C( [8 [8 h+ Z
  510. AND Key_Keep
    & d" r( Z3 q# C
  511. STA Key_Once
    3 \. {. X9 S. G+ Z& R4 `' ]
  512. STY Key_Kemp, f' E# f% V' ?( `  ^7 C# m! r
  513. RTS3 b, f$ i; `, E7 p4 f
  514. ;------------------------------, r  c! I3 ]: h; @7 x
  515. ;按键扫描8 h) a7 j5 x7 L- {2 C
  516. Key_Scan
    * Q0 B. }0 B& w. Y* A
  517. LDX #$01
    8 G" i- B% Y5 Z& d/ U7 |
  518. STX JOY1_FRAME
    ! b) l" F* d( k  {8 D+ E
  519. DEX
    8 j" N: X4 f  V* m# D( D( D& U
  520. STX JOY1_FRAME
    / N3 Z/ i: r: g1 @4 o0 D
  521. LDX #$08
    / j( h: w' f  o; f. u6 j
  522. Key_Value
    ; o+ ?7 O. G) x1 W$ }/ B% J
  523. LDA JOY1_FRAME
    ( D0 y% M) q7 ~6 A
  524. STA Key_Getv
    & x  P* i" {; b' `, ~
  525. LSR A
    2 n9 N; ?* B+ C; x, w' r
  526. ORA Key_Getv
    ) E7 M9 D) q* f$ p3 z
  527. LSR A& {3 N  w5 J" I, H4 H7 u. V
  528. ROL Key_Keep& v2 B$ v4 @, S) I
  529. DEX
    5 A. o7 a% f5 V) Q$ ^* }
  530. BNE Key_Value
      _4 y8 i& E  Y; M& k
  531. RTS6 j0 S5 k( {6 {) w

  532. / ~2 C6 r( n, a) f, s% k
  533. ;==============================
    " r0 ]- c5 J& z
  534. .IF SOUND_BAR_SHOW_ENABLE
    5 u- k  \0 B  O# V2 i
  535. ;音乐条显示
    " J0 T8 r5 C$ I! s% a& h
  536. Music_Vision
    4 J2 w8 t, O  G# b
  537. JSR Music_Animation" v" r$ Q! F7 w
  538. JSR PPU_End4 ?0 C6 f3 u* g& A7 I
  539. RTS
    4 a& P( j. ~; {" R
  540. ;------------------------------
    4 t! Z. M' s5 H+ x2 v
  541. ;音乐条显示处理
    $ q0 G6 }1 {1 M$ J& g% m
  542. Music_Animation
    & g0 e2 r6 t; W
  543. LDX PPU_Cur
    3 o$ a/ R  [8 {
  544. LDA #Mode_Line
    ) B; B5 c% Z8 z9 O2 x
  545. STA PPU_Addr,X( p" S: `# T* k5 f7 f
  546. INX
    3 o0 u$ X; f3 e+ F- F
  547. LDA #HIGH(Sound_Bar_Pos)! T9 p  n" V" O% b
  548. STA PPU_Addr,X% Z* `- l" |& z6 j$ n$ l
  549. INX+ ~% V8 @! M0 W
  550. LDA #LOW(Sound_Bar_Pos)
    + M5 R) d3 v' w" r  J3 L* R) P0 t
  551. STA PPU_Addr,X
    : C8 l/ Y" }1 V5 [5 w
  552. INX
    - L6 ~+ {6 R/ B) }% H/ S6 V
  553. LDA Sound_Bar
    3 r1 P7 w  X* {" u4 q# a4 @3 X$ P
  554. JSR Volume_Convert" U9 K# }+ {! l; P) Q; m
  555. JSR PPU_Return
    % a" P8 B# V. U9 T  X( {. R0 q
  556. LDA Sound_Bar+$4
    6 d" ~. |2 X+ V" M# I% I
  557. JSR Volume_Convert# m& h: g+ C/ ]$ O+ A( d
  558. JSR PPU_Return
      w& Y8 @* W, t) Z% t+ F
  559. LDA Sound_Bar+$85 ]9 \& N( A# q$ R, a" _+ d
  560. JSR Volume_Convert_Ex
    5 ^$ T- \! G1 ]9 X5 u4 j" \
  561. JSR PPU_Return) ^, ?$ _3 t5 [) f
  562. LDA Sound_Bar+$C& S  R5 T: P/ x1 B( {
  563. JSR Volume_Convert: @7 ?0 l# u7 D3 Q" k  p
  564. JSR PPU_Return
    7 A9 P( @& u3 T
  565. LDY #$10
    0 S" u8 W. d& @" e5 L; Z: R9 w
  566. LDA APU_STATUS. D  `# g! U4 X8 R8 A: A0 u+ O
  567. AND #$103 e. y/ j1 b: Z
  568. BNE Volume_Count+ g' Z' g# }# b6 d. J
  569. LDY #$008 V3 |) s5 R: `: F, D7 x
  570. BEQ Volume_Count- o! d* K  Z5 q# `. n) c
  571. ;------------------------------
    . f+ Z# ?8 f3 U( a. v4 n9 h
  572. ;音乐条处理
    * X1 [$ h5 j. c2 ~5 x: M; u7 ^
  573. Volume_Convert_Ex7 x5 O$ c* X* U6 A# k
  574. AND #$1F
    ( o' A9 x' a) s7 ^& J2 |8 c& U
  575. TAY/ G, H0 J1 V0 X+ U& v
  576. BNE Volume_Count/ d7 w" D8 c1 ?1 P
  577. Volume_Convert( k: P3 [$ t$ S* H3 E- `0 R4 F( l
  578. AND #$0F! g. A3 d( V  k4 U# p3 a
  579. TAY1 c( O! y9 n# O4 l8 z& c
  580. Volume_Count% I2 }- k  F- F" s& G4 a
  581. LDA #$08' ?; Y. B+ Y0 x8 c1 M* Z$ t
  582. STA Sound_Bar_Cnt
    " ]" H0 p9 x( a9 Z. t% D  Q
  583. Volume_FILL/ i7 J5 Q! P) x8 G$ Q$ k
  584. DEY+ A$ o# G( R) t$ B- u
  585. BEQ Volume_Half
    8 c  U0 i: C7 Y1 f
  586. BMI Volume_Empty
    4 [) V; \! E, [- Z4 N
  587. DEY: E4 d2 J! ?( `6 f) C) q
  588. Volume_Full
    $ U3 g- s- z, Q9 k
  589. LDA #$16# i# T% F- Y+ i4 D: }: b/ k
  590. BNE Volume_PPU
    , u' u2 r0 e: K5 z# S
  591. Volume_Half4 [) q' y6 n. z3 U4 @) P
  592. LDA #$15
    * `: J; z2 j" @; ?# a- l
  593. BNE Volume_PPU
    # Y* i+ a( x, A: e# _/ ]+ D
  594. Volume_Empty
    : k, n6 M7 f# k( N& W
  595. LDA #$14
    6 q+ j. U' e  Z) g2 h7 o' O
  596. Volume_PPU5 S8 d! f/ Z) z, a4 `; i
  597. STA PPU_Addr,X
    6 G, \* }: \2 ^$ M1 V" u3 h
  598. INX
    ' m) y; v8 X0 B# U/ C
  599. DEC Sound_Bar_Cnt# u; L: I/ }4 e% g' _
  600. BNE Volume_FILL- d* k! F( h; A
  601. RTS
    % K4 B+ _4 W  L2 x* h  T
  602. , p/ ~! x6 J3 e1 s4 q
  603. .ENDIF
    ) u% h2 ?0 i5 v

  604. * `- T. C0 |% a2 g
  605. ;==============================
    4 C8 `3 H3 F, G0 D; h
  606. PPU_Addr_Set;PPU行开始* }" m; D& f( k+ ]0 f
  607. LDX PPU_Cur
      d6 l2 ]+ a6 t: C
  608. LDA #Mode_Line
    % }$ N6 g; l* p/ C. l; O& H
  609. STA PPU_Addr,X$ ~' l+ O- O3 o+ R5 p, u3 x# ?
  610. INX
    - y8 G! P$ P: J& `. j
  611. RTS
    , v; C; u7 s5 R" r* J

  612. 7 S* e* U" a- A5 S) O% p8 K' l$ Y8 G
  613. PPU_Return;PPU转行. y. C" Y0 W6 G& O+ z! ?$ k
  614. LDA #Flag_Over
    0 S+ Q. M/ ^2 ^$ B4 `. [
  615. STA PPU_Addr,X, g, V* }, ]$ h9 x
  616. INX, J) o3 x& q4 C+ q
  617. LDA #Mode_Return. G+ F" m% a$ M. _: N1 w
  618. STA PPU_Addr,X
    4 @3 G  g- s! d* o4 o$ l% X
  619. INX
    & ]$ R) Z/ n! \- \0 X  a5 V' k+ p
  620. RTS
    3 J( s6 [( W% M0 R

  621. ; @9 |9 o! H( e1 U
  622. ;------------------------------6 Z# {0 }1 _7 m' y  m
  623. PPU_End;PPU结束3 _% M" u- c3 }* D7 w; g
  624. LDA #Flag_Over
    % m; \, l: j2 q1 n( W2 @
  625. STA PPU_Addr,X
    9 E) }/ o: M* h. Q, J: n  j
  626. INX
    6 v' N( m3 K. q" @& [" {5 C2 `
  627. STX PPU_Cur
    9 ^/ Z- s, s% a/ h9 s' Z+ D! U9 F
  628. RTS; _3 r' U  R# i% F5 V* o
  629. ;==============================$ P+ `& [1 M0 T; s7 |+ B( Q
  630. Mode_Line     = $FD    ;新起行模式, C$ _$ j; p! M9 D+ E
  631. Mode_Return   = $FE    ;转下行模式
    * R. t- s5 D5 L+ M
  632. Mode_Clear    = $FC    ;行清除
    , A8 h4 a; r4 g" Q
  633. Mode_CntLine  = $FB    ;行计数写入
    : i0 K& R. M) O0 z/ f
  634. Flag_Over     = $FF    ;行结束标志: u% U: w+ O5 A1 m- ^

  635.   Y- S. K7 b' E3 Z) q
  636. ;------------------------------# ~) i" N! y$ C9 h0 g1 U5 ]/ w
  637. ;PPU处理
    : d# e6 _! K3 m) V9 b
  638. PPU_Proc
    , M) `3 T) b5 N2 L) J0 v
  639. LDX PPU_Cur1 b; g& {  o5 v! X
  640. LDA #$00% I  M( M- f1 c) c8 |1 r
  641. STA PPU_Cur9 n. Y/ I" c' l0 N7 ?3 s4 q4 j
  642. STA PPU_Addr,X
    - j' x0 \$ b. B- a0 p: n. f
  643. LDA PPU_Addr* m; K7 q1 G0 ^7 k/ l
  644. BNE PPU_Proc_Beg
      R$ g2 {; o, Z
  645. PPU_Proc_Ret
    0 g/ I/ P6 \  L5 B0 Y
  646. RTS
    7 o5 Y) l+ n3 ~; z+ f, f- j3 [& h, p
  647. ;------------------------------
    / l' P- J$ q3 @; j% I
  648. PPU_Proc_Beg  ;处理开始
    & F5 K( B+ |: ?5 x7 ]5 y5 ^8 ?/ O
  649. LDX #$00& t( z5 U1 {& c, m6 `& N1 ?1 M; p
  650. STX PPU_MASK& i0 b& a- G+ B+ }
  651. ;------------------------------
    # s* ~7 d! H- s( G8 L
  652. PPU_Mode_Select  ;模式选择
    ( N0 H+ q% A  v% z) w1 g/ d& |
  653. LDA PPU_Addr,X! Z% c/ ?0 x: \6 L) c6 g7 ~
  654. CMP #Mode_Line
    3 j% m  {8 ]( J& |2 ], B  w
  655. BEQ PPU_Mode_Newline
    + k( r- }0 |- d7 z& c
  656. CMP #Mode_Return1 x& E- C6 ]. o4 G5 w
  657. BEQ PPU_Mode_Return$ V4 ~# N3 m/ H  Y
  658. CMP #Mode_Clear/ S3 U/ c/ Q" r
  659. BEQ PPU_Proc_Clear% P0 `! m2 Z* }4 W- v; D4 [
  660. CMP #Mode_CntLine
    6 C1 \: H# n; l$ {+ Q3 v. N" i, ]
  661. BEQ PPU_Proc_Cnt_Line
    & |& \$ `% u, C3 l
  662. RTS# ?7 q+ Y6 l% i4 {' T0 p. y5 [
  663. ;------------------------------* g- e& N2 K, B) n$ Q. {
  664. PPU_Mode_Return  ;转下行模式6 ~% z4 J% V9 T: s
  665. LDA PPU_Addr_L  A. g. g. B, p$ _' y' f
  666. CLC* |# j0 w' }  X0 @% }* Q
  667. ADC #$202 {- }! e* c8 _4 X4 c* l3 r+ V& l
  668. STA PPU_Addr_L7 y% W2 W0 O9 _6 E: R
  669. BCC PPU_Return_End
    / ^9 |3 h3 f3 Y* z7 o& B
  670. INC PPU_Addr_H
    5 l8 W( {) ?+ m: Z$ d
  671. PPU_Return_End
    7 t/ r! Q" M/ b/ V7 j8 |
  672. JMP PPU_Set_Increaser
    4 ^0 i. d9 J/ [  r* |4 x2 G
  673. ;------------------------------( s/ Z6 \+ X& I% A
  674. PPU_Mode_Newline  ;新起行模式
    + N$ I# s: z; ?7 y7 g8 D' H
  675. INX
    * |( ?$ ?  l' n9 x$ j
  676. LDA PPU_Addr,X0 c% o& h) Y; d0 _" X1 V
  677. STA PPU_Addr_H
    $ N2 {. q, ]. o7 q6 n
  678. INX$ H4 w* m: N: A  c7 e3 }8 o+ l4 Q
  679. LDA PPU_Addr,X
    ' T. {6 q. g) S9 D5 i6 p  s
  680. STA PPU_Addr_L
    , k3 e! f" N4 ^% R  Q, `; F
  681. ;------------------------------" X! D/ i1 f! ~& ~0 l( ]
  682. PPU_Set_Increaser   ;设置写入地址5 X5 u* C* c( l% p+ u
  683. LDA PPU_Addr_H
    9 M1 u( D2 H4 p( x' Q" i
  684. STA PPU_ADDRESS
    5 w' W$ ^7 H4 Z) J
  685. LDA PPU_Addr_L
    ' j5 }2 {; H" n9 S( @* R" n
  686. STA PPU_ADDRESS; d1 c- e/ S5 ]/ F  l
  687. ;------------------------------! a8 T% t7 O% k) P1 l
  688. PPU_Write   ;写入数据& Y1 u! c+ v" f8 i" D
  689. INX* U9 a  k, ~; \& L7 x
  690. LDA PPU_Addr,X$ V( j1 h# g  M( c( ]
  691. CMP #Flag_Over
    + U9 N" w$ Q0 z
  692. BEQ PPU_Proc_End
    9 X6 ~3 X" Q8 z- r; x4 v7 Q
  693. STA PPU_DATA
    , W! o: K; Z6 Y) C% Y
  694. JMP PPU_Write
    # g' p$ T0 S7 k: _7 u2 f
  695. ;------------------------------
      C+ D# u5 q9 [$ V+ ^, d0 C
  696. PPU_Proc_End  ;单行写入结束
    0 T; ~5 a5 o$ F: l! u
  697. INX
    $ z0 ?5 S/ H9 _+ ^6 c+ e( z
  698. LDA PPU_Addr,X
    3 Y  y! r( w; H  t! v% j* t
  699. BNE PPU_Mode_Select% a5 _. z2 h1 b* |/ D" n/ I2 v* q
  700. STA PPU_Addr# }( I4 b8 E9 F6 K2 i. H
  701. JSR Update_Palette_Color
    # n6 a, [( d3 s; R4 J! v6 D
  702. LDA #$008 V: w5 L) c7 Z) K
  703. STA PPU_ADDRESS
    7 q# T0 g5 E/ a2 X
  704. STA PPU_ADDRESS
    # h+ _! E( x0 u0 L5 X
  705. STA Show_Track_Name
    : ?* Z1 U( |; K
  706. LDA #Scroll_X
    + S+ p7 p4 y3 j$ l1 W' [; t3 R
  707. STA PPU_SCROLL
    # i" n! w# I2 ]& I% E; ^  X- M
  708. LDA #Scroll_Y7 M2 \/ O: J- u' t* S
  709. STA PPU_SCROLL0 s! R: U$ j& `- C4 v
  710. LDA Screen_State; t# E6 l# C' ~: L, u5 t% v
  711. STA PPU_MASK
    : \. u& T* U* n3 X% S
  712. RTS
    . E& N! P4 _& I7 }* Q' ~2 b& M
  713. + x# E/ e- s& v+ x' u3 ]
  714. PPU_Proc_Clear
    5 R" g2 v6 S0 E0 M' l) I
  715. INX
    5 {% ^, N) O6 P" w  U' \
  716. LDA PPU_Addr,X
    % G/ v9 O" R; B  a# d" m% g; L
  717. STA PPU_ADDRESS# n1 m$ y8 F* O" c( b
  718. INX
    8 t, n8 X2 H( H
  719. LDA PPU_Addr,X
    8 w9 _4 B% ?3 r1 V
  720. STA PPU_ADDRESS
    ; B5 d/ U+ Q, ^1 v/ f8 @
  721. INX7 a  H9 V5 a! s' C
  722. LDY PPU_Addr,X
    7 h: {2 L( }9 B2 b# O
  723. LDA #$00
    " u4 a, ]* k4 a: |9 A( T& {
  724. PPU_Proc_Clear_Write
    9 x2 N8 f: d6 O. k2 a9 V
  725. STA PPU_DATA
    ! \' z7 a: O$ \9 n; l9 D
  726. DEY
    . `8 d" B8 l0 x  C6 S6 C
  727. BNE PPU_Proc_Clear_Write
    8 e6 K% w# `2 X$ ^4 [. |3 y) H' m
  728. JMP PPU_Proc_End6 g- ], |: e$ ~5 E5 h3 n) `* s) ~  a

  729. 8 {2 f+ |6 a" b2 D# `7 p2 g* d4 P
  730. PPU_Proc_Cnt_Line
    6 N  _4 q) M: E) Z
  731. INX, \1 k& f( R0 d, Z! b- |
  732. LDA PPU_Addr,X
    ; a5 V' n# f- I/ u/ r# p* Q& v
  733. STA PPU_ADDRESS5 L# J* e# e; s  U+ e. H
  734. INX- T  @' D7 i5 n, d$ ~% e4 {
  735. LDA PPU_Addr,X, V* }( ?3 N5 F% ]
  736. STA PPU_ADDRESS
    & Y4 m  b/ M+ f6 B" G  r- {
  737. INX
    * z& \: T6 W' y' J! o) }, s2 o3 {
  738. LDY PPU_Addr,X
    ) L9 Z6 c% D' m: m2 P
  739. PPU_Proc_Cnt_Line_Write
    4 y7 v& w! O, r& V4 i" ^4 n% V' g
  740. INX/ `, `2 \' H" y+ e/ w  ]
  741. LDA PPU_Addr,X
    & x; I$ p: L9 d
  742. STA PPU_DATA  I( H6 T8 y( V- j
  743. DEY
    * h9 d4 f4 y- w% ~4 k" h
  744. BNE PPU_Proc_Cnt_Line_Write  V/ R! k1 y% ?
  745. JMP PPU_Proc_End
    4 w$ ?* A: C0 A% N
  746. 8 W4 U; _4 Q, T9 p
  747. ;==============================) r" J9 F- ?" T6 S: g
  748. HEX_To_Dec;十六进制转十进制
    6 J$ e4 T6 m" i# {
  749. STA HEX_Data1 C5 E6 n4 s$ O& o& Q+ J/ B+ J
  750. PHA
    0 }1 u/ @( _" }0 L1 q4 F5 r4 {" J/ W
  751. TXA
    2 C0 l! A. N" e
  752. PHA
    2 d5 w' {  R. A/ `( o) y$ h4 F
  753. LDX #$003 w& w3 _) w6 B7 C$ H
  754. LDA #$00$ Q3 E0 N  E, V0 ~- p4 s1 \
  755. HEX_Cln
      H# n( r' H5 @4 O! ~1 W. O
  756. STA DEC_H,X: s% A  i5 y  D9 T4 s
  757. INX6 w+ [4 F4 Q. ~/ t3 Z- W
  758. CPX #$038 V! Y2 e& u( m2 u
  759. BCC HEX_Cln
    + G6 q& X& e1 e
  760. LDA HEX_Data0 h5 R; e" h* l- r/ v
  761. ;------------------------------. [1 y( o& t4 V* _4 i
  762. HEX_100
    & `7 `3 ^% B! E3 t% [
  763. CMP #100
    * Y) O; W9 W1 ?2 L4 P1 B' A
  764. BCC HEX_10  \6 w+ B, ~5 s
  765. SEC  F9 |5 {" a9 V+ A9 Z
  766. SBC #100
    : b3 v4 z; x5 A6 c8 ]. ^1 L3 A
  767. INC DEC_H8 F3 A7 _6 H. i7 j* K
  768. BNE HEX_100
    0 \  e  D  Q4 C0 A1 {
  769. ;------------------------------
    9 _' R9 V/ ]3 E$ ^) ]4 s
  770. HEX_106 a( _. f2 P/ c/ O+ E5 m, z$ e
  771. CMP #10& |8 a+ ]' t/ k0 n: C* V4 P
  772. BCC HEX_1
    $ ~. _9 \/ e8 ?, W4 {( Q0 y
  773. SEC
    : g$ w) N) E6 c6 v2 F
  774. SBC #10
    6 K8 Z/ l- o6 S$ @
  775. INC DEC_T
    : c- A( O# W: M* z! t5 V$ c
  776. BNE HEX_10
    $ G! j( g$ Y; S7 x- R3 A
  777. ;------------------------------
    ) l5 H' i$ D& A3 w( ~+ |/ C
  778. HEX_1
    - c, }9 w0 E7 o9 |6 e9 ^
  779. STA DEC_L+ g" I1 Q0 w$ D2 a6 c
  780. PLA
    1 M5 ^, V0 C6 |; T! J- {
  781. TAX
    ! Y9 B3 Q0 H- Y* Q1 m5 X+ C/ u1 B
  782. PLA
    1 H4 \% B( b% g' z
  783. RTS$ ^' k' g$ h% b. w& o7 `

  784. + j6 e0 J6 c2 ~  p2 _9 B3 @
  785. ;==============================
    # J* ?! l8 f$ Z. R$ V9 K; S
  786. ;音乐曲目显示
    8 t) P/ _9 u9 m. g
  787. Music_Show5 x4 |* ^8 g- M0 V
  788. LDA Music_Cur
    5 D8 e/ a- y" b) P  }
  789. CLC
    6 z! z- C: j$ ^
  790. ADC #$01
    : ?; J3 U- W  |0 q6 _
  791. JSR HEX_To_Dec0 d5 V) X& m0 e* G% j# {
  792. LDX PPU_Cur
    , E7 ?1 J# m( S1 B, x- s6 o
  793. LDA #$FD
    9 g! ~; p  L. [
  794. STA PPU_Addr,X
    0 i& p$ }- J) J, H( w
  795. INX2 S3 V4 u  T/ P& P2 \7 o
  796. LDA #HIGH(Play_Index_Pos)7 O' W7 b; Z8 D9 t
  797. STA PPU_Addr,X0 S5 A% P' J- h
  798. INX
    ! q. e/ _$ f, e+ y" p; t
  799. LDA #LOW(Play_Index_Pos)
    , p/ U  S2 K8 c) [* H" o# A
  800. STA PPU_Addr,X& \' R( J& h# e) G
  801. INX
    $ ]7 d' G2 z) ]8 f" Q( k# l* a6 \& z

  802. , @$ T, t# ]$ e! S; ~$ Z
  803. .IF Music_Song_Total > 99: @1 D  p; I% ~; c. m# m
  804. LDA DEC_H
    7 m7 p7 O& s" ?) a
  805. ORA #$30
    6 l! K% K, @1 h
  806. STA PPU_Addr,X
    5 A, r: z6 u# x! p1 Q2 F- D" Z
  807. INX
    $ k" _( Y: ?/ I- q3 O+ X
  808. .ENDIF
    1 r- T. [/ J4 A2 f! z( h2 d

  809. ( p0 G. _9 H6 n) D6 r
  810. .IF Music_Song_Total > 91 `4 X* g) c8 Y. z$ L+ o+ @
  811. LDA DEC_T6 T! h" v) f" O' t3 A/ C
  812. ORA #$30
    0 x$ y; R/ r  n  C5 w/ ^! v( k
  813. STA PPU_Addr,X2 f  }/ v4 n- C! ^. @2 k5 y% z+ Z
  814. INX, B+ M" N7 k3 K/ t% G& Q
  815. .ENDIF' i+ Q1 W  D" D* n7 P- `; U
  816. ! B  M2 e! |$ A# |* q7 A
  817. LDA DEC_L' _+ a# o% t8 V4 E+ Y
  818. ORA #$30
    0 D  F+ n. {" X( M/ v$ O
  819. STA PPU_Addr,X
    % A+ @7 m5 H3 G! s! o0 k
  820. INX
    ; u1 K5 }* q1 a0 M' y! S
  821. : y$ [  A) h2 z. o% u
  822. LDA #'/'
    1 Z/ u# \0 `  G6 e: ?9 N" f
  823. STA PPU_Addr,X
    % Y: A. e$ D- G7 T/ d7 V
  824. INX" N. A* r, ]5 S* c, r4 z
  825. Music_Show_Total0 }  k- y" @  |& `# v
  826. LDA #Music_Song_Total3 y6 d: y! p- a, S5 z
  827. JSR HEX_To_Dec+ W4 Y- O# o# a( P0 D
  828. " r8 ^) Z0 z7 \1 @% w
  829. .IF Music_Song_Total > 995 C/ D9 Y6 L8 K5 ?4 e
  830. LDA DEC_H
    ) P5 o5 T* n5 S( Z- H/ ~
  831. ORA #$30- q' L+ N' k3 D) `- i! a
  832. STA PPU_Addr,X
    3 D0 ~( D5 |) _+ v2 B& l
  833. INX
    ( d0 z9 w" Q! K& F
  834. .ENDIF
    0 Y& v6 q( P+ Z  G- r( F

  835. : `0 l/ V1 O! c  V" F
  836. .IF Music_Song_Total > 93 s  f7 V+ c( M  J
  837. LDA DEC_T6 G0 \3 ], L2 ^
  838. ORA #$307 ?0 d. n5 r* U9 t. z4 r
  839. STA PPU_Addr,X; R# f' t5 k5 r) B5 j
  840. INX
    7 |. c% @$ A1 O$ S, Z3 S+ S
  841. .ENDIF* n  K% E/ F$ |# b$ e! @

  842. ! Y% k( x$ g0 E" k* G) Y  Z
  843. LDA DEC_L
    / l( S1 ^0 m4 c8 t6 m/ y* \/ t
  844. ORA #$302 C' D, K1 m9 p  `
  845. STA PPU_Addr,X7 G: R, }( W/ r# \
  846. INX, Q2 b5 C7 q, s7 z/ `
  847. / P7 y0 w# }% D4 ?9 E* r
  848. JSR PPU_End/ k+ m/ r) X9 V/ g
  849. Music_Show_End$ [; k. Q4 {! M, p0 j/ Y7 _2 B& K
  850. RTS8 B& n$ \' c+ \- n' I
  851. ' V4 `9 `$ M2 O
  852. ;==============================
      \$ S8 T& H' p$ i, F- Q
  853. Time_Show;播放时间显示
    ' S( R# y3 O6 T8 M
  854. JSR PPU_Addr_Set
    * ]* o, x: Y8 i. i: W
  855. LDA #HIGH(Play_Time_Pos)7 E% H' d. s! d+ `: z- g% J6 y
  856. STA PPU_Addr,X
    $ Y- f$ r9 ^+ n" |1 N
  857. INX+ l" B" J$ |* ?4 L5 T1 L" z
  858. LDA #LOW(Play_Time_Pos)) X8 D: G3 J: `* S
  859. STA PPU_Addr,X
    , o4 u7 X2 n( Z) r% z* \
  860. INX- Y6 M& [" n; f( Y+ v  ]; V% O+ [
  861. Time_Show_H) y* ~2 b8 T% e! c* T' L
  862. LDA Time_H+ S% r) B3 \5 K
  863. JSR HEX_To_Dec! Z1 z% `. H/ n" g/ j- X& h
  864. JSR Time_Digit; l4 k3 i. l4 l7 E' Z: ~
  865. LDA #':': C9 z+ }4 v1 r" K# j
  866. STA PPU_Addr,X, ^" E4 Y: V0 S/ `+ X6 Y
  867. INX; E) v* }+ M7 o. o( x) A  _
  868. Time_Show_M
    . E9 ]& W6 N7 L& `/ `1 ?2 X' v" |
  869. LDA Time_M, j! V9 |( E' M$ e: B2 a
  870. JSR HEX_To_Dec4 I5 W4 a! {/ T' O" _8 E2 ]4 X
  871. JSR Time_Digit3 r+ _, z; s+ E  a$ c0 v% f
  872. LDA #':'
    " o( I$ M2 T5 R- \* [5 v3 m6 \
  873. STA PPU_Addr,X
    ; ?0 X8 R: z. t) o
  874. INX7 r% h; p/ ]8 O" H
  875. Time_Show_S
    ( |' A% K. i% i
  876. LDA Time_S
    - i8 }  L, F. c- G; j( ]1 f& u
  877. JSR HEX_To_Dec
    ( P- b- }- g4 ]2 \5 i
  878. JSR Time_Digit6 x$ X, j# H; `7 u8 e
  879. JSR PPU_End! e6 h; |6 J2 I5 i' u
  880. Time_Show_End& N* F5 U' A1 `3 e( G( u/ ?' `2 H/ r
  881. RTS
    8 T" V; h! g/ q3 I! U8 K; k$ I. x
  882. 6 H: P& o6 Y9 V  ]; E2 p. N1 |; e6 v
  883. Time_Digit0 T  [0 m1 j' U/ I1 Z1 k: A
  884. LDA DEC_T
    / t  H5 `  D/ O9 _3 ~" b
  885. ORA #$30+ I0 g6 O& g$ v0 A( G6 F/ b
  886. STA PPU_Addr,X4 ]  O/ b! v! I
  887. INX0 d8 M9 z  U% `4 t) ?
  888. LDA DEC_L
    1 q9 J; \+ @$ a/ W( m
  889. ORA #$30
    2 g( q$ ]+ z, E9 x+ P
  890. STA PPU_Addr,X
    5 _6 [9 o, ?1 X; {$ K
  891. INX8 w9 I5 e6 f6 q$ t: n8 b* o
  892. RTS! Z1 ]4 B3 \7 L: u4 }

  893. : k  R: Q" ~1 O
  894. ;==============================! t$ q& L( G2 b% c% `3 {9 c# }' U
  895. Time_Count;计时
    ! L8 ^- ]4 s: A" t4 Y$ @
  896. LDA Music_State# p0 z, U% s3 ^1 \" S
  897. ORA Time_Wait_Cnt
    & v& m' ^/ Q8 M5 f
  898. BNE Time_Count_End0 M  J4 D9 P. k5 J7 v1 r4 K
  899. INC Time_Cnt6 \& _& y: U: q3 ~7 q, z/ g1 ^
  900. LDA Time_Cnt
    ) e4 N1 E0 W& p, F4 o% J+ O% H
  901. CMP #60
    - ]# X. Q' H1 L# g! U0 P, f
  902. BCC Time_Count_End* z" y% w! y/ I% N& P, u& I
  903. LDA #00
    5 p" g/ X' }! m" d  B( O% m
  904. STA Time_Cnt
    8 Q# H8 y! p; |! X' e, C' c# v* N
  905. INC Time_S; `3 w$ j4 V5 U# b' a
  906. / |. P4 e8 u$ \: o0 P5 Z0 X
  907. Time_S_Cnt8 p- f7 e% h6 j) \5 V) ~' a8 P/ Y1 U
  908. LDA Time_S# j4 f' u7 Y% b0 E0 q
  909. CMP #606 l! l" G" Z5 T/ X
  910. BCC Time_Count_End7 N9 s# ~2 Y- Q* d! t8 F" b: |8 I
  911. LDA #00- ~' q+ {0 k% J2 v: M1 L
  912. STA Time_S
    + {! Y2 j( m/ I
  913. INC Time_M
    6 d* u0 k1 [- W+ C: y# ~4 j5 K

  914. # p1 f2 V3 z" p- T8 s' j
  915. Time_M_Cnt* t7 z: \: z7 {. o6 [4 K
  916. LDA Time_M2 M; ~1 T0 c& i8 S, u, l; R$ D
  917. CMP #60" `# ?$ G  K5 B! N
  918. BCC Time_Count_End
    ' c8 Y& h) b2 ~. [" [7 T% _& M: z
  919. LDA #00' F: o2 d- |7 W/ j% v4 N1 Y
  920. STA Time_M
    " P5 K$ E6 j! u1 ^5 b
  921. INC Time_H& g1 X+ |' W2 ]/ t" K2 ^- o
  922. ( Q1 E6 b7 a( k" v3 u' Q; o
  923. Time_H_Cnt
    , T; F4 @- {' e8 _6 n
  924. LDA Time_H0 m' a0 U5 ~! Z. \
  925. CMP #24# i$ C" o* p; O: R2 u+ o# }- J
  926. BCC Time_Count_End
    3 h' @# J0 `. s/ l
  927. LDA #00
    $ G& O5 R' R' l4 K3 }  Z, `9 L5 ]6 j
  928. STA Time_H/ u+ n, _+ X' l( R# g2 M
  929. 1 N* y6 d5 R: G- i
  930. Time_Count_End
    2 \/ s/ D  a: `' h
  931. RTS$ l% S' n7 U- k, c! B; Q& E
  932. " a9 y+ G  H3 N/ g
  933. ;==============================/ u" e; ~1 D2 l3 I* i6 U: J" C
  934. Time_ReSet;播放时间重置- ^. E# W; ?: M; M' I) Q- J
  935. LDA #$00
    0 ?- _8 k' _- t
  936. STA Time_S
    3 \5 U& N; Z& S6 k
  937. STA Time_M
    1 R- v$ u) f. }& K3 R( }! V
  938. STA Time_H8 Q7 [' [: w" N: T4 B
  939. STA Time_Cnt  `/ U6 j- R; r
  940. RTS+ g/ Q6 z) ?+ p0 j

  941. + z( s; R2 X0 _+ m9 l
  942. ;==============================
    & \3 h6 ~* C) I0 }: ~
  943. Music_Bar_ReSet;音乐条重置: r# @: W/ F6 \0 a' ?' m
  944. LDA #$00
    5 |% [: G% I! o. S
  945. LDX #$00
    # \- d2 G2 g: I8 ]! r; i6 q
  946. Music_Bar_ReSet_Set
    5 l1 ]* S' o# u7 W0 z
  947. STA Sound_Bar,X
    " B3 |4 L* `4 j6 Y0 Z6 _2 d" H
  948. INX
    2 A# Q5 z3 P/ ]/ ^, Z3 k
  949. CPX #$10( f, g% H0 S9 V
  950. BCC Music_Bar_ReSet_Set
    + o3 V# `* b9 P0 t
  951. RTS
    & B3 ?, \3 b8 d4 {

  952. ( T# V; ~( i7 F# p. y
  953. ;==============================; ]( f$ C0 U: S: g8 V& R5 }
  954. PPU_Data;PPU数据写入
    4 {2 `# R5 p. A3 n
  955. STY Data_L
    9 J8 a1 F% E( A
  956. STX Data_H, x0 W& l1 H5 \$ ]2 z2 P, J, |
  957. LDY #$FF
    ; p7 i. Y$ ~( k4 x
  958. LDX PPU_Cur: h( s" G9 ]' q% h: r8 H! r
  959. DEX
    / j% p# V9 q& M3 V
  960. PPU_Data_Beg
      v, @: @) L  V: |9 g" ~; T* F% Y
  961. INX. c! G" V, O, `. P5 m
  962. INY
    ' E; G7 m5 X7 _
  963. LDA [Data_L],Y. V- n+ i3 q/ Q/ l. s. D
  964. STA PPU_Addr,X
    , K3 N4 ?8 O. H3 s, F+ K' h3 V
  965. BNE PPU_Data_Beg; H! L6 M9 m' b- [0 w  `) ~
  966. STX PPU_Cur" f! n9 }* N) a1 B/ v
  967. PPU_Data_End6 i& E+ i/ W9 o! g" v: ]  U
  968. RTS% x, W* f3 p' \6 H6 o

  969. 7 K( O1 l, V* P$ B: d/ H8 T9 U6 Q
  970. ;==============================. A$ R; R6 Q) R# [0 o0 h, }$ w$ P
  971. Music_Stata_Show;播放状态显示
    8 p% n# E$ t+ j; G! ~: }6 e1 V
  972. LDA Music_State4 u$ h$ D9 [2 }& d6 i1 y& h
  973. BEQ Music_Stata_Show_Play
    3 _1 l( E" k0 b) {7 d
  974. Music_Stata_Show_Stop" Y- @( M- Y7 L, e+ I: Z
  975. LDY #LOW(Music_State_Stop)4 I; i  L3 D( e/ }% R
  976. LDX #HIGH(Music_State_Stop)& x' M6 H' c; L2 v8 c( O$ ?/ ]$ Y
  977. JSR PPU_Data
    , G) A% C7 A4 \3 W8 x
  978. RTS' T! D+ r1 h: }6 Z1 x; Y
  979. Music_Stata_Show_Play
    ) u( ?# Y6 O5 W3 p' h4 ~
  980. LDY #LOW(Music_State_Play)
    3 j- S! P: M  o4 r
  981. LDX #HIGH(Music_State_Play), w% J3 c& F, C9 b$ l3 `
  982. JSR PPU_Data6 ]9 r+ c/ ?7 B& C
  983. RTS
    : \4 ~# g! |( S( q! S

  984. ) E7 k, |! v8 ^* K8 ^8 V7 X. z
  985. .IF SOUND_BAR_SHOW_ENABLE  p- i1 A1 d4 f
  986. ;==============================
    : d+ R+ }4 r  R$ p5 t! L
  987. Sound_Bar_Text_Set;标题与音乐条初始化, O; W; h$ l: T- N5 x+ ]
  988. LDY #LOW(Sound_Bar_Text_Data): Y4 x4 W& W9 G% U, O" S( |
  989. LDX #HIGH(Sound_Bar_Text_Data)
    3 c! \/ [, q6 [3 {! P! E
  990. JSR PPU_Data! I; c" o! v/ a0 T6 N3 t2 A; g
  991. RTS
    . T! e1 w0 O/ `, A) e8 |, R
  992. ' g4 R6 t% Q" u/ q" G0 S
  993. .ENDIF9 J% I4 Q4 R2 x- X+ C8 o$ K6 I
  994. ' \/ \) _$ }) ^' T
  995. ;==============================2 C) K% b! k0 Z  O# l
  996. Set_NameTable_Attributes;设置命名表属性
    7 c0 s' Y. p1 F$ G; r
  997. LDA PPU_STATUS
    $ j, n6 G+ Q/ h0 D/ U
  998. LDA #$233 e3 T8 o  X( W& }! {
  999. STA PPU_ADDRESS
    $ t/ n: J' @4 |- a$ t- n) }
  1000. LDA #$C0
    & v/ T3 h" u, P/ g6 \
  1001. STA PPU_ADDRESS9 }( O( q7 A& r' S! M9 b' n9 x
  1002. LDX #$00
    1 z3 O, \" I4 i
  1003. Set_NameTable_Attributes_Write
    ) l; F9 W3 l3 Z% O7 y9 h
  1004. LDA Palette_Attributes,X
    5 k6 P# h7 _3 H: I- \( j- M
  1005. STA PPU_DATA
    8 W. @0 V7 A' N; D, A2 _
  1006. INX
    / ]1 `1 i; y0 k; }
  1007. CPX #$40
    1 N+ e1 n! k2 w; }
  1008. BCC Set_NameTable_Attributes_Write% M) U" W9 S% Y, k" i6 `) f* ]
  1009. RTS
    4 s* D3 L9 E+ R* D! p! x6 _
  1010. ! o! O1 x! }9 }1 o7 [
  1011. ;==============================
    " X# `8 \  X2 V5 c
  1012. Set_Palette_Color;设置调色板数据
    1 r6 O6 S  I1 G, S
  1013. LDA PPU_STATUS
    3 z, N$ Z" d  A
  1014. LDA #$3F' e3 u3 D( V( ~
  1015. STA PPU_ADDRESS
    " \. i4 p" l. T- E
  1016. LDA #$00
    - B7 B& k) s2 [2 V3 l: T
  1017. STA PPU_ADDRESS, y$ H/ U; }& g
  1018. LDX #$00' U) d+ G4 I9 v5 M
  1019. Set_Palette_Color_Write
    : B  E" U( `1 c  A5 x( o. a# H2 `8 r
  1020. LDA Palette_Data,X
    / U% v! S) L% G5 p
  1021. STA PPU_DATA
    1 E3 |& M6 n& p) L
  1022. INX
    1 u8 ~9 K1 S' g. w, F! E
  1023. CPX #$20
    / x' A% q. M/ v+ X9 u
  1024. BCC Set_Palette_Color_Write# s  ]! t$ k' Z
  1025. RTS
    & g+ U1 R7 j, g! X& i) S: |: H

  1026. ' Q0 M+ e7 V1 b, C
  1027. ;==============================
    " S2 J. T) M* Z, }1 t
  1028. Init_Palette_Addr;初始化调色板数据
    4 J- Z3 g1 C9 x3 ?3 J3 u
  1029. LDX #$00
    : w3 \, T  P  c7 `- L$ Q
  1030. Init_Palette_Addr_Write
    # `. g. Y( e6 B8 {
  1031. LDA Palette_Data,X
    2 ~% O( T! v3 z- Y6 x
  1032. STA Palette_Addr,X  D/ K" ^$ \9 T" ?- ~' w# J
  1033. INX' q: p8 b( J% e  S
  1034. CPX #$202 R$ [0 s6 x! G* S2 `) F
  1035. BCC Init_Palette_Addr_Write/ b: Q1 z* ~: z$ }8 Y
  1036. RTS! \" N0 A, z% J6 t# v9 E- q
  1037. : e& B$ a* N5 X! |
  1038. ;==============================5 n8 z+ e8 D+ D7 l0 T# ?
  1039. Update_Palette_Color;更新调色板颜色
    7 N9 ^0 M. w/ ^6 J8 A0 c1 y* f
  1040. LDA Show_Track_Name3 i$ _. z. {+ _
  1041. BNE Update_Palette_Color_End* l2 J! ^5 b- s6 w' T5 u
  1042. LDA Palette_Update_Flag
    + X( c9 n/ e$ E. r
  1043. BEQ Update_Palette_Color_End$ G0 b8 M/ ?7 }$ ]# z6 Q4 ^/ e) d
  1044. LDA #$3F3 m- f9 I3 w( X# s6 J
  1045. STA PPU_ADDRESS
    2 Q# ]1 q9 D0 D2 E/ W! X" p
  1046. LDA #$00/ h/ Q& ~' A) u! u
  1047. STA PPU_ADDRESS
    * ?3 M$ U6 M. l: N9 x# z
  1048. LDX #$00  ~! }4 N( H& @+ S
  1049. Update_Palette_Color_Write4 @7 @6 C; J. l6 ^. h! ~# a7 x! C
  1050. LDA Palette_Addr,X
    5 W8 O( y! E6 }8 d8 f* G! ^
  1051. STA PPU_DATA1 p, g5 n& V9 S& r
  1052. INX
    8 @% ?* S$ l4 s6 V% V
  1053. CPX #$20
    ) d' y0 @6 s- ~
  1054. BCC Update_Palette_Color_Write. h- {$ b9 i# X2 h8 n* a
  1055. LDA #$00
    + O& J4 l; F' o* K
  1056. STA Palette_Update_Flag5 _0 M% K/ w+ r+ _6 w% g
  1057. Update_Palette_Color_End4 I' B6 H& y  U$ n" R
  1058. RTS
    8 ]! B( u9 r* T, O  q

  1059. " Q. s$ {/ o) F' t; U  ~3 g4 v
  1060. ;==============================
      a0 G% j8 {1 \
  1061. Update_Palette_Data;更新调色板数据4 M1 Q- _& ?, O( I* `* T( A
  1062. LDA Show_Track_Name, [1 u4 ^( J! a+ \, {2 B; U0 S6 e
  1063. BNE Update_Palette_Data_End
    # y8 Q% i2 p5 R$ ^9 w( z7 n# x3 f
  1064. LDA Music_State0 j3 ~; p* l% C, o( o# @5 Q
  1065. BNE Update_Palette_Data_End
    & i6 N* Z  z  a+ j: _
  1066. Update_Palette_Data_Check# |# d* F' M1 G* J7 g4 p( N# ?
  1067. LDA Palette_Wait_Cnt2 X( F2 i# z* j! \0 t% J0 v6 V. H
  1068. BPL Update_Palette_Data_Check_Over
    2 u  o4 ?) ^. k7 B; Y8 d; N5 |
  1069. LDA #Palette_Update_Interval
    * f) o1 X5 D5 o: h2 R5 {
  1070. STA Palette_Wait_Cnt5 V2 y$ I+ g3 T5 E
  1071. Update_Palette_Data_Check_Over3 D9 k6 j1 \. V0 f  h9 R$ v. q) Z$ G
  1072. DEC Palette_Wait_Cnt+ q4 P  ~+ J5 F- A4 \! V
  1073. BNE Update_Palette_Data_End
    : }# ~  J% m5 y& @+ [, w4 t
  1074. INC Palette_Update_Flag/ ~5 w: q5 C/ D: v0 a, D% I
  1075. LDA #Palette_Update_Interval  j. X( v' S# H) K# O0 S' e4 B. p
  1076. STA Palette_Wait_Cnt
    : q3 @" e/ _" G3 s+ C- m' g
  1077. LDA Palette_Update_Addr
    9 }3 O8 r9 k6 k4 T& U
  1078. CMP #Palette_Update_Max
    6 @+ t( {$ z4 G1 Y  ]
  1079. BNE Update_Palette_Data_Set: q  g0 N% ~/ W0 I8 J
  1080. LDA #Palette_Update_Min - 1% k) Z4 K, G  s2 e$ |
  1081. STA Palette_Update_Addr
    9 K; ^3 g, E9 a5 Z% G, }+ c
  1082. Update_Palette_Data_Set
    % W# N; K! \- x
  1083. INC Palette_Update_Addr
    9 ^. N! b7 \  A; }( Z6 m- F# w- V1 u
  1084. Update_Palette_Data_End
    # n& X* N6 ^4 f) d* C' q( l  s
  1085. RTS
    * e% S* R; o% r1 v9 G
  1086. ' {1 ~# J* s7 a1 _0 p
  1087. ;==============================# p- T% K1 g. k
  1088. Show_Music_Text;显示静态文本+ n+ U* I) S1 P- I# o# O( L' c
  1089. LDX #$00
    ! O2 t7 u- u5 \! T+ m& @
  1090. Show_Music_Text_Set- w% s  d' k# i8 b  a) M6 Q5 N
  1091. LDA Static_Text_Data,X
    $ P  R  T2 O2 x, |1 {5 q9 }
  1092. STA Data_L
    7 @  _2 R  [6 {8 e, ^: b
  1093. INX. Z- p" _7 m. [
  1094. LDA Static_Text_Data,X
    7 t( @' @6 _0 Y8 I
  1095. STA Data_H) V# X  a8 I! s* g: a
  1096. INX1 F. n0 k: w& m8 d  w6 }1 G$ |1 h; T- o
  1097. LDY #$003 D: _) n  B+ o0 X6 v, ?
  1098. LDA [Data_L],Y/ t* `; M, Y! P- ^" \) f2 l% j: ^
  1099. STA Data_Cnt
    " B$ \: J( O" p4 z8 k5 c. U
  1100. DEX* A  i7 q9 b/ G$ E  R. p; E9 L1 G/ o
  1101. DEX# E+ t2 G! S- W
  1102. LDA Static_Text_Pos,X+ Q5 g% P6 G  G" W: @: p# o8 L
  1103. STA PPU_ADDRESS1 t- V# \4 y" \' \, ]
  1104. INX
    ! s, `- T9 \6 n0 e
  1105. LDA #$20! g4 b  Q) a- [8 s
  1106. SEC
    ! k7 X) Q! v9 ]" P% F
  1107. SBC Data_Cnt  A8 M3 y  B9 l3 V5 w" d" \: ~4 d
  1108. LSR A! H; p* ^8 Q2 Q7 A! E" ~& J# x
  1109. STA Data_Buf% z2 J5 t' s6 S, ~5 R# d
  1110. LDA Static_Text_Pos,X& o" b7 f, k9 _& f  |: O/ h
  1111. AND #$E06 E- L5 N1 W" ^$ v1 c
  1112. CLC/ [* \3 [( Q- x; b
  1113. ADC Data_Buf
    & o$ {; u  j; Q* M# `
  1114. STA PPU_ADDRESS+ k7 c% a4 X& F% H: K4 K- N0 B
  1115. INX& t7 L2 A2 q+ x9 Z# M. b7 l) d
  1116. Show_Music_Text_Set_Write
    " v, f% E. W9 n9 ]3 {
  1117. INY
    : {. V; E: ^" n; d6 T5 p# Q
  1118. LDA [Data_L],Y' r8 B2 C* t) T
  1119. STA PPU_DATA0 f2 L8 |$ c% A, r6 o
  1120. DEC Data_Cnt) h' Q2 N& P" N6 s
  1121. BNE Show_Music_Text_Set_Write
    : d" u8 n( d, e# z9 A+ z5 Y
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    3 X4 F. M6 L( Z: `
  1123. BCC Show_Music_Text_Set# x  G# t# a: P  c' _
  1124. RTS: P+ I; O* l0 k  q

  1125. 4 j; u8 v$ n1 }8 z
  1126. ;==============================
    9 Q1 L8 {( x. i
  1127. .IF Track_Name_Pos;显示曲目信息
    # L  v- t- D2 s( _$ h( S$ u
  1128. Show_Track_Info+ V, K+ k7 @+ n1 }
  1129. INC Show_Track_Name
    3 K" B4 N- s/ W$ ]" e3 Q
  1130. Show_Track_Info_Clear4 d$ G0 j5 c8 m: f- F/ J
  1131. LDX PPU_Cur- {" ?0 ?: G- o" S
  1132. LDA #Mode_Clear1 x" b/ T( B4 c" y1 q0 [; b! x
  1133. STA PPU_Addr,X
    ' s4 l* H) O6 ^2 S4 g, ~% s
  1134. INX; {! a% y4 U+ O: l' x

  1135.   S! O1 N4 G- S/ _$ x
  1136. LDA Music_Last9 S* C, [& R$ M$ C$ N
  1137. JSR Show_Get_Track_Name_Center_Pos. T1 b* e9 R6 s9 T4 U
  1138. Show_Track_Info_Write_Cur
    - \  t. i% h9 f! X1 N) D
  1139. LDA #Mode_CntLine
    $ ]5 G5 e0 @3 K" ~
  1140. STA PPU_Addr,X
    + R9 H# p( m9 O/ N( {
  1141. INX
    ' i( Y7 ]( T1 v! a

  1142. / f2 l& L- U) ]' X
  1143. LDA Music_Cur, o7 ~6 _, q8 {5 ^; L& e9 x
  1144. JSR Show_Get_Track_Name_Center_Pos
    : x, D( U! x) ~1 l. H

  1145. , {5 ?1 V! K) P
  1146. Show_Track_Info_Write_Cur_Data) U) H- w  z( ^' h$ r( i/ ~
  1147. INY
    5 G# H: F+ S0 i4 D, a! `
  1148. LDA [Data_L],Y
    - ^. j% R$ @( r8 [' ^1 g
  1149. STA PPU_Addr,X
    4 M% W, V0 ^9 J! l( @; G" p
  1150. INX; G2 ~9 \8 f# E* V) Y5 z
  1151. DEC Data_Cnt
    " ?: d8 W+ r7 p8 e
  1152. BNE Show_Track_Info_Write_Cur_Data7 w% I! V4 l- ?% G. f8 e, t$ E
  1153. Show_Track_Info_End5 b+ D6 Z5 p3 A; H7 J
  1154. STX PPU_Cur
    1 ]7 F5 ]6 m" Q6 _5 C
  1155. RTS
    & j1 L3 T/ X. P
  1156. 2 N+ u/ o8 v* g3 b& Z/ P
  1157. ;==============================7 h9 r# q" r) x3 Y: e0 E6 m
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    0 D5 r2 ~. p: `
  1159. ASL A' u6 @9 J/ N, F* }! _: s
  1160. TAY$ L, O* y% X  r- |2 i( E
  1161. LDA Track_Name_Addr,Y
    2 `# ~, g  k- c+ ~0 I, H
  1162. STA Data_L7 c7 |& s5 H& T+ b
  1163. INY5 w6 Z: ^' Z6 d& n$ x4 X* F
  1164. LDA Track_Name_Addr,Y
    # o5 N3 n/ T7 o) E: K& ]% r
  1165. STA Data_H
    ( @5 ?+ D; z2 b, k: Y
  1166. LDY #$006 B. }  ^' d% R2 t7 ?) O: b5 T
  1167. LDA [Data_L],Y
    $ V: I( @+ B- r! C. e
  1168. STA Data_Cnt6 ]. U  q* H& M# p/ \
  1169. LDA #$20) N( ~) Z3 e! }; f$ x
  1170. SEC
    0 ~8 M1 T" e  T7 |* L
  1171. SBC Data_Cnt1 Y' }  y& v) C
  1172. LSR A% j) W  f% {% f( z) x
  1173. STA Data_Buf
    - _: A8 i, |5 |1 S4 @2 b
  1174. LDA #HIGH(Track_Name_Pos)* V8 i0 ]: B0 k- E: t" n
  1175. STA PPU_Addr,X
    6 {3 n8 w2 h, l! t
  1176. INX: R; ~& m! n0 h6 {: z" B" m
  1177. LDA #LOW(Track_Name_Pos)
    4 N' E- ?4 \* y" k6 G, N
  1178. AND #$E0
    0 X0 p) E& s% x$ u# y% V
  1179. CLC1 L+ j/ {! `' C4 g
  1180. ADC Data_Buf+ l: d' o! N6 R1 \0 o" ~: p
  1181. STA PPU_Addr,X
    " U0 }1 \$ K; I  X9 S* r8 L
  1182. INX$ b* q! z- k& r- w: ~
  1183. LDA Data_Cnt6 ?% y; X  n" o$ o
  1184. STA PPU_Addr,X  g# f% I  S$ h2 h3 w% s) @, _
  1185. INX" K; W( \. X3 S$ [3 K, [; N
  1186. Show_Get_Pos_Center_End! a/ g( W  h% n( b3 m
  1187. RTS
    # P" ]5 o( W/ O  k; d9 `+ p
  1188. .ENDIF7 s; w7 `$ w+ {0 Y# n) p
  1189. % U5 O0 z/ M* w+ M
  1190. ;------------------------------
    0 ^8 b; L$ Z4 N- Q' P' S
  1191. ;命名表数据
    ( M) X( r( i) n- B( K4 c4 c
  1192. Palette_Attributes' k& u7 a3 P3 _, v) N8 A' ?4 w
  1193. .IF SOUND_BAR_SHOW_ENABLE7 a( p1 M6 Z7 _: i
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00! J- S( q/ z1 n
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    - i( z1 \/ Q# ?6 {. H
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    0 j# p: s0 _4 y: h
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " o" f9 F6 x: X  y- Z
  1198. .ELSE
    9 l5 I$ J2 R/ Y7 ?; u
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ! ?# w$ O# D) p" t
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF5 R4 C$ R6 }  E
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55: ^# Z% g9 V8 s7 X* x: v
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    + e8 g0 c% v+ M! v5 D+ v- A
  1203. .ENDIF
    % ^1 y1 e6 D5 g8 F
  1204. 5 ]7 C6 W1 u! @- d5 P4 @
  1205. ;------------------------------% `% i* J7 y) l$ W1 T4 S2 D' e
  1206. ;调色板数据
    # H" x9 c% C$ x3 O+ R( K
  1207. Palette_Data. D' g! m1 K$ g) |9 c, ^1 u
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    / v' ~: ^. L# H# P9 _
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F9 S0 v7 ?' x! i) \! b( [% {
  1210. / L, _& j. q" q& V3 N
  1211. ;------------------------------
    ; w% q) Q6 b! O8 ~! I# t7 h! a
  1212. Static_Text_Data
    ; A. s  E, y/ d& U1 Q* B  r
  1213. .WORD Static_Text_Title_Data
    ; H; z5 f# H7 \0 v5 G+ ~
  1214. .WORD Static_Text_Author_Data
    0 i: I/ j9 K8 n7 V) s- g6 d
  1215. .WORD Static_Text_Date_Data! R' Z: A, V- @4 [/ U2 [
  1216. Static_Text_Data_End
    9 x7 A3 |  R6 Q/ K

  1217. 8 P( c0 J1 D3 Z( `2 y4 ^$ K2 K
  1218. ;------------------------------
    , f4 E! w! E- b% M8 U4 h
  1219. Static_Text_Pos
    % A: o" ^1 C8 q) N9 X( O2 n3 K
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos). N  }# r% M- s, r
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)0 W3 y+ @0 @7 \" _4 c6 n
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)# Z0 B- o$ w( s9 J8 ]& X1 |- ^
  1223. Static_Text_Pos_End/ R& {7 K) L: x* P* N3 T
  1224. 1 `) t) S' ~' o/ t4 A
  1225. ;------------------------------1 q( {! r2 J# B) x5 D
  1226. Music_State_Stop/ a5 L7 g% }) E  `$ K
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ; w# Q$ \  M4 X% E6 x4 f
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00' e' e8 c1 R  M+ D# x; a" t# P
  1229. ELSE: E5 F3 l2 t% g! ]% J, P/ Y$ o& B6 W
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    2 {( d+ o$ _) q% Y0 x: x
  1231. .ENDIF
    ; {5 m5 n; g# `- a2 i4 u
  1232. Music_State_Play1 h* v7 C4 O; X! ?* `( Z3 Q( Y
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    9 c& V" m1 u, |7 z0 b

  1234. 3 P8 h1 X4 ?( Z0 ^6 m
  1235. ;------------------------------
    1 ^. s+ s" Y3 ~  ?3 D, d
  1236. Sound_Bar_Text_Data;声音类型文本9 m" }, T9 L8 ^4 e9 m1 @& X8 g" y
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)0 Y. {/ D6 j4 r
  1238. .DB "SQ1-",$FF
    5 r; T. `8 M/ |. l) J8 q9 \
  1239. .DB $FE,"SQ2-",$FF3 S9 G1 D3 f+ `4 @3 t) A
  1240. .DB $FE,"TRI-",$FF# \# a* C' a8 X* l. X; _
  1241. .DB $FE,"NOI-",$FF
    7 Z: |2 b  O: C
  1242. .DB $FE,"DMC-",$FF,$00: b- \$ ~" H+ y- [7 S

  1243. 1 ~8 C) L0 H0 m& X
  1244. .IF Track_Name_Pos/ n& F, ]3 J" X) F6 J
  1245. ;------------------------------
    : V! W8 o' \4 O5 c9 M
  1246. Track_Name_Addr;曲目名地址索引- G3 O$ K: a$ p+ u
  1247. .WORD Trackr_01
    & k" Y8 J: d7 f3 D  d1 e2 ?8 j
  1248. .WORD Trackr_02
    : C4 C% G2 e0 {  y
  1249. .WORD Trackr_03
    + Q7 p  x2 U% J; u3 l
  1250. .WORD Trackr_04
    9 Z, b$ C% [4 h  b0 Q; C
  1251. .WORD Trackr_059 n7 I5 Y1 D  d8 N( G7 W( r
  1252. .WORD Trackr_06
    " L% r2 M1 B2 U
  1253. .WORD Trackr_07
    : t4 q- U( O+ o* u9 c8 a7 y
  1254. .WORD Trackr_08
    $ E- i+ G& F1 w% n5 Y
  1255. .WORD Trackr_09' T  V5 w. `' Q! T# W& K4 I" E
  1256. .WORD Trackr_10/ h5 E! S, ^/ b; t8 _+ s) N
  1257. .WORD Trackr_114 l6 t, n! m1 k% f2 ?
  1258. .WORD Trackr_12
    3 w1 t' c6 M% X6 d2 k
  1259. .WORD Trackr_13" E9 u/ Y- J& m; @2 z' L
  1260. .WORD Trackr_14
    ( A% R# y7 N8 y& R  B$ C8 j
  1261. .WORD Trackr_15
    4 w) z6 ]  `/ F: t
  1262. .WORD Trackr_16
    * i# u; C. _% f( C% _4 _* P
  1263. .WORD Trackr_17& Z- ~4 @8 s& F
  1264. .WORD Trackr_18& E4 ?" q. c& v1 @' [4 B3 X& {
  1265. .WORD Trackr_193 w. |4 z; K  c: P$ z. c+ N
  1266. .WORD Trackr_209 x2 |7 i7 f( H- k
  1267. .WORD Trackr_21' g3 W9 T7 \8 J! j8 G. Z
  1268. .WORD Trackr_22  v3 F: l# l4 Y$ ~, s, }
  1269. .WORD Trackr_23
    ! l, E6 e; {) s3 ]9 m$ `0 k
  1270. .WORD Trackr_24* R& A2 ^# G+ ?0 |
  1271. .WORD Trackr_259 {, m, x9 n: F. A5 q4 h
  1272. .WORD Trackr_26
    6 @* I. d" v! [6 }
  1273. .WORD Trackr_27
    8 x+ x. {+ u6 v1 q% `
  1274. .WORD Trackr_28
    , j1 J' ]% O# G# O; i
  1275. .WORD Trackr_29
    7 B/ M. X+ \$ T# A; e  E
  1276. .WORD Trackr_30
    $ X0 L. o3 g$ d0 b
  1277. .WORD Trackr_31
    4 r5 X' K! `4 w/ n' J
  1278. .WORD Trackr_329 C( j0 i) n7 p7 ?
  1279. .WORD Trackr_332 A& Y' N% `5 F, l
  1280. .WORD Trackr_34
    ; M/ H$ S! v0 g. a/ P0 X; Z2 n
  1281. .WORD Trackr_35
    # z6 N% p4 m+ C' R# M7 v" B9 b& L# d
  1282. .WORD Trackr_369 e+ r; @* R2 p! S9 @$ d$ ~
  1283. .WORD Trackr_37
    0 D% {0 O- p- \
  1284. .WORD Trackr_38
    , {# g9 G+ n# S/ J, I
  1285. .WORD Trackr_39
    & Y. m: ]9 }# z

  1286. & d$ ^5 k: N5 r  @+ B. p
  1287. ;------------------------------/ M  e6 _7 I6 S7 d5 E7 J& c+ z% \
  1288. Trackr_Name_Data
    & u% E1 [; ^' z8 m* h' H4 \0 ?
  1289. Trackr_01 .DB $05,"BGM 1"
    ! z" S5 `7 X) X/ j0 B
  1290. Trackr_02 .DB $05,"BGM 2"
    1 {0 C& }2 Y/ s6 Z
  1291. Trackr_03 .DB $05,"BGM 3"! V6 A, N7 Y& R# q/ _
  1292. Trackr_04 .DB $05,"BGM 4"9 ]( c" Z( U' {- p
  1293. Trackr_05 .DB $05,"BGM 5"
      b* `0 Y0 a* Y/ P) Q6 l
  1294. Trackr_06 .DB $05,"BGM 6"* K, @" h( v/ A
  1295. Trackr_07 .DB $05,"BGM 7"' J7 }/ N; ^7 ?7 Z
  1296. Trackr_08 .DB $05,"GREAT"
    : b4 L1 a0 x! ]
  1297. Trackr_09 .DB $08,"BOSS BOM"
    / \3 ^7 O; x2 V3 f
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    ; _3 [; S8 M. _
  1299. Trackr_11 .DB $07,"P CLEAR"2 ^% Y* P  c6 I4 x2 ~! }. P. ?
  1300. Trackr_12 .DB $07,"A CLEAR"
    ; Y9 W6 p* p, N5 o- {( @
  1301. Trackr_13 .DB $04,"OVER"# Y+ W3 `0 E/ ~, ]& z' x
  1302. Trackr_14 .DB $06,"ENDING"8 |2 H3 Y3 c; P/ p$ C
  1303. Trackr_15 .DB $04,"SUTA"
    ! Y5 W6 J4 K9 p! |/ m* b
  1304. Trackr_16 .DB $07,"THUNDER". x5 }, M' e, \3 }4 K$ b. Z# i* u
  1305. Trackr_17 .DB $04,"SHOT"
    , {0 {5 L4 _& I' w9 [9 }- Z- a
  1306. Trackr_18 .DB $05,"LASER": z6 K8 ?9 K- e1 G, ~% h9 x
  1307. Trackr_19 .DB $06,"SPREAD". d# Q4 V9 n# r
  1308. Trackr_20 .DB $04,"FIRE"! R$ `1 b1 @$ V, h
  1309. Trackr_21 .DB $06,"B SHOT"6 E8 u7 y) e) t" t' c
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ' r1 n2 |; w5 U: I& c' }
  1311. Trackr_23 .DB $07,"HARETSU"/ d! R: U: p$ ~' T) K; s& K) [/ b  l
  1312. Trackr_24 .DB $05,"T OUT"
    ' Z- j8 G/ L) W( [; ~5 t8 e  c
  1313. Trackr_25 .DB $05,"Z OUT"" l& B- q) F; c5 }0 x& t! H# ^) |% u
  1314. Trackr_26 .DB $05,"A OUT"- @. F; q& t# c. P# S
  1315. Trackr_27 .DB $04,"ROLL"2 m. o& x1 d" V+ I! |9 j6 A
  1316. Trackr_28 .DB $06,"APPEAR"4 n8 s  U( J! B- M+ b* [& q$ h
  1317. Trackr_29 .DB $05,"POWER"
    : p$ S' x. A8 L) p; k
  1318. Trackr_30 .DB $07,"BOKK BK"
    ; j- E9 i6 L+ W) U0 e
  1319. Trackr_31 .DB $08,"BAKUHA 1"( ?# }( S5 X1 J' D) t
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    4 j- W3 c$ x4 ?
  1321. Trackr_33 .DB $05,"ARUKU"
    4 l- m& x# y6 L; I, h# Q
  1322. Trackr_34 .DB $06,"JIWARE"
    ! {+ j7 \; q0 e& T- v
  1323. Trackr_35 .DB $05,"SILEN"% Y0 k3 a2 T# g0 k( ^
  1324. Trackr_36 .DB $05,"P 1UP"; M' h2 a$ j; E3 x, F/ `, B0 ~
  1325. Trackr_37 .DB $05,"P OUT", {2 @; k8 c/ w# a
  1326. Trackr_38 .DB $05,"B OUT"' U0 ]- e& S$ }0 N2 r8 m+ G3 S
  1327. Trackr_39 .DB $05,"PAUSE") u3 @# l) z$ S; s/ |, z5 x, Q
  1328. & e# t: p* g& H
  1329. .ENDIF
    ; {* l' b- i/ h" i$ Y
  1330. $ s0 o8 {8 k; q, [# M7 ]5 a% [
  1331. ;------------------------------
    % f% d, [/ ]% J2 ~/ ^2 Q
  1332. Static_Text_Title_Data;静态文本数据
    ; ]$ s" y. L/ Y  [% y: C3 K- A
  1333. .DB 12
    + o% a0 f' u) V% P- s- F% m
  1334. .DB "SUPER CONTRA"
    5 y- |1 ^1 \5 e& S" ^
  1335. Static_Text_Author_Data( S0 ]$ J, R% [7 {: b! a5 m7 N
  1336. .DB 23
    $ z* d: h2 t: E* d8 O4 Y; {7 B
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    8 s6 A% ]5 C8 W! M1 j  _
  1338. Static_Text_Date_Data
    ; L- n3 d, s; k' U3 Y/ B
  1339. .DB 10% ?, Q% G+ }( r4 |$ @
  1340. .DB "2023.07.11"
    $ x' G7 g  z: |( R5 Z
  1341. # |0 H9 c; g" M2 m( ^
  1342. .BANK RESET_BANK & BANK_DATA_MASK& x$ D. N$ h  T: G4 n9 Y
  1343. .ORG RESET_ADDR
    8 G0 x+ o* Z  a  @; n4 o: P* F
  1344. - D  C( o  E# A: L4 \: z

  1345. - O+ u! p9 k: y$ ]
  1346. ;==================================================
    . h! G" Z. o3 |1 A
  1347. ;切到主程序bank
    " N7 p. F3 j4 M
  1348. SwitchMainBank1 c9 i2 y" q3 ~7 X% U
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    * ^6 r& W7 T5 b5 B
  1350. JSR SwitchBank8000! s" O8 q1 {0 o$ d
  1351. RTS
    . X4 N( G2 h2 i' L" u' S

  1352. ' u0 S7 d4 w# y" ^
  1353. ;==================================================
    2 b6 K, S9 b* m7 o
  1354. SwitchBank8000;切换bank到8000-9FFF" X. N* n( Q' g, I; I
  1355. PHA! U$ R* S) q* j; T, `1 s9 n" V
  1356. LDA #$06' P# w2 m% ]. I/ k* k
  1357. STA MMC3_BANK_CTRL+ A0 d. d5 {0 p4 t  \! |
  1358. PLA
    / S7 B: q0 _6 N" N( J
  1359. STA MMC3_BANK_DATA
    # O9 K4 P5 y, e1 y0 U$ b+ J
  1360. RTS
    ! D* B$ T3 g8 C0 k8 Y9 m
  1361. * Z2 Y$ a/ F3 G$ n7 z
  1362. ;==================================================
    ( |. H1 M- D1 X9 l% J
  1363. SwitchBankA000;切换bank到A000-BFFF
    : K: f+ a8 q8 B* A7 v& Q, Y. O
  1364. PHA
    2 t# `; f5 B" L7 p9 r
  1365. LDA #$07: ^& ~! U. L( F) S1 f5 f; E$ _% n" t
  1366. STA MMC3_BANK_CTRL# u% _" {) Q+ E8 q# j, ?
  1367. PLA
    5 S8 M- \" E. p$ M5 b
  1368. STA MMC3_BANK_DATA
    # W% C6 }0 b1 j* j, D6 i- Q- x
  1369. RTS
      N, N' K1 a* c, C' {9 T
  1370. " Y, E6 x2 ], `  p+ Q% s5 @9 Q
  1371. ;==================================================' a7 M7 g. q$ {( A
  1372. Sund_Bank_Init;音乐bamk初始化+ T9 ]$ P7 F" V% B$ i
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK+ t+ ]+ h: y4 c+ P# G
  1374. STA Music_Bank_80004 }5 F0 L6 I8 v) C
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK0 a9 h. u: R; ~& h# \
  1376. STA Music_Bank_A000
    4 l5 N( r& Y  V+ B. j
  1377. RTS
    5 k9 l' i& s) t6 t
  1378. ' d8 @9 `* ?( i: `
  1379. ;==================================================
    ( [. |6 M# E: r2 J9 L5 X# Y
  1380. Sund_Bank_Set;切换音乐bank  U! y, ?2 `# v5 M7 w) X
  1381. LDA Music_Bank_8000
    ' H* w) J4 j: j. B: t0 E
  1382. JSR SwitchBank80007 v- H( N$ r4 @8 h% Y
  1383. LDA Music_Bank_A0000 m4 s+ I, Z9 `; a; g  S
  1384. JSR SwitchBankA000
    ' P6 X6 A8 J9 Z3 x1 L' S
  1385. RTS' S& i* o) h" h  A% D
  1386. : Q; s; w; q' C% I/ W' m$ F9 a
  1387. ;==================================================
    6 g0 y' i; I3 D/ y, P, Q6 X8 y
  1388. Sound_Init;音乐初始化2 r4 w' `' l8 R$ ?+ A# v$ \
  1389. PHA1 @* g8 V3 B) K$ ]+ h! u9 s' i
  1390. JSR Sund_Bank_Set. y- k8 V1 r* C
  1391. PLA
    . ]2 X. k. L1 Q, ]
  1392. JSR Music_Init_Addr/ r1 d- M' h% k  v: j
  1393. JSR SwitchMainBank2 N, l! c( b, z' G, X4 q

  1394. 6 u3 G3 U& U& ]
  1395. JSR Music_Bar_ReSet, F( g8 v1 B! b- F! T4 b
  1396. JSR Time_ReSet/ z% o+ o( ^+ b0 C# c
  1397. LDA #$00% U% c) B" b: M% ^
  1398. STA Music_State2 H6 q. k- f" Q4 P( p) d
  1399. JSR Music_Stata_Show5 G0 X8 F/ d8 N- y- H
  1400. .IF Track_Name_Pos
    ' ^/ o9 u1 v/ [+ K
  1401. JSR Show_Track_Info" l; A2 s; @8 U# C4 s
  1402. .ENDIF
    4 \$ c" E9 Z; h1 H! l- v  L
  1403. ) G( y9 R# ~( |* C3 k
  1404. RTS6 N" s1 ~+ M% O  v/ O

  1405. 0 B' Z4 E3 M# L6 T+ h) t8 [6 P
  1406. ;==================================================
    " a+ F" J8 y6 j% l( ?$ p3 I9 ]
  1407. Sound_Play;音乐播放
    ! |$ ?6 T2 ^6 j' F# Z) @- ~: g
  1408. PHA
    % W/ S7 H  e/ V; ?0 @1 z* F3 u& G( [
  1409. JSR Sund_Bank_Set, b4 F, w* S+ Y. K- j0 i
  1410. PLA
    * K9 t3 A9 y! T6 f$ Q
  1411. LDA Music_State: V; h% V% d6 a4 g& Q" x$ n* k
  1412. BNE Sound_Play_End
    ( X6 z  S; r# B5 N$ u
  1413. JSR Music_Play_Addr
    / F: W" Q  {& r! n; ]/ b0 N
  1414. Sound_Play_End2 A/ Q" o! u7 a6 J! r1 a1 k
  1415. JSR SwitchMainBank0 t" r& l( m) _- a- ^
  1416. RTS
    2 D  [& h; J) P" ^; O
  1417. & U$ U$ R  Y# I* U) k  a% Z
  1418. ;==================================================
    * r  n% {( D3 s7 ?3 J
  1419. .IF Music_Reset_Addr
    * G1 R7 D9 [" Z; r2 p+ M- a4 k! N; a9 Q
  1420. Sound_Reset;音乐重设(如果有的话)5 N# u$ R4 O. _* `8 M) Z
  1421. JSR Sund_Bank_Set- |! Z; S* s+ A, l
  1422. JSR Music_Reset_Addr
    3 t6 U" \8 ^0 l; v/ _6 W- P
  1423. JSR SwitchMainBank
    . L( u3 e7 B4 R9 M: f
  1424. RTS( ?4 A( i/ h/ R0 a  |% o  L
  1425. .ENDIF
    6 }4 G. y, b( T" u4 a

  1426. / g) G) ~! |- q% X: m
  1427. ;==================================================
    5 g& P5 E) M! n) e
  1428. MainLoop;死循环9 t. ]+ s: u* T
  1429. JMP MainLoop
    / l" k2 X  {7 k

  1430. ) ?! N3 l% p9 k" p) s( n3 n
  1431. ;==================================================
    2 k0 g% `: m8 Y- B
  1432. NmiProgram;Nmi中断处理
    ) h+ w: g2 r" ]
  1433. PHA9 w1 N9 Y! D" ?* `/ i% x
  1434. TXA
    5 Q6 N9 r4 c" G7 J8 b1 A: }8 {
  1435. PHA! a- q, }# Q$ Q" ]
  1436. TYA' a* G1 }5 A8 }/ C9 h& a
  1437. PHA
    + {( Z) V/ A, y/ c' L

  1438. 7 J% e7 y& Q& S( G
  1439. LDA PPU_STATUS
    3 M. D4 M& _$ y8 X( G7 y
  1440. LDA #$00. F$ ]- d) {$ r, p; l
  1441. STA PPU_CTRL
    7 Z/ h- z( Q/ G6 ?- d5 `

  1442.   w( s# z& E( \* E2 ~
  1443. ;切换主程序bank: j  |3 k) S' \5 _9 w, I3 r5 u- ^
  1444. JSR SwitchMainBank- C( N# D8 }0 H0 g( U

  1445. , ^& y; l$ }8 d7 ^) m# N% E* q
  1446. ;NMI处理
    7 T' I* [% ], f& C( Q
  1447. JSR NmiProgramProcess
    8 d! N/ {& C; _- B* B$ }
  1448. . l8 b/ g1 b7 w
  1449. Nmi_Proc_End
    $ F9 Y' v, k/ D" r5 A3 R
  1450. PLA
    / m4 A6 s, Y% s1 t/ A! _# b- T
  1451. TAY0 A; |1 r. ~) c4 j- D! l" j% `" o* B
  1452. PLA
    ! t7 L* \, ~2 a  P) L. ?9 o5 d
  1453. TAX3 @. f1 E' t6 `1 G% _
  1454. PLA
    4 P( Z3 ]! _, q, o7 S' c# [  m
  1455. ' W0 v0 u7 V" L/ p$ h5 J
  1456. RTI
    # U4 I" u' W! x. l" B: A" S  _4 w7 R
  1457. - ?: K" V" s9 d* v% {( ?
  1458. ;==================================================
    ' C* B# {/ g+ d: U, X" f% S1 A, c
  1459. ResetProgram;重置中断处理% P( H6 R' T7 h' L! A
  1460. SEI9 [8 y/ X5 C4 j
  1461. CLD
    , ]4 ~8 t; L* Z; p& R; X* \
  1462. LDA #$00
    5 h2 E; S+ P% q5 Z! @
  1463. STA PPU_CTRL+ T9 w5 _7 S2 _8 C! Y0 Z
  1464. STA PPU_MASK
    - c5 n) N+ g- R1 j

  1465. ( Y" e) \0 n0 y' S* \0 g) q- Z. Z
  1466. JSR SwitchMainBank
    ' G+ D' {, q2 G$ s* S0 `
  1467. JMP ProgramBegin
    3 C7 n7 A2 I! w; g! ?. k
  1468. 1 C9 M; O6 T7 w) s" Y
  1469. ;==================================================5 t/ x# |( P( O3 ^  L, B
  1470. IrqProgram;Irq中断处理
    . o: D# k6 ~' _& S
  1471. RTI5 t6 X8 o& g/ A
  1472. 7 I6 I9 f( K4 W) B1 ~
  1473. .IF SOUND_BAR_SHOW_ENABLE
    9 }" ]" K2 R7 }
  1474. .ORG $FF80
    4 E- ^) }5 M* t: f
  1475. STA $4000,X
    3 l+ X4 [6 C6 c. W) o
  1476. STA Sound_Bar + $00,X
    6 U! X- Y) ^$ y1 a6 V
  1477. RTS7 z% W8 u! F7 _; d

  1478. 4 W2 G" ^& s% y3 x$ v$ L& c
  1479. .ORG $FF88
    0 `. _, Z& {; J. J
  1480. STA $4000,Y
    1 l+ B6 w) X6 h$ c
  1481. STA Sound_Bar + $00,Y
    8 T/ u! c/ f- V1 s
  1482. RTS
    ' l5 E" f; w8 t8 k1 X
  1483. 7 u1 u/ F- H, m! L  K$ v
  1484. .ORG $FF90
    # }5 _$ A  x& p7 Q" q7 Z. v, _
  1485. STA $4004,X
    ' {6 B5 C3 O$ G: y/ |( }0 I7 @
  1486. STA Sound_Bar + $04,X
    - G& H" y& C* L( O; J
  1487. RTS; k) a0 C% U! ]8 D% A

  1488. 6 D" L2 k6 ], ~  d* }' g) w4 \
  1489. .ORG $FF98  N; H7 \' Q6 P, e0 W2 H" O
  1490. STA $4004,Y
    , v1 ~& [  c; Z7 |! W  |/ M  l0 ^
  1491. STA Sound_Bar + $04,Y6 s- t4 k/ b3 A  m0 u7 `4 \
  1492. RTS! j$ }0 M1 }+ K0 j

  1493. + b, B! [: m( M4 B9 D1 ~
  1494. .ORG $FFA0
    8 ?5 Q6 l2 f. K( P5 j8 a
  1495. STA $4008,X# S" l( t5 C, r/ @$ p/ g
  1496. STA Sound_Bar + $08,X
    ; ~9 O' z6 g/ ^8 d
  1497. RTS
    $ q+ i: C9 [# V/ y2 c4 G. \

  1498. 4 o9 m( I" e/ b
  1499. .ORG $FFA8
    * W' E  ?4 C  G" D' o; a0 E' E
  1500. STA $4008,Y
    ' p+ ~+ q- U, D' y+ L( m" h' C
  1501. STA Sound_Bar + $08,Y; U# s1 W) r2 a. b. R$ O
  1502. RTS0 K0 z9 o/ t2 ]0 x. S, e
  1503. % T  N, u/ h+ v3 B% h
  1504. .ORG $FFB0
    7 a( [4 K! F. a/ v- I
  1505. STA $400C,X/ N* C3 q! p9 p& o
  1506. STA Sound_Bar + $0C,X: A/ I2 f. d( G9 \# k
  1507. RTS* [2 d4 ~3 A2 A: Y9 r
  1508. . O9 y* E8 s8 H* G! [7 [
  1509. .ORG $FFB8. X, t. h( s' a* J+ A: B7 W- P- `$ b' b
  1510. STA $400C,Y* y+ b) V% c) V
  1511. STA Sound_Bar + $0C,Y
    8 ~: _! A+ f8 y6 E6 m. z
  1512. RTS
    ' w* u0 m3 k% J7 _
  1513. 1 u, F* y+ O& Z: C
  1514. .ORG $FFC0
    , T0 r: `  L2 z# w0 |
  1515. STA $4000
    . @% r; `5 @/ L0 ^. Z  s
  1516. STA Sound_Bar + $00+ e. K4 h: \% ]/ }
  1517. RTS
    9 n) a# y8 ?6 w

  1518. 4 c& `+ }' a; |& C: A& y
  1519. .ORG $FFC86 {- `; Q- X; J  @. T* b5 q
  1520. STA $4004
    ) ^( W- M  b' I* k# H
  1521. STA Sound_Bar + $04( E6 M2 [' L0 X, b; U
  1522. RTS
    ; C8 }2 h4 F- Z, v1 U7 m% Z# [8 L

  1523. ( p& {3 x, |! c" q# e' c& i
  1524. .ORG $FFD0) s/ B. K- d/ Z; @) i
  1525. STA $40080 q3 j5 J) L& q' @- n$ ^6 X% Y) e7 [
  1526. STA Sound_Bar + $08
    0 Q+ H; u, b  z6 {; A
  1527. RTS
    $ j& \% Q6 _4 M) [
  1528. . N3 Z3 M' j' F( E5 p2 j
  1529. .ORG $FFD8
    7 P9 w% b% `+ ^. Q
  1530. STA $400C* k/ L4 i: b, w4 a
  1531. STA Sound_Bar + $0C
    ) b1 d5 C( n' L  e* K9 W
  1532. RTS/ _# C  ?4 L7 z; b

  1533. ! l: E: e, Q1 W5 A, A8 n
  1534. .ENDIF
    & L5 ]3 S2 l, _1 Q2 F

  1535. 5 {- B+ j( e7 J3 G
  1536. .ORG $FFFA
    & r" N& H! |1 e; I, e; J9 G
  1537. .WORD NmiProgram: L) E( c- C$ @2 j% [
  1538. .WORD ResetProgram1 P: O0 u4 h, u% F
  1539. .WORD IrqProgram
复制代码
& @- V; c( \8 S+ k' y, S# N: E' [
- B( n9 u$ D/ M* }. E* R# R
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1014 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 2967 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 08:24 , Processed in 1.083008 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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