// add a 6502 cpu void m1snd_add6502(long clock, void *handlers) { rw6502 = handlers; timer_add_cpu(CPU_M6502, clock, m6502_execute, m6502_getcycles, m6502_yield, dummy_getctx, dummy_setctx, NULL); m6502_init(); m6502_reset(NULL); m6502_set_irq_callback(m6502_irq_callback); }
static void deco16_reset (void) { m6502_reset(); m6502.subtype = SUBTYPE_DECO16; m6502.insn = insndeco16; PCL = RDMEM(DECO16_RST_VEC+1); PCH = RDMEM(DECO16_RST_VEC); m6502.sp.d = 0x01ff; /* stack pointer starts at page 1 offset FF */ m6502.p = F_T|F_I|F_Z|F_B|(P&F_D); /* set T, I and Z flags */ m6502.pending_irq = 0; /* nonzero if an IRQ is pending */ m6502.after_cli = 0; /* pending IRQ and last insn cleared I */ change_pc(PCD); }
// add a 6502 cpu, managed via memory manager void m1snd_add6502b(long clock, void *handlers) { char *ctx; int cpunum; rw6502 = &m6502b; ctx = malloc(4*1024); cpunum = timer_add_cpu(CPU_M6502, clock, m6502_execute, m6502_getcycles, m6502_yield, m6502_getctx, m6502_setctx, ctx); memory_register_cpu(cpunum, 8, M1_CPU_LE); memory_context_switch(cpunum); m6502_init(); m6502_reset(NULL); m6502_set_irq_callback(m6502_irq_callback); m6502_getctx(ctx); }
void main_reset() { m6502_reset(); crtc_reset(); video_reset(); sysvia_reset(); uservia_reset(); serial_reset(); acia_reset(&sysacia); wd1770_reset(); i8271_reset(); scsi_reset(); vdfs_reset(); sid_reset(); music4000_reset(); music5000_reset(); sn_init(); if (curtube != -1) tubes[curtube].reset(); else tube_exec = NULL; tube_reset(); memset(ram, 0, 64 * 1024); }
static void m65c02_reset (void) { m6502_reset(); P &=~F_D; }
static void m6510_reset (void) { m6502_reset(); m6502.port = 0xff; m6502.ddr = 0x00; }
static void m65c02_reset (void *param) { m6502_reset(param); P &=~F_D; }
void main_run() { int c, d; if (key[KEY_PGUP]) { bemfreerun = 1; old_key_pgup = 1; } else if (old_key_pgup) { old_key_pgup = 0; if (!key[KEY_LSHIFT] && !key[KEY_RSHIFT]) bemfreerun = 0; } if (bemfreerun == 2) { // A key was pressed while freerunning; disable freerun temporarily // until no key is pressed any more. if (!key_any_down()) bemfreerun = 1; } if ((fcount > 0 || (bemfreerun == 1) || (motor && fasttape))) { if (autoboot) autoboot--; fcount--; framesrun++; if (bemfreerun || (motor && fasttape)) fcount=0; if (x65c02) m65c02_exec(); else m6502_exec(); ddnoiseframes++; if (ddnoiseframes >= 5) { ddnoiseframes = 0; ddnoise_mix(); } key_check(); poll_joystick(); for (c = 0; c < 2; c++) { joybutton[c] = 0; for (d = 0; d < joy[c].num_buttons; d++) { if (joy[c].button[d].b) joybutton[c] = 1; } } if (savestate_wantload) savestate_doload(); if (savestate_wantsave) savestate_dosave(); if (key[KEY_F10] && (debug_core || debug_tube)) debug_step = 1; if (key[KEY_F12] && !resetting) { m6502_reset(); video_reset(); i8271_reset(); wd1770_reset(); sid_reset(); music5000_reset(); if (curtube != -1) tubes[curtube].reset(); tube_reset(); } resetting = key[KEY_F12]; } else { framesrun = 0; rest(1); } if (key[KEY_PGDN] && !old_key_pgdn) bempause ^= 1; old_key_pgdn = key[KEY_PGDN]; if (key[KEY_RIGHT] && !old_key_right && bempause) bemstep = 1; old_key_right = key[KEY_RIGHT]; if (framesrun > 10) fcount = 0; }