GBA Brainfuck / Brainfuck interpreter for GAMEBOY ADVANCE
背景 ¶
ある日通学中、 偶然手元にあったGAMEBOY ADVANCE上でBrainfuckを書きたくなった為、 エディタ及びインタプリタを実装した。
ビルド環境として、gccが使えるdevkitProを用いた。
(ref: devkitPro - SOURCEFORGE )
デモ ¶
動作確認済み環境 ¶
- GAMEBOY ADVANCE AGB-001 AGB-JPN (EZ Flash IV)
- GAMEBOY ADVANCE AGB-001 AGB-JPN-1 (EZ Flash IV)
- GAMEBOY ADVANCE AGB-001 C/AGB-JPN (EZ Flash IV)
- GAMEBOY ADVANCE AGB-001 C/AGB-JPN-1 (EZ Flash IV)
- GAMEBOY ADVANCE SP AGS-001 C/AGS-JPN (EZ Flash IV)
- VisualBoyAdvance 1.7.2
- latest version as of 2019-11-28
- ref: VisualBoyAdvance - OSDN
- VisualBoyAdvance-M 2.1.4
- latest version as of 2019-11-28
- ref: visualboyadvance-m/visualboyadvance-m
操作方法 ¶
エディタモード (起動時) ¶
キー | 説明 |
---|---|
↑ or A |
プログラムメモリのオペレータ変更 (+) |
↓ |
プログラムメモリのオペレータ変更 (-) |
→ or B |
カーソル位置変更 (+) |
← |
カーソル位置変更 (-) |
START |
実行モードへ移行し実行 |
SELECT , SELECT |
プログラムメモリとカーソル位置を初期化 |
実行モード ¶
実行中 ¶
キー | 説明 |
---|---|
SELECT |
キー割り込み |
入力プロンプト ¶
キー | 説明 |
---|---|
↑ or A |
インクリメント (+0x01 ) |
↓ or B |
デクリメント (-0x01 ) |
← |
インクリメント (+0x10 ) |
→ |
デクリメント (-0x10 ) |
実行終了時 ¶
キー | 説明 |
---|---|
SELECT |
エディタモードへ戻る |
オペレーター一覧 ¶
Op | 説明 |
---|---|
|
空白。何もしない。 |
+ |
現在カーソル位置データメモリのインクリメント |
- |
現在カーソル位置データメモリのデクリメント |
> |
カーソル位置のインクリメント |
< |
カーソル位置のデクリメント |
. |
現在データメモリのASCII文字出力 |
, |
現在データメモリへ1バイト入力 入力プロンプト表示を伴う |
[ |
現在カーソル位置データメモリがゼロならば対応 ] へジャンプ |
] |
現在カーソル位置データメモリが非ゼロならば対応 ] へジャンプ |
例外 ¶
データメモリアクセス違反 ¶
データメモリ範囲外への書き込み若しくは読み込みを行っています。
最小再現コード:
例1 <+
例2 +[>+]
出力:
ERROR: PTR < 0
ERROR: PTR >= RAM SIZE
NULL字出力 ¶
NULL文字を出力しようとしています。
最小再現コード:
.
出力:
ERROR: '\0' OUTPUT.
構文エラー ¶
構文エラーです。
最小再現コード:
例1 +]
例2 [
出力:
ERROR: FAILED TO FIND '['
ERROR: FAILED TO FIND ']'
ビルド方法 ¶
依存 ¶
- git
- Docker
ビルド ¶
git clone https://github.com/yanorei32/gba-brainfuck/
cd gba-brainfuck
./make # It will output brainfuck.gba
makeにオプションを投げる時は… ¶
./make clean