签到天数: 2016 天 [LV.Master]伴坛终老
|
& [+ T) X4 M" f7 c
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档
# E3 c8 A5 z& s; f3 Q& ]' F9 E I% S! X, d8 u8 Q: Z
这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧
! [% o! q! P6 i) I" j4 x
& m# A7 O& |' h% \1 v(一)准备工具:
) Q1 J! f- E8 W% F1 {2 ~1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例! V( e2 j, n j' Y0 _
( }' N3 t, p% x1 F6 U; ]! vARMIPS作者是Kingcom* A8 x d+ n6 ]- l2 z4 r# [
ARMIPS源代码github页面:https://github.com/Kingcom/armips
0 H( X( y! \8 R Q' X2 d0 vARMIPS Automated builds页面: http://buildbot.orphis.net/armips- B4 g2 R9 O; f
, a0 Z, H* u. t) z; k ^" F2.一个将图片转换为二进制bin文件的工具bimbo 1.3) ]5 g% u: {4 C! J$ g2 D
8 }7 x' D& p( v, ?4 ubimbo 1.3作者是Aleksi Eeben4 r3 k2 I% y, n6 e
) I/ [: X$ }: o: W5 Kbimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
) ]7 j! Q3 @* e) G. ~0 t2 b: @& j
3.一个windows自带的画图或其他图形编辑工具
$ r3 R+ c; O: `& L% W. Q, U$ o4 V; i$ k' k6 @- W
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)
8 }! |7 J* G$ r F7 e& m- j \: }9 @) A7 f4 R' u% I
(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP! E& ?& E$ X- d4 L2 q8 v
; @7 N# ]$ l/ z: J1 _
: d: g5 H. ]( K, @
/ V. Y* t, K" K0 ~(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin
# v! }* _1 [! _- Y% g- a* C
' }; z/ M, ~: I: K4 }3 h' Q9 e' w+ x) k7 r. h g3 ], A
0 _, w' B( @! r0 T; `2 j' Q2 t; u(4)新建一个文本,我起名为16pic.asm,文本内容如下:5 V7 F+ b5 z1 ~. i& W' s6 x, Y/ L
- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000' [- r+ o8 u: f& [: Z) l
- .create "16pic_demo.gba",0x08000000
5 K* `' j- O# Q6 Z# ~ - ;设置为GBA架构+ b7 M* ?& F9 i* _/ i
- .gba
# a3 Q6 ?* E' o+ d, O - ;设置为ARM模式+ s3 G( c! O$ M
- .arm
; V# e8 u6 m" R( L) K1 x6 n - ;设置起始地址是0x08000000
' f- r- H5 [: q8 V4 ?4 O& W# i - .org 0x08000000& ^5 ~8 m& s4 v N8 {1 H# [' j
- ;创建长度为0xC0文件头数据区域
! G* ~7 N' T8 j; h - .area 0xC0! T* s* M/ R9 J+ N; _
- ;填充文件头数据1 Z; `# W9 H1 a3 I( W# g. C/ ]* R
- .fill 0xC0,0x00
- @& T( X; Y6 y) F, H% G" I - ;区域结束! ~$ o- U2 L1 l) l" {
- .endarea
) {) n- ~$ `$ W& f* ? - ;主程序1 ^( ~7 g5 K" ]7 \$ J# k
- main:% B- I, [3 K8 u' D+ a% W" _
- ;设置屏幕模式3,BG2开启- Q0 J9 I- s: p Z* E
- mov r0,0x04000000
9 Z! T. S: t$ e+ q8 T0 Z4 G) ` - mov r1,0x04009 [! g! x+ U* M" t: l3 m( ?+ I
- add r1,r1,0x35 h: W( T' p/ u' y
- strh r1,[r0]: o2 g/ b! Z, e; I) A
- ;设置VRAM起始地址0 r/ K& q# N+ W! P0 n1 q- k/ D
- mov r0,0x06000000
: A$ k" ]5 [) v) R, ^" [/ F- ~1 o - ;设置图片地址2 N$ @. |9 p# @8 d
- ldr r1,=pic$ T7 O# U/ f0 {0 m5 ]1 T, I9 j/ S3 |
- ;设置数据长度为0x9600
: P) l( p3 y \ - mov r2,0x96004 `$ P% t* Q5 G u# d/ } S1 T
- ;传送图片数据到VRAM
9 k' l9 Q' _" l - loopl:
. P6 e- w' d% U1 [ - ldrh r3,[r1],0x2
& U" f7 m, [" q4 s# x8 M. I ?9 T - strh r3,[r0],0x2+ I/ `4 d/ |8 a. {/ W8 k8 ]
- subs r2,r2,0x1; L- o( a' N3 t1 t3 J
- bne loopl
0 z* D y8 S0 z/ A1 @ - ;进入死循环! Q# V' _% A, o+ v \; u0 q- B
- infin:
) k5 d. V$ W8 n& _( x7 Y - b infin
: f' X4 S4 N" c - .pool: I s" e @& g* J
- ;导入图片二进制数据
3 x" e& q! l' _4 G4 W1 w - pic:* F+ n" |+ _8 `' m* s5 d. Z0 G( P5 p
- .incbin "16pic.bin"
- ^7 T) q1 c! f& B/ J - ;在0x08000000地址设置跳转到主程序入口+ d4 j8 N: o1 Q3 X4 M9 u, y5 v
- .org 0x08000000
7 R+ f. w) c' G) a; @ - b main
5 P; v8 a! O6 q! C5 f3 w# l/ n - ;关闭文件$ Z5 e9 q- z8 c. a C6 g, Z
- .close D* H" t& J% M& L, l) C m$ p
复制代码
, R# R' k3 _6 C! l% h保存!6 j- I3 y k' u9 ]9 d5 z' r& A* l
) s7 E7 Y8 v% L8 F2 }7 a" b
(5)把16pic.asm和16pic.bin复制到armips目录下
+ U. V' w& L) C+ `# O. j0 _" u* E# j
6 }/ A, P- B2 r+ ^) E5 p(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件
( r. d3 O2 x4 N% C, r
7 k- a) b& |% ?& g5 `" k/ g(7)用GBA模拟器打开16pic_demo.gba观看效果
2 p9 @ p Q1 l, o* Z9 d, e1 g! i4 Q x! m5 c/ @3 ^, r6 ?
, E1 @) S& X$ z6 ^
5 g5 P3 }0 r8 Q关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
5 m& u; t) j- z3 v |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|