签到天数: 1897 天 [LV.Master]伴坛终老
|
/ _9 ^* w3 G; f2 [& m当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档( b" I# [& Q8 s. f
. W: V' \2 J3 `& Q) N
这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧6 n7 a0 S f/ M, o e' b
) e$ m2 M9 R# U4 |5 ^* F
(一)准备工具:- F7 i8 l" Z1 y' q$ V) _
1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
- s: y$ Z S: X6 n" ?7 K) f# L5 o
ARMIPS作者是Kingcom
5 r/ \3 Z+ t, _& j( h6 lARMIPS源代码github页面:https://github.com/Kingcom/armips
( Q& l( G* O3 y/ G' `3 ?. `ARMIPS Automated builds页面: http://buildbot.orphis.net/armips- o# s+ X8 W2 p( n) w
8 ]! [2 I# a; b6 K* H" F3 P# y' X2 X2.一个将图片转换为二进制bin文件的工具bimbo 1.3
, `, `( p8 v" j8 e; ]2 _9 L E2 N, e2 @5 P8 }
bimbo 1.3作者是Aleksi Eeben0 H' n3 @- ?- L3 Z: v3 O5 D* A
6 X `# A5 V0 C Ybimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167! y0 {4 \5 _9 h8 ?0 @8 U k! n
4 `2 t+ d0 Y5 T' R; o/ m- L; }2 p
3.一个windows自带的画图或其他图形编辑工具
$ i X- H, r' t) T4 D, G) f2 U" E3 k8 Y+ ^2 t3 e
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)6 T$ \% h) ?* T7 Z! d1 H
7 I- A9 k/ N0 g3 V) I, p(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
* K2 }- O6 ?. n6 Y: k; V
6 q6 b# D# m6 P6 e; @) @9 Q. d* m, N5 ?# l. V
2 o1 y1 |7 e# @" P2 L(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin9 K Q( Z* N4 h8 l" L
9 B& o$ Z$ w6 S& n+ I/ F1 L
5 O: `1 A7 l0 Z9 H* I! k* B N% b0 K+ C6 u2 L
(4)新建一个文本,我起名为16pic.asm,文本内容如下:
+ H$ h+ y- V/ {" y Z- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
& ` G5 I Y9 L$ x6 u7 j% L - .create "16pic_demo.gba",0x08000000
( X' ]. Z; r; X5 h& } - ;设置为GBA架构9 ^6 d3 ?3 u- _* ^
- .gba- u( u; K z# x% d( p2 i
- ;设置为ARM模式
6 ~) ^2 q: p" K8 X& a1 Y - .arm5 V5 `- n, O: v; t Y
- ;设置起始地址是0x08000000
% M: p: R4 I- E$ H% |3 J1 o - .org 0x08000000
2 ~1 K# E# R3 e! z) M% U$ l* m* l Q - ;创建长度为0xC0文件头数据区域" i! P8 X& r9 ]3 d# F/ y+ U# z( H
- .area 0xC0
9 w, i. \' i" o, Q4 P; h5 { - ;填充文件头数据
3 O3 k4 k; X6 U/ G - .fill 0xC0,0x002 m( N: C& U7 W0 A% h7 F( V
- ;区域结束# @& x3 S9 I% v
- .endarea0 C7 W' [8 B# B1 p9 T
- ;主程序! V6 f5 A- G$ g7 V
- main:. g( P/ T" y8 K0 Q
- ;设置屏幕模式3,BG2开启3 x( }2 E7 d- g; y/ ^" ^
- mov r0,0x040000008 @1 f- l, b+ ?/ l0 X2 K6 |% y9 E {
- mov r1,0x0400
) k! F( D# O J - add r1,r1,0x3* k( l0 @- [0 ~' U S
- strh r1,[r0]
& P: ?$ \3 Y* Y3 b - ;设置VRAM起始地址
* a Q$ p7 H0 y: _+ F - mov r0,0x06000000
9 b5 e. \2 ~, {8 [ - ;设置图片地址
/ z- n2 g5 l8 A- Y" h, W2 F1 U - ldr r1,=pic! A/ l3 }- i0 L6 G" D
- ;设置数据长度为0x9600( R1 A) j; `5 q( Z R- o
- mov r2,0x9600 O7 x7 z/ j* P% @7 ^9 c% Z
- ;传送图片数据到VRAM
! u# A! _/ E3 U* a' v - loopl:- z% q, U3 c6 A- _8 d! k4 F2 s$ }$ I
- ldrh r3,[r1],0x24 g: v% t# P8 Q. c! i. y& h3 e
- strh r3,[r0],0x2
" k( w( @3 N. t2 z: f2 m; |& t [: m - subs r2,r2,0x1+ L9 ~. N, Z1 [) C, k0 f& Y# m
- bne loopl
$ G) ?5 U* a) O+ e- B/ T - ;进入死循环, t+ z5 W. p6 \. d0 j4 V
- infin:+ l& f% @6 m9 F3 I+ [
- b infin
$ O: {% b; G$ A/ F' Y: o - .pool
, n+ J; e8 z! R0 \ - ;导入图片二进制数据( P N( e* s' e$ |; F! W2 H* q* o
- pic:2 T, r0 ^3 n; m! _
- .incbin "16pic.bin"3 W2 r" @2 M8 i6 j7 f% U3 v; B! a
- ;在0x08000000地址设置跳转到主程序入口- b) B( K! k! e2 Q. [7 A x
- .org 0x08000000
7 y5 j. [7 i+ j8 Y# g9 t# m# q. Y - b main/ y7 \1 A' y- o$ e x2 x" U
- ;关闭文件( @/ F+ A/ d6 ] t3 B
- .close
& c6 p: K. v1 I+ H
复制代码 + `; C6 N% q+ {5 T+ l3 B1 ?0 j. p; g5 m
保存!
6 b0 m- d, ]9 r& g5 r; `
5 m0 j" F( d+ G9 h; Z @3 f9 i/ |5 W(5)把16pic.asm和16pic.bin复制到armips目录下
' p2 }0 ^, H; I) A; J6 \4 ^/ c
@1 [; g5 U* w1 D3 Z. G(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件7 b$ y( x5 V+ ]( s8 N; h
- z$ r. Z0 p& c(7)用GBA模拟器打开16pic_demo.gba观看效果
7 ]0 U/ o; l; ~7 T- ~, ~" u4 S! l! C J+ a$ {+ P
/ T6 _) u- e% H! r w. d. Q. L% S5 A9 v \# X3 f
关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
( e, X: v* i' z |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|