签到天数: 1934 天 [LV.Master]伴坛终老
|
0 i) I1 e8 X, a; z0 I9 u# |当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档
8 n v. U: j! j" x
0 ~5 {$ K. l! b2 `) t; z这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧
" \# Z5 X# {6 ]
2 B& c8 K7 Y1 h7 p: F(一)准备工具:
1 Q7 i1 ~; z! W7 D$ x9 m& ^$ P# c1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
% H0 A6 b: [9 C2 n$ s" M4 @1 J5 m- a
# E; g/ \4 D9 yARMIPS作者是Kingcom, V- g2 k5 d! X7 B \/ M% U
ARMIPS源代码github页面:https://github.com/Kingcom/armips; }3 R; U- v2 N3 T) F; U( k
ARMIPS Automated builds页面: http://buildbot.orphis.net/armips
0 e u+ |4 ^" Q5 v
8 C# A5 S# }* f1 d2.一个将图片转换为二进制bin文件的工具bimbo 1.39 g0 y* ]) D/ }# l6 E# [$ A
, h4 A# a3 c6 }; u6 B. Z$ T7 z4 S: sbimbo 1.3作者是Aleksi Eeben
9 w; I- ^: @/ K' k( r; a: n
/ Q9 d% k) r( E( d. _bimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167
- k) q# V% m4 q; R0 [
3 w. a& o$ F0 O: x* @3.一个windows自带的画图或其他图形编辑工具# W4 M! y! m+ d- `* O
0 n3 O$ Y4 e5 l/ C# m! N& D- d
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)1 R6 ]5 x7 w& E+ p9 k. ` P
0 u* @4 |8 S6 {: Z
(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
! ]4 U& g# C$ C/ T( b, b( e9 @, }% {7 F3 v( e
2 z4 r0 v0 d. w' ^8 A3 ^
; c# p1 @0 p* ~0 `" c(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin9 M9 |6 t q1 ^1 E% N4 A, H8 L- U
) f' p& Z2 i* n3 a8 `3 i0 O
% n; }* u( n" ~& S2 G3 t3 K: D# h/ S- M5 ?
(4)新建一个文本,我起名为16pic.asm,文本内容如下:9 z% b9 l! |+ f; L2 f
- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
1 H* t0 ~2 d3 \9 B( z- [0 r' F - .create "16pic_demo.gba",0x08000000* O, r) w0 Q+ ^* h
- ;设置为GBA架构
& [& ~5 ]& M6 Z M. C- q0 c8 P - .gba+ n4 \3 `% T) p8 M! C- M
- ;设置为ARM模式: o6 {, n3 x- P
- .arm/ c9 `$ |$ h3 O" t& I2 z9 b. u
- ;设置起始地址是0x08000000
' g; X1 U% b/ R4 D4 ` - .org 0x08000000, j* |! F( t% h, b: e
- ;创建长度为0xC0文件头数据区域) O/ ~+ ]) S& J
- .area 0xC0
& o( v3 b- u8 x9 X0 x$ ? - ;填充文件头数据
( H7 F9 p: I. I+ S" ` - .fill 0xC0,0x00
7 g) T. m* b) ]% Y, L' Q/ q# | - ;区域结束
# m% \( M6 C# B. n - .endarea: ?: \/ d6 b6 @& e! m' D# t3 D
- ;主程序( A/ \3 @# C! n/ L* x' v
- main:
- N7 x2 ~! R" T5 Y5 y, @ - ;设置屏幕模式3,BG2开启; \4 g1 M" s" w
- mov r0,0x04000000
U0 p" E/ A9 T, ?' F( A - mov r1,0x0400$ S- H- o$ {6 @# b9 D6 a# J
- add r1,r1,0x3
9 l& P+ i9 d4 t+ z0 b# J - strh r1,[r0]1 z6 Y P0 v/ A- F
- ;设置VRAM起始地址
( p m! ~" g+ l: I0 g# y - mov r0,0x06000000; Y/ G8 o' i# o$ L$ J }5 a& {
- ;设置图片地址
$ a3 j0 l- h4 i- t1 q' h- R* ^$ b - ldr r1,=pic+ B$ l4 U- {: i2 o A* K! r
- ;设置数据长度为0x96007 l, I8 @) b3 _$ _
- mov r2,0x96000 B! y$ o9 z. _1 u
- ;传送图片数据到VRAM1 O0 H( Z3 ]/ k
- loopl:8 i* ~6 z' y% m& p6 a
- ldrh r3,[r1],0x2
4 p0 f: _3 @+ G/ y+ K( g. L - strh r3,[r0],0x2+ n' I3 k1 q9 \$ W* n
- subs r2,r2,0x1
7 J* {) q {' V) ]) {5 ]2 U - bne loopl. l9 {1 B8 g8 t0 H g, P
- ;进入死循环
% ~7 m4 D) Z+ U1 R' Y - infin:) j( D/ E$ E! e+ k8 h4 Q! j
- b infin
; D; {9 k G; ^% ?: O- K( E# \ - .pool5 Q" y8 g1 _* }8 v/ o! S* |
- ;导入图片二进制数据 p P+ p3 ]$ n
- pic:0 h: y- z Y2 R* u
- .incbin "16pic.bin"' I9 y3 Q& d: B* [9 k' A
- ;在0x08000000地址设置跳转到主程序入口9 O* O9 {0 ?# B6 ?0 r
- .org 0x08000000
% u# F4 F, m# v- R - b main% F+ T) }8 I* T6 [; b H6 ]
- ;关闭文件- z, O2 i) c7 N g1 F0 O
- .close9 {1 p& `& L) a" i! U9 A
复制代码
( s, S) D, I9 c, K* H保存!
5 W0 F0 U+ z" S1 X/ e/ y) b. X' ^+ n9 B+ D
( ?) @& U. C, N- g. ]# g5 H: o5 b(5)把16pic.asm和16pic.bin复制到armips目录下* Y- ]; h$ K# A: E5 C- R/ o+ A
" u1 p% j+ \; e/ x; j7 v7 T. W
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件) w0 d" C6 z% a# k" |
5 f+ ?! f i8 h0 F; _. ?: P(7)用GBA模拟器打开16pic_demo.gba观看效果
7 p3 ~& s5 c9 h, G4 b; `; \' P( o2 V! V6 o0 x
6 y$ z- S8 A' ] x* b9 L/ M
0 c! u( B/ G6 M, N1 [关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
' z- H$ i6 l) ^% \0 R: T; E" R; s |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|