/* << MSC V5.1 >> *************************************************************
**
**	シリアルROMの中を見る ﾃｽﾄﾌﾟﾛｸﾞﾗﾑ
**
******************************************************************************/
#include <stdio.h>
#include <conio.h>

void main()
{
	unsigned char srom[32], work ;
	unsigned char name[7], sno[5] ;
	unsigned short mid ;
	int		c, cc ;

	outp( 0x0032,0x40 ) ;			/*  シリアルROMアドレスリセット	*/
	outp( 0x0032,0xc0 ) ;
	outp( 0x0032,0x40 ) ;

	for ( cc=0; cc<32; cc++ ) {
		work = 0 ;
		srom[cc] = 0 ;
		for ( c=0; c<8; c++ ) {
			work = ( inp( 0x0032 ) & 0x01 ) ;
			if ( c )
				work <<= c ;
			srom[cc] |= work ;
			outp( 0x0032,0 ) ;
			outp( 0x0032,0x40 ) ;
		}
	}
	printf("...... 00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F\n") ;
	for ( c=0; c<32; c++ ) {
		if ( c % 16 == 0 )
			printf("%06d ",c/16) ;
		printf("%02x ",srom[c]) ;
		if ( (c+9) % 16 == 0 )
			printf("- ") ;
		if ( (c+1) % 16 == 0 )
			printf("\n") ;
	}
	printf("\n") ;
/*
**	19 - 0
*/
	printf("ｱﾄﾞﾚｽ : 19 - 0\n") ;
	printf("      : ") ;
	printf("%02x",(srom[2] & 0x0f)) ;
	printf("%02x",srom[1]) ;
	printf("%02x",srom[0]) ;
	printf("\n") ;
/*
**	55 - 20 / シリアルNo.
*/
	printf("ｱﾄﾞﾚｽ : 55 - 20\n") ;
	printf("      : ") ;
	printf("%02x",srom[6]) ;
	sno[0] = srom[6] ;
	printf("%02x",srom[5]) ;
	sno[1] = srom[5] ;
	printf("%02x",srom[4]) ;
	sno[2] = srom[4] ;
	printf("%02x",srom[3]) ;
	sno[3] = srom[3] ;
	printf("%02x",(srom[2] & 0xf0)) ;
	sno[4] = ( srom[2] & 0xf0 ) ;
	printf("\n") ;
	printf("\x1b[1;36m") ; 
	printf("ｼﾘｱﾙNo. : ") ;
	for ( c=0; c<4; c++ )
		printf("%02x",sno[c]) ;
	printf("%01x",(sno[c] & 0xf0)) ;
	printf("\x1b[m") ; 
	printf("\n") ;
/*
**	71 - 56 / 機種番号
*/
	printf("ｱﾄﾞﾚｽ : 71 - 56\n") ;
	printf("      : ") ;
	printf("%02x",srom[8]) ;
	printf("%02x",srom[7]) ;
	printf("\n") ;
	mid = srom[8] ;
	mid <<= 8 ;
	mid |= srom[7] ;
	printf("\x1b[1;36m") ; 
	printf("機種番号 : %04x\x1b[m\n",mid) ;
/*
**	255 - 72 / name
*/
	printf("ｱﾄﾞﾚｽ : 255 - 72\n") ;
	printf("      : ") ;
	for ( c=31; c>=9; c-- )
		printf("%02x",srom[c]) ;
	printf("\n") ;
	work = srom[31] ;
	for ( c=0; c<7; c++ ) {
		name[c] = ( ( work & 0x0f ) << 4 ) ;
		work = srom[30-c] ;
		name[c] |= ( ( work & 0xf0 ) >> 4 ) ;
	}
	name[7] = NULL ;
	printf("\x1b[1;36m") ; 
	printf("name : %s",name) ;
	printf("\x1b[m\n") ; 
}

