// Header File // Created 13/07/2020; 10:05:40 extern void FastDrawLine(void* plane,short x1,short y1,short x2,short y2,short mode) __attribute__((__stkparm__)); //Est plus rapide que la version Register void FastFilledRect(void* plane,short x1,short y1,short x2,short y2,short mode) __attribute__((__stkparm__)); void FastClearScreen_R(void *plane asm("%a0")); void ClipSprite8Get_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite16Get_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned short *sprt asm("%a1"),void *dest asm("%a0")) __attribute__((__regparm__)); void ClipSprite32Get_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned long *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite8_OR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite8_XOR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite8_AND_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite8_RPLC_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")) __attribute__((__regparm__)); void ClipSprite16_OR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned short *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite16_XOR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned short *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite16_AND_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned short *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite16_RPLC_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned short *sprt asm("%a1"),void *dest asm("%a0")) __attribute__((__regparm__)); void ClipSprite32_OR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned long *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite32_XOR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned long *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite32_AND_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned long *sprt asm("%a1"),void *dest asm("%a0")); void ClipSprite32_RPLC_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned long *sprt asm("%a1"),void *dest asm("%a0")) __attribute__((__regparm__)); void FastOutlinedCircle_DRAW_R(void *plane asm("%a0"),unsigned short xcenter asm("%d0"),unsigned short ycenter asm("%d1"),unsigned short radius asm("%d2")); void FastOutlinedCircle_ERASE_R(void *plane asm("%a0"),unsigned short xcenter asm("%d0"),unsigned short ycenter asm("%d1"),unsigned short radius asm("%d2")); void ClipFastOutlinedCircle_INVERT_R(void *plane asm("%a0"),unsigned short xcenter asm("%d0"),unsigned short ycenter asm("%d1"),unsigned short radius asm("%d2")); void DrawSpan_REVERSE_R(short x1 asm("%d0"), short x2 asm("%d1"), void * addr asm("%a0")); void DrawSpan_OR_R(short x1 asm("%d0"), short x2 asm("%d1"), void * addr asm("%a0")); void DrawSpan_XOR_R(short x1 asm("%d0"), short x2 asm("%d1"), void * addr asm("%a0")); void ClipFastFilledCircle_R(void *plane asm("%a0"),short xcenter asm("%d0"),short ycenter asm("%d1"),short radius asm("%d2"), void(*drawfunc)(short x1 asm("%d0"), short x2 asm("%d1"), void * addr asm("%a0")) asm("%a2")); void SpriteX8_OR(short x,short y,short h,unsigned char *sprt,short w,void *dest) __attribute__((__stkparm__)); void SpriteX8_XOR(short x,short y,short h,unsigned char *sprt,short w,void *dest) __attribute__((__stkparm__)); void SpriteX8_AND(short x,short y,short h,unsigned char *sprt,short w,void *dest) __attribute__((__stkparm__)); void SpriteX8_RPLC_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),const unsigned char *sprt asm("%a1"),short w asm("%d3"),void *dest asm("%a0")) __attribute__((__regparm__)); void SpriteX8Get_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),void *src asm("%a1"),unsigned char *dest asm("%a0"),short bytewidth asm("%d3")); void FastCopyScreen(void* src,void* dest) __attribute__((__stkparm__)); // C prototype #define ARG1 argsss_list[0] #define ARG2 argsss_list[1] #define ARG3 argsss_list[2] #define ARG4 argsss_list[3] #define ARG5 argsss_list[4] #define ARG6 argsss_list[5] #define ARG7 argsss_list[6] #define ARG8 argsss_list[7] #define ARG9 argsss_list[8] #define ARG10 argsss_list[9] #define FCNUM argsss_list[10] #define RETURN args_input_ptr[5]= #define EXT_PIXOFFSET(x, y) ((((y)<<4)-(y))*2+((x)>>3)) #define EXT_GETPIX_AN(a, offset, n) ({char __result; if(__builtin_constant_p(offset)) \ { \ if(__builtin_constant_p(a)) \ asm("btst.b %1,%c2; sne.b %0" : "=d" (__result) : "di" (n), "dai" ((offset)+(unsigned char*)(a))); \ else \ if (offset !=0) \ asm("btst.b %1,%c2(%3); sne.b %0" : "=d,d" (__result) : "di,di" (n), "i,\?\?\?\?!g" (offset), "a,a" (a)); \ else \ asm("btst.b %1,(%2); sne.b %0" : "=d" (__result) : "di" (n), "a" (a)); \ } \ else \ asm("btst.b %1,0(%3,%2.w); sne.b %0" : "=d" (__result) : "di" (n), "da" (offset), "a" (a)); \ __result;}) #define EXT_GETPIX(p, x, y) EXT_GETPIX_AN(p, EXT_PIXOFFSET(x,y), ~(x)) #define EXT_SETPIX_AN(a, offset, n) ({if(__builtin_constant_p(offset)) \ { \ if(__builtin_constant_p(a)) \ asm("bset.b %0,%c1" : : "di" (n), "dai" ((offset)+(unsigned char*)(a))); \ else \ if (offset !=0) \ asm("bset.b %0,%c1(%2)" : : "di,di" (n), "i,\?\?\?\?!g" (offset), "a,a" (a)); \ else \ asm("bset.b %0,(%1)" : : "di" (n), "a" (a)); \ } \ else \ asm("bset.b %0,0(%2,%1.w)" : : "di" (n), "da" (offset), "a" (a)); \ }) #define EXT_CLRPIX_AN(a, offset, n) ({if(__builtin_constant_p(offset)) \ { \ if(__builtin_constant_p(a)) \ asm("bclr.b %0,%c1" : : "di" (n), "dai" ((offset)+(unsigned char*)(a))); \ else \ if (offset !=0) \ asm("bclr.b %0,%c1(%2)" : : "di,di" (n), "i,\?\?\?\?!g" (offset), "a,a" (a)); \ else \ asm("bclr.b %0,(%1)" : : "di" (n), "a" (a)); \ } \ else \ asm("bclr.b %0,0(%2,%1.w)" : : "di" (n), "da" (offset), "a" (a)); \ }) #define EXT_XORPIX_AN(a, offset, n) ({if(__builtin_constant_p(offset)) \ { \ if(__builtin_constant_p(a)) \ asm("bchg.b %0,%c1" : : "di" (n), "dai" ((offset)+(unsigned char*)(a))); \ else \ if (offset !=0) \ asm("bchg.b %0,%c1(%2)" : : "di,di" (n), "i,\?\?\?\?!g" (offset), "a,a" (a)); \ else \ asm("bchg.b %0,(%1)" : : "di" (n), "a" (a)); \ } \ else \ asm("bchg.b %0,0(%2,%1.w)" : : "di" (n), "da" (offset), "a" (a)); \ }) #define EXT_SETPIX(p, x, y) EXT_SETPIX_AN(p, EXT_PIXOFFSET(x,y), ~(x)) #define EXT_CLRPIX(p, x, y) EXT_CLRPIX_AN(p, EXT_PIXOFFSET(x,y), ~(x)) #define EXT_XORPIX(p, x, y) EXT_XORPIX_AN(p, EXT_PIXOFFSET(x,y), ~(x)) void ClipSprite8_OR_R(short x asm("%d0"),short y asm("%d1"),short h asm("%d2"),unsigned char *sprt asm("%a1"),void *dest asm("%a0")); //void FastClearScreen_R(void *plane asm("%a0")); HANDLE CopieHdl2,ExecHdl2; long *scr_copy[4]; unsigned int sprt2_return[2]; char ii_; //WINDOW wind; typedef struct { void* (*fc_ptr[255])(void); unsigned char fc_nb_args[255]; } NppLIB_returned_datas ; NppLIB_returned_datas *npp_lib_rt; unsigned char *fptr; long *args_input_ptr,*output_ptr,*npp_fc_num_ptr; signed long *argsss_list,*fc_data_return; void execos(unsigned char *str_cmd) { HANDLE handle; TRY handle = HS_popEStack (); push_parse_text (str_cmd); handle = HS_popEStack (); NG_execute (handle, FALSE); ONERR 0; ENDTRY HeapFree (handle); } long osvar2(unsigned char *var_name) { unsigned char *cptr,*lptr; long rval; SYM_ENTRY *SymPtr; HANDLE h;rval=0; SymPtr = DerefSym (SymFind (SYMSTR (var_name))); if (!SymPtr) { return 0;}; h = SymPtr->handle; lptr=HToESI (h); switch(*lptr) { case POSINT_TAG: rval=GetIntArg (lptr); return rval; break; case NEGINT_TAG: rval=(long)(-GetIntArg (lptr)); return rval; break ; case STR_TAG: rval=(long)(GetStrnArg (lptr)); return rval; break ; //case FLOAT_TAG: //return (signed long)(GetFloatArg(lptr)); break ; } } /* char loadasm(void) { unsigned char buff_name[20],*exe_name_str ; char *pOriginalExec, *pCopiedExec, isarchived; HARDWARE_PARM_BLOCK *hpb; short hardwareVersion; long ghost_offset; unsigned short ExecLength; SYM_ENTRY *SymPtr; unsigned char nbargs_bin; //ie execasm strcpy(buff_name,"npplib"); exe_name_str=buff_name; isarchived=0; SymPtr=DerefSym(SymFind(SYMSTR (exe_name_str))); ExecHdl2=SymPtr->handle; isarchived=SymPtr->flags.bits.archived; if (HeapGetLock(ExecHdl2)) { pCopiedExec= pOriginalExec= HeapDeref(ExecHdl2); ExecHdl2= 0; } else { HeapMoveHigh(ExecHdl2); pCopiedExec= pOriginalExec= HLock(ExecHdl2); } ExecLength= *(unsigned short *)pCopiedExec + 3; if (isarchived) { CopieHdl2= HeapAllocHigh(ExecLength); if (CopieHdl2 == H_NULL) { if (ExecHdl2) HeapUnlock(ExecHdl2); printf("\nNpplib error in loading"); ngetchx(); return 0; } pCopiedExec= HeapDeref(CopieHdl2); memcpy(pCopiedExec, pOriginalExec, ExecLength); } else CopieHdl2= H_NULL; hpb= (HARDWARE_PARM_BLOCK *)FL_getHardwareParmBlock(); if (hpb->len+2-4 < offsetof(HARDWARE_PARM_BLOCK,gateArray)) hardwareVersion= 1; else hardwareVersion= hpb->gateArray; ghost_offset= hardwareVersion == 2 ? 0x40000 : 0; EX_patch(pCopiedExec + 2 + ghost_offset, pCopiedExec + ExecLength + ghost_offset - 2); fptr=pCopiedExec + 2 + ghost_offset; ASM_call(fptr); args_input_ptr=osvar2("tmpargpt"); if(args_input_ptr==0) {printf("\nError in loadasm()"); ngetchx(); exit(4);} //printf("\nIn aeffacer\nargs_input_ptr=%ld",(long)args_input_ptr); ngetchx(); argsss_list=&args_input_ptr[6]; //argsss_list=&(asm_ptr_list[asm_index][6]); //printf("\nARG1="); output_ptr=&args_input_ptr[5]; npp_fc_num_ptr=&args_input_ptr[16]; // npp_fc_num_ptr=&argsss_list[16]; npp_lib_rt=*output_ptr; return 1; } */ /* long execasm(unsigned char f_num) { *npp_fc_num_ptr=f_num; *(unsigned long*)0x5B04=(unsigned long)args_input_ptr; ASM_call(npp_lib_rt->fc_ptr[f_num]); return *output_ptr; } void closeasm(void) { unsigned char indexx; if(ExecHdl2) HeapUnlock(ExecHdl2); if(CopieHdl2) HeapFree(CopieHdl2); if(args_input_ptr) free(args_input_ptr); execos("unarchiv tmpargpt:delvar tmpargpt"); } */ void f_clrscr_(unsigned char *lcdad) //100 { /*ARG1=(long)lcdad; execasm(55);*/ MoveTo(0,0); FastClearScreen_R(lcdad); } void f_clrlcd_(unsigned char *lcdad) //55 { /*ARG1=(long)lcdad; execasm(55);*/ FastClearScreen_R(lcdad); } void f_dpix_(int x, int y,char gmode,unsigned char *lcdad) //51 { /*ARG1=(long)x; ARG2=(long)y; ARG3=(long)gmode; ARG4=(long)lcdad; execasm(51);*/ switch(gmode) { case 2: //xor EXT_XORPIX(lcdad, x, y); return; break; case 3: //AND return; break; case 0: //or EXT_SETPIX(lcdad, x, y); return; break; case 1: //blank EXT_CLRPIX(lcdad, x, y); return; break; } } long f_sprt82_(int x,int y,int h,unsigned char *sprite,char gmode,unsigned char *lcdad, unsigned int *sprt2_return) //47 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprite; ARG5=gmode; ARG6=(long)lcdad; ARG7=(long)sprt2_return; // printf("\nin graphh"); ngetchx(); return execasm(47);*/ unsigned char gsprite_buf[128],rr; short ii; ClipSprite8Get_R(x,y,h,gsprite_buf,lcdad); for(ii=0;ii>16)|(0b11111111&gsprite_buf[ii])); //prend que les coins return sprt2_return; } } switch(gmode) { case 2: //xor ClipSprite32_XOR_R(x,y,h,sprite,lcdad); return 0; break; case 3: //AND ClipSprite32_AND_R(x,y,h,sprite,lcdad); return 0; break; case 0: //or ClipSprite32_OR_R(x,y,h,sprite,lcdad); return 0; break; case 1: //rplc blank ClipSprite32_RPLC_R(x,y,h,sprite,lcdad); return 0; break; } return 0; } long f_gsprt8_(short x,short y,short h,unsigned char *sprite_buf,unsigned char *lcdad) //33 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprite_buf; ARG5=(long)lcdad; //return execasm(33);*/ ClipSprite8Get_R(x,y,h,sprite_buf,lcdad); } long f_gsprt16_(int x,int y,int h,unsigned int *sprite_buf,unsigned char *lcdad) //34 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprite_buf; ARG5=(long)lcdad; // printf("\nin graphh"); ngetchx(); return execasm(34);*/ ClipSprite16Get_R(x,y,h,sprite_buf,lcdad); } long f_gsprt32_(int x,int y,int h,unsigned long *sprite_buf,unsigned char *lcdad) //63 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprite_buf; ARG5=(long)lcdad; // printf("\nin graphh"); ngetchx(); return execasm(63);*/ ClipSprite32Get_R(x,y,h,sprite_buf,lcdad); } long f_gpix_(long x,long y,unsigned char *lcdad) { /*ARG1=x; ARG2=y; ARG3=(long)lcdad; return execasm(52);*/ return EXT_GETPIX(lcdad, x, y); } unsigned char *f_light_(unsigned char **lcdad_ptr) //72 { PortSet((*lcdad_ptr=GrayGetPlane(LIGHT_PLANE)),239,127); return *lcdad_ptr; } unsigned char *f_dark_(unsigned char **lcdad_ptr) //73 { PortSet((*lcdad_ptr=GrayGetPlane(DARK_PLANE)),239,127); return *lcdad_ptr; } unsigned char *f_setlcd_(unsigned char *new_lcdmem,unsigned char **lcdad_ptr) //50 { unsigned char *old_lcdmem; old_lcdmem=*lcdad_ptr; PortSet ((*lcdad_ptr=new_lcdmem), 239, 127); return old_lcdmem; } void f_dcircle_(int x,int y,int r,unsigned char gmode, unsigned char *lcdad) //124 { /*ARG1=x; ARG2=y; ARG3=r; ARG4=(long)gmode; ARG5=(long)lcdad; execasm(124);*/ switch(gmode) { case 2: //xor ClipFastOutlinedCircle_INVERT_R(lcdad,x,y,r); return ; //x y r gmode lcdad break; case 3: //AND case 0: //or FastOutlinedCircle_DRAW_R(lcdad,x,y,r); return ; break; case 1: //rplc - erase FastOutlinedCircle_ERASE_R(lcdad,x,y,r); return ; break; } } void f_fillcirc_(int x,int y,int r,unsigned char gmode,unsigned char *lcdad) //125 { /*ARG1=x; ARG2=y; ARG3=r; ARG4=(long)gmode; ARG5=(long)lcdad; execasm(125);*/ switch(gmode) { case 2: //xor ClipFastFilledCircle_R(lcdad,x,y,r,DrawSpan_XOR_R); break; case 3: //AND case 0: //or ClipFastFilledCircle_R(lcdad,x,y,r,DrawSpan_OR_R); break; case 1: //rplc - erase ClipFastFilledCircle_R(lcdad,x,y,r,DrawSpan_REVERSE_R); break; } } long f_sprt8x_(int x, int y,int h,int w,unsigned char *sprite,unsigned char gmode, unsigned char *lcdad) //154 { /* ARG1=x; ARG2=y; ARG3=h; ARG4=w; ARG5=(long)sprite; ARG6=(long)gmode; ARG7=(long)lcdad; execasm(154); */ switch(gmode) { case 2: //xor SpriteX8_XOR(x,y,h,sprite,w,lcdad); break; case 3: //AND SpriteX8_AND(x,y,h,sprite,w,lcdad); break; case 0: //or SpriteX8_OR(x,y,h,sprite,w,lcdad); break; case 1: //rplc SpriteX8_RPLC_R(x,y,h,sprite,w,lcdad); break; } return sprite; } unsigned char *f_gsprt8x_(int x,int y,int h,unsigned char *lcdad,unsigned char *dest,int w) //174 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)lcdad; ARG5=(long)dest; ARG6=(long)w; return execasm(174);*/ SpriteX8Get_R(x,y,h,lcdad,dest,w); return dest; } unsigned char *f_savescr_(unsigned char indexx,unsigned char *lcdad) //162 { unsigned char *ptrrr; if(scr_copy[indexx]!=NULL) { if(indexx>=4) return 0; ptrrr=(unsigned char *)scr_copy[indexx]; } else { if(indexx>=4) return 0; scr_copy[indexx]=(long*)(ptrrr=malloc(LCD_SIZE)); if(!ptrrr) {printf("\nMemory Error in savescr()"); ngetchx(); return 0;} } /*ARG1=(long)lcdad; ARG2=(long)ptrrr; execasm(162);*/ FastCopyScreen(lcdad,ptrrr); return ptrrr; } unsigned char *f_loadscr_(unsigned char indexx,unsigned char *lcdad) //163 { unsigned char *ptrrr; if(indexx>4) return 0; ptrrr=(unsigned char *)scr_copy[indexx]; if(ptrrr) { /*ARG1=(long)ptrrr; ARG2=(long)lcdad; execasm(163);*/ FastCopyScreen(ptrrr,lcdad); } return ptrrr; } void init_save_load_scr(void) { int i; for(i=0;i<4;i++) scr_copy[i]=0; } char f_drawpic_(int x, int y, unsigned char *pic_name, unsigned char gmode) { char *fptr, *cptr; unsigned char gmode2; SYM_ENTRY *SymPtr; HANDLE h; SCR_RECT full_screen = {{0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1}}; SymPtr = DerefSym (SymFind (SYMSTR (pic_name))); if (!SymPtr) { return 0;} h = SymPtr->handle; if (HeapGetLock (h)) //si archivé { cptr = fptr = HeapDeref (h); h = 0; } else { cptr = fptr = HLock (h); } switch(gmode) { case 2: //xor gmode2=A_XOR; break; case 3: //AND gmode2=A_AND; break; case 0: //or gmode2=A_OR; break; case 1: //blank gmode2=A_REPLACE; break; } BitmapPut (x, y, cptr+2, &full_screen, gmode2); if (h) HeapUnlock (h); return 1; } unsigned int f_getpic_(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1,unsigned char *tivar_str) { SCR_RECT rect; unsigned char bmp[LCD_SIZE+4],*base; unsigned int len,i; short bmp_size; HANDLE handle; rect.xy.x0=x0; rect.xy.y0=y0; rect.xy.x1=x1; rect.xy.y1=y1; bmp_size=BitmapSize (&rect); BitmapGet (&rect, bmp); handle = CreateFile2(tivar_str); if(!handle) { printf("\nMemory error in getpic()."); ngetchx(); exit(2); } for(i=0;i HeapSize(handle) - 10) return; *(unsigned short*)base = len-1; CloseFile_type (handle,PIC_TAG); return bmp_size+3; } char f_prettyxy_(int x,int y, unsigned char *expr_str) //245 { char rtn; TRY push_parse_text (expr_str); NG_rationalESI (top_estack); //is_wind=1; Print2DExpr (Parse2DExpr (top_estack, FALSE), &wind, x, y); rtn=1; ONERR rtn=0; ENDTRY return rtn; } char f_getwbt_(unsigned char *expr_str,long *ww,long *bb,long *tt) //246 { short wp,bp,tp; char rtn; TRY push_parse_text (expr_str); Parse2DExpr (top_estack, FALSE); Parms2D (top_estack, &wp, &bp, &tp); *ww=wp; *bb=bp; *tt=tp; rtn=1; ONERR rtn= 0; ENDTRY return rtn; } void f_drawstr_(int x,int y,unsigned char *str, char gmode) //75 { /*ARG1=(long)x; ARG2=(long)y; ARG3=(long)str; ARG4=(long)gmode; execasm(75);*/ switch(gmode) { case 2: //xor DrawStr(x,y,str,A_XOR); return; break; case 3: //AND DrawStr(x,y,str,A_AND); return; break; case 0: //or DrawStr(x,y,str,A_NORMAL); return; break; case 1: //blank DrawStr(x,y,str,A_REVERSE); return; break; } DrawStr(x,y,str,gmode); } void f_lscroll_(unsigned char nbline,unsigned char *lcdad) //90 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(90);*/ register short* tmpbuffer; register short tmplines; tmpbuffer=lcdad; tmplines=nbline; tmpbuffer += (tmplines<<4) - (tmplines); tmplines--; asm volatile ("0:\n" "lea -10(%0),%0\n" "lsl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)\n" "roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)\n" "dbf %1,0b" : "=a" (tmpbuffer), "=d" (tmplines) : "0" (tmpbuffer), "1" (tmplines)); } void f_rscroll_(unsigned char nbline,unsigned char *lcdad) //91 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(91);*/ register short* tmpbuffer; register short tmplines; tmpbuffer=lcdad; tmplines=nbline; tmplines--; asm volatile ("0:\n" "lsr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+\n" "roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+\n" "lea 10(%0),%0\n" "dbf %1,0b" : "=a" (tmpbuffer), "=d" (tmplines) : "0" (tmpbuffer), "1" (tmplines)); } void f_uscroll_(unsigned char nbline,unsigned char *lcdad) //92 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(92);*/ //extgraph vars register short tmplines; register short* dest; register short* src; dest=lcdad; src=dest+15; tmplines=nbline; tmplines -= 2; asm volatile ("0:\n" "move.l (%0)+,(%1)+;move.l (%0)+,(%1)+;move.l (%0)+,(%1)+\n" "move.l (%0)+,(%1)+;move.l (%0)+,(%1)+\n" "lea 10(%0),%0\n" "lea 10(%1),%1\n" "dbf %2,0b\n" "clr.l (%1)+;clr.l (%1)+;clr.l (%1)+;clr.l (%1)+;clr.l (%1)+" : "=a" (src), "=a" (dest), "=d" (tmplines) : "0" (src), "1" (dest), "2" (tmplines)); } void f_bscroll_(unsigned char nbline,unsigned char *lcdad) //93 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(93);*/ register short* dest; register short* src; register short tmplines; dest=lcdad; src=dest+15; tmplines=nbline; dest += (tmplines<<4) - (tmplines) - 5; src = dest - 15; tmplines -= 2; asm volatile ("0:\n" "move.l -(%0),-(%1);move.l -(%0),-(%1);move.l -(%0),-(%1)\n" "move.l -(%0),-(%1);move.l -(%0),-(%1)\n" "lea -10(%0),%0\n" "lea -10(%1),%1\n" "dbf %2,0b\n" "clr.l -(%1);clr.l -(%1);clr.l -(%1);clr.l -(%1);clr.l -(%1)" : "=a" (src), "=a" (dest), "=d" (tmplines) : "0" (src), "1" (dest), "2" (tmplines)); } void f_lscroll2_(unsigned char nbline,unsigned char *lcdad) //103 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(103);*/ register short* tmpbuffer; register short tmplines; tmpbuffer=lcdad; tmplines=nbline; tmpbuffer += (tmplines<<4) - (tmplines); tmplines--; asm volatile ("0:\n" "lsl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)\n" "roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)\n" "roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0);roxl.w -(%0)\n" "dbf %1,0b" : "=a" (tmpbuffer), "=d" (tmplines) : "0" (tmpbuffer), "1" (tmplines)); } void f_rscroll2_(unsigned char nbline,unsigned char *lcdad) //104 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(104);*/ register short* tmpbuffer; register short tmplines; tmpbuffer=lcdad; tmplines=nbline; tmplines--; asm volatile ("0:\n" "lsr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+\n" "roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+\n" "roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+;roxr.w (%0)+\n" "dbf %1,0b" : "=a" (tmpbuffer), "=d" (tmplines) : "0" (tmpbuffer), "1" (tmplines)); } void f_uscroll2_(unsigned char nbline,unsigned char *lcdad) //105 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(105);*/ register short* dest; register short* src; register short tmplines; dest=lcdad; src=dest+15; tmplines=nbline; tmplines -= 2; asm volatile ("0:\n" "move.l (%0)+,(%1)+;move.l (%0)+,(%1)+;move.l (%0)+,(%1)+\n" "move.l (%0)+,(%1)+;move.l (%0)+,(%1)+;move.l (%0)+,(%1)+\n" "move.l (%0)+,(%1)+;move.w (%0)+,(%1)+\n" "dbf %2,0b\n" "clr.l (%1)+;clr.l (%1)+;clr.l (%1)+;clr.l (%1)+\n" "clr.l (%1)+;clr.l (%1)+;clr.l (%1)+;clr.w (%1)+" : "=a" (src), "=a" (dest), "=d" (tmplines) : "0" (src), "1" (dest), "2" (tmplines)); } void f_bscroll2_(unsigned char nbline,unsigned char *lcdad) //106 { /*ARG1=nbline; ARG2=(long)lcdad; execasm(106);*/ register short* dest; register short* src; register short tmplines; dest=lcdad; src=dest+15; tmplines=nbline; dest += (tmplines<<4) - (tmplines); src = dest - 15; tmplines -= 2; asm volatile ("0:\n" "move.l -(%0),-(%1);move.l -(%0),-(%1);move.l -(%0),-(%1)\n" "move.l -(%0),-(%1);move.l -(%0),-(%1);move.l -(%0),-(%1)\n" "move.l -(%0),-(%1);move.w -(%0),-(%1)\n" "dbf %2,0b\n" "clr.l -(%1);clr.l -(%1);clr.l -(%1);clr.l -(%1)\n" "clr.l -(%1);clr.l -(%1);clr.l -(%1);clr.w -(%1)" : "=a" (src), "=a" (dest), "=d" (tmplines) : "0" (src), "1" (dest), "2" (tmplines)); } void f_sprt8_(int x,int y,int h,unsigned char *sprt,unsigned char gmode,unsigned char *lcdad) //43 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprt; ARG5=(long)gmode; ARG6=(long)lcdad; execasm(43);*/ switch(gmode) { case 2: //xor ClipSprite8_XOR_R(x,y,h,sprt,lcdad); return; break; case 3: //AND ClipSprite8_AND_R(x,y,h,sprt,lcdad); return; break; case 0: //or ClipSprite8_OR_R(x,y,h,sprt,lcdad); return; break; case 1: //rplc blank ClipSprite8_RPLC_R(x,y,h,sprt,lcdad); return; break; } } void f_sprt16_(int x,int y,int h,unsigned int *sprt,unsigned char gmode,unsigned char *lcdad) //44 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprt; ARG5=(long)gmode; ARG6=(long)lcdad; execasm(44);*/ switch(gmode) { case 2: //xor ClipSprite16_XOR_R(x,y,h,sprt,lcdad); return; break; case 3: //AND ClipSprite16_AND_R(x,y,h,sprt,lcdad); return; break; case 0: //or ClipSprite16_OR_R(x,y,h,sprt,lcdad); return; break; case 1: //rplc blank ClipSprite16_RPLC_R(x,y,h,sprt,lcdad); return; break; } return 0; } void f_sprt32_(int x,int y,int h,unsigned long *sprt,unsigned char gmode,unsigned char *lcdad) //53 { /*ARG1=x; ARG2=y; ARG3=h; ARG4=(long)sprt; ARG5=(long)gmode; ARG6=(long)lcdad; execasm(53);*/ switch(gmode) { case 2: //xor ClipSprite32_XOR_R(x,y,h,sprt,lcdad); return; break; case 3: //AND ClipSprite32_AND_R(x,y,h,sprt,lcdad); return; break; case 0: //or ClipSprite32_OR_R(x,y,h,sprt,lcdad); return; break; case 1: //rplc blank ClipSprite32_RPLC_R(x,y,h,sprt,lcdad); return; break; } return 0; } void f_dline_(int x0,int y0,int x1,int y1,unsigned char gmode,unsigned char *lcdad) //40 { /*ARG1=x0; ARG2=y0; ARG3=x1; ARG4=y1; ARG5=(long)gmode; ARG6=(long)lcdad; execasm(40);*/ switch(gmode) { case 0: //FastLine_Draw_R(lcdad,xa,ya,xb,yb); return; FastDrawLine(lcdad,x0,y0,x1,y1,1); return; break; case 1: FastDrawLine(lcdad,x0,y0,x1,y1,0); return; break; case 2: FastDrawLine(lcdad,x0,y0,x1,y1,2); return; break; } } //f_dmline_(%s,%s,%s,gmode,lcdad)",buff1,buff2,buff3); void f_dmline_(unsigned char *xl,unsigned char *yl,unsigned int nbpoints,unsigned char gmode,unsigned char *lcdad) //40 { /*ARG1=(long)xl; ARG2=(long)yl; ARG3=nbpoints; ARG4=(long)gmode; ARG5=(long)lcdad; execasm(40);*/ unsigned char *xa,*ya,xi,yi,xf,yf,gmode2; unsigned int ii; xa=xl; ya=yl; xi=xa[0]; yi=ya[0]; gmode2=0; switch(gmode) { case 0: gmode2=1; break; case 1: gmode2=0; break; case 2: gmode2=2; break; } for(ii=1;ii=80) { free(names); printf("\nfiles():number of files in %s>=80",rep_str); ngetchx(); return 0; } //strcpy (names + (counter-1)*10, SymPtr->name); strcpy (names + mu((counter-1),10), SymPtr->name); SymPtr = SymFindNext (); } strcpy (names + mu((counter),10), "0"); //A termination tag, not necessary because this function returns the number of fille contained in the rep names=realloc(names, mu((counter+1),10)); *dest_file_ptr=names; return counter; }