Changed rmnimbus to talk to scsicb instead of scsidev. It got missed as it didn't use the line handlers (nw)

This commit is contained in:
smf- 2012-10-06 12:28:24 +00:00
parent 028ca94f63
commit 5409cb912b
3 changed files with 90 additions and 91 deletions

View File

@ -15,6 +15,7 @@
#include "formats/pc_dsk.h"
#include "includes/rmnimbus.h"
#include "machine/er59256.h"
#include "machine/scsibus.h"
#include "machine/scsicb.h"
#include "machine/scsihd.h"
#include "machine/s1410.h"

View File

@ -8,7 +8,7 @@
#include "machine/z80sio.h"
#include "machine/wd17xx.h"
#include "machine/scsibus.h"
#include "machine/scsicb.h"
#include "machine/6522via.h"
#define MAINCPU_TAG "maincpu"
@ -172,79 +172,6 @@ struct mouse_joy_state
};
class rmnimbus_state : public driver_device
{
public:
rmnimbus_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
UINT32 m_debug_machine;
i186_state m_i186;
keyboard_t m_keyboard;
nimbus_drives_t m_nimbus_drives;
ipc_interface_t m_ipc_interface;
UINT8 m_mcu_reg080;
UINT8 m_iou_reg092;
UINT8 m_last_playmode;
mouse_joy_state m_nimbus_mouse;
UINT8 m_ay8910_a;
UINT16 m_IOPorts[num_ioports];
UINT8 m_sio_int_state;
UINT8 m_video_mem[SCREEN_WIDTH_PIXELS][SCREEN_HEIGHT_LINES];
UINT16 m_vidregs[NO_VIDREGS];
UINT8 m_bpp;
UINT16 m_pixel_mask;
UINT8 m_hs_count;
UINT32 m_debug_video;
DECLARE_READ16_MEMBER(nimbus_i186_internal_port_r);
DECLARE_WRITE16_MEMBER(nimbus_i186_internal_port_w);
DECLARE_READ8_MEMBER(nimbus_mcu_r);
DECLARE_WRITE8_MEMBER(nimbus_mcu_w);
DECLARE_READ16_MEMBER(nimbus_io_r);
DECLARE_WRITE16_MEMBER(nimbus_io_w);
DECLARE_READ8_MEMBER(nimbus_disk_r);
DECLARE_WRITE8_MEMBER(nimbus_disk_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_iou_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_iou_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_port_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_port_w);
DECLARE_READ8_MEMBER(nimbus_iou_r);
DECLARE_WRITE8_MEMBER(nimbus_iou_w);
DECLARE_READ8_MEMBER(nimbus_sound_ay8910_r);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_w);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_porta_w);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_portb_w);
DECLARE_READ8_MEMBER(nimbus_mouse_js_r);
DECLARE_WRITE8_MEMBER(nimbus_mouse_js_w);
DECLARE_READ16_MEMBER(nimbus_video_io_r);
DECLARE_WRITE16_MEMBER(nimbus_video_io_w);
DECLARE_DRIVER_INIT(nimbus);
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
virtual void video_reset();
virtual void palette_init();
UINT32 screen_update_nimbus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof_nimbus(screen_device &screen, bool state);
TIMER_CALLBACK_MEMBER(internal_timer_int);
TIMER_CALLBACK_MEMBER(dma_timer_callback);
TIMER_CALLBACK_MEMBER(keyscan_callback);
TIMER_CALLBACK_MEMBER(mouse_callback);
DECLARE_WRITE_LINE_MEMBER(sio_interrupt);
DECLARE_WRITE8_MEMBER(sio_dtr_w);
DECLARE_WRITE16_MEMBER(sio_serial_transmit);
DECLARE_READ16_MEMBER(sio_serial_receive);
DECLARE_WRITE_LINE_MEMBER(nimbus_fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(nimbus_fdc_drq_w);
DECLARE_READ8_MEMBER(nimbus_via_read_portb);
DECLARE_WRITE8_MEMBER(nimbus_via_write_portb);
DECLARE_WRITE_LINE_MEMBER(nimbus_via_irq_w);
DECLARE_WRITE_LINE_MEMBER(nimbus_ack_w);
};
/*----------- defined in drivers/rmnimbus.c -----------*/
extern const unsigned char nimbus_palette[SCREEN_NO_COLOURS][3];
@ -461,3 +388,79 @@ extern const via6522_interface nimbus_via;
#define LINEAR_ADDR(seg,ofs) ((seg<<4)+ofs)
#define OUTPUT_SEGOFS(mess,seg,ofs) logerror("%s=%04X:%04X [%08X]\n",mess,seg,ofs,((seg<<4)+ofs))
class rmnimbus_state : public driver_device
{
public:
rmnimbus_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_scsibus(*this, SCSIBUS_TAG ":host")
{
}
required_device<scsicb_device> m_scsibus;
UINT32 m_debug_machine;
i186_state m_i186;
keyboard_t m_keyboard;
nimbus_drives_t m_nimbus_drives;
ipc_interface_t m_ipc_interface;
UINT8 m_mcu_reg080;
UINT8 m_iou_reg092;
UINT8 m_last_playmode;
mouse_joy_state m_nimbus_mouse;
UINT8 m_ay8910_a;
UINT16 m_IOPorts[num_ioports];
UINT8 m_sio_int_state;
UINT8 m_video_mem[SCREEN_WIDTH_PIXELS][SCREEN_HEIGHT_LINES];
UINT16 m_vidregs[NO_VIDREGS];
UINT8 m_bpp;
UINT16 m_pixel_mask;
UINT8 m_hs_count;
UINT32 m_debug_video;
DECLARE_READ16_MEMBER(nimbus_i186_internal_port_r);
DECLARE_WRITE16_MEMBER(nimbus_i186_internal_port_w);
DECLARE_READ8_MEMBER(nimbus_mcu_r);
DECLARE_WRITE8_MEMBER(nimbus_mcu_w);
DECLARE_READ16_MEMBER(nimbus_io_r);
DECLARE_WRITE16_MEMBER(nimbus_io_w);
DECLARE_READ8_MEMBER(nimbus_disk_r);
DECLARE_WRITE8_MEMBER(nimbus_disk_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_iou_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_iou_w);
DECLARE_READ8_MEMBER(nimbus_pc8031_port_r);
DECLARE_WRITE8_MEMBER(nimbus_pc8031_port_w);
DECLARE_READ8_MEMBER(nimbus_iou_r);
DECLARE_WRITE8_MEMBER(nimbus_iou_w);
DECLARE_READ8_MEMBER(nimbus_sound_ay8910_r);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_w);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_porta_w);
DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_portb_w);
DECLARE_READ8_MEMBER(nimbus_mouse_js_r);
DECLARE_WRITE8_MEMBER(nimbus_mouse_js_w);
DECLARE_READ16_MEMBER(nimbus_video_io_r);
DECLARE_WRITE16_MEMBER(nimbus_video_io_w);
DECLARE_DRIVER_INIT(nimbus);
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
virtual void video_reset();
virtual void palette_init();
UINT32 screen_update_nimbus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void screen_eof_nimbus(screen_device &screen, bool state);
TIMER_CALLBACK_MEMBER(internal_timer_int);
TIMER_CALLBACK_MEMBER(dma_timer_callback);
TIMER_CALLBACK_MEMBER(keyscan_callback);
TIMER_CALLBACK_MEMBER(mouse_callback);
DECLARE_WRITE_LINE_MEMBER(sio_interrupt);
DECLARE_WRITE8_MEMBER(sio_dtr_w);
DECLARE_WRITE16_MEMBER(sio_serial_transmit);
DECLARE_READ16_MEMBER(sio_serial_receive);
DECLARE_WRITE_LINE_MEMBER(nimbus_fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(nimbus_fdc_drq_w);
DECLARE_READ8_MEMBER(nimbus_via_read_portb);
DECLARE_WRITE8_MEMBER(nimbus_via_write_portb);
DECLARE_WRITE_LINE_MEMBER(nimbus_via_irq_w);
DECLARE_WRITE_LINE_MEMBER(nimbus_ack_w);
};

View File

@ -62,6 +62,7 @@ even if you have to use unusual geometry to do so !
#include "machine/i8251.h"
#include "machine/ctronics.h"
#include "machine/6522via.h"
#include "machine/scsibus.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
@ -2292,7 +2293,6 @@ READ8_MEMBER(rmnimbus_state::nimbus_disk_r)
{
int result = 0;
device_t *fdc = machine().device(FDC_TAG);
scsibus_device *hdc = machine().device<scsibus_device>(SCSIBUS_TAG);
int pc=space.device().safe_pc();
rmnimbus_state *state = machine().driver_data<rmnimbus_state>();
@ -2323,7 +2323,7 @@ READ8_MEMBER(rmnimbus_state::nimbus_disk_r)
result=m_nimbus_drives.reg410_in ^ INV_BITS_410;
break;
case 0x18 :
result = hdc->scsi_data_r();
result = m_scsibus->scsi_data_r();
hdc_post_rw(machine());
default:
break;
@ -2360,7 +2360,6 @@ READ8_MEMBER(rmnimbus_state::nimbus_disk_r)
WRITE8_MEMBER(rmnimbus_state::nimbus_disk_w)
{
device_t *fdc = machine().device(FDC_TAG);
scsibus_device *hdc = machine().device<scsibus_device>(SCSIBUS_TAG);
int pc=space.device().safe_pc();
UINT8 reg400_old = m_nimbus_drives.reg400;
@ -2403,7 +2402,7 @@ WRITE8_MEMBER(rmnimbus_state::nimbus_disk_w)
break;
case 0x18 :
hdc->scsi_data_w(data);
m_scsibus->scsi_data_w(data);
hdc_post_rw(machine());
break;
}
@ -2412,14 +2411,13 @@ WRITE8_MEMBER(rmnimbus_state::nimbus_disk_w)
static void hdc_reset(running_machine &machine)
{
rmnimbus_state *state = machine.driver_data<rmnimbus_state>();
scsibus_device *hdc = machine.device<scsibus_device>(SCSIBUS_TAG);
state->m_nimbus_drives.reg410_in=0;
state->m_nimbus_drives.reg410_in |= (hdc->get_scsi_line(SCSI_LINE_REQ) ? HDC_REQ_MASK : 0);
state->m_nimbus_drives.reg410_in |= (hdc->get_scsi_line(SCSI_LINE_CD) ? HDC_CD_MASK : 0);
state->m_nimbus_drives.reg410_in |= (hdc->get_scsi_line(SCSI_LINE_IO) ? HDC_IO_MASK : 0);
state->m_nimbus_drives.reg410_in |= (hdc->get_scsi_line(SCSI_LINE_BSY) ? HDC_BSY_MASK : 0);
state->m_nimbus_drives.reg410_in |= (hdc->get_scsi_line(SCSI_LINE_MSG) ? HDC_MSG_MASK : 0);
state->m_nimbus_drives.reg410_in |= (state->m_scsibus->scsi_req_r() ? HDC_REQ_MASK : 0);
state->m_nimbus_drives.reg410_in |= (state->m_scsibus->scsi_cd_r() ? HDC_CD_MASK : 0);
state->m_nimbus_drives.reg410_in |= (state->m_scsibus->scsi_io_r() ? HDC_IO_MASK : 0);
state->m_nimbus_drives.reg410_in |= (state->m_scsibus->scsi_bsy_r() ? HDC_BSY_MASK : 0);
state->m_nimbus_drives.reg410_in |= (state->m_scsibus->scsi_msg_r() ? HDC_MSG_MASK : 0);
state->m_nimbus_drives.drq_ff=0;
}
@ -2427,7 +2425,6 @@ static void hdc_reset(running_machine &machine)
static void hdc_ctrl_write(running_machine &machine, UINT8 data)
{
rmnimbus_state *state = machine.driver_data<rmnimbus_state>();
scsibus_device *hdc = machine.device<scsibus_device>(SCSIBUS_TAG);
// If we enable the HDC interupt, and an interrupt is pending, go deal with it.
if(((data & HDC_IRQ_MASK) && (~state->m_nimbus_drives.reg410_out & HDC_IRQ_MASK)) &&
@ -2436,17 +2433,16 @@ static void hdc_ctrl_write(running_machine &machine, UINT8 data)
state->m_nimbus_drives.reg410_out=data;
hdc->set_scsi_line(SCSI_LINE_RESET, (data & HDC_RESET_MASK) ? 0 : 1);
hdc->set_scsi_line(SCSI_LINE_SEL, (data & HDC_SEL_MASK) ? 0 : 1);
state->m_scsibus->scsi_rst_w((data & HDC_RESET_MASK) ? 0 : 1);
state->m_scsibus->scsi_sel_w((data & HDC_SEL_MASK) ? 0 : 1);
}
static void hdc_post_rw(running_machine &machine)
{
rmnimbus_state *state = machine.driver_data<rmnimbus_state>();
scsibus_device *hdc = machine.device<scsibus_device>(SCSIBUS_TAG);
if((state->m_nimbus_drives.reg410_in & HDC_REQ_MASK)==0)
hdc->set_scsi_line(SCSI_LINE_ACK,0);
state->m_scsibus->scsi_ack_w(0);
state->m_nimbus_drives.drq_ff=0;
}
@ -2500,8 +2496,7 @@ void nimbus_scsi_linechange(device_t *device, UINT8 line, UINT8 state)
}
else
{
scsibus_device *hdc = downcast<scsibus_device *>(device);
hdc->set_scsi_line(SCSI_LINE_ACK,1);
drvstate->m_scsibus->scsi_ack_w(1);
}
}
}