EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 1 T. l& d% s; m
; B' K& i4 j8 b4 {5 b
1.魂斗罗; J, O' |3 ]8 [% l1 h7 n
2.超级魂斗罗
3 G. Q8 e. \: o% t( M3 p8 h' F' j3.赤影战士0 E1 D7 H! {( q) b2 {4 ]0 ^' u
4.忍者龙剑传24 r4 o: W4 W8 x

- Y! ]  H8 e, v" }6 e! c
" r9 D3 H2 Z1 I: S7 [: ]! n. ^" y' u0 D' @$ ?5 y

( j8 x2 u' b0 A' ~3 Q6 {源码:7 N+ {$ H9 i1 i& ?, }
  1. ;[FC音乐][播放器模板]
    3 ?( w, n3 Y5 w! \# k3 K! U& O$ n! ]
  2. ;FlameCyclone 20230710' I" h7 g9 P0 p9 F( r" g" l' m
  3. " s; j) n% ^8 h; M0 t. L2 P- W2 Z
  4. ;文件头3 Z. q6 R* i! G/ @; ?  {8 J& q
  5. ;======================================================================
    % Z+ ~" V: r9 A- I' k1 [3 @
  6. .INESPRG 4                                              ;16KB PRG 数量  p, `8 e( o" ?& e6 H  ]
  7. .INESCHR 0                                               ;8KB CHR 数量
    0 G5 N$ O; ]' b
  8. .INESMAP 4                                                   ;mapper 4
    9 H4 s2 C& ~  T% W5 D5 \# H8 y
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    # z% V# N  B* n, Y* J! X6 }/ n: h
  10. 2 I( b$ @! ^' y7 y9 f
  11. ;==================================================7 \, |! E1 G1 p8 Y* d$ D0 F
  12. SOUND_BAR_SHOW_ENABLE       = 1& n9 Y% t, N( n8 U0 m7 p* v+ E( T3 |
  13. ;==================================================
    ' z- i$ u6 k0 i1 W2 }
  14. BANK_DATA_MASK              = $07. \& J- I5 U9 k
  15. ;==================================================8 w9 B5 J: \6 E( ]4 Y4 Z  o5 j" ]8 `
  16. SOUND_DATA_BANK_0           = $00& s5 P# _) c% Z4 ?( f
  17. SOUND_DATA_BANK_1           = $01) M( ~( K" L) o/ h3 i
  18. SOUND_DATA_BANK_2           = $02
    7 S: H  r  `" t( O
  19. SOUND_DATA_BANK_C000        = $06
    - t) e4 e6 ~# y8 R/ N  e
  20. # h3 M  l: w% T9 G/ w) H* y, Q; x& {
  21. ;-------------------------------------------------
    - U* r9 x) w$ E. M2 j9 k% o# ^
  22. CHR_DATA_BANK               = $04+ Y0 t0 U) n: V& u
  23. CHR_DATA_ADDR               = $A0004 ]- b  c/ q$ ?
  24. ;-------------------------------------------------1 [4 B5 w; {/ j5 W/ J4 y0 f
  25. PROGRAM_BANK                = $05$ _# L# h8 K  G  w8 S. u: v+ a$ E
  26. PROGRAM_ADDR                = $8000" d8 d9 q; B/ L; Q) N0 a
  27. ;-------------------------------------------------" |) r! T- r: i/ g* y: j) X
  28. RESET_BANK                  = $07
    / @  o5 g" m0 d9 D4 x' B3 g
  29. RESET_ADDR                  = $FE00
    * u5 v% r" T' d7 n/ V) `5 D/ p
  30. ;==================================================) \1 H5 V5 R8 l2 @
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    : m7 I8 B$ ]; n. z; z2 a  I
  32. Music_Play_Addr             = $813C ;音乐播放地址
    8 Y- N$ Q1 j4 T; w
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址- e6 B6 I& b& _, S& Y7 w5 B, s% w
  34. ;==================================================
    4 [! w/ _' ~1 T7 L  z/ d* _1 [# r/ h
  35. Music_Song_Total            = 039  ;全部曲目总数; v' b0 |: B" o4 b% R9 `# b
  36. Music_Start_Song            = 007  ;初始播放曲目
    % H( D; A+ B8 s. t+ J
  37. ;==================================================- N( G/ Z" V5 i: D' p

  38. 3 z- U% r0 f. w9 V3 c* g; o- ]
  39. ;==================================================
    ; v( W  E& k3 Z& |
  40. Title_Text_Pos      = $210D ;标题文本位置
    / Y8 G0 N) @: M- R) c* x
  41. Author_Info_Pos     = $2284 ;作者文本位置% J" f4 t+ K( X/ v
  42. Date_Info_Pos       = $22CB ;日期文本位置
    : N& [, ]6 F% k1 ~. E* C8 p" s, }
  43. ;------------------------------
    + I' c8 h$ a& [7 x
  44. ;------------------------------$ t! o* O9 ?3 x3 g+ E
  45. .IF SOUND_BAR_SHOW_ENABLE
    7 u& N# m) z6 H+ f9 n* F4 X
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    , q5 |$ A6 ?6 E1 n
  47. Play_Time_Pos       = $21F3 ;播放时间位置6 H- e( y/ J$ _( @" v
  48. Play_State_Pos      = $2233 ;播放状态位置: G( m& K( T9 Z: O0 V/ F, I: C& O" h
  49. .ELSE
    4 g, o) s+ ]1 X% u# C' z* Z' J  h

  50. ( n" ]5 ^; ^% f7 \0 q5 ]
  51. .IF Music_Song_Total > 99
      N* j: V2 X7 f* k' F' y/ a$ t
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    . x2 D# N. g8 y2 }& K
  53. .ELSE
    % h( J2 z8 Y, P: r' H
  54. " f+ a. \) L- m8 e0 f2 s! {) m9 ?
  55. .IF Music_Song_Total > 9
    7 B% c$ \4 L. F. }
  56. Play_Index_Pos      = $21AD ;当前曲目位置+ B* l0 v& \3 k8 \! F
  57. .ELSE
      ]' Y3 g7 }  V, @* G
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    0 b  U# s5 \% ?8 i" j- T- _
  59. .ENDIF
    ' C# m$ o+ W5 h7 ?6 ]
  60. 8 Q7 ~7 n: Z0 v5 b7 @1 |
  61. .ENDIF
    + T1 Z( x# I7 ~" m/ D( V# C) m

  62.   y: u  u( y4 J+ S' }
  63. - V; l2 d1 S/ I1 W
  64. Play_Time_Pos       = $21EC ;播放时间位置
    , C8 |3 u. A' w9 M/ D
  65. Play_State_Pos      = $222C ;播放状态位置
    " j4 Z! M, o' ?& Z
  66. .ENDIF
    : W! C5 H+ {/ y1 E# S
  67. ;------------------------------
    3 ~( Q) t: `5 ?6 r% i/ W9 E
  68. Track_Name_Pos      = $216B ;曲目文本位置
    " W' U1 V" U; |/ s3 H; z8 r
  69. Sound_Track_Pos     = $21A5 ;声道文本位置, f& a, F! j7 K2 K  M
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    7 R* O9 f0 t5 z+ L) F
  71. ;==================================================# {2 F9 }! r6 `7 r
  72. Scroll_X = $00- D- y$ e6 B5 r0 x, Y& \
  73. Scroll_Y = $06$ y/ ?5 @$ T0 v# T
  74. ;==================================================& F% l3 n) @3 p# }+ P) h
  75. RAM_Cln_1       = $0100
      X. S& d$ l9 Q6 K  N' b: D
  76. RAM_Cln_1_Size  = $801 w" ]5 |* x6 w1 M) R
  77. RAM_Cln_2       = $00E0: P2 w7 M4 y  ?1 i: i% O! k
  78. RAM_Cln_2_Size  = $203 U! X; O2 u$ E
  79. RAM_Cln_3       = $00E0
    ; ?" o4 o% R% F9 A( G; t9 \
  80. RAM_Cln_3_Size  = $20
    0 o! n7 T$ o; V6 Z! j" o; P+ P
  81. & H; M1 G6 {/ K4 {/ f( F6 V
  82. ;==================================================
    ) r5 A" T/ k. W: z  p9 Y$ o
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    4 v  Z4 K. J6 |' {3 @" s
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    7 P$ c5 |6 F; j6 [8 V
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位- _1 ~5 F7 t! H5 \$ B) |
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1( A5 X. N$ ?' G) P$ a
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    5 A, I! L0 q  |: e6 h" ~/ [
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    ) o' c$ E& H8 n2 c; b7 }3 g
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加) g6 P  ]' C/ B  ?- D
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    $ M2 C. H1 r$ K5 [% e
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    * h5 Z; g( e4 {6 }
  92. APU_STATUS              =   $4015   ;声音通道切换( b. Z* G& A1 k6 }+ K3 z. N& N
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    / q1 V0 u/ M& C# n3 Y
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    # o0 i9 p+ V) U3 n5 \5 Z5 Q; @6 J
  95. ;==================================================: h" c) l) x% Q
  96. MMC3_BANK_CTRL          =   $8000
    1 X% w: e1 d4 G6 ~2 m6 b
  97. MMC3_BANK_DATA          =   $8001
    ! s2 g! X: c0 o% b& M, s& z5 }
  98. MMC3_MIRRORING          =   $A0006 R" l; O2 H9 T
  99. MMC3_PRG_RAM_PROTECT    =   $A0014 M" r# y% |0 j
  100. MMC3_IRQ_LATCH          =   $C0004 S! S2 S* l$ ^! F( W2 J7 [
  101. MMC3_IRQ_RELOAD         =   $C0010 O; v  |# K. j6 I$ _5 N& U8 T
  102. MMC3_IRQ_DISABLE        =   $E000
    , q; {2 R% z. g* [
  103. MMC3_IRQ_ENABLE         =   $E001
    ' Z! Z% P! E% w3 ?3 ]3 v' R' d
  104. & Q. [& W; K  _& }% [6 t2 Q* n8 P# e
  105. ;音乐数据块
    ! w0 z3 w+ S6 J7 H* F/ k6 X* u  n
  106. 8 ~8 b- v8 G/ Y3 w2 B- e+ s2 B
  107. ;======================================================================
    " |/ f# \9 ~# ]! {9 G( z' Q9 ?& a3 L
  108. .IF SOUND_BAR_SHOW_ENABLE1 R( B, J: F( v/ o' R% R4 U
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    % J; l1 t% L) L3 B4 r% E
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    * R) g* S9 k+ t  a
  111. . A( N4 g2 w) l+ k/ [, N
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ( y3 s* }' D+ I1 F; d
  113. .INCBIN "sound_bank_bar/music_data_1.bank"* A1 L, I3 z+ l( {7 I2 w
  114. # n' A5 n% G' t
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK' `8 O6 p) Y0 u+ _' G. b
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    & E# T: o+ y5 A4 ^, w+ S7 a7 ~

  117. 5 o3 l# n1 q( _
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    5 C' T7 ?. ]: q+ G) z5 k) ~
  119. .INCBIN "sound_bank_bar/music_data_3.bank", H, m+ d0 H8 v, o- r; s1 ^

  120. , @5 N" g( V: n/ [
  121. .ELSE
    % `! \" K) o- k. ^( A$ L
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    $ n$ t6 F9 d& U( ]/ ]
  123. .INCBIN "sound_bank/music_data_0.bank"1 g+ H% }# Z4 D! V$ s! N! E; @
  124. ' }1 }- V/ M. P5 }& E% U$ _
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK' g) A* ~/ u! D1 ~- p
  126. .INCBIN "sound_bank/music_data_1.bank"
    3 t2 e" B7 o" j' f( H3 l' Z  c
  127. # o+ t9 _) m# T0 x0 ~
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    * b& Q# U" W1 O( Q4 K) C
  129. .INCBIN "sound_bank/music_data_2.bank"! B7 C  B0 [. H% U8 Q; u1 F! a

  130. % a- ]; k8 d! [8 m5 p* J" D
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    $ w0 k$ u% ^) ?) n9 g/ X
  132. .INCBIN "sound_bank/music_data_3.bank"2 s" e5 P7 |- \- d5 O0 M
  133. .ENDIF
      L- @9 o+ r$ B1 c( X9 M0 s; {4 A

  134. 8 U8 [/ j" T. g0 R2 c9 K! F9 R
  135. ;CHR图形数据2 P3 j7 w" B$ O' @( q  ^/ J+ m
  136. ;======================================================================
    9 K1 E  Z! ~7 b
  137. .BANK CHR_DATA_BANK
    ; P4 x1 a# b1 d. ^! d) C5 K
  138. .INCBIN "chr_bank/chr_data.chr"
      n! G& [7 Q: ~* y# R7 [
  139. ( N6 t) W9 r7 _, n! a, ]/ _
  140. ;==================================================
    1 ]$ _, L3 f; k" |
  141. PPU_Addr        = $0300# |$ j/ R2 Y2 {& k% y5 ~
  142. Palette_Addr    = $03C0' y- j* m. i) j& }% F
  143. Sound_Bar       = PPU_Addr+$E0' I8 J' v4 N  q4 x- W
  144. ;==================================================7 y& G4 j; r- H  }3 F
  145. Palette_Update_Addr     = Palette_Addr+$0D
      B  r# F( W: S* Q' Z* C
  146. Palette_Update_Max      = $2C* V) q- b7 v+ L6 o- _% {8 E' j3 F" O
  147. Palette_Update_Min      = $21; @( d$ C% f0 U
  148. Palette_Update_Interval = 60
    2 @: H3 c. e. M8 V
  149. ;==================================================
    & _! X) o* s# b/ o
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    ! y* s, _# M- |" T
  151. Screen_State        = Sound_Bar_Cnt+$01
    ' j2 z% D7 t7 ]3 p) v; P* ^
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    9 P! ~8 Y8 {: n! j& U: `" U& B
  153. PPU_Addr_H          = Sound_Bar_Cnt+$037 ?! b9 Z! S* D" }9 }- j
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ( e5 }3 C1 D" o1 C; I6 i
  155. ;==================================================8 b% c# P; L( y" ^
  156. Data_L              = $70
    2 u' T" c0 W. |. o0 U
  157. Data_H              = Data_L + $01
    * v; q/ F+ }; c% Z* z
  158. Data_Cnt            = Data_L + $02
    8 ~' R9 d  i* M% ^: W- _8 `; |
  159. Data_Buf            = Data_L + $03; i4 \( ^& }5 z, N  y2 B7 V0 h% ]
  160. Time_Wait_Cnt       = Data_L + $04$ w& r' {& D# y% j8 F9 R( q
  161. Palette_Wait_Cnt    = Data_L + $05
    # O+ [. x% c! w8 s5 y
  162. Palette_Update_Flag = Data_L + $06# d5 T4 v9 g4 S% K% Y/ L+ Q
  163. Show_Track_Name     = Data_L + $079 \  [1 Z, K, a
  164. ;==================================================
    3 x0 N0 m2 I; P6 s; _
  165. Key_Keep            = Show_Track_Name + 1
    8 B2 P5 w* q$ g# I: z
  166. Key_Once            = Key_Keep+$01
    5 M, p2 u6 S* g4 O4 p3 i3 [
  167. Key_Kemp            = Key_Keep+$027 y3 k  s! B: C' [; a  ]
  168. Key_Temp            = Key_Keep+$03
    # e7 f; s  U# D" P
  169. Key_Getv            = Key_Keep+$04
    9 e' P* \, D# b, U0 c' d  |. v
  170. ;==================================================
    0 C0 W5 j$ V$ v% {) K* e- V
  171. Music_Cur           = Key_Getv+$01
    - F0 j! q$ z' d! B5 b
  172. Music_Last          = Music_Cur+$01
    & v# Q  @3 U% B  b. A( `5 x0 P% n) B
  173. Music_State         = Music_Cur+$02
    . m! C* h% R  N3 I7 y0 ^8 j
  174. ;==================================================, D- _8 K  m9 T' j
  175. HEX_Data            = Music_State+$01) b- m" E7 r( u1 @$ v/ t
  176. DEC_H               = HEX_Data+$018 y9 L! z# g$ j' j2 b
  177. DEC_T               = HEX_Data+$02; R* v; h: S/ i7 O0 C
  178. DEC_L               = HEX_Data+$03
    3 G. k" r& w/ @# ^# Z
  179. ;==================================================
    7 i) Z/ }; h2 T! T& `
  180. Time_S              = DEC_L+$01$ F1 K7 K. ]# d. D. y( M
  181. Time_M              = Time_S+$01" o) i9 Z% e% G6 i+ Z
  182. Time_H              = Time_S+$02
    5 c8 ]1 k2 y" C1 W% @6 k
  183. Time_Cnt            = Time_S+$03
    . P) s) Y5 t8 A$ `3 m8 j% {
  184.   E0 u: C3 }" ~% @1 j- R
  185. ;==================================================* n# v0 u: L8 c0 F) @) u3 m: W9 R
  186. Music_Bank_8000 = Time_Cnt + 1
    9 v: ?  {, f6 g
  187. Music_Bank_A000 = Music_Bank_8000 + 1: Q" Q( s1 U; `8 T+ Q! v5 w) W
  188. ;==================================================
      r8 ^* O/ e' r( I, I' Q) y

  189. 7 m& c; h4 e& T: |& w# k0 G0 Y
  190. ;======================================================================
    ) X0 `) c* w, x7 H$ ^7 ^& w
  191. .BANK PROGRAM_BANK0 l" x6 M+ Y3 Q7 e- \/ b/ }
  192. .ORG PROGRAM_ADDR+ _8 R% [. b5 e/ J1 Y
  193. 1 u+ {# t5 b6 P7 ~2 C
  194. ;==================================================& x0 Q6 n8 M" G# o% e9 n+ [4 m
  195. NmiProgramProcess;NMI中断程序处理
    4 ]8 ]3 E( A6 X/ f  `( O" _
  196. ;处理PPU图像% e* P& j/ d4 }1 S8 U3 Q3 K" i
  197. JSR PPU_Proc
    * m/ k$ W6 d& ^# F

  198. 4 f; [, T" P  a/ T2 d, e
  199. ;启用NMI中断
    1 O4 x" q0 k' e4 Q' k+ n
  200. LDA #$80
    ) x4 o9 d1 f) G- s, q; x9 _6 x
  201. STA PPU_CTRL
    / x! C* p8 ~' d3 v
  202. 5 }1 E, c0 a% s5 I; y5 T: {
  203. ;更新调色板$ n7 k# J+ e/ P% [# T5 s
  204. JSR Update_Palette_Data
    ' B3 V! l& l1 c

  205. 6 B5 D2 B  L  i% S- H- b; W! ?
  206. ;显示时间(缓冲)
    . l5 ^3 V& T2 X& V7 l; \7 _8 y
  207. JSR Time_Show: k! R& o. x# }) h3 l% p8 [2 Y+ F, U5 a
  208. * l& h4 K5 b* m# c
  209. ;播放计时* V0 w) Z6 Z2 _1 Q. O
  210. JSR Time_Count
    $ o9 b% `: y& u. u9 ^. p$ i9 ]- N

  211. 3 M2 b8 T6 C0 t% H( ~
  212. ;播放声音- ~5 N1 M7 a9 H8 t& L3 \. s
  213. JSR Sound_Play
    ) \* u/ ^9 P! N; k

  214. 5 t4 e9 _( V$ k9 H6 S# {' q; d2 t
  215. ;切换音乐(手柄触发)$ M+ D0 R' B/ t! C+ _6 N5 I
  216. JSR Music_Switch( i8 C  ?, U, W: m  t( Y6 T1 y" o
  217. + m  T7 z% `" r- |) R8 b( w; G1 [
  218. ;音乐显示(缓冲)
    . X( R: o% Z9 P
  219. .IF SOUND_BAR_SHOW_ENABLE
    0 H# @/ c  Q' [' `  ~
  220. JSR Music_Vision
    . S' F' m6 B0 e+ K- R
  221. .ENDIF+ p9 Z8 d* t' G( G1 n7 W3 o! R2 W
  222. 5 w9 E7 u+ }( U5 u
  223. LDA Time_Wait_Cnt
    7 |9 _, b2 f8 d* s* K" \# h  o
  224. BEQ NmiProgramProcessEnd& n: M; Z0 [& Q! c
  225. DEC Time_Wait_Cnt0 }; r/ N! U+ J* L* j' E
  226. NmiProgramProcessEnd
    & u8 i- T+ U! ]: V# o
  227. RTS6 x+ j. J. ~5 Q7 z+ d$ M0 b% u! ~
  228. ' e9 i( D  r3 @% |
  229. ;==================================================
    2 K/ E1 P/ e3 j, o; E  [: v4 v4 S" s% M  s
  230. ProgramBegin;主程序3 P. S' D1 p8 K# M' _
  231. LDA #$00
    $ p% x: S# W5 P; K9 @2 i% F5 ~
  232. STA PPU_CTRL
    ) Z4 [4 y, V$ h/ _0 e
  233. STA PPU_STATUS1 n5 E& d% w$ T5 i2 f9 ]
  234. STA PPU_MASK
    ) M) k/ M  y7 W9 C& B: Q  `; l; C
  235. STA APU_STATUS
    , H& }' e, e  k/ O  H
  236. STA PPU_SCROLL* l. ]; L& ^" R  \& L: J
  237. STA PPU_SCROLL' ^3 \' D& M. p/ \" p
  238. LDA #$C0- U0 c1 @8 ]7 h8 ?
  239. STA JOY2_FRAME
    0 m4 y4 J8 J# h' {
  240. % z2 `1 s( D8 y# z, ?- Y2 U: ~' C
  241. LDX #$FF
    ) Q2 U7 O+ D3 w: D9 u- [
  242. TXS
    . C5 }+ h3 L# ^
  243. LDA #$00
    & G9 C* @& @2 [3 Q
  244. STA PPU_CTRL
    8 I% ~+ b8 j( y9 J, Z/ X8 V
  245. STA PPU_MASK- g/ Y6 }/ {+ z# \+ G1 x* z* Z3 F
  246. STA MMC3_IRQ_DISABLE
    ; ?6 l- h/ l5 H# E9 n
  247. % i  x2 l! Y& u  b# w1 ^) g! D7 I" h' X
  248. ;==============================
    + g- z" z9 {3 n$ N: S
  249. ;调色板清空
    # _" X9 t2 O; W" }
  250. LDA #$3F- T: H9 }/ v0 B
  251. STA PPU_ADDRESS0 }+ p# W9 m9 \/ A
  252. LDA #$00
      j" u% Z& H3 w6 Z; ?0 n
  253. STA PPU_ADDRESS
    - V' Y2 r( c6 f% j4 V
  254. LDA #$0F
    . ^( a/ S( n% p. s$ A
  255. Palette_Clear& h# n" Y7 {% g: _( ^. i
  256. STA PPU_DATA% F5 y8 H/ t4 W: P( B
  257. INX
    $ c+ O0 g8 i5 @- a  Q8 ?9 X
  258. CPX #$20: k, C4 B# B+ A2 e8 K8 H
  259. BCC Palette_Clear
    & d. `- _8 G/ N6 E4 j* y) y
  260. LDA #$00' |' {  X, c: s( G1 _  I
  261. STA APU_STATUS$ I8 y! W5 k3 x+ C- e. t3 v! ~
  262. ;==============================
    ' X: d9 t/ S# f" {; [7 ~  m' T' N
  263. ;初始化背景调色板
    9 W$ \8 K# \$ D1 x- A$ |. h
  264. JSR Set_Palette_Color0 }. p8 n6 Q6 h, `% s1 Z8 m7 y1 I
  265. JSR Set_NameTable_Attributes
    & S* c. `5 [4 P) @" @5 x2 @

  266. ( A4 b  r9 Y3 S  C* Q- B
  267. ;==============================
    . s/ X7 I  K$ b
  268. ;RAM初始化
    0 r, ?' q' v: I! \3 t
  269. RAM_Clear_All8 E4 B$ R5 w) B% i6 x, o' i
  270. LDX #$00
    - {5 C) w1 ]8 Q
  271. LDA #$00
    9 M- e& d: }4 |
  272. RAM_Clear_All_Start/ l* U; i+ J9 p# E2 R7 Z# c+ A6 S
  273. STA $00,X
    ' Y+ l% f# e+ B8 `) M
  274. STA $0100,X% k6 q' ?) k  ~9 G7 I
  275. STA $0200,X
    " U$ g( b4 }7 z) i! b' J" U& U3 l
  276. STA $0300,X
    3 ]# A/ i3 `) w- B% v* T1 m3 G+ }
  277. STA $0400,X
    # c  L2 d* U6 K) m# D. \
  278. STA $0500,X
    $ f" u) k6 V; ~# J
  279. STA $0600,X, w) p7 d6 F5 c& _
  280. STA $0700,X: ~2 r3 S9 a7 M+ {2 Q% e( ], B  f
  281. INX, D1 {9 ]1 [+ H% ]* ^2 O1 v5 R7 M! h
  282. BNE RAM_Clear_All_Start
    ! Y7 q+ O+ ], y$ I7 w3 U
  283. ) J% V+ D5 j% n) }( M$ g6 [" @* B
  284. JSR VramInit
    & _4 @& X% x8 |( z' J" v
  285. JSR Init_Palette_Addr
    6 z* W+ B8 x* R" x

  286. ) L0 y! [$ C/ r7 z. |0 [4 P. l# Q
  287. .IF Music_Reset_Addr. N& F( g4 b* c
  288. JSR Sound_Reset
    - Y. L6 b: {' }" d5 L$ d
  289. .Endif
    ; }+ g6 Y! [. K, S, m2 A& d7 |) a

  290. " }* K; S0 M, |
  291. LDA #Music_Start_Song-$01& r+ a5 Z; D$ Y; j5 i: \# e
  292. STA Music_Cur
    / ?0 J+ W- `( d* u3 k

  293. & L8 G8 G% c- K, H2 F! S
  294. JSR Show_Music_Text
    ; ^; k- d: J/ m% j" h5 U2 c

  295. . a9 y& I; J2 g
  296. .IF SOUND_BAR_SHOW_ENABLE- Q9 k8 Z$ ^  c6 i7 J0 ]( v
  297. JSR Sound_Bar_Text_Set
    7 m) v6 @8 k3 o1 D5 `/ p& l7 t5 P& G
  298. .ENDIF9 Z: n& X1 r9 s# F4 C' e; y
  299. : l0 i0 c: B- p# U
  300. .IF Track_Name_Pos! m; Y% y! G! P$ Z- E
  301. JSR Show_Track_Info
    , b& i- Q& s; P
  302. .ENDIF
    * ]  [) @$ e: ]# j( j: b' ?

  303. ' Z$ f5 z( h: g! ?, W' K  f
  304. JSR PPU_Proc% N5 M6 G# V+ I- F: P7 `1 c% e

  305. / D5 Y. a# Q, n/ p1 }- q
  306. LDA #$0E! O7 Y3 ?3 I2 A8 ~$ x1 k. S
  307. STA Screen_State, W4 A; N$ g$ k
  308. 9 F0 V; m% g& Z, T# \* u7 o
  309. JSR Sund_Bank_Init% g# u$ f* h! [2 ]+ c& F, b. Z

  310. ! F& p' n5 Q: s/ h, x6 K  J
  311. JSR Music_Show3 K, m# A- }  e; o& T
  312. JSR Time_Show
    : j4 Q& F+ t, r3 _; [0 r
  313. JSR Music_Stata_Show
    ' t; @8 c3 K+ x3 `1 v' S$ S& Q3 m
  314. JSR Time_Delay8 f9 V7 ]- r1 Z7 N4 C9 |4 M" C

  315. & u' p& G- l  h( |
  316. / T' @* {" a2 c7 H
  317. LDA #$80: m% U) \  l" q7 {% I' l
  318. STA PPU_CTRL% {  r3 G- W: U7 }
  319.   |, |0 Z+ c" W) I
  320. LDA #$20
    * T+ M0 {* D8 `* t' n5 L! R% a
  321. STA Time_Wait_Cnt+ r7 Z9 K, x+ j) a  x6 B' s; D$ J

  322. . @) m. q$ ~, [
  323. Wait_Time_Over0 F+ f# g# h+ a4 b. V! P& O* f
  324. LDA Time_Wait_Cnt1 J9 X* K6 c! ?6 R0 j" J6 D
  325. BNE Wait_Time_Over
    1 m/ D% n1 V0 X& W3 {0 b- H2 |
  326. 4 x1 m: p! ]6 ^4 }+ G! l
  327. LDA #$1F
    , }* q# S6 U; I) \" A
  328. STA APU_STATUS1 d, @6 G  h- I" i9 t
  329. LDA Music_Cur1 Q$ ?3 _' @1 I4 S, @6 k
  330. JSR Sound_Init/ X0 t- z2 _4 B! Z8 z' E, j  ]
  331. $ @8 Z# ?' B6 [6 Y9 M% h
  332. JMP MainLoop% i8 }0 x& j7 x3 u. f

  333. 6 l4 S2 V/ }0 @9 W
  334. ;==============================
    9 I! a4 `( Q) J% t6 f
  335. Time_Delay;延时等待
    ! d6 r" G+ h3 u; t# r/ a$ C
  336. LDA PPU_STATUS
    ( o; N: s! R- Z
  337. BPL Time_Delay
    ! E* P6 G3 J. |+ s
  338. RTS
    4 w' l$ [* V' u" W: S8 r
  339. 9 h* M7 s8 |  g9 S1 v. V
  340. ;==============================
    # I  ?9 C" X1 h, S! {4 [- i& N5 O
  341. VramInit;初始化图形内存
    * q  F7 C  F4 \  Z  G' W
  342. LDA #CHR_DATA_BANK
    ' h7 z3 A$ }1 X# d3 `. v! T( g
  343. JSR SwitchBankA000
    . J0 O! [, [& |, v* l
  344. LDA #LOW(CHR_DATA_ADDR)) \7 E$ j& c% Z; `# h
  345. STA <Data_L
    # R* _4 I0 S  I
  346. LDA #HIGH(CHR_DATA_ADDR)7 [5 G" ?+ O- [) ^5 G  z
  347. STA <Data_H9 {  y! g( e6 @* _" b
  348. LDY #$00& w; q" ^. {) E' A  i8 \
  349. LDX #$20
    . s# h1 R* N/ w" J
  350. LDA #$009 n. |" r  c5 v
  351. STA PPU_ADDRESS" u8 W+ o( b% j
  352. STA PPU_ADDRESS
    2 M4 u& k% Z  [
  353. VramInitWrite
    ! a9 Q& ?" `% ^& l. c+ Q% A
  354. LDA [Data_L],Y# G6 L% z+ y( d2 f1 E
  355. STA PPU_DATA
    ' Z2 \2 O% n! D) e% ]! Y7 p7 C
  356. INY
    % Z# R4 g% q" q& Q) C/ M& S4 a
  357. BNE VramInitWrite$ @( H) M" d" M8 l# h+ j8 @  t1 d
  358. INC Data_H! `) @$ r* l' \% j) d0 s
  359. DEX
    1 C2 M; a5 K/ j3 W! J9 K
  360. BNE VramInitWrite8 D; N8 M3 G  {
  361. RTS9 a# H# B$ H) \1 z$ k

  362. ! e4 a: a7 x4 e: Q
  363. ;==============================
    - l& T6 W( u9 A5 T9 R4 ?* e
  364. RAM_Clear;RAM清除3 O. l- n) v% P+ w& u  K9 Y+ s3 B/ Y
  365. LDX #$00
    . z- h6 m5 e1 ^3 o& y4 e& A- o
  366. LDA #$00  N/ N! S* v' I* y- N& c+ p$ Q. Z
  367. RAM_Clear_15 g0 K. b( A6 p$ `  P! }) i1 q
  368. STA RAM_Cln_1,X# O) n6 ~6 S3 D4 ~" v
  369. INX
    7 Z! L, X% C" i( a" l/ i
  370. CPX #RAM_Cln_1_Size
    / r2 J  L) \8 h" t: K( |4 y4 Y
  371. BNE RAM_Clear_1
    2 J8 O" A2 o8 m! f( \* M- B; ^# C1 R
  372. LDX #$00
    ' z0 I' o6 q, ~
  373. RAM_Clear_26 n9 |. O% m& E7 h, c
  374. STA RAM_Cln_2,X: H7 u* B1 |7 H7 X. i. ^4 d
  375. INX% A" {7 l; m  [% |  e4 H
  376. CPX #RAM_Cln_2_Size
    " x: W$ X: ~- ~2 q8 s8 ^
  377. BNE RAM_Clear_2
    $ o: t5 C) ^7 I1 F
  378. LDX #$00
    % z) G3 s2 ]1 J6 R% \3 _* Y
  379. RAM_Clear_3# s& I2 O  I4 }4 t1 ^) _
  380. STA RAM_Cln_3,X
    ' e: }# U: J, @. B' V1 q3 v
  381. INX
    4 V8 \  W* p; J0 _
  382. CPX #RAM_Cln_3_Size0 n7 ~" W) h+ C3 x- D9 v/ T
  383. BNE RAM_Clear_3
    # X! N* N7 i. d/ r
  384. RTS. ]: @: E; H4 P0 O, G  F

  385. " M& x9 L- X0 r
  386. ;==============================
    6 u; f* U% e6 E+ Y; W, K1 O
  387. ;音乐切换
    ( E) L7 @9 S, q; F9 \9 @- U' H
  388. Music_Switch4 ~  o* y6 Q1 p$ k( Q' C5 T$ ~
  389. JSR Key_Proc, B$ m9 C. ?* c
  390. LDA Key_Once
    7 s3 }' Y( O* p9 K" h
  391. CMP #$10
    " T5 R" W: P9 t. s8 ~
  392. BNE Music_Start_SongStop
    6 f/ p- h& i4 E- n# |
  393. JSR Music_ReSet
    - _" D: F: h* F9 z

  394. 5 t/ d& e3 h, J0 B
  395. ;音乐停止
    0 R1 u- T- c* y
  396. Music_Start_SongStop
    ! J7 z; S# l! y
  397. LDA Key_Once! a0 F( o: I' w. N. R) R
  398. CMP #$20) t* ^5 N+ B" C$ s% S; s
  399. BNE Music_arrow1 U4 i; K' p; G6 _0 f& Y/ P, y
  400. LDA #$01
    ( R3 T$ G  y( R: v" D
  401. STA Music_State
    ! z! D& L8 @, u# Z" h% ?# q
  402. JSR Music_Bar_ReSet8 Y: M4 ?6 P1 j& ~1 F3 v! P
  403. JSR Time_ReSet
    0 ^9 }& w$ {: l9 \6 H( J4 S
  404. JSR RAM_Clear
    % f5 z1 X; Z3 H. Q, d/ U- S
  405. JSR Sound_Clear6 z0 i; M/ H5 L9 f1 ]- D
  406. JSR Music_Stata_Show
    6 I8 B0 F% p9 G9 g4 i
  407. Music_arrow6 d+ a9 }) I, o; }' \
  408. LDA Key_Once
    + U, T" ^8 b. w# P' p: t5 ^
  409. AND #$CF
    0 h" s- a3 [, l( x4 ]
  410. BEQ Music_Switch_End$ n! {; W6 J' B
  411. JSR Music_Number( `+ E. S: F+ ^# `0 d# t  L. j
  412. JSR Music_ReSet! b6 {3 G" ?( |8 C! T7 h
  413. JSR Music_Show! n$ Z6 k5 D+ a2 `- D0 f
  414. Music_Switch_End$ e/ `9 B% O! c( n/ `  h5 u% a; F
  415. RTS' u4 l* b) T, z, t7 y) a

  416.   q' k+ j$ v4 v* g
  417. ;==============================
    1 z. i0 T, E' n4 ~
  418. ;音乐曲目切换( E" ]( t6 P: m8 i9 i
  419. Music_Number9 |6 h1 y( C7 T0 O; e
  420. LDA Music_Cur; }) v9 d# b2 X
  421. STA Music_Last
    9 E7 s3 `/ |8 r
  422. Music_Decrease
    2 e. f& ~4 _- H, W
  423. LDA Key_Once6 P2 o% _; ^0 M# [
  424. AND #$42
    % E6 S$ f! ^- c& x
  425. BEQ Music_Increase
    1 m/ o+ h  R6 G: O, J0 }
  426. LDA Music_Cur
    ( i- M  @# f. X) O8 p4 r/ e6 Q- ~
  427. BEQ Music_Increase
    2 c8 k! V, x4 Q, p
  428. DEC Music_Cur9 m" Q3 @9 w. ^0 z/ O, \+ z
  429. Music_Increase0 Q2 M' w( P9 G0 w
  430. LDA Key_Once
    + v9 t$ L$ r/ d2 s9 [4 W
  431. AND #$81
    8 h: e2 A7 F4 q) y$ u$ i
  432. BEQ Music_Decrease_101 A/ D! G, w' F3 u1 u; [
  433. LDA Music_Cur
    4 B( R9 w! o7 [$ \5 A. c9 X; T
  434. CMP #Music_Song_Total-01
    & N% m6 Q# q8 @& F
  435. BCS Music_Decrease_10' _, c: [/ L3 k# e. ^+ [
  436. INC Music_Cur6 s& J# q; U. s  U7 U
  437. Music_Decrease_10! K& m2 i0 g/ o+ ]
  438. LDA Key_Once
    2 k. O" A3 m6 ^3 Z7 d
  439. CMP #$04
    3 I# E6 E8 f9 y! Q: F
  440. BNE Music_Increase_10
    7 g& i4 g6 v. V* c: K' x
  441. LDA Music_Cur) D$ N3 W" j- A
  442. CMP #101 u* r9 |8 h4 c% d2 ]3 m
  443. BCC Music_Start_Song_Min
    % y9 C$ q, Z$ Q1 z
  444. LDA Music_Cur
    ' W! y- X: m8 g8 |5 ]% @
  445. SEC5 C- x: l, v; O( \
  446. SBC #10' n7 Z! M, a$ H, b
  447. STA Music_Cur: w, ~7 n" u2 r+ t# T3 F* h
  448. LDA #$00
    2 P& P; d, `& _
  449. BEQ Music_Increase_10
    2 i5 {  {, J3 X2 t6 F) Z. M2 M. U
  450. Music_Start_Song_Min, I$ r1 y4 ]2 t, W6 o* y6 o
  451. LDA #$00
    , o/ m* E# D+ E$ R- i" _. W3 m3 M: p
  452. STA Music_Cur7 m. o, `% \$ E, Y  y
  453. Music_Increase_10
    2 @+ v: j( m; Y% Y, K
  454. LDA Key_Once
    5 z" K/ @. V% @$ K  i: E
  455. CMP #$085 x5 q4 s. T9 `
  456. BNE Music_Number_End/ z! _* J9 r& u
  457. LDA Music_Cur
    % s. ~& }' j2 x4 S* L/ y# [
  458. CLC
    , s" d. o" h6 W: D* _3 I
  459. ADC #10' C; X7 J; S4 u* G% E2 E! S  R+ a
  460. CMP #Music_Song_Total-01
    ( }; M! e% I  y* _) ]- U4 D
  461. BCS Music_Start_Song_Max; Y9 |' p  ?6 Z' i( G) n* r
  462. STA Music_Cur
    , |: z: N( j$ r/ _. n6 q3 a
  463. LDA #00
    % F7 v9 m% K, F; F
  464. BEQ Music_Number_End' j% c. b2 Z1 t4 b
  465. Music_Start_Song_Max) \2 p; K3 U/ }7 r" A
  466. LDA #Music_Song_Total-01
    9 I0 H; u4 z0 Y: I! z, d5 K7 v
  467. STA Music_Cur
    5 D0 W$ _' @9 I
  468. Music_Number_End! C+ s% B( Y' X' X# ~" h0 j, ]
  469. RTS" R, z  k4 D+ z# C4 N
  470. 8 w; O5 T7 X+ w+ x9 U
  471. ;==============================: z3 S% J$ e, A: h  [; w4 Y
  472. ;音乐重设
    " N' c: J: v0 n9 }, r* b$ X
  473. Music_ReSet
    ' c1 \' S! W0 n) [
  474. JSR RAM_Clear
    , z, b$ q- ]" g2 O
  475. JSR Sound_Clear+ t$ J- M5 s. c' v
  476. LDA #$1F# c6 l# N: M* D* L7 I) U* Q: r" Q
  477. STA APU_STATUS
    $ y' p& O  Q: |# m% k" H
  478. LDA Music_Cur" A2 Z: p7 f3 l/ }, e4 Y* h+ r% P
  479. JSR Sound_Init* S: `" X' p+ N7 k' E: L
  480. RTS
    ' Y/ g; U& H5 \) X, l" b, k; I

  481. ) ^) J& j# L* q9 Z. t
  482. ;==============================
    / j9 }# B% f/ k0 v
  483. ;音乐端口清除" c" r5 `6 V/ u' ~1 ]
  484. Sound_Clear! W' M; M. s! g6 s" x: Q1 j0 b
  485. LDA #$00
    " Z: x  n" L# C" E
  486. STA APU_STATUS6 N' J/ t& a8 Z
  487. LDX #$004 m9 C/ g6 X: @* y2 ~$ K; \& u" J
  488. Sound_Clear_Start
    + Q8 u7 v2 p; ~  d7 H& @
  489. STA $4000,X
    8 s& L; p, A0 z9 b  t1 ^+ S
  490. INX- d+ m0 N2 ^3 _. ]
  491. CPX #$14% @; ~, {) N7 Q$ m/ Z7 {" T( A" D
  492. BCC Sound_Clear_Start. K5 P9 B9 c& F) E/ d& L" Z; K
  493. RTS4 a$ t% s# @$ p: @7 q: c
  494. 5 Z2 M" F4 S) q+ }9 v) b; z6 M9 n
  495. ;==============================
    ! P. E1 N) |7 q
  496. ;按键处理- K7 T1 I5 n! F( m: }9 S6 t9 O% U
  497. Key_Proc8 W- N0 X, ]: G% ]
  498. JSR Key_Scan7 X1 }, \. j. K1 _- C- n
  499. LDA Key_Keep
    3 e4 S2 j" ~0 I0 p: A: p
  500. STA Key_Temp$ ~# `2 v) Q0 F% C
  501. JSR Key_Scan
    " h4 I0 [" z' E$ R0 f% X
  502. LDA Key_Keep
    : |4 @% K+ I; Q0 _8 u! I
  503. CMP Key_Temp  @/ Q0 \0 p4 K: M" y
  504. BEQ Key_Get_Once7 A- ?: @3 G' Q' A, I
  505. LDA Key_Kemp
    - \& \$ @1 @+ i3 y
  506. STA Key_Keep
    # G7 u( {' N6 P1 h# v" L
  507. Key_Get_Once. o' n8 ?+ I* K/ m# `  o
  508. TAY
      M9 v, s' d7 c/ w% [
  509. EOR Key_Kemp
      x3 p& s. e# g
  510. AND Key_Keep7 N/ I: T7 z0 \2 J( Y) [/ t
  511. STA Key_Once  T: {" q0 `- f( j
  512. STY Key_Kemp  [( F! d" v- t, j$ d
  513. RTS
    ! R" V% B1 n0 i9 Y9 V5 p8 k
  514. ;------------------------------: _4 @# j7 s" m( U9 b* n) I
  515. ;按键扫描! N$ c1 U* k2 O5 b+ W0 ^3 R6 ]
  516. Key_Scan- d' X$ y2 `, p- g3 F$ e3 s
  517. LDX #$016 w" ~4 e: i4 g' f! s
  518. STX JOY1_FRAME
    6 ]% t4 O% A: Z/ {" E3 m4 W
  519. DEX! |6 W! z  C2 w' y3 p) W$ c
  520. STX JOY1_FRAME
    ' a/ y0 J# b/ x
  521. LDX #$08
    4 Q' L7 C( b5 m4 g
  522. Key_Value; I3 w) i% A, t: N# i
  523. LDA JOY1_FRAME
    ) s: d7 s0 R: `* X. I7 g  |
  524. STA Key_Getv2 t6 y# n  I2 d, l, M
  525. LSR A
    3 Z) A/ a: T' F: g0 r( B  T
  526. ORA Key_Getv( B8 A2 Z8 }  b: ]5 a" o* d+ {
  527. LSR A
    - z) V7 ]7 f/ b# h
  528. ROL Key_Keep
    ) Y2 [0 V3 A2 Y
  529. DEX
    6 v5 @* }3 m+ g" ^8 a5 ~
  530. BNE Key_Value
    . p) c+ y1 n9 O: [) n& V$ p' M' W
  531. RTS* X8 Z( e; s( d# }
  532. ! q6 V3 n8 f& l! ]' z  g
  533. ;==============================
    2 ^4 m, Z. R7 n0 u' e5 w
  534. .IF SOUND_BAR_SHOW_ENABLE( a; C: L$ d( Q4 b/ V2 \: _
  535. ;音乐条显示2 V8 Y' @8 [0 K% y3 m+ p5 ?) r
  536. Music_Vision
    3 K0 b4 a& ?. f" b& y6 L  ?9 v
  537. JSR Music_Animation0 L/ I% l( Z- L: ^$ |+ C) }
  538. JSR PPU_End  P- F* ~- B+ N, Y, ?* Q
  539. RTS0 {8 ]& x) K, m  T* c. M+ W
  540. ;------------------------------3 O7 n* f" M2 A, \, K9 @9 Y
  541. ;音乐条显示处理
    $ l; T! M+ `6 w
  542. Music_Animation5 v5 d9 \  p! D& y3 z- N! O
  543. LDX PPU_Cur7 u& e; l- j$ o8 H' l2 R
  544. LDA #Mode_Line+ s6 H5 [9 m6 N
  545. STA PPU_Addr,X
    7 a) K+ c5 ^( H7 D0 V
  546. INX3 V5 M. }$ C$ c
  547. LDA #HIGH(Sound_Bar_Pos)
    : u% r5 b+ o& A6 {
  548. STA PPU_Addr,X0 |' n3 }8 E  c* i8 A" {
  549. INX, Y8 k# k  {0 K
  550. LDA #LOW(Sound_Bar_Pos)* Q9 v- E) L$ n! u1 I
  551. STA PPU_Addr,X
    4 O' @3 L* A0 ~6 g
  552. INX. |& r; ?1 D- ~9 u* {4 \- W/ n9 `
  553. LDA Sound_Bar
    % A- n% f$ C& {) X7 t, Z! v# o( z
  554. JSR Volume_Convert
      r5 T, T5 @7 j# x1 ]& f; L# @
  555. JSR PPU_Return
    9 y) h( C2 T/ S2 U% r# Z5 p
  556. LDA Sound_Bar+$4
    * g2 `8 u+ i5 @% x
  557. JSR Volume_Convert- d3 z7 y0 B$ x. Y+ T. m
  558. JSR PPU_Return  L/ ]" R' ~2 K3 y6 B7 N2 Z
  559. LDA Sound_Bar+$8  e' `2 y  G$ n
  560. JSR Volume_Convert_Ex4 t8 z0 d, H. V6 z" A. M8 z4 h
  561. JSR PPU_Return* U7 _0 s4 P) k9 ?1 C
  562. LDA Sound_Bar+$C& s2 W+ Q1 y7 y
  563. JSR Volume_Convert$ \- Z' x$ v9 X  F, m& ?
  564. JSR PPU_Return0 x0 S) M/ n3 H0 U* ]3 j
  565. LDY #$10
    # I" @8 ?& l5 y! v  ~, f8 M
  566. LDA APU_STATUS3 E: ^' e6 Z+ c* n# G- x8 I
  567. AND #$10' W5 ~' V0 e" K" J  y' J( ]# U
  568. BNE Volume_Count; v: f) S* Y7 h& Q
  569. LDY #$00) [) B: H) k8 \% _5 J
  570. BEQ Volume_Count
    0 ~& j: p8 i+ o" ~- z
  571. ;------------------------------+ Z) ^0 r' |* P: J4 T& b; G) G, V  _
  572. ;音乐条处理% l" \, P( Q- I/ n8 c! l& m2 g
  573. Volume_Convert_Ex
    $ Q# Z- M4 l2 D( [  ^7 m
  574. AND #$1F- O# T/ @4 @, g6 }2 S0 f4 U
  575. TAY/ c5 c7 h6 G" ~! L
  576. BNE Volume_Count
    3 c' d# \* _" n9 V2 B
  577. Volume_Convert
    7 e0 J. a4 r4 S, u4 D8 a# _
  578. AND #$0F& `4 U) n/ J6 t! T
  579. TAY
    / K6 U* p8 m5 p% e
  580. Volume_Count
    8 |& {$ _* D! r" I) L9 Q
  581. LDA #$08
    * A  n% |, K! o" ^4 b5 a0 P
  582. STA Sound_Bar_Cnt0 |) R+ m( L% o- u4 H! I# {. P# _) T5 s
  583. Volume_FILL) W: \# J. c6 Q. Y- T
  584. DEY) T- j- s- q1 i/ c" i0 m  e
  585. BEQ Volume_Half6 U- r; `5 C) T4 J; U4 |
  586. BMI Volume_Empty
    " S" U" j4 \' m3 g& u& y
  587. DEY  }* n/ J+ \- z4 U! y
  588. Volume_Full
      p( ?8 ]7 L. d, k6 S1 y
  589. LDA #$16
    $ w3 b$ R8 v5 q& B9 J
  590. BNE Volume_PPU: M/ [0 }; }! [" `
  591. Volume_Half
    5 g5 g) B+ e" x, c3 I" p: F
  592. LDA #$15, F- i+ q% W9 X6 Y
  593. BNE Volume_PPU
      z8 |: I2 Y+ W! d
  594. Volume_Empty9 ?* w' L. D( h# ^0 u
  595. LDA #$14
    8 q! A5 B* h4 W3 g7 ?" ]( L% @
  596. Volume_PPU
    ( a0 y: e4 g  Z$ O+ W7 Q  R$ [+ v
  597. STA PPU_Addr,X3 ~+ n% E: w/ @0 Z
  598. INX8 G  s# f" B+ n7 w
  599. DEC Sound_Bar_Cnt
    # B% ~* b: o6 g$ W& C
  600. BNE Volume_FILL
    0 a& u; h- [4 s0 f6 M, b
  601. RTS1 D* W& N4 G% q- m
  602. 9 u; g  Z2 G# }
  603. .ENDIF' e: }! z, g) k. u
  604. & K; Y& r- N) s8 B) z
  605. ;==============================: k, L1 a4 e. U* o/ m
  606. PPU_Addr_Set;PPU行开始: R2 s  \5 r# q: x4 w+ K
  607. LDX PPU_Cur
    ( u7 ^% R7 m2 |2 [+ _
  608. LDA #Mode_Line9 n) H: C8 N  s8 o2 L' Z
  609. STA PPU_Addr,X3 s3 q% n$ i8 f' A
  610. INX' p4 ^# L' o3 {+ j3 }
  611. RTS
    0 s# c4 K, d& W4 F9 \" Z1 `
  612. 9 u* f, U& a* k/ `4 e( G) q4 A
  613. PPU_Return;PPU转行
      q' s/ c4 o3 H" p8 ]. a0 y
  614. LDA #Flag_Over
    7 s2 g0 _# S3 O. v
  615. STA PPU_Addr,X
    ( q! m; K9 U) M: M! t
  616. INX4 o9 V* I% z( i5 Y* O! W! e: W
  617. LDA #Mode_Return
      P* `" P+ r* e
  618. STA PPU_Addr,X
    % X' X6 n7 q+ N% O' X8 F/ j
  619. INX
    8 V6 G$ @) J- F. W) d
  620. RTS
    0 z4 F* g$ e( p1 h
  621. 7 r( b) H5 T: E" Y' n3 J
  622. ;------------------------------, u! M( A- w3 U, d5 o" ]
  623. PPU_End;PPU结束
    : I- [3 h0 ~; l( q( w; ]
  624. LDA #Flag_Over
    + L/ A- m0 Q( z; ?
  625. STA PPU_Addr,X
    4 B$ ?  |: U2 U* I6 ^$ T" v
  626. INX8 Z! t8 e9 F" U& P5 i9 p
  627. STX PPU_Cur* L6 q# E4 g8 p' _. s
  628. RTS
    5 c0 @' R: @' l) B( e2 F
  629. ;==============================
    . X/ u  i: b: d4 A, ~
  630. Mode_Line     = $FD    ;新起行模式
    0 [" r4 m8 p  f; K* q9 Y2 l
  631. Mode_Return   = $FE    ;转下行模式
    9 q% `- J6 U% a1 M  r
  632. Mode_Clear    = $FC    ;行清除" C* f' j* @: A: e
  633. Mode_CntLine  = $FB    ;行计数写入; A3 p7 C1 m4 P9 N+ C
  634. Flag_Over     = $FF    ;行结束标志
    ! b$ `8 {# {- I: K! A2 h8 k
  635. " I7 `/ y/ E$ }4 i
  636. ;------------------------------
    ( b" @, \5 Y) |2 r# H. `+ G4 t! w3 r
  637. ;PPU处理
    ) a0 q$ U) M3 r' X* p8 p  W
  638. PPU_Proc3 S, `6 n' a9 V  L7 R" ]6 F
  639. LDX PPU_Cur
    ' t2 `& g9 t4 q3 J$ f4 |  S
  640. LDA #$00! C3 O7 a, C2 `* Q- ~0 G
  641. STA PPU_Cur
    2 M: `8 w1 I7 r( Q* ?! w
  642. STA PPU_Addr,X2 k/ v! d6 u& |/ y
  643. LDA PPU_Addr9 J3 w2 G7 r( L8 s4 l& I5 |
  644. BNE PPU_Proc_Beg
    % s+ h% M- s: d% n7 k! J+ X, p
  645. PPU_Proc_Ret# I0 W, ~  P) O4 R4 d
  646. RTS8 O. C! B5 f2 q) d5 ^; f6 X3 L' i
  647. ;------------------------------
    # X: T& z; U' n, I  @9 D7 h
  648. PPU_Proc_Beg  ;处理开始1 \3 t/ u$ L- Y9 ^
  649. LDX #$002 Q5 |; G% d" D( A
  650. STX PPU_MASK
    9 _3 I9 x' g  C! R& t7 c6 a& Z; ]
  651. ;------------------------------
    1 o$ r$ D4 G" Y8 T
  652. PPU_Mode_Select  ;模式选择7 G% E( C. e4 A' j' R
  653. LDA PPU_Addr,X) R" ~% K& _; a! G5 f  [& u  i
  654. CMP #Mode_Line8 ~+ ~* t8 e) m. x% z2 P: Z+ l
  655. BEQ PPU_Mode_Newline
    , N9 B* ]# Q9 M3 r9 o
  656. CMP #Mode_Return( }1 k/ a. }( W2 t1 p7 ^+ |7 f
  657. BEQ PPU_Mode_Return' ]9 v5 K4 Q8 D
  658. CMP #Mode_Clear* R+ k5 D! _8 [. A
  659. BEQ PPU_Proc_Clear5 s/ F/ R8 Z, N) Y2 N- U1 x: o
  660. CMP #Mode_CntLine  t( r# A5 i4 t3 [. c$ k
  661. BEQ PPU_Proc_Cnt_Line
    - [7 n# M+ O  L8 w2 Z
  662. RTS
    $ ]/ h* f, }& Y; w
  663. ;------------------------------; }' K& H5 O1 a# d9 x% @) v6 L
  664. PPU_Mode_Return  ;转下行模式
    - \1 {2 w2 C4 t# }; C$ _# ]
  665. LDA PPU_Addr_L
    . R: O5 ]8 s2 k/ y/ k. a+ k: U
  666. CLC8 ^' x9 d4 c% R# [9 |* q
  667. ADC #$20. ]1 m# f: L: p2 K) J8 e
  668. STA PPU_Addr_L3 A& x$ b2 A9 ^- w+ B
  669. BCC PPU_Return_End8 {; {- _2 f/ F8 {5 r2 g' H; `
  670. INC PPU_Addr_H
    , Q/ \5 S9 `3 y" y$ k3 {' z3 C! v
  671. PPU_Return_End( ~5 |7 z+ V. Z5 |. E8 i# a$ T2 l& [  F
  672. JMP PPU_Set_Increaser
    - I1 \" b5 y; `' R
  673. ;------------------------------1 Y8 f% @4 }3 ]1 y9 d& q/ K
  674. PPU_Mode_Newline  ;新起行模式
    ' B  i' ?3 O- s3 p+ U& t
  675. INX
    & c+ Q! m4 P) B# w) H0 }+ ]
  676. LDA PPU_Addr,X# b: n1 i8 z% A! f# B
  677. STA PPU_Addr_H; ~( K: V/ C0 C1 _- k- t2 B9 j/ U
  678. INX
    / }& g3 q) w4 S3 K' t$ ?
  679. LDA PPU_Addr,X" ?& g- Q; {0 T' \
  680. STA PPU_Addr_L
    4 T2 {; b& m; |9 a  Q; d
  681. ;------------------------------8 c- {! ]6 u2 k0 c: J3 E
  682. PPU_Set_Increaser   ;设置写入地址
    9 K7 g/ O6 z7 z: C3 g9 ?$ e) U
  683. LDA PPU_Addr_H
    1 `! P+ |* `2 C' Y3 J9 V& K
  684. STA PPU_ADDRESS, G, n9 b3 E6 \
  685. LDA PPU_Addr_L- _7 Z- }3 [( `+ f. L
  686. STA PPU_ADDRESS
    / |! Q" R) [6 @0 @1 p
  687. ;------------------------------
    2 W  g0 P5 d1 s  w
  688. PPU_Write   ;写入数据4 A: ]- }: C3 U' z! S# Q  n9 y; l
  689. INX! \, A3 Q# r- {
  690. LDA PPU_Addr,X; P/ u* k3 A' c1 ], ~9 n$ b
  691. CMP #Flag_Over
    / }9 C; _: w6 p+ g
  692. BEQ PPU_Proc_End9 g/ Z6 Y; f' n' w) k0 Z
  693. STA PPU_DATA
    / q4 ^9 R: O4 t& X- ~, |
  694. JMP PPU_Write
    $ c  O9 s5 V% ?5 |" N1 Q
  695. ;------------------------------
    4 X1 t; I9 T& {& {) n
  696. PPU_Proc_End  ;单行写入结束' J( f2 v0 u: g8 J% S# G# k5 S
  697. INX2 h/ r% b) d7 u' B
  698. LDA PPU_Addr,X7 G; s1 h! M. Y; e& o0 J1 x
  699. BNE PPU_Mode_Select
    + U& C  r4 }7 L) O5 i, ?
  700. STA PPU_Addr- `  g  O! {/ E; R: M" Z5 \
  701. JSR Update_Palette_Color
    - l3 a" b$ k- S. j  I
  702. LDA #$00
    ; n! l# I+ a$ y
  703. STA PPU_ADDRESS; A8 {9 E4 @  h& M3 R5 a
  704. STA PPU_ADDRESS7 @; H2 r  d( u( o
  705. STA Show_Track_Name; m8 z  f0 a" ?- a, N5 x5 k0 |% k1 I
  706. LDA #Scroll_X
    % k) m0 @; l; [% M+ [8 f
  707. STA PPU_SCROLL) J5 R+ ?: O% t7 }/ M1 u+ v
  708. LDA #Scroll_Y
    5 y( r  Z, D$ w, K) `! Q
  709. STA PPU_SCROLL% l2 |3 O. V. M& m' Y( i' g) i/ s
  710. LDA Screen_State
    4 F: F5 V' Q5 _, n- N7 y3 T
  711. STA PPU_MASK  h/ D3 {6 A- B3 x/ ?2 [, L# G, U
  712. RTS" s9 v5 p) ]0 m; T
  713. ( a1 `& h' e5 F( b
  714. PPU_Proc_Clear3 y) q1 g3 k/ R; g# H" a' N+ G! b
  715. INX; H+ L1 M$ R3 Y8 E$ O
  716. LDA PPU_Addr,X
    : @0 {  J- h9 _) c$ {. d% x
  717. STA PPU_ADDRESS
    7 n' T4 g9 H& ?1 u& N0 v1 h- M
  718. INX! M7 `2 O2 L! @
  719. LDA PPU_Addr,X. \) H7 f) p9 W: a3 s
  720. STA PPU_ADDRESS
    - I/ z# y- ^6 w. N- l
  721. INX
    3 m  w/ o( C" o7 o! F! R7 S
  722. LDY PPU_Addr,X$ I) j! P1 p) c8 U' J( t
  723. LDA #$00
    7 \- Y( T; a% T# i* k  @( Z: I0 F$ p
  724. PPU_Proc_Clear_Write5 D. C% U* z) \) n, V: w& G
  725. STA PPU_DATA& g" J; `- Y" ~5 c! J
  726. DEY% P2 E5 s" R0 z. w* {! `, J0 k
  727. BNE PPU_Proc_Clear_Write5 ?: _( c) m6 U1 m
  728. JMP PPU_Proc_End( Y7 R2 c& ]4 d% U
  729. 2 K6 ]0 n& d3 H8 [4 s1 L
  730. PPU_Proc_Cnt_Line
    2 x: x# {( h9 n
  731. INX
    ; m( Z0 A% x4 b6 I+ T9 ?4 @
  732. LDA PPU_Addr,X
    2 ~8 B7 d! ~4 ~8 o5 L  t' |2 _1 q
  733. STA PPU_ADDRESS" K$ Y0 j9 C) M: h. s! O2 B" z9 J
  734. INX
    / s+ {" a% _( B( W9 T3 A
  735. LDA PPU_Addr,X
    9 x! Q) Y0 W! V& F! T) t
  736. STA PPU_ADDRESS
    " H" ~* [1 P( E' c& t. k
  737. INX
    3 ]* ]  v' Z, s* n% a7 g( w5 z
  738. LDY PPU_Addr,X
    ' n) o7 x. O( }0 O8 y
  739. PPU_Proc_Cnt_Line_Write
    0 n" a2 C8 M2 B
  740. INX7 U$ h% R% P$ C) W
  741. LDA PPU_Addr,X
    : n$ ?; _- y% D  E+ L, ~3 ^4 F
  742. STA PPU_DATA- F! W# u, ^/ x; t/ l0 n: U9 N8 F
  743. DEY
    " z+ h4 I" c! z
  744. BNE PPU_Proc_Cnt_Line_Write; N' G3 s9 d" R1 Y2 R8 |& b0 P
  745. JMP PPU_Proc_End1 F3 A) g% W- R+ _" ]

  746. 1 k/ w' |7 a1 e; t" _# o/ z6 ?
  747. ;==============================
    ' w( L" Z, Z* B
  748. HEX_To_Dec;十六进制转十进制1 p% Z& N7 N+ y* f) i2 ^
  749. STA HEX_Data
    # u9 f% W8 F  q2 F4 H! w
  750. PHA
    " ]5 N8 F4 O9 c
  751. TXA7 ?# C4 {7 J$ ~: h5 f$ V( I
  752. PHA) h0 C  {9 U) @6 D% Y& W3 k
  753. LDX #$00. F& f9 q6 x, k" k- g/ j+ ^
  754. LDA #$00& G0 C6 e; G9 L
  755. HEX_Cln
    # q- S& h( W$ f2 |: ^
  756. STA DEC_H,X
    , V  R4 d" M) ?6 X" u" S# u
  757. INX4 b- h' @& Q& e- x6 _" X) J
  758. CPX #$03; `% R3 _& N7 w) _: i- U9 Q
  759. BCC HEX_Cln) ]' Y. l  R1 Y+ B
  760. LDA HEX_Data
    5 P5 y* U: z* t- H7 `, N, I+ L
  761. ;------------------------------
    # ]- a! n" Y% O3 n! F% P! c
  762. HEX_100* k/ Z% |9 i9 Y- B# p
  763. CMP #100
    ; c% @0 e0 S$ f# |
  764. BCC HEX_10
    6 B7 E8 V# n6 s
  765. SEC1 e# q* s* Z* l( J; `3 J
  766. SBC #100
    ( m9 s) L/ _3 A4 A$ p! h
  767. INC DEC_H
    * U, j2 O3 b+ R* K/ i
  768. BNE HEX_100
    : Z, {2 E" {5 e
  769. ;------------------------------- A1 `, a4 u6 m' l0 d( C
  770. HEX_102 Z8 d# I( _7 k2 ?) d
  771. CMP #10) z, ]& p9 w5 A' l8 Z
  772. BCC HEX_10 x4 ~# |9 f. J
  773. SEC, W! J+ w/ N' t
  774. SBC #10- w% ]' B# k/ K; o* M4 }0 I
  775. INC DEC_T
    - D4 D1 [) G# X% f7 \7 W3 }
  776. BNE HEX_10) s+ c6 }9 `& F/ A8 E8 S) p% O
  777. ;------------------------------5 L) L3 G2 M' j6 G7 r
  778. HEX_1
    % v, o! a4 K" x: p. K; }
  779. STA DEC_L# B+ g1 F# n! L" g6 B
  780. PLA; K, o" p; D- T  \! l" G
  781. TAX
    5 E0 K" h( a1 [; s8 J+ H: L
  782. PLA, \# `2 Q9 ^9 l" r4 y. u( C
  783. RTS) U! D4 k" [, f3 V
  784. 9 w2 a+ l% i" O
  785. ;==============================
    8 E  x. D% j# d1 ^: H# T0 d
  786. ;音乐曲目显示" N' P7 E+ i' a: E) ?' F
  787. Music_Show
    % W7 B! s6 {8 v! J, u. a
  788. LDA Music_Cur7 D7 t% u. S0 t- K0 g: Y
  789. CLC7 g" W% P8 g0 g
  790. ADC #$01
    ) V' u5 H) y0 @7 k0 l
  791. JSR HEX_To_Dec2 `3 Y) w7 K# v% R2 S# T3 ]: _
  792. LDX PPU_Cur
    , q) l( @, [7 \6 r8 c3 `# K
  793. LDA #$FD( D* H8 T' Y" J# Q6 T# ?
  794. STA PPU_Addr,X
    " V4 P& z7 }' a, W
  795. INX
    $ C) b: K2 [" c; c$ {; U, j3 s& M
  796. LDA #HIGH(Play_Index_Pos)
    $ q. @; E4 b: {; N( O
  797. STA PPU_Addr,X
    ! _  e, {7 R: Y6 l7 x1 L& |% m5 k
  798. INX$ `/ e9 |. Z" d% J& n8 s
  799. LDA #LOW(Play_Index_Pos)+ b3 b# Y: a2 I  N
  800. STA PPU_Addr,X2 @7 F- x, }3 m8 K$ E; R! ?
  801. INX! P) n; j% w4 c
  802. - r2 M& E% q' s; x* E; ^
  803. .IF Music_Song_Total > 99( ~/ h0 T2 C( M4 o2 n- J
  804. LDA DEC_H
    - v% U1 N5 J! e3 {$ n! q
  805. ORA #$30
    ; m" B" \" }) Q" {$ {
  806. STA PPU_Addr,X
    : f+ o" M) K* X1 w3 j6 X+ `
  807. INX
    % p+ y8 P2 ?! ~* R$ v! z. C4 u
  808. .ENDIF
    ! L" T/ ~  m% [: x

  809. 6 d+ T- O% I. b0 Z/ o  B4 r
  810. .IF Music_Song_Total > 9
    8 H" M+ V+ n3 I8 J! ~% R
  811. LDA DEC_T5 Z+ m* T' L$ _  v( `/ a! O
  812. ORA #$308 [1 D. O: N. q5 n4 b' X! o
  813. STA PPU_Addr,X
    ; p, R% V9 x+ k/ v7 W2 I0 |$ e
  814. INX
    ) h4 ?: D' w0 o+ Y4 M* O
  815. .ENDIF5 d9 H+ w1 J# {8 g
  816. 3 }5 I& H( z6 f6 {1 T/ B# p* O
  817. LDA DEC_L& j- |% m$ X: u5 v. v. A
  818. ORA #$30) o. i( f. g8 Y$ Y& d* a0 I
  819. STA PPU_Addr,X
    2 {4 B0 S+ @9 b
  820. INX
    % l# x' l, S- D" G

  821. ) J0 |! n/ O1 D$ ?/ e7 o
  822. LDA #'/'9 c; `1 n0 j* h% r4 C  p
  823. STA PPU_Addr,X1 q  S- \1 W# A- t
  824. INX3 t& M1 {  |3 T+ Z$ K, n
  825. Music_Show_Total
    $ ~# e4 U& Z# r0 I
  826. LDA #Music_Song_Total3 M. }0 n8 ?# f4 @% d7 l% ?6 \
  827. JSR HEX_To_Dec' T- X4 ?& T, V# w$ G7 T/ ^
  828. & T. v% {3 v" o3 E
  829. .IF Music_Song_Total > 99+ y% U: R0 ?) @/ X4 |/ G; {. @
  830. LDA DEC_H
    4 @. z/ d+ ?' l
  831. ORA #$30
    + `" D2 k$ z) S9 P: Z  M
  832. STA PPU_Addr,X
    7 @' r+ g  m' d! t; F
  833. INX
    ( v. I: |; S$ L/ v0 z
  834. .ENDIF
    # L" v  o  h1 ~* v; J8 b

  835. ' x6 L) G* Z* a, V0 E9 F5 H
  836. .IF Music_Song_Total > 9' U& e/ S+ L8 o2 L! ?
  837. LDA DEC_T
    , J! B7 Z7 a' w  K0 ]& J
  838. ORA #$30
    6 A+ ]. Q: G4 R
  839. STA PPU_Addr,X
      h4 S2 l" L" O% K% U# h$ p+ u
  840. INX) Q: {" u  t. g; g; H
  841. .ENDIF; C$ u2 f5 P" U: ]+ h( w6 i! Y" E  t, b  w
  842. / U4 p6 `; L) i" k
  843. LDA DEC_L
    + s3 o# E: f2 c, z' T1 T) [
  844. ORA #$30' _+ G2 D4 }* l: }* D
  845. STA PPU_Addr,X* Z5 D$ w% b/ D5 n
  846. INX
    ' `0 W' p# N5 Y5 u3 |9 X

  847. ( y( S3 o$ ]+ L
  848. JSR PPU_End0 c" G* n; T: X6 N- k% k
  849. Music_Show_End& @4 U# @8 W, G
  850. RTS& K* N+ u! A1 c& m  {

  851. 1 I/ g, C/ _# @' d& v& k
  852. ;==============================6 y# N# V# D6 I/ }+ ^! A
  853. Time_Show;播放时间显示
    ) K6 S. Y6 J, t* T' h& b
  854. JSR PPU_Addr_Set
    6 q& J2 }& |3 H" r: L
  855. LDA #HIGH(Play_Time_Pos)# d+ h0 P0 t, k& N4 Y' |
  856. STA PPU_Addr,X
    5 e1 \% {8 r& y4 J
  857. INX
      g6 \3 w; T6 t. X1 N3 V" ~
  858. LDA #LOW(Play_Time_Pos)
    3 n; v9 Q5 d& Q3 u, z7 Y
  859. STA PPU_Addr,X3 G' h; Y" r& b* B1 X
  860. INX
    2 o  b- j* O5 K0 ^  x4 B
  861. Time_Show_H* k& j1 `2 @" _0 Y& Q, n& [, q
  862. LDA Time_H
    1 M) `  g6 h% N! M0 s0 X' F
  863. JSR HEX_To_Dec3 v3 M. N, Z& m( g% [
  864. JSR Time_Digit
    . I8 R9 i6 X/ X: |& q5 v0 r4 A
  865. LDA #':'
    ) M# W* i  h+ ?8 v
  866. STA PPU_Addr,X& t" W' c# z1 ]% t, i4 e
  867. INX% ^; U' n) Z4 [4 O, C
  868. Time_Show_M/ ]& v$ E% \! H/ q# ^
  869. LDA Time_M1 H1 I! D; d5 ]1 i8 J, \
  870. JSR HEX_To_Dec, D) n/ D3 Q, ]* c
  871. JSR Time_Digit
    - ?5 Y3 j+ e( h& s9 B% H4 s) Q
  872. LDA #':'
    # w* |* C8 w: t# `. r# i5 ]7 u
  873. STA PPU_Addr,X
    ( I( z* h, [/ t; m8 r, D
  874. INX' D/ w; |' |/ u3 }8 V* Z' H
  875. Time_Show_S# f/ K6 A+ u$ F  a+ f% _
  876. LDA Time_S
    2 o6 b; x7 \. Z( j/ A6 w  z
  877. JSR HEX_To_Dec/ W: W2 g- G+ |8 K
  878. JSR Time_Digit
    6 }4 W! t1 ~4 J+ N5 m
  879. JSR PPU_End
      q" m" x1 O- k6 w9 w* W
  880. Time_Show_End# P2 g% K- u1 Q& J
  881. RTS
    6 X% ?& c! S6 K/ q9 ]& B
  882. & Z3 v7 B- y. ]( w; m
  883. Time_Digit! @3 a# B7 w: P% D' O. Z
  884. LDA DEC_T
    # O5 c3 C. {6 L3 M! M
  885. ORA #$302 ~! L  t( ]% h: J
  886. STA PPU_Addr,X
    2 e8 K- o3 P0 Y: m5 I# u
  887. INX
    7 \# `1 L0 I0 V  [$ v+ @& ^3 ?
  888. LDA DEC_L% C) S7 G: t# I1 }
  889. ORA #$30
    1 _) K& M1 J% r1 T( W
  890. STA PPU_Addr,X
    7 z# [! H' F0 ?3 K+ L, N
  891. INX; G9 ~+ ]. m! A! n% S% a
  892. RTS
    - \# f, o' O1 i7 }: @
  893. 7 Z( z) v' _& w% l
  894. ;==============================
    , A. ?+ _0 c- j& e6 c# Q% i9 y
  895. Time_Count;计时6 g  t! G; k; P
  896. LDA Music_State
    ' U- V  z8 U+ p  g
  897. ORA Time_Wait_Cnt
    # H. f2 A! c: ]- d9 y/ c/ M
  898. BNE Time_Count_End3 T" k/ C( _6 `4 C2 d
  899. INC Time_Cnt
    / q) S+ U4 j" F' x8 N0 s* Z% k
  900. LDA Time_Cnt4 \& b# c* F* w: p+ [1 U
  901. CMP #60* G# N4 e4 S& n) ]# o
  902. BCC Time_Count_End
    ' t- l+ X' j9 |& \) h$ J
  903. LDA #003 m- o! P, y8 \* ^& |
  904. STA Time_Cnt* Z+ ^0 q. X- ^
  905. INC Time_S4 _2 g4 C0 C; _
  906. ' v- ^9 T$ ~; @# n2 B4 v1 J* y
  907. Time_S_Cnt9 b; D& A& B9 r2 s
  908. LDA Time_S. J! @; Z7 s! N
  909. CMP #60, O1 D' R8 F4 t7 @
  910. BCC Time_Count_End
    0 O; V) s) }; \$ x" W
  911. LDA #00% I/ z- m( U- {) I
  912. STA Time_S9 F9 i; r/ F0 t
  913. INC Time_M; J: _% f9 c3 H: _
  914. 8 h0 Q, l8 S! Y, k0 s& n
  915. Time_M_Cnt
    " T# B# i; E# X  B
  916. LDA Time_M3 h4 ?) h9 K# ~* K5 K" a3 W- J
  917. CMP #60
    ( R8 x  R2 ]& i% X! t" B
  918. BCC Time_Count_End
    / M0 ~+ X& P- W0 o& Q( c6 B
  919. LDA #00# q/ s( U3 k' h' h+ s+ v
  920. STA Time_M
    + V- O/ ]9 t# }" o( |5 b5 O7 H  I
  921. INC Time_H
    : s( c1 ^4 P  a: W

  922. ; n5 w" N* _. o! w+ Z
  923. Time_H_Cnt
    % C' `  J; G% T) U, i. v/ c2 s" Z
  924. LDA Time_H
    # p3 l. B+ f2 ]! i! Z: v: F
  925. CMP #245 |& F0 i! G9 d6 e6 x: e
  926. BCC Time_Count_End! j& b% s' Q8 T; {( r6 z3 N
  927. LDA #00% a0 \; q6 E1 B5 r# K& R  w  T
  928. STA Time_H2 Y- H5 x  M$ O4 Y5 w

  929. # H% n- W( S% M2 ^0 N- l+ y
  930. Time_Count_End
    % \" h$ Q6 z9 g/ L' G7 d' S( B
  931. RTS
    / _3 }6 ?. x7 J

  932. 8 U- L6 ?% C3 m8 [
  933. ;==============================& B6 A" N0 o. N6 E! n
  934. Time_ReSet;播放时间重置* [) a3 }, X- f8 x; m" i; l3 I
  935. LDA #$00
    - h1 b, @) _% z3 H# S& |: b
  936. STA Time_S2 E9 x5 _9 z* z$ |
  937. STA Time_M
    * i2 p& e+ I' a, }
  938. STA Time_H4 ?- i2 b- P4 c& n( W& B
  939. STA Time_Cnt) x9 ~+ v' a# h8 U! O& z
  940. RTS  ^4 P$ m! T' d2 N5 {, O4 [

  941.   v5 {( V" X7 f+ F
  942. ;==============================1 l4 ?5 m; U3 X( Z. \# M. ~
  943. Music_Bar_ReSet;音乐条重置7 c5 F) Q& y; f6 Q" I* O
  944. LDA #$00$ {& E5 o, j& L) ?3 n
  945. LDX #$00
    : e. d/ Y  c6 A+ ~6 V
  946. Music_Bar_ReSet_Set% N$ b" H4 g6 Y/ l4 P3 l
  947. STA Sound_Bar,X! X, ?; y% b' R  Z* Q3 n: f
  948. INX9 q- W* J5 E2 I# s. }$ q/ k
  949. CPX #$103 u& O1 N. A7 P, ]' ]
  950. BCC Music_Bar_ReSet_Set
    9 [! P9 y0 i# b
  951. RTS
    0 }. `; s# k3 Q/ \% G* O& c& E

  952. 7 B6 E& s0 e. {* E% S7 h; z
  953. ;==============================
    2 J* h1 ~, Q5 l2 N
  954. PPU_Data;PPU数据写入& T( }+ @3 }9 f% {1 e+ a$ Q7 G# M
  955. STY Data_L6 g) |. B6 x5 W7 g6 {7 D
  956. STX Data_H
    ) w( f. ]) G2 |# A* X, {$ v
  957. LDY #$FF/ D' [% ^' }' f* C( u
  958. LDX PPU_Cur: D  R+ k' q; G* r- H! g
  959. DEX5 S# y' R9 l$ C/ z2 p# i
  960. PPU_Data_Beg
    ' T2 m1 x# f2 e) ~% ]6 Q: o
  961. INX  m- _, n1 M6 ]" l1 o* T
  962. INY$ @# R3 r3 t* `. E  ~% v" }- c0 W- k
  963. LDA [Data_L],Y; P/ o) K" ^; n8 b( n& P
  964. STA PPU_Addr,X
    1 K* o/ _9 \) O. h! F" Y# G) s
  965. BNE PPU_Data_Beg4 ^  ~6 K4 _6 n2 v8 u5 m. O2 h: G
  966. STX PPU_Cur0 B$ g; q+ Q* N9 a' q8 @0 r
  967. PPU_Data_End! G0 b- M' Q: t8 s! y* L4 l
  968. RTS
    + i+ k6 {2 p: n+ L5 j$ ?2 M4 S

  969. * r/ W9 L9 r  p- Y
  970. ;==============================
    4 j" n6 v8 h9 T8 q; _# v# x
  971. Music_Stata_Show;播放状态显示  @1 H  t. m2 O* ^. q/ ~) Q
  972. LDA Music_State$ h7 |; K( X5 K) h. j6 S, y& R
  973. BEQ Music_Stata_Show_Play
    3 e! @$ P* i! C  X9 [* r- k1 _
  974. Music_Stata_Show_Stop
      m( P" C* b3 J  b) {
  975. LDY #LOW(Music_State_Stop)8 [) v8 ^0 y& ]) {2 u
  976. LDX #HIGH(Music_State_Stop)( s( e6 N  h" A* t$ o: U
  977. JSR PPU_Data
    8 w/ N  t& @7 U: M/ r( p0 W
  978. RTS# h! u( h  S8 O+ W1 u
  979. Music_Stata_Show_Play
    9 N5 s, o: j# X" Y, O
  980. LDY #LOW(Music_State_Play)6 g" S9 v. T: e# d  c
  981. LDX #HIGH(Music_State_Play)" B# C  b3 h6 v2 V- R
  982. JSR PPU_Data' X. E( D, M  J9 y$ C
  983. RTS
    * r  E5 n9 i7 d2 Q8 h

  984. ! r8 S- L, [: V* v" v5 k: l! M+ P
  985. .IF SOUND_BAR_SHOW_ENABLE1 `8 N' W* a2 g( t3 M
  986. ;==============================
    9 D# E6 p9 r; y6 k/ _0 ^: }, Q5 o
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    ) f, v) E; a# [2 i5 [
  988. LDY #LOW(Sound_Bar_Text_Data)
    ( }9 `) L* v4 X' K% a( Y
  989. LDX #HIGH(Sound_Bar_Text_Data)
    6 @' C% C' X  z0 W  ?& p
  990. JSR PPU_Data
    5 r3 g% Z8 [% c: ]! m
  991. RTS
    ; s" \. ?5 Q6 N' T$ p7 t# R9 s
  992. 6 L; O7 r" f+ n) G
  993. .ENDIF
    " C' n) F1 ]4 ?* T
  994. / u' ]$ g& q/ c: ~# P, R) j
  995. ;==============================- C. U+ L4 B/ I3 Q* U2 d
  996. Set_NameTable_Attributes;设置命名表属性
    ; N0 k8 Y# F/ v2 X
  997. LDA PPU_STATUS" z. V9 y( ]% @
  998. LDA #$23. x1 e( M% j& X: ^" m' z
  999. STA PPU_ADDRESS
    1 a1 N/ P* L2 H1 n# Z8 P, Z% L& t
  1000. LDA #$C0
    6 H& `9 N, ^; b. ^3 c
  1001. STA PPU_ADDRESS* r% k2 @; }0 q7 J+ ?3 `/ @; g6 Z
  1002. LDX #$007 E$ x; M4 V% ~* u% k5 C
  1003. Set_NameTable_Attributes_Write
    0 I: L! q1 l8 v! m9 z2 H' O# ]
  1004. LDA Palette_Attributes,X
    8 ~  X+ j8 k' |" s: s7 F2 V
  1005. STA PPU_DATA/ q7 V4 P7 r5 e: u
  1006. INX1 ]: m3 g$ B/ V+ k2 ~9 _# O! m
  1007. CPX #$40  t& u. ~" C7 d! m
  1008. BCC Set_NameTable_Attributes_Write0 q9 D" F  `; F2 x6 |! h( c
  1009. RTS+ T8 v/ a# E' d5 L1 s# Q; o2 x7 U

  1010. 5 P, L5 r# N0 M: W9 l: F
  1011. ;==============================& \, O( X7 }( ?" V5 |
  1012. Set_Palette_Color;设置调色板数据/ J% F4 i/ @3 _; P% ^0 O
  1013. LDA PPU_STATUS
    + V! Q/ F; t: p9 U' m: H
  1014. LDA #$3F$ W0 L& U  s9 {
  1015. STA PPU_ADDRESS& T# Q/ \0 V* T4 e9 E
  1016. LDA #$00
    ) b. N8 w- f; z+ r: G% ]" E. D
  1017. STA PPU_ADDRESS
    / {: \( N: G6 a2 y) x! T
  1018. LDX #$00
    : ]& k* r" r$ b* q
  1019. Set_Palette_Color_Write
    . _; R' D& T5 G  }3 }, h, ~8 C# ?
  1020. LDA Palette_Data,X
    % V8 n5 g7 l: x' z+ w5 X
  1021. STA PPU_DATA
    " L/ Q( _8 b7 k" e, _. {
  1022. INX
    , }- q) Q0 F9 \3 @/ d
  1023. CPX #$20. T% q5 d/ C- a) N5 g7 m) W
  1024. BCC Set_Palette_Color_Write$ C, N& U; l3 \
  1025. RTS
    6 O3 z7 t9 M' w, w

  1026. 7 J: M" g- l3 n) U
  1027. ;==============================% H/ `+ R" Z. A# p
  1028. Init_Palette_Addr;初始化调色板数据3 p- D* Y7 b  S% K" a% E: d
  1029. LDX #$00/ [5 \+ \) ]6 R- [% o
  1030. Init_Palette_Addr_Write
    8 n+ x% A% ~& g& g2 D  ]
  1031. LDA Palette_Data,X- C! C6 J1 m4 h7 W; x
  1032. STA Palette_Addr,X
    5 f- ]: R" t) ~/ ~) @0 F, H! A
  1033. INX! p6 s! C( R0 X0 X2 ~( a
  1034. CPX #$20" q* Z% r$ M  i# Z
  1035. BCC Init_Palette_Addr_Write5 Z- w/ F) M: R5 m4 Q9 N( f
  1036. RTS
    - i1 V4 z& }. }8 G' D% X
  1037. 9 y7 I; y9 f* y. D- I3 W1 Q
  1038. ;==============================
      Y' y) t- a7 o. W1 R* r' W- a$ Q
  1039. Update_Palette_Color;更新调色板颜色
    & {; g  \% i6 {2 G$ f. i
  1040. LDA Show_Track_Name
    $ u* S( G; s2 v# q, ?
  1041. BNE Update_Palette_Color_End
    4 H2 M' ?) i$ m9 y- N, t- h
  1042. LDA Palette_Update_Flag# R# b# J9 _9 `4 u3 h
  1043. BEQ Update_Palette_Color_End
    " p: h' x  v8 b( F
  1044. LDA #$3F
    " q, w$ O/ e) a# T5 {: G2 }/ M3 V
  1045. STA PPU_ADDRESS
    . x# }1 {( N3 I! \* r
  1046. LDA #$00
    , i% h4 g1 Q+ u0 T: a9 Z+ \$ W
  1047. STA PPU_ADDRESS/ b! Y- s% |( b1 n3 k& B( t% h
  1048. LDX #$00
    ( r" S' C- V1 h/ ]3 u
  1049. Update_Palette_Color_Write1 b) a( a, \5 c/ H6 J. t3 p; y
  1050. LDA Palette_Addr,X
    1 i6 n4 C( |' ?2 L, F
  1051. STA PPU_DATA
    / Z" M. `7 f2 j4 @2 |; m
  1052. INX
    & o( |: z' }6 y% [6 t+ w; W+ M
  1053. CPX #$20
    1 J# B, B7 U$ U
  1054. BCC Update_Palette_Color_Write# F& \3 l; \$ M; M, i
  1055. LDA #$00/ B! w0 D/ o7 d, N- X! ?2 i
  1056. STA Palette_Update_Flag
    ' g: h8 j0 P! d( b& Z$ w, [* f+ L( Y
  1057. Update_Palette_Color_End0 J1 a8 I1 \% |) g/ [1 C- c& G
  1058. RTS8 u: P3 o- D0 T
  1059. 8 T7 Q$ w1 \  ]# s& Y6 u# m! C3 N
  1060. ;==============================
    ! Z& X% R% r/ j9 Z9 W5 v8 C
  1061. Update_Palette_Data;更新调色板数据
    * C; b7 S  j, x
  1062. LDA Show_Track_Name6 W. Y1 T9 l# _
  1063. BNE Update_Palette_Data_End( g1 s( S, k; G6 M+ [0 v% B$ Z1 j
  1064. LDA Music_State& ]' k: \0 k, C7 b  M2 m
  1065. BNE Update_Palette_Data_End
    + J  Z, `" H" `8 k- Y
  1066. Update_Palette_Data_Check0 N; E5 T; Z/ G; E( ]& P! S
  1067. LDA Palette_Wait_Cnt( Y' y- ?% G: G* [7 y1 J1 @
  1068. BPL Update_Palette_Data_Check_Over
    - Q$ e7 g0 G2 w) ?. {: L4 |
  1069. LDA #Palette_Update_Interval
    % s# Q  \" \5 N; T3 d
  1070. STA Palette_Wait_Cnt
    + k. b/ y: e* D# W$ }
  1071. Update_Palette_Data_Check_Over
    5 A( `: i' y. a8 j' C1 n
  1072. DEC Palette_Wait_Cnt4 C" }" C2 h+ p* b: Q
  1073. BNE Update_Palette_Data_End
    9 }0 a9 z8 {: L( ~& x
  1074. INC Palette_Update_Flag
    . e1 F/ q2 i" T
  1075. LDA #Palette_Update_Interval8 D" q' Q* u, Z. {( M
  1076. STA Palette_Wait_Cnt
    " i  T, m2 X4 p, m% e, l
  1077. LDA Palette_Update_Addr& a4 H  ^2 b" ~' J- W, o- P
  1078. CMP #Palette_Update_Max
    1 ?0 ]; ]0 L3 `9 q
  1079. BNE Update_Palette_Data_Set/ q! O0 r0 @) p; v# X5 H! }" p
  1080. LDA #Palette_Update_Min - 1
    6 g1 g3 ~' s5 P5 q9 n1 A
  1081. STA Palette_Update_Addr
    ( }6 N! K+ o0 g1 Y4 L( I
  1082. Update_Palette_Data_Set
    ' I+ B/ [: z9 }
  1083. INC Palette_Update_Addr* |% I8 S5 k* x4 x* a+ y9 _
  1084. Update_Palette_Data_End5 r& C& R% |% O1 x4 f, u
  1085. RTS$ {* V8 j$ s. D. M

  1086. % H: q- s  @' a$ [3 s: W, m
  1087. ;==============================
      ]) p: F9 J& r* z
  1088. Show_Music_Text;显示静态文本
    - N! {) p2 w' l* r( y% i. Z/ r" v
  1089. LDX #$00  J3 [& d# D; g
  1090. Show_Music_Text_Set
    4 h0 p/ B( g7 O3 e% ]- |( t
  1091. LDA Static_Text_Data,X
    2 |: x: u9 e- |8 H' J& z
  1092. STA Data_L
    $ `0 M0 d) H8 {+ k
  1093. INX
    ) w4 N* t3 I6 u5 R
  1094. LDA Static_Text_Data,X
    & K5 e0 a6 ^) M
  1095. STA Data_H( m6 ^$ O2 K- }
  1096. INX8 ^* F- R) P! o7 b6 f' A
  1097. LDY #$00& J2 p5 R8 y  D, D# h2 \* Y
  1098. LDA [Data_L],Y
    6 ~' v- d2 F- C) w7 i/ M" y
  1099. STA Data_Cnt
    5 A5 b4 j* d& H. N% l
  1100. DEX
    & W. p5 B8 \  v; |8 C8 `% X, l( w
  1101. DEX1 |* E0 q) _% j8 m* k$ H# x! x& B) \
  1102. LDA Static_Text_Pos,X( s, V# C# J8 Z# p+ r4 T; Q9 e$ C
  1103. STA PPU_ADDRESS
    ( X7 {' ^) v8 b8 J
  1104. INX
    7 P# ~2 f  [1 \) B
  1105. LDA #$20* n8 x9 h  U  O* O. @. H" F% h
  1106. SEC& s  j3 y" ~& \
  1107. SBC Data_Cnt
    ; m: @% H( P4 X* z. D( k# Y* ~' _
  1108. LSR A
    * h, g' s- ~9 H% v6 `8 y; p
  1109. STA Data_Buf
    % y; T0 W; D3 Y- p8 Y: j
  1110. LDA Static_Text_Pos,X
    2 z; V% s* Y# }5 M/ t- A
  1111. AND #$E0
    7 w5 b3 a) @0 I
  1112. CLC8 ?% ^' q& j% R# L" d
  1113. ADC Data_Buf
    5 x- g. m& g6 I3 l4 @& \: `
  1114. STA PPU_ADDRESS
    / E1 T8 d. G" I. N( J4 ?. S
  1115. INX7 M5 ]3 A4 N2 D' V+ G2 h3 x! v
  1116. Show_Music_Text_Set_Write
    ! p) _3 S/ D+ t
  1117. INY
    8 Z/ j5 j" D6 s! d! x' s
  1118. LDA [Data_L],Y
    ; n9 V! c* j- Q. X% b" ^
  1119. STA PPU_DATA+ m# t. K9 E4 f  x4 y0 }9 r/ r# }
  1120. DEC Data_Cnt
    ) q& U( k5 s, T5 `
  1121. BNE Show_Music_Text_Set_Write
    * ~$ z5 G# K* h. V
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos5 i$ b4 r# T( ?% h% l, {4 J
  1123. BCC Show_Music_Text_Set! W( `7 d6 k2 V" g
  1124. RTS
    " G! }4 ?% Z9 {& l4 Y% Z! x

  1125. . L- R7 }$ A. ^" z: e/ \) a
  1126. ;==============================
    - `! q% M" t! q! |9 r: e
  1127. .IF Track_Name_Pos;显示曲目信息
    7 `' ?# J# l* v; `% K5 E# J
  1128. Show_Track_Info) O% u8 f- K( v" v- U
  1129. INC Show_Track_Name! [6 Y" W. t- |. P2 ?5 W
  1130. Show_Track_Info_Clear
    8 H1 ^7 v4 `* O+ M
  1131. LDX PPU_Cur/ Z5 h0 G  @) i% f1 o
  1132. LDA #Mode_Clear1 T% {' ]% |5 `: ~; P
  1133. STA PPU_Addr,X! E# d8 _9 F7 f  c. x
  1134. INX3 K% U8 j" b) q: z* X" s
  1135. - J% E7 b5 e' g
  1136. LDA Music_Last
    / T3 ^0 i1 y! f$ n
  1137. JSR Show_Get_Track_Name_Center_Pos2 b/ d3 o; e# `" a4 v  I7 r& ~1 l
  1138. Show_Track_Info_Write_Cur
    ! M: S5 ^3 d( H' T
  1139. LDA #Mode_CntLine
    5 p; e' b7 a. O0 E+ T5 v6 t3 ^
  1140. STA PPU_Addr,X0 n( N' r9 U; U
  1141. INX
    . b" P/ ]6 ^0 m$ z7 y, l6 m  J

  1142. 7 B) x  v* t0 s. @  T7 x4 ]: `- o
  1143. LDA Music_Cur
    ' Z) u- O8 Q5 a1 x
  1144. JSR Show_Get_Track_Name_Center_Pos
    2 O  `/ e4 Q4 _2 w9 k( Q+ D  @: d+ G

  1145. $ g8 b4 t- Y+ X% z1 [1 @, X# X
  1146. Show_Track_Info_Write_Cur_Data
    7 B9 n. `! S$ ~8 k5 A& B3 F2 ?) K
  1147. INY7 P% K, q/ u, C* x0 z% k
  1148. LDA [Data_L],Y4 \: r/ O6 R8 Y0 D
  1149. STA PPU_Addr,X  B" |/ D  w$ B0 _; H8 p0 _' g
  1150. INX
    , }" q9 E: M. I9 T2 R
  1151. DEC Data_Cnt
    ; s5 ^4 t9 u) j; C* w2 d
  1152. BNE Show_Track_Info_Write_Cur_Data! |+ [1 e; C3 r; B3 h
  1153. Show_Track_Info_End7 T& M; s: R/ b& h
  1154. STX PPU_Cur1 L5 _" M  }5 e9 ~# w
  1155. RTS
    3 i; I9 Z: h/ d

  1156. 5 K9 u1 M9 Z* G4 W9 d
  1157. ;==============================" ^5 O! k! A, D( t
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置3 H: c2 O2 s2 m) P
  1159. ASL A! |, V' O! t. m- ~# n! G, y! I
  1160. TAY- M7 {4 g9 t! R/ m) b
  1161. LDA Track_Name_Addr,Y- x6 q  A2 S- Z# v# T  w
  1162. STA Data_L( a; w- [& x3 k. e: M3 V$ F+ p5 K
  1163. INY
    : p1 k: H' s1 _3 l' l" r
  1164. LDA Track_Name_Addr,Y, k" }/ ]- J0 u# ]# }% a" a. l5 L
  1165. STA Data_H. I$ a6 [' g' f$ [
  1166. LDY #$00
    - ]* d, t" G1 R' e$ T% v
  1167. LDA [Data_L],Y+ m3 w; ?( x; B" w( j& U
  1168. STA Data_Cnt* t4 v) c+ n% x) r. {. `
  1169. LDA #$20* M+ i2 J, z6 b% l
  1170. SEC) D, O5 @. c& p5 ~, B6 O1 M& t
  1171. SBC Data_Cnt1 F0 C0 Y- j# z5 ^* f& r4 S4 @+ y2 j
  1172. LSR A
    + k( y6 Z- ]2 X' Q
  1173. STA Data_Buf/ x# `- d% [2 G, |5 @
  1174. LDA #HIGH(Track_Name_Pos)
    ' m- }) N, R( C  ~2 g. p
  1175. STA PPU_Addr,X% b7 }/ ]- b/ q! ]6 H! y
  1176. INX
    % h: I. U9 q. G6 x7 C1 J& Q
  1177. LDA #LOW(Track_Name_Pos)( A' L0 ?0 U, i- a
  1178. AND #$E0
    # O. e# c0 Q8 Q* P% p8 r, D! P6 Z, L
  1179. CLC. q3 Q: f9 ^: f9 ~" D
  1180. ADC Data_Buf
    / ?  g  s9 ?" s& a: s, C  n) U; R
  1181. STA PPU_Addr,X3 O! {& t! G: V* e( [0 i; o& U1 y
  1182. INX0 n, c) c$ w7 t' |) n- Q/ m
  1183. LDA Data_Cnt5 ]# x0 |: Q5 S; t7 }$ G6 \
  1184. STA PPU_Addr,X9 C3 k: m  Y  G4 e
  1185. INX
    4 r9 y+ U1 s8 s) R; _! ~+ h) o
  1186. Show_Get_Pos_Center_End/ q& [5 m& ~3 o, c5 O- o+ i4 y  L
  1187. RTS  x3 c9 A/ C9 A1 m
  1188. .ENDIF
    & {3 X  e' M' W9 `! J) S

  1189. + g: B' \2 V2 n
  1190. ;------------------------------
    & w( a! U" ]) ?% o
  1191. ;命名表数据5 y  f  e0 s' |1 t' B: p7 V% P3 W- {
  1192. Palette_Attributes7 i% T/ ?9 D1 J/ P6 S, o2 g* B: ?
  1193. .IF SOUND_BAR_SHOW_ENABLE, t0 w! `6 s, O
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00$ i! ?6 z6 N/ U  A+ D: _
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    7 I4 n( Y/ f( v. Y+ P
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    ( a6 K+ Z& g- X, c1 Y& X
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55$ }( C. p6 s, Y; b2 ~1 l
  1198. .ELSE
    6 T$ b/ `  _) _4 E& k- Z2 h
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00. G& H$ C# V+ h, i
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    : X6 _* ?1 g. Z7 K# j$ ^
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
      c7 }$ F" X4 m+ m$ Z1 ?7 p3 a
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$555 ]' d8 [& v3 y  r4 H+ r4 k/ o
  1203. .ENDIF9 T( {* |  J- ?7 j1 c% n

  1204. 2 M+ E  H/ y* N7 m) x& |) b# K0 \! M
  1205. ;------------------------------
      w6 C7 c; t& }5 a3 d1 m
  1206. ;调色板数据
    7 P% d# B) E# F
  1207. Palette_Data% H! s1 d; z( r  K! O; F. L
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    / V) Z, q' v6 {+ ?& Y* _
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    8 R  r$ [% a9 W6 `

  1210. . x7 [" S: N# g. @$ o4 F/ l
  1211. ;------------------------------4 n5 I4 E) F9 S& J5 f* k2 @
  1212. Static_Text_Data% ?+ M7 R  u1 U, n
  1213. .WORD Static_Text_Title_Data& s. X$ J& U9 }, |4 _
  1214. .WORD Static_Text_Author_Data
    & g+ I- t! Z; b& p. _# U1 l  c) C
  1215. .WORD Static_Text_Date_Data
    ( T0 }; ?5 A: l- t
  1216. Static_Text_Data_End
    2 t6 y; a" u7 k
  1217. / l- E; ^5 f: }6 b2 f2 ~
  1218. ;------------------------------
    1 T. |* f2 f  }" r* ~: g
  1219. Static_Text_Pos
    , {) Z) x: V" X2 j7 k& @" I" f
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)' y$ s; v; Q. A7 G
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)' Z& b! e, L/ p3 @
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    3 }* N( g& I$ a! q3 J
  1223. Static_Text_Pos_End) @. ~0 D: |4 t; ~, B" f

  1224. / v' u$ n6 b/ L
  1225. ;------------------------------6 S+ J1 `, i2 _7 B! l
  1226. Music_State_Stop
    ( z/ c; S4 S6 y. H: L
  1227. .IF SOUND_BAR_SHOW_ENABLE  o+ p/ ~% B1 V! ?. Y2 V
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    ; w4 p6 h$ y2 N/ u0 F
  1229. ELSE
    7 s0 Z5 \) B; y! }4 `
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$003 M" m6 T, w/ m
  1231. .ENDIF' n& ~- G2 |) ?0 y" R
  1232. Music_State_Play/ G0 p5 z6 ^! I# L) J# I& K$ ?# k
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    . h$ g& C- g3 R, A8 }7 y8 m
  1234. 7 m9 @- |$ H4 Z# O6 y$ x
  1235. ;------------------------------
    - V1 W9 V1 ]/ z9 p' d7 w/ E
  1236. Sound_Bar_Text_Data;声音类型文本/ u- K  l) P% F3 m
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    ( Y4 `. I1 C) W, N. V
  1238. .DB "SQ1-",$FF
    * m% l  @% b7 v0 u, k; J
  1239. .DB $FE,"SQ2-",$FF" ^+ P/ ~2 Y9 ]+ W5 \' _2 ^- ]
  1240. .DB $FE,"TRI-",$FF
    ' r' F% M0 @# C; [0 _
  1241. .DB $FE,"NOI-",$FF' ?6 a0 Z' Y, K
  1242. .DB $FE,"DMC-",$FF,$00
    2 c" {  [% p* Q2 o0 P* ?: O

  1243. # ^/ X1 M8 U; |( y3 g6 G
  1244. .IF Track_Name_Pos
    # D* A0 Z5 O1 w8 z5 ^
  1245. ;------------------------------
    : T1 R) w4 W. i+ M
  1246. Track_Name_Addr;曲目名地址索引1 d/ B) o$ I% M& @: ?
  1247. .WORD Trackr_01" Z- {$ N' a, B
  1248. .WORD Trackr_02
    ( @' Q& S/ O6 D, X. k( D0 O7 q5 z
  1249. .WORD Trackr_03. @* q" b  r3 Q% y% ^2 P/ p$ u
  1250. .WORD Trackr_04+ P. K' K- a5 K) R
  1251. .WORD Trackr_05  @( l/ n0 E0 ?- J5 h
  1252. .WORD Trackr_063 s8 B' F; Y; P
  1253. .WORD Trackr_07) v9 I3 d' T! g8 j" E
  1254. .WORD Trackr_08
    & |+ S# X7 |1 \
  1255. .WORD Trackr_09
    1 f  @2 o/ i* a( c/ G6 _
  1256. .WORD Trackr_107 ]( J$ y: R6 G9 _) W4 Z( w
  1257. .WORD Trackr_11, T' H3 T. L) l3 J
  1258. .WORD Trackr_12
    ( `" f% j: d: v8 S
  1259. .WORD Trackr_13. |2 n; O  c7 L! F) T) @
  1260. .WORD Trackr_14
    9 ^4 V+ X- b3 y2 e8 @. n& m3 i/ O( S
  1261. .WORD Trackr_159 N) v# m# y" W' [, S
  1262. .WORD Trackr_16( [# z5 j( y# _/ m7 m, ~- I
  1263. .WORD Trackr_17+ X8 i& u% B# |" Z4 o
  1264. .WORD Trackr_18' g1 r) g) ^/ r0 Q4 z$ H
  1265. .WORD Trackr_19' ?) q) A7 U5 i! J. U/ U
  1266. .WORD Trackr_20( i) g. B* _5 S# a/ a+ {8 y2 K
  1267. .WORD Trackr_21
    9 `  A5 \+ r. p, `0 x& p
  1268. .WORD Trackr_22" A& b5 F, {) n
  1269. .WORD Trackr_232 i/ C8 L. _  A' z2 c
  1270. .WORD Trackr_24
    8 C* K4 z9 G/ z/ g
  1271. .WORD Trackr_25) K7 f$ d+ d/ }/ @& g0 T
  1272. .WORD Trackr_26$ A3 N3 C8 ?8 J
  1273. .WORD Trackr_27; g. ?; u% O0 w- }$ b( g
  1274. .WORD Trackr_28
    7 o+ W% M2 K; O5 y+ X! y2 u; t
  1275. .WORD Trackr_29" t) f" b& [7 E1 @% |5 E6 ^4 ^
  1276. .WORD Trackr_30
    ' i, E: l+ x# Z+ n3 P( z' W; z, w
  1277. .WORD Trackr_31
    . n" o3 a" _  M0 D9 `
  1278. .WORD Trackr_321 G$ c; P6 J- V: ^; y
  1279. .WORD Trackr_33/ F0 ]' `4 p* Q
  1280. .WORD Trackr_34
      R& i. r6 J5 Y5 I3 B& y6 t
  1281. .WORD Trackr_35
    4 ]' p" U) H. O) E' Q! ?9 E
  1282. .WORD Trackr_36( h0 N2 F9 s  U6 y, W( m
  1283. .WORD Trackr_37" w3 x# S1 A5 E2 S/ |; ]$ m% J
  1284. .WORD Trackr_384 N- W& b3 u' w6 Q
  1285. .WORD Trackr_39
      E7 Z/ W1 o* w2 Z; N, I. z8 X

  1286. 9 r5 t: a8 E" s0 u. z- ^
  1287. ;------------------------------+ n( W( X, P0 o$ X. q" ^
  1288. Trackr_Name_Data
    & c* @( J1 f. p4 ]  r
  1289. Trackr_01 .DB $05,"BGM 1"5 O; K2 i$ v! F9 o  G
  1290. Trackr_02 .DB $05,"BGM 2"0 p# ~* C$ E/ r: b' D
  1291. Trackr_03 .DB $05,"BGM 3"# b, W# D9 I/ @; S& F
  1292. Trackr_04 .DB $05,"BGM 4"
    / D4 j0 Z4 ^$ B0 C4 R# G# }! `
  1293. Trackr_05 .DB $05,"BGM 5") h4 q$ m4 A4 F2 P2 {9 E% e
  1294. Trackr_06 .DB $05,"BGM 6"
    . ]) J( I6 I" C" L. x
  1295. Trackr_07 .DB $05,"BGM 7"
    & h# I3 k- E$ A6 s, f8 `' A" g6 ?
  1296. Trackr_08 .DB $05,"GREAT"1 w% d# [! W4 o7 y' @& {# c
  1297. Trackr_09 .DB $08,"BOSS BOM"
    . n' [' |2 ^) x% G; r4 \3 c
  1298. Trackr_10 .DB $08,"BOSS2BGM": J, x0 o' X) |
  1299. Trackr_11 .DB $07,"P CLEAR"
    # M/ @" M% ], H  l( O, k: e3 }
  1300. Trackr_12 .DB $07,"A CLEAR"
    1 i4 I* o3 P& d5 E
  1301. Trackr_13 .DB $04,"OVER"
    : X3 A6 [- b. X! q( L* G& x
  1302. Trackr_14 .DB $06,"ENDING"
      A6 S% Y* k2 [$ `+ x% Q
  1303. Trackr_15 .DB $04,"SUTA", N9 V/ t& o) [5 n' g  p
  1304. Trackr_16 .DB $07,"THUNDER"3 j- v, X$ A; y2 m& }5 o
  1305. Trackr_17 .DB $04,"SHOT"' n4 L- P3 R! P3 d( u. a
  1306. Trackr_18 .DB $05,"LASER"1 W6 t( @- K& A4 G( ^! N
  1307. Trackr_19 .DB $06,"SPREAD"/ w: _1 E( c8 |  @! O! a! }
  1308. Trackr_20 .DB $04,"FIRE"
    ( T8 Z. o7 M: M9 H: @, k
  1309. Trackr_21 .DB $06,"B SHOT"  @9 l' [2 v7 g& A
  1310. Trackr_22 .DB $08,"T DAMEGE"
    % p- t3 f+ O+ e5 [; @/ y
  1311. Trackr_23 .DB $07,"HARETSU") G. d. ?3 O0 T) \* f
  1312. Trackr_24 .DB $05,"T OUT"
    / _" U; a- c6 K* y
  1313. Trackr_25 .DB $05,"Z OUT"4 X3 l! G; _1 A( W7 f& J
  1314. Trackr_26 .DB $05,"A OUT"6 j9 r! {7 N: o, }8 Y, [* f, `
  1315. Trackr_27 .DB $04,"ROLL"
    2 N  |/ E7 _0 e+ Y
  1316. Trackr_28 .DB $06,"APPEAR"
    5 v/ }" R' G& j  i2 ]8 u/ z
  1317. Trackr_29 .DB $05,"POWER"; N0 P8 j. A9 k" c% c0 n& H
  1318. Trackr_30 .DB $07,"BOKK BK"4 o6 c: ^# \; ~3 I! z9 G' I/ X
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    / _7 J, H3 C  w, l
  1320. Trackr_32 .DB $08,"BAKUHA 2"* }* s3 F9 D- a
  1321. Trackr_33 .DB $05,"ARUKU"
    - a- g9 p. m- p7 z
  1322. Trackr_34 .DB $06,"JIWARE"
    / f" A0 g& b4 l# I' r$ u
  1323. Trackr_35 .DB $05,"SILEN"& X  H5 w$ i2 Y) w
  1324. Trackr_36 .DB $05,"P 1UP"
    - Z/ C/ k, \; u! G) s0 _
  1325. Trackr_37 .DB $05,"P OUT"
    , {* E3 ^$ X6 M- b8 Q! s' J
  1326. Trackr_38 .DB $05,"B OUT"# D0 B7 P& H2 X7 e8 d' [
  1327. Trackr_39 .DB $05,"PAUSE"* g! j; M& G' F7 _, _' K* j# R

  1328. ! T( l+ g8 \$ n$ _) u
  1329. .ENDIF
    . R( R" T7 A/ v3 A0 s( e2 y

  1330. % H" U5 Q. H0 d
  1331. ;------------------------------
    ( D9 C' n0 [8 M2 `
  1332. Static_Text_Title_Data;静态文本数据
    9 z4 Y" W* o7 E' J
  1333. .DB 12
    + W- k# i: f% W; Z2 A
  1334. .DB "SUPER CONTRA"  S+ S0 |- O. Y: i# P
  1335. Static_Text_Author_Data; F* C( D' G2 E1 U) ?4 V% z# Z
  1336. .DB 23
    ' Z+ \+ O( J+ Z
  1337. .DB "EXTRACT BY FLAMECYCLONE"/ P- n3 Y% R" R. C9 m$ L6 ]
  1338. Static_Text_Date_Data
    5 Z5 }$ E5 [* t3 S3 O3 _9 j3 F
  1339. .DB 100 f: R% n3 Z9 L4 ^9 W
  1340. .DB "2023.07.11"
    3 w( i7 n/ H3 ?! ?) c  d

  1341. ' R0 |' x* m$ e  T/ z3 Q- l7 g
  1342. .BANK RESET_BANK & BANK_DATA_MASK
    8 ?6 W9 W" K+ O! V4 {
  1343. .ORG RESET_ADDR
    * M2 S$ ?7 k% Y! l4 E

  1344. - K; Y1 m' v& t- s7 z! K/ N
  1345. . K% ^" L2 k. j4 A7 a" x4 Z  T' o3 ^
  1346. ;==================================================
    6 n$ C# R+ ?8 U
  1347. ;切到主程序bank9 y* A7 o& F# l1 Q  ?* [
  1348. SwitchMainBank
    " q9 Q# q" @% L
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK; d3 S6 ]- c1 w$ m+ a" s) c
  1350. JSR SwitchBank8000
    . }7 W, Y. t; J% a
  1351. RTS  M9 P  B9 y+ O1 D

  1352. 0 ~' ^8 v8 o. H9 d4 H
  1353. ;==================================================% [: i# z9 Y! Z& E/ ~: P
  1354. SwitchBank8000;切换bank到8000-9FFF0 H- ]0 _5 ?$ O1 u
  1355. PHA6 y+ b( n# Q) i. u
  1356. LDA #$06
    ) x' p; q) o! h1 s
  1357. STA MMC3_BANK_CTRL
    2 c6 E2 h, w$ F8 o. ]$ Y- v
  1358. PLA: T! T0 Q2 v: s" I/ P4 p: ]
  1359. STA MMC3_BANK_DATA
    8 z) Z$ Q9 q; v4 v
  1360. RTS
    5 P! X& Z% {8 n# ^. |

  1361. " p$ {4 j2 K, j0 x) |) ?0 Y3 e) c4 R
  1362. ;==================================================
    7 ?+ R3 V! `) Y+ m1 e
  1363. SwitchBankA000;切换bank到A000-BFFF1 _7 ]! v, [6 C7 y: V* |
  1364. PHA; j. u$ y9 T1 F- L0 D& Y
  1365. LDA #$07; ~3 g  U2 l! L/ R/ p4 X7 W
  1366. STA MMC3_BANK_CTRL8 e: O2 s$ y0 V3 b/ A
  1367. PLA
    + y; f. `. t* U  C; w
  1368. STA MMC3_BANK_DATA
    5 D/ W! B+ G) Q. c9 `( \5 c
  1369. RTS) L* _! n+ a+ ~6 S3 C+ G% T# ?

  1370. ) \, @! C% `4 Q% Q$ v) X
  1371. ;==================================================
    - N+ G# Q' M; ?/ v
  1372. Sund_Bank_Init;音乐bamk初始化) r" \$ t( y& L5 N4 N) s4 w7 M
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK6 ^. y' P% z- Q' l
  1374. STA Music_Bank_80008 y3 t/ z/ T; F8 [/ i
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    - N$ j4 G, _# A7 r7 q
  1376. STA Music_Bank_A000
    8 J5 ?  ^! w) c9 @/ S4 `" s
  1377. RTS
    $ @. e7 Q: I# X3 w& r
  1378. & ], ~& E2 m! g7 H9 {
  1379. ;==================================================3 H1 ^) B( H  T! a+ d. u% x* D7 }
  1380. Sund_Bank_Set;切换音乐bank
    ' W; R4 s% y6 g
  1381. LDA Music_Bank_8000
    1 y/ Y8 o. L$ ^8 m* ]
  1382. JSR SwitchBank8000
    5 S, z8 m# }2 o" v1 y( z5 T
  1383. LDA Music_Bank_A000
    # v8 Z( o0 S9 t9 y; V8 [: a1 H) P- V
  1384. JSR SwitchBankA000! O  _' J3 u* K3 E' l
  1385. RTS
    6 ^3 }9 C4 `. ?! E3 M

  1386. 5 X2 Z' p) S7 h7 F# @
  1387. ;==================================================4 @" W8 o: V( m- {: F4 t3 l$ y
  1388. Sound_Init;音乐初始化
    ' q* _. y' o9 V3 L$ G* D* h# c: L
  1389. PHA7 Q4 L, F1 w/ Y8 y
  1390. JSR Sund_Bank_Set" y; D2 J3 Z7 E2 a# e9 L  m0 L! K
  1391. PLA
    # h6 B0 D9 L+ Z8 [# O
  1392. JSR Music_Init_Addr
    0 B2 q# ]7 Y/ M$ L, Z8 }/ N% v
  1393. JSR SwitchMainBank
    : A& C0 U- R3 d# b. T
  1394. ( ?* S* l" |' D2 N5 u
  1395. JSR Music_Bar_ReSet
    $ R: i" O8 m0 S% m" ]
  1396. JSR Time_ReSet
    8 P/ L& f# g/ m
  1397. LDA #$00
    ! ~+ T/ _( n- K. ~% y7 f; J6 R
  1398. STA Music_State4 v* l$ f. q4 a
  1399. JSR Music_Stata_Show
    0 T# _+ ~4 ^* K
  1400. .IF Track_Name_Pos: n  z0 m7 _; W3 Z" F' q
  1401. JSR Show_Track_Info
    5 ^! y; l8 V# n( ]" O: g
  1402. .ENDIF+ J. O6 P3 x" ^# m7 f" w' \: T

  1403. 5 h2 ]3 D% O) A2 f
  1404. RTS* c5 [2 E0 [4 X4 c) W4 z: |
  1405. % q5 l+ s- O& D8 g- b4 K1 \
  1406. ;==================================================
    / y8 h* W, q5 z; y6 l- P
  1407. Sound_Play;音乐播放4 n1 }8 Q1 ^  i+ H
  1408. PHA$ ~6 Y! e9 V' H7 G( W) g6 `9 _
  1409. JSR Sund_Bank_Set/ T: c! H: ~  j- A' Z8 m5 V
  1410. PLA- S, C$ F! [# ^" j
  1411. LDA Music_State; y; F0 ?  N4 @& W3 ~
  1412. BNE Sound_Play_End
    ! w3 x3 z; g/ J+ T% p& L
  1413. JSR Music_Play_Addr; P4 @) W. J6 k7 ~' J- s! u: S
  1414. Sound_Play_End
    " r9 {" G' Z# J) z' h
  1415. JSR SwitchMainBank; {5 Q! |6 l7 d! j% |
  1416. RTS
    2 B$ A: ^4 N0 k

  1417. 9 g' V: ^" @, ]$ ^& Y8 Z9 E! X' U
  1418. ;==================================================' `0 M" F* v1 E6 J( i
  1419. .IF Music_Reset_Addr) g8 V) U4 C/ N6 \  V
  1420. Sound_Reset;音乐重设(如果有的话)" n& `3 O  n0 j6 M
  1421. JSR Sund_Bank_Set
    ( I3 n: T) ~) c$ I" s
  1422. JSR Music_Reset_Addr9 p1 X! J9 g* G5 E) Q
  1423. JSR SwitchMainBank0 p/ D6 ^6 j5 }# D  @0 b$ \
  1424. RTS/ Z) t2 K( \& ^3 h
  1425. .ENDIF% d( u9 s/ j# n' A; t

  1426. 5 T' ~7 |6 x# {3 H: Z" \
  1427. ;==================================================6 k* G# J, u+ K) I
  1428. MainLoop;死循环* N4 ]3 n8 h4 {; u8 B4 H
  1429. JMP MainLoop
    : [  p; Z1 b( _4 {( t) ~
  1430. , H. k/ P& b' f+ L  y9 G
  1431. ;==================================================
    / P3 b$ h, ~1 n6 s7 F2 I7 A7 V
  1432. NmiProgram;Nmi中断处理$ `- O& K. f8 T+ m, S6 ?4 b
  1433. PHA
    " B  r& e6 S. k$ m( }+ T
  1434. TXA3 S$ {/ `* M* d4 ~+ _+ _
  1435. PHA
    0 I1 ?, l3 q5 ~, [0 l
  1436. TYA
    1 k8 P  d$ P) q* ]% o  u9 K
  1437. PHA, ~1 z0 z8 E9 m/ b$ R% A
  1438. % K# k2 r6 S3 j( i
  1439. LDA PPU_STATUS
    4 K& m' x3 O0 _3 W& m% I' v+ S  `  z
  1440. LDA #$00' Q6 _8 m" t8 X5 d2 C+ r3 u# L+ p" _
  1441. STA PPU_CTRL. R" U! j5 C5 k
  1442. 3 H& H5 Z& u& C* Y5 m1 n
  1443. ;切换主程序bank& \" B: R! e. j& }! h
  1444. JSR SwitchMainBank3 g4 H4 H6 ~  P! q% q  G

  1445. : e' g" F1 ]* j; J" {' |
  1446. ;NMI处理
    % d4 U1 P8 Y1 b4 y. G+ D
  1447. JSR NmiProgramProcess
    5 h) v6 I" _; N
  1448. $ S  G6 ]- ]' G4 p* |: N- R
  1449. Nmi_Proc_End) ]/ V; N4 F& U: n" d# Y
  1450. PLA
    % p( k9 C7 T9 ~0 c
  1451. TAY
    1 f4 e1 Y( u( Y- i2 e8 M5 x! k
  1452. PLA8 i0 q/ f5 g# E# A, _
  1453. TAX
      o3 y" m9 X6 d; u
  1454. PLA
    3 x2 J* ]" V7 B% ~, s: T- t9 W- }, d
  1455. , `. L+ {- t) m; }
  1456. RTI
    ( m  W; A$ W0 N7 ^7 G7 N" L: h

  1457. 0 j  ~0 L2 N* x; W: D  `3 V
  1458. ;==================================================
    . B% S) }" S: u2 G) r$ G
  1459. ResetProgram;重置中断处理
    8 q. ?7 K, f  S; w
  1460. SEI4 z6 d9 C' k  A1 v1 S; z$ m3 Q
  1461. CLD
    : \) ], g2 i/ F! \( T% g
  1462. LDA #$00
    % W3 H: Y& L; O8 q5 Q: {5 L1 W# y
  1463. STA PPU_CTRL: Q' R# K* ^$ h6 o% s
  1464. STA PPU_MASK
      v+ f- I9 X. g. [( g
  1465. - S  R4 u. Y& k7 Q- X; Q; n
  1466. JSR SwitchMainBank
    . U  \# i# l( g* _
  1467. JMP ProgramBegin
    . f+ R, Q' g- O/ Z( x, K7 v: Q  B

  1468. ( T% P" q/ x5 m5 k6 i4 n
  1469. ;==================================================) ^3 i! ]$ A* b) a
  1470. IrqProgram;Irq中断处理
    . t* E' c/ p. y9 e6 U* G
  1471. RTI
    9 B! N2 a! F6 n; U* D
  1472. , z; x$ x7 n+ t' c* u* N' ^
  1473. .IF SOUND_BAR_SHOW_ENABLE
    / n' ]9 D3 `* p; Z$ S
  1474. .ORG $FF805 ?" K( T' P7 {9 _& _
  1475. STA $4000,X
    ; b0 R# [0 l8 C2 }# M) b& O8 @$ J
  1476. STA Sound_Bar + $00,X
    , `1 K) ]: X, j/ l6 H$ L" P# ]
  1477. RTS0 a# S* q9 `7 f5 c3 ^
  1478. * u8 I5 [* M- D+ U: X8 M) E
  1479. .ORG $FF889 i+ H: c' h' ^, g
  1480. STA $4000,Y
    ) |7 @" K- |# d# d$ \7 t; f5 Q5 x
  1481. STA Sound_Bar + $00,Y( Y; N9 X* T0 n4 V) ~/ k3 g
  1482. RTS
    ! I3 O- e. T: S, F& d# _  M
  1483. % Z: D- S' t: w- |8 |1 x$ S5 g) `8 f- S
  1484. .ORG $FF907 P' D8 z; A  r. V
  1485. STA $4004,X
    # K7 r8 ]5 e; C& g$ B0 ?
  1486. STA Sound_Bar + $04,X' f# v! E$ q( A9 r3 q' K+ B
  1487. RTS$ e5 w& ]/ \* l

  1488. . \) }. J8 b. f3 k# E5 ]0 u$ V
  1489. .ORG $FF98
    " [# R1 e- i# x+ [2 r3 T
  1490. STA $4004,Y
    $ f" x* X, |, m( _- U$ }
  1491. STA Sound_Bar + $04,Y& D4 C5 f9 G/ }, d1 x
  1492. RTS
    : S; [2 j7 s1 n, I

  1493. 5 I4 |3 t! h+ i- g) i3 W1 g
  1494. .ORG $FFA0
    - ?8 N0 e1 |0 o
  1495. STA $4008,X
    2 x4 i3 \1 ?4 W" m( I
  1496. STA Sound_Bar + $08,X5 w4 K5 l% r8 ?7 j/ m# y% }$ z9 I
  1497. RTS
    2 |, u6 r  ~- k, z& C

  1498. * a1 G* |9 s# y* m. U
  1499. .ORG $FFA8
    0 ^" b2 Q4 v* `7 e3 l2 i7 t! O6 {
  1500. STA $4008,Y8 g8 k7 b1 ]8 H- x7 c$ _; r
  1501. STA Sound_Bar + $08,Y
    9 ~0 R- x( q, P
  1502. RTS
    ! o" ?/ q+ R/ R! c" K! ^

  1503. % ?. h& B4 d* `- ?1 [- X% D
  1504. .ORG $FFB09 {' M) L! t+ l8 o' S& _
  1505. STA $400C,X# e9 W$ y3 b$ R1 z
  1506. STA Sound_Bar + $0C,X
    3 j* r, d6 q* l
  1507. RTS6 j/ b- {( o- P# p  O1 x! t
  1508. 2 e" d! X+ H: Z  [
  1509. .ORG $FFB8, |9 X+ V. G, Y9 s- i3 G
  1510. STA $400C,Y5 y  h4 O  w( ~5 t- p" y
  1511. STA Sound_Bar + $0C,Y( _- g" V8 c/ \& H
  1512. RTS% E& T- f; j8 q: x0 Z( A

  1513. $ J- G, o4 V# o4 P7 a
  1514. .ORG $FFC0
    ' w, f# s* n  j' \! H; Z
  1515. STA $40009 w- Y. H5 |, f
  1516. STA Sound_Bar + $00. _; ]6 J- K  x: Q
  1517. RTS5 l9 {; R$ s) s

  1518. : ^- `7 k7 V2 ~# O3 b
  1519. .ORG $FFC8  f1 ]6 R4 P& O! L, G! f
  1520. STA $40043 i* C2 }; g. F: c8 z" E
  1521. STA Sound_Bar + $04
    2 M; e* p9 J7 X% }3 E  D* F
  1522. RTS, T& z, w5 m! f9 C& Q" ?
  1523. & B. Z, _- y. A
  1524. .ORG $FFD0
      \/ c  P& ]. W4 W( c
  1525. STA $4008
    8 j1 n: \3 R0 {+ L
  1526. STA Sound_Bar + $088 E! P* O+ H. j
  1527. RTS
    " L! t6 s' s. I
  1528. # h7 }" Q3 D' q5 D
  1529. .ORG $FFD8
    + p) W9 P0 E2 h/ k" n
  1530. STA $400C
    2 p0 p5 L0 z- r$ w
  1531. STA Sound_Bar + $0C
    2 p2 J* C  e9 d
  1532. RTS# _8 d( m+ {) R0 U+ q. Z

  1533. % y: `2 o. G% O
  1534. .ENDIF, i6 o) R& Y0 ?9 s3 s
  1535. ) I( N! s+ c4 y: k/ c
  1536. .ORG $FFFA
    2 O8 R' A5 M6 M7 b, w4 s8 T
  1537. .WORD NmiProgram- }: G# z; O4 |  ~" i% G( M8 ^1 Z
  1538. .WORD ResetProgram
    9 I1 \. r! |. h
  1539. .WORD IrqProgram
复制代码

$ n% m4 U, f+ V8 F& t# }9 J# l0 |' Y. [9 ~% |
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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.096680 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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