diff options
Diffstat (limited to 'src/mess/drivers/xbox.c')
-rw-r--r-- | src/mess/drivers/xbox.c | 146 |
1 files changed, 76 insertions, 70 deletions
diff --git a/src/mess/drivers/xbox.c b/src/mess/drivers/xbox.c index 500b019b239..7c919b54ad7 100644 --- a/src/mess/drivers/xbox.c +++ b/src/mess/drivers/xbox.c @@ -11,76 +11,56 @@ #include "emu.h" #include "cpu/i386/i386.h" -//#include "machine/lpci.h" -//#include "machine/pic8259.h" -//#include "machine/pit8253.h" -//#include "machine/idectrl.h" -//#include "machine/idehd.h" -//#include "machine/naomigd.h" -//#include "video/poly.h" -//#include "bitmap.h" -//#include "debug/debugcon.h" -//#include "debug/debugcmd.h" -//#include "debug/debugcpu.h" -//#include "includes/chihiro.h" - +#include "machine/lpci.h" +#include "machine/pic8259.h" +#include "machine/pit8253.h" +#include "machine/idectrl.h" +#include "machine/idehd.h" +#include "video/poly.h" +#include "bitmap.h" +#include "debug/debugcon.h" +#include "debug/debugcmd.h" +#include "debug/debugcpu.h" +#include "includes/chihiro.h" +#include "includes/xbox.h" #define CPU_DIV 64 -/*! - @todo - Inheritance with chihiro_state - */ -class xbox_state : public driver_device +class xbox_state : public xbox_base_state { public: - xbox_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu") + xbox_state(const machine_config &mconfig, device_type type, const char *tag) : + xbox_base_state(mconfig, type, tag), + usbhack_index(-1), + usbhack_counter(0) { } - // devices - required_device<cpu_device> m_maincpu; - - // screen updates - UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_PALETTE_INIT(xbox); protected: // driver_device overrides virtual void machine_start(); virtual void machine_reset(); - virtual void video_start(); + + virtual void hack_eeprom(); + virtual void hack_usb(); + + struct chihiro_devices { + bus_master_ide_controller_device *ide; + } xbox_devs; + int usbhack_index; + int usbhack_counter; }; void xbox_state::video_start() { } -UINT32 xbox_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ - return 0; -} - static ADDRESS_MAP_START(xbox_map, AS_PROGRAM, 32, xbox_state) - AM_RANGE(0x00000000, 0x07ffffff) AM_RAM // 128 megabytes - AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM -// AM_RANGE(0xfd000000, 0xfdffffff) AM_RAM AM_READWRITE(geforce_r, geforce_w) -// AM_RANGE(0xfed00000, 0xfed003ff) AM_READWRITE(usbctrl_r, usbctrl_w) -// AM_RANGE(0xfe800000, 0xfe85ffff) AM_READWRITE(audio_apu_r, audio_apu_w) -// AM_RANGE(0xfec00000, 0xfec001ff) AM_READWRITE(audio_ac93_r, audio_ac93_w) - AM_RANGE(0xff000000, 0xff07ffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000) + AM_IMPORT_FROM(xbox_base_map) ADDRESS_MAP_END static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, xbox_state) -// AM_RANGE(0x0020, 0x0023) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff) -// AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff) -// AM_RANGE(0x00a0, 0x00a3) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0xffffffff) -// AM_RANGE(0x01f0, 0x01f7) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, read_cs0, write_cs0) -// AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write) -// AM_RANGE(0x4000, 0x40ff) AM_READWRITE(mediaboard_r, mediaboard_w) -// AM_RANGE(0x8000, 0x80ff) AM_READWRITE(dummy_r, dummy_w) -// AM_RANGE(0xc000, 0xc0ff) AM_READWRITE(smbus_r, smbus_w) -// AM_RANGE(0xff60, 0xff67) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, bmdma_r, bmdma_w) + AM_IMPORT_FROM(xbox_base_map_io) ADDRESS_MAP_END static INPUT_PORTS_START( xbox ) @@ -140,41 +120,67 @@ static INPUT_PORTS_START( xbox ) INPUT_PORTS_END +void xbox_state::hack_eeprom() +{ + // 8003b744,3b744=0x90 0x90 + /*m_maincpu->space(0).write_byte(0x3b744, 0x90); + m_maincpu->space(0).write_byte(0x3b745, 0x90); + m_maincpu->space(0).write_byte(0x3b766, 0xc9); + m_maincpu->space(0).write_byte(0x3b767, 0xc3);*/ +} +/*static const struct { + const char *game_name; + struct { + UINT32 address; + UINT8 write_byte; + } modify[16]; +} hacks[] = { { "chihiro",{ { 0x6a79f, 0x01 },{ 0x6a7a0, 0x00 },{ 0x6b575, 0x00 },{ 0x6b576, 0x00 },{ 0x6b5af, 0x75 },{ 0x6b78a, 0x75 },{ 0x6b7ca, 0x00 },{ 0x6b7b8, 0x00 },{ 0x8f5b2, 0x75 },{ 0x79a9e, 0x74 },{ 0x79b80, 0x74 },{ 0x79b97, 0x74 },{ 0, 0 } } }, +{ "outr2",{ { 0x12e4cf, 0x01 },{ 0x12e4d0, 0x00 },{ 0x4793e, 0x01 },{ 0x4793f, 0x00 },{ 0x47aa3, 0x01 },{ 0x47aa4, 0x00 },{ 0x14f2b6, 0x84 },{ 0x14f2d1, 0x75 },{ 0x8732f, 0x7d },{ 0x87384, 0x7d },{ 0x87388, 0xeb },{ 0, 0 } } } };*/ -void xbox_state::machine_start() +void xbox_state::hack_usb() { + int p; + + if (usbhack_counter == 0) + p = 0; + else if (usbhack_counter == 1) // after game loaded + p = usbhack_index; + else + p = -1; + if (p >= 0) { + /*for (int a = 0; a < 16; a++) { + if (hacks[p].modify[a].address == 0) + break; + m_maincpu->space(0).write_byte(hacks[p].modify[a].address, hacks[p].modify[a].write_byte); + }*/ + } + usbhack_counter++; } -void xbox_state::machine_reset() +void xbox_state::machine_start() { + xbox_base_state::machine_start(); + xbox_devs.ide = machine().device<bus_master_ide_controller_device>("ide"); + usbhack_index = -1; + /*for (int a = 1; a < 2; a++) + if (strcmp(machine().basename(), hacks[a].game_name) == 0) { + usbhack_index = a; + break; + }*/ + usbhack_counter = 0; + // savestates + save_item(NAME(usbhack_counter)); } - -PALETTE_INIT_MEMBER(xbox_state, xbox) +void xbox_state::machine_reset() { } -static MACHINE_CONFIG_START( xbox, xbox_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", PENTIUM3, 733333333/CPU_DIV) /* Wrong! family 6 model 8 stepping 10 */ +static MACHINE_CONFIG_DERIVED_CLASS(xbox, xbox_base, xbox_state) + MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(xbox_map) MCFG_CPU_IO_MAP(xbox_map_io) -// MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(chihiro_state, irq_callback) - - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) -// MCFG_SCREEN_REFRESH_RATE(60) -// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(xbox_state, screen_update) -// MCFG_SCREEN_SIZE(32*8, 32*8) -// MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_RAW_PARAMS(8000000/2, 442, 0, 320, 264, 0, 240) /* generic NTSC video timing, change accordingly */ - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 8) - MCFG_PALETTE_INIT_OWNER(xbox_state, xbox) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") |