diff options
Diffstat (limited to 'src/mame/drivers/chihiro.cpp')
-rw-r--r-- | src/mame/drivers/chihiro.cpp | 1289 |
1 files changed, 1289 insertions, 0 deletions
diff --git a/src/mame/drivers/chihiro.cpp b/src/mame/drivers/chihiro.cpp new file mode 100644 index 00000000000..3fd14bec79e --- /dev/null +++ b/src/mame/drivers/chihiro.cpp @@ -0,0 +1,1289 @@ +// license:BSD-3-Clause +// copyright-holders:Samuele Zannoli +/* +Chihiro is an Xbox-based arcade system from SEGA. + +Games on this system include.... + + Year Game Manufacturer / Developer Media Number Key Chip ++-+------+----------------------------------------------------+--------------------------+--------+------------+--------------| +|*| 2002 | The House of the Dead III | Sega / Wow Entertainment | GDROM | GDX-0001 | 317-0348-COM | +| | 2003 | Crazy Taxi High Roller | Sega / Hitmaker | GDROM | GDX-0002 | 317-0353-COM | +| | 2003 | Crazy Taxi High Roller (Rev A) | Sega / Hitmaker | GDROM | GDX-0002A | 317-0353-COM | +|*| 2003 | Crazy Taxi High Roller (Rev B) | Sega / Hitmaker | GDROM | GDX-0002B | 317-0353-COM | +| | 2003 | Virtua Cop 3 | Sega | GDROM | GDX-0003 | 317-0354-COM | +|*| 2003 | Virtua Cop 3 (Rev A) | Sega | GDROM | GDX-0003A | 317-0354-COM | +| | 2003 | OutRun 2 | Sega | GDROM | GDX-0004 | 317-0372-COM | +|*| 2003 | OutRun 2 (Rev A) | Sega | GDROM | GDX-0004A | 317-0372-COM | +| | 2003 | OutRun 2 prototype (Rev P) | Sega | GDROM | GDX-0004P | | +| | 2004 | Sega Golf Club Network Pro Tour | Sega | GDROM | GDX-0005 | | +| | 2004 | Sega Network Taisen Mahjong MJ 2 | Sega | GDROM | GDX-0006 | | +| | 2004 | Sega Network Taisen Mahjong MJ 2 (Rev A) | Sega | GDROM | GDX-0006A | | +| | 2004 | Sega Network Taisen Mahjong MJ 2 (Rev B) | Sega | GDROM | GDX-0006B | | +|*| 2004 | Sega Network Taisen Mahjong MJ 2 (Rev C) | Sega | GDROM | GDX-0006C | | +| | 2004 | Sega Network Taisen Mahjong MJ 2 (Rev D) | Sega | GDROM | GDX-0006D | | +| | 2005 | Sega Network Taisen Mahjong MJ 2 (Rev E) | Sega | GDROM | GDX-0006E | | +|*| 2005 | Sega Network Taisen Mahjong MJ 2 (Rev F) | Sega | GDROM | GDX-0006F | | +|*| 2005 | Sega Network Taisen Mahjong MJ 2 (Rev G) | Sega | GDROM | GDX-0006G | 317-0374-JPN | +|*| 2004 | Ollie King | Sega / Amusement Vision | GDROM | GDX-0007 | 317-0377-COM | +| | 2004 | Wangan Midnight Maximum Tune (Japan) | Namco | GDROM | GDX-0008 | 317-5101-JPN | +| | 2004 | Wangan Midnight Maximum Tune (Japan) (Rev A) | Namco | GDROM | GDX-0008A | 317-5101-JPN | +|*| 2004 | Wangan Midnight Maximum Tune (Japan) (Rev B) | Namco | GDROM | GDX-0008B | 317-5101-JPN | +| | 2004 | Wangan Midnight Maximum Tune (Export) | Namco | GDROM | GDX-0009 | 317-5101-COM | +| | 2004 | Wangan Midnight Maximum Tune (Export) (Rev A) | Namco | GDROM | GDX-0009A | 317-5101-COM | +|*| 2004 | Wangan Midnight Maximum Tune (Export) (Rev B) | Namco | GDROM | GDX-0009B | 317-5101-COM | +| | 2004 | OutRun 2 SP (Japan) | Sega | GDROM | GDX-0011 | | +|*| 2004 | Ghost Squad | Sega | GDROM | GDX-0012 | 317-0398-COM | +|*| 2004 | Ghost Squad (Rev A) | Sega | GDROM | GDX-0012A | 317-0398-COM | +|*| 2005 | Gundam Battle Operating Simulator | Banpresto | GDROM | GDX-0013 | 317-0400-JPN | +| | 2004 | OutRun 2 Special Tours | Sega | GDROM | GDX-0014 | 317-0xxx-COM | +|*| 2004 | OutRun 2 Special Tours (Rev A) | Sega | GDROM | GDX-0014A | 317-0xxx-COM | +|*| 2005 | Wangan Midnight Maximum Tune 2 (Japan) | Namco | GDROM | GDX-0015 | 317-5106-JPN | +| | 2005 | Wangan Midnight Maximum Tune 2 (Export) | Namco | GDROM | GDX-0016 | 317-5106-COM | +|*| 2005 | Wangan Midnight Maximum Tune 2 (Export) (Rev A) | Namco | GDROM | GDX-0016A | 317-5106-COM | +| | 2005 | Sega Network Taisen Mahjong MJ 3 | Sega | GDROM | GDX-0017 | 317-0414-JPN | +| | 2005 | Sega Network Taisen Mahjong MJ 3 (Rev A) | Sega | GDROM | GDX-0017A | 317-0414-JPN | +| | 2005 | Sega Network Taisen Mahjong MJ 3 (Rev B) | Sega | GDROM | GDX-0017B | 317-0414-JPN | +| | 2005 | Sega Network Taisen Mahjong MJ 3 (Rev C) | Sega | GDROM | GDX-0017C | 317-0414-JPN | +|*| 2005 | Sega Network Taisen Mahjong MJ 3 (Rev D) | Sega | GDROM | GDX-0017D | 317-0414-JPN | +| | 2005 | Sega Network Taisen Mahjong MJ 3 (Rev E) | Sega | GDROM | GDX-0017E | 317-0414-JPN | +|*| 2005 | Sega Network Taisen Mahjong MJ 3 (Rev F) | Sega | GDROM | GDX-0017F | 317-0414-JPN | +| | 2005 | Sega Club Golf 2006: Next Tours | Sega | GDROM | GDX-0018 | | +|*| 2005 | Sega Club Golf 2006: Next Tours (Rev A) | Sega | GDROM | GDX-0018A | | +| | 2006 | Sega Network Taisen Mahjong MJ 3 Evolution | Sega | GDROM | GDX-0021 | | +| | 2006 | Sega Network Taisen Mahjong MJ 3 Evolution (Rev A) | Sega | GDROM | GDX-0021A | | +|*| 2007 | Sega Network Taisen Mahjong MJ 3 Evolution (Rev B) | Sega | GDROM | GDX-0021B | | +| | 2009 | Firmware Update For Compact Flash Box | Sega | GDROM | GDX-0024 | | +|*| 2009 | Firmware Update For Compact Flash Box (Rev A) | Sega | GDROM | GDX-0024A | 317-0567-EXP | +|*| 2004 | Quest Of D (Ver.1.01C) | Sega | CDROM | CDV-10005C | | +|*| 2005 | Sangokushi Taisen (Ver.1.002) | Sega | DVDROM | CDV-10009D | | +|*| 2006 | Sangokushi Taisen 2 (Ver.2.007) | Sega | DVDROM | CDV-10019A | | +|*| 2005 | Sangokushi Taisen | Sega | DVDROM | CDV-10022 | | +|*| 2006 | Sangokushi Taisen 2 Firmware Update | Sega | DVDROM | CDV-10023 | | +|*| 2006 | Sangokushi Taisen 2 | Sega | DVDROM | CDV-10029 | | +|*| 2008 | Sangokushi Taisen 3 | Sega | DVDROM | CDV-10036 | | +|*| 2008 | Sangokushi Taisen 3 (Ver.J) | Sega | DVDROM | CDV-10036J | | +|*| 2008 | Sangokushi Taisen 3 War Begins (Ver.3.59) | Sega | DVDROM | CDV-10041 | | +|*| 2008 | Sangokushi Taisen 3 War Begins | Sega | DVDROM | CDV-10042 | | ++-+------+----------------------------------------------------+--------------------------+--------+------------+--------------+ +* denotes these games are archived. + + Year Game (Unknown media) Manufacturer ++-+-----------------------------------------------------------+------------+ +| | 2004 | Quest Of D | Sega | +| | 2004 | Quest Of D (Ver.1.02) | Sega | +| | 2004 | Quest Of D (Ver.1.10) | Sega | +| | 2004 | Quest Of D (Ver.1.10a) | Sega | +| | 2005 | Quest Of D (Ver.1.20) | Sega | +| | 2005 | Quest Of D (Ver.1.20a) | Sega | +| | 2005 | Quest Of D (Ver.1.21) | Sega | +| | 2005 | Quest Of D: Gofu no Keisyousya (Ver.2.00) | Sega | +| | 2005 | Quest Of D: Gofu no Keisyousya (Ver.2.01) | Sega | +| | 2006 | Quest Of D: Gofu no Keisyousya (Ver.2.02b) | Sega | +| | 2006 | Quest Of D: Oukoku no Syugosya (Ver.3.00) | Sega | +| | 2006 | Quest Of D: Oukoku no Syugosya (Ver.3.01) | Sega | +| | 2007 | Quest Of D: The Battle Kingdom (Ver.4.00) | Sega | +| | 2008 | Quest Of D: The Battle Kingdom (Ver.4.00b) | Sega | +| | 2008 | Quest Of D: The Battle Kingdom (Ver.4.00c) | Sega | +| | 2008 | Quest Of D: The Battle Kingdom (Ver.4.01) | Sega | +| | 2005 | Sangokushi Taisen (Ver.1.03) | Sega | +| | 2005 | Sangokushi Taisen (Ver.1.10) | Sega | +| | 2005 | Sangokushi Taisen (Ver.1.11) | Sega | +| | 2006 | Sangokushi Taisen (Ver.1.12) | Sega | +| | 2006 | Sangokushi Taisen 2 (Ver.2.01) | Sega | +| | 2005 | Sega Golf Club Network Pro Tour 2005 | Sega | ++-+------+----------------------------------------------------+------------+ + +A Chihiro system consists of several boards. +The system is in 2 separate metal boxes that fit together to form one box. +In order from top to bottom they are.... + - Network board \ + - Media board / Together in the top box + + - Base board \ + - Xbox board / Together in the bottom box + +The 2 boxes join together via the Base Board upper connector and Media Board lower connector. + +The Microsoft-manufactured XBox board is the lowest board. It's mostly the same as the V1 XBox retail +board with the exception that it has 128MB of RAM and a NVidia MCPX X2 chip. The retail XBox board has a +MCPX X3 chip. The board was probably released to Sega very early in development and the chip was updated +in the mass-produced retail version. + +The Sega-manufactured base board is connected to the XBox board via a 40 pin 80-wire flat cable and a 16 +pin 16-wire flat cable connects to the LPC header, plus a couple of thin multi-wire cables which join to the +XBox game controller ports (USB1.1) and front panel connector. +On the reverse side of that board are the power output connectors going to the XBox board and a 100 pin +connector where the media board plugs in. A CR2032 coin battery is also located there and next to it are 6 +jumpers.... +JP3S 2-3 \ +JP4S 1-2 | +JP5S 1-2 | +JP6S 2-3 | These are connected to the USB chip on the other side of this board +JP7S 1-2 | +JP8S 2-3 / +A long connector on one edge connects to the filter board (power supply input etc) and on another edge are +connectors for VGA output, audio/video input (from a short cable coming from the A/V connector on the XBox board) +and a 14 pin connector which is unused. The base board handles JVS and video output. + +The upper part contains a Sega-manufactured media board with a TSOP48 flash ROM containing an xbox .xbe loader +(this is the Chihiro logo you see when you power the Chihiro) and there's a connector for a Sega network board. +The network board is 100% the same as the one in the Triforce v3 with the same firmware also. + +The system requires one of the various Sega JVS I/O boards to operate. + +ROMs on the boards +------------------ +Network Board : One ST 29W160ET 2M x8-bit TSOP48 Flash ROM stamped 'FPR24036' at location IC2 +Media Board : One ST 29W160ET 2M x8-bit TSOP48 Flash ROM stamped 'FPR24042' at location IC8 + As in Triforce, it consists of two versions in the same flash, the first MB of the flash has + an older version as backup, and the second MB has the current version, versions included are: + SegaBoot Ver.2.00.0 Build:Feb 7 2003 12:28:30 + SegaBoot Ver.2.13.0 Build:Mar 3 2005 17:03:15 +Base Board : Two Microchip 24LC64 64k Serial EEPROMs at locations IC32 and IC10 + One Microchip 24LC24 2k Serial EEPROM at location IC11 + The chip at IC32 seems to be a backup of the base board firmware without region or serial. + The chip at IC11 has an unknown purpose. It contains some strings. The interesting thing is that it + contains the string SBJE. If you go to the system info menu and press the service button 16 times in a row + a message will be displayed: GAME ID SBJE + The chip at IC10 contains the firmware of the Base Board, serial number and REGION of the whole system. + The region is located at offset 0x00001F10. 01 is JAPAN, 02 is USA, 03 is EXPORT. If you want to change + the region of your Chihiro unit just change this byte. + Alternatively, if you have a netboot PIC, plug that in and power up with it. + 1) Enter the test menu (push the test button) + 2) Go to the System Information menu. + 3) Press the Service button 30 times in a row and a hidden menu will appear to change the region. + 4) Once the region is changed, exit from the menus and after the Chihiro reboots, power off the system and + power on again. +Xbox Board : One Macronix 29F040TC-90 512k x8-bit TSOP32 Flash ROM at location U7D1 + + +Board Layouts +============= + + +XBox Board +---------- + +|--------------------------------------------| +| LAN FAN1 A/V FAN2| +| | +| LF353 CONEXANT | +|DVD_PWR WM9709 XC25871-14 | +| | +| ICS_UA431317 |-------------------| +| LM358 | +| 27MHz PIC16LC63A | +|IDE BR24C02 | +| ICS_455R-02 | +| K4D263238D | +| 29F040.U7D1 *K4D263238D | +| | +| GPU CPU @733MHz | +| 16_PIN_CONN (WITH FAN) (SL5SN 733/128)| +| K4D263238D | +| *K4D263238D | +| | +| | +| K4D263238D K4D263238D | +| *K4D263238D *K4D263238D | +| NVIDIA | +| MCPX X2 | +| POWER_CONN | +| | +| | +| | +| GAME1/2 FRONT_PANEL GAME3/4 | +|----------------------------------------------------------------| +Notes: + * These parts located on the other side of the PCB + Some of the connectors are not used. + GAME1/2 - Connected to CN1 on Base Board. JST Part Number B12B-PHDSS + GAME3/4 - Connected to CN1 on Base Board. JST Part Number B12B-PHDSS + FRONT_PANEL - Connected to CN1 on Base Board. JST Part Number B10B-PHDSS + + +Base Board +---------- + +171-8204B +837-14280 SEGA 2002 +Sticker: 837-14280-92 +|----------------------------------------------------------------| +|*CN16S *CN14S *CN19S ADM3222 | +| CN8| +| 24LC64.IC32 | +|CN11 CN18 CN1 PC410 | +| LM1881 | +| SN65240 | +| SN65240 AN2131SC BA7623 | +| CN10| +| 12MHz BA7623 | +| *CR2032 | +| SUPERCAP | +| 32.768kHz | +|CN12 RV5C386A | +| 24LC024.IC11 M68AF127 CN9| +| 24LC64.IC10 AN2131QC | +| ADM3222 DS485 | +| 1.85MHz | +| 3771 CN5| +|-------------------------| CN15 |-----------------| + |--------------------| +Notes: + (* these parts on other side of the PCB) + RV5C386A - I2C Bus Serial Interface Real-Time Clock IC with Voltage Monitoring Function (SSOP10) + 24LC64 - Microchip 24LC64 64K I2C Serial EEPROM (SOIC8) + 24LC024 - Microchip 24LC024 2K I2C Serial EEPROM (SOIC8) + M68AF127B - ST Microelectronics 1Mbit (128K x8), 5V Asynchronous SRAM (SOP32) + AN2131QC - Cypress AN2131 EZ-USB-Family 8051-based High-Speed USB IC's (QFP80) + AN2131SC / (QFP44) + ADM3222 - Analog Devices ADM3222 High-Speed, +3.3V, 2-Channel RS232/V.28 Interface Device (SOIC20) + SN65240 - Texas Instruments SN65240 USB Port Transient Suppressor (SOIC8) + BA7623 - Rohm BA7623 75-Ohm driver IC with 3 internal circuits (SOIC8) + LM1881 - National LM1881 Video Sync Separator (SOIC8) + DS485 - National DS485 Low-Power RS-485/RS-422 Multipoint Transceiver (SOIC8) + 3771 - Fujitsu MB3771 System Reset IC (SOIC8) + PC410 - Sharp PC410 Ultra-high Speed Response OPIC Photocoupler + CN1 - 22-pin multi-wire cable connector joining to XBox board + CN5 - USB connector joining to JVS I/O board with standard USB cable + CN8 - A/V input connector (from XBox board via short A/V cable) + CN9 - VGA output connector + CN10 - 14 pin connector (purpose unknown but appears to be unused) + CN11 - 16-pin flat cable connector joining to LPC connector on XBox board + CN12 - 40-pin IDE flat cable connector joining to IDE connector on XBox board + CN14S - 7-pin power output connector joining to XBox board + CN15 - 96-pin connector joining to filter board + CN16S - 2-pin connector joining to case fan on Chihiro lower section (next to XBox PCB) + CN18 - 10-pin multi-wire cable connector joining to XBox board + CN19S - 5-pin power output connector joining to XBox board + There are also many power-related components such as capacitors, mosfets and transistors. + + +Network Board +------------- + +This board is identical to the network board used in Triforce games. +See src/mame/drivers/triforce.c + + +Media Board +----------- + +171-8234C +837-14359-01 SEGA 2002 +Sticker: 837-14359-91 +|----------------------------------------------------------------| +| LED LED | +| FLASH.IC8 | +| LED CN12 CN11 | +| LED JP4-JP10 CN10| +| | +| | +| |----------| | +| |SEGA | | +| CN14S* |315-6355 | | +| | | | +| | | | +| MB3800* |----------| CN8| +| CY25560* | +| | +| CY23S09SC 49.25MHz | +| | +| CN4 (DIMM) | +| CN3 (DIMM) CN5| +| MM1433* | +| CN13 TPC8009 CN9 CN6 | +|----------------------------------------------------------------| +Notes: + * - These parts on other side of PCB + CN3/4 - 72 pin DIMM sockets + CN5 - GDROM data cable connector (SCSI mini-honda connection but signal/protocol is IDE) + CN6 - 40 pin flat cable connector (unused) + CN8 - 6 pin GDROM power connector + CN9 - 6 pin power connector (unused) + CN10 - Connector for small 90-degrees upright board where PIC plugs in. The upright board contains only a DIP18 socket and a 4MHz OSC. + CN11/12 - Network board connectors joining to Sega Network PCB + CN13 - Battery connector (maintains power to DIMM RAM) + CN14S - 100 pin connector joining to base board + JP4-10 - Jumpers. Settings are as follows (taken from Wangan Midnight Maximum Tune 2 (Japan) (Rev A)) + JP4 2-3 + JP5 2-3. Sets DIMM RAM size. 1-2 = 1GB (2x 512M sticks), 2-3 = 512MB (1x 512M stick) + JP6 1-2 + JP7 2-3 + JP8 2-3 + JP9 1-2 + JP10 1-2 + FLASH.IC8 - ST M29W160 16MBit Flash ROM stamped 'FPR24042' (TSOP48) + + +Filter Board +------------ + +839-1208-02 +171-8205C SEGA 2002 +|----------------------------------------------------------------| +| SP-DIF LED_STATUS2 LED_STATUS1 CN3 | +| | +| DIN1 LED_3.3V | +| LED_5V | +| DIPSW(8) LED_12V | +|CN6 CN5 CN4 SW2 SW1 CN2 CN1 | +|----------------------------------------------------------------| +Notes: + CN1 - 8-pin JVS power input connector + CN2 - 6-pin JVS power input connector + CN3 - Red/white RCA unamplified stereo audio output jacks + CN4 - 11-pin connector + CN5 - 8-pin connector + CN6 - 7-pin connector + SW1/2 - test/service buttons + DIN1 - 96-pin connector joining to Base Board + DIPSW - 8-position DIP switch. On this game (Wangan Midnight Maximum Tune 2 (Japan) (Rev A)) DIPs 3, 4, 6, 7 & 8 are set ON. The others are OFF. + +Dump info: + +Network Board Dump : Ver1305.bin +Media Board dump : FPR21042_M29W160ET.bin +Base Board Dumps : ic10_g24lc64.bin ic11_24lc024.bin pc20_g24lc64.bin +Xbox Board Dump : chihiro_xbox_bios.bin + +FPR21042_M29W160ET.bin : +As in Triforce, it consists of two versions in the same flash, the first MB of the flash has +an older version as backup, and the second MB has the current version, versions included are: +SegaBoot Ver.2.00.0 Build:Feb 7 2003 12:28:30 +SegaBoot Ver.2.13.0 Build:Mar 3 2005 17:03:15 + +ic10_g24lc64.bin: This dump contains the firmware of the Base Board, serial number and REGION of the whole system +Region is located at Offset 0x00001F10 , 01 means JAP, 02 Means USA, 03 Means EXPORT, if you +want to change the region of your Chihiro Board, just change this byte. + +Thanks to Alex, Mr Mudkips, and Philip Burke for this info. + +*/ + +#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 "includes/xbox.h" + +// for now, make buggy GCC/Mingw STFU about I64FMT +#if (defined(__MINGW32__) && (__GNUC__ >= 5)) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat" +#pragma GCC diagnostic ignored "-Wformat-extra-args" +#endif + +#define LOG_PCI +//#define LOG_BASEBOARD + +class chihiro_state : public xbox_base_state +{ +public: + chihiro_state(const machine_config &mconfig, device_type type, const char *tag) : + xbox_base_state(mconfig, type, tag), + usbhack_index(-1), + usbhack_counter(0), + dimm_board_memory(NULL), + dimm_board_memory_size(0) { } + + DECLARE_READ32_MEMBER(mediaboard_r); + DECLARE_WRITE32_MEMBER(mediaboard_w); + + virtual void machine_start(); + void baseboard_ide_event(int type, UINT8 *read, UINT8 *write); + UINT8 *baseboard_ide_dimmboard(UINT32 lba); + void dword_write_le(UINT8 *addr, UINT32 d); + void word_write_le(UINT8 *addr, UINT16 d); + virtual void hack_eeprom(); + virtual void hack_usb(); + + struct chihiro_devices { + bus_master_ide_controller_device *ide; + naomi_gdrom_board *dimmboard; + } chihiro_devs; + int usbhack_index; + int usbhack_counter; + UINT8 *dimm_board_memory; + UINT32 dimm_board_memory_size; +}; + +/* jamtable instructions for Chihiro (different from Xbox console) +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, address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080 +{ + offs_t base, addr; + UINT32 opcode, op1, op2; + char sop1[16]; + char sop2[16]; + char pcrel[16]; + + addr = (offs_t)address; + if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &addr)) + { + debug_console_printf(machine, "Address is unmapped.\n"); + return; + } + while (1) + { + base = addr; + opcode = space.read_byte(addr); + addr++; + op1 = space.read_dword_unaligned(addr); + addr += 4; + op2 = space.read_dword_unaligned(addr); + addr += 4; + if (opcode == 0xe1) + { + opcode = op2 & 255; + op2 = op1; + //op1=edi; + sprintf(sop2, "%08X", op2); + sprintf(sop1, "ACC"); + sprintf(pcrel, "PC+ACC"); + } + else + { + sprintf(sop2, "%08X", op2); + sprintf(sop1, "%08X", op1); + sprintf(pcrel, "%08X", base + 9 + op1); + } + 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; + } +} + +static void jamtable_disasm_command(running_machine &machine, int ref, int params, const char **param) +{ + chihiro_state *state = machine.driver_data<chihiro_state>(); + address_space &space = state->m_maincpu->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; + jamtable_disasm(machine, space, (UINT32)addr, (UINT32)size); +} + +static void help_command(running_machine &machine, int ref, int params, const char **param) +{ + debug_console_printf(machine, "Available Chihiro commands:\n"); + debug_console_printf(machine, " chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n"); + debug_console_printf(machine, " chihiro help -- this list\n"); +} + +static void chihiro_debug_commands(running_machine &machine, int ref, int params, const char **param) +{ + if (params < 1) + return; + if (strcmp("jamdis", param[0]) == 0) + jamtable_disasm_command(machine, ref, params - 1, param + 1); + else + help_command(machine, ref, params - 1, param + 1); +} + +void chihiro_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[2] = { { "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 chihiro_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++; +} + +// ======================> ide_baseboard_device + +class ide_baseboard_device : public ata_mass_storage_device +{ +public: + // construction/destruction + ide_baseboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual int read_sector(UINT32 lba, void *buffer); + virtual int write_sector(UINT32 lba, const void *buffer); +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + UINT8 read_buffer[0x20]; + UINT8 write_buffer[0x20]; + chihiro_state *chihirosystem; +}; + +//************************************************************************** +// IDE HARD DISK IMAGE DEVICE +//************************************************************************** + +// device type definition +const device_type IDE_BASEBOARD = &device_creator<ide_baseboard_device>; + +//------------------------------------------------- +// ide_baseboard_device - constructor +//------------------------------------------------- + +ide_baseboard_device::ide_baseboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : ata_mass_storage_device(mconfig, IDE_BASEBOARD, "IDE Baseboard", tag, owner, clock, "ide_baseboard", __FILE__) +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void ide_baseboard_device::device_start() +{ + ata_mass_storage_device::device_start(); + chihirosystem = machine().driver_data<chihiro_state>(); + // savestates + save_item(NAME(read_buffer)); + save_item(NAME(write_buffer)); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void ide_baseboard_device::device_reset() +{ + if (!m_can_identify_device) + { + m_num_cylinders = 65535; + m_num_sectors = 255; + m_num_heads = 255; + ide_build_identify_device(); + m_can_identify_device = 1; + } + + ata_mass_storage_device::device_reset(); +} + +int ide_baseboard_device::read_sector(UINT32 lba, void *buffer) +{ + int off; + UINT8 *data; + + /* + It assumes there are 4 "partitions", the size of the first one depends on bits 3-0 of io port 40f4: + Value Size lba + 0 0x40000-0x8000 + ... + 4 0x400000-0x8000 + The size of the second one is always 0x8000 sectors, and is used as a special communication area + This is a list of the partitions in the minimum size case: + Name Start lba Size lba Size + \??\mbfs: 0x0 0x38000 112MB + \??\mbcom: 0x38000 0x8000 16MB + \??\mbrom0: 0x8000000 0x800 1MB + \??\mbrom1: 0x8000800 0x800 1MB + This is a list of the partitions in the maximum size case: + Name Start lba Size lba Size + \??\mbfs: 0x0 0x3f8000 2032MB + \??\mbcom: 0x3f8000 0x8000 16MB + \??\mbrom0: 0x8000000 0x800 1MB + \??\mbrom1: 0x8000800 0x800 1MB + */ + logerror("baseboard: read sector lba %08x\n", lba); + if (lba >= 0x08000000) { + off = (lba & 0x7ff) * 512; + data = memregion(":others")->base(); + memcpy(buffer, data + off, 512); + return 1; + } + if (lba >= 0xf8000) { + memset(buffer, 0, 512); + lba = lba - 0xf8000; + if (lba == 0x4800) + memcpy(buffer, read_buffer, 0x20); + else if (lba == 0x4801) + memcpy(buffer, write_buffer, 0x20); + return 1; + } + // in a type 1 chihiro this gets data from the dimm board memory + data = chihirosystem->baseboard_ide_dimmboard(lba); + if (data != NULL) + memcpy(buffer, data, 512); + return 1; +} + +int ide_baseboard_device::write_sector(UINT32 lba, const void *buffer) +{ + logerror("baseboard: write sector lba %08x\n", lba); + if (lba >= 0xf8000) { + lba = lba - 0xf8000; + if (lba == 0x4800) + memcpy(read_buffer, buffer, 0x20); + else if (lba == 0x4801) { + memcpy(write_buffer, buffer, 0x20); + // call chihiro driver + chihirosystem->baseboard_ide_event(3, read_buffer, write_buffer); + } + } + return 1; +} + +/* + * Chihiro Type 1 baseboard + */ + +void chihiro_state::dword_write_le(UINT8 *addr, UINT32 d) +{ + addr[0] = d & 255; + addr[1] = (d >> 8) & 255; + addr[2] = (d >> 16) & 255; + addr[3] = (d >> 24) & 255; +} + +void chihiro_state::word_write_le(UINT8 *addr, UINT16 d) +{ + addr[0] = d & 255; + addr[1] = (d >> 8) & 255; +} + +void chihiro_state::baseboard_ide_event(int type, UINT8 *read_buffer, UINT8 *write_buffer) +{ + int c; + + if ((type != 3) || ((write_buffer[0] == 0) && (write_buffer[1] == 0))) + return; +#ifdef LOG_BASEBOARD + logerror("Baseboard sector command:\n"); + for (int a = 0; a < 32; a++) + logerror(" %02X", write_buffer[a]); + logerror("\n"); +#endif + // response + // second word 8001 (8000+counter), first word=first word of written data (command ?), second dword ? + read_buffer[0] = write_buffer[0]; + read_buffer[1] = write_buffer[1]; + read_buffer[2] = 0x01; // write_buffer[2]; + read_buffer[3] = 0x80; // write_buffer[3] | 0x80; + c = write_buffer[2] + (write_buffer[3] << 8); // 0001 0101 0103 + switch (c) + { + case 0x0001: + // second dword + dword_write_le(read_buffer + 4, 0x00f00000); // ? + break; + case 0x0100: + // second dword third dword + dword_write_le(read_buffer + 4, 5); // game data loading phase + dword_write_le(read_buffer + 8, 0); // completion % + break; + case 0x0101: + // third word fourth word + word_write_le(read_buffer + 4, 0xca); // ? + word_write_le(read_buffer + 6, 0xcb); // ? + break; + case 0x0102: + // second dword + dword_write_le(read_buffer + 4, 0); // bit 16 develop. mode + break; + case 0x0103: + // dwords 1 3 4 + memcpy(read_buffer + 4, "-abc-abc12345678", 16); // ? + break; + } + // clear + write_buffer[0] = write_buffer[1] = write_buffer[2] = write_buffer[3] = 0; + // irq 10 active + xbox_base_devs.pic8259_2->ir2_w(1); +} + +UINT8 *chihiro_state::baseboard_ide_dimmboard(UINT32 lba) +{ + // return pointer to memory containing decrypted gdrom data (contains an image of a fatx partition) + if (chihiro_devs.dimmboard != NULL) + return dimm_board_memory + lba * 512; + return NULL; +} + +READ32_MEMBER(chihiro_state::mediaboard_r) +{ + UINT32 r; + + logerror("I/O port read %04x mask %08X\n", offset * 4 + 0x4000, mem_mask); + r = 0; + if ((offset == 7) && ACCESSING_BITS_16_31) + r = 0x10000000; + if ((offset == 8) && ACCESSING_BITS_0_15) + r = 0x000000a0; + if ((offset == 8) && ACCESSING_BITS_16_31) + r = 0x42580000; + if ((offset == 9) && ACCESSING_BITS_0_15) + r = 0x00004d41; + if ((offset == 0x3c) && ACCESSING_BITS_0_15) + r = 0x00000000; // bits 15-0 0 if media board present + if ((offset == 0x3d) && ACCESSING_BITS_0_15) + r = 0x00000002; // bits 3-0 size of dimm board memory. Must be 2 + return r; +} + +WRITE32_MEMBER(chihiro_state::mediaboard_w) +{ + logerror("I/O port write %04x mask %08X value %08X\n", offset * 4 + 0x4000, mem_mask, data); + // irq 10 + if ((offset == 0x38) && ACCESSING_BITS_8_15) + xbox_base_devs.pic8259_2->ir2_w(0); +} + +static ADDRESS_MAP_START(chihiro_map, AS_PROGRAM, 32, chihiro_state) + AM_IMPORT_FROM(xbox_base_map) +ADDRESS_MAP_END + +static ADDRESS_MAP_START(chihiro_map_io, AS_IO, 32, chihiro_state) + AM_IMPORT_FROM(xbox_base_map_io) + AM_RANGE(0x4000, 0x40ff) AM_READWRITE(mediaboard_r, mediaboard_w) +ADDRESS_MAP_END + +static INPUT_PORTS_START(chihiro) +INPUT_PORTS_END + +void chihiro_state::machine_start() +{ + xbox_base_state::machine_start(); + chihiro_devs.ide = machine().device<bus_master_ide_controller_device>("ide"); + chihiro_devs.dimmboard = machine().device<naomi_gdrom_board>("rom_board"); + if (chihiro_devs.dimmboard != NULL) { + dimm_board_memory = chihiro_devs.dimmboard->memory(dimm_board_memory_size); + } + if (machine().debug_flags & DEBUG_FLAG_ENABLED) + debug_console_register_command(machine(), "chihiro", CMDFLAG_NONE, 0, 1, 4, chihiro_debug_commands); + 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)); +} + +static SLOT_INTERFACE_START(ide_baseboard) + SLOT_INTERFACE("bb", IDE_BASEBOARD) +SLOT_INTERFACE_END + +static MACHINE_CONFIG_DERIVED_CLASS(chihiro_base, xbox_base, chihiro_state) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(chihiro_map) + MCFG_CPU_IO_MAP(chihiro_map_io) + + //MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ide_baseboard, NULL, "bb", true) + MCFG_DEVICE_MODIFY("ide:0") + MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, NULL, true) + MCFG_DEVICE_MODIFY("ide:1") + MCFG_DEVICE_SLOT_INTERFACE(ide_baseboard, "bb", true) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED(chihirogd, chihiro_base) + MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", NULL, NOOP) +MACHINE_CONFIG_END + +#define ROM_LOAD16_WORD_SWAP_BIOS(bios,name,offset,length,hash) \ + ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_BIOS(bios+1)) /* Note '+1' */ + +#define ROM_LOAD_BIOS(bios,name,offset,length,hash) \ + ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */ + +#define CHIHIRO_BIOS \ + ROM_REGION( 0x100000, "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( 0x404080, "others", 0) \ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "fpr21042_m29w160et.bin", 0x000000, 0x200000, CRC(a4fcab0b) SHA1(a13cf9c5cdfe8605d82150b7573652f419b30197) ) \ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic10_g24lc64.bin", 0x200000, 0x2000, CRC(cfc5e06f) SHA1(3ababd4334d8d57abb22dd98bd2d347df39648d9) ) \ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "ic11_24lc024.bin", 0x202000, 0x80, CRC(8dc8374e) SHA1(cc03a0650bfac4bf6cb66e414bbef121cba53efe) ) \ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "pc20_g24lc64.bin", 0x202080, 0x2000, CRC(7742ab62) SHA1(82dad6e2a75bab4a4840dc6939462f1fb9b95101) ) \ + ROM_LOAD16_WORD_SWAP_BIOS( 0, "ver1305.bin", 0x204080, 0x200000, CRC(a738ea1c) SHA1(45d94d0c39be1cb3db9fab6610a88a550adda4e9) ) + +ROM_START( chihiro ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) +ROM_END + +/* +Title THE HOUSE OF THE DEAD 3 +Media ID 2673 +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0001 +Version V1.004 +Release Date 20021029 +Manufacturer ID +TOC DISC +Track Start Sector End Sector Track Size +track01.bin 150 599 1058400 +track02.raw 750 2101 3179904 +track03.bin 45150 549299 1185760800 + +PIC +253-5508-0348 +317-0348-com +*/ +ROM_START( hotd3 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0001", 0, BAD_DUMP SHA1(174c72f851d0c97e8993227467f16b0781ed2f5c) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0348-com.data", 0x00, 0x50, CRC(d28219ef) SHA1(40dbbc092bc9f99b8d2ae67fbefacd62184f90ec) ) +ROM_END + +/* +Title CRAZY TAXI HIGHROLLER +Media ID 0D2E +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0002B +Version V3.000 +Release Date 20030224 +Manufacturer ID +TOC DISC +Track Start Sector End Sector Track Size +track01.bin 150 599 1058400 +track02.raw 750 2101 3179904 +track03.bin 45150 549299 1185760800 + +PIC +253-5508-0353 +317-0353-COM +*/ +ROM_START( crtaxihr ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0002b", 0, SHA1(e77d31aea9d4bf150e427aecf29b97855c2096f6) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0353-com.pic", 0x000000, 0x004000, CRC(1c6830b1) SHA1(75be47441783c18ee296209a34c432864deed70d) ) +ROM_END + +/* +Title VIRTUA COP 3 +Media ID C4AD +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0003A +Version V2.004 +Release Date 20030226 +Manufacturer ID +TOC DISC +Track Start Sector End Sector Track Size +track01.bin 150 599 1058400 +track02.raw 750 2101 3179904 +track03.bin 45150 549299 1185760800 + +PIC +255-5508-354 +317-0354-COM +*/ +ROM_START( vcop3 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0003a", 0, SHA1(04cd12bec50a9e9f1f05e7b7c2ef396800a385dd) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0354-com.data", 0x00, 0x50, CRC(df7e3217) SHA1(9f0f4bf6b15f3b6eeea81eaa27b3d25bd94110da) ) +ROM_END + +ROM_START( outr2 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0004a", 0, SHA1(055a13a5dc4f54e6b6bdf5ce29dbda14cc9741d7) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0372-com.data", 0x00, 0x50, CRC(a15c9666) SHA1(fd36c524744acb33e579ccb257c71375a5d3af67) ) +ROM_END + +ROM_START( mj2c ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0006c", 0, BAD_DUMP SHA1(505653117a73ed8b256ccf19450e7573a4dc57e9) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0374-jpn.pic", 0x000000, 0x004000, CRC(004f77a1) SHA1(bc5c6950293f3bff60bf7913d20a2046aa19ea69) ) +ROM_END + +ROM_START( mj2 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0006f", 0, SHA1(d3900ca5135f9001e642c78b4d323d353880b41b) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0374-jpn.pic", 0x000000, 0x004000, CRC(004f77a1) SHA1(bc5c6950293f3bff60bf7913d20a2046aa19ea69) ) +ROM_END + +/* +Title MJ2 +Media ID 3580 +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0006G +Version V8.000 +Release Date 20050202 +Manufacturer ID +TOC DISC +Track Start Sector End Sector Track Size +track01.bin 150 599 1058400 +track02.raw 750 2101 3179904 +track03.bin 45150 549299 1185760800 +*/ +ROM_START( mj2g ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + // this is not CHDv4, but a really bad dump, only ~1/3 of disk content is dumped + DISK_IMAGE_READONLY( "gdx-0006g", 0, BAD_DUMP SHA1(e306837d5c093fdf1e9ff02239a8563535b1c181) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0374-jpn.pic", 0x000000, 0x004000, CRC(004f77a1) SHA1(bc5c6950293f3bff60bf7913d20a2046aa19ea69) ) +ROM_END + +ROM_START( ollie ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0007", 0, BAD_DUMP SHA1(8898a571a427936bffcecd3ef27cb79087d22798) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0377-com.data", 0x00, 0x50, CRC(d2a8b31f) SHA1(e9ee2df30031826db6bc4bd91969e6680255dcf9) ) +ROM_END + +ROM_START( wangmid ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0009b", 0, SHA1(6fcbebb95b53eaabbc5da6ee08fbe15c2922b8d4) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-5101-com.data", 0x00, 0x50, CRC(3af801f3) SHA1(e9a2558930f3f1f55d5b3c2cadad69329d931f26) ) +ROM_END + +ROM_START( ghostsqo ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0012", 0, SHA1(ad5d08cc3b8cfd0890feb152670b429c28659512) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0398-com.data", 0x00, 0x50, CRC(8c5391a2) SHA1(e64cadeb30c94c3cd4002630cd79cc76c7bde2ed) ) +ROM_END + +/* +Title GHOST SQUAD +Media ID 004F +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0012A +Version V2.000 +Release Date 20041209 +Manufacturer ID +BHU.BIN +970efe79ce32ab4a +PIC +253-5508-0398 +317-0398-COM +*/ +ROM_START( ghostsqu ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0012a", 0, BAD_DUMP SHA1(d7d78ce4992cb16ee5b4ac6ca7a37c46b07e8c14) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0398-com.data", 0x00, 0x50, CRC(8c5391a2) SHA1(e64cadeb30c94c3cd4002630cd79cc76c7bde2ed) ) +ROM_END + +ROM_START( gundamos ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0013", 0, BAD_DUMP SHA1(96b3dafcc2d2d6803fe3bf43a245d43ee5e0e5a6) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-0400-jpn.data", 0x00, 0x50, CRC(0479c383) SHA1(7e86a037d2f9d09cec61a38cb19de510bf9482b3) ) +ROM_END + +ROM_START( outr2st ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0014a", 0, BAD_DUMP SHA1(4f9656634c47631f63eab554a13d19b15558217e) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) // number was not readable on pic, please fix if known + ROM_LOAD( "317-0xxx-com.pic", 0x000000, 0x004000, CRC(f94cf26f) SHA1(dd4af2b52935c7b2d8cd196ec1a30c0ef0993322) ) +ROM_END + +ROM_START( wangmid2 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0015", 0, BAD_DUMP SHA1(259483fd211a70c23205ffd852316d616c5a2740) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-5106-jpn.data", 0x00, 0x50, CRC(75c716aa) SHA1(5c2bcf3d28a80b336c6882d5aeb010d04327f8c1) ) +ROM_END + +ROM_START( wangmd2b ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0016a", 0, BAD_DUMP SHA1(cb306df60550bbd8df312634cb97014bb39f1631) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("317-5106-com.data", 0x00, 0x50, CRC(75c716aa) SHA1(5c2bcf3d28a80b336c6882d5aeb010d04327f8c1) ) +ROM_END + +ROM_START( mj3d ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0017d", 0, BAD_DUMP SHA1(cfbbd452c8f4efe0e99f398f5521fc3574b913bb) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0414-jpn.pic", 0x000000, 0x004000, CRC(27d1c541) SHA1(c85a8229dd769af02ab43c97f09f995743cdb315) ) +ROM_END + +ROM_START( mj3 ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0017f", 0, SHA1(8641be9b2e1d8eb33cf27d3444956c0117debc2f) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-0414-jpn.pic", 0x000000, 0x004000, CRC(27d1c541) SHA1(c85a8229dd769af02ab43c97f09f995743cdb315) ) +ROM_END + +ROM_START( scg06nt ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0018a", 0, BAD_DUMP SHA1(e6f3dc8066392854ad7d83f81d3cbc81a5e340b3) ) + + ROM_REGION( 0x50, "pic", ROMREGION_ERASE) + ROM_LOAD("gdx-0018.data", 0x00, 0x50, CRC(1a210abd) SHA1(43a54d028315d2dfa9f8ea6fb59265e0b980b02f) ) +ROM_END + +ROM_START( mj3evo ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0021b", 0, SHA1(c97d1dc95cdf1b4bd5d7cf6b4db0757f3d6bd723) ) + + // PIC label is unknown + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + ROM_LOAD( "317-xxxx-jpn.pic", 0x000000, 0x004000, CRC(650fcc94) SHA1(c88488900460fb3deecb3cf376fc043b10c020ef) ) +ROM_END + +/* +Title BOX GDROM CF-BOX FIRM +Media ID EB08 +Media Config GD-ROM1/1 +Regions J +Peripheral String 0000000 +Product Number GDX-0024A +Version V2.000 +Release Date 20090331 +Manufacturer ID +TOC DISC +Track Start Sector End Sector Track Size +track01.bin 150 8740 20206032 +track02.raw 8891 10242 3179904 +track03.bin 45150 549299 1185760800 +*/ +ROM_START( ccfboxa ) + CHIHIRO_BIOS + + DISK_REGION( "gdrom" ) + DISK_IMAGE_READONLY( "gdx-0024a", 0, SHA1(79d8c0faeec7cf6882f014760b8af938800b7e52) ) + + ROM_REGION( 0x4000, "pic", ROMREGION_ERASEFF) + //PIC16C621A (317-0567-EXP) + //(sticker 253-5508-0567) + ROM_LOAD("317-0567-exp.pic", 0x00, 0x4000, CRC(cd1d2b2d) SHA1(78203ee0339f76eb76da08d7de43e7e44e4b7d32) ) +ROM_END + + +/* Main board */ +/*Chihiro*/ GAME( 2002, chihiro, 0, chihiro_base, chihiro, driver_device, 0, ROT0, "Sega", "Chihiro Bios", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_IS_BIOS_ROOT ) + +/* GDX-xxxx (Sega GD-ROM games) */ +/* 0001 */ GAME( 2002, hotd3, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Wow Entertainment", "The House of the Dead III (GDX-0001)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0002 GAME( 2003, crtaxhro, crtaxihr, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Hitmaker", "Crazy Taxi High Roller (GDX-0002)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0002A GAME( 2003, crtaxhra, crtaxihr, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Hitmaker", "Crazy Taxi High Roller (Rev A) (GDX-0002A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0002B */ GAME( 2003, crtaxihr, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Hitmaker", "Crazy Taxi High Roller (Rev B) (GDX-0002B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0003 GAME( 2003, vcop3o, vcop3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Virtua Cop 3 (GDX-0003)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0003A */ GAME( 2003, vcop3, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Virtua Cop 3 (Rev A) (GDX-0003A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0004 GAME( 2003, outr2o, outr2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 (GDX-0004)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +/* 0004A */ GAME( 2003, outr2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 (Rev A) (GDX-0004A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +// 0005 GAME( 2004, sgolcnpt, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Golf Club Network Pro Tour (GDX-0005)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +// 0006 GAME( 2004, mj2o, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (GDX-0006)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0006A GAME( 2004, mj2a, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev A) (GDX-0006A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0006B GAME( 2004, mj2b, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev B) (GDX-0006B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0006C */ GAME( 2004, mj2c, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev C) (GDX-0006C)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0006D GAME( 2004, mj2d, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev D) (GDX-0006D)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0006E GAME( 2004, mj2e, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev E) (GDX-0006E)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0006F */ GAME( 2004, mj2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev F) (GDX-0006F)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0006G */ GAME( 2004, mj2g, mj2, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 2 (Rev G) (GDX-0006G)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0007 */ GAME( 2004, ollie, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega / Amusement Vision", "Ollie King (GDX-0007)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0008 GAME( 2004, wangmdjo, wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (GDX-0008)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0008A GAME( 2004, wangmdja, wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev A) (GDX-0008A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0008B GAME( 2004, wangmidj, wangmidj, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Japan) (Rev B) (GDX-0008B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0009 GAME( 2004, wangmido, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (GDX-0009)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0009A GAME( 2004, wangmida, wangmid, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev A) (GDX-0009A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0009B */ GAME( 2004, wangmid, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune (Export) (Rev B) (GDX-0009B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0010 +// 0011 GAME( 2004, outr2sp, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 SP (Japan) (GDX-0011)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE ) +/* 0012 */ GAME( 2004, ghostsqo, ghostsqu, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (GDX-0012)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0012A */ GAME( 2004, ghostsqu, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Ghost Squad (Rev A) (GDX-0012A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0013 */ GAME( 2005, gundamos, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Banpresto", "Gundam Battle Operating Simulator (GDX-0013)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0014 GAME( 2004, outr2sto, outr2st, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (GDX-0014)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0014A */ GAME( 2004, outr2st, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "OutRun 2 Special Tours (Rev A) (GDX-0014A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0015 */ GAME( 2005, wangmid2, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Japan) (GDX-0015)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0016 GAME( 2005, wanmd2bo, wangmd2b, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (GDX-0016)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0016A */ GAME( 2005, wangmd2b, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Namco", "Wangan Midnight Maximum Tune 2 (Export) (Rev A) (GDX-0016A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0017 GAME( 2005, mj3o, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (GDX-0017)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0017A GAME( 2005, mj3a, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev A) (GDX-0017A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0017B GAME( 2005, mj3b, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev B) (GDX-0017B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0017C GAME( 2005, mj3c, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev C) (GDX-0017C)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0017D */ GAME( 2005, mj3d, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev D) (GDX-0017D)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0017E GAME( 2005, mj3e, mj3, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev E) (GDX-0017E)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0017F */ GAME( 2005, mj3, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 (Rev F) (GDX-0017F)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0018 GAME( 2005, scg06nto, scg06nt, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Club Golf 2006 Next Tours (GDX-0018)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0018A */ GAME( 2005, scg06nt, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Club Golf 2006 Next Tours (Rev A) (GDX-0018A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0019 +// 0020 +// 0021 GAME( 2006, mj3evoo, mj3evo, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 Evolution (GDX-0021)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0021A GAME( 2006, mj3evoa, mj3evo, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 Evolution (Rev A) (GDX-0021A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0021B */ GAME( 2007, mj3evo, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Sega Network Taisen Mahjong MJ 3 Evolution (Rev B) (GDX-0021B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +// 0022 +// 0023 +// 0024 GAME( 2009, ccfboxo, ccfboxa, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Chihiro Firmware Update For Compact Flash Box (GDX-0024)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +/* 0024A */ GAME( 2009, ccfboxa, chihiro, chihirogd, chihiro, driver_device, 0, ROT0, "Sega", "Chihiro Firmware Update For Compact Flash Box (Rev A) (GDX-0024A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) + +#if (defined(__MINGW32__) && (__GNUC__ >= 5)) +#pragma GCC diagnostic pop +#endif |