summaryrefslogtreecommitdiffstats
path: root/src/devices/sound/ics2115.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/ics2115.h')
-rw-r--r--src/devices/sound/ics2115.h102
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;
};