segaxbd.cpp: Too many watchdog resets; schematics may be wrong (nw)

This commit is contained in:
AJR 2017-04-16 15:21:12 -04:00
parent 0c7771ee02
commit 8ad2708f35
2 changed files with 15 additions and 3 deletions

View File

@ -59,6 +59,8 @@ void mb3773_device::device_reset()
void mb3773_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) void mb3773_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{ {
logerror("Reset caused by watchdog\n");
#if WATCHDOG_DEBUG #if WATCHDOG_DEBUG
machine().debug_break(); machine().debug_break();
#else #else

View File

@ -17,6 +17,10 @@
due to testing an out-of-bounds value due to testing an out-of-bounds value
* rascot is not working at all * rascot is not working at all
The After Burner schematics seem to show that the MB3773 clock input
is controlled only by PC6 on the first CXD1095. However, most games,
including aburner2, fail to periodically clear the watchdog timer
this way to prevent unwanted resets.
Sega X-Board System Overview Sega X-Board System Overview
Sega, 1987-1992 Sega, 1987-1992
@ -501,7 +505,7 @@ WRITE8_MEMBER(segaxbd_state::pc_0_w)
{ {
m_pc_0 = data; m_pc_0 = data;
// Output port: // Output ports according to After Burner schematics:
// D7: (Not connected) // D7: (Not connected)
// D6: (/WDC) - watchdog reset // D6: (/WDC) - watchdog reset
// D5: Screen display (1= blanked, 0= displayed) // D5: Screen display (1= blanked, 0= displayed)
@ -822,9 +826,15 @@ void segaxbd_state::update_main_irqs()
m_maincpu->set_input_line(2, CLEAR_LINE); m_maincpu->set_input_line(2, CLEAR_LINE);
if (m_vblank_irq_state) if (m_vblank_irq_state)
{
irq |= 4; irq |= 4;
m_watchdog->write_line_ck(0);
}
else else
{
m_maincpu->set_input_line(4, CLEAR_LINE); m_maincpu->set_input_line(4, CLEAR_LINE);
m_watchdog->write_line_ck(1);
}
if (m_gprider_hack && irq > 4) if (m_gprider_hack && irq > 4)
irq = 4; irq = 4;
@ -1699,13 +1709,13 @@ static MACHINE_CONFIG_FRAGMENT( xboard )
MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_subx") MCFG_SEGA_315_5250_COMPARE_TIMER_ADD("cmptimer_subx")
MCFG_DEVICE_ADD("iochip_0", CXD1095, 0) MCFG_DEVICE_ADD("iochip_0", CXD1095, 0) // IC160
MCFG_CXD1095_IN_PORTA_CB(IOPORT("IO0PORTA")) MCFG_CXD1095_IN_PORTA_CB(IOPORT("IO0PORTA"))
MCFG_CXD1095_IN_PORTB_CB(IOPORT("IO0PORTB")) MCFG_CXD1095_IN_PORTB_CB(IOPORT("IO0PORTB"))
MCFG_CXD1095_OUT_PORTC_CB(WRITE8(segaxbd_state, pc_0_w)) MCFG_CXD1095_OUT_PORTC_CB(WRITE8(segaxbd_state, pc_0_w))
MCFG_CXD1095_OUT_PORTD_CB(WRITE8(segaxbd_state, pd_0_w)) MCFG_CXD1095_OUT_PORTD_CB(WRITE8(segaxbd_state, pd_0_w))
MCFG_DEVICE_ADD("iochip_1", CXD1095, 0) MCFG_DEVICE_ADD("iochip_1", CXD1095, 0) // IC159
MCFG_CXD1095_IN_PORTA_CB(IOPORT("IO1PORTA")) MCFG_CXD1095_IN_PORTA_CB(IOPORT("IO1PORTA"))
MCFG_CXD1095_IN_PORTB_CB(IOPORT("IO1PORTB")) MCFG_CXD1095_IN_PORTB_CB(IOPORT("IO1PORTB"))
MCFG_CXD1095_IN_PORTC_CB(IOPORT("IO1PORTC")) MCFG_CXD1095_IN_PORTC_CB(IOPORT("IO1PORTC"))