签到天数: 2053 天 [LV.Master]伴坛终老
|
/ B! B" Y3 B2 F8 s% h2 r+ [
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档. Z$ h6 `) |* N( f1 |
: r* d6 g5 T! W" U, x1 n g这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧
3 d1 ?1 k+ I% N" f; P+ W2 U2 Z. w3 @; y% ^, s0 w
(一)准备工具:
! k: _7 @ h0 i+ u1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
" V& p0 J3 N$ T, s7 ~
2 a& Z; u+ u! @0 TARMIPS作者是Kingcom
2 P6 }- Y; W+ T# bARMIPS源代码github页面:https://github.com/Kingcom/armips
' ]8 \6 Q: b# ~0 p" m, U0 qARMIPS Automated builds页面: http://buildbot.orphis.net/armips
2 O$ f: e( {0 g1 t+ G2 i: i3 I0 h7 @# Q
2.一个将图片转换为二进制bin文件的工具bimbo 1.3
6 D5 \. L! a2 o! ~8 ^2 e$ I
1 b% y, }8 }1 {2 G% U0 V5 `( Dbimbo 1.3作者是Aleksi Eeben0 q( ^. Y2 f( m
/ `( J( c) g7 |( }$ Z
bimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167( S. T( `" | L j
7 o% y% g7 V. C
3.一个windows自带的画图或其他图形编辑工具
% S1 C$ Z4 ~1 H e% o. {
; U9 N/ @( T \4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)# u! Z9 W; S. z0 K
# E" s/ ]5 v) I+ o5 U- i$ g ^0 M% F(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP2 w; ? {0 t: H/ W6 q1 @
k) g/ q4 ~1 y5 s1 B3 a5 v$ P5 S$ P" G5 o& T
% Y! e0 K# \; o) G3 M(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin J3 y$ P1 Q* v; \" |
8 h' H8 s# y! L; y) c- A
0 w* ]5 Z+ G5 m. a" O1 j; {
3 d/ L* H$ _/ Z- W n1 f- T. T0 s' F(4)新建一个文本,我起名为16pic.asm,文本内容如下:# Y/ {8 \+ P0 ~1 V$ {
- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
8 i" j# Y D( g$ t/ Y) m - .create "16pic_demo.gba",0x08000000
9 l" K, k+ R! a( n9 ~1 M `/ {0 E - ;设置为GBA架构6 b0 M1 k0 h5 b
- .gba. c+ y+ f9 l" y) u+ W8 ]8 H$ D# g9 x: f
- ;设置为ARM模式
1 x& a& L) q5 U' K5 @- v: E - .arm
( g$ m9 Z8 F4 J - ;设置起始地址是0x08000000
9 c2 [; _* a3 e' v1 G - .org 0x08000000% h9 K9 q! ^: Z4 _* S" q
- ;创建长度为0xC0文件头数据区域 M1 ^ m) Q& T! A, B# V+ [
- .area 0xC0/ ]/ h$ l3 Y& l1 C- U1 d: _
- ;填充文件头数据# l: ^: T7 r$ m, ]' v6 P
- .fill 0xC0,0x00
# a: X, v" n# P/ n. ?6 u* [ - ;区域结束! o3 x( v1 J! N7 u' o
- .endarea
* K* v* ^* c. B( U! h8 b; } - ;主程序
9 K( [2 \- J5 Q - main:! G8 {' k8 Q) `3 q. ]
- ;设置屏幕模式3,BG2开启+ N# |' ~2 @. ^+ T; u
- mov r0,0x04000000# B, g7 v$ V# }8 c/ E
- mov r1,0x0400; K6 Y8 U3 J: _
- add r1,r1,0x34 J L: I9 g: E' u
- strh r1,[r0]$ Q3 w3 R; H, q3 C2 E4 ]
- ;设置VRAM起始地址
' S$ ] I- r( B4 p: \ - mov r0,0x06000000
; ?. l" I; X( ~# q4 N - ;设置图片地址 u7 u' S7 v% F- c; \" j& h5 t5 W8 i6 y
- ldr r1,=pic" s: P% m) c1 h! V) N. A2 G7 l
- ;设置数据长度为0x9600 v% E. q' \# q( }
- mov r2,0x9600& m( b" r& J4 n! \) e+ h. B' P
- ;传送图片数据到VRAM
( g9 X. _7 p2 P% F" v. ]0 d2 s; ?, N9 { - loopl:, g, T* H w+ F/ I" |, q4 B& N
- ldrh r3,[r1],0x2' g4 g( {9 M9 k; m
- strh r3,[r0],0x2, f u3 k$ g' H
- subs r2,r2,0x1# Z1 k6 s! T' U4 v! K9 v
- bne loopl
4 i* |1 e! A' r8 L) y - ;进入死循环$ T$ y X1 w3 @3 S7 P
- infin:% B0 ~: g+ R8 y# k
- b infin
) a9 j! x$ V& Q: S' u" C( b - .pool% D5 Q* G* F' L8 s2 W& o
- ;导入图片二进制数据
9 X9 Y, Y- |6 _. g0 i/ Z - pic:
6 Q5 q7 ~0 k& j8 M$ f% O& P9 }- ?* X8 A - .incbin "16pic.bin"
9 I& M; u# K0 S4 k! i, J0 E- T - ;在0x08000000地址设置跳转到主程序入口
$ Q0 v6 u" v0 p4 K6 M% w0 `+ {7 y - .org 0x08000000
' h! t: E( h1 a/ R# ]% U# [- c - b main
( H6 E6 g/ \1 x7 R1 K: B' M - ;关闭文件
4 P3 |+ a$ j; r4 B) j0 E' F - .close
: C! u* ^2 C1 Q6 n
复制代码 & a. l; b# f+ j/ B: o2 S
保存!
7 Y2 a- G5 `. S* X+ o( S9 ]* Z/ _$ I- {' F1 S4 x
(5)把16pic.asm和16pic.bin复制到armips目录下( h# B; ]4 g3 W
6 \+ u) j E1 _0 }3 {8 |(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件5 S0 E9 K" b- d! S1 ]3 R
& Q. ^) M$ R8 O1 U* y(7)用GBA模拟器打开16pic_demo.gba观看效果/ ?% B6 @( _$ Q; m( X" o& W- z
Z F/ V# Z3 U
5 }" f% M) v+ O, Y; _ |
0 o! x, R, v. O: j( i关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
6 Z- s0 E* L9 M' i6 _ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|