mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
pmac6100: Connect SCSI
This commit is contained in:
parent
516b085368
commit
6ea142efb8
@ -4,15 +4,14 @@
|
||||
#include "emu.h"
|
||||
|
||||
#include "bus/nubus/nubus.h"
|
||||
#include "bus/scsi/scsi.h"
|
||||
#include "bus/scsi/scsihd.h"
|
||||
#include "bus/nscsi/devices.h"
|
||||
#include "cpu/powerpc/ppc.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/8530scc.h"
|
||||
#include "machine/cuda.h"
|
||||
#include "machine/macadb.h"
|
||||
#include "machine/mv_sonora.h"
|
||||
#include "machine/ncr5380.h"
|
||||
#include "machine/ncr5390.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/swim3.h"
|
||||
#include "machine/timer.h"
|
||||
@ -41,7 +40,8 @@ private:
|
||||
required_device<macadb_device> m_macadb;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<scc8530_legacy_device> m_scc;
|
||||
required_device<ncr5380_device> m_ncr5380;
|
||||
required_device<nscsi_bus_device> m_scsibus;
|
||||
required_device<ncr53c94_device> m_ncr53c94;
|
||||
required_device<applefdintf_device> m_fdc;
|
||||
required_device_array<floppy_connector, 2> m_floppy;
|
||||
required_device<mac_video_sonora_device> m_video;
|
||||
@ -56,13 +56,22 @@ private:
|
||||
|
||||
uint8_t m_via2_ier, m_via2_ifr, m_via2_sier, m_via2_sifr;
|
||||
|
||||
uint64_t m_dma_scsi_buffer;
|
||||
|
||||
uint32_t m_dma_badr, m_dma_floppy_adr;
|
||||
uint16_t m_dma_berr_en, m_dma_berr_flag;
|
||||
|
||||
uint8_t m_dma_scsi_ctrl, m_dma_floppy_ctrl;
|
||||
uint32_t m_dma_scsi_a_base_adr, m_dma_scsi_b_base_adr;
|
||||
uint32_t m_dma_scsi_a_cur_offset, m_dma_scsi_b_cur_offset;
|
||||
|
||||
uint8_t m_dma_scsi_a_ctrl, m_dma_scsi_b_ctrl, m_dma_floppy_ctrl;
|
||||
uint8_t m_dma_scsi_buffer_byte_count;
|
||||
|
||||
uint8_t m_dma_scc_txa_ctrl, m_dma_scc_rxa_ctrl, m_dma_scc_txb_ctrl, m_dma_scc_rxb_ctrl;
|
||||
uint8_t m_dma_enet_rx_ctrl, m_dma_enet_tx_ctrl;
|
||||
|
||||
bool m_dma_scsi_a_in_step;
|
||||
|
||||
void pdm_map(address_map &map);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_irq);
|
||||
@ -72,16 +81,16 @@ private:
|
||||
DECLARE_WRITE_LINE_MEMBER(via1_irq);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_err_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(etx_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(erx_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(txa_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(rxa_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(txb_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(rxb_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(etx_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(erx_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(txa_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(rxa_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(txb_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(rxb_dma_irq);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(sndo_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(sndi_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(sndo_dma_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(sndi_dma_irq);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_err_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(etx_err_irq);
|
||||
@ -95,6 +104,16 @@ private:
|
||||
DECLARE_WRITE_LINE_MEMBER(sndo_err_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(sndi_err_irq);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(slot2_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(slot1_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(slot0_irq);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(fdc_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(sound_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(scsi_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(scsi_drq);
|
||||
|
||||
void phases_w(uint8_t phases);
|
||||
void sel35_w(int sel35);
|
||||
void devsel_w(uint8_t devsel);
|
||||
@ -139,6 +158,8 @@ private:
|
||||
uint8_t irq_control_r();
|
||||
void irq_control_w(uint8_t data);
|
||||
void irq_main_set(uint8_t mask, int state);
|
||||
void via2_irq_main_set(uint8_t mask, int state);
|
||||
void via2_irq_slot_set(uint8_t mask, int state);
|
||||
|
||||
uint32_t dma_badr_r();
|
||||
void dma_badr_w(offs_t, uint32_t data, uint32_t mem_mask);
|
||||
@ -147,8 +168,17 @@ private:
|
||||
uint16_t dma_berr_flag_r();
|
||||
void dma_berr_flag_w(offs_t, uint16_t data, uint16_t mem_mask);
|
||||
|
||||
uint8_t dma_scsi_ctrl_r();
|
||||
void dma_scsi_ctrl_w(uint8_t data);
|
||||
void dma_scsi_a_step();
|
||||
uint32_t dma_scsi_a_base_adr_r();
|
||||
void dma_scsi_a_base_adr_w(offs_t, uint32_t data, uint32_t mem_mask);
|
||||
uint32_t dma_scsi_b_base_adr_r();
|
||||
void dma_scsi_b_base_adr_w(offs_t, uint32_t data, uint32_t mem_mask);
|
||||
uint8_t dma_scsi_a_ctrl_r();
|
||||
void dma_scsi_a_ctrl_w(uint8_t data);
|
||||
uint8_t dma_scsi_b_ctrl_r();
|
||||
void dma_scsi_b_ctrl_w(uint8_t data);
|
||||
uint32_t dma_scsi_a_cur_adr_r();
|
||||
uint32_t dma_scsi_b_cur_adr_r();
|
||||
|
||||
uint8_t dma_floppy_ctrl_r();
|
||||
void dma_floppy_ctrl_w(uint8_t data);
|
||||
@ -181,7 +211,8 @@ macpdm_state::macpdm_state(const machine_config &mconfig, device_type type, cons
|
||||
m_macadb(*this, "macadb"),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_scc(*this, "scc"),
|
||||
m_ncr5380(*this, "ncr5380"),
|
||||
m_scsibus(*this, "scsibus"),
|
||||
m_ncr53c94(*this, "scsibus:7:ncr53c94"),
|
||||
m_fdc(*this, "fdc"),
|
||||
m_floppy(*this, "fdc:%d", 0U),
|
||||
m_video(*this, "video")
|
||||
@ -213,7 +244,15 @@ void macpdm_state::driver_init()
|
||||
save_item(NAME(m_dma_badr));
|
||||
save_item(NAME(m_dma_berr_en));
|
||||
save_item(NAME(m_dma_berr_flag));
|
||||
save_item(NAME(m_dma_scsi_ctrl));
|
||||
save_item(NAME(m_dma_scsi_buffer));
|
||||
save_item(NAME(m_dma_scsi_buffer_byte_count));
|
||||
save_item(NAME(m_dma_scsi_a_in_step));
|
||||
save_item(NAME(m_dma_scsi_a_base_adr));
|
||||
save_item(NAME(m_dma_scsi_b_base_adr));
|
||||
save_item(NAME(m_dma_scsi_a_ctrl));
|
||||
save_item(NAME(m_dma_scsi_b_ctrl));
|
||||
save_item(NAME(m_dma_scsi_a_cur_offset));
|
||||
save_item(NAME(m_dma_scsi_b_cur_offset));
|
||||
save_item(NAME(m_dma_floppy_ctrl));
|
||||
save_item(NAME(m_dma_scc_txa_ctrl));
|
||||
save_item(NAME(m_dma_scc_rxa_ctrl));
|
||||
@ -257,7 +296,15 @@ void macpdm_state::driver_reset()
|
||||
m_dma_badr = 0;
|
||||
m_dma_berr_en = 0;
|
||||
m_dma_berr_flag = 0;
|
||||
m_dma_scsi_ctrl = 0;
|
||||
m_dma_scsi_buffer = 0;
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
m_dma_scsi_a_in_step = false;
|
||||
m_dma_scsi_a_base_adr = 0;
|
||||
m_dma_scsi_b_base_adr = 0;
|
||||
m_dma_scsi_a_ctrl = 0;
|
||||
m_dma_scsi_b_ctrl = 0;
|
||||
m_dma_scsi_a_cur_offset = 0;
|
||||
m_dma_scsi_b_cur_offset = 0;
|
||||
m_dma_floppy_ctrl = 0;
|
||||
m_dma_scc_txa_ctrl = 0;
|
||||
m_dma_scc_rxa_ctrl = 0;
|
||||
@ -308,6 +355,28 @@ void macpdm_state::irq_main_set(uint8_t mask, int state)
|
||||
m_maincpu->set_input_line(PPC_IRQ, CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
// logerror("irq control %02x\n", m_irq_control);
|
||||
}
|
||||
|
||||
void macpdm_state::via2_irq_main_set(uint8_t mask, int state)
|
||||
{
|
||||
if(((m_via2_ifr & mask) != 0) == state)
|
||||
return;
|
||||
|
||||
m_via2_ifr ^= mask;
|
||||
logerror("via2 main %02x / %02x -> %02x\n", m_via2_ifr, m_via2_ier, m_via2_ifr & m_via2_ier);
|
||||
|
||||
irq_main_set(0x02, (m_via2_ifr & m_via2_ier) != 0);
|
||||
}
|
||||
|
||||
void macpdm_state::via2_irq_slot_set(uint8_t mask, int state)
|
||||
{
|
||||
if(((m_via2_sifr & mask) != 0) == state)
|
||||
return;
|
||||
|
||||
m_via2_sifr ^= mask;
|
||||
via2_irq_main_set(0x02, (m_via2_sifr & m_via2_sier) != 0);
|
||||
}
|
||||
|
||||
|
||||
@ -383,15 +452,18 @@ uint8_t macpdm_state::via2_ier_r()
|
||||
void macpdm_state::via2_ier_w(uint8_t data)
|
||||
{
|
||||
if(data & 0x80)
|
||||
m_via2_ier |= data & 0x29;
|
||||
m_via2_ier |= data & 0x3b;
|
||||
else
|
||||
m_via2_ier &= ~data;
|
||||
|
||||
logerror("via2 ier %s %s %s %s\n",
|
||||
m_via2_ier & 0x20 ? "fdc" : "-",
|
||||
m_via2_ier & 0x20 ? "sound" : "-",
|
||||
m_via2_ier & 0x08 ? "scsi" : "-",
|
||||
m_via2_ier & 0x02 ? "slot" : "-",
|
||||
m_via2_ier & 0x01 ? "scsidrq" : "-");
|
||||
|
||||
irq_main_set(0x02, (m_via2_ifr & m_via2_ier) != 0);
|
||||
}
|
||||
|
||||
uint8_t macpdm_state::via2_ifr_r()
|
||||
@ -407,15 +479,17 @@ uint8_t macpdm_state::via2_sier_r()
|
||||
void macpdm_state::via2_sier_w(uint8_t data)
|
||||
{
|
||||
if(data & 0x80)
|
||||
m_via2_sier |= data & 0x38;
|
||||
m_via2_sier |= data & 0x78;
|
||||
else
|
||||
m_via2_sier &= ~data;
|
||||
|
||||
logerror("via2 sier %s %s %s %s\n",
|
||||
m_via2_ier & 0x40 ? "vbl" : "-",
|
||||
m_via2_ier & 0x20 ? "slot2" : "-",
|
||||
m_via2_ier & 0x10 ? "slot1" : "-",
|
||||
m_via2_ier & 0x08 ? "slot0" : "-");
|
||||
m_via2_sier & 0x40 ? "vbl" : "-",
|
||||
m_via2_sier & 0x20 ? "slot2" : "-",
|
||||
m_via2_sier & 0x10 ? "slot1" : "-",
|
||||
m_via2_sier & 0x08 ? "slot0" : "-");
|
||||
|
||||
via2_irq_main_set(0x02, (m_via2_sifr & m_via2_sier) != 0);
|
||||
}
|
||||
|
||||
uint8_t macpdm_state::via2_sifr_r()
|
||||
@ -454,12 +528,12 @@ void macpdm_state::fdc_w(offs_t offset, uint8_t data)
|
||||
|
||||
uint8_t macpdm_state::scsi_r(offs_t offset)
|
||||
{
|
||||
return m_ncr5380->ncr5380_read_reg(offset >> 4);
|
||||
return m_ncr53c94->read(offset >> 4);
|
||||
}
|
||||
|
||||
void macpdm_state::scsi_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
return m_ncr5380->ncr5380_write_reg(offset >> 4, data);
|
||||
m_ncr53c94->write(offset >> 4, data);
|
||||
}
|
||||
|
||||
uint8_t macpdm_state::hmc_r(offs_t offset)
|
||||
@ -555,6 +629,36 @@ WRITE_LINE_MEMBER(macpdm_state::via1_irq)
|
||||
irq_main_set(0x01, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::fdc_irq)
|
||||
{
|
||||
via2_irq_main_set(0x20, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::sound_irq)
|
||||
{
|
||||
via2_irq_main_set(0x20, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::vblank_irq)
|
||||
{
|
||||
via2_irq_slot_set(0x40, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::slot2_irq)
|
||||
{
|
||||
via2_irq_slot_set(0x20, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::slot1_irq)
|
||||
{
|
||||
via2_irq_slot_set(0x10, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::slot0_irq)
|
||||
{
|
||||
via2_irq_slot_set(0x08, state);
|
||||
}
|
||||
|
||||
uint32_t macpdm_state::dma_badr_r()
|
||||
{
|
||||
return m_dma_badr;
|
||||
@ -593,17 +697,134 @@ void macpdm_state::dma_berr_flag_w(offs_t, uint16_t data, uint16_t mem_mask)
|
||||
}
|
||||
|
||||
|
||||
uint8_t macpdm_state::dma_scsi_ctrl_r()
|
||||
// SCSI management
|
||||
|
||||
void macpdm_state::dma_scsi_a_step()
|
||||
{
|
||||
return m_dma_scsi_ctrl;
|
||||
m_dma_scsi_a_in_step = true;
|
||||
|
||||
if(m_dma_scsi_a_ctrl & 0x40) {
|
||||
fatalerror("scsi dma write\n");
|
||||
|
||||
} else {
|
||||
while(m_via2_ifr & 0x01) {
|
||||
uint8_t b = m_ncr53c94->dma_r();
|
||||
m_dma_scsi_buffer = (m_dma_scsi_buffer & ~(u64(0xff) << (56 - 8*m_dma_scsi_buffer_byte_count))) | (u64(b) << (56 - 8*m_dma_scsi_buffer_byte_count));
|
||||
m_dma_scsi_buffer_byte_count ++;
|
||||
if(m_dma_scsi_buffer_byte_count == 8) {
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
m_maincpu->space().write_qword(m_dma_scsi_a_base_adr + m_dma_scsi_a_cur_offset, m_dma_scsi_buffer);
|
||||
m_dma_scsi_a_cur_offset += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_dma_scsi_a_in_step = false;
|
||||
}
|
||||
|
||||
void macpdm_state::dma_scsi_ctrl_w(uint8_t data)
|
||||
WRITE_LINE_MEMBER(macpdm_state::scsi_irq)
|
||||
{
|
||||
m_dma_scsi_ctrl = data;
|
||||
logerror("dma_scsi_ctrl_w %02x\n", m_dma_scsi_ctrl);
|
||||
via2_irq_main_set(0x08, state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(macpdm_state::scsi_drq)
|
||||
{
|
||||
via2_irq_main_set(0x01, state);
|
||||
if((m_dma_scsi_a_ctrl & 0x02) && (m_via2_ifr & 0x01) && !m_dma_scsi_a_in_step)
|
||||
dma_scsi_a_step();
|
||||
}
|
||||
|
||||
uint32_t macpdm_state::dma_scsi_a_base_adr_r()
|
||||
{
|
||||
return m_dma_scsi_a_base_adr;
|
||||
}
|
||||
|
||||
void macpdm_state::dma_scsi_a_base_adr_w(offs_t, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_dma_scsi_a_base_adr);
|
||||
m_dma_scsi_a_base_adr &= ~7;
|
||||
m_dma_scsi_a_cur_offset = 0;
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
logerror("dma_scsi_a_base_adr_w %08x\n", m_dma_scsi_a_base_adr);
|
||||
}
|
||||
|
||||
uint32_t macpdm_state::dma_scsi_b_base_adr_r()
|
||||
{
|
||||
return m_dma_scsi_b_base_adr;
|
||||
}
|
||||
|
||||
void macpdm_state::dma_scsi_b_base_adr_w(offs_t, uint32_t data, uint32_t mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_dma_scsi_b_base_adr);
|
||||
m_dma_scsi_b_base_adr &= ~7;
|
||||
m_dma_scsi_a_cur_offset = 0;
|
||||
logerror("dma_scsi_b_base_adr_w %08x\n", m_dma_scsi_b_base_adr);
|
||||
}
|
||||
|
||||
uint8_t macpdm_state::dma_scsi_a_ctrl_r()
|
||||
{
|
||||
return m_dma_scsi_a_ctrl;
|
||||
}
|
||||
|
||||
void macpdm_state::dma_scsi_a_ctrl_w(uint8_t data)
|
||||
{
|
||||
m_dma_scsi_a_ctrl = data & 0x42;
|
||||
if(data & 1) {
|
||||
m_dma_scsi_a_ctrl &= 0x40;
|
||||
m_dma_scsi_a_cur_offset = 0;
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
}
|
||||
if(data & 0x10) {
|
||||
while(m_via2_ifr & 0x01) {
|
||||
uint8_t b = m_ncr53c94->dma_r();
|
||||
m_dma_scsi_buffer = (m_dma_scsi_buffer & ~(u64(0xff) << (56 - 8*m_dma_scsi_buffer_byte_count))) | (u64(b) << (56 - 8*m_dma_scsi_buffer_byte_count));
|
||||
m_dma_scsi_buffer_byte_count ++;
|
||||
if(m_dma_scsi_buffer_byte_count == 8) {
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
m_maincpu->space().write_qword(m_dma_scsi_a_base_adr + m_dma_scsi_a_cur_offset, m_dma_scsi_buffer);
|
||||
m_dma_scsi_a_cur_offset += 8;
|
||||
}
|
||||
}
|
||||
if(m_dma_scsi_buffer_byte_count) {
|
||||
m_maincpu->space().write_qword(m_dma_scsi_a_base_adr + m_dma_scsi_a_cur_offset, m_dma_scsi_buffer);
|
||||
m_dma_scsi_buffer_byte_count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if((m_dma_scsi_a_ctrl & 0x02) && (m_via2_ifr & 0x01) && !m_dma_scsi_a_in_step)
|
||||
dma_scsi_a_step();
|
||||
|
||||
logerror("dma_scsi_a_ctrl_w %02x\n", m_dma_scsi_a_ctrl);
|
||||
}
|
||||
|
||||
uint8_t macpdm_state::dma_scsi_b_ctrl_r()
|
||||
{
|
||||
return m_dma_scsi_b_ctrl;
|
||||
}
|
||||
|
||||
void macpdm_state::dma_scsi_b_ctrl_w(uint8_t data)
|
||||
{
|
||||
// Channel B is not actually connected to anything
|
||||
m_dma_scsi_b_ctrl = data & 0x42;
|
||||
if(data & 1) {
|
||||
m_dma_scsi_b_ctrl &= 0x40;
|
||||
m_dma_scsi_b_cur_offset = 0;
|
||||
}
|
||||
logerror("dma_scsi_b_ctrl_w %02x\n", m_dma_scsi_b_ctrl);
|
||||
}
|
||||
|
||||
uint32_t macpdm_state::dma_scsi_a_cur_adr_r()
|
||||
{
|
||||
return m_dma_scsi_a_base_adr + m_dma_scsi_a_cur_offset;
|
||||
}
|
||||
|
||||
uint32_t macpdm_state::dma_scsi_b_cur_adr_r()
|
||||
{
|
||||
return m_dma_scsi_b_base_adr + m_dma_scsi_b_cur_offset;
|
||||
}
|
||||
|
||||
|
||||
// Floppy management
|
||||
|
||||
uint8_t macpdm_state::dma_floppy_ctrl_r()
|
||||
{
|
||||
@ -629,6 +850,8 @@ void macpdm_state::dma_floppy_adr_w(offs_t, uint32_t data, uint32_t mem_mask)
|
||||
}
|
||||
|
||||
|
||||
// SCC management
|
||||
|
||||
uint8_t macpdm_state::dma_scc_txa_ctrl_r()
|
||||
{
|
||||
return m_dma_scc_txa_ctrl;
|
||||
@ -706,16 +929,18 @@ void macpdm_state::pdm_map(address_map &map)
|
||||
// 50f08000 = ethernet ID PROM
|
||||
// 50f0a000 = MACE ethernet controller
|
||||
map(0x50f10000, 0x50f10000).rw(FUNC(macpdm_state::scsi_r), FUNC(macpdm_state::scsi_w)).select(0xf0);
|
||||
map(0x50f10100, 0x50f10101).r(m_ncr53c94, FUNC(ncr53c94_device::dma16_r));
|
||||
|
||||
// 50f14000 = sound registers (AWACS)
|
||||
map(0x50f14000, 0x50f1401f).rw(m_awacs, FUNC(awacs_device::read), FUNC(awacs_device::write));
|
||||
map(0x50f16000, 0x50f16000).rw(FUNC(macpdm_state::fdc_r), FUNC(macpdm_state::fdc_w)).select(0x1e00);
|
||||
|
||||
map(0x50f24000, 0x50f24003).w(m_video, FUNC(mac_video_sonora_device::dac_w));
|
||||
|
||||
map(0x50f26002, 0x50f26002).rw(FUNC(macpdm_state::via2_sifr_r), FUNC(macpdm_state::via2_sifr_w));
|
||||
map(0x50f26003, 0x50f26003).r(FUNC(macpdm_state::via2_ifr_r));
|
||||
map(0x50f26012, 0x50f26012).rw(FUNC(macpdm_state::via2_sier_r), FUNC(macpdm_state::via2_sier_w));
|
||||
map(0x50f26013, 0x50f26013).rw(FUNC(macpdm_state::via2_ier_r), FUNC(macpdm_state::via2_ier_w));
|
||||
map(0x50f26002, 0x50f26002).rw(FUNC(macpdm_state::via2_sifr_r), FUNC(macpdm_state::via2_sifr_w)).mirror(0x1fe0);
|
||||
map(0x50f26003, 0x50f26003).r(FUNC(macpdm_state::via2_ifr_r)).mirror(0x1fe0);
|
||||
map(0x50f26012, 0x50f26012).rw(FUNC(macpdm_state::via2_sier_r), FUNC(macpdm_state::via2_sier_w)).mirror(0x1fe0);
|
||||
map(0x50f26013, 0x50f26013).rw(FUNC(macpdm_state::via2_ier_r), FUNC(macpdm_state::via2_ier_w)).mirror(0x1fe0);
|
||||
|
||||
map(0x50f28000, 0x50f28007).rw(m_video, FUNC(mac_video_sonora_device::vctrl_r), FUNC(mac_video_sonora_device::vctrl_w));
|
||||
|
||||
@ -725,10 +950,19 @@ void macpdm_state::pdm_map(address_map &map)
|
||||
|
||||
map(0x50f31000, 0x50f31003).rw(FUNC(macpdm_state::dma_badr_r), FUNC(macpdm_state::dma_badr_w));
|
||||
map(0x50f31c20, 0x50f31c20).rw(FUNC(macpdm_state::dma_enet_tx_ctrl_r), FUNC(macpdm_state::dma_enet_tx_ctrl_w));
|
||||
map(0x50f32008, 0x50f32008).rw(FUNC(macpdm_state::dma_scsi_ctrl_r), FUNC(macpdm_state::dma_scsi_ctrl_w));
|
||||
|
||||
map(0x50f32000, 0x50f32003).rw(FUNC(macpdm_state::dma_scsi_a_base_adr_r), FUNC(macpdm_state::dma_scsi_a_base_adr_w));
|
||||
map(0x50f32004, 0x50f32007).rw(FUNC(macpdm_state::dma_scsi_b_base_adr_r), FUNC(macpdm_state::dma_scsi_b_base_adr_w));
|
||||
map(0x50f32008, 0x50f32008).rw(FUNC(macpdm_state::dma_scsi_a_ctrl_r), FUNC(macpdm_state::dma_scsi_a_ctrl_w));
|
||||
map(0x50f32009, 0x50f32009).rw(FUNC(macpdm_state::dma_scsi_b_ctrl_r), FUNC(macpdm_state::dma_scsi_b_ctrl_w));
|
||||
map(0x50f32010, 0x50f32013).r(FUNC(macpdm_state::dma_scsi_a_cur_adr_r));
|
||||
map(0x50f32014, 0x50f32017).r(FUNC(macpdm_state::dma_scsi_b_cur_adr_r));
|
||||
|
||||
map(0x50f32028, 0x50f32028).rw(FUNC(macpdm_state::dma_enet_rx_ctrl_r), FUNC(macpdm_state::dma_enet_rx_ctrl_w));
|
||||
|
||||
map(0x50f32060, 0x50f32063).rw(FUNC(macpdm_state::dma_floppy_adr_r), FUNC(macpdm_state::dma_floppy_adr_w));
|
||||
map(0x50f32068, 0x50f32068).rw(FUNC(macpdm_state::dma_floppy_ctrl_r), FUNC(macpdm_state::dma_floppy_ctrl_w));
|
||||
|
||||
map(0x50f32088, 0x50f32088).rw(FUNC(macpdm_state::dma_scc_txa_ctrl_r), FUNC(macpdm_state::dma_scc_txa_ctrl_w));
|
||||
map(0x50f32098, 0x50f32098).rw(FUNC(macpdm_state::dma_scc_rxa_ctrl_r), FUNC(macpdm_state::dma_scc_rxa_ctrl_w));
|
||||
map(0x50f320a8, 0x50f320a8).rw(FUNC(macpdm_state::dma_scc_txb_ctrl_r), FUNC(macpdm_state::dma_scc_txb_ctrl_w));
|
||||
@ -756,12 +990,20 @@ void macpdm_state::macpdm(machine_config &config)
|
||||
m_awacs->add_route(0, "lspeaker", 1.0);
|
||||
m_awacs->add_route(1, "rspeaker", 1.0);
|
||||
|
||||
scsi_port_device &scsibus(SCSI_PORT(config, "scsi"));
|
||||
scsibus.set_slot_device(1, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6));
|
||||
scsibus.set_slot_device(2, "harddisk", SCSIHD, DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5));
|
||||
|
||||
NCR5380(config, m_ncr5380, ENET_CLOCK/2);
|
||||
m_ncr5380->set_scsi_port("scsi");
|
||||
NSCSI_BUS(config, m_scsibus);
|
||||
NSCSI_CONNECTOR(config, "scsibus:0", default_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsibus:1", default_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsibus:2", default_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsibus:3", default_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsibus:4", default_scsi_devices, nullptr);
|
||||
NSCSI_CONNECTOR(config, "scsibus:5", default_scsi_devices, "harddisk");
|
||||
NSCSI_CONNECTOR(config, "scsibus:6", default_scsi_devices, "harddisk");
|
||||
NSCSI_CONNECTOR(config, "scsibus:7").option_set("ncr53c94", NCR53C94).machine_config([this] (device_t *device) {
|
||||
auto &ctrl = downcast<ncr53c94_device &>(*device);
|
||||
ctrl.set_clock(ENET_CLOCK/2);
|
||||
ctrl.drq_handler_cb().set(*this, FUNC(macpdm_state::scsi_drq));
|
||||
ctrl.irq_handler_cb().set(*this, FUNC(macpdm_state::scsi_irq));
|
||||
});
|
||||
|
||||
SOFTWARE_LIST(config, "hdd_list").set_original("mac_hdd");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user