EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑
; s; }4 w0 D: B+ }# {: K' w& S" Q" T: z7 r) H) _3 Z" D; `8 C3 o
1.魂斗罗
  @  T* K( P% {1 D# E+ K; i: O+ m- `2.超级魂斗罗
5 @; g/ ?' ?& r' M3.赤影战士
- d( l" L# g! h* E" x* ^4.忍者龙剑传2/ t( b4 x& ?, i4 V- \0 V
4 `/ C# w9 p! U6 E( o
+ o7 f$ \! M5 ]9 O

. A5 d( a9 G8 O3 `* A' R, Q, n$ L2 T1 Q1 k! u2 d: s
源码:" Z3 S" `' t: j6 F4 C% I
  1. ;[FC音乐][播放器模板]
    - i! x# ^2 _4 U
  2. ;FlameCyclone 20230710
    + _; G- Y0 d. U; P
  3. 1 D/ Z8 x7 R# G- i# S* B, C# W
  4. ;文件头- _; _% n% U* u" r, E
  5. ;======================================================================
    % S6 x$ Y: ^# Z" I
  6. .INESPRG 4                                              ;16KB PRG 数量- R  [7 }; v! A
  7. .INESCHR 0                                               ;8KB CHR 数量/ P8 U& j& j  o+ Q+ d
  8. .INESMAP 4                                                   ;mapper 4
    4 b" v+ J2 I6 G) }9 X1 f
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直) C& D( ^, t; y+ `
  10. 5 q4 u) y- X4 u0 B6 g; J* s
  11. ;==================================================) t0 u9 l0 U, u* `  F/ I4 k
  12. SOUND_BAR_SHOW_ENABLE       = 14 @  S- s' R* u
  13. ;==================================================6 t  n: ?& q4 _0 @) g& R  R) u
  14. BANK_DATA_MASK              = $07, p7 v& C" P- L; W
  15. ;==================================================
    . e0 s5 i( R& R5 D. O. y+ w1 h
  16. SOUND_DATA_BANK_0           = $00
    - y, O- S# ^  Y9 H( d
  17. SOUND_DATA_BANK_1           = $01
      R5 x2 u4 n, }! I
  18. SOUND_DATA_BANK_2           = $02
    8 `( M# f- w9 g* g, p) v& j
  19. SOUND_DATA_BANK_C000        = $06; l( W/ r9 E6 ~! K1 U. j+ V  j4 u

  20. . k) p8 w% f7 l( y( D* H, B. O
  21. ;-------------------------------------------------# R2 Q) t" r' W( H
  22. CHR_DATA_BANK               = $04: L" k# I2 p  d- p
  23. CHR_DATA_ADDR               = $A000  r% r& g, ]. C9 i
  24. ;-------------------------------------------------
    & v7 y4 P, V6 M" C4 O) U
  25. PROGRAM_BANK                = $05
    $ w! D5 L' m( L# \7 U, B/ }
  26. PROGRAM_ADDR                = $80004 V: x7 O; `3 f" w8 X3 _; X* H
  27. ;-------------------------------------------------$ l( B6 E- `, w) d
  28. RESET_BANK                  = $07
    3 o+ e* X. @. V; g) {2 C
  29. RESET_ADDR                  = $FE00$ p3 o# Q5 l" v5 K$ H
  30. ;==================================================$ {0 w1 @9 O  z1 ^' d7 n& q, K
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址9 @$ L8 n' v8 r# ?. \- p# Y# G1 g$ Y  s/ C
  32. Music_Play_Addr             = $813C ;音乐播放地址
    . z1 s% V" r8 @' V
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    : K; _, t5 f; \8 x
  34. ;==================================================( T( J. i' X& f3 d$ Z" Y
  35. Music_Song_Total            = 039  ;全部曲目总数1 X: `9 B* x5 g0 D* h
  36. Music_Start_Song            = 007  ;初始播放曲目
    ) X( h; Z. a2 R, `
  37. ;==================================================- j$ O$ x2 V/ D& o) h

  38. & I  t/ w5 L- X
  39. ;==================================================) A) n  D! F. o
  40. Title_Text_Pos      = $210D ;标题文本位置$ f( {9 |+ A6 Z; e
  41. Author_Info_Pos     = $2284 ;作者文本位置
    / P. ~9 l6 t* _  w' y' r
  42. Date_Info_Pos       = $22CB ;日期文本位置
    7 b8 f! v" K* U# [( W  E3 n; U; i
  43. ;------------------------------# E. ]% b7 \" j6 J3 H0 X
  44. ;------------------------------
    ' A! o! {7 J* B: b
  45. .IF SOUND_BAR_SHOW_ENABLE
    * g  e/ D- A; t7 H7 v
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    / S1 Q% `9 N# t& f
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    . W* v8 o5 m. o8 D
  48. Play_State_Pos      = $2233 ;播放状态位置. [2 t- f1 |7 f- U3 [# \  }: g
  49. .ELSE2 [5 D5 r% c  `" D) b1 |
  50. : f) c9 y) _9 M: P( O
  51. .IF Music_Song_Total > 99! y3 V9 K/ O+ a: x- l& o
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    & A: K; z! b9 B2 v
  53. .ELSE% b0 J  V/ K# E% n1 l

  54. 1 t- N# Q% L7 u% q
  55. .IF Music_Song_Total > 9! f$ R$ O$ @. d; G; B7 ^2 U
  56. Play_Index_Pos      = $21AD ;当前曲目位置! X+ s( j: Q* `
  57. .ELSE
    # |  {/ |. S/ ]; h4 z
  58. Play_Index_Pos      = $21AE ;当前曲目位置4 A0 I  B: E; w& @% l/ q
  59. .ENDIF
    6 R8 l" O" v2 [

  60. ; R- X' e4 c: H5 ~6 Y9 c
  61. .ENDIF
    ) d% j  q; Z1 |% P* E" n6 K
  62. 5 D% L0 |1 z6 `; }
  63. % E% O* d6 x0 U8 V
  64. Play_Time_Pos       = $21EC ;播放时间位置
    , v# s* w' Q9 u& z, U" f8 S
  65. Play_State_Pos      = $222C ;播放状态位置$ d; t6 }5 @; S( x& {: w
  66. .ENDIF
    # `3 _$ U! g) L$ n, |
  67. ;------------------------------" P) U  W" v" J" `  x4 S5 c+ v
  68. Track_Name_Pos      = $216B ;曲目文本位置
    + @% R' ~  t0 r# b5 O
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    4 J: G7 k  O$ N8 U, H3 a
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置' r6 {0 B# `# ]- l- [& i, o
  71. ;==================================================
    0 T4 T" P. ]+ y; u, R
  72. Scroll_X = $00
    ' o7 t2 _- a  q2 F! \# Q6 W, |
  73. Scroll_Y = $06
    . f& m5 {' G, G3 d$ Y$ z
  74. ;==================================================
    ! k, o/ w( v$ ^: a, W4 L  n- |
  75. RAM_Cln_1       = $0100
    " V' |+ ~9 X0 h1 M
  76. RAM_Cln_1_Size  = $80: |6 O. _3 K8 d* K) I" L$ o
  77. RAM_Cln_2       = $00E02 C8 h# a: |$ Z# [5 F# _0 `5 C
  78. RAM_Cln_2_Size  = $20% v' v- U. X. Q3 n
  79. RAM_Cln_3       = $00E0
    ! ~! p1 c3 p/ }3 b& |
  80. RAM_Cln_3_Size  = $20/ ^0 L  _. `* Q; W% L2 s+ `6 f
  81. " G0 }6 r+ x8 ^. h' A
  82. ;==================================================+ G2 A" {1 S( z* \/ r
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
      e/ T; b3 V5 A
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    / R  \5 b% x1 T) d
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位% _3 p. W+ x7 Q# c3 ]
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    9 R5 N$ |- L: P, U2 v+ y" q$ h
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1' z7 B" I9 `: H& I/ h# j
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 % h' b. v  Y; B/ I. o
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ! t3 T5 v1 y9 M$ _, G
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 0 e  ^! K. T& F5 ?- |. W3 \; w0 s
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    5 [+ K6 W  i6 R. f. `
  92. APU_STATUS              =   $4015   ;声音通道切换: a" J. n9 _! {* R5 |4 S
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ! [  d- l" w( y) N
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    ( n# h! K8 |$ ~  M' [! |
  95. ;==================================================% t  d" [( r1 U# h# {8 Y1 X
  96. MMC3_BANK_CTRL          =   $80003 p9 F- C' T3 A4 E! O2 ]6 Y
  97. MMC3_BANK_DATA          =   $8001$ G8 q  C0 R- U
  98. MMC3_MIRRORING          =   $A000
    / e, X7 |  q3 \3 y* w1 w/ Q
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    7 {! z! X0 l: F) e6 q9 C7 E$ i
  100. MMC3_IRQ_LATCH          =   $C000! b# ?. ]" w  W: t; V
  101. MMC3_IRQ_RELOAD         =   $C001
    - k1 Z; p* d8 i+ K" y3 }+ Y9 M
  102. MMC3_IRQ_DISABLE        =   $E000
    / x9 l  ]6 S/ R+ i3 {- B
  103. MMC3_IRQ_ENABLE         =   $E001
    7 v! L2 A* G! W5 k5 e' r

  104. ) f: `9 U* M( w
  105. ;音乐数据块
    - ?5 {; m" S1 p: p( }* T7 m: ~5 M

  106. 1 |' ~' q7 \9 O9 l( k
  107. ;======================================================================( l) S# S. Y+ b) q2 a* D
  108. .IF SOUND_BAR_SHOW_ENABLE8 |; E& P1 t$ F, ?- @
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
      [, b0 z' Z9 f  r
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    # R1 q5 r$ c/ R, ?8 {& C

  111. ! U" b/ F% d: ~% U$ l  c# A
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK+ J) O' Y( z1 u8 O1 ?* @
  113. .INCBIN "sound_bank_bar/music_data_1.bank"! d3 ?) k0 X# n) [* `1 C- F

  114. 6 a+ j) ^0 H5 i5 v9 y
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK* G" k& b4 S( z6 i+ P6 l& \
  116. .INCBIN "sound_bank_bar/music_data_2.bank"2 ^' y( R* E* ~9 |7 x

  117. 1 G9 V9 N$ N2 Y( r8 R5 t/ E" Q
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    / U- b8 `; j3 \2 N* a
  119. .INCBIN "sound_bank_bar/music_data_3.bank"! q$ P) v( e% \3 m! A
  120. 1 h4 b9 i4 i  W/ W4 s" A
  121. .ELSE
    * w, P. p# t& Z3 y0 w2 L% I# u% v1 ^
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    $ G& {5 H, Y: V* {! P
  123. .INCBIN "sound_bank/music_data_0.bank"
    : r" Y3 O+ e" T. K

  124. # ^$ r" Z7 k% ?+ M- C1 g) T
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    : J- n% ]) V- C- x' B
  126. .INCBIN "sound_bank/music_data_1.bank"* Q4 K( `+ s, |

  127. ; {  v0 j! R& L5 Y9 {2 b
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    9 w! z7 t% N5 y( A
  129. .INCBIN "sound_bank/music_data_2.bank"
    2 I: n) q2 e9 c( l1 q

  130. , G( h$ R; @6 h% B5 q4 r
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK' {( U$ L. T6 c5 {7 `( \
  132. .INCBIN "sound_bank/music_data_3.bank"
    ! |" j, O3 O% C3 v7 R
  133. .ENDIF8 H' Q. E! S- J

  134.   q; C# L5 @$ m# T# z
  135. ;CHR图形数据. _6 F+ f) q( A
  136. ;======================================================================4 t; n$ a* E, z. q6 J: w5 D& @
  137. .BANK CHR_DATA_BANK
    , i5 }4 O% a  Y' G, Y+ L
  138. .INCBIN "chr_bank/chr_data.chr"2 ^, ]* w' [- M
  139. 1 L) U) g0 q/ X: s4 J0 G
  140. ;==================================================* W2 }; ^& N& i
  141. PPU_Addr        = $0300$ |! B* J9 J  Q/ v4 G/ c( _; ^; ~
  142. Palette_Addr    = $03C0
    6 r5 ~' O: {* `& ^
  143. Sound_Bar       = PPU_Addr+$E0
    # w, V% w' ?0 q& i, K" O
  144. ;==================================================
    ) A& t4 s# u- Y
  145. Palette_Update_Addr     = Palette_Addr+$0D
    ) g* O# w' l, Q8 [9 V, B  J  ?
  146. Palette_Update_Max      = $2C
    : S' v, G% k5 I! H7 U+ ?
  147. Palette_Update_Min      = $21' p8 h) [2 H0 {2 U* |% i$ R' ]
  148. Palette_Update_Interval = 606 q6 [* P- ^% P# q. j8 i# t
  149. ;==================================================
    ( B$ w3 P) x5 J1 y
  150. Sound_Bar_Cnt       = PPU_Addr+$F0( E# I) n: @# p# M4 i
  151. Screen_State        = Sound_Bar_Cnt+$019 F* U9 E" K' p; B  X
  152. PPU_Cur             = Sound_Bar_Cnt+$024 p: P; R7 M- y; Z
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    # C( V1 R# i# ^: n) ]9 q
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    : r8 J+ G' I% `0 y; h: l. d
  155. ;==================================================, _# b& M4 [" F  c; H4 l
  156. Data_L              = $701 _& C+ u# A7 w8 o9 _2 C" X. }" Q
  157. Data_H              = Data_L + $01
    $ M5 p) A. g! R. o0 ~. }7 \
  158. Data_Cnt            = Data_L + $02) @! p2 n7 I1 M" [
  159. Data_Buf            = Data_L + $031 F2 S; g$ M! Q& @6 r1 @. I2 i
  160. Time_Wait_Cnt       = Data_L + $04
    * q- K2 p, w8 F% f7 g& g: F
  161. Palette_Wait_Cnt    = Data_L + $054 l1 x& g9 }8 @. p
  162. Palette_Update_Flag = Data_L + $06
    9 s' v( ?5 R. Y. Z9 |& r, v4 y
  163. Show_Track_Name     = Data_L + $07
    9 a8 S7 X4 L: n( l. K( j
  164. ;==================================================+ \& S3 O$ _3 C
  165. Key_Keep            = Show_Track_Name + 1
    ' W, q% v& C  ^( v. i
  166. Key_Once            = Key_Keep+$01
    ( |" N7 Z) }. I& ?! x& }4 H
  167. Key_Kemp            = Key_Keep+$02
      i2 M' |: ~  Y6 n1 |9 c
  168. Key_Temp            = Key_Keep+$03
    / r4 x. X& N" o" p# O4 _: T
  169. Key_Getv            = Key_Keep+$04$ r' G5 X% d% `% P+ l% A* p' E
  170. ;==================================================$ f' p! \3 ^; B) Q- C
  171. Music_Cur           = Key_Getv+$01
    7 w( l& o5 `. s, t
  172. Music_Last          = Music_Cur+$01& d, ]6 C$ K* C/ }! H0 ]* o& G
  173. Music_State         = Music_Cur+$02
    # N* x  W, i: `2 [- ^) \, ?3 W2 c
  174. ;==================================================9 S7 i5 n: z7 K8 P2 |# P7 }9 H
  175. HEX_Data            = Music_State+$01) x6 h* M  o0 {
  176. DEC_H               = HEX_Data+$01
    . ]! g7 n! S% h+ q3 [2 v" B& Q8 g
  177. DEC_T               = HEX_Data+$02; \/ A2 x; }! o8 c3 c
  178. DEC_L               = HEX_Data+$03( ?+ \1 J9 G1 x1 {9 G4 Z+ A/ g# t
  179. ;==================================================0 y! s+ M  T; `0 h8 L
  180. Time_S              = DEC_L+$01. A, M: ~7 ]& Z
  181. Time_M              = Time_S+$018 E/ Y, o+ v7 i, h/ t9 z
  182. Time_H              = Time_S+$02
    7 W! t+ Z! t7 c: ^3 P$ i% y
  183. Time_Cnt            = Time_S+$039 B8 Z4 B- x2 S+ P3 t, R0 @+ P
  184. * `, w0 x$ v3 G/ H
  185. ;==================================================9 C7 i/ J+ Q! C: ~. o* A3 p- m
  186. Music_Bank_8000 = Time_Cnt + 1  v9 m% n2 s1 k; D
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    $ r) L5 f8 \( X+ v7 \
  188. ;==================================================0 l" e( q- \& j# @% t+ L& J3 m

  189. * ]$ q' T* t$ O& g
  190. ;======================================================================" K7 L" }( e: D' G- l. _7 c: F: F
  191. .BANK PROGRAM_BANK
    5 O; o6 r& D" }, i. m
  192. .ORG PROGRAM_ADDR
    5 _! b2 u9 b4 z0 Z5 r+ Z2 C, K8 o

  193. " U6 V( ~- Z8 }7 p! K- p. q7 ?" V
  194. ;==================================================1 ?* E- P- v' ?1 B9 L" ]
  195. NmiProgramProcess;NMI中断程序处理5 P( o" j3 ]) F5 U
  196. ;处理PPU图像
    6 J9 X& g; `' u0 v$ |! \$ M
  197. JSR PPU_Proc6 v" g& C# o  N; C

  198. 6 d5 ^% o- z! y1 @3 T
  199. ;启用NMI中断. `. T9 |7 R% W
  200. LDA #$80% @( K3 f+ @/ ]. m6 D& o' m2 o
  201. STA PPU_CTRL
    ; |3 w! _$ H$ J4 B9 s
  202. . q( n$ r  c) u# t( j
  203. ;更新调色板+ o8 r! R: I) c7 O0 v8 r
  204. JSR Update_Palette_Data
    ' ]8 S  m8 g8 v( ?4 u) H

  205. 6 h6 k% ^  I1 e- Y, g4 s
  206. ;显示时间(缓冲)
    9 J+ d( o3 u; `$ T
  207. JSR Time_Show
    . d! P7 j  e4 F% o$ V( X2 Z
  208. ' p) @& O' u6 P; Q
  209. ;播放计时
    4 D$ i9 O; E% S9 J# x
  210. JSR Time_Count
    ; }/ e+ c; _0 C  E/ [6 ^) Y( l

  211. 7 {" y  G* w; ^1 _. s! p+ c
  212. ;播放声音$ O7 r9 d; w, ~* W/ `+ Q
  213. JSR Sound_Play
    % H5 i( i0 M4 a5 `$ T% Q
  214. . i( U* u# q9 t* [; s6 W/ o
  215. ;切换音乐(手柄触发)
    0 Z; M! s4 B6 K+ S/ b
  216. JSR Music_Switch8 x6 e; ]$ B+ d9 `

  217. 1 b- I( R, z0 R) X# p! T
  218. ;音乐显示(缓冲); F1 b3 @! t+ L( A
  219. .IF SOUND_BAR_SHOW_ENABLE
    + S0 `" b7 c9 o4 f/ Z$ Z( N
  220. JSR Music_Vision
    ' a" a) G+ A3 }1 f8 e/ z
  221. .ENDIF/ N  D: V$ S  H8 {0 K; m

  222. ! s; y/ \% y& G- k7 z  q' b# v4 T
  223. LDA Time_Wait_Cnt- l# Q6 \1 a" g, w% j% W  i& c% q
  224. BEQ NmiProgramProcessEnd- n; Z8 a/ U+ Z$ [# o, ]0 t
  225. DEC Time_Wait_Cnt
    8 }8 x4 A$ i7 S3 D& F
  226. NmiProgramProcessEnd
    0 [& S5 d; h+ ]3 d/ w2 d* Q
  227. RTS
    & K1 c* M) ~; \/ l, [
  228. 6 b1 [- S+ Z2 |( c) |
  229. ;==================================================
    " ~1 }3 f# `& k/ D) {
  230. ProgramBegin;主程序9 a$ d8 k: Q& g" }" T
  231. LDA #$00# V% e5 F& X9 W' U2 X+ y
  232. STA PPU_CTRL* R8 W# i. @. V9 ?2 j
  233. STA PPU_STATUS
    4 V& E. F' _1 G% ~0 l
  234. STA PPU_MASK
    6 K5 }7 [% X9 i) h6 [( T
  235. STA APU_STATUS" d9 T1 a1 Z/ Z2 u9 }7 `! }6 E. f
  236. STA PPU_SCROLL
    5 h' ~# j  C6 S+ r, t
  237. STA PPU_SCROLL: U: l6 a8 h- w% |1 F2 R3 H
  238. LDA #$C0
    9 j& r! o$ N* o- D4 K
  239. STA JOY2_FRAME
    + @3 t( ]+ q: t5 ^' D& Q8 e+ {

  240. $ `0 T0 I1 V- ^! v  a
  241. LDX #$FF
    " M; g6 I3 q' t- w  k2 ?* d
  242. TXS# i7 w: p8 @/ `$ M- P* U# J
  243. LDA #$00
    5 i/ Z0 R+ o5 Y. @# C- I1 Z, }
  244. STA PPU_CTRL  p+ v# }# N8 E/ s" r% D
  245. STA PPU_MASK1 K- d$ r: ^; R3 x, ?
  246. STA MMC3_IRQ_DISABLE
    , }& |: j. j6 |" m
  247. 2 s# O* J( m( F: _2 ^3 p" B  w
  248. ;==============================
    # h' d- \$ \- ]( b/ T4 g% a
  249. ;调色板清空
    " {2 o& u9 t0 {* _+ B2 ~& E; x: b9 c. c
  250. LDA #$3F- z( Z  G4 M" k0 V
  251. STA PPU_ADDRESS+ Y9 B( k1 ]  J8 r' k
  252. LDA #$00' B/ D3 }) S+ \8 T; V, Q- h, i
  253. STA PPU_ADDRESS
    5 S" y; K# H/ c
  254. LDA #$0F
    . P; r6 m7 |% v
  255. Palette_Clear  I' t# `# ~* g3 s, x' U6 P
  256. STA PPU_DATA
    9 a" Y1 C! d8 G
  257. INX, s4 M: ~6 ]4 N$ _, }  j4 F
  258. CPX #$20
    : r2 t  a6 Q5 ?* t- P: }! i
  259. BCC Palette_Clear
    - j) o. e) Q. B+ y: z
  260. LDA #$009 V4 ]2 c7 ~8 o
  261. STA APU_STATUS2 i# K& A6 H) C# V
  262. ;==============================
    - u6 ~$ W1 s9 r" F" U/ E
  263. ;初始化背景调色板+ ]& x) C& v- G  ^$ x; N0 a
  264. JSR Set_Palette_Color
    ) L( A3 q( b+ K# e6 K
  265. JSR Set_NameTable_Attributes4 \, k5 \' Y* [9 j1 p+ ~! ]) \
  266. * T9 D$ Q$ U, B+ R2 h9 \# l! q
  267. ;==============================
    . K7 Z; l5 f- G+ V) \, U! `
  268. ;RAM初始化
    ) O4 b& A+ r" D% B. J% c
  269. RAM_Clear_All
    2 ~& o# C+ @- A5 s  a+ I4 B, b
  270. LDX #$00/ ?! G# y, g& n. G% e9 b
  271. LDA #$000 G! w# X8 t8 {+ N+ X- E# ^
  272. RAM_Clear_All_Start1 Y& S# j; v5 `; q# R. N
  273. STA $00,X9 T/ h$ B' G: b! z) z
  274. STA $0100,X# P* q& V  V: j* }4 w- Q
  275. STA $0200,X
    - \+ |+ R& O* i% P5 A4 G+ l6 m2 T
  276. STA $0300,X4 j1 m6 R% F- |3 Z) Q6 c& ~5 ?8 V; S
  277. STA $0400,X
    * A7 U+ `- v- n5 e. f
  278. STA $0500,X
    % N5 n' m9 R0 M) E# V9 X, E3 k
  279. STA $0600,X
    8 b  A3 K: ]$ ]0 c
  280. STA $0700,X# c* Q. Z) M3 x: P5 u# m
  281. INX
    : U8 I3 T6 m+ i
  282. BNE RAM_Clear_All_Start
    # P" G) \# C% V- c9 N7 l" Q3 i1 K

  283. ' E8 v/ i/ d: `# g
  284. JSR VramInit
    . L2 D" u/ h- n; k" @% Y7 l7 \
  285. JSR Init_Palette_Addr
    % S, \  p5 B6 \+ K! W3 Z  w, U4 k

  286. . C1 l) `0 w; K. J; a
  287. .IF Music_Reset_Addr
    6 c8 J+ y) v  B  n
  288. JSR Sound_Reset
    4 Q  p8 V( h4 Z& K
  289. .Endif
    : g2 q% ~- `5 A6 i
  290. & q' |) S$ b4 C; F! H
  291. LDA #Music_Start_Song-$01
    4 {6 P4 y/ o/ ?& k
  292. STA Music_Cur
    5 B: F3 ~' J* }& N5 o* P

  293. 1 Q8 }- f& ^  t" i) ^
  294. JSR Show_Music_Text' u+ i/ S* {. Z2 k6 o+ Y& r3 f" l
  295. 4 ~9 [+ z! p$ P+ C1 U
  296. .IF SOUND_BAR_SHOW_ENABLE# c7 @+ F1 \# y' V% ^
  297. JSR Sound_Bar_Text_Set
    # J1 S. q# T* [7 o
  298. .ENDIF6 l2 w* y4 r7 V$ ^9 J# k' y: ?7 e
  299. : q' `2 W7 q  s
  300. .IF Track_Name_Pos
    $ r' Y, H* O9 p9 t+ [* a
  301. JSR Show_Track_Info% i! [! T/ r$ V( p9 X" w/ L
  302. .ENDIF
    ( c( V  }$ {+ G+ T0 n- M' c
  303. 0 ?/ g- O3 }/ u% h
  304. JSR PPU_Proc
    0 I! o( j/ G* o* A! ^

  305. 7 m( U5 v3 d7 I
  306. LDA #$0E
    8 v; ^- D+ ^# ?) l" D" Z  W, H0 L
  307. STA Screen_State
    % G/ F  j) I+ @9 a; @! h. {

  308. / f8 v6 j9 Y! q
  309. JSR Sund_Bank_Init
    ! K* `( v4 t/ G! [
  310. ) L0 m! x  [# i1 x, u
  311. JSR Music_Show( f2 ?$ a6 f8 ?6 s
  312. JSR Time_Show/ ]( t2 r+ m: A) y
  313. JSR Music_Stata_Show5 J, j) k! |2 S$ g7 x3 @. m
  314. JSR Time_Delay
    % B( c; B- ^* r: Q0 \
  315. 2 Y) G5 ~$ P. p  r% ]/ s$ j7 u) f

  316. * X2 I+ A# h! d! C
  317. LDA #$80* w( z+ d( k* w+ |
  318. STA PPU_CTRL9 k) a5 P- c: r7 U+ q9 M9 W8 w
  319. - W1 b7 m* |: h5 }
  320. LDA #$20
      s4 F4 I  c. k! H! B* z
  321. STA Time_Wait_Cnt
    # t9 b+ F/ i9 G

  322. : _. ~3 r1 ~/ `% j# j
  323. Wait_Time_Over
    " d/ v2 O' @/ y, v, x; A7 T
  324. LDA Time_Wait_Cnt1 j2 A8 S) J) q  Y+ D& V
  325. BNE Wait_Time_Over
    % y# N+ k6 d0 S
  326. 3 f' `) z2 Q% ~# O5 `
  327. LDA #$1F6 p5 {1 ~, J) c
  328. STA APU_STATUS
    + R4 U4 m/ T. r, i
  329. LDA Music_Cur9 K' ]4 t& e+ j* i5 d
  330. JSR Sound_Init
    0 f( n9 s( U* X1 A$ G1 D

  331. " \! _* P1 C; Q- v5 Q$ P3 L
  332. JMP MainLoop% n/ L' Q5 {' r# M# }, k
  333. ' X! H5 h* D1 M& }' F
  334. ;==============================
    : ?" J5 Y5 P: A7 d; d
  335. Time_Delay;延时等待0 x; P" x6 z! Y( H. F% X
  336. LDA PPU_STATUS
    ! F/ b% L2 D- W( j
  337. BPL Time_Delay0 E! {, d& N+ C) \. Z. U% B& |) l. N5 I
  338. RTS
    # h6 d2 ?2 m5 }

  339. " v- m0 V; u0 U5 i, x
  340. ;==============================: J0 h( t7 k$ j6 i, T: F
  341. VramInit;初始化图形内存9 w+ X; E( v" W8 Q( t
  342. LDA #CHR_DATA_BANK1 L/ g" D% p: ?2 K" W2 D; H1 J- W0 _6 B# S
  343. JSR SwitchBankA000$ b' z5 A6 D; D# e: i3 c" o) B
  344. LDA #LOW(CHR_DATA_ADDR)& K# E2 Y& ^( C2 z4 {: l
  345. STA <Data_L
    1 E( B. \! M2 s8 I! p/ [
  346. LDA #HIGH(CHR_DATA_ADDR)5 A) S: {( e6 Z+ e1 w  U8 E0 w
  347. STA <Data_H
    # o2 T5 R" ~9 c, P2 _4 l* g# {
  348. LDY #$00
    . P, X. v3 q$ O/ @, N  N/ d1 }
  349. LDX #$20: C# ]+ U7 s+ E1 p4 A: r7 ~
  350. LDA #$00  Z& {+ A1 l0 _# {! ^. z
  351. STA PPU_ADDRESS
    . k4 g) r' h& @0 o% p7 ?- K9 l
  352. STA PPU_ADDRESS
    # K  `1 I- u# \1 }9 T  C  v
  353. VramInitWrite
    % p/ L1 U. W) U: a
  354. LDA [Data_L],Y
    7 N+ w3 _+ H0 C# z. \7 T0 F
  355. STA PPU_DATA* A( Y$ o6 f$ ^2 R) L7 T; e4 K3 ^
  356. INY
    - _- T0 S. {& z
  357. BNE VramInitWrite" u( W4 U  I1 y
  358. INC Data_H7 s; P! ?: B) f# V
  359. DEX
    / `6 H# e) [8 Z, ?
  360. BNE VramInitWrite9 }+ g- W+ Y3 _
  361. RTS( l9 _# h- X3 V& c4 y# r; t

  362. 7 T* \% i- s5 }0 f1 P3 q  f  f
  363. ;==============================- N  p1 T/ [. ]) Q
  364. RAM_Clear;RAM清除8 j8 p$ o# |/ I/ c
  365. LDX #$00. _' F! C" [% {' s$ A8 {; R# S9 d8 @
  366. LDA #$00
    + L( F+ U$ d* O) g; F
  367. RAM_Clear_19 h' |, A3 i- m9 V
  368. STA RAM_Cln_1,X, ?$ {4 C$ m0 ^+ u: C
  369. INX$ o* {3 h4 y+ P% ~6 w3 [
  370. CPX #RAM_Cln_1_Size
    9 u$ X5 z! q6 t* b7 S& P
  371. BNE RAM_Clear_14 F; f0 Q% V$ J$ |- E/ ^
  372. LDX #$00
    * b* T0 i; x! a: C# O
  373. RAM_Clear_2
    1 Z* @+ c% p' E/ a$ J, j$ p
  374. STA RAM_Cln_2,X
    & B; w: g+ H0 N, _' i6 F& H% [% p" F
  375. INX  d% q- x8 Y" s# q% n3 h
  376. CPX #RAM_Cln_2_Size; a. B. L& c6 B6 r/ g% S' @
  377. BNE RAM_Clear_2
    ; E# j% r$ X' _& t% n: z
  378. LDX #$00: ]+ z1 S8 a$ x5 v& M) v+ i, K% D
  379. RAM_Clear_3
    8 Q/ U: h1 \$ ]+ f
  380. STA RAM_Cln_3,X$ |$ ~2 n5 ^1 n# ~
  381. INX3 Q7 T: E4 I$ o  w- k
  382. CPX #RAM_Cln_3_Size
    1 _. i. E0 H+ v6 G+ s# L, Y5 v9 A
  383. BNE RAM_Clear_3
    : E# z& G0 u3 E
  384. RTS3 T  p2 N+ ^: Q8 X7 |

  385. / C* U! o( P: P8 K4 x) `, Z
  386. ;==============================. e( L8 x5 g5 b4 M" L8 w# H. ?
  387. ;音乐切换: g4 r. g/ k' n! f* g- g$ y
  388. Music_Switch* n  t7 K( h4 k
  389. JSR Key_Proc$ ^# [% _8 F* @  w5 w* u. M: \# T
  390. LDA Key_Once2 V2 M+ f! w; n( H7 d* P& L9 x
  391. CMP #$10
    / j0 M7 F8 @. z- e0 J3 N! i
  392. BNE Music_Start_SongStop0 V) n1 f1 }' }/ Q
  393. JSR Music_ReSet" e3 R0 N2 h- q' ^
  394. 4 J. T: R; w+ O" Q
  395. ;音乐停止  t2 E3 L1 N2 a* }+ [1 M
  396. Music_Start_SongStop
    " A  Y# H! N& h2 B* E, K5 Y
  397. LDA Key_Once- q% D* I. T% D9 _. d' O
  398. CMP #$207 e; E& ^* i" X# Z% ]  ^3 y, y
  399. BNE Music_arrow6 c: F# }3 T% \1 ]5 S  |0 Z3 t
  400. LDA #$01) q6 _* Z" _% D$ @1 ^
  401. STA Music_State
    + r. \$ x, h6 w
  402. JSR Music_Bar_ReSet
    1 T* A; c# _/ |4 ]8 X1 u2 c
  403. JSR Time_ReSet$ R5 Z% k! K' T8 I5 i9 m! p( K
  404. JSR RAM_Clear5 v: f5 y' B" e0 F; o
  405. JSR Sound_Clear
    9 V) R9 K. @  }6 z( N
  406. JSR Music_Stata_Show" u. X' }- h' [" j& O
  407. Music_arrow6 n5 k' [$ z) I; ?) u: \
  408. LDA Key_Once
    + Z3 P% y0 V3 U: Z
  409. AND #$CF
      B$ X, p  r8 J
  410. BEQ Music_Switch_End! i  W; N2 h* F5 S9 Y
  411. JSR Music_Number
    7 f6 W. x: h! M/ v9 l
  412. JSR Music_ReSet
    # v& z6 u+ U! q
  413. JSR Music_Show4 O$ f6 y; q7 b9 c% f6 L* i
  414. Music_Switch_End
    % x: m5 z. M- V
  415. RTS
    . k8 r- ^" ?4 s$ ]# K; K
  416.   _5 i% Y* D. F* F
  417. ;==============================& g1 H% t2 B: V' _
  418. ;音乐曲目切换
    $ t/ M  x, n$ S" I& g; C
  419. Music_Number1 h, w2 k2 C. {. j6 N( E1 {: B
  420. LDA Music_Cur
    . [$ m/ E% g/ C* y: e
  421. STA Music_Last" ]" c) [  W# R% p' p7 z  l# v2 Y
  422. Music_Decrease
    2 x& K7 `+ `. ^/ H
  423. LDA Key_Once1 j0 X7 u2 c8 M+ ^% L3 V. E
  424. AND #$42
    ! a! v% m  \' E. X1 U
  425. BEQ Music_Increase1 r! z$ @  D' o$ G% O
  426. LDA Music_Cur$ v  L$ u6 ~2 ~& p" e' ^
  427. BEQ Music_Increase
    " r& x- u% Z; Y& s! B4 f% N4 T
  428. DEC Music_Cur
    % t4 f5 ^- w# C+ O; a& U$ F/ T
  429. Music_Increase; J8 B( `! Q# g" S% m7 y0 {
  430. LDA Key_Once
    $ t  l$ u/ |0 b- d4 [
  431. AND #$81
    & M% x* U, [) ]* X- i1 Q( `" C$ ]) @
  432. BEQ Music_Decrease_10; ]6 R5 h3 G: f3 |
  433. LDA Music_Cur
    . Z! D% K/ m- F( {- O6 R) G9 ~
  434. CMP #Music_Song_Total-01
    ) n5 R( L2 o" Z9 R: @& T! m3 h$ Y* n1 @
  435. BCS Music_Decrease_10
    0 L1 U" q$ L6 ~3 w8 C
  436. INC Music_Cur% V4 r8 S( }, {) d. B/ ?
  437. Music_Decrease_10
    8 K0 c! N; h! P3 \
  438. LDA Key_Once+ x' G& R+ Q4 T' s$ P; S# n
  439. CMP #$04" N% ?9 k; v+ C1 Y
  440. BNE Music_Increase_10, }6 W4 I- r2 M- L3 t# D
  441. LDA Music_Cur8 J- G* p. Y  a/ v2 n' B
  442. CMP #10
    ; o" s9 Q; ~& w
  443. BCC Music_Start_Song_Min8 s/ `' R- m+ D- Y3 [( T
  444. LDA Music_Cur
    , i' c, U* j+ E
  445. SEC: U! Q& D# b  E. ^
  446. SBC #10
    3 M5 A" d" |+ G1 G# e# i8 k- I
  447. STA Music_Cur/ d# v' o- Q. r" h( p9 _1 P
  448. LDA #$006 C+ r' ^. M0 f( b9 @# V/ p
  449. BEQ Music_Increase_10$ n  [2 }1 L* w( O
  450. Music_Start_Song_Min
    1 Z% G6 P: ]) w) G$ E
  451. LDA #$00
    . E: M* ?% w2 _5 o& m) {2 [
  452. STA Music_Cur
    + I7 Y" e/ @# Z! \0 j
  453. Music_Increase_10% |8 E0 y+ `1 {+ k7 F0 F$ d, `
  454. LDA Key_Once
    4 u% w3 E$ u9 b# C
  455. CMP #$08( c. |- y9 S) M; J
  456. BNE Music_Number_End
    . J  w0 Q9 Y% E
  457. LDA Music_Cur/ C0 |) p+ `* \5 y
  458. CLC  |" F6 i7 Y& }3 Z& V
  459. ADC #108 R- M. T; ~$ j- S* z
  460. CMP #Music_Song_Total-018 \4 i0 C* i6 l
  461. BCS Music_Start_Song_Max
    : J/ o2 s8 U$ `6 Y- j
  462. STA Music_Cur' j3 P5 c7 o9 a) l8 N
  463. LDA #00' n, X0 e" J0 X" O0 _, l
  464. BEQ Music_Number_End
    # G+ R) G3 D- a3 i
  465. Music_Start_Song_Max
    : }' w7 D+ r+ i2 ]1 m  ~4 P
  466. LDA #Music_Song_Total-01
    $ i7 Q9 j6 i  j8 l2 G; l
  467. STA Music_Cur$ b1 I  s) \$ M: v3 a
  468. Music_Number_End& a( G2 H; q2 }! k
  469. RTS5 A7 T) F0 @: w

  470. : X7 ^; p: F+ v, y9 L" {5 Y2 x) X* ?
  471. ;==============================' j4 s3 H, ]' ~- C
  472. ;音乐重设9 t0 O+ Y  R. G, r
  473. Music_ReSet
    / o% P  {2 R9 M0 l$ a
  474. JSR RAM_Clear
    & j, ?# S- ^7 J8 ?* i
  475. JSR Sound_Clear4 w" J7 ~$ q' @* @
  476. LDA #$1F9 ~  t/ K/ ]; [5 L& ~+ i
  477. STA APU_STATUS1 ~) z& p4 b6 n  z8 o0 t
  478. LDA Music_Cur
    # f' J& P& x8 {/ N4 d4 M
  479. JSR Sound_Init
    4 @4 w7 K" Q! s3 ^* O
  480. RTS
    7 L# h" W9 N. S0 M5 I: M8 k
  481. ; c# ~$ N7 X, u# P1 K( s* W& L. G
  482. ;==============================$ s! x* }, p. s1 V  m
  483. ;音乐端口清除
    1 x+ r4 n3 N: \# ]: b
  484. Sound_Clear1 g$ [, }% f# v; p7 y
  485. LDA #$006 g5 C, B& J0 I& Q1 w+ s7 i9 Z( o7 N
  486. STA APU_STATUS
    0 y- T3 P* y) _, ^9 }, ?) T
  487. LDX #$002 J4 R  _  Q! d5 S5 J2 Q, C
  488. Sound_Clear_Start+ ^  T2 `: X+ ~' \+ S
  489. STA $4000,X( {. c! L8 p# b: q+ [* }: X2 t
  490. INX
    + `2 a5 D7 m7 N9 {
  491. CPX #$143 u& C& f9 Q7 t5 C4 L% I
  492. BCC Sound_Clear_Start2 k* b9 y1 R/ j- d5 s7 t0 T" b
  493. RTS
    # |1 v1 m! A! J

  494. , e0 x8 O& K3 h
  495. ;==============================
    . t- p- v$ g) L, @2 t; j
  496. ;按键处理
    " u' e9 O5 Q! u$ U4 x/ Q
  497. Key_Proc
    ! p& W7 ]3 E  y3 T* `2 n
  498. JSR Key_Scan* L3 M5 C: _! a, p
  499. LDA Key_Keep
      B6 E: m& s5 a$ T& Q! J
  500. STA Key_Temp
    1 S  j5 g' V+ [7 i
  501. JSR Key_Scan
    2 l7 d. I& q% G& }
  502. LDA Key_Keep) X0 c8 m* n8 j* F" X& y
  503. CMP Key_Temp
    " T7 e. [- Z/ `$ {0 O3 z
  504. BEQ Key_Get_Once
    ; Q% t% `; u8 d
  505. LDA Key_Kemp0 {; |7 @! _% k# ^& S3 V3 b1 n: j
  506. STA Key_Keep
      H" v$ \. f" z
  507. Key_Get_Once
    8 p; x  O& T' \
  508. TAY: ~* A0 @- M! ]
  509. EOR Key_Kemp/ S( G6 e4 _( d% s9 G
  510. AND Key_Keep
    5 s4 A, x4 q4 u; r* A$ P
  511. STA Key_Once0 D# c# U8 v2 {1 x  U
  512. STY Key_Kemp
    7 A8 k3 J6 w  d( W* y
  513. RTS; E5 A+ \9 F; M* I' H
  514. ;------------------------------8 J) Q) v9 O. U% F; N, w
  515. ;按键扫描
    & A/ @. F/ c( B5 a* z9 o" i7 f
  516. Key_Scan
    # C5 @! d/ s4 j1 B
  517. LDX #$01
    * \8 a# B. p& c+ D8 i3 C
  518. STX JOY1_FRAME
    % U$ H) w. w- _2 A/ J8 t4 ]
  519. DEX) K0 s% n$ Q9 a9 _
  520. STX JOY1_FRAME& `% f0 J) z8 Z1 `; \' k
  521. LDX #$08+ G; l) p+ G# \6 `, T% s
  522. Key_Value9 ^6 M& a4 g/ e. m; v( Q; R
  523. LDA JOY1_FRAME  U0 O6 ~- {" E7 ]8 t" P: N
  524. STA Key_Getv* r1 P, z/ t/ U1 T# q  I5 L
  525. LSR A" b. |5 v5 S6 }. U
  526. ORA Key_Getv6 C1 @( M& R7 G$ K$ M* }/ M$ L
  527. LSR A
    * {  `; s. e. F8 G; y! {  Z
  528. ROL Key_Keep
    # `; n  w. Z8 ^3 k' n7 y8 M
  529. DEX4 U) t1 x: v9 a0 j# s
  530. BNE Key_Value6 e0 n) A' m( L4 o9 x# j) ^
  531. RTS+ y' \7 x3 x' H+ m: i8 T8 {

  532. / x5 R' Q- z- c  k
  533. ;==============================2 O' W+ |+ r- S1 a2 Y: e
  534. .IF SOUND_BAR_SHOW_ENABLE* \8 w, m7 i! ?# j' A1 g
  535. ;音乐条显示
    . p8 R! l' O% c  w4 v& Z- [+ H; V  g
  536. Music_Vision( x$ i1 z& Q; E( s
  537. JSR Music_Animation5 @) G( {1 T4 j& \1 C
  538. JSR PPU_End
    6 Q" T( C2 w/ s
  539. RTS
    / @- v: r1 ]8 P) o0 A; Q% y  x
  540. ;------------------------------
    ! ~) A2 i7 H8 T% X
  541. ;音乐条显示处理
    . A$ q& b2 e7 H4 A2 G
  542. Music_Animation3 i7 t( D! _- S9 M# K
  543. LDX PPU_Cur
    ; ]2 l/ h) r7 ?* u) n
  544. LDA #Mode_Line
    6 V! \# }7 N3 g! T7 Y9 q$ `2 i
  545. STA PPU_Addr,X$ `9 H1 I" @. p: G
  546. INX
    8 B; z( j2 f/ N% I; c1 k5 |9 P  S
  547. LDA #HIGH(Sound_Bar_Pos)) m6 ^  @3 |1 K# m) Y; n
  548. STA PPU_Addr,X% \# x) q) l' U+ r2 i! z/ m
  549. INX# x1 B6 Y, G* a( b) W, c
  550. LDA #LOW(Sound_Bar_Pos)4 e" ^2 S/ K- c$ k
  551. STA PPU_Addr,X9 x6 K- x- e; {0 t
  552. INX  w' Y$ x% A- L* {( S
  553. LDA Sound_Bar
    3 p% x2 f1 D1 A4 Y  R$ ^* C& r
  554. JSR Volume_Convert
    ( V6 J" d, ^+ |
  555. JSR PPU_Return
    7 h0 w  f0 [- p6 c
  556. LDA Sound_Bar+$42 T" Q3 E# k7 v$ N) F" c
  557. JSR Volume_Convert) O# F+ w; F0 a# B& h
  558. JSR PPU_Return
    ! p9 y0 F! a8 F+ o
  559. LDA Sound_Bar+$8( J9 h/ ^1 i. |% B  t
  560. JSR Volume_Convert_Ex% q* m6 s1 c& L8 J+ X& D# n( w
  561. JSR PPU_Return
    ' M7 i& P* F' `* o0 z
  562. LDA Sound_Bar+$C
    % D; E- \' }2 M7 D$ o& c: q" x
  563. JSR Volume_Convert
    % M$ L* Q1 C) Y( N' C0 L6 m' Q% o
  564. JSR PPU_Return5 n1 Q- d! O6 m; q9 K5 m& E0 q, R( u
  565. LDY #$10
    1 H* y" V& i4 y4 {6 j4 |* r
  566. LDA APU_STATUS! I. K  _0 ~) G: u
  567. AND #$10  O( B3 {+ r7 l. @# a. t1 F" j
  568. BNE Volume_Count. H9 f5 [6 F" j0 E. O- F, m
  569. LDY #$000 p% z6 s* z, R# h" J) k5 Z6 B
  570. BEQ Volume_Count; s% b% s/ y- }+ G
  571. ;------------------------------
    ; R7 b# K  ~: Q  q+ F: }. @$ |
  572. ;音乐条处理
    1 k5 X8 @7 q% g7 Y) P8 |
  573. Volume_Convert_Ex
    ! X0 j1 I' |. H7 E4 R
  574. AND #$1F
    7 o7 P" F+ t: i2 ?- ]* K
  575. TAY
    & Q0 Z6 i9 r# T/ I3 K
  576. BNE Volume_Count& r6 ]# {/ l0 k7 w5 V
  577. Volume_Convert/ N3 M: ]4 s5 H) Z" ~, ^
  578. AND #$0F
    3 d/ \  r1 y4 b1 }( j. q9 W0 P
  579. TAY
    ) q( u* u( T: ^0 Y1 D7 W8 @$ V* R
  580. Volume_Count
    6 F& A8 c- w2 O: i. @8 o: u& y
  581. LDA #$088 \& S& _/ i: U) t
  582. STA Sound_Bar_Cnt
    9 P+ H" q" N3 c2 B8 f5 {
  583. Volume_FILL
    % z- u$ |+ t( z  m0 B& N0 t
  584. DEY
      |" t9 N- z9 B$ N7 Q5 D
  585. BEQ Volume_Half/ T3 z) z* R5 O9 w+ O: r  V* N; c
  586. BMI Volume_Empty
    + i3 K+ N& K+ F3 N: b
  587. DEY
    6 `! Q# V* A4 s) [2 k( p
  588. Volume_Full
    4 Q. Z/ b0 f' i$ K/ O# M0 ^
  589. LDA #$16
    / O8 z4 L6 L# r& R) y! M: W
  590. BNE Volume_PPU+ h9 H$ D/ c1 l
  591. Volume_Half6 g+ ]% D4 ^, ]+ W6 z8 Z% K# t+ [
  592. LDA #$15
    8 v2 W7 M( k, ~9 o7 Y. T. F5 c/ _
  593. BNE Volume_PPU
    6 Y6 m- p% A6 R
  594. Volume_Empty
    2 k- Y% C) P+ ?/ ?" p% b3 ^0 V
  595. LDA #$14
    5 Q$ N8 O* S2 y  A7 c
  596. Volume_PPU
    . @" X  x5 V; B
  597. STA PPU_Addr,X$ F/ q6 d% h3 O- {0 r
  598. INX7 R% |& L$ g: Y+ E$ k
  599. DEC Sound_Bar_Cnt! C2 ^4 w0 D/ r3 ~
  600. BNE Volume_FILL3 t+ e) m( o4 X' j- D/ l& J* x
  601. RTS' }5 a0 j; d9 Y, [2 F9 q- t4 t
  602. ( y9 Z% q9 p8 P; T$ E; y8 H; U
  603. .ENDIF
    / g; s6 F" O- J: W

  604. 0 \# L9 O3 q: V( |
  605. ;==============================/ {' V9 A5 I% Z# v! d' m! s
  606. PPU_Addr_Set;PPU行开始
    7 Q- o# l' E& Z( y: ^, U% o  @
  607. LDX PPU_Cur8 ]6 j( ~3 m  K3 w6 I+ i) H
  608. LDA #Mode_Line
    / G- h; p$ W3 ~$ r$ \
  609. STA PPU_Addr,X! n; y  y5 C- m5 t3 a& `
  610. INX
    & o" U2 y$ S$ O/ T: ?
  611. RTS( h* V4 u  W& G& R2 X

  612. : m, ]0 f0 Z0 d1 K
  613. PPU_Return;PPU转行# V3 w7 E: O* v& `- T
  614. LDA #Flag_Over" n8 N! l! F' h' n: _- T
  615. STA PPU_Addr,X
    - @9 c8 r2 u; u& u
  616. INX
    . G& D& X7 M( y( k
  617. LDA #Mode_Return5 h0 V" N; |  q. P& w/ J% ?, ]
  618. STA PPU_Addr,X+ |' s3 E, W( h" Q) o
  619. INX
    - W: k  V( }4 `# w8 c
  620. RTS
    6 G; n% [  F4 I/ e+ m4 q

  621. # Q2 X/ e+ a' E) X- z8 [2 Z2 r
  622. ;------------------------------3 b& M( n6 E8 w# E5 |4 M) g6 Y
  623. PPU_End;PPU结束
    & ~, E( ^% l5 T' w2 c
  624. LDA #Flag_Over
    3 G- x" s, O  R  [
  625. STA PPU_Addr,X
    ( F  n5 r: l! B9 @
  626. INX
    : ~6 I3 X" E% B8 I$ A
  627. STX PPU_Cur
    ( n: Q2 ]. b1 H( w* |. C( W0 J( A
  628. RTS
    8 b4 V  y# r. D/ p& K7 X/ @% O
  629. ;==============================
    ) u- V4 x2 c* h2 g- V8 e' s7 ?. ]
  630. Mode_Line     = $FD    ;新起行模式
    1 E- p' K  Q) L; Z; i
  631. Mode_Return   = $FE    ;转下行模式
    % O5 V$ ], f0 W3 E
  632. Mode_Clear    = $FC    ;行清除, {7 v8 B0 m' J) v* P# P7 c
  633. Mode_CntLine  = $FB    ;行计数写入
    + d2 z. \$ K+ V6 B
  634. Flag_Over     = $FF    ;行结束标志
    " R( Q! ^  Q/ {, w& S

  635. , L8 b8 t! ]7 \+ l6 U- m
  636. ;------------------------------
    * H/ I# g7 S7 a# X9 g8 L
  637. ;PPU处理
    8 g0 t# Q7 C0 ^+ R
  638. PPU_Proc- ?, {: a$ q$ X1 J  h
  639. LDX PPU_Cur+ T: X% Y" i6 _
  640. LDA #$004 V5 F* S- z: k% X) |/ P* D7 I# w
  641. STA PPU_Cur  B3 g7 q( T; }* r
  642. STA PPU_Addr,X
      |" Q( }, a! x
  643. LDA PPU_Addr
    0 ^5 v. V% f) L6 b- ?
  644. BNE PPU_Proc_Beg
    : w0 i, |- I' v3 V* ~
  645. PPU_Proc_Ret
    , ~8 |  G1 q. D& G3 Z: M; H
  646. RTS
    ( Q0 k8 e- w: A2 q
  647. ;------------------------------
    ( ?; |7 V( }! |. O
  648. PPU_Proc_Beg  ;处理开始0 Z% f+ W+ @* C) r! y+ a2 E
  649. LDX #$00
    5 F7 C- w- s  P+ b6 F$ S! g
  650. STX PPU_MASK
    " s3 l( e) x& `2 r
  651. ;------------------------------) s" L5 H4 B- j/ @$ u8 y* H9 t
  652. PPU_Mode_Select  ;模式选择  X/ ?9 c* o, ~# C2 g
  653. LDA PPU_Addr,X
    5 {1 }( ^1 z3 s# f( D
  654. CMP #Mode_Line, p2 G# z0 Q( p. X
  655. BEQ PPU_Mode_Newline
    1 x  Z% \( x; W" x5 t6 \) Z+ |& Q
  656. CMP #Mode_Return
    ! k/ D+ S/ h, S. C2 T
  657. BEQ PPU_Mode_Return/ U1 q" [" }+ a, i) s
  658. CMP #Mode_Clear
    # X) n9 C/ _) j+ i& l# n: E1 l" i3 D
  659. BEQ PPU_Proc_Clear
    5 g- h: D( ?0 T+ Q5 m/ X5 j
  660. CMP #Mode_CntLine
    + Q! @& v  Z2 o. F! u
  661. BEQ PPU_Proc_Cnt_Line
    4 f- |3 y. i  e; U& Z
  662. RTS+ S+ }1 [" m3 m3 _
  663. ;------------------------------0 \' L6 e/ y$ e6 k! w: R' a/ K
  664. PPU_Mode_Return  ;转下行模式. Q) h2 x$ V- o) `
  665. LDA PPU_Addr_L' J% ?( {3 Z# D7 S
  666. CLC& B2 k  t5 o1 v9 S" X
  667. ADC #$20) e! F4 i0 K8 m0 p5 ^+ T& r
  668. STA PPU_Addr_L
    , T% q  _; V8 P; o! n1 I8 N; K( M
  669. BCC PPU_Return_End
    ; I  d1 C+ ^6 a5 D4 d+ @
  670. INC PPU_Addr_H
    ' H, ?- p0 O% s  R8 Z6 {
  671. PPU_Return_End% d! l; N$ O6 _/ T" T! K; R3 C
  672. JMP PPU_Set_Increaser
    + r4 P+ x+ \7 {) e# i( g7 h
  673. ;------------------------------+ x, J  Z( N+ i8 U! k8 y' I. l4 [7 f" w
  674. PPU_Mode_Newline  ;新起行模式
    ' Y' B2 a+ l. A! M9 q, B
  675. INX
    9 k9 C0 z+ K( W7 _/ k
  676. LDA PPU_Addr,X8 x# A9 T5 J; x
  677. STA PPU_Addr_H$ Q( P  R9 ?2 u8 K# J0 ?- I# {/ x
  678. INX
    ) {* }/ R7 x; s! ~, o
  679. LDA PPU_Addr,X
    : z$ I. T/ ]. }6 Y
  680. STA PPU_Addr_L
    . X1 a2 }+ r8 Z9 L; H4 C% V& M
  681. ;------------------------------  r; n; R. S0 K* g) r+ Y" o4 v7 S
  682. PPU_Set_Increaser   ;设置写入地址) v$ S: s4 i2 _
  683. LDA PPU_Addr_H
    ; c% a; `, A: C" N, s9 l
  684. STA PPU_ADDRESS
    " u4 O9 n% H$ `! p
  685. LDA PPU_Addr_L/ S/ M) d; g  R) E8 w7 F' @
  686. STA PPU_ADDRESS
    ' B& r) ~. G' j9 O! D8 `& l  E" l' a7 a
  687. ;------------------------------: \1 }& Q7 E0 O) I  s
  688. PPU_Write   ;写入数据
    5 \# U5 H. z* w5 d
  689. INX
    + X9 m7 Y, k, a9 i3 V. E+ m% e
  690. LDA PPU_Addr,X
    * o. f2 g9 j: Z7 V7 f+ v0 G( p) @, C
  691. CMP #Flag_Over; ^: I! A0 {5 F& P( k/ M, _& L- |0 C
  692. BEQ PPU_Proc_End. x/ U, o( b5 n( k
  693. STA PPU_DATA
    5 J' a; h0 Y: \
  694. JMP PPU_Write
    0 R; e7 G' f" e7 k" y9 ~3 A6 z
  695. ;------------------------------+ _8 _; [2 C% ?8 `: K
  696. PPU_Proc_End  ;单行写入结束
    - u# h$ Q" @- O6 E$ A
  697. INX
    0 x' R* ^, _+ F& u# s% i% I( y
  698. LDA PPU_Addr,X
    # S2 {* ?& L: ?' l6 N
  699. BNE PPU_Mode_Select
    # `5 j; D  u* x/ W
  700. STA PPU_Addr
    - N! S+ _* p( [% X& c3 V- ~) v: w9 m
  701. JSR Update_Palette_Color
    * f/ J) z+ ~: C% T$ t
  702. LDA #$00
    $ Y$ K8 P6 l6 `) o
  703. STA PPU_ADDRESS1 N+ Y3 H1 r2 w# D/ G
  704. STA PPU_ADDRESS7 l+ j! z8 l& r; M0 ^( J, i; K
  705. STA Show_Track_Name
    # F  Z2 x# w* K6 I/ C  y/ }; t+ B( A
  706. LDA #Scroll_X
    ( B) ]& v7 P0 v# g
  707. STA PPU_SCROLL- n, U2 o( N, j  x
  708. LDA #Scroll_Y
    ; C7 S/ M8 C$ a% U+ M+ ^3 J  |
  709. STA PPU_SCROLL
    ! O+ e( v" x# K7 v
  710. LDA Screen_State
    9 d% y5 s. [2 E/ C- m& Z
  711. STA PPU_MASK
    1 {3 L; A' C2 _+ T3 a+ e
  712. RTS2 @  w0 B, e% b

  713. $ s$ ?+ o: {; \$ e
  714. PPU_Proc_Clear
    5 s: F7 U: j, P+ ~
  715. INX
    ! L; Y2 @5 D2 \2 X7 h
  716. LDA PPU_Addr,X5 h) Y" M) \3 H! s+ H. ^
  717. STA PPU_ADDRESS1 R2 \# R& L7 F4 @
  718. INX
    ' q+ N- C, |, O" V$ [
  719. LDA PPU_Addr,X
    . o+ u+ Q7 `" C. Y& ~3 W/ o) V- ?9 T
  720. STA PPU_ADDRESS
    6 J, O' h4 E* i2 l5 g7 q
  721. INX
    8 N9 o3 ~9 L2 N1 Y5 g
  722. LDY PPU_Addr,X
    ( C: W; C, M% @3 d  b: ]' S  L
  723. LDA #$005 |2 \9 y6 {. E3 W! [: U
  724. PPU_Proc_Clear_Write
      L6 P4 s! X( q4 u9 N/ N+ ^) ^) a8 g6 D
  725. STA PPU_DATA- [: J& a* |) A2 [
  726. DEY
    - O- P' C* f# s7 o# Z9 I: x# P
  727. BNE PPU_Proc_Clear_Write
    ( C$ j3 Z: v1 @$ f+ d( ]
  728. JMP PPU_Proc_End
    + w9 O) {7 r+ _5 m2 n  Q! Q

  729.   k" ]4 J) z9 N3 K" W. P' X
  730. PPU_Proc_Cnt_Line3 _' p& V" F( I; U7 S
  731. INX" {" X8 E/ h* m8 m& K9 L$ p3 l' G
  732. LDA PPU_Addr,X
    - S" C: Q" c& Q
  733. STA PPU_ADDRESS
    ; z9 {  a4 ?, q% m8 p* v8 j. g
  734. INX9 y' \0 c* Z7 r5 w* z6 c6 a" I
  735. LDA PPU_Addr,X# b: H# P1 N9 h4 S
  736. STA PPU_ADDRESS
    8 e( g7 s$ ^; F' d  w5 ], F& Q
  737. INX- l- K) U8 }5 f+ \  d/ H: f
  738. LDY PPU_Addr,X
    5 P/ S$ Y& M6 _6 }1 u2 |
  739. PPU_Proc_Cnt_Line_Write4 Z. {+ R, ~! R7 J$ F/ C2 B# h
  740. INX  k: M& {  J/ c7 U: N; Z9 w' V! o
  741. LDA PPU_Addr,X
    0 c2 m: m0 V4 e0 ^3 K. B1 a1 t
  742. STA PPU_DATA
    0 k( E; q- }; Y; _$ j7 N) R6 n
  743. DEY$ }" r( q( }2 \# X; z- v, ^  m3 u
  744. BNE PPU_Proc_Cnt_Line_Write, ^" H# g5 {3 t3 |$ I4 {7 t
  745. JMP PPU_Proc_End/ P9 k8 |. Y) M+ B% P* F+ o
  746. $ k, r4 V( v7 _! P' @4 K
  747. ;==============================
    * s% [  U: f9 U" D; \
  748. HEX_To_Dec;十六进制转十进制
    + {1 I& ?; P+ A
  749. STA HEX_Data
    ) h; y2 p5 j& X0 C7 E% c
  750. PHA
    9 ?1 L1 p/ K- Y+ z2 y
  751. TXA+ Z8 x7 C) ~6 F7 E# Y- p, f! U% @
  752. PHA
    0 Q( j% ]. @2 o
  753. LDX #$00$ a" u+ ~; B  I- t+ i$ T
  754. LDA #$00/ M3 D0 \! c- ~2 I
  755. HEX_Cln
    - h  M+ r4 Y% N
  756. STA DEC_H,X$ \9 @1 l! m( q9 T, s
  757. INX% _5 x; \# ^& N1 ~+ L$ U- P
  758. CPX #$03! |1 S$ P; d# p) G+ J9 R' ?. ]
  759. BCC HEX_Cln# k0 k$ K  l- {* F/ u( x
  760. LDA HEX_Data+ X6 E- ]$ I% e# G, L, F3 x
  761. ;------------------------------) r& l' w! {5 A
  762. HEX_1008 F$ o2 F, k8 U5 e! o, p; j
  763. CMP #100
    / x1 t8 {/ _* A0 ^
  764. BCC HEX_10
      Y  j0 {7 }4 L3 {- H, I$ ?
  765. SEC9 l5 m; I& A) m! K  o7 @' U' T
  766. SBC #100, M+ F/ I+ g  I* y2 `+ ^' U
  767. INC DEC_H
      x- Q6 J; Y4 h  g
  768. BNE HEX_100  v0 ^4 b: E( @* z' o$ V" Z5 l
  769. ;------------------------------
    . x, L  p; E1 y
  770. HEX_10
    8 |3 u* ?  v: |2 e, Y5 N% U
  771. CMP #10
    8 _5 g! ]6 y% t  k# ?1 C
  772. BCC HEX_15 X0 @7 b/ t  u% M4 Y3 i
  773. SEC
    8 s, ~1 `- p+ a
  774. SBC #10
    $ j: }) O6 y2 f6 Q+ K8 b. A
  775. INC DEC_T5 }4 W, R: d& u: T/ [
  776. BNE HEX_109 ?8 ~  {: N" ^2 R0 q
  777. ;------------------------------- Q4 z+ k6 H  p% B+ r2 ?
  778. HEX_1. T2 p( R( t) }
  779. STA DEC_L
    , q* B' X/ x1 ~7 c* G9 c7 T# I
  780. PLA- {1 ]" d8 f  L3 v2 m% e6 g
  781. TAX
    ) m5 ]" `+ h$ N! ]( j
  782. PLA7 s/ I% h& _: r: F  B
  783. RTS
    - |% T- r3 J# u0 k5 \( y9 T3 ^$ _

  784. & d" D) c: |3 F
  785. ;==============================* ^4 n9 z" H& k8 L! i
  786. ;音乐曲目显示
    7 C7 a0 f, b5 y+ L" q
  787. Music_Show
    . h1 O6 X$ {' S* E
  788. LDA Music_Cur( t. H+ y4 z7 M
  789. CLC
    ' X2 N( y) f. E; G& J0 R
  790. ADC #$01
    5 l  u. H6 i5 f: y( b6 \
  791. JSR HEX_To_Dec3 z, j( g5 T! L
  792. LDX PPU_Cur
      W  O3 s2 I7 o+ `2 G
  793. LDA #$FD+ G$ Q* U- q& l* T7 W  s
  794. STA PPU_Addr,X
    0 V7 y1 ]& f, Z& C& a$ {' s
  795. INX- @  K# Z, n+ F+ L
  796. LDA #HIGH(Play_Index_Pos)0 Q8 T! h: q/ Q% Q, V
  797. STA PPU_Addr,X
    & R! h( F' g5 Z' x0 D8 ?
  798. INX! |/ _6 j# i5 v( |! U4 U  B
  799. LDA #LOW(Play_Index_Pos)
    ; k) w' n3 b( K
  800. STA PPU_Addr,X
    , T+ X: D- @! K% {* |6 h% S
  801. INX" Y; t+ e# I4 W5 L' [6 e

  802. $ G. D7 @& J7 m% U
  803. .IF Music_Song_Total > 99
    ; l( g/ q' }% C0 Z8 V
  804. LDA DEC_H7 r) J4 Z- K' ?! T( g% P6 h
  805. ORA #$30
    : @* h4 L7 h7 v" E$ _+ x/ k/ F
  806. STA PPU_Addr,X* Q" f! G7 e, r: g
  807. INX# z5 m9 l* a2 b  V5 ^
  808. .ENDIF
    1 e8 w( V6 K/ Z& a2 j
  809. 4 i3 @7 i+ H7 U+ o# H
  810. .IF Music_Song_Total > 9
    . B  `. J1 [+ ]& m; s% ^
  811. LDA DEC_T5 \3 }- ?/ A4 |2 E+ I9 J
  812. ORA #$30, I* Y; x" N5 V& m) x, P% ^# e/ H
  813. STA PPU_Addr,X
    6 |8 t: q# {) K& y: u
  814. INX! P* f  o: Q  ]7 r+ B7 ^
  815. .ENDIF, L, e1 H2 E& w
  816. * o9 _( M$ R1 i! S
  817. LDA DEC_L
    ) [9 h( _7 ~7 t5 Q  h  ]: }4 I$ Q
  818. ORA #$303 a( {* X/ g+ S( }7 b! Z
  819. STA PPU_Addr,X4 Y6 a  n) A' E2 q/ p: n! k
  820. INX  S1 Z6 l2 T* E4 d' F8 p* S$ Q0 I

  821. ' J: O: N9 A8 B0 [/ t! K+ E
  822. LDA #'/'
    9 B* X) Y/ K$ z9 x. U& E
  823. STA PPU_Addr,X
    1 L+ P' `: ~" [3 ?- w3 u
  824. INX
    3 ~' Y) \: Q4 X; Z) y
  825. Music_Show_Total# ^9 x) A& m. X
  826. LDA #Music_Song_Total
    " l6 N# J% T% A; d
  827. JSR HEX_To_Dec
    3 p& @2 d( j" Z6 {/ @3 l! Y7 S9 ^
  828.   n  p, k. O  ?
  829. .IF Music_Song_Total > 99$ \. L, t7 g, h
  830. LDA DEC_H
    $ d- n/ Y: o2 A2 s; |' X: X3 O, A) ]$ h
  831. ORA #$30
      j4 h) ~; m* }! B# f
  832. STA PPU_Addr,X" t% G8 b* c* r
  833. INX6 h$ E* V* Z/ U
  834. .ENDIF9 \7 h/ g1 @8 r

  835. % s0 D5 |4 \4 \
  836. .IF Music_Song_Total > 9
    8 k- U" ]0 C% {, U0 U& z
  837. LDA DEC_T  @' a! ?1 \) ~7 {# X
  838. ORA #$30" k6 @( e8 v3 D" i0 {" M/ `: e
  839. STA PPU_Addr,X
    2 S# _1 R! u0 d, B, ^6 f& J) _
  840. INX
    ! O, J6 F9 ]) m4 T4 X/ a
  841. .ENDIF
      f9 Z# Z6 P' T
  842. + H/ z/ T4 E" m. x
  843. LDA DEC_L
    : L  d* f0 K- }  j7 n* Y/ b8 M
  844. ORA #$30) x; U0 M, B: m
  845. STA PPU_Addr,X
    6 ~, N, Q2 k- ?; q8 w2 F
  846. INX3 {) B, ?( H; D; Z
  847. 9 A* d2 x  B# `0 k
  848. JSR PPU_End1 w0 N  E$ n+ X# }. _6 C3 N1 ^, `6 _
  849. Music_Show_End8 \) T& k; @" G. l2 {2 o+ U
  850. RTS
    4 _, q" N0 G( r" F; T2 F) g
  851. - ~# c4 [" \4 H* P
  852. ;==============================
    9 m1 x# `" ]- J- N4 e0 v3 ?
  853. Time_Show;播放时间显示  ]: v& d& Z" z
  854. JSR PPU_Addr_Set4 ]) r& J# \! O) }% l* k! ~+ r* W7 K
  855. LDA #HIGH(Play_Time_Pos)
    9 t' `6 m/ r+ a. G
  856. STA PPU_Addr,X4 x+ |# g0 z# l* C& Q7 D- J
  857. INX2 _4 `( v- R# T9 H8 ]0 x) a
  858. LDA #LOW(Play_Time_Pos)- z) h7 u, Y/ g- h
  859. STA PPU_Addr,X
    . z. r) u/ ^0 M' q: ^/ F; u
  860. INX5 g4 e/ Y3 b: U. ?
  861. Time_Show_H
    % Y% z2 ?" r' {4 [1 K* }
  862. LDA Time_H
    % w. {8 n7 ]. l1 a1 ]8 z) m2 T" u
  863. JSR HEX_To_Dec
    8 k8 I; P; u0 Q" d' g4 |
  864. JSR Time_Digit
    % ?3 Z. A! p7 p, E3 ?* q/ j) t
  865. LDA #':'
    7 v  u* v! i+ @; a2 \) I
  866. STA PPU_Addr,X8 x. u8 s( H1 M
  867. INX6 Z: ]1 F6 r! t* q' d
  868. Time_Show_M* u% M+ R% c8 v: t* d+ G2 P9 f
  869. LDA Time_M
      i. f3 O$ q, }% ^+ U
  870. JSR HEX_To_Dec" b/ _) n/ E  P  |4 [- O
  871. JSR Time_Digit7 N2 r( z4 z/ t
  872. LDA #':'
    % M( t1 r" p3 g
  873. STA PPU_Addr,X
    3 L5 S8 [0 d# G1 O
  874. INX
    $ |0 K5 i" ~% w& R0 y  L
  875. Time_Show_S
    . c# Y1 |% s* u2 S5 s
  876. LDA Time_S
    + f# a, }6 f3 C, m0 a
  877. JSR HEX_To_Dec) B4 w3 S2 o( _5 j8 t& |
  878. JSR Time_Digit4 `% l' C  S, j3 P
  879. JSR PPU_End
    4 j9 _( r& Z& S% f) U: \
  880. Time_Show_End4 O. Y0 w& Q8 a: x* U! D4 J) x
  881. RTS0 y/ O* p. z  e4 K2 a- ^

  882. 8 q# G* |2 x1 I2 ~7 D
  883. Time_Digit+ X3 n8 T" A! |$ `1 G/ X0 K
  884. LDA DEC_T
    ) J# c3 R# j5 y6 Y1 [* D
  885. ORA #$30, I4 J$ a& B" e  l; B
  886. STA PPU_Addr,X
    2 ]8 ~: x* J5 q2 @' N0 G, I# V
  887. INX& T8 k3 J3 C* H
  888. LDA DEC_L2 {; f3 m% \  Y$ ]# d9 u
  889. ORA #$30
    $ J$ T/ c) p4 F3 b8 t/ ]( G6 T
  890. STA PPU_Addr,X
    ! Y# p  f; ?0 o
  891. INX$ Z* _  S; y* ?0 |( G
  892. RTS
    4 R9 M; q3 H" v& t
  893. ) ?: F0 @. _, e  O" o$ W
  894. ;==============================
    # c8 S: Y. ?% u. G! Z  Z
  895. Time_Count;计时- N( x5 |; b* }/ e5 r' C
  896. LDA Music_State
    " x4 x8 W4 z& k% {3 O+ r' @
  897. ORA Time_Wait_Cnt& e, l% U! \; Q3 e* P0 Z
  898. BNE Time_Count_End* I- M& v& D/ \. X8 {; O  g* J
  899. INC Time_Cnt; d) k1 c- T; S1 g! D# j
  900. LDA Time_Cnt
    2 C$ x, \/ b% e4 W; d$ s
  901. CMP #60# [6 j4 H" Y/ u
  902. BCC Time_Count_End7 u6 \6 Y7 ?5 T7 A5 M
  903. LDA #00
    1 o- y# V% a3 g4 R) f% M5 \' @" T
  904. STA Time_Cnt
    ( S7 P9 H4 A# S) ?3 _9 h( ], K
  905. INC Time_S
    0 P8 h0 X  `) r3 m4 d

  906. 4 Y- D8 ?! ]7 F; t. Z
  907. Time_S_Cnt) t# c+ X+ [" z3 k, {% s7 S
  908. LDA Time_S
    4 W& ~* I8 r# g
  909. CMP #60- ]( n" x( C+ }7 `
  910. BCC Time_Count_End
    * u1 L& T3 I6 X
  911. LDA #00
    / m$ Z7 c: j. W
  912. STA Time_S
    8 V  z* z) n/ \9 G
  913. INC Time_M% Q) N3 K2 ~5 c9 T& I" N: f/ v' h' {

  914. ' L% s5 F, r$ R5 C  L9 a- j5 J0 B3 k
  915. Time_M_Cnt
    6 u$ }) @7 ]8 M. v
  916. LDA Time_M& l4 K# |& [1 n& V  [
  917. CMP #600 l* x" i  z( w7 L3 @
  918. BCC Time_Count_End
    0 v$ _: L2 o# J2 U) w
  919. LDA #00
    - X: O; Q! w7 d& B, l/ |
  920. STA Time_M
    , j* K) x! q6 j; w& r3 s
  921. INC Time_H
    2 H1 i' n; \+ J. ?. R) ]

  922. & W* U, T5 ^7 v5 e
  923. Time_H_Cnt
    1 `) [0 P4 S7 t. O* q2 J) k( a+ |8 ^3 S  C
  924. LDA Time_H
    ! r  `8 l: c: ]& Q: O+ p% l
  925. CMP #24
    ' W5 P' U9 N2 F! u8 Y% Z6 E( c
  926. BCC Time_Count_End
    " q2 d! z% T- n0 L- D6 a5 s' U
  927. LDA #00' U- ~  F* y! O( u
  928. STA Time_H' A. h. s7 M; j% }# g- h* j( T
  929. # ?& A& e9 t7 n+ ^- Z& P' j( x
  930. Time_Count_End) Z5 l: A% M4 P( G5 x
  931. RTS
    ) c) l1 h8 d& Y% K2 Q; c

  932. 4 I5 F, ]  V+ Y; e! i: V
  933. ;==============================* o0 Q# @( ^% g7 N9 n
  934. Time_ReSet;播放时间重置) f( T) m. F* U+ a% [" D
  935. LDA #$00
    2 h! l* q3 V  q6 M/ I
  936. STA Time_S
    5 t* g6 ~$ {6 [0 l1 ~# m
  937. STA Time_M 5 p0 J: P3 z; A! J: S: R
  938. STA Time_H
    " W4 B' M) T3 H% o
  939. STA Time_Cnt
    3 j  b9 V* P5 S4 T) Y' s! G6 Q
  940. RTS/ P2 w- I) b, w& S6 |

  941. " ^; U) a2 Q& \7 k7 e5 f# X! b8 [( ~
  942. ;==============================
    # I5 h9 v0 x5 j  t) x0 ~
  943. Music_Bar_ReSet;音乐条重置
    - w% M' o4 G" |9 v
  944. LDA #$007 b( h; i( L! U) T% m) b6 N8 Y
  945. LDX #$006 R# j1 O8 V( d/ ~
  946. Music_Bar_ReSet_Set- |5 ]# x3 |9 i# J2 h5 A
  947. STA Sound_Bar,X
    2 l! Y+ X: _( c" h; [! S
  948. INX0 b) L. T: O" I
  949. CPX #$10
    $ W7 J0 O! c: w
  950. BCC Music_Bar_ReSet_Set
    " r4 ]) ~9 j! i  }) V2 d
  951. RTS
    7 c% w/ ]* D2 g
  952. 4 O/ K; L# Q& f7 C0 o/ N
  953. ;==============================
    0 K2 Q" F7 J( k+ C
  954. PPU_Data;PPU数据写入! k% E& A% `) y
  955. STY Data_L; E3 y4 B! q- N9 u# I
  956. STX Data_H0 _+ o/ j* q. k5 g, Q' j
  957. LDY #$FF
    . I4 c" J( {& U& G) p$ M$ o: K
  958. LDX PPU_Cur
    : C/ _' w3 f( r) `5 m
  959. DEX) f3 H0 b+ X- u; ?# u
  960. PPU_Data_Beg
    ) @/ t8 U8 j& b" S( d
  961. INX
      O* r  L( q# E& ^- c, @
  962. INY
    3 `: c3 I( E; L$ u# l1 R* }
  963. LDA [Data_L],Y
    & m) a: X7 a7 c0 U, }9 \1 Q
  964. STA PPU_Addr,X
    % [7 K4 i  D6 X
  965. BNE PPU_Data_Beg
    5 ~( L' P$ F9 A. a, ]& H/ }
  966. STX PPU_Cur1 o# Z" @6 G' y6 `0 r3 }
  967. PPU_Data_End
    ' u6 s- Y5 q" u3 R- e. F" r/ S3 C
  968. RTS
    2 f: ]# G, x1 a: I% w! J

  969. & n/ Y  T& p3 {6 M- L, Z7 Y
  970. ;==============================
    & }7 V5 p( s4 t5 Q6 C! ^( M2 y% Y
  971. Music_Stata_Show;播放状态显示8 N+ f, ?7 j5 f6 e# F! ]/ ^
  972. LDA Music_State
    . h+ u- S4 r  H2 g) v8 _
  973. BEQ Music_Stata_Show_Play% B( O( _; W+ M! M. j9 X
  974. Music_Stata_Show_Stop8 d; T9 Q* C3 r
  975. LDY #LOW(Music_State_Stop)' q7 Y  c- b% i4 y6 ?
  976. LDX #HIGH(Music_State_Stop)! N9 T8 I, r% x# `+ P
  977. JSR PPU_Data
    4 T- A$ W6 b6 ]  G- W2 J) o' u+ t) V4 }
  978. RTS
    3 ^1 C, O$ c5 x' a! |. u- t
  979. Music_Stata_Show_Play
    6 E5 ~! {( ~; w
  980. LDY #LOW(Music_State_Play)
      w9 l! K4 [; r, e& x
  981. LDX #HIGH(Music_State_Play)( t% t! m# t3 _# X7 M5 Y! v5 B
  982. JSR PPU_Data) q* D; Y! Z; }) E! H4 O) e
  983. RTS
    6 v+ v! j& C& {: W( H
  984. ; L. p' Q# J+ @2 t8 G
  985. .IF SOUND_BAR_SHOW_ENABLE" t* a6 W; f- u; A: P
  986. ;==============================
    # T- l/ r0 s6 e
  987. Sound_Bar_Text_Set;标题与音乐条初始化" t- M3 _7 f" [% w6 J
  988. LDY #LOW(Sound_Bar_Text_Data)
    ' c$ ~( V. O4 T. v2 o* z
  989. LDX #HIGH(Sound_Bar_Text_Data)
    8 q; @4 k$ O- d# ^! i; n+ J
  990. JSR PPU_Data2 Q/ B7 ]# z8 u. s
  991. RTS( Y5 M3 x6 H. S% M- @

  992. % q# S; N: H8 O* o/ N
  993. .ENDIF
    & N; Z3 v& @1 f4 J+ v

  994. ! A+ y  r& P2 \1 X' B1 E
  995. ;==============================" S. ~! l. x2 {* d- p2 n4 [
  996. Set_NameTable_Attributes;设置命名表属性
    ( V; ~5 ?6 B7 n1 u+ w  j2 n' T
  997. LDA PPU_STATUS, Z' C. c! }+ z' w( U$ V
  998. LDA #$23
    % |. F2 _" n' M3 `! F* ]! Q
  999. STA PPU_ADDRESS8 J4 J  Y' a( i7 N: O# K
  1000. LDA #$C0
    5 ?5 `1 T& {# b- g' s' k
  1001. STA PPU_ADDRESS
    + k9 M) s1 X% {9 z1 p! v( t
  1002. LDX #$00
    4 q+ M' R% T0 T( c& w
  1003. Set_NameTable_Attributes_Write
    ; e' D3 F/ Z* t" C: p
  1004. LDA Palette_Attributes,X# I. {1 L  ]. N0 ^3 Y3 }4 I
  1005. STA PPU_DATA' U6 A2 h7 ]3 ^' A6 o+ E
  1006. INX& M; [1 n9 I) a2 U5 F, g) {
  1007. CPX #$40* Q. ^: j4 c# i7 }0 ]
  1008. BCC Set_NameTable_Attributes_Write
    / Z, c9 Q* U) Y( C: k8 J# o) M8 N: G
  1009. RTS
    + \! z2 |' S' Q+ p4 R- |

  1010. : a" k6 g5 p% H7 U6 Y0 q4 z
  1011. ;==============================
    * u" e3 k2 w! E1 Y1 b/ {
  1012. Set_Palette_Color;设置调色板数据
    + @4 _- k0 ^$ i
  1013. LDA PPU_STATUS1 p0 }. `8 b) e; h& t8 t1 @
  1014. LDA #$3F
    " L6 Z8 y2 K- a
  1015. STA PPU_ADDRESS
    / b5 g4 Z$ B3 B0 ^! K7 \$ n3 a' K
  1016. LDA #$00$ o4 h2 p6 y; b5 V9 Z# K. x" Q
  1017. STA PPU_ADDRESS3 O2 ^7 {: Q& _. I
  1018. LDX #$00
    3 `5 |- [+ J- }: T" N7 z) u
  1019. Set_Palette_Color_Write% e* p) `' w6 r# b) |
  1020. LDA Palette_Data,X
    $ ]- B4 B1 a) @7 P' l
  1021. STA PPU_DATA( ]$ ~. D. f; m2 F6 s
  1022. INX
    1 [+ k5 H" A2 y( N; x
  1023. CPX #$208 E* U& V( h0 N" I& ^) s/ Y
  1024. BCC Set_Palette_Color_Write
    $ R. C" F' W# Z4 M* P" Q7 H6 P* }
  1025. RTS* s+ F6 a# E, b# n
  1026. * k; R; o# i3 C  `8 z/ G) C% @
  1027. ;==============================
    : ~# i! s5 k/ ?# G; X' W# @
  1028. Init_Palette_Addr;初始化调色板数据9 H' Z( E) |1 B8 N' n
  1029. LDX #$004 C0 ?9 u1 T( H
  1030. Init_Palette_Addr_Write
    9 V8 z9 T% T: Q: @, C4 q
  1031. LDA Palette_Data,X- c8 t- U) w  S4 U. e2 Y" t! f
  1032. STA Palette_Addr,X" E; {1 @9 Y) A& B6 G
  1033. INX
    1 N% ]% N9 O: Q  |  ^
  1034. CPX #$20
    $ U# s- t: m& C. l, E
  1035. BCC Init_Palette_Addr_Write
    : U- e% x# V5 S- v8 g3 [3 I
  1036. RTS
    % a5 e/ N! U4 R. Q5 d! g
  1037. 3 [. {* K& [7 Y# b/ n. d8 E9 U4 x; r
  1038. ;==============================, y0 v" e! b  J+ f( p
  1039. Update_Palette_Color;更新调色板颜色+ {7 q4 Z6 X. r; d( N, X) Z6 ^
  1040. LDA Show_Track_Name# A( `7 w1 b0 k9 F1 ?  V
  1041. BNE Update_Palette_Color_End1 i- F4 ~: u. u# U+ p( z( |7 J
  1042. LDA Palette_Update_Flag
    ' H6 l1 a: e/ `' s
  1043. BEQ Update_Palette_Color_End9 Y6 c/ x. S( w0 t6 Q# Q) Z. `
  1044. LDA #$3F! d2 w( A: e- `7 b, J% k
  1045. STA PPU_ADDRESS* s0 f- _: q* W3 z
  1046. LDA #$00+ o. X3 D. i" p9 e- a" Z# t+ }
  1047. STA PPU_ADDRESS
    ( ~- D3 R2 Z. ^1 R0 A
  1048. LDX #$00
    # _* M$ x9 x; F. Y3 o. }  r
  1049. Update_Palette_Color_Write
      _$ n3 [; Z- Y( u" H- D& ~8 B* g
  1050. LDA Palette_Addr,X( E3 G3 i1 o1 m% q' p2 c: H
  1051. STA PPU_DATA
    ) Z' a/ j) ^8 s8 o% g/ v
  1052. INX
    ) F1 R9 [1 C: s' K2 h
  1053. CPX #$205 ]- A/ L: `2 n( J+ c) l6 V
  1054. BCC Update_Palette_Color_Write: S5 h) |+ C& [# E3 q1 b
  1055. LDA #$00
    3 g. w: W0 P$ ]- l
  1056. STA Palette_Update_Flag
    % P  k$ U" {- G9 l2 B8 W
  1057. Update_Palette_Color_End
    ( [, k) _* G* D9 n/ A8 B' \
  1058. RTS
    ! \3 M8 o" L8 {2 ?# ~" A8 O
  1059. # b3 @( S; j( {, U
  1060. ;==============================
    4 _, i$ D( _, b2 e
  1061. Update_Palette_Data;更新调色板数据
    : }" v7 s- X9 C6 W1 }" s. j7 g, N2 W
  1062. LDA Show_Track_Name2 t# l2 b' g0 M# _! Q- w( w& u
  1063. BNE Update_Palette_Data_End
    ; ^) M. e7 G8 g3 m; s0 Z# \+ a
  1064. LDA Music_State
    # i7 Q: U+ c1 [# Y
  1065. BNE Update_Palette_Data_End
    . r, N& J) e4 Y, d# U8 O" o) t  _
  1066. Update_Palette_Data_Check
    0 X$ A# s$ _( q6 v
  1067. LDA Palette_Wait_Cnt
    : y) A( X7 n8 V8 d/ b( l
  1068. BPL Update_Palette_Data_Check_Over" _$ O7 ~: F( b  l1 x& G
  1069. LDA #Palette_Update_Interval, h/ w+ f0 ~2 l) S1 P& t( ^' o! G
  1070. STA Palette_Wait_Cnt
    2 N7 h8 c; Q. Q! s4 F, J
  1071. Update_Palette_Data_Check_Over5 o5 J& l5 s% X! @+ U2 z" v
  1072. DEC Palette_Wait_Cnt
    9 r4 X* l: x2 U) j+ F" G" K
  1073. BNE Update_Palette_Data_End& M% o5 B, S' A/ }7 o4 L  Y& a
  1074. INC Palette_Update_Flag1 D* y5 E$ t1 u5 V# m9 V7 U1 f
  1075. LDA #Palette_Update_Interval
    2 x9 i* W4 [1 U# J2 ]) I
  1076. STA Palette_Wait_Cnt
    3 v  ^1 Q/ D: R0 L+ U0 S
  1077. LDA Palette_Update_Addr
    & O& X/ Y& j+ s8 n6 a
  1078. CMP #Palette_Update_Max
    ' O4 P2 h8 s/ K  Z% E% {
  1079. BNE Update_Palette_Data_Set/ `$ N' @$ f/ m1 B8 o* z# E
  1080. LDA #Palette_Update_Min - 1
    2 `0 E/ d2 b. I2 U2 A$ R
  1081. STA Palette_Update_Addr
    2 e7 `) h: E: G1 g' r9 c+ o, M
  1082. Update_Palette_Data_Set
    ' o; N8 A% }. t2 Q' n
  1083. INC Palette_Update_Addr
    5 ]  @; A& y6 ]+ v, B- G9 p+ U
  1084. Update_Palette_Data_End
    ) @8 V4 j; @5 X$ b
  1085. RTS" k7 t4 I. d7 ^- A; I( T

  1086. % T  H" p/ h8 n9 [4 F- p
  1087. ;==============================
    # S" j6 Z" U# I  g5 K; I, E
  1088. Show_Music_Text;显示静态文本
    2 z. q+ G8 y( q7 w' M6 j9 |
  1089. LDX #$00
    1 r: |+ n3 O( X
  1090. Show_Music_Text_Set
    ; _9 I& s3 x9 U# \: G( \
  1091. LDA Static_Text_Data,X& `8 C, y( R7 \* b: F1 k
  1092. STA Data_L5 Q! [/ H7 w9 N' z
  1093. INX
    % m1 R0 }) |5 W! F5 O
  1094. LDA Static_Text_Data,X
    . f, }2 R6 N# o+ j* \$ r' Y
  1095. STA Data_H
    & x; w& ^& V1 G6 X2 D
  1096. INX! ]& M+ b0 \& H' B/ Q; b
  1097. LDY #$00
    ) _$ P5 t. R! K7 r
  1098. LDA [Data_L],Y# V( m7 s; ]2 D3 J
  1099. STA Data_Cnt
    ; E; S9 N0 {! ~% c* Q
  1100. DEX
    + [- T' o- O0 A
  1101. DEX
    % E# C9 K& {: l- f
  1102. LDA Static_Text_Pos,X% v8 ^6 j7 y% h7 _6 @* s* z) |+ R8 U
  1103. STA PPU_ADDRESS% U0 f: ^- c. {' r" l: p6 G2 G
  1104. INX
    ) D; D; R- K; ~* z- e' i5 }6 r
  1105. LDA #$20, }, Y8 M8 V3 F$ M
  1106. SEC) z; p: V2 w+ p  n& [
  1107. SBC Data_Cnt
    " _: \- S" I5 e% D
  1108. LSR A
    9 L# K' {6 `; N1 [. g, _
  1109. STA Data_Buf/ H" Z3 B, y6 S* L9 X1 \& ?+ T
  1110. LDA Static_Text_Pos,X
      `3 o4 ^' E/ s1 w4 l) d- ?+ I, w
  1111. AND #$E0
    5 X9 O5 h# a6 M6 H; \$ L
  1112. CLC
    3 O( ?5 `4 `7 d
  1113. ADC Data_Buf
    ! T0 u2 b" \4 O4 l0 E3 L
  1114. STA PPU_ADDRESS
    % h0 h) b7 l+ c. e
  1115. INX. ?% p  B2 O3 p+ D5 O5 ?3 H! }! {8 B
  1116. Show_Music_Text_Set_Write0 a; o; }7 k! {% f1 H. i% z+ M
  1117. INY( r/ k+ N2 t! Z; b+ p" X9 U
  1118. LDA [Data_L],Y: w4 {+ x( |1 Y, h. Y& N; v
  1119. STA PPU_DATA9 F: b& Y/ ~/ b/ O0 Z8 B
  1120. DEC Data_Cnt
    / ]+ n3 U/ U% T" W
  1121. BNE Show_Music_Text_Set_Write
    0 B3 n7 Y6 o, v
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    1 g, @) \+ H2 ]4 H' G. p
  1123. BCC Show_Music_Text_Set
    , F! _; Q1 U. }
  1124. RTS/ d5 x* b  e7 A4 ?& W# x8 q* c

  1125. ( w. G! I+ P7 G6 D
  1126. ;==============================
    ! b& Q  t1 n5 B" l
  1127. .IF Track_Name_Pos;显示曲目信息, c5 e1 N$ ]1 w1 U0 q1 R8 V" \
  1128. Show_Track_Info
    ' f: R& b5 x! w9 `% e
  1129. INC Show_Track_Name) s2 j$ D3 S$ F* u
  1130. Show_Track_Info_Clear
    $ o9 M) K4 U; X9 C# {+ \
  1131. LDX PPU_Cur
    3 I3 c# t) J+ S" `. ~/ D
  1132. LDA #Mode_Clear
    * o$ o% k  E; ~0 [8 `) u$ c
  1133. STA PPU_Addr,X
    2 v# G9 `5 s5 X* o7 g6 a) i& V
  1134. INX% R' U8 {6 J% i( @) S4 F

  1135. ( d% l7 o; x4 F7 R& @2 j
  1136. LDA Music_Last
    $ B4 {' c- D' z3 E; L' s
  1137. JSR Show_Get_Track_Name_Center_Pos
    % t7 L% r% d( p
  1138. Show_Track_Info_Write_Cur# h  K! d8 a6 S
  1139. LDA #Mode_CntLine/ L- t# N+ O+ `  t, B4 ~! h
  1140. STA PPU_Addr,X
    9 C7 o. i, U! I' e
  1141. INX
    ' m: V8 k6 o8 U

  1142. 3 B) k5 B( k! ]/ }& D
  1143. LDA Music_Cur
    - t3 F: v- @1 W3 }8 `
  1144. JSR Show_Get_Track_Name_Center_Pos
    + X5 \# i4 G; Z$ u; e( V4 X
  1145. , n7 b) x# X( W; G& L
  1146. Show_Track_Info_Write_Cur_Data
    9 @2 k' f7 R' z
  1147. INY
    0 {3 ]  ?+ @: y6 a, X1 w, e9 ?
  1148. LDA [Data_L],Y
    + [" ^. }; h7 F! `; Y1 a
  1149. STA PPU_Addr,X' g& s* e# _1 ]* e7 x& _' a. p
  1150. INX
      ~) U: B2 b  w7 r, Q! z: X
  1151. DEC Data_Cnt
    . }& |. X: [2 y. @5 F: `! Q
  1152. BNE Show_Track_Info_Write_Cur_Data0 ~6 K4 k* [9 l! y+ j( `
  1153. Show_Track_Info_End6 B8 h% q9 T% M$ r: \$ p0 ~
  1154. STX PPU_Cur0 J( {- a. a  x) H+ w- O4 q
  1155. RTS
    0 c2 G! Z8 b) G7 z- i5 N3 B
  1156. . F/ {/ L: D$ ~3 `3 q/ B
  1157. ;==============================6 e$ t- b* n6 m% g8 m
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    ! |  ?9 C- y3 p6 H; ~2 d
  1159. ASL A8 H. t' {8 T7 z9 P. f4 c
  1160. TAY4 \6 Z: f6 Z  ]; \
  1161. LDA Track_Name_Addr,Y2 i3 w$ B/ u! b9 V$ W% ^
  1162. STA Data_L' W* Q+ ^5 Y+ K% x8 _# ~9 d3 v. L
  1163. INY
    # U; P* z/ R  g6 X$ b+ y+ t! u! Q
  1164. LDA Track_Name_Addr,Y/ `: }8 o  J; i0 H  h; _- O
  1165. STA Data_H
    1 p% E$ _7 i: U' r
  1166. LDY #$00
    0 W7 v! R9 ?8 ^6 V, S
  1167. LDA [Data_L],Y
    # ~/ m7 t2 R5 m6 ~) T7 m% q
  1168. STA Data_Cnt
    - s3 a* Q7 n4 }7 k7 V) n4 i
  1169. LDA #$20. G9 R' W8 T3 P# t) Z% b1 U
  1170. SEC: Q- O+ L6 ], f5 M
  1171. SBC Data_Cnt8 l  t" @2 a$ ?0 x# W9 y7 O
  1172. LSR A
    1 |) A  A4 x: k  p+ u$ o
  1173. STA Data_Buf
    ' [8 z% I4 j7 l8 }( }. e
  1174. LDA #HIGH(Track_Name_Pos)) N, a* T8 k/ I: w4 t1 C0 J
  1175. STA PPU_Addr,X
      e/ n6 M2 |; I
  1176. INX5 |9 d9 ~2 `$ H0 b( W
  1177. LDA #LOW(Track_Name_Pos)
    ; a7 I4 N; p( I: m, w
  1178. AND #$E01 \  h) m( ^+ _  c& f
  1179. CLC* Z9 G" y( I- i
  1180. ADC Data_Buf
    ) [. Y  c% g  E. G5 @5 }
  1181. STA PPU_Addr,X
    $ O* _2 N- T4 x1 i1 m  t7 S
  1182. INX
    " n- l- L5 N* O) \# c
  1183. LDA Data_Cnt5 g. q7 v( W: e7 }0 O. U
  1184. STA PPU_Addr,X
    6 r! r7 e0 }6 r5 U1 [
  1185. INX
    # C$ Q5 m5 q( e9 p% x, k
  1186. Show_Get_Pos_Center_End  O. Q2 b: ~, C+ @6 T
  1187. RTS
    3 k: Q" B7 j! B4 m# l: j! y1 Z
  1188. .ENDIF
    4 \: {1 r1 V$ R! B; u
  1189. 8 A# I0 m! ~. M" z; e) J: t
  1190. ;------------------------------
    ; f( _' r' Z6 Y7 Z
  1191. ;命名表数据
    ! P/ h2 J1 C6 J1 B& U
  1192. Palette_Attributes
      G# I! `7 S' J- w/ L
  1193. .IF SOUND_BAR_SHOW_ENABLE+ G( z0 k& ?! s% e* ?
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00+ u1 a; c8 B0 ~3 j  l
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ( a5 y7 t0 p; S# @
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55  j( f# m  O- C& P
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$550 I( b0 H& [! Q6 z+ T
  1198. .ELSE* }  b" \! @$ b3 }! M
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ! f  b; F  H+ q" W1 k+ j2 q$ J) s
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    / L* b. i8 @& F% I' O9 q0 T5 x  t
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55: ?6 ]( y4 h# T  U5 |
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55# l+ Q9 q, g# w
  1203. .ENDIF
    " v! I* A( p3 G) l6 q. L+ R" I, [; Y

  1204. & y  D+ @( T7 ~( L: j
  1205. ;------------------------------
    / L+ I7 _) ~5 `- }
  1206. ;调色板数据+ ~* B  U+ o* U  n! p  K+ v) P
  1207. Palette_Data
    $ H2 r3 g6 ^$ f) p, F. v. A2 o! ?9 F9 I
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    * J0 q! K1 w. b  S
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F( P( s; b" M4 `5 A

  1210. + z6 O! D- Y; J( m' K
  1211. ;------------------------------0 K2 ~" X" k) _$ d
  1212. Static_Text_Data
    + ?' y' s- C7 z, i4 j2 o+ f
  1213. .WORD Static_Text_Title_Data
    , o! h5 U4 T! ?7 Y- B# e7 a
  1214. .WORD Static_Text_Author_Data! B& x; L( i" r8 p
  1215. .WORD Static_Text_Date_Data
    ; ~/ W9 f  X: f) A0 P: Y: Z5 C# I9 R
  1216. Static_Text_Data_End" }& ]% x8 w1 N& @+ B

  1217. " \" T* O. I8 d3 w. L0 U
  1218. ;------------------------------
    3 Z1 k! t1 M. `3 t, Q
  1219. Static_Text_Pos
    & Z7 S- O  V+ R* G* @
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)7 h+ L- [3 x# t  g
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)! d! `( M. i, T; ?* f* j# @
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos), c2 K5 a2 @3 r, r  Q3 }: X
  1223. Static_Text_Pos_End7 B$ \. f0 B* }5 \: z" N
  1224.   C: P1 k1 n2 H& c$ b
  1225. ;------------------------------4 j: k& {9 a& O: I% w! H3 y# s6 ?& P
  1226. Music_State_Stop
    & q: m/ }& c) ^) y8 \% A5 E
  1227. .IF SOUND_BAR_SHOW_ENABLE6 f; l/ o  Y1 s: d) v; m
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$007 V  o" C4 j+ z- G: F
  1229. ELSE
    , z# h+ N7 D+ r" V9 Z: e
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    ) ^2 ~8 s& @1 K. k7 h4 q
  1231. .ENDIF# H) D4 \" T5 e1 P2 j. K8 u
  1232. Music_State_Play7 ~" s; K* B' {1 P: Z) y
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    % n7 L- z+ c! s$ g

  1234. & A4 f0 ^, F/ }/ T1 [, w
  1235. ;------------------------------
    * i$ d# D/ P+ ]
  1236. Sound_Bar_Text_Data;声音类型文本: y1 w* `- T$ \% |
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)- I# U3 r/ {% j9 s% m
  1238. .DB "SQ1-",$FF8 O1 r" y' k% M' R! V: }
  1239. .DB $FE,"SQ2-",$FF
    & ^" s. E4 {. G# i& u
  1240. .DB $FE,"TRI-",$FF
    0 D% e0 [2 C+ O+ V% R# b4 f
  1241. .DB $FE,"NOI-",$FF9 E' E, n- E0 i8 ~7 K
  1242. .DB $FE,"DMC-",$FF,$00
    , f! `9 T7 Z1 A5 @) u
  1243. / h" }2 B/ h# a9 S3 \
  1244. .IF Track_Name_Pos
    ( ?4 N6 T& D5 T5 x( F  D
  1245. ;------------------------------: M( b3 R) s; D' n
  1246. Track_Name_Addr;曲目名地址索引
    / H% O% Y" w  [* N. u0 U
  1247. .WORD Trackr_01
    : C6 I$ c% V8 l2 U8 _' W5 v  z
  1248. .WORD Trackr_02
    6 E) K. {: C% O
  1249. .WORD Trackr_03/ B: }: ]6 T4 p; k
  1250. .WORD Trackr_04" W6 K+ F/ @6 |$ I. g
  1251. .WORD Trackr_05  y) f4 o2 ^& B+ D
  1252. .WORD Trackr_06- w) L0 D5 D& h. q/ U
  1253. .WORD Trackr_07# A( u" q% N* L' o# ^  P$ z
  1254. .WORD Trackr_08
    0 Y$ w: y3 N& H) [; }1 W5 M
  1255. .WORD Trackr_09' |4 z) }  {7 w# f7 t
  1256. .WORD Trackr_10& w9 X9 E, @: O$ A9 A
  1257. .WORD Trackr_11
    7 h: Q2 ^: _! P& Q
  1258. .WORD Trackr_12; p7 \6 y0 x/ v  a1 @3 H' M) o
  1259. .WORD Trackr_13
    3 z7 G/ s- a7 |# j8 A& ?
  1260. .WORD Trackr_14
    ! _9 F+ B/ P/ f
  1261. .WORD Trackr_15
    , C2 i# \) Y2 g# I  U7 c
  1262. .WORD Trackr_16
    7 \7 M( {  c" H) K/ ]
  1263. .WORD Trackr_17+ V) m, t2 w& {9 o  }- [
  1264. .WORD Trackr_184 e  S5 F0 t  s. h/ K
  1265. .WORD Trackr_19
    0 j1 q; ?- W' g
  1266. .WORD Trackr_20) M$ J2 i3 v# f4 y8 T
  1267. .WORD Trackr_21. J9 `, z1 M2 N" x
  1268. .WORD Trackr_22; e, D8 m# I, r
  1269. .WORD Trackr_23* Z7 V7 M0 x0 ]7 ^" b% g& y) ?1 g/ A
  1270. .WORD Trackr_24" q0 i# [, `+ ?+ s3 r  k2 {
  1271. .WORD Trackr_25
      v$ U( _; L2 m8 h6 ~
  1272. .WORD Trackr_26
    ! Q  ^# v3 K+ _
  1273. .WORD Trackr_27" F) S8 w. Q% H9 M! n1 j; ?; M+ l2 P
  1274. .WORD Trackr_28' h% x5 O: d3 x
  1275. .WORD Trackr_29
    $ X/ q5 \4 A8 j1 `
  1276. .WORD Trackr_30
    " t: k8 }: B$ _! B
  1277. .WORD Trackr_31
    " Q# N5 J6 Z6 F; W, c
  1278. .WORD Trackr_32+ H. a$ _$ [5 ?7 q1 r, Q+ g
  1279. .WORD Trackr_33
    / f. e0 M; y, O# d5 t+ D. Q+ H, _. a
  1280. .WORD Trackr_34
    + ~* f& G) h$ Z2 K# l
  1281. .WORD Trackr_35
    - W9 U7 ]' t0 P2 [% H) M
  1282. .WORD Trackr_36: H; F/ w7 P! f4 h
  1283. .WORD Trackr_37* V9 O3 P2 r8 O$ ?# D
  1284. .WORD Trackr_38
    3 y: K/ P! W( u1 d
  1285. .WORD Trackr_39; _4 ?0 W  O) ~3 k- t
  1286. 6 o/ r. i0 E/ [4 N  Q+ G
  1287. ;------------------------------
    " H" T  p% [( Q$ H. X, @: f6 E* {
  1288. Trackr_Name_Data
    ( P4 E1 v7 ?( `( |
  1289. Trackr_01 .DB $05,"BGM 1"/ }# p- R+ y9 L) q; J
  1290. Trackr_02 .DB $05,"BGM 2"; J, i( X4 `: d) D
  1291. Trackr_03 .DB $05,"BGM 3". C$ y' `  i9 i1 H; r* x
  1292. Trackr_04 .DB $05,"BGM 4"! [: ^# c# f6 a
  1293. Trackr_05 .DB $05,"BGM 5", ^1 W/ A9 L3 x
  1294. Trackr_06 .DB $05,"BGM 6"  o( R4 W+ l. Y. R" C% Z+ g$ A$ ^5 _* y/ O
  1295. Trackr_07 .DB $05,"BGM 7"
    7 t8 Z" |$ b( u  W: M
  1296. Trackr_08 .DB $05,"GREAT"/ D$ _3 P) X1 V; [9 o; C
  1297. Trackr_09 .DB $08,"BOSS BOM"
    + S: ?: X3 n6 q4 S6 r8 O6 u* B( B
  1298. Trackr_10 .DB $08,"BOSS2BGM"
      d( B( P5 G4 @5 I: N
  1299. Trackr_11 .DB $07,"P CLEAR"
    ) g# A9 P7 J% G
  1300. Trackr_12 .DB $07,"A CLEAR"- y0 Q" |3 q1 ~5 P$ O% `, `0 N& ^  X
  1301. Trackr_13 .DB $04,"OVER"7 z  W' O( f$ W3 X
  1302. Trackr_14 .DB $06,"ENDING"0 U/ {3 X5 e: [2 v# m0 f: `
  1303. Trackr_15 .DB $04,"SUTA"
      p2 ]" |2 P3 z* U2 F; e* j4 i
  1304. Trackr_16 .DB $07,"THUNDER"
    - l6 r: m0 x, r( p# y
  1305. Trackr_17 .DB $04,"SHOT"
    : X0 p, y5 s7 g* o, c: w4 ]
  1306. Trackr_18 .DB $05,"LASER"; t, P" k. l; E6 {0 {0 p
  1307. Trackr_19 .DB $06,"SPREAD"( H+ r+ Y7 f8 [) S
  1308. Trackr_20 .DB $04,"FIRE"
    8 |* B, I: S+ N0 g4 ^, @& T/ W
  1309. Trackr_21 .DB $06,"B SHOT"
    7 O% ?& f* A/ h7 J0 W" S/ C
  1310. Trackr_22 .DB $08,"T DAMEGE"
    ' n' o% |9 n1 U
  1311. Trackr_23 .DB $07,"HARETSU"% g2 G5 ?- W! ]; Q2 l
  1312. Trackr_24 .DB $05,"T OUT"1 L2 n# K1 L) a
  1313. Trackr_25 .DB $05,"Z OUT"
    9 H. [# b( {, u' @; I) q
  1314. Trackr_26 .DB $05,"A OUT"& f4 U* W1 f- Q9 c+ m3 ?
  1315. Trackr_27 .DB $04,"ROLL"  N$ X7 U& U) c/ X1 Z3 q
  1316. Trackr_28 .DB $06,"APPEAR"
    " z$ r5 h1 p% a! e
  1317. Trackr_29 .DB $05,"POWER"
    ' @- @# @( A8 Y: J4 y) D, S
  1318. Trackr_30 .DB $07,"BOKK BK"
      O8 E2 t4 q$ j0 h2 \/ \
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    ' b: @0 S; C* U/ ^* Z8 e: f
  1320. Trackr_32 .DB $08,"BAKUHA 2"8 w: v' q0 v8 y' v$ ~- D
  1321. Trackr_33 .DB $05,"ARUKU"* Z# e) l3 b$ n' [1 J
  1322. Trackr_34 .DB $06,"JIWARE"+ f# P* P( [: C6 Z0 d4 ]* T  J
  1323. Trackr_35 .DB $05,"SILEN"
    ' b2 l- {: `' U3 }
  1324. Trackr_36 .DB $05,"P 1UP"
    & Y5 |* @" ?6 P
  1325. Trackr_37 .DB $05,"P OUT"" ?7 i2 S1 o/ {4 _
  1326. Trackr_38 .DB $05,"B OUT"
    - o# P: g0 ^8 t6 m6 u$ B
  1327. Trackr_39 .DB $05,"PAUSE"
    ) f* }) B5 j" V3 U4 i

  1328. 3 B: V4 t8 }2 I! O+ ]
  1329. .ENDIF
    - e2 a5 i  e- I4 w, O) A: ~' n! X

  1330. : Y+ f/ g. S7 ~( i4 b
  1331. ;------------------------------
    : x& T/ R1 V/ |; y& f; B
  1332. Static_Text_Title_Data;静态文本数据
    9 |- k( I. |9 L$ T
  1333. .DB 12
    3 R% I- b9 k3 ]* I. R: G: K
  1334. .DB "SUPER CONTRA"4 D2 s8 v' r7 \" N4 b
  1335. Static_Text_Author_Data
    , ]  P" Y) y3 g; a& W
  1336. .DB 23: a$ v1 L6 ^; k
  1337. .DB "EXTRACT BY FLAMECYCLONE"3 D/ @" g0 i' @, Z% @  u- z
  1338. Static_Text_Date_Data' P& c0 I/ S, c% @8 Z# K9 e/ n
  1339. .DB 10
    ) s5 u! s  |4 e; Q0 a  ^
  1340. .DB "2023.07.11"
    5 s5 V2 p8 B9 A9 x; y( }& Q" j
  1341. & W9 ]3 G! ~5 D
  1342. .BANK RESET_BANK & BANK_DATA_MASK- p+ B. o; [) f" V
  1343. .ORG RESET_ADDR) N. Q: y* s4 ^7 {

  1344. ( |  j! Z7 o2 v6 k
  1345. $ l4 d0 Y) ?! {" h6 K  Z  Z2 [
  1346. ;==================================================! A" E' G2 d7 i0 s2 A. ?0 @$ T2 I
  1347. ;切到主程序bank
    & ?& g1 x6 E- e' E7 n  O
  1348. SwitchMainBank
    * A- x: Q" y1 v. R9 `
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    4 _7 S: H9 g$ ^! h
  1350. JSR SwitchBank8000% j- L5 z: H% ]! A2 x7 E
  1351. RTS
    2 n& @+ w( o9 m( g

  1352. + u& c! b/ U" X* H+ M1 ^2 x
  1353. ;==================================================( n% f0 J( h, A" O+ x  o$ |
  1354. SwitchBank8000;切换bank到8000-9FFF7 E3 y. w% F' n7 a7 [4 x
  1355. PHA% v5 `8 e# v  P% u
  1356. LDA #$06  g+ `/ h  A9 T' x
  1357. STA MMC3_BANK_CTRL
    & b( S% e- |$ m& q1 u. Q0 p" K  `
  1358. PLA8 I/ O( `1 ?5 F$ R" H8 @
  1359. STA MMC3_BANK_DATA& M5 |, v6 g+ M2 Q1 r$ o
  1360. RTS9 d3 B9 A' Q2 m, t( k( h- e5 k- L
  1361. 8 U5 T  {8 I7 V7 F/ Z# z. x! }/ a3 V
  1362. ;==================================================6 W, P* R/ b2 f+ Z" m; S
  1363. SwitchBankA000;切换bank到A000-BFFF7 N1 j, O5 P# V
  1364. PHA) \2 ^3 X+ p# e6 ]5 U- X7 q
  1365. LDA #$07
    * V4 g7 c; q- O
  1366. STA MMC3_BANK_CTRL2 P( \) l" B8 g
  1367. PLA) h7 p6 K8 l7 k2 V- |
  1368. STA MMC3_BANK_DATA
    ! i7 F, q1 P! p& B- d8 u  [6 m' X
  1369. RTS8 y2 r/ b8 e, b4 A
  1370. 2 Y8 x7 v6 v9 q% }3 ~
  1371. ;==================================================- @6 A; o+ }$ B
  1372. Sund_Bank_Init;音乐bamk初始化6 B) C8 c# o! t! [
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    6 ]9 x5 y7 B& ]* _0 X- s. b6 J
  1374. STA Music_Bank_8000" A! g+ j2 F: {% w  b8 F' T. y
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK9 ?2 e1 x& X; h: V* Z  C
  1376. STA Music_Bank_A000
      L5 \( g( m+ h0 y/ L2 @+ h
  1377. RTS
    0 H, u3 }& @) ^

  1378. ! g" i6 Z$ a, t# M% D6 o9 I9 I% H
  1379. ;==================================================$ H0 g5 Q  u+ K4 }. o; F: S& |
  1380. Sund_Bank_Set;切换音乐bank
    ) Z8 q! s6 y; _* H7 F
  1381. LDA Music_Bank_8000
    % e; {& h, O7 \# j8 h. l
  1382. JSR SwitchBank8000
    0 U  U0 `' H* s- U) Z) C
  1383. LDA Music_Bank_A000
      R0 p6 h$ K, W; ]2 V! C
  1384. JSR SwitchBankA000
    : R- g8 G% Z- [) p( K2 T$ q  |  L( A5 P
  1385. RTS
      V1 F5 J) S. V7 d* O. i+ }, ]

  1386. : B8 c9 T2 Z5 h- h: k( |
  1387. ;==================================================+ Q' F* {3 w2 V9 r
  1388. Sound_Init;音乐初始化7 X9 O5 a  u0 F& Y, Z
  1389. PHA
    - E  H: ~4 ]3 U$ L0 z, M
  1390. JSR Sund_Bank_Set
    + d6 E4 `' U- x* F
  1391. PLA
    , O5 H5 N9 |! Z" G/ e7 Y: v. D
  1392. JSR Music_Init_Addr: R. ~  g% \; Q+ r6 r4 i" _5 h
  1393. JSR SwitchMainBank
    " w3 L3 f3 f" C2 c

  1394. , d9 s/ U% t9 [( J( J
  1395. JSR Music_Bar_ReSet
    , y" ]# a) C& q$ d( V4 b
  1396. JSR Time_ReSet
    # U( d) ?  Y# t% i$ |
  1397. LDA #$008 X4 D% i: N2 g/ S- l" m
  1398. STA Music_State" H' J9 _, @0 Q; ]+ x( B- Z
  1399. JSR Music_Stata_Show! l5 g/ M; u9 s1 x
  1400. .IF Track_Name_Pos: Y# ]" _  F4 U5 Y/ t. s
  1401. JSR Show_Track_Info3 d1 M+ s: ?3 Z  |
  1402. .ENDIF
    + w5 G  }. a, T( `1 \

  1403. / ~" x( b# i% t# }( M
  1404. RTS
    1 E& y  Y3 L; J8 X% e
  1405. 9 N6 U8 k, T: X
  1406. ;==================================================
    6 ^. I  k5 ]( w4 }0 ^
  1407. Sound_Play;音乐播放' O6 O$ ^7 m7 j6 z; p. v  K+ g
  1408. PHA0 z7 ?  G5 X+ V
  1409. JSR Sund_Bank_Set
    * k& T! V( G5 h' Q1 W: e
  1410. PLA
    5 ]) T! F; W  z3 \% {/ L4 r, d1 @' ?
  1411. LDA Music_State0 r1 Y5 \  P- l" P
  1412. BNE Sound_Play_End3 j. [: E4 y0 I& _, L+ N
  1413. JSR Music_Play_Addr" ?+ l8 N6 Z% Y; ~6 q% j8 a
  1414. Sound_Play_End
      R( |1 I& z5 z. B0 [2 ~' w! x
  1415. JSR SwitchMainBank
    0 T2 L4 O1 I  v2 X
  1416. RTS# G# \2 Q: x" R' M* N. m
  1417. " r+ J. k5 w/ ?7 v% p6 y% t
  1418. ;==================================================
    ' o1 j% w$ z4 e2 y
  1419. .IF Music_Reset_Addr% f/ M! i. }+ j/ {
  1420. Sound_Reset;音乐重设(如果有的话)! K3 w4 u- v2 F! R
  1421. JSR Sund_Bank_Set
    1 h; H* [$ t0 j$ v+ U2 N8 I
  1422. JSR Music_Reset_Addr* }8 u! H/ o9 ^" }' |" l
  1423. JSR SwitchMainBank& ~# {2 `0 F& h1 q. n, t0 b1 k+ E
  1424. RTS
    7 @' W; q8 U( T4 K0 H& }
  1425. .ENDIF) ]# |/ g) c6 g- B
  1426. ( e  I2 c) \6 B5 x& L0 W8 K
  1427. ;==================================================
    8 v% C5 Q$ u7 m2 c; W6 e
  1428. MainLoop;死循环/ G9 ?- b( t0 H/ F
  1429. JMP MainLoop
    % n5 N% O' P' [

  1430. " z/ l! y8 _, R; z
  1431. ;==================================================" `; z6 I8 Z: Y
  1432. NmiProgram;Nmi中断处理* z3 g6 L& i- `8 B* q( B6 q7 a: \
  1433. PHA
    3 e) L& x7 F9 [/ b/ O6 `
  1434. TXA* d- i9 A% w1 e9 P' R9 ?: X
  1435. PHA
    ! r( _$ G3 ~4 B" v) W
  1436. TYA) K# R- O+ h& I, o9 u- f0 n, D
  1437. PHA  ^5 c7 Q0 J. @, |# T
  1438. 0 x* e3 p6 A( F9 ^0 e& C0 Y
  1439. LDA PPU_STATUS
    & U# e) E9 T" x. N6 Y
  1440. LDA #$00
    4 Z& j3 ^$ K7 T
  1441. STA PPU_CTRL8 R. v9 A. g; g! f
  1442. ! w% D. q5 `1 Y: [; u
  1443. ;切换主程序bank
    6 O! c+ e1 K% P: R. S
  1444. JSR SwitchMainBank9 \9 P7 d) Y7 @& |: c2 `% t
  1445. 5 a% \2 i& ?3 e* F; E
  1446. ;NMI处理
    " t, ^- p( B1 [3 P3 p7 {) t
  1447. JSR NmiProgramProcess
    3 m6 Y' i4 j  F9 g" D

  1448. ' H+ c) f0 J: s+ ]
  1449. Nmi_Proc_End% A3 R! h+ k1 k2 O- w! K
  1450. PLA; y8 l& F/ h3 |9 S+ z
  1451. TAY$ c3 q$ G0 _) t2 G; ]. w' D9 a
  1452. PLA
    7 w- r; c# t& f
  1453. TAX: z$ C6 v5 W% |. M8 q7 u7 }1 r
  1454. PLA6 ~! H' s0 g% w
  1455. 5 o3 |, B; H: p$ u
  1456. RTI
    * F% A$ i* o. t& H
  1457. # N- {; n, ~& t- U1 j  L! W+ f
  1458. ;==================================================
    ) k: ?. c+ @; ]9 e
  1459. ResetProgram;重置中断处理
    : e, X3 ^/ @+ R) E( @+ o
  1460. SEI. Y' ^& r0 r8 ?3 U% x! I
  1461. CLD; l' t# s  q/ q% ]
  1462. LDA #$00) E7 c- b5 K% V$ C3 b* K6 q
  1463. STA PPU_CTRL2 E* C: E' f/ u2 X" m. Y
  1464. STA PPU_MASK
    4 G; R- ?: d2 O5 g

  1465. - }/ Q  ]- o8 N0 a7 F0 p' e
  1466. JSR SwitchMainBank  p8 H- _$ V( R
  1467. JMP ProgramBegin
    7 `& G& {) u2 M- o2 E8 }

  1468. 3 _. H% u* y* o# j
  1469. ;==================================================" |3 W- f3 ?: s8 K) G% L
  1470. IrqProgram;Irq中断处理
    1 z9 v6 N* C1 s/ [6 l
  1471. RTI* G5 p* _& N! u" ?0 t
  1472. & s7 ^* M1 C0 ?: g* b
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ) k* M( D6 o" B% ]; i, g
  1474. .ORG $FF80- s( x' w, G0 D$ X
  1475. STA $4000,X+ K+ A% ~" P6 ~% m/ a+ s: A
  1476. STA Sound_Bar + $00,X1 A" s6 ~! H8 a, A; p) j
  1477. RTS$ y8 X7 ]3 K5 K

  1478. & H! h1 X) W" n
  1479. .ORG $FF88( K0 v' K0 g6 L  K' f6 m6 C
  1480. STA $4000,Y) p9 I+ i+ P4 S. O( T& r7 Y) G
  1481. STA Sound_Bar + $00,Y
    8 n( G6 Y! k& a: @+ c! f7 q
  1482. RTS1 k4 b: m" w6 [/ L; ~9 B% x% W

  1483. 7 r2 v* l4 R5 f$ f
  1484. .ORG $FF90& p/ P2 Y5 M9 [4 x
  1485. STA $4004,X0 @* ]4 ^, J4 Z1 f8 m* _
  1486. STA Sound_Bar + $04,X) F5 V1 j; I4 m2 k7 z0 o" j0 {8 n, K
  1487. RTS# F* K/ \/ G& h- G7 w$ w

  1488. , E* N' {& {# b9 l. j) D0 F
  1489. .ORG $FF98
    8 X% f+ P  a2 J* A
  1490. STA $4004,Y
    5 m( K8 d$ |, w% L* }" w2 ?3 W& @8 D3 y
  1491. STA Sound_Bar + $04,Y
    ' T2 S3 m: `& k- B( X
  1492. RTS5 g& d! g0 ]% I$ R4 g. e

  1493. 8 H  T: m6 A, h. z* x
  1494. .ORG $FFA0
    7 Q6 |! U2 H4 G( d- ~& ~7 ?
  1495. STA $4008,X
    + D0 ]$ O  {9 }+ t' \, B: l
  1496. STA Sound_Bar + $08,X
    6 I+ y6 T0 K& |9 L: ], @" X4 n0 }4 p2 ^
  1497. RTS
    : L" G1 T6 C/ m& {
  1498. * N& P; I% _0 i: J* U3 W
  1499. .ORG $FFA8
    ; w: Z9 i( o) v' R3 T7 ~9 d/ Z
  1500. STA $4008,Y' ~  q3 W; K2 ^% ~
  1501. STA Sound_Bar + $08,Y! G% v# n" {- D* Y/ c' [2 v/ ?$ @
  1502. RTS' O- ?- E8 t0 d6 Z% R' V

  1503. - F$ @: `' S+ a1 @- O
  1504. .ORG $FFB09 Y& |; b0 n! j% O
  1505. STA $400C,X
    $ w* z- \9 u- y4 [/ a9 M' D) y% b
  1506. STA Sound_Bar + $0C,X
    / o+ _: T7 {0 z: ]- v7 V
  1507. RTS0 M# A; M- F* M; q; P
  1508. # h( @- }6 N- x" r/ W
  1509. .ORG $FFB88 W0 S$ p9 N$ g  E
  1510. STA $400C,Y+ @. \# I) {" p( V: x
  1511. STA Sound_Bar + $0C,Y
    - |  g3 @! a' l8 [
  1512. RTS# w0 e5 |1 ?! v% a
  1513. 4 G, P9 `* F7 U. A0 a6 L6 u6 ?
  1514. .ORG $FFC06 W3 M' S! s, u( O1 l. G. Q
  1515. STA $4000- S/ J$ L" o4 V* w  U
  1516. STA Sound_Bar + $00( L$ `; i' N; _" ]) @7 X+ o& R
  1517. RTS
    # G- X# o& K, ?

  1518. & @0 W! z' A% K# t) Y8 N
  1519. .ORG $FFC8
    6 E( P: _1 M8 L- L# Z. A5 v# O  j4 n
  1520. STA $40041 _( W, M- Q' m+ f+ v5 [, T
  1521. STA Sound_Bar + $04
    4 K: v, v. N" {9 \3 Q, o# q4 e4 U
  1522. RTS! K9 M) _' D8 z/ u! F
  1523. ! r3 n( y5 R3 ~- a2 W) j
  1524. .ORG $FFD0* a2 ?% ~, H: P2 n& \% s3 I- L
  1525. STA $4008( p8 P: r. V/ K+ F) j$ ~9 i& K3 d
  1526. STA Sound_Bar + $08  K$ c; x% i7 }8 T# e( H9 t5 i
  1527. RTS
    ; \. W0 W) E, p( d2 ^7 O& o

  1528. % P$ [' `, z" _  N2 p' P( g
  1529. .ORG $FFD8
    ( I/ T- @. ?. T/ n! `  }' Y  M$ T
  1530. STA $400C
    1 R. ]2 i! P/ T$ J; T" p
  1531. STA Sound_Bar + $0C
    $ Y, i  k" B1 w$ u
  1532. RTS
    ' I3 C+ p& d, P% h
  1533. 8 S8 |) z, i% ?( O% v4 ?
  1534. .ENDIF. Y+ E+ H' O7 a; q

  1535. + d  A( ~* L& m( ^2 k/ z- m  K* G2 }: K
  1536. .ORG $FFFA
    ' p, A' x$ c8 G$ t
  1537. .WORD NmiProgram
    - N% H& ^5 e5 B4 o! D& D" b
  1538. .WORD ResetProgram: U& I) _/ n5 M
  1539. .WORD IrqProgram
复制代码

; S  S$ a; M' {' t4 C8 X) w' y
0 s+ u3 T/ L% B" N7 G1 E/ l+ [
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1304 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3302 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-27 06:53 , Processed in 1.076172 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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