设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑
" [, e. S: J' ]: Z7 L
$ B/ b" b) D9 {6 l[FC][魂斗罗][最佳可视化]6 `4 Q. w. x5 r$ U
时间:2019.11.30+ l7 I. E' ?' M
作者:FlameCyclone
4 ^! B/ t! A6 Q( y- q0 U7 a内容:+ r* [. R( e3 e* U7 }$ A: R
1.可视化:    ' c: @0 i( K* Z
     (1)暂停时按选择键进入菜单
4 b' H7 U! V! {) {, L     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出
0 G* E% |+ Z) K     1.1.透明无敌: 透明无敌
$ D' E3 z. C- Y7 @( h2 t     1.2.加强无敌: 金身无敌8 P& B) E; ]% `
     1.3.生命锁定: 生命锁定3条- h" j  x6 G4 n$ F
     1.4.武器锁定: 武器保持不变
2 T7 h* B- S6 n. i     1.5.武器切换: 游戏时按选择键切换武器
3 q9 s' F, w7 T4 u2 R% X) |     1.6.无限跳跃: 跳跃无限触发% E- P% c! M# u, Y7 ?, a) P
     1.7.快速移动: 行走速度加倍
4 H& H2 v5 ]6 r/ {     1.8.皮肤切换: 交换玩家肤色
+ ]& z* f# Y2 N2 G7 K0 A2 ?; W     1.9.公平子弹: 玩家子弹可以与敌人子弹对打2 U% F) T% m& u1 l% p8 f! A
     1.10.强力子弹: 子弹打中敌人后继续穿透
" W3 Z/ H: s7 G     1.11.一击必杀: 敌方中弹一发必死( G8 A3 h/ S) T2 o- n; [2 h1 @
     1.12.全屏击杀: 开枪时全屏可击中目标必死
: s4 @! r( }# F$ ^- z     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家: S2 m! R  b4 L& m2 G4 U
     1.14.移除电网: 移除2,4关的电网$ v% I+ I5 b# }) O( k6 K; I
     1.15.掉坑不死: 掉坑后不会死亡7 r/ Y# ]& T3 H9 ?8 E2 b* {
     1.16.跳过关卡: 跳转到下一关
. ^% C, J8 `. C- Z3 Y4 T
  1. ;[FC][魂斗罗][最佳可视化]  O  a; q7 c5 x% U' J$ o% X/ t
  2. ;20191129; @0 {' X3 C# i& `

  3. ! m* h/ ]5 j& `) l  Z5 ?8 W/ O3 T8 N
  4. ;程序开始地址1 _  Z4 y9 ?) t! f) h" q
  5. .ORG $9000
    4 o6 Y$ K8 ?4 G! P$ N* `! y
  6. ' M' U# k! w3 J2 Z
  7. ;==================================================
    7 {# x2 K  f9 k" U) n  m
  8. ;==================================================
    ; |& L' j7 R2 P
  9. ;是否双人玩家
    ' m0 q$ O: W; j- e. ^: w. ]$ G6 j
  10. FC_IS_DOUBLE_PLAYERS = 1$ C+ A' P# x* X/ O; q& [

  11. 4 y5 N- z, `* M5 @8 A; @
  12. ;==================================================
    ( n$ a6 _/ t% ^% B9 `9 q
  13. ;PPU缓冲地址配置
    * K3 E: s9 x$ m5 l- |* H# F7 Z5 \
  14. FC_PPU_Buffer = $0300: |1 x8 f8 I* }& ]1 I6 X" A' q
  15. ;PPU地址配置
    6 ?. x$ y7 b7 b' }
  16. FC_PPU_Cursor = $00
    # d$ E5 d- ]% u+ G: u" g
  17. FC_PPU_Status = FC_PPU_Cursor+$01% D# Q/ u. y. ^0 c: M
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $01
    ' `) u) j; p9 s7 o  t
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $017 M3 I# S0 r! l0 W6 e/ o
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $01! {# q! K8 Z# N/ t8 h
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01
    % M" R7 l$ W$ E6 c) b6 A
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $015 F/ i$ m9 M) ^# ]2 T2 m
  23. ;==================================================
    2 `8 B7 ~% r& O
  24. ) P! H6 w) Q; P6 ~
  25. ;==================================================' f0 \4 G3 [7 b+ D; R
  26. ;选择项地址配置" [. y  B" |0 K$ G% y
  27. FC_Select_Index = FC_Data_Port_B_H + $01
    : x+ d9 v6 X0 A" o3 X
  28. FC_Select_Temp = FC_Select_Index + $02
    9 \) ~9 f' ]; }* J8 r6 a# ^
  29. ;NMI循环计时器
    / ~) R/ j3 L* U+ J; `
  30. FC_Time_Count = FC_Select_Temp + $01: H8 e. S1 K& I9 z2 @  U' |5 [
  31. ;==================================================
    5 }' e% w" j* u6 b- [# _
  32. 2 S& o& N( L  ]2 t
  33. ;==================================================
    " @/ W4 w' E0 [7 x/ w
  34. ;光标配置
    4 }' D; {0 Q0 K) z
  35. FC_Cursor_Addr_L = FC_Time_Count + $01
    * }* _# h: L% n. z2 M8 u! F
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01. I0 {7 L5 Y, j4 ]
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01' c6 A& ^( [4 R. q0 m
  38. FC_Cursor_Y = FC_Cursor_X + $011 ~& w- O5 s* p  P
  39. ;----------------------------------------! J2 _- d1 s# B9 L: S9 t3 q) ?% @& w
  40. ;光标图形号+ E6 t4 f( F$ @0 U0 p' z3 V8 `. h6 V2 i
  41. FC_CURSOR_TILE = $3E
    2 I7 L* v( k/ b; g5 s/ R
  42. ;光标偏移像素值
    ! }' ]& H* l( _4 P; K
  43. FC_CURSOR_OFFSET_X = 128 f) R- X+ K) ^6 k
  44. FC_CURSOR_OFFSET_Y = 13 r* J! L$ N. t4 R
  45. FC_FUNCTION_OFFSET = 21% u, v; v& T, [1 H
  46. FC_ON_TILE = $3D
    ; k) e' @8 c. E: u+ u& [; y" r
  47. FC_OFF_TILE = $3C
    8 `# Z$ r2 r4 e7 y8 U; |0 V
  48. ;==================================================1 k" [3 L  ]+ V7 C

  49. . x% u- E' h8 p) w; {
  50. ;==================================================
      r( B. V( |9 ~! O9 ^* l
  51. ;翻页配置$ p, T) B! U! D" g" ?, N7 W5 R
  52. FC_Page_Old = FC_Cursor_Y + $01! P' [) _- X7 m& B: l" P* c& p
  53. FC_Page_Cur = FC_Page_Old + $010 b8 _4 w. @9 L% i+ L2 z/ Z
  54. FC_Page_Item_Count = FC_Page_Cur + $010 X% M/ M/ `8 S% Y
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $017 L& V! Q8 p6 x. `
  56. ;----------------------------------------
    / U  m' t2 i: ?% j9 t+ _1 A6 b
  57. ;翻页属性
    9 X9 G: G4 x# g2 s# }6 K8 t2 g
  58. FC_PAGE_SIZE = 10
    ( e5 Q- t$ @+ V- m# _- @
  59. ;PPU单次写入缓冲项数
    9 d- W' Z. l% L7 P4 o
  60. FC_PAGE_BUF_SIZE = 2
    , d2 T8 T4 W+ \% v- u8 D
  61. ;----------------------------------------) m+ X3 s( m( T& n7 Z
  62. ;显示项最大索引属性
    1 ^1 W7 b5 L+ [  z& t. O
  63. FC_ITEM_SUM = 16 - 1
    + s8 C3 f& r" g( }9 K
  64. ;最大页索引属性* F4 [: B% {( I1 c( M. ?
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE7 B; P% B) e/ }7 p
  66. ;==================================================
    # {% B8 I) }$ k1 s' C
  67. ' ]1 d  A' e2 b: X
  68. ;==================================================- t# r& R4 {" c, U
  69. ;按键配置+ u& J; j  w% A; l
  70. Button_Keep = FC_Page_Item_Buffer + $01, L7 H  ~3 |! ?, t. X
  71. Button_Once = Button_Keep+$02
    ! g& ]' r! V# [3 _, J
  72. Button_Temp = Button_Once+$02
    0 K& D( p9 l; X# Q* X. d
  73. Button_Buf = Button_Temp+$02
    / m" L' x4 @! L0 Z& C
  74. Button_Status = Button_Buf+$02
    7 D$ Z5 ], p6 D/ O4 p  {
  75. Button_Auto_Delay = Button_Status+$021 S1 m5 p" [# |- Z- C
  76. ;----------------------------------------4 V5 ]4 O& z% c- |+ ^$ u
  77. BUTTON_DELAY_MAX = $180 t6 N& w2 b% z- x; n
  78. BUTTON_DELAY_SPEED = $08* Y; M2 j/ {! Q3 W4 o
  79. - ~& C* N5 c) G3 p% N6 B
  80. BTN_UP = $08
    6 h9 ]+ E0 a; H; n( r
  81. BTN_DOWN = $04
    ! ~8 u# \7 y( |8 ]- i! m5 z
  82. BTN_LEFT = $02
    3 \5 Z0 W8 V  C0 `8 F
  83. BTN_RIGHT = $01$ x7 B1 p. ~) h( j
  84. BTN_SELECT = $20$ g. Z* s( N0 N! x5 u7 l/ u
  85. BTN_START = $108 Y3 w( M  F* l# x4 i
  86. BTN_B = $40
    $ b+ f1 y" \- d
  87. BTN_A = $80
    6 P2 p7 j# L) q1 w6 H9 U
  88. ;==================================================- @! T6 ^: M5 f5 a: D

  89. 3 ^7 E8 i8 D$ I# v! {
  90. FC_Copy_Addr = Button_Auto_Delay + $01
    ; \9 {: B$ V( Z4 Y5 b7 A8 q) C
  91. ;----------------------------------------
    ' n4 o0 d) e; i- }, M, m$ ^
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值
    2 o, i. b+ t/ r* B) O' T6 d& l1 N7 B
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位
    $ {# a2 u- v7 i
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位
      s) h% s$ B9 @' V# |+ k
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位; s) f) S' G' B" f. ~) w' @$ p) _
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位: x& w- K% k- ^' A) L  t2 }" u
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位( M8 `/ a+ v+ J4 B
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位) L4 m" Z- Z% P4 c% u
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位: b1 f% o. M2 `3 i, y2 Y  n3 @) P" E
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位9 U* Z# g: P3 i7 k6 q
  101. ;----------------------------------------
    ! Q/ U* y+ I- a+ R, s! A% W* B' C! v
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式1 Z) S, c7 E2 }5 E2 o8 f
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式. K5 J7 l9 D9 G  d! L! C2 }
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式
    + @" z0 k& G" C, {& }' U
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式$ s& B* m# u2 M/ U
  106. ( V& m2 x$ F" I
  107. ;==================================================# \4 h+ l0 @5 n0 i- w
  108. Rom_Nmi_Addr = $FF! p$ D: o9 |# o( k5 B
  109. Rom_Btn_Once = $F5
    7 [: h0 d9 x% I1 g6 r5 n1 p8 v
  110. Rom_Btn_Keep = $F94 `  z8 Y+ ]/ K9 c! ~# n# y1 k
  111. Rom_Pause_Addr = $25
    8 F) }4 G0 L( u5 k3 a
  112. Rom_Pause_Val = $01
    * k; `: d+ u: w5 o
  113. Rom_Pal_Addr = $07C0
    . O- p( v2 m; o7 k% v. k6 [& ^, g
  114. ;----------------------------------------
    0 ?* o& A, G6 z5 ~
  115. Save_Zero_Addr = $6200
    - h8 h; _% x2 {5 J7 g
  116. ;==================================================& C/ `- R4 R3 ^% n* d2 @) w
  117. ;==================================================' w: d; Q7 n( ~4 g: h4 i/ A' X( z

  118. 7 Y, {2 s2 S  G, y& g5 H( N* q
  119. ;程序入口
    , I0 G! h% X2 h  r  W0 O
  120. Enter:- p. o' k  P6 L1 I% l/ U+ s
  121. LDA Rom_Pause_Addr
    , Y" X/ w- f: e
  122. AND #Rom_Pause_Val6 m- A% A1 X$ D4 c) ?
  123. BEQ Quit_End# F. i. v: J9 R& y' l( K
  124. LDA Rom_Btn_Once
    * e7 F" E; M1 r! p2 c% s
  125. CMP #BTN_SELECT* u4 W" [5 U7 o4 ~2 R' i) E$ e5 N
  126. BNE Quit_End/ Q1 s5 ~9 Y) E1 e3 S- x
  127. PHA) D+ ^. m  b! {" b  Z' I
  128. TXA/ T% C4 [# ?. O% U9 Y9 T
  129. PHA, P' _. U0 S# S( Y2 Q8 v+ P: P  i
  130. TYA+ C8 U$ Q' \, v+ X. x+ {4 |, J
  131. PHA) G& t% E! B( J9 a$ n( z7 l. r
  132. JSR Wait_Sound_Stop% ~- r0 ^* @; t3 A
  133. JSR Save_Screen
    ! v3 }  M1 B+ u5 y6 q$ Z
  134. JSR Program_Begin" q( ^6 C6 t$ z4 N0 d9 u' L# ]" h
  135. JSR Load_Screen/ D0 K$ e# @- |2 g* j+ U
  136. LDA #$10
    ' ?7 k+ P& m" Y- \4 P
  137. STA Rom_Btn_Keep
    ( @1 x: d7 u) {4 b/ F
  138. LDA #$00/ \' {( o& t* J) @7 t* P
  139. STA Rom_Btn_Once# z8 N  D3 |  R2 {+ K; C! \
  140. Quit:
    4 D, a* e: @0 b! N
  141. PLA
    % k3 W) Y- w, t- y
  142. TAY
    " W* ?" l% c, K( f1 K: ^9 `
  143. PLA
    5 q3 r) A  y, ]1 D) o
  144. TAX
    # [5 L8 u# `+ D; |% w3 N  m
  145. PLA
    7 w% h8 {% J( g' N- |  c( ]& W! v
  146. Quit_End:. m- a. y, Z" G
  147. RTS0 s# Y  z' j8 [4 ~, h# R9 b/ b

  148. ! q( I2 H4 Z( W9 ~
  149. ;==================================================0 B" H  G* _; O2 P' J8 x
  150. ;等待音乐结束
    % `0 h6 V. a. T& s  @$ [
  151. Wait_Sound_Stop:
    / K" h' N, k$ ?5 U
  152. Wait_Sound_Stop_Check:
    2 d5 P  B2 h2 `3 _
  153. JSR NMI_Wait/ g6 Q: d. _3 |! _2 z
  154. JSR $F825
    . Q" J9 L7 M; O7 B) k& w% ]
  155. LDA $010A
    , j$ |/ @* p7 t; C/ Z; {& e- u
  156. BNE Wait_Sound_Stop_Check
    7 O; e3 N1 q* o  Z1 v( _! A
  157. RTS  U' u8 V0 S6 u; Q0 q* k

  158. ( \: Y% B" v1 ]( ^  p
  159. ;==================================================
    ' ?) j0 y6 H* b( _* z8 o! L
  160. ;保存屏幕数据
    4 s# m# ~) z' i* j
  161. Save_Screen:& h; u" D8 P( @) T3 l7 c% c4 }
  162. JSR Screen_Off
    " Z% ^6 e/ W6 L, S' m
  163. JSR Save_Zero
    - Q5 R8 k2 t1 B( l7 o1 l
  164. JSR Save_Ram8 r1 d' }  C" M
  165. JSR Save_Ppu
    8 B1 a9 D6 e1 ]' N2 a+ }+ F
  166. JSR Ram_Init
    5 T  X5 u$ n8 B8 w% b1 [
  167. JSR Sprites_Init
    - p9 W. s5 a0 i( _6 s
  168. JSR Clear_Ppu- L, ]: S+ n6 L! P8 q! w
  169. RTS% z: G9 S, W' h) h$ w% P

  170.   K& H& l4 `* Q2 V$ H0 L- n! n3 C4 \
  171. ;==================================================
    $ F% j7 X2 @0 e4 z) N* v
  172. ;加载屏幕数据
    4 X, r6 n9 r4 B1 z
  173. Load_Screen:  \' J6 N; u- z
  174. LDA #$00
    / v9 R  r# ?  P: K, i# e$ S, I
  175. STA $2001
    / ^: f( ^/ f; s. ]. q5 P+ L' N
  176. JSR NMI_Wait# l0 R# B. `6 ^* x$ I
  177. LDA #$02; p7 R/ n2 ^: ?& u' W1 U7 u% M/ j
  178. STA $4014
    9 V0 w' i! E4 r
  179. JSR Load_Ram- ]+ m2 T. e" G- J4 g
  180. JSR Load_Ppu) X- f) j+ T3 n) m- W0 _
  181. JSR Load_Zero3 o8 Y* I' c  a5 W; r8 _
  182. JSR NMI_Wait, H; w( @2 i3 H
  183. JSR Load_Palette
    # c* e8 s1 t) W  `6 D! Q+ D; J
  184. JSR Screen_On0 P& Z0 F- B* F+ c7 |
  185. RTS4 z9 [* ?2 E0 W5 M: V

  186. 1 @' k3 n8 q+ a
  187. ;==================================================
    : g6 a2 |, P% h
  188. ;关闭屏幕
      K0 b: i0 t) X, s- L" ~9 Q6 J
  189. Screen_Off:5 N9 J" e: C) z5 E
  190. LDA Rom_Nmi_Addr
    6 i& {8 Q% a# W# l: ?- a
  191. AND #$7F4 A+ g  n, v* ?: }& a
  192. STA $20008 Z1 \, B' P+ q/ H% {8 w
  193. JSR NMI_Wait
    ) G7 w5 E4 E' t9 u8 u
  194. LDA #$00' o2 a- l, J+ ^
  195. STA $20009 N( }+ ^6 f3 U
  196. STA $2001; S6 _9 k5 X9 a: T# j. x- \
  197. RTS
    % ?" P. {2 F4 A$ U5 ?
  198. 4 j+ y6 b* t' S: J: Z
  199. ;==================================================
      h3 S4 S1 o; [8 ^8 [! i5 W
  200. ;开启屏幕! }5 O5 H/ I3 ?9 Q( D
  201. Screen_On:: }7 o0 M1 Y% ?9 _1 s2 H9 e: |
  202. LDA Rom_Nmi_Addr2 u: Z" [6 f+ ]; ]: {
  203. STA $2000
    3 a6 U' ^. O, }
  204. RTS
    % C; Q3 d/ `$ \5 R

  205. 0 C6 H) y" y3 Z3 c( K
  206. ;==================================================
    " R/ A* b( R( E. u" }
  207. ;清空占用RAM
    * L  o/ E# _' ?- B
  208. Ram_Init:
    * ?9 u: p6 n% T4 L% r# B" j
  209. LDX #$006 S8 ~* ?' J; j1 Z1 u, G
  210. LDA #$00
    2 U. C$ A# {4 A* }- I
  211. Ram_Init_Set:
    ; i5 N$ n, F, x4 _
  212. STA $00,X
    % G/ g3 `/ B# a# Q' W  C
  213. INX2 [: Y1 F9 w/ y6 w. ?
  214. CPX #$40
    ' O" @% R- g  f" V( g2 w
  215. BCC Ram_Init_Set, k5 c; V) p: w5 k" a" D4 @
  216. RTS( c$ L5 P3 Y5 K' D

  217. . p2 j$ z* j+ ^+ {6 S" A. w+ H1 {
  218. ;==================================================
    8 b1 X$ M! Y) v
  219. ;清空占用RAM& K, ]6 d4 V3 A  K- Q3 g) H2 d, |( i
  220. Sprites_Init:
    1 u0 n: q1 g- L! b
  221. LDA $2002
    ! Y. v0 ^3 f7 X2 }
  222. LDX #$007 g  o2 p; D6 v- ~$ t0 }9 P
  223. STX $20032 [7 }  @& I, ~5 P4 {, ^
  224. LDA #$F8% |5 L! h+ l6 I8 |9 m( M+ M
  225. Sprites_Init_Set:- K0 G2 w6 y# N1 A, z
  226. STA $2004- E$ o+ i8 R4 L3 Y  H1 Y* y# B) C5 {
  227. INX
    ' H1 ?- ^) E" K3 i1 i+ j. U
  228. BNE Sprites_Init_Set6 s# c! ~' Q5 Q& N* F
  229. RTS; s$ G; ~) W7 Z, d( L# [
  230. 1 G. F1 S0 v& m2 U2 {
  231. ;==================================================2 T, U% M2 X( Q2 a6 ?
  232. ;保存零页数据
    8 M& F$ ?2 E) X3 c7 ^# Q3 E
  233. Save_Zero:2 R& A; ?2 R  Q
  234. LDX #$00+ T* s: ~8 Z0 G( ~
  235. Save_Zero_Set:& @6 t% ]% v# V% H6 v: z
  236. LDA $00,X
    6 S/ ^1 L% g& L
  237. STA Save_Zero_Addr,X
    1 }4 o* x6 |. _% Z! T
  238. INX
    ; j; a+ T. F1 ?. s1 J
  239. BNE Save_Zero_Set
    - n: k* L1 ^- J; ^0 ]
  240. RTS
    $ I+ G6 H$ c. V: O. m
  241. 6 O7 P+ K3 [5 M1 O3 d# ^( p
  242. ;==================================================
    ' k3 K9 b7 J$ B: X
  243. ;加载零页数据* Z: x, q) a0 Z  k* W
  244. Load_Zero:- j& C, C& T6 x
  245. LDX #$00
    $ R* M+ t8 f% \2 D4 H
  246. Load_Zero_Set:
    " t3 `/ p! W& a! B. g5 T$ O
  247. LDA Save_Zero_Addr,X0 u  g( E) g2 L* V8 ^- U
  248. STA $00,X
      \! c- t8 q1 w1 i1 t7 p
  249. INX1 c( t3 Y0 j, P
  250. BNE Load_Zero_Set0 K/ h$ s1 Y7 ]; B+ y
  251. RTS5 K& s2 L' f5 ?. F& @9 Y
  252. $ V3 h1 W/ c6 o+ Y' g
  253. ;==================================================
    + o) T* @& B' S
  254. ;恢复调色板# w8 G. ~$ D+ P" ?# H1 T6 U
  255. Load_Palette:7 `7 l9 x9 A# c: h
  256. LDA #$3F+ C6 |) m9 V. d! q6 D! x& J
  257. STA $2006
    ; }0 d/ q" C( [7 }8 q, ~0 x4 p: J
  258. LDA #$00
    & B# Y; y  H8 Q: z2 v$ j( b4 G+ v
  259. STA $2006
    : H/ Y7 W1 i% [  h/ S% L3 v
  260. LDX #$00. `, K( q7 A" L- T+ E$ B( u: u
  261. Load_Palette_Set:
      W% G  l6 n& V" q" m
  262. LDA Rom_Pal_Addr,X* m3 h1 W0 L( o, r# z
  263. STA $2007: ~7 i2 }1 i8 D! M" r9 B' E
  264. INX) x% V  \9 Q* v
  265. CPX #$201 r; K) v! L3 m1 \9 g+ n4 C
  266. BCC Load_Palette_Set
    # s% e0 {) _' E) ?0 w6 D7 e
  267. RTS
    # q2 `+ I, O7 F3 J6 n0 J- x4 n
  268. 6 T/ {0 t* C4 [# t1 h4 I& H
  269. ;==================================================
    / C0 s5 @5 n+ K9 j& z5 A! ~
  270. ;==================================================& k  K# y6 a$ W2 p
  271. : i' o1 l. x4 f& w
  272. ;==================================================; J' J0 J% E7 d4 X2 y
  273. ;程序开始
    $ X4 [' d$ \2 T$ E) y! c- ~
  274. Program_Begin:
    # t1 R' r& x* u/ i) u; Q* x8 \
  275. ;==================================================
    6 i- N- }4 D8 W" Q0 h2 |
  276. ;图形设置
    9 C  }9 Y" n' {  K& ?
  277. JSR CHR_Set
    $ C) U) ]" m  h
  278. JSR NMI_Wait
    0 w  V, c( B5 h3 X, S+ g
  279. JSR Palette_Set
    + a* h! P9 r3 t3 N
  280. JSR PPU_Data_Page_Show
    , c" i7 L$ y% q( ^) x) v7 }

  281. 8 Z/ z% @, N9 D' A( a4 `
  282. ;==================================================' j3 S4 U0 F& K
  283. ;开启显示3 V5 T% ~% a  L' Z
  284. LDA #$1E7 h" E, _& o+ E. N& a6 @* ]
  285. STA FC_PPU_Status
    3 r" j2 ?4 Z  c$ ]0 O
  286. & o$ t9 }% c# f+ Q* z( H
  287. LDA #BTN_SELECT5 o9 M7 a2 A0 q7 y: c! p& j
  288. STA Button_Keep
    6 M& d" r3 J. C$ |
  289. ;==================================================/ Z1 l( }; w  C/ N- L  ]8 b
  290. ;模拟NMI循环+ Z+ o0 E' G( P' [& Q
  291. NMI_Loop:) k! R3 G+ m: @: R& I
  292. JSR NMI_Delay8 z& T$ T: R, G: D% O/ ~  Z  N
  293. JSR Button_Process
    . P2 e; p2 a( R% m" ^4 f
  294. JSR Button_Auto_Press  q% Z; H# w( W
  295. JSR Change_Select_Item: X5 }8 @: v2 Y
  296. JSR Change_Function
      J  |. b* C! l) Q8 n7 W- d$ x
  297. LDA Button_Once
    $ Z2 [  ~& Q) s3 z9 E* q. Q) Z! m
  298. CMP #BTN_START1 Q  L# K" ^3 ^( }: v
  299. BNE NMI_Loop
    5 d& _, @+ M% ?0 I7 D! W) Z
  300. RTS& w, p1 F  R4 z0 S  `, \/ `8 ]
  301. : C' r/ i2 s8 D  C. g
  302. ;==================================================" a5 o! U' I6 m) @% U! O: s! _) x
  303. ;模拟NMI中断, O% c/ l4 k7 m
  304. NMI_Delay:
    * F1 I- q0 R+ D$ Q7 ]
  305. JSR NMI_Wait7 _4 k3 f2 ]8 F# s
  306. JSR Show_Select_Cursor) U: V/ T: _+ x  `# h
  307. JSR FC_PPU_Process* s- f& L6 I- m5 t/ t* b: q
  308. RTS( W- D* `7 Z5 }; K( @- X) i
  309. 9 N1 T8 O/ T" t
  310. ;==================================================: S2 x) D/ [9 f; U6 ]/ K. O3 [
  311. ;等待NMI中断
    5 g- ?7 r/ M. @8 B' o" |( x
  312. NMI_Wait:* ?% h; ]8 p5 ]
  313. LDA $2002/ @6 s( ~7 a& P" W. p) ~3 F5 L
  314. BPL NMI_Wait
    * N! F2 l! L9 N1 `6 u
  315. DEC FC_Time_Count
    ; m* }; S# g7 f6 Q: ~* n
  316. RTS$ ^6 o) L" k; Z* d. j6 m2 ~5 L

  317. - z$ Q& W4 d8 `( d8 p& E* |
  318. ;==================================================% Y$ @- O) T2 g9 X/ L4 H
  319. ;PPU写入模式配置属性* ]& w# ~4 n' x5 e* }
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入
    ! n; R1 ]* V  L2 r" Q% L2 j" f
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除
    : ?; ?, V. Z- ?- e3 `7 J' y) u& S4 ?
  322. ;-------------------------------------------------
    % E3 E3 F* z$ o, {2 u
  323. ;PPU处理
    + Z2 J0 [$ h6 @* H  e
  324. FC_PPU_Process:' `: m# u! ?8 t7 K. _, }! {+ L
  325. LDA FC_PPU_Buffer
    " c! w3 a# m, P' t' g, \2 l' ?
  326. BEQ FC_PPU_Process_End! }5 v! [' `4 k  ^. h7 o
  327. JSR FC_PPU_Process_Beg4 v; @3 Y( O! u7 C4 T, D& ~, _
  328. FC_PPU_Process_End:! k% @7 a7 A1 k* Z
  329. LDA #$003 R7 Y) W8 y+ b8 O
  330. STA FC_PPU_Buffer( r+ ]" u2 F4 h2 Y) x8 J
  331. STA $2006
    1 ^$ g  ~. E2 }* h8 F
  332. STA $2006% ^* I& T' G9 d- c# s3 X' e3 Y3 O
  333. STA $20058 z" Q. F7 E" v9 \, Y  V5 ?$ b" r
  334. STA $2005  l: K# E& h" x- U; J
  335. LDA FC_PPU_Status6 E: q9 J; B' X/ U4 L
  336. STA $2001  M0 B- y* q' G* G# O9 k/ s1 s
  337. RTS  _/ ]% T9 k, X1 E9 {* H/ ~4 Q
  338. ;----------------------------------------
    9 W0 _: N7 T. D  P
  339. ;PPU处理开始$ K  i* E# m( M/ {7 s
  340. FC_PPU_Process_Beg:! `( `$ W1 y. m8 V
  341. LDX FC_PPU_Cursor
    - U/ R9 X1 S% Z6 @; K9 {, D' e
  342. LDA #$00
    4 i5 v: U( M9 b& z+ i! Q* L
  343. STA $2001
    4 X/ q& z& {! \7 r; g; Q
  344. STA FC_PPU_Buffer,X
    - S& L3 D: X$ O3 W# X* I
  345. STA FC_PPU_Cursor4 m8 m4 K2 w$ X8 W* A4 W$ W2 `" k
  346. LDX #$FF
    6 W, g" B/ X; Z  w" C
  347. CLV. Q5 Q8 H. [/ u
  348. FC_PPU_Process_Mode_Select:
    + W1 }8 W$ Y9 r/ \) _
  349. INX
    ( l" k# N4 U1 X, a, F9 k9 ]3 [
  350. LDA FC_PPU_Buffer,X, n  m6 n- @! s$ U& J8 u
  351. CMP #FC_PPU_MODE_CNTL. Q1 d  V6 ]! P3 B8 ], ]
  352. BEQ FC_PPU_Process_Mode_CountLine6 X8 v4 v! A3 ^# x- ]; ?
  353. CMP #FC_PPU_MODE_CNTC
    9 n: z- b7 x+ O9 ?& ~1 }/ ]: ^' n6 G; A8 p
  354. BEQ FC_PPU_Process_Mode_CountClean% ^" @) c2 W6 c  M% u
  355. RTS6 w7 t2 w" s  K( x
  356. ;----------------------------------------
    : q# a! w4 t/ j
  357. ;计数行写入模式/ z8 K/ m+ V, s- g4 `
  358. FC_PPU_Process_Mode_CountLine:
    " a6 o4 @: |3 H' ^/ K0 D
  359. JSR FC_PPU_Process_Set_Addr_And_Count2 O0 [9 Z! u0 w4 K
  360. FC_PPU_Process_Mode_CountLine_Write:
    6 h" q" l0 ^8 l; n
  361. INX
    . y2 ?1 \+ p6 K+ ]/ J
  362. LDA FC_PPU_Buffer,X9 |/ |/ H# _2 o4 [5 |
  363. STA $2007
    ! f/ }2 Q* u2 F# j, S0 B
  364. DEY; c* h7 D5 `# u4 P+ d
  365. BNE FC_PPU_Process_Mode_CountLine_Write# A- s1 p$ F7 S. T$ b
  366. BVC FC_PPU_Process_Mode_Select0 y! @' A, f5 f6 t/ N$ |6 Z2 i0 }
  367. ;----------------------------------------" ?" w7 m3 d: V
  368. ;计数行清除模式
    / I) P' n5 T' h7 p0 j% ^( O
  369. FC_PPU_Process_Mode_CountClean:0 ]' }$ f# [1 Z* h- @4 _  f
  370. JSR FC_PPU_Process_Set_Addr_And_Count
    ' x/ I6 d  ^: k) B+ B+ U
  371. LDA #$00
    . o/ O: d4 h+ a$ _6 f) U" D6 Z
  372. FC_PPU_Process_Mode_CountClean_Write:( L* g  H0 H, p( q) X+ x4 Z
  373. STA $2007
    . W' k% q/ C! w6 p- V* f
  374. DEY+ ?4 {6 x* d/ V/ M0 ]
  375. BNE FC_PPU_Process_Mode_CountClean_Write1 r9 u4 J; Q7 ?- J
  376. BVC FC_PPU_Process_Mode_Select5 U& U4 i/ e2 s
  377. ;----------------------------------------8 D7 ?' h! w4 X6 l+ M2 G
  378. ;设置PPU地址和写入计数
    4 n  d% N! R. j; {& n4 j
  379. FC_PPU_Process_Set_Addr_And_Count:
    + H/ [, b/ ?& y$ |: t  X
  380. INX
    1 b8 Y! }9 y6 n  W! n9 W. l
  381. LDA FC_PPU_Buffer,X7 R% A! b/ B& i0 C. Q  y: x4 k
  382. STA $20065 k+ c4 @( p; b9 \( [! u5 ^
  383. INX# Z- I/ M! }# {
  384. LDA FC_PPU_Buffer,X
    7 Q$ H: b; i& ^
  385. STA $2006; R: u2 I2 v$ X) w
  386. INX
    ; N# X4 ^- [2 `, b" ^& N
  387. LDY FC_PPU_Buffer,X
    3 F* x; }' b) d& o4 t" h3 l
  388. RTS
    / s+ \; O! A9 k% `6 B

  389. 7 D3 b# |' X* l: o) w& x. V
  390. ;==================================================8 S. u; z2 N! H
  391. ;设置CHR图形# ?: x) A( W6 N$ w  {" d3 f' B
  392. CHR_Set:( ^- z, R6 _, E6 ]: [5 Y- m3 q+ d
  393. LDX #$05  G9 M/ v+ F4 R& e! |
  394. CHR_Set_Data:; J7 \6 u4 e- i- j6 n: E( F
  395. STX $8000# Q2 E! x" i1 }3 P) ~5 g
  396. LDA CHR_Data,x, Y- I' r1 X% w% Y6 q* |) X
  397. STA $8001! g) [* h+ G5 b; Z
  398. DEX
    ) z! n; k) b( V/ V
  399. BPL CHR_Set_Data
    0 H6 b% \& t4 d! @8 M1 z
  400. RTS( B1 p: R% J' U
  401. ;----------------------------------------
    6 g& W- x* y* N: R
  402. ;CHR图形bank数据
    4 A& t) [& R1 [% j
  403. CHR_Data:
    ! D  V5 S! o; U8 s* d
  404. .BYTE $00,$00,$00,$00,$00,$000 ~' e3 I/ c4 x$ u( ?* s1 Y, |

  405. 2 d" L8 x$ B2 z7 q- R) n
  406. ;==================================================1 s2 O" w1 f7 v$ ^' O( u3 R
  407. ;背景调色板设置
    , e$ R  a+ M4 I$ J) M" Y3 ?4 _
  408. Palette_Set:
      ~$ @, {) |7 u  B0 _9 Z
  409. LDA #$3F
    / o- [1 J) Y$ w/ ?
  410. STA $2006, d! b. k; K) W0 L1 f+ w3 q+ U. v
  411. LDA #$00
    ) E: H/ P% s- d% d% Y
  412. STA $2006
    . }' ~2 K1 d( O4 ]5 k$ j
  413. LDX #$00
    + F( `2 _' Q8 G3 {6 H5 f# a) G% c
  414. Palette_Set_Data:
    ; I% A& @! B. j) I& B
  415. LDA Palette_Data,X
    * {- o1 G& j1 [; E1 I8 C1 q* W
  416. STA $2007% x) V5 w8 X2 y0 \0 F
  417. INX% d8 N4 D5 R1 Q& {
  418. CPX #$205 K3 F, {( u, s4 I! l: ]$ j& B
  419. BCC Palette_Set_Data
      v8 h4 f( Y( y" D* q
  420. RTS
    2 S. x3 j1 f2 A" e9 Z
  421. ;----------------------------------------
    , @8 j; X* [/ f- z' r, s
  422. ;背景调色板数据9 A% i0 T- G% N( O( |# ~
  423. Palette_Data:9 j0 r- N- y( x# v$ Q
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A6 z2 \# Y1 ?7 n$ \! E
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A  X) R# k$ M! s. [+ e/ r3 u

  426. 3 e* j6 d. v& A. F7 v4 S

  427. 7 u' F' O9 w% k* E
  428. ;==================================================0 P! w( O4 f! L2 e* e- F
  429. ;按键扫描+ x8 J6 x1 _$ z
  430. Button_Process:4 k0 a  k8 U, U/ ~! q
  431. LDX #$01
    * D# D2 _! U# @% r& y
  432. Button_Process_Beg:
    ! f8 t3 Q3 x0 X, a  J' I
  433. JSR Button_Scan  N, k: ]9 Q$ D: t
  434. LDA Button_Keep,X' d1 T/ _! Q8 x3 V- N5 l
  435. STA Button_Temp,X. x8 v- [' y$ L! n4 T& n, \
  436. JSR Button_Scan
    4 m2 V5 f. G# o; A
  437. LDA Button_Keep,X# p- w9 R" r; d! a
  438. CMP Button_Temp,X: j0 X" @' S! a# f1 L* V
  439. BEQ Button_Get_Once0 e& \& a' ?4 l
  440. LDA Button_Buf,X
    / V  [7 ]/ @5 {5 Z+ a) F3 S
  441. STA Button_Keep,X' ?! D8 p+ i9 e. P  Q8 k
  442. Button_Get_Once:
    " r# e3 I- W- L
  443. TAY5 Z; ], X: r- t
  444. EOR Button_Buf,X; h" j6 U6 F0 f
  445. AND Button_Keep,X) j  E; O2 J! {; D0 a: i: n. S4 T
  446. STA Button_Once,X
    / t" R5 K5 p, C8 |+ b& i
  447. STY Button_Buf,X
    " U* C7 @8 M; ~
  448. DEX
    6 A4 d& Q$ |. H* r  E
  449. BPL Button_Process_Beg
    . H0 [, T- m9 v  \9 X
  450. RTS
    " Q6 p5 N3 M! w4 ~0 z
  451. ;----------------------------------------7 B, w' h2 i( A9 K" f
  452. Button_Scan:4 Z+ v$ Y. s7 E* T4 M7 O2 u
  453. LDA #$01! G; F, f2 L/ `
  454. STA $4016
    - U8 G4 ]! s/ N7 Y& T" e
  455. LDA #$00* _5 z/ H7 d0 f: P, q, U: w
  456. STA $4016
    1 y1 a! x, Q; I( n9 m
  457. LDY #$08( A( ^/ C- \0 T# h
  458. Button_Value:
    , |% f0 Y: B& S: B+ D$ _! S! |7 O
  459. LDA $4016,X. ~- m* g1 j- @  Q- B$ n! t
  460. STA Button_Status,X
    5 P: \$ F, [. }$ h  o3 o
  461. LSR/ e& Q' P3 X; Z2 U- v, V( S! H
  462. ORA Button_Status,X% K0 C9 {  F4 H) Y
  463. LSR3 j: \1 r* j3 `0 a0 m( w1 v
  464. ROL Button_Keep,X% _  \3 y7 h8 c8 M" E' {2 l' o/ Y
  465. DEY" y0 J7 N0 {0 D8 c! S( I0 F  F
  466. BNE Button_Value3 C. u9 Y8 Z# v6 L' T/ r! P
  467. RTS
    6 H% R! ~) [) A+ a$ f7 X

  468. ) L4 \7 R3 E7 s7 @2 O+ B8 e
  469. ;==================================================) k5 Z# A; b- n0 Q
  470. ;按键自动按压, @- s- w0 j$ \
  471. Button_Auto_Press:
    / d) f: k% h: w
  472. LDA Button_Keep2 h! `+ Y! L( f: ]0 _9 h9 O) z+ v
  473. ORA Button_Keep + 1
    + O' O' s8 `# ?
  474. BEQ Button_Auto_Press_End
    % C3 u' }# W# z7 t+ w" s# i
  475. INC Button_Auto_Delay
    ! {# Q/ l2 \, e  P+ b
  476. LDA Button_Auto_Delay
    # f2 ?2 T5 D: ?- q) O
  477. CMP #BUTTON_DELAY_MAX
    5 _. S: L, N2 n$ x
  478. BCC Button_Auto_Press_No_Active
    ; M, U( S4 q& ?0 T4 T4 P1 B, s  N- b
  479. LDA Button_Keep6 B7 a) R0 |- b) h
  480. STA Button_Once2 W* p" z/ o+ I, x
  481. LDA Button_Keep + 1! u5 z" u. U/ Z
  482. STA Button_Once + 1
    ) q- U4 d% X, t9 w8 H6 j
  483. LDA Button_Auto_Delay
    2 d; ^2 [+ \( l) ^4 ^
  484. SEC1 y! u2 ^% v8 `9 q! ~
  485. SBC #BUTTON_DELAY_SPEED5 l: i1 }( i- K% z4 J6 r- z
  486. STA Button_Auto_Delay
    , ^# M) f8 r7 D3 y+ S9 W1 L+ I
  487. Button_Auto_Press_No_Active:
    * N. P. V; ^# r* r
  488. RTS
    + ~) ?8 R: F. e3 D
  489. ;----------------------------------------& Q/ n9 n, \5 S6 l8 B+ Z
  490. ;未按压按键
    . q4 ]$ e$ S0 w. G( O" Y
  491. Button_Auto_Press_End:: E# ~# O8 l9 p6 M  ]  a9 {/ a
  492. LDA #$00
    % x- Q( u2 O# u4 u1 T
  493. STA Button_Auto_Delay3 L+ v3 c! s5 c1 `! G6 \
  494. RTS# B7 s% r- d7 p* |: P4 r

  495. ) g0 |6 F( V2 L9 }0 k4 H
  496. ;==================================================5 Z  I% Q6 ~& I# P0 ?9 C6 [
  497. ;设置PPU写入模式" R7 z$ {) d  P! e
  498. Set_PPU_Mode:) @1 A. o5 F% e
  499. LDX FC_PPU_Cursor( z- h/ Z  D: n2 I5 E. `
  500. STA FC_PPU_Buffer,X
    / J! \$ Z" O9 H; r5 f! c3 T5 ?" o
  501. INX
    6 J, q! K3 ^* W4 f3 `3 }4 d' w. U
  502. STX FC_PPU_Cursor# H1 E. y: @$ g( R1 K! J
  503. RTS: Z& i. g3 P( r( u, {

  504. 6 w* j) d. l* `# z/ x! h) I5 N% i6 p
  505. ;==================================================! P$ X- O  c7 A! m# l2 l
  506. ;写入单独一行文本
    7 l' @# f8 g& S3 _7 I9 I! m
  507. Set_Select_Addr:
    ( q2 T7 ^: ?4 A# T+ E
  508. LDX FC_PPU_Cursor
    / }9 R1 }( v( f
  509. LDA FC_Select_Temp- X* X/ u* J7 L6 z
  510. ASL
    : h& i9 j8 q* k
  511. TAY0 C6 L) K5 D2 q0 A+ N. U+ D0 [( q
  512. INY
    4 T; `- w, B% {: I2 v
  513. LDA Text_PPU_Addr,Y
    2 o2 K. h+ Z6 E
  514. STA FC_PPU_Buffer,X. y7 |8 Z3 Z3 |
  515. INX, Y& X5 y( }# b6 e+ \  q2 l
  516. DEY
    7 x! q3 d3 G& x- X6 X/ b1 K
  517. LDA Text_PPU_Addr,Y6 p8 c$ o$ t, w5 ?
  518. STA FC_PPU_Buffer,X
    $ i; i+ k- {# E) w+ I" M
  519. INX
    3 m7 T5 E+ C# C3 \: z5 V
  520. STX FC_PPU_Cursor
    - q$ K- A9 q( L; Y7 P0 G( K1 W
  521. RTS5 t" }% ^2 M% f  V, w
  522. & O; c! T3 c1 y- ~3 G7 y( [! i
  523. ;==================================================
    . b+ e. @* n; g+ t7 M4 E: V
  524. ;写入单独一行文本% y6 q9 l/ @: m9 W+ n  G
  525. Set_Select_Data:9 G4 @7 f& A; ?
  526. LDA FC_Select_Temp4 u9 l2 p! W% X( @
  527. CLC
    ! D$ x- n3 f  l- c2 {
  528. ADC FC_Page_Cur9 J+ E% g1 D9 v) k& j3 n( p8 z
  529. ASL7 c7 i' t! M( B+ l" C6 w6 B9 ]$ X: q
  530. TAY
    3 f$ R9 O' Z/ v" m* z: z5 \: k
  531. INY
    * Q0 u: {$ ^- C1 q
  532. LDA Text_Data_Addr,Y9 y( O) E5 Z( b3 W# m& u
  533. STA FC_Data_Port_A_H4 Q5 ?& L6 P. t, @  d0 S
  534. DEY) r: l, P( v3 w4 k) m% @7 I
  535. LDA Text_Data_Addr,Y
    4 ^" Q  `& F4 [2 @% K
  536. STA FC_Data_Port_A_L, l% g& ^# f2 \7 ]  L( q. ?
  537. RTS
    / X3 ]' ~4 \1 L; Y
  538. # e2 j4 r5 a$ B
  539. ;==================================================
    6 c9 E; E6 `5 C( w! t
  540. ;清除旧文本( a* K% P8 |0 \  k+ o, M6 d3 a
  541. Set_Select_Data_Clean:
    % }8 x+ W# E" S0 T( v
  542. LDA FC_Select_Temp
    : m! n. Q( ?2 `( D8 o. V- \2 u  v
  543. CLC
    4 G" i4 o' C* m0 g; x2 e& E2 E; x
  544. ADC FC_Page_Old+ V$ y! ?4 g/ K! P0 c! S* H
  545. ASL4 y3 I$ B+ w. D3 c
  546. TAY
    " e% Q! M" `! e8 l
  547. INY
    5 R. V- C: Z+ F& C3 m# \  c
  548. LDA Text_Data_Addr,Y5 l2 M  P7 `, Q
  549. STA FC_Data_Port_A_H* s2 X8 x2 B$ _5 \. j
  550. DEY+ x& v2 y& Q2 g
  551. LDA Text_Data_Addr,Y( f* D3 o; |* Z, f1 G
  552. STA FC_Data_Port_A_L
    0 @- [& z6 C+ F2 W* f  z. ]: T
  553. RTS
    & k9 H' C: ?" q/ r# r

  554.   q" ^* T- F/ ~& L0 k% P
  555. ;==================================================
    , B6 ?! w% |. E+ l* i
  556. ;写入单独一行文本
    9 e8 M( W4 b) x6 k5 U3 z  l4 H( p
  557. PPU_Data_Write_Item:
    ; z" V( Q: M" @$ H4 K# b
  558. LDA FC_Select_Temp
      P$ x' X. H7 z4 `+ b9 N! V
  559. CLC
    % v. l- w0 N3 p/ l
  560. ADC FC_Page_Cur8 h2 m4 N1 W/ w0 ~/ o1 b
  561. CMP #FC_ITEM_SUM
    1 N; |0 p/ q. _9 k/ F: }
  562. BEQ PPU_Data_Write_Item_Set
    : d9 N" U5 W! g0 H) y2 a* L, B2 H) I
  563. BCS PPU_Data_Write_Item_End. f9 V; g( ^1 `! q4 v% p1 H
  564. PPU_Data_Write_Item_Set:
    # c- f  G! L9 S, p
  565. LDA #FC_PPU_MODE_CNTL* {1 \' `! |5 K
  566. JSR Set_PPU_Mode/ J, m. [# @( P# [# S8 h7 G
  567. JSR Set_Select_Addr* L1 j* `3 m- o, L4 c  u& R( \
  568. JSR Set_Select_Data" j3 i/ D) z5 R6 u+ D
  569. JSR PPU_Data_Write_Line
    6 I( I% N  W3 G; M! I0 n4 F
  570. PPU_Data_Write_Item_End:2 T  B) K2 v! H; e9 O
  571. RTS, Y* r2 c7 w5 X' c6 S

  572. # ~$ _4 |7 S& g7 G; u9 ~7 M
  573. ;==================================================, f! n) s9 O) p$ z1 a- D
  574. ;清除单独一行文本2 ]* i+ ~) a, M$ C$ d( a
  575. PPU_Data_Clean_Item:
    7 b3 n5 b1 u+ \. ^/ @+ R9 ~9 ^' v2 t
  576. LDA FC_Select_Temp
    3 x; s' D* P* Z9 a: W
  577. CLC
    ; n& H2 m! K; Q$ b
  578. ADC FC_Page_Old
    & ~, D/ n" r( w. Q
  579. CMP #FC_ITEM_SUM  i- V' `: e( O5 v; e
  580. BEQ PPU_Data_Clean_Item_Set& I) d; @2 R9 [) g+ F; d1 l8 y
  581. BCS PPU_Data_Clean_Item_End9 b2 N9 v+ s4 V9 i" r
  582. PPU_Data_Clean_Item_Set:
      g& ^" x9 M3 w) |) u% |& z
  583. LDA #FC_PPU_MODE_CNTC
    & d% b! p$ p& `- N+ S3 V
  584. JSR Set_PPU_Mode" M8 w8 B  g: T( s; r' K: E6 }
  585. JSR Set_Select_Addr
    " _4 B( O6 v4 P# K/ @" x$ \1 ~
  586. JSR Set_Select_Data_Clean9 H- @- W+ [2 i$ `: Q
  587. JSR PPU_Data_Clean_Line
    * F7 P4 i1 Y3 ~
  588. PPU_Data_Clean_Item_End:) M+ a8 s& y6 m0 |: d- L- N
  589. RTS; a& E$ J; d5 a% S
  590. 2 [* X/ w5 w2 Y
  591. ;==================================================% a9 G" M. f  f$ F. s& U: t
  592. ;页内容写入5 y& c( O" e. U' A6 j% c8 C- J9 c! m
  593. PPU_Data_Page_Show:/ [/ a- S7 h4 u5 u' \+ q- w2 d
  594. LDA #FC_PAGE_SIZE
    8 X% {2 K4 J, x
  595. STA FC_Page_Item_Count
    8 D* A+ x0 C# o* ~) y
  596. LDA #$00
    % S2 Y; z4 D) W* t: B
  597. STA FC_Page_Item_Buffer
    $ r% \2 `1 _# s; p( W' @
  598. STA FC_Select_Temp
    1 ^/ l' b$ q: L
  599. PPU_Data_Page_Item_Set:$ |; m% b7 w( H0 S8 d: _/ c
  600. JSR PPU_Data_Clean_Item) Y" X. W) x# L/ c' U: K3 @
  601. JSR PPU_Data_Write_Item
    % m, m. }3 C2 ^6 B- R
  602. JSR Function_Status_Clean
    % z( W1 T2 x* h) j0 E
  603. JSR Function_Status_Show
    ' Z: f9 {% O8 A  L
  604. INC FC_Select_Temp* v, q% }  M3 x' i. O
  605. INC FC_Page_Item_Buffer0 U4 ~. q  L2 C- H+ W2 U
  606. LDA FC_Page_Item_Buffer
    1 G- P2 z3 q# a6 U
  607. CMP #FC_PAGE_BUF_SIZE
    # R" T8 {( D! }  V: x9 N
  608. BNE PPU_Data_Page_Item_Set_Check, Z( X* F! v* u2 b6 y! _: f
  609. JSR NMI_Delay
    ) M7 Z+ y! W- B1 M* H
  610. LDA #$00; [5 P0 b' k, ~- g# a7 j; ?- l: u
  611. STA FC_Page_Item_Buffer
    # L* Y6 g. U. S7 Z  B9 Z4 C
  612. PPU_Data_Page_Item_Set_Check:" Q% l! ~% N' I
  613. DEC FC_Page_Item_Count8 {" D% L$ X; b+ n- ^6 G5 |, c
  614. BNE PPU_Data_Page_Item_Set' B, }* |# v0 [+ g9 A2 @
  615. PPU_Data_Page_Show_End_Check:4 R, ~8 w: U9 m& ]8 D
  616. LDA FC_Page_Item_Buffer
    # {8 _# O5 w% g; W6 x
  617. BEQ PPU_Data_Page_Show_End
    0 y3 Z: z1 n) [% z" ~! [, d
  618. JSR NMI_Delay# f/ j* c; }6 ^
  619. PPU_Data_Page_Show_End:+ E6 |- v- x2 k
  620. RTS
    / i& ]1 h& ]2 P

  621. / s  v) A7 G3 E- |
  622. ;==================================================5 u/ X# B5 _& i7 k  o& x
  623. ;PPU单行数据写入接口% e" A# s4 U. a3 x' N. o# W2 b
  624. PPU_Data_Write_Line:1 _$ b" v  Q( p- m2 h; F; C% y. {
  625. LDX FC_PPU_Cursor, E0 r9 m, p7 R* M% l7 J
  626. LDY #$00* S( L5 k* c) Q  c$ d8 f: {6 T
  627. LDA (FC_Data_Port_A_L),Y3 ]8 I4 l0 P, ^' T' M( {+ ]( i' H
  628. STA FC_PPU_Buffer,X4 N: A5 Y4 _. V' d/ P, Y2 M/ d
  629. STA FC_PPU_Data_Cnt8 a' w" D; Y5 T- M
  630. INX
    $ F+ e+ P4 Q' u! t; @" b2 N; F5 p
  631. STX FC_PPU_Cursor  `1 Q. A; C+ a* Z. P5 H- N
  632. INY
    , M* x7 K2 I& J! I% T1 T# A
  633. PPU_Data_Write_Line_Set:
    : L% M8 u/ S  g; G5 X+ y8 W
  634. LDA (FC_Data_Port_A_L),Y
    5 S) n+ t- R6 X  A0 c3 [
  635. TAX
    * T0 m9 q( y5 h- `+ n4 }8 A4 V
  636. LDA Char_Rom,X
    ! K9 j+ O' ]# E) \/ Z0 C. L
  637. LDX FC_PPU_Cursor
    ( W3 J  g& J- x! c; C7 f* i- q
  638. STA FC_PPU_Buffer,X
    " D/ ~, W, g) L5 M/ J
  639. INX
    + J. m  |  i) k/ y8 ]
  640. STX FC_PPU_Cursor, p9 w2 \4 G6 q: W/ l
  641. INY
    7 q* g. R: D% h3 m/ w
  642. DEC FC_PPU_Data_Cnt) s; ]4 ?% `/ f6 B! Z4 y, |
  643. BNE PPU_Data_Write_Line_Set9 `; i" J3 \/ T9 ~) n: `3 M  _
  644. STX FC_PPU_Cursor5 |: n* G2 D; ~: k# S: t
  645. RTS
    : Y  ?4 r! @, A9 s
  646. 1 _: J0 L( O/ u, |
  647. ;==================================================! m4 X- }7 y5 v; _
  648. ;PPU单行数据清空接口
    $ j* |* {0 [  P6 j
  649. PPU_Data_Clean_Line:
    5 |7 _7 w- i6 A* {7 Z1 n
  650. LDX FC_PPU_Cursor
    ; c) b/ q/ Y& {. }; G
  651. LDY #$00
    ) A& G  h4 r* I, q2 t8 |! d8 e! E
  652. LDA (FC_Data_Port_A_L),Y
    ' z$ \6 m4 I1 o0 n, n
  653. STA FC_PPU_Buffer,X0 g$ c: q; V3 L: D
  654. INX
    . s/ N/ w' B0 S6 u# S& W0 t) {
  655. STX FC_PPU_Cursor
    ! l' l4 I% Q; ^/ ^) Y5 B" S' {
  656. RTS+ H9 B7 j( o# T
  657. ' ?1 ^$ S' ~% \7 G% M
  658. ;==================================================8 o1 V3 x& o( {5 |" K- K$ G
  659. ;更改选择项( I. v9 t" u% D0 _8 [* j" |/ K! d1 u
  660. Change_Select_Item:$ n* q- Q5 T; P& {6 _, z% Z* s1 O. N
  661. Change_Previous_Page:
    # [5 B2 ?9 G$ T- P+ e% O6 E
  662. LDA Button_Once
    1 g) u$ o: r4 v  E# u
  663. ORA Button_Once + 16 R% d* S5 n* P0 s, l1 G; ^
  664. AND #$02
    7 z& `7 J4 j- g: ]% }
  665. BEQ Change_Next_Page/ |! s9 B5 B# f
  666. JSR Change_To_Previous_Page, M  D, Z6 ~2 x
  667. Change_Next_Page:8 A! x2 n: o2 R; v9 B
  668. LDA Button_Once
    # q& O- j# p8 h2 ~5 R: Z6 R1 F5 N
  669. ORA Button_Once + 1
    . r4 q; ]* n/ q! j" C9 i  E) x) C+ O
  670. AND #$017 ^  ]/ v5 E7 ?) S) t+ P
  671. BEQ Change_Previous_Item
    4 f3 d' o. }0 z) \9 p1 K
  672. JSR Change_To_Next_Page0 G% c  I) p1 h: A: E! p9 ^
  673. Change_Previous_Item:
    ( n6 z6 x, |. I9 Y3 ?
  674. LDA Button_Once8 c, ^, Q8 [) ^. E- B) U; T, W4 ]
  675. ORA Button_Once + 1  s9 N  W! Z" K- Y: r( i
  676. AND #$08
    1 X1 U8 _4 A0 ]3 @  U4 f
  677. BEQ Change_Next_Item; ?& C  x( \. n  Y) e$ A: O
  678. JSR Change_To_Previous_Item$ K2 L, L; g7 Y9 ~( ~& _
  679. Change_Next_Item:7 ^: [, I6 O  H- v) Z* g0 k
  680. LDA Button_Once$ Q3 J6 R$ D+ f, ^
  681. ORA Button_Once + 1
    7 i0 p; b# @8 g( {
  682. .IF FC_IS_DOUBLE_PLAYERS
    # t0 ?1 o/ C( U* t  O0 o: i8 ]
  683. AND #$045 N# b3 S. U$ \
  684. .ELSE4 ?( d1 p* F; A0 c6 t' t" d9 H* M  _
  685. AND #$24/ @( _- C, m) H
  686. .ENDIF
    2 E# ?9 J0 w7 G: q
  687. BEQ Change_Select_Item_End
    8 q- c0 M9 ~5 M  K" v) I
  688. JSR Change_To_Next_Item
    ( g9 R# H! B: C) F% M
  689. Change_Select_Item_End:
    3 |  ]5 c, V& \8 G# l
  690. RTS, U4 ^+ s: i% [5 {( A9 ]
  691. 6 ^+ b; `: x9 p1 ?+ }7 b( C
  692. ;==================================================$ L  u5 h* v/ d( W, o, D9 F5 a
  693. ;切换到上一个选项
    5 Y. L1 L6 _% \3 r! r! J
  694. Change_To_Previous_Item:
    ) T7 }  ?  A! q  A* I3 E
  695. LDA FC_Select_Index) {$ x0 I4 P4 B4 H2 O
  696. BNE Change_To_Previous_Item_Set" @3 G7 A7 V$ y9 E
  697. ;----------------------------------------1 y5 U* B, I- j) [3 a
  698. ;切换到末页最后一项+ G5 I8 y9 A$ n; p
  699. Change_To_Previous_Item_Set_Last_Page:
    8 V. L) k2 Z9 O' h% h/ Y# E
  700. JSR Record_Last_Page_Index
    + \9 ]- e+ |5 N* F: E) @
  701. LDA #FC_ITEM_SUM# y  L/ X9 y4 ?2 y
  702. STA FC_Select_Index. h) ~& M8 B: |# |3 D8 ~0 G3 z
  703. LDA #FC_PAGE_MAX
    & ~5 N# {1 Z2 g0 r5 u& P$ w
  704. STA FC_Page_Cur& ]( M! Z( v/ N$ }' s
  705. JSR Update_Page_Content
    0 l! X- o0 r+ M/ c9 @- P, e! z
  706. RTS+ C- k) A* m( \% e4 S8 A1 E
  707. ;----------------------------------------# m& @" G3 T: ]
  708. ;切换到上一个9 `1 X. P4 R# w, D) k6 {0 b! g# }
  709. Change_To_Previous_Item_Set:0 H/ [0 [6 h8 f3 k
  710. ;检查是否需要换页
    3 ^9 o5 y8 R5 v' m2 W) C
  711. LDA FC_Select_Index
    * [2 Z) |/ N8 H0 c- S, y+ V
  712. CMP FC_Page_Cur
    1 S4 q( a/ i) @7 v/ {! I
  713. BNE Change_To_Previous_Item_Set_No_Page
    3 x! o8 c+ }0 G+ n; G  t9 Q/ F9 B
  714. ;----------------------------------------/ |1 r, u- [1 _# H2 S
  715. ;切换到上一个(需换页)9 L" b% u" b! a! h  Z3 ]  s
  716. Change_To_Previous_Item_Set_Page:: t2 u# I: n, E5 G
  717. JSR Record_Last_Page_Index
    : Y, ^% f- v2 r1 p4 {& g- e
  718. LDA FC_Page_Cur
    $ r0 m% b* U: \: z. f6 u. `8 B1 K
  719. SEC
    + n0 M  @' Y& E% F, e  d
  720. SBC #FC_PAGE_SIZE& q  E2 h( P8 V7 T8 {
  721. STA FC_Page_Cur, q1 n9 B9 f  _8 C; B! K4 s) H
  722. DEC FC_Select_Index) x2 w4 b+ q+ s! K( J. p( }
  723. JSR Update_Page_Content  X, k% e2 `1 E! G& p
  724. RTS
    - e: I: S+ t  @- K! w6 b
  725. ;----------------------------------------+ P$ h9 t$ `+ i* ?# H5 s; R9 j
  726. ;切换到上一个(无换页)
    " P" w5 N3 |9 U: C1 R5 R9 E3 Y8 K
  727. Change_To_Previous_Item_Set_No_Page:
    9 a% \$ A% z. q" e
  728. DEC FC_Select_Index
    : s% y8 Q/ S) L, j- X
  729. RTS$ r! [3 U; K, A, f* s
  730. / R2 _2 S+ {# ]
  731. ;==================================================1 W! I3 a: W- s
  732. ;切换到下一个选项0 S6 z" N, @2 Z) }! _# R; x
  733. Change_To_Next_Item:
    & }1 `1 \) W3 g$ q9 t
  734. LDA FC_Select_Index
    : ~6 M/ ]* Y: |& a8 U( x
  735. CMP #FC_ITEM_SUM. ]+ u" H/ M# F# R( w5 h
  736. BNE Change_To_Next_Item_Set. ]  l: b" y( T: W* Z, j2 @
  737. ;----------------------------------------' t0 w+ M. M- O
  738. ;切换到起始页第一个8 W( y" n& p) f8 }2 V- W
  739. Change_To_Next_Item_Set_Begin_Page:% x" `5 q: h- m- @( G& k0 R
  740. JSR Record_Last_Page_Index
    1 y( b4 U; e4 x' q6 P# A
  741. LDA #$00" E* R) Q, w/ v$ R2 H; @! I# @
  742. STA FC_Select_Index9 K$ r4 B: z8 q3 u9 C
  743. STA FC_Page_Cur" e; {5 M/ y  ?+ `+ E! S7 U5 d
  744. JSR Update_Page_Content
    ; w2 c5 y5 b2 H- E
  745. RTS
    1 Q& o# G+ s# F' X$ C& d) ~( p% m
  746. ;----------------------------------------
    ( T* ?" J* U6 i/ T
  747. ;切换到下一个$ y) [6 G' q9 h& Y9 n: U7 R( u
  748. Change_To_Next_Item_Set:
    3 \- v& A) Y& T, D( _
  749. INC FC_Select_Index( q. c& Q# z) T$ x8 v5 J' h$ |1 x
  750. LDA FC_Page_Cur! S! i. Y. q1 Y" E0 r/ v
  751. CLC# C$ l  W3 J, G
  752. ADC #FC_PAGE_SIZE" b; D5 L( i  W: `+ M7 N
  753. CMP FC_Select_Index7 J: v7 ]. z+ s0 g
  754. BNE Change_To_Next_Item_Set_End
    $ K5 Z& a8 U: t* Y/ Q) T/ f( z
  755. ;----------------------------------------. m' s6 o7 k4 ?) t5 _+ e
  756. ;切换到下一个(需换页)
    : \4 v: b! P# e+ G
  757. Change_To_Next_Item_Set_Page1 s1 m) a2 ~$ u- x
  758. JSR Record_Last_Page_Index4 p: k9 Z" o& V( Q4 J) b
  759. LDA FC_Page_Cur
    ! ?$ w8 @8 ?6 d) y/ \; Q$ r
  760. CLC* K6 N8 ~: W4 J  R% d
  761. ADC #FC_PAGE_SIZE
    % q. B6 S4 }2 y6 M0 F
  762. STA FC_Page_Cur
    3 Z# ]% A3 _) B5 E, \* S1 B( l3 G: \; g
  763. JSR Update_Page_Content$ m# d( m* R0 m: M
  764. Change_To_Next_Item_Set_End:& Z3 z: g$ e. ?
  765. RTS" X6 g+ E: |( O
  766. 6 f+ [2 n* |! L  V. d
  767. ;==================================================" G2 k: A1 c5 ^: q
  768. ;切换到上一页; |" u! ]2 J+ P: _$ e
  769. Change_To_Previous_Page:4 K; P$ n. T3 i1 T+ ~
  770. LDA FC_Page_Cur5 ~- Q- O& y5 v) P% D% T# L
  771. BEQ Change_To_Previous_Page_Set_Last_Page, L* b  F2 j) H# q" H. j# D
  772. JSR Record_Last_Page_Index
    2 f% G0 t  J1 K% \0 R+ r
  773. LDA FC_Page_Cur
    , r7 \+ m! p8 j
  774. SEC
    6 M; l1 J3 c/ [: Z7 J
  775. SBC #FC_PAGE_SIZE
    1 v# n( [1 E. ^" e, l+ M
  776. STA FC_Page_Cur( i% p8 K/ I! t3 B, q: @
  777. LDA FC_Select_Index
    6 T  p, X& r1 s* t% Q
  778. SEC3 b9 i0 j: ~/ U% ]& ~
  779. SBC #FC_PAGE_SIZE. j! O2 M5 u! _3 N
  780. STA FC_Select_Index
    3 D" e% L! J3 t' i2 p
  781. JSR Update_Page_Content
    # j3 }! D4 y5 _2 b" n
  782. Change_Select_Last_Page_End:# i! c' ?8 R7 h
  783. RTS
    % O" V+ _6 k2 s* v$ ]- {& Z2 P
  784. ;----------------------------------------3 a9 ~: q* C* s& s
  785. ;切换到最后一页
    3 _# o, m# c6 w9 b! S3 Y/ _; S
  786. Change_To_Previous_Page_Set_Last_Page:9 H" I( r. |1 f! i( H2 K
  787. LDA #FC_PAGE_MAX
    7 T2 R: C+ M& ~5 c' W7 Q' j
  788. BEQ Change_To_Previous_Page_Set_Begin_Item
    " Q3 O3 ^; ]4 x! ]3 M! G! Z
  789. JSR Record_Last_Page_Index
    / I' X3 Q9 D& K- L2 H
  790. LDA FC_Select_Index
      X' e* j& ~7 M; X5 q
  791. SEC
    6 v# B. b# ]( u: n2 |
  792. SBC FC_Page_Cur
    / g) g4 Q% M9 F4 v) V
  793. CLC
    ( \' m! A( v- l" e
  794. ADC #FC_PAGE_MAX/ R7 G+ X/ H4 W! j1 x# r1 B: i! v
  795. STA FC_Select_Index
    * @+ R1 a" V! n5 s( q. D: K* i7 J
  796. LDA #FC_PAGE_MAX: x' W# ~6 V6 l4 m8 d4 g1 L% B
  797. STA FC_Page_Cur
    7 [' K7 ^# _# ?' f8 w$ I
  798. LDA FC_Select_Index
    1 r. X( g% Q# x$ ]
  799. CMP #FC_ITEM_SUM3 [% S& E' Q/ H/ P( ^
  800. BCC Change_To_Previous_Page_Set_Last_Page_End' H( f# q9 @3 P7 T
  801. ;----------------------------------------4 R% v) p; G& l5 k7 C1 @
  802. ;切换到最后一项
    0 P6 P2 o1 d2 q: b% h/ B% I
  803. Change_To_Previous_Page_Set_Last_Item
    , w) h; B: B7 R, c& X
  804. LDA #FC_ITEM_SUM! w) e' N$ o# i& ?! e
  805. STA FC_Select_Index3 ?8 Q% |- w! W( ^3 k4 q: Q$ ?2 p
  806. Change_To_Previous_Page_Set_Last_Page_End:
    6 [9 k0 U/ S; }! e7 J
  807. JSR Update_Page_Content5 l* J8 s; B/ h/ n( e
  808. RTS  D9 W$ I- j; H7 |3 e5 y
  809. ;----------------------------------------
    5 V) W. f( F( V3 E% k
  810. ;切换到起始项(最大页只有一页时)3 r" e- m$ H0 q7 k0 k
  811. Change_To_Previous_Page_Set_Begin_Item:  z: b6 Z; p! X2 g# C
  812. LDA #$00
    ) N' @+ p7 z) R! U! f* g
  813. STA FC_Select_Index3 o) e3 ?8 J+ \1 t  J
  814. RTS
    " p5 B( K9 g. n
  815. . y3 S5 Z2 b5 U4 v
  816. ;==================================================
    ! e" g9 v* D2 P$ z
  817. ;切换到下一页
    / b  W( c# k8 j$ c# L9 b
  818. Change_To_Next_Page:& a; @: d1 k1 `+ |! U# q: h: e
  819. LDA #FC_PAGE_MAX: ?4 J% @- [. A, W" K
  820. BEQ Change_To_Next_Page_Set_Last_Item7 D% ]) }4 I+ H* ^
  821. LDA FC_Page_Cur/ q* Z. l2 T- W8 Y7 C- q
  822. CMP #FC_PAGE_MAX
    ! {$ r+ g+ u9 r* h' p1 q$ Q- q
  823. BEQ Change_To_Next_Page_Set_Begin_Page6 `# \0 q3 o5 D# c" v' [
  824. ;----------------------------------------: h  X" A9 E* j5 w
  825. ;切换到下一页5 q" m/ M& [" }. i
  826. Change_To_Next_Page_Set:' N! Z" p& ^7 A; g
  827. JSR Record_Last_Page_Index2 R( y! j9 [7 `3 |- m, \
  828. LDA FC_Page_Cur
    : K& J: }) ~2 O: n: B; T# i
  829. CLC
    % G; l9 z! r; P  Q
  830. ADC #FC_PAGE_SIZE/ e% _& A; D; ]$ Z: ]0 Z! D
  831. STA FC_Page_Cur
    & p5 S" L, B* ~8 `. J. g7 B
  832. LDA FC_Select_Index
    7 A! I6 {* m& y- s# [( {
  833. CLC9 ^! e/ X9 Y! q6 J( e/ F5 F
  834. ADC #FC_PAGE_SIZE
    ( a  S; j% J; v5 N6 A
  835. STA FC_Select_Index2 J$ w; l$ N6 `- Q0 @. W3 ]
  836. LDA FC_Select_Index
    ' Q3 ]  X/ ?, u
  837. CMP #FC_ITEM_SUM: C) K) _3 D3 q* x) t: y! g
  838. BCC Change_To_Next_Page_Set_End0 {6 W* `% O0 [( t7 p
  839. ;----------------------------------------
    9 T2 z2 f% U0 w/ [: W" D! b0 V
  840. ;切换到最后一项
    $ a% u) D0 i0 W. l, ?. m
  841. LDA #FC_ITEM_SUM6 {8 {" W3 s1 i( d
  842. STA FC_Select_Index
    : I8 R7 ~. |1 R, f' J
  843. Change_To_Next_Page_Set_End:% n4 A% e8 O, w$ K7 K
  844. JSR Update_Page_Content0 n/ J8 w9 H9 e% ]" e1 T
  845. RTS
    8 i* Y) Z! h+ l& `% O
  846. ;----------------------------------------
    8 C, h6 R1 i* f0 Z9 x* A
  847. ;切换到起始页; h/ z- {; V% X6 ~6 o
  848. Change_To_Next_Page_Set_Begin_Page:8 F& r* U  O0 \$ ]3 e8 l
  849. JSR Record_Last_Page_Index
    / W0 V$ ?* a7 r& z
  850. LDA FC_Select_Index, M2 a: M2 k0 H7 s
  851. SEC
      C- k3 J1 w2 i* ~* U. Q6 [
  852. SBC FC_Page_Cur
    1 l0 @  o$ E3 Y
  853. STA FC_Select_Index
      W2 [5 _, O" F
  854. LDA #$00* k1 g( M9 ?+ {  A
  855. STA FC_Page_Cur
    8 Y8 \2 p( Q4 i  W8 G, R
  856. JSR Update_Page_Content6 C: U0 U. S8 V+ W
  857. RTS
      N$ r: P1 T: Y) J6 @- s/ a
  858. ;----------------------------------------: c! x/ I7 q8 j! X, x1 q9 B
  859. ;切换到最后一项(最大页只有一页时)' T$ Z2 }8 o! ]/ n- z# \
  860. Change_To_Next_Page_Set_Last_Item:, _1 G) s3 `+ b  Z
  861. LDA #FC_ITEM_SUM! _( k! i- d) b) O5 T  C7 Q' f* f
  862. STA FC_Select_Index
      \/ i( o& L- Q; J6 ^
  863. JSR Update_Page_Content: D8 d6 M2 R8 J
  864. RTS
    4 w! D4 `" ~' y* Y9 i" ^0 l

  865. - \2 }* q7 S# z  f
  866. ;==================================================
    4 W; z! d* A/ o6 H8 M* k
  867. ;更新页面内容
    4 t4 a. T$ j$ r+ u
  868. Update_Page_Content:
    . B" E$ ?0 V8 _* c2 n2 \
  869. LDA FC_Page_Cur
    " E* a% M' a8 I  X. v
  870. CMP FC_Page_Old( p# c% q( z6 V. t3 S9 v
  871. BEQ Change_Update_Page_End
    / ?: S, A* F9 J! N! x; a; a. x
  872. JSR PPU_Data_Page_Show% y) {, s, T9 \4 u" J: X& S* t
  873. Change_Update_Page_End:. R  X! X3 m0 w9 Q. b1 |- }/ X
  874. RTS; O2 ]  [6 C! o. H, Q: [4 M

  875. $ E- q$ T# U# `
  876. ;==================================================% N( P/ f% k5 j9 h
  877. ;记录上次页索引
    2 S, z* }  b/ g- E; d2 D
  878. Record_Last_Page_Index7 F6 s: F. H+ K/ ~6 v
  879. LDA FC_Page_Cur
    0 }' k1 S/ o; ]% f! Z3 G' |+ `
  880. STA FC_Page_Old3 @( y  e, P  A' x
  881. RTS
    1 Z9 }+ A8 q. x% r" A2 L
  882. / q5 H2 |- o" C# T
  883. ;==================================================
    1 B8 Z, V+ R) x1 u1 m5 ~
  884. ;显示当前选择项光标
    ! h  m! S  ]$ ?  ^1 i: N
  885. Show_Select_Cursor:
    6 ?2 t* n# i5 @/ C9 p
  886. LDA FC_Select_Index( n# }3 ^. _+ q3 L. Y2 u: d* s
  887. SEC
    / V% R; U+ W  U; b( ]3 F. `
  888. SBC FC_Page_Cur
    4 u4 d, ^5 s2 p
  889. ASL
    / N' o4 _; s! u5 u0 ?( H* |
  890. TAY" T4 j0 ~2 J% y  |0 k/ O
  891. INY
    / V8 m# w: Z' H7 X: C! y
  892. LDA Text_PPU_Addr,Y
    $ M- C* U* v! A' _$ A
  893. AND #$03
    / n& U3 T6 Y" r* @( _/ M
  894. STA FC_Cursor_Addr_H( S, i+ W+ J, v/ Y
  895. INX
    ( u9 ?; ?& r8 o! X) g9 z
  896. DEY2 b- J; B$ l. s/ O
  897. LDA Text_PPU_Addr,Y; ^% N- a# S- e( \$ [
  898. STA FC_Cursor_Addr_L
    : e  ]0 a) ?, s. X2 |0 J! N: F
  899. ;----------------------------------------& @9 u  e6 v3 d* R
  900. ;计算光标X坐标6 K" U- t" a( w8 h, k* F
  901. Show_Select_Cursor_Set_X:
    + U; J) v/ p* z1 n$ k
  902. LDA FC_Cursor_Addr_L# o9 o* V3 j' e
  903. AND #$1F
    6 o7 i  Y4 }, ~* Y  p5 T1 b
  904. ASL
    ' Z  T% X- r/ K2 H
  905. ASL$ U! H2 r( n' t6 H
  906. ASL
    & [& J( k9 C- k# C( j; O4 C
  907. STA FC_Cursor_X
    ; i3 P  B4 a/ V
  908. LDA FC_Cursor_Addr_L1 B% S. y" w) d) i
  909. AND #$E0
    + |7 w$ U: H7 Y% D* t' _
  910. STA FC_Cursor_Addr_L$ M4 z) e1 E1 S5 S
  911. ;----------------------------------------& V# N, M1 B6 L  m
  912. ;计算光标Y坐标
    ( b9 g% t8 B9 w
  913. Show_Select_Cursor_Set_Y:
    4 X' Z. z2 i, e: l: V: \; e9 w
  914. LDX #$05% _. M) g/ L$ U  f+ h/ g
  915. ROR FC_Cursor_Addr_H
    6 Z0 h% ^8 P$ C. X% |
  916. ROR FC_Cursor_Addr_L
    ! O9 |: F! q: z+ s' m7 ?+ R
  917. ROR FC_Cursor_Addr_H/ ?  s$ p: o- m$ ]: |2 N( F
  918. ROR FC_Cursor_Addr_L: ?( e4 `3 @# U9 g# |' k
  919. LDA FC_Cursor_Addr_L/ M. P& T8 e! B
  920. STA FC_Cursor_Y8 ?2 v) r7 Q" T* E
  921. ;----------------------------------------
    . v/ Z" B5 t, V! {9 A
  922. ;写入光标
    6 X2 q  \. s2 [
  923. Show_Select_Cursor_Set:/ b0 U" A  Z9 K/ k0 T
  924. LDA #$00
    - z# }. c  K. R. U; H
  925. STA $2003
    8 k4 G, {; M5 X+ C3 C5 y! s
  926. LDA FC_Cursor_Y
    & u8 R" k0 t+ D  T8 M9 B
  927. SEC
    $ [8 R) H; B; y0 q- {
  928. SBC #FC_CURSOR_OFFSET_Y
    5 i1 y0 F: T$ X) V. V! w) X' W- ]0 [
  929. STA $2004( N& A/ Z7 K& y
  930. LDA #FC_CURSOR_TILE
    7 k7 d1 d2 K# U8 Q
  931. STA $2004- v+ j1 f- Z4 V+ l1 v
  932. LDA #$00
    7 _8 U  m. q! i: j& O. H
  933. STA $2004
    * f7 z7 M+ Y9 k9 @+ D5 @' @
  934. LDA FC_Cursor_X
    8 j6 V& G. m- `4 G  U
  935. SEC2 |/ D6 n8 Y1 [5 L# I8 X( S
  936. SBC #FC_CURSOR_OFFSET_X
    6 ?& q$ `( G! o- s- w* ]4 C
  937. STA $2004  |3 T% E4 }) l+ @; e
  938. RTS
    & e2 u) \" k8 H5 f. X; j! Q

  939. ; P0 t% Q7 H2 P" S4 H: s
  940. ;==================================================
    2 b) I. k  P: ~" ^8 z) a( h" P: D
  941. ;切换功能% r. J- Z2 A" l, H
  942. Change_Function:
    3 U$ ?9 N1 W, A" v
  943. ;----------------------------------------+ S( [$ K5 Y' Q  \' c2 w
  944. ;开启功能A* R; u" e0 F  F/ Z2 B
  945. Change_Function_On_A:1 ^( s& R# o8 K4 |) d  A
  946. LDA Button_Once8 W( M3 a( E  ^# |
  947. CMP #$40
    1 S% I4 v& q+ y- C! i  T
  948. BNE Change_Function_On_B
    1 W3 c9 V! O1 F- l
  949. JSR Change_Function_To_On_A
    + m/ x; i+ T& i. P7 u0 w4 D
  950. JSR Function_Status_Update0 E) Z; q) h3 D% a
  951. ;----------------------------------------
    6 k- v" c7 Y9 s* O  D5 f- z
  952. ;关闭功能B
    5 E# a  W3 n1 i2 R
  953. Change_Function_On_B:' L( z, ^! `3 J) J9 U
  954. .IF FC_IS_DOUBLE_PLAYERS. i5 ]+ q7 |$ F: A) B6 M7 k
  955. LDA Button_Once + 10 j- C2 |  f% N# P( A' d
  956. CMP #$40; \$ Y/ @% e+ l
  957. BNE Change_Function_Off_A
    ! R& N# u. |3 V% F" K7 M
  958. JSR Change_Function_To_On_B4 J. }& r. w3 f  T# S7 I
  959. JSR Function_Status_Update; G( l# c# D& ?7 b% O* A
  960. .ENDIF3 m* v( o) Y: ?+ }  `
  961. ;----------------------------------------( O3 i5 @1 f( L
  962. ;关闭功能A
    - f, m% T; W7 Q+ `
  963. Change_Function_Off_A:
    9 {; ]) c) |, y
  964. LDA Button_Once
    7 z9 N# w2 e, z9 P: I9 f
  965. CMP #$80: a% D+ L" q2 @! x1 ~$ J' `
  966. BNE Change_Function_Off_B1 x5 [0 G1 H" s+ v! Z0 R6 `2 a, d
  967. JSR Change_Function_To_Off_A
    5 _4 @$ p, I) |
  968. JSR Function_Status_Update- D/ B( V; a: R, y
  969. ;----------------------------------------7 p8 G+ b& b( o- a- a: n5 E! r
  970. ;关闭功能B
    ! {3 Q0 E: m2 o
  971. Change_Function_Off_B:
    : Z; B) s# m9 G# }- p% m  }! H# K
  972. .IF FC_IS_DOUBLE_PLAYERS% E1 Z* d9 h0 I' f. \
  973. LDA Button_Once + 1
    * n: D7 x9 P# z, Y& \  M
  974. CMP #$802 ]5 o8 d9 w5 Y9 i0 n
  975. BNE Change_Function_Swap2 y: B! v( e* ~: o! g
  976. JSR Change_Function_To_Off_B- i( H  b  r( k. x* [
  977. JSR Function_Status_Update
    $ W& K# k, Z% y2 M6 }# v
  978. .ENDIF
    , ]$ a' m/ d6 D6 k# `# v
  979. ;==================================================
    ( ^( m% L+ x  m3 e8 s+ v2 i8 @
  980. ;交换开关
    $ ^, X9 G: L2 q5 E4 z, y7 x) Z+ g
  981. Change_Function_Swap:
    " c: w1 ^% s4 j3 N1 M
  982. .IF FC_IS_DOUBLE_PLAYERS9 _+ m- A, {4 d- R( b; K: P
  983. LDA Button_Once! W, v7 S2 u9 {! f' M
  984. ORA Button_Once + 1
    6 U5 ]0 |/ K' i3 t8 V+ E
  985. CMP #$20) s0 |, n" [. G/ ~( @4 U
  986. BNE Change_Function_End
    . d! w2 q% y, k) h* x5 X3 ^
  987. JSR Change_Function_To_Swap
    2 s- t9 o. U1 Y9 o
  988. JSR Function_Status_Update. r2 l: t1 V+ u. T% z' S/ \
  989. .ENDIF/ s% |1 ]* J5 u0 A, f
  990. Change_Function_End:
    ! V6 h2 U: ?% s& S, ]0 e7 ]
  991. RTS
    9 C5 o+ P0 H7 j+ ~, ~
  992. 8 C/ l4 K! H' `- K; w
  993. ;==================================================1 o/ z$ B+ G, h1 B3 E- @
  994. ;交换开关状态1 X$ m) @' E- m' t. \
  995. Change_Function_To_Swap:
    ' d. d& o" Z' ^( w
  996. .IF FC_IS_DOUBLE_PLAYERS' c  @- @$ z! l; L5 h! w& M  C
  997. LDA FC_Select_Index" m$ z+ D  K1 z: x  p; }# p
  998. SEC
    7 ]- N. ]! S- \% o& j+ A1 C
  999. SBC FC_Page_Cur
    6 _5 Z6 k" Y4 V( a% d3 Y
  1000. STA FC_Select_Temp0 c! s  f, }" |5 L
  1001. JSR Set_Function_Port
    0 Y' r5 i% |, d# W
  1002. LDY #$00
    4 Q/ |& G$ B: L
  1003. LDX FC_Select_Index
    , v) V' c( n* l0 J2 l4 x5 o
  1004. LDA (FC_Data_Port_A_L),Y
    & I! x! P* ~0 T- e& ?
  1005. EOR (FC_Data_Port_B_L),Y
    2 s8 b- w8 f6 j4 @' [% _
  1006. AND Function_Check,X
    % ~& B" x3 T1 A5 P2 l/ p- R
  1007. BEQ Change_Function_To_Swap_End; X  p5 d* t  N4 K$ j: C' N: x
  1008. LDA (FC_Data_Port_A_L),Y6 G6 t6 A8 }  D) z
  1009. EOR Function_Check,X
    0 L& ?7 I; s; `2 x
  1010. STA (FC_Data_Port_A_L),Y4 ~* a1 W4 v9 F! N  k9 C) D
  1011. LDA (FC_Data_Port_B_L),Y
    : |' {4 F( f+ Y3 `$ d* J: q
  1012. EOR Function_Check,X
    ( C3 b* d! a9 D
  1013. STA (FC_Data_Port_B_L),Y
    * l% W3 C( G0 z3 z9 _3 |
  1014. Change_Function_To_Swap_End:
    2 M; W0 L# ^) e2 \+ p4 g5 z
  1015. RTS
    ( Y& P2 _* e0 [* P9 o$ t/ T4 P9 R& \0 J* y
  1016. .ENDIF$ `3 `# p1 M/ w
  1017. & h+ w5 P3 x* L" q

  1018. 1 R" e# K1 x. y
  1019. ;==================================================/ J1 Q3 p6 R1 ], Q, r3 h
  1020. ;更新功能状态# ]; D5 V" x# j; N, y. P( H# |
  1021. Function_Status_Update:$ ]6 l+ \6 V. ~
  1022. LDA FC_Select_Index5 B0 e6 T% e6 F5 v$ a0 U; h
  1023. SEC5 A- W' k9 A2 K4 D
  1024. SBC FC_Page_Cur
    ) s; m6 s; O  ]) r7 A) Z
  1025. STA FC_Select_Temp: t; ]7 Y& {- d6 B/ x
  1026. JSR Function_Status_Show
    . w, B! A1 }6 I- S" u5 @
  1027. RTS$ R$ p5 v- j- \# v: f) [# P

  1028. . @" r' e( B3 E2 j+ K) l: u- O2 G3 f
  1029. ;==================================================$ C9 K/ |+ o  Q) _; y5 d2 O
  1030. ;设置功能地址端口( d. n: e  m3 Q2 W; H# c
  1031. Set_Function_Port:1 e. P  p- F. j" `) F7 T
  1032. LDA FC_Select_Temp6 s8 i% w" `9 |5 z/ Q
  1033. CLC8 x$ O0 ]7 `' k0 |6 C; V
  1034. ADC FC_Page_Cur0 O. w, y2 U# g. Y  ]
  1035. ASL3 r: o6 L0 @6 v. s( t
  1036. TAY
    " C/ i; K( U: M7 z# v0 v. R
  1037. INY
    8 F$ Z2 ~+ `* w- i, b' l9 Q- z
  1038. LDA Function_Addr_A,Y
    4 g: m7 v% @3 _9 B- s0 V
  1039. STA FC_Data_Port_A_H
    5 O4 {6 L+ ~# H: F" m: r) K  I0 h
  1040. .IF FC_IS_DOUBLE_PLAYERS
    ) @! n& p" ~7 a* o- c3 Y/ c5 e
  1041. LDA Function_Addr_B,Y" Z$ V. e1 Z  E4 u, X2 k2 N4 O
  1042. STA FC_Data_Port_B_H  M$ v( W6 l2 m  T+ \2 n* a
  1043. .ENDIF
    % c" X  L, W: z6 c! n- _
  1044. DEY
    + `/ ?5 L* a+ w' m- E7 Q& i
  1045. LDA Function_Addr_A,Y+ O) t4 b3 I2 Y+ l' y+ j
  1046. STA FC_Data_Port_A_L2 {/ z8 ?& h9 f
  1047. .IF FC_IS_DOUBLE_PLAYERS6 j* d6 N; a( R6 d" }! z
  1048. LDA Function_Addr_B,Y
    & f6 k1 s) X9 l* h- X
  1049. STA FC_Data_Port_B_L4 r' U+ L1 t) X
  1050. .ENDIF
    6 q& A3 V# b" h: R$ m; w
  1051. RTS
    6 G4 l- t2 |4 f3 \
  1052. 9 O; [' R3 Z8 {4 r' n/ n  j& w
  1053. ;==================================================
    " q0 i* @; R( o; z3 {
  1054. ;设置功能临时索引
    ' A1 m/ `; y' K' h+ {- F
  1055. Set_Function_Temp_Index:! x4 r2 c  ^- f6 ~
  1056. LDA FC_Select_Index0 W$ s. K* j( _( P7 y8 s/ W
  1057. SEC
    + ?- Q4 ?; Y; {, w, M
  1058. SBC FC_Page_Cur1 R$ p0 v) k! V
  1059. STA FC_Select_Temp7 b4 K0 H# \( }8 A& L# f2 H$ R+ B
  1060. RTS0 Y" T- ~- V% d/ K

  1061. ' z1 p! r4 h2 x% G* X  {. v
  1062. ;==================================================$ U3 ^$ p0 @" _. t! l4 K* `
  1063. ;开启功能A
    5 q% J- s  w6 T% w# {/ a9 x
  1064. Change_Function_To_On_A:
    , D5 O! V) A9 x. a5 t
  1065. JSR Set_Function_Temp_Index
    ( l. ]: ~% @2 m0 a6 _
  1066. JSR Set_Function_Port. `3 W- n' l' t  q: x9 p
  1067. LDX FC_Select_Index0 A- s) b) w% d& x) m
  1068. LDY #$00$ Z2 J5 `7 N) q; u# S
  1069. LDA (FC_Data_Port_A_L),Y( r5 i$ |( V% V9 A& \( ~: M) ]
  1070. ORA Function_Check,X1 b$ w% ?! q( d0 i0 w+ k; V+ y& S
  1071. STA (FC_Data_Port_A_L),Y
    # ^% x, c2 s- m! |) D0 i7 q% p& o
  1072. RTS
    + F# l* |9 V8 I5 s
  1073. ;----------------------------------------
    ; J& E: r  s# m: Z: _- ^
  1074. ;开启功能B
    9 v- M# u3 Y3 ^0 R
  1075. .IF FC_IS_DOUBLE_PLAYERS+ |: _, U5 l2 R: M
  1076. Change_Function_To_On_B:
    7 H) E1 r% _) t# \, R! T. f9 B. @, L
  1077. JSR Set_Function_Temp_Index* k3 P$ N3 z; V: Z! ], @' v" {" n
  1078. JSR Set_Function_Port3 x5 u$ q, L8 s9 Z/ `: Y
  1079. LDX FC_Select_Index7 ~& z& l' [( Q' C/ |
  1080. LDY #$002 d( I1 r* @0 V& {6 k0 j/ n" V
  1081. LDA (FC_Data_Port_B_L),Y
    0 |9 b7 ^" ?+ y
  1082. ORA Function_Check,X% [* ?# W0 w0 O$ p. g. ~
  1083. STA (FC_Data_Port_B_L),Y: E, l" h: Y3 F. e6 P' `+ ?& y
  1084. RTS* ~- q7 q6 ^2 K
  1085. .ENDIF; O5 Q# ^% V5 h0 C
  1086. ;----------------------------------------
    % ^  w1 ]0 L) C" N2 h5 E
  1087. ;关闭功能A" K: E+ \4 m/ b+ @) m7 E9 r) o- k
  1088. Change_Function_To_Off_A:0 N# k6 {$ F# n( S% n4 |* U
  1089. JSR Set_Function_Temp_Index
    8 h6 ~+ i% U0 @; r* U! f
  1090. JSR Set_Function_Port3 f9 o3 e+ u. t5 I, ?
  1091. LDX FC_Select_Index
    ; B5 `6 @2 N$ `& u
  1092. LDY #$00
    6 ^6 q4 r# T7 O5 Z2 q& c
  1093. LDA Function_Check,X5 @. N2 h* N, x" W
  1094. EOR #$FF
    $ W0 a3 U  l+ }- d
  1095. AND (FC_Data_Port_A_L),Y
    6 z. ?0 n; }5 c! H
  1096. STA (FC_Data_Port_A_L),Y
    , _' \: p* I! z) S0 R
  1097. RTS# P$ _2 x5 I' S0 B3 X1 N
  1098. ;----------------------------------------* B. a. B+ I$ ]: D+ F& U" }+ q: a" ~5 b
  1099. ;关闭功能B. d% U7 z. Q' b) t0 d
  1100. .IF FC_IS_DOUBLE_PLAYERS
    * g' a" A! q, A/ m3 K
  1101. Change_Function_To_Off_B:' Q. H3 K1 r9 N$ `- x8 K# C
  1102. JSR Set_Function_Temp_Index* S& I8 C# v% ?/ L7 \
  1103. JSR Set_Function_Port# i8 Q& U  z# M6 y
  1104. LDX FC_Select_Index' B* r) y: S; @+ d) x6 @
  1105. LDY #$00
    5 n7 V. h. C' ^+ f- R. D6 k: R
  1106. LDA Function_Check,X
    $ [: d; C- J& I
  1107. EOR #$FF" E, ~( n% J4 b' h( Z
  1108. AND (FC_Data_Port_B_L),Y
    : x# g* r. e' Y7 j* L# }% G1 c4 F
  1109. STA (FC_Data_Port_B_L),Y
    6 e' K5 {. g7 @3 u) h( x
  1110. RTS: F% b# O  _& P- U
  1111. .ENDIF: B% a4 B* P, q- u, \

  1112. 4 R) `1 y! N1 o4 g# d
  1113. ;==================================================
    $ h# S: @: d; @: ]- j. B
  1114. ;设置功能状态PPU地址
    7 n! c7 E* T% I) h0 m+ g
  1115. Set_Function_Status_Addr:+ [0 R- g, j" M; U3 l
  1116. LDX FC_PPU_Cursor" S' F; R# L2 G2 Q/ _: v
  1117. LDA FC_Select_Temp4 @7 ?9 P, x3 h" K7 a+ X5 S% \
  1118. ASL
    8 s2 l* [% i+ y
  1119. TAY2 a6 L& R1 P" |
  1120. INY: Q4 q% N$ \4 ?& k1 x3 Q2 h2 P4 C
  1121. LDA Text_PPU_Addr,Y7 |9 ^- |6 L4 |/ A/ e. D
  1122. STA FC_PPU_Buffer,X
    0 l  z: J# O, R- G
  1123. INX- d4 y. k* h" j& w
  1124. DEY
    / u' u% N3 Q3 C0 Q. I
  1125. LDA Text_PPU_Addr,Y) i8 O: g) L- p% ^
  1126. CLC
    # W4 u. p/ u6 Q+ G7 C  {) h! \
  1127. ADC #FC_FUNCTION_OFFSET, W" i3 J( X) n+ k7 h
  1128. STA FC_PPU_Buffer,X
    # ~7 N4 L7 l$ ?: i
  1129. INX. q+ B% I' Y3 D
  1130. .IF FC_IS_DOUBLE_PLAYERS
    2 S! Z1 p4 j, h+ A) _2 l, }5 B( [9 z0 G
  1131. LDA #$02! [- a; n$ p  s3 J' |
  1132. .ELSE
    7 H( I% A9 ?5 @8 G4 z% j
  1133. LDA #$01
    3 j, U% z: V; |+ U* z
  1134. .ENDIF
    : Q6 Z: y# I2 O% S
  1135. STA FC_PPU_Buffer,X, l5 X7 Q) r) J- c) U
  1136. INX
    , c1 o# b. ?4 \; g7 N6 i1 M$ c
  1137. STX FC_PPU_Cursor
    0 Y: s  C% J/ y9 J  _" h" |' ?
  1138. RTS
      H5 L1 M- r% @4 h8 I; |/ L. ]
  1139. ' {! U- e. [' G: ~
  1140. ;==================================================1 X% q; H8 }. N0 r) h+ B/ H2 H
  1141. ;获取当前选择索引! n/ }0 h3 l4 X* b! L
  1142. Get_Select_Index:9 f, X$ J5 q. U4 n
  1143. LDA FC_Select_Temp+ O  z# \% g) y% S2 C: i
  1144. CLC; Q$ U, F4 }1 r( R: c6 c/ v9 p5 K
  1145. ADC FC_Page_Cur
    1 s* r6 o! q0 ]6 P
  1146. TAX
    7 _" @1 c3 m* `+ \2 i0 r6 K
  1147. RTS+ D9 ^% U# P. }* H, E+ Y4 G
  1148. % d& ?  D& u: q/ q$ Q# o
  1149. ;==================================================, F# a9 N: ]1 Q/ Z: u) I( W9 @
  1150. ;清除状态文本+ |# L$ M1 Y5 g* T/ a% y
  1151. Function_Status_Clean:0 r& q" B5 b0 K4 f% p  A2 W
  1152. LDA #FC_PPU_MODE_CNTC
    ) [9 f) p1 v% V2 Y. z6 |5 i& @% P
  1153. JSR Set_PPU_Mode/ S% I1 d3 e5 }% z/ V
  1154. JSR Set_Function_Status_Addr0 a7 ?6 y9 e2 a/ q) ?7 L
  1155. RTS
    3 W" M" K7 p" Q- a( @
  1156. , Q- Z$ l( ]$ c# @# g0 v
  1157. ;==================================================" _! e, l, b8 O9 C- y
  1158. ;显示开关状态( S: D" O( w( [. u9 ?
  1159. Function_Status_Show:
    ! [) s5 f2 \& m& ^3 s3 W. X
  1160. JSR Get_Select_Index
    . T) ?7 u1 r. |( C, r
  1161. CPX #FC_ITEM_SUM
    ( N6 Q7 K" X5 G
  1162. BEQ Function_Status_Show_Set
    6 u0 h* n2 n! y2 O# q4 D. J
  1163. BCS Function_Status_Show_End
    ( d& L2 B6 y3 i1 e; i1 A* k
  1164. Function_Status_Show_Set:$ g& A+ u% @/ U+ @
  1165. LDA #FC_PPU_MODE_CNTL
    2 W+ z" I+ J( J& ?0 w3 d! B* V5 f# a1 _
  1166. JSR Set_PPU_Mode2 F! P; A: A4 D) t# {1 o
  1167. JSR Get_Select_Index
    & \! N; Q& f3 x
  1168. JSR Set_Function_Status_Addr
    2 U) v3 W' D8 u  \5 R4 Y! \* F5 F
  1169. JSR Set_Function_Port: r+ @! O  {# U; P$ r; `& u
  1170. JSR Function_Status_Show_Check_A
    , a0 n  a  d% X% j9 h% `1 `
  1171. .IF FC_IS_DOUBLE_PLAYERS/ n5 Q# \, k8 s6 w1 L* a" L7 ~
  1172. JSR Function_Status_Show_Check_B
    * @: q8 f2 i( e3 s' p- {5 y; p
  1173. .ENDIF
      R! @4 M6 k" @; x
  1174. Function_Status_Show_End:
    % @' \! U# y" t6 f4 y( b
  1175. RTS2 U0 H, M; p4 s4 q, }- ^
  1176. ;----------------------------------------
    # u+ d* [; R- O9 R
  1177. ;检查功能A状态; N# h* F' m3 C9 a
  1178. Function_Status_Show_Check_A:; N; x+ }2 X) ]& T* \- Q
  1179. JSR Get_Select_Index0 k  i9 i9 L- I3 B% P; A
  1180. LDY #$002 c' A# T& k2 w
  1181. LDA (FC_Data_Port_A_L),Y
    : y3 e" t/ Y/ v+ s/ i8 F) _3 E
  1182. AND Function_Check,X# Z8 k: S( G: ]1 B6 f2 G% b
  1183. BEQ Show_Function_Status_Off
    - ^- q% I/ m* E/ y& O1 g. @/ T8 b
  1184. JSR Show_Function_Status_On
    . G' @! |+ _6 b! R
  1185. RTS
    3 M7 X$ t8 [: n6 Z- l- [- c3 M6 k/ }
  1186. ;----------------------------------------
      h8 U# w! l7 k# l. `) [
  1187. ;检查功能B状态
    7 G' Z* D# `( N/ v" e% _- c" ]
  1188. .IF FC_IS_DOUBLE_PLAYERS' U2 E7 \' L. J' s' X! t# Y* H, ]5 E
  1189. Function_Status_Show_Check_B:. ]7 A' q5 t" c6 M( B  o
  1190. JSR Get_Select_Index" o& x2 N6 Z, s1 {' g  v7 `
  1191. LDY #$00( P6 P0 Z8 `. P" l8 u
  1192. LDA (FC_Data_Port_B_L),Y
    ! ?8 X7 C! |) X0 @3 r) S
  1193. AND Function_Check,X# I/ L" K! Q, g) H5 K
  1194. BEQ Show_Function_Status_Off9 ?4 V1 c. \0 K4 C- \$ [
  1195. JSR Show_Function_Status_On$ J  W: k: W8 I
  1196. RTS) J3 U3 c6 E/ @) c! b
  1197. .ENDIF) k* X7 p3 u' ~( |- [# x$ [7 ], ?; z$ R

  1198. 6 {* D1 i8 q1 g6 x" y0 r1 M
  1199. ;----------------------------------------' ?! K9 U6 F; p
  1200. ;显示功能开启状态1 \5 ]5 ~* a& ?
  1201. Show_Function_Status_On:
    % b. j+ v) p8 X1 x6 n
  1202. LDX FC_PPU_Cursor
    9 ~3 N- u0 r$ n  r9 q' D0 c! N* j' B
  1203. LDA #FC_ON_TILE7 ^2 h& w' T) @  |
  1204. STA FC_PPU_Buffer,X2 o% L  b7 e& |8 K" f' t  p
  1205. INX  x" S4 ^0 O* ~$ x# h& @
  1206. STX FC_PPU_Cursor
    - ~+ {8 t( T( L0 x
  1207. RTS
    " @* `) {0 U' F1 m$ H  G5 L! C
  1208. ;----------------------------------------
    : P; F4 L6 c* T/ [# f& `: L
  1209. ;显示功能关闭状态
    6 s! Q! H' d+ G9 \, ~) U
  1210. Show_Function_Status_Off:
    1 u0 w" L4 O+ @
  1211. LDX FC_PPU_Cursor
    ' N1 r6 c9 a7 c9 I! @8 M# f9 Q
  1212. LDA #FC_OFF_TILE
    ( O" o2 z0 K% Q- ~: W6 }; q
  1213. STA FC_PPU_Buffer,X
    1 w& r  o+ ^+ |0 e5 v6 l6 g
  1214. INX% I+ V  @8 b8 T( y5 J6 U' T1 l: ?
  1215. STX FC_PPU_Cursor( M) I* \# X8 p/ Y; O; f  a
  1216. RTS( ?7 y) o# A7 S- @7 k! Q$ |
  1217. - y! f& O/ B+ d8 l

  1218. 2 |1 c6 ?% i% o/ [% u! s
  1219. ;-------------------------------------------------------------
    $ N  r: i4 p% ]% B' f% k- b  r
  1220. FC_Data_Copy:    ;数据拷贝参数设置
    ! r% T/ D1 K" W" z; a
  1221. STX FC_Cpy_Port_L+ G* h8 a1 y0 z! |- J7 _% e! ^
  1222. STY FC_Cpy_Port_H  t5 u$ ^, p- N4 }/ D
  1223. LDY #$003 i' l& n# Q/ Z" V8 `
  1224. LDX #$06: [/ w! t  W" W: W
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数6 G( c8 P$ k  U
  1226. LDA (FC_Cpy_Port_L),Y
    ; t& G* i3 {) [! K6 z6 Z0 w* c
  1227. STA FC_Cpy_From_L,Y
    ' P- x6 [9 P! o  h, _% w' B
  1228. INY; d/ R' q' q+ C- a0 t, O
  1229. DEX
    # D+ ^  N6 E  `/ Z$ d5 `
  1230. BNE FC_Data_Copy_Addr_Set
    2 l! z9 L7 l+ s7 a
  1231. LDA (FC_Cpy_Port_L),Y. w8 ?5 T! x# A+ H9 o. S, Y" s  ]
  1232. CLV/ I2 v2 K1 L  g
  1233. LDY #$00
    ; _# y0 n0 B$ J& h  v
  1234. ;----------------------------------! v; C" ~2 \/ Q- C
  1235. FC_Data_Copy_Mode:   ;复制模式校验" |! c: h' \# j4 ~+ t) U1 L
  1236. CMP #FC_MODE_RAM_TO_RAM
    ! L! {) p3 g' B1 B" u  V" Y0 c8 V
  1237. BEQ FC_Ram_To_Ram_Mode
    * T" ]) v9 V4 I- l7 Z! Z* l
  1238. CMP #FC_MODE_RAM_TO_PPU
    # C: }' s. r# F' j+ X
  1239. BEQ FC_Ram_To_Ppu_Mode3 G7 L1 k% X# U3 |7 s
  1240. CMP #FC_MODE_PPU_TO_RAM2 Q( r$ n  [) C9 E3 i; c# M
  1241. BEQ FC_Ppu_To_Ram_Mode
    ) c1 X  u2 T! Y2 z2 u& f& c
  1242. CMP #FC_MODE_PPU_CLEAR6 g8 _) v7 b+ b4 F
  1243. BEQ FC_Ppu_Clear_Mode
    8 I, J9 p% o3 D. o' v
  1244. RTS
    ; }5 _$ w  s( i
  1245. ;----------------------------------------* G. I6 B! E4 G4 j) ^
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式
    8 z4 I( n8 f+ q" i, P: @
  1247. LDX FC_Cpy_Count_L$ v+ |3 Z+ d2 O
  1248. INX
    ; B0 B' P! ?( W$ ~* n
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查1 u3 J3 S& W: M  H8 l2 N9 s5 _  [
  1250. DEX) L3 B# t7 @* A! L1 W; x( r( b
  1251. BNE FC_Ram_To_Ram_Copy1 Y$ C/ N8 r6 N
  1252. DEC FC_Cpy_Count_H
    % C4 R0 R! n% P7 d1 \, b  C' c
  1253. BMI FC_Ram_To_Ram_Over" B9 t3 b# H$ f) s
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据7 Y4 Q2 O$ m$ r1 E
  1255. LDA (FC_Cpy_From_L),Y
    # j0 @# i) X5 u/ n: O% ]! J( U2 x
  1256. STA (FC_Cpy_To_L),Y
    $ e" \  S: F+ u! ?1 B
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增
    : G! {. }* G& w; [! w, T9 H  A
  1258. INY+ _3 ?: o4 v# B8 F! `( u! n0 @
  1259. BNE FC_Ram_To_Ram_Count$ J% s6 m. ?# D2 x, g
  1260. INC FC_Cpy_To_H' J; e7 y8 d  s: q2 i' r" w
  1261. INC FC_Cpy_From_H+ S/ v6 I) `" x2 Z7 N- r
  1262. BVC FC_Ram_To_Ram_Count
    & C+ ?2 t8 |3 b7 o
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制
    ' E% |- _9 E) d! d
  1264. RTS: Y. A: w- Q, {: C

  1265. 3 l0 S% y. G4 O" n$ m) v5 I# ?; c
  1266. ;----------------------------------------
    5 R. G+ C# M- B9 T5 S1 f9 W& V
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式+ x! z! y) n& c" a  v# H8 `0 D
  1268. LDA FC_Cpy_To_H
    . }, ]( \' ]' F: M" o
  1269. STA $2006
      T# _. P) c4 }
  1270. LDA FC_Cpy_To_L# }4 x+ _0 k5 f! [- t5 w
  1271. STA $2006& Q0 I  P7 m+ _, h+ E) e" n
  1272. LDX FC_Cpy_Count_L7 w7 x! O* Y+ d9 V' \2 Q" F
  1273. INX
    $ V8 K) o, u, E2 j, U( O
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查
    % r& W4 D; n1 T- Q
  1275. DEX5 f8 S, g- e9 B* g
  1276. BNE FC_Ram_To_Ppu_Copy
    % p% p- }9 j/ v1 P
  1277. DEC FC_Cpy_Count_H
    # W$ G, Y% M8 H
  1278. BMI FC_Ram_To_Ppu_Over+ ^5 M3 P- m$ S+ t) i+ ~9 r' o
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据
    6 Q/ E. M" s# L  Y4 _5 v$ k
  1280. LDA (FC_Cpy_From_L),Y
    # u9 L4 e4 ^) K
  1281. STA $2007; w/ Y8 t# U5 ?$ w# w5 d0 @6 B
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增
    6 _( J% y$ e+ b4 [3 T( }
  1283. INY$ Z, {1 P' E+ E, f7 H
  1284. BNE FC_Ram_To_Ppu_Count" f* ~% C# E) a; d# E' \3 ?
  1285. INC FC_Cpy_From_H3 x/ `! w# m4 M
  1286. BVC FC_Ram_To_Ppu_Count0 ^  Q8 W6 I. T8 g5 z6 I
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制+ [' ?' w7 h4 @2 O" t
  1288. RTS
    ' \, [# L  I6 i1 C* z+ j

  1289. " \" `. v# b8 z# Z5 T
  1290. ;----------------------------------------
    : u- a+ L# @5 {$ K) L0 t% u
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式
    - a: l, A2 Q# I2 a6 G
  1292. LDA FC_Cpy_From_H
    ' j  G# \* q1 [: i% R
  1293. STA $2006' c+ @1 i: g  k8 l
  1294. LDA FC_Cpy_From_L
    1 B$ J1 s( z- i6 ?( c$ L  k! T
  1295. STA $2006
    * o- A; U/ h  b  S3 I3 i1 ]
  1296. LDA $20076 A5 W5 s! N, s7 O5 [- e' J/ R
  1297. LDX FC_Cpy_Count_L
      o" r3 f0 O3 ?1 R% g) }
  1298. INX7 n: r( H' P  u6 e; @( n# E+ y& q
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查
    ) r7 Q% `0 q6 ^5 ]
  1300. DEX8 N/ H, j4 ]( w' a0 u' r7 ]9 {
  1301. BNE FC_Ppu_To_Ram_Copy0 q, M. e# N" }6 @' c, p% k
  1302. DEC FC_Cpy_Count_H# F9 }" N2 {+ d( V" c9 E
  1303. BMI FC_Ppu_To_Ram_Over
      l, t* N% m+ }! H
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据
    - S: X# E. Z- h) F
  1305. LDA $2007( I& s0 O- j* U5 h: j
  1306. STA (FC_Cpy_To_L),Y" @* m9 H5 B4 O  y7 W8 _
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增
    . O; |7 `+ h4 i4 @4 R  I
  1308. INY3 L3 n9 c# f. T" {5 R3 e
  1309. BNE FC_Ppu_To_Ram_Count
    9 R% m; n7 s) U+ x
  1310. INC FC_Cpy_To_H
    , a% ~* q: ?  S6 p: x9 ~9 a: k2 f
  1311. BVC FC_Ppu_To_Ram_Count
    5 ?7 x2 P8 Z8 `) V
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制
    - R" K4 \4 D! q7 G# v
  1313. RTS" L+ s0 C. @" C( z

  1314. 6 z7 D. T2 H# W% D
  1315. ;----------------------------------------
    ( ^9 s9 |9 C8 \* M
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式
    3 ^/ Q2 C4 n! U4 ]; A
  1317. LDA FC_Cpy_To_H
    ' d4 L) r# u: W/ I
  1318. STA $2006% _; K7 @9 n" n0 q7 B& l7 R7 `
  1319. LDA FC_Cpy_To_L
    . Z! I- z  f5 @5 a
  1320. STA $20060 d' F8 q3 G" Q1 G6 g2 M8 i
  1321. LDX FC_Cpy_Count_H7 ]) r- e2 Q  J& }9 ^) {
  1322. LDY FC_Cpy_Count_L3 r- d( I" h3 f2 Z1 I8 `
  1323. LDA FC_Clear_Val
    ; N! `, G0 H, I5 k& Q
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查
    . F, v6 q  E, {! u* B
  1325. BNE FC_Ppu_Clear_Copy
    7 Q8 J1 z! k. c& c- c9 I" \4 N
  1326. DEX# _" u  A3 i7 ~+ s; r4 C, B) M
  1327. BMI FC_Ppu_Clear_Over8 n7 {: p: w% u" {8 X8 o/ {
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU5 z9 Z& n# _5 [9 q3 B0 t# F( z
  1329. STA $2007
    3 I9 N! O" L7 H0 R. o% s
  1330. DEY
    6 D6 c1 _  ^8 f1 p7 a
  1331. BVC FC_Ppu_Clear_Count* |7 t! g2 B; d% j% D
  1332. FC_Ppu_Clear_Over:    ;结束数据复制
    " n8 [4 z7 n8 J8 Y
  1333. RTS9 m9 f4 Z/ Q7 a* n$ g! r; E: m
  1334. 9 q( Y) @3 K6 p
  1335. ;==================================================+ l; N9 n9 j8 _# g! \3 i9 z& Z
  1336. ;保存RAM数据! U# W7 E0 K. _, u
  1337. Save_Ram:
    2 L  W9 ]1 ?; c( c5 j7 y
  1338. LDX #<Save_Ram_Data
    * B7 a0 v% g8 o. T# k
  1339. LDY #>Save_Ram_Data7 Y* p$ f; k. @
  1340. JSR FC_Data_Copy0 d8 X# j  _( D" h& b4 M$ s7 b; N
  1341. RTS
    # c4 u0 t/ M0 [& `: U

  1342. : F* ?0 ]0 H8 E- ]9 t, [
  1343. ;加载RAM数据8 J: K# t' t5 u* o6 k& V
  1344. Load_Ram:
    - y# B- J9 W' J  Y; ~1 N& s
  1345. LDX #<Load_Ram_Data
    3 ]/ N' s+ N- |0 S- g0 T
  1346. LDY #>Load_Ram_Data! w  n% F3 n/ |' s* Z9 x
  1347. JSR FC_Data_Copy
    , d4 G. z- ^4 |; a' V! r
  1348. RTS
    8 w/ d& c! Q; W& `' m
  1349. 2 c4 a0 R' k4 M! l
  1350. ;保存PPU数据0 }0 ?, E  n# }% G! P  R
  1351. Save_Ppu:# n" B6 p% D6 r7 n3 b) |
  1352. LDX #<Save_PPU_Data. B7 D2 N3 [( Q7 G6 T, r# s
  1353. LDY #>Save_PPU_Data
    . n( w( D" z0 V8 c+ H3 _  p' }
  1354. JSR FC_Data_Copy/ ?0 x# b( h( o. y0 H! O0 n
  1355. RTS! a# i* V$ A) D# G) K

  1356. 2 k. x+ i  [8 t1 ^7 g
  1357. ;加载PPU数据8 a$ t. b- `5 ?- n* A
  1358. Load_Ppu:
    , F0 b$ s1 S/ V. M" \( }4 c$ y: O& m
  1359. LDX #<Load_PPU_Data; `( M' Y  S* |9 i, y9 P
  1360. LDY #>Load_PPU_Data
    0 G& }6 T/ a# P% s, l7 L4 c
  1361. JSR FC_Data_Copy; K3 a/ V: f; G
  1362. RTS
    + i# G4 m! F- |& M+ k6 o
  1363.   D- D8 `8 q$ ^0 X7 ?. b7 K( a
  1364. ;清空PPU数据
    6 ?* f2 l! C) R2 w/ e, X8 Q
  1365. Clear_Ppu:$ H/ T/ B- K3 Q' z. s
  1366. LDX #<Cln_PPU_Data
    ( ^( y" W0 M! H9 y% i# ~  w
  1367. LDY #>Cln_PPU_Data
    2 K4 N9 _9 j" d5 y2 }+ [9 b
  1368. JSR FC_Data_Copy
    : H; F: k0 V! K/ F+ ]) d9 f
  1369. RTS  N: m9 S* B- G* l

  1370. & A6 d6 O, T+ h/ |% p( G* v
  1371. ;==================================================
    3 }8 l5 o! t" ^! T1 w/ S
  1372. ;数据配置
    3 R) y: B0 T$ X
  1373. Save_Ram_Data:. z$ ]3 k) B! E7 p9 [8 x6 U
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM
    7 s5 I; r6 V# x# A
  1375. Load_Ram_Data:
    8 u/ _: }) y5 t; J5 s) m5 X+ s( B
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM
    , u0 o5 Z6 R8 T- W, I( _! g
  1377. Save_PPU_Data:9 d' T/ L2 u! |
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM& w) O; K2 G' ?+ N! w; y
  1379. Load_PPU_Data:
    # f) C) f3 l' Q. x" C) x3 z3 Q
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU
    4 U$ I; `' D# r, \  E
  1381. Cln_PPU_Data:
    " j9 y6 N" B" n( T+ H4 s% |0 d1 J
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR
    1 Y" F1 j, a3 u

  1383. ( m. F& x. p8 y; Q3 y5 b$ \5 p
  1384. ( }1 q& Q. Q; f
  1385. ;==================================================- z. l2 S* b5 y4 v& ]* ~3 {
  1386. ;文本数据PPU显示地址
    ; `; u/ W2 Q" O2 L# e
  1387. Text_PPU_Addr:
    & P1 W. `6 q7 g4 m0 k/ t
  1388. .WORD $20C5
    & A  Z2 U% e) P9 }
  1389. .WORD $2105
    5 }! B* h! M( Z& }
  1390. .WORD $2145
    $ o; v/ P7 P. {1 ~" }
  1391. .WORD $2185
    ) K6 q: H! B! ]' J; Z
  1392. .WORD $21C5: d: g6 d7 ^/ O  X, E$ `) }; [
  1393. .WORD $2205
    5 h6 z# j% Z% m: R6 N( u; x- n: _
  1394. .WORD $2245
    5 R$ z2 t! N( x: b( ?+ M" n4 E# o' E
  1395. .WORD $2285
    1 d$ W# X  ^9 s1 k. h
  1396. .WORD $22C5
    & f# Y: d& G+ B: P
  1397. .WORD $2305
    2 v. @( S  [" w
  1398. .WORD $2345
    5 y9 c' F" I  j" s9 F

  1399. & g* L- S  w/ n, y" t% e7 h% L' t
  1400. ;==================================================; j9 }( w# j1 w& x/ i* Y8 {% ]5 m# ~4 F
  1401. ;文本数据PPU数据地址( N2 M! F  S( l7 }9 V$ r+ B% \! W
  1402. Text_Data_Addr:
    0 K- F) ?9 @- G7 ?9 [* E
  1403. .WORD Text_Data_016 T* D! C) _3 r
  1404. .WORD Text_Data_028 Y' ]. f8 {( u* g0 n3 D
  1405. .WORD Text_Data_03- j/ M! g2 z7 n4 T* d0 ]2 Y
  1406. .WORD Text_Data_04
    , F1 C7 T2 c! \! Q  N' _  a
  1407. .WORD Text_Data_051 j% \6 o. ^4 H  F/ M( I' c) q
  1408. .WORD Text_Data_06! K2 }1 B+ H  R( g( K
  1409. .WORD Text_Data_07- _, D8 z1 f' n* ~1 J7 ?. ]
  1410. .WORD Text_Data_08
    5 \4 O# H( b" v) U
  1411. .WORD Text_Data_09* G+ ~. D- W0 L$ [2 i
  1412. .WORD Text_Data_10" U6 m3 z4 `0 x+ S
  1413. .WORD Text_Data_11
    6 Z+ O* s' R- A
  1414. .WORD Text_Data_12' K# q. b/ Y/ i( ?- F4 ~
  1415. .WORD Text_Data_13  K; ~, J0 w- F: n) d! G
  1416. .WORD Text_Data_148 A. n( t( k8 a- i; N+ E& O' k
  1417. .WORD Text_Data_15* x9 C) }5 D6 U7 c$ K
  1418. .WORD Text_Data_16- O* G$ T1 Q& ~1 E: _, ?" e+ [! g+ w
  1419. ) E  i4 M3 o: z2 [! Y5 D
  1420. ;==================================================
    ! y- W  `9 y) B; F3 M  u  C5 R5 G( \
  1421. ;文本数据3 k' f6 w# R3 X' s
  1422. Text_Data:
    : E3 ^% u' |5 ^' K3 ^* w
  1423. Text_Data_01:
    $ L& ?( x: c* G: v
  1424. .STR "01.INVINCIBLE"
    0 a9 P+ A  h/ a
  1425. Text_Data_02:
    8 @' o5 n. e' w: q, J$ i
  1426. .STR "02.INVINCIBLE PLUS"
    6 r) J6 F1 @, g! e
  1427. Text_Data_03:
    + k' f! Q" d+ e3 O
  1428. .STR "03.LOCK LIFE"
    " i2 S" y9 \9 }) O& I7 e
  1429. Text_Data_04:
    6 h! \/ ~" Z7 H8 p4 n
  1430. .STR "04.LOCK WEAPON"( A$ M' `6 l/ K4 ]
  1431. Text_Data_05:& [! B3 k6 S+ F6 J. t: }: ~
  1432. .STR "05.SEL CHANGE WEAPON"
    7 I6 i5 G% d$ j& h; |( O' r# Y
  1433. Text_Data_06:! s( N  @8 R' ]  H0 V2 G+ y1 X
  1434. .STR "06.UNLIMITED JUMP"  v$ m( t" }8 O# T" Y. J
  1435. Text_Data_07:# ~* q1 x% A* G6 y
  1436. .STR "07.MOVE FAST"; B4 A- f7 w0 Z: P+ B
  1437. Text_Data_08:/ V0 N% ^9 H; j4 c0 @, }& B! j( F  ]
  1438. .STR "08.SWAP SKIN"
    5 {4 Y1 V" W; C. G2 ?, A
  1439. Text_Data_09:- y) v& ?6 R% y3 {
  1440. .STR "09.EQUAL BULLET"% W8 E7 _  l- [$ ~( L, K
  1441. Text_Data_10:
    & F5 ^- D) O& _" j* p) U" n
  1442. .STR "10.STRONG BULLET"
    : s: D$ Z% Q& |+ J
  1443. Text_Data_11:
    3 c" q7 E+ g' @5 ~! P
  1444. .STR "11.KILL BY ONCE"
    $ F1 T1 i7 R  Z' ~( z& ^7 C5 B
  1445. Text_Data_12:5 z$ U' n8 I: N0 j/ @
  1446. .STR "12.FULL SCREEN KILL") j; _6 Y2 G. e6 _3 z
  1447. Text_Data_13:
    $ n. P  H* N5 Q4 Z6 P. ~3 ^6 u) o/ M
  1448. .STR "13.DOUBLE CONTROL"3 B# A( S/ o# k
  1449. Text_Data_14:% L& ^( c" `3 V. J
  1450. .STR "14.REMOVE E-GRID"0 `5 F2 @  D( f" {' m8 X7 _
  1451. Text_Data_15:5 J( G( S) r3 r$ y
  1452. .STR "15.FALL INVINCIBLE"
    , W7 j9 d& ?6 o1 {
  1453. Text_Data_16:
    8 ?9 H& b4 O0 l& f) S' S6 p. J# ^0 S
  1454. .STR "16.NEXT STAGE"2 B. t8 r+ E5 ]$ n. `$ T9 g
  1455. ) E" P) h0 {1 v
  1456. ;==================================================( y, g! X' G' ]% ?9 G
  1457. ;功能开关检查地址& p  \) m$ n9 Z& ^. j5 Y
  1458. Function_Addr_A:6 l/ ^. L2 N# J. \8 V9 d% u1 I0 E
  1459. .WORD $01C0
    $ u7 l+ c% C9 U( Y; u# a
  1460. .WORD $01C0
    + L% n. E% R! a6 F! [& h
  1461. .WORD $01C09 U6 V4 O% W( h3 [; n- E
  1462. .WORD $01C0
    ( h- N4 J2 G6 Q) b; Q: \, D
  1463. .WORD $01C0- t  v2 W; _6 ~: y  ?- v0 h
  1464. .WORD $01C0
      w4 X1 g, a, R2 W& O( a
  1465. .WORD $01C0/ T# m" y( h5 N: L
  1466. .WORD $01C05 V! N4 |( v) R" Z, V
  1467. .WORD $01C4
    7 M: x. {" b' V' v- l( p! k8 t
  1468. .WORD $01C4
    0 @: x7 T# V/ w" |
  1469. .WORD $01C4; m; c3 `, f3 y8 v
  1470. .WORD $01C4
    0 Q5 T& a- D1 e# B5 l# B& H
  1471. .WORD $01C4
    6 {- v& x. l# A, g' j1 g! N
  1472. .WORD $01C4
    ( K. m! O+ J: i( ?: U
  1473. .WORD $01C23 o. F* J# P  _( g( `( o6 o
  1474. .WORD $01C4
    9 s( R% S# C9 O6 g5 T+ C

  1475. * p% A, [0 o# h0 ?! G7 g
  1476. ;功能开关检查地址: d& O( `  _; ^) h7 }' I) R3 z
  1477. Function_Addr_B:5 e2 W1 M$ l3 \- L/ j$ N& _
  1478. .WORD $01C11 B# _& D, ~9 [4 @' G% M" }7 S9 }
  1479. .WORD $01C1
    6 m8 z% C9 h* z; G/ G5 k
  1480. .WORD $01C1# S0 G6 s  }' j. ]5 C. K  r
  1481. .WORD $01C19 M" y/ g" c" b$ t! }. u  \. G
  1482. .WORD $01C1
    , ]8 n$ q3 ^8 ]2 ]3 V" G
  1483. .WORD $01C1
    % D, k. Q+ c* d
  1484. .WORD $01C1
    / W, h5 |# d' ~. i
  1485. .WORD $01C1
    0 P/ Q  j# l( y* \3 f
  1486. .WORD $01C4/ k1 F, `' A  t/ M% Q: L
  1487. .WORD $01C4
    ' I( z3 i8 p( d$ _) V- g, [
  1488. .WORD $01C45 T5 _1 k/ {; {+ h
  1489. .WORD $01C47 w! _& D; Y6 b# }  M. U% q8 o  r
  1490. .WORD $01C4) M( _: i# u1 L& @
  1491. .WORD $01C4
      u8 s: `* p5 A5 I9 p3 \
  1492. .WORD $01C3
    9 X: A6 Z: W+ a6 W2 m
  1493. .WORD $01C4
    # b3 s# ~$ @% A" _+ T

  1494. 0 G9 x  Q' I4 ^, R$ n+ E. b) a
  1495. ;==================================================; \9 Z3 @/ n, [" H0 e  d6 `
  1496. ;功能开关检查数据# l2 N& Z0 P0 n* ^
  1497. Function_Check:
    : V% Q8 X& w: q7 f
  1498. .DB $01% c' _" ?! e# y# q$ S" e
  1499. .DB $02
    ( {! q0 X+ l$ g9 A5 f: B- |3 q
  1500. .DB $04
    ' S( s0 f! U0 i2 x; W& j; k
  1501. .DB $084 q1 w, d; |9 i' z  F$ X
  1502. .DB $10
    - E# M, |( c" L+ j( R$ Q# [: u
  1503. .DB $20) f" f* r# D7 E  o* ?: M7 t. n$ h
  1504. .DB $400 |. t: C& k  b4 o# ?0 Z
  1505. .DB $80
      r4 T0 n! q" k
  1506. .DB $01
    8 _$ _: }, K* h( q, ^6 A
  1507. .DB $02
    0 H3 m0 N- _9 f, }( g
  1508. .DB $04" p5 b3 E) I: e
  1509. .DB $08
    3 O! @6 w: f  S8 A% s4 K+ z
  1510. .DB $104 Z6 V$ n  x( D3 k
  1511. .DB $20( J5 O, ^! N3 t" J+ @4 X- g3 }
  1512. .DB $40, l9 ]* n7 ?1 K; a$ M/ k
  1513. .DB $80
    8 r# E- _% Z3 B5 {4 ^
  1514. * \! P5 P1 p# ]# Q
  1515. Char_Rom:, Y" s8 }0 G6 n" d
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    , Q8 q6 P4 t5 T. K  E8 G" ~
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    " d7 s' f0 u* }2 i
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$002 ]/ A4 ]! m4 {" T+ U$ C& k
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$00+ f1 Y/ L/ n. E( [+ O/ [7 @. E
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19
    8 {. D; s: K, ~  o" {# K3 G5 B
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$00
    2 z1 g# N. ?- Q

  1522. ; J7 h- ~* w( Q1 Q3 a( \

  1523. * h7 [7 }& h4 C7 R% i5 b' b  w
复制代码

5 o& w* ]& z0 l0 ^8 q6 w( s
游客,如果您要查看本帖隐藏内容请回复
7 [: b" q! {3 _
flamecyclone.ys168.com" F( i, _5 W* Z8 @; Z& |% T- g) {
www.nesbbs.com

本帖子中包含更多资源

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

×

评分

2

查看全部评分

签到天数: 3128 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1617 天

[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
回复

使用道具 举报

签到天数: 2607 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1453 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 187 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1866 天

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

使用道具 举报

签到天数: 1271 天

[LV.10]以坛为家III

发表于 2019-12-5 06:49:43 | 显示全部楼层
樓主的修改一定支持, 魂斗羅是喜欢的系列.
% ~& {- F3 ~# E3 l! u) o" V9 K多谢楼主分享
[发帖际遇]: waikwokt 打扫环境卫生,被奖励 2 个 柠檬. 幸运榜 / 衰神榜
回复

使用道具 举报

签到天数: 1213 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3570 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3262 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 606 天

[LV.9]以坛为家II

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

使用道具 举报

签到天数: 7 天

[LV.3]偶尔看看II

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

7 p; N  X* A0 \5 `( C  X. e) yTec.PNG (8.05 KB, 下载次数: 0)
- @- ?- W$ y0 l, S# l5 q9 o0 f" x% f
下载附件  保存到相册# \% A: e: T5 [2 t7 K6 t0 l

/ s8 R' f/ ]* V) J0 Y2020-3-13 13:33 上传$ @2 t# }2 F) H2 [9 G
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S
: f, i$ K# n. ~* P修改内容:
( `9 H' o7 s0 v7 T  q, L7 B% `0 m0 O1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s
0 k0 I: A% p" X  ^4 N# A* o  K& S. i2 c$ ~) ?; k- W$ {; w" l/ W7 {+ W
不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-15 15:33

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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