mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
Removed MC68901 polling for gpio bits. [smf]
This commit is contained in:
parent
4f61954a68
commit
93188e310b
@ -293,7 +293,7 @@ inline void mc68901_device::timer_input(int index, int value)
|
||||
|
||||
inline void mc68901_device::gpio_input(int bit, int state)
|
||||
{
|
||||
if (state != BIT(m_gpip, bit))
|
||||
if (state != BIT(m_gpio_input, bit))
|
||||
{
|
||||
if (state == BIT(m_aer, bit))
|
||||
{
|
||||
@ -309,9 +309,9 @@ inline void mc68901_device::gpio_input(int bit, int state)
|
||||
|
||||
|
||||
if (state)
|
||||
m_gpip &= ~(1 << bit);
|
||||
m_gpio_input |= (1 << bit);
|
||||
else
|
||||
m_gpip |= (1 << bit);
|
||||
m_gpio_input &= ~(1 << bit);
|
||||
}
|
||||
}
|
||||
|
||||
@ -328,8 +328,7 @@ inline void mc68901_device::gpio_input(int bit, int state)
|
||||
mc68901_device::mc68901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, MC68901, "Motorola MC68901", tag, owner, clock, "mc68901", __FILE__),
|
||||
device_serial_interface(mconfig, *this),
|
||||
m_gpip(0),
|
||||
m_tsr(TSR_BUFFER_EMPTY)
|
||||
m_gpio_input(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -364,7 +363,6 @@ void mc68901_device::device_start()
|
||||
m_start_bit_hack_for_external_clocks = true;
|
||||
|
||||
/* resolve callbacks */
|
||||
m_in_gpio_func.resolve(m_in_gpio_cb, *this);
|
||||
m_out_gpio_func.resolve(m_out_gpio_cb, *this);
|
||||
m_out_so_func.resolve(m_out_so_cb, *this);
|
||||
m_out_tao_func.resolve(m_out_tao_cb, *this);
|
||||
@ -554,9 +552,7 @@ READ8_MEMBER( mc68901_device::read )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case REGISTER_GPIP:
|
||||
m_gpip = m_in_gpio_func(0);
|
||||
return m_gpip;
|
||||
case REGISTER_GPIP: return (m_gpio_input & ~m_ddr) | (m_gpip & m_ddr);
|
||||
|
||||
case REGISTER_AER: return m_aer;
|
||||
case REGISTER_DDR: return m_ddr;
|
||||
|
@ -79,7 +79,6 @@ struct mc68901_interface
|
||||
|
||||
devcb_write_line m_out_irq_cb;
|
||||
|
||||
devcb_read8 m_in_gpio_cb;
|
||||
devcb_write8 m_out_gpio_cb;
|
||||
|
||||
devcb_write_line m_out_tao_cb;
|
||||
@ -237,7 +236,6 @@ private:
|
||||
static const int GPIO_TIMER[];
|
||||
static const int PRESCALER[];
|
||||
|
||||
devcb_resolved_read8 m_in_gpio_func;
|
||||
devcb_resolved_write8 m_out_gpio_func;
|
||||
devcb_resolved_write_line m_out_so_func;
|
||||
devcb_resolved_write_line m_out_tao_func;
|
||||
@ -272,6 +270,7 @@ private:
|
||||
int m_udr_written;
|
||||
UINT8 m_rcv;
|
||||
int m_rcv_pending;
|
||||
UINT8 m_gpio_input;
|
||||
|
||||
/* counter timer state */
|
||||
UINT8 m_tmc[4]; /* timer main counters */
|
||||
|
@ -1896,52 +1896,6 @@ static ACIA6850_INTERFACE( acia_midi_intf )
|
||||
// MC68901_INTERFACE( mfp_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( st_state::mfp_gpio_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 Centronics BUSY
|
||||
1 RS232 DCD
|
||||
2 RS232 CTS
|
||||
3 Blitter done
|
||||
4 Keyboard/MIDI
|
||||
5 FDC
|
||||
6 RS232 RI
|
||||
7 Monochrome monitor detect
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
// centronics busy
|
||||
data |= m_centronics->busy_r();
|
||||
|
||||
// data carrier detect
|
||||
data |= m_rs232->dcd_r() << 1;
|
||||
|
||||
// clear to send
|
||||
data |= m_rs232->cts_r() << 2;
|
||||
|
||||
// blitter done
|
||||
data |= m_blitter_done << 3;
|
||||
|
||||
// keyboard/MIDI interrupt
|
||||
data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
|
||||
|
||||
// floppy interrupt request
|
||||
data |= !m_fdc->intrq_r() << 5;
|
||||
|
||||
// ring indicator
|
||||
data |= m_rs232->ri_r() << 6;
|
||||
|
||||
// monochrome monitor detect
|
||||
data |= m_monochrome << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( st_state::mfp_tdo_w )
|
||||
{
|
||||
m_mfp->clock_w(state);
|
||||
@ -1953,7 +1907,6 @@ static MC68901_INTERFACE( mfp_intf )
|
||||
0, /* receive clock */
|
||||
0, /* transmit clock */
|
||||
DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */
|
||||
DEVCB_DRIVER_MEMBER(st_state, mfp_gpio_r), /* GPIO read */
|
||||
DEVCB_NULL, /* GPIO write */
|
||||
DEVCB_NULL, /* TAO */
|
||||
DEVCB_NULL, /* TBO */
|
||||
@ -1967,59 +1920,12 @@ static MC68901_INTERFACE( mfp_intf )
|
||||
// MC68901_INTERFACE( atariste_mfp_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( ste_state::mfp_gpio_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 Centronics BUSY
|
||||
1 RS232 DCD
|
||||
2 RS232 CTS
|
||||
3 Blitter done
|
||||
4 Keyboard/MIDI
|
||||
5 FDC
|
||||
6 RS232 RI
|
||||
7 Monochrome monitor detect / DMA sound active
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
// centronics busy
|
||||
data |= m_centronics->busy_r();
|
||||
|
||||
// data carrier detect
|
||||
data |= m_rs232->dcd_r() << 1;
|
||||
|
||||
// clear to send
|
||||
data |= m_rs232->cts_r() << 2;
|
||||
|
||||
// blitter done
|
||||
data |= m_blitter_done << 3;
|
||||
|
||||
// keyboard/MIDI interrupt
|
||||
data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
|
||||
|
||||
// floppy interrupt request
|
||||
data |= !m_fdc->intrq_r() << 5;
|
||||
|
||||
// ring indicator
|
||||
data |= m_rs232->ri_r() << 6;
|
||||
|
||||
// monochrome monitor detect, DMA sound active
|
||||
data |= (m_monochrome ^ m_dmasnd_active) << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
static MC68901_INTERFACE( atariste_mfp_intf )
|
||||
{
|
||||
Y1, /* timer clock */
|
||||
0, /* receive clock */
|
||||
0, /* transmit clock */
|
||||
DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */
|
||||
DEVCB_DRIVER_MEMBER(ste_state, mfp_gpio_r), /* GPIO read */
|
||||
DEVCB_NULL, /* GPIO write */
|
||||
DEVCB_NULL, /* TAO */
|
||||
DEVCB_NULL, /* TBO */
|
||||
@ -2033,50 +1939,8 @@ static MC68901_INTERFACE( atariste_mfp_intf )
|
||||
// MC68901_INTERFACE( stbook_mfp_intf )
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( stbook_state::mfp_gpio_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 Centronics BUSY
|
||||
1 RS232 DCD
|
||||
2 RS232 CTS
|
||||
3 Blitter done
|
||||
4 Keyboard/MIDI
|
||||
5 FDC
|
||||
6 RS232 RI
|
||||
7 POWER ALARMS
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
// centronics busy
|
||||
data |= m_centronics->busy_r();
|
||||
|
||||
// data carrier detect
|
||||
data |= m_rs232->dcd_r() << 1;
|
||||
|
||||
// clear to send
|
||||
data |= m_rs232->cts_r() << 2;
|
||||
|
||||
// blitter done
|
||||
data |= m_blitter_done << 3;
|
||||
|
||||
// keyboard/MIDI interrupt
|
||||
data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
|
||||
|
||||
// floppy data request
|
||||
data |= !m_fdc->intrq_r() << 5;
|
||||
|
||||
// ring indicator
|
||||
data |= m_rs232->ri_r() << 6;
|
||||
|
||||
// TODO power alarms
|
||||
|
||||
return data;
|
||||
}
|
||||
// TODO power alarms (i7_w)
|
||||
|
||||
static MC68901_INTERFACE( stbook_mfp_intf )
|
||||
{
|
||||
@ -2084,7 +1948,6 @@ static MC68901_INTERFACE( stbook_mfp_intf )
|
||||
0, /* receive clock */
|
||||
0, /* transmit clock */
|
||||
DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */
|
||||
DEVCB_DRIVER_MEMBER(stbook_state, mfp_gpio_r), /* GPIO read */
|
||||
DEVCB_NULL, /* GPIO write */
|
||||
DEVCB_NULL, /* TAO */
|
||||
DEVCB_NULL, /* TBO */
|
||||
@ -2265,6 +2128,11 @@ void st_state::machine_start()
|
||||
|
||||
m_fdc->setup_drq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_drq_w), this));
|
||||
m_fdc->setup_intrq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_intrq_w), this));
|
||||
|
||||
/// TODO: get callbacks to trigger these.
|
||||
m_mfp->i0_w(1);
|
||||
m_mfp->i5_w(1);
|
||||
m_mfp->i7_w(1);
|
||||
}
|
||||
|
||||
|
||||
@ -2310,6 +2178,11 @@ void ste_state::machine_start()
|
||||
|
||||
/* register for state saving */
|
||||
state_save();
|
||||
|
||||
/// TODO: get callbacks to trigger these.
|
||||
m_mfp->i0_w(1);
|
||||
m_mfp->i5_w(1);
|
||||
m_mfp->i7_w(1);
|
||||
}
|
||||
|
||||
|
||||
@ -2346,6 +2219,10 @@ void stbook_state::machine_start()
|
||||
|
||||
/* register for state saving */
|
||||
ste_state::state_save();
|
||||
|
||||
/// TODO: get callbacks to trigger these.
|
||||
m_mfp->i0_w(1);
|
||||
m_mfp->i5_w(1);
|
||||
}
|
||||
|
||||
FLOPPY_FORMATS_MEMBER( st_state::floppy_formats )
|
||||
|
@ -1212,27 +1212,14 @@ WRITE_LINE_MEMBER(x68k_state::x68k_fm_irq)
|
||||
{
|
||||
if(state == CLEAR_LINE)
|
||||
{
|
||||
m_mfp.gpio |= 0x08;
|
||||
m_mfpdev->i3_w(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_mfp.gpio &= ~0x08;
|
||||
m_mfpdev->i3_w(0);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER( x68k_state::mfp_gpio_r )
|
||||
{
|
||||
UINT8 data = m_mfp.gpio;
|
||||
|
||||
data &= ~(m_crtc.hblank << 7);
|
||||
data &= ~(m_crtc.vblank << 4);
|
||||
data |= 0x23; // GPIP5 is unused, always 1
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(x68k_state::x68030_adpcm_w)
|
||||
{
|
||||
switch(offset)
|
||||
@ -1428,7 +1415,6 @@ static MC68901_INTERFACE( mfp_interface )
|
||||
0, /* receive clock */
|
||||
0, /* transmit clock */
|
||||
DEVCB_DRIVER_LINE_MEMBER(x68k_state,mfp_irq_callback), /* interrupt */
|
||||
DEVCB_DRIVER_MEMBER(x68k_state, mfp_gpio_r), /* GPIO read */
|
||||
DEVCB_NULL, /* GPIO write */
|
||||
DEVCB_NULL, /* TAO */
|
||||
DEVCB_DRIVER_LINE_MEMBER(x68k_state, mfp_tbo_w), /* TBO */
|
||||
@ -1755,7 +1741,15 @@ MACHINE_RESET_MEMBER(x68k_state,x68000)
|
||||
// start HBlank timer
|
||||
m_scanline_timer->adjust(machine().primary_screen->scan_period(), 1);
|
||||
|
||||
m_mfp.gpio = 0xfb;
|
||||
/// TODO: get callbacks to trigger these
|
||||
m_mfpdev->i0_w(1); // alarm
|
||||
m_mfpdev->i1_w(1); // expon
|
||||
m_mfpdev->i2_w(0); // pow sw
|
||||
m_mfpdev->i3_w(1); // fmirq
|
||||
m_mfpdev->i4_w(1); // v-disp
|
||||
m_mfpdev->i5_w(1); // unused (always set)
|
||||
m_mfpdev->i6_w(1); // cirq
|
||||
m_mfpdev->i7_w(1); // h-sync
|
||||
|
||||
// reset output values
|
||||
output_set_value("key_led_kana",1);
|
||||
|
@ -299,7 +299,6 @@ public:
|
||||
int m_shifter_vblank_start;
|
||||
|
||||
/* blitter state */
|
||||
int m_blitter_done;
|
||||
UINT16 m_blitter_halftone[16];
|
||||
INT16 m_blitter_src_inc_x;
|
||||
INT16 m_blitter_src_inc_y;
|
||||
|
@ -66,7 +66,6 @@ public:
|
||||
optional_shared_ptr<UINT32> m_tvram32;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( mfp_tbo_w );
|
||||
DECLARE_READ8_MEMBER( mfp_gpio_r );
|
||||
|
||||
void fdc_irq(bool state);
|
||||
void fdc_drq(bool state);
|
||||
@ -109,10 +108,6 @@ public:
|
||||
int clock; // ADPCM clock speed
|
||||
} m_adpcm;
|
||||
struct
|
||||
{
|
||||
unsigned char gpio;
|
||||
} m_mfp; // MC68901 Multifunction Peripheral (4MHz)
|
||||
struct
|
||||
{
|
||||
unsigned short reg[24]; // registers
|
||||
int operation; // operation port (0xe80481)
|
||||
|
@ -720,8 +720,7 @@ void st_state::blitter_tick()
|
||||
|
||||
m_blitter_ctrl &= 0x7f;
|
||||
|
||||
m_blitter_done = 0;
|
||||
m_mfp->i3_w(m_blitter_done);
|
||||
m_mfp->i3_w(0);
|
||||
}
|
||||
|
||||
|
||||
@ -1047,8 +1046,7 @@ WRITE16_MEMBER( st_state::blitter_ctrl_w )
|
||||
{
|
||||
if ((data >> 8) & ATARIST_BLITTER_CTRL_BUSY)
|
||||
{
|
||||
m_blitter_done = 1;
|
||||
m_mfp->i3_w(m_blitter_done);
|
||||
m_mfp->i3_w(1);
|
||||
|
||||
int nops = BLITTER_NOPS[m_blitter_op][m_blitter_hop]; // each NOP takes 4 cycles
|
||||
timer_set(attotime::from_hz((Y2/4)/(4*nops)), TIMER_BLITTER_TICK);
|
||||
|
@ -260,7 +260,6 @@ TIMER_CALLBACK_MEMBER(x68k_state::x68k_hsync)
|
||||
|
||||
TIMER_CALLBACK_MEMBER(x68k_state::x68k_crtc_raster_end)
|
||||
{
|
||||
m_mfp.gpio |= 0x40;
|
||||
m_mfpdev->i6_w(1);
|
||||
}
|
||||
|
||||
@ -272,7 +271,6 @@ TIMER_CALLBACK_MEMBER(x68k_state::x68k_crtc_raster_irq)
|
||||
|
||||
if(scan <= m_crtc.vtotal)
|
||||
{
|
||||
m_mfp.gpio &= ~0x40; // GPIP6
|
||||
m_mfpdev->i6_w(0);
|
||||
machine().primary_screen->update_partial(scan);
|
||||
irq_time = machine().primary_screen->time_until_pos(scan,m_crtc.hbegin);
|
||||
|
Loading…
Reference in New Issue
Block a user