设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 ( d$ s0 X$ }: w

6 s, A& e4 \% N1.魂斗罗2 R0 W: E5 U9 ~% r8 z1 R9 \
2.超级魂斗罗- u9 [- I7 \, ]  v9 s$ I' G) M" S2 Z
3.赤影战士
4 D6 P+ Z3 h$ }1 [8 Z% J4.忍者龙剑传2
6 N3 r0 V/ ?% n$ f& Y
# j7 N% E9 L# _3 G2 S1 R# ~) O7 g! q& @. {

7 u4 U0 V, X: h8 i
" ]& V: M- M; \" O源码:, S, d5 ]9 b* m! e, z) n  m
  1. ;[FC音乐][播放器模板]
    ! T; A8 J) Y- o9 f: S. f
  2. ;FlameCyclone 20230710
    - l" F8 Y. u( E( n

  3. 3 `8 [: e4 ^- |, r; v
  4. ;文件头; x& N# {$ O; s
  5. ;======================================================================
    " \8 j7 Y1 v7 \; ^* E/ B1 C
  6. .INESPRG 4                                              ;16KB PRG 数量
    2 _) _6 M1 W$ J: H' h6 d8 z
  7. .INESCHR 0                                               ;8KB CHR 数量
    5 M& {2 z2 u' `6 L9 x5 l  s
  8. .INESMAP 4                                                   ;mapper 4- G& v$ @: ?) I1 Q: u
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直2 L) H4 q$ W8 f% y

  10. # }6 k+ G3 N0 V* _8 M, q
  11. ;==================================================
    % U/ t5 j. a! U; I. w: v; @
  12. SOUND_BAR_SHOW_ENABLE       = 19 K+ k' U. ]( T: k8 G
  13. ;==================================================
    0 a7 `& d$ c% p4 K
  14. BANK_DATA_MASK              = $077 \6 C0 Q6 I% Z1 d& u* H
  15. ;==================================================4 D6 O' }8 k3 w; A
  16. SOUND_DATA_BANK_0           = $00
    ) U  c+ I( u, K/ U) T; S
  17. SOUND_DATA_BANK_1           = $013 n- ~, y' N  Q9 ]5 D5 K
  18. SOUND_DATA_BANK_2           = $02! d4 W2 ~5 \* N5 z' u. z# W# s
  19. SOUND_DATA_BANK_C000        = $06& n3 u# N  E+ P7 \. Y
  20. 0 X( h2 @, m5 I0 t' x: i/ y7 Q
  21. ;-------------------------------------------------
    ) Y$ I7 A6 b- d2 l; f1 \
  22. CHR_DATA_BANK               = $047 o( o9 T2 x( o* h* Z! O
  23. CHR_DATA_ADDR               = $A000. j& X$ Z. k- [' S" _
  24. ;-------------------------------------------------* N- M0 B8 h# j* I3 v/ w( v
  25. PROGRAM_BANK                = $05# A. u( i2 D; e$ Q- l" Q7 ^/ Y
  26. PROGRAM_ADDR                = $80000 @, P# v$ e) e
  27. ;-------------------------------------------------
    , l1 F, Y# ]9 o' j7 Y: r$ Y
  28. RESET_BANK                  = $077 q) j  x/ P1 @3 f7 W" W
  29. RESET_ADDR                  = $FE00
    5 O5 H4 U# G% o! i1 z5 q
  30. ;==================================================0 f$ K& Z% X7 C' r
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    + T/ G7 g/ R# L5 ?9 M& |/ @& D
  32. Music_Play_Addr             = $813C ;音乐播放地址* s7 O8 S1 \$ _5 H
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    ' }- A8 M# Q5 R: |9 h. ]& `
  34. ;==================================================, F# D# U& g# H0 |
  35. Music_Song_Total            = 039  ;全部曲目总数- a; x! X$ n8 C) p% b
  36. Music_Start_Song            = 007  ;初始播放曲目
    9 [3 }# J: }; X" R2 j
  37. ;==================================================. K/ ]8 e+ s8 Z# s; E# Z

  38. 9 w6 X( p& I* A3 `% D
  39. ;==================================================/ l1 G5 D+ R1 S% a6 n
  40. Title_Text_Pos      = $210D ;标题文本位置
    3 m" O- w6 z' ]4 d
  41. Author_Info_Pos     = $2284 ;作者文本位置$ g& x. i& h6 Z) y/ I( c
  42. Date_Info_Pos       = $22CB ;日期文本位置
    : J2 C* `6 \9 E$ g3 d) w6 |) I
  43. ;------------------------------
    - U4 Z1 C& L( \
  44. ;------------------------------1 ^( s& @, O, E! m( U/ C; e& F8 W, D
  45. .IF SOUND_BAR_SHOW_ENABLE
    1 N9 l% ]+ I- j4 U
  46. Play_Index_Pos      = $21B3 ;当前曲目位置; f6 r- ^$ a6 V. f& O. U, i
  47. Play_Time_Pos       = $21F3 ;播放时间位置, }' z* |- R* H
  48. Play_State_Pos      = $2233 ;播放状态位置
    # g: j/ h2 P4 l
  49. .ELSE+ |7 w& L0 v5 l4 }" @* O/ V7 u/ \
  50. 2 p* Q+ \' p% r! _7 G
  51. .IF Music_Song_Total > 99
    9 Y: m# D) {! I
  52. Play_Index_Pos      = $21AC ;当前曲目位置* T: ^: N1 i8 s" j% e* Z" A
  53. .ELSE+ q; X3 W7 y  @, S

  54. 8 x1 t- a# ?" ]! G& n& _
  55. .IF Music_Song_Total > 93 }" ~/ B+ r6 t$ I& Y9 L% @' _
  56. Play_Index_Pos      = $21AD ;当前曲目位置& t7 r/ ^9 L( f# T" E6 A
  57. .ELSE
    ' U9 m9 j# x: }) i
  58. Play_Index_Pos      = $21AE ;当前曲目位置  ^9 }' H. h0 v4 \- U
  59. .ENDIF
    * x5 Z( M8 T  K3 v- F0 `

  60. / b/ T0 u/ A3 o0 e. q: J+ [. D
  61. .ENDIF
    # t; b- ~' l' R* I! }9 u

  62. " E) w4 {6 e/ q! F/ h; g

  63. $ m" `* e$ Z" a+ M
  64. Play_Time_Pos       = $21EC ;播放时间位置
    " s4 @8 p6 g/ r" A( `6 F7 m
  65. Play_State_Pos      = $222C ;播放状态位置
    % R: A3 c" S# l+ ]: ?
  66. .ENDIF1 S- Q0 ?% |  v
  67. ;------------------------------3 w- g5 C* y  g: b7 b: X
  68. Track_Name_Pos      = $216B ;曲目文本位置
    ( ~( J5 x9 K" a8 R
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    , i) X+ N, V1 A: j7 S9 m  _, S
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    1 D" w5 |' e( g' l
  71. ;==================================================1 E/ b6 Z2 z0 d% l  ?  [
  72. Scroll_X = $00% T# g) ]& \* K; ~( B& ?) V
  73. Scroll_Y = $06
    & A# ]% X6 ?6 a# \# e1 q! Q% a) d
  74. ;==================================================
    ; \- Y% [$ D* Z5 |' `" K' P. |
  75. RAM_Cln_1       = $0100
    9 \9 y1 ?7 `+ @* d- |- A2 }) {
  76. RAM_Cln_1_Size  = $80
    , C" J! W( ]' V# K( r0 m
  77. RAM_Cln_2       = $00E0
    8 S/ U7 d3 _2 O2 A/ }
  78. RAM_Cln_2_Size  = $20
    3 b' J8 Y1 Z  z* @
  79. RAM_Cln_3       = $00E08 W3 y( K4 m; }& B7 T  k7 {1 T) m
  80. RAM_Cln_3_Size  = $20& ~7 D8 z2 n( U/ ]. S1 k( D/ ]

  81. * t& x2 _0 U, X
  82. ;==================================================- M9 q- S9 l' B" R: N' ^
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器3 n  V( H% p2 H, r' |4 P9 o  B2 Z. s
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    # w! `4 X- c5 s: R
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位; e; S+ x8 v  ?
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    # B/ V: u; Y; C3 H' [
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1& J- g6 [& @. G; d. v/ q! S
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    * P+ S6 X. Y% p/ n
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ; z5 i- N" }. \+ `
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 5 y: ]: R: x+ q3 |+ s2 n
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    % u5 Y4 ^* O9 D( W$ w9 m
  92. APU_STATUS              =   $4015   ;声音通道切换
    3 L" @5 d' ^- v6 l3 j4 r. }
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    % i. v- S2 f" }& e" f
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通0 p2 k6 G- `! L1 p+ O
  95. ;==================================================4 F4 s7 x! L! v5 \, f. K
  96. MMC3_BANK_CTRL          =   $80006 I& h' M0 z3 k0 {0 `$ a' p) y0 F+ ]
  97. MMC3_BANK_DATA          =   $8001" P+ |7 c( ^0 Z$ ~: C0 U+ }
  98. MMC3_MIRRORING          =   $A000
    7 z$ i6 |: M8 s3 P9 T( _- \
  99. MMC3_PRG_RAM_PROTECT    =   $A001. D0 B6 W1 B4 R6 q! I
  100. MMC3_IRQ_LATCH          =   $C000
    . d- h7 Z7 u/ [# `* b
  101. MMC3_IRQ_RELOAD         =   $C0014 P5 q8 z8 X/ g$ o
  102. MMC3_IRQ_DISABLE        =   $E000
    ! z% n6 _* Y, l# {% D( ~* l
  103. MMC3_IRQ_ENABLE         =   $E001( G# Y1 ~( D( _0 h8 e

  104. $ b! N" q# M1 D  ]. C9 X- l' v( z* J
  105. ;音乐数据块
    1 M: Q9 ~6 F! B6 z9 k

  106. ) n  D* Q* I, T$ v+ s
  107. ;======================================================================
    1 h- K# `& {0 {. b# n7 {
  108. .IF SOUND_BAR_SHOW_ENABLE5 S& S3 o7 l  A5 ]
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ; A0 \5 l; [* x/ Q; n- i2 A
  110. .INCBIN "sound_bank_bar/music_data_0.bank"  [4 A" J" q4 T$ |

  111. ( @  F0 `( k; g/ k  Q& B
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    / A. r" g5 }  D; f6 n, w1 M; C: I/ F
  113. .INCBIN "sound_bank_bar/music_data_1.bank"$ a4 Z6 }4 i4 C! [0 U7 y
  114. 1 o) m0 A( z8 e4 \0 ?  E, k! H0 r
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK/ Q' [+ s3 n1 _9 D
  116. .INCBIN "sound_bank_bar/music_data_2.bank"4 z4 k* p: `( e
  117. 7 s3 C( {- t1 X. }$ p
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ! ]2 ^0 S& m8 _
  119. .INCBIN "sound_bank_bar/music_data_3.bank"& B: N/ q% A" N1 `: u4 }$ S
  120. 9 l/ m# z$ [! b: _: k2 T
  121. .ELSE6 K9 L; ^* H+ x$ {2 d1 S0 p6 c
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    9 B* R7 @9 S2 E1 Q
  123. .INCBIN "sound_bank/music_data_0.bank"# W4 [! e/ Y9 r) p  g: @

  124. 9 a2 `6 k0 U! c" i2 Q$ z# [  O  ]
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK5 W7 F9 d2 B3 M
  126. .INCBIN "sound_bank/music_data_1.bank": R9 O$ M# r) E6 V! V. l5 \4 n
  127. 8 y1 o  f' H; N- s3 s  i$ C# p
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK' S9 ?3 _) u, x0 X2 k  G
  129. .INCBIN "sound_bank/music_data_2.bank"% m" J( Q, {* @. m
  130.   J! r( I  i% B! T/ E
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK4 N1 w9 T3 Z8 t
  132. .INCBIN "sound_bank/music_data_3.bank"
    , `' T3 i; G" Q
  133. .ENDIF4 q: I: `; T3 D( V

  134. + r4 U: l6 ~, g" g+ @' m
  135. ;CHR图形数据
    ; J- y) u9 J: M
  136. ;======================================================================6 X; B' `9 E: U
  137. .BANK CHR_DATA_BANK4 _! Z  r- R' ?
  138. .INCBIN "chr_bank/chr_data.chr"
    $ G0 Y+ s0 `- L) I6 W& o
  139. + \& @! d* N: _3 t
  140. ;==================================================! h, R4 `7 A2 ]. B* a' p
  141. PPU_Addr        = $0300" m+ h7 b, y2 D0 t) R8 M
  142. Palette_Addr    = $03C01 M6 z4 q8 i/ Y" f, f6 h2 B
  143. Sound_Bar       = PPU_Addr+$E0
    2 d. P2 N  ^: }3 m9 g
  144. ;==================================================( F6 U% ^; ]* f) w  O$ K4 p* i4 @
  145. Palette_Update_Addr     = Palette_Addr+$0D- @' s/ M0 J; N0 k+ m3 h
  146. Palette_Update_Max      = $2C3 q0 u' n, ~1 f0 s- w: }* ?
  147. Palette_Update_Min      = $21
    ! }+ G/ r. y2 R& ]7 f
  148. Palette_Update_Interval = 60
    3 P0 {" d2 o5 N/ d: }
  149. ;==================================================
    6 u! p7 k9 a) c0 Q
  150. Sound_Bar_Cnt       = PPU_Addr+$F0) J" x3 w1 I. I0 o
  151. Screen_State        = Sound_Bar_Cnt+$011 E7 D/ f: V  `5 i7 E* b
  152. PPU_Cur             = Sound_Bar_Cnt+$024 M: f; u' \( g3 v# X' ?
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03# z% P3 Y  v" o) o# ?3 f
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04% h  ?) R! p2 s/ o) l9 G* }
  155. ;==================================================5 l  d6 ?: Y% `
  156. Data_L              = $705 {/ x7 ~0 N/ a
  157. Data_H              = Data_L + $01. `$ a$ e1 v$ z) n
  158. Data_Cnt            = Data_L + $02
    * E& }+ X0 ?3 y9 c
  159. Data_Buf            = Data_L + $03
    5 K, }0 H% A* f9 X: u9 R3 s
  160. Time_Wait_Cnt       = Data_L + $04
    2 S( h# o. b& e
  161. Palette_Wait_Cnt    = Data_L + $05
    9 A. |4 u' B* ~% d  ^  h# v. _3 X
  162. Palette_Update_Flag = Data_L + $06% a- f% M' u( e/ N
  163. Show_Track_Name     = Data_L + $07: b/ V' h" H5 g* X9 X- l5 o7 l- C7 H! U, s
  164. ;==================================================
    " U7 d$ n4 {3 n5 b* H1 F+ u
  165. Key_Keep            = Show_Track_Name + 1
    / ]. r3 A% Q/ G9 v7 r' F, F  V8 J
  166. Key_Once            = Key_Keep+$01
      t0 {8 j/ g/ |
  167. Key_Kemp            = Key_Keep+$02+ p. @4 V. N' I/ P) y/ b
  168. Key_Temp            = Key_Keep+$03! X( s* G  S, B# {
  169. Key_Getv            = Key_Keep+$04
    ' \" y: F' P# A$ Q; k* P
  170. ;==================================================: S7 a( Q5 W1 p( K2 M7 i
  171. Music_Cur           = Key_Getv+$01
    4 d0 g) H" R6 ~1 c( k# V6 v, r. ^
  172. Music_Last          = Music_Cur+$01
    * ]+ S! Y  w+ A
  173. Music_State         = Music_Cur+$02
    $ Z( Y& x4 [6 }4 s
  174. ;==================================================' Y" o; }9 b, n1 z  [
  175. HEX_Data            = Music_State+$01" K8 \" Q5 V2 Z5 ~
  176. DEC_H               = HEX_Data+$01+ M8 i! h6 y$ y4 x5 E) k# s
  177. DEC_T               = HEX_Data+$02
    4 [+ D) \2 A$ |( c; g5 l" ~2 ~* b
  178. DEC_L               = HEX_Data+$039 N! g# X; r1 T; q. I9 _
  179. ;==================================================# q2 k" u. w% k# w* I
  180. Time_S              = DEC_L+$01& l' X! H; @* g9 }2 q9 C7 d! o
  181. Time_M              = Time_S+$01  d* p. X5 M* @' `0 {
  182. Time_H              = Time_S+$02
    " K/ m; s7 f# }4 V
  183. Time_Cnt            = Time_S+$03# x' Z# O$ v7 \
  184. / \8 T3 D  V# }( k+ q
  185. ;==================================================
    ! ?4 Y  H  L/ A, _4 r- n! u  v
  186. Music_Bank_8000 = Time_Cnt + 18 N8 ^' w% }7 B  l) ~
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    ; i+ Q" n0 @) A  C) B  D* v5 h
  188. ;==================================================  q$ Y. Q( t5 I$ P) v# O
  189. $ a: z2 d* N  ]
  190. ;======================================================================: B) \' e9 l5 T3 |
  191. .BANK PROGRAM_BANK
    ) z4 z: K3 P; k
  192. .ORG PROGRAM_ADDR& l* B& J$ `/ L# n0 j1 P+ T

  193. " `" F" s8 }9 u
  194. ;==================================================
    . F7 c9 p3 g$ U- D- D' K
  195. NmiProgramProcess;NMI中断程序处理( D4 k. F3 V5 Z4 h2 X
  196. ;处理PPU图像  C2 \" Q7 j; c
  197. JSR PPU_Proc, j5 X/ X5 z% ?! Z0 D
  198. / W7 M" C! q: K
  199. ;启用NMI中断& I# X! t" w0 g2 C
  200. LDA #$80
    ' A- j# t/ ?# x& e$ ?
  201. STA PPU_CTRL
    1 l4 ]8 H# Y( f% J  q, ~
  202. , ]+ I; h5 g' B% N9 Y8 u
  203. ;更新调色板& u; \. @# w. w, N$ h: |
  204. JSR Update_Palette_Data2 O* H! `1 [+ m' O% l7 U, k

  205. + r7 L" x# Z; E; E% F
  206. ;显示时间(缓冲)6 Y0 f* t* L1 M0 t  n6 H) W
  207. JSR Time_Show
    0 R+ @' B! t' @5 P5 a

  208. 7 `4 r4 ?- x/ B( w0 _$ t
  209. ;播放计时- H, c4 _) |8 d, a
  210. JSR Time_Count
    & g' ]* m$ r- C+ N) ~9 r
  211. 0 d- N6 E, V' ?
  212. ;播放声音
    6 Z& F" E8 A% J% q' D% `
  213. JSR Sound_Play
    . I0 }1 i/ K( u2 z2 T' H$ \

  214. # r+ u* Z% U* D5 K
  215. ;切换音乐(手柄触发)- R1 R; D' y+ D! T, w
  216. JSR Music_Switch. X% s* R8 V, a& Z
  217. 0 |' c( {+ M% m  p3 }
  218. ;音乐显示(缓冲)8 R$ `: k/ [1 |. |: b
  219. .IF SOUND_BAR_SHOW_ENABLE6 G; T; r( k% x) J! Y' J# Q
  220. JSR Music_Vision
    ; P4 k8 |% G$ }  T! b! H
  221. .ENDIF
    6 E$ V9 o* l" d7 ^
  222. : i* P3 c. C: U. Y5 O5 o8 \" n
  223. LDA Time_Wait_Cnt% I2 ~6 P( g! G5 |+ T
  224. BEQ NmiProgramProcessEnd% Y- P6 p; L4 G- k! W, a+ p
  225. DEC Time_Wait_Cnt
    + f0 k- H& k- K1 ]& c3 p
  226. NmiProgramProcessEnd& f& I. w2 A& h  F+ x
  227. RTS8 H5 R8 Q& }2 Q+ d/ W: t
  228. 6 f& J  s, _* g. H1 c& d; g
  229. ;==================================================" q( j. d- v! g7 k$ l! i9 [- T& t
  230. ProgramBegin;主程序
    9 ]0 y( o; n1 G& P" _- }* H8 Y& E
  231. LDA #$00
    " O0 a" [' z) g9 T4 s6 D
  232. STA PPU_CTRL
    # [# J1 j6 u4 F7 t) Y
  233. STA PPU_STATUS
    / j, M% E* \7 f; ]
  234. STA PPU_MASK
    ' x# }. m5 s1 }
  235. STA APU_STATUS
    3 V. J  }' [& h- J
  236. STA PPU_SCROLL
    9 N/ p- Y8 l0 a7 x! S
  237. STA PPU_SCROLL
    8 |) l4 \0 ^1 t2 s
  238. LDA #$C0" M+ t$ Y+ \4 F5 h+ J
  239. STA JOY2_FRAME  K1 O# z5 h( n: y" ^# |$ Q

  240. & _5 k  m; O  i) Q! i
  241. LDX #$FF! |" V% l  k* O/ ], P2 W
  242. TXS
      w7 q- ^- \- N; t" g# g  H
  243. LDA #$00, E/ R1 ^: f  K/ [
  244. STA PPU_CTRL
    0 U. u& G* P; O) k. l- p
  245. STA PPU_MASK# i* ?6 M$ F. Q. U1 `
  246. STA MMC3_IRQ_DISABLE3 ^1 b; L/ N& f8 f5 {
  247. * d4 K/ x! C4 a+ C4 A
  248. ;==============================; y4 x8 q, x9 _
  249. ;调色板清空
    4 N8 K& S9 p3 w! P3 ]
  250. LDA #$3F
    1 L# m0 \  Z& c: t7 {/ d3 b
  251. STA PPU_ADDRESS( R. s2 v# a% h) p2 c
  252. LDA #$00
    . O" J2 n% Q/ G  \( @# y$ \6 q$ D+ r
  253. STA PPU_ADDRESS
    & R" B/ @6 A, G' M" |( R& {
  254. LDA #$0F5 Q# R7 I: M+ v: f
  255. Palette_Clear
    / D  y& q+ Y( P4 V" G- V
  256. STA PPU_DATA/ _* |, }) i6 y* Y! ~! T
  257. INX  V9 j$ s% o% ]- W
  258. CPX #$20
    ! p2 G( a0 J3 C! x
  259. BCC Palette_Clear- M! |5 ?( A% O. W) D
  260. LDA #$00
    & Z1 S: Y$ h  v' u; q6 s0 x
  261. STA APU_STATUS
    6 o! A( Z/ q0 P6 W8 k8 l
  262. ;==============================
    / ?/ h/ U# v$ l0 n* H/ Y
  263. ;初始化背景调色板
    8 K( l8 J  d) F' v) o
  264. JSR Set_Palette_Color& p- `% H! n# e- S' P
  265. JSR Set_NameTable_Attributes; j3 e: m4 w! \. U' t

  266. 3 B; ~/ r0 |1 Y; i. G9 D0 R( J4 `
  267. ;==============================
    ) ^( i6 ]. k0 o* O6 C+ m' L
  268. ;RAM初始化# m' O, F" @+ g, l' r8 n
  269. RAM_Clear_All2 I/ G, D3 v, _7 ~$ B
  270. LDX #$004 a: j% H" z. c# `
  271. LDA #$00
    - i1 S, _: [& y. \, E3 R2 i
  272. RAM_Clear_All_Start
    1 U5 S" t& O3 l& W" v7 ?
  273. STA $00,X# O- D% o8 A2 O
  274. STA $0100,X. J, k: b  U$ `. q: |, @' X, |
  275. STA $0200,X+ W9 C, T# B, t9 H3 u" t5 h
  276. STA $0300,X  X- ^0 X  `: y7 L! z* }
  277. STA $0400,X0 Z) d: Y' V* |* `, [3 D
  278. STA $0500,X
    + ]; w. p$ u8 e. n: p% I
  279. STA $0600,X4 x0 B3 k3 u2 M
  280. STA $0700,X
    - u! t& g# Y: C& R. X
  281. INX1 ]+ n# _2 r7 @' t3 p- |4 F8 S
  282. BNE RAM_Clear_All_Start
    ( V. N& ?4 s) Z# ~# W& _

  283. 2 q1 r# I9 `' J) Y9 ]* c! B% D
  284. JSR VramInit
    : A; q8 D4 o6 Y9 I! l  |& `
  285. JSR Init_Palette_Addr
    3 @" t5 ^. G/ F: Q

  286. $ V) _( z% C$ B4 p2 I* K
  287. .IF Music_Reset_Addr+ Y2 `2 s+ o, N$ `# A
  288. JSR Sound_Reset/ x6 C( ]9 {4 s2 x5 \  N
  289. .Endif
    4 x6 S8 q8 O! Y2 M

  290. ) x7 e2 g- ~2 K- l1 r9 B
  291. LDA #Music_Start_Song-$01
    : J4 l: c, e+ }: C
  292. STA Music_Cur: q6 o4 N* r6 J% X

  293. - c* v8 S# `" d( p( A
  294. JSR Show_Music_Text- M; r4 n$ O  i: B

  295. % c! R$ C9 A; N6 A3 N" p) r
  296. .IF SOUND_BAR_SHOW_ENABLE
    1 p" j( U5 T9 L6 h+ s7 V
  297. JSR Sound_Bar_Text_Set! ?" b; ]+ Q! D) r
  298. .ENDIF* [8 H" l  B5 L; i3 x

  299. 9 K% Q3 `6 h; u% z. P% ^$ S
  300. .IF Track_Name_Pos
    # q$ V4 C( c% ~& \1 e. i- a% P) @
  301. JSR Show_Track_Info& \; u3 ~! t  t
  302. .ENDIF8 d/ |5 L& U; ]# j
  303. " Y4 ~, ~6 `) R) S
  304. JSR PPU_Proc
    3 z6 [7 `1 @! D

  305. # ]+ i1 s! j* Z7 e9 W* S1 }5 `
  306. LDA #$0E
    + k; i# t& @) W  T! B
  307. STA Screen_State
    & Q0 f# ^/ }" F5 ?" w

  308. 3 q% X$ T6 S! E9 b3 a% }0 T& z: ~; o! {+ `
  309. JSR Sund_Bank_Init
    " R8 u6 p( [/ p8 [* j# ^$ _

  310. 6 s+ `2 ^: |3 \; N1 r/ ^) z
  311. JSR Music_Show
    & ~+ ^4 {! x8 x# \! A* v6 m
  312. JSR Time_Show: t8 b5 k; v1 q0 }+ P* K$ O
  313. JSR Music_Stata_Show
    4 u4 W0 d/ r6 G2 w) p
  314. JSR Time_Delay. C$ C, n. `7 }$ M* I8 B
  315. , c/ N0 O% A% `/ v/ ]
  316. 2 p, _$ l; S+ [
  317. LDA #$80
    & m! o- ?; @0 y7 {" r( W
  318. STA PPU_CTRL
    8 }& A) ?# }  \3 a' W2 c
  319. 1 S) a* B2 O" e( U
  320. LDA #$205 Y' X% ?1 G( U
  321. STA Time_Wait_Cnt
      c9 [6 P9 O( a2 d+ S" ?+ s

  322. 6 }% f8 c' l. H6 l3 M
  323. Wait_Time_Over( J; E4 D1 s7 b+ n1 C5 _
  324. LDA Time_Wait_Cnt
    4 R- _* y( o1 [
  325. BNE Wait_Time_Over
    ) q2 ^: M+ J1 s/ E
  326. 2 x$ Y4 C, W1 `2 K9 i& I3 i% Y# g+ B
  327. LDA #$1F7 z* c* N1 }  X0 k* ?2 F3 G
  328. STA APU_STATUS2 [+ j8 g: k6 K+ ~4 J
  329. LDA Music_Cur
    / ~- D0 |& }  D+ q' R: R
  330. JSR Sound_Init
    1 b6 L* m0 |7 W5 {' U. p
  331. . O+ D+ d" S/ A3 M& L: R9 h( j
  332. JMP MainLoop' v/ P& ^7 L2 w  p
  333. 6 j( o6 k+ q: o
  334. ;==============================* w: L2 f% K- Z6 J- J
  335. Time_Delay;延时等待0 [8 H* ^$ m5 w
  336. LDA PPU_STATUS
    , K7 Z0 d- y  }# o; J# o' H
  337. BPL Time_Delay
    + r- ~% x/ e" f3 n' ?
  338. RTS6 Y8 a! g  Q1 ]! _  S/ [
  339. 8 Y* r+ Y: K$ F$ U7 @
  340. ;==============================) L0 U5 d3 i8 E! Q/ }& ~0 d
  341. VramInit;初始化图形内存' n- `! v: f% i2 F: @% o4 P
  342. LDA #CHR_DATA_BANK! g% s4 }, S) U/ n$ T
  343. JSR SwitchBankA000
    ) N7 L" K; b  T3 i$ [" ]8 Q
  344. LDA #LOW(CHR_DATA_ADDR)+ p3 W7 \- r! e. k5 G+ V
  345. STA <Data_L
    # ^8 f5 X$ l: E: p
  346. LDA #HIGH(CHR_DATA_ADDR)
    ) ]0 f8 r& k+ S7 c
  347. STA <Data_H; M7 {1 z7 g1 t2 {7 @( s7 _
  348. LDY #$00
    ! X2 x; U( q+ C4 b
  349. LDX #$207 I/ t7 Q0 _0 h" b
  350. LDA #$00
    7 }% M7 H. B. @' X0 p  Z  W
  351. STA PPU_ADDRESS
    ) B7 f: @5 j' ]  V3 q4 U
  352. STA PPU_ADDRESS5 ?$ `2 R# N! f4 H
  353. VramInitWrite5 V! U9 ?, a2 v
  354. LDA [Data_L],Y$ |5 d: w/ ~4 M* A
  355. STA PPU_DATA
    0 @* f$ g: I( s  C
  356. INY9 k/ G; `7 N' R& d6 t
  357. BNE VramInitWrite" K1 f$ k- E9 Y/ d
  358. INC Data_H
    / X; n5 v0 D' O
  359. DEX# w2 a/ E; C# a. d$ U" {* o# r2 x
  360. BNE VramInitWrite
    - ]' }0 z' a2 v2 c
  361. RTS7 e" P3 i8 x& p6 f7 `6 h

  362. + \2 T; ?* B6 m# g
  363. ;==============================
    . N. ?) P# S# b0 s: \$ s/ d
  364. RAM_Clear;RAM清除2 ~; e, l( j$ P+ j+ d  @5 s
  365. LDX #$00- x; o7 R; }6 e+ K, f
  366. LDA #$00
    7 M, H+ I% v4 B' h+ R+ x
  367. RAM_Clear_1/ f6 g, \9 V  q/ ~+ g0 [
  368. STA RAM_Cln_1,X1 W8 |: k4 e( t# d; @  I8 p
  369. INX$ c0 U  S4 v6 f; n% V4 H, j
  370. CPX #RAM_Cln_1_Size% }- T/ X) w1 t6 p) V
  371. BNE RAM_Clear_1
    2 y8 ~1 f: g4 k7 d( D1 h
  372. LDX #$00
    ' q% w1 i; G) E! F) v9 g5 i9 Q6 Z) X
  373. RAM_Clear_2% N( P; {$ y& O" C5 d4 h% F1 c
  374. STA RAM_Cln_2,X: M& o- k$ ?) {+ ]) l/ j! _
  375. INX
    ! U+ I) B* i6 F0 T" a" }: S
  376. CPX #RAM_Cln_2_Size! g  M  t2 U& N8 g. h2 N
  377. BNE RAM_Clear_27 T: E- e1 E) N- M8 c
  378. LDX #$00
    # {. G9 p, F; @. O4 p( {
  379. RAM_Clear_31 L' S3 b# a+ d5 [
  380. STA RAM_Cln_3,X
    0 m. j7 z* q% f; X! [3 g
  381. INX1 t! Q! b, r0 Q8 n# M* F5 d' V8 R
  382. CPX #RAM_Cln_3_Size& x; z+ r1 ?7 H7 u0 ^& r
  383. BNE RAM_Clear_3
    : a$ s3 _( _+ [6 L  ], ?, ^
  384. RTS
    " M0 [" U5 J8 l" R; N/ B- [1 o

  385. 4 [  u$ W. L4 g6 Y6 l5 a/ x5 s
  386. ;==============================: K! @7 `8 {8 Z4 S$ y/ K
  387. ;音乐切换
    ' e7 F2 Z$ e6 c) j  f3 n5 p, H2 g' [
  388. Music_Switch
    ' t7 |1 c3 C  N/ a& X% X! a
  389. JSR Key_Proc" v6 z9 `( i1 @5 p9 c- {$ ^
  390. LDA Key_Once% M1 I1 c0 I, ]  I$ {. S
  391. CMP #$10
    ; t& v% f6 c+ A- e
  392. BNE Music_Start_SongStop
    7 W4 @& n+ M% p8 G9 Z9 ]0 \5 i2 b) {
  393. JSR Music_ReSet/ Z/ E' A0 F7 a# h/ T! r

  394. " }. Z7 y7 p' _2 g  u
  395. ;音乐停止9 c4 u+ Q' H0 O' {& k) L  J  c9 l
  396. Music_Start_SongStop. o- M1 ^+ w' `! ^; K  {$ f' C- L
  397. LDA Key_Once
    / B& }% u( J8 H3 _# ]
  398. CMP #$209 T$ U. h! d1 u! V" M
  399. BNE Music_arrow
    : C7 i5 D/ t; X* ~- h& i
  400. LDA #$01
    # s: `' D* U( j: Q3 C! S+ p* e3 C2 e
  401. STA Music_State9 T5 [/ U" S) x- z/ [8 I$ V
  402. JSR Music_Bar_ReSet
    # M" S: X0 D" _( W/ x7 m) U
  403. JSR Time_ReSet
      s( C9 B/ E6 d
  404. JSR RAM_Clear9 H9 f# k' W3 {3 L; S
  405. JSR Sound_Clear
    % t) |& f8 b* O9 J% s; U. _
  406. JSR Music_Stata_Show- V+ r6 D; V7 l# `8 }2 w( S
  407. Music_arrow
    , @, v0 m. n0 A) M- G
  408. LDA Key_Once
    0 R) o' \; Y$ N
  409. AND #$CF; R; ~; D7 o5 w! x0 u8 b
  410. BEQ Music_Switch_End* t% R! Z% Z7 @& k* g0 O8 S
  411. JSR Music_Number. Q. r$ B0 z7 \' `9 R% G7 y
  412. JSR Music_ReSet' x% M9 ]+ S5 e$ l5 E
  413. JSR Music_Show+ O! L' I8 _  Q. ?" |
  414. Music_Switch_End
    & r% P7 t5 I$ T/ k
  415. RTS6 @: i5 N+ {9 D  t+ v
  416. & \" H% N) s/ m
  417. ;==============================
    . E+ m$ \# Y; X/ r- G5 R
  418. ;音乐曲目切换3 g# U0 D  O- y* [/ D
  419. Music_Number4 ~/ x# v1 j7 ~4 H! W7 D- ]
  420. LDA Music_Cur
    & z+ y, F: g5 r# F6 F& ?+ X* r
  421. STA Music_Last& _; W! V2 j, z7 e% z7 U3 t7 v# C
  422. Music_Decrease. }6 v2 W+ S4 F: E" R& I0 I
  423. LDA Key_Once
    # i7 @' W" z! k) E& u- V: p9 _
  424. AND #$42
    ; u: E2 {' h6 I9 q/ @9 g
  425. BEQ Music_Increase6 K. h9 U, }! l. \, ~6 E
  426. LDA Music_Cur5 X; \% a, ~% l
  427. BEQ Music_Increase% W: Y! C8 `& a( f
  428. DEC Music_Cur  |- L3 I4 D! e: X! E7 u8 S
  429. Music_Increase# c, s7 [. q6 M. \0 Z; ?0 W$ j8 x- f
  430. LDA Key_Once7 Y5 v7 h6 \& T+ m9 c- i1 }
  431. AND #$81
    . m5 W: ?# }% I! \
  432. BEQ Music_Decrease_10
    : V. y- K0 d8 Q6 ~! o& i3 |
  433. LDA Music_Cur0 [7 E( U4 x, _0 D
  434. CMP #Music_Song_Total-01
    ! F$ T4 f/ {6 ^* o
  435. BCS Music_Decrease_10
    5 K6 b3 ?0 y/ ^) e" p9 @
  436. INC Music_Cur
    " F6 r8 E4 J' I+ j( g
  437. Music_Decrease_102 F( A  S: Z( ^- n
  438. LDA Key_Once' J: V0 e3 ]* v4 H
  439. CMP #$04
    7 u# i% v+ u0 J& B8 I+ c/ \. C
  440. BNE Music_Increase_10
    + W8 n* n$ c5 n/ y$ C+ ~  p( _
  441. LDA Music_Cur" M, A+ Y. x5 ]& F' C9 ~0 y
  442. CMP #105 h# v. ]/ ]' B  `$ ]9 T
  443. BCC Music_Start_Song_Min) `; x/ [8 ?2 j$ W( x
  444. LDA Music_Cur
    4 @# P4 V* l9 A$ k2 V1 h
  445. SEC( x' P9 q6 G# ~0 z- K
  446. SBC #10
    * ^% y& t5 Y/ i6 i
  447. STA Music_Cur
    5 W% a" p. J  f6 |$ E
  448. LDA #$00' n! L$ m! l& ]! o1 P' t
  449. BEQ Music_Increase_10
    + d4 G  l( y, `5 Q/ ~; \; L+ t
  450. Music_Start_Song_Min
    1 F& T2 f: @* s$ M( R1 r
  451. LDA #$00
    # B3 q& \  O6 Y+ d. p
  452. STA Music_Cur
    $ O- [8 [$ k" \; e8 x; {
  453. Music_Increase_10
    6 K8 B, U, H  s0 Q; d" t
  454. LDA Key_Once
    0 H9 R% m; ^5 B2 M: E* l% }
  455. CMP #$08( C/ C5 H5 T. W0 a
  456. BNE Music_Number_End
    3 y0 j; E) ?' }$ B+ O3 U! B
  457. LDA Music_Cur& l/ A4 _5 P9 k3 P# `0 f# l6 P
  458. CLC
    " K6 ]5 A6 g7 \, |
  459. ADC #10! F. }1 A7 \6 v( X- Z& E; [( n
  460. CMP #Music_Song_Total-01
    ! A' E9 J9 s4 u" C8 L) J
  461. BCS Music_Start_Song_Max1 B$ R, M- _& T! \2 I5 K1 x
  462. STA Music_Cur
    % Y: |: P* ]4 r! Z2 w) j
  463. LDA #00
    6 E4 Z9 Z5 R8 V% E0 y
  464. BEQ Music_Number_End
    1 H3 _# w5 n4 a# O3 G7 S
  465. Music_Start_Song_Max5 U# [. t7 X; T4 j& R* E8 f
  466. LDA #Music_Song_Total-01! ?; z4 ~1 x+ {: d
  467. STA Music_Cur, N3 z, I* Q) U& M' n' e, L( G% u
  468. Music_Number_End
    # f# u* k: Z0 R4 O3 S0 d1 P  a" r
  469. RTS( |0 s" a, W# S. A* o4 U
  470. 4 y$ i0 F' l, A/ m) `6 y, }
  471. ;==============================
    ' n! U' U/ K. t/ @: O
  472. ;音乐重设3 ?& }- G$ A8 C- L0 N9 M
  473. Music_ReSet
      X5 T- {5 l' ?# ^% F
  474. JSR RAM_Clear
    * y+ |8 T! K+ j; A3 m0 U. z/ D$ M
  475. JSR Sound_Clear& d: _7 M# ?: u- Z/ f2 Q- D7 @! D
  476. LDA #$1F
    ! C: F8 ?. F/ `9 r3 Y" b
  477. STA APU_STATUS' |/ L0 {) p6 [% K% k4 S( J+ w
  478. LDA Music_Cur$ K/ I7 b5 W/ D# i
  479. JSR Sound_Init
    3 w: S# O! s1 `( S: }
  480. RTS& l% b) a6 G% a" @% j4 H
  481. , W7 S' X6 _4 [$ x
  482. ;==============================
    " e6 r4 }: i! O1 l
  483. ;音乐端口清除
    0 U, D! M" e( E5 Q/ T
  484. Sound_Clear: g7 ?& S. F: E. L$ c% l
  485. LDA #$00
    / \0 i6 N( s0 u8 x- n
  486. STA APU_STATUS0 }& S5 c' @4 g5 z2 J
  487. LDX #$005 [" W- `! U7 @$ y3 J7 y
  488. Sound_Clear_Start! n2 o) ]2 y  D% K3 c: `  b
  489. STA $4000,X8 H! J3 t/ m; q3 E  x/ m
  490. INX
    ( p6 q: ~. W. ^' @
  491. CPX #$14
    ' z2 z- u4 S& t& E$ v( Y
  492. BCC Sound_Clear_Start
    - C8 e  x% m0 Y& |
  493. RTS: |) M4 P) G' \: |- ~8 S  d

  494. $ y2 ^- X3 t) K
  495. ;==============================
    % O0 l0 E# S: |2 v5 J# X+ C* _
  496. ;按键处理5 x/ @, u( K  g6 N4 C: K
  497. Key_Proc9 Z3 g: |$ T3 G4 I' D
  498. JSR Key_Scan* D$ F2 W  H; z; r0 h6 [
  499. LDA Key_Keep
    8 _% H( M  @, B9 G$ C. M% d
  500. STA Key_Temp- k8 C. N. x6 O4 h" A4 e( ^2 T: l7 Z
  501. JSR Key_Scan
    & W0 a& ?5 J) h, W" X
  502. LDA Key_Keep
    4 v& }. g; A' Z: Q( q- f
  503. CMP Key_Temp3 \3 o0 p/ i: K
  504. BEQ Key_Get_Once
    8 X/ f, i% P% _! c. [/ F+ I
  505. LDA Key_Kemp
    % A; D$ I5 h! `: }  N+ O
  506. STA Key_Keep! p  R9 d1 Q& F% E9 N! j
  507. Key_Get_Once2 F* N5 |% d" N, x7 `5 W
  508. TAY& U, m* B" x- ?& D
  509. EOR Key_Kemp
    ( [5 [7 ^! n5 j
  510. AND Key_Keep( e, K* B" C& K! e
  511. STA Key_Once
    4 r3 m* w7 K# }1 t
  512. STY Key_Kemp
    6 P  v0 D2 |' @
  513. RTS8 v) c1 K" l7 b4 _! H, h% O
  514. ;------------------------------
    $ U: w! J# ], E
  515. ;按键扫描5 P+ q  i7 R( k% c+ ]6 y3 t1 f
  516. Key_Scan  v; G1 m, Z0 C% X
  517. LDX #$01
    3 K( a, ?$ \" @) |- y* l! L
  518. STX JOY1_FRAME" ]/ i+ P6 Y+ U& z
  519. DEX
    3 U; L0 Y. I* }3 F: n& D! ~
  520. STX JOY1_FRAME
    ( \/ ]  Y9 }3 ~# `- z
  521. LDX #$08
    * I6 C4 L' d; R. l# h
  522. Key_Value$ o; P  w+ b9 _) O) `$ ]! G
  523. LDA JOY1_FRAME
    " t5 R# x! [4 L; o+ C) x
  524. STA Key_Getv' J6 ]2 T" q' P
  525. LSR A
    9 p7 n- I$ I, L" F/ R+ q' u8 ~
  526. ORA Key_Getv# p0 p5 I+ Y9 x! D" [* u8 l
  527. LSR A% H8 d1 z7 r9 j, d! L+ x# R
  528. ROL Key_Keep
    # S2 G7 b' ^% h8 X/ T
  529. DEX- V4 n: G) Z- C! K3 l
  530. BNE Key_Value
    3 r; n( l# ~5 `
  531. RTS
    $ p- _6 f' K5 P+ l% X
  532. 2 u2 Y4 G: c2 s
  533. ;==============================
    4 Y. ]: K* D/ c
  534. .IF SOUND_BAR_SHOW_ENABLE) [% A$ t3 p6 M+ V+ T
  535. ;音乐条显示6 t2 j' a- `( p; \6 y; t6 }
  536. Music_Vision
    - M4 K5 U3 T  Y1 J' w  `
  537. JSR Music_Animation% C( D; b6 Q9 y# a( g
  538. JSR PPU_End' ^# }4 o: H/ u% ]0 A; g
  539. RTS' w$ ~' n9 U+ d( `# @
  540. ;------------------------------
    4 m* L9 J5 }- C
  541. ;音乐条显示处理/ Q9 D- ~4 A% F8 {  R+ W- n
  542. Music_Animation
    " X6 q$ _+ v  M2 Z3 P
  543. LDX PPU_Cur
    3 F: s+ a" [) O1 I7 ~( O3 b
  544. LDA #Mode_Line% e; _- w% W$ N$ s" z9 N8 ~0 d
  545. STA PPU_Addr,X7 `" B: {' D$ w8 P0 K- z# V5 R% N; F
  546. INX
    + x2 G1 Y! p: P# ]9 A1 c
  547. LDA #HIGH(Sound_Bar_Pos)
    ' j6 i, ?# v" ?( y
  548. STA PPU_Addr,X
    5 Z7 o, K$ J/ N- X
  549. INX- k' w8 V) D+ @) b% ^) c
  550. LDA #LOW(Sound_Bar_Pos)
    9 v6 N+ J, t' }; B/ i; j( x
  551. STA PPU_Addr,X
    0 \- k9 U6 U0 x, k/ ^
  552. INX& t* h1 ^# I4 A  T
  553. LDA Sound_Bar
    6 I4 i9 B, @0 {' Y$ w, Z
  554. JSR Volume_Convert1 X) e6 z2 t6 `! q/ o8 q
  555. JSR PPU_Return2 V2 {8 U( j% d7 L5 o  r
  556. LDA Sound_Bar+$4
    : A* w9 ?, ^+ Z1 ~2 i
  557. JSR Volume_Convert
    % u. B+ X" ]3 a( w0 p0 l! ?
  558. JSR PPU_Return+ x% ?+ k( d9 S/ m; M, ~  r0 f5 N
  559. LDA Sound_Bar+$82 k% p1 g9 S: D9 v! i
  560. JSR Volume_Convert_Ex
    ; o; O. U# l& M1 U/ t! I) Z
  561. JSR PPU_Return
    1 l: M9 L+ q, e! w( @7 I1 m
  562. LDA Sound_Bar+$C( Z0 n' |1 J" D  Q- j" k8 a5 ?
  563. JSR Volume_Convert
    0 L: @: f$ u+ |+ D3 X  L/ A
  564. JSR PPU_Return9 J  g  j) ^5 C
  565. LDY #$10/ B+ T: s1 D  Z9 y8 T8 ~* Y4 m* Y
  566. LDA APU_STATUS0 o# a6 o1 k3 ]* o& D8 M
  567. AND #$105 f6 n2 N! z2 v/ [( X) l
  568. BNE Volume_Count) w2 d" h7 @5 p% J# O
  569. LDY #$00
    * v5 v# q4 Z6 G- }( z9 k9 {
  570. BEQ Volume_Count- O/ @# l; K, h& Q1 u6 g
  571. ;------------------------------
    : H) Z5 |. _' k+ @. \
  572. ;音乐条处理6 b- C  O  z+ ^% ]5 E+ U
  573. Volume_Convert_Ex/ s$ n6 _6 W+ q& Q3 F
  574. AND #$1F9 I5 H4 e; k4 {+ ?& |8 J8 J) p4 m
  575. TAY
    1 N) G4 M( l/ J/ e& Q
  576. BNE Volume_Count
      f( n, N' f; P5 |/ T2 M7 u2 e
  577. Volume_Convert& V! Q/ Q4 |! M. Q* B& z- k# V
  578. AND #$0F) O1 L/ t. }2 @# W8 ]
  579. TAY- c" ~' d8 O, H4 a9 v: ]' g4 x; C' ?
  580. Volume_Count
    2 J3 u# X) v* S% D' F
  581. LDA #$080 S( B# `* v' {) E* m: Y
  582. STA Sound_Bar_Cnt
    7 Z) s, M8 P) z* B8 p* w/ V
  583. Volume_FILL
    & f- _: g0 i. q) ?7 y" S& U* T, K
  584. DEY
    * Z4 o; Q' a" r) |( Z' f
  585. BEQ Volume_Half
    1 l+ |% T% a( U& d: y7 J
  586. BMI Volume_Empty) @# l, }! ~! ?  M/ U+ v9 Z+ _( I, Q
  587. DEY# l2 J# E4 o+ j' W( ~# d! `1 w
  588. Volume_Full
    / l5 ]- [! S% G7 k
  589. LDA #$16
    : `" ]/ p0 |9 W1 z5 P
  590. BNE Volume_PPU
    * o1 B7 N8 n% t* r% y9 X
  591. Volume_Half
    ! W  ], q6 g+ s7 D% k
  592. LDA #$158 F- J" D2 O9 y" M6 ?
  593. BNE Volume_PPU
    3 z5 K: F5 M0 {" V  L' z1 R9 }8 V
  594. Volume_Empty
    + y% K" y1 C3 k! C" V/ x
  595. LDA #$14
    " R! l# H6 B) J+ u* A; W; q, @
  596. Volume_PPU$ l; r# a! s1 T' a  F
  597. STA PPU_Addr,X$ a% t0 W9 U* Y
  598. INX
      t6 L% q" G  g3 [: m
  599. DEC Sound_Bar_Cnt( C: s  P' d4 [, @  H2 \
  600. BNE Volume_FILL/ ], D9 \  J2 S) @- M! Y
  601. RTS
    : e# \9 a6 y2 ^- B

  602. ) ?2 M& J: x: U! d) }. J
  603. .ENDIF7 S- Y. Y- J1 R5 g4 ~/ m
  604. 9 I7 C' H* o0 t$ o: D0 G$ [4 n
  605. ;==============================
    - B, Q* R& }3 d# d( w. R  e
  606. PPU_Addr_Set;PPU行开始+ E' Z7 G; |$ \
  607. LDX PPU_Cur
    0 y5 [! T" n# T
  608. LDA #Mode_Line
    ; ~- D" {0 E. M
  609. STA PPU_Addr,X" O0 ]& Y8 N+ G; D% J2 B
  610. INX
    5 R! g- o. {& ~  E
  611. RTS  o! e" x) G' K1 h- ?, P+ z+ h8 n
  612. 2 s) T$ I5 ~& c( C
  613. PPU_Return;PPU转行
    / R/ s3 J4 S' j7 B4 K2 n, F, ^
  614. LDA #Flag_Over' u0 ^5 o0 j9 k6 f7 V9 a* e
  615. STA PPU_Addr,X
    0 @; U& f) L8 S% t
  616. INX3 ~/ {. G! B  F% |, e
  617. LDA #Mode_Return
    + H3 [9 N  H' y1 K+ T
  618. STA PPU_Addr,X4 U" k! M' G, ]% x3 W2 P+ i
  619. INX7 B+ D6 L9 Y  H
  620. RTS& R/ {: r0 b) r& b0 M

  621. ' s- j4 e7 _! D+ ^$ W3 y. x
  622. ;------------------------------  m2 q9 d6 c- L% a- _- y5 y* [% f% ]
  623. PPU_End;PPU结束' O9 J+ [& v& E# \
  624. LDA #Flag_Over
    8 L% i  ]) d! Z# w7 N( n: a
  625. STA PPU_Addr,X# E6 x* W, Y- l. `7 B' V2 r
  626. INX
    1 A$ [1 D/ |/ N$ r7 U
  627. STX PPU_Cur- R3 I' m/ f" }4 ~
  628. RTS
    6 ]6 P8 X6 h7 u) t. C) K
  629. ;==============================% ~9 g$ ~) R7 M$ F0 s0 |* R) \
  630. Mode_Line     = $FD    ;新起行模式
    - |4 P% }9 F/ `. ~9 v: S5 u0 c
  631. Mode_Return   = $FE    ;转下行模式
    * S% h2 k8 {5 ^) F- V% G
  632. Mode_Clear    = $FC    ;行清除: Q7 e2 p2 A2 _6 N( k" j+ ^
  633. Mode_CntLine  = $FB    ;行计数写入" a- T# D" D" ^
  634. Flag_Over     = $FF    ;行结束标志
    ( {1 T7 O  p1 ?) c5 w; r1 V1 S

  635. / ~" W3 R6 c* H. \
  636. ;------------------------------+ |2 m2 y& H) Q) V- X2 \
  637. ;PPU处理
    ! Z5 m% |* P! y( T$ y
  638. PPU_Proc
    ( C7 P# s- b* z7 z) e
  639. LDX PPU_Cur- g' o6 K: ~4 ]3 Z3 x
  640. LDA #$00& b! S% @( n  P
  641. STA PPU_Cur7 Y9 e" Q0 X7 e
  642. STA PPU_Addr,X( }# e, d4 a0 M
  643. LDA PPU_Addr# I5 W' ^9 D; i5 Z+ W
  644. BNE PPU_Proc_Beg
    " A0 L0 F) D) ^. {  C4 @0 z
  645. PPU_Proc_Ret, ?8 S7 B7 [+ @4 u
  646. RTS
    / P# I: c4 E/ M" r
  647. ;------------------------------
    . l' m; {) o5 h3 S7 J7 m
  648. PPU_Proc_Beg  ;处理开始8 q  O! u; X4 L0 n% G
  649. LDX #$00: k/ Q3 G5 x" ?" [, k2 g" f# C$ Y
  650. STX PPU_MASK, X) B3 ~9 r/ C" E+ z
  651. ;------------------------------5 K% F' h5 q6 _3 k. w% c1 X. J
  652. PPU_Mode_Select  ;模式选择
    : b( }* H# v5 L  p% @# y
  653. LDA PPU_Addr,X
    2 l( c& ~6 q8 a4 B6 `0 l8 n
  654. CMP #Mode_Line
    $ Z, b  |6 T8 d; l) W2 c8 L
  655. BEQ PPU_Mode_Newline  }  R& }* k8 z! S8 t
  656. CMP #Mode_Return
    - D; O& `/ m/ \8 {9 R
  657. BEQ PPU_Mode_Return
    ( [; y* ^' D/ h. p7 f
  658. CMP #Mode_Clear
      B! e" }+ n' P
  659. BEQ PPU_Proc_Clear
    ( p" W; y) [) U8 k) M% y
  660. CMP #Mode_CntLine
    # v# [& g7 I  s' u
  661. BEQ PPU_Proc_Cnt_Line
    $ ^; m! V6 X$ m/ b" a% Z
  662. RTS
    ' r& |( x  a3 c+ _
  663. ;------------------------------" R  D2 j9 e. C
  664. PPU_Mode_Return  ;转下行模式
    ; a% [) I' Z. ~* v: [7 ~! [/ W
  665. LDA PPU_Addr_L% N  ?* Y5 w% u9 w9 ~& V( I
  666. CLC7 V7 N. @, N4 U0 a
  667. ADC #$20! o7 T2 Q/ w2 t2 Y8 s2 Z9 h, V
  668. STA PPU_Addr_L9 w& N2 k$ }6 u5 E  k
  669. BCC PPU_Return_End7 }- H2 a+ S0 c: E; c, k7 C! z, S8 c
  670. INC PPU_Addr_H
    + t/ S) Y* i* H5 D
  671. PPU_Return_End
    - N2 C' d; V1 B2 N  x" g$ v
  672. JMP PPU_Set_Increaser
    / U+ M( K! j& ^8 q% j8 \7 R' a
  673. ;------------------------------
    # j: ^2 h8 n3 S8 g! C$ X# H
  674. PPU_Mode_Newline  ;新起行模式
    ' E+ n& n( M2 E5 X4 [! y8 m" b
  675. INX. F- x8 ~) Z9 {
  676. LDA PPU_Addr,X
    % n: |$ J6 x0 X
  677. STA PPU_Addr_H
    4 Y$ b& r: @5 R. M& q
  678. INX
    4 }' s6 l( P; Z  I/ a' u5 y  I
  679. LDA PPU_Addr,X4 ^5 @& Y. E6 o7 [2 {8 n
  680. STA PPU_Addr_L. c7 q) \/ P$ ~6 s' ~6 c
  681. ;------------------------------
    2 g/ f5 l9 q7 s* I# x* V5 N
  682. PPU_Set_Increaser   ;设置写入地址
    1 p9 L+ @4 |$ H6 @5 G' B) ~/ g
  683. LDA PPU_Addr_H$ O; `8 z" v( w6 R1 x
  684. STA PPU_ADDRESS
    4 C, o4 h# k% W
  685. LDA PPU_Addr_L
    ! H& S$ ~8 y. d% s; V; ~
  686. STA PPU_ADDRESS4 r4 e4 t* ]4 A" x$ ?' i
  687. ;------------------------------5 g& S. f/ E3 v8 H, M7 r* _
  688. PPU_Write   ;写入数据+ W1 ^9 X+ ?5 \8 M! c
  689. INX
    1 G& i. Q  K1 U, ?% \
  690. LDA PPU_Addr,X( I+ U& T; a# w: Y( ^3 w
  691. CMP #Flag_Over6 K# K8 i' j) q
  692. BEQ PPU_Proc_End
    ) r) Z0 u" d, R: g8 n8 a: [5 o
  693. STA PPU_DATA
    & {  o! [: B- i5 x* G- j
  694. JMP PPU_Write7 Z7 z: \& I4 x) u: b! D
  695. ;------------------------------
    8 i; E4 P3 @; @6 h: @) K
  696. PPU_Proc_End  ;单行写入结束. |" o0 f) _: v0 Z8 \& s
  697. INX
    - o- M" [# H7 ~% r; |
  698. LDA PPU_Addr,X
    ! r8 W9 ?- m" U6 g
  699. BNE PPU_Mode_Select& K$ B8 r4 Q6 s
  700. STA PPU_Addr5 F5 v9 t3 Q4 c+ A7 N
  701. JSR Update_Palette_Color$ B# }: d) I0 N! p
  702. LDA #$00
    4 J/ F" ]0 N( ^8 F6 c5 F; H
  703. STA PPU_ADDRESS  a& T5 x8 f' y9 `9 \
  704. STA PPU_ADDRESS
    0 k9 @' x8 x% H
  705. STA Show_Track_Name
    7 j5 ^4 r" G" e' S! m! ?
  706. LDA #Scroll_X
    / D  ?2 b3 i* U* s" e  R) o0 }1 P) y
  707. STA PPU_SCROLL
    : }( C$ m) ^% @/ {/ P
  708. LDA #Scroll_Y
    * T) n/ h, A) u! {% o( R1 t* ?9 M
  709. STA PPU_SCROLL
    * e. I1 l1 [6 I8 |5 b6 b' p
  710. LDA Screen_State
    9 ^5 M. w& ?: }: ~. i" `
  711. STA PPU_MASK
    4 L4 m/ O0 H! a' [# w' i& `: ~
  712. RTS# J, ?* v- P) F$ s* j

  713. 1 F' H" o4 C5 d; h& m3 a, _% h
  714. PPU_Proc_Clear
    5 E8 O. P; m( [4 Z
  715. INX; B6 u% e8 L  ]
  716. LDA PPU_Addr,X1 Q8 t6 Q" z0 P( N# r( i. _
  717. STA PPU_ADDRESS  h' S3 L. U2 j9 T
  718. INX! C& t2 R2 r; H- h, y% O
  719. LDA PPU_Addr,X
    # e* T; a( k9 p, q+ {( z
  720. STA PPU_ADDRESS( |; A( @$ m* r6 Y/ G* O
  721. INX0 \  o* J. k& A" L  N8 G- T
  722. LDY PPU_Addr,X5 Q$ E3 k1 y" u( V
  723. LDA #$007 n8 \+ e  K' K0 L# w6 M
  724. PPU_Proc_Clear_Write5 U. A. m- D9 t  H2 p" p: D' W
  725. STA PPU_DATA
    ) U/ I3 |0 H& K) s3 b
  726. DEY; j4 K' }& U1 R
  727. BNE PPU_Proc_Clear_Write3 S6 ?, s. r/ F# X/ T5 P0 E3 @! \
  728. JMP PPU_Proc_End9 M! S' I! r! {$ U/ S$ Q- @& u- D

  729. + S8 b0 c$ N) @" K3 X
  730. PPU_Proc_Cnt_Line
    & w8 N1 d7 u* ]/ E, L
  731. INX1 G+ Q2 @& L+ d7 Q9 g1 e/ G
  732. LDA PPU_Addr,X
    ( N* c2 m# F, T: U  g, g
  733. STA PPU_ADDRESS
    7 W3 Z: L) Z; d
  734. INX
    ! L; ?6 q, a) b# ]
  735. LDA PPU_Addr,X
    6 Q& s" E! w6 J
  736. STA PPU_ADDRESS0 i9 j" q: s: n- e( l* d( I
  737. INX
    . A2 n8 V- O' }# H; o, M/ R5 m
  738. LDY PPU_Addr,X
    # _0 [) b& ]3 Q' B: t2 u  @2 i8 f
  739. PPU_Proc_Cnt_Line_Write
    . i/ m# {# ?4 T4 p' |7 g+ C2 i2 q
  740. INX
    3 E# F# Q  V& m8 x- R5 H  |
  741. LDA PPU_Addr,X; B5 D6 a1 i/ h' i
  742. STA PPU_DATA
    2 b, ?( |1 B, s9 Y7 j1 j# R( j, x
  743. DEY
    ; c2 \! ], I/ p( L
  744. BNE PPU_Proc_Cnt_Line_Write
    9 Q! u" N7 i9 n3 _
  745. JMP PPU_Proc_End
    4 L- p2 w7 q. A0 ]- w
  746. 0 G' E% H/ A" c$ Q6 |* L
  747. ;==============================6 J) z, m0 \$ _
  748. HEX_To_Dec;十六进制转十进制' j  k! O/ p1 j% \2 M
  749. STA HEX_Data. _% O6 Z! x' j) R+ _
  750. PHA, B' k9 }; \) Q/ D
  751. TXA5 G* E5 [. j- i9 {& y5 u
  752. PHA* t* v5 [% S0 B$ j/ r
  753. LDX #$00
    ) Q* o2 i9 V8 ?6 `& x
  754. LDA #$00
    $ O# G& e/ a7 r  A; j! d8 \8 A6 y
  755. HEX_Cln
    . r% D! j; f3 F: f% W" x+ t
  756. STA DEC_H,X5 w9 k$ @  V0 R* _" y
  757. INX# {/ h) ]' z% |) e& T, |: l# C
  758. CPX #$03
    ' @! ]/ w0 ?6 R2 k0 {! H
  759. BCC HEX_Cln$ H* B/ O7 Z* u  E
  760. LDA HEX_Data0 H% I: K* M, E. l( \
  761. ;------------------------------
    0 r' L5 }3 d) h* r( ]
  762. HEX_100- ^8 Q  F* E/ z- m  m  G/ v  c
  763. CMP #100; L, P3 v. H# g( o0 b  k# L
  764. BCC HEX_102 z7 l# Q# z# Z9 [$ Q: F
  765. SEC/ J( V/ f; h7 G7 k! l1 n$ {3 r2 x. R
  766. SBC #100, L; B/ R2 F! b' I" X+ q
  767. INC DEC_H1 p* C6 G2 \9 Y' d7 h+ C
  768. BNE HEX_100
    2 p. q( g0 X! A' R. G
  769. ;------------------------------
    2 `0 Z2 c7 i! y; ]7 r7 U) [
  770. HEX_10" Y6 L, G/ j# T
  771. CMP #10
    9 u) u8 U4 p9 H  A" g# V0 U
  772. BCC HEX_1
    & I0 }2 v. Y% ]! _
  773. SEC$ m& `3 C5 {( I) Z  [
  774. SBC #10
    , p' I; d% Y0 P
  775. INC DEC_T
      C" ~+ W$ U1 R5 O0 F  C# b$ s
  776. BNE HEX_10) c6 `* F. W% i6 C2 O8 J4 C/ U
  777. ;------------------------------1 r" e. i0 a# C: h& G2 E0 t7 m
  778. HEX_11 ~1 W/ k% @. k, y+ o/ C! g8 ~
  779. STA DEC_L) \7 `8 b: ^  L+ \$ d: F5 g3 d
  780. PLA9 b* B% h+ V/ c$ m3 L
  781. TAX( E) B% f  l8 I
  782. PLA
    , f* o2 @1 P8 Q9 M! L0 ^: r. H
  783. RTS% `/ u, c3 r7 {- E

  784. ' _  N0 T6 r) p" ~- y
  785. ;==============================* Y/ W0 ~( Z! x* m6 G! P) f% c/ e- i6 T
  786. ;音乐曲目显示
    $ v7 x3 ^4 G7 J: W9 z, d4 Q
  787. Music_Show
    # v# c( H) }& N) X% r1 O: {" P! ~
  788. LDA Music_Cur
    ; W& t: Y9 @3 |$ Y
  789. CLC# \5 ?7 i* q' [! ^
  790. ADC #$01
    4 ~9 _& I9 m' f2 c# O0 n" i0 M
  791. JSR HEX_To_Dec. u2 K: Q8 k+ f$ {
  792. LDX PPU_Cur
    9 z- ?: v1 ?, o* y/ ^
  793. LDA #$FD" Z. v9 k" O  E1 p4 X3 h! `
  794. STA PPU_Addr,X! N; U$ Z2 g) }
  795. INX
    2 d% n; J9 L% V; n
  796. LDA #HIGH(Play_Index_Pos)$ ]7 s4 m/ N& S0 M. I6 |* G
  797. STA PPU_Addr,X7 j& ]3 n# G6 \
  798. INX. U9 N1 M# Q  f' A0 D
  799. LDA #LOW(Play_Index_Pos)
    % ]* |5 Z5 Y( |0 h& v: T; i2 }
  800. STA PPU_Addr,X
      W8 F! W' l) j; x
  801. INX
    ' A! V) d3 t5 o
  802. 1 L) M' R4 S$ B- E9 m
  803. .IF Music_Song_Total > 99
      k% ^2 _& I* h( i) W5 c5 K
  804. LDA DEC_H
    & f% k' R  R8 \8 o+ z! r, S& n
  805. ORA #$30
    6 Y! j( Q' C& P2 t5 g6 N
  806. STA PPU_Addr,X
    3 X6 p' S9 |9 T& B& \1 q
  807. INX
    * ^+ J3 i0 I' `* _" Y
  808. .ENDIF
    , ~3 c8 K/ d5 t: L
  809. " n, T/ R: o' n. g
  810. .IF Music_Song_Total > 97 s  B9 T4 u) K, h+ l6 \4 C7 H0 O
  811. LDA DEC_T
    0 j9 G* y; D$ `3 t% V! M: k9 z2 T
  812. ORA #$30
      m( T% p8 B! }5 l5 K% z8 ]. w, a2 ]
  813. STA PPU_Addr,X
    # f5 h, P& X. B/ P
  814. INX
    9 e7 C8 C% S4 h* ]3 S
  815. .ENDIF
    % {. M. `# N* j2 m! m0 c5 c

  816. ; Z% Y3 @4 P7 _' `+ V% O/ V
  817. LDA DEC_L
    ' P# |; C) d8 }0 L+ G2 e
  818. ORA #$30
    0 B6 A5 O! q; o- @: ?8 ~
  819. STA PPU_Addr,X
    / q  |, z) S! U% ~$ e
  820. INX
    ; k$ R, b& a; y/ J2 K

  821. 1 I0 _& r& @1 _
  822. LDA #'/'- j% u2 ?5 i; {
  823. STA PPU_Addr,X
    1 j0 q: F, x. B
  824. INX
    ; x# ^6 c0 e5 p: A, s& A! N
  825. Music_Show_Total* _6 _) m% }% Y2 e
  826. LDA #Music_Song_Total* S! y+ O3 `6 G- l
  827. JSR HEX_To_Dec
    ( ]8 m) i$ g8 ?6 Y8 q& |5 Z( H

  828. : i  i0 k( h. J% s( L1 \$ {# w
  829. .IF Music_Song_Total > 99
    1 P, w4 v" A' I+ |; q9 Q6 |0 d' S
  830. LDA DEC_H
    4 ^; U6 p3 S  h2 K! \2 f. m0 T) H
  831. ORA #$303 F4 z: ]7 ~) v& x( j4 ?+ S/ u2 p
  832. STA PPU_Addr,X
    + S. h. j( }$ k& K6 S+ u& s1 y
  833. INX
    & |. e1 N; M' B* }
  834. .ENDIF7 v7 d0 O/ ^1 x( H2 w
  835. : X, N6 m% Z. W# I$ M5 j& \
  836. .IF Music_Song_Total > 9* b8 d2 @+ ]) r
  837. LDA DEC_T3 Z' m; `  ?0 t+ H2 b6 P2 O2 J: k
  838. ORA #$30$ ?$ H# i4 \, p8 p0 r) Y8 n
  839. STA PPU_Addr,X" K& E0 M: G4 p# v9 t# W7 ?
  840. INX0 ]1 ?7 ]8 [! N  e0 w( `. @9 j
  841. .ENDIF( i- V5 M4 ~3 E! O4 [. Y1 q

  842. % N  z: [) ?9 a3 k2 h
  843. LDA DEC_L1 B3 B; E+ q3 z; E6 t. S& }
  844. ORA #$30/ m; v. ^% Y" v# p3 C
  845. STA PPU_Addr,X* u4 h) k- T' m' N' S- @/ B
  846. INX/ L. S, Z& s8 t& g
  847. ! N' a# D! I" S6 c$ o9 a3 s$ L3 ^
  848. JSR PPU_End- a0 r' L/ W" \0 w, P0 V* K# S
  849. Music_Show_End4 f2 m. j+ Y' [1 s, w. @5 X
  850. RTS& m+ l9 \' o# d4 L1 x5 f% g

  851. 8 C# I, t& S  f5 X# y( S
  852. ;==============================4 ^, T+ f  k4 e
  853. Time_Show;播放时间显示
    & g6 D  D& E6 q2 ]& |( I" O
  854. JSR PPU_Addr_Set/ A# I5 K- a  Z  `% y: v5 p' u
  855. LDA #HIGH(Play_Time_Pos)" Q( K% T" |6 i; W
  856. STA PPU_Addr,X
    ( q+ o7 m: N" o3 @: _7 _7 D7 J
  857. INX
    # a4 \) c( k4 g
  858. LDA #LOW(Play_Time_Pos)% w. W' x% F% [$ N" L! C
  859. STA PPU_Addr,X
    - L  f  ~" v) {5 n1 ~# k. X
  860. INX  W$ F7 W- j5 b' k6 F: S. b/ @
  861. Time_Show_H
    * Q# b1 }* G( W
  862. LDA Time_H
    / j5 B" `2 J# b: X' g
  863. JSR HEX_To_Dec3 ]- \' y4 c6 M
  864. JSR Time_Digit
    . S3 X  X9 Z: d" w7 d3 L5 {: b
  865. LDA #':': ]) d9 \% l9 z8 j
  866. STA PPU_Addr,X2 z1 g% o, q4 Q6 I
  867. INX
    9 Q! n9 W0 C5 h
  868. Time_Show_M  P7 a1 E) B5 Z0 k
  869. LDA Time_M% ^$ ~( z+ R2 h0 i
  870. JSR HEX_To_Dec
    * x, ^( a1 @+ Z' i
  871. JSR Time_Digit
    % A! c: W9 U5 _9 ?5 K* {
  872. LDA #':'
    + U* ~, h/ R( k3 \" x  l6 l2 j
  873. STA PPU_Addr,X( J. N" U6 o0 L8 c2 G
  874. INX( D' X5 o0 D  Z  ~
  875. Time_Show_S
    8 t/ y2 h4 A5 r
  876. LDA Time_S
    # F: B* ~+ \8 J" u. t! W
  877. JSR HEX_To_Dec" ^% e) u. r, b. Y* c
  878. JSR Time_Digit- o7 q8 K# ?; x
  879. JSR PPU_End0 g! o$ r, {* z* ~5 H
  880. Time_Show_End6 l/ Y& C. p& [/ l
  881. RTS  Q1 s$ ^- M2 h+ d
  882. 0 Y* p1 ?4 Z+ h( z& m" f
  883. Time_Digit
    6 w6 O+ P4 k: V" w1 n
  884. LDA DEC_T
    & C4 c, U8 t, M7 G2 P; S& a
  885. ORA #$30
    + @' k, `  f( m6 Y2 l
  886. STA PPU_Addr,X
    6 R- I) Q5 S4 o" o
  887. INX
    - j  Z/ C8 z5 f( s
  888. LDA DEC_L
    8 t/ [: b& f1 G8 D9 d1 W
  889. ORA #$30% i" L+ o. G1 W
  890. STA PPU_Addr,X
    3 L7 }* q! R/ [$ O8 [
  891. INX
    5 D) h. o8 k/ q/ E* j" h% c7 ?
  892. RTS
    & t8 L- m, v! {# D" l
  893. - h7 t+ T6 `* k( c: o' N) j
  894. ;==============================
    9 p* @8 B4 ~1 I
  895. Time_Count;计时: x: `  N3 }* B4 d* N$ w" c9 S
  896. LDA Music_State9 F9 b! Z) s6 l
  897. ORA Time_Wait_Cnt8 E8 y$ s6 e9 X
  898. BNE Time_Count_End! b5 n: E7 h4 a
  899. INC Time_Cnt
    8 i( t- S( z# l  J0 y
  900. LDA Time_Cnt2 l& K/ k" [& ~8 Z6 q% ]
  901. CMP #60
    ) E+ \* q' m- H1 k3 J
  902. BCC Time_Count_End4 x( v5 [2 R; j0 i6 _% h( J- s
  903. LDA #00
    5 C8 Q3 h. H9 {1 z5 H+ Y: W. r
  904. STA Time_Cnt( ~+ ]! U7 B4 J) I7 r
  905. INC Time_S# P  L: m# y1 S$ h* u

  906. . G4 v9 k% D0 a
  907. Time_S_Cnt+ M6 ^3 m4 F( s2 ?2 a( j. H
  908. LDA Time_S
    7 a& ?3 M7 @4 C. A3 Y
  909. CMP #60
    2 W* o' S( b0 v1 Z6 [2 R* F
  910. BCC Time_Count_End6 Q* [4 {1 O: h' o3 L
  911. LDA #00
    # D- Z& ?$ X/ C. n/ {3 R: c" ?: c
  912. STA Time_S8 ^# H: c* T, ]; r0 [
  913. INC Time_M/ z& P9 p% U0 _' h0 h
  914. * v' t$ j! N$ B
  915. Time_M_Cnt# q' f7 P( g8 S# s
  916. LDA Time_M% [7 j6 B) o, h- r3 \! Y8 @
  917. CMP #60
    / v& G* A% z: J/ j3 G; R
  918. BCC Time_Count_End
    , X8 B3 t) z. W& V/ e# S
  919. LDA #00/ y) r( M! d  c! _5 K0 I
  920. STA Time_M
    0 K! c% K7 j- T
  921. INC Time_H
    - K$ B# }, ^- b% Z! Z" T

  922. ; ^+ f$ M7 L& W0 l! X+ c3 u
  923. Time_H_Cnt1 K: t" m5 t  V) X( ~
  924. LDA Time_H
    ( U5 S- W6 S; _) x
  925. CMP #24
    5 Z% B& `% L5 ]5 ~: Q
  926. BCC Time_Count_End
    7 O% I& R: k8 l% T0 I; D
  927. LDA #00
    ) c/ u# e# O  U& m: C+ G4 r
  928. STA Time_H
    " Z5 D: R- d! u' |% M

  929. 8 j; G" l9 `4 s8 k% ^! P3 ?  k
  930. Time_Count_End! C; s* t0 p1 l5 d0 P2 P) b
  931. RTS- h# R( D1 y1 I, ?' D3 P2 X
  932. 4 P# {0 ]  U" u6 D; K0 ~& D
  933. ;==============================2 e' I' P' A1 \; T
  934. Time_ReSet;播放时间重置
    1 D, q% s4 \- @
  935. LDA #$00; [8 }$ F- U2 B( D. a/ j
  936. STA Time_S
    ; f' a1 S/ F: S- {6 J! h5 u; H
  937. STA Time_M
    ! `, w: J2 A  Y* b, Q, Y
  938. STA Time_H5 [- B& G& y/ L4 S- w1 h
  939. STA Time_Cnt
    $ d8 a# {9 U! S3 ^
  940. RTS
    2 Y3 M: S5 G: C* R

  941. 4 b* T( G, G7 J
  942. ;==============================
    2 Y4 a: F2 T  i1 Z6 ?
  943. Music_Bar_ReSet;音乐条重置% e" q6 U" I6 h9 e# ?9 z
  944. LDA #$00. z# I1 d. ]# a9 v% Q" i% A
  945. LDX #$00. B& g. P5 ]" [# m9 V- S5 E/ L0 j& Z
  946. Music_Bar_ReSet_Set& {" V/ }8 c/ e" H) b2 Y/ Z
  947. STA Sound_Bar,X
    ( R' [: q* E: w
  948. INX+ C1 c8 m% q# i: g% \4 [0 r
  949. CPX #$10$ g# f0 v5 @3 Q
  950. BCC Music_Bar_ReSet_Set
    - q/ ?" P! K" Q  w) |
  951. RTS
    0 _: E: ]' V" n& j

  952. % E/ X" x: p# B. O
  953. ;==============================
    6 _# A; z9 ]! v7 Y0 q
  954. PPU_Data;PPU数据写入" a8 X3 h& {' ~2 A4 E' e
  955. STY Data_L# I( q9 |' f( a( Y
  956. STX Data_H
    ; h" z5 F* t) b0 R* G! z/ l
  957. LDY #$FF3 g4 c7 g7 o# K9 H7 G* a- M
  958. LDX PPU_Cur8 f$ S7 R5 Z* E# g& X0 r' |0 d
  959. DEX* z- L% Z- a& a
  960. PPU_Data_Beg1 Y# x& e* s, m; t3 b
  961. INX
    - H+ k1 d. u* v4 J" _
  962. INY6 o$ Y, I  x7 L
  963. LDA [Data_L],Y; T; a* ]- ^5 v( V8 h  K9 {
  964. STA PPU_Addr,X& s9 H( Q$ @- a7 R6 u9 z! y
  965. BNE PPU_Data_Beg
    0 f8 Y& |4 J$ K8 }2 Q1 D4 q; {1 L
  966. STX PPU_Cur5 ?( ?, B, }0 X, K( e; H+ D
  967. PPU_Data_End
    # l5 b+ P' e/ K- r8 l' E
  968. RTS# C3 z. F- D' k% Z

  969. ) Q1 y+ M2 O) J, u0 {' X" s! [! [
  970. ;==============================
    ; e; _3 U  h& S* R, c  n
  971. Music_Stata_Show;播放状态显示
    ( Q( ]. ]2 f6 r* g3 H4 J" i( O
  972. LDA Music_State+ ?4 ~4 K; |* K) @0 p- x
  973. BEQ Music_Stata_Show_Play
    ! R; ?+ Z3 _9 [  U% I- x
  974. Music_Stata_Show_Stop8 h& _( W9 D4 v$ @, e3 d
  975. LDY #LOW(Music_State_Stop)/ l9 Q; p! {* f: F  O! e
  976. LDX #HIGH(Music_State_Stop)
    ! N0 _+ Q) q9 e
  977. JSR PPU_Data! V2 z! j5 T( X4 z: @
  978. RTS
    3 R9 n% ~. G0 W  ^6 `
  979. Music_Stata_Show_Play
    8 i/ f5 H: F6 ]2 g6 z0 {5 g
  980. LDY #LOW(Music_State_Play)
    # q; h, {, A) A* ?" ^  c6 Z
  981. LDX #HIGH(Music_State_Play)* Y/ d5 U1 E  }9 S: q
  982. JSR PPU_Data
    # y/ v% k1 B0 g
  983. RTS* D- K1 B' Z; m

  984. ( ]! q- g# |8 N* e" W- {$ l
  985. .IF SOUND_BAR_SHOW_ENABLE' Z) O1 n; A* d8 X' b  @' y" |' }
  986. ;==============================
    . c4 [) D' f, o3 P  T3 m* l8 M$ K
  987. Sound_Bar_Text_Set;标题与音乐条初始化0 Z4 G/ J% [* B  e' j
  988. LDY #LOW(Sound_Bar_Text_Data)+ b  _. Y; n& B3 n$ C9 A( {
  989. LDX #HIGH(Sound_Bar_Text_Data); c8 }! ?& Q. o' m: Y( m
  990. JSR PPU_Data, e! S9 s, Q5 j* q9 W
  991. RTS
    ' G! X6 K& C1 |5 F

  992. 1 |* I- j" Q9 O5 O1 q
  993. .ENDIF
    # B1 c, o! l; v  {. y  Z5 h+ @
  994.   t9 s- i. u7 m5 r
  995. ;==============================
    1 ]5 s8 k, ]6 ^6 Z
  996. Set_NameTable_Attributes;设置命名表属性( m; T; X5 w( |: b) v) D6 h
  997. LDA PPU_STATUS  a2 i1 R2 A& [) D3 ]; O+ T5 z0 a9 @
  998. LDA #$232 B4 ?4 w! n' ^) q3 g& D3 y
  999. STA PPU_ADDRESS5 _/ w! Z9 k' x- f. [4 e2 ^# D& e7 |  G
  1000. LDA #$C0+ i, A" Z- K; D5 ]4 `9 W" D4 n
  1001. STA PPU_ADDRESS
    ) I. g8 ]* H( d
  1002. LDX #$00* U1 r* C7 D4 u$ q3 C
  1003. Set_NameTable_Attributes_Write
    / H; D' t, K+ Q( r% Z
  1004. LDA Palette_Attributes,X
    ( O7 a3 G! o6 A( U+ f% ?+ q* f
  1005. STA PPU_DATA
    2 J7 f. e8 ?1 {7 V# [
  1006. INX
    ( j  b1 U6 d% i- j
  1007. CPX #$40
    3 q: `! R7 t' K4 E: w& h  u
  1008. BCC Set_NameTable_Attributes_Write0 j$ ]' Z6 S) z" p3 e
  1009. RTS
    $ H$ [9 ^) J' x  \3 a
  1010. + ^5 T/ F( g" R  C9 s5 b5 i1 f
  1011. ;==============================6 Q" u. l% a; {1 y# `  d
  1012. Set_Palette_Color;设置调色板数据
    % C( a! O- B, v# {, [$ k* ]1 y8 K
  1013. LDA PPU_STATUS
    / Q2 r1 ]5 a4 X" A( x! P) _
  1014. LDA #$3F
    ( k; q, k9 Z5 u, a$ \: l
  1015. STA PPU_ADDRESS, N% ^* X$ A: t. f2 z1 g4 D5 Y2 {
  1016. LDA #$00
    & t: a. w3 I8 h5 Z9 \
  1017. STA PPU_ADDRESS2 k$ g( p7 U# X* z( K
  1018. LDX #$00
    8 q! o9 B4 M1 b4 }4 a* e3 ]5 k8 W
  1019. Set_Palette_Color_Write, ~5 O. o  j$ h( k) O& v( _
  1020. LDA Palette_Data,X
    7 j: n& F5 E: Y+ S
  1021. STA PPU_DATA
    % m0 x$ E4 K5 p1 I
  1022. INX' M2 ?" a& _/ A/ S+ W
  1023. CPX #$20
    . N" t* ?0 A/ s' p
  1024. BCC Set_Palette_Color_Write
    9 U$ y4 c) _- V
  1025. RTS4 g6 C2 W; P- W6 B! ^  ^1 K
  1026. ( F7 d( K* R" S# h& y- V7 P' J
  1027. ;==============================
    0 d# g# d& _6 L! a0 Y$ v
  1028. Init_Palette_Addr;初始化调色板数据# H# d1 F% G& T9 k3 O6 H
  1029. LDX #$00/ H/ ~5 u9 A+ B' e1 m
  1030. Init_Palette_Addr_Write
    & h6 A5 y; A( Q# k$ {9 O  F; s# _, E
  1031. LDA Palette_Data,X
    3 C% L% U/ Y6 x6 E
  1032. STA Palette_Addr,X' A. V1 {0 z& J) h. Z2 U# |
  1033. INX1 G/ e9 x; ]1 o4 K/ W2 R! c. W
  1034. CPX #$20
    - k+ i* `" q- i' o3 q0 ]0 l$ K
  1035. BCC Init_Palette_Addr_Write
    ' o2 C9 ~0 ?% b5 W, E7 a3 t
  1036. RTS
    6 C* v% o/ Z7 {% p: Z0 j' {

  1037. 0 l" F$ j  ^; w
  1038. ;==============================
    7 E% S* s! p9 `$ x- J7 }* C  Y; Z
  1039. Update_Palette_Color;更新调色板颜色- V) a' N7 g6 P+ t6 x. j
  1040. LDA Show_Track_Name% J* A8 D# ^  |5 X; ~% ?$ l
  1041. BNE Update_Palette_Color_End
    6 r( P! X9 v* D$ q& o( ]7 y' G2 W
  1042. LDA Palette_Update_Flag% r! K  N0 @- L  |# W
  1043. BEQ Update_Palette_Color_End( \: _: B; V) b! w6 u0 l2 F
  1044. LDA #$3F5 }- g( b/ \# k# X
  1045. STA PPU_ADDRESS  ^+ a& d; w( \- E, A+ ^4 Z4 [
  1046. LDA #$004 j% B- x) i5 J' S) I6 G) X
  1047. STA PPU_ADDRESS2 ?* n- Y  Y' A8 M7 T8 V
  1048. LDX #$00
    - b5 p/ X' Z' C
  1049. Update_Palette_Color_Write
    + `" }; u7 D0 {7 C0 @! i2 y5 _9 X
  1050. LDA Palette_Addr,X, x5 m% i( z8 ~
  1051. STA PPU_DATA4 j; ]/ @1 Z. v# I6 I
  1052. INX
    / |% O( S  ^: {% V* L2 A$ M: |
  1053. CPX #$20! R( V0 @+ \# |/ K. N4 w
  1054. BCC Update_Palette_Color_Write
    ! U/ s# t$ ?9 E: v
  1055. LDA #$00
    5 t( W$ f, e: @' ]: x6 j1 V. [6 A' |
  1056. STA Palette_Update_Flag
    % K4 \" M+ p" H  w/ |$ C' B$ d: `
  1057. Update_Palette_Color_End
    * ^' y% W# `5 a+ N/ T
  1058. RTS0 @8 {; {, [  @& M4 C: m8 [

  1059.   h' ]8 P* {; E  _- H+ B" B8 d
  1060. ;==============================
    5 G' ?3 F7 {; O0 ^8 z) l
  1061. Update_Palette_Data;更新调色板数据& L. T6 C# [: w- `0 B( ?2 c- ]
  1062. LDA Show_Track_Name5 [$ `* o5 H, N! O+ e/ q
  1063. BNE Update_Palette_Data_End3 R) ^( B, k6 T. A  z, ~1 C9 e* H
  1064. LDA Music_State
    : j% s& L# S! C! W/ n$ H  ^
  1065. BNE Update_Palette_Data_End
    0 @, d, V6 v4 ~7 Y; c* E5 |1 v
  1066. Update_Palette_Data_Check; _7 d: |' z) ^9 A$ t+ e
  1067. LDA Palette_Wait_Cnt
    ; i* z! Q1 W9 h# }9 v
  1068. BPL Update_Palette_Data_Check_Over5 t: i# u2 T! p+ U" N* u
  1069. LDA #Palette_Update_Interval
    2 x/ ]* D! o5 w; b
  1070. STA Palette_Wait_Cnt
    ; i& D* Y1 x: g3 k' U2 W
  1071. Update_Palette_Data_Check_Over
    ; ]3 ]7 E3 Z7 y+ o* v
  1072. DEC Palette_Wait_Cnt
    . ~6 U  c7 c: K- ?+ T, ~6 P1 d
  1073. BNE Update_Palette_Data_End0 V: N' Y5 S, x! n7 d: g+ ?
  1074. INC Palette_Update_Flag" C* P- M: i9 m6 q
  1075. LDA #Palette_Update_Interval
    1 F, `2 w! S, Q/ A9 e: ?4 ]" v; Q; H
  1076. STA Palette_Wait_Cnt0 ~. H% s7 @- o  J8 E
  1077. LDA Palette_Update_Addr
    ( w! z6 R( D1 u/ j- {7 Y& V
  1078. CMP #Palette_Update_Max! K7 T1 [/ i. N  b. _4 G
  1079. BNE Update_Palette_Data_Set, n, y4 v5 g% P' d8 p" _' d8 w
  1080. LDA #Palette_Update_Min - 1
    1 V' ]! F) o0 H* n/ g
  1081. STA Palette_Update_Addr
    1 i5 D* Y+ a/ t! @9 ]5 ^! N
  1082. Update_Palette_Data_Set
    4 e* c# c! }  B' Z, B' ~/ }: l
  1083. INC Palette_Update_Addr
    1 r* w0 a+ [8 r. l9 z5 N
  1084. Update_Palette_Data_End% v: d% J! B- R7 h' V" r
  1085. RTS9 k: N6 s3 k& U/ Q

  1086. & ]+ S9 A" K6 {4 t" d9 H
  1087. ;==============================
    4 m! m8 M  I1 B6 \0 o
  1088. Show_Music_Text;显示静态文本* E1 Z& z+ v" _
  1089. LDX #$00; I. P. x7 v3 O: L
  1090. Show_Music_Text_Set
    , d& h+ U8 w7 a+ p: g& P
  1091. LDA Static_Text_Data,X
    8 H. v7 C) M& A4 R" ~' ?7 ]' ?  L
  1092. STA Data_L* c" x3 I* P; E# `# a
  1093. INX
    5 }: y- L  z5 L. r: U! `
  1094. LDA Static_Text_Data,X  t  y/ R6 z' U0 U% T4 T
  1095. STA Data_H
    / c( d9 [7 @5 N0 `+ n6 C
  1096. INX( ?$ T& ?; K% h2 J
  1097. LDY #$00  p' k% J5 m/ _' R" ^( D
  1098. LDA [Data_L],Y% l4 R1 s5 f( j) z& X
  1099. STA Data_Cnt
    ' S" \, P$ C) _8 }
  1100. DEX* L9 ?0 a; G; k4 P
  1101. DEX
    $ h( h/ H& O: J
  1102. LDA Static_Text_Pos,X: @( g9 K* e$ x$ p
  1103. STA PPU_ADDRESS
    ) ?, b7 F2 V9 J* n0 T9 C" U
  1104. INX+ a7 F& y' X( s- o3 j9 s4 J
  1105. LDA #$20  @# m$ x& g- n. Y7 q9 }, o
  1106. SEC
    0 L: O6 o: c! a# }8 X4 J: K6 W
  1107. SBC Data_Cnt" W( i/ x! j$ `
  1108. LSR A
    ! f& e% l. V) |3 D) i+ K
  1109. STA Data_Buf5 o$ n4 U; j  O1 F% b
  1110. LDA Static_Text_Pos,X$ b4 w1 h' {/ i7 {2 H
  1111. AND #$E0, Z6 \$ |# a6 f, K  q4 i$ W; s
  1112. CLC- L( p0 O8 c% C
  1113. ADC Data_Buf- D" {. C3 t% J( r, ]' b
  1114. STA PPU_ADDRESS
    - U1 S4 ~% k3 L$ }  s; |2 j8 w
  1115. INX/ s, G8 D; e5 S; s9 L
  1116. Show_Music_Text_Set_Write
    % N  y4 [/ Y& k1 @1 x
  1117. INY& B0 l$ |( r" h6 s( c  W
  1118. LDA [Data_L],Y$ }6 a1 c1 i0 s+ P+ K: H+ @% s
  1119. STA PPU_DATA
    $ U# A& \/ p; x$ G6 m
  1120. DEC Data_Cnt. Y& K" \( t, y. C
  1121. BNE Show_Music_Text_Set_Write+ r2 ^, }  L. t: l1 y; a
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos" K- W/ K$ W# T! f! X
  1123. BCC Show_Music_Text_Set
    8 W% l) M; A5 @" o( L9 G, ^+ l
  1124. RTS
    & P  g' l" _" Z% [, |
  1125. + l: r2 \( N( b/ C
  1126. ;==============================
    % }6 F7 m+ J7 ]5 U
  1127. .IF Track_Name_Pos;显示曲目信息
    % ?: O1 X" @) W# r4 \$ R. b* S/ n5 v
  1128. Show_Track_Info
    , I. [% }1 ^, X5 {! ]3 H( ]; i
  1129. INC Show_Track_Name0 b( D5 H* u4 K+ a% o
  1130. Show_Track_Info_Clear+ x( z7 S  l! B
  1131. LDX PPU_Cur
    , Y! o2 T8 ~/ j  D+ G! W
  1132. LDA #Mode_Clear5 Y1 ?6 u: k# k- X& t; H) f
  1133. STA PPU_Addr,X2 P! {* J+ o- b; p! I6 |
  1134. INX3 F3 W$ A& @$ x) H

  1135. 1 Q9 J, g: }% y5 S- L& p, T
  1136. LDA Music_Last
    / E6 r& O8 K9 i7 N- g& y
  1137. JSR Show_Get_Track_Name_Center_Pos
    $ {0 Y$ G' X" N2 X
  1138. Show_Track_Info_Write_Cur% G- H3 g" x9 A) T4 e" [: I
  1139. LDA #Mode_CntLine
    0 L3 \% C3 k0 z; t9 [
  1140. STA PPU_Addr,X/ H' _& \2 O6 ~9 o  Q( P2 a
  1141. INX
    , s( E% F7 Z5 L2 p. W6 T

  1142. , Y% W0 D0 |) o
  1143. LDA Music_Cur
    , X# i: G. K4 d, ?9 |$ J6 s7 z- _
  1144. JSR Show_Get_Track_Name_Center_Pos$ p8 K9 ~( l/ T7 r5 i: R

  1145. 4 J. S' n& ?- b2 J& ]. a9 V
  1146. Show_Track_Info_Write_Cur_Data/ H/ |( ]& [. p9 P9 u$ s! H
  1147. INY
    ) ]) Z! V1 `3 I, M- i0 a, E
  1148. LDA [Data_L],Y
    ) A" @: ~: [; ?% O. w
  1149. STA PPU_Addr,X
    $ U) [3 D! M" _/ w
  1150. INX$ l2 L# T6 p' A* i4 g7 ?$ ~) M2 v
  1151. DEC Data_Cnt
    9 x% A( P4 {. @/ ?0 l  F
  1152. BNE Show_Track_Info_Write_Cur_Data
    . ?3 }8 H+ p8 z0 T, D6 O% k
  1153. Show_Track_Info_End
    7 [/ _) [: x  C) {. J
  1154. STX PPU_Cur
    & N( l  b0 F' J: D
  1155. RTS5 J5 w1 v6 M7 C: p' H

  1156. , }6 h6 I0 {  I4 ~" X
  1157. ;==============================7 C6 W% q" W' e0 I" ?
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置1 O% [7 [8 y# U
  1159. ASL A
    # |( A$ [! V, \2 ~7 L, A9 t
  1160. TAY  {. B8 o5 m. H9 e
  1161. LDA Track_Name_Addr,Y
    , o8 z* f% I6 o$ A  o" r
  1162. STA Data_L
    % A* o) W! t. p5 B8 ^
  1163. INY
    $ m" e4 G( N+ P( Z8 H
  1164. LDA Track_Name_Addr,Y7 v/ I2 K. i- N0 g) }; i: P. T5 V
  1165. STA Data_H/ n, _6 K( }/ i4 T0 |
  1166. LDY #$00
    2 U, A: p7 ^; i0 x9 S+ G$ D
  1167. LDA [Data_L],Y
    : H# C! u6 T1 {# ~% e9 R/ v/ J- G/ K
  1168. STA Data_Cnt
    8 {; M! G% x8 z# C6 o) ~
  1169. LDA #$20$ u7 Y% \% j  o
  1170. SEC& p, D" `, M* _$ o$ U* _9 [8 R
  1171. SBC Data_Cnt2 x+ N: L( w6 C1 r! h
  1172. LSR A& I  z- H: G- `- Z
  1173. STA Data_Buf
    / W. Z6 D. G8 ~6 a1 T
  1174. LDA #HIGH(Track_Name_Pos)" @+ `! _! N3 w) t) P" q
  1175. STA PPU_Addr,X# j" V) [4 ?% r7 A2 y
  1176. INX
    % u) Y5 C! J' o+ O- W
  1177. LDA #LOW(Track_Name_Pos)
    / T9 ?! j  P2 f( {4 f2 V
  1178. AND #$E0: P* B/ W2 I3 g( y9 D. d8 S
  1179. CLC, t; J# W2 ~" |$ }( _! p+ U
  1180. ADC Data_Buf
    2 W3 a- ?- O( G2 e: |; a
  1181. STA PPU_Addr,X
    : }& k5 b% f  F. t: U
  1182. INX2 q; f/ ?' w. C7 W+ {
  1183. LDA Data_Cnt
    % I" d1 d2 A2 v  w- y
  1184. STA PPU_Addr,X: h- u& W* F0 E4 a# f9 h
  1185. INX! [4 ?" k% l2 k: a
  1186. Show_Get_Pos_Center_End
    ; N4 Q) `: d( A+ J
  1187. RTS, O) E/ e/ @# d; L; M; x' u+ V- J
  1188. .ENDIF4 x5 d: k. q6 p2 J$ j. [3 x

  1189.   N9 A/ m& `6 u3 C; D6 U; |
  1190. ;------------------------------
    & E% ?+ B- v; u1 i, c
  1191. ;命名表数据
    3 _, J3 X* E) t
  1192. Palette_Attributes3 ]7 a$ J5 X, A0 t! f, _- T
  1193. .IF SOUND_BAR_SHOW_ENABLE
    % _. ?5 W) N9 K: P
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    9 d# G% [) q+ C; R& p6 g; E
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ' u+ k1 ]- g# j4 a3 [
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    % b8 L( r4 a* d8 o! U
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    : c6 k# @( V/ v" _2 D4 s; `6 q
  1198. .ELSE- `) v. p/ |1 Q. P7 |  z0 x
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00* P+ P9 a5 N5 ~7 B. Q' w) \& m' X
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    3 d3 t7 U, S" E" G" {0 @
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55! p  v' Y! E: Q8 L4 s
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55; V9 O  o- d; Z
  1203. .ENDIF
    1 r! j: O* u6 @6 l" R

  1204. 9 V$ E: H0 |! O' l: v) v2 B
  1205. ;------------------------------
      y7 J0 K4 y' m  v" w
  1206. ;调色板数据
    4 k; L0 c! W- \
  1207. Palette_Data
    9 ]/ f5 z4 q3 V& W# L9 q/ u
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    + h2 e2 }0 W9 ^' W
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F- D+ h7 K) Z" |5 e! I6 ]
  1210. ' H5 @+ Q3 L& n. s4 H/ F7 q; t) c
  1211. ;------------------------------/ @7 Y9 I7 n' {% E, E8 h
  1212. Static_Text_Data0 m- C3 a3 I9 D' b+ J
  1213. .WORD Static_Text_Title_Data
    1 [$ O* G6 r9 M. C
  1214. .WORD Static_Text_Author_Data
    ) r+ d# L- w0 c
  1215. .WORD Static_Text_Date_Data; t8 O9 A+ H3 F3 Z# l  E; d
  1216. Static_Text_Data_End
    ; b; D: ~; j$ x& K% i. h
  1217. : l2 q0 d; t$ w2 b
  1218. ;------------------------------
    ! M5 P7 y% }7 T7 A! n9 b% f! e
  1219. Static_Text_Pos
    ( w0 {+ B' \& I! `  j6 a
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)! G5 `# P- a- f5 R7 f- P4 y
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    9 y4 J$ b; C. Z$ V
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    5 A- F8 C* ~+ g$ q3 k! d
  1223. Static_Text_Pos_End6 q' H; ?' G6 N6 u
  1224. 2 ?" }/ A( I3 r* e% O
  1225. ;------------------------------
    1 B2 S7 `( ^' V# ]
  1226. Music_State_Stop) T, Q2 c# f3 q
  1227. .IF SOUND_BAR_SHOW_ENABLE- g' k" {( y  @# W; Q! D
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    * f( N; e; W6 z- g
  1229. ELSE
    ) U, u2 Z( ^* s; ^$ p' ^1 n
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00! c6 O: o5 L9 U: o4 z
  1231. .ENDIF# G4 ?& A" L  F6 M
  1232. Music_State_Play) g0 m9 F- q2 q# U
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00, F% V7 E: j6 D: X7 A& F+ M: s

  1234. ' P4 F$ v% d7 ~/ |9 @
  1235. ;------------------------------
    ( d8 p& F. n, N+ }5 M
  1236. Sound_Bar_Text_Data;声音类型文本1 ?( Y2 T/ {4 t& X
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)+ m( b) z  s( H
  1238. .DB "SQ1-",$FF
    " b% z! `& C/ w+ U" ~
  1239. .DB $FE,"SQ2-",$FF. X3 ]( J. z! }5 _9 L
  1240. .DB $FE,"TRI-",$FF
    0 _8 H/ ?; o- O2 b/ E+ D
  1241. .DB $FE,"NOI-",$FF
    7 p3 J4 e! R1 y
  1242. .DB $FE,"DMC-",$FF,$00
    1 E" R5 [2 M0 n

  1243. 6 C; \% @+ m! [: f3 p8 l
  1244. .IF Track_Name_Pos
    # D' ~% J! x& S) m( r
  1245. ;------------------------------
    # ^/ i8 [8 B2 z: |+ S2 E
  1246. Track_Name_Addr;曲目名地址索引3 [4 \* U2 B; A  e9 Z6 C6 u& \: z4 p
  1247. .WORD Trackr_01
    0 F+ O: M; n" E. V0 l; }2 @9 Q
  1248. .WORD Trackr_025 g8 S+ G' D( {! R4 Z: Z
  1249. .WORD Trackr_030 s+ F% i3 V: P" w  T6 \
  1250. .WORD Trackr_047 @4 F. V8 e0 n8 R) ]1 s( G6 [
  1251. .WORD Trackr_05# T& ]9 i) Y' W$ ?
  1252. .WORD Trackr_06
    - Z5 _' m3 v* O! j% ]9 S+ @; i* [
  1253. .WORD Trackr_07
    3 `/ h& |) H0 c2 m: t0 M# C
  1254. .WORD Trackr_08
    ' w  U+ l3 C5 X( ?
  1255. .WORD Trackr_09
      T: k8 _9 z. o! t9 O
  1256. .WORD Trackr_10
    2 l- @2 [2 `" g" H# k9 E
  1257. .WORD Trackr_11! f( X* R7 A' y+ [3 B' P
  1258. .WORD Trackr_12- w+ I0 I  ], C0 s% H7 f2 M/ c1 s% k
  1259. .WORD Trackr_13
    7 z+ E# Y$ R4 w2 q$ ?4 h
  1260. .WORD Trackr_14
    9 h1 b* t6 z  P3 O6 z$ l+ k2 j  d
  1261. .WORD Trackr_15
    / ~" d$ w2 a! X$ c
  1262. .WORD Trackr_163 B1 U! J" K& Y
  1263. .WORD Trackr_17
    0 R# g5 o/ s+ j  L1 b' K5 c& W4 ~# h1 }
  1264. .WORD Trackr_18
    & o+ E1 \: I( Z1 u  p1 }
  1265. .WORD Trackr_197 f0 {* v; _$ e7 D; I) e; v
  1266. .WORD Trackr_20
    % [$ A, f# W3 C% C9 L, a
  1267. .WORD Trackr_21) r) t4 d- H4 |, [6 e9 M3 v  c
  1268. .WORD Trackr_22
    % \+ M! k4 D' k% m9 S2 I
  1269. .WORD Trackr_233 e3 X% J' ?7 X4 `  l4 i- ^  i
  1270. .WORD Trackr_242 Y6 p3 s/ f1 l
  1271. .WORD Trackr_25! C* M7 @/ Z4 l7 a
  1272. .WORD Trackr_26" ?2 w2 X/ A+ M3 @9 j3 m
  1273. .WORD Trackr_27
    6 x& M+ ^) Y+ \+ u2 Z" ]
  1274. .WORD Trackr_288 w6 W( Y0 C1 u. T7 }
  1275. .WORD Trackr_29  b) \$ g; M3 {0 ^
  1276. .WORD Trackr_30
    / ]  v* P+ t# {) ^
  1277. .WORD Trackr_31+ [7 K, V, U5 ]" V0 S9 O# ?
  1278. .WORD Trackr_32
    5 X+ q  G- R) t% v
  1279. .WORD Trackr_33
    " J3 u% O1 [6 j1 {
  1280. .WORD Trackr_34# j: B+ n" n$ K- l( h) `7 @
  1281. .WORD Trackr_35
    $ `& o4 C/ z5 ]/ R
  1282. .WORD Trackr_36
    6 C2 P  S% _/ ?9 K3 e
  1283. .WORD Trackr_37+ c4 h2 ?' e2 |/ L. L9 \
  1284. .WORD Trackr_38
    1 Q* A/ T  Y2 x' R% J  k( }+ {
  1285. .WORD Trackr_39$ b' f7 Y8 M2 g) R

  1286. / O" z$ f) `+ S1 Q4 M( B+ |
  1287. ;------------------------------: i! Z7 ^# r. x( `) z0 w
  1288. Trackr_Name_Data9 m% M& a& w+ B/ [
  1289. Trackr_01 .DB $05,"BGM 1"" K) w( a# u( [, `; |
  1290. Trackr_02 .DB $05,"BGM 2"
    % P7 r! @1 U$ x+ l5 V2 a
  1291. Trackr_03 .DB $05,"BGM 3"
    8 d: G/ {( |# P- B- |
  1292. Trackr_04 .DB $05,"BGM 4"
    9 }; o& K2 H$ n0 Q5 a! Y1 \
  1293. Trackr_05 .DB $05,"BGM 5"
    % K$ P* h. M0 Y) l. I+ h
  1294. Trackr_06 .DB $05,"BGM 6"& }5 k$ ^- d7 Y+ Y
  1295. Trackr_07 .DB $05,"BGM 7"8 j$ m( V" l8 M3 P' P
  1296. Trackr_08 .DB $05,"GREAT"
    , ?4 ]; G& ]/ p; v1 j7 Y# t
  1297. Trackr_09 .DB $08,"BOSS BOM"
    : v: N" }) M1 x. \0 ?
  1298. Trackr_10 .DB $08,"BOSS2BGM"2 K8 w  G+ }1 K2 @) p9 \+ U1 O6 H6 h
  1299. Trackr_11 .DB $07,"P CLEAR"  b8 c0 x5 b* y! P: P
  1300. Trackr_12 .DB $07,"A CLEAR"
    ) o: |9 I; [+ o% }0 Q1 `) U) I- v
  1301. Trackr_13 .DB $04,"OVER"
    + W/ q# u; B  T* |4 J, l
  1302. Trackr_14 .DB $06,"ENDING"
    * b( R# q) ?* X  m/ D
  1303. Trackr_15 .DB $04,"SUTA"
    , r4 ]2 ?5 \7 {) k
  1304. Trackr_16 .DB $07,"THUNDER"
    ' v( x0 D6 n' m; ?9 G9 r/ Y; |
  1305. Trackr_17 .DB $04,"SHOT"
    1 H# q4 z* l: h  S, K7 L" }5 O: y
  1306. Trackr_18 .DB $05,"LASER"
    9 g" [6 W' x  \
  1307. Trackr_19 .DB $06,"SPREAD"
    ! U* j6 |$ R' e; m9 l1 O
  1308. Trackr_20 .DB $04,"FIRE"
    # g4 d/ {, i9 n  I  N1 D$ {
  1309. Trackr_21 .DB $06,"B SHOT"
    1 m3 \* }8 }6 a0 W0 D. G
  1310. Trackr_22 .DB $08,"T DAMEGE"
    + n+ |2 e9 O6 t8 e8 z
  1311. Trackr_23 .DB $07,"HARETSU") ?8 u: X% U6 M5 d; b
  1312. Trackr_24 .DB $05,"T OUT"  {  K; Y4 d0 j
  1313. Trackr_25 .DB $05,"Z OUT"4 F5 C0 h! L/ K7 y! _
  1314. Trackr_26 .DB $05,"A OUT"% U; o' U6 F6 p/ F
  1315. Trackr_27 .DB $04,"ROLL"$ r1 c/ v1 c5 \; j# E+ j
  1316. Trackr_28 .DB $06,"APPEAR". \. @4 I8 ?# l( F
  1317. Trackr_29 .DB $05,"POWER"
    5 j0 Z1 L2 h3 x: [& P* ^! E4 f) x
  1318. Trackr_30 .DB $07,"BOKK BK"
    $ @% `4 l% G7 L0 {4 B
  1319. Trackr_31 .DB $08,"BAKUHA 1"1 J8 i! a1 |$ I# V  N+ Y3 t6 O
  1320. Trackr_32 .DB $08,"BAKUHA 2"& L! Z# N; K' v+ o
  1321. Trackr_33 .DB $05,"ARUKU"
    8 {" k! I7 k3 t) e: R  S& ]
  1322. Trackr_34 .DB $06,"JIWARE") A, K) o  }/ _$ d% l
  1323. Trackr_35 .DB $05,"SILEN"
      D$ ]. s+ W2 @0 k4 q$ j
  1324. Trackr_36 .DB $05,"P 1UP"
    ' ~! q/ w, @1 R. K9 l3 K: t
  1325. Trackr_37 .DB $05,"P OUT"; Q4 }& `5 P! `! z3 `  ^
  1326. Trackr_38 .DB $05,"B OUT"
    7 N7 h. N1 R. t
  1327. Trackr_39 .DB $05,"PAUSE"
    % c: O+ H0 I! ?8 J5 ^1 t( \% E

  1328. 6 C3 X& Z3 x$ u, G9 a  D0 m
  1329. .ENDIF2 Q3 o9 {2 }* H$ X+ Q0 P4 B* ]8 n
  1330. 5 j! v5 o/ h& l# X: j% r, ]' p  V
  1331. ;------------------------------
    6 ?) A6 B+ U$ O) Q1 o
  1332. Static_Text_Title_Data;静态文本数据
    " j$ s5 y( X: |' u$ q7 F
  1333. .DB 12, u- x4 k8 ]  u( L  Y& P( }
  1334. .DB "SUPER CONTRA"- ^1 S: w# ~; Y& s$ U
  1335. Static_Text_Author_Data
    ) p- ^5 l/ a! [0 n' o' D* c7 e
  1336. .DB 23
    ( n" F8 E7 V* e+ x% g; |
  1337. .DB "EXTRACT BY FLAMECYCLONE"/ O, x. Y) M/ L: Q) p% D% D
  1338. Static_Text_Date_Data. _4 m; n, d( ~; ^' B# m* U' V
  1339. .DB 10
    - r! r+ }! Z5 b4 u5 |5 u) o5 H8 H
  1340. .DB "2023.07.11"( X4 t1 `. t: Y0 N* r+ g9 F+ [

  1341. 8 ^8 R; z1 V4 S% B5 Y  [
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    ) l$ E% p1 b; i7 q% S
  1343. .ORG RESET_ADDR& h6 {7 D/ G4 l$ ?9 O
  1344. $ |" m7 O( ^( r  b4 H' l

  1345. 9 i3 B5 m* w- Q% T, |
  1346. ;==================================================
    , H& H  u. l/ f! W6 T1 L
  1347. ;切到主程序bank
    ; Y0 x$ q; D6 T# m, ^, k
  1348. SwitchMainBank- h2 h0 a/ E2 V, [1 w7 D  j
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    / a3 |" b! B2 u6 d
  1350. JSR SwitchBank8000
    : V* C0 p6 Z- @& P1 @; |" k; y' `
  1351. RTS- x: v+ _. Y  G4 X. a. `( p
  1352. 4 k* d$ S, r( i' q
  1353. ;==================================================, v/ Y7 i9 L* |# ?- M* U
  1354. SwitchBank8000;切换bank到8000-9FFF
    6 Z- v" y( n. ~( N# g) u. R, L! M6 K
  1355. PHA
    ) P. s2 S4 \* v! j# g' X& g
  1356. LDA #$06
    ! X/ L6 j, S( \; l2 Z
  1357. STA MMC3_BANK_CTRL: `6 N5 i7 m& V) t/ c  R& s, P  U
  1358. PLA
    : V- m2 `! K* l6 t* G2 }4 [. L
  1359. STA MMC3_BANK_DATA
    + ~1 n& S+ m; B! V9 N
  1360. RTS
    : k7 I2 c  k! n
  1361. . ]4 v1 F9 `' m
  1362. ;==================================================" F" J& E% q- ?0 m0 W
  1363. SwitchBankA000;切换bank到A000-BFFF- t& x7 F9 r& @6 t, f. o* I/ e# O; M  X9 n
  1364. PHA4 @1 V9 o* z" v) w2 n
  1365. LDA #$074 h+ |/ X! D$ Y& X6 b1 e: l& y4 R
  1366. STA MMC3_BANK_CTRL9 K' `& T, t7 M* D7 [) u( d% q
  1367. PLA# u( M) `8 n, q9 C9 U4 ]
  1368. STA MMC3_BANK_DATA7 [) z5 O: P3 N% m5 _3 o
  1369. RTS& x, q3 O" v& N, d  [0 `0 h( G
  1370.   Y1 e, A& l0 |/ Q. s5 H
  1371. ;==================================================
    8 Z9 p" `- F& [  R* T0 o' I
  1372. Sund_Bank_Init;音乐bamk初始化
    6 Q' N6 C" A* F0 Z) u
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    2 S5 S- z3 ]5 k* ^8 D
  1374. STA Music_Bank_8000& Z5 p# h; `( J. ]0 }& ~9 J
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK3 ]" L0 w, o+ {; Q
  1376. STA Music_Bank_A000# I+ L8 W8 i0 i/ ~  k. A' `( i3 y8 @
  1377. RTS
    0 b9 J% s& V) d1 o' q
  1378. 6 R$ `- N* `: {' r9 K, ]$ I- K
  1379. ;==================================================, X+ Q: F4 p8 L. [) `
  1380. Sund_Bank_Set;切换音乐bank
    ; r1 H8 A9 E2 H
  1381. LDA Music_Bank_8000
    ' E4 X4 G& T6 S  o- w  L+ ~
  1382. JSR SwitchBank8000
    , B: `5 `8 J( c4 q! G
  1383. LDA Music_Bank_A000$ t& I+ _) s' ~/ g1 X  \
  1384. JSR SwitchBankA000
    ! b. n$ \$ K+ B; |9 t
  1385. RTS
    ' G; i. t  \9 W. s1 E4 a' S. {
  1386. . c- U$ G7 X$ N  O8 W
  1387. ;==================================================
      ^6 A" Q/ G% b6 `. _) t
  1388. Sound_Init;音乐初始化
    . W6 Z5 X* Q1 y
  1389. PHA
    & m2 e- D2 Z& [" D- T* H
  1390. JSR Sund_Bank_Set6 z) T" u) \1 i2 ^0 X' t- z
  1391. PLA
    8 E4 E( w$ J9 ]- m! n$ F; j! ~) K, M, B
  1392. JSR Music_Init_Addr
    5 k7 C) F. i( S3 o* r3 e, k
  1393. JSR SwitchMainBank
    $ G6 e* T8 O, y8 s! @, o
  1394. & t+ D# \3 J+ w5 N1 m$ h: N
  1395. JSR Music_Bar_ReSet
    : X' X; ]0 ~9 {" h5 P( U* x% O$ W
  1396. JSR Time_ReSet
    * |: b+ g- `  _$ x/ b
  1397. LDA #$00
    8 m% g+ P# k4 u$ n. W
  1398. STA Music_State, C9 a9 |# x1 P2 t* ^4 F; O) @& ^) K
  1399. JSR Music_Stata_Show
    0 [. b) D* m2 L$ V- b
  1400. .IF Track_Name_Pos: N0 m3 W( y8 t. X+ N) H0 K
  1401. JSR Show_Track_Info1 t) t$ S7 f+ T  x
  1402. .ENDIF7 _' K! G1 R( X- P1 X/ ?2 H

  1403. 4 v1 k4 c0 c/ v  v% W" R
  1404. RTS
    ) M6 @: u2 I0 R0 ~& F# D6 R

  1405. ' m0 G6 z0 P+ Z5 w
  1406. ;==================================================! L9 k! |" z" Q6 X* l- Z. X
  1407. Sound_Play;音乐播放# ~3 H5 r6 h; u
  1408. PHA
    ( G- V0 v* Y/ s$ @& w  I: @7 A
  1409. JSR Sund_Bank_Set
    4 Z' T" W& x0 {0 p2 p
  1410. PLA" Z" c& q0 v- }+ F3 t
  1411. LDA Music_State
    6 }' f5 M7 ~" i, [. u
  1412. BNE Sound_Play_End4 i1 m( J2 Z& j8 m$ F2 i
  1413. JSR Music_Play_Addr
    ! ^- j4 L4 A7 j1 |  e4 M% r; T
  1414. Sound_Play_End; R; U4 b) f( F0 ?! U
  1415. JSR SwitchMainBank/ o/ J4 }& p9 @
  1416. RTS2 v; F) @; g9 X6 p6 ~
  1417. $ R5 y: B; Y  B- t$ x
  1418. ;==================================================
    $ c& L# n' F! G- G
  1419. .IF Music_Reset_Addr% `0 P4 K) t0 |* ^- @" r# B5 N( x; Y
  1420. Sound_Reset;音乐重设(如果有的话)5 \- D: K* K8 l8 x+ S
  1421. JSR Sund_Bank_Set
    $ O/ _% M3 ?& B) S, H/ J6 M
  1422. JSR Music_Reset_Addr! o7 R5 Z& L6 ~9 ^4 u+ d0 I
  1423. JSR SwitchMainBank
    , H* L, V) h2 ~2 m
  1424. RTS
    ! C; z, V+ I9 e7 @6 W$ Z% b2 c! d
  1425. .ENDIF
    7 Q& y8 o9 s: R' h4 |' A% W
  1426. , i$ Y/ M. x/ W( C- Z  T
  1427. ;==================================================
    # n% p# E5 D& n2 q, v
  1428. MainLoop;死循环
    1 y( [2 m: a) u9 K
  1429. JMP MainLoop0 B0 ^6 g: O0 C  P0 B

  1430. . ?5 q. ?: v# T4 O3 q- W
  1431. ;==================================================) ?- ~; m, F% i8 m
  1432. NmiProgram;Nmi中断处理, g5 V# D; _9 U4 t; V
  1433. PHA
    4 ^; _3 Q5 {4 p1 M0 m' b
  1434. TXA( B- z% ]/ F* L6 Y. t
  1435. PHA
    3 `. `5 r2 E! L0 H" u
  1436. TYA
    6 N, V8 Z# g4 x9 ?: Z& d
  1437. PHA
    7 F$ n; E; ~6 P' F1 Q% ^5 ?" _% V/ q
  1438. ) g3 `5 \9 e9 o* m
  1439. LDA PPU_STATUS
    ; Z3 P4 e7 m, f* a4 {: U) ~
  1440. LDA #$00! c. @0 E/ @+ v7 @1 J
  1441. STA PPU_CTRL4 }' m- i. c5 ^# `
  1442. % P+ J# j- [# n
  1443. ;切换主程序bank, q$ k) O/ B8 \- b0 W7 A4 N
  1444. JSR SwitchMainBank- n5 J& q2 d3 D7 F8 Q
  1445. 4 B' ~6 N+ g. J7 U" j
  1446. ;NMI处理, g- [! m  q- n3 O0 h% Q
  1447. JSR NmiProgramProcess
      S3 {/ U+ N4 J5 Y! W/ k. H

  1448. 3 G2 A. J" Z9 L1 k
  1449. Nmi_Proc_End4 T: V" l/ u- y- G0 o  w
  1450. PLA2 j" x+ b  W# F- b7 Z, x& e$ ?# P
  1451. TAY. C8 b! q7 a" K& n- H
  1452. PLA
    1 M. x8 M% S' p$ e
  1453. TAX
    1 N* c  A& G  q
  1454. PLA% R' l" U$ f% Y

  1455. $ o8 W3 B3 p2 {* A: g$ x6 [
  1456. RTI4 P7 W( f5 J/ l! C& S# {

  1457. 4 \' H0 M' w5 b( K3 v
  1458. ;==================================================" |9 Q; N( F/ |  ~3 z7 m8 I
  1459. ResetProgram;重置中断处理
      V" @* y6 M! t* T/ C
  1460. SEI; a3 A0 W6 B* |7 ]8 [6 K
  1461. CLD
    - g+ d$ ?* p7 _7 j  M1 }+ ?
  1462. LDA #$00
    ) P6 n& |5 P+ t7 |0 H' U
  1463. STA PPU_CTRL) Z" c2 \  X4 A% k
  1464. STA PPU_MASK  t* V4 l2 [% {  F6 [

  1465. , G/ U# `, E: A+ X. T
  1466. JSR SwitchMainBank
    3 I2 Q: [3 d& T2 ~$ q
  1467. JMP ProgramBegin
    9 l: d0 S2 j1 A8 {6 w" `
  1468. " G4 ]$ w6 o3 c; g; a
  1469. ;==================================================2 n2 v& F/ H" k7 _5 z
  1470. IrqProgram;Irq中断处理
    2 N: S5 W& S( |2 u; R
  1471. RTI/ _6 `7 i' r. l3 r2 [7 F: N- Q1 O

  1472. ; h" a, n9 a2 O# e8 X2 L
  1473. .IF SOUND_BAR_SHOW_ENABLE
    6 v. a4 C" {( e# M
  1474. .ORG $FF80: ^6 u2 ]- O9 p% f
  1475. STA $4000,X! r$ s$ k! Z  b# A7 ]; [
  1476. STA Sound_Bar + $00,X$ f1 ?+ f+ z: m
  1477. RTS
      @+ ]) _& S7 r  x" t/ V
  1478. 4 Z1 F; y$ J$ B; E
  1479. .ORG $FF886 O! Y2 q8 U* c# K1 l# ~, l4 p1 a
  1480. STA $4000,Y
    / q% U: p; E" Y. F7 J
  1481. STA Sound_Bar + $00,Y& A7 }+ G) h8 |/ o  E) q
  1482. RTS
    8 @7 t0 w- C9 x  d$ k7 v
  1483. % P, W2 R! H; t  o- Z
  1484. .ORG $FF90
    : N' W4 \4 g% |
  1485. STA $4004,X0 M4 x' O5 |9 P
  1486. STA Sound_Bar + $04,X0 q! B( `* X5 g. j
  1487. RTS
    8 N% Z: `! A7 y1 G/ X
  1488. - X! j- L  n7 r4 L
  1489. .ORG $FF98- }5 c* `8 U% u" @) w% a
  1490. STA $4004,Y: z# P3 d0 A# E& s! i" O9 e0 @
  1491. STA Sound_Bar + $04,Y4 `; I) I! U8 o
  1492. RTS
    , X' x% X! r3 ^
  1493. / {0 T) O7 a( a3 e5 W$ A! K
  1494. .ORG $FFA0
    9 |! f. _' p" ?. ?1 {0 O* ^6 b
  1495. STA $4008,X. q5 A& {" O. `& u3 O
  1496. STA Sound_Bar + $08,X
    " g! r* Y- O6 H
  1497. RTS
    + _. R1 n4 [/ g3 p$ q% z% U
  1498. . A1 b$ p( Y3 q+ k/ u
  1499. .ORG $FFA8% X+ z; _, p8 f' p& q
  1500. STA $4008,Y
    5 H+ |" }/ M9 d8 w! }# Y( u
  1501. STA Sound_Bar + $08,Y" C' A  d8 V7 d. U$ q
  1502. RTS* @, l- ~% V2 [& M1 w6 i9 `
  1503. % C0 }6 r0 k% \/ ]
  1504. .ORG $FFB0# J. Q; S  |# S* Z
  1505. STA $400C,X
    7 j8 t$ t* c" M1 x
  1506. STA Sound_Bar + $0C,X$ z# J, p4 A( D) ~1 R
  1507. RTS
    + L( h% Q! P- t1 m/ i2 x3 }
  1508. ' [% m0 P0 o" t: Z2 |
  1509. .ORG $FFB8
    2 C: R( p' i% j" O
  1510. STA $400C,Y
    ) o9 y, E# o; R# U+ }$ F2 P
  1511. STA Sound_Bar + $0C,Y/ |. ^1 q% M$ b. R( B. O
  1512. RTS
    $ [9 K* c# w3 B/ l% |+ d  O

  1513. # [0 D8 T3 N) i
  1514. .ORG $FFC0
    " s' y# l6 p2 T% V! h8 D' p
  1515. STA $40006 ]9 @) ^6 W3 H# a; O8 T2 T
  1516. STA Sound_Bar + $00; B% N/ V4 `: h" {* y3 S7 {* \
  1517. RTS
      P3 K5 l- X4 H, ^( Z
  1518. 9 L6 U. F* e$ D7 H, I8 @! P6 H
  1519. .ORG $FFC8" u  z1 [& U! T: Q3 E' `
  1520. STA $40048 g. p1 L  D3 p7 J3 ]0 R# g7 z
  1521. STA Sound_Bar + $04/ d! \; j% n+ R) Q
  1522. RTS+ N1 j9 b% J( W, ~6 V

  1523. 3 d' k: U) a7 g3 ?
  1524. .ORG $FFD04 }. R% j; v! c4 a6 U) ]
  1525. STA $4008
    * h) T3 b# x6 V7 t/ w
  1526. STA Sound_Bar + $08# o9 O# L! K6 m  i# `
  1527. RTS
    0 [2 N! t9 y- o: A( m
  1528. : i8 ^# _( [+ }, e
  1529. .ORG $FFD8
    . M8 f# Q+ j  d. k9 n
  1530. STA $400C( H& E0 B3 S* F2 a
  1531. STA Sound_Bar + $0C4 h+ g/ |7 z9 e% K2 v
  1532. RTS( B3 D+ ^- W7 h0 [* j/ P4 ^* b

  1533. " S: l. L  N, V2 v& p! `, x
  1534. .ENDIF
    0 a1 N' @' @3 K

  1535. 7 G1 ~" Y% X, Q* O: l# I5 d
  1536. .ORG $FFFA
    5 j$ h2 r# p, h, ?6 b0 r
  1537. .WORD NmiProgram
    ( _$ X3 b/ S. m
  1538. .WORD ResetProgram) h9 F* f5 r7 Q) I& S
  1539. .WORD IrqProgram
复制代码
; N9 C' N+ K: D9 L% H
' s. e% h- ^( g1 q/ E' |4 v
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1159 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3148 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-17 04:04

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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