예제 #1
0
파일: ired.c 프로젝트: radare/ired
static int red_cmd(char *cmd) {
    char *arg = cmd+1;
    SKIPSPACES(arg);
    switch(*cmd) {
    case 'q':
        return 0;
    case ';':
    case '#':
        break; // comment
    case '>':
        return cmd_dump(arg);
        break;
    case '<':
        return cmd_load(arg);
        break;
    case '.':
        return red_interpret(arg);
        break;
    case 's':
        return cmd_seek(arg);
        break;
    case 'b':
        return cmd_bsize(arg);
        break;
    case '/':
        return cmd_search(arg);
        break;
    case 'd':
        return cmd_system ("echo X | ired -n $BLOCK | rasm2 -o $OFFSET -D - |head -n $(($LINES-1))");
    case 'p':
        return cmd_print(arg);
        break;
    case 'r':
        return cmd_resize(arg);
        break;
    case 'x':
        return cmd_hexdump(arg);
        break;
    case 'X':
        return cmd_bytedump(arg);
        break;
    case 'w':
        return cmd_write(arg);
        break;
    case '!':
        return cmd_system(arg);
        break;
    case 'V':
        return cmd_system("vired $FILE");
        break;
    case '?':
        return cmd_help(arg);
        break;
    default:
        fprintf(stderr, "? %s\n", cmd);
    }
    return 1;
}
예제 #2
0
파일: upd765a.cpp 프로젝트: tkochi/xm8
void UPD765A::process_cmd(int cmd)
{
	switch(cmd & 0x1f) {
	case 0x02:
		cmd_read_diagnostic();
		break;
	case 0x03:
		cmd_specify();
		break;
	case 0x04:
		cmd_sence_devstat();
		break;
	case 0x05:
	case 0x09:
		cmd_write_data();
		break;
	case 0x06:
	case 0x0c:
		cmd_read_data();
		break;
	case 0x07:
		cmd_recalib();
		break;
	case 0x08:
		cmd_sence_intstat();
		break;
	case 0x0a:
		cmd_read_id();
		break;
	case 0x0d:
		cmd_write_id();
		break;
	case 0x0f:
		cmd_seek();
		break;
	case 0x11:
	case 0x19:
	case 0x1d:
		cmd_scan();
		break;
	default:
		cmd_invalid();
		break;
	}
}
예제 #3
0
파일: mb8877.cpp 프로젝트: victorlomax/qx1
// ----------------------------------------------------------------------------
// Decode the received command
// ----------------------------------------------------------------------------
void  MB8877::decode_command()
{
#ifdef FDC_DEBUG
  Serial.println("FDC Decoder");
#endif
  reg[STATUS] = FDC_ST_BUSY;      // We are BUSY

  if (reg[STATUS] & FDC_ST_NOTREADY)    // Try again to open the directory
  {
    scanSD();
    scanDirectory(fdc.disk);
    if (reg[STATUS] & FDC_ST_NOTREADY) return;  // Still no SD
  }
  
  fdc.cmdtype = 0;  // Reset current command
  
  switch(reg[CMD] & 0xf0) {     // Decode which command to execute
  // type I
    case 0x00: cmd_restore(FDC_CMD_RESTORE); break;
    case 0x10: cmd_seek(FDC_CMD_SEEK); break;
    case 0x20: cmd_step(0); break;
    case 0x30: cmd_step(1); break;
    case 0x40: cmd_step(FDC_CMD_STEP_IN, 0); break;
    case 0x50: cmd_step(FDC_CMD_STEP_IN, 1); break;
    case 0x60: cmd_step(FDC_CMD_STEP_OUT, 0); break;
    case 0x70: cmd_step(FDC_CMD_STEP_OUT, 1); break;
  // type II
    case 0x80: cmd_readdata(FDC_CMD_RD_SEC); break;
    case 0x90: cmd_readdata(FDC_CMD_RD_MSEC); break;
    case 0xa0: cmd_writedata(FDC_CMD_WR_SEC); break;
    case 0xb0: cmd_writedata(FDC_CMD_WR_MSEC); break;
  // type III
    case 0xc0: cmd_readaddr(FDC_CMD_RD_ADDR); break;
    case 0xe0: cmd_readtrack(FDC_CMD_RD_TRK); break;
    case 0xf0: cmd_writetrack(FDC_CMD_WR_TRK); break;
  // type IV
    case 0xd0: cmd_forceint(FDC_CMD_TYPE4); break;
    default: break;
  }
  digitalWrite(FDC_IRQ, LOW);   // Generate interrupt, command completed
}