diff options
Diffstat (limited to 'src/devices/sound/ics2115.h')
-rw-r--r-- | src/devices/sound/ics2115.h | 102 |
1 files changed, 50 insertions, 52 deletions
diff --git a/src/devices/sound/ics2115.h b/src/devices/sound/ics2115.h index e9dc99a368f..57afef9f0c1 100644 --- a/src/devices/sound/ics2115.h +++ b/src/devices/sound/ics2115.h @@ -16,79 +16,77 @@ class ics2115_device : public device_t, public device_sound_interface { public: // construction/destruction - ics2115_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + ics2115_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); template <class Object> devcb_base &set_irq_callback(Object &&cb) { return m_irq_cb.set_callback(std::forward<Object>(cb)); } auto irq() { return m_irq_cb.bind(); } - u8 read(offs_t offset); - void write(offs_t offset, u8 data); - - // 16-bit read / write handlers (when /IOCS16 is low) - u16 word_r(offs_t offset, u16 mem_mask); - void word_w(offs_t offset, u16 data, u16 mem_mask); + DECLARE_READ8_MEMBER(read); + DECLARE_WRITE8_MEMBER(write); + //uint8_t read(offs_t offset); + //void write(offs_t offset, uint8_t data); TIMER_CALLBACK_MEMBER(timer_cb_0); TIMER_CALLBACK_MEMBER(timer_cb_1); protected: - static constexpr u16 revision = 0x1; + static constexpr uint16_t revision = 0x1; struct ics2115_voice { struct { - s32 left; - u32 acc, start, end; - u16 fc; - u8 ctl, saddr; + int32_t left; + uint32_t acc, start, end; + uint16_t fc; + uint8_t ctl, saddr; } osc; struct { - s32 left; - u32 add; - u32 start, end; - u32 acc; - u16 regacc; - u8 incr; - u8 pan, mode; + int32_t left; + uint32_t add; + uint32_t start, end; + uint32_t acc; + uint16_t regacc; + uint8_t incr; + uint8_t pan, mode; } vol; union { struct { - u8 ulaw : 1; - u8 stop : 1; //stops wave + vol envelope - u8 eightbit : 1; - u8 loop : 1; - u8 loop_bidir : 1; - u8 irq : 1; - u8 invert : 1; - u8 irq_pending: 1; + uint8_t ulaw : 1; + uint8_t stop : 1; //stops wave + vol envelope + uint8_t eightbit : 1; + uint8_t loop : 1; + uint8_t loop_bidir : 1; + uint8_t irq : 1; + uint8_t invert : 1; + uint8_t irq_pending: 1; //IRQ on variable? } bitflags; - u8 value; + uint8_t value; } osc_conf; union { struct { - u8 done : 1; //indicates ramp has stopped - u8 stop : 1; //stops the ramp - u8 rollover : 1; //rollover (TODO) - u8 loop : 1; - u8 loop_bidir : 1; - u8 irq : 1; //enable IRQ generation - u8 invert : 1; //invert direction - u8 irq_pending: 1; //(read only) IRQ pending + uint8_t done : 1; //indicates ramp has stopped + uint8_t stop : 1; //stops the ramp + uint8_t rollover : 1; //rollover (TODO) + uint8_t loop : 1; + uint8_t loop_bidir : 1; + uint8_t irq : 1; //enable IRQ generation + uint8_t invert : 1; //invert direction + uint8_t irq_pending: 1; //(read only) IRQ pending //noenvelope == (done | disable) } bitflags; - u8 value; + uint8_t value; } vol_ctrl; //Possibly redundant state. => improvements of wavetable logic //may lead to its elimination. union { struct { - u8 on : 1; - u8 ramp : 7; // 100 0000 = 0x40 maximum + uint8_t on : 1; + uint8_t ramp : 7; // 100 0000 = 0x40 maximum } bitflags; - u8 value; + uint8_t value; } state; bool playing(); @@ -105,8 +103,8 @@ protected: virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; //internal register helper functions - u16 reg_read(); - void reg_write(u16 data, u16 mem_mask); + uint16_t reg_read(); + void reg_write(uint8_t data, bool msb); void recalc_timer(int timer); void keyon(); void recalc_irq(); @@ -118,29 +116,29 @@ protected: sound_stream *m_stream; // internal state - required_region_ptr<u8> m_rom; + required_region_ptr<uint8_t> m_rom; devcb_write_line m_irq_cb; - s16 m_ulaw[256]; - u16 m_volume[4096]; + int16_t m_ulaw[256]; + uint16_t m_volume[4096]; static const int volume_bits = 15; ics2115_voice m_voice[32]; struct { - u8 scale, preset; + uint8_t scale, preset; emu_timer *timer; - u64 period; /* in nsec */ + uint64_t period; /* in nsec */ } m_timer[2]; - u8 m_active_osc; - u8 m_osc_select; - u8 m_reg_select; - u8 m_irq_enabled, m_irq_pending; + uint8_t m_active_osc; + uint8_t m_osc_select; + uint8_t m_reg_select; + uint8_t m_irq_enabled, m_irq_pending; bool m_irq_on; //Unknown variable, seems to be effected by 0x12. Further investigation //Required. - u8 m_vmode; + uint8_t m_vmode; }; |