
#include <stdio.h>
#define ESC 0x1b
#define data_port 0xe0d0
#define comm_port 0xe0d2

main(argc,argv)
        int argc;  char *argv[];
{
	char c,cc,dd,st,cm[4];
        puts("\n\n\nLet's Start [KPU-401] Control !!\n\n\n");
	for(;;){
		c=csts();
		if(c==ESC) exit();
		else if(c=='c'){
                        puts("[Input Command]=");
                        gets(cm);
                        sscanf(cm,"%x",&cc);
                        put_command(cc);
                }
                else if(c=='d'){
                        puts("[Input Data]=");
                        gets(cm);
                        sscanf(cm,"%x",&cc);
                        put_data(cc);
                }
		else if(c==' '){
			dd=_inb(comm_port);
			status_display(dd);
		}
                else{
                        dd=_inb(comm_port);
                        if((dd&0xc0)!=(st&0xc0)){
                                status_display(dd);
                                st=dd;
                        }
			disp_data();
                }
        }
}

status_display(d)
        char d;
{
        if((d&0x80)==0) putchar('-');
        else putchar('+');
        if((d&0x40)==0) putchar('-');
        else putchar('+');
	putchar(' ');
}

put_command(d)
        char d;
{
        if(put_ok_check()==0){
                _outb(d,comm_port);
        }
        else puts("NG! ");
}

put_data(d)
        char d;
{
        if(put_ok_check()==0){
                _outb(d,data_port);
        }
        else puts("NG! ");
}

disp_data(){
        char d;
        if(get_ok_check()==0){
                d=_inb(data_port);
		if(d==0xfe){
			puts("* ");
		}
		else{
                	printf("%02x ",d);
		}
        }
}

put_ok_check(){
        char d;
        d=_inb(comm_port);
        if((d&0x40)==0) return(0);
        else return(1);
}

get_ok_check(){
        char d;
        d=_inb(comm_port);
        if((d&0x80)==0) return(0);
        else return(1);
}

