| 高速・横画面表示 VIDEO 3モード
 以下のプログラムは「あらしテニスゲーム(原作=すがやみつる氏)」をもとにOLED版V3へ移植しました。権利についても、ご注意ください。プログラムC1 横画面 [VIDEO 3]対応(ドライバ部 404 Bytes)gsb800を実行するとビデオ出力によるテレビ画面が拡大表示(VIDEO 3モード)になります。テレビ表示用に確保されていたメモリの一部を使うことが出来るようになり、そこへ画像データやマシン語コードを保持するようにしました。
 このため、gsb800実行時に配列変数を一時的に使用しますが、初期化後はCLV命令で解放することが可能です。forループ用の[98]以外の配列変数は、アプリケーションプログラム側で自由に使えます。
 なお、プログラムの編集を行いたいときなどに、通常の表示に戻すにはVIDEO 1を実行してください。
 
 
 | ' I2C OLED Example C1 Arashi Tennis for IchigoJam 
 ' Mitsuru Sugaya (Original)
 ' https://www.m-sugaya.jp/basic/tennis_game.htm
 
 ' Shiro Saito (IchigoJam Version)
 ' https://d.hatena.ne.jp/shiro0922/20150824/1440425034
 
 ' Wataru KUNINO (OLED Version)
 
 ' I2C OLED Binary Driver [V3] for IchigoJam :' https://bokunimo.net/ichigojam/oled.html
 ' CC BY (c) 2017 Ruria Amanagi, Wataru KUNINO, and Shiro Saito
 ' Special thanks to Fukuno-san, Ono-san, and all members in IchigoJam-FAN.
 
 new
 10 ?"Arashi":cls:clv:gsb 800
 20 P=5:X=RND(10)+1:Y=0:D=1:E=1
 100 '
 110 IF BTN(LEFT) GSB 380
 120 IF BTN(RIGHT) GSB 420
 130 LC P,7:?" ===== ";
 140 LC 0,7:?"="::LC 15,7:?"=";
 150 GSB 900
 160 '
 170 U=X+D:V=Y+E
 180 IF U=0 OR U=15 THEN D=-D:GOTO 160
 190 IF V=-1 THEN E=1:GOTO 160
 200 S=SCR(U,V)
 210 IF S=#3D GSB 460:GOTO 160
 220 LC X,Y:?" ";
 230 LC U,V:?"@";
 240 X=U:Y=V
 250 IF Y<8 GOTO 100
 260 '
 270 BEEP 30,60:WAIT 60
 300 LC 1,3:?"GAME OVER P=";T
 310 GSB 900:LC 0,8:END
 380 '
 390 P=P-1
 400 IF P<0 THEN P=0
 410 RTN
 420 '
 430 P=P+1
 440 IF P>9 THEN P=9
 450 RTN
 460 '
 470 BEEP 10
 480 T=T+1
 490 LC 0,0:?T;
 500 E=-1
 510 RTN
 
 800 let[0],#4000,#B5F0,#1840,#230B,#21B,#18C9,#4694,#2410
 810 let[8],#7803,#DB,#18D2,#2708,#2507,#5D56,#40FE,#415B,#3D01,#D2FA
 820 let[18],#700B,#3101,#3F01,#D1F5,#3001,#4662,#3C01,#D1ED,#BDF0
 830 let[90],#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
 840 ifi2cw(60,#800,1,#8B4,20)E
 850 video3:copy#A00,#800,62
 900 for[98]=0to7:ifusr(#A02,#900+[98]*16)&0|i2cw(60,#A01,1,#B00,128)E
 910 next:rtn
 
 
 | 
 メモリ・マップ(参考情報・入力不要)
 | ' #800[0] 〜#801   2 bytes OLED 命令用    ⇒ 再利用可
' #802[1] 〜#835  52 bytes マシン語       ⇒ 再利用可
' #836[27]〜#8B3 126 bytes (空き)
' #8B4[90]〜#8C7  20 bytes OLED 初期化用  ⇒ 再利用可
' #8C4[98]〜#8C5   2 bytes for ループ用 変数
' #8C6[99]〜#8CB   6 bytes 予備
' #900〜#9BF     192 bytes VRAM 16x12 (VIDEO 3モード)
' #9C0〜#9FF      64 bytes 未使用
' #A00〜#A01       2 bytes OLED 命令用
' #A02〜#A35      52 bytes マシン語
' #A36〜#A7F      74 bytes 空き
' #A80〜#AFF     128 bytes 空き
' #B00〜#B7F     128 bytes OLED 転送用メモリ
 | 
 
※OLED用ドライバ部分以外の著作権は、原作者(すがやみつる氏)および、斎藤史郎(IchigoJam-FAN)が保有します。
 
 | 
| 高速・横画面表示・PCG対応版 VIDEO 3モード
 スロットゲームです。実行すると、グー、チョキ、パーのアイコンがスクロールし、BTNを押すと止まります。ドライバ部が428バイト、PCGキャラクタ部が352バイト、ゲーム部は242バイト、合計1022バイト(空き2バイト)と限られた容量の中で、作成したのでスロットの結果の判定はありません。プログラムC2 横画面 [VIDEO 3] [PCG]対応(ドライバ部 428 Bytes)
 
 | '  I2C OLED Example C2 SLOTS GAME '  CC BY (c) 2017 Wataru KUNINO
 
 ' I2C OLED Binary Driver [V3][PCG] for IchigoJam :' https://bokunimo.net/ichigojam/oled.html
 ' CC BY (c) 2017 Ruria Amanagi, Wataru KUNINO, and Shiro Saito
 ' Special thanks to Fukuno-san, Ono-san, and all members in IchigoJam-FAN.
 
 new
 10 gsb800:gsb50
 11 forI=1TO3:D=C+RND(3)*4:gsb50
 12 lcI*3+1,8:?CHR$(D);CHR$(D+1);
 13 lcI*3+1,9:?CHR$(D+2);CHR$(D+3);
 14 next:scroll0:gsb900:gsb50:scroll0:gsb900
 15 if!BTN()goto11
 16 end
 50 forJ=0to3:lcJ*3+3,2:?" ";:lcJ*3+3,4:?"|";:next:rtn
 70 A=#F8:B=#F0:C=63
 71 poke#700,0,0,0,0,0,0,13,31,0,0,0,0,0,0,#B0,A
 72 poke#710,31,31,C,C,C,31,15,0,A,A,A,A,A,A,B,0
 73 poke#720,3,51,51,59,27,27,31,31,0,0,0,0,0,0,#B0,A
 74 poke#730,31,C,C,C,C,31,15,0,A,A,A,A,A,A,B,0
 75 poke#740,3,51,51,51,27,27,#9F,#DF,96,96,96,98,#66,#EE,#FC,#FC
 76 poke#750,#FF,#FF,#7F,C,31,15,15,0,A,A,A,A,A,B,B,0
 77 C=#E0:rtn
 
 800 let[0],#4000,#B5F0,#1840,#468E,#4694,#230B,539,#18C9,#2410,#4665,#7803
 810 let[11],#2BE0,#D300,#4675,#DB,#18EA,#2708,#2507,#5D56,#40FE,#415B
 820 let[21],#3D01,#D2FA,#700B,#3101,#3F01,#D1F5,#3001,#3C01,#D1EA,#BDF0
 830 let[90],#D5AE,#8D80,#2014,#A100,#DAC8,#8112,#D9CF,#DBF1,#A440,#AFA6
 840 ifi2cw(60,#800,1,#8B4,20)E
 850 video3:copy#A00,#800,70
 900 for[98]=0to7:ifusr(#A02,#900+[98]*16)&0|i2cw(60,#A01,1,#B00,128)E
 910 next:rtn
 
 
 | 
 メモリ・マップ(参考情報・入力不要)
 | ' #800[0] 〜#801   2 bytes OLED 命令用    ⇒ 再利用可
' #802[1] 〜#83D  60 bytes マシン語       ⇒ 再利用可
' #83E[31]〜#8B3 118 bytes (空き)
' #8B4[90]〜#8C7  20 bytes OLED 初期化用  ⇒ 再利用可
' #8C4[98]〜#8C5   2 bytes for ループ用 変数
' #8C6[99]〜#8CB   6 bytes 予備
' #900〜#9BF     192 bytes VRAM 16x12 (VIDEO 3モード)
' #9C0〜#9FF      64 bytes 未使用
' #A00〜#A01       2 bytes OLED 命令用
' #A02〜#A3D      60 bytes マシン語
' #A3E〜#A7F      66 bytes 空き
' #A80〜#AFF     128 bytes 空き
' #B00〜#B7F     128 bytes OLED 転送用メモリ
 | 
 マシン語部のアセンブラ ASM15 表記(参考情報・入力不要)
 | ' I2C OLED ASM15 Binary Module (c) 2017 Ruria Amanagi
    PUSH {LR,R4,R5,R6,R7}
    R0=R0+R1                ' R0=VRAMアドレス
    R14=R1                  ' R14= RAM
    R12=R2                  ' R12= ROM
    R3=#B
    R3=R3<<8
    R1=R1+R3                ' R1+=#B00 保存先
    R4=16                   ' R4=ループ数/文字数
@LOOP
    R5=R12                  ' 固定フォント用
    R3=[R0]                 ' R3=取得キャラクタ
    R3-#E0                  ' E0未満でキャリーF
'   if !C goto @SKIP
    data w #d300
    R5=R14                  ' PCG用オフセット
@SKIP
    R3=R3<<3                ' R3*=8
    R2=R5+R3                ' R3=該当フォント
    R7=8                    ' R7=LOOP2:ループ数px横
@LOOP2
    R5=7                    ' R5=参照ビット位置px縦
@LOOP1
    R6=[R2+R5]              ' R6=フォント+ビット位置
    R6>>=R7                 ' ドット横の参照位置
'   adc(R3,R3)
    data w #415b
    R5-=1                   ' R5=参照位置px縦を上に
'   if C goto @LOOP1        ' C解除まで繰り返す
    data w #d2fa
    [R1]=R3                 ' 保存先へ書き込み
    R1+=1
    R7-=1
    IF !0 GOTO @LOOP2
    R0+=1
    R4-=1
    IF !0 GOTO @LOOP
    POP {PC,R4,R5,R6,R7}
 |  | ※Ruria Amanagiのご厚意で公開していただいたASM15のソースリスト(コメントを追記して掲載させていただきました)
 | 
 |