#ifndef __ADDITIONS
#define __ADDITIONS
#include <put_get_mem_atm.h>
#define dospage 63
static u8 code_to_char[]={' ','z','x','c','v','a','s','d','f','g','q','w','e','r','t','1','2','3','4','5','0','9','8','7','6','p','o','i','u','y',' ','l','k','j','h',' ',' ','m','n','b'};
static u8 output_x;
static u8 output_y;
static u8 save_output_x;
static u8 pcharmask=0;
//┬√ўшёы хЄ ътрфЁрЄэ√щ ъюЁхэ№
unsigned int lsqrt(unsigned long arg)
{
static char count=16;
unsigned long res=0,tmp=0;
if(arg!=0){
if(!(arg&0xFF000000)){arg<<=8;count-=4;}
res=1;
while((tmp<1)&&(count)){
count--;
if(arg&0x80000000UL)tmp|=2;
if(arg&0x40000000UL)tmp|=1;
arg<<=2;
};
tmp--;
for(count;count;count--){
tmp<<=2;
res<<=1;
if(arg&0x80000000UL)tmp|=2;
if(arg&0x40000000UL)tmp|=1;
arg<<=2;
if( tmp>=((res<<1)|1)){
tmp-=((res<<1)|1);
res|=1;
}
}
}
return (unsigned int)res;
}
//╧ЁхюсЁрчєхЄ ўшёыю т ёЄЁюъє
void itoa(i16 val, u8* buf)
{
static u8 *p;
static u8 *firstdig;
static i8 temp;
static i8 digval;
static u8 a;
for(a=0;a<16;a++)buf[a]=0;
p = buf;
firstdig = p;
do {
digval = (unsigned) (val % 10);
val /= 10;
if (digval > 9)*p++ = (char) (digval - 10 + 'a');
else *p++ = (char) (digval + '0');
}
while (val > 0);
*p-- = '\0';
do
{
temp = *p;
*p = *firstdig;
*firstdig = temp;
--p;
++firstdig;
} while (firstdig < p);
}
//┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь X,Y
//─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
//pcharmask - єърч√трхЄ ёяюёюс Ёшёютъш ёшьтюыр.
// хёыш pcharmask=0 Єю ёшьтюы ЁшёєхЄё схч єўхЄр яЁючЁрўэюую ЎтхЄр
// хёыш pcharmask=1 Єю ёшьтюы ЁшёєхЄё ё ьрёъющ
void put_char_xy(u8 n, u8 x,u8 y,u8 pcharmask)
{
if(n>=' ')
{
if(pcharmask==0)draw_tile(x,y,n-' ');
else draw_tile_key(x,y,n-' ');
}
}
//┬√тюфшЄ эр ¤ъЁрэ ёшьтюы N яю ъююЁфшэрЄрь output_x ш output_y
//─юыцэр с√Є№ т√сЁрэр Єрщы-ърЁЄр ёю °ЁшЇЄюь
//╧Ёшьхэ хЄё т ЇєэъЎшш put_str
void put_char(u8 n)
{
if(n>=' ')
{
if(pcharmask==0)draw_tile(output_x,output_y,n-' ');
else draw_tile_key(output_x,output_y,n-' ');
}
++output_x;
if(output_x==39||n=='\n')
{
output_x=save_output_x;
++output_y;
if(output_y==24) output_y=1;
}
}
//┬√тюфшЄ ёЄЁюъє яю ъююЁфшэрЄрь output_x ш output_y
//┬√тюф тхф╕Єё °ЁшЇЄюь fnt, уфх fnt - эюьхЁ шчюсЁрцхэш
void put_str(u8* str,u8 fnt)
{
static u8 i;
select_image(fnt);
save_output_x=output_x;
while(1)
{
i=*str++;
if(!i) break;
else if(i=='\0') break;
else if(i=='^') break;
else put_char(i);
}
}
//┬ючтЁр∙рхЄ фышэє ёЄЁюъш
u16 strlen (u8 * str)
{
static u8 a,i;
a=0;
while(1)
{
i=*str++;
if(!i) break;
if(i=='\0') break;
if(i=='^') break;
a++;
}
return a;
}
//ёЁртэхэшх ёЄЁюъ
//┬ючтЁр∙ хЄ 1 хёыш ёЄЁюър 2 > ёЄЁюъш 1
//┬ючтЁр∙ хЄ -1 хёыш ёЄЁюър 1 > ёЄЁюъш 2
//┬ючтЁр∙ хЄ 0 хёыш ёЄЁюъш Ёртэ√
i8 strcmp(u8 *str1, u8 *str2)
{
static u8 a,l1,l2;
l1=strlen(str1);
l2=strlen(str2);
if(l1>l2) return -1;
else if(l1<l2) return 1;
else
{
for(a=0;a<l1;a++)
{
if(*(str1+a)<*(str2+a)) return 1;
if(*(str1+a)>*(str2+a)) return -1;
}
}
return 0;
}
//╧ЁютюфшЄ ъюэърЄшэрЎш■ ёЄЁюъ.
//╧Ёшёюхфшэ хЄ buf2 ъ buf1
void strcat(u8 *buf1,u8 *buf2)
{
static u16 a;
static u16 b;
static u8 *bb,flag;
static u8 i;
a=0;
bb=buf1;
while(1)
{
i=*bb++;
if(i=='^' || i==0) break;
else
{
a++;
}
}
bb=buf2;
b=0;
while(1)
{
i=*bb++;
if(!i || i=='^'||i=='\0') break;
else
{
*(buf1+a+b)=i;
b++;
}
}
*(buf1+a+b)=0;
}
//╬ст чър ЇєэъЎшш 3d13
//pg - ёЄЁрэшЎр ё ъюЄюЁющ сєфхЄ тхёЄшё№ юсьхэ фрээ√ьш
//operation - эюьхЁ юяхЁрЎшш
//blocks - ъюышўхёЄтю ёўшЄ√трхь√ї сыюъют
//sector - эрўры№э√щ ёхъЄюЁ ёўшЄ√трэш
//track - эрўры№эр фюЁюцър ёўшЄ√трэш
//begin_page - ёьх∙хэшх эр ёЄЁрэшЎх
void DOS(u8 pg, u8 operation,u8 blocks, u8 sector, u8 track, u16 begin_page) __naked
{
__asm
push ix
ld ix,#0
add ix,sp
ld a,4 (ix)
ex af,af
ld c,5 (ix)
ld b,6 (ix)
ld e,7 (ix)
ld d,8 (ix)
ld l,9 (ix)
ld h,10 (ix)
call #_DOS_3D13
pop ix
ret
__endasm;
}
//╟руЁєчър Їрщыр ё фшёър т ёЄЁрэшЎє ярь Єш/ т√уЁєчър ёЄЁрэшЎ√ т Їрщы (═ютщ Їрщы эх ёючфр╕Єё ,юэ єцх фюыцхэ с√Є№ эр фшёъх).
//filename - шь Їрщыр
//page - эюьхЁ ёЄЁрэшЎ√ ё ъюЄюЁющ сєфхЄ тёхёЄшё№ юсьхэ
//0 - ёюїЁрэхэшх эр фшёъ
//1 - чруЁєчър ё фшёър
// т ЇєэъЎшш шёяюы№чєхЄё defined чэрўхэшх dospage, ъюЄюЁюх єърч√трхЄ эр ёЄЁрэшЎє т ярь Єш т ъюЄюЁє■ єфхЄ тЁхьхээю
// чряшёрэю чэрўхэшх эєыхтющ фюЁюцъш
void load_file(u8 *filename,u8 page,u8 saveload)
{
static u8 buf[16];
static u8 a;
static u16 c;
vsync();
DOS(#0x7f-dospage,5,7,0,0,32768);//яЁюўЄхь эєыхтє■ фюЁюцъє
vsync();
buf[8]='^';
c=0;
while(strcmp(buf,filename)!=0 && c<1792)
{
for(a=0;a<16;a++)
{
buf[a]=get_mem(dospage,32768+a+c);
}
buf[8]='^';
c+=16;
}
vsync();
if(saveload==1)
{
DOS(#0x7f-page,5,buf[13],buf[14],buf[15],32768);
}
else
{
DOS(#0x7f-page,6,1,buf[14],buf[15],32768);
}
vsync();
}
#endif