Re: Turbo Rascal - Vic Bitmap Mode
Posted: Wed Jan 08, 2020 3:20 pm
Working on the tutorial / example files now. It's a bit more interesting that all that test data I've been using during development.
The Commodore Vic 20 Forum
http://sleepingelephant.com/ipw-web/bulletin/bb/
http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=9510
Code: Select all
program sprite;
var
i,a,b,x,y :byte;
name: string;
zpg1:pointer;
zpg2:pointer;
spr8 : array[] of byte = (
%11111111,
%10000001,
%00111100,
%00100100,
%00100100,
%00111100,
%10000001,
%11111111
);
spr8L0 : array[8] of integer;
spr8R0 : array[8] of integer;
procedure load();
begin
asm("
lda b
ldx #<name
ldy #>name
jsr $ffbd
lda #0
ldy #8
ldx #8
jsr $ffba
lda #0
jsr $ffd5
");
end;
procedure text();
begin
poke(^36864,0,12);
poke(^36866,0,22);
poke(^36867,0,174);
poke(^36869,0,192);
ClearScreen(white, screen_col_loc);
poke(^214,0,0);
poke(^211,0,0);
call(^58640);
end;
procedure schiebe();
begin
zpg1:=4352;
zpg2:=$a400;
for b:=0 to 14 do
begin
for a:=0 to 255 do
begin
zpg1[a]:=zpg2[a];
end;
zpg1:=zpg1 + 255;
zpg2:=zpg2 + 255;
end;
zpg1:=4352+255*14;
zpg2:=$a400+255*14;
for a:=0 to 25 do
begin
zpg1[a]:=zpg2[a];
end;
end;
procedure laden();
begin
text();
name:="VICBILD.BIN";
b:=11;
load();
end;
begin
vbmSetDisplayMode( 0 );
vbmClear(0);
vbmClearColor(blue);
vbmSpriteShiftR( spr8, ^$a000, 1, 8, spr8L0 );
vbmSpriteShiftL( spr8, ^$a040, 1, 8, spr8R0 );
x:=80;
y:=90;
while (true) offpage do
begin
i := getkey();
case i of
KEY_d:
begin
x:=x+1;
if (x>150) then x:=150;
end;
KEY_a:
begin
x:=x-1;
if (x<2) then x:=2;
end;
KEY_s:
begin
y:=y+1;
if (y>184) then y:=184;
end;
KEY_w:
begin
y:=y-1;
if (y=255) then y:=0;
end;
KEY_r:
begin
text();
laden();
vbmSetDisplayMode( 0 );
vbmClear(0);
vbmClearColor(blue);
schiebe();
end;
end;
vbmSetPosition1( x, y );
vbmDrawSprite8e( spr8L0, spr8R0 );
waitforraster( 0 );
vbmSetPosition1( x, y );
vbmDrawSprite8e( spr8L0, spr8R0 );
end;
end.
Code: Select all
program sprite;
var
i,a,b,x,y :byte;
name: string;
zpg1:pointer;
zpg2:pointer;
spr8 : array[] of byte = (
%11111111,
%10000001,
%00111100,
%00100100,
%00100100,
%00111100,
%10000001,
%11111111
);
spr8L0 : array[8] of integer;
spr8R0 : array[8] of integer;
begin
vbmSetDisplayMode( 0 );
vbmClear(0);
vbmClearColor(blue);
vbmSpriteShiftR( spr8, ^$a000, 1, 8, spr8L0 );
vbmSpriteShiftL( spr8, ^$a040, 1, 8, spr8R0 );
for b:=0 to 20 do
begin
vbmDrawblot( b,20 );
end;
for b:=50 to 80 do
begin
vbmDrawblot( b,60 );
end;
for b:=120 to 150 do
begin
vbmDrawblot( b,80 );
end;
for b:=0 to 80 do
begin
vbmDrawblot( b,100 );
end;
for b:=100 to 159 do
begin
vbmDrawblot( b,100 );
end;
for b:=0 to 159 do
begin
vbmDrawblot( b,180 );
end;
x:=50;
y:=20;
while (true) offpage do
begin
i := getkey();
case i of
KEY_d:
begin
x:=x+1;
if (x>152) then x:=152;
end;
KEY_a:
begin
x:=x-1;
if (x=255) then x:=0;
end;
KEY_s:
begin
y:=y+1;
if (y>184) then y:=184;
end;
KEY_w:
begin
y:=y-1;
if (y=255) then y:=0;
end;
KEY_r:
begin
end;
end;
vbmSetPosition1( x, y );
vbmDrawSprite8e( spr8L0, spr8R0 );
waitforraster( 0 );
vbmSetPosition1( x, y );
vbmDrawSprite8e( spr8L0, spr8R0 );
if (vbmTestPixel2( x, y+8 ) = 0) then
begin
y := y + 1;
if (y>184) then y:=184;
end;
if (vbmTestPixel2( x, y-2 ) = 0) then
begin
y := y - 1;
if (y=255) then y:=0;
end;
end;
end.