EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
: J0 \+ r& W: b) P. `/ v1 f) f+ p! }# t* T% B0 ^& }  Q" `  {
1.魂斗罗
4 h7 u# I4 ?- E8 L( T4 t4 Y2.超级魂斗罗5 _5 C1 u+ Q1 n( {% o9 I
3.赤影战士
$ k5 G+ F' r* a8 D" v; t4.忍者龙剑传24 r9 I+ p( a% I

* {: Z$ j7 m0 U0 B6 ~& g, z
& C  a8 e4 c7 s9 E
" r* m9 I( c4 Z8 l/ e1 ~4 o8 T: V
源码:
8 A; f3 Q* z, ?
  1. ;[FC音乐][播放器模板]* A# g8 H( t4 f
  2. ;FlameCyclone 202307107 v$ J* O- q( P. \6 p4 k

  3. / l$ a7 D6 \5 ^  B  A3 c. R
  4. ;文件头: Y: V- W$ n4 |0 Y" _$ U/ U
  5. ;======================================================================7 e  E( H( |5 u$ z0 L
  6. .INESPRG 4                                              ;16KB PRG 数量8 m) ^" k+ A% X* N( ^) o8 X
  7. .INESCHR 0                                               ;8KB CHR 数量
    ' `2 F8 @. ~4 P# y
  8. .INESMAP 4                                                   ;mapper 4( j2 J% }, d6 v
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直, m8 F1 a- u6 \/ _# U7 k# u

  10. 6 k& ^: J$ _5 U$ i' m8 C
  11. ;==================================================- y! o" @) c9 l# s& V
  12. SOUND_BAR_SHOW_ENABLE       = 1
    8 m; z2 y& Z9 Z; J! [( J6 q
  13. ;==================================================
    + A0 `6 y- s; M2 W! [
  14. BANK_DATA_MASK              = $07
    2 f. S" c/ Q2 @/ V5 t: }
  15. ;==================================================' o3 ]+ n* }6 i  k+ t8 C
  16. SOUND_DATA_BANK_0           = $00
    ! H6 g. ?- v1 G+ B, Y
  17. SOUND_DATA_BANK_1           = $01
    : s( ^% J9 |5 ^; p, z
  18. SOUND_DATA_BANK_2           = $020 L6 P) v4 x! W* p
  19. SOUND_DATA_BANK_C000        = $06, i3 p/ q% E; x
  20. + k$ r5 S. D8 u  i) J( W  U
  21. ;-------------------------------------------------" P5 X" g$ S6 C1 b( D
  22. CHR_DATA_BANK               = $04
    , j9 G8 H1 @# l* C. H. F% [6 ?- S
  23. CHR_DATA_ADDR               = $A000, X: z# Q7 h% Q9 @
  24. ;-------------------------------------------------
    3 j  L9 s/ o. F& M1 L
  25. PROGRAM_BANK                = $05
    / w5 P3 l+ ^1 P, S) m
  26. PROGRAM_ADDR                = $8000
    $ |( T% k' Z% f" Z2 N
  27. ;-------------------------------------------------1 V" Z# x0 X7 \) i
  28. RESET_BANK                  = $07
    , o. J! T# O$ ]
  29. RESET_ADDR                  = $FE00* R6 |6 Z3 o; F- f0 U+ C! z$ @8 y* e$ B
  30. ;==================================================
    9 v$ j6 S/ |9 _- Q
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址3 l# t+ Z- q1 E% a% B! _
  32. Music_Play_Addr             = $813C ;音乐播放地址3 c* m; |! I) U# v
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址8 q7 A" I! m( S, V  A
  34. ;==================================================& T4 ~6 b6 n8 Q" p8 J7 Y* ~
  35. Music_Song_Total            = 039  ;全部曲目总数
    6 x5 j3 p# ]# c+ a
  36. Music_Start_Song            = 007  ;初始播放曲目
    : F( I* w# L; j  ]! v5 x* m
  37. ;==================================================
    ; T, P5 Q$ Y$ [6 a

  38. 0 t) M2 ^6 h6 D
  39. ;==================================================6 I* s+ c8 K; s* n
  40. Title_Text_Pos      = $210D ;标题文本位置' `4 d& s) s3 \- F4 e6 z% ]- {5 g6 [
  41. Author_Info_Pos     = $2284 ;作者文本位置. U3 o+ N' P6 Y# G
  42. Date_Info_Pos       = $22CB ;日期文本位置
    8 h; U; |; u7 B+ D/ _% p7 z4 J
  43. ;------------------------------
    ; W2 [7 l5 I4 W, P1 \2 h" c) r9 r0 }/ D
  44. ;------------------------------
    ( N5 r$ g5 G2 \9 l: U' B7 \1 g
  45. .IF SOUND_BAR_SHOW_ENABLE
    " M. q1 x4 J0 ^$ P5 x9 w' x
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    & _* W4 p1 t3 m
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    * \) O3 q' W& w" d7 l2 `
  48. Play_State_Pos      = $2233 ;播放状态位置# P1 j/ o; U0 W4 A% a" N9 j
  49. .ELSE- v) h5 s! }! w2 _
  50. 2 ]: B3 d+ o1 ?2 a7 X
  51. .IF Music_Song_Total > 99  N( ]& K, r" t* {- c
  52. Play_Index_Pos      = $21AC ;当前曲目位置: I# M$ }$ J! S, H3 y
  53. .ELSE7 O; A3 S+ l7 I0 s$ c

  54. : |- B8 _! I2 h9 D. ?9 u. ]
  55. .IF Music_Song_Total > 9
    # h* K& |6 R; c
  56. Play_Index_Pos      = $21AD ;当前曲目位置6 e8 k3 ]: U0 B1 O+ z
  57. .ELSE" p; {. `/ K9 o$ ^7 r
  58. Play_Index_Pos      = $21AE ;当前曲目位置  c1 J! `& {/ R) ^. {1 j
  59. .ENDIF1 J" D/ x7 e2 y$ \

  60. ' @5 F" E1 U7 u( Y" L0 W! W
  61. .ENDIF
    : i3 V! w3 ]) q- [  V( Q5 w5 j

  62. * Q# n! u. J5 |% k7 S+ u
  63. 6 `" q2 u3 V) Y  b' t- T8 x1 u
  64. Play_Time_Pos       = $21EC ;播放时间位置
    # ?8 b6 @. C4 r
  65. Play_State_Pos      = $222C ;播放状态位置
    & |5 [9 V! P; Y: d
  66. .ENDIF
    # |, |3 a0 S' G0 n
  67. ;------------------------------
    # G* c" g% B# q' e
  68. Track_Name_Pos      = $216B ;曲目文本位置. U4 n/ V  u, t5 W8 F4 s
  69. Sound_Track_Pos     = $21A5 ;声道文本位置/ _7 Z4 i! _0 D2 ~. P
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    1 Q1 ~, U' V/ `) `6 T4 T
  71. ;==================================================
    / n* [: |, {. m5 P% g7 F
  72. Scroll_X = $00
    6 _; g. H) I: S6 o* F
  73. Scroll_Y = $06
    : f4 D+ \) a4 u( D5 J
  74. ;==================================================! [  }0 z3 G4 c" |1 _
  75. RAM_Cln_1       = $0100
    2 x" e6 l3 q+ L+ S7 ~( ^, p
  76. RAM_Cln_1_Size  = $80" p; `3 Y+ K0 v5 i0 ^7 b( ^
  77. RAM_Cln_2       = $00E0! G: H4 D. q* ~. T
  78. RAM_Cln_2_Size  = $203 ?* v, Z5 L9 l2 p0 {' q
  79. RAM_Cln_3       = $00E0% V7 `" J4 t1 B
  80. RAM_Cln_3_Size  = $20& Y& K! T0 E) j1 [" m0 F3 V
  81. , P  l4 J" i, ], b& n
  82. ;==================================================
    / I$ U- V& A# M* l) V
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器) Q3 r: x: ]$ i. b  w0 k
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器. Z( h* X4 H# @7 M4 Z8 [- D' N
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位) h8 Z6 Q. b+ W' b( N1 h
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1: Q, R8 E$ s( |+ H" v+ p7 B0 B; U
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1( b5 Y6 d0 O  j' |5 P
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 . T0 f) g: ?$ b" o4 n: I
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    - l4 d/ s  l9 g0 V1 \5 `4 [7 p0 O
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    4 Q$ y6 j! w: h& @* Z% |* e6 k/ y0 \
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存, K1 k% E1 E  v5 r/ w% O$ ^$ e
  92. APU_STATUS              =   $4015   ;声音通道切换
    9 ?  p% v" M2 Q8 m6 v$ S
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    # J, d. M0 ^# s& W- `! w. S+ {
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通, `1 [4 M! b2 a. x4 h
  95. ;==================================================
    # Y& K' D7 L/ J3 J5 E
  96. MMC3_BANK_CTRL          =   $8000
    - C2 t7 E6 L  F
  97. MMC3_BANK_DATA          =   $80019 g7 m' e0 D. w  R2 E, Y+ n% z9 T
  98. MMC3_MIRRORING          =   $A000
    9 D( B; g5 Y8 t' W/ k0 u9 g
  99. MMC3_PRG_RAM_PROTECT    =   $A001/ P, ~, |% Q" o2 `
  100. MMC3_IRQ_LATCH          =   $C000
    ; L; x, S6 }0 W  F5 A2 `# Z+ r) y
  101. MMC3_IRQ_RELOAD         =   $C001
    $ u" k  o" y( o3 B4 x1 `5 Q
  102. MMC3_IRQ_DISABLE        =   $E0004 G9 Y2 h4 T/ T) r' w
  103. MMC3_IRQ_ENABLE         =   $E001
    : O/ w9 p: H5 Y0 v6 p$ U$ C8 S

  104.   i4 @; t- h; N$ c4 [
  105. ;音乐数据块, E  `3 p+ Q4 X' n0 y; @9 @3 p, Q
  106. & y* \" h5 v9 ]
  107. ;======================================================================
      S0 n2 b# y4 V, }+ o
  108. .IF SOUND_BAR_SHOW_ENABLE
      H7 }, p* J2 z
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 f$ B% m6 k! C, z( z
  110. .INCBIN "sound_bank_bar/music_data_0.bank". o6 K! x- X+ S5 g
  111. # [$ ]) ^! X0 ?% q
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK) X; X  t/ L# l" R
  113. .INCBIN "sound_bank_bar/music_data_1.bank"# O/ G; D+ r8 J
  114. # D& z7 j7 Z' N
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK9 \' |/ b, T6 i, A/ f
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    6 u5 V% X. c6 ]/ u$ N, M* [
  117. * `, {' O6 s& U% p0 A
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    ' j& h/ Y1 g$ N" H
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    & O; \7 Q. @+ Z. D
  120. - s- u7 U9 f  R+ N( {! o
  121. .ELSE
    $ p8 A' x# u4 ?& o) R. B
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ; N# S) m# I# w3 @, V# m, i
  123. .INCBIN "sound_bank/music_data_0.bank"
    ; T" n. i" p5 n; t! ?
  124. ) R8 p) ~* M5 E+ q/ j5 F1 J6 ~& D
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK$ `9 ^# x8 t  Q  S# l* ^
  126. .INCBIN "sound_bank/music_data_1.bank"5 \4 j5 N1 y+ m# V% z6 t
  127. 5 H/ f7 n* F5 `7 f" P& I' A+ X9 f9 |
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    # _( S) C$ v/ M- Q/ G
  129. .INCBIN "sound_bank/music_data_2.bank", M+ j! K4 S' S3 d* M+ p

  130. ; O8 P' ]$ t1 ~
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    3 _, C5 ?5 O6 N
  132. .INCBIN "sound_bank/music_data_3.bank"4 B+ Y4 o- C* H
  133. .ENDIF
    ) x( X" \/ }2 c5 u

  134. 4 m2 R9 l6 n) J8 J
  135. ;CHR图形数据
    3 L6 D" H) F$ V. [$ n, F* W
  136. ;======================================================================- {2 _' q8 j; b) G0 M
  137. .BANK CHR_DATA_BANK2 z/ q2 e6 }5 I& Y8 ^' W
  138. .INCBIN "chr_bank/chr_data.chr"5 b- N' p- I, p& h) \
  139.   _* V2 m4 i. Z- K4 q) u. F/ C! G9 c
  140. ;==================================================
    5 J9 k& A2 s( O: D+ h( f
  141. PPU_Addr        = $03003 r6 s# v6 o9 f7 [5 P  m
  142. Palette_Addr    = $03C0
    9 l( l- I0 z' G4 ~7 x, b7 i
  143. Sound_Bar       = PPU_Addr+$E0$ V6 t. h8 D: a" `
  144. ;==================================================/ ?0 }# u4 A% c
  145. Palette_Update_Addr     = Palette_Addr+$0D
    3 d8 c) e( F* t" R' S5 [8 y
  146. Palette_Update_Max      = $2C' d2 g) N7 F' g. c: r" e
  147. Palette_Update_Min      = $21
    & q4 C2 l( }! a4 V! W& B
  148. Palette_Update_Interval = 601 }3 j# _( P- w* o  q2 b+ R5 S6 R7 x
  149. ;==================================================' B5 S/ u5 }" z; q" x
  150. Sound_Bar_Cnt       = PPU_Addr+$F0. D- K! K# }5 E; g9 t, l& D
  151. Screen_State        = Sound_Bar_Cnt+$01
    : D2 h$ n: w* Y+ G
  152. PPU_Cur             = Sound_Bar_Cnt+$02& o1 l, |, o0 x$ B# ]6 J) ~
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    ; ~' _8 E- r0 O' Q1 y* W
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ; F! U+ u: P8 w
  155. ;==================================================
    & t+ T3 ^6 z+ n* a
  156. Data_L              = $709 ~7 N" ~0 j' G
  157. Data_H              = Data_L + $01
    " d3 J( \6 _: o! N8 i  S# T, s
  158. Data_Cnt            = Data_L + $02! F) v% W- [6 M9 a/ q* ]
  159. Data_Buf            = Data_L + $039 ~! b' [/ x0 @) s( _8 D* g
  160. Time_Wait_Cnt       = Data_L + $040 f1 R- |" Q( H& ~+ i& g
  161. Palette_Wait_Cnt    = Data_L + $05; X) c7 ~; U; f9 A- f$ \3 S% I+ n( r6 F
  162. Palette_Update_Flag = Data_L + $06
    # ]0 r( U' N3 o+ k6 I
  163. Show_Track_Name     = Data_L + $07
    " L, ^# E! L2 X' a+ L3 |
  164. ;==================================================
    ( Q( ?. d* u/ y& J0 t
  165. Key_Keep            = Show_Track_Name + 1: q4 l; @% _: L, G
  166. Key_Once            = Key_Keep+$01+ a) k. M  ]7 E& ]. N
  167. Key_Kemp            = Key_Keep+$02/ L* }8 K3 f9 U9 [, P. I; f/ e
  168. Key_Temp            = Key_Keep+$03
    6 d2 j9 m" u" R% z/ y8 I4 P/ o) G
  169. Key_Getv            = Key_Keep+$048 \- W# U$ X- `2 \
  170. ;==================================================4 j  i3 n8 |6 h
  171. Music_Cur           = Key_Getv+$01
    8 J. L3 }. G! L7 o( n
  172. Music_Last          = Music_Cur+$01
    8 ^0 P8 f  |, I4 A  g6 C
  173. Music_State         = Music_Cur+$022 u) \- M$ O4 W+ |" x3 L! y
  174. ;==================================================4 b3 n- _. o; ^% u
  175. HEX_Data            = Music_State+$01
    + q5 b/ }0 ?, ^( n( a( e
  176. DEC_H               = HEX_Data+$01
    3 `$ p- `# [! S9 w# k
  177. DEC_T               = HEX_Data+$02" R  I6 r' h, A
  178. DEC_L               = HEX_Data+$03
    0 o1 T1 g  C/ O
  179. ;==================================================: e5 B# Q" A  m: v. H' Y
  180. Time_S              = DEC_L+$011 e: H% j& L1 |+ N$ P' a8 Y; W
  181. Time_M              = Time_S+$013 H5 y" B- ]8 t5 d" }! W4 ]
  182. Time_H              = Time_S+$02
    # A6 n& ~2 H4 H$ A" [4 b* J
  183. Time_Cnt            = Time_S+$03
    2 L$ z$ C+ P' X! z+ D+ b$ ^
  184. 7 J. {+ J. c! u0 m+ u3 I
  185. ;==================================================
    + x3 i! g: X+ p% ?4 K$ u2 \* N
  186. Music_Bank_8000 = Time_Cnt + 1
    / K9 X+ _/ D) [3 S, P/ a
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    $ x9 K6 K" c/ R) t
  188. ;==================================================
    ( V2 O* A* p% y3 v

  189. ( B4 H* J. |4 g1 W8 s. p
  190. ;======================================================================+ @6 Z% ^  b5 e& Z4 A4 V# }9 e
  191. .BANK PROGRAM_BANK9 S" c8 S- f! P, o0 J# Z
  192. .ORG PROGRAM_ADDR  u( b) w$ x1 Q
  193. : c, m  R' w9 }) e+ ?
  194. ;==================================================
    7 o. r8 B2 P# R( C' L
  195. NmiProgramProcess;NMI中断程序处理
    6 @- E' H; w$ }- j) Q: O
  196. ;处理PPU图像8 q; D5 @' k3 U, C% n) g
  197. JSR PPU_Proc
    5 N+ b/ h6 w" \. ^( n( ~! l" T
  198. ' c& b" o0 [! I4 y; i( s- U$ ?9 }: K
  199. ;启用NMI中断- ]& s+ F; D7 m4 s0 e1 X
  200. LDA #$80
    / q- [! T; U( A* H
  201. STA PPU_CTRL& Q" ]5 x; C; E% B! n

  202.   y* u, C7 r- r( k! {) j
  203. ;更新调色板9 R" R' j; D! i8 y4 t1 s% O
  204. JSR Update_Palette_Data
    : m- Y$ P; ?! x: v; K9 ~2 W" `

  205. 8 ]/ }% B0 [9 e# Q0 J! T& \
  206. ;显示时间(缓冲): p, V1 Z% j0 Z* H' D
  207. JSR Time_Show
    3 W/ G2 Q7 v+ C, A% g0 I
  208.   a! r- F; \2 q. n2 I
  209. ;播放计时
    - z% W2 r$ p2 u9 o4 u) g
  210. JSR Time_Count  o/ h2 _+ v% u) @" Q2 @- y  j0 t
  211. ; }1 g7 e# h1 a$ N5 Q# L
  212. ;播放声音
    1 b; H4 A. b& w! ^" P) V
  213. JSR Sound_Play
    6 L% ~8 V2 b- Y; B% y4 y- {# K

  214. , I+ ~( u* P5 ]& \" i
  215. ;切换音乐(手柄触发)! ?) U- H- B0 i& U5 s, `! r
  216. JSR Music_Switch/ |* U4 R' |% e' J' \  |

  217. * k; U8 Y( A2 T+ y8 }
  218. ;音乐显示(缓冲)
    5 d5 v4 d" o/ q2 n) W% K0 s
  219. .IF SOUND_BAR_SHOW_ENABLE
    & S6 M# f# B. {
  220. JSR Music_Vision
    " N4 _6 g4 n2 ^4 S
  221. .ENDIF
    - y! D, c( ]* Q# |* W  M, H
  222. # _0 ?+ U1 J$ w. O3 u! f3 F; n
  223. LDA Time_Wait_Cnt
    / K- d- x; G) _) ?& G5 h( _6 |4 {
  224. BEQ NmiProgramProcessEnd
    ) b$ L9 a& u0 b* s5 }9 B0 n
  225. DEC Time_Wait_Cnt
    ( e: z& F, F/ u6 X
  226. NmiProgramProcessEnd% D7 ]5 K+ m9 T. `$ \9 c6 a
  227. RTS
    ) J6 t/ A" W- n# A7 M+ u, O5 G: t
  228. 6 k) z. Z  U  j: j, K9 s& W
  229. ;==================================================
    ( b( `+ \; o  G9 C# ]7 Z* `
  230. ProgramBegin;主程序
    4 t+ w" c% L! J. A9 S. x2 _
  231. LDA #$00
    4 N) w2 C4 U$ q' b
  232. STA PPU_CTRL8 E5 x8 Z, O5 G8 }  M
  233. STA PPU_STATUS; X7 y9 [6 ?; h
  234. STA PPU_MASK. Y6 A& r" H" I8 j/ S; F
  235. STA APU_STATUS
    + w) l# q3 i- Z& f/ Y) L% A- u
  236. STA PPU_SCROLL
    * J+ T- o& w# T
  237. STA PPU_SCROLL% U# d4 t1 k; u' B0 W
  238. LDA #$C03 B# C3 @; [/ F8 @* V* d5 h
  239. STA JOY2_FRAME% [5 Q. n4 p" V6 {0 t4 C
  240. ) l5 ^; s3 E; R+ ^# [( n* ^6 [9 T
  241. LDX #$FF" e2 s' x! ?$ K% G3 h5 b) E: C
  242. TXS5 m$ D5 K* Z* W* v) ]+ H
  243. LDA #$00
    0 x8 b# {3 v9 U, F- [+ x
  244. STA PPU_CTRL
    ( q3 \/ K8 P/ s- {; M
  245. STA PPU_MASK
    & |9 [8 J2 x1 ~
  246. STA MMC3_IRQ_DISABLE
    $ c1 s/ _* ?- t
  247. ( M. z; P0 w: w$ E( m/ f
  248. ;==============================
      D+ t6 D, C) L
  249. ;调色板清空
    ' x. R3 l+ C# J- a9 }
  250. LDA #$3F
    : u' L! O" y3 Q3 x. q* H
  251. STA PPU_ADDRESS! [6 e6 b6 S8 J# `$ O
  252. LDA #$00
      S$ c$ Z* r: }" _7 p# b7 D5 g
  253. STA PPU_ADDRESS
    5 x1 `: K/ R0 r; o+ e
  254. LDA #$0F+ b' W3 u9 U9 A
  255. Palette_Clear& R) P. A) o4 }. @  N+ @$ A
  256. STA PPU_DATA
    # ^8 `' p3 [* h, u
  257. INX
    - F: T1 _: r2 }0 X8 \
  258. CPX #$202 v8 P2 I- u5 e8 {' D
  259. BCC Palette_Clear+ X% Y, v/ ?$ S9 l9 Y, a+ C
  260. LDA #$008 n% ^; L; w/ C- I, D0 y! z
  261. STA APU_STATUS9 G0 Z5 N" `6 T6 ~: T# s
  262. ;==============================
    % Q6 a' |4 ~3 N/ T% w9 @8 _  j7 p
  263. ;初始化背景调色板. s6 l& T" Z' P/ V6 G) R# c
  264. JSR Set_Palette_Color
    , ~. D2 Q; s2 Z- q, b7 w
  265. JSR Set_NameTable_Attributes
    % z% V5 V9 v: P1 n& r- I6 h) e' ?. a  U

  266. 2 r/ \$ F3 j' ?" Z& w  M
  267. ;==============================: t$ J1 O7 o4 o6 F- R, l  b
  268. ;RAM初始化
    . s: ~/ p6 p  \5 z* e# z
  269. RAM_Clear_All
    ' [1 Q, S" J2 [" a+ ?$ L9 Q0 E
  270. LDX #$00
    9 U! z3 r" x' `! X5 n0 w
  271. LDA #$00" i2 ~5 R$ U. x5 h" Y' N7 }8 F: u6 }
  272. RAM_Clear_All_Start
    + f- ]4 \4 z1 k, |4 ?* D
  273. STA $00,X
    ! Q, I) b) e4 m* T
  274. STA $0100,X
    * ~) i0 ~) k+ c/ b* m: \
  275. STA $0200,X
    9 k% ~! z+ \  v6 a, j5 ~
  276. STA $0300,X+ d: S6 l0 ?; r& F: ]5 R
  277. STA $0400,X
    ; ?+ A# T: H1 Y' G* B
  278. STA $0500,X# X0 r+ |! ?4 \/ P2 |7 `/ Z
  279. STA $0600,X
    + u3 Z+ [) ?  g' }4 J) _' `
  280. STA $0700,X6 q$ M; w8 f$ `8 l' w
  281. INX6 L$ K  `! z* i6 ^4 V' o9 {
  282. BNE RAM_Clear_All_Start" ?  G% f3 J- J

  283. 8 g) R' D. t) n. `- o2 o) _  l
  284. JSR VramInit7 B# W8 q/ X2 c
  285. JSR Init_Palette_Addr* T/ p; U  x$ p! U4 e- c  H/ G" j

  286. 1 ~- h) t2 x' j! l2 @& R
  287. .IF Music_Reset_Addr
    3 F% }! p. ~( _3 _
  288. JSR Sound_Reset9 g# l& D: X3 K4 G8 {  b( T
  289. .Endif
    + {1 C! H$ u7 r" S) ?
  290. 7 P2 M' O7 C% q( S) S3 ?9 a
  291. LDA #Music_Start_Song-$01
    9 p' g' t& q+ K+ b! T! g. {
  292. STA Music_Cur9 O0 u& I: y4 z6 K# }( H

  293. $ w6 |! ^) E8 x; u/ ~
  294. JSR Show_Music_Text
    . P3 B! |) H' W/ E

  295. 9 J. K. g6 _' e) M2 C, G
  296. .IF SOUND_BAR_SHOW_ENABLE
    $ G9 b: p9 x( D! P: i3 W6 n: B
  297. JSR Sound_Bar_Text_Set# W8 b1 F# Y: f5 h
  298. .ENDIF+ k( @4 f  }5 C: u$ j% l
  299. . Q% p- E# [' C7 T5 a
  300. .IF Track_Name_Pos
    ; Y! ?! I0 G6 C5 S
  301. JSR Show_Track_Info" {" Y5 U' u6 r. {
  302. .ENDIF
    ' D" i( d5 k  Y/ R

  303. * l( p% y; o/ _6 a
  304. JSR PPU_Proc9 y0 N3 h' [; _( D# p2 T& F
  305. * o7 M' u0 W4 h$ o4 j1 o* B  T
  306. LDA #$0E$ i% d; |( v; r! h3 f$ Y! R
  307. STA Screen_State+ H( g6 P' ^# O! w# c7 y
  308. % O* N, t* _8 K5 P1 [
  309. JSR Sund_Bank_Init8 R% [* @) M2 z
  310. 1 y* o; k" f$ h$ A6 Z8 T9 p
  311. JSR Music_Show
    ) q6 e' k# t& D0 u1 }
  312. JSR Time_Show
    : O5 B0 m2 U" F/ k1 A
  313. JSR Music_Stata_Show7 x( I# E! q. X- }, W
  314. JSR Time_Delay
    7 v; r6 O! g9 R
  315. 3 V- X( `) `  \8 f: r0 Q

  316. # p3 z; Q# N( [& N! v: t: y; g
  317. LDA #$80) f, S6 Q% v5 Z
  318. STA PPU_CTRL
    9 `0 g4 c, A- l0 a" O& m

  319. 7 ]9 i0 J& o4 Y$ R8 q/ W5 s
  320. LDA #$20
    + x7 ?# f/ s8 m" s/ U+ @8 ?
  321. STA Time_Wait_Cnt
    ) \  k7 ~9 t' G: ^% O& o% D
  322. , d% g% V4 Y7 [; E/ D
  323. Wait_Time_Over
    + ]9 `3 }, S" i: R
  324. LDA Time_Wait_Cnt
    $ K# a; S+ {8 e( a6 f2 J/ o0 T
  325. BNE Wait_Time_Over
    3 Y  x7 W& ^: H2 b9 M9 j

  326. 1 _/ w, ]) }; Z2 I3 Q, K. K! [
  327. LDA #$1F; ~& {7 n) K* }0 R: u5 Z4 i! W3 q
  328. STA APU_STATUS: p& U% z- L/ A* _1 D9 r& a6 I
  329. LDA Music_Cur
    ) a% H! a' \+ B" G( u: C) a
  330. JSR Sound_Init/ G2 N0 d4 b: \
  331. + p1 c' J( T  l: \& r% c
  332. JMP MainLoop9 `1 b* f7 Y6 V$ f) F# M# x
  333. * Q# F, t. c* X' \
  334. ;==============================
    $ t% |+ h4 j7 \0 V" o
  335. Time_Delay;延时等待
    # n& L4 W* @/ }* I
  336. LDA PPU_STATUS7 @! Z9 Y# S3 c& X. i9 U
  337. BPL Time_Delay
    ) I8 @: m2 z+ L6 S
  338. RTS" n# d' e6 q. T1 b2 U6 d
  339. * y4 [/ F+ B8 _7 w
  340. ;==============================8 s- h- e: Q' K/ P' \4 H
  341. VramInit;初始化图形内存
    * J3 f' X/ ?2 u( P1 m+ w3 s
  342. LDA #CHR_DATA_BANK
    2 Q' q9 x& m7 d+ n: T9 O
  343. JSR SwitchBankA000
    . M4 g  j0 j9 u6 H4 L
  344. LDA #LOW(CHR_DATA_ADDR)6 l- _9 m7 H9 `; i* T( P
  345. STA <Data_L4 B: \9 m$ ^& X/ a
  346. LDA #HIGH(CHR_DATA_ADDR)
      q# K1 e: ^% W: G, R
  347. STA <Data_H& F+ c5 e9 [9 y
  348. LDY #$00# b* T' }( J: j, `
  349. LDX #$20
    / p0 `6 I/ c# `: t( T8 t
  350. LDA #$00- D. A: L) I5 h- s3 l3 A/ Z8 Z6 S
  351. STA PPU_ADDRESS$ {3 v4 o, D$ s3 |
  352. STA PPU_ADDRESS! ?7 A/ Y" r, i% x1 z% E5 ?$ X
  353. VramInitWrite
    # I, }7 r* n- w
  354. LDA [Data_L],Y6 B4 N- h/ x6 N
  355. STA PPU_DATA% H2 B3 o# u9 W, X
  356. INY
    $ k, V" ]7 _& P3 |  r* |- @9 O
  357. BNE VramInitWrite: N; R- ?: k- O2 M* ^
  358. INC Data_H# J% d# Z' {# y' F1 k! B
  359. DEX3 V+ ^3 n; E/ K0 ]1 u2 i+ v
  360. BNE VramInitWrite' [" J7 f" t' X4 _1 q9 U, v; Z7 x
  361. RTS
    , S& ?$ Y( n# U5 Y" A( I
  362. & `9 ~1 V+ z2 g& H7 |6 a7 h
  363. ;==============================
    " l+ c9 k9 l: k9 P1 X1 n
  364. RAM_Clear;RAM清除8 t, T2 ~- D9 M6 M) X
  365. LDX #$00
    ) O' C4 K/ x! `  ~& E
  366. LDA #$009 _" y$ V4 @! u
  367. RAM_Clear_11 _1 r2 _* q0 l; ~4 t! m! U
  368. STA RAM_Cln_1,X
    + _+ `# _2 y5 s2 c* u/ q: Z
  369. INX8 ^: y, _# w1 k6 c
  370. CPX #RAM_Cln_1_Size
    + V$ ^1 `+ H$ O5 S3 ]
  371. BNE RAM_Clear_1
    ' s( y6 _4 W: u2 ]" D
  372. LDX #$00& _4 T  X; D* I- ?6 ~
  373. RAM_Clear_2% F/ ^3 D1 g- e" Z; e% V7 h
  374. STA RAM_Cln_2,X
    9 T: E# G# P/ G
  375. INX
    - \2 t1 k$ b& U  p$ _
  376. CPX #RAM_Cln_2_Size
    ! @- u* o7 i, P9 x9 S
  377. BNE RAM_Clear_2! k" E: W' p0 c2 c! w+ G2 r
  378. LDX #$00+ C$ B7 y* m# l$ D2 \  ~& w
  379. RAM_Clear_3
    5 X, @8 ?& C7 A) d* y0 }
  380. STA RAM_Cln_3,X- _  e6 Z+ c- f( h! V" i' i* i
  381. INX+ g2 H! Y0 U& W  x, h
  382. CPX #RAM_Cln_3_Size
    ; z6 y$ e4 U/ i* C
  383. BNE RAM_Clear_38 z3 M. _5 |1 v5 j
  384. RTS
    9 w  a) \- j3 C2 _5 B* t9 \: I

  385. 6 Q, g/ I( }6 K
  386. ;==============================9 O% ^: j3 R) H; M& W' r7 m, n) n
  387. ;音乐切换0 z4 e/ l. m" b9 V+ t& D
  388. Music_Switch
    * l; y9 ]/ E' t: u4 Q( J: s
  389. JSR Key_Proc
    6 a: {; y! D3 @# K9 a! _
  390. LDA Key_Once/ K: _+ e! m  J5 ~
  391. CMP #$10" B0 S/ c$ [8 |/ T
  392. BNE Music_Start_SongStop4 v- c# x& o  R1 g2 h: Q/ Q' v
  393. JSR Music_ReSet" H" L  F: H0 ^+ k4 v

  394. & X. M4 F3 l2 m
  395. ;音乐停止2 M) `% |" j/ v
  396. Music_Start_SongStop1 t8 S  O4 W: k
  397. LDA Key_Once
    - D1 {& m0 o2 O# S
  398. CMP #$20
    * U, A% O) K1 t5 U
  399. BNE Music_arrow
    5 E; G  a) }' r' s: ^  ~6 ?
  400. LDA #$011 s# }: p7 |+ c# {
  401. STA Music_State
    5 H8 Z' m+ l) |1 e/ O& \6 o
  402. JSR Music_Bar_ReSet( H2 C9 d  C  f
  403. JSR Time_ReSet
    $ s% H6 l9 S; ^
  404. JSR RAM_Clear
    + ?0 }; Q7 K+ J- S! j
  405. JSR Sound_Clear
    1 d4 {0 s& B; X+ |3 p% n: J( P
  406. JSR Music_Stata_Show
    9 \2 ^1 W5 H; s- k: O) m
  407. Music_arrow
    ( M0 J) a5 `9 T$ i
  408. LDA Key_Once- ^4 _: @3 @+ Y, I5 M) E% \7 s
  409. AND #$CF  S5 K) {8 n) ?) [' j- L
  410. BEQ Music_Switch_End
    ; Y8 d) A5 J0 T( X& m
  411. JSR Music_Number$ A2 x! ]9 e0 G5 N
  412. JSR Music_ReSet
    : m+ Z' A$ n7 |9 a) r  C
  413. JSR Music_Show
    7 d% k6 z  i! T9 X- c5 `
  414. Music_Switch_End
    ' q4 [5 p" I- B) f6 {3 ~0 y
  415. RTS
    ) i* _4 n7 h7 G4 h! J& @* i
  416. . u1 e4 |1 D" I6 m- I/ y
  417. ;==============================( i8 S- [3 t4 c+ f. C8 g
  418. ;音乐曲目切换
    2 w9 I# o) N  |& b' O0 K
  419. Music_Number7 n$ b" a# `, d5 r
  420. LDA Music_Cur0 K" e' g, V) Q9 \0 o
  421. STA Music_Last
    ! P$ N( ]! C# u  [/ n
  422. Music_Decrease
    - D6 t2 [$ v8 |4 B
  423. LDA Key_Once9 \+ t8 R& c5 D7 D. D. l% G! m
  424. AND #$42* ^6 N# H/ C! b9 }( ?
  425. BEQ Music_Increase1 y5 `8 E9 x: _! |
  426. LDA Music_Cur
    ! ~  f3 W8 }7 g3 q9 {" B# P
  427. BEQ Music_Increase; J2 r$ W% k8 m! m6 Z
  428. DEC Music_Cur% R' @' k) S! Z
  429. Music_Increase5 D' H$ n! R! f% R  G# m  x3 i
  430. LDA Key_Once& j" N1 k8 W( t3 W% j
  431. AND #$81
    & Y2 l. n2 z! i
  432. BEQ Music_Decrease_10+ \9 V9 g* Y' o; [8 Q) E3 }
  433. LDA Music_Cur
    ! f- w) M$ B' R: g6 o
  434. CMP #Music_Song_Total-01) F0 O3 n! K2 q* s
  435. BCS Music_Decrease_10
    3 T& X0 I! g) @) a$ d# M" B
  436. INC Music_Cur- G' R: U2 |6 p( L) l2 t# [
  437. Music_Decrease_107 j0 X5 K9 H- O! O
  438. LDA Key_Once  h9 d1 z& g, V& b4 c( d
  439. CMP #$04% H! H# d8 f7 |4 `& j4 e2 Z
  440. BNE Music_Increase_10* O' s3 j3 a  D; \2 f/ o
  441. LDA Music_Cur
    # C0 T' o& H) o5 ^4 r- e
  442. CMP #100 t/ a2 s' ^! X; h
  443. BCC Music_Start_Song_Min3 L* `# G2 I0 k; X5 V( |* E# ?
  444. LDA Music_Cur
    - Y) B4 S8 e3 i2 R, Y. e
  445. SEC# S$ X$ j- r0 Q
  446. SBC #106 K6 }; f3 b) J( C( r& D
  447. STA Music_Cur
    # P: J4 \  P6 [7 v- i7 P' Z* q
  448. LDA #$007 ~9 U4 i; m; n/ u6 K
  449. BEQ Music_Increase_10
    ' C& b: W7 c1 j
  450. Music_Start_Song_Min
    4 C/ D! W& T# Y/ K' J
  451. LDA #$00' [$ N8 Q9 A5 Z% K9 U+ H
  452. STA Music_Cur
    * N7 A7 P' @7 w, k
  453. Music_Increase_10- w9 c. p) ?+ u
  454. LDA Key_Once4 Z1 t5 E0 H$ \" S. J2 A! b
  455. CMP #$08
    ( O2 r* g# \$ z, h
  456. BNE Music_Number_End
    . y+ N- z8 y! ~- ?
  457. LDA Music_Cur, y2 E6 V: I# t- d0 K3 g3 p
  458. CLC
    3 T6 M" N0 _( X1 q$ W, ^  J5 x
  459. ADC #10
    . w( _0 U; Z, _) q8 f
  460. CMP #Music_Song_Total-01
    2 K: C) V$ W  D, O( \8 M
  461. BCS Music_Start_Song_Max
    & E$ s) Y% `9 a6 Q
  462. STA Music_Cur
    ( R# |5 P0 Q' j2 s2 Y
  463. LDA #00
    . a+ Y8 n: _# C6 D% ~- T: ~
  464. BEQ Music_Number_End
    ! R  g2 ]. ^0 d  y. w, {
  465. Music_Start_Song_Max; X2 J1 \) f  H/ \5 M0 G, p
  466. LDA #Music_Song_Total-01+ V6 X4 Y' h5 k6 N' s/ ^
  467. STA Music_Cur% i' Z2 w( E$ t3 |% p
  468. Music_Number_End
    & @3 [  V9 x' j+ d
  469. RTS
    ; E2 l1 |! r/ d: T/ N! s
  470.   b" B9 I* a3 G( c
  471. ;==============================
    $ u# D& t' F8 s) h7 ?$ c
  472. ;音乐重设+ }3 a, r* Q" k& c
  473. Music_ReSet
      Q+ m2 e0 Y/ [3 h5 M, Z
  474. JSR RAM_Clear
    0 K% h, J$ q4 k; A
  475. JSR Sound_Clear
    / X8 U. h( |- z" C# |; n, f- j( @
  476. LDA #$1F+ u( V6 s$ W3 b# ]5 v1 H
  477. STA APU_STATUS7 @7 \: [$ v* b) v6 i2 {
  478. LDA Music_Cur
    - W! [5 i; S' d4 n' \  l
  479. JSR Sound_Init
    : T; ?% ~5 |6 J  K* V
  480. RTS; T% ?0 C& l* ]+ }% y2 i

  481. 6 ~7 _0 m! q, b% }
  482. ;==============================
    + g" ~; j( I/ C% z& Z: y. f( }
  483. ;音乐端口清除
      f* W$ [  \/ @5 A
  484. Sound_Clear
    - s4 V- L7 r2 _; ?7 ^6 q
  485. LDA #$00' Q4 v" T: G: O( p5 B3 L
  486. STA APU_STATUS$ F" I1 U( R" \8 i: L. _, L
  487. LDX #$00
    6 Q+ l; X: }' Y) i' `
  488. Sound_Clear_Start2 j$ G; G) v: C/ T
  489. STA $4000,X" A# @: X; L) ~! U
  490. INX+ b: J3 {4 t, {8 J3 ~
  491. CPX #$14
    : j8 c9 I" b2 ^$ e
  492. BCC Sound_Clear_Start
    ! E8 {; C2 a3 ]# i& [0 T* _
  493. RTS
    ' u) _: z9 g0 c1 Y
  494. 2 [+ h9 v$ K8 w6 U2 q
  495. ;==============================' Y$ D/ S# S; A2 K' K3 ]9 l+ Y
  496. ;按键处理
    7 Q4 c7 W0 U; N+ b
  497. Key_Proc! w+ e/ _! y2 x, K. N
  498. JSR Key_Scan
    8 e$ C1 _* a9 G  z* `
  499. LDA Key_Keep* F0 k/ A' P  N8 L
  500. STA Key_Temp% ~" b$ T* q6 f
  501. JSR Key_Scan
    ; m, r8 A& M) U+ Z# `- ~
  502. LDA Key_Keep) Y2 m1 @! u  a' N
  503. CMP Key_Temp
    4 ]' n: M* w/ g
  504. BEQ Key_Get_Once. y3 g# k! n5 j; U! k
  505. LDA Key_Kemp4 |) j( t9 Z" Y# N2 A$ }: K3 n# {
  506. STA Key_Keep  K! A& t2 q- t, U. H
  507. Key_Get_Once
    2 K! R& J* r) y; X  y; w9 u
  508. TAY
    . I  M0 h1 Y* m6 Y
  509. EOR Key_Kemp( N* B4 _9 Q7 A* y  E4 q
  510. AND Key_Keep
    ! \# U9 J2 k% Q( O$ V3 c' k
  511. STA Key_Once
    ( M1 O+ U, m. l0 W; N! e/ p% v
  512. STY Key_Kemp
    0 _) ]( ^* d- R5 C0 t* c+ k; F
  513. RTS
    1 C$ ]) C) n# C
  514. ;------------------------------
    8 J4 ^1 A  h" Q
  515. ;按键扫描
    9 ~8 N/ V7 z# v7 D( c! m4 U
  516. Key_Scan
    2 |! F4 y$ H0 z! f- X
  517. LDX #$01$ P6 t. R/ m: A  ]# H
  518. STX JOY1_FRAME# t" D5 P+ F$ Y; e" i% v% r: }5 a
  519. DEX) @5 ~( D% z- u9 g( n
  520. STX JOY1_FRAME7 K, B& X, O/ p: n: H3 G
  521. LDX #$08( V7 D# a+ M; E; ]; s1 o' k2 Q
  522. Key_Value. y9 n$ u; V/ [; Y2 P/ V  \
  523. LDA JOY1_FRAME
    : S" e2 ?! Y0 t; @; C) J$ N
  524. STA Key_Getv4 y' \8 t* K1 U1 Z: Q; x: p1 B
  525. LSR A
    ' j' |: S* i! }
  526. ORA Key_Getv1 O2 j% X7 ]! O1 w5 F1 d7 k
  527. LSR A! t" c' x  g% f5 Z# P
  528. ROL Key_Keep( c4 f$ k* R/ [. v1 Q( \4 D
  529. DEX
    $ y: {; q1 b: {3 r
  530. BNE Key_Value% i, S  P* u2 W
  531. RTS
    9 ^! s) h$ ^+ Y8 @  y2 \
  532. , O* [" `# E1 m. Z/ f
  533. ;==============================% ~" R7 N6 I* Z1 v/ k' b" X7 d+ `
  534. .IF SOUND_BAR_SHOW_ENABLE$ h% P# m' l: P6 C
  535. ;音乐条显示
    # }  F, d! K0 N  N/ F3 t0 ^
  536. Music_Vision
    , B& f) S$ }# X3 c
  537. JSR Music_Animation5 A% O, J( X. b( `% [
  538. JSR PPU_End8 q# k6 T0 K- |& m7 R+ A; t
  539. RTS5 h% e" U/ y! I2 X. E" p9 j
  540. ;------------------------------7 v6 ?6 Q7 Q7 P, g' H
  541. ;音乐条显示处理) X4 {; b2 P4 k
  542. Music_Animation
    : [0 H9 U6 J. l% L
  543. LDX PPU_Cur
    1 F6 ^8 D: a+ ^! S9 D* D& e
  544. LDA #Mode_Line/ z$ E* Z! ^4 N
  545. STA PPU_Addr,X
    : u% x; C1 K: B4 ]
  546. INX
    ) z" q; T$ l. ~) X  B1 T, C
  547. LDA #HIGH(Sound_Bar_Pos). B# w! z/ x  g
  548. STA PPU_Addr,X; [# d' ]4 \6 @& S6 x1 f6 b
  549. INX
    5 X' `$ ?6 ~3 {2 S/ @  `! I2 G( Y
  550. LDA #LOW(Sound_Bar_Pos). R) Q& d. s. h9 _
  551. STA PPU_Addr,X
    7 {+ g7 F; `- X. t
  552. INX9 A3 t" b9 L3 ?0 Q4 y
  553. LDA Sound_Bar
    # y8 {& l. M2 M/ z6 n
  554. JSR Volume_Convert
    , {/ E+ A- i( w! C( x
  555. JSR PPU_Return. J% y) z& Z1 [
  556. LDA Sound_Bar+$41 m; B% A- z+ @
  557. JSR Volume_Convert
    1 C# Z0 P3 v0 p, g4 p
  558. JSR PPU_Return
    $ f7 h/ {, b. {6 d( K! K
  559. LDA Sound_Bar+$8
    8 r' ~% w9 Q8 @+ Y9 a
  560. JSR Volume_Convert_Ex9 U$ u! e9 O1 `: n, E' |( @
  561. JSR PPU_Return
    5 `1 s$ R6 O8 n7 ?" A9 v
  562. LDA Sound_Bar+$C* w1 X) Z. Y# k
  563. JSR Volume_Convert
    2 k# v# d4 r0 O5 h
  564. JSR PPU_Return
    8 v0 I6 l% t! x, n+ l$ A/ R
  565. LDY #$101 X4 ]( V. o3 a9 T0 Z8 J" X
  566. LDA APU_STATUS# v( H+ F9 r' A) j( Y4 z! w
  567. AND #$10
    1 `0 |1 K$ t! E" A/ g9 d
  568. BNE Volume_Count
    3 g, B+ M* T  W
  569. LDY #$00
    " I3 X3 j" s" |: i7 U
  570. BEQ Volume_Count, _! |7 L: F, H0 Y, ^
  571. ;------------------------------
    3 ~# d2 W) Z' |, G
  572. ;音乐条处理
    . v4 b; C, c7 p6 Y/ k. M4 E$ W
  573. Volume_Convert_Ex
    : [. ^8 _; ~; {$ z: i% m, D" ?
  574. AND #$1F+ V+ N7 P1 S5 B4 Y! ]3 S8 X0 u* \! J
  575. TAY( M  G; s# S" K, ^
  576. BNE Volume_Count
    5 O) a' Z* a  i$ \% L2 ?" g* d1 K, j" p
  577. Volume_Convert
    " n9 W: e2 d, \  z8 d
  578. AND #$0F- P, C3 E6 ?+ [: o0 R
  579. TAY6 i9 ^! ]# ^: k2 e. Q: ^
  580. Volume_Count) V* j8 ?  n; ~3 v# c
  581. LDA #$08& v  p$ t) a" Y( E' v
  582. STA Sound_Bar_Cnt
    2 {$ p+ S! q+ u  W! I
  583. Volume_FILL' l# z1 C( o% v5 _5 X
  584. DEY
    + Z. e, B9 n( x4 i; ~! ^
  585. BEQ Volume_Half
    2 M+ E8 D% E/ T4 D
  586. BMI Volume_Empty5 T( |3 H* \! }9 [" t: n  A
  587. DEY% g: {, |1 i1 O% e
  588. Volume_Full
    8 H+ Q  C1 _  Y8 Z( \8 i$ m
  589. LDA #$16
    $ Y3 Z1 i6 F7 T  ^
  590. BNE Volume_PPU. c3 d( L& g* w, n9 y( a3 v/ g1 G
  591. Volume_Half8 C. ^- V6 G" H2 ^' x+ E
  592. LDA #$15& h+ V6 }/ V  e
  593. BNE Volume_PPU8 m- ?) m7 V  |0 V$ k5 i9 n( E. v. }
  594. Volume_Empty5 [' [. v3 b% |) j+ |/ ^8 n
  595. LDA #$14
      s1 ~  F$ W3 [5 f1 w
  596. Volume_PPU
    7 u- m* ], r% P- Q8 H' A
  597. STA PPU_Addr,X
    & s1 {% r8 e3 f6 U5 s' [1 W
  598. INX
    1 D+ l/ E& b3 t* H, L% G4 T
  599. DEC Sound_Bar_Cnt
    * _) {' |8 V0 Q) \3 ?
  600. BNE Volume_FILL( R" p' j2 }4 n0 `& E: P/ U
  601. RTS( S/ {& P3 ~1 |  X6 \  G7 d
  602. : m& T. y( {1 p( J& C
  603. .ENDIF% q  ]+ _8 k7 f6 I' u
  604. 6 d" l4 h2 D: M1 \) ~
  605. ;==============================9 ?! D: U& I6 {- {  i. {
  606. PPU_Addr_Set;PPU行开始9 ]3 g: w4 h: D% R
  607. LDX PPU_Cur
    9 L: m/ B' T# a/ s! D- Z
  608. LDA #Mode_Line
    # N$ v. Q) a% @' `% X/ R2 j) h
  609. STA PPU_Addr,X# J" r/ k6 M& c0 l# s$ J2 Z
  610. INX
    4 t: ]6 c2 }9 K' Z
  611. RTS
    ' z2 K5 Z4 _, P) k
  612. 4 @! G) m; M1 Z( d& E3 r1 n+ I
  613. PPU_Return;PPU转行
    % `/ R% [0 c' Q4 g- @- x" j6 ?! i# l
  614. LDA #Flag_Over
    6 q4 S# Q5 y' P  a% q
  615. STA PPU_Addr,X+ V6 \: i+ ?, K# W, w+ j- E! y  b
  616. INX. `: D* b4 F+ ]8 R
  617. LDA #Mode_Return
    ; [4 y! f% X5 C
  618. STA PPU_Addr,X8 x8 N' [8 A$ q9 \. u, ?5 G
  619. INX+ z" B6 P7 C( a
  620. RTS# X; Z" h# ?% ]/ v& j" `
  621. ( R& J' v- x$ b! G# F+ |; n
  622. ;------------------------------
    , {/ w) z$ v. Q* J+ N) b
  623. PPU_End;PPU结束2 K9 _9 R$ N& W& d( W2 w. k0 S
  624. LDA #Flag_Over% F4 {! t1 h  J& V
  625. STA PPU_Addr,X
    * G* N2 S  t2 g+ B; m
  626. INX
    2 c1 Y5 L5 Y( G) L1 d4 E3 [
  627. STX PPU_Cur  I) m# S5 g* M' D
  628. RTS
    ! I% V. m! N( }' T! D8 Z, H
  629. ;==============================2 y: M  f' Y* C; h1 d3 G
  630. Mode_Line     = $FD    ;新起行模式
    ; ]/ C/ z$ _' k3 T7 G
  631. Mode_Return   = $FE    ;转下行模式& a) Y0 n1 F# r/ ?6 S' L
  632. Mode_Clear    = $FC    ;行清除
    $ _# [1 N: }+ p( ^
  633. Mode_CntLine  = $FB    ;行计数写入3 ]9 _9 Y% |, y" T  r$ f
  634. Flag_Over     = $FF    ;行结束标志
    8 d% O, ]* u- w) e( N$ {4 b+ d5 T4 ~
  635. 1 d7 j. `) E) E. S, v/ h3 g
  636. ;------------------------------
    / Y. R; O) e. E- ~! O+ I
  637. ;PPU处理" a  d2 n. n7 K- Q$ A! y2 g! ~8 n/ B. }
  638. PPU_Proc
    $ r6 Z! c; W, T' S9 x; y5 V5 x' |
  639. LDX PPU_Cur" c" z* y. Z* ]9 y; d  }
  640. LDA #$002 q5 A/ v5 K* A3 f8 J" P2 e
  641. STA PPU_Cur
      W2 k# E, g4 v
  642. STA PPU_Addr,X
    4 I: r" v/ f6 ^7 v7 w4 a
  643. LDA PPU_Addr& H: i  K/ q. G" t, x
  644. BNE PPU_Proc_Beg) M: ?- f5 d% I) k% U
  645. PPU_Proc_Ret( t+ b& J' y4 N, v
  646. RTS7 J2 G4 j" j: l. a% I1 `
  647. ;------------------------------% Y1 X" U; x. \8 k3 J
  648. PPU_Proc_Beg  ;处理开始: z6 ]+ `1 }( f) v8 O. X
  649. LDX #$005 F, H& R2 f  _* J8 j# y
  650. STX PPU_MASK
    ; @$ w$ C/ H/ i6 s* O. H
  651. ;------------------------------; [! r9 w# a- b1 q1 T4 A" O% j) V
  652. PPU_Mode_Select  ;模式选择# _* S6 k, V& k3 A( |
  653. LDA PPU_Addr,X
    $ [* S7 N7 T& m1 p
  654. CMP #Mode_Line* L) `  H/ O3 ]5 {; [
  655. BEQ PPU_Mode_Newline( O$ p1 ?7 i8 y5 w- K7 q' C: L
  656. CMP #Mode_Return3 Q6 ]5 W: x' S* Z) k
  657. BEQ PPU_Mode_Return: i/ v- y$ f/ `( O; D3 R) h
  658. CMP #Mode_Clear8 z# u$ }; U' k' M' G
  659. BEQ PPU_Proc_Clear
    2 U* g6 F& q; X1 B" F
  660. CMP #Mode_CntLine
    ' \6 A7 ^! U  ]+ J' Q
  661. BEQ PPU_Proc_Cnt_Line
    + T9 B/ O, C4 k# y* J+ u+ `
  662. RTS
    # W$ R) ?* N, P1 }! r6 b: J3 O1 t
  663. ;------------------------------
    5 n( S) [  \8 e+ L5 X6 F5 N
  664. PPU_Mode_Return  ;转下行模式0 ~9 u2 W+ |$ Z  @# ~
  665. LDA PPU_Addr_L
    3 v$ w; C( z) y9 M  r
  666. CLC
    + Q' L* U2 B3 v
  667. ADC #$20
    % j) M: w* g" v. n4 A
  668. STA PPU_Addr_L
    % o- N" Q. `$ E! s( h8 G2 U4 Z) Z
  669. BCC PPU_Return_End2 p4 J7 ^* m: y! K+ S
  670. INC PPU_Addr_H6 K6 A' z1 s+ k% \- Z
  671. PPU_Return_End
    1 ^5 j, [- [, |
  672. JMP PPU_Set_Increaser
    ( d. v0 K7 }  A& O9 ]
  673. ;------------------------------
    # `+ d, E$ h; V% Z; w  A
  674. PPU_Mode_Newline  ;新起行模式
    6 H1 |! _' T! w3 Q7 @* h
  675. INX
    : r; ]5 [& v! g
  676. LDA PPU_Addr,X
    $ r8 I' D7 Y9 Z  {- M. P& r
  677. STA PPU_Addr_H, p+ v) u% m0 Z: G5 Q
  678. INX
    3 k( T" W) X; D$ z8 h5 `
  679. LDA PPU_Addr,X6 ]; r) }* O' s3 [, z- l1 e
  680. STA PPU_Addr_L
    ( L, r" ]6 C1 Q: z  Y' n( G. b
  681. ;------------------------------
    , m$ ]( ~& I( f' _9 ?( s8 R% T
  682. PPU_Set_Increaser   ;设置写入地址
    % E6 L+ q- e4 r/ q& S6 n+ p/ N
  683. LDA PPU_Addr_H
      R( P: Z, h! d+ t! K1 S
  684. STA PPU_ADDRESS: G6 x7 u$ D+ f
  685. LDA PPU_Addr_L
    4 u% `3 _1 H# {6 m( ^
  686. STA PPU_ADDRESS
    - d) n& o( _7 ?3 A4 @
  687. ;------------------------------
    4 e0 U9 x7 R, g+ r) Z+ o
  688. PPU_Write   ;写入数据6 ]2 N% w7 j, R; |& l" Y1 i! ?' K
  689. INX
    - Y4 d; Q- |. F# f  e# o, d
  690. LDA PPU_Addr,X" d; ?! z4 e# {5 A" _
  691. CMP #Flag_Over8 P/ T4 P' u0 f/ d" c6 n
  692. BEQ PPU_Proc_End$ J* W& m) h6 B9 z% P
  693. STA PPU_DATA4 a& |) [  [' p+ v
  694. JMP PPU_Write
    - v) N% k' K& Z8 h$ i5 }6 d
  695. ;------------------------------, [) p5 k* `' ?& o2 I
  696. PPU_Proc_End  ;单行写入结束
    6 f" v- g9 l2 Z9 `; N. A) O  e" p
  697. INX' j, U! Z3 q' l4 }, K8 y
  698. LDA PPU_Addr,X) E2 F) i# g6 E; E# y1 `. e
  699. BNE PPU_Mode_Select/ d: u% g5 B! r, l# f0 j
  700. STA PPU_Addr7 v+ |, r# w. V$ l( y
  701. JSR Update_Palette_Color
    ( t) s7 {6 z/ \6 o) g( }, V/ Q
  702. LDA #$00
    3 E8 F+ j5 W: Q+ r! |4 u2 x
  703. STA PPU_ADDRESS7 u2 F3 m! P% v; f3 M
  704. STA PPU_ADDRESS
    + X8 t8 H. e7 s! _
  705. STA Show_Track_Name
    6 U  y2 C- F9 r! b
  706. LDA #Scroll_X2 x$ C# Y, z! D5 q0 B- l
  707. STA PPU_SCROLL
    ( E  z% c, j. z: l7 }3 t% b" y
  708. LDA #Scroll_Y" Z! g8 q; c! j. i9 O+ M
  709. STA PPU_SCROLL: N; w3 V1 z5 U6 V1 ~' Y" t
  710. LDA Screen_State& f$ J& v9 `! Z- \+ }5 H
  711. STA PPU_MASK
    # k1 B$ C/ j& t1 ?7 W9 s2 d
  712. RTS* w7 D0 @0 G0 p% H

  713. ( P# Z- x3 p& {# ^+ Y7 \
  714. PPU_Proc_Clear- v: q  r4 m" T3 ~3 E( M( w" F
  715. INX! |3 Z6 G5 Q- t) `" k' f# W% a( K
  716. LDA PPU_Addr,X
    ! ~0 A! u5 H4 t/ ^1 X2 p. k2 c
  717. STA PPU_ADDRESS# t/ w/ h0 n3 s9 j; g5 h9 {* }; D
  718. INX. j  c. B% P. _) G1 a0 A
  719. LDA PPU_Addr,X
    - w3 Q4 ?! q9 f2 B9 f8 S6 v. E
  720. STA PPU_ADDRESS$ K& r& Q( G6 n* p3 ]0 ]8 C/ S8 M
  721. INX4 t- P- T* Y3 L9 B
  722. LDY PPU_Addr,X
    0 n8 X. M9 R5 p+ r
  723. LDA #$00
    ! T  X9 q- ~7 ]! y1 F  v
  724. PPU_Proc_Clear_Write
    ' p5 D3 k" ^1 L' K, n
  725. STA PPU_DATA
    1 O5 h- l' q4 z/ A! m! [% ]0 Z$ f
  726. DEY' Z5 G: T  M+ E6 r0 \, v8 z7 y
  727. BNE PPU_Proc_Clear_Write
    4 V# n3 I9 A; W. {1 i" t
  728. JMP PPU_Proc_End
    & m# q! U) t! `# Y

  729. ; A# k7 b( B6 E0 |; B! u
  730. PPU_Proc_Cnt_Line
    3 m% D' z* I$ r# q" g0 y4 r+ \
  731. INX7 @# h7 K1 M4 T& Z
  732. LDA PPU_Addr,X5 x  ?* ]4 E9 G
  733. STA PPU_ADDRESS
    ( n% h: z' |+ A9 K& I
  734. INX7 x2 n9 ^! J$ p# z
  735. LDA PPU_Addr,X- W+ U& W6 G7 k+ ]1 Y' M5 y
  736. STA PPU_ADDRESS: ^( D' ?$ R# `: s8 A
  737. INX6 A5 i8 W/ x) {0 m; u
  738. LDY PPU_Addr,X
    . O5 a/ j! M: ^! J; n
  739. PPU_Proc_Cnt_Line_Write
    * m2 e/ B& n3 K( M* ]% }
  740. INX! d% ^0 n* @: W2 h! X4 b7 Y1 m
  741. LDA PPU_Addr,X
    ) x* U% R0 @, E; Z. X
  742. STA PPU_DATA) v( u" r+ P4 h7 }
  743. DEY
    6 L, W7 A1 t2 J. ~. K. {5 }
  744. BNE PPU_Proc_Cnt_Line_Write
    , \5 @4 e9 r. [/ ~+ F; q
  745. JMP PPU_Proc_End' u4 s2 Q" s/ d( v/ A
  746. ( ~& o8 w, L) a6 Q
  747. ;==============================
    ) T0 Q: w+ }9 K
  748. HEX_To_Dec;十六进制转十进制
    7 o) D9 U: o3 c( m7 N* ~
  749. STA HEX_Data
    $ [$ R: c% H& {) t2 W
  750. PHA! x+ [( u9 X5 e  L' x
  751. TXA9 G0 w, t- L+ x% R" ?# Q
  752. PHA
    9 m4 d3 ~8 o* X3 U
  753. LDX #$006 d3 d6 T. e$ V$ B
  754. LDA #$00
      g$ [( v3 P% }$ m) R9 v3 `- I
  755. HEX_Cln# a( s' H" b6 S8 @1 p! e
  756. STA DEC_H,X
    : e5 g, x3 M* r* R* ~; L2 j
  757. INX6 a5 D  U! i$ g  w5 P/ W
  758. CPX #$03  a7 I* h" `" p" x' M
  759. BCC HEX_Cln
    7 Y3 o, n) n5 }4 t% W
  760. LDA HEX_Data6 W1 D1 u3 g3 W
  761. ;------------------------------8 N( |4 |* _1 ?& T8 p0 t0 J% T
  762. HEX_1003 K! |* z( I: v6 d3 s6 H+ S
  763. CMP #100
    # Q# Z, t3 W( R; X( ^( W
  764. BCC HEX_101 ?8 C- m4 U5 j: E
  765. SEC( f9 c6 Z6 D* {2 E
  766. SBC #1009 N: Z' }+ k! |! ~7 m$ {8 H3 f
  767. INC DEC_H$ i0 B" j9 Y4 m3 U& n8 _0 W3 V6 S
  768. BNE HEX_1006 i" Y! N- @1 P2 r7 A. G( j  ~
  769. ;------------------------------% M! T* F6 Z! P. o8 w6 H' }
  770. HEX_10
    & {& q. X; P. B0 q
  771. CMP #10
    3 ]7 `6 F1 k0 N8 ~# q; t
  772. BCC HEX_18 ?5 z5 a  w/ \9 D' t7 b$ X
  773. SEC
    ) h2 Y, {; v( C7 U" L0 I  g1 N
  774. SBC #101 k, y7 ?" ~" k5 V9 ^3 Y5 v
  775. INC DEC_T& L, M$ o) E- }, C1 y3 R+ W. R' [/ `
  776. BNE HEX_10
    ! t' f/ x+ X0 L0 L4 A; S* M
  777. ;------------------------------
    ; a$ ?" P: W& b4 `) W9 j
  778. HEX_1+ E/ Q% K( a* k' J) K
  779. STA DEC_L
    ! X7 }0 @0 _8 L' W  @! ?, f/ X+ L
  780. PLA
    2 d  h: D7 f9 ]9 x% U' Q
  781. TAX
      H6 x: q/ s8 ]3 i* d) [
  782. PLA  Y* T* Z3 y0 ?5 @  f+ A0 w* S/ S
  783. RTS. E! M3 c8 s3 ^* h" ]
  784. 1 ~) \+ m% i- H
  785. ;==============================; ^# j+ m1 @5 ^4 C9 o& O* t2 l( }2 @
  786. ;音乐曲目显示( K8 B, x3 P2 B: N8 |6 E
  787. Music_Show
    . `# W2 N3 e0 v8 C8 X
  788. LDA Music_Cur) S1 g" ]4 r; e( S; x
  789. CLC3 F$ K6 K. ~. V( S: L& b, P. H
  790. ADC #$01
      ?: \! O3 d/ D1 r/ k) b
  791. JSR HEX_To_Dec. @' S3 i: l7 k1 Z" T$ g: b
  792. LDX PPU_Cur6 ~  a! \  p' W
  793. LDA #$FD' l8 s9 m0 E6 v0 E! ~8 g7 [* _
  794. STA PPU_Addr,X
    " u0 w, b. ]* v* L0 e- v5 b
  795. INX
    2 y8 R2 ~( `- ]( N7 Y! F4 z# u
  796. LDA #HIGH(Play_Index_Pos)% K9 o1 g/ |2 t9 {/ f
  797. STA PPU_Addr,X' ~& M% Q1 [* @, {" D
  798. INX; P' Z1 U% D/ `
  799. LDA #LOW(Play_Index_Pos)$ W. _) F' v2 @5 ~2 t3 |5 F
  800. STA PPU_Addr,X
    3 ]6 p6 v  b; H! @
  801. INX9 I2 a% e" _0 Z0 q# Q/ n# w( A& h
  802. * \6 X3 e/ W6 f0 g+ Q9 s; f
  803. .IF Music_Song_Total > 99& T- R0 O9 H% g; \( X
  804. LDA DEC_H
    : J& [$ P2 h- ?" A" Z' w5 M
  805. ORA #$30$ ?1 t( {4 r% v
  806. STA PPU_Addr,X+ O: X) A, W5 Q. |
  807. INX' R* O4 q& q8 w% b
  808. .ENDIF9 {0 P1 N5 Z# ]/ B* r0 t5 p0 i% a) s1 T
  809. , F" F8 u4 O6 H$ t# [
  810. .IF Music_Song_Total > 9% k3 ~$ i: x" U
  811. LDA DEC_T
    / V" {! B( f; h
  812. ORA #$30# t1 U( h) z0 b1 @% K1 A
  813. STA PPU_Addr,X: v  b* B+ {! _3 C" K& w
  814. INX
    ' a! `" B) [8 K' |# e% W9 u
  815. .ENDIF9 k$ N4 h1 z/ m; ]
  816. 1 D0 M% O0 I* w7 v+ n
  817. LDA DEC_L
    % S5 Q; s2 N" G+ E) x: q2 \
  818. ORA #$30) Q8 }7 j' ]1 v5 A" X  @/ W
  819. STA PPU_Addr,X; w4 A" P  [+ G, {5 Q2 G
  820. INX- X' u4 Q! c6 N6 d  ]: L
  821. 1 W& C8 D3 T/ a, I$ ~  X9 m
  822. LDA #'/'6 T: _; _$ Q! b5 F8 F) E4 L
  823. STA PPU_Addr,X( d8 _8 J! |$ b# D2 S9 ^
  824. INX
    . W! {7 |8 T3 U1 {' z: m
  825. Music_Show_Total
    * }+ q; S3 `% x9 n( D- R9 f! V
  826. LDA #Music_Song_Total% ]; y! F5 V. x, C0 F* D) k& N2 Y% Z
  827. JSR HEX_To_Dec
    5 W( U6 V/ x8 w0 D; _) `% K6 s
  828. ; m2 G& Z  _! N3 {, P
  829. .IF Music_Song_Total > 99
    ' Z( j2 H( v, ?* ?; r
  830. LDA DEC_H0 f' W0 t3 f9 K( H5 c0 l0 A
  831. ORA #$30! x8 ^4 A# e# D& j
  832. STA PPU_Addr,X
    7 w* h% ]3 s  \' a
  833. INX
    2 \  @* z+ F0 j# V# Q  z, \: c# A
  834. .ENDIF
    : e, `0 I9 \2 D' j
  835. # C6 }9 ^! t; T" Z6 k; ~5 g
  836. .IF Music_Song_Total > 9
    ! t7 v0 x7 e  N! h, V9 g8 ?! [) w! E
  837. LDA DEC_T" H  @/ j$ V- X6 t9 U* x3 _6 ^
  838. ORA #$30. d* R, H, s. B7 f% ?/ J
  839. STA PPU_Addr,X. B" C+ v" y; x: Z
  840. INX/ ^8 `4 J& m6 H1 J" y, r) |
  841. .ENDIF
    ( m) P5 _+ ?* ^2 z, }& K& b2 ~
  842. ' k- F5 i, o! A, m: v( V6 v
  843. LDA DEC_L
    ; _$ T' X& O3 K
  844. ORA #$30! n* I- D! P  e: D
  845. STA PPU_Addr,X( {' W  e: {8 O& I( o, Z& D
  846. INX9 c# e# w' `$ k9 e, z* N- Q# l0 r3 Y  k
  847. , t# V. W& E& L% t0 P+ S
  848. JSR PPU_End6 k4 w- ~, K9 X; g+ T
  849. Music_Show_End" o0 [/ o  ^4 j$ {6 s3 t, T
  850. RTS. S; X6 B! D  B) [- c! N
  851. & @0 H' n5 C" L; T
  852. ;==============================
    * j( S+ `+ F. ?6 V1 H% i7 m- J
  853. Time_Show;播放时间显示
    " T0 V* J( F5 D* b8 d0 [2 \" b
  854. JSR PPU_Addr_Set) B2 c- H9 _. F8 M3 q, i6 B
  855. LDA #HIGH(Play_Time_Pos)) s7 g% F6 X3 C% F& J
  856. STA PPU_Addr,X
    + a3 r1 `& K! o) n3 \8 u6 y4 w
  857. INX' |( r; r% ~8 a( q; h
  858. LDA #LOW(Play_Time_Pos)
    ; t# r$ |0 T7 |; a
  859. STA PPU_Addr,X
    . z+ E, ~4 ]0 s- G
  860. INX* `) E# p3 i; B7 M* Z8 u; q
  861. Time_Show_H
    ; |# H; ^7 {% y' P( B& {! n
  862. LDA Time_H
    3 l3 x% w& a2 T/ }& Z
  863. JSR HEX_To_Dec
    ) w% ~! x+ H/ C2 k4 N0 e
  864. JSR Time_Digit- ]5 E, T$ E0 G
  865. LDA #':'
    / X& t* V9 P' x
  866. STA PPU_Addr,X
    # _% G. `3 X7 N: D: F2 E4 ?
  867. INX
    ! |3 r$ ~/ h4 s
  868. Time_Show_M/ M2 p, g% b$ w) n
  869. LDA Time_M9 |# Y' J5 K3 ~5 u" l1 G) Q
  870. JSR HEX_To_Dec
    ! S' p1 y3 n+ ~8 V0 [8 D) }, B! h
  871. JSR Time_Digit! A2 ^! O* R7 A( b8 Z; M, L- A( x# L* d
  872. LDA #':'
    4 ]% b5 v8 C; U
  873. STA PPU_Addr,X! M" F0 }9 J$ U
  874. INX. m. Y9 Z% R* ?  H0 l5 K( i
  875. Time_Show_S
    / d. u3 u. y7 y2 I7 g, `- a
  876. LDA Time_S4 J, ^$ M- W, f: m8 Z* v' @. Z
  877. JSR HEX_To_Dec. x/ x* F% W1 z: P" L
  878. JSR Time_Digit
    % [3 C- n9 F# k* [
  879. JSR PPU_End. e3 E7 x* X& D4 K# {  _6 W! {
  880. Time_Show_End- R  p+ \2 N5 a+ V$ M5 S
  881. RTS5 @, [8 g5 m& |
  882. # [& }/ [' f4 h
  883. Time_Digit
    8 S: a  |8 K9 M$ T& s( {* O
  884. LDA DEC_T
    9 I0 n$ y: j$ f" L  U) d
  885. ORA #$30
    * \/ {5 {$ L$ O3 N8 R
  886. STA PPU_Addr,X4 _% R  I& G  Q8 d+ `" G
  887. INX! `% y5 G2 J3 S  _7 J  V
  888. LDA DEC_L
    # u0 }% [! k4 n" f9 u1 }) \0 ^
  889. ORA #$303 a0 C- c0 A/ o0 p" D  z4 e
  890. STA PPU_Addr,X- g) {5 ?4 v8 e8 ?7 a2 ?
  891. INX
    4 s- f- U, y" q; Q! [- `, h
  892. RTS
    + h* r1 K8 e8 K" ~$ G+ G) ?
  893. 4 r6 O$ t/ U  J1 I
  894. ;==============================( K2 c/ }0 _. j5 K0 H0 _: y
  895. Time_Count;计时
    : Q+ j6 _- e$ `- ?" @
  896. LDA Music_State
    ; W5 y) z" E4 ]) f4 z
  897. ORA Time_Wait_Cnt9 U2 M/ S9 ^- Q8 b4 T
  898. BNE Time_Count_End
    9 e! u5 t9 a6 D3 E, e) m& N
  899. INC Time_Cnt/ b. i$ Z) @2 s1 g# u* ]' Q9 O
  900. LDA Time_Cnt$ z0 p9 J( w6 Z1 D' U+ f1 V# z; B
  901. CMP #60
    " _! v' M! W8 K+ I) n3 Z
  902. BCC Time_Count_End: |: J7 s  M! C. ?( ]7 C
  903. LDA #00
    # a: g  ]  l8 {' g
  904. STA Time_Cnt
    , c4 L, |% H7 N& G5 ], U; r) ^0 a7 i
  905. INC Time_S
    2 D8 d( @/ H2 H# K* Q/ ?
  906. * g, d9 n7 X6 ^; P. z
  907. Time_S_Cnt6 P0 C0 P+ ?2 P! S
  908. LDA Time_S
    * i2 m( ~+ V& r/ ^6 H2 {4 z
  909. CMP #60  c" I0 |5 O: t/ w; p  ^$ @" ^
  910. BCC Time_Count_End
    & l4 ]4 l/ N& E- I6 ]: v% m
  911. LDA #00
    1 `; ?8 m3 g. [8 V4 m. H
  912. STA Time_S( w& s. ~4 Y, {) w7 P  a
  913. INC Time_M
    : c9 }* f: Q$ j
  914. 2 p5 h+ _( l; p) O2 A7 i
  915. Time_M_Cnt
    1 f1 L: U( o( C! d1 A9 i
  916. LDA Time_M: R' P" Z: q$ j& u4 J; }" v( h& d
  917. CMP #60# ~; Q  k) G- K& {( h1 e( o
  918. BCC Time_Count_End
    / |8 b; M  \( j& F' T1 d
  919. LDA #00
    5 _+ ]1 |+ w7 F; T/ H
  920. STA Time_M
      C' s% Z0 i, Z! b! w$ s
  921. INC Time_H7 V2 a% U1 G# w( w. o6 H1 C
  922. 6 B' L$ \0 c2 ]0 d: Z! L
  923. Time_H_Cnt
    * K0 t; G" _7 _2 O: Q8 A6 _  u
  924. LDA Time_H
    , q2 f9 x! F- X. Q. ^" A
  925. CMP #24
    * Q3 D" ^% Y1 s' G
  926. BCC Time_Count_End
    1 i7 Y, B- j) A* W0 `, C, ]
  927. LDA #000 P2 x2 d4 I4 E9 U
  928. STA Time_H  H/ j% ~% m! j& U
  929. , j2 J# m6 y( g+ Y
  930. Time_Count_End
    ' l; D$ u5 s( d
  931. RTS- j$ N1 S4 g  z! O+ V

  932. 7 z# r2 @( {0 ]/ P# B- [
  933. ;==============================
    ; {% a! W& T8 k% f
  934. Time_ReSet;播放时间重置
    - ~3 `8 E5 X$ F4 N3 B
  935. LDA #$00
    7 {& O% h. w, j" Y6 H$ h
  936. STA Time_S
    $ ~; l8 X4 t' w, C: ?- t" H% K9 _
  937. STA Time_M - Y2 q; D) m* B" U6 G# W
  938. STA Time_H
    . @1 I4 p) U$ q' r
  939. STA Time_Cnt
    ' n- N( {2 h1 E4 O9 J$ w* \
  940. RTS; I' s2 [# I/ v9 |5 A
  941. & X7 i2 g0 p/ B3 ?, u
  942. ;==============================
    6 f; d$ m: ^" G. c* V- H
  943. Music_Bar_ReSet;音乐条重置
    ; x2 \: F; M% n. W& a2 O
  944. LDA #$00
    # J9 V, J6 D( h, a- Z3 z
  945. LDX #$00
    8 ~* x8 t. z' I/ @7 L
  946. Music_Bar_ReSet_Set
    # P* T, c1 V# z3 _0 Z1 Y
  947. STA Sound_Bar,X* X7 r$ f% s) r
  948. INX. o+ a+ ]0 b/ G+ K
  949. CPX #$10
    5 g! E: O8 v( j6 A
  950. BCC Music_Bar_ReSet_Set# K9 G) g: H' j$ N5 [/ }
  951. RTS& }* p% ^. D  W$ k8 s

  952. " a. G9 U0 S7 s
  953. ;==============================) ?5 s$ h' f! i* u6 S" L% C% b. G
  954. PPU_Data;PPU数据写入
    : B5 F! D1 L, c3 k# A
  955. STY Data_L% x- p: D5 D' J5 \. r. d
  956. STX Data_H
      |; w; r- h( k
  957. LDY #$FF$ q" s; J4 A- J2 t  e7 z, Z$ W  r
  958. LDX PPU_Cur" p3 h& Y: R% B3 e  U
  959. DEX5 `0 \# I5 O7 A( A
  960. PPU_Data_Beg
    ( b. d7 ^# @. H5 N8 L( `0 T/ N; m
  961. INX/ I% \4 |; E* a
  962. INY
    ( k% N; Y& W$ T- b
  963. LDA [Data_L],Y7 d5 Z" I5 K3 k$ R; ^5 D' C" M
  964. STA PPU_Addr,X4 [: ]- |0 @( }2 o. H( s& M2 w( m& C) p
  965. BNE PPU_Data_Beg0 _+ y3 Q+ c- \) h: t' P4 {; k
  966. STX PPU_Cur
    9 C% P  l. i. z. T+ M" U) e; O
  967. PPU_Data_End8 U2 b3 g2 b2 J0 X  Y, K  _
  968. RTS
    * s' k! B! K0 y5 X5 @. _1 s9 X
  969. 0 F1 K7 ]; ~2 [% i5 [
  970. ;==============================
    # Q  H2 \! _/ e' b- h3 Q
  971. Music_Stata_Show;播放状态显示
    % v% e) X2 i# D% s
  972. LDA Music_State
    7 y' d6 c  D" B+ D7 l' T% i' V
  973. BEQ Music_Stata_Show_Play7 s5 P0 Z1 G1 H* J; i
  974. Music_Stata_Show_Stop
    9 T4 @( k3 I8 f/ q
  975. LDY #LOW(Music_State_Stop)
    6 E" L: ^) C+ Z3 ^5 ^& Q  Z
  976. LDX #HIGH(Music_State_Stop)* p+ Q$ e" ]. M4 M
  977. JSR PPU_Data6 a2 E8 R1 ]& w! \4 E3 r9 J) {2 E
  978. RTS/ U; R/ r9 `+ d" r. W0 G. Z7 S
  979. Music_Stata_Show_Play
    . Z; T- q* ?* v  G5 D& }
  980. LDY #LOW(Music_State_Play)
    + y. v, W8 u) x1 c- `, J
  981. LDX #HIGH(Music_State_Play)8 f( b3 y* O+ E0 I* @/ Z$ o/ g- M7 k
  982. JSR PPU_Data
    + Y# d; G; @8 o8 D, T, I( e7 n
  983. RTS
    ) o8 J4 I- e2 ?5 [1 Y$ K3 ^6 Z
  984. : P) r% y! b: }% n9 S
  985. .IF SOUND_BAR_SHOW_ENABLE) ?  R/ Y# \, {( S3 m
  986. ;==============================! o/ k9 `: J" \" Q
  987. Sound_Bar_Text_Set;标题与音乐条初始化) N; z" w7 d6 k
  988. LDY #LOW(Sound_Bar_Text_Data)* x9 t6 C; }' n& |; P0 c$ Y5 K" _
  989. LDX #HIGH(Sound_Bar_Text_Data). |  J, H4 `% m; `$ Q
  990. JSR PPU_Data* F. W% Q# x( U. z9 Y
  991. RTS
    , ^9 [- h1 `, [1 ]; O% _* C  X
  992. ' M0 S( z& ?/ X: M0 Q
  993. .ENDIF
    5 p! V9 J0 t6 P: D" Q
  994. # p, V$ l8 r7 o7 t
  995. ;==============================
    ! Z0 {$ C" [: w8 }
  996. Set_NameTable_Attributes;设置命名表属性
    - A0 V$ [# N% M5 f; z3 x
  997. LDA PPU_STATUS
    ) h' d% R0 g( c( W- e. i" y
  998. LDA #$235 I0 F$ ~* I% H9 L! o
  999. STA PPU_ADDRESS, F# j6 h& S0 I$ E) u" I. `' s5 q
  1000. LDA #$C0
    - N% I+ H0 ~9 r
  1001. STA PPU_ADDRESS
    % i& L  T3 d9 Z" `$ |
  1002. LDX #$004 ]  [- t4 d: E1 s7 z1 [$ P
  1003. Set_NameTable_Attributes_Write+ _; s4 ?% f/ y/ S2 {. N3 [; q1 z
  1004. LDA Palette_Attributes,X; A5 @) l, M% n3 f
  1005. STA PPU_DATA
      a/ h6 ^9 `2 x, X. Q; h
  1006. INX9 @! v% }& V; i3 j+ J! s
  1007. CPX #$40
    2 x( t* B& n  R( H; q; R7 f. Q
  1008. BCC Set_NameTable_Attributes_Write* H, {5 u% h0 q  }
  1009. RTS
    ; b4 I# w+ d# h

  1010. : w3 C& q! |/ |( X
  1011. ;==============================) H' `8 o1 w( C( k1 W0 O3 k6 N
  1012. Set_Palette_Color;设置调色板数据
    . N# @6 e+ I! `; v
  1013. LDA PPU_STATUS& B$ a9 k. O& _; \* `8 w0 \! N
  1014. LDA #$3F
    8 a# H8 H% ]& [, h/ L7 o
  1015. STA PPU_ADDRESS, g; B+ h7 a, W3 D0 k2 G& e
  1016. LDA #$00
    8 C9 b$ s, T& w
  1017. STA PPU_ADDRESS
    * M3 N" V) v3 I
  1018. LDX #$00
    4 B' i9 e; R+ j$ d  w5 K- k9 f
  1019. Set_Palette_Color_Write7 d& a  ~' E$ m4 n
  1020. LDA Palette_Data,X
    * `: o/ j4 T$ Y7 k+ U' g/ E0 X/ a' o
  1021. STA PPU_DATA3 e/ f6 _7 N( j% G) t" c3 I7 C& A
  1022. INX8 f5 |' N& e3 g7 v0 S$ d1 o/ K
  1023. CPX #$20. v- K+ n, M+ O
  1024. BCC Set_Palette_Color_Write
    ) d# O2 l# m, Y# h4 w/ ~
  1025. RTS% D6 G0 g/ ]1 a8 C" Y) O; E* F) k
  1026. * J9 [5 }$ e4 e- P' L
  1027. ;==============================
    % o; a1 i4 r$ ~1 Z& \. k
  1028. Init_Palette_Addr;初始化调色板数据
    1 b+ s" Q2 v$ P& ]) R! R
  1029. LDX #$006 S1 N, I' M% o7 E
  1030. Init_Palette_Addr_Write, Q2 g# R  A7 }# Z* r
  1031. LDA Palette_Data,X6 I8 y/ R9 t, ~9 T$ q% e' Y/ ]7 y
  1032. STA Palette_Addr,X) i1 \+ z( h/ N; H
  1033. INX$ f- C3 W: B) n* L$ s% y& O
  1034. CPX #$20; g; `4 \$ i. m8 {8 Y
  1035. BCC Init_Palette_Addr_Write1 j! p* t( K5 Y# i- k
  1036. RTS
    * |3 C: q2 r# Y0 e7 ?

  1037. / P) G& |( t- ~) h
  1038. ;==============================
    - Z! f) H: n+ l1 @( F
  1039. Update_Palette_Color;更新调色板颜色
    . P! c& ], Z" p$ [6 {. q4 G& A: f
  1040. LDA Show_Track_Name' a; P( h6 r* @/ z8 V' F0 B/ M
  1041. BNE Update_Palette_Color_End- {$ I3 @) C- [: H
  1042. LDA Palette_Update_Flag  ?4 E3 B7 T7 b, r
  1043. BEQ Update_Palette_Color_End
    6 P( q  R+ e  E/ j, x& X* C0 v' k
  1044. LDA #$3F
    " W% Z3 T; _) D& D6 e
  1045. STA PPU_ADDRESS
    6 c8 q: Y- h8 l& r/ K/ t
  1046. LDA #$00
    1 j+ U) q3 F5 y3 \/ v6 ?
  1047. STA PPU_ADDRESS
    7 a: j- G. |- ?. ]
  1048. LDX #$00; ]. H' x) u' a( Q6 D
  1049. Update_Palette_Color_Write# o& l( L  ]- w" D( \' u
  1050. LDA Palette_Addr,X
    & t3 O- B7 C, B! s" p: J- z
  1051. STA PPU_DATA
    ) e- s( Q1 r8 H& v" _7 T; }- O
  1052. INX
    . o; h  p3 H* T. u" f* B8 c
  1053. CPX #$20
    - z/ Q8 x/ z8 K3 U8 Z+ {, {
  1054. BCC Update_Palette_Color_Write
    : Y$ k* L: G9 k
  1055. LDA #$00
    0 X; m2 F/ g) Q  W. K% |6 ^9 y
  1056. STA Palette_Update_Flag
    6 X) Y1 `+ N- h( c: Z; |- t/ m
  1057. Update_Palette_Color_End
    0 g9 ^; L" ~* U- K* Q
  1058. RTS
    . N- k9 t) \$ m4 P/ Q8 ?
  1059. ) j1 W5 m9 h+ E' \( n
  1060. ;==============================3 x( D; o6 \/ O3 P5 ]; ?2 I% ^
  1061. Update_Palette_Data;更新调色板数据8 O! D3 B! T4 ]2 R3 i+ R/ q9 @
  1062. LDA Show_Track_Name4 c& Q# Z& v! [' z2 i
  1063. BNE Update_Palette_Data_End
      |7 p0 L. D% |  f9 F6 C, |( @* w
  1064. LDA Music_State3 k; C' |5 D3 k, a& `
  1065. BNE Update_Palette_Data_End, @+ l& x: \9 ?
  1066. Update_Palette_Data_Check$ }5 v$ z+ i8 r3 i8 N' @
  1067. LDA Palette_Wait_Cnt6 |' V9 Z9 v. S, r( w
  1068. BPL Update_Palette_Data_Check_Over
    2 `7 n6 e# M: N; j0 |$ H$ `& l# P, f
  1069. LDA #Palette_Update_Interval
    : A7 b% [2 Z) f  \- Q
  1070. STA Palette_Wait_Cnt
    3 y% B( D4 d9 E
  1071. Update_Palette_Data_Check_Over
    4 s* W. s* b5 {: z2 q& X5 m
  1072. DEC Palette_Wait_Cnt* g9 K- k; K+ q3 s8 y
  1073. BNE Update_Palette_Data_End1 v$ @) ?0 U& l& h
  1074. INC Palette_Update_Flag$ K% o( L, G0 p9 f
  1075. LDA #Palette_Update_Interval
      ?4 v/ ?& d7 Z( H3 x& S
  1076. STA Palette_Wait_Cnt7 H) U9 ~$ D6 x; R
  1077. LDA Palette_Update_Addr" c9 ?5 W* N9 _& b% X" [! J
  1078. CMP #Palette_Update_Max- K% f* U& h( t+ r
  1079. BNE Update_Palette_Data_Set
    % s( w7 D  r& [/ U$ Y
  1080. LDA #Palette_Update_Min - 1- Y* d# C$ m7 [4 z, K/ T6 j
  1081. STA Palette_Update_Addr
    , Q( P- J! t4 Y
  1082. Update_Palette_Data_Set8 c1 f! l; t# j. I
  1083. INC Palette_Update_Addr
      V' R2 V" \' H: q- v
  1084. Update_Palette_Data_End
    ; X  g9 s0 V! G. Z& G
  1085. RTS* T  d& m( W+ H  j
  1086. : M1 w2 I4 R+ H+ I4 W2 i3 l" O
  1087. ;==============================
    3 }9 U/ \) C3 ?  P( N9 U9 [
  1088. Show_Music_Text;显示静态文本" y0 `7 n' c6 `1 _4 [- s
  1089. LDX #$00
    0 Y3 r6 C: [7 {" y! Z
  1090. Show_Music_Text_Set
    6 W4 z; s* f$ c% q1 H
  1091. LDA Static_Text_Data,X
    8 e9 N: i  K4 t6 D  n( w1 Z+ t
  1092. STA Data_L
    # ?, G- e4 t4 T" F( o$ }
  1093. INX
    . L- u0 V$ Q& Q( y* d! r& @  \. M
  1094. LDA Static_Text_Data,X
    % x. ?% C( H1 R" ^% v
  1095. STA Data_H3 V( q7 K) ^, T; E# z$ V" C& X' o
  1096. INX
    5 {" f, j. A7 |- C& ~5 s- F( J4 x
  1097. LDY #$00/ J; Q" @3 z: }" d: E
  1098. LDA [Data_L],Y# `" Y' M% t& [' P8 g$ S
  1099. STA Data_Cnt
    & ?7 H2 `3 v/ t2 C  j4 f: V
  1100. DEX. c! `) h2 \: C# Q& @
  1101. DEX
    - ~; a: X3 t4 a$ \; r# l0 C
  1102. LDA Static_Text_Pos,X
    ( {, M& x' X2 J, {
  1103. STA PPU_ADDRESS
    % y  m" ]: j' s0 ~' Q  ?5 r8 G
  1104. INX
    ' P9 U: t: k8 y
  1105. LDA #$20
    0 b: ?6 S! A/ J5 Y7 e; y2 x
  1106. SEC
    * j4 V9 Y$ u9 f  w/ M$ z
  1107. SBC Data_Cnt& O- d/ P$ e* m( K! F
  1108. LSR A; p: }  t7 `0 w+ [* K5 Q
  1109. STA Data_Buf3 Z) o1 a8 i9 A$ \
  1110. LDA Static_Text_Pos,X, _1 @9 p5 O/ m% O, U
  1111. AND #$E0  Y  N1 R# d( r6 C
  1112. CLC
    $ [. i) O1 p1 {
  1113. ADC Data_Buf$ q7 i  t. C* M
  1114. STA PPU_ADDRESS% ~' ^' S) W/ @7 J" N2 I
  1115. INX
    ( d+ R: V* }/ q2 o- w! q6 R) A
  1116. Show_Music_Text_Set_Write3 z8 D1 ?: b# n" `
  1117. INY
      a, j# |: [* t. {/ M6 P! V4 N
  1118. LDA [Data_L],Y0 W2 d1 j$ v+ R
  1119. STA PPU_DATA
    % u1 ^& m) I0 p8 d: D$ Y
  1120. DEC Data_Cnt1 U/ E. n6 i. L7 Y1 |
  1121. BNE Show_Music_Text_Set_Write
    3 K1 q) [/ t: ~9 O$ }! G
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    4 V" h8 C3 h; O( O9 n8 {
  1123. BCC Show_Music_Text_Set$ K/ w6 s- T; M: N6 ~6 k# t  m
  1124. RTS, e% p8 x$ l  Y8 h0 W
  1125. 0 A4 G  o# e1 D' L5 O) l. ]
  1126. ;==============================
    ) w7 B4 a' V( A) x
  1127. .IF Track_Name_Pos;显示曲目信息# M  S: C% N" n5 E
  1128. Show_Track_Info
    7 `: h* ]3 N7 @0 F3 a
  1129. INC Show_Track_Name: r: n& u2 R* d; U5 g4 ?0 }
  1130. Show_Track_Info_Clear' H2 b4 S; Z) b# i
  1131. LDX PPU_Cur6 T' [0 h  M. t) a
  1132. LDA #Mode_Clear
    ( T2 i, Z7 k0 j: S$ S
  1133. STA PPU_Addr,X
    ; Y( o$ ?! X9 R8 J' {+ B2 P/ X
  1134. INX
    0 @) H$ V. M5 G0 ^9 Y* X& a# _1 P

  1135. 6 d( @, c5 y+ M7 a6 I
  1136. LDA Music_Last  [6 B, f- N& k
  1137. JSR Show_Get_Track_Name_Center_Pos: q5 A. u. P9 \! U
  1138. Show_Track_Info_Write_Cur  |' }" H  K! }3 \1 [: a) M
  1139. LDA #Mode_CntLine
    # D- I7 U# b; b/ I' }2 Z' L
  1140. STA PPU_Addr,X/ e) E( o) q& j' b5 F5 r
  1141. INX
    % x% ]/ T- I, a* H' @8 [( o  h0 N

  1142. $ W" u/ D7 ~( ]# L/ e7 i. |
  1143. LDA Music_Cur
      Q0 H5 L6 x; `) x9 g
  1144. JSR Show_Get_Track_Name_Center_Pos
    - ?2 f/ x( Q, u

  1145. ; z$ `+ e( H$ L5 Y3 e' A% ^
  1146. Show_Track_Info_Write_Cur_Data% k- E( P+ U3 m8 N1 i& a2 o' `
  1147. INY
    # _  k1 d, j$ m1 D" X4 X! V# A
  1148. LDA [Data_L],Y
    ( L2 ]2 ]9 @# Z2 T
  1149. STA PPU_Addr,X
    & \  q( T5 b1 [! b
  1150. INX) l$ I) \" f3 B6 Q
  1151. DEC Data_Cnt
    6 P# @& p. e, m$ l. |
  1152. BNE Show_Track_Info_Write_Cur_Data' W9 j; Q) D. z+ m; U; g1 B
  1153. Show_Track_Info_End
    7 l2 }% l4 {3 U7 Q
  1154. STX PPU_Cur) F' P& ?5 m, y
  1155. RTS0 W+ J  W. C% d6 ~
  1156. 6 M* y' v- w( j* w4 U$ O) M
  1157. ;==============================
    0 V: w, ]3 E7 Q5 T& l
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    : S" y2 T% K8 M0 t8 q# b
  1159. ASL A# f) S, Z! K2 I3 B
  1160. TAY4 C6 z5 y, ]0 b9 Y
  1161. LDA Track_Name_Addr,Y4 e% z" v) P4 z
  1162. STA Data_L
    + j( }1 x' b) z( i( v1 C
  1163. INY
    ! q# J! r% f; g+ ^. F$ ?
  1164. LDA Track_Name_Addr,Y
    3 i! [5 R6 R; B/ `; s5 y- E- w
  1165. STA Data_H
    9 a- t$ x  I) g: Y# |$ b
  1166. LDY #$00
    & g2 x1 d& {  }1 l  H% M6 A
  1167. LDA [Data_L],Y
    - }4 W6 E! ?: I2 {, f% t4 G
  1168. STA Data_Cnt/ |4 u" f( e' L2 g1 V
  1169. LDA #$20* A6 a/ E) G# _0 A1 H# f1 B
  1170. SEC
    : N/ p1 H8 _: b. V5 B; w
  1171. SBC Data_Cnt( T& x! n  p4 P2 x
  1172. LSR A
    # a9 Y. g0 I1 Q* X( U# ^3 `- d3 ~
  1173. STA Data_Buf
    + \, d) I' x$ m  H
  1174. LDA #HIGH(Track_Name_Pos)
    ; s1 V4 ~& R: g4 m3 x) R/ i
  1175. STA PPU_Addr,X
    $ q" ^7 U; ]6 ?' n9 |/ T/ w
  1176. INX3 O0 L+ [) T5 e" N6 X! C
  1177. LDA #LOW(Track_Name_Pos)
    0 N8 K& j: X; u, ^7 z6 {7 |' I0 k
  1178. AND #$E0
    " r2 r) H0 ?0 G& S$ U4 i
  1179. CLC
    - C0 M2 Z% X9 e; {0 q+ x7 B5 z
  1180. ADC Data_Buf' r4 d; \4 v) Q+ F) U4 H
  1181. STA PPU_Addr,X: g. x2 a$ [& \' O8 M  P; x/ u
  1182. INX0 M7 Q. ^2 `+ \9 ~" p' T
  1183. LDA Data_Cnt
    $ Z5 H1 Z: w- C# Y; d& p
  1184. STA PPU_Addr,X
    5 \. V  K6 h, p$ T# O
  1185. INX4 M) \) G7 ?! Q# ~- V  Z
  1186. Show_Get_Pos_Center_End: T" q. g* y1 W4 P2 n* u- ~
  1187. RTS
    2 Y) u% W! a) p- i
  1188. .ENDIF# D. d9 d# [4 s$ V; F
  1189. 0 S4 a- A9 Z8 d7 D, `
  1190. ;------------------------------
    9 Z) l; F" L5 n2 V9 @
  1191. ;命名表数据
    + ~$ o% n: h# v. R. ^: R
  1192. Palette_Attributes8 Q* [$ h. m2 N+ y. N' v$ W) U6 M
  1193. .IF SOUND_BAR_SHOW_ENABLE
    + u; o& ]7 ~$ E+ y( U
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    1 F" F9 B  S. Z: ^7 F
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA7 u6 @* y$ U8 B; A9 W
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    - u5 \! j: F; R
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " a( g; u6 ]; z
  1198. .ELSE
    9 c. }7 p* [0 v6 y# Z. @
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    2 K0 Q$ `! E0 h0 U+ [0 q; a, i" I
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    # s4 ^% _. |- M5 h: [/ G$ \& _' w% h
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    3 n+ n2 r$ d% z) L' S
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55& I7 o6 ]+ h2 ^& }  i. Q: }3 o
  1203. .ENDIF" S! Y$ V7 q/ \

  1204.   R8 H0 a5 B0 A5 }& o- i, q1 o; \' j
  1205. ;------------------------------
      w, h% Z( R8 k& n
  1206. ;调色板数据0 \7 W1 \; \3 c  O( @& m  H
  1207. Palette_Data
    ' L5 ^: Z9 `9 v: K) Q* e* e! s* }
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F# D' s" |* {6 j2 b
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F2 J3 ~6 C/ }3 J
  1210.   d/ H+ }0 }5 C: ~9 P0 b
  1211. ;------------------------------
    " V. B7 C. |4 }6 [8 J
  1212. Static_Text_Data
    ( s* ^$ X; f" |8 ^) Q4 T
  1213. .WORD Static_Text_Title_Data' T  l$ m  ^5 u. c
  1214. .WORD Static_Text_Author_Data
    / g3 |7 [3 |) V+ C' N
  1215. .WORD Static_Text_Date_Data" _2 C0 X# [7 r" w7 }
  1216. Static_Text_Data_End
    ' ~0 P% D1 J+ D6 i9 p: P
  1217. 2 J# n# t1 @+ e) K/ }: [+ @
  1218. ;------------------------------
    + R* b' G& S# e+ c' R
  1219. Static_Text_Pos
    0 @% g5 m1 ?! ?0 T( q9 S# q8 o
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)7 N4 ^5 N1 ^2 z- Q
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
      G& l' R+ k0 w0 W; ^
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    2 C9 q$ T8 b0 |0 C9 k+ C; ]/ u
  1223. Static_Text_Pos_End
    : C4 w9 p. f; a4 ]  \, m

  1224. $ D. t/ I% a& V' I# z
  1225. ;------------------------------5 t8 Y  @0 [% m9 B  @5 O) g
  1226. Music_State_Stop
    6 ^% I- D) S0 X
  1227. .IF SOUND_BAR_SHOW_ENABLE) v3 p: ~0 V. Z7 F
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$005 k% p1 [/ h' c( J4 r) n+ K
  1229. ELSE
    / @, ^# R- o! |6 v: N
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    * u/ _! _: o% c3 N2 {
  1231. .ENDIF  X, F6 n! b( r  i/ B, X7 X' f
  1232. Music_State_Play' q) r9 C- a' @$ h% T6 F
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    * y1 E" b( D1 Y8 X! b
  1234. - ]7 P2 W4 V( x
  1235. ;------------------------------1 ?, ^3 X& G0 d. ]2 @. F
  1236. Sound_Bar_Text_Data;声音类型文本9 Q9 D/ f) Y$ F( `
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    $ l! J4 \% v( G4 y
  1238. .DB "SQ1-",$FF
    6 t; a+ Y& j# o$ c2 D# W' v' ~
  1239. .DB $FE,"SQ2-",$FF2 O$ l+ E" `3 S6 \* ^
  1240. .DB $FE,"TRI-",$FF+ ~9 }8 w4 H5 m# h8 d& Y/ H+ A: s
  1241. .DB $FE,"NOI-",$FF( k5 z4 U& C' n0 v# q
  1242. .DB $FE,"DMC-",$FF,$00
    / d! \  _8 V1 y, m; M: z
  1243. : P4 _: h2 c, O& H, V( ~: f
  1244. .IF Track_Name_Pos0 Y9 S' `' a8 i, e' s* F: s6 h4 V
  1245. ;------------------------------4 P5 J& g6 \% ~7 s0 T
  1246. Track_Name_Addr;曲目名地址索引
    / Q% q& ^0 x9 [$ z2 W0 c6 e8 k
  1247. .WORD Trackr_01$ ]8 F+ U# ?- i7 N
  1248. .WORD Trackr_02
    6 S* Z- a( b/ ?
  1249. .WORD Trackr_034 x( J' F. h: W
  1250. .WORD Trackr_04
    7 m: E( M9 \: m5 x
  1251. .WORD Trackr_05
    " g( v9 x+ @. S4 R) ~+ j: l
  1252. .WORD Trackr_06
    . H3 v/ ^5 m: S9 D* }
  1253. .WORD Trackr_07, `, r# _/ {+ G4 ^. e- _& H
  1254. .WORD Trackr_08
    - a# ?3 O& A9 m# I' A
  1255. .WORD Trackr_09
    , ]; @0 J7 l1 U+ G- K
  1256. .WORD Trackr_10  l) h: l; ^  m: U6 i  w! }% t9 g% L
  1257. .WORD Trackr_11
    : o: j5 k6 M) w5 B$ Y
  1258. .WORD Trackr_120 B+ z/ p. B4 O1 g
  1259. .WORD Trackr_13
    1 c$ M2 G- E+ S. K
  1260. .WORD Trackr_14. h) d, Q. p- Y8 C3 Y+ B0 |
  1261. .WORD Trackr_15
    ! V/ Q4 W/ W( J( A/ t& [/ A6 T
  1262. .WORD Trackr_16; A4 z" B6 _' W6 |! V% Z, l: U
  1263. .WORD Trackr_17( p; R9 g& b& b4 f8 l
  1264. .WORD Trackr_18
    4 [: y) O9 }1 v# ?0 Y' D
  1265. .WORD Trackr_19. a1 ~4 r# `# Z
  1266. .WORD Trackr_20
    % f. t1 V" O$ g! D" ~- T
  1267. .WORD Trackr_21
    ! D6 s- Z" I1 g
  1268. .WORD Trackr_22
    $ `: V! t3 I2 w/ R  N
  1269. .WORD Trackr_23
    " y- @* F! M* \, F' Z, @+ Z
  1270. .WORD Trackr_24
    9 M3 P1 p+ e" v1 p. \+ \
  1271. .WORD Trackr_25
    - i4 p) |  A( o3 Y8 H  l% F
  1272. .WORD Trackr_26
    ' T' O( ]! p5 x- x. U
  1273. .WORD Trackr_271 H% `& m5 o1 |
  1274. .WORD Trackr_28. A2 G* X" C  e, V
  1275. .WORD Trackr_29
    2 u% K0 @3 i8 ]
  1276. .WORD Trackr_30, d2 I+ g& |/ C9 w0 \
  1277. .WORD Trackr_31! h8 M! `& a) y  o/ A5 b, j6 l1 F
  1278. .WORD Trackr_32
    7 E& J8 B  j  c0 n9 P1 j, A; h
  1279. .WORD Trackr_333 v3 x" t) M1 x, o5 {) P% j
  1280. .WORD Trackr_34
    7 v' G/ m3 x, g& v" D, o: R, E
  1281. .WORD Trackr_35
    . W7 ]( U% J0 b4 B4 Q
  1282. .WORD Trackr_36
    " f5 q/ U2 `! `1 Q. ~5 G8 x
  1283. .WORD Trackr_37
    - v+ B$ Y+ Q! P  ?) h
  1284. .WORD Trackr_389 }7 T9 T- B6 f3 f: Q
  1285. .WORD Trackr_39  |9 i' C$ f  L. {
  1286. ' v6 S, A: V8 z; t, q" g
  1287. ;------------------------------1 _% V" i1 D$ T  I" B9 h
  1288. Trackr_Name_Data
    ) e2 x! ?+ w# H# i- u
  1289. Trackr_01 .DB $05,"BGM 1"
    ' y6 Z$ w) z& E
  1290. Trackr_02 .DB $05,"BGM 2"0 J6 F( z3 }. s- z. [0 {
  1291. Trackr_03 .DB $05,"BGM 3"" C3 l9 `8 v- r" `8 ^; d' t
  1292. Trackr_04 .DB $05,"BGM 4"
    7 ?7 |" ]4 ^+ i7 [
  1293. Trackr_05 .DB $05,"BGM 5"5 \* l/ _. C" d
  1294. Trackr_06 .DB $05,"BGM 6"
    " s5 o; y4 ^1 E$ K3 O; V4 |
  1295. Trackr_07 .DB $05,"BGM 7"
    3 B: z7 f! n, r8 i* j5 _
  1296. Trackr_08 .DB $05,"GREAT"" X' L, g. Z) g/ W, Z' p
  1297. Trackr_09 .DB $08,"BOSS BOM"
    % K7 |# a/ v; D
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    " x& U! d* H3 S! g) ^1 W
  1299. Trackr_11 .DB $07,"P CLEAR"$ x8 H3 ?0 P+ o4 c: Q, j: l' M: _; M
  1300. Trackr_12 .DB $07,"A CLEAR"
    * T1 u: i4 v9 H# e; J. x3 z
  1301. Trackr_13 .DB $04,"OVER"$ |7 M4 o# u2 d/ V( b' S  {! D% N1 u
  1302. Trackr_14 .DB $06,"ENDING"1 J8 U- M/ t1 ]' i" S! i
  1303. Trackr_15 .DB $04,"SUTA"
    / l) B& v& y: G+ K& b6 d2 i' j2 s
  1304. Trackr_16 .DB $07,"THUNDER"* @' n* s% I- r+ X% N
  1305. Trackr_17 .DB $04,"SHOT"
    8 I4 s$ ]9 a- E3 E; }
  1306. Trackr_18 .DB $05,"LASER"% d. ~* n- |; V4 {* t3 S0 i
  1307. Trackr_19 .DB $06,"SPREAD"
    7 i  |5 w; E6 T; W" q! V5 e2 ^% k
  1308. Trackr_20 .DB $04,"FIRE"  B9 ~7 y# S3 J7 j4 r5 @+ L
  1309. Trackr_21 .DB $06,"B SHOT"
    9 C9 s! m4 G# s) n3 Q
  1310. Trackr_22 .DB $08,"T DAMEGE"9 i1 m! D  R  |+ ]
  1311. Trackr_23 .DB $07,"HARETSU"
    9 f& \2 I! P* R/ g
  1312. Trackr_24 .DB $05,"T OUT"
    . e3 I) g" Y$ u3 h
  1313. Trackr_25 .DB $05,"Z OUT", @0 O+ |) o4 {+ [6 A' Q& O
  1314. Trackr_26 .DB $05,"A OUT"8 H' _& R8 q/ Y! B0 k3 ~: {
  1315. Trackr_27 .DB $04,"ROLL"
    . w, b/ a2 B+ T9 r) \* ]2 S% l4 c
  1316. Trackr_28 .DB $06,"APPEAR"
    * p& o1 S9 _: s* w" S
  1317. Trackr_29 .DB $05,"POWER"
    ) T3 {) L: T/ Z9 \! \  y: j
  1318. Trackr_30 .DB $07,"BOKK BK"
    ( @+ b; Z5 N: Q$ i8 a5 ]0 d9 P
  1319. Trackr_31 .DB $08,"BAKUHA 1"9 u6 D1 d! L$ D+ F+ ^
  1320. Trackr_32 .DB $08,"BAKUHA 2"  K6 o2 ?. K% G/ z
  1321. Trackr_33 .DB $05,"ARUKU"
    7 y( f9 r* v- p
  1322. Trackr_34 .DB $06,"JIWARE"
    + v+ R; k. `  E; m, ~
  1323. Trackr_35 .DB $05,"SILEN"
    / @3 A! ]! g$ B* z) L6 Q
  1324. Trackr_36 .DB $05,"P 1UP"/ u6 Y1 o# d( W! A; f7 O0 F, y
  1325. Trackr_37 .DB $05,"P OUT"
    ) B( `0 S2 ~) @& A; P7 y
  1326. Trackr_38 .DB $05,"B OUT"
    ( H+ @0 X; q- E
  1327. Trackr_39 .DB $05,"PAUSE"- {' f; {8 @8 _0 j' x! J" V4 `
  1328. $ t$ b' \) t, F; Y) f8 p
  1329. .ENDIF
    9 B( @4 r, F" p; F
  1330. ' s6 c% w$ ]: E  ~/ E: ~
  1331. ;------------------------------: q, Z  c1 @: K! B; U- p% c1 g8 {/ ^
  1332. Static_Text_Title_Data;静态文本数据4 P9 g% Z, O. X2 w& W
  1333. .DB 12
    / }, x4 Q8 J+ d  b
  1334. .DB "SUPER CONTRA"
    " V' r* {* p, b" e4 l; Z% p
  1335. Static_Text_Author_Data5 O. v6 r$ Y. R( {
  1336. .DB 23
    2 b" }. |  W3 F1 e5 E7 l& ~
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    / Q+ a/ f- R! y( c( R2 S6 [
  1338. Static_Text_Date_Data+ w6 S# Q# S% C* ?' k
  1339. .DB 10
    % \  i/ Q0 G+ ~8 o/ y
  1340. .DB "2023.07.11"1 f3 ?# V4 ~; I( d, y9 `

  1341. ) i$ W* `& ?  d2 L: w
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    3 u% H& {0 Z" L7 Z  n* m
  1343. .ORG RESET_ADDR
    3 k* [. G: L4 p# t* F% K5 v
  1344.   C* N% H6 s6 z% r: y) q

  1345. , S; f0 ~2 m0 A: N: J- g
  1346. ;==================================================
    : o* L# F) t2 W: S# g7 V; T
  1347. ;切到主程序bank
    2 i6 k6 C5 C! q
  1348. SwitchMainBank8 r& n2 T* B. q' w4 A* Z+ J' i
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    : x" q) b/ [/ x7 J& i1 q
  1350. JSR SwitchBank8000
    ; a' E! l! B8 O6 H8 R( U
  1351. RTS: n9 r& s$ D) g' y

  1352. , j5 O2 A9 ^6 f! |7 U3 V
  1353. ;==================================================; D2 H% f! c  `
  1354. SwitchBank8000;切换bank到8000-9FFF
    ( h8 a: d) J$ z7 l0 D- S
  1355. PHA
    - Z/ A9 j7 v4 \
  1356. LDA #$06
    . L% D  L2 x0 x' o# C. g
  1357. STA MMC3_BANK_CTRL. h" T' ~$ C2 M8 W2 Q& e
  1358. PLA
    , _6 Q# i9 ^7 J$ W
  1359. STA MMC3_BANK_DATA6 }1 _7 |/ @  s* Q  q
  1360. RTS
    % H6 V  p# t( [( {% @9 h
  1361. % H7 i) Z  y  ^% j: y/ O8 Y
  1362. ;==================================================- N. W% f" Z* Q  W0 o" ]! W! D2 e
  1363. SwitchBankA000;切换bank到A000-BFFF4 Z! w9 k2 C! b6 m4 S
  1364. PHA
    1 Y+ ?" K. d  d8 M% T
  1365. LDA #$07
    ( A) @' f/ ~( b' e1 i+ `- n
  1366. STA MMC3_BANK_CTRL4 O7 B* E2 a. o, z
  1367. PLA3 ^+ p3 T1 ?8 S. }9 n) I
  1368. STA MMC3_BANK_DATA
      S) }% u" Q8 q- R1 }/ P
  1369. RTS
    % d8 E) X+ U, S& q2 J  B# U( L, E. I2 C
  1370.   e8 L$ |  R, N, ?7 F
  1371. ;==================================================
    - @8 A% E% E: E
  1372. Sund_Bank_Init;音乐bamk初始化2 {3 D' S" W2 W. v: l' j
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 `7 E9 A3 W  t& W
  1374. STA Music_Bank_8000- d+ T2 T: X/ k1 o2 T
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    & r5 t. K$ U- h9 ]6 _
  1376. STA Music_Bank_A000" k+ c6 [- e6 H, Z+ j" ?
  1377. RTS) d# _0 s1 r* T1 h$ E; ]9 q: r
  1378. 8 `4 Q- w" l5 M) L3 g+ j
  1379. ;==================================================5 q& \' i/ @& d( d8 `
  1380. Sund_Bank_Set;切换音乐bank& s  p" a- u7 a' ^$ S/ b. z
  1381. LDA Music_Bank_8000
    % U1 A, |  R  h
  1382. JSR SwitchBank80002 d) d3 I. P: K5 B
  1383. LDA Music_Bank_A000  p. a1 r" }. S/ Q5 |, z
  1384. JSR SwitchBankA000% n. u5 r; J* I) [! ]1 l# Y# j3 ]: Y
  1385. RTS8 m7 G9 [: C( D: W8 L  {2 Q: ]
  1386. 6 u; Z" x1 Q6 `' J% V, t
  1387. ;==================================================. {& n1 j, m9 x
  1388. Sound_Init;音乐初始化
    6 O9 C7 {; F. w) w; s* ^
  1389. PHA* @. i' F7 r: ]9 W. ^0 d- {
  1390. JSR Sund_Bank_Set4 u$ ^8 o1 y8 D
  1391. PLA
    7 v8 r# Q  l+ G0 p9 P
  1392. JSR Music_Init_Addr5 e# l% v# R& F% M! |6 O+ H
  1393. JSR SwitchMainBank; R: y, j- U- Z( j8 j9 \  |

  1394. - ^( Y  W+ X# s! Z4 _
  1395. JSR Music_Bar_ReSet
    7 v. ^6 [) T% C, X# Y3 P
  1396. JSR Time_ReSet6 Y. W1 ~/ a' o3 s! S* v
  1397. LDA #$00- V  [" _' z2 F& _5 D
  1398. STA Music_State6 l. Q$ g  V1 k
  1399. JSR Music_Stata_Show5 ^3 _, @. m/ |8 q
  1400. .IF Track_Name_Pos% z9 W6 d% F' s+ C9 H6 J* L, \
  1401. JSR Show_Track_Info5 u  U/ l3 p. w0 g/ G: `
  1402. .ENDIF! n( A4 }; G8 K; J

  1403. 0 d' Y) n8 w* l% ^
  1404. RTS
    1 V& v; W2 y9 M1 ^1 _
  1405. 5 `) m4 m! l/ }
  1406. ;==================================================6 e) L7 q" z8 {* z. W1 v* s) `5 j
  1407. Sound_Play;音乐播放' S& ?5 F) A) H: a& ]; V- X
  1408. PHA. d6 T. ~) x& ?2 O. y; V9 R
  1409. JSR Sund_Bank_Set
    + t& v5 ?0 x) d8 A$ E4 H1 M0 Z3 w
  1410. PLA, f7 v6 ]0 |' n/ e5 k, r
  1411. LDA Music_State
    / K, p/ Q7 H# d  ]( `! g7 Q
  1412. BNE Sound_Play_End6 c. X4 o2 E/ F0 g
  1413. JSR Music_Play_Addr5 w9 U% q3 o' ?
  1414. Sound_Play_End6 E, K7 f; O3 p5 e( x
  1415. JSR SwitchMainBank
    . F6 S8 ?" y8 l
  1416. RTS
    4 K+ ^/ ~  ?% P- P8 p& ^5 o
  1417. 4 ^$ x0 H# ~( F9 G: n' n% a3 m+ Y( A
  1418. ;==================================================
    ! O4 V  G/ F# U# J) f! K3 Z* |$ w
  1419. .IF Music_Reset_Addr$ L0 G! E' c$ q: w. |1 |6 m3 @
  1420. Sound_Reset;音乐重设(如果有的话)7 |8 ?" Z" l$ z6 X$ X" T
  1421. JSR Sund_Bank_Set/ d. e- O- M# k; N5 \2 \
  1422. JSR Music_Reset_Addr
    & J& N) k  M! {
  1423. JSR SwitchMainBank
    & d2 E+ Z5 N# \$ D  I9 s1 f' d
  1424. RTS- U2 z2 @# V1 {" K7 Z
  1425. .ENDIF
    : v' z; j' L' O* R: R& v% Z+ L

  1426. ; ^# q- Z7 c( G9 C
  1427. ;==================================================' g4 k. T) D# g# d
  1428. MainLoop;死循环/ E! a# s$ u% [% s( Q
  1429. JMP MainLoop+ ?( |5 y6 R# I8 k

  1430. 0 |' V3 S" g, {- K/ j6 {$ H! ^
  1431. ;==================================================
    3 [8 Z! n6 K( \1 A+ |% `
  1432. NmiProgram;Nmi中断处理0 e: ^6 d0 K$ J7 f* E9 C
  1433. PHA, P' `) {& {% m* ^
  1434. TXA1 p- d* z" g  Y8 i
  1435. PHA
    " f% q/ @( B; \/ L- y7 C* R, p3 e
  1436. TYA
    & ^  k- c0 a: D& |
  1437. PHA
    6 y/ |- K3 d/ ?" F, X4 @
  1438. 1 v& x; E6 }5 P3 h
  1439. LDA PPU_STATUS$ |. f* }5 {2 _! U. ?
  1440. LDA #$009 {0 Y3 s$ W7 m1 X( O7 a! T
  1441. STA PPU_CTRL/ _- @$ X, s( B, p  [% c5 ?
  1442. 8 l2 z4 w" ^/ ~5 Z
  1443. ;切换主程序bank- K) B. n0 @3 N4 O: f. m
  1444. JSR SwitchMainBank! r. B5 ]3 N* F

  1445. 5 ]  }; m4 z( w' \. w
  1446. ;NMI处理
    " n8 T4 H3 o' b6 T
  1447. JSR NmiProgramProcess& I/ ]4 B" h3 Q2 o- ]- w

  1448. 9 ^* w, k, g- z0 X9 d
  1449. Nmi_Proc_End
    1 u& ~8 f4 {) [4 \0 V+ n
  1450. PLA
    ( k9 g, N, j; _
  1451. TAY
    ! G1 C' U  _0 f5 x
  1452. PLA
    , w% r& y) z& J% K
  1453. TAX; u* A- ~$ I% m' Y4 Q% h! Q* `
  1454. PLA& y7 S1 V$ ~1 S  Z/ W

  1455. # y* s  S7 X+ E* x! P
  1456. RTI
    # C( y# [; K+ r0 i+ r* Z
  1457. & D; t. P$ C2 x0 N' [% x
  1458. ;==================================================; b* Y6 M/ `. m  T7 b
  1459. ResetProgram;重置中断处理
    8 E5 M9 I6 n; K. h
  1460. SEI
    ) ^& D  [* K4 a& H, v! E8 v
  1461. CLD) l! D5 o1 m$ R5 ^# g' Y
  1462. LDA #$00+ h! U' O0 a) V1 |
  1463. STA PPU_CTRL7 a, L3 l1 l; B1 P  l; q5 O
  1464. STA PPU_MASK9 }, u  w  `: K! x  h( C
  1465. & t% _5 p) }" ]4 a* v$ \6 i
  1466. JSR SwitchMainBank
    ) C9 M$ [2 N4 W( x8 X
  1467. JMP ProgramBegin
    ) b. v5 n1 W4 e! f8 `; s
  1468. & P- s4 R( J2 X8 P8 W6 A
  1469. ;==================================================6 \. F2 V- c! e8 p0 Q) r+ i3 G) K
  1470. IrqProgram;Irq中断处理# L+ V& c9 }9 V/ F0 b
  1471. RTI
      o  o% y" v7 C0 b6 s" c, _

  1472. ( c; Q% B" R' t
  1473. .IF SOUND_BAR_SHOW_ENABLE2 X9 z1 i4 a# ~4 y) t/ G( V
  1474. .ORG $FF80
    # K# o' a$ S" o9 e9 ~& U/ o
  1475. STA $4000,X- S2 ]/ p! _0 f/ o2 o
  1476. STA Sound_Bar + $00,X* R. K, N( ?5 A
  1477. RTS4 u$ t, |+ \, i; J. A% f; G

  1478. 4 \  v; K  W3 K3 C& @! _0 |! j
  1479. .ORG $FF88
    2 S' D7 Y* A8 c5 k! W3 s9 J
  1480. STA $4000,Y
    8 Q" j: A4 ^& @! m
  1481. STA Sound_Bar + $00,Y
    4 s: r) I7 z& E% r) G7 }
  1482. RTS7 m0 F, X1 T8 ]2 V& F

  1483. * \/ b& ?  G' G' ?/ ?( W
  1484. .ORG $FF90. w/ R( v* t, `. \1 a! B
  1485. STA $4004,X9 m1 k3 ~6 g) R6 [* Z: c1 k
  1486. STA Sound_Bar + $04,X" y( q% X8 i+ J4 K
  1487. RTS
    5 N/ Z; E+ f. z0 g4 I

  1488. ) H# Q% B( A& ?/ R6 v- g5 r' I( Y' _" u
  1489. .ORG $FF98* R3 }1 p4 _8 M7 ?- Q7 u
  1490. STA $4004,Y) J8 @/ M# v, F4 l& D
  1491. STA Sound_Bar + $04,Y
    . k: b# X) }7 s7 O. C% l9 [
  1492. RTS$ T+ v$ f- |( ]( D

  1493. & q  f. i( G' c' U
  1494. .ORG $FFA0' M4 D, H7 S. w& H4 A( L# z
  1495. STA $4008,X
    9 E: r. g1 D6 K" c5 F; w+ {
  1496. STA Sound_Bar + $08,X
    ( [# X1 I, v9 ]/ J+ N2 c
  1497. RTS- l9 a4 x/ o- U+ s

  1498. , w0 o1 s# e& t5 k4 r! J
  1499. .ORG $FFA89 t2 \  V. P5 u' n1 b& Q
  1500. STA $4008,Y
    7 D6 P  X  h! y, z8 U# G. u
  1501. STA Sound_Bar + $08,Y
    , j6 A5 \; b0 z6 O# m. [, k
  1502. RTS
    ! }2 V1 L/ i1 X6 O, M

  1503. ' d: k$ f$ {3 ?/ I0 j8 E
  1504. .ORG $FFB0
    ) G( E# z& O" U) m
  1505. STA $400C,X5 _6 ~6 u% f6 x; H
  1506. STA Sound_Bar + $0C,X
    ) }9 Q  a5 A/ `3 ]/ P4 ]
  1507. RTS) [8 ~& y% A; j5 D/ Z5 Y' q

  1508. 9 i4 r  }; p- w7 o2 F; E) d
  1509. .ORG $FFB8+ n& l  V7 F. S. ?
  1510. STA $400C,Y
    ; l$ x# a! S2 C5 B# Z. ^1 z
  1511. STA Sound_Bar + $0C,Y
    / v* ?( M6 `! y. t  R2 ?9 s
  1512. RTS
    ) i* B/ u" A  v) J: H8 X+ c' R1 ], K

  1513. % a- Y0 F) T+ E( f$ _
  1514. .ORG $FFC0
    8 x' y8 E2 B$ p. i, ?
  1515. STA $4000
    9 N+ l/ Z0 K% K. n
  1516. STA Sound_Bar + $00
    7 J0 H; t& |; L: g' f6 H; d/ c
  1517. RTS
    % v6 c, n5 W% X, g! w$ G) r

  1518. 8 v1 ^8 ^# Z9 U6 }. j: d+ R
  1519. .ORG $FFC8
    4 H$ ]9 q6 |0 n7 _( \7 F# t9 f& o$ f
  1520. STA $4004+ d% a$ X3 ^5 m$ U% A' T
  1521. STA Sound_Bar + $04
    3 |9 y2 a' k* ~/ B* J
  1522. RTS
    6 ~1 ^" P. F# Z  o7 u( N

  1523. ! \/ j- x0 K. Z/ ?2 H; T
  1524. .ORG $FFD0
    % i- L/ [* m! [. |0 I2 j
  1525. STA $4008
    . E# l, z# @2 v+ i' w9 [' V
  1526. STA Sound_Bar + $081 O$ _' _# B' U9 Y1 a; w
  1527. RTS
    2 q6 ?4 K* a3 d0 C8 x: J
  1528. 2 z- n9 v# u; l$ {
  1529. .ORG $FFD82 }# m: `, G* I
  1530. STA $400C% d2 Y  t5 h0 Y; [/ j6 }8 H
  1531. STA Sound_Bar + $0C
    6 v' O' x1 s# `. U
  1532. RTS- I/ H$ E. `+ u& }" c/ j6 P

  1533. $ @( M! B! q# y
  1534. .ENDIF
    2 F7 S2 {* V  N/ i% Q5 ]
  1535. ! R& l) B" _5 j; P& t% r/ X9 H3 K
  1536. .ORG $FFFA
    / V; U( u$ ~" B+ ], Q
  1537. .WORD NmiProgram
    # d; S/ `& O( k/ X) F
  1538. .WORD ResetProgram
    9 Z9 f1 L* \& z. i# _% ~- E1 W+ {' h
  1539. .WORD IrqProgram
复制代码

) ?3 @& f/ K8 D
+ F3 H8 x+ y3 v  H
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1159 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3145 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-24 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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