签到天数: 1914 天 [LV.Master]伴坛终老
|
) Q5 t. H6 ?8 e- M0 r( B& v
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档
2 @& {4 M8 W3 F& S$ n
; d& K. u) F5 v( P! D1 u这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧5 J* W+ a& k7 w: B4 S' Q
' {4 G9 W0 v- Q' U+ }" A* A(一)准备工具:
1 i: h: R& h- y1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
% o8 O4 ^2 I: K. ~; G E' M+ \( a4 M+ L8 [$ r) o* c
ARMIPS作者是Kingcom9 _3 e6 H( {2 {4 x& D
ARMIPS源代码github页面:https://github.com/Kingcom/armips; } ^! }2 ^. c6 B q
ARMIPS Automated builds页面: http://buildbot.orphis.net/armips+ y6 j0 {8 g! {0 }$ f- j
- s6 F* L1 [; t0 z3 @9 U! u- h2.一个将图片转换为二进制bin文件的工具bimbo 1.3
) s# A; G& {+ I0 X
: {: R9 y2 T' O, F& abimbo 1.3作者是Aleksi Eeben" }' o- }2 @& k, D/ }( s# l
3 N( R. U$ H! v) s, s6 q/ l. mbimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=1670 z; O0 U6 F* \( W1 }
4 s9 _& N+ i1 R! v& R; ?
3.一个windows自带的画图或其他图形编辑工具
- N/ j. O* h3 l& u. J5 k
( c) Z' j }! o' M2 T9 K5 b: N% {4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)
" u& `1 e* C1 V) A/ O3 {3 R
0 h5 R! h- D: h3 A8 E% Q(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP# W( q9 \& U- X2 ]* o0 r. H
% }. @. G( ^, r& [$ C
1 P! S$ h2 f4 a p& I/ P/ c/ E3 t# t+ P( M% H
(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin0 R- g. F/ U6 A
) d& _, T5 W" _3 U6 j) N2 q
4 [2 w. `) ?2 y' E" w% \, b1 a/ d, U8 Z: D8 Q+ a! v
(4)新建一个文本,我起名为16pic.asm,文本内容如下:
; f) f: M, W7 y, P9 }5 t& l- ;创建新文件16pic_demo.gba,文件起始地址是0x080000000 x; x: q" x4 T( s9 x6 e8 M) R, |2 z
- .create "16pic_demo.gba",0x08000000
- N# E- l' n0 Z: a: U; T - ;设置为GBA架构
' K( L$ x! y: G$ `6 }. z/ | - .gba$ ~5 O* i8 _1 |: T7 p
- ;设置为ARM模式' V+ p6 J. S0 K3 c/ d ?) o; V7 g; W+ N: N
- .arm; ~8 F. v9 i/ e* i8 H. @; M0 X
- ;设置起始地址是0x08000000" \/ }2 f3 ~. O
- .org 0x08000000
9 m8 G# f! h' b" } - ;创建长度为0xC0文件头数据区域- P) s' A( z& M! M# F" i
- .area 0xC0
+ e* i! b+ k* S6 F6 v/ p - ;填充文件头数据
. d7 K' _/ K2 ~" X( s - .fill 0xC0,0x006 j8 L* T) X. U8 ~; g8 B% {- [
- ;区域结束2 m& J; [) e5 }
- .endarea. u2 d) g- c0 N2 f5 s: M
- ;主程序
) ~; F! k, f2 \7 g/ I, Q8 W - main:! F8 w, T) V7 |# O& f
- ;设置屏幕模式3,BG2开启
7 G. n! @. y E2 W9 u0 q - mov r0,0x04000000
/ W$ B- K1 m* V9 o* t - mov r1,0x0400
; v4 F( Q: L3 {2 ]/ I8 b - add r1,r1,0x3# o/ L6 _ n2 U! Y" i6 J/ Q" o7 ]
- strh r1,[r0]
8 ~0 a; o: t0 c" l4 s. y - ;设置VRAM起始地址
+ Z0 B4 h( ?$ ?* y" x) K - mov r0,0x06000000
( K9 R9 r# `* s - ;设置图片地址
M% n2 e ^2 ? - ldr r1,=pic
* x# P+ B- J: V$ d - ;设置数据长度为0x9600 c5 f! i6 i3 C: g
- mov r2,0x9600
2 D5 s3 \* I8 _ t, v" ~& G - ;传送图片数据到VRAM$ |$ E' o0 ] t, a
- loopl:# Q! s8 [+ p& s& _
- ldrh r3,[r1],0x2% Z! U* l1 T1 R8 R& j
- strh r3,[r0],0x2! c5 \# }4 o0 c
- subs r2,r2,0x10 K) \" M! s6 @$ E: e
- bne loopl9 i" P( Z7 N4 z. C q6 C
- ;进入死循环
0 P9 b0 f: `+ ^) L( {7 P; q. g - infin:
) M5 A8 b& T% {9 d$ a - b infin) |7 [4 g# W/ R4 g2 ~: Q0 ]
- .pool
: n. b7 g. n8 `; @& C3 m- m - ;导入图片二进制数据
: R$ v% q* T* N T" ` - pic:
7 l* q! [% P/ A& s) g) L - .incbin "16pic.bin". B6 O/ V) o' D' n: N7 L
- ;在0x08000000地址设置跳转到主程序入口
1 k/ u8 V/ i8 N/ r - .org 0x080000007 n3 E6 V# |4 O) q2 h: q4 c9 B
- b main
9 U# k# [' F; \0 c - ;关闭文件
% g, e5 p. I2 a/ ^" [$ M; O% d - .close
5 t: X- U2 {. @( {* j7 x; j
复制代码 , b8 [& z6 {& T$ m3 [1 c/ V' W
保存!4 n- V s @5 @. D; ~
2 q7 i$ t1 I* j! c+ e(5)把16pic.asm和16pic.bin复制到armips目录下; n( g' Y& {) e) Z
3 b: c& c5 d& R) O, Y7 q8 e. E
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件7 C, Q4 J" L" @
4 n7 _' O; h' ^2 {4 i8 h+ A b
(7)用GBA模拟器打开16pic_demo.gba观看效果( m+ D. c/ L& X6 @
3 p' J& N& d9 m. O: a. K* G
( R( a \( b- g; `. @/ V# r
1 E1 ^- I* J+ v关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)7 O+ n6 d2 m& L% Z9 [' b
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|