57 unsigned sampleRam, EmuTime::param time,
MSXAudio& audio);
60 void setEnabled(
bool enabled, EmuTime::param time);
62 void reset(EmuTime::param time);
63 void writeReg(uint8_t rg, uint8_t data, EmuTime::param time);
64 [[nodiscard]] uint8_t
readReg(uint8_t rg, EmuTime::param time);
65 [[nodiscard]] uint8_t
peekReg(uint8_t rg, EmuTime::param time)
const;
66 [[nodiscard]] uint8_t
readStatus(EmuTime::param time)
const;
67 [[nodiscard]] uint8_t
peekStatus(EmuTime::param time)
const;
74 template<
typename Archive>
75 void serialize(Archive& ar,
unsigned version);
79 [[nodiscard]]
float getAmplificationFactorImpl()
const override;
80 void generateChannels(std::span<float*> bufs,
unsigned num)
override;
82 inline void keyOn_BD();
83 inline void keyOn_SD();
84 inline void keyOn_TOM();
85 inline void keyOn_HH();
86 inline void keyOn_CYM();
87 inline void keyOff_BD();
88 inline void keyOff_SD();
89 inline void keyOff_TOM();
90 inline void keyOff_HH();
91 inline void keyOff_CYM();
92 inline void setRythmMode(
int data);
93 void update_key_status();
95 [[nodiscard]]
bool checkMuteHelper();
97 void changeStatusMask(uint8_t newMask);
99 void callback(uint8_t flag)
override;
112 enum KeyPart : uint8_t { KEY_MAIN = 1, KEY_RHYTHM = 2 };
119 void setKeyScaleRate(
bool value) {
122 void setFeedbackShift(uint8_t value) {
123 FB = value ? 8 - value : 0;
126 template<
typename Archive>
127 void serialize(Archive& ar,
unsigned version);
146 [[nodiscard]]
inline bool isActive()
const;
147 inline void slotOn (KeyPart part);
148 inline void slotOff(KeyPart part);
150 [[nodiscard]]
inline unsigned calc_phase(
int lfo_pm);
151 [[nodiscard]]
inline unsigned calc_envelope(
int lfo_am);
152 [[nodiscard]]
inline int calc_slot_car(
int lfo_pm,
int lfo_am,
int fm);
153 [[nodiscard]]
inline int calc_slot_mod(
int lfo_pm,
int lfo_am);
154 [[nodiscard]]
inline int calc_slot_tom(
int lfo_pm,
int lfo_am);
155 [[nodiscard]]
inline int calc_slot_snare(
int lfo_pm,
int lfo_am,
int whiteNoise);
156 [[nodiscard]]
inline int calc_slot_cym(
int lfo_am,
int a,
int b);
157 [[nodiscard]]
inline int calc_slot_hat(
int lfo_am,
int a,
int b,
int whiteNoise);
159 inline void updateAll(
unsigned freq);
160 inline void updatePG(
unsigned freq);
161 inline void updateTLL(
unsigned freq);
162 inline void updateRKS(
unsigned freq);
163 inline void updateEG();
165 template<
typename Archive>
166 void serialize(Archive& ar,
unsigned version);
177 std::span<const EnvPhaseIndex, 16> dPhaseARTableRks;
178 std::span<const EnvPhaseIndex, 16> dPhaseDRTableRks;
192 inline void setFreq(
unsigned freq);
193 inline void keyOn (KeyPart part);
194 inline void keyOff(KeyPart part);
196 template<
typename Archive>
197 void serialize(Archive& ar,
unsigned version);
199 std::array<Slot, 2> slot;
204 MSXMotherBoard& motherBoard;
205 Y8950Periphery& periphery;
210 struct Debuggable final : SimpleDebuggable {
211 Debuggable(MSXMotherBoard& motherBoard,
const std::string& name);
212 [[nodiscard]] uint8_t
read(
unsigned address, EmuTime::param time)
override;
213 void write(
unsigned address, uint8_t value, EmuTime::param time)
override;
216 const std::unique_ptr<EmuTimer> timer1;
217 const std::unique_ptr<EmuTimer> timer2;
220 std::array<uint8_t, 0x100> reg;
222 std::array<Channel, 9> ch;
229 unsigned noiseA_phase;
230 unsigned noiseB_phase;
231 unsigned noiseA_dPhase;
232 unsigned noiseB_dPhase;
Debuggable(const Debuggable &)=delete
byte read(unsigned address) override
void write(unsigned address, byte value) override
static constexpr int STATUS_BUF_RDY
static constexpr int STATUS_T1
void reset(EmuTime::param time)
static constexpr int EG_DP_BITS
void setStatus(uint8_t flags)
uint8_t peekReg(uint8_t rg, EmuTime::param time) const
void setEnabled(bool enabled, EmuTime::param time)
static constexpr int CLOCK_FREQ_DIV
Y8950(const std::string &name, const DeviceConfig &config, unsigned sampleRam, EmuTime::param time, MSXAudio &audio)
static constexpr int R04_MASK_T2
static constexpr int R04_MASK_BUF_RDY
static constexpr int STATUS_PCM_BSY
static constexpr int R04_IRQ_RESET
uint8_t peekStatus(EmuTime::param time) const
static constexpr int R04_MASK_EOS
uint8_t readStatus(EmuTime::param time) const
FixedPoint< EG_DP_BITS - EG_BITS > EnvPhaseIndex
static constexpr int R04_ST2
void serialize(Archive &ar, unsigned version)
static constexpr int R04_MASK_T1
static constexpr int R04_ST1
void writeReg(uint8_t rg, uint8_t data, EmuTime::param time)
static constexpr int CLOCK_FREQ
static constexpr int EG_BITS
void resetStatus(uint8_t flags)
uint8_t readReg(uint8_t rg, EmuTime::param time)
static constexpr int STATUS_EOS
uint8_t peekRawStatus() const
static constexpr int STATUS_T2
This file implemented 3 utility functions:
IntHelper< IRQSource > IRQHelper