签到天数: 1993 天 [LV.Master]伴坛终老
|
2 x: N3 N- P3 Q
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档; S0 }% c; t" Y0 f/ L! l7 `; _
+ E. |; l7 ]" b
这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧
- e* {/ A4 k. B% u1 b
& }% q- R, W: j6 {(一)准备工具:% e+ i! k0 _$ X# S9 A- L5 y9 B$ v
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
5 `% r+ v0 ~6 R
! [! m0 u. X; j4 e, k: Q! ~0 D! T4 f1 ~ARMIPS作者是Kingcom
, L! \: u/ }) ?ARMIPS源代码github页面:https://github.com/Kingcom/armips0 m( [, ?, `2 O& z- w- c T
ARMIPS Automated builds页面: http://buildbot.orphis.net/armips! V, u2 B# S2 p8 _! `" J
9 I0 [" }2 O" w. T/ @- D
2.一个将图片转换为二进制bin文件的工具bimbo 1.34 _& D9 W @9 R& ?
- t/ I0 d' R0 r7 V" ^
bimbo 1.3作者是Aleksi Eeben$ H3 @' s% S8 |( j) J
7 ?7 O& M5 c! O7 n' u9 L) Fbimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
1 V2 M( C! w2 g8 D& B
% J" Q9 f: R" o! D3.一个windows自带的画图或其他图形编辑工具( L9 ~7 A' E9 ~# O6 c
+ A# E! D4 d: x' \) w: Z
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)9 u, L! G" ~# @
) Y5 C# y R7 V3 H2 N, N(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
8 ^1 C4 B' x4 f; B, D& }: T, d- O$ v2 _& j; Q8 T9 T
/ ^+ q$ ?. G$ E2 m6 W1 P
4 u. R: d6 x" }: c2 i4 Y# T" f: N(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin
2 u- z5 f. J% S+ M: _2 k4 |) A7 ~4 F" h
7 @* V4 U. E3 _) v; a7 S
! N1 _. i- [+ J(4)新建一个文本,我起名为16pic.asm,文本内容如下:
V7 D. P @* V. d2 @( P0 W" s- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000! m# z7 z4 z5 A* n
- .create "16pic_demo.gba",0x080000007 Q9 M$ b5 X1 N4 A" Z5 ~
- ;设置为GBA架构: G- Q) m0 b: E3 z. k, v! j( u& O, b
- .gba
& e9 A( [! G/ v% C- _ - ;设置为ARM模式
; \% ^; B. J0 I - .arm
" g! G# V' T. I. U- A d- T - ;设置起始地址是0x08000000! F) [% R6 [) ]0 f" e2 I+ D3 \
- .org 0x08000000
8 H- w. e, E0 ^6 h$ o - ;创建长度为0xC0文件头数据区域% N# L9 b6 ]* E' {7 V
- .area 0xC0( j: V+ `. g5 G* ]: |. k$ ~) ^* P2 ^
- ;填充文件头数据
. a0 _) z) p/ Z) @7 v - .fill 0xC0,0x00
% X* }1 c( U: H0 t7 N+ |2 J - ;区域结束! b( C% N; F+ V5 k
- .endarea; S3 o' y$ z0 G T0 f: g3 ?& _& ?
- ;主程序3 O: F9 P* I. K: I4 q. ^$ G9 ~5 p
- main:
2 V& W* D( ^7 Q. z - ;设置屏幕模式3,BG2开启 v' H/ I) r: o/ n: A
- mov r0,0x04000000% y# j: y i2 h' S' b, }0 }! {
- mov r1,0x0400 x, `2 R! |3 O( ^
- add r1,r1,0x3
P3 v# p, m/ Q. n% `3 e - strh r1,[r0]
' U. W: j A/ |. y - ;设置VRAM起始地址
4 k; q' E- j0 G+ \- W - mov r0,0x06000000
! l1 B# Z3 M; {7 U( ` - ;设置图片地址
. z: m2 V! h" k) e - ldr r1,=pic
- p& _) P O# S2 a$ J" o - ;设置数据长度为0x96007 l5 @ u7 f( ^
- mov r2,0x9600
& y- `3 [/ [! U; u* G6 U/ |5 s - ;传送图片数据到VRAM
, G1 T) ^# n% O( z( \: ~/ a( K+ H - loopl:/ j9 }' K+ a6 X0 y/ H! Z! W
- ldrh r3,[r1],0x25 j( ~* \5 W7 S% O. a4 {! P
- strh r3,[r0],0x2
& D4 {% m/ _. }$ ^! w9 N - subs r2,r2,0x1
# W$ x/ y- i* r& a ]: M - bne loopl
# p' G$ ?: j0 L7 ^ - ;进入死循环( e( r0 |; x, i9 g! j: L. N
- infin:6 q! A) D% P8 ~7 y4 e: Q7 e
- b infin
3 P" Z' W3 I5 T6 l - .pool H/ x$ @" t6 m8 Q" n6 _
- ;导入图片二进制数据
" S* d, U/ Y4 s5 E% G+ c6 f - pic:
% @$ B! d9 N% J - .incbin "16pic.bin"
$ F9 e' y5 P( s - ;在0x08000000地址设置跳转到主程序入口
' L+ M8 Q6 l5 @( y# D - .org 0x08000000
5 ^8 n( n) }0 F8 J3 u( i$ Q5 B+ L - b main
" M, W& _8 ^) E# s! x+ G - ;关闭文件
; }0 `- k9 ?4 ]" `! ^; q - .close5 _2 j5 T- B) [. q0 M* V6 M6 [( s
复制代码 ) Z$ F, @: o( V" l8 F( q, o8 L/ K
保存!7 W9 Z' V: Q( k0 N/ |% p7 x6 l
1 {' P3 n4 z& i) b" i1 [- @5 d
(5)把16pic.asm和16pic.bin复制到armips目录下$ Z; t0 s) s% i2 d2 a
}3 w; }& U+ e- G: K& D. ~
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件) |- I: p0 H3 a: o4 ]
2 |% v, ?2 ?, r- O: q; Q
(7)用GBA模拟器打开16pic_demo.gba观看效果
& R- K5 W2 y' A* F" w7 s- ~% n6 t5 @$ l
; H! z; V- Q5 L% L$ x
0 W1 b1 a" }. O: R* W关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
! e& m0 P5 E; @2 s: s- w5 V/ y/ e& E |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|