예제 #1
0
void z80ctc_init(int which, z80ctc_interface *intf)
{
	z80ctc *ctc = &ctcs[which];

	assert(which < MAX_CTC);

	memset(ctc, 0, sizeof(*ctc));

	ctc->clock = intf->baseclock;
	ctc->invclock16 = 16.0 / (double)intf->baseclock;
	ctc->invclock256 = 256.0 / (double)intf->baseclock;
	ctc->notimer = intf->notimer;
	ctc->intr = intf->intr;
	ctc->timer[0] = timer_alloc(timercallback);
	ctc->timer[1] = timer_alloc(timercallback);
	ctc->timer[2] = timer_alloc(timercallback);
	ctc->timer[3] = timer_alloc(timercallback);
	ctc->zc[0] = intf->zc0;
	ctc->zc[1] = intf->zc1;
	ctc->zc[2] = intf->zc2;
	ctc->zc[3] = 0;
	z80ctc_reset(which);

    state_save_register_item("z80ctc", which, ctc->vector);
    state_save_register_item_array("z80ctc", which, ctc->mode);
    state_save_register_item_array("z80ctc", which, ctc->tconst);
    state_save_register_item_array("z80ctc", which, ctc->down);
    state_save_register_item_array("z80ctc", which, ctc->extclk);
    state_save_register_item_array("z80ctc", which, ctc->int_state);
}
예제 #2
0
static void tms7000_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
	int cpu = cpu_getactivecpu();

	tms7000.irq_callback = irqcallback;

	memset(tms7000.pf, 0, 0x100);
	memset(tms7000.rf, 0, 0x80);

	/* Save register state */
	state_save_register_item("tms7000", cpu, pPC);
	state_save_register_item("tms7000", cpu, pSP);
	state_save_register_item("tms7000", cpu, pSR);

	/* Save Interrupt state */
	state_save_register_item_array("tms7000", cpu, tms7000.irq_state);

	/* Save register and perpherial file state */
	state_save_register_item_array("tms7000", cpu, tms7000.rf);
	state_save_register_item_array("tms7000", cpu, tms7000.pf);

	/* Save timer state */
	state_save_register_item("tms7000", cpu, tms7000.t1_prescaler);
	state_save_register_item("tms7000", cpu, tms7000.t1_capture_latch);
	state_save_register_item("tms7000", cpu, tms7000.t1_decrementer);

	state_save_register_item("tms7000", cpu, tms7000.idle_state);

	tms7000.irq_callback = irqcallback;
}
예제 #3
0
void microtouch_init(running_machine &machine, microtouch_tx_func tx_cb, microtouch_touch_func touch_cb)
{
	memset(&microtouch, 0, sizeof(microtouch));

	microtouch.last_touch_state = -1;
	microtouch.tx_callback = tx_cb;
	microtouch.touch_callback = touch_cb;

	microtouch.timer = machine.scheduler().timer_alloc(FUNC(microtouch_timer_callback));
	microtouch.timer->adjust(attotime::from_hz(167*5), 0, attotime::from_hz(167*5));

	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.reset_done);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.format_tablet);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.mode_inactive);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.mode_stream);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_touch_state);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_x);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_y);
	state_save_register_item_array(machine, "microtouch", NULL, 0, microtouch.rx_buffer);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.rx_buffer_ptr);
	state_save_register_item_array(machine, "microtouch", NULL, 0, microtouch.tx_buffer);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.tx_buffer_num);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.tx_buffer_ptr);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.format_decimal);

};
예제 #4
0
void microtouch_init(running_machine *machine, microtouch_tx_func tx_cb, microtouch_touch_func touch_cb)
{
	memset(&microtouch, 0, sizeof(microtouch));

	microtouch.last_touch_state = -1;
	microtouch.tx_callback = tx_cb;
	microtouch.touch_callback = touch_cb;

	microtouch.timer = timer_alloc(machine, microtouch_timer_callback, NULL);
	timer_adjust_periodic(microtouch.timer, ATTOTIME_IN_HZ(167*5), 0, ATTOTIME_IN_HZ(167*5));

	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.reset_done);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.format_tablet);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.mode_inactive);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.mode_stream);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_touch_state);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_x);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.last_y);
	state_save_register_item_array(machine, "microtouch", NULL, 0, microtouch.rx_buffer);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.rx_buffer_ptr);
	state_save_register_item_array(machine, "microtouch", NULL, 0, microtouch.tx_buffer);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.tx_buffer_num);
	state_save_register_item(machine, "microtouch", NULL, 0, microtouch.tx_buffer_ptr);

};
예제 #5
0
파일: arm.c 프로젝트: cdenix/ps3-mame-0125
static void arm_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
	arm.irq_callback = irqcallback;

	state_save_register_item_array("arm", index, arm.sArmRegister);
	state_save_register_item_array("arm", index, arm.coproRegister);
	state_save_register_item("arm", index, arm.pendingIrq);
	state_save_register_item("arm", index, arm.pendingFiq);
}
예제 #6
0
void init_konami_cgboard(running_machine *machine, int num_boards, int type)
{
	int i;
	num_cgboards = num_boards;

	for (i=0; i < num_boards; i++)
	{
		dsp_comm_ppc[i][0] = 0x00;
		dsp_shared_ram[i] = auto_alloc_array(machine, UINT32, DSP_BANK_SIZE * 2/4);
		dsp_shared_ram_bank[i] = 0;

		dsp_state[i] = 0x80;
		texture_bank[i] = -1;

		pci_bridge_enable[i] = 0;
		nwk_device_sel[i] = 0;
		nwk_fifo_read_ptr[i] = 0;
		nwk_fifo_write_ptr[i] = 0;

		nwk_fifo[i] = auto_alloc_array(machine, UINT32, 0x800);
		nwk_ram[i] = auto_alloc_array(machine, UINT32, 0x2000);

		state_save_register_item_array(machine, "konppc", NULL, i, dsp_comm_ppc[i]);
		state_save_register_item_array(machine, "konppc", NULL, i, dsp_comm_sharc[i]);
		state_save_register_item(machine, "konppc", NULL, i, dsp_shared_ram_bank[i]);
		state_save_register_item_pointer(machine, "konppc", NULL, i, dsp_shared_ram[i], DSP_BANK_SIZE * 2 / sizeof(dsp_shared_ram[i][0]));
		state_save_register_item(machine, "konppc", NULL, i, dsp_state[i]);
		state_save_register_item(machine, "konppc", NULL, i, texture_bank[i]);
		state_save_register_item(machine, "konppc", NULL, i, pci_bridge_enable[i]);
		state_save_register_item(machine, "konppc", NULL, i, nwk_device_sel[i]);
		state_save_register_item(machine, "konppc", NULL, i, nwk_fifo_read_ptr[i]);
		state_save_register_item(machine, "konppc", NULL, i, nwk_fifo_write_ptr[i]);
		state_save_register_item_pointer(machine, "konppc", NULL, i, nwk_fifo[i], 0x800);
		state_save_register_item_pointer(machine, "konppc", NULL, i, nwk_ram[i], 0x2000);
	}
	state_save_register_item(machine, "konppc", NULL, 0, cgboard_id);
	cgboard_type = type;

	if (type == CGBOARD_TYPE_NWKTR)
	{
		nwk_fifo_half_full_r = 0x100;
		nwk_fifo_half_full_w = 0xff;
		nwk_fifo_full = 0x1ff;
		nwk_fifo_mask = 0x1ff;
	}
	if (type == CGBOARD_TYPE_HANGPLT)
	{
		nwk_fifo_half_full_r = 0x3ff;
		nwk_fifo_half_full_w = 0x400;
		nwk_fifo_full = 0x7ff;
		nwk_fifo_mask = 0x7ff;
	}
}
예제 #7
0
void TTL74181_init( int chip )
{
	struct TTL74181_chip *c = auto_malloc( sizeof( struct TTL74181_chip ) );

	memset( c->inputs, 0, sizeof( c->inputs ) );
	memset( c->outputs, 0, sizeof( c->outputs ) );
	c->dirty = 1;

	state_save_register_item_array( "TTL74181", chip, c->inputs );
	state_save_register_item_array( "TTL74181", chip, c->outputs );
	state_save_register_item( "TTL74181", chip, c->dirty );

	chips[ chip ] = c;
}
예제 #8
0
struct crtc6845 *crtc6845_init(const struct crtc6845_config *config)
{
	struct crtc6845 *crtc;
	int idx;

	crtc = auto_malloc(sizeof(struct crtc6845));
	memset(crtc, 0, sizeof(*crtc));
	crtc->cursor_time = timer_get_time();
	crtc->config = *config;
	crtc6845 = crtc;

	/* Hardwire the values which can't be changed in the PC1512 version */
	if (config->personality == M6845_PERSONALITY_PC1512)
	{
		for (idx = 0; idx < sizeof(pc1512_defaults); idx++)
		{
			crtc->reg[idx] = pc1512_defaults[idx];
		}
	}

	state_save_register_item_array("crtc6845", 0, crtc->reg);
	state_save_register_item("crtc6845", 0, crtc->idx);
	state_save_register_func_postload(crtc6845_state_postload);
	return crtc;
}
예제 #9
0
파일: x76f100.c 프로젝트: i-willh/imame4all
void x76f100_init( running_machine *machine, int chip, UINT8 *data )
{
    int offset;
    struct x76f100_chip *c;

    if( chip >= X76F100_MAXCHIP )
    {
        verboselog( machine, 0, "x76f100_init( %d ) chip out of range\n", chip );
        return;
    }

    c = &x76f100[ chip ];

    if( data == NULL )
    {
        data = auto_alloc_array( machine, UINT8,
                                 SIZE_RESPONSE_TO_RESET +
                                 SIZE_READ_PASSWORD +
                                 SIZE_WRITE_PASSWORD +
                                 SIZE_DATA );
    }

    c->cs = 0;
    c->rst = 0;
    c->scl = 0;
    c->sdaw = 0;
    c->sdar = 0;
    c->state = STATE_STOP;
    c->shift = 0;
    c->bit = 0;
    c->byte = 0;
    c->command = 0;
    memset( c->write_buffer, 0, SIZE_WRITE_BUFFER );

    offset = 0;
    c->response_to_reset = &data[ offset ];
    offset += SIZE_RESPONSE_TO_RESET;
    c->write_password = &data[ offset ];
    offset += SIZE_WRITE_PASSWORD;
    c->read_password = &data[ offset ];
    offset += SIZE_READ_PASSWORD;
    c->data = &data[ offset ];
    offset += SIZE_DATA;

    state_save_register_item( machine, "x76f100", NULL, chip, c->cs );
    state_save_register_item( machine, "x76f100", NULL, chip, c->rst );
    state_save_register_item( machine, "x76f100", NULL, chip, c->scl );
    state_save_register_item( machine, "x76f100", NULL, chip, c->sdaw );
    state_save_register_item( machine, "x76f100", NULL, chip, c->sdar );
    state_save_register_item( machine, "x76f100", NULL, chip, c->state );
    state_save_register_item( machine, "x76f100", NULL, chip, c->shift );
    state_save_register_item( machine, "x76f100", NULL, chip, c->bit );
    state_save_register_item( machine, "x76f100", NULL, chip, c->byte );
    state_save_register_item( machine, "x76f100", NULL, chip, c->command );
    state_save_register_item_array( machine, "x76f100", NULL, chip, c->write_buffer );
    state_save_register_item_pointer( machine, "x76f100", NULL, chip, c->response_to_reset, SIZE_RESPONSE_TO_RESET );
    state_save_register_item_pointer( machine, "x76f100", NULL, chip, c->write_password, SIZE_WRITE_PASSWORD );
    state_save_register_item_pointer( machine, "x76f100", NULL, chip, c->read_password, SIZE_READ_PASSWORD );
    state_save_register_item_pointer( machine, "x76f100", NULL, chip, c->data, SIZE_DATA );
}
예제 #10
0
void generic_machine_init(running_machine *machine)
{
	int counternum;

	/* reset coin counters */
	for (counternum = 0; counternum < COIN_COUNTERS; counternum++)
	{
		lastcoin[counternum] = 0;
		coinlockedout[counternum] = 0;
		servicecoinlockedout[counternum] = 0;
	}

	/* reset NVRAM size and pointers */
	generic_nvram_size = 0;
	generic_nvram = NULL;
	generic_nvram16 = NULL;
	generic_nvram32 = NULL;

	/* reset memory card info */
	memcard_inserted = -1;

	/* register a reset callback and save state for interrupt enable */
	add_reset_callback(machine, interrupt_reset);
	state_save_register_item_array("cpu", 0, interrupt_enable);

	/* register for configuration */
	config_register("counters", counters_load, counters_save);

	/* for memory cards, request save state and an exit callback */
	if (machine->drv->memcard_handler != NULL)
	{
		state_save_register_global(memcard_inserted);
		add_exit_callback(machine, memcard_eject);
	}
}
예제 #11
0
static void scsidev_alloc_instance( SCSIInstance *scsiInstance, const char *diskregion )
{
	running_machine *machine = scsiInstance->machine;
	SCSIDev *our_this = (SCSIDev *)SCSIThis( &SCSIClassDevice, scsiInstance );

	state_save_register_item_array( machine, "scsidev", diskregion, 0, our_this->command );
	state_save_register_item( machine, "scsidev", diskregion, 0, our_this->commandLength );
	state_save_register_item( machine, "scsidev", diskregion, 0, our_this->phase );
}
예제 #12
0
static void at28c16_init( int chip )
{
	struct at28c16_chip *c;
	if( chip >= MAX_AT28C16_CHIPS )
	{
		logerror( "at28c16_init: invalid chip %d\n", chip );
		return;
	}
	c = &at28c16[ chip ];

	c->a9_12v = 0;
	memset( c->data, 0, DATA_SIZE );
	memset( c->id, 0, ID_SIZE );

	state_save_register_item_array( "at28c16", chip, c->data );
	state_save_register_item_array( "at28c16", chip, c->id );
	state_save_register_item( "at28c16", chip, c->a9_12v );
}
예제 #13
0
void v810_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
	v810.irq_line = CLEAR_LINE;
	v810.nmi_line = CLEAR_LINE;
	v810.irq_cb = irqcallback;

	state_save_register_item_array("v810", index, v810.reg);
	state_save_register_item("v810", index, v810.irq_line);
	state_save_register_item("v810", index, v810.nmi_line);
	state_save_register_item("v810", index, v810.PPC);

}
예제 #14
0
static void cr589_alloc_instance( SCSIInstance *scsiInstance, const char *diskregion )
{
	running_machine *machine = scsiInstance->machine;
	SCSICr589 *our_this = (SCSICr589 *)SCSIThis( &SCSIClassCr589, scsiInstance );

	our_this->download = 0;
	memcpy( &our_this->buffer[ identity_offset ], "MATSHITACD-ROM CR-589   GS0N", 28 );

	state_save_register_item( machine,  "cr589", diskregion, 0, our_this->download );
	state_save_register_item_array( machine,  "cr589", diskregion, 0, our_this->buffer );
	state_save_register_item( machine,  "cr589", diskregion, 0, our_this->bufferOffset );
}
예제 #15
0
static void ay8910_statesave(ay8910_context *psg, int sndindex)
{
	state_save_register_item("AY8910", sndindex, psg->register_latch);
	state_save_register_item_array("AY8910", sndindex, psg->regs);
	state_save_register_item("AY8910", sndindex, psg->last_enable);

	state_save_register_item_array("AY8910", sndindex, psg->count);
	state_save_register_item("AY8910", sndindex, psg->count_noise);
	state_save_register_item("AY8910", sndindex, psg->count_env);

	state_save_register_item("AY8910", sndindex, psg->env_volume);

	state_save_register_item_array("AY8910", sndindex, psg->output);
	state_save_register_item("AY8910", sndindex, psg->output_noise);

	state_save_register_item("AY8910", sndindex, psg->env_step);
	state_save_register_item("AY8910", sndindex, psg->hold);
	state_save_register_item("AY8910", sndindex, psg->alternate);
	state_save_register_item("AY8910", sndindex, psg->attack);
	state_save_register_item("AY8910", sndindex, psg->holding);
	state_save_register_item("AY8910", sndindex, psg->rng);
}
예제 #16
0
void *tms5220_create(int index)
{
	struct tms5220 *tms;

	tms = malloc(sizeof(*tms));
	memset(tms, 0, sizeof(*tms));

	state_save_register_item_array("tms5220", index, tms->fifo);
	state_save_register_item("tms5220", index, tms->fifo_head);
	state_save_register_item("tms5220", index, tms->fifo_tail);
	state_save_register_item("tms5220", index, tms->fifo_count);
	state_save_register_item("tms5220", index, tms->fifo_bits_taken);

	state_save_register_item("tms5220", index, tms->tms5220_speaking);
	state_save_register_item("tms5220", index, tms->speak_external);
	state_save_register_item("tms5220", index, tms->talk_status);
	state_save_register_item("tms5220", index, tms->first_frame);
	state_save_register_item("tms5220", index, tms->last_frame);
	state_save_register_item("tms5220", index, tms->buffer_low);
	state_save_register_item("tms5220", index, tms->buffer_empty);
	state_save_register_item("tms5220", index, tms->irq_pin);

	state_save_register_item("tms5220", index, tms->old_energy);
	state_save_register_item("tms5220", index, tms->old_pitch);
	state_save_register_item_array("tms5220", index, tms->old_k);

	state_save_register_item("tms5220", index, tms->new_energy);
	state_save_register_item("tms5220", index, tms->new_pitch);
	state_save_register_item_array("tms5220", index, tms->new_k);

	state_save_register_item("tms5220", index, tms->current_energy);
	state_save_register_item("tms5220", index, tms->current_pitch);
	state_save_register_item_array("tms5220", index, tms->current_k);

	state_save_register_item("tms5220", index, tms->target_energy);
	state_save_register_item("tms5220", index, tms->target_pitch);
	state_save_register_item_array("tms5220", index, tms->target_k);

	state_save_register_item("tms5220", index, tms->interp_count);
	state_save_register_item("tms5220", index, tms->sample_count);
	state_save_register_item("tms5220", index, tms->pitch_count);

	state_save_register_item_array("tms5220", index, tms->u);
	state_save_register_item_array("tms5220", index, tms->x);

	state_save_register_item("tms5220", index, tms->RNG);

	state_save_register_item("tms5220", index, tms->schedule_dummy_read);
	state_save_register_item("tms5220", index, tms->data_register);
	state_save_register_item("tms5220", index, tms->RDB_flag);

	return tms;
}
예제 #17
0
void z80pio_init(int which, z80pio_interface *intf)
{
	z80pio *pio = pios + which;

	assert(which < MAX_PIO);

	memset(pio, 0, sizeof(*pio));

	pio->intr = intf->intr;
	pio->rdyr[0] = intf->rdyA;
	pio->rdyr[1] = intf->rdyB;
	z80pio_reset(which);

    state_save_register_item_array("z80pio", which, pio->vector);
    state_save_register_item_array("z80pio", which, pio->mode);
    state_save_register_item_array("z80pio", which, pio->enable);
    state_save_register_item_array("z80pio", which, pio->mask);
    state_save_register_item_array("z80pio", which, pio->dir);
    state_save_register_item_array("z80pio", which, pio->rdy);
    state_save_register_item_array("z80pio", which, pio->in);
    state_save_register_item_array("z80pio", which, pio->out);
    state_save_register_item_array("z80pio", which, pio->strobe);
    state_save_register_item_array("z80pio", which, pio->int_state);
}
예제 #18
0
파일: segaic16.c 프로젝트: Dipri/imame4all
void segaic16_memory_mapper_init(running_device *cpu, const segaic16_memory_map_entry *entrylist, void (*sound_w_callback)(running_machine *, UINT8), UINT8 (*sound_r_callback)(running_machine *))
{
	struct memory_mapper_chip *chip = &memory_mapper;

	/* reset the chip structure */
	memset(chip, 0, sizeof(*chip));
	chip->cpu = cpu;
	chip->map = entrylist;
	chip->sound_w = sound_w_callback;
	chip->sound_r = sound_r_callback;

	/* create the initial regions */
	update_memory_mapping(cpu->machine, chip, 0);

	state_save_register_item_array(cpu->machine, "segaic16_mapper", NULL, 0, chip->regs);
}
예제 #19
0
static void AY8910_statesave(struct AY8910 *PSG, int sndindex)
{
	state_save_register_item("AY8910", sndindex, PSG->register_latch);
	state_save_register_item_array("AY8910", sndindex, PSG->Regs);
	state_save_register_item("AY8910", sndindex, PSG->lastEnable);

	state_save_register_item("AY8910", sndindex, PSG->PeriodA);
	state_save_register_item("AY8910", sndindex, PSG->PeriodB);
	state_save_register_item("AY8910", sndindex, PSG->PeriodC);
	state_save_register_item("AY8910", sndindex, PSG->PeriodN);
	state_save_register_item("AY8910", sndindex, PSG->PeriodE);

	state_save_register_item("AY8910", sndindex, PSG->CountA);
	state_save_register_item("AY8910", sndindex, PSG->CountB);
	state_save_register_item("AY8910", sndindex, PSG->CountC);
	state_save_register_item("AY8910", sndindex, PSG->CountN);
	state_save_register_item("AY8910", sndindex, PSG->CountE);

	state_save_register_item("AY8910", sndindex, PSG->VolA);
	state_save_register_item("AY8910", sndindex, PSG->VolB);
	state_save_register_item("AY8910", sndindex, PSG->VolC);
	state_save_register_item("AY8910", sndindex, PSG->VolE);

	state_save_register_item("AY8910", sndindex, PSG->EnvelopeA);
	state_save_register_item("AY8910", sndindex, PSG->EnvelopeB);
	state_save_register_item("AY8910", sndindex, PSG->EnvelopeC);

	state_save_register_item("AY8910", sndindex, PSG->OutputA);
	state_save_register_item("AY8910", sndindex, PSG->OutputB);
	state_save_register_item("AY8910", sndindex, PSG->OutputC);
	state_save_register_item("AY8910", sndindex, PSG->OutputN);

	state_save_register_item("AY8910", sndindex, PSG->CountEnv);
	state_save_register_item("AY8910", sndindex, PSG->Hold);
	state_save_register_item("AY8910", sndindex, PSG->Alternate);
	state_save_register_item("AY8910", sndindex, PSG->Attack);
	state_save_register_item("AY8910", sndindex, PSG->Holding);
	state_save_register_item("AY8910", sndindex, PSG->RNG);
}
예제 #20
0
파일: cop410.c 프로젝트: shangma/mame0112
/****************************************************************************
 * Initialize emulation
 ****************************************************************************/
static void cop410_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
	int i;

	memset(&R, 0, sizeof(R));
	R.G_mask = 0x0F;
	R.D_mask = 0x0F;

	for (i=0; i<256; i++) InstLen[i]=1;

	InstLen[0x60] = InstLen[0x61] = InstLen[0x68] = InstLen[0x69] = InstLen[0x33] = InstLen[0x23] = 2;

	for (i=0; i<256; i++) LBIops[i] = 0;
	for (i=0x08; i<0x10; i++) LBIops[i] = 1;
	for (i=0x18; i<0x20; i++) LBIops[i] = 1;
	for (i=0x28; i<0x30; i++) LBIops[i] = 1;
	for (i=0x38; i<0x40; i++) LBIops[i] = 1;

	state_save_register_item("cop410", index, PC);
	state_save_register_item("cop410", index, R.PREVPC);
	state_save_register_item("cop410", index, A);
	state_save_register_item("cop410", index, B);
	state_save_register_item("cop410", index, C);
	state_save_register_item("cop410", index, EN);
	state_save_register_item("cop410", index, G);
	state_save_register_item("cop410", index, Q);
	state_save_register_item("cop410", index, SA);
	state_save_register_item("cop410", index, SB);
	state_save_register_item("cop410", index, SIO);
	state_save_register_item("cop410", index, SKL);
	state_save_register_item("cop410", index, skip);
	state_save_register_item("cop410", index, skipLBI);
	state_save_register_item_array("cop410", index, R.RAM);
	state_save_register_item("cop410", index, R.G_mask);
	state_save_register_item("cop410", index, R.D_mask);
}
예제 #21
0
/* Generate interrupts */
static void Interrupt(void)
{
	/* the 6805 latches interrupt requests internally, so we don't clear */
	/* pending_interrupts until the interrupt is taken, no matter what the */
	/* external IRQ pin does. */

#if (HAS_HD63705)
	if( (m6805.pending_interrupts & (1<<HD63705_INT_NMI)) != 0)
	{
		PUSHWORD(m6805.pc);
		PUSHBYTE(m6805.x);
		PUSHBYTE(m6805.a);
		PUSHBYTE(m6805.cc);
        SEI;
		/* no vectors supported, just do the callback to clear irq_state if needed */
		if (m6805.irq_callback)
			(*m6805.irq_callback)(0);

		RM16( 0x1ffc, &pPC);
		change_pc(PC);
		m6805.pending_interrupts &= ~(1<<HD63705_INT_NMI);

		m6805_ICount -= 11;

	}
	else if( (m6805.pending_interrupts & ((1<<M6805_IRQ_LINE)|HD63705_INT_MASK)) != 0 ) {
		if ( (CC & IFLAG) == 0 ) {
#else
	if( (m6805.pending_interrupts & (1<<M6805_IRQ_LINE)) != 0 ) {
		if ( (CC & IFLAG) == 0 ) {
#endif
	{
        /* standard IRQ */
//#if (HAS_HD63705)
//      if(SUBTYPE!=SUBTYPE_HD63705)
//#endif
//          PC |= ~AMASK;
		PUSHWORD(m6805.pc);
		PUSHBYTE(m6805.x);
		PUSHBYTE(m6805.a);
		PUSHBYTE(m6805.cc);
        SEI;
		/* no vectors supported, just do the callback to clear irq_state if needed */
		if (m6805.irq_callback)
			(*m6805.irq_callback)(0);


#if (HAS_HD63705)
		if(SUBTYPE==SUBTYPE_HD63705)
		{
			/* Need to add emulation of other interrupt sources here KW-2/4/99 */
			/* This is just a quick patch for Namco System 2 operation         */

			if((m6805.pending_interrupts&(1<<HD63705_INT_IRQ1))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_IRQ1);
				RM16( 0x1ff8, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_IRQ2))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_IRQ2);
				RM16( 0x1fec, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_ADCONV))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_ADCONV);
				RM16( 0x1fea, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_TIMER1))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_TIMER1);
				RM16( 0x1ff6, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_TIMER2))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_TIMER2);
				RM16( 0x1ff4, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_TIMER3))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_TIMER3);
				RM16( 0x1ff2, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_PCI))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_PCI);
				RM16( 0x1ff0, &pPC);
				change_pc(PC);
			}
			else if((m6805.pending_interrupts&(1<<HD63705_INT_SCI))!=0)
			{
				m6805.pending_interrupts &= ~(1<<HD63705_INT_SCI);
				RM16( 0x1fee, &pPC);
				change_pc(PC);
			}
		}
		else
#endif
		{
			RM16( 0xffff - 5, &pPC );
			change_pc(PC);
		}

		}	// CC & IFLAG
			m6805.pending_interrupts &= ~(1<<M6805_IRQ_LINE);
		}
		m6805_ICount -= 11;
	}
}

static void state_register(const char *type, int index)
{
	state_save_register_item(type, index, A);
	state_save_register_item(type, index, PC);
	state_save_register_item(type, index, S);
	state_save_register_item(type, index, X);
	state_save_register_item(type, index, CC);
	state_save_register_item(type, index, m6805.pending_interrupts);
	state_save_register_item_array(type, index, m6805.irq_state);
}

static void m6805_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
	state_register("m6805", index);
	m6805.irq_callback = irqcallback;
}
예제 #22
0
void x76f041_init( int chip, UINT8 *data )
{
	int offset;
	struct x76f041_chip *c;

	if( chip >= X76F041_MAXCHIP )
	{
		verboselog( 0, "x76f041_init( %d ) chip out of range\n", chip );
		return;
	}

	c = &x76f041[ chip ];

	if( data == NULL )
	{
		data = auto_malloc(
			SIZE_RESPONSE_TO_RESET +
			SIZE_READ_PASSWORD +
			SIZE_WRITE_PASSWORD +
			SIZE_CONFIGURATION_PASSWORD +
			SIZE_CONFIGURATION_REGISTERS +
			SIZE_DATA );
	}

	c->cs = 0;
	c->rst = 0;
	c->scl = 0;
	c->sdaw = 0;
	c->sdar = 0;
	c->state = STATE_STOP;
	c->shift = 0;
	c->bit = 0;
	c->byte = 0;
	c->command = 0;
	c->address = 0;
	memset( c->write_buffer, 0, SIZE_WRITE_BUFFER );

	offset = 0;
	c->response_to_reset = &data[ offset ]; offset += SIZE_RESPONSE_TO_RESET;
	c->write_password = &data[ offset ]; offset += SIZE_WRITE_PASSWORD;
	c->read_password = &data[ offset ]; offset += SIZE_READ_PASSWORD;
	c->configuration_password = &data[ offset ]; offset += SIZE_CONFIGURATION_PASSWORD;
	c->configuration_registers = &data[ offset ]; offset += SIZE_CONFIGURATION_REGISTERS;
	c->data = &data[ offset ]; offset += SIZE_DATA;

	state_save_register_item( "x76f041", chip, c->cs );
	state_save_register_item( "x76f041", chip, c->rst );
	state_save_register_item( "x76f041", chip, c->scl );
	state_save_register_item( "x76f041", chip, c->sdaw );
	state_save_register_item( "x76f041", chip, c->sdar );
	state_save_register_item( "x76f041", chip, c->state );
	state_save_register_item( "x76f041", chip, c->shift );
	state_save_register_item( "x76f041", chip, c->bit );
	state_save_register_item( "x76f041", chip, c->byte );
	state_save_register_item( "x76f041", chip, c->command );
	state_save_register_item( "x76f041", chip, c->address );
	state_save_register_item_array( "x76f041", chip, c->write_buffer );
	state_save_register_item_pointer( "x76f041", chip, c->response_to_reset, SIZE_RESPONSE_TO_RESET );
	state_save_register_item_pointer( "x76f041", chip, c->write_password, SIZE_WRITE_PASSWORD );
	state_save_register_item_pointer( "x76f041", chip, c->read_password, SIZE_READ_PASSWORD );
	state_save_register_item_pointer( "x76f041", chip, c->configuration_password, SIZE_CONFIGURATION_PASSWORD );
	state_save_register_item_pointer( "x76f041", chip, c->configuration_registers, SIZE_CONFIGURATION_REGISTERS );
	state_save_register_item_pointer( "x76f041", chip, c->data, SIZE_DATA );
}
예제 #23
0
void zs01_init( int chip, unsigned char *data, zs01_write_handler write, zs01_read_handler read, unsigned char *ds2401 )
{
	int offset;
	struct zs01_chip *c;

	if( chip >= ZS01_MAXCHIP )
	{
		verboselog( 0, "zs01_init( %d ) chip out of range\n", chip );
		return;
	}

	c = &zs01[ chip ];

	if( data == NULL )
	{
		data = auto_malloc(
			SIZE_RESPONSE_TO_RESET +
			SIZE_KEY +
			SIZE_KEY +
			SIZE_DATA );
	}

	if( ds2401 == NULL )
	{
		ds2401 = auto_malloc( SIZE_DATA_BUFFER );
	}

	c->cs = 0;
	c->rst = 0;
	c->scl = 0;
	c->sdaw = 0;
	c->sdar = 0;
	c->state = STATE_STOP;
	c->shift = 0;
	c->bit = 0;
	c->byte = 0;
	memset( c->write_buffer, 0, SIZE_WRITE_BUFFER );
	memset( c->read_buffer, 0, SIZE_READ_BUFFER );
	memset( c->response_key, 0, SIZE_KEY );

	offset = 0;
	c->response_to_reset = &data[ offset ]; offset += SIZE_RESPONSE_TO_RESET;
	c->command_key = &data[ offset ]; offset += SIZE_KEY;
	c->data_key = &data[ offset ]; offset += SIZE_KEY;
	c->data = &data[ offset ]; offset += SIZE_DATA;
	c->ds2401 = ds2401;
	c->write = write;
	c->read = read;

	state_save_register_item( "zs01", chip, c->cs );
	state_save_register_item( "zs01", chip, c->rst );
	state_save_register_item( "zs01", chip, c->scl );
	state_save_register_item( "zs01", chip, c->sdaw );
	state_save_register_item( "zs01", chip, c->sdar );
	state_save_register_item( "zs01", chip, c->state );
	state_save_register_item( "zs01", chip, c->shift );
	state_save_register_item( "zs01", chip, c->bit );
	state_save_register_item( "zs01", chip, c->byte );
	state_save_register_item_array( "zs01", chip, c->write_buffer );
	state_save_register_item_array( "zs01", chip, c->read_buffer );
	state_save_register_item_array( "zs01", chip, c->response_key );
	state_save_register_item_pointer( "zs01", chip, c->response_to_reset, SIZE_RESPONSE_TO_RESET );
	state_save_register_item_pointer( "zs01", chip, c->command_key, SIZE_KEY );
	state_save_register_item_pointer( "zs01", chip, c->data_key, SIZE_DATA );
}