/*
	tcmos.c
	TOWNS CMOS read write
*/
#define DEFILE "tcmos.dat"
#define USAGE "usage: tcmos [-/][r|w] [filename<" DEFILE ">]"

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

#define CMOS_ADD 0x3000
#define CMOS_BLOCK 2048

const unsigned int ad=CMOS_ADD;
unsigned char c[CMOS_BLOCK];

void help(char *a);
void write_cmos( char *fn );
void read_cmos( char *fn );

void main( int argc, char *argv[]){
	
	char *fn=DEFILE;

	if(argc==1) help(argv[0]);
	if(argc>2)  fn=argv[2];

	if(argv[1][0]=='-' || argv[1][0]=='/')
	switch (argv[1][1]) {
	case 'r':
		read_cmos(fn);
		break;
	case 'w':
		write_cmos(fn);
		break;
	default:
		break;
	}
	else help(argv[0]);
}
void help(char *a){
	puts( a );
	puts( USAGE );
	exit(1);
}
void read_cmos( char *fn ){
	FILE *fp;
	unsigned int i;
	if((fp=fopen(fn,"wb"))==NULL) help(fn);
	for(i=0;i<CMOS_BLOCK;i++){
		c[i]=inp(ad+i*2);
	}
	fwrite((void *)c,sizeof(c),1,fp);
	puts( fn );
	puts("書き込みました");
}
void write_cmos( char *fn ){
	FILE *fp;
	unsigned int i;
	if((fp=fopen(fn,"rb"))==NULL) help(fn);
	fread((void *)c,sizeof(c),1,fp);
	for(i=0;i<CMOS_BLOCK;i++){
		outp(ad+i*2,c[i]);
	}
	puts( fn );
	puts("読み込みました");
}
