CPCWiki forum

General Category => Programming => Topic started by: funkheld on 09:00, 09 December 20

Title: cpctelera : background with sprite or link ?
Post by: funkheld on 09:00, 09 December 20

Hi good afternoon.
how can one link the background with derm sprite or with cpctelera? it is mode 2.
what possibilities are there


I know cpctelera has sprite with it.


Thank you.
greeting
Title: Re: cpctelera : background with sprite or link ?
Post by: trocoloco on 15:38, 09 December 20
try watching this, it might help you although it's in spanish

https://www.youtube.com/watch?v=zov-yI7I00s (https://www.youtube.com/watch?v=zov-yI7I00s)

Also you could look up around the sources of cpcretrodev games 
Title: Re: cpctelera : background with sprite or link ?
Post by: funkheld on 19:49, 09 December 20

hello, why does "cpct_disableFirmware ();"
the program slower or the key query?

without "cpct_disableFirmware ();" it's super fast.


Thank you.
greeting



#include <cpctelera.h>


#define spr_w 5
#define spr_h 40


const u8 sprite[5 * 40] = {
   0xff, 0xff, 0xff, 0xff, 0xff,
   0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
   0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
   0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0x80, 0x00, 0x00, 0x00, 0x01,
  0xff, 0xff, 0xff, 0xff, 0xff};


const u16 line_c0[8 * 25] = {
  0xC000, 0xC800, 0xD000, 0xD800, 0xE000, 0xE800, 0xF000, 0xF800,
  0xC050, 0xC850, 0xD050, 0xD850, 0xE050, 0xE850, 0xF050, 0xF850,
  0xC0A0, 0xC8A0, 0xD0A0, 0xD8A0, 0xE0A0, 0xE8A0, 0xF0A0, 0xF8A0,
  0xC0F0, 0xC8F0, 0xD0F0, 0xD8F0, 0xE0F0, 0xE8F0, 0xF0F0, 0xF8F0,
  0xC140, 0xC940, 0xD140, 0xD940, 0xE140, 0xE940, 0xF140, 0xF940,
  0xC190, 0xC990, 0xD190, 0xD990, 0xE190, 0xE990, 0xF190, 0xF990,
  0xC1E0, 0xC9E0, 0xD1E0, 0xD9E0, 0xE1E0, 0xE9E0, 0xF1E0, 0xF9E0,
  0xC230, 0xCA30, 0xD230, 0xDA30, 0xE230, 0xEA30, 0xF230, 0xFA30,
  0xC280, 0xCA80, 0xD280, 0xDA80, 0xE280, 0xEA80, 0xF280, 0xFA80,
  0xC2D0, 0xCAD0, 0xD2D0, 0xDAD0, 0xE2D0, 0xEAD0, 0xF2D0, 0xFAD0,
  0xC320, 0xCB20, 0xD320, 0xDB20, 0xE320, 0xEB20, 0xF320, 0xFB20,
  0xC370, 0xCB70, 0xD370, 0xDB70, 0xE370, 0xEB70, 0xF370, 0xFB70,
  0xC3C0, 0xCBC0, 0xD3C0, 0xDBC0, 0xE3C0, 0xEBC0, 0xF3C0, 0xFBC0,
  0xC410, 0xCC10, 0xD410, 0xDC10, 0xE410, 0xEC10, 0xF410, 0xFC10,
  0xC460, 0xCC60, 0xD460, 0xDC60, 0xE460, 0xEC60, 0xF460, 0xFC60,
  0xC4B0, 0xCCB0, 0xD4B0, 0xDCB0, 0xE4B0, 0xECB0, 0xF4B0, 0xFCB0,
  0xC500, 0xCD00, 0xD500, 0xDD00, 0xE500, 0xED00, 0xF500, 0xFD00,
  0xC550, 0xCD50, 0xD550, 0xDD50, 0xE550, 0xED50, 0xF550, 0xFD50,
  0xC5A0, 0xCDA0, 0xD5A0, 0xDDA0, 0xE5A0, 0xEDA0, 0xF5A0, 0xFDA0,
  0xC5F0, 0xCDF0, 0xD5F0, 0xDDF0, 0xE5F0, 0xEDF0, 0xF5F0, 0xFDF0,
  0xC640, 0xCE40, 0xD640, 0xDE40, 0xE640, 0xEE40, 0xF640, 0xFE40,
  0xC690, 0xCE90, 0xD690, 0xDE90, 0xE690, 0xEE90, 0xF690, 0xFE90,
  0xC6E0, 0xCEE0, 0xD6E0, 0xDEE0, 0xE6E0, 0xEEE0, 0xF6E0, 0xFEE0,
  0xC730, 0xCF30, 0xD730, 0xDF30, 0xE730, 0xEF30, 0xF730, 0xFF30,
  0xC780, 0xCF80, 0xD780, 0xDF80, 0xE780, 0xEF80, 0xF780, 0xFF80};


const u16 line_40[8 * 25] = {
  0x4000, 0x4800, 0x5000, 0x5800, 0x6000, 0x6800, 0x7000, 0x7800,
  0x4050, 0x4850, 0x5050, 0x5850, 0x6050, 0x6850, 0x7050, 0x7850,
  0x40A0, 0x48A0, 0x50A0, 0x58A0, 0x60A0, 0x68A0, 0x70A0, 0x78A0,
  0x40F0, 0x48F0, 0x50F0, 0x58F0, 0x60F0, 0x68F0, 0x70F0, 0x78F0,
  0x4140, 0x4940, 0x5140, 0x5940, 0x6140, 0x6940, 0x7140, 0x7940,
  0x4190, 0x4990, 0x5190, 0x5990, 0x6190, 0x6990, 0x7190, 0x7990,
  0x41E0, 0x49E0, 0x51E0, 0x59E0, 0x61E0, 0x69E0, 0x71E0, 0x79E0,
  0x4230, 0x4A30, 0x5230, 0x5A30, 0x6230, 0x6A30, 0x7230, 0x7A30,
  0x4280, 0x4A80, 0x5280, 0x5A80, 0x6280, 0x6A80, 0x7280, 0x7A80,
  0x42D0, 0x4AD0, 0x52D0, 0x5AD0, 0x62D0, 0x6AD0, 0x72D0, 0x7AD0,
  0x4320, 0x4B20, 0x5320, 0x5B20, 0x6320, 0x6B20, 0x7320, 0x7B20,
  0x4370, 0x4B70, 0x5370, 0x5B70, 0x6370, 0x6B70, 0x7370, 0x7B70,
  0x43C0, 0x4BC0, 0x53C0, 0x5BC0, 0x63C0, 0x6BC0, 0x73C0, 0x7BC0,
  0x4410, 0x4C10, 0x5410, 0x5C10, 0x6410, 0x6C10, 0x7410, 0x7C10,
  0x4460, 0x4C60, 0x5460, 0x5C60, 0x6460, 0x6C60, 0x7460, 0x7C60,
  0x44B0, 0x4CB0, 0x54B0, 0x5CB0, 0x64B0, 0x6CB0, 0x74B0, 0x7CB0,
  0x4500, 0x4D00, 0x5500, 0x5D00, 0x6500, 0x6D00, 0x7500, 0x7D00,
  0x4550, 0x4D50, 0x5550, 0x5D50, 0x6550, 0x6D50, 0x7550, 0x7D50,
  0x45A0, 0x4DA0, 0x55A0, 0x5DA0, 0x65A0, 0x6DA0, 0x75A0, 0x7DA0,
  0x45F0, 0x4DF0, 0x55F0, 0x5DF0, 0x65F0, 0x6DF0, 0x75F0, 0x7DF0,
  0x4640, 0x4E40, 0x5640, 0x5E40, 0x6640, 0x6E40, 0x7640, 0x7E40,
  0x4690, 0x4E90, 0x5690, 0x5E90, 0x6690, 0x6E90, 0x7690, 0x7E90,
  0x46E0, 0x4EE0, 0x56E0, 0x5EE0, 0x66E0, 0x6EE0, 0x76E0, 0x7EE0,
  0x4730, 0x4F30, 0x5730, 0x5F30, 0x6730, 0x6F30, 0x7730, 0x7F30,
  0x4780, 0x4F80, 0x5780, 0x5F80, 0x6780, 0x6F80, 0x7780, 0x7F80};


u8 nGetChar;
u8 *scradrc0;
u8 *scradr40;
u8 nx,ny,x,y,w,h,ya,xa;


u8 GetChar()
{
   __asm
      LD HL, #_nGetChar
      LD (HL), #0
      CALL #0xBB09 ;KM READ CHAR
      JP NC, _end_getchar
      LD (HL), A
      _end_getchar:
   __endasm;
   
   return nGetChar;
}


void BasicMove(u16 x, u16 y) __naked __z88dk_callee {
  x;y;
  __asm
      pop hl
      pop de
      ex  (sp), hl
      jp 0xBBC0
  __endasm;
}


void BasicDraw(u16 x, u16 y) __naked __z88dk_callee{
  x;y;
  __asm
      pop hl
      pop de
      ex  (sp), hl
      jp 0xBBF6
  __endasm;
}


void drawLine(u16 x1, u16 y1, u16 x2, u16 y2)
{
  BasicMove(x1,y1);
  BasicDraw(x2,y2);
}


setze()
{
  w=0;
  for(ny= 0; ny < spr_h; ny++)
  {
     scradrc0=line_c0[ya+ny];
     scradr40=line_40[ya+ny];
     for(nx= 0; nx < spr_w; nx++)
     {
       *(scradrc0+xa+nx)=*(scradr40+xa+nx);
     }
     w=w+spr_w;
  }
 
  w=0;
  for(ny= 0; ny < spr_h; ny++)
  {   
     scradrc0=line_c0[y+ny];
     scradr40=line_40[y+ny];
     for(nx= 0; nx < spr_w; nx++)
     {
        *(scradrc0+x+nx)=*(scradr40+x+nx);
        *(scradrc0+x+nx)=*(scradrc0+x+nx) | sprite[nx+w];
     }
     w=w+spr_w;
  } 
  ya=y;
  xa=x;     
}

void main(void) {
  cpct_disableFirmware();
  cpct_setVideoMode(2);
  cpct_clearScreen(0);
 
  drawLine(0,0,100,25);   
  drawLine(0,50,100,25);
  drawLine(0,150,100,25);
  drawLine(0,350,100,25);
 
  cpct_memcpy(0x4000,0xc000,0x4000);
 
  x=30;
  y=60;
 
  w=0;
  for(ny= 0; ny < spr_h; ny++)
  {   
     scradrc0=line_c0[y+ny];
     scradr40=line_40[y+ny];
     for(nx= 0; nx < spr_w; nx++)
     {
        *(scradrc0+x+nx)=*(scradr40+x+nx);
        *(scradrc0+x+nx)=*(scradrc0+x+nx) | sprite[nx+w];
     }
     w=w+spr_w;
  }
  ya=y;
  xa=x;

  while(1)
   {
    char nChar = GetChar();
   
    if(nChar == 'W' || nChar == 'w')
    {
      y=y-4;
      setze();
    }
   
    if(nChar == 'S' || nChar == 's')
    {
      y=y+4;
      setze();
    }


     if(nChar == 'Q' || nChar == 'q')
    {
      x=x-1;
      setze();
    }
   
    if(nChar == 'E' || nChar == 'e')
    {
      x=x+1;
      setze();
    }     
  }
}
Title: Re: cpctelera : background with sprite or link ?
Post by: SRS on 21:46, 09 December 20
Deja vu !

DISABLING firmware
trying to USE firmware calls after that instead of cpctelera native routines
WONDERING why it does not work like hoped ...  :doh:

10 read the manuals20 read examples30 try to understand how cpc works internal40 modify examples but don't mix different approaches50 if not working then goto 10
Title: Re: cpctelera : background with sprite or link ?
Post by: funkheld on 23:09, 09 December 20
ahhhh....hello, thanks


greeting
Powered by SMFPacks Menu Editor Mod