Previous 199869 Revisions Next

r29372 Sunday 6th April, 2014 at 17:24:42 UTC by O. Galibert
puzzlet: Make coins/start work again [O. Galibert]
[src/emu/cpu/h8]h8_sci.c
[src/mame/drivers]metro.c

trunk/src/emu/cpu/h8/h8_sci.c
r29371r29372
125125
126126   if(tx_state == ST_IDLE && !(ssr & SSR_TDRE))
127127      tx_start();
128
129   if((scr & SCR_RE) && rx_state == ST_IDLE && !(ssr & (SSR_ORER|SSR_PER|SSR_FER)))
130      rx_start();
128131}
129132
130133READ8_MEMBER(h8_sci_device::ssr_r)
r29371r29372
261264   ext_clock_counter = 0;
262265   rx_value = true;
263266   clk_cb(clock_value);
267   tx_cb(1);
264268   cur_sync_time = attotime::never;
265269}
266270
r29371r29372
558562      tx_state = ST_IDLE;
559563      tx_bit = 0;
560564      clock_stop(CLK_TX);
565      tx_cb(1);
561566      ssr |= SSR_TEND;
562567      if(scr & SCR_TEIE)
563568         intc->internal_interrupt(tei_int);
trunk/src/mame/drivers/metro.c
r29371r29372
16991699                                Puzzlet
17001700***************************************************************************/
17011701
1702#define MCFG_PUZZLET_IO_ADD(_tag) \
1703   MCFG_DEVICE_ADD(_tag, PUZZLET_IO, 0)
1704
1705#define MCFG_PUZZLET_IO_DATA_CALLBACK(_devcb) \
1706   devcb = &puzzlet_io_device::set_data_cb(*device, DEVCB2_##_devcb);
1707
1708class puzzlet_io_device : public device_t {
1709public:
1710   puzzlet_io_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
1711
1712   DECLARE_WRITE_LINE_MEMBER( ce_w );
1713   DECLARE_WRITE_LINE_MEMBER( clk_w );
1714
1715   template<class _Object> static devcb2_base &set_data_cb(device_t &device, _Object object) { return downcast<puzzlet_io_device &>(device).data_cb.set_callback(object); }
1716
1717protected:
1718   virtual void device_start();
1719   virtual void device_reset();
1720
1721private:
1722   devcb2_write_line data_cb;
1723   required_ioport port;
1724   int ce, clk;
1725   int cur_bit;
1726   UINT8 value;
1727};
1728
1729const device_type PUZZLET_IO = &device_creator<puzzlet_io_device>;
1730
1731
1732puzzlet_io_device::puzzlet_io_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1733   : device_t(mconfig, PUZZLET_IO, "Puzzlet Coin/Start I/O", tag, owner, clock, "puzzlet_io", __FILE__),
1734     data_cb(*this),
1735     port(*this, ":IN0")
1736{
1737}
1738
1739void puzzlet_io_device::device_start()
1740{
1741   data_cb.resolve_safe();
1742   save_item(NAME(ce));
1743   save_item(NAME(clk));
1744   save_item(NAME(cur_bit));
1745   save_item(NAME(value));
1746   ce = 1;
1747   clk = 1;
1748}
1749
1750void puzzlet_io_device::device_reset()
1751{
1752   cur_bit = 0;
1753   value = 0xff;
1754}
1755
1756WRITE_LINE_MEMBER(puzzlet_io_device::ce_w)
1757{
1758   if(ce && !state) {
1759      value = port->read();
1760      cur_bit = 0;
1761   } else if(!ce && state)
1762      data_cb(1);
1763
1764   ce = state;
1765}
1766
1767WRITE_LINE_MEMBER(puzzlet_io_device::clk_w)
1768{
1769   if(clk && !state) {
1770      if(cur_bit == 8)
1771         data_cb(1);
1772      else {
1773         data_cb((value >> cur_bit) & 1);
1774         cur_bit++;
1775      }
1776   }
1777   clk = state;
1778}
1779
1780
17021781WRITE16_MEMBER(metro_state::puzzlet_irq_enable_w)
17031782{
17041783   if (ACCESSING_BITS_0_7)
r29371r29372
45304609   MCFG_MACHINE_START_OVERRIDE(metro_state,metro)
45314610   MCFG_MACHINE_RESET_OVERRIDE(metro_state,metro)
45324611
4612   /* Coins/service */
4613   MCFG_PUZZLET_IO_ADD("coins")
4614   MCFG_PUZZLET_IO_DATA_CALLBACK(DEVWRITELINE("maincpu:sci1", h8_sci_device, rx_w))
4615   MCFG_DEVICE_MODIFY("maincpu:sci1")
4616   MCFG_H8_SCI_TX_CALLBACK(DEVWRITELINE(":coins", puzzlet_io_device, ce_w))
4617   MCFG_H8_SCI_CLK_CALLBACK(DEVWRITELINE(":coins", puzzlet_io_device, clk_w))
4618
45334619   /* video hardware */
45344620   MCFG_SCREEN_ADD("screen", RASTER)
45354621   MCFG_SCREEN_REFRESH_RATE(58)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team