设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 % E. B: G' v- b/ s, q9 l( O
3 W$ A3 X/ L4 C8 h) c. e# i  w
1.魂斗罗
) \8 P. V6 W3 F, I2.超级魂斗罗7 D' p0 E( u7 R9 L6 b9 z# Y
3.赤影战士
' I4 h% W" n: p8 I4.忍者龙剑传2
4 q. z- O) }* i6 _$ T
, P$ g; s2 o: M( W" @3 T* S
3 R, M$ x& [5 ?6 }- h% \0 R
7 M4 n1 L( u4 D' K" F* d$ V! |: d1 V, `( T9 W6 q5 R, _8 D7 q6 n
源码:% C4 R* c% X7 c
  1. ;[FC音乐][播放器模板]& s8 l* O8 {7 F) k) @
  2. ;FlameCyclone 202307107 G! |+ n* s2 v' l4 Z3 e# d/ e
  3. 6 H7 i( g  F7 e7 W. q5 J
  4. ;文件头
    $ n" S* \3 J5 n$ H5 K: `+ g; Z
  5. ;======================================================================
    ; M* s* g) i! V
  6. .INESPRG 4                                              ;16KB PRG 数量; Z- m. U5 t( N/ S6 e: A
  7. .INESCHR 0                                               ;8KB CHR 数量
    5 z2 Q; x, N, Q+ o9 A: \
  8. .INESMAP 4                                                   ;mapper 4
    ; y+ n  `% @6 l9 `, _
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    7 @) T5 N# X& z  T0 L

  10. ) b( ~8 I  g' V1 H6 F
  11. ;==================================================2 A- o9 M! o' e$ W/ U
  12. SOUND_BAR_SHOW_ENABLE       = 1! t/ l2 f2 V( [
  13. ;==================================================  j, y. y- Y/ h5 }) s/ d
  14. BANK_DATA_MASK              = $07
    ) q2 L1 N: d% T/ P# j: g7 o% l  `% @
  15. ;==================================================
    ! Y/ v1 U: F; }% n* e
  16. SOUND_DATA_BANK_0           = $00
    % R; p) K5 X' p) e
  17. SOUND_DATA_BANK_1           = $01
    / b, Q( e; {* g& X. E3 h# K
  18. SOUND_DATA_BANK_2           = $02, [+ ?0 T+ S4 k+ o) M* i" Z  J* Q, t
  19. SOUND_DATA_BANK_C000        = $06
    . U% H2 p( T0 x6 |' c3 U
  20. 7 }8 }# c4 `4 B/ X* `
  21. ;-------------------------------------------------
    # v/ A/ d! t; i; A! I, [: W
  22. CHR_DATA_BANK               = $04( Q: ?" k3 T9 W) G$ j
  23. CHR_DATA_ADDR               = $A000
    5 o) M4 [$ S$ U: F2 i
  24. ;-------------------------------------------------
    1 \1 T- H8 V5 ~  [9 ~% T" M
  25. PROGRAM_BANK                = $05
      G* a! v) l9 I+ S4 ?1 T% S
  26. PROGRAM_ADDR                = $8000# k" }: \: V! p% v+ o
  27. ;-------------------------------------------------
    # m3 U- I* N1 \. E2 o$ U2 T
  28. RESET_BANK                  = $07- X% w+ ^1 G. C/ y( Z$ H+ o
  29. RESET_ADDR                  = $FE00
    : e1 y1 l2 e/ V3 {6 y) o
  30. ;==================================================
    7 t4 I. o" q9 E( i, @
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址2 U+ S; n5 I. r, p; T4 [- D
  32. Music_Play_Addr             = $813C ;音乐播放地址2 |# e. q6 n# b& b; \' x
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址$ `; T! r) l% b
  34. ;==================================================+ R' E, `1 ?4 x/ W; ^( l
  35. Music_Song_Total            = 039  ;全部曲目总数
    ( S: V9 k3 x3 M* q7 X$ B( d
  36. Music_Start_Song            = 007  ;初始播放曲目+ q, T+ @1 T; Q/ B& ~8 |. o. B
  37. ;==================================================% O4 n1 |" ?) k2 ^1 ~' Z

  38. 0 F. ~5 z) a# s0 j1 s; f: z" A% J
  39. ;==================================================: V* m1 {, o1 O8 R8 ^9 i8 C$ {
  40. Title_Text_Pos      = $210D ;标题文本位置) L2 h; P2 Z; G2 h2 ~" \
  41. Author_Info_Pos     = $2284 ;作者文本位置
    . E7 V5 D+ C% k& R; W$ _4 w
  42. Date_Info_Pos       = $22CB ;日期文本位置
    + u: \1 b- N% S! D8 \; D$ _# c/ x
  43. ;------------------------------  o$ J  M9 q' r2 G
  44. ;------------------------------
    ( a* q5 n. x5 Q6 j/ Q" e) ^
  45. .IF SOUND_BAR_SHOW_ENABLE
    - j/ i' g+ y, Z8 x' C, Q
  46. Play_Index_Pos      = $21B3 ;当前曲目位置7 \4 ?  u# d" P, a8 d) i
  47. Play_Time_Pos       = $21F3 ;播放时间位置% J5 Y4 P2 [' ^: n) S
  48. Play_State_Pos      = $2233 ;播放状态位置
    $ [# z  Y) w9 z4 i
  49. .ELSE
    ! @# o2 w) v5 T: ]+ F( j
  50. 3 J3 ~" \. \  i! ~! i- z
  51. .IF Music_Song_Total > 994 p( E7 |0 Q- ~: K- h; Z
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    " N  I- m# h2 ]5 W: a/ x# M; x
  53. .ELSE
    , l! C3 y( |0 _0 X1 B2 F

  54. ! o! ^* s8 x: ?9 P1 j/ B9 u- e; q
  55. .IF Music_Song_Total > 9
    : h% A! I/ K: i
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    % |. g# p' q" R
  57. .ELSE
    7 T, b; i( d6 w% @7 m# \3 U8 `
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    " l- E5 p$ Z" f0 q+ i$ N5 z
  59. .ENDIF
    ) j% R9 d" I% s

  60. 4 o% B  J* Y2 F! ]/ t; C4 ?6 @
  61. .ENDIF
    ) l4 Z/ {" w3 R( f! U; G

  62. $ A+ j$ h9 X1 D% Z: N9 {5 s1 l

  63. 6 q# `7 d3 O& w. n6 K7 a# a2 ]
  64. Play_Time_Pos       = $21EC ;播放时间位置  M/ O) @! T" ]! x, ]
  65. Play_State_Pos      = $222C ;播放状态位置" A& i; k# f1 ?6 c6 \
  66. .ENDIF
    ) O) K; b. L- `" T1 ~9 [- R
  67. ;------------------------------0 u; ]# D+ n, C: d- I
  68. Track_Name_Pos      = $216B ;曲目文本位置1 m" E8 w& C1 \' `
  69. Sound_Track_Pos     = $21A5 ;声道文本位置: A; X" m/ T+ c5 Q, f
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置! ]! t$ |+ t4 a  _4 V1 N
  71. ;==================================================
    : V4 z( L: ?) {
  72. Scroll_X = $008 n+ F$ H* N, y/ F3 P
  73. Scroll_Y = $06  A, A$ Q% ]8 A- g
  74. ;==================================================& ~$ L0 D, [7 u/ w  X8 E, l
  75. RAM_Cln_1       = $0100
    4 D( I) B( E8 m  \* K
  76. RAM_Cln_1_Size  = $80
    7 ?. `% M5 w3 ^" d- n: m- x9 d
  77. RAM_Cln_2       = $00E0; L8 e2 ^7 s/ `( T: F) \
  78. RAM_Cln_2_Size  = $20- Z# G& y) u2 B: n+ t
  79. RAM_Cln_3       = $00E0; T, t! c2 j3 c, n  s
  80. RAM_Cln_3_Size  = $20
    + {* b& Q7 J. v( q# ~

  81.   `) b; t+ a9 t* ^; S
  82. ;==================================================2 K: ]7 F! C7 y  F# K
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    8 ]4 l7 r8 @* S* t
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    . I: H/ l0 w; [0 f: B$ ?
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ) }, s+ V& _' f* S
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    ! g! O. z9 k% T* t
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    7 |7 B# M* k6 _9 N) R" \
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    ( m+ H) m# r& g5 i1 ]) T' H" X6 l
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ' H: E8 H) c# ?6 S9 P; b9 I
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    - }. \9 B) t  i  t6 i
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    4 t2 p+ a& c: h7 O+ k  j4 t# N
  92. APU_STATUS              =   $4015   ;声音通道切换( Y8 P$ C" s! M" p
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通. p! ]2 c7 Q0 q" |- h
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    5 W- Z/ N$ ^. y: @
  95. ;==================================================
    5 x. T' K% w2 @% R
  96. MMC3_BANK_CTRL          =   $8000
    - ?/ M6 U( ^7 K( d" U& M
  97. MMC3_BANK_DATA          =   $80018 I1 N* g! ^# Q' r" C# u
  98. MMC3_MIRRORING          =   $A000( N) f: J* j5 {/ O) L
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    8 n$ ^$ |' Z9 |" b& }
  100. MMC3_IRQ_LATCH          =   $C000
    4 m9 N7 S& Y9 \4 e9 F1 ~
  101. MMC3_IRQ_RELOAD         =   $C001
    % z" D9 s! \2 M( h! W: l8 p
  102. MMC3_IRQ_DISABLE        =   $E0007 h9 _5 w6 U" r5 N5 `
  103. MMC3_IRQ_ENABLE         =   $E0010 X' ]% ~. f/ E1 @. J  k. C' e7 j

  104. , ?7 F# A+ E9 g* ?* R* g
  105. ;音乐数据块" E7 N* x0 R0 ~% i6 k/ |

  106. ( X5 H- o0 x9 Y5 o) g& w. P2 q6 H$ e
  107. ;======================================================================  K2 A. a6 f+ v  B7 H  |
  108. .IF SOUND_BAR_SHOW_ENABLE0 K+ a4 h0 P3 ]! A, u; h% m
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK1 V: I6 {! [% k$ k* f7 q# z! Y
  110. .INCBIN "sound_bank_bar/music_data_0.bank") N4 r6 t; q/ T' I; M

  111. * u* E+ M/ C1 u. d5 F# t
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    5 Y( |+ ^2 o% A
  113. .INCBIN "sound_bank_bar/music_data_1.bank"- M2 [/ t6 A" W; D
  114. 5 M5 C' z! w$ T4 U; z* g5 @
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ' \# O3 A1 |* A" [8 ~
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    4 V) T  G" ~# F. h! ]
  117. $ ]& h. p, D4 R. q; ]
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK8 n" r: h4 Z! y/ l0 D$ C
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    4 A: Y- i* C) g0 k# L

  120. % F* [+ C) [/ }& C
  121. .ELSE
    . w* ?4 W7 v; ?6 m1 u/ x6 A# G5 p
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    5 ~6 u; _  M1 i- v
  123. .INCBIN "sound_bank/music_data_0.bank"+ g8 H5 l, W+ I. L! m
  124. ! U( v, Y8 k0 F
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ; {5 Y1 u. \! k7 A) x7 j, r
  126. .INCBIN "sound_bank/music_data_1.bank"
    5 |4 v/ q) z  N5 \- B# R

  127. 5 r$ `& [8 A( z( F% b
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    & R* s. ^# N" W4 X" K2 m
  129. .INCBIN "sound_bank/music_data_2.bank"5 P# X* x" L, s2 w; R5 y. N8 ?1 M" K
  130. * E# L% j' r9 n5 Y
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    5 |, w+ Z; p! `6 Z0 d7 K( X
  132. .INCBIN "sound_bank/music_data_3.bank"; b8 w9 T% e1 l; {1 O8 @/ \, h- c1 ?
  133. .ENDIF9 q( M9 y, P2 P' `" }: V* z
  134. 5 o5 y! E1 V* |8 t- K
  135. ;CHR图形数据
      r) P7 r. A5 F/ x' u
  136. ;======================================================================0 k' E5 H1 G% C, R
  137. .BANK CHR_DATA_BANK+ s1 i6 M6 F$ G
  138. .INCBIN "chr_bank/chr_data.chr"
    6 ]" S- k6 a6 ~6 ?; y6 Z
  139. ) |0 h6 Y7 {( C/ s! B
  140. ;==================================================
      p) {+ F6 t6 Q+ V( N' O
  141. PPU_Addr        = $03001 H0 M7 c; U! n7 R- y" z
  142. Palette_Addr    = $03C0
    8 s+ v7 W1 ^% e. b2 ]* r* N
  143. Sound_Bar       = PPU_Addr+$E0
    % y2 T5 O+ V+ E" u7 T$ w7 i
  144. ;==================================================' d; m( Y$ s& ^, z  @; E% o
  145. Palette_Update_Addr     = Palette_Addr+$0D
    + z' ]: v. Z" G' e( c, o# G8 w
  146. Palette_Update_Max      = $2C7 K* D. S2 a% ?* D# T. k
  147. Palette_Update_Min      = $21  ~% v# p/ ^" t/ i
  148. Palette_Update_Interval = 608 G3 @4 ~) q/ M- c8 f
  149. ;==================================================9 a7 q8 \1 |  U: ~1 ^
  150. Sound_Bar_Cnt       = PPU_Addr+$F0* w" X/ D  m7 p4 ]$ Z% @9 p# K) N
  151. Screen_State        = Sound_Bar_Cnt+$01
    5 g; w' E: x0 v1 {( s3 f
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    ! Y3 D! y6 s! \: M
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03, ]4 M. T+ g3 B- g; l
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    & e% j$ G$ j# D
  155. ;==================================================' m1 J5 V$ ^/ L4 Q/ h+ f7 g
  156. Data_L              = $70
    ! w& K9 k1 w. r2 N1 B% q
  157. Data_H              = Data_L + $01
    ; U5 w* k' [# I6 [  E
  158. Data_Cnt            = Data_L + $02# K* _, [- Q" `, P' e
  159. Data_Buf            = Data_L + $034 w! |/ J! M& q* B. L, B/ r
  160. Time_Wait_Cnt       = Data_L + $04
    ' _2 R5 F5 n" {: b
  161. Palette_Wait_Cnt    = Data_L + $057 j5 h: H: B& t% W+ _8 j, [4 M" z
  162. Palette_Update_Flag = Data_L + $065 g! z- |& M3 \
  163. Show_Track_Name     = Data_L + $07
    3 m4 R4 }7 G+ }2 v
  164. ;==================================================
    ; l' m  H2 L, R
  165. Key_Keep            = Show_Track_Name + 1
    + D4 E0 y- U/ X  y; R3 Z
  166. Key_Once            = Key_Keep+$01. H+ p9 i; Z$ d
  167. Key_Kemp            = Key_Keep+$02
    6 a% u% ?8 N; o4 i
  168. Key_Temp            = Key_Keep+$03
    . U, v2 F# [: w- f+ H3 n
  169. Key_Getv            = Key_Keep+$04; ^* R0 y& D* l/ t9 t& y
  170. ;==================================================$ Q+ p6 _/ l# n
  171. Music_Cur           = Key_Getv+$017 ?( y3 k1 V- X  P7 ?% s
  172. Music_Last          = Music_Cur+$01, f. h! N- J. G
  173. Music_State         = Music_Cur+$02
    ( H1 M( _* M1 H
  174. ;==================================================$ z1 O4 e! Z% J- ?
  175. HEX_Data            = Music_State+$012 n) b% f" V5 F+ M# P7 ~
  176. DEC_H               = HEX_Data+$01
    ! h, q+ M/ f4 ^1 h
  177. DEC_T               = HEX_Data+$02- t/ R7 y. l+ ~
  178. DEC_L               = HEX_Data+$03# s& k( S9 I1 S: P' X7 K. E
  179. ;==================================================
    9 V- s, X7 I& n* R# |  w
  180. Time_S              = DEC_L+$01
    7 Y9 a6 |0 s; B. j. n$ V
  181. Time_M              = Time_S+$013 M/ m+ a+ S. U) s4 _0 L& N
  182. Time_H              = Time_S+$02+ l$ F) B( c. g8 l
  183. Time_Cnt            = Time_S+$03
    6 q- D$ I7 v3 h

  184. % P6 c0 h' y4 R$ e3 ?- l% j" {
  185. ;==================================================
    0 S6 V/ T! x0 t: _
  186. Music_Bank_8000 = Time_Cnt + 1# G2 h$ ?2 o7 ~
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    / P9 q1 _& F3 `2 {
  188. ;==================================================* [3 I1 Q7 `3 a6 E; I
  189. " b+ K& v0 t) ^8 n3 Z+ G) P
  190. ;======================================================================
    4 g0 r% X. v# t/ S8 ]% r2 ^8 R& n
  191. .BANK PROGRAM_BANK
    ; o5 X# ?9 A+ [  X- |- P0 m1 [
  192. .ORG PROGRAM_ADDR
    0 e0 a- x& C- c1 {

  193. 9 J3 \5 ~: o$ S. [3 `9 x7 ~# t/ H) x
  194. ;==================================================
    / s# K7 Q3 B( C2 L
  195. NmiProgramProcess;NMI中断程序处理. _; G2 B: t' _0 [: v4 l( W
  196. ;处理PPU图像
    7 v/ J7 A/ J" B0 e# h/ v
  197. JSR PPU_Proc3 S6 p5 E  i6 w. P' f  p1 ~: y7 C/ ^/ t
  198. 6 q% q. s) ?* V
  199. ;启用NMI中断; ?) D" n+ h( j' h
  200. LDA #$80
    ' H) l1 m4 |7 I# u# N
  201. STA PPU_CTRL
    3 G: P3 b7 D8 |) }

  202. / o: ^6 Y- h$ j/ U6 C; a1 H! H
  203. ;更新调色板3 N2 U0 n  ?% e1 r
  204. JSR Update_Palette_Data
    * m, j9 B4 p8 D3 ~

  205. # c  j  A& G4 ]4 O! Q4 N/ G
  206. ;显示时间(缓冲)
    7 B1 r" x$ P; `
  207. JSR Time_Show
    ; |9 f  e% `, x% I8 j# R
  208. : t, Y. j7 I6 D* f+ i6 o1 t+ ^9 t' f
  209. ;播放计时5 q* r6 X; I) M( C5 J$ x
  210. JSR Time_Count
    2 ~+ j+ j' H: f
  211. ! O% e0 r% e" n* F
  212. ;播放声音
    & Z( m' O! U1 C4 S& B* X" ^( f4 r
  213. JSR Sound_Play+ Y) r0 H) f7 l$ q6 a" ?
  214. 2 p: ^  u3 s9 O6 h9 K- V, x; K; C
  215. ;切换音乐(手柄触发)3 v6 n2 P. C# n  J9 Y
  216. JSR Music_Switch, w4 n: Y1 j+ q* r6 s

  217. $ c9 K" u2 S! D2 W6 `2 h- k
  218. ;音乐显示(缓冲), Y. B, o2 H9 W' K( k0 M% R
  219. .IF SOUND_BAR_SHOW_ENABLE' q1 k% ~* g* `6 ?. v
  220. JSR Music_Vision& F" Y* [+ L3 p+ @% f
  221. .ENDIF
    & s* x$ l+ D5 u% ^

  222. 4 i6 _" ?! q+ L5 X3 q
  223. LDA Time_Wait_Cnt/ v% K0 Z& h4 S3 `% S
  224. BEQ NmiProgramProcessEnd1 x8 j2 e( O2 r5 o, G) i0 W8 I
  225. DEC Time_Wait_Cnt) y, k3 i2 y+ r: f: X9 p
  226. NmiProgramProcessEnd' q9 `" ^% T# j9 Z% T) \
  227. RTS* b) j+ j3 C, w1 Q- R. K

  228. : @* I$ b$ e9 P; o% {+ D
  229. ;==================================================$ ?, f) W! B8 s2 O' e5 L2 ?
  230. ProgramBegin;主程序
    ' @' P. U' Q3 w9 E% W) |
  231. LDA #$00
    0 X. L9 k. t1 u
  232. STA PPU_CTRL4 f" ~0 J% t# ]2 k4 k& m
  233. STA PPU_STATUS
    * f% N# A/ D: \
  234. STA PPU_MASK
    7 Q1 `& V. n1 o$ c/ M
  235. STA APU_STATUS5 Y8 F  G+ k$ F. t3 q: D0 C: G* W
  236. STA PPU_SCROLL+ M" K. y3 r+ l4 v; i
  237. STA PPU_SCROLL
    ) I/ g0 A2 S* P; a% j9 }
  238. LDA #$C0( h  Z# M* n# E# R2 M6 v
  239. STA JOY2_FRAME
    3 }% R- F+ P9 r; Z
  240. * }& C- W, E. n! p. Z
  241. LDX #$FF
    " R+ n2 b8 D' Q% C! D8 i, I# T
  242. TXS
      ?; W. U+ m5 Y. t
  243. LDA #$00
    7 d' h" b- e! o5 F& j
  244. STA PPU_CTRL0 x2 Y; D8 e7 n( S. Z
  245. STA PPU_MASK6 }4 F. @, Z" c/ A" C2 p
  246. STA MMC3_IRQ_DISABLE
    ) D3 l( S9 D" c, o! G- T: Y

  247. " A- t( I& M, w$ F  ^5 ?
  248. ;==============================
    9 i2 ^! Q3 f: W
  249. ;调色板清空. g' c- s: }7 u: D* |% r8 V
  250. LDA #$3F
    ; _1 H, x" K; b
  251. STA PPU_ADDRESS6 _! N% u; W* L/ w" y. K
  252. LDA #$00
    ) i/ ^+ o- k& P  u9 m. h# D
  253. STA PPU_ADDRESS
    / V8 L2 r$ p* l) p: f6 E. o1 V
  254. LDA #$0F
    ; i3 Z5 F- T( a+ E9 j3 f4 s
  255. Palette_Clear
    9 r% D0 W7 a( m3 m. P" n* A
  256. STA PPU_DATA/ C$ `- d. @5 I0 e. R: G
  257. INX% n" d# I/ P4 q  R% Z1 z
  258. CPX #$20
    ) d/ p% H6 d& d# h/ I) p
  259. BCC Palette_Clear; C, _# @) V2 `( u" V
  260. LDA #$00
    1 R9 H# g7 N9 \4 Y0 H  Z
  261. STA APU_STATUS- a% A6 f* Q6 r1 J' `6 P1 }
  262. ;==============================! ?+ O4 E# ]1 ?0 s* K# n! B
  263. ;初始化背景调色板
    7 B( Z8 p' f: E! F  z: N0 i
  264. JSR Set_Palette_Color: A+ Y/ K0 N1 {9 w0 r
  265. JSR Set_NameTable_Attributes
    4 E% D/ v" u2 |

  266. 6 p: l7 t: w+ U/ R( C9 M  Q
  267. ;==============================' {; D0 o8 M4 g1 V8 J3 ]/ ]- x
  268. ;RAM初始化
    ) u7 I7 ?# C( V5 I  O
  269. RAM_Clear_All2 L( g6 W8 ?5 [. A% H
  270. LDX #$00
    ' M) j; B1 @& Q' t7 L9 m/ U
  271. LDA #$00  M( a5 z  p7 q
  272. RAM_Clear_All_Start
    , C7 V- o, j, k$ B$ w% P3 Z
  273. STA $00,X$ r( d- M' A3 E4 \! s9 ]  ~$ C# }
  274. STA $0100,X: h+ j& s7 l" L! C: d
  275. STA $0200,X+ e2 K- P! d7 ?5 v
  276. STA $0300,X
    . b5 R( W8 I# J% V6 y! P2 n
  277. STA $0400,X
    7 l& A8 Y' v! ~0 T
  278. STA $0500,X% A7 b" w2 X" z2 @9 R
  279. STA $0600,X
    % P8 E9 F& S. I# X$ y" y/ P
  280. STA $0700,X1 C9 a* D( Q2 ~" ~$ e: p
  281. INX
      P( H8 x8 _% X& Z: j5 Y4 r( z
  282. BNE RAM_Clear_All_Start( r1 M% Y2 i) p3 H9 w0 x) p
  283. " _- s( Y$ ]* l5 N- o& ~
  284. JSR VramInit/ x# W' [/ ~8 r# W8 g6 k
  285. JSR Init_Palette_Addr
    9 [4 `; \) W/ ^3 H/ Z7 a1 i, V
  286. ; S, o0 n( f# S2 F5 Y* l2 p
  287. .IF Music_Reset_Addr7 H+ L0 g/ Z" \( o
  288. JSR Sound_Reset4 X! d$ r% A9 h" S+ Q
  289. .Endif
    9 r9 A- J" h- _2 L
  290. 4 G7 V' K, m& S/ u4 G, n' `
  291. LDA #Music_Start_Song-$01( g3 N2 A- U5 `; ^0 F0 r
  292. STA Music_Cur
    6 S- r  ^/ `: S
  293. , }. m% K, @# H1 o& m) q7 H7 D
  294. JSR Show_Music_Text
    2 Z8 E6 R( o# K4 x$ @6 f
  295. ; y" x# _- l! \- |2 R& R
  296. .IF SOUND_BAR_SHOW_ENABLE9 s9 A+ p: o) }$ r
  297. JSR Sound_Bar_Text_Set, C8 o8 S) `* l
  298. .ENDIF
    9 U  k- ^8 R* D( U
  299. * f) H  z  G" Z- T; h7 ]- L, v6 @
  300. .IF Track_Name_Pos
    # ^$ j/ `7 {8 @' O
  301. JSR Show_Track_Info
    : }6 y$ [, ^) D
  302. .ENDIF
    ' M( x3 l* n  q  _% w3 N1 [
  303. # U& D% X1 k9 V1 o7 E
  304. JSR PPU_Proc8 F% l* e& U: w( C/ w. r9 c, U7 X

  305. ) C( {: F: S( D3 S' T- f1 m# H
  306. LDA #$0E/ l* z$ J% ~9 `/ _3 D# O* ?. B
  307. STA Screen_State$ r- c9 b. }; i) P! W9 _
  308. : D7 c3 r7 z6 B% {+ I& @0 w8 X
  309. JSR Sund_Bank_Init% E; ?8 P6 x9 r
  310. - x+ o$ e& f* A& q% P2 v
  311. JSR Music_Show
      ~& O$ A9 b( H3 o" N
  312. JSR Time_Show
    ; W; h6 ]) D+ D
  313. JSR Music_Stata_Show% b& M1 s+ U( {$ M
  314. JSR Time_Delay, O. o$ |% Q8 b5 G
  315. , Z) m$ z7 v( N" N
  316. . f# v% @7 r) K- d
  317. LDA #$80
    ; e. h, N* a- ]. J
  318. STA PPU_CTRL
    7 o2 s; u) r9 d9 n- Z: ^
  319. 9 N3 s! N8 w$ k* ~5 `
  320. LDA #$20- H; Z; K: R  e& |1 m
  321. STA Time_Wait_Cnt
    1 M0 A, s8 n5 R( F- _

  322.   t( h5 Q* ^( f4 F
  323. Wait_Time_Over- y2 n; x& Y/ K: x! o. K
  324. LDA Time_Wait_Cnt# Z5 Z0 w" w, o0 n4 G
  325. BNE Wait_Time_Over
    * r8 w3 V$ D& Q5 p% e+ A# r

  326. " P. f) j& q3 I. d) W
  327. LDA #$1F. S6 [+ s3 k5 C7 W7 N' g7 _
  328. STA APU_STATUS
    7 [0 ?/ d5 F+ f1 ~  S- s. M
  329. LDA Music_Cur
    * I( f2 v3 [- ?& a
  330. JSR Sound_Init
    - C1 _7 f! V% \1 x3 g. l
  331. ( m1 ^1 Z! i5 a: s1 v( u! J
  332. JMP MainLoop
    6 Q2 t) q: ?; y4 v* Y; r" Z; h

  333. 0 y$ I" _( ?7 {- }! D# _: v! M( y
  334. ;==============================
    ' \/ I! s! K8 y9 M/ A8 J
  335. Time_Delay;延时等待
    , r- ?6 D$ V" A: M$ N/ {
  336. LDA PPU_STATUS
    $ H  ^- a0 D. U. H. K
  337. BPL Time_Delay4 c/ l8 v  g0 ]
  338. RTS
    $ c2 t6 Z( m9 l; a1 R5 j, E

  339. ) C6 F4 [9 N7 Y' P2 Y9 e
  340. ;==============================
      F! o# S; l  u  ^+ q# |
  341. VramInit;初始化图形内存) Z8 B) p% Z1 W! z, {! C/ ?
  342. LDA #CHR_DATA_BANK. \# ~. _5 ^3 s- c1 y
  343. JSR SwitchBankA000/ Y: O$ M3 y$ l6 t
  344. LDA #LOW(CHR_DATA_ADDR)
    : T# }& m$ v, V/ Q3 K  ^
  345. STA <Data_L
    5 G$ m6 A* l6 T  z, x) L$ ]
  346. LDA #HIGH(CHR_DATA_ADDR)
    ( E) G/ N- P+ O$ h4 \7 Z6 u
  347. STA <Data_H
    2 A/ ~( o; W7 I) v4 |( }: G
  348. LDY #$00! k2 S" D. k# x
  349. LDX #$20
    5 ^: T% v" y% w0 M) N9 q5 }
  350. LDA #$00
    / ^! X; V) ?7 A3 c9 {& m5 h; d
  351. STA PPU_ADDRESS
    . v4 h8 p) S/ t5 m0 Q7 @7 l
  352. STA PPU_ADDRESS
    ) b& @" g: l3 `, e6 y- }
  353. VramInitWrite' i, o- d9 }+ H0 n0 V
  354. LDA [Data_L],Y
    0 C! ?, R' c% P% E' L7 i5 S
  355. STA PPU_DATA, _! q8 f, f0 p4 o9 }2 {/ M
  356. INY
    9 W7 d8 c$ I/ E7 Q2 b
  357. BNE VramInitWrite
    ( b, k) y: m" J! D7 q" B! N! _- w' ~+ z
  358. INC Data_H
    : o  S% }! J# O: Z$ E* o
  359. DEX9 s# o0 j5 J- y( u( @) j" a
  360. BNE VramInitWrite
    9 g6 c7 G; ]+ N7 ~
  361. RTS
    2 A8 V5 U  T% }: [3 V. K, }; q& K

  362. 0 m" n2 T/ n# t: z
  363. ;==============================% C4 r4 j4 n/ Y; l3 g% M: V
  364. RAM_Clear;RAM清除
    0 E/ `! B3 C" y8 r( G7 a7 s. ^  N
  365. LDX #$006 y, j/ W* X6 S3 m5 Y
  366. LDA #$00
    , ?* U5 T; S* L. [0 y
  367. RAM_Clear_1% }4 z. J* Y, E0 t) E' G
  368. STA RAM_Cln_1,X+ A2 j3 s4 w3 z
  369. INX1 \2 @# a& J0 U0 r5 o1 w7 p9 }
  370. CPX #RAM_Cln_1_Size4 E# I' A% m  E1 N
  371. BNE RAM_Clear_16 ?& Z4 y/ ]9 d+ n) \+ v5 v
  372. LDX #$00# V7 W2 W% y. P" z' |6 |% o
  373. RAM_Clear_2* `. ]3 g$ P5 w- q1 W7 S
  374. STA RAM_Cln_2,X0 Z7 v4 _1 E6 Y, a
  375. INX
    * g# c+ R5 U% Y# w! n* ]
  376. CPX #RAM_Cln_2_Size3 y/ j# {' H- w* F' S
  377. BNE RAM_Clear_2" c9 ^3 [8 [6 r  y5 v
  378. LDX #$00# c. X/ e; M* e, D. {
  379. RAM_Clear_32 Y; e9 A" [: r- K1 f
  380. STA RAM_Cln_3,X# }+ s' h9 e9 q
  381. INX
    8 R# T& W/ ~3 l9 ?
  382. CPX #RAM_Cln_3_Size! ~. h2 H/ {; X7 z& C' x
  383. BNE RAM_Clear_32 _/ H$ A( L# W9 E- j9 d
  384. RTS& S; z( A1 z" e9 t4 @* P

  385. ' @4 e$ ^: M1 m6 Y
  386. ;==============================
    & X, L% H; C% L! B- G% K
  387. ;音乐切换
    ( f3 H$ Y2 V0 ]
  388. Music_Switch
    ! Q$ y5 A# r. W/ q
  389. JSR Key_Proc
    6 ]3 Z# c* P3 ?% b/ _" u. N9 {
  390. LDA Key_Once+ Y9 R7 N  [! a2 u) B/ ~' x
  391. CMP #$10
    2 N% J/ \0 `' G4 D2 ~/ p: v
  392. BNE Music_Start_SongStop- I) ?. m0 D: _; G" i
  393. JSR Music_ReSet
    1 e3 l2 X/ x% w* V( W* [

  394. 6 B  R- h6 P! B6 Y$ n
  395. ;音乐停止
    8 o& t3 X0 X0 T/ k4 z* j
  396. Music_Start_SongStop
    9 }$ r4 A2 }$ C, ]9 H9 H
  397. LDA Key_Once, v* t) \, W/ v; G3 v
  398. CMP #$20
    % c3 x; _% k+ r5 a! h: R; y6 e
  399. BNE Music_arrow/ w( x6 a- z% J5 T
  400. LDA #$015 P/ G- }' }; i# v! i, O$ H
  401. STA Music_State
    & J$ i9 h+ @' B1 Q2 C" a+ `( V
  402. JSR Music_Bar_ReSet
    1 t1 ?1 ?% N) L6 C, e7 @' G, ^; Q
  403. JSR Time_ReSet7 q" q1 A' p5 g4 R2 ]
  404. JSR RAM_Clear
    5 }+ i8 A9 B& u$ ^" `  @4 t# b
  405. JSR Sound_Clear4 c/ y' ]/ v5 e) r1 |' j" J
  406. JSR Music_Stata_Show
    ' g- t7 u" n# E1 F) n' d
  407. Music_arrow! ^5 ~# a7 S' u0 u  ^7 s/ J
  408. LDA Key_Once
    2 L) D( W+ d# F$ E# k5 J& s, ]
  409. AND #$CF* s- y9 }* m+ X/ `; x8 e
  410. BEQ Music_Switch_End
    : T4 I1 e( P7 {
  411. JSR Music_Number
    : x! n6 h/ }0 R, P- K! w. e2 D
  412. JSR Music_ReSet
    9 p' S8 u- f* ~3 I& Z+ B5 a8 m
  413. JSR Music_Show
    5 b# L' t$ k! h" I3 f
  414. Music_Switch_End
    $ ?: O6 j, u! B5 B* I
  415. RTS# E- h4 }7 C3 r! k
  416. 2 ~- p+ o1 p) ^* t
  417. ;==============================
    " p7 s- [& N1 r, S
  418. ;音乐曲目切换- L8 p# z0 N  Q! z
  419. Music_Number) M# z( @$ L; ]% c7 K6 [
  420. LDA Music_Cur% V1 E5 B* v1 s& w! k/ W
  421. STA Music_Last
    5 p" g! q" e/ Q$ F* c0 z8 {4 Y1 x
  422. Music_Decrease
    $ `( {3 P; J$ D0 ^7 d
  423. LDA Key_Once
    5 {" _0 B4 F6 N$ M3 f6 H
  424. AND #$42
    - H7 A* l# F+ i6 v! J# _3 \
  425. BEQ Music_Increase% n& B  D: p2 `
  426. LDA Music_Cur' n! Z/ i0 y& M8 ^. n( B0 a
  427. BEQ Music_Increase2 Z: S  `3 R% I
  428. DEC Music_Cur
    8 _. x) E5 q# |& f3 q6 ^1 i
  429. Music_Increase
    - ]' }& X7 [# v1 K( h( @: g4 @
  430. LDA Key_Once
    0 y" c& ]2 B- w" o- u6 K# X
  431. AND #$81
    5 [- E: h3 Z2 {1 O. D$ I! R
  432. BEQ Music_Decrease_104 P" M5 |- Y* e+ p! I( W
  433. LDA Music_Cur6 Y3 E- h% `1 Y& W
  434. CMP #Music_Song_Total-01- T0 t& _* g# r; Z
  435. BCS Music_Decrease_10
    * Y( r# x- D2 w) I5 N6 m
  436. INC Music_Cur
    0 ~0 f$ J+ A* g: M
  437. Music_Decrease_10( Y3 b$ m& y9 L! b5 F
  438. LDA Key_Once7 ?6 h4 u) ?1 P+ f) m
  439. CMP #$04) p" e+ K8 O# }- k* f8 \* w9 S
  440. BNE Music_Increase_10& E+ N2 q% [, X( C% l
  441. LDA Music_Cur
    ! c0 E3 [6 U9 L( L3 p6 f2 `. B
  442. CMP #10
    ; D* f' H! R8 @& F0 _
  443. BCC Music_Start_Song_Min: P1 k9 V# l! Z1 @  A, R: T) U$ P
  444. LDA Music_Cur+ H  w4 n3 }* c3 c" G
  445. SEC
    6 v9 _' c* R) Q( b4 ~) J
  446. SBC #10
    & i4 P8 {5 h" l% B
  447. STA Music_Cur
      P4 R+ \! p( X4 t7 h% P
  448. LDA #$00/ ^0 x- |" g2 l0 W
  449. BEQ Music_Increase_10+ f9 L( I2 q* }  l' l
  450. Music_Start_Song_Min
    ( q( t7 {$ R% L) S
  451. LDA #$00/ e. i+ K0 a+ q1 M% T* g0 K$ y
  452. STA Music_Cur2 j5 C! X: _' Y  {2 `6 @
  453. Music_Increase_10  t. z  \0 O% O- J, e9 w4 e
  454. LDA Key_Once) T3 m, u: E2 B3 A
  455. CMP #$08
    $ _: N7 T% s/ \. C& w% Q
  456. BNE Music_Number_End
    $ m6 u1 v! }% x4 }- _
  457. LDA Music_Cur/ }" K* f7 y4 f% n) Y9 }3 `7 f  S
  458. CLC/ z5 k) K  S5 B7 \
  459. ADC #10
    $ p( h  D. d! U6 p
  460. CMP #Music_Song_Total-019 V! d) g) e; Y7 L" Z8 ^. M- y
  461. BCS Music_Start_Song_Max
    ' {/ \& I, [9 m% d
  462. STA Music_Cur& [$ `5 a  u5 S( t( ]
  463. LDA #00! C; F- l% n1 H; e* U
  464. BEQ Music_Number_End+ p* ~& M9 N3 I% X' H
  465. Music_Start_Song_Max
      {7 p$ Q7 S$ |$ P4 b+ q0 j6 `
  466. LDA #Music_Song_Total-01
    0 h) \4 {5 A' {7 V
  467. STA Music_Cur/ z" }7 J. y9 K3 `+ b9 c6 L* V
  468. Music_Number_End9 o% _# N( j) w5 f0 F
  469. RTS' f: r' c& f7 V, n- L. \1 j

  470. / v1 g7 R$ u- p; Z- r7 J
  471. ;==============================
    ( R6 n1 V" o9 O! G
  472. ;音乐重设
    0 H3 m! w6 p' P2 ?
  473. Music_ReSet
    & I6 r) k7 p+ o- X3 U
  474. JSR RAM_Clear
    & ?4 r/ W- J  h0 m, v" V- O
  475. JSR Sound_Clear0 C7 e1 T) T# O5 a
  476. LDA #$1F
    2 F- \' D: ^% ^  m  w4 u9 q, J
  477. STA APU_STATUS
    " s2 J+ |: B5 x! T4 M- i; C
  478. LDA Music_Cur$ y' T. S) n. B; |4 Z7 z' ^
  479. JSR Sound_Init
    . ?) x( v+ A( q% A  A; B+ P1 J# q
  480. RTS3 d6 D) v6 M0 N$ C9 Z

  481. ( |% }) l$ `, {% }$ N9 ~$ h
  482. ;==============================
    ( ?6 }# M  b1 T
  483. ;音乐端口清除& `* H  z4 q  ]7 B  V
  484. Sound_Clear
    % j$ q+ ~& a$ U
  485. LDA #$00
    # V  V. v& K0 R" _; r- M
  486. STA APU_STATUS5 X1 f- ~7 W4 L2 q- \
  487. LDX #$00
      v: N6 G7 [; [6 @; K
  488. Sound_Clear_Start
    % ~) T2 n  x$ _7 P  D, Y2 W) e; p/ p
  489. STA $4000,X
    # l9 {; f8 Q& M3 p4 C
  490. INX
    ) p, h8 V4 m  B8 F/ ?/ p; Z$ o
  491. CPX #$14
    ! L. q2 W% ~% M: ?% K+ a
  492. BCC Sound_Clear_Start
    ' u8 K6 s/ w1 d( e; Z9 ~; c9 C& t: K
  493. RTS
    ) q! I$ z4 [" n8 X6 F

  494. " G& Y0 n0 N0 _: V, \
  495. ;==============================
    " W! a# K% d, M2 _1 i
  496. ;按键处理  y$ H* o! h6 x6 A7 G
  497. Key_Proc; U: v# X1 K! y% k* G
  498. JSR Key_Scan4 |# F$ n% E0 x9 j3 R
  499. LDA Key_Keep
    7 }% N) d2 b9 k) U) q
  500. STA Key_Temp$ r( F  ?; ^- M2 N/ V* y& z
  501. JSR Key_Scan
    / ?* o8 ^8 J/ m0 K9 \
  502. LDA Key_Keep
    ! F2 C5 N9 r! m  U( ?
  503. CMP Key_Temp
    " @6 a8 Q2 \8 i: u/ C. A2 G
  504. BEQ Key_Get_Once  L4 w  X; _: l& D' x- ?8 x- z2 v
  505. LDA Key_Kemp+ @  b; J7 ~4 z% C1 O
  506. STA Key_Keep: z; {/ U. K) O4 y* c  ^6 |; }
  507. Key_Get_Once
    ; ~$ C/ N$ V4 x! y& h
  508. TAY
    7 w0 w9 b  q; q" h. ]5 w. `' \
  509. EOR Key_Kemp
    4 i0 m: y3 ]) l/ K& l5 O5 z/ Q: T
  510. AND Key_Keep; n7 G  G9 P+ B0 l& P+ r
  511. STA Key_Once. N: L! x: m2 G6 H. p4 S
  512. STY Key_Kemp' \. ?" w8 a% E$ i
  513. RTS
    2 a% [/ z# Z% _: f, q& B0 d
  514. ;------------------------------$ K! ?3 \/ G- X* S  ?! y
  515. ;按键扫描
    3 e- R/ d: g& P7 ~
  516. Key_Scan" h, a. W: C8 k6 @3 |8 c4 T8 G
  517. LDX #$01' N( q0 c% `0 a' k5 j( G0 ?, ]
  518. STX JOY1_FRAME
    : Y; M* V6 t1 U3 ]
  519. DEX
    + q. y& [. q# c; ]8 N
  520. STX JOY1_FRAME" O, Y6 H/ t. O) |2 G
  521. LDX #$08* G/ G9 s9 X9 H0 a4 c( U
  522. Key_Value
    3 c. P' Q4 V" @! }
  523. LDA JOY1_FRAME
    ' R  J3 j( m7 e: z! ^' o; B
  524. STA Key_Getv( d4 i& {0 b( q
  525. LSR A' G4 {; K; K4 F9 G1 ]9 M
  526. ORA Key_Getv' @, `. W  @2 ~3 w& [6 F& O- e  Z
  527. LSR A& p- ^: G" k3 E; g" t0 b( g' L. \
  528. ROL Key_Keep4 F" X" M  T  @2 f( A
  529. DEX
    7 l4 A* O) _  D: o) N! l
  530. BNE Key_Value
    % o6 _* s8 S' w5 B
  531. RTS# Y9 u2 v. }+ S- R. [
  532. , ?1 R; U4 `' O
  533. ;==============================
    " P2 `4 r3 Q, ^
  534. .IF SOUND_BAR_SHOW_ENABLE
    # _! c% i4 ]& a* P* R
  535. ;音乐条显示
    " x6 a' I& v$ y; {& F3 j2 U! b
  536. Music_Vision
    ! P9 p' E% ?, T- `4 y- c, y
  537. JSR Music_Animation
    ( ?- {% z: P3 v% E( o
  538. JSR PPU_End- t4 S: L0 A% {  J; ?8 J
  539. RTS
    7 C4 u- X+ q: Z& F" N! ^( Q8 k
  540. ;------------------------------: d2 V4 Y8 J$ M
  541. ;音乐条显示处理
    % L6 c9 J2 o. {) m& w. `' k/ L
  542. Music_Animation) Y& @4 b0 e- x( j# b
  543. LDX PPU_Cur5 ~' e* f" ^6 I/ B, i; N
  544. LDA #Mode_Line  y7 v) G* ~  I: T
  545. STA PPU_Addr,X6 h. I5 C7 K1 w
  546. INX
    - e8 s0 \" Y- O7 t  {9 Z' y( u
  547. LDA #HIGH(Sound_Bar_Pos)
    ) B# q  M% j/ S  l4 T8 H/ X( D
  548. STA PPU_Addr,X& X1 F. P& Z4 r# ^1 Q7 b) C2 p  S
  549. INX6 }& W# `& ?) ?$ x- |" G  n( u
  550. LDA #LOW(Sound_Bar_Pos)8 m2 O) n" [  Q, \+ ^' ~2 K
  551. STA PPU_Addr,X
    5 h& C- U, f. p
  552. INX
    1 ~8 \6 g! {" o, X  c7 ]
  553. LDA Sound_Bar3 s! k/ I3 L; i" C1 ?
  554. JSR Volume_Convert
    " `" f; v, B& y5 j% J4 u
  555. JSR PPU_Return
    $ j4 {: E: D& P, i9 W# t8 W% U
  556. LDA Sound_Bar+$4
    + P8 {. {" F7 G4 l
  557. JSR Volume_Convert" A3 ^$ J7 t: {% R! J& G
  558. JSR PPU_Return
    ! R; Q5 ?, B' d) g
  559. LDA Sound_Bar+$8/ `7 |( z$ _  C, y. J
  560. JSR Volume_Convert_Ex7 b0 U' O/ ]* w; h2 k
  561. JSR PPU_Return
    4 j* R/ W# `+ x0 e% W5 b4 y1 G6 e
  562. LDA Sound_Bar+$C* G: h$ }1 w5 d# t: w. t
  563. JSR Volume_Convert
    - H: A- p1 d7 Z; e% G, T
  564. JSR PPU_Return
    ; O$ D6 H- m) ]. k
  565. LDY #$103 E/ T  b- E: j+ @' ?* O5 s3 b
  566. LDA APU_STATUS
    . x* f/ U3 C2 o1 n7 ]
  567. AND #$10- {1 i3 t* A% M8 i$ v/ O/ d; P* M
  568. BNE Volume_Count
    8 ~' o8 G* u0 O4 j) r6 |
  569. LDY #$00, @+ r! J0 o+ W2 a/ A9 f
  570. BEQ Volume_Count
    0 R* ]3 x. q! ?5 K7 G8 o5 j! q
  571. ;------------------------------& g6 j, V$ \" }( ?% o1 A8 H
  572. ;音乐条处理9 Z4 y5 V0 Y8 S/ r
  573. Volume_Convert_Ex. ~: W5 d2 S% O( @
  574. AND #$1F9 j" Q5 p4 S7 G. \1 w7 \
  575. TAY
    ( _: ^7 n; O3 W  c
  576. BNE Volume_Count
    1 p  I. }. l0 b. w" s
  577. Volume_Convert
    ) j/ [, X4 A0 \& n
  578. AND #$0F
    * c& \) L8 n, D- M$ z" E7 D
  579. TAY  f) @1 l, L# L. Y
  580. Volume_Count
    & V! t8 f' v* K& l0 `4 U* l
  581. LDA #$08
    ! n! w0 B' {4 }. A$ U* J7 [
  582. STA Sound_Bar_Cnt, w6 o; D$ D" _. o
  583. Volume_FILL0 g# h0 x2 @( J- ^4 c9 G7 e
  584. DEY+ e/ B* ~9 @$ V
  585. BEQ Volume_Half
    $ R- }( H  v! J- S* }! N3 O9 ^" {3 m
  586. BMI Volume_Empty
    6 f8 [: T+ u$ H4 ~
  587. DEY
    4 T+ `: z* F2 _9 k7 y& {
  588. Volume_Full0 Z' @* U- F6 H0 k6 D, @" h- R. _
  589. LDA #$16' v. \8 ?0 {. [  R% W! b
  590. BNE Volume_PPU
    : X( C: X! x9 `2 g' Q$ H6 b) K
  591. Volume_Half
    3 _  I. u5 f% q! h6 s4 j
  592. LDA #$15
    ; P! W( H. ]' @% M  W
  593. BNE Volume_PPU4 G; d+ z, N9 _; E0 [
  594. Volume_Empty
    5 T& H* _* c5 b
  595. LDA #$14) h1 Z+ x! V2 b' K) m% z( k- I, P- w, @. `
  596. Volume_PPU
    7 g3 z0 l7 C: _" Q6 q, q7 c0 y
  597. STA PPU_Addr,X  L2 |( S3 }! w
  598. INX5 m. B+ K( d- C4 r% x/ x
  599. DEC Sound_Bar_Cnt
    ' _0 M" E; o1 Z9 K+ J7 p
  600. BNE Volume_FILL
    7 X1 Q! Q1 }- h# P  P
  601. RTS3 y7 v6 e  I/ y7 s+ `+ E
  602. . i2 S' ~& H8 ?- R- L
  603. .ENDIF" T( Z, ?: ~& z' B

  604. 1 v) {  L2 `: r
  605. ;==============================
    $ g- O8 P& G* j9 x9 a+ G' d- w! g
  606. PPU_Addr_Set;PPU行开始7 [8 }; N+ F* n: c) d; a
  607. LDX PPU_Cur5 @4 j. }) d1 g7 s2 ]' Q1 @
  608. LDA #Mode_Line
    9 n) P0 C: r! D3 }1 |
  609. STA PPU_Addr,X, b8 C- [' G; G$ t
  610. INX
    " ^( `- ]/ q" \/ i+ R9 m
  611. RTS
    ! H1 l% d/ d+ a  a+ v

  612. 9 k. o* T$ H6 B6 |  ?( F- T8 G8 I$ w
  613. PPU_Return;PPU转行
    " ^# ]3 z! p9 f3 r3 S6 z
  614. LDA #Flag_Over
    6 C/ I' G9 F0 ?! h, X
  615. STA PPU_Addr,X
    - F! f8 f5 Z4 `, k
  616. INX
    % Y& B! m2 b6 H3 _+ L
  617. LDA #Mode_Return
    . i9 q' k4 _7 I9 t9 A3 F9 p0 j+ |
  618. STA PPU_Addr,X
    / }. {$ T. s7 Q/ J+ B7 u
  619. INX
    9 U1 y/ y' O# O8 h; O: n
  620. RTS
    ; i) o& @/ b8 `$ ?- B6 J9 S

  621. 0 R2 V; T5 g& }& J
  622. ;------------------------------4 n& B# b! Q1 _
  623. PPU_End;PPU结束7 A9 |1 I7 j: I' [
  624. LDA #Flag_Over) r7 n( Q& i, G1 t: d8 d, S  n
  625. STA PPU_Addr,X
    : D7 ~" C6 _- A  g- Q* ^
  626. INX
    ) p  Y  U. z# R# w7 ^
  627. STX PPU_Cur2 @  B# o+ |' q9 K
  628. RTS, f$ O; d. \1 S! `& H7 e& ]
  629. ;==============================, ^1 U6 J  e+ ^2 _
  630. Mode_Line     = $FD    ;新起行模式1 P' |8 h) m2 c5 Y4 Q# j  o5 R
  631. Mode_Return   = $FE    ;转下行模式$ O& N2 v4 x7 ]4 I0 D) @# m
  632. Mode_Clear    = $FC    ;行清除+ j" M2 U0 r" d' g0 q; Z2 u2 P* c9 i( H
  633. Mode_CntLine  = $FB    ;行计数写入
    & h" L6 R5 p- G9 N) E8 J! |
  634. Flag_Over     = $FF    ;行结束标志2 c0 ~) f% H% M5 H, I4 V

  635. # J2 f  P& T6 }% |" ~9 W2 W7 i
  636. ;------------------------------
    - G/ P( t; ?. j
  637. ;PPU处理
    / T" E, j* S1 b7 O/ z: {( `0 H# {
  638. PPU_Proc0 ^5 M, _: z) `4 X9 k+ W* m
  639. LDX PPU_Cur
    4 j8 E+ U5 d2 g9 i$ W% j
  640. LDA #$00
    . m- w3 ]2 }( Z( P! M
  641. STA PPU_Cur
    ; A* F" O4 {  @
  642. STA PPU_Addr,X
    ) j' w8 [' e0 s8 o& X
  643. LDA PPU_Addr
    , Q: m; L- N9 p! Q3 j% E
  644. BNE PPU_Proc_Beg
    # K' o- n5 R$ t# E
  645. PPU_Proc_Ret& L3 |( J: c9 H
  646. RTS2 u! }& a% H% y0 k# c
  647. ;------------------------------
    ( X% o; x9 q! M/ g# X- K( G
  648. PPU_Proc_Beg  ;处理开始
    , O6 U) I" g) N% c/ L
  649. LDX #$00) T( K: e' Z2 J" ~1 ~
  650. STX PPU_MASK
    6 N& n$ p, b8 [3 o  P/ X3 z% W
  651. ;------------------------------! F: V3 H: w% |4 F# h9 e9 J6 N
  652. PPU_Mode_Select  ;模式选择" {- P9 U$ l* k0 G3 c6 S; S
  653. LDA PPU_Addr,X
    / T4 {- ~- p2 z' d8 p
  654. CMP #Mode_Line! \9 |4 O/ f9 {: s
  655. BEQ PPU_Mode_Newline
    - H0 |8 e+ G2 y
  656. CMP #Mode_Return$ s" ?- C0 \7 l2 C/ I
  657. BEQ PPU_Mode_Return
    5 o3 m3 F' S% J: n
  658. CMP #Mode_Clear
      Z7 R7 `! I2 B+ z
  659. BEQ PPU_Proc_Clear: i5 ?" Q1 {) r+ C
  660. CMP #Mode_CntLine
    - c) h5 @3 u. H# S' a; X
  661. BEQ PPU_Proc_Cnt_Line
    $ y4 [0 Q* i2 H9 D. T* {
  662. RTS
    ( B- T) h6 n' g4 T9 L" v
  663. ;------------------------------
    1 E5 u* z, t( W8 k5 O5 L9 m
  664. PPU_Mode_Return  ;转下行模式8 O; E" J8 g% u* X1 j( V$ B1 @3 e
  665. LDA PPU_Addr_L. Z- M- s# B6 n" \* V" `" E
  666. CLC8 t: Q) g/ G4 `; n% W. a% Y. a
  667. ADC #$20, s8 |* v; x- G0 o
  668. STA PPU_Addr_L0 H0 f( `9 U3 M5 M- D* K
  669. BCC PPU_Return_End9 k7 i2 m% {' i% J: I
  670. INC PPU_Addr_H
    # u% V) X0 x0 b
  671. PPU_Return_End
    & j0 h5 V& a8 a' X; N: j) x1 |
  672. JMP PPU_Set_Increaser
    + i* ?" B) ^2 u. ]; H4 c
  673. ;------------------------------9 U9 N6 x# _* F! G# q
  674. PPU_Mode_Newline  ;新起行模式
    4 }3 F1 o& M: Y6 J  e8 c- b
  675. INX
    & s, V  d, Q; E" \/ h. [; }
  676. LDA PPU_Addr,X9 H: K- }2 ~/ l9 A4 E' r
  677. STA PPU_Addr_H5 U! k9 {5 k! D; v% {
  678. INX
    7 [9 e% C  {5 L' I& h3 K$ d* N
  679. LDA PPU_Addr,X6 y2 k  N; }& k% E2 J6 z
  680. STA PPU_Addr_L
    4 h3 r" ^- `6 o; Q5 B" {0 R% ]
  681. ;------------------------------
    8 {' E: L: I+ ?: V6 m- K" T3 k
  682. PPU_Set_Increaser   ;设置写入地址
    4 V% x- O! e3 d0 |) ]
  683. LDA PPU_Addr_H
    , e- J7 e3 o% k3 A: \
  684. STA PPU_ADDRESS! v1 q% f5 O* a
  685. LDA PPU_Addr_L0 W& R* X6 u$ X
  686. STA PPU_ADDRESS* L' J' n/ X2 q# Y3 j
  687. ;------------------------------
    ) n; p: i8 Q! F' W8 ~# k# s
  688. PPU_Write   ;写入数据
    ) L: m. U8 B. B5 E! h- _; T
  689. INX0 t+ Z2 B; e8 X! S# m5 Y! I
  690. LDA PPU_Addr,X2 B$ G, ^9 I+ A1 C! T/ v
  691. CMP #Flag_Over
    2 ^3 g# m2 |4 E* R- Z
  692. BEQ PPU_Proc_End) v, t" {( V5 x' w
  693. STA PPU_DATA
    ( E# Q9 e; S: {3 Q
  694. JMP PPU_Write9 N2 v# d4 |( x. m' N
  695. ;------------------------------( [9 U. Q9 @. g- L. W! P
  696. PPU_Proc_End  ;单行写入结束
    * ?, h* J8 s% r. `2 V+ p# N4 h
  697. INX8 `+ {0 t% v) n. y  V* R
  698. LDA PPU_Addr,X
    # s  v7 x' e9 Y/ t8 U, W" d$ ~
  699. BNE PPU_Mode_Select+ ]9 a  o6 s9 }) j5 y: j! j
  700. STA PPU_Addr
    7 @" l6 Z5 s8 D' ^5 M2 ]
  701. JSR Update_Palette_Color- t( [" B; @. U0 E5 [5 Y0 @
  702. LDA #$00( a. B9 B( ]: @+ }' T
  703. STA PPU_ADDRESS
    + W: N/ S9 I( q8 @* m) j1 B# W/ B
  704. STA PPU_ADDRESS
      X3 m* a5 y% b0 h# e& n
  705. STA Show_Track_Name& {: |2 ~5 x4 j; d# L! h
  706. LDA #Scroll_X0 J5 j: S$ \& b. F& L& v  i7 e, `
  707. STA PPU_SCROLL3 t! M0 ^- N+ w
  708. LDA #Scroll_Y
    3 H) Z, i) `! v" }6 u. m
  709. STA PPU_SCROLL
    . Q+ c) m5 Q, R/ J4 p4 |  s
  710. LDA Screen_State
      Q- m6 k7 D2 d
  711. STA PPU_MASK6 w; t  O+ h# ]" r7 j
  712. RTS
    9 k- r& U' f: d6 y: V  S

  713. / z) N; i' T2 J2 L+ w* \
  714. PPU_Proc_Clear
    3 Q( x4 I8 N+ X8 |' s
  715. INX1 j7 \! U$ b3 W0 S3 R
  716. LDA PPU_Addr,X
    0 i) }0 H: l3 ^
  717. STA PPU_ADDRESS) V) W* }0 e/ ^1 u4 @" k8 q% L
  718. INX
    * b- l% J. y# K
  719. LDA PPU_Addr,X2 Y5 h3 S# g9 S6 [+ ]+ Y
  720. STA PPU_ADDRESS
    % o, c8 a) [4 N  A) g0 W
  721. INX4 p# |" {6 H7 J# H
  722. LDY PPU_Addr,X' P3 r# t5 b4 _$ V+ L7 s- X9 K
  723. LDA #$004 _$ R. q+ H! f. V1 d6 |
  724. PPU_Proc_Clear_Write
    6 _+ A2 q6 A# ^; {. N
  725. STA PPU_DATA2 F, Q* Q" B' E  J' I& h
  726. DEY
    # E: N& l' t  \; x
  727. BNE PPU_Proc_Clear_Write
    ' q. C8 `2 P( X& r* y9 x
  728. JMP PPU_Proc_End* c7 T; V- F) k2 }! f. k4 g
  729. 3 S7 D* V7 m8 e5 J3 i( p/ ]
  730. PPU_Proc_Cnt_Line
    ! s( G8 I- J; q$ Z; r
  731. INX  U& U: k( U  ]" q# o
  732. LDA PPU_Addr,X
    . V! G% U% G9 O/ \2 \) U+ E
  733. STA PPU_ADDRESS
    9 O8 O3 w, p; U& j$ u$ Q3 `: I
  734. INX7 p- k* n) _$ P* B
  735. LDA PPU_Addr,X
    8 F" c; S1 G; w) X, ]
  736. STA PPU_ADDRESS% f, d: D1 T+ K- `
  737. INX
    + l) n, {6 l0 J% Z) i
  738. LDY PPU_Addr,X
    , x, x0 W0 X) t. ?
  739. PPU_Proc_Cnt_Line_Write  G" G) K4 P* p4 ], K
  740. INX
    : W" H. a8 _5 D+ @( c2 J5 _
  741. LDA PPU_Addr,X
    - q$ Z4 `  n2 I$ L% d# ]
  742. STA PPU_DATA( L, `( e9 Q* B! l# n/ K
  743. DEY. [8 R4 m0 e# v7 A' P2 |5 g
  744. BNE PPU_Proc_Cnt_Line_Write
    * \: l) Z; T4 B, v) S0 z5 h
  745. JMP PPU_Proc_End
    ' W/ Q. Q" @% g
  746. ' P% h' u/ o4 {0 t1 I8 m
  747. ;==============================
    % ~7 e5 v% r: d" Z( W4 W1 a5 i
  748. HEX_To_Dec;十六进制转十进制2 K( L! j* b( Q) w4 k  Q
  749. STA HEX_Data* \) a' r- R/ V0 P" H5 j, C( P
  750. PHA8 V" G/ l* U7 g& J
  751. TXA: ^5 ^) e0 w4 C+ o) p
  752. PHA
    ) G9 v: I& ]/ w  }( J
  753. LDX #$00+ C" r+ \9 x% n# O# b/ K
  754. LDA #$00
      v; |& Z: K# i  d+ K7 m. s$ X
  755. HEX_Cln8 _) ]+ I6 P/ q3 v* W  H4 g6 |! h
  756. STA DEC_H,X7 C# C" e  n: s* {9 s
  757. INX2 f) J  G  d/ u  \5 n
  758. CPX #$03
    ( q# R6 F+ s0 F& G
  759. BCC HEX_Cln
    ! R: _9 s# c: P+ y
  760. LDA HEX_Data2 C, g/ s) V  t8 w
  761. ;------------------------------) h! _" N- A6 Y  ]% r7 T6 j8 u
  762. HEX_100
    6 }; Q4 u6 C' M2 l  i# q
  763. CMP #100
    4 s, m3 \: O& J' f( z
  764. BCC HEX_10# W5 D6 l* g4 e( _. q- ?: B
  765. SEC: y. n  h' d- U$ s" y6 _- Q  G
  766. SBC #100
    0 w, o" \- p. s" }7 P5 P
  767. INC DEC_H
    ; a" a  G: ]3 s: K. q& c* U
  768. BNE HEX_100
    ; M& o! A% e! N5 s8 B
  769. ;------------------------------% }, t, N0 b; w
  770. HEX_10
    8 ?0 ?, L& i) y. V6 {
  771. CMP #10
    ; M7 |) k7 O, s; c9 g
  772. BCC HEX_1- I; {2 |& G: f5 j
  773. SEC
    6 g$ Z! G0 M) R: O% {# n0 w
  774. SBC #10
    # j% q. i% ~. |# C1 u2 @, V) I; v+ a
  775. INC DEC_T/ r; C$ z. |) a: f/ ]# f6 E
  776. BNE HEX_10$ k1 v" B. ?4 E# A
  777. ;------------------------------
    - {6 Y0 Y+ ]! S% Y- T
  778. HEX_1* R, |$ \/ R' P. L& u% l( V
  779. STA DEC_L' F0 Q5 m# R* u3 D+ n; t% i* c
  780. PLA
      Z) d4 ~1 r/ u. J$ {' E1 ^
  781. TAX7 p5 ?* G( l+ R  y. A
  782. PLA! D& p% x6 C6 [, _8 [1 D
  783. RTS5 s+ @2 m5 \; L

  784. ' t5 k0 F) `# F9 N' }! Q
  785. ;==============================
    & O7 N" H' ]5 Q2 r: S
  786. ;音乐曲目显示
    7 X  S* p: _+ A/ S7 p3 D7 R
  787. Music_Show
    # l# m- i+ T" a; @
  788. LDA Music_Cur+ k1 W7 _9 R4 }5 v9 h
  789. CLC: _/ W' [; N6 Q
  790. ADC #$01
    * A8 I2 R4 B( \
  791. JSR HEX_To_Dec
    ( d9 X+ l' W* t" f: U
  792. LDX PPU_Cur
    ) M& A! w5 {; E! i' F8 m' h
  793. LDA #$FD
    0 ~$ R( g' l0 M% X: L$ q5 o4 u
  794. STA PPU_Addr,X$ W6 N) w4 e) {$ N; _7 o+ W
  795. INX6 p3 f+ q9 ~5 }, w
  796. LDA #HIGH(Play_Index_Pos)+ E# ]2 L: f% {! |* Z
  797. STA PPU_Addr,X; u7 H9 B# r) a. O2 f6 b, w) V( r
  798. INX
    9 Q- |. x' H. l
  799. LDA #LOW(Play_Index_Pos); D2 l3 y& n. j7 R. \8 g
  800. STA PPU_Addr,X4 `# C( b' m! I+ b  |3 I2 v
  801. INX
    2 Q& d* c1 {0 _2 z  l$ l

  802. / q) t) _( l1 k' b" O) n
  803. .IF Music_Song_Total > 99
    " o, N& p% Y1 n) d9 B7 c, J7 J
  804. LDA DEC_H
    + M& \, s. E4 C9 O% I
  805. ORA #$309 O3 f3 }# J( S1 ^/ z
  806. STA PPU_Addr,X
    - O/ ^5 x+ H( w' h
  807. INX" H5 o$ m: l0 S) p
  808. .ENDIF
    / M) f5 W! t  R

  809. 0 B5 u4 H/ g( t  U6 S+ J1 v
  810. .IF Music_Song_Total > 9' ^6 H$ ^8 b9 @# x6 A
  811. LDA DEC_T
    1 P/ J& ]& a& H% {3 J( u1 G9 y8 K6 @% e
  812. ORA #$30& {% l0 ?6 e1 g, S2 e, k4 E
  813. STA PPU_Addr,X) u! w: A7 S7 p+ y) w/ [
  814. INX/ K" Y8 ^) o$ G7 O
  815. .ENDIF6 R, g; |" J( t' H1 g* l, O% O
  816.   {; g7 O% F  c" E# [
  817. LDA DEC_L' r4 p- y; q% @, z
  818. ORA #$302 C" R& Y5 f. f8 J4 C1 C
  819. STA PPU_Addr,X
    , G- y$ t8 @5 }; C4 v$ o* m3 y
  820. INX3 N4 i9 }4 {7 r* C% O; _
  821. ; k6 l8 c& ^" B4 p2 Q
  822. LDA #'/'& y4 }2 Y1 C9 O" G! h
  823. STA PPU_Addr,X
    $ u1 |) ?" o9 z# t* s  G9 T
  824. INX& m) S+ J1 N- o0 p
  825. Music_Show_Total- \; |) T) |8 `! A, G1 e
  826. LDA #Music_Song_Total
    1 q! c& J: O* J* f# {) Q) ~
  827. JSR HEX_To_Dec9 d0 I( E) G$ `: h- [. M3 A0 M
  828. , u7 B/ h& K$ k$ i; T# v
  829. .IF Music_Song_Total > 995 z9 x+ R# D  t
  830. LDA DEC_H
    8 @5 k" ?( Y2 q2 Z+ V) L8 s
  831. ORA #$30
    + o) C& q6 E1 `$ M* N( D- J
  832. STA PPU_Addr,X/ r( {6 ?9 R( k: W
  833. INX
    ) k5 @5 b( g4 t' e8 ^/ L
  834. .ENDIF
    ' h7 c  A- M) P! R7 C' ~6 I- ^5 U

  835. + b8 C+ i* x" e2 x  _
  836. .IF Music_Song_Total > 92 ]8 {& d& A& _  g8 i
  837. LDA DEC_T1 V: f5 M; g# [
  838. ORA #$30
    6 U& Q8 }8 G: _7 o, K# O+ @5 A
  839. STA PPU_Addr,X/ r- k2 U6 n+ K. B4 \
  840. INX
    4 X9 l/ {4 P# o/ q4 u5 ~
  841. .ENDIF
    & b; v4 H' v7 L1 z
  842.   h) I' G! q: X# s; h6 g; F
  843. LDA DEC_L" J; @& }; F/ D7 P. S5 A3 f" H
  844. ORA #$30" q; |' a7 M# I* `: J
  845. STA PPU_Addr,X9 X; {+ \+ F' [# [* ]
  846. INX5 E# Z% H: M5 p, b
  847. 5 t3 p! g1 j! W! C2 k* M7 @
  848. JSR PPU_End( u- v6 |1 P  v
  849. Music_Show_End! e6 N  A. Z" z4 |2 X& E$ C
  850. RTS. m" _  n/ U% _6 q1 A$ \, G

  851. * k0 u8 `* b1 \6 G5 b6 `+ Z
  852. ;==============================
    & t; X8 N3 `' f5 l- j5 {* g
  853. Time_Show;播放时间显示
    ' W( B/ x" x1 S4 O. u, y8 D; G+ O
  854. JSR PPU_Addr_Set
    * X) w. ]3 L3 F
  855. LDA #HIGH(Play_Time_Pos)2 B" Z/ e# s. B# a" j
  856. STA PPU_Addr,X! Y, _* {2 \& b4 \/ O
  857. INX
    . [' \% T6 N9 J
  858. LDA #LOW(Play_Time_Pos)) A' u% d9 U. ~9 o9 k/ G4 P
  859. STA PPU_Addr,X
    9 u% a; _* z$ W- g" j
  860. INX; x9 ~% B5 Z- Y" ^  n
  861. Time_Show_H2 v7 S" z9 [0 K3 L; |
  862. LDA Time_H
    : f7 a; z' V' e7 L" k
  863. JSR HEX_To_Dec+ {3 x* Y7 w# H
  864. JSR Time_Digit. g8 X  w2 N2 x# _$ u4 N
  865. LDA #':'3 }8 n' M* h. t
  866. STA PPU_Addr,X
    * G0 n6 N, g8 L; z3 u' n3 ]
  867. INX
    # o; v# u1 g! i( f8 O) o
  868. Time_Show_M
    5 S! A& q6 d/ e, e7 ]( h* e/ m& i
  869. LDA Time_M( d4 j0 j" m. A" E# p, n' Z
  870. JSR HEX_To_Dec- y8 Z% U0 r6 T/ M; G* I
  871. JSR Time_Digit5 Y* t8 N/ F; h1 g& I" t
  872. LDA #':'
    / _7 T" E) A& ?
  873. STA PPU_Addr,X
    $ {% K! d5 A* B6 K1 `" k. M0 @
  874. INX
    & W$ N& o6 c1 Z
  875. Time_Show_S
    ' _. @) N- F9 ]) p6 L4 V+ q8 o! b# H
  876. LDA Time_S
    " \" T; Z9 N' T; W
  877. JSR HEX_To_Dec
    . U; c' \  t9 V3 I) ?8 |
  878. JSR Time_Digit+ `( T" ?' s3 P* V* ^
  879. JSR PPU_End9 X( }5 b2 ]6 A5 Z" N+ Z2 I6 u  g- K/ ^
  880. Time_Show_End' B0 n6 t/ p* X8 {0 d
  881. RTS" C; W* l7 Q& ]

  882. 9 X# c( F, |/ s9 R
  883. Time_Digit
    ! m) W( y1 n! q  ]4 y( c- F, Y  m
  884. LDA DEC_T4 z9 P+ ?. w, a* x9 ?, s+ d
  885. ORA #$303 a! j& D5 @7 n8 F2 Q
  886. STA PPU_Addr,X# ?7 q: h7 F! E+ b% h, F) y$ h
  887. INX
    2 w8 U4 s" c+ O* R! A
  888. LDA DEC_L1 T. r. Q  h( g; Q( ~8 O
  889. ORA #$30
    : M1 I" x2 M/ N
  890. STA PPU_Addr,X" K: R4 T5 o, |5 k
  891. INX
    5 S5 ]* M- j' k2 x+ P5 U9 w
  892. RTS
    + R9 I7 ?  p. ?% E; ]
  893. $ Y/ V' |$ U* X8 N
  894. ;==============================
    / I: y! f1 J0 v# Y: h' K
  895. Time_Count;计时
    % N. d, M  p' I$ c
  896. LDA Music_State
    ' P, B  Z! x( I. O  @
  897. ORA Time_Wait_Cnt# _, t2 n/ {2 ]. G+ ?
  898. BNE Time_Count_End
    3 n9 P/ r! ~/ b$ P
  899. INC Time_Cnt
    . F5 u2 t& j2 @1 `0 O9 P. A$ B
  900. LDA Time_Cnt8 C3 I5 U! a$ ^" J3 P, B" y
  901. CMP #60: ~$ m9 a0 l: h& j! S
  902. BCC Time_Count_End- O* h( H& ~2 g. u! P( Y4 m
  903. LDA #00
    ! N9 U1 Q4 ~( U' ~8 e+ R9 `# K
  904. STA Time_Cnt0 M- w' P( ~4 F" v  O# ~, b& M; d
  905. INC Time_S8 H) c9 j* _0 q; L) g9 e4 c. O
  906. ; \# x, l" Y0 r* x' C' x
  907. Time_S_Cnt, X3 ~  ]3 v& u2 t* l  h" W4 I  E
  908. LDA Time_S# ]" i8 Q. M+ B
  909. CMP #60
    1 F! H5 g. V5 h9 O3 \
  910. BCC Time_Count_End6 F# y6 g  n  d9 P& ^( h  z* D
  911. LDA #00
    7 q! A; u* |) M7 p/ n6 A0 ]
  912. STA Time_S" c0 Y) b, l9 s2 l0 p" u
  913. INC Time_M
    & C8 P# Z2 I- A9 ?/ K: z$ f4 f
  914. / f; Y2 `" R& T$ G5 {2 c
  915. Time_M_Cnt
    , `  p9 f  k4 ?; l3 o" O
  916. LDA Time_M* P% Z5 |% L7 `! x! T6 F; B* ^
  917. CMP #60
    1 k4 y$ D; j9 a# O6 Q
  918. BCC Time_Count_End6 c/ y4 V9 `& T% U+ X  r
  919. LDA #00
      B/ n5 ^% D- j; l. H6 b
  920. STA Time_M* I# t1 z8 Y7 ~9 ]! k
  921. INC Time_H9 x  d, W8 Y$ `1 Q4 O

  922. 9 Z; q0 S' H, t% b& p3 x
  923. Time_H_Cnt! D! N/ A+ R. h' \! i, n
  924. LDA Time_H" v( _2 a' ~$ s! E  o: Q
  925. CMP #24
    8 }8 ~- p  L0 W
  926. BCC Time_Count_End. l- u5 @4 R7 a
  927. LDA #005 |1 x' M' b$ ~: c+ u) ^  Q' l
  928. STA Time_H
    * z, i0 v5 C- [9 d: N9 ^
  929. 3 v. c1 l0 }: i; V, d; d0 c
  930. Time_Count_End
    , ~- U( a* e- a) p, L  B
  931. RTS
    ' w3 ~( u: h+ C. Q

  932. 1 G) l. S- n7 D8 f. x
  933. ;==============================
    : r  s: b) {! v. w9 ^$ F
  934. Time_ReSet;播放时间重置
    ; g9 H# a7 |5 d3 `: y8 J
  935. LDA #$00
    : x6 X! Z. X. [  l
  936. STA Time_S5 z) C* w' n+ n/ f7 U# e
  937. STA Time_M
    1 J3 e. w( Z1 e, P/ p
  938. STA Time_H
    $ h3 a3 c% y. [; C. ^7 J( C/ e; e  A& [
  939. STA Time_Cnt- x  {4 b$ g5 w
  940. RTS* L+ [# S9 n4 \/ x  L- X

  941.   T0 n, e1 u1 ?! ~0 b4 E
  942. ;==============================
    3 M8 X3 {% `- o9 l6 _, u  H7 y
  943. Music_Bar_ReSet;音乐条重置
    ) P. k* A( m, T& b1 B
  944. LDA #$00
    5 ~/ X: C1 u# l) o# g7 z4 ?6 ]# V
  945. LDX #$00
    ) |, @8 U6 p- R  b7 B# D0 e$ A1 f
  946. Music_Bar_ReSet_Set; ^8 r2 a% f- A
  947. STA Sound_Bar,X5 E4 x: ?( F  G$ D
  948. INX
    " `! g0 K4 u% s/ n) @+ e' x" }+ ^4 Y
  949. CPX #$106 F& A# w  a; N5 }, Y
  950. BCC Music_Bar_ReSet_Set
    . N% l6 v, Y. ~
  951. RTS
    ; t7 j: a9 Q& [! P* N, f

  952. ( {. E0 s) Q! D( d) D6 f
  953. ;==============================8 V$ M. F, c7 K# Z" E5 A- x  U
  954. PPU_Data;PPU数据写入) u  K& f& b( }
  955. STY Data_L  c" Z/ T- T, Z! @
  956. STX Data_H
    8 `: Z8 e5 F0 `+ f1 N/ g4 b* V
  957. LDY #$FF1 g- y1 Z8 s" O# O" ]% C
  958. LDX PPU_Cur
    9 ?6 Z* H: s$ O5 g0 Q' A1 {
  959. DEX7 x4 Y2 S2 h/ s) @' G/ J
  960. PPU_Data_Beg3 Q& W% S" ^8 A8 q9 B5 b
  961. INX
    9 P. F2 R$ m" V  h0 ~
  962. INY, v& b# I. K/ x
  963. LDA [Data_L],Y
    * m! z. @( s8 h" N9 F
  964. STA PPU_Addr,X2 g1 t5 {7 n4 W1 E7 R: X
  965. BNE PPU_Data_Beg
    7 `  {" x: {- X& Y* a9 I. z- y
  966. STX PPU_Cur
    . K# b! D9 b( A' U* [( s
  967. PPU_Data_End4 \" c6 s, b3 s/ I$ X$ L: o, K
  968. RTS
    . r+ {) B/ ]1 S

  969. ( V- K& m8 m6 X$ o5 v$ T
  970. ;==============================3 B) t. @1 P8 R0 B% |0 I- o
  971. Music_Stata_Show;播放状态显示
      [+ o7 t$ W( q, {
  972. LDA Music_State0 T, X$ j6 h0 j% x/ t# N3 a
  973. BEQ Music_Stata_Show_Play
    ' _# ~# [+ b: G8 H7 P8 ?
  974. Music_Stata_Show_Stop
    & _( u5 X* i& r; Y/ [
  975. LDY #LOW(Music_State_Stop)- J/ u' m5 O7 l. d
  976. LDX #HIGH(Music_State_Stop)
    7 t9 c! N" P# U3 X0 W6 a
  977. JSR PPU_Data; J# Q9 ?: Q% n6 D2 a8 E" c
  978. RTS
    1 A  D2 i* ^* ]/ t. J) v. V
  979. Music_Stata_Show_Play* ]  j# |+ e! i9 |6 c8 {# G
  980. LDY #LOW(Music_State_Play)1 g" @- y# ?; C& E
  981. LDX #HIGH(Music_State_Play)& J+ S8 v+ i" @& _: N
  982. JSR PPU_Data
    . ^- `$ {" y5 a+ O: T
  983. RTS
    9 V- k; l7 T/ o; ~! w  n3 I
  984. . a$ h0 W' W' _  Z1 f% B" K. R& h9 ?' W
  985. .IF SOUND_BAR_SHOW_ENABLE+ ~) P4 B9 S; B# |
  986. ;==============================/ y- F7 e" @; a( H* V& m
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    4 x) {0 c( x* _: ?
  988. LDY #LOW(Sound_Bar_Text_Data)
      ^1 |& U3 x& b3 C# p
  989. LDX #HIGH(Sound_Bar_Text_Data)0 t; K% ?9 M9 s
  990. JSR PPU_Data# `$ ~8 Q4 ?. d3 m3 W
  991. RTS
    2 V7 w% Q8 t8 m5 \- a+ D

  992. 7 T. l* Y( V2 o% U! Z2 ^
  993. .ENDIF
    + ?0 |5 {" Q- {" p) N

  994. 0 V" ?& C% H$ d: `
  995. ;==============================
    8 R# W9 s) [8 K2 Z
  996. Set_NameTable_Attributes;设置命名表属性
    ) h6 Y: O( j, L, ~
  997. LDA PPU_STATUS) z  k; D6 R: D: j$ _  L
  998. LDA #$23
    # v8 z- s# ^+ T" ~& [
  999. STA PPU_ADDRESS
    ; I0 @6 |+ h! D% G" R- Q
  1000. LDA #$C0
    # |. T2 g8 H( H! U! d$ f
  1001. STA PPU_ADDRESS* Y1 t" O4 c$ `$ m" r
  1002. LDX #$00( z, P8 R4 q; e( [3 U5 T
  1003. Set_NameTable_Attributes_Write* g9 C  m9 P, v. X
  1004. LDA Palette_Attributes,X: V* q) g' |' ?" b/ ~: p
  1005. STA PPU_DATA
    0 d1 X) F: a3 ~) X
  1006. INX2 D1 G/ P( c3 P$ C( X
  1007. CPX #$409 C$ D: l% k! [" h+ \8 Z1 {0 W
  1008. BCC Set_NameTable_Attributes_Write
    8 E7 d( f; ]3 _! `2 U0 N( _+ H
  1009. RTS! @. _, h* Y) f/ ^( c8 ~; \1 x

  1010. 4 B' A) B$ c: p( W* ~) k
  1011. ;==============================) Q( Y$ n2 T, \) `! `: B, u; O+ d( e
  1012. Set_Palette_Color;设置调色板数据: f7 A6 t1 P4 |4 s
  1013. LDA PPU_STATUS6 a, [5 N3 Z; |1 k4 B; c" ^+ ~- i9 t
  1014. LDA #$3F
    2 V1 H4 l4 f* j" n( T5 f6 t
  1015. STA PPU_ADDRESS
    ) v# ], g& L1 O% N5 }- L6 l: b
  1016. LDA #$00
    ' U: P7 D7 w* o, H4 W9 t4 Y
  1017. STA PPU_ADDRESS
    9 W, s+ J8 k7 @) B1 g6 S" @" v6 c
  1018. LDX #$00
    ' s  e) Y) N+ t1 }, g0 s9 u
  1019. Set_Palette_Color_Write) v' A- k3 |9 p+ [
  1020. LDA Palette_Data,X
    % R( Y( M+ j% O7 i+ f- O
  1021. STA PPU_DATA
    0 U1 B  @, s0 g: E8 U; f
  1022. INX
    1 V; A: d8 D5 _+ ~5 h' n7 D- p) t
  1023. CPX #$20
    6 |0 L0 o( J5 `( G
  1024. BCC Set_Palette_Color_Write
    5 @* t% c! i: T5 c0 }5 C7 V
  1025. RTS
    4 z% }* L2 m: }0 |% M
  1026. " K! f0 e' T# O6 I# W1 c, E
  1027. ;==============================
    6 |. {2 v/ g" a! Z- Q& e( @% H
  1028. Init_Palette_Addr;初始化调色板数据7 e. h& s* K/ f' L* p
  1029. LDX #$00
    1 o1 R1 ]& U7 h5 Q$ Q
  1030. Init_Palette_Addr_Write
    1 j) r. Z5 a. k2 k
  1031. LDA Palette_Data,X- Z( w9 T8 b6 @2 A) V
  1032. STA Palette_Addr,X& L% |" ^  g/ g9 B: J
  1033. INX9 A$ M- J6 y6 h" V, u
  1034. CPX #$209 g8 K' Z2 t/ A, @' y2 R9 c" {
  1035. BCC Init_Palette_Addr_Write
    / v" `9 i: a3 Y+ I! e
  1036. RTS( i8 T- d8 H8 F7 k
  1037. & l) w! m0 t, J0 ^6 P# ?+ }9 C+ Q2 P
  1038. ;==============================' U, G% A* N4 X/ V
  1039. Update_Palette_Color;更新调色板颜色7 t$ q3 N7 Y+ o# _8 [0 |
  1040. LDA Show_Track_Name8 X6 j: {8 r* E. e/ ^- {2 B9 i7 B
  1041. BNE Update_Palette_Color_End
    ) C* `7 m& Q2 N$ v; i
  1042. LDA Palette_Update_Flag1 T* P- m6 b) i+ i) Y6 C# c0 Z
  1043. BEQ Update_Palette_Color_End) m# X. ~/ @; W; ?2 O
  1044. LDA #$3F
    ; X+ }# T# V1 Q4 w' q2 m& m
  1045. STA PPU_ADDRESS
    ! A) a3 @9 Q0 C
  1046. LDA #$00
    1 b6 u: R: ?  h$ }7 t; ^3 E
  1047. STA PPU_ADDRESS
    1 i8 t4 X' V9 t. ~
  1048. LDX #$00" V8 ]- s+ }1 R  ]3 Q+ R
  1049. Update_Palette_Color_Write# O) w3 d% Y5 Q* N+ \  X; f( H6 y
  1050. LDA Palette_Addr,X7 m0 z5 u! r; r% Q
  1051. STA PPU_DATA" x2 I, j) i1 ^
  1052. INX  e! n& d; z3 t$ o' H
  1053. CPX #$20% J; a' i$ N# \
  1054. BCC Update_Palette_Color_Write" f6 M2 l, t! U/ ^. m
  1055. LDA #$00; p  }0 j6 M: Q) W  J3 P
  1056. STA Palette_Update_Flag
    * ^' G- X6 |* r
  1057. Update_Palette_Color_End
    , Z  U8 G. A1 w9 _( k& T$ k
  1058. RTS$ f' ^4 Q6 S2 O. P

  1059. " p: x9 j, i. r8 p. J* {
  1060. ;==============================4 o" Q1 w0 ^+ L) L' O! n9 m
  1061. Update_Palette_Data;更新调色板数据
    # N+ Y2 m% U& w: N1 n9 P: w, _2 v
  1062. LDA Show_Track_Name- t9 ^7 c$ P6 i
  1063. BNE Update_Palette_Data_End
    $ K/ D- Z+ N8 e
  1064. LDA Music_State( b. v" r, K7 p0 N; R
  1065. BNE Update_Palette_Data_End" m) U+ P1 J+ }: Z6 J/ [
  1066. Update_Palette_Data_Check
    ; A, j  s3 K! K' h% `
  1067. LDA Palette_Wait_Cnt6 K( `; f0 q  T; z& g
  1068. BPL Update_Palette_Data_Check_Over
    & l  \2 b/ `% s4 @9 o+ b% I: e- v
  1069. LDA #Palette_Update_Interval
    / ]; T9 I9 L8 N- Q9 ~- _) Z
  1070. STA Palette_Wait_Cnt0 }' J- E# k9 G* D: U) K( a
  1071. Update_Palette_Data_Check_Over
    ) g* ~5 ^- S2 s' h" i8 m; m
  1072. DEC Palette_Wait_Cnt
    / o+ x/ Q2 {( q- x1 G1 `
  1073. BNE Update_Palette_Data_End
    5 k2 P- M7 Q1 f- M
  1074. INC Palette_Update_Flag
    1 x8 i! F/ e0 t% |
  1075. LDA #Palette_Update_Interval
    * J! S( v9 d, \1 {  v
  1076. STA Palette_Wait_Cnt' r' `; f& K) |3 C3 E( P
  1077. LDA Palette_Update_Addr9 Z$ o! |( y! r! {8 m$ M8 L
  1078. CMP #Palette_Update_Max
    ! A' s4 R* i$ Q& W
  1079. BNE Update_Palette_Data_Set; N: [& [8 F. m. V+ w8 D
  1080. LDA #Palette_Update_Min - 1
    6 }2 _8 A8 _; @
  1081. STA Palette_Update_Addr
    7 _8 z2 [" H" V7 l6 h1 s
  1082. Update_Palette_Data_Set) r5 P2 V0 I  J0 k4 e4 t
  1083. INC Palette_Update_Addr7 b, v, q1 E' \, s3 ^* a8 Y9 o
  1084. Update_Palette_Data_End
    ! P: C: `, o! |! s& {$ G& l
  1085. RTS
    . e! P( R* y8 q
  1086. . u8 B7 L, J" L- j% O) A0 T
  1087. ;==============================
    ' I$ I. v8 R1 p$ Z
  1088. Show_Music_Text;显示静态文本+ p& ?. o( h* }
  1089. LDX #$008 c! S+ |3 {9 t0 q$ _, J
  1090. Show_Music_Text_Set2 ^* L8 {+ x( P
  1091. LDA Static_Text_Data,X
    1 H" }  g8 ?% Q0 X& d
  1092. STA Data_L
    , Q- l  e# ]) ?- y8 D% |
  1093. INX
    % A+ A9 `1 r; T- X6 Z4 Z- P+ r
  1094. LDA Static_Text_Data,X# t. Y6 ^5 s: B$ n! Q
  1095. STA Data_H
    . D4 Y5 r- `  Z
  1096. INX
    ) a3 G9 w0 `& o5 ?
  1097. LDY #$00) A& m/ d8 P/ g& _: ]2 o
  1098. LDA [Data_L],Y
    3 ^- o5 c. Y: K5 K: F  B
  1099. STA Data_Cnt
    % {' c! X7 T- ~! \6 c  m3 @
  1100. DEX: S9 L* B/ }) y' _7 S# Q
  1101. DEX: K- M# Q4 v  ~% G# K2 o6 s
  1102. LDA Static_Text_Pos,X& W- v0 e$ N- s; T% x8 G: K  ^
  1103. STA PPU_ADDRESS& i$ l! V4 |2 D: W2 v8 }& y
  1104. INX
    " V+ @! J$ V9 L& D; U& m/ T. i( v  w
  1105. LDA #$20
    4 U) j  A3 n1 g6 S6 c2 C& [
  1106. SEC
    , P: Y7 S9 X' n8 _! ^+ G+ ~
  1107. SBC Data_Cnt
    : W1 S3 G5 K" q% `: s# R% p
  1108. LSR A* X9 i; O5 k$ v& k0 c
  1109. STA Data_Buf
    7 t0 J. O' ]% F+ k
  1110. LDA Static_Text_Pos,X- K/ [+ L5 [" [2 s$ ?
  1111. AND #$E04 w0 f. I" D% C) e# h
  1112. CLC
    ( |- Z; }" y" q1 @; O- H4 \6 M
  1113. ADC Data_Buf$ S8 u6 {, b4 M; z. Y9 v: \
  1114. STA PPU_ADDRESS$ G1 g# M" t: z5 A: F
  1115. INX% j& L: V$ l& n" v2 J9 V3 v
  1116. Show_Music_Text_Set_Write' w/ U# V, P- g' i* `& i
  1117. INY
    5 B! [) z0 l6 H- ^) M, D4 W
  1118. LDA [Data_L],Y
    * N2 ?, V8 O" ~. T1 M0 q  m
  1119. STA PPU_DATA
    / j) P9 i+ ?" V5 C  l# y
  1120. DEC Data_Cnt
    , ]1 I  _- A! E2 l9 F
  1121. BNE Show_Music_Text_Set_Write/ x2 R$ S8 b. ~4 F& q/ R% |
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos! U6 x8 }9 R5 K# ~& r
  1123. BCC Show_Music_Text_Set
    , K1 i7 i% B) k7 k& t
  1124. RTS+ O1 S( {) B: f" f2 t  R
  1125. 7 }. b% o4 Y# C' {
  1126. ;==============================
    , N1 y8 q  v* F5 L
  1127. .IF Track_Name_Pos;显示曲目信息
    3 O# a: O! ]8 E$ h9 b- _  \& L
  1128. Show_Track_Info
    6 C3 d/ Q' }( o$ {
  1129. INC Show_Track_Name1 [! e# `1 E4 I) I: \( q
  1130. Show_Track_Info_Clear
    5 i" _, l9 [; c" W5 x3 S
  1131. LDX PPU_Cur) o3 k( S9 `' Y& Y# ?8 x0 j' b
  1132. LDA #Mode_Clear8 H) p# h4 ^- R; y1 x% J4 p( ~
  1133. STA PPU_Addr,X
    2 L( L9 H% \2 S
  1134. INX+ C/ {, K% W7 T$ T4 g( b0 H4 l

  1135. + H2 y2 \4 B8 W- q+ i* b( j) V
  1136. LDA Music_Last
    , o& I" j7 b& Z; x( N) q2 k( C
  1137. JSR Show_Get_Track_Name_Center_Pos0 K  N7 [- S- y! s: m) E7 Y
  1138. Show_Track_Info_Write_Cur
    4 L0 D8 q: y" @2 a4 e/ Q
  1139. LDA #Mode_CntLine4 f& T+ W( R8 U# f  T
  1140. STA PPU_Addr,X, J+ [) A8 [" Y
  1141. INX3 E& t5 I+ J0 D& @& {. q; L7 U
  1142. 3 i+ q5 B$ x3 a
  1143. LDA Music_Cur# f7 U1 Z) x' v+ ?% K
  1144. JSR Show_Get_Track_Name_Center_Pos* b! O. `* p, S6 G# F

  1145. 6 n, |# c: H/ ]- h' i# p* n7 r
  1146. Show_Track_Info_Write_Cur_Data; q2 o" s1 U5 C
  1147. INY/ q, `0 Y2 M  Z( X
  1148. LDA [Data_L],Y8 z. B. I# H$ [: V9 P+ E1 C/ [* l
  1149. STA PPU_Addr,X, G% \( B! X5 D  c( l
  1150. INX* X2 ^" P; @: P( U) z7 T
  1151. DEC Data_Cnt
    ' b* C, {! e4 ~: J5 T+ I2 @
  1152. BNE Show_Track_Info_Write_Cur_Data
    . S' U3 e9 j; T( f# x* c, z
  1153. Show_Track_Info_End, |+ Y% t; Q+ {" W9 ~
  1154. STX PPU_Cur
    7 j7 e; T, o+ P0 t3 k4 K- l7 A. R0 q
  1155. RTS0 C6 w+ N8 I) J/ I; s1 g. e. |

  1156. - m! U9 V! B- ?# ]
  1157. ;==============================1 a8 s  }: U6 B2 A
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置- G, {8 z& X  E5 s7 P
  1159. ASL A
    ( X& L8 @6 o# N3 D  p& ]
  1160. TAY5 a4 X; k6 p2 D. c# t! c  u
  1161. LDA Track_Name_Addr,Y/ o# z3 z& }* b+ Y! j7 O
  1162. STA Data_L4 T1 i1 [* L4 c6 v' X1 f
  1163. INY/ I) q% a& s" q8 b* _- _
  1164. LDA Track_Name_Addr,Y3 {" s; |6 Z. h( c  k! B" w
  1165. STA Data_H
    # J  \# E: a8 k6 T3 Z9 S
  1166. LDY #$00. C  v+ l% D/ B6 v/ H7 K1 i; Y
  1167. LDA [Data_L],Y
    - D" n) M, ~+ B) F
  1168. STA Data_Cnt/ r/ g( {/ G" u& N5 I
  1169. LDA #$20
    ' O: B$ Y3 e2 m* r; S6 z; Z6 i( ?
  1170. SEC, k* Q: `5 Y+ d. T
  1171. SBC Data_Cnt2 ~) l! M4 Q+ n6 O! `$ ~
  1172. LSR A
    0 F2 N0 T0 E1 v& t' {
  1173. STA Data_Buf( d) |6 ^$ K6 l6 K. I) M
  1174. LDA #HIGH(Track_Name_Pos)
    - e- y5 }1 X, L" X7 P  J$ m$ y
  1175. STA PPU_Addr,X
    . t! S7 C( g' I0 {$ |) T, J& S
  1176. INX+ I  n, \4 L' H
  1177. LDA #LOW(Track_Name_Pos)* w' J  H" q5 G3 ^4 T5 K' o$ |+ {
  1178. AND #$E0
    + D# X9 {- e  N; x$ t+ W) b
  1179. CLC7 S& n  T" p0 j' f, W6 p
  1180. ADC Data_Buf, p: e, N  }" f2 h/ T0 h
  1181. STA PPU_Addr,X2 O* z. {+ Y6 l  V. f3 n' @
  1182. INX
    3 l/ x  ^) J& w- X0 W- C6 L
  1183. LDA Data_Cnt
    & d0 i% P2 N; }
  1184. STA PPU_Addr,X* V! e3 a. l! L8 \$ l
  1185. INX$ a. R5 E( L' M5 u: `
  1186. Show_Get_Pos_Center_End. `. W) Z% i0 q9 d
  1187. RTS
    , g  i- o* Q( |. E2 `* ^& ~8 K
  1188. .ENDIF
    2 {8 w" [+ Q$ S

  1189. 3 M( H' r; C# G
  1190. ;------------------------------
    6 F- _  y  r7 N% h5 w
  1191. ;命名表数据
    5 `4 C7 N! k: }1 A
  1192. Palette_Attributes6 P& L' s5 A6 G5 T7 W! ]( i2 h; O2 ~
  1193. .IF SOUND_BAR_SHOW_ENABLE; W3 H9 k8 d& T2 l
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ; S% k$ I0 y% b( g+ w7 s
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA, ^. {, |: }& R3 l
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    2 x) M" g6 C! P
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
      J% \6 a  n: o
  1198. .ELSE' {$ D( T8 m2 }. I
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00# t" O. ^! @- m$ Z1 A% Y# b
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    ! b- c+ O  \6 S# |7 C
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    : h7 @' f9 g8 ]+ p" }' L7 k1 W
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$558 w% T- E$ p- B& G
  1203. .ENDIF
    2 S+ }! f1 z9 M9 [1 A6 Y" x

  1204. & s+ K: v" V( u9 t
  1205. ;------------------------------% N( [+ `" A. k/ h
  1206. ;调色板数据8 R: j) K& O; `% V# l$ M+ i
  1207. Palette_Data
    ( c8 {  X4 G8 _( P. G9 c2 L4 {7 g
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    / e- v* ]1 N) C1 O' x5 T
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F, u/ ^% u9 Y' i- X% _

  1210. 3 ], L2 P) B! V
  1211. ;------------------------------; w! V! g* W% S5 e( p  e8 Y2 q) D
  1212. Static_Text_Data
    % a$ {" s: v, ?' A+ M2 n
  1213. .WORD Static_Text_Title_Data
    ( N. S( V9 m& I5 f1 p
  1214. .WORD Static_Text_Author_Data% l1 i/ Q7 \" a( C# e) ^. A% B, P
  1215. .WORD Static_Text_Date_Data/ I2 F% y( J) [6 s3 W$ X# A
  1216. Static_Text_Data_End, A2 p# z3 L' }4 M% G3 O
  1217. 6 k- u: f+ \$ S5 l- H- `
  1218. ;------------------------------
    + E8 D. C" `$ w. s7 ?
  1219. Static_Text_Pos
    : F' R+ n: r$ V& L/ `# V
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    9 o: R2 [" ?9 \; ^
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)% L) I9 {5 I" U7 j
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)6 Y+ i8 `1 j$ y. ~3 c
  1223. Static_Text_Pos_End
    9 V* ]6 b3 W9 y3 y( W2 s: F/ S5 s1 R
  1224. 7 |# p* Z# A# L; j, x" ]
  1225. ;------------------------------% o8 o4 Z3 R' k& {0 d# w6 C
  1226. Music_State_Stop! e" [; X8 |3 m. K
  1227. .IF SOUND_BAR_SHOW_ENABLE* S2 T2 e+ r9 _
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    # b( _8 S) z9 @( p3 E
  1229. ELSE: E0 c  V+ f& L- S
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$001 d" Z( h' W3 b, V  S
  1231. .ENDIF
    # v2 l8 X" S- d' |0 [! u$ V
  1232. Music_State_Play
    5 e5 X7 P" R5 J8 J' i; w
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00. o3 x3 K: V1 @0 c

  1234. 1 I3 }, ?+ B% S( B3 q
  1235. ;------------------------------( C' }' K, I5 Z+ l/ l2 r; u' k" s
  1236. Sound_Bar_Text_Data;声音类型文本
    + Q  ~- ]  _% M; [! k, N& t
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)# m$ [( u' G0 M% q, v- p
  1238. .DB "SQ1-",$FF5 K, _& k$ A" f8 n9 M
  1239. .DB $FE,"SQ2-",$FF
    . W4 d, T4 u! b, z# n
  1240. .DB $FE,"TRI-",$FF% V& E5 B  n/ l
  1241. .DB $FE,"NOI-",$FF, N( F% ^% q# U; m; o1 B$ J! \
  1242. .DB $FE,"DMC-",$FF,$00
    3 o& E! q5 P5 S$ v9 a

  1243. 0 t! a5 L) @# ^
  1244. .IF Track_Name_Pos
    # ~' X) L3 w0 K: {8 ^. O: L: g: l* \
  1245. ;------------------------------+ u' p" L1 |% z
  1246. Track_Name_Addr;曲目名地址索引5 B% a  z* L0 v6 O$ C
  1247. .WORD Trackr_017 O2 B. ^- L7 `2 |
  1248. .WORD Trackr_02
    ' M& N- L; @) h7 z) }9 a
  1249. .WORD Trackr_03$ H  ?3 t( {1 V( s" U% ~, Y
  1250. .WORD Trackr_04
    4 j! R( d7 @2 F  @- X
  1251. .WORD Trackr_05
    9 M& w7 I. u! H$ `9 B7 u8 l
  1252. .WORD Trackr_06
    2 K" i4 `6 J/ I7 |! z' H8 t
  1253. .WORD Trackr_07& p2 E) I# `0 h4 N0 f
  1254. .WORD Trackr_08
      j( u+ g8 }, ]! p
  1255. .WORD Trackr_09) g* {# U0 X" s' B2 `
  1256. .WORD Trackr_10$ u- I6 ~  X5 r3 i
  1257. .WORD Trackr_11
    . v0 q$ {6 M7 e" q+ n, _
  1258. .WORD Trackr_12
    * v; E, O* ?: ?3 u
  1259. .WORD Trackr_13* D) x( A) @# J
  1260. .WORD Trackr_14
    ' K/ B! V3 O0 t/ d! q
  1261. .WORD Trackr_155 E/ A6 e0 K. w' a3 O
  1262. .WORD Trackr_16+ n9 f* u8 p7 \$ F
  1263. .WORD Trackr_17
    ' L) Z: p4 D5 W: i+ ~
  1264. .WORD Trackr_18
    : w; N# r* R3 p% z+ H/ K: I
  1265. .WORD Trackr_19/ Z) A% @: M3 L1 L* o
  1266. .WORD Trackr_20* ~, @% g% b* T. n
  1267. .WORD Trackr_21
    0 L  M& }' Q9 D9 a6 k& k! w" L
  1268. .WORD Trackr_22$ D* r0 E% K9 ]9 e; ^
  1269. .WORD Trackr_23
      b* J# P( l% R1 c+ E! q7 F' Q) U: d* g
  1270. .WORD Trackr_24
    " w& ^  }( f; v
  1271. .WORD Trackr_25
    # C, w$ ^- `0 _/ `8 J: q+ w
  1272. .WORD Trackr_26
    . I7 W1 p/ N' \+ L3 O( K" h* W
  1273. .WORD Trackr_27' J+ i$ x0 P0 z9 ^$ ~
  1274. .WORD Trackr_280 [+ |7 Z* y7 N" _" Z, d' p7 F0 b+ V& [
  1275. .WORD Trackr_29& z7 o) y: Z5 j" T
  1276. .WORD Trackr_30
    % D) X" t% a. }8 C
  1277. .WORD Trackr_31- |2 b8 L5 m& o7 I
  1278. .WORD Trackr_32
    5 P/ C( s& n0 v" ?
  1279. .WORD Trackr_33- j1 y) ?9 L3 c1 e! Q3 J9 l
  1280. .WORD Trackr_34
    2 `4 e( A0 D: y- `
  1281. .WORD Trackr_35
    2 Z# m' ~3 q. Q" b( h+ ~
  1282. .WORD Trackr_36
    , P! O! ]# z2 ?+ t5 ^, t" Q
  1283. .WORD Trackr_370 W! j- J  B7 X2 L& ^' M
  1284. .WORD Trackr_38  R( V2 C+ w/ `( T6 Y' T" F, q
  1285. .WORD Trackr_39
    2 A2 \8 u7 l2 J: \/ f& i5 A* {
  1286. 8 O/ f' @0 N  X. |% c- ~
  1287. ;------------------------------  l9 t) A9 C, a' p' T  d2 I
  1288. Trackr_Name_Data
    / j0 E1 u' }, y2 C) Q# q1 b
  1289. Trackr_01 .DB $05,"BGM 1"% D$ K+ K' V  \
  1290. Trackr_02 .DB $05,"BGM 2"
    - k" X; U1 |: U
  1291. Trackr_03 .DB $05,"BGM 3"3 R- S  H1 ~. ^
  1292. Trackr_04 .DB $05,"BGM 4"
    * o  f  [; _" G/ z; O6 l
  1293. Trackr_05 .DB $05,"BGM 5"
    ) i8 `9 e4 p: l7 ?- d3 c: x
  1294. Trackr_06 .DB $05,"BGM 6"
    5 R" j+ ?8 `0 N+ q* i
  1295. Trackr_07 .DB $05,"BGM 7"
    ( t2 C* D1 g6 F3 K4 l
  1296. Trackr_08 .DB $05,"GREAT"( m$ C( m+ ^# t2 S% f' D  r; Z
  1297. Trackr_09 .DB $08,"BOSS BOM"
    & f  s7 B" m8 K6 l
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    1 P' F2 C2 Q4 A. l6 E
  1299. Trackr_11 .DB $07,"P CLEAR"
    - w. I  Z2 j; h4 Y. _
  1300. Trackr_12 .DB $07,"A CLEAR"$ C9 ~8 c8 j0 z0 Q6 u
  1301. Trackr_13 .DB $04,"OVER"
    ! g8 F7 B* `8 o, ^0 R- p0 t
  1302. Trackr_14 .DB $06,"ENDING"
    , \& y# g  j9 x/ P/ `5 u  N
  1303. Trackr_15 .DB $04,"SUTA"4 I( h; m, Z* g$ y* Z$ p
  1304. Trackr_16 .DB $07,"THUNDER"/ Y# }5 \9 Y, x+ O* m9 d0 b
  1305. Trackr_17 .DB $04,"SHOT"
    " J2 n  t4 q) \; h4 F
  1306. Trackr_18 .DB $05,"LASER"9 E7 ~" S" _) c
  1307. Trackr_19 .DB $06,"SPREAD"$ t4 f& \, u( I$ y% `# I
  1308. Trackr_20 .DB $04,"FIRE"# e* P5 i# f8 b& l0 J
  1309. Trackr_21 .DB $06,"B SHOT"3 J; N) _! D) Q% R' X3 M: @
  1310. Trackr_22 .DB $08,"T DAMEGE"
    6 z; ]" h* u9 }) S1 h& b
  1311. Trackr_23 .DB $07,"HARETSU"
    + w0 G) W( X: G- C
  1312. Trackr_24 .DB $05,"T OUT"
    ! |& O" e! S  t9 T, W$ `
  1313. Trackr_25 .DB $05,"Z OUT"7 d: ]0 w0 R% e9 }2 O4 ~+ v
  1314. Trackr_26 .DB $05,"A OUT"" L! O7 B9 U" u* c
  1315. Trackr_27 .DB $04,"ROLL"
    $ p9 v) J$ B7 ~9 {. L. b, c; Y
  1316. Trackr_28 .DB $06,"APPEAR"7 t0 ?* t( w! W  W6 ?, U
  1317. Trackr_29 .DB $05,"POWER"0 x7 e4 W4 V7 }& Q% F2 t
  1318. Trackr_30 .DB $07,"BOKK BK"& z: r; M' W& R& c
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    + z. {- d3 w6 l6 Z+ @
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    : C8 j' |* X- _0 {# q% C& e
  1321. Trackr_33 .DB $05,"ARUKU"
    8 G: n' X+ w  L! i' h" J9 o
  1322. Trackr_34 .DB $06,"JIWARE"8 B$ V* Y* M4 l
  1323. Trackr_35 .DB $05,"SILEN"
    % S5 K% _2 ]! m2 ~( G; K9 G
  1324. Trackr_36 .DB $05,"P 1UP"
    9 x& B6 e) @& |% W* w7 U
  1325. Trackr_37 .DB $05,"P OUT"* O5 ]7 T/ i8 \+ L! z) a
  1326. Trackr_38 .DB $05,"B OUT"
    ' }- ]# f+ J0 ?0 H6 H  U! Z3 [: x
  1327. Trackr_39 .DB $05,"PAUSE"* t) R. n& G6 c) N% I! f
  1328. ; a4 R" f1 a) ?
  1329. .ENDIF
    7 ~$ C9 j. h6 S5 Y8 C
  1330. & @$ G( c0 X# {
  1331. ;------------------------------
    ! n5 e  x; s$ |; J, I) J
  1332. Static_Text_Title_Data;静态文本数据& d, ]" d3 b3 w& }5 x
  1333. .DB 129 S6 A  f) ?/ R! G% J2 ?1 z, @
  1334. .DB "SUPER CONTRA"
    " V$ p% K+ Z- S# {# R' M# f1 U
  1335. Static_Text_Author_Data
    - z# I0 |/ W; v# t& e9 i! r, I6 g" w
  1336. .DB 23
    & a1 ]1 O. ^; Y4 p! o+ p% X  O5 O
  1337. .DB "EXTRACT BY FLAMECYCLONE"9 Z5 D7 |5 Z8 h! m% B! T$ @, U& x# S
  1338. Static_Text_Date_Data
    9 Y! ^8 u5 @; l/ l+ r  m
  1339. .DB 10
    : @" q/ r' _$ {1 s/ Y
  1340. .DB "2023.07.11"4 H3 J+ T8 P4 p7 {' X8 F
  1341. ( R0 Y% x; N; z+ F, G; B( D2 u
  1342. .BANK RESET_BANK & BANK_DATA_MASK( s: {& d) U! O# C. R
  1343. .ORG RESET_ADDR
    1 d- T, Q; U2 p! E
  1344. ( V5 `9 d" w2 C+ t0 ~
  1345. # B+ ~2 X! E6 o, v4 q, I% L
  1346. ;==================================================  _- X$ L' s& a7 @: z* l
  1347. ;切到主程序bank' h1 I6 k" c4 H# a' O
  1348. SwitchMainBank) o9 l$ `$ k6 T4 V' n# ]) U. R$ l
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    3 Y: H# o- l" m8 l  n, w) Z
  1350. JSR SwitchBank8000% c- W0 A) [0 q. c# j9 E
  1351. RTS
      y7 y: h5 _. t

  1352. 9 ^- X' |; D. d& I
  1353. ;==================================================
    4 b/ g1 W1 Q* \1 T+ _! k# A0 B
  1354. SwitchBank8000;切换bank到8000-9FFF
    / U0 ?' t6 c9 n% E
  1355. PHA+ H% R: p" D) P# z
  1356. LDA #$06
    2 e- D) E# r; |% z8 d7 f
  1357. STA MMC3_BANK_CTRL
    4 K# v) i5 C3 Z2 |8 s
  1358. PLA
    4 i' U8 ?4 Z8 I! u( }+ E
  1359. STA MMC3_BANK_DATA
    - s+ d2 [# n/ |/ H( Z0 V
  1360. RTS
    / A; ^6 ]0 s) F. |7 d0 E# h- H( ~
  1361. 8 A( h3 S; }* a& c+ \' z
  1362. ;==================================================
    . E( z  f' g" z" s/ }9 P) B
  1363. SwitchBankA000;切换bank到A000-BFFF
    + J3 H, f- j1 `
  1364. PHA
    + i; V; L  c- K; t
  1365. LDA #$07
    , k0 D: o, W: ]' A1 s
  1366. STA MMC3_BANK_CTRL8 l" k  Y* A% Y
  1367. PLA
    0 g, e* r4 P) L2 v/ I. a
  1368. STA MMC3_BANK_DATA
    ' t9 T5 X" S" }7 x
  1369. RTS
    $ ]( y) L1 M/ M1 N* W
  1370. 6 [0 }! u, {. n
  1371. ;==================================================
    0 F' w+ I! S, @: l2 a
  1372. Sund_Bank_Init;音乐bamk初始化
    + W; j# N  C; n& e
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK7 b) `8 N8 A6 D4 O  t
  1374. STA Music_Bank_8000
    / E+ ?, u8 i" I% ?
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK$ @$ H3 s5 f6 Y8 J
  1376. STA Music_Bank_A0002 |% S, l6 {4 M# g* ~6 ^  ~
  1377. RTS  i, B- P- \$ x+ l& t  q
  1378. % O! d5 [* D6 |; u
  1379. ;==================================================
    5 S8 n2 k0 \: F( B9 R3 i- G/ Z( o7 F
  1380. Sund_Bank_Set;切换音乐bank: {& y/ Y' B( {) N
  1381. LDA Music_Bank_8000
    9 S8 ?$ v1 J; O' T1 @0 e# g
  1382. JSR SwitchBank8000
    ( n- d: c: d+ i  L
  1383. LDA Music_Bank_A000
    5 v9 X9 Q1 Q9 P4 R
  1384. JSR SwitchBankA000- [3 @5 O; p; q1 @
  1385. RTS
    2 {* f$ ?& k' C+ g. F% X8 R

  1386. 0 h: N$ R# O2 ~% h3 z2 h/ u- o
  1387. ;==================================================5 i3 b2 E' F8 t7 G1 \. F& I2 Y
  1388. Sound_Init;音乐初始化
    0 b; X, J; n0 `& A
  1389. PHA
    4 ^9 F  K( ]( [. v) a2 |8 P
  1390. JSR Sund_Bank_Set  E; Y0 r3 n) p6 w
  1391. PLA. W2 V; V3 i( x% k, d
  1392. JSR Music_Init_Addr% U: |' K3 {  l- H5 [- Y# L4 t
  1393. JSR SwitchMainBank2 u; l, C, d$ o( P
  1394. 5 V/ A1 l: t9 ^1 B: ~% `+ `
  1395. JSR Music_Bar_ReSet. i/ Y0 m- R; J' a+ q; I5 t
  1396. JSR Time_ReSet
    - v1 ~" D% h" ^$ k9 B1 Q8 m
  1397. LDA #$00
    7 v& [; p0 b7 W5 F, f. K+ G
  1398. STA Music_State
    8 q, i. N) P2 ]* e6 M) g
  1399. JSR Music_Stata_Show
    " k6 R+ [3 I/ E" L9 I  l" i
  1400. .IF Track_Name_Pos( U$ U) ?% s* B* {; J+ b
  1401. JSR Show_Track_Info
    ) `$ T4 i( m% Q; t; d
  1402. .ENDIF" ^! \% r2 c0 G! H2 m
  1403. ) M, m4 P& @# F9 g; f' b- X
  1404. RTS
    * C/ q, u. n3 X! Q# [
  1405. , w% `/ F7 \# L# i2 `
  1406. ;==================================================
    ! c! _2 a, b7 x
  1407. Sound_Play;音乐播放
    7 Z  N. ]1 i2 V+ }& _- u2 }
  1408. PHA$ o9 r2 D! p! F+ o# G4 C
  1409. JSR Sund_Bank_Set
      Q+ N/ a/ \8 s# N! ]2 O
  1410. PLA% t- {5 |6 I, b1 \* B9 R
  1411. LDA Music_State
    . B: L- d' C* }
  1412. BNE Sound_Play_End
    5 z2 W: Y" c! }) S. t
  1413. JSR Music_Play_Addr: ?2 Z$ ?# M' o+ w8 u. O; M5 t
  1414. Sound_Play_End8 u2 \' o' i. E/ [
  1415. JSR SwitchMainBank7 f7 F, |. f! H
  1416. RTS
      M& N. I' O/ {! F$ U- r

  1417. . _9 r) W7 N2 J" j- B8 p
  1418. ;==================================================
    0 l: F: b* w3 ^& c
  1419. .IF Music_Reset_Addr! C$ q% l: }7 D$ z
  1420. Sound_Reset;音乐重设(如果有的话)
      u2 i' _1 C. R6 d
  1421. JSR Sund_Bank_Set7 R& j3 i% F3 a% X, _/ y
  1422. JSR Music_Reset_Addr7 m" o8 d7 b- l$ F3 @$ _3 z
  1423. JSR SwitchMainBank0 R/ @& e6 x! C1 t, G3 P
  1424. RTS
    ( D( k; w, o7 k2 S" K5 G3 @1 K7 W
  1425. .ENDIF
    " J: e# d: b* G$ A

  1426. - v  L: e4 \1 F* B
  1427. ;==================================================0 x! T+ Q9 z' W7 V- A+ d  _* C
  1428. MainLoop;死循环' ]9 d1 S; A) ^! B& |1 B
  1429. JMP MainLoop
    ! h) }, b6 G2 L$ E

  1430. - A* j4 _% p& _( w
  1431. ;==================================================
    - n- i! B3 Z/ @* U9 X* o
  1432. NmiProgram;Nmi中断处理
    + h1 N4 q% M' p9 s% Q
  1433. PHA
    1 k; B  ^7 S5 [/ B' G5 Q
  1434. TXA
    ' I3 _  E% o1 \; f3 u4 Q( ]
  1435. PHA
    5 x: V- R* P  m7 w( N% G
  1436. TYA. ?! M1 c5 k9 U# |9 s/ c
  1437. PHA3 T, D6 A" t0 x5 H
  1438. $ {9 _. ?3 J' ]# J, K% i! j; F
  1439. LDA PPU_STATUS  i! g+ n% M8 g8 D% F; Q. |6 b: C
  1440. LDA #$004 J/ s% G% b& z
  1441. STA PPU_CTRL- C" T2 `& n; m( E% l7 y7 [0 d2 V: |
  1442. - l6 L+ F# W4 i  G9 g
  1443. ;切换主程序bank% ~+ u$ J2 k! p% o  X, J1 h
  1444. JSR SwitchMainBank
    1 o0 c0 `+ F/ i5 L8 N) J$ Z+ v4 _
  1445. ; @. X" x8 `& K6 e2 x) O
  1446. ;NMI处理; _7 @8 ~% {- L" D. ~- a
  1447. JSR NmiProgramProcess) v3 x3 N. y! t. B: Y% i$ j' T! ]8 R
  1448. % [4 m2 V8 S: b( [4 ]% ]! `
  1449. Nmi_Proc_End! ^* P! Q$ p2 G, g1 o
  1450. PLA
    ( X0 V* m- |8 i3 k3 |  l) Y
  1451. TAY: W) `4 p$ L- y! e
  1452. PLA8 A- E5 h5 ~" K6 M) g: K
  1453. TAX& t0 l( i( L- I$ c
  1454. PLA7 z: J3 z! B: {4 u1 M
  1455. 7 y& ~9 d7 Y# M( I. ~' P" e
  1456. RTI6 w. S! z& k0 a
  1457. 1 M. I% P, ]' I: z% \; ]( Y
  1458. ;==================================================
    , F" c2 Z& A6 r' i" L) e
  1459. ResetProgram;重置中断处理
    ' S/ r. l' O" P: _+ z
  1460. SEI) {; `/ g$ B; i5 P+ P
  1461. CLD
    % k1 E" L. \$ X, a# \  s7 x  Y
  1462. LDA #$00; P) P! t! M7 n" ^& W- j
  1463. STA PPU_CTRL
    ) C4 j: ^7 f& f! V  \0 y! [* c; E- I6 f
  1464. STA PPU_MASK
    - \; G& Y! C" t8 i% {. P
  1465. 9 v' z& k0 r' g1 X0 x) V
  1466. JSR SwitchMainBank- m! j( U4 ~7 v; @
  1467. JMP ProgramBegin/ d& f# M( m. x. o$ l

  1468. 2 n. A7 y  j# k9 k1 a' P
  1469. ;==================================================  U& Y6 Z- [2 ]; w/ v  M& b+ K7 {( c
  1470. IrqProgram;Irq中断处理
    & e# F2 z  S' U1 ]: K( A; w' C8 M
  1471. RTI
    % k% o1 ?% J5 O* O5 r1 P9 [$ K
  1472. " u' U8 I7 [  N. R3 Y' Y$ O# G
  1473. .IF SOUND_BAR_SHOW_ENABLE
    $ k' j' R* N3 e, [1 R
  1474. .ORG $FF80
      k8 k, n  L! G
  1475. STA $4000,X3 D6 [% s/ u) v' w) [1 P
  1476. STA Sound_Bar + $00,X
    , c8 {2 l5 s% z4 G  g8 p5 ]# [
  1477. RTS
    . r% E1 [+ M1 K+ o8 ]" E! F/ U) @/ `

  1478. - G: w+ p/ k. C
  1479. .ORG $FF889 I# i; ?; w* i3 c
  1480. STA $4000,Y& K# E: l* J+ I; ^6 J
  1481. STA Sound_Bar + $00,Y
    * \: {2 `, Z- x: F
  1482. RTS5 |0 g7 y5 g0 s: H; U
  1483. & S  z- W% L' z8 q4 j$ L. u
  1484. .ORG $FF902 s( G- F) _; c% \7 |/ W" k
  1485. STA $4004,X
    4 }, S1 p9 j! n* f/ L, T
  1486. STA Sound_Bar + $04,X7 B0 d; `4 R) n3 d/ c& M
  1487. RTS
    ; M* t0 e, L4 F! w3 e0 O

  1488. 2 W4 B! |3 {* @
  1489. .ORG $FF983 E4 t! r, l5 q- J
  1490. STA $4004,Y
    2 J% q4 S/ \0 w" n$ x
  1491. STA Sound_Bar + $04,Y  l$ z" v6 p/ J# ^& q7 e" B: o8 S' q0 \
  1492. RTS
    ' }% x  T1 U& w" X

  1493. ; ?) M( B9 J3 o, v( P  X
  1494. .ORG $FFA0
    ) x' ~8 k6 u$ U: {/ R
  1495. STA $4008,X
    ( V; u: e) q) ^5 M, B2 l
  1496. STA Sound_Bar + $08,X
    7 Z, o& O: w4 ^# ?1 L1 Z
  1497. RTS
    + p5 r+ d' I* e6 {
  1498. 3 V% d# u& h* |: |' Q& }3 Q
  1499. .ORG $FFA8  C0 R% d6 L3 Z
  1500. STA $4008,Y; w1 w) x7 B& F: ^8 H7 {/ g/ u
  1501. STA Sound_Bar + $08,Y: X* O" @8 x" Y" B4 w; E
  1502. RTS
    " L5 F! j4 }5 @1 m, _

  1503. : C7 b: ~0 u2 E, x2 T1 s& D
  1504. .ORG $FFB0
    1 x' x3 m3 w5 j4 ~7 l! B3 r
  1505. STA $400C,X
    + @0 S* k8 s; I+ z5 h
  1506. STA Sound_Bar + $0C,X! Q7 x5 I& K9 f  Q; B* g0 B' Q
  1507. RTS
    ( @% x8 s1 A! q5 I8 z8 S4 K' [9 g( M

  1508. & D4 Y: o0 T+ k8 }
  1509. .ORG $FFB8# {1 i) N0 G6 I1 t' `% j5 g7 x& i
  1510. STA $400C,Y
    ; [  ^, u" ?! Z
  1511. STA Sound_Bar + $0C,Y
      [5 c, s2 I+ H% l3 B
  1512. RTS
    " R: {9 f0 q  Q6 Y
  1513. / s/ _/ X& q% K, i
  1514. .ORG $FFC0  }- X( D4 n8 X
  1515. STA $4000
    9 z5 F& @9 G6 V1 ^/ B; O
  1516. STA Sound_Bar + $00
    $ v9 G" f6 G- I1 f
  1517. RTS* s! j+ E' q/ b% T# h% w/ N
  1518. 0 F! e) q+ v5 I0 t
  1519. .ORG $FFC8  g# N8 [$ R9 o
  1520. STA $4004
    8 O4 b, C6 g! I/ O
  1521. STA Sound_Bar + $04! n8 n' W% y2 B2 b( v
  1522. RTS& h. j$ H# ?3 J' G6 H9 k
  1523. ; L0 q! ~' \' h* S; L3 ^# G0 [
  1524. .ORG $FFD0/ z4 |/ j. q! Q. N) _$ A& s
  1525. STA $4008% w7 b8 a( ^7 {# F) [( m3 S
  1526. STA Sound_Bar + $08/ g' U7 S% E. c8 g! p; p1 ]
  1527. RTS
      I2 M2 x0 O! L! \3 n$ K" L9 x
  1528. 5 r; j2 f! a, O" i4 i% B" k
  1529. .ORG $FFD8
    , X% e: \7 @. e7 I
  1530. STA $400C
    # c. M! o+ G* v$ H$ T$ V
  1531. STA Sound_Bar + $0C& W7 _  \  O0 c
  1532. RTS. `6 q' r' z2 E

  1533. 7 T: b+ Y- l# B4 C: G4 ^* Q) u
  1534. .ENDIF+ O* j, `, f) H% x7 |4 @* i5 B! y

  1535. 5 K3 N: B% C& C6 L1 M! h
  1536. .ORG $FFFA  D7 }0 p3 n3 {5 T. F3 r! H2 q
  1537. .WORD NmiProgram
    + g0 v: q' }; W  B" ^. `
  1538. .WORD ResetProgram
    3 r6 J5 q( W+ I! U' [
  1539. .WORD IrqProgram
复制代码
: z& }" I% m6 D  x4 U1 S
7 g, ^! D* C  z1 k/ q
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1266 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3263 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-16 03:32

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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