1 5 pick <=> drop
@ @ 2 ! ( init )
1 4 pick <=> drop
@ @ 3 ! ( init )
1 3 pick <=> drop
@ @ 4 ! ( init )
@ 2 pick <=> drop
0 nip nip nip nip nip return ( ret )
1 @ 5 pick - 0 if ( if )
1 3 <>>=> drop
2 3 <>>=> drop
vram 1 @ 2 @ 5 << + + <=> drop
1 @ 2 @ 1 @ settile
1 @ 1 + 2 @ @ @ settile
else ( else )
2 @ 4 pick - 0 if ( if )
1 3 <>>=> drop
2 3 <>>=> drop
vram 1 @ 2 @ 5 << + + <=> drop
1 @ 2 @ @ @ settile
1 @ 2 @ 1 + @ 32 1 * + @ settile
then ( endif )
then ( endif )
4 pick 4 pick 4 pick setsprite
0 nip nip nip nip nip return ( ret )
; ( ret )
: oam_meta_spr ( x y sprid data -- n )
dup ! ( init )
over 1 ! ( init )
begin @ @ 128 - while ( while )
3 pick 1 @ + 3 pick 1 @ + 1 @ 1 @ 1 oam_spr drop
repeat ( endwhile )
0 nip nip nip nip return ( ret )
; ( ret )
: ppu_waitnmi ( -- )
; ( ret )
: music_play ( data -- )
drop ( forth )
; ( ret )
: music_stop ( -- )
( forth )
; ( ret )
: music_pause ( pause -- )
drop ( forth )
; ( ret )
: sfx_play ( sound channel -- )
- drop ( forth )
; ( ret )
1 button ( var )
0 button ! ( init )
:: pad_poll ( -- n )
button @ ( forth )
; ( ret )
:: pad_trigger ( -- n )
button @ ( forth )
; ( ret )
: unrle_vram ( data addr -- )
0 ! ( init )
0 1 ! ( init )
over 2 ! ( init )
1 3 ! ( init )
2 @ @ 8 >> 0xFF & 4 ! ( init )
begin 1 while ( while )
3 1 <^=> if 2 @ @ 8 >> else 2 1 @ then 0xFF & 7 ! ( init )
7 @ 4 @ <==> if ( if )
0 6 3 1 <^=> if 2 @ @ 8 >> else 2 1 @ then 0xFF & <=> <==> if ( if )
break ( break )
then ( endif )
begin 6 while ( while )
@ 1 @ vram 1 @ 5 << @ + + 5 @ <=> settile
<++i> 32 <==> if ( if )
0 <=> drop
1 drop
then ( endif )
repeat ( endwhile )
else ( else )
@ 1 @ vram 1 @ 5 << @ + + 5 7 @ <=> <=> settile
<++i> 32 <==> if ( if )
0 <=> drop
1 drop
then ( endif )
then ( endif )
repeat ( endwhile )
drop drop ; ( ret )
: render ( -- )
1 0 <=> drop
begin 1 @ 24 <<> while ( for )
0 <=> drop
begin @ 32 <<> while ( for )
@ 1 @ vram 1 @ 5 << @ + + @ settile
drop repeat ( endfor )
1 drop repeat ( endfor )
2 0 <=> drop
begin 2 @ 256 <<> while ( for )
oam 2 @ 2 + + @ if ( if )
oam 2 @ 3 + + @ 0x40 & if ( if )
oam 2 @ + @ oam 2 @ 1 + + @ oam 2 @ 2 + + @ setsprite2
else ( else )
oam 2 @ + @ oam 2 @ 1 + + @ oam 2 @ 2 + + @ setsprite
then ( endif )
then ( endif )
2 4 <+=> drop repeat ( endfor )
; ( ret )
: scroll ( x y -- )
drop drop