Previous 199869 Revisions Next

r20413 Wednesday 23rd January, 2013 at 15:38:14 UTC by Angelo Salese
(MESS) Added force_resynch on master/slave communication buffer, fixes at least Ichidant-R booting
[src/mame/drivers]saturn.c
[src/mame/includes]stv.h

trunk/src/mame/drivers/saturn.c
r20412r20413
11751175   PORT_CONFSETTING(0x70,"Megadrive 6B Pad")
11761176   PORT_CONFSETTING(0x80,"Saturn Mouse")
11771177   PORT_CONFSETTING(0x90,"<unconnected>")
1178
1179   PORT_START("fake")
1180   PORT_CONFNAME(0x01,0x01,"Master-Slave Comms Hack")
1181   PORT_CONFSETTING(0x00,"No")
1182   PORT_CONFSETTING(0x01,"Yes")
11781183INPUT_PORTS_END
11791184
11801185#define STV_PLAYER_INPUTS(_n_, _b1_, _b2_, _b3_,_b4_)                       \
r20412r20413
23482353MACHINE_CONFIG_END
23492354
23502355
2356/* we use a clever hack here. Basically 0x60ffc13 is used for master slave comms, synching there should avoid crashes in several spots. */
2357READ32_MEMBER(saturn_state::workram_h_comms_r)
2358{
2359   if(m_fake_comms->read() & 1)
2360      machine().scheduler().synchronize(); // force resync
2361
2362   return m_workram_h[0x0ffc10/4];
2363}
2364
2365WRITE32_MEMBER(saturn_state::workram_h_comms_w)
2366{
2367   if(m_fake_comms->read() & 1)
2368      machine().scheduler().synchronize(); // force resync
2369
2370   COMBINE_DATA(&m_workram_h[0x0ffc10/4]);
2371}
2372
2373
23512374void saturn_state::saturn_init_driver(int rgn)
23522375{
23532376   m_saturn_region = rgn;
r20412r20413
23572380   sh2drc_set_options(machine().device("maincpu"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL);
23582381   sh2drc_set_options(machine().device("slave"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL);
23592382
2383   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x060ffc10, 0x060ffc13, read32_delegate(FUNC(saturn_state::workram_h_comms_r),this));
2384   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x060ffc10, 0x060ffc13, write32_delegate(FUNC(saturn_state::workram_h_comms_w),this));
2385   machine().device("slave")->memory().space(AS_PROGRAM).install_read_handler(0x060ffc10, 0x060ffc13, read32_delegate(FUNC(saturn_state::workram_h_comms_r),this));
2386   machine().device("slave")->memory().space(AS_PROGRAM).install_write_handler(0x060ffc10, 0x060ffc13, write32_delegate(FUNC(saturn_state::workram_h_comms_w),this));
2387
23602388   /* amount of time to boost interleave for on MINIT / SINIT, needed for communication to work */
23612389   m_minit_boost = 400;
23622390   m_sinit_boost = 400;
trunk/src/mame/includes/stv.h
r20412r20413
77      : driver_device(mconfig, type, tag),
88         m_workram_l(*this, "workram_l"),
99         m_workram_h(*this, "workram_h"),
10         m_sound_ram(*this, "sound_ram") { }
10         m_sound_ram(*this, "sound_ram"),
11         m_fake_comms(*this, "fake")
12         { }
1113
1214   required_shared_ptr<UINT32> m_workram_l;
1315   required_shared_ptr<UINT32> m_workram_h;
16   required_shared_ptr<UINT16> m_sound_ram;
17   optional_ioport m_fake_comms;
18
1419   UINT8     *m_backupram;
1520   UINT8     *m_cart_backupram;
1621   UINT32    *m_scu_regs;
17   required_shared_ptr<UINT16> m_sound_ram;
1822   UINT16    *m_scsp_regs;
1923   UINT16    *m_vdp2_regs;
2024   UINT32    *m_vdp2_vram;
r20412r20413
2529   UINT8     m_NMI_reset;
2630   UINT8     m_en_68k;
2731
32
2833   struct {
2934      UINT32    src[3];       /* Source DMA lv n address*/
3035      UINT32    dst[3];       /* Destination DMA lv n address*/
r20412r20413
228233   DECLARE_WRITE32_MEMBER(saturn_cart_dram1_w);
229234   DECLARE_READ32_MEMBER(saturn_cs1_r);
230235   DECLARE_WRITE32_MEMBER(saturn_cs1_w);
236   DECLARE_READ32_MEMBER(workram_h_comms_r);
237   DECLARE_WRITE32_MEMBER(workram_h_comms_w);
231238   WRITE_LINE_MEMBER(scsp_to_main_irq);
232239   void saturn_init_driver(int rgn);
233240

Previous 199869 Revisions Next


© 1997-2024 The MAME Team