コード例 #1
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
// TODO add support for sense status
void pit68230_device::wr_pitreg_pbcr(uint8_t data)
{
	LOG("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, tag(), FUNCNAME, data);
	m_pbcr = data;
	if ((m_pgcr & REG_PGCR_H34_ENABLE) || ((m_pbcr & REG_PBCR_SUBMODE_MASK) == REG_PBCR_SUBMODE_1X))
	{
		if (m_pbcr & REG_PBCR_H4_CTRL_IN_OUT)
		{
			switch(m_pbcr & REG_PBCR_H4_CTRL_MASK)
			{
			case REG_PBCR_H4_CTRL_OUT_00:
				LOG(" - H4 cleared\n");
				m_h4_out_cb(CLEAR_LINE);
				break;
			case REG_PBCR_H4_CTRL_OUT_01:
				LOG(" - H4 asserted\n");
				m_h4_out_cb(ASSERT_LINE);
				break;
			case REG_PBCR_H4_CTRL_OUT_10:
				LOGSETUP(" - interlocked handshake not implemented\n");
				break;
			case REG_PBCR_H4_CTRL_OUT_11:
				LOGSETUP(" - pulsed handshake not implemented\n");
				break;
			default: logerror(("Undefined H4 mode, broken driver - please report!\n"));
			}
		}
	}
	else
	{
		LOG(" - H4 cleared because being disabled in PGCR\n");
		m_h4_out_cb(CLEAR_LINE);
	}
}
コード例 #2
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
void pit68230_device::wr_pitreg_psrr(uint8_t data)
{
	LOG("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, tag(), FUNCNAME, data);
	LOGSETUP("PSSR - %s pin activated,", data & 0x40 ? "DMA" : "PC4");
	LOGSETUP(" %s pin support %s interrupts,", data & 0x80 ? "PIRQ" : "PC5",
			  data & 0x08 ? "no" : (data & 0x10 ? "vectored" : "autovectored" ) );
	LOGSETUP(" H prio mode:%d\n", data & 0x03 );

	m_psrr = data;
}
コード例 #3
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
void pit68230_device::wr_pitreg_pgcr(uint8_t data)
{
	LOG("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, tag(), FUNCNAME, data);
	LOGSETUP("PGCR  - Mode %d,", (data >> 6) & 3 );
	LOGSETUP(" H34:%s, H12:%s,", (data & 0x20) ? "enabled" : "disabled", (data & 0x10) ? "enabled" : "disabled" );
	LOGSETUP(" Sense assert H4:%s, H3:%s, H2:%s, H1:%s\n",
			  data & 0x04 ? "Hi" : "Lo", data & 0x03 ? "Hi" : "Lo",
			  data & 0x02 ? "Hi" : "Lo", data & 0x01 ? "Hi" : "Lo");
	m_pgcr = data;
}
コード例 #4
0
ファイル: z80sio.cpp プロジェクト: Robbbert/store1
//-------------------------------------------------
//  control_write - write control register
//-------------------------------------------------
void z80sio_channel::control_write(uint8_t data)
{
	uint8_t   reg = m_wr0 & WR0_REGISTER_MASK;

	if (reg != 0)
	{
		LOGSETUP(" * %s %c Reg %02x <- %02x \n", m_owner->tag(), 'A' + m_index, reg, data);
		// mask out register index
		m_wr0 &= ~WR0_REGISTER_MASK;
	}

	LOG("\n%s(%02x) reg %02x\n", FUNCNAME, data, reg);

	switch (reg)
	{
	case REG_WR0_COMMAND_REGPT:     do_sioreg_wr0(data); break;
	case REG_WR1_INT_DMA_ENABLE:    do_sioreg_wr1(data); m_uart->check_interrupts(); break;
	case REG_WR2_INT_VECTOR:        do_sioreg_wr2(data); break;
	case REG_WR3_RX_CONTROL:        do_sioreg_wr3(data); update_serial(); break;
	case REG_WR4_RX_TX_MODES:       do_sioreg_wr4(data); update_serial(); break;
	case REG_WR5_TX_CONTROL:        do_sioreg_wr5(data); update_serial(); update_rts(); break;
	case REG_WR6_SYNC_OR_SDLC_A:    do_sioreg_wr6(data); break;
	case REG_WR7_SYNC_OR_SDLC_F:    do_sioreg_wr7(data); break;
	default:
		logerror("Z80SIO \"%s\" Channel %c : Unsupported WRx register:%02x\n", m_owner->tag(), 'A' + m_index, reg);
	}
}
コード例 #5
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
//-------------------------------------------------
//  device_reset - device-specific reset
//-------------------------------------------------
void pit68230_device::device_reset ()
{
	LOGSETUP("%s %s \n",tag(), FUNCNAME);

	m_pgcr = 0;
	m_psrr = 0;
	m_paddr = 0;
	m_pbddr = 0;
	m_pcddr = 0;
	m_pivr = 0x0f;  m_pirq_out_cb(CLEAR_LINE);
	m_pacr = 0; m_h2_out_cb(CLEAR_LINE);
	m_pbcr = 0; m_h4_out_cb(CLEAR_LINE);
	m_padr = 0; m_pa_out_cb((offs_t)0, m_padr);
	m_pbdr = 0; m_pb_out_cb((offs_t)0, m_pbdr);
	m_pcdr = 0; m_pc_out_cb((offs_t)0, m_pcdr);
	m_psr = 0;
	m_tcr = 0;
	m_tivr = 0x0f; m_tirq_out_cb(CLEAR_LINE);
	m_tsr = 0;
	LOGSETUP("%s %s DONE!\n",tag(), FUNCNAME);
}
コード例 #6
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
//-------------------------------------------------
//  device_start - device-specific startup
//-------------------------------------------------
void pit68230_device::device_start ()
{
	LOGSETUP("%s\n", FUNCNAME);

	// NOTE:
	// Not using resolve_safe for the m_px_in_cb's is a temporary way to be able to check
	// if a handler is installed with isnull(). The safe function installs a dummy default
	// handler which disable the isnull() test. TODO: Need a better fix?

	// resolve callbacks Port A
	m_pa_out_cb.resolve_safe();
	m_pa_in_cb.resolve();

	// resolve callbacks Port B
	m_pb_out_cb.resolve_safe();
	m_pb_in_cb.resolve();

	// resolve callbacks Port C
	m_pc_out_cb.resolve_safe();
	m_pc_in_cb.resolve();

	m_h1_out_cb.resolve_safe();
	m_h2_out_cb.resolve_safe();
	m_h3_out_cb.resolve_safe();
	m_h4_out_cb.resolve_safe();

	m_tirq_out_cb.resolve_safe();
	m_pirq_out_cb.resolve_safe();

	// Timers
	pit_timer = timer_alloc(TIMER_ID_PIT);

	// state saving
	save_item(NAME(m_pgcr));
	save_item(NAME(m_psrr));
	save_item(NAME(m_paddr));
	save_item(NAME(m_pbddr));
	save_item(NAME(m_pcddr));
	save_item(NAME(m_pivr));
	save_item(NAME(m_pacr));
	save_item(NAME(m_pbcr));
	save_item(NAME(m_padr));
	save_item(NAME(m_pbdr));
	save_item(NAME(m_pcdr));
	save_item(NAME(m_psr));
	save_item(NAME(m_tcr));
	save_item(NAME(m_tivr));
	save_item(NAME(m_cpr));
	save_item(NAME(m_cntr));
	save_item(NAME(m_tsr));
}
コード例 #7
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
void pit68230_device::wr_pitreg_pacr(uint8_t data)
{
	LOG("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, tag(), FUNCNAME, data);
	LOGSETUP("%s PACR", tag());
	m_pacr = data;
	// callbacks
	/*PACR in Mode 0
	 * 5 43  H2 Control in Submode 00 && 01
	 * ------------------------------------
	 * 0 XX  Input pin  - edge-sensitive status input, H2S is set on an asserted edge.
	 * 1 00  Output pin - negated, H2S is always clear.
	 * 1 01  Output pin - asserted, H2S is always clear.
	 * 1 10  Output pin - interlocked input handshake protocol, H2S is always clear.
	 * 1 11  Output pin - pulsed input handshake protocol, H2S is always clear.
	 *
	 * 5 43  H2 Control in Submode 1x
	 * ------------------------------------
	 * 0 XX  Input pin  - edge-sensitive status input, H2S is set on an asserted edge.
	 * 1 X0  Output pin - negated, H2S is always cleared.
	 * 1 X1  Output pin - asserted, H2S is always cleared.
	 */
	if (m_pgcr & REG_PGCR_H12_ENABLE)
	{
		if (m_pacr & REG_PACR_H2_CTRL_IN_OUT)
		{
			switch(m_pacr & REG_PACR_H2_CTRL_MASK)
			{
			case REG_PACR_H2_CTRL_OUT_00:
				LOGSETUP(" - H2 cleared\n");
				m_h2_out_cb(CLEAR_LINE);
				break;
			case REG_PACR_H2_CTRL_OUT_01:
				LOGSETUP(" - H2 asserted\n");
				m_h2_out_cb(ASSERT_LINE);
				break;
			case REG_PACR_H2_CTRL_OUT_10:
				LOGSETUP(" - interlocked handshake not implemented\n");
				break;
			case REG_PACR_H2_CTRL_OUT_11:
				LOGSETUP(" - pulsed handshake not implemented\n");
				break;
			default: logerror(("Undefined H2 mode, broken driver - please report!\n"));
			}
		}
	}
	else
	{
		LOGSETUP(" - H2 cleared because being disabled in PGCR\n");
		m_h2_out_cb(CLEAR_LINE);
	}
}
コード例 #8
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
void pit68230_device::wr_pitreg_pcddr(uint8_t data)
{
	LOG("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, tag(), FUNCNAME, data);
	LOGSETUP("%s PCDDR: %02x\n", tag(), data);
	m_pcddr = data;
}
コード例 #9
0
ファイル: 68230pit.cpp プロジェクト: Tauwasser/mame
void pit68230_device::wr_pitreg_pbddr(uint8_t data)
{
	LOGSETUP("%s PBDDR: %02x\n", tag(), data);
	m_pbddr = data;
}