签到天数: 2002 天 [LV.Master]伴坛终老
|
3 e3 _& a5 A% X, f+ b( C4 t6 o
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档: q) O; |1 {+ @6 V' O
. l$ s# N" F2 k4 F7 s: C8 l这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧0 b( a4 E4 H. X% t R
1 u+ s$ \- r: f {4 Q& @(一)准备工具:4 F% ~- m! F' d; q' @& L) W
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
! s; @ E6 p% r% g" B8 t8 m& g+ F/ c2 S$ r
ARMIPS作者是Kingcom6 j0 M8 L1 V/ y4 |; _
ARMIPS源代码github页面:https://github.com/Kingcom/armips- t- a$ j- q9 h& `
ARMIPS Automated builds页面: http://buildbot.orphis.net/armips, B! L2 R- _9 N7 }9 D- n+ M
* d( L7 o! c# s9 a4 r2 [$ \2.一个将图片转换为二进制bin文件的工具bimbo 1.3
! J4 \" ?8 v r4 m; F$ ~9 m5 h
bimbo 1.3作者是Aleksi Eeben4 Y3 T Q- X. F1 e
5 ]* J' J _6 P7 S* O2 \
bimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
7 R7 A& \6 L ^! R# ]
# U0 v9 G4 m. U3 f! w _3.一个windows自带的画图或其他图形编辑工具+ ~" k2 Q r! G+ ~5 K
9 Q) S* f( x0 Y- N$ _0 `; x4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)7 M" J. T: q# h1 X
5 S& T: P+ M: C& F4 h- P. S% ^
(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
5 X; B/ M% i) r. u9 n( F+ G+ ?& H# ^! N
1 Y- p0 j% T9 w+ l" S5 H5 M
; T* m8 m f- Q( Q0 s9 R(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin
5 v& S! d( b7 ~7 J# f; {- }: c8 B) ?+ X6 ~, h0 d8 f
o1 _/ ^6 s' a! u. @' n+ \, L
% T3 ^! U0 A. l(4)新建一个文本,我起名为16pic.asm,文本内容如下:
; ~# p; Y( ]) f7 {- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000$ K/ z! d4 k% ]# J$ t$ G
- .create "16pic_demo.gba",0x08000000. p5 w- m% x+ O2 J0 h3 O6 r
- ;设置为GBA架构& [ E+ D; g! K3 u( l3 q
- .gba
3 q+ r" _1 f( [4 B+ P1 `: X1 ^ - ;设置为ARM模式
8 d. I7 I; {5 Q( p' q3 @9 S& ` - .arm
5 c$ N, [" [+ }8 R3 w. v - ;设置起始地址是0x080000003 g. b6 a8 a' M) b$ M2 q2 E
- .org 0x08000000' y- o- ]7 G5 d, b, W
- ;创建长度为0xC0文件头数据区域
) h4 J/ C8 c& i0 W1 h+ v; ^9 O2 N - .area 0xC0
4 f6 x1 L9 B5 W# g3 {# x8 A7 m5 G - ;填充文件头数据
; F$ y7 _0 Y4 s9 D z+ h$ V; u - .fill 0xC0,0x00( |( J. h- C- J/ h! M; k+ F
- ;区域结束3 @* R/ b4 }& e# ?& }9 k ^) e
- .endarea3 q: V }- Y# X9 G) O/ \ n
- ;主程序 j2 d9 {/ c* {9 n, t
- main:: P; j" o. K' v' C8 A5 I* @
- ;设置屏幕模式3,BG2开启
) H) D7 ?% W3 d& @$ X' ^9 ?6 z - mov r0,0x040000005 u! q* y$ d0 {8 R- @# @6 e
- mov r1,0x0400: }8 ^3 P( a4 |
- add r1,r1,0x3
0 H/ |' u v) D, B - strh r1,[r0]
0 t3 {4 h0 Z, g! w) I0 k- l. f - ;设置VRAM起始地址
4 S. u9 }! E8 [" S+ y - mov r0,0x06000000
7 H: Q8 z9 V! x# L - ;设置图片地址
; C5 f& n; E- O( T* O - ldr r1,=pic
! T' k5 F8 F/ ~' E4 t( O9 b - ;设置数据长度为0x9600
$ v" M/ h8 C% o4 N$ _$ q - mov r2,0x9600
" U% v; s# i2 n& T5 c6 {1 E! ?$ @ - ;传送图片数据到VRAM
! E0 q# q: I1 ~7 z6 T% b - loopl:
- V/ b1 J% D& M" ~3 [0 o* v: u - ldrh r3,[r1],0x23 b+ {6 l, V! y& r u5 g3 U
- strh r3,[r0],0x2
% B* G/ F" v; o0 _8 R1 |' d, k - subs r2,r2,0x1
. b- R3 y8 ^: g6 B/ h. Z- } h1 @ - bne loopl
1 r0 o! t1 e* ]" V6 J - ;进入死循环
5 Z# m: _2 }4 G# j) R9 C; A: W - infin:0 k. z" q( a0 u; w3 C1 w. r
- b infin
6 M) G3 O% s A/ I3 E4 K - .pool
, {( V8 {% u5 D0 Z6 x+ O - ;导入图片二进制数据
) W7 G; ~: W0 ]; @, j - pic:
4 D' O# ]' R0 d' J - .incbin "16pic.bin"9 R0 v8 ~1 z8 z- _5 z
- ;在0x08000000地址设置跳转到主程序入口- ?8 S" a z" c
- .org 0x08000000, i( A3 D# \$ ]# _) i
- b main$ m) [7 y/ H% Y: R* I4 B( K! D
- ;关闭文件4 }- {/ t5 u) D4 Y! x0 A# S
- .close
. f7 I* a/ D; k7 e, D& l& `
复制代码 ) r. c+ F: A+ Z
保存!- K7 w8 u) U9 x1 q* E8 Z' b
4 E+ u# m6 {& I+ f [) F1 w# T
(5)把16pic.asm和16pic.bin复制到armips目录下
5 C, z' y r+ u$ V s+ \! E4 j! y1 d4 k: @* l' ]# a
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件7 C* b; w# V' h/ ~5 b. M7 p
+ U% w5 S' j7 P' Q! d: }
(7)用GBA模拟器打开16pic_demo.gba观看效果% }* Z) [1 C' u5 ] h7 u
# x6 f. _! L/ R T3 c: D3 @
3 j- U A5 H9 a& w5 G# y7 y) n6 E7 W5 V: t
( C9 M/ ?7 f& O: R. Y' E关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
$ r) Z; s( C/ Z0 N7 o } [" W |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|