签到天数: 2122 天 [LV.Master]伴坛终老
|
4 w, ]) n& N9 E3 L% M3 ~
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档% T1 K3 v7 X! Y9 q. K) `4 N
2 `5 O( ~1 o, V) |# ]( z, k% ?; K
这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧6 E2 F: F( a) p& J" V& q s
9 ~4 ^4 o$ X5 R5 q' K) h* U1 e(一)准备工具:7 D+ y0 ]/ X q' L/ \; x( E
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
0 ]9 m. [+ {' `+ Y3 _
7 @& z; O9 j) @8 E+ H$ |ARMIPS作者是Kingcom
9 [+ O3 T) z S) Q. G& o. a WARMIPS源代码github页面:https://github.com/Kingcom/armips
3 y) ?1 z0 b8 K* ~( K. |7 vARMIPS Automated builds页面: http://buildbot.orphis.net/armips0 {+ V) e- K. g# n
9 t8 H) u* I. X" b0 K6 a$ ?2.一个将图片转换为二进制bin文件的工具bimbo 1.36 A" h( P/ G3 f
8 b5 a/ i% h% {8 Sbimbo 1.3作者是Aleksi Eeben
* N3 j. U. Y. z% L& H- j4 p
! `9 a( E/ \) B, wbimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=1677 N9 s( D1 I8 v6 c# w1 S# F1 U+ X
8 X' E w K2 v! a: m% B+ {
3.一个windows自带的画图或其他图形编辑工具
1 Y# O+ M: P6 B) r; U9 a: X9 F! u6 E: x1 O" f) D3 z
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)
$ j1 {6 r, c+ g7 H% ^0 J. t& B( v& n7 L& E w% @! R7 R
(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP9 [) S- O; c3 B( T/ g
5 |- J2 r% [+ ~. [( K5 U1 w0 n( j$ V# a: ]
/ O! z1 Y8 o% g0 l
(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin
4 m) a5 n/ }- [+ {& e% @# Z8 w: n/ d2 \" A2 p- A
' c4 v0 h8 L$ @ a- A" J
( \2 j4 f2 f7 E- ^* |9 S(4)新建一个文本,我起名为16pic.asm,文本内容如下:1 ]% ]! f$ P; s% a( `/ S0 X: m5 s( m, D
- ;创建新文件16pic_demo.gba,文件起始地址是0x080000006 H) d7 t7 m+ l* r$ Z. B
- .create "16pic_demo.gba",0x08000000
9 r. E3 k% d. p) g - ;设置为GBA架构3 Q7 v. X( P6 x5 L
- .gba9 a( @7 P5 G, v/ _# p3 B3 s
- ;设置为ARM模式 c) ]) {( a5 \, Q5 v4 X
- .arm
3 J4 \3 c; w+ e. T& c0 } - ;设置起始地址是0x08000000& {1 E& @) r+ B0 q0 ^% s: z6 i
- .org 0x080000001 O/ s# K9 P1 |" Z6 h& B
- ;创建长度为0xC0文件头数据区域
! [' B2 T" M, N6 U- c6 S - .area 0xC0- C8 E" k4 h' \; X! J2 R$ z9 T
- ;填充文件头数据
+ I e) l6 }/ z+ R - .fill 0xC0,0x00
- c1 k2 E5 ?9 J4 E, D - ;区域结束
0 q5 p4 i( A% f% w1 W - .endarea
0 G, q& G: E( c8 b - ;主程序: g2 Z4 o0 W i/ Z- L# ?- |3 p+ w
- main:
, j( @, W, D( f8 ]1 T7 L - ;设置屏幕模式3,BG2开启1 V# z* m$ Z" H) V) S- f
- mov r0,0x04000000+ h1 t! o) b2 A) N; O
- mov r1,0x0400
5 z! l( B7 `9 R0 t/ n6 E - add r1,r1,0x3" _8 I$ l. F( m+ i ~
- strh r1,[r0]
2 c" m/ @+ j( x, j W" A - ;设置VRAM起始地址
7 k" i3 `; M: f( N( H1 P% b - mov r0,0x060000001 f$ V' q J6 j. Y% p# W
- ;设置图片地址
9 d# R+ `; N8 J# F S* l0 G - ldr r1,=pic
0 d1 I1 Y0 w8 p/ r7 q - ;设置数据长度为0x9600 ^ C. W" X& V, N, V
- mov r2,0x9600
- U/ [- E8 f5 @, d; S) j, f3 p - ;传送图片数据到VRAM2 u. L9 F: F9 }" ~+ d( \) E: ~$ o$ L5 T
- loopl:
( G6 e" G. M2 D7 m - ldrh r3,[r1],0x2; U0 B7 D- W* M+ V$ n" A7 n( @# t
- strh r3,[r0],0x2
: q; w$ z) X" K: P. S$ m- D% n - subs r2,r2,0x1
: \/ ~4 J+ u9 n# l: J7 X+ t3 a - bne loopl3 j) `: S( x/ E u. D' E
- ;进入死循环
- [# f: f3 X R) J/ \ - infin:& M* ]9 u: L) R: ]
- b infin
# H% \# Y) w+ k; w - .pool& B8 x' R- @+ H) K+ z. u, F; n
- ;导入图片二进制数据5 q* a4 H8 t" C* M9 S
- pic:
" B) N* @5 E' t - .incbin "16pic.bin"* f1 e' {! I- u( k5 k5 u
- ;在0x08000000地址设置跳转到主程序入口
a9 D/ _6 y" M9 k0 |5 m8 V2 c - .org 0x08000000
& Z* X& s1 J. u - b main
% U) f; b/ R8 n" V1 z, o# M# ] - ;关闭文件
4 p/ S9 ?) ]- L6 K. F1 o - .close6 a0 k: k* V, P* m- U
复制代码
$ [) I# t! L& U8 n1 w保存!2 }6 h; q0 K; {+ Q( z1 A
4 `/ Z4 L) i3 i* |; Q
(5)把16pic.asm和16pic.bin复制到armips目录下
# ]# A* o3 t* h! j6 n5 e# K" s t8 Y E1 h" j, l
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件; i* r% ~* }" `
( Y9 q5 G9 o+ }6 Q' m; `; y(7)用GBA模拟器打开16pic_demo.gba观看效果
* V: e7 l% _# Q- |# w3 f. j0 L4 P/ F( t: [) i+ I, O e
) M* k5 A6 @1 x2 `* C$ T4 e- [
2 d3 ^" `- j A* H8 L Q) e1 L关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
2 X5 A- X2 f5 Y" t; F0 u/ \( d. X! K |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|