Previous 199869 Revisions Next

r26798 Sunday 29th December, 2013 at 00:14:05 UTC by smf
Removed MC68901 polling for gpio bits. [smf]
[src/emu/machine]mc68901.c mc68901.h
[src/mess/drivers]atarist.c x68k.c
[src/mess/includes]atarist.h x68k.h
[src/mess/video]atarist.c x68k.c

trunk/src/emu/machine/mc68901.c
r26797r26798
293293
294294inline void mc68901_device::gpio_input(int bit, int state)
295295{
296   if (state != BIT(m_gpip, bit))
296   if (state != BIT(m_gpio_input, bit))
297297   {
298298      if (state == BIT(m_aer, bit))
299299      {
r26797r26798
309309
310310
311311      if (state)
312         m_gpip &= ~(1 << bit);
312         m_gpio_input |= (1 << bit);
313313      else
314         m_gpip |= (1 << bit);
314         m_gpio_input &= ~(1 << bit);
315315   }
316316}
317317
r26797r26798
328328mc68901_device::mc68901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
329329   : device_t(mconfig, MC68901, "Motorola MC68901", tag, owner, clock, "mc68901", __FILE__),
330330      device_serial_interface(mconfig, *this),
331      m_gpip(0),
332      m_tsr(TSR_BUFFER_EMPTY)
331      m_gpio_input(0)
333332{
334333}
335334
r26797r26798
364363   m_start_bit_hack_for_external_clocks = true;
365364
366365   /* resolve callbacks */
367   m_in_gpio_func.resolve(m_in_gpio_cb, *this);
368366   m_out_gpio_func.resolve(m_out_gpio_cb, *this);
369367   m_out_so_func.resolve(m_out_so_cb, *this);
370368   m_out_tao_func.resolve(m_out_tao_cb, *this);
r26797r26798
554552{
555553   switch (offset)
556554   {
557   case REGISTER_GPIP:
558      m_gpip = m_in_gpio_func(0);
559      return m_gpip;
555   case REGISTER_GPIP:  return (m_gpio_input & ~m_ddr) | (m_gpip & m_ddr);
560556
561557   case REGISTER_AER:   return m_aer;
562558   case REGISTER_DDR:   return m_ddr;
trunk/src/emu/machine/mc68901.h
r26797r26798
7979
8080   devcb_write_line        m_out_irq_cb;
8181
82   devcb_read8             m_in_gpio_cb;
8382   devcb_write8            m_out_gpio_cb;
8483
8584   devcb_write_line        m_out_tao_cb;
r26797r26798
237236   static const int GPIO_TIMER[];
238237   static const int PRESCALER[];
239238
240   devcb_resolved_read8        m_in_gpio_func;
241239   devcb_resolved_write8       m_out_gpio_func;
242240   devcb_resolved_write_line   m_out_so_func;
243241   devcb_resolved_write_line   m_out_tao_func;
r26797r26798
272270   int m_udr_written;
273271   UINT8 m_rcv;
274272   int m_rcv_pending;
273   UINT8 m_gpio_input;
275274
276275   /* counter timer state */
277276   UINT8 m_tmc[4];     /* timer main counters */
trunk/src/mess/drivers/x68k.c
r26797r26798
12121212{
12131213   if(state == CLEAR_LINE)
12141214   {
1215      m_mfp.gpio |= 0x08;
12161215      m_mfpdev->i3_w(1);
12171216   }
12181217   else
12191218   {
1220      m_mfp.gpio &= ~0x08;
12211219      m_mfpdev->i3_w(0);
12221220   }
12231221}
12241222
1225READ8_MEMBER( x68k_state::mfp_gpio_r )
1226{
1227   UINT8 data = m_mfp.gpio;
1228
1229   data &= ~(m_crtc.hblank << 7);
1230   data &= ~(m_crtc.vblank << 4);
1231   data |= 0x23;  // GPIP5 is unused, always 1
1232
1233   return data;
1234}
1235
12361223WRITE8_MEMBER(x68k_state::x68030_adpcm_w)
12371224{
12381225   switch(offset)
r26797r26798
14281415   0,                                                  /* receive clock */
14291416   0,                                                  /* transmit clock */
14301417   DEVCB_DRIVER_LINE_MEMBER(x68k_state,mfp_irq_callback),                      /* interrupt */
1431   DEVCB_DRIVER_MEMBER(x68k_state, mfp_gpio_r),        /* GPIO read */
14321418   DEVCB_NULL,                                         /* GPIO write */
14331419   DEVCB_NULL,                                         /* TAO */
14341420   DEVCB_DRIVER_LINE_MEMBER(x68k_state, mfp_tbo_w),    /* TBO */
r26797r26798
17551741   // start HBlank timer
17561742   m_scanline_timer->adjust(machine().primary_screen->scan_period(), 1);
17571743
1758   m_mfp.gpio = 0xfb;
1744   /// TODO: get callbacks to trigger these
1745   m_mfpdev->i0_w(1); // alarm
1746   m_mfpdev->i1_w(1); // expon
1747   m_mfpdev->i2_w(0); // pow sw
1748   m_mfpdev->i3_w(1); // fmirq
1749   m_mfpdev->i4_w(1); // v-disp
1750   m_mfpdev->i5_w(1); // unused (always set)
1751   m_mfpdev->i6_w(1); // cirq
1752   m_mfpdev->i7_w(1); // h-sync
17591753
17601754   // reset output values
17611755   output_set_value("key_led_kana",1);
trunk/src/mess/drivers/atarist.c
r26797r26798
18961896//  MC68901_INTERFACE( mfp_intf )
18971897//-------------------------------------------------
18981898
1899READ8_MEMBER( st_state::mfp_gpio_r )
1900{
1901   /*
1902
1903       bit     description
1904
1905       0       Centronics BUSY
1906       1       RS232 DCD
1907       2       RS232 CTS
1908       3       Blitter done
1909       4       Keyboard/MIDI
1910       5       FDC
1911       6       RS232 RI
1912       7       Monochrome monitor detect
1913
1914   */
1915
1916   UINT8 data = 0;
1917
1918   // centronics busy
1919   data |= m_centronics->busy_r();
1920
1921   // data carrier detect
1922   data |= m_rs232->dcd_r() << 1;
1923
1924   // clear to send
1925   data |= m_rs232->cts_r() << 2;
1926
1927   // blitter done
1928   data |= m_blitter_done << 3;
1929
1930   // keyboard/MIDI interrupt
1931   data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
1932
1933   // floppy interrupt request
1934   data |= !m_fdc->intrq_r() << 5;
1935
1936   // ring indicator
1937   data |= m_rs232->ri_r() << 6;
1938
1939   // monochrome monitor detect
1940   data |= m_monochrome << 7;
1941
1942   return data;
1943}
1944
19451899WRITE_LINE_MEMBER( st_state::mfp_tdo_w )
19461900{
19471901   m_mfp->clock_w(state);
r26797r26798
19531907   0,                                                  /* receive clock */
19541908   0,                                                  /* transmit clock */
19551909   DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6),       /* interrupt */
1956   DEVCB_DRIVER_MEMBER(st_state, mfp_gpio_r),          /* GPIO read */
19571910   DEVCB_NULL,                                         /* GPIO write */
19581911   DEVCB_NULL,                                         /* TAO */
19591912   DEVCB_NULL,                                         /* TBO */
r26797r26798
19671920//  MC68901_INTERFACE( atariste_mfp_intf )
19681921//-------------------------------------------------
19691922
1970READ8_MEMBER( ste_state::mfp_gpio_r )
1971{
1972   /*
1973
1974       bit     description
1975
1976       0       Centronics BUSY
1977       1       RS232 DCD
1978       2       RS232 CTS
1979       3       Blitter done
1980       4       Keyboard/MIDI
1981       5       FDC
1982       6       RS232 RI
1983       7       Monochrome monitor detect / DMA sound active
1984
1985   */
1986
1987   UINT8 data = 0;
1988
1989   // centronics busy
1990   data |= m_centronics->busy_r();
1991
1992   // data carrier detect
1993   data |= m_rs232->dcd_r() << 1;
1994
1995   // clear to send
1996   data |= m_rs232->cts_r() << 2;
1997
1998   // blitter done
1999   data |= m_blitter_done << 3;
2000
2001   // keyboard/MIDI interrupt
2002   data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
2003
2004   // floppy interrupt request
2005   data |= !m_fdc->intrq_r() << 5;
2006
2007   // ring indicator
2008   data |= m_rs232->ri_r() << 6;
2009
2010   // monochrome monitor detect, DMA sound active
2011   data |= (m_monochrome ^ m_dmasnd_active) << 7;
2012
2013   return data;
2014}
2015
20161923static MC68901_INTERFACE( atariste_mfp_intf )
20171924{
20181925   Y1,                                                 /* timer clock */
20191926   0,                                                  /* receive clock */
20201927   0,                                                  /* transmit clock */
20211928   DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6),       /* interrupt */
2022   DEVCB_DRIVER_MEMBER(ste_state, mfp_gpio_r),         /* GPIO read */
20231929   DEVCB_NULL,                                         /* GPIO write */
20241930   DEVCB_NULL,                                         /* TAO */
20251931   DEVCB_NULL,                                         /* TBO */
r26797r26798
20331939//  MC68901_INTERFACE( stbook_mfp_intf )
20341940//-------------------------------------------------
20351941
2036READ8_MEMBER( stbook_state::mfp_gpio_r )
2037{
2038   /*
20391942
2040       bit     description
1943// TODO power alarms (i7_w)
20411944
2042       0       Centronics BUSY
2043       1       RS232 DCD
2044       2       RS232 CTS
2045       3       Blitter done
2046       4       Keyboard/MIDI
2047       5       FDC
2048       6       RS232 RI
2049       7       POWER ALARMS
2050
2051   */
2052
2053   UINT8 data = 0;
2054
2055   // centronics busy
2056   data |= m_centronics->busy_r();
2057
2058   // data carrier detect
2059   data |= m_rs232->dcd_r() << 1;
2060
2061   // clear to send
2062   data |= m_rs232->cts_r() << 2;
2063
2064   // blitter done
2065   data |= m_blitter_done << 3;
2066
2067   // keyboard/MIDI interrupt
2068   data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4;
2069
2070   // floppy data request
2071   data |= !m_fdc->intrq_r() << 5;
2072
2073   // ring indicator
2074   data |= m_rs232->ri_r() << 6;
2075
2076   // TODO power alarms
2077
2078   return data;
2079}
2080
20811945static MC68901_INTERFACE( stbook_mfp_intf )
20821946{
20831947   Y1,                                                 /* timer clock */
20841948   0,                                                  /* receive clock */
20851949   0,                                                  /* transmit clock */
20861950   DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6),       /* interrupt */
2087   DEVCB_DRIVER_MEMBER(stbook_state, mfp_gpio_r),      /* GPIO read */
20881951   DEVCB_NULL,                                         /* GPIO write */
20891952   DEVCB_NULL,                                         /* TAO */
20901953   DEVCB_NULL,                                         /* TBO */
r26797r26798
22652128
22662129   m_fdc->setup_drq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_drq_w), this));
22672130   m_fdc->setup_intrq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_intrq_w), this));
2131
2132   /// TODO: get callbacks to trigger these.
2133   m_mfp->i0_w(1);
2134   m_mfp->i5_w(1);
2135   m_mfp->i7_w(1);
22682136}
22692137
22702138
r26797r26798
23102178
23112179   /* register for state saving */
23122180   state_save();
2181
2182   /// TODO: get callbacks to trigger these.
2183   m_mfp->i0_w(1);
2184   m_mfp->i5_w(1);
2185   m_mfp->i7_w(1);
23132186}
23142187
23152188
r26797r26798
23462219
23472220   /* register for state saving */
23482221   ste_state::state_save();
2222
2223   /// TODO: get callbacks to trigger these.
2224   m_mfp->i0_w(1);
2225   m_mfp->i5_w(1);
23492226}
23502227
23512228FLOPPY_FORMATS_MEMBER( st_state::floppy_formats )
trunk/src/mess/video/x68k.c
r26797r26798
260260
261261TIMER_CALLBACK_MEMBER(x68k_state::x68k_crtc_raster_end)
262262{
263   m_mfp.gpio |= 0x40;
264263   m_mfpdev->i6_w(1);
265264}
266265
r26797r26798
272271
273272   if(scan <= m_crtc.vtotal)
274273   {
275      m_mfp.gpio &= ~0x40;  // GPIP6
276274      m_mfpdev->i6_w(0);
277275      machine().primary_screen->update_partial(scan);
278276      irq_time = machine().primary_screen->time_until_pos(scan,m_crtc.hbegin);
trunk/src/mess/video/atarist.c
r26797r26798
720720
721721   m_blitter_ctrl &= 0x7f;
722722
723   m_blitter_done = 0;
724   m_mfp->i3_w(m_blitter_done);
723   m_mfp->i3_w(0);
725724}
726725
727726
r26797r26798
10471046      {
10481047         if ((data >> 8) & ATARIST_BLITTER_CTRL_BUSY)
10491048         {
1050            m_blitter_done = 1;
1051            m_mfp->i3_w(m_blitter_done);
1049            m_mfp->i3_w(1);
10521050
10531051            int nops = BLITTER_NOPS[m_blitter_op][m_blitter_hop]; // each NOP takes 4 cycles
10541052            timer_set(attotime::from_hz((Y2/4)/(4*nops)), TIMER_BLITTER_TICK);
trunk/src/mess/includes/atarist.h
r26797r26798
299299   int m_shifter_vblank_start;
300300
301301   /* blitter state */
302   int m_blitter_done;
303302   UINT16 m_blitter_halftone[16];
304303   INT16 m_blitter_src_inc_x;
305304   INT16 m_blitter_src_inc_y;
trunk/src/mess/includes/x68k.h
r26797r26798
6666   optional_shared_ptr<UINT32> m_tvram32;
6767
6868   DECLARE_WRITE_LINE_MEMBER( mfp_tbo_w );
69   DECLARE_READ8_MEMBER( mfp_gpio_r );
7069
7170   void fdc_irq(bool state);
7271   void fdc_drq(bool state);
r26797r26798
110109   } m_adpcm;
111110   struct
112111   {
113      unsigned char gpio;
114   } m_mfp;  // MC68901 Multifunction Peripheral (4MHz)
115   struct
116   {
117112      unsigned short reg[24];  // registers
118113      int operation;  // operation port (0xe80481)
119114      int vblank;  // 1 if in VBlank

Previous 199869 Revisions Next


© 1997-2024 The MAME Team