/* * fifoport.c -- fifo port i/o routine * * Copyright (C) 1997 by Sony Computer Entertainment * All rights Reserved */ #include #include #include #include #include #include #include #include #include #include "getioadr.h" #include "cmdport.h" #include "keyin.h" #include "display.h" #include "fifoport.h" #include "dosint.h" #include "misc.h" #include "asm.h" #include "rs.h" extern int prompt_catch_flag; extern int wait_prompt(); extern void check_exit(); int set_reg(int regno, unsigned long data); /* ---- Entry functions (fifo high level functions) ---- */ int start_smon(); int quit_smon(); int fifosend(unsigned char *data,int bytelen); int fifo_memset_cmd(unsigned long addr, unsigned long len); int fifo_set_reg(int regno, unsigned long data); int fifo_memset_cmd(unsigned long addr, unsigned long len) { rs_putch(1); rs_putch((int)(addr/0x1000000)%256); rs_putch((int)(addr/0x10000)%256); rs_putch((int)(addr/0x100)%256); rs_putch((int)addr%256); rs_putch((int)(len/0x1000000)%256); rs_putch((int)(len/0x10000)%256); rs_putch((int)(len/0x100)%256); rs_putch((int)len%256); return OK; } int fifo_set_reg(int regno, unsigned long data) { int i; char buff[256]; switch( regno) { case R_EPC: sprintf(buff, "sr epc %lx\r", data); break; case R_GP: sprintf(buff, "sr gp %lx\r", data); break; case R_SP: sprintf(buff, "sr sp %lx\r", data); break; default: return NG; } wait_prompt(); for( i = 0; i < 256 && buff[i] != 0; i++) { rs_putch( buff[i]); } wait_prompt(); rs_putch( '\r'); /*Makes command prompt return for auto */ return OK; } int start_smon_brd() { time_t starttime; char *chkstr = "binary\r"; char ch[100]; DWORD bytesRead; DWORD g; starttime = time(NULL); rs_puts( "brd\r"); for(;;) { ReadFile(hFile, (LPVOID)&ch, 100, &bytesRead, NULL); for (g=0; g 0) { _data = data; _bytelen = bytelen; for(;;) { /*Packet send mode */ check_exit(1); rs_flush(); rs_putch( 2); /*Packet start */ /*2048 bytes receive */ data = _data; bytelen = _bytelen; sum = 0; i=FIFO_LEN; while (i>0) { ReadFile(hFile, (LPVOID)data, i, &bytesRead, NULL); for (g=0; g 0) { _data = data; _bytelen = bytelen; for(;;) { /*Packet send mode */ rs_putch( 2); /*Packet Start */ /*2048 bytes send */ data = _data; bytelen = _bytelen; sum = 0; charstosend=FIFO_LEN; if (charstosend>bytelen) { charstosend=bytelen; } WriteFile(hFile, (LPCVOID)data, charstosend, &byteswritten, NULL); for( i = 0; i < FIFO_LEN; i++) { if( bytelen <= 0) { ret = rs_putch( 0); } else { sum += *data; data++; bytelen--; } } ret = rs_putch( sum); if( ret ) return NG; do { ReadFile(hFile, (LPVOID)&ch, 1, &bytesRead, NULL); check_exit(1); } while (bytesRead==0); if( ch == 'Y') { break; } } } return OK; }