签到天数: 1993 天 [LV.Master]伴坛终老
|
原帖丢失了,重发一份。3 b; _6 D% Y! k( C4 [
0 L7 T1 X' D- J6 j& j# l: r修改内容:
% }6 {0 j0 D: q' c1.P ROM由128KB扩容到256KB
9 K: C6 g M6 v5 V2.按START+B武器数量为992 X1 }4 x$ S% `* E6 e
3.按START+A补血
, d7 _, x' i/ h" M
# V j1 i- M$ Y这个HACK ROM本来以前答应某人做个例子给参考一下,因工作忙以及以前用的切BANK方法不完善的关系所以没放出来
, x: D1 a) `. T& ]: p, y
0 G7 ?4 @2 T: T& y# W从原单位滚蛋后就有时间来弄一下
5 z1 g. b% O' H9 R- E
0 _/ _, s$ n- T: a0 X7 `( z关于如何扩容:在文件头后面或驻留体前面添加一大量0xFF或0x00,有可能或在程式中间添加,在哪里视游戏而定吧,有何规律我也不清楚
' l) C. W8 B4 `# a' `: }+ ^" h
; q3 |( ?+ [$ d9 e& m: L5 z关于如何切BANK:请看相关mapper资料吧
4 R8 N9 m3 M( c, R' Y9 R4 \& S. [
. h$ F% o* q2 f' G说说我双截龙3 MPPPER 04如何切BANK:
- n. q" R+ i t9 q- $xxxx" j( `+ o q2 `% l2 _
- LDA #$075 W+ F) W3 I! r5 |1 E
- STA $8000 ;把0x07写入8000端口,选择要切BANK内存地址$A000-$BFFF( ^1 j: C# q9 W4 m: f$ e
- LDA #$0E, y* F2 g4 \$ A0 z) p; Y* }8 D1 e
- STA $8001 ;把0x0E写入8001端口,把ROM的$1C010-$1E00F地址内容写入内存地址$A000-$BFFF
2 H4 y" @$ D0 ~" v% N3 ^ - JMP $A000 ;跳转到$A000执行5 M! T& v J7 ]0 X
# f9 b2 y- w" K! l* H5 ^$ g% f. u- $A000:
5 ^3 l6 |8 K' s' v2 ^ - .
4 E* i9 m$ \+ I7 | - .
# \9 }5 L( E2 T! D - .
, M8 t0 `8 ]0 o; J* g- o, ^0 e& D - .
7 \$ L" e6 [: j( L1 f0 i+ e: s - JMP $xxxx ;执行完自写的程式后跳回去
+ u8 T8 I9 b: y3 [- H% }
) ?2 b& V/ [) o& t1 f/ v- $xxxx:) A7 C: r- Z' Z' U$ j
- LDA #$07
0 m% ]3 F' E) H& R v: V - STA $8000 ;把0x07写入8000端口,选择要切BANK内存地址$A000-$BFFF+ |, O7 e/ C: d
- LDA #$0D
" i0 z) Y3 R5 }& G6 ?" A2 F' s5 W - STA $8001 ;把0x0D写入8001端口,把ROM的$1A010-$1C00F地址内容写回内存地址$A000-$BFFF
5 d5 K6 [3 f2 d - 1 ]$ O- |, o: ^' q. \, x6 i9 s. M x
- 切BANK前建议做压栈操作保护寄存器数据,当切换完BANK后出栈还原寄存器数据,这只是建议* ~/ ^, W( W1 J. x1 F: W
. \' G5 _1 K! C0 J) U
复制代码 关于什么时候切BANK:用NMI中断来切BANK吧(在NMI中断程式中插入切换BANK程式)( o. F+ o+ {8 u/ f6 I+ |
" u2 e1 \1 |7 O2 F0 s
附:ROM 16KB BANK编号
" n, g/ p3 D/ g4 b/ C, L. K0 \# [
4 `7 f" _' i1 T9 ^5 ~4 W5 t1 kROMf地址 BANK编号) A" r1 O" `; H% D6 o9 ^6 v7 {; d
00010-0200F 0" E; |6 N" y( g N# a9 b* i7 W ~
02010-0400F 1
! Y5 y2 F1 s& Q4 D5 _' y, x04010-0600F 2
1 Q/ a u D/ t06010-0800F 3" k1 C2 E5 D: w
08010-0A00F 4
+ m7 a, f+ L; K( x1 \3 v4 u9 H0A010-0C00F 5& O. P# r! ~1 d( w. _5 A/ G4 B
0C010-0E00F 60 N! _- b3 t; I9 J9 j& e" O
0E010-1000F 73 _$ |8 D5 v; S+ D
10010-1200F 89 f: F; k0 V! F% Y( i% d2 U, g8 D
12010-1400F 9* q; w0 W% I3 D8 T/ f3 |1 o1 J
14010-1600F A
+ v% Y! {& G- t3 I# s16010-1800F B
6 N- a% `8 I& A8 Y$ q7 @18010-1A00F C0 v+ `1 D9 B/ U" y, _. a
1A010-1C00F D9 G" h: c K( D8 I4 O; u. J [% U
1C010-1E00F E
; F# w2 w w$ ~. G1E010-2000F F1 g+ o/ |2 C: S g& H1 F* X
.
" D5 q0 f( f; A2 K7 w.) B2 b! p- c+ C3 K
.' O1 D" V: Q$ ^; U0 F# J+ V
- u f( [" l% ~1 T" P
解释一下我为什么把P ROM 128KB扩容到256KB,不扩容到144KB?0 G& P6 _" u0 s0 p1 a% h
- s3 ?: Y0 t( b! p" M) d) C3 n
因为扩到144KB的话有的模拟器是不认,无法运行
2 q6 d( w/ d! J. q5 i$ j: V5 `; G# `1 e" U# x. v% s& v
为了全FC模拟器能兼容,所以只好扩容到256KB! l* g3 Q8 n8 e5 N' P/ K) A
8 i6 Q2 H3 K) @% P. m( E" W
补充:扩容后记得修改ROM文件头P ROM 16KB数目(地址:0x4),不然有可能引致载入ROM失败或死机
9 `+ t0 D/ X) N% O9 O+ i# L
0 S- O4 l; y1 p4 f1 X9 L |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|