mirror of
https://github.com/holub/mame
synced 2025-04-30 11:50:30 +03:00
simpsons: Correct video clocks [P. Bennett]
This commit is contained in:
parent
7d55466ca7
commit
b4a30b9c09
@ -173,9 +173,12 @@ void simpsons_state::device_timer(emu_timer &timer, device_timer_id id, int para
|
|||||||
case TIMER_NMI:
|
case TIMER_NMI:
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
|
||||||
break;
|
break;
|
||||||
case TIMER_DMAEND:
|
case TIMER_DMASTART:
|
||||||
if (m_firq_enabled)
|
if (m_firq_enabled)
|
||||||
m_maincpu->set_input_line(KONAMI_FIRQ_LINE, HOLD_LINE);
|
m_maincpu->set_input_line(KONAMI_FIRQ_LINE, ASSERT_LINE);
|
||||||
|
break;
|
||||||
|
case TIMER_DMAEND:
|
||||||
|
m_maincpu->set_input_line(KONAMI_FIRQ_LINE, CLEAR_LINE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw emu_fatalerror("Unknown id in simpsons_state::device_timer");
|
throw emu_fatalerror("Unknown id in simpsons_state::device_timer");
|
||||||
@ -313,8 +316,8 @@ INTERRUPT_GEN_MEMBER(simpsons_state::simpsons_irq)
|
|||||||
if (m_k053246->k053246_is_irq_enabled())
|
if (m_k053246->k053246_is_irq_enabled())
|
||||||
{
|
{
|
||||||
simpsons_objdma();
|
simpsons_objdma();
|
||||||
// 32+256us delay at 8MHz dotclock; artificially shortened since actual V-blank length is unknown
|
timer_set(attotime::from_ticks(256, XTAL(24'000'000)/4), TIMER_DMASTART);
|
||||||
timer_set(attotime::from_usec(30), TIMER_DMAEND);
|
timer_set(attotime::from_ticks(256+2048, XTAL(24'000'000)/4), TIMER_DMAEND);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,12 +338,19 @@ void simpsons_state::simpsons(machine_config &config)
|
|||||||
EEPROM_ER5911_8BIT(config, "eeprom");
|
EEPROM_ER5911_8BIT(config, "eeprom");
|
||||||
|
|
||||||
WATCHDOG_TIMER(config, "watchdog");
|
WATCHDOG_TIMER(config, "watchdog");
|
||||||
|
//So, the horizontal timing of simpsons is 16/32/16/320
|
||||||
|
//6MHz dot clock
|
||||||
|
//Vertical is 16/8/16/224
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
screen.set_raw(XTAL(24'000'000)/3, 528, 112, 400, 256, 16, 240);
|
|
||||||
// 6MHz dotclock is more realistic, however needs drawing updates. replace when ready
|
// Screen timings generated by the 051962, probably not programmable (except maybe between 6 amd 8MHz)
|
||||||
// screen.set_raw(XTAL(24'000'000)/4, 396, hbend, hbstart, 256, 16, 240);
|
// 6MHz dot clock
|
||||||
|
// horizontal: 16 cycles front porch, 32 cycles sync, 16 cycles back porch
|
||||||
|
// vertical: 16 lines front porch, 8 lines sync, 16 lines back porch
|
||||||
|
|
||||||
|
screen.set_raw(XTAL(24'000'000)/4, 384, 0, 320, 256, 0, 224);
|
||||||
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
|
screen.set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
|
||||||
screen.set_screen_update(FUNC(simpsons_state::screen_update_simpsons));
|
screen.set_screen_update(FUNC(simpsons_state::screen_update_simpsons));
|
||||||
screen.set_palette("palette");
|
screen.set_palette("palette");
|
||||||
@ -348,6 +358,7 @@ void simpsons_state::simpsons(machine_config &config)
|
|||||||
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows().enable_hilights();
|
PALETTE(config, "palette").set_format(palette_device::xBGR_555, 2048).enable_shadows().enable_hilights();
|
||||||
|
|
||||||
K052109(config, m_k052109, 0);
|
K052109(config, m_k052109, 0);
|
||||||
|
m_k052109->set_xy_offset(-96, -16);
|
||||||
m_k052109->set_palette("palette");
|
m_k052109->set_palette("palette");
|
||||||
m_k052109->set_screen("screen");
|
m_k052109->set_screen("screen");
|
||||||
m_k052109->set_tile_callback(FUNC(simpsons_state::tile_callback));
|
m_k052109->set_tile_callback(FUNC(simpsons_state::tile_callback));
|
||||||
@ -355,7 +366,7 @@ void simpsons_state::simpsons(machine_config &config)
|
|||||||
|
|
||||||
K053246(config, m_k053246, 0);
|
K053246(config, m_k053246, 0);
|
||||||
m_k053246->set_sprite_callback(FUNC(simpsons_state::sprite_callback));
|
m_k053246->set_sprite_callback(FUNC(simpsons_state::sprite_callback));
|
||||||
m_k053246->set_config(NORMAL_PLANE_ORDER, 53, 23);
|
m_k053246->set_config(NORMAL_PLANE_ORDER, -43, 39);
|
||||||
m_k053246->set_palette("palette");
|
m_k053246->set_palette("palette");
|
||||||
|
|
||||||
K053251(config, m_k053251, 0);
|
K053251(config, m_k053251, 0);
|
||||||
|
@ -32,6 +32,7 @@ private:
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TIMER_NMI,
|
TIMER_NMI,
|
||||||
|
TIMER_DMASTART,
|
||||||
TIMER_DMAEND
|
TIMER_DMAEND
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ WRITE8_MEMBER(simpsons_state::simpsons_eeprom_w)
|
|||||||
simpsons_video_banking(data & 0x03);
|
simpsons_video_banking(data & 0x03);
|
||||||
|
|
||||||
m_firq_enabled = data & 0x04;
|
m_firq_enabled = data & 0x04;
|
||||||
|
if (!m_firq_enabled)
|
||||||
|
m_maincpu->set_input_line(KONAMI_FIRQ_LINE, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -184,6 +184,8 @@ k052109_device::k052109_device(const machine_config &mconfig, const char *tag, d
|
|||||||
m_irq_enabled(0),
|
m_irq_enabled(0),
|
||||||
m_romsubbank(0),
|
m_romsubbank(0),
|
||||||
m_scrollctrl(0),
|
m_scrollctrl(0),
|
||||||
|
m_dx(0),
|
||||||
|
m_dy(0),
|
||||||
m_char_rom(*this, DEVICE_SELF),
|
m_char_rom(*this, DEVICE_SELF),
|
||||||
m_k052109_cb(*this),
|
m_k052109_cb(*this),
|
||||||
m_irq_handler(*this),
|
m_irq_handler(*this),
|
||||||
@ -248,8 +250,12 @@ void k052109_device::device_start()
|
|||||||
m_tilemap[1]->set_transparent_pen(0);
|
m_tilemap[1]->set_transparent_pen(0);
|
||||||
m_tilemap[2]->set_transparent_pen(0);
|
m_tilemap[2]->set_transparent_pen(0);
|
||||||
|
|
||||||
m_tilemap[1]->set_scrolldx(6, 6);
|
m_tilemap[0]->set_scrolldx(m_dx, m_dx);
|
||||||
m_tilemap[2]->set_scrolldx(6, 6);
|
m_tilemap[1]->set_scrolldx(m_dx+6, m_dx+6);
|
||||||
|
m_tilemap[2]->set_scrolldx(m_dx+6, m_dx+6);
|
||||||
|
m_tilemap[0]->set_scrolldy(m_dy, m_dy);
|
||||||
|
m_tilemap[1]->set_scrolldy(m_dy, m_dy);
|
||||||
|
m_tilemap[2]->set_scrolldy(m_dy, m_dy);
|
||||||
|
|
||||||
save_pointer(NAME(m_ram), 0x6000);
|
save_pointer(NAME(m_ram), 0x6000);
|
||||||
save_item(NAME(m_rmrd_line));
|
save_item(NAME(m_rmrd_line));
|
||||||
@ -294,6 +300,12 @@ void k052109_device::device_post_load()
|
|||||||
DEVICE HANDLERS
|
DEVICE HANDLERS
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
|
void k052109_device::set_xy_offset(int dx, int dy)
|
||||||
|
{
|
||||||
|
m_dx = dx;
|
||||||
|
m_dy = dy;
|
||||||
|
}
|
||||||
|
|
||||||
void k052109_device::vblank_callback(screen_device &screen, bool state)
|
void k052109_device::vblank_callback(screen_device &screen, bool state)
|
||||||
{
|
{
|
||||||
if (state && m_irq_enabled)
|
if (state && m_irq_enabled)
|
||||||
|
@ -58,6 +58,8 @@ public:
|
|||||||
|
|
||||||
void vblank_callback(screen_device &screen, bool state);
|
void vblank_callback(screen_device &screen, bool state);
|
||||||
|
|
||||||
|
void set_xy_offset(int dx, int dy);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// device-level overrides
|
// device-level overrides
|
||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
@ -86,6 +88,8 @@ private:
|
|||||||
uint8_t m_irq_enabled;
|
uint8_t m_irq_enabled;
|
||||||
uint8_t m_romsubbank, m_scrollctrl;
|
uint8_t m_romsubbank, m_scrollctrl;
|
||||||
|
|
||||||
|
int m_dx, m_dy;
|
||||||
|
|
||||||
optional_region_ptr<uint8_t> m_char_rom;
|
optional_region_ptr<uint8_t> m_char_rom;
|
||||||
|
|
||||||
tile_delegate m_k052109_cb;
|
tile_delegate m_k052109_cb;
|
||||||
|
Loading…
Reference in New Issue
Block a user