#include <stdio.h>

#define		unshort		unsigned short
#define		unchar		unsigned char
/*#define	  FILE_NO	  18*/

FILE		*fpw0,*fpr0,*fpr1,*fpr2,*fpr3;

int		i,j,k,l,m,n,o,p,q,r,s,t,no,size;

unshort		pnl_data[32896];
unshort		unit_data[65536];
unshort		scr_data_0[16384];
unshort		scr_data_1[16384];
unshort		scr_data_2[16384];
unshort		scr_data_3[16384];
unshort		scr_data_4[16384];
unshort		scr_data_5[16384];
unshort		scr_data_6[16384];
unshort		scr_data_7[16384];
unshort		buf_data[32768];
unshort		buf_data_1[32768];

char		READ_FILE_NAME_COM[256][100];
char		READ_FILE_NAME[256][100];

main()
{
	if(( fpr0 = fopen( "pnl1.TBL","r" )) == NULL ){
		printf( "pnl1.TBL not open \n" );
		exit(1);
	}

/*	for( i=0;i<FILE_NO;i++ ){*/

	size=0;

	while( fgets( &READ_FILE_NAME_COM[size][0],70,fpr0 ) != NULL ){
		for( l=0;l<100;l++ ) READ_FILE_NAME[size][l]='\0';
		strcpy( &READ_FILE_NAME[size][0],&READ_FILE_NAME_COM[size][0] );
		for( l=0;l<100;l++ ) if( READ_FILE_NAME[size][l] == 0x0a ) READ_FILE_NAME[size][l]='\0';
		size++;
	}

	fclose( fpr0 );

	no=0;

	if(( fpw0 = fopen( "../asm_sy/sy_unit.asm","w" )) == NULL ){
		printf( "sy_unit.asm file not found\n" );
		exit(1);
	}

	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\ttitle name\t: mchip game\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\tproccess\t: game unit data\t\t\t\t*\n" );
	fprintf( fpw0,";*\tfile name\t: sy_unit\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";\n;\n;\n;\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,";-\t\tglobal symbol\t\t\t\t\t\t-\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,"\t\tGLB\tUNDTADD,UNDATA\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\tdata start\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";\n;\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,";-\t\tunit data address\t\t\t\t\t-\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,"\t\tORG\t078000H\n;\n;\n\t\tEXTEND\n;\n;\n" );
	fprintf( fpw0,"UNDTADD\t\tEQU\t$\n" );

	for( i=0;i<size;i++ ){

		fprintf( fpw0,"\t\tWORD\tUNITD%02X-UNDATA\t\t;[%02X]\n",i,i );
	}

	fprintf( fpw0,";\n;\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,";-\t\tunit data\t\t\t\t\t\t-\n" );
	fprintf( fpw0,";------------------------------------------------------------------------\n" );
	fprintf( fpw0,"\t\tORG\t078200H\n;\n;\n" );
	fprintf( fpw0,"UNDATA\t\tEQU\t$\n" );

	for( k=0;k<size;k++ ){

		j=0;

		if(( fpr0 = fopen( &READ_FILE_NAME[k][0],"r" )) == NULL ){
			printf( "%s not found\n",&READ_FILE_NAME[k][0] );
			exit(1);
		}

		while(( fread( pnl_data,sizeof(unshort),32896,fpr0 )) == NULL ){
			printf( "read error\n" );
			exit(1);
		}

		fclose( fpr0 );

		fprintf( fpw0,"UNITD%02X\t\tEQU\t$\n",k );

/*		for( i=128;pnl_data[i]!=0x0fff;i++ ){*/
		for( i=128;pnl_data[i]!=0x13ef;i++ ){
			fprintf( fpw0,"\t\tWORD\t%05XH\t\t; [%02X]\n",pnl_data[i],j );
			unit_data[no] = pnl_data[i];
			j++;
			no++;
		}

		fprintf( fpw0,";\n" );

		for( i=j;i<256;i++ ){
			unit_data[no] = 0;
			no++;
		}

	}

	fprintf( fpw0,";\n;\n;\n;\n\t\tEND\n" );

	fclose( fpw0 );

	if(( fpr0 = fopen( "bg1-yuki.SCR","r" )) == NULL ){
		printf( "bg1-yuki.SCR file not found\n" );
		exit(1);
	}

	if(( fpr1 = fopen( "bg1-room2.SCR","r" )) == NULL ){
		printf( "bg1-room2.SCR file not found\n" );
		exit(1);
	}

	if(( fpr2 = fopen( "bg1-2-mizu.SCR","r" )) == NULL ){
		printf( "bg1-2-mizu.SCR file not found\n" );
		exit(1);
	}

	if(( fpr3 = fopen( "bg1-room1.SCR","r" )) == NULL ){
		printf( "bg1-room1.SCR file not found\n" );
		exit(1);
	}

	if(( fpw0 = fopen( "buff3.dat","w" )) == NULL ){
		printf( "buff2.dat file not found\n" );
		exit(1);
	}

	while(( fread( scr_data_0,sizeof(unshort),16384,fpr0 )) == NULL ){
		printf( "read error\n" );
		exit(1);
	}

	while(( fread( scr_data_1,sizeof(unshort),16384,fpr1 )) == NULL ){
		printf( "read error\n" );
		exit(1);
	}

	while(( fread( scr_data_4,sizeof(unshort),16384,fpr2 )) == NULL ){
		printf( "read error\n" );
		exit(1);
	}

	while(( fread( scr_data_6,sizeof(unshort),16384,fpr3 )) == NULL ){
		printf( "read error\n" );
		exit(1);
	}

	make_screen( scr_data_0,scr_data_1,scr_data_2,scr_data_3,scr_data_4,scr_data_5,scr_data_6,scr_data_7 );

	l=0;

	for( i=0;i<0x1f0;i++ ){
		if( i != 0 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x200;

	for( i=0x400;i<0x5f0;i++ ){
		if( i != 0x400 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x1000;

	for( i=0x200;i<0x3f0;i++ ){
		if( i != 0x200 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x1200;

	for( i=0x600;i<0x7f0;i++ ){
		if( i != 0x600 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x2000;

	for( i=0x800;i<0x9f0;i++ ){
		if( i != 0x800 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x2200;

	for( i=0xc00;i<0xdf0;i++ ){
		if( i != 0xc00 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x3000;

	for( i=0xa00;i<0xbf0;i++ ){
		if( i != 0xa00 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	l=0x3200;

	for( i=0xe00;i<0xff0;i++ ){
		if( i != 0xe00 ){
			if(( i & 0x0f ) == 0 ){
				i+=0x10;
			}
		}
		m=0;n=0;o=0;p=0;q=0;r=0;s=0;t=0;

		for( k=0;m+n+o+p+q+r+s+t!=8;k++ ){
			if( m == 0 ){
				if( scr_data_2[i] == unit_data[k] ){
					buf_data[l]=k;
					m=1;
				}
			}
			if( n == 0 ){
				if( scr_data_3[i] == unit_data[k] ){
					buf_data[l+0x400]=k;
					n=1;
				}
			}
			if( q == 0 ){
				if( scr_data_5[i] == unit_data[k] ){
					buf_data[l+0x800]=k;
					q=1;
				}
			}
			if( s == 0 ){
				if( scr_data_7[i] == unit_data[k] ){
					buf_data[l+0xc00]=k;
					s=1;
				}
			}
			if( o == 0 ){
				if( scr_data_2[i+0x10] == unit_data[k] ){
					buf_data[l+0x100]=k;
					o=1;
				}
			}
			if( p == 0 ){
				if( scr_data_3[i+0x10] == unit_data[k] ){
					buf_data[l+0x500]=k;
					p=1;
				}
			}
			if( r == 0 ){
				if( scr_data_5[i+0x10] == unit_data[k] ){
					buf_data[l+0x900]=k;
					r=1;
				}
			}
			if( t == 0 ){
				if( scr_data_7[i+0x10] == unit_data[k] ){
					buf_data[l+0xd00]=k;
					t=1;
				}
			}
		}
		l++;
	}

	make_file( fpw0,buf_data,buf_data_1 );

	fclose( fpr0 );fclose( fpr1 );fclose( fpr2 );fclose( fpr3 );fclose( fpw0 );
}

make_screen( scr_data_0,scr_data_1,scr_data_2,scr_data_3,scr_data_4,scr_data_5,scr_data_6,scr_data_7 )
char	scr_data_0[32768];
char	scr_data_1[32768];
char	scr_data_2[32768];
char	scr_data_3[32768];
char	scr_data_4[32768];
char	scr_data_5[32768];
char	scr_data_6[32768];
char	scr_data_7[32768];

{

	int	i;

	for( i=0;i<32768;i+=2 ){
		scr_data_2[i]=scr_data_0[i+1];
		scr_data_2[i+1]=scr_data_0[i];
		scr_data_3[i]=scr_data_1[i+1];
		scr_data_3[i+1]=scr_data_1[i];
		scr_data_5[i]=scr_data_4[i+1];
		scr_data_5[i+1]=scr_data_4[i];
		scr_data_7[i]=scr_data_6[i+1];
		scr_data_7[i+1]=scr_data_6[i];
	}

}

make_file( fpw0,buf_data,buf_data_1 )
unchar	buf_data[32768];
unchar	buf_data_1[32768];
FILE	*fpw0;

{
	int	i,j,k,l;

	j=0;
	k=0;
	l=0;

	for( i=0;i<32768;i+=2 ){
		buf_data_1[i]=buf_data[i+1];
		buf_data_1[i+1]=buf_data[i];
	}

	fwrite( buf_data_1,sizeof(unshort),16384,fpw0 );

/*	for( i=0;i<16384;i+=16 ){
		if(( j & 0x0f ) == 0 ){
			fprintf( fpw0,";%01X_%01X\n",k,l );
			l++;
			if(( l & 0x07 ) == 0 ){
				k++;
				l=0;
			}
		}
		fprintf( fpw0,"\t\tWORD\t%05XH,%05XH,%05XH,%05XH,%05XH,%05XH,%05XH,%05XH\n",buf_data[i],buf_data[i+1],buf_data[i+2],buf_data[i+3],buf_data[i+4],buf_data[i+5],buf_data[i+6],buf_data[i+7] );
		fprintf( fpw0,"\t\tWORD\t%05XH,%05XH,%05XH,%05XH,%05XH,%05XH,%05XH,%05XH\n",buf_data[i+8],buf_data[i+9],buf_data[i+10],buf_data[i+11],buf_data[i+12],buf_data[i+13],buf_data[i+14],buf_data[i+15] );
		j++;
	}
	fprintf( fpw0,";\n" );*/
}
