aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/adlmidi.cpp19
-rw-r--r--src/nukedopl3.h9
2 files changed, 21 insertions, 7 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index 02e78c6..4527d5c 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -48,6 +48,7 @@
#include <deque> // deque
#include <cmath> // exp, log, ceil
#include <stdio.h>
+#include <limits> // numeric_limit
#include <deque>
#include <algorithm>
@@ -57,7 +58,6 @@
#include "dbopl.h"
#else
#include "nukedopl3.h"
-#include <limits>
#endif
#include "adldata.hh"
@@ -202,10 +202,10 @@ struct OPL3
// 7 = percussion Hihat
// 8 = percussion slave
- void Poke(size_t card, unsigned index, unsigned value)
+ void Poke(size_t card, uint32_t index, uint32_t value)
{
#ifdef ADLMIDI_USE_DOSBOX_OPL
- cards[card].WriteReg(index, value);
+ cards[card].WriteReg(index, static_cast<uint8_t>(value));
#else
OPL3_WriteReg(&cards[card], static_cast<Bit16u>(index), static_cast<Bit8u>(value));
#endif
@@ -213,7 +213,7 @@ struct OPL3
void PokeN(size_t card, uint16_t index, uint8_t value)
{
#ifdef ADLMIDI_USE_DOSBOX_OPL
- cards[card].WriteReg(static_cast<Bit32u>(index), static_cast<Bit32u>(value));
+ cards[card].WriteReg(static_cast<Bit32u>(index), value);
#else
OPL3_WriteReg(&cards[card], index, value);
#endif
@@ -428,7 +428,16 @@ struct OPL3
void Reset()
{
LogarithmicVolumes = false;
+#ifdef ADLMIDI_USE_DOSBOX_OPL
+ DBOPL::Handler emptyChip;
+#else
+ _opl3_chip emptyChip;
+#endif
cards.resize(NumCards);
+
+ for(unsigned int i = 0; i < NumCards; i++)
+ cards[i] = emptyChip;
+
NumChannels = NumCards * 23;
ins.resize(NumChannels, 189);
pit.resize(NumChannels, 0);
@@ -2841,7 +2850,7 @@ ADLMIDI_EXPORT int adl_play(ADL_MIDIPlayer *device, int sampleCount, short *out)
else if(n_samples > 0)
{
#ifdef ADLMIDI_USE_DOSBOX_OPL
- std::vector<int> in;
+ std::vector<int32_t> in;
in.resize(1024); /*n_samples * 2 */
ssize_t in_count = n_samples;
#endif
diff --git a/src/nukedopl3.h b/src/nukedopl3.h
index e7f05ef..ea44de9 100644
--- a/src/nukedopl3.h
+++ b/src/nukedopl3.h
@@ -51,13 +51,13 @@ typedef struct _opl3_slot opl3_slot;
typedef struct _opl3_channel opl3_channel;
typedef struct _opl3_chip opl3_chip;
-#pragma pack(1)
struct _opl3_slot
{
opl3_channel *channel;
opl3_chip *chip;
Bit16s out;
Bit16s fbmod;
+ Bit8u ___padding[4];
Bit16s *mod;
Bit16s prout;
Bit16s eg_rout;
@@ -66,6 +66,7 @@ struct _opl3_slot
Bit8u eg_gen;
Bit8u eg_rate;
Bit8u eg_ksl;
+ Bit8u ___padding2[6];
Bit8u *trem;
Bit8u reg_vib;
Bit8u reg_type;
@@ -81,6 +82,7 @@ struct _opl3_slot
Bit8u key;
Bit32u pg_phase;
Bit32u timer;
+ Bit8u ___padding3[4];
};
struct _opl3_channel
@@ -90,13 +92,16 @@ struct _opl3_channel
opl3_chip *chip;
Bit16s *out[4];
Bit8u chtype;
+ Bit8u ___padding[1];
Bit16u f_num;
Bit8u block;
Bit8u fb;
Bit8u con;
Bit8u alg;
Bit8u ksv;
+ Bit8u ___padding2[1];
Bit16u cha, chb;
+ Bit8u ___padding3[2];
};
typedef struct _opl3_writebuf
@@ -104,8 +109,8 @@ typedef struct _opl3_writebuf
Bit64u time;
Bit16u reg;
Bit8u data;
+ Bit8u ___padding[5];
} opl3_writebuf;
-#pragma pack(0)
struct _opl3_chip
{