mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
i82371sb.cpp: remove unnedeed stuff, enable isa and add system management mode (nw)
This commit is contained in:
parent
9f76c7b556
commit
d853337e55
@ -5,10 +5,6 @@
|
|||||||
#include "i82371sb.h"
|
#include "i82371sb.h"
|
||||||
#include "cpu/i386/i386.h"
|
#include "cpu/i386/i386.h"
|
||||||
|
|
||||||
#include "bus/pc_kbd/keyboards.h"
|
|
||||||
// VGA-HACK
|
|
||||||
#include "video/pc_vga.h"
|
|
||||||
// end-VGA-HACK
|
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
@ -39,19 +35,12 @@ void i82371sb_isa_device::internal_io_map(address_map &map)
|
|||||||
map(0x0000, 0x001f).rw("dma8237_1", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
|
map(0x0000, 0x001f).rw("dma8237_1", FUNC(am9517a_device::read), FUNC(am9517a_device::write));
|
||||||
map(0x0020, 0x003f).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
map(0x0020, 0x003f).rw("pic8259_master", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
||||||
map(0x0040, 0x005f).rw("pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
|
map(0x0040, 0x005f).rw("pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
|
||||||
map(0x0060, 0x0063).rw(this, FUNC(i82371sb_isa_device::at_keybc_r), FUNC(i82371sb_isa_device::at_keybc_w));
|
map(0x0061, 0x0061).rw(this, FUNC(i82371sb_isa_device::at_portb_r), FUNC(i82371sb_isa_device::at_portb_w));
|
||||||
map(0x0064, 0x0067).rw("keybc", FUNC(at_keyboard_controller_device::status_r), FUNC(at_keyboard_controller_device::command_w));
|
|
||||||
map(0x0070, 0x007f).rw("rtc", FUNC(ds12885_device::read), FUNC(ds12885_device::write));
|
|
||||||
map(0x0080, 0x009f).rw(this, FUNC(i82371sb_isa_device::at_page8_r), FUNC(i82371sb_isa_device::at_page8_w));
|
map(0x0080, 0x009f).rw(this, FUNC(i82371sb_isa_device::at_page8_r), FUNC(i82371sb_isa_device::at_page8_w));
|
||||||
map(0x00a0, 0x00bf).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
map(0x00a0, 0x00bf).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write));
|
||||||
|
map(0x00b2, 0x00b3).rw(this, FUNC(i82371sb_isa_device::read_apmcapms), FUNC(i82371sb_isa_device::write_apmcapms));
|
||||||
map(0x00c0, 0x00df).rw(this, FUNC(i82371sb_isa_device::at_dma8237_2_r), FUNC(i82371sb_isa_device::at_dma8237_2_w));
|
map(0x00c0, 0x00df).rw(this, FUNC(i82371sb_isa_device::at_dma8237_2_r), FUNC(i82371sb_isa_device::at_dma8237_2_w));
|
||||||
map(0x00e0, 0x00ef).noprw();
|
map(0x00e0, 0x00ef).noprw();
|
||||||
|
|
||||||
// VGA-HACK
|
|
||||||
map(0x3b0, 0x3bf).rw("vga", FUNC(vga_device::port_03b0_r), FUNC(vga_device::port_03b0_w));
|
|
||||||
map(0x3c0, 0x3cf).rw("vga", FUNC(vga_device::port_03c0_r), FUNC(vga_device::port_03c0_w));
|
|
||||||
map(0x3d0, 0x3df).rw("vga", FUNC(vga_device::port_03d0_r), FUNC(vga_device::port_03d0_w));
|
|
||||||
// end-VGA-HACK
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -109,21 +98,6 @@ MACHINE_CONFIG_START(i82371sb_isa_device::device_add_mconfig)
|
|||||||
MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w))
|
MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir2_w))
|
||||||
MCFG_PIC8259_IN_SP_CB(GND)
|
MCFG_PIC8259_IN_SP_CB(GND)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL(12'000'000))
|
|
||||||
MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET))
|
|
||||||
MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20))
|
|
||||||
MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(WRITELINE("pic8259_master", pic8259_device, ir1_w))
|
|
||||||
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(WRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
|
|
||||||
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(WRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
|
|
||||||
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
|
|
||||||
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
|
|
||||||
MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
|
|
||||||
MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
|
|
||||||
|
|
||||||
MCFG_DS12885_ADD("rtc")
|
|
||||||
MCFG_MC146818_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir0_w))
|
|
||||||
MCFG_MC146818_CENTURY_INDEX(0x32)
|
|
||||||
|
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ata_devices, "hdd", nullptr, false)
|
// MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ata_devices, "hdd", nullptr, false)
|
||||||
// MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir6_w))
|
// MCFG_ATA_INTERFACE_IRQ_HANDLER(WRITELINE("pic8259_slave", pic8259_device, ir6_w))
|
||||||
// MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
// MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE(":maincpu", AS_PROGRAM)
|
||||||
@ -136,44 +110,34 @@ MACHINE_CONFIG_START(i82371sb_isa_device::device_add_mconfig)
|
|||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND, 0)
|
MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||||
//
|
|
||||||
// MCFG_DEVICE_ADD("isabus", ISA16, 0)
|
|
||||||
// MCFG_ISA16_CPU(":maincpu")
|
|
||||||
// MCFG_ISA_OUT_IRQ2_CB(WRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used
|
|
||||||
// MCFG_ISA_OUT_IRQ3_CB(WRITELINE("pic8259_master", pic8259_device, ir3_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ4_CB(WRITELINE("pic8259_master", pic8259_device, ir4_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ5_CB(WRITELINE("pic8259_master", pic8259_device, ir5_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ6_CB(WRITELINE("pic8259_master", pic8259_device, ir6_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ7_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ10_CB(WRITELINE("pic8259_slave", pic8259_device, ir3_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ11_CB(WRITELINE("pic8259_slave", pic8259_device, ir4_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ12_CB(WRITELINE("pic8259_slave", pic8259_device, ir5_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ14_CB(WRITELINE("pic8259_slave", pic8259_device, ir6_w))
|
|
||||||
// MCFG_ISA_OUT_IRQ15_CB(WRITELINE("pic8259_slave", pic8259_device, ir7_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ0_CB(WRITELINE("dma8237_1", am9517a_device, dreq0_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ1_CB(WRITELINE("dma8237_1", am9517a_device, dreq1_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ2_CB(WRITELINE("dma8237_1", am9517a_device, dreq2_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ3_CB(WRITELINE("dma8237_1", am9517a_device, dreq3_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ5_CB(WRITELINE("dma8237_2", am9517a_device, dreq1_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ6_CB(WRITELINE("dma8237_2", am9517a_device, dreq2_w))
|
|
||||||
// MCFG_ISA_OUT_DRQ7_CB(WRITELINE("dma8237_2", am9517a_device, dreq3_w))
|
|
||||||
// // on board devices
|
|
||||||
// MCFG_ISA16_SLOT_ADD("isabus","board1", pc_isa_onboard, "fdcsmc", true)
|
|
||||||
// MCFG_ISA16_SLOT_ADD("isabus","board2", pc_isa_onboard, "comat", true)
|
|
||||||
// MCFG_ISA16_SLOT_ADD("isabus","board3", pc_isa_onboard, "lpt", true)
|
|
||||||
// VGA-HACK
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
|
||||||
MCFG_SCREEN_RAW_PARAMS(XTAL(25'174'800),900,0,640,526,0,480)
|
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("vga", vga_device, screen_update)
|
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("vga", VGA, 0)
|
MCFG_DEVICE_ADD("isabus", ISA16, 0)
|
||||||
MCFG_VIDEO_SET_SCREEN("screen")
|
MCFG_ISA16_CPU(":maincpu")
|
||||||
// end-VGA-HACK
|
MCFG_ISA16_BUS_CUSTOM_SPACES()
|
||||||
|
MCFG_ISA_OUT_IRQ2_CB(WRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used
|
||||||
|
MCFG_ISA_OUT_IRQ3_CB(WRITELINE("pic8259_master", pic8259_device, ir3_w))
|
||||||
|
MCFG_ISA_OUT_IRQ4_CB(WRITELINE("pic8259_master", pic8259_device, ir4_w))
|
||||||
|
MCFG_ISA_OUT_IRQ5_CB(WRITELINE("pic8259_master", pic8259_device, ir5_w))
|
||||||
|
MCFG_ISA_OUT_IRQ6_CB(WRITELINE("pic8259_master", pic8259_device, ir6_w))
|
||||||
|
MCFG_ISA_OUT_IRQ7_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w))
|
||||||
|
MCFG_ISA_OUT_IRQ10_CB(WRITELINE("pic8259_slave", pic8259_device, ir3_w))
|
||||||
|
MCFG_ISA_OUT_IRQ11_CB(WRITELINE("pic8259_slave", pic8259_device, ir4_w))
|
||||||
|
MCFG_ISA_OUT_IRQ12_CB(WRITELINE("pic8259_slave", pic8259_device, ir5_w))
|
||||||
|
MCFG_ISA_OUT_IRQ14_CB(WRITELINE("pic8259_slave", pic8259_device, ir6_w))
|
||||||
|
MCFG_ISA_OUT_IRQ15_CB(WRITELINE("pic8259_slave", pic8259_device, ir7_w))
|
||||||
|
MCFG_ISA_OUT_DRQ0_CB(WRITELINE("dma8237_1", am9517a_device, dreq0_w))
|
||||||
|
MCFG_ISA_OUT_DRQ1_CB(WRITELINE("dma8237_1", am9517a_device, dreq1_w))
|
||||||
|
MCFG_ISA_OUT_DRQ2_CB(WRITELINE("dma8237_1", am9517a_device, dreq2_w))
|
||||||
|
MCFG_ISA_OUT_DRQ3_CB(WRITELINE("dma8237_1", am9517a_device, dreq3_w))
|
||||||
|
MCFG_ISA_OUT_DRQ5_CB(WRITELINE("dma8237_2", am9517a_device, dreq1_w))
|
||||||
|
MCFG_ISA_OUT_DRQ6_CB(WRITELINE("dma8237_2", am9517a_device, dreq2_w))
|
||||||
|
MCFG_ISA_OUT_DRQ7_CB(WRITELINE("dma8237_2", am9517a_device, dreq3_w))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
i82371sb_isa_device::i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
i82371sb_isa_device::i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: pci_device(mconfig, I82371SB_ISA, tag, owner, clock),
|
: pci_device(mconfig, I82371SB_ISA, tag, owner, clock),
|
||||||
|
m_smi_callback(*this),
|
||||||
m_boot_state_hook(*this),
|
m_boot_state_hook(*this),
|
||||||
m_maincpu(*this, ":maincpu"),
|
m_maincpu(*this, ":maincpu"),
|
||||||
m_pic8259_master(*this, "pic8259_master"),
|
m_pic8259_master(*this, "pic8259_master"),
|
||||||
@ -181,20 +145,16 @@ i82371sb_isa_device::i82371sb_isa_device(const machine_config &mconfig, const ch
|
|||||||
m_dma8237_1(*this, "dma8237_1"),
|
m_dma8237_1(*this, "dma8237_1"),
|
||||||
m_dma8237_2(*this, "dma8237_2"),
|
m_dma8237_2(*this, "dma8237_2"),
|
||||||
m_pit8254(*this, "pit8254"),
|
m_pit8254(*this, "pit8254"),
|
||||||
m_keybc(*this, "keybc"),
|
m_isabus(*this, "isabus"),
|
||||||
m_speaker(*this, "speaker"),
|
m_speaker(*this, "speaker"),
|
||||||
m_ds12885(*this, "rtc"),
|
m_at_spkrdata(0), m_pit_out2(0), m_dma_channel(0), m_cur_eop(false), m_dma_high_byte(0), m_at_speaker(0), m_refresh(false), m_channel_check(0), m_nmi_enabled(0)
|
||||||
m_pc_kbdc(*this, "pc_kbdc")
|
|
||||||
, m_at_spkrdata(0), m_pit_out2(0), m_dma_channel(0), m_cur_eop(false), m_dma_high_byte(0), m_at_speaker(0), m_refresh(false), m_channel_check(0), m_nmi_enabled(0)
|
|
||||||
// VGA-HACK
|
|
||||||
,m_vga_region(*this, ":ibm_vga")
|
|
||||||
// end-VGA-HACK
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void i82371sb_isa_device::device_start()
|
void i82371sb_isa_device::device_start()
|
||||||
{
|
{
|
||||||
pci_device::device_start();
|
pci_device::device_start();
|
||||||
|
m_smi_callback.resolve();
|
||||||
m_boot_state_hook.resolve();
|
m_boot_state_hook.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,6 +174,8 @@ void i82371sb_isa_device::device_reset()
|
|||||||
dlc = 0x00;
|
dlc = 0x00;
|
||||||
smicntl = 0x08;
|
smicntl = 0x08;
|
||||||
smien = 0x0000;
|
smien = 0x0000;
|
||||||
|
apmc = 0x00;
|
||||||
|
apms = 0x00;
|
||||||
see = 0x00000000;
|
see = 0x00000000;
|
||||||
ftmr = 0x0f;
|
ftmr = 0x0f;
|
||||||
smireq = 0x0000;
|
smireq = 0x0000;
|
||||||
@ -352,6 +314,7 @@ READ8_MEMBER (i82371sb_isa_device::smicntl_r)
|
|||||||
WRITE8_MEMBER(i82371sb_isa_device::smicntl_w)
|
WRITE8_MEMBER(i82371sb_isa_device::smicntl_w)
|
||||||
{
|
{
|
||||||
smicntl = data;
|
smicntl = data;
|
||||||
|
update_smireq_line();
|
||||||
logerror("smicntl = %02x\n", smicntl);
|
logerror("smicntl = %02x\n", smicntl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -363,6 +326,7 @@ READ16_MEMBER (i82371sb_isa_device::smien_r)
|
|||||||
WRITE16_MEMBER(i82371sb_isa_device::smien_w)
|
WRITE16_MEMBER(i82371sb_isa_device::smien_w)
|
||||||
{
|
{
|
||||||
COMBINE_DATA(&smien);
|
COMBINE_DATA(&smien);
|
||||||
|
update_smireq_line();
|
||||||
logerror("smien = %04x\n", smien);
|
logerror("smien = %04x\n", smien);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,6 +360,7 @@ READ16_MEMBER (i82371sb_isa_device::smireq_r)
|
|||||||
WRITE16_MEMBER(i82371sb_isa_device::smireq_w)
|
WRITE16_MEMBER(i82371sb_isa_device::smireq_w)
|
||||||
{
|
{
|
||||||
COMBINE_DATA(&smireq);
|
COMBINE_DATA(&smireq);
|
||||||
|
update_smireq_line();
|
||||||
logerror("smireq = %04x\n", smireq);
|
logerror("smireq = %04x\n", smireq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,10 +386,6 @@ WRITE8_MEMBER(i82371sb_isa_device::cthtmr_w)
|
|||||||
logerror("cthmtr = %02x\n", cthmtr);
|
logerror("cthmtr = %02x\n", cthmtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void i82371sb_isa_device::map_bios(address_space *memory_space, uint32_t start, uint32_t end)
|
void i82371sb_isa_device::map_bios(address_space *memory_space, uint32_t start, uint32_t end)
|
||||||
{
|
{
|
||||||
uint32_t mask = m_region->bytes() - 1;
|
uint32_t mask = m_region->bytes() - 1;
|
||||||
@ -434,14 +395,13 @@ void i82371sb_isa_device::map_bios(address_space *memory_space, uint32_t start,
|
|||||||
void i82371sb_isa_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
void i82371sb_isa_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
||||||
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
|
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
|
||||||
{
|
{
|
||||||
|
io_space->install_readwrite_handler(0, 0xffff, read16_delegate(FUNC(isa16_device::io16_r), &(*m_isabus)), write16_delegate(FUNC(isa16_device::io16_w), &(*m_isabus)));
|
||||||
|
memory_space->install_readwrite_handler(0, 0xfffff, read16_delegate(FUNC(isa16_device::mem16_r), &(*m_isabus)), write16_delegate(FUNC(isa16_device::mem16_w), &(*m_isabus)));
|
||||||
|
|
||||||
|
// assume that map_extra of the southbridge is called before the one of the northbridge
|
||||||
map_bios(memory_space, 0xfffc0000, 0xffffffff);
|
map_bios(memory_space, 0xfffc0000, 0xffffffff);
|
||||||
map_bios(memory_space, 0x000e0000, 0x000fffff);
|
map_bios(memory_space, 0x000e0000, 0x000fffff);
|
||||||
// VGA-HACK
|
io_space->install_device(0, 0xff, *this, &i82371sb_isa_device::internal_io_map);
|
||||||
vga_device *m_vga = subdevice<vga_device>("vga");
|
|
||||||
memory_space->install_rom(0x000c0000, 0x000c7fff, m_vga_region->base());
|
|
||||||
memory_space->install_readwrite_handler(0xa0000,0xbffff,read8_delegate(FUNC(vga_device::mem_r),m_vga),write8_delegate(FUNC(vga_device::mem_w),m_vga),0xffffffff);
|
|
||||||
// end-VGA-HACK
|
|
||||||
io_space->install_device(0, 0xffff, *this, &i82371sb_isa_device::internal_io_map);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if(fwh_dec_en1 & 0x80) {
|
if(fwh_dec_en1 & 0x80) {
|
||||||
@ -671,41 +631,40 @@ WRITE8_MEMBER(i82371sb_isa_device::pc_dma_write_word)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_0_dack_r ) { return 0; } //m_isabus->dack_r(0); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_0_dack_r ) { return m_isabus->dack_r(0); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_1_dack_r ) { return 0; } //m_isabus->dack_r(1); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_1_dack_r ) { return m_isabus->dack_r(1); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_2_dack_r ) { return 0; } //m_isabus->dack_r(2); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_2_dack_r ) { return m_isabus->dack_r(2); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_3_dack_r ) { return 0; } //m_isabus->dack_r(3); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_3_dack_r ) { return m_isabus->dack_r(3); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_5_dack_r ) { return 0; } //m_isabus->dack_r(5); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_5_dack_r ) { return m_isabus->dack_r(5); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_6_dack_r ) { return 0; } //m_isabus->dack_r(6); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_6_dack_r ) { return m_isabus->dack_r(6); }
|
||||||
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_7_dack_r ) { return 0; } //m_isabus->dack_r(7); }
|
READ8_MEMBER( i82371sb_isa_device::pc_dma8237_7_dack_r ) { return m_isabus->dack_r(7); }
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_0_dack_w ){ } //m_isabus->dack_w(0, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_0_dack_w ) { m_isabus->dack_w(0, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_1_dack_w ){ } //m_isabus->dack_w(1, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_1_dack_w ) { m_isabus->dack_w(1, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_2_dack_w ){ } //m_isabus->dack_w(2, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_2_dack_w ) { m_isabus->dack_w(2, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_3_dack_w ){ } //m_isabus->dack_w(3, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_3_dack_w ) { m_isabus->dack_w(3, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_5_dack_w ){ } //m_isabus->dack_w(5, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_5_dack_w ) { m_isabus->dack_w(5, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_6_dack_w ){ } //m_isabus->dack_w(6, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_6_dack_w ) { m_isabus->dack_w(6, data); }
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_7_dack_w ){ } //m_isabus->dack_w(7, data); }
|
WRITE8_MEMBER( i82371sb_isa_device::pc_dma8237_7_dack_w ) { m_isabus->dack_w(7, data); }
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( i82371sb_isa_device::at_dma8237_out_eop )
|
WRITE_LINE_MEMBER( i82371sb_isa_device::at_dma8237_out_eop )
|
||||||
{
|
{
|
||||||
m_cur_eop = state == ASSERT_LINE;
|
m_cur_eop = state == ASSERT_LINE;
|
||||||
//if(m_dma_channel != -1)
|
if(m_dma_channel != -1)
|
||||||
// m_isabus->eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE );
|
m_isabus->eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE );
|
||||||
}
|
}
|
||||||
|
|
||||||
void i82371sb_isa_device::pc_select_dma_channel(int channel, bool state)
|
void i82371sb_isa_device::pc_select_dma_channel(int channel, bool state)
|
||||||
{
|
{
|
||||||
if(!state) {
|
if(!state) {
|
||||||
m_dma_channel = channel;
|
m_dma_channel = channel;
|
||||||
//if(m_cur_eop)
|
if(m_cur_eop)
|
||||||
// m_isabus->eop_w(channel, ASSERT_LINE );
|
m_isabus->eop_w(channel, ASSERT_LINE );
|
||||||
|
|
||||||
} else if(m_dma_channel == channel) {
|
} else if(m_dma_channel == channel) {
|
||||||
m_dma_channel = -1;
|
m_dma_channel = -1;
|
||||||
//if(m_cur_eop)
|
if(m_cur_eop)
|
||||||
// m_isabus->eop_w(channel, CLEAR_LINE );
|
m_isabus->eop_w(channel, CLEAR_LINE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -741,7 +700,7 @@ WRITE8_MEMBER( i82371sb_isa_device::at_portb_w )
|
|||||||
m_pit8254->write_gate2(BIT(data, 0));
|
m_pit8254->write_gate2(BIT(data, 0));
|
||||||
at_speaker_set_spkrdata( BIT(data, 1));
|
at_speaker_set_spkrdata( BIT(data, 1));
|
||||||
m_channel_check = BIT(data, 3);
|
m_channel_check = BIT(data, 3);
|
||||||
//m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
|
m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( i82371sb_isa_device::at_dma8237_2_r )
|
READ8_MEMBER( i82371sb_isa_device::at_dma8237_2_r )
|
||||||
@ -754,35 +713,36 @@ WRITE8_MEMBER( i82371sb_isa_device::at_dma8237_2_w )
|
|||||||
m_dma8237_2->write( space, offset / 2, data);
|
m_dma8237_2->write( space, offset / 2, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( i82371sb_isa_device::at_keybc_r )
|
READ8_MEMBER( i82371sb_isa_device::read_apmcapms )
|
||||||
{
|
{
|
||||||
switch (offset)
|
if (offset == 0)
|
||||||
{
|
return apmc;
|
||||||
case 0: return m_keybc->data_r(space, 0);
|
else
|
||||||
case 1: return at_portb_r(space, 0);
|
return apms;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0xff;
|
WRITE8_MEMBER( i82371sb_isa_device::write_apmcapms )
|
||||||
|
{
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
apmc = data;
|
||||||
|
if (smien & 128)
|
||||||
|
smireq |= (1 << 7);
|
||||||
|
update_smireq_line();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
apms = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::at_keybc_w )
|
void i82371sb_isa_device::update_smireq_line()
|
||||||
{
|
{
|
||||||
switch (offset)
|
int m_smireq = smireq & 511;
|
||||||
{
|
int m_smien = smien & 511;
|
||||||
case 0: m_keybc->data_w(space, 0, data); break;
|
int needed = m_smireq & m_smien;
|
||||||
case 1: at_portb_w(space, 0, data); break;
|
int m_csmigate = smicntl & 1;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (needed && m_csmigate)
|
||||||
WRITE8_MEMBER( i82371sb_isa_device::write_rtc )
|
m_smi_callback(1);
|
||||||
{
|
else
|
||||||
if (offset==0) {
|
m_smi_callback(0);
|
||||||
m_nmi_enabled = BIT(data,7);
|
|
||||||
//m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
|
|
||||||
m_ds12885->write(space,0,data);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_ds12885->write(space,offset,data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -15,21 +15,21 @@
|
|||||||
#include "machine/pit8253.h"
|
#include "machine/pit8253.h"
|
||||||
|
|
||||||
#include "machine/ataintf.h"
|
#include "machine/ataintf.h"
|
||||||
#include "machine/at_keybc.h"
|
|
||||||
|
|
||||||
#include "sound/spkrdev.h"
|
#include "sound/spkrdev.h"
|
||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
|
#include "bus/isa/isa.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
|
|
||||||
#include "machine/pc_lpt.h"
|
|
||||||
#include "bus/pc_kbd/pc_kbdc.h"
|
|
||||||
|
|
||||||
#include "machine/am9517a.h"
|
#include "machine/am9517a.h"
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_I82371SB_ISA_ADD(_tag) \
|
#define MCFG_I82371SB_ISA_ADD(_tag) \
|
||||||
MCFG_PCI_DEVICE_ADD(_tag, I82371SB_ISA, 0x80867000, 0x03, 0x060100, 0x00000000)
|
MCFG_PCI_DEVICE_ADD(_tag, I82371SB_ISA, 0x80867000, 0x03, 0x060100, 0x00000000)
|
||||||
|
|
||||||
|
#define MCFG_I82371SB_SMI_CB(_devcb) \
|
||||||
|
devcb = &downcast<i82371sb_isa_device &>(*device).set_smi_callback(DEVCB_##_devcb);
|
||||||
|
|
||||||
#define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \
|
#define MCFG_I82371SB_BOOT_STATE_HOOK(_devcb) \
|
||||||
devcb = &downcast<i82371sb_isa_device &>(*device).set_boot_state_hook(DEVCB_##_devcb);
|
devcb = &downcast<i82371sb_isa_device &>(*device).set_boot_state_hook(DEVCB_##_devcb);
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ class i82371sb_isa_device : public pci_device {
|
|||||||
public:
|
public:
|
||||||
i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
i82371sb_isa_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
template <class Object> devcb_base &set_smi_callback(Object &&cb) { return m_smi_callback.set_callback(std::forward<Object>(cb)); }
|
||||||
template <class Object> devcb_base &set_boot_state_hook(Object &&cb) { return m_boot_state_hook.set_callback(std::forward<Object>(cb)); }
|
template <class Object> devcb_base &set_boot_state_hook(Object &&cb) { return m_boot_state_hook.set_callback(std::forward<Object>(cb)); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -49,6 +50,8 @@ protected:
|
|||||||
virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
|
||||||
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override;
|
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override;
|
||||||
|
|
||||||
|
virtual bool map_first() override { return true; }
|
||||||
|
|
||||||
virtual void config_map(address_map &map) override;
|
virtual void config_map(address_map &map) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -136,20 +139,22 @@ private:
|
|||||||
DECLARE_WRITE8_MEMBER(ide2_write_cs1_w);
|
DECLARE_WRITE8_MEMBER(ide2_write_cs1_w);
|
||||||
DECLARE_READ8_MEMBER(at_dma8237_2_r);
|
DECLARE_READ8_MEMBER(at_dma8237_2_r);
|
||||||
DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
|
DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
|
||||||
DECLARE_READ8_MEMBER(at_keybc_r);
|
DECLARE_READ8_MEMBER(read_apmcapms);
|
||||||
DECLARE_WRITE8_MEMBER(at_keybc_w);
|
DECLARE_WRITE8_MEMBER(write_apmcapms);
|
||||||
DECLARE_WRITE8_MEMBER(write_rtc);
|
|
||||||
|
|
||||||
|
void update_smireq_line();
|
||||||
|
|
||||||
|
devcb_write_line m_smi_callback;
|
||||||
devcb_write8 m_boot_state_hook;
|
devcb_write8 m_boot_state_hook;
|
||||||
|
|
||||||
uint32_t see;
|
uint32_t see;
|
||||||
uint16_t xbcs, mstat, pcsc, smien, smireq;
|
uint16_t xbcs, mstat, pcsc, smien, smireq;
|
||||||
|
uint8_t apmc, apms;
|
||||||
uint8_t iort, pirqrc[4], tom, mbirq0, mbdma[2], apicbase;
|
uint8_t iort, pirqrc[4], tom, mbirq0, mbdma[2], apicbase;
|
||||||
uint8_t dlc, smicntl, ftmr, ctlmtr, cthmtr;
|
uint8_t dlc, smicntl, ftmr, ctlmtr, cthmtr;
|
||||||
|
|
||||||
void map_bios(address_space *memory_space, uint32_t start, uint32_t end);
|
void map_bios(address_space *memory_space, uint32_t start, uint32_t end);
|
||||||
|
|
||||||
|
|
||||||
//southbridge
|
//southbridge
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<pic8259_device> m_pic8259_master;
|
required_device<pic8259_device> m_pic8259_master;
|
||||||
@ -157,10 +162,8 @@ private:
|
|||||||
required_device<am9517a_device> m_dma8237_1;
|
required_device<am9517a_device> m_dma8237_1;
|
||||||
required_device<am9517a_device> m_dma8237_2;
|
required_device<am9517a_device> m_dma8237_2;
|
||||||
required_device<pit8254_device> m_pit8254;
|
required_device<pit8254_device> m_pit8254;
|
||||||
required_device<at_keyboard_controller_device> m_keybc;
|
required_device<isa16_device> m_isabus;
|
||||||
required_device<speaker_sound_device> m_speaker;
|
required_device<speaker_sound_device> m_speaker;
|
||||||
required_device<ds12885_device> m_ds12885;
|
|
||||||
required_device<pc_kbdc_device> m_pc_kbdc;
|
|
||||||
|
|
||||||
uint8_t m_at_spkrdata;
|
uint8_t m_at_spkrdata;
|
||||||
uint8_t m_pit_out2;
|
uint8_t m_pit_out2;
|
||||||
@ -177,8 +180,6 @@ private:
|
|||||||
uint8_t m_nmi_enabled;
|
uint8_t m_nmi_enabled;
|
||||||
|
|
||||||
void pc_select_dma_channel(int channel, bool state);
|
void pc_select_dma_channel(int channel, bool state);
|
||||||
// VGA-HACK
|
|
||||||
optional_memory_region m_vga_region;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_DEVICE_TYPE(I82371SB_ISA, i82371sb_isa_device)
|
DECLARE_DEVICE_TYPE(I82371SB_ISA, i82371sb_isa_device)
|
||||||
|
Loading…
Reference in New Issue
Block a user