summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/ay8910.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/ay8910.h')
-rw-r--r--src/devices/sound/ay8910.h85
1 files changed, 42 insertions, 43 deletions
diff --git a/src/devices/sound/ay8910.h b/src/devices/sound/ay8910.h
index 29a7ae674d4..c1bbf718245 100644
--- a/src/devices/sound/ay8910.h
+++ b/src/devices/sound/ay8910.h
@@ -62,7 +62,7 @@ public:
};
// construction/destruction
- ay8910_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ay8910_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// configuration helpers
void set_flags(int flags) { m_flags = flags; }
@@ -73,24 +73,21 @@ public:
auto port_a_write_callback() { return m_port_a_write_cb.bind(); }
auto port_b_write_callback() { return m_port_b_write_cb.bind(); }
- DECLARE_READ8_MEMBER( data_r );
- DECLARE_WRITE8_MEMBER( address_w );
- DECLARE_WRITE8_MEMBER( data_w );
- u8 read_data() { return ay8910_read_ym(); }
- void write_address(u8 data) { ay8910_write_ym(0, data); }
- void write_data(u8 data) { ay8910_write_ym(1, data); }
+ u8 data_r() { return ay8910_read_ym(); }
+ void address_w(u8 data);
+ void data_w(u8 data);
/* /RES */
- DECLARE_WRITE8_MEMBER( reset_w ) { ay8910_reset_ym(); }
+ void reset_w(u8 data = 0) { ay8910_reset_ym(); }
// use this when BC1 == A0; here, BC1=0 selects 'data' and BC1=1 selects 'latch address'
- DECLARE_WRITE8_MEMBER( data_address_w ) { ay8910_write_ym(~offset & 1, data); } // note that directly connecting BC1 to A0 puts data on 0 and address on 1
+ void data_address_w(offs_t offset, u8 data) { ay8910_write_ym(~offset & 1, data); } // note that directly connecting BC1 to A0 puts data on 0 and address on 1
// use this when BC1 == !A0; here, BC1=0 selects 'latch address' and BC1=1 selects 'data'
- DECLARE_WRITE8_MEMBER( address_data_w ) { ay8910_write_ym(offset & 1, data); }
+ void address_data_w(offs_t offset, u8 data) { ay8910_write_ym(offset & 1, data); }
// bc1=a0, bc2=a1
- DECLARE_WRITE8_MEMBER(write_bc1_bc2);
+ void write_bc1_bc2(offs_t offset, u8 data);
void set_volume(int channel,int volume);
void ay_set_clock(int clock);
@@ -113,13 +110,10 @@ public:
// internal interface for PSG component of YM device
// FIXME: these should be private, but vector06 accesses them directly
- void ay8910_write_ym(int addr, uint8_t data);
- uint8_t ay8910_read_ym();
- void ay8910_reset_ym();
protected:
ay8910_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner,
- uint32_t clock, psg_type_t psg_type, int streams, int ioports);
+ u32 clock, psg_type_t psg_type, int streams, int ioports);
// device-level overrides
virtual void device_start() override;
@@ -140,11 +134,15 @@ private:
// internal helpers
void set_type(psg_type_t psg_type);
- inline uint16_t mix_3D();
+ inline u16 mix_3D();
void ay8910_write_reg(int r, int v);
void build_mixer_table();
void ay8910_statesave();
+ void ay8910_write_ym(int addr, u8 data);
+ u8 ay8910_read_ym();
+ void ay8910_reset_ym();
+
// internal state
psg_type_t m_type;
int m_streams;
@@ -152,28 +150,29 @@ private:
int m_ready;
sound_stream *m_channel;
bool m_active;
- int32_t m_register_latch;
- uint8_t m_regs[16];
- int32_t m_last_enable;
- int32_t m_count[NUM_CHANNELS];
- uint8_t m_output[NUM_CHANNELS];
- uint8_t m_prescale_noise;
- int32_t m_count_noise;
- int32_t m_count_env;
- int8_t m_env_step;
- uint32_t m_env_volume;
- uint8_t m_hold,m_alternate,m_attack,m_holding;
- int32_t m_rng;
- uint8_t m_env_step_mask;
+ s32 m_register_latch;
+ u8 m_regs[16];
+ s32 m_last_enable;
+ s32 m_count[NUM_CHANNELS];
+ u8 m_output[NUM_CHANNELS];
+ u8 m_prescale_noise;
+ s32 m_count_noise;
+ s32 m_count_env;
+ s8 m_env_step;
+ u32 m_env_volume;
+ u8 m_hold,m_alternate,m_attack,m_holding;
+ s32 m_rng;
+ u8 m_mode;
+ u8 m_env_step_mask;
/* init parameters ... */
int m_step;
int m_zero_is_off;
- uint8_t m_vol_enabled[NUM_CHANNELS];
+ u8 m_vol_enabled[NUM_CHANNELS];
const ay_ym_param *m_par;
const ay_ym_param *m_par_env;
- int32_t m_vol_table[NUM_CHANNELS][16];
- int32_t m_env_table[NUM_CHANNELS][32];
- std::unique_ptr<int32_t[]> m_vol3d_table;
+ s32 m_vol_table[NUM_CHANNELS][16];
+ s32 m_env_table[NUM_CHANNELS][32];
+ std::unique_ptr<s32[]> m_vol3d_table;
int m_flags; /* Flags */
int m_res_load[3]; /* Load on channel in ohms */
devcb_read8 m_port_a_read_cb;
@@ -187,7 +186,7 @@ DECLARE_DEVICE_TYPE(AY8910, ay8910_device)
class ay8912_device : public ay8910_device
{
public:
- ay8912_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ay8912_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(AY8912, ay8912_device)
@@ -195,7 +194,7 @@ DECLARE_DEVICE_TYPE(AY8912, ay8912_device)
class ay8913_device : public ay8910_device
{
public:
- ay8913_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ay8913_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(AY8913, ay8913_device)
@@ -203,11 +202,11 @@ DECLARE_DEVICE_TYPE(AY8913, ay8913_device)
class ay8914_device : public ay8910_device
{
public:
- ay8914_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ay8914_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
/* AY8914 handlers needed due to different register map */
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+ u8 read(offs_t offset);
+ void write(offs_t offset, u8 data);
};
DECLARE_DEVICE_TYPE(AY8914, ay8914_device)
@@ -215,7 +214,7 @@ DECLARE_DEVICE_TYPE(AY8914, ay8914_device)
class ay8930_device : public ay8910_device
{
public:
- ay8930_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ay8930_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(AY8930, ay8930_device)
@@ -223,7 +222,7 @@ DECLARE_DEVICE_TYPE(AY8930, ay8930_device)
class ym2149_device : public ay8910_device
{
public:
- ym2149_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ym2149_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(YM2149, ym2149_device)
@@ -231,7 +230,7 @@ DECLARE_DEVICE_TYPE(YM2149, ym2149_device)
class ym3439_device : public ay8910_device
{
public:
- ym3439_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ym3439_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(YM3439, ym3439_device)
@@ -239,7 +238,7 @@ DECLARE_DEVICE_TYPE(YM3439, ym3439_device)
class ymz284_device : public ay8910_device
{
public:
- ymz284_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ymz284_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(YMZ284, ymz284_device)
@@ -247,7 +246,7 @@ DECLARE_DEVICE_TYPE(YMZ284, ymz284_device)
class ymz294_device : public ay8910_device
{
public:
- ymz294_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ ymz294_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
DECLARE_DEVICE_TYPE(YMZ294, ymz294_device)