EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 ! d" ?+ s) @6 c1 H+ V: Q
+ i& p, I6 f( Y0 l) n! t
1.魂斗罗* ]3 Q. C7 T) E' ?# i8 S/ c
2.超级魂斗罗
/ R$ ^# l, G9 ]% C; K, q3.赤影战士
& Z" r! l6 A! g. n2 w4.忍者龙剑传2, E1 V1 l+ ?7 |- [+ k! C: T

% H1 \$ {3 S$ T: Q+ t( F/ |- A
3 [  H# d! V1 n
$ R. N1 p6 z; a
1 n& f& C; Z0 x9 c! H9 [源码:
0 M! r/ c: @/ I: K7 H- D
  1. ;[FC音乐][播放器模板], k3 O: b6 K- D: d
  2. ;FlameCyclone 20230710
    : `6 t5 S2 K$ P( Z7 ?+ K# ]* V5 \( `

  3. . e* i- |! _" e& {- k8 M, j+ j0 i
  4. ;文件头) q1 o" t. R, M
  5. ;======================================================================/ @& F+ C& ^6 k& O9 E2 {
  6. .INESPRG 4                                              ;16KB PRG 数量2 N  X) p' _- g3 Y: a5 t# {& H
  7. .INESCHR 0                                               ;8KB CHR 数量  M+ j- X% g- X+ H! U" B; {
  8. .INESMAP 4                                                   ;mapper 4
    9 w" C4 E2 W7 K2 q/ g3 Z: w
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直- _' ~) O* ^/ n0 n; ^0 k: a6 Z6 R
  10. 8 ?( _" p+ t" F7 j( W! E
  11. ;==================================================
    + n" u) ^0 E: T$ |4 r: ?# s! ^
  12. SOUND_BAR_SHOW_ENABLE       = 1
    - ]' L. A$ ?; |% W1 |( ^
  13. ;==================================================
    2 S8 d4 v) k/ U: F9 D' G
  14. BANK_DATA_MASK              = $076 P  C5 ?. I6 s. @
  15. ;==================================================( d, v; i; p( Q
  16. SOUND_DATA_BANK_0           = $000 ?& N. w5 Y/ v
  17. SOUND_DATA_BANK_1           = $01
    7 U3 D/ M; ^- Z5 `9 K. g
  18. SOUND_DATA_BANK_2           = $02
    1 C* B% q. G2 R! R% e/ Z
  19. SOUND_DATA_BANK_C000        = $06
    9 h* X6 S5 H* U8 V( w6 Q
  20. 7 h9 p8 z2 ]& J6 K
  21. ;-------------------------------------------------& B) ~( M; G6 j( ~, c2 ]; a$ i
  22. CHR_DATA_BANK               = $04
    # [# w& p  q( _  i( X7 G( ^9 ^
  23. CHR_DATA_ADDR               = $A000* e$ S0 l7 _' {0 g8 R
  24. ;-------------------------------------------------
    / H9 F6 p% Y' E) K9 K) h
  25. PROGRAM_BANK                = $05( t$ V5 e8 J+ p) c* y, }- Y: I" F
  26. PROGRAM_ADDR                = $80004 ~* l* V5 e9 Q; r5 [
  27. ;-------------------------------------------------. u! E" Q( g  C3 w7 j
  28. RESET_BANK                  = $07
    1 i4 {9 y, H3 k7 o4 C4 i. ~0 m
  29. RESET_ADDR                  = $FE00
    3 c( {- i: L# P' v( J; c, c4 W
  30. ;==================================================, p& K  D, s" m$ J
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址% J8 H* K! {1 t1 g0 G. Z9 Z6 y
  32. Music_Play_Addr             = $813C ;音乐播放地址
    * P  s: f! [, e/ ]( R! e& t
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址, b* U& Z! Z# t; r8 I
  34. ;==================================================
    - T% [* ?! I9 C
  35. Music_Song_Total            = 039  ;全部曲目总数/ q' \4 t9 w9 s; p( U# b
  36. Music_Start_Song            = 007  ;初始播放曲目
    . d6 X8 D; [2 m
  37. ;==================================================: O1 B  F4 c! s+ _/ }( b
  38. / k* a+ _* w# s4 ^% i6 L7 A. Z/ g
  39. ;==================================================
    ! ]. T( T' W& j! t* o- U
  40. Title_Text_Pos      = $210D ;标题文本位置7 r: r+ P  J+ L- a3 H
  41. Author_Info_Pos     = $2284 ;作者文本位置
    9 h/ r1 S5 q+ Y6 ~( t7 T
  42. Date_Info_Pos       = $22CB ;日期文本位置$ i0 y% d: Z% E  `) w7 D
  43. ;------------------------------
    / l9 Y7 b# I0 C$ {6 j, H( x9 X5 F
  44. ;------------------------------+ u$ }8 i7 ?' n, T$ n4 l) L! L8 S
  45. .IF SOUND_BAR_SHOW_ENABLE" E+ w+ X" c9 ?4 W4 r% X
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    / c* F$ x7 S) X. y
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    8 `& r' n4 S. \/ o* q+ H* P+ S
  48. Play_State_Pos      = $2233 ;播放状态位置' @7 N  S/ Y# {0 q; U
  49. .ELSE" S7 K8 p' Y0 i8 h+ a2 x  |

  50. $ ]! u- n0 `3 G
  51. .IF Music_Song_Total > 995 q6 w0 l# h( y4 L' H4 x8 O  U
  52. Play_Index_Pos      = $21AC ;当前曲目位置  b4 V2 M5 X+ _5 x* O2 I8 \
  53. .ELSE% u8 b! |  f$ V* u6 \- j  s
  54. ! j) L+ O% L: G) O$ e; |
  55. .IF Music_Song_Total > 9* v3 z4 B( ~/ [, X* [
  56. Play_Index_Pos      = $21AD ;当前曲目位置) S6 u) g5 M3 R3 U3 [
  57. .ELSE
    3 U. |' b) i" u6 }8 w0 U; A* Z( ]  S
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    " G9 S9 A1 P  M1 c
  59. .ENDIF0 D  L5 b, D1 E; |% Y9 e
  60.   s* Q% B8 k# Q# G6 g, a
  61. .ENDIF9 t8 @/ v" }( Y

  62. . B1 s  w2 I# G. @. g% G' \6 {
  63. % Z) I$ N4 s& O! N" }. S3 \
  64. Play_Time_Pos       = $21EC ;播放时间位置
    , E/ `* \( S7 o, A1 ?+ B2 {' \
  65. Play_State_Pos      = $222C ;播放状态位置, F/ x: W8 E. t8 g
  66. .ENDIF
    ) c4 @5 j5 C. Y' ^
  67. ;------------------------------# H7 t$ x& y% I, @+ {
  68. Track_Name_Pos      = $216B ;曲目文本位置; f$ \5 z& D  N( F' ^
  69. Sound_Track_Pos     = $21A5 ;声道文本位置0 e& D3 y8 c  J4 h2 _
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置- |4 ?* r* O* z/ N. p* B8 h  z3 b
  71. ;==================================================+ s. e& r, G2 K
  72. Scroll_X = $00- ^4 z" E3 J5 d# i( ]
  73. Scroll_Y = $06
    . `: l6 x7 R# i. M4 w
  74. ;==================================================
    & i1 P% k, K/ B0 L# O/ |
  75. RAM_Cln_1       = $0100
    9 @& u  A  v9 S- x- _9 P
  76. RAM_Cln_1_Size  = $809 n% e" j+ [% F: r9 ~; K6 O
  77. RAM_Cln_2       = $00E0( w* \  R" o5 V. k% O7 P- c
  78. RAM_Cln_2_Size  = $206 b3 b: m' A% z
  79. RAM_Cln_3       = $00E0
    . a# X/ W' `* m; ^0 g' \- ~
  80. RAM_Cln_3_Size  = $20
    2 a( ~& [- N8 I( q* T9 ~4 m
  81. : h6 F0 w& A0 s, u
  82. ;==================================================7 M. |, _  p! Z% r9 k( d; J
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器8 G, c7 Z. v7 S  [3 O
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器  }# o. ?: I" D) p! ^* ^
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位( f; a  |) D4 V! r! X" T7 S
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    6 w+ X4 N% X  {1 W' t% a9 _3 s
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    1 o! W  P/ `( [1 z
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 & v" w, L7 S0 O7 P
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    1 m& M; W6 J, E' Y
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    6 W+ c; u& \5 X1 t7 I4 q) \
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存: U; ^; M5 X+ @
  92. APU_STATUS              =   $4015   ;声音通道切换
    4 u  h  u& Z& x, ^' L
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    * ^. a( G' b' x; t# J, P
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通# q0 O3 E: R% i* l5 a% E* z
  95. ;==================================================
    4 r: x* J  T5 ?4 b2 C9 }$ ?
  96. MMC3_BANK_CTRL          =   $8000
    " _5 P, }/ I" i0 ^
  97. MMC3_BANK_DATA          =   $8001! i! q, E) g4 ~% Q4 A
  98. MMC3_MIRRORING          =   $A000
    " R* `8 b+ L, H* d) W
  99. MMC3_PRG_RAM_PROTECT    =   $A0019 c" ~' ^9 B4 i7 H
  100. MMC3_IRQ_LATCH          =   $C0005 {. J% J- q, S- _! O- s
  101. MMC3_IRQ_RELOAD         =   $C001
      t+ h  r3 p1 H7 V) C5 n
  102. MMC3_IRQ_DISABLE        =   $E0008 e6 M0 j# g* e; o! g% w1 X9 m
  103. MMC3_IRQ_ENABLE         =   $E001
    3 T$ r6 u% Q# e4 m  S4 o8 b' e
  104. . F, M% }* _8 E  {% ^: T
  105. ;音乐数据块+ N# @6 ^  k* D! [5 Y8 j4 G3 G) d

  106. ) {& w2 A. F/ D# t
  107. ;======================================================================
    9 v+ `3 \" e. m
  108. .IF SOUND_BAR_SHOW_ENABLE5 Q0 G) h' |, f* V" w- k
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK, Y3 e: j9 y) y* y# W7 v( {$ k# H
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    , y# q( J5 s& `/ z2 a

  111. . X" G4 h5 l3 J, Y3 ?: \
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK. X, r1 ^' f' \" q( ]; l
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    " \- _+ D& w: M6 ^  S. M) D' _& r

  114. 9 b8 G7 Q! C' d5 K
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK% d+ A2 o/ D* A2 X" z8 x
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    . L$ r4 ~. B" {0 U; I( B

  117. $ H% y9 F( P) ]( A
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK% `; z0 {" v: e% U- m8 [4 P! k
  119. .INCBIN "sound_bank_bar/music_data_3.bank"# k: b$ V$ t4 g! @) H: |

  120. 7 L7 [  H4 p* ^
  121. .ELSE1 P7 g9 ^5 P0 I
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    8 L9 a( m' b8 Z; O
  123. .INCBIN "sound_bank/music_data_0.bank": m0 s6 r8 l8 j5 j& _
  124. ( I2 m. Y, Q& b( _: o" Q) U- [
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK- U' I; M! a" N+ y2 w' n2 w, g
  126. .INCBIN "sound_bank/music_data_1.bank"
    8 C4 e& @, H' r" h% G$ s" w! _
  127. ) u4 B' s8 k: ~4 B$ M" G7 V/ E! k* y
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    0 `2 W9 g! J  H
  129. .INCBIN "sound_bank/music_data_2.bank"
    * k$ L- P8 q3 i: h. s
  130. " F& {& x3 Z0 G' U- D
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    9 o5 R5 h2 d2 f6 I
  132. .INCBIN "sound_bank/music_data_3.bank"
    ; z+ o3 s# N& J: \6 l
  133. .ENDIF8 i/ E# s) N+ a7 _* P+ f
  134. 7 W" M. C" [8 K- ?: E
  135. ;CHR图形数据! e1 O1 J4 ~3 v) u7 `" J8 _9 X
  136. ;======================================================================
    + S6 G2 Y. Y0 T7 `! Q) C" T
  137. .BANK CHR_DATA_BANK
    8 e0 F( \( G& p) i! \! ~
  138. .INCBIN "chr_bank/chr_data.chr"0 y- u* v& S* k# S

  139. 7 [9 s$ s) [7 O1 ~3 l& ~. O
  140. ;==================================================
    4 @1 e' i6 I, ~: m
  141. PPU_Addr        = $0300$ l( l" s" @2 g- ]. _, Z% v
  142. Palette_Addr    = $03C0
    . x) x3 e& t& F! N& B* `
  143. Sound_Bar       = PPU_Addr+$E0  g. p8 f3 {  n3 T1 C
  144. ;==================================================% a! [2 A( ^$ ~2 P& a! v5 M+ E
  145. Palette_Update_Addr     = Palette_Addr+$0D
    9 n5 `0 V- A# g  f/ [% x
  146. Palette_Update_Max      = $2C6 [8 @2 F2 f9 m8 o8 r) x, O' x
  147. Palette_Update_Min      = $21
    1 O! D) I* n" |
  148. Palette_Update_Interval = 60
    ' }  b4 Y: k  n  [/ t
  149. ;==================================================
    9 q5 p- W, [! k* w2 k0 ^
  150. Sound_Bar_Cnt       = PPU_Addr+$F0* k1 R6 B! |) j9 _$ z1 N
  151. Screen_State        = Sound_Bar_Cnt+$01
    " L: B5 u+ x0 V  O7 m
  152. PPU_Cur             = Sound_Bar_Cnt+$02# H$ ]4 m( g& I- u+ g$ T
  153. PPU_Addr_H          = Sound_Bar_Cnt+$039 p1 n- x4 \% c/ q! L; P6 ?" w& D
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    9 ~4 n% W3 D* b4 g+ h2 J
  155. ;==================================================
    + }1 P* z! K% U* C) U# J; V
  156. Data_L              = $70! n1 `( b+ y- @. Z
  157. Data_H              = Data_L + $01
    % Y5 g; u& D( \# [& f
  158. Data_Cnt            = Data_L + $02
    / [' e. E( G- l7 ~
  159. Data_Buf            = Data_L + $035 b- h7 @0 @$ Y: ^( v
  160. Time_Wait_Cnt       = Data_L + $048 n( K+ S2 P: [, t& R# E
  161. Palette_Wait_Cnt    = Data_L + $05# ]- v" l$ ?0 `) j# {
  162. Palette_Update_Flag = Data_L + $061 d7 t& S. L# z
  163. Show_Track_Name     = Data_L + $077 V( _  R' k- l- a0 k
  164. ;==================================================  B+ n8 z* R  G
  165. Key_Keep            = Show_Track_Name + 1
    ) [4 `! a+ r$ p# g. D+ B
  166. Key_Once            = Key_Keep+$01
    0 U% C# l4 J- Z7 @# T1 }3 M" [7 O( `
  167. Key_Kemp            = Key_Keep+$029 b. a7 z+ t% i- z9 K
  168. Key_Temp            = Key_Keep+$03
    6 e- s! E+ ~" Z3 u
  169. Key_Getv            = Key_Keep+$045 A) [. U3 J" _) N) ~" Y' `9 g
  170. ;==================================================
    + E8 Q3 G9 m/ P8 y5 K
  171. Music_Cur           = Key_Getv+$01
    - P7 Q+ a$ x5 Q9 F
  172. Music_Last          = Music_Cur+$01
    9 s7 c$ Z* T& f
  173. Music_State         = Music_Cur+$02
    $ h. F+ U% E  J
  174. ;==================================================
    # F0 L* O& N+ H$ ?- Y) a- n
  175. HEX_Data            = Music_State+$01$ s& }3 Z1 ?1 l) P- A+ {: [. A
  176. DEC_H               = HEX_Data+$01* Y3 o+ M) h4 d7 X% C/ W+ r
  177. DEC_T               = HEX_Data+$02
    7 a" ?4 U% R. g
  178. DEC_L               = HEX_Data+$03' N3 s/ O# i7 g6 J! U0 r  |
  179. ;==================================================
    , a% S- I2 ]% b9 D( F* j, N; Q+ t
  180. Time_S              = DEC_L+$01$ _+ D4 k. d! `+ Z* z# M0 U! Y6 H- ~
  181. Time_M              = Time_S+$01
    8 v" _1 ?/ o# ]  U( l4 N- o
  182. Time_H              = Time_S+$02
    ; ]7 y( ]+ C# E
  183. Time_Cnt            = Time_S+$036 r7 @! f8 ~6 n+ X6 \

  184. & z# x4 \3 s3 q  t1 h
  185. ;==================================================3 D, l/ v  Q4 A9 O
  186. Music_Bank_8000 = Time_Cnt + 10 c4 r- _/ R3 \
  187. Music_Bank_A000 = Music_Bank_8000 + 1
    % v$ V8 G9 h) k! z2 h8 P8 N: n
  188. ;==================================================7 Z- O" a3 l2 R& K0 U* p) G$ e2 H& N

  189. ! E8 T  A5 c; E1 l6 |
  190. ;======================================================================
    ' N/ \- J" k4 Z5 S2 t- b$ e
  191. .BANK PROGRAM_BANK
    ; z, j) i- p# ]0 Z
  192. .ORG PROGRAM_ADDR- B5 V( _" g, S1 J7 z! r
  193. ; [% A. s  Z/ M# G2 h3 A6 ?
  194. ;==================================================
    - I; G7 G- G2 A  H9 }
  195. NmiProgramProcess;NMI中断程序处理
    5 a& |  w7 I5 t4 m* C
  196. ;处理PPU图像- }5 O+ p6 E& ^5 Z
  197. JSR PPU_Proc. Q! x6 Z2 X1 d- g
  198. 6 N& C  J  ?# ^0 C8 `, N3 T
  199. ;启用NMI中断% V/ }, K! ~1 R' D, u
  200. LDA #$80
    - c) F2 ~5 m2 N0 }% Y  _4 |6 U" v6 |
  201. STA PPU_CTRL
    " c' Z7 I- S" Q% o* \

  202. 1 z, l) s  T! Z7 a' i& K7 L
  203. ;更新调色板- z6 C  b2 D1 j$ ?' \
  204. JSR Update_Palette_Data
    1 i  x: W3 ]7 Y  L! S7 t9 f! y

  205. ! o; @" _7 }0 q* V: N6 j8 P
  206. ;显示时间(缓冲)2 }; V. f; F$ X4 s- p! R
  207. JSR Time_Show
    , ], q% [4 B% s4 t  s, a

  208. # _$ L' Z9 \' l
  209. ;播放计时
    ' R9 S2 C" G6 b& _- m/ G; E
  210. JSR Time_Count5 W& u7 a! C9 j7 S6 Q

  211. ; Q! Y. z- L- ~2 c: _% u  q
  212. ;播放声音6 w! Q& L5 g' {, K' m4 J
  213. JSR Sound_Play1 u: [0 m! U4 |# I; p

  214. ; C* V  [% P/ X0 y4 M5 L  ^  [
  215. ;切换音乐(手柄触发)! j0 @% @& D: U% R( D1 ]- O
  216. JSR Music_Switch
    - t7 l& ?; i( b9 `6 _+ ^( M# F
  217. ( b- N) K- s4 b/ C. L; H# T
  218. ;音乐显示(缓冲)
    : G  o$ \, ~, G. I& \2 m# A& V
  219. .IF SOUND_BAR_SHOW_ENABLE
    6 V9 ^/ d2 j( }, A# _: m& c
  220. JSR Music_Vision" H; f' [9 n% C
  221. .ENDIF
    - w) U% t* B& Q/ `/ c
  222. + Y+ U5 |) H9 U, T8 n9 K. F- E
  223. LDA Time_Wait_Cnt
    : s2 ?9 c, W# X: ^! D' ^
  224. BEQ NmiProgramProcessEnd
    ; U& |( s7 ~; F( K
  225. DEC Time_Wait_Cnt+ f, e( W- }7 m
  226. NmiProgramProcessEnd* h) g) k2 J, E" G2 g
  227. RTS
    + e. E% }6 v3 z$ T
  228. ( G) d0 A' A3 r. S
  229. ;==================================================
    / d6 K  I3 h. S! _0 W2 W
  230. ProgramBegin;主程序8 J7 o, R) a5 |' y
  231. LDA #$00
    + T2 Q3 P( L5 I. m5 D
  232. STA PPU_CTRL
    0 B0 u; }$ D2 U" y" `
  233. STA PPU_STATUS
    , a2 B7 G2 J! j$ P* s
  234. STA PPU_MASK
    7 L! `6 _- A0 v0 a6 ~7 @7 F
  235. STA APU_STATUS; P/ z7 v, G( w! a* V% y! C% H
  236. STA PPU_SCROLL& F8 q. E# z: J) T6 {+ O' \( S
  237. STA PPU_SCROLL7 ?7 |8 S- f( _- L
  238. LDA #$C07 ]! _$ o: w  N5 H
  239. STA JOY2_FRAME
    " m1 A8 _3 |6 b6 F& H  l

  240. ; P- `8 Z% N! g8 H7 D* ~/ i
  241. LDX #$FF
    . F& G% d1 p8 b$ E7 N& Y
  242. TXS
    4 T+ {/ h( A5 Y5 |" }( g
  243. LDA #$00; S  f, C% s* e% l: M5 j  y* h' V4 T
  244. STA PPU_CTRL
    + t) u, ~1 g# e' {  q
  245. STA PPU_MASK
    8 B8 O9 z) B' P3 v  \! A
  246. STA MMC3_IRQ_DISABLE. C* I  l1 k3 r$ j" B: `3 L. ^

  247. * i% w& {, F& N  U+ W& A2 p
  248. ;==============================
    5 I$ A; A9 c3 S! O  v
  249. ;调色板清空
    ) Z# h' G& k! O# J% u
  250. LDA #$3F
    4 V. h; Q& g+ r% Y
  251. STA PPU_ADDRESS
    9 H: m; @# B" P, y/ W' i* k) l
  252. LDA #$00: c5 j: g. S1 H) B
  253. STA PPU_ADDRESS
    & g0 M; o1 b3 W) y: {2 P+ W
  254. LDA #$0F
    ; t: L) }& |, `8 s2 R  Z* A8 o
  255. Palette_Clear$ f+ U" }; i9 A6 i1 @
  256. STA PPU_DATA
    * Z3 _5 T6 c( [8 z
  257. INX. \$ ?- a3 i1 I3 u6 e% M# T( v
  258. CPX #$20
    0 N* I# k! x( {) R, O& u
  259. BCC Palette_Clear9 i: r' O9 J  o/ t
  260. LDA #$00( g: t' |/ j, G- c6 X
  261. STA APU_STATUS6 r! ~/ G7 a# h8 j" G
  262. ;==============================8 I: y/ v' a; Z$ d" d8 Y% m
  263. ;初始化背景调色板) ?* g1 A4 F- v8 ]" _& n4 G
  264. JSR Set_Palette_Color
    1 D& @% r9 |/ c0 o; q& v# R% h& v$ @
  265. JSR Set_NameTable_Attributes
    1 x; `' g$ [1 P, q8 t8 u( Y

  266. ' _7 W  G  ^% b: z4 H
  267. ;==============================
    9 ^) T: s" {/ T  k
  268. ;RAM初始化
    . L$ K, ?( ^0 ~5 D5 l% ^! h
  269. RAM_Clear_All
    $ l2 L1 _& o1 v6 \
  270. LDX #$00
      Q0 u( V" i, Q+ D* z8 y
  271. LDA #$00$ Z  i* ]# c6 N" T3 F, k6 G3 M
  272. RAM_Clear_All_Start6 Z8 v* Z$ |) |1 ?1 g
  273. STA $00,X
    ) _1 P" b- Q, r& s& m$ d) A
  274. STA $0100,X( r" ~  Z, F) s7 z3 a) [7 W- S
  275. STA $0200,X; ?* u- j2 q! I/ T, h
  276. STA $0300,X
    - @6 u3 e: S0 m* _! N, r& ?
  277. STA $0400,X
    # e5 f  H8 Z# d$ @4 A) `8 J
  278. STA $0500,X
    5 o$ m0 W# s$ p6 v1 \  H
  279. STA $0600,X
    ; Q5 ?8 Q3 X* F; x# ?+ d
  280. STA $0700,X. g/ i, p2 v( i3 H8 M. U! j
  281. INX0 P6 ?7 L/ z" O; w
  282. BNE RAM_Clear_All_Start
    8 U' a7 I# A7 e; ]5 g1 C- Y" j' g

  283. . e$ N' E! [6 [7 q& n  a$ ?
  284. JSR VramInit
    # \. l5 ^4 l$ f8 {" d# r
  285. JSR Init_Palette_Addr
    : i0 }: f: P, o8 B

  286. # O3 n) Y* M; u( l" A) ]* z
  287. .IF Music_Reset_Addr
    2 q1 a, G# G1 ]; l* p$ z4 z
  288. JSR Sound_Reset& z! S% k( ~- F. o' ?+ B( J
  289. .Endif2 B! `& O9 \" P% c% T

  290.   d) X, O6 |# i7 l- r
  291. LDA #Music_Start_Song-$012 J4 ?: \+ H* G( B! M
  292. STA Music_Cur5 H* c3 y# V& p) U/ U

  293. ! b& ]7 l+ I4 H9 w) P
  294. JSR Show_Music_Text
    $ J+ F8 _- H* O" b; Q2 \6 G
  295. ' b/ D5 k$ E1 L7 |4 E
  296. .IF SOUND_BAR_SHOW_ENABLE! N# |3 s: J# r6 u1 S) W2 O9 U9 j
  297. JSR Sound_Bar_Text_Set: F  p0 H6 T" A+ D$ [9 q! }5 L
  298. .ENDIF
    : S/ O- t) G7 v6 U+ ~, ]
  299. 9 y, S( I% L& M) J
  300. .IF Track_Name_Pos7 T6 m) X$ O, ]$ G' W
  301. JSR Show_Track_Info- N6 K, h, W/ Z: i9 g% e
  302. .ENDIF
    9 b3 ]5 p4 c9 U! r& Y- V

  303. , h3 a" G; E, o& u  Z5 \
  304. JSR PPU_Proc
    ; r4 w5 l! K/ F& I/ h) B
  305. 9 e- }1 G8 ?3 ]- a: E# y+ h* l; V
  306. LDA #$0E0 j8 o6 j# T1 e" f
  307. STA Screen_State
    ! s, }; H7 |/ m" B8 A8 I
  308. ; F4 D# B1 Q* r
  309. JSR Sund_Bank_Init
    # L8 d+ |' S& U: C, X/ \, M# H: W
  310. : Z/ I1 r& E0 h) ~2 A- S) i
  311. JSR Music_Show1 o+ e$ Y, r( o- F; k' Z% G: r) b
  312. JSR Time_Show6 N: O' M3 G" e8 A6 V. y: j
  313. JSR Music_Stata_Show
    ( b7 Q9 F2 k0 [1 @5 w
  314. JSR Time_Delay8 R( {0 e/ m) i, x9 h

  315. ( G  M3 S) t1 h. F& y0 I

  316. / i" p) f" I3 f6 U) y
  317. LDA #$803 f$ D1 M/ l& E( n& j/ i
  318. STA PPU_CTRL
    2 V% D$ C/ f0 E* \# _1 `2 K; T( X5 I
  319. 0 I5 p- `: J) b3 H" }! h6 X
  320. LDA #$20
    0 D) e- t3 Y7 P: S: D* l
  321. STA Time_Wait_Cnt% v) C$ ]$ ?; t1 E$ B# f

  322. 9 R) {# {/ |9 \- k1 S8 g
  323. Wait_Time_Over8 ^- i) ?( H& w2 _+ [; d! R2 f
  324. LDA Time_Wait_Cnt
    - W. G- ]+ E% s( X$ D) C' q
  325. BNE Wait_Time_Over  Z- ~( C) q: W4 V) c4 c9 F$ z
  326. 0 y& }6 J, W) t3 I7 t/ V) c+ f
  327. LDA #$1F
    ! ?+ \1 P; w* F2 N2 T
  328. STA APU_STATUS' J) r8 \" X% m8 ?; `
  329. LDA Music_Cur# _+ Q7 m: }8 O; i  ]
  330. JSR Sound_Init3 {, U, E9 `  Z5 i; B- R8 \
  331. ! H0 w1 y5 B  @( L. S! \7 J
  332. JMP MainLoop
      h# _" a2 _  p; @8 J! I) P

  333. : O5 H5 M! e+ b
  334. ;==============================7 E: H5 l  Z7 r6 h- @) ?# X7 m/ o
  335. Time_Delay;延时等待
    : Z0 U: E+ P/ o' R/ ?" [. p5 @
  336. LDA PPU_STATUS- M( Q+ H6 f  ~4 h7 P- A  J2 ^' o
  337. BPL Time_Delay+ y: D! k3 L* P" Y
  338. RTS
    - A3 R! H' c9 B
  339. ) K5 B5 \5 K: |1 b2 s2 j
  340. ;==============================% g3 d% K) G, _' O# U
  341. VramInit;初始化图形内存
    7 E1 }& G7 S, E" D, W9 T% N9 `3 R
  342. LDA #CHR_DATA_BANK
    $ N$ ^" z* Q0 z/ A
  343. JSR SwitchBankA000& m& o1 N/ g8 N. }- ?' j+ e- q
  344. LDA #LOW(CHR_DATA_ADDR)
    6 {4 _2 }4 i6 x2 F# W  a+ {
  345. STA <Data_L: D2 g4 Z7 k0 Y9 j/ h" H  H
  346. LDA #HIGH(CHR_DATA_ADDR)
    2 j: U2 \6 R6 D9 C2 X- g# N
  347. STA <Data_H
    % h' g) i  j. m+ V4 ~3 e+ [4 J
  348. LDY #$00
    * y7 w& V. l8 x
  349. LDX #$20( g  O. y8 `0 g+ b. H
  350. LDA #$00
    8 e9 }+ ~3 b  d  a9 i
  351. STA PPU_ADDRESS0 ~9 E/ [; j+ D! F2 S1 ]
  352. STA PPU_ADDRESS  O7 f6 s8 B8 z# k: F8 d, q0 {9 p
  353. VramInitWrite. ]. e/ o* u$ B/ S! F" V
  354. LDA [Data_L],Y& A. T9 c( S: B& J
  355. STA PPU_DATA  |# e6 |4 c: h9 \" `+ M
  356. INY
    0 U* h9 m( L' Y% o
  357. BNE VramInitWrite# K, \' A3 i8 r/ N# z) k
  358. INC Data_H
    " A, x/ B" h3 H' v* ^6 @
  359. DEX  z. b: Q- P0 z$ n$ }" ^
  360. BNE VramInitWrite" u& s5 ~# M& I$ k) i
  361. RTS1 @$ U$ t' N$ F- }
  362. 5 M  b* J/ |' P' P7 ^5 `
  363. ;==============================
    ! [" @9 p7 |1 w5 W$ T
  364. RAM_Clear;RAM清除
    6 f/ l: T. r4 k) E* a- U1 R
  365. LDX #$00
    * T0 V$ r: A! W
  366. LDA #$004 U) m* v7 P1 Z3 A0 `! b( t0 V
  367. RAM_Clear_10 Q! _- d/ h/ j% |; w- |
  368. STA RAM_Cln_1,X( }: g7 C- [! N' `3 B4 L
  369. INX' Z( q% e6 P; J, e1 Z$ t# E( B
  370. CPX #RAM_Cln_1_Size# H5 y: {1 q  a/ @: X. Y6 R
  371. BNE RAM_Clear_18 `  ]! T) o) C2 f! ^' W
  372. LDX #$00% Q( b* W" k# Z) X8 F7 _
  373. RAM_Clear_2
    9 w2 _( n% G7 W* ]9 W
  374. STA RAM_Cln_2,X7 o( l+ K8 {2 y
  375. INX! K) K, s; i, E1 ~% G& W
  376. CPX #RAM_Cln_2_Size
      O+ ^. q  X  ]$ H3 O) p! ~
  377. BNE RAM_Clear_20 `+ B. b6 f! v( O. F" ^9 z
  378. LDX #$00
    1 h0 [1 T8 W" c$ ~! y! j
  379. RAM_Clear_3
    . t8 Z  L0 t% X9 N  L
  380. STA RAM_Cln_3,X
    1 r% r( C% K( H, k& I/ T
  381. INX
    , Q7 \% n+ ]. f3 q, J
  382. CPX #RAM_Cln_3_Size& F+ [$ R# h$ I( i
  383. BNE RAM_Clear_3
    * [, q) n0 ^& q
  384. RTS
    . G+ `, A! {3 U2 E$ X5 M
  385. % w" B/ p+ F: v+ O( L3 M6 |' O* J
  386. ;==============================; [' w9 @8 ~" a1 Z6 p
  387. ;音乐切换& b1 m/ G; W/ ]: Y" T+ ?: s! R* r; z! u8 k
  388. Music_Switch
    : c; V) e- I' n
  389. JSR Key_Proc
    7 H& A9 D- J% m' w' ~. O) E: W. a
  390. LDA Key_Once
    6 }! g# w  C6 g
  391. CMP #$10# P. ^6 g4 t" M
  392. BNE Music_Start_SongStop
    , r' g5 ^# A; T5 [: H2 P( |: v
  393. JSR Music_ReSet
    ' ^4 s3 B# l; S
  394. & A$ s, k5 O4 r& m
  395. ;音乐停止" P' V$ {$ x7 E
  396. Music_Start_SongStop  S+ n: v* Q; D0 i( I  x) r! c
  397. LDA Key_Once/ q! K  W' \# M: l( q$ |
  398. CMP #$20
    " L/ q- a4 T/ [* k4 Q
  399. BNE Music_arrow$ P4 e+ q' ?# ~6 m/ b; _( I; ?
  400. LDA #$01
    $ g! `" \  a7 X2 R- m( q! z( O/ e
  401. STA Music_State0 o5 A  P* k' a) U( G
  402. JSR Music_Bar_ReSet5 r6 b. h  g: P
  403. JSR Time_ReSet
    / J- Y6 t% S2 o/ C
  404. JSR RAM_Clear* U  K/ a* w2 |" ~6 p
  405. JSR Sound_Clear
    7 V3 V" p1 o9 [. J" U9 K( D
  406. JSR Music_Stata_Show4 P  b6 g6 x, _3 {$ e$ K
  407. Music_arrow
    1 O" v, n2 |) i+ D$ Z& d
  408. LDA Key_Once$ f7 x! n. j1 L1 G8 t7 [! x& ~
  409. AND #$CF
    & i' {6 V2 {6 ~3 s" E5 F3 C
  410. BEQ Music_Switch_End- J3 t2 n5 Y: c, g& U. H
  411. JSR Music_Number
    $ t+ \. w' x$ O
  412. JSR Music_ReSet0 k  o" l! a2 h; Y4 W2 G( d
  413. JSR Music_Show! U+ x! k+ o% b
  414. Music_Switch_End
    , n+ c3 j: ?! M! F6 R: b
  415. RTS! l$ I: u* t7 S
  416. / l) X. {, b: G6 X! ~
  417. ;==============================
    & x. p7 r& A% o% N
  418. ;音乐曲目切换, t' I( y5 N" C1 F% s; [# z
  419. Music_Number& s4 R- c! X: Q' K! o3 a
  420. LDA Music_Cur
    , F9 m9 m1 F0 @4 Y1 r$ H8 b* n
  421. STA Music_Last
    0 ]9 D7 q. H* x
  422. Music_Decrease
    & a' d  X% z8 z4 g' q7 h! A' @
  423. LDA Key_Once7 F3 c$ z. a- b& s
  424. AND #$42
    $ \. X$ A: D8 z3 x: t  d; X! X
  425. BEQ Music_Increase. f8 F% \7 ?' z/ H! }% p
  426. LDA Music_Cur, l% X6 v: P( ]& e
  427. BEQ Music_Increase1 t# F3 m! O4 [0 _* [' T+ D5 D
  428. DEC Music_Cur
    6 f2 e5 y; y7 G0 H
  429. Music_Increase
    ' N  K9 Q" {1 D6 t8 _3 U
  430. LDA Key_Once
    : B2 r8 l5 U9 ^5 r. U/ r$ C
  431. AND #$816 N  P, _' E( b' |4 W
  432. BEQ Music_Decrease_10
    2 m  r  }1 V: Q. ^2 [
  433. LDA Music_Cur6 b, w$ f  H2 F' K0 W: H2 w
  434. CMP #Music_Song_Total-01* @/ b" t: }$ O. f, D, q0 A
  435. BCS Music_Decrease_10
    & k$ o1 j! Z- B# t! z
  436. INC Music_Cur- f8 J" {: b# b. s% v3 p7 c2 {6 k
  437. Music_Decrease_10/ I  e* c& O% B+ q5 v
  438. LDA Key_Once) s; `6 Y( l8 K. B  o
  439. CMP #$04
      a, p. [5 u' n+ E
  440. BNE Music_Increase_10
    : C, U: g% \: O
  441. LDA Music_Cur) L" J% F$ v" ^% G5 j& ~. D  q  l2 Z
  442. CMP #10
    ' G! P9 E& Q$ B+ B5 Y* F8 P
  443. BCC Music_Start_Song_Min1 M$ B* J. ~$ v& B5 c( O1 t
  444. LDA Music_Cur; _7 x4 g. I  R6 t9 |
  445. SEC2 [2 Z/ ?& I- [5 L' g
  446. SBC #10
    ) v) M! C: c5 ^6 R" |  G0 `" a" b) r
  447. STA Music_Cur
    ! z( L) W1 U( f' H8 W4 N* v& F
  448. LDA #$00
    ; V2 A+ k+ E' K  R0 |
  449. BEQ Music_Increase_10/ y! @. K/ }& c) d! `  V- O" g
  450. Music_Start_Song_Min
    4 V- ~  C5 A4 f! f
  451. LDA #$007 a2 m; }6 ]: D% @  j& t: z- B
  452. STA Music_Cur
    # Y) i% D0 A4 m
  453. Music_Increase_10
    % K% e% o8 o/ u
  454. LDA Key_Once. E: q6 Q" }! B4 X: Y
  455. CMP #$08
    6 T/ \6 [, b# K3 f- `
  456. BNE Music_Number_End8 {6 A$ U1 c4 u7 E- o0 ^. Y
  457. LDA Music_Cur
    . J3 h6 T- T$ }0 V: J" b( ?/ ~/ M7 f% Q
  458. CLC
    , m5 i; v# x! D: N0 B
  459. ADC #106 W4 `% l; E' D; z# d
  460. CMP #Music_Song_Total-01
    , O' ~% z, y2 Z. C
  461. BCS Music_Start_Song_Max6 U& U0 ~0 _5 G% [1 X
  462. STA Music_Cur, @7 P  f4 A  a$ }5 C* ~: f
  463. LDA #00
    ; m! ^. Y' X7 o( `5 u/ E1 V
  464. BEQ Music_Number_End$ W& }! v9 |2 _' q! r: M# W
  465. Music_Start_Song_Max/ S7 q5 M. C6 F% U- z
  466. LDA #Music_Song_Total-01
    * {8 V$ ]; z! f$ h5 D& T  S
  467. STA Music_Cur
    6 _  ~- p! Q1 U# m* l1 F
  468. Music_Number_End+ O- ~( _1 I8 J% x' k5 p7 k9 X
  469. RTS$ e, a$ `1 m  A- k9 j
  470. ) @4 Y9 q, f# g1 z
  471. ;==============================3 V0 Z1 X0 v' B3 x
  472. ;音乐重设
    5 A8 g0 u6 ~( h9 z( a
  473. Music_ReSet, }) {8 K( `/ ]; ^: Q/ [+ e
  474. JSR RAM_Clear
    . y% {2 m* `; r6 y; X
  475. JSR Sound_Clear( z' O+ t# J; G- K/ ^8 B
  476. LDA #$1F- v- v6 S3 L) }7 T. }& o/ Z; H
  477. STA APU_STATUS
      A4 B) x) O+ f1 I3 ^
  478. LDA Music_Cur: p% p9 E  V# P' Q
  479. JSR Sound_Init+ k# j5 L" z2 W1 S( Y5 \# r
  480. RTS$ D; O( ^7 L5 G9 m, \3 p
  481. / K0 @' u, s- c/ a" W
  482. ;==============================
      j; J4 Y- I% |3 f! Q; p2 }: A
  483. ;音乐端口清除
    5 T8 _6 V& H! L8 Z" J
  484. Sound_Clear
    ! ~9 ?/ ^& p( @
  485. LDA #$00
    ) P+ X9 Y) V9 R  X2 b0 K. I3 Z. Y
  486. STA APU_STATUS
    , m1 L5 l8 w* j! x# @
  487. LDX #$00
    $ t9 k" ^, P- N1 G% a! B% Z( Y
  488. Sound_Clear_Start
      {9 R0 k; r2 `$ y5 ~  v
  489. STA $4000,X
    2 V! m) K4 m1 F4 `' [! |
  490. INX" ], W; h& M$ F8 d: h6 i: b
  491. CPX #$14
    3 d) Q& V# g* S' f/ Y& `) P
  492. BCC Sound_Clear_Start
    9 K) _7 t8 w( S
  493. RTS
    % {+ z; C* ?& F! i9 C6 n) A" a% N

  494. " j* ]7 v2 Y+ v% n* O( Z0 k( `& s
  495. ;==============================
    * i; O  @9 C0 Y' j" ~( r) A, ?
  496. ;按键处理
    ( a' Y( ]8 o; V9 n
  497. Key_Proc2 f8 x0 A6 P4 F) ?7 [' q2 d5 _: {
  498. JSR Key_Scan5 W  D) l9 b* Q, w: T8 T0 t/ [
  499. LDA Key_Keep6 w. n# C- k+ M* Z) t$ M
  500. STA Key_Temp1 |7 v# Z: s" u
  501. JSR Key_Scan
    # F2 @" H" G. s& ]7 r; L0 i+ @5 x
  502. LDA Key_Keep  o: d# b" R" ?+ j: h
  503. CMP Key_Temp' ?1 k( I. |0 E* T$ v- R% a% U
  504. BEQ Key_Get_Once9 r8 |& Z6 Z( d, ]" V6 }
  505. LDA Key_Kemp
    / h& `! x5 j5 ^
  506. STA Key_Keep
    " H  t7 W6 w# L9 T; v+ f
  507. Key_Get_Once
    ) E6 Z% G" d' v/ {5 ~; z* d
  508. TAY# w1 d/ V- W0 Z3 ^+ J, {
  509. EOR Key_Kemp0 }' g/ N/ h( N* \( e
  510. AND Key_Keep% X9 w: r# v2 O/ J$ J
  511. STA Key_Once
    ) B& b8 C! x# J+ y, |
  512. STY Key_Kemp* f0 {$ M+ g' w/ b# R5 u
  513. RTS, {8 {& a6 t# Z. h8 D7 r; b: i
  514. ;------------------------------* Q  C+ L* K; B1 x# s* h/ |! W) S
  515. ;按键扫描& B" `( m: U! ~& h
  516. Key_Scan5 \, e! @( E2 s7 u- G
  517. LDX #$019 O% u! A) Q/ ~' n
  518. STX JOY1_FRAME
    2 E" C9 P2 X* A; j( }3 o; v0 q
  519. DEX
    3 N% N4 j4 O$ S3 n. @5 h3 \
  520. STX JOY1_FRAME
    , K5 o2 l8 ^5 D; U2 b! u
  521. LDX #$08
    9 a  [' g6 f( t+ |) [1 K: E
  522. Key_Value
    5 S& V' H6 ^* |5 V1 J6 {
  523. LDA JOY1_FRAME
    1 X& r# b) D8 ]$ L0 J' w
  524. STA Key_Getv
    9 ?7 o; Q$ g' [" N- S
  525. LSR A+ E+ S; g1 o5 J% s9 N0 @
  526. ORA Key_Getv, Q7 r7 ^) q5 u' B
  527. LSR A6 h2 \! I! }, `. f, ~
  528. ROL Key_Keep; n( e$ u) K! j( T) v
  529. DEX9 e! J( j2 N7 ^  x! F3 _9 f
  530. BNE Key_Value9 B) `, W& C) P$ d
  531. RTS
    $ b) w# E- f/ O/ q
  532. / j. g6 P2 d: n) a4 O# b' z
  533. ;==============================
    ' o, k. U0 n8 C, Q! R  D: G: Z
  534. .IF SOUND_BAR_SHOW_ENABLE  c# V3 M  E4 o7 c" O
  535. ;音乐条显示
    3 {0 l4 ^- B: `, [4 p9 U7 Y/ H
  536. Music_Vision9 R' F! I) Z5 y9 y; S+ m
  537. JSR Music_Animation, j* k; ^, w  ]1 G# N
  538. JSR PPU_End% j% v+ q; q& Z
  539. RTS# G, Y: \: @2 J2 [6 j5 [9 X1 B
  540. ;------------------------------
    , k3 @% L& J7 s4 I$ n" W% p6 W
  541. ;音乐条显示处理
    ( r, i2 \) l4 y' d8 ?
  542. Music_Animation3 S' F& f# P8 k8 G5 B& V
  543. LDX PPU_Cur
    ' s  \" i( s- p. M6 n: l( O
  544. LDA #Mode_Line
    6 k1 E% U% Z* @3 Y9 V& J; x0 K5 q
  545. STA PPU_Addr,X( P9 K# k( E( O) C8 ^2 }4 F
  546. INX4 ]6 ]4 A* O, N* z+ [
  547. LDA #HIGH(Sound_Bar_Pos)
    # n, d2 J2 q* S* B0 j" }' u
  548. STA PPU_Addr,X" b+ C& [* x: k2 i. @/ g
  549. INX
    ) O- c9 W) u" i4 n9 Q
  550. LDA #LOW(Sound_Bar_Pos)
    3 @" {+ [* [& [! T$ |* u$ C$ a
  551. STA PPU_Addr,X
    . K5 N. s" S! Y' o! ^
  552. INX$ |1 w$ ^! q* M3 z$ o- I
  553. LDA Sound_Bar
    2 {' G* Q4 W( n/ |5 O4 w
  554. JSR Volume_Convert' \# W. c' i: K8 U* l! F
  555. JSR PPU_Return
    ; K% y2 e2 c- z" r' s: }
  556. LDA Sound_Bar+$4" Y* y1 R; D' O4 o' g0 k8 y/ x
  557. JSR Volume_Convert
    2 t5 ?' u) i7 s2 b! o8 P8 _4 D
  558. JSR PPU_Return& t4 v; |3 B# a8 T" X+ F
  559. LDA Sound_Bar+$8& U& v3 R: \8 g& w( f% p% ~+ o! E
  560. JSR Volume_Convert_Ex, C$ e" X, h. M1 S
  561. JSR PPU_Return
    4 M) H% d. H8 D& ~. u7 i8 @
  562. LDA Sound_Bar+$C
    $ O; R. ^( N( L- I! f+ y
  563. JSR Volume_Convert
    0 V. p/ p$ d0 X8 q% X( n
  564. JSR PPU_Return+ j: C4 `' B* h# S9 M8 t, g
  565. LDY #$10
    / Y/ O+ T* D" w. J
  566. LDA APU_STATUS
      ?' }- T; _3 j% O
  567. AND #$10' ?5 b0 b. d" J+ g- L+ u
  568. BNE Volume_Count
    ) N4 z4 @( q5 H1 K2 z% p
  569. LDY #$006 X  B1 L- r  Q; ?' p( H' W$ a
  570. BEQ Volume_Count
    1 L1 G" z3 p  F. T: M
  571. ;------------------------------4 ]8 O+ Q' R6 L  d' m0 p8 u
  572. ;音乐条处理# H2 ~5 {/ K9 c( [! N! S8 }
  573. Volume_Convert_Ex: F* d; G+ d$ V- h2 H: q% P
  574. AND #$1F! u* t& E+ s% @, B
  575. TAY0 x. }# e# G: ?$ l. M
  576. BNE Volume_Count
    ! c$ M) {: V  R+ I# O0 m& Z- p" v
  577. Volume_Convert
    6 n: w* |4 N  y
  578. AND #$0F/ Y) i% T2 B2 v- ~- b( j3 d
  579. TAY
    . J* e  L5 J2 ]  I: f3 w
  580. Volume_Count
    ' L( h- g9 g( L5 h( N% m- n
  581. LDA #$08. G8 V, y4 h: E3 M
  582. STA Sound_Bar_Cnt0 f' S8 x! ?$ a0 e: T
  583. Volume_FILL
    . y& x# r) n+ I1 k( ]6 ~
  584. DEY
      `1 H  r& U) j6 Z: @
  585. BEQ Volume_Half# N% w+ b9 U3 X/ x! ?0 f; p4 ?
  586. BMI Volume_Empty
    + u/ V- N* p& A! l. F
  587. DEY7 k8 b+ d2 y- J7 [
  588. Volume_Full
    % P% p1 y. ^$ H6 x3 }! b" v- r
  589. LDA #$16$ h: y2 W; c8 M* U1 ^
  590. BNE Volume_PPU
    % R" d- [1 k+ f5 I" Y( y
  591. Volume_Half0 b  K" b& G5 H7 J  ]& E# l7 H$ R
  592. LDA #$15
      r- d* n. T; ^' p: Q, e+ [
  593. BNE Volume_PPU! A' }/ u$ `+ V' B% b) p
  594. Volume_Empty
    . u  v0 K+ h. v$ w, i; \
  595. LDA #$14
    ! v6 ~/ M" {( B/ F
  596. Volume_PPU
    ( R- w1 c. \" N- e
  597. STA PPU_Addr,X
    9 A) q' J1 P( s1 _. C
  598. INX7 s! t9 J; H  O) v) u$ x% f
  599. DEC Sound_Bar_Cnt$ b+ a9 i0 z; _
  600. BNE Volume_FILL2 g* E3 F4 A5 I, Y  A
  601. RTS
    2 [. |% K# f- t8 r; ^/ X8 ]; `) m
  602. # k8 d: ~( l3 H' C( [$ R: |
  603. .ENDIF
    % V4 J0 L: h, i) Z7 o$ @' G# [, G

  604. 8 z% s0 z' v/ Y- s
  605. ;==============================
    ; O% C) k; l- v8 v: P6 U
  606. PPU_Addr_Set;PPU行开始! d' c0 g) l4 m
  607. LDX PPU_Cur& |8 k# S0 K) ^6 U
  608. LDA #Mode_Line
    4 I  ?, L) x. A
  609. STA PPU_Addr,X: v4 w% U" L  F: H2 T- f
  610. INX
    : a# }4 Y3 I5 s. R/ l
  611. RTS1 k% x$ c  a( l+ \% {3 ~
  612. 7 z+ L( R& ?7 {9 l- b
  613. PPU_Return;PPU转行/ S. p4 R* h  E4 `: p! T
  614. LDA #Flag_Over
    * ~1 R' V9 I& [. K1 `. p) z7 ?
  615. STA PPU_Addr,X
    9 _( I4 _6 h& B. }3 w. F
  616. INX- n4 }' h7 w! Q; X, X5 ]5 ]
  617. LDA #Mode_Return9 q7 S8 p9 W8 m
  618. STA PPU_Addr,X" _7 J" H" H  g1 @9 W
  619. INX2 d/ [2 R' |, K9 W* k
  620. RTS5 _) t$ ~; _9 b6 F4 _6 |
  621. 9 p4 P0 W4 x/ P. E7 j; O  i( c
  622. ;------------------------------
      B) {5 t3 v& R+ n! a: t
  623. PPU_End;PPU结束
    ; c1 e6 S9 t' q9 M. Y5 A
  624. LDA #Flag_Over
    ( z* p+ f! W# ]5 @' S
  625. STA PPU_Addr,X3 n9 r/ I. H% _; l
  626. INX. {( Q1 {4 Q" C& w6 a
  627. STX PPU_Cur: X/ Q& J$ [# x
  628. RTS
    % b* B+ S! X2 z$ v6 l$ |
  629. ;==============================5 `- Z! R' k$ s) X* _6 X* T
  630. Mode_Line     = $FD    ;新起行模式
    9 d( N: f: s5 ~
  631. Mode_Return   = $FE    ;转下行模式
    * n# b: M9 h8 R
  632. Mode_Clear    = $FC    ;行清除6 q' z, ~7 a& p3 e  Y1 {6 B
  633. Mode_CntLine  = $FB    ;行计数写入
    : i* k" x9 B* T" U# M; d8 u5 E8 @
  634. Flag_Over     = $FF    ;行结束标志& _- n3 c5 M+ J% b4 G& w. ^
  635. : ?. p+ T0 _; s( J' O1 e! d. a% u
  636. ;------------------------------) Q& W7 v5 ?3 b5 S
  637. ;PPU处理) @" U; Z' K3 D" m2 c
  638. PPU_Proc, {8 E2 G% u1 x& _0 f
  639. LDX PPU_Cur  _( A1 s2 W$ V7 I' f5 l
  640. LDA #$00
    + ]. ]# Z% `8 F
  641. STA PPU_Cur1 V7 v% p) h: D& K1 H! ?3 o
  642. STA PPU_Addr,X
    % r" q  G2 c: L
  643. LDA PPU_Addr8 u6 C- A, G* g+ `5 L5 t/ q
  644. BNE PPU_Proc_Beg* X  P( _# Z5 L, d2 q& m
  645. PPU_Proc_Ret1 d* I( \6 b" l) l  l1 `, E! E. U
  646. RTS2 U8 d4 k, j" c: D! j5 `; S
  647. ;------------------------------
    5 u( a! ]0 X/ S  f: e* s- a$ i6 T
  648. PPU_Proc_Beg  ;处理开始
    3 D) U4 @" {& W, J* C7 d. ?
  649. LDX #$009 N- o1 C7 Z  k% k
  650. STX PPU_MASK2 }8 [( U2 j0 W& b
  651. ;------------------------------
    & P; O- f  V  J3 r
  652. PPU_Mode_Select  ;模式选择
    $ k5 P' o7 |9 K0 R' E) z( _# i
  653. LDA PPU_Addr,X
    ! [  S+ U7 b1 L& G$ J
  654. CMP #Mode_Line
    9 b) w) k8 \4 ?  X" h9 ^* e
  655. BEQ PPU_Mode_Newline7 H+ W" U7 m( x  I4 h+ M
  656. CMP #Mode_Return
    " ]/ _, ~; y; s
  657. BEQ PPU_Mode_Return4 `( g$ R7 d. _% J7 d
  658. CMP #Mode_Clear
    # ?! [$ h) d  m$ D
  659. BEQ PPU_Proc_Clear
    # s4 z. o3 e4 ~6 g0 L" ?
  660. CMP #Mode_CntLine5 K( ~, M! e) u' l8 _- K
  661. BEQ PPU_Proc_Cnt_Line, r4 |- e- _% b  ?' h$ r
  662. RTS
    7 b. K4 b2 L( a
  663. ;------------------------------1 U7 Q( x# y, Y( `* f( `
  664. PPU_Mode_Return  ;转下行模式# Z, J. H. M/ n6 y$ M
  665. LDA PPU_Addr_L
    & e3 J8 q; f- K; M3 m5 z* J
  666. CLC7 ~7 A  b; ~4 w/ p3 m
  667. ADC #$20
    & o7 [: c1 h' T' E" P+ @
  668. STA PPU_Addr_L
    4 y# U. f" Z  O5 h/ [/ M. ?8 C6 Z
  669. BCC PPU_Return_End
    8 U" F& ~3 n) d% W" p+ Q4 S
  670. INC PPU_Addr_H
    ( m, T0 }& s& j  R' i
  671. PPU_Return_End
    6 I# f3 {% Q5 ?; W. o5 h$ ]  P+ {
  672. JMP PPU_Set_Increaser& B, `# o# @& W5 t
  673. ;------------------------------8 p( K0 [& Q) Q( ^0 g
  674. PPU_Mode_Newline  ;新起行模式
    1 h# r) G9 ?9 h; c
  675. INX( |: h+ b; f; d" p& i/ [
  676. LDA PPU_Addr,X  C. @* U% B: }- C  q/ k
  677. STA PPU_Addr_H
    6 u  a- W% ]4 n) p5 b  B
  678. INX
    0 o+ }; ?9 X% O) q# I) g/ a
  679. LDA PPU_Addr,X
    3 q6 Y5 `% L0 |2 C$ }
  680. STA PPU_Addr_L
    : H& c2 W- t' O9 W% D2 `
  681. ;------------------------------
    * D$ q* n7 Z9 V0 f* H2 ]
  682. PPU_Set_Increaser   ;设置写入地址
    5 |1 [' v; O$ A$ N
  683. LDA PPU_Addr_H. L% X& n! p1 D4 ?6 c: {
  684. STA PPU_ADDRESS
    5 w5 Z* T' z+ T" i. u
  685. LDA PPU_Addr_L
    % c- C& B* ~! O! }7 d
  686. STA PPU_ADDRESS$ c, F3 w. R0 S: A
  687. ;------------------------------0 a. C& X  q9 x" ?8 L: F6 I2 k2 g( |
  688. PPU_Write   ;写入数据
    0 }2 n' F" w7 w! f& Q7 g
  689. INX
    ) G3 }8 @: G( o2 o# e3 g
  690. LDA PPU_Addr,X) A3 Z9 p) V6 P  [2 C0 V
  691. CMP #Flag_Over
    + P, p0 D, ~$ [
  692. BEQ PPU_Proc_End" G/ ^: V* q# e9 B0 u  N  V4 W
  693. STA PPU_DATA+ K+ f$ c2 v+ i
  694. JMP PPU_Write
    ( R. |7 _5 e) B5 k
  695. ;------------------------------
    * z# e% h! b& I6 G4 L! Z7 v
  696. PPU_Proc_End  ;单行写入结束6 i1 `1 E; y6 P' i7 V
  697. INX
    / U) y* o8 q+ R1 w1 R
  698. LDA PPU_Addr,X
    1 X2 F0 X. X( k% A7 h3 u, e
  699. BNE PPU_Mode_Select
    ) W% i. K3 l" Y1 |7 A( i
  700. STA PPU_Addr, O3 W! o( E5 X7 r
  701. JSR Update_Palette_Color
    2 t* A; f% j: l3 @
  702. LDA #$00
    ( f5 b: t, b- s
  703. STA PPU_ADDRESS
    * E' i9 X* r' ^" j8 e
  704. STA PPU_ADDRESS
    5 E9 B; Q( d8 r& X. d
  705. STA Show_Track_Name
    $ a) k/ P; {- k0 q' d$ X5 d' K. s
  706. LDA #Scroll_X
    0 x3 O7 w0 i, @1 u; V
  707. STA PPU_SCROLL
    # F8 B/ T5 E2 I; ]4 R
  708. LDA #Scroll_Y( Q: r1 G- @/ K6 i1 i8 u) G
  709. STA PPU_SCROLL# E+ X* i) B8 F6 Y3 I3 G: p- o! y4 ?
  710. LDA Screen_State
    1 f+ R7 Y( Q2 {) ?9 M# E" o, q
  711. STA PPU_MASK7 X4 N% M; d( K8 x0 R& K
  712. RTS, n, l' }5 A/ T  S& U. f9 b

  713. ' [' }8 F  R: R
  714. PPU_Proc_Clear) l2 m6 a- N$ V. }
  715. INX
    - N0 A4 A1 I) T
  716. LDA PPU_Addr,X0 m. N+ c0 G7 K; |% _
  717. STA PPU_ADDRESS; j4 \4 O) h. F9 H6 s6 J- Q$ I
  718. INX& y" j" D) A4 q9 z6 C* v
  719. LDA PPU_Addr,X
    6 u% r, ?, @$ Y9 i; Q2 ~+ I7 I
  720. STA PPU_ADDRESS: O$ a+ Q$ Q3 P1 Y: @3 ^
  721. INX
    8 t% |6 [4 |- G4 R+ P
  722. LDY PPU_Addr,X
    ' ]2 m1 I# M$ [( R$ X
  723. LDA #$00
    " o4 I* ^. T6 D0 m3 U
  724. PPU_Proc_Clear_Write
      h& e9 J& D. `1 s2 n
  725. STA PPU_DATA
    3 c8 _  l1 h$ L! E1 S% O! e
  726. DEY
    % e. j. R8 E) k" q/ _" Q8 M
  727. BNE PPU_Proc_Clear_Write# ~  K3 _# j% _9 B; c, v0 N
  728. JMP PPU_Proc_End$ j5 ^1 x; i9 I9 Z/ u

  729.   V/ Z' k9 n6 d  {  @1 R7 G8 O8 @
  730. PPU_Proc_Cnt_Line
    ( D# c3 R% _+ _+ c; E6 @
  731. INX$ ~! A- ^% e- q2 V
  732. LDA PPU_Addr,X0 Z; c0 ^$ l7 Q( D
  733. STA PPU_ADDRESS8 C! {& p* I. A  ]
  734. INX
    : A" P& }$ s! `: G
  735. LDA PPU_Addr,X+ N' T9 c4 ~) y5 u$ h& Q6 z' ]
  736. STA PPU_ADDRESS2 O9 G+ G' F0 g, I2 W
  737. INX( {& i$ p' K# I# C( w/ O2 O3 X
  738. LDY PPU_Addr,X; K( i, L/ V; R% ~( r- N
  739. PPU_Proc_Cnt_Line_Write
      `1 [) o8 H, u
  740. INX
    4 r% ?( u1 g. @1 h& I' \
  741. LDA PPU_Addr,X
    / z# {" d( ]1 [7 ?. a
  742. STA PPU_DATA, ^% d9 ?4 S9 Q4 G: H9 ^
  743. DEY
    " C( D6 t% S9 K. f& v( W8 h1 |5 D8 e
  744. BNE PPU_Proc_Cnt_Line_Write3 \+ \* d- ]# T' Q
  745. JMP PPU_Proc_End
      x& `3 Z+ v3 z% S! J3 ]: L

  746. : h- \* m# V" f6 F$ L
  747. ;==============================
    # v; m; E* Z- m
  748. HEX_To_Dec;十六进制转十进制; I3 h; q  z: d! J7 A3 I9 M2 y
  749. STA HEX_Data% u9 \8 z( {/ f0 y. W
  750. PHA8 ?; {; T+ Y. Q2 ]0 ?) W, S7 |
  751. TXA! a/ u" A" Y7 P0 i/ t) |8 a6 D
  752. PHA" \  g* C1 Y* d; h) I" C
  753. LDX #$00
    4 ~* z8 f$ W- e( V- }
  754. LDA #$003 K8 W7 N7 o/ ^8 c7 \$ T: O* @
  755. HEX_Cln  z* P/ X  P- q# m3 @: h: ^+ J
  756. STA DEC_H,X
    1 g1 |' {# J9 e& O( {8 ^1 h
  757. INX
    ) b* ^7 @- c5 [9 `- b
  758. CPX #$03* E/ z; g' [3 x  ?) S; A' W& L
  759. BCC HEX_Cln. J* V% F2 M/ Z5 A" p% ?$ C6 b6 q$ M" `  q
  760. LDA HEX_Data
    , N' [. I/ z' V$ [) A5 p
  761. ;------------------------------. l  e# D2 p$ S  k5 N
  762. HEX_1007 t- W2 t* S& X9 T% J! x% J
  763. CMP #100
    - T" I; [0 M# L' ~# K- E- P
  764. BCC HEX_10
    " ~! l) M* u# F4 E6 y6 ~
  765. SEC
    - \( }- ?+ F; d
  766. SBC #100
    ; v) D1 O" ^) l2 v
  767. INC DEC_H. z$ J" J- m5 n$ M/ h# F
  768. BNE HEX_100
    3 Z2 g! p- P* `! z  V
  769. ;------------------------------
    ' V5 p2 S+ o4 v! t. ?' A/ n$ l) D
  770. HEX_10
    9 _7 Z* P3 K8 o- x; v' [, d
  771. CMP #10( D3 ~  K8 p' q4 V: T
  772. BCC HEX_1
    / a7 ^3 S: b& V6 v+ p2 X
  773. SEC
    ( x+ _/ o2 E0 A- B* ~0 E7 w: ~- t
  774. SBC #10
    0 G; Y5 Q! \5 n9 e$ L
  775. INC DEC_T
    ) x5 r; k+ u; R; |6 T
  776. BNE HEX_10
    1 g- e, B; V- d. a: X
  777. ;------------------------------  p# r# s- {' u3 W1 n( L8 y) Y
  778. HEX_1
      S/ J2 @6 B8 c
  779. STA DEC_L
    - c$ v& N5 _, K+ a
  780. PLA
      k: W6 |: c3 l
  781. TAX
    % S. `, z. S/ ^" B' r9 z
  782. PLA! ~* D0 ~/ D. w6 R8 `0 F
  783. RTS
    " x5 y5 r# p% T) ^( _  `, h
  784. * Z9 C& y! P$ m2 I
  785. ;==============================
    8 i2 J$ s. s; S. k
  786. ;音乐曲目显示  G  w* @1 L* D, ^8 X! ?% m
  787. Music_Show( T5 i2 Q5 z3 k# S4 v
  788. LDA Music_Cur2 O( u0 m0 ?: t* w. _8 E6 V- V
  789. CLC
    * L/ Y3 G3 S9 V" i6 E
  790. ADC #$01  n3 R2 m% F% q4 x2 Z+ W! m! p
  791. JSR HEX_To_Dec# B4 d+ V! ^6 s5 i
  792. LDX PPU_Cur
    : I5 X- y9 z* D( C
  793. LDA #$FD
    " G: B  a! _7 q! V: U( F/ ]
  794. STA PPU_Addr,X& c; X  l8 h+ u7 L$ l" |/ @
  795. INX+ G: Y) I# [( p' h  q
  796. LDA #HIGH(Play_Index_Pos)
    - ]5 z& d* N$ Y0 G$ J
  797. STA PPU_Addr,X7 Y! }* L/ ^, G. y
  798. INX" R: O' M9 p' h* `
  799. LDA #LOW(Play_Index_Pos)
    : c1 R3 k( V9 F5 _4 A- n& g
  800. STA PPU_Addr,X
    2 F+ a( a& w* s: R
  801. INX
    1 h$ B. D( ^6 o7 x" T
  802. + l' I3 @2 t2 A2 k+ j# q  z
  803. .IF Music_Song_Total > 99
    : a+ u2 n; T8 F- A8 [
  804. LDA DEC_H
    , ]! P1 s( Q6 K& ~! s! d
  805. ORA #$30
    2 ~1 \$ T6 C' a3 ?$ b4 d
  806. STA PPU_Addr,X0 J3 @. w: g  Y; p" ~. u; d
  807. INX
    4 \7 |$ q- @# l- U' ?+ ~/ ~
  808. .ENDIF, ~% S5 X- m6 U, W; V
  809. ( C2 N6 m/ D5 s
  810. .IF Music_Song_Total > 9/ l4 l5 Q  z  F0 t$ C" D
  811. LDA DEC_T
    ( |5 P6 z+ x; p4 I
  812. ORA #$30+ h" ?5 a( u& z
  813. STA PPU_Addr,X
    : u9 e  E1 r; c0 |% E3 |
  814. INX" @% k6 K& J1 ^; o$ {4 p
  815. .ENDIF" H1 s4 a% H5 P+ C
  816. 9 n# J  d  x9 y1 V
  817. LDA DEC_L% L  i4 A% Z5 Q8 e$ G' f
  818. ORA #$30
    ) u* K( i+ m- E; P* y; e; j
  819. STA PPU_Addr,X
    ; u2 T4 h+ s6 p5 Y
  820. INX6 U! i: J7 H( b

  821. - M6 b- ]1 I2 K8 X- h
  822. LDA #'/'
    2 e# p( ^' }& k& O9 j% c
  823. STA PPU_Addr,X% N" P! U$ T1 V( p. Y. p
  824. INX. ~! Z& _  N; N6 R: Q
  825. Music_Show_Total+ B+ U2 O# |; B- b
  826. LDA #Music_Song_Total/ c) Z2 C9 \  O! T
  827. JSR HEX_To_Dec8 r. O! ]/ j( g

  828. ( b% ]' R; q, c; l6 f+ U- _
  829. .IF Music_Song_Total > 994 u$ X, U7 F) W  @4 f$ x
  830. LDA DEC_H! y' A( G! |- X
  831. ORA #$30
    & t) _- S, E- }% p
  832. STA PPU_Addr,X
    ; F% M$ ~% {' c* e6 ?; j
  833. INX1 X. n# y3 Q3 F$ C& l
  834. .ENDIF. \: X1 y# v6 z, l+ ?$ h
  835. 9 p8 D  D+ V9 H& l, Y; ]2 E
  836. .IF Music_Song_Total > 9# O- |* I# \$ W: g5 y% \0 k3 ~4 u
  837. LDA DEC_T
    ( Z6 b4 d8 ?1 g) F9 }1 g8 N
  838. ORA #$305 C* }. e- }2 b2 {
  839. STA PPU_Addr,X6 L4 z* F4 u! L. s: {
  840. INX
    8 }% C4 z* J6 T) f7 b* D+ k4 c' p
  841. .ENDIF
    ) u. s6 o7 r1 o7 N# d

  842. ) {4 l: X7 w, Y3 H
  843. LDA DEC_L
    3 f' W% V- ?  ]( R- x% I' G3 |
  844. ORA #$309 ]. a/ l+ B/ S; N/ O
  845. STA PPU_Addr,X
    5 N' H( B: c$ k# N3 b2 T, A
  846. INX  ]* `6 {1 y' |) P% X6 {
  847. 9 U1 v; J5 R- F6 A# Q( Y% R8 n
  848. JSR PPU_End% ?) D) v1 I1 c8 [/ N
  849. Music_Show_End! n, j% U# i( s; {: V9 e, |  e* x
  850. RTS! a* N8 x  J8 D% [3 f# j

  851. + o% v/ O: c2 T  q" O2 ^; W
  852. ;==============================3 k/ a1 I. Q$ i& L; z9 |0 A
  853. Time_Show;播放时间显示
    6 K! Y; g+ ]; n! Q
  854. JSR PPU_Addr_Set
    & Q+ C0 c! h7 d
  855. LDA #HIGH(Play_Time_Pos)7 ]2 h: _0 ]' ^6 A
  856. STA PPU_Addr,X4 S" N4 i4 c* g5 F
  857. INX0 b, z( O5 ~9 d
  858. LDA #LOW(Play_Time_Pos)# V( K" L( O# [; ?4 a$ a0 f
  859. STA PPU_Addr,X/ r7 H* S1 o- m* T; P! P
  860. INX
    6 [4 X" g: ?! a" y5 g( D
  861. Time_Show_H
    0 _( m7 N+ ~- N/ ?5 q, r1 [4 F
  862. LDA Time_H  i  x. y# z; r" _9 p) v: D
  863. JSR HEX_To_Dec
    9 I. y/ L9 M) Z& m$ J9 z
  864. JSR Time_Digit
    $ n" E" T2 t$ y7 Z: v- ]
  865. LDA #':'
    1 q/ Z3 [) o/ X" X1 a9 s1 D& I
  866. STA PPU_Addr,X1 d# O9 e% G- ]$ f
  867. INX5 K5 V; ~. w; z
  868. Time_Show_M
    3 k/ c6 c4 X8 s
  869. LDA Time_M
    ) l! l' c' q% ]& i
  870. JSR HEX_To_Dec. i, a) P3 o9 n4 o4 O' U9 j
  871. JSR Time_Digit$ u. b3 p& |4 G2 ~
  872. LDA #':'0 T/ h  p7 w* ]7 Z/ V7 J7 V) @1 o
  873. STA PPU_Addr,X. A# ~9 Z" w4 r
  874. INX3 U7 y) k! Y8 q6 L
  875. Time_Show_S. |! K, r6 y2 {& h# R1 t
  876. LDA Time_S* e! k; F: n# ^- ^
  877. JSR HEX_To_Dec
    ; G6 Z7 Q$ K4 n6 P
  878. JSR Time_Digit5 I& [7 N- K( u1 q
  879. JSR PPU_End
    & o! m: e  a7 \* X
  880. Time_Show_End
    0 I- P& J7 m9 |% T4 S0 D
  881. RTS
    : d# B9 K5 F+ j  z0 R6 M! |; _8 g
  882. ! i  `4 r9 \% ~4 I! T
  883. Time_Digit4 [# H7 w( [3 ~
  884. LDA DEC_T
    8 i" D3 F" ^' l1 k( X
  885. ORA #$30' U$ z# I8 Y5 `  o
  886. STA PPU_Addr,X* {# ]1 P- M4 n8 Y+ X9 E! V
  887. INX  M8 X) k. |- o, j$ E
  888. LDA DEC_L
    " Z5 }4 J+ U% {, E, s; M  |" W
  889. ORA #$30# _# o2 \. Z8 |7 K3 n6 e8 P
  890. STA PPU_Addr,X
    % N6 Q7 @* q6 f3 c
  891. INX
    - Y+ G; b" F. P* Y6 L2 O( }
  892. RTS
    5 O$ |) f" H& H+ U% ]% Q. x

  893. 8 B  w9 M( \# X6 ]+ q. U
  894. ;==============================
    & S3 l  c( _: I5 ^
  895. Time_Count;计时4 S) S+ ]* x& L* ]7 j- t
  896. LDA Music_State" ^1 D( Q( Q" }5 ^( _( X3 G
  897. ORA Time_Wait_Cnt/ a; O; S- L) V+ r% b
  898. BNE Time_Count_End3 M7 q# Z$ w4 T: U
  899. INC Time_Cnt6 ~6 n4 b3 a0 X. C
  900. LDA Time_Cnt: K2 |/ g; W0 ^+ H1 @, V
  901. CMP #60
    $ n# M/ O. H, a7 ]; \7 W
  902. BCC Time_Count_End
    , l- u: R0 E0 D
  903. LDA #004 C+ \4 z- I4 _4 W; v
  904. STA Time_Cnt1 A. S" k! B2 M7 q3 i1 ^
  905. INC Time_S
    8 A5 ~$ ~+ ~" `, h, G
  906. 9 x% G; f# K) c4 O
  907. Time_S_Cnt: ?. k  C( I, b  ~5 {* h% V" W
  908. LDA Time_S
    . C, H1 ?4 [/ ?# |
  909. CMP #60
    & D% E; V% ]+ s% K4 C
  910. BCC Time_Count_End  D- M/ b% N' h( ?
  911. LDA #00
    0 N6 V8 g- v2 R% f; \$ F8 e
  912. STA Time_S4 ~2 _7 h5 P) o
  913. INC Time_M
    5 Z' y8 o. f8 w+ Z8 T
  914. ; c9 S; i7 b  \/ p0 r+ A
  915. Time_M_Cnt) f9 d) s( B, d# `5 p
  916. LDA Time_M
    # X9 S9 R0 s2 L6 S5 f
  917. CMP #60
    9 r+ t$ ~8 g/ Z/ R( e% X
  918. BCC Time_Count_End4 `5 A3 V9 T0 n: g3 _$ I- D
  919. LDA #00' Q  I1 x* {7 F  c/ V! s
  920. STA Time_M
    + P$ d7 W$ A( _6 L& n
  921. INC Time_H5 i# ^- q1 F" z3 ]/ z5 R! s1 ^

  922. ' r7 m: \3 b4 [( k
  923. Time_H_Cnt
      D; q1 k" K7 k+ |' k
  924. LDA Time_H5 M  b3 N: v2 K/ [% E% i2 K8 L3 [' W
  925. CMP #24
    & `5 a/ e) Z. v5 e' e
  926. BCC Time_Count_End3 w( \. z) @. r* L4 l1 h4 Y3 E
  927. LDA #00$ u- i1 K/ T- h" h
  928. STA Time_H( d" [, K7 O0 p6 B4 [0 h1 R
  929. % `) i, B4 |! Q
  930. Time_Count_End1 ^( K3 V% i7 c5 A+ D) W; v# K: y
  931. RTS1 c3 p3 u+ [. {# _5 V0 C: ?8 ~$ }9 g1 r

  932. 1 T0 f" d% o3 H5 B% H
  933. ;==============================, g, }* _" N4 K- c, O/ R, }6 B8 P
  934. Time_ReSet;播放时间重置: B8 n- q5 l5 l  j. k1 b' S
  935. LDA #$00
    ! w+ X3 a# ?, P$ z% g( Q
  936. STA Time_S  w: C% q' ~% o: [* `1 D1 ]( _- [7 h6 z
  937. STA Time_M & ^3 V: i3 \+ o) i
  938. STA Time_H0 E1 \$ ]; F: X/ v6 S! g
  939. STA Time_Cnt' p# b$ I, D7 N& Z4 ?3 y9 z( E' I( a
  940. RTS2 j( _/ c4 z( p+ S: n

  941. / Y' _1 L7 F3 v2 b- L" g3 V* B8 ?
  942. ;==============================
    0 Z  c6 z2 s* I) m4 Y
  943. Music_Bar_ReSet;音乐条重置
    " u) I0 F! O0 h
  944. LDA #$00! U4 S$ h$ j. ]1 D
  945. LDX #$006 `8 h- F/ v4 J! r+ N0 s: C. w
  946. Music_Bar_ReSet_Set& B3 X$ b+ q  V2 }  l& Z+ ~. K0 ^
  947. STA Sound_Bar,X
    + r6 _* s; p) y
  948. INX$ L9 F3 ?- R9 ]! t
  949. CPX #$10
    + r% M$ e: C2 ~, H' `9 b" Q
  950. BCC Music_Bar_ReSet_Set
    , h9 [1 ^! F. q  ]
  951. RTS
    ! q3 s; X& T, i: F$ P% S/ Y
  952. 4 ^- E! I9 a( C4 B: P. v+ L
  953. ;==============================
    6 }' a& I9 b' ?# O
  954. PPU_Data;PPU数据写入
    : Q, f5 `# j- U; U( c
  955. STY Data_L/ @( o( F: a7 G$ E6 O
  956. STX Data_H, e4 ^4 F) a2 L. B
  957. LDY #$FF5 M/ Q- e4 E; P; \
  958. LDX PPU_Cur
    9 f/ Y' ~7 S/ y: `8 V( e
  959. DEX
    2 K/ N5 I: W; L" h3 G: t$ p( z. i
  960. PPU_Data_Beg4 G3 R' i0 T* R# \
  961. INX8 @, A. ^7 s! k. N
  962. INY
    1 D2 _# T' y+ C& X6 @
  963. LDA [Data_L],Y
    / u* c9 W% A/ M
  964. STA PPU_Addr,X
    " R3 [7 t5 X" ]$ E4 ?$ `# q6 G
  965. BNE PPU_Data_Beg
    8 n: Z, @3 ]) q+ I. Y6 {
  966. STX PPU_Cur
    % ?3 G* |0 p0 r* a0 u7 r6 i! \5 o
  967. PPU_Data_End9 `( t( `/ V! D, I' \; A- W  R
  968. RTS! r* P) C1 O( a" }
  969. ' s( B( e% y5 m- X9 O' {6 a) r
  970. ;==============================( u0 g3 b$ Q, l- `+ d- H# Q4 b
  971. Music_Stata_Show;播放状态显示0 A/ f; B! J7 o! x  {* n
  972. LDA Music_State1 N3 Q- y7 z1 k7 [0 R( G
  973. BEQ Music_Stata_Show_Play
    6 i; x* K/ C* d# ^* f# s$ {$ a
  974. Music_Stata_Show_Stop4 T0 r8 G9 q0 b
  975. LDY #LOW(Music_State_Stop)
    , D, ?5 |2 c) ]4 p5 b4 w; K
  976. LDX #HIGH(Music_State_Stop)3 l2 m7 P8 _7 W3 f+ X
  977. JSR PPU_Data
    . ~% r: y) B( P. {8 ~% ?( |! J
  978. RTS
    & E" T  [# a# n7 g; J
  979. Music_Stata_Show_Play7 b, H3 S. i; V) {3 ~
  980. LDY #LOW(Music_State_Play)4 v. P7 O, _1 w& w! I1 v6 r
  981. LDX #HIGH(Music_State_Play)8 J! n# A3 _: V# p" X/ F4 ?
  982. JSR PPU_Data! N# m) C* N& p( ?* b  V. Y; i
  983. RTS3 J* c! i2 x) x! e: X6 R6 L

  984. 3 k5 B" ]2 E( R8 T, m5 Q5 |
  985. .IF SOUND_BAR_SHOW_ENABLE
    * g# t1 u4 L$ [: b* x+ N& a- W' a
  986. ;==============================
    ; B; C& y6 p2 Z1 y5 s
  987. Sound_Bar_Text_Set;标题与音乐条初始化% v4 o4 W" x( W1 j. {; ]
  988. LDY #LOW(Sound_Bar_Text_Data), ~; V; I$ R0 t" p( O
  989. LDX #HIGH(Sound_Bar_Text_Data)
    : V  x( C. L3 q* L3 t
  990. JSR PPU_Data
    6 q" N$ k, k1 `1 D$ Z+ o, F* E% k
  991. RTS
    $ O$ I* L$ g0 L/ i+ S
  992. ! q3 U; i5 p6 v  Y2 c, t! o
  993. .ENDIF
    ) Y3 m6 h6 j' F
  994. # D  C  e! W8 f+ @) d$ W4 R
  995. ;==============================
    $ g' ^4 [1 K# D6 V3 `
  996. Set_NameTable_Attributes;设置命名表属性& l, W; m- P2 ^3 p/ j" E
  997. LDA PPU_STATUS9 t8 q& L0 j, Z( g
  998. LDA #$23
    4 F) B4 S3 K# a
  999. STA PPU_ADDRESS
    6 N: ]3 p" `- b# T& f5 W- S" E, q
  1000. LDA #$C0
    ; p- _6 s) }( D
  1001. STA PPU_ADDRESS
    5 j+ _8 ?% e) }- a/ t0 h! X. |
  1002. LDX #$00
    $ w' V  ?! ?$ Y* i/ k/ y  `
  1003. Set_NameTable_Attributes_Write# ~$ U) W; V. Y1 Z
  1004. LDA Palette_Attributes,X
    , j5 G4 h% ], M4 X) Z
  1005. STA PPU_DATA
    $ O- t6 p7 M3 y1 x9 P+ S( l
  1006. INX
    : t- `# j. S1 l
  1007. CPX #$40
    & b/ P2 E/ A, @# z
  1008. BCC Set_NameTable_Attributes_Write
    3 u# l' g4 e' W! q0 H  t% y
  1009. RTS
    6 M8 N& l9 [9 N, ~

  1010. 9 ^' H: E+ }% T' {
  1011. ;==============================
    & p7 h5 n, g0 w
  1012. Set_Palette_Color;设置调色板数据
    % a) ^& P% [9 o1 |! S. t" h! n
  1013. LDA PPU_STATUS$ a% d8 S7 X7 q3 b
  1014. LDA #$3F. n' j2 o  y9 j& q
  1015. STA PPU_ADDRESS+ g$ _- q) u3 k, i" \) B8 s0 C
  1016. LDA #$009 ]1 j+ n. \* P
  1017. STA PPU_ADDRESS
    * D/ E& u  Y  Q) s1 `5 A
  1018. LDX #$00
    & \( w: ]5 S1 o6 Q' ~$ A$ L( f# ?( o
  1019. Set_Palette_Color_Write
    $ A8 D$ a( g# B+ @
  1020. LDA Palette_Data,X4 o. E4 C6 l5 O0 T9 E( k/ Z3 l
  1021. STA PPU_DATA
    % U0 `3 Y+ [* E4 d
  1022. INX
    & M& R3 y* d# n! P' X/ m- z
  1023. CPX #$20' o7 J8 v# |- a% o4 S5 s1 o
  1024. BCC Set_Palette_Color_Write
    " k4 ]5 [+ \6 K; Z6 K# O7 L
  1025. RTS+ [; o( U: n/ m0 D# u

  1026. 0 m( @4 s( b. u
  1027. ;==============================4 r8 Z/ h7 p( x/ b) c2 ?8 t
  1028. Init_Palette_Addr;初始化调色板数据
    & ?0 |% b: B, g
  1029. LDX #$00
    3 B- {0 b5 y5 E3 K, Q8 d
  1030. Init_Palette_Addr_Write, y4 U) x- g" U3 K
  1031. LDA Palette_Data,X
    : u/ k  V! h) ?: Z' \
  1032. STA Palette_Addr,X
    + M9 m. D  O& g. b" V  G8 `
  1033. INX7 l6 p6 F& L# p3 f/ l9 V% L
  1034. CPX #$20/ L, w0 p  P: M# |* C# G5 `
  1035. BCC Init_Palette_Addr_Write
      m) u; a: N+ Z6 B+ g, x* w& F
  1036. RTS
    * G6 @- t0 U/ U6 O, x* J$ D
  1037. 3 X, |8 a+ l, _7 ~# N
  1038. ;==============================5 j% {# u, j3 }; j' D
  1039. Update_Palette_Color;更新调色板颜色
    ! _+ {9 R- a$ B/ a: ~
  1040. LDA Show_Track_Name+ n! P" I/ \, p7 X
  1041. BNE Update_Palette_Color_End
    1 k( K! Z8 n6 h/ B( M  w) J$ x
  1042. LDA Palette_Update_Flag5 b  Q' o" m6 v
  1043. BEQ Update_Palette_Color_End
    : T( e# {; V9 v
  1044. LDA #$3F! y6 x0 ?& v: H7 X3 V- F( i1 V
  1045. STA PPU_ADDRESS* ^- d6 u3 f4 W# O$ e: z! C
  1046. LDA #$00
    3 x/ e5 L% B9 s& d4 g: J% x
  1047. STA PPU_ADDRESS9 L& U9 ?1 M4 _4 b" e! p  B* Q$ F, h8 P
  1048. LDX #$00
    + c% J8 R( F( \( o1 y' L, M3 A
  1049. Update_Palette_Color_Write
    6 o* L$ ~7 V& {# K1 e! D' d" T& G
  1050. LDA Palette_Addr,X" I+ ^6 B" |' W
  1051. STA PPU_DATA# R* e" \/ m2 D8 q- B  x
  1052. INX+ |% q- _+ T) t2 h7 B, q+ }
  1053. CPX #$20
    3 Y1 b5 X( p3 M8 A9 ~
  1054. BCC Update_Palette_Color_Write
    0 j' l1 Q- [4 i# u
  1055. LDA #$00
    ' F0 j9 y* B: z  A- d; [/ M7 H* V
  1056. STA Palette_Update_Flag
    % l7 Q8 y$ D7 \0 @( d
  1057. Update_Palette_Color_End# z1 q4 u% ~/ U0 J& Y; Z3 g
  1058. RTS
    0 K. K# e/ |3 A% r- c2 ]) V
  1059. , j) }8 _# \% W1 B
  1060. ;==============================
    % {& ]) X3 l/ F7 @
  1061. Update_Palette_Data;更新调色板数据
    ' W& R3 f5 }, C
  1062. LDA Show_Track_Name; P7 L  R$ a. w" k
  1063. BNE Update_Palette_Data_End
    6 V, b* [% M2 x. T' h
  1064. LDA Music_State
    4 R5 I  _( {) m( [
  1065. BNE Update_Palette_Data_End( Q- Q# n1 |0 }1 p6 k, \3 |
  1066. Update_Palette_Data_Check
    1 f  C6 {' r# S5 x! k4 }2 Z5 i
  1067. LDA Palette_Wait_Cnt
    - x$ n( y3 p8 r$ N0 ]: F
  1068. BPL Update_Palette_Data_Check_Over5 z  w6 F0 R6 U! c- i5 X
  1069. LDA #Palette_Update_Interval$ R, U3 h2 u" ?# B. t
  1070. STA Palette_Wait_Cnt
    9 K7 R: t8 F, W
  1071. Update_Palette_Data_Check_Over' q9 k1 Y, R' e/ E9 d0 ?7 |
  1072. DEC Palette_Wait_Cnt
    7 H  V% o5 C# D3 }; n3 K6 y9 o  K
  1073. BNE Update_Palette_Data_End
      ]$ C* N+ Y2 i3 I2 Q# e/ v" [
  1074. INC Palette_Update_Flag
    # J8 ^& G+ ~' {: O
  1075. LDA #Palette_Update_Interval8 Q+ t3 m) W% m
  1076. STA Palette_Wait_Cnt
    0 o6 W# v2 \4 x1 {, m7 s8 a
  1077. LDA Palette_Update_Addr# D, `* x" B  o/ }$ x- d% L& M, H
  1078. CMP #Palette_Update_Max
    & U: s1 Y' v* |$ r1 w$ N" ?
  1079. BNE Update_Palette_Data_Set8 G2 b2 \; y( l$ W& g4 H5 }7 Y2 y+ ~
  1080. LDA #Palette_Update_Min - 1  \4 X# F% a2 E/ r7 v5 a
  1081. STA Palette_Update_Addr% C( d  D) s4 `0 u4 ~- x+ C. h
  1082. Update_Palette_Data_Set
    ! Z4 \$ x' A: R
  1083. INC Palette_Update_Addr
    ! I3 x3 g  P' H+ Z/ u
  1084. Update_Palette_Data_End
    0 Y/ t8 _' }! \- u0 \6 t
  1085. RTS, Y) O5 [: v& ?7 v7 Q& [7 P

  1086. 9 I  d& S( e+ o. z
  1087. ;==============================
    % {0 Z) T* N; q; @  `
  1088. Show_Music_Text;显示静态文本2 j8 x1 ]# d) P; u- c" @- I7 @
  1089. LDX #$004 D0 D6 J. x2 v: N0 L: X8 p
  1090. Show_Music_Text_Set
    4 H* f( W# t; O% t2 f
  1091. LDA Static_Text_Data,X- z  ^) b1 P/ ~0 O, b8 S) ~
  1092. STA Data_L
    / q1 d$ F* q% G( Q* O
  1093. INX
    & t" ^8 {# `6 f5 w" X7 ~
  1094. LDA Static_Text_Data,X( W) z0 {) T4 }8 @1 ^- M# e
  1095. STA Data_H
    # x& |# [, v1 O9 {/ H
  1096. INX3 d0 c$ C0 G: X1 |
  1097. LDY #$00# `* Z; }; z9 Z7 ]
  1098. LDA [Data_L],Y
    : |5 L, w$ r  R4 B
  1099. STA Data_Cnt
    % n0 I2 w2 P) j0 \8 C
  1100. DEX
    % k6 G1 p0 A' a8 L' @/ N7 h
  1101. DEX+ Y" q( [1 h. D$ F
  1102. LDA Static_Text_Pos,X0 ^& }" J% v$ s! U- x
  1103. STA PPU_ADDRESS
    ) W. ?1 q$ a& X) d' V" A: {6 r6 e# b
  1104. INX$ [5 q$ v' X# f
  1105. LDA #$20( T# L9 O8 F( C; @$ A) R
  1106. SEC& O/ s. n" D- c' q# @* }0 }
  1107. SBC Data_Cnt8 i" A6 H, j. G
  1108. LSR A4 a" i" K0 e7 O: W, P
  1109. STA Data_Buf
    & y5 L; C' Q9 I
  1110. LDA Static_Text_Pos,X
    9 q; y, T) O- {0 M+ `, b( ]% L
  1111. AND #$E0' G. i, i/ g$ H
  1112. CLC2 i+ l  y5 e: U2 {9 `
  1113. ADC Data_Buf4 \; r. ^" g& W. E% [( b. j
  1114. STA PPU_ADDRESS
    & B2 F& x( q  K# T# J
  1115. INX7 i& I6 \# A- ^2 `9 N; \
  1116. Show_Music_Text_Set_Write
    * J( e# |$ R+ {
  1117. INY$ B5 A# M+ n, S) `& g; O. S
  1118. LDA [Data_L],Y, n( r$ c& m+ M% L3 C; l5 I
  1119. STA PPU_DATA
    $ m/ {: y9 d: i6 L# N/ f1 G& k3 p
  1120. DEC Data_Cnt
    ' h: L" o  |, i# Z; D7 N2 D% p1 y
  1121. BNE Show_Music_Text_Set_Write8 N8 D* l3 Y0 a8 }
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos6 i( \9 \; _; F$ k
  1123. BCC Show_Music_Text_Set, M9 w: ^, [* l$ [! M
  1124. RTS
    4 l$ ^/ X6 k# ~3 e4 c
  1125. 4 n1 p& ?1 C& J3 b8 N5 W- x
  1126. ;==============================
    $ P7 T9 ~2 e) ^" v
  1127. .IF Track_Name_Pos;显示曲目信息
    ! ~/ q5 f, {' x
  1128. Show_Track_Info. d! {) O0 J- s9 U5 ]; F
  1129. INC Show_Track_Name
    * x, h8 k# A& b; ?
  1130. Show_Track_Info_Clear
    2 [7 y$ F+ I2 \4 x* g
  1131. LDX PPU_Cur
    # U4 h) @! a2 t: Q- q
  1132. LDA #Mode_Clear
    5 ]6 l7 `1 b& N  f) ~( o6 Y
  1133. STA PPU_Addr,X
    3 W/ [5 j$ [, u' D( S  R
  1134. INX
    % j  U6 ~; O; @5 [5 ?  F1 V
  1135. ) ]# [0 D7 Z: Y7 l# p& T( I
  1136. LDA Music_Last
    : |, e" e1 J7 z: K* b4 h' g+ i( Q
  1137. JSR Show_Get_Track_Name_Center_Pos" t$ ?; n8 c, w- Z) ?
  1138. Show_Track_Info_Write_Cur% j- r2 F0 U; R# o
  1139. LDA #Mode_CntLine5 p- o, A, L/ d9 R
  1140. STA PPU_Addr,X; a6 A- `5 b, `# ?" {1 `
  1141. INX: E7 h" p/ H5 T; t% n) R* _& T" G$ R( O

  1142. % f8 F% }9 T' d
  1143. LDA Music_Cur* t! X0 \) M( H1 E! j
  1144. JSR Show_Get_Track_Name_Center_Pos
    $ |. _' G/ l" H8 N- E6 @; ^8 A

  1145. % N8 s" u7 G. g, n
  1146. Show_Track_Info_Write_Cur_Data
    " P: W& o: b. Q2 ]2 e/ v
  1147. INY0 J) D! b6 m0 ^+ r0 l7 {
  1148. LDA [Data_L],Y/ p6 [9 G& ~6 S# m3 R% M) p
  1149. STA PPU_Addr,X% I' f4 h# [1 g' g
  1150. INX
    ; p! Z  f$ H8 o0 y
  1151. DEC Data_Cnt
    2 C2 G. i. _& Q9 X' e
  1152. BNE Show_Track_Info_Write_Cur_Data
    ' {7 u: Y; D0 Y8 _
  1153. Show_Track_Info_End
    ) ~, y' Y) T, t$ A3 u
  1154. STX PPU_Cur
    " O3 c7 Z1 {% B  M2 n
  1155. RTS
    $ N! x, \9 W* R6 U! |7 {& [9 {
  1156. + v/ X) r* Q( Q* C' u
  1157. ;==============================
    ( E# }  V4 Y4 Z
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置1 p. A* A# b, M" v- g$ C4 h
  1159. ASL A! x6 W4 x- p! J% S# ?6 e
  1160. TAY
    - G& C& k2 S1 V# p: C! Q( {& q
  1161. LDA Track_Name_Addr,Y- T% q) k4 f" A, g
  1162. STA Data_L$ k" [  `" D& h+ ^7 s
  1163. INY
    ) |$ G; |& b" `4 d
  1164. LDA Track_Name_Addr,Y  N% E0 Q  L" j8 j" B
  1165. STA Data_H( x9 b. u" m$ d! Z  v8 h2 |
  1166. LDY #$00- C( f) j: A" w0 q3 r+ D8 u
  1167. LDA [Data_L],Y
    + ]' K6 Q9 d, ^6 W
  1168. STA Data_Cnt$ c8 ~! S$ A2 V- `
  1169. LDA #$207 [; S5 J: Q( f/ U  {2 m4 n
  1170. SEC/ [# A, [0 M  `; ~& O5 P
  1171. SBC Data_Cnt1 b2 J- r/ `0 M$ s* P+ N' w
  1172. LSR A
    + T/ N, ~$ u9 l" n2 m
  1173. STA Data_Buf
    0 i. y  Q, L- U6 v2 z6 A5 X9 R, J
  1174. LDA #HIGH(Track_Name_Pos)# m1 S- I* ]% Z) k7 H' \
  1175. STA PPU_Addr,X( V3 T/ c2 W& @; t1 J
  1176. INX
    1 z6 [8 n* n8 U5 }! ]
  1177. LDA #LOW(Track_Name_Pos)
    # K- I4 ?6 V0 o1 C. o2 M+ T
  1178. AND #$E0
    % `8 S" l+ a6 {4 b5 c( K; ~8 O
  1179. CLC
    / b* h) }4 L/ v* f; n# B
  1180. ADC Data_Buf
    % R4 Q, H0 l  e5 ]0 t2 y& m
  1181. STA PPU_Addr,X- x( _6 M- l2 i8 e0 x( }' q
  1182. INX
    % h* e8 |' Y" w$ s  X/ ^: Y
  1183. LDA Data_Cnt2 t! H1 z9 ^$ T5 {% a! L- Y5 k% B
  1184. STA PPU_Addr,X6 R$ C& {# e3 K1 Z6 P
  1185. INX* s9 d6 Z0 S, |, C& f, M
  1186. Show_Get_Pos_Center_End
    - @, H1 y+ g7 N# n' y
  1187. RTS
    ; _1 h8 R% `; @4 `( G
  1188. .ENDIF  i' `) R0 {8 W6 p, ], ]
  1189.   r& q3 P" X! {" ^( [$ g9 d
  1190. ;------------------------------9 n! O0 A9 a- i9 p' r
  1191. ;命名表数据
    8 O7 ]( k3 w; M
  1192. Palette_Attributes1 Z* ]! `- }2 g( A- l/ b$ [( T
  1193. .IF SOUND_BAR_SHOW_ENABLE
    3 @7 J% Z  N4 ^1 [4 ]7 H9 ^2 `
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    # y( G) y; ~% g$ p0 N, p/ x1 b$ ~
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    $ F0 \. x4 W4 h: f) }
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$559 N3 r- \+ I7 {% _
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    3 c. j& ^: X7 @* ^: n! S
  1198. .ELSE- e" A; N# Q4 o3 I9 }* ]+ f  v' n6 A, ]
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    : s* V2 q6 }8 J" }+ f
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
    6 t# V# F+ g4 S, B4 m+ D
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55# k7 h. }% B, y
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$557 J, Q: v2 U3 {. f1 a6 K% C" x
  1203. .ENDIF! }" ]! m0 F1 d) i" T
  1204. + S$ K( {) |- d( K7 F
  1205. ;------------------------------
    5 @0 [+ v4 h7 P
  1206. ;调色板数据: Z) Y$ Q) `' Z; R. N; s* b
  1207. Palette_Data6 v  L4 q" Z  z
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
    5 c) k" \. j  c5 O/ K1 e2 N
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    9 [: q3 z0 }4 f9 w) p. \. r

  1210. 0 k% {/ h' c9 i. B; ^. A' @
  1211. ;------------------------------
    % c) W! S" \4 j$ ~6 V6 W/ I
  1212. Static_Text_Data) P) n0 ~" l  D0 Y1 t5 M6 B3 W
  1213. .WORD Static_Text_Title_Data  E+ F+ z! Z7 a6 B5 k7 d4 B# \
  1214. .WORD Static_Text_Author_Data
    8 m( ]' H4 E; z; @: R) ^7 h- c  D
  1215. .WORD Static_Text_Date_Data
    & c7 X9 c% F7 t* j$ K% x0 a2 w6 X( {
  1216. Static_Text_Data_End% u- b; p0 R# H! W. W3 ?* e

  1217. % T0 f: Z' U' T7 x# j( H( i2 W
  1218. ;------------------------------8 R% }- e+ ~6 h
  1219. Static_Text_Pos
    & J, y) \0 g2 x9 _) h; C9 M+ o; \
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    " _' `( m0 X$ o" U' ?
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    ! L$ q! G2 ~& s% l8 [
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    7 O) G) u5 W* @* l: E, y
  1223. Static_Text_Pos_End# v7 f6 w5 q! g

  1224. , t" r5 [0 G) |
  1225. ;------------------------------( P" k" n8 g$ o7 Q2 q
  1226. Music_State_Stop5 \- {9 S8 ~0 \# E8 w% G6 n
  1227. .IF SOUND_BAR_SHOW_ENABLE
    8 w& M1 f$ b4 R3 I
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    & F4 t* x5 Z7 d' \8 e& j- ]5 Y
  1229. ELSE
    " P' p: Y+ {9 Q8 M9 S/ s$ w
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$001 H8 t4 v( [, o  N5 t, s
  1231. .ENDIF
    & D4 i1 b/ v- C6 w) A3 p
  1232. Music_State_Play
    " g7 N7 W" k6 }/ i! B
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00) \. y! q* Y& @! j- R3 \& }5 T5 G

  1234. 4 M3 i, I1 n7 a$ n( k1 ?
  1235. ;------------------------------2 t% m: }/ t( m# e
  1236. Sound_Bar_Text_Data;声音类型文本/ J, L* g% B! j  L( x# J
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos). B7 B$ N( \. h$ @+ x5 C& Q
  1238. .DB "SQ1-",$FF7 H4 I. B/ L+ L" o/ ~) d4 g; {+ l+ A
  1239. .DB $FE,"SQ2-",$FF! B+ l* T0 A; O* i( f
  1240. .DB $FE,"TRI-",$FF4 r! E) S( p  Y
  1241. .DB $FE,"NOI-",$FF1 I% }" r2 w6 X& ?* V
  1242. .DB $FE,"DMC-",$FF,$00: B9 b9 f3 v# u4 M/ R7 u) i

  1243. 2 N4 X, P: _9 \9 F8 o
  1244. .IF Track_Name_Pos
    " t8 ]+ \, A( b5 y0 u" ]) `
  1245. ;------------------------------
    1 ?0 X" D) b2 @6 k( X' A: U; c
  1246. Track_Name_Addr;曲目名地址索引6 C0 l; c0 m/ \7 K# h* a/ J& v
  1247. .WORD Trackr_01  G& A# ^5 D% ?7 F4 ?7 ]
  1248. .WORD Trackr_02# T0 T- D8 P. H# P& A
  1249. .WORD Trackr_032 o  n2 x6 T6 D7 [
  1250. .WORD Trackr_04
    - d$ s+ N- ]# N% _: G( U) H$ g7 _
  1251. .WORD Trackr_05$ t% p! q* z, {0 v
  1252. .WORD Trackr_064 j) G% O7 n& J6 Y& m( R
  1253. .WORD Trackr_078 H2 e) O6 u; J0 X. s, |! b
  1254. .WORD Trackr_08
    ( t+ r( b# p( }% S* M: r$ x/ y
  1255. .WORD Trackr_09
    . u! W1 c& o( ?6 J1 s
  1256. .WORD Trackr_10
    9 q+ M* c; j3 K) M' b2 F$ {( Q
  1257. .WORD Trackr_11
    / O) M5 J1 c) ]; N7 {
  1258. .WORD Trackr_12
    ; L5 p# T* X" [$ w: y( d6 q. g" q
  1259. .WORD Trackr_13( q. b) z/ n) {: m" ~
  1260. .WORD Trackr_14# B9 K; F4 j/ }. a7 {
  1261. .WORD Trackr_152 K  x4 F% q) y4 l
  1262. .WORD Trackr_16$ _% ^* ]6 [9 H
  1263. .WORD Trackr_178 Z* s9 X/ M: s) h% m6 Q* S
  1264. .WORD Trackr_18
    2 v  c7 Q4 v+ L+ v- J' r, j
  1265. .WORD Trackr_19
    7 G! c% s* Q8 m2 S* J' w
  1266. .WORD Trackr_20* T7 S' H8 P. G/ H1 N  |4 A
  1267. .WORD Trackr_21
    , C6 i# d  r8 ?+ f: z* R
  1268. .WORD Trackr_224 _# |: C2 {8 ^1 W" `0 L* f! S
  1269. .WORD Trackr_235 i6 o7 C' T; G2 a% ?
  1270. .WORD Trackr_24, i. Q, _' Y; o
  1271. .WORD Trackr_25: Z0 s, D# \3 A/ y% i
  1272. .WORD Trackr_26
    9 a( w9 y. \6 K2 o
  1273. .WORD Trackr_27
    ( S8 E3 f4 l4 e/ R6 R6 g8 G' G
  1274. .WORD Trackr_28# a0 i( W6 {* d* @7 a
  1275. .WORD Trackr_29
    4 V) N4 S# t3 M) l
  1276. .WORD Trackr_30! t; ?8 T2 @5 B/ i% F; u
  1277. .WORD Trackr_31
    0 `. @7 L# k. Y& x% [& G
  1278. .WORD Trackr_32
    7 @3 H) \5 W4 q' ?+ h
  1279. .WORD Trackr_33
    2 m+ p, R/ S! y$ \  d/ f
  1280. .WORD Trackr_349 h/ O. F" I' R
  1281. .WORD Trackr_35
    % @7 o' O9 Z" l1 V/ v6 E: g
  1282. .WORD Trackr_36  ]( `8 P5 u- [! n
  1283. .WORD Trackr_373 M* |2 W( P0 c4 s' X! K9 w
  1284. .WORD Trackr_38
    * S5 Z, u& q% Q+ k+ B( l
  1285. .WORD Trackr_39; _7 W* H" Y, i4 H3 d5 U" Y$ h
  1286. % R* i/ I) i. M, ~
  1287. ;------------------------------+ r/ [, z. b6 |/ [. Q5 V
  1288. Trackr_Name_Data; T  \6 L' x' Q5 I; u2 r
  1289. Trackr_01 .DB $05,"BGM 1"6 E! v, c, g, T& W& S6 l2 e
  1290. Trackr_02 .DB $05,"BGM 2") ~1 {: C- i9 ^3 i1 H9 b; R
  1291. Trackr_03 .DB $05,"BGM 3"
    4 J* P4 o' n* |' @
  1292. Trackr_04 .DB $05,"BGM 4"4 \" D: G* M9 W8 Q7 U
  1293. Trackr_05 .DB $05,"BGM 5". T- J+ w7 o# X, Q( T9 U" S
  1294. Trackr_06 .DB $05,"BGM 6"
    % w- b0 Q4 Y9 X; Z
  1295. Trackr_07 .DB $05,"BGM 7"* \- a; I1 W1 J6 h* O8 ^. d2 O# I, p' _
  1296. Trackr_08 .DB $05,"GREAT"1 W- B: L! f" {) e( j+ N5 p! w
  1297. Trackr_09 .DB $08,"BOSS BOM"
    9 ^, x+ P6 C4 \9 r/ `/ T
  1298. Trackr_10 .DB $08,"BOSS2BGM"- M8 h; V8 j1 c" X
  1299. Trackr_11 .DB $07,"P CLEAR"
    0 u& x- x0 d8 x3 R7 @# n6 h# [
  1300. Trackr_12 .DB $07,"A CLEAR"6 W8 T: n9 ~; A& k+ M- s9 G
  1301. Trackr_13 .DB $04,"OVER"/ Z0 ~; K4 X2 i! G, ?! W' I
  1302. Trackr_14 .DB $06,"ENDING"
    / @5 O4 v6 ?/ N1 U: r- j( I6 U5 c
  1303. Trackr_15 .DB $04,"SUTA"# ~: p6 z. o" k6 t6 \, i- u9 \
  1304. Trackr_16 .DB $07,"THUNDER"+ P% g/ z9 H2 D, d9 d: V
  1305. Trackr_17 .DB $04,"SHOT"1 B, y9 |4 d) D1 ?
  1306. Trackr_18 .DB $05,"LASER"
    0 a2 Q/ \# Q1 r, k4 o- g
  1307. Trackr_19 .DB $06,"SPREAD"
    ) a7 R/ L4 C& F- @3 V, e
  1308. Trackr_20 .DB $04,"FIRE"1 k6 D: w8 q% _* c
  1309. Trackr_21 .DB $06,"B SHOT"
    / b7 N; k8 V0 U. x; q
  1310. Trackr_22 .DB $08,"T DAMEGE"
    9 G  X8 C: u4 c! a6 ]& m. P9 I
  1311. Trackr_23 .DB $07,"HARETSU"
    ' g' ]7 B# F: J0 r/ [. h
  1312. Trackr_24 .DB $05,"T OUT"/ W: i, [4 W( U1 ?; D- _$ d, G
  1313. Trackr_25 .DB $05,"Z OUT"4 A5 s2 h5 `3 ^( d
  1314. Trackr_26 .DB $05,"A OUT"& t  J% ^! P% S
  1315. Trackr_27 .DB $04,"ROLL"7 j7 D. E  z# x/ g5 X
  1316. Trackr_28 .DB $06,"APPEAR"
    7 d# C8 V2 M- D' S' ~; d
  1317. Trackr_29 .DB $05,"POWER"
    1 U& r. \4 W0 m/ r% A1 b
  1318. Trackr_30 .DB $07,"BOKK BK"7 c  }2 K4 y8 a$ r& J, e
  1319. Trackr_31 .DB $08,"BAKUHA 1"0 ~0 y, O; t/ n% X/ s# s6 O2 j, T
  1320. Trackr_32 .DB $08,"BAKUHA 2"
    7 j" O- f) F' I) p( J6 @
  1321. Trackr_33 .DB $05,"ARUKU"1 P/ B8 E2 W5 O% H% w) m; Y- H
  1322. Trackr_34 .DB $06,"JIWARE"
    $ \7 [8 p, S4 F
  1323. Trackr_35 .DB $05,"SILEN"! `; [( ^- x! O/ n* j
  1324. Trackr_36 .DB $05,"P 1UP"
    ( j$ m8 T$ {/ z9 C
  1325. Trackr_37 .DB $05,"P OUT"
    * Z/ Y7 P, ^) r! n- v5 D: P) c6 A; N
  1326. Trackr_38 .DB $05,"B OUT", J- B; u* p& h& o$ p# @
  1327. Trackr_39 .DB $05,"PAUSE"# c  x  g, L7 X; d; {

  1328. 5 r2 j9 Z* }* c  y" ^3 F# w6 y
  1329. .ENDIF2 K; D0 T, a0 m% k* r$ P7 z
  1330. 9 ]5 P% J( V7 S, [) b3 ?9 N5 `
  1331. ;------------------------------
    5 k# D3 s" K& {. l! k* F
  1332. Static_Text_Title_Data;静态文本数据4 Q6 u: z4 Y; n  I
  1333. .DB 12; j/ m8 v9 K' \" a2 T' q# s
  1334. .DB "SUPER CONTRA"( O- b7 y/ n8 j$ O; K
  1335. Static_Text_Author_Data6 Q) M! I! d! Y! Y
  1336. .DB 23* {, o( C$ t, C1 p5 ?( s; S
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    4 @1 ]( c4 J6 W, d- p" [) ?2 Q' C6 v
  1338. Static_Text_Date_Data  K/ e; H; n$ B, A
  1339. .DB 10) s$ J4 c9 K* a/ i" B
  1340. .DB "2023.07.11"
    6 `& P4 z1 \" r8 B

  1341. : S0 f2 x1 z8 M8 u, k
  1342. .BANK RESET_BANK & BANK_DATA_MASK4 E1 M, x, E1 o4 R2 w0 k4 \: p1 A" r/ R
  1343. .ORG RESET_ADDR
    ( @7 ?4 M, W: X

  1344. : n' @1 e2 Z3 U# ]/ p& S

  1345. ' b6 b' h* n+ Y4 `
  1346. ;==================================================; K* r( A7 V9 q/ r4 A# D
  1347. ;切到主程序bank
    / _  U/ `: [' X! m4 A5 C6 z
  1348. SwitchMainBank
    , u, j0 e; p0 c- y
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK  b/ }- Q/ ^! V
  1350. JSR SwitchBank8000
    0 E  i! D- {9 a
  1351. RTS
      p. B- f) G8 F& g' z" w/ U- W

  1352. 0 p2 ^$ n7 W* [; Y" p- z
  1353. ;==================================================
    $ w/ u# A4 H  U8 A" n
  1354. SwitchBank8000;切换bank到8000-9FFF
    3 n# R6 t# y3 ^* B. {5 J$ x7 g
  1355. PHA
    ! f; V9 N& o' A, S7 L4 L5 W+ Y+ g
  1356. LDA #$066 d; c! i* r# A9 O) D  l4 E& I
  1357. STA MMC3_BANK_CTRL
    8 L3 P  z2 h* S0 V5 E
  1358. PLA2 S. j6 }  A+ i
  1359. STA MMC3_BANK_DATA" d* u- l' X' a+ z3 j; U
  1360. RTS
      [! r! ^6 [/ V" Y4 n4 i
  1361. 4 p/ ~& f8 L/ v
  1362. ;==================================================
    5 ?" m+ S: l- g( O8 ?
  1363. SwitchBankA000;切换bank到A000-BFFF
    ) m( T( O; y$ F4 B3 F2 E
  1364. PHA" r( K; V1 [0 ]0 V0 _8 @
  1365. LDA #$07
    : B2 j$ r/ E  p% c3 M
  1366. STA MMC3_BANK_CTRL
    , y! P* r3 P. U, j: L
  1367. PLA0 j3 T* B6 N1 m& D5 ~8 V
  1368. STA MMC3_BANK_DATA
    % N3 i* q3 ?% N1 H4 H8 E; b
  1369. RTS( m5 e( r7 |1 X( x& f

  1370.   x5 E( H8 e8 A) w
  1371. ;==================================================
    2 O: W# Y" ]/ @0 V
  1372. Sund_Bank_Init;音乐bamk初始化0 G6 U2 u5 Z7 Y4 z2 b' h
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK2 g: v- G! L* g9 F. v$ y$ U# `
  1374. STA Music_Bank_8000- O9 ?. U) a# V& V; Q+ `+ Q
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    * A( u" u9 e2 x# T$ D
  1376. STA Music_Bank_A000
    8 |6 z3 v& O" E- O4 c# r% @
  1377. RTS
    / n0 A* K, L. [
  1378. # R3 }' R( G+ x3 e9 p& U
  1379. ;==================================================
    ; x! T" X; s( Y/ i
  1380. Sund_Bank_Set;切换音乐bank
    ) s# i' p( @6 V; J0 v! X+ @& _
  1381. LDA Music_Bank_8000' T6 A. E3 V9 b! x7 L
  1382. JSR SwitchBank8000* x  t9 u3 z9 S& @+ d- \
  1383. LDA Music_Bank_A000
    & T6 g' e) h# r( g
  1384. JSR SwitchBankA000- _" u# m7 R  H4 a
  1385. RTS
    ' z4 ^- I6 ?; P6 z" p( a# _

  1386. 2 F) M- B2 s4 {/ z- `1 Q
  1387. ;==================================================8 v: A2 E; G; @! h' r
  1388. Sound_Init;音乐初始化7 |5 G4 s0 E* c5 a
  1389. PHA
    6 g1 n) \4 n6 c2 O) j. w
  1390. JSR Sund_Bank_Set
    ( L# F( v1 d$ F0 r8 Z
  1391. PLA
    9 o2 n; }) G- G/ b, U
  1392. JSR Music_Init_Addr& ?* n! n) T1 S3 z+ I* z- v
  1393. JSR SwitchMainBank
    * A0 y* A4 ~. s* ^/ U% o
  1394. 6 p( V. |0 N1 u
  1395. JSR Music_Bar_ReSet
    0 h2 V. C* A) e0 t" H
  1396. JSR Time_ReSet5 q1 T0 n$ p9 \2 G5 J* A, S% Y, {' W
  1397. LDA #$00! x! H% g1 }( d# P1 |; e7 Z
  1398. STA Music_State/ n0 k$ }  j/ ~1 s9 ]
  1399. JSR Music_Stata_Show9 A2 C; \. J) T3 z
  1400. .IF Track_Name_Pos
    - V# W! E1 S1 m0 _" ]
  1401. JSR Show_Track_Info0 |4 y5 e7 l  V& v
  1402. .ENDIF# n& g' I! G/ x$ F

  1403. 6 P1 V. c' T4 N, K3 N' ~7 i
  1404. RTS
    * s+ T" U) ~# D* J3 ?, A* T0 z; i

  1405. 1 |2 `% _8 f& _4 D
  1406. ;==================================================
    + Q/ O( I! a% n6 D* |
  1407. Sound_Play;音乐播放
    * A" N# r- M' I
  1408. PHA
    9 j& k3 d% o4 F+ o8 Z0 b. r
  1409. JSR Sund_Bank_Set$ g4 m3 W) M" A& m: @5 C
  1410. PLA( [5 v/ J; h9 B; ?4 V
  1411. LDA Music_State* q, ]7 A- G2 b% M  q
  1412. BNE Sound_Play_End0 z6 J1 A4 p9 J* `7 T9 N, B
  1413. JSR Music_Play_Addr" l) k/ ?% n' }
  1414. Sound_Play_End. ?' n: ]& @. P- X1 t* K! N
  1415. JSR SwitchMainBank9 f( R9 s* j9 t, `9 q# U' R* k
  1416. RTS
    ( }: ^! r3 J1 o6 ^# i7 j9 B# n
  1417. 4 ~4 H& R- I' Q5 q' D, F! ]
  1418. ;==================================================% }% x! g8 f$ C" d% ]2 x* \8 z
  1419. .IF Music_Reset_Addr( t/ S! y. e5 q" r2 \4 q$ @. {5 Z
  1420. Sound_Reset;音乐重设(如果有的话); y- p4 [2 V9 P2 y. `
  1421. JSR Sund_Bank_Set) T6 P; y8 X/ x; l" P0 b3 f
  1422. JSR Music_Reset_Addr
    % |0 \% s) B" @+ F: t! _! q7 U
  1423. JSR SwitchMainBank7 R& i5 a  w) ^$ I, J" n* }
  1424. RTS
    6 J6 R' c( B% y  `; d( E, M
  1425. .ENDIF7 J; ]8 R2 e$ Q' i% R9 I

  1426. . _4 `, X* C, [
  1427. ;==================================================
    , E. ]: [. ~2 ~, g1 j! Y, b* D
  1428. MainLoop;死循环
    8 V5 g) X! D8 g6 [% s% {7 D
  1429. JMP MainLoop6 I; e) {6 S! \' ~: d

  1430. , M7 |6 C: B6 j1 D/ Y, `* F- Q" Y
  1431. ;==================================================: p( Q/ q9 a: e9 U: [
  1432. NmiProgram;Nmi中断处理0 B3 v6 t) A- K1 w" _
  1433. PHA. @! T! D( W! j1 g
  1434. TXA
    & h$ F6 U6 x7 z
  1435. PHA8 c6 p0 f% n2 N4 j
  1436. TYA
    6 n% K( S8 `: O9 f* Q0 p3 Q  p+ N- k
  1437. PHA( |3 h, I  s' x$ k7 h

  1438. ( \+ b  a0 {9 [, y# u
  1439. LDA PPU_STATUS4 g( }  H7 A7 G8 x
  1440. LDA #$00& A7 ?7 I) ?4 v0 D* L& G1 r
  1441. STA PPU_CTRL/ t. h* t4 R  S# ?+ U
  1442. # h4 e; X3 Z5 @# L: T
  1443. ;切换主程序bank1 h" ^% m# _4 V) m  }& p
  1444. JSR SwitchMainBank9 }0 y, z' f1 v- W1 D3 P, ~  k2 y; Z. r

  1445. $ z1 e5 L$ B6 Z
  1446. ;NMI处理/ m/ G2 @7 Z6 W/ P  ~& X
  1447. JSR NmiProgramProcess
    ; T9 c' Y8 @8 g% `5 S0 ?4 d: X! R

  1448. $ m! L4 G. T8 `1 h
  1449. Nmi_Proc_End! ^9 H; s( `( B$ \, k
  1450. PLA: S! _5 L2 M3 Y5 U
  1451. TAY
    3 d6 b; K( Y1 C' \# x! b5 V
  1452. PLA
    4 v2 [& F+ }+ h! G/ V3 m
  1453. TAX
    9 n$ U) ?. ], Y* T7 d% W
  1454. PLA
    ) K4 L/ H& e4 C
  1455. " _) v/ V% a  E' R1 ]( z* g
  1456. RTI
    ' j1 Y& o( }/ C) b2 G, r2 j
  1457. 6 [. ^: W1 i3 E$ m
  1458. ;==================================================' p" A" y  c; \$ \+ N" ^2 d. @
  1459. ResetProgram;重置中断处理
    ; v6 o6 _3 e- A7 e
  1460. SEI
    2 L, S2 ]& `/ B: N# C
  1461. CLD
    0 Q( i9 R* [/ x! H
  1462. LDA #$00! K+ G1 f# P( Z, L; C9 O2 V
  1463. STA PPU_CTRL# V  Q* j$ `4 L8 r/ b
  1464. STA PPU_MASK7 Y9 J" J3 b6 ~! \5 m" c. e0 ?
  1465. % k5 ]/ c" Y- W! s6 y9 v' E* b; z- P1 A; j
  1466. JSR SwitchMainBank' ]8 z" E6 s3 }
  1467. JMP ProgramBegin- r, G1 X% y9 z. J. F+ x+ T. o
  1468. 7 e* e* l6 E6 @% k7 {3 ~  c$ A
  1469. ;==================================================; a. H. Q6 V5 |3 m- \( p
  1470. IrqProgram;Irq中断处理
    + n9 G( N- N* I; q
  1471. RTI
    2 k/ [5 S; X  P( t9 n7 G) y2 v

  1472. ) u$ S9 Z7 ^2 B( a" k9 `6 L9 z
  1473. .IF SOUND_BAR_SHOW_ENABLE6 }& w1 L; ?; i. Y% C, S
  1474. .ORG $FF804 a: b" t2 g& D% P# H. [
  1475. STA $4000,X
    5 D. O& [5 x% q8 h* w
  1476. STA Sound_Bar + $00,X' F" l5 F. h0 T2 i1 i: @$ E* D
  1477. RTS, c! O/ i: S3 X. o5 `# w; d+ ~' }
  1478. 3 I. R& s: N9 ~3 K+ {% J0 V* [/ ~- C
  1479. .ORG $FF88
    3 N0 F2 q  w" C. V
  1480. STA $4000,Y
    7 F. w; S' C$ [0 s, |* w* ^
  1481. STA Sound_Bar + $00,Y6 j# S. R) h# g! O; E2 v
  1482. RTS) B+ P& z, t# A: D3 @
  1483. 1 R9 @+ E- R$ `1 G
  1484. .ORG $FF90
    : P3 o9 x, K! @( X
  1485. STA $4004,X
    : j( v) ]9 ^& Y5 p# L$ p' H
  1486. STA Sound_Bar + $04,X/ o$ q1 F5 z2 N: P& B
  1487. RTS9 v" G# y4 o: a) G: ~- C7 ?

  1488. 2 D8 H8 |6 l( z: }5 n
  1489. .ORG $FF98
    6 {& y' W6 Q( x' f( ?
  1490. STA $4004,Y1 Z" |7 f9 o4 F' [5 B9 }
  1491. STA Sound_Bar + $04,Y
    9 T6 z0 L/ Z! s; s9 c% p
  1492. RTS* x/ }% c: E- L6 Y0 a

  1493. 6 o/ _, |' a3 U7 z# u
  1494. .ORG $FFA0
    : U0 }, |) f6 N) v
  1495. STA $4008,X. Z6 X. y+ R  T' Y: z. I% z
  1496. STA Sound_Bar + $08,X
    % o% X+ `# Z/ p" V+ I, C9 W2 c
  1497. RTS7 _; i* R& E. ?; p8 W

  1498. : e2 Z* `! E: `$ d0 ?9 l
  1499. .ORG $FFA83 w1 Y% r0 K' g
  1500. STA $4008,Y
      z- `1 s8 v7 a5 Z1 T& J- O# I
  1501. STA Sound_Bar + $08,Y
    : ?/ U% j  c. {  ]4 r, M/ o( o) W
  1502. RTS7 [8 x6 j. D: U/ C: ^) v! Q
  1503. / f/ H( t. B0 p1 o
  1504. .ORG $FFB0
    + s) a2 w' f* ?9 h0 @& G4 J
  1505. STA $400C,X5 x) i% p- v& {- d6 D
  1506. STA Sound_Bar + $0C,X* H1 f7 x+ l" Q
  1507. RTS/ C( i4 [, Z* U9 _3 o

  1508. , K& E) x2 f* F
  1509. .ORG $FFB8  v4 J4 O( D/ [
  1510. STA $400C,Y
    ! K* I: W1 j; |$ A; X, {# O) B0 _
  1511. STA Sound_Bar + $0C,Y2 }5 f& F9 f% n2 g
  1512. RTS
    , X- p3 J: l7 I  X: p1 e3 I* r& ~

  1513. . E6 b- `6 Y9 I. w8 {3 {" N) d: o
  1514. .ORG $FFC04 V* {9 u! D: d4 M- a
  1515. STA $4000/ `1 K. d4 r6 o2 \1 [9 F2 P
  1516. STA Sound_Bar + $00+ z) H, X' J$ E% D. m& o
  1517. RTS
    , _# C$ @0 |- s& ~1 g

  1518. 3 O% V8 t" e/ b) L2 N
  1519. .ORG $FFC8* [  g, S5 G- ]& }9 I
  1520. STA $4004
    8 S( a" R- l  B; j3 v
  1521. STA Sound_Bar + $04
    , F1 M7 v9 y% A# X
  1522. RTS
    / Z( K9 F9 n) g5 T
  1523. ( R  d0 Z4 Y% {3 a( _
  1524. .ORG $FFD0
    5 M3 e# S5 J. R8 ]3 E9 A& D  e
  1525. STA $40082 C# S. a! i: A( {6 b' G+ G. O- t3 o
  1526. STA Sound_Bar + $086 N% o) ?: e3 q
  1527. RTS8 ?$ h) |8 b& |# b% F. |

  1528. & A, b8 c* \% B' Y/ }2 a" e
  1529. .ORG $FFD8
    6 U6 I4 \6 v  r8 c6 t
  1530. STA $400C
    $ M( T2 R( |3 Z
  1531. STA Sound_Bar + $0C
    6 @. d9 ?& U5 \+ z' F
  1532. RTS
    1 W+ s* u4 m2 C0 m; {
  1533. , h' l4 e- {$ j( K
  1534. .ENDIF
    $ H) Q% n+ c8 V  `% m+ e

  1535. & N0 r5 i+ M. e  j2 a
  1536. .ORG $FFFA
    - {9 Z$ }4 z) z' G
  1537. .WORD NmiProgram
    2 x3 k4 ~6 e: e3 A
  1538. .WORD ResetProgram
    8 r, L( y! t# S5 R6 t  ^
  1539. .WORD IrqProgram
复制代码

0 S& K' f0 |" q$ ~! U# c( j  V
4 X( M+ Y' H  z! X+ C* b) T
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

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:34 , Processed in 1.111328 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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