EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 ! {1 e$ f( S0 X  C, X+ K# B

/ U4 b$ p2 r/ v1.魂斗罗" p7 Q1 r4 w5 |6 V2 T0 s! t+ x2 D
2.超级魂斗罗
8 e8 F# A9 s! `4 P& r' o$ j1 i3.赤影战士4 |- R: B1 ^, f# |, x
4.忍者龙剑传2/ @9 R, E( B" h( Q+ t

5 ^* ?; q/ ^& C# m
2 u1 V( g" [( {. _% M- N7 ^
( h# u' `& X' r9 Q$ Y% B: B9 k7 ]- k5 d
源码:8 Z0 |: o3 q" ~& e
  1. ;[FC音乐][播放器模板]% o( P+ j* y7 i, j4 l2 S
  2. ;FlameCyclone 20230710
    : }: D$ C) R. v1 \
  3. 9 l6 `+ A2 _& T  J
  4. ;文件头6 T5 n+ Y0 H! R
  5. ;======================================================================
    " n- n7 g8 Y9 z( Q, n+ W
  6. .INESPRG 4                                              ;16KB PRG 数量
    . f+ z$ q$ [5 Y) u
  7. .INESCHR 0                                               ;8KB CHR 数量
    7 }* w  P' }) u+ B
  8. .INESMAP 4                                                   ;mapper 4( H6 R' E- e3 F; H/ u2 {% k+ K1 T
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直0 m& `5 O: |0 }  v

  10. : I& h# }. s- L: E! O. j
  11. ;==================================================" O  x1 S$ z. t# {$ q$ s. Q
  12. SOUND_BAR_SHOW_ENABLE       = 1( Y& F. y- C. j1 g& I; |
  13. ;==================================================2 H2 J/ R! f2 v4 A* i, Z
  14. BANK_DATA_MASK              = $07! t5 ?6 U# Y; q5 G4 y  z1 }" k
  15. ;==================================================
    5 }# s6 M' t; s2 C7 c
  16. SOUND_DATA_BANK_0           = $00& y' O; t/ L7 a5 x/ b
  17. SOUND_DATA_BANK_1           = $01" i  x4 [: P* j5 m, G! e
  18. SOUND_DATA_BANK_2           = $02
    0 v0 K9 `& D* u2 ~! _
  19. SOUND_DATA_BANK_C000        = $06* G9 E! a2 c4 [4 g( |
  20. 3 G5 b- N3 L8 t2 T. r  K, B* U
  21. ;-------------------------------------------------
    # Y1 W, B  D5 s
  22. CHR_DATA_BANK               = $04
    5 j: J( t, f  J
  23. CHR_DATA_ADDR               = $A000
    ; ^  g8 E3 _4 {
  24. ;-------------------------------------------------' \  i+ o8 }' n) b- A# e5 _
  25. PROGRAM_BANK                = $05
    " O* p9 H2 _1 B% z( A* m3 U
  26. PROGRAM_ADDR                = $8000
    6 |1 ~/ z4 ~) [
  27. ;-------------------------------------------------- K- K: g5 o/ q' X& n; O( v5 i
  28. RESET_BANK                  = $07
    , s+ T- A3 q' F7 M2 R$ A
  29. RESET_ADDR                  = $FE00
      m1 c# n0 o* }8 f% \
  30. ;==================================================( }* s4 B1 V; `7 j7 h
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址5 J7 I% j: h5 _( i
  32. Music_Play_Addr             = $813C ;音乐播放地址8 P* V$ a* K! s0 @
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址' i' u0 Y( k# V4 @3 B8 o
  34. ;==================================================
    8 h. u+ o8 I0 \: G( v) H
  35. Music_Song_Total            = 039  ;全部曲目总数: Z5 U7 c; a$ Z' I/ N1 F, T/ W
  36. Music_Start_Song            = 007  ;初始播放曲目
    ( \$ ]& y7 \/ u: k$ R/ o
  37. ;==================================================/ n* z" i) @# m- f& E1 n; \0 `

  38. / U6 _3 ]5 R( P( P3 K; G+ m
  39. ;==================================================- B5 R. \( _2 M* J
  40. Title_Text_Pos      = $210D ;标题文本位置) x7 U9 L; C  \* d5 L4 s  X, Z
  41. Author_Info_Pos     = $2284 ;作者文本位置) Q6 R0 r: J4 o
  42. Date_Info_Pos       = $22CB ;日期文本位置
    9 B4 D8 _9 W' D; o& S9 \
  43. ;------------------------------
    # }$ z6 Y# F- D  B& K5 x- Y
  44. ;------------------------------
    ( T5 w6 B# l( m3 F% K  I
  45. .IF SOUND_BAR_SHOW_ENABLE8 c+ i; R% i& P- ?
  46. Play_Index_Pos      = $21B3 ;当前曲目位置# B3 Q" p6 }: s/ m
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    1 n/ l3 H8 N; N
  48. Play_State_Pos      = $2233 ;播放状态位置
    " `/ r, y. H# x& k+ u
  49. .ELSE
    0 U+ F! M" a1 R8 B/ {! I# r
  50. ( g1 w3 P8 R; P, d
  51. .IF Music_Song_Total > 992 I2 c. h1 |/ ?+ z
  52. Play_Index_Pos      = $21AC ;当前曲目位置% f# M( u7 W6 {
  53. .ELSE
    7 Y: i7 V; e$ c1 H( Z& x# I; W8 e

  54. 5 a# X4 h. G7 R7 }: a
  55. .IF Music_Song_Total > 9  K2 U+ L$ Z2 w* |# j, k
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    $ X3 c7 {! }. j0 w
  57. .ELSE* T  J& i* a! w' d
  58. Play_Index_Pos      = $21AE ;当前曲目位置# }4 ]4 B& y! ~
  59. .ENDIF" d5 V' q& p; i  ~" v
  60. ( A$ `. p5 h* _/ ?# \' W+ d* Y
  61. .ENDIF& C! J# X# j9 ^) I7 y

  62. * P2 K! }7 A) S0 v; g* e/ B

  63. , n/ n8 A, m9 s  U2 y4 L
  64. Play_Time_Pos       = $21EC ;播放时间位置
    $ {3 e3 T$ c0 Y8 G4 Y; S
  65. Play_State_Pos      = $222C ;播放状态位置
    0 K' O+ b# X, E0 F) H% U
  66. .ENDIF( p2 Q. D0 c6 P  _6 c, C1 g* W
  67. ;------------------------------+ u3 U3 V) y" `; I
  68. Track_Name_Pos      = $216B ;曲目文本位置
    0 \) G5 C$ y. Q- S& T+ \6 ?0 }
  69. Sound_Track_Pos     = $21A5 ;声道文本位置% C% o4 H0 q; O. b: {
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    + X  K' |7 C. f4 O, L
  71. ;==================================================( B7 L$ {0 G& W& K8 b! P
  72. Scroll_X = $00! N6 Y' i& s. Z* v
  73. Scroll_Y = $06
    + s5 c# N8 S& }, k& X0 `
  74. ;==================================================
    " ~2 x) G* g* j- [/ B+ h) w6 R4 b
  75. RAM_Cln_1       = $01001 r; ?4 T( d" C9 J$ }" p
  76. RAM_Cln_1_Size  = $80
    ! `7 g9 ?& x% m2 W
  77. RAM_Cln_2       = $00E0
    ) [% Y6 b3 {+ _7 a5 z! E
  78. RAM_Cln_2_Size  = $20- Z0 Y  S3 R, x- K) D2 V0 R
  79. RAM_Cln_3       = $00E0: r7 Q3 L: ?6 z
  80. RAM_Cln_3_Size  = $20
    # ^- Q' \2 T' Z$ s2 L$ M) j

  81. ( R6 }3 q$ p1 S9 r8 s5 j% Q# T
  82. ;==================================================4 z$ N7 `& R. b3 q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器/ x" r4 L6 J( J8 c9 c+ N  ^
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    + G; Q3 m2 C$ ?3 _5 t
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位9 {) e# Q; }( ]/ y/ M& x
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    + U3 H* A' b4 y) }
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    0 k3 H- Z5 j; A
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 0 i2 s( d+ Q$ o! L
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加6 a7 l  W+ y7 Q, p/ O
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    " L* y! J/ I  e
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    * D9 U% [$ ^# F' ]% P- O" O# Q
  92. APU_STATUS              =   $4015   ;声音通道切换  H# H; T0 ~$ Y1 @. ]. t
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ; u  U7 l2 O' C9 i% q8 E! Y
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    1 Q  y6 Q' S4 B9 L
  95. ;==================================================9 r+ D1 T# V( C' F4 W5 X( D
  96. MMC3_BANK_CTRL          =   $8000
    ' S% }! Q' w; @0 [, e
  97. MMC3_BANK_DATA          =   $8001
    ! U1 }- O& d- @, C# t: h" h
  98. MMC3_MIRRORING          =   $A000) G: \" {. @; D- v4 t& g
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    . r& x. \8 z% Q+ p3 i( |
  100. MMC3_IRQ_LATCH          =   $C000
    . c* J3 U* Y& \, C
  101. MMC3_IRQ_RELOAD         =   $C001  z0 @! v9 _# b3 V& Z  o9 |8 G
  102. MMC3_IRQ_DISABLE        =   $E000
    0 e7 C+ R/ _7 ]7 u- F/ H
  103. MMC3_IRQ_ENABLE         =   $E001
    5 ?9 G' e: m6 R  D6 a% Y+ N
  104. 7 ?3 ~6 Y4 d  _8 u1 ]7 a
  105. ;音乐数据块" h8 }: f0 h' a$ n9 x& \/ x5 k% b
  106. % J9 Q! |1 b1 E* A% |. C' j
  107. ;======================================================================4 G& O5 X7 a$ Y" y) i) h) l8 T7 [
  108. .IF SOUND_BAR_SHOW_ENABLE$ U+ @6 l( m; G# T9 R2 ]
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK' K; z& y' V1 u
  110. .INCBIN "sound_bank_bar/music_data_0.bank"' s! w. u3 n* H
  111. # S# @: X2 }; }6 \0 g. Z
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    . U3 Y& L, j6 G' c- u
  113. .INCBIN "sound_bank_bar/music_data_1.bank"0 H* n% m# G, A6 Z
  114. 8 o) C! j9 Q3 G4 N/ M
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ! V1 {9 F/ w) R/ {0 D" i  ]. _
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    & R8 @8 B) H( h* f1 ^, R+ p/ ^
  117. 8 b5 Q! B2 l2 g
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK* }) ]- F" ?- e9 }, a# U: \
  119. .INCBIN "sound_bank_bar/music_data_3.bank". C, v! ~  v+ U9 J4 G

  120. 3 t6 s1 C7 B$ C# |0 d" {" `
  121. .ELSE
    1 I8 C) z8 f$ V0 w' h" o
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    / X, |4 O! S7 V1 i9 m% B, R/ }
  123. .INCBIN "sound_bank/music_data_0.bank"
    / h: I& Q  V1 |: X4 p
  124. " u- e) }+ Y- P9 m" ^8 E
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ' H  [  k9 J6 z4 R. ~; b8 X
  126. .INCBIN "sound_bank/music_data_1.bank". y) S: f3 H  r9 C+ S
  127. & p) l4 y% N# n9 v
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK& E$ F) r9 C$ v( ^2 A7 \2 f
  129. .INCBIN "sound_bank/music_data_2.bank"
    6 I) G* r# [. h" Z
  130. 1 i: B2 m  w/ w! W( j( @+ Q
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    $ b4 q1 p5 q: r: s" ?; `  Z/ u
  132. .INCBIN "sound_bank/music_data_3.bank"3 v& {! U% M% F( n) }
  133. .ENDIF
    ; M; X0 r! n/ O# k" j( Z  q

  134.   f5 E, A5 e3 Z1 j* |4 n
  135. ;CHR图形数据
    - J) E/ k3 U; H0 w& `
  136. ;======================================================================  J4 \/ u  B9 P: ~1 i
  137. .BANK CHR_DATA_BANK
    $ c9 o/ d5 e" h: ^4 b  L
  138. .INCBIN "chr_bank/chr_data.chr"
    : d5 o* X" ]& r/ j! |( d# _

  139. . _# s0 s" y; Z; z
  140. ;==================================================
    3 {1 x3 E; k, t$ R5 _" ^4 a) F
  141. PPU_Addr        = $03006 y; o  X% U. g# o# H; o
  142. Palette_Addr    = $03C00 z# C! c' A% V) e# ^$ L7 s( O, ?
  143. Sound_Bar       = PPU_Addr+$E0; m9 a- w$ `9 Y# F' V2 e
  144. ;==================================================: q) ]8 a! q9 d5 x) R
  145. Palette_Update_Addr     = Palette_Addr+$0D
    ; t) G# T' U! x0 J2 X
  146. Palette_Update_Max      = $2C' f) J" ]6 t# i( K: Q
  147. Palette_Update_Min      = $21* O& C8 R) }& p& s% k/ Y
  148. Palette_Update_Interval = 600 @& d. K4 w  }. v. j0 a2 {% v
  149. ;==================================================) e" E! o1 g% K* p. y
  150. Sound_Bar_Cnt       = PPU_Addr+$F0( l" ^4 X% p2 X. b4 C
  151. Screen_State        = Sound_Bar_Cnt+$014 O& Z$ Z6 t; |, \4 H% x# \
  152. PPU_Cur             = Sound_Bar_Cnt+$02( `; C/ b, U& |0 y% K# E
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    2 O5 Y1 e7 I2 V4 m" R, a2 D+ \) `
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    : Y2 s( w% |& N- r- C
  155. ;==================================================8 U- o6 K% j0 {% O2 G
  156. Data_L              = $70
    ) w4 T+ ]" z7 t  C+ p; t
  157. Data_H              = Data_L + $01
    / k8 l4 a7 x; @( Q9 f, E& P
  158. Data_Cnt            = Data_L + $02
    2 {, f$ U- v+ W1 Y% w
  159. Data_Buf            = Data_L + $03
    ( a8 r' t% U1 E/ {  j5 d
  160. Time_Wait_Cnt       = Data_L + $04" `$ y# v/ k# j
  161. Palette_Wait_Cnt    = Data_L + $058 }' Z* I# X8 ]) Z/ c( k3 _1 V
  162. Palette_Update_Flag = Data_L + $067 K8 h% `" Z+ P' \1 T
  163. Show_Track_Name     = Data_L + $07
    3 S1 a5 T) ~9 ~& K) C
  164. ;==================================================
    9 s; S" k' S8 I  `2 t, b; n4 B$ |
  165. Key_Keep            = Show_Track_Name + 1  f4 }/ i. H! F" P0 x! Q  u9 H4 Y
  166. Key_Once            = Key_Keep+$01. G$ K) Z6 p# d# I
  167. Key_Kemp            = Key_Keep+$02. |, D2 f6 u1 u1 K" v
  168. Key_Temp            = Key_Keep+$03( V' C# |: Q. v' A
  169. Key_Getv            = Key_Keep+$04
    ! q5 ?7 n) }/ @  ?1 r$ l
  170. ;==================================================  m7 h1 J* L7 b% V( l% w1 X
  171. Music_Cur           = Key_Getv+$01
    # p4 d3 }6 t" y1 G+ y
  172. Music_Last          = Music_Cur+$01
    $ |- u: A6 ^, |3 d1 c, c% L8 f
  173. Music_State         = Music_Cur+$02( M* e9 D5 Z, j
  174. ;==================================================
    4 B) L2 c* F- r' z2 f
  175. HEX_Data            = Music_State+$01
    3 L) @3 j$ }- E3 u2 H
  176. DEC_H               = HEX_Data+$01- @2 d6 d' u5 X- l* T1 p& t! q
  177. DEC_T               = HEX_Data+$02! h, O4 m. L! D6 {9 O; c' H  f
  178. DEC_L               = HEX_Data+$03* ~5 |; p/ C3 V+ K6 f1 ^3 E& i  V) n
  179. ;==================================================
    : \  v/ A8 N# p% H
  180. Time_S              = DEC_L+$01
    * e, c5 h: A/ m' n
  181. Time_M              = Time_S+$012 m* F2 o6 `, H1 B7 Z
  182. Time_H              = Time_S+$02
    0 p0 U$ H- e7 N5 \8 D1 S( G9 I
  183. Time_Cnt            = Time_S+$03
    0 P5 t% A% m) O! e$ C+ c
  184. . \( T. v  V" ^3 q
  185. ;==================================================( g4 O# U+ L/ r" A' d
  186. Music_Bank_8000 = Time_Cnt + 1
    % O  [9 n) v9 W' h
  187. Music_Bank_A000 = Music_Bank_8000 + 1* Y; m3 Y/ g) q+ T! P, }
  188. ;==================================================- ^# i' k( `. S( ~6 P8 b0 k4 {
  189. # o0 g" m+ t$ g9 x
  190. ;======================================================================/ w& J* F# d8 R! }; P
  191. .BANK PROGRAM_BANK% h) Y7 W( a' h5 |7 p
  192. .ORG PROGRAM_ADDR
    $ A0 \% \6 S7 M2 F0 d" d$ V

  193. 6 o% I$ W/ ]- `) ^3 F
  194. ;==================================================/ k2 h* n/ ]( J; c$ b; f/ U
  195. NmiProgramProcess;NMI中断程序处理/ e( A1 K$ c% ~0 _+ \! Y
  196. ;处理PPU图像
    8 o) S5 R( D0 Q' b3 _5 K' L
  197. JSR PPU_Proc
    ! @, b+ t. Y$ N! \5 ^. c

  198. + d( L/ H) q7 o9 L) k8 P5 u
  199. ;启用NMI中断
    " ~! {# }! ?* N
  200. LDA #$80' \3 ^: L9 y+ W7 w2 j8 L
  201. STA PPU_CTRL
    # J: c# T" k& Y
  202. 0 z, t" `; K- B# f* Q$ I$ \# U
  203. ;更新调色板
    + p$ q! p( C# m% e/ h- P
  204. JSR Update_Palette_Data2 T/ @& w- l6 o8 I! m8 X' j  z
  205. ! k% ?3 Z3 A1 I% N( t1 D" I( a
  206. ;显示时间(缓冲)
    + C* W* Y" G3 d. R7 {9 K" Z
  207. JSR Time_Show
    ) f. ^$ y  P  c

  208. 4 J) z! m: B0 X- S
  209. ;播放计时8 k0 u# j( J% X2 Y7 h( u
  210. JSR Time_Count
    6 S$ \' j: ~0 t+ O( p+ w7 ^
  211. ! X( w# e. W5 |0 I
  212. ;播放声音
    - ]: F  \$ w* i& J0 d% \
  213. JSR Sound_Play
    , g+ `; Z$ [, H+ F: U" p2 P
  214. 7 K6 H. O3 O- e8 H- |
  215. ;切换音乐(手柄触发)
    0 @; c' h! H" ]6 f3 b" ?3 x8 g& b
  216. JSR Music_Switch
    # x5 P7 w. g2 f* A) \

  217. , @, s# h; T+ h3 h5 G
  218. ;音乐显示(缓冲)6 p" @! {# ?% E7 d' p2 o6 s
  219. .IF SOUND_BAR_SHOW_ENABLE) U9 ~+ ~$ |! Z: P& P
  220. JSR Music_Vision
    / f, P0 M1 s& a2 d+ ^
  221. .ENDIF
    5 \! f* `1 ^; ~2 M7 e

  222. ! @2 w% W. c; [  y
  223. LDA Time_Wait_Cnt
    ' m, N; o3 e8 g  M% S" |
  224. BEQ NmiProgramProcessEnd
    1 ^. G) N3 T$ S: Y
  225. DEC Time_Wait_Cnt
    2 ?( K9 v# l/ I5 [) a
  226. NmiProgramProcessEnd
    0 e; H) g9 |7 p$ x5 V3 E
  227. RTS
    ! k/ T8 ]' k& B: ^6 _# i/ E3 k

  228. 9 c. J, ^' r/ u. ?. ~
  229. ;==================================================3 V, v$ }' t) S5 V  N% p' h. p
  230. ProgramBegin;主程序
    # g* Y9 m4 x, U# B, X8 u
  231. LDA #$00! }+ E3 l4 a# v# Y. U
  232. STA PPU_CTRL% f' Z; b0 W2 h% s- F& K2 `1 I8 Z
  233. STA PPU_STATUS
    2 j- ?  i6 |1 E* ~, v+ d
  234. STA PPU_MASK, V0 x8 G2 L' X7 F) C: U
  235. STA APU_STATUS
      V! R' n( y3 {0 x% _8 U5 n8 c' D
  236. STA PPU_SCROLL' o; _3 {7 y& K3 d& U: A
  237. STA PPU_SCROLL" F/ X% x9 ?2 _& R+ ^+ x" L
  238. LDA #$C0
    : c# Z) G8 c6 W5 k
  239. STA JOY2_FRAME
      h! K5 N: D% Y) q
  240. + Y# U" }, u3 m0 l2 M" [8 E
  241. LDX #$FF
    ! z0 i/ |6 ^! h9 C4 a( M
  242. TXS9 G5 l- h' B. k; O% R& P! H
  243. LDA #$00
    : b6 n4 \0 |: N) `1 g* B- D. r
  244. STA PPU_CTRL- @  \0 a3 a8 B6 U
  245. STA PPU_MASK0 y. p7 r1 f4 G
  246. STA MMC3_IRQ_DISABLE6 Y# k2 `/ X: u5 X# D2 v1 |
  247. ) f, x1 o6 O4 I5 y
  248. ;==============================
    $ d6 p* L- H) L
  249. ;调色板清空
    1 e7 C; e7 ?" I, m/ B+ i0 t! l
  250. LDA #$3F9 Z, ]- Z# X, }; }. E7 ?- [
  251. STA PPU_ADDRESS$ ^+ G5 c# d+ L8 M9 s  F2 `: t- _
  252. LDA #$00: b; _" Z5 u) J" a
  253. STA PPU_ADDRESS
    & }9 P9 S0 ~/ N9 g& E
  254. LDA #$0F
    " q, l& D5 J4 }) @+ V1 ^* d' W
  255. Palette_Clear' q- u, T+ m/ O9 [* V( S+ o! _
  256. STA PPU_DATA
    7 g- [% n) g3 N. y; Z) X
  257. INX+ u/ V* {9 S2 a: ?2 r; S2 K
  258. CPX #$203 E% B2 ?$ R! m) w% |
  259. BCC Palette_Clear, ]7 z: V: R1 B6 Y6 k8 U, u7 C
  260. LDA #$00* b! |- F8 J! }9 G+ i+ j. P( ~
  261. STA APU_STATUS
    9 w0 m/ z! n* G
  262. ;==============================9 Y+ w! L, i, Q$ q7 J) H4 M& U
  263. ;初始化背景调色板
    6 b. g4 S, Y( ]6 }; q
  264. JSR Set_Palette_Color9 l+ k& \  G7 Z: f
  265. JSR Set_NameTable_Attributes
    . Z2 W+ b$ _; d0 O) k$ F0 v# N
  266. * w* C, F* F2 Q! w8 _
  267. ;==============================
    ; e: s" S6 a! ^) U& n
  268. ;RAM初始化: p. N" _6 @* V; W: z& E
  269. RAM_Clear_All
    , H" D+ a( Y* ^! r0 U3 j: q% s" `
  270. LDX #$00
    : q( O& O+ n; [1 L2 F2 G3 G
  271. LDA #$00
    + J- S! s" I. q7 n/ _* e
  272. RAM_Clear_All_Start. B  T( B3 y$ y6 ~0 L! A
  273. STA $00,X
      N# P0 @6 q/ h% j+ N3 \
  274. STA $0100,X6 F4 }& V# K8 U7 U3 V9 [
  275. STA $0200,X
    - E$ I; e2 q4 v, x. O
  276. STA $0300,X
    7 F$ Q: i/ ?& U7 k3 [0 i+ y+ a- `, p
  277. STA $0400,X
    : s/ b  m; G! A# q- B) l
  278. STA $0500,X. T# o, A/ ?* R" N1 p: B$ p
  279. STA $0600,X
    , }- L% ~# \* y. b4 w* S
  280. STA $0700,X, P: r: t1 r4 ^7 t4 x2 W
  281. INX
    ( |& u: m: I7 f& l# U1 r8 ^
  282. BNE RAM_Clear_All_Start
    4 {& ?  t) b- g" S
  283. ' R) y! I' r6 Y: [! Q4 i! }
  284. JSR VramInit
    " u- g5 V1 E3 ~9 F7 E; b4 ~! S
  285. JSR Init_Palette_Addr
    % }1 G3 ?6 M+ W7 h# {, d2 n2 D
  286. ! O2 _: a" Y7 Z+ ~
  287. .IF Music_Reset_Addr
    # f- p( Z# |7 J6 I
  288. JSR Sound_Reset
    . M/ K6 c" L5 B) o! y  t
  289. .Endif) y) [( G2 b4 w( n5 A4 R
  290. # c8 O3 a2 m2 o
  291. LDA #Music_Start_Song-$01
    - o0 H; X& e$ f
  292. STA Music_Cur
    ( r2 h/ c) X6 f) w
  293. 0 H7 w+ {3 h1 `" j( X# {+ u
  294. JSR Show_Music_Text
    ' ?, O9 X" R2 ]% b
  295. 6 C6 b$ S/ T6 f  z$ v! K
  296. .IF SOUND_BAR_SHOW_ENABLE
    ; l+ h/ m4 F1 }3 E
  297. JSR Sound_Bar_Text_Set) b! \+ t& e  ~) y# f6 S
  298. .ENDIF
    , u# j$ r8 C. r

  299. 5 i+ O+ ]' C9 g4 p2 r8 h3 A
  300. .IF Track_Name_Pos
    " S( \# U, g1 z8 [
  301. JSR Show_Track_Info
    ( ]4 C6 J) o, @, ^4 F2 Q
  302. .ENDIF$ S2 t/ a/ m9 z* @( D

  303. 9 j. W) Q5 J0 ?" }- y' |, b* ~' U7 H
  304. JSR PPU_Proc4 A/ f# e4 W8 \6 o

  305. 0 I4 k7 I8 n3 D0 r2 D  b
  306. LDA #$0E( S! L& g0 P- _3 S/ ]2 a( D
  307. STA Screen_State
    $ l( p6 R+ l! ]: G1 T6 q
  308. 9 ?, R+ O) ]/ @% T2 X9 r  }- @
  309. JSR Sund_Bank_Init9 _0 l7 L' H7 u2 d2 Z) g- ?

  310. % m# _" ^2 m) j. ?3 y
  311. JSR Music_Show: v$ A& }0 H% D
  312. JSR Time_Show
    9 R1 v+ N5 K( u+ C* v7 T# ]2 l- }
  313. JSR Music_Stata_Show
    . @& s3 E/ X* c4 c) p, \
  314. JSR Time_Delay/ b+ j2 m% {2 _" ^% Y2 x

  315. # @" L7 P' o# T( k

  316. 3 W5 L5 t' o3 Q
  317. LDA #$80
    ; x* G: G+ w5 T& H0 L
  318. STA PPU_CTRL
    5 O, N6 Q. D' Z; Y3 |* Y, _) z

  319. ; k/ B( m; n( W9 n- _, |! D$ z% @
  320. LDA #$206 a- B1 f' A7 }3 Q1 w2 W
  321. STA Time_Wait_Cnt! u" {$ k( Q0 r5 l% @, A  ?
  322. ' ~: N. W9 v1 W! n1 {
  323. Wait_Time_Over( X0 I5 k  H0 x# g/ O& S
  324. LDA Time_Wait_Cnt, Z" @1 h  ]! T1 f. W$ H+ b
  325. BNE Wait_Time_Over
    - o+ h$ n3 ^  q# j8 c+ U) K
  326. & t' F% D+ e& e3 z; f* z
  327. LDA #$1F
    ! f) Y7 v' n) C7 W3 T9 }9 n/ j7 u% D- Z
  328. STA APU_STATUS' L9 z7 `+ x. U) ?
  329. LDA Music_Cur
    ! a7 x9 d2 \/ s! L. D8 N) ]
  330. JSR Sound_Init
    2 H: E& ^" n, w  m# N
  331.   q( b# }0 _& F
  332. JMP MainLoop: R# Y2 l. d' a; f) j. x* O

  333. ; t* Q& u1 @; e1 ]. y2 e* b
  334. ;==============================* }! t) ?# X( x( C6 A
  335. Time_Delay;延时等待+ C3 Z+ y  [1 v" C" ?6 X: d
  336. LDA PPU_STATUS/ P7 z7 m! L& s( Q% g9 }
  337. BPL Time_Delay
    ) E# f" |# ?& b, s# v5 u" U
  338. RTS0 ?+ L5 P" J- h; {( f  |+ I3 W

  339. / ?; w  F" d& G/ Q+ P. S" o. T
  340. ;==============================
    . Q  ^. {# @! R8 t' b. i: y
  341. VramInit;初始化图形内存
      p- {; c3 V+ i$ X* c! m# C
  342. LDA #CHR_DATA_BANK% U" s) A. U$ q. f) R
  343. JSR SwitchBankA000
    : x3 G/ b$ H' w. Q, Z  u9 p1 m
  344. LDA #LOW(CHR_DATA_ADDR), y5 Y9 B& d, x7 c
  345. STA <Data_L
    ' g, |; A9 v% o( X
  346. LDA #HIGH(CHR_DATA_ADDR)
    ' c6 H% _, i  Z  q) A$ O
  347. STA <Data_H/ |! F) I. A% |0 v9 G; I7 s
  348. LDY #$00
    5 b: a* \# w$ ^
  349. LDX #$20
    # f( A5 S/ y: o+ v' |! D/ n
  350. LDA #$00+ o. S! B) b0 }, w& t& z
  351. STA PPU_ADDRESS
    / s, ^+ d# Y/ T# y: H$ ~0 u
  352. STA PPU_ADDRESS6 E% I+ s/ p( r1 r- H  O/ {
  353. VramInitWrite* d- `% R) i$ _  ^- t; v
  354. LDA [Data_L],Y
    0 B) E* N: }' Y6 @
  355. STA PPU_DATA
    6 }- a0 B8 p$ z' V5 M+ ^( e, K  G
  356. INY
    " B  h; j6 R9 ]2 s
  357. BNE VramInitWrite
    2 H, N2 Z, t- O1 ?9 Q- b  s0 \
  358. INC Data_H
    3 C) t6 R' J4 Q' H4 M5 ]
  359. DEX
    $ o# Q+ Q, x9 p0 Q' O/ Z
  360. BNE VramInitWrite
    ( N5 s; w) F0 `* C, v% ?
  361. RTS* ?2 r, g# [8 o% y5 t& X

  362.   m1 `8 b  u9 P0 ^; ^7 f& Q
  363. ;==============================& v0 t9 b6 l' k
  364. RAM_Clear;RAM清除4 ?; X( f+ D5 o! N
  365. LDX #$004 T5 o. d+ b2 o- x7 J5 i
  366. LDA #$00$ r# g/ s' f! M: }$ D
  367. RAM_Clear_1
    ; I( S( E5 L( `0 }: i
  368. STA RAM_Cln_1,X
    " R+ z( ?' Q5 [$ u$ D; A# p1 r* O9 y
  369. INX* B% l: d, j) p  Z+ G
  370. CPX #RAM_Cln_1_Size$ c# w" H, x2 D$ R: w! d: T
  371. BNE RAM_Clear_1/ o4 |% U; Q7 E; ?, ?3 [
  372. LDX #$00) _" v  C/ h6 w
  373. RAM_Clear_2
    $ e; E1 t8 G! l  p
  374. STA RAM_Cln_2,X
    6 U7 B) ~' V1 x* l* s0 b2 z7 [
  375. INX- E5 F; E% D8 Y6 w4 L/ X6 O
  376. CPX #RAM_Cln_2_Size
    $ ^  [! `1 g; w: @
  377. BNE RAM_Clear_27 o, Q5 s7 W( t; X& M: R
  378. LDX #$00- D1 ], i. k" O" h  ]  u( V
  379. RAM_Clear_3
    ( M9 w( ^+ Q, d9 [7 w  j
  380. STA RAM_Cln_3,X
    % y# f" B# g& X
  381. INX- ?4 d: J& A* V9 A/ k0 g6 i5 A
  382. CPX #RAM_Cln_3_Size
    ( L& w) o* y" f
  383. BNE RAM_Clear_3/ R$ d4 d. k6 ]: V* d% e
  384. RTS
    1 E( {+ z/ z9 J4 U$ Y; H4 `. r
  385. , s7 F" P5 V6 x' A# S
  386. ;==============================
    / q+ g- R! u4 J; G6 l
  387. ;音乐切换
    ( A% D9 J0 _- O" u3 o8 D
  388. Music_Switch
    9 Z9 L2 |3 d  `9 p
  389. JSR Key_Proc. z$ u. O( A! z$ C0 ]7 T
  390. LDA Key_Once$ d6 T1 T1 L9 y: X; ^9 I9 K( L
  391. CMP #$10
    + A/ {3 }5 ~- l6 H
  392. BNE Music_Start_SongStop
    5 o" b5 `2 K5 P/ d0 Y/ e
  393. JSR Music_ReSet
    $ ^; k) ]4 z! Y" R& Q

  394. 7 x6 L0 o7 w3 X, Y, D
  395. ;音乐停止  C3 W" z5 q5 Z
  396. Music_Start_SongStop! g- G3 o4 j1 J: |+ u1 u. ~
  397. LDA Key_Once
    ' U9 t2 x$ A8 b& L0 l
  398. CMP #$20
    ' l1 U9 [0 L- V; U! C9 c2 ]# K
  399. BNE Music_arrow
    ; T# j: N' ]2 D" Q
  400. LDA #$01
    : v$ |3 x" P- M8 L7 |
  401. STA Music_State
    4 L) t1 A& {, a# b0 P- o! n0 }
  402. JSR Music_Bar_ReSet
    # I/ T" j! h+ v4 r
  403. JSR Time_ReSet
    & y; Y+ H9 L$ U, D9 c& H. C+ `
  404. JSR RAM_Clear
    " h2 [% k: q2 I- c! J% \
  405. JSR Sound_Clear
    # a" f. q' W) |
  406. JSR Music_Stata_Show
    6 l. c% S0 e4 p, M
  407. Music_arrow
    % F2 P2 Y8 k/ B
  408. LDA Key_Once$ i2 W5 M0 U# Z5 J8 V9 }3 I
  409. AND #$CF1 X% F  t5 A) T2 S3 P4 h
  410. BEQ Music_Switch_End
    % E! N7 {0 ~0 j2 o( H. t
  411. JSR Music_Number
    ( _* a. u- ?7 N/ D; D7 g
  412. JSR Music_ReSet
      ^0 S1 O/ b* h- _
  413. JSR Music_Show; q$ K9 n% b6 T; A+ I( d- X0 _
  414. Music_Switch_End: p; w/ _( U) g( j7 r3 ~6 s
  415. RTS
    $ f7 p3 x4 {2 G( ~" a

  416. # n0 f3 {6 h# {1 B2 {$ c
  417. ;==============================1 Y- {+ w) X& H8 P/ c
  418. ;音乐曲目切换
    7 `' k( m( v: P( \: R; I* w5 `
  419. Music_Number0 x2 Q1 f5 M6 t* j8 r9 q
  420. LDA Music_Cur
    ! j( D! c2 ?2 ]. j+ |& N" L$ `) {; B
  421. STA Music_Last
    ! |3 x! r- `; {6 k& J' e
  422. Music_Decrease( j+ E8 N# P" G7 h( S
  423. LDA Key_Once: J% V& o! x; l/ M
  424. AND #$42: R3 V+ E+ f: T/ Y- q/ W4 O. z  j
  425. BEQ Music_Increase# _" m% K/ h$ ]- O1 K
  426. LDA Music_Cur4 O$ U) }) [+ \( {) \, W
  427. BEQ Music_Increase
    ( @* O; ]+ Q, W+ q" @
  428. DEC Music_Cur* E- }/ z2 {9 ?* b* }  d
  429. Music_Increase
    / d; ]" s! S/ n" N+ G" T( c
  430. LDA Key_Once& Q( L; |! r# O  k3 H: b
  431. AND #$81
      ?: g: g3 |! \2 W3 O+ M
  432. BEQ Music_Decrease_10
    & h8 Y* a3 o. A, |0 F
  433. LDA Music_Cur
    : u; L. u% ]' V: B. K6 d7 Y
  434. CMP #Music_Song_Total-01" ^' ?8 k) G& V
  435. BCS Music_Decrease_10
    3 o% V' |$ t6 I+ z* c) V) L  f' \
  436. INC Music_Cur
    " Z9 v6 e' K) I& ?8 |; w, o
  437. Music_Decrease_10+ A( g  d2 i* y/ s/ k1 R
  438. LDA Key_Once, z* n! ~! N% P" o' c
  439. CMP #$04
    8 y$ ~, A7 m! X, X) U
  440. BNE Music_Increase_10
    / r" n1 }5 R: V3 [; v, M5 @1 z9 P5 G
  441. LDA Music_Cur+ O0 N" l& G; ]4 N& `5 h
  442. CMP #10
    5 K: X$ X5 [. r& Z
  443. BCC Music_Start_Song_Min
    ) |, k6 @$ O' H6 h. y0 X' C2 r9 l
  444. LDA Music_Cur
    , t8 l! C2 `9 W  d, U
  445. SEC
    1 I! B8 b% i  v1 P% [; h  n
  446. SBC #10
    " u' Y% p4 I. i' R7 O# @
  447. STA Music_Cur, z# q) h! c8 W; D: `0 \; h2 W
  448. LDA #$00: x' S3 N0 V" k6 {! J+ ~/ n# Q
  449. BEQ Music_Increase_10" m/ D- t: J$ z8 e0 G5 |
  450. Music_Start_Song_Min  K- L' P- r, o" Z7 Q) R
  451. LDA #$00( G2 ?& K  L6 \* v
  452. STA Music_Cur8 a, B5 n: {8 {* N! u
  453. Music_Increase_10  p/ \7 x$ _9 Z; C
  454. LDA Key_Once
    2 K1 t4 ^/ v* r' s
  455. CMP #$080 b9 V: g& X3 Q0 p4 e( |0 O
  456. BNE Music_Number_End
    4 {4 c; y! z. q, y+ E8 r
  457. LDA Music_Cur
    * G0 z6 m& D7 X: _6 i" w# e
  458. CLC! b5 f* r' k) ?# Q5 p: `6 R
  459. ADC #10( t& ?+ D( ^* X) p
  460. CMP #Music_Song_Total-01
    " K+ l; F# `4 P0 `$ u7 g
  461. BCS Music_Start_Song_Max
    % L3 o# R- \) e! }$ n
  462. STA Music_Cur
    / w# P2 v, a# m# P) |$ X0 F! ^; F
  463. LDA #00: G8 i( |) u- j6 ?
  464. BEQ Music_Number_End% w; ?5 B7 A- G) C! h/ u( z2 X
  465. Music_Start_Song_Max
    $ h9 {! q/ x  g4 k4 K
  466. LDA #Music_Song_Total-01; I  R) s( F* H/ h4 U9 N. [
  467. STA Music_Cur8 p+ y' p$ {5 n5 x7 Y
  468. Music_Number_End
    - ^( C4 G( H4 Y" y8 C0 n
  469. RTS
    5 Z% _4 k% |& g! t( n  t+ f
  470. + N# T: t; x3 T# t9 n% d: B: v
  471. ;==============================
    4 _& }. _. q! @6 x
  472. ;音乐重设
    ) l) d' ]# O, o5 G6 w) B
  473. Music_ReSet* d8 N3 b3 b* h2 V1 `! W3 P
  474. JSR RAM_Clear1 j/ k7 o: V- ?$ O
  475. JSR Sound_Clear" E$ ^4 h' |, d5 Y8 ^4 u( ]4 I" h
  476. LDA #$1F- t. S7 X/ \( @
  477. STA APU_STATUS5 y- `$ O* N0 J( T2 k) A  _7 {$ K
  478. LDA Music_Cur1 ~6 O) O8 i8 ?- N0 E
  479. JSR Sound_Init
    # @$ ]4 P& q8 `
  480. RTS
    & I2 }: f- B( W

  481. 5 M( g* H! O! ?% @/ H
  482. ;==============================
    " e3 ^* `0 [5 R$ S" e9 k
  483. ;音乐端口清除" t! v/ J9 D8 M2 P* P
  484. Sound_Clear$ t1 k8 O4 V' h* f* z# B
  485. LDA #$00
    # M* c+ Z1 S* i+ U0 X" Z4 s6 j8 r3 K
  486. STA APU_STATUS
    / |. a8 M* E2 c3 h3 N/ P7 g* C! K
  487. LDX #$00
    ; G+ {! O" U& |- n! n
  488. Sound_Clear_Start
    / m/ f% ^) J6 u- `
  489. STA $4000,X7 e" H" @# @& }' g
  490. INX" z4 u' j" s  X% D" V. ~, ^
  491. CPX #$14
    & z  k+ u7 x" b  T! }
  492. BCC Sound_Clear_Start' V! e% Y) f+ N  P/ D
  493. RTS
    % D! I9 e6 H2 P$ [
  494. 3 `* ]1 V( a$ \+ O
  495. ;==============================0 H; Q7 a1 O% }' k
  496. ;按键处理8 ~5 G2 O- F( A( n* H' x! O' ?
  497. Key_Proc
    / L0 i4 p0 g4 g
  498. JSR Key_Scan6 {' i, N' F" Q
  499. LDA Key_Keep
    , o: x/ C8 `. U4 ~  |+ f
  500. STA Key_Temp) _; V3 v1 i/ T! ~/ I5 S
  501. JSR Key_Scan
    # L' E- o" B: U4 i7 T+ \  n  i; [
  502. LDA Key_Keep0 k1 M4 y+ I4 J. ~& `8 T$ M
  503. CMP Key_Temp1 i7 ~+ P5 R5 i" L7 L
  504. BEQ Key_Get_Once
    7 ]. }1 d/ L* ?" j8 \2 N0 [
  505. LDA Key_Kemp
    ( V9 J  D  D$ v
  506. STA Key_Keep
      R: R# F8 u6 y. s6 P5 u2 R
  507. Key_Get_Once
      W$ |! k; ~+ L9 H% b, d, Q' }" g' i5 b
  508. TAY' v* Y7 W2 ?- w$ j+ K
  509. EOR Key_Kemp
    , G+ k9 Z/ ~, J* u9 Y
  510. AND Key_Keep5 E  P& k5 E/ Y, J
  511. STA Key_Once. W& |3 R8 B, W& s
  512. STY Key_Kemp
    ) i5 ~2 _/ E5 v
  513. RTS
    : X# C/ j- }: W, S% P- s
  514. ;------------------------------! M" Z% v: c1 p1 G* o: X
  515. ;按键扫描2 Y+ r# [% ]' E
  516. Key_Scan2 p3 V) N$ K. E4 k6 w, w
  517. LDX #$01
    8 J- b+ }/ g* g: }0 m$ M% |
  518. STX JOY1_FRAME
    0 a) a3 R% a9 J+ c$ h4 ^
  519. DEX
    + R7 `8 S' J$ Z2 E$ z7 D9 X8 @
  520. STX JOY1_FRAME- n2 k( K! ^0 b0 S* w
  521. LDX #$08
    ! U) D7 D7 ]; J+ j0 b! ^: }. L
  522. Key_Value
    " I7 J9 b) }. ^5 ~- z
  523. LDA JOY1_FRAME* M$ k$ p3 ~6 }/ S
  524. STA Key_Getv- [" y9 c. s4 B+ u
  525. LSR A
    / ?. O( P7 C" a
  526. ORA Key_Getv+ g6 u2 ]# C% p3 R6 o+ D4 R
  527. LSR A0 B5 X, c. _% E3 i! a' F
  528. ROL Key_Keep( n/ ]' k3 z  s
  529. DEX
    : i/ D& k6 e4 Q2 c9 V9 N. ~
  530. BNE Key_Value
    , s5 Z' ?: k: V/ A: v$ _  O5 L
  531. RTS3 v6 `' M0 M7 P/ G6 p" i

  532. : s! s; C/ P4 N/ r; h1 O( X3 t" m
  533. ;==============================: ~0 i* o7 t" d
  534. .IF SOUND_BAR_SHOW_ENABLE
    9 U( `) }8 k/ W6 }/ ^7 V
  535. ;音乐条显示6 `0 p. r& G" b3 G% T
  536. Music_Vision9 f- f3 z' K+ S& b
  537. JSR Music_Animation
    # f! F6 l0 l/ V1 j
  538. JSR PPU_End2 F) m* Z5 r7 ^1 w, B4 b, R
  539. RTS3 D4 N# U* L  g/ f' P
  540. ;------------------------------
    . h0 P0 r5 R6 D
  541. ;音乐条显示处理
    & o! i% ]" a& |0 h) ~: Z
  542. Music_Animation1 c* [- W+ l( n/ W# w1 B
  543. LDX PPU_Cur
    9 t' Y- E7 @* B( x
  544. LDA #Mode_Line& ~9 [' {" v, ]9 _2 n
  545. STA PPU_Addr,X2 W4 l  X: ~" u  Z
  546. INX( l' d* _; L5 d  X/ u' V
  547. LDA #HIGH(Sound_Bar_Pos)
    4 S" U1 t; ]) A8 K' J+ {
  548. STA PPU_Addr,X
      \  K8 u! x, ^! n! \, V' u* g
  549. INX9 p3 s7 [. \; C
  550. LDA #LOW(Sound_Bar_Pos)
    : i' i4 N* S+ u
  551. STA PPU_Addr,X
    ) b. u& a( g' t0 w8 t# j
  552. INX2 x& R: G$ I  e5 N  j6 r/ L3 v
  553. LDA Sound_Bar
    0 z" W& w$ d) {, B9 [7 ]. v' r7 c
  554. JSR Volume_Convert
    ( M0 V. q* `% B- Z* u
  555. JSR PPU_Return- q' I# t8 r/ W: o/ ?0 J' R
  556. LDA Sound_Bar+$4' [8 ?! X# c- e. }0 @/ p
  557. JSR Volume_Convert* G0 H* v& O1 d0 ?
  558. JSR PPU_Return
    6 P8 j9 U) y. G4 I
  559. LDA Sound_Bar+$85 [4 r. J% }: T$ W! _
  560. JSR Volume_Convert_Ex
    3 a9 L1 f0 t/ N8 e! q1 {# O  `' D
  561. JSR PPU_Return
    ) `2 k1 ]: P8 H' _  c! b
  562. LDA Sound_Bar+$C
    8 R( v' Z+ O+ ^: _- Z
  563. JSR Volume_Convert( Z" O4 f' T3 I' W, G
  564. JSR PPU_Return! |: ]0 H$ N, I4 t- |$ m
  565. LDY #$10
    & t2 \3 r# J* a1 p
  566. LDA APU_STATUS
    $ k9 B) o; c( c8 r5 ?4 z3 d0 w8 u9 ?
  567. AND #$10
    ; ]# H9 n( {3 v2 Z+ c6 j) m
  568. BNE Volume_Count  c# v. |" j5 x+ n4 ]: L
  569. LDY #$00; [7 Z* _( {- J7 w
  570. BEQ Volume_Count3 J- d4 e; Q5 x7 c$ m. m
  571. ;------------------------------7 T' q9 I+ I8 S# i: {  S
  572. ;音乐条处理
    ! S& F8 U4 W8 |" v, v
  573. Volume_Convert_Ex
    ; Z  {) q5 W  U+ {# l0 B
  574. AND #$1F: M9 W+ Y6 R0 V0 @7 o
  575. TAY
    * W! D) m, \2 p2 B: I8 Q. r
  576. BNE Volume_Count, F0 v( ^: v8 H) e
  577. Volume_Convert
    . U# C" E4 L0 `: n; b
  578. AND #$0F
    . I, S* [$ E* c5 w" ~: U
  579. TAY
      I+ [( D& Z) Y# R4 G2 O) t' A  U
  580. Volume_Count7 W, T; B) w9 V0 a9 O1 i
  581. LDA #$08
    $ G2 i" @% _8 M8 N& @
  582. STA Sound_Bar_Cnt6 V. S( U. E9 _' Q; L
  583. Volume_FILL
    ; }' O8 w# J" C1 B5 F- ?, m5 Q% [7 C
  584. DEY9 C8 t* H% E) T  s
  585. BEQ Volume_Half
    / U7 K6 A; y. `- d" ?3 n9 {
  586. BMI Volume_Empty- D# |3 f2 t( U
  587. DEY
    6 G' a5 Q/ p; P+ A
  588. Volume_Full
    & F& ]7 C& }4 L- d9 V
  589. LDA #$16" _# H- n1 e, q* @
  590. BNE Volume_PPU* c3 J+ f; G( D: V
  591. Volume_Half
    ( `3 z0 H7 ^" K: K, V: _
  592. LDA #$15
    " L& T/ Z4 P- X- S. C) W  J! A/ m
  593. BNE Volume_PPU, a, l# d9 R, k% K- L( [# }% N
  594. Volume_Empty% f" i) ^* `* X) E. ?6 d. T1 M
  595. LDA #$14+ u* n9 `8 `" r# H. T- {$ ]4 o
  596. Volume_PPU
    1 p! C' i+ k0 W/ V$ S, I# M) p8 R5 T
  597. STA PPU_Addr,X+ D; j9 ^& _; k
  598. INX; e0 ~* b1 n) O% ?# v
  599. DEC Sound_Bar_Cnt4 `8 f  d: [! a. G  x3 e" V
  600. BNE Volume_FILL& T2 B! Y1 R8 C/ @: D
  601. RTS/ S& [6 k- i4 y! ]: H$ k) P3 U% P
  602. % K2 }5 A3 F+ }% V
  603. .ENDIF8 i% d2 @; q' g4 Y% ?. U9 h
  604. + ?8 h+ ~" R- S, f3 h. V
  605. ;==============================
    + Q9 Z( [" ]  }/ k3 b' u: `- c
  606. PPU_Addr_Set;PPU行开始
    " \9 d2 e1 X+ O
  607. LDX PPU_Cur$ o/ w' D% t* ?. x8 `
  608. LDA #Mode_Line  [- r% G, s9 q
  609. STA PPU_Addr,X5 ~$ _* L& ^+ ^  `+ r- J7 v; L
  610. INX, R0 g% K4 ^+ [4 c9 l
  611. RTS+ U7 z+ [3 q" ^. I# J3 I% R

  612. 7 X( j8 s+ k. E7 ~
  613. PPU_Return;PPU转行6 p* e$ a- d* z9 t) y( c
  614. LDA #Flag_Over
    3 V4 ^0 u0 E3 {: m9 H8 M' ?' r& O
  615. STA PPU_Addr,X
    & Q1 p7 q8 u( l: i2 Z2 y1 Z/ d
  616. INX
    . m8 P3 q1 ?4 c
  617. LDA #Mode_Return
    * K9 ^7 W7 k% f& @4 Y
  618. STA PPU_Addr,X/ |8 {  \9 g, t) l1 D3 ]! C
  619. INX. }: X3 c' i$ j7 @& g* r
  620. RTS
    7 z" U0 s; @( e# R8 P: d# Z. f) J
  621. 6 m* `+ [4 Q% E9 `& k- E' s" T
  622. ;------------------------------
    % S& f8 `3 w+ L( {+ c
  623. PPU_End;PPU结束
    - b0 T  ?$ V+ w) R( x
  624. LDA #Flag_Over
    ; y+ o$ ^/ r/ t, R
  625. STA PPU_Addr,X+ e+ z* M9 ?: s* _( S: l  T
  626. INX
    ; o! z$ E- f8 n6 I6 U3 Y5 I, @
  627. STX PPU_Cur
    ( y" o$ f/ M0 I& R7 K* k* P8 c; N5 s
  628. RTS2 f) {/ y* W; y/ b
  629. ;==============================# Z2 M6 q8 m6 @) z9 o* ]" ]! I
  630. Mode_Line     = $FD    ;新起行模式9 D5 v# U9 K  M6 C, _' U
  631. Mode_Return   = $FE    ;转下行模式
    5 f$ Z: S, U( M, K7 D2 u4 Y
  632. Mode_Clear    = $FC    ;行清除
    * ^0 E0 u% y2 W" a& b
  633. Mode_CntLine  = $FB    ;行计数写入# I. d6 G5 F+ H
  634. Flag_Over     = $FF    ;行结束标志% t3 h- }! K$ @. c8 M

  635. 6 f9 J0 F$ i* z$ d& h3 n
  636. ;------------------------------+ p1 ~1 L4 V5 n8 ?4 X' e
  637. ;PPU处理  U2 j' n: f! i, t3 a
  638. PPU_Proc: j, V; a4 H; b) u  C5 A: J: v
  639. LDX PPU_Cur3 M7 Q# F1 s( S1 y
  640. LDA #$00
    3 y) s/ Z7 U1 |- _- v
  641. STA PPU_Cur
    ! `8 ~; Q/ o& K' ?/ G' f
  642. STA PPU_Addr,X0 W! l" T; b- H* o' o" W" x! y: V
  643. LDA PPU_Addr( R5 U: D9 g' q% C0 N) O8 s
  644. BNE PPU_Proc_Beg
    2 ^  C2 m" j* K* H% ]
  645. PPU_Proc_Ret- K/ w  v$ ^' B2 M, U
  646. RTS8 {; c5 G" X1 @+ c  t( I8 [
  647. ;------------------------------1 z  o' t( {! B  M* L* q6 p
  648. PPU_Proc_Beg  ;处理开始
    $ h$ f. n: @9 C5 z# S3 ]% s4 _) F! @
  649. LDX #$00# S+ i: r- x, |
  650. STX PPU_MASK6 Y9 H: w2 t+ j* O; d: h
  651. ;------------------------------% u' m1 Q  ^) S( g& g. w( i
  652. PPU_Mode_Select  ;模式选择
    8 E) g# k( {& h' }' ?2 v
  653. LDA PPU_Addr,X8 ]/ S( ?. S3 L* U
  654. CMP #Mode_Line
    + r6 r: z+ m* d9 X" b4 j
  655. BEQ PPU_Mode_Newline
    1 B1 r0 T+ V1 U1 x. s
  656. CMP #Mode_Return
    1 t+ e% U4 u% b, D" f6 j+ f! e
  657. BEQ PPU_Mode_Return! V0 L' O3 h3 S5 ?+ ~5 E+ V- Y
  658. CMP #Mode_Clear% A; g) }+ m) J, F0 Z% F" Y8 E7 e
  659. BEQ PPU_Proc_Clear
    $ _' G( r5 \2 ^! Y5 r3 @9 w
  660. CMP #Mode_CntLine
    $ i2 U. J. Z6 E$ ~$ O
  661. BEQ PPU_Proc_Cnt_Line
    8 d7 }8 N9 `+ ]
  662. RTS" R1 G- {9 \) \' w; }
  663. ;------------------------------4 U! R4 w9 P! k; I% [* C
  664. PPU_Mode_Return  ;转下行模式8 f+ H1 P6 @; a1 {8 n
  665. LDA PPU_Addr_L- P7 G& g7 [) u
  666. CLC" @+ F1 c2 w( r- Z) k  K, ^
  667. ADC #$20- D: @# C5 k3 I
  668. STA PPU_Addr_L
    2 ]9 |  ~( B1 R2 i! A2 K
  669. BCC PPU_Return_End
    ! d1 A' K( a3 j! Q
  670. INC PPU_Addr_H
    7 l+ F- v$ G/ h  b0 i' r
  671. PPU_Return_End  q7 \+ P0 |/ h; o! T" `
  672. JMP PPU_Set_Increaser6 a5 z. ?5 H8 i! k" h5 u: z$ f
  673. ;------------------------------) `8 t) ]( Q- H/ H' L
  674. PPU_Mode_Newline  ;新起行模式
    6 H( w  Y$ ?: k" X; x
  675. INX' q# z  ^/ V+ P
  676. LDA PPU_Addr,X8 n8 K+ U. k; p/ r# D
  677. STA PPU_Addr_H
    9 D+ b6 M5 A/ S- x, Q' v3 Y
  678. INX
    . }- M# y  h: X4 n3 t" _
  679. LDA PPU_Addr,X
    ( K" w: @8 }2 H( _
  680. STA PPU_Addr_L
    $ `1 o8 n" {/ M% E. G
  681. ;------------------------------
    , W1 ~6 {& x' d) k# x0 f( y! W
  682. PPU_Set_Increaser   ;设置写入地址
    1 Y; ]' K* B. X6 n+ Y
  683. LDA PPU_Addr_H' d% r! w4 M+ e4 y1 n; W" Y: U( _  l
  684. STA PPU_ADDRESS2 d3 W* W) }; M- o
  685. LDA PPU_Addr_L$ c& z1 A# h1 Y' V* ^
  686. STA PPU_ADDRESS$ {2 W. \4 E, W, r; }4 i4 Q+ t* g; L
  687. ;------------------------------
    7 D' y+ h- ?8 N
  688. PPU_Write   ;写入数据: z4 u* C/ t* e2 y  L9 H
  689. INX
    0 D2 K+ [7 b( e$ k
  690. LDA PPU_Addr,X% u. r- K" O+ P! c
  691. CMP #Flag_Over
    1 l4 Y; S' x/ O& S
  692. BEQ PPU_Proc_End% E$ }! b8 k  K
  693. STA PPU_DATA  [8 A! A3 b$ N6 d! R- y
  694. JMP PPU_Write* r2 K( e* t% i+ Q+ a
  695. ;------------------------------  Y2 O, e2 D% L2 |; f: k
  696. PPU_Proc_End  ;单行写入结束
    6 U/ G, L5 ^3 \$ F$ \
  697. INX
    + \( L% r9 m6 E1 D+ E( p& d8 g
  698. LDA PPU_Addr,X# N8 u, M7 B, a/ ~* d
  699. BNE PPU_Mode_Select' s9 _6 b: ?4 }" U3 _& P/ K7 g
  700. STA PPU_Addr
    7 [# c  B+ w: s8 x, p
  701. JSR Update_Palette_Color
    $ ]. ^& z+ }# y% m2 H5 W3 v5 G
  702. LDA #$00
    $ W( _8 U* ^  g+ C. B3 \
  703. STA PPU_ADDRESS; F  w1 ~2 D! O
  704. STA PPU_ADDRESS
    ( s+ ?6 h3 t/ P1 o. B
  705. STA Show_Track_Name/ ^7 ^. E+ y0 a5 g! e
  706. LDA #Scroll_X6 q4 X; q, \9 z( {! R  \. n+ x
  707. STA PPU_SCROLL. n5 U1 G% Z1 |$ o/ t3 y" B: T( V
  708. LDA #Scroll_Y. f; [; b% P& w$ k% q! Z; U
  709. STA PPU_SCROLL- C& q4 x% K2 U3 i: ?
  710. LDA Screen_State
    + L8 G( B, v- ], g
  711. STA PPU_MASK; j/ J" l# q; Z) `4 T6 `# J( F
  712. RTS8 z, V6 t  b$ _3 J
  713. 1 R$ }1 \" Z$ i9 n) [5 I% v
  714. PPU_Proc_Clear0 T" Y8 V7 S) ?" G2 @5 ?4 |
  715. INX
    3 S  ^+ U  ~; P2 W1 w/ j! b8 ]
  716. LDA PPU_Addr,X
    7 q- Z1 N( ~- J
  717. STA PPU_ADDRESS
    2 g- h9 W1 v! o# x
  718. INX# i! e7 b6 e- |* P% _
  719. LDA PPU_Addr,X8 Z5 [; y4 h/ T" p' ?& |  Z7 h, u
  720. STA PPU_ADDRESS4 z# D* A6 V6 K) w& A" N' M2 d: F( t
  721. INX
    , G+ r4 i$ u3 d" s9 ]+ P4 H
  722. LDY PPU_Addr,X! \+ p! K8 m. i0 J2 u7 {+ `' j1 U; N
  723. LDA #$00) O2 b( P7 g( k3 y
  724. PPU_Proc_Clear_Write
    ; y) \4 v! o4 ^3 R# w1 @8 k
  725. STA PPU_DATA
    ! Q: ]% ~5 ], h) I- }
  726. DEY3 e( V3 n: d; ]( J! `
  727. BNE PPU_Proc_Clear_Write9 J( `/ u! C3 }0 O2 x
  728. JMP PPU_Proc_End* g( U' f) V! B( {. }+ D7 j' W- E
  729. $ n! Z& O+ q/ n' J5 B: m4 \
  730. PPU_Proc_Cnt_Line' c( P$ i* O1 E* U# X8 a4 O+ g
  731. INX5 [3 x% d# Q! E: S! m( C
  732. LDA PPU_Addr,X" K6 D% G" P6 {, b. Z7 l
  733. STA PPU_ADDRESS
    * H. R( I4 X/ |4 v& c6 }
  734. INX% v( k8 l$ V8 J( x. a  S2 D- T
  735. LDA PPU_Addr,X6 G( u1 _8 T# S3 ?4 @
  736. STA PPU_ADDRESS
    * x# b. y. \2 R# V) o( A" W
  737. INX
    5 T9 Y7 I' z3 Y7 `4 h
  738. LDY PPU_Addr,X
    " h7 u6 I! ]3 e) W# c. M5 w
  739. PPU_Proc_Cnt_Line_Write
    9 H* ?  P: e& U7 r# ~. @  v" J
  740. INX
    ) v4 D! `; S1 n4 ]
  741. LDA PPU_Addr,X
    / r6 Q. h$ m2 i) ^
  742. STA PPU_DATA
    9 X* u" n+ P9 u( H$ S- B
  743. DEY
    8 I3 o- z' Z3 c
  744. BNE PPU_Proc_Cnt_Line_Write
    " T" l. _" D" J0 I
  745. JMP PPU_Proc_End
    # J# g! U7 h0 t& A& J$ a

  746. 1 C* _; b1 @* D  M- g
  747. ;==============================# _3 |9 G6 x4 Z& {) G1 }; g7 y8 \
  748. HEX_To_Dec;十六进制转十进制
    ; ]" f4 o0 J& ~9 D1 o2 N( ?$ {2 q! F
  749. STA HEX_Data
    , J, V' H$ N: a! T0 d$ `
  750. PHA' c5 Z9 L) x% x+ p
  751. TXA: R- k* G2 \* E9 M
  752. PHA
    2 Y* `$ |2 X0 I- L% h& W* |
  753. LDX #$00
      j/ Q* N0 q' Q+ _0 A+ h
  754. LDA #$00& \2 p9 }0 s: x
  755. HEX_Cln, h+ M- q# V4 I0 c% C9 p% O% g
  756. STA DEC_H,X
    ) z& c3 k6 j: @/ ^& Y$ G$ K4 i0 T
  757. INX* @+ y9 A, ]' R2 |: d
  758. CPX #$03, V, N. n! Q% h1 c& ~
  759. BCC HEX_Cln
    4 y/ B. p( b( |9 |1 k4 y' U8 t
  760. LDA HEX_Data& e2 M7 n  u$ m% L9 U! a) Z
  761. ;------------------------------
    ) |% n  O: _( O
  762. HEX_100" Z7 g) A$ c) v) A3 d
  763. CMP #1004 P" b0 D. c" y5 Q- f' q" i/ `
  764. BCC HEX_10
    - f7 e+ `9 s- B6 v% K5 F
  765. SEC' d& i- h- R: s/ Z  _3 S% q- c+ n
  766. SBC #100# V( _! V  T# m* W
  767. INC DEC_H2 V9 l- T) S- |# K% Y4 {
  768. BNE HEX_100
    8 a, |% L$ w, y/ ^7 t4 o. C
  769. ;------------------------------
    4 Z% J2 G0 [- `: l0 b5 \# W
  770. HEX_10
    . b9 K4 I& K+ L+ U, Q% h3 e
  771. CMP #10/ q6 [+ {( {/ R
  772. BCC HEX_18 |  ?6 R+ F, Z. N- {
  773. SEC& @& v- ^3 E& b0 _$ ^/ G* l/ U
  774. SBC #10
    * X' y  J3 o/ t# Y
  775. INC DEC_T! v. g4 S! K' C: V) }/ I0 Z
  776. BNE HEX_10
    / |1 B+ f$ a' i' j/ i  K, g
  777. ;------------------------------
    5 {7 L5 E% m/ R& R0 [' i% ?0 v& t
  778. HEX_1
    7 P9 f- Q  D9 a" h6 i$ S" b
  779. STA DEC_L
    0 D0 G! M% V6 X  p8 T
  780. PLA* v5 H: ~6 I7 k7 a, Y
  781. TAX/ j0 c% G) W) ~* s3 ]! Z  K
  782. PLA3 U, k& P6 N: r4 i' L' v; J! N+ h% B
  783. RTS" q; F( B' D+ @! B9 t6 ]

  784. ( Q8 D- U% P' J/ |; B) m
  785. ;==============================
    + ]* F1 [% a/ d, f, Q2 J  D
  786. ;音乐曲目显示
    - C6 A! |7 w" M
  787. Music_Show
    $ o: z$ T* p: m% c, S# W
  788. LDA Music_Cur
    6 h7 H3 c; b% f3 N6 }5 Q
  789. CLC
    + l+ u3 Q0 S$ |! O$ s/ i9 L
  790. ADC #$01+ b( h) l7 j8 B  {. K% A: j$ h
  791. JSR HEX_To_Dec
    0 P& |7 C9 R7 q, z
  792. LDX PPU_Cur+ L: e* _- H5 s+ ~0 v
  793. LDA #$FD
    % _- I5 v9 T# i! D# j
  794. STA PPU_Addr,X
    & r3 \. I: V2 H7 @
  795. INX
    4 x- {+ s; g! x( B% ^- f
  796. LDA #HIGH(Play_Index_Pos)/ y# \+ _1 _& C, M# }' k
  797. STA PPU_Addr,X
    % Y' F7 `8 M; X8 p/ r- \
  798. INX
    & d4 U/ I! _& Z
  799. LDA #LOW(Play_Index_Pos)
    0 k- d. d& W( T1 i
  800. STA PPU_Addr,X* J. `5 s/ P8 [( j
  801. INX% P* ~0 E* [) N" x. z+ L$ {. r
  802. ( I: J" P9 C, V7 u+ G- z+ C( X
  803. .IF Music_Song_Total > 998 i9 i# Z* B! P3 N. G
  804. LDA DEC_H
      _$ z" e+ H( c" Q/ Q
  805. ORA #$30
    4 o' t1 N8 ^% y0 I2 g- r
  806. STA PPU_Addr,X
    % [6 u) @6 x1 H8 U9 G# ]
  807. INX' c  B% y  ?& w' w2 r2 }0 U
  808. .ENDIF
    ; X+ s% J  T- I6 `7 A, J3 _9 X  Q
  809. - N5 f; r: W1 n* u+ q
  810. .IF Music_Song_Total > 9
    0 y; R' y) b7 t1 K
  811. LDA DEC_T
    + T% H& o% v5 E+ ~+ s7 k1 d
  812. ORA #$30' W' `+ X/ v" J
  813. STA PPU_Addr,X) r  Z1 F/ D' N1 R* t  s
  814. INX$ J$ P5 ~' }- Q" t. x
  815. .ENDIF
    6 v- e0 p1 N9 |) L/ q( g7 y/ n

  816. 0 s+ G, q! v7 s* b- f2 h: O% V
  817. LDA DEC_L" V+ l4 t- F2 E; v- F
  818. ORA #$302 C# K+ m7 g  r/ u6 q
  819. STA PPU_Addr,X
    1 ]& B' A# E0 B* P& g2 k( ~: h3 e  \
  820. INX( U- @8 V5 A9 b) t* ?' d7 L

  821. ) J1 m6 e) n# w' Y
  822. LDA #'/'* t; H6 B+ M1 W
  823. STA PPU_Addr,X
    : w, _3 b7 h' @7 j, Q- {
  824. INX
    . c2 d+ K0 h; g
  825. Music_Show_Total
    ( o, {: X- }: {; x
  826. LDA #Music_Song_Total0 c8 g4 e6 _/ H; V% h( j8 y! G
  827. JSR HEX_To_Dec* s" [/ J% y! T0 M0 ~
  828. . i" w  q7 E% j. c- n5 @5 @
  829. .IF Music_Song_Total > 99
    9 [" P9 l' y; f) L* L) V! A
  830. LDA DEC_H
    9 e$ _/ ]5 }1 u9 k3 s6 g
  831. ORA #$30
    * k$ u$ i" f+ t+ c0 y
  832. STA PPU_Addr,X
    5 g2 o; a9 [. X# ~- U& o9 [2 j
  833. INX
    9 O" {' Y5 a% G$ y) j* J2 ^- o+ X
  834. .ENDIF
    0 {) H% W0 q! c" _' C# M3 t

  835.   ~, L9 s7 J: S  T' ~' C, \
  836. .IF Music_Song_Total > 9
    4 q3 `; `- Z* f
  837. LDA DEC_T
    7 ?1 s+ n& p' M0 I& U
  838. ORA #$30% R) _+ R* O: B4 s# n9 Q
  839. STA PPU_Addr,X8 J3 J3 u6 q: q4 X) S1 I3 X, C
  840. INX' ?, X, ]# G, K% B. V
  841. .ENDIF
      t: y' J. g6 w. E

  842. 7 @4 V  j3 X* P
  843. LDA DEC_L+ q/ t8 e- h; i7 n/ n& b! k
  844. ORA #$30
    6 _( _( H- l* _5 R
  845. STA PPU_Addr,X
    / [  A) X5 A; [, N
  846. INX& Y: w+ H. h% K2 N, D1 g
  847. 9 B1 K6 x* e( J; [7 n3 G
  848. JSR PPU_End
    5 m3 t. t( t! S- z+ D
  849. Music_Show_End
    / b; x* |9 ]* ^, ~) J
  850. RTS& T" G. ?: Z* @2 \, u2 Q

  851. / O6 y4 Z8 Y- M/ Y: d
  852. ;==============================5 |+ O' u' k# F' L
  853. Time_Show;播放时间显示
    - {) T/ ?' a0 J* D6 Z% N  h
  854. JSR PPU_Addr_Set1 F5 C9 X+ H8 v$ F" d
  855. LDA #HIGH(Play_Time_Pos)( o+ j3 [1 }+ K! h' F3 t
  856. STA PPU_Addr,X* \: _/ |) c% s# i
  857. INX
    2 i* N$ o) U3 H6 ^/ A
  858. LDA #LOW(Play_Time_Pos)
    6 y+ m' L/ I& q" P/ b2 [( z4 y) W
  859. STA PPU_Addr,X* D$ ]: ~/ l, {- T( H' _9 f
  860. INX
      {* m, B4 _. s2 L
  861. Time_Show_H) T7 N8 r# N* a( `$ W
  862. LDA Time_H3 d3 p, P, L4 p/ A7 @% _7 [# h
  863. JSR HEX_To_Dec: |( U2 O+ `, s/ q& k; e
  864. JSR Time_Digit
    ; \; b7 X+ i  A; l$ }, C& U% j
  865. LDA #':'! j7 U/ F' R0 W, j4 V. g& j
  866. STA PPU_Addr,X# w) D# x" b7 d- O- }
  867. INX
    * ^4 o, m, o8 C, ^# B8 a3 b$ U2 {
  868. Time_Show_M# U: q+ K9 V# {( D" z7 p
  869. LDA Time_M2 H5 V$ q& Q. x7 F# f
  870. JSR HEX_To_Dec
    % |# H/ X' Q* U
  871. JSR Time_Digit
    3 t! g. K* Q. \8 r! J0 y
  872. LDA #':'1 l* p+ e0 j1 Z) O
  873. STA PPU_Addr,X
    + _) G( }5 M6 y7 ?! V
  874. INX
      T" J3 w3 E3 \1 A/ r$ @
  875. Time_Show_S
    ( `" f" ?6 Y  L* u2 i
  876. LDA Time_S4 E) X& w$ D5 `
  877. JSR HEX_To_Dec! t( Z; U: v7 _2 j% M6 Y, j
  878. JSR Time_Digit4 e8 ?- O5 l8 n* @; q0 ]
  879. JSR PPU_End
      x0 ~. Z  P5 C2 l8 N2 `8 a/ ~  h
  880. Time_Show_End: q; z) _: \4 A- u6 Y8 b# v, N
  881. RTS" S) G3 c$ ~  j! m& w( i) P" d

  882. " F! _' P" t; M6 b. W
  883. Time_Digit
    & _1 f; W' c7 k7 V+ M1 L
  884. LDA DEC_T+ z9 b3 M  ?9 `& D: j& r
  885. ORA #$30+ y& l6 k. k' D; a  v( `- v2 `# g
  886. STA PPU_Addr,X
      P# i. E7 O$ x! E3 _1 |
  887. INX$ D. m9 s- ~/ X5 C8 I3 M
  888. LDA DEC_L4 N, r8 t* N; _8 n
  889. ORA #$30
    # X  g& E0 M; s/ r0 ]
  890. STA PPU_Addr,X
    & d  L& P/ f! _+ a! a4 t* `
  891. INX- i9 ]! l; k  ?% ]
  892. RTS/ U% L# z$ \. c  q

  893. 8 g$ x6 N) i* `2 f- Q% E1 s' a
  894. ;==============================
    % Z. Z+ T& S" p
  895. Time_Count;计时
    $ o' x$ d2 v9 f; U: ]
  896. LDA Music_State
    $ `( S/ L7 O4 k6 f
  897. ORA Time_Wait_Cnt
    * Y- ?% u: s* i9 Y
  898. BNE Time_Count_End; P! D+ \0 V6 {$ i& K/ e8 {
  899. INC Time_Cnt4 B; U: X. _# O  o) ~' z9 R
  900. LDA Time_Cnt) A. Q( \' X; h% A% y% t
  901. CMP #60; _4 `1 T6 Q; w9 n8 O2 i% Q) u0 u
  902. BCC Time_Count_End
    ( \  O# Q  |" G& D  w4 Z
  903. LDA #00
    % l4 h" {8 [  |/ @
  904. STA Time_Cnt
    4 _. ^9 u3 @. E! l; W+ a
  905. INC Time_S
    - g) |3 A  P, @1 J2 u. Z$ A
  906. 1 W1 _6 h9 k# q
  907. Time_S_Cnt: `9 p, U# z! k% O5 {7 t
  908. LDA Time_S
    $ H8 K' F2 X4 \  l+ n3 N, T
  909. CMP #60
    $ Q# s' {. E2 ~5 {4 j0 _6 R
  910. BCC Time_Count_End6 K" K: [) G% N  j. o
  911. LDA #00* l2 T; @% {7 t9 B
  912. STA Time_S) [. a) q8 @5 I
  913. INC Time_M
    % }5 R# q9 n4 U! I0 i

  914. , p8 W- a- {9 ?( @" w$ q$ c
  915. Time_M_Cnt) F5 x5 k. _  B! J+ t
  916. LDA Time_M
    ! j/ n7 }# q4 C3 v
  917. CMP #60
    ) _. w3 S) Y4 i7 Z4 e, e9 v
  918. BCC Time_Count_End
    . `  I& i4 S+ `/ X8 ^( ~) S
  919. LDA #00# y/ P& x* H& j# h3 |
  920. STA Time_M
    & E" t) v; o7 A# q, s* K. W
  921. INC Time_H4 r$ F1 W( C: H/ X

  922. & C2 c. ?# Z( c9 Q; y0 I! R% W0 c
  923. Time_H_Cnt
    4 h  v5 ^* ?" W- @" q( s; f! _9 y
  924. LDA Time_H
    / o4 |) I+ K9 [% `. ^/ o
  925. CMP #24# J2 t0 j4 E9 k0 w, @
  926. BCC Time_Count_End3 k9 b; }4 A9 s, r0 L6 @
  927. LDA #007 l! r1 N/ Q' `
  928. STA Time_H
    / l7 w8 Z3 J: d; v0 G$ r
  929. 3 W% u0 |1 O% ^2 ^1 n; k
  930. Time_Count_End; Y. t( W( T" A/ j
  931. RTS
    2 V" k! d1 G6 |3 |6 W# C
  932. ) Z7 j" N9 Q- ]( k% t
  933. ;==============================
    ; ^3 X# R: [! X& ~& |
  934. Time_ReSet;播放时间重置
    / r& J; x' N( [% f# A8 e, B& a: w! _
  935. LDA #$00) }7 r1 \8 u* N5 L) |3 @
  936. STA Time_S4 {  j2 A2 W+ {8 T' F* P' A5 P. F
  937. STA Time_M ) r4 A& b% G. N  t* ]
  938. STA Time_H) m) y8 n1 }; d( ^
  939. STA Time_Cnt# ~) C4 c4 m2 J2 h# P* a7 n
  940. RTS6 `1 [; c# Q, k7 F: @) C3 a
  941. 0 O2 W0 x8 V( G& P0 t
  942. ;==============================
    0 b( t! _9 f* {0 s4 L( b0 ]
  943. Music_Bar_ReSet;音乐条重置
    & ?! g5 J3 s* l+ x$ }1 l
  944. LDA #$006 G" \$ p: i. Z- \6 X
  945. LDX #$00
    ; g) G3 e! J1 e7 X8 o9 V" G# g
  946. Music_Bar_ReSet_Set1 `$ N# k0 C' K& R7 Y8 \
  947. STA Sound_Bar,X8 {) W; O8 u' p* U
  948. INX( \9 n  ?- e8 l6 p# m$ [
  949. CPX #$10$ I, x6 s- z, U0 z: d! i3 G3 J
  950. BCC Music_Bar_ReSet_Set
    : ?0 J* f4 v: p9 J3 e5 q
  951. RTS
    & c+ q( ]. J' G6 L
  952. 2 n5 ^6 P5 ^3 E
  953. ;==============================3 j& c: x' c% X" j9 g$ Z7 {# y
  954. PPU_Data;PPU数据写入
    % T1 A: z# @4 M4 R: ]3 c* l4 T
  955. STY Data_L* y" ~% b: B" z! W
  956. STX Data_H4 C2 N9 D  j* g7 w1 m
  957. LDY #$FF" [$ a9 V; R3 ?* c  P+ v* o' {' d
  958. LDX PPU_Cur) u" W: N8 v) ]" A2 Q
  959. DEX
    $ f% a5 d) C/ [* \
  960. PPU_Data_Beg
    / K9 o" E- ^( H
  961. INX4 ]$ ]2 F5 n/ z0 B2 E1 ^/ Z3 v5 v: [
  962. INY
    1 S/ ?" F) P/ Q5 w9 P* e5 |8 ~. C
  963. LDA [Data_L],Y/ c- z: u% _+ v3 C/ R. c4 e, [  W
  964. STA PPU_Addr,X
    , R6 O+ S6 `$ W- g/ W
  965. BNE PPU_Data_Beg4 Z5 v$ u% R: s# e& [1 U! k; D# M
  966. STX PPU_Cur' x4 J9 G% p. g, W! R$ y
  967. PPU_Data_End7 b6 g% g$ ]4 h- A" h
  968. RTS  X- t9 V& `' t. N5 L& {% m5 y! b
  969. 7 X+ y; ^' f! [+ Y# ]8 Y  T# P# o
  970. ;==============================9 [& L$ ~8 {+ k6 b5 b: _) \
  971. Music_Stata_Show;播放状态显示9 m  X3 c. d; K! E
  972. LDA Music_State
    7 k7 Q. h* w8 T5 O  \
  973. BEQ Music_Stata_Show_Play* p3 E5 v% Z* M, F& d. _! W
  974. Music_Stata_Show_Stop
    & ]6 u% x; B* P1 r
  975. LDY #LOW(Music_State_Stop)  s5 F+ w0 y5 K
  976. LDX #HIGH(Music_State_Stop)
    ! r( o- _2 M' `: t% D0 r
  977. JSR PPU_Data9 o) c% i5 V0 d, D# b! B4 l3 b
  978. RTS
    9 u5 M9 X- V+ n5 Y
  979. Music_Stata_Show_Play
    9 }, W9 F6 X" u& B! T
  980. LDY #LOW(Music_State_Play)
    ( a: o" W; K, q: _7 |+ C
  981. LDX #HIGH(Music_State_Play)
      i. M2 j  }5 X0 T# L
  982. JSR PPU_Data, k: {0 X; j' w: w; e2 C. x
  983. RTS
      J' O% b( \4 Z
  984. % J% x% t. W' `& X: D
  985. .IF SOUND_BAR_SHOW_ENABLE
    0 h& s0 ^2 g! F, R
  986. ;==============================
    ( I2 A; ^6 }. Q
  987. Sound_Bar_Text_Set;标题与音乐条初始化8 L3 {  G( Y& U+ [2 c& z# l( z0 H
  988. LDY #LOW(Sound_Bar_Text_Data)
    7 ~( b; k$ K, b7 _3 y1 t: U- T
  989. LDX #HIGH(Sound_Bar_Text_Data)6 d/ F2 Q0 W6 E) D- t1 g3 @4 j. ~
  990. JSR PPU_Data
    0 O$ }9 k$ U8 \: B
  991. RTS
      o7 A+ i3 K) A

  992. - f. a9 _2 X1 w, n
  993. .ENDIF
    1 n: U* e' M- N/ P! S, T) S$ w
  994. . x9 _) m/ g# F
  995. ;==============================
    $ `( W0 i5 q6 ^- p# I8 v
  996. Set_NameTable_Attributes;设置命名表属性
    1 f/ V# x5 `9 \$ K7 Q# K9 h
  997. LDA PPU_STATUS; M7 v/ H4 a5 h& H
  998. LDA #$23: _) w9 `+ G, N  q3 S
  999. STA PPU_ADDRESS
    ! C) Q' z4 [6 Q( A2 x, J
  1000. LDA #$C0
    7 C3 v5 g' `2 I2 o. L" H7 p6 i5 j
  1001. STA PPU_ADDRESS
    3 p5 p- S% o. {) d* ?
  1002. LDX #$00
    2 j/ m* Y" C. @" s+ d# ?  B2 h
  1003. Set_NameTable_Attributes_Write
    . o1 y" S+ e, W( x# q% d
  1004. LDA Palette_Attributes,X* E8 J8 z2 \; B
  1005. STA PPU_DATA
    % c1 K5 I! c; c1 D. G1 C: {
  1006. INX
    - q4 g1 K1 T; j6 _
  1007. CPX #$40& Q1 t* f  q$ R5 ~2 X% a& H  J
  1008. BCC Set_NameTable_Attributes_Write
    ( P  w! {" j+ @
  1009. RTS1 X8 H  T* ?: F( C; Z2 f
  1010. , S$ U: z' |5 u! W& i, l  \( I% `; c, J
  1011. ;==============================  {" n- a: L+ f# C! c  ?
  1012. Set_Palette_Color;设置调色板数据0 T6 Q, \0 I% d& J, _1 M
  1013. LDA PPU_STATUS
    " ~4 n$ s0 T& L. g8 l9 q4 L
  1014. LDA #$3F
    , e* c" v4 W# _1 J% o7 r9 T6 w# E
  1015. STA PPU_ADDRESS
    ( @4 R2 Q! X7 C, e& D( {
  1016. LDA #$00
    2 l; n  e0 l& a# x$ O9 ?
  1017. STA PPU_ADDRESS' }3 C' s4 u+ T; t. D' k" d
  1018. LDX #$00
    - `; ^4 L! E9 E, s0 W6 ]1 H; m. y
  1019. Set_Palette_Color_Write* @: E8 [, a" `6 A
  1020. LDA Palette_Data,X
    0 g& D; A- b- g, e
  1021. STA PPU_DATA9 r& ?9 L) F" p
  1022. INX5 O7 X9 T) n; W( S. r, n
  1023. CPX #$20  c, _4 d5 c. G. c" ]3 ~! ?+ [
  1024. BCC Set_Palette_Color_Write
    8 U, D9 D! i" {: Y: t
  1025. RTS% L- v. G0 r# ]5 J5 s
  1026.   y. [- V" _9 q2 Y6 f: w2 s/ u! y0 w
  1027. ;==============================1 R. w" y0 V8 j# V
  1028. Init_Palette_Addr;初始化调色板数据
    * p# E6 K# e9 H+ i0 |
  1029. LDX #$00. d! P# S1 W7 r3 d$ y3 L
  1030. Init_Palette_Addr_Write4 v0 m* g6 u' z1 a2 z9 @
  1031. LDA Palette_Data,X2 d+ c0 d4 Q' Q; Z( p1 j& o9 @
  1032. STA Palette_Addr,X& L7 }7 x  G8 `" b7 g' B
  1033. INX9 r" _0 e8 ]$ E
  1034. CPX #$20
    % d" F2 a. L$ L$ Z, H" |  a) s
  1035. BCC Init_Palette_Addr_Write
    1 N4 I! w$ L# l
  1036. RTS* D6 o* X9 K1 m5 |4 f& E

  1037. + C2 p* _* j- u$ e1 N' Q
  1038. ;==============================
    9 b5 ?( s- B+ o0 l6 _( w
  1039. Update_Palette_Color;更新调色板颜色) R0 l1 q0 b7 _8 s
  1040. LDA Show_Track_Name
    ) h! j) X. t! L7 y" m
  1041. BNE Update_Palette_Color_End. K. v/ H  O6 @) o
  1042. LDA Palette_Update_Flag( Y- H- L5 p$ R7 K4 h- g
  1043. BEQ Update_Palette_Color_End. m: ]1 R, H7 f1 m9 P, h
  1044. LDA #$3F- W4 J, O4 Y; H: I* ^& v0 r0 a* S
  1045. STA PPU_ADDRESS% Y/ `: u! q* \2 q
  1046. LDA #$00
    ! _6 s7 k8 N6 J! g% b6 f- l
  1047. STA PPU_ADDRESS
    & ?8 z: q3 n( U  Q9 l- Z& u: F8 _
  1048. LDX #$00( U, g' t5 ?, w4 [
  1049. Update_Palette_Color_Write
    ) T5 C' L$ [5 h/ r2 R6 K- Y! U
  1050. LDA Palette_Addr,X- d" D5 ]( j& H* u" s
  1051. STA PPU_DATA
    , E9 H2 G5 E4 Q6 P
  1052. INX
    2 C- f4 }4 b3 L) _! n( @
  1053. CPX #$20( M  x6 D$ i3 P+ q5 B1 E
  1054. BCC Update_Palette_Color_Write
    0 S8 z! D6 ]. x$ ?$ R6 G
  1055. LDA #$00
    7 I$ e% H1 ?$ z( I1 g1 `& E
  1056. STA Palette_Update_Flag
    6 U) q. t, k% T. c" N" b$ k
  1057. Update_Palette_Color_End
    5 j7 L; o' Y% K; n( U) c$ `8 c
  1058. RTS* N* Z  c( P! o- C" y
  1059. + K! A, ]! Q" P. V
  1060. ;==============================
    ' W0 S4 ?8 w$ L1 {* h
  1061. Update_Palette_Data;更新调色板数据' t+ W( n% i7 b/ J) W6 p& `7 E$ V
  1062. LDA Show_Track_Name
    ; I) X: }8 B& i6 t  p  n6 w7 [
  1063. BNE Update_Palette_Data_End! L  Y( k! `% V* D% g8 ~" w& B
  1064. LDA Music_State
    + ]6 [! @/ {  C! X5 V8 g7 t5 x
  1065. BNE Update_Palette_Data_End
    # k; V+ u# a# k9 {+ R' i
  1066. Update_Palette_Data_Check4 E5 ^; s3 P3 Z, `& i, d8 P) i7 B3 \7 F
  1067. LDA Palette_Wait_Cnt- k* p( _5 o, S
  1068. BPL Update_Palette_Data_Check_Over
    + t' l) S$ Q4 D4 H
  1069. LDA #Palette_Update_Interval
    ) Q" O- F$ _; h2 h: ~' f
  1070. STA Palette_Wait_Cnt, n& b9 i$ i7 L( y/ \
  1071. Update_Palette_Data_Check_Over
    5 d' ^, ?+ E  E6 D+ Y
  1072. DEC Palette_Wait_Cnt
    : Z0 n5 j2 H. o7 ]) s
  1073. BNE Update_Palette_Data_End& @2 v/ X5 o- e; a! Y( V1 g
  1074. INC Palette_Update_Flag
    2 |9 b, s1 u9 q" M: F
  1075. LDA #Palette_Update_Interval  l, \5 R4 G- j" o2 n
  1076. STA Palette_Wait_Cnt
    4 r! C# [7 m, a4 S6 J
  1077. LDA Palette_Update_Addr
      A% K  f4 k4 f5 U" K9 k# @
  1078. CMP #Palette_Update_Max/ U% f) \! n5 L% ^  X3 S
  1079. BNE Update_Palette_Data_Set9 ]( Q* @$ k8 E2 d% d6 m) ^- ?' Z& e
  1080. LDA #Palette_Update_Min - 1
    $ p! b, I9 P/ U/ Z' \- A+ [
  1081. STA Palette_Update_Addr$ v; J- k( r+ s. @
  1082. Update_Palette_Data_Set
    ! T" s8 J' x' O9 ^
  1083. INC Palette_Update_Addr
    0 t& g2 {- t* I% ~5 D
  1084. Update_Palette_Data_End
    1 F* ^3 L- U4 x1 L
  1085. RTS" d9 e+ ]4 G( }& c. P6 ]$ W
  1086. 6 _8 M# K7 B; W9 z
  1087. ;==============================
    1 Z2 t) p$ {! l$ |# ^: X
  1088. Show_Music_Text;显示静态文本
    2 Q1 s* K% o: u+ I% D
  1089. LDX #$00
    7 y) ~6 `  R- b8 u: W0 a( X
  1090. Show_Music_Text_Set
    ; k8 t* ^4 v" b7 p
  1091. LDA Static_Text_Data,X- J+ h5 M  D! z! _1 X. F" G
  1092. STA Data_L; C/ S& W+ t+ N" K. F" [. \3 F. j9 G
  1093. INX9 u; J( y" \4 D" o$ s/ H/ C
  1094. LDA Static_Text_Data,X! b! N2 ~) j5 \* S1 t: q9 ~
  1095. STA Data_H% m5 P2 C# W# F/ `, _% ]) |/ p
  1096. INX9 [0 R; [6 J' Q
  1097. LDY #$00
    ; G/ x$ _  R2 Q
  1098. LDA [Data_L],Y
    0 t! |6 P+ F9 D! `: R' A% p& H
  1099. STA Data_Cnt7 @3 k' p  X* l( Z7 M
  1100. DEX% ~, _( `; I1 {7 }! ~8 {, S
  1101. DEX* y2 S8 K4 z9 ?! s0 _0 o
  1102. LDA Static_Text_Pos,X
    + T2 V, D  C$ L+ I, ~7 b
  1103. STA PPU_ADDRESS, N+ ^+ ]0 a! f
  1104. INX
    . `0 s7 |4 z5 |' v# b; o
  1105. LDA #$20
    ; `3 W# o% ]  E3 j  u( O) S& M
  1106. SEC
    * h! C/ u  g2 O
  1107. SBC Data_Cnt
    / ^5 R- l4 G* y  K! l
  1108. LSR A) c; j* R0 N) V/ N1 a+ J
  1109. STA Data_Buf! e% g7 o8 e6 I1 P# ~! d6 b4 Z
  1110. LDA Static_Text_Pos,X
    * v$ \5 |* j% J3 {$ u
  1111. AND #$E09 u3 j8 v+ n) \& e
  1112. CLC' Z5 w' W: F% v& s
  1113. ADC Data_Buf) W8 D# l1 d1 C5 @2 d" e
  1114. STA PPU_ADDRESS8 l  h5 r) u9 b
  1115. INX& O; i; |  g5 j0 J) o5 q. y* B+ O6 |
  1116. Show_Music_Text_Set_Write( t" \# K+ z3 M# R
  1117. INY9 s& w* [2 R7 J# h1 m
  1118. LDA [Data_L],Y/ z2 t3 T8 u; w' {
  1119. STA PPU_DATA
    2 @  T- N/ f+ r
  1120. DEC Data_Cnt# W% s+ [% O% _6 b
  1121. BNE Show_Music_Text_Set_Write. _$ J8 P) T) x9 I& a+ Z8 v1 u* s; w
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos7 S. ~. C  n' u7 Y6 I4 ^, W9 z
  1123. BCC Show_Music_Text_Set+ |7 R) u/ ?5 Z$ |( n
  1124. RTS
    ' D5 o/ \/ Q/ `# O$ u( {
  1125. % D9 l& o- O+ v+ Q
  1126. ;==============================, L* j0 N* |8 O. v2 k$ t
  1127. .IF Track_Name_Pos;显示曲目信息
    # Z. t6 T8 L7 F
  1128. Show_Track_Info
    $ r  x$ p+ k7 H4 J* ^
  1129. INC Show_Track_Name
    4 [' V; G' R0 \8 `6 W2 }
  1130. Show_Track_Info_Clear+ R6 z, a  \3 e9 T
  1131. LDX PPU_Cur5 v$ T2 U3 w( W! O1 J8 q: S0 ?
  1132. LDA #Mode_Clear
    9 g1 q. n8 K: h2 r0 w. B  t
  1133. STA PPU_Addr,X, w# }1 d& P3 C7 ]( m# I' J7 t
  1134. INX# t& G: l' _: q) C, x
  1135. 6 q9 w" O. e, _
  1136. LDA Music_Last
    " `: C$ L1 t$ a& J. Z
  1137. JSR Show_Get_Track_Name_Center_Pos
    " ^+ m) G4 U: c  J: H
  1138. Show_Track_Info_Write_Cur
    ) _( t/ f; k: |4 \
  1139. LDA #Mode_CntLine
    3 o! R" d2 Y: H
  1140. STA PPU_Addr,X
    4 [' W6 k! U% P* g7 Z" k3 a, I6 J
  1141. INX
    6 n( ?1 `2 i* O$ I
  1142. : {9 n, N; V* [# `( z
  1143. LDA Music_Cur8 ~7 M2 u/ c  P* x* M+ f* E
  1144. JSR Show_Get_Track_Name_Center_Pos( P6 U  n) M4 P! ?' y: t: I& C

  1145. & m2 r- I( U# l& D" u% J# t5 G
  1146. Show_Track_Info_Write_Cur_Data
    " \; w) W( f, }9 T
  1147. INY
    7 c+ Y" ^+ A" m0 {
  1148. LDA [Data_L],Y
    ) M) g4 y2 R( a
  1149. STA PPU_Addr,X
    ! a" A$ P- F8 K5 m3 r
  1150. INX$ L6 T. _9 \; v: y; m  J* T( X/ ]
  1151. DEC Data_Cnt3 e& R: z; h% b/ B1 c& J
  1152. BNE Show_Track_Info_Write_Cur_Data
    1 ?, m+ T. D. I  ]8 J% X. g! W
  1153. Show_Track_Info_End
    2 ^: I( U) X2 {0 d
  1154. STX PPU_Cur
    8 H6 Z3 X2 f+ Q) H
  1155. RTS
    , B! b/ j. w. Z6 B7 H
  1156. 2 N2 n! V$ Q* b/ ^
  1157. ;==============================
    ) |3 I! Q$ o+ ~  \1 V2 Y
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置% g9 c7 Q. h  j5 u" q- c8 u
  1159. ASL A
    0 j' t$ Z! |! k$ c
  1160. TAY
    + L0 H. h& f& p3 G8 ~" X' q
  1161. LDA Track_Name_Addr,Y
    $ \& g6 D1 s5 @% J: }
  1162. STA Data_L( f* K# ?6 L# O7 f, }1 G% H: b' G. t
  1163. INY
    8 P0 x' A* `6 `/ b3 E4 n% |& g
  1164. LDA Track_Name_Addr,Y& m0 `( D5 x6 ^0 [" q1 Z) e
  1165. STA Data_H! Z+ o; B" c" N' i. I
  1166. LDY #$00( u6 g: o5 x2 y& a; p
  1167. LDA [Data_L],Y4 D; Q& z3 N; v; E# P& |) K1 F) \5 k
  1168. STA Data_Cnt
    # D) J& R/ O  h$ ?- T9 a
  1169. LDA #$20
    0 Q5 J: c- j9 B  E- R& `
  1170. SEC
    : j+ ~# f) V# Q" \2 s; J! g
  1171. SBC Data_Cnt
    : D1 I4 c# e3 D$ j( R
  1172. LSR A8 G5 X1 x/ \$ z; }" u7 z
  1173. STA Data_Buf
    " k6 N: Y( g5 R" V! F, o9 x) V
  1174. LDA #HIGH(Track_Name_Pos)1 y' c9 v) R; `0 X
  1175. STA PPU_Addr,X- G% R. D( ]. D* ~; ~! Y# E
  1176. INX
    ' r  z" d% p# ^
  1177. LDA #LOW(Track_Name_Pos)
    * ^7 A  y. r5 Q$ Y1 [5 H
  1178. AND #$E0
    8 O; Y' ~& B  @2 H/ @: o  s$ e+ A( k
  1179. CLC* z0 m; ]: p. P: Q$ E
  1180. ADC Data_Buf& x# T* n; k. M6 x8 @$ z$ s& N( C
  1181. STA PPU_Addr,X# z# _) h0 z; E9 q
  1182. INX! D" g* J; `: W6 x. H
  1183. LDA Data_Cnt
    ; ?' P0 d5 B2 S6 ~( \
  1184. STA PPU_Addr,X
      q5 x7 R3 w7 Q& f5 c
  1185. INX4 B2 `0 g+ }1 I2 E" [# g7 u
  1186. Show_Get_Pos_Center_End5 ~# h3 \; |: g- ^) ~/ m
  1187. RTS, p7 g" `. P9 S. m: H9 `. u
  1188. .ENDIF! {: [% r3 @$ V1 r
  1189. ( S( }9 {; d# O! E9 h( V8 n
  1190. ;------------------------------* `2 }* C  X1 h0 {# N+ Y% B
  1191. ;命名表数据3 o& ~: q8 ^. C" O7 h' z! O' n) a
  1192. Palette_Attributes
    0 t2 h7 {) h, N( ]" O* H! [
  1193. .IF SOUND_BAR_SHOW_ENABLE+ g6 F! F" g9 t, i
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$000 @0 P: W' k! v; s- d
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    / X$ h; P, U* T
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    ( F' \9 r* O; h; Z- X- {( o
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " O9 u. p6 K! Y( a$ `
  1198. .ELSE7 u5 ]9 M. S8 h
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    8 u* }. a8 a4 D/ ^% u
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    ( x. X  X- J* \( y
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    $ w- O6 z/ f  i4 I
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    ( K$ q; q4 N& A! |
  1203. .ENDIF
    $ d; \0 n: x- P/ {1 C" P! c

  1204. $ S6 K' r  |# `
  1205. ;------------------------------
    4 }1 D8 \6 U2 R% L
  1206. ;调色板数据$ Q! F7 N! @8 H8 [6 j
  1207. Palette_Data
    / N9 K: Q1 H5 T- T" L, X" ~/ ^! n
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    ! u$ {8 l9 a6 ^9 T/ {% X
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    0 P/ I3 B0 p1 q5 ?
  1210. % O9 ?  W) y% r+ C
  1211. ;------------------------------6 S! s0 K- d8 j
  1212. Static_Text_Data; ]4 i0 u& A' N5 N4 _
  1213. .WORD Static_Text_Title_Data, ^$ b$ L! v/ \: f0 K5 N0 ^- [
  1214. .WORD Static_Text_Author_Data/ U# ]/ l( F" O
  1215. .WORD Static_Text_Date_Data
    ; i9 U7 ^8 M/ z1 L6 n4 j% n
  1216. Static_Text_Data_End
    ; h, ]3 I5 F. J

  1217. . J( l& f2 ?: k3 u; W9 y. q( s
  1218. ;------------------------------; g+ L" Z3 g1 J9 p1 z) p" }0 \
  1219. Static_Text_Pos7 z2 G! `* V7 ^/ }: A2 ^
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    7 @, M- \5 B. R: H! U; P
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)' [; m1 I/ l6 \# x5 b0 `
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos); G* e. I. U2 t4 \
  1223. Static_Text_Pos_End" X  p4 a$ ^5 m% j$ W0 ~
  1224. 6 l0 U* \8 L0 U8 |/ ^
  1225. ;------------------------------0 I" W5 q7 |8 h! |/ P6 _+ u$ u
  1226. Music_State_Stop
    9 X( J$ Z) X! m5 h# b
  1227. .IF SOUND_BAR_SHOW_ENABLE
    5 `: s* a- {' `1 R* P, y) D2 X; R
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00: j# y! d3 R# U  D# f% J
  1229. ELSE
    , C+ f* h& y$ ?" a8 g
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$006 P8 F; x" W2 ?( `; B9 n/ b% @
  1231. .ENDIF
    5 P2 O) R2 i& d" W1 k* ~/ {7 G  I% X
  1232. Music_State_Play6 t5 S: q/ t: l& }9 B. r
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00+ `! U  K; q# F6 O6 [* @% w. l

  1234. & @; x% Z" P  e" W% S' i
  1235. ;------------------------------' _# |) y) E5 U% ]+ _. a6 ^
  1236. Sound_Bar_Text_Data;声音类型文本
    ! \% k# [9 C+ A1 Y% p
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    ( B$ ^, K6 l. J/ B: i7 n7 T/ Y) A
  1238. .DB "SQ1-",$FF" y. q+ M2 ~6 Y6 A: Y! }
  1239. .DB $FE,"SQ2-",$FF
    + j2 d) `( |3 B6 S0 b! o- |5 o2 w
  1240. .DB $FE,"TRI-",$FF
    " [, X+ e% ^; r1 P2 z* Y$ w7 _1 I
  1241. .DB $FE,"NOI-",$FF3 H6 U2 p$ Q% F- R
  1242. .DB $FE,"DMC-",$FF,$00
    6 J8 u# m% t7 k) Y" r
  1243. 6 C( W" G+ n, }% M* U" f0 Z
  1244. .IF Track_Name_Pos
    1 m5 X" X8 T' S9 A, d- k
  1245. ;------------------------------
    " k2 G. \1 i9 z* @2 T+ H
  1246. Track_Name_Addr;曲目名地址索引# M6 m8 R% F; W
  1247. .WORD Trackr_010 Y, p$ O2 n. j5 s
  1248. .WORD Trackr_02; r* V8 t0 ]6 J* J
  1249. .WORD Trackr_03
    8 q# w* C, z/ \& C* x. h) Z$ q
  1250. .WORD Trackr_04. R5 D% L6 o: Q2 |
  1251. .WORD Trackr_05  G6 u! G* p$ X; K4 Z8 ]& N6 \1 k8 U
  1252. .WORD Trackr_06
    5 N' G0 w6 j4 R9 J; {3 N! h8 x
  1253. .WORD Trackr_071 A9 [) @; @4 D" X
  1254. .WORD Trackr_08$ A% ]+ B: H# D) Z
  1255. .WORD Trackr_09
    1 B: l2 q5 H3 f# M# ?+ c
  1256. .WORD Trackr_10
    3 L  E- G( g. e, }: D
  1257. .WORD Trackr_11- ]6 F6 K9 m% F+ \( A4 g) W
  1258. .WORD Trackr_12
    ' u5 p) C* W' Z, V
  1259. .WORD Trackr_13
    1 N7 {0 j% m0 s4 c) D/ o
  1260. .WORD Trackr_14
    % R* m$ B- q$ F# }5 P9 }
  1261. .WORD Trackr_15
    % t# c; I$ d7 X% G1 c
  1262. .WORD Trackr_16" Z. n: O, ^, p1 z9 E: f( @
  1263. .WORD Trackr_17
    7 b; v/ _% K1 F5 r* j6 W
  1264. .WORD Trackr_183 K9 \9 Z1 s7 e
  1265. .WORD Trackr_19
    / l9 L/ y( Q7 L! r6 @+ p7 F8 R
  1266. .WORD Trackr_20
      O1 e" J+ ~4 o' j  t
  1267. .WORD Trackr_21
    * M% a" s" l- o
  1268. .WORD Trackr_22
    & N0 |) H% s3 j' B" s& X; D
  1269. .WORD Trackr_23* ]& `1 o* n/ w3 T0 y$ i4 m( ^
  1270. .WORD Trackr_247 X' N6 T" ?! }- z$ {9 q! d
  1271. .WORD Trackr_25
    & \$ M0 T/ e/ o3 S6 ^4 E
  1272. .WORD Trackr_26/ w% p0 Z# I# D# v7 Q7 {. y
  1273. .WORD Trackr_275 Z5 q9 D: [+ I: n3 J0 X+ s
  1274. .WORD Trackr_28
    / Y1 K# [) e/ ~. R
  1275. .WORD Trackr_29$ `5 J+ V' h. N' V
  1276. .WORD Trackr_30; d+ N/ j& f; I% K6 T4 |# l
  1277. .WORD Trackr_31
    5 K( i+ A9 C' N1 Q" K, D  S
  1278. .WORD Trackr_32# l6 i6 E! r% M, t
  1279. .WORD Trackr_33
    / @) ^' c5 w! U( o. s! U; ?) \! Z# Q
  1280. .WORD Trackr_34
    ) \0 {+ [3 u/ g' I! A
  1281. .WORD Trackr_353 j; S8 @# A5 G2 C& _! f1 ]
  1282. .WORD Trackr_36! P1 A+ d9 X% z  a3 Q
  1283. .WORD Trackr_37
    $ `5 v+ L% }3 |% B
  1284. .WORD Trackr_38
    9 Z7 b. `* o0 @9 ~- Y' ]
  1285. .WORD Trackr_39
    2 p4 a3 m+ Z. m  u
  1286. ; ^% P1 ]' u+ I% w
  1287. ;------------------------------4 ]$ T( j, ]* d- J1 Y& D7 A0 I
  1288. Trackr_Name_Data
    % v8 w7 `( Z* Z) r! t& n
  1289. Trackr_01 .DB $05,"BGM 1": d1 J; n% r( C2 g3 N
  1290. Trackr_02 .DB $05,"BGM 2"
    1 f: a" S- N$ N5 [' [. x* A+ S) M
  1291. Trackr_03 .DB $05,"BGM 3"( h" w/ W4 i/ ]9 q6 d; e1 T) w
  1292. Trackr_04 .DB $05,"BGM 4"& F/ C0 x0 W5 S* T/ M
  1293. Trackr_05 .DB $05,"BGM 5"
    $ q  h: l" t/ t5 V1 i6 r6 Z
  1294. Trackr_06 .DB $05,"BGM 6"
    5 P' M4 {; O& ?; a: {4 z, ]
  1295. Trackr_07 .DB $05,"BGM 7"" y- A+ x6 ?% [: D0 s
  1296. Trackr_08 .DB $05,"GREAT"
    2 L0 O! e( W+ O4 {+ D( ]( t( p
  1297. Trackr_09 .DB $08,"BOSS BOM"
    0 [; U6 I% U4 D  T/ h
  1298. Trackr_10 .DB $08,"BOSS2BGM", t+ q+ e2 \8 H  N- E
  1299. Trackr_11 .DB $07,"P CLEAR"
    2 X! U( _4 j) U4 x5 z
  1300. Trackr_12 .DB $07,"A CLEAR"9 d( V: U9 g8 i, T" ]6 p& H5 n
  1301. Trackr_13 .DB $04,"OVER". u1 \4 @: R( X5 w8 k; t5 o1 H
  1302. Trackr_14 .DB $06,"ENDING"  \. D2 \, x" E# L! d. x. w! c
  1303. Trackr_15 .DB $04,"SUTA"
    5 E7 N" M; w  h& G! H! s
  1304. Trackr_16 .DB $07,"THUNDER"5 T- s: x0 |8 K( O
  1305. Trackr_17 .DB $04,"SHOT"
    % B* t; v) E' b8 \& D4 h6 x4 c; [
  1306. Trackr_18 .DB $05,"LASER"4 E7 S2 x/ V; c0 S) J5 l" o
  1307. Trackr_19 .DB $06,"SPREAD"
    1 I7 F: H2 e; o4 ^# y9 A
  1308. Trackr_20 .DB $04,"FIRE"/ m" C1 T; F: N8 v7 S" a6 l
  1309. Trackr_21 .DB $06,"B SHOT"
    & ~( \; s7 b3 C0 H! X$ q
  1310. Trackr_22 .DB $08,"T DAMEGE"& B* O. Z2 ^! f" r! F
  1311. Trackr_23 .DB $07,"HARETSU"
    ! ~, _8 }+ W8 {& Y  g
  1312. Trackr_24 .DB $05,"T OUT"9 s( e4 d3 J/ {8 r
  1313. Trackr_25 .DB $05,"Z OUT"
    # h- H) F, x  V5 N2 M5 S
  1314. Trackr_26 .DB $05,"A OUT"
    % s1 A2 n5 B! I, Y+ e
  1315. Trackr_27 .DB $04,"ROLL"
    ) g  Y0 K3 G8 |+ i& H4 Y
  1316. Trackr_28 .DB $06,"APPEAR"4 p2 _9 C4 u  z) _  [, R; i
  1317. Trackr_29 .DB $05,"POWER"5 {/ M" w" W2 o- R2 _) G
  1318. Trackr_30 .DB $07,"BOKK BK"
    8 g% I7 S0 s4 `5 A3 a8 ~
  1319. Trackr_31 .DB $08,"BAKUHA 1"  W/ Y  X! l, F8 w
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    : E% G; b8 v" o& C1 e- K+ l7 G
  1321. Trackr_33 .DB $05,"ARUKU"
    2 B* F: B4 H9 |/ N( K3 _
  1322. Trackr_34 .DB $06,"JIWARE"8 o$ N- h" i- g. j2 j  `& c+ g$ P' }
  1323. Trackr_35 .DB $05,"SILEN"9 W% O9 ^7 ]- O
  1324. Trackr_36 .DB $05,"P 1UP"
    3 N6 k. K, m" H4 W
  1325. Trackr_37 .DB $05,"P OUT"' y' E! p) [' ^6 g) |
  1326. Trackr_38 .DB $05,"B OUT"
    / H. k3 s3 h+ ^8 I7 z
  1327. Trackr_39 .DB $05,"PAUSE"
    4 M7 p: P6 ?% f% ^

  1328. , T/ D% B( y% N$ l( n
  1329. .ENDIF! X9 {  r1 j# N8 o; b9 l
  1330. ; C% \0 J" j0 m. w6 }
  1331. ;------------------------------; P! g) w/ S( G. S" C& l- q
  1332. Static_Text_Title_Data;静态文本数据
    2 `! H! ~3 T& X+ x/ Y0 T
  1333. .DB 12
    , n( t) {1 l+ X) m% ~: v/ B9 S( H
  1334. .DB "SUPER CONTRA"
    & n* h7 X+ \4 F
  1335. Static_Text_Author_Data3 g5 a' D3 W/ r" I9 i" C2 U
  1336. .DB 23
      p4 ]5 M$ r1 G
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    $ }6 P# Q' O* D8 ?
  1338. Static_Text_Date_Data4 y+ @8 N8 b; \, T1 M
  1339. .DB 10& E* X7 Y. e3 `% d  C
  1340. .DB "2023.07.11"& P- G/ q- A+ u8 N7 e- I
  1341.   S, y$ ]  \( N1 z9 V6 ?; X
  1342. .BANK RESET_BANK & BANK_DATA_MASK3 T& \  Z9 \9 Z7 L4 W& `2 T8 g9 N
  1343. .ORG RESET_ADDR" q) c' O9 a0 s- G! @  [/ ~! \

  1344. ! L1 O) [- r* H- H- _
  1345. , [/ t* {6 A1 ?; `. p/ v
  1346. ;==================================================1 F: w! e0 m6 X/ {( Z
  1347. ;切到主程序bank
    * l4 P1 C! z9 B
  1348. SwitchMainBank
    ( m, J& U* E2 @% l: ~4 k1 j
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    + O* N& {( [; W, I
  1350. JSR SwitchBank8000
    0 `/ K; ]% j* a6 G
  1351. RTS
      V! @4 p8 q& o1 n

  1352. $ Y+ D) F; Z0 S/ ]- W
  1353. ;==================================================
    $ g% C% ]6 V3 G+ N/ c
  1354. SwitchBank8000;切换bank到8000-9FFF$ G1 c% z  q9 j" J3 M
  1355. PHA+ c. k/ y* [5 D5 d) ]& k
  1356. LDA #$06" t6 f1 O9 o- A8 M2 T- e! S4 @
  1357. STA MMC3_BANK_CTRL
    ( M1 e1 p) }2 k( Z+ A# E, H
  1358. PLA
    ! Q, A3 A: f# a+ g; x
  1359. STA MMC3_BANK_DATA
    # |" Z( W  v% g/ T, c2 I5 o
  1360. RTS1 U: h5 v3 J) k1 I! c- r

  1361. ; A9 `" v  W" ~
  1362. ;==================================================
    . D% h* c' a+ A8 Z* F
  1363. SwitchBankA000;切换bank到A000-BFFF
    9 r. h. S- Z! L4 J
  1364. PHA/ L! v7 }. Z- P
  1365. LDA #$07
    * X3 |% A5 L3 H
  1366. STA MMC3_BANK_CTRL/ H; |. [+ C% D) T; H8 l
  1367. PLA
    * V( j& C" _( Z' \% C7 {
  1368. STA MMC3_BANK_DATA2 o$ D! T$ ]! w& M- A
  1369. RTS" G+ Z7 U, @8 j* f/ b7 y( W

  1370. & o  P, j4 r( G$ D, w! m
  1371. ;==================================================& B( k6 t0 B6 I
  1372. Sund_Bank_Init;音乐bamk初始化+ G0 k8 F) H; S" V' p
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    & Z$ E& x* |6 m: d
  1374. STA Music_Bank_8000" r; f% u: ?2 p3 r' P7 w
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK2 r/ {7 c- f( J0 Z5 f8 O6 I7 m
  1376. STA Music_Bank_A000: r5 b0 z  h5 e
  1377. RTS$ N& I8 M0 _7 y( w0 s* w2 N, G* l

  1378. % Q: |' |- U( B- c. y$ u# F
  1379. ;==================================================9 F9 [, i* ~# O- M$ ?
  1380. Sund_Bank_Set;切换音乐bank+ Q. Z% x% p. b8 ^" N
  1381. LDA Music_Bank_8000
    , {3 T$ u( f, D1 l4 s/ R6 f' U+ F" H
  1382. JSR SwitchBank80007 \4 `5 @- j! X& W: n
  1383. LDA Music_Bank_A000' `' W5 I0 F* ~1 x, d
  1384. JSR SwitchBankA000
    8 X2 }' t4 W2 F* t5 R
  1385. RTS, y* K! j9 X+ x$ _: X7 M

  1386. 2 R) s6 a. k$ ~- d
  1387. ;==================================================( K7 |. {+ G/ T8 w, Z& O* x2 z
  1388. Sound_Init;音乐初始化
    0 W( `0 X' d( |4 g* L
  1389. PHA
    7 L& ~, |0 d1 m) n0 i# @' t
  1390. JSR Sund_Bank_Set4 Z/ d' _" y9 Y4 S, z& d, G4 p
  1391. PLA
    - A/ i; t5 m( _% r# |/ v3 f# \
  1392. JSR Music_Init_Addr6 y5 g  Z9 K# u# @+ c
  1393. JSR SwitchMainBank
    ; S6 _4 {* \% O5 Q) T' o% V& B$ \$ H
  1394. ; G6 u, Q( i) @3 U
  1395. JSR Music_Bar_ReSet
    ' ^- p3 b3 K6 C  G( y6 d
  1396. JSR Time_ReSet7 c9 B& W" ?4 N
  1397. LDA #$00
    1 x+ G% o8 p+ a% V/ x
  1398. STA Music_State' r* K7 J* {6 z4 Y1 }
  1399. JSR Music_Stata_Show
    * p. H$ o( D3 X: @6 Q
  1400. .IF Track_Name_Pos! M/ ~3 M# q8 C! B/ U
  1401. JSR Show_Track_Info, ^, U2 v$ P; u% n+ ~6 F$ ~% l. {
  1402. .ENDIF( b$ a; N$ o* c  g7 x' Y
  1403. 7 [/ O" f' H8 x+ a# s. {
  1404. RTS: {4 q& _* c6 w: v" L

  1405. ( V" C8 b/ ~. ?9 S/ f" [
  1406. ;==================================================
    ; M& |2 V2 s: c8 N- ]8 e& s, o
  1407. Sound_Play;音乐播放
    ; b! |- D% ]( k6 i! M  B
  1408. PHA
    ' p  @% j- g* S; @, q
  1409. JSR Sund_Bank_Set& E, n% k5 C& K
  1410. PLA# u- _. F( h* f* l8 ^
  1411. LDA Music_State
    - z- L- E5 H3 m+ _9 H
  1412. BNE Sound_Play_End
    : M- e! E8 B( A* ]& s
  1413. JSR Music_Play_Addr8 b4 S. X4 ~/ D& d2 e1 g# ~
  1414. Sound_Play_End
    , p1 M6 ~- |) d
  1415. JSR SwitchMainBank+ U- l7 v: M; _: d
  1416. RTS
    . \8 m# z4 j$ u. ?

  1417. 9 X4 P! a8 R( h) E: Y) P: L+ L
  1418. ;==================================================- m3 _. k( s/ A& N* G+ x3 R( l' Y* s
  1419. .IF Music_Reset_Addr6 \5 \2 }% j8 }. r7 q
  1420. Sound_Reset;音乐重设(如果有的话)
    . c% r6 z6 m2 W; W9 C- x
  1421. JSR Sund_Bank_Set
    8 f& H4 n" B0 r: f
  1422. JSR Music_Reset_Addr
    ' P- S: F1 I3 j6 h# _+ t
  1423. JSR SwitchMainBank, q  J% }8 `) f* B
  1424. RTS
    5 T; [2 ?. d6 B
  1425. .ENDIF9 y; R: K2 X" r# t2 Y

  1426. 3 t+ T, D9 k7 O3 I- w7 F, ?
  1427. ;==================================================  z; [  S# ~) N# ^
  1428. MainLoop;死循环' D% A% j! Q7 P- M; e8 w
  1429. JMP MainLoop
    0 V; b* X: ]$ L* U

  1430. % y3 `6 |6 Q* f8 t# L0 P
  1431. ;==================================================' T2 a. T7 j- f! T" i+ A6 R
  1432. NmiProgram;Nmi中断处理7 e/ ]9 h7 T" L( Y6 f
  1433. PHA/ s" o) Z/ q0 P" h' j7 D. I- K
  1434. TXA! }* n# k. \6 F, M. l1 t6 a1 y
  1435. PHA
    7 U( s: Y- ^% H3 y* _
  1436. TYA' m5 u. @% f  p' w5 B
  1437. PHA) J/ U5 l  C: c- ^4 y' ^% g
  1438. $ y0 `" o. _/ l
  1439. LDA PPU_STATUS0 c! R* G. w7 p" H4 H' u% L
  1440. LDA #$008 e$ ?3 u- K8 S. [
  1441. STA PPU_CTRL: F4 i  d  Y. ]/ Z  H

  1442. ' T2 Z/ y0 t( z
  1443. ;切换主程序bank
    + g1 K: T6 T( V7 _0 o( l
  1444. JSR SwitchMainBank
    2 w  L3 o/ L" g5 C* m+ M

  1445. 6 |, z9 {1 }7 i. P) H" e
  1446. ;NMI处理, G  h4 u4 B$ ~
  1447. JSR NmiProgramProcess
    0 `" m9 B! }% i4 M# B" @; e
  1448. $ D# F0 k/ J" v0 U$ W4 h( f
  1449. Nmi_Proc_End
    + t8 m" x. _+ Y* t4 U6 h$ @( L
  1450. PLA3 [; s$ c5 i7 {0 E
  1451. TAY( ?2 c+ N& J6 \1 }  A
  1452. PLA
    , f& b' P4 q" T
  1453. TAX
    : O  A% k+ B$ @& `( n6 p# w0 M+ `2 H
  1454. PLA$ t( U5 s5 {- m8 M3 t: m

  1455. # x& J3 N' I4 T) m( n
  1456. RTI0 Z0 d! \& L! y9 p; i, K0 M; Y/ G1 |

  1457. ; _, |; F6 a8 H0 D+ t* q
  1458. ;==================================================0 v, v* f- c6 k8 |5 K- B, O
  1459. ResetProgram;重置中断处理
    / G! B) g7 U' m. U
  1460. SEI  v4 o! L  q& C
  1461. CLD% Q( V% ?7 r; v& {: N: _) p
  1462. LDA #$007 Z" y0 t# ]( D9 H3 x" |2 B
  1463. STA PPU_CTRL
    ) w; S9 Q0 m  ^  k" d  O
  1464. STA PPU_MASK) N" p: M- s+ W! f6 l/ `
  1465. # E2 Y  u. o3 n0 ^* H4 E7 A% V) ]
  1466. JSR SwitchMainBank
    % |& i$ ?; d# `, M
  1467. JMP ProgramBegin+ g$ _7 V0 O3 J5 b1 i! Z
  1468. 3 E+ k  J* r6 Y5 Y* `) R! c$ `4 s
  1469. ;==================================================/ [  s- U/ G$ S  r) {
  1470. IrqProgram;Irq中断处理4 O- P4 u; f# S# k
  1471. RTI1 p; p; n9 d# {
  1472. # R. c1 s2 T- i2 v6 B' r, X/ A- c
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ' n; s, Q! s. I' Q1 `! L
  1474. .ORG $FF80
    5 o8 R) ?+ w- V
  1475. STA $4000,X
    % `! V3 w. m* w- v' i! k# t0 Y
  1476. STA Sound_Bar + $00,X; O# Z5 L& @6 T$ y
  1477. RTS
    ! m% `. R" r+ z7 x
  1478. 3 G: U' `; X0 ?- T/ a
  1479. .ORG $FF889 R' s3 Q8 ]& C+ s( A* _* t  {
  1480. STA $4000,Y. }3 U* p7 F& l* D0 S2 G+ t
  1481. STA Sound_Bar + $00,Y
    / J/ T$ `8 T/ C. E3 ~& L
  1482. RTS) F% }7 R, @& ^( ]0 j1 [5 u
  1483. $ i6 K9 [0 @/ f' Q7 w
  1484. .ORG $FF904 X3 z( L' @5 `
  1485. STA $4004,X
    4 ~$ U/ O. V8 y
  1486. STA Sound_Bar + $04,X1 _' |  O( ?3 Y  @0 C
  1487. RTS3 J- c( m. M' Y

  1488. " j( ?% m8 R$ Z$ X
  1489. .ORG $FF98$ ]: a$ |! H, ?& [# t1 P
  1490. STA $4004,Y4 z" @, l/ Q- j) _+ o
  1491. STA Sound_Bar + $04,Y- j. O* p( P2 Y4 \" ?
  1492. RTS/ {! Y( G" V0 Y1 N) K4 C# a

  1493. ' k- ^3 Q" j6 o! W+ C4 W& e
  1494. .ORG $FFA0# x$ [2 u& |% B/ k- |" i
  1495. STA $4008,X' k# g* @* X4 c  h3 ~5 ^7 V9 y
  1496. STA Sound_Bar + $08,X: t$ h: b* B2 j1 K5 }& K4 g' R/ i' ]4 p
  1497. RTS
    7 P# a5 Z0 _6 u4 {7 C
  1498. 1 z5 Y, d% |1 H8 S6 O+ F
  1499. .ORG $FFA8
    % \: f( g8 Y4 ?+ [* e8 L* x
  1500. STA $4008,Y
    + h2 x1 _& T8 H4 H/ E
  1501. STA Sound_Bar + $08,Y6 M/ [0 j  g0 B
  1502. RTS
    $ C0 d% {0 I7 Y0 J1 s6 s8 E  w
  1503. 0 R8 \) V# E4 O" F' F8 N3 N
  1504. .ORG $FFB09 H! f* E5 j+ z( r& B
  1505. STA $400C,X
    ! @- c7 }' l0 a; S5 ]4 b& `# [
  1506. STA Sound_Bar + $0C,X4 B6 I3 D) K9 ?6 Q7 Z; U6 e& D$ u
  1507. RTS5 Q; ]" s: U% `' H" j
  1508.   C; s" |' [0 G8 [6 d2 x* \
  1509. .ORG $FFB8
      I. X2 w$ L0 B- D
  1510. STA $400C,Y
    % G* v( {( k! @8 p4 m5 F, K; e' \+ q
  1511. STA Sound_Bar + $0C,Y+ a( O; X+ ?- H4 E1 |
  1512. RTS. S9 U& j3 x* u# j

  1513. - p- q& y* [3 x& E  Q3 i' i8 v
  1514. .ORG $FFC0
    4 b' e! k! k5 T  X; Z* B/ h4 F% s
  1515. STA $4000
    1 d- @* `. a3 q/ w. R6 U2 A
  1516. STA Sound_Bar + $00' {8 W" X, f, {- Q( w: u8 ]$ k! G
  1517. RTS; s* U, Q. [" W# z# U

  1518. 9 ]4 M( o) c# M7 b+ N" x1 z& ?
  1519. .ORG $FFC86 g; \, R6 |* U0 N* ^
  1520. STA $40046 l$ W6 P. K6 E0 v
  1521. STA Sound_Bar + $04
    1 b/ O+ o8 w/ k( P) d+ t3 g; @
  1522. RTS
    : H6 @$ @0 S  U0 Q7 z1 }4 M

  1523. ; C8 ]0 l2 U/ ^0 D8 o- y
  1524. .ORG $FFD02 E( w! r! B9 C  d1 f
  1525. STA $40084 T" C* O2 a/ F6 h2 G
  1526. STA Sound_Bar + $08, H# Y4 l) F1 M, _0 y
  1527. RTS
    1 ^( W7 k0 X( h& _
  1528. 3 P& {# C6 w% F: _
  1529. .ORG $FFD83 ?( W7 N0 W4 C: @
  1530. STA $400C
    : t+ `( ^7 m9 b: z
  1531. STA Sound_Bar + $0C
    ; g  }# D9 h/ F& {
  1532. RTS
    , a8 h' {. y5 e2 s6 M
  1533. ; h8 Q9 ?+ D. ^% ~: B
  1534. .ENDIF3 _' V+ @( q1 Y
  1535. , a) j4 G$ y0 S: ^+ }8 F0 {" E, w
  1536. .ORG $FFFA
    4 s) s3 K& o9 P2 G& M
  1537. .WORD NmiProgram6 N4 M0 d* Q& L. `/ W, i  f% L
  1538. .WORD ResetProgram
    9 \+ y3 N1 ], I
  1539. .WORD IrqProgram
复制代码
4 y% l6 f+ e% P! t" Y! l

, F" E% @' B7 A
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1138 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3115 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 05:57 , Processed in 1.152344 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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