Beispiel #1
0
// floppy commands
static void cmd_floppy(void)
{
  u08 cmd;
  u08 exit = 0;
  while((cmd = get_char()) != 0) {
    switch(cmd) {
    case 'e':
      floppy_select_on();
      set_result(STATUS_OK);
      break;
    case 'd':
      floppy_select_off();
      set_result(STATUS_OK);
      break;
    case 'o':
      floppy_motor_on();
      set_result(STATUS_OK);
      break;
    case 'f':
      floppy_motor_off();
      set_result(STATUS_OK);
      break;
    case 'w': // write protected?
      {
        // ensure floppy is selected
        u08 did_sel = floppy_select_on();
        set_result(floppy_low_is_write_protected());
        if(did_sel) {
            floppy_select_off();
        }
      }
      break;
    case '?':
      set_result(floppy_status());
      break;
    default:
      set_result(ERROR_SYNTAX);
    case '.':
      exit = 1;
      break;
    }
    if(exit) break;
  }
}
Beispiel #2
0
static void execute_command(void)
{
    int res;
#ifdef DEBUG
    int i;
    fprintf(stderr, "command %02X args ", fdcdata);
    for (i = 0; i < cmdcount; i++)
	fprintf(stderr, "%02X ", cmdargs[i]);
    fprintf(stderr, "\n");
#endif
    switch (fdcdata) {
	case 0x04:
	    retargs[0] = 0x20;
	    retargc = 1;
	    break;
	case 0x07:
	    retargs[0] = 0;
	    retargs[1] = 0x20;
	    tmpretargc = 2;
	    curtrack = 0;
	    break;
	case 0x0f:
	    retargs[0] = cmdargs[1];
	    retargs[1] = 0x20; /* | (floppy_diskReady((fdcslct & 4)?0:1)?0:0x40); */
	    tmpretargc = 2;
	    curtrack = cmdargs[1];
	    break;
	case 0x4a:
	    retargs[0] = 0;
	    retargs[1] = 0;
	    retargs[2] = 0;
	    retargs[3] = curtrack;
	    retargs[4] = 0;
	    retargs[5] = 0;
	    retargs[6] = 0xc0;
	    retargc = 7;
	    break;
	case 0x45:
	case 0x66:
	    if (fdcdata == 0x45)
		res = floppy_status((fdcslct & 4)?0:1);
	    else
		res = floppy_readSector((fdcslct & 4)?0:1, cmdargs[1], cmdargs[3], cmdargs[2], sector);
	    if (res)
		break;
	    if (fdcdata == 0x45)
		writecount = 0x80 << cmdargs[4];
	    if (fdcdata == 0x66)
		readcount = 0x80 << cmdargs[4];
	    datacount = 0;
	    retargs[0] = cmdargs[4];
	    retargs[1] = cmdargs[3];
	    retargs[2] = cmdargs[2];
	    retargs[3] = cmdargs[1];
	    retargs[4] = 0;
	    retargs[5] = 0;
	    retargs[6] = 0xc0;
	    retargc = 7;
	    curtrack = cmdargs[1];
	    break;
	case 0x4d:
	    formatargc = 0;
	    formatsect = cmdargs[2];
	    formatfill = cmdargs[4];
#ifdef DEBUG
	    fprintf(stderr, "FORMAT sectors %d fill %02X\n", formatsect, formatfill);
#endif
	    retargs[0] = cmdargs[1];
	    retargs[1] = 0;
	    retargs[2] = 0;
	    retargs[3] = 0;
	    retargs[4] = 0;
	    retargs[5] = 0;
	    retargs[6] = 0xc0;
	    retargc = 7;
	    curtrack = cmdargs[1];
	    break;
	case 0x08:
	    retargc = tmpretargc;
	    tmpretargc = 0;
	    break;
    }
}