EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 : G# {6 l. x- _1 l' D3 _! A: I
0 U& c6 v' J1 @2 Q
1.魂斗罗! o* E: i% h$ }+ g
2.超级魂斗罗
2 r. A5 A' J- C; ~# P: _3 c; S. b3.赤影战士
& m$ a" ?/ R5 m( b' T4.忍者龙剑传2
  _& |# h( P3 l) r# y. T3 r8 t6 B( [5 B3 ?

7 z2 o* d$ t" }/ A; S5 E& D
, O, b+ W* R; R. W% D2 x6 `; Z, Q' K2 t# h
源码:
- {) l* S: d$ C6 h& {$ l
  1. ;[FC音乐][播放器模板]
    6 |9 P8 ]( h2 k* r9 b+ P$ G0 y& T
  2. ;FlameCyclone 202307108 x9 K, w" Z+ }, ~% v/ }) n

  3. 5 p$ S' l! U5 i7 H5 N
  4. ;文件头9 t1 o) t2 ~6 a  \" K5 d  Q
  5. ;======================================================================
    . v8 ~& K5 ^" {: P- W* e4 S% B. k
  6. .INESPRG 4                                              ;16KB PRG 数量  ?4 |- W2 `$ _  t  ^% K
  7. .INESCHR 0                                               ;8KB CHR 数量: l: t: j( e  k1 W1 N
  8. .INESMAP 4                                                   ;mapper 4- X4 `; H( B: k' {. K
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直9 X+ A: t0 _3 e
  10. ; ?1 `! Y% x/ f" l  q2 Y
  11. ;==================================================2 F/ q7 Y2 P7 b5 n- r
  12. SOUND_BAR_SHOW_ENABLE       = 1
    / r9 L! c' E" }
  13. ;==================================================
    * m! c# @3 t, k1 ~1 E+ S+ q2 |' s
  14. BANK_DATA_MASK              = $07
    ! }9 A5 p) Y: \. W" D
  15. ;==================================================# ?4 G- ^) }: H! |: @. a
  16. SOUND_DATA_BANK_0           = $009 r, R# F9 U+ J; P+ x
  17. SOUND_DATA_BANK_1           = $019 c9 Q+ z% ~( r7 \/ N
  18. SOUND_DATA_BANK_2           = $02
    $ A5 Y4 j2 ^3 l5 x6 P
  19. SOUND_DATA_BANK_C000        = $06
    8 B7 j2 ]6 B9 d, k4 {

  20. " ?' _* s( u; o' \1 J9 {
  21. ;-------------------------------------------------
    8 f& l, K% i# n
  22. CHR_DATA_BANK               = $045 D# I( S- _* D' _! H5 i) x' p
  23. CHR_DATA_ADDR               = $A000/ E+ T# Q5 [$ `: ?9 q4 n) ?
  24. ;-------------------------------------------------
    ; D1 p8 @3 x4 j% c
  25. PROGRAM_BANK                = $05) f: f9 J( S+ F8 Y) o
  26. PROGRAM_ADDR                = $8000
    9 n  [- _) s8 b4 m$ @
  27. ;-------------------------------------------------
    8 r' N, q2 a, B
  28. RESET_BANK                  = $072 ~2 C! ?& V% q, \/ N4 B0 C
  29. RESET_ADDR                  = $FE00. a$ o5 m: j. {8 D( a; B
  30. ;==================================================
    3 ]4 N' f& [5 A% C  V
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址. a# |. _( s' E& S1 L
  32. Music_Play_Addr             = $813C ;音乐播放地址
    ! K' C0 s6 i2 F  W- |8 z2 H7 U$ x+ u
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    : }. b) R( t! i: i; @1 V
  34. ;==================================================; |' E- i& y; l5 O" x4 Q: _- S/ h
  35. Music_Song_Total            = 039  ;全部曲目总数
    . u: V/ g: @. P- @7 T7 I' y* w# R3 d
  36. Music_Start_Song            = 007  ;初始播放曲目
    1 E+ h0 b) h9 y$ m# W$ H- e! T! `
  37. ;==================================================
    1 q$ F& N' R* W: _8 i: B3 S8 B

  38. ) z& u$ V. U( ]  h
  39. ;==================================================
    ) s. p- z; g; S
  40. Title_Text_Pos      = $210D ;标题文本位置: }% @# n: C0 i4 G8 F2 A
  41. Author_Info_Pos     = $2284 ;作者文本位置
    1 t* b9 H; }/ R; V5 m( u
  42. Date_Info_Pos       = $22CB ;日期文本位置9 ~8 j4 a. j7 X+ p0 K
  43. ;------------------------------! E) C+ v- [: `) E& l- G* E
  44. ;------------------------------% a) b  t$ {* d& {0 S. x3 ?, i; Z( @' F
  45. .IF SOUND_BAR_SHOW_ENABLE9 {6 S8 l( {, ~% J2 p
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    2 G, |/ Q& e4 }1 y
  47. Play_Time_Pos       = $21F3 ;播放时间位置) @) L  q+ E0 t$ ?
  48. Play_State_Pos      = $2233 ;播放状态位置# R& P4 m) `; R" j7 o" {. l
  49. .ELSE- y# D2 A, Q: P* `& S: F
  50. % s% z; [$ o2 z3 k5 O! W5 s
  51. .IF Music_Song_Total > 99
    9 M* M* |, d' \& V7 y3 e- C4 b6 }; W
  52. Play_Index_Pos      = $21AC ;当前曲目位置, P3 w# l* N( ]# s' R( V4 P% C: |; D
  53. .ELSE1 w8 p8 B5 ?+ u* O9 n% H
  54. + z, e7 @, k7 [/ f/ L1 V7 ]
  55. .IF Music_Song_Total > 99 ]( J) g* R, i4 y
  56. Play_Index_Pos      = $21AD ;当前曲目位置, l0 ?9 Z+ M* T7 B+ n
  57. .ELSE
    ) U6 o) P! h) q5 w( f
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    & S' _1 m( B( X1 J4 v2 Z# O% f) \
  59. .ENDIF
    0 d9 M3 b) T# _/ h/ p# J
  60. % v6 H% a9 k( f% w
  61. .ENDIF9 c/ K, R' Q, `- Q1 H; A6 p' g# R
  62. 1 b+ M9 G: |/ o6 F
  63. 4 {% E; w& Y- ]
  64. Play_Time_Pos       = $21EC ;播放时间位置
    9 V* ~4 a0 P; S+ U
  65. Play_State_Pos      = $222C ;播放状态位置, V, i4 E& w" O  H! ^; `5 S
  66. .ENDIF
      ]! S3 {: a3 l% ^  T/ G
  67. ;------------------------------
    3 C. u- u; D; X) j& D6 p
  68. Track_Name_Pos      = $216B ;曲目文本位置& A# {9 B1 U- m# m: L; u+ h" A
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    0 m, c5 r7 q' w7 G  t
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ( D. C3 M  t7 h2 ~9 ~! u
  71. ;==================================================
    7 g4 V2 G2 `' s$ p& V% p
  72. Scroll_X = $00* F' b. v! _% X; R0 t. C
  73. Scroll_Y = $06
    ; R9 Q8 P& H5 u8 d4 W
  74. ;==================================================
    0 @- B5 m+ Y. r. g
  75. RAM_Cln_1       = $0100* Z# f0 Q1 G7 I/ ~# |- y; j$ f, |
  76. RAM_Cln_1_Size  = $805 e- j4 _% k' O1 o
  77. RAM_Cln_2       = $00E07 o8 s& W# P: i. j8 @5 t. I
  78. RAM_Cln_2_Size  = $207 t' I/ E3 U5 w, t7 g8 Y2 a
  79. RAM_Cln_3       = $00E0
    $ i; G; D  c# L7 O
  80. RAM_Cln_3_Size  = $20
    ! }+ P$ |& _# q: K

  81. , n, `" }" l% v8 g9 ~- H
  82. ;==================================================
    7 h7 P$ ~) B& m- v2 H/ i0 I' V
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器0 k9 F, D" v! t: J  t
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    , M2 H3 {- O; @9 b' Q* ?) @7 O) Z
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位( A& v3 s; e2 t, F3 M
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    $ ^9 [' O1 T/ z+ |
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1; X5 D# v6 j+ F0 l3 N. m
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    3 X$ c' D8 h2 D( E
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加/ \9 z- [+ r/ [
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    7 g- e, M- m# ]5 E* @5 k
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    : |, A! n8 g, M- h" q/ ^0 L" g7 `) ^
  92. APU_STATUS              =   $4015   ;声音通道切换2 t7 N1 K; i" B7 M$ p- l
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    # y/ @+ V4 w2 Y2 P7 V
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    : S* Y. h. {, Q0 ^
  95. ;==================================================
      |* B6 F3 i1 `
  96. MMC3_BANK_CTRL          =   $8000; a1 i( R2 s2 _: ^' I% K0 k
  97. MMC3_BANK_DATA          =   $80014 y$ l6 e2 r$ O/ ~4 D# i$ q
  98. MMC3_MIRRORING          =   $A000
    / J/ m0 r+ V3 O. q4 T% K4 Y0 F% g
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    ( e/ U3 [$ v3 a
  100. MMC3_IRQ_LATCH          =   $C0009 J9 ]& d' G! q
  101. MMC3_IRQ_RELOAD         =   $C001
    , N3 m; P/ T! o
  102. MMC3_IRQ_DISABLE        =   $E000# h4 Q  d8 b8 Q0 d, W) ]  m5 t
  103. MMC3_IRQ_ENABLE         =   $E001
    0 O$ U* Y; f* m  O! B) \

  104. 1 ]4 z1 `% m$ t1 Y
  105. ;音乐数据块
    . z& \; O) Q% J% z9 \2 h* E

  106. ! r4 M' x, u  [) {7 U  T8 Y' V2 w5 |
  107. ;======================================================================
    9 X* ]* Q( g) {+ b
  108. .IF SOUND_BAR_SHOW_ENABLE
    2 w% v8 E; z+ X. e
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK3 b: Y, o7 h# U
  110. .INCBIN "sound_bank_bar/music_data_0.bank"* k' J  Y, ]4 ~' F' d% |) b! @4 h9 L

  111. 2 g) y# ]8 W0 x! M" [7 e
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK. K! }; s( O4 O( ^
  113. .INCBIN "sound_bank_bar/music_data_1.bank"5 Q! q6 B& J6 x
  114. 2 x$ Z. M6 X2 v& f9 ?& d
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    8 r& D" W4 _4 d% A4 i
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    2 v0 `* T7 c* [4 I" u* k! Z$ \
  117. ' \3 {5 v  ]' y7 n# |9 N- g
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    : q/ {' [3 A" y
  119. .INCBIN "sound_bank_bar/music_data_3.bank"$ I2 `7 |; N! \1 K' U+ I2 s

  120. % n5 X+ s* M; P+ Q/ w1 l% R' H. p
  121. .ELSE- z4 M& Z2 J1 f" k
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    & a1 ?: Z. W) l. y- B6 [
  123. .INCBIN "sound_bank/music_data_0.bank"9 N, O, Y* F5 B8 F2 L, ^6 f
  124. 2 P: A, K9 p# D. [
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    0 p4 m2 F" I0 e5 `7 L% S7 Z3 R
  126. .INCBIN "sound_bank/music_data_1.bank"& B( g( J( c/ g

  127. * w5 C& |% G3 c. ?! p
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK% u/ a; {  o' |/ s+ q' m) v
  129. .INCBIN "sound_bank/music_data_2.bank"
    $ u0 R: ?5 k$ U4 n

  130. 4 |0 o: h8 T6 i+ e1 q
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK8 ?2 X8 `# \/ f7 L2 a
  132. .INCBIN "sound_bank/music_data_3.bank"
      M* u# u  ^* M/ m5 q3 O
  133. .ENDIF
    1 |1 @/ k  X/ n: H+ D  a4 l. Z

  134. 5 A. k* A) B  ^3 H$ B( A* M6 Z: S( E9 \
  135. ;CHR图形数据; `" F' o" ]8 b
  136. ;======================================================================
    . O8 E% R. `/ }  J8 Q; N8 N
  137. .BANK CHR_DATA_BANK& B" c0 ]' d6 y5 O7 |
  138. .INCBIN "chr_bank/chr_data.chr"( |# j% A( [: L# Q3 O

  139. . X  a" u4 [% p( [+ {" A/ p2 ~7 M
  140. ;==================================================& v' O$ X6 F0 q: w" G# [
  141. PPU_Addr        = $0300
    # T; M' m* J3 g; C5 Q9 l
  142. Palette_Addr    = $03C0
    6 ^7 K6 t; y4 X$ {6 a
  143. Sound_Bar       = PPU_Addr+$E0
    ) [+ y, m) K% S! o
  144. ;==================================================1 a( r5 D' N5 L# `
  145. Palette_Update_Addr     = Palette_Addr+$0D2 F% X$ f6 D, W4 n
  146. Palette_Update_Max      = $2C* o- T$ L9 ~1 R3 j
  147. Palette_Update_Min      = $21
    ; X2 e, G" F' D
  148. Palette_Update_Interval = 60# @- T+ D# D" t# U% j4 ]
  149. ;==================================================$ ^6 X! Y1 J% Y/ [: t, r( s1 V5 |
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    4 y" q! U6 G: U" ^3 Q  U  S7 y" b/ G
  151. Screen_State        = Sound_Bar_Cnt+$016 X' O! p+ k5 ]2 z4 Y* t+ z! Z
  152. PPU_Cur             = Sound_Bar_Cnt+$023 j6 E* S. o% G% M& h) Y5 t: ~
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03. t! ^1 E2 |; E1 ~7 R6 v6 Z/ Z
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    9 e& a/ ^- `. \0 G0 c7 W
  155. ;==================================================
    6 G6 R; j8 k) x- c* I, J
  156. Data_L              = $70
    # ]3 M/ j  U$ j* a6 W9 K3 p' ]
  157. Data_H              = Data_L + $01( h* A5 Y* w7 [4 I7 ^* k* \
  158. Data_Cnt            = Data_L + $02* y- X0 a% }/ t8 N( A- `0 d
  159. Data_Buf            = Data_L + $037 R) a* Q" c# q$ Y0 `
  160. Time_Wait_Cnt       = Data_L + $049 n$ r6 @. H+ y* s- H
  161. Palette_Wait_Cnt    = Data_L + $05. F2 T% h# r1 ?* N
  162. Palette_Update_Flag = Data_L + $06
    7 w8 N' F* r2 a* B
  163. Show_Track_Name     = Data_L + $07# M" @- s+ G9 B$ W8 r
  164. ;==================================================
    , G3 C* O) O8 z0 A2 w
  165. Key_Keep            = Show_Track_Name + 15 M* }$ T* m6 b, c
  166. Key_Once            = Key_Keep+$019 e9 N. V% t, j- t
  167. Key_Kemp            = Key_Keep+$02- [2 S! Y# t& `9 U
  168. Key_Temp            = Key_Keep+$030 \1 k. p0 g& k5 s9 h; S# _
  169. Key_Getv            = Key_Keep+$04, C5 P2 q) ]6 Q
  170. ;==================================================
    ' d8 T. y3 C! `# H* c$ Q$ T
  171. Music_Cur           = Key_Getv+$01
    + _5 _/ G' C+ B
  172. Music_Last          = Music_Cur+$016 w$ I5 t8 w& P: {
  173. Music_State         = Music_Cur+$02# ~! v5 u! J' O1 l! a, u: }
  174. ;==================================================5 I7 K# M- B, M1 A+ h5 i
  175. HEX_Data            = Music_State+$01
    + G$ ?  g: p, K- T& S. ~
  176. DEC_H               = HEX_Data+$01
    + O- e4 j' ^( Z% c! U
  177. DEC_T               = HEX_Data+$02) B- {! P3 D5 l' f# t
  178. DEC_L               = HEX_Data+$03
    5 b7 U# x' i6 i/ h9 b
  179. ;==================================================
    1 Y8 t( o1 d5 {, a7 ?5 E
  180. Time_S              = DEC_L+$01
    - q" U! |2 k% b: u: p# b9 g
  181. Time_M              = Time_S+$01
    9 c6 T, H/ r# r% I7 S7 ]) B) g
  182. Time_H              = Time_S+$025 ?) a/ N4 |% v% Z
  183. Time_Cnt            = Time_S+$03+ q/ @' I! |+ m5 V% }
  184.   w7 G) ~- [5 p0 W# o4 Q
  185. ;==================================================
    2 w" @9 ~& k8 Q- u
  186. Music_Bank_8000 = Time_Cnt + 1$ l, Y. a6 c& q# _
  187. Music_Bank_A000 = Music_Bank_8000 + 1
      C" e  v) o& Q" V, o( x
  188. ;==================================================
    + f1 K/ {) S7 s0 b

  189. 2 u8 Z1 a% S# f5 R) n$ {2 Y
  190. ;======================================================================
    2 j, \( I7 ?- L/ Y! V. Y
  191. .BANK PROGRAM_BANK; X+ _5 W. P4 N( }$ p& f
  192. .ORG PROGRAM_ADDR8 e4 _; v  e1 r- y

  193. + y' E; v. Z, j1 i6 b; G( Y0 W# W
  194. ;==================================================4 ~. g3 @% E2 n2 M, m
  195. NmiProgramProcess;NMI中断程序处理# b' h, s. U; P$ U
  196. ;处理PPU图像. G, ~4 H( e3 k
  197. JSR PPU_Proc
    : R3 n) I! o. L+ |6 Y0 d! T

  198. ! p1 q) V7 a% p: ^. I
  199. ;启用NMI中断
    9 U! J; ]6 }1 k" E5 s* L
  200. LDA #$800 @; h6 v7 s' l" R  s, R& N
  201. STA PPU_CTRL2 V0 g1 ]6 `! g! m5 I; k0 A
  202. - y4 a% @0 i+ D1 @
  203. ;更新调色板# t1 k, U" b2 P  ]! B2 q: @' G+ f
  204. JSR Update_Palette_Data, U& Q! W' @! d9 u4 f) n

  205. ! ~8 g' |; ?2 k
  206. ;显示时间(缓冲)( O6 A- S9 {1 J8 S& t& K5 w! I8 M
  207. JSR Time_Show
    8 n$ q7 }) T% C# K/ U8 W" I- [; G6 V
  208. : ^* }6 X0 a/ `
  209. ;播放计时4 j) c3 i; U! D( D) E
  210. JSR Time_Count9 E# U* r5 J: D9 F6 Y, v% M/ a/ T

  211. & e" S6 C' z& P8 S! g+ d
  212. ;播放声音/ H4 c; A! o: W8 ]2 T1 k6 m* w
  213. JSR Sound_Play
    . L- L+ n7 S/ i$ z0 ^) D

  214. 4 Z; ~& m( R% ~: i! N$ `
  215. ;切换音乐(手柄触发)
    , F5 m; W' j" w9 B1 B4 I; p$ o
  216. JSR Music_Switch
    : X0 G  j( q; L; u

  217. ; P8 k+ \; M1 S7 s/ y3 I8 N9 s
  218. ;音乐显示(缓冲). r& D4 T* B; [! G
  219. .IF SOUND_BAR_SHOW_ENABLE5 k& T" s# T- a! m: H
  220. JSR Music_Vision
    # P$ ?6 g& _/ _4 N$ H
  221. .ENDIF' ?% J' X2 l: Z2 `6 |$ [0 H

  222. 5 E. b8 u0 R+ b0 g( Z
  223. LDA Time_Wait_Cnt9 X- P3 }, G) V) x; o3 c
  224. BEQ NmiProgramProcessEnd
    ) y. [$ b3 b) c% o
  225. DEC Time_Wait_Cnt- h# I: k8 n1 h1 u% W8 ]
  226. NmiProgramProcessEnd
    2 a* t+ x( V# ?# [% f7 R( V: h
  227. RTS
    6 ?" f+ z' M2 W" l6 n4 q

  228. + j  {7 r. G5 e* k8 i$ {% n
  229. ;==================================================( f+ h, t# M6 \6 J$ z2 x
  230. ProgramBegin;主程序7 A# [9 Z, ~+ G) @# u
  231. LDA #$00
    - n* j- h3 ^1 ^4 U7 X9 a4 B
  232. STA PPU_CTRL
    2 W0 c: Y  o0 Q3 h  G, f
  233. STA PPU_STATUS
    ) R5 [, i! T+ l% ^2 T5 R7 m3 v# F
  234. STA PPU_MASK
    , ]! F4 ^) U. m/ C
  235. STA APU_STATUS
    * q5 D& J$ y! U' |6 R+ E( S+ K
  236. STA PPU_SCROLL
    7 {2 g: [  s8 u
  237. STA PPU_SCROLL" K! v& R, M  K7 x; Q+ h
  238. LDA #$C0
    6 }6 j/ f9 M6 m* s0 G. l" Q
  239. STA JOY2_FRAME$ L: h: o3 D! P" P

  240. + z0 R9 u, Q. `' k" K' z
  241. LDX #$FF
    , B8 z# k2 F2 K1 `" F) B
  242. TXS
    * h) d9 R& c: g+ `0 q
  243. LDA #$00! ^1 t5 v2 ?1 d
  244. STA PPU_CTRL
    ) `; K/ C; I' w2 z4 H
  245. STA PPU_MASK
    6 f" L: R+ B0 s, `8 |6 I
  246. STA MMC3_IRQ_DISABLE
    % V" a& Y9 ?$ p( B3 t

  247. 0 j7 U1 B, a7 j* e* }, T
  248. ;==============================
    0 J9 s3 H! O, \; c% Q
  249. ;调色板清空& X/ V* e7 u- w) g8 {1 ~
  250. LDA #$3F- D0 @/ P( R7 U
  251. STA PPU_ADDRESS! j& c3 a& K* ]; q9 ~7 i
  252. LDA #$00
    2 C) i" }3 w1 J6 Q
  253. STA PPU_ADDRESS' P% G) j1 {* N
  254. LDA #$0F; V0 }' B# Z% U5 v2 ]1 P
  255. Palette_Clear
    ) C% k4 `% G7 g8 p
  256. STA PPU_DATA, }8 d. n' o# W
  257. INX" k$ n  e" @$ K, S$ A8 {- F
  258. CPX #$20
    9 `# q. X5 }5 P/ i# A" g' w& ^
  259. BCC Palette_Clear
    " D3 S# k: l' x5 X
  260. LDA #$00
    ) }) A8 d1 S9 L1 k- I
  261. STA APU_STATUS
    * h- B/ v. i4 {+ N. I$ f% _
  262. ;==============================" [( f8 `; H! a, K
  263. ;初始化背景调色板
    ) ?5 v+ K+ U, G9 `
  264. JSR Set_Palette_Color, ^: l, l6 M5 c) E
  265. JSR Set_NameTable_Attributes8 h& q! J4 O( [1 z
  266. / W+ L3 l/ N( K9 M( v3 g# w
  267. ;==============================
    - u8 O, ^. z, \( v2 o
  268. ;RAM初始化4 h0 Y5 V! i/ _7 b7 b( K
  269. RAM_Clear_All
    ! ]5 P/ C* w) y% s' J
  270. LDX #$003 D1 j0 t6 |  r; e% f$ a
  271. LDA #$00
    - w& ^; ^0 U8 K2 }( u/ F
  272. RAM_Clear_All_Start
      W* S& F# c4 V7 w0 t. M
  273. STA $00,X, n. p8 ?6 W) O5 |  B
  274. STA $0100,X
    7 V0 o3 ?# r. Y) K# u% y7 p
  275. STA $0200,X
    9 [# w8 C! t) X
  276. STA $0300,X% f  U( u7 T: o2 F, y, X6 k$ t
  277. STA $0400,X) ~4 ?, u% Y, r+ K
  278. STA $0500,X
    % y. D' D1 F/ G
  279. STA $0600,X5 a, g& p& h6 b( E( b6 k& Y
  280. STA $0700,X: f& R- |3 ?* L, h! U8 p5 @
  281. INX
    # H( X/ k  [- e5 Y, P/ ]9 `! f
  282. BNE RAM_Clear_All_Start/ ]2 n7 T0 |% G2 o( f# {
  283.   H. f1 c& j0 Y# v
  284. JSR VramInit0 p- R' t: |* }# O- v# z
  285. JSR Init_Palette_Addr; E1 T0 I) ?) _  o
  286. 6 S2 P7 J; `2 E3 l6 v5 T
  287. .IF Music_Reset_Addr
      m2 J/ L: ]9 e
  288. JSR Sound_Reset
    ( Q$ U2 R* j4 U
  289. .Endif
    ; x% P7 S/ G% p: h( m

  290. 9 j# @5 _1 I0 l' \
  291. LDA #Music_Start_Song-$012 A* L9 }# ~- U" v) N
  292. STA Music_Cur& G; f0 D" e# @* \
  293. 1 v* _1 ~' l; s! `
  294. JSR Show_Music_Text
    * ]; ~% _$ t/ X* E! ?3 E3 @
  295. 4 d- R1 \! u$ b
  296. .IF SOUND_BAR_SHOW_ENABLE7 ?# y  R1 [# U
  297. JSR Sound_Bar_Text_Set
    ( p# a# ~7 N. W
  298. .ENDIF! w' e- Z6 \" k, v0 `
  299. 2 {& G0 R2 t* P& e# l. M  v7 o
  300. .IF Track_Name_Pos5 ~, Z: \( |* d1 P- i8 i. U  m
  301. JSR Show_Track_Info0 r$ ]2 X' ?4 e8 R6 `5 C$ ^
  302. .ENDIF' z5 q3 ]. _6 S1 Y$ q' q

  303. 7 K7 A, f0 {% g6 Z3 E6 Z
  304. JSR PPU_Proc
    . m7 p  L) s6 {% Y; w! V# Z4 F- ^

  305. ' ?5 z! A* ~8 }
  306. LDA #$0E' L. n* n0 M% G2 {$ s' ~' S8 B9 P
  307. STA Screen_State
    . _3 _, m- N7 N7 @4 T+ S

  308. : M1 X3 ~' G" ?* Q! y$ M
  309. JSR Sund_Bank_Init% A  C7 F( R8 K& F( B
  310. 0 l5 z3 S; @& N6 X$ |
  311. JSR Music_Show9 m4 F& W& [% a/ P. j
  312. JSR Time_Show
    2 y8 D5 D* A+ h9 f
  313. JSR Music_Stata_Show7 a/ K# ^% Y) d% i( L! e4 ]
  314. JSR Time_Delay
    + N9 b# g- }4 p# _3 K3 r
  315. % }: r# G. D; U/ k  Q/ Z* V  a

  316. % v1 \7 A8 Q8 v" B
  317. LDA #$80
    3 q9 |5 ]: p( D# Z' P
  318. STA PPU_CTRL2 ^/ l; V# ?! J- M; b

  319. 0 `% g1 E. M+ \6 \5 }* j; X
  320. LDA #$20
    ! w( {3 @( C/ }! s
  321. STA Time_Wait_Cnt
    # j2 n- c$ Q5 h
  322. 9 `" N7 V5 J$ J: j: Y/ U8 ]
  323. Wait_Time_Over# i" R$ t4 E" A
  324. LDA Time_Wait_Cnt
    1 B' z& T" g/ O- a
  325. BNE Wait_Time_Over
    : Z  F- v/ a6 P2 m2 I7 }" N

  326. 2 m! [9 @9 K" Z3 ?  J, G* c2 g$ S
  327. LDA #$1F
    + A, V! E* C. q
  328. STA APU_STATUS
    " O1 o. t) q% E+ I4 M1 l" ~
  329. LDA Music_Cur
    8 j) O0 i0 e* p# Y
  330. JSR Sound_Init
    5 Z& P' }& Q5 ]+ B7 S# F
  331. + k* y5 h/ L6 I6 n' V6 |% D# x
  332. JMP MainLoop7 P5 H6 l" @. w" @( J

  333. : t! C: y0 u% b6 ]+ c2 {5 V8 t
  334. ;==============================
    9 G+ ~7 y. k' |9 S3 p+ D. X
  335. Time_Delay;延时等待
    ' w+ ^. O+ x2 Z* \- K: K1 k
  336. LDA PPU_STATUS
    7 y) i; W% F# p: R: F: w
  337. BPL Time_Delay
    & D: S3 A6 C6 O( n
  338. RTS
    ( s$ t$ W8 n7 T3 `, k+ A, h

  339. 5 O+ ~" c) m- e) `4 j
  340. ;==============================
    8 c. G  _. D. ?% m" i
  341. VramInit;初始化图形内存
    . K& d3 h* |0 a
  342. LDA #CHR_DATA_BANK
    - m& W" F8 U; W: y8 Z( c
  343. JSR SwitchBankA000
    ' o' i4 i6 m: W0 t& M
  344. LDA #LOW(CHR_DATA_ADDR)
    ( g! j0 j9 N  I
  345. STA <Data_L0 \+ H# {' n! T, e  X
  346. LDA #HIGH(CHR_DATA_ADDR)! o; v0 N8 H9 O, c4 C" d  o/ F; \
  347. STA <Data_H
    6 h3 _. }8 u* n9 y8 Z
  348. LDY #$00
      X3 U8 q" G/ y. P$ Y
  349. LDX #$20# w5 g' s/ Y* w, e) h) O2 D
  350. LDA #$00  L4 u4 Z0 O% j1 n
  351. STA PPU_ADDRESS
    + Y$ {% J  @8 b* l* J7 a
  352. STA PPU_ADDRESS
    - ]$ E' P$ I1 I( |1 s
  353. VramInitWrite5 U. P6 n( S6 n: z/ q" U
  354. LDA [Data_L],Y! A$ t7 z& b: t' t9 n/ j, r
  355. STA PPU_DATA
    3 s0 F' o& L9 H( b6 A* d
  356. INY5 r, q# T$ F  C7 g
  357. BNE VramInitWrite; u) K3 p* p: H0 g! Q
  358. INC Data_H
    " i4 J3 f- L& S
  359. DEX
    - M. F3 v5 f: E* e4 e
  360. BNE VramInitWrite: u4 }$ C3 o- q8 t, y* m
  361. RTS
    / X$ M0 N; w" `$ ]+ T9 D* k7 o

  362. ) A' p5 w, O. R; k+ |+ z
  363. ;==============================% J: O; i6 w6 R
  364. RAM_Clear;RAM清除/ v& U' m; k' q2 a' ^( E
  365. LDX #$00
    + |) ]% k5 x, {
  366. LDA #$00/ A, I! _) n5 f' ]
  367. RAM_Clear_1
    # O% L$ O' Q3 m9 U# C
  368. STA RAM_Cln_1,X! h! n0 Y: G9 M1 O2 s
  369. INX" \+ k9 M8 p( j2 T
  370. CPX #RAM_Cln_1_Size
    & Z( I# Z0 K! M: W# |0 g  r" g1 I) e
  371. BNE RAM_Clear_1) m6 Y% b4 I' f
  372. LDX #$000 Z, Z& K& P; f' u: y  w8 e8 B) R8 d! p
  373. RAM_Clear_2
    ; p- m! a& e1 u* z$ I
  374. STA RAM_Cln_2,X
    . M( X% d! H7 ^9 W
  375. INX& ^! p. r* p+ T6 i. M% l
  376. CPX #RAM_Cln_2_Size5 A! b, C  D& P1 R
  377. BNE RAM_Clear_2& O! r3 |% s; m+ p
  378. LDX #$00
    / S* Z; T( ^/ `  o
  379. RAM_Clear_34 C, h/ x! C4 p3 D( t! H
  380. STA RAM_Cln_3,X
    6 ~$ J5 o; @7 M* z
  381. INX+ I) B3 J3 Q( H* d: z
  382. CPX #RAM_Cln_3_Size" G5 ]3 K5 f" o* n
  383. BNE RAM_Clear_3
    : e; `8 ]/ A+ ^
  384. RTS
    7 P7 z( _7 b. T( U5 h7 B& R# `% P3 _
  385. ! X) x* o+ `1 u9 L
  386. ;==============================, j6 T( C0 ]8 u9 U* z# C5 w- i3 t' J
  387. ;音乐切换
    # k% y0 Z+ {, r
  388. Music_Switch
    : j$ g/ m: i) a3 T& T) M
  389. JSR Key_Proc
    1 I& [) D) N( I3 t
  390. LDA Key_Once; M' _! r* U6 r+ N7 Y5 m
  391. CMP #$10
    1 j% ^1 g. x0 h% q( ?
  392. BNE Music_Start_SongStop
    ! `/ z! F( A  H/ E
  393. JSR Music_ReSet
    , \2 c+ c7 G+ Y! [3 Z) N' z

  394. ! o5 }3 X5 e4 f" D/ _
  395. ;音乐停止
    & i  @! c: p7 |
  396. Music_Start_SongStop2 Y. G9 E0 x& J+ l) q) |
  397. LDA Key_Once
      `; Z4 `/ R+ ^0 V; U
  398. CMP #$20
    + Q) T4 w7 R1 f* _
  399. BNE Music_arrow3 S! ]! H- @7 g9 Z0 Q/ a
  400. LDA #$01: ?# w  d* U& U; d* e& z! v
  401. STA Music_State2 I  p( l9 h' K3 X0 H9 O* C
  402. JSR Music_Bar_ReSet1 W; _' Z1 s' M* f" u
  403. JSR Time_ReSet
    0 l6 L- b- h6 \5 Z/ ?6 x1 a
  404. JSR RAM_Clear) E  s3 R% d! |+ k: J
  405. JSR Sound_Clear
    ) [% ?9 e6 Y7 K- G
  406. JSR Music_Stata_Show/ J: b. l  K$ }0 b1 ^! K
  407. Music_arrow+ b/ I5 t0 Z6 ~
  408. LDA Key_Once7 H! h% e) X9 _+ S% D8 Y( {
  409. AND #$CF, ^2 ~0 {- ]0 e6 k. x/ i: c
  410. BEQ Music_Switch_End
    0 @9 r4 y9 H# x2 _1 \: g; T
  411. JSR Music_Number0 T' m" t$ }1 e; I/ E2 m
  412. JSR Music_ReSet, t0 n# L9 n% i" O3 O$ S
  413. JSR Music_Show
    3 ^) \% T9 a) \1 f
  414. Music_Switch_End/ v) O% T: S7 u' s
  415. RTS
    * X1 g# o3 }0 ^! |9 J7 ?# u! Z# e
  416. 4 C( M; n) L; u8 _; P+ |; D) C
  417. ;==============================6 q) E5 [- W, M3 k
  418. ;音乐曲目切换& V8 P9 Z- E) H" F% ?
  419. Music_Number
    " A7 y4 b( i% @/ p
  420. LDA Music_Cur* r; M: b: i: _
  421. STA Music_Last# S% R% C  f5 c( p* I7 {
  422. Music_Decrease/ Q$ E! s  K- q0 Y& e6 N2 `- j& t0 c
  423. LDA Key_Once& g* X4 ]. y( S0 n* q3 H" I
  424. AND #$42/ ?+ V+ u+ s* G# b/ a& M
  425. BEQ Music_Increase
    " l) a6 |9 c6 B+ l6 m, h+ e5 j8 z8 h
  426. LDA Music_Cur
    $ r4 S2 g& v6 T+ b
  427. BEQ Music_Increase- h5 B! X; x5 T3 Z6 C
  428. DEC Music_Cur0 ]6 s2 h( @: s8 ~; _
  429. Music_Increase0 s. T- P3 U, u
  430. LDA Key_Once
    2 E. w+ H% r" M) W1 n7 ]
  431. AND #$81- }9 I# N5 v7 Q; ?; Y
  432. BEQ Music_Decrease_10
    : ]; ^* [4 m8 o2 @; R
  433. LDA Music_Cur
    1 W  s6 S2 {, e4 z. \
  434. CMP #Music_Song_Total-01
    ! L  j1 W8 |! S4 j9 B0 i% M0 `# P
  435. BCS Music_Decrease_10
    2 U8 O' B/ L1 q% `+ _9 U
  436. INC Music_Cur+ D4 v$ g/ a2 H* o
  437. Music_Decrease_10
    " U3 R. S1 ~/ |  r  o
  438. LDA Key_Once. r( Y6 ^# i2 G) y$ s3 b
  439. CMP #$043 O1 s/ f) b. Q/ e. E8 e; p
  440. BNE Music_Increase_10
    ! a# ^" c6 y5 U. p6 l) o2 W0 _
  441. LDA Music_Cur
    2 I* `2 l: Z) q
  442. CMP #10
    ( g$ x7 l+ V: ]$ j/ p
  443. BCC Music_Start_Song_Min
    1 N" |* u/ H; H$ B. m2 A
  444. LDA Music_Cur/ B' X' ^" Q/ B0 T$ M0 @
  445. SEC9 J  c6 B$ a3 \. C# b
  446. SBC #10& ?- F. a7 v2 C# d" u- f# J; e
  447. STA Music_Cur
    . f& W6 N4 d  t! m7 a5 Q
  448. LDA #$00( K0 N. l( `6 g7 d8 D
  449. BEQ Music_Increase_10
    6 G* [; ^5 B- ?
  450. Music_Start_Song_Min" S& Q: G% E0 Y0 X! x2 [
  451. LDA #$004 g3 k8 D" |, d* H! Z. @, X4 a* X2 |
  452. STA Music_Cur( L) G; B8 q4 Z8 F
  453. Music_Increase_10
    . k# N# q2 A- U/ |/ \
  454. LDA Key_Once
    " c$ r1 E. |3 ~  g+ s8 e
  455. CMP #$08
    ; f% s9 d) z" R, L6 S' v. ^' B% y
  456. BNE Music_Number_End
    % X+ {3 {. J- }7 ?# B
  457. LDA Music_Cur
    0 Q' G) u% X/ e& n* S( _' C/ j
  458. CLC/ z1 N4 k$ E2 U; j) |" c
  459. ADC #10  ?* a' K* O5 _8 Y5 R8 U  u
  460. CMP #Music_Song_Total-01. U+ _/ n  r1 g/ a) j9 D( v, ?
  461. BCS Music_Start_Song_Max
    1 y7 A/ v: f7 L- w( ]# v) _
  462. STA Music_Cur: R- H+ D9 G- B5 i# b5 A- X; q
  463. LDA #00
    6 p9 Y( N8 j* G1 |) y
  464. BEQ Music_Number_End; `* r+ Z! e0 _5 J1 e
  465. Music_Start_Song_Max
    9 s4 o, `2 B( j3 O) t0 A, [4 b
  466. LDA #Music_Song_Total-01
    * j. r; F7 @9 a6 e/ B7 Z
  467. STA Music_Cur
      i2 [2 p! c7 e" o  H5 ^
  468. Music_Number_End
    # r" f* J9 j0 ~. l4 _9 Y
  469. RTS5 c' J: m+ {, l; _  M& }

  470. 0 q* {& g7 G' F' V& z( {8 J
  471. ;==============================
    ) Z% c- k& T0 `" Q8 F
  472. ;音乐重设
    9 t/ t9 G4 Q3 [& b
  473. Music_ReSet
      \2 H6 k  W1 ]' [7 u9 ^/ `; _
  474. JSR RAM_Clear9 v& X6 N' l! [
  475. JSR Sound_Clear2 }, E- D( I/ |( k5 C" {( z
  476. LDA #$1F4 |( J2 G7 ]7 N+ b6 s( b
  477. STA APU_STATUS
    5 [6 B1 F8 L* D! q
  478. LDA Music_Cur: g7 [+ z9 U$ F! F$ |7 O' O* a
  479. JSR Sound_Init
    9 j) P$ y$ n# V4 F! \0 E2 |3 K
  480. RTS
    * M# Z# H% z, L) \, K" @

  481. 5 q, t9 D& T1 M. g/ D
  482. ;==============================# m8 N' J6 `! k  a
  483. ;音乐端口清除! p* N3 f' X" q
  484. Sound_Clear5 H/ U( S/ E2 e
  485. LDA #$00+ Q  W  F; l7 P5 _: Z$ `
  486. STA APU_STATUS. \/ j: j% ~# V# q7 G  Q4 k
  487. LDX #$00
    ( b  }6 E6 W, H( x$ F7 A# A. V4 p
  488. Sound_Clear_Start
    5 H# H0 b* [1 ?# n
  489. STA $4000,X
    % m* E# P" T; x6 B1 z
  490. INX6 l( O" l& o) s2 O
  491. CPX #$145 X# b$ ~* ?2 w; b
  492. BCC Sound_Clear_Start
    3 f% z- l9 O' Q$ h0 a" ], E* O, J/ i
  493. RTS$ Q2 @% e4 o5 n; P' e
  494. ' ^7 _  F& K, r" R
  495. ;==============================
    2 w( j; T9 s( O
  496. ;按键处理
    ' k. A3 ^. P5 q: t
  497. Key_Proc
    + {' k2 W0 o+ \3 T6 j
  498. JSR Key_Scan
    . Z& W1 m. `  z3 a0 g4 V& }1 _
  499. LDA Key_Keep
    3 H& A, F& @# `: H. Q2 V0 {
  500. STA Key_Temp
    % G. V" `- M5 I  F2 c
  501. JSR Key_Scan3 _3 [* H9 {3 M; B
  502. LDA Key_Keep
    5 X. c3 P8 a8 c) E
  503. CMP Key_Temp
    * ^# W7 ?: w3 h
  504. BEQ Key_Get_Once
    ' l& i3 z: X/ s- d, n3 x3 _
  505. LDA Key_Kemp. P) `% l  r' Q
  506. STA Key_Keep
    ) v, f5 d, V: C' W# B
  507. Key_Get_Once
    / E8 ~- K/ i- X; `
  508. TAY2 Y# m/ M& z7 ]5 t$ c% y9 V* E8 Y
  509. EOR Key_Kemp4 Y3 J$ ?, t; s  J! M2 c
  510. AND Key_Keep5 ]- V: R' w' D% F( A( i
  511. STA Key_Once: n$ v$ f; y$ \" Q. c
  512. STY Key_Kemp
    0 M- ?8 x4 z, i4 A$ ^( T
  513. RTS+ z4 J$ C( T  D& v
  514. ;------------------------------
    # Z3 J7 H; K2 H6 e9 h- a! b1 s
  515. ;按键扫描
    : @' x; N5 A  Z) \
  516. Key_Scan! m% V* C2 ]  W8 N' I2 T
  517. LDX #$01
    . t% Z7 u0 J$ F7 I* n0 }
  518. STX JOY1_FRAME
    4 s7 A, R& D! U3 A2 b. j+ y
  519. DEX
    5 F% B- J% m  ?% U* Z
  520. STX JOY1_FRAME
    / U* b3 _9 b* I0 X
  521. LDX #$08
    , N: c' {, r. v) c2 E
  522. Key_Value
    4 e. \- d9 w5 z8 ]" R
  523. LDA JOY1_FRAME* s; B6 p; C. |' T" \4 @
  524. STA Key_Getv8 ^9 [3 o6 i) K+ J5 J
  525. LSR A/ @; v) Q! f, `4 U' {
  526. ORA Key_Getv! ~* j* O4 x1 M
  527. LSR A
    : h, v: P: K8 |
  528. ROL Key_Keep( S+ g5 @2 f0 M4 O. H
  529. DEX& u1 ~* r- Z& H; ?; N
  530. BNE Key_Value5 h6 F0 R" J' }
  531. RTS! Y3 @, h& k4 A& [! ?& b0 ?

  532. . v: a9 Q0 V1 C6 M6 i' P4 j
  533. ;==============================+ R' c  k8 }, ?" n/ X' [
  534. .IF SOUND_BAR_SHOW_ENABLE
    3 W( q0 w, t5 V& X) |7 V
  535. ;音乐条显示" Y0 ?% t8 x& T2 |
  536. Music_Vision) }; n' z: u, y
  537. JSR Music_Animation
    / c, t; q7 X) P- W, t
  538. JSR PPU_End8 J: t, E1 a% L5 r* U
  539. RTS2 U) O4 d$ q4 N2 L, i
  540. ;------------------------------
    $ ?7 z% d8 @# W
  541. ;音乐条显示处理
    ' b& s' }0 ?: }% v; L6 G
  542. Music_Animation
    % H1 n, r! s. _- Z. k! h' y1 L
  543. LDX PPU_Cur5 |9 J7 o6 O% M% `
  544. LDA #Mode_Line
    ; j8 p0 h4 o  o5 L9 b) v+ m$ F/ i
  545. STA PPU_Addr,X
    5 R. c' |# n- E4 P7 i
  546. INX3 f/ f# B0 B1 T8 K1 S# E
  547. LDA #HIGH(Sound_Bar_Pos)
    ( I+ M" i- }& |$ e
  548. STA PPU_Addr,X
      h: D( V0 P/ \$ E6 c. e% u
  549. INX/ x9 X. Q- T7 C
  550. LDA #LOW(Sound_Bar_Pos)8 [  t1 Q& T$ \1 k* {$ I3 g
  551. STA PPU_Addr,X
    4 _) v. v% M/ h  ^  N6 T
  552. INX
    ! m5 A% F1 t% x' Z5 F$ s( O
  553. LDA Sound_Bar+ N' r/ l/ `8 B& I
  554. JSR Volume_Convert- ^5 C0 n* {; T! o6 v
  555. JSR PPU_Return
    " S: G$ I* }- |! K6 Y, z1 z
  556. LDA Sound_Bar+$4
    7 R6 q- y- E7 S& a& l, ?( a
  557. JSR Volume_Convert! I" |7 E- b# W' b0 k" X
  558. JSR PPU_Return
    % e: Z0 T! j6 c( |+ p
  559. LDA Sound_Bar+$8
    # G; B' D1 h% ~2 b% l
  560. JSR Volume_Convert_Ex
    : L$ n3 q( {& \  i% x# y6 ~/ [+ D
  561. JSR PPU_Return
    % n" a) M' R- u% T- @7 d$ ^
  562. LDA Sound_Bar+$C
    ) e4 e, ]! t3 b
  563. JSR Volume_Convert
      @5 M/ T5 P. |8 `/ N% E4 Y" ]
  564. JSR PPU_Return0 \; v6 I! c. F( g7 x- V4 x
  565. LDY #$10
    6 l$ W$ y( q$ ~* g' q+ i7 \5 k& {! u4 a
  566. LDA APU_STATUS) _# m4 R; _/ A+ H7 N5 x% ?
  567. AND #$10' a& G4 d& S4 a0 o$ q+ N
  568. BNE Volume_Count
    4 A" W% q) |2 l5 |/ y7 s2 ^
  569. LDY #$00
    % w/ _: u* \$ Q3 ~. a% G
  570. BEQ Volume_Count5 ^: _5 x  z6 O0 C7 _7 A
  571. ;------------------------------  k9 a0 c+ t% `8 D2 H9 z  s/ J  v
  572. ;音乐条处理  z- Q* g2 L; C& F8 u
  573. Volume_Convert_Ex
    & E" Z. ?3 O& v5 Y% F
  574. AND #$1F3 I# R0 H( h6 x' @8 H% r
  575. TAY6 `2 v; @9 Y# F
  576. BNE Volume_Count
    0 h  I# g+ G) b9 h: j7 i' J
  577. Volume_Convert
    + Y$ @4 i5 Q! l7 {1 e. r
  578. AND #$0F
    ; X3 v2 r' `/ x, s2 _
  579. TAY# z) F$ Z/ }7 G/ w/ j/ a$ c
  580. Volume_Count
    ' j/ F0 J( F1 K: |4 Z, D6 t5 F3 k# I
  581. LDA #$08
    . Z+ ]# y- c1 x! g5 r( L
  582. STA Sound_Bar_Cnt) }# E# j, u, W; |2 W
  583. Volume_FILL+ t( L. h  S, f3 O* x$ g
  584. DEY
    # c9 |4 {0 {: {
  585. BEQ Volume_Half5 a* p. ~2 X3 U$ Q2 x8 k5 Q7 G9 h
  586. BMI Volume_Empty
    : C! S" b* p& I- B3 k0 R
  587. DEY
    7 u8 A% K) |" P- N; D& t, A
  588. Volume_Full
    ( p# ?0 W, L7 b: c
  589. LDA #$16
    + e  Q0 _& B" P; z
  590. BNE Volume_PPU
      y5 t! e) ~! q: a- w% b+ ~
  591. Volume_Half7 A$ p/ X8 W& M% N" c, k
  592. LDA #$15$ l, L8 B+ e; Z! y6 V
  593. BNE Volume_PPU
    5 G2 I1 f' `" K
  594. Volume_Empty! ~1 H+ I4 v2 G& r7 i! o; I
  595. LDA #$14
    & S5 y8 ]- Y5 y5 ^* y* s7 M3 I
  596. Volume_PPU
    3 G( I# u0 K3 `
  597. STA PPU_Addr,X
    ' C) p3 ]" n; \% g9 n
  598. INX
    . w; c7 B3 x' |6 H3 n
  599. DEC Sound_Bar_Cnt& v* ?, o; t9 ?" J* i
  600. BNE Volume_FILL
    4 }/ A2 O: X3 U; I' G- {1 D5 Y# J
  601. RTS
    + Y1 h" T% y: |6 l
  602. . a' P( C. I8 Y1 [/ ]8 u* Z7 O- t- @
  603. .ENDIF! `7 \0 |9 g2 O) v7 c
  604. # a6 e: R$ z5 l- O" P$ K
  605. ;==============================
    ' a; ]/ k7 g$ j" E
  606. PPU_Addr_Set;PPU行开始' e8 {4 `% ~- b) P
  607. LDX PPU_Cur
    ' t" O" J$ S3 N0 Z
  608. LDA #Mode_Line7 L7 Z  X& a# R9 I' U2 I& K
  609. STA PPU_Addr,X' g4 _/ \9 z6 @+ M" X" d
  610. INX
    , y0 z. M& G1 j* ~+ F" @" x
  611. RTS! X; _$ i# G: ?# n. Z* `

  612. 0 i/ {+ ]  O. I- F
  613. PPU_Return;PPU转行
    + [0 T0 Y& L0 O4 e8 N3 a
  614. LDA #Flag_Over2 Q8 X3 G) W" ?; v: q
  615. STA PPU_Addr,X" j$ f" E. r: A
  616. INX7 `+ X7 k" |2 t$ {0 W
  617. LDA #Mode_Return
    $ O" F8 {/ {1 J! ]* K* E
  618. STA PPU_Addr,X
    ' \. ]$ g. T8 V& m+ D7 d9 f4 Z
  619. INX6 \( {6 p3 {$ B* O# ^* b; S) y9 w
  620. RTS, j, R, B$ B3 p

  621. 7 Y$ f- n! k" g+ ^
  622. ;------------------------------- ]6 k) A7 c7 v# I( M# N
  623. PPU_End;PPU结束
    # B! O) d( v4 m
  624. LDA #Flag_Over% Y0 _' X' |. A* Y% z( o6 f
  625. STA PPU_Addr,X8 M% A; @/ ^6 d2 e' R6 _, A
  626. INX' U; B& T/ E% i/ l9 d
  627. STX PPU_Cur
    1 w$ Z. \' q" ~# t- r- u" a
  628. RTS
    2 n2 g8 \1 w" b* d, X9 v$ b* i
  629. ;==============================) T; t2 ^7 b2 X2 Q; ^
  630. Mode_Line     = $FD    ;新起行模式* }. U9 \9 h+ k* R
  631. Mode_Return   = $FE    ;转下行模式8 p4 q& ?% Y& f+ m, r$ t0 U
  632. Mode_Clear    = $FC    ;行清除
    0 I* C" i- _) U
  633. Mode_CntLine  = $FB    ;行计数写入" N0 S( T$ f& {8 s' S8 T
  634. Flag_Over     = $FF    ;行结束标志
    ( c* x) v5 V. O$ h

  635. $ n1 b9 A5 a$ J. q
  636. ;------------------------------: C) s. W, D$ e8 x
  637. ;PPU处理
    . P2 Z' k1 A$ I, |/ K4 |
  638. PPU_Proc+ `+ q0 C7 B, c, W9 H
  639. LDX PPU_Cur
    ( ?" V4 _. C0 Q4 ~8 D
  640. LDA #$003 P& ?4 V" ^& F( ^
  641. STA PPU_Cur
    9 K/ h( x8 W. B( `0 m
  642. STA PPU_Addr,X7 z7 A8 l! X  U9 F" {% T* k6 Z
  643. LDA PPU_Addr. t4 R" W7 {7 b
  644. BNE PPU_Proc_Beg5 {% C. O- B( x9 f( D, ?
  645. PPU_Proc_Ret
    " r0 u- s9 I8 `& S, `( X
  646. RTS
    & V: g5 D! a7 r: E; v' U
  647. ;------------------------------+ C# w4 J( ]% U; O4 K( f/ P- u
  648. PPU_Proc_Beg  ;处理开始
    8 O! G! F0 D2 g4 J
  649. LDX #$00; _  u% L1 ^3 p2 U6 ?
  650. STX PPU_MASK$ \5 p4 b9 U* f7 U. Y
  651. ;------------------------------
    " w2 D* e9 h* u7 l5 S' S
  652. PPU_Mode_Select  ;模式选择
    ( S) `& P  f+ P$ h) B+ Z6 X
  653. LDA PPU_Addr,X! q4 R# g$ w3 f/ }8 p' l6 t3 y3 b4 y
  654. CMP #Mode_Line
    6 p; A0 F9 |6 i/ ]% a) }/ [
  655. BEQ PPU_Mode_Newline4 r% c8 \1 Z* q/ k: G' b. L
  656. CMP #Mode_Return
    1 U1 r, j! D. `6 e7 z3 t
  657. BEQ PPU_Mode_Return' `, H1 m: T. d. D: a! R
  658. CMP #Mode_Clear$ u! y/ K2 l7 h2 l; o
  659. BEQ PPU_Proc_Clear3 E) f/ {+ O3 K( f6 t1 n
  660. CMP #Mode_CntLine
    " \) M9 z3 n, A& U7 H  I% R. v( M2 M
  661. BEQ PPU_Proc_Cnt_Line
    . T  ^, U' j- A* O
  662. RTS) Q- v  S; ~& v* F  R2 u
  663. ;------------------------------
    1 M( g( f0 a: q1 E
  664. PPU_Mode_Return  ;转下行模式! `: S" w* q, ]( p
  665. LDA PPU_Addr_L- g0 S* S! T' B+ x- M% U/ B9 F
  666. CLC& W: p$ M3 W; V  s' H0 T
  667. ADC #$20
    " S: h/ K5 d# Y
  668. STA PPU_Addr_L
    + b6 Q* ^6 N3 N7 K6 W5 D
  669. BCC PPU_Return_End
    ) ~! i+ J# ^" |4 h; H+ k) \. N
  670. INC PPU_Addr_H
    9 f4 X6 Y/ i: B, j9 L% s0 X
  671. PPU_Return_End& n( v: u* O' T/ L: Q1 `9 L" @
  672. JMP PPU_Set_Increaser
    2 W% K8 y, F, t* S$ X
  673. ;------------------------------1 C* r, @* c0 j1 @+ E' d
  674. PPU_Mode_Newline  ;新起行模式# A5 v3 |6 v) E$ V
  675. INX8 {( C# B* C- e; c0 K$ I6 }7 g0 {
  676. LDA PPU_Addr,X5 h$ [  U5 u3 z* \! e' D1 d
  677. STA PPU_Addr_H! N. D& }$ @) w( `8 r
  678. INX) N; A% A3 g% c7 Z4 L
  679. LDA PPU_Addr,X% L% x5 m% e' r  ?$ j
  680. STA PPU_Addr_L$ G3 Y0 l: N) G/ X
  681. ;------------------------------+ s& q; r3 ^1 u- q: ]
  682. PPU_Set_Increaser   ;设置写入地址0 ?- [6 U. E9 ~6 O/ N& A
  683. LDA PPU_Addr_H( d5 u/ j4 Z" Z
  684. STA PPU_ADDRESS
    , X; l7 d  C+ Y+ |5 p  a
  685. LDA PPU_Addr_L
    ' W! L) j% V. Y
  686. STA PPU_ADDRESS7 S) b0 {) ^( ]" U- T
  687. ;------------------------------. Q- N& ]1 X* `' t5 E
  688. PPU_Write   ;写入数据( D( p: z$ U  i; u
  689. INX
    + \2 C- a; t( z" O" m6 t& L, X
  690. LDA PPU_Addr,X
    6 q4 k% W# b3 D/ ?0 p
  691. CMP #Flag_Over
    7 D  d( _) n% k; V6 Q* {
  692. BEQ PPU_Proc_End
    : ?. C2 H3 J7 @; [6 J4 R
  693. STA PPU_DATA
    , q( t: f4 L6 Y: I  ?4 M; X% V
  694. JMP PPU_Write1 R! X) [# W7 D' z1 h
  695. ;------------------------------
    8 \  V" q' q) e0 R
  696. PPU_Proc_End  ;单行写入结束
    ) E% b# D" L  Q/ \8 `
  697. INX4 ]0 K. o& a" O# M8 n. ~
  698. LDA PPU_Addr,X; s6 |( T7 l! T7 ~
  699. BNE PPU_Mode_Select. J5 I- G* _9 r, t# D9 E1 e
  700. STA PPU_Addr8 t/ F8 x6 o" E3 w9 `
  701. JSR Update_Palette_Color; `2 b1 s) F1 W8 x7 ^' }
  702. LDA #$005 V2 Q, x, g. }
  703. STA PPU_ADDRESS: G0 }- x# m* r" F% x
  704. STA PPU_ADDRESS
    $ e9 ?: W  E8 B, V6 u: ~5 z
  705. STA Show_Track_Name( E  Z7 w* T$ _2 A2 M. M
  706. LDA #Scroll_X
    ; x1 g4 e1 o# G1 s  m0 F# Y5 I, ^
  707. STA PPU_SCROLL* f% I! n( z( y5 k
  708. LDA #Scroll_Y; X+ z; T. p$ ]( I# X$ z: f3 j
  709. STA PPU_SCROLL7 y0 J8 Q9 |" d5 P0 \4 X
  710. LDA Screen_State
    0 Y' U7 j9 h5 B' z9 S
  711. STA PPU_MASK. h8 \# {8 Z/ [8 y# Q: H8 |
  712. RTS
    6 p" ~1 v- E3 E0 H- q$ L: Q
  713. # d* C0 B5 y; ]& K
  714. PPU_Proc_Clear, j9 K4 t' x1 C. u
  715. INX1 R8 u3 t! m$ I# h$ {; i
  716. LDA PPU_Addr,X9 |! E' R$ x% E" v
  717. STA PPU_ADDRESS
    " f; _; Y1 {# P; i
  718. INX8 j0 Q! p0 R1 F/ P" S7 w
  719. LDA PPU_Addr,X
    9 X. N" ]- T7 }
  720. STA PPU_ADDRESS
    : \+ O( m1 O0 W8 |1 a
  721. INX8 n& e2 u6 }, b! E9 C' C9 G% @. F
  722. LDY PPU_Addr,X
    ) q% e& i% ?5 [5 I
  723. LDA #$00
      v+ Q) {" f, Q6 y/ T
  724. PPU_Proc_Clear_Write
    ; s; z. |) H4 [( J0 z
  725. STA PPU_DATA) z( i* d- y* d6 b# k. p. D
  726. DEY+ N* I# Y  v6 w
  727. BNE PPU_Proc_Clear_Write
    7 \- W) D2 H* P6 p6 l2 S
  728. JMP PPU_Proc_End
    # h& b" [- j$ B

  729. ' d6 E7 ?7 b5 j1 F  x$ U
  730. PPU_Proc_Cnt_Line( W% M7 b' w% ?% m0 }) C
  731. INX$ l+ C; n; |+ j1 B( J! ^! k# {
  732. LDA PPU_Addr,X. Y; O) h$ N3 ~$ Z  f
  733. STA PPU_ADDRESS' T) c- N. @2 `& N5 u" H+ F
  734. INX
    0 Z" x5 ~: M# c: \
  735. LDA PPU_Addr,X
    / ?& q" W! E4 i' l, P
  736. STA PPU_ADDRESS) f; b% `1 K& ?5 }
  737. INX# i8 ^+ l9 ~+ U- y
  738. LDY PPU_Addr,X1 A+ C7 n% v8 |- e
  739. PPU_Proc_Cnt_Line_Write! l2 y& P/ v5 u
  740. INX! D: h; w' |3 |, M0 P0 Y) {
  741. LDA PPU_Addr,X" c6 a$ s2 F; K. v$ c
  742. STA PPU_DATA- t1 p2 ?$ i  Z! G5 Z5 V* B; I; O
  743. DEY9 C  `5 b2 J" H1 l
  744. BNE PPU_Proc_Cnt_Line_Write
    ' k% w& J+ s# o2 c) d6 S2 B
  745. JMP PPU_Proc_End# n; g% V3 W+ C. U0 k

  746. 0 Z0 I" E" R4 J9 o
  747. ;==============================
    . Y+ U- R7 ~& O  C5 j  j
  748. HEX_To_Dec;十六进制转十进制. J: h2 Z7 K9 o
  749. STA HEX_Data
    ) T; K$ e* S! t$ B( V# i
  750. PHA
    - v8 V" ^( ?4 s) i. U) F+ t
  751. TXA4 v+ x3 v. }+ }; C: A
  752. PHA9 v: o  m( X5 V& e, s. ^
  753. LDX #$003 ?" f" G) x! C) N. ]; r, i6 i- k: }
  754. LDA #$00
    $ ~1 E% |- f3 g+ u5 s2 x# s
  755. HEX_Cln4 w+ z$ g6 s) ~. i1 \+ W$ Q+ R
  756. STA DEC_H,X; t' a1 C: T5 a8 `
  757. INX
    + ^. L3 O9 D6 A7 a3 F1 V% [- l& p) e5 A
  758. CPX #$03  K# f; l1 y* g5 }. n% x! B+ e; U
  759. BCC HEX_Cln
    ! R6 f9 ?% Y; [
  760. LDA HEX_Data
    4 a& `! O3 x2 O$ B( g
  761. ;------------------------------; J; Z# z  i8 ~! C( l: N0 l
  762. HEX_100
    7 W' l, x1 c4 R9 B7 u  O5 K( v! t
  763. CMP #100# {3 ]) L( N9 O
  764. BCC HEX_10
    0 @# k/ Z% ?8 o# N1 N
  765. SEC
    ) C4 p/ O0 ]/ u& V' O$ L( h
  766. SBC #100/ w1 y8 _# q" ^1 s7 f9 h8 Q+ w3 c2 n
  767. INC DEC_H* }! l6 k  M- j1 O" z; ]' P
  768. BNE HEX_100
    7 x$ u8 _" p  p9 A
  769. ;------------------------------
    $ C3 `7 s: y9 [) A/ j
  770. HEX_10" y' E% a" _' {
  771. CMP #10+ V& L$ u9 ~; @+ D; C5 F
  772. BCC HEX_1- W- j6 ?- S! N- Z( [7 \8 B
  773. SEC
    . _$ Q# n, O! q) |" L
  774. SBC #10
    3 t3 P2 o( o, H# f; f
  775. INC DEC_T
    9 H0 ~: H4 s, a/ U
  776. BNE HEX_10; y/ h3 ?* Y; H; P7 v
  777. ;------------------------------
    ) Y! s- V2 G) K, A; y" H
  778. HEX_15 S! x! k" V6 \- ], s4 Y* m7 C
  779. STA DEC_L) d' n, y: p' u5 j9 E4 a8 r& x/ L8 ?
  780. PLA
    ( z3 C% S+ H& d: X1 N
  781. TAX
      _7 h) E9 ], ]3 u
  782. PLA
    + {" d+ g" w8 ?
  783. RTS
    , F: o9 C9 v( u3 O  i

  784. ( j: n7 h( a$ l$ p3 b
  785. ;==============================, A- x1 o, f5 T, [* D: d$ A
  786. ;音乐曲目显示( ^  c, o8 g) f/ {3 ^# \2 Q
  787. Music_Show* ~  P3 e* P* I# m' ?
  788. LDA Music_Cur
    ( W) r5 q/ l( p2 ^1 g+ q
  789. CLC
    ; A6 y& |) x) P3 |  b
  790. ADC #$01% j2 T0 _& i, H4 [  Q7 @/ o6 O
  791. JSR HEX_To_Dec
    1 Z' {) a4 M! Z" X! S
  792. LDX PPU_Cur
    ' @! j) M0 o" @! ?; u+ L
  793. LDA #$FD/ _, ~2 C% h$ g; M  z# b+ L* I$ K; P
  794. STA PPU_Addr,X
    , |: c4 j+ {& R  }6 Y
  795. INX' O5 w6 ?: ~' g: Y- m3 _
  796. LDA #HIGH(Play_Index_Pos). }# o( a1 h$ d6 w( B3 V( _
  797. STA PPU_Addr,X
    ) W3 V; ?2 i+ E" Z* \* f
  798. INX& U9 ^0 T" X  w/ W2 X+ ?* p
  799. LDA #LOW(Play_Index_Pos)
    + A0 P" b* R9 G7 I8 K9 v
  800. STA PPU_Addr,X
    4 V; ~5 J& t+ r* Q$ W
  801. INX8 K+ ]1 X8 ~) |0 V; l

  802.   [5 w  `7 ^% a7 R
  803. .IF Music_Song_Total > 99
    - s$ F( B& N% Q* U& t8 K
  804. LDA DEC_H
    0 k6 c6 f* A# i. j* e0 e& _
  805. ORA #$30! Y6 c  k; t4 H
  806. STA PPU_Addr,X( Z  N! T3 V& r' `2 \( w
  807. INX
    2 w+ p  d+ ?; [
  808. .ENDIF" ^! \1 h9 Q! G. U  b3 Z
  809. ) q- @% e- {- l0 O0 \7 C
  810. .IF Music_Song_Total > 9! v+ ?: o( }! C3 q4 s
  811. LDA DEC_T
    2 I  T$ R+ f8 y( u5 ^
  812. ORA #$30
    : J" q: K: p( [( {# H
  813. STA PPU_Addr,X
    * @) S+ r8 c( E& i
  814. INX# O1 O: g$ ^& F; s
  815. .ENDIF  f! e$ t! t6 b' i0 q8 G
  816. 8 U: u  s3 j# n1 S! D+ r. j
  817. LDA DEC_L
    . t. f/ Z& h, q
  818. ORA #$30
    ; I9 @- U- q; d9 @$ x+ q: C
  819. STA PPU_Addr,X
    6 U( I' @5 b, t$ Y
  820. INX
    . k. u% r5 W1 l) P8 ]

  821. ; i4 f: }# l2 w) j
  822. LDA #'/'" ?3 ]& @/ E, s# d
  823. STA PPU_Addr,X+ D7 m) @  ~& n  h1 D9 W
  824. INX
    ) I& n/ H/ m1 V  [0 P0 q
  825. Music_Show_Total4 R' z; w$ W0 H/ h
  826. LDA #Music_Song_Total! w$ C6 i3 ]" [0 D$ P
  827. JSR HEX_To_Dec. B6 e1 G% Q- f2 I1 E

  828. 8 d: U8 G6 o- {0 v4 X' |# j
  829. .IF Music_Song_Total > 99
    4 ~* j: @* f: }+ }0 f. m
  830. LDA DEC_H
    * a  q, s/ Y$ s1 N& y
  831. ORA #$30/ a6 j* s* S% K5 m8 X
  832. STA PPU_Addr,X# M- ~! E, A+ Y# E
  833. INX9 i% Y" M2 n2 y  D& ^# |' Y/ O9 ^
  834. .ENDIF
    $ n" n6 d7 V- w% v+ M# u. `
  835. 5 w5 }4 V9 F; F+ O
  836. .IF Music_Song_Total > 9
    4 Q2 }4 ~' O3 ^
  837. LDA DEC_T
    $ I, c& C$ w1 p9 A
  838. ORA #$302 k# m6 `5 L% n: N4 `  i9 Q
  839. STA PPU_Addr,X; L. K* g( o& r" f; n
  840. INX
    3 ^& {) T! `& ^4 @
  841. .ENDIF7 g$ N) n. U( {; `' X

  842. + S" R9 j, ]: F' Y6 B
  843. LDA DEC_L; x) }+ W! e6 E
  844. ORA #$30, m" R5 H' d; _0 ^1 O5 M
  845. STA PPU_Addr,X2 Y- _/ }" a8 l$ a
  846. INX) \6 y# x" S$ @/ K% a+ j

  847. ) Y3 i9 i* t3 @9 j
  848. JSR PPU_End. L0 Z' y3 d' f+ L' n
  849. Music_Show_End, A% b2 J- Y: N2 E9 x1 ^
  850. RTS$ a6 G% ]& i* i# [4 a0 ^) ], d: M
  851. * r" T0 l# M9 u% t+ |
  852. ;==============================
    " \5 h( k: l/ X0 d8 h. _# e/ V
  853. Time_Show;播放时间显示0 D9 F  L5 n: \, ]  F: m# `5 a- L
  854. JSR PPU_Addr_Set
    & |: |% |, ~' M. `' K- c
  855. LDA #HIGH(Play_Time_Pos)3 E- ?; S4 D4 L2 v! G
  856. STA PPU_Addr,X2 t# h$ P3 ^* ^) K' ~
  857. INX" t8 g/ N& R4 O0 O' e4 Z
  858. LDA #LOW(Play_Time_Pos)+ K/ }0 d% u+ s* A7 Q4 O  c
  859. STA PPU_Addr,X- |2 }! ~3 b  A8 d6 U
  860. INX$ O& x- s7 c" P, ]
  861. Time_Show_H2 j4 {7 j1 T2 z" P
  862. LDA Time_H
    & h$ Z0 X. R) E; ^( Y5 c7 D' m
  863. JSR HEX_To_Dec
    1 ^1 s7 p7 k; s9 i7 b: X
  864. JSR Time_Digit1 f! c- v  U4 x
  865. LDA #':'
    7 G: J# [, m& ]$ @$ l* A
  866. STA PPU_Addr,X4 Q8 [: [# l" }. c/ R
  867. INX8 ]$ [2 t- d& {4 w8 s+ e) e6 N* S2 d
  868. Time_Show_M9 {  o( ~$ m% l1 E" ^
  869. LDA Time_M
    ) u3 V$ w  t8 @( Z
  870. JSR HEX_To_Dec
    ! s' F9 K$ X5 M9 Y2 C
  871. JSR Time_Digit+ x; C$ o, x9 T, B6 @
  872. LDA #':'
    % }/ {$ u- R" a8 `) L# f( J6 X) Q
  873. STA PPU_Addr,X* Y  f$ p' U% n- E2 u
  874. INX
    4 H: X- v' [. B% F2 q* W
  875. Time_Show_S
    ! a3 ^+ ~- e: w% M
  876. LDA Time_S. d6 f+ n$ p8 q1 I6 `" `
  877. JSR HEX_To_Dec+ B2 q& q- x1 g2 j8 Y( }, _8 {
  878. JSR Time_Digit: ^9 `' m- x* E! p2 _! W6 m* h
  879. JSR PPU_End
    7 h% o! ^) {+ P5 F8 c
  880. Time_Show_End4 u( {  Z* K7 ]
  881. RTS
    : ]( T5 }3 q0 R8 Z$ x# p4 l( A

  882. $ |$ V+ z) W  U" a
  883. Time_Digit
    * T: t+ v. v& Z" Q
  884. LDA DEC_T4 w, D# N# ^7 b4 l) j: V! q3 \
  885. ORA #$30" j# _$ Z6 `2 r. U$ d
  886. STA PPU_Addr,X1 K* N, O4 a% q: B7 X
  887. INX! R' y+ C  ^4 Z% W% a( I: i1 _
  888. LDA DEC_L) h9 V) {% F3 s$ B6 l7 T1 |
  889. ORA #$30) }3 @# j, u" _0 P  p, M
  890. STA PPU_Addr,X' c' g9 d. r) G) p5 G; d8 ^
  891. INX
    " g% t/ I7 F8 z& p" j2 u3 r
  892. RTS
    . b$ w3 `3 v' g" K2 h4 H. X7 ?
  893. 3 o  U/ X4 t+ m& O2 R
  894. ;==============================
    3 p3 N% _2 n8 W" J
  895. Time_Count;计时% s* q" N! t$ S: W$ Z: Y3 j/ g
  896. LDA Music_State- l* N* j8 N& m" U! p3 e& x
  897. ORA Time_Wait_Cnt2 B7 _/ [- }3 s" b
  898. BNE Time_Count_End
    % z9 Z9 G. ^! Q$ C+ h
  899. INC Time_Cnt
    7 h4 e* k( F7 C0 Z: o- ^4 y
  900. LDA Time_Cnt
    - \1 x0 E: d5 `
  901. CMP #60, K* o3 \* s' T$ |5 a
  902. BCC Time_Count_End
    5 Z5 S5 s% H% |8 L. d! r# |) f
  903. LDA #00" |$ F# r7 {" j$ Q% i0 K& t
  904. STA Time_Cnt
    * f9 h/ F2 S4 T6 [, i2 Y# [% ?5 O
  905. INC Time_S
    ! z/ l; p( w1 t

  906. & Z( S* M+ @) u! W; U) o
  907. Time_S_Cnt
    6 c2 C* j& q) N& j4 H" F9 x0 A, s+ [+ }
  908. LDA Time_S
    + C3 w5 V5 R& u8 y, ?
  909. CMP #60/ I6 |& z" `0 i) T
  910. BCC Time_Count_End
    , _- y; d2 I6 c# B
  911. LDA #009 O# g" H% o9 R' h' e& V( o
  912. STA Time_S4 T  M; X% g) b& j' i2 r
  913. INC Time_M
    5 D  S0 F5 U) j+ ]; M* E6 p$ |% ]

  914. 7 L& F4 J! J8 |0 p5 `
  915. Time_M_Cnt$ |: D, i4 n0 d5 Z
  916. LDA Time_M  u! a& I( U7 {0 x7 k; G
  917. CMP #60
      l, {, A% l) _* O* N0 Y# R+ R- `
  918. BCC Time_Count_End9 _2 b# m$ M+ S; s
  919. LDA #00
    5 \$ D2 P' U8 g/ x% {
  920. STA Time_M: m7 G8 _0 d$ m# y
  921. INC Time_H( Q% j) g( n' S6 b, b1 j
  922. ) B5 C: @6 I: C. h
  923. Time_H_Cnt
    * r- \; D% g4 ~/ ~8 _4 Q
  924. LDA Time_H
    ) N) |$ |+ F# t. t# z. W
  925. CMP #248 m- S/ p1 m& F* ~% v
  926. BCC Time_Count_End+ P& B% |# L, q( r8 c$ p4 U
  927. LDA #00
    2 H2 a4 E& ?. t6 y/ T: B+ z& d
  928. STA Time_H: z* b2 \2 ]6 b5 D8 Z3 Q# s

  929. + S! e% p& j! p7 x
  930. Time_Count_End
    * L% R) f% e; k+ z
  931. RTS0 S; i% [# y, y9 ?6 a; f& u( _
  932. ) i8 T, n/ D! I/ T. ^7 N
  933. ;==============================5 X+ X3 p: ?0 e: Z
  934. Time_ReSet;播放时间重置" c# \" r! Z( |, M( \- R
  935. LDA #$00
    . E+ R* O" ^6 F% O' e6 H" B$ B0 c: ^# ^4 O
  936. STA Time_S% \/ D: g; D4 |9 t  n! `. |
  937. STA Time_M
    # K0 i, m9 \7 d$ y1 v2 H' D9 h2 j* i) ]
  938. STA Time_H* x7 K1 b, N  b
  939. STA Time_Cnt0 O# x! ~2 T0 d6 h' m6 `, b* R% I9 r
  940. RTS
    6 y: C0 I. D2 l) u0 [
  941. + g- O, Y5 m5 Y2 N6 c
  942. ;==============================
    8 a; j* W1 r7 p9 Q8 q
  943. Music_Bar_ReSet;音乐条重置% D1 Z0 k! K/ _, H6 i9 z
  944. LDA #$00
    2 w. b5 r0 J& ]7 |
  945. LDX #$00
    1 F8 D+ ?! M% `6 }' \  Q  O
  946. Music_Bar_ReSet_Set1 Q$ v; t4 n; _' M4 e7 i$ P  B
  947. STA Sound_Bar,X- B+ p( m1 z3 w6 Y' h! H
  948. INX( k0 T2 R" y' b7 e% `) ~
  949. CPX #$10
    + s/ e: ?) A7 I* i+ ?# R5 b
  950. BCC Music_Bar_ReSet_Set
    % L- s7 j1 D$ {+ l" P. R" \0 ]
  951. RTS
    # h: l( K4 G1 H. [  f0 Z0 b
  952. + Z! N: O1 l7 [* D6 y4 B. F
  953. ;==============================
    * P  a& V4 Q6 `7 y2 ~% s. J  o
  954. PPU_Data;PPU数据写入9 y% |  P$ I2 F+ `
  955. STY Data_L
    1 p! r2 m4 o1 o3 {& b5 T3 `
  956. STX Data_H
    ( V& U- n7 }4 w! {+ g6 ]
  957. LDY #$FF
    ( C5 \% n. i3 G
  958. LDX PPU_Cur
    # N1 v# o3 x! Z% o. x
  959. DEX
    , |+ \6 B' n% p* s
  960. PPU_Data_Beg1 q- g$ L' O/ N' O# K6 E
  961. INX1 Y& {1 S4 q# A5 _, T0 \
  962. INY6 `. J7 X: r0 G: |% R! g% w
  963. LDA [Data_L],Y
    9 K: P4 N! K/ @7 s: D" E  `
  964. STA PPU_Addr,X5 H' J) D: [6 P$ `! t* Y
  965. BNE PPU_Data_Beg
    / }- l$ ?! e% G" g( x: P8 f, C
  966. STX PPU_Cur
    / t  n7 A  a3 d
  967. PPU_Data_End
    + w: n4 H' _2 b9 m" T% j; i$ L& u+ E
  968. RTS
    % E/ d, D: }7 M. A- ]) a& {6 o
  969. ( I! u2 K! k( l5 m
  970. ;==============================! w# T- v9 o- p. O7 R9 l" _
  971. Music_Stata_Show;播放状态显示
    / l  \6 h) e! q: T4 |, `( d9 T. }, W
  972. LDA Music_State" g# j' V" {/ u$ B3 A- |+ \4 N% i, F
  973. BEQ Music_Stata_Show_Play
    ) [, C6 u6 N4 `9 E, |
  974. Music_Stata_Show_Stop
    8 x: B+ M7 [' p
  975. LDY #LOW(Music_State_Stop)( v+ I: H" a0 J: B6 U
  976. LDX #HIGH(Music_State_Stop)
    & }1 ]# y* Z3 q% \, h
  977. JSR PPU_Data( m5 x; g! B4 t5 m0 {% u* }
  978. RTS
    6 R7 e" c/ B2 j# A, p4 D; U% v
  979. Music_Stata_Show_Play
    ! p4 X$ i$ Z! J  i6 X) C/ }7 @
  980. LDY #LOW(Music_State_Play)
    " N" M, j7 [/ [* {4 z( `. i: `
  981. LDX #HIGH(Music_State_Play)
    3 E; V; i% i; ^
  982. JSR PPU_Data
    2 m' U! Z, S( N
  983. RTS
    1 s& K2 C, x: X; K8 r

  984. - P7 N; b  p. E
  985. .IF SOUND_BAR_SHOW_ENABLE# e# v3 a9 |* L; B' K* w
  986. ;==============================( w# j# p' a9 H# c4 W. [$ R
  987. Sound_Bar_Text_Set;标题与音乐条初始化) _9 h, q$ w' @, t3 ^9 e# ?
  988. LDY #LOW(Sound_Bar_Text_Data)7 C9 j5 M+ T' J
  989. LDX #HIGH(Sound_Bar_Text_Data)
    : X' E* i/ R6 P9 X- d/ h' F) b& }
  990. JSR PPU_Data  n; F9 T0 ~& t: C" B
  991. RTS
    6 Q) o" ^8 F# ^/ ~

  992. : y) f5 d, r- Z
  993. .ENDIF9 i9 d6 o5 Q4 d' z- E, _% u

  994. % W0 V) G: ^1 x  o
  995. ;==============================  T' s* o. E6 r7 x  n4 W: v
  996. Set_NameTable_Attributes;设置命名表属性
    - }+ R- u  u7 ]+ _
  997. LDA PPU_STATUS
    9 R5 R  c4 Z' r% x$ K
  998. LDA #$237 b8 a: \9 m# f! v" Y
  999. STA PPU_ADDRESS
    ; N% H  G3 o* y6 U
  1000. LDA #$C0! S! G3 J9 r2 K: f
  1001. STA PPU_ADDRESS
    - L, Y) u0 W- S0 E3 }8 }6 \6 ^
  1002. LDX #$00
    4 }% L7 j7 q7 G
  1003. Set_NameTable_Attributes_Write
    2 @4 E; M0 }1 q0 G6 _! ?
  1004. LDA Palette_Attributes,X, c! s1 H" z$ r7 `' h9 R
  1005. STA PPU_DATA5 V. @9 m9 F- P2 x, k
  1006. INX
    ( ^3 n# B/ D7 l/ L  }
  1007. CPX #$409 n5 C  t4 B$ z1 I
  1008. BCC Set_NameTable_Attributes_Write9 o3 e9 p9 y$ {0 h1 R. h+ N3 o1 c
  1009. RTS) t' P. b/ z, Q" }7 k1 p. A1 O
  1010. 7 b* B" E$ Y% M! t
  1011. ;==============================
    , m+ v' K% d7 d
  1012. Set_Palette_Color;设置调色板数据
    + T+ K% a* q& A5 [2 E& q
  1013. LDA PPU_STATUS
    2 y" F' ^. C& k/ x( b$ T9 Y
  1014. LDA #$3F
    ) S7 ~7 D$ D+ h% o$ k) p
  1015. STA PPU_ADDRESS: {7 O2 u6 D% P( F
  1016. LDA #$001 x% T0 ^, r0 {& X" G1 U. `/ T
  1017. STA PPU_ADDRESS
    ! w. x! L8 Q) U& w
  1018. LDX #$00  R6 Z4 H# ?) l! B% s2 p
  1019. Set_Palette_Color_Write) Z/ d/ e8 g8 T8 `1 e
  1020. LDA Palette_Data,X3 d3 d* D" ^1 G$ l2 M: c
  1021. STA PPU_DATA
    $ g# ~- ^) V! N: J' T7 l
  1022. INX
    ) U+ Q1 n6 t2 m# V: \
  1023. CPX #$205 Y) S2 y# Z7 G
  1024. BCC Set_Palette_Color_Write
    6 f' n$ L8 V8 H3 l
  1025. RTS
    " C5 i( ]7 n  p8 L
  1026. ( P  v9 w& h8 H. \0 y" t) H
  1027. ;==============================1 \9 ?1 t& k. G
  1028. Init_Palette_Addr;初始化调色板数据: }% E8 J) Q( ^
  1029. LDX #$00
    - {- |, r. ^" e
  1030. Init_Palette_Addr_Write8 G: A  i% A, t) v6 ?
  1031. LDA Palette_Data,X
    8 d& c/ O& J+ B& K. F& B
  1032. STA Palette_Addr,X/ j- }) i) @2 i' q. f" K
  1033. INX, N9 S1 ]# j$ Z/ L& \: I$ L
  1034. CPX #$208 d6 [5 _7 J" w6 }, T4 e
  1035. BCC Init_Palette_Addr_Write* f* k* h+ }% D: [; h% z( J
  1036. RTS" m# m( p8 K' ^! H5 z6 K

  1037. ( b$ j2 R/ X$ h. Q
  1038. ;==============================
    . M& y3 u) n. q
  1039. Update_Palette_Color;更新调色板颜色& _) @/ e( U6 D
  1040. LDA Show_Track_Name
    7 i" Z( A% w! M% [
  1041. BNE Update_Palette_Color_End
    / V! P  \# K7 e$ [7 Z
  1042. LDA Palette_Update_Flag
    & j9 ~1 t" [& O2 k  E& J4 a
  1043. BEQ Update_Palette_Color_End
    2 o/ |( B( A" i
  1044. LDA #$3F4 F5 ]- `# Q: R6 M9 A- U% R+ E
  1045. STA PPU_ADDRESS
    ) K+ a: Y# V! L$ k" k4 }5 v! M+ t
  1046. LDA #$00
    * m: a+ u" V( x, f: X% G
  1047. STA PPU_ADDRESS4 c* [$ g8 f  J" {/ {
  1048. LDX #$00
    / Q; G5 o: S. r2 y9 f3 {
  1049. Update_Palette_Color_Write' @& x+ G+ ]0 }; N; D
  1050. LDA Palette_Addr,X
    , i6 f5 t" j7 J' P, f2 A# l
  1051. STA PPU_DATA
    : u# \6 O7 s0 t* W
  1052. INX2 M2 f& a0 E/ n. l' g' ^" }) A
  1053. CPX #$200 z* U1 t) m6 ?
  1054. BCC Update_Palette_Color_Write7 W& `" o) |* w0 R$ l0 {, R: ]
  1055. LDA #$00
    ) D! d( {1 K% c8 i4 k& U. I
  1056. STA Palette_Update_Flag  a! W9 ~* r; p  Q
  1057. Update_Palette_Color_End/ M! i8 x: ]& a' _
  1058. RTS& V& B# @- {, P4 ?0 b- e% `

  1059. & j5 I& v+ e' E/ \
  1060. ;==============================, N' y5 _$ r2 o# v9 ^) C
  1061. Update_Palette_Data;更新调色板数据
    3 y9 s! ^  R7 b4 j7 A
  1062. LDA Show_Track_Name
    0 G8 O& y/ [2 J
  1063. BNE Update_Palette_Data_End$ @: J. K+ c* w- L
  1064. LDA Music_State
    % z1 Z+ K+ J, h/ Q1 V2 y
  1065. BNE Update_Palette_Data_End
    0 W" @! F" \+ Y: }' h" }, |6 ~
  1066. Update_Palette_Data_Check# w" ~. u* }; x# v8 ~
  1067. LDA Palette_Wait_Cnt
    ! W+ _8 T7 O+ n- N, ]& Q' U# ?! k' F
  1068. BPL Update_Palette_Data_Check_Over
    $ N: o3 x2 ]$ r3 t6 r
  1069. LDA #Palette_Update_Interval  X1 Q- d1 k! J# ?% x) J
  1070. STA Palette_Wait_Cnt0 l: c5 f2 T( C0 U. b1 C3 L
  1071. Update_Palette_Data_Check_Over
    " J  S0 |- P1 q. z" g
  1072. DEC Palette_Wait_Cnt3 d4 D  C' M* \) b6 B8 t
  1073. BNE Update_Palette_Data_End
    $ F, y4 Y8 T9 s3 x) g; a
  1074. INC Palette_Update_Flag: F6 i$ l7 h: B$ l
  1075. LDA #Palette_Update_Interval' y+ o8 W( `5 W4 t
  1076. STA Palette_Wait_Cnt* d5 f3 u( o2 }% V/ `, `
  1077. LDA Palette_Update_Addr7 R4 x3 k& R, t* c
  1078. CMP #Palette_Update_Max
    1 ^6 V* a/ a& Q0 O) k; {
  1079. BNE Update_Palette_Data_Set
    4 V! T. M; z2 d& f
  1080. LDA #Palette_Update_Min - 18 `" H) Y( K. |9 w% |& E
  1081. STA Palette_Update_Addr
    ) _8 j2 w' |8 R! `
  1082. Update_Palette_Data_Set
    / N, e7 o3 H6 ?& g6 f6 y
  1083. INC Palette_Update_Addr' G/ g3 F6 D6 H8 ~3 x
  1084. Update_Palette_Data_End
    , e8 k0 v' f- n/ F
  1085. RTS
    / g) L- Q) J+ v" C7 n* j

  1086. : D* z' i/ }  ]2 z% K6 E+ x, r
  1087. ;==============================
    ) P1 t/ p; e- h' l
  1088. Show_Music_Text;显示静态文本+ A! |' d  B* j# w- I9 x- h
  1089. LDX #$00; f+ S8 b8 }# }: Y& e% z7 m( [5 n
  1090. Show_Music_Text_Set
    3 O7 p( u7 \. Y% J' }
  1091. LDA Static_Text_Data,X
    2 X! x9 K  E1 ^7 T9 R) J8 r
  1092. STA Data_L
      [  H8 a4 q" y9 _, w
  1093. INX9 a( c  [5 o& a% x; }. o: ^
  1094. LDA Static_Text_Data,X+ s0 S, P# [2 f8 n/ H
  1095. STA Data_H- @& A$ r/ G1 t6 V' ?% m2 ?! @
  1096. INX9 C. A* y: b& B' f. j5 I
  1097. LDY #$008 F; p. k' W0 O" c+ E& r6 k/ L/ ?
  1098. LDA [Data_L],Y
    * B3 n4 u. I. _
  1099. STA Data_Cnt
    & G+ L% \  k: B0 u/ T7 e( D
  1100. DEX
    7 D  \. ?  l+ ]8 r& v
  1101. DEX
    ) Y4 f. S3 D8 X" A
  1102. LDA Static_Text_Pos,X5 {$ S' B; j  B, \" L' k
  1103. STA PPU_ADDRESS
    ' J, v% G  i- G
  1104. INX
    ' j" y- k1 G% A& o  z5 T4 C
  1105. LDA #$20
    ! ~( A' }3 i  `# l/ W
  1106. SEC
    / X/ l, _' q' M5 o. p- `# ^& a% `
  1107. SBC Data_Cnt$ `8 L+ W* j  F1 m7 D$ D6 v, [1 ?
  1108. LSR A
    : ^+ B1 J: ^7 `
  1109. STA Data_Buf7 h" J( _' S4 Q/ J; f6 H+ @5 N
  1110. LDA Static_Text_Pos,X
    6 }  D! z4 E: K! p) k& ^
  1111. AND #$E09 ~3 i* h' M  J3 s, f# q6 w
  1112. CLC
    6 x  C6 G$ U7 ?3 M# w; R
  1113. ADC Data_Buf, |& T' p) c5 `" R
  1114. STA PPU_ADDRESS0 a# k* T, X; R$ O6 n
  1115. INX% y+ b' }- P! M" R5 S
  1116. Show_Music_Text_Set_Write
    ' i) I% k% X4 z' V
  1117. INY
    ) ~5 D& U# C$ z2 g% x9 Y+ c
  1118. LDA [Data_L],Y
    , ?( F# }; x" Y& E; A
  1119. STA PPU_DATA
    6 H8 p; {" ?* l% C! r* ~$ Q
  1120. DEC Data_Cnt5 [7 G$ I) ?1 w2 u* X
  1121. BNE Show_Music_Text_Set_Write
    % J; m' a/ D, {$ a
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos7 R3 v4 _% |0 t9 [0 G
  1123. BCC Show_Music_Text_Set# v2 i* f2 b) n7 j
  1124. RTS
    0 C5 R9 y* R* O. c" w% h

  1125.   T9 G  w( g; R- q4 A6 z4 A9 R
  1126. ;==============================% Q6 }5 U9 d# y# c
  1127. .IF Track_Name_Pos;显示曲目信息
    8 V" M- t. w$ @, t! l# j' b
  1128. Show_Track_Info/ j, N2 e9 d; m) r+ p# j
  1129. INC Show_Track_Name: Q* v- O4 |4 @4 D
  1130. Show_Track_Info_Clear
    0 M/ x5 z8 z. G2 ^5 F
  1131. LDX PPU_Cur7 n$ C& q9 t; B" x, C' j' V- J
  1132. LDA #Mode_Clear
    , q& g. k' S# ?2 }$ ?6 y, Z2 p: ^
  1133. STA PPU_Addr,X' b4 c. ?3 f- v% @7 b# n9 Z
  1134. INX+ N6 c3 M( ?0 }! X

  1135. : V% C% a; g+ N1 c- K9 w2 L! \
  1136. LDA Music_Last$ q( |7 o1 \4 b- _1 z9 t
  1137. JSR Show_Get_Track_Name_Center_Pos% f7 k: H- u5 d) R6 m. p
  1138. Show_Track_Info_Write_Cur
    ) n; _- V+ R/ u+ x; A6 t
  1139. LDA #Mode_CntLine# d8 e, M" ?$ C4 L7 u5 Z6 Z
  1140. STA PPU_Addr,X
    : F  E2 b9 u) o: A7 c
  1141. INX
    ; n6 [2 T$ c3 w; e
  1142. " I! {  z7 M, Y- P# F
  1143. LDA Music_Cur4 W! M; U( y& k) w5 w1 s: \- J
  1144. JSR Show_Get_Track_Name_Center_Pos+ k& ^2 [, C( }
  1145. & S, N. t; J/ d2 [8 q* W
  1146. Show_Track_Info_Write_Cur_Data
    $ p% Y, X  p8 B+ W! ~! |; ]9 D
  1147. INY( N9 F) }4 R0 J/ b
  1148. LDA [Data_L],Y
    ' A4 ?% v: M% k8 i; x
  1149. STA PPU_Addr,X. q2 R+ ]: w4 x% D$ |. r
  1150. INX
    7 m6 W. I: s6 ?- a' ]. C
  1151. DEC Data_Cnt- m* D. l) \" r3 G
  1152. BNE Show_Track_Info_Write_Cur_Data- _6 _, g! M. C" @$ i/ D, g
  1153. Show_Track_Info_End
    ( o5 o8 [) `( D& _1 j
  1154. STX PPU_Cur
    1 [( f- k8 n5 g/ W
  1155. RTS
    * ]; i6 s' y0 V* D. D' \6 V- Y2 Q

  1156. # Z+ z0 b& @9 {
  1157. ;==============================, c4 ~8 \; N  [* o
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    8 Y' k3 M0 |" G8 C2 e7 e% E: U
  1159. ASL A) Y1 o# E3 J$ N
  1160. TAY8 f* f, w' _2 R) g6 E
  1161. LDA Track_Name_Addr,Y$ i( C2 r, o3 k' F+ f+ q$ X
  1162. STA Data_L
    + R, O& Q% ^3 Z2 v3 o- J7 J1 w
  1163. INY) w! Y0 v/ Q1 |" \+ o6 r% b* d1 H6 @
  1164. LDA Track_Name_Addr,Y
    ! p2 |8 {1 ~- e  J
  1165. STA Data_H
    " s) c$ v/ l1 S! L; J: n7 B
  1166. LDY #$006 D; G1 E6 [" ^2 _
  1167. LDA [Data_L],Y
    ! f. v. U% T# F( ^, ?
  1168. STA Data_Cnt
    3 C7 o8 n' Q+ v  t9 X
  1169. LDA #$20
    0 c/ |  j0 Q( p9 i
  1170. SEC/ R6 i$ ?, M- o# M/ P, Y
  1171. SBC Data_Cnt
    . H, W8 V* O2 Q4 O' o3 Y
  1172. LSR A
    " l: v' ~: s) W7 @) ]
  1173. STA Data_Buf
    ( S& p, C5 M) t. t0 z
  1174. LDA #HIGH(Track_Name_Pos); y9 n0 h, |, {6 G3 d
  1175. STA PPU_Addr,X
    / P6 @! d7 j5 r# ~
  1176. INX
    4 W( r% E+ ~. w/ s+ S
  1177. LDA #LOW(Track_Name_Pos)
    + d4 y, R  i, @# R" g0 G: g
  1178. AND #$E0
    ' P" ]! q4 T- B6 }
  1179. CLC
      M/ q/ v1 r7 w" O! M
  1180. ADC Data_Buf. i, c" n% V: L) o/ p- l$ |* X0 @4 ?
  1181. STA PPU_Addr,X5 Q3 `" h/ C3 w5 s" ]; I
  1182. INX+ |2 Z+ @, B6 _" c) U
  1183. LDA Data_Cnt. M. a' _; Q5 O3 p; `$ ^# l
  1184. STA PPU_Addr,X
    - u7 _6 Y& Q( c6 ~3 R
  1185. INX! x' _2 {$ v4 O: p3 A- g
  1186. Show_Get_Pos_Center_End
    8 q! X5 m1 B& a! m3 \
  1187. RTS- |7 t" _" Q. K4 J
  1188. .ENDIF" Z7 G& B: i  D$ N8 @
  1189. . s- B, N" l/ a' U# Y$ F& c
  1190. ;------------------------------
    2 c) Y. I: z+ E5 _( W4 _) \; f
  1191. ;命名表数据
    3 l8 `% V: _5 m! Y- H' F! W1 o& W  Q
  1192. Palette_Attributes
    - V/ j+ U3 G8 ^' V
  1193. .IF SOUND_BAR_SHOW_ENABLE
    0 P9 _. U6 D/ Z
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    $ ?- s$ b. a# E  I' T; ?2 [
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA. Y6 |7 y" K2 `) T/ T
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    4 D5 _! `7 _7 j* d/ Z
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    9 ~: l/ W2 N/ ^4 N) X  H
  1198. .ELSE
      j& _& f& ]$ v; p
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    " x2 O/ E) _! F9 |2 Q: W1 Y6 E
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF3 Q" o  [7 {0 o
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    ( _. ]1 E) N( q
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$553 y4 o5 h+ ]1 [7 @; W, y
  1203. .ENDIF4 `0 p5 x( x! b9 h# X& F2 b7 y
  1204. ; P- N" P0 {  j6 E
  1205. ;------------------------------
    5 }% d  n  V) B1 ?
  1206. ;调色板数据* ~3 O, Q" A* t4 j, ~+ v$ _+ B
  1207. Palette_Data: _0 Q1 E! Z, o  v& H8 z% A7 h
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F& |6 c$ a  k' Z9 ?# Q1 r* C
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F+ J9 i5 v1 D7 z$ Y" Z& P5 Y1 {8 j2 K
  1210. 7 U0 F2 S0 ^+ h* z. ?" o( d
  1211. ;------------------------------1 d+ s, \  M1 v6 i1 a' q* B3 l
  1212. Static_Text_Data* U& |2 u; R0 `
  1213. .WORD Static_Text_Title_Data
    * Z, E( E% t. @% Z
  1214. .WORD Static_Text_Author_Data% q; c  `2 B: V6 j+ Z
  1215. .WORD Static_Text_Date_Data
    + c. s/ s( r& y
  1216. Static_Text_Data_End
    & C$ X" t7 q: F& D  O9 X

  1217. ( H1 y% W) ]$ a& m5 I
  1218. ;------------------------------
    " O* F8 R7 e3 m8 e
  1219. Static_Text_Pos: O6 Y! ~4 k5 c6 c( r  U
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    $ c8 s  v* T2 H. ~  l
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)5 i( C( n( `0 d6 n; R
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
      F  ^- a8 J5 k8 M# t/ J
  1223. Static_Text_Pos_End. S" V6 L7 Q( |' b. a  z
  1224. 4 e1 n2 P# a/ T, p* w+ M8 ^
  1225. ;------------------------------. ]3 f0 C- O4 w' H% Q" ?
  1226. Music_State_Stop
    : s! Y' q- E) z) P
  1227. .IF SOUND_BAR_SHOW_ENABLE
    : B- C0 q6 }# \) Z
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00/ B1 ?! E/ K  b1 a& X- o( X; n
  1229. ELSE
    8 t8 q* X. f: Q, A1 i4 \: D* W4 G
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00+ f; ?% J* B  R9 S/ }, n- R% n
  1231. .ENDIF
    - O- C: P1 ?# {0 p7 \
  1232. Music_State_Play3 @7 }( @3 h, E+ Q/ d$ H
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    / \& S8 i) u1 P9 v8 u' ]
  1234. ) \5 E0 J$ Y: A0 y
  1235. ;------------------------------6 y2 ]/ |: W+ r" G
  1236. Sound_Bar_Text_Data;声音类型文本
    : Z, \+ l; t9 j9 ~1 E  W$ ~
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    ) T0 D# A# h. N# k8 F
  1238. .DB "SQ1-",$FF9 O( G3 X. v3 f; I
  1239. .DB $FE,"SQ2-",$FF
    : M! f) A" O, i/ [9 q% l) r
  1240. .DB $FE,"TRI-",$FF
    / o( s( J1 ]; A2 i, q7 i1 [! u1 h
  1241. .DB $FE,"NOI-",$FF1 n* M: K& I* @: e7 p
  1242. .DB $FE,"DMC-",$FF,$00( Q+ Q6 x. |! q) K+ q9 g: t/ ]
  1243. ) x9 m0 I" n+ J
  1244. .IF Track_Name_Pos
    2 E$ @3 ~$ A# p9 d) `  M
  1245. ;------------------------------+ |6 q0 ~! Q1 l) M+ r, D
  1246. Track_Name_Addr;曲目名地址索引8 {& Z7 p( k9 }( G. S
  1247. .WORD Trackr_01
    ' m( D* L/ o7 u0 _' o" g
  1248. .WORD Trackr_02
    & E2 x7 V, f7 Q7 H  u5 H0 N
  1249. .WORD Trackr_03, }! L' }# O" A1 k' M# h3 O
  1250. .WORD Trackr_043 c1 F0 K0 S! O
  1251. .WORD Trackr_05
    ' C) e2 T( F. L: C+ A
  1252. .WORD Trackr_060 X, _- R$ h* L7 f: C# X
  1253. .WORD Trackr_07' n3 |; k) k6 c% a' v& j% G
  1254. .WORD Trackr_08
    0 A  ~$ J" }  f  |. Q0 s" ?) e9 Z
  1255. .WORD Trackr_09
    , ]) o/ x0 Z% P' g# ^
  1256. .WORD Trackr_10
    % ?$ A) X4 m7 z+ o. @2 [. y
  1257. .WORD Trackr_11
    & J/ Z/ D" K  T" t: s1 [( e
  1258. .WORD Trackr_12, a( e6 r# }- y4 f
  1259. .WORD Trackr_131 n2 u( L& ]) B9 L
  1260. .WORD Trackr_147 P2 |; c! L# ^& s" b) F
  1261. .WORD Trackr_15
    2 @5 ]; B, I! i% P, |$ {
  1262. .WORD Trackr_169 ]- w7 _% P% h  j6 P) P% h, n
  1263. .WORD Trackr_17' ]3 r8 a0 ?1 d, c  q: x
  1264. .WORD Trackr_18
    ) D* r* a+ N" d8 m* B
  1265. .WORD Trackr_19' i) x- x' o' ~3 Q, [" j% i
  1266. .WORD Trackr_20
    ! q  m8 _# {' D- N7 T3 \  f  H. N8 [
  1267. .WORD Trackr_210 X* v7 e; Y' O+ u
  1268. .WORD Trackr_22! R8 L1 ~7 T3 n4 a1 ~0 Z5 M- W
  1269. .WORD Trackr_23
    8 S( C' J, v, t# i, q% z: G" K2 J
  1270. .WORD Trackr_24% F1 }6 `0 b: n6 p, U! {
  1271. .WORD Trackr_25
    ( j/ A, ]; Q6 ]. B* C
  1272. .WORD Trackr_26% r0 r, i( u) W  M* g
  1273. .WORD Trackr_27# c) c7 w( T0 W7 u4 B6 s3 W0 x
  1274. .WORD Trackr_28) _$ r9 [; n' m% a# [, K
  1275. .WORD Trackr_29
    # z# n) V- Z3 H3 |" S  i- U% q3 k
  1276. .WORD Trackr_30
    ( w+ k  c* W' _! _4 F. K; R  d
  1277. .WORD Trackr_31
    2 x, J" f7 x' Z9 Y
  1278. .WORD Trackr_32
    7 f: {" y4 p. H8 V5 r
  1279. .WORD Trackr_33
    + I+ M: S. G- O# t5 e  e' l
  1280. .WORD Trackr_34, Y& f  n6 P+ G7 S! m- V
  1281. .WORD Trackr_35* ^- e; [# v1 K5 s. \  l
  1282. .WORD Trackr_36
    9 w+ C/ b- `& I& s
  1283. .WORD Trackr_37
    2 q3 @' ~( j5 R2 d6 |
  1284. .WORD Trackr_38! [) K7 T. i/ v0 y3 E1 C
  1285. .WORD Trackr_399 @7 ^5 ]' M' v0 o  C7 ]% c
  1286.   g2 c/ X" y/ h. f- M2 z
  1287. ;------------------------------
    , g8 ^: d+ j* h' K6 B% K
  1288. Trackr_Name_Data9 k" s; f$ {& c* T
  1289. Trackr_01 .DB $05,"BGM 1"
    , k, [1 S/ @, z! u
  1290. Trackr_02 .DB $05,"BGM 2"' U7 H$ x# q$ @1 n$ p3 G
  1291. Trackr_03 .DB $05,"BGM 3"
    * g7 ^7 c9 v8 M1 r' s
  1292. Trackr_04 .DB $05,"BGM 4"- T) _' U4 a% S: ?
  1293. Trackr_05 .DB $05,"BGM 5"$ a$ l+ K0 ]. O/ @
  1294. Trackr_06 .DB $05,"BGM 6"# d# O8 w9 p6 D
  1295. Trackr_07 .DB $05,"BGM 7"
    - V# |/ u- d. ?% l" K
  1296. Trackr_08 .DB $05,"GREAT"* @' t6 r  d. S, O
  1297. Trackr_09 .DB $08,"BOSS BOM"
    / g+ X: i8 L" G6 _
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    / P) [$ q' o- k
  1299. Trackr_11 .DB $07,"P CLEAR"$ _9 @8 Y' P3 M7 `' ^5 Q, {: b5 K  ~
  1300. Trackr_12 .DB $07,"A CLEAR") Q* c0 Y, t5 x
  1301. Trackr_13 .DB $04,"OVER"' r. F& X7 c. j4 h6 k) x% b; J  z
  1302. Trackr_14 .DB $06,"ENDING"7 C5 Y& H/ n; Q
  1303. Trackr_15 .DB $04,"SUTA"
    : h, h! z8 O$ v9 \. e; p' V
  1304. Trackr_16 .DB $07,"THUNDER"7 J) P  P( a! R/ \* N& p2 `
  1305. Trackr_17 .DB $04,"SHOT"
    . k& s2 u. a, J. ?8 F
  1306. Trackr_18 .DB $05,"LASER"
      P; W. V1 r' j1 M! {+ G
  1307. Trackr_19 .DB $06,"SPREAD"
    : }1 x& Q, s8 |
  1308. Trackr_20 .DB $04,"FIRE"- F$ M& R$ u# u4 G, S7 D5 V$ n
  1309. Trackr_21 .DB $06,"B SHOT"' u5 W( B+ [- w3 Y! z: G. [( H
  1310. Trackr_22 .DB $08,"T DAMEGE"8 s/ @( n( x0 i8 @
  1311. Trackr_23 .DB $07,"HARETSU"
    5 M+ Z) c* g4 D5 {4 e- U
  1312. Trackr_24 .DB $05,"T OUT"
    0 a) D; D+ q, \
  1313. Trackr_25 .DB $05,"Z OUT"4 `9 e0 ~4 V; W' H
  1314. Trackr_26 .DB $05,"A OUT"
    ; f1 ~4 ^  q' H  [
  1315. Trackr_27 .DB $04,"ROLL"
    4 p3 v% L; y3 i+ K1 F
  1316. Trackr_28 .DB $06,"APPEAR"" Z9 U& {1 Q2 C' F
  1317. Trackr_29 .DB $05,"POWER"' {; l6 B" a' T0 z  g
  1318. Trackr_30 .DB $07,"BOKK BK"
    ' f8 v% J# L4 k; l) A' A+ V
  1319. Trackr_31 .DB $08,"BAKUHA 1"1 r/ i& `  U' @
  1320. Trackr_32 .DB $08,"BAKUHA 2"8 l  z( Y& E0 h# R1 S& U
  1321. Trackr_33 .DB $05,"ARUKU", i7 V- U4 t5 n% z, V
  1322. Trackr_34 .DB $06,"JIWARE"
    ' l* Y- @0 w* J' p3 U! c7 p
  1323. Trackr_35 .DB $05,"SILEN") E2 I5 O: Q4 y$ s8 K, F
  1324. Trackr_36 .DB $05,"P 1UP"& {* V4 V+ D0 v' f, ]
  1325. Trackr_37 .DB $05,"P OUT"
    ; m+ G; P4 m2 R! w4 `
  1326. Trackr_38 .DB $05,"B OUT"
      g) p, l2 T+ C+ v! p8 _3 X0 c) w
  1327. Trackr_39 .DB $05,"PAUSE"
    : u* N  C4 x  I4 t$ ]6 @
  1328. 8 [- e9 H; a, Y: _' @. V5 I5 Q7 |0 C
  1329. .ENDIF
    2 ~* I4 E, x+ e# G$ m  d0 h% b
  1330. ' Q, |5 A# {$ ^! G2 i5 `
  1331. ;------------------------------
    ' E4 o3 G% V2 d9 ?
  1332. Static_Text_Title_Data;静态文本数据$ S  _! N1 p5 S. }
  1333. .DB 12! p) ~+ [8 l- q$ }0 @. X! B
  1334. .DB "SUPER CONTRA"
    0 T. I9 E' T1 n
  1335. Static_Text_Author_Data
    . l* f) o# L, S& V3 w3 s
  1336. .DB 23% V# l( J: c5 t, C8 R4 ~# v- K4 d; {
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    ; l0 f6 ~: g" u9 k) Z; J
  1338. Static_Text_Date_Data# O* v' l" h* Y
  1339. .DB 10
    ' b3 ?7 s% p$ t$ O( y7 Q& i+ C  e
  1340. .DB "2023.07.11"
      ]" d6 [  x2 d, V4 D1 _

  1341. 9 M; w5 Y* D! W8 E" P3 H# x
  1342. .BANK RESET_BANK & BANK_DATA_MASK( w/ M4 w: \& D, Q
  1343. .ORG RESET_ADDR
    , K' z3 e# }, l

  1344. & L4 ?  a0 j# w: y! b* d

  1345. & W" ?2 o& r6 m* ?$ f1 \
  1346. ;==================================================
    6 \  m& |9 G) @- n* Y8 f
  1347. ;切到主程序bank& }& d5 g1 a5 q6 w- o3 X2 Z
  1348. SwitchMainBank
    2 ]) u# [7 [2 x8 {% S, \0 I
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK
    ( v: w4 [3 [+ [# l. B$ t
  1350. JSR SwitchBank8000
    8 y4 c; o  v* f0 f  G- x
  1351. RTS
    3 j! {! a6 N5 F8 L

  1352. ( T: C  n4 p- |" c: p3 \
  1353. ;==================================================
    7 o! _' |6 x2 x$ y# y( x
  1354. SwitchBank8000;切换bank到8000-9FFF  U! |& l! C; E. }- M7 J$ I0 q
  1355. PHA% s  E" D9 `% s3 U# p$ K% i
  1356. LDA #$06. v! `+ g2 ^6 J7 r
  1357. STA MMC3_BANK_CTRL
    6 X) Q7 ?7 m+ r& n% y
  1358. PLA/ Q0 c, q; h; _" C+ m, o
  1359. STA MMC3_BANK_DATA$ U$ Y" M" t" S* f" E' K9 Y
  1360. RTS
    5 Q* Q8 a/ w+ V* A6 W$ K
  1361. ( p* J3 R  d; r# N/ S9 _
  1362. ;==================================================
    , b1 `' c+ o& C8 j5 G7 c0 V
  1363. SwitchBankA000;切换bank到A000-BFFF
    8 I8 Q5 X( F) q3 W
  1364. PHA! H% _% I3 @- C  p3 E, {6 W
  1365. LDA #$07- ]2 b$ k1 K6 C
  1366. STA MMC3_BANK_CTRL! |9 h. r* ]; a2 {% E  W+ ~, d
  1367. PLA
    ; M" z* b$ w& g9 A
  1368. STA MMC3_BANK_DATA2 ~( `* k5 m5 U; m4 {3 n# _
  1369. RTS  m6 a/ o( t; A( _
  1370. 6 ~4 t; j) a7 k/ w5 H& r4 G# Y
  1371. ;==================================================
    . B6 U& N, Y- M4 l
  1372. Sund_Bank_Init;音乐bamk初始化
    , D, {- q) X1 b# z, G9 l1 s
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK( s# X3 j& A( z+ v) j
  1374. STA Music_Bank_80005 A2 d8 Z9 `6 }: ^
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    - h2 ?) k! {/ Z+ ]+ {. U# Q! |
  1376. STA Music_Bank_A000( n; ^% c4 P- r# l0 |
  1377. RTS
    - f. U) ^# i( A$ K) E* C

  1378. & @2 L$ \4 f9 E0 \: e1 u- v- Q+ B* Y
  1379. ;==================================================% R: {4 p8 o' w* t
  1380. Sund_Bank_Set;切换音乐bank
    9 X8 E; |4 Z- F" f' ]5 R+ [& g6 o
  1381. LDA Music_Bank_8000* [6 v# N1 c4 W, b; v# u
  1382. JSR SwitchBank8000
    5 S  j: M1 ?- B. d- ?' N7 Y
  1383. LDA Music_Bank_A000% j8 ~; l9 P0 L. ~  o
  1384. JSR SwitchBankA000
    : C9 {2 ?3 s) }" m" M3 o
  1385. RTS0 q, u& n& ]" \+ V3 S

  1386. ( ^. C  M- d4 [1 \4 m/ [
  1387. ;==================================================' [' C* a3 ?8 `) Z
  1388. Sound_Init;音乐初始化
    8 x% h- Y) K+ Y, K8 c9 V
  1389. PHA
    - ?! I, N% p3 ?2 T
  1390. JSR Sund_Bank_Set
    + ]: G/ M  a* }( g% q  l* _
  1391. PLA* e$ Z" n# l6 ?" I
  1392. JSR Music_Init_Addr
    * i5 k$ F/ t7 h; s- R- N6 S( r# k7 c
  1393. JSR SwitchMainBank5 V$ f% n' U- J5 w
  1394. ) k& W) }0 K) Z+ M* Q+ j+ ^
  1395. JSR Music_Bar_ReSet+ n; [, t! ~6 p" T3 f
  1396. JSR Time_ReSet$ W8 P3 K; ?  e2 q0 s: g. _9 H* S
  1397. LDA #$00, X3 _, O- Y+ M. W% y- ^6 w) {
  1398. STA Music_State
    % L4 c, r2 @3 \
  1399. JSR Music_Stata_Show
    + T- ?/ g* T6 H8 I; ^( D# y2 z
  1400. .IF Track_Name_Pos
    3 r/ C* U' E% i( n
  1401. JSR Show_Track_Info
    6 a1 M1 f$ k+ W+ R+ h
  1402. .ENDIF  B8 k, N' i$ H$ F
  1403. " z5 v/ R. Q- D8 H# v
  1404. RTS  q) L; t) c5 O) Q4 d& ~

  1405. , r6 v' h3 J7 \) k3 m
  1406. ;==================================================; J1 O3 [. H5 s# P- \/ `
  1407. Sound_Play;音乐播放
    & f5 Q' ^# L1 N1 Q( i
  1408. PHA- \' Z$ w' _. m, ?
  1409. JSR Sund_Bank_Set9 j7 N$ n$ P  v7 L
  1410. PLA# u+ m8 ~' C. e3 G$ l- U7 g
  1411. LDA Music_State" S5 L0 F, N0 v& X( t0 Z! g* q
  1412. BNE Sound_Play_End
    + e8 F* d7 d# G- ^& |
  1413. JSR Music_Play_Addr
    $ C( z/ G# c! q: E" p6 h5 F
  1414. Sound_Play_End
    6 g7 t. E* [5 A; R  k
  1415. JSR SwitchMainBank3 U- M: X, s" s8 O$ C" o
  1416. RTS& w) X! h2 a! b5 G& O
  1417. $ ^, K: G  z# m7 H) W6 |
  1418. ;==================================================
    $ k* h( Z4 f/ c( N5 X" l  Y
  1419. .IF Music_Reset_Addr3 d- Z* P0 o- K2 f2 B" j" t' r: V
  1420. Sound_Reset;音乐重设(如果有的话)
    * ~- n, @' |( g* M* \4 v6 y# x
  1421. JSR Sund_Bank_Set& z# A: p0 u* y2 I# E' u. w
  1422. JSR Music_Reset_Addr
    / m; S2 C5 X, C4 r' `
  1423. JSR SwitchMainBank  _' U9 u' D, c- h' G
  1424. RTS
    * M$ h; Y2 Q; ~) T8 k/ ~% O
  1425. .ENDIF" n' w6 X' [' m4 a; W7 n
  1426. # f$ D* l) v7 ]* W
  1427. ;==================================================3 P3 Q! C* I1 `7 C8 Y
  1428. MainLoop;死循环
    # |7 g. Y& o! q0 S+ E& a, F- m* M
  1429. JMP MainLoop
    2 {) Y: a* r% @" t
  1430. 1 h7 u# T; I7 k/ Q$ ?
  1431. ;==================================================: M6 E( H* U2 c; R/ N' ~2 F
  1432. NmiProgram;Nmi中断处理
      s9 e) @! A8 s5 n$ x7 {  S
  1433. PHA+ J: o* T# j/ }2 U& S
  1434. TXA
    ) u* a; T1 N5 i! j
  1435. PHA
    - G- }/ e  Z  {9 o/ S! F# c
  1436. TYA
    3 L% ~/ ^0 h+ P- C# p  z4 j" A
  1437. PHA
    6 C2 I2 ^4 z3 [# K  z

  1438. + V8 |- `4 V0 A+ F+ K3 f8 p
  1439. LDA PPU_STATUS
    6 ]5 x% h2 u+ j
  1440. LDA #$00
    & ]6 C) \3 ~/ ], `& ^
  1441. STA PPU_CTRL' O1 }' z4 V  K8 n; U7 C7 @

  1442. - D4 z  P/ c$ }7 Q
  1443. ;切换主程序bank
    . Z2 e% ]5 M+ b
  1444. JSR SwitchMainBank
    ! e7 _" a! q0 T( r& h4 @

  1445. $ h" u; [, v. l  T
  1446. ;NMI处理1 x, M" m! s: T- L2 _: G
  1447. JSR NmiProgramProcess
    % y$ F- j. V! S8 K) ?0 `
  1448. * O) I5 @1 Y* t( b0 ?1 y" E
  1449. Nmi_Proc_End
    1 S3 p! L6 v/ j. H3 E
  1450. PLA. Q3 Y8 @: }4 I: @
  1451. TAY6 d% a" \! W% J( [
  1452. PLA
    9 b# c- Q8 I" h  ^
  1453. TAX
    ! @6 C& S" ~0 I& J1 p) s: d
  1454. PLA. z0 l. z3 R% q) P& V- Q
  1455. 5 L, W2 c1 K5 j4 \: I/ f% r/ i4 O, l* g
  1456. RTI& T6 O' t" v, I

  1457. & J0 v4 P+ M. i
  1458. ;==================================================5 }0 ^2 {+ @' Z, @
  1459. ResetProgram;重置中断处理
    . y% T1 a$ q' i4 `& W
  1460. SEI
    * U8 d- F: j3 R( B
  1461. CLD
    2 p' M; ]" g  S. x( d$ r
  1462. LDA #$005 ~+ {( L( {  v  N3 Q- w
  1463. STA PPU_CTRL
    6 ~7 g) p2 r5 i% x) C! E
  1464. STA PPU_MASK3 s" j$ M$ h9 b7 F

  1465. 4 T1 v. P" v2 I
  1466. JSR SwitchMainBank
    ( B$ M( O3 [, P: |) b
  1467. JMP ProgramBegin
    3 R% D) p3 q; O

  1468.   [. ^) V$ D! ]" r0 U
  1469. ;==================================================; v/ c+ }0 W+ {. O. [
  1470. IrqProgram;Irq中断处理/ z( J/ j: G) L, ?5 g6 B3 L! v8 m
  1471. RTI- k$ s( w: W7 E3 l- h# ?2 d/ ?

  1472. / l+ I" P: o* i
  1473. .IF SOUND_BAR_SHOW_ENABLE
    / j% j8 B1 T* r$ g* R0 r: ?  }
  1474. .ORG $FF80
    ( z! K  x7 F2 {: b: j, o/ V
  1475. STA $4000,X5 I  D, V1 d3 M, }1 J
  1476. STA Sound_Bar + $00,X# _* @6 u0 v$ U8 M6 R' D' k  A/ Z
  1477. RTS- l" C. W  _" X# X- i

  1478. , \8 A" H0 M: D
  1479. .ORG $FF881 Z% U* r( s3 c! u# d, U' L
  1480. STA $4000,Y
    / n, y9 O0 K& m0 ~2 o
  1481. STA Sound_Bar + $00,Y, p! U) h1 n8 f. `
  1482. RTS
    / ~( ?! s" \+ i$ k, p
  1483. ' V; j, E% \8 d
  1484. .ORG $FF90
    % `' v# X# I+ G; ?
  1485. STA $4004,X# Y# m1 B) V# u7 c  p
  1486. STA Sound_Bar + $04,X, B7 _3 D1 m* M: t
  1487. RTS& x0 E! S1 ^& w
  1488. 1 a: G* N8 Q7 X
  1489. .ORG $FF98( q. e( b6 s$ P, k4 `) A; O" {
  1490. STA $4004,Y
    1 E: g; @2 V5 \
  1491. STA Sound_Bar + $04,Y
    ) p. r5 N: ?, n2 `4 U' O
  1492. RTS3 H' n- \* j1 y7 g/ C/ G
  1493. . R  k" U7 P4 o3 V
  1494. .ORG $FFA02 r% d& ]" v8 v# z3 l; R
  1495. STA $4008,X# o8 x; L! e. E2 R( A- f
  1496. STA Sound_Bar + $08,X
    2 O% f( b0 A% r/ x; |* F
  1497. RTS
    , P: a2 Z; O3 |

  1498. & O  B+ x8 F4 L( K; r
  1499. .ORG $FFA8
    : I: D  w# [' k
  1500. STA $4008,Y
    $ K& l8 D1 r# I: }+ `
  1501. STA Sound_Bar + $08,Y
    7 c' r8 F- F; S9 Z( V0 H
  1502. RTS" q1 T3 d! T+ f9 `- U+ t

  1503. 5 l- ~, ^& p  q8 `- s7 G
  1504. .ORG $FFB0
    " j% S3 _: T8 P. H
  1505. STA $400C,X; I% j+ A2 f: l! _0 `
  1506. STA Sound_Bar + $0C,X
    . i( n0 P+ ?0 q+ y0 ^0 g0 Q
  1507. RTS8 O0 O) `( k/ l. j7 |: N$ P
  1508. ' ^5 u0 Y7 b* ^! R$ X
  1509. .ORG $FFB8
    * a' C. d0 B, D9 s
  1510. STA $400C,Y
    5 G+ S" |+ z1 D8 U2 l( {& I
  1511. STA Sound_Bar + $0C,Y
    * v9 n1 h+ |* s
  1512. RTS
    9 J# m' j) W$ j8 A7 C- `

  1513. * |+ C7 h3 a2 A
  1514. .ORG $FFC0. b3 O. i+ n; ^9 t( _! ]) }
  1515. STA $4000
    6 X" e5 d+ ?, F* r' c
  1516. STA Sound_Bar + $00) a1 w4 u6 L/ s9 I- g
  1517. RTS
    ( y( H# C' o4 I  O

  1518. 6 D) _- K: z. D  \: O+ x( D# k
  1519. .ORG $FFC8
    . x9 u2 [" M/ o9 w- H
  1520. STA $4004, d! _/ P2 N/ c1 P0 ]. \
  1521. STA Sound_Bar + $04
    & k# f5 F9 z; ^0 G: Q
  1522. RTS
    : I6 S) }3 V7 @- M( s  V
  1523. ! Q* d& y/ W. [* z  c
  1524. .ORG $FFD0
    : |2 z% n  X" ?/ m  ?1 F% m
  1525. STA $4008
    8 n1 d$ j* y' p4 G5 x! S, P! g
  1526. STA Sound_Bar + $088 C5 K$ p# w+ L+ R% o
  1527. RTS( l. q7 X5 t+ f9 V/ c- s7 O

  1528. - @' `1 O  \, }. n% N  l1 A
  1529. .ORG $FFD81 B; D- c; _" l) s
  1530. STA $400C4 d! B# ~1 R1 o3 V$ S  T5 q: ~
  1531. STA Sound_Bar + $0C
    ! k+ q% u+ f) Q9 X4 [" P" `
  1532. RTS
    1 M% j, j* L, k0 I# h- l
  1533. $ o- z8 J: a& ?
  1534. .ENDIF! E  n1 m7 e2 F

  1535. 9 y% Z5 C! r9 i
  1536. .ORG $FFFA; S' G* h! g- E' v" p& P- V
  1537. .WORD NmiProgram# h0 l8 Z/ Q: k7 T
  1538. .WORD ResetProgram4 o) O4 i, o% r( _) I
  1539. .WORD IrqProgram
复制代码

9 r# q# `0 t* L. r: y2 y# {" d7 ^3 ]2 [% y0 t( G) t9 j- Z7 z
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1192 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3177 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 12:27 , Processed in 1.191407 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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