コード例 #1
0
ファイル: terakdisk.c プロジェクト: frantony/bk-terak-emu
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
コード例 #2
0
ファイル: stepover.c プロジェクト: Logout22/Escape
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);
}
コード例 #3
0
ファイル: console.c プロジェクト: Logout22/Escape
void cons_init(void) {
	curExecEnv = -1;
	ev_register(EV_USER_INT,cons_sigIntrpt);
	cmds_init();
}
コード例 #4
0
ファイル: trace.c プロジェクト: Logout22/Escape
void cli_cmd_traceInit(void) {
	ev_register(EV_CPU_PAUSE,cpuPause);
}