summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Scott Stone <tafoid@users.noreply.github.com>2010-08-27 00:02:38 +0000
committer Scott Stone <tafoid@users.noreply.github.com>2010-08-27 00:02:38 +0000
commita8cf436d783b3fdf9f3c58943fefbeba2b2e9716 (patch)
tree2c6064c315448fe9c3e29be66304e4003591e700
parentc00bcb3c4799289e6b92c2e5eee9dc870ac48633 (diff)
Revert of r10129 as it does not compile. I failed to buildtest this external submission. (no whatsnew)
Comment: R. Belmont, this one is all yours to correct and apply.
-rw-r--r--src/emu/machine/pci.c87
-rw-r--r--src/emu/machine/pci.h4
-rw-r--r--src/mame/drivers/chihiro.c253
3 files changed, 24 insertions, 320 deletions
diff --git a/src/emu/machine/pci.c b/src/emu/machine/pci.c
index d29599a458f..4fb5a3989b2 100644
--- a/src/emu/machine/pci.c
+++ b/src/emu/machine/pci.c
@@ -81,13 +81,8 @@ struct _pci_bus_state
running_device * busdevice;
const pci_bus_config * config;
running_device * device[32];
- pci_bus_state * siblings[8];
- UINT8 siblings_busnum[8];
- int siblings_count;
offs_t address;
- INT8 devicenum; // device number we are addressing
- INT8 busnum; // pci bus number we are addressing
- pci_bus_state * busnumaddr; // pci bus we are addressing
+ INT8 devicenum;
};
@@ -98,7 +93,7 @@ struct _pci_bus_state
/*-------------------------------------------------
get_safe_token - makes sure that the passed
- in device is, in fact, a PCI bus
+ in device is, in fact, an IDE controller
-------------------------------------------------*/
INLINE pci_bus_state *get_safe_token(running_device *device)
@@ -128,12 +123,12 @@ READ32_DEVICE_HANDLER( pci_32le_r )
case 1:
if (pcibus->devicenum != -1)
{
- pci_read_func read = pcibus->busnumaddr->config->device[pcibus->devicenum].read_callback;
+ pci_read_func read = pcibus->config->device[pcibus->devicenum].read_callback;
if (read != NULL)
{
function = (pcibus->address >> 8) & 0x07;
reg = (pcibus->address >> 0) & 0xfc;
- result = (*read)(pcibus->busnumaddr->busdevice, pcibus->busnumaddr->device[pcibus->devicenum], function, reg, mem_mask);
+ result = (*read)(device, pcibus->device[pcibus->devicenum], function, reg, mem_mask);
}
}
break;
@@ -147,26 +142,6 @@ READ32_DEVICE_HANDLER( pci_32le_r )
-static pci_bus_state *pci_search_bustree(int busnum, int devicenum, pci_bus_state *pcibus)
-{
-int a;
-pci_bus_state *ret;
-
- if (pcibus->config->busnum == busnum)
- {
- return pcibus;
- }
- for (a = 0; a < pcibus->siblings_count; a++)
- {
- ret = pci_search_bustree(busnum, devicenum, pcibus->siblings[a]);
- if (ret != NULL)
- return ret;
- }
- return NULL;
-}
-
-
-
WRITE32_DEVICE_HANDLER( pci_32le_w )
{
pci_bus_state *pcibus = get_safe_token(device);
@@ -186,31 +161,20 @@ WRITE32_DEVICE_HANDLER( pci_32le_w )
{
int busnum = (pcibus->address >> 16) & 0xff;
int devicenum = (pcibus->address >> 11) & 0x1f;
- pcibus->busnumaddr = pci_search_bustree(busnum, devicenum, pcibus);
- if (pcibus->busnumaddr != NULL)
- {
- pcibus->busnum = busnum;
- pcibus->devicenum = devicenum;
- }
- else
- pcibus->devicenum = -1;
- if (LOG_PCI)
- logerror(" bus:%d device:%d\n", busnum, devicenum);
+ pcibus->devicenum = (busnum == pcibus->config->busnum) ? devicenum : -1;
}
break;
case 1:
if (pcibus->devicenum != -1)
{
- pci_write_func write = pcibus->busnumaddr->config->device[pcibus->devicenum].write_callback;
+ pci_write_func write = pcibus->config->device[pcibus->devicenum].write_callback;
if (write != NULL)
{
int function = (pcibus->address >> 8) & 0x07;
int reg = (pcibus->address >> 0) & 0xfc;
- (*write)(pcibus->busnumaddr->busdevice, pcibus->busnumaddr->device[pcibus->devicenum], function, reg, data, mem_mask);
+ (*write)(device, pcibus->device[pcibus->devicenum], function, reg, data, mem_mask);
}
- if (LOG_PCI)
- logerror(" function:%d register:%d\n", (pcibus->address >> 8) & 0x07, (pcibus->address >> 0) & 0xfc);
}
break;
}
@@ -222,42 +186,13 @@ READ64_DEVICE_HANDLER(pci_64be_r) { return read64be_with_32le_device_handler(pci
WRITE64_DEVICE_HANDLER(pci_64be_w) { write64be_with_32le_device_handler(pci_32le_w, device, offset, data, mem_mask); }
-int pci_add_sibling( running_machine *machine, char *pcitag, char *sibling )
-{
- running_device *device1 = machine->device(pcitag);
- running_device *device2 = machine->device(sibling);
- pci_bus_state *pcibus1 = get_safe_token(device1);
- pci_bus_state *pcibus2 = get_safe_token(device2);
- pci_bus_config *config2;
-
- if ((device1 == NULL) || (device2 == NULL) || (pcibus1 == NULL) || (pcibus2 == NULL))
- return 0;
- if (pcibus1->siblings_count == 8)
- return 0;
- config2 = (pci_bus_config *)downcast<const legacy_device_config_base &>(device2->baseconfig()).inline_config();
- pcibus1->siblings[pcibus1->siblings_count] = get_safe_token(device2);
- pcibus1->siblings_busnum[pcibus1->siblings_count] = config2->busnum;
- pcibus1->siblings_count++;
- return 1;
-}
+
/***************************************************************************
DEVICE INTERFACE
***************************************************************************/
-
-static STATE_POSTLOAD( pci_bus_postload )
-{
- pci_bus_state *pcibus = (pci_bus_state *)param;
-
- if (pcibus->devicenum != -1)
- {
- pcibus->busnumaddr = pci_search_bustree(pcibus->busnum, pcibus->devicenum, pcibus);
- }
-}
-
-
/*-------------------------------------------------
device start callback
-------------------------------------------------*/
@@ -284,15 +219,9 @@ static DEVICE_START( pci_bus )
if (pcibus->config->device[devicenum].devtag != NULL)
pcibus->device[devicenum] = device->machine->device(pcibus->config->device[devicenum].devtag);
- if (pcibus->config->father != NULL)
- pci_add_sibling(device->machine, (char *)pcibus->config->father, (char *)device->tag());
-
/* register pci states */
state_save_register_device_item(device, 0, pcibus->address);
state_save_register_device_item(device, 0, pcibus->devicenum);
- state_save_register_device_item(device, 0, pcibus->busnum);
-
- state_save_register_postload(device->machine, pci_bus_postload, pcibus);
}
diff --git a/src/emu/machine/pci.h b/src/emu/machine/pci.h
index 705a07ced35..7398077cb78 100644
--- a/src/emu/machine/pci.h
+++ b/src/emu/machine/pci.h
@@ -32,7 +32,6 @@ struct _pci_bus_config
{
UINT8 busnum;
pci_device_entry device[32];
- const char * father;
};
@@ -50,8 +49,6 @@ struct _pci_bus_config
MDRV_DEVICE_CONFIG_DATAPTR_ARRAY_MEMBER(pci_bus_config, device, _devnum, pci_device_entry, read_callback, _configread) \
MDRV_DEVICE_CONFIG_DATAPTR_ARRAY_MEMBER(pci_bus_config, device, _devnum, pci_device_entry, write_callback, _configwrite)
-#define MDRV_PCI_BUS_SIBLING(_father_tag) \
- MDRV_DEVICE_CONFIG_DATAPTR(pci_bus_config, father, _father_tag)
/***************************************************************************
@@ -64,7 +61,6 @@ WRITE32_DEVICE_HANDLER( pci_32le_w );
READ64_DEVICE_HANDLER( pci_64be_r );
WRITE64_DEVICE_HANDLER( pci_64be_w );
-int pci_add_sibling( running_machine *machine, char *pcitag, char *sibling );
/* ----- device interface ----- */
diff --git a/src/mame/drivers/chihiro.c b/src/mame/drivers/chihiro.c
index ac5569128c6..65ae5279e15 100644
--- a/src/mame/drivers/chihiro.c
+++ b/src/mame/drivers/chihiro.c
@@ -1,5 +1,5 @@
/*
-
+
Chihiro is an Xbox based arcade motherboard from SEGA
A Chihiro system consists of network board, media board, base board & Xbox board
@@ -36,136 +36,20 @@ Thanks to Alex, Mr Mudkips, and Philip Burke for this info.
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
#include "includes/naomibd.h"
-#include "debug/debugcon.h"
-#include "debug/debugcmd.h"
-
-/* jamtable instructions for Chihiro
-St. Instr. Comment
-0x01 POKEPCI PCICONF[OP2] := OP1
-0x02 OUTB PORT[OP2] := OP1
-0x03 POKE MEM[OP2] := OP1
-0x04 BNE IF ACC <> OP2 THEN PC := PC + OP1
-0x05 PEEKPCI ACC := PCICONF[OP2]
-0x06 AND/OR ACC := (ACC & OP2) | OP1
-0x07 BRA PC := PC + OP1
-0x08 INB ACC := PORT[OP2]
-0x09 PEEK ACC := MEM[OP2]
-0xE1 (prefix) execute the instruction code in OP2 with OP2 := OP1, OP1 := ACC
-0xEE END
-*/
-/* jamtable disassembler */
-static void jamtable_disasm(running_machine *machine,const address_space *space,UINT32 address,UINT32 size) // 0xff000080 == fff00080
+static VIDEO_START(chihiro)
{
- UINT32 base,addr;
- UINT32 opcode,op1,op2;
- char sop1[16];
- char sop2[16];
- char pcrel[16];
- int prefix;
-
- addr=address;
- while (1)
- {
- base=addr;
- opcode=memory_read_byte(space,addr);
- addr++;
- op1=memory_read_dword_8le(space,addr);
- addr+=4;
- op2=memory_read_dword_8le(space,addr);
- addr+=4;
- if (opcode == 0xe1)
- {
- opcode=op2 & 255;
- op2=op1;
- //op1=edi;
- sprintf(sop2,"%08X",op2);
- sprintf(sop1,"ACC");
- sprintf(pcrel,"PC+ACC");
- prefix=1;
- }
- else
- {
- sprintf(sop2,"%08X",op2);
- sprintf(sop1,"%08X",op1);
- sprintf(pcrel,"%08X",base+9+op1);
- prefix=0;
- }
- debug_console_printf(machine,"%08X ",base);
- // dl=instr ebx=par1 eax=par2
- switch (opcode)
- {
- case 0x01:
- // if ((op2 & 0xff) == 0x880) op1=op1 & 0xfffffffd
- // out cf8,op2
- // out cfc,op1
- // out cf8,0
- // cf8 (CONFIG_ADDRESS) format:
- // 31 30 24 23 16 15 11 10 8 7 2 1 0
- // +-+----------+------------+---------------+-----------------+-----------------+-+-+
- // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
- // +-+----------+------------+---------------+-----------------+-----------------+-+-+
- // 31 - Enable bit
- debug_console_printf(machine,"POKEPCI PCICONF[%s]=%s\n",sop2,sop1);
- break;
- case 0x02:
- debug_console_printf(machine,"OUTB PORT[%s]=%s\n",sop2,sop1);
- break;
- case 0x03:
- debug_console_printf(machine,"POKE MEM[%s]=%s\n",sop2,sop1);
- break;
- case 0x04:
- debug_console_printf(machine,"BNE IF ACC != %s THEN PC=%s\n",sop2,pcrel);
- break;
- case 0x05:
- // out cf8,op2
- // in acc,cfc
- debug_console_printf(machine,"PEEKPCI ACC=PCICONF[%s]\n",sop2);
- break;
- case 0x06:
- debug_console_printf(machine,"AND/OR ACC=(ACC & %s) | %s\n",sop2,sop1);
- break;
- case 0x07:
- debug_console_printf(machine,"BRA PC=%s\n",pcrel);
- break;
- case 0x08:
- debug_console_printf(machine,"INB ACC=PORT[%s]\n",sop2);
- break;
- case 0x09:
- debug_console_printf(machine,"PEEK ACC=MEM[%s]\n",sop2);
- break;
- case 0xee:
- debug_console_printf(machine,"END\n");
- break;
- default:
- debug_console_printf(machine,"NOP ????\n");
- break;
- }
- if (opcode == 0xee)
- break;
- if (size <= 9)
- break;
- size-=9;
- }
+
}
-void jamtable_disasm_command(running_machine *machine, int ref, int params, const char **param)
+static VIDEO_UPDATE(chihiro)
{
- const address_space *space;
- UINT64 addr,size;
-
- if (params < 2)
- return;
- if (!debug_command_parameter_number(machine, param[0], &addr))
- return;
- if (!debug_command_parameter_number(machine, param[1], &size))
- return;
- space=machine->firstcpu->space();
- jamtable_disasm(machine, space, (UINT32)addr, (UINT32)size);
+
+ return 0;
}
+
/*
St. Instr. Comment
0x02 PEEK ACC := MEM[OP1]
@@ -186,132 +70,27 @@ static READ32_HANDLER( chihiro_jamtable )
return 0xEEEEEEEE;
}
-static UINT32 dummy_pci_r(running_device *busdevice, running_device *device, int function, int reg, UINT32 mem_mask)
-{
- logerror(" bus:%d function:%d register:%d mask:%08X\n",((pci_bus_config *)downcast<const legacy_device_config_base &>(busdevice->baseconfig()).inline_config())->busnum,function,reg,mem_mask);
- return 0;
-}
-
-static void dummy_pci_w(running_device *busdevice, running_device *device, int function, int reg, UINT32 data, UINT32 mem_mask)
-{
- logerror(" bus:%d function:%d register:%d data:%08X mask:%08X\n",((pci_bus_config *)downcast<const legacy_device_config_base &>(busdevice->baseconfig()).inline_config())->busnum,function,reg,data,mem_mask);
-}
-
-static READ32_HANDLER( dummy_r )
-{
- return 0;
-}
-
-static WRITE32_HANDLER( dummy_w )
-{
-}
-
-int smbus_cx25871(int command,int rw,int data)
-{
- logerror("cx25871: %d %d %d\n",command,rw,data);
- return 0;
-}
-
-typedef struct _smbus_state {
- int status;
- int control;
- int address;
- int data;
- int command;
- int rw;
- int (*devices[128])(int command,int rw,int data);
- UINT32 words[256/4];
-} smbus_state;
-smbus_state smbusst;
-
-void smbus_register_device(int address,int (*handler)(int command,int rw,int data))
-{
- if (address < 128)
- smbusst.devices[address]=handler;
-}
-
-static READ32_HANDLER( smbus_r )
-{
- if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
- smbusst.words[offset] = (smbusst.words[offset] & ~mem_mask) | (smbusst.status << 0);
- if ((offset == 1) && (mem_mask == 0xff0000)) // 6 smbus data
- smbusst.words[offset] = (smbusst.words[offset] & ~mem_mask) | (smbusst.data << 16);
- return smbusst.words[offset];
-}
-
-static WRITE32_HANDLER( smbus_w )
-{
- COMBINE_DATA(smbusst.words);
- if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
- smbusst.status &= ~data;
- if ((offset == 0) && (mem_mask == 0xff0000)) // 2 smbus control
- {
- data=data>>16;
- smbusst.control = data;
- if ((smbusst.control & 6) == 2)
- {
- if (smbusst.devices[smbusst.address & 127])
- if (smbusst.rw == 0)
- smbusst.devices[smbusst.address & 127](smbusst.command,smbusst.rw,smbusst.data);
- else
- smbusst.data=smbusst.devices[smbusst.address & 127](smbusst.command,smbusst.rw,smbusst.data);
- smbusst.status |= 0x10;
- }
- }
- if ((offset == 1) && (mem_mask == 0xff)) // 4 smbus address
- {
- smbusst.address = data >> 1;
- smbusst.rw = data & 1;
- }
- if ((offset == 1) && (mem_mask == 0xff0000)) // 6 smbus data
- {
- data=data>>16;
- smbusst.data = data;
- }
- if ((offset == 2) && (mem_mask == 0xff)) // 8 smbus command
- smbusst.command = data;
-}
-
static ADDRESS_MAP_START( xbox_map, ADDRESS_SPACE_PROGRAM, 32 )
- AM_RANGE(0x00000000, 0x07ffffff) AM_RAM
- AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000)
-ADDRESS_MAP_END
+ AM_RANGE(0x00000000, 0x004fffff) AM_RAM
+ AM_RANGE(0x07fd0000, 0x07feffff) AM_RAM // a table of some sort?
-static ADDRESS_MAP_START(xbox_map_io, ADDRESS_SPACE_IO, 32)
- AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_32le_r, pci_32le_w)
- AM_RANGE(0x8000, 0x80ff) AM_READWRITE(dummy_r, dummy_w)
- AM_RANGE(0xc000, 0xc0ff) AM_READWRITE(smbus_r, smbus_w)
+ AM_RANGE(0xff000080, 0xff000083) AM_READ( chihiro_jamtable )
+ AM_RANGE(0xfff00000, 0xfff7ffff) AM_ROM AM_SHARE("biosflash")
+ AM_RANGE(0xfff80000, 0xffffffff) AM_ROM AM_REGION("bios", 0) AM_SHARE("biosflash")
ADDRESS_MAP_END
static INPUT_PORTS_START( chihiro )
INPUT_PORTS_END
-static MACHINE_START( chihiro )
-{
- smbus_register_device(0x45,smbus_cx25871);
- debug_console_register_command(machine,"jamdis",CMDFLAG_NONE,0,2,3,jamtable_disasm_command);
-}
-
static MACHINE_DRIVER_START( chihiro_base )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", PENTIUM, 733333333) /* Wrong! */
MDRV_CPU_PROGRAM_MAP(xbox_map)
- MDRV_CPU_IO_MAP(xbox_map_io)
MDRV_QUANTUM_TIME(HZ(6000))
- MDRV_PCI_BUS_ADD("pcibus", 0)
- MDRV_PCI_BUS_DEVICE(0, "PCI Bridge Device - Host Bridge", dummy_pci_r, dummy_pci_w)
- MDRV_PCI_BUS_DEVICE(1, "HUB Interface - ISA Bridge", dummy_pci_r, dummy_pci_w)
- MDRV_PCI_BUS_DEVICE(2, "OHCI USB Controller 1", dummy_pci_r, dummy_pci_w)
- MDRV_PCI_BUS_DEVICE(3, "OHCI USB Controller 2", dummy_pci_r, dummy_pci_w)
- MDRV_PCI_BUS_DEVICE(30, "AGP Host to PCI Bridge", dummy_pci_r, dummy_pci_w)
- MDRV_PCI_BUS_ADD("agpbus", 1)
- MDRV_PCI_BUS_SIBLING("pcibus")
- MDRV_PCI_BUS_DEVICE(0, "NV2A GeForce 3MX Integrated GPU/Northbridge", dummy_pci_r, dummy_pci_w)
-
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -319,9 +98,10 @@ static MACHINE_DRIVER_START( chihiro_base )
MDRV_SCREEN_SIZE(640, 480)
MDRV_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
- MDRV_MACHINE_START(chihiro)
-
MDRV_PALETTE_LENGTH(65536)
+
+ MDRV_VIDEO_START(chihiro)
+ MDRV_VIDEO_UPDATE(chihiro)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( chihirogd )
@@ -336,7 +116,7 @@ MACHINE_DRIVER_END
ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */
#define CHIHIRO_BIOS \
- ROM_REGION( 0x1000000, "bios", 0) \
+ ROM_REGION( 0x200000, "bios", 0) \
ROM_SYSTEM_BIOS( 0, "bios0", "Chihiro Bios" ) \
ROM_LOAD_BIOS( 0, "chihiro_xbox_bios.bin", 0x000000, 0x80000, CRC(66232714) SHA1(b700b0041af8f84835e45d1d1250247bf7077188) ) \
ROM_REGION( 0x200000, "others", 0) \
@@ -530,4 +310,3 @@ GAME( 2005, gundamos, chihiro, chihirogd, chihiro, 0, ROT0, "Sega",
GAME( 2003, vcop3, chihiro, chihirogd, chihiro, 0, ROT0, "Sega", "Virtua Cop 3 (GDX-0003A)", GAME_NO_SOUND|GAME_NOT_WORKING )
GAME( 2005, mj3, chihiro, chihirogd, chihiro, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D)", GAME_NO_SOUND|GAME_NOT_WORKING )
GAME( 2006, scg06nt, chihiro, chihirogd, chihiro, 0, ROT0, "Sega", "Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A)", GAME_NO_SOUND|GAME_NOT_WORKING )
-