Esempio n. 1
0
void hmcs40_cpu_device::device_start()
{
	m_program = &space(AS_PROGRAM);
	m_data = &space(AS_DATA);
	m_prgmask = (1 << m_prgwidth) - 1;
	m_datamask = (1 << m_datawidth) - 1;
	m_pcmask = (1 << m_pcwidth) - 1;

	m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hmcs40_cpu_device::simple_timer_cb), this));
	reset_prescaler();

	// resolve callbacks
	m_read_r0.resolve_safe(m_polarity & 0xf);
	m_read_r1.resolve_safe(m_polarity & 0xf);
	m_read_r2.resolve_safe(m_polarity & 0xf);
	m_read_r3.resolve_safe(m_polarity & 0xf);
	m_read_r4.resolve_safe(m_polarity & 0xf);
	m_read_r5.resolve_safe(m_polarity & 0xf);
	m_read_r6.resolve_safe(m_polarity & 0xf);
	m_read_r7.resolve_safe(m_polarity & 0xf);

	m_write_r0.resolve_safe();
	m_write_r1.resolve_safe();
	m_write_r2.resolve_safe();
	m_write_r3.resolve_safe();
	m_write_r4.resolve_safe();
	m_write_r5.resolve_safe();
	m_write_r6.resolve_safe();
	m_write_r7.resolve_safe();

	m_read_d.resolve_safe(m_polarity);
	m_write_d.resolve_safe();

	// zerofill
	memset(m_stack, 0, sizeof(m_stack));
	m_op = 0;
	m_prev_op = 0;
	m_i = 0;
	m_eint_line = 0;
	m_halt = 0;
	m_pc = 0;
	m_prev_pc = 0;
	m_page = 0;
	m_a = 0;
	m_b = 0;
	m_x = 0;
	m_spx = 0;
	m_y = 0;
	m_spy = 0;
	m_s = 1;
	m_c = 0;
	m_tc = 0;
	m_cf = 0;
	m_ie = 0;
	m_iri = m_irt = 0;
	memset(m_if, 0, sizeof(m_if));
	m_tf = 0;
	memset(m_int, 0, sizeof(m_int));
	memset(m_r, 0, sizeof(m_r));
	m_d = 0;

	// register for savestates
	save_item(NAME(m_stack));
	save_item(NAME(m_op));
	save_item(NAME(m_prev_op));
	save_item(NAME(m_i));
	save_item(NAME(m_eint_line));
	save_item(NAME(m_halt));
	save_item(NAME(m_timer_halted_remain));
	save_item(NAME(m_pc));
	save_item(NAME(m_prev_pc));
	save_item(NAME(m_page));
	save_item(NAME(m_a));
	save_item(NAME(m_b));
	save_item(NAME(m_x));
	save_item(NAME(m_spx));
	save_item(NAME(m_y));
	save_item(NAME(m_spy));
	save_item(NAME(m_s));
	save_item(NAME(m_c));
	save_item(NAME(m_tc));
	save_item(NAME(m_cf));
	save_item(NAME(m_ie));
	save_item(NAME(m_iri));
	save_item(NAME(m_irt));
	save_item(NAME(m_if));
	save_item(NAME(m_tf));
	save_item(NAME(m_int));

	save_item(NAME(m_r));
	save_item(NAME(m_d));

	// register state for debugger
	state_add(HMCS40_PC,  "PC",  m_pc).formatstr("%04X");
	state_add(HMCS40_A,   "A",   m_a).formatstr("%01X");
	state_add(HMCS40_B,   "B",   m_b).formatstr("%01X");
	state_add(HMCS40_X,   "X",   m_x).formatstr("%01X");
	state_add(HMCS40_SPX, "SPX", m_spx).formatstr("%01X");
	state_add(HMCS40_Y,   "Y",   m_y).formatstr("%01X");
	state_add(HMCS40_SPY, "SPY", m_spy).formatstr("%01X");

	state_add(STATE_GENPC, "curpc", m_pc).formatstr("%04X").noshow();
	state_add(STATE_GENFLAGS, "GENFLAGS", m_s).formatstr("%2s").noshow();

	m_icountptr = &m_icount;
}
Esempio n. 2
0
File: lamp.c Progetto: dstndstn/avr
int main(void) {
	//uint i;

    /* Timer 1 is 10-bit PWM. */
    TCCR1A = _BV(WGM10) | _BV(WGM11) | _BV(COM1A1);
	/* Use clock input. */
    TCCR1B |= _BV(CS10);
	// clock/1024
	//TCCR1B = _BV(CS12) | _BV(CS10);
	// clock/64
	//TCCR1B = _BV(CS11) | _BV(CS10);

    /* Turn out the light, turn out the light.... */
    LIGHT = light = 0;

    /* Enable OC1 as output. */
    DDROC = _BV(OC1);

	/* Enable timer 1 overflow interrupt. */
    TIMSK1 = _BV(TOIE1);

	// Timer 0: 8-bit CTC-mode counter.
	TCCR0A = _BV(WGM01);
	// clock/1024
	TCCR0B |= _BV(CS02) | _BV(CS00);
	// TCNT0, OCR0A, OCR0B
	// Set output compare value:
	OCR0A = PERIOD1;

	// Enable timer 0 output compare match interrupt A
	TIMSK0 |= _BV(OCIE0A);

	/* Set dim port inputs & pull-ups. */
	DIM_DIR &= ~(_BV(DIM_UP) | _BV(DIM_DOWN));
	DIM_PORT |= (_BV(DIM_UP) | _BV(DIM_DOWN));

	/* Set correction port inputs & pull-ups */
	/*
	  CORR_DIR &= ~(_BV(CORR_UP) | _BV(CORR_DOWN));
	  CORR_PORT |= (_BV(CORR_UP) | _BV(CORR_DOWN));
	*/

	/* Set time-setting ports to input, and set pull-ups. */
	TIMEUP_DIR  &= ~(_BV(TIME_UP));
	TIMEDN_DIR  &= ~(_BV(TIME_DN));
	TIMEUP_PORT  |= _BV(TIME_UP);
	TIMEDN_PORT  |= _BV(TIME_DN);

	/* Set pin-changed interrupt for time-setting buttons. */
	PCICR  |= PCI_IE_MASK;
	PCMSK0 |= PCI0_MASK;
	PCMSK1 |= PCI1_MASK;
	PCMSK2 |= PCI2_MASK;

	/* Set wake port to input with pull-up. */
	WAKE_DIR  &= ~(_BV(WAKE_BIT));
	WAKE_PORT |=   _BV(WAKE_BIT);

	/* Set alarm toggle port to input with pull-up. */
	ALARM_DIR  &= ~(_BV(ALARM_BIT));
	ALARM_PORT |=   _BV(ALARM_BIT);

	lcd_port_init();
	_delay_ms(20);
	lcd_full_reset();
	lcd_write_instr(LCD_CMD_FUNCTION |
					LCD_FUNCTION_4BITS | LCD_FUNCTION_2LINES | LCD_FUNCTION_FONT_5X8);
	lcd_write_instr(LCD_CMD_DISPLAY |
					LCD_DISPLAY_ON | LCD_CURSOR_ON | LCD_CURSOR_BLINK);
	lcd_write_instr(LCD_CMD_ENTRY | LCD_ENTRY_INC);
	lcd_write_instr(LCD_CMD_HOME);

	lcd_set_stdout();

	lcd_write_instr(LCD_CMD_DISPLAY | LCD_DISPLAY_ON);
	lcd_write_instr(LCD_CMD_CLEAR);

	correction = 590;

	// reset the counter.
	TCNT0 = 0;
	reset_prescaler();
	hours = minutes = 0;
	seconds = 0;

	wakehours = 7;
	wakeminutes = 0;

	timeup = timedn = 0;
	alarm_toggle = 0;

	hours = 6;
	minutes = 39;
	seconds = 45;

	setdelay = 0;

    sei();

	for (;;) {
        sleep_mode();
	}

	return 0;
}