pcipc: sandbox for emulating a modern-ish pc (nw)

This commit is contained in:
Olivier Galibert 2016-05-22 10:56:10 +02:00
parent 0036e43b7b
commit d8aa10fbc1
12 changed files with 1148 additions and 33 deletions

View File

@ -1786,6 +1786,10 @@ if (MACHINES["PCI"]~=null) then
MAME_DIR .. "src/devices/machine/i82875p.h",
MAME_DIR .. "src/devices/machine/i6300esb.cpp",
MAME_DIR .. "src/devices/machine/i6300esb.h",
MAME_DIR .. "src/devices/machine/i82439hx.cpp",
MAME_DIR .. "src/devices/machine/i82439hx.h",
MAME_DIR .. "src/devices/machine/i82371sb.cpp",
MAME_DIR .. "src/devices/machine/i82371sb.h",
MAME_DIR .. "src/devices/machine/lpc.cpp",
MAME_DIR .. "src/devices/machine/lpc.h",
MAME_DIR .. "src/devices/machine/lpc-acpi.cpp",

View File

@ -244,6 +244,18 @@ if (VIDEOS["GF7600GS"]~=null) then
}
end
--------------------------------------------------
--
--@src/devices/video/mga2064w.h,VIDEOS["MGA2064W"] = true
--------------------------------------------------
if (VIDEOS["MGA2064W"]~=null) then
files {
MAME_DIR .. "src/devices/video/mga2064w.cpp",
MAME_DIR .. "src/devices/video/mga2064w.h",
}
end
--------------------------------------------------
--
--@src/devices/video/hd44102.h,VIDEOS["HD44102"] = true

View File

@ -334,6 +334,7 @@ VIDEOS["VIC4567"] = true
VIDEOS["SCN2674"] = true
VIDEOS["GB_LCD"] = true
VIDEOS["GBA_LCD"] = true
VIDEOS["MGA2064W"] = true
--------------------------------------------------
-- specify available machine cores
@ -2445,6 +2446,7 @@ files {
MAME_DIR .. "src/mame/drivers/ibmpc.cpp",
MAME_DIR .. "src/mame/drivers/ibmpcjr.cpp",
MAME_DIR .. "src/mame/drivers/pc.cpp",
MAME_DIR .. "src/mame/drivers/pcipc.cpp",
MAME_DIR .. "src/mame/drivers/tandy1t.cpp",
MAME_DIR .. "src/mame/video/pc_t1t.cpp",
MAME_DIR .. "src/mame/video/pc_t1t.h",

View File

@ -0,0 +1,361 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#include "i82371sb.h"
const device_type I82371SB_ISA = &device_creator<i82371sb_isa_device>;
DEVICE_ADDRESS_MAP_START(config_map, 32, i82371sb_isa_device)
AM_RANGE(0x4c, 0x4f) AM_READWRITE8 (iort_r, iort_w, 0x000000ff)
AM_RANGE(0x4c, 0x4f) AM_READWRITE16(xbcs_r, xbcs_w, 0xffff0000)
AM_RANGE(0x60, 0x63) AM_READWRITE8 (pirqrc_r, pirqrc_w, 0xffffffff)
AM_RANGE(0x68, 0x6b) AM_READWRITE8 (tom_r, tom_w, 0x000000ff)
AM_RANGE(0x68, 0x6b) AM_READWRITE16(mstat_r, mstat_w, 0xffff0000)
AM_RANGE(0x70, 0x73) AM_READWRITE8 (mbirq0_r, mbirq0_w, 0x000000ff)
AM_RANGE(0x74, 0x77) AM_READWRITE8 (mbdma_r, mbdma_w, 0xffff0000)
AM_RANGE(0x80, 0x83) AM_READWRITE8 (dlc_r, dlc_w, 0x00ff0000)
AM_RANGE(0xa0, 0xa3) AM_READWRITE8 (smicntl_r, smicntl_w, 0x000000ff)
AM_RANGE(0xa0, 0xa3) AM_READWRITE16(smien_r, smien_w, 0xffff0000)
AM_RANGE(0xa4, 0xa7) AM_READWRITE (see_r, see_w)
AM_RANGE(0xa8, 0xab) AM_READWRITE8 (ftmr_r, ftmr_w, 0x000000ff)
AM_RANGE(0xa8, 0xab) AM_READWRITE16(smireq_r, smireq_w, 0xffff0000)
AM_RANGE(0xac, 0xaf) AM_READWRITE8 (ctltmr_r, ctltmr_w, 0x000000ff)
AM_RANGE(0xac, 0xaf) AM_READWRITE8 (cthtmr_r, cthtmr_w, 0x00ff0000)
AM_INHERIT_FROM(pci_device::config_map)
ADDRESS_MAP_END
DEVICE_ADDRESS_MAP_START(internal_io_map, 32, i82371sb_isa_device)
// AM_RANGE(0x0060, 0x0063) AM_READ8 (reset_irq12_1_r, 0x000000ff)
// AM_RANGE(0x0060, 0x0063) AM_READWRITE8 (nmi_st_r, nmi_st_w, 0x0000ff00)
AM_RANGE(0x0080, 0x0083) AM_WRITE8 (boot_state_w, 0x000000ff) // POST/non-existing, used for delays by the bios/os
AM_RANGE(0x00ec, 0x00ef) AM_WRITE8 (nop_w, 0x0000ff00) // Non-existing, used for delays by the bios/os
ADDRESS_MAP_END
i82371sb_isa_device::i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: pci_device(mconfig, I82371SB_ISA, "i82371sb southbridge ISA bridge", tag, owner, clock, "i82371sb_isa", __FILE__),
m_boot_state_hook(*this)
{
}
void i82371sb_isa_device::device_start()
{
pci_device::device_start();
m_boot_state_hook.resolve();
}
void i82371sb_isa_device::device_reset()
{
pci_device::device_reset();
iort = 0x4d;
xbcs = 0x0003;
memset(pirqrc, 0x80, sizeof(pirqrc));
tom = 0x02;
mstat = 0x0000;
mbirq0 = 0x80;
memset(mbdma, 0x0c, sizeof(mbdma));
pcsc = 0x0002;
apicbase = 0x00;
dlc = 0x00;
smicntl = 0x08;
smien = 0x0000;
see = 0x00000000;
ftmr = 0x0f;
smireq = 0x0000;
ctlmtr = 0x00;
cthmtr = 0x00;
}
void i82371sb_isa_device::reset_all_mappings()
{
pci_device::reset_all_mappings();
}
WRITE8_MEMBER (i82371sb_isa_device::boot_state_w)
{
m_boot_state_hook((offs_t)0, data);
}
WRITE8_MEMBER (i82371sb_isa_device::nop_w)
{
}
READ8_MEMBER (i82371sb_isa_device::iort_r)
{
return iort;
}
WRITE8_MEMBER(i82371sb_isa_device::iort_w)
{
iort = data;
logerror("iort = %02x\n", iort);
}
READ16_MEMBER (i82371sb_isa_device::xbcs_r)
{
return xbcs;
}
WRITE16_MEMBER(i82371sb_isa_device::xbcs_w)
{
COMBINE_DATA(&xbcs);
logerror("xbcs = %04x\n", xbcs);
}
READ8_MEMBER (i82371sb_isa_device::pirqrc_r)
{
return pirqrc[offset];
}
WRITE8_MEMBER(i82371sb_isa_device::pirqrc_w)
{
pirqrc[offset] = data;
logerror("pirqrc[%d] = %02x\n", offset, pirqrc[offset]);
}
READ8_MEMBER (i82371sb_isa_device::tom_r)
{
return tom;
}
WRITE8_MEMBER(i82371sb_isa_device::tom_w)
{
tom = data;
logerror("tom = %02x\n", tom);
}
READ16_MEMBER (i82371sb_isa_device::mstat_r)
{
return mstat;
}
WRITE16_MEMBER(i82371sb_isa_device::mstat_w)
{
COMBINE_DATA(&mstat);
logerror("mstat = %04x\n", mstat);
}
READ8_MEMBER (i82371sb_isa_device::mbirq0_r)
{
return mbirq0;
}
WRITE8_MEMBER(i82371sb_isa_device::mbirq0_w)
{
mbirq0 = data;
logerror("mbirq0 = %02x\n", mbirq0);
}
READ8_MEMBER (i82371sb_isa_device::mbdma_r)
{
return mbdma[offset];
}
WRITE8_MEMBER(i82371sb_isa_device::mbdma_w)
{
mbdma[offset] = data;
logerror("mbdma[%d] = %02x\n", offset, mbdma);
}
READ8_MEMBER (i82371sb_isa_device::apicbase_r)
{
return apicbase;
}
WRITE8_MEMBER(i82371sb_isa_device::apicbase_w)
{
apicbase = data;
logerror("apicbase = %02x\n", apicbase);
}
READ8_MEMBER (i82371sb_isa_device::dlc_r)
{
return dlc;
}
WRITE8_MEMBER(i82371sb_isa_device::dlc_w)
{
dlc = data;
logerror("dlc = %02x\n", dlc);
}
READ8_MEMBER (i82371sb_isa_device::smicntl_r)
{
return smicntl;
}
WRITE8_MEMBER(i82371sb_isa_device::smicntl_w)
{
smicntl = data;
logerror("smicntl = %02x\n", smicntl);
}
READ16_MEMBER (i82371sb_isa_device::smien_r)
{
return smien;
}
WRITE16_MEMBER(i82371sb_isa_device::smien_w)
{
COMBINE_DATA(&smien);
logerror("smien = %04x\n", smien);
}
READ32_MEMBER (i82371sb_isa_device::see_r)
{
return see;
}
WRITE32_MEMBER(i82371sb_isa_device::see_w)
{
COMBINE_DATA(&see);
logerror("see = %08x\n", see);
}
READ8_MEMBER (i82371sb_isa_device::ftmr_r)
{
return ftmr;
}
WRITE8_MEMBER(i82371sb_isa_device::ftmr_w)
{
ftmr = data;
logerror("ftmr = %02x\n", ftmr);
}
READ16_MEMBER (i82371sb_isa_device::smireq_r)
{
return smireq;
}
WRITE16_MEMBER(i82371sb_isa_device::smireq_w)
{
COMBINE_DATA(&smireq);
logerror("smireq = %04x\n", smireq);
}
READ8_MEMBER (i82371sb_isa_device::ctltmr_r)
{
return ctlmtr;
}
WRITE8_MEMBER(i82371sb_isa_device::ctltmr_w)
{
ctlmtr = data;
logerror("ctlmtr = %02x\n", ctlmtr);
}
READ8_MEMBER (i82371sb_isa_device::cthtmr_r)
{
return cthmtr;
}
WRITE8_MEMBER(i82371sb_isa_device::cthtmr_w)
{
cthmtr = data;
logerror("cthmtr = %02x\n", cthmtr);
}
void i82371sb_isa_device::map_bios(address_space *memory_space, UINT32 start, UINT32 end)
{
UINT32 mask = m_region->bytes() - 1;
memory_space->install_rom(start, end, m_region->base() + (start & mask));
}
void i82371sb_isa_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
{
map_bios(memory_space, 0xfffe0000, 0xffffffff);
map_bios(memory_space, 0x000e0000, 0x000fffff);
io_space->install_device(0, 0xffff, *this, &i82371sb_isa_device::internal_io_map);
#if 0
if(fwh_dec_en1 & 0x80) {
map_bios(memory_space, 0xfff80000, 0xffffffff, 7);
map_bios(memory_space, 0xffb80000, 0xffbfffff, 7);
map_bios(memory_space, 0x000e0000, 0x000fffff, 7);
}
if(fwh_dec_en1 & 0x40) {
map_bios(memory_space, 0xfff00000, 0xfff7ffff, 6);
map_bios(memory_space, 0xffb00000, 0xffb7ffff, 6);
}
if(fwh_dec_en1 & 0x20) {
map_bios(memory_space, 0xffe80000, 0xffefffff, 5);
map_bios(memory_space, 0xffa80000, 0xffafffff, 5);
}
if(fwh_dec_en1 & 0x10) {
map_bios(memory_space, 0xffe00000, 0xffe7ffff, 4);
map_bios(memory_space, 0xffa00000, 0xffa7ffff, 4);
}
if(fwh_dec_en1 & 0x08) {
map_bios(memory_space, 0xffd80000, 0xffdfffff, 3);
map_bios(memory_space, 0xff980000, 0xff9fffff, 3);
}
if(fwh_dec_en1 & 0x04) {
map_bios(memory_space, 0xffd00000, 0xffd7ffff, 2);
map_bios(memory_space, 0xff900000, 0xff97ffff, 2);
}
if(fwh_dec_en1 & 0x02) {
map_bios(memory_space, 0xffc80000, 0xffcfffff, 1);
map_bios(memory_space, 0xff880000, 0xff8fffff, 1);
}
if(fwh_dec_en1 & 0x01) {
map_bios(memory_space, 0xffc00000, 0xffc7ffff, 0);
map_bios(memory_space, 0xff800000, 0xff87ffff, 0);
}
if(acpi_cntl & 0x10)
acpi->map_device(memory_window_start, memory_window_end, 0, memory_space, io_window_start, io_window_end, pmbase, io_space);
if(gpio_cntl & 0x10)
logerror("%s: Warning: gpio range enabled at %04x-%04x\n", tag(), gpio_base, gpio_base+63);
UINT32 hpet = 0xfed00000 + ((gen_cntl & 0x00018000) >> 3);
logerror("%s: Warning: hpet at %08x-%08x\n", tag(), hpet, hpet+0x3ff);
if(lpc_en & 0x1000)
logerror("%s: Warning: superio at 2e-2f\n", tag());
if(lpc_en & 0x0800)
logerror("%s: Warning: mcu at 62/66\n", tag());
if(lpc_en & 0x0400)
logerror("%s: Warning: mcu at 60/64\n", tag());
if(lpc_en & 0x0200)
logerror("%s: Warning: gameport at 208-20f\n", tag());
if(lpc_en & 0x0100)
logerror("%s: Warning: gameport at 200-207\n", tag());
if(lpc_en & 0x0008) {
UINT16 fdc = lpc_if_fdd_lpt_range & 0x10 ? 0x370 : 0x3f0;
logerror("%s: Warning: floppy at %04x-%04x\n", tag(), fdc, fdc+7);
}
if(lpc_en & 0x0004) {
static const UINT16 lpt_pos[4] = { 0x378, 0x278, 0x3bc, 0x000 };
UINT16 lpt = lpt_pos[lpc_if_fdd_lpt_range & 3];
if(lpt)
logerror("%s: Warning: lpt at %04x-%04x %04x-%04x\n", tag(), lpt, lpt+7, lpt+0x400, lpt+0x407);
}
static const UINT16 com_pos[8] = { 0x3f8, 0x2f8, 0x220, 0x228, 0x238, 0x2e8, 0x338, 0x3e8 };
if(lpc_en & 0x0002) {
UINT16 comb = com_pos[(lpc_if_com_range >> 4) & 7];
logerror("%s: Warning: comb at %04x-%04x\n", tag(), comb, comb+7);
}
if(lpc_en & 0x0001) {
UINT16 coma = com_pos[lpc_if_com_range & 7];
logerror("%s: Warning: coma at %04x-%04x\n", tag(), coma, coma+7);
}
rtc->map_device(memory_window_start, memory_window_end, 0, memory_space, io_window_start, io_window_end, 0, io_space);
if(rtc_conf & 4)
rtc->map_extdevice(memory_window_start, memory_window_end, 0, memory_space, io_window_start, io_window_end, 0, io_space);
pit->map_device(memory_window_start, memory_window_end, 0, memory_space, io_window_start, io_window_end, 0, io_space);
#endif
}

View File

@ -0,0 +1,84 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
// Intel i82371sb southbridge (PIIX3)
#ifndef I82371SB_H
#define I82371SB_H
#include "pci.h"
#define MCFG_I82371SB_ISA_ADD(_tag) \
MCFG_PCI_DEVICE_ADD(_tag, I82371SB_ISA, 0x80867000, 0x03, 0x060100, 0x00000000)
#define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \
devcb = &i82371sb_isa_device::set_boot_state_hook(*device, DEVCB_##_devcb);
class i82371sb_isa_device : public pci_device {
public:
i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _Object> static devcb_base &set_boot_state_hook(device_t &device, _Object object) { return downcast<i82371sb_isa_device &>(device).m_boot_state_hook.set_callback(object); }
virtual void reset_all_mappings() override;
virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space) override;
virtual DECLARE_ADDRESS_MAP(config_map, 32) override;
DECLARE_ADDRESS_MAP(internal_io_map, 32);
DECLARE_WRITE8_MEMBER (boot_state_w);
DECLARE_WRITE8_MEMBER (nop_w);
DECLARE_READ8_MEMBER (iort_r);
DECLARE_WRITE8_MEMBER (iort_w);
DECLARE_READ16_MEMBER (xbcs_r);
DECLARE_WRITE16_MEMBER(xbcs_w);
DECLARE_READ8_MEMBER (pirqrc_r);
DECLARE_WRITE8_MEMBER (pirqrc_w);
DECLARE_READ8_MEMBER (tom_r);
DECLARE_WRITE8_MEMBER (tom_w);
DECLARE_READ16_MEMBER (mstat_r);
DECLARE_WRITE16_MEMBER(mstat_w);
DECLARE_READ8_MEMBER (mbirq0_r);
DECLARE_WRITE8_MEMBER (mbirq0_w);
DECLARE_READ8_MEMBER (mbdma_r);
DECLARE_WRITE8_MEMBER (mbdma_w);
DECLARE_READ16_MEMBER (pcsc_r);
DECLARE_WRITE16_MEMBER(pcsc_w);
DECLARE_READ8_MEMBER (apicbase_r);
DECLARE_WRITE8_MEMBER (apicbase_w);
DECLARE_READ8_MEMBER (dlc_r);
DECLARE_WRITE8_MEMBER (dlc_w);
DECLARE_READ8_MEMBER (smicntl_r);
DECLARE_WRITE8_MEMBER (smicntl_w);
DECLARE_READ16_MEMBER (smien_r);
DECLARE_WRITE16_MEMBER(smien_w);
DECLARE_READ32_MEMBER (see_r);
DECLARE_WRITE32_MEMBER(see_w);
DECLARE_READ8_MEMBER (ftmr_r);
DECLARE_WRITE8_MEMBER (ftmr_w);
DECLARE_READ16_MEMBER (smireq_r);
DECLARE_WRITE16_MEMBER(smireq_w);
DECLARE_READ8_MEMBER (ctltmr_r);
DECLARE_WRITE8_MEMBER (ctltmr_w);
DECLARE_READ8_MEMBER (cthtmr_r);
DECLARE_WRITE8_MEMBER (cthtmr_w);
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
devcb_write8 m_boot_state_hook;
UINT32 see;
UINT16 xbcs, mstat, pcsc, smien, smireq;
UINT8 iort, pirqrc[4], tom, mbirq0, mbdma[2], apicbase;
UINT8 dlc, smicntl, ftmr, ctlmtr, cthmtr;
void map_bios(address_space *memory_space, UINT32 start, UINT32 end);
};
extern const device_type I82371SB_ISA;
#endif

View File

@ -0,0 +1,308 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#include "i82439hx.h"
const device_type I82439HX = &device_creator<i82439hx_host_device>;
DEVICE_ADDRESS_MAP_START(config_map, 32, i82439hx_host_device)
AM_RANGE(0x50, 0x53) AM_READWRITE8(pcon_r, pcon_w, 0x000000ff)
AM_RANGE(0x50, 0x53) AM_READWRITE8(cc_r, cc_w, 0x00ff0000)
AM_RANGE(0x54, 0x57) AM_READWRITE8(dramec_r, dramec_w, 0x00ff0000)
AM_RANGE(0x54, 0x57) AM_READWRITE8(dramc_r, dramc_w, 0xff000000)
AM_RANGE(0x58, 0x5b) AM_READWRITE8(dramt_r, dramt_w, 0x000000ff)
AM_RANGE(0x58, 0x5b) AM_READWRITE8(pam0_r, pam0_w, 0xffffff00)
AM_RANGE(0x5c, 0x5f) AM_READWRITE8(pam3_r, pam3_w, 0xffffffff)
AM_RANGE(0x60, 0x67) AM_READWRITE8(drb_r, drb_w, 0xffffffff)
AM_RANGE(0x68, 0x6b) AM_READWRITE8(drt_r, drt_w, 0x000000ff)
AM_RANGE(0x68, 0x6b) AM_READWRITE8(drat_r, drat_w, 0x0000ff00)
AM_RANGE(0x70, 0x73) AM_READWRITE8(smram_r, smram_w, 0x00ff0000)
AM_RANGE(0x90, 0x93) AM_READWRITE8(errcmd_r, errcmd_w, 0x000000ff)
AM_RANGE(0x90, 0x93) AM_READWRITE8(errsts_r, errsts_w, 0x0000ff00)
AM_RANGE(0x90, 0x93) AM_READ8 (errsyn_r, 0x00ff0000)
AM_INHERIT_FROM(pci_host_device::config_map)
ADDRESS_MAP_END
i82439hx_host_device::i82439hx_host_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: pci_host_device(mconfig, I82439HX, "i82439hx northbridge", tag, owner, clock, "i82439hx", __FILE__)
{
}
void i82439hx_host_device::set_cpu_tag(const char *_cpu_tag)
{
cpu_tag = _cpu_tag;
}
void i82439hx_host_device::set_ram_size(int _ram_size)
{
ram_size = _ram_size;
}
void i82439hx_host_device::device_start()
{
pci_host_device::device_start();
cpu = machine().device<cpu_device>(cpu_tag);
memory_space = &cpu->space(AS_PROGRAM);
io_space = &cpu->space(AS_IO);
memory_window_start = 0;
memory_window_end = 0xffffffff;
memory_offset = 0;
io_window_start = 0;
io_window_end = 0xffff;
io_offset = 0;
status = 0x0010;
ram.resize(ram_size/4);
}
void i82439hx_host_device::reset_all_mappings()
{
pci_host_device::reset_all_mappings();
}
void i82439hx_host_device::device_reset()
{
pci_host_device::device_reset();
pcon = 0x00;
cc = 0xa2;
dramec = 0x00;
dramc = 0x01;
dramt = 0x00;
memset(pam, 0x00, sizeof(pam));
memset(drb, 0x02, sizeof(drb));
drt = 0x00;
drat = 0x00;
smram = 0x02;
errcmd = 0x00;
errsts = 0x00;
errsyn = 0x00;
}
void i82439hx_host_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
{
io_space->install_device(0, 0xffff, *static_cast<pci_host_device *>(this), &pci_host_device::io_configuration_access_map);
if((dramc & 0xc0) == 0x40)
memory_space->install_ram (0x00000000, 0x0007ffff, &ram[0x00000000/4]);
else
memory_space->install_ram (0x00000000, 0x0009ffff, &ram[0x00000000/4]);
if(smram & 0x40)
memory_space->install_ram (0x000a0000, 0x000bffff, &ram[0x000a0000/4]);
if(pam[1] & 0x01)
memory_space->install_rom (0x000c0000, 0x000c3fff, &ram[0x000c0000/4]);
if(pam[1] & 0x02)
memory_space->install_writeonly(0x000c0000, 0x000c3fff, &ram[0x000c0000/4]);
if(pam[1] & 0x10)
memory_space->install_rom (0x000c4000, 0x000c7fff, &ram[0x000c4000/4]);
if(pam[1] & 0x20)
memory_space->install_writeonly(0x000c4000, 0x000c7fff, &ram[0x000c4000/4]);
if(pam[2] & 0x01)
memory_space->install_rom (0x000c8000, 0x000cbfff, &ram[0x000c8000/4]);
if(pam[2] & 0x02)
memory_space->install_writeonly(0x000c8000, 0x000cbfff, &ram[0x000c8000/4]);
if(pam[2] & 0x10)
memory_space->install_rom (0x000cc000, 0x000cffff, &ram[0x000cc000/4]);
if(pam[2] & 0x20)
memory_space->install_writeonly(0x000cc000, 0x000cffff, &ram[0x000cc000/4]);
if(pam[3] & 0x01)
memory_space->install_rom (0x000d0000, 0x000d3fff, &ram[0x000d0000/4]);
if(pam[3] & 0x02)
memory_space->install_writeonly(0x000d0000, 0x000d3fff, &ram[0x000d0000/4]);
if(pam[3] & 0x10)
memory_space->install_rom (0x000d4000, 0x000d7fff, &ram[0x000d4000/4]);
if(pam[3] & 0x20)
memory_space->install_writeonly(0x000d4000, 0x000d7fff, &ram[0x000d4000/4]);
if(pam[4] & 0x01)
memory_space->install_rom (0x000d8000, 0x000dbfff, &ram[0x000d8000/4]);
if(pam[4] & 0x02)
memory_space->install_writeonly(0x000d8000, 0x000dbfff, &ram[0x000d8000/4]);
if(pam[4] & 0x10)
memory_space->install_rom (0x000dc000, 0x000dffff, &ram[0x000dc000/4]);
if(pam[4] & 0x20)
memory_space->install_writeonly(0x000dc000, 0x000dffff, &ram[0x000dc000/4]);
if(pam[5] & 0x01)
memory_space->install_rom (0x000e0000, 0x000e3fff, &ram[0x000e0000/4]);
if(pam[5] & 0x02)
memory_space->install_writeonly(0x000e0000, 0x000e3fff, &ram[0x000e0000/4]);
if(pam[5] & 0x10)
memory_space->install_rom (0x000e4000, 0x000e7fff, &ram[0x000e4000/4]);
if(pam[5] & 0x20)
memory_space->install_writeonly(0x000e4000, 0x000e7fff, &ram[0x000e4000/4]);
if(pam[6] & 0x01)
memory_space->install_rom (0x000e8000, 0x000ebfff, &ram[0x000e8000/4]);
if(pam[6] & 0x02)
memory_space->install_writeonly(0x000e8000, 0x000ebfff, &ram[0x000e8000/4]);
if(pam[6] & 0x10)
memory_space->install_rom (0x000ec000, 0x000effff, &ram[0x000ec000/4]);
if(pam[6] & 0x20)
memory_space->install_writeonly(0x000ec000, 0x000effff, &ram[0x000ec000/4]);
if(pam[0] & 0x10)
memory_space->install_rom (0x000f0000, 0x000fffff, &ram[0x000f0000/4]);
if(pam[0] & 0x20)
memory_space->install_writeonly(0x000f0000, 0x000fffff, &ram[0x000f0000/4]);
memory_space->install_ram (0x00100000, 0x00efffff, &ram[0x00100000/4]);
if((dramc & 0xc0) != 0x80)
memory_space->install_ram (0x00f00000, 0x00ffffff, &ram[0x00f00000/4]);
memory_space->install_ram (0x01000000, ram_size-1, &ram[0x01000000/4]);
}
READ8_MEMBER (i82439hx_host_device::pcon_r)
{
return pcon;
}
WRITE8_MEMBER(i82439hx_host_device::pcon_w)
{
pcon = data;
logerror("pcon = %02x\n", pcon);
}
READ8_MEMBER (i82439hx_host_device::cc_r)
{
return cc;
}
WRITE8_MEMBER(i82439hx_host_device::cc_w)
{
cc = data;
logerror("cc = %02x\n", cc);
}
READ8_MEMBER (i82439hx_host_device::dramec_r)
{
return dramec;
}
WRITE8_MEMBER(i82439hx_host_device::dramec_w)
{
dramec = data;
logerror("dramec = %02x\n", dramec);
}
READ8_MEMBER (i82439hx_host_device::dramc_r)
{
return dramc;
}
WRITE8_MEMBER(i82439hx_host_device::dramc_w)
{
dramc = data;
logerror("dramc = %02x\n", dramc);
remap_cb();
}
READ8_MEMBER (i82439hx_host_device::dramt_r)
{
return dramt;
}
WRITE8_MEMBER(i82439hx_host_device::dramt_w)
{
dramt = data;
logerror("dramt = %02x\n", dramt);
}
READ8_MEMBER (i82439hx_host_device::pam0_r)
{
return pam[offset];
}
WRITE8_MEMBER(i82439hx_host_device::pam0_w)
{
pam[offset] = data;
logerror("pam[%d] = %02x\n", offset, pam[offset]);
remap_cb();
}
READ8_MEMBER (i82439hx_host_device::pam3_r)
{
return pam[3+offset];
}
WRITE8_MEMBER(i82439hx_host_device::pam3_w)
{
pam[3+offset] = data;
logerror("pam[%d] = %02x\n", 3+offset, pam[3+offset]);
remap_cb();
}
READ8_MEMBER (i82439hx_host_device::drb_r)
{
return drb[offset];
}
WRITE8_MEMBER(i82439hx_host_device::drb_w)
{
drb[offset] = data;
logerror("drb[%d] = %02x\n", offset, drb[offset]);
}
READ8_MEMBER (i82439hx_host_device::drt_r)
{
return drt;
}
WRITE8_MEMBER(i82439hx_host_device::drt_w)
{
drt = data;
logerror("drt = %02x\n", drt);
}
READ8_MEMBER (i82439hx_host_device::drat_r)
{
return drat;
}
WRITE8_MEMBER(i82439hx_host_device::drat_w)
{
drat = data;
logerror("drat = %02x\n", drat);
}
READ8_MEMBER (i82439hx_host_device::smram_r)
{
return smram;
}
WRITE8_MEMBER(i82439hx_host_device::smram_w)
{
smram = data;
logerror("smram = %02x\n", smram);
remap_cb();
}
READ8_MEMBER (i82439hx_host_device::errcmd_r)
{
return errcmd;
}
WRITE8_MEMBER(i82439hx_host_device::errcmd_w)
{
errcmd = data;
logerror("errcmd = %02x\n", errcmd);
}
READ8_MEMBER (i82439hx_host_device::errsts_r)
{
return errsts;
}
WRITE8_MEMBER(i82439hx_host_device::errsts_w)
{
errsts = data;
logerror("errsts = %02x\n", errsts);
}
READ8_MEMBER (i82439hx_host_device::errsyn_r)
{
return errsyn;
}

View File

@ -0,0 +1,74 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
// Intel i82439hx northbridge (440hx)
#ifndef I82439HX_H
#define I82439HX_H
#include "pci.h"
#define MCFG_I82439HX_ADD(_tag, _cpu_tag, _ram_size) \
MCFG_PCI_HOST_ADD(_tag, I82439HX, 0x80861250, 0x03, 0x00000000) \
downcast<i82439hx_host_device *>(device)->set_cpu_tag(_cpu_tag); \
downcast<i82439hx_host_device *>(device)->set_ram_size(_ram_size);
class i82439hx_host_device : public pci_host_device {
public:
i82439hx_host_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void set_cpu_tag(const char *tag);
void set_ram_size(int ram_size);
DECLARE_READ8_MEMBER (pcon_r);
DECLARE_WRITE8_MEMBER(pcon_w);
DECLARE_READ8_MEMBER (cc_r);
DECLARE_WRITE8_MEMBER(cc_w);
DECLARE_READ8_MEMBER (dramec_r);
DECLARE_WRITE8_MEMBER(dramec_w);
DECLARE_READ8_MEMBER (dramc_r);
DECLARE_WRITE8_MEMBER(dramc_w);
DECLARE_READ8_MEMBER (dramt_r);
DECLARE_WRITE8_MEMBER(dramt_w);
DECLARE_READ8_MEMBER (pam0_r);
DECLARE_WRITE8_MEMBER(pam0_w);
DECLARE_READ8_MEMBER (pam3_r);
DECLARE_WRITE8_MEMBER(pam3_w);
DECLARE_READ8_MEMBER (drb_r);
DECLARE_WRITE8_MEMBER(drb_w);
DECLARE_READ8_MEMBER (drt_r);
DECLARE_WRITE8_MEMBER(drt_w);
DECLARE_READ8_MEMBER (drat_r);
DECLARE_WRITE8_MEMBER(drat_w);
DECLARE_READ8_MEMBER (smram_r);
DECLARE_WRITE8_MEMBER(smram_w);
DECLARE_READ8_MEMBER (errcmd_r);
DECLARE_WRITE8_MEMBER(errcmd_w);
DECLARE_READ8_MEMBER (errsts_r);
DECLARE_WRITE8_MEMBER(errsts_w);
DECLARE_READ8_MEMBER (errsyn_r);
virtual void reset_all_mappings() override;
virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space) override;
virtual DECLARE_ADDRESS_MAP(config_map, 32) override;
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
const char *cpu_tag;
int ram_size;
cpu_device *cpu;
std::vector<UINT32> ram;
UINT8 pcon, cc, dramec, dramc, dramt;
UINT8 pam[7], drb[8];
UINT8 drt, drat, smram, errcmd, errsts, errsyn;
};
extern const device_type I82439HX;
#endif

View File

@ -142,7 +142,7 @@ READ32_MEMBER(pci_device::address_base_r)
WRITE32_MEMBER(pci_device::address_base_w)
{
if(bank_reg_infos[offset].bank == -1) {
logerror("%s: write to address base (%d, %08x) not linked to any bank\n", tag(), offset, data);
logerror("write to address base (%d, %08x) not linked to any bank\n", offset, data);
return;
}
@ -174,7 +174,7 @@ WRITE16_MEMBER(pci_device::command_w)
{
mem_mask &= command_mask;
COMBINE_DATA(&command);
logerror("%s: command = %04x\n", tag(), command);
logerror("command = %04x\n", command);
}
READ16_MEMBER(pci_device::status_r)
@ -285,14 +285,14 @@ void pci_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end
}
space->install_device_delegate(start, end, *this, bi.map);
logerror("%s: map %s at %0*x-%0*x\n", tag(), bi.map.name(), bi.flags & M_IO ? 4 : 8, UINT32(start), bi.flags & M_IO ? 4 : 8, UINT32(end));
logerror("map %s at %0*x-%0*x\n", bi.map.name(), bi.flags & M_IO ? 4 : 8, UINT32(start), bi.flags & M_IO ? 4 : 8, UINT32(end));
}
map_extra(memory_window_start, memory_window_end, memory_offset, memory_space,
io_window_start, io_window_end, io_offset, io_space);
if(expansion_rom_base & 1) {
logerror("%s: map expansion rom at %08x-%08x\n", tag(), expansion_rom_base & ~1, (expansion_rom_base & ~1) + expansion_rom_size - 1);
logerror("map expansion rom at %08x-%08x\n", expansion_rom_base & ~1, (expansion_rom_base & ~1) + expansion_rom_size - 1);
UINT32 start = (expansion_rom_base & ~1) + memory_offset;
UINT32 end = start + expansion_rom_size - 1;
if(end > memory_window_end)
@ -521,7 +521,7 @@ UINT32 pci_bridge_device::do_config_read(UINT8 bus, UINT8 device, UINT16 reg, UI
{
if(sub_devices[device]) {
UINT32 data = space(AS_PROGRAM).read_dword((device << 12) | reg, mem_mask);
logerror("%s: config_read %02x:%02x.%x:%02x %08x @ %08x\n", tag(), bus, device >> 3, device & 7, reg, data, mem_mask);
logerror("config_read %02x:%02x.%x:%02x %08x @ %08x\n", bus, device >> 3, device & 7, reg, data, mem_mask);
return data;
} else
return 0xffffffff;
@ -550,7 +550,7 @@ void pci_bridge_device::do_config_write(UINT8 bus, UINT8 device, UINT16 reg, UIN
{
if(sub_devices[device]) {
space(AS_PROGRAM).write_dword((device << 12) | reg, data, mem_mask);
logerror("%s: config_write %02x:%02x.%x:%02x %08x @ %08x\n", tag(), bus, device >> 3, device & 7, reg, data, mem_mask);
logerror("config_write %02x:%02x.%x:%02x %08x @ %08x\n", bus, device >> 3, device & 7, reg, data, mem_mask);
}
}
@ -571,60 +571,60 @@ void pci_bridge_device::config_write(UINT8 bus, UINT8 device, UINT16 reg, UINT32
READ32_MEMBER (pci_bridge_device::b_address_base_r)
{
logerror("%s: b_address_base_r %d\n", tag(), offset);
logerror("b_address_base_r %d\n", offset);
return 0xffffffff;
}
WRITE32_MEMBER(pci_bridge_device::b_address_base_w)
{
logerror("%s: b_address_base_w %d, %08x\n", tag(), offset, data);
logerror("b_address_base_w %d, %08x\n", offset, data);
}
READ8_MEMBER (pci_bridge_device::primary_bus_r)
{
logerror("%s: primary_bus_r\n", tag());
logerror("primary_bus_r\n");
return primary_bus;
}
WRITE8_MEMBER (pci_bridge_device::primary_bus_w)
{
primary_bus = data;
logerror("%s: primary_bus_w %02x\n", tag(), data);
logerror("primary_bus_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::secondary_bus_r)
{
logerror("%s: secondary_bus_r\n", tag());
logerror("secondary_bus_r\n");
return secondary_bus;
}
WRITE8_MEMBER (pci_bridge_device::secondary_bus_w)
{
secondary_bus = data;
logerror("%s: secondary_bus_w %02x\n", tag(), data);
logerror("secondary_bus_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::subordinate_bus_r)
{
logerror("%s: subordinate_bus_r\n", tag());
logerror("subordinate_bus_r\n");
return subordinate_bus;
}
WRITE8_MEMBER (pci_bridge_device::subordinate_bus_w)
{
subordinate_bus = data;
logerror("%s: subordinate_bus_w %02x\n", tag(), data);
logerror("subordinate_bus_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::secondary_latency_r)
{
logerror("%s: secondary_latency_r\n", tag());
logerror("secondary_latency_r\n");
return 0xff;
}
WRITE8_MEMBER (pci_bridge_device::secondary_latency_w)
{
logerror("%s: secondary_latency_w %02x\n", tag(), data);
logerror("secondary_latency_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::iobase_r)
@ -635,7 +635,7 @@ READ8_MEMBER (pci_bridge_device::iobase_r)
WRITE8_MEMBER (pci_bridge_device::iobase_w)
{
iobase = data;
logerror("%s: iobase_w %02x\n", tag(), data);
logerror("iobase_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::iolimit_r)
@ -646,18 +646,18 @@ READ8_MEMBER (pci_bridge_device::iolimit_r)
WRITE8_MEMBER (pci_bridge_device::iolimit_w)
{
iolimit = data;
logerror("%s: iolimit_w %02x\n", tag(), data);
logerror("iolimit_w %02x\n", data);
}
READ16_MEMBER (pci_bridge_device::secondary_status_r)
{
logerror("%s: secondary_status_r\n", tag());
logerror("secondary_status_r\n");
return 0xffff;
}
WRITE16_MEMBER(pci_bridge_device::secondary_status_w)
{
logerror("%s: secondary_status_w %04x\n", tag(), data);
logerror("secondary_status_w %04x\n", data);
}
READ16_MEMBER (pci_bridge_device::memory_base_r)
@ -668,7 +668,7 @@ READ16_MEMBER (pci_bridge_device::memory_base_r)
WRITE16_MEMBER(pci_bridge_device::memory_base_w)
{
COMBINE_DATA(&memory_base);
logerror("%s: memory_base_w %04x\n", tag(), memory_base);
logerror("memory_base_w %04x\n", memory_base);
}
READ16_MEMBER (pci_bridge_device::memory_limit_r)
@ -679,7 +679,7 @@ READ16_MEMBER (pci_bridge_device::memory_limit_r)
WRITE16_MEMBER(pci_bridge_device::memory_limit_w)
{
COMBINE_DATA(&memory_limit);
logerror("%s: memory_limit_w %04x\n", tag(), memory_limit);
logerror("memory_limit_w %04x\n", memory_limit);
}
READ16_MEMBER (pci_bridge_device::prefetch_base_r)
@ -690,7 +690,7 @@ READ16_MEMBER (pci_bridge_device::prefetch_base_r)
WRITE16_MEMBER(pci_bridge_device::prefetch_base_w)
{
COMBINE_DATA(&prefetch_base);
logerror("%s: prefetch_base_w %04x\n", tag(), prefetch_base);
logerror("prefetch_base_w %04x\n", prefetch_base);
}
READ16_MEMBER (pci_bridge_device::prefetch_limit_r)
@ -701,7 +701,7 @@ READ16_MEMBER (pci_bridge_device::prefetch_limit_r)
WRITE16_MEMBER(pci_bridge_device::prefetch_limit_w)
{
COMBINE_DATA(&prefetch_limit);
logerror("%s: prefetch_limit_w %04x\n", tag(), prefetch_limit);
logerror("prefetch_limit_w %04x\n", prefetch_limit);
}
READ32_MEMBER (pci_bridge_device::prefetch_baseu_r)
@ -712,7 +712,7 @@ READ32_MEMBER (pci_bridge_device::prefetch_baseu_r)
WRITE32_MEMBER(pci_bridge_device::prefetch_baseu_w)
{
COMBINE_DATA(&prefetch_baseu);
logerror("%s: prefetch_baseu_w %08x\n", tag(), prefetch_baseu);
logerror("prefetch_baseu_w %08x\n", prefetch_baseu);
}
READ32_MEMBER (pci_bridge_device::prefetch_limitu_r)
@ -723,7 +723,7 @@ READ32_MEMBER (pci_bridge_device::prefetch_limitu_r)
WRITE32_MEMBER(pci_bridge_device::prefetch_limitu_w)
{
COMBINE_DATA(&prefetch_limitu);
logerror("%s: prefetch_limitu_w %08x\n", tag(), prefetch_limitu);
logerror("prefetch_limitu_w %08x\n", prefetch_limitu);
}
READ16_MEMBER (pci_bridge_device::iobaseu_r)
@ -734,7 +734,7 @@ READ16_MEMBER (pci_bridge_device::iobaseu_r)
WRITE16_MEMBER(pci_bridge_device::iobaseu_w)
{
COMBINE_DATA(&iobaseu);
logerror("%s: iobaseu_w %04x\n", tag(), iobaseu);
logerror("iobaseu_w %04x\n", iobaseu);
}
READ16_MEMBER (pci_bridge_device::iolimitu_r)
@ -745,29 +745,29 @@ READ16_MEMBER (pci_bridge_device::iolimitu_r)
WRITE16_MEMBER(pci_bridge_device::iolimitu_w)
{
COMBINE_DATA(&iolimitu);
logerror("%s: iolimitu_w %04x\n", tag(), iolimitu);
logerror("iolimitu_w %04x\n", iolimitu);
}
READ8_MEMBER (pci_bridge_device::interrupt_line_r)
{
logerror("%s: interrupt_line_r\n", tag());
logerror("interrupt_line_r\n");
return 0xff;
}
WRITE8_MEMBER (pci_bridge_device::interrupt_line_w)
{
logerror("%s: interrupt_line_w %02x\n", tag(), data);
logerror("interrupt_line_w %02x\n", data);
}
READ8_MEMBER (pci_bridge_device::interrupt_pin_r)
{
logerror("%s: interrupt_pin_r\n", tag());
logerror("interrupt_pin_r\n");
return 0xff;
}
WRITE8_MEMBER (pci_bridge_device::interrupt_pin_w)
{
logerror("%s: interrupt_pin_w %02x\n", tag(), data);
logerror("interrupt_pin_w %02x\n", data);
}
READ16_MEMBER (pci_bridge_device::bridge_control_r)
@ -778,7 +778,7 @@ READ16_MEMBER (pci_bridge_device::bridge_control_r)
WRITE16_MEMBER(pci_bridge_device::bridge_control_w)
{
COMBINE_DATA(&bridge_control);
logerror("%s: bridge_control_w %04x\n", tag(), bridge_control);
logerror("bridge_control_w %04x\n", bridge_control);
}

View File

@ -0,0 +1,24 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#include "mga2064w.h"
const device_type MGA2064W = &device_creator<mga2064w_device>;
mga2064w_device::mga2064w_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: pci_device(mconfig, MGA2064W, "Matrox Millenium", tag, owner, clock, "mga2064w", __FILE__)
{
}
void mga2064w_device::device_start()
{
pci_device::device_start();
// add_map( 16*1024*1024, M_MEM, FUNC(mga2064w_device::map1));
// add_map(256*1024*1024, M_MEM, FUNC(mga2064w_device::map2));
// add_map( 16*1024*1024, M_MEM, FUNC(mga2064w_device::map3));
// add_rom_from_region();
}
void mga2064w_device::device_reset()
{
pci_device::device_reset();
}

View File

@ -0,0 +1,24 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
#ifndef MGA2064W_H
#define MGA2064W_H
#include "machine/pci.h"
#define MCFG_MGA2064W_ADD(_tag) \
MCFG_PCI_DEVICE_ADD(_tag, MGA2064W, 0x102b0519, 0x01, 0x030000, 0x00000000)
class mga2064w_device : public pci_device {
public:
mga2064w_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
};
extern const device_type MGA2064W;
#endif

219
src/mame/drivers/pcipc.cpp Normal file
View File

@ -0,0 +1,219 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
/*
Sandbox experiment on a new-pci pc
Virtual hardware:
- A pentium as main CPU
- A Micronics M55HI-Plus PCI/ISA motherboard without integrated sound
-> intel 430hx, aka 82439hx northbridge (pci, no agp)
-> intel piix3, aka 82371sb southbridge (pci-isa bridge, ide, ioapic, timer, irq, dma, usb)
-> smsc fdc37c93x superio (isa-connected, keyboard, rtc, fdc, rs232, ide)
- A Matrox Millenium PCI video card
We'll see about sound, networking, etc later
*/
#include "emu.h"
#include "cpu/i386/i386.h"
#include "machine/pci.h"
#include "machine/pci-ide.h"
#include "machine/i82439hx.h"
#include "machine/i82371sb.h"
//#include "machine/fdc37c93x.h"
#include "video/mga2064w.h"
class pcipc_state : public driver_device
{
public:
struct boot_state_info {
UINT8 val;
const char *const message;
};
static const boot_state_info boot_state_infos[];
DECLARE_WRITE8_MEMBER(boot_state_w);
pcipc_state(const machine_config &mconfig, device_type type, const char *tag);
virtual void machine_start() override;
virtual void machine_reset() override;
};
pcipc_state::pcipc_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag)
{
}
void pcipc_state::machine_start()
{
}
void pcipc_state::machine_reset()
{
}
const pcipc_state::boot_state_info pcipc_state::boot_state_infos[] = {
{ 0x02, "Verify Real Mode." },
{ 0x04, "Get CPU type." },
{ 0x06, "Initialize system hardware." },
{ 0x08, "Initialize chipset registers with initial POST values." },
{ 0x09, "Get in POST Reg." },
{ 0x0A, "Initialize CPU registers." },
{ 0x0C, "Initialize cache initial POST values." },
{ 0x0E, "Initialize I/O." },
{ 0x0F, "Initialize the localbus IDE." },
{ 0x10, "Initialize Power Management." },
{ 0x11, "Load alternate registers with initial POST values." },
{ 0x12, "Jump to UserPatch0." },
{ 0x14, "Initialize keyboard controller." },
{ 0x16, "BIOS ROM checksum." },
{ 0x18, "8254 timer initialization." },
{ 0x1A, "8237 DMA controller initialization." },
{ 0x1C, "Reset Programmable Interrupt Controller." },
{ 0x20, "Test DRAM refresh." },
{ 0x22, "Test 8742 Keyboard Controller." },
{ 0x24, "Set ES segment register to 4 GB." },
{ 0x28, "Autosize DRAM." },
{ 0x2A, "Clear 512K base RAM." },
{ 0x2C, "Test 512K base address lines." },
{ 0x2E, "Test 512K base memory." },
{ 0x32, "Test CPU bus-clock frequency." },
{ 0x34, "Test CMOS RAM." },
{ 0x35, "Initialize alternate chipset registers." },
{ 0x37, "Reinitialize the chipset (MB only)." },
{ 0x38, "Shadow system BIOS ROM." },
{ 0x39, "Reinitialize the cache (MB only)." },
{ 0x3A, "Autosize cache." },
{ 0x3C, "Configure advanced chipset registers." },
{ 0x3D, "Load alternate registers with CMOS values." },
{ 0x40, "Set initial CPU speed." },
{ 0x42, "Initialize interrupt vectors." },
{ 0x44, "Initialize BIOS interrupts." },
{ 0x46, "Check ROM copyright notice." },
{ 0x47, "Initialize manager for PCI Option ROMs." },
{ 0x48, "Check video configuration against CMOS." },
{ 0x49, "Initialize PCI bus and devices." },
{ 0x4A, "Initialize all video adapters in system." },
{ 0x4C, "Shadow video BIOS ROM." },
{ 0x4E, "Display copyright notice." },
{ 0x50, "Display CPU type and speed." },
{ 0x51, "Initialize EISA board." },
{ 0x52, "Test keyboard." },
{ 0x54, "Set key click if enabled." },
{ 0x56, "Enable keyboard." },
{ 0x58, "Test for unexpected interrupts." },
{ 0x5A, "Display prompt \"Press F2 to enter SETUP\"." },
{ 0x5C, "Test RAM between 512 and 640k." },
{ 0x60, "Test extended memory." },
{ 0x62, "Test extended memory address lines." },
{ 0x64, "Jump to UserPatch1." },
{ 0x66, "Configure advanced cache registers." },
{ 0x68, "Enable external and CPU caches." },
{ 0x6A, "Display external cache size." },
{ 0x6C, "Display shadow message." },
{ 0x6E, "Display non-disposable segments." },
{ 0x70, "Display error messages." },
{ 0x72, "Check for configuration errors." },
{ 0x74, "Test real-time clock." },
{ 0x76, "Check for keyboard errors." },
{ 0x7C, "Set up hardware interrupt vectors." },
{ 0x7E, "Test coprocessor if present." },
{ 0x80, "Disable onboard I/O ports." },
{ 0x82, "Detect and install external RS232 ports." },
{ 0x84, "Detect and install external parallel ports." },
{ 0x86, "Re-initialize on-board I/O ports." },
{ 0x88, "Initialize BIOSData Area." },
{ 0x8A, "Initialize Extended BIOS Data Area." },
{ 0x8C, "Initialize floppy controller." },
{ 0x90, "Initialize hard-disk controller." },
{ 0x91, "Initialize localbus hard-disk controller." },
{ 0x92, "Jump to UserPatch2." },
{ 0x93, "Build MPTABLE for multi-processor boards." },
{ 0x94, "Disable A20 address line." },
{ 0x96, "Clear huge ES segment register." },
{ 0x98, "Search for option ROMs." },
{ 0x9A, "Shadow option ROMs." },
{ 0x9C, "Set up Power Management." },
{ 0x9E, "Enable hardware interrupts." },
{ 0xA0, "Set time of day." },
{ 0xA2, "Check key lock." },
{ 0xA4, "Initialize typematic rate." },
{ 0xA8, "Erase F2 prompt." },
{ 0xAA, "Scan for F2 keystroke." },
{ 0xAC, "Enter SETUP." },
{ 0xAE, "Clear in-POST flag." },
{ 0xB0, "Check for errors." },
{ 0xB2, "POST done - prepare to boot operating system." },
{ 0xB4, "One beep." },
{ 0xB6, "Check password (optional)." },
{ 0xB8, "Clear global descriptor table." },
{ 0xBC, "Clear parity checkers." },
{ 0xBE, "Clear screen (optional)." },
{ 0xBF, "Check virus and backup reminders." },
{ 0xC0, "Try to boot with INT 19." },
{ 0xD0, "Interrupt handler error." },
{ 0xD2, "Unknown interrupt error." },
{ 0xD4, "Pending Interrupt." },
{ 0xD6, "Initialize option ROM error." },
{ 0xD8, "Shutdown error." },
{ 0xDA, "Extended Block Move." },
{ 0xDC, "Shutdown 10 error." },
{ 0xE2, "Initialize the chipset." },
{ 0xE3, "Initialize refresh counter." },
{ 0xE4, "Check for Forced Flash." },
{ 0xE5, "Check HW status of ROM." },
{ 0xE6, "BIOS ROM is OK." },
{ 0xE7, "Do a complete RAM test." },
{ 0xE8, "Do OEM initialization." },
{ 0xE9, "Initialize interrupt controller." },
{ 0xEA, "Read in the bootstrap code." },
{ 0xEB, "Initialize all vectors." },
{ 0xEC, "Boot the Flash program." },
{ 0xED, "Initialize the boot device." },
{ 0xEE, "Boot code was read OK." },
{ 0, nullptr }
};
WRITE8_MEMBER(pcipc_state::boot_state_w)
{
const char *desc = "";
for(int i=0; boot_state_infos[i].message; i++)
if(boot_state_infos[i].val == data) {
desc = boot_state_infos[i].message;
break;
}
logerror("Boot state %02x - %s\n", data, desc);
}
static MACHINE_CONFIG_START(pcipc, pcipc_state)
MCFG_CPU_ADD("maincpu", PENTIUM, 66000000)
MCFG_PCI_ROOT_ADD( ":pci")
MCFG_I82439HX_ADD( ":pci:00.0", ":maincpu", 256*1024*1024)
MCFG_I82371SB_ISA_ADD(":pci:07.0")
MCFG_I82371SB_BOOT_STATE_HOOK(DEVWRITE8(":", pcipc_state, boot_state_w))
// MCFG_IDE_PCI_ADD( ":pci:07.1", 0x80867010, 0x03, 0x00000000)
MCFG_MGA2064W_ADD( ":pci:12.0")
MACHINE_CONFIG_END
ROM_START(pcipc)
ROM_REGION32_LE(0x40000, ":pci:07.0", 0) /* PC bios */
ROM_SYSTEM_BIOS(0, "n7ns04", "Version 21/01/98, without integrated sound") \
ROMX_LOAD("m7ns04.rom", 0x00000, 0x40000, CRC(9c1f656b) SHA1(f4a0a522d8c47b6ddb6c01fe9a34ddf5b1977f8d), ROM_BIOS(1) ) \
ROM_SYSTEM_BIOS(1, "n7s04", "Version 21/01/98, with integrated sound") \
ROMX_LOAD("m7s04.rom", 0x00000, 0x40000, CRC(3689f5a9) SHA1(8daacdb0dc6783d2161680564ffe83ac2515f7ef), ROM_BIOS(2) ) \
ROM_SYSTEM_BIOS(2, "crisis", "Version 07/01/98, for flash recovery") \
ROMX_LOAD("crisis.rom", 0x00000, 0x40000, CRC(38a1458a) SHA1(8881ac336392cca79a772b4168f63efc31f953dd), ROM_BIOS(3) ) \
ROM_END
static INPUT_PORTS_START(pcipc)
INPUT_PORTS_END
COMP(1998, pcipc, 0, 0, pcipc, pcipc, driver_device, 0, "Hack Inc.", "Sandbox PCI PC", MACHINE_NO_SOUND)

View File

@ -29547,6 +29547,9 @@ pcg850v // Pocket Computer G850V
pcfx // PC-FX NEC 1994
pcfxga // PC-FX NEC 199? (PC-FX on a PC ISA Card)
@source:pcipc.cpp
pcipc //
@source:pcktgal.cpp
pcktgal // (c) 1987 Data East Corporation (Japan)
pcktgal2 // (c) 1989 Data East Corporation (World?)