mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
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:
parent
028ca94f63
commit
5409cb912b
@ -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"
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user