iteagle -- Organize bios for iteagle 1 boards (virtual pool).

voodoo_pci -- Fixed voodoo_1 pci initialization.
This commit is contained in:
ted green 2015-05-19 15:48:44 -06:00
parent 4587bb0369
commit 67a7c86c94
5 changed files with 59 additions and 17 deletions

View File

@ -51,6 +51,11 @@ machine_config_constructor voodoo_pci_device::device_mconfig_additions() const
const device_type VOODOO_PCI = &device_creator<voodoo_pci_device>;
DEVICE_ADDRESS_MAP_START(config_map, 32, voodoo_pci_device)
AM_RANGE(0x40, 0x4f) AM_READWRITE (pcictrl_r, pcictrl_w)
AM_INHERIT_FROM(pci_device::config_map)
ADDRESS_MAP_END
DEVICE_ADDRESS_MAP_START(voodoo_reg_map, 32, voodoo_pci_device)
AM_RANGE(0x0, 0x00ffffff) AM_DEVREADWRITE("voodoo", voodoo_device, voodoo_r, voodoo_w)
ADDRESS_MAP_END
@ -83,11 +88,12 @@ void voodoo_pci_device::device_start()
voodoo_device::static_set_fbmem(m_voodoo, m_fbmem);
voodoo_device::static_set_tmumem(m_voodoo, m_tmumem0, m_tmumem1);
switch (m_type) {
//void set_ids(UINT32 main_id, UINT8 revision, UINT32 pclass, UINT32 subsystem_id);
case TYPE_VOODOO_1:
set_ids(0x121a0001, 0x02, 0x000003, 0x000000);
set_ids(0x121a0001, 0x02, 0x000000, 0x000000);
break;
case TYPE_VOODOO_2:
set_ids(0x121a0002, 0x02, 0x000003, 0x000000);
set_ids(0x121a0002, 0x02, 0x040000, 0x000000);
break;
case TYPE_VOODOO_BANSHEE:
set_ids(0x121a0003, 0x02, 0x000003, 0x000000);
@ -109,6 +115,7 @@ void voodoo_pci_device::device_start()
void voodoo_pci_device::device_reset()
{
memset(m_pcictrl_reg, 0, sizeof(m_pcictrl_reg));
pci_device::device_reset();
}
@ -148,3 +155,26 @@ UINT32 voodoo_pci_device::screen_update(screen_device &screen, bitmap_rgb32 &bit
{
return voodoo_update(m_voodoo, bitmap, cliprect) ? 0 : UPDATE_HAS_NOT_CHANGED;
}
// PCI bus control
READ32_MEMBER (voodoo_pci_device::pcictrl_r)
{
UINT32 result = m_pcictrl_reg[offset];
if (1)
logerror("%06X:voodoo_pci_device pcictrl_r from offset %02X = %08X & %08X\n", space.device().safe_pc(), offset*4, result, mem_mask);
return result;
}
WRITE32_MEMBER (voodoo_pci_device::pcictrl_w)
{
COMBINE_DATA(&m_pcictrl_reg[offset]);
switch (offset) {
case 0x0/4: // The address map starts at 0x40
// HW initEnable
voodoo_set_init_enable(m_voodoo, data);
logerror("%06X:voodoo_pci_device pcictrl_w to offset %02X = %08X & %08X\n", space.device().safe_pc(), offset*4, data, mem_mask);
break;
default:
logerror("%06X:voodoo_pci_device pcictrl_w to offset %02X = %08X & %08X\n", space.device().safe_pc(), offset*4, data, mem_mask);
break;
}
}

View File

@ -27,12 +27,16 @@ public:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
virtual DECLARE_ADDRESS_MAP(config_map, 32);
void set_cpu_tag(const char *tag);
static void set_type(const int type) {m_type = type;}
void set_fbmem(const int fbmem) {m_fbmem = fbmem;}
void set_tmumem(const int tmumem0, const int tmumem1) {m_tmumem0 = tmumem0; m_tmumem1 = tmumem1;}
DECLARE_READ32_MEMBER( pcictrl_r);
DECLARE_WRITE32_MEMBER( pcictrl_w);
protected:
virtual void device_start();
virtual void device_reset();
@ -43,6 +47,7 @@ private:
int m_fbmem, m_tmumem0, m_tmumem1;
const char *m_cpu_tag;
UINT32 m_pcictrl_reg[0x10];
DECLARE_ADDRESS_MAP(voodoo_reg_map, 32);
DECLARE_ADDRESS_MAP(banshee_reg_map, 32);
DECLARE_ADDRESS_MAP(lfb_map, 32);

View File

@ -34,19 +34,23 @@
* Creative/Ensoniq AudioPCI ES1373 audio
* Atmel 90S2313 AVR-based microcontroller for protection
* STM48T02 NVRAM
* AMD AM85C30 Enhanced Serial Communications Controller
* Conexant CX88168 modem
Eagle 1 Notes:
* Cypress CY82C693 Peripheral Controller
* 3DFX Voodoo 1 video
TODO:
* Add support for Eagle 1 (Virtual Pool) PCBs
* Add support for later RED boards
* Add support for later RED boards
Notes:
Sound volume may be muted, it can be adjusted through the service menu or with volume up/down buttons (+/-)
Notes:
Sound volume may be muted, it can be adjusted through the service menu or with volume up/down buttons (+/-)
The PCB for Virtual Pool is considered "Eagle 1" while the boards
that were production runs for later games are considered Eagle 2.
IE: GT Fore! & BBH, both security chips are "E2-" as are various
preprogrammed PALs: E2-CARD1 & E2-RES3
The PCB for Virtual Pool is considered "Eagle 1" while the boards
that were production runs for later games are considered Eagle 2.
IE: GT Fore! & BBH, both security chips are "E2-" as are various
preprogrammed PALs: E2-CARD1 & E2-RES3
***************************************************************************/
@ -339,8 +343,6 @@ INPUT_PORTS_END
ROMX_LOAD( "eagle102.u15", 0x000000, 0x100000, CRC(1fd39e73) SHA1(d1ac758f94defc5c55c62594b3999a406dd9ef1f), ROM_BIOS(10) ) \
ROM_SYSTEM_BIOS( 10, "101", "bootrom 1.01" ) \
ROMX_LOAD( "eagle101.u15", 0x000000, 0x100000, CRC(2600bc2b) SHA1(c4b89e69c51e4a3bb1874407c4d30b6caed4f396), ROM_BIOS(11) ) \
ROM_SYSTEM_BIOS( 11, "pool", "Virtual Pool bootrom" ) \
ROMX_LOAD( "eagle1_bootrom_v1p01", 0x000000, 0x080000, CRC(6c8c1593) SHA1(707d5633388f8dd4e9252f4d8d6f27c98c2cb35a), ROM_BIOS(12) ) \
ROM_REGION( 0x30000, "fpga", 0 ) \
ROM_LOAD( "17s20lpc_sb4.u26", 0x000000, 0x008000, CRC(62c4af8a) SHA1(6eca277b9c66a401990599e98fdca64a9e38cc9a) ) \
ROM_LOAD( "17s20lpc_sb5.u26", 0x008000, 0x008000, CRC(c88b9d42) SHA1(b912d0fc50ecdc6a198c626f6e1644e8405fac6e) ) \
@ -358,7 +360,9 @@ ROM_START( iteagle )
ROM_END
ROM_START( virtpool ) /* On earlier Eagle 1 PCB, possibly a prototype version - later boards are known as Eagle 2 */
EAGLE_BIOS
ROM_REGION( 0x100000, ":pci:00.0", 0 ) /* MIPS code */
ROM_SYSTEM_BIOS( 0, "pool", "Virtual Pool bootrom" )
ROMX_LOAD( "eagle1_bootrom_v1p01", 0x000000, 0x080000, CRC(6c8c1593) SHA1(707d5633388f8dd4e9252f4d8d6f27c98c2cb35a), ROM_BIOS(1) )
ROM_REGION( 0x0880, "atmel", 0 ) /* Atmel 90S2313 AVR internal CPU code */
ROM_LOAD( "itvp-1.u53", 0x0000, 0x0880, NO_DUMP )

View File

@ -131,11 +131,11 @@ READ32_MEMBER( iteagle_fpga_device::fpga_r )
if (LOG_FPGA && m_prev_reg!=offset)
logerror("%s:fpga_r offset %04X = %08X & %08X\n", machine().describe_context(), offset*4, result, mem_mask);
break;
case 0x0c/4: // 1d = modem byte
result = (result & 0xFFFF0000) | 0x2c2c;
if (LOG_FPGA)
logerror("%s:fpga_r offset %04X = %08X & %08X\n", machine().describe_context(), offset*4, result, mem_mask);
break;
// case 0x0c/4: // 1d = modem byte
// result = (result & 0xFFFF0000) | 0x2c2c;
// if (LOG_FPGA)
// logerror("%s:fpga_r offset %04X = %08X & %08X\n", machine().describe_context(), offset*4, result, mem_mask);
// break;
case 0x14/4: // Interrupt & 0x4==0x00080000
result = 0x00000000;
if (LOG_FPGA)
@ -146,6 +146,7 @@ READ32_MEMBER( iteagle_fpga_device::fpga_r )
if (LOG_FPGA)
logerror("%s:fpga_r offset %04X = %08X & %08X\n", machine().describe_context(), offset*4, result, mem_mask);
break;
case 0x0c/4: // 1d = modem byte
case 0x1c/4: // 1d = modem byte
result = (result & 0xFFFF0000) | ((m_serial_reg1d[m_serial_idx]&0xff)<<8) | (m_serial_reg1c[m_serial_idx]&0xff);
if (ACCESSING_BITS_0_15) {
@ -200,6 +201,7 @@ WRITE32_MEMBER( iteagle_fpga_device::fpga_w )
if (LOG_FPGA)
logerror("%s:fpga_w offset %04X = %08X & %08X\n", machine().describe_context(), offset*4, data, mem_mask);
break;
case 0x0c/4:
case 0x1c/4:
if (ACCESSING_BITS_0_7) {
if (!m_serial_data) {

View File

@ -23,6 +23,7 @@
#define MCFG_ITEAGLE_EEPROM_INIT(_sw_version, _hw_version) \
downcast<iteagle_eeprom_device *>(device)->set_info(_sw_version, _hw_version);
// Mimic Cypress CY82C693 Peripheral Controller
#define MCFG_ITEAGLE_IDE_ADD(_tag) \
MCFG_PCI_DEVICE_ADD(_tag, ITEAGLE_IDE, 0x1080C693, 0x00, 0x060100, 0x00)