GBAへ画像を表示
https://gyazo.com/8f41a84c728e3cb435af1cd5ac292ee4
PPM形式の画像ファイルをGBA用バイナリ形式に変換
min-camlのリポジトリ内に含まれるスペースシャトルのppmファイル(P6バイナリ形式)を、Macのプレビューアプリで240 x 160にリサイズして保存し(保存時にP3テキスト形式に変換される)、スクリプト ppm2rgb.rb でGBA用バイナリ形式の画像に変換。リンク時に画像のバイナリデータをプログラムの直後にリンクしてあげる。
code:ppm2rgb.rb
# ppmファイルをGBA用のバイナリ形式画像に変換
# usage: ruby ppm2gba.rb shuttle_240x160.ppm > shuttle.gba
data = File.read(ARGV.shift).split
image_data = (data4..-1).map(&:to_i) image_data.each_slice(3) do |r256, g256, b256|
# 8bitカラーを5bitカラーに変換
r32 = r256 >> 3
g32 = g256 >> 3
b32 = b256 >> 3
# RGBの5bitカラーを以下の形式で2バイトに詰め込む
byte0 = b32 << 2 | g32 >> 3
byte1 = g32 << 5 | r32
end
code:viewer.s
.arm
.text
ldr r2, =VIDEO_MODE3
ldr r4, =image_start
ldr r5, =LOOP_COUNT
display:
bne display
loop:
b loop
code:viewer.ls
OUTPUT_ARCH(arm)
SECTIONS {
.text 0x02000000 : { *(.text) }
.image : {
image_start = . ;
*.gba(*)
}
}
code:Makefile
all: viewer.bin
viewer.bin: viewer.out
arm-none-eabi-objcopy -O binary viewer.out viewer.bin
viewer.out: viewer.o
arm-none-eabi-ld --oformat elf32-littlearm -o viewer.out -T viewer.ls viewer.o -b binary shuttle.gba
viewer.o: viewer.s
arm-none-eabi-cpp viewer.s | arm-none-eabi-as -o viewer.o -
clean:
rm -rf viewer.o viewer.out viewer.bin
transfer: viewer.bin
sudo ../optusb/optusb viewer.bin
参考
PNM(PPM/PGM/PBM)ファイルフォーマット