control with the keys A / D.
vic20 8 + kb.
greeting
sprite 16byte:
Code: Select all
program srite;
var
charset : array[8] of byte = ( 24,24,60,126,255,24,36,66,255,129,129,129,129,129,129,255);
a, b : byte;
zpcharz: pointer;
zpchars: pointer;
zpscr: pointer;
zpcol: pointer;
procedure shiftre();
begin
asm("
ldx #0
Rightshift
lda $1400,x
lsr
ror $1400+16 ,x
ror $1400+32 ,x
ror $1400+48 ,x
ror $1400+64 ,x
ror $1400+80 ,x
ror $1400+96 ,x
ror $1400+112 ,x
ror $1400+128 ,x
ror $1400+144 ,x
ror $1400+160 ,x
ror $1400+176 ,x
ror $1400+192 ,x
ror $1400+208 ,x
ror $1400+224 ,x
ror $1400+240 ,x
ror $1400+256 ,x
ror $1400+272 ,x
ror $1400+288 ,x
ror $1400+304 ,x
ror $1400+320 ,x
ror $1400+336 ,x
ror $1400,x
inx
cpx #16
bne Rightshift
");
end;
procedure shiftli();
begin
asm("
ldx #0
leftshift
lda $1400,x
lda $1400,x
asl
rol $1400+336 ,x
rol $1400+320 ,x
rol $1400+304 ,x
rol $1400+288 ,x
rol $1400+272 ,x
rol $1400+256 ,x
rol $1400+240 ,x
rol $1400+224 ,x
rol $1400+208 ,x
rol $1400+192 ,x
rol $1400+176 ,x
rol $1400+160 ,x
rol $1400+144 ,x
rol $1400+128 ,x
rol $1400+112 ,x
rol $1400+96 ,x
rol $1400+80 ,x
rol $1400+64 ,x
rol $1400+48 ,x
rol $1400+32 ,x
rol $1400+16 ,x
rol $1400,x
inx
cpx #16
bne leftshift
");
end;
begin
ClearScreen(white, screen_col_loc);
zpcharz:=5120;
zpchars:=32768;
zpscr:=4096;
zpcol:=37888;
poke(^37139,0,0);
poke(^37154,0,127);
poke(^36869,0,205);
poke(^36867,0,151);
for b:=0 to 8 do
begin
for a:=0 to 255 do
begin
zpcharz[a]:=0;
end;
zpcharz:= zpcharz+255;
end;
zpcharz:=5120;
for b:=0 to 16 do
begin
zpcharz[b]:=charset[b];
end;
zpscr:=4096;
for b:=0 to 22 do
begin
zpscr[b]:=b;
end;
zpcol:=37888;
for b:=0 to 22 do
begin
zpcol[b]:=4;
end;
while (true) do
begin
waitforraster(0);
if peek(^197,0)= 17 then
begin
shiftli();
end;
if peek(^197,0)= 18 then
begin
shiftre();
end;
end;
end.
sprite 8byte :
Code: Select all
program sprite;
var
charset : array[8] of byte = (24,24,60,126,255,24,36,66);
a, b : byte;
zpcharz: pointer;
zpchars: pointer;
zpscr: pointer;
zpcol: pointer;
procedure shiftre();
begin
asm("
ldx #0
Rightshift
lda $1400,x
lsr
ror $1400+8 ,x
ror $1400+16 ,x
ror $1400+24 ,x
ror $1400+32 ,x
ror $1400+40 ,x
ror $1400+48 ,x
ror $1400+56 ,x
ror $1400+64 ,x
ror $1400+72 ,x
ror $1400+80 ,x
ror $1400+88 ,x
ror $1400+96 ,x
ror $1400+104 ,x
ror $1400+112 ,x
ror $1400+120 ,x
ror $1400+128 ,x
ror $1400+136 ,x
ror $1400+144 ,x
ror $1400+152 ,x
ror $1400+160 ,x
ror $1400+168 ,x
ror $1400,x
inx
cpx #8
bne Rightshift
");
end;
procedure shiftli();
begin
asm("
ldx #0
leftshift
lda $1400,x
lda $1400,x
asl
rol $1400+168 ,x
rol $1400+160 ,x
rol $1400+152 ,x
rol $1400+144 ,x
rol $1400+136 ,x
rol $1400+128 ,x
rol $1400+120 ,x
rol $1400+112 ,x
rol $1400+104 ,x
rol $1400+96 ,x
rol $1400+88 ,x
rol $1400+80 ,x
rol $1400+72 ,x
rol $1400+64 ,x
rol $1400+56 ,x
rol $1400+48 ,x
rol $1400+40 ,x
rol $1400+32 ,x
rol $1400+24 ,x
rol $1400+16 ,x
rol $1400+8 ,x
rol $1400,x
inx
cpx #8
bne leftshift
");
end;
begin
ClearScreen(white, screen_col_loc);
zpcharz:=5120;
zpchars:=32768;
zpscr:=4096;
zpcol:=37888;
poke(^37139,0,0);
poke(^37154,0,127);
poke(^36869,0,205);
for b:=0 to 8 do
begin
for a:=0 to 255 do
begin
zpcharz[a]:=0;
end;
zpcharz:= zpcharz+255;
end;
zpcharz:=5120;
for b:=0 to 8 do
begin
zpcharz[b]:=charset[b];
end;
zpscr:=4096;
for b:=0 to 22 do
begin
zpscr[b]:=b;
end;
zpcol:=37888;
for b:=0 to 22 do
begin
zpcol[b]:=4;
end;
while (true) do
begin
waitforraster(0);
if peek(^197,0)= 17 then
begin
shiftli();
end;
if peek(^197,0)= 18 then
begin
shiftre();
end;
end;
end.