EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
; o, _6 w2 l/ e% y( v  e1 v' ~6 F+ V5 h% |/ @( c% M2 p
1.魂斗罗
& h8 V  o/ F) u3 o1 p2.超级魂斗罗
4 W' s, V+ C8 X) w- ^3 U  ]  u3.赤影战士
) p& u* I0 X  F2 |+ X1 ]4.忍者龙剑传23 w7 \# G1 e, M, S9 h# Z! B; l  Q3 S% S

/ i; _1 c- ?8 W, D) Z  m' [  `  X3 e+ D1 |$ r

7 f8 J' F* e9 @; P9 F2 G) d
. b& @8 J8 u5 K7 o# E源码:
; j/ @9 a0 n4 g- i0 D" k8 Q
  1. ;[FC音乐][播放器模板]
    % s' S; D6 E5 Y9 q
  2. ;FlameCyclone 20230710
    ; v+ H# m+ \4 F

  3. 5 M8 R5 a# A; m" M
  4. ;文件头
    * J+ }6 d  c% C/ t
  5. ;======================================================================" i$ i' n0 Z+ B$ c- h- g
  6. .INESPRG 4                                              ;16KB PRG 数量! Y# [7 M! |9 o& v7 G5 h& s
  7. .INESCHR 0                                               ;8KB CHR 数量
    9 J/ W+ m$ N+ V2 X# O( U
  8. .INESMAP 4                                                   ;mapper 4! n" r  w# C! s" z
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    0 X) S( Y, h8 _' g6 w

  10. ! T# ~3 N# `! ]
  11. ;==================================================
    + x  u4 E/ |' `
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ( E7 u& l0 q4 d
  13. ;==================================================' g% I& \3 M) C" L! k' e/ h
  14. BANK_DATA_MASK              = $07/ R9 B8 v. C3 I; @! i4 @
  15. ;==================================================5 Z" ?7 m2 X( _
  16. SOUND_DATA_BANK_0           = $00
    ! O+ \# [9 C' C0 l& E2 B  V
  17. SOUND_DATA_BANK_1           = $01
    $ j1 B, Z9 H9 N8 V
  18. SOUND_DATA_BANK_2           = $02# g/ Z: b! l' s$ l
  19. SOUND_DATA_BANK_C000        = $06
    0 f* \2 W1 f: A9 d- [4 ?' L1 P
  20. % a& q7 \* U. r& w$ ?
  21. ;-------------------------------------------------4 d% T2 N) v& n+ C$ f
  22. CHR_DATA_BANK               = $044 l/ ]% |9 {1 A  g( K* S
  23. CHR_DATA_ADDR               = $A0003 R6 t( P/ S# ^$ S+ X. g) b
  24. ;-------------------------------------------------
    & h! I1 a5 c; k+ ], p
  25. PROGRAM_BANK                = $05# H: s, R/ w; c- v
  26. PROGRAM_ADDR                = $8000
    6 L( d: i0 ~. |, e
  27. ;-------------------------------------------------- h+ K, V% U* R4 O
  28. RESET_BANK                  = $07
    8 B2 {  f# C# ^! C4 ~5 t( l% x
  29. RESET_ADDR                  = $FE00
    $ J7 ?" T. l% c  h" O
  30. ;==================================================
    ; y9 P- y1 U# L9 X
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    ; V& V" A$ x. F% p1 a0 t
  32. Music_Play_Addr             = $813C ;音乐播放地址& _( l: [& C3 E0 L$ |" F0 b
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址! W- N/ @% P, i/ p
  34. ;==================================================; M& A$ [' X& v# f( X
  35. Music_Song_Total            = 039  ;全部曲目总数7 E, q+ Q: g$ H+ |8 q
  36. Music_Start_Song            = 007  ;初始播放曲目" I7 P  T; ^3 {! o- G
  37. ;==================================================
    8 {2 r: l8 |: x& I8 {! c, }# R0 m

  38. * U: r7 P5 q2 i/ w
  39. ;==================================================2 s- L, a- ]$ n: Y1 i/ q* X
  40. Title_Text_Pos      = $210D ;标题文本位置
    3 C; @' \/ e) A: n0 p1 L
  41. Author_Info_Pos     = $2284 ;作者文本位置
    5 }' x9 k6 ^0 G/ ?+ b- q8 P
  42. Date_Info_Pos       = $22CB ;日期文本位置
    & }/ u: \  J% N8 M1 I7 r$ \1 ?$ ]
  43. ;------------------------------
    ! O* O6 ?2 [8 S( w6 u8 ~
  44. ;------------------------------! d! S0 y  D" ^+ ^  M+ G  f# t
  45. .IF SOUND_BAR_SHOW_ENABLE
    3 N# X; I1 E7 [) o4 `9 C. d3 r( o
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    * Y. Y" m. j( ^3 Q1 @
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    2 n5 P5 }* G+ ?) H+ T# T
  48. Play_State_Pos      = $2233 ;播放状态位置" A. }& V; l& s
  49. .ELSE
    5 G2 E5 M4 K4 D6 Z8 N7 E  @
  50. ! |, d* r/ [" E( Q7 {
  51. .IF Music_Song_Total > 99! a, C! \. Y, `  t* b
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    7 B( z$ A/ I2 Y% c+ y7 d
  53. .ELSE
    8 y% j) `9 g* [1 B( Y4 [& V7 a
  54. 4 g9 Z' y9 O' y
  55. .IF Music_Song_Total > 9
    9 j4 K& x' x9 x1 p1 Q7 m
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    ! B- B2 s0 B% ~) J" W: o: i" g
  57. .ELSE. w1 |9 c# y" c/ `2 u% d8 Z
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    4 l' t+ S; u2 ^& K3 G
  59. .ENDIF+ c1 I0 r- H( ?
  60. ' T$ \$ B- J* N1 o% F7 K
  61. .ENDIF
    7 f9 v& |/ X2 B

  62. - w7 ]2 r2 z6 k

  63. ) B: P9 Y) c: D& o6 P2 o  b5 z$ X
  64. Play_Time_Pos       = $21EC ;播放时间位置
    - k* t' w  v) {, `  r
  65. Play_State_Pos      = $222C ;播放状态位置
    0 ]% Q: i- a( T* r$ N$ Q
  66. .ENDIF
    # e/ Z6 ~' q! f) ]6 @+ t4 R
  67. ;------------------------------! q; `7 R7 l% }# I' {
  68. Track_Name_Pos      = $216B ;曲目文本位置
    # H0 q1 c* Q! V* K; H2 j
  69. Sound_Track_Pos     = $21A5 ;声道文本位置/ e5 J1 ^# M; ]! j, }
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置7 k, Z; X5 R- d2 n7 x5 v9 z. I  {
  71. ;==================================================
    / V4 ]" a6 u  C9 ^+ T
  72. Scroll_X = $002 O0 ?7 P6 A  q$ B/ y- h
  73. Scroll_Y = $06
    5 o1 [6 i, _# k( |# y% k5 d+ y2 ]
  74. ;==================================================
    ' ?2 V* Z$ r0 O, e+ h
  75. RAM_Cln_1       = $0100
    $ D  V. `4 X. R, }
  76. RAM_Cln_1_Size  = $802 y, p9 a8 A/ a! A. v7 q3 y$ x  b
  77. RAM_Cln_2       = $00E03 z! ^" _4 r) v: T; @
  78. RAM_Cln_2_Size  = $20& f9 k& a6 ^: |, U1 e4 ^/ Y
  79. RAM_Cln_3       = $00E0
    2 o4 }& Q4 C* r2 z: |# d* e, z2 t
  80. RAM_Cln_3_Size  = $206 i( s) O6 }& e3 m& B

  81. 2 N- E1 t& @) x
  82. ;==================================================% K+ l5 L9 ~% e. j& Z/ h6 b- Q* q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    8 V- M) Y  F  i4 s! j
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器* x2 x/ Z0 R1 T5 d( U, Z
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    6 @& A, ^2 I, o- B% r
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1' L" i5 s3 N, A
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加14 O( \- Z" h- h& g! c2 t
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    * E! V6 v/ S, b* s7 T( c
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加# W1 d) r' O# i. w& |: I
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    - e! J% i" q" s1 d
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存, `: u( h7 v# `* B8 q0 z
  92. APU_STATUS              =   $4015   ;声音通道切换3 I4 t5 B: Z0 j7 r0 Y; `
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    - q4 T" Y. [# v$ t
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通& y; k" C" d3 @# T' }. n- m9 f5 n
  95. ;==================================================: D0 K  S& l! g
  96. MMC3_BANK_CTRL          =   $80000 i, H1 C5 K! X  Q- o* D. V. f
  97. MMC3_BANK_DATA          =   $8001
    - L! n) n8 W0 G  s
  98. MMC3_MIRRORING          =   $A000
      [" [: a" Q3 V
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    ; \  U7 ^' X: F- @: P* j8 l
  100. MMC3_IRQ_LATCH          =   $C000
    & }) X+ m$ H7 u
  101. MMC3_IRQ_RELOAD         =   $C001
    7 c! ^" H& u: q7 U. \: B
  102. MMC3_IRQ_DISABLE        =   $E000  D" {3 u# U3 ?! p7 e. I
  103. MMC3_IRQ_ENABLE         =   $E001
    ! ~" h0 H( W% W& z: c

  104.   J# F' W2 m6 E+ ]. l  ~9 p
  105. ;音乐数据块7 S  ~9 h4 @, E2 R8 u
  106. 9 x1 ^1 `, a! i' M0 Z
  107. ;======================================================================9 `2 |: S! `$ x- ]- h1 ~3 T
  108. .IF SOUND_BAR_SHOW_ENABLE
    5 H3 i$ z% @! J3 O% U
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK8 q2 T- T& H3 H( u
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    0 W" V2 M  V! `7 i4 `9 c* }1 \7 N

  111. 8 u5 z7 Y: u: Y0 |
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    7 `' h: @2 w! H
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    0 J- t0 F7 ]. |' d7 y8 k

  114. 5 N; Q3 J3 H+ @! {1 H/ g4 w5 K
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    % r6 T$ p1 @2 }  t3 o
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
      c. ]" r: Z8 b( O

  117. ; C4 f9 E& X- f' y- m$ S9 |9 k) y
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    " `! c' P' ^( s
  119. .INCBIN "sound_bank_bar/music_data_3.bank"* z0 u7 r: i$ v9 G/ P! W/ V9 b
  120. 0 Z1 p9 Y& v" d: E
  121. .ELSE
    4 @" Y7 W$ x6 [( H4 u3 k. m; O
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    & _) o, x# y- w% w/ f$ G" w
  123. .INCBIN "sound_bank/music_data_0.bank"$ b+ t3 _( {4 a  ?& k
  124. 2 A3 f8 F% D; S# B+ m6 N. }# [' ]
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    + E0 P; k% g. ]; Q7 {0 ?. Z" B
  126. .INCBIN "sound_bank/music_data_1.bank"
    : o# o  Y& H$ K

  127. * ?* R! S2 ~) Y3 q
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK6 |; l$ W& B  B
  129. .INCBIN "sound_bank/music_data_2.bank"
    % x" J. B7 g' `( N7 b; Z; k

  130. ) Q4 t* D. z; F3 ~1 R
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ' H/ g$ V; n0 B0 Y+ t
  132. .INCBIN "sound_bank/music_data_3.bank"$ q( H2 D; O3 M1 O/ `
  133. .ENDIF( r' l# ^5 D* N
  134. ) @' h9 m% @) X# B6 x. `
  135. ;CHR图形数据
    6 s, Q0 u) c) u: ~. s! U: e
  136. ;======================================================================
    : u' U, ], @- X4 B; i" D
  137. .BANK CHR_DATA_BANK
    8 x" E# F5 [$ W" B: p( u
  138. .INCBIN "chr_bank/chr_data.chr"+ v4 R! u7 E' ~4 C9 `7 B

  139. # y* v/ k( c; [' t3 o5 W
  140. ;==================================================
    " z2 w; R7 p: @: B4 e
  141. PPU_Addr        = $0300
    7 A  h/ n: P/ B2 a. @8 G
  142. Palette_Addr    = $03C00 I2 c. H% H6 F: n7 |
  143. Sound_Bar       = PPU_Addr+$E0* w+ e1 f! U; m& d7 r
  144. ;==================================================
      K/ L$ ~3 t' _! p" Y/ _
  145. Palette_Update_Addr     = Palette_Addr+$0D
    9 F. c6 S5 ?2 F4 n  F4 b
  146. Palette_Update_Max      = $2C
    - i3 R( X- Q' n8 |
  147. Palette_Update_Min      = $21$ T* P. e5 ^* m( e% @+ Y, x1 V( V3 `% o
  148. Palette_Update_Interval = 60
    + k6 [, r7 X# B' A
  149. ;==================================================9 Z' k9 u$ f, o' u; [
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    6 ?4 ^! z; \  i" d) E
  151. Screen_State        = Sound_Bar_Cnt+$01
      B: F: ~" G1 _, v
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    # w( P4 h  C6 z- X, |& z7 X
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03* C- o7 \0 M+ [! S
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04& @4 v0 `2 Y2 w- P8 Z
  155. ;==================================================; ^! I2 V: I% U1 z4 I  ?
  156. Data_L              = $70
    ! B8 e# A6 a- U2 f8 f: H: u
  157. Data_H              = Data_L + $01, r- @( _" x9 _. d. o; Y0 Y
  158. Data_Cnt            = Data_L + $026 U+ t" i% _8 y5 d6 _5 j
  159. Data_Buf            = Data_L + $034 s+ X' c" ~  O
  160. Time_Wait_Cnt       = Data_L + $048 T  S3 T* M$ L6 E  d! x) i! W8 ~' c
  161. Palette_Wait_Cnt    = Data_L + $05
    $ J# _# N" T$ z% V% z5 U( ~0 s
  162. Palette_Update_Flag = Data_L + $06
    - S" i& E' @* [# D' B
  163. Show_Track_Name     = Data_L + $071 h( A, J9 _+ c8 @1 C6 b
  164. ;==================================================
    " S9 H% C7 r# e6 Z0 B" @/ n$ d8 `3 ?
  165. Key_Keep            = Show_Track_Name + 15 i& h, V2 D- I8 i
  166. Key_Once            = Key_Keep+$01. |  \0 D* E  {8 @/ T
  167. Key_Kemp            = Key_Keep+$02: J9 D' q& R& q% I3 G) @/ ?
  168. Key_Temp            = Key_Keep+$036 T4 _3 @0 p+ T8 N
  169. Key_Getv            = Key_Keep+$04, \9 Y( l7 I. y6 K& o1 W9 R3 }$ x1 V
  170. ;==================================================* H3 s2 g7 h* o4 @+ x; _7 N
  171. Music_Cur           = Key_Getv+$01
    3 A' m- H" ], E0 H# D% z
  172. Music_Last          = Music_Cur+$011 z* Q8 G% ?' z1 E8 L
  173. Music_State         = Music_Cur+$02
    4 E6 Q( r0 L; W% R* I
  174. ;==================================================; Y+ ?/ c9 ?& T
  175. HEX_Data            = Music_State+$01& o: r' U8 }" s' m2 P* ~
  176. DEC_H               = HEX_Data+$01
    - F, i; z% ~1 Q2 b0 H( W* d
  177. DEC_T               = HEX_Data+$02
    4 ~$ N) m' W! ~4 @1 `0 W# A" B
  178. DEC_L               = HEX_Data+$03+ s" o. J. E  T9 z9 r# \. |
  179. ;==================================================
    ( U* {- O( C0 ~; E4 c) J9 k
  180. Time_S              = DEC_L+$01
    0 h, E  \$ T  J+ F6 m/ j" R8 c
  181. Time_M              = Time_S+$01
    4 k+ O) O% o' W1 q* n" ^
  182. Time_H              = Time_S+$02$ S) [5 M, B0 A5 a
  183. Time_Cnt            = Time_S+$03
    . }! x# a& g+ A
  184. * o6 N5 @  y, ]. O- A2 p; T, s' y
  185. ;==================================================
    ) u0 B# p" a0 H2 A9 L
  186. Music_Bank_8000 = Time_Cnt + 1# t) o- ^) e3 r, x0 h
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    7 w  V4 e" I5 V5 x+ k) L$ x9 P3 Q& C$ }
  188. ;==================================================
    2 T; p0 P7 P8 V& P% t' m- W$ u

  189. & p$ X# P8 D: n1 q. Z
  190. ;======================================================================
    ; @, z1 U% ~  T( h8 Q/ ?: k
  191. .BANK PROGRAM_BANK
    4 @' [0 X6 m$ u" w( ~; Z
  192. .ORG PROGRAM_ADDR- l# H! k/ ^, N  _# ^9 ]8 G$ m
  193. 8 ?+ e7 i# d3 L
  194. ;==================================================; c9 F8 T# i' d$ z* y  D2 L$ ]
  195. NmiProgramProcess;NMI中断程序处理
    - U. A: O# p7 Q7 f0 z9 T
  196. ;处理PPU图像
    3 t) f; N* Q  N- P" t6 M' l. Q% M
  197. JSR PPU_Proc$ C, l3 Y6 y+ r3 j
  198. * o. V% Y( o) k% \1 [; z$ }
  199. ;启用NMI中断
    5 W9 y( c4 R2 p  @0 i0 r
  200. LDA #$80
    & w9 d! r" [$ L( ?3 @; s
  201. STA PPU_CTRL3 F" ]/ J3 ~8 o6 H

  202. . S# j5 t0 I. e; s
  203. ;更新调色板
    4 i( S/ w' [$ w3 w: J+ e: J8 D* e
  204. JSR Update_Palette_Data- d9 T' N, Y6 `6 l; ?; c

  205. 2 A* `9 k: ^& m
  206. ;显示时间(缓冲): W* R3 C& J& i7 r3 p
  207. JSR Time_Show# l# b9 E' G; b8 z/ _
  208. " O; H* Z0 q0 t, |
  209. ;播放计时& D2 v" |6 @' P  J( ^* C/ y) a# X
  210. JSR Time_Count
    . g/ h  N! H' W  d
  211. ' e9 d  a: O3 z% }$ d) j( y
  212. ;播放声音
    ; M# o' D& I' [, J3 `3 V
  213. JSR Sound_Play
    ; u  U' m; Z* h# w. W" e: q

  214. * y6 G( E( Q+ u  J2 H
  215. ;切换音乐(手柄触发)$ n( E, R: `& L' L
  216. JSR Music_Switch
    ! Z+ |* r3 w  j' R' e3 i9 m

  217.   f- Y3 R7 v0 u5 c7 Y- V
  218. ;音乐显示(缓冲)
    ; ]8 J" p; Z" R) j0 x; W
  219. .IF SOUND_BAR_SHOW_ENABLE' q  l3 ?; H' s8 q; a# x- {9 H
  220. JSR Music_Vision# b1 c# ]" c+ m" w+ |# Q1 E& N9 F8 Y
  221. .ENDIF
    ' S' [. c- m% g+ T

  222. ; ]" ~/ I+ }6 \. e" j2 G
  223. LDA Time_Wait_Cnt2 W$ W2 W, i% j# J0 e+ g" R  ]' [. N
  224. BEQ NmiProgramProcessEnd4 V: L  L( a( t/ B
  225. DEC Time_Wait_Cnt. j' M5 L5 q' W/ w" m
  226. NmiProgramProcessEnd
      q5 H+ r4 b  @0 M7 U( ^9 `) R
  227. RTS
    ! W4 Z3 p6 a' S) W; d
  228. ! ~; [8 x. x/ {8 o+ p8 N0 A: A
  229. ;==================================================. X' M5 E$ R8 W
  230. ProgramBegin;主程序
    1 a- F3 T! V% E* j7 J1 e5 u. ~' Y
  231. LDA #$007 G5 a* i- [* K" o. m
  232. STA PPU_CTRL7 w" D6 q7 z9 i1 M& Y2 p, m; N  ~6 v
  233. STA PPU_STATUS2 L+ z9 J! l9 R( S/ i* S/ A8 x  b
  234. STA PPU_MASK
    + L- h+ O( K! B. k7 ^
  235. STA APU_STATUS
    7 P* Y# M. z% `5 ?+ U! d6 o
  236. STA PPU_SCROLL4 Z" z' |9 C; [0 O$ P
  237. STA PPU_SCROLL
    / h  z3 w5 h! N  f
  238. LDA #$C0' W" Q4 N4 S/ W; }
  239. STA JOY2_FRAME2 R8 W* h. l1 |9 V( F
  240. . p5 [. a. v' v0 j; k/ ^% \
  241. LDX #$FF
    ; ?3 o+ A, o6 f, P) z6 f
  242. TXS
    $ q) H) J5 w% i8 S# Q
  243. LDA #$00
    ! W0 e6 a3 s5 l
  244. STA PPU_CTRL5 J5 a( @* U* z4 y2 M1 S
  245. STA PPU_MASK" ^8 M8 x0 j6 A/ ]! @! w
  246. STA MMC3_IRQ_DISABLE6 {4 c. D( {* U# h
  247. 2 [- e; e8 w  Q5 l8 `+ j5 g- }
  248. ;==============================# w1 l$ F/ U7 a7 q4 Y* @) _
  249. ;调色板清空
    # D) W3 S8 X" G
  250. LDA #$3F1 s- v- ~- t; \7 U* }
  251. STA PPU_ADDRESS/ F  |2 j2 c; g2 }3 p: e, z3 u( J
  252. LDA #$00
    3 l( s9 G: J( r* q
  253. STA PPU_ADDRESS( e1 M& {8 d. s7 _0 w, z% |
  254. LDA #$0F
    # w9 r  H" O7 i8 _2 o) h" u6 o/ X
  255. Palette_Clear
    $ F* @4 g9 q) A* m
  256. STA PPU_DATA
    ( W% z% u. }4 ]
  257. INX' T# D' r, v2 t  K5 _
  258. CPX #$203 s1 L: j1 d5 ?/ j% r* D. ~  l
  259. BCC Palette_Clear
    ' a* p% i' i9 r5 m
  260. LDA #$00! l3 r* R3 n8 q7 N$ {' f2 h
  261. STA APU_STATUS* `9 k& _1 R4 D, a5 l- G' e
  262. ;==============================
    * d! S, a1 r: @$ ]0 K* G- o
  263. ;初始化背景调色板$ i. @6 O% K! c% C9 s
  264. JSR Set_Palette_Color  T  M  c9 c7 o. J
  265. JSR Set_NameTable_Attributes- ~! y8 ]# y/ u, H2 F. c8 J

  266. " U/ C3 p1 \- W$ `  n
  267. ;==============================' `' R5 z, n" k5 B
  268. ;RAM初始化
    4 w4 H) s1 U  ~. _
  269. RAM_Clear_All5 ^4 \4 [: N# g2 J+ T3 }
  270. LDX #$00
    3 f7 G) @! u) {- S. O/ A# b; @0 }
  271. LDA #$00
    2 Q4 n. S, s. K5 n; ]
  272. RAM_Clear_All_Start
    7 P% M9 {9 ]. h% X1 o- Y5 }
  273. STA $00,X, U8 d- B2 }( x8 [: C1 Z
  274. STA $0100,X
    2 f% Z8 z! O0 A. G% X" D/ F8 ?3 t* `: t
  275. STA $0200,X% _$ L0 p3 O7 j6 c2 b/ S/ X* c% {
  276. STA $0300,X
    8 }' O; ?* B3 h2 w7 |' V
  277. STA $0400,X& E2 K/ N7 j3 S9 U! c3 w
  278. STA $0500,X
    : s7 w9 w% r/ V5 y5 {
  279. STA $0600,X
    * c( R/ c. u( _2 P* X5 N: l- n6 A# ^
  280. STA $0700,X& a- t/ V6 P  s1 B. c
  281. INX- D6 ^4 c& W  @# |
  282. BNE RAM_Clear_All_Start
    ) ?6 A- N& j& Y- }. c$ r1 i

  283. - z7 u+ b- L. _  y
  284. JSR VramInit, d+ ~) d" v& O
  285. JSR Init_Palette_Addr% G, `+ ]4 z: m/ d

  286. - U: F2 O( d' v* b; r) ?
  287. .IF Music_Reset_Addr
    - w% L* B+ K. W
  288. JSR Sound_Reset% e& O  o$ W9 G* ?
  289. .Endif
    2 z% D4 N1 p' N( o7 _/ ~9 C
  290. * U7 b" i9 h4 c" ^
  291. LDA #Music_Start_Song-$01& Z% A" x4 f; U. m8 ]  \4 S
  292. STA Music_Cur# _) c: i0 I; [5 V/ s7 t3 K/ a
  293. / q9 ?' I6 s0 a+ D$ q
  294. JSR Show_Music_Text
      f! r1 ^) @9 V* _* d& K, O
  295. " n9 U6 M% b: J, F8 j& F( E# s0 {3 x
  296. .IF SOUND_BAR_SHOW_ENABLE
    * V$ D$ l* R$ e' |* K& V
  297. JSR Sound_Bar_Text_Set/ z; _3 }5 ]" F$ {4 u
  298. .ENDIF
    # v* i& w3 S8 G/ V* q

  299. 8 U" S/ L+ z0 x: n
  300. .IF Track_Name_Pos
    9 n/ G/ J& k% H& V
  301. JSR Show_Track_Info7 H# i4 G9 L5 V; F8 f
  302. .ENDIF- w' w/ m/ p  G* @' ^  N  T- V
  303. ! p; t; t7 g# Y: }5 T' h
  304. JSR PPU_Proc
    - E# S+ i, }( }7 O; L
  305. 4 M( p2 U3 o/ O
  306. LDA #$0E
    7 `6 B- k0 f7 U2 W8 H
  307. STA Screen_State
    9 a. B3 C! T3 u* \, Y- v3 h

  308. . c3 x) R/ H( x2 S
  309. JSR Sund_Bank_Init
    3 H8 [" p  w1 d! H

  310. 0 h! a- {$ j6 J/ z: M
  311. JSR Music_Show
    * u. v' R. Z/ Y2 v* x" L* x
  312. JSR Time_Show
    : H" s% \1 \( L
  313. JSR Music_Stata_Show
    9 S. v( F; ~7 h
  314. JSR Time_Delay
    - m- r; z3 x2 K, }
  315. , ]" y$ {  @6 f) ~6 F' c

  316. 7 V6 C/ i" Y6 p
  317. LDA #$80
    # t1 R( \" Q6 \3 s5 W8 V* p% s
  318. STA PPU_CTRL$ u1 @( H$ b6 E& G4 I2 o8 }
  319. ' J( W" B8 C: \
  320. LDA #$20
    . K! D8 L+ r" Y3 B7 H- ^
  321. STA Time_Wait_Cnt2 W6 `: L% R: H" S7 S6 H( _

  322. ' E( t+ e* d1 R
  323. Wait_Time_Over% X2 A0 W8 ~" G! s% |8 a- v" Q, u
  324. LDA Time_Wait_Cnt: g  W- t. ~/ l
  325. BNE Wait_Time_Over
    * p4 v& Z; p+ B

  326. / b3 C; w) E* z( o* Q* Q5 Z) n
  327. LDA #$1F
    8 J9 Q, X5 @0 {
  328. STA APU_STATUS5 E# t% E. U+ q0 N  q: R5 A
  329. LDA Music_Cur" X7 ~0 {' s  k7 u
  330. JSR Sound_Init9 n7 b. j  ?% ~5 V

  331. . h+ W" Y; [2 J
  332. JMP MainLoop) i+ @) `8 x) f; I( `% U  j: {

  333. - T2 ]3 y  B/ y) }% s. g
  334. ;==============================
    % J! l! A. n! C, B1 Z% [& d
  335. Time_Delay;延时等待9 |  ~* v- E  \! e8 q9 T
  336. LDA PPU_STATUS
    ' c  s1 Z  J3 Q
  337. BPL Time_Delay' U: c4 ~7 i! X! L4 x0 |
  338. RTS
      j4 b! Y/ P4 ^/ G) h. s

  339. * s+ O8 z8 K" K$ D
  340. ;==============================
    - t* y9 ~# t2 U
  341. VramInit;初始化图形内存
    6 A$ d. D5 h+ u9 v" C
  342. LDA #CHR_DATA_BANK
    6 ^' I9 ^. ~6 P
  343. JSR SwitchBankA000
    5 [$ ?% |# W+ {0 u
  344. LDA #LOW(CHR_DATA_ADDR)
    4 @( K1 S1 b+ a
  345. STA <Data_L
    ; x: m+ n% E' q8 e; x
  346. LDA #HIGH(CHR_DATA_ADDR)! F; Y+ p- Y1 {
  347. STA <Data_H3 n: H% R. p9 k$ ~1 o6 D: r/ N
  348. LDY #$00
    ! @' u; G$ F$ u* o4 ~2 t
  349. LDX #$20
      |/ k; p7 `+ B# k! w- K
  350. LDA #$00
    - ^- E0 b6 d- p! q. T- v2 |
  351. STA PPU_ADDRESS
      L3 \! h, H" ?. o* j2 f+ N
  352. STA PPU_ADDRESS
    ( p  ^, ?8 d$ h; s& i3 O$ E
  353. VramInitWrite' `# R4 k4 U* e+ B: Z
  354. LDA [Data_L],Y
    - s2 x1 n3 Q% v: e/ E0 c
  355. STA PPU_DATA5 w* r# h! ^1 E; B# c+ x6 Q, t
  356. INY) N+ R4 r+ T+ o
  357. BNE VramInitWrite
    ! i( J+ M0 ?0 j% h5 o
  358. INC Data_H* C6 C9 W  @' f4 ^
  359. DEX
    9 }5 k2 f1 @! [! I
  360. BNE VramInitWrite
    3 u& n1 ]" @, K
  361. RTS0 E: n5 V: b. U9 k+ p) K7 }

  362. - X  w; `$ Q$ L4 p" C
  363. ;==============================7 Y" i  J3 B0 D
  364. RAM_Clear;RAM清除
    + I9 D0 `6 e5 x5 @1 ^  q
  365. LDX #$00" |2 ^- m) J7 _7 G. K' s7 ^* v# ~
  366. LDA #$00
    # U! @3 ^- [* t" C) |8 _
  367. RAM_Clear_1
    : r. \5 T1 g# K% `$ y! A* c
  368. STA RAM_Cln_1,X
    3 o8 H" t  b  m4 W; m' e
  369. INX, n: ~7 b; i5 T/ K- \# u
  370. CPX #RAM_Cln_1_Size
      r# e5 W# h3 ~
  371. BNE RAM_Clear_1
    / Q1 ?& R6 L5 q1 R& m. a& Z1 C/ S
  372. LDX #$00( D7 i* n, q( R3 S
  373. RAM_Clear_20 ^" `4 |' _% F/ l1 J7 l& b
  374. STA RAM_Cln_2,X7 [% d/ |- `$ p( T& ?% g5 k6 Z
  375. INX7 n0 ^5 T* S: p1 o+ }" [
  376. CPX #RAM_Cln_2_Size
    ) B+ C$ P' D7 N
  377. BNE RAM_Clear_26 R( \! Q5 q* p) f7 U3 a
  378. LDX #$00
    + y; u3 v- [1 ?6 e4 d/ {
  379. RAM_Clear_33 w# W, [& Q! G' J# y, H+ }+ S7 Y
  380. STA RAM_Cln_3,X( i% }, m- u0 {6 `3 X
  381. INX
    % g2 H+ G5 `* M5 J  O5 r2 I
  382. CPX #RAM_Cln_3_Size0 c! m, Y" |/ ~( c" p: P% q
  383. BNE RAM_Clear_33 ~. {- A# h# Z
  384. RTS. Y* ?; r4 J7 L; ]
  385. ) O- ^& S% v8 t& Y) g
  386. ;==============================9 P5 T5 v5 ^9 x+ I  G
  387. ;音乐切换
    # U  ~, N: g, W) m# O4 i1 a
  388. Music_Switch
    5 E) p# _0 t$ ]: h
  389. JSR Key_Proc
    2 t# d0 i1 G9 s
  390. LDA Key_Once8 E$ U  K/ H# c
  391. CMP #$10
    4 H0 g/ O2 I5 ]9 Y5 S6 v
  392. BNE Music_Start_SongStop
    ( [' Z0 T: W& e* |+ U: j
  393. JSR Music_ReSet7 [& |  M) v6 T& m
  394. 4 U0 X; p! j* D: y
  395. ;音乐停止" j# D, j8 O8 V) `# D; {) g) x0 K
  396. Music_Start_SongStop
    ( \% L8 V' ?  l2 T& D- \2 w1 {
  397. LDA Key_Once
    + G$ [/ n+ q7 |, {* @: ?
  398. CMP #$20
    5 o4 ^* G' t. a' B; |: }
  399. BNE Music_arrow
    5 A! w* V: a+ L+ |4 n
  400. LDA #$015 W9 \) S, ~1 n! s; Q4 J
  401. STA Music_State! O. C" p5 v6 B* @
  402. JSR Music_Bar_ReSet
      Z4 n" X% P4 @2 \6 ?+ a
  403. JSR Time_ReSet
    ; p& g, n1 E# u
  404. JSR RAM_Clear
    + s% }; e$ Z2 }' j& y- Y9 Z- y
  405. JSR Sound_Clear
    7 {+ |: n4 G5 E7 w0 R
  406. JSR Music_Stata_Show4 I- F, Y+ Q& ?) w9 O
  407. Music_arrow
    0 u+ H5 i! T. _5 n7 l- Z
  408. LDA Key_Once  }  [! [  Q% h% a8 q3 E* K
  409. AND #$CF
    8 M$ I- d/ W, L3 q" F
  410. BEQ Music_Switch_End. q$ q0 n) Q2 z* e8 g
  411. JSR Music_Number
    : i# t/ O) w+ R& X
  412. JSR Music_ReSet% U0 E( Y* N* {8 v9 {" j: a
  413. JSR Music_Show& h* b' x) L* A7 a
  414. Music_Switch_End% Y# q2 x8 o  R8 B- _
  415. RTS8 P0 Z" z, [! m& `$ C4 V# W
  416. 9 K7 Q$ R3 ?2 f# Y' H
  417. ;==============================) B/ j. N& K. I1 F! H% r
  418. ;音乐曲目切换
    # n7 l% g  N: ]. P; \+ G
  419. Music_Number5 u7 T5 D: K* `/ ^4 B/ |% t
  420. LDA Music_Cur" i5 ]% n( k9 U0 }1 A, ^1 N3 M
  421. STA Music_Last
    / l2 `/ \+ f5 P
  422. Music_Decrease) J, V% h! E9 o5 k+ u+ g$ m
  423. LDA Key_Once  ]$ r/ C  Z# d/ h
  424. AND #$42" ~- s" b5 t, ]/ i
  425. BEQ Music_Increase
    ! T- Z& J+ e6 R8 r1 Z7 l
  426. LDA Music_Cur$ T+ V1 P7 _0 i: \0 w  q
  427. BEQ Music_Increase
    1 K( L# N( g) f8 X3 n8 U
  428. DEC Music_Cur- ?+ J7 a  w! M# r! C  V
  429. Music_Increase
      w! P. U; ]. ?$ Y- Y0 t, Z* X
  430. LDA Key_Once% q& q  @% b. `) U* k
  431. AND #$81
    4 C! V" I0 ?9 c# l( Z
  432. BEQ Music_Decrease_10
    $ w4 k& Y/ s0 d5 f) M1 `& A! B
  433. LDA Music_Cur( S2 ~* U" H6 @6 J9 |# K. I
  434. CMP #Music_Song_Total-014 f& K. B" Y# w) E+ A; }& J( _
  435. BCS Music_Decrease_101 |* J5 c3 f' P8 m6 S* k, F
  436. INC Music_Cur
    " ?! P: r1 M4 \0 V! ?/ a- v
  437. Music_Decrease_10
    3 t5 u. ]  X( Z4 n' s# \
  438. LDA Key_Once: f) b6 [$ P7 s# d9 |# v
  439. CMP #$04
    / E7 z: a$ E, ~- p& h
  440. BNE Music_Increase_103 U% E3 u. x: l1 h" p# J/ r1 y) r
  441. LDA Music_Cur! e/ }8 B9 R3 W# C, G
  442. CMP #10; |0 n: r6 |1 H* @# T  b( q
  443. BCC Music_Start_Song_Min
    3 K. \/ |6 Z- d6 @- d
  444. LDA Music_Cur. H. w% Y0 R+ Z( J5 ~# D
  445. SEC
    5 R1 _1 X& J  q6 C# N1 U
  446. SBC #10
    $ h. c! k" ~; r9 y; e- I1 a) w
  447. STA Music_Cur
    + a) y4 T* B( u: k- R* i) l0 O, [
  448. LDA #$00
    ; U! g9 L2 A, n) h  p
  449. BEQ Music_Increase_104 E2 B# Z$ d  U/ k" a$ z; x1 F- g) O$ k
  450. Music_Start_Song_Min
    6 i. ~* [/ ^8 W
  451. LDA #$00
    $ d) K8 e8 b) m6 ^& I& M* w
  452. STA Music_Cur
    - g' P; Q: x. U/ d" g
  453. Music_Increase_100 ^: L. o+ a! C1 R; U" ^
  454. LDA Key_Once- v, x9 Z6 z! o9 r
  455. CMP #$08
    3 H/ _& H5 U% w
  456. BNE Music_Number_End0 p; k0 \6 K: Y1 u: p8 J
  457. LDA Music_Cur
    , i( Y- W4 v  K7 X
  458. CLC
    : }0 Y! t- V+ }) U2 _
  459. ADC #100 f: i/ @1 ]% {
  460. CMP #Music_Song_Total-015 L1 H" M9 P+ t! n3 W" ~
  461. BCS Music_Start_Song_Max# M. h) F  w$ B2 O* c
  462. STA Music_Cur
    0 O1 m2 a) z% L9 f$ B1 e' k
  463. LDA #00- q6 S' ~6 }2 i+ I! S  b8 ?) O8 ~
  464. BEQ Music_Number_End
    $ V) q! h. q, Q! H% f/ n
  465. Music_Start_Song_Max
    0 r% _5 r# ?% a  w( [) z
  466. LDA #Music_Song_Total-01+ @0 L% Y  `2 ]7 y- M: J; c) e: v* }
  467. STA Music_Cur$ ?; P: B, D; d7 N
  468. Music_Number_End9 N2 L- N' L* ^$ i# i' f
  469. RTS
    # \( _  q9 w) n! T
  470. 9 [/ {2 ~3 R8 O- r) c6 t* y
  471. ;==============================
    ) W: r+ d7 N0 ?# O2 j) D
  472. ;音乐重设: p, I: B, E8 P5 G0 \7 k3 h
  473. Music_ReSet" D, i- u8 `/ L; ~3 `* v- J+ p/ a
  474. JSR RAM_Clear- @8 f0 `& ^2 V$ [1 B& _6 ?& g
  475. JSR Sound_Clear
    . \; ~& K! a. i' @1 ]
  476. LDA #$1F. v( D4 S& g8 D, Z3 t' t# k
  477. STA APU_STATUS
    # l% \5 D) d; _. J  u2 y
  478. LDA Music_Cur
    ) l( [% P8 g& P7 X, w4 s5 W
  479. JSR Sound_Init# g5 `4 o% F! q
  480. RTS
    + E4 q# B6 G& r' L! _9 |0 J

  481. 4 x, y) c" N+ ~1 [0 r, C2 N
  482. ;==============================
    % u4 S9 M$ [; @6 I+ g3 y+ s
  483. ;音乐端口清除
    * |7 t2 _* x; ^8 ?; ^
  484. Sound_Clear
    " I$ y. T' [6 N/ c3 t/ W# B
  485. LDA #$00; \: M+ R" v' Q8 ]* v. s; P4 `
  486. STA APU_STATUS
    3 W4 f3 @+ J# a/ e! `' v
  487. LDX #$00. |/ V3 A/ p7 e2 |" q
  488. Sound_Clear_Start
    5 N7 F. j, {, L1 o! s
  489. STA $4000,X5 e( ?( K* W8 z- L: C
  490. INX
    ; c- O, D; p% _+ ?5 r$ c& h! T; w
  491. CPX #$14
    " X" h# t1 D; ]. U* O
  492. BCC Sound_Clear_Start
    + i: t" v8 h, r. h7 @* ^. M5 s3 p0 O
  493. RTS
      G0 n0 U, }; A- z! J
  494. 9 O0 l9 b, x, y8 m
  495. ;==============================
    - @9 a6 R5 T' |! d( P
  496. ;按键处理
    1 U" L+ T  G6 g! o1 ?1 L( s# C, Y
  497. Key_Proc: O8 \. ~& ~9 D: ^2 v
  498. JSR Key_Scan, ]) y; Z4 Q+ q, n; ~+ _7 g
  499. LDA Key_Keep
    6 G1 \1 l" K' a
  500. STA Key_Temp* t+ ?' M7 X+ d" z. y7 h
  501. JSR Key_Scan
    ( J8 R. `- r$ }8 Z
  502. LDA Key_Keep' j0 K. u. C$ f( a: r
  503. CMP Key_Temp$ @9 @3 K3 x7 r: i4 h9 B' o( `$ Z
  504. BEQ Key_Get_Once9 F2 N$ p- [# v6 r4 d! P
  505. LDA Key_Kemp
    0 q+ A, U" j1 g1 P) ^3 a
  506. STA Key_Keep! x2 M5 C! R' [2 U
  507. Key_Get_Once( z' j" y. j7 B  D9 B+ Q0 z- m
  508. TAY
    ( F( e+ Z: u) c- p  k+ B
  509. EOR Key_Kemp
    * g6 ~2 p7 }0 `4 ]
  510. AND Key_Keep4 [; y8 \) r# i: J+ j( a4 X  H
  511. STA Key_Once
    7 i( t, @! j- b- ~9 v0 b
  512. STY Key_Kemp
    1 z: t7 S" ^2 \: d/ I! M  Z6 _
  513. RTS
    9 W. _6 X( ]8 I& U$ S: [% o
  514. ;------------------------------1 D* X$ D  L7 L, g
  515. ;按键扫描
    3 E& y7 U9 j1 w3 N% L" G
  516. Key_Scan
    / C5 h3 O5 D) s* K$ V: Q
  517. LDX #$01. l; V* |' M* L6 |  l
  518. STX JOY1_FRAME/ k+ p- b% [0 k0 Q# K9 M- t3 W
  519. DEX
    % L# m# d: ~7 s: l! k
  520. STX JOY1_FRAME
      n* y0 J6 o3 H8 y& I  A
  521. LDX #$08" j, T  |8 O; ^& s
  522. Key_Value
    - G, f" m! J+ j' e  Q8 l
  523. LDA JOY1_FRAME' I4 X$ K8 B0 o6 o+ c6 O
  524. STA Key_Getv; Y$ J, x, z+ T: F% j
  525. LSR A8 m! _3 }, s4 v" l' m  S5 ^3 T; E7 i
  526. ORA Key_Getv/ k. c8 j1 j4 D; `! Y3 ]
  527. LSR A
    + l9 w9 K0 D% M
  528. ROL Key_Keep5 `* q+ w, B: ?3 b
  529. DEX' B5 K0 p) C: E( g$ d
  530. BNE Key_Value
    8 ], n; z1 Z5 b4 U: j
  531. RTS7 h( M, t) T. |# e, a
  532. + G& A6 m" M6 W- i/ }. B
  533. ;==============================# Z4 c1 E* W" {. ]" g3 M' t! P
  534. .IF SOUND_BAR_SHOW_ENABLE
    3 L+ P* P* E# O/ s: G
  535. ;音乐条显示
    0 J0 P0 [' Y9 q" O+ k" `
  536. Music_Vision0 v; u8 K- t8 W( e
  537. JSR Music_Animation% Y6 N6 k5 I6 w; S
  538. JSR PPU_End
    % m) }, w1 x  O/ u3 o
  539. RTS" {, |3 S# w2 b, O( N  h" k: m" D. X
  540. ;------------------------------# b* J6 u4 l, _6 y* Q
  541. ;音乐条显示处理; o7 \6 \& G, @+ f2 H
  542. Music_Animation- `6 m* a  `: w! f
  543. LDX PPU_Cur
    ; g/ F9 V3 a1 l# x# M1 M
  544. LDA #Mode_Line! Q* u) n- Q' i* _* c0 a
  545. STA PPU_Addr,X6 L- R* l! I0 Z: I% A, P% ]
  546. INX
    ; n& \2 U% N0 G9 M2 e
  547. LDA #HIGH(Sound_Bar_Pos)
    . g  a) X: M  ?; e# Y$ D" P& P  f
  548. STA PPU_Addr,X# R) |. o- Y' R* E$ Q3 I) s
  549. INX5 j: H* }! s7 X+ s5 L! X* h2 l
  550. LDA #LOW(Sound_Bar_Pos)
    # I/ |5 N: J: t7 Y# f; \6 Z
  551. STA PPU_Addr,X
    : A* i3 C0 y, j, V" O
  552. INX
    ! f8 l$ d5 s3 F. @# Y2 E! H
  553. LDA Sound_Bar6 S0 y$ Q3 T* ~1 @$ A/ `( C
  554. JSR Volume_Convert5 u  c+ D4 `) ]: o: |9 J) Y8 ?5 A
  555. JSR PPU_Return
    ( V8 \; H2 @4 P, V
  556. LDA Sound_Bar+$4
    $ ~/ |+ g  ]8 T) @
  557. JSR Volume_Convert" ~1 b6 C# S* ]& f2 t: x
  558. JSR PPU_Return
    & y: t4 S% w. R( X" a! w9 t+ w
  559. LDA Sound_Bar+$81 V% ~3 J1 M1 F
  560. JSR Volume_Convert_Ex# Q# a) ^9 `  m% |0 g0 o
  561. JSR PPU_Return
    * Z& T4 X8 i; N" n
  562. LDA Sound_Bar+$C7 A( b# w" q7 ?
  563. JSR Volume_Convert
    + q  q7 A0 e& q) b- U4 \: m
  564. JSR PPU_Return
    5 w5 L* F9 F6 l: E' w' ^
  565. LDY #$107 r' C2 b4 N. k, U6 Q
  566. LDA APU_STATUS+ F3 F3 r, ]% ]% Y. U& B- R  I
  567. AND #$10  j( A& q( l! P. q
  568. BNE Volume_Count* G# _% P. \5 T
  569. LDY #$00
    6 g, x5 a  B$ ]- i1 e$ g: Y* R
  570. BEQ Volume_Count
    2 Q. ]! v- H1 M! R$ [
  571. ;------------------------------. V2 |- ]+ z, U. l. M
  572. ;音乐条处理5 F" e% L& A3 J; d
  573. Volume_Convert_Ex
    5 m/ `& T' a( M
  574. AND #$1F9 ]* u5 s$ [5 c( |9 e" E
  575. TAY6 D% S: y4 n2 ?" k3 r4 k# g  p9 p
  576. BNE Volume_Count
    ! A  H  X& U( ^( A6 v. p. L8 r1 R
  577. Volume_Convert
    7 |1 ]. M& l! |# {0 v2 S
  578. AND #$0F  r: C2 t4 [" d; r* m+ E9 m! R
  579. TAY& N( |$ v1 y0 G( a8 _, j4 z
  580. Volume_Count
    $ y) j; t2 o5 y) o4 K& x
  581. LDA #$080 n7 F1 A8 V6 o
  582. STA Sound_Bar_Cnt
    ! \4 T" o( m9 A4 k) a
  583. Volume_FILL
    # X. u5 y/ z3 p$ Y1 u6 i8 P6 b
  584. DEY6 k' W" y  {- {/ X: b; |
  585. BEQ Volume_Half
    # v9 Y4 B. S: {  ~3 V" T9 z  q: e
  586. BMI Volume_Empty
    ' s4 Q" U0 }* j( A3 C# b. r
  587. DEY
    ; |0 m, j" Z: U, X" v
  588. Volume_Full
    " R9 N) [$ Y! _
  589. LDA #$160 V! u6 K! p1 W2 W0 P
  590. BNE Volume_PPU. x0 N4 x& J! z! ]; r  l
  591. Volume_Half
    , v/ C7 r$ \: q1 h. ~1 N
  592. LDA #$151 E5 [7 a4 {6 I0 f% p/ o* T' A
  593. BNE Volume_PPU- f: D1 j  L5 Q" U9 @# C: z
  594. Volume_Empty
      M' Q9 u' l% T/ y1 ~* ~* m
  595. LDA #$14
    / o1 Y" n0 x3 C
  596. Volume_PPU9 W9 q2 K% A, w$ `6 }- t( a$ ]9 c
  597. STA PPU_Addr,X! m% Z: R% E/ a; m8 v9 U
  598. INX
    9 q7 b7 Y( F4 N5 O
  599. DEC Sound_Bar_Cnt
    : N6 m5 y; [; e0 `/ k  c
  600. BNE Volume_FILL+ v( g' p4 H" Q6 c" J
  601. RTS
      q7 U: B4 i, k- h1 O3 K; W8 b
  602. / p: G. b! a  O4 E$ R
  603. .ENDIF
    6 F; l8 ?0 B; K8 Y

  604. 4 b( A' m) [) g1 N3 \
  605. ;==============================3 n# b% ?& d8 s3 k* [4 B
  606. PPU_Addr_Set;PPU行开始6 ~3 d- ~9 u! T
  607. LDX PPU_Cur6 H  E- X$ d8 d! A- R/ F* M
  608. LDA #Mode_Line1 R# o' g8 t4 Y5 h# A: w
  609. STA PPU_Addr,X  \( \6 X& L  d/ B6 }" j- V
  610. INX, E3 D# u1 D# G6 v
  611. RTS" ^+ S8 a0 a1 c: l% W
  612. ' g- _1 P5 d* @6 Y' K
  613. PPU_Return;PPU转行
    * Y9 o) u" `/ f6 N* y3 `" t$ s
  614. LDA #Flag_Over7 l* k( p( k' M7 s
  615. STA PPU_Addr,X
    0 S/ m; T# D2 H2 h# m
  616. INX
    4 q0 ~. L& t  R
  617. LDA #Mode_Return% B- i8 w+ O! Q5 [* F& X1 q
  618. STA PPU_Addr,X
    - \9 v6 ]( ?# A* c% c4 Y
  619. INX
    . h/ p6 @; ?" x2 {  K% v
  620. RTS
    : l# o; e0 n/ s2 c/ _. T

  621. ' n( m+ q* {: D; h, }; q+ f" A
  622. ;------------------------------
    1 c  G$ c9 f9 y) Q# N
  623. PPU_End;PPU结束
    % r0 u3 e" C: [3 q; E  @, J
  624. LDA #Flag_Over
    , }1 ?$ M: O8 k. d; E- }
  625. STA PPU_Addr,X$ B- W3 g2 F/ X
  626. INX
    ' k( ^8 L$ ]5 ^
  627. STX PPU_Cur1 q3 W( v$ O/ x% D1 |; \
  628. RTS, T, p4 R# c& W
  629. ;==============================9 a- ~2 B: B) A8 [. ~- b2 _+ i
  630. Mode_Line     = $FD    ;新起行模式) F# |3 ]" F2 O4 U
  631. Mode_Return   = $FE    ;转下行模式
    - g: I" C$ i* _' ?4 N
  632. Mode_Clear    = $FC    ;行清除/ n3 K5 j3 u; K2 e8 \
  633. Mode_CntLine  = $FB    ;行计数写入, d/ F$ E+ P3 f* s8 f( ?4 m
  634. Flag_Over     = $FF    ;行结束标志
    5 e7 c  s% b4 }

  635.   y: I9 I. @/ {& R
  636. ;------------------------------4 w9 [9 e; \& l4 @2 ?; A0 \
  637. ;PPU处理
    # ~  D1 g: m5 i5 R* j3 A
  638. PPU_Proc% l* J  O$ E- i; S
  639. LDX PPU_Cur& F6 c7 R7 J' i7 t8 _' I
  640. LDA #$004 k( G% ?( B) W+ L' R6 \/ B$ F! f
  641. STA PPU_Cur
    ( @& D  y: Q- F! c: P: \" v, w! p
  642. STA PPU_Addr,X/ b  t2 K& ^& S0 y5 @
  643. LDA PPU_Addr! k: J$ h- Y3 e9 n6 m
  644. BNE PPU_Proc_Beg
    % W( e' R- }; g3 Q$ v# G3 E* u( B
  645. PPU_Proc_Ret$ Z3 x$ j6 A* W& X9 i# n
  646. RTS' |4 t$ ^4 R9 X! A- Q/ H# |
  647. ;------------------------------/ T6 h+ {2 t# @' K" t
  648. PPU_Proc_Beg  ;处理开始
      T; e, D4 I. U- Y% _& G- m
  649. LDX #$00
    1 q6 F/ h- b& |7 [9 ]% ?! J2 y% {) z9 ~
  650. STX PPU_MASK
    ) E/ A! r* b# s
  651. ;------------------------------- n6 t7 D# X2 f) v9 P: T9 J
  652. PPU_Mode_Select  ;模式选择
      E# {$ ~4 O4 H1 }7 x9 }  U3 Z
  653. LDA PPU_Addr,X- R/ }$ g' s4 `  c' y3 E
  654. CMP #Mode_Line
    + _5 T  w% g) l  y
  655. BEQ PPU_Mode_Newline
    # u* X# d: K/ n1 D
  656. CMP #Mode_Return0 g" T8 c% E: Q) T# Y* _
  657. BEQ PPU_Mode_Return
    / u$ L9 @2 P5 U, x! t5 M% Q
  658. CMP #Mode_Clear& X7 `7 S- x& l- H
  659. BEQ PPU_Proc_Clear% ]3 S* T6 W0 S9 ^- h
  660. CMP #Mode_CntLine
    ' Z" Q5 \1 N; ?: \/ b
  661. BEQ PPU_Proc_Cnt_Line
    7 x3 t: ^2 s1 u4 Z3 M! i5 a
  662. RTS
    / }$ b3 Q+ q' {' u
  663. ;------------------------------% V# D4 }" u% V. D" n
  664. PPU_Mode_Return  ;转下行模式6 Q( N. J  l# ^! c# r$ Q1 \) M1 e% ]
  665. LDA PPU_Addr_L* I4 R2 S8 ~) b9 t4 N" I
  666. CLC
      R6 B+ p$ u8 u7 e+ A2 a
  667. ADC #$20  R, D5 o3 ?3 ]5 y
  668. STA PPU_Addr_L. y  J( p+ x- i4 H( e  d
  669. BCC PPU_Return_End
    0 g- O! M! h) H* G# s
  670. INC PPU_Addr_H
    , I* s& p6 L# g! a4 U
  671. PPU_Return_End" }. }0 }4 o' o7 y2 j4 Y
  672. JMP PPU_Set_Increaser1 S" c& M, Y* l, }2 B; M' N
  673. ;------------------------------
    0 z( g9 s7 W& ^
  674. PPU_Mode_Newline  ;新起行模式
    # _+ t6 p) t  {7 N+ a
  675. INX) s$ D1 B% v, N0 w. O- w$ n
  676. LDA PPU_Addr,X
    ; A0 t; h( z7 |+ q3 h- H
  677. STA PPU_Addr_H
    # B, V% |- S  r/ {
  678. INX
    * f+ {5 e9 c' T, l) p+ {
  679. LDA PPU_Addr,X! ]7 T6 \* v# e( a3 E9 K
  680. STA PPU_Addr_L: v7 W7 D3 ?5 o  }
  681. ;------------------------------0 X9 ?8 M9 v. q4 f6 w
  682. PPU_Set_Increaser   ;设置写入地址
    6 a8 k; S/ D/ S% N% S
  683. LDA PPU_Addr_H
    : w1 E8 d4 {& V3 ]4 J& O/ R
  684. STA PPU_ADDRESS
    6 C: K9 W: X# Q/ ?
  685. LDA PPU_Addr_L& I) K. ?) y; r9 Y8 w
  686. STA PPU_ADDRESS0 Q9 l  A7 c2 Y% G# r
  687. ;------------------------------  v9 o& V* Q/ s5 u8 }; D
  688. PPU_Write   ;写入数据) w. }3 ?1 t" g: h# L* Z  ?1 |
  689. INX
    . \0 h+ {( k9 p6 O
  690. LDA PPU_Addr,X
    * ^  u( |! k' F" M$ Y% {" b9 K$ Y
  691. CMP #Flag_Over
    , @% y8 x3 _+ g  n4 g( o
  692. BEQ PPU_Proc_End8 x1 K7 i) H/ }" j6 l
  693. STA PPU_DATA
    9 q) U+ Z, H2 R- I/ M2 g+ D- D
  694. JMP PPU_Write
    ' M9 v* s& A! k
  695. ;------------------------------, [% N" Q& k; v. c$ E
  696. PPU_Proc_End  ;单行写入结束
    3 [3 o2 H+ u; e* i
  697. INX
    4 \. C3 n7 m9 c
  698. LDA PPU_Addr,X: z0 _4 d0 Z/ p: m" V1 L2 r1 `
  699. BNE PPU_Mode_Select) Q$ F, ?6 ~$ v& F; N
  700. STA PPU_Addr
    7 E4 D/ n- G/ j8 ^0 }
  701. JSR Update_Palette_Color
    , G0 d1 L& f" Q7 ~5 }; l
  702. LDA #$00( K- G4 k) ^" ~- Q- B
  703. STA PPU_ADDRESS
    $ _& H  o- r/ w2 e
  704. STA PPU_ADDRESS9 I) n* l4 U0 M& ]: a+ C! F
  705. STA Show_Track_Name9 N" n$ x$ C8 D% g2 Q1 t4 F" B' ~
  706. LDA #Scroll_X
    ! g1 j! Z* s6 N2 V+ e6 p1 L7 y( r8 i
  707. STA PPU_SCROLL/ S* E+ }8 L: Y/ y* k; y
  708. LDA #Scroll_Y
    : C/ }. x' R" M8 u
  709. STA PPU_SCROLL
    ! P' {( V- x2 R2 B
  710. LDA Screen_State" k! [% ~5 C( [% R2 ~5 s
  711. STA PPU_MASK
    3 Q% o& k& E* D* L0 j. p/ p
  712. RTS
    6 a- f( R/ A" i
  713. 6 L4 t0 C1 D" z9 U: ?
  714. PPU_Proc_Clear8 \0 `8 t0 S. D5 y+ G% Q( o
  715. INX
    ' S! a& Y- e5 B" y
  716. LDA PPU_Addr,X
    3 m9 i/ e" q3 ]# K/ I, _9 X  j
  717. STA PPU_ADDRESS
    9 O2 U7 F4 H8 \3 t" \: q: `/ P
  718. INX" ]' y+ L8 X. l% M8 l
  719. LDA PPU_Addr,X
    % k! ~* z2 p% n7 h5 l) T: @' N
  720. STA PPU_ADDRESS
    8 ?) h9 b) c$ G! S. {/ s/ A
  721. INX
      r& @* a& \/ t& N. b
  722. LDY PPU_Addr,X
    4 b( u% c( k- u9 i2 x$ Y' H: y; B7 g# S
  723. LDA #$00# p) l: i4 [( V  N; Y0 a8 R; e1 Y
  724. PPU_Proc_Clear_Write' M7 ^9 t; Z0 }" O( a
  725. STA PPU_DATA
    ! g! |. Q& y1 F& S0 K
  726. DEY
    2 t) Y9 s" L$ K& l; ^
  727. BNE PPU_Proc_Clear_Write
    : V7 y# U5 M7 }* M) c, C! ]! d
  728. JMP PPU_Proc_End: R- }& n) V9 r+ n$ t

  729. 1 i0 z1 ~6 V/ y8 y. u5 ~
  730. PPU_Proc_Cnt_Line2 h) ~6 ^% {9 p1 W
  731. INX
    3 P: u8 X8 Y# f' H* |  R2 V% M
  732. LDA PPU_Addr,X
    - R( l& L; a+ V
  733. STA PPU_ADDRESS
    & u3 b# h* \8 @: X7 X( ~
  734. INX4 N8 Z. c& p* A% P; k' o+ ^
  735. LDA PPU_Addr,X
    - U/ h0 I- l3 O8 D& Y
  736. STA PPU_ADDRESS
    # @7 H! w1 D! i
  737. INX
    % I; }% t  b3 k; w. a, W
  738. LDY PPU_Addr,X) d" e+ a2 ?' e3 a6 i3 P. s
  739. PPU_Proc_Cnt_Line_Write: |/ {9 G8 x5 a
  740. INX
    ; K' i6 `3 V; t
  741. LDA PPU_Addr,X
    * [( h) q4 @% F+ V6 R, a
  742. STA PPU_DATA
    5 g. r+ @* t- z, n4 S
  743. DEY+ e8 S2 i3 i7 Y! J! n
  744. BNE PPU_Proc_Cnt_Line_Write1 ?  H$ t5 ]! e' m# a( M& A
  745. JMP PPU_Proc_End
    4 n8 U) l+ {  a5 E5 K
  746. ) S1 }) E0 i3 [; ^# k7 ^: Z
  747. ;==============================+ k) I  g; D0 W# k" m
  748. HEX_To_Dec;十六进制转十进制* g  D$ o# V% [; O
  749. STA HEX_Data
    1 F, v) u  s2 F; A5 t  |, _
  750. PHA
    0 O! n7 v2 _5 r& t
  751. TXA
    5 o0 D, g" x% S. o; x" E
  752. PHA
    # a% q; ]7 q; h
  753. LDX #$00
    9 ^# c" f9 p% J
  754. LDA #$00
    ; ]6 Z3 ~' s/ L: F
  755. HEX_Cln
      `0 C! d5 C) N8 @3 {
  756. STA DEC_H,X3 R" w# P! e) W$ C
  757. INX, C; s1 c% d0 @/ y. G
  758. CPX #$032 o' w# ~# a/ Y2 N; Q: w: c3 ~
  759. BCC HEX_Cln
    1 j$ E/ C- S# R7 F/ H4 H' K5 i
  760. LDA HEX_Data
    & A$ @* k8 K! }% e- X9 ^- v- `
  761. ;------------------------------
    6 k7 w9 W6 O8 I+ P* i2 k9 ]
  762. HEX_100. X) M% V1 G0 O  ~
  763. CMP #100
    8 j  K. n$ I5 s, g$ h& L4 J, w  H
  764. BCC HEX_10
    * {$ K0 ]; `( K3 D/ w1 j0 z
  765. SEC$ g: j! B! t+ Q( |2 p$ T& F
  766. SBC #1008 Q# ~, N" f9 m0 |" C; ]
  767. INC DEC_H) K0 O& D8 G6 Q! q
  768. BNE HEX_1001 }) L+ t" D* r
  769. ;------------------------------% ]* W0 q1 S3 I  r7 l7 k8 R* |
  770. HEX_10
    , u  \( B6 o$ I7 S0 F0 K1 }! a
  771. CMP #109 n) T1 h8 P3 B+ |8 M3 f/ P( j
  772. BCC HEX_1: f  p1 g( @1 G
  773. SEC8 g, y: j; _" I# C. k. Q' O
  774. SBC #10
    . ~+ Z$ s$ A, N& H
  775. INC DEC_T
    , O/ v; K! z, A
  776. BNE HEX_10$ v& F/ B  }3 Y2 J/ h: U; v
  777. ;------------------------------! z. I3 g7 i: E) Y, m1 B
  778. HEX_1
    ) R9 N2 \1 t( @+ H& Z
  779. STA DEC_L
    ; f, C4 E% w8 c. n1 ?% B- H3 Y
  780. PLA
    / \2 F$ z4 b5 h8 g
  781. TAX
    ! b( {- ~" t/ z' Z/ ?8 N  G
  782. PLA
    $ y" p; s1 _* O* ]2 Y
  783. RTS
    ; V" J. E" x& Y7 K# K1 Q

  784. ) D% F: ?+ @) n7 I
  785. ;==============================6 y/ |) n$ L' p) e: C4 U% V7 }9 {
  786. ;音乐曲目显示
    7 H8 S6 [9 e: \( n3 C
  787. Music_Show
    - Y8 L; r  H: L4 K
  788. LDA Music_Cur
    , Z3 J) v( G' O; {
  789. CLC. u- I; j% d0 K- ^: |
  790. ADC #$01
    $ b( \# d$ J; S9 G+ D5 c# F
  791. JSR HEX_To_Dec
    + u* b1 S* h5 J3 M, ~
  792. LDX PPU_Cur
    / x" J! L0 K, h) v' K, z
  793. LDA #$FD
    ; `7 r% {# C8 w% |4 Q
  794. STA PPU_Addr,X
    6 ^! w/ E+ _7 ?+ e( S# u+ g& v( e
  795. INX5 f. O6 D5 }) q3 Z: B  c/ B+ `
  796. LDA #HIGH(Play_Index_Pos)
    8 X; N+ G- b9 Y3 U
  797. STA PPU_Addr,X
    " B+ q& B7 \0 L2 h  K% e7 ^9 ~, ]
  798. INX+ N5 r+ K5 y" d; j6 s9 S. I' R
  799. LDA #LOW(Play_Index_Pos)$ }- @) x- h- g
  800. STA PPU_Addr,X
    7 N4 E$ ?9 `' D, ]" @2 D2 L
  801. INX0 G  A/ F5 H% n8 _

  802. , \% ~9 w6 P$ a" X* u0 d
  803. .IF Music_Song_Total > 99
    * `+ L! _" x- |* X/ P: J, a* l
  804. LDA DEC_H
    * R" S) n3 b" P5 [! f
  805. ORA #$30+ [( ^7 G5 C; ~$ H7 [
  806. STA PPU_Addr,X/ X! g7 g' W) v
  807. INX8 x" C- E9 L% O& B9 n
  808. .ENDIF, {: Z1 h' ^$ X& M2 `7 ^, X
  809. . u5 s! W; R; m8 [% ^, d1 U7 m+ j- ~' m& g/ W
  810. .IF Music_Song_Total > 9
    % D4 r7 M. ]: [3 z
  811. LDA DEC_T
    ' H8 v$ m: J& v+ ^4 p* p
  812. ORA #$30
    8 l8 `! c4 V4 R; ~! b$ e. J  Y
  813. STA PPU_Addr,X' S7 Z9 w6 E/ u* i7 Z# f
  814. INX
    4 ]9 F. a5 X/ w- Z8 i: k! ]' I- A
  815. .ENDIF
    ) j  `- N( @0 L

  816. 4 J3 R  [/ f$ W% ?! R3 R2 h
  817. LDA DEC_L
    3 @! B1 i% e, d
  818. ORA #$30( W0 S% n5 |: h0 u4 o$ v
  819. STA PPU_Addr,X+ T( a4 q9 T0 }" z
  820. INX
    ) t! x) n: `! {* ]0 x

  821. 2 q. g& s- q0 g: {7 ~5 ~% c. p8 I
  822. LDA #'/'
    ; y& ^' H1 D1 j/ S* q2 O
  823. STA PPU_Addr,X
    ' Z2 M& E% y  \, l
  824. INX
    ! `# u% F+ v: O/ M5 w
  825. Music_Show_Total5 m7 I3 p8 V$ `  f
  826. LDA #Music_Song_Total* o0 Y  p6 |9 P% V" G8 [' N
  827. JSR HEX_To_Dec
    ! }6 E: M( n" A1 M) G

  828. 7 b# L$ g5 L. Z/ w. s6 w/ e  W) [+ p
  829. .IF Music_Song_Total > 99
    ! f' v& E# _$ ]% m2 [
  830. LDA DEC_H; m9 i+ z4 a" _8 c4 B4 q5 E* X
  831. ORA #$30
    + Q2 D( g* v7 N3 r0 {. e, b
  832. STA PPU_Addr,X
    5 [4 f3 e4 I! _6 }+ x+ Q
  833. INX
    6 _$ q9 I/ j) i, t; Z
  834. .ENDIF4 a* p0 h' E& I& C
  835. , O' K5 F$ r; Q3 R; y& B, q
  836. .IF Music_Song_Total > 9- R; a7 F& K; d; [( \2 S2 I
  837. LDA DEC_T  o4 C; d( B3 X# k% O3 n" l( a
  838. ORA #$30% y% n6 {8 p& g, G
  839. STA PPU_Addr,X
    ' k7 _% V+ ]  T. k
  840. INX
    9 B5 N1 y" c& b5 S1 r
  841. .ENDIF
    3 D% c# `$ e( H5 V) H* l
  842. - s0 K) @3 X! B) Z0 d# T( i/ i" f
  843. LDA DEC_L
    1 b* C6 {6 Y  J2 `# y+ C9 b
  844. ORA #$30
    - H+ P$ n3 [/ m6 Y
  845. STA PPU_Addr,X
      t1 u# [3 T+ i; m2 z( Q& l2 ^/ O
  846. INX" ]7 O2 g0 U8 @- e5 U7 C6 ~
  847. " n# P! A" E/ q& r% ~  q
  848. JSR PPU_End
    . p0 j% R1 Z, N+ A: a; }
  849. Music_Show_End& r" F  p1 m: ^, z/ Z/ K0 ]
  850. RTS- G! ?! u' m) f+ n
  851. 4 A4 I7 E" I- c5 O
  852. ;==============================
    3 ~! h" l# K1 ]: x
  853. Time_Show;播放时间显示
    # t  p8 X( L0 Y
  854. JSR PPU_Addr_Set$ |9 }% }) m9 u, l8 P4 B
  855. LDA #HIGH(Play_Time_Pos)) B& O# [+ h! `
  856. STA PPU_Addr,X, c2 j+ ~) U) g" s# N/ r5 v9 }
  857. INX
    $ J1 ~4 ]* t* r
  858. LDA #LOW(Play_Time_Pos)
    ( l; L7 m: t! d, a( g% {6 A: m6 T
  859. STA PPU_Addr,X- x) O' Z1 o8 U/ c0 O
  860. INX
    1 r( m) W" l) C4 I$ c
  861. Time_Show_H
    ! g' ]9 h, D: U& k* N% S
  862. LDA Time_H1 @; l+ u* I- g$ d% e
  863. JSR HEX_To_Dec- {& {) G2 B0 p
  864. JSR Time_Digit9 S$ g# }  p. t% Q! ~) X
  865. LDA #':'
    ; P6 e$ h! Y5 D- p5 j) \) L
  866. STA PPU_Addr,X
    9 p, ?1 M% I4 x; T
  867. INX
    1 L" ]+ _5 Y( P1 m7 t
  868. Time_Show_M7 O: z. B- S2 r/ k; Q
  869. LDA Time_M1 V" `1 Q1 S8 r3 r
  870. JSR HEX_To_Dec) r; ~3 w8 I- D  P& X) k  e# a
  871. JSR Time_Digit8 ^6 @/ H& I# d0 R0 l5 Y
  872. LDA #':'6 ^6 T0 e5 y, E; X2 r) I
  873. STA PPU_Addr,X
    7 N/ J& k; o0 b2 l* l  S- @
  874. INX2 c! u6 j0 R4 Z, D8 w! U
  875. Time_Show_S3 \0 E5 q+ n4 c( A
  876. LDA Time_S& ~* W  o- c/ s! `: T+ }& _* `
  877. JSR HEX_To_Dec: ?8 Y' x7 [" T3 K7 ~8 H: c6 e6 C
  878. JSR Time_Digit
    5 i$ `' v# X2 f. y0 p
  879. JSR PPU_End
    ! {6 {4 A; K" I; m* @
  880. Time_Show_End4 `9 \" H7 @3 \
  881. RTS
    ; j- S5 m$ {+ S
  882. ; h: P/ M& p# c2 |
  883. Time_Digit
    / h* Q/ G$ v$ l. w8 L9 f: @
  884. LDA DEC_T0 v7 ~0 l* N  X1 f$ ~# C
  885. ORA #$30
      z* {! E, [4 ^, n& p$ V) c: K
  886. STA PPU_Addr,X
    - x& X& x7 g1 _; `7 U
  887. INX
    + A9 L+ B# Y3 E8 ^
  888. LDA DEC_L5 u$ ]" T0 J7 D6 J; A
  889. ORA #$30* H, G  L) ]/ b
  890. STA PPU_Addr,X2 B& _) E9 V8 C9 l
  891. INX, s6 R8 g5 {* M
  892. RTS0 O3 ]" X  O/ a. s

  893. + U8 I& |* `* F" k, l5 c# ]
  894. ;==============================
    " f4 N9 L* l6 D
  895. Time_Count;计时
    ) Q3 n: q; p, {) u) P
  896. LDA Music_State
    0 o0 t/ _7 T! h7 z
  897. ORA Time_Wait_Cnt' c4 C+ z2 Y1 t- W3 c
  898. BNE Time_Count_End
    2 ]% q6 N2 j  V( u8 ?2 C* M8 I
  899. INC Time_Cnt
    5 Z% J$ C, {2 N3 R- I4 L) i" _5 Z9 l3 @
  900. LDA Time_Cnt
    6 ^) F7 F1 d! s% G, R* G
  901. CMP #60' b; f2 i% T1 k& z, ]
  902. BCC Time_Count_End
    % P4 E9 a* N4 q$ k
  903. LDA #00
    1 ~# R6 e( u- z. y- I. P! w0 K) V1 M
  904. STA Time_Cnt
    & u7 x& [* G( @! @$ p/ _
  905. INC Time_S6 h8 M) ?* }" @7 N7 p
  906. / N# y5 W5 Q, [5 h; F
  907. Time_S_Cnt
    ! o; X, i- h8 \7 Y3 X3 X
  908. LDA Time_S
    ( Y& i& z" \. }4 o7 R$ @# T
  909. CMP #60# w  P, v: n7 A
  910. BCC Time_Count_End
    $ ~# e* j  v3 M2 l  y% ?1 U" p  W
  911. LDA #00! y; U9 v5 `& I% k; `
  912. STA Time_S: G6 }& F; G) R5 o7 W# B
  913. INC Time_M
    , [% i; ], \% G% [- V

  914. % h& y3 T+ P9 H5 \% k
  915. Time_M_Cnt4 P3 E7 i% T3 [# F5 o2 f8 ~2 s
  916. LDA Time_M
    * G. e. j: |1 ]2 S: V
  917. CMP #60
      S( k* W7 R# A- D
  918. BCC Time_Count_End& X0 o' v& {8 ?% B, f2 ~
  919. LDA #00
    7 i6 ?# i" q1 u  X- y2 h" j
  920. STA Time_M# d7 i# l, Q+ r6 a  `
  921. INC Time_H
    ! B! l5 }+ c: A- c5 f
  922. 5 l0 F/ \8 G0 J+ Q, K: j
  923. Time_H_Cnt) c# y! p5 f$ Z  m! y8 i( C0 z# v0 g
  924. LDA Time_H8 Y9 w" `8 h! \/ a# p3 X. N
  925. CMP #24/ J4 ^' g2 e3 s$ j
  926. BCC Time_Count_End! r7 N+ e3 i* F5 `: I; o
  927. LDA #00* T% K4 Y% v& V! A; h
  928. STA Time_H
    & ~- o4 x7 Z2 L3 E
  929. 6 e  h4 O2 U, w2 U+ o( m
  930. Time_Count_End- q3 J1 s3 E/ f$ f4 P5 ~& o% z
  931. RTS
    3 I& i+ q1 _, k; n) ^
  932. " B0 j+ j$ F) Y+ P& x
  933. ;==============================
    , I! C$ |/ M: O
  934. Time_ReSet;播放时间重置$ j3 |' ^# [8 ~% G- ~: D
  935. LDA #$00% W: f. }8 }% R  X" b* G+ H
  936. STA Time_S
    8 v; F5 ~& ^: e2 J" Z; Z/ o
  937. STA Time_M
    , f8 g4 V9 y! D) T' B/ x
  938. STA Time_H& w% H4 ~% X" b* N8 R: P2 i6 ^
  939. STA Time_Cnt9 i7 q" Q. R2 s+ w
  940. RTS
    - D7 M9 R  A) `$ T+ X# _: A  W

  941. ( f0 I$ |8 |( a- j
  942. ;==============================1 L5 t. G! c7 I$ P
  943. Music_Bar_ReSet;音乐条重置
    / m6 w0 z( K) q$ _
  944. LDA #$00
    / Z; q! u% u8 H) \; B/ x5 R" h
  945. LDX #$00
    ! @# b: `% t0 f& T0 M: r
  946. Music_Bar_ReSet_Set
    2 K" [. U8 n: E: E4 R, n) A, i9 a
  947. STA Sound_Bar,X
    / `$ j/ W' v" U/ s8 R
  948. INX
    : O5 F- I$ I$ ~
  949. CPX #$10; y9 q% Z3 k( t
  950. BCC Music_Bar_ReSet_Set
    6 U, K  a9 {* M" E0 v$ P
  951. RTS) q- F6 @! t+ G6 L" @- p  |, `3 [! V

  952. , E6 k3 W0 k8 m3 ]2 \+ T7 F
  953. ;==============================
    / g7 _! j7 N$ z+ K9 ~. C& @
  954. PPU_Data;PPU数据写入
    ' b" R, l/ o1 X4 L/ @8 x3 q
  955. STY Data_L
    . K1 H6 F+ g/ w) c% \: ^
  956. STX Data_H
    4 d/ _6 Y$ i- _- H
  957. LDY #$FF
    5 B% H* N+ H4 M$ w
  958. LDX PPU_Cur& h* K! b& z% Y5 F9 |0 s7 b
  959. DEX: s' h8 x) j8 f6 ]# w: x: Y
  960. PPU_Data_Beg
    5 u2 C. p/ ?- G1 P
  961. INX
    ' u) m9 F, F2 e( ]5 t" v
  962. INY( Y; z: U2 E4 T# E- w, c( Y4 a
  963. LDA [Data_L],Y6 i6 h8 p0 d/ u  _
  964. STA PPU_Addr,X
    . b  e  x$ M7 {3 [6 c6 _
  965. BNE PPU_Data_Beg4 G5 R, ^) `8 A) u
  966. STX PPU_Cur
    * H' f: d6 D( U' F( z) C
  967. PPU_Data_End( `* x8 g) q+ ], X/ ]7 K9 b
  968. RTS
    2 @% F% R' g' L/ B2 F- h& _
  969. 0 i7 ^( N1 O+ e9 g
  970. ;==============================$ j" K0 t; {+ Q: M, m
  971. Music_Stata_Show;播放状态显示
    ) E3 J) p' x0 p* }: M+ F6 Q: R7 w" J% o
  972. LDA Music_State
    7 I& i) E4 T4 k* N3 j; q! [
  973. BEQ Music_Stata_Show_Play
    * R; y8 W! m) b, U" Y! N& |
  974. Music_Stata_Show_Stop; {/ v. i1 A  a9 O
  975. LDY #LOW(Music_State_Stop)
    ) n& I; a# T: }2 e# T8 Y
  976. LDX #HIGH(Music_State_Stop)
    ' S7 ]$ R1 b- q2 |+ p
  977. JSR PPU_Data$ Y7 E6 I: i) ^: g, b' F
  978. RTS
    0 X$ t5 b1 r! l0 K4 O$ _: a
  979. Music_Stata_Show_Play
    4 x3 A6 W' w$ N6 z; Z- [
  980. LDY #LOW(Music_State_Play)3 j7 ?1 a$ f$ |, P8 w
  981. LDX #HIGH(Music_State_Play)/ Z& V  u  q5 U8 N
  982. JSR PPU_Data
    " D4 Q; Q5 W  ~5 _+ S0 s
  983. RTS
    / e+ z! {- T- c$ q5 @  g
  984. 7 z7 p7 y8 A' C/ W
  985. .IF SOUND_BAR_SHOW_ENABLE" N) `$ h' q. c4 f: ?# b1 g
  986. ;==============================9 F4 c# e; X1 G6 L5 P+ D( q: t- s
  987. Sound_Bar_Text_Set;标题与音乐条初始化* ?! e" C/ g7 F* ]5 N; {' D
  988. LDY #LOW(Sound_Bar_Text_Data)
    : O% E: _2 E8 u3 G; a2 R! m5 c
  989. LDX #HIGH(Sound_Bar_Text_Data). Z8 O$ v4 i5 Q/ u( r6 O2 }8 y
  990. JSR PPU_Data
    0 S4 K. D7 k, P: ?$ I- M2 [: x
  991. RTS
    & w1 l  Q: P9 u9 y6 M
  992. . ^( }& V2 X6 t' f% F+ K
  993. .ENDIF5 X8 v( }8 W4 @: d- \" K- z

  994. - N$ J0 J( P6 j6 G! a/ a' S1 u5 a1 U
  995. ;==============================( W$ {0 v. _9 ^' O% |
  996. Set_NameTable_Attributes;设置命名表属性: }1 A( c" v1 o% i8 [8 y$ m) v
  997. LDA PPU_STATUS7 l, E& Z9 T7 Z
  998. LDA #$23! V2 o1 b1 b2 S. `, _4 x* o# o  ]4 D* o
  999. STA PPU_ADDRESS
    7 L3 S+ [. l4 O: Z$ M% P, h* w5 t% g
  1000. LDA #$C01 X$ @1 V& K) S
  1001. STA PPU_ADDRESS: f5 V3 l5 L& j. ]1 w! g5 a
  1002. LDX #$005 S$ l" i4 ~. g  T+ i( z# f6 |) ?
  1003. Set_NameTable_Attributes_Write
    ' E% S1 V3 J  _2 N1 E2 L' O& w
  1004. LDA Palette_Attributes,X
    $ c+ M7 i+ W' q* x7 D& S
  1005. STA PPU_DATA
    / J, g$ R5 W# @1 w& G" X1 G( _$ E
  1006. INX" O8 [8 j8 Q% A# e* R) \6 _
  1007. CPX #$40
    : B* l+ y- r8 D
  1008. BCC Set_NameTable_Attributes_Write2 n5 F2 e* h2 H' y5 p. ^' _
  1009. RTS4 f# w0 ?. s8 Y4 z, f

  1010. 4 u- }: h9 V4 v; O0 `; r" r( r5 e
  1011. ;==============================
    & f! Y( L! m* f
  1012. Set_Palette_Color;设置调色板数据& b; f9 p: Z* H0 r  b3 u
  1013. LDA PPU_STATUS  j$ G4 H8 b+ ]; z
  1014. LDA #$3F# `" T$ r3 V1 g
  1015. STA PPU_ADDRESS( G( e4 C) e5 V1 B* S
  1016. LDA #$006 O2 b& L  _) P/ ?1 W
  1017. STA PPU_ADDRESS
      g1 B1 @. c: l+ ^+ c& t4 ?# C; [
  1018. LDX #$00
    # `- Y& Y  U4 R2 h
  1019. Set_Palette_Color_Write2 x. A/ j, @4 J
  1020. LDA Palette_Data,X4 }, g/ V$ D8 C
  1021. STA PPU_DATA/ Z" E4 R3 o3 _! h5 m0 u
  1022. INX
    % m) x$ a( w5 D: h: g$ W' l5 w
  1023. CPX #$20; q' [3 {! f4 G
  1024. BCC Set_Palette_Color_Write4 s3 T6 f9 @( j. Z/ z
  1025. RTS% M: k% N2 F/ N& _: S- n" R6 p

  1026. ( \6 x2 ~8 S" G% m2 D
  1027. ;==============================2 V/ Q0 W2 k. n7 G6 I  ?, ~  b
  1028. Init_Palette_Addr;初始化调色板数据" L/ h1 K' o! t) ]+ a( F' D1 f  p, O
  1029. LDX #$002 y6 q) v! A7 c+ L* y0 ]2 M
  1030. Init_Palette_Addr_Write& k9 V0 Y4 K' M8 G, ]( K. Z- p
  1031. LDA Palette_Data,X8 }4 K/ Y: v; \. k0 D* @! w: L
  1032. STA Palette_Addr,X
    . W& [/ D7 j, y  k5 l4 o
  1033. INX
    3 T$ N) S! c' o7 w* Q0 i( Z8 Q
  1034. CPX #$20
    8 C3 t5 G$ H+ i1 B
  1035. BCC Init_Palette_Addr_Write
    5 V/ ]0 q- [4 Q
  1036. RTS
    - p3 e$ U( F# [- K2 I
  1037. 1 f& v- V5 N- `" }* ^# f
  1038. ;==============================% k8 J6 S' }. `3 j, n5 `0 V( d: k" ~
  1039. Update_Palette_Color;更新调色板颜色. X2 e% r3 J+ J8 }+ P
  1040. LDA Show_Track_Name
    ' N; c" i' u% ~
  1041. BNE Update_Palette_Color_End
    3 t3 S6 }& D0 X
  1042. LDA Palette_Update_Flag
    1 h; G, V& L+ W
  1043. BEQ Update_Palette_Color_End/ q& s0 X  ]) R
  1044. LDA #$3F
    & m, b2 X1 ^. f' C# `- \5 @, N
  1045. STA PPU_ADDRESS
    + Y, ?) r! ^$ p6 u
  1046. LDA #$00! `/ j: \& e4 O) q
  1047. STA PPU_ADDRESS
    4 E- s/ b  D6 `6 f* r; ?4 Q! A
  1048. LDX #$00
    / I; m( j* u5 T4 i3 a
  1049. Update_Palette_Color_Write
    6 R: \3 W5 k; M! F( R
  1050. LDA Palette_Addr,X
    + {9 ^  c" |) g6 f% u5 Q  |
  1051. STA PPU_DATA
    4 u3 j( [. ^2 v# U; C8 C
  1052. INX
    ) c2 C; g9 s. R
  1053. CPX #$20
    ( Z! F2 t: |7 T* @- z% \+ V# n& \
  1054. BCC Update_Palette_Color_Write2 w, [- x& y( x) T5 D, t
  1055. LDA #$008 V5 x# X! l7 {) I
  1056. STA Palette_Update_Flag
    # I& K* M8 ]/ j- e
  1057. Update_Palette_Color_End
    6 h4 u/ H+ |8 L. D- [. a; e4 D
  1058. RTS
    3 t# _) S4 ]$ {* K0 d/ d( t) @. b5 B
  1059. + o" \( H7 Z( m" [
  1060. ;==============================
    # }, {3 v1 J( g
  1061. Update_Palette_Data;更新调色板数据' }, K/ K& l1 O" ~; n
  1062. LDA Show_Track_Name* E& e) J3 V8 I3 y
  1063. BNE Update_Palette_Data_End
    . w. v9 c! H! e/ Y$ n- J
  1064. LDA Music_State
    4 u& P. v% A/ p% A! T
  1065. BNE Update_Palette_Data_End
    8 S) w1 ~/ p/ |5 i; E3 `; [
  1066. Update_Palette_Data_Check+ D; {$ q2 \! ~# b/ M
  1067. LDA Palette_Wait_Cnt
    1 k/ |. h- j" k7 G6 Q. l" I+ Z9 |
  1068. BPL Update_Palette_Data_Check_Over
    & O& V% M6 C; H0 P. f2 z7 z  a5 P! G3 Q
  1069. LDA #Palette_Update_Interval
    , \3 b; h: u! }9 f3 O
  1070. STA Palette_Wait_Cnt
    ! Y) x( `3 z2 h* T( G6 c/ F8 v
  1071. Update_Palette_Data_Check_Over
    % S3 F$ h% ?# a% W+ q% w( f
  1072. DEC Palette_Wait_Cnt
    2 V+ f2 D0 e5 O( C/ r
  1073. BNE Update_Palette_Data_End1 s5 b+ ~3 |7 b% V$ `
  1074. INC Palette_Update_Flag
    1 x: X2 u! A, ]8 ~7 H! t0 D9 ^' N  k- ]/ h
  1075. LDA #Palette_Update_Interval! {- M' P5 z; _, r! w# O
  1076. STA Palette_Wait_Cnt! P& w' x) i6 S
  1077. LDA Palette_Update_Addr
    0 H" P0 `7 T1 ]* u+ C$ S
  1078. CMP #Palette_Update_Max1 h. y- P" J* J; j8 q% U% }& u
  1079. BNE Update_Palette_Data_Set  Y* s; R& {2 b( n8 Q# E
  1080. LDA #Palette_Update_Min - 11 a0 _2 n4 L5 j% e! H3 k; a! A
  1081. STA Palette_Update_Addr
    3 @5 [9 r7 p) S& O
  1082. Update_Palette_Data_Set
    . `0 A/ g. k% ~! ]  E6 _0 F$ E
  1083. INC Palette_Update_Addr: K, p! x2 z+ j* P. U
  1084. Update_Palette_Data_End
    6 P+ u* `9 J; a  p; V
  1085. RTS8 r" d, ~4 Q9 y  t; J) I3 Z
  1086. 6 M! B7 c1 S5 w+ h- v8 A: p
  1087. ;==============================% q+ c* N  l/ e3 Z4 [, o1 T
  1088. Show_Music_Text;显示静态文本; y& [6 v2 K7 j
  1089. LDX #$005 q8 D( f) b3 U) W# o
  1090. Show_Music_Text_Set
    6 C( z/ k# ?0 m- _  @7 j5 {
  1091. LDA Static_Text_Data,X
    0 x! U' M3 ~! h1 z
  1092. STA Data_L1 i" Y. m, K! K, H
  1093. INX
    , S: P8 t( B& D5 |: w
  1094. LDA Static_Text_Data,X7 T$ y, S# T4 O1 T5 y
  1095. STA Data_H( U* i- P& }# \' X  ]- a2 B7 I
  1096. INX1 }8 u3 L) ^5 W. W
  1097. LDY #$001 {! K! t/ I2 x. T4 [! }# }
  1098. LDA [Data_L],Y
    . w' F4 k- M8 b/ y
  1099. STA Data_Cnt
    ) ^: G+ {  _7 y. n- X
  1100. DEX, M2 o, v6 Q4 z! ~$ ^
  1101. DEX- s* l0 m7 }* W! c- c3 B/ M' c
  1102. LDA Static_Text_Pos,X1 Q1 i4 B& u! y# _6 J
  1103. STA PPU_ADDRESS, d& c' g. X: l9 q
  1104. INX2 Y. U; q& ^- W  D: [4 h1 Y% n
  1105. LDA #$20' N$ ^7 d: B$ W- Z" `. ~
  1106. SEC1 f2 C) }# M# s# d6 j/ q* k
  1107. SBC Data_Cnt8 z; w1 \1 a. x8 `* M
  1108. LSR A
    7 a* K2 N" O* @  ]( b' s/ E3 K" {3 {
  1109. STA Data_Buf4 \5 o: ~* O, R+ U. C# x( b
  1110. LDA Static_Text_Pos,X
    + ?) F) w: v' N0 {$ I  ?
  1111. AND #$E0: b+ k/ p5 c4 Q& K/ c2 O
  1112. CLC
    : a5 ?- E3 X4 A$ u
  1113. ADC Data_Buf
      O$ R) f; ~( w
  1114. STA PPU_ADDRESS
    % u2 x- |. W. |6 Y' P. Y
  1115. INX& F4 I2 Z3 T8 A# w0 U, V* i
  1116. Show_Music_Text_Set_Write
    ; }6 e: T- t& `0 ?) c
  1117. INY
    * ]7 ~) _( r% R1 n
  1118. LDA [Data_L],Y
    ; d: P4 r  T# Z" G5 T
  1119. STA PPU_DATA
    " W  `7 a2 ], M& {. ~/ s
  1120. DEC Data_Cnt
    + i( v% [# j6 L; K
  1121. BNE Show_Music_Text_Set_Write
    / B( G9 C5 {% Q8 k5 Q" ~
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos, O! P, K. t- b# E/ H
  1123. BCC Show_Music_Text_Set# l4 c$ s" F' u& q3 r/ x4 O
  1124. RTS. I/ X. ?. V9 R: k) K# R
  1125.   }7 H3 @7 D2 t8 |. n# t. ^
  1126. ;==============================
    " \$ h* e/ P: I) @2 K7 j7 v9 B
  1127. .IF Track_Name_Pos;显示曲目信息9 o& W2 e& z5 U+ ?$ u
  1128. Show_Track_Info! _+ E* `/ {# N
  1129. INC Show_Track_Name
    5 t& J9 c# L% s2 t7 f- {
  1130. Show_Track_Info_Clear& I1 a$ O: S; P- ~2 L
  1131. LDX PPU_Cur: b  J0 y( q  C0 ~! ]% ?
  1132. LDA #Mode_Clear
    " u9 D: l4 x8 C( T2 [- E
  1133. STA PPU_Addr,X
    0 U6 d& P$ T/ E: q
  1134. INX% I9 V+ u2 K  z9 u* S; l7 F

  1135. , _2 i& @* k2 {$ `1 p1 ]5 L9 @
  1136. LDA Music_Last  X1 W( M* V' u: z, x
  1137. JSR Show_Get_Track_Name_Center_Pos
    . f3 K8 C! M! a2 M, v  Z
  1138. Show_Track_Info_Write_Cur
    $ D! }% f& e% a- y% i
  1139. LDA #Mode_CntLine+ u6 e1 Y" ]% N0 a$ ?
  1140. STA PPU_Addr,X
    0 l4 k" \* i$ b
  1141. INX
    / s9 a. O* R! p7 @; E2 m
  1142. " @( k5 D: C7 P; I
  1143. LDA Music_Cur
    9 ?. l' s4 P+ _% g7 b: k
  1144. JSR Show_Get_Track_Name_Center_Pos- r8 M3 T% E4 R: F; K2 q
  1145. / [6 [: c# d1 ~( e+ N( a
  1146. Show_Track_Info_Write_Cur_Data
    & p6 t( g4 N+ t+ d: T
  1147. INY
    - N0 o% b. k5 l) f
  1148. LDA [Data_L],Y; o& g4 |9 n- X8 A; a
  1149. STA PPU_Addr,X
    , ]% @) D& p9 i) e% L
  1150. INX
    2 O* F- t! q1 \
  1151. DEC Data_Cnt; r9 Y1 G/ [9 M" J$ M
  1152. BNE Show_Track_Info_Write_Cur_Data) d) a* u: j# {
  1153. Show_Track_Info_End
    . `4 ^. D) m; U( r( m+ J
  1154. STX PPU_Cur
    ; U  ~( p2 A' o6 u2 @. K3 W4 b
  1155. RTS
    . t8 f/ y, `3 F+ H

  1156. 2 p2 I0 y- g+ c& T; E
  1157. ;==============================
    ' @  A0 J2 f2 D
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置! R& M- R$ u  G) C) }
  1159. ASL A: w/ V" w' {$ ^1 q5 }
  1160. TAY5 g! e6 e  ]& i( x) \
  1161. LDA Track_Name_Addr,Y  m( e- p4 l0 ^! L( n1 G$ }
  1162. STA Data_L. f. ]4 M4 e  Z* Z2 k
  1163. INY
    5 ^" x4 E2 V' n% l. C4 i
  1164. LDA Track_Name_Addr,Y: P. D3 M- q3 P- V- R; L
  1165. STA Data_H6 _6 e6 W7 E! u$ Z
  1166. LDY #$00
    8 T3 z- k. @+ {. {6 n
  1167. LDA [Data_L],Y
    ; o9 S$ T- v1 c
  1168. STA Data_Cnt# C+ t7 f1 W6 P
  1169. LDA #$20  \8 C6 e0 b. R3 r8 [  u+ E9 n' a
  1170. SEC# ^" Z0 D/ _5 ~$ u
  1171. SBC Data_Cnt' e/ S9 W/ |# `; g% p! D
  1172. LSR A3 f- @' m: {2 T7 l: g1 E
  1173. STA Data_Buf
    : B7 q/ z  ^4 o
  1174. LDA #HIGH(Track_Name_Pos)
    2 H- p, r- q% J5 t8 E3 _
  1175. STA PPU_Addr,X( m9 [& k# [, |1 P3 ]3 J5 t, f( J
  1176. INX' Q* p! C3 |1 u. e: e, a8 d
  1177. LDA #LOW(Track_Name_Pos)
    ' a' k7 Z$ W$ f; k
  1178. AND #$E0
    & ~! ]& d) k0 K/ r, Q( @
  1179. CLC. J7 ~% V- L5 Q( L4 K  }
  1180. ADC Data_Buf
    ! k; F6 I9 ?5 O: W
  1181. STA PPU_Addr,X; x3 l8 p8 z4 z+ F  n) J' W
  1182. INX
    & _3 A& O- I- ?
  1183. LDA Data_Cnt
    2 \; d% p- e1 @7 Z& O. f" y
  1184. STA PPU_Addr,X9 ]) v, [: R- y) L
  1185. INX
    * I0 B9 C4 _4 C
  1186. Show_Get_Pos_Center_End
    8 b& R9 x, @& S3 n
  1187. RTS# }" t3 U& p7 A( m- V& w) a( c3 l
  1188. .ENDIF# e/ m) I- |1 n. w: _

  1189. , }+ h" t0 |4 Y
  1190. ;------------------------------
    % h8 d+ F' q$ @. T$ H6 l
  1191. ;命名表数据% q: Z) ^/ Q( Y1 K* ~
  1192. Palette_Attributes
    6 Q# {& E. K& }' R9 S( A, G
  1193. .IF SOUND_BAR_SHOW_ENABLE
    6 X0 t- ^: R1 P  _% W( p5 b# G0 T' E
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    8 M/ i$ k2 d, ?$ q, K3 L
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA2 x( a% R' V& Z# w8 J( s
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$552 |- j; v8 n# B+ }; K4 x
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$557 C. d, p% z" P" y( M0 ~2 Z
  1198. .ELSE
    " W9 t9 @- l9 k: P
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    6 c( K$ {* H& b% f
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    ; F6 W" ~: E4 O. q% i% b
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55$ S" f. ~) j5 p1 }2 J5 q
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$552 Y* m( n1 _0 B+ i- @: k
  1203. .ENDIF
    . y3 c& \6 e4 U- q
  1204. 5 R5 \( D. H( D: l" Z
  1205. ;------------------------------
    # r$ D( n5 s, D. i
  1206. ;调色板数据
    $ U9 r" S. ~- S7 \6 s( h5 I5 E, x# e
  1207. Palette_Data( e- G" L7 y8 Q, S
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F7 K. f/ a) o( @. B7 E
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F4 d. ?3 G  m: e9 d9 n! M: H

  1210. 2 _9 T; {9 O! T7 s6 C) p5 f' f- s0 f7 l
  1211. ;------------------------------+ u' R  j" c7 I; S3 {3 s: |
  1212. Static_Text_Data" B5 i. D8 O; d$ I* ^
  1213. .WORD Static_Text_Title_Data
    ) H  b( p( |; Z# j) Z- s
  1214. .WORD Static_Text_Author_Data
      _1 f+ _+ o' [) p' i7 ~% K
  1215. .WORD Static_Text_Date_Data5 _. K+ [8 ?! p1 S( z+ W8 I
  1216. Static_Text_Data_End
    + f% u# R2 ~* Z% _$ w
  1217.   ~+ t1 o8 g7 C- U/ D
  1218. ;------------------------------
    ! n$ c: N  j! S( s& Z1 A
  1219. Static_Text_Pos
    5 ?6 s9 x& {5 N0 j! F
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    / y; i0 D& v" T/ m! `7 a  h* T
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    " A9 T: o, {$ q1 x$ U. P. P
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    ; B; b. o% I8 q+ F) k! s% c) R
  1223. Static_Text_Pos_End1 ]# `$ N0 \; J0 W5 N! N( z
  1224. 7 W# X2 \0 l0 x* l2 l) X. I
  1225. ;------------------------------) Q' Z0 X. R6 h$ j7 p4 {: j
  1226. Music_State_Stop1 n9 A# Q$ h1 K" o/ C+ S/ A
  1227. .IF SOUND_BAR_SHOW_ENABLE
    ) i. V: E! N4 Q: `9 m) h. k+ ^
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    8 }5 ]; q* [& M% p+ k  w
  1229. ELSE
    ( K% t6 }+ V# r# ^% k+ J' ]
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    0 d/ Y+ ?3 S0 r1 W4 ~
  1231. .ENDIF
    9 z% E) G5 Q1 y0 T% t. s
  1232. Music_State_Play
    # a! i4 W# D- e2 \1 a& L
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$001 L8 m" L: J; }2 C
  1234. 4 c0 T% s( e8 T7 d
  1235. ;------------------------------
    # H& [- y5 ]$ @4 s; o
  1236. Sound_Bar_Text_Data;声音类型文本
    2 I3 t) m1 c' X( t- q
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    & N  \5 i- o0 }+ R
  1238. .DB "SQ1-",$FF
    ) D7 B, _7 h8 a" y  i$ A
  1239. .DB $FE,"SQ2-",$FF- F+ F* X3 K* z5 T: o! a) A
  1240. .DB $FE,"TRI-",$FF
    5 `0 @# B& O7 I: o7 T) |
  1241. .DB $FE,"NOI-",$FF
    # n( ]5 o0 _' P# n8 B" H5 Q/ T
  1242. .DB $FE,"DMC-",$FF,$00
    ' b3 K  O/ v5 L
  1243. 9 D# Y. z% f8 }/ [
  1244. .IF Track_Name_Pos
    - {1 e, Q. @2 C% `" L0 U( B
  1245. ;------------------------------3 M$ T* ^2 i7 }7 I6 n3 N
  1246. Track_Name_Addr;曲目名地址索引
    9 |, f9 C0 c* j0 e4 w# v
  1247. .WORD Trackr_01
    7 {: Z) j( Z; b3 ^8 r
  1248. .WORD Trackr_02$ d( b. n* M9 T( s" H
  1249. .WORD Trackr_03# H2 s% k) m; H" R( a4 L1 i
  1250. .WORD Trackr_04; E; g; f6 v! F* u5 Q! H1 T9 W7 f
  1251. .WORD Trackr_05) J0 }+ R; v, L
  1252. .WORD Trackr_06% M5 U+ U! h) X+ D9 q3 \0 A
  1253. .WORD Trackr_07& K7 S9 T" J7 g  |/ v3 E
  1254. .WORD Trackr_085 A0 G, m* V. d5 P
  1255. .WORD Trackr_09
    5 d2 P0 J8 |$ D$ b7 W
  1256. .WORD Trackr_108 C2 n) i) H/ C: ~1 t! V
  1257. .WORD Trackr_11( y  L" v+ A% ?* _& }8 j, [5 ^
  1258. .WORD Trackr_12) Q6 i5 L6 M" s0 E* j" `" P3 e
  1259. .WORD Trackr_13/ s% y/ H  F) P) G8 ^9 `
  1260. .WORD Trackr_14( y$ L, i' r$ l- @
  1261. .WORD Trackr_15
    5 n. m+ Q# I% w  x% v  g
  1262. .WORD Trackr_16
    $ x  `1 I0 P( X) I2 z9 D; M9 |  X
  1263. .WORD Trackr_17
    , N* [' S% S4 O& x3 t
  1264. .WORD Trackr_188 h7 x- ~5 ?. R" {( r
  1265. .WORD Trackr_19
    ( K  L2 P2 r! o: O6 m) s
  1266. .WORD Trackr_20& p! `5 L. D& d% _
  1267. .WORD Trackr_21
    ) v3 e0 g# A8 J( L
  1268. .WORD Trackr_22
    $ R, Y! s9 G( o+ B4 p
  1269. .WORD Trackr_23
    , ^; l/ l3 ?. _% @# R
  1270. .WORD Trackr_24
    - `2 o0 J* T* {  r
  1271. .WORD Trackr_25. R0 ]0 |8 q. m1 o9 v4 H& m" t
  1272. .WORD Trackr_263 U7 ^% i( {; A6 r- |4 Y
  1273. .WORD Trackr_27
    7 q. y6 G1 W5 U+ Y
  1274. .WORD Trackr_28, r: b2 T% F3 ~( b
  1275. .WORD Trackr_29
    , L: _0 N' c4 S1 ]
  1276. .WORD Trackr_30; y8 b. b: s: I; X" T4 a5 {" [! n# ^
  1277. .WORD Trackr_31
    $ I# U' ?7 D7 I, l" b
  1278. .WORD Trackr_321 d0 g- x/ O9 _4 e. ~
  1279. .WORD Trackr_33
    $ z/ n8 E) ]' X8 I! k; _' \
  1280. .WORD Trackr_34% d$ g' U4 y. W6 C
  1281. .WORD Trackr_35
    , y7 i% V* m  a3 ^  T. Z* i
  1282. .WORD Trackr_36
    / l9 A* _4 X* ~$ w0 Z" C& ?
  1283. .WORD Trackr_37% N3 E( u1 k# B/ _
  1284. .WORD Trackr_382 A  f( i$ |/ z: L- R8 l
  1285. .WORD Trackr_39# l  D8 @: d5 \; F
  1286. 8 g' C# w; O* R4 i" |3 s
  1287. ;------------------------------
    . f* u) ]2 Z1 v+ M) D: ^2 ]
  1288. Trackr_Name_Data
    * y( w6 E" T( X& z% B1 s
  1289. Trackr_01 .DB $05,"BGM 1"' {0 T# `- J1 v: x3 e
  1290. Trackr_02 .DB $05,"BGM 2"6 S0 Z$ E: E: h& h" s1 l
  1291. Trackr_03 .DB $05,"BGM 3"
    & P7 d# s1 w$ {
  1292. Trackr_04 .DB $05,"BGM 4"
    0 f4 l* ~% M0 f" r
  1293. Trackr_05 .DB $05,"BGM 5"' |8 k# Z7 D5 E& F5 m8 ?) Z! X
  1294. Trackr_06 .DB $05,"BGM 6"
    & {6 {( l7 e) y6 k+ i4 o7 \
  1295. Trackr_07 .DB $05,"BGM 7"; j' M$ z3 [1 g0 b
  1296. Trackr_08 .DB $05,"GREAT"
    " H/ C: g- z; [
  1297. Trackr_09 .DB $08,"BOSS BOM"0 A& M: F, V+ G; v
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    / R( @4 ~" e; [, r0 }
  1299. Trackr_11 .DB $07,"P CLEAR". k  j3 Z! s- Z0 p4 i3 [+ x& d2 b& @
  1300. Trackr_12 .DB $07,"A CLEAR"3 }  h" B" i% p# }
  1301. Trackr_13 .DB $04,"OVER"! w7 {; O& T8 I# M: I
  1302. Trackr_14 .DB $06,"ENDING"
    5 _: P4 Y) D7 F! [" I
  1303. Trackr_15 .DB $04,"SUTA"
    6 |% i. Q/ N- v" w
  1304. Trackr_16 .DB $07,"THUNDER"* h& L) Z1 I6 E
  1305. Trackr_17 .DB $04,"SHOT"0 ~3 @) ^, V* t
  1306. Trackr_18 .DB $05,"LASER"/ S$ L7 [2 g/ }) @& P
  1307. Trackr_19 .DB $06,"SPREAD"
    $ r" C$ a* V- Z) r6 h
  1308. Trackr_20 .DB $04,"FIRE"
    ( h; u% j+ l4 r: }& A
  1309. Trackr_21 .DB $06,"B SHOT"
    : k* u, V5 C$ e7 p/ f
  1310. Trackr_22 .DB $08,"T DAMEGE"
    5 A6 U  \- V$ [. r. Y) e0 P5 ]
  1311. Trackr_23 .DB $07,"HARETSU"/ T6 t# Y! Z' O) q( h
  1312. Trackr_24 .DB $05,"T OUT"* `' _: g9 q! c; Q0 o) w
  1313. Trackr_25 .DB $05,"Z OUT"
    $ D9 V/ d) ^. ?5 N* i- o
  1314. Trackr_26 .DB $05,"A OUT"; ~/ s+ i& Z& Y+ J3 |
  1315. Trackr_27 .DB $04,"ROLL"2 P; B: L- D1 B
  1316. Trackr_28 .DB $06,"APPEAR"- j/ W& R1 i* v' v9 J
  1317. Trackr_29 .DB $05,"POWER"5 d6 {7 S; D9 `, \2 G7 U( }
  1318. Trackr_30 .DB $07,"BOKK BK"
    ! A! T1 K7 i# V3 w* C
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    % I4 d- \; u3 E- V2 ]9 Y
  1320. Trackr_32 .DB $08,"BAKUHA 2": ^1 N+ U2 |# K1 y5 q2 Y: S
  1321. Trackr_33 .DB $05,"ARUKU"
    , _& @8 H& S6 O8 l' s' s5 @+ i& M
  1322. Trackr_34 .DB $06,"JIWARE"' S$ P) J# j, q" b% S' L  F3 l
  1323. Trackr_35 .DB $05,"SILEN"
    4 C- C3 ~+ a9 T, r; q
  1324. Trackr_36 .DB $05,"P 1UP"
    7 F; W4 n( }" R- k- A3 k4 m
  1325. Trackr_37 .DB $05,"P OUT"
    ! t* l! j: S- N- i6 j
  1326. Trackr_38 .DB $05,"B OUT"
    1 s" A- I# H6 T, n0 [/ F/ G
  1327. Trackr_39 .DB $05,"PAUSE"
    1 Q: Q1 h1 b2 [' M
  1328. / V% Q, t# v" S4 I: Y* i7 w+ d
  1329. .ENDIF2 z% F  F) L0 \9 m

  1330. ( _; q8 v/ x0 l
  1331. ;------------------------------, E, v4 Z: ^( ^" ]/ }, ]  u
  1332. Static_Text_Title_Data;静态文本数据- i" {9 g8 {! C$ `
  1333. .DB 12' P  ?7 v, w+ s% n6 h
  1334. .DB "SUPER CONTRA". V, Q# x: d* c
  1335. Static_Text_Author_Data% ]* T$ ^! D- p) F
  1336. .DB 23
    8 S: {; R  N+ k- m
  1337. .DB "EXTRACT BY FLAMECYCLONE"0 C" k4 _. e9 C/ U1 a" M! h# @
  1338. Static_Text_Date_Data+ ]2 t- ?5 O- F6 z& k& v6 ^5 K; [
  1339. .DB 10
    0 i1 Z2 S8 o) Z# @' k$ r, U- j
  1340. .DB "2023.07.11"4 I; o9 |" j( Y! y7 _3 l
  1341. + m2 V0 E9 T4 `! l
  1342. .BANK RESET_BANK & BANK_DATA_MASK+ U" Z% N5 U( o) Y  a: O
  1343. .ORG RESET_ADDR
    0 ~3 t% A7 I' _6 J6 f2 ^
  1344. 3 i/ r9 e* X& L* T. c9 R/ ?) w9 U" g% @
  1345. 9 M+ B4 B1 r% I* N, s, a, X% x; t
  1346. ;==================================================
    , u8 _& ~9 ]; _! ]# x
  1347. ;切到主程序bank
    , X! @, g2 D( p! L1 I0 I! H" C2 r
  1348. SwitchMainBank
    - H; b! Y+ u% s" [
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    - _& j% ^) y7 O' c' a' z
  1350. JSR SwitchBank8000  R" A. D% c3 A" f; }  J8 E% N
  1351. RTS
    # W; |' ], e6 ?2 _
  1352. : k$ ~, g! l" M/ H7 y, ^
  1353. ;==================================================
    4 f, p' i% N; Q# Z+ i7 b8 E5 m
  1354. SwitchBank8000;切换bank到8000-9FFF0 G- @5 ]# I; h& u! m
  1355. PHA
    : I% g6 p/ b( n
  1356. LDA #$064 O$ n7 p- z9 P9 R9 R1 v- N
  1357. STA MMC3_BANK_CTRL
    4 X% y4 e6 T6 `2 Y9 Z" X
  1358. PLA* e) F1 q0 M+ w7 a8 Q
  1359. STA MMC3_BANK_DATA1 {8 u: ~) O. `- ^* Q$ }+ C' ^
  1360. RTS
    2 e6 K4 M  q$ G

  1361. 3 z5 l' I8 f' m5 k7 E" `/ j
  1362. ;==================================================
    ) W/ X" l+ ]6 L" {" c/ {
  1363. SwitchBankA000;切换bank到A000-BFFF
    - W8 E, c2 c3 z/ a8 h3 i5 S
  1364. PHA  S/ H5 }4 o) |' z& u0 k- \
  1365. LDA #$07
    , d( @5 R+ x( q& y! n0 f1 e
  1366. STA MMC3_BANK_CTRL5 a5 K$ Y7 V& P2 D% A3 a  I
  1367. PLA3 y- D3 B% ?9 u; w; s9 |3 W
  1368. STA MMC3_BANK_DATA  U/ T' S) a# D! @
  1369. RTS
    , Z% f0 Y! F1 H8 F& J+ G- I. l" {# `
  1370. $ b. I7 l+ M% e+ W5 s3 u
  1371. ;==================================================
    + k; B# \9 q) v
  1372. Sund_Bank_Init;音乐bamk初始化8 q. w; E9 T) q; e( p
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK5 d; [4 t0 u$ ^/ G
  1374. STA Music_Bank_8000
    2 M( U) J" a5 V  \3 Q$ ?+ P
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    " \+ H8 X- T: Y
  1376. STA Music_Bank_A000- `' V0 N" L8 E. E
  1377. RTS
    1 E( g, |/ t5 j( U2 ~) i

  1378. $ f  X5 d# g7 w. |8 T: F0 X
  1379. ;==================================================1 G1 ]. @) R' w# l
  1380. Sund_Bank_Set;切换音乐bank; U. p; r! ?" ?& E6 C5 Q+ s3 _4 M* a
  1381. LDA Music_Bank_8000
    ' B5 c  r, `( @) L$ D
  1382. JSR SwitchBank8000% w) c& z' M/ W! S. Q' H' v& ]
  1383. LDA Music_Bank_A000
    5 e3 g. R% t! K+ y/ |
  1384. JSR SwitchBankA000
      k' [, W) l  {2 ~7 |  c% A+ G0 @
  1385. RTS
    & T. O3 h3 U3 u' m" j

  1386. % P' J" [0 Y- R- I1 L( G5 `3 W& F
  1387. ;==================================================9 W, x7 _3 D" V: G& |7 f
  1388. Sound_Init;音乐初始化6 R" K$ ^/ R+ a
  1389. PHA
      S& O! @# m) I
  1390. JSR Sund_Bank_Set5 t" U; u, o! P' n2 W7 z
  1391. PLA
    + n, u5 R4 A/ R% \: z
  1392. JSR Music_Init_Addr: d/ D* Z/ {; I/ P4 \
  1393. JSR SwitchMainBank
    " u+ o* b2 `% a7 P* \6 Z* M

  1394. - \3 f  \* d! }7 h/ U
  1395. JSR Music_Bar_ReSet( X( r8 t2 l: o
  1396. JSR Time_ReSet
    5 W5 P! d$ I# H+ h: L
  1397. LDA #$00: O5 {. C+ W: E' ]0 |! ^
  1398. STA Music_State( q7 P: O, {5 M# [  T* {
  1399. JSR Music_Stata_Show; ]3 W# t6 P% _' c
  1400. .IF Track_Name_Pos
    , c* ^& ^9 G# ~- f
  1401. JSR Show_Track_Info4 [  j( b2 ]: J% U. K
  1402. .ENDIF
    4 B- \- Y1 X+ L% y
  1403. , E5 Q' z" x  R
  1404. RTS
    / l* e( r; P) V' U5 M
  1405. 9 m- }: c; u1 E0 F* e9 b! Y
  1406. ;==================================================: Q" |, X0 H' e2 c- Q, G1 T
  1407. Sound_Play;音乐播放
    6 R0 I' k; i. D9 D, n
  1408. PHA! f1 x$ `7 F2 W  a1 l; }8 c0 y7 x
  1409. JSR Sund_Bank_Set7 a" Y+ s$ K8 [, b  ~
  1410. PLA
    " ]: R* P5 R- g" i$ i
  1411. LDA Music_State
    6 S8 m- M8 Y: G6 Z. k( }' Y' T# Q
  1412. BNE Sound_Play_End! ^: v! X; n9 r4 l
  1413. JSR Music_Play_Addr
    6 j- S8 F) s% N8 H) ^9 |0 m; S3 C
  1414. Sound_Play_End
    " Z9 W* j! s6 P
  1415. JSR SwitchMainBank" P3 D" L4 f5 E. M- o2 n
  1416. RTS
    0 m% m4 o9 f- t% n# M8 l
  1417. : h) v7 R1 E' A- n& B
  1418. ;==================================================1 Q: |5 v2 y% ~: z' E
  1419. .IF Music_Reset_Addr
    ) {* s# D& s, ]5 H: E- }7 X" E
  1420. Sound_Reset;音乐重设(如果有的话)8 i, _- _/ V& G0 w8 O
  1421. JSR Sund_Bank_Set
    0 @0 C' ^- Z  B" F2 m/ h
  1422. JSR Music_Reset_Addr
    - q! b4 @3 g) X5 ?. F% |6 g
  1423. JSR SwitchMainBank
    7 Z3 g- U2 |, J6 O, f% Q" V
  1424. RTS
    7 G2 B" m# U8 Y+ S% N/ Y+ |
  1425. .ENDIF
    ; j, P+ Z* M! X/ G9 ^' K

  1426.   E& v( n3 V9 C0 l: o( w
  1427. ;==================================================" J- R( a; o; E
  1428. MainLoop;死循环8 |5 [+ d& q* H
  1429. JMP MainLoop% g% m& b3 w6 \3 s. z* ?0 i
  1430. 3 \/ H' V, Q7 F5 y( h* U: Z
  1431. ;==================================================1 K, \5 M+ }5 s. ~7 }4 {3 M
  1432. NmiProgram;Nmi中断处理
    4 A! x1 A: \# y5 F
  1433. PHA/ I) ?. j' e' d; H  L7 |9 W
  1434. TXA
    3 J6 q% l. U; K2 y
  1435. PHA
    ' _. }: n. u& J" w7 J
  1436. TYA; M6 |: v/ x# w$ A$ O; r3 }
  1437. PHA
    ' }$ n& q2 Z8 N! F, l2 i8 F

  1438. , n* B; c' ]8 P7 z1 g
  1439. LDA PPU_STATUS& G$ o, L, Y: [- j$ {1 `, l
  1440. LDA #$00
    $ i2 j. O' T: o- `
  1441. STA PPU_CTRL
      l5 X4 p( ^) B7 A8 ~' H
  1442. - e/ K# M1 k  |3 S4 @+ x
  1443. ;切换主程序bank
    * v( E4 u- O' c
  1444. JSR SwitchMainBank
    ; X4 G  I, {1 q: q
  1445.   I% V8 n; W4 {+ P# q" t! i5 M' ~
  1446. ;NMI处理! d, A! g) N5 b3 v
  1447. JSR NmiProgramProcess
    - G! c! R1 f- w% W+ i, X
  1448. : H* y# g1 b- O! e0 m# P' ~* y4 }
  1449. Nmi_Proc_End' _. U7 ?, y7 [* g
  1450. PLA$ ~5 w" y* g5 t; O8 ]3 j3 R
  1451. TAY
      Q8 z/ u, C0 d8 q: n/ u
  1452. PLA
    * \" g& {! ^  W+ E& ]6 `3 S
  1453. TAX
    ' K; v( |0 b$ Q- `
  1454. PLA
    3 g5 ~+ o! S& p2 J' f4 F# y
  1455. , y, V- r+ o! z0 Y7 [
  1456. RTI
    ( F' f% t/ W# X  {! j

  1457. ( |. N- M7 d2 R5 ?. |
  1458. ;==================================================; {! t* l5 a0 x! A
  1459. ResetProgram;重置中断处理
    1 E5 `7 S+ ^* s& k2 ~
  1460. SEI
    ! h4 D. E9 w5 }5 p: z
  1461. CLD5 t, M, [8 T1 x6 U2 H
  1462. LDA #$00
    % p. N, @" L( l. s6 f2 w- v- h* c# A
  1463. STA PPU_CTRL
    6 X9 i! b3 {+ V
  1464. STA PPU_MASK
    / c' g+ j/ k$ Z# B! D/ F/ y
  1465. # l  H$ I2 ?) o4 i$ B* y8 k
  1466. JSR SwitchMainBank. y9 W1 `- x) |3 s6 S, `
  1467. JMP ProgramBegin
    4 z) P. Y$ c. T5 O  z- P
  1468. $ O8 ?) f: q+ ]3 C6 H5 L
  1469. ;==================================================- {8 U+ o7 x' A& t8 i: P! z
  1470. IrqProgram;Irq中断处理
      y: Q& Y" ?( f4 s
  1471. RTI2 W7 x0 d' o7 W. u( x" Y' t4 ^2 g- Q5 g
  1472. 6 H) J0 n2 |. c5 ~8 \: r! ~& H) A
  1473. .IF SOUND_BAR_SHOW_ENABLE" G0 h) I# }0 d  F. J) H
  1474. .ORG $FF80
    $ n' _: L( W3 p, X3 ?
  1475. STA $4000,X
    $ K% K; C/ S' {4 m1 A
  1476. STA Sound_Bar + $00,X
    " z% K& F: X% P+ Z6 r
  1477. RTS
    , C$ I6 ]& V  N! ^% S! {% K& r

  1478. , g" u* O$ z1 _# {
  1479. .ORG $FF882 w6 a: l7 U, ~0 s9 V# t( z6 j# P
  1480. STA $4000,Y" N$ W8 G4 r$ k9 p
  1481. STA Sound_Bar + $00,Y
    0 l$ f+ d: O2 |  b" I$ z- p" o/ a0 Y
  1482. RTS
    ; B4 {& F4 V( i, z/ c

  1483. 2 \0 W/ e! @! P( U
  1484. .ORG $FF90  h- d/ X: H' Z
  1485. STA $4004,X
    - V8 I% b; r' H5 \9 D: ^: P
  1486. STA Sound_Bar + $04,X
    8 f6 f# P7 v8 x% L2 x
  1487. RTS
    ) f8 l5 w& K8 j- F8 b

  1488. , S5 Y$ Z3 T! V/ [, y
  1489. .ORG $FF986 K5 m/ R+ ]& B" r# e
  1490. STA $4004,Y
    + X9 K  H& e* m1 o
  1491. STA Sound_Bar + $04,Y
    2 p7 D' T& l  @8 t. @7 ^. B
  1492. RTS6 f5 q8 w# f0 O$ S
  1493. 2 x1 X3 v: y+ P
  1494. .ORG $FFA0
    & n+ N6 j8 k# V, `8 ~; [
  1495. STA $4008,X
    1 i1 R3 I$ ?9 z/ T: Q" ^2 U: P/ [
  1496. STA Sound_Bar + $08,X) P$ ~) Q0 R! K* x# C5 T
  1497. RTS9 h9 ^9 m* s8 i8 s. J
  1498. ) L' C4 P+ `$ `& t
  1499. .ORG $FFA84 Z* J- i; q' J
  1500. STA $4008,Y. P, h3 D  @! U, h5 {6 K- B9 D$ W
  1501. STA Sound_Bar + $08,Y
    $ M% `) W8 t9 R, s2 k0 E4 M
  1502. RTS5 j0 o9 H8 o/ M) L( a( M; E  ~
  1503. 0 t# L9 A' |) K" ~: b# s
  1504. .ORG $FFB0
    + h' y( o5 d' `  ^
  1505. STA $400C,X
      b' g) [1 a) m( b
  1506. STA Sound_Bar + $0C,X: a  w6 L4 r' h% @, [
  1507. RTS; a; [/ B1 \! W, Q* y( G4 `$ K

  1508. 3 n2 L  W- `0 p. X0 O
  1509. .ORG $FFB86 c0 r7 x% k! I6 D' l
  1510. STA $400C,Y% S# `, {  s, K7 u  m9 Z  t$ I
  1511. STA Sound_Bar + $0C,Y3 }- [' |4 J1 {  b% R
  1512. RTS
    * g: S4 C: Q0 @  n/ |

  1513. ( |1 E; b" t& U" F
  1514. .ORG $FFC0% g8 x% {# h% c) c7 {
  1515. STA $40003 e/ d3 p  m5 ?. y+ R2 C, `# R  M
  1516. STA Sound_Bar + $00
    + P( L6 ?/ ?6 `  ]8 |. E
  1517. RTS9 X: B8 A* _% v+ g
  1518. 8 {5 U/ ^& O; x, p& C
  1519. .ORG $FFC8' T+ A* Y: _/ N: G* m# I
  1520. STA $4004
    + [& ~' h: E. }& @2 }
  1521. STA Sound_Bar + $04
    3 T2 @7 c( N: s. L6 w  D  ~3 q8 z
  1522. RTS
    0 i0 a- d$ |) j  w
  1523. 1 J: D" @) A; N  t" M
  1524. .ORG $FFD0
    / X( u8 ?8 w& x  G; [4 V3 x
  1525. STA $40080 e* e  O8 [( F5 C7 w5 t
  1526. STA Sound_Bar + $08
    . @' C3 b$ t2 }
  1527. RTS& f3 }" P! z0 J( }' e* _$ V: F

  1528. ; R" {- r, y7 z4 |! {8 M5 z0 x
  1529. .ORG $FFD8
    $ z- `1 k. g$ |$ d1 T) E/ M' q
  1530. STA $400C
    ( z* X3 [4 m; f
  1531. STA Sound_Bar + $0C* B! W7 L8 P" T/ m
  1532. RTS5 K9 {( b! |, A1 x7 a/ ]) F
  1533. ; T: l0 r  P% f! N
  1534. .ENDIF
    / T8 }; Z' P. ~* D' T- O( H" w3 g) }
  1535. 9 I5 i* _7 h" ?
  1536. .ORG $FFFA
    7 O; u4 b4 R+ T
  1537. .WORD NmiProgram& v; Z9 G7 Q: K1 q4 j2 j
  1538. .WORD ResetProgram3 d3 e% H; d4 |1 b
  1539. .WORD IrqProgram
复制代码
: L3 ]8 e- N7 N! k" T

# c) ^$ `* |3 w1 ?( w0 ~3 k" H
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1236 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3225 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 18:02 , Processed in 1.129883 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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