10namespace YM2413OriginalNukeYKT {
25 std::array<float*, 9 + 5> out;
29 std::array<int32_t, 2> buf;
32 case 0: *out[ 9]++ += narrow_cast<float>(buf[1] * 2);
break;
33 case 1: *out[10]++ += narrow_cast<float>(buf[1] * 2);
break;
34 case 2: *out[ 6]++ += narrow_cast<float>(buf[0]);
35 *out[11]++ += narrow_cast<float>(buf[1] * 2);
break;
36 case 3: *out[ 7]++ += narrow_cast<float>(buf[0]);
37 *out[12]++ += narrow_cast<float>(buf[1] * 2);
break;
38 case 4: *out[ 8]++ += narrow_cast<float>(buf[0]);
39 *out[13]++ += narrow_cast<float>(buf[1] * 2);
break;
40 case 8: *out[ 0]++ += narrow_cast<float>(buf[0]);
break;
41 case 9: *out[ 1]++ += narrow_cast<float>(buf[0]);
break;
42 case 10: *out[ 2]++ += narrow_cast<float>(buf[0]);
break;
43 case 14: *out[ 3]++ += narrow_cast<float>(buf[0]);
break;
44 case 15: *out[ 4]++ += narrow_cast<float>(buf[0]);
break;
45 case 16: *out[ 5]++ += narrow_cast<float>(buf[0]);
break;
50 for (
auto& write : writes) {
51 if (write.port != uint8_t(-1)) {
53 write.port = uint8_t(-1);
59 allowed_offset = std::max<int>(0, allowed_offset - 18);
65 if (speedUpHack) [[unlikely]] {
66 while (cycle_offset < allowed_offset) [[unlikely]] {
68 std::array<float*, 9 + 5> dummy;
72 allowed_offset = ((port ? 84 : 12) / 4) + cycle_offset;
75 writes[cycle_offset] = {port, value};
92 return regs[reg & 63];
102 speedUpHack = speed > 1.0;
105template<
typename Archive>
Abstract interface for the YM2413 core.
void serialize(Archive &ar, unsigned version)
void generateChannels(std::span< float *, 9+5 > out, uint32_t n) override
void writePort(bool port, uint8_t value, int cycle_offset) override
Write to the YM2413 register/data port.
void pokeReg(uint8_t reg, uint8_t value) override
Write to a YM2413 register (for debug).
float getAmplificationFactor() const override
Returns normalization factor.
void setSpeed(double speed) override
Sets real-time speed factor (aka the openMSX 'speed' setting).
uint8_t peekReg(uint8_t reg) const override
Read from a YM2413 register (for debug).
void reset() override
Reset this YM2413 core.
This file implemented 3 utility functions:
REGISTER_POLYMORPHIC_INITIALIZER(Pluggable, CassettePlayer, "CassettePlayer")
constexpr void fill(ForwardRange &&range, const T &value)
auto copy(InputRange &&range, OutputIter out)
void OPLL_Reset(opll_t *chip, uint32_t chip_type)
void OPLL_Write(opll_t *chip, uint32_t port, uint8_t data)
void OPLL_Clock(opll_t *chip, int32_t *buffer)
#define INSTANTIATE_SERIALIZE_METHODS(CLASS)
constexpr void repeat(T n, Op op)
Repeat the given operation 'op' 'n' times.