100
99
DECLARE_WRITE32_MEMBER( bios_ext4_ram_w );
102
101
DECLARE_WRITE32_MEMBER( bios_ram_w );
102
DECLARE_READ8_MEMBER(at_page8_r);
103
DECLARE_WRITE8_MEMBER(at_page8_w);
104
DECLARE_READ8_MEMBER(pc_dma_read_byte);
105
DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
105
108
// Intel 82439TX System Controller (MXTC)
142
145
case 0x59: // PAM0
144
147
if (data & 0x10) // enable RAM access to region 0xf0000 - 0xfffff
145
memory_set_bankptr(busdevice->machine(), "bios_bank", state->m_bios_ram);
148
state->membank("bios_bank")->set_base(state->m_bios_ram);
146
149
else // disable RAM access (reads go to BIOS ROM)
147
memory_set_bankptr(busdevice->machine(), "bios_bank", busdevice->machine().region("bios")->base() + 0x10000);
150
state->membank("bios_bank")->set_base(state->memregion("bios")->base() + 0x10000);
150
153
case 0x5a: // PAM1
153
memory_set_bankptr(busdevice->machine(), "video_bank1", state->m_isa_ram1);
156
state->membank("video_bank1")->set_base(state->m_isa_ram1);
155
memory_set_bankptr(busdevice->machine(), "video_bank1", busdevice->machine().region("video_bios")->base() + 0);
158
state->membank("video_bank1")->set_base(state->memregion("video_bios")->base() + 0);
158
memory_set_bankptr(busdevice->machine(), "video_bank2", state->m_isa_ram2);
161
state->membank("video_bank2")->set_base(state->m_isa_ram2);
160
memory_set_bankptr(busdevice->machine(), "video_bank2", busdevice->machine().region("video_bios")->base() + 0x4000);
163
state->membank("video_bank2")->set_base(state->memregion("video_bios")->base() + 0x4000);
164
167
case 0x5e: // PAM5
167
memory_set_bankptr(busdevice->machine(), "bios_ext1", state->m_bios_ext1_ram);
170
state->membank("bios_ext1")->set_base(state->m_bios_ext1_ram);
169
memory_set_bankptr(busdevice->machine(), "bios_ext1", busdevice->machine().region("bios")->base() + 0);
172
state->membank("bios_ext1")->set_base(state->memregion("bios")->base() + 0);
172
memory_set_bankptr(busdevice->machine(), "bios_ext2", state->m_bios_ext2_ram);
175
state->membank("bios_ext2")->set_base(state->m_bios_ext2_ram);
174
memory_set_bankptr(busdevice->machine(), "bios_ext2", busdevice->machine().region("bios")->base() + 0x4000);
177
state->membank("bios_ext2")->set_base(state->memregion("bios")->base() + 0x4000);
178
181
case 0x5f: // PAM6
181
memory_set_bankptr(busdevice->machine(), "bios_ext3", state->m_bios_ext3_ram);
184
state->membank("bios_ext3")->set_base(state->m_bios_ext3_ram);
183
memory_set_bankptr(busdevice->machine(), "bios_ext3", busdevice->machine().region("bios")->base() + 0x8000);
186
state->membank("bios_ext3")->set_base(state->memregion("bios")->base() + 0x8000);
186
memory_set_bankptr(busdevice->machine(), "bios_ext4", state->m_bios_ext4_ram);
189
state->membank("bios_ext4")->set_base(state->m_bios_ext4_ram);
188
memory_set_bankptr(busdevice->machine(), "bios_ext4", busdevice->machine().region("bios")->base() + 0xc000);
191
state->membank("bios_ext4")->set_base(state->memregion("bios")->base() + 0xc000);
390
393
ide_controller32_w(device, 0x3f0/4 + offset, data, mem_mask);
393
static READ8_HANDLER(at_page8_r)
396
READ8_MEMBER(xtom3d_state::at_page8_r)
395
xtom3d_state *state = space->machine().driver_data<xtom3d_state>();
396
UINT8 data = state->m_at_pages[offset % 0x10];
398
UINT8 data = m_at_pages[offset % 0x10];
398
400
switch(offset % 8) {
400
data = state->m_dma_offset[(offset / 8) & 1][2];
402
data = m_dma_offset[(offset / 8) & 1][2];
403
data = state->m_dma_offset[(offset / 8) & 1][3];
405
data = m_dma_offset[(offset / 8) & 1][3];
406
data = state->m_dma_offset[(offset / 8) & 1][1];
408
data = m_dma_offset[(offset / 8) & 1][1];
409
data = state->m_dma_offset[(offset / 8) & 1][0];
411
data = m_dma_offset[(offset / 8) & 1][0];
416
static WRITE8_HANDLER(at_page8_w)
418
WRITE8_MEMBER(xtom3d_state::at_page8_w)
418
xtom3d_state *state = space->machine().driver_data<xtom3d_state>();
419
state->m_at_pages[offset % 0x10] = data;
420
m_at_pages[offset % 0x10] = data;
421
422
switch(offset % 8) {
423
state->m_dma_offset[(offset / 8) & 1][2] = data;
424
m_dma_offset[(offset / 8) & 1][2] = data;
426
state->m_dma_offset[(offset / 8) & 1][3] = data;
427
m_dma_offset[(offset / 8) & 1][3] = data;
429
state->m_dma_offset[(offset / 8) & 1][1] = data;
430
m_dma_offset[(offset / 8) & 1][1] = data;
432
state->m_dma_offset[(offset / 8) & 1][0] = data;
433
m_dma_offset[(offset / 8) & 1][0] = data;
437
static READ32_HANDLER(at_page32_r)
439
return read32le_with_read8_handler(at_page8_r, space, offset, mem_mask);
443
static WRITE32_HANDLER(at_page32_w)
445
write32le_with_write8_handler(at_page8_w, space, offset, data, mem_mask);
448
439
static READ8_DEVICE_HANDLER(at_dma8237_2_r)
480
static READ8_HANDLER( pc_dma_read_byte )
471
READ8_MEMBER(xtom3d_state::pc_dma_read_byte)
482
xtom3d_state *state = space->machine().driver_data<xtom3d_state>();
483
offs_t page_offset = (((offs_t) state->m_dma_offset[0][state->m_dma_channel]) << 16)
473
offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
486
return space->read_byte(page_offset + offset);
476
return space.read_byte(page_offset + offset);
490
static WRITE8_HANDLER( pc_dma_write_byte )
480
WRITE8_MEMBER(xtom3d_state::pc_dma_write_byte)
492
xtom3d_state *state = space->machine().driver_data<xtom3d_state>();
493
offs_t page_offset = (((offs_t) state->m_dma_offset[0][state->m_dma_channel]) << 16)
482
offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
496
space->write_byte(page_offset + offset, data);
485
space.write_byte(page_offset + offset, data);
499
488
static void set_dma_channel(device_t *device, int channel, int state)
512
501
DEVCB_LINE(pc_dma_hrq_changed),
514
DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_read_byte),
515
DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_write_byte),
503
DEVCB_DRIVER_MEMBER(xtom3d_state, pc_dma_read_byte),
504
DEVCB_DRIVER_MEMBER(xtom3d_state, pc_dma_write_byte),
516
505
{ DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
517
506
{ DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL },
518
507
{ DEVCB_LINE(pc_dack0_w), DEVCB_LINE(pc_dack1_w), DEVCB_LINE(pc_dack2_w), DEVCB_LINE(pc_dack3_w) }
549
538
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
550
539
AM_RANGE(0x0060, 0x006f) AM_READWRITE_LEGACY(kbdc8042_32le_r, kbdc8042_32le_w)
551
540
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
552
AM_RANGE(0x0080, 0x009f) AM_READWRITE_LEGACY(at_page32_r, at_page32_w)
541
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
553
542
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
554
543
AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE_LEGACY("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w)
555
544
AM_RANGE(0x00e8, 0x00ef) AM_NOP
678
667
static MACHINE_RESET( xtom3d )
680
memory_set_bankptr(machine, "bios_bank", machine.region("bios")->base() + 0x10000);
681
memory_set_bankptr(machine, "bios_ext1", machine.region("bios")->base() + 0);
682
memory_set_bankptr(machine, "bios_ext2", machine.region("bios")->base() + 0x4000);
683
memory_set_bankptr(machine, "bios_ext3", machine.region("bios")->base() + 0x8000);
684
memory_set_bankptr(machine, "bios_ext4", machine.region("bios")->base() + 0xc000);
685
memory_set_bankptr(machine, "video_bank1", machine.region("video_bios")->base() + 0);
686
memory_set_bankptr(machine, "video_bank2", machine.region("video_bios")->base() + 0x4000);
669
machine.root_device().membank("bios_bank")->set_base(machine.root_device().memregion("bios")->base() + 0x10000);
670
machine.root_device().membank("bios_ext1")->set_base(machine.root_device().memregion("bios")->base() + 0);
671
machine.root_device().membank("bios_ext2")->set_base(machine.root_device().memregion("bios")->base() + 0x4000);
672
machine.root_device().membank("bios_ext3")->set_base(machine.root_device().memregion("bios")->base() + 0x8000);
673
machine.root_device().membank("bios_ext4")->set_base(machine.root_device().memregion("bios")->base() + 0xc000);
674
machine.root_device().membank("video_bank1")->set_base(machine.root_device().memregion("video_bios")->base() + 0);
675
machine.root_device().membank("video_bank2")->set_base(machine.root_device().memregion("video_bios")->base() + 0x4000);
707
696
MCFG_PCI_BUS_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w)
708
697
MCFG_PCI_BUS_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w)
710
MCFG_IDE_CONTROLLER_ADD("ide", ide_interrupt)
699
MCFG_IDE_CONTROLLER_ADD("ide", ide_interrupt, ide_devices, "hdd", NULL)
712
701
/* video hardware */
713
702
MCFG_FRAGMENT_ADD( pcvideo_vga )