签到天数: 1867 天 [LV.Master]伴坛终老
|
& X/ T0 x$ x- j7 l
当你HACK了一个游戏,想给HACK ROM加个介绍或版权声明之类,那么你就需要这篇文档
$ i* w; e" \( ~! C* R! O x; L
n! M; h4 z ^+ h这篇文档会说如何创建一个图片GBA ROM,之后请各位动脑子如何加入ROM吧
, y7 Q9 |+ H6 [$ q5 c8 q" w+ r" ]! r7 t0 a9 L
(一)准备工具:
" g+ W4 g0 n- @# ~4 Z5 h1.一个汇编工具armips或goldroad,goldroad已经好久没更新了,armips是新出的汇编工具,支持arm和mips汇编,本篇资料以armips为例
b$ ?& |, |# h& L# J; h5 B) {# s+ y% S [6 l0 x- E
ARMIPS作者是Kingcom& F$ j* W0 M" a: i1 y! L) n0 S
ARMIPS源代码github页面:https://github.com/Kingcom/armips
3 o* u2 e, s w- ZARMIPS Automated builds页面: http://buildbot.orphis.net/armips
7 ^, r: b, z- z7 U% u( n2 J. ]2 E E+ W
2.一个将图片转换为二进制bin文件的工具bimbo 1.32 _/ v$ [. c0 b
9 e- h+ q3 |1 D4 W$ c7 A: qbimbo 1.3作者是Aleksi Eeben
$ Y. N4 \/ t6 _
$ R" d3 J; G0 d& X8 P" Fbimbo 1.3下载页面:https://www.gbadev.org/tools.php?showinfo=167' W( I# N. G# H" J) w7 f3 m
! X* r) l: }) _* H
3.一个windows自带的画图或其他图形编辑工具
7 j: U! n6 T5 }( m+ L* N" i0 `9 }$ l4 \3 E0 \
4.一个windows自带的记事本或其他文本编辑工具(例如Notepad3)- X3 k+ w4 B0 O4 m! D) }
7 L% V, A5 E, P1 |(2)使用画图制作一个单位为像素的240x160大小的图片,另存为16色或256色的BMP
! [2 I9 {! Y" p# P% s. t$ |* _# g9 d9 ?2 \! H- I$ a7 }, b
7 o9 n! G: w" P# N7 k
4 B1 e& k3 d; U7 v; `(3)使用bimbo 1.3把BMP导出为mode 3的文件,文件名随意,我导出的名字是16pic.bin: D& E$ J1 ]$ G# @9 g
8 E+ t0 Z$ v1 {3 @/ N
3 T3 c0 N% t' W% E; G: Q8 W/ s; K2 Q% l+ a8 t& D
(4)新建一个文本,我起名为16pic.asm,文本内容如下:
9 U5 A, m9 u- ?& C1 v% @- ;创建新文件16pic_demo.gba,文件起始地址是0x08000000
7 W0 J4 |& @0 R- @, L; Q - .create "16pic_demo.gba",0x08000000 E9 M8 ~! Z1 |( s# r# S( u
- ;设置为GBA架构+ S2 X. X: \' _- l
- .gba; ]. q6 l4 N; H$ n0 o" h& q" r
- ;设置为ARM模式3 T2 u G$ j7 p: j5 [+ t5 ^1 h
- .arm! Z8 a! ~% b- z! A
- ;设置起始地址是0x08000000
0 U( A! \/ a9 F( g) d/ ] - .org 0x08000000
/ Q+ y/ ^/ S+ o* P% E+ R1 u( w l% X - ;创建长度为0xC0文件头数据区域
5 m5 F9 C2 x; R4 _ - .area 0xC06 U' V* g3 Q# y$ \
- ;填充文件头数据
& T* ^ p# M5 _/ X- t - .fill 0xC0,0x00& ~8 C5 s* Z" e m
- ;区域结束' I3 H2 e& Q/ I7 \
- .endarea# v" B" _ i4 {7 M0 I$ J( M. C6 U5 W% }- O
- ;主程序
& j, R4 y5 M: I0 A7 d8 b7 _8 ~ - main:
. @" t$ I! s# l* ~6 b: x - ;设置屏幕模式3,BG2开启: w! P+ r1 X% Y
- mov r0,0x04000000: U$ \* w" `7 {( ~" m
- mov r1,0x04006 X5 K$ M( ?! ?# X8 R& Z1 h
- add r1,r1,0x3
, L& m; V8 \, d4 R( U+ H: F/ y - strh r1,[r0]7 l" ?2 C& @- B2 E+ _$ w
- ;设置VRAM起始地址
" G# U, W" Q9 x; c1 W5 ]2 _. P - mov r0,0x06000000; V; ~0 [! z2 m/ P" f: c3 o( B
- ;设置图片地址' T+ h. N: d& t$ a8 W E- F
- ldr r1,=pic U5 n* }7 K6 U$ ]% C
- ;设置数据长度为0x9600
Z+ a, S" M+ C4 D& V9 f - mov r2,0x96004 g7 a# z! g! s) y
- ;传送图片数据到VRAM
! L( g( e% {, N$ s7 v5 P+ u8 _% c& `5 S2 p - loopl:8 s5 r* |1 U+ n7 w# b
- ldrh r3,[r1],0x2
; a+ T& m. Q- {& x) y% a& m - strh r3,[r0],0x2! L9 x1 U1 K" Y# N% x& t
- subs r2,r2,0x1
* z4 L) i6 G1 ?6 g+ \! ` - bne loopl6 N: m) O: I2 r5 j! a M
- ;进入死循环
2 b5 A& c x* q Z& M; v - infin:
9 u. ]# n6 S g4 H( }! P - b infin
: j* G) B8 V6 G* ]9 B9 O - .pool8 P% {8 P! V$ W7 H" p8 R2 m
- ;导入图片二进制数据
, Z3 c4 G) @; t1 A - pic:
6 j7 P' w# O- r9 E - .incbin "16pic.bin"* z- @& D D0 N, x
- ;在0x08000000地址设置跳转到主程序入口+ h: {# [1 O ^5 }
- .org 0x080000003 t( s0 A F8 H
- b main) l/ d# s# Y1 ^& S ^+ w
- ;关闭文件4 b. N# B" N. c* e6 l
- .close
, r: Q$ t8 x. r9 L j2 k( c2 f
复制代码 ! }2 L; J, D% n4 o
保存!
3 L* p" U. H. H7 V: D% {+ ~) i9 |# W
(5)把16pic.asm和16pic.bin复制到armips目录下% G3 b. B2 X; J" G- f. I
1 l: n0 b: }# D) H* Y5 _9 H4 G
(6)打开windows的命令提示符,进入armips所在目录,输入armips 16pic.asm,按下Enter键后可看到armips目录下生成的"16pic_demo.gba"文件( ^( _* U. P' w F
8 H# q0 f) l# g) @) ?- _
(7)用GBA模拟器打开16pic_demo.gba观看效果
: w$ ~+ V5 t. W8 g
; x0 \5 h' U" J
! L1 G) J& E4 n! f: @# `
V9 `. ]0 m& g v1 a- r关于GBA各模式资料请看GBA系统参考.CHM(张晓波翻译)
# Y3 P9 h: C( M: K0 ~ s4 q+ ? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|