设为首页收藏本站

 找回密码
 立即注册
搜索
查看: 1645|回复: 27

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑 ! E7 N# e+ ?' \
/ a: V) r7 W* F& i' @
[FC][魂斗罗][最佳可视化]
$ q  o/ h! \# X9 J时间:2019.11.30
: X, J+ p" A" S5 h+ e8 K$ V作者:FlameCyclone
0 W3 @+ E- {. a6 w3 V7 `内容:+ |1 p; ]5 j9 A3 s$ a
1.可视化:    . P. D/ b- _" E
     (1)暂停时按选择键进入菜单
! ?  r3 t% s1 Z" z, I; F5 ?5 `5 f: E     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出2 D( z! }- O% v8 w
     1.1.透明无敌: 透明无敌
; ^, w2 q1 k$ Z( K     1.2.加强无敌: 金身无敌
* _7 w) U6 ~0 V% o7 a& ^/ H7 A: M4 {; M     1.3.生命锁定: 生命锁定3条
9 k- Q0 t- R7 D     1.4.武器锁定: 武器保持不变1 ]$ N# ]- _+ [4 g2 W
     1.5.武器切换: 游戏时按选择键切换武器
1 a& Q3 h- M$ o+ J" m2 U' l4 t* a     1.6.无限跳跃: 跳跃无限触发
; \0 C& r! R$ E5 Q* b% d# K& u, P! r     1.7.快速移动: 行走速度加倍. ^: I/ L* |2 m, A. B
     1.8.皮肤切换: 交换玩家肤色" N9 A5 U  S$ J0 l8 b0 U
     1.9.公平子弹: 玩家子弹可以与敌人子弹对打
- L5 x* M) R- E" T8 e* I  h     1.10.强力子弹: 子弹打中敌人后继续穿透
0 t5 k8 H/ R, a9 P5 L9 f7 P# G     1.11.一击必杀: 敌方中弹一发必死3 d6 ?9 |. D2 v. m  V8 j% H
     1.12.全屏击杀: 开枪时全屏可击中目标必死) L, r2 q* L/ [, ]
     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家
: D+ H/ U  A( B( T6 A* ~     1.14.移除电网: 移除2,4关的电网) O, k1 x/ P! L3 c
     1.15.掉坑不死: 掉坑后不会死亡
' o0 |8 U- S7 k     1.16.跳过关卡: 跳转到下一关
+ c% _: s8 m" K5 p. i$ ^! F
  1. ;[FC][魂斗罗][最佳可视化]
    , O$ O$ H2 r% O5 C4 z! U; r
  2. ;201911298 _- d8 d/ V9 `& i
  3. & L4 {+ |- D( E6 q. P. g% A3 O
  4. ;程序开始地址0 S5 Z/ @+ R- b0 {) N! c9 S3 t
  5. .ORG $9000- O, {7 J6 q# w2 {3 s$ P

  6. . V3 {8 X) n% D/ @( t
  7. ;==================================================
    2 E3 U+ i& J" a8 R0 R* ]8 p
  8. ;==================================================2 O, ~* ?* G  M! c4 u+ q# v
  9. ;是否双人玩家! e# C6 x  K, T' C% g, P! {$ k( `
  10. FC_IS_DOUBLE_PLAYERS = 1
    ' n& E0 M0 [3 Y
  11. ! f1 @9 f3 U1 n( |
  12. ;==================================================  A. |1 O# E+ g" ?% |
  13. ;PPU缓冲地址配置
    5 Y0 L3 R  f/ `' ]' i2 @, V
  14. FC_PPU_Buffer = $0300
    # N; _1 b  p$ l% V8 u- V
  15. ;PPU地址配置2 ?8 G# e: g; S: ~
  16. FC_PPU_Cursor = $00* @4 ]' v& O4 C) g# y
  17. FC_PPU_Status = FC_PPU_Cursor+$01
      H+ x. D5 d3 K: ~
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $01$ Y! O+ D9 f; D6 f" ]* a5 y
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $01
    ( M$ a% {+ b) w2 K" e% p# X4 g
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $01
    $ r( ]+ V1 c* R2 w0 x
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01% Z3 s9 a8 h, h3 x1 E# G9 P
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $01( j- V7 i! ]3 h0 |  X* z6 V3 k
  23. ;==================================================7 `# M# z% U6 n: k2 _: ~3 b
  24. * ?# K# k7 ?( S( @
  25. ;==================================================
    ! v, j2 r3 ]; |; [; {
  26. ;选择项地址配置
    # |' l0 D- Y! s/ @9 k6 u
  27. FC_Select_Index = FC_Data_Port_B_H + $019 D) x$ ^4 Y9 V: l+ A8 j
  28. FC_Select_Temp = FC_Select_Index + $02
    5 }* [( T1 R0 ]- x1 l+ j) O3 Q
  29. ;NMI循环计时器& D1 [( \5 o' k. y. }
  30. FC_Time_Count = FC_Select_Temp + $011 \& ?9 X- k- B
  31. ;==================================================, m; H5 h! H2 `# S5 `
  32. 8 Q, S6 C8 o1 k* d7 E' \( G
  33. ;==================================================
    7 ?/ u" Q3 U$ c( n( ?6 W
  34. ;光标配置
    # w9 v. c+ ^7 z+ t7 J5 b6 }9 }7 U
  35. FC_Cursor_Addr_L = FC_Time_Count + $01
    8 U+ H* L: s- [3 T+ ~
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01! D* H* Q* ?7 y) z' T$ j  m
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01
    & L1 U! e+ _$ k3 U0 h: T1 Y
  38. FC_Cursor_Y = FC_Cursor_X + $01
    1 W( X* D5 s9 ]; E5 `
  39. ;----------------------------------------
    - c  d) [* q5 i% J: f# E2 G6 y
  40. ;光标图形号
    - v' }" }6 D: b" Q! s2 _% D+ A
  41. FC_CURSOR_TILE = $3E; {) _* g1 C% ^) G! j
  42. ;光标偏移像素值& ?) D2 U  Z2 H
  43. FC_CURSOR_OFFSET_X = 12
    5 e9 {/ h- D$ x# K4 G3 R
  44. FC_CURSOR_OFFSET_Y = 1" ~9 O# Q1 I( V3 y1 E( U# r
  45. FC_FUNCTION_OFFSET = 215 g! @; [; r, V) I# e- f0 _
  46. FC_ON_TILE = $3D
      [+ n) f" I2 ~& c5 s; Q
  47. FC_OFF_TILE = $3C
    ) V/ B4 u. \# J* t' e$ G* z' Z
  48. ;==================================================
    4 t! p0 H, g4 z' \$ @
  49. 5 i4 |3 v- R4 H
  50. ;==================================================
    7 W8 J8 o; ~) j2 W( \
  51. ;翻页配置
    2 g7 {) ?2 B* t! _+ G
  52. FC_Page_Old = FC_Cursor_Y + $01( y+ b3 k  }9 h/ z# ^, [
  53. FC_Page_Cur = FC_Page_Old + $01( L3 N! {8 _2 _0 i& L# C3 q* ^6 E
  54. FC_Page_Item_Count = FC_Page_Cur + $01
    - l0 R- ?% l3 C0 {! x# d. m. i, ]2 q
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $01. Y) r, G6 V4 _- I
  56. ;----------------------------------------* A) H, N) K$ t; N& P
  57. ;翻页属性
    , C% q' b$ x4 L
  58. FC_PAGE_SIZE = 108 m+ B! r2 G: t  E  ^1 d
  59. ;PPU单次写入缓冲项数
    2 x8 [2 O; N- I# j! v
  60. FC_PAGE_BUF_SIZE = 2
    * H" \/ R* L3 w' s5 c
  61. ;----------------------------------------
    0 l4 @* z3 p: l- Y; m2 v7 k
  62. ;显示项最大索引属性. R1 ~% E' h5 f4 S& {
  63. FC_ITEM_SUM = 16 - 1
    ; U2 |9 V  n- K5 K; {
  64. ;最大页索引属性& k( P# g# _* u  m7 y$ {
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE0 C3 M0 i  k, [* g, c6 I5 H# Q9 C
  66. ;==================================================
    3 o& f$ Y# Y; m" t
  67. 5 D5 `( e2 ~1 x* O2 ]9 p) _' C
  68. ;==================================================
    2 R, O* O+ }: `
  69. ;按键配置
    % o9 F6 D$ l* ^' R- t2 q
  70. Button_Keep = FC_Page_Item_Buffer + $014 I& G$ n- u/ h+ }6 ?7 F
  71. Button_Once = Button_Keep+$02) W+ U* M$ M  A9 A( q9 B& c* J; `
  72. Button_Temp = Button_Once+$02
    $ S$ K& z( V% E
  73. Button_Buf = Button_Temp+$02
    ! {/ r. j" b, m' c; V$ ?7 I5 [
  74. Button_Status = Button_Buf+$02+ c& v! @- U5 q5 A5 R5 s. g
  75. Button_Auto_Delay = Button_Status+$025 _. J! |+ N  k3 s. @4 f
  76. ;----------------------------------------- {" b! S, f) R+ e5 U
  77. BUTTON_DELAY_MAX = $18- b: w% K+ R! \3 u! @/ d
  78. BUTTON_DELAY_SPEED = $08# t$ d) C4 O7 G9 t1 G4 L: a
  79. 6 I% R- j+ m6 S& A
  80. BTN_UP = $08% w/ F9 G9 l6 o$ g( s& q
  81. BTN_DOWN = $04& F: d3 N( W  u: g- ^* e
  82. BTN_LEFT = $02. b4 s# p8 _1 i5 ]) t6 X5 D* v
  83. BTN_RIGHT = $01
    ! F7 a5 K4 ~" a- @/ }
  84. BTN_SELECT = $20& C! i7 u6 |4 g4 _3 ]/ P0 K' ?/ g" W/ W
  85. BTN_START = $102 O& d7 R* q+ b- L1 i
  86. BTN_B = $40
    " w6 d6 c" T  s' R( B
  87. BTN_A = $80
    3 V/ M) _) R% r7 O$ D
  88. ;==================================================( t7 ^# c( x8 g& P: a4 e
  89. * S. S, P. z; I& f- r' U
  90. FC_Copy_Addr = Button_Auto_Delay + $01) e+ U9 M5 p2 O3 n# D6 E" V
  91. ;----------------------------------------. P  x9 t& z7 O, O4 b3 c5 Y
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值
    - @& J' P& ?. N6 V
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位
    6 c4 K! `9 v( P! X# u+ g
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位
    2 q1 f! Z+ |1 W# C
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位; a. ^9 Y; a" _
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位
    & k8 S: E2 l& Y
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位- H! n( K( h; ?
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位% v9 s) M1 ~: F) ]- q% D8 _- X# I
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位% k* X: H3 d" @6 @7 [( `1 I. Z: y
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位- \6 p: a1 D% }2 N
  101. ;----------------------------------------4 c" I4 i' Z! ~$ H9 b# v, k0 q( X' t: m
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式
    & |2 H3 p3 e- o* _7 x- e
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式% J9 ]7 J! u4 m7 z; n" I5 }
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式) m+ q) c& ?/ D/ R
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式" `& X( z, O+ j% C- F& @  @- J, y" G
  106. 0 \5 M2 s$ _3 S' B
  107. ;==================================================. Y) x$ G* n' Y0 z
  108. Rom_Nmi_Addr = $FF
    : X3 m0 y7 P, F0 |+ I# C" U
  109. Rom_Btn_Once = $F5% N, ?4 S0 E' ?: _& M
  110. Rom_Btn_Keep = $F9
    2 o# l" E' f5 d5 p1 B
  111. Rom_Pause_Addr = $25' S/ k& R% q  t! y1 r+ B# N
  112. Rom_Pause_Val = $01
    0 W$ G, p' K2 Q: N: d% W& U
  113. Rom_Pal_Addr = $07C07 S/ y' }" ?1 S* Z4 Z* p
  114. ;----------------------------------------
    3 E( Y* b9 m* z4 D
  115. Save_Zero_Addr = $6200- ^$ Q) B% {8 f. U
  116. ;==================================================7 d* {& t6 L. Y% ]! T
  117. ;==================================================: t3 o; E) S. c* \6 ~
  118. $ k$ E5 Q: d8 _
  119. ;程序入口
    3 |9 m! \% _6 [* Q* g
  120. Enter:
    - U( |2 _/ x$ C4 X
  121. LDA Rom_Pause_Addr
    - W4 n5 d# P* N4 ^! v* P' l
  122. AND #Rom_Pause_Val
    * U! w  b4 p2 ]0 D8 W, e
  123. BEQ Quit_End
    9 y* N. S! R# n& Y1 S
  124. LDA Rom_Btn_Once
    * Q( Q6 O1 d* z. o: Q
  125. CMP #BTN_SELECT" B8 H7 ]7 F( v. u
  126. BNE Quit_End
    8 m  ~% }& R& a' I' d7 Z/ V
  127. PHA
    & a/ Q( w( x3 x4 f
  128. TXA4 _8 Q' d, D7 y  }) ?
  129. PHA
    ! Y5 Z4 F7 k  y7 x$ g+ H
  130. TYA
    9 u( y; g1 p) {7 X) m* G* P
  131. PHA4 o: ]0 p0 M1 `& z' a( V- d
  132. JSR Wait_Sound_Stop
      J' Y7 D8 N# W6 d( l/ r
  133. JSR Save_Screen1 B: @2 ~1 p5 w0 L
  134. JSR Program_Begin
    & L) S$ Z4 d: N3 q2 l, M
  135. JSR Load_Screen$ H, L" s' j/ n. S2 b7 b- o; J6 n5 a
  136. LDA #$10/ j; L* k" W% C' B$ M
  137. STA Rom_Btn_Keep
    / \5 r( K0 M; ?' E3 `5 ~
  138. LDA #$00. Q3 x$ |1 f! c4 {
  139. STA Rom_Btn_Once- R( s" X$ u7 M! L9 x+ @
  140. Quit:
    ) X7 N# x6 D6 D9 h* r
  141. PLA8 c6 Q4 z+ s: }: L6 I. q" {
  142. TAY7 i1 w" k6 b" L( E; Y5 r
  143. PLA/ |& B& M$ A* V) |1 q. \
  144. TAX
    9 x9 {' o; ^& V/ X4 p$ P
  145. PLA
    1 Y! z  Q. L$ L9 M) a8 m2 L4 m# h
  146. Quit_End:) w9 ^& P. R# E6 V7 [1 t( M; d
  147. RTS
    6 A, ~; B. [2 Z* e( J, T6 \9 Y+ @8 d8 p
  148. ! Y. u" k0 f2 z3 y5 W% M! d3 d  \4 c8 X
  149. ;==================================================# r9 d/ ~2 G4 @7 r; I. z9 A+ G
  150. ;等待音乐结束- N: F, C, O# z; }
  151. Wait_Sound_Stop:1 R8 s7 P9 H  V5 j0 ]
  152. Wait_Sound_Stop_Check:9 J' k+ u- ?3 G+ G1 M1 S: z
  153. JSR NMI_Wait8 ~! k& t5 l. K0 A( @
  154. JSR $F825
    % X, A5 ?4 O4 j* A6 L. ~
  155. LDA $010A' C# W" l% m8 A( T( O# O4 s" G
  156. BNE Wait_Sound_Stop_Check, b5 O( [: Q% |6 H3 c
  157. RTS
    4 k7 q2 v0 @, Y. v6 I) Y

  158. $ ]+ G) _& u- H; l
  159. ;==================================================
    ( g  e8 D! W' f" y
  160. ;保存屏幕数据0 g) N0 H# C2 V* u* k2 B" E
  161. Save_Screen:# c/ K* H( f% l: E# Q8 }' s
  162. JSR Screen_Off
    5 }( d& h% y- o# H
  163. JSR Save_Zero$ W3 r- D# h; ^! J
  164. JSR Save_Ram
    * d" @* D$ F* ]1 y) h9 ~: _5 N  J
  165. JSR Save_Ppu# i+ F9 N$ _; [2 _
  166. JSR Ram_Init* {2 p7 ^/ d" |1 s$ y9 N5 t2 H
  167. JSR Sprites_Init
    ( X8 L$ k+ {/ c$ ?2 d
  168. JSR Clear_Ppu/ Z0 |- u! S+ _% _
  169. RTS7 Q$ m  l/ v( ~9 m$ _0 H3 {
  170. / B. T4 q, [3 E
  171. ;==================================================/ U! N) Z: @6 K% m6 j
  172. ;加载屏幕数据
    + y% X2 m, [% A+ Q' d7 ^. H  H
  173. Load_Screen:% o# h" X; z; q5 u3 l
  174. LDA #$009 S7 a0 y  {4 V: Y; u) R; P! w% A
  175. STA $2001
    & x+ k' q! i' z. R) O
  176. JSR NMI_Wait, z$ p& D7 O* V" z8 |# u. h+ A
  177. LDA #$02
    # N: X' ~2 g2 c+ G. y/ v8 c& b
  178. STA $4014' g+ A9 G6 N# S2 `$ H$ @1 j) j
  179. JSR Load_Ram
    * L; @' X" J' g5 B: \$ ~6 v
  180. JSR Load_Ppu1 r6 G0 W/ i5 T- j6 p* B+ l
  181. JSR Load_Zero4 C9 z1 `3 o9 y/ r0 Q
  182. JSR NMI_Wait7 \- \- u5 P7 i- t
  183. JSR Load_Palette
    , q; n; i) a: C
  184. JSR Screen_On* {% E% \! u  `
  185. RTS
    5 l* B* x" Z2 e1 O0 s* d

  186. , e& @3 [7 T; V. l: u3 S% @
  187. ;==================================================# x  I  Q; ]$ s  h: o
  188. ;关闭屏幕
      I1 s% T& C* `: x1 @
  189. Screen_Off:2 F" y8 @& x4 U! |  t! e+ V( a
  190. LDA Rom_Nmi_Addr% L5 U9 k' e. P1 D# G
  191. AND #$7F* J2 ]7 P3 K9 k6 P4 t2 m. t/ o
  192. STA $20001 t+ }7 y2 i( c6 W3 M! X) z
  193. JSR NMI_Wait
    0 ?& x5 A  s) y9 }9 u
  194. LDA #$00
    4 q/ b$ d+ s( g* ^( `6 o
  195. STA $2000! L+ v) H. S- r- \( F; L: P% Y
  196. STA $2001
    + l; s  W) z. P- `) W0 Y4 c' W
  197. RTS
    * @' s9 F0 @* g& y* Y

  198. 1 \2 b3 N/ j: j  H! D0 [
  199. ;==================================================! r- ~0 m; I& I# i$ A- g
  200. ;开启屏幕
    7 v. V# H2 J; Q
  201. Screen_On:: z6 |5 q3 e# h& A
  202. LDA Rom_Nmi_Addr! \$ p1 o+ R7 l8 G( Z, o  E9 M
  203. STA $20000 |( T$ L2 N( I
  204. RTS9 _- W! p  `1 e6 K1 ?
  205. 7 s5 Q# ~$ ?& `" ?3 W$ a
  206. ;==================================================
    ) J* o9 ?# y2 ~, |  ?" U
  207. ;清空占用RAM
    $ z! W: G/ J6 |  v4 |! J* k& i
  208. Ram_Init:. v3 e& G( y* {6 i" n
  209. LDX #$00* [+ Q' \) f6 j* ?: t: l
  210. LDA #$00
    ) ]! g6 w; n/ L
  211. Ram_Init_Set:
    , f& l( B, @$ G9 ?) Q1 R
  212. STA $00,X
    # t. V; l# O' v/ W/ N
  213. INX3 I0 I2 j9 H- N  j- ~' J
  214. CPX #$40
    3 j& x) e- ~. {- ]( O( \  l8 _. w
  215. BCC Ram_Init_Set
    $ i2 x. o3 D  T7 j
  216. RTS
    / D, Q5 G0 U) g% R5 x  T# b% p' H- e
  217. 5 w$ S1 H/ U; i* w
  218. ;==================================================* g0 _6 h9 R: b( l
  219. ;清空占用RAM
    . i+ A4 ^9 f: `+ _# s. d( f4 A
  220. Sprites_Init:
    ( p. b- V+ ^; K. P# K' p
  221. LDA $2002' w9 w2 C! k+ ~' n
  222. LDX #$002 Z' P: }2 ~7 a9 A/ f1 S
  223. STX $2003! s% Y( V* F2 k5 x
  224. LDA #$F8
    4 r- w4 S. l+ Q6 ]
  225. Sprites_Init_Set:
    7 z- l2 o. |$ ?( W' n/ }
  226. STA $2004' y2 k; b4 Y3 y' z( a5 o
  227. INX
    1 r9 Y  h# V6 x5 y# F. S
  228. BNE Sprites_Init_Set
    5 i% S4 w2 U: k$ g6 \- I# \
  229. RTS$ i/ W; D7 U7 W2 f
  230.   F  _  L+ K5 V2 K# u/ @
  231. ;==================================================" D3 S9 b3 ?" W" W  w
  232. ;保存零页数据
    $ g8 N$ {% w6 P) |. T, r
  233. Save_Zero:8 v% ?/ O2 H' |6 E9 F" m
  234. LDX #$00
    3 D) E. b$ F9 s. k! |
  235. Save_Zero_Set:5 V( {8 [- G. h8 V
  236. LDA $00,X
    : J3 u+ }4 t  }: P; t
  237. STA Save_Zero_Addr,X
    5 I+ W8 Y/ \  B& O& h: R% Y
  238. INX
    * |/ D3 H1 e9 \
  239. BNE Save_Zero_Set. D2 ~$ R. v2 R/ ?
  240. RTS9 u4 W1 m( z, U# y$ a
  241. % q# g( N, ^6 ^, }" {
  242. ;==================================================6 y1 e: n8 h: z# Q6 o% C/ Y
  243. ;加载零页数据
    , q$ c, T) n( w% q+ [/ i6 H
  244. Load_Zero:  h9 d  l0 f" X9 c
  245. LDX #$00
    9 }8 f6 G7 A* X2 A
  246. Load_Zero_Set:
    " x. z0 ]1 s5 \+ {8 W
  247. LDA Save_Zero_Addr,X- E3 S* ~. J' E/ u0 o* V4 `
  248. STA $00,X  O! u  X, n% }: o) Y8 p' m5 H
  249. INX/ m7 Y- n; p4 p' y
  250. BNE Load_Zero_Set$ K  U3 N: |2 b  O3 v
  251. RTS
    1 p6 q2 e) I5 |9 h2 ]( W

  252. ( J+ s" J. o& ?+ ?2 n
  253. ;==================================================/ M4 `9 C: k  r$ j: L6 P9 _! G
  254. ;恢复调色板
    , b- u: A, p" q) t+ f
  255. Load_Palette:
    # N! D. \9 p7 v
  256. LDA #$3F
    7 M% |  P/ E+ o+ l3 c
  257. STA $2006% ]1 y5 g/ e, k# b; \; z* @5 f
  258. LDA #$00
    % H0 j" p* [( M% G7 |, J9 d* W
  259. STA $2006
    ! T2 Z; M) Y0 [7 I
  260. LDX #$00
    % W1 R4 t1 g1 v1 l0 \
  261. Load_Palette_Set:
    ; q) x0 j* z$ f; u
  262. LDA Rom_Pal_Addr,X
    ' [2 W0 W9 H7 F$ [
  263. STA $2007
    ) z& o" a1 R; h4 b; \- u! g9 _
  264. INX
    ; R+ J) ~- D( `' q" |% q, @8 t; C
  265. CPX #$20& c) z+ L9 m8 Z" ?8 X9 e4 D5 `! D6 L
  266. BCC Load_Palette_Set$ }2 r: S5 M) C
  267. RTS
    : X! g& _+ C1 M

  268. , N* R- E) R, \; P1 ^+ q
  269. ;==================================================
    : ~9 Q% r2 Q$ @! w$ P. L4 |
  270. ;==================================================; d! \2 f' M2 m1 @( C+ W7 ]1 e

  271. " r2 _. [2 E* l
  272. ;==================================================
    6 M' ~4 \( [6 G
  273. ;程序开始
    * e# d  A1 L! Y- b
  274. Program_Begin:
    # v0 L0 c; }& D. E8 |8 W2 h
  275. ;==================================================) U: b' e1 @% ]- c6 o
  276. ;图形设置
    4 o) g4 d5 o4 Z" O& h" z  R8 A
  277. JSR CHR_Set
    / l3 u# W7 Q) c' U6 u8 N/ I1 b% j
  278. JSR NMI_Wait
    2 {& C/ d! ]) E  w" {
  279. JSR Palette_Set" S2 ^, `9 w6 T+ ]" a6 n5 v
  280. JSR PPU_Data_Page_Show
    9 s; k  P- `- x( I

  281.   ~& {$ r1 H4 ?/ w
  282. ;==================================================
    & C7 v4 y5 I1 ?0 C
  283. ;开启显示3 E2 H6 `  d$ P# ~. q+ j
  284. LDA #$1E
    3 d  K6 n" V! k- S6 ^( ^1 \2 ^; h$ H
  285. STA FC_PPU_Status5 k. o9 o3 j  _7 W" b( P

  286. : Y0 t# d3 A5 L5 m" k% f
  287. LDA #BTN_SELECT
    + |4 a" l+ |: P. k0 `5 D
  288. STA Button_Keep6 n* K8 l4 M+ ~# g' x; m; P- w
  289. ;==================================================4 o4 M$ u9 F3 r: \3 ?# X$ D% {
  290. ;模拟NMI循环
    2 s0 m! f& Q0 f5 N, {
  291. NMI_Loop:5 D$ Y+ O3 g; S1 k. Y4 d& C7 Y
  292. JSR NMI_Delay7 z; i! k; ~' X( `9 d6 j  h
  293. JSR Button_Process
    0 @7 x5 j# y9 W+ H; ^
  294. JSR Button_Auto_Press6 L1 {. t/ [/ S( j/ c: Z7 H
  295. JSR Change_Select_Item3 T& V' Z1 E' R+ Q( M
  296. JSR Change_Function
    7 p% B* \+ w% Z4 \
  297. LDA Button_Once
      H0 U7 j4 s3 r. _; R& y% I$ [
  298. CMP #BTN_START8 E6 h& n. d5 X* {9 a/ d+ I
  299. BNE NMI_Loop
    5 y% N" }- m& B* E. }5 R5 l; l$ L; k+ q5 w
  300. RTS. {" C; b1 ~* F; K  v
  301. % G: V+ ], f& @2 t
  302. ;==================================================- u; U8 q" c# g- D, L+ w
  303. ;模拟NMI中断
    & \1 ^! p$ I2 F0 t1 Z! }
  304. NMI_Delay:1 |# C, E4 L+ Z' B0 T
  305. JSR NMI_Wait
    : n, v1 D! L0 N; {9 g0 [4 o; C
  306. JSR Show_Select_Cursor
    % n6 t! t9 _" N
  307. JSR FC_PPU_Process1 A: _3 o* q; @
  308. RTS9 ]% h1 J2 L! Y/ b& l* `; e
  309. 9 n+ u1 w2 B# r% }
  310. ;==================================================
    ( W" R: g% f( D& C: k. H, K
  311. ;等待NMI中断# p1 C3 `: [7 Y( j- K
  312. NMI_Wait:
    7 {2 B5 _4 l, E3 O: E
  313. LDA $20023 z- j7 T, |- y  k2 `
  314. BPL NMI_Wait8 i6 o7 ^. l& W
  315. DEC FC_Time_Count2 _  ]; H$ v! ~  E& Q7 ]. {
  316. RTS
    + N0 @6 A9 r) s3 U, J: l; s' \" f, L
  317. 6 X7 b5 d% h7 q5 ^% n* q
  318. ;==================================================
    7 E' Y3 V1 A8 T, x
  319. ;PPU写入模式配置属性8 b# ]- r4 Q, f* [2 v/ M
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入6 ^+ |" r6 T; ?# a1 p
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除9 P6 O" q# q9 k. f, Z
  322. ;-------------------------------------------------; M: I0 l( X/ |
  323. ;PPU处理! f  H' U6 x% x# \! b3 _' Q
  324. FC_PPU_Process:( \+ K; X6 A! P4 Z
  325. LDA FC_PPU_Buffer) b7 `9 r  }" r! Q. R
  326. BEQ FC_PPU_Process_End1 g3 [0 L8 V2 x! r% R/ n. F( f9 x
  327. JSR FC_PPU_Process_Beg5 G" h* ?: _( U& n) t- [
  328. FC_PPU_Process_End:! q, I& j7 Z. O5 F5 D' ]
  329. LDA #$00
    $ F# R9 W  X- t: T
  330. STA FC_PPU_Buffer
    6 A. E7 f3 u  ]& s
  331. STA $2006  x& o8 B8 E% e
  332. STA $2006
    4 V* d- W. y1 c! u" N# U+ b
  333. STA $20052 ]8 p# E# }- r2 N9 }* d. u! l3 E& R& P
  334. STA $2005
    9 G! Y: i4 l- t4 e$ G+ N# _" n) K! P
  335. LDA FC_PPU_Status
    ' g3 m7 T6 Y0 P  D- w* Z
  336. STA $2001
    ' i3 x. b' d6 _1 d& [
  337. RTS7 }$ W  {; V0 |: X4 s5 q5 T5 `
  338. ;----------------------------------------
      l' N& E( j3 t" y  Z9 Z
  339. ;PPU处理开始
    1 m* c0 y/ X+ \) j7 m
  340. FC_PPU_Process_Beg:
    0 c3 s% A) h/ f# m/ \& w" g; ?
  341. LDX FC_PPU_Cursor
    * ?3 s$ N+ |# q
  342. LDA #$00* x; {8 s- Z( }6 }
  343. STA $20017 j/ Y2 I* Y7 \& F9 l  Y$ w2 }
  344. STA FC_PPU_Buffer,X! P, W; y3 K7 ~7 o: ]% Y* I
  345. STA FC_PPU_Cursor
    % t( j6 f1 ~5 ~' Y: y
  346. LDX #$FF$ e: Y) D& E+ F  H9 z
  347. CLV
    3 D6 X* ~6 I. F6 P$ ]9 L
  348. FC_PPU_Process_Mode_Select:
    , g( m0 J: K; i9 h
  349. INX) h! f5 G: a% c6 T1 V& L
  350. LDA FC_PPU_Buffer,X
    9 x9 ]' z2 p5 G. F8 t% ?' s
  351. CMP #FC_PPU_MODE_CNTL$ ?% Z0 V2 K" p# @0 t0 R* s9 U
  352. BEQ FC_PPU_Process_Mode_CountLine
    , `9 E! h& [9 b) b8 [1 Z- |5 p
  353. CMP #FC_PPU_MODE_CNTC
    " ^9 ?! g6 D1 ?" u6 j
  354. BEQ FC_PPU_Process_Mode_CountClean
    ! n% A5 N- @  U( K1 \- {, N
  355. RTS! _! @! y+ r% j: v- k0 F; a
  356. ;----------------------------------------
    $ ^$ a1 {- b& ^
  357. ;计数行写入模式
    5 ], Z& N6 q: h7 v
  358. FC_PPU_Process_Mode_CountLine:
    , D% X2 l5 f" F' S
  359. JSR FC_PPU_Process_Set_Addr_And_Count
    : M6 `6 L3 _, C+ C5 Q- G+ e7 w+ z
  360. FC_PPU_Process_Mode_CountLine_Write:
    7 H; o- a; U1 n: n$ l# \
  361. INX
    + V8 ~! n8 W) u1 T
  362. LDA FC_PPU_Buffer,X6 r6 m  I+ T* {( O1 v
  363. STA $20071 f& ?1 d) a  G1 D# q2 y+ i
  364. DEY
    * |' v' H: x0 g3 r% u% l' P
  365. BNE FC_PPU_Process_Mode_CountLine_Write) z0 n; C" x# K# [+ R
  366. BVC FC_PPU_Process_Mode_Select) M5 W- j, C: ^* ], ]& ^
  367. ;----------------------------------------
    3 }) _( j4 y( y
  368. ;计数行清除模式! \7 ^$ _2 t9 I) c# b% x
  369. FC_PPU_Process_Mode_CountClean:
    5 H0 e' J# l- D! z0 G6 E7 P
  370. JSR FC_PPU_Process_Set_Addr_And_Count7 t" G+ O; v- x: q0 j. j7 F6 _
  371. LDA #$00
    8 N  _/ S& @+ r& a- P# K- D
  372. FC_PPU_Process_Mode_CountClean_Write:
    : S5 R4 C- Z& J
  373. STA $2007  h* z# ]9 K' Y6 Q3 h- e( T5 d$ `; ^3 S
  374. DEY- F% r2 a" C! C0 i# [
  375. BNE FC_PPU_Process_Mode_CountClean_Write( S( |" ^8 F% W# h  P$ P
  376. BVC FC_PPU_Process_Mode_Select
    8 Q! n& Q/ w! X- r
  377. ;----------------------------------------' {4 y1 x1 p5 V0 ^+ r9 ]8 Y' e2 b
  378. ;设置PPU地址和写入计数
    , F3 C9 e" {  Z/ t% M* F2 V
  379. FC_PPU_Process_Set_Addr_And_Count:
    ) a: h1 J% v+ `, H3 S4 b
  380. INX
    : U5 C+ G. B% i
  381. LDA FC_PPU_Buffer,X
    - t; A& R6 J; S) H* ]' _% o/ w
  382. STA $2006
      V' j8 L* C; L  W( O/ S
  383. INX& [6 f5 [9 F, [
  384. LDA FC_PPU_Buffer,X
    ! x" v0 A: r8 T" x) W5 ^
  385. STA $2006+ r( n' D% K( q, F
  386. INX$ J7 T8 Q7 _, B( R+ e
  387. LDY FC_PPU_Buffer,X
    3 o- H& K# }$ D- I$ m1 Q5 @% N" C- t  x
  388. RTS8 e4 R. _4 w4 e& F- k
  389. / E# J5 r5 |+ M' g
  390. ;==================================================
    3 A( P2 z3 {6 ?- h' S" S3 x# J) S
  391. ;设置CHR图形
    + x0 u- K3 r8 V& w4 S! J
  392. CHR_Set:
    - p; ~- F5 B0 E7 J  F8 ?4 X
  393. LDX #$05* z. a+ q: v% l4 ]9 _( O
  394. CHR_Set_Data:; K/ |8 t0 t1 X2 _+ X/ |
  395. STX $80008 H& M7 X0 @3 d1 D9 b3 f  B5 u
  396. LDA CHR_Data,x$ O5 L& u6 ~6 M+ l4 `# l
  397. STA $8001+ g0 B% d8 `1 J2 [0 F/ G
  398. DEX
    / a5 `! Q% l( H. L7 F( H  i# B
  399. BPL CHR_Set_Data  w# j6 B4 w6 W. B6 a7 A
  400. RTS
    7 n+ W2 ~) s& w
  401. ;----------------------------------------2 f/ W9 ~$ l2 k, d
  402. ;CHR图形bank数据; C# I5 f+ l" j; _, s2 |7 c
  403. CHR_Data:2 l3 G1 W" ~6 A( m/ V
  404. .BYTE $00,$00,$00,$00,$00,$003 ?% K* s5 `) P" i" S% g$ F6 Z% p

  405. % F2 w5 q0 p; Z, ?
  406. ;==================================================
    / _" b5 g7 o7 J3 w8 K
  407. ;背景调色板设置
    8 q( v5 i( S% C+ N& P" J: W
  408. Palette_Set:
    7 a, a6 I3 ]. n' r6 Z
  409. LDA #$3F
    * D+ i% F5 c& Z9 T' U0 g
  410. STA $2006+ @% f4 @+ m' E  v# k6 u' S
  411. LDA #$00
    & A9 Q0 @% f* l" t3 s1 C5 m
  412. STA $2006, j) h  l7 ~1 V6 a+ a
  413. LDX #$00
      I0 ?2 L4 q( [6 u$ r3 |2 _! S
  414. Palette_Set_Data:
    . `- l, z0 G6 ^0 E
  415. LDA Palette_Data,X
    2 }) u0 l% R- T+ J/ G6 `7 p
  416. STA $2007  w# x# Y- [- L" D
  417. INX: A. U% U& ^- [4 ]) P" [# i4 v
  418. CPX #$20+ L! q) T% N- n' N- t
  419. BCC Palette_Set_Data3 W0 v4 v% h7 _! _# q" q
  420. RTS! I! r: {3 D- h) g- e. W
  421. ;----------------------------------------, x. i, u( Z( R" u0 r8 _  Y# c
  422. ;背景调色板数据
    3 X4 M1 z3 n, X4 L; C+ Q! W: w
  423. Palette_Data:
    9 g9 u" g6 l- L4 ~
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A. R( E9 \2 M) M, X! D& T+ T
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A8 T4 w; q9 }) s

  426. 7 z8 v7 G8 O8 K- k0 t

  427. & o0 Q8 N5 d! U' m
  428. ;==================================================
    0 z/ z: J% X0 W; C( N/ r( n
  429. ;按键扫描, }% L# t# p/ B* p
  430. Button_Process:1 d6 D8 y3 r. ^
  431. LDX #$01
    ) G, [6 C3 O% f5 |" @, n5 j
  432. Button_Process_Beg:
    - s* v/ I) _0 M7 S  s" u3 w
  433. JSR Button_Scan6 [; a% k! [) b" w% j; P
  434. LDA Button_Keep,X
    ! I6 @/ @) \: P8 t% _, L$ Q- u
  435. STA Button_Temp,X+ f6 m( c" x4 n
  436. JSR Button_Scan
    & u, f5 y7 F& I( A( s, C
  437. LDA Button_Keep,X
    * l9 w& k6 n  m
  438. CMP Button_Temp,X
    3 [2 m% I4 f" K6 q) n/ |
  439. BEQ Button_Get_Once
    / m) Y8 C, U3 n" v0 q7 u1 E  d" \
  440. LDA Button_Buf,X& @9 r7 ^# l! J; _) y) s* p) w$ E
  441. STA Button_Keep,X
    ' r" H" I2 F4 k9 ^& p3 Z
  442. Button_Get_Once:' z6 U: x* |4 v2 B
  443. TAY
    , [* _4 Q7 {, y. r
  444. EOR Button_Buf,X
    & v$ p8 _: t3 g* n0 c0 F+ C
  445. AND Button_Keep,X9 A, X, P0 E& A
  446. STA Button_Once,X; Q! l) s% B/ g+ C- I0 ^4 R4 u3 V- C
  447. STY Button_Buf,X/ S, `0 g( @1 K
  448. DEX% v0 C. H5 e( E' K! z& U
  449. BPL Button_Process_Beg
    + @* h- C# Z1 ]  A
  450. RTS
    " w7 Q6 W% z) H! w3 Z5 l( N% h) L
  451. ;----------------------------------------& @9 j, q2 E( ]4 i; v/ e4 |
  452. Button_Scan:
    9 l8 J- V1 N9 ?3 ^) v7 v( `+ U: p
  453. LDA #$013 T4 b: g0 i0 H- d
  454. STA $4016& H" O: X  ?9 s, [* b" Q- K
  455. LDA #$00* ]. n( _; s8 |5 Z. ~
  456. STA $4016
    2 C" M/ `: F  r
  457. LDY #$08( s; R, R* a4 O& k! Q8 v: Z
  458. Button_Value:7 V! W" X" \8 {; v$ |/ V& b2 x
  459. LDA $4016,X
      F1 P6 \) G  x
  460. STA Button_Status,X
    ( P- z' ]6 p+ P! Q1 l" e# ?5 P- b
  461. LSR3 ?, ]; q/ b- p' N$ c2 B, ]
  462. ORA Button_Status,X' s" b0 o0 O$ A& k# R
  463. LSR6 |3 T$ Z# R8 \& m' d8 v# Y
  464. ROL Button_Keep,X3 n+ q. M. g$ K/ b* f6 v% |, }0 ?9 }
  465. DEY
    * O. x. `5 i0 G. l4 R: q) v
  466. BNE Button_Value5 o* G4 v1 b2 U' B9 _9 B) o
  467. RTS7 j0 W! y, f8 K8 m
  468. 4 Y: T. ]5 Q! J. J9 U0 U2 C
  469. ;==================================================
    * D# n* i: b! Q
  470. ;按键自动按压$ ~+ ~" t& Z+ E' z) s0 j
  471. Button_Auto_Press:6 {* L- x, d) M# a8 A
  472. LDA Button_Keep) v2 x# p! @; H7 P/ B. ?* x
  473. ORA Button_Keep + 1
    * j9 [! v( d+ X* E! u- V/ L
  474. BEQ Button_Auto_Press_End! ]9 w* c" G$ J: o. @+ P+ C
  475. INC Button_Auto_Delay0 D/ ]5 |. z5 t: a$ ]0 U
  476. LDA Button_Auto_Delay1 n& n% V! @7 L: Y6 D! ]5 X
  477. CMP #BUTTON_DELAY_MAX" V, x. O: K7 u+ c
  478. BCC Button_Auto_Press_No_Active
    / H. `- X9 B6 o5 E
  479. LDA Button_Keep
    # ~9 X9 q  N5 q* P, I' O
  480. STA Button_Once
    $ ^# V& }; }7 |4 f
  481. LDA Button_Keep + 1
    ) N8 a6 h" D* k5 ?& T/ S
  482. STA Button_Once + 1
    # y% F7 d/ p% q0 R7 D9 Y
  483. LDA Button_Auto_Delay& [4 z7 y+ S; ]3 z9 B1 ~  j
  484. SEC- R; I' L% \5 O0 ]2 h
  485. SBC #BUTTON_DELAY_SPEED
    9 m& G- ~6 ~' {, \
  486. STA Button_Auto_Delay7 r: g# [9 ?3 x2 a8 E6 k7 p
  487. Button_Auto_Press_No_Active:; C+ L7 S1 t# u
  488. RTS8 S8 [9 B) C+ W5 a2 i$ q7 r
  489. ;----------------------------------------# I( M4 o* g. A; S$ ~
  490. ;未按压按键
    & Y. D$ n% g% Z) t- N4 g4 q
  491. Button_Auto_Press_End:1 ^6 O5 t" z$ d. y
  492. LDA #$00& E: B9 P5 N" ]8 J$ g
  493. STA Button_Auto_Delay6 i# M2 `; z1 t$ F* b
  494. RTS3 h5 ~. s9 U, l6 [( l  i
  495. % A5 S  w8 V8 ?2 j
  496. ;==================================================9 W# [; z( H/ D8 y& y
  497. ;设置PPU写入模式/ [: Z2 b4 p! o2 O
  498. Set_PPU_Mode:( j6 s3 S, \7 x
  499. LDX FC_PPU_Cursor
    0 o% a1 Z) D6 F% q9 z  Z  _: W
  500. STA FC_PPU_Buffer,X6 D, |! l5 z  T* n  Y. j% [
  501. INX
    7 E+ A+ T0 [/ \! _3 `, L: m# Z
  502. STX FC_PPU_Cursor
    ; L: {! p- W" X. r; X" h5 L/ S3 x
  503. RTS: d. g4 V0 s( H

  504. : A4 g6 R% N1 ?2 O
  505. ;==================================================
    ; F" s  t5 ~% _8 Q" ^
  506. ;写入单独一行文本
    ( J  S( C' e% y- X$ k1 q5 f
  507. Set_Select_Addr:) ]* S: g5 j% u; z, N8 e; l
  508. LDX FC_PPU_Cursor' l$ |, i, {4 g3 K# O
  509. LDA FC_Select_Temp: N4 P" H" c! }. E8 x2 Q4 ]- Y* x
  510. ASL
    % G) k7 ~- l4 E6 s# M! x" s! G
  511. TAY
    0 m5 }0 C9 t3 N- r; J* O
  512. INY1 u# k% V# O- l9 Z9 C
  513. LDA Text_PPU_Addr,Y
    , b& h4 y$ P2 i, z4 ]' Y
  514. STA FC_PPU_Buffer,X
    " r; J7 K$ o8 a+ f% }# K1 Z9 P. x
  515. INX
    9 N& c2 E" x9 z# b0 w" H6 S
  516. DEY
    1 P; h* c/ y* x# \6 o" v6 ?
  517. LDA Text_PPU_Addr,Y
    ' B* C% i+ \& Z
  518. STA FC_PPU_Buffer,X/ N3 x. t: {! F( p
  519. INX0 d+ t" d, ?% z3 _9 _: J
  520. STX FC_PPU_Cursor1 x' ~$ P4 V* J- M1 |
  521. RTS
    8 h6 l- ?( F4 F
  522.   M% ^5 p% q; [( l: ]. ~; C  ^
  523. ;==================================================
    0 L9 r( k% m) y' b; s$ s
  524. ;写入单独一行文本
    ( z6 b* Y/ P4 |7 v6 k& W6 u
  525. Set_Select_Data:
    : @  \4 P! w4 f
  526. LDA FC_Select_Temp
    . V; K- H) x) R# Q( h8 Y/ T
  527. CLC2 m! D5 f4 y: M* A$ g3 {$ f3 a" [5 K
  528. ADC FC_Page_Cur$ P/ j) l% a4 Y  d4 w: r1 r5 T  ]: {7 G
  529. ASL5 T3 y! s+ R; C6 L+ o4 E5 }
  530. TAY
    9 {  I- J2 p  m
  531. INY$ M3 V7 w. v+ M7 R, y& D/ i3 F5 z
  532. LDA Text_Data_Addr,Y
    9 Z& j9 A3 L' u/ L- l
  533. STA FC_Data_Port_A_H- r, e! b7 B* U' i/ l9 q( A( ?0 s1 n
  534. DEY; ^8 o, d0 \% i
  535. LDA Text_Data_Addr,Y
    9 L, Y# l! ~0 b8 \
  536. STA FC_Data_Port_A_L
    ' _3 D5 \( u! |' r
  537. RTS# a4 G6 _4 L( b" ^, F4 o

  538. * u* M# |) Z: f% i$ @! ^% V2 V
  539. ;==================================================6 H# H1 Z+ ^! _2 \8 V
  540. ;清除旧文本+ v) t0 \% Z) V$ n9 P
  541. Set_Select_Data_Clean:
    - f' V8 ~/ F0 G3 H% S8 G0 f: w
  542. LDA FC_Select_Temp
    ! s. P5 _2 x( u
  543. CLC6 _/ i$ I# g/ H4 b% \" [
  544. ADC FC_Page_Old+ r9 q4 o. V! C) W9 C
  545. ASL+ H+ |* W( l% Q! R4 M
  546. TAY; ^, b8 K) P* f4 g' V" s
  547. INY
    # V$ @$ n' e3 A
  548. LDA Text_Data_Addr,Y. h$ ~) W3 t/ T9 d2 i; B
  549. STA FC_Data_Port_A_H
    % t( E7 C; f3 M+ ~; Y; w
  550. DEY
    * O% F' [* h; ^  a# F, K; I
  551. LDA Text_Data_Addr,Y
    & z' p8 R& |8 `2 M1 ?
  552. STA FC_Data_Port_A_L
    6 r& d4 n3 q# @6 e. O; R* a7 K: ~
  553. RTS
    9 V9 f7 u/ l$ I5 g% n

  554. 8 N/ ]% h5 J5 e) X
  555. ;==================================================2 Z; _1 S( z. \5 l  U. [
  556. ;写入单独一行文本, l8 N6 J0 g" S. a
  557. PPU_Data_Write_Item:
    5 R+ w% P) r2 I: u% P# v. g# D
  558. LDA FC_Select_Temp* e/ c1 E8 {4 ^- o8 |: F* C
  559. CLC
    9 s# f2 @0 p8 ?9 J! S* R
  560. ADC FC_Page_Cur( p- a. T9 G  ]# v
  561. CMP #FC_ITEM_SUM. }" a- }+ R1 l
  562. BEQ PPU_Data_Write_Item_Set
    ; |- M& _8 a2 p$ Z/ e5 Y
  563. BCS PPU_Data_Write_Item_End( u' [# j' h9 q4 C3 G( k6 C( I7 s
  564. PPU_Data_Write_Item_Set:
    2 \4 c1 R1 R8 R2 {. x7 y. |
  565. LDA #FC_PPU_MODE_CNTL
    + H: V- V) }* v& o
  566. JSR Set_PPU_Mode
    4 C" R# |  z, }/ V/ {- X! j, x. I
  567. JSR Set_Select_Addr
    3 x6 I4 I7 \; r
  568. JSR Set_Select_Data, F+ W3 @) I: R% G
  569. JSR PPU_Data_Write_Line
      Z# o2 P; E3 {! i
  570. PPU_Data_Write_Item_End:
    1 m" v+ y* u: L5 L( ?/ y
  571. RTS# b8 Z$ u7 S; v- d
  572. - b. L+ Y. a. O7 ^- H- k) H; u
  573. ;==================================================  d9 v4 A. d& [+ D
  574. ;清除单独一行文本9 s! O6 H, `% B4 L
  575. PPU_Data_Clean_Item:
    $ R. G. o. J7 N. x1 v% i$ [# t
  576. LDA FC_Select_Temp
    ) ~" `9 z4 h" D
  577. CLC! x* m- c6 P7 h
  578. ADC FC_Page_Old6 G% \9 _8 z. B' O! l
  579. CMP #FC_ITEM_SUM1 ]2 D& F9 @( x8 N* h: R
  580. BEQ PPU_Data_Clean_Item_Set- y5 m( B0 |8 }
  581. BCS PPU_Data_Clean_Item_End9 U5 R3 V$ I9 [- _
  582. PPU_Data_Clean_Item_Set:
      m# S; [) u' ]5 `0 l
  583. LDA #FC_PPU_MODE_CNTC
    7 v* K. P+ G% Q8 {  t* s
  584. JSR Set_PPU_Mode9 {, h# z$ @# K1 j& i
  585. JSR Set_Select_Addr
    8 z0 Y% p7 ]# o/ @' R) Q" f4 t; \
  586. JSR Set_Select_Data_Clean5 i# q4 h9 D, H1 t- N! e
  587. JSR PPU_Data_Clean_Line
    6 o2 a$ Z0 I- ?3 S5 x0 N$ c
  588. PPU_Data_Clean_Item_End:; X* M! e" \1 a8 _
  589. RTS# a% n! r  L% i# T" z+ m
  590.   h% o1 _% p2 t  f& |7 E: T  S4 C( B
  591. ;==================================================# _& M2 d. ^0 z& R
  592. ;页内容写入+ E2 u  u- T6 L, S& w$ ?6 v
  593. PPU_Data_Page_Show:
    + Y) `# X6 C" k  E% s2 B
  594. LDA #FC_PAGE_SIZE
    ' L" g$ q" R- c
  595. STA FC_Page_Item_Count
    : l  x% w, Q% ^
  596. LDA #$00, q2 E) J! N! S( W9 E$ V
  597. STA FC_Page_Item_Buffer
    ) H+ l8 T8 I" Z3 [9 N: h8 g4 X" g
  598. STA FC_Select_Temp
    6 |$ {+ R* t, V; K& N: b. _
  599. PPU_Data_Page_Item_Set:
    & G. B% D. j0 c( f3 {. d( B
  600. JSR PPU_Data_Clean_Item
    4 h" r; P) {! \* f" x# M# L2 T5 n
  601. JSR PPU_Data_Write_Item
    $ {* N, \/ |) y
  602. JSR Function_Status_Clean
    4 p3 c, V8 H4 [& D3 `* Y2 H
  603. JSR Function_Status_Show2 {4 G# t5 q4 V0 x" w! r4 I) G
  604. INC FC_Select_Temp+ j) B/ g( t+ P) U4 b0 b6 B
  605. INC FC_Page_Item_Buffer* j& }8 S/ m$ ]% l
  606. LDA FC_Page_Item_Buffer
    5 D1 T) o4 `  H1 L) ]6 `
  607. CMP #FC_PAGE_BUF_SIZE8 h* V. d  a# D* A: b
  608. BNE PPU_Data_Page_Item_Set_Check
    5 L% ?3 }( ~, ]( h4 j, D; q7 H
  609. JSR NMI_Delay
    8 {5 g0 ~  D/ N+ y" M# Y; E! O
  610. LDA #$00
    9 l1 l/ {+ {* w& T* E
  611. STA FC_Page_Item_Buffer
    2 E) P  t6 X: z& q4 h! O
  612. PPU_Data_Page_Item_Set_Check:% |8 o, o; B$ D
  613. DEC FC_Page_Item_Count
    7 Q0 \( K" h* t7 n  h) X9 J
  614. BNE PPU_Data_Page_Item_Set
      E( E- h" `* y# D8 G  f/ ]
  615. PPU_Data_Page_Show_End_Check:0 [% {3 L3 Q- v
  616. LDA FC_Page_Item_Buffer" L! E# s: u" t* \0 l
  617. BEQ PPU_Data_Page_Show_End' d0 N' h8 e/ h. F4 `. U( f6 b
  618. JSR NMI_Delay* V/ E/ \% l8 u; ^- a
  619. PPU_Data_Page_Show_End:
      [  Z! D% i( t9 P7 c
  620. RTS
    - b: \: n" k) U2 ]  U

  621. ) w3 K/ H& n+ D. G5 [
  622. ;==================================================+ d7 Z1 a" x  }; X( k
  623. ;PPU单行数据写入接口4 O$ F4 x; B+ j- G) r( k$ s( T+ _
  624. PPU_Data_Write_Line:
    , ^, @; k5 N9 ^% b
  625. LDX FC_PPU_Cursor
    : \9 [. \$ U7 S7 s  v. t) V
  626. LDY #$00" |7 Z; p; [. h, i& R( j
  627. LDA (FC_Data_Port_A_L),Y
    + C4 C$ q3 i% B, o* {: K3 _& C
  628. STA FC_PPU_Buffer,X9 d( r) f& R+ V8 b
  629. STA FC_PPU_Data_Cnt& E) }8 |$ M# r# B
  630. INX+ e3 s/ S5 o" i% O# [$ P1 W6 P
  631. STX FC_PPU_Cursor
    9 c+ z  o" L0 y4 f
  632. INY
    + E" e2 [6 h8 E4 r! r+ ]. |- \
  633. PPU_Data_Write_Line_Set:
    : l# M' U  {0 h* l( d
  634. LDA (FC_Data_Port_A_L),Y& m& f' r  d( Y& U% I- Y0 l' u* x8 y' v
  635. TAX5 B) u/ c0 y6 b# q/ ?% F3 R- e
  636. LDA Char_Rom,X % m( \( H5 A5 [! d! l1 u  A
  637. LDX FC_PPU_Cursor: _2 C0 t/ r& [9 T5 E: b! k# k
  638. STA FC_PPU_Buffer,X  U) X$ I$ x0 ^$ R8 `! l+ N2 f
  639. INX  j$ K. W! h& y) d+ Z8 g( O
  640. STX FC_PPU_Cursor5 O( Z1 \" ~% S4 a& P
  641. INY# q( L4 G; N6 R
  642. DEC FC_PPU_Data_Cnt8 e+ l) w0 H4 R3 x$ Z
  643. BNE PPU_Data_Write_Line_Set. G3 ^. P( u$ u. w1 {( J& H. n
  644. STX FC_PPU_Cursor
    $ W8 ?% ^5 S! P4 H! Y$ [+ j7 X9 S, U# Q+ r
  645. RTS9 T7 Y& G3 c, d+ R5 h" h
  646.   [2 }4 y/ N. e
  647. ;==================================================
    , h% G% G5 y) H& M' G5 O# G8 e" |. D
  648. ;PPU单行数据清空接口- y- _: n" a0 ^" D$ Z
  649. PPU_Data_Clean_Line:: U& g: X$ [6 W8 a! t' T7 d9 J
  650. LDX FC_PPU_Cursor$ u4 a* Q! ~, @- [; h6 C! ?' b1 T' R
  651. LDY #$00
    4 y! ^) G+ o7 [/ \
  652. LDA (FC_Data_Port_A_L),Y
    : p, w  \& ?4 k# m( m9 B
  653. STA FC_PPU_Buffer,X) q1 f) z- E% ^2 F3 k
  654. INX
    * k, K# Z4 z4 _. {/ T& M) @2 ~
  655. STX FC_PPU_Cursor
    7 q) P6 Y7 L0 l* l& q$ z7 k
  656. RTS
    + W6 P$ y1 O/ Z" A) o
  657. 2 y. q2 [  }9 A, T, |
  658. ;==================================================
    0 w3 Q( Q0 C  U' f' i
  659. ;更改选择项
    2 f4 ]7 p8 e$ g1 k" n0 }
  660. Change_Select_Item:2 g9 ?1 X* S+ u* T" n1 I
  661. Change_Previous_Page:
    & h, h/ a0 J; L+ ~" m$ e
  662. LDA Button_Once
    . Y' l9 a" i. n
  663. ORA Button_Once + 1
    4 E2 u! k; |' r1 i
  664. AND #$02
      d: R3 ^# K- J2 ?9 g( \1 Y, f
  665. BEQ Change_Next_Page% I# V& Q- }( e& s2 _5 u
  666. JSR Change_To_Previous_Page
    # l- ?. G6 S. s) T7 ~$ Z
  667. Change_Next_Page:
    . g3 l, C' d9 u: I) ^, [7 s
  668. LDA Button_Once
    ) W1 l- p: y4 t# u/ c
  669. ORA Button_Once + 1
      m6 R0 N7 d. h8 H+ ]
  670. AND #$01* J/ K1 J4 V) ^5 U8 ^; \
  671. BEQ Change_Previous_Item- g8 @7 ]+ w. A& Z% p: ^% P
  672. JSR Change_To_Next_Page/ c/ k& B! U- s. v% B
  673. Change_Previous_Item:
    3 F2 t% ]6 g& L7 ?
  674. LDA Button_Once
    0 d$ E2 ~9 H! C; S
  675. ORA Button_Once + 1
    5 h1 U. O7 @0 B5 V5 Y- l
  676. AND #$08
    9 L+ m) j/ M$ W( h1 P# Y5 _
  677. BEQ Change_Next_Item: d0 @/ G' D7 E
  678. JSR Change_To_Previous_Item
    2 O' t  X' n% _& \9 ^% D
  679. Change_Next_Item:
    ; p/ }! h  @0 l  G  b- ]8 l
  680. LDA Button_Once
    ' l- k, ]4 o: Q6 S
  681. ORA Button_Once + 1( ^$ R7 ~0 K% V2 w2 r3 @
  682. .IF FC_IS_DOUBLE_PLAYERS9 e7 d8 I3 |& {. d" Z! c
  683. AND #$04
    , B( W8 V8 U; A. Q4 f( d9 h! i% d# ^
  684. .ELSE
    - Y9 H/ g" u: X2 q4 ?. L
  685. AND #$247 @7 f* u' _5 J, ]. m: i- y
  686. .ENDIF
    % H2 O# o7 H/ _
  687. BEQ Change_Select_Item_End1 ~4 u; X9 D- P* D+ I  U1 j
  688. JSR Change_To_Next_Item$ m5 v, A5 b% d1 C7 F8 g+ G/ G
  689. Change_Select_Item_End:: r& t' T8 E; i) k- p/ _# l" S
  690. RTS
    ! @. e; v$ p  r, o. D

  691. $ z6 T/ U- v  v; p) T; Q
  692. ;==================================================2 U+ T" k+ p3 P/ S7 }
  693. ;切换到上一个选项
    , [+ u' ?6 S8 v% h" P+ S
  694. Change_To_Previous_Item:
    / E' B" @1 V; a% A) ]9 o
  695. LDA FC_Select_Index6 n& d0 \0 ?2 \
  696. BNE Change_To_Previous_Item_Set( i4 u/ }6 P/ i
  697. ;----------------------------------------+ a# I* q' ?" d- p
  698. ;切换到末页最后一项" f9 ~! {! F% ]! E' y- Q6 O
  699. Change_To_Previous_Item_Set_Last_Page:+ m) l7 x6 @8 M% \; {1 Y, m
  700. JSR Record_Last_Page_Index8 Q0 B9 V% l4 F
  701. LDA #FC_ITEM_SUM* V. J7 r+ \( Y& v
  702. STA FC_Select_Index" k4 H* P6 ^3 r! F
  703. LDA #FC_PAGE_MAX
    6 A7 j  B8 y3 g$ y0 d; _
  704. STA FC_Page_Cur
    ' Z0 r( O- r( W" u
  705. JSR Update_Page_Content
    ( B+ y: l- ]3 w4 D
  706. RTS
    # ^, \1 o, r9 j6 g" z
  707. ;----------------------------------------3 v. p$ p1 w: r- K# s- O6 c2 J4 ~
  708. ;切换到上一个0 I, v* y* J) _8 P! k
  709. Change_To_Previous_Item_Set:# I' c5 ?' p# V, |6 t; I- N
  710. ;检查是否需要换页2 u) |6 o* P2 x$ J
  711. LDA FC_Select_Index
    * b" m; ~3 P! e' t% v& N* `
  712. CMP FC_Page_Cur
    5 ?1 h+ T, S, D; W
  713. BNE Change_To_Previous_Item_Set_No_Page  }; s2 M: ]/ H+ Z0 }
  714. ;----------------------------------------  [* {. G, R+ ?$ Z8 ?. R
  715. ;切换到上一个(需换页)
    ; c1 K) S  l0 H; `+ v1 F; P
  716. Change_To_Previous_Item_Set_Page:
    & K: t: a7 V) G+ U  q# m
  717. JSR Record_Last_Page_Index0 j& S  X, H/ q; a6 k0 D1 E! F3 d
  718. LDA FC_Page_Cur
    ; `# `! F+ \3 J
  719. SEC
    , E' L, _6 D, t7 Z: m& T
  720. SBC #FC_PAGE_SIZE
    5 e; u! A2 v0 T6 b2 S3 {
  721. STA FC_Page_Cur
    2 A' g. C" ~. |% R5 I
  722. DEC FC_Select_Index
    % G* i/ E) F/ l. }6 @1 k
  723. JSR Update_Page_Content% [2 c+ t/ Y7 |; `/ n
  724. RTS
    0 o, `) ^/ P" B/ X( |1 d( {
  725. ;----------------------------------------. x/ Q# S/ c2 \. X) \$ a  L
  726. ;切换到上一个(无换页)# ?5 V. u, r6 U; K& v/ ~, E
  727. Change_To_Previous_Item_Set_No_Page:
    9 Y1 E6 S- a; _
  728. DEC FC_Select_Index; q  z! \3 k% K' ~  Q
  729. RTS
    ! k% Z8 l: h" P/ ?+ \2 f

  730. 5 v$ W& u, J, e8 ~4 u% t; D
  731. ;==================================================
    ( ^; x* b0 u! k/ B
  732. ;切换到下一个选项7 w. N% [  i0 m
  733. Change_To_Next_Item:* Q# z3 g% L& N4 g$ h3 x$ L
  734. LDA FC_Select_Index& c8 V! F/ Z- m3 ]8 Z" O  `. x
  735. CMP #FC_ITEM_SUM: p' V+ U2 @7 N: E; q  V3 H
  736. BNE Change_To_Next_Item_Set
    9 M8 ^, ~2 K6 |. a0 R3 `
  737. ;----------------------------------------- U1 |7 a# H6 L/ X2 r7 C, y
  738. ;切换到起始页第一个
    2 e5 L: U$ U1 G/ V/ E* }
  739. Change_To_Next_Item_Set_Begin_Page:* _( O! J* {! {2 I: |$ \' l
  740. JSR Record_Last_Page_Index
    . ^8 }: C: w; f  q# W
  741. LDA #$00% G' T3 I) a: e8 L' Q
  742. STA FC_Select_Index- p" x& @- d) |# W: v+ B5 i- X5 y
  743. STA FC_Page_Cur
    4 h  O& t" E; y0 X2 ?/ L* V& T
  744. JSR Update_Page_Content1 j6 W1 r( u+ u& T0 U
  745. RTS
      K; ~: P2 E" m$ A: H, R6 S; l7 T+ h
  746. ;----------------------------------------
    " g# g% I/ s/ `- X# I, H; p
  747. ;切换到下一个) @( `8 J7 z* u  M- I
  748. Change_To_Next_Item_Set:: N8 O# {/ T  {
  749. INC FC_Select_Index% ], y# C* g) y/ v" P$ ~
  750. LDA FC_Page_Cur
    , j, v/ k. P4 `
  751. CLC
    5 [6 p1 E# N. x& q8 }
  752. ADC #FC_PAGE_SIZE
    : C0 @' ^/ M$ z  w! [
  753. CMP FC_Select_Index
    8 m& C' _' ^, c6 c8 ]8 Z6 e
  754. BNE Change_To_Next_Item_Set_End
    6 @8 X2 C6 q. |0 d+ Y: x: e+ P
  755. ;----------------------------------------
    0 G/ W" D; {& j
  756. ;切换到下一个(需换页)- F; {! ~- M& m: }- _% E
  757. Change_To_Next_Item_Set_Page1 S: |- ^( j$ o
  758. JSR Record_Last_Page_Index; X; K: ]4 y9 q  z, l. t9 ?
  759. LDA FC_Page_Cur$ y" m, Q( O1 E& T) {1 Y* M8 X
  760. CLC
    % Y4 O, J. T$ `* v. q- s5 @
  761. ADC #FC_PAGE_SIZE
    . r) r8 k# q) q2 e# ~( X* r
  762. STA FC_Page_Cur
    " Q- c3 t$ s% X7 v0 H! e; Z. y% r
  763. JSR Update_Page_Content
    " a0 q; C- a8 L5 j+ {
  764. Change_To_Next_Item_Set_End:
    9 a' b# `. T  \% ^/ G. @- G
  765. RTS
    + f" N7 G& x$ x- }  ]7 B: U5 R

  766. ) D" j' i. ]1 X
  767. ;==================================================4 A$ B# i7 R9 o9 K% E0 d
  768. ;切换到上一页
    % G% v; H6 G5 f/ [3 E3 T; S% ^. \) G
  769. Change_To_Previous_Page:
    4 S* p+ h3 m/ N
  770. LDA FC_Page_Cur& i5 ~9 i5 f6 ~  x& L; w" T
  771. BEQ Change_To_Previous_Page_Set_Last_Page& A: F+ ~9 ?6 p
  772. JSR Record_Last_Page_Index
    9 {( f/ r- r: y. N* p
  773. LDA FC_Page_Cur
    ; j7 [* N5 K$ \/ P4 C4 V% J# @
  774. SEC. r1 J1 S- D- {! O& U! Z+ c
  775. SBC #FC_PAGE_SIZE
    6 Y# X+ V3 g/ Y7 i8 _; v- n& Y- f
  776. STA FC_Page_Cur8 h) M  |- f5 _8 |* U' J# A
  777. LDA FC_Select_Index) s8 o; I9 m: [0 J' H7 H- R+ d2 \  g1 F
  778. SEC5 j: U( S1 g: Z0 v8 M. n- r# I
  779. SBC #FC_PAGE_SIZE) J) f/ s2 ~1 D' F) b" T
  780. STA FC_Select_Index
    % Q+ `6 M( J( r  @& m7 g
  781. JSR Update_Page_Content) ?- }7 Y" S5 m% ?3 X% ], h) ]
  782. Change_Select_Last_Page_End:
    6 i) l) i/ P. s/ T& y
  783. RTS4 T$ C" O; T- C# n
  784. ;----------------------------------------/ v0 F5 k* C8 y4 E, \7 x
  785. ;切换到最后一页
    * H7 s, X1 x' o9 L0 \) o
  786. Change_To_Previous_Page_Set_Last_Page:7 j. h/ \# B' P! y3 {9 [$ A0 p
  787. LDA #FC_PAGE_MAX
    7 l# k4 `+ W3 e
  788. BEQ Change_To_Previous_Page_Set_Begin_Item
    $ U' d* m, R+ N
  789. JSR Record_Last_Page_Index5 y4 i8 ]* _# A
  790. LDA FC_Select_Index( f6 V$ |$ g; h0 u6 C: N- K: A
  791. SEC
    8 O" ^- O' l7 S
  792. SBC FC_Page_Cur
    - V, `( L. ?' ]4 q5 g
  793. CLC1 T: b$ U+ z" O- T' I2 ^) p0 D
  794. ADC #FC_PAGE_MAX& k- z! j7 D6 z3 Q
  795. STA FC_Select_Index
    7 @& a2 L$ k! e0 y& n
  796. LDA #FC_PAGE_MAX
    2 H) z6 U# [  k, V% i9 Y% z' E( n/ W
  797. STA FC_Page_Cur% i2 H% n9 d; R$ e1 P% x
  798. LDA FC_Select_Index0 i! ?- `7 h% M6 q6 B- g
  799. CMP #FC_ITEM_SUM
    1 {; t* ?- A0 K$ Z) n& i3 `9 n
  800. BCC Change_To_Previous_Page_Set_Last_Page_End
    ( v3 S! n' e9 H/ h  e
  801. ;----------------------------------------& `6 [+ q3 C, T0 j7 O5 j0 t
  802. ;切换到最后一项
    * W8 n# |/ p/ F
  803. Change_To_Previous_Page_Set_Last_Item
    : f( r2 j# W+ S8 \5 s8 a' Y
  804. LDA #FC_ITEM_SUM
    & R8 p  C$ d, F. P/ f/ {. J
  805. STA FC_Select_Index
    7 P; J8 V/ R3 s0 m! r# a' w
  806. Change_To_Previous_Page_Set_Last_Page_End:
    1 M: y7 T- H/ N* |* x" I0 H3 B
  807. JSR Update_Page_Content
    4 r! a  z" e% R9 g! _' R8 {! a2 {
  808. RTS4 i& X- k9 c2 S- \
  809. ;----------------------------------------
    0 L2 p0 K' l8 V- h
  810. ;切换到起始项(最大页只有一页时)0 |1 a& W# W, h+ J! `3 E' @( p
  811. Change_To_Previous_Page_Set_Begin_Item:
    % f' H  K7 Q! S! x  @. a6 s
  812. LDA #$00  A, ^% j: O( m  `" N
  813. STA FC_Select_Index+ z) `$ q1 ]  `9 {7 u8 |+ s6 f: m
  814. RTS% o% ~' q3 e3 z

  815. / m! x# f7 W+ K8 F5 N/ J$ h4 H& t
  816. ;==================================================
    " F/ X# T4 I: l  ~
  817. ;切换到下一页
    + I0 B, G1 S8 n+ ]5 R$ r* f
  818. Change_To_Next_Page:2 p. [5 ]$ y2 `2 y( A2 N2 `4 Y
  819. LDA #FC_PAGE_MAX
    9 l9 v4 y/ }+ `5 p$ \  N7 L
  820. BEQ Change_To_Next_Page_Set_Last_Item1 w' m& k& v& V4 p/ _& Z* N
  821. LDA FC_Page_Cur  |1 a  i) K; u- `  W2 r
  822. CMP #FC_PAGE_MAX8 |; }: `5 G8 |/ J1 t5 l. Z
  823. BEQ Change_To_Next_Page_Set_Begin_Page/ Q( E. m* W. P6 S0 ?' u0 N
  824. ;----------------------------------------/ M3 W- v7 V3 l5 \  I  p3 C- j
  825. ;切换到下一页; I8 _* ~* s/ H! q! H7 R% Q
  826. Change_To_Next_Page_Set:  b& R- |9 m6 Z  d# V
  827. JSR Record_Last_Page_Index+ N1 k  A% {+ m2 i( K4 z( k- W# `
  828. LDA FC_Page_Cur. L& ^+ Q+ p0 j- p. p
  829. CLC5 U7 g9 ?5 J& E$ h+ a
  830. ADC #FC_PAGE_SIZE8 k. Y' @" f; Z
  831. STA FC_Page_Cur  P3 ~# L' A$ N1 w; j. j
  832. LDA FC_Select_Index
    7 y! P5 Q: h8 W
  833. CLC8 M" b8 }5 R7 M  e" z6 B
  834. ADC #FC_PAGE_SIZE
    3 @0 [9 [; |2 s
  835. STA FC_Select_Index
    # ^% w1 r# ]% Q- s
  836. LDA FC_Select_Index
    / }- u+ j$ l( M* b
  837. CMP #FC_ITEM_SUM
      H. |4 q# W3 O5 Q6 F- s
  838. BCC Change_To_Next_Page_Set_End" a  c' K" C& |" j$ s
  839. ;----------------------------------------
    0 f5 _: {! [% b9 t# u% N8 B9 _6 O* L
  840. ;切换到最后一项
    2 Z, M$ u  A: t
  841. LDA #FC_ITEM_SUM4 b* D* D3 A% M4 x1 k) A) m7 N
  842. STA FC_Select_Index
    : M  l+ d7 N% h
  843. Change_To_Next_Page_Set_End:: F8 x4 i* Q1 B  {4 q3 T5 t
  844. JSR Update_Page_Content
    : F- E  ~, M% ^: }
  845. RTS; }; t+ Y9 `; C; ]) T
  846. ;----------------------------------------
      t4 c/ _. ?! }  X0 N3 J
  847. ;切换到起始页8 _5 I1 j4 a* ?
  848. Change_To_Next_Page_Set_Begin_Page:' W+ M( k6 k6 b" |7 f9 ]
  849. JSR Record_Last_Page_Index
    ; W, h0 I$ K; u1 S
  850. LDA FC_Select_Index
    + t1 Y: x) X' \( V: |# [
  851. SEC' Q; a4 }4 H# B7 B, e* D' m3 O
  852. SBC FC_Page_Cur$ A. |$ i4 X2 f" d1 h, a
  853. STA FC_Select_Index3 Z0 C/ K5 A& ~
  854. LDA #$00# r) Y/ a3 K! W
  855. STA FC_Page_Cur
    6 p8 R" w. i8 r
  856. JSR Update_Page_Content' b3 q& d5 m) e% L+ ~: ^
  857. RTS
    + O( N2 \4 V  T6 z0 ]
  858. ;----------------------------------------; o$ [; ^, W9 |4 f$ C, S
  859. ;切换到最后一项(最大页只有一页时)' q0 I9 ~/ \9 I" \3 q
  860. Change_To_Next_Page_Set_Last_Item:
    7 [2 J) b5 A6 _2 d3 P; f. D
  861. LDA #FC_ITEM_SUM/ D" m  I; W) P& P- `' g& A& s
  862. STA FC_Select_Index
    , X  o, E1 `: T% N( k/ D4 Z' R
  863. JSR Update_Page_Content
    * f1 e* P) t0 C! e$ K$ U
  864. RTS( m4 ~. o4 [. S5 E- N
  865. - {: j" n$ W- q# R6 J" ~: j
  866. ;==================================================* Y; v. v: b/ o9 K& B
  867. ;更新页面内容% A! i( q3 @; z: _/ m* @
  868. Update_Page_Content:
    7 Y: W% Y) r4 z, m3 c( [, H
  869. LDA FC_Page_Cur. B, W* j6 T5 l) U; G
  870. CMP FC_Page_Old, r* ?: l0 }, H9 a5 S* W
  871. BEQ Change_Update_Page_End. R. T6 X( t6 Y+ D
  872. JSR PPU_Data_Page_Show
    . T' |$ w1 R9 e
  873. Change_Update_Page_End:
    ; q, ~4 ?1 ~: r# G7 n
  874. RTS" ^% o0 n0 W% g4 W; Y
  875. $ z& r. ]$ z. I2 h
  876. ;==================================================
    ' }6 J4 v7 \  {; a6 w, c8 P
  877. ;记录上次页索引
    8 n. z7 {1 q) {9 _0 Z8 _
  878. Record_Last_Page_Index
    / g8 u3 m: |4 E3 y
  879. LDA FC_Page_Cur
    4 Q6 @2 `3 ~0 r* p
  880. STA FC_Page_Old
    4 b2 z% V5 C) J0 \4 Y" Q% e
  881. RTS- k% r1 r. F/ L1 W; ?7 H7 q
  882. 1 Q' j. @. [3 W$ e/ Y7 A. @  R
  883. ;==================================================
    # z  S( d0 u8 W- n6 R/ K7 B
  884. ;显示当前选择项光标
    3 I3 S: H8 s3 q6 V$ ~
  885. Show_Select_Cursor:4 N7 {$ r2 a7 o% \4 {4 K$ g
  886. LDA FC_Select_Index4 ~/ F8 ~5 t2 T8 f- s" I9 u
  887. SEC
    # h' |  }* o. u! A8 r9 \
  888. SBC FC_Page_Cur2 k/ n4 U, k5 K: [& p* d3 p( T4 ^: `. k
  889. ASL
    + q. n1 j2 N$ t4 Y( F& f; ?
  890. TAY: O! \; Z! E% s4 @
  891. INY
    * m1 \# N1 l$ f" u9 O
  892. LDA Text_PPU_Addr,Y
    * E' R  u5 g( V1 `, {3 u% C
  893. AND #$034 z8 A8 [* N  q0 x  c' x$ d
  894. STA FC_Cursor_Addr_H
    8 C& e2 G+ I( K
  895. INX) Z' Q  M1 P, L3 h5 Q+ b+ e& N+ l6 T. f/ F
  896. DEY
    7 \9 ^( ^2 a/ ]3 l
  897. LDA Text_PPU_Addr,Y
    * T8 z( i- ~6 g* [6 D+ N6 D
  898. STA FC_Cursor_Addr_L
    3 t7 M8 n. s$ K& [0 e% d) J
  899. ;----------------------------------------' D, W! T7 c- c$ N
  900. ;计算光标X坐标
    ; M/ d# e. e2 o$ t! n4 R' m  h' D* [
  901. Show_Select_Cursor_Set_X:
    8 R# d0 n0 W6 L$ a5 B5 ?' m- o5 ?
  902. LDA FC_Cursor_Addr_L
    6 R' `" p* Q  H, l2 L; T9 v' j
  903. AND #$1F
      Y6 q" |0 c# d" O0 U  H9 v4 ?
  904. ASL
    " I* c- ?6 i" a7 n# f1 I# Q
  905. ASL
    5 K2 v% _: e. q- D( g0 j
  906. ASL( C$ ~1 k& A4 C/ G2 Q
  907. STA FC_Cursor_X
    . H) b- J/ P% P% r  p$ ?6 {
  908. LDA FC_Cursor_Addr_L
    5 }$ j# Q% V) N2 N% D/ B
  909. AND #$E0
    3 J/ {( A% h6 N
  910. STA FC_Cursor_Addr_L
      J8 F* c; E" D3 J
  911. ;----------------------------------------9 T" \0 m1 ~2 E, h5 ~
  912. ;计算光标Y坐标, a4 U! K8 r6 f3 A
  913. Show_Select_Cursor_Set_Y:. b, \( i9 X) t3 H
  914. LDX #$05
    5 A4 `: d# D. n+ @. U; X! _1 @
  915. ROR FC_Cursor_Addr_H; J& X& A( n3 g' W  Q6 k( ~& q
  916. ROR FC_Cursor_Addr_L. j; I- z4 W' q9 j. [% @
  917. ROR FC_Cursor_Addr_H' N/ R7 y6 z0 A9 B  i  `
  918. ROR FC_Cursor_Addr_L5 f2 q% K8 D7 O
  919. LDA FC_Cursor_Addr_L, F( N* @3 F7 o9 T( V* E
  920. STA FC_Cursor_Y  J0 M" P8 {- P# F5 S
  921. ;----------------------------------------% C. M7 u6 M& y% s0 j5 g  c% m0 D
  922. ;写入光标- r( x5 m3 W  A7 |7 W# u$ {) w& N
  923. Show_Select_Cursor_Set:
    0 ]/ x; K9 f5 R$ D
  924. LDA #$00
    5 M4 ^) X! Q. d' Q
  925. STA $20039 D' f/ _, E8 u9 R* F' d
  926. LDA FC_Cursor_Y" J' n6 m- t) N& ?, r! x
  927. SEC
    ! D/ R2 e. U9 [
  928. SBC #FC_CURSOR_OFFSET_Y
    : ~* p. i% [- u/ Y
  929. STA $2004* O1 ?4 P( A) ^5 E! w8 Y. _6 h
  930. LDA #FC_CURSOR_TILE
    + N9 {) T- z' O1 p1 T
  931. STA $2004
    0 w1 T# Y6 R- S6 Y4 B; A# d) R
  932. LDA #$00# W/ Q# @$ e" v( A" k
  933. STA $2004
    ; Z8 ]: _$ h) k0 T2 }: Q" X
  934. LDA FC_Cursor_X
    ; X" z+ Q( b$ G$ x
  935. SEC7 D8 @% {$ z3 F
  936. SBC #FC_CURSOR_OFFSET_X
    4 \) s7 U9 Y+ u8 q) _* [
  937. STA $2004; T: |$ z6 r% T% D( W0 t3 v
  938. RTS+ N8 k$ O5 S, k& O9 g

  939. . i; W0 o/ H1 a* y/ W
  940. ;==================================================
    8 a- x0 K& M4 M+ P# Q
  941. ;切换功能0 _) Z. @% B/ Q2 p6 k
  942. Change_Function:. C" `1 W8 ]. u% \
  943. ;----------------------------------------3 ]! R. G; ^! X  K
  944. ;开启功能A
    ! f7 @8 h1 p+ s3 l( p' ]9 f, C
  945. Change_Function_On_A:
    . I7 o2 I/ j, D( ^" v5 `
  946. LDA Button_Once8 X0 O' W: |2 D
  947. CMP #$404 U# M$ K8 W6 U5 l, _5 M" Q% V
  948. BNE Change_Function_On_B6 N: m/ R% w* t( _+ G/ l
  949. JSR Change_Function_To_On_A. s; O  o6 _/ k6 ]! b' C' K
  950. JSR Function_Status_Update
      }( y4 R4 S' z
  951. ;----------------------------------------
    , i! R% {& A) Z/ a' `
  952. ;关闭功能B% ^! T. z: {; m* y) z
  953. Change_Function_On_B:: R' E4 k: p# a$ ]8 a
  954. .IF FC_IS_DOUBLE_PLAYERS; G' U0 f3 J/ k3 F4 P
  955. LDA Button_Once + 1
    " s( J- H2 ^: H* @. }
  956. CMP #$40
    2 f5 g' U; v- w! D. [" |, S
  957. BNE Change_Function_Off_A: [5 {3 t2 ~# r: Y/ D+ t. _
  958. JSR Change_Function_To_On_B
    ) d5 D. p6 z  ?& ~+ t1 C0 U9 N
  959. JSR Function_Status_Update( n* U: G- j, I
  960. .ENDIF
    : L' \  B9 D6 g, u$ S' V- a
  961. ;----------------------------------------
    ' C# d  x# U! I, g
  962. ;关闭功能A
    * R# K+ b. s* k3 B
  963. Change_Function_Off_A:
    " g" y; a  B: B, P
  964. LDA Button_Once0 [. f; [! @4 y7 g
  965. CMP #$80
    0 c/ h+ P+ _* d' C) j- J
  966. BNE Change_Function_Off_B3 m: B& R! [; [" b% u. R
  967. JSR Change_Function_To_Off_A" {2 {* W: W  ~, {
  968. JSR Function_Status_Update
    ) T- s% B( @  G  n1 K8 l: e8 H$ w/ i8 R
  969. ;----------------------------------------
    * N( j( o& N9 e3 c6 S* {* M
  970. ;关闭功能B) @- Q. N0 ~6 V9 X* ^  B3 o
  971. Change_Function_Off_B:$ q) Y3 }# i$ F1 A
  972. .IF FC_IS_DOUBLE_PLAYERS
    % a7 W% @2 w6 A" ?: Z% H3 U
  973. LDA Button_Once + 10 U/ w. `/ a$ d6 \* s9 k
  974. CMP #$80
    * B3 P( l, M; Y# [) H3 t8 [1 D
  975. BNE Change_Function_Swap
    # A6 j6 b0 @: ?- _3 n
  976. JSR Change_Function_To_Off_B
    8 R1 t" M) X% v6 F
  977. JSR Function_Status_Update
      u/ G" I. j# g) ^8 W
  978. .ENDIF8 l. n0 Y5 @3 d- v" c
  979. ;==================================================: p8 l/ i0 J& b- O
  980. ;交换开关
    + l: g/ h+ i  H. y; K: X. h
  981. Change_Function_Swap:
    8 s1 `( r6 }8 K0 s7 Z6 s; Z/ U
  982. .IF FC_IS_DOUBLE_PLAYERS
    * b  l2 F) @& d; h8 a
  983. LDA Button_Once. r4 @. r4 t7 L# R; O" S6 _
  984. ORA Button_Once + 1" Q* p* V+ e) _0 K
  985. CMP #$20
    * M& o6 Q: d: ]  l, u
  986. BNE Change_Function_End9 F% V% o  D) w6 T5 s8 \# O
  987. JSR Change_Function_To_Swap& }# i7 h7 z8 `* D" k4 E
  988. JSR Function_Status_Update' {3 k* ^) X% ?' n! k' D0 c) k. z
  989. .ENDIF8 C8 {4 h( L0 ^. \' L
  990. Change_Function_End:
    0 t5 P' X9 f1 f1 z! |
  991. RTS" C/ B$ L, _6 d6 |, ^$ C

  992. 1 N3 m& ]) M1 T& N* g
  993. ;==================================================) x+ F- E, W2 A. g/ y" U" o
  994. ;交换开关状态
    2 D( a+ v- f6 B4 k
  995. Change_Function_To_Swap:
    5 f6 O! G7 g' A- _8 M
  996. .IF FC_IS_DOUBLE_PLAYERS
    5 X* r. \+ ]8 B( I, J! M2 C, }
  997. LDA FC_Select_Index
    1 e1 W, V" i( s/ Z6 W1 D- t! @1 Q
  998. SEC! I& _# d+ k  U" m% `
  999. SBC FC_Page_Cur
    % b# {. V* @: Z
  1000. STA FC_Select_Temp
    7 z. G3 D5 O! m6 J/ I8 ?, s
  1001. JSR Set_Function_Port
    8 G1 b6 A' ~2 o1 P5 w6 k
  1002. LDY #$00! C, [6 F  [6 @7 ^. w7 P; J
  1003. LDX FC_Select_Index; X% v8 E& G" t2 S5 d8 X
  1004. LDA (FC_Data_Port_A_L),Y
    % `: |, d9 q7 M( V* w  W1 d# M
  1005. EOR (FC_Data_Port_B_L),Y
    6 t8 i- q3 V3 R! G: k; v$ ~
  1006. AND Function_Check,X
    : f- |) w) B0 L' b8 B
  1007. BEQ Change_Function_To_Swap_End/ A; g' N! F+ [2 J) N+ \8 ?
  1008. LDA (FC_Data_Port_A_L),Y
    2 E- l+ y6 f$ F! N& o& S7 w
  1009. EOR Function_Check,X$ @" e# A5 s/ R# r" u2 ~
  1010. STA (FC_Data_Port_A_L),Y
    $ _* s# D7 p6 a
  1011. LDA (FC_Data_Port_B_L),Y
    2 N9 O2 y' n( E+ l  X# y: w
  1012. EOR Function_Check,X# I4 n- r9 U: ]; l1 {+ P4 p# F, M$ p% [
  1013. STA (FC_Data_Port_B_L),Y" c- {/ c* z+ ~8 g" I
  1014. Change_Function_To_Swap_End:) ]& X* ~  w0 o
  1015. RTS
    5 |4 n: Z7 G  O6 A: f' t
  1016. .ENDIF
    - f1 t) N; G( B. u" l3 f9 ]9 q
  1017. & O& J9 V- |4 V" ^* b1 h! I

  1018. 1 ~" x& k: b' J% c
  1019. ;==================================================
    : u. z( n' t% T: H+ W8 E0 l
  1020. ;更新功能状态
    & ~( K" n6 u  w/ D" q5 l4 P) ?
  1021. Function_Status_Update:6 j% W/ U1 H0 a8 @. T+ F% J
  1022. LDA FC_Select_Index
    5 k9 W! x+ x3 b+ ~9 d
  1023. SEC
    1 G& m# L- w$ U: Z! t; m
  1024. SBC FC_Page_Cur" y% P6 ~- R( j5 X. U
  1025. STA FC_Select_Temp! Y# W4 {! X) M
  1026. JSR Function_Status_Show
    " m6 O9 ?( W- M9 k# @! u: \* F
  1027. RTS
    ( _  `8 l' e1 o  d
  1028.   {  p; d! C9 F- W: D: w+ X( N
  1029. ;==================================================
    - T; b! }. E) _7 C6 ?5 e4 H. {( }
  1030. ;设置功能地址端口$ i/ f3 I- L4 T, T# E' _- N
  1031. Set_Function_Port:
    : {5 l8 K- X* I' Q" m+ `6 K8 N
  1032. LDA FC_Select_Temp1 w+ F5 i% ^3 [& I6 L# V
  1033. CLC
    - P( B* v3 ^5 K1 X
  1034. ADC FC_Page_Cur
    : Z/ n9 F! C' |! A3 `8 f
  1035. ASL
    . F: b2 i0 r( q
  1036. TAY" h2 z6 Y( p' \6 {7 f( c8 F
  1037. INY0 i! `  H& K: v3 |. A# o' I
  1038. LDA Function_Addr_A,Y5 e& D" k. R7 m+ F
  1039. STA FC_Data_Port_A_H
    ( w" b' {) \, A5 `$ e
  1040. .IF FC_IS_DOUBLE_PLAYERS7 S. N( @1 o) H5 D+ n4 L
  1041. LDA Function_Addr_B,Y* n8 H$ E9 v0 M; Z6 n% w
  1042. STA FC_Data_Port_B_H
    # {* O$ _. v% }5 r
  1043. .ENDIF
    2 ^5 b* E0 s9 y& _9 h  o, U
  1044. DEY+ A; x; d4 n: L8 {: Q
  1045. LDA Function_Addr_A,Y7 p# F5 d# p: w2 V- c
  1046. STA FC_Data_Port_A_L# h8 g4 @7 {( q' |1 d. p
  1047. .IF FC_IS_DOUBLE_PLAYERS
    + v9 E3 Z. j! K0 Z; d& `" J
  1048. LDA Function_Addr_B,Y
    + j( d3 ~/ y5 O8 z
  1049. STA FC_Data_Port_B_L
      W5 o1 s/ V+ U- t; ^" R7 e9 \
  1050. .ENDIF/ U+ _2 U( F% m6 J6 p9 M8 W+ V7 s; O
  1051. RTS, j/ d2 y1 \3 C' w  y; o
  1052. - f% b; r7 p# |
  1053. ;==================================================' X2 X- x* ]: ]5 b6 L
  1054. ;设置功能临时索引5 g" E* L4 ~; ^( s$ z
  1055. Set_Function_Temp_Index:
    - e+ [" R% P  I# W: o6 G
  1056. LDA FC_Select_Index; G. i2 |: P; E! S
  1057. SEC
    $ k5 h+ O, w; k
  1058. SBC FC_Page_Cur
    # h+ g7 P  P' a0 t& P# c
  1059. STA FC_Select_Temp
    9 I6 p9 @+ A% N* `
  1060. RTS
    3 H: @, D: o* A0 H
  1061. # s! \+ x: S' T3 X# X
  1062. ;==================================================- l- i; y1 ]/ j/ L- Q
  1063. ;开启功能A
    - w+ e9 f1 t! Q) q; J
  1064. Change_Function_To_On_A:
    + Z/ d: M7 ]& x8 u/ E/ l4 q0 T% Z
  1065. JSR Set_Function_Temp_Index
    ( e9 `; @& q3 [" |3 \# X3 a
  1066. JSR Set_Function_Port0 Q0 D9 k. A" V4 `0 X, M% e- h8 ^* o; ?
  1067. LDX FC_Select_Index- d( n0 T  J0 ~, D
  1068. LDY #$00
    * F3 G6 P. W8 t- t4 A& o
  1069. LDA (FC_Data_Port_A_L),Y
    6 c' a" j6 {& S, [- h
  1070. ORA Function_Check,X( T: G' _! f& t# H" A' \* A
  1071. STA (FC_Data_Port_A_L),Y
    * ~+ A9 m4 ^; U- u4 ]$ \/ s
  1072. RTS
    ( H* l7 N& w  |" F) e
  1073. ;----------------------------------------
    ) R! T1 K8 M5 K$ m# b
  1074. ;开启功能B# O7 z/ \7 z  q+ Q# ~" j6 V7 s
  1075. .IF FC_IS_DOUBLE_PLAYERS* k2 \* m0 R2 q/ R, }
  1076. Change_Function_To_On_B:
    : I! k! q3 F+ M$ _* y
  1077. JSR Set_Function_Temp_Index6 \1 b' X3 k( Z+ z0 b' L) |2 |( f. C
  1078. JSR Set_Function_Port
    5 r" `# R& g% g1 }$ U! R  K+ R8 c
  1079. LDX FC_Select_Index
    # }8 \2 D7 |) Q. H# p# X) |
  1080. LDY #$00
    ' r' t4 ~( y1 `  p7 U2 G9 N
  1081. LDA (FC_Data_Port_B_L),Y
    % t# t3 L6 C3 Z- V8 f/ B
  1082. ORA Function_Check,X
    9 C2 Q3 V5 ^3 b& w* B& u
  1083. STA (FC_Data_Port_B_L),Y5 K, }2 o0 _" S# z; W, x
  1084. RTS
    & p! x+ |0 g* r- }# ^( i
  1085. .ENDIF, W% {/ @6 M$ }8 l$ V
  1086. ;----------------------------------------$ y/ l. G" C$ G( l/ D
  1087. ;关闭功能A1 |- `  ^9 J6 g; E7 \
  1088. Change_Function_To_Off_A:
    3 ?' h; p* r1 I; v
  1089. JSR Set_Function_Temp_Index
    ! d- |: M! \; w: m0 [# x
  1090. JSR Set_Function_Port
    % n5 H& U0 g; K. ]! T0 \2 x
  1091. LDX FC_Select_Index
    # J+ n+ j8 V' R: {( \& J& \
  1092. LDY #$00+ t# D$ m/ @/ t: L9 v, I% Q# M( G
  1093. LDA Function_Check,X
    . t& o9 a  L* q. N5 D0 U3 O9 t$ w8 p
  1094. EOR #$FF7 ?; Q8 j( `8 f- B  P
  1095. AND (FC_Data_Port_A_L),Y3 q4 p! l8 g/ o) m0 X7 k. }8 d/ X
  1096. STA (FC_Data_Port_A_L),Y) W! l  N2 k- k9 R: b* _. n! R0 p
  1097. RTS
    ( S7 R+ b/ g/ b/ b& f+ P" v
  1098. ;----------------------------------------
    . d8 C, F' ~$ p5 l
  1099. ;关闭功能B5 g, P# G: M( J7 v% \
  1100. .IF FC_IS_DOUBLE_PLAYERS  i# G) S+ v8 b5 D3 F+ M9 `
  1101. Change_Function_To_Off_B:. K* Q. S" U: d( q
  1102. JSR Set_Function_Temp_Index$ v$ J7 N6 c8 S# Q) T9 r# s& z
  1103. JSR Set_Function_Port' P3 v+ B( `1 M* Q5 i
  1104. LDX FC_Select_Index! S; @2 }  R$ }. r9 h
  1105. LDY #$00) z  _. ?" e5 w# ~5 M, Q! d2 n. w7 Q  R
  1106. LDA Function_Check,X
    * k  U, |1 M, u* k/ v4 x: y, x7 t
  1107. EOR #$FF- E2 D2 v  e& ~+ N
  1108. AND (FC_Data_Port_B_L),Y: }1 r0 T8 U# U2 G
  1109. STA (FC_Data_Port_B_L),Y, O+ e3 N# k, E0 s5 o& t
  1110. RTS, U$ O1 O! ^3 ^3 i. y! Y& p
  1111. .ENDIF  F5 ]( }- T; \8 A4 c( k+ b, o# {

  1112. 3 n9 D: E. v& w" x6 X5 ?; O
  1113. ;==================================================
    7 L+ j* S3 ^1 L+ V
  1114. ;设置功能状态PPU地址, j) M$ |9 q* G" {8 ]
  1115. Set_Function_Status_Addr:, ]$ Z2 Q( [  k# ~
  1116. LDX FC_PPU_Cursor
    . v) F/ S$ A: e; Y9 q, F
  1117. LDA FC_Select_Temp
    $ m" d- |* j0 j! K3 o
  1118. ASL
    6 w4 ?9 |" B# O" I) l
  1119. TAY
    + ~. s+ z( m7 ^2 D
  1120. INY
    $ r" S" u& l% ~/ w% a$ |
  1121. LDA Text_PPU_Addr,Y$ t# ^( g7 ^2 J" A# k
  1122. STA FC_PPU_Buffer,X" L" K" I4 i$ r- C1 N
  1123. INX
    - Z# X' S9 \: [; A' _2 U
  1124. DEY
    0 F/ r& r5 B  Y8 Z6 S
  1125. LDA Text_PPU_Addr,Y4 u8 w! `7 E, y6 ~
  1126. CLC3 l, R) |+ j. k& g; o+ }$ |$ ]
  1127. ADC #FC_FUNCTION_OFFSET% D( i. z8 @! I; \
  1128. STA FC_PPU_Buffer,X
    , w6 s$ E. v5 m& z8 Y% e
  1129. INX
    7 E6 v; Y) g1 n' o- r
  1130. .IF FC_IS_DOUBLE_PLAYERS
    - {( i$ f% f7 y& U' |
  1131. LDA #$02& f$ }& l& S' }, e: }. E" j
  1132. .ELSE0 S# u  H& L! Y# `" H; K4 j
  1133. LDA #$01
    , i& [3 V5 U  Y; L
  1134. .ENDIF
    : k& Y5 L, Z1 D! g, R, M: g
  1135. STA FC_PPU_Buffer,X
    5 U( C& z. ^# H% e. a
  1136. INX+ J- J1 d( A& A. q3 C6 q8 _; a$ Y
  1137. STX FC_PPU_Cursor- ]- L7 _  D+ h! {! V5 k' P
  1138. RTS
    . ~9 W; k; I. F

  1139. ! |# T+ o9 R3 o# y& |
  1140. ;==================================================
    , }, u: o& ^7 ?3 Q0 y  H7 n  }
  1141. ;获取当前选择索引
    ; [" U% [6 z( j
  1142. Get_Select_Index:: t0 r" N9 ~0 F6 I* q0 ?! f
  1143. LDA FC_Select_Temp7 l0 k- C: W  m. a
  1144. CLC! S' v) }$ t) L* T
  1145. ADC FC_Page_Cur3 T4 n1 n% p$ B) s" L
  1146. TAX+ L5 `" p! s& Q# v1 n- G: J; r
  1147. RTS
    : |# F4 L/ q: Q, |& [

  1148. 0 K0 n) v# S8 h' e9 Z. _% _
  1149. ;==================================================9 _; \7 ?5 a! e& \: T( y( ?+ Q
  1150. ;清除状态文本* _' |7 M9 O' Z8 C
  1151. Function_Status_Clean:
    / {8 t) ]0 ^; O6 j4 n9 U/ _& g7 o  i, h
  1152. LDA #FC_PPU_MODE_CNTC0 p' o3 b8 S/ m1 g! s5 X% i* P
  1153. JSR Set_PPU_Mode
    - m3 S# h; E2 Z4 E" w6 u$ l+ D& k' e
  1154. JSR Set_Function_Status_Addr% D0 q' r3 N4 k: m' M* x8 W# o2 n
  1155. RTS
    ( l& D* f" O3 y9 a) i
  1156. ) s% x" g6 N, c
  1157. ;==================================================
      H. v( g( ?" r! U( P# X0 N! [7 D( W
  1158. ;显示开关状态- \) D2 \$ Z% U9 _5 c2 U9 U
  1159. Function_Status_Show:
    9 j& M8 l8 ]' v( \
  1160. JSR Get_Select_Index
    1 A6 U: N3 E: g
  1161. CPX #FC_ITEM_SUM  \3 H( o& s0 ~* P& l  X) z2 h
  1162. BEQ Function_Status_Show_Set
    8 L5 k$ t% s4 `
  1163. BCS Function_Status_Show_End% b! \' |: f5 _; l4 _; I
  1164. Function_Status_Show_Set:
    * B& I) g) ]! Y* g
  1165. LDA #FC_PPU_MODE_CNTL
    5 ?! _: h  P8 A, M% g( z
  1166. JSR Set_PPU_Mode
    - S1 V( G& @' k6 a
  1167. JSR Get_Select_Index
    ' J+ R0 _6 z* b& |4 h$ S& U
  1168. JSR Set_Function_Status_Addr
    & ^, j# ?1 u7 q2 O0 }
  1169. JSR Set_Function_Port& u; q) V4 D9 |
  1170. JSR Function_Status_Show_Check_A: x" A- Z) R* [# ^' `, S( f6 s* r
  1171. .IF FC_IS_DOUBLE_PLAYERS
    ' l9 G8 S4 |+ _  d- R! s
  1172. JSR Function_Status_Show_Check_B
    1 {, y2 e; a( _& ?0 r) h
  1173. .ENDIF( n2 F: [- G2 L' s3 c! {
  1174. Function_Status_Show_End:
    3 P9 W7 e$ h5 L5 ?
  1175. RTS0 z3 A" L# y3 w" `; G
  1176. ;----------------------------------------0 h3 W1 H& L$ F" `! y
  1177. ;检查功能A状态0 {) a  {7 @% B6 j
  1178. Function_Status_Show_Check_A:: o4 C) D, D8 @# q; |+ v
  1179. JSR Get_Select_Index% o, c" {8 C1 E( v$ Q% D8 ~$ q
  1180. LDY #$00. l% y4 E& o0 \* m7 T
  1181. LDA (FC_Data_Port_A_L),Y* x4 V4 u; H& c8 q, z) c6 M, L
  1182. AND Function_Check,X
    % ?4 t* I2 o% C5 y7 f2 C
  1183. BEQ Show_Function_Status_Off+ _2 j" f5 J$ ~7 V! u& c: \
  1184. JSR Show_Function_Status_On: ], T+ ?: a+ ]8 m2 [
  1185. RTS
    0 `* h- I2 T( u- k8 Q) i0 x
  1186. ;----------------------------------------
    + c2 m, y( ]2 z- a# m( R0 F3 P
  1187. ;检查功能B状态$ F2 m0 p$ S2 [# F  V
  1188. .IF FC_IS_DOUBLE_PLAYERS' l- I# p/ n1 x: k
  1189. Function_Status_Show_Check_B:
    # [8 S+ J; w9 G$ U& J- d2 H1 P
  1190. JSR Get_Select_Index! T& ?1 @; T2 {5 [) v
  1191. LDY #$00
    . M1 c* i' [" g: f
  1192. LDA (FC_Data_Port_B_L),Y
    + H' T! `7 `( G6 `7 o" a8 G
  1193. AND Function_Check,X& H! b. a* d+ }! P0 w8 c
  1194. BEQ Show_Function_Status_Off" V2 \: b: ]! A' y$ ?
  1195. JSR Show_Function_Status_On
    6 |: }2 \0 Z4 {2 J6 {( b6 ^! B; |: F: j6 s4 G
  1196. RTS* }" D- d( n* x
  1197. .ENDIF" ~! R& U8 b( {" ]9 d

  1198. ' z  E. I2 y) @
  1199. ;----------------------------------------- w' P. t' ^+ h) X# Q2 }6 E, _
  1200. ;显示功能开启状态) U6 `+ R, ]' Z' v
  1201. Show_Function_Status_On:
    * T! @4 k$ M: ?2 i6 s  Q8 z+ [
  1202. LDX FC_PPU_Cursor
    % E9 A- w0 w; H# P
  1203. LDA #FC_ON_TILE& _! c  A% J1 q* B  ?, U
  1204. STA FC_PPU_Buffer,X
    ! A' R9 b) O/ D$ L/ Q  e0 \
  1205. INX
    ) g9 d0 p4 n9 t7 f+ G9 r
  1206. STX FC_PPU_Cursor$ m) h* n( L& Z4 |% ~: O
  1207. RTS
    & K# B  C7 G1 D, p& y' i1 b
  1208. ;----------------------------------------( g  H3 Y  _- y* x9 o# x  S
  1209. ;显示功能关闭状态% Y7 B0 |% d( |6 M& w# Q
  1210. Show_Function_Status_Off:
    7 r5 r" n% @8 ]' W7 i
  1211. LDX FC_PPU_Cursor( e) d+ @& C# @0 \
  1212. LDA #FC_OFF_TILE
    ! d# O' z. j! f" n6 H- k
  1213. STA FC_PPU_Buffer,X5 ], \( G3 b% i" M5 @6 V6 w9 P
  1214. INX: s% |* ]9 V( `! e
  1215. STX FC_PPU_Cursor3 z* R) k- u- r% v  M
  1216. RTS2 a& @$ Q% [$ U; A" w+ a+ G, D
  1217. , w" L" X4 `4 Q+ a. a' S
  1218. 3 q& |5 t$ o; f* Q0 G
  1219. ;-------------------------------------------------------------2 M* \& a0 Z7 b8 y
  1220. FC_Data_Copy:    ;数据拷贝参数设置
    * H5 m7 O5 T7 d$ ~+ g- A, A: @; B' b
  1221. STX FC_Cpy_Port_L
    ' m* e* g  @( Y1 H  N" V
  1222. STY FC_Cpy_Port_H9 U- T- I3 R8 x  p
  1223. LDY #$007 v! B" B1 S% {* p3 q
  1224. LDX #$06
    . ?) s5 k3 u8 Y. f! U6 Q
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数
    2 W0 H" v) ~& J
  1226. LDA (FC_Cpy_Port_L),Y9 V' n' K" {. `3 v" x6 w2 M
  1227. STA FC_Cpy_From_L,Y' u" s! l% d, P" K6 p$ `/ K
  1228. INY/ M2 i* ^; H& [) r5 X6 j' r
  1229. DEX
    * @+ D) u( |5 V* T" @
  1230. BNE FC_Data_Copy_Addr_Set. S, r/ Y1 s4 q& a! ]2 i! s
  1231. LDA (FC_Cpy_Port_L),Y
    " H- Z5 O3 l/ R$ ^' v9 ]9 s% f
  1232. CLV, [  j; ]8 _% A5 W' ~1 I
  1233. LDY #$00
    " a3 v8 v/ x6 _
  1234. ;----------------------------------6 ~% w! [7 S8 x3 }7 @/ u
  1235. FC_Data_Copy_Mode:   ;复制模式校验
    3 H* a1 i( Q/ S' x5 Z
  1236. CMP #FC_MODE_RAM_TO_RAM8 H5 j5 [2 D; t7 A) L
  1237. BEQ FC_Ram_To_Ram_Mode
    * a! ]! H6 ^- Z* {" J3 y
  1238. CMP #FC_MODE_RAM_TO_PPU
    " c% l% Q& \) [# A* Y$ F, f% Y) A
  1239. BEQ FC_Ram_To_Ppu_Mode
      d, c8 ?: C% \- X3 b; T0 B
  1240. CMP #FC_MODE_PPU_TO_RAM! U8 V) H1 F  O3 Q- j* _; y
  1241. BEQ FC_Ppu_To_Ram_Mode
    $ N9 w; W* Q! g$ T
  1242. CMP #FC_MODE_PPU_CLEAR0 ]+ P9 Q4 |8 ]( ^, \$ k# j: i9 X
  1243. BEQ FC_Ppu_Clear_Mode
    6 P6 Q4 P( O3 e4 O
  1244. RTS
    3 i4 G: R. A  I& r& Z' K) Y0 e; f
  1245. ;----------------------------------------
    - T+ ?( D2 K8 E. \
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式
    2 A! r0 J0 i2 J7 S* q
  1247. LDX FC_Cpy_Count_L
    1 m- R7 E# u7 Q5 y$ B+ L
  1248. INX
    " ?& v3 a# Q9 Z4 ]6 q9 {
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查
    9 D6 D0 {/ S. V6 l* T8 u
  1250. DEX6 a/ K7 Y! x. o6 ?
  1251. BNE FC_Ram_To_Ram_Copy7 F& [/ }: T9 p, |  J4 ~' [+ G
  1252. DEC FC_Cpy_Count_H
    . x, @' R0 S" w( y# p8 a6 y, L
  1253. BMI FC_Ram_To_Ram_Over/ |& F4 d& w( g9 R1 T1 P9 w
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据5 p& T6 K. n$ W2 G+ Z
  1255. LDA (FC_Cpy_From_L),Y# k# d5 S  D5 Y- ]3 w
  1256. STA (FC_Cpy_To_L),Y# X/ ?$ Y9 b4 }* _
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增
    * X: z/ Q$ {/ ^  Z6 |9 X
  1258. INY
      L5 N8 D% ]/ S3 L$ S0 A; H( r1 I
  1259. BNE FC_Ram_To_Ram_Count, ?9 C7 W' [3 E# M% c" m
  1260. INC FC_Cpy_To_H
    5 A# U$ h% R& P; }: n9 L: n
  1261. INC FC_Cpy_From_H. F* V0 ~0 ~$ c' ?3 A
  1262. BVC FC_Ram_To_Ram_Count" v, t* i1 `$ M( t, `& Q9 s  m* ]
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制0 A/ P2 R& n1 z/ e
  1264. RTS
    ; e6 N/ G: ^6 a
  1265. 9 d0 _# E, L) O, g( b$ E* V
  1266. ;----------------------------------------
    5 J! q5 w" x- J
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式/ n* P2 D! Z. e1 R5 L' o+ ~
  1268. LDA FC_Cpy_To_H, z* e' v8 p. u
  1269. STA $20066 z0 [" I4 a' v
  1270. LDA FC_Cpy_To_L' i) h. {- p% M# e# k' P
  1271. STA $2006
    1 ~/ w0 y" ]7 c
  1272. LDX FC_Cpy_Count_L+ e% H# ^1 C7 \  @
  1273. INX
    ( K3 d2 x& s9 z0 p, J
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查
    ) [4 b! ]$ e% r; B
  1275. DEX
    ' x9 J! s0 \2 F0 ?1 T( R/ ]$ p7 q/ k
  1276. BNE FC_Ram_To_Ppu_Copy2 F( p/ p# T$ N% m3 S9 l4 _
  1277. DEC FC_Cpy_Count_H) n" s0 b4 }. l9 u
  1278. BMI FC_Ram_To_Ppu_Over
    ) s9 W2 w* y, b
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据
    . F5 i9 ?1 V: S* D- z6 {3 b. P; C; I8 b
  1280. LDA (FC_Cpy_From_L),Y- J: `: b. t$ D! b! b
  1281. STA $2007
    - D  j' V3 f% r
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增6 Q% [2 j# o0 B; Y; p5 z. \
  1283. INY
    9 C& W3 q) H. I: X
  1284. BNE FC_Ram_To_Ppu_Count% U5 T; v% C+ a3 Y8 [8 U  W# V
  1285. INC FC_Cpy_From_H
    0 M9 F# A- h3 K# O7 m/ @% ?* ]
  1286. BVC FC_Ram_To_Ppu_Count
    7 b& k0 u+ Y# z  r
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制
    % ^& Y9 n4 i. {+ D2 e6 a) ~
  1288. RTS
    # J' A# ?* S" p/ {

  1289. 3 q3 m. R1 u2 W  ~, Z# {
  1290. ;----------------------------------------) a! F# k" \4 Q1 M1 [& O
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式
    / s: y+ Z- O6 ?2 ~( H4 X
  1292. LDA FC_Cpy_From_H
    % G1 _7 T3 q- B. h+ b2 Z3 ]: a. D' L
  1293. STA $2006
    ( X* j, q! O+ Y. Z# E3 n3 f
  1294. LDA FC_Cpy_From_L" X& o  L: H1 z) e6 m# }, D
  1295. STA $2006
    $ c; |+ w* n$ U
  1296. LDA $20074 s0 N# H% a. u& R
  1297. LDX FC_Cpy_Count_L" e: [& g3 J. R* P
  1298. INX- u  K1 [9 @  g/ t. p
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查! A- a& p6 O' W% c) q$ m
  1300. DEX
    - ^8 D. D- P4 E0 s; e; ]7 j3 y
  1301. BNE FC_Ppu_To_Ram_Copy$ H1 Z2 I) H5 X/ R
  1302. DEC FC_Cpy_Count_H
    0 q3 H7 E1 ]7 l
  1303. BMI FC_Ppu_To_Ram_Over
    & q4 a  Y4 t1 e  ^
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据
    4 u; B; m' X- f' m! m4 i
  1305. LDA $2007
    & @% P! m( @# h  d, z
  1306. STA (FC_Cpy_To_L),Y4 F1 }. p$ ]! z, S' M/ \# g
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增& B5 t3 x' ]; M0 s6 j0 k
  1308. INY2 |' K9 u3 q+ i1 M
  1309. BNE FC_Ppu_To_Ram_Count1 d; [% I5 y1 r" f  q  x) @
  1310. INC FC_Cpy_To_H1 p$ `* H% c. n. w6 x* N% R& f
  1311. BVC FC_Ppu_To_Ram_Count  ]! u' {4 r, |" ~: s
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制
    4 \/ F& E' N! M" }  g$ h  L
  1313. RTS( D0 k6 e! I# a  ]4 n4 z1 s

  1314. ! ^0 k, {. d( e: F* e/ {
  1315. ;----------------------------------------
    2 I9 o& d! G; S3 L& h9 W  }6 o
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式
    ' n) _0 P- I- P, j" _
  1317. LDA FC_Cpy_To_H' _" q1 x8 X9 {5 ?2 S
  1318. STA $2006
    4 ]8 `$ A  l! \6 `; f
  1319. LDA FC_Cpy_To_L, {0 r$ ?2 O# j' F* W$ Z# ?
  1320. STA $2006/ x2 ?4 p9 I; \5 R/ x1 W' P" V
  1321. LDX FC_Cpy_Count_H
    % C5 g, ]9 R- s5 `9 T
  1322. LDY FC_Cpy_Count_L
    8 v7 e  P7 w# T; e' S
  1323. LDA FC_Clear_Val5 i  z2 Q% }8 K: o
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查
    / b0 t0 J5 c% _- C' ^4 q2 [! P
  1325. BNE FC_Ppu_Clear_Copy4 c+ H# k! b$ Q+ {
  1326. DEX" D% ~/ r$ w2 e
  1327. BMI FC_Ppu_Clear_Over
    $ _  D( H2 B4 J+ Q* S: a- ]
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU' ~% |3 n  J& H  A2 u8 r
  1329. STA $2007
    : [0 K/ a. j( u; F+ n
  1330. DEY0 i, e& F) ^/ O5 ]' ]& a1 i" @, B
  1331. BVC FC_Ppu_Clear_Count
    * D  f6 H6 z* z; y
  1332. FC_Ppu_Clear_Over:    ;结束数据复制
    , a( _2 h2 ?2 a& Y7 G
  1333. RTS
    0 R' I* v; ~; r% t  J

  1334. 6 E& A5 }! S% X+ w. A( W
  1335. ;==================================================7 n& T% w6 z  q8 g5 U
  1336. ;保存RAM数据
    : w' W6 u5 ]1 l3 \8 ~8 k6 n
  1337. Save_Ram:3 L$ d! \) e! i
  1338. LDX #<Save_Ram_Data
    0 W0 _3 z: f/ y: B% j8 c4 {/ u+ g
  1339. LDY #>Save_Ram_Data# r; H& l# M" r  L& R( [
  1340. JSR FC_Data_Copy6 t& ?( G* s# L0 ]3 [: ?
  1341. RTS, O2 S5 N: i; h+ B& A& f" P
  1342. " n( O* L  P: L9 N& p
  1343. ;加载RAM数据
    1 D4 l$ O$ ?* N/ ~5 S- U
  1344. Load_Ram:. y+ |% [9 s9 V- V
  1345. LDX #<Load_Ram_Data9 C  }! `/ H) n) e
  1346. LDY #>Load_Ram_Data  b0 Y  ~3 o. k$ Z: V
  1347. JSR FC_Data_Copy' I. M+ i! j2 U5 [& Z
  1348. RTS
    $ l/ P3 c( A2 X9 ^. `# e8 P  O( X

  1349. + w2 a: }. T8 I, x
  1350. ;保存PPU数据
    6 Q4 H3 R8 O* F/ t7 m+ y3 M
  1351. Save_Ppu:& i$ m" w$ x& O! d2 Q5 ?
  1352. LDX #<Save_PPU_Data
      E/ a+ f& i* l* r8 I
  1353. LDY #>Save_PPU_Data
    7 x# s( e; J% h8 k: c
  1354. JSR FC_Data_Copy
    # C8 Y8 u- a5 {% h3 P: U# O5 `1 c9 _
  1355. RTS/ {* m8 Z: F4 R6 {4 T* F) C( g
  1356. 8 k+ g# z6 b0 P; H
  1357. ;加载PPU数据
    ) Q5 t5 }2 ]/ C
  1358. Load_Ppu:# H! q; d1 h* H# ~( b0 k& [/ H& F( O
  1359. LDX #<Load_PPU_Data
    8 A/ x8 I: ?9 U8 E3 {3 N
  1360. LDY #>Load_PPU_Data
    5 D- }$ Y9 b- r) u1 {* H
  1361. JSR FC_Data_Copy: f4 I7 [" Y( h9 w) `1 ?
  1362. RTS2 P5 w2 }8 z& T4 R
  1363. 2 O6 B1 C' ~% X3 i. f( \
  1364. ;清空PPU数据
    7 @5 s' C/ j9 |' i
  1365. Clear_Ppu:
    4 I* G, w7 S$ G4 M/ t/ Z; G- P# N5 D
  1366. LDX #<Cln_PPU_Data
    2 n( n( W( ]. t- t( I
  1367. LDY #>Cln_PPU_Data
    0 e( n+ e& b# H
  1368. JSR FC_Data_Copy3 Q+ B- y4 q9 {$ f
  1369. RTS
    ( C5 Z+ n3 [. S, a4 s% j7 O; I7 V5 b
  1370. ' F' F$ s5 |/ c% t4 s
  1371. ;==================================================5 ^/ A) }+ o0 j, g0 f$ p
  1372. ;数据配置
    6 x8 \3 K9 _' P: V/ d% ~' k
  1373. Save_Ram_Data:' k0 N1 ~# u* A% k7 X. z5 _& N, t
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM
    8 U6 ?7 Y9 q5 a) n
  1375. Load_Ram_Data:3 A- u9 j+ T. ?' L. a2 W" @. i/ S
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM9 O' v# X. z; c, v" Y, q/ K3 t' y
  1377. Save_PPU_Data:
    / P) r7 e; F' X: B) U  ]
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM
    # \8 m6 U  T% Y. I- }( w, O5 }
  1379. Load_PPU_Data:
      N3 t( h$ x. g8 s% U# a+ [
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU8 t9 h) X7 o7 y; J' n2 L- y
  1381. Cln_PPU_Data:! g( M9 v( x  @$ s" H5 z
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR
    9 G+ M' A" ~: C2 Z3 j* O
  1383. & I0 I7 M" j- B- S; v

  1384. : f8 e3 R( U) K: L4 _
  1385. ;==================================================
    2 D3 }: {, c3 {6 k0 p( h
  1386. ;文本数据PPU显示地址
    ; |" l* p  v& q' h* q; ]
  1387. Text_PPU_Addr:3 J% I, C: Z% R
  1388. .WORD $20C5
    ' C8 o1 J  ^+ P  b# M
  1389. .WORD $2105
    * {* ]! e+ p2 D" T4 [+ p8 K8 S* `
  1390. .WORD $2145
    1 ^# _& s2 u; R) I5 o
  1391. .WORD $2185
    9 l8 z7 R0 U4 r. d' D6 p# I
  1392. .WORD $21C5
    ( p$ Y" g) l' M
  1393. .WORD $2205
    : S3 W. d3 T0 b9 x. Y7 d
  1394. .WORD $2245
    5 @# {8 a9 e- h/ Q7 ~
  1395. .WORD $2285
    # K' J, {) a9 X: @7 r
  1396. .WORD $22C5
    + v! e$ R0 {6 S8 E
  1397. .WORD $2305
    ! H2 a: C5 u( |4 i$ M4 f
  1398. .WORD $2345
    + f( x& J0 \' e% S( t+ {

  1399. 2 o( @$ }' o$ W( \$ X" w
  1400. ;==================================================1 I1 }- `% ~' Y( s. r6 w
  1401. ;文本数据PPU数据地址4 k& O1 S: p* H
  1402. Text_Data_Addr:
    ; @2 y$ n3 j, f) i# Q1 V
  1403. .WORD Text_Data_01) E1 \0 m( J  o' u
  1404. .WORD Text_Data_02
    $ e) y2 A) f) H) I" c
  1405. .WORD Text_Data_03
    - @0 o# @+ ]: B+ G( {
  1406. .WORD Text_Data_04
    % O. R5 S% g% w9 J6 [+ E: g
  1407. .WORD Text_Data_05
    7 t# n6 I1 j( c! h- \% G
  1408. .WORD Text_Data_06
    ; h! X4 @2 @3 v; f" G9 p
  1409. .WORD Text_Data_07
    $ C0 I3 p& j4 A% M1 m" o6 O* \
  1410. .WORD Text_Data_082 |9 G4 u' {, Y5 m
  1411. .WORD Text_Data_096 g, e2 r  m, x1 Q- L! ^9 O
  1412. .WORD Text_Data_10
    , u$ J/ d& t, w3 R4 @
  1413. .WORD Text_Data_11
    0 x+ G# J9 ^3 i, ]9 ^4 Z
  1414. .WORD Text_Data_12
    7 [' {; |, B# e3 _- n/ L7 w! r5 D
  1415. .WORD Text_Data_13
    & n$ x4 Z1 o$ J  b- V2 M
  1416. .WORD Text_Data_14  S# S- D% ]1 V5 w, ]
  1417. .WORD Text_Data_154 Z$ p. v" O" C  n2 w! e5 |9 t
  1418. .WORD Text_Data_16; {3 Q# @2 |3 u& P9 M: Q

  1419. : U" [% m4 |# O
  1420. ;==================================================
    - c, \9 |- y* k& Y+ A1 [
  1421. ;文本数据
    ( X9 ~$ X& W) ^& }
  1422. Text_Data:
    ) ~, ?* f4 k, Q. Y9 u4 j
  1423. Text_Data_01:
    1 D3 ]! f) H$ p0 g! c7 M
  1424. .STR "01.INVINCIBLE") M. D* g& N8 ^5 z3 h2 A8 Z' x" L
  1425. Text_Data_02:
    5 o  y5 {" R" Q3 W
  1426. .STR "02.INVINCIBLE PLUS"3 C; R0 d/ W0 A, T1 J. _+ H0 p* o
  1427. Text_Data_03:, P6 v( {2 E( O; w  s  }
  1428. .STR "03.LOCK LIFE"+ F0 ^* m  j9 Y! d
  1429. Text_Data_04:
      W7 z  {" Z4 ~( \
  1430. .STR "04.LOCK WEAPON"
    , ?1 {/ p2 U8 f- ^
  1431. Text_Data_05:& p! }  |; m- |" R& q) T9 i
  1432. .STR "05.SEL CHANGE WEAPON"
    & R% q  K* f' a( s; O7 w1 d
  1433. Text_Data_06:
    : |; \) s: t# o: q3 c9 @2 o
  1434. .STR "06.UNLIMITED JUMP"
    6 D) W& u# J6 X) p/ }
  1435. Text_Data_07:0 A1 ^; C! H' E$ z
  1436. .STR "07.MOVE FAST"
    $ E0 K/ `8 o# }+ n
  1437. Text_Data_08:
    9 g  z$ g: O  W9 _! A- [4 C% D/ F
  1438. .STR "08.SWAP SKIN"* Y. x8 k6 ^! g3 n: Q- Q3 N$ H
  1439. Text_Data_09:% T' `/ F- k8 M* H+ t' U
  1440. .STR "09.EQUAL BULLET"5 h+ u  q* l) R/ i% E# Q1 @. C8 r
  1441. Text_Data_10:* [) P" S' u, L3 O9 S5 l+ p
  1442. .STR "10.STRONG BULLET"3 B1 z4 d1 P( a) L! N
  1443. Text_Data_11:! ?& B6 [# u! {! r
  1444. .STR "11.KILL BY ONCE"
    , ]6 c& f( [! U! S5 I
  1445. Text_Data_12:
    ! n$ Z) P6 D8 m: Z8 E4 ?
  1446. .STR "12.FULL SCREEN KILL"" B) u6 V0 s: @* L
  1447. Text_Data_13:
    " x- S, i: k! I2 H; K
  1448. .STR "13.DOUBLE CONTROL"% `+ r- b* b. I" Y. j- B
  1449. Text_Data_14:3 q  T! X5 C5 a. L$ \1 [* P. O" W& o
  1450. .STR "14.REMOVE E-GRID", k  o& r$ S- B3 f# }7 w0 s
  1451. Text_Data_15:; _# M% b( N& {7 V- t+ ~
  1452. .STR "15.FALL INVINCIBLE"
    * X; I7 p% d3 e" ?. `, T. h
  1453. Text_Data_16:
    1 I8 P: e* t2 y. x8 s& u9 J
  1454. .STR "16.NEXT STAGE"- U$ [% w4 `5 `$ g+ F
  1455. 7 E0 `0 Z/ N& a3 P
  1456. ;==================================================
    1 {: ^0 P1 j! ?7 Y4 w- D: B
  1457. ;功能开关检查地址2 S1 b- p/ f) h9 @
  1458. Function_Addr_A:2 K5 x- U  D# j" [/ }
  1459. .WORD $01C0
    7 e1 Q' x& H" k. s8 l1 m$ W
  1460. .WORD $01C0
    8 l/ s4 V1 y- _( e: _4 o
  1461. .WORD $01C0  `. Y* S0 _4 ~7 c) o
  1462. .WORD $01C01 e# w" p% M" m% E  e, S) Q& A6 J
  1463. .WORD $01C0! u# ]; X! ]5 W6 S
  1464. .WORD $01C0
    : M. d: {: o8 F4 c* v2 h. A- ]
  1465. .WORD $01C0
    : V  ^# b0 ]' b4 B, Y, r  H, K
  1466. .WORD $01C0
    0 P7 z& N* P2 N& L, O8 [
  1467. .WORD $01C4
    * u1 d+ l. m( }$ P
  1468. .WORD $01C4) s$ v& I( b( L9 o
  1469. .WORD $01C4
    ) x$ D9 T6 W( G& N
  1470. .WORD $01C4- ^; c4 w9 a% V" K& ]& ]
  1471. .WORD $01C4/ a, U4 m2 b& y" m2 L9 d; }8 `# m6 C
  1472. .WORD $01C4
    1 M1 E9 a4 ]* ?( f" E  o, Q% Z
  1473. .WORD $01C2" t; z- M5 _# w) y2 E2 T' l
  1474. .WORD $01C47 s# c  g, E6 h
  1475. % w% R; r$ o$ V7 y# Z
  1476. ;功能开关检查地址- `5 I) j: q& _% q3 V
  1477. Function_Addr_B:
    2 [8 X- [2 R) X: M% c- ~1 l( D' z
  1478. .WORD $01C11 V1 i+ p' G4 u/ [- o5 A, d
  1479. .WORD $01C1
    3 n" y. _) H7 Z  o; f! x5 t5 ~4 h
  1480. .WORD $01C1
    : A: \3 m4 J6 R) f+ u
  1481. .WORD $01C1. d+ Y1 o' N, ?/ n' U- D( [& G% f
  1482. .WORD $01C1+ M0 }0 f9 \- K" `
  1483. .WORD $01C1
    6 d. c5 P2 g. B6 i2 B9 k8 k
  1484. .WORD $01C1' W  N# R+ P" p& r1 `% d) ^/ y
  1485. .WORD $01C1
    1 u8 N+ w  R( r+ H, ?
  1486. .WORD $01C4- m2 t( ^: R& J: j) ]; w, U# c
  1487. .WORD $01C4
    * w: ]+ \1 Z; @' {& F' ^
  1488. .WORD $01C4. p/ v5 b1 @: ^" U# x
  1489. .WORD $01C4
    % }7 q; Y, W! t: r- O! {; V5 A; |
  1490. .WORD $01C42 @/ _, p) g2 T7 o+ f1 g: N) j
  1491. .WORD $01C4' X1 Y: N" W- @0 p8 O
  1492. .WORD $01C34 u3 `: b# X! Y3 s+ r' e# D
  1493. .WORD $01C4+ Y0 Q! \- [$ _. C- m

  1494. + S$ d5 T! s. I/ E9 A
  1495. ;==================================================! N' B* Y. W! W: r+ K* |) }
  1496. ;功能开关检查数据  q* C% J3 G2 E& B) J
  1497. Function_Check:
    ( U2 Q% f* b0 i) R7 S) g
  1498. .DB $01
    . |+ q. ?! \; V! R) ~" G; ^# \/ A
  1499. .DB $02
    / h/ v  I/ ~& w0 k! u
  1500. .DB $04
    ! X: V0 G: P, e) p* T- h
  1501. .DB $08
    / B! O4 V8 W% f" N$ q7 E* l2 B
  1502. .DB $10
    0 f' u& B: W+ F; E
  1503. .DB $20$ p4 X4 v7 E' v3 i6 m
  1504. .DB $40
    8 T3 w8 c. |3 P; P7 Q  S. v6 o
  1505. .DB $80
    1 {# f# N7 l" g( O
  1506. .DB $01
    7 ^* s: j9 n. y* Z9 H" m' |. v
  1507. .DB $02
    6 v, x7 K5 S( E
  1508. .DB $04
    ; Q6 v6 {5 L2 N. W& A- |6 t
  1509. .DB $08( S- [0 A1 R4 n) B% L; t: n: c
  1510. .DB $10, T5 E2 I! _$ f6 w: p6 |
  1511. .DB $20! f7 s7 Y+ }9 o3 x% \. t) E" A
  1512. .DB $40
    - x( _7 w7 [  n/ O/ U0 u
  1513. .DB $80% p# U  C/ W4 ~$ Z( Z

  1514. 8 O3 T4 @% z2 _( J* z6 T4 T. Y6 N
  1515. Char_Rom:4 Y0 C- j! {, y' \
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ! ?% A5 [- W6 J+ s
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    4 [- E6 E( `2 D: R: \" z9 k% V
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$00. Q2 L' T; o9 f) k- Z
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$00
    8 H7 \( u6 D& j' q6 w7 B
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$191 Z- ?  c8 ]# t: U4 u7 O
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$00
    + n; p  a) x3 x

  1522. - f$ P+ z6 U8 ]

  1523. . k( z0 k9 Z+ R+ x5 v4 W
复制代码

/ ]/ C: b2 P8 k: U; E
游客,如果您要查看本帖隐藏内容请回复

; @  ?2 M5 o- yflamecyclone.ys168.com
/ H6 {- V) }+ S9 e9 ywww.nesbbs.com

本帖子中包含更多资源

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

×

评分

2

查看全部评分

签到天数: 3161 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1622 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

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

使用道具 举报

签到天数: 1759 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2637 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1487 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 187 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1899 天

[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 | 显示全部楼层
增加烧录支持(其实是之前遗漏了兼容性)
回复

使用道具 举报

签到天数: 1304 天

[LV.10]以坛为家III

发表于 2019-12-5 06:49:43 | 显示全部楼层
樓主的修改一定支持, 魂斗羅是喜欢的系列.
: Q& }0 d4 Q; Z4 B& h6 A5 @) ^多谢楼主分享
[发帖际遇]: waikwokt 打扫环境卫生,被奖励 2 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1238 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3611 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3300 天

[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 | 显示全部楼层
谢谢老板啊
回复

使用道具 举报

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2020-3-22 14:13:00 | 显示全部楼层
% _# y  K) T1 B4 L- ]8 P$ q) z
Tec.PNG (8.05 KB, 下载次数: 0)
9 |; v6 n8 y; E, S2 R# C$ o2 Z% W6 v/ q( B
下载附件  保存到相册$ P, t+ k5 Q- A1 g% i
( m! a- R, B, N( z  d6 }
2020-3-13 13:33 上传. M) r. l/ j! S" p
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S
0 {! I3 y9 V5 W& j% b修改内容:
+ k7 f' _4 I1 T3 m* L, P6 D) e* u1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s/ `5 G' o9 `8 f5 C/ Y
4 N# A* o  K& S. i2 c
8 q9 I6 `+ d1 W* E2 p5 m不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-25 06:58

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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