summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/awacs.h
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-03-21 14:06:07 +0100
committer Olivier Galibert <galibert@pobox.com>2021-03-24 11:03:56 +0100
commit38bfe838e22d91ebe6627ba8e4cc1932eb6b325f (patch)
tree328d9084d121e3557ed3314d650360b7f02ccfaa /src/devices/sound/awacs.h
parentf2fa9bd3b1fd25fdb176bf2572d95c5d480ef7ed (diff)
awacs: Rewrite
Diffstat (limited to 'src/devices/sound/awacs.h')
-rw-r--r--src/devices/sound/awacs.h39
1 files changed, 27 insertions, 12 deletions
diff --git a/src/devices/sound/awacs.h b/src/devices/sound/awacs.h
index 0840d21d0d9..a1c17f1aa10 100644
--- a/src/devices/sound/awacs.h
+++ b/src/devices/sound/awacs.h
@@ -25,31 +25,46 @@ public:
// construction/destruction
awacs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ auto irq_out_cb() { return m_irq_out_cb.bind(); }
+ auto irq_in_cb() { return m_irq_in_cb.bind(); }
+
+ auto dma_output() { return m_output_cb.bind(); }
+ auto dma_input() { return m_input_cb.bind(); }
+
+ auto port_input() { return m_input_port_cb.bind(); }
+ auto port_output() { return m_output_port_cb.bind(); }
+
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
- void set_dma_base(address_space &space, int offset0, int offset1);
-
protected:
+ enum {
+ ACTIVE_OUT = 0x01,
+ ACTIVE_IN = 0x02
+ };
+
+ static const u8 divider[4];
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
- sound_stream *m_stream;
-
- // inline data
- uint8_t m_regs[0x100];
+ devcb_write_line m_irq_out_cb, m_irq_in_cb;
+ devcb_read32 m_output_cb;
+ devcb_write32 m_input_cb;
+ devcb_read8 m_input_port_cb;
+ devcb_write8 m_output_port_cb;
- int m_play_ptr, m_buffer_size, m_buffer_num;
- bool m_playback_enable;
+ sound_stream *m_stream;
- address_space *m_dma_space;
- int m_dma_offset_0, m_dma_offset_1;
+ attotime m_last_sample;
+ u8 m_ctrl0, m_ctrl1, m_codec0, m_codec1, m_codec2, m_out_irq, m_in_irq, m_active;
+ u16 m_ext_address, m_ext_data, m_buffer_size, m_phase;
+ bool m_extend, m_ext_command, m_input_buffer, m_output_buffer;
- emu_timer *m_timer;
+ void update_irq();
};