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; }
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; } }
// ---------------------------------------------------------------------------- // 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 }