summaryrefslogtreecommitdiff
path: root/emulators/xbeeb/patches/patch-ab
diff options
context:
space:
mode:
Diffstat (limited to 'emulators/xbeeb/patches/patch-ab')
-rw-r--r--emulators/xbeeb/patches/patch-ab123
1 files changed, 123 insertions, 0 deletions
diff --git a/emulators/xbeeb/patches/patch-ab b/emulators/xbeeb/patches/patch-ab
new file mode 100644
index 00000000000..b4aa7f2e3c9
--- /dev/null
+++ b/emulators/xbeeb/patches/patch-ab
@@ -0,0 +1,123 @@
+$NetBSD: patch-ab,v 1.1.1.1 2000/05/22 22:13:12 skrll Exp $
+
+--- src/VoxWare.c Fri Oct 11 10:53:13 1996
++++ src/VoxWare.c Sat Apr 29 18:29:53 2000
+@@ -51,6 +51,7 @@
+
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
++#include <sys/midiio.h>
+ #include <unistd.h>
+
+ #include "Config.h"
+@@ -60,7 +61,73 @@
+ #include <math.h>
+ #include <stdio.h>
+ #include <fcntl.h>
+-#include <sys/soundcard.h>
++#include <soundcard.h>
++
++/* Pseudo controllers (not midi compatible) */
++#define CTRL_PITCH_BENDER 255
++#define CTRL_PITCH_BENDER_RANGE 254
++#define CTL_PAN 0x0a
++
++/* Linux -> NetBSD */
++#define EV_CHN_COMMON SEQ_CHN_COMMON
++#define EV_CHN_VOICE SEQ_CHN_VOICE
++#define SEQ_CONTROLLER SEQOLD_CONTROLLER
++#define SEQ_EXTENDED SEQOLD_EXTENDED
++
++/* Missing soundcard.h definitions */
++#define SEQ_PGM_CHANGE(dev, chn, patch) \
++ _CHN_COMMON(dev, MIDI_PGM_CHANGE, chn, patch, 0, 0)
++#define SEQ_SET_PATCH SEQ_PGM_CHANGE
++
++#define _CHN_COMMON(dev, event, chn, p1, p2, w14) \
++ {_SEQ_NEEDBUF(8);\
++ _seqbuf[_seqbufptr] = EV_CHN_COMMON;\
++ _seqbuf[_seqbufptr+1] = (dev);\
++ _seqbuf[_seqbufptr+2] = (event);\
++ _seqbuf[_seqbufptr+3] = (chn);\
++ _seqbuf[_seqbufptr+4] = (p1);\
++ _seqbuf[_seqbufptr+5] = (p2);\
++ *(short *)&_seqbuf[_seqbufptr+6] = (w14);\
++ _SEQ_ADVBUF(8);}
++#define SEQ_V2_X_CONTROL(dev, voice, controller, value) {_SEQ_NEEDBUF(8);\
++ _seqbuf[_seqbufptr] = SEQ_EXTENDED;\
++ _seqbuf[_seqbufptr+1] = SEQ_CONTROLLER;\
++ _seqbuf[_seqbufptr+2] = (dev);\
++ _seqbuf[_seqbufptr+3] = (voice);\
++ _seqbuf[_seqbufptr+4] = (controller);\
++ _seqbuf[_seqbufptr+5] = ((value)&0xff);\
++ _seqbuf[_seqbufptr+6] = ((value>>8)&0xff);\
++ _seqbuf[_seqbufptr+7] = 0;\
++ _SEQ_ADVBUF(8);}
++#define _CHN_VOICE(dev, event, chn, note, parm) \
++ {_SEQ_NEEDBUF(8);\
++ _seqbuf[_seqbufptr] = EV_CHN_VOICE;\
++ _seqbuf[_seqbufptr+1] = (dev);\
++ _seqbuf[_seqbufptr+2] = (event);\
++ _seqbuf[_seqbufptr+3] = (chn);\
++ _seqbuf[_seqbufptr+4] = (note);\
++ _seqbuf[_seqbufptr+5] = (parm);\
++ _seqbuf[_seqbufptr+6] = (0);\
++ _seqbuf[_seqbufptr+7] = 0;\
++ _SEQ_ADVBUF(8);}
++
++#define SEQ_START_NOTE(dev, chn, note, vol) \
++ _CHN_VOICE(dev, MIDI_NOTEON, chn, note, vol)
++
++#define SEQ_STOP_NOTE(dev, chn, note, vol) \
++ _CHN_VOICE(dev, MIDI_NOTEOFF, chn, note, vol)
++
++#define SEQ_PITCHBEND(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER, value)
++#define SEQ_BENDER_RANGE(dev, voice, value) SEQ_V2_X_CONTROL(dev, voice, CTRL_PITCH_BENDER_RANGE, value)
++#define SEQ_CONTROL(dev, chn, controller, value) \
++ _CHN_COMMON(dev, MIDI_CTL_CHANGE, chn, controller, 0, value)
++#define SEQ_PANNING(dev, voice, pos) SEQ_CONTROL(dev, voice, CTL_PAN, (pos+128) / 2)
++#define SEQ_DEFINEBUF(len) unsigned char _seqbuf[len]; int _seqbuflen = len;int _seqbufptr = 0
++#define _SEQ_ADVBUF(len) _seqbufptr += len
++#define _SEQ_NEEDBUF(len) if ((_seqbufptr+(len)) > _seqbuflen) seqbuf_dump()
++#define SEQ_DUMPBUF seqbuf_dump
++
++void seqbuf_dump();
+
+ #include "VoxWare.h"
+
+@@ -152,7 +219,7 @@
+ * check to see if any synth devices are available
+ */
+
+- ioctl ( SequencerFD, SNDCTL_SEQ_NRSYNTHS, &NoDevs );
++ ioctl ( SequencerFD, SEQUENCER_NRSYNTHS, &NoDevs );
+ if ( !NoDevs )
+ {
+ fprintf( stderr, "No synth devices available, disabling sound.\n");
+@@ -170,7 +237,7 @@
+ for ( i = 0; i < NoDevs; i++ )
+ {
+ info.device = i;
+- ioctl ( SequencerFD, SNDCTL_SYNTH_INFO, &info );
++ ioctl ( SequencerFD, SEQUENCER_INFO, &info );
+ if ( info.synth_type == SYNTH_TYPE_FM )
+ SynthDevNo = i;
+ break;
+@@ -185,7 +252,7 @@
+ SoundEnabled = 1;
+
+ info.device = SynthDevNo;
+- ioctl ( SequencerFD, SNDCTL_SYNTH_INFO, &info );
++ ioctl ( SequencerFD, SEQUENCER_INFO, &info );
+
+ #ifdef SOUND_DEBUG
+ printf ( "Synth device %d info:\n", SynthDevNo );
+@@ -199,7 +266,7 @@
+ for ( j = 0; j < 4; j++ )
+ {
+ Instr.channel = j;
+- Instr.key = FM_PATCH;
++ Instr.key = SBI_FM_PATCH;
+ Instr.device = SynthDevNo;
+ for ( i = 0; i < 16; i++ )
+ {