trse : a sprite 8 byte and a sprite 16 byte in the whole top row.

You need an actual VIC.

Moderator: Moderators

Post Reply
funkheld
Vic 20 Devotee
Posts: 241
Joined: Tue Sep 10, 2019 4:23 am

trse : a sprite 8 byte and a sprite 16 byte in the whole top row.

Post by funkheld »

a sprite 8 byte in the whole top row right and left and a sprite 16 byte in the whole top row.

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.
funkheld
Vic 20 Devotee
Posts: 241
Joined: Tue Sep 10, 2019 4:23 am

Re: trse : a sprite 8 byte and a sprite 16 byte in the whole top row.

Post by funkheld »

here sprite in the first row for the graphic mode from address 4352

it's easy you just need to change the addresses.
and a char less in the row.

greeting
 

Code: Select all

program shiftgraf;

var
charset : array[16] of byte = (24,24,60,126,255,24,36,66,255,129,129,129,129,129,129,255);

a, b: byte;

zpgrafscr: pointer;
zpchar: pointer;
zpy:pointer;
zpz:pointer;

procedure shiftre();
begin
	asm("
	ldx #0
Rightshift
	lda 4352,x
	lsr
	ror 4352+16 ,x
	ror 4352+32 ,x
	ror 4352+48 ,x
	ror 4352+64 ,x
	ror 4352+80 ,x
	ror 4352+96 ,x
	ror 4352+112 ,x
	ror 4352+128 ,x
	ror 4352+144 ,x
	ror 4352+160 ,x
	ror 4352+176 ,x
	ror 4352+192 ,x
	ror 4352+208 ,x
	ror 4352+224 ,x
	ror 4352+240 ,x
	ror 4352+256 ,x
	ror 4352+272 ,x
	ror 4352+288 ,x
	ror 4352+304 ,x
	ror 4352+320 ,x
	ror 4352,x
	inx
	cpx #16
	bne Rightshift
	");
end;

procedure shiftli();
begin
	asm("
	ldx #0
leftshift
	lda 4352,x
	lda 4352,x
	asl
	rol 4352+320 ,x
	rol 4352+304 ,x
	rol 4352+288 ,x
	rol 4352+272 ,x
	rol 4352+256 ,x
	rol 4352+240 ,x
	rol 4352+224 ,x
	rol 4352+208 ,x
	rol 4352+192 ,x
	rol 4352+176 ,x
	rol 4352+160 ,x
	rol 4352+144 ,x
	rol 4352+128 ,x
	rol 4352+112 ,x
	rol 4352+96 ,x
	rol 4352+80 ,x
	rol 4352+64 ,x
	rol 4352+48 ,x
	rol 4352+32 ,x
	rol 4352+16 ,x
	rol 4352,x
	inx
	cpx #16
	bne leftshift
	");
end;

begin     
  zpgrafscr:=4352;
  zpy:=4096-16;
  zpz:=37888-16;
  
  for b:=0 to 15 do
	begin
		for a:=0 to 255 do
		begin 	     
    	zpgrafscr[a]:=0;
    end;
    zpgrafscr:= zpgrafscr+255;
  end;
  poke(^36867,0,151);
  poke(^36866,0,21);
  poke(^36869,0,204);
  poke(^36864,0,14); 
  for a:=16 to 255 do
  begin
    zpy[a]:=a;
    zpz[a]:=6;
  end;
  
  zpchar:=4352;
	for a:=0 to 16 do
	begin
		zpchar[a]:=charset[a];
	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.
funkheld
Vic 20 Devotee
Posts: 241
Joined: Tue Sep 10, 2019 4:23 am

Re: trse : a sprite 8 byte and a sprite 16 byte in the whole top row.

Post by funkheld »

I have now in the graphic mode 2 sprite on top of each other.
the top row with Q / E and the 2nd row control with A / D.

the size of the prg is so small at trse that you can fill 10 lines and each line is then controlled.
if you join the rows, by switching you can create a sprite move.
maybe one of you will find a vertical movement for that.

start with sys8192.

the prg has 570 bytes, if you can move 2 rows.
So trse is wonderfully economical.
you can easily make 10 rows and has a movement on the whole screen.

greeting

Code: Select all

program shiftgraf;

var
charset : array[16] of byte = (24,24,60,126,255,24,36,66,255,129,129,129,129,129,129,255);

a, b: byte;

zpgrafscr: pointer;
zpchar: pointer;
zpy:pointer;
zpz:pointer;

procedure shiftre();
begin
	asm("
	ldx #0
Rightshift
	lda 4352,x
	lsr
	ror 4352+16 ,x
	ror 4352+32 ,x
	ror 4352+48 ,x
	ror 4352+64 ,x
	ror 4352+80 ,x
	ror 4352+96 ,x
	ror 4352+112 ,x
	ror 4352+128 ,x
	ror 4352+144 ,x
	ror 4352+160 ,x
	ror 4352+176 ,x
	ror 4352+192 ,x
	ror 4352+208 ,x
	ror 4352+224 ,x
	ror 4352+240 ,x
	ror 4352+256 ,x
	ror 4352+272 ,x
	ror 4352+288 ,x
	ror 4352+304 ,x
	ror 4352+320 ,x
	ror 4352,x
	inx
	cpx #16
	bne Rightshift
	");
end;

procedure shiftli();
begin
	asm("
	ldx #0
leftshift
	lda 4352,x
	lda 4352,x
	asl
	rol 4352+320 ,x
	rol 4352+304 ,x
	rol 4352+288 ,x
	rol 4352+272 ,x
	rol 4352+256 ,x
	rol 4352+240 ,x
	rol 4352+224 ,x
	rol 4352+208 ,x
	rol 4352+192 ,x
	rol 4352+176 ,x
	rol 4352+160 ,x
	rol 4352+144 ,x
	rol 4352+128 ,x
	rol 4352+112 ,x
	rol 4352+96 ,x
	rol 4352+80 ,x
	rol 4352+64 ,x
	rol 4352+48 ,x
	rol 4352+32 ,x
	rol 4352+16 ,x
	rol 4352,x
	inx
	cpx #16
	bne leftshift
	");
end;

procedure shiftre1();
begin
	asm("
	ldx #0
Rightshift1
	lda 4352+336,x
	lsr
	ror 4352+16 +336,x
	ror 4352+32 +336,x
	ror 4352+48 +336,x
	ror 4352+64 +336,x
	ror 4352+80 +336,x
	ror 4352+96 +336,x
	ror 4352+112 +336,x
	ror 4352+128 +336,x
	ror 4352+144 +336,x
	ror 4352+160 +336,x
	ror 4352+176 +336,x
	ror 4352+192 +336,x
	ror 4352+208 +336,x
	ror 4352+224 +336,x
	ror 4352+240 +336,x
	ror 4352+256 +336,x
	ror 4352+272 +336,x
	ror 4352+288 +336,x
	ror 4352+304 +336,x
	ror 4352+320 +336,x
	ror 4352+336,x
	inx
	cpx #16
	bne Rightshift1
	");
end;

procedure shiftli1();
begin
	asm("
	ldx #0
leftshift1
	lda 4352+336,x
	lda 4352+336,x
	asl
	rol 4352+320 +336,x
	rol 4352+304 +336,x
	rol 4352+288 +336,x
	rol 4352+272 +336,x
	rol 4352+256 +336,x
	rol 4352+240 +336,x
	rol 4352+224 +336,x
	rol 4352+208 +336,x
	rol 4352+192 +336,x
	rol 4352+176 +336,x
	rol 4352+160 +336,x
	rol 4352+144 +336,x
	rol 4352+128 +336,x
	rol 4352+112 +336,x
	rol 4352+96 +336,x
	rol 4352+80 +336,x
	rol 4352+64 +336,x
	rol 4352+48 +336,x
	rol 4352+32 +336,x
	rol 4352+16 +336,x
	rol 4352+336,x
	inx
	cpx #16
	bne leftshift1
	");
end;

begin     
  zpgrafscr:=4352;
  zpy:=4096-16;
  zpz:=37888-16;
  
  for b:=0 to 15 do
	begin
		for a:=0 to 255 do
		begin 	     
    	zpgrafscr[a]:=0;
    end;
    zpgrafscr:= zpgrafscr+255;
  end;
  poke(^36867,0,151);
  poke(^36866,0,21);
  poke(^36869,0,204);
  poke(^36864,0,14); 
  for a:=16 to 255 do
  begin
    zpy[a]:=a;
    zpz[a]:=6;
  end;
  
  zpchar:=4352;
	for a:=0 to 16 do
	begin
		zpchar[a]:=charset[a];
	end;
	
  zpchar:=4352+336;
	for a:=0 to 16 do
	begin
		zpchar[a]:=charset[a];
	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;   
  
   if peek(^197,0)= 48 then 
     begin
	    shiftli1();  
     end;  
   if peek(^197,0)= 49 then 
    begin
	    shiftre1();
    end;
  end;    
end.
Attachments
2sprite.jpg
User avatar
AndyH
Vic 20 Afficionado
Posts: 364
Joined: Thu Jun 17, 2004 5:51 am
Website: https://www.hewco.uk
Location: UK
Occupation: Developer

Re: trse : a sprite 8 byte and a sprite 16 byte in the whole top row.

Post by AndyH »

Nice :)

Looks like you are really enjoying TRSE.
--
AndyH
HEWCO | Vic 20 blog
Post Reply