EMU618社区

 找回密码
 立即注册
搜索
查看: 1441|回复: 26

[原创FC/FDS-HACK] [FC][魂斗罗][最佳可视化]

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑 0 b6 U6 p5 H. V& A* |
- |" ~0 f$ D" k0 g+ |
[FC][魂斗罗][最佳可视化]
& y6 A7 K- W# n时间:2019.11.30' D3 n" P7 ^8 ?1 i$ F" Q# I
作者:FlameCyclone: v2 K' u! T/ _, l  u5 x
内容:  s0 ]# Q8 J- v3 f+ J
1.可视化:    ' D% E( b$ h# M& J6 W9 T( N/ ^4 x3 \
     (1)暂停时按选择键进入菜单
: W3 c( J) i+ U5 k  c     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出
' [; v* z' |6 d2 M( o     1.1.透明无敌: 透明无敌
' |1 R* V5 y. v9 i6 Q7 x/ S, r     1.2.加强无敌: 金身无敌* L- D. G, U9 M/ \: @* F( q7 K
     1.3.生命锁定: 生命锁定3条
2 w0 R# a' u1 n' o1 B: b     1.4.武器锁定: 武器保持不变
" S; f  {/ {9 B5 v7 N     1.5.武器切换: 游戏时按选择键切换武器
6 P+ G  P0 D8 K8 E  l$ X) |  ^$ F3 `     1.6.无限跳跃: 跳跃无限触发
: `' `7 [1 l0 h% E     1.7.快速移动: 行走速度加倍
  s8 X7 G. T5 V7 G" x/ w6 ]$ B) t     1.8.皮肤切换: 交换玩家肤色
4 h7 C6 Z1 q; e, p     1.9.公平子弹: 玩家子弹可以与敌人子弹对打$ @# C9 I, \  s5 d! v: n9 S
     1.10.强力子弹: 子弹打中敌人后继续穿透, ~  S' ^, a( D) T1 v/ [- w
     1.11.一击必杀: 敌方中弹一发必死
% S! k$ p& Q$ D/ M* j0 n, L0 x     1.12.全屏击杀: 开枪时全屏可击中目标必死
& c% T8 J" j; ]0 s     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家* s5 \2 Y! p8 c# S' |' g$ B
     1.14.移除电网: 移除2,4关的电网* {; x4 B4 t3 o4 i  d: j$ E7 d
     1.15.掉坑不死: 掉坑后不会死亡
( [% n! J. e7 y( z$ @$ T     1.16.跳过关卡: 跳转到下一关8 a/ p* M+ A3 I, l( n0 @
  1. ;[FC][魂斗罗][最佳可视化]
    7 T# b2 d" Q/ ?
  2. ;20191129; x9 a' v1 t1 j: i2 j! v* T

  3. 2 Q" `% F" k! @# f( n8 y
  4. ;程序开始地址
    ! _, [7 Y/ ?  q7 e/ z; W! ]
  5. .ORG $9000. [) n$ v: L; R* I8 B' ?" j8 [$ c
  6. 7 s! H1 q! Q: N+ E
  7. ;==================================================9 ?' ]  k, ]) E' F! t' C5 W
  8. ;==================================================6 u7 j6 [3 G/ w' d; d
  9. ;是否双人玩家1 B$ [; N, e" s3 W8 o
  10. FC_IS_DOUBLE_PLAYERS = 1- }1 _- T8 x" y! A7 ]
  11. # K# p3 ~, ~: }3 L2 G' i
  12. ;==================================================
    5 C2 M3 }: g4 {4 D* L
  13. ;PPU缓冲地址配置( D8 a: R3 t  }2 p/ w; C
  14. FC_PPU_Buffer = $0300
    ( t$ s3 ?: e+ s3 u& W0 n
  15. ;PPU地址配置
    / e# B* T. Z6 C
  16. FC_PPU_Cursor = $00
    , O2 Y9 J5 D" }, o2 O/ X1 N8 r9 c
  17. FC_PPU_Status = FC_PPU_Cursor+$01! C  I2 s) u& j+ L  u
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $01' d3 H+ n! n' G0 X* c, ^9 d) F
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $019 E( M1 u# h0 z- o: A0 m% }
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $01
    0 u3 r  p/ Y$ |/ g7 h2 S& D" U8 ~
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01, V- Z% V( i/ b* q# \- W, ~
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $01' s' L6 L! f2 k2 x3 v! x
  23. ;==================================================/ d+ d  }# o1 Y1 I

  24. 8 _: V" Z+ |' }
  25. ;==================================================
    / V  j4 R. ?0 \; {0 W! l! C
  26. ;选择项地址配置
    ' W, ]* i: j+ O5 ^' j8 Q/ q5 G- s
  27. FC_Select_Index = FC_Data_Port_B_H + $017 y! n& u2 k9 l/ t3 ]" G
  28. FC_Select_Temp = FC_Select_Index + $02" p$ ?7 a. b. Z( p, C+ }8 q
  29. ;NMI循环计时器
    . E9 d/ l0 I# ]8 ^
  30. FC_Time_Count = FC_Select_Temp + $01  m* |( }2 l$ g# q. F
  31. ;==================================================
    7 s! l4 i6 Q% c( j+ R# q$ u7 _4 y8 y  }
  32. " P9 P9 N7 s7 f3 i* [9 G
  33. ;==================================================
    2 ^' d9 R, W$ j% B
  34. ;光标配置8 p( p# a: |3 I- G  W  x
  35. FC_Cursor_Addr_L = FC_Time_Count + $01
    2 }0 I; i% u8 e. G% I
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01
    # {0 s# s  K" V, y& F
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01
    $ y! N; ]& N1 B/ l/ j0 _. @, P8 d
  38. FC_Cursor_Y = FC_Cursor_X + $01- W+ v" U9 C" `* J
  39. ;----------------------------------------
    + ~) ]8 ]5 i+ ~4 ], m
  40. ;光标图形号; m3 J" e3 @( h! n3 Q0 f8 P9 x' s
  41. FC_CURSOR_TILE = $3E5 ]: @- L/ ?, ~( o$ i& R+ B
  42. ;光标偏移像素值8 Y0 |. N* Q( d' G1 s
  43. FC_CURSOR_OFFSET_X = 12
    6 f; {6 o( S) D6 ?8 }3 Q& N$ j
  44. FC_CURSOR_OFFSET_Y = 1
      k: R6 F2 `) @# i5 O' K; h
  45. FC_FUNCTION_OFFSET = 21$ F% v+ ]' ]* L. }2 V7 D. a2 m: B
  46. FC_ON_TILE = $3D2 x$ f  E. o- P- \' z
  47. FC_OFF_TILE = $3C& f& X* [1 G6 B( j% U. q( {1 S+ W4 d
  48. ;==================================================/ z& ]$ @& }3 V2 P/ q9 `" u8 {

  49. # B$ i) E6 B4 H
  50. ;==================================================
    9 o# _! g9 J8 |, p; Q
  51. ;翻页配置% @0 }2 y, N! I. K( F; u
  52. FC_Page_Old = FC_Cursor_Y + $01  @8 c4 ?1 g  p/ f9 p2 o4 K
  53. FC_Page_Cur = FC_Page_Old + $01. i+ \# U; D* I1 d; s0 D
  54. FC_Page_Item_Count = FC_Page_Cur + $01
    ' {+ Q3 x- e4 Y1 z" c0 T- Y
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $018 t) d8 K% p7 W' }& A
  56. ;----------------------------------------' G/ P" v, F" Q, R
  57. ;翻页属性, X) L) @( r, V0 \4 c/ r( |' U6 T
  58. FC_PAGE_SIZE = 103 O. G  p$ A! {( i9 `3 s. C/ [
  59. ;PPU单次写入缓冲项数: s* i( \* u: d4 ?9 H
  60. FC_PAGE_BUF_SIZE = 2
    / U" v; Y! X8 U/ e
  61. ;----------------------------------------9 C7 c$ V7 g- D% q* O2 K) |
  62. ;显示项最大索引属性. i4 s) }8 B3 M, m
  63. FC_ITEM_SUM = 16 - 1/ v0 M8 A; `0 o0 p+ q* c1 K
  64. ;最大页索引属性
    % U* N* M* v8 {3 r  E9 s# k5 y
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE
    7 C+ C1 L0 b/ \* ^7 n) @5 _
  66. ;==================================================
    4 W8 E3 s( O$ q2 x* m& t' P, e8 k
  67. 8 S( `- ?- G. d; W+ ]8 T, @# o
  68. ;==================================================7 b; k1 f' r# D  ?) s: \
  69. ;按键配置
    . ~+ e2 r) X+ {# ~
  70. Button_Keep = FC_Page_Item_Buffer + $01
    ! F/ H. ?+ ]# |. u+ j4 l6 ]
  71. Button_Once = Button_Keep+$028 }( O: J) B6 [
  72. Button_Temp = Button_Once+$027 v& r6 k! T5 p+ S# E7 _8 m# x
  73. Button_Buf = Button_Temp+$02
    , [/ A$ S$ l$ H" y
  74. Button_Status = Button_Buf+$02
    7 m' \( |( |  Z  E8 N4 t
  75. Button_Auto_Delay = Button_Status+$02
    # j2 G2 y$ C# N1 Y. X$ ^6 ~5 `" a! {
  76. ;----------------------------------------8 k7 h' z7 Z8 E
  77. BUTTON_DELAY_MAX = $18, J1 [9 c" }& h. R: ]+ j, c
  78. BUTTON_DELAY_SPEED = $08
    - i4 ~3 R9 w$ m5 h$ R& V% }+ H+ \

  79. . g* n& _  G3 Y7 |
  80. BTN_UP = $08" @( V7 i3 @* h. `! p
  81. BTN_DOWN = $04
    " ^: d7 W" ]# G8 B1 ?1 g1 R
  82. BTN_LEFT = $024 W, z' t% ]: @0 t6 z& I; [
  83. BTN_RIGHT = $01
    " K# B  t6 D  _, N
  84. BTN_SELECT = $20
    , r9 m: J1 Z- s! m# e
  85. BTN_START = $10
    1 Z- ^( t# x5 ?& m" `
  86. BTN_B = $40
    8 b& d( T" z' Z; C& ~
  87. BTN_A = $80
    : j2 J0 V$ Q3 D, d0 Y2 ^7 L
  88. ;==================================================6 n! z, D* `8 w
  89. ' u( ?- [7 }  f: S1 f6 Q/ _
  90. FC_Copy_Addr = Button_Auto_Delay + $01& l! j" j8 }; ^9 u
  91. ;----------------------------------------( s9 k, o( F; [
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值
    / u* g& O' ]9 v
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位# A# M3 C! m3 I9 E0 S8 v
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位
    5 A8 N8 ?* y  }) V9 b3 O8 |
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位$ g$ ^* x8 s9 `& z  c
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位, }3 Q, h( O8 w. B& o$ Z* L* E
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位2 g$ Y- R: {0 h7 Z% w
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位
    . f) f& Y) J5 Q0 S
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位
    $ F' t' d$ J- }7 e; Y
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位/ Z0 J- }. w# c. U/ `
  101. ;----------------------------------------
    $ ^- B# U. k4 U2 |* F0 T
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式
      X! Q4 p4 m: {) Q- I
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式- {) ?8 a* K( ?! A# R7 D5 ~
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式* B9 N- o# L7 ?9 B& r, ]
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式
    ! [' O& ?+ h/ x: g; D. }/ c

  106. 5 N" L' y0 e0 c0 Z7 c
  107. ;==================================================
    ; y' ?" b% [; h
  108. Rom_Nmi_Addr = $FF
    8 O2 m' k" O$ ]# C
  109. Rom_Btn_Once = $F5/ O! c: D* ~" |$ r6 D" k( G" D
  110. Rom_Btn_Keep = $F9
    & h, d+ ]% G# m6 R, g0 T" y) I
  111. Rom_Pause_Addr = $25
    ) O) p  R) l; C* j, O0 u3 V
  112. Rom_Pause_Val = $01- b" ^& Z' E) L- @* T
  113. Rom_Pal_Addr = $07C0+ n  e% A$ m; Y# K* V! y
  114. ;----------------------------------------
      f) j& p, u2 _
  115. Save_Zero_Addr = $6200
    2 ~9 h# O% R0 l! g4 \% a
  116. ;==================================================# D/ A3 i" Q, x# u: G3 H  J
  117. ;==================================================) T! G& l( i! b' k- m

  118. , V$ c8 D9 z2 |# c- j" H. ?7 _
  119. ;程序入口, m& \% _, ]% A& b
  120. Enter:
    4 E3 h% {) Q0 p' t7 g4 U- p% m
  121. LDA Rom_Pause_Addr
    % t1 @# K, c+ E  ~
  122. AND #Rom_Pause_Val
    % m7 c7 {5 f  p: `4 t% ]
  123. BEQ Quit_End
    ' C3 A1 v" N' M
  124. LDA Rom_Btn_Once+ p& E) h+ y) m4 K& y
  125. CMP #BTN_SELECT
    # s1 u! v4 e; w0 w/ e- ^
  126. BNE Quit_End4 k0 E' w9 C7 o$ t
  127. PHA/ D6 W, ~" n3 ~  L* F" P
  128. TXA
    % a1 s  J, S5 i- D
  129. PHA0 h/ k2 j. M7 n2 u  p/ d$ B) B
  130. TYA& g/ d1 i( r% A! s( ?
  131. PHA7 g* q3 f0 U6 V! I+ D
  132. JSR Wait_Sound_Stop6 D% [% P! F1 q# r& k/ `  [
  133. JSR Save_Screen
    % p9 E% r% \" b' {( d9 }
  134. JSR Program_Begin5 k0 u9 \& B( }
  135. JSR Load_Screen" n' t' S7 x" a, i& R% L/ h+ n
  136. LDA #$10* K7 T8 U" t4 V9 M# o0 d: z  I/ k
  137. STA Rom_Btn_Keep
    * S# z, G& Z) p, y; U# k& ]
  138. LDA #$00
    ( w* e, A) o* q$ E# [) \) q1 ~6 d. H
  139. STA Rom_Btn_Once% t" J$ p. }" Q- g# V- |
  140. Quit:6 x1 e4 g$ r0 Z$ l* k
  141. PLA
    + S! P: g5 o: }
  142. TAY: p6 a, H# i3 u1 A  z# c8 J
  143. PLA
    7 z5 |9 }1 C. q9 a! X. R
  144. TAX
    / V* j1 Y6 t" x/ ^7 S
  145. PLA) Q0 L6 v1 j' e% ~9 r
  146. Quit_End:1 a7 z6 x) X1 Z/ \6 l$ R
  147. RTS5 _: N$ u4 A4 h, W2 F/ \. N( o
  148. ! F6 b$ ?, L. Q; {- Z
  149. ;==================================================
      {$ M  c$ u3 f+ W0 L) N3 C( p
  150. ;等待音乐结束
    8 t: [; I' u/ H+ O  S+ w
  151. Wait_Sound_Stop:
    & u. m) ]1 m7 v2 X
  152. Wait_Sound_Stop_Check:+ _( a; F7 p# I! X5 b; i
  153. JSR NMI_Wait- j: }3 {4 e. Q6 D$ U: C7 f  a$ G
  154. JSR $F825- Z% x; }7 J( U9 i  I
  155. LDA $010A
    ! Y7 X" a: H2 R7 B9 j8 W% R8 ^+ G; }$ |7 s
  156. BNE Wait_Sound_Stop_Check# X. c" I9 H. x( ~/ z( J7 u
  157. RTS/ d& _' y6 \1 K) ]

  158. ! B( [! M# f# H: F& X1 Y
  159. ;==================================================& w( H7 |: q5 _3 a7 W; ?& v
  160. ;保存屏幕数据
    - p! V) [9 {& f
  161. Save_Screen:! t& m3 t% D1 f! Y
  162. JSR Screen_Off- b5 ]8 w' B7 b; H) z+ J
  163. JSR Save_Zero
    9 g/ X1 |' l- k4 n- F% b' a
  164. JSR Save_Ram
    ! W: @- C* U+ ^
  165. JSR Save_Ppu
    3 O1 y. E$ D; W1 {* Z8 K) n( a1 p
  166. JSR Ram_Init
      N! S# X$ [7 v% g
  167. JSR Sprites_Init
    8 W: _: m$ d" T2 [
  168. JSR Clear_Ppu
    8 ]0 R0 h! S6 c$ z  ~/ `6 `
  169. RTS7 C/ Q: c$ X) P2 O
  170. ) \1 F/ Z% P- a$ B" U) ]0 i8 f3 {
  171. ;==================================================4 u3 D# g1 z# ?9 q: Y
  172. ;加载屏幕数据
    1 L9 N8 L& `# S+ Q" Q* V
  173. Load_Screen:
    5 e6 A) g/ p7 N# a
  174. LDA #$00+ B) ~) Y' R0 L$ u" E
  175. STA $2001
    : Q0 j- I* M) ~
  176. JSR NMI_Wait
    1 l; M* v* g4 w3 v. C
  177. LDA #$02" Z3 _# G& \# X/ R8 s$ @
  178. STA $4014/ T( w9 G8 o8 w3 O; t' K7 x8 R# R# {
  179. JSR Load_Ram5 g" Q. z1 S3 s& }
  180. JSR Load_Ppu2 V, K8 A2 s" j% T+ F
  181. JSR Load_Zero; b& y. O3 N5 w& K( ^5 e
  182. JSR NMI_Wait0 |) a& a1 {3 f- ^
  183. JSR Load_Palette4 i0 O2 p1 h) b# j
  184. JSR Screen_On/ j3 v9 S' v, _7 T4 ?2 u
  185. RTS
    3 I2 A' ^  j3 i* ]

  186. + a7 I6 R, `* h: `8 w
  187. ;==================================================
    & ]: Q$ ~0 Z! j$ j  i
  188. ;关闭屏幕& i$ @1 H6 a+ @; x0 m/ E
  189. Screen_Off:5 C& D  v, a: ^7 }
  190. LDA Rom_Nmi_Addr
    4 l, c2 e; b' [/ @( g8 }
  191. AND #$7F9 C2 I6 }, K$ ^8 q0 r  b  J
  192. STA $20001 P/ Y: o: w% F, Y$ Z7 p
  193. JSR NMI_Wait) U* C. c) U+ ~# e
  194. LDA #$00
    , s% {# ]3 y: R7 H, H
  195. STA $2000! F' P. Y* S3 K+ l# l
  196. STA $2001
    6 G; E% N5 o; j0 _% X$ Q; c
  197. RTS6 |6 A) T6 n+ E
  198. ! e) G. x$ M8 p3 E
  199. ;==================================================1 S! Q' ~- T. c2 X$ u
  200. ;开启屏幕" _. Y2 B, M2 F
  201. Screen_On:
    0 Q1 |! Y4 X. B1 p; z( h6 i5 n
  202. LDA Rom_Nmi_Addr
      P, e6 w6 ]1 L1 m5 {
  203. STA $20002 {, i0 {) @- Y* u# f  r2 m+ D, j
  204. RTS
    9 T2 j) x& J7 E& H' L9 l. ^) s

  205. ! |: R" {, x4 C  X/ T1 M* i( q" w
  206. ;==================================================
    1 Q( P8 ]( |; P3 A4 Y5 e& m
  207. ;清空占用RAM
    3 O: T# u0 Q/ Y9 A
  208. Ram_Init:: E& C3 ^" _' ?4 Z* E! X
  209. LDX #$00
    ) t- U" h. M  M2 t! N
  210. LDA #$00
    , V- [' H- ]  [
  211. Ram_Init_Set:- s& \9 v5 \8 a9 z
  212. STA $00,X; p; J2 E5 w7 K3 K) {5 o( n+ p
  213. INX; P. `" i, x" t# ~' Y
  214. CPX #$40# `+ @' e  L  M4 ?& X% _
  215. BCC Ram_Init_Set
    4 f# Y) D; E7 e/ `
  216. RTS
    , g& ~% F% M! J  N1 r. E) _+ L# t! {7 L
  217. 5 E  T- x3 F( t) T9 }6 Q% A
  218. ;==================================================+ d# _' T% Q+ {# }. C; Z6 t$ L
  219. ;清空占用RAM# z7 h" x/ w! \! y2 M( [/ o
  220. Sprites_Init:- b: j4 S$ k$ H) Z
  221. LDA $2002  P1 E/ x7 w- o/ u- S5 K" X
  222. LDX #$00" U" O$ r1 l* b! f# H) Z' i
  223. STX $2003
    8 Z$ a0 }$ p& U) o2 g
  224. LDA #$F8- B3 i" ^+ B/ j0 v9 f- H$ w
  225. Sprites_Init_Set:
      t! L% j6 v6 E; L
  226. STA $2004
    * I* `# z& ^' C5 [
  227. INX/ Q0 K* f! y  y8 G6 p
  228. BNE Sprites_Init_Set
    ; f5 F, _1 D( J5 g  j: s8 `, O
  229. RTS
    1 b, t+ j) \' r! A5 A# ?* ~7 e$ x

  230.   M# _4 r# u  p4 p* |7 \, \
  231. ;==================================================
    ( U( j7 i3 a' L
  232. ;保存零页数据8 c9 V5 @3 \6 }; M
  233. Save_Zero:! g5 B/ T8 g) e: f3 u
  234. LDX #$00* B) m! n" g8 W7 K, c+ A5 ]
  235. Save_Zero_Set:
    4 I" h5 X- B( I" Y8 a& I
  236. LDA $00,X; w2 e6 u7 U* r6 n% c8 L
  237. STA Save_Zero_Addr,X
    . h( L6 J: P) F' P
  238. INX$ Q: E' i: d+ p, S  M8 a0 e' T" [0 H
  239. BNE Save_Zero_Set
    4 @" f7 M! j5 k: l
  240. RTS1 r1 V: ?, `3 X# I3 |+ r

  241. . `! s; U' x+ S2 f; x2 D
  242. ;==================================================
    9 o9 {$ E, e9 c, ^, s( e. i
  243. ;加载零页数据( S7 p) s# j0 \, {0 G
  244. Load_Zero:
    9 x4 [) i1 l: o
  245. LDX #$006 m# D" z3 b+ U2 @# L6 h
  246. Load_Zero_Set:+ V" I& q/ I; O$ G+ S2 y" _
  247. LDA Save_Zero_Addr,X
    7 h3 I) g! z/ b3 T) J" {$ O9 u- [
  248. STA $00,X  O3 h& Z3 A) I9 y0 {) t0 A
  249. INX
    : z3 n  `( n  C/ f' `+ |) [
  250. BNE Load_Zero_Set5 g, V# G' B% A: c) G; h
  251. RTS
    & q/ ^" l! d4 w" F. \( O
  252. 5 R" b1 u% r8 z8 [! a  a
  253. ;==================================================
    - m, S) N) K7 c: H
  254. ;恢复调色板
    " \# o' V, z8 h
  255. Load_Palette:4 T/ ~6 V8 l( e
  256. LDA #$3F. f  C9 i3 b7 g5 D9 v
  257. STA $2006
    0 f  J9 k7 C4 Z: N8 G- [7 w
  258. LDA #$00
      U! H: x& [$ g# p! V
  259. STA $2006
    8 I' B8 Q; N* V
  260. LDX #$00  |$ f& V7 w5 M7 l4 U
  261. Load_Palette_Set:7 K6 t0 v! Q" d- S2 C
  262. LDA Rom_Pal_Addr,X
    , j! y# F3 P# }2 e
  263. STA $20070 S9 V( |" }0 d( d. r3 S) p1 u4 |& h0 `! ^
  264. INX/ N& v$ D* W3 ]% a9 S: L7 M3 Q
  265. CPX #$20! o2 f$ W9 t8 p% i% v
  266. BCC Load_Palette_Set
    1 D2 h! t: V0 u
  267. RTS
    6 c# Z# h6 ]2 _2 I+ u3 a  |
  268. / Z- [% c6 \3 H3 w6 Z' _
  269. ;==================================================
    $ a, Y9 [- e$ c/ O, o
  270. ;==================================================& u8 {. P/ ]. A" H* F

  271. . A% P- `3 Q0 t3 R
  272. ;==================================================% s6 V; v& k' V6 R# J- X5 I/ k- S
  273. ;程序开始8 d5 j, o7 L  T  n
  274. Program_Begin:
    . F, h  v" ~$ F" X0 D1 _( \& n
  275. ;==================================================
    , Y5 r2 O6 Z# J& E% @2 Q
  276. ;图形设置
    0 J: x# h$ B1 [& h6 r3 r) s
  277. JSR CHR_Set
    % Z+ }, |8 \0 q
  278. JSR NMI_Wait
    2 J$ z( u7 N& |. v' C8 X
  279. JSR Palette_Set
    ; W7 Q$ `9 i2 k. F" n
  280. JSR PPU_Data_Page_Show$ [, M2 o) c$ G$ b' q

  281. . Z- K! n0 ^7 U- {
  282. ;==================================================6 ~. W' k0 {8 Q1 }; O0 A9 b; A4 M
  283. ;开启显示
    1 B7 c0 a) z1 Z9 M; m/ O
  284. LDA #$1E6 I& I; I& b; }3 V! Q( ]
  285. STA FC_PPU_Status5 v9 V2 Q! [6 i6 b5 Z
  286. " q- C% }4 Z! o/ L) {
  287. LDA #BTN_SELECT/ l2 s3 u7 V2 P8 B2 b8 T
  288. STA Button_Keep' P- R/ `8 z7 D0 v
  289. ;==================================================% i2 ?0 g, @" I) q0 p* U5 ~* H. _+ `
  290. ;模拟NMI循环
    " b; d9 a2 f) O+ c" ~
  291. NMI_Loop:+ k4 K9 _$ A) j$ f  V
  292. JSR NMI_Delay
    2 K4 D7 d, D: n$ k% u, X
  293. JSR Button_Process% z" N0 g4 k* f# N- t
  294. JSR Button_Auto_Press& m! u  x# y# x# U. G
  295. JSR Change_Select_Item. F6 [! r0 a5 x
  296. JSR Change_Function
    ' u, L* v: d5 X" w- b
  297. LDA Button_Once
    % I; [+ y5 L) h" c: A7 I
  298. CMP #BTN_START
    + o8 v. B7 ~( t# z" e7 y
  299. BNE NMI_Loop
    : ]/ W6 J) f$ o3 j/ {5 ?/ h* q( O
  300. RTS
    . w7 F0 c6 p: B- b7 q

  301.   c: \) t3 N: N! A  g! S% f
  302. ;==================================================
    , E- u+ q& Y" L) t3 G
  303. ;模拟NMI中断1 Z6 P+ K: ?' ~7 r( R
  304. NMI_Delay:6 N  f1 `) n) U# N' T  l
  305. JSR NMI_Wait
    + K- F- i7 l/ i$ I% P
  306. JSR Show_Select_Cursor4 t* [) x# M+ e& g6 {# _
  307. JSR FC_PPU_Process
    ! A& A4 G) @6 j1 l, P
  308. RTS
    , U9 l0 L; K* X. H/ {& D  _, V8 x5 F
  309. + l( m' C) Z  D: g2 J% a
  310. ;==================================================
    / b; v* b5 A) D( U- [& J7 Q! Q
  311. ;等待NMI中断
    ! A+ G3 B2 c3 F
  312. NMI_Wait:+ D7 a  z# O+ M
  313. LDA $2002+ E8 y" _  U  b7 Z+ _0 Y
  314. BPL NMI_Wait
    4 G! e, u" b! |3 b; h
  315. DEC FC_Time_Count! A8 {4 w& b+ ?, E& [2 R% E
  316. RTS' z. I4 ]2 i' a, Y. @
  317. & W3 }9 Z- U3 B
  318. ;==================================================
    0 I3 }4 ^0 ?+ B5 R. B* S
  319. ;PPU写入模式配置属性
    : A, L" Q! o% Z7 F
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入8 f" D2 Q# K; M  [1 t
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除
    6 \/ F) v" Y2 _
  322. ;-------------------------------------------------0 _$ b6 A- H5 I) m4 m- B% Y
  323. ;PPU处理) q) z! F; A  Q, ~+ h+ b+ N
  324. FC_PPU_Process:5 V  B4 W+ v* a! ]
  325. LDA FC_PPU_Buffer
    / K3 _9 p$ a! q: Q  ^1 D; w
  326. BEQ FC_PPU_Process_End: I$ V; B. }! v+ T5 O% R
  327. JSR FC_PPU_Process_Beg
    * c4 ^. E! E: ~' {
  328. FC_PPU_Process_End:( v7 ^% S( [# Y: t7 q
  329. LDA #$00
    / |1 D1 _  u$ |2 j/ n
  330. STA FC_PPU_Buffer
    4 w0 N6 O- k2 E/ C- k; O2 l( m
  331. STA $2006
    / H0 e4 ?2 w6 f! Z
  332. STA $2006
    ( V4 N4 m+ d4 k6 ^! p2 ?, K
  333. STA $20054 _1 }3 H+ Z2 L! Y5 a
  334. STA $2005
    ' M2 M; I( y! {; c7 `
  335. LDA FC_PPU_Status
    + t: z! L' B! h" U( B7 V
  336. STA $2001/ O8 P# P; g# U$ a% o1 U
  337. RTS# g5 F+ ^. ~) @& D
  338. ;----------------------------------------
    3 c; q' }9 w( c+ J8 K/ n- w
  339. ;PPU处理开始
    ! N$ w) c$ @: N' B. [
  340. FC_PPU_Process_Beg:% E/ c' C  q6 r* j, @
  341. LDX FC_PPU_Cursor* C* T8 D, Q5 |+ c& ?; G
  342. LDA #$00: S% |) N* n+ e  f' @
  343. STA $2001
    $ I* p- B- A" E! q
  344. STA FC_PPU_Buffer,X  g+ t. f! e6 |- D; c$ ~: p$ v' g
  345. STA FC_PPU_Cursor
    ( K+ E( L. X4 k9 h) {5 \& ~; a% ~9 ^
  346. LDX #$FF$ p* E/ p. R5 S$ M( c
  347. CLV1 d/ p. s7 B! r1 J; S5 F
  348. FC_PPU_Process_Mode_Select:
    ) h' K, a9 |% l3 h
  349. INX9 j" Y4 R9 u2 t+ A8 v: u
  350. LDA FC_PPU_Buffer,X) J* i, v* }* J
  351. CMP #FC_PPU_MODE_CNTL" H. `! v) Q, N. x
  352. BEQ FC_PPU_Process_Mode_CountLine. T' U* c+ g6 M
  353. CMP #FC_PPU_MODE_CNTC9 g% N/ {: m$ A2 A! A
  354. BEQ FC_PPU_Process_Mode_CountClean8 \) d% l3 n' ?1 M
  355. RTS
    ! y/ X) v/ K) a4 h3 a8 A- d
  356. ;----------------------------------------" ]* R5 H: P, v9 C) h
  357. ;计数行写入模式
    + b4 [8 x9 N) H, P
  358. FC_PPU_Process_Mode_CountLine:
    6 F2 U9 v6 [( R- G( h+ M
  359. JSR FC_PPU_Process_Set_Addr_And_Count9 c6 z& C8 M# t2 ?
  360. FC_PPU_Process_Mode_CountLine_Write:
    ) u; X! g' q6 K  L4 T. m
  361. INX, ^+ c0 b1 p- m8 N
  362. LDA FC_PPU_Buffer,X
    : K8 A& l6 @9 \" V
  363. STA $2007
    ! E, d- I6 o6 B, n$ i0 X
  364. DEY1 r9 r+ N9 d! M
  365. BNE FC_PPU_Process_Mode_CountLine_Write
    " A/ G' i+ d* _# D/ M5 x( k
  366. BVC FC_PPU_Process_Mode_Select+ {6 C  l) v! U1 B1 _7 X$ M' v! I
  367. ;----------------------------------------
    + n5 z, P- j" v6 K; G4 _1 z& j. i, q7 a
  368. ;计数行清除模式: F, L3 A% P! F* \
  369. FC_PPU_Process_Mode_CountClean:
    , Q" [7 r% D1 [( q0 ?9 q" m7 c6 U$ p
  370. JSR FC_PPU_Process_Set_Addr_And_Count' h1 j8 Z2 g4 }% l
  371. LDA #$00
    / T$ |3 ?- ~. C) X1 B
  372. FC_PPU_Process_Mode_CountClean_Write:4 {  s- u7 q0 c4 {: ]! V, {' p
  373. STA $20075 _6 W3 l& m# e3 ~1 }; l
  374. DEY
    % O" A& h; Y& Z0 `1 A8 W# i% T* ^
  375. BNE FC_PPU_Process_Mode_CountClean_Write
    6 t* S4 Y1 a& ?1 J( i; K# Y
  376. BVC FC_PPU_Process_Mode_Select
    % A- {1 l' K" t! p# s/ z# X
  377. ;----------------------------------------
    $ v$ l5 j/ r% t  f
  378. ;设置PPU地址和写入计数
    0 k7 B9 x3 h# l; T. `
  379. FC_PPU_Process_Set_Addr_And_Count:
    ' g' H  n* p8 |
  380. INX/ B; c4 d" B8 g1 C8 @& v) N0 H
  381. LDA FC_PPU_Buffer,X' ~3 e2 v. ~% `" f# ^5 h
  382. STA $2006
    $ c. W+ k% x) w/ l: q8 \/ K
  383. INX; q. B* O: N$ |6 B0 s9 z
  384. LDA FC_PPU_Buffer,X* k8 S  d9 A$ ?  |2 n/ `6 r
  385. STA $2006# X5 D* x) S$ L: i1 u& U
  386. INX
    7 H( q* h* N1 ~* Z; u# E
  387. LDY FC_PPU_Buffer,X% U9 a7 [+ i! A0 y, a
  388. RTS2 |4 j6 b2 V% ?) x
  389. 8 K3 ?. R. b( p( g9 z
  390. ;==================================================7 ?. h% u, r. h! N
  391. ;设置CHR图形
    0 Q( F. Q  h) X" g
  392. CHR_Set:
    4 A$ H! Z; X7 [
  393. LDX #$052 O) M) N( l( M( P( X
  394. CHR_Set_Data:7 ^3 o  T) z4 ~3 t7 f7 K  e8 r
  395. STX $8000
    * k; b. j/ N6 U: s- t! u
  396. LDA CHR_Data,x
    + p" G- |1 |9 \
  397. STA $80012 i% d! x9 p2 T
  398. DEX# q. c) Z# ?) a8 X- P  y* J8 l* t
  399. BPL CHR_Set_Data
    6 g7 y" I0 f6 P6 L! D% u/ r
  400. RTS! A+ |5 z6 k/ m
  401. ;----------------------------------------. x5 `  N$ [4 Z7 X2 S8 C
  402. ;CHR图形bank数据
    , w7 ^3 F! [) T$ \1 R0 S) c" F
  403. CHR_Data:
    & N5 P1 q" A' G9 p1 _
  404. .BYTE $00,$00,$00,$00,$00,$00
    ; P. E# m& q  q: o) j' `

  405. ' y+ u5 [" D) c9 i5 i6 ?! o
  406. ;==================================================
    1 A8 K: ~+ d8 r& _
  407. ;背景调色板设置+ e$ ~5 v  L6 V: t2 |& u/ n8 u2 I
  408. Palette_Set:
    + ~- |+ d  l# }. [* ]5 r
  409. LDA #$3F( O' Y' T/ q- E2 k7 g( v2 q5 S
  410. STA $2006
    2 c- t! }, T0 N$ O
  411. LDA #$00( e. Y. e% L! C) p$ Q" l7 R* E1 M" i
  412. STA $20064 g7 s/ Z2 V" s  S! [5 Y' [. {
  413. LDX #$00, J4 d$ W7 e" a! p. }3 E6 R5 {
  414. Palette_Set_Data:
    8 r' ?, R3 ]2 ]  h
  415. LDA Palette_Data,X7 Y8 ~! J& [  N: v: _' R- n
  416. STA $2007
    : `, G. @4 D2 g1 x% F
  417. INX4 t1 _  ~4 L' M9 A
  418. CPX #$209 |4 H1 A. K3 q1 E: f0 D7 |' H
  419. BCC Palette_Set_Data0 v9 U9 q6 c" l0 q9 Y! `5 `
  420. RTS
    0 B. G: s- F4 l, U3 V7 j
  421. ;----------------------------------------
    0 v8 ^7 C& B  p! J
  422. ;背景调色板数据5 a2 S4 i& L3 ~) b$ r
  423. Palette_Data:
    % l1 c6 S% j! x! w# @* p: N
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A0 t) ^7 D" q& C$ Y! _
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A( v4 V2 w9 u9 G
  426.   k( _7 l% y: R
  427. & g+ T" c/ |5 T. p4 S: h* e
  428. ;==================================================
    * ?0 }3 q% U7 o/ P) C# f* ?
  429. ;按键扫描2 N4 D, g  E* @/ k+ J* h1 Q
  430. Button_Process:
    8 s3 U8 G- B- \# u
  431. LDX #$01& ]# R8 k0 R  f! J
  432. Button_Process_Beg:/ }1 J% N7 Y& e( R7 n# ]) u
  433. JSR Button_Scan
    9 b& b! U/ d, u
  434. LDA Button_Keep,X8 X# j- q( @6 p& `, G, \
  435. STA Button_Temp,X
    $ V; _) [9 N  P. B
  436. JSR Button_Scan
    % ^+ e5 J& ^- [: i
  437. LDA Button_Keep,X% y9 H/ M6 c6 A$ q
  438. CMP Button_Temp,X( y, s8 C" V* L! \
  439. BEQ Button_Get_Once2 }7 N. [- F, T; L
  440. LDA Button_Buf,X
    , Z$ U4 a& j7 n
  441. STA Button_Keep,X& x5 X0 d% q9 O9 w
  442. Button_Get_Once:* v, o5 u1 A0 o( {! X$ _: R
  443. TAY
    ' f8 S2 |6 D+ |8 ?9 p' T( @! P1 @
  444. EOR Button_Buf,X: i( h4 A3 \5 e
  445. AND Button_Keep,X3 W4 ~3 }( \1 P# y9 S7 C
  446. STA Button_Once,X
    / N$ o; a5 h6 W1 n* x6 `' ~1 w+ Q
  447. STY Button_Buf,X! X+ a" n1 {  D  x) N4 _" i
  448. DEX/ F: {$ x9 F% `* _
  449. BPL Button_Process_Beg
    ) l, G/ v* F; x4 l
  450. RTS: q+ j  s2 [+ q. A
  451. ;----------------------------------------; n. x( y" p% r# V: e- L, C
  452. Button_Scan:; f1 U% ~* r7 r, C. a8 |
  453. LDA #$01
    + p* V% i( ~8 d1 y
  454. STA $4016& @5 ?9 k  i9 J
  455. LDA #$00
    7 j4 C& m' \  s% h2 j
  456. STA $4016: V' B- w3 Z, K2 O4 X9 y2 Q& p
  457. LDY #$08( ]3 k8 A4 t  n% d
  458. Button_Value:
    # e: n* A7 {6 O7 G1 [! ^
  459. LDA $4016,X
    ! b' J% p4 B6 A+ J' ~! ^' Z1 e  I
  460. STA Button_Status,X0 Y! L' C6 [; D+ }- |5 h' M/ g
  461. LSR/ i6 a" K# D4 a' o" P
  462. ORA Button_Status,X
    0 Y6 ?8 b, Q7 @$ A. U% V) }3 F# r- L1 ~
  463. LSR! U8 ~; _) I8 R; u' C* J- X: L
  464. ROL Button_Keep,X
    8 u2 a# f+ k% z% a
  465. DEY9 A6 X- H+ K1 w* ^3 q
  466. BNE Button_Value5 M5 u' P' {0 T5 o
  467. RTS
    & c6 m) I8 `( K) ]3 `: }
  468. 8 f; C0 K% x# |3 d  Q  h
  469. ;==================================================& H/ E1 q- \, ~9 N: m. z
  470. ;按键自动按压: e2 D( f# [7 t- u
  471. Button_Auto_Press:
      c3 z% H4 \0 g6 o3 x8 ^
  472. LDA Button_Keep
    9 u6 [- o& Q& E( H1 J3 C: Q7 ^* U
  473. ORA Button_Keep + 1- b4 L* J( M0 t9 h  B# J4 [& I
  474. BEQ Button_Auto_Press_End
    7 e' w8 `9 D" m" U6 ]% z+ s% O
  475. INC Button_Auto_Delay. @" k2 E  ?6 O3 C
  476. LDA Button_Auto_Delay
    4 b+ A# d& q2 h! d5 ?0 J
  477. CMP #BUTTON_DELAY_MAX
    ! _2 v# |4 }  I. |( ]
  478. BCC Button_Auto_Press_No_Active: \( u' T* I. Y/ ?' w+ N
  479. LDA Button_Keep
    4 O7 E% j4 g& j. C8 f; h7 ?
  480. STA Button_Once9 w1 e  r# W$ o
  481. LDA Button_Keep + 1
    - A6 E3 k* l* K5 L- J
  482. STA Button_Once + 1- |1 W# Y3 E( P' Y9 V
  483. LDA Button_Auto_Delay. [: V% A( K& Z
  484. SEC2 e, a& E- f  ^) T) [) _
  485. SBC #BUTTON_DELAY_SPEED( o8 w9 }0 I9 E+ h5 k6 v4 h
  486. STA Button_Auto_Delay
    " v' E1 ?# S. ?4 o) v; m
  487. Button_Auto_Press_No_Active:
    6 F5 K. p/ m+ j  B3 A  ]% x
  488. RTS: j$ W% A/ D& }) i: e
  489. ;----------------------------------------1 c# z* H% q4 k5 C3 h& a
  490. ;未按压按键# I9 s* K2 ]0 e0 T0 C
  491. Button_Auto_Press_End:
    9 z# m' ^* Y1 w9 P4 r* D: n2 N
  492. LDA #$00
    4 p9 e7 `* M3 U6 h& _! |- g  R
  493. STA Button_Auto_Delay  J- ~7 o, G. X  q2 l
  494. RTS
    : m* p' g0 r, k2 G' _4 v9 y
  495. 1 G1 r, D2 e" O( ?
  496. ;==================================================
    5 P) a( _8 r) J6 a# b, w' Q
  497. ;设置PPU写入模式2 m! K/ G: o- l! c3 H. K
  498. Set_PPU_Mode:. R- q& H1 T. Q5 i0 `, T) ?
  499. LDX FC_PPU_Cursor
    1 {5 ]! K; U/ @  \5 K
  500. STA FC_PPU_Buffer,X( i9 Q8 u$ ]2 S5 h
  501. INX+ E0 }, u' d% i7 i$ @
  502. STX FC_PPU_Cursor
    0 f9 P1 Z7 D+ v) ^" H
  503. RTS$ R/ J2 }& s7 u- c, B

  504. % y9 n+ D; p, A
  505. ;==================================================
    # h9 I: r% t+ S8 b
  506. ;写入单独一行文本
    $ O5 e2 N2 B9 ^4 p4 m+ b( f1 l
  507. Set_Select_Addr:
    $ b9 Z4 J% k% k* _: R2 {7 r
  508. LDX FC_PPU_Cursor
    ! q+ T: A  r, o6 W
  509. LDA FC_Select_Temp/ w( P; n! i# m, k6 `9 q+ M' i# M  D7 R
  510. ASL% @# _$ h/ W5 D- C7 M
  511. TAY( _# a. Z6 _- n
  512. INY% C* }# A7 L: q4 v# j% m
  513. LDA Text_PPU_Addr,Y$ {9 J5 d7 o; d2 h# T* u6 G
  514. STA FC_PPU_Buffer,X' a2 o  O( G1 H( J0 \
  515. INX+ I, n1 _  M& Y3 J& k  g9 F; _
  516. DEY+ N  T5 d. r8 @) J; I# L3 M/ p
  517. LDA Text_PPU_Addr,Y
    & ]0 {4 i5 M# F7 y0 R0 E
  518. STA FC_PPU_Buffer,X. G0 f9 t& ]8 K
  519. INX
    9 K3 U3 J' o& h( {0 v6 j/ }( {! ]/ j
  520. STX FC_PPU_Cursor! _+ h+ U8 z% `$ `: H
  521. RTS
    3 b7 I" t8 e! m, q" @# J
  522. ; x6 ^. T' F' J2 c# v8 w
  523. ;==================================================
    0 c5 c- ^+ ~3 o" E& V! o7 b! P
  524. ;写入单独一行文本
    0 r* U0 a  e6 X# n, l+ t, P
  525. Set_Select_Data:+ M/ ]% a! E" b, K9 K4 l
  526. LDA FC_Select_Temp' }- B: ]& [. I9 `
  527. CLC. }) A6 H/ v! w" I
  528. ADC FC_Page_Cur
    , i" e7 s4 e( P. ?$ t
  529. ASL5 `4 N+ ~* u6 q+ t
  530. TAY3 ?0 j5 J6 l( a$ ]7 |
  531. INY
    ; o( n* C- ?$ b0 q: @$ j
  532. LDA Text_Data_Addr,Y" z7 u% q# P, o2 o8 x( a8 k
  533. STA FC_Data_Port_A_H4 [: [; S# @  V$ C) K: h
  534. DEY8 e! E8 v- b3 d9 _
  535. LDA Text_Data_Addr,Y( [# h% t! ?( {2 F) S. v8 h5 f, X
  536. STA FC_Data_Port_A_L
    0 E$ P5 [& \- R4 v  C
  537. RTS6 L/ F4 {  U# U+ Y
  538. 9 h: d0 a% g# y4 j, a
  539. ;==================================================
    7 g# z6 S* Y( }. Y; g3 Y, A
  540. ;清除旧文本
    # ^, O4 y; b0 m
  541. Set_Select_Data_Clean:
    7 s3 d/ L% R! O, W+ I" M. W' D  S
  542. LDA FC_Select_Temp
    7 Q5 M! `, c- D$ b8 R
  543. CLC# v) X& r6 L' x+ E( Z
  544. ADC FC_Page_Old$ i  z' }1 a2 I+ h! L
  545. ASL$ R% T8 J4 G2 p  G; u9 {
  546. TAY
    6 S3 s4 a: Y% g  X
  547. INY
    * `- b4 Y" U! H! b8 w/ v6 Q( b
  548. LDA Text_Data_Addr,Y1 j/ o3 s* U# M, {
  549. STA FC_Data_Port_A_H
    6 U4 L% Q' T' g. w' l; b$ C
  550. DEY
    : T9 s2 |2 p- T. {1 _* t
  551. LDA Text_Data_Addr,Y& ^6 @" i5 O7 i# Q6 j
  552. STA FC_Data_Port_A_L
    : Y& }/ H9 K" @  T$ i  K* g
  553. RTS
    ' }- a: ~8 p1 b" F6 z  K

  554. 1 i% v7 `# G5 Y/ Q5 K3 V1 T4 k
  555. ;==================================================* i2 V; r- |8 I% z* j3 J8 _/ `
  556. ;写入单独一行文本
    $ [* r' [+ x0 W
  557. PPU_Data_Write_Item:
    " F7 r. w% ^  ]
  558. LDA FC_Select_Temp
    5 v5 v# e: D/ s4 E
  559. CLC
    1 ?1 g1 }, Z* k! j/ E0 |
  560. ADC FC_Page_Cur& V$ L- v5 @' N, x6 {- t
  561. CMP #FC_ITEM_SUM
    ( G9 z1 g, ?( Q( S5 H% P- Z" `
  562. BEQ PPU_Data_Write_Item_Set
    ; g6 u/ ^/ U! a7 R( I) D
  563. BCS PPU_Data_Write_Item_End
    " q5 W- ?( u5 N; w
  564. PPU_Data_Write_Item_Set:
    7 }# j- F, }  \9 w* {, S5 N& H
  565. LDA #FC_PPU_MODE_CNTL+ q% {, A# o7 b2 m6 V3 D- N
  566. JSR Set_PPU_Mode
    " ^4 V8 c% e" o
  567. JSR Set_Select_Addr
    * z. N0 r5 j* z
  568. JSR Set_Select_Data4 g8 k6 ?  @$ v4 `
  569. JSR PPU_Data_Write_Line- I8 f3 l; K# X& N2 K3 Y9 v/ L0 P2 w% v
  570. PPU_Data_Write_Item_End:
    5 o; h- g  i0 }% v9 L# V- o" A1 I* w
  571. RTS9 K' i. v; [/ I" Y& u9 Y& Z9 \
  572. $ J8 a! Y- b0 v
  573. ;==================================================* J9 g. o; l- [, N6 z- e3 Z
  574. ;清除单独一行文本
      ^! p' W( {. H) r
  575. PPU_Data_Clean_Item:2 \1 x" U! A8 F. x  M7 ]0 e
  576. LDA FC_Select_Temp' K; F8 E8 `$ C( V8 S
  577. CLC4 M8 ^5 K/ ]/ l+ f6 e, A
  578. ADC FC_Page_Old- N2 q( o" K3 }& s0 v. Y* |3 f
  579. CMP #FC_ITEM_SUM
    : I" E; b" n2 y# V& g7 l+ N; Z  Y, R) V
  580. BEQ PPU_Data_Clean_Item_Set1 p8 k  s% P; P! J, i
  581. BCS PPU_Data_Clean_Item_End
    - l/ ?& b4 [* U- U
  582. PPU_Data_Clean_Item_Set:  a6 G! M: {" l6 q5 u
  583. LDA #FC_PPU_MODE_CNTC3 Z: s4 S$ Z( B% s/ _9 x
  584. JSR Set_PPU_Mode
    - l( x0 x, q: w/ x, v( p% X; g
  585. JSR Set_Select_Addr5 a! F+ F! Q+ ~3 Q
  586. JSR Set_Select_Data_Clean
    " h3 s7 i9 d+ }4 W# I
  587. JSR PPU_Data_Clean_Line. R+ z, Q8 H$ n  f5 g6 A) O
  588. PPU_Data_Clean_Item_End:
    3 @, E8 X8 N% W+ C, n: r3 g
  589. RTS& v% L$ k# j% t3 A' W" t% y0 o

  590. 0 k6 U" |* l# y4 f+ |
  591. ;==================================================, S2 N! l4 m3 ?. U2 g% S, T6 v- {( K# }
  592. ;页内容写入
      i! y1 O1 U) b! m& ^% E
  593. PPU_Data_Page_Show:
    - v$ [3 V$ a5 b$ Z& \# U
  594. LDA #FC_PAGE_SIZE/ z( `4 L4 G" e% J, o
  595. STA FC_Page_Item_Count6 d" M' ~) O  j) d
  596. LDA #$00+ o$ M# I1 Z( ?" ]+ D
  597. STA FC_Page_Item_Buffer" k: Q. y1 V; W7 C3 b( P
  598. STA FC_Select_Temp. H! O& ]( I. n* Y. W
  599. PPU_Data_Page_Item_Set:
    * K8 F# z6 J. X+ k/ G( J3 t  R; J
  600. JSR PPU_Data_Clean_Item1 x& c/ y, ~! C1 i8 f, l
  601. JSR PPU_Data_Write_Item1 ?4 s4 G; r) J; x0 a
  602. JSR Function_Status_Clean
    0 Q; @5 b! l% i# F. d, Y7 H, K! t
  603. JSR Function_Status_Show1 j/ r% T$ U. H+ n; q
  604. INC FC_Select_Temp. U9 K- f. @9 L
  605. INC FC_Page_Item_Buffer  d, a/ a+ S" m+ a/ U' `4 `
  606. LDA FC_Page_Item_Buffer5 t7 E# s; Y6 \% s( {
  607. CMP #FC_PAGE_BUF_SIZE. i& I8 A! j% q3 J, `6 v
  608. BNE PPU_Data_Page_Item_Set_Check  v# P! |* W/ s/ V2 Q9 g( c
  609. JSR NMI_Delay0 [% u* L- ~4 E0 i1 w- {+ u( j
  610. LDA #$00. Z, |$ z# J5 v6 [8 o. ~3 p% c4 S
  611. STA FC_Page_Item_Buffer
    % w- W1 }7 v2 J' [( p
  612. PPU_Data_Page_Item_Set_Check:
    ' f6 w3 u* f* b0 ]! Y
  613. DEC FC_Page_Item_Count9 {2 S8 p7 F. H5 Z* \5 G
  614. BNE PPU_Data_Page_Item_Set8 f. D1 e) A0 T- h
  615. PPU_Data_Page_Show_End_Check:9 u  J) `  O: b" j: T" t6 f! I* _/ n
  616. LDA FC_Page_Item_Buffer7 s# M- j! _* A1 X+ e
  617. BEQ PPU_Data_Page_Show_End, M8 {  U! q, {
  618. JSR NMI_Delay( L3 s1 r( s- {. W3 N  b
  619. PPU_Data_Page_Show_End:
    7 H# q. ^; h) N
  620. RTS
    8 S' o, _. P8 s; p  A& X5 j, ~
  621. & w" P" a' z2 \. ]
  622. ;==================================================$ i/ u0 s) i% k# N
  623. ;PPU单行数据写入接口/ j: O2 J: M$ J, k. I  i
  624. PPU_Data_Write_Line:
    % Z5 ?. c/ U, n5 Z$ l- d6 b
  625. LDX FC_PPU_Cursor
    # U  J( L6 E* r- P' e! z
  626. LDY #$005 N6 ^$ P! _4 n; F! z# m
  627. LDA (FC_Data_Port_A_L),Y9 q! g; W: a" E" _5 t
  628. STA FC_PPU_Buffer,X
    # u# ]$ Y8 Q6 n3 x
  629. STA FC_PPU_Data_Cnt
    % k  t! p+ }7 p
  630. INX( {" O/ p- T: H4 T1 P5 c1 n9 m! c. K
  631. STX FC_PPU_Cursor
    8 M4 E  G& I( k+ ]( @: X
  632. INY" b5 t3 W6 L6 \% O
  633. PPU_Data_Write_Line_Set:
    8 T$ K: j  W" [4 J; c$ k
  634. LDA (FC_Data_Port_A_L),Y8 D: b2 O) S6 ^) B
  635. TAX
    7 j$ x! }7 x/ J( g# O
  636. LDA Char_Rom,X 6 I* J7 y5 j! S* C3 ]' J) ?+ q( |
  637. LDX FC_PPU_Cursor
    + l0 x. s+ \: W% |
  638. STA FC_PPU_Buffer,X
    9 l* z4 C& J2 Z; e) k  h0 N
  639. INX
      X" c* B3 f# h3 U3 B/ I/ |+ \  Q
  640. STX FC_PPU_Cursor
    6 G: \* _/ K  _# c- F2 }3 @* W0 X
  641. INY
    8 ^/ e/ _/ w, g" r" B4 A
  642. DEC FC_PPU_Data_Cnt* p5 I! T/ O6 ^/ Q% o8 M! k8 c
  643. BNE PPU_Data_Write_Line_Set; c& {4 d# T+ H; p$ d% _
  644. STX FC_PPU_Cursor( \/ G" Y- b, p+ M
  645. RTS6 N; f" r8 {9 j0 e

  646. : [4 S9 v; Y# ^- e( g8 i
  647. ;==================================================
    : \9 e% i9 r# ?* E, H
  648. ;PPU单行数据清空接口0 Q1 h+ D4 o6 x' S. f* a( n  m
  649. PPU_Data_Clean_Line:  [9 g, z; W5 ^- f
  650. LDX FC_PPU_Cursor$ K. L& R+ m; A; s( `% d
  651. LDY #$00
    ; U5 S2 u1 }7 b; ~. d) d
  652. LDA (FC_Data_Port_A_L),Y
    9 q' K& D  i" G! |1 v
  653. STA FC_PPU_Buffer,X3 M! O# u2 l" r- b. e
  654. INX
    3 W) o7 u7 }9 @7 Y7 _; E; }- u; d; q
  655. STX FC_PPU_Cursor" ?" X. L7 G( w
  656. RTS5 c! m5 o+ u3 W  ?* h* [* W

  657.   O+ j' J9 O, J# J! N5 x
  658. ;==================================================
    " W% U6 t7 R) M9 d
  659. ;更改选择项
    8 @  c' d1 d# j
  660. Change_Select_Item:1 H6 D- g  J/ t7 ~6 R, S
  661. Change_Previous_Page:
    $ |6 J9 U2 i+ o5 E6 f
  662. LDA Button_Once
    : n. q+ s  B" r2 Q0 ^6 f
  663. ORA Button_Once + 1
    * R: |9 a" |# b" q
  664. AND #$02
    : V4 W% N1 _6 d2 J8 k
  665. BEQ Change_Next_Page+ y( u4 C5 S, V  o5 \# F# G
  666. JSR Change_To_Previous_Page9 ~7 b1 ], r9 D. Y* d$ ~
  667. Change_Next_Page:
    + _/ X9 O6 t' V9 }: t
  668. LDA Button_Once1 C: H8 @! `3 |! ]" D1 s+ H4 k
  669. ORA Button_Once + 1
    : a& y  u" C- w- d* M
  670. AND #$01' d! c. O# C# F4 M  M
  671. BEQ Change_Previous_Item  i) S4 W1 Q# e. R" i
  672. JSR Change_To_Next_Page" t) M7 C5 O4 c+ F6 i- D5 |1 |
  673. Change_Previous_Item:8 F5 t$ ]6 E# m0 |9 O( E/ p
  674. LDA Button_Once- O( y$ B, y, Y- f- P& Q
  675. ORA Button_Once + 1/ q1 B, ]% q* i9 V3 V* U$ R
  676. AND #$08. y# o0 J# p8 p* A
  677. BEQ Change_Next_Item, x/ j( f+ u2 X, C$ K' |
  678. JSR Change_To_Previous_Item0 i) f' z% m" u$ B0 @( X: }
  679. Change_Next_Item:
    , }; [7 ^7 c$ c9 Y7 z3 O! p
  680. LDA Button_Once; }8 ~7 M+ e2 C; T/ C" m
  681. ORA Button_Once + 1
    $ N* v% B0 X5 [  m: v
  682. .IF FC_IS_DOUBLE_PLAYERS
    . r; @  n, m4 x1 Z; ^9 w
  683. AND #$049 n. n1 u4 a! S3 q
  684. .ELSE
    $ I7 Y' [1 G5 h, B! E2 c% X  E
  685. AND #$24  y3 ~8 \# X9 q7 k4 a9 I8 C/ ?
  686. .ENDIF
    ! b/ C# D% y' Y. ~
  687. BEQ Change_Select_Item_End2 n! F: V$ H2 D3 j' K
  688. JSR Change_To_Next_Item. w7 y( c( k% T
  689. Change_Select_Item_End:3 z% g+ }' v+ y; b& k, G
  690. RTS
    , Y: Q( g' ^8 c  m/ ~6 ^, o
  691. ' ?9 v0 @- z+ V# |
  692. ;==================================================
    5 |+ B3 z! b: A% {8 W6 h
  693. ;切换到上一个选项2 @" G$ N  f1 j4 d9 u& A
  694. Change_To_Previous_Item:
    ! ?) l4 ]5 ^* b; k
  695. LDA FC_Select_Index8 ]7 u( W# u: a+ Q$ E9 P
  696. BNE Change_To_Previous_Item_Set
    ! A4 m* [; ~& k3 u# m
  697. ;----------------------------------------  r4 q8 x! @7 X2 U, V& y
  698. ;切换到末页最后一项8 |' w% g( i/ z# f, j2 @
  699. Change_To_Previous_Item_Set_Last_Page:
    9 B/ V6 _# a$ H: c0 p
  700. JSR Record_Last_Page_Index2 ~4 G$ \/ C0 U
  701. LDA #FC_ITEM_SUM
    # a7 A3 M+ N& x8 F
  702. STA FC_Select_Index
    ; N6 I3 O6 s! }- l( K5 N/ A9 X% x
  703. LDA #FC_PAGE_MAX
    % h3 g% v8 ^5 y: N8 n
  704. STA FC_Page_Cur
    - r  P$ Q% b- A( S
  705. JSR Update_Page_Content9 b7 x0 u+ i. K. w' E: h+ N* b3 X  F! p
  706. RTS
      {* [$ V* h$ P& q: f1 y
  707. ;----------------------------------------
    ! M& p! M) N8 e& @- E- v9 l! _0 @
  708. ;切换到上一个! j0 O  x* R) m; t
  709. Change_To_Previous_Item_Set:
    : i. ^+ S/ r# y; s
  710. ;检查是否需要换页
    ' a* A3 E2 `$ J) P& y
  711. LDA FC_Select_Index+ B) O( L" q: c' G! L% U' o3 L
  712. CMP FC_Page_Cur5 |% C2 p& a5 R0 |
  713. BNE Change_To_Previous_Item_Set_No_Page
    ' |; k2 V7 E) U( z9 F4 N
  714. ;----------------------------------------9 X& f3 Z2 u* l* p
  715. ;切换到上一个(需换页)- W! a  P0 j$ l$ ], |' _
  716. Change_To_Previous_Item_Set_Page:0 m4 C/ r: k, [. n+ r
  717. JSR Record_Last_Page_Index
    3 ?* V# Q, B# Z( n0 P& w
  718. LDA FC_Page_Cur
    ' X0 E( N  }( d8 q
  719. SEC
    * J' B6 D% N/ ]: c
  720. SBC #FC_PAGE_SIZE
    6 h6 {+ _7 O) m( j, \
  721. STA FC_Page_Cur
    ( R( U) H& S: Y4 l8 s
  722. DEC FC_Select_Index3 }$ |: ~8 ^$ R. t. |" V
  723. JSR Update_Page_Content8 N9 S3 g7 r/ z4 J4 F' Y
  724. RTS
    . z5 h! h- L# h" U
  725. ;----------------------------------------
    7 T( k7 j! h& i2 I* Q- m
  726. ;切换到上一个(无换页)
    . f/ ~; ]$ L/ u3 v: ?
  727. Change_To_Previous_Item_Set_No_Page:$ f1 T; b5 n8 ~7 v. E4 p
  728. DEC FC_Select_Index
    - H0 a% T/ H9 C4 r$ i
  729. RTS
    * G  S. S+ @; L" |6 l2 o# y( L

  730. 6 u- u4 S) ]& g2 G0 s- o
  731. ;==================================================
    * ~- ]6 C9 Y4 ~) [
  732. ;切换到下一个选项5 n: P8 E7 y0 E
  733. Change_To_Next_Item:) T# N& s% r+ T6 t1 \; d
  734. LDA FC_Select_Index4 F) g& [5 `/ }* X9 r: l2 S, K
  735. CMP #FC_ITEM_SUM7 R, V( {. {) s, N- K4 B" }; @6 S
  736. BNE Change_To_Next_Item_Set
    2 A. q$ }1 f0 v- s
  737. ;----------------------------------------
    % c$ j* b+ M# ]$ Z: j+ _
  738. ;切换到起始页第一个% |2 n6 c' C' M# h
  739. Change_To_Next_Item_Set_Begin_Page:
    3 e& ~  E  T: \
  740. JSR Record_Last_Page_Index
    ! l, z3 j& k3 J# S8 f3 ^
  741. LDA #$00, {- l5 s* v; u  \$ E6 Y% F3 m+ o
  742. STA FC_Select_Index7 C2 `4 z; L1 H& ^" U* I) L% {
  743. STA FC_Page_Cur' \$ ]) r8 S$ T2 b
  744. JSR Update_Page_Content3 M* ^! Q0 i) r! Q$ `! X( h
  745. RTS
    ' b5 |' X: T- }/ I6 X: h( i
  746. ;----------------------------------------! j0 R0 N" j: X" O; U% ^& s
  747. ;切换到下一个
    - o: Q% a1 B2 `& v" N
  748. Change_To_Next_Item_Set:8 v0 B4 F( x* D$ U) r
  749. INC FC_Select_Index
    ' O0 r- `: y8 l
  750. LDA FC_Page_Cur
    * z* j$ ]$ a: ]# s: C( T7 e
  751. CLC1 v9 Y$ g# k- c3 `2 s
  752. ADC #FC_PAGE_SIZE' o% ~0 }  m+ z
  753. CMP FC_Select_Index
    3 R- a" y1 _: e! f' [- H% U
  754. BNE Change_To_Next_Item_Set_End/ N% b3 g# O9 ?5 \, S" I
  755. ;----------------------------------------
    $ ?& \  K* \( q/ I# f& C
  756. ;切换到下一个(需换页)
    ( a" ^4 h( @, b6 I1 }
  757. Change_To_Next_Item_Set_Page4 p6 @1 i: L' O4 B; Z) D( c
  758. JSR Record_Last_Page_Index% F7 c' l- k( M, ]& y) e
  759. LDA FC_Page_Cur# l  Q+ s; e3 C: S; j7 l3 E
  760. CLC2 _' `: L7 K9 b7 W9 S7 L
  761. ADC #FC_PAGE_SIZE0 a9 |1 `4 v- B+ A' H
  762. STA FC_Page_Cur4 j9 Y7 _; M' B" W( m- {
  763. JSR Update_Page_Content
    4 I: m4 `% W+ w: ]
  764. Change_To_Next_Item_Set_End:
    & L# \% |* B0 D* P4 u
  765. RTS8 ?$ ?5 `1 x% e' ?- |2 y! X

  766.   s0 U4 [$ ~  ~$ y" n
  767. ;==================================================/ I8 s# V# g2 {, D' i
  768. ;切换到上一页; j2 T8 o. `0 G- C3 ]
  769. Change_To_Previous_Page:
    5 n# |, R5 G  U, R5 I7 p: s; M
  770. LDA FC_Page_Cur+ ]. e% b" U" |
  771. BEQ Change_To_Previous_Page_Set_Last_Page
    1 x3 r* T0 u% G9 J: Y1 K$ a
  772. JSR Record_Last_Page_Index
    8 b9 R5 V7 S" k& j4 k5 y" V2 N
  773. LDA FC_Page_Cur
    ! A5 D7 g: t8 n9 Q
  774. SEC
    " H+ q# c- B& w* k
  775. SBC #FC_PAGE_SIZE
    , S  x- g( f: E2 Y0 K
  776. STA FC_Page_Cur
    % O$ }0 K7 A' z  Q" j% F% o
  777. LDA FC_Select_Index
    / M5 r4 `9 J5 n' e# o
  778. SEC
    & A. `# @+ _* A& j# G
  779. SBC #FC_PAGE_SIZE+ ?' H! Y5 y0 T& Z# C9 r- s
  780. STA FC_Select_Index. g) P4 z$ Q0 u+ X% o% X
  781. JSR Update_Page_Content  t3 G+ h1 Y4 q
  782. Change_Select_Last_Page_End:
    " O% C4 ?2 E7 r5 U
  783. RTS8 o; n; M, ^  Q4 K1 O
  784. ;----------------------------------------
    4 {, m! w: K+ r+ w/ J, N! v0 w  `2 a$ V
  785. ;切换到最后一页& `6 _, i5 P+ [7 L+ n5 A
  786. Change_To_Previous_Page_Set_Last_Page:% X; E3 k' D% Z3 f; a, N
  787. LDA #FC_PAGE_MAX
    1 A3 a8 l; @5 n
  788. BEQ Change_To_Previous_Page_Set_Begin_Item
    : H, \5 {2 O, K0 D
  789. JSR Record_Last_Page_Index
    " T9 k  r6 I! J! F: r( o
  790. LDA FC_Select_Index3 P/ U1 f5 ?7 G0 w8 S' [
  791. SEC/ M; w% K/ V0 y; q: g) |
  792. SBC FC_Page_Cur
    3 `1 k4 Q9 Q# |
  793. CLC# M+ Z" Z4 @9 `# A9 z! C7 d0 o9 q4 I
  794. ADC #FC_PAGE_MAX$ S; s: k4 Z' q5 V9 @
  795. STA FC_Select_Index
    : ^( X" p+ v2 A( R' l- _
  796. LDA #FC_PAGE_MAX# s% l4 ]1 c, l& }; ~
  797. STA FC_Page_Cur8 _& `1 W* M+ k! C7 n& ~
  798. LDA FC_Select_Index
    ; x- X) D+ k  e9 h* v8 P2 T9 ~0 I
  799. CMP #FC_ITEM_SUM  k0 L- R  p1 M( n+ r* P) ?
  800. BCC Change_To_Previous_Page_Set_Last_Page_End
    ( Y0 V7 ]: y0 O1 q
  801. ;----------------------------------------
    1 T0 H0 ]- i! }
  802. ;切换到最后一项
    , _: S; E: o. \# i. X
  803. Change_To_Previous_Page_Set_Last_Item
    ; K9 K! Z5 ~$ k, k- }  k" x
  804. LDA #FC_ITEM_SUM' l7 B& p, S, _
  805. STA FC_Select_Index
    4 S9 e; U: x( k6 [) S: a; \3 G
  806. Change_To_Previous_Page_Set_Last_Page_End:
    & @2 s2 \# D- F1 q* ?: o$ ]
  807. JSR Update_Page_Content
    1 p/ S* q( W1 G
  808. RTS* |3 d. ~/ J8 |2 M
  809. ;----------------------------------------
    % @1 u: x; f9 i8 O! U
  810. ;切换到起始项(最大页只有一页时)
    3 X  @& O) a0 z4 H, Z3 s' |
  811. Change_To_Previous_Page_Set_Begin_Item:
    ; y5 X4 l# N$ ?
  812. LDA #$00
    * a5 F' \( ~( M7 N- _/ t3 D
  813. STA FC_Select_Index
    2 P9 G9 I( E9 K& D0 t
  814. RTS
    % y# n! y) W# d0 u' s# S

  815. : B0 ?# [" e5 V' E! i: i
  816. ;==================================================' c% R& n: M# |8 R7 H( t! V. }/ J1 v$ d& M
  817. ;切换到下一页
    * t% p5 c8 j2 p9 {; T
  818. Change_To_Next_Page:
    ! o5 q# G, I+ H3 o
  819. LDA #FC_PAGE_MAX
    5 r0 g7 J, h" T: }8 R
  820. BEQ Change_To_Next_Page_Set_Last_Item* Y, ]) Z  x: T
  821. LDA FC_Page_Cur
    4 ]6 y8 e4 h+ y
  822. CMP #FC_PAGE_MAX+ w9 P0 V) e1 O& X' y1 U9 p0 s; f. }
  823. BEQ Change_To_Next_Page_Set_Begin_Page4 O$ |7 K5 n- y/ t' S$ y, s
  824. ;----------------------------------------
    7 G+ z6 T( m* Y, V* X* f2 t
  825. ;切换到下一页
    6 ^2 h) J3 _; @
  826. Change_To_Next_Page_Set:  E. N3 a' Z- B/ Z+ G4 u
  827. JSR Record_Last_Page_Index, f6 U. y" ?% j: N6 |0 J1 o
  828. LDA FC_Page_Cur2 _' |1 w. `2 k. z
  829. CLC
    8 p8 N/ a$ F% C: \6 s
  830. ADC #FC_PAGE_SIZE
    " ?# r/ v- ]* g
  831. STA FC_Page_Cur( m9 H, e5 z- H% E" r( K
  832. LDA FC_Select_Index
    0 [/ l4 \9 R% D" O+ @3 h
  833. CLC: k8 k1 m9 z' Q' K0 _; X# n
  834. ADC #FC_PAGE_SIZE8 N9 s# r3 N+ f
  835. STA FC_Select_Index
    : C! X7 M" q( k$ e! R% ~2 ?
  836. LDA FC_Select_Index1 H5 C; x1 W- D8 {& N4 A
  837. CMP #FC_ITEM_SUM
    + w; Q# N( r+ @! n
  838. BCC Change_To_Next_Page_Set_End" M! {9 |( z( U. f1 o
  839. ;----------------------------------------6 l2 Y) O4 Z2 P
  840. ;切换到最后一项$ \+ u( E# E8 N# b: u- o4 w& o
  841. LDA #FC_ITEM_SUM, ?) S5 O' T6 T! i, r
  842. STA FC_Select_Index
    " y6 P+ a; \% u
  843. Change_To_Next_Page_Set_End:
    9 I7 B( @1 ^! T% ?
  844. JSR Update_Page_Content
      U) c+ c) k( \
  845. RTS/ S' j+ ?" R. K; y: ~$ E) i
  846. ;----------------------------------------
    ! n' Q7 y3 x. a/ ^/ o! \
  847. ;切换到起始页
    # ~+ B" D4 I* b
  848. Change_To_Next_Page_Set_Begin_Page:
    - B/ I# i& R; z) ^* E
  849. JSR Record_Last_Page_Index
    ; ]- B5 r4 ~  ^2 y$ M) b- z
  850. LDA FC_Select_Index
    5 H: J" G$ [1 \- a+ u. ?+ j: U
  851. SEC
    " z( ]& w; D: M& v7 X
  852. SBC FC_Page_Cur
    ; S' B/ M! c/ O# Z1 o
  853. STA FC_Select_Index; \0 R' ]" B: }" f5 J
  854. LDA #$00# Z5 x- W$ k8 w) [4 u
  855. STA FC_Page_Cur
    & q7 [5 n% V, f9 T
  856. JSR Update_Page_Content
    8 h# k2 i9 X! x; @$ _9 ?0 R- L, w
  857. RTS, V* R  J' f0 ~) [! A/ |7 l
  858. ;----------------------------------------
    7 v8 |& F, y. I  Q& r" h' `8 p
  859. ;切换到最后一项(最大页只有一页时)
    1 f0 F3 u/ r! t* }
  860. Change_To_Next_Page_Set_Last_Item:- G  ^6 |9 M& n" k$ [3 N4 q$ p1 x
  861. LDA #FC_ITEM_SUM& X7 m& Y& E" ?+ u" z& C7 m* W4 \) @
  862. STA FC_Select_Index' |+ \  m& ^: Y! w. d3 u! R
  863. JSR Update_Page_Content9 A) `+ @9 F: H# [
  864. RTS
    1 R0 m- I- q1 x0 }4 f) W, i) j
  865. . C( B0 ~, T; ]/ |& s  q
  866. ;==================================================
    ! Y; z$ h' [  B* A1 A9 J
  867. ;更新页面内容
    ) [, Z4 k" |( `( g  n6 m
  868. Update_Page_Content:  Y5 @: A% C* ]' d% y$ P- }/ d7 S
  869. LDA FC_Page_Cur7 ], o# j& Q9 A# I% |# A& d3 ]
  870. CMP FC_Page_Old
    2 c. x2 ~4 c$ ?: ?1 S8 @
  871. BEQ Change_Update_Page_End
    % N9 g1 G& {) d7 p$ V
  872. JSR PPU_Data_Page_Show
    % P; r5 {; Z2 U5 J2 u" n" r
  873. Change_Update_Page_End:1 E8 b& g. G: z4 ]1 Y6 M
  874. RTS
    ' ?# R, S" I( r
  875. , A2 v& i9 K  k* @
  876. ;==================================================
    : k! ]# m0 U. G' S; {* Z* L
  877. ;记录上次页索引
    % U, _' E* i& l# E" {) ]  q
  878. Record_Last_Page_Index: c, u2 P4 p5 C7 q8 [3 o
  879. LDA FC_Page_Cur
    + _' K( R4 J$ o3 V
  880. STA FC_Page_Old
    & ?: p0 R- z* P3 A
  881. RTS
    " ^; Q0 y9 ?& L2 ~2 H
  882. 6 A# V, F6 f: y& p4 I1 i# K
  883. ;==================================================2 l2 ]1 ~- F4 k
  884. ;显示当前选择项光标# f* h( o. L- ^+ p
  885. Show_Select_Cursor:4 Y% x' `; ~% |: c7 S  O
  886. LDA FC_Select_Index
    3 `3 U6 h4 p9 _, L: _! R; q
  887. SEC
    2 O7 w! g2 l2 ]
  888. SBC FC_Page_Cur
    ! V  C( Z+ d. X6 g* }8 `$ b6 X$ o  z$ C
  889. ASL
    0 ^/ Z2 P9 w* n
  890. TAY
    0 j+ a0 f7 n7 A2 A4 \4 |
  891. INY7 G8 e- t' ^( u
  892. LDA Text_PPU_Addr,Y; N: L" K- ?# h  f- y, e
  893. AND #$03
    9 A9 h& s& |5 i+ O
  894. STA FC_Cursor_Addr_H
    , X* m" ?6 J# m. p" o; s7 h
  895. INX& }6 h. M7 j: ?8 S" K0 U
  896. DEY1 K" `2 \/ G  k: Z
  897. LDA Text_PPU_Addr,Y, y3 u  Y! H" ], A# m( ~; a
  898. STA FC_Cursor_Addr_L
    2 J9 {  b4 y& s  j, w' r
  899. ;----------------------------------------
    ( j4 w8 D% v& S0 O
  900. ;计算光标X坐标/ s7 I; n1 a! I6 ?- O
  901. Show_Select_Cursor_Set_X:, O3 @& J# ?8 J
  902. LDA FC_Cursor_Addr_L4 A/ x% R2 K: p1 i: T. j
  903. AND #$1F
    : }" W7 @# Q! G. o  h3 H
  904. ASL
    ; m+ p4 a/ \/ ~+ {# m& s3 b
  905. ASL7 ]( v& g  `  \
  906. ASL
    ) j* F1 i; m: h) X* r; C! w
  907. STA FC_Cursor_X" q9 h( z/ }5 N7 x! Z; h
  908. LDA FC_Cursor_Addr_L4 p0 C; A+ g4 Q. }0 s& [/ T
  909. AND #$E0
    * ?/ K8 T2 o4 L3 X! V2 D. q
  910. STA FC_Cursor_Addr_L
    3 V& h5 B- _) c' V
  911. ;----------------------------------------
    / V8 n: ^7 U# N7 V7 j
  912. ;计算光标Y坐标
    ; u; x2 H, ?/ h" v7 a
  913. Show_Select_Cursor_Set_Y:4 j5 |0 s! G* x9 s/ e/ S: P
  914. LDX #$057 U! z. R6 o* j
  915. ROR FC_Cursor_Addr_H; i# c2 o- w5 z3 ]! t: ]- G
  916. ROR FC_Cursor_Addr_L
    7 g0 i+ S/ G) y1 n% r9 I) `0 x
  917. ROR FC_Cursor_Addr_H* O' D4 K! W0 V- o0 J! e
  918. ROR FC_Cursor_Addr_L
    ( h5 o& I- O# E; _1 T  D
  919. LDA FC_Cursor_Addr_L
      d  k1 G3 z$ e6 K4 x/ P7 V
  920. STA FC_Cursor_Y
    + z4 S. U6 y" s% y6 m
  921. ;----------------------------------------2 v# t: F" {* B) q# _2 u0 a
  922. ;写入光标
    / O5 |3 ]) e" T; H4 I- x
  923. Show_Select_Cursor_Set:7 c3 A$ Q, q- Y) u6 ]# \
  924. LDA #$00
    # `6 P; k8 Y# _! I) Y
  925. STA $2003' |# z9 x' R7 V# X
  926. LDA FC_Cursor_Y6 c: @5 t/ q* l+ N! W0 X
  927. SEC
    & q- y/ r* D. V/ e6 R: a1 z' v) E" X
  928. SBC #FC_CURSOR_OFFSET_Y6 {% a% @; x+ m3 x9 y0 E
  929. STA $2004! K, f3 \& w  \; O; }
  930. LDA #FC_CURSOR_TILE
    / @' ~7 s  H2 T! ?0 l
  931. STA $2004. X. t( o6 f1 R) r  \" b3 w
  932. LDA #$007 z5 F" |6 F6 i5 q/ ~( ?
  933. STA $20042 d4 K$ ?' B- ~$ O; n
  934. LDA FC_Cursor_X2 \( k; r0 D5 S  t  R+ Z; ~
  935. SEC# j+ O$ m& w/ ]1 R
  936. SBC #FC_CURSOR_OFFSET_X+ O4 `% Z  j/ |3 B2 S5 |) r" P9 g4 u
  937. STA $2004
    + f$ C( t& A( v1 Y2 `- d
  938. RTS
    # Z  t  X7 U9 s) e" b4 t
  939. " D% X* L# u4 o
  940. ;==================================================
    % G/ ^9 S( o2 X$ @3 u' |+ |
  941. ;切换功能3 K; {  |5 R: L3 [* k
  942. Change_Function:
    5 G# W) N  {- I2 w
  943. ;----------------------------------------) c0 {2 N, J4 N) f
  944. ;开启功能A
    3 a* B) }/ M1 c5 r
  945. Change_Function_On_A:9 s* Q$ a, p9 n0 S! i7 k$ v0 N
  946. LDA Button_Once$ T; f+ F0 F( h4 d7 ?. P
  947. CMP #$40
    ( ?) P) Z& L& X. H
  948. BNE Change_Function_On_B& v% N9 u7 [1 B# g* I( S' P* i1 Q
  949. JSR Change_Function_To_On_A: s5 o! w2 N  n9 i# w; y
  950. JSR Function_Status_Update
      P! x+ a- M5 x- n- J7 @, }
  951. ;----------------------------------------
    ) W- E% a# ~; Y" E
  952. ;关闭功能B
    5 S; f1 B- b5 z  ~& u! u. k8 u& U
  953. Change_Function_On_B:
    - N  H8 `% @* n: @6 t0 I) @( N& `
  954. .IF FC_IS_DOUBLE_PLAYERS
    ! B5 V/ D" h; [4 x7 _* ]% E+ g
  955. LDA Button_Once + 1) k4 Q. x. \3 L* B2 @3 @
  956. CMP #$40
    4 g9 v- n1 s+ }# x' n' ?  J: x
  957. BNE Change_Function_Off_A* |" f- \* \! Z+ E
  958. JSR Change_Function_To_On_B! }, S% V3 e" i, z1 q
  959. JSR Function_Status_Update# ~6 T& @$ Y" {" J& I9 S
  960. .ENDIF$ I3 S: k2 s0 v" o
  961. ;----------------------------------------
    6 q9 L/ p- z  D* w& l: w# d+ _
  962. ;关闭功能A8 K( B* Q: r/ b* [/ H  h' Z
  963. Change_Function_Off_A:
    # l4 q2 d& s  S7 ^
  964. LDA Button_Once
    ) i6 d4 C3 x& `- i# q; s
  965. CMP #$80$ v2 G( h$ a  G+ q$ {( U  o
  966. BNE Change_Function_Off_B
    6 M/ l. v  i# _% k
  967. JSR Change_Function_To_Off_A. T. S! d# c$ v9 {0 N1 d% n1 ^
  968. JSR Function_Status_Update) K  |) J, Y! Y7 t1 X- h0 g
  969. ;----------------------------------------
    9 A& F3 [% m+ G$ K. L' [
  970. ;关闭功能B+ E# K2 U5 W( P  s( S4 \
  971. Change_Function_Off_B:6 {% O6 P* Y  I7 x+ H; w3 h- y
  972. .IF FC_IS_DOUBLE_PLAYERS3 G) O0 j( N. S& v' C
  973. LDA Button_Once + 1
    5 E9 z5 l: }6 X; ?( S, b+ p
  974. CMP #$80
    5 m2 I4 R: m# {7 N7 P9 U2 D  K/ Z
  975. BNE Change_Function_Swap: R( A/ x* E0 X2 Q' l: n
  976. JSR Change_Function_To_Off_B
    . a, Y, S/ o" R9 H" Q
  977. JSR Function_Status_Update; p# ?9 J! A% M/ e. v# u6 o
  978. .ENDIF- V+ R2 Q7 p; e" Y
  979. ;==================================================( q) J; T0 q" q& m2 a! ~
  980. ;交换开关. H2 q. q8 [& h" I5 i. @* C
  981. Change_Function_Swap:
    % \: T! z9 m: U0 |+ V
  982. .IF FC_IS_DOUBLE_PLAYERS
      h+ r4 `2 d" ~& a2 s
  983. LDA Button_Once. Q. M- E9 X; W' a, O+ {1 f+ u0 W
  984. ORA Button_Once + 1  Z9 g6 B% D) s1 P3 {- ?6 G% i
  985. CMP #$208 b) p: m3 b' l$ r' ?3 O2 X
  986. BNE Change_Function_End# n7 A! A# f9 r; B- s" m+ c
  987. JSR Change_Function_To_Swap; s. m0 D, n2 a+ j8 ?) @$ @* p0 q  p7 R
  988. JSR Function_Status_Update
    9 G. ]7 O) {+ u1 n
  989. .ENDIF8 C* S2 R7 k8 z& L
  990. Change_Function_End:2 \. [+ @4 \# l8 i
  991. RTS9 y( B. ^0 @; O+ L( Q7 ]$ [+ ^
  992. ; |; n4 r6 Z" v" t2 H% F
  993. ;==================================================
    % _$ o3 z" G' |
  994. ;交换开关状态* s' \/ l1 S' w  D3 o/ c  F& v
  995. Change_Function_To_Swap:
    ) h( y6 V2 Y# y1 ~$ q8 m: T
  996. .IF FC_IS_DOUBLE_PLAYERS
    - B3 A2 z  s4 j! ?" K; V1 ]  P- O3 w
  997. LDA FC_Select_Index  K$ B$ c  ]2 E4 b* G
  998. SEC8 s; s4 [8 D* y$ t
  999. SBC FC_Page_Cur/ D" a% Q/ c8 x7 e
  1000. STA FC_Select_Temp
    % n# T2 ^: O8 `
  1001. JSR Set_Function_Port. H7 Z! f+ ^. w+ f" M1 j
  1002. LDY #$00
    ! w; J+ Q$ A' T
  1003. LDX FC_Select_Index9 ?; B# I$ k0 g; R: ~! I
  1004. LDA (FC_Data_Port_A_L),Y
    0 ?, C  F+ E$ i* ]8 K- F
  1005. EOR (FC_Data_Port_B_L),Y
    & A4 t% E* p% B8 r
  1006. AND Function_Check,X
    8 r/ b  G& I; G+ [6 C. I
  1007. BEQ Change_Function_To_Swap_End0 o2 C4 k% c7 `: {/ @) ~7 L
  1008. LDA (FC_Data_Port_A_L),Y) |; R0 a, g" G8 c. l# F$ k7 b/ m
  1009. EOR Function_Check,X4 u2 Y2 L4 g- Z
  1010. STA (FC_Data_Port_A_L),Y' a, U. w; g; w
  1011. LDA (FC_Data_Port_B_L),Y
    1 O) }0 z: B, Q( p/ Y2 B
  1012. EOR Function_Check,X
    & k* a" u- l. O/ \; x8 y% K5 h
  1013. STA (FC_Data_Port_B_L),Y
    0 x  ?" o8 v: _
  1014. Change_Function_To_Swap_End:
    ( h' T4 x% d, E2 p
  1015. RTS
    + @! j5 e9 b' X9 Z. A" d
  1016. .ENDIF
    + G: D# D" C3 \! m3 U& ?) B
  1017. 5 Q; b! X$ ~3 p% f; V9 z! N
  1018. 9 _$ A! |5 l5 W! e  I
  1019. ;==================================================
    ! _3 O+ U6 Z: M5 U
  1020. ;更新功能状态
    . n# l7 p, y* ~
  1021. Function_Status_Update:
    + a8 F' x3 z- n6 C; c! t
  1022. LDA FC_Select_Index
    * X: v6 X: e& C7 n% S# u; x/ _
  1023. SEC/ i+ R4 I/ H. D5 c' x' ]  P8 ^# z
  1024. SBC FC_Page_Cur
    & u& C2 U  ?2 U7 v- L2 Q" N9 A. \- K
  1025. STA FC_Select_Temp
    $ u/ B9 J8 J$ u% @1 C; c5 \
  1026. JSR Function_Status_Show
    1 v9 R# `, W% l  X, A9 g
  1027. RTS
    9 T' f% V9 ~/ P2 d
  1028. 2 q  U' l8 b- g. A# M& @. V0 W
  1029. ;==================================================
    8 r# j- O' U" R" O
  1030. ;设置功能地址端口+ k  J! g8 G( Q( m; x8 P; |9 f
  1031. Set_Function_Port:
    3 p0 M; e  j9 o5 [: ?
  1032. LDA FC_Select_Temp
    + A: P8 X& k% j, @. v! k8 C
  1033. CLC
    3 c; O  I" m/ T$ p  J& O2 Q) Z
  1034. ADC FC_Page_Cur
    # ^$ |) S5 }$ ?  z4 O0 x
  1035. ASL- @& \4 M$ H2 P# T2 X. S# r% `3 t0 x/ C) ~
  1036. TAY
    # J8 m5 G, _2 Y3 ]
  1037. INY
    , L0 ?8 e: \- x5 ^
  1038. LDA Function_Addr_A,Y9 D2 E# b2 d% k  G* d+ r9 f- y, F
  1039. STA FC_Data_Port_A_H
    ; H, ^5 @" k: @2 d% s: ]* [
  1040. .IF FC_IS_DOUBLE_PLAYERS; f# Z  h( g4 ^! Q6 ?. S. h0 L
  1041. LDA Function_Addr_B,Y
    * I4 _  X* f, x( Y+ e
  1042. STA FC_Data_Port_B_H
    * d* S7 n, o. T0 m6 w
  1043. .ENDIF
    8 a2 z* T% t  d5 B5 M( L3 h8 ^
  1044. DEY
      ?$ M/ T; H+ S, Y
  1045. LDA Function_Addr_A,Y( f* D& o; j# z" ^) F# ]0 x
  1046. STA FC_Data_Port_A_L% t' I0 V7 \' w" N% c( n& I! \
  1047. .IF FC_IS_DOUBLE_PLAYERS
    , _" V; U  v! k/ v2 S! {/ d
  1048. LDA Function_Addr_B,Y: O3 P# k4 y' Q8 I/ D
  1049. STA FC_Data_Port_B_L! j$ n+ R- q. L6 _9 s7 O3 L  C
  1050. .ENDIF
    ! b% P9 k, ^2 u( g
  1051. RTS0 K  M, Z: z# i" B

  1052. 4 C4 |3 m7 [8 ~* M0 d/ [) }
  1053. ;==================================================
    5 q$ o% \. N6 C5 M
  1054. ;设置功能临时索引) n" q, C* m. n. w2 j5 [; a, _* v
  1055. Set_Function_Temp_Index:6 ^" K8 b5 r2 @; P5 g
  1056. LDA FC_Select_Index
    ' h( h* j0 m( }
  1057. SEC
    . D! O: r. t  d# w" S% ~" r
  1058. SBC FC_Page_Cur3 G+ t, u8 ^+ }9 ^
  1059. STA FC_Select_Temp7 E) i4 c8 S% |; V
  1060. RTS
    0 c8 N3 F$ y, C; c- f
  1061. 8 d8 L3 D; O7 m4 l9 d; [- _; c
  1062. ;==================================================' `5 @- Z3 e7 d" _1 e4 v
  1063. ;开启功能A
    , L- {, l1 o& H7 B% @
  1064. Change_Function_To_On_A:4 E: s: q3 L+ t) Y
  1065. JSR Set_Function_Temp_Index
    1 Y0 v: K5 z% o9 B% l# S2 X1 e8 x
  1066. JSR Set_Function_Port
    $ ~$ p5 k  }8 x" h
  1067. LDX FC_Select_Index
    5 R7 T% o8 ]  Z1 A6 ]% X  ~
  1068. LDY #$006 @" U8 Y) T% U
  1069. LDA (FC_Data_Port_A_L),Y' X" i, d" ^: R0 Y9 Z- }+ `! j& R
  1070. ORA Function_Check,X
    8 C( d) G! F  N' d" z
  1071. STA (FC_Data_Port_A_L),Y  g4 e+ m. H! B- J1 n: _$ {
  1072. RTS
    ) T6 J' U! X% r7 z
  1073. ;----------------------------------------
    9 ~1 c8 Z% H  z: w% O/ h
  1074. ;开启功能B
    , K/ q0 }7 Z! p* Y' z! t
  1075. .IF FC_IS_DOUBLE_PLAYERS
    3 [, n# e5 I5 M  ~% V$ m
  1076. Change_Function_To_On_B:3 ?2 z5 k9 y4 P# l+ D% x; E  ]
  1077. JSR Set_Function_Temp_Index
    4 m$ M2 g4 H3 Z7 t; [! D
  1078. JSR Set_Function_Port
    . M8 ?4 r3 Z. B; O) ]& y$ N* m
  1079. LDX FC_Select_Index
    " `) T- S2 @6 T5 M  J3 N6 w
  1080. LDY #$00) j4 m. y+ c  f3 C% l- q
  1081. LDA (FC_Data_Port_B_L),Y9 u4 l& J) K8 p$ j! R* k: m0 N
  1082. ORA Function_Check,X
    ( r  D+ Q2 m+ b$ Y& ]$ X
  1083. STA (FC_Data_Port_B_L),Y
    6 _4 F+ z4 Q3 K
  1084. RTS) i& Z' J5 C# R
  1085. .ENDIF0 v. c- d3 k1 w: k/ b
  1086. ;----------------------------------------# t( M  @8 `+ [$ E+ {7 @" `
  1087. ;关闭功能A$ G) C* v8 ^+ H+ m$ U
  1088. Change_Function_To_Off_A:
    5 C6 u6 Q0 T' G( |
  1089. JSR Set_Function_Temp_Index4 `# _  _8 n! ]/ j  {* v9 u8 @
  1090. JSR Set_Function_Port
    ( t  j0 a& e% k2 w6 r$ Q
  1091. LDX FC_Select_Index5 c8 T( F7 |, c
  1092. LDY #$00
    - x  ~$ L3 `) e1 W9 ?" E
  1093. LDA Function_Check,X; t" C/ R/ H( R: C
  1094. EOR #$FF/ Z4 ~/ l2 ?/ e4 O
  1095. AND (FC_Data_Port_A_L),Y" R  v) P' F7 q7 h- k. h. a
  1096. STA (FC_Data_Port_A_L),Y: D. a7 P" c: M! c# f+ o
  1097. RTS" \7 o2 S2 V; f' r( y! r8 r
  1098. ;----------------------------------------
    , F+ Z0 h/ h8 h4 A1 ]& d" H0 u
  1099. ;关闭功能B
    # \6 d- S& N. \( R
  1100. .IF FC_IS_DOUBLE_PLAYERS- X* t) _: n$ m: r. k8 c( z
  1101. Change_Function_To_Off_B:, C% \5 Z, n/ f2 _, Y1 j
  1102. JSR Set_Function_Temp_Index4 ~7 C* A9 A3 N5 G$ B7 v5 D
  1103. JSR Set_Function_Port
    8 T. S& D( L' K. ?  @6 T
  1104. LDX FC_Select_Index
    * O7 \- j. n/ A  U4 \! n% D* G0 L. O
  1105. LDY #$00
      D. i- ?7 W' U) L, X' c
  1106. LDA Function_Check,X+ R9 t9 g6 h! A4 u
  1107. EOR #$FF' h' H5 ~, @3 h! C) D6 e
  1108. AND (FC_Data_Port_B_L),Y
    1 T5 E. p, y/ s; E6 }
  1109. STA (FC_Data_Port_B_L),Y7 H" `1 X- @% c
  1110. RTS- M' S7 t# b: r0 a! P  a
  1111. .ENDIF# {6 {, d3 i7 P6 r( i
  1112. 0 w. M4 S0 `9 H, Z  x
  1113. ;==================================================9 t3 A; W' b& f8 e/ T* A! W5 w% f
  1114. ;设置功能状态PPU地址( a% V9 B/ B' J% V
  1115. Set_Function_Status_Addr:
    ' W, R# Z0 S0 A0 f. v: v  J
  1116. LDX FC_PPU_Cursor
    ( X2 Q5 j0 a6 c9 y0 K9 O4 r" t8 T
  1117. LDA FC_Select_Temp
    ( M" S+ I# q0 u% L
  1118. ASL
    ) \# N" {' s% p! V/ h2 S
  1119. TAY
    7 n4 |0 E; z( \: `3 x
  1120. INY& r) O9 d% k# q4 ^& Y0 m; V
  1121. LDA Text_PPU_Addr,Y' q5 D) ?, U' p
  1122. STA FC_PPU_Buffer,X
    , S: N' z1 S! c8 Z8 M- J
  1123. INX
    3 h, y5 d+ {  R+ O
  1124. DEY
    ; E! P5 R% U/ ~) s! T, B" x1 x& f
  1125. LDA Text_PPU_Addr,Y
    $ T" K0 {! J" R7 j8 S
  1126. CLC
    2 @6 q8 N8 E4 ~* I3 u: v, b
  1127. ADC #FC_FUNCTION_OFFSET
    % |. B! ]9 x7 y. l( A2 F1 q& p4 p
  1128. STA FC_PPU_Buffer,X
    & h; S9 I  a: [# [
  1129. INX2 r7 z3 |$ n! e; d. e& t
  1130. .IF FC_IS_DOUBLE_PLAYERS
    , a' [1 N/ C# t% I5 [5 u3 s
  1131. LDA #$02
    . g1 D5 i) G; O3 K# D
  1132. .ELSE6 v* @7 N* n9 \1 D( Z. \7 E
  1133. LDA #$016 f2 F2 I. B& R+ Y- {( `
  1134. .ENDIF  r7 [; q5 _4 S2 `3 V9 h( X
  1135. STA FC_PPU_Buffer,X% f& c8 t  u- G2 ~; B/ T# O5 M
  1136. INX
    8 t8 ]: b- {! n+ G5 n
  1137. STX FC_PPU_Cursor
    1 j6 W, e. @6 l- B
  1138. RTS
    ; ]! p# M+ C7 Z1 e+ M5 {2 v
  1139. - Y0 ^  B9 G+ x) ^
  1140. ;==================================================; n# X. P! E! R, n
  1141. ;获取当前选择索引/ r; G  ^  \, K% }  ~6 q
  1142. Get_Select_Index:, K3 H2 T7 N, ]9 u
  1143. LDA FC_Select_Temp
    ; [+ Y% c" K2 H. y- ~7 c4 V& Z5 v
  1144. CLC5 w  |. t, G5 ?( a+ P
  1145. ADC FC_Page_Cur
    7 u9 S5 S& h- }& t6 t0 z+ `& g4 }
  1146. TAX6 Z8 _. p1 E* T& }% `, x; g
  1147. RTS
    & p! Y( ?5 S! P! F/ ?

  1148. ! z7 r- R( }+ d: S
  1149. ;==================================================
    + {5 n- |. x( r( V: x, |
  1150. ;清除状态文本( E$ v+ e0 P$ }4 n4 z
  1151. Function_Status_Clean:
    / T% T9 P! X9 F2 f
  1152. LDA #FC_PPU_MODE_CNTC1 o$ U! ?5 j) U
  1153. JSR Set_PPU_Mode
    0 U: H+ Z3 U  c, m5 O$ w7 M
  1154. JSR Set_Function_Status_Addr  x' _6 D& X- k# W6 r$ `
  1155. RTS1 y% _& z4 U% C2 s1 `

  1156. , H; S$ }9 }7 d- |0 O, p
  1157. ;==================================================
    / B+ ~' q1 L0 b2 u# j0 N
  1158. ;显示开关状态$ N# D$ n# V) A6 {1 [4 d/ i
  1159. Function_Status_Show:
    0 P/ }/ ~' l! v' I4 B; q
  1160. JSR Get_Select_Index6 o3 [& M& }' c) `( C8 j  @
  1161. CPX #FC_ITEM_SUM
    " q% A  d6 `: o! y# C
  1162. BEQ Function_Status_Show_Set( ]4 _1 _) ]* X" G) |- s) q, D
  1163. BCS Function_Status_Show_End3 _' h3 h: F1 V/ |6 Z# \
  1164. Function_Status_Show_Set:" y1 N. a3 ~; V9 k( R% |
  1165. LDA #FC_PPU_MODE_CNTL
    ( `6 o% V% ?; `1 w. b9 Z0 |
  1166. JSR Set_PPU_Mode
      d+ N0 \) i/ a" I5 {! i1 c
  1167. JSR Get_Select_Index8 j8 `( u* y$ C' C7 W- v; |" ?
  1168. JSR Set_Function_Status_Addr
    ( E7 I& M: Q% Y+ c3 z* \; _
  1169. JSR Set_Function_Port
    4 u' L; r* [5 U
  1170. JSR Function_Status_Show_Check_A
    2 [# [: E. q* o9 ?, D
  1171. .IF FC_IS_DOUBLE_PLAYERS
    ! J2 h5 E# G+ h
  1172. JSR Function_Status_Show_Check_B
    9 Y: W$ R% ]8 h4 f* P" C+ f0 C
  1173. .ENDIF
    6 J# Q4 ~8 Q' g( {+ R
  1174. Function_Status_Show_End:
    7 m  E0 M, n) ?7 I' \
  1175. RTS1 }1 G3 D7 [. j
  1176. ;----------------------------------------' n" e; F& [! e% A% R- {
  1177. ;检查功能A状态
    6 X4 e3 T" L! `. \5 ?: R
  1178. Function_Status_Show_Check_A:
    * k1 |5 S1 Y# ?) f3 m- n
  1179. JSR Get_Select_Index
    % ^" x( P1 c5 p. g3 B$ G
  1180. LDY #$009 H& p9 l6 {" v+ J. _0 T
  1181. LDA (FC_Data_Port_A_L),Y
    8 d2 V% u7 g2 A6 N" m: c: `
  1182. AND Function_Check,X
    4 a4 D4 |. m( i( s) {, e
  1183. BEQ Show_Function_Status_Off! I. K- x# B+ [% Z+ ^
  1184. JSR Show_Function_Status_On
    ; {/ P2 r- T) C9 n( P' W$ a! ^
  1185. RTS
    , `% F9 e% R! _: p5 k  I
  1186. ;----------------------------------------; j: Q: J/ Y0 D9 ]* L7 a
  1187. ;检查功能B状态
    8 c2 ]  J8 q2 k8 R1 r/ Z
  1188. .IF FC_IS_DOUBLE_PLAYERS
    , {# ]4 P2 b6 n4 B* c7 J% \- |
  1189. Function_Status_Show_Check_B:6 |0 X4 N6 \) }5 i  Q0 c6 b2 V  d
  1190. JSR Get_Select_Index
    " b' @4 T9 F+ x, C) t
  1191. LDY #$00
    # N/ g+ J0 y8 w1 q9 V* m
  1192. LDA (FC_Data_Port_B_L),Y- m; ^7 I! x& V; u, M
  1193. AND Function_Check,X
    - D6 p" c7 \. K5 Z2 b: X% j' e$ j
  1194. BEQ Show_Function_Status_Off+ k0 U. t7 N  c
  1195. JSR Show_Function_Status_On7 T( o" T( t* C; r1 u% K
  1196. RTS
    ) K( e8 b  G, [# ?2 P, u' m
  1197. .ENDIF
    0 ]* _4 U5 G. j# D

  1198. & {  [4 G6 t' f  a4 ]6 ~" g6 ^3 ]
  1199. ;----------------------------------------, o# W$ m: D& ?; @# }: D  J$ v
  1200. ;显示功能开启状态
    3 O$ u& G2 A3 {% m8 i$ E
  1201. Show_Function_Status_On:
    $ s' y) F- H5 x' K/ s+ J5 M5 s) ^2 m
  1202. LDX FC_PPU_Cursor: Z0 T' t  e2 K" p7 Z: W
  1203. LDA #FC_ON_TILE# D! l, I5 \* n, v
  1204. STA FC_PPU_Buffer,X
    % R+ t1 O& @% P! ~2 T
  1205. INX
    % x; f! D% T/ i; z4 z4 |
  1206. STX FC_PPU_Cursor6 j% D+ y+ p) I0 S9 x/ W' k
  1207. RTS. R2 u$ g6 r$ e
  1208. ;----------------------------------------) g" G1 j8 V  c: T7 c- K4 {0 ?
  1209. ;显示功能关闭状态
    ; h, m. ]( z. n8 n) Y; p" Q
  1210. Show_Function_Status_Off:
      o* [5 @" O, r/ |7 |1 ^
  1211. LDX FC_PPU_Cursor( s4 ~1 B# X- X3 p1 e
  1212. LDA #FC_OFF_TILE" g# `& {' T- M
  1213. STA FC_PPU_Buffer,X  p3 f9 g4 V  B* L) ~. v, [4 L8 D
  1214. INX
    9 t: i2 |' D4 r$ w
  1215. STX FC_PPU_Cursor5 z  [' f4 T# Q
  1216. RTS
    2 B( j, W, D6 n% D8 S

  1217. . ?' T: t1 }4 Z6 @% v6 n) M9 Z6 m
  1218. , n0 B) c# m# i
  1219. ;-------------------------------------------------------------
    5 [! k4 R* A+ [' `: ]' @
  1220. FC_Data_Copy:    ;数据拷贝参数设置
    5 g9 O  V1 r6 R6 l7 u4 e
  1221. STX FC_Cpy_Port_L
    4 F3 F8 G9 S' i( y. X
  1222. STY FC_Cpy_Port_H+ o# ]) F( k4 s. ~: y5 u# L+ k
  1223. LDY #$00
    0 N2 u8 l0 U6 F) ]# N& W
  1224. LDX #$06" Q+ A: F, R- `
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数% {3 @* t8 `& ^* m' ?% t2 }5 |
  1226. LDA (FC_Cpy_Port_L),Y
    5 \6 ?/ G/ |5 L# _8 e) p
  1227. STA FC_Cpy_From_L,Y8 u! p1 Z8 M3 ~9 w, P1 s0 G
  1228. INY
    : v) ~; d% S$ H. T
  1229. DEX/ ^1 p% U, I& F8 ~' f/ R5 B5 j
  1230. BNE FC_Data_Copy_Addr_Set) Q1 m, O9 E+ ~( Q: P6 e! n) ?. D
  1231. LDA (FC_Cpy_Port_L),Y/ w1 ?, k3 }( e1 c- F/ d
  1232. CLV
    # a$ l: X; y9 `& _+ y, g
  1233. LDY #$009 w  _9 ^( H0 i9 G$ `! |
  1234. ;----------------------------------0 T. z2 S- L( _( }7 k+ }# V, a# F
  1235. FC_Data_Copy_Mode:   ;复制模式校验
    , ?7 t6 f4 g8 Y
  1236. CMP #FC_MODE_RAM_TO_RAM; [1 J$ N7 d7 j3 ]
  1237. BEQ FC_Ram_To_Ram_Mode- Z" P& i$ H4 S0 }* X  D& C7 ^1 Q
  1238. CMP #FC_MODE_RAM_TO_PPU
    # N  g+ T7 Y* ?% X
  1239. BEQ FC_Ram_To_Ppu_Mode9 K2 k' _  ~" X7 J/ d- L# l+ J
  1240. CMP #FC_MODE_PPU_TO_RAM6 p$ f6 n$ e5 P2 y! [9 V
  1241. BEQ FC_Ppu_To_Ram_Mode! l/ ?: F# b+ e% W. ^
  1242. CMP #FC_MODE_PPU_CLEAR
      e% t) h  L1 U- R5 |; [" i2 `0 h7 K7 j7 a
  1243. BEQ FC_Ppu_Clear_Mode& V& y# v( o& n- f$ @, ^# s: t3 O
  1244. RTS
    $ a/ k; j" u6 S8 V
  1245. ;----------------------------------------. J/ i1 @3 l+ a) S4 R, G
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式
    9 D# h! C, g, a0 v
  1247. LDX FC_Cpy_Count_L
    " |: ~: J7 ]0 u$ h. B  @9 H
  1248. INX
    7 `* G& Z( Z9 S; u6 O5 s0 x
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查
    % u2 y9 D9 E$ j- S3 q/ k) C8 p* g0 d
  1250. DEX) I; t! b) K# _2 U
  1251. BNE FC_Ram_To_Ram_Copy4 r* c3 Q4 L* |  k* R
  1252. DEC FC_Cpy_Count_H% f- E& {, R$ r2 m* R
  1253. BMI FC_Ram_To_Ram_Over. w* l( O) z% L9 m
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据. U* t# w, A0 n* U1 ]7 f2 `& \
  1255. LDA (FC_Cpy_From_L),Y# W. W- ~. G3 n/ o/ r
  1256. STA (FC_Cpy_To_L),Y& \( V1 ?8 Q  v+ Z4 X
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增; l3 X+ i; Z- U+ S% z- e! Z( j
  1258. INY+ x/ m$ @- s0 E2 L: s4 e
  1259. BNE FC_Ram_To_Ram_Count
    " r+ I2 {' p0 k; n- b1 v/ ~
  1260. INC FC_Cpy_To_H
    : q7 p1 x- ]& r6 `& ]2 s# A
  1261. INC FC_Cpy_From_H0 w6 Y+ h6 l1 z! q# G, r  @
  1262. BVC FC_Ram_To_Ram_Count- S1 H$ |+ k. m- I$ f
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制: j% Z2 \: N& ?  V+ S8 u* s
  1264. RTS
    7 o  Q, h9 F; t& }0 s

  1265. " |  d8 S- \; b: d, t6 ]& f
  1266. ;----------------------------------------
    1 ^; x1 W1 F# C, Z/ F* G. [
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式
    5 e6 b0 L4 D3 T* j/ K# N
  1268. LDA FC_Cpy_To_H
    " b' @- ^; |) H+ u+ x
  1269. STA $2006
    5 x% u+ l* W! T6 W! @% h" }8 u
  1270. LDA FC_Cpy_To_L5 T1 v/ H1 r! k3 _% t+ W) _( R
  1271. STA $2006
    . w- w. ^3 T) }3 B/ r
  1272. LDX FC_Cpy_Count_L5 e* F* n3 Q2 J. R( ?
  1273. INX/ H) n  O2 l) V- V
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查
    ( ^! J4 ]* s' P7 r. @# v
  1275. DEX' J: c* |. }% K+ ?) U- X
  1276. BNE FC_Ram_To_Ppu_Copy  k, s" C+ x# w6 a8 P# G
  1277. DEC FC_Cpy_Count_H
    0 f  x( n: C) m/ l6 h6 C
  1278. BMI FC_Ram_To_Ppu_Over
      o  i6 ^8 G: s2 G
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据3 A+ e7 s9 b  F/ u/ }; b. y, [
  1280. LDA (FC_Cpy_From_L),Y
    " r$ D$ d2 s' a/ x
  1281. STA $2007
    ! y: u$ s- t/ r" ~' e
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增# O8 k0 W' s) [) v) F
  1283. INY8 \% F# s. H/ z, r0 V4 C  o- t
  1284. BNE FC_Ram_To_Ppu_Count
      o- b6 X# q$ {7 C1 I
  1285. INC FC_Cpy_From_H% t; }5 C/ j# A5 Z: q0 l
  1286. BVC FC_Ram_To_Ppu_Count* N% K2 z. t# p$ t. j: l/ p% i7 G
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制
    5 x/ y' F# h3 x; D7 H2 t6 V. h
  1288. RTS0 R0 ?% q  R$ R. R& H" q' ?
  1289. ) L/ v* S$ Q, W. c/ @" v1 T; x! x
  1290. ;----------------------------------------2 v' J# c/ Y# C7 z$ N3 T
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式+ i- k* V! t# n4 K
  1292. LDA FC_Cpy_From_H
    - c& O7 o1 B! b% a8 Y' B" Y( T7 V
  1293. STA $2006) v' R5 Q' R( _7 [4 C
  1294. LDA FC_Cpy_From_L& r  K; x/ h+ z
  1295. STA $20060 C/ [2 o& c1 p0 G, }
  1296. LDA $20077 ^/ S2 A2 k) w. w" Q" {
  1297. LDX FC_Cpy_Count_L5 p' V7 n8 b3 e" o* m9 O0 z* ^" ^
  1298. INX1 Q- c' V8 ]+ ~; d/ s, |
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查: @4 h* v/ v( I& V  b/ r1 e( [
  1300. DEX
    ( k+ I& W# y" b  `" x5 h
  1301. BNE FC_Ppu_To_Ram_Copy7 |( P4 V& j* n8 L" B
  1302. DEC FC_Cpy_Count_H
    8 F& X6 m5 f) D* W5 D
  1303. BMI FC_Ppu_To_Ram_Over1 ~9 n7 v7 N" j7 T) }, [! |
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据
    % W! u) Z! ]  d8 W
  1305. LDA $2007
    ' Q! m- Z, O' l+ m* r
  1306. STA (FC_Cpy_To_L),Y  P& V! z& T/ w7 Q
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增
    8 s7 F& T. C- o, f2 t
  1308. INY
    * @# l: V8 |% U: D1 y1 A
  1309. BNE FC_Ppu_To_Ram_Count) K, u8 K. F; J0 ~
  1310. INC FC_Cpy_To_H
    " `9 T% W, _: O4 ]+ C( w8 m
  1311. BVC FC_Ppu_To_Ram_Count
    3 S8 k1 S; W# }+ u* u
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制
    : m0 X. q0 b: U6 [* z
  1313. RTS
      G- a4 n. C0 A: \1 [! |) l; C/ v

  1314. 4 f; w- Y7 g3 @. C
  1315. ;----------------------------------------  E8 V  b. s+ C3 `  ^
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式
    + ]- S. t5 R$ s1 Q* [- G0 z) Q
  1317. LDA FC_Cpy_To_H  k, ~0 y# d% L7 y0 w
  1318. STA $2006! a' C5 w, }$ j+ \) U0 ~
  1319. LDA FC_Cpy_To_L! F' r- x7 D; r
  1320. STA $2006  N; D& B2 E% R) l5 W. c5 ~
  1321. LDX FC_Cpy_Count_H
    , n7 q% S  l: V* Z
  1322. LDY FC_Cpy_Count_L+ ]/ l2 X+ H. p' H, z
  1323. LDA FC_Clear_Val  x5 d/ G$ u% z' i" ?
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查
    + X. d3 M" N4 V
  1325. BNE FC_Ppu_Clear_Copy  c6 h1 O+ x( ]$ o
  1326. DEX
    6 |# J0 C  y8 t6 i
  1327. BMI FC_Ppu_Clear_Over. J0 ]9 i5 x# i* Y
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU2 W) M5 D1 O' U% b
  1329. STA $2007/ N; R' q9 I% U9 S! w$ z; g/ B1 S
  1330. DEY
    - x+ p4 Y( Y2 j, w1 }
  1331. BVC FC_Ppu_Clear_Count
    ; F/ O+ y2 v* j* B# ~& X
  1332. FC_Ppu_Clear_Over:    ;结束数据复制- F8 U  i/ q8 O0 u
  1333. RTS8 ?2 b' f1 W/ D; j* q2 {9 e
  1334. 3 L. O8 d9 |7 C/ ]
  1335. ;==================================================
    8 ?( R# d8 `  w4 x6 Y4 U
  1336. ;保存RAM数据
    + P' w7 [, G: W4 P0 `2 b  M' |) {
  1337. Save_Ram:
    & J+ c/ ]# k: `' a
  1338. LDX #<Save_Ram_Data9 W% S* \/ P: x: ~& u0 |
  1339. LDY #>Save_Ram_Data9 m9 v2 B( ~& h8 O0 a& X
  1340. JSR FC_Data_Copy
    & @- ?& E2 N  F" {
  1341. RTS
    / `" z7 Y3 ]% ?( L) q

  1342. : c. v3 l) f$ E4 y* R+ m3 Z
  1343. ;加载RAM数据
    ! P! \4 s  D$ f( n' V
  1344. Load_Ram:
    $ ~+ h9 A  ]( T
  1345. LDX #<Load_Ram_Data
    / @. s! i& d. a* g
  1346. LDY #>Load_Ram_Data5 V( z6 P# O6 K/ u, s' m. b
  1347. JSR FC_Data_Copy
    4 r7 i- |4 \% q) G
  1348. RTS
    1 M$ D' T/ @' i1 y- K) L2 }

  1349. : b/ v  }% a* u
  1350. ;保存PPU数据
    ; U, a" ?) _& d* w. U* e
  1351. Save_Ppu:# @( B8 i2 b2 o6 [2 O. F
  1352. LDX #<Save_PPU_Data, @3 M( w/ s9 t
  1353. LDY #>Save_PPU_Data
    ; }$ ^* Z. V- t7 h2 J
  1354. JSR FC_Data_Copy
    2 I" G6 |; Q8 i9 A# j
  1355. RTS
    4 ^& E1 Z* s& g5 C7 R

  1356. 9 Y* R( f$ |% b: a, o* K2 Q
  1357. ;加载PPU数据
    4 q: E8 E: D% m( f) u7 t
  1358. Load_Ppu:
    ' y: k. |. F1 k5 m: Q4 I$ z
  1359. LDX #<Load_PPU_Data2 C1 ^, c: Z/ N6 E4 |3 c9 B
  1360. LDY #>Load_PPU_Data+ x9 ^8 y" t( ^8 ~' f
  1361. JSR FC_Data_Copy5 U6 U- ~5 s2 V# y: z
  1362. RTS
    ' i& D" R% U$ H
  1363. / E( Q. {) ?$ k  c9 n2 U! t
  1364. ;清空PPU数据1 D6 A8 Y) n- ~
  1365. Clear_Ppu:
    - L2 f9 \; g  j3 \
  1366. LDX #<Cln_PPU_Data
      x5 B4 y' |, ~
  1367. LDY #>Cln_PPU_Data4 x0 c) p' c/ j
  1368. JSR FC_Data_Copy/ b# g; d8 q2 `( f9 x& c* x
  1369. RTS
    - x$ g; s, K, s/ {0 e, ^1 E8 A

  1370. , L2 ~. H( R- B
  1371. ;==================================================
    2 {* c* V" z' @) A4 c- m' d
  1372. ;数据配置
    2 j4 I$ o4 w. K( {- ], O9 d2 n: |( @+ M
  1373. Save_Ram_Data:
    5 P% m. c! ?6 c
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM
    2 |  H) Q0 @% k1 Y3 Q
  1375. Load_Ram_Data:! t0 T, a$ g1 _7 d2 F" x
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM2 @4 r7 l. U8 X2 w' x
  1377. Save_PPU_Data:- @9 u+ K7 `  E7 X, Y+ x% e  ]
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM/ w$ X' p6 r/ T3 L& Y
  1379. Load_PPU_Data:* }( l) A- a$ ?! K% N2 A
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU
    # p7 y' l0 o8 A) U
  1381. Cln_PPU_Data:9 b! e6 R3 Y" h  E
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR% t6 F. b. d; N2 J! ?1 T' E
  1383. 7 x& [! M" a8 x: b' e
  1384. 5 {0 H* I3 V8 o; d
  1385. ;==================================================
    2 g6 K: W. m7 _; S% X
  1386. ;文本数据PPU显示地址) c# d$ _5 {0 K9 I1 y: ?
  1387. Text_PPU_Addr:1 }* i/ R/ n% B9 B$ ?0 d7 x) l
  1388. .WORD $20C5
    7 X) ]! z* m  z$ n5 V- \
  1389. .WORD $21052 M( ^, n: v  W# j! _* g" ~
  1390. .WORD $2145
    4 ~2 Z2 M# T# c" k) A0 V
  1391. .WORD $21858 n: L* u  L. E' n, q* i+ R. m
  1392. .WORD $21C52 I+ x) e2 l& w$ n; q1 [/ k
  1393. .WORD $2205
    * w5 J2 A; ]! }  T) E
  1394. .WORD $2245
    ' q6 Y3 m1 \$ a
  1395. .WORD $2285; t' E' ]# }+ g$ B2 Q
  1396. .WORD $22C5& e" E) J; Z: \# U
  1397. .WORD $23051 l& \& `& t0 w: @( e
  1398. .WORD $2345
    8 N9 R6 t' E# u7 G$ X$ k9 r- D8 `
  1399. ) U! k3 e5 y: G* b( f6 y% q: t
  1400. ;==================================================) D  Y2 ^! `) p; c
  1401. ;文本数据PPU数据地址1 Q& z! _  Q  H: [+ Z5 q4 H
  1402. Text_Data_Addr:
    4 z* [5 Z7 y9 T5 D# B) P
  1403. .WORD Text_Data_01; S! Y3 X( u$ e0 s& I& v
  1404. .WORD Text_Data_02: Y2 O" X' L! J5 o1 C4 q6 ]* n1 X
  1405. .WORD Text_Data_03# c0 y+ W" i6 [9 ~3 N, F: V7 s
  1406. .WORD Text_Data_04
    5 t- A$ ~1 ^5 o7 C) O) ]! R
  1407. .WORD Text_Data_058 }: d8 t9 m7 O; i
  1408. .WORD Text_Data_06
    - E( R& ^7 v' n! X
  1409. .WORD Text_Data_071 @0 Z7 R/ N8 V. `3 r% A- m
  1410. .WORD Text_Data_086 B" ^- _* a# p2 b& k! m
  1411. .WORD Text_Data_09+ _7 h) P5 c: F$ R4 o# T" S
  1412. .WORD Text_Data_100 A: k* `, l9 \# U
  1413. .WORD Text_Data_114 Q( x' `. }( j6 [' N0 i; j
  1414. .WORD Text_Data_12* K- _1 f% I0 Q& p. z
  1415. .WORD Text_Data_13) m: j& B, A: l
  1416. .WORD Text_Data_14
    - E( B  k( A6 F) p$ V' W# W
  1417. .WORD Text_Data_15
    * v- t7 G1 g, m3 E  x! j3 S' l% M
  1418. .WORD Text_Data_16- P+ O8 X( L. }2 F* e3 X

  1419. 3 K  P) d4 b% ?
  1420. ;==================================================
    5 O0 Q5 b8 R% K" T4 j
  1421. ;文本数据
    & W( L* d8 {- B5 [# P
  1422. Text_Data:
    8 U8 u5 H9 S+ I$ H: f* w* S: N6 v  p
  1423. Text_Data_01:
    5 O0 @5 C0 y8 `; V' \
  1424. .STR "01.INVINCIBLE"' Z: n- q7 r! W$ |1 n4 n* c3 I4 P
  1425. Text_Data_02:
    9 u/ O4 O- Q+ _$ O0 k* t
  1426. .STR "02.INVINCIBLE PLUS"  `1 v2 Y- K  C& S
  1427. Text_Data_03:8 S! B% x  y8 b  c$ I
  1428. .STR "03.LOCK LIFE"
    7 o0 x: j- g: ?- _% Y. }/ y: M. Q# t
  1429. Text_Data_04:
    & q% F: e8 X* [" C* Z
  1430. .STR "04.LOCK WEAPON"
    8 q8 S, U, E; k1 I
  1431. Text_Data_05:
    * c) [1 j1 [& g/ @* {
  1432. .STR "05.SEL CHANGE WEAPON"
    $ M* L) ~; Y3 |  [
  1433. Text_Data_06:+ Y7 Q; P. _* {7 m
  1434. .STR "06.UNLIMITED JUMP"# b! U  y6 [6 S& H- D* i
  1435. Text_Data_07:$ Z+ S) H/ x% W: [  D! M7 a
  1436. .STR "07.MOVE FAST"2 N' }/ |0 n4 ]) ]- M' F
  1437. Text_Data_08:
    / s4 l- H1 |8 i( Q& \+ s
  1438. .STR "08.SWAP SKIN"
    " M1 r3 y" f5 B: `
  1439. Text_Data_09:
    - R2 ?9 w, K1 S
  1440. .STR "09.EQUAL BULLET"* P- }# z0 Z. d2 ?& D
  1441. Text_Data_10:# b8 A$ m* g! w5 b$ ^
  1442. .STR "10.STRONG BULLET") R" g# h+ X6 N3 y9 W
  1443. Text_Data_11:; ]% f- K$ g  M: p
  1444. .STR "11.KILL BY ONCE"7 B$ m( L2 @* S
  1445. Text_Data_12:
    9 Y/ m9 F1 _  r5 m3 v
  1446. .STR "12.FULL SCREEN KILL"% v8 y4 @5 ]# z# O; x1 a$ c
  1447. Text_Data_13:
    ! E* m% m) V) Z9 z
  1448. .STR "13.DOUBLE CONTROL"" T0 W' e" Q1 R6 M$ p
  1449. Text_Data_14:
    8 w* [# Z8 |0 K/ f# r
  1450. .STR "14.REMOVE E-GRID"
    1 u- b* s5 Z" }5 Q# _( ~2 _
  1451. Text_Data_15:, Z/ R4 g9 H  f% Z& Z$ n
  1452. .STR "15.FALL INVINCIBLE"
    3 u+ w$ H7 Z' @  b/ L
  1453. Text_Data_16:6 {  T: {- Z* r; q) W
  1454. .STR "16.NEXT STAGE"2 E. W  w! B! T1 x- a7 h
  1455. # A0 d, T7 t& r; D- w
  1456. ;==================================================
    # R2 h5 R& p  D4 `: U
  1457. ;功能开关检查地址
    + N9 }0 D9 l/ G! A( M( X/ ^
  1458. Function_Addr_A:
    & V# A" B5 t/ C- y7 f
  1459. .WORD $01C06 B* Z* r+ o$ p1 K
  1460. .WORD $01C0
    " f0 `+ g/ P. x6 E/ n
  1461. .WORD $01C0
    8 V/ W! y6 o% A& J% {/ O
  1462. .WORD $01C0" |3 ^+ ?; j# x' w; o0 }1 i% Z# {
  1463. .WORD $01C0  F  l$ n  L8 m: F% k
  1464. .WORD $01C0' e; V" X( x1 H5 N' G
  1465. .WORD $01C0, i/ l+ [- [& B( w$ ]7 _! u
  1466. .WORD $01C0
    3 c1 W. g2 a8 @3 d$ @2 f# W8 p; f
  1467. .WORD $01C4- |' u% u& u; r1 Y2 D; B
  1468. .WORD $01C4  b* B  }; T0 ?9 d8 T4 O1 P
  1469. .WORD $01C4( [$ D1 p6 W- r
  1470. .WORD $01C4
    * R+ R' h- i( Z% J4 u
  1471. .WORD $01C4; n# C# ^- h; G7 ]- l6 E
  1472. .WORD $01C4  P' u3 J' M+ N4 @. B, t
  1473. .WORD $01C26 L( c: N3 [: O' B8 W" M6 G
  1474. .WORD $01C4
    8 k( M% y6 A: _( `
  1475. ; z- g7 s! C$ f7 J- Z5 M
  1476. ;功能开关检查地址
    ) P  o+ M9 \2 h8 `+ L! s* q! t
  1477. Function_Addr_B:, Q) e- O! S& j  z
  1478. .WORD $01C1# u+ z# l; D) q- {! n7 M' b
  1479. .WORD $01C15 b. e4 `! s: y+ e" a5 }
  1480. .WORD $01C13 I4 M5 ?$ k# r- \/ Y) ^. t
  1481. .WORD $01C1; ]8 k7 J$ i. U! d# _2 M" I* K
  1482. .WORD $01C1
      D1 }3 T4 P6 n! f
  1483. .WORD $01C1
    * n) ^% i( ?4 K$ w% g. n
  1484. .WORD $01C11 N2 b- P: s; v6 V& d5 Y8 ]* ~! z
  1485. .WORD $01C1( Z; d( A/ t0 I7 x; E! J
  1486. .WORD $01C4
    : o5 B: K, A+ q% r9 |; m
  1487. .WORD $01C4
    " I* Z# a" f4 {5 B( H4 V
  1488. .WORD $01C42 f! K2 T: K2 P5 J
  1489. .WORD $01C4
    5 H6 F5 K, n" o& U
  1490. .WORD $01C46 I1 w+ u+ o+ P: X
  1491. .WORD $01C4
    . s4 f" S4 K- a1 @" Q0 W0 \
  1492. .WORD $01C3
    & R  A* X0 \) x- D6 R; E
  1493. .WORD $01C4
    9 z9 J' w4 A. ]7 `; p" [

  1494. $ s( R6 X0 ^! w/ J6 E) U: u
  1495. ;==================================================  x' r8 t# w8 L, J4 o
  1496. ;功能开关检查数据  w( b& f9 C+ Y' d3 ?
  1497. Function_Check:
    1 n6 V& f% n( s5 o
  1498. .DB $013 e9 k, l" N- H
  1499. .DB $02
    9 Y: h$ M1 }8 W7 h4 N3 ?
  1500. .DB $04
    2 [2 [2 f/ V) k8 D- r
  1501. .DB $08) a+ K5 ?) p# J4 i; {: q
  1502. .DB $10' G( f9 J8 m/ ?
  1503. .DB $20
    ! p' V! Q9 x* m. Z
  1504. .DB $40
    ( h. I! B2 ]: U  m0 K7 d5 E& d% l* v
  1505. .DB $80
    2 I+ Q9 F" K# D8 W
  1506. .DB $017 o) y6 g9 ~: Z, y  c
  1507. .DB $02
    ' y* P' T( j0 J. a% h
  1508. .DB $04$ @6 `' ^  N9 Y+ \* V3 l; W
  1509. .DB $08
    # T7 `7 U6 _) S7 m# d2 V! J4 M
  1510. .DB $10
    7 F1 z1 @" U3 p, m6 t/ e5 Z
  1511. .DB $203 a- B- F" s+ I) L1 q. S
  1512. .DB $40
    ( u1 q+ O7 y2 K2 w& F" U
  1513. .DB $80
    ( Y3 h" s1 |; l. D8 X! f
  1514. ; R8 ]* @6 U, ]' u5 M0 S5 o
  1515. Char_Rom:
    3 D/ C" a# x* X6 A
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
      N! u# M0 m, {3 M
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$003 {! |  m8 P6 x
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$00# [/ e7 l! ~1 m; O
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$00
    2 O7 t% Z7 ~/ {1 }- F
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19% c8 ]' @3 v7 s$ m) K3 Z( s
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$007 x* B) S, v9 U6 {4 u  m
  1522. 6 }4 n$ }# U8 e- y  `$ {

  1523. 9 q; k( W3 G: [7 _
复制代码
% Z. O( G  }6 F
游客,如果您要查看本帖隐藏内容请回复
& C( N$ W( Z) s" H7 Q, o0 j
flamecyclone.ys168.com
  {5 t" F( B! O. n! z: Bwww.nesbbs.com

本帖子中包含更多资源

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

x

评分

2

查看全部评分

签到天数: 3186 天

[LV.Master]伴坛终老

发表于 2019-11-29 23:03:37 | 显示全部楼层
支持楼主,非常丰富的修改选项!
[发帖际遇]: afti摆地摊卖菜,占道经营被城管罚款 1 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

发表于 2019-11-30 14:20:13 | 显示全部楼层
顶楼主啦..希望楼主多发精品好帖啦.....
[发帖际遇]: yelei花2 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1715 天

[LV.Master]伴坛终老

发表于 2019-11-30 14:45:08 | 显示全部楼层
改的挺多,支持!
[发帖际遇]: 狮子座 发帖时在路边捡到 1 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

 楼主| 发表于 2019-11-30 16:11:17 | 显示全部楼层
重新制作, 修复已经发现的bug
[发帖际遇]: yandagui 发帖时在路边捡到 5 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1764 天

[LV.Master]伴坛终老

发表于 2019-11-30 16:11:46 | 显示全部楼层
666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 2675 天

[LV.Master]伴坛终老

发表于 2019-11-30 18:27:30 | 显示全部楼层
楼主威武
[发帖际遇]: caochunyuan辛苦发帖,赚了 4 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1505 天

[LV.Master]伴坛终老

发表于 2019-11-30 21:38:25 | 显示全部楼层
感谢大神分享!可视化修改非常棒!
回复 支持 反对

使用道具 举报

签到天数: 187 天

[LV.7]常住居民III

发表于 2019-11-30 23:17:50 | 显示全部楼层
多谢你的分享
[发帖际遇]: dabayu为灾区捐款 7 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1917 天

[LV.Master]伴坛终老

发表于 2019-12-1 13:14:11 | 显示全部楼层
感谢楼主分享
[发帖际遇]: DEN 发帖时在路边捡到 1 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 35 天

[LV.5]常住居民I

发表于 2019-12-3 18:46:27 | 显示全部楼层
感谢{:4_92:}分享
回复 支持 反对

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

 楼主| 发表于 2019-12-4 21:39:53 | 显示全部楼层
增加烧录支持(其实是之前遗漏了兼容性)
回复 支持 反对

使用道具 举报

签到天数: 1276 天

[LV.10]以坛为家III

发表于 2019-12-5 06:49:43 | 显示全部楼层
樓主的修改一定支持, 魂斗羅是喜欢的系列.( `1 P; t/ ~9 w- E0 \
多谢楼主分享
[发帖际遇]: waikwokt 打扫环境卫生,被奖励 2 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1194 天

[LV.10]以坛为家III

发表于 2019-12-5 10:13:59 | 显示全部楼层
漏了一个下载。现在魂斗罗2部都齐了。谢谢楼主无私的付出。
回复 支持 反对

使用道具 举报

签到天数: 3629 天

[LV.Master]伴坛终老

发表于 2019-12-21 02:21:12 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

发表于 2019-12-31 21:29:52 | 显示全部楼层
这个牛叉大了
回复 支持 反对

使用道具 举报

签到天数: 3320 天

[LV.Master]伴坛终老

发表于 2020-1-18 16:09:02 | 显示全部楼层
不错不错
[发帖际遇]: leshui扶老大爷过马路,警察叔叔奖励leshui 2 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2020-1-21 11:56:09 来自手机 | 显示全部楼层
谢谢楼主了
回复 支持 反对

使用道具 举报

签到天数: 635 天

[LV.9]以坛为家II

发表于 2020-3-5 21:18:20 | 显示全部楼层
谢谢老板啊
回复 支持 反对

使用道具 举报

签到天数: 8 天

[LV.3]偶尔看看II

发表于 2020-3-22 14:13:00 | 显示全部楼层

, P/ O( F5 P7 F( P( p+ u9 ~: B% w8 o3 oTec.PNG (8.05 KB, 下载次数: 0)
- z' M9 W, S5 J# o
2 B$ {* w2 M# F, P下载附件  保存到相册" c3 [0 F2 f2 @1 [5 ^

: x/ |7 Z) X( L! j2020-3-13 13:33 上传, ~5 A6 B+ ^4 ?& z
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S
( b+ ~) s+ h0 I3 r* x修改内容:
  X  `2 ^5 z/ i4 E3 t) r1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s+ q% r9 }5 z4 H/ D9 P
4 N# A* o  K& S. i2 c
3 q3 {7 L& O) [# e! M4 o! c0 v# s不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 04:37 , Processed in 1.095704 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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