trunk/src/mame/drivers/saturn.c
| r20412 | r20413 | |
| 1175 | 1175 | PORT_CONFSETTING(0x70,"Megadrive 6B Pad") |
| 1176 | 1176 | PORT_CONFSETTING(0x80,"Saturn Mouse") |
| 1177 | 1177 | 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") |
| 1178 | 1183 | INPUT_PORTS_END |
| 1179 | 1184 | |
| 1180 | 1185 | #define STV_PLAYER_INPUTS(_n_, _b1_, _b2_, _b3_,_b4_) \ |
| r20412 | r20413 | |
| 2348 | 2353 | MACHINE_CONFIG_END |
| 2349 | 2354 | |
| 2350 | 2355 | |
| 2356 | /* we use a clever hack here. Basically 0x60ffc13 is used for master slave comms, synching there should avoid crashes in several spots. */ |
| 2357 | READ32_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 | |
| 2365 | WRITE32_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 | |
| 2351 | 2374 | void saturn_state::saturn_init_driver(int rgn) |
| 2352 | 2375 | { |
| 2353 | 2376 | m_saturn_region = rgn; |
| r20412 | r20413 | |
| 2357 | 2380 | sh2drc_set_options(machine().device("maincpu"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL); |
| 2358 | 2381 | sh2drc_set_options(machine().device("slave"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL); |
| 2359 | 2382 | |
| 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 | |
| 2360 | 2388 | /* amount of time to boost interleave for on MINIT / SINIT, needed for communication to work */ |
| 2361 | 2389 | m_minit_boost = 400; |
| 2362 | 2390 | m_sinit_boost = 400; |
trunk/src/mame/includes/stv.h
| r20412 | r20413 | |
| 7 | 7 | : driver_device(mconfig, type, tag), |
| 8 | 8 | m_workram_l(*this, "workram_l"), |
| 9 | 9 | 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 | { } |
| 11 | 13 | |
| 12 | 14 | required_shared_ptr<UINT32> m_workram_l; |
| 13 | 15 | required_shared_ptr<UINT32> m_workram_h; |
| 16 | required_shared_ptr<UINT16> m_sound_ram; |
| 17 | optional_ioport m_fake_comms; |
| 18 | |
| 14 | 19 | UINT8 *m_backupram; |
| 15 | 20 | UINT8 *m_cart_backupram; |
| 16 | 21 | UINT32 *m_scu_regs; |
| 17 | | required_shared_ptr<UINT16> m_sound_ram; |
| 18 | 22 | UINT16 *m_scsp_regs; |
| 19 | 23 | UINT16 *m_vdp2_regs; |
| 20 | 24 | UINT32 *m_vdp2_vram; |
| r20412 | r20413 | |
| 25 | 29 | UINT8 m_NMI_reset; |
| 26 | 30 | UINT8 m_en_68k; |
| 27 | 31 | |
| 32 | |
| 28 | 33 | struct { |
| 29 | 34 | UINT32 src[3]; /* Source DMA lv n address*/ |
| 30 | 35 | UINT32 dst[3]; /* Destination DMA lv n address*/ |
| r20412 | r20413 | |
| 228 | 233 | DECLARE_WRITE32_MEMBER(saturn_cart_dram1_w); |
| 229 | 234 | DECLARE_READ32_MEMBER(saturn_cs1_r); |
| 230 | 235 | DECLARE_WRITE32_MEMBER(saturn_cs1_w); |
| 236 | DECLARE_READ32_MEMBER(workram_h_comms_r); |
| 237 | DECLARE_WRITE32_MEMBER(workram_h_comms_w); |
| 231 | 238 | WRITE_LINE_MEMBER(scsp_to_main_irq); |
| 232 | 239 | void saturn_init_driver(int rgn); |
| 233 | 240 | |