渡された画像(解像度160x144)を、
その画像を表示するゲームボーイのROMへ変換するシェルスクリプトです。
このように表示するゲームボーイのROMファイルへ変換します。
このリポジトリをクローンするか、ダウンロードし、
以下のようにコマンドを実行することで、ROMファイルを生成できます。
$ ./img2gb.sh 画像ファイル名 生成するROMファイル名
例)
$ ./img2gb.sh sample/daisy.png daisy.gb
※ 画像の解像度はあらかじめ160x144(ゲームボーイの画面解像度)にしておいてください。
※ 全てシェルスクリプトで作っているので時間がかかります。
だいたい1分ほどお待ちください。(Intel Core i7 CPU @ 1.80GHzの環境にて)
Debian GNU/Linux 9 (stretch) の環境で動作確認しています。
ただ、全てシェルスクリプトで作っており、
echo
やdd
を駆使してゲームボーイのROMヘッダやLR35902(ゲームボーイのCPU)の
機械語バイナリを生成しているので、
bash
が動くような環境ではどこでも動くかと思います。
ただ、画像の変換処理にImageMagick
のconvert
コマンドを使用していますので、
無い場合はインストールしておいてください。
UbuntuやDebianなど、APTが使える環境の場合は以下のコマンドでインストールできます。
$ sudo apt install imagemagick
シェルスクリプトで作ってみた程度のものなので、一応動作するものは生成しますが、
同様のもっとちゃんとしたものはブラウザ上で使えるものがあったりします。
- GB イメージビューワーコンバーター
ただ、ある意味シェルスクリプトでアセンブラも作っているようなものなので、
ゲームボーイのROMの解析や、CPU命令の勉強の参考にはなるかもしれません。
ImageMagick
を使用した画像変換はtool/img22bpptiles.shで行っていますので、
この中のconvert
コマンドの引数などを調整するともう少し良くなるかもしれません。
エミュレータによっては「ヘッダのチェックサムがおかしい」と
警告などが出るかもしれませんが、無視して実行してください。
ROMのヘッダ情報の中の「Global Checksum(アドレス:014E-014F)」という領域が未設定であるためで、
この領域は実機で参照していないらしく、実際に未設定でも実機で動作しているため、
簡単のために設定していません。