签到天数: 1716 天 [LV.Master]伴坛终老
|
& w/ a) l, c% S6 m+ H) \1 q
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档6 X5 M4 S6 d2 B
2 J) e( ]% Z$ z2 D这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧6 Q |2 [& R7 [, v% C
4 _, s0 {4 b5 X2 b, W5 h(一)准备工具:+ S0 R! Z; L! a6 w4 |, K
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
2 I& X3 e# S% x: A
# Z, j' R$ O2 j. ]# u' s4 y5 ~' g9 |ARMIPS作者是Kingcom
3 a% Z, B0 `3 L: t7 X4 W( t N v& TARMIPS源代码github页面:https://github.com/Kingcom/armips
5 r* o) t5 ~2 V& g7 XARMIPS Automated builds页面: http://buildbot.orphis.net/armips
- e& T3 t0 j1 k0 j: x" z7 r- M2 ~3 `% e! d
2.一个将图片转换为二进制bin文件的工具bimbo 1.3$ t; j2 i) k, ?, `# B8 K
, K P4 M8 e5 _ m% A5 Fbimbo 1.3作者是Aleksi Eeben9 U% d2 A# |" v. g1 G0 N" X
6 M* f# S) i/ L$ ibimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
" g6 L7 \/ J- K8 N* R/ j$ F, S3 ]/ O" e, }! F
3.一个windows自带的画图或其他图形编辑工具
, Z- @9 l( G+ y* O+ w& l/ s% O0 G- T6 s6 r
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3); t) e" P2 O5 M, E( E7 r5 F
h) K4 g) g- L/ Y
(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
3 j* p! t, l6 r
6 V2 P% d# |6 i9 v; h, B
9 w2 |9 |1 R. X7 f; Z2 J E9 a& G, t8 a9 z7 d: z
(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin8 P5 L# B1 d' O; ?4 a/ G4 M) }0 s, R
* A$ i+ u( n1 _- Z6 ?- `0 N! B/ \$ ?
! D' z* ^5 J$ f, P5 z/ w, m
(4)新建一个文本,我起名为16pic.asm,文本内容如下: p' _" T! M8 `) S+ T
- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
4 Q) @; J3 |. g: R2 {' _" i - .create "16pic_demo.gba",0x08000000
; C, e. Y: @' c$ Z4 \8 | - ;设置为GBA架构
& m* S* d. h/ ^% v$ q' d" c - .gba: q l7 [4 m& b' i0 @9 c
- ;设置为ARM模式
/ B6 e3 V# t4 c- |( ^ - .arm' k% z/ p4 A2 w% b* Z
- ;设置起始地址是0x08000000+ A( |% v8 T' M* E0 W4 R
- .org 0x080000001 S* E; N2 P/ g& |3 B
- ;创建长度为0xC0文件头数据区域8 m& @# I8 r" Z6 d+ r7 @# O
- .area 0xC0! o( r6 n; D4 j1 Y2 {, R% r
- ;填充文件头数据* i& v G) M4 x; {6 i7 N
- .fill 0xC0,0x004 y& E$ T! j: B
- ;区域结束
) S1 Z) ^/ Q4 l) P - .endarea
: Q) D7 v3 P7 [ - ;主程序- o2 V5 D7 n" d. S! H& O
- main:% b, }* m1 l9 c
- ;设置屏幕模式3,BG2开启
; ?. K' |& O% ^: q, J - mov r0,0x04000000
9 V3 t) ?% Q& J% F, W/ i; u# | - mov r1,0x0400 s9 D5 A+ _/ P8 s q7 M1 @$ U1 @% T) v
- add r1,r1,0x34 l% ]. _. H- F
- strh r1,[r0]; G6 N2 v+ i' C- p5 F' k3 p% G" y& g2 Z/ P
- ;设置VRAM起始地址
7 H) r, `& V, J: h6 t2 o - mov r0,0x06000000 }% C9 m* c4 U/ g4 M% c# G
- ;设置图片地址
, _9 y+ P1 W; x6 U3 r! a1 ] - ldr r1,=pic
8 N7 K3 R- O5 O& Z+ z - ;设置数据长度为0x9600
, G3 R/ I8 y) L( R: O. H( @0 a - mov r2,0x9600
3 |& _/ H$ J% Y! ^. X; L7 J - ;传送图片数据到VRAM
( k7 ~# W( x( O+ l$ d - loopl:; O6 _) Q* w0 h9 ]7 j- \8 x
- ldrh r3,[r1],0x2# V3 w( t2 S- X; v
- strh r3,[r0],0x2
; u/ ], d/ [4 R' W - subs r2,r2,0x14 Q d5 L+ m& _; \
- bne loopl$ L* Z5 e7 i% A! l e; g6 b/ D( o
- ;进入死循环
3 ~) H7 W/ q) [! `, {9 y* K - infin:
. d* q* P( f/ @3 |5 V9 I1 ^8 } - b infin
" I, E) ^* z! f2 h& O' w3 \ - .pool, }1 S2 p, N7 @1 N' {& O
- ;导入图片二进制数据
# P2 k9 H8 z$ |: Q+ _ - pic:
( `4 [9 s, E3 _/ \( e# r# Y) @ - .incbin "16pic.bin"
# Y; i. o# y& {( j" B; F" ] - ;在0x08000000地址设置跳转到主程序入口: `0 u2 i1 K8 e' G) r7 j+ a
- .org 0x08000000
) k, D1 c3 D8 O! h - b main
/ s9 A, {) ~4 A% N+ @6 ^% c. ~ - ;关闭文件
' |. R# _2 u! E3 O& r1 x- _5 M - .close0 w4 f& ~; U, m8 ~
复制代码 . r" Y, K1 I3 D( H, u7 Z4 {
保存!
8 X/ ~7 G5 C8 y: X) C( T% C
1 R: S/ ]6 J* Y: |: D(5)把16pic.asm和16pic.bin复制到armips目录下* V- h2 e( g; O! K
z) Y2 W" l9 n% k$ V(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件; G+ s: M) x J- B0 g* G Q
1 h! s- x) w2 W, Q$ X6 e2 c! F: o(7)用GBA模拟器打开16pic_demo.gba观看效果
0 c/ p8 X% L2 U- p0 h2 n: h- c9 w
$ I% C& E( g" h- v6 N8 B% T4 I/ T. z2 ^
关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
* s$ G& L% x/ |" T( f) u. z) _: t |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|