- #define _CRT_SECURE_NO_WARNINGS 
- #include <stdlib.h> 
- #include <stdio.h> 
- #include <memory.h> 
- #include <string.h> 
- #include <sstream> 
- #include <iostream> 
- #include "ArgsParser.h" 
-   
-   
-   
- struct { 
-         unsigned char* data; 
-         int offset; 
-         int bpp; 
-         int wdt,hgt; 
-         bool flip; 
- } BMP; 
-   
- unsigned char mem[65536]; 
-   
- FILE *fileBatMLZ; 
- FILE *fileBatSCL; 
-   
- unsigned char *tileData; 
-   
- int fileCnt; 
-   
- struct { 
-         int tile; 
-         int wdt,hgt; 
- } IMGLIST[256]; 
-   
- ArgsParser args; 
- //#define STARTUP_ADR   0xe000 
- //#define STACK_SIZE    0x0400 
-   
- //#define MUS_COUNT     0x49fe 
- //#define SMP_COUNT     0x49ff 
- //#define MUSLIST_ADR   0x4a00  //3*256 
- //#define SMPLIST_ADR   0x4d00  //4*256 
- //#define SFX_ADR               0x5100 
-   
- //#define PAL_ADR               0x0000 
- //#define IMGLIST_ADR   0x1000 
-   
- //#define TSPR_ADR      0xfa00 
-   
- //ЇшъёшЁютрээ√х эюьхЁр ёЄЁрэшЎ 
-   
- //#define SPRBUF_PAGE   8       //4 ёЄЁрэшЎ√ 
- //#define SPRTBL_PAGE   6       //ярЁрьхЄЁ√ ёяЁрщЄют 
-   
- //#define CC_PAGE0      12      //ъюф 
- //#define CC_PAGE1      13 
- //#define CC_PAGE2      14 
- //#define CC_PAGE3      15 
-   
- //#define SND_PAGE      0       //ъюф чтєър ш ¤ЇЇхъЄ√ 
- //#define PAL_PAGE      4       //ярышЄЁ√ 
-   
- //#define GFX_PAGE      16      //уЁрЇшър эрўшэрхЄё  ё ЇшъёшЁютрээющ ёЄЁрэшЎ√ 
- int globalPageNum; 
- #define PACK_PIXELS(col1,col2) (((col1)&7)|(((col1)&8)<<3)|(((col2)&7)<<3)|(((col2)&8)<<4)) 
-   
- int stringToInt(char* str) { 
-         if(strchr(str,'x')!=NULL) { 
-                 unsigned int x;    
-                 std::stringstream ss; 
-                 ss << std::hex << str; 
-                 ss >> x; 
-                 return x; 
-         } 
-         return atoi(str); 
- } 
-   
-   
- void clear_mem(void) 
- { 
-         memset(mem,0,65536); 
- } 
-   
-   
-   
- int get_hex(char n) 
- { 
-         if(n>='0'&&n<='9') return n-'0'; 
-         if(n>='a'&&n<='f') return n-'a'+10; 
-         if(n>='A'&&n<='F') return n-'A'+10; 
-   
-         return -1; 
- } 
-   
-   
-   
- int get_hex_byte(char *str) 
- { 
-         return (get_hex(str[0])<<4)+get_hex(str[1]); 
- } 
-   
- //ўЄхэшх Intel HEX Їрщыр т ярь Є№, схч тё ъшї яЁютхЁюъ 
-   
- int load_ihx(const char* name) 
- { 
-         FILE *file; 
-         char line[1024]; 
-         int i,off,ptr,len,size; 
-   
-         file=fopen(name,"rt"); 
-   
-         if(!file) return 0; 
-   
-         size=0; 
-   
-         while(fgets(line,sizeof(line),file)!=NULL) 
-         { 
-                 len=get_hex_byte(&line[1]); 
-                 ptr=(get_hex_byte(&line[3])<<8)+get_hex_byte(&line[5]); 
-                 off=9; 
-   
-                 for(i=0;i<len;i++) 
-                 { 
-                         mem[ptr++]=get_hex_byte(&line[off]); 
-                         off+=2; 
-                 } 
-                  
-                 if(ptr>size) size=ptr; 
-         } 
-   
-         fclose(file); 
-   
-         return size; 
- } 
-   
-   
-   
- bool load_bin(int adr,const char* name) 
- { 
-         FILE *file; 
-         int size; 
-   
-         file=fopen(name,"rb"); 
-   
-         if(!file) return false; 
-   
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         fseek(file,0,SEEK_SET); 
-   
-         if(adr+size>0x10000) 
-         { 
-                 fclose(file); 
-                 return false; 
-         } 
-   
-         fread(mem+adr,size,1,file); 
-         fclose(file); 
-   
-         return true; 
- } 
- int load_bin2(int adr,const char* name) 
- { 
-         FILE *file; 
-         int size; 
-   
-         file=fopen(name,"rb"); 
-   
-         if(!file) return false; 
-   
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         fseek(file,0,SEEK_SET); 
-   
-         if(adr+size>0x10000) 
-         { 
-                 fclose(file); 
-                 return 0; 
-         } 
-   
-         fread(mem+adr,size,1,file); 
-         fclose(file); 
-   
-         return size; 
- } 
-   
-   
- //яЁютхЁър ёЄЁрэшЎ√ эр эрышўшх эхэєыхт√ї фрээ√ї 
-   
- bool page_is_empty(int page) 
- { 
-         int i; 
-   
-         page<<=14; 
-   
-         for(i=0;i<16384;i++) 
-         { 
-                 if(mem[i+page]) return false; 
-         } 
-   
-         return true; 
- } 
-   
-   
-   
- bool page_save(int slot,int page, char* pageName, int filenum, FILE * fileOutAsm) 
- { 
-         char name[1024]; 
-         FILE *file; 
-         if(stringToInt(args.getArg(ALT_PAGE_NUMERING))!=0) page=globalPageNum; 
-         sprintf(name,"%s%d",pageName,filenum); 
-         fprintf(fileOutAsm,"%s = %d\n",name,page); 
-         //printf("%s = %d\n",name,page); 
-   
-         if (stringToInt(args.getArg(ALT_PAGE_NUMERING))==0){ 
-                 fprintf(fileBatMLZ,"megalz page_%i.bin >nul\n",page); 
-                 fprintf(fileBatMLZ,"call _getsize.bat page_%i.bin.mlz %i\n",page,page); 
-                 fprintf(fileBatSCL,"trdtool + disk.scl page_%i.bin.mlz\n",page); 
-                 sprintf(name,"_temp_/page_%i.bin",page); 
-         } else { 
-                 fprintf(fileBatMLZ,"megalz page_%03i.bin >nul\n",page); 
-                 fprintf(fileBatMLZ,"call _getsize.bat page_%03i.bin.mlz %i\n",page,page); 
-                 fprintf(fileBatSCL,"trdtool + disk.scl page_%03i.bin.mlz\n",page); 
-                 sprintf(name,"_temp_/page_%03i.bin",page); 
-         } 
-   
-         file=fopen(name,"wb"); 
-   
-         if(!file) return false; 
-   
-         fwrite(&mem[slot<<14],16384,1,file); 
-         fclose(file); 
-   
-         fileCnt++; 
-         globalPageNum++; 
-         return true; 
- } 
-   
- bool store_bin(int size, int number) 
- { 
-         char name[1024]; 
-         sprintf(name,"_temp_/code%d.bin",number); 
-         FILE *file; 
-         file=fopen(name,"wb"); 
-   
-         if(!file) return false; 
-   
-         fwrite(&mem,size,1,file); 
-         fclose(file); 
-   
-         return true; 
- } 
-   
- void error(void) 
- { 
-         fclose(fileBatMLZ); 
-         fclose(fileBatSCL); 
-   
-         if(tileData) free(tileData); 
- } 
-   
-   
-   
- bool load_palette(const char* filename,unsigned char* dst) 
- { 
-         FILE *file; 
-         unsigned char bmp[256]; 
-         int i,pp,size,bpp,r,g,b; 
-   
-         file=fopen(filename,"rb"); 
-   
-         if(!file) return false; 
-   
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         if(size>256) size=256; 
-         fseek(file,0,SEEK_SET); 
-         fread(bmp,size,1,file); 
-         fclose(file); 
-          
-         if(bmp[0]!='B'||bmp[1]!='M') 
-         { 
-                 printf("ERR: Not BMP file format (%s)\n",filename); 
-                 return false; 
-         } 
-          
-         bpp=bmp[28]+(bmp[29]<<8); 
-          
-         if(bpp!=4&&bpp!=8) 
-         { 
-                 printf("ERR: Only uncompressed 16 and 256 colors BMP supported (%s)\n",filename); 
-                 return false; 
-         } 
-   
-         pp=54; 
-   
-         for(i=0;i<16;i++) 
-         { 
-                 b=bmp[pp++]>>6; 
-                 g=bmp[pp++]>>6; 
-                 r=bmp[pp++]>>6; 
-   
-                 dst[i]=(b<<4)|(g<<2)|r; 
-                 pp++; 
-         } 
-   
-         return true; 
- } 
-   
-   
-   
- inline void convert_tile(unsigned char* tile,int tx,int ty) 
- { 
-         int i,j,pp,pd; 
-         unsigned char chr[8][8]; 
-          
-         switch(BMP.bpp) 
-         { 
-         case 4: 
-                 { 
-                         pd=BMP.flip?BMP.offset+(ty<<3)*(BMP.wdt>>1)+(tx<<2):BMP.offset+(BMP.hgt-1-(ty<<3))*(BMP.wdt>>1)+(tx<<2); 
-                          
-                         for(i=0;i<8;++i) 
-                         { 
-                                 pp=pd; 
-   
-                                 for(j=0;j<8;j+=2) 
-                                 { 
-                                         chr[i][j+0]=BMP.data[pp]>>4; 
-                                         chr[i][j+1]=BMP.data[pp]&15; 
-                                         ++pp; 
-                                 } 
-   
-                                 pd+=BMP.flip?(BMP.wdt>>1):0-(BMP.wdt>>1); 
-                         } 
-                 } 
-                 break; 
-   
-         case 8: 
-                 { 
-                         pd=BMP.flip?BMP.offset+(ty<<3)*BMP.wdt+(tx<<3):BMP.offset+(BMP.hgt-1-(ty<<3))*BMP.wdt+(tx<<3); 
-                          
-                         for(i=0;i<8;++i) 
-                         { 
-                                 pp=pd; 
-   
-                                 for(j=0;j<8;++j) 
-                                 { 
-                                         chr[i][j]=BMP.data[pp++]&15; 
-                                 } 
-   
-                                 pd+=BMP.flip?BMP.wdt:0-BMP.wdt; 
-                         } 
-                 } 
-                 break; 
-         } 
-   
-         pp=0; 
-   
-         for(i=0;i<8;++i) 
-         { 
-                 tile[pp+0]=PACK_PIXELS(chr[i][0],chr[i][1]); 
-                 tile[pp+3]=PACK_PIXELS(chr[i][2],chr[i][3]); 
-                 tile[pp+1]=PACK_PIXELS(chr[i][4],chr[i][5]); 
-                 tile[pp+2]=PACK_PIXELS(chr[i][6],chr[i][7]); 
-                 pp+=4; 
-         } 
- } 
-   
-   
-   
- unsigned int read_dword(unsigned char* data) 
- { 
-         return data[0]+(data[1]<<8)+(data[2]<<16)+(data[3]<<24); 
- } 
-   
-   
-   
- unsigned int read_word(unsigned char* data) 
- { 
-         return data[0]+(data[1]<<8); 
- } 
-   
-   
-   
- unsigned char* load_graphics(const char* filename,int &tilecnt,int &tsizex,int &tsizey) 
- { 
-         FILE *file; 
-         int i,j,ptr,rle,size,tssize; 
-         unsigned char* tileset; 
-   
-         file=fopen(filename,"rb"); 
-   
-         if(!file) return NULL; 
-   
-         fseek(file,0,SEEK_END); 
-         size=ftell(file); 
-         fseek(file,0,SEEK_SET); 
-         BMP.data=(unsigned char*)malloc(size); 
-         fread(BMP.data,size,1,file); 
-         fclose(file); 
-          
-         if(BMP.data[0]!='B'||BMP.data[1]!='M') 
-         { 
-                 printf("ERR: Not BMP file format (%s)\n",filename); 
-                 return NULL; 
-         } 
-          
-         BMP.offset=read_dword(&BMP.data[10]); 
-         BMP.wdt=read_dword(&BMP.data[18]); 
-         BMP.hgt=read_dword(&BMP.data[22]); 
-         BMP.bpp=read_word (&BMP.data[28]); 
-         rle=read_dword(&BMP.data[30]); 
-          
-         if((BMP.wdt&7)||(BMP.hgt&7)) 
-         { 
-                 printf("ERR: Width and height should be 8px aligned (%s)\n",filename); 
-                 return NULL; 
-         } 
-   
-         if(rle!=0||(BMP.bpp!=4&&BMP.bpp!=8)) 
-         { 
-                 printf("ERR: Only uncompressed 16 and 256 colors BMP supported (%s)\n",filename); 
-                 return NULL; 
-         } 
-   
-         tsizex=BMP.wdt>>3; 
-         tsizey=BMP.hgt>>3; 
-          
-         BMP.flip=(BMP.hgt>0)?false:true; 
-         if(BMP.flip) BMP.hgt=0-BMP.hgt; 
-          
-         tilecnt=(BMP.wdt>>3)*(BMP.hgt>>3); 
-         tssize=tilecnt<<5; 
-         tileset=(unsigned char*)malloc(tssize); 
-          
-         ptr=0; 
-          
-         for(i=0;i<tsizey;i++) 
-         { 
-                 for(j=0;j<tsizex;j++) 
-                 { 
-                         convert_tile(&tileset[ptr],j,i); 
-                         ptr+=32; 
-                 } 
-         } 
-   
-         return tileset; 
- } 
-   
-   
-   
- void trim_str(char* line) 
- { 
-         unsigned int i; 
-   
-         for(i=0;i<strlen(line);i++) 
-         { 
-                 if(line[i]<0x20) 
-                 { 
-                         line[i]=0; 
-                         break; 
-                 } 
-         } 
- } 
-   
-   
-   
- #include "makesprite.h" 
- #include "makesample.h" 
-   
-   
-   
- void main(int argc,char* argv[]) 
- { 
-         char cc_page[4]={stringToInt(args.getArg(CC_PAGE0)), 
-                 stringToInt(args.getArg(CC_PAGE1)), 
-                 stringToInt(args.getArg(CC_PAGE2)), 
-                 stringToInt(args.getArg(CC_PAGE3))}; 
-         FILE *list,*file; 
-         char line[1024]; 
-         unsigned char *data; 
-         int i,pp,off,ptr,size,size2,page,img_count; 
-         int mus_offset[256],mus_page[256]; 
-         int smp_offset[256],smp_page[256],smp_pitch[256]; 
-         int mus_count,mus_page_start,mus_pages,gfx_pages; 
-         int code_size,code_pages; 
-         int spr_page_start,spr_pages; 
-         int smp_page_start,smp_pages,smp_count; 
-         int tile_ptr,tile_cnt; 
-         int wdt,hgt,cnt,pitch; 
-         int pageNumCntr; 
-         globalPageNum=0; 
-         args.parse(argc,argv); 
-         if(argc>1) { 
-                 if(strstr(argv[1],"HELP")!=NULL) { 
-                         args.printHelp(); 
-                         return; 
-                 } 
-         } 
-   
-         if(stringToInt(args.getArg(ALT_PAGE_NUMERING))!=0) { 
-                 globalPageNum=stringToInt(args.getArg(ALT_PAGE_NUMERING)); 
-         } 
-         FILE *fileOutAsm; 
-         fileOutAsm=fopen("_temp_/pages.asm","wb"); 
-   
-         tileData=NULL; 
-         fileCnt=0; 
-   
-         fileBatMLZ=fopen("_temp_/compress.bat","wt"); 
-         fileBatSCL=fopen("_temp_/createscl.bat","wt"); 
-   
-         fprintf(fileBatMLZ,"PATH=..\\..\\evosdk\n"); 
-         fprintf(fileBatMLZ,"echo messageStr > filelist.asm\n"); 
-         fprintf(fileBatMLZ,"echo \tdb %%title%%,0 >> filelist.asm\n"); 
-         fprintf(fileBatMLZ,"echo fileList >> filelist.asm\n"); 
-   
-         fprintf(fileBatSCL,"trdtool # disk.scl\n"); 
-         fprintf(fileBatSCL,"trdtool + disk.scl boot.$b\n"); 
-   
-         atexit(error); 
-   
-         //уЁрЇшър шчюсЁрцхэшщ 
-          
-         clear_mem(); 
-   
-         list=fopen(args.getArg(IMAGE_LIST),"rt"); 
-   
-         if(!list) 
-         { 
-                 printf("Error: Image list is missing\n"); 
-                 exit(1); 
-         } 
-         cc_page[0]=stringToInt(args.getArg(CC_PAGE0)); 
-         cc_page[1]=stringToInt(args.getArg(CC_PAGE1)); 
-         cc_page[2]=stringToInt(args.getArg(CC_PAGE2)); 
-         cc_page[3]=stringToInt(args.getArg(CC_PAGE3)); 
-   
-         page=stringToInt(args.getArg(GFX_PAGE)); 
-         gfx_pages=0; 
-         ptr=0; 
-         img_count=0; 
-         tile_ptr=0; 
-   
-         while(fgets(line,sizeof(line),list)!=NULL) 
-         { 
-                 if(img_count==256) 
-                 { 
-                         printf("ERR: Too many images\n"); 
-                         exit(1); 
-                 } 
-   
-                 if(!memcmp(line,"rem",3)||!memcmp(line,":",1)) continue; 
-   
-                 trim_str(line); 
-   
-                 tileData=load_graphics(line,tile_cnt,wdt,hgt); 
-   
-                 if(!tileData) 
-                 { 
-                         printf("ERR: Can't open image (%s)\n",line); 
-                         exit(1); 
-                 } 
-   
-                 IMGLIST[img_count].tile=tile_ptr; 
-                 IMGLIST[img_count].wdt=wdt; 
-                 IMGLIST[img_count].hgt=hgt; 
-                 img_count++; 
-                 tile_ptr+=tile_cnt; 
-   
-                 off=0; 
-                 pageNumCntr=0; 
-                 for(i=0;i<tile_cnt;i++) 
-                 { 
-                         memcpy(&mem[ptr],&tileData[off],32); 
-                         ptr+=32; 
-                         off+=32; 
-   
-                         if(ptr>=16384) 
-                         { 
-                                 page_save(0,page,"graphicsData",pageNumCntr,fileOutAsm); 
-                                 pageNumCntr++; 
-                                 ptr=0; 
-                                 page++; 
-                                 gfx_pages++; 
-                         } 
-                 } 
-   
-                 //free(tileData); 
-                 //if(tileData) free(tileData); 
-   
-                 off+=16; 
-         } 
-          
-         if(ptr) 
-         { 
-                 page_save(0,page,"graphicsData",pageNumCntr,fileOutAsm); 
-                 gfx_pages++; 
-                 pageNumCntr++; 
-         } 
-   
-         fclose(list); 
-   
-         mus_page_start=off?page+1:page; 
-   
-         //ярышЄЁ√ ш ярЁрьхЄЁ√ шчюсЁрцхэшщ 
-   
-         clear_mem(); 
-         pageNumCntr=0; 
-         //list=fopen(argv[5],"rt"); 
-         list=fopen(args.getArg(PALETTE_LIST),"rt"); 
-   
-         if(!list) 
-         { 
-                 printf("Error: Palette list is missing\n"); 
-                 exit(1); 
-         } 
-   
-         //off=PAL_ADR; 
-         off=stringToInt(args.getArg(PAL_ADR)); 
-         cnt=0; 
-   
-         while(fgets(line,sizeof(line),list)!=NULL) 
-         { 
-                 if(cnt==256) 
-                 { 
-                         printf("ERR: Too many palettes\n"); 
-                         exit(1); 
-                 } 
-   
-                 if(!memcmp(line,"rem",3)||!memcmp(line,":",1)) continue; 
-   
-                 trim_str(line); 
-   
-                 if(!load_palette(line,&mem[off])) 
-                 { 
-                         printf("ERR: Can't load palette from image (%s)\n",line); 
-                         exit(1); 
-                 } 
-   
-                 off+=16; 
-                 cnt++; 
-         } 
-   
-         fclose(list); 
-   
-         //off=IMGLIST_ADR; 
-         off=stringToInt(args.getArg(IMGLIST_ADR)); 
-   
-         for(i=0;i<img_count;i++) 
-         { 
-                 mem[off++]=IMGLIST[i].tile&255; 
-                 mem[off++]=IMGLIST[i].tile>>8; 
-                 mem[off++]=IMGLIST[i].wdt; 
-                 mem[off++]=IMGLIST[i].hgt; 
-         } 
-   
-         page_save(0,stringToInt(args.getArg(PAL_PAGE)),"palletesData",pageNumCntr,fileOutAsm); 
-   
-         //фрээ√х ьєч√ъш 
-   
-         clear_mem(); 
-         pageNumCntr=0; 
-         //list=fopen(argv[4],"rt"); 
-         list=fopen(args.getArg(MUSIC_LIST),"rt"); 
-         if(!list) 
-         { 
-                 printf("Error: Music list is missing\n"); 
-                 exit(1); 
-         } 
-   
-         off=0; 
-         page=mus_page_start; 
-         mus_count=0; 
-         mus_pages=0; 
-   
-         while(fgets(line,sizeof(line),list)!=NULL) 
-         { 
-                 if(mus_count==256) 
-                 { 
-                         printf("ERR: Too many music files\n"); 
-                         exit(1); 
-                 } 
-   
-                 if(!memcmp(line,"rem",3)||!memcmp(line,":",1)) continue; 
-   
-                 trim_str(line); 
-   
-                 file=fopen(line,"rb"); 
-   
-                 if(!file) 
-                 { 
-                         printf("Error: Can't open file from music list (%s)\n",line); 
-                         fclose(list); 
-                         exit(1); 
-                 } 
-   
-                 fseek(file,0,SEEK_END); 
-                 size=ftell(file); 
-                 fseek(file,0,SEEK_SET); 
-   
-                 if(size>16384) 
-                 { 
-                         printf("Error: Music file is too large, 16384 bytes max (%s)\n",line); 
-                         fclose(list); 
-                         exit(1); 
-                 } 
-   
-                 data=(unsigned char*)malloc(size); 
-                 fread(data,size,1,file); 
-                 fclose(file); 
-   
-                 if(off+size>16384) 
-                 { 
-                         page_save(0,page,"musicData",pageNumCntr,fileOutAsm); 
-                         clear_mem(); 
-                         pageNumCntr++; 
-                         off=0; 
-                         ++page; 
-                         ++mus_pages; 
-                 } 
-   
-                 mus_offset[mus_count]=0x8000+off; 
-                 mus_page[mus_count]=page; 
-                 ++mus_count; 
-   
-                 memcpy(&mem[off],data,size); 
-                 off+=size; 
-   
-                 free(data); 
-         } 
-   
-         if(mus_count&&off) 
-         { 
-                 page_save(0,page,"musicData",pageNumCntr,fileOutAsm); 
-                 ++page; 
-                 ++mus_pages; 
-                 pageNumCntr++; 
-         } 
-   
-         fclose(list); 
-          
-         smp_page_start=page; 
-   
-         //фрээ√х ё¤ьяыют 
-   
-         clear_mem(); 
-         pageNumCntr=0; 
-         //list=fopen(argv[7],"rt"); 
-         list=fopen(args.getArg(SAMPLE_LIST),"rt"); 
-         if(!list) 
-         { 
-                 printf("Error: Sample list is missing\n"); 
-                 exit(1); 
-         } 
-   
-         off=0; 
-         page=smp_page_start; 
-         smp_count=0; 
-         smp_pages=0; 
-   
-         while(fgets(line,sizeof(line),list)!=NULL) 
-         { 
-                 if(smp_count==256) 
-                 { 
-                         printf("ERR: Too many samples\n"); 
-                         exit(1); 
-                 } 
-   
-                 if(!memcmp(line,"rem",3)||!memcmp(line,":",1)) continue; 
-   
-                 trim_str(line); 
-   
-                 data=load_wav(line,size,pitch); 
-   
-                 if(!data) 
-                 { 
-                         printf("Error: Can't open file from sample list (%s)\n",line); 
-                         fclose(list); 
-                         exit(1); 
-                 } 
-   
-                 smp_offset[smp_count]=off; 
-                 smp_page  [smp_count]=page^255; 
-                 smp_pitch [smp_count]=pitch; 
-   
-                 smp_count++; 
-                 pp=0; 
-   
-                 while(pp<size) 
-                 { 
-                         mem[off++]=data[pp++]; 
-   
-                         if(off>=16384) 
-                         { 
-                                 page_save(0,page,"sampleData",pageNumCntr,fileOutAsm); 
-                                 pageNumCntr++; 
-                                 clear_mem(); 
-                                 off=0; 
-                                 page++; 
-                                 smp_pages++; 
-                         } 
-                 } 
-   
-                 free(data); 
-         } 
-   
-         if(smp_count&&off) 
-         { 
-                 page_save(0,page,"sampleData",pageNumCntr,fileOutAsm); 
-                 page++; 
-                 pageNumCntr++; 
-                 smp_pages++; 
-         } 
-   
-         fclose(list); 
-   
-         spr_page_start=page; 
-   
-         //яыххЁ√ ьєч√ъш ш чтєър, фрээ√х чтєъют, ёяшёъш ё¤ьяыют ш ЄЁхъют 
-          
-         clear_mem(); 
-         pageNumCntr=0; 
-         //printf(" sound.bin\n"); 
-         //printf("=%s\n",args.getArg(SOUND_BIN_FILE)); 
-         if(!load_bin(0x4000,args.getArg(SOUND_BIN_FILE))) 
-         { 
-                 printf("Error: sound.bin not found\n"); 
-                 exit(1); 
-         } 
-         //printf(" sound.bin\n"); 
-         //if(strcmp(argv[3],"")) load_bin(SFX_ADR,argv[3]); 
-         if(strcmp(args.getArg(SFX_LIST),"")) load_bin(stringToInt(args.getArg(SFX_ADR)),args.getArg(SFX_LIST)); 
-         mem[stringToInt(args.getArg(MUS_COUNT))]=mus_count; 
-         off=stringToInt(args.getArg(MUSLIST_ADR)); 
-   
-         for(i=0;i<mus_count;i++) 
-         { 
-                 mem[off+0  ]=mus_offset[i]&255; 
-                 mem[off+256]=mus_offset[i]>>8; 
-                 mem[off+512]=mus_page  [i]; 
-                 ++off; 
-         } 
-   
-         mem[stringToInt(args.getArg(SMP_COUNT))]=smp_count; 
-         off=stringToInt(args.getArg(SMPLIST_ADR)); 
-   
-         for(i=0;i<smp_count;i++) 
-         { 
-                 mem[off+0  ]=smp_offset[i]&255; 
-                 mem[off+256]=smp_offset[i]>>8; 
-                 mem[off+512]=smp_page  [i]; 
-                 mem[off+768]=smp_pitch [i]; 
-                 ++off; 
-         } 
-         //printf(" sound.bin\n"); 
-         page_save(1,stringToInt(args.getArg(SND_PAGE)),"soundData",pageNumCntr,fileOutAsm); 
-          
-         //ёяЁрщЄ√ 
-         //printf(" Sprite\n"); 
-         pageNumCntr=0; 
-         //list=fopen(argv[8],"rt"); 
-         list=fopen(args.getArg(SPRITE_LIST),"rt"); 
-         if(!list) 
-         { 
-                 printf("Error: Sprite list is missing\n"); 
-                 exit(1); 
-         } 
-   
-         mkspr_init(spr_page_start); 
-   
-         spr_pages=0; 
-   
-         while(fgets(line,sizeof(line),list)!=NULL) 
-         { 
-                 if(cnt==256) 
-                 { 
-                         printf("ERR: Too many sprites\n"); 
-                         exit(1); 
-                 } 
-   
-                 if(!memcmp(line,"rem",3)||!memcmp(line,":",1)) continue; 
-   
-                 trim_str(line); 
-   
-                 i=mkspr_add(line,stringToInt(args.getArg(SPRITE_SLOT)),fileOutAsm,&pageNumCntr); 
-   
-                 if(i<0) { 
-                         //printf(" mazafaka %d\n",i); 
-                         exit(1); 
-                 } 
-   
-                 spr_pages=i-spr_page_start+1; 
-         } 
-   
-         if(mempos!=mem) { 
-                 page_save(stringToInt(args.getArg(SPRITE_SLOT)),sprpg,"spriteData",pageNumCntr,fileOutAsm); 
-                 pageNumCntr++; 
-         } 
-   
-         //ярЁрьхЄЁ√ ёяЁрщЄют 
-         pageNumCntr=0; 
-         if(spr_pages) 
-         { 
-                 memcpy(mem,tspraddr,16384); 
-                 page_save(stringToInt(args.getArg(SPRTBL_SLOT)),stringToInt(args.getArg(SPRTBL_PAGE)),"spriteTableData",pageNumCntr,fileOutAsm); 
-                 pageNumCntr++; 
-         } 
-   
-         //ъюф яЁюуЁрьь√ 
-   
-         clear_mem(); 
-          
-         //size=load_ihx(argv[1]); 
-         size=load_ihx(args.getArg(BINARY_FILE)); 
-         //printf("code size =%d",size); 
-         if(size>0) 
-         { 
-                 store_bin(size,0); 
-   
-                 //printf("Error: Can't load Intel HEX from file\n"); 
-                 //exit(1); 
-                 code_size=size; 
-                  
-                 if(code_size>=stringToInt(args.getArg(STARTUP_ADR))-stringToInt(args.getArg(STACK_SIZE))) 
-                 { 
-                         printf("Error: Out of memory, compiled code is too large\n"); 
-                         printf("code size: %d total space: %d\n",code_size,stringToInt(args.getArg(STARTUP_ADR))-stringToInt(args.getArg(STACK_SIZE))); 
-                         exit(1); 
-                 } 
-   
-                 //if(!load_bin(atoi(args.getArg("STARTUP_ADR")),argv[2])) 
-                 size2=load_bin2(stringToInt(args.getArg(STARTUP_ADR)),args.getArg(STARTUP_FILE)); 
-                 if(size2==0) 
-                 { 
-                         printf("Error: Can't load startup code\n"); 
-                         exit(1); 
-                 } 
-                 store_bin(size+size2,1); 
-                 code_pages=0; 
-                 pageNumCntr=0; 
-                 if (stringToInt(args.getArg(ALT_PAGE_NUMERING))==0){ 
-                         for(i=0;i<4;i++) 
-                         { 
-                                 if(!page_is_empty(i)) 
-                                 { 
-                                         page_save(i,cc_page[i],"codeData",pageNumCntr,fileOutAsm); 
-                                         code_pages++; 
-                                         pageNumCntr++; 
-                                 } 
-                         } 
-                 } 
-         } 
-         fprintf(fileOutAsm,"totalPages = %d\n",fileCnt); 
-         //чртхЁ°хэшх т√тюфр фрээ√ї фы  чруЁєчўшър 
-   
-         fprintf(fileBatMLZ,"echo \tdb 0,%i >>filelist.asm\n",stringToInt(args.getArg(CC_PAGE3))); 
-         fprintf(fileBatMLZ,"echo \tdw %i >>filelist.asm\n",stringToInt(args.getArg(STARTUP_ADR))); 
-         fprintf(fileBatMLZ,"echo progressStep >>filelist.asm\n"); 
-         fprintf(fileBatMLZ,"echo \tdw %i >> filelist.asm\n",32*256/fileCnt/2); 
-   
-         //шэЇюЁьрЎш  юс шёяюы№чютрэшш ярь Єш 
-   
-         if(spr_page_start+spr_pages>=192) 
-         { 
-                 printf("ERR: Too many RAM pages used (192)\n"); 
-                 exit(1); 
-         } 
-   
-         page=4/*code_pages*/+4/*sprbuf*/+mus_pages+smp_pages+gfx_pages+spr_pages+1+1+(spr_pages?1:0);//snd, pal, sprtbl 
-   
-         //printf("\nCompiled code size %i bytes (%i max, %i left)\n\n",code_size,stringToInt(args.getArg(STARTUP_ADR))-stringToInt(args.getArg(STACK_SIZE)),stringToInt(args.getArg(STARTUP_ADR))-stringToInt(args.getArg(STACK_SIZE))-code_size); 
-   
-         //printf("%i RAM pages (%iK) used:\n",page,page*16); 
-         /*printf("Code:\t\t\t%i,%i,%i,%i\n",stringToInt(args.getArg(CC_PAGE0)), 
-                 stringToInt(args.getArg(CC_PAGE1)), 
-                 stringToInt(args.getArg(CC_PAGE2)), 
-                 stringToInt(args.getArg(CC_PAGE3)));*/ 
-         /*printf("Sprites buffer:\t\t%i,%i,%i,%i\n",stringToInt(args.getArg(SPRBUF_PAGE)), 
-                 stringToInt(args.getArg(SPRBUF_PAGE))+1,stringToInt(args.getArg(SPRBUF_PAGE))+2,stringToInt(args.getArg(SPRBUF_PAGE))+3); 
-         printf("Graphics data:\t\t");*/ 
-         /*if(gfx_pages) 
-         { 
-                  
-                 for(i=0;i<gfx_pages;i++){ 
-                          
-                         printf("%i%c",stringToInt(args.getArg(GFX_PAGE))+i,i<gfx_pages-1?',':'\n'); 
-                 } 
-                  
-         } 
-         else 
-         { 
-                 printf("no data\n"); 
-         }*/ 
-         /*printf("Palettes and params:\t%i\n",stringToInt(args.getArg(PAL_PAGE))); 
-         printf("Sound code and sfx:\t%i\n",stringToInt(args.getArg(SND_PAGE))); 
-         printf("Music data:\t\t"); 
-         if(mus_pages) 
-         { 
-                 for(i=0;i<mus_pages;i++) printf("%i%c",mus_page_start+i,i<mus_pages-1?',':'\n'); 
-         } 
-         else 
-         { 
-                 printf("no data\n"); 
-         }*/ 
-         /*printf("Sample data:\t\t"); 
-         if(smp_pages) 
-         { 
-                 for(i=0;i<smp_pages;i++) printf("%i%c",smp_page_start+i,i<smp_pages-1?',':'\n'); 
-         } 
-         else 
-         { 
-                 printf("no data\n"); 
-         }*/ 
-         /*printf("Sprite data:\t\t"); 
-         if(spr_pages) 
-         { 
-                 for(i=0;i<spr_pages;i++) printf("%i%c",spr_page_start+i,i<spr_pages-1?',':'\n'); 
-                 printf("Sprite parameters:\t%i\n",stringToInt(args.getArg(SPRTBL_PAGE))); 
-         } 
-         else 
-         { 
-                 printf("no data\n"); 
-                 printf("Sprite parameters:\tno data\n"); 
-         }*/ 
-         //printf("Total count of files:\t%d",fileCnt); 
-         //printf("\n"); 
-   
-         //return 0; 
- }