签到天数: 1885 天 [LV.Master]伴坛终老
|
) X0 U3 V# h/ U, V! q3 n- N1 H当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档
: v3 Z8 X" M. A" M3 P4 D r4 @# Y/ @) }- W* l- O' ]
这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧$ }$ H! r' p2 C1 D+ Z% e
/ a" g4 ?3 i- x3 E; Y# o
(一)准备工具:+ m% w: j( N6 @0 @; B1 X
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
3 S! z8 r7 Y$ X
1 X& j- Y) R( z9 q& xARMIPS作者是Kingcom6 O( K" |# b: m+ m
ARMIPS源代码github页面:https://github.com/Kingcom/armips4 {3 E5 X$ I& T+ T
ARMIPS Automated builds页面: http://buildbot.orphis.net/armips
' |, v3 N. h8 k, M6 S; L0 }5 E& z- U, M* h( ~6 b: h- C1 }
2.一个将图片转换为二进制bin文件的工具bimbo 1.3& v/ N- \6 Z3 a/ K/ I# t; |5 f
- [& e( e2 K& h4 ]% h. Obimbo 1.3作者是Aleksi Eeben
3 y3 d. E+ W5 w4 H
) j5 t2 W. k3 |% s. ibimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
, D% k5 A9 h6 ~& c0 t1 Y+ R. n. c$ V! N8 a; n
3.一个windows自带的画图或其他图形编辑工具* s9 \0 s- d! {( e% f& e( e, D
* M1 _5 f4 E9 t+ }4 ?) ?+ D% \
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)1 o( n" M+ _: X
+ q! a% {( w) i(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP' Q8 n: z7 T6 ]1 X$ @5 {& o7 N
2 {( ^- a' t/ Z* `; T U5 ~4 @4 i; W8 ]: m
( y, Y: P$ n t) W- {. |" W$ f(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin. O* m6 y) R9 G! Y
/ n, m; i7 f6 P- \( W5 X
/ V7 b2 B& P; w( f% x( E( N1 |6 Y3 c8 g! I9 p; @( a
(4)新建一个文本,我起名为16pic.asm,文本内容如下: \ @/ T \9 q
- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
* U1 |0 w% d& } ^2 p - .create "16pic_demo.gba",0x08000000% z$ {9 O, o! ^5 x/ H* e J0 O! [
- ;设置为GBA架构; t* A% i- |- ~6 j" I' e
- .gba2 O6 D/ s- ]# G/ ]$ C! J
- ;设置为ARM模式
8 v) v" W4 A# r* J6 O - .arm. C3 {7 u$ x% l+ a
- ;设置起始地址是0x08000000
7 J+ p+ \7 k1 G6 P# [2 s - .org 0x08000000
( z8 Q j9 x1 [) ~$ t& }( { @+ K - ;创建长度为0xC0文件头数据区域
2 L! y( | w7 s5 X4 L* d& [" s - .area 0xC03 @8 ?: q$ o; m
- ;填充文件头数据' W9 P$ k) e4 c( U; |2 H. a
- .fill 0xC0,0x00; j/ ]4 W3 c, h% |3 v4 k
- ;区域结束+ i2 R+ `- y) i2 R- a. G
- .endarea
n- v! H; _: j5 S - ;主程序
+ L( X4 k+ e! @4 Q5 r1 F2 n4 ?+ V - main:
" }6 |! E9 R4 W: h/ b - ;设置屏幕模式3,BG2开启1 V/ o- d5 h e' r
- mov r0,0x04000000
' \. d* c8 `; X) L. \5 U4 V2 F - mov r1,0x0400
/ L" ^8 p, m& g& k - add r1,r1,0x3
$ @, z7 I7 w. R& b6 x' H - strh r1,[r0]6 x0 U9 {6 t/ ~0 i6 R& Z" R$ _* d! _
- ;设置VRAM起始地址
, E! i7 B/ g f. M - mov r0,0x06000000
3 Q% ~6 k* W0 Q - ;设置图片地址7 W! ?% s" z( O! {# j( ]
- ldr r1,=pic
* B2 o' U p: B, _8 t" a! R - ;设置数据长度为0x9600$ |5 F- e/ a2 p
- mov r2,0x9600
# n: b+ l1 @# w- n6 X' p, \ - ;传送图片数据到VRAM7 r% E) K8 P; o2 z( Z) X2 K/ e
- loopl:; ^3 H0 D0 a9 ^7 j, z) I
- ldrh r3,[r1],0x2+ P( K" }" V, k. H! y3 Y
- strh r3,[r0],0x2! i# y2 u# B* B, \) @( s
- subs r2,r2,0x1% e1 ~% C, d9 t7 j6 E% P( ` E
- bne loopl% O4 Z' t% m0 I, X. y6 F
- ;进入死循环
* q! \' \' a6 F! }& b2 M5 m& p A - infin:
& J$ G* E$ \- t" s - b infin( E7 }7 Z; k7 a
- .pool
* q1 ^; L% {; G - ;导入图片二进制数据& ^9 `2 i4 {2 [3 [' n5 ?1 q
- pic:3 v ]; ?' h3 f: B5 |% F* g
- .incbin "16pic.bin"1 m. R' l& V H2 V3 H( f6 f
- ;在0x08000000地址设置跳转到主程序入口
$ @. c6 B3 C: w' k0 k2 x5 c) d/ |) ~8 ? - .org 0x08000000
0 g6 ^" O( _" e, @8 s - b main% c8 k* b; V( u) O
- ;关闭文件) Z- J7 Z$ ]7 i4 C, [
- .close
( E7 j$ d) |7 s9 Q- B! M
复制代码
4 O0 r& n- @6 M( ]& _保存!8 h4 b; ]* v& D" M( J; B
, t; s6 ~1 v3 ~9 H: _5 d. e
(5)把16pic.asm和16pic.bin复制到armips目录下7 d% A. P) w: Q4 t! P y
' ^% A) O+ H3 b; F. x(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件- }& s- L2 F3 Z0 u0 v+ I
& n. {2 s' B P# J7 F
(7)用GBA模拟器打开16pic_demo.gba观看效果8 p2 ~6 _6 {1 c: y% o
# s) K" j( z3 {8 i* P1 S* \5 x% u
" @' \) c9 r2 X' i. m4 s( R- {1 T1 Q2 V
关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)( l4 h8 B; r9 V& T
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|