Beispiel #1
0
// 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);
}
Beispiel #2
0
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);
}
Beispiel #3
0
// 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);
}
Beispiel #4
0
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);
}
Beispiel #5
0
static void m65c02_reset (void)
{
	m6502_reset();
	P &=~F_D;
}
Beispiel #6
0
static void m6510_reset (void)
{
	m6502_reset();
	m6502.port = 0xff;
	m6502.ddr = 0x00;
}
Beispiel #7
0
static void m65c02_reset (void *param)
{
	m6502_reset(param);
	P &=~F_D;
}
Beispiel #8
0
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;
}