From 9d7806ba6fed64d14563c6c5c30f1a61dc653a12 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Wed, 29 Aug 2012 15:56:17 +0000 Subject: [PATCH] Checkpoint --- src/emu/video/mb90092.c | 15 +++++++++-- src/emu/video/mb90092.h | 2 ++ src/mame/drivers/nss.c | 11 ++++---- src/mame/drivers/sfcbox.c | 53 +++++++++++++++++++++++++++++++-------- src/mame/includes/snes.h | 4 +-- src/mame/machine/snes.c | 1 + 6 files changed, 66 insertions(+), 20 deletions(-) diff --git a/src/emu/video/mb90092.c b/src/emu/video/mb90092.c index f38199522e2..65a1bf318bb 100644 --- a/src/emu/video/mb90092.c +++ b/src/emu/video/mb90092.c @@ -128,6 +128,17 @@ void mb90092_device::device_reset() // READ/WRITE HANDLERS //************************************************************************** +WRITE_LINE_MEMBER( mb90092_device::set_cs_line ) +{ + m_reset_line = state; + + if(m_reset_line != CLEAR_LINE) + { + // ... + } +} + + WRITE8_MEMBER( mb90092_device::write ) { UINT16 dat; @@ -143,11 +154,11 @@ WRITE8_MEMBER( mb90092_device::write ) dat = ((m_cmd_param & 7)<<7) | (data & 0x7f); switch(m_cmd) { - case 0x80: // preset VRAM address + case 0x80: // Preset VRAM address m_osd_addr = dat; //printf("%04x %d %d\n",m_osd_addr,(m_osd_addr & 0x1f),(m_osd_addr & 0x1e0) >> 5); break; - case 0x90: // write Character + case 0x90: // Write Character int x,y; x = (m_osd_addr & 0x1f); y = (m_osd_addr & 0x1e0) >> 5; diff --git a/src/emu/video/mb90092.h b/src/emu/video/mb90092.h index 0a30051d39f..af6e4e69070 100644 --- a/src/emu/video/mb90092.h +++ b/src/emu/video/mb90092.h @@ -41,6 +41,7 @@ public: // I/O operations DECLARE_WRITE8_MEMBER( write ); + WRITE_LINE_MEMBER( set_cs_line ); UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual const rom_entry *device_rom_region() const; @@ -56,6 +57,7 @@ private: UINT8 m_cmd_ff; UINT8 m_cmd,m_cmd_param; UINT16 m_osd_addr; + UINT8 m_reset_line; inline UINT16 read_word(offs_t address); inline void write_word(offs_t address, UINT16 data); diff --git a/src/mame/drivers/nss.c b/src/mame/drivers/nss.c index 0a885170937..affba5ee550 100644 --- a/src/mame/drivers/nss.c +++ b/src/mame/drivers/nss.c @@ -856,24 +856,23 @@ static MACHINE_CONFIG_DERIVED( nss, snes ) MCFG_CPU_IO_MAP(bios_io_map) MCFG_CPU_VBLANK_INT("screen", nss_vblank_irq) - MCFG_M50458_ADD("m50458",m50458_intf,4000000) /* TODO: clock */ + MCFG_M50458_ADD("m50458",m50458_intf,4000000) /* TODO: correct clock */ MCFG_S3520CF_ADD("s3520cf") /* RTC */ MCFG_RP5H01_ADD("rp5h01") MCFG_M6M80011AP_ADD("m6m80011ap") - /* TODO: the screen should actually superimpose, but for the time being let's just separate outputs for now */ - MCFG_DEFAULT_LAYOUT(layout_dualhsxs) - + MCFG_MACHINE_START( nss ) MCFG_MACHINE_RESET( nss ) + /* TODO: the screen should actually superimpose, but for the time being let's just separate outputs */ + MCFG_DEFAULT_LAYOUT(layout_dualhsxs) + MCFG_SCREEN_ADD("osd", RASTER) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) MCFG_SCREEN_SIZE(24*12+22, 12*18+22) MCFG_SCREEN_VISIBLE_AREA(0*8, 24*12-1, 0*8, 12*18-1) MCFG_SCREEN_UPDATE_DRIVER(nss_state,screen_update) - - MCFG_MACHINE_START( nss ) MACHINE_CONFIG_END /*************************************************************************** diff --git a/src/mame/drivers/sfcbox.c b/src/mame/drivers/sfcbox.c index 05a096d0820..b080c39e0b8 100644 --- a/src/mame/drivers/sfcbox.c +++ b/src/mame/drivers/sfcbox.c @@ -135,6 +135,8 @@ public: required_device m_mb90092; UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + DECLARE_WRITE8_MEMBER( port_81_w ); }; UINT32 sfcbox_state::screen_update( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ) @@ -179,13 +181,19 @@ static ADDRESS_MAP_START( sfcbox_map, AS_PROGRAM, 8, sfcbox_state ) AM_RANGE(0x60000, 0x67fff) AM_NOP // grom slot 1 ADDRESS_MAP_END +WRITE8_MEMBER( sfcbox_state::port_81_w ) +{ + device_set_input_line(m_maincpu, INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + device_set_input_line(m_soundcpu, INPUT_LINE_RESET, (data & 1) ? CLEAR_LINE : ASSERT_LINE); + ioport("OSD_CS")->write(data, 0xff); +} static ADDRESS_MAP_START( sfcbox_io, AS_IO, 8, sfcbox_state ) AM_RANGE(0x0b, 0x0b) AM_DEVWRITE("mb90092",mb90092_device,write) AM_RANGE(0x00, 0x3f) AM_RAM // internal i/o // AM_RANGE(0x80, 0x80) // Keyswitch and Button Inputs / SNES Transfer and Misc Output -// AM_RANGE(0x81, 0x81) // SNES Transfer and Misc Input / Misc Output + AM_RANGE(0x81, 0x81) AM_WRITE(port_81_w) // SNES Transfer and Misc Input / Misc Output // AM_RANGE(0x82, 0x82) // Unknown/unused // AM_RANGE(0x83, 0x83) // Joypad Input/Status / Joypad Output/Control // AM_RANGE(0x84, 0x84) // Joypad 1, MSB (1st 8 bits) (eg. Bit7=ButtonB, 0=Low=Pressed) @@ -199,6 +207,9 @@ ADDRESS_MAP_END static INPUT_PORTS_START( snes ) + PORT_START("OSD_CS") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("mb90092", mb90092_device, set_cs_line) + PORT_START("SERIAL1_DATA1_L") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Button A") PORT_PLAYER(1) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Button X") PORT_PLAYER(1) @@ -342,15 +353,38 @@ static MACHINE_CONFIG_START( snes, sfcbox_state ) MACHINE_CONFIG_END +static MACHINE_START( sfcbox ) +{ + sfcbox_state *state = machine.driver_data(); + + MACHINE_START_CALL(snes); + + state->m_is_sfcbox = 1; +} + +static MACHINE_RESET( sfcbox ) +{ + sfcbox_state *state = machine.driver_data(); + + MACHINE_RESET_CALL( snes ); + + /* start with both CPUs disabled */ + device_set_input_line(state->m_maincpu, INPUT_LINE_RESET, ASSERT_LINE); + device_set_input_line(state->m_soundcpu, INPUT_LINE_RESET, ASSERT_LINE); +} + static MACHINE_CONFIG_DERIVED( sfcbox, snes ) MCFG_CPU_ADD("bios", Z180, XTAL_12MHz / 2) /* HD64180RF6X */ MCFG_CPU_PROGRAM_MAP(sfcbox_map) MCFG_CPU_IO_MAP(sfcbox_io) - MCFG_MB90092_ADD("mb90092",XTAL_12MHz / 2) /* TODO: pixel clock */ + MCFG_MB90092_ADD("mb90092",XTAL_12MHz / 2) /* TODO: correct clock */ - /* TODO: the screen should actually superimpose, but for the time being let's just separate outputs for now */ + MCFG_MACHINE_START( sfcbox ) + MCFG_MACHINE_RESET( sfcbox ) + + /* TODO: the screen should actually superimpose, but for the time being let's just separate outputs */ MCFG_DEFAULT_LAYOUT(layout_dualhsxs) MCFG_SCREEN_ADD("osd", RASTER) @@ -375,6 +409,8 @@ MACHINE_CONFIG_END ROM_LOAD( "spc700.rom", 0x00, 0x40, CRC(44bb3a40) SHA1(97e352553e94242ae823547cd853eecda55c20f0) ) \ ROM_REGION( 0x10000, "krom", 0 ) \ ROM_LOAD( "krom1.ic1", 0x00000, 0x10000, CRC(c9010002) SHA1(f4c74086a83b728b1c1af3a021a60efa80eff5a4) ) \ + ROM_REGION( 0x100000, "user3", 0 ) \ + ROM_LOAD( "atrom-4s-0.rom5", 0x00000, 0x80000, CRC(ad3ec05c) SHA1(a3d336db585fe02a37c323422d9db6a33fd489a6) ) \ ROM_START( sfcbox ) @@ -386,13 +422,10 @@ ROM_END ROM_START( pss61 ) SFCBOX_BIOS - ROM_REGION( 0x100000, "atrom", 0 ) - ROM_LOAD( "atrom-4s-0.rom5", 0x00000, 0x80000, CRC(ad3ec05c) SHA1(a3d336db585fe02a37c323422d9db6a33fd489a6) ) - ROM_REGION( 0x8000, "grom", 0 ) ROM_LOAD( "grom1-1.ic1", 0x0000, 0x8000, CRC(333bf9a7) SHA1(5d0cd9ca29e5580c3eebe9f136839987c879f979) ) - ROM_REGION( 0x380000, "user3", 0 ) + ROM_REGION( 0x380000, "game", 0 ) ROM_LOAD( "shvc-mk-0.rom6", 0x000000, 0x080000, CRC(c8002453) SHA1(cbb853bf911255c1d8eb27cd34fc7855a0dda218) ) ROM_LOAD( "shvc-4m-1.rom3", 0x080000, 0x200000, CRC(91b28d56) SHA1(b83dd73d3d6049450bb8092d73c3af879804f58c) ) ROM_LOAD( "shvc-fo-1.ic20", 0x280000, 0x100000, CRC(ad668a41) SHA1(39ff7354a7fa02295c899b7a7ec3556998ac2636) ) /* Super FX hook needed for Star Fox */ @@ -404,7 +437,7 @@ ROM_START( pss62 ) ROM_REGION( 0x8000, "grom", 0 ) ROM_LOAD( "grom2-1.ic1", 0x0000, 0x8000, CRC(bcfc5642) SHA1(a96e52685bd3dcdf09d1b7acd6e1c1ab7726a640) ) - ROM_REGION( 0x180000, "user3", 0 ) + ROM_REGION( 0x180000, "game", 0 ) ROM_LOAD( "shvc-gc-0.rom1", 0x000000, 0x100000, CRC(b4fd7aff) SHA1(eb553b77418dedba25fc4d5dddcb04f424b0f6a9) ) ROM_LOAD( "shvc-2a-1.rom3", 0x100000, 0x080000, CRC(6b23e2e4) SHA1(684123a12ca1e31115bd6221d96f82461066877f) ) ROM_END @@ -415,7 +448,7 @@ ROM_START( pss63 ) ROM_REGION( 0x8000, "grom", 0 ) ROM_LOAD( "grom3-1.ic1", 0x0000, 0x8000, CRC(ebec4c1c) SHA1(d638ef1486b4c0b3d4d5b666929ca7947e16efad) ) - ROM_REGION( 0x500000, "user3", 0 ) + ROM_REGION( 0x500000, "game", 0 ) ROM_LOAD( "shvc-t2-1.rom3", 0x000000, 0x100000, CRC(4ae93c10) SHA1(5fa25d027940907b769578d7bf85a9d5ba94911a) ) ROM_LOAD( "shvc-8x-1.rom1", 0x100000, 0x400000, CRC(3adef543) SHA1(df02860e691fbee453e345dd343c08b6da08d4ea) ) ROM_END @@ -426,7 +459,7 @@ ROM_START( pss64 ) ROM_REGION( 0x8000, "grom", 0 ) ROM_LOAD( "grom4-1.ic1", 0x0000, 0x8000, NO_DUMP ) - ROM_REGION( 0x500000, "user3", 0 ) + ROM_REGION( 0x500000, "game", 0 ) ROM_LOAD( "shvc-m4-0.rom3", 0x000000, 0x100000, CRC(fb259f4f) SHA1(8faeb56f80e82dd042bdc84d19c526a979c6de8f) ) ROM_LOAD( "shvc-8x-1.rom1", 0x100000, 0x400000, CRC(3adef543) SHA1(df02860e691fbee453e345dd343c08b6da08d4ea) ) // Possibly reverse order : diff --git a/src/mame/includes/snes.h b/src/mame/includes/snes.h index 59fbb3168a1..65d07e5a2d8 100644 --- a/src/mame/includes/snes.h +++ b/src/mame/includes/snes.h @@ -427,12 +427,12 @@ public: UINT16 m_vtime; UINT16 m_vmadd; - /* HW flags */ + /* non-SNES HW-specific flags / variables */ UINT8 m_is_nss; UINT8 m_input_disabled; UINT8 m_game_over_flag; UINT8 m_joy_flag; -// UINT8 m_is_sfcbox; + UINT8 m_is_sfcbox; /* timers */ emu_timer *m_scanline_timer; diff --git a/src/mame/machine/snes.c b/src/mame/machine/snes.c index dd4d948d7e2..4d2ca2be743 100644 --- a/src/mame/machine/snes.c +++ b/src/mame/machine/snes.c @@ -1852,6 +1852,7 @@ MACHINE_START( snes ) } state->m_is_nss = 0; + state->m_is_sfcbox = 0; } MACHINE_RESET( snes )