diff options
Diffstat (limited to 'src/mame/machine/gaelco3d.h')
-rw-r--r-- | src/mame/machine/gaelco3d.h | 73 |
1 files changed, 36 insertions, 37 deletions
diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h index 50e9fafdaed..85ba9283a3e 100644 --- a/src/mame/machine/gaelco3d.h +++ b/src/mame/machine/gaelco3d.h @@ -5,6 +5,10 @@ Gaelco 3D serial hardware ***************************************************************************/ +#ifndef MAME_MACHINE_GAELCO3D_H +#define MAME_MACHINE_GAELCO3D_H + +#pragma once /*************************************************************************** @@ -14,20 +18,6 @@ #define MCFG_GAELCO_SERIAL_IRQ_HANDLER(_devcb) \ devcb = &gaelco_serial_device::set_irq_handler(*device, DEVCB_##_devcb); -/* external status bits */ -#define GAELCOSER_STATUS_READY 0x01 -#define GAELCOSER_STATUS_RTS 0x02 - -/* only RTS currently understood ! */ -//#define GAELCOSER_STATUS_DTR 0x04 - -#define GAELCOSER_EXT_STATUS_MASK 0x03 - -/* internal bits follow ... */ -#define GAELCOSER_STATUS_IRQ_ENABLE 0x10 -#define GAELCOSER_STATUS_RESET 0x20 -#define GAELCOSER_STATUS_SEND 0x40 - /*************************************************************************** @@ -36,34 +26,14 @@ /* ----- device interface ----- */ -struct buf_t -{ - volatile uint8_t data; - volatile uint8_t stat; - volatile int cnt; - volatile int data_cnt; -}; - -struct shmem_t -{ - buf_t buf[2]; -}; - -struct osd_shared_mem -{ - char *fn; - size_t size; - void *ptr; - int creator; -}; - class gaelco_serial_device : public device_t { public: + static constexpr unsigned EXT_STATUS_MASK = 0x03; + gaelco_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - ~gaelco_serial_device() {} - template<class _Object> static devcb_base &set_irq_handler(device_t &device, _Object object) { return downcast<gaelco_serial_device &>(device).m_irq_handler.set_callback(object); } + template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<gaelco_serial_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); } DECLARE_READ8_MEMBER( status_r); DECLARE_WRITE8_MEMBER( data_w); @@ -91,6 +61,33 @@ protected: virtual void device_reset() override; private: + struct buf_t + { + volatile uint8_t data; + volatile uint8_t stat; + volatile int cnt; + volatile int data_cnt; + }; + + struct shmem_t + { + buf_t buf[2]; + }; + + struct osd_shared_mem + { + char *fn; + size_t size; + void *ptr; + int creator; + }; + + static osd_shared_mem *osd_sharedmem_alloc(const char *path, int create, size_t size); + static void osd_sharedmem_free(osd_shared_mem *os_shmem); + static void *osd_sharedmem_ptr(osd_shared_mem *os_shmem); + + static void buf_reset(buf_t *buf); + // internal state devcb_write_line m_irq_handler; @@ -114,3 +111,5 @@ private: }; extern const device_type GAELCO_SERIAL; + +#endif // MAME_MACHINE_GAELCO3D_H |