EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 * W: A: {# T3 P8 S8 m

, i  c6 N/ l* I1.魂斗罗
, g, T, D. E7 n5 \' D& O7 s* M2.超级魂斗罗
* z  m; N6 I3 i3.赤影战士/ v1 f' ~  }, Q
4.忍者龙剑传2
) F& H* m5 B& l' y. W, }4 L- |( B# ~

: w$ @/ r4 F3 ]9 d1 U% q% ^* v4 Q0 @: Y" f

' {: K8 X/ p- [/ l% S" E源码:
8 ^0 R& v2 c% ?( S% v1 o: S
  1. ;[FC音乐][播放器模板]/ V7 h9 Q( v! P! Y7 Y3 L/ c
  2. ;FlameCyclone 20230710
    : B' [% n% G! X% k( w4 i2 ?
  3. ! [, u4 `8 U0 z2 d3 {5 i
  4. ;文件头1 ]/ L4 \! @. d6 W
  5. ;======================================================================9 q% H' Y9 B1 U9 G
  6. .INESPRG 4                                              ;16KB PRG 数量/ [  j% v( u. b0 f9 N& r
  7. .INESCHR 0                                               ;8KB CHR 数量
    + K" }4 l2 j$ x7 \( Q/ U: Q) U
  8. .INESMAP 4                                                   ;mapper 4) {, B3 {4 ~! Q6 ?1 I! @+ t
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    / u" C  c9 e$ s8 K* W
  10. , d* H, y; h1 M( Q9 [0 f9 A
  11. ;==================================================
    ) S: B7 e. |7 h3 L: c
  12. SOUND_BAR_SHOW_ENABLE       = 1+ I9 o+ \  B% f9 b0 z: ~
  13. ;==================================================
    + L& K( h6 `- I& b% W" [9 o0 m
  14. BANK_DATA_MASK              = $07
    9 S: t: R' t, r. F! r6 S% U& B
  15. ;==================================================
    " J+ \4 J6 J: |, T9 U, _+ b
  16. SOUND_DATA_BANK_0           = $00
    / o( z+ I8 \' Z
  17. SOUND_DATA_BANK_1           = $01
    3 I) n7 `) _; [* r, a
  18. SOUND_DATA_BANK_2           = $02' A: r4 l3 N- E; R2 |
  19. SOUND_DATA_BANK_C000        = $06+ a* r! b+ j! a% l) f* G% C

  20. * V+ e* |) j( h: C
  21. ;-------------------------------------------------9 ]4 B9 a) v, x( _6 E8 ]( `+ ~$ e
  22. CHR_DATA_BANK               = $04+ Q. E, D, L. C0 Q( f
  23. CHR_DATA_ADDR               = $A000
    0 u% j1 \: S  ~
  24. ;-------------------------------------------------' l% H6 y2 @/ M, `
  25. PROGRAM_BANK                = $05
    " d# R0 R" v2 s5 Z& s
  26. PROGRAM_ADDR                = $8000' [0 x* |) Q4 a# O  Q
  27. ;-------------------------------------------------
    4 G9 }6 c! ?# X; n, e% o' X
  28. RESET_BANK                  = $073 a/ h4 x, Y4 @2 k# j
  29. RESET_ADDR                  = $FE00
      G2 r5 u) @8 S, {) R9 w: w3 X4 v
  30. ;==================================================! Z% Q5 O. S! w5 U+ g( U
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    7 A0 k! u& A4 h8 h  ?0 ~: r, x+ x
  32. Music_Play_Addr             = $813C ;音乐播放地址. z/ z) _" j/ a2 q; E
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址# J9 c6 G5 d# s/ }( g, x
  34. ;==================================================
    : O) g2 _2 Q, Q% s5 ]
  35. Music_Song_Total            = 039  ;全部曲目总数
    4 C) U" s: p5 T8 `- L. L- B
  36. Music_Start_Song            = 007  ;初始播放曲目
    : Q9 f& p' n, t2 v
  37. ;==================================================
    1 l6 i& @4 W% w: @! ^

  38. * V* E! z. C# Y- V8 z3 h5 z
  39. ;==================================================
    ) ]' {9 [3 r0 {7 j) R
  40. Title_Text_Pos      = $210D ;标题文本位置! N. }# B& P6 F! O3 o% v
  41. Author_Info_Pos     = $2284 ;作者文本位置6 q8 H- y/ ^2 e4 |. m' h( J
  42. Date_Info_Pos       = $22CB ;日期文本位置
    " t5 o: B! ?7 i, ?( Z# R$ o5 L+ n
  43. ;------------------------------* X: V' \- Q/ M
  44. ;------------------------------
    * K/ h% ^2 R+ E0 Y2 j
  45. .IF SOUND_BAR_SHOW_ENABLE4 g5 e/ N: I) i% k  T
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    # M- w- R4 g8 Y$ d( _
  47. Play_Time_Pos       = $21F3 ;播放时间位置8 h4 H) m( _4 D! X5 b
  48. Play_State_Pos      = $2233 ;播放状态位置
    / j& z- T+ Q9 V8 n
  49. .ELSE+ s5 Z: |% x5 t2 ^$ l3 J& I5 h

  50. / i/ w0 `: v- n9 S" _
  51. .IF Music_Song_Total > 99
    8 S! k2 A3 q% W- O5 j8 K5 [0 \: a' W, w
  52. Play_Index_Pos      = $21AC ;当前曲目位置+ s; Q& U! u/ Q
  53. .ELSE
    $ w  I8 \6 X# s$ `) |; `

  54. : F' K% d: \# J5 V3 r3 x/ {
  55. .IF Music_Song_Total > 9
    7 n9 D3 M/ {7 [) |/ m2 Y
  56. Play_Index_Pos      = $21AD ;当前曲目位置# A1 M' y& V% I1 N/ b# d" E, J* b
  57. .ELSE
    ! z# I" U8 f7 S4 T& V3 b
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    $ B7 K0 D6 J/ x5 \+ Q: T  `
  59. .ENDIF
    4 w! X. k; v/ K
  60. ! y. J/ H4 L4 ]9 F( C; r
  61. .ENDIF
    $ `/ e1 `7 z. S, X! W" v% }3 X; @

  62. ) O/ J; S4 b0 T  P. s+ U) v+ j
  63. ! p+ q$ @- G5 U$ l( l
  64. Play_Time_Pos       = $21EC ;播放时间位置  O2 ]) T8 A5 X6 t- H8 D# V
  65. Play_State_Pos      = $222C ;播放状态位置
    * z" g# B5 q% F0 X( D
  66. .ENDIF5 S3 b: K* Y/ _
  67. ;------------------------------: c2 s4 `' o3 [0 W
  68. Track_Name_Pos      = $216B ;曲目文本位置
    0 ^. w" |5 s, F
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    # d! j6 A+ m0 R- Y3 g1 L/ Q% o
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置" U/ P! p* G  R/ Z$ N5 l$ c
  71. ;==================================================+ d9 T3 V$ |. ^- x2 u
  72. Scroll_X = $00+ ~* @7 x; h8 S+ t; o+ \
  73. Scroll_Y = $06
    ) E; [# M0 x1 O. O
  74. ;==================================================
    9 Q4 U  D' m& W) c$ f) w
  75. RAM_Cln_1       = $01003 ~. q9 ]8 Z2 R4 P. M" s
  76. RAM_Cln_1_Size  = $803 H$ g, [+ u. S! c% A
  77. RAM_Cln_2       = $00E0
    5 f+ Q$ ~, G' F: j8 |1 r
  78. RAM_Cln_2_Size  = $20
    ! X( U+ @, b, \! S+ M3 R
  79. RAM_Cln_3       = $00E0; W6 p: b# r) X) r/ f
  80. RAM_Cln_3_Size  = $20
    / h/ B0 v. M  y7 B- c

  81. $ p  w1 i( K! H* r: C
  82. ;==================================================
    * h5 E# ^( n6 ?) a- ?
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器$ K5 C# i' J8 g. J, z% j+ l9 b$ s+ }
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器8 l" Y% x# H" d: v( p" |
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ! x0 Q. I2 P1 @, ~
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    8 K8 b7 v5 Y9 ]$ M4 W
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    ) E# [4 j# j7 k2 L
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    + `5 E4 S% y( g3 k9 ^
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加& U3 k4 \4 @* H+ k$ F" y
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 * w3 Z" q" [+ _4 W2 W2 F, E
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存3 d: a5 o, \! b  P' x
  92. APU_STATUS              =   $4015   ;声音通道切换
    3 ^: C) H, u) P# n# A4 E# |
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    1 v. n" l* V5 w' s6 x  q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通( d" p( h/ C, `( D/ k# s
  95. ;==================================================  U2 N0 n& o7 \" }) k( {. v
  96. MMC3_BANK_CTRL          =   $8000
    ( J! M2 ?! `- y4 t* @- g
  97. MMC3_BANK_DATA          =   $8001% ~0 L1 o8 M9 q$ N, i, v
  98. MMC3_MIRRORING          =   $A000
    . _6 G5 n) a% p: x; }, Y
  99. MMC3_PRG_RAM_PROTECT    =   $A001: e4 B4 F( A  z" Y2 I6 w* Y3 ?5 l9 a
  100. MMC3_IRQ_LATCH          =   $C0006 j, h5 ]6 C: r7 S
  101. MMC3_IRQ_RELOAD         =   $C0010 S  v7 O+ z% O5 p7 t
  102. MMC3_IRQ_DISABLE        =   $E000
    5 y3 t/ j  P0 w
  103. MMC3_IRQ_ENABLE         =   $E001/ x1 z2 y9 X6 N4 h
  104. ' g+ r$ k6 l9 t! y
  105. ;音乐数据块5 Q. H3 L6 O8 g$ k. a5 G& `
  106. 1 S3 z$ Z# }; m; X6 A! ?0 O) l
  107. ;======================================================================; `  H$ b% B3 o( h1 ]' ]1 j/ `% M4 x' m
  108. .IF SOUND_BAR_SHOW_ENABLE% L; h6 R- n5 h3 F; O6 @
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK8 V5 J  e, }, \& G% O  b
  110. .INCBIN "sound_bank_bar/music_data_0.bank"" A) b7 D# U  F; v7 A4 e
  111. 0 w$ V* t" ~, Q6 c% j
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK  B% N5 p9 W6 Y; ?. X+ Z
  113. .INCBIN "sound_bank_bar/music_data_1.bank"2 F. N. Z# r: f1 {# J6 K2 t2 ^

  114. * k) r# n: l* |0 E/ A2 `' Y
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    9 `' f. b: q. f$ h3 a* m! q! J
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    2 X, n7 A7 M/ f- i6 s
  117. ! T8 ?2 f% N% ?
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    * m/ n1 W1 p+ N5 o
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    3 v5 l( V9 X+ w! ?
  120. 5 G9 r8 R; z  V$ I+ [
  121. .ELSE. u5 \+ N& P% I5 ]* }& p
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK2 O9 |9 q3 R3 ?
  123. .INCBIN "sound_bank/music_data_0.bank"
    " Y4 Q8 \1 ]  P  V- R3 y5 k

  124. & J) g# I: j. O  L3 \: b! s
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK$ U& ~4 |% ^, n. j4 b5 G, f
  126. .INCBIN "sound_bank/music_data_1.bank"
    0 A& N. [& d5 v1 G

  127. 4 E! ]( l9 z" O+ f0 z6 e4 w
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    3 O5 G( P/ F7 [' c" Q4 U3 x/ t
  129. .INCBIN "sound_bank/music_data_2.bank"2 @9 w5 v( w8 S" S3 d1 y: t* F) `

  130. 9 g, p' L# P6 Q5 l0 V4 o* j2 I
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK0 W  h; \: N4 p/ V
  132. .INCBIN "sound_bank/music_data_3.bank"' C) h1 }0 U. ]: ^8 f3 |5 W
  133. .ENDIF
    ' |0 Q1 D! Z! \1 y7 y
  134. 3 X. ~7 V5 Q: z7 z" |3 l
  135. ;CHR图形数据
    * v3 Z" p8 _4 o( a  z9 O
  136. ;======================================================================* N8 Q; g! \& o# m+ r* u- k
  137. .BANK CHR_DATA_BANK
    " q0 H3 e; J) N' x, n
  138. .INCBIN "chr_bank/chr_data.chr"* ?  n. N2 ^+ T3 ?4 {" u
  139. ! o. ]# G2 ~, e
  140. ;==================================================6 |; H+ S- C4 _: M
  141. PPU_Addr        = $0300
    # x  R& Y- J  u! F* P$ B
  142. Palette_Addr    = $03C0
    ! r. ?5 u8 @) M5 W- N5 ^
  143. Sound_Bar       = PPU_Addr+$E0
    / K, U0 t1 j) v% `6 y8 N
  144. ;==================================================
    - y6 |# I( D: c& G3 _4 R+ J/ O" G
  145. Palette_Update_Addr     = Palette_Addr+$0D
    ( }& S) q$ I! ]+ B  R
  146. Palette_Update_Max      = $2C
    4 P* z: z% b  F% l  K. ~
  147. Palette_Update_Min      = $21
    & ]$ x. `- F( r- y, l0 n
  148. Palette_Update_Interval = 605 p7 {5 j1 |9 V. q. h
  149. ;==================================================
    8 q, b; R3 y0 w; \) L
  150. Sound_Bar_Cnt       = PPU_Addr+$F0/ G& ^8 C/ W7 J+ \. o
  151. Screen_State        = Sound_Bar_Cnt+$01
    2 m: E6 y% m4 Q* I3 J
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    9 F) t6 Q1 S9 e+ {" `( G2 o
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03% C# ^2 D) z- [
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ) @8 l9 f3 C- s! Q4 g6 p0 \  o
  155. ;==================================================
    2 T+ W2 f" C( ], l. G
  156. Data_L              = $70
    : |1 ]1 r5 P& u/ n, ?5 o
  157. Data_H              = Data_L + $01# G/ @% c' `7 ?4 [
  158. Data_Cnt            = Data_L + $02- L$ W9 }9 X. Z1 S6 |& q% Y0 O
  159. Data_Buf            = Data_L + $03- b3 u5 L% d5 i4 i. I2 [# A0 \
  160. Time_Wait_Cnt       = Data_L + $04' I# G" A+ S; c. f+ W2 \4 W
  161. Palette_Wait_Cnt    = Data_L + $05
    7 S# X; H# z% `
  162. Palette_Update_Flag = Data_L + $06* h  D. S6 ~" G; G" u; Z9 G
  163. Show_Track_Name     = Data_L + $07& X5 d* R$ I- E* C+ m
  164. ;==================================================3 @! m# W- C6 C: H$ `. ^! M; I
  165. Key_Keep            = Show_Track_Name + 1/ i% f: f% Y0 l, E' p# |3 C
  166. Key_Once            = Key_Keep+$01
    3 ^" M& e0 u, V/ P& N# W# {5 p+ E/ {
  167. Key_Kemp            = Key_Keep+$02
    / z/ E# K4 a4 C; }. y, x
  168. Key_Temp            = Key_Keep+$03; A$ m6 v$ M. q/ q5 M: `' h- ]0 G
  169. Key_Getv            = Key_Keep+$04# w6 ~6 W5 T( ~* b) \( S- @
  170. ;==================================================
    ' G0 V  L$ ~, M. H
  171. Music_Cur           = Key_Getv+$01
    . F, Y" |/ s: H3 K7 i4 i
  172. Music_Last          = Music_Cur+$01, {' `4 ]' ~0 u- ^7 u4 L  a( K
  173. Music_State         = Music_Cur+$02' ~  ]' y3 d0 x
  174. ;==================================================
    5 T$ r" ?# g7 ]" k7 t; D
  175. HEX_Data            = Music_State+$01! }: p1 [: }2 [3 ?
  176. DEC_H               = HEX_Data+$01
    ! m' w! B5 r: S6 `- M3 V. W/ h& V
  177. DEC_T               = HEX_Data+$027 ]0 ]: o+ g; W
  178. DEC_L               = HEX_Data+$037 n. W  h' ~1 E7 f
  179. ;==================================================
    9 K( K1 X+ F' b
  180. Time_S              = DEC_L+$01+ B; }( O+ z$ K- P- X( S& S
  181. Time_M              = Time_S+$01
    6 }+ d( G+ q. i- c  L  Q; _" c& R; S: w' M
  182. Time_H              = Time_S+$021 c. f- J, d. r
  183. Time_Cnt            = Time_S+$03+ M# \% S5 N! k8 e/ i
  184. ; t( ~  G# x5 ?5 I2 b4 V8 q$ J  \
  185. ;==================================================! a3 T: x" V8 e* P1 ^
  186. Music_Bank_8000 = Time_Cnt + 1
    $ o( k- I% N3 C- L
  187. Music_Bank_A000 = Music_Bank_8000 + 16 w  G5 W" J% g
  188. ;==================================================- n! ]( K. }! n* m+ e8 l* e& ~
  189. 8 e3 B! w$ Z  q& g) s5 p  _% _
  190. ;======================================================================
    / [! \+ t; N2 ?% i, f/ @4 D5 |
  191. .BANK PROGRAM_BANK- t% G1 V' Z% ~. ?( c
  192. .ORG PROGRAM_ADDR" g/ l  F4 y  H
  193. & v# G' L2 I3 o/ G6 E
  194. ;==================================================
    # E7 b3 v( n% q' E# @
  195. NmiProgramProcess;NMI中断程序处理
    5 u/ K& h" N0 D' l' ]- d3 L9 }8 e  e
  196. ;处理PPU图像" w, e) G% X9 X7 o5 w6 A  Z
  197. JSR PPU_Proc1 P: d9 o' s8 u. V" |3 W

  198. , s! k" a2 T2 c) j5 X
  199. ;启用NMI中断& ^5 R1 M; `& F+ r8 \+ B
  200. LDA #$80
    1 v/ k& z4 q3 z: L
  201. STA PPU_CTRL6 E6 ~7 m7 Y# B8 v

  202. 3 G) i5 Y1 o; x) r* X1 J+ b* f
  203. ;更新调色板
    - Z! X8 \& Z; H1 z. Z1 `, S
  204. JSR Update_Palette_Data* s+ t7 B7 r# @( P
  205. 3 j/ `4 s6 s5 E0 P: T3 p
  206. ;显示时间(缓冲)/ x0 H: i$ c( _( M) N7 k" ^/ O
  207. JSR Time_Show
    # J9 k! C1 v, _" \1 V2 C
  208. ; K; v+ l6 L& G
  209. ;播放计时
    2 R" ]" @% ~, Z$ ^+ O
  210. JSR Time_Count" T; H& L% ?( T  P% H3 k/ A3 S

  211. " I( H, a( q  c. G+ p( ~* N. Y
  212. ;播放声音. y0 J$ k# m1 s5 |
  213. JSR Sound_Play" p1 K/ y( o$ Z' B" U
  214. # h1 _% ?, J2 n2 h3 m  N
  215. ;切换音乐(手柄触发)# ?; ^/ Z7 i5 Q* D$ ~; K
  216. JSR Music_Switch; |2 ~9 }4 W; d* [- w

  217. 6 \" E9 u8 K3 p+ m4 _- c
  218. ;音乐显示(缓冲)
    % `! Z, R5 m$ a8 a4 M* C
  219. .IF SOUND_BAR_SHOW_ENABLE$ k" r  @0 e. G  @3 v- Q
  220. JSR Music_Vision  q& {3 G+ X, @5 [" H( v
  221. .ENDIF5 _3 }+ F, t9 Z0 E1 N

  222. ! [% I1 m# h2 X$ F+ @
  223. LDA Time_Wait_Cnt: V/ h: ?, U+ o  G% D8 l; o6 Q
  224. BEQ NmiProgramProcessEnd
    6 U5 t# w) t0 v
  225. DEC Time_Wait_Cnt3 n3 Y8 d+ L, S5 o2 T
  226. NmiProgramProcessEnd
    . F. a2 G' a) W9 _% {) [8 _
  227. RTS
    9 x+ F8 ~- D( T2 t- S! _
  228. - z; h: x* P4 y! l" w& r$ c
  229. ;==================================================1 c4 ]% `' Y2 c3 k# W8 E: K; B; p5 K2 {
  230. ProgramBegin;主程序
      o! n# f3 p/ H8 I
  231. LDA #$00
    0 j8 L& y0 V. [+ a
  232. STA PPU_CTRL
      |# Z: B0 e" p6 Z) }7 L5 q
  233. STA PPU_STATUS, W* O0 x; b% o0 P2 `- h' ^
  234. STA PPU_MASK
    . l7 X7 w) Y8 d
  235. STA APU_STATUS) S: L9 ]6 J" J" P2 t. D, S
  236. STA PPU_SCROLL
    ! y2 k; j. i! v+ t- H) `
  237. STA PPU_SCROLL/ L$ a/ W5 \1 j  V$ Q, X
  238. LDA #$C0
    , T% l/ {' z8 ~1 W& w! F/ s
  239. STA JOY2_FRAME
    ( S* L; K4 g2 t

  240. 4 Y- ]+ N! v7 N5 y
  241. LDX #$FF. c4 f" B8 l7 r6 j/ u
  242. TXS
    / d% i/ z, j8 m' ?; U- N. V
  243. LDA #$001 P6 S+ Y* U& [& _4 i1 _! R! n. x
  244. STA PPU_CTRL1 p$ n7 Y8 B! {. \5 h1 M+ P# r
  245. STA PPU_MASK
    8 e3 E3 w1 |( q% Q, d. c
  246. STA MMC3_IRQ_DISABLE6 @7 F4 v* f) e

  247. & Y6 d/ l2 K- c
  248. ;==============================6 A6 F! r% f; R& b, P3 w# T
  249. ;调色板清空
    1 [( H8 ^/ P* R( ~+ |7 C
  250. LDA #$3F
    + G( |+ R. u6 M, J, M
  251. STA PPU_ADDRESS9 n0 w: r4 ?& v0 t4 r" C6 b
  252. LDA #$00" G4 l, ?: Q6 `2 p/ n' @$ d9 U* z% t( Q* }
  253. STA PPU_ADDRESS3 \( T" Y# o; d- ~& S6 n
  254. LDA #$0F
    4 I. @: b7 j; F5 w9 M9 a$ l2 D& [5 }. Y
  255. Palette_Clear
    % Q( B7 x: C3 w( O: G
  256. STA PPU_DATA
    8 _& G1 m* @) g. ?$ Q& j* a
  257. INX, \! x  M/ f2 b1 P* U
  258. CPX #$20
    * ]! G+ _2 L. j1 ^" T; A( k
  259. BCC Palette_Clear! {0 c1 G( ^) i7 U3 n6 Y! c7 u
  260. LDA #$004 _+ F; b6 z6 V3 m% \
  261. STA APU_STATUS& D) }" [1 n, i' d
  262. ;==============================5 l1 g# i1 M, g
  263. ;初始化背景调色板
    1 }$ `9 [, s1 J+ A
  264. JSR Set_Palette_Color
    : ^- D; s1 U0 v, a' T
  265. JSR Set_NameTable_Attributes
    ( |+ Z2 A, m4 z& [% V7 y

  266. / i( ^/ k6 G+ C; I
  267. ;==============================
    - N5 O8 v4 z( R' `1 E. x+ F
  268. ;RAM初始化( W& K( T6 S) g$ m, i9 m% ?; ~
  269. RAM_Clear_All) j" V# b1 p8 ]2 d& c+ Y! k
  270. LDX #$00( s, q5 J' Q- |1 j* S: _
  271. LDA #$00
    $ m( _, M% R5 \
  272. RAM_Clear_All_Start
    # z1 w+ r6 h2 f8 y2 a2 g- M0 a/ q
  273. STA $00,X% ~. h# X' q5 Y9 @
  274. STA $0100,X8 E# F* c7 Y4 v5 G* _9 K2 _
  275. STA $0200,X& F3 A+ D. A. Y+ `! @$ M
  276. STA $0300,X5 n# N1 ^+ a. m& P+ Y% j
  277. STA $0400,X! z+ X) ^) g: Y4 k$ H* Y
  278. STA $0500,X
    % `) X9 b3 s7 r  {2 g* A! r
  279. STA $0600,X9 h, J# x# f. V) ]- [
  280. STA $0700,X
    : j2 p$ r) o& W
  281. INX
    ! `5 b  b/ Q! }/ F. B; p1 v! t2 E
  282. BNE RAM_Clear_All_Start
    " j7 M& J" S+ [  U

  283. " U) ?3 a7 o' w: U8 N: |
  284. JSR VramInit6 _8 G2 d& q9 [
  285. JSR Init_Palette_Addr$ i8 Z9 n4 ?" N- V( T! W
  286. & A% k8 l% C, J( H% P6 M) {0 e9 }
  287. .IF Music_Reset_Addr
    * Y; E( A" E  K( {9 r" }* Z
  288. JSR Sound_Reset
    3 V8 K8 g7 ]1 h) W% A
  289. .Endif  r# `' b; J3 P6 l

  290. * J9 O4 K% l2 A& Z) M
  291. LDA #Music_Start_Song-$01
    % D9 l- ~* B+ l" j; T
  292. STA Music_Cur
    8 ?+ A2 u( e+ J# j5 p! M& q+ v

  293. 8 p; D  A6 X' n2 o# A* f, s8 F
  294. JSR Show_Music_Text$ H/ X5 X4 f- ]
  295. ; M' I' Q* A; D
  296. .IF SOUND_BAR_SHOW_ENABLE
    5 C) E8 \4 v/ l. u
  297. JSR Sound_Bar_Text_Set' B; E! M* l8 Q: u4 k$ D
  298. .ENDIF
    * S) r' Q1 R0 }, V7 Y5 T
  299. ' f# E1 s- r4 o2 M3 u  c$ y# i& F2 Y4 _
  300. .IF Track_Name_Pos
    5 j% n% e( D' I) P
  301. JSR Show_Track_Info7 T2 [; T/ n$ ?5 Z' g4 p# [
  302. .ENDIF
    2 m! \" j9 z- {& V/ p; e8 \& R

  303. & M0 N6 m# M; J$ [1 p
  304. JSR PPU_Proc( O. q- y- G9 _
  305. 7 G6 q) J8 G: ^
  306. LDA #$0E. ?' B* w# X# H) {+ S
  307. STA Screen_State
    % u/ Y8 h3 `8 e, J
  308. , g1 X, a: F" C" E' M$ D& Z
  309. JSR Sund_Bank_Init) t$ e7 g4 B, [8 i9 M2 f! t
  310. : y9 b, Q0 J4 @9 @: k) `! c
  311. JSR Music_Show6 ]# U. ]% T# y5 C* o- ^5 `2 b
  312. JSR Time_Show
    2 v9 e$ i6 K% r3 Y' ~" Y* Z+ ~% Y/ x
  313. JSR Music_Stata_Show
    , U/ U* T8 \! N# z( m4 J8 X' T2 A
  314. JSR Time_Delay
    : s. h' ^% l8 ^4 W
  315. + W3 `4 C( v6 `0 Z  |4 w/ C- S. I0 P
  316. " i( p0 z5 T. J" {9 R5 y
  317. LDA #$80
    , l" u6 c7 b7 s( X3 Z
  318. STA PPU_CTRL
    3 h1 ~3 ~) @& ]" @! O
  319. 6 w! ?( q" e# v6 M" L% K7 `
  320. LDA #$20( i5 U$ y& }+ G4 O5 W6 n6 @
  321. STA Time_Wait_Cnt
    , q/ S2 h/ y3 L) P$ y

  322. 5 b) G0 R4 x6 C) J7 G3 e1 d
  323. Wait_Time_Over- k" _! A+ K" Q# T( m
  324. LDA Time_Wait_Cnt
    ! k5 Z0 m  v/ r# u% L) [0 {6 `4 K
  325. BNE Wait_Time_Over
    1 W& }3 }0 e: }' n' ]/ ~+ Z

  326. 9 S/ G6 j* }( p% m
  327. LDA #$1F
    " X  g# W# a- J( `
  328. STA APU_STATUS
    " |8 s* _: J0 B- E0 J* [
  329. LDA Music_Cur
    & R: V4 w, `3 x: k! p
  330. JSR Sound_Init
    , u+ ~3 u4 R3 i$ K( m% x1 F

  331. , L& ~( g6 V3 q# F
  332. JMP MainLoop
    $ p' F; ^2 W! M. _2 |+ v7 t
  333. : y( n7 G' H' X3 u, _" w
  334. ;==============================
    ) o# {  s; b9 Q
  335. Time_Delay;延时等待$ j" E, a: B0 d0 h
  336. LDA PPU_STATUS4 w+ G% Z& R# a
  337. BPL Time_Delay2 Y: N: q, v4 A- }( A; s3 L
  338. RTS
    ; }) u# l* e, Z0 r6 v

  339. ) N& T" M2 t7 _, `: t$ i2 Q
  340. ;==============================
    $ Z0 _7 p+ ^2 R( ^$ _4 y! ?
  341. VramInit;初始化图形内存0 {0 A# {( y& z( d4 [8 i8 W
  342. LDA #CHR_DATA_BANK( B& ~; u4 T5 M& g( v; n8 v: t7 P
  343. JSR SwitchBankA000' ?& O9 n* D2 x0 m
  344. LDA #LOW(CHR_DATA_ADDR)
    ! h4 [  U! N: Y6 P3 }! o8 v& b9 d
  345. STA <Data_L* D) \, y6 M8 H+ g& j
  346. LDA #HIGH(CHR_DATA_ADDR)- f5 _: Z$ G; s/ F
  347. STA <Data_H7 N$ ]7 `2 P1 {  m) S) w
  348. LDY #$002 l6 c* [- L4 Y0 I% s
  349. LDX #$20$ I  U+ C! P5 i6 Y- d
  350. LDA #$00+ v" u) ?3 i- Q) T! `: R; Q  @+ r6 I) \
  351. STA PPU_ADDRESS
    1 ^- X) K6 o9 h, T! k+ E& B
  352. STA PPU_ADDRESS
    0 Y2 t! j" j4 D7 c4 [# T1 P$ `
  353. VramInitWrite. o9 o" W% R5 a' @$ j- ?' m4 D2 C' W
  354. LDA [Data_L],Y
    $ \% }" J# Q1 k' B+ b) B
  355. STA PPU_DATA
    & F/ N7 {8 \) b0 V
  356. INY
    1 r% y2 }7 }4 U
  357. BNE VramInitWrite  R4 q, m6 E% u& J: N6 V. e& T9 D
  358. INC Data_H! P( y* V/ d/ R% l; L
  359. DEX
    " N5 z$ \1 ~/ `. g: l+ J! T+ s
  360. BNE VramInitWrite
    2 {8 h! S! h8 O; S) @$ c
  361. RTS( V% B( I5 N- v6 _0 A
  362. - z0 k/ ]6 _! D6 `: W. G
  363. ;==============================& |; o/ K0 m, _9 q( N7 B
  364. RAM_Clear;RAM清除
    . ]- h0 o# P4 R4 @5 o' j
  365. LDX #$00" ~* C- g6 Y. Y' ]. r
  366. LDA #$006 D; D* j* z. Y- h2 R$ A) S3 A& I
  367. RAM_Clear_1
    9 Y& I3 l$ Y7 B! i4 G
  368. STA RAM_Cln_1,X# \+ Q- m  v9 `9 b* C( q
  369. INX( X( U4 U  n0 ?
  370. CPX #RAM_Cln_1_Size
    ( e+ ?; W2 K1 Y
  371. BNE RAM_Clear_1# e* r7 N0 S; b8 x. t
  372. LDX #$009 L" }+ z4 Z! _6 }
  373. RAM_Clear_2+ f$ x7 V, [2 u6 v1 ]4 ^& B
  374. STA RAM_Cln_2,X+ U' W( j" _7 O7 |6 Y
  375. INX# H* [$ _+ }( Z5 T$ G! {; X& Z+ \; B
  376. CPX #RAM_Cln_2_Size, A+ f. }. l4 M
  377. BNE RAM_Clear_2
    8 @2 F; e; p! v- n5 ~5 D. g1 t
  378. LDX #$00
    2 m2 _; W$ w3 ^. Z8 d7 n
  379. RAM_Clear_3
    3 N& h( a5 a6 P9 |, `
  380. STA RAM_Cln_3,X
      ?5 ^8 g2 x5 ~$ _
  381. INX! w2 `' D* R6 n" a; o& m% S5 ?
  382. CPX #RAM_Cln_3_Size
    + B; L) W) F) G  C7 x( f8 p5 x
  383. BNE RAM_Clear_3
    " i( Q. Z( e$ Q3 C
  384. RTS
    # ]) U9 e+ M8 u7 D

  385. 8 m6 a; {  f# j; _
  386. ;==============================, f4 B  S+ ^, T. q: G4 i) g( O, T
  387. ;音乐切换  d0 T* f: B* K# j5 c3 n8 g0 U
  388. Music_Switch
    : Z% v- Y8 k9 \$ m3 G- N: _6 R1 I5 A- }
  389. JSR Key_Proc
    ! I" ~) Q' Z3 Q- b  ?% ^
  390. LDA Key_Once3 w" P6 M7 m) P( x7 W1 U
  391. CMP #$10
    & E$ g, ?$ l6 Q  W' g0 S4 ?
  392. BNE Music_Start_SongStop
    ( [, R* K5 X' S0 z7 @6 Y* j
  393. JSR Music_ReSet$ f6 Y1 H: X; l" Q8 g. k, f% E
  394. - j9 r1 |+ o. [/ s
  395. ;音乐停止
    1 a3 T& B; D: {" p
  396. Music_Start_SongStop
    - |( U8 f$ o0 J" {0 N' f# h4 h
  397. LDA Key_Once
    1 K5 u4 z. h* M% I6 T/ Z: e( M
  398. CMP #$20, `5 J$ t$ d, d* R
  399. BNE Music_arrow1 Z& t1 t# n; a7 ]% Y, G; ^3 y
  400. LDA #$01
    + k* \; _9 y1 C9 a( Y3 [3 t0 k  r
  401. STA Music_State
    : {2 F! M8 l6 N
  402. JSR Music_Bar_ReSet
    ) ]# j7 z) `$ ]1 J! o
  403. JSR Time_ReSet
    3 t# K; F5 e  _, k( Z
  404. JSR RAM_Clear+ E  r2 ]4 v4 A) [) ~* x0 _1 W4 _) n
  405. JSR Sound_Clear
    ! ]/ ~5 b0 T6 Q7 I0 \
  406. JSR Music_Stata_Show
    6 K# r" I& N! u1 G
  407. Music_arrow
    4 a; O" ]5 t: I8 W" a$ n! n
  408. LDA Key_Once8 T, f* x- H$ R% i, Y
  409. AND #$CF6 C4 T% `1 O' k. p% P0 ]# ^- Y
  410. BEQ Music_Switch_End5 x) P5 v$ Q8 s+ _
  411. JSR Music_Number6 I7 P' v9 ]6 i3 c/ p; Y
  412. JSR Music_ReSet
    , I. e% H! A* Z  J% w
  413. JSR Music_Show2 u) [& z( q" h% D$ \9 D& y
  414. Music_Switch_End
    0 G; X% n0 _* a9 l# r/ V
  415. RTS
      K% |& h( m) E. f

  416. 3 D& V5 W. [9 w$ J# t0 I* f1 }
  417. ;==============================
    * t3 x( z& o) p9 [+ |3 y/ a& r
  418. ;音乐曲目切换
    ! a7 x$ z: ^3 W1 @  f# e
  419. Music_Number: Q! F0 D" _" Q) e- z" _2 }
  420. LDA Music_Cur" B( H6 m' n0 q# y9 v. O2 V
  421. STA Music_Last
    - K: n/ [& E# O" P# i0 f
  422. Music_Decrease) d( s' e" l, R
  423. LDA Key_Once
    1 K8 j8 p  o0 d0 B! R
  424. AND #$42
    # u8 r3 R! D0 H7 d. z
  425. BEQ Music_Increase
    . Q8 n+ ]) C& U0 k' ?/ E9 l* V
  426. LDA Music_Cur
    5 X! U' G# `5 `* S+ _1 e, U; C' N
  427. BEQ Music_Increase# |' M' J2 d1 E4 e- e2 x" n
  428. DEC Music_Cur
    + ?+ z; m7 F# {$ n8 _
  429. Music_Increase
    : G' \# X' d5 }9 [6 J3 c9 Y/ V
  430. LDA Key_Once9 L. u7 l! Q/ q" o) x; u9 L
  431. AND #$81! U4 G! c8 V' }
  432. BEQ Music_Decrease_10
    % B  d: ]4 L  n* O
  433. LDA Music_Cur0 ^+ D2 A; R. W# Z7 {
  434. CMP #Music_Song_Total-01
    , E3 {% X/ M7 c$ v$ u& V3 ^  V
  435. BCS Music_Decrease_10' s) k. O& q* C+ [; F6 c
  436. INC Music_Cur
    3 R. [" p, @2 X" ?# J
  437. Music_Decrease_10
    + v' U6 ^$ b% e4 T* u- A! r
  438. LDA Key_Once! P9 i% F: a7 r8 Q& E
  439. CMP #$04
    / M0 j, P) I; h7 s7 I! g2 W6 i
  440. BNE Music_Increase_10; ^. U% |& K' g2 C
  441. LDA Music_Cur& @/ M# i1 Y$ [4 u1 o
  442. CMP #10
    5 \! O1 J* @' W0 s$ n9 h
  443. BCC Music_Start_Song_Min1 z5 u2 Z4 ^* x( l0 X
  444. LDA Music_Cur
    2 e; m* k7 N1 ~1 ~
  445. SEC8 g6 `/ C/ c: w/ b
  446. SBC #10
    1 B" Y, K" V* M* Y1 y, y
  447. STA Music_Cur
    4 G6 P# n: }) _) X3 X
  448. LDA #$00' _: _- P: B) T
  449. BEQ Music_Increase_10
    " N& d5 a7 g  w7 ]% @0 ]* e
  450. Music_Start_Song_Min  ~. A( Y8 \- ]: r! f
  451. LDA #$00. h8 x: c5 Y, B" ^
  452. STA Music_Cur- v% m9 C% B- p- A6 b
  453. Music_Increase_10, Q, t0 [- s$ ~( M# N
  454. LDA Key_Once5 _2 R5 F, o1 w% A( k9 Y$ {1 J' t
  455. CMP #$08
    * c- f, b' C* J  G" p
  456. BNE Music_Number_End0 y1 `6 _0 ~0 v8 W/ A
  457. LDA Music_Cur* [$ \6 G! [' I) [7 ]
  458. CLC
    4 G* P  ~" y5 m4 E
  459. ADC #10
    8 G- a  g6 L- _3 ~8 Q
  460. CMP #Music_Song_Total-01* V2 A0 i) w- }/ C& f8 h
  461. BCS Music_Start_Song_Max0 N% y$ p4 S8 w, b
  462. STA Music_Cur
    - v& u  ]% p9 f+ |  E
  463. LDA #00
    8 ?& m+ n1 U, b7 b  J
  464. BEQ Music_Number_End8 C2 {! U/ G" n/ I3 C" M' L
  465. Music_Start_Song_Max9 S$ h. n2 J% f# V3 o
  466. LDA #Music_Song_Total-01
    0 I6 D" |* P% c
  467. STA Music_Cur+ X! e! `* A: [+ O9 V( N) C
  468. Music_Number_End
    ( L) I5 ]& C( F7 J9 u+ t- e. @' i
  469. RTS
    ! s) @5 T7 |- @5 a" a+ E
  470. 4 S& @, h3 v1 @" x5 R& c
  471. ;==============================
    + l$ Z. c( d% G7 `  \/ m* W
  472. ;音乐重设; q9 r% ?' f5 c' f
  473. Music_ReSet
    " X3 l( Q6 B/ h6 r4 Z4 \4 s
  474. JSR RAM_Clear
    1 z9 g! m0 O( Z. Z5 q% B; b. ~5 m9 a2 g
  475. JSR Sound_Clear# {- q6 ]0 k1 A" w$ d- c( q
  476. LDA #$1F
    ; z  i2 r& N& i5 }3 n/ {' R
  477. STA APU_STATUS/ W7 c2 ^7 X" m& M
  478. LDA Music_Cur9 `0 }! {, x8 m& s9 O; f
  479. JSR Sound_Init5 l/ C8 N- t# l  I
  480. RTS
    + _  c8 M! e- ^( W

  481. , d9 @" {: f  r* P  ?. h
  482. ;==============================
    ! }% M+ L, D. U. w& M
  483. ;音乐端口清除
      R; L/ e5 G$ J* G" o' Y
  484. Sound_Clear
    % l5 K) _* r! \- E9 z
  485. LDA #$000 T2 ?# W; p1 C+ Q
  486. STA APU_STATUS4 h- E8 y1 J$ r
  487. LDX #$005 E/ O9 o( S' t/ f  |' V' ~
  488. Sound_Clear_Start1 S3 g- T' k$ O; f0 K' [0 w9 c
  489. STA $4000,X2 d( q8 D, w/ ]8 ?* v0 \0 l3 A+ F
  490. INX& B) j0 m/ @0 C: i, V9 m: d
  491. CPX #$14
    ! G7 m4 \6 _6 Q7 z2 E: h
  492. BCC Sound_Clear_Start3 T2 D+ x/ t2 U4 L9 H+ F
  493. RTS
    ( F! G4 y2 F  N* S6 U. h: u
  494. . H, O2 L9 \4 K( d
  495. ;==============================$ @/ x/ t( D6 n% p! h
  496. ;按键处理
    # U7 b: V* d' c; X
  497. Key_Proc5 H! _; W2 F. d* @2 b
  498. JSR Key_Scan1 h0 H1 ^7 S3 Q- z
  499. LDA Key_Keep/ b- ^4 z2 G, t6 s# h
  500. STA Key_Temp& y/ C. I* N8 M# [) j
  501. JSR Key_Scan1 Z' H; c% O, _# v) k% `& g
  502. LDA Key_Keep) _8 S4 m9 M- S- e
  503. CMP Key_Temp* i: l9 l9 t1 V8 w  }% I: Z
  504. BEQ Key_Get_Once
    / j) [3 H+ f, f9 p  ]- p; t
  505. LDA Key_Kemp7 d! E# U3 Q7 L  p! O
  506. STA Key_Keep
    9 a, F; }  t3 z! E+ a
  507. Key_Get_Once
    9 r  r+ `8 V. m% \, X! X' t" a
  508. TAY0 ~9 I. k* y) e1 Q0 V* t
  509. EOR Key_Kemp4 O9 c& _. c- x
  510. AND Key_Keep
    4 c4 N: J/ s# ~
  511. STA Key_Once
    , N2 Q4 k* c5 r% S. v* V" Z0 }
  512. STY Key_Kemp- i& i4 v( O* u8 i- x  V$ V
  513. RTS
    - b" o- V, P% J
  514. ;------------------------------
    / z/ }3 x. a1 F4 T* U; L& F6 i: A
  515. ;按键扫描
    # m  ~. \" _" t: t4 J; U) j
  516. Key_Scan: A8 ^: _2 x+ d( T
  517. LDX #$01$ O& n' Y, G. `  n5 a6 j0 w/ F$ B
  518. STX JOY1_FRAME
    : H4 z$ j. A8 a, M2 s! t
  519. DEX
    " S2 S: i/ L/ F. K
  520. STX JOY1_FRAME
    ! r3 V. R3 N# n0 a3 u
  521. LDX #$08& Y& o0 L1 X) i" }  F
  522. Key_Value
    6 G0 @2 K, x- P4 n: H
  523. LDA JOY1_FRAME
    0 G/ U6 B% a: G/ i3 H  D- |
  524. STA Key_Getv
    0 I  H/ M, Q2 `
  525. LSR A
    : D& c6 x" f. X3 L
  526. ORA Key_Getv
    % Y% H; ^6 b% V! h: M0 |( B
  527. LSR A
    " a( n6 G9 B2 O9 z
  528. ROL Key_Keep# ?5 b3 A/ q  t$ G9 `5 j
  529. DEX
    ' ?& v; @. L. o& W$ b
  530. BNE Key_Value1 v+ @) E$ l0 p
  531. RTS
    + t3 q2 H7 F' k2 H  e3 l' z. F
  532. 7 y( [9 d5 O4 m$ p/ R* T' v
  533. ;==============================/ i# A1 H/ S7 {. u, f$ M. o" V8 }4 i
  534. .IF SOUND_BAR_SHOW_ENABLE
    8 \! E. A" |+ t9 g- s0 }/ x
  535. ;音乐条显示. c6 K) `1 h4 y, M
  536. Music_Vision" z% L! U* z# }3 m: M  @: ^) ^
  537. JSR Music_Animation+ z' n" S. @* ~4 T1 ?  `  J0 M$ E2 l. W
  538. JSR PPU_End1 K: p$ c6 e2 t
  539. RTS" O6 Y0 C8 B5 B: l
  540. ;------------------------------
    $ t& W" I% Z. N$ Z# Z3 N
  541. ;音乐条显示处理2 }- y' P- {8 \0 q
  542. Music_Animation
    1 M1 p- O1 H+ x' B" z% C$ s$ ?
  543. LDX PPU_Cur
    0 v* ?! W3 x: m6 w# Q
  544. LDA #Mode_Line4 V, m9 @4 C% i/ N0 `
  545. STA PPU_Addr,X6 @5 c# r4 X4 f. M9 u
  546. INX2 B3 T& x  o$ b2 v
  547. LDA #HIGH(Sound_Bar_Pos)& S; J+ t* T: s7 [& v
  548. STA PPU_Addr,X7 s% l1 _, ^, p. @* ~7 A
  549. INX
    / S: k+ M5 o0 b4 ~, y) R, H
  550. LDA #LOW(Sound_Bar_Pos)
    9 H5 i; O. [/ B
  551. STA PPU_Addr,X$ g# _& w! q! i4 |) M8 b" G
  552. INX1 R% k( S) ^4 \& n' f/ a1 C
  553. LDA Sound_Bar5 h* C* l% v- f; W# a
  554. JSR Volume_Convert
    6 e. b$ [* s4 }% M8 |& Y
  555. JSR PPU_Return
    * |6 G5 a7 a6 ?& K& T$ Q+ k
  556. LDA Sound_Bar+$4
    2 k* v$ V  O$ h
  557. JSR Volume_Convert
    % o/ _0 |4 A% }9 k
  558. JSR PPU_Return
    6 ^/ g# J3 m; A7 P
  559. LDA Sound_Bar+$8
    : h9 G  n( h# G0 e1 u" M
  560. JSR Volume_Convert_Ex! d: J* Q1 a7 L+ t+ B, p
  561. JSR PPU_Return; {4 i$ G1 G4 H5 h5 ?! S
  562. LDA Sound_Bar+$C( U# J' J: z) m8 R0 K
  563. JSR Volume_Convert+ b6 h$ v4 ^# ^, V! T3 M+ ?& o
  564. JSR PPU_Return
    8 y) {: M( a) E# P5 _: k" V
  565. LDY #$10# ~& @+ L: ~6 N8 Q& D! M7 ]
  566. LDA APU_STATUS
    5 J8 ?" _' V3 o+ ~$ d
  567. AND #$10
    6 Y- Y0 L2 \8 }2 z
  568. BNE Volume_Count
    - s- z. W9 a* f( j1 N. g
  569. LDY #$00
    , @* T, f7 ^9 y( v1 }4 x. @* f4 x
  570. BEQ Volume_Count
    ) s" s: \) Q' g5 j. ]. }
  571. ;------------------------------
    ! _( e$ d0 I# n5 w
  572. ;音乐条处理- V+ M) S, J- H$ ]
  573. Volume_Convert_Ex+ G& S3 E. L* g
  574. AND #$1F
    5 ^/ v8 {) j& I3 n3 {" @+ x
  575. TAY9 r) P& N3 x* W+ D
  576. BNE Volume_Count
    2 W" }6 z  u% A$ ^. D* B
  577. Volume_Convert! p8 o2 s0 Q7 x+ `3 w1 k( G9 |
  578. AND #$0F
    ! r" h2 w6 F# _# E0 e/ v" ]4 N% \
  579. TAY0 n8 B% ?$ H. j8 c. G0 B' a8 @2 y: S
  580. Volume_Count
    + T9 g: B' T: u. e8 p' V& O
  581. LDA #$08$ q* L+ _: e1 x: A! h3 o5 p3 Q: e
  582. STA Sound_Bar_Cnt
    8 P: y5 T8 q) ?3 W# K
  583. Volume_FILL) c" r  C5 O$ l  v) ]( s
  584. DEY. S+ g& }' `& W  g& A' ~4 L
  585. BEQ Volume_Half' X5 i8 }& e$ X( W: f# Z) r
  586. BMI Volume_Empty
    + W2 n) }* u) d$ b! D; A
  587. DEY4 n1 O+ w6 G0 i, p( L. M
  588. Volume_Full  H& x! e  p4 O, x# b0 A
  589. LDA #$16
    - j) H5 @& a0 e5 A0 R
  590. BNE Volume_PPU
    / l- e) X0 F7 }1 z# s
  591. Volume_Half2 `9 s* W. ~9 F/ T# _* e
  592. LDA #$15+ h, l- O5 t" @+ M! u: y
  593. BNE Volume_PPU
    7 A, D1 P2 l2 u" {6 C
  594. Volume_Empty
    ' k. ?6 T6 u& m7 n) |* P2 C! |4 W
  595. LDA #$14
    ) o) V3 x* {  [+ l) o0 y% `; d' M0 Y
  596. Volume_PPU# b* ~9 Z& Z3 G  [4 a6 b
  597. STA PPU_Addr,X* U1 A; G) G# {( N# p6 B) m, X; M
  598. INX3 L5 o- q8 \/ c/ K
  599. DEC Sound_Bar_Cnt* B) f/ F' U& G. X  L
  600. BNE Volume_FILL4 S0 T9 l5 }5 E
  601. RTS/ _( |8 F( g! c, X
  602. ( {% c% N7 S4 H' X6 A1 c
  603. .ENDIF
    & f/ n' K8 D. T" a5 ?4 K( H

  604. % b% k# [$ c- T# J7 \
  605. ;==============================
    3 j5 p* x" b. _, w( ?0 ~
  606. PPU_Addr_Set;PPU行开始
    7 K% P5 p/ q/ f
  607. LDX PPU_Cur
    $ \# _, t8 g- Z& ^( q
  608. LDA #Mode_Line
    # j  B  o7 c# Z) X5 n
  609. STA PPU_Addr,X
      x' W# u( d5 I! R
  610. INX0 y" A5 t; F( W- W  ?4 I
  611. RTS
    ; _* u& N. j: _  S7 \% f8 V

  612. : D+ I+ U) A7 }8 J- y
  613. PPU_Return;PPU转行
    9 W# ?- n, X7 z. n: h
  614. LDA #Flag_Over
    / J0 e  {8 m( D- K6 S* q0 L' _
  615. STA PPU_Addr,X
    8 I) W6 O  ~6 p" k. {2 X
  616. INX
    , I- t, [/ c/ M% r8 D. t( N) b
  617. LDA #Mode_Return, P( Q# O& f. r% L( \( G4 H
  618. STA PPU_Addr,X) w3 ?* }' m2 ?, \4 C
  619. INX
    % x, G7 z  D- X- y4 r
  620. RTS
    $ }" }2 A3 d6 g
  621. & L# W) C6 _* t; P7 U
  622. ;------------------------------
    / d& w. ^, p5 \( j; u  N
  623. PPU_End;PPU结束
    9 }4 U% J" ?( O$ c9 X8 }3 K
  624. LDA #Flag_Over& d# h6 e3 M( W$ z, v
  625. STA PPU_Addr,X
    7 B# O4 }& f) l# j  N
  626. INX
    ! ~3 q  B  b  ^7 y7 K
  627. STX PPU_Cur
    3 N& ~% o. e+ h8 p+ [' C
  628. RTS
    ( y% ]$ R) O6 h( _: U
  629. ;==============================  Y% w, P: Y) k9 G: o: s
  630. Mode_Line     = $FD    ;新起行模式
    ( K" G( `" x' S( I$ |! |
  631. Mode_Return   = $FE    ;转下行模式
      H1 p& ]4 n$ q0 ?
  632. Mode_Clear    = $FC    ;行清除
    ! n5 Z1 R( w8 T' k( T* j- h
  633. Mode_CntLine  = $FB    ;行计数写入
    0 O* [/ E6 E( Y- g8 L- r2 c. S
  634. Flag_Over     = $FF    ;行结束标志
    8 |) W& ^7 o4 }  L& S% {) ~  F

  635. # _+ k% e# F9 M$ I
  636. ;------------------------------
    9 m/ S* v9 T# ^1 O. q( S5 C
  637. ;PPU处理' S+ o. R. {  M) s& W' S
  638. PPU_Proc+ M3 }1 ~$ X; z: l4 V) d
  639. LDX PPU_Cur# h0 s3 S4 j9 f4 P. |8 J3 A4 h
  640. LDA #$00
    4 o+ ~2 u# }! h0 u' C/ C# `
  641. STA PPU_Cur
    $ w" q4 f7 k$ Z- k* ~
  642. STA PPU_Addr,X
    ' N- \8 b' P% l( K& ~3 q6 U4 L
  643. LDA PPU_Addr
    0 C) ]9 _5 g" |. E  A
  644. BNE PPU_Proc_Beg
    . }1 C: Y6 e. l; T- `0 t& i
  645. PPU_Proc_Ret
    + f. |( F4 g. g* ?( p/ |9 x
  646. RTS
    ! C- Y, C  X* u" x+ _3 A6 ]
  647. ;------------------------------
    3 U6 |3 c* f' E8 R% l! p. o
  648. PPU_Proc_Beg  ;处理开始
    . k% [0 Y/ Y1 U- r
  649. LDX #$00
    5 }2 r2 h7 e$ Y+ }. o+ b1 J
  650. STX PPU_MASK3 O: h# L9 d6 \! s
  651. ;------------------------------3 s# Q9 e+ B# q5 f+ M
  652. PPU_Mode_Select  ;模式选择$ X" _6 [& Y6 D1 i4 k
  653. LDA PPU_Addr,X7 N" h5 B1 |0 n+ b1 e
  654. CMP #Mode_Line
    3 @6 }7 a! q2 D
  655. BEQ PPU_Mode_Newline" Q  u" v8 ^* @$ M/ J& D3 \5 I
  656. CMP #Mode_Return4 R+ G5 k% G% G# _8 O
  657. BEQ PPU_Mode_Return7 {* h9 v0 J" p: @- ?
  658. CMP #Mode_Clear
    " s1 C' E3 e! p6 n7 i4 ^2 C8 H
  659. BEQ PPU_Proc_Clear! I) S+ X7 U4 W3 [# j
  660. CMP #Mode_CntLine6 [' P* ]& {! E' h3 `8 P
  661. BEQ PPU_Proc_Cnt_Line1 ]% A* n  x/ W
  662. RTS- K; H& j! u  `# Z( Z
  663. ;------------------------------9 _% d, R, ?4 l
  664. PPU_Mode_Return  ;转下行模式
    , Y) e# W- M; d
  665. LDA PPU_Addr_L
    + p" F  f( J# V# B3 l4 \
  666. CLC/ t% b' R' Q  ~+ Y4 O$ d
  667. ADC #$20
    * m1 u& A3 z# G- Y$ ~, h
  668. STA PPU_Addr_L
    ; U. g0 v. @: E8 o6 G2 M
  669. BCC PPU_Return_End( l* ?4 b  @6 ^! g- {( ]
  670. INC PPU_Addr_H$ ~+ X# B7 `! {7 j, w" O2 u! r
  671. PPU_Return_End
    : V0 a$ b$ a  ~: i! t" S
  672. JMP PPU_Set_Increaser+ p" b3 a" m+ s  ~1 d
  673. ;------------------------------
    ( o9 R. s  m- u( ~" h0 P
  674. PPU_Mode_Newline  ;新起行模式  j$ g; ?" |( D" {& q$ `! Q/ G( V
  675. INX
    " r+ q, R% l  K4 D% ?. \& `' c: Y
  676. LDA PPU_Addr,X! f& f* O4 X7 a2 N, X! \
  677. STA PPU_Addr_H; ?; L, W* d) E; V4 ~
  678. INX
    8 S* Y" I( H5 z3 Q2 L* U6 f1 j
  679. LDA PPU_Addr,X. B0 }8 Q0 ~5 ]' u# y0 H
  680. STA PPU_Addr_L& B' h! U0 k. F! g( Y) `( ^
  681. ;------------------------------! a% P2 M8 V9 W4 P& j% H& \
  682. PPU_Set_Increaser   ;设置写入地址
    3 X7 G. ^+ y& I. o) }/ A
  683. LDA PPU_Addr_H
    4 ^1 C; {6 `0 H) z1 K
  684. STA PPU_ADDRESS
    4 n1 C! p7 n- @9 O
  685. LDA PPU_Addr_L
    + R; H7 P2 G0 u4 @+ }5 E& R$ a
  686. STA PPU_ADDRESS
      Z& R0 r1 t, n) S8 w, T
  687. ;------------------------------/ M# ^9 n2 v2 P) D5 G$ U* ~
  688. PPU_Write   ;写入数据% a: y1 ?, X0 I& U! x
  689. INX
    & K) P- R" D/ B6 _- R8 |$ j
  690. LDA PPU_Addr,X
    $ t2 \- w: R% B6 I8 E0 n  t
  691. CMP #Flag_Over3 E5 }: z- u) D
  692. BEQ PPU_Proc_End! l: p1 \7 N4 ~; v
  693. STA PPU_DATA
    ; C' s' p, |# p- l  k; H/ U
  694. JMP PPU_Write5 G, y6 g+ U: A0 v0 ^
  695. ;------------------------------! p7 U7 @7 G& s, s% c$ y
  696. PPU_Proc_End  ;单行写入结束
    2 w0 d5 C/ N9 P$ I
  697. INX
    * _( X8 k! x7 e; n
  698. LDA PPU_Addr,X
    / U3 t) P( Q: |, R$ f, G
  699. BNE PPU_Mode_Select- T4 |+ x) o- J' W% z( Y9 Z
  700. STA PPU_Addr, \! w" R7 H( f: X% \) p
  701. JSR Update_Palette_Color
    ( j4 Y# w# }: ^
  702. LDA #$007 H  ?, _# j% `
  703. STA PPU_ADDRESS
    8 D3 a. O" w: |$ _4 u5 j: r( w) E& T
  704. STA PPU_ADDRESS% S: v, y& i' n4 g8 q
  705. STA Show_Track_Name, X" v" \1 N# L% h7 I! w% V" I9 t% l7 T
  706. LDA #Scroll_X5 H# Z2 S0 R& {* n
  707. STA PPU_SCROLL
    . n( E& i% F2 S! r: D1 ~
  708. LDA #Scroll_Y3 D9 q. q6 \4 D5 A5 Z
  709. STA PPU_SCROLL
    0 k# N0 H$ ]6 A+ }5 F
  710. LDA Screen_State
    * n! J# R, G' G; ?  `  d; W
  711. STA PPU_MASK% L. s' v/ V% C0 u9 [! u
  712. RTS% N2 d5 f5 A2 ]# D6 P7 p

  713. % K' m5 I7 _2 _* b, d# Y; U8 s# O
  714. PPU_Proc_Clear% n* y7 B7 k4 {0 \! w, i* F# i
  715. INX8 o5 {7 r6 ~7 Q, L* P. R
  716. LDA PPU_Addr,X: J1 B% |$ x' a) L* h
  717. STA PPU_ADDRESS2 u  y6 ]* X- `; @  Z
  718. INX
    0 S; I; M3 D; r6 o
  719. LDA PPU_Addr,X
    6 W; |0 \# @, G; |4 y/ [4 q4 |
  720. STA PPU_ADDRESS2 \- }) F3 j$ l2 Q
  721. INX9 w! U# L9 j5 P+ E2 K9 N
  722. LDY PPU_Addr,X3 p4 m" N9 ?0 C  F+ k1 G
  723. LDA #$00
    . w, ~- c( o' f- `4 F
  724. PPU_Proc_Clear_Write
    ' \. g2 B  a5 d0 `6 P4 q5 P7 u7 H
  725. STA PPU_DATA8 X9 M8 i% j. `; f# r+ z5 X
  726. DEY, W7 `# K# `- U! m. R2 u( G0 I/ a, ]
  727. BNE PPU_Proc_Clear_Write; y! Y0 |  X" U- z5 G
  728. JMP PPU_Proc_End/ I( j& C1 N6 s& P

  729. . i/ ^' u4 c, O" }
  730. PPU_Proc_Cnt_Line( q6 }6 K$ M! a! o2 ~  E
  731. INX0 j9 ]& m  S  |5 Q* w6 C  f3 M
  732. LDA PPU_Addr,X
    " C8 y, F- \" t( b" Q, R: V
  733. STA PPU_ADDRESS
    ' s$ w! F* l. F" D
  734. INX/ t) T8 Z9 k* ?* ^# d
  735. LDA PPU_Addr,X7 q! Q) X2 V( H9 g; ^
  736. STA PPU_ADDRESS8 y$ H- y: [( Z2 i
  737. INX: T# G1 S; M, s" b- |
  738. LDY PPU_Addr,X
    & B! h4 C8 J( B& \. T; X: ?; w
  739. PPU_Proc_Cnt_Line_Write
    & B4 p: c$ ~1 X6 N
  740. INX2 c% U5 Q2 n; F+ L. P) L% v
  741. LDA PPU_Addr,X2 H* g4 d9 k) j; V" k
  742. STA PPU_DATA2 O0 @4 T0 T& U  z
  743. DEY9 }) |1 `, O' ~8 j' E6 }0 W
  744. BNE PPU_Proc_Cnt_Line_Write9 k. A/ |9 V- `2 x5 J3 }/ W
  745. JMP PPU_Proc_End& c& ]. D, ?! |

  746. - F1 j3 A( i& U" n
  747. ;==============================# x9 x" d# U: \( A+ d/ q
  748. HEX_To_Dec;十六进制转十进制* {  y6 i5 O; N
  749. STA HEX_Data
    8 N& s! B6 T0 \/ S" D4 S
  750. PHA: A, N3 g' F! x3 W  }. z
  751. TXA  \3 H) W, i  s: n- l& D1 g* O
  752. PHA
    9 b' p: b5 U& ]" A- I/ V
  753. LDX #$00
    + L$ w9 [' ~# ]9 E% ]9 O+ T$ n0 f
  754. LDA #$00
    7 N# w' m& W" }) |) h( e/ @4 f
  755. HEX_Cln
    ' {! y. Y6 }6 E" }) x
  756. STA DEC_H,X; N. s" I! j/ @; \
  757. INX
    1 M! z" K$ E" ^4 z* q/ ^& j
  758. CPX #$03
    , D1 U2 ~; ]. E$ w2 A7 f$ |, [1 ^
  759. BCC HEX_Cln9 i2 Z2 K, m6 j# s0 Y
  760. LDA HEX_Data
    + K0 [! t0 ~9 }# ~  P
  761. ;------------------------------1 ]9 j. \0 L2 Z4 X9 Q
  762. HEX_100
    & o: I! A. H, @( G/ d
  763. CMP #100
    0 n2 U3 f. d6 {$ T
  764. BCC HEX_10
    0 l+ {* z  ?+ C, A: F8 ~
  765. SEC/ q, E; _5 u: a8 F1 Z
  766. SBC #100% }+ E8 a& w, [1 G% M
  767. INC DEC_H1 }4 s# U0 D" |
  768. BNE HEX_100
    , M3 h9 D2 k; W9 z: O# b, O5 E
  769. ;------------------------------
    2 Q1 p/ V* M0 z& f' Z, ?: [
  770. HEX_10' v  h6 m  M+ ]) [. Y7 J1 D
  771. CMP #10
    6 d+ v; {' e8 ^  ^0 g
  772. BCC HEX_17 K; J2 ?0 L. z0 E! _6 }
  773. SEC* ?, N6 J6 \  E; w5 U
  774. SBC #10/ Z9 H! }2 `' C, I5 F% m5 N7 |
  775. INC DEC_T
    4 }6 d1 ~3 ]0 |( E; y
  776. BNE HEX_10) q  K4 Z: `1 Q7 p2 i
  777. ;------------------------------  C6 o% ~7 r1 `  |
  778. HEX_1
    $ T5 y& a0 Z( T: {# b
  779. STA DEC_L
    : v/ v' }+ S- g9 V8 a. j
  780. PLA/ x( Z3 h0 E5 e; T- q
  781. TAX* g. g5 S. B3 {  t/ c6 l) y+ [8 a- e
  782. PLA/ d" ^4 {; H  z6 l. }
  783. RTS& R+ D' y* [) x
  784. ; m% J5 @6 x# O1 C6 d- Y- t' h" o
  785. ;==============================0 c, ~! o' g) ~2 q
  786. ;音乐曲目显示$ C. T0 p6 L* h5 N% H! ]
  787. Music_Show
    ; X5 _# Z  Z* g/ ]
  788. LDA Music_Cur( O3 {6 O  i  R
  789. CLC
    0 k& c( N4 t# |, A2 c1 y
  790. ADC #$01
    6 V0 _* E3 o7 W; z0 X. `
  791. JSR HEX_To_Dec
    ; @" S1 u7 O$ e8 \. H: W* F, S
  792. LDX PPU_Cur
    / C9 K+ {# `% B* j) ]% I0 q/ X9 ]" z
  793. LDA #$FD& ]: o" \( v/ ?! G
  794. STA PPU_Addr,X. `. Y8 g2 W4 U1 ~
  795. INX* D% u$ G. x+ [  w* |
  796. LDA #HIGH(Play_Index_Pos)6 I  `1 u* U4 v1 U* e
  797. STA PPU_Addr,X4 |( J& r; x0 M- ?
  798. INX
    1 E3 p: k; ]& H1 f/ S% P) K; i
  799. LDA #LOW(Play_Index_Pos)- V( j2 M+ @5 q- e8 B0 d
  800. STA PPU_Addr,X+ ?- ~; a+ v  p
  801. INX
    - _! ]5 ?/ W" Z( [/ b: S
  802. ; d- _3 R3 Q; J" E# o5 T' ^* b0 q
  803. .IF Music_Song_Total > 99
    0 z4 }6 X5 I7 N9 J( l' m. k9 L
  804. LDA DEC_H
    / k1 @# M  A1 P* f) N9 e
  805. ORA #$30
    * S6 D+ F5 k+ N8 u1 D
  806. STA PPU_Addr,X' Q% H7 Z1 z& J8 _+ V- @# h; u# @! c
  807. INX0 q9 S% h/ O* w8 U% N! c
  808. .ENDIF
    5 V$ S0 {4 _6 t1 p, b0 V4 B/ C. b

  809. + K3 n3 r3 b+ P" L  O  i# U1 ~4 I
  810. .IF Music_Song_Total > 9
    # N1 e, R; G1 L: E) P
  811. LDA DEC_T& a) g  s' Q; N% P. ?2 d1 f
  812. ORA #$30
    5 t# X$ t$ z" h% V% J8 h
  813. STA PPU_Addr,X) d; T2 Q0 k8 z' B$ c. t& E
  814. INX% B5 K- i6 ?9 T$ k
  815. .ENDIF% D- m0 h3 ^4 O0 A
  816. ! Y# _& q' L% h4 Z  I/ P
  817. LDA DEC_L
    ) z: r- \( B* ?; s# s
  818. ORA #$304 W5 L3 R  O8 P
  819. STA PPU_Addr,X
    ) C9 ]# p) b9 I: T! g! h
  820. INX2 J5 s5 f, p& z! H; K# j" ?) K
  821. 1 J5 K$ m& E, r: V
  822. LDA #'/'4 R* i0 ~6 }8 z) f) O+ }
  823. STA PPU_Addr,X, H7 w6 b' x0 Q- R, D& J( V8 ?! r
  824. INX
    & Y" Y: I6 j$ e; a# |' B" C
  825. Music_Show_Total; w) ]; A: A8 a( _2 p( o* Y1 T% S8 q
  826. LDA #Music_Song_Total; f$ ~8 c  |+ ?8 `/ t9 S. `' e
  827. JSR HEX_To_Dec
    $ p& @- c, X$ ]8 ?
  828. ( o3 g# E" s/ _& I1 u4 w0 D4 C
  829. .IF Music_Song_Total > 99
    : Q. i+ r( V7 u: j! }. B
  830. LDA DEC_H$ W0 c! t2 e& P/ l5 y
  831. ORA #$30
    2 J5 o" o& N9 u
  832. STA PPU_Addr,X
    4 h. ^& p0 @. Q, `5 V5 N. j' _( X( ~
  833. INX
    ) k' _, J, m1 j$ c( m6 ~+ I% c  m
  834. .ENDIF, K# N  \+ H6 b  T) n( w/ B6 z

  835. ! R9 N: o) u6 W
  836. .IF Music_Song_Total > 9
    * T/ I7 m9 w$ f+ N2 K& O
  837. LDA DEC_T
    5 _" P% G* R) J( t$ ?" ?; `
  838. ORA #$30
    3 V8 S& P3 f5 o& W* r+ c' K
  839. STA PPU_Addr,X
    1 ?3 X2 r  G$ r. o$ b0 w2 @: r
  840. INX
    - t# U# }0 A4 m0 A+ Q- X5 }
  841. .ENDIF
    % F* i! C. S( p8 [) g

  842. # z6 B: D2 z+ ^5 t+ Z8 q# B
  843. LDA DEC_L! F5 N$ z3 r3 c& n8 P, y
  844. ORA #$30
    * f8 T$ L' C$ O& p( q
  845. STA PPU_Addr,X
    + s" i* M7 A' _# P5 R$ B+ n$ T
  846. INX- h! h- r0 ?3 x% }9 N/ {

  847. & r% {( J6 l3 q$ G( H
  848. JSR PPU_End
    - X7 m* b5 W1 B& ?+ c, _* H
  849. Music_Show_End4 r0 `5 [/ x( O1 _
  850. RTS  w, ~' E4 Y3 o2 ^% n
  851. ) n/ k4 g0 p  {* t+ c% G2 l8 }( j2 ?
  852. ;==============================
    ! Z6 j. b# K& \
  853. Time_Show;播放时间显示6 e/ H- Y% F1 a' V- ^& s$ k# z0 A
  854. JSR PPU_Addr_Set
    % r& h7 G' K/ u+ T# A$ d; `
  855. LDA #HIGH(Play_Time_Pos)
    $ g5 ?, w8 [( i4 h
  856. STA PPU_Addr,X2 V- Z% \1 q4 {' z
  857. INX5 T6 R) g1 w- d# A) m+ u# I9 b
  858. LDA #LOW(Play_Time_Pos)
    ( l! m4 ]8 a' y4 G* z" e8 R. c+ O
  859. STA PPU_Addr,X
    - ?- k; _, E% J' P) w' k
  860. INX
    , Y3 w3 v% R4 n: S
  861. Time_Show_H+ V4 o$ r# D( c0 H' z0 s' P
  862. LDA Time_H
    / A: D9 w- u8 ]3 c3 B) u
  863. JSR HEX_To_Dec
    0 @' b+ b. V7 V9 x" [# F
  864. JSR Time_Digit7 {, O" ?$ M* r- T7 M
  865. LDA #':'  j# e. C# ^8 T* J
  866. STA PPU_Addr,X
    ( i5 s2 N3 f4 a9 b0 ?! S
  867. INX
    0 W, E( P! j0 q' @6 q  ^5 G
  868. Time_Show_M) R/ o$ E$ A# o7 b# f
  869. LDA Time_M
    8 x. V  l8 n$ A6 G0 }0 k
  870. JSR HEX_To_Dec( Q( t- R, c$ g. W" W- I
  871. JSR Time_Digit) r, d8 `/ [% w( @, ^/ ^, o
  872. LDA #':'( Z' U3 r, z# b9 G0 p9 @9 P- q
  873. STA PPU_Addr,X- N: P3 M. l5 d) r
  874. INX
    1 m2 {/ Z9 c. [$ }% b
  875. Time_Show_S% F( Q  ^" c; w5 b3 Z6 B4 |
  876. LDA Time_S
      k. ]! r7 x4 l4 g: @; s% i7 I4 q
  877. JSR HEX_To_Dec. P% s% P7 ?" I! I" _, Z) t- X
  878. JSR Time_Digit. y8 ^+ j+ I# }% Z
  879. JSR PPU_End# H+ \2 f+ J6 e) C; _4 B
  880. Time_Show_End
    " j0 ?4 ?7 K: r  I2 F2 f
  881. RTS
    & C  N9 m, y  x$ g2 E' X4 n3 M

  882. . v# @) n  ?+ m1 J8 X: g; W
  883. Time_Digit1 e5 n' a0 j" {7 @: H3 T" }
  884. LDA DEC_T6 |% F1 j: W, {" _
  885. ORA #$30
    7 ^# h1 o1 f5 Y' N! q
  886. STA PPU_Addr,X( o0 y" {+ }9 G  {
  887. INX5 x- Z1 E9 K9 _5 G9 Z
  888. LDA DEC_L; O; _3 F% o( \3 a3 X
  889. ORA #$30
      e* t6 m, W8 A+ ]
  890. STA PPU_Addr,X  e- A2 v6 V, g& x; n  j) K4 @3 q
  891. INX
    1 \2 @3 H- }: U) r
  892. RTS5 M% n) w, E1 l$ g

  893. # e6 c6 Q, Z& M9 g
  894. ;==============================
    " [/ Y& E6 H/ L
  895. Time_Count;计时
      e- a3 `, u* ]# J
  896. LDA Music_State5 ^2 W/ g$ D$ A- Q" c  U0 ^9 g
  897. ORA Time_Wait_Cnt
    5 R, o) q( [7 Q' Z% ~. Y
  898. BNE Time_Count_End4 M, \8 a& Y* H, c
  899. INC Time_Cnt
    0 n& N, y# l, _  S  s
  900. LDA Time_Cnt& `0 _: l$ g) j2 G; \* q) O
  901. CMP #60
    3 x+ L7 Q% s9 W6 z6 w# R+ A
  902. BCC Time_Count_End
    4 w9 \+ O2 r8 {+ G+ I
  903. LDA #00% h6 \+ a  X! p# v& ]4 I
  904. STA Time_Cnt4 `0 @4 T# `/ g3 |, R* R8 o
  905. INC Time_S+ ?7 }4 w, f- M* @
  906. % R2 P8 t% z8 E
  907. Time_S_Cnt7 s# J- A  D4 T$ r& J; B
  908. LDA Time_S
    & e! b$ N9 }3 [
  909. CMP #60
    - B% \2 L/ H: C& T
  910. BCC Time_Count_End8 P- u8 r2 o% Y# W) [" K8 R
  911. LDA #00
    $ y7 w) v  b# N- ^6 C( R: P
  912. STA Time_S! {7 E" Y: k7 z: G" H
  913. INC Time_M0 D( W0 {6 `. Y  S$ L2 r

  914. " F' d) H- J. q1 G
  915. Time_M_Cnt* T9 `% \/ Z4 x# K
  916. LDA Time_M6 Y0 u" w  p: @; |8 d
  917. CMP #60
    ( l$ s% n( M. Q5 y# _( `8 V
  918. BCC Time_Count_End
    8 ^6 a3 s4 H! n) d: j
  919. LDA #00
    % K; F# W, T0 E; ?; }+ ?
  920. STA Time_M. }, }/ i2 I# R* f3 K: o" q6 V" O
  921. INC Time_H
    3 [6 N: n/ K# ^! I) F
  922. - S) b6 |% _. \5 s4 f$ j
  923. Time_H_Cnt
    " ~8 @7 g. s" e
  924. LDA Time_H5 p3 ^: G% {4 t" ^6 Z; |6 _9 O
  925. CMP #24" `- P! W0 Y" g- w
  926. BCC Time_Count_End) o4 [0 ^  r; U- T
  927. LDA #00
    1 G, U  Z( Z4 m4 u* J
  928. STA Time_H/ }! u# A  Z3 i8 u5 m! _

  929. 6 `  P! W4 b/ ~/ U4 C
  930. Time_Count_End
    . q5 F" c: R8 z) w+ I1 Z& U
  931. RTS5 s* r3 |9 U0 I0 Y
  932. 3 ^# Q0 A! d" D7 Z
  933. ;==============================
    9 S+ H) j: \6 E
  934. Time_ReSet;播放时间重置# Q+ ?4 ~4 [& H# f
  935. LDA #$00$ T/ g2 z! A% c
  936. STA Time_S
    5 E: {+ w8 Y0 ^* D5 t
  937. STA Time_M 0 d  `  ^$ {% V: P/ L0 i& o
  938. STA Time_H
    # V0 X$ z# F' T' h) R8 ?; a
  939. STA Time_Cnt! d# l6 a& a, ?7 D- w
  940. RTS$ z3 }: U) x* d: ]3 P5 `; G
  941. " {1 d; j4 A2 x& F% I
  942. ;==============================- U. N3 u9 B9 t
  943. Music_Bar_ReSet;音乐条重置0 R/ f2 H- Y+ N0 R) J2 s
  944. LDA #$00
    0 R3 E+ S" H' f' t( v% H) Y0 |
  945. LDX #$00
    0 ~3 f$ {- V9 T0 p2 b
  946. Music_Bar_ReSet_Set& [1 P- d. `: N2 ~+ T! L
  947. STA Sound_Bar,X* J, \7 j: {' z/ a( b/ j% F9 n9 X
  948. INX
    / i- R- z, b/ t# U! V
  949. CPX #$106 d! d4 A* M, l1 b& V$ ?
  950. BCC Music_Bar_ReSet_Set# f2 G! R7 K2 m* \7 @
  951. RTS
    $ C6 ]- @4 U0 Y0 x  o' ~

  952.   I: n! R# Q! a' G6 s
  953. ;==============================8 j/ @- P, h& V+ A* c$ q* I, c
  954. PPU_Data;PPU数据写入
    ; p2 r) h. D& ]% h% k# h* [
  955. STY Data_L
    : i6 f% N. z9 S$ F$ j. G5 }
  956. STX Data_H6 |2 Z# B% F5 O6 N) X8 U+ u% F
  957. LDY #$FF
    3 ]4 X3 Q, x7 m! `* r
  958. LDX PPU_Cur& b! ^! h, P% M& h% F! k
  959. DEX# C% i2 J$ |9 k1 k# ?
  960. PPU_Data_Beg
    1 M: U3 s7 N7 f: V. G9 X5 S( x% L
  961. INX7 I8 |- _8 ]. S6 B2 Q8 A- S
  962. INY2 a! r$ {9 ^9 A4 a
  963. LDA [Data_L],Y
    9 w3 T7 r* W& D/ a! ]: x
  964. STA PPU_Addr,X/ c. n9 V7 `) L* H5 h" w
  965. BNE PPU_Data_Beg& ]: M+ G, m0 f
  966. STX PPU_Cur
    - N' j2 }3 n' s$ F; o
  967. PPU_Data_End
      B3 L9 m7 Z# \  M% z: j
  968. RTS: c$ U  u9 o( P' s

  969. & Y+ t: F# @9 O* n# L/ i
  970. ;==============================
      Z3 r$ G+ I- N" Y! @
  971. Music_Stata_Show;播放状态显示
    $ \& b2 l2 S4 {: _
  972. LDA Music_State) N2 j4 k: L* ~: E5 J  ]0 M
  973. BEQ Music_Stata_Show_Play
    . ~3 l6 ~1 n& i
  974. Music_Stata_Show_Stop
    % t$ t# k! u; w4 Y- r# u
  975. LDY #LOW(Music_State_Stop)
    3 o9 Y' a1 `! n6 O
  976. LDX #HIGH(Music_State_Stop)
    . a0 l& g+ K3 x8 k" J4 f9 O2 d- d
  977. JSR PPU_Data
    : n; y2 V7 J6 b5 g) k
  978. RTS9 Y% k$ w+ `9 l/ ~& L  G
  979. Music_Stata_Show_Play
    % a( }% X1 M) U  K3 u# p
  980. LDY #LOW(Music_State_Play)
    9 f1 T. u" H1 t5 @6 \. u' G
  981. LDX #HIGH(Music_State_Play)
    ( d5 V5 \# H* E4 h; [. C
  982. JSR PPU_Data
    ( n5 Y" k* X$ N3 T
  983. RTS
    + U: W2 h/ x' H
  984. 1 O! Y$ B" K8 k) Q* i& V
  985. .IF SOUND_BAR_SHOW_ENABLE3 d  e3 f, h* c( }% u" x- l& e8 `! H
  986. ;==============================# \& A1 k7 d8 v& k
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    / p2 X5 l; U/ }+ z, \3 h5 C
  988. LDY #LOW(Sound_Bar_Text_Data)! m7 |  e+ S- A! {9 w' \+ X
  989. LDX #HIGH(Sound_Bar_Text_Data)' W+ ~& ?' B, ^( Z. {
  990. JSR PPU_Data
    4 y& x: x& L7 Y$ l' Q
  991. RTS, e* c1 g( j. O' A  o
  992. 3 z  D" N* F: I9 i! f. u
  993. .ENDIF2 d4 C  S2 [3 ^; C1 |+ b# G
  994. % q& c. E& {, |
  995. ;==============================1 w- N! m  Z7 o0 s
  996. Set_NameTable_Attributes;设置命名表属性/ i% G8 A( ?% r! E; A1 o& N6 X) b& m
  997. LDA PPU_STATUS
    / T0 g. s* j. D" `$ i: p
  998. LDA #$23
    % D' z5 z- o" S; w/ a5 ^
  999. STA PPU_ADDRESS
    5 ~; O. @+ q% M( \! o" Q0 {" J) A' P; ?# P
  1000. LDA #$C0
    1 `) i3 q2 o% |. V: e
  1001. STA PPU_ADDRESS
    / B# C2 o/ e* i' H* H
  1002. LDX #$004 y7 ^# C. B  h# ?; j* e
  1003. Set_NameTable_Attributes_Write
    6 h3 i! p7 o$ |% R+ X
  1004. LDA Palette_Attributes,X
    2 T. f& E0 x' r+ z* ^- F5 U
  1005. STA PPU_DATA
    . g- G( b5 s& {0 I; L
  1006. INX' w; R  {) Z/ j# v/ P
  1007. CPX #$40
    * G% o( d- z) r( c* i
  1008. BCC Set_NameTable_Attributes_Write
    - X2 A/ U1 U( o9 z' }. x
  1009. RTS7 G- N4 K9 z5 A& Q! o1 q$ c& G
  1010.   {% s2 H1 c: c
  1011. ;==============================/ n7 @; ~$ J3 a& T
  1012. Set_Palette_Color;设置调色板数据) n: H8 T9 N% P! M0 V
  1013. LDA PPU_STATUS4 o2 \7 R5 d6 b; i3 C
  1014. LDA #$3F0 G8 [/ k2 f$ `) Q3 ?5 h- \0 ^
  1015. STA PPU_ADDRESS9 B! r  D7 W4 Y
  1016. LDA #$00! F3 x* ~0 M8 B! S4 D6 U; E
  1017. STA PPU_ADDRESS
    8 s6 O9 p! V, B2 ?
  1018. LDX #$00# Q' F1 x! i" q: K1 g' W
  1019. Set_Palette_Color_Write
    - K1 A3 [( o1 P
  1020. LDA Palette_Data,X) h8 U& A4 d0 X0 s
  1021. STA PPU_DATA
    2 E/ D, p8 V8 o  \+ J: p; k
  1022. INX
    0 S4 m0 j8 C( m/ k
  1023. CPX #$20
      m! v. X, J# H$ k  P
  1024. BCC Set_Palette_Color_Write4 G6 x$ E5 c! I# }( q+ z
  1025. RTS1 I5 G% e' b5 t2 l$ J3 h
  1026. # u. ~7 W) @) r: p5 v5 o$ c! F
  1027. ;==============================8 G  `6 Z& m5 D
  1028. Init_Palette_Addr;初始化调色板数据8 T1 ~; {- U  s  X
  1029. LDX #$00
    ! O8 d. f) m7 `. Z
  1030. Init_Palette_Addr_Write
    / h' d7 q7 _7 d4 n
  1031. LDA Palette_Data,X
    9 r$ _4 l8 c. J4 e% ~
  1032. STA Palette_Addr,X6 x+ \9 k% H3 b: u! F% \
  1033. INX: {6 P* T. W( S3 w6 C
  1034. CPX #$20
    * Q- ~" I5 f* ?$ q  I, F
  1035. BCC Init_Palette_Addr_Write
    $ ^" c# h. C4 c& E
  1036. RTS, Q: r+ y- y8 z& u2 L
  1037. & r" ~' a1 ~/ F2 u. U5 u' T9 @0 ?
  1038. ;==============================+ h) q4 g6 Q1 H
  1039. Update_Palette_Color;更新调色板颜色  Z' d3 H7 h- [. ~6 e
  1040. LDA Show_Track_Name
    ) L3 i3 N# e- ~0 c# Y
  1041. BNE Update_Palette_Color_End
    ( D* W- {* l. u6 |% _/ c
  1042. LDA Palette_Update_Flag
    ! g5 @& m2 M& T4 |' f% a8 y  A
  1043. BEQ Update_Palette_Color_End
    ! o- b- b8 r) y4 s+ L, c
  1044. LDA #$3F& K, X9 C9 X0 L8 U; F. O2 Y  v  q3 l
  1045. STA PPU_ADDRESS
    & {7 }  m3 h4 z- ~; E
  1046. LDA #$00
    7 g5 A# J2 p. p/ [! _/ y
  1047. STA PPU_ADDRESS
    9 ?, [8 F: x- J& H
  1048. LDX #$00( E& u8 T# P5 n2 |4 X# O
  1049. Update_Palette_Color_Write
    2 \! J( w5 Y$ U$ Y" g( R7 D  y
  1050. LDA Palette_Addr,X
    6 D- ?0 b, Q2 r1 u+ Z( x* i4 E. V( k
  1051. STA PPU_DATA
    4 \2 d0 k/ w8 ^: N- B
  1052. INX) O* A- }0 L4 n1 ]# P+ E' r
  1053. CPX #$20
    ' D! @" B6 h0 ?4 |
  1054. BCC Update_Palette_Color_Write
    ; ~4 R2 @7 u7 u
  1055. LDA #$00
    0 i3 @" }! D# V1 |
  1056. STA Palette_Update_Flag
    8 ?. C- i/ E( m; f' z6 O
  1057. Update_Palette_Color_End0 Q2 s) K! m9 e5 C
  1058. RTS, D- M+ E) h# b1 |% K
  1059. ; E9 E; Z1 ^8 x" {- H
  1060. ;==============================
    5 v- p$ j8 Z! I+ ~
  1061. Update_Palette_Data;更新调色板数据! c4 ~1 {- T0 J( s6 R# |) o# ^
  1062. LDA Show_Track_Name+ a% [1 x' x3 [: l
  1063. BNE Update_Palette_Data_End) X: p# S. N0 O
  1064. LDA Music_State' y' I# o2 D7 r' C- g
  1065. BNE Update_Palette_Data_End+ b2 C% O  I2 v1 ~* ]! ~) N5 ]
  1066. Update_Palette_Data_Check
      P% f! `, K& V7 @5 ?8 o4 p
  1067. LDA Palette_Wait_Cnt6 E: {: k( o& \$ g& l9 V
  1068. BPL Update_Palette_Data_Check_Over
    & E! V( c, |1 o3 N5 F2 X, T3 z' \3 Z
  1069. LDA #Palette_Update_Interval3 }* y8 E9 m8 T- r+ ]0 `/ s
  1070. STA Palette_Wait_Cnt
    ! c3 y+ B0 k3 n9 M( c4 u
  1071. Update_Palette_Data_Check_Over2 w+ t' d2 ~* J1 v0 N% x3 B
  1072. DEC Palette_Wait_Cnt
    2 {& t! r7 x% A; I8 q$ D+ h
  1073. BNE Update_Palette_Data_End
    9 H0 l# I+ r* \
  1074. INC Palette_Update_Flag
    2 Q" Q" W+ |3 ]+ R# c
  1075. LDA #Palette_Update_Interval
    ( u' l+ j4 {* i, Q
  1076. STA Palette_Wait_Cnt5 `( ~4 d5 j: [& k! P  d
  1077. LDA Palette_Update_Addr
    ! h* r9 [+ L) A
  1078. CMP #Palette_Update_Max
    , e: D0 S7 Q2 k" T) M
  1079. BNE Update_Palette_Data_Set: C: ]* ?; W) c+ A
  1080. LDA #Palette_Update_Min - 1
    % i, t% A* ?( C, p
  1081. STA Palette_Update_Addr
    " F# B/ a; e1 |' k$ v3 ?
  1082. Update_Palette_Data_Set# r0 f- f# R, S
  1083. INC Palette_Update_Addr5 k: K, {9 X3 [: T9 u8 @' S5 k8 m
  1084. Update_Palette_Data_End9 Q# s$ K$ |8 Y0 _' r
  1085. RTS
    ( k6 b5 \0 |! ~; l
  1086. - _  Z: h1 f; i8 ^( c
  1087. ;==============================3 y5 M* B) |1 y! ~( T
  1088. Show_Music_Text;显示静态文本3 t: Z9 A8 b7 Q3 B, }4 D1 ?  }
  1089. LDX #$00
    % r4 P' n6 g9 P  g3 Z" X
  1090. Show_Music_Text_Set
    . l* `! D: O& S% O
  1091. LDA Static_Text_Data,X
    ! e; z. d: T% I0 ~
  1092. STA Data_L4 e- ^7 F0 a8 O: B$ r/ P/ \
  1093. INX8 W0 k$ Y8 d9 f+ l) t
  1094. LDA Static_Text_Data,X
    - p7 e+ T' d! E/ E
  1095. STA Data_H$ w: s" s; P/ x4 D: Q0 D; f+ u. ~! U
  1096. INX
    ! A9 O& A8 h; \. \( l: o* O
  1097. LDY #$00" o' J3 X) B# m, \  N; h
  1098. LDA [Data_L],Y
    ( h+ G) [* ^( ~# U: O4 {# Z
  1099. STA Data_Cnt
    9 M) i  v2 s1 U
  1100. DEX/ A8 U0 a+ {0 p! k
  1101. DEX# A" Q; V7 m$ c6 ]) Q) F  {: i- P
  1102. LDA Static_Text_Pos,X/ j$ ?' M- W8 E: o9 I
  1103. STA PPU_ADDRESS
    : d( c/ Z2 o- K
  1104. INX
    ' F5 E! L. h% S/ d, J
  1105. LDA #$206 E$ p0 C  Y1 Z' g# m$ r
  1106. SEC7 X# c# g- ?7 Y+ r# H, \( J
  1107. SBC Data_Cnt  N# l* d- B% x' N- F  b4 V  R& y) h
  1108. LSR A
    7 b1 y* p1 S8 V% P' F
  1109. STA Data_Buf$ [, Q) |+ r3 m8 F4 @/ c
  1110. LDA Static_Text_Pos,X
    7 Y3 e6 r" ~3 K& U" [& y/ l7 b8 @
  1111. AND #$E0+ A- W( u1 b( f8 y$ G5 o
  1112. CLC% m, g/ v+ j6 b" H
  1113. ADC Data_Buf
    " c, h& q% P2 P3 r* H
  1114. STA PPU_ADDRESS* ^( L" m- W* d7 ?' f1 G, X1 {6 C! S
  1115. INX1 Z9 ^8 Y0 @9 b6 J" S; }
  1116. Show_Music_Text_Set_Write
    1 \) n$ a% W1 j4 B) Z' l- R
  1117. INY
    " L& L- z$ s% c4 V
  1118. LDA [Data_L],Y" h7 G# P& n# t4 U/ a/ U
  1119. STA PPU_DATA3 L0 [9 a' T% u1 i3 Z5 V/ b, h
  1120. DEC Data_Cnt
    * q' _: K: i  k1 W5 e7 q. _, i1 J
  1121. BNE Show_Music_Text_Set_Write8 L& s# r' Z7 m. ~+ Q
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    : V/ C6 x. W1 [. Y
  1123. BCC Show_Music_Text_Set, T: Z* ~, \1 M5 U/ ]+ A$ T. |( s
  1124. RTS
    ) A( V! v, O0 ], a
  1125. , Y: r2 r# x( g& j
  1126. ;==============================% a( D9 L9 R+ w' f9 q8 |, U. V
  1127. .IF Track_Name_Pos;显示曲目信息
    $ c/ W4 E' ?5 r5 z
  1128. Show_Track_Info$ ^1 }0 a. k2 S' A/ j- ^
  1129. INC Show_Track_Name( @: U1 ~. I' e: U( f5 \
  1130. Show_Track_Info_Clear. b( g" k7 q' `& T: k; d& h
  1131. LDX PPU_Cur  ]% q4 W2 \+ j- E2 Z
  1132. LDA #Mode_Clear
    / b( ^& Y1 B) L; t8 C
  1133. STA PPU_Addr,X5 Z( k: a8 F5 }! L! v" p
  1134. INX
    % h# f4 f9 ~8 S+ ]; I" u
  1135. 6 j6 W2 ^% M( V
  1136. LDA Music_Last
    / z4 k+ Y" I2 L
  1137. JSR Show_Get_Track_Name_Center_Pos
      h, A) Z1 A% C' U: @
  1138. Show_Track_Info_Write_Cur1 u/ \7 v9 H. S+ e: _/ Q
  1139. LDA #Mode_CntLine" z- y( i6 X: X7 q
  1140. STA PPU_Addr,X& Q  s# F4 o! ]* l: a, C
  1141. INX: v: E$ V/ i- M1 u+ n! N4 m

  1142. $ j  t) M1 j; k) @! G- d
  1143. LDA Music_Cur: n9 V) n" X5 q) u. k% {9 k+ r" S
  1144. JSR Show_Get_Track_Name_Center_Pos
    % q3 f! M1 k7 |( M/ x; J
  1145. ( b* X  v8 d8 @6 R3 G) |
  1146. Show_Track_Info_Write_Cur_Data7 n1 v5 O1 J4 k* j% A
  1147. INY0 ~: V  G& A6 ?! l4 b
  1148. LDA [Data_L],Y, z7 F; y! G3 k9 _  h
  1149. STA PPU_Addr,X( _2 g5 g( W; b: v
  1150. INX5 p% `9 g5 O) n: ^" ^4 ]6 r
  1151. DEC Data_Cnt
    : R" d2 l! F1 z1 w
  1152. BNE Show_Track_Info_Write_Cur_Data/ Y3 h, `7 T) c" Z
  1153. Show_Track_Info_End
    6 i9 L' l% R7 A) V- j/ n5 A7 K2 f
  1154. STX PPU_Cur
    2 _( c9 O; n9 C' _& M# P
  1155. RTS
    * R9 I3 n2 H+ z2 |

  1156. ' U, Y- r5 K& c% N" c  F
  1157. ;==============================
    2 `8 I: j( O# j4 b
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    $ j3 a- _% [; D+ d  P
  1159. ASL A
    ) \; p: Y/ |* t# d4 S% L+ |
  1160. TAY  Z! T/ s) f* \; m8 A
  1161. LDA Track_Name_Addr,Y
    0 D. p8 W6 p1 D# {5 f2 V& d+ Y
  1162. STA Data_L
    ' N# Q$ M, }" _- @9 @8 s8 Y
  1163. INY4 k* o# W& i2 C8 W( }1 D
  1164. LDA Track_Name_Addr,Y
    ! d9 k# B* G! L: Z) O3 |
  1165. STA Data_H
    1 \( R( Y. [& t9 x& W9 g
  1166. LDY #$00
    7 _2 N0 v# h  [; S
  1167. LDA [Data_L],Y* ~! }& u/ p9 O, d4 K( K5 c. H
  1168. STA Data_Cnt
    9 a/ I! F8 b; v' q/ t$ F
  1169. LDA #$20# t1 m& H7 X5 \4 D# }& }
  1170. SEC
    4 Y) |* c5 x# ^* _
  1171. SBC Data_Cnt  Y8 {% \, z9 m. L1 X+ l5 t
  1172. LSR A
    3 j0 Z3 S1 b" q& q) c9 f: ]; l
  1173. STA Data_Buf
    5 \( x( P- E+ T: P* d4 k$ @' E
  1174. LDA #HIGH(Track_Name_Pos)
    8 a" [' F/ _, {: B+ d) F
  1175. STA PPU_Addr,X
    ; ?7 W, H2 `5 M1 f$ G! n  E
  1176. INX
    4 }' y# S' g" q! @# b9 h# N
  1177. LDA #LOW(Track_Name_Pos); l/ D2 W- F* ?! q
  1178. AND #$E07 g/ Q9 {! U6 Q& ~/ M, u
  1179. CLC: ~" t0 j4 r! I2 i$ K* K8 i
  1180. ADC Data_Buf( l8 X* }4 d% M% E4 H0 b
  1181. STA PPU_Addr,X
    4 G! _# y* i8 K! d! H  Z% b
  1182. INX
    $ M2 K1 l9 w: E! v8 F! b
  1183. LDA Data_Cnt
    ( G: P# A# \4 \1 x/ O# P
  1184. STA PPU_Addr,X
    % c& j+ R/ ~5 I$ F  R
  1185. INX7 a; T$ K7 p  u
  1186. Show_Get_Pos_Center_End
    : N7 t* m' y4 e) ]
  1187. RTS
      k* ~1 t' E; O3 _- U; y
  1188. .ENDIF
    ! }3 }0 Y+ }0 c$ b+ f5 R
  1189. 4 f' Y% h3 u5 ]& ~9 j" R1 @3 M
  1190. ;------------------------------
    ; ?9 @+ ]4 p3 A, h
  1191. ;命名表数据9 I0 m4 b4 F' j2 q' o( ~; w/ Y1 a
  1192. Palette_Attributes' y( J1 c& H; x  T$ R. r
  1193. .IF SOUND_BAR_SHOW_ENABLE
    7 `( f; V9 M- T* C6 k/ `
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    0 K: K- S/ ?& T! I) Z0 f2 I
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    6 _# [$ |# s0 o6 l
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    ( [. |# ~. X7 G+ g' V2 q
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ) b2 S0 |; g. e, c% J/ U
  1198. .ELSE
      Y  _, C6 s, Q& E  o# Y* c
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00  w! k+ B4 V) b$ x7 N1 c
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF2 N; R' R* j8 J
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    : Y/ g' p$ J) e( M+ Z
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ! K# d- g- ?/ e/ F1 s, G( @' X
  1203. .ENDIF/ z/ E: w  \% k/ Q" K9 t
  1204. / h' k8 ~0 {  |0 c: W4 I
  1205. ;------------------------------- @* l9 f3 S' V- n7 p
  1206. ;调色板数据0 H, z7 q* `& T% V$ u8 Q: C% c
  1207. Palette_Data- ?- x( ^% k0 j" p+ u$ I! G& B# q& [
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    9 S% p5 p; S8 i1 T1 P" h
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F( h7 y% y' H  ^. R  J! L
  1210. / {: t+ ~) o% M. F7 ~. j, {9 h5 E: H
  1211. ;------------------------------6 F1 Z! \2 ^( ^7 r7 R
  1212. Static_Text_Data  A0 S5 m! l$ H
  1213. .WORD Static_Text_Title_Data
    $ @7 \+ M6 v% P
  1214. .WORD Static_Text_Author_Data
    2 m8 G7 H) k) `$ W9 d! s$ b( b+ R
  1215. .WORD Static_Text_Date_Data) g( m% `7 X/ a% A* ?
  1216. Static_Text_Data_End
    / O8 L3 |$ I2 j/ A

  1217. 9 |. [+ |1 @6 ^; O) Y! W
  1218. ;------------------------------
    5 P7 ^& H# I* X1 z+ C' z' Q
  1219. Static_Text_Pos
    8 w' N* z! O( k4 S* q6 b
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)! ^; K( \: S# f# Z* L* P+ W
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    & P$ w1 r9 Y: U. I+ e
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    ( ~7 |& J4 i1 T( B
  1223. Static_Text_Pos_End
    . Y' V3 z' e% v, N( c

  1224. 9 \; E' s$ Q# A* c# k5 T! G; _7 A
  1225. ;------------------------------
    $ ], i$ F  S9 F' t
  1226. Music_State_Stop
    / N8 [3 m4 E: }; R! [
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ( I4 t' `8 H  {5 f. q
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00, ?; C: I+ k8 L9 Y" T7 h6 B
  1229. ELSE
    " |) U+ l5 a% |4 n2 W
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    ) }4 E" j) ?) F- s- ^: @& X
  1231. .ENDIF
    / [8 T; Y; H3 j; A5 ?
  1232. Music_State_Play
    4 ]; T2 D4 s! b
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00) \4 k+ \; m0 N9 D  ?
  1234. 6 ~. d3 N( U/ R8 T) f4 A
  1235. ;------------------------------- X/ ?$ p# J: P" f( A
  1236. Sound_Bar_Text_Data;声音类型文本
    * y2 B3 h: X$ s6 `3 ~2 C. G
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    ( |6 Y, o* M! R+ t8 o" H: Z  |8 s
  1238. .DB "SQ1-",$FF
    ; z8 h1 J0 T# C
  1239. .DB $FE,"SQ2-",$FF4 t5 h/ z0 M7 S- B
  1240. .DB $FE,"TRI-",$FF
    5 J9 n+ K% G7 J2 l" ]2 Q; K( s
  1241. .DB $FE,"NOI-",$FF1 C3 X! f5 n& h8 F0 \; `' [
  1242. .DB $FE,"DMC-",$FF,$00
    ! g2 X- I, k) [

  1243. 1 J/ X3 W( o1 Q  s
  1244. .IF Track_Name_Pos
    + G0 k. C, X- G( }! B; v: q3 `% u
  1245. ;------------------------------
    ( f- M; `+ d7 p/ f' U
  1246. Track_Name_Addr;曲目名地址索引# K: V1 x. F# p# v& L; U: @2 X
  1247. .WORD Trackr_012 x$ m: L+ j5 G
  1248. .WORD Trackr_02
    " j& L3 h! G% R0 m) U
  1249. .WORD Trackr_03
    ! I3 p; X2 l" P2 @
  1250. .WORD Trackr_04! W% y) a- g0 O3 R- b
  1251. .WORD Trackr_05& n  M8 z% B% C
  1252. .WORD Trackr_06
      z5 \  [  Y% y! \! v/ c5 W, S5 q
  1253. .WORD Trackr_07/ q6 K4 A0 z1 F+ C6 y( z8 b2 d$ B
  1254. .WORD Trackr_08
    ' T, k8 W9 f4 [" j
  1255. .WORD Trackr_09
    / L5 H6 m, Q" i# S( I3 {! a
  1256. .WORD Trackr_10( }: ~8 O$ P$ T; S
  1257. .WORD Trackr_11/ j( C5 K9 J2 U# x: l/ }& y$ \( V1 g' N
  1258. .WORD Trackr_12
    1 ?: f( e3 i8 v% k' c# A8 r0 o
  1259. .WORD Trackr_13! Z& W% F" W' r
  1260. .WORD Trackr_14- y0 \5 d% Y# h
  1261. .WORD Trackr_15
    * ]; E" n# R: \* ~( y: O2 ~/ Y0 E. V+ y
  1262. .WORD Trackr_16" _- w6 R) H: H& p. [
  1263. .WORD Trackr_17
    . L% _; P2 \! d0 j% ^* R# H* w5 `
  1264. .WORD Trackr_18
    2 E- X% i" W. @7 `9 S
  1265. .WORD Trackr_19. Q" K2 {, N! w$ a; @
  1266. .WORD Trackr_20) b; P% _, ^/ D0 G7 e% g
  1267. .WORD Trackr_21& b) R+ h! ]1 y: o- j3 L
  1268. .WORD Trackr_22
    - C$ |4 u8 X, G  L2 X9 e, `7 ]
  1269. .WORD Trackr_23
    & m# r6 }/ q% u$ s$ i
  1270. .WORD Trackr_24) y9 p5 ~. \4 z0 K
  1271. .WORD Trackr_25! A: t0 q& \6 `7 }" s  {
  1272. .WORD Trackr_264 p# e* S# S# o/ m" W8 b% s) A
  1273. .WORD Trackr_27
    ! u/ O3 r3 D+ x' `: D
  1274. .WORD Trackr_28
    ! ?5 ~  Y( n/ r8 R0 e
  1275. .WORD Trackr_29( K6 ^  }) S! B$ E! C1 {5 y0 ?7 ]7 K
  1276. .WORD Trackr_30" M( H9 l, I+ `2 K' B, C* ~
  1277. .WORD Trackr_31
    * k. l& c8 x" v8 U  B' Y& S: I
  1278. .WORD Trackr_32
    & e2 U. m1 Z+ z. R+ J* ?6 w" S( V$ p
  1279. .WORD Trackr_333 u" U: U5 a" z8 S1 x  d9 d6 o
  1280. .WORD Trackr_34+ l4 g# C9 |- w+ u
  1281. .WORD Trackr_35
    - x, y* V  }: v9 u1 j
  1282. .WORD Trackr_36) z/ C$ v2 O+ B! r
  1283. .WORD Trackr_374 M+ E" G  ?- W3 z
  1284. .WORD Trackr_38) F2 N7 T0 R: C+ f* f6 `
  1285. .WORD Trackr_396 l5 V  Q' l1 H9 K7 }7 ^/ F! W- d

  1286. 7 n& k3 `, X6 c7 j- `
  1287. ;------------------------------
    5 Z; J" [6 J3 L  p
  1288. Trackr_Name_Data
    ( G& ?* M" B, |$ ?) m8 t; B) J, L
  1289. Trackr_01 .DB $05,"BGM 1"7 h9 t/ K+ R2 S; _- C% c8 [
  1290. Trackr_02 .DB $05,"BGM 2"
    9 Q! o( S4 X( t/ |/ Y
  1291. Trackr_03 .DB $05,"BGM 3"8 P8 F7 B0 j" X
  1292. Trackr_04 .DB $05,"BGM 4"' P5 \) \9 c  k) l9 H+ A+ w
  1293. Trackr_05 .DB $05,"BGM 5"
    ! p+ E% h* ~- Y( O# Z
  1294. Trackr_06 .DB $05,"BGM 6"
    # ]/ T/ C. G5 Y$ f! @
  1295. Trackr_07 .DB $05,"BGM 7"
    0 R8 V, _: ]" c0 L, a# @
  1296. Trackr_08 .DB $05,"GREAT"
    : m$ x# U8 B/ K0 T# t: X6 l  a
  1297. Trackr_09 .DB $08,"BOSS BOM"
    , W3 O9 d: E. o& Q
  1298. Trackr_10 .DB $08,"BOSS2BGM", Z+ C0 {- G5 m  I' e4 _
  1299. Trackr_11 .DB $07,"P CLEAR"0 c& K3 F3 G/ p( p4 Y1 M! d
  1300. Trackr_12 .DB $07,"A CLEAR"
    6 n8 }1 _% M6 L0 J& S' j
  1301. Trackr_13 .DB $04,"OVER"  d% r5 S# R, E; o! }+ Q
  1302. Trackr_14 .DB $06,"ENDING"  |0 r/ x9 o+ }9 `2 u/ ^
  1303. Trackr_15 .DB $04,"SUTA"
    7 A/ `9 ]( t( a
  1304. Trackr_16 .DB $07,"THUNDER"
    3 w( c+ J6 [0 a% H* E
  1305. Trackr_17 .DB $04,"SHOT"
    3 f/ B' P- j( ]7 F# {* b
  1306. Trackr_18 .DB $05,"LASER"
    . p8 d3 N: c# Y2 q7 U4 s6 Y
  1307. Trackr_19 .DB $06,"SPREAD"3 ?% W& H% I/ z; u7 v+ q
  1308. Trackr_20 .DB $04,"FIRE"
    ( n, d" V& n0 E' h- U3 t8 }
  1309. Trackr_21 .DB $06,"B SHOT"$ r8 M7 g1 l# j' g
  1310. Trackr_22 .DB $08,"T DAMEGE"/ \2 Z. ^4 @6 Y* @
  1311. Trackr_23 .DB $07,"HARETSU"
    ; c  t9 c. Y$ \* d$ b3 W5 x) J5 r9 Q% P
  1312. Trackr_24 .DB $05,"T OUT"- J4 M3 h5 A3 H6 A5 G/ ^% u) p
  1313. Trackr_25 .DB $05,"Z OUT"' f8 c( E6 {2 T6 D
  1314. Trackr_26 .DB $05,"A OUT"( G7 `# z4 h& f6 }; Q; S
  1315. Trackr_27 .DB $04,"ROLL"# t& u0 t9 O. W0 t! s
  1316. Trackr_28 .DB $06,"APPEAR"
    ' v; j: {) F6 V  r" D- v3 T% ^
  1317. Trackr_29 .DB $05,"POWER"+ J1 w, U1 [* j4 M2 u6 F
  1318. Trackr_30 .DB $07,"BOKK BK"5 z% d7 B9 p2 M2 n* m
  1319. Trackr_31 .DB $08,"BAKUHA 1"
      d" ^; C" L) e) g6 W
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    ; x7 f" P; R  G8 U
  1321. Trackr_33 .DB $05,"ARUKU"+ c6 U0 W! J' G! [
  1322. Trackr_34 .DB $06,"JIWARE"+ @* O# D0 D' F9 a
  1323. Trackr_35 .DB $05,"SILEN"+ c+ G* H& N) ]) `  V; I  P
  1324. Trackr_36 .DB $05,"P 1UP"
    - h3 ~0 E; m, e' b" C, k0 B
  1325. Trackr_37 .DB $05,"P OUT", T, Z* q. V7 t
  1326. Trackr_38 .DB $05,"B OUT"
    1 L! C1 L- o; }3 l$ }. Z  X' X
  1327. Trackr_39 .DB $05,"PAUSE"
    , R/ q6 q" ?# W+ ?- e% V

  1328. * Z6 q( n  h. z4 I; h: R
  1329. .ENDIF
    1 v5 l+ S% j) s% r. W: v

  1330. 0 C0 E4 L; ~; W7 y' J9 ?7 a
  1331. ;------------------------------
    # i. q0 S# H2 a0 x- k; r; A) ~
  1332. Static_Text_Title_Data;静态文本数据# E0 n0 }- s5 r$ a8 u
  1333. .DB 120 g- O4 x! H; D$ p9 l  I
  1334. .DB "SUPER CONTRA"
    3 {8 ]4 H1 n, \% u
  1335. Static_Text_Author_Data& {  _' C1 k6 A6 T
  1336. .DB 23
    - B: m" k7 f9 G- i# f
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    " s- z- c$ E$ e  ^) W5 D1 Y
  1338. Static_Text_Date_Data; l2 B9 h/ p; n0 Q
  1339. .DB 105 ~+ D6 o% c9 {% I- ^+ F4 B) N
  1340. .DB "2023.07.11"" @$ \- T: u, o8 I0 k6 V/ h

  1341. - L; k  R4 `1 o
  1342. .BANK RESET_BANK & BANK_DATA_MASK% j. k4 r/ ~; \& e
  1343. .ORG RESET_ADDR
      q. C+ i/ \! T

  1344. # K0 a! b/ X) b7 x" R' }( I4 D6 x5 h

  1345. ( @- Y0 `0 j" j7 i8 Z
  1346. ;==================================================+ {7 u' ~, [6 \$ y
  1347. ;切到主程序bank
    & v  c& x. [7 g/ B
  1348. SwitchMainBank* K& k2 h9 H: ]
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK% P8 N- Y! v, H! _
  1350. JSR SwitchBank80004 p6 Z- R0 h. p# K# m
  1351. RTS
    1 ^" y! L' @( o& V- ?7 I" p
  1352. ' P  |) ?( k* @8 @3 ~9 N
  1353. ;==================================================. r5 u" R6 J8 Y& r: `5 V8 o6 S5 r! e
  1354. SwitchBank8000;切换bank到8000-9FFF
    ! S& C- y& C& t' E. `, i
  1355. PHA
    # J5 n: M7 ^7 m4 Q
  1356. LDA #$06% ]0 a9 m) L" q0 }! v# }# X8 s$ [
  1357. STA MMC3_BANK_CTRL" b  g% k( _+ m1 b
  1358. PLA
    # W' ]1 e$ n( V0 s# Q  z( `/ L! A. L
  1359. STA MMC3_BANK_DATA
    ; b  [2 F$ z5 a' B
  1360. RTS. \# }: f( g$ [+ C

  1361. * ]; B' k9 o) w/ |1 Q, r  c& P8 ?
  1362. ;==================================================- Z  O8 L' ?( F# J3 a* j
  1363. SwitchBankA000;切换bank到A000-BFFF
    * H( N# i* A8 S) x7 A% J+ O
  1364. PHA
    5 x; G6 e, q5 l
  1365. LDA #$07
    2 W! F) y0 f* |2 Q; o. F* e. d
  1366. STA MMC3_BANK_CTRL, J( A. r/ Z2 k) }8 p
  1367. PLA0 _/ N" A  q) u" V* e
  1368. STA MMC3_BANK_DATA
    / Q  V! ~8 ~9 a  n
  1369. RTS
    7 x7 q6 g, U$ c* `; D$ C9 x! |& O

  1370. ) V) u' J" R+ b! Y) I& T0 \* Y5 F
  1371. ;==================================================
    . [" F& E& M9 P! |) }
  1372. Sund_Bank_Init;音乐bamk初始化
    8 C1 Z( G2 B( I/ F0 Y$ W: O! L$ h+ K
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ' ^: |# c( k  O% K9 n
  1374. STA Music_Bank_8000. q/ T8 o  K: [6 [% h
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ! a" T0 F& m6 t
  1376. STA Music_Bank_A000
    0 ]' r- t, s1 D" i
  1377. RTS
    1 l4 r. H; V' y5 a3 o  q

  1378. ( O. p" U9 Y* a$ T# H
  1379. ;==================================================
    0 X  Q+ ~2 Q) S8 P6 R; R
  1380. Sund_Bank_Set;切换音乐bank1 U; q3 Z4 A) j
  1381. LDA Music_Bank_8000
    7 P' w6 K2 d' ?& L6 m
  1382. JSR SwitchBank8000  q( d8 F, k, F* B6 L
  1383. LDA Music_Bank_A0000 B" A6 e2 ]2 R6 K
  1384. JSR SwitchBankA0002 ?: B. r, T) u8 A5 Z9 f$ i
  1385. RTS$ J' t0 m' A0 _" C5 d# k. e7 _
  1386. ( S7 ~2 U5 \, ~% x" v. `
  1387. ;==================================================
    3 [7 i8 ]. ^( b. `+ X7 b/ i
  1388. Sound_Init;音乐初始化
    - l+ D3 z4 r2 D) I8 [" x- h# ~
  1389. PHA
    4 `& u5 I& P0 Z  T# @, I
  1390. JSR Sund_Bank_Set
    % v. v  g, B  |$ @; Q$ |1 n
  1391. PLA1 u  @' Q4 j, V2 d! ~
  1392. JSR Music_Init_Addr0 `2 O( j+ b7 h) J% f
  1393. JSR SwitchMainBank7 e2 t4 ]) g" n& L* ~' a1 \

  1394. + ~. \  g" f- i! y$ Y5 |0 i9 q
  1395. JSR Music_Bar_ReSet
    2 T. D! u/ @1 e2 l9 q1 N  W
  1396. JSR Time_ReSet
    9 v+ l  \8 T, ], j- Q4 }! `
  1397. LDA #$00  R( p, s/ j( A0 q8 \: M
  1398. STA Music_State
    * E& s" e4 }! {4 M* U
  1399. JSR Music_Stata_Show: H! |* ?; K3 v. }3 h) S3 g7 C6 s
  1400. .IF Track_Name_Pos" }. S9 ^. K4 X5 [& c
  1401. JSR Show_Track_Info' I2 R" X' Q* W1 T
  1402. .ENDIF# ~$ o+ }2 S3 z4 q
  1403. 9 Q$ n1 G2 w/ ~9 I$ {7 ~( W: j
  1404. RTS
    9 C% ?- r7 y' g. \

  1405. * X' p' R" K& ?$ E; V) N% F* x. O
  1406. ;==================================================5 e" g7 L3 ?- x3 W; I
  1407. Sound_Play;音乐播放+ m( }/ }: N5 t- ^1 D1 v7 L" K
  1408. PHA
    ! P+ g% [! O1 n
  1409. JSR Sund_Bank_Set. p0 f% Z8 P# [
  1410. PLA' Q6 ^( x2 b, e2 A6 ?
  1411. LDA Music_State
    5 Q+ P, H. q; j6 A
  1412. BNE Sound_Play_End
    : O- C4 `( @) p
  1413. JSR Music_Play_Addr% l+ s, a0 I( E$ j
  1414. Sound_Play_End/ i: B; K7 E( n' z
  1415. JSR SwitchMainBank
    4 q4 S' Q; |, y, `, ?, g, Y
  1416. RTS3 ^, y: w; Q6 H) i

  1417. ! u( k( T* y: f
  1418. ;==================================================
    6 ]9 P- z  M0 u" \
  1419. .IF Music_Reset_Addr
    + z3 b2 H1 W  `
  1420. Sound_Reset;音乐重设(如果有的话)2 O+ C& P* g5 Y7 K* Q8 ^  J
  1421. JSR Sund_Bank_Set2 ^) r0 I1 h, `3 `. d4 ~1 E' h; W8 [
  1422. JSR Music_Reset_Addr
    1 Y. `' q& r9 X# f) x' m5 g
  1423. JSR SwitchMainBank# w: J/ n0 _: U) u$ {* v
  1424. RTS
    8 k# c6 n: ?6 W8 S, }! ^
  1425. .ENDIF$ l' C7 C0 ~: ?% \5 Q
  1426. , a; K* }5 o" O4 v6 W
  1427. ;==================================================2 }% |4 X! D; m3 d0 T8 R5 g: N
  1428. MainLoop;死循环
    ' n: L! j4 ~5 w# k4 C  S
  1429. JMP MainLoop0 b8 d1 I6 F; q; B7 z
  1430. 5 T# A5 H3 b+ F" m3 ^
  1431. ;==================================================: l0 }1 C' g$ {: N+ u/ G/ b
  1432. NmiProgram;Nmi中断处理
    8 Q6 Q  k) [6 [# I" H1 E) q. {; f
  1433. PHA
    0 y! B5 G/ e; y4 n7 b! s% d+ p
  1434. TXA
    % q" T) E& b6 `* {" w
  1435. PHA
    & V) s" E0 S- I' A( _; o$ |
  1436. TYA% i. S8 Y- O0 t6 D4 v" p- B6 w+ F
  1437. PHA9 u1 `/ ]: E9 q* S6 q3 m" q

  1438. / ?$ v9 {% o: T6 Q* j, f8 g
  1439. LDA PPU_STATUS
    : U" `7 r# c& e$ e  {0 F
  1440. LDA #$00
    , V1 {# E4 P0 o7 N! s
  1441. STA PPU_CTRL
    * r: ?: ~$ B' O" Z& h0 a6 X% J2 C. f

  1442. + A# d2 z2 Z* u" S$ n
  1443. ;切换主程序bank/ [) G' A8 V" n5 c# J4 |
  1444. JSR SwitchMainBank
    9 y/ _/ ]5 b' u3 \, I

  1445. * ?; ~4 ~( N  F  q. J8 M& N, e
  1446. ;NMI处理% e3 [* a5 Y/ I% x$ W
  1447. JSR NmiProgramProcess
    * g% q" B! t- x6 Z) \
  1448. ( Q" {5 L) ?* N$ ]4 x
  1449. Nmi_Proc_End
    , X5 y: H6 v$ Q  D
  1450. PLA: g- m  j1 @: O
  1451. TAY
    : a* H* S( w& }
  1452. PLA
    3 {6 l' t8 G$ E- m8 `/ j/ f/ f3 H: T
  1453. TAX
    * q5 |+ ~0 F. v5 O( d. v' [5 p
  1454. PLA
    ! s* Y$ G$ W; a& g6 S: t/ R
  1455. ' @+ h: U8 \. l; F+ e7 U: B
  1456. RTI
    % r  ]( a6 u$ p& n1 f
  1457. % n" b" o$ ^& B( z" z/ ^7 b. g5 M
  1458. ;==================================================: v, S3 B6 u4 @4 F
  1459. ResetProgram;重置中断处理2 }; n: y( b: ?; X/ g1 F% T- _
  1460. SEI
    ' [% X6 e1 }/ Y& x+ D5 I
  1461. CLD9 m4 I( i* V/ W& Q9 \7 E
  1462. LDA #$002 e$ o' H) z- _3 J8 l8 F
  1463. STA PPU_CTRL3 i7 Y' ?, A, u2 w0 X( p
  1464. STA PPU_MASK. [6 H6 Y2 |* U+ r# i
  1465. 2 I* ]* o8 F+ ~/ l' ^. K5 ~, |2 }
  1466. JSR SwitchMainBank
    6 U: S: @1 G6 s* K4 ^$ P5 `
  1467. JMP ProgramBegin# {  Q+ ^1 D4 w7 B0 a/ G3 p

  1468. - R8 z( ?$ s6 Z( s# P( g0 h% ?% f
  1469. ;==================================================+ B& h2 @& S1 d) H" A: p2 p
  1470. IrqProgram;Irq中断处理1 ?7 P/ H0 A" r/ o5 a' m
  1471. RTI
      x. o# ^) r, Q6 R8 w
  1472. & w* k6 v# ?9 F' C* o
  1473. .IF SOUND_BAR_SHOW_ENABLE
    4 e6 b! z! }1 [0 w3 d7 A
  1474. .ORG $FF807 i4 ]/ ~& P$ w+ `& i
  1475. STA $4000,X  |4 y. W2 g8 d* Z% M0 J0 p
  1476. STA Sound_Bar + $00,X3 y( J# A8 E+ z$ K0 ]$ F) I1 z5 `
  1477. RTS7 u. j5 l, W# ^
  1478. 3 y( c& Q! q* l. ?
  1479. .ORG $FF88
    5 d; v0 Y* k+ d; J$ e; \: Y4 R
  1480. STA $4000,Y
    : {' f- Z0 p8 G, G  m! E% E2 f
  1481. STA Sound_Bar + $00,Y
    * e: `3 K0 I9 I) Q8 r
  1482. RTS( G7 z- k, ^) O: Q0 Z! ^; Y
  1483. : X( j" |" J: [3 R7 p
  1484. .ORG $FF90
    - Z# E/ z  R& g& {+ N0 C$ C  m
  1485. STA $4004,X, y- W* q5 S3 D( q
  1486. STA Sound_Bar + $04,X6 _4 }0 _. d- x- Q
  1487. RTS2 b2 d6 e& U6 ]* C. O5 v

  1488. 9 J$ y. ^8 H4 b3 m# I7 D0 U1 q3 {
  1489. .ORG $FF98+ c- u+ D/ z3 V/ d, n- p+ f/ i! P
  1490. STA $4004,Y
    - v. ]+ \, }. G+ {
  1491. STA Sound_Bar + $04,Y/ J2 P0 |# a% p- f! q+ r& J
  1492. RTS" a' [* `3 G7 l& H
  1493. 5 `: ^  u; N* C2 I) s$ k# A
  1494. .ORG $FFA0
    0 F& O+ ]3 t. _
  1495. STA $4008,X
    - ^3 J- \! u6 q$ F
  1496. STA Sound_Bar + $08,X9 a6 ]4 e1 W3 Y7 _* S
  1497. RTS
    2 [$ H) n, E& h# Y! }
  1498. ) O' H! n' w* z$ ]
  1499. .ORG $FFA8
    ' \6 S9 j* S# r5 @
  1500. STA $4008,Y
    6 O0 |' |  z: a: V
  1501. STA Sound_Bar + $08,Y
    # E$ F3 b" c; t5 ^  y+ K5 R4 p* |
  1502. RTS3 }% H+ \6 ?1 M  z, W

  1503. ( x! p8 k, _2 Z6 P) R; i: X
  1504. .ORG $FFB0  _: k/ a# t8 r" P8 B/ C
  1505. STA $400C,X8 U: s+ A# S2 r" d8 e$ R" P% ?# X
  1506. STA Sound_Bar + $0C,X. m# z" O; n0 S2 Y
  1507. RTS0 p! |( }. J" J& y5 {5 b( A! i
  1508. 2 E" _, R$ E3 [3 d- ~, U5 y
  1509. .ORG $FFB8
    & I9 L, U& a) W7 y$ G. R% O8 c
  1510. STA $400C,Y! o9 A8 m. Y6 e/ F8 }
  1511. STA Sound_Bar + $0C,Y
    / j- a( Q/ C, ?' u
  1512. RTS9 v3 A$ ]( P5 g5 p8 V: R$ k' O

  1513. 2 a+ d' ^) |4 l1 N
  1514. .ORG $FFC0; l- G; P1 E5 R, \
  1515. STA $4000: N$ o) {/ Y$ b/ z: u
  1516. STA Sound_Bar + $003 A! \. V/ z4 [  I
  1517. RTS% X4 O& ~, B% M0 W4 O0 J) p, r

  1518. ) }0 m! F! U% G0 W: v; I0 \
  1519. .ORG $FFC8! y; y7 X2 }7 L$ y* R: ^
  1520. STA $4004
    1 g% I& u% M, _% l+ z  k& E
  1521. STA Sound_Bar + $040 Q8 e& w$ t" b0 v/ h- f  @
  1522. RTS- y# H  `% F' A' ?6 N2 n1 o

  1523. 1 O9 {8 W6 I: P! a3 x
  1524. .ORG $FFD01 O% y! H. l( \* _0 k8 O5 r
  1525. STA $4008
    & U, s5 e+ d: d) v
  1526. STA Sound_Bar + $08
    - j# j4 E2 F7 L) ?5 J0 j
  1527. RTS
    3 V$ `! L2 g$ k% Y  E" a
  1528. / |5 g1 O8 |9 T' l. A
  1529. .ORG $FFD8% F0 e) \# U3 T
  1530. STA $400C
    5 Z+ A/ a7 N) U
  1531. STA Sound_Bar + $0C1 y" Q# u6 _5 e
  1532. RTS" x; x: g2 U7 e( z& L6 R. n2 a4 f
  1533. 6 m, l) x6 O  X: Z' @% D
  1534. .ENDIF
    6 P/ l; T3 P2 [7 s

  1535. 2 ?0 Q/ F3 X; C( v5 a3 B
  1536. .ORG $FFFA4 `+ _4 r( F! a; F2 `0 @" E
  1537. .WORD NmiProgram
    5 x# i, R+ _: u! Y% u
  1538. .WORD ResetProgram7 S2 @2 o2 E6 U( g! R# P9 s! ?
  1539. .WORD IrqProgram
复制代码

0 s" n8 [* C! K; m# R" y7 m( `+ ^, l! n; ]; g4 Y" i
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1405 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3404 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 19:51 , Processed in 1.113282 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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