EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 0 M: n0 T5 W3 Y# B7 f# Y8 e
4 }9 W- \0 l- f1 o
1.魂斗罗; K4 t+ {+ l5 R1 S# p7 {# E
2.超级魂斗罗# l  M1 [- z: [, {9 C* T
3.赤影战士
; U, N8 F1 G9 Z9 \4.忍者龙剑传25 O3 z2 f; }( L4 r$ a0 C# a8 o# Y
  M2 N. ]6 U2 [( i0 j

# Z# L6 S, C& S3 Z$ B( Y) }7 s1 h8 |9 m% J8 r1 w

+ @% C$ I4 q1 B3 H$ ^源码:0 k+ `" F' r& u$ ]! ]  L
  1. ;[FC音乐][播放器模板]
      h% m% |2 v- W
  2. ;FlameCyclone 20230710
    + D! }! `. t# g% ]' G5 |

  3. ) e7 b$ R' q* _
  4. ;文件头
    # o) \5 g  e) F2 M8 U. U) b% N) s
  5. ;======================================================================
    * W0 z8 d/ D% |
  6. .INESPRG 4                                              ;16KB PRG 数量8 ^, [1 T# l2 c) c
  7. .INESCHR 0                                               ;8KB CHR 数量
    , w# X7 B; b; I: F# t% R
  8. .INESMAP 4                                                   ;mapper 4) m3 i$ E4 I1 ]' ]
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直9 N7 R3 {' r/ e

  10. " K; @# Z5 a  q
  11. ;==================================================
    # s) W) V1 r. [4 X
  12. SOUND_BAR_SHOW_ENABLE       = 1
    / p7 T0 [; t5 f2 e
  13. ;==================================================
    8 D+ F- i1 y% V6 b% ]
  14. BANK_DATA_MASK              = $070 `  v" O6 K2 g
  15. ;==================================================
    + ]+ Q- S+ @7 T# q4 [( H1 Q7 p
  16. SOUND_DATA_BANK_0           = $00
    - x. y/ a9 d/ \, i
  17. SOUND_DATA_BANK_1           = $01
      ^* U  @: G: d$ b! q' s  r
  18. SOUND_DATA_BANK_2           = $02
    . u( t' [) |" M) @0 j! k0 _3 T
  19. SOUND_DATA_BANK_C000        = $069 g  ^* v% J9 V5 p. z- {- X. Q+ J/ ]+ ]& Q
  20. 7 B! q5 _& l6 c
  21. ;-------------------------------------------------) f1 P7 z7 h+ V. B! u$ w- z8 G
  22. CHR_DATA_BANK               = $045 J% k- n3 e" e' Z6 K3 A1 ]: ?
  23. CHR_DATA_ADDR               = $A000
    . d( J2 ?5 `( o: x
  24. ;-------------------------------------------------
    0 Q2 q% K/ w/ v8 L+ G/ W
  25. PROGRAM_BANK                = $05
    ) n5 ]- L6 p% l
  26. PROGRAM_ADDR                = $8000: n3 _) d& I) |* |: T
  27. ;-------------------------------------------------
    2 i7 ?" @3 Y2 b  m& t8 Y
  28. RESET_BANK                  = $073 z2 t9 i- {- K2 y% ?$ w  D6 I
  29. RESET_ADDR                  = $FE00
    7 |; U8 T6 [3 [$ P2 }6 z! c
  30. ;==================================================
    ; i6 N' q7 @& }3 H5 @) t: n
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    1 U0 H) f* U( \
  32. Music_Play_Addr             = $813C ;音乐播放地址
    8 N3 z) K. U/ z8 Q4 [/ x) N
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    $ F/ W$ [% [8 O4 W- |
  34. ;==================================================& n6 A/ A2 Q, \& H/ e( l2 Y
  35. Music_Song_Total            = 039  ;全部曲目总数9 k! Y. @6 A( D1 E- z- P+ T
  36. Music_Start_Song            = 007  ;初始播放曲目
      T1 T. B" l7 `6 W; i5 _
  37. ;==================================================
    ' T7 \" g( T, I7 i

  38. + Q: U( n  d" K% h" j" e) R5 N
  39. ;==================================================6 r4 q- l6 H& I# o3 @/ G
  40. Title_Text_Pos      = $210D ;标题文本位置
    , b. O. ?# N- i% ]
  41. Author_Info_Pos     = $2284 ;作者文本位置
    3 t# {* }7 ]) x/ `
  42. Date_Info_Pos       = $22CB ;日期文本位置# a  C& h9 d) l' z2 n& a* g- R6 q
  43. ;------------------------------7 H. w  e% t9 r( X% ?- U/ h
  44. ;------------------------------& U3 P4 {8 }1 y5 Z
  45. .IF SOUND_BAR_SHOW_ENABLE
    9 w4 i+ H# |! o! W$ K( n
  46. Play_Index_Pos      = $21B3 ;当前曲目位置$ _3 ^, L' G* s/ z" {
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    ! x/ j# \& R/ m7 a) v% i' T
  48. Play_State_Pos      = $2233 ;播放状态位置! L, `" M  ~4 M2 Z. a& z
  49. .ELSE1 q4 @3 H/ z3 @& e9 `& y
  50. 1 {' m3 e) y' [$ w+ m/ I
  51. .IF Music_Song_Total > 99
    2 D" e5 Q$ A0 m, ~! a
  52. Play_Index_Pos      = $21AC ;当前曲目位置
    9 `  u# [* J; v
  53. .ELSE: ]- q" R5 U& d" x) G

  54. . D8 G# u  o% E1 @$ t3 o& Y5 P1 w' ~
  55. .IF Music_Song_Total > 96 t0 r( t9 |7 q
  56. Play_Index_Pos      = $21AD ;当前曲目位置: |3 D/ f# h2 G  O4 _9 H; B
  57. .ELSE
    . J# H$ o! p9 D$ g5 T( s
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    3 w6 g$ |! N, Z  l5 n
  59. .ENDIF
    / j0 A( W' i% A8 W7 l
  60. ! h7 f5 K) j1 r# k+ \: H" Y4 [- O
  61. .ENDIF0 \- r) v# u" p6 p
  62. 6 j7 z  E+ Z0 n, b
  63. ! C# t# N! M: q+ W% }. U! k
  64. Play_Time_Pos       = $21EC ;播放时间位置* u! P) w3 U, z/ K; @1 v
  65. Play_State_Pos      = $222C ;播放状态位置( C9 J% D$ V0 r8 s  g
  66. .ENDIF
    " a  [) r2 b7 l4 S( U( F
  67. ;------------------------------
    ! [5 H% M6 C5 e6 }, f
  68. Track_Name_Pos      = $216B ;曲目文本位置& h! L- h$ t- \$ W% z) Z& \! k
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    # L0 n- H! S! o$ `2 x) {
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ; ~4 i7 O. A! q3 p$ D( c' `$ r; }
  71. ;==================================================
    $ l  q8 I8 A% M' L9 _
  72. Scroll_X = $00
    & L4 e1 u* s3 G- B& U
  73. Scroll_Y = $06
    0 u* m" t1 j2 m+ K* k3 \' S
  74. ;==================================================
    5 V$ g& Q7 q; t6 h* }$ m
  75. RAM_Cln_1       = $01000 k1 U% r( \8 v) ]
  76. RAM_Cln_1_Size  = $80: e6 u4 A' u: u' \  ?) s
  77. RAM_Cln_2       = $00E06 `8 P$ {1 F4 ]! `: L( ~
  78. RAM_Cln_2_Size  = $20
    / P2 ]  P/ V0 g
  79. RAM_Cln_3       = $00E07 _: [( `- F1 f: |7 q: [
  80. RAM_Cln_3_Size  = $20% C0 D' j% u" W: ~

  81. & I2 d( w6 p6 @- }
  82. ;==================================================- {; Z5 b4 ]5 W" N
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器
    : d! z1 F' S& n3 O2 a7 `# V4 I1 e
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    , E/ ?1 R8 r- p4 p: Z/ R3 a, d
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位% Z$ M" [3 R3 J2 }5 G- n
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1+ Z4 s2 w, p- A3 _7 Y- ~
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    6 I/ y# Q; ?) i! A
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    + s! Y) w7 Z) M) S* v
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ! b& D) a5 D- O
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 ( W$ s" [$ R, Z
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
    & U' h- n, J8 ?( O
  92. APU_STATUS              =   $4015   ;声音通道切换
    , b1 ]  w' e3 E2 h' F
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    ) Z- t& W- V8 C9 p
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    . s6 U- W  W& Z, a# f" V
  95. ;==================================================
    / }. [3 s8 Z# K9 r3 |
  96. MMC3_BANK_CTRL          =   $8000
    4 S$ `/ _3 |: ?
  97. MMC3_BANK_DATA          =   $8001# k* `; ^. d- a, w: H
  98. MMC3_MIRRORING          =   $A000: Q! U7 ?9 Q" W8 G
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    " H& I- v$ }( |" S& q4 Y
  100. MMC3_IRQ_LATCH          =   $C0002 ]2 B+ _0 L9 \2 S: U
  101. MMC3_IRQ_RELOAD         =   $C0010 G% \/ c. r/ f9 ^6 T9 K7 @! R
  102. MMC3_IRQ_DISABLE        =   $E000
    ' C$ b( x4 {. o4 M
  103. MMC3_IRQ_ENABLE         =   $E001
    1 X( L6 X" z1 U7 P) y* U

  104. ' e  `( w& s8 \/ Q- \4 c& ~
  105. ;音乐数据块
    $ H; j; l/ Q5 o. }8 s# t# ]

  106. % A: J' o3 v, U$ C& h
  107. ;======================================================================
    3 G& M2 y2 h6 ~
  108. .IF SOUND_BAR_SHOW_ENABLE
    " @* @6 J" ^6 m* p( X
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK& O: o% g/ T! o4 ^
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    , W2 l  F/ F+ Z) A

  111. 5 t  ]6 C6 I4 w1 q" E* ?
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    ) v: p" D8 A- y
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    - @$ Q4 ~9 x) h. u6 i% g: s4 B
  114. 4 e/ _1 Q; Q5 R- Z1 e2 |' t! c
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    . v1 w0 a1 z+ b2 R% `0 U( P
  116. .INCBIN "sound_bank_bar/music_data_2.bank"2 n) Y7 c2 e7 _! f0 U  |

  117. 6 R2 v* S* z, q6 ]2 q7 d
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK: s$ ~0 B3 ?2 c' X4 u
  119. .INCBIN "sound_bank_bar/music_data_3.bank") p# P( R0 L3 E$ ]+ c
  120. 0 p$ Q' |5 h9 P6 H1 W4 Y6 }
  121. .ELSE+ S  n6 G& c7 ]* q
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    3 f6 P5 L, T( O! A! x0 b
  123. .INCBIN "sound_bank/music_data_0.bank"% C" S1 c9 m: y

  124. % I$ s. ^8 z, i2 f
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK' p& z4 \+ G: K! A
  126. .INCBIN "sound_bank/music_data_1.bank"
    # \) i! k6 n. v2 g, i

  127. 6 g" l* v- R2 Z  p$ s1 v
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK' H$ A' o9 J/ U/ s% |8 ^
  129. .INCBIN "sound_bank/music_data_2.bank"7 ?' B" T4 F( Y0 q2 @" O

  130. 1 w/ e; s: ~. H& Q4 b
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK" U5 _" e. l7 ]8 s0 C
  132. .INCBIN "sound_bank/music_data_3.bank"
    1 c+ Z2 S' p" p2 N2 m% G& Z. o5 B
  133. .ENDIF
    9 T( R! E, E! c& t+ ^
  134. ) }3 ~2 Q# q1 P( f% _) G4 c
  135. ;CHR图形数据
    3 W2 F6 u& G! S* x, i
  136. ;======================================================================
    * R0 A3 G7 Z: v8 v" A
  137. .BANK CHR_DATA_BANK
    # {0 n- N, a+ ]
  138. .INCBIN "chr_bank/chr_data.chr"- |2 V, T' V# n, b( j" N
  139. 4 ?3 k' i8 D; F) E2 [1 Z) @5 U! k+ Q$ P
  140. ;==================================================5 V6 E5 F6 c: f2 i: C' u  [7 H4 [. _! ~
  141. PPU_Addr        = $03003 P5 z( c! m% a. K. X7 U
  142. Palette_Addr    = $03C0$ L6 J% |( r( ]
  143. Sound_Bar       = PPU_Addr+$E0
    / c0 d3 K3 n" o
  144. ;==================================================3 I) K9 I/ l" f: M" {/ s. E
  145. Palette_Update_Addr     = Palette_Addr+$0D$ j4 Q( S, l' J1 f0 ^
  146. Palette_Update_Max      = $2C5 ~" ]3 D/ B! i3 q' T- G
  147. Palette_Update_Min      = $211 p1 k8 r* y7 o* ~, K  s
  148. Palette_Update_Interval = 60
    7 v% U1 ~* \- Q& K4 Y) J
  149. ;==================================================' {( ^2 i4 m8 F8 R& k
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    " G( h5 x. Q2 [
  151. Screen_State        = Sound_Bar_Cnt+$01
    0 v3 l9 R4 |& q- @% t9 P9 Q0 u
  152. PPU_Cur             = Sound_Bar_Cnt+$02" k7 i+ L( P$ v& [
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03' u4 ]( i8 j! T+ g5 C4 D1 i* F$ O
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04
    ( o6 e" c' z! p
  155. ;==================================================
    2 L( j7 w$ |" T# Z6 ~9 c6 s
  156. Data_L              = $70
    ( |3 }$ g5 _- ?9 v2 ~+ G2 g* a4 D
  157. Data_H              = Data_L + $019 L+ P* L/ x3 \0 r3 W5 y1 x
  158. Data_Cnt            = Data_L + $029 u8 Y4 k; o9 _% V8 ~
  159. Data_Buf            = Data_L + $031 t: V; u# [+ g
  160. Time_Wait_Cnt       = Data_L + $04
    $ l  \& X/ {! M& A
  161. Palette_Wait_Cnt    = Data_L + $05
      a2 ^4 _% l, |
  162. Palette_Update_Flag = Data_L + $06; o/ N" ~# i" {) _- y6 d( J
  163. Show_Track_Name     = Data_L + $07* C; G& p8 c4 ~8 B
  164. ;==================================================
    2 R# P: p4 G6 n
  165. Key_Keep            = Show_Track_Name + 1
    1 T0 ^" M  `+ S% s1 V' R
  166. Key_Once            = Key_Keep+$01
    $ D; U& G# u2 g) ]: p0 U+ h! m7 Y
  167. Key_Kemp            = Key_Keep+$02; N2 }, I+ T; v3 i5 \
  168. Key_Temp            = Key_Keep+$03" A9 R( q7 H) O+ x0 Q- S3 J
  169. Key_Getv            = Key_Keep+$04
    1 o4 }" J2 b4 E$ m# K( X+ w" f
  170. ;==================================================
    1 }, s3 y4 o0 x6 w# a
  171. Music_Cur           = Key_Getv+$01
    ; h# v/ I1 N6 ^' N1 E
  172. Music_Last          = Music_Cur+$01, f4 L. S6 o1 Y% t0 e
  173. Music_State         = Music_Cur+$028 I' C$ V3 z% u8 F  ]' V/ \7 @
  174. ;==================================================% c3 }+ x$ E4 H( H0 a' h9 ^
  175. HEX_Data            = Music_State+$01
    + p) _! ]% K# h* T
  176. DEC_H               = HEX_Data+$01
    * f. I. X- `% C* s" }! o& b
  177. DEC_T               = HEX_Data+$02
    1 i: {0 y3 {! y" C5 Q: {
  178. DEC_L               = HEX_Data+$036 [& U) B/ Y" P
  179. ;==================================================/ f: Q2 {2 u  i$ m, g# J! a. N
  180. Time_S              = DEC_L+$01
    $ P/ ^6 Q6 `! K
  181. Time_M              = Time_S+$01
    8 M; P5 {3 g8 x/ E+ @* D0 M
  182. Time_H              = Time_S+$02& W4 o1 I' T% R2 D3 G3 E# [
  183. Time_Cnt            = Time_S+$03
    5 Y! F2 @! T: h: W  J+ c
  184. ( J" ?3 D9 h# ~8 `0 M0 S9 x
  185. ;==================================================
    " L% W& c% Q, |- k3 D, C2 P5 ^& X4 n
  186. Music_Bank_8000 = Time_Cnt + 1
    1 g& X, J8 R+ u& t( V& @! Q
  187. Music_Bank_A000 = Music_Bank_8000 + 1& j2 W! g: O: n$ v
  188. ;==================================================3 Q2 O) K0 W, Z; L: h
  189. 5 P! f$ Y  c9 p* B! o5 i) w
  190. ;======================================================================
    0 M8 `9 _  I# J. P7 ]+ m
  191. .BANK PROGRAM_BANK6 {- s$ @2 p! N& _3 |
  192. .ORG PROGRAM_ADDR
    & T" o4 J( e$ m5 E6 \6 U8 T' f4 J
  193. ! E) c: E! z1 q6 J- Z
  194. ;==================================================! s( j  ?2 s5 D  M6 g3 |* c
  195. NmiProgramProcess;NMI中断程序处理% F( \" M$ T5 m* v
  196. ;处理PPU图像
    + l2 }& T# m' I! J" L! b& N. j
  197. JSR PPU_Proc
    2 e3 @) I0 c* ^  l# u) ?
  198. ' u! W: T# p: m. n+ b
  199. ;启用NMI中断
    / G1 t( L" `' F( I9 W+ a
  200. LDA #$80
    8 Q7 Y# ]( }4 s: u, B8 ]$ V& p8 Q
  201. STA PPU_CTRL
    * p. k% q& F' {

  202. ) q# L% X7 T, g+ M) b2 H8 B
  203. ;更新调色板3 k+ G; S$ t1 i2 S8 x. ?' {
  204. JSR Update_Palette_Data; s2 ]5 a# r- V8 m5 b5 j: t( e
  205. . r2 p( D+ r* v& `
  206. ;显示时间(缓冲)4 @& K- X! t/ f, R7 \. s! e
  207. JSR Time_Show
    , \: k) E9 Y2 F: l
  208. 3 W$ K" n$ T. v# n4 C
  209. ;播放计时9 T: f1 H& g% \- K/ C2 Q5 [& |
  210. JSR Time_Count; g7 K9 T( I  Z( f6 d

  211. 8 R8 S! |1 R% r* Q/ X, X0 t3 C
  212. ;播放声音/ J& b" e# w0 R
  213. JSR Sound_Play
    3 l" E% w! v# W  t8 Y
  214. 3 v4 K6 j' n' T2 O
  215. ;切换音乐(手柄触发)
    $ o! G+ Z4 A; H8 f8 G
  216. JSR Music_Switch: e* N" p* E* O6 ^' L; q% ~- _
  217. ; \+ E! v+ B$ ~
  218. ;音乐显示(缓冲)
    ; X6 Z6 T! Z# _" e4 ?1 A
  219. .IF SOUND_BAR_SHOW_ENABLE. |5 P' @6 e2 g7 H  g/ M( W
  220. JSR Music_Vision
    7 y8 `1 s4 S2 ~3 }
  221. .ENDIF& D8 |8 m! X8 h( K5 D: r: v. v( T
  222. 9 ^5 D1 y1 F6 Y# H
  223. LDA Time_Wait_Cnt7 {' H$ ~* w+ z$ f
  224. BEQ NmiProgramProcessEnd9 C' E1 U* {6 ]+ ^) v
  225. DEC Time_Wait_Cnt
    . j7 n' M: _- ^+ |& R3 y1 @! d% e0 |
  226. NmiProgramProcessEnd
    4 U0 P7 M. F; z, [' p
  227. RTS
    / F0 l& D  [8 I% c( }, H' W7 B

  228. ) ]. G+ g# ~0 f& ?  B
  229. ;==================================================9 K( r- e) r0 O: a
  230. ProgramBegin;主程序7 E  }5 |2 @( V  Z
  231. LDA #$004 E3 D+ B# v& X- \7 i/ n, T) p
  232. STA PPU_CTRL
    ) }( a" X2 x" |0 P
  233. STA PPU_STATUS
    4 }7 M4 O! j3 n1 f+ T  L
  234. STA PPU_MASK
    4 V% q' `* m. C* j
  235. STA APU_STATUS, a0 z! d. z+ d. G2 Y5 T
  236. STA PPU_SCROLL8 i- e) V/ Z" E; L, [* v1 ~
  237. STA PPU_SCROLL
      F/ k: ?* X& S8 [4 g
  238. LDA #$C0
    . R9 K/ L0 Z5 \. Y! m8 y/ A
  239. STA JOY2_FRAME
    % }7 N  q- k4 w& E( n( N

  240. $ l3 M, q/ [7 N6 F
  241. LDX #$FF
    $ E, b6 P3 A: Q7 h" |
  242. TXS# L" @1 T  C+ H7 y
  243. LDA #$00+ U, A- ?# \7 Z! i2 f0 `
  244. STA PPU_CTRL
    ( k. c! W; N5 m
  245. STA PPU_MASK+ s/ _# P% W: ~( i
  246. STA MMC3_IRQ_DISABLE
    5 @/ v, w( W- S" O/ w6 R0 C

  247. ! K0 w! B7 X8 p% v4 Z* V$ v
  248. ;==============================7 f- B, M  t7 @3 K: ]$ ]; z
  249. ;调色板清空& w2 _! R* Y) G* ~. L
  250. LDA #$3F
    # D' \$ J, t1 T2 S+ a  E
  251. STA PPU_ADDRESS% N5 q: v) R4 S  G
  252. LDA #$00
    ; \/ J) w; I8 W7 b3 u+ E
  253. STA PPU_ADDRESS$ H5 P: s( v9 T" ^6 Y
  254. LDA #$0F. F1 k: m0 i% j; y& R
  255. Palette_Clear
    2 r# q: }5 p" I) K$ s
  256. STA PPU_DATA
    ) p+ J2 N- n$ o# X/ q
  257. INX
    ) i+ N( u$ A6 ~$ Z
  258. CPX #$20
    ) s5 |3 S! K" ~
  259. BCC Palette_Clear
    2 `8 b& P$ }+ Q; g# h
  260. LDA #$00
    & I* D/ b& x. }& M. |
  261. STA APU_STATUS* o0 Q2 u9 q. ~  L+ y& E9 i
  262. ;==============================
    % j! ?: `; K& Q) k- c6 T+ E$ A
  263. ;初始化背景调色板
    7 {% [# A4 Z* t' k( A) f
  264. JSR Set_Palette_Color- i* ]+ w: x4 [- i( l7 M5 j, z# P
  265. JSR Set_NameTable_Attributes( N7 n1 J4 |4 M% Y0 G; X* x& B* F7 N
  266. & A! i9 o7 L+ [# S2 e: m2 h1 |
  267. ;==============================
    # `( m4 z6 Q) g4 R+ ]
  268. ;RAM初始化5 }: J* a/ M9 U/ p# C( e: p
  269. RAM_Clear_All7 j( y2 J. r- F  l% Z
  270. LDX #$00
    * C  y( U. l9 \  U& X* Y
  271. LDA #$000 h4 [9 |. U* A
  272. RAM_Clear_All_Start  F& y  P+ L1 O; _% _% G( Y
  273. STA $00,X
    ( d  n. A; A2 ]2 L3 b! J: X
  274. STA $0100,X  R6 ?- u! t' z" `
  275. STA $0200,X, {; a$ H7 C& @$ C- y. _, K- x
  276. STA $0300,X4 b) b7 j. g; A" H5 u
  277. STA $0400,X
    & F# T9 Z4 L4 _9 l* s
  278. STA $0500,X
    : _6 o+ p; ^. @( C! O
  279. STA $0600,X0 \/ c! _& {( v- d; D' q# f
  280. STA $0700,X0 U) V  O" a$ w, b7 l8 t
  281. INX
    9 g, w( J9 R' t) a# S; d: F
  282. BNE RAM_Clear_All_Start
    , o# y( Y2 a8 F) @* O0 s% `% w7 Y: t

  283. ( p% _4 m! W% L9 f
  284. JSR VramInit$ O6 a# Y8 J& n3 z9 A5 |
  285. JSR Init_Palette_Addr) _0 ^5 o+ i  L' Q" I
  286. - e2 v2 F; `: K# K- \$ F
  287. .IF Music_Reset_Addr) _/ O: w8 y: T# d, E/ n' ~
  288. JSR Sound_Reset
    " S- `7 A6 q" g) z' T: d
  289. .Endif
    ( G& v- m/ [) B. Y8 z: e
  290. ' u) \# |0 j* ~: f7 Y
  291. LDA #Music_Start_Song-$01
    & [9 z; |" G6 B
  292. STA Music_Cur
    - L6 I3 _3 [9 i

  293. + k- @2 Y7 }# j: Q5 J6 S) S# Z
  294. JSR Show_Music_Text
    % q# L* L7 u" Z+ w2 o
  295. . x* V+ X0 h% t/ u$ ?2 m
  296. .IF SOUND_BAR_SHOW_ENABLE- l0 s0 Y) }% i& i& j+ o
  297. JSR Sound_Bar_Text_Set
    2 ^' t' x; w' ^& b! O5 i, o( w  n2 R
  298. .ENDIF- L3 ]8 k/ u7 Q: l
  299. 9 [, S% _3 Z6 D' d
  300. .IF Track_Name_Pos, F# b' g: P3 C- E/ b: e' k
  301. JSR Show_Track_Info9 V) S  N4 Q1 H* Z7 A& W, D) R. W
  302. .ENDIF6 B/ L8 {9 K( b* ^7 {3 ~

  303. . e; F4 x- j: K" `
  304. JSR PPU_Proc
    ' s" F2 Z. Q1 j) U9 `4 x
  305. " C2 y" L& e8 }) Q
  306. LDA #$0E
    ! z% v5 r4 ~1 m3 i0 G
  307. STA Screen_State6 z" ~3 Q/ o  E& [. |( b5 @

  308. 3 y5 s3 F, h2 @
  309. JSR Sund_Bank_Init3 j) Q2 \3 y3 x- w" h* M
  310. ' z, E7 g/ {* X, h
  311. JSR Music_Show8 S+ I# q4 ^2 i, J6 l
  312. JSR Time_Show
    - u, c. b2 r! L# w
  313. JSR Music_Stata_Show0 d$ b" r3 [3 Y+ v& C
  314. JSR Time_Delay& B" |6 D# E0 }3 \* |
  315. 5 b( N3 p. s' S% E

  316. ( m9 }: C: c' @1 X
  317. LDA #$806 F. j# Y3 l$ J) R
  318. STA PPU_CTRL+ e' @* O; j+ @4 q4 g7 s- z
  319. , E! b( X% s- \3 x/ h% M
  320. LDA #$20! k+ ]' W" c5 X( M) l( X
  321. STA Time_Wait_Cnt
    " Z- M7 K* P2 Z  s. f& p+ B" J( w

  322. # |: u" {. `9 R) k
  323. Wait_Time_Over" n1 B* S9 d* I' l
  324. LDA Time_Wait_Cnt
    ) \7 Y# h# ^# X( y
  325. BNE Wait_Time_Over
    ' I! T7 H  g1 Y8 Z5 }

  326. 5 S4 c7 A( P0 K) Q* Q- m
  327. LDA #$1F
    , ^5 [% z9 F! G3 ]9 {+ T5 E; X
  328. STA APU_STATUS
    8 z! h; D: M* _# J3 R
  329. LDA Music_Cur
    ) s) e7 f" l5 N- B2 \% ]: ~
  330. JSR Sound_Init1 s( a! G/ C' g1 N
  331. $ E' s# w) s* f. v
  332. JMP MainLoop( W' P( R% Q5 g& z+ S8 V2 z! Y4 I

  333. : K' f) R: q, O  k- C
  334. ;==============================
    & L8 n4 ~: l9 b2 t; }
  335. Time_Delay;延时等待  A, m9 h. J# z" K2 {
  336. LDA PPU_STATUS. l) i* ?3 R" y- F0 `4 |
  337. BPL Time_Delay' b6 O2 n, R+ M) I# f& `: k  ^
  338. RTS8 |9 p% ]# E  {5 F

  339. 3 z3 L1 X5 A! O3 m8 u8 L# Z
  340. ;==============================
    * r9 p0 }1 j3 C( P8 s
  341. VramInit;初始化图形内存4 s: e9 ]2 Y, Z" A' u
  342. LDA #CHR_DATA_BANK
    6 l9 f3 |5 k/ ~! u
  343. JSR SwitchBankA000& L- C* Z/ X7 y
  344. LDA #LOW(CHR_DATA_ADDR)
    - T7 h$ p) t9 G) {
  345. STA <Data_L
    8 x, d3 t4 Q# g7 y' _6 i) |5 b/ c* v
  346. LDA #HIGH(CHR_DATA_ADDR)5 }0 H* T- j2 V1 u
  347. STA <Data_H
    7 O0 D; `* m/ h7 L# r8 k, X. Q  J
  348. LDY #$00% H$ g- R- r, n* X  i. ~0 }. b% ^  ]
  349. LDX #$207 x& G* k% I9 P# T0 C- g
  350. LDA #$00
    6 H8 M& W  ~( ~* S
  351. STA PPU_ADDRESS( {- P) M8 l3 d' g
  352. STA PPU_ADDRESS6 Y. ?2 A* i1 _7 U/ W( ~3 }
  353. VramInitWrite% z, L. r; l" B
  354. LDA [Data_L],Y
    : s( G; d2 j* \0 m' \0 u/ Y; ^9 l
  355. STA PPU_DATA0 E" N2 h" F& c" }. ~, e
  356. INY
    8 ~# W# a  s  T: P0 O
  357. BNE VramInitWrite
    . H) d( D; }* e* [$ b
  358. INC Data_H4 u6 Y; l* M2 a
  359. DEX7 B7 x9 p5 \/ t/ @6 Q; a6 ~
  360. BNE VramInitWrite0 V3 _, |' m) r% h# M" ]! h
  361. RTS7 [+ s, M9 C" v( _+ C2 m" Q+ R

  362. # L7 V7 ?: ]( k* j9 T* T
  363. ;==============================
    ) l- K$ z* f1 P9 C4 I& x
  364. RAM_Clear;RAM清除
    4 i! {: ?8 i$ G7 y
  365. LDX #$00
    6 B; y) q; Q! {. O! N& A# V
  366. LDA #$007 r# H1 I0 n  e' m
  367. RAM_Clear_1! o. s9 g4 X" w  J' {
  368. STA RAM_Cln_1,X2 [! |! x' x7 G. s/ A$ p8 N9 r
  369. INX: B; }0 Z6 W4 L: J
  370. CPX #RAM_Cln_1_Size
    9 |& E" v2 }7 Z4 ?  C' s3 Z
  371. BNE RAM_Clear_1! F( O$ {( D- q$ [" B( [$ @6 H
  372. LDX #$00
    8 j8 l+ E$ P  t0 t6 a
  373. RAM_Clear_2& Y2 Y2 y% h8 m) }: @2 i) A" E
  374. STA RAM_Cln_2,X
    : l& X2 X) @: \3 C0 U
  375. INX
    9 o5 _9 L# q; Q0 g7 ], N0 V
  376. CPX #RAM_Cln_2_Size
    # r0 C5 }1 l: m
  377. BNE RAM_Clear_2
    + t, \& H  R+ M7 |' T
  378. LDX #$00/ d# F) J3 K, F
  379. RAM_Clear_3  S8 S4 K3 m$ N5 P( K! X) M! ^! u
  380. STA RAM_Cln_3,X
    % K; |" R$ Z0 k. }
  381. INX# A/ O& S& [) _0 ^) Y8 b: o
  382. CPX #RAM_Cln_3_Size/ r4 C$ N0 s) N# s2 N& ]; m
  383. BNE RAM_Clear_3
      d# S: F9 A. m: S9 h
  384. RTS
    5 O1 F) M3 @+ r2 f4 n! s# e. ]
  385. * ]- ?$ [) q. H3 f0 z
  386. ;==============================
    $ R, P# _1 W+ m/ E: R4 S
  387. ;音乐切换/ t% q( u6 [" N( z- t8 W& z
  388. Music_Switch
    7 S9 p# o5 w3 m  L. B0 @2 N" v" }0 ?
  389. JSR Key_Proc
    ' U2 W0 d0 v+ K4 \, d% z
  390. LDA Key_Once7 L% `4 F3 U+ `8 t
  391. CMP #$10! w* X" ]: [1 Z1 {
  392. BNE Music_Start_SongStop" h3 a' w$ h, ~, v
  393. JSR Music_ReSet: U" y; b" @! j* G0 g$ `

  394. * Z' J! M' U( ^; g* S$ O. t
  395. ;音乐停止
    # ^: D2 Y5 O' d% S
  396. Music_Start_SongStop. x! O" o/ T7 z0 I
  397. LDA Key_Once, [' p# [7 f+ P4 A) b$ H" M
  398. CMP #$20" H" A: L+ \9 {' a& J
  399. BNE Music_arrow
    3 G3 |# R1 D5 i& g& E6 N
  400. LDA #$01  A" C7 ?: T; O$ v) e
  401. STA Music_State( k6 W* k7 v2 H0 H$ Y
  402. JSR Music_Bar_ReSet* G( b2 l" Y0 [
  403. JSR Time_ReSet
    + b5 S- I3 L& |+ K& h
  404. JSR RAM_Clear
    5 g  t" [; q* U1 M# P5 o
  405. JSR Sound_Clear* C+ u! ^( m( |/ ^" Q
  406. JSR Music_Stata_Show- E* h8 `& V  [- J/ y
  407. Music_arrow
    8 x! h$ O1 X; D* Z# z
  408. LDA Key_Once" H/ Z) Y* W+ [) P6 H- f
  409. AND #$CF% ?7 I1 Y$ l$ K  Q9 L
  410. BEQ Music_Switch_End
    - t$ j1 W- [7 y9 L" y  |, o' V
  411. JSR Music_Number) E' B! [. U  X4 S+ A" f) J
  412. JSR Music_ReSet
    6 A+ v- M/ s6 s( Y" W4 x
  413. JSR Music_Show5 O$ D, y) P  M
  414. Music_Switch_End
    : B! R" I% X# ]' u; v- e
  415. RTS
    ' _: @5 {2 }' Q4 g5 N3 _

  416. 8 \6 D2 `  w9 B, D
  417. ;==============================; k5 R. W( ^" m- p+ B
  418. ;音乐曲目切换
    + G7 r3 \' H( j3 H7 s0 i3 v
  419. Music_Number
    # J0 h& f- F# C; [: `( R
  420. LDA Music_Cur
    - ?3 \: F/ |% O! \- q5 U$ |
  421. STA Music_Last
    ) T+ J7 l) `$ C6 M' y
  422. Music_Decrease
    6 s/ s! o& K# s! u% |0 e. f
  423. LDA Key_Once- r5 f/ }+ }( `4 S3 |# L3 O: R
  424. AND #$42
    : J2 E; P0 k4 D1 i
  425. BEQ Music_Increase
    + y) P4 J+ k' ~& z7 |# e# V8 U
  426. LDA Music_Cur% {" |% a: [: K- w7 H, t: |* i
  427. BEQ Music_Increase
    ; Y; ?  J6 P& Z+ u. x1 t
  428. DEC Music_Cur
    1 r0 _  Z7 n9 y+ C! |
  429. Music_Increase
    / \. y: j$ g) O/ I
  430. LDA Key_Once+ ?& z2 d; G" i2 }/ G' t
  431. AND #$81" k( O: _; W! u9 Y6 @$ N& d
  432. BEQ Music_Decrease_10: A7 Q" f: ]# N' z* @7 N
  433. LDA Music_Cur
    # {3 J: d+ M% j+ u: C
  434. CMP #Music_Song_Total-01
    4 {0 ^6 I2 `9 @2 y
  435. BCS Music_Decrease_102 f& x& ?* Z' g  \
  436. INC Music_Cur
    4 H0 q6 `: P9 ]$ A
  437. Music_Decrease_10) h+ p% [  C  i0 i# @
  438. LDA Key_Once, }9 M2 R9 E' s  b
  439. CMP #$04# [6 w0 T4 k; m' R
  440. BNE Music_Increase_10" U; s" X( o, t1 B# }1 v( _( V1 |
  441. LDA Music_Cur& T" ?+ m& C1 H! y; o  `) j+ t3 a+ A
  442. CMP #10
    : K: ~3 [7 J: h- ?9 |
  443. BCC Music_Start_Song_Min
    ( z2 ~$ e$ n0 V* P' f
  444. LDA Music_Cur9 q3 _4 D0 ~6 {
  445. SEC
    , f% [6 `1 ?/ u
  446. SBC #10
      v# u! ^- [  j3 s. Y
  447. STA Music_Cur
    6 j9 S0 A1 z# @$ f
  448. LDA #$00
    - k4 w/ r# W' L: S8 ]
  449. BEQ Music_Increase_10
    ' H* U8 Q( s( s8 r: g* r
  450. Music_Start_Song_Min* g% n  K" c6 e
  451. LDA #$00
    7 Y1 f" I' s, s# j2 B+ t- H& z7 \. U
  452. STA Music_Cur7 `; F2 Y! n3 R* U0 l( _
  453. Music_Increase_107 s7 o: }9 a' p0 U: ]- q
  454. LDA Key_Once
    3 E7 G" K  t. R+ D& o0 ^: ^9 u
  455. CMP #$083 [' s8 ?6 ~0 B" Q3 N4 I
  456. BNE Music_Number_End
    + c' A2 c7 i$ b
  457. LDA Music_Cur' v; E$ @$ H. z
  458. CLC
    ; i  B! F5 c" [, G% }* X. h
  459. ADC #10' Y; c& N% T7 X& _
  460. CMP #Music_Song_Total-01
    0 K2 o+ P4 |; H( q9 e. s/ ^
  461. BCS Music_Start_Song_Max, ~" O* q' E6 Y" F0 A& B- j  a7 h+ S
  462. STA Music_Cur
    0 L& W* _+ X3 |* J
  463. LDA #00$ L( [5 Z  `9 }9 q( [/ C
  464. BEQ Music_Number_End
    ! ~( O( c, i' ]
  465. Music_Start_Song_Max( b6 S6 b8 b9 v
  466. LDA #Music_Song_Total-01; a' G  @; X3 ?$ G- ]  J
  467. STA Music_Cur+ q( }3 a6 a) F0 n
  468. Music_Number_End; a9 d- r! x2 S7 f, q4 D! n
  469. RTS2 h1 U8 L* a3 ^  r/ ?

  470. * l$ U! y" \7 i+ T/ E2 R6 q) g
  471. ;==============================
    3 s! ~5 x% n7 P
  472. ;音乐重设1 [; j8 X3 E% w6 R
  473. Music_ReSet$ m2 S! h* L) X' ^6 B
  474. JSR RAM_Clear% c$ I- a/ w. @7 Z5 x$ W- y' z
  475. JSR Sound_Clear
    5 k" W/ B1 b, M  P1 N; B
  476. LDA #$1F
    9 d: a- L% s4 ^
  477. STA APU_STATUS
      Z, A# \+ w( x8 |% z2 {
  478. LDA Music_Cur
    % f: u4 @1 l( i- J0 X
  479. JSR Sound_Init
    0 u. f( p7 h2 N4 k0 b$ C6 {
  480. RTS& p4 n5 c* W+ P7 K: w/ `

  481.   G6 G9 [3 x' |9 I7 ]2 L$ o
  482. ;==============================
    6 ~1 s& q+ ]6 {/ a
  483. ;音乐端口清除! }2 Y" y. b( P0 R* F, B
  484. Sound_Clear
    : y+ Y" _+ }8 s) \0 y# _) e
  485. LDA #$00
    4 c' z  r( ]* t; \: R
  486. STA APU_STATUS
    ; D  p/ H! Z+ h) x& x
  487. LDX #$000 O/ G2 ~- L2 ]. y. T9 v
  488. Sound_Clear_Start7 ^: @3 H; e; P+ f
  489. STA $4000,X) N0 D5 i2 C; a8 O, D! v
  490. INX
    4 `5 l( f( |8 J: K
  491. CPX #$146 \( `7 H- F7 O2 }- I, S* T. z( {( ]2 H
  492. BCC Sound_Clear_Start+ x' ^( F" h, C, V! d
  493. RTS; w7 V) t0 y/ z# S
  494. 7 t! G9 G+ s! G& p4 ^
  495. ;==============================0 l7 A8 q0 Y0 H7 Y
  496. ;按键处理+ K8 e$ A% D% l1 q2 u3 n6 x5 \
  497. Key_Proc
    + F  H: H7 d4 W5 {2 P' j' n
  498. JSR Key_Scan7 ^" ?' f4 K, o; V+ C3 a
  499. LDA Key_Keep1 x5 X# J4 [' X* r
  500. STA Key_Temp
    0 Z% ]9 J4 m3 |& O
  501. JSR Key_Scan) c, W) }2 `7 k
  502. LDA Key_Keep
    ! I. i! E9 Y9 G3 ~. L
  503. CMP Key_Temp
    - I7 \( ^2 u! T8 Q$ V4 P/ u6 }
  504. BEQ Key_Get_Once
    - c4 ?0 m' ~" |. k  I
  505. LDA Key_Kemp
    : v& X' b: \3 D) }
  506. STA Key_Keep
    6 l( j! O, H5 C1 P' z2 B
  507. Key_Get_Once$ ~# O0 J  [& Y; s* |
  508. TAY* }( k, ^5 |2 {7 g( ?
  509. EOR Key_Kemp1 Z. l3 w! W6 Y% p4 Q6 h0 q* G8 u
  510. AND Key_Keep) s- S6 D$ j* H/ n" N
  511. STA Key_Once) ~( ~+ j/ Y) k2 J/ }
  512. STY Key_Kemp; E7 w# n; X/ H% I; P: v/ q8 [
  513. RTS
    2 l! Z: W# }+ i  d8 J. l0 r
  514. ;------------------------------
    , `# S1 q- M1 p/ M& y8 l) s
  515. ;按键扫描, B! t! j+ `# P! S
  516. Key_Scan
    ) I* u* |- c: F8 s0 s3 Y* K8 T; l1 S
  517. LDX #$01
    " H* v& s9 O+ m- z% l$ K+ Y1 K0 j
  518. STX JOY1_FRAME2 M3 l6 k0 Z% x6 j" \! p$ `
  519. DEX
      s: c) r1 q0 O% F3 r* p2 J
  520. STX JOY1_FRAME* ]/ C* X- t+ @- g
  521. LDX #$08' z$ K  F3 Z4 n- g- k
  522. Key_Value
    , ^3 N8 `6 a5 `' q" Q  ?3 f
  523. LDA JOY1_FRAME! C' v) R0 h  n. P; |, o0 [8 y
  524. STA Key_Getv, s+ ?; F$ X4 l: l) @
  525. LSR A1 i' z& o, z8 g! s4 z4 H
  526. ORA Key_Getv. L7 k7 S8 n( j
  527. LSR A
    0 g! ^1 ?% d, e. F
  528. ROL Key_Keep: ^6 Z) q. f' }/ q
  529. DEX
    + a. X3 L; A: E" {: O. B
  530. BNE Key_Value
    # |) j' ?% t: _! J
  531. RTS, Z5 }$ R8 T) C5 }$ N0 q
  532. : e9 m) B/ i- ]3 z* m) i
  533. ;==============================
    4 o% d% S3 P3 ]5 m( p4 p
  534. .IF SOUND_BAR_SHOW_ENABLE$ y1 U* f' `) P4 c8 v. t% D. A5 {. e
  535. ;音乐条显示
    5 p" h& z. p3 ^# g9 r9 S
  536. Music_Vision7 \2 g2 x: F* l
  537. JSR Music_Animation
    + g3 X' k- l4 H! ]0 r
  538. JSR PPU_End
    $ \* J$ G; [, g: A" h8 k0 ]
  539. RTS9 H) g) o+ k  C4 J# o/ j
  540. ;------------------------------
    " M8 w" {0 {! z7 n( M% E+ s) o, Y
  541. ;音乐条显示处理* K+ x6 d5 k& h0 [. `" u3 v
  542. Music_Animation
    , p! U% F) {0 t& x  m& R
  543. LDX PPU_Cur
    ' C3 _9 C. x% i+ a- }
  544. LDA #Mode_Line$ w, V" f1 k8 ]: f
  545. STA PPU_Addr,X
    4 X6 Q0 S: v3 Q' D/ J+ H
  546. INX
    0 l/ v; m4 U1 g  ]8 @, K
  547. LDA #HIGH(Sound_Bar_Pos)- {& D, U  V% X  S% N5 ?
  548. STA PPU_Addr,X4 I6 v3 d2 H  ~$ i  Z: ~
  549. INX9 B9 c* m, h0 W5 B8 B! S
  550. LDA #LOW(Sound_Bar_Pos)1 B: m) u' Z% u* i5 o5 S
  551. STA PPU_Addr,X
    5 z4 [' _, j0 s. c' X6 F
  552. INX3 \2 h% [0 x, B  m8 {% k
  553. LDA Sound_Bar
    * u' i/ m6 g6 }* G) u
  554. JSR Volume_Convert6 F$ {4 `5 K3 _, o7 |, {
  555. JSR PPU_Return
    1 C  f) Z$ p& g3 K( b0 Y$ e9 a( \/ e2 V
  556. LDA Sound_Bar+$4
    % w6 j8 |  h" F7 G
  557. JSR Volume_Convert% [4 Q" P6 n  T; |9 ^. d) Y# S3 d
  558. JSR PPU_Return8 ]* n9 Z$ m+ \# a0 x4 X0 ?/ n
  559. LDA Sound_Bar+$89 I( o9 k% m; k* o! Q" h8 p1 D6 z0 z' q
  560. JSR Volume_Convert_Ex7 h' }+ g2 _: V$ A# _
  561. JSR PPU_Return
    . c* Y% q* {" F8 R) D3 ~& C
  562. LDA Sound_Bar+$C
    ' M9 W2 }! J! u
  563. JSR Volume_Convert
    5 b: I- e( M  i! F/ W
  564. JSR PPU_Return
    / x  r1 Z& F9 }! C* r5 w
  565. LDY #$10
    0 {* c- |. S) X/ {. {
  566. LDA APU_STATUS$ E6 ]4 @/ [$ z& b9 }3 R' u
  567. AND #$10
    ' z. i. _: \5 K! m. o* {
  568. BNE Volume_Count8 ?1 P6 j3 ~1 u
  569. LDY #$004 Q, F: [6 f9 ^- \
  570. BEQ Volume_Count
    / g+ Y' d8 a7 T8 S* O: z
  571. ;------------------------------
    5 s( q% F- v% f3 Q8 R( ]* i0 ?6 F
  572. ;音乐条处理
    2 x& R5 V; n& @& K0 [
  573. Volume_Convert_Ex
    % {4 O9 a% m" c* A) K' b$ r
  574. AND #$1F
    ) O7 a& Y+ S! p$ w& y* k
  575. TAY
    6 ], d. X+ F- \# |% p: r. Q
  576. BNE Volume_Count
    , l( _$ n& J, t7 d9 P7 l8 [0 |
  577. Volume_Convert
      ~$ G# [8 X) ^, W; P: t7 O+ D
  578. AND #$0F$ C* I$ K8 Q' N' t  z4 I
  579. TAY& L( b$ M0 T" B! C$ E7 C
  580. Volume_Count
    ; _5 N/ `: S- {: G
  581. LDA #$08* ?. `  W( t8 o- e! X
  582. STA Sound_Bar_Cnt1 s; t  o9 h) M$ u6 T
  583. Volume_FILL5 R6 Z5 {5 r# t% c# C
  584. DEY
    + P7 C- O  _5 \7 f
  585. BEQ Volume_Half
    ' U# O; J* v: r
  586. BMI Volume_Empty
    7 T2 @7 x4 I1 \( A. Y
  587. DEY1 u6 Z3 n& ?6 K0 I# W
  588. Volume_Full6 F# V5 o# ^# u9 a6 K) B
  589. LDA #$161 N+ W/ U# `2 Q/ l6 v6 X4 m
  590. BNE Volume_PPU
    4 Q$ D  Y- s. E1 ?7 s5 g: u9 B
  591. Volume_Half
    5 B- s( @; Y3 c6 y4 [
  592. LDA #$15  T( {+ t) `' q7 M! u( c! a: I
  593. BNE Volume_PPU0 \! l9 F  \7 s- v, y
  594. Volume_Empty6 ^2 D, I4 h7 `% h) Y( `
  595. LDA #$14  m8 S; i) W+ \& }
  596. Volume_PPU" K" Y: _; }. W; E% o& @
  597. STA PPU_Addr,X- t9 k# S' w- [6 v0 T" J
  598. INX$ f4 g$ v. t/ S; {9 d% n
  599. DEC Sound_Bar_Cnt
    & I7 B' J8 g) e+ V: P
  600. BNE Volume_FILL7 N+ e+ W+ C: s+ c, @6 E; q+ x4 S7 W, H
  601. RTS8 W- X5 t' d( ^5 R- @' ?* e" G

  602. : q8 Q8 C+ D, x9 g" F& z
  603. .ENDIF
    % f* x/ y3 r/ v: y# S% h  o2 h

  604. - d) C8 d3 U+ _+ i
  605. ;==============================, i7 d% W. B- J( k8 s, _
  606. PPU_Addr_Set;PPU行开始- Z6 N) c! T/ s: O7 a  O$ g5 u( }
  607. LDX PPU_Cur. Z1 l7 ~# z2 u7 ~* Q, ~" K8 i
  608. LDA #Mode_Line
    ) g! W/ d9 w" J! R+ J, D
  609. STA PPU_Addr,X  {6 o( F4 O: |, c& J
  610. INX
    ; n; V" z: [+ f7 V& ?( I
  611. RTS# m  u) `& L1 N
  612. : _& ~! z) w4 p
  613. PPU_Return;PPU转行9 |% A5 ], n3 S& \
  614. LDA #Flag_Over7 \1 G8 ]/ B9 _6 n( N, M' i( s
  615. STA PPU_Addr,X
    1 H% U  R& C' H$ B) W* e& b! U
  616. INX
    0 a, B+ W. m' `% k7 E, v' V
  617. LDA #Mode_Return
    6 H* T5 w) |7 ?
  618. STA PPU_Addr,X
    4 u6 P$ x1 h' d2 L* d1 _! u
  619. INX) `% l. e& C5 g+ C
  620. RTS
    ; X$ w6 h, ?' |# J# ~( {
  621. - t4 p4 ?# u1 ]  J
  622. ;------------------------------$ H9 f# F" S+ b/ v
  623. PPU_End;PPU结束
    ; g2 [  T9 ]) Q% V; f8 K
  624. LDA #Flag_Over  E8 D# ?1 m% m& S2 `: Z2 P- F
  625. STA PPU_Addr,X  h4 u6 f) r* `! d0 W& ~, `( H
  626. INX" p" F- n# M$ ]  S) R
  627. STX PPU_Cur
    # z. h1 L" p  [( }$ D9 s
  628. RTS
    ' K# U5 m9 ]5 U
  629. ;==============================
    " y! x2 S% s7 {& u- r) o2 z  ]: s
  630. Mode_Line     = $FD    ;新起行模式) L0 `; R, b, p# O/ g
  631. Mode_Return   = $FE    ;转下行模式9 J1 ~) p8 I* V2 y6 u
  632. Mode_Clear    = $FC    ;行清除& r5 r6 {3 ~: _) T0 w* d
  633. Mode_CntLine  = $FB    ;行计数写入9 B1 |5 j- S* t  H
  634. Flag_Over     = $FF    ;行结束标志
    6 b4 f8 A# ]9 G: j+ W: k

  635. 3 a) R8 s, h, {1 s0 c0 `& O( }
  636. ;------------------------------5 B: V9 K- g" [0 Q7 i
  637. ;PPU处理/ @/ a3 M! J' a: o- W& L% ^
  638. PPU_Proc
    ' K6 S: m  }1 S- |) K3 J  I& X
  639. LDX PPU_Cur
    ) Z! h" A/ z' x- N5 X7 ?
  640. LDA #$009 x2 d  h& U4 {4 f2 g
  641. STA PPU_Cur
    & O6 w( y( H6 |, }% [7 ]
  642. STA PPU_Addr,X, m; z; G, h8 j6 V- l' }" Z
  643. LDA PPU_Addr
    9 t$ R9 V; f4 _: Z
  644. BNE PPU_Proc_Beg
    & |1 Y- t9 ?& Q# J
  645. PPU_Proc_Ret! {" r- |6 m5 v7 a7 B
  646. RTS- x$ t- U' [& ?& {' s' o/ v4 m
  647. ;------------------------------
    # X1 R8 y9 X+ _$ Z$ B" @$ Y
  648. PPU_Proc_Beg  ;处理开始
    ! g( |$ e: f- m; e& x
  649. LDX #$00
    . h* P& @- D& S7 q( t/ T6 H
  650. STX PPU_MASK
    ; h: P2 d2 [3 `6 |4 y; F+ P: `- M
  651. ;------------------------------1 s1 k; @+ V& w# m* G
  652. PPU_Mode_Select  ;模式选择
    0 D) A9 J& q# i8 c" t# p
  653. LDA PPU_Addr,X
    ) f0 m2 r& m8 L9 P- _
  654. CMP #Mode_Line. K4 O5 t& g  c8 s
  655. BEQ PPU_Mode_Newline
    4 `0 W# a5 m# H/ }" w
  656. CMP #Mode_Return
    ; r7 C% ~* m" F# L7 N
  657. BEQ PPU_Mode_Return
    , B5 T8 X  _2 \* w& k# \
  658. CMP #Mode_Clear
    % j( m' y4 H9 i
  659. BEQ PPU_Proc_Clear
    . h0 {( J! Z, x4 ], J
  660. CMP #Mode_CntLine, \' n% N. r7 [. |# d. K
  661. BEQ PPU_Proc_Cnt_Line
    8 z" ~/ W; l( {+ f! D2 E3 W6 G
  662. RTS
    3 ^7 l9 u1 k7 K4 m$ _/ O: _
  663. ;------------------------------+ m0 C2 I9 ?  |8 N7 R1 u
  664. PPU_Mode_Return  ;转下行模式
    , k9 [4 h9 y+ V
  665. LDA PPU_Addr_L0 X7 W7 s7 m0 N% K/ |$ n
  666. CLC; O6 B( X8 G* G) i! ]2 I- C
  667. ADC #$201 d+ J& ^2 v4 `
  668. STA PPU_Addr_L
    6 R! Y5 C2 E6 W% I
  669. BCC PPU_Return_End
      J& w! g. R$ N. E) g4 \: w) y
  670. INC PPU_Addr_H
    * v" J9 M8 A4 _8 s+ |9 H2 N
  671. PPU_Return_End1 U" `' U% b8 z  ]5 J# K1 o
  672. JMP PPU_Set_Increaser0 O- f# x) T' r9 \' Q, ^/ y
  673. ;------------------------------" E) b, P9 i6 }( W0 ~, v
  674. PPU_Mode_Newline  ;新起行模式! Z* T& G* o( K: x
  675. INX
    " f, x7 K" q) x) b
  676. LDA PPU_Addr,X
    % }: t* z0 K! B, S$ j* H, H
  677. STA PPU_Addr_H# v8 u1 P3 Y; a/ w/ h
  678. INX7 W2 T) q0 N% k  r, ]
  679. LDA PPU_Addr,X3 k  T3 K3 X2 k4 o& v
  680. STA PPU_Addr_L6 S( l8 b% Q" T
  681. ;------------------------------7 J6 M' m4 w4 C. f, v
  682. PPU_Set_Increaser   ;设置写入地址
    * h2 S. t/ O1 L, ~4 L, D
  683. LDA PPU_Addr_H7 B& ~9 v& ?; R) r8 k. b$ b
  684. STA PPU_ADDRESS! Q8 g5 E) n$ E) k6 H% K
  685. LDA PPU_Addr_L
    / _" Z7 [$ G. U& T
  686. STA PPU_ADDRESS  O5 g' \/ u* Z. T
  687. ;------------------------------
    # k7 ^. D1 q: q" S6 M8 i
  688. PPU_Write   ;写入数据% l! |2 c! E7 S5 J
  689. INX- U" Z. F0 y- w9 Q1 Q: u
  690. LDA PPU_Addr,X: `9 g3 B3 `3 X: _: d
  691. CMP #Flag_Over
    " H3 l/ ^$ y  q" G! w
  692. BEQ PPU_Proc_End
      f, l6 ~2 v5 m/ y5 `
  693. STA PPU_DATA4 c) ~& V2 ~3 P8 N  \
  694. JMP PPU_Write6 ]  ~: k9 f/ ^' T% A1 m6 k5 g
  695. ;------------------------------* J' z5 v1 _- V7 \7 Y. @
  696. PPU_Proc_End  ;单行写入结束
    5 p' u$ z% C  @( y, i9 t  [/ t
  697. INX. o$ a) [/ b& W' a& ^
  698. LDA PPU_Addr,X
    3 }2 L( |" x- H" C7 n7 A
  699. BNE PPU_Mode_Select
    4 N6 u2 Q' {+ e
  700. STA PPU_Addr3 j5 V' [5 z2 d, B
  701. JSR Update_Palette_Color  e% o1 d7 S8 s* T; I
  702. LDA #$00$ @/ K' i5 ?/ b! [3 p; W6 `
  703. STA PPU_ADDRESS
    8 W7 U4 a7 G8 y  I. `5 Y, [
  704. STA PPU_ADDRESS' g+ r9 B) B+ ?. I2 m
  705. STA Show_Track_Name
    / i, O  u6 d$ t) j# x0 F& p
  706. LDA #Scroll_X/ T% \/ N8 k( R" b3 L4 p) a
  707. STA PPU_SCROLL
    ! B+ U" I4 z8 y- p- ]
  708. LDA #Scroll_Y6 P1 q5 P  H) a- A, R
  709. STA PPU_SCROLL' ]" z2 A- P; `5 w; x0 {+ T+ R1 D' ?
  710. LDA Screen_State3 M% r& A% W/ s5 c: l5 P" U9 g! L
  711. STA PPU_MASK' j, ^! A/ c4 c
  712. RTS. Q# ]1 I+ S2 }0 Z# S
  713. 1 D$ n, f5 F  ^( T6 X/ ^
  714. PPU_Proc_Clear
    , d" Z1 O# O# V  z' V
  715. INX7 {1 @% X$ h6 S
  716. LDA PPU_Addr,X
    ; V. F0 A; r3 ~" a  ]6 k
  717. STA PPU_ADDRESS
    ! n" s% @0 Z# J* y
  718. INX* B$ F( {1 a3 E: ~
  719. LDA PPU_Addr,X
    # J  P0 [$ H3 I1 b6 A. |
  720. STA PPU_ADDRESS& G- x# v2 x4 i
  721. INX- \! k& W' n2 w& }
  722. LDY PPU_Addr,X
    3 i% N- r& Q$ V
  723. LDA #$00: }* ?  W% P% _' [7 G
  724. PPU_Proc_Clear_Write; a2 E' @% o1 \
  725. STA PPU_DATA3 B5 I& t3 d  E* v  P) ^5 {
  726. DEY! V/ y  c- l1 _
  727. BNE PPU_Proc_Clear_Write
    7 ~4 @4 A4 B& ^2 Y/ q
  728. JMP PPU_Proc_End. l4 ]! W& @4 q& X. Z; W2 T

  729. 2 U2 e! c7 c2 w' w6 B
  730. PPU_Proc_Cnt_Line: W% l5 n! {' ~7 n" _. |0 a
  731. INX
    2 B( M3 n  [' O" `+ v
  732. LDA PPU_Addr,X, W: {2 z* m. L6 g0 A" K
  733. STA PPU_ADDRESS  i3 [' M& q. s4 O' b
  734. INX
    0 }) ?& P: X( ?" K# F% N+ ]
  735. LDA PPU_Addr,X$ k: t' S0 K; |" L
  736. STA PPU_ADDRESS( R2 v8 q( x7 h2 E4 ]- C& o
  737. INX
    " B( T5 @# V* S" A* q8 Q
  738. LDY PPU_Addr,X% {8 k$ c/ r. b( Z' G; P
  739. PPU_Proc_Cnt_Line_Write& N( y; r2 Z+ q
  740. INX
    / z% N# e/ b2 h1 H4 S
  741. LDA PPU_Addr,X! `) x3 v9 n6 O0 D; O' T/ {5 S
  742. STA PPU_DATA
    8 |- h8 p; P8 j2 _
  743. DEY* X' ~7 M+ Q. E2 U
  744. BNE PPU_Proc_Cnt_Line_Write7 g2 o  B- }7 |
  745. JMP PPU_Proc_End4 K$ k  g4 r. h) S. E7 S, G

  746. 6 A4 m4 F& _: B* f2 a. s/ v
  747. ;==============================
    $ x" P& X5 q6 W: |6 b5 s
  748. HEX_To_Dec;十六进制转十进制( Q, o2 \: x7 v$ u2 ^
  749. STA HEX_Data& H* O  W  j8 l; c9 B
  750. PHA
    ! ~$ n( p* h$ X$ a2 {3 ^: I
  751. TXA
    5 e6 `- y- i  h( ]# X7 M
  752. PHA4 K# v2 W6 w  x# {7 N9 s
  753. LDX #$00
    & T  e4 E4 J, P* j' l' Z+ }
  754. LDA #$00, E& _8 u8 `" \; z) {
  755. HEX_Cln
    4 q7 w# a3 w% H: u
  756. STA DEC_H,X
    * B, W" e1 Y/ x: t
  757. INX
    8 p# W9 y! H# L
  758. CPX #$03; W$ `( F5 X( d
  759. BCC HEX_Cln
    , j" Q; @; w( r" G9 X
  760. LDA HEX_Data- Q" K* e5 p: E: ]. H! u' z- _
  761. ;------------------------------1 u( _3 o) P/ v* H! y: I+ \
  762. HEX_100( X5 `/ `& v0 y0 F6 r
  763. CMP #100
    1 b8 t& k. l8 u2 S
  764. BCC HEX_100 V: Q7 |: S; _( W9 @8 T4 g
  765. SEC' E/ k0 T. D9 [& J0 B1 Z, ?7 Y( l
  766. SBC #100* o8 t0 c$ H5 @3 _5 C0 t  F
  767. INC DEC_H% [* {( k! j+ v
  768. BNE HEX_100- }* n4 D3 |' W2 L8 B6 j9 x) `
  769. ;------------------------------% ]' x0 I( [3 u2 g% w1 P
  770. HEX_10
      E  ]* K/ @3 k, Q
  771. CMP #10+ d0 ]! f& U) Q4 \
  772. BCC HEX_1
    # |9 }4 Q( M9 V4 e% a& a7 w& c
  773. SEC
    3 F  t9 g" u$ q4 ]9 i* Q
  774. SBC #10
      {. n' ~: R: _  A# e8 q2 p
  775. INC DEC_T2 T0 H* v4 U* z/ T0 |3 y" A* f
  776. BNE HEX_10# C+ z! m4 M" n" l0 n
  777. ;------------------------------! d9 Z; Q6 k! `6 _: V& M: q" e2 x
  778. HEX_1
    8 O2 y1 D$ b, i6 T3 U& T
  779. STA DEC_L
    % |" E, v: o# @( z/ a& X" e4 x4 p
  780. PLA8 E; }4 Y/ I  z" x5 y$ i
  781. TAX: l7 W, m1 O% H3 E4 N8 z
  782. PLA
    : y: i) P- C1 c7 ^3 \
  783. RTS
    ! w$ ?: Z4 D, }( [5 `7 Q  L8 |0 m' j  a
  784. 9 p$ ^) X0 d- s
  785. ;==============================
    ' {5 \2 \! \6 z8 D
  786. ;音乐曲目显示
    + [# ^6 w! u/ j: t+ f& G0 Z
  787. Music_Show3 I+ O; C* A# [
  788. LDA Music_Cur
    . z  o8 R5 b. V) f. Q( ~* ?
  789. CLC' y6 c  Q7 q; e
  790. ADC #$01
    0 L1 X" d: r) g7 N; g/ B4 w& s* x
  791. JSR HEX_To_Dec
    ) o# N: C. W4 o( b' R* |+ I
  792. LDX PPU_Cur
    ) W0 _2 Z$ v/ _$ v* o0 G5 r
  793. LDA #$FD/ w# m8 S1 M% k
  794. STA PPU_Addr,X
    9 d% `3 Z7 a" S+ l. A
  795. INX$ K6 h5 l2 Z/ M* d$ b
  796. LDA #HIGH(Play_Index_Pos)
    ) h; U$ W/ x& ]4 m+ I
  797. STA PPU_Addr,X7 y3 g) O: {6 }: ?2 `( Y
  798. INX
    0 U8 [1 k5 N: V, o! J
  799. LDA #LOW(Play_Index_Pos)* }/ G+ ^7 o# \) d! S
  800. STA PPU_Addr,X; L0 f5 ^0 c$ j* a! Y, ~6 i: R* u' i
  801. INX( r" L! U* e; D' n$ G4 i

  802. , a6 |4 J4 J& z
  803. .IF Music_Song_Total > 99
    % f' d; v) i# ]7 U7 ]! T5 u" w9 }2 F
  804. LDA DEC_H" k4 }+ r* R- l6 {1 x
  805. ORA #$30
    . u' m/ l" W4 o# e8 V
  806. STA PPU_Addr,X
    5 k' Z+ X2 S* a
  807. INX
      S3 S/ ?, d- F$ j+ u
  808. .ENDIF
    + F; S! _- L: Q5 l

  809. $ Z* t1 S3 w2 m
  810. .IF Music_Song_Total > 9" P5 i: J+ Y8 l; ?! F$ U; v" x- T5 f
  811. LDA DEC_T' A! W: }7 |" Y9 P! u2 d, [
  812. ORA #$30
    3 \# r5 M8 c. ^  C2 W  |
  813. STA PPU_Addr,X. z0 V4 o" N: k! h1 u
  814. INX6 l+ x# C8 Q, p, m
  815. .ENDIF
    , F# b  i, R$ w0 w/ ?

  816. * P; r  V1 s  G' Y9 w
  817. LDA DEC_L
    - a2 K/ [3 l/ c5 y2 v% [! \- S
  818. ORA #$30
    6 ~% t5 ?) C3 C, K. i0 g
  819. STA PPU_Addr,X. ]  e2 O$ ^( B; H1 ?; i
  820. INX
    ; ?/ o4 `. e$ F; n# e

  821. 1 ~* |- ?9 S9 G1 ?( A. K' I/ x7 E0 k
  822. LDA #'/'
    2 Y: j) P. t, D' @: l+ [
  823. STA PPU_Addr,X
    7 y9 _( z, P' Z8 a
  824. INX
    5 ^- ^& X8 o; |/ T7 L
  825. Music_Show_Total! r0 n+ G, U. V; t6 t. b& Y
  826. LDA #Music_Song_Total
    ; y1 k; j% U* R6 ?# m% v
  827. JSR HEX_To_Dec
    1 ~6 S; l4 B5 K& ~
  828. & H8 j" s% V% B3 v
  829. .IF Music_Song_Total > 999 w+ [5 f6 W2 z, {* S
  830. LDA DEC_H
    + Q9 z/ t: Q; Y
  831. ORA #$30# F7 b( y& n% Y9 m& m% i* P. `
  832. STA PPU_Addr,X
    + j! S& r  A* m
  833. INX* \) {$ B2 T1 z$ J, E8 `: F: q. [
  834. .ENDIF$ e; b0 M& z" I+ `1 y
  835. + F1 k) e4 `0 @5 E- ]
  836. .IF Music_Song_Total > 9
    9 g3 \; v/ i8 a
  837. LDA DEC_T
    0 K+ H# G2 V; v. ]$ l/ l- p
  838. ORA #$30
    8 n+ G, |) M, P8 ?4 m
  839. STA PPU_Addr,X8 Z  H" h' e: v: B# Y  A3 M5 P
  840. INX
    + H& Y" m! k) e6 }7 H
  841. .ENDIF7 b7 D, }# Z7 X: ]

  842. $ o. v5 e: }- d$ I7 a
  843. LDA DEC_L# ^$ D( z# S" z* Y6 g% ^5 g
  844. ORA #$30
    " H" ^. l# ~/ L" i8 Z" X3 F
  845. STA PPU_Addr,X
    ) G! s. d$ ^1 U1 h5 H
  846. INX
    ( K/ I4 L/ f1 c6 e* }& v& P
  847. , n4 W& T7 R' B
  848. JSR PPU_End4 G* |- c1 I6 ]9 r' I. A- U( V( D# J
  849. Music_Show_End
    5 m0 N) S; [0 h- t# x
  850. RTS: X! w+ Y# K1 s1 y* _
  851. ( z. h9 |9 }# ]4 ]# E
  852. ;==============================& b5 @& g) O0 p( {: E$ t6 F
  853. Time_Show;播放时间显示. s4 t' ^9 e$ Z+ h) n1 T
  854. JSR PPU_Addr_Set  U7 K+ S/ y# O& D
  855. LDA #HIGH(Play_Time_Pos)& A' q6 l% z" \! S3 N' t- q
  856. STA PPU_Addr,X- ?% A+ w, d7 q7 `9 {6 e
  857. INX' y2 W: S3 X+ j% E
  858. LDA #LOW(Play_Time_Pos)7 j& B' a) P% [6 C# p1 ?
  859. STA PPU_Addr,X
    1 e# E2 z9 W" {$ ~
  860. INX
    ' ]$ b3 G: C7 ~6 Z  R% o; e9 F
  861. Time_Show_H+ n+ I3 j5 a9 _5 ]  d6 w: x  u
  862. LDA Time_H
    / `6 S% L# ]8 ?/ m2 `
  863. JSR HEX_To_Dec- ?) O8 }4 ^( t" r3 u' Z  z0 a3 |* h
  864. JSR Time_Digit9 n* C+ A+ \4 ^' j
  865. LDA #':'
    . l, Z2 F" c$ l) J9 u
  866. STA PPU_Addr,X9 Y) a% o, X6 a  A: ?  k2 u
  867. INX/ A- r( Y" p' ?, E  k
  868. Time_Show_M- e6 x  p& y# E7 {/ D, {) u
  869. LDA Time_M
    9 \: X6 q& n/ N2 N. a) r- n
  870. JSR HEX_To_Dec. G8 y$ i  }6 M) D, h4 E
  871. JSR Time_Digit
    + D0 l6 }5 c8 S' q1 m, M
  872. LDA #':'
    # D# A0 ]- A$ k
  873. STA PPU_Addr,X: c$ N* Z8 z) R- ~
  874. INX" \$ q0 C) Z+ p$ R- ?" a" o
  875. Time_Show_S
    8 p) f" j( e9 t- e
  876. LDA Time_S, r$ M" ]: H# l; j
  877. JSR HEX_To_Dec" r. y  j* ^, _6 v; Z3 ?0 l, ?
  878. JSR Time_Digit
    : o" s& y* Z' e' J/ g5 l$ z
  879. JSR PPU_End
    0 N) o" ?1 ]3 v. j
  880. Time_Show_End+ t% X( \$ d& i1 m2 e2 G: v6 L/ _
  881. RTS5 p" L/ v1 o) c5 s5 K

  882. 1 X/ [* ?, {2 @" z! \
  883. Time_Digit
    1 f# _4 d5 d3 U9 t" t
  884. LDA DEC_T8 |) \5 h" Q% r$ h
  885. ORA #$30# F* d; {, M8 D- R3 _) i+ `
  886. STA PPU_Addr,X% H  c4 X, G& k, B# a
  887. INX; [8 C, i9 A% U3 S* O+ C1 t9 M
  888. LDA DEC_L+ h1 |; |0 I8 D; B! Q: N1 e" A
  889. ORA #$30/ C: r% Z! a+ s( r' E
  890. STA PPU_Addr,X& m5 _2 R4 F% o: n. \( N
  891. INX6 I& n# f6 ~  X9 t7 L4 x
  892. RTS; v4 ^1 p2 k) [* y. o

  893. 8 q" ^; Y4 M& a
  894. ;==============================, r* f0 k" F4 S5 A# y4 F% L9 L6 K  j* V
  895. Time_Count;计时1 F' K) B0 }* d, E& O
  896. LDA Music_State
    2 W. ?* x& g9 [" {! n' q- c9 g6 V/ e& m' z
  897. ORA Time_Wait_Cnt
    2 {9 M$ U+ U% O( q
  898. BNE Time_Count_End
    0 K3 p- F" K! Y' R  e
  899. INC Time_Cnt
    % S9 C! E/ p: k( }2 b
  900. LDA Time_Cnt$ e% `1 n5 |# O% r, s; E. I) u
  901. CMP #60
    7 X( W9 a3 Y) m& h1 n
  902. BCC Time_Count_End; G9 Q; H( I* \! V+ }
  903. LDA #00; c  Y7 W  O. t
  904. STA Time_Cnt  j8 X0 W4 r6 z% T, y. @# T
  905. INC Time_S
    , Q6 p7 g" ~* e1 o+ g  `% B

  906. * O4 |, b( e  c% k5 G0 i
  907. Time_S_Cnt% n  |1 B2 q7 \0 s2 q5 P
  908. LDA Time_S3 R. f' c' p) X
  909. CMP #60: U% L0 k& w/ G) v7 F
  910. BCC Time_Count_End1 Z; M: m+ L# U2 ]" t
  911. LDA #000 B* H: m8 `5 m: J+ H* ]7 [: h+ g
  912. STA Time_S+ M& J0 k$ T% U4 a4 b6 {1 v
  913. INC Time_M  t, f9 d; p% j8 c, i1 o

  914. * B9 p. e2 S! w
  915. Time_M_Cnt
    - S! T8 H! {% V3 |, B# ^/ e: Z
  916. LDA Time_M
    9 u3 x. {6 }0 x/ ]8 i5 a
  917. CMP #60
    ! K) I/ p2 `6 A& y% K# `
  918. BCC Time_Count_End8 Q# y  @7 R: n. {* z
  919. LDA #00
    , B, }/ Y7 p, r% Z. a
  920. STA Time_M
    , I; G! }2 T1 K2 ^) ?) F
  921. INC Time_H9 \( G) @+ p9 n7 `, A0 q2 M
  922. 8 R; ]8 m* S% a1 N- l3 E" p8 [( b
  923. Time_H_Cnt
    ; `8 O2 p8 ]) ^6 u. R. a
  924. LDA Time_H
    & O0 a# a/ J4 G' N$ T: W. L2 ]! ]" `
  925. CMP #245 X0 e8 Q/ I* w: P; j) C# |
  926. BCC Time_Count_End( R; u" a+ Q# f) }) K) a' z
  927. LDA #006 V9 S; {' Y( B, r. K7 a! v
  928. STA Time_H: n' P  g4 d" o8 Y/ Y
  929. 0 a- J- v, {: C. ?
  930. Time_Count_End' Z, u- H+ H6 ~( F. w
  931. RTS
    + j! y* X% [: f& y
  932. ! v$ Z+ o5 w1 v- v3 D0 }) j- Z+ N8 ~
  933. ;==============================+ r4 h" d& E1 P* o" K
  934. Time_ReSet;播放时间重置
    6 s( p! r6 g5 ^6 Q2 |# Q+ f- T; ?- p9 {
  935. LDA #$00
    ) n) U; x3 a5 G5 E1 W4 ?
  936. STA Time_S
    ! F  W% G2 {* a
  937. STA Time_M 9 b, h: v1 b& ?6 @( `" j3 w5 I6 x) \; S
  938. STA Time_H% a1 V: P" p, k8 z5 R. J3 _5 |
  939. STA Time_Cnt
    7 n/ V! G8 \' w1 c, Y8 J
  940. RTS9 A' ]( Q8 \- s% Q) E# h
  941. 4 X0 s; M$ c3 K- Q' e
  942. ;==============================4 B) @# C  H# O/ H& p0 W
  943. Music_Bar_ReSet;音乐条重置
    ! u9 ^. l! `, z* r7 c8 ]+ V
  944. LDA #$00
    ; V0 I; R0 Q$ N  V5 A  O
  945. LDX #$00
    # [5 t5 k* R6 x, h) s
  946. Music_Bar_ReSet_Set
    8 q# {2 j, e( E' H, {+ O/ b7 i
  947. STA Sound_Bar,X9 |3 v9 U0 x" H/ c4 x+ |& i  d
  948. INX
    " E2 ~1 h+ i5 X8 E* T( z4 W) d
  949. CPX #$10& Q* F$ Q* ]- X
  950. BCC Music_Bar_ReSet_Set
    ) u' D8 c, Q& r; J4 X/ \+ f  `
  951. RTS
      l/ I3 J8 j: \4 i
  952. 4 {# @, P$ X/ t6 k: M7 S- I
  953. ;==============================9 ~- N( q  x. ?" x
  954. PPU_Data;PPU数据写入
    . d2 ]: C8 F/ o* ]2 j9 L5 `0 U
  955. STY Data_L% s% a2 e* D7 @$ v
  956. STX Data_H  h- k% j7 X: ^' e% B2 D
  957. LDY #$FF
    ; y5 e/ ]2 A; s0 E& v
  958. LDX PPU_Cur
    8 j( U. _( W2 F/ O. S+ V
  959. DEX3 {# n- Y! A$ o$ l) v& O4 v: _6 Z& ^9 r
  960. PPU_Data_Beg, c2 g( L9 U* E8 P+ c0 J
  961. INX! |& r9 d, n9 k& _# C# r
  962. INY: ^- D( e! W/ [, H& {( ]/ ?, _1 w
  963. LDA [Data_L],Y
    ' G1 c+ V* v, Q
  964. STA PPU_Addr,X
    % a/ I9 ]% \# {
  965. BNE PPU_Data_Beg
    + Y4 t# s4 @6 P3 a7 R% H; [7 @2 F/ u, C
  966. STX PPU_Cur
    1 Y7 c9 g6 }; b4 _/ {
  967. PPU_Data_End
    0 D' q) s% @; {# o
  968. RTS
    $ g4 B5 O( @, Z! o- v* D: E

  969. ; B9 ]& N8 q8 p8 \- x- S3 D+ g/ C
  970. ;==============================
    ' m: r: L1 Q3 L. R6 m! h
  971. Music_Stata_Show;播放状态显示
    4 X0 Z* J1 o) _
  972. LDA Music_State4 _7 B3 i+ W. v- D6 M1 g2 @
  973. BEQ Music_Stata_Show_Play$ G2 V- ?3 c  y
  974. Music_Stata_Show_Stop
    0 B- J! N5 U' E% k$ `# b9 a
  975. LDY #LOW(Music_State_Stop). q0 E& c* U, o; l! r$ t
  976. LDX #HIGH(Music_State_Stop)! _; l' x8 `4 z( U( K. L
  977. JSR PPU_Data
    6 a6 j; a; j9 C; ~1 }- @- i
  978. RTS  |9 G9 p% b4 V& v
  979. Music_Stata_Show_Play2 c- M: l/ W3 c0 T" M
  980. LDY #LOW(Music_State_Play)* c& E: _2 H, U% v
  981. LDX #HIGH(Music_State_Play); y0 D3 ^+ B: E
  982. JSR PPU_Data7 ^6 u+ }7 ?# j$ Y" F9 y
  983. RTS1 X6 P/ ^% T  v; A) Y; h

  984. 0 d) U) x; B% Z" `6 i6 T
  985. .IF SOUND_BAR_SHOW_ENABLE
    - w! s5 j  h% `6 e
  986. ;==============================7 y" H& M1 T: L1 l# v" u9 t
  987. Sound_Bar_Text_Set;标题与音乐条初始化- D% f! Y: C& U5 J
  988. LDY #LOW(Sound_Bar_Text_Data)$ h" O2 i. F/ ?
  989. LDX #HIGH(Sound_Bar_Text_Data)
      f5 n# Y6 _8 [$ u& s' }
  990. JSR PPU_Data! t5 ?) D$ X6 m0 y, p. V
  991. RTS  m: P$ b1 O* U0 x9 j8 e* s
  992. ( Y9 T4 F0 [* B6 B! x
  993. .ENDIF
    % `' c2 |1 g& V" S( [

  994. 4 V3 X, q6 b, u8 z* Q& ]+ K% R6 u
  995. ;==============================
    8 f7 `5 C+ v1 }' p
  996. Set_NameTable_Attributes;设置命名表属性
    5 t; P* h$ t# \
  997. LDA PPU_STATUS
    ' F' b' g, r9 d3 j; I
  998. LDA #$23
    ' k- _# ^7 C" L- J
  999. STA PPU_ADDRESS+ k' q2 z, w& k7 e4 h9 O$ J. j! `
  1000. LDA #$C0
    " q; V1 q! e* k2 K) S
  1001. STA PPU_ADDRESS
    ( e' R! v3 U. ~8 s1 g
  1002. LDX #$004 z7 a! y$ q$ {" j3 ~  K5 t9 J+ r
  1003. Set_NameTable_Attributes_Write
    ! t$ g* ^! C5 E* G" K# }) I: y
  1004. LDA Palette_Attributes,X0 @- W/ ~1 v  Q2 M2 i" p) G& o1 W
  1005. STA PPU_DATA
    & ^: g# v. Z% A1 a( [7 \# V  z
  1006. INX9 c5 g6 C6 t* A: S# C' |/ I: V
  1007. CPX #$40
    ! L" _5 |+ V1 b
  1008. BCC Set_NameTable_Attributes_Write
    $ U5 |% \6 @* Q- K
  1009. RTS) i; h. ^- Y8 V

  1010. % b) V# k% [/ s
  1011. ;==============================0 H$ ]3 k" z1 f% m. s
  1012. Set_Palette_Color;设置调色板数据
      p! Q) L3 Y- v* W6 h2 X9 p
  1013. LDA PPU_STATUS* d$ ^/ d3 ^8 p! w1 i3 o$ A$ b" h
  1014. LDA #$3F
    & Z- r1 W$ a& ]. c$ e, z# ~
  1015. STA PPU_ADDRESS- e5 L& U  U2 `: y% y! D
  1016. LDA #$00/ b2 Q+ ?* Y* {% B. p. c' u, e, F
  1017. STA PPU_ADDRESS" O* D$ X; {7 m& v
  1018. LDX #$00
    1 H$ Z" N& _. H- U0 ~
  1019. Set_Palette_Color_Write
    ! c' |6 n$ C* c0 Y
  1020. LDA Palette_Data,X
    ! a) C( y2 {3 n, L( p6 E
  1021. STA PPU_DATA1 S) I9 g' A1 v+ j
  1022. INX
    ; k7 ?) b7 J. d) W, Z
  1023. CPX #$20
    % T& W% t% ]& {1 K- A9 T0 L3 u
  1024. BCC Set_Palette_Color_Write7 k- U" d" R0 p
  1025. RTS
    ; x) s: {0 V  f0 w

  1026. 0 I' K& F& r; z% T5 w& H
  1027. ;==============================
    / H6 l6 e+ x9 H/ t% O7 E
  1028. Init_Palette_Addr;初始化调色板数据
    5 a4 o8 n* H& Q9 \8 b. y
  1029. LDX #$00+ g) x9 f( y4 Y" D, g' l; _4 ?
  1030. Init_Palette_Addr_Write
    1 s8 P( [0 |* n' p1 O% `
  1031. LDA Palette_Data,X6 s1 K* j' y* z0 f6 L! j
  1032. STA Palette_Addr,X
    # v0 f- A/ E; I, x. E8 `
  1033. INX
    7 l& e5 D$ h! q( j: e
  1034. CPX #$204 J7 t2 @9 E* Z, T& ~3 m
  1035. BCC Init_Palette_Addr_Write8 r9 \# [* u3 p" V8 W0 g( t
  1036. RTS
    1 S% H9 D) G3 j% }8 p
  1037. / [" o5 h0 r9 D
  1038. ;==============================
    2 X! b# r) a, c4 [0 X. |. ^$ u
  1039. Update_Palette_Color;更新调色板颜色( Q0 B& J  }& C) c% H
  1040. LDA Show_Track_Name
    / ^, B7 N3 Q4 G
  1041. BNE Update_Palette_Color_End6 u. G) l5 l! G) F
  1042. LDA Palette_Update_Flag0 N2 \5 _/ X' q! B) o! E
  1043. BEQ Update_Palette_Color_End
    % ~' n+ K2 u8 j3 a! N+ O/ x, l9 C- g0 n
  1044. LDA #$3F  J+ k7 J2 @0 A- c9 d* m
  1045. STA PPU_ADDRESS
    9 H$ n. ?  U  x
  1046. LDA #$00  I  W) u, r0 y) T6 y! k! g" x
  1047. STA PPU_ADDRESS
    ) i/ K  |: L6 H4 u" W
  1048. LDX #$00
    6 A; @6 \4 r- i- D+ R5 {
  1049. Update_Palette_Color_Write: o1 u" p# a- O% M( r
  1050. LDA Palette_Addr,X
    ; {9 K& I# s) [) V' _5 T1 Z1 m
  1051. STA PPU_DATA
    8 G$ e! k6 B- l- l
  1052. INX2 w* U$ P: \  j% W" _1 y% \
  1053. CPX #$20
    + E. r. ^8 j. k" x
  1054. BCC Update_Palette_Color_Write
    . b" F3 `1 R" s: F$ K
  1055. LDA #$00, u) F' R% M3 D4 e& Y
  1056. STA Palette_Update_Flag
    8 S2 f4 h, f7 [# b1 A7 f3 E0 A
  1057. Update_Palette_Color_End
    4 h. s+ A* }# g
  1058. RTS% v9 b& T" g7 c0 W: V
  1059. * N- m* ?; G3 g
  1060. ;==============================
    # b; m- H& K' ~1 h' R
  1061. Update_Palette_Data;更新调色板数据
    # S; {1 n" v1 V5 N# [" M: m
  1062. LDA Show_Track_Name( r5 k5 n  h# @- d5 U
  1063. BNE Update_Palette_Data_End
    , F7 r- e8 B; l0 N
  1064. LDA Music_State. r% \+ e) }9 {( ^. x
  1065. BNE Update_Palette_Data_End
    + @. F- y9 U4 v! a* x3 N5 U
  1066. Update_Palette_Data_Check
    6 y/ Y* P& ?( s3 r3 z- [  J
  1067. LDA Palette_Wait_Cnt
    ' Z! {# ?  R  e& F# g% x
  1068. BPL Update_Palette_Data_Check_Over7 I2 X' I% I3 x( @  y
  1069. LDA #Palette_Update_Interval
    4 k3 P& D. x6 h5 _/ N
  1070. STA Palette_Wait_Cnt  j: u# T. O- N/ u+ T
  1071. Update_Palette_Data_Check_Over/ B6 u2 d9 s" O) ^4 Q2 D) u% N
  1072. DEC Palette_Wait_Cnt  L" E& k8 S% i2 T4 x, x
  1073. BNE Update_Palette_Data_End5 z6 p/ \: ]3 j: n
  1074. INC Palette_Update_Flag! v% h2 m9 R/ j: J$ s0 l: N
  1075. LDA #Palette_Update_Interval
    4 c9 ]8 Z- y7 c
  1076. STA Palette_Wait_Cnt
    * b+ u! Q* k5 Z$ P" P
  1077. LDA Palette_Update_Addr* @+ [( ?' x. U8 @7 P" z( R/ s
  1078. CMP #Palette_Update_Max
    % E( o5 [+ H  @8 I, K
  1079. BNE Update_Palette_Data_Set$ ]# {2 }7 g* X) ~6 w
  1080. LDA #Palette_Update_Min - 1' Y7 \+ u+ _! p3 y
  1081. STA Palette_Update_Addr
    1 _% k& L5 J, m" u0 O
  1082. Update_Palette_Data_Set9 P1 J% x2 E4 k5 f' p6 n* e# `2 K8 W
  1083. INC Palette_Update_Addr
    7 ~+ L' {: G# m& J
  1084. Update_Palette_Data_End" h# i- u6 e- n1 L: \
  1085. RTS7 T8 |( F% F- @! F  ?: b

  1086. , r3 E5 O* n" u5 L/ e) `# B
  1087. ;==============================
    , Q* G1 {( N6 L8 }0 `
  1088. Show_Music_Text;显示静态文本
    + \$ P7 a) O, y9 s% D
  1089. LDX #$00( u& l* j' Y7 `- a( w0 u
  1090. Show_Music_Text_Set
    * c; E; Y( f3 u; w* Q1 m
  1091. LDA Static_Text_Data,X
    0 X9 S* R# a: v% }
  1092. STA Data_L
    4 W$ x, ~+ g% A; s
  1093. INX
    - B1 X. h2 ~! M: D
  1094. LDA Static_Text_Data,X
    $ D; l% L9 `9 W7 l
  1095. STA Data_H  A* m. n+ Z& b/ w6 H* o
  1096. INX- E5 G  e: ?+ T! w2 r
  1097. LDY #$00/ R  _1 Q* g! n& V! G6 P; O
  1098. LDA [Data_L],Y; ?; \5 J# [. @7 ~4 i
  1099. STA Data_Cnt& {5 t/ ]  |, q1 ]/ z- E2 \
  1100. DEX# |  C; `) j' Q8 W& P' a
  1101. DEX
    0 X( r9 I' h' p1 Q- z
  1102. LDA Static_Text_Pos,X
    + @: v& q0 q) [: |6 Q7 P
  1103. STA PPU_ADDRESS  }) E. E2 A, |! o2 K
  1104. INX
    $ c& v) b0 G; _" _2 O  j1 w5 p
  1105. LDA #$202 }' ]9 K$ W3 S
  1106. SEC( @* Z- g$ V! {% C- d. s; C" g4 E
  1107. SBC Data_Cnt1 j9 J. X" _  ]. x$ H
  1108. LSR A  f: b2 o! b# Y. h; V6 j0 Z
  1109. STA Data_Buf
    - w; P- }2 y* U1 W* S
  1110. LDA Static_Text_Pos,X9 _9 u. B; V! v5 p$ i! }; A, q
  1111. AND #$E0/ d. X6 y8 D$ S4 X0 J" H+ l+ W8 M
  1112. CLC+ k: a4 s* d% A( v& N5 j
  1113. ADC Data_Buf
    5 _* _) x: e2 _
  1114. STA PPU_ADDRESS! Q8 Z  ]* v. I% {8 z
  1115. INX0 B/ u( ~) G' M! f
  1116. Show_Music_Text_Set_Write+ c) }' Y* M! x0 Y
  1117. INY+ m% T/ Z6 J) T; C5 v" C& ?
  1118. LDA [Data_L],Y
    ! J' o, M0 E+ @( Q( |2 o0 i
  1119. STA PPU_DATA) i' K0 {( }# C8 ]- j* D5 a
  1120. DEC Data_Cnt
    & u5 S7 E  B0 C# m; c) Z7 y8 o9 |2 I
  1121. BNE Show_Music_Text_Set_Write5 ~& I" ]: z0 Q1 K
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos
    ! q3 i+ a. m1 n0 O* o: m1 {
  1123. BCC Show_Music_Text_Set
    7 v1 I6 d& S+ E
  1124. RTS3 n+ x# m+ g$ h8 W* _
  1125. * }$ l& x3 U' P4 e
  1126. ;==============================
    / h) B9 i6 i  ^* R
  1127. .IF Track_Name_Pos;显示曲目信息
    6 r' v$ B, ~, `3 O0 E
  1128. Show_Track_Info
    8 M7 e7 i# m6 n* ^& `
  1129. INC Show_Track_Name# d7 T6 c) Y6 A
  1130. Show_Track_Info_Clear' W$ y5 N% e- H$ W: m' U
  1131. LDX PPU_Cur
    . N7 R9 t& s/ x: K: A; T2 j
  1132. LDA #Mode_Clear
    - M5 u0 F0 Q& @- Q' H, d6 B
  1133. STA PPU_Addr,X
    ; k3 x# K  F1 |+ i5 ]
  1134. INX% n6 k9 f5 g# E* H
  1135. ( E- \/ A- p; j6 P  D
  1136. LDA Music_Last: i; ?4 Z2 m, }& P
  1137. JSR Show_Get_Track_Name_Center_Pos
    ' F6 K6 ]3 P8 ~) |
  1138. Show_Track_Info_Write_Cur+ R+ E; K7 _  R/ _  r
  1139. LDA #Mode_CntLine
    8 B: i; t/ v- x$ O, g4 K: W/ n
  1140. STA PPU_Addr,X) E  ?- ^! ~: H" E
  1141. INX
    9 V8 k' @$ e4 V" u$ J, g
  1142. 4 V" ^/ }4 a$ s& Q
  1143. LDA Music_Cur
    % z2 m  ~8 ~; A5 q
  1144. JSR Show_Get_Track_Name_Center_Pos
      g  Y# w# z" r6 Y3 L

  1145. 9 i/ v, G  F" l0 ~/ k
  1146. Show_Track_Info_Write_Cur_Data
    7 S4 n& _& C0 v9 q4 T3 P! Z  s
  1147. INY1 Y8 m& e  @; u$ v0 ~
  1148. LDA [Data_L],Y
    9 P! r7 K. h/ D! o: ?5 b' d0 _
  1149. STA PPU_Addr,X
    - X% R9 w  c  Q0 ^; Z8 r' K
  1150. INX# Z2 @0 h6 C* V: z' M# Z
  1151. DEC Data_Cnt% |4 p- K9 w' Q% T6 z
  1152. BNE Show_Track_Info_Write_Cur_Data
    2 t, a3 m6 N$ n8 {1 Q1 G- I
  1153. Show_Track_Info_End
    ( g- F" d" m. F( ]. H/ p
  1154. STX PPU_Cur: @" W4 T7 @" d. P2 H1 ]& M6 r6 Z$ o* r
  1155. RTS
    9 z- g; e# ~; f6 D9 K8 U& r
  1156. " c4 J$ z  p) u$ u+ p
  1157. ;==============================
    2 X  q- Y8 h! E
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置; P3 b/ m$ U7 l2 S( ?! Z* r  n$ f& r
  1159. ASL A6 ~4 J$ y; }7 O
  1160. TAY0 V1 |. g2 t, M
  1161. LDA Track_Name_Addr,Y
    + g, F. Z0 q6 _0 M( p$ |% t/ I5 V2 Q
  1162. STA Data_L, Y3 b7 }2 k0 T, f6 X; X; r3 D
  1163. INY7 Q7 a% w) f% g* H( M/ K. @
  1164. LDA Track_Name_Addr,Y2 z' l5 e$ e: P6 a, B: a7 M
  1165. STA Data_H$ r  W+ q1 n# v. F: Z: Z! O
  1166. LDY #$00" y7 J7 h7 r) M
  1167. LDA [Data_L],Y
    3 d* A; ?# [6 D/ R  r# y/ i3 p! V9 X
  1168. STA Data_Cnt
    $ S; p% ?5 m. m8 H& p/ t: V3 x
  1169. LDA #$207 U; W0 q: o! h- t$ @! Y  y' A
  1170. SEC' O" v  ^( v: k0 [4 E
  1171. SBC Data_Cnt
    8 n7 ^. z! C- H! D( _) h
  1172. LSR A
    * @# w' Q3 K# F& q- k
  1173. STA Data_Buf. h- Y0 c1 X1 s! @2 P
  1174. LDA #HIGH(Track_Name_Pos); ?( m7 k* j; ^7 j3 h$ N4 d/ k- X; W
  1175. STA PPU_Addr,X6 N- \# J, E9 U2 i# r! B. j
  1176. INX
    # t+ J! G8 ]* f, R  x
  1177. LDA #LOW(Track_Name_Pos)' [. z2 M$ i) k$ y0 R8 [
  1178. AND #$E0
    - k; F6 b3 Y+ g/ o* S: I0 q
  1179. CLC
    : L# b  Y+ v* `7 A$ x+ ?4 x7 v
  1180. ADC Data_Buf
    : J3 V1 |! X7 i7 r7 n
  1181. STA PPU_Addr,X
    . d0 M) ]2 g! Q: k3 {
  1182. INX- K" @6 t5 A. |0 ?7 b- M5 f
  1183. LDA Data_Cnt! X: V' t% s2 t
  1184. STA PPU_Addr,X4 K8 N/ D! U" z; _8 l
  1185. INX8 [1 i9 z' W! w0 u) A1 T" K7 w
  1186. Show_Get_Pos_Center_End
    ) s  r$ M! w1 O- U
  1187. RTS
    ! M7 B! D" c) y" t
  1188. .ENDIF7 W+ b. w# s3 ]' L8 j& ?( a& G( J9 G
  1189. ; N+ A3 W% F/ q, w6 L% ?9 x
  1190. ;------------------------------
    7 ~# B. \; m- S8 ]0 _5 H
  1191. ;命名表数据
    " X7 n% G% [/ M1 k) Y: p( v+ A9 G8 Q
  1192. Palette_Attributes' s: r, d$ Z6 K5 V( g0 _
  1193. .IF SOUND_BAR_SHOW_ENABLE8 J  f% m, Q: U! `5 V; P
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$005 f6 C( e0 h. c; r3 ?
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA! B% n! l+ ^9 Q5 K, C9 i
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$558 M" e4 I' g% v4 _
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    " |+ z; G+ T: _( ]: C$ ~! b. \" u; F
  1198. .ELSE
    4 Z# X4 o/ |3 m* I
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    7 U- N4 d! w8 O- A0 e/ p
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF* S) G6 F1 d, q" ]% t$ K
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55% [! v+ e3 x5 N( z6 g( O7 M. N2 n1 Z6 i& S
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55$ e: n6 Z+ H# G. u  N
  1203. .ENDIF" i  P& x# X/ b* y3 h$ q: X
  1204. 1 p( f% a( M% ^! k/ i8 f% \3 y
  1205. ;------------------------------
    " y/ O, e' `# k2 u1 l$ o! l
  1206. ;调色板数据
    1 U  A0 r3 a* W
  1207. Palette_Data
    - Y' C+ h* X! E$ t$ e
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F+ F* c+ S6 y! B# o( |4 |
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    ( X9 u" n9 _6 A0 Y/ y2 p
  1210. . g8 r0 l, i  ?) g! G- A& B
  1211. ;------------------------------4 l! ~9 u0 {8 E7 [
  1212. Static_Text_Data4 Q# w  |1 I# x! f5 q( `0 [. t
  1213. .WORD Static_Text_Title_Data- [/ Q- M5 d; T# C7 }0 o
  1214. .WORD Static_Text_Author_Data% i3 x1 g: B) t: S% ]- k. @
  1215. .WORD Static_Text_Date_Data
    ! _6 }8 o0 Y8 e7 T! d0 o
  1216. Static_Text_Data_End2 u# G) m: R* Z# N0 `  h" {

  1217. 4 t, y/ P3 \4 o! p) P" l5 W4 Q: s3 u
  1218. ;------------------------------
    6 O( y. P$ [% @' |' i
  1219. Static_Text_Pos
    ' P2 O; j" N0 y) f7 y; G0 q
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    3 `6 o. F- h+ I8 C8 }* Y: B- e
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    8 d: n; r. u6 Q) e4 Q1 B
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)0 u! F( x% \; q5 s; H
  1223. Static_Text_Pos_End# W4 X% Q" S% W; s; a

  1224. / a4 p9 i0 D6 L
  1225. ;------------------------------, c9 F. `0 ~8 T; _0 p! y! V
  1226. Music_State_Stop
    : l, ~  @7 {3 q; a/ S3 O- {
  1227. .IF SOUND_BAR_SHOW_ENABLE6 y/ q5 z" ^+ q# G
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$002 C$ L% U3 y3 ?+ {3 ~0 Z$ @
  1229. ELSE
    - M+ q0 y9 J  G5 y* F  J( R* z. ?+ I
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    2 h0 ^9 Z9 z: {# z
  1231. .ENDIF
    3 I  [: G: V- I+ q+ T& Z2 {6 ]4 T
  1232. Music_State_Play$ o# b& D- i2 ^
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    % n! m; ]+ {3 e1 j1 F1 J
  1234. 3 ~" d& ^' |7 `# p1 V* G# B
  1235. ;------------------------------( ^- Y5 _8 e# X5 X" O
  1236. Sound_Bar_Text_Data;声音类型文本( B; C. O* f- b
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)5 b1 g1 _6 @, \; q  M
  1238. .DB "SQ1-",$FF
    . Z8 S6 D# L/ A# v& _/ V
  1239. .DB $FE,"SQ2-",$FF5 M$ e% B7 p* @% n
  1240. .DB $FE,"TRI-",$FF
    & n$ I- t9 _. K
  1241. .DB $FE,"NOI-",$FF
    2 ^/ C/ X& C, `1 }
  1242. .DB $FE,"DMC-",$FF,$00! q8 n. P1 ~6 `/ p5 c) x4 P7 A

  1243. ; ^$ i: _( v' S/ |* w
  1244. .IF Track_Name_Pos
    ! I+ o5 d4 N; z
  1245. ;------------------------------; X9 P0 k- k* _) C' W
  1246. Track_Name_Addr;曲目名地址索引
    ) ?8 @+ O/ }( X; j- ^, S; S
  1247. .WORD Trackr_013 X* u9 `) V4 N4 b
  1248. .WORD Trackr_02
    , X" D: P. I; z7 p# p! `
  1249. .WORD Trackr_03
    ) ^% k- a& M% X$ X; Q
  1250. .WORD Trackr_042 q' [. k  r  p) K$ A
  1251. .WORD Trackr_05, {" \  g- j. P" ?
  1252. .WORD Trackr_06
    2 p  `9 W/ }5 y# n1 D8 l3 d" j
  1253. .WORD Trackr_07. W' ?0 J$ j0 k2 N7 Y# p
  1254. .WORD Trackr_08
    4 G5 _) }7 `' S0 \6 Q5 n, m
  1255. .WORD Trackr_09+ o6 F( _3 n! g' g1 b6 N3 o0 ~
  1256. .WORD Trackr_10
    ' k$ a8 ~' D; b" x) {  W
  1257. .WORD Trackr_11$ d5 X/ u) t0 r' M/ G* h5 K- k
  1258. .WORD Trackr_12" U8 R6 Z' Q4 T0 y) U( e  w
  1259. .WORD Trackr_13
    6 a9 ~1 }5 d8 m
  1260. .WORD Trackr_14
    5 s) |/ ~% @8 y# M9 n% x
  1261. .WORD Trackr_15
    " Y4 W( d( G; h: ^. _
  1262. .WORD Trackr_16
    7 Y7 j/ Q; a' V, W
  1263. .WORD Trackr_17
    / d$ B1 t0 u1 L
  1264. .WORD Trackr_18
    , K+ k: l; U, Z) M6 x- g- B
  1265. .WORD Trackr_195 B( {$ g! G  O# p. P
  1266. .WORD Trackr_208 F! b' G! y9 f8 A1 P
  1267. .WORD Trackr_21* }2 R' H1 h$ g' n8 ^: M
  1268. .WORD Trackr_225 d- ~' I: W4 j8 P" D
  1269. .WORD Trackr_23
    + T: R* |2 m, Q: t* P8 t
  1270. .WORD Trackr_24
    9 m$ V/ V4 a3 _1 k8 v% o+ F  Z  Q
  1271. .WORD Trackr_25
    ) h& T! ~2 Y7 `! \. q+ Y% @5 J0 i
  1272. .WORD Trackr_26
    - u/ F0 [* O& o* k. H
  1273. .WORD Trackr_273 j# l' y2 C5 i
  1274. .WORD Trackr_28
    2 {6 ?" q, v8 L6 k$ v% T
  1275. .WORD Trackr_29* t, F/ `3 P# x9 L- Z! p# J6 L
  1276. .WORD Trackr_30% A$ r" O" O' P: S  a
  1277. .WORD Trackr_31& B! ^  U6 [, r5 g4 R
  1278. .WORD Trackr_320 i* Y5 i/ C, p- g4 E# k  r
  1279. .WORD Trackr_33, X; C) M! p2 L, C+ p
  1280. .WORD Trackr_34
    * _- T6 t8 c/ U2 o% ?4 h
  1281. .WORD Trackr_35* I* v8 E6 o# Q8 X- }
  1282. .WORD Trackr_36
    $ s, ?  r; i, m2 ]3 u5 y# O
  1283. .WORD Trackr_37) a0 I5 S& ^8 }9 Y
  1284. .WORD Trackr_38. g9 a& q6 q7 {" u* J! s
  1285. .WORD Trackr_39
    , Y5 V7 j1 C" S0 d
  1286. 4 ?- @- e9 l$ v1 O) k" \% m0 E
  1287. ;------------------------------8 c. Y  |6 p8 K9 v3 @5 I; C8 ^
  1288. Trackr_Name_Data
    ! V* S6 h( l1 O" I- T, b% a
  1289. Trackr_01 .DB $05,"BGM 1"& _2 f( `' @, x, `
  1290. Trackr_02 .DB $05,"BGM 2"; I/ V/ R0 _0 P
  1291. Trackr_03 .DB $05,"BGM 3"5 \1 V/ L& j) n* q$ v
  1292. Trackr_04 .DB $05,"BGM 4"0 Y$ w( [, B4 ?% R6 f' ^5 Y
  1293. Trackr_05 .DB $05,"BGM 5". N0 x3 g! U; }# e
  1294. Trackr_06 .DB $05,"BGM 6"# H  w8 r; J7 T" ?6 R* }; f. W
  1295. Trackr_07 .DB $05,"BGM 7"1 o8 x5 J% q# U# @6 v4 C
  1296. Trackr_08 .DB $05,"GREAT"
    9 F0 ]7 P/ }2 w9 |5 k! u8 s+ E9 u
  1297. Trackr_09 .DB $08,"BOSS BOM"& Z: U2 w5 R! i! k
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    5 V$ S7 ^) }9 {+ m
  1299. Trackr_11 .DB $07,"P CLEAR"9 w8 d; ~! g, P1 O0 z
  1300. Trackr_12 .DB $07,"A CLEAR"
    # n4 W5 d+ V4 {/ K8 e& c# v1 d
  1301. Trackr_13 .DB $04,"OVER"
    ' D  V8 R3 L$ v' z: b
  1302. Trackr_14 .DB $06,"ENDING"' D) L) D( b) `: V) A! e4 ~
  1303. Trackr_15 .DB $04,"SUTA"
    1 g% s: D, [9 ~4 L* r( B
  1304. Trackr_16 .DB $07,"THUNDER"3 L- v( B: N# Y' D8 I
  1305. Trackr_17 .DB $04,"SHOT"
    " S3 N+ c/ w" {- m
  1306. Trackr_18 .DB $05,"LASER") n3 G2 y' Z: L) q' F3 W
  1307. Trackr_19 .DB $06,"SPREAD"# u) s: c; R3 b" P# ^' g% Y
  1308. Trackr_20 .DB $04,"FIRE"% j$ }; i# `% s4 b
  1309. Trackr_21 .DB $06,"B SHOT"
    ' t9 U% x# m' @. U3 o4 q
  1310. Trackr_22 .DB $08,"T DAMEGE"
    6 a9 J% C7 [3 H1 c( I  O
  1311. Trackr_23 .DB $07,"HARETSU"1 x2 o. K* c( H- h+ B2 j* P
  1312. Trackr_24 .DB $05,"T OUT"8 ?3 ^* p7 a5 w. ^* Y2 o
  1313. Trackr_25 .DB $05,"Z OUT"
    2 ]' y: x- _9 L7 X$ Z  ^
  1314. Trackr_26 .DB $05,"A OUT"
    % P9 i8 w0 v2 l, ?$ F
  1315. Trackr_27 .DB $04,"ROLL"
    + u, E' j0 `8 r! @; X, n  G# R
  1316. Trackr_28 .DB $06,"APPEAR"
    ; \: I: w* b! l3 J( y( x# r; p4 Z
  1317. Trackr_29 .DB $05,"POWER"7 I% \2 K6 O9 E
  1318. Trackr_30 .DB $07,"BOKK BK"5 u& }' Y' |$ o
  1319. Trackr_31 .DB $08,"BAKUHA 1"' s& C: H* s$ u' F0 }+ @
  1320. Trackr_32 .DB $08,"BAKUHA 2"% `! h' D2 P) T3 E0 H2 a
  1321. Trackr_33 .DB $05,"ARUKU"
    " K6 J3 e4 B( c4 i
  1322. Trackr_34 .DB $06,"JIWARE"
    ; ]# i  M% f$ S# X9 [
  1323. Trackr_35 .DB $05,"SILEN"( t$ g! M1 ~6 n' H- Z* z  E2 j
  1324. Trackr_36 .DB $05,"P 1UP"5 G% C: f. d2 H; \& S: l' B
  1325. Trackr_37 .DB $05,"P OUT"# _! b/ M3 A/ t& X
  1326. Trackr_38 .DB $05,"B OUT"4 b- F5 Z: r; o0 _( E  ?
  1327. Trackr_39 .DB $05,"PAUSE"
    8 K' ^5 w' V7 F: G* r  m- I, t
  1328. - l" Z; b2 I- }: I1 d
  1329. .ENDIF) A5 C5 s1 M& O- m8 ^, w" }* r0 a2 C
  1330. * F8 d4 ]: _" y6 D. m$ K
  1331. ;------------------------------
    4 G& k- c% T; [8 j/ q7 X0 n0 g
  1332. Static_Text_Title_Data;静态文本数据& e/ \1 A' {0 R" f' n) n  A1 }
  1333. .DB 123 n3 O4 w7 Q% _6 v3 S
  1334. .DB "SUPER CONTRA"
    ' q- A- O5 r1 l" ^* B4 n
  1335. Static_Text_Author_Data
    8 E1 N8 A- _: }
  1336. .DB 233 {* ?6 Z/ k4 y
  1337. .DB "EXTRACT BY FLAMECYCLONE"; |; o+ {/ U8 J  n
  1338. Static_Text_Date_Data
    5 N7 Y' w0 K" L7 w: p: K
  1339. .DB 10
    # P% K8 e* f9 a- Z2 t
  1340. .DB "2023.07.11"
    9 }' j& ~/ x2 q. q+ }8 p

  1341. - m$ O) A' X' }: `( c3 T! @
  1342. .BANK RESET_BANK & BANK_DATA_MASK# a' \* C( P/ i- K* N" u  y
  1343. .ORG RESET_ADDR
    ) X% |" a! `- r+ c

  1344. # p1 w/ z% s5 ^% |1 |! u
  1345. : A; {0 l4 U7 c+ [2 }" `' [
  1346. ;==================================================
    " z" `; c. _* }* j
  1347. ;切到主程序bank2 X6 d/ [% G, v) }8 S/ F
  1348. SwitchMainBank9 I# @7 [, O! ^2 @8 f( r" E
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK! ^0 w. @! c: _6 s0 M7 q
  1350. JSR SwitchBank8000: _1 C# y) s6 m5 ]/ ]7 G
  1351. RTS
    . l  A9 x& S. x( N

  1352. / S+ J* ?1 `4 n/ j. _1 O
  1353. ;==================================================
    ( |6 \) u& [! `. _0 k
  1354. SwitchBank8000;切换bank到8000-9FFF$ f( u7 \& n" A+ I
  1355. PHA
    7 K; |0 k) I7 Y" ]# H. Y8 {
  1356. LDA #$06* S" M* Y% [8 V4 D" q% v
  1357. STA MMC3_BANK_CTRL4 x. f, x: k5 n0 M! m
  1358. PLA9 I) k8 D$ V( F/ v- t
  1359. STA MMC3_BANK_DATA+ j. N: ~2 i3 W! U$ s" G% T
  1360. RTS
      S9 D5 q& b5 D( w; p# p2 l

  1361. 1 `$ b) _$ Z1 c1 m' J6 Z
  1362. ;==================================================
    1 K4 c$ f! Y6 z5 h  Q6 Q2 U  a
  1363. SwitchBankA000;切换bank到A000-BFFF
    9 \; E7 O# x. j! a- s
  1364. PHA! _0 v2 E1 }5 A9 n* W; g- R; N% g  S# A
  1365. LDA #$07
    6 w0 M2 R, U& M& W8 P9 H
  1366. STA MMC3_BANK_CTRL
    " f/ s, p. s2 Y3 j# K! k" u# M+ V
  1367. PLA) }% R! _! ]$ `; }& u3 i$ S; g
  1368. STA MMC3_BANK_DATA
    $ d; c- W8 x% ]8 C8 v: O
  1369. RTS) g" w- b* Z: q$ P9 x
  1370. - H4 a& D3 t% S2 g8 X
  1371. ;==================================================# b' R1 Z& S, B% M; T
  1372. Sund_Bank_Init;音乐bamk初始化' N6 J1 [0 t& d9 J
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
    7 c! j3 V, L/ e( l
  1374. STA Music_Bank_8000
    9 ~  f5 C+ Z' e( t
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
      s  w. }  ~% G6 N& t7 `! @
  1376. STA Music_Bank_A0009 F' W/ A  L  w6 \  f# Q4 F
  1377. RTS
    0 k+ I/ {9 {! ^! y! e9 q* T; j

  1378. 6 X6 P$ t( k- a5 V6 s' V
  1379. ;==================================================
    / g# r. G# f9 E* w# }
  1380. Sund_Bank_Set;切换音乐bank+ g$ ~, G. C7 C8 I/ |9 m
  1381. LDA Music_Bank_80003 q% p7 U1 ]3 r2 c' k
  1382. JSR SwitchBank8000
    2 `. u5 p  Y% x. y
  1383. LDA Music_Bank_A0000 x/ I& w: {3 F9 j6 d' x. m1 g  o; J: h4 Q
  1384. JSR SwitchBankA000
    + T+ R( \% T# c3 V5 Z5 N. \/ k
  1385. RTS
    : C  j9 w) _5 _
  1386. ( P/ L8 l! f& c" I, [5 D1 I
  1387. ;==================================================
    3 G/ P. c: a  B' ?3 ~
  1388. Sound_Init;音乐初始化
    6 ]3 i* s! ^/ D" x( T' E, k
  1389. PHA
    " G" y! ~& z* m. n" l
  1390. JSR Sund_Bank_Set1 n4 p' X9 o7 f2 P9 r/ u
  1391. PLA" t+ }: N* v# H) ^
  1392. JSR Music_Init_Addr. ?$ R: o3 T3 Y9 l& D
  1393. JSR SwitchMainBank+ s) R* a! |- `  a; s" i2 s4 T, t

  1394. 9 X; c. \) X( ~
  1395. JSR Music_Bar_ReSet5 A$ V9 J3 C# n4 f
  1396. JSR Time_ReSet) w: e, g9 S4 {# }! l
  1397. LDA #$00
    - ~/ N9 f8 _6 Z+ {8 |! d( @
  1398. STA Music_State
    0 ]7 v- m( g- d6 n) Y7 t
  1399. JSR Music_Stata_Show
    ) u6 Y9 j, t1 F2 Q3 d0 K
  1400. .IF Track_Name_Pos
    , j+ ]' M9 m$ G3 d3 {* t( A
  1401. JSR Show_Track_Info% w$ a. I' A$ G2 `+ n  p4 Y
  1402. .ENDIF+ P3 k- R1 {4 a5 M! G3 U1 w

  1403. " C) k% G& I1 o9 i
  1404. RTS
    6 L, y; ]% i' m9 G2 g
  1405. ( _' ?$ y7 ?) J/ q7 |! T
  1406. ;==================================================
    ; f* p8 S: U. D5 K. X
  1407. Sound_Play;音乐播放
    ( Y# F( J4 Y1 Z4 T* j
  1408. PHA
    8 ]- K7 t: z) w
  1409. JSR Sund_Bank_Set) m0 e* O7 G$ s
  1410. PLA
    ) o! X" n% C. c6 k( |! @
  1411. LDA Music_State
    3 K% q9 v+ M1 Y; }
  1412. BNE Sound_Play_End
    : {& V" X; _3 r. s7 _& I6 x; t
  1413. JSR Music_Play_Addr
    9 X( K/ F. ?3 u  C2 R) i4 N# `
  1414. Sound_Play_End* `: Z) T5 |. A) N* ]; P, c
  1415. JSR SwitchMainBank
    & B" V: C  s  f
  1416. RTS9 O/ n1 u/ p" d* p% w. x

  1417. # B; p, X6 X2 X, W3 z' A
  1418. ;==================================================
    4 A/ ^4 k3 _# ~2 }' h
  1419. .IF Music_Reset_Addr6 M9 g( q4 s1 C
  1420. Sound_Reset;音乐重设(如果有的话)6 d) U5 e; z3 u! ~6 E
  1421. JSR Sund_Bank_Set
    ! O3 p2 ?9 `: |8 d8 B! ^
  1422. JSR Music_Reset_Addr
    * c' g; I" B" w3 f: l+ \+ K
  1423. JSR SwitchMainBank( k4 P& J, Q9 C. ~$ c
  1424. RTS  Q- F2 p" u; ?  W
  1425. .ENDIF2 c0 e, w! u' n7 r4 ?

  1426. : M5 \) N; K6 d7 Y( J' d
  1427. ;==================================================
    8 u7 _. C2 C$ G( T
  1428. MainLoop;死循环9 \! K* m6 u4 `% A  a
  1429. JMP MainLoop( ?  g/ T8 x0 o* ]* E
  1430. ; Z) u! L, S/ w- G
  1431. ;==================================================8 F% R0 P4 q0 t  I0 o  B- j
  1432. NmiProgram;Nmi中断处理
    / @" b4 }3 q- s, }
  1433. PHA
    ! G8 A! V) N3 j% ]; |8 I0 J7 S/ B
  1434. TXA
    & g. E& D  H* e$ y7 G( ]  I
  1435. PHA' ~% Y1 X  G6 l) K* }
  1436. TYA) D) F9 B4 J8 O" E8 W
  1437. PHA
    2 H  _* ]' F! `6 _

  1438. % w& ^3 f- C( S
  1439. LDA PPU_STATUS! ^: y8 U; ^4 ~0 X8 W
  1440. LDA #$007 Q. n5 }. e5 ?* J  N$ w
  1441. STA PPU_CTRL# c4 C5 D# p: B/ N/ E4 i$ |
  1442. 5 r$ {+ H3 u; p+ }& g$ \
  1443. ;切换主程序bank$ G- Z, l- g0 ?9 @% _) ?9 w
  1444. JSR SwitchMainBank
    ; E4 Z2 b; ~$ P

  1445. & m2 p* N3 ?2 M' F! {+ H/ z& x: c$ p
  1446. ;NMI处理. w- ~' @0 ~* m8 B# N
  1447. JSR NmiProgramProcess$ |3 E" d6 u9 z
  1448. : h: J" |, f9 Y/ C: u2 T
  1449. Nmi_Proc_End* _6 q' U* S" [, m- ]9 S
  1450. PLA
    * D/ J% T( W. k; Y  F0 _; J; ~
  1451. TAY
    " B6 p# a+ V5 V" u5 s* U6 g* [
  1452. PLA
    6 ~/ X# W4 N$ E" |  R, t' P# p% K# T
  1453. TAX
      H9 U6 n+ S* P  j7 `* y
  1454. PLA1 [3 r+ |/ B) U0 H* Y% L, M: G
  1455. * X9 O/ C; |9 V
  1456. RTI8 [% ^, F% {3 \6 F/ L, K
  1457. 4 y4 M. D) }5 v* T1 N. H4 f
  1458. ;==================================================
    4 c% W, ]) S! T; Z# m
  1459. ResetProgram;重置中断处理
    7 F0 j6 [! |3 p8 B2 ?/ i
  1460. SEI
    2 J3 h" L& t; i) p: L6 J
  1461. CLD5 V4 b* r, P( T1 H: `6 a
  1462. LDA #$00, d3 [; d# L) X! q0 [. c
  1463. STA PPU_CTRL/ y0 J+ L3 `# q; v
  1464. STA PPU_MASK9 y$ |* n5 j: S0 g6 \8 y' O
  1465. 1 X* T( b3 U& Z7 M* v
  1466. JSR SwitchMainBank
    $ m9 j% p  @1 T5 }, v- W
  1467. JMP ProgramBegin
    # L2 k; ^! Y' c' a2 f

  1468. ' O0 ^& ~8 _  a+ m
  1469. ;==================================================9 S- _$ ?5 p/ u! ]2 l$ m" o! o
  1470. IrqProgram;Irq中断处理
    ! q; b. L# p5 G7 F/ ]
  1471. RTI
    * E0 N$ L: P5 e  Z) l
  1472. 9 k5 n6 O% o7 l4 B
  1473. .IF SOUND_BAR_SHOW_ENABLE# y" C9 [! {& [1 \
  1474. .ORG $FF80
      p; K. z) N& q, [" [, l% R7 O
  1475. STA $4000,X
    - w: j! m6 s; n2 [' r
  1476. STA Sound_Bar + $00,X
    + X3 v2 ~: z$ f( [6 Z+ n
  1477. RTS1 r, L9 C) U" f4 n) P1 S
  1478. ! E4 r% P$ s# I6 i( L6 X
  1479. .ORG $FF88
    * T( ]/ }& F4 m/ j+ Q1 r! d  @; c
  1480. STA $4000,Y
    + S' M$ B- I8 p1 H1 v$ A/ x
  1481. STA Sound_Bar + $00,Y
    : s+ V8 S9 i0 d% k* y) e
  1482. RTS, s) ?" x* J6 u3 S. R; A
  1483. 5 ?5 N+ d" r; i/ X( y
  1484. .ORG $FF901 W" k) R& f+ P+ v9 ^' B- x
  1485. STA $4004,X$ N* e9 w) E3 s1 f4 L& D( l
  1486. STA Sound_Bar + $04,X
    / z) ^0 ~+ M1 B# Y, S! V
  1487. RTS
    5 }: J) z2 @% q5 r! o% M

  1488. & N  j! J  V# D3 c4 n4 s
  1489. .ORG $FF98
    + ?( C: _! N# h% X; X7 q2 m
  1490. STA $4004,Y% P5 Q: a8 H- Y, I% h/ H% v
  1491. STA Sound_Bar + $04,Y8 Q3 W4 ]8 l. s9 G* Y
  1492. RTS- x  O$ ~/ c9 o2 D& {

  1493. 1 k4 P' P! v5 D5 P' E
  1494. .ORG $FFA0
    6 }$ W0 k% V+ n7 H, j, b
  1495. STA $4008,X
    : m. f( H/ D4 {* J0 j0 C
  1496. STA Sound_Bar + $08,X* W+ f$ |  b, ?
  1497. RTS/ Z4 E4 A6 d& G2 H" B# m* Z) m
  1498. , o' a. f, m: U! f& e0 p
  1499. .ORG $FFA8; \& p1 f4 p- d$ ], B
  1500. STA $4008,Y0 H5 k  C0 F- X2 b, B$ ^$ e
  1501. STA Sound_Bar + $08,Y
    # _* p# I& C1 l8 Z2 `2 l
  1502. RTS$ V: j. |/ b$ [0 k0 q4 R7 h+ ^

  1503. + L4 j: ^( A: Y7 H1 N# a- I
  1504. .ORG $FFB0% y: n! Z. Y0 Z. s2 H
  1505. STA $400C,X  U! |0 z7 q/ Z$ I* v  P9 W. s: u$ H
  1506. STA Sound_Bar + $0C,X
    0 r7 S2 A' [/ h' m7 M* U3 r
  1507. RTS4 Z/ {4 ]* I, }# e# M  \- }$ k

  1508. : E  T$ l4 n  _, R! M
  1509. .ORG $FFB83 K8 G% h" z- v# W0 ?7 h! V
  1510. STA $400C,Y6 G  u  z9 K" {: |2 b. Y* P3 i: E
  1511. STA Sound_Bar + $0C,Y  i" l+ s8 s5 I
  1512. RTS8 ?8 x' S: y, I
  1513. 7 }) z7 V0 j; o- ^9 w
  1514. .ORG $FFC0
    + ]: J( e0 T4 F; I3 x1 @
  1515. STA $4000
    , `( _4 B6 \% r+ ]/ Z* K0 a
  1516. STA Sound_Bar + $008 @4 ]2 j' G; E, S$ E3 J/ i
  1517. RTS
    2 G1 D3 {7 O) T0 f% s

  1518. 2 y! [3 a$ h7 L+ J5 l4 e$ x- w# s
  1519. .ORG $FFC8) H. T6 p2 r5 A1 \- B
  1520. STA $4004- u+ [. t4 e* p- @$ I
  1521. STA Sound_Bar + $04
    0 F7 Z( g# t; g9 \
  1522. RTS7 Q0 F9 s1 K( j* x

  1523. ; B0 O) z& Z2 T% E' c, }0 p7 R
  1524. .ORG $FFD0- p2 Q: f1 j# ^2 L) c
  1525. STA $4008
    ( `9 `3 I% w" x# U$ A
  1526. STA Sound_Bar + $08
    / O4 _3 b8 P5 v3 y/ v
  1527. RTS: S! o& b# L4 D5 e' v
  1528. ; t: p4 x2 Q. A5 s
  1529. .ORG $FFD8
    3 j: x9 P% y3 t: ?) C4 _6 ~! k
  1530. STA $400C$ C$ i8 M8 U7 J. ]2 }" i+ }1 O
  1531. STA Sound_Bar + $0C; J1 r' ]( e: ?* K  C/ [
  1532. RTS% M, g. n: u8 \4 b* M# ?

  1533. % f4 p$ M# e9 |
  1534. .ENDIF8 w2 o  a2 _$ [' i
  1535. % I5 ]* B. M) I1 H! i; x4 ^
  1536. .ORG $FFFA1 m" |2 |. J; N" G5 k
  1537. .WORD NmiProgram
    ) B9 `) `3 m/ P, K9 n( M9 s% n
  1538. .WORD ResetProgram2 m/ P5 B: B2 ^" V/ {; h. Z
  1539. .WORD IrqProgram
复制代码

" d' m5 b+ ~% w/ c3 a: U3 m3 j  W7 e
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1138 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3115 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 07:04 , Processed in 1.107422 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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