签到天数: 2152 天 [LV.Master]伴坛终老
|
原帖丢失了,重发一份。
; N6 k$ k5 N5 ]7 m$ l- q+ g$ N7 ^, e% z. z8 g1 Q* E
修改内容:" `7 x# x ^. H1 F$ z0 e/ j1 W
1.P ROM由128KB扩容到256KB
( s, }# ^3 L* o( n9 y, s2.按START+B武器数量为99
9 D) _. s; G( u+ @5 s+ ?3.按START+A补血 _: g% F2 g9 [- G. Z! O
1 x' G8 W! [# h; A: @7 M9 e, y- |这个HACK ROM本来以前答应某人做个例子给参考一下,因工作忙以及以前用的切BANK方法不完善的关系所以没放出来
! w! C% k0 q9 e8 v2 c5 t% _0 g7 ^4 w
8 ]9 L+ f$ M5 c" Q x) ~9 G4 m从原单位滚蛋后就有时间来弄一下
4 S# {5 R2 T6 P4 z( |5 ]2 _, \ E0 ~+ v1 {9 s
关于如何扩容:在文件头后面或驻留体前面添加一大量0xFF或0x00,有可能或在程式中间添加,在哪里视游戏而定吧,有何规律我也不清楚
: ?( f3 a, K' e) }& E3 [
) ?7 J) ? z/ c8 M8 m关于如何切BANK:请看相关mapper资料吧
5 W9 ^+ i5 U# Z& B4 f. Y
% f8 B8 V- x( `3 c说说我双截龙3 MPPPER 04如何切BANK:- . F. j/ R2 Y. j$ G7 b* s+ _0 t
- $xxxx& Z8 z6 D* ?/ a j7 r' I
- LDA #$074 Q# k! `# D# o6 {7 k
- STA $8000 ;把0x07写入8000端口,选择要切BANK内存地址$A000-$BFFF) ]. I5 O) e( h2 X
- LDA #$0E
# Z8 I% V Y5 b/ p" E0 e' q - STA $8001 ;把0x0E写入8001端口,把ROM的$1C010-$1E00F地址内容写入内存地址$A000-$BFFF5 c0 r/ D4 S9 v
- JMP $A000 ;跳转到$A000执行
" p2 y# Z9 O6 M: @1 R; i& E- _
: I0 z k# n. B) X+ a" w' n4 P- $A000:& K6 X! f2 z: C' w
- .7 G! H/ p* q: h# U; H
- .5 U3 E5 z1 w' S
- .
) a5 @ z/ H* m3 J, } - ./ T& N% B% y# o1 Z
- JMP $xxxx ;执行完自写的程式后跳回去1 X8 V9 q/ D8 B7 C1 h
* T1 v) G; V- l8 Q! b2 K- $xxxx:+ ~8 [( g7 K& f# A/ O3 y$ g+ l E
- LDA #$07 e. s$ E6 p8 o
- STA $8000 ;把0x07写入8000端口,选择要切BANK内存地址$A000-$BFFF4 Y7 U# R3 H ~# Q0 }
- LDA #$0D
7 D/ \4 q+ u2 Y, t( y' x) p# N - STA $8001 ;把0x0D写入8001端口,把ROM的$1A010-$1C00F地址内容写回内存地址$A000-$BFFF+ k/ w/ L4 \. ~. K0 `+ v( d' n/ V
- ; Y- ]1 A& E7 O7 z% ^3 R8 j
- 切BANK前建议做压栈操作保护寄存器数据,当切换完BANK后出栈还原寄存器数据,这只是建议
4 F/ r- F' K5 `1 e s9 A5 W6 s - # j5 y! l7 q) n9 G: X
复制代码 关于什么时候切BANK:用NMI中断来切BANK吧(在NMI中断程式中插入切换BANK程式)) A( \- f0 @0 }7 l! q! Q$ m
, g0 y4 e1 j7 E附:ROM 16KB BANK编号
1 Q2 N0 ?' k4 Y* j0 H2 F8 ?
A/ g/ M( P9 m+ Z7 _6 z( }2 nROMf地址 BANK编号. T& |2 K2 }1 S
00010-0200F 0: V) ^7 @5 c, N3 m! ?7 N! G; R
02010-0400F 1
( W; a/ O9 o/ W! f- V04010-0600F 2
. q' W/ _$ E( E7 n) T$ y6 J$ D06010-0800F 3
/ d2 a# Q9 l5 d5 o& c7 |08010-0A00F 4
4 }% H7 z4 G# e' u% K- a0A010-0C00F 56 [& g1 V, q0 g" s' `- o
0C010-0E00F 6
; l! i( Y3 o5 z& R5 h1 S3 a0E010-1000F 7
. @ R* m A- X3 L6 G10010-1200F 8
. J4 }, m, {* M8 Q12010-1400F 9
0 i/ y! ? D, o14010-1600F A
( l) f/ Q; p8 Q8 y% B+ }- V16010-1800F B
; G9 `# s5 \4 X0 @+ J( P+ [- ?18010-1A00F C- z2 N0 a8 `% E( W2 o0 o
1A010-1C00F D& `. x* q- U8 E6 p3 d8 Q+ ?/ z
1C010-1E00F E9 U5 S1 l9 I! |$ }. P+ X
1E010-2000F F
, |. t2 Q# r+ K$ h1 f- S1 _.
% {( S' B+ ~5 o ?: o$ P.
# H+ ]7 t2 g( Z9 k. f! m6 ^2 S.& S+ X" V6 G0 {% p# }: @
`7 a2 C& z& {0 ?( s
解释一下我为什么把P ROM 128KB扩容到256KB,不扩容到144KB?
5 q! R/ D* h" b/ O5 D) K7 g0 M. W% T2 K d3 g& ]7 w2 Z
因为扩到144KB的话有的模拟器是不认,无法运行* X$ X7 v4 r6 m8 D. Z/ ^
* b" l- e( G; S5 g' a; V为了全FC模拟器能兼容,所以只好扩容到256KB
% n1 I' ^/ A- h; D! u8 S
8 H, {8 s8 Q' J& _+ m( u1 c补充:扩容后记得修改ROM文件头P ROM 16KB数目(地址:0x4),不然有可能引致载入ROM失败或死机
' L" a8 M$ H1 I6 q5 d8 s
' S5 h" Z& I/ T: J& z2 Y6 ` |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|