static CPU_RES tdisk_write(c_addr addr, d_word word) { d_word offset = addr - TERAK_DISK_REG; tdisk_t * pdt; switch (offset) { case 0: /* control port */ if (word) { /* Print a message if something other than turning * all drives off is requested */ // fprintf(stderr, _("Writing disk cmd, data %06o\n"), word); } selected = unit(word); if (selected >= 0) { pdt = &tdisks[selected]; if (pdt->inprogress) return CPU_BUS_ERROR; pdt->inprogress = word & enF; pdt->cmd = cmd(word); if (pdt->inprogress && word & intrF) switch (pdt->cmd) { case nopD: ev_register(TTY_PRI, cpu_service, TICK_RATE*100/25, 0250); break; case rtcD: ev_register(TTY_PRI, cpu_service, TICK_RATE/50, 0250); break; default: fprintf(stderr, "Interrupt requested\n"); ev_register(TTY_PRI, cpu_service, TICK_RATE/1000, 0250); } } break; case 2: /* data port */ fprintf(stderr, _("Writing disk data reg, data %06o\n"), word); break; } return CPU_OK; } // tdisk_write
void cli_cmd_stepover(size_t argc,const sASTNode **argv) { if(argc != 0 && argc != 1) cmds_throwEx(NULL); octa count = 1; if(argc == 1) { sCmdArg first = cmds_evalArg(argv[0],ARGVAL_INT,0,NULL); count = first.d.integer; } if(cpu_isHalted()) cmds_throwEx("CPU is halted. Set the PC or reset the machine!\n"); ev_register(EV_AFTER_EXEC,afterExec); while(count-- > 0) { level = 0; cpu_run(); } ev_unregister(EV_AFTER_EXEC,afterExec); }
void cons_init(void) { curExecEnv = -1; ev_register(EV_USER_INT,cons_sigIntrpt); cmds_init(); }
void cli_cmd_traceInit(void) { ev_register(EV_CPU_PAUSE,cpuPause); }