News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu

cpctelera : background with sprite or link ?

Started by funkheld, 09:00, 09 December 20

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

funkheld


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

trocoloco

try watching this, it might help you although it's in spanish



Also you could look up around the sources of cpcretrodev games 

funkheld

#2

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();
    }     
  }
}

SRS

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

funkheld


Powered by SMFPacks Menu Editor Mod