annotate Plugins/Input/adplug/core/adl.cpp @ 1590:fd943ec96935 trunk

[svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
author chainsaw
date Thu, 24 Aug 2006 11:11:30 -0700
parents 705d4c089fce
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1280
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1 /*
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2 * adl.cpp - ADL player adaption by Simon Peter <dn.tlp@gmx.net>
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
3 *
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
4 * Original ADL player by Torbjorn Andersson and Johannes Schickel
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
5 * 'lordhoto' <lordhoto at scummvm dot org> of the ScummVM project.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
6 */
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
7
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
8 /* ScummVM - Scumm Interpreter
1590
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
9 *
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
10 * This file is licensed under both GPL and LGPL
1280
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
11 * Copyright (C) 2006 The ScummVM project
1590
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
12 * Copyright (C) 2006 Torbjorn Andersson and Johannes Schickel
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
13 *
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
14 * GPL License
1280
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
15 *
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
16 * This program is free software; you can redistribute it and/or
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
17 * modify it under the terms of the GNU General Public License
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
18 * as published by the Free Software Foundation; either version 2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
19 * of the License, or (at your option) any later version.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
20
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
21 * This program is distributed in the hope that it will be useful,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
24 * GNU General Public License for more details.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
25
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
26 * You should have received a copy of the GNU General Public License
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
27 * along with this program; if not, write to the Free Software
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
28 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1590
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
29 *
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
30 * LPGL License
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
31 *
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
32 * This library is free software; you can redistribute it and/or
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
33 * modify it under the terms of the GNU Lesser General Public
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
34 * License as published by the Free Software Foundation; either
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
35 * version 2.1 of the License, or (at your option) any later version.
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
36
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
37 * This library is distributed in the hope that it will be useful,
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
38 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
39 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
40 * Lesser General Public License for more details.
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
41
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
42 * You should have received a copy of the GNU Lesser General Public
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
43 * License along with this library; if not, write to the Free Software
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
44 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
fd943ec96935 [svn] Sync with upstream. ADL is now dual licensed, and RIX has had a pitch fixup. Free warning fix included.
chainsaw
parents: 1459
diff changeset
45 *
1280
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
46 */
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
47
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
48 #include <inttypes.h>
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
49 #include <stdarg.h>
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
50 #include <assert.h>
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
51
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
52 #include "adl.h"
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
53 #include "debug.h"
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
54
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
55 #ifdef ADL_DEBUG
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
56 # define warning(...) AdPlug_LogWrite(__VA_ARGS__); \
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
57 AdPlug_LogWrite("\n")
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
58
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
59 # define debugC(i1, i2, ...) AdPlug_LogWrite(__VA_ARGS__); \
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
60 AdPlug_LogWrite("\n")
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
61 #else
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
62 # define kDebugLevelSound 1
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
63
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
64 static inline void warning(const char *str, ...)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
65 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
66 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
67
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
68 static inline void debugC(int i1, int i2, const char *str, ...)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
69 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
70 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
71 #endif
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
72
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
73 // #define warning(...)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
74 // #define debugC(i1, i2, ...)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
75
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
76 #define ARRAYSIZE(x) ((int)(sizeof(x) / sizeof(x[0])))
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
77
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
78 // Basic Adlib Programming:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
79 // http://www.gamedev.net/reference/articles/article446.asp
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
80
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
81 #define CALLBACKS_PER_SECOND 72
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
82
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
83 typedef uint8_t uint8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
84 typedef int8_t int8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
85 typedef uint16_t uint16;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
86 typedef int16_t int16;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
87 typedef uint32_t uint32;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
88 typedef int32_t int32;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
89 typedef uint8_t byte;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
90
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
91 static inline uint16 READ_LE_UINT16(const void *ptr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
92 const byte *b = (const byte *)ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
93 return (b[1] << 8) + b[0];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
94 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
95
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
96 static inline uint16 READ_BE_UINT16(const void *ptr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
97 const byte *b = (const byte *)ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
98 return (b[0] << 8) + b[1];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
99 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
100
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
101 class AdlibDriver {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
102 public:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
103 AdlibDriver(Copl *opl);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
104 ~AdlibDriver();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
105
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
106 int callback(int opcode, ...);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
107 void callback();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
108
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
109 // AudioStream API
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
110 // int readBuffer(int16 *buffer, const int numSamples) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
111 // int32 samplesLeft = numSamples;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
112 // memset(buffer, 0, sizeof(int16) * numSamples);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
113 // while (samplesLeft) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
114 // if (!_samplesTillCallback) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
115 // callback();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
116 // _samplesTillCallback = _samplesPerCallback;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
117 // _samplesTillCallbackRemainder += _samplesPerCallbackRemainder;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
118 // if (_samplesTillCallbackRemainder >= CALLBACKS_PER_SECOND) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
119 // _samplesTillCallback++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
120 // _samplesTillCallbackRemainder -= CALLBACKS_PER_SECOND;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
121 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
122 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
123
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
124 // int32 render = MIN(samplesLeft, _samplesTillCallback);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
125 // samplesLeft -= render;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
126 // _samplesTillCallback -= render;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
127 // YM3812UpdateOne(_adlib, buffer, render);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
128 // buffer += render;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
129 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
130 // return numSamples;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
131 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
132
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
133 bool isStereo() const { return false; }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
134 bool endOfData() const { return false; }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
135 // int getRate() const { return _mixer->getOutputRate(); }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
136
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
137 struct OpcodeEntry {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
138 typedef int (AdlibDriver::*DriverOpcode)(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
139 DriverOpcode function;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
140 const char *name;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
141 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
142
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
143 void setupOpcodeList();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
144 const OpcodeEntry *_opcodeList;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
145 int _opcodesEntries;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
146
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
147 int snd_ret0x100(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
148 int snd_ret0x1983(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
149 int snd_initDriver(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
150 int snd_deinitDriver(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
151 int snd_setSoundData(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
152 int snd_unkOpcode1(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
153 int snd_startSong(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
154 int snd_unkOpcode2(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
155 int snd_unkOpcode3(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
156 int snd_readByte(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
157 int snd_writeByte(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
158 int snd_getSoundTrigger(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
159 int snd_unkOpcode4(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
160 int snd_dummy(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
161 int snd_getNullvar4(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
162 int snd_setNullvar3(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
163 int snd_setFlag(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
164 int snd_clearFlag(va_list &list);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
165
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
166 // These variables have not yet been named, but some of them are partly
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
167 // known nevertheless:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
168 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
169 // unk16 - Sound-related. Possibly some sort of pitch bend.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
170 // unk18 - Sound-effect. Used for secondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
171 // unk19 - Sound-effect. Used for secondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
172 // unk20 - Sound-effect. Used for secondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
173 // unk21 - Sound-effect. Used for secondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
174 // unk22 - Sound-effect. Used for secondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
175 // unk29 - Sound-effect. Used for primaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
176 // unk30 - Sound-effect. Used for primaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
177 // unk31 - Sound-effect. Used for primaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
178 // unk32 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
179 // unk33 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
180 // unk34 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
181 // unk35 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
182 // unk36 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
183 // unk37 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
184 // unk38 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
185 // unk39 - Currently unused, except for updateCallback56()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
186 // unk40 - Currently unused, except for updateCallback56()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
187 // unk41 - Sound-effect. Used for primaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
188
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
189 struct Channel {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
190 uint8 opExtraLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
191 uint8 *dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
192 uint8 duration;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
193 uint8 repeatCounter;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
194 int8 baseOctave;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
195 uint8 priority;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
196 uint8 dataptrStackPos;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
197 uint8 *dataptrStack[4];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
198 int8 baseNote;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
199 uint8 unk29;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
200 uint8 unk31;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
201 uint16 unk30;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
202 uint16 unk37;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
203 uint8 unk33;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
204 uint8 unk34;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
205 uint8 unk35;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
206 uint8 unk36;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
207 uint8 unk32;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
208 uint8 unk41;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
209 uint8 unk38;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
210 uint8 opExtraLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
211 uint8 spacing2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
212 uint8 baseFreq;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
213 uint8 tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
214 uint8 position;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
215 uint8 regAx;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
216 uint8 regBx;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
217 typedef void (AdlibDriver::*Callback)(Channel&);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
218 Callback primaryEffect;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
219 Callback secondaryEffect;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
220 uint8 fractionalSpacing;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
221 uint8 opLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
222 uint8 opLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
223 uint8 opExtraLevel3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
224 uint8 twoChan;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
225 uint8 unk39;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
226 uint8 unk40;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
227 uint8 spacing1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
228 uint8 durationRandomness;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
229 uint8 unk19;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
230 uint8 unk18;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
231 int8 unk20;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
232 int8 unk21;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
233 uint8 unk22;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
234 uint16 offset;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
235 uint8 tempoReset;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
236 uint8 rawNote;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
237 int8 unk16;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
238 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
239
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
240 void primaryEffect1(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
241 void primaryEffect2(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
242 void secondaryEffect1(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
243
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
244 void resetAdlibState();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
245 void writeOPL(byte reg, byte val);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
246 void initChannel(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
247 void noteOff(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
248 void unkOutput2(uint8 num);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
249
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
250 uint16 getRandomNr();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
251 void setupDuration(uint8 duration, Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
252
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
253 void setupNote(uint8 rawNote, Channel &channel, bool flag = false);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
254 void setupInstrument(uint8 regOffset, uint8 *dataptr, Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
255 void noteOn(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
256
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
257 void adjustVolume(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
258
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
259 uint8 calculateOpLevel1(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
260 uint8 calculateOpLevel2(Channel &channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
261
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
262 uint16 checkValue(int16 val) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
263 if (val < 0)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
264 val = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
265 else if (val > 0x3F)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
266 val = 0x3F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
267 return val;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
268 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
269
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
270 // The sound data has at least two lookup tables:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
271 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
272 // * One for programs, starting at offset 0.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
273 // * One for instruments, starting at offset 500.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
274
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
275 uint8 *getProgram(int progId) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
276 return _soundData + READ_LE_UINT16(_soundData + 2 * progId);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
277 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
278
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
279 uint8 *getInstrument(int instrumentId) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
280 return _soundData + READ_LE_UINT16(_soundData + 500 + 2 * instrumentId);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
281 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
282
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
283 void setupPrograms();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
284 void executePrograms();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
285
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
286 struct ParserOpcode {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
287 typedef int (AdlibDriver::*POpcode)(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
288 POpcode function;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
289 const char *name;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
290 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
291
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
292 void setupParserOpcodeTable();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
293 const ParserOpcode *_parserOpcodeTable;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
294 int _parserOpcodeTableSize;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
295
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
296 int update_setRepeat(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
297 int update_checkRepeat(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
298 int update_setupProgram(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
299 int update_setNoteSpacing(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
300 int update_jump(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
301 int update_jumpToSubroutine(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
302 int update_returnFromSubroutine(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
303 int update_setBaseOctave(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
304 int update_stopChannel(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
305 int update_playRest(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
306 int update_writeAdlib(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
307 int update_setupNoteAndDuration(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
308 int update_setBaseNote(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
309 int update_setupSecondaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
310 int update_stopOtherChannel(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
311 int update_waitForEndOfProgram(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
312 int update_setupInstrument(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
313 int update_setupPrimaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
314 int update_removePrimaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
315 int update_setBaseFreq(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
316 int update_setupPrimaryEffect2(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
317 int update_setPriority(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
318 int updateCallback23(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
319 int updateCallback24(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
320 int update_setExtraLevel1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
321 int update_setupDuration(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
322 int update_playNote(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
323 int update_setFractionalNoteSpacing(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
324 int update_setTempo(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
325 int update_removeSecondaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
326 int update_setChannelTempo(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
327 int update_setExtraLevel3(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
328 int update_setExtraLevel2(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
329 int update_changeExtraLevel2(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
330 int update_setAMDepth(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
331 int update_setVibratoDepth(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
332 int update_changeExtraLevel1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
333 int updateCallback38(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
334 int updateCallback39(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
335 int update_removePrimaryEffect2(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
336 int updateCallback41(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
337 int update_resetToGlobalTempo(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
338 int update_nop1(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
339 int update_setDurationRandomness(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
340 int update_changeChannelTempo(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
341 int updateCallback46(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
342 int update_nop2(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
343 int update_setupRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
344 int update_playRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
345 int update_removeRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
346 int updateCallback51(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
347 int updateCallback52(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
348 int updateCallback53(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
349 int update_setSoundTrigger(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
350 int update_setTempoReset(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
351 int updateCallback56(uint8 *&dataptr, Channel &channel, uint8 value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
352
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
353 // These variables have not yet been named, but some of them are partly
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
354 // known nevertheless:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
355 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
356 // _unkValue1 - Unknown. Used for updating _unkValue2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
357 // _unkValue2 - Unknown. Used for updating _unkValue4
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
358 // _unkValue3 - Unknown. Used for updating _unkValue2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
359 // _unkValue4 - Unknown. Used for updating _unkValue5
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
360 // _unkValue5 - Unknown. Used for controlling updateCallback24().
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
361 // _unkValue6 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
362 // _unkValue7 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
363 // _unkValue8 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
364 // _unkValue9 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
365 // _unkValue10 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
366 // _unkValue11 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
367 // _unkValue12 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
368 // _unkValue13 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
369 // _unkValue14 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
370 // _unkValue15 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
371 // _unkValue16 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
372 // _unkValue17 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
373 // _unkValue18 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
374 // _unkValue19 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
375 // _unkValue20 - Unknown. Rhythm section volume?
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
376 // _unkTable[] - Probably frequences for the 12-tone scale.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
377 // _unkTable2[] - Unknown. Currently only used by updateCallback46()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
378 // _unkTable2_1[] - One of the tables in _unkTable2[]
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
379 // _unkTable2_2[] - One of the tables in _unkTable2[]
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
380 // _unkTable2_3[] - One of the tables in _unkTable2[]
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
381
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
382 int32 _samplesPerCallback;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
383 int32 _samplesPerCallbackRemainder;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
384 int32 _samplesTillCallback;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
385 int32 _samplesTillCallbackRemainder;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
386
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
387 int _lastProcessed;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
388 int8 _flagTrigger;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
389 int _curChannel;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
390 uint8 _soundTrigger;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
391 int _soundsPlaying;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
392
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
393 uint16 _rnd;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
394
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
395 uint8 _unkValue1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
396 uint8 _unkValue2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
397 uint8 _unkValue3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
398 uint8 _unkValue4;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
399 uint8 _unkValue5;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
400 uint8 _unkValue6;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
401 uint8 _unkValue7;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
402 uint8 _unkValue8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
403 uint8 _unkValue9;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
404 uint8 _unkValue10;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
405 uint8 _unkValue11;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
406 uint8 _unkValue12;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
407 uint8 _unkValue13;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
408 uint8 _unkValue14;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
409 uint8 _unkValue15;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
410 uint8 _unkValue16;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
411 uint8 _unkValue17;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
412 uint8 _unkValue18;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
413 uint8 _unkValue19;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
414 uint8 _unkValue20;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
415
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
416 int _flags;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
417
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
418 uint8 *_soundData;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
419
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
420 uint8 _soundIdTable[0x10];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
421 Channel _channels[10];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
422
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
423 uint8 _vibratoAndAMDepthBits;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
424 uint8 _rhythmSectionBits;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
425
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
426 uint8 _curRegOffset;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
427 uint8 _tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
428
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
429 const uint8 *_tablePtr1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
430 const uint8 *_tablePtr2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
431
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
432 static const uint8 _regOffset[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
433 static const uint16 _unkTable[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
434 static const uint8 *_unkTable2[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
435 static const uint8 _unkTable2_1[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
436 static const uint8 _unkTable2_2[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
437 static const uint8 _unkTable2_3[];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
438 static const uint8 _unkTables[][32];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
439
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
440 Copl *opl;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
441 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
442
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
443 AdlibDriver::AdlibDriver(Copl *newopl)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
444 : opl(newopl)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
445 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
446 setupOpcodeList();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
447 setupParserOpcodeTable();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
448
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
449 // _mixer = mixer;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
450
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
451 _flags = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
452 // _adlib = makeAdlibOPL(getRate());
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
453 // assert(_adlib);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
454
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
455 memset(_channels, 0, sizeof(_channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
456 _soundData = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
457
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
458 _vibratoAndAMDepthBits = _curRegOffset = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
459
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
460 _lastProcessed = _flagTrigger = _curChannel = _rhythmSectionBits = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
461 _soundsPlaying = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
462 _rnd = 0x1234;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
463
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
464 _tempo = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
465 _soundTrigger = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
466
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
467 _unkValue3 = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
468 _unkValue1 = _unkValue2 = _unkValue4 = _unkValue5 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
469 _unkValue6 = _unkValue7 = _unkValue8 = _unkValue9 = _unkValue10 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
470 _unkValue11 = _unkValue12 = _unkValue13 = _unkValue14 = _unkValue15 =
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
471 _unkValue16 = _unkValue17 = _unkValue18 = _unkValue19 = _unkValue20 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
472
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
473 _tablePtr1 = _tablePtr2 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
474
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
475 // _mixer->setupPremix(this);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
476
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
477 // _samplesPerCallback = getRate() / CALLBACKS_PER_SECOND;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
478 // _samplesPerCallbackRemainder = getRate() % CALLBACKS_PER_SECOND;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
479 _samplesTillCallback = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
480 _samplesTillCallbackRemainder = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
481 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
482
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
483 AdlibDriver::~AdlibDriver() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
484 // _mixer->setupPremix(0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
485 // OPLDestroy(_adlib);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
486 // _adlib = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
487 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
488
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
489 int AdlibDriver::callback(int opcode, ...) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
490 // lock();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
491 if (opcode >= _opcodesEntries || opcode < 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
492 warning("AdlibDriver: calling unknown opcode '%d'", opcode);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
493 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
494 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
495
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
496 debugC(9, kDebugLevelSound, "Calling opcode '%s' (%d)", _opcodeList[opcode].name, opcode);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
497
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
498 va_list args;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
499 va_start(args, opcode);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
500 int returnValue = (this->*(_opcodeList[opcode].function))(args);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
501 va_end(args);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
502 // unlock();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
503 return returnValue;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
504 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
505
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
506 // Opcodes
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
507
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
508 int AdlibDriver::snd_ret0x100(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
509 return 0x100;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
510 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
511
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
512 int AdlibDriver::snd_ret0x1983(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
513 return 0x1983;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
514 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
515
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
516 int AdlibDriver::snd_initDriver(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
517 _lastProcessed = _soundsPlaying = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
518 resetAdlibState();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
519 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
520 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
521
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
522 int AdlibDriver::snd_deinitDriver(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
523 resetAdlibState();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
524 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
525 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
526
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
527 int AdlibDriver::snd_setSoundData(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
528 if (_soundData) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
529 delete [] _soundData;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
530 _soundData = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
531 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
532 _soundData = va_arg(list, uint8*);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
533 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
534 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
535
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
536 int AdlibDriver::snd_unkOpcode1(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
537 warning("unimplemented snd_unkOpcode1");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
538 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
539 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
540
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
541 int AdlibDriver::snd_startSong(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
542 int songId = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
543 _flags |= 8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
544 _flagTrigger = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
545
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
546 uint8 *ptr = getProgram(songId);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
547 uint8 chan = *ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
548
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
549 if ((songId << 1) != 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
550 if (chan == 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
551 if (_flags & 2)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
552 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
553 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
554 if (_flags & 1)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
555 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
556 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
557 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
558
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
559 _soundIdTable[_soundsPlaying++] = songId;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
560 _soundsPlaying &= 0x0F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
561
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
562 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
563 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
564
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
565 int AdlibDriver::snd_unkOpcode2(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
566 warning("unimplemented snd_unkOpcode2");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
567 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
568 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
569
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
570 int AdlibDriver::snd_unkOpcode3(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
571 int value = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
572 int loop = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
573 if (value < 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
574 value = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
575 loop = 9;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
576 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
577 loop -= value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
578 ++loop;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
579
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
580 while (loop--) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
581 _curChannel = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
582 Channel &channel = _channels[_curChannel];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
583 channel.priority = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
584 channel.dataptr = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
585 if (value != 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
586 noteOff(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
587 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
588 ++value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
589 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
590
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
591 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
592 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
593
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
594 int AdlibDriver::snd_readByte(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
595 int a = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
596 int b = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
597 uint8 *ptr = getProgram(a) + b;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
598 return *ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
599 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
600
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
601 int AdlibDriver::snd_writeByte(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
602 int a = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
603 int b = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
604 int c = va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
605 uint8 *ptr = getProgram(a) + b;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
606 uint8 oldValue = *ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
607 *ptr = (uint8)c;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
608 return oldValue;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
609 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
610
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
611 int AdlibDriver::snd_getSoundTrigger(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
612 return _soundTrigger;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
613 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
614
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
615 int AdlibDriver::snd_unkOpcode4(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
616 warning("unimplemented snd_unkOpcode4");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
617 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
618 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
619
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
620 int AdlibDriver::snd_dummy(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
621 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
622 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
623
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
624 int AdlibDriver::snd_getNullvar4(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
625 warning("unimplemented snd_getNullvar4");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
626 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
627 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
628
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
629 int AdlibDriver::snd_setNullvar3(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
630 warning("unimplemented snd_setNullvar3");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
631 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
632 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
633
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
634 int AdlibDriver::snd_setFlag(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
635 int oldFlags = _flags;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
636 _flags |= va_arg(list, int);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
637 return oldFlags;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
638 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
639
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
640 int AdlibDriver::snd_clearFlag(va_list &list) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
641 int oldFlags = _flags;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
642 _flags &= ~(va_arg(list, int));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
643 return oldFlags;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
644 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
645
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
646 // timer callback
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
647
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
648 void AdlibDriver::callback() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
649 // lock();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
650 --_flagTrigger;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
651 if (_flagTrigger < 0)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
652 _flags &= ~8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
653 setupPrograms();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
654 executePrograms();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
655
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
656 uint8 temp = _unkValue3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
657 _unkValue3 += _tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
658 if (_unkValue3 < temp) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
659 if (!(--_unkValue2)) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
660 _unkValue2 = _unkValue1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
661 ++_unkValue4;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
662 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
663 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
664 // unlock();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
665 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
666
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
667 void AdlibDriver::setupPrograms() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
668 while (_lastProcessed != _soundsPlaying) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
669 uint8 *ptr = getProgram(_soundIdTable[_lastProcessed]);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
670 uint8 chan = *ptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
671 uint8 priority = *ptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
672
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
673 // Only start this sound if its priority is higher than the one
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
674 // already playing.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
675
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
676 Channel &channel = _channels[chan];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
677
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
678 if (priority >= channel.priority) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
679 initChannel(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
680 channel.priority = priority;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
681 channel.dataptr = ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
682 channel.tempo = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
683 channel.position = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
684 channel.duration = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
685 unkOutput2(chan);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
686 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
687
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
688 ++_lastProcessed;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
689 _lastProcessed &= 0x0F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
690 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
691 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
692
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
693 // A few words on opcode parsing and timing:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
694 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
695 // First of all, We simulate a timer callback 72 times per second. Each timeout
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
696 // we update each channel that has something to play.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
697 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
698 // Each channel has its own individual tempo, which is added to its position.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
699 // This will frequently cause the position to "wrap around" but that is
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
700 // intentional. In fact, it's the signal to go ahead and do more stuff with
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
701 // that channel.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
702 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
703 // Each channel also has a duration, indicating how much time is left on the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
704 // its current task. This duration is decreased by one. As long as it still has
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
705 // not reached zero, the only thing that can happen is that the note is turned
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
706 // off depending on manual or automatic note spacing. Once the duration reaches
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
707 // zero, a new set of musical opcodes are executed.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
708 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
709 // An opcode is one byte, followed by a variable number of parameters. Since
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
710 // most opcodes have at least one one-byte parameter, we read that as well. Any
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
711 // opcode that doesn't have that one parameter is responsible for moving the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
712 // data pointer back again.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
713 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
714 // If the most significant bit of the opcode is 1, it's a function; call it.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
715 // The opcode functions return either 0 (continue), 1 (stop) or 2 (stop, and do
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
716 // not run the effects callbacks).
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
717 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
718 // If the most significant bit of the opcode is 0, it's a note, and the first
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
719 // parameter is its duration. (There are cases where the duration is modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
720 // but that's an exception.) The note opcode is assumed to return 1, and is the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
721 // last opcode unless its duration is zero.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
722 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
723 // Finally, most of the times that the callback is called, it will invoke the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
724 // effects callbacks. The final opcode in a set can prevent this, if it's a
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
725 // function and it returns anything other than 1.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
726
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
727 void AdlibDriver::executePrograms() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
728 // Each channel runs its own program. There are ten channels: One for
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
729 // each Adlib channel (0-8), plus one "control channel" (9) which is
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
730 // the one that tells the other channels what to do.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
731
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
732 for (_curChannel = 9; _curChannel >= 0; --_curChannel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
733 int result = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
734
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
735 if (!_channels[_curChannel].dataptr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
736 continue;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
737 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
738
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
739 Channel &channel = _channels[_curChannel];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
740 _curRegOffset = _regOffset[_curChannel];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
741
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
742 if (channel.tempoReset) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
743 channel.tempo = _tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
744 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
745
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
746 uint8 backup = channel.position;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
747 channel.position += channel.tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
748 if (channel.position < backup) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
749 if (--channel.duration) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
750 if (channel.duration == channel.spacing2)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
751 noteOff(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
752 if (channel.duration == channel.spacing1 && _curChannel != 9)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
753 noteOff(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
754 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
755 // An opcode is not allowed to modify its own
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
756 // data pointer except through the 'dataptr'
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
757 // parameter. To enforce that, we have to work
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
758 // on a copy of the data pointer.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
759 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
760 // This fixes a subtle music bug where the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
761 // wrong music would play when getting the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
762 // quill in Kyra 1.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
763 uint8 *dataptr = channel.dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
764 while (dataptr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
765 uint8 opcode = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
766 uint8 param = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
767
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
768 if (opcode & 0x80) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
769 opcode &= 0x7F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
770 if (opcode >= _parserOpcodeTableSize)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
771 opcode = _parserOpcodeTableSize - 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
772 debugC(9, kDebugLevelSound, "Calling opcode '%s' (%d) (channel: %d)", _parserOpcodeTable[opcode].name, opcode, _curChannel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
773 result = (this->*(_parserOpcodeTable[opcode].function))(dataptr, channel, param);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
774 channel.dataptr = dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
775 if (result)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
776 break;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
777 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
778 debugC(9, kDebugLevelSound, "Note on opcode 0x%02X (duration: %d) (channel: %d)", opcode, param, _curChannel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
779 setupNote(opcode, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
780 noteOn(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
781 setupDuration(param, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
782 if (param) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
783 channel.dataptr = dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
784 break;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
785 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
786 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
787 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
788 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
789 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
790
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
791 if (result == 1) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
792 if (channel.primaryEffect)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
793 (this->*(channel.primaryEffect))(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
794 if (channel.secondaryEffect)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
795 (this->*(channel.secondaryEffect))(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
796 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
797 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
798 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
799
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
800 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
801
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
802 void AdlibDriver::resetAdlibState() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
803 debugC(9, kDebugLevelSound, "resetAdlibState()");
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
804 _rnd = 0x1234;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
805
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
806 // Authorize the control of the waveforms
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
807 writeOPL(0x01, 0x20);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
808
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
809 // Select FM music mode
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
810 writeOPL(0x08, 0x00);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
811
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
812 // I would guess the main purpose of this is to turn off the rhythm,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
813 // thus allowing us to use 9 melodic voices instead of 6.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
814 writeOPL(0xBD, 0x00);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
815
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
816 int loop = 10;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
817 while (loop--) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
818 if (loop != 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
819 // Silence the channel
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
820 writeOPL(0x40 + _regOffset[loop], 0x3F);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
821 writeOPL(0x43 + _regOffset[loop], 0x3F);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
822 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
823 initChannel(_channels[loop]);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
824 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
825 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
826
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
827 // Old calling style: output0x388(0xABCD)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
828 // New calling style: writeOPL(0xAB, 0xCD)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
829
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
830 void AdlibDriver::writeOPL(byte reg, byte val) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
831 opl->write(reg, val);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
832 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
833
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
834 void AdlibDriver::initChannel(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
835 debugC(9, kDebugLevelSound, "initChannel(%lu)", (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
836 memset(&channel.dataptr, 0, sizeof(Channel) - ((char*)&channel.dataptr - (char*)&channel));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
837
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
838 channel.tempo = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
839 channel.priority = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
840 // normally here are nullfuncs but we set 0 for now
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
841 channel.primaryEffect = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
842 channel.secondaryEffect = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
843 channel.spacing1 = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
844 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
845
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
846 void AdlibDriver::noteOff(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
847 debugC(9, kDebugLevelSound, "noteOff(%lu)", (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
848
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
849 // The control channel has no corresponding Adlib channel
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
850
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
851 if (_curChannel >= 9)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
852 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
853
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
854 // When the rhythm section is enabled, channels 6, 7 and 8 are special.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
855
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
856 if (_rhythmSectionBits && _curChannel >= 6)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
857 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
858
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
859 // This means the "Key On" bit will always be 0
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
860 channel.regBx &= 0xDF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
861
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
862 // Octave / F-Number / Key-On
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
863 writeOPL(0xB0 + _curChannel, channel.regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
864 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
865
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
866 void AdlibDriver::unkOutput2(uint8 chan) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
867 debugC(9, kDebugLevelSound, "unkOutput2(%d)", chan);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
868
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
869 // The control channel has no corresponding Adlib channel
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
870
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
871 if (chan >= 9)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
872 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
873
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
874 // I believe this has to do with channels 6, 7, and 8 being special
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
875 // when Adlib's rhythm section is enabled.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
876
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
877 if (_rhythmSectionBits && chan >= 6)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
878 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
879
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
880 uint8 offset = _regOffset[chan];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
881
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
882 // The channel is cleared: First the attack/delay rate, then the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
883 // sustain level/release rate, and finally the note is turned off.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
884
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
885 writeOPL(0x60 + offset, 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
886 writeOPL(0x63 + offset, 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
887
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
888 writeOPL(0x80 + offset, 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
889 writeOPL(0x83 + offset, 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
890
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
891 writeOPL(0xB0 + chan, 0x00);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
892
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
893 // ...and then the note is turned on again, with whatever value is
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
894 // still lurking in the A0 + chan register, but everything else -
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
895 // including the two most significant frequency bit, and the octave -
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
896 // set to zero.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
897 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
898 // This is very strange behaviour, and causes problems with the ancient
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
899 // FMOPL code we borrowed from AdPlug. I've added a workaround. See
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
900 // fmopl.cpp for more details.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
901 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
902 // More recent versions of the MAME FMOPL don't seem to have this
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
903 // problem, but cannot currently be used because of licensing and
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
904 // performance issues.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
905 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
906 // Ken Silverman's Adlib emulator (which can be found on his Web page -
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
907 // http://www.advsys.net/ken - and as part of AdPlug) also seems to be
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
908 // immune, but is apparently not as feature complete as MAME's.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
909
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
910 writeOPL(0xB0 + chan, 0x20);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
911 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
912
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
913 // I believe this is a random number generator. It actually does seem to
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
914 // generate an even distribution of almost all numbers from 0 through 65535,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
915 // though in my tests some numbers were never generated.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
916
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
917 uint16 AdlibDriver::getRandomNr() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
918 _rnd += 0x9248;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
919 uint16 lowBits = _rnd & 7;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
920 _rnd >>= 3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
921 _rnd |= (lowBits << 13);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
922 return _rnd;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
923 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
924
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
925 void AdlibDriver::setupDuration(uint8 duration, Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
926 debugC(9, kDebugLevelSound, "setupDuration(%d, %lu)", duration, (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
927 if (channel.durationRandomness) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
928 channel.duration = duration + (getRandomNr() & channel.durationRandomness);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
929 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
930 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
931 if (channel.fractionalSpacing) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
932 channel.spacing2 = (duration >> 3) * channel.fractionalSpacing;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
933 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
934 channel.duration = duration;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
935 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
936
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
937 // This function may or may not play the note. It's usually followed by a call
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
938 // to noteOn(), which will always play the current note.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
939
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
940 void AdlibDriver::setupNote(uint8 rawNote, Channel &channel, bool flag) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
941 debugC(9, kDebugLevelSound, "setupNote(%d, %lu)", rawNote, (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
942
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
943 channel.rawNote = rawNote;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
944
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
945 int8 note = (rawNote & 0x0F) + channel.baseNote;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
946 int8 octave = ((rawNote + channel.baseOctave) >> 4) & 0x0F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
947
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
948 // There are only twelve notes. If we go outside that, we have to
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
949 // adjust the note and octave.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
950
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
951 if (note >= 12) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
952 note -= 12;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
953 octave++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
954 } else if (note < 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
955 note += 12;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
956 octave--;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
957 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
958
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
959 // The calculation of frequency looks quite different from the original
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
960 // disassembly at a first glance, but when you consider that the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
961 // largest possible value would be 0x0246 + 0xFF + 0x47 (and that's if
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
962 // baseFreq is unsigned), freq is still a 10-bit value, just as it
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
963 // should be to fit in the Ax and Bx registers.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
964 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
965 // If it were larger than that, it could have overflowed into the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
966 // octave bits, and that could possibly have been used in some sound.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
967 // But as it is now, I can't see any way it would happen.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
968
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
969 uint16 freq = _unkTable[note] + channel.baseFreq;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
970
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
971 // When called from callback 41, the behaviour is slightly different:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
972 // We adjust the frequency, even when channel.unk16 is 0.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
973
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
974 if (channel.unk16 || flag) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
975 const uint8 *table;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
976
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
977 if (channel.unk16 >= 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
978 table = _unkTables[(channel.rawNote & 0x0F) + 2];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
979 freq += table[channel.unk16];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
980 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
981 table = _unkTables[channel.rawNote & 0x0F];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
982 freq -= table[-channel.unk16];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
983 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
984 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
985
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
986 channel.regAx = freq & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
987 channel.regBx = (channel.regBx & 0x20) | (octave << 2) | ((freq >> 8) & 0x03);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
988
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
989 // Keep the note on or off
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
990 writeOPL(0xA0 + _curChannel, channel.regAx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
991 writeOPL(0xB0 + _curChannel, channel.regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
992 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
993
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
994 void AdlibDriver::setupInstrument(uint8 regOffset, uint8 *dataptr, Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
995 debugC(9, kDebugLevelSound, "setupInstrument(%d, %p, %lu)", regOffset, (const void *)dataptr, (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
996 // Amplitude Modulation / Vibrato / Envelope Generator Type /
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
997 // Keyboard Scaling Rate / Modulator Frequency Multiple
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
998 writeOPL(0x20 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
999 writeOPL(0x23 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1000
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1001 uint8 temp = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1002
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1003 // Feedback / Algorithm
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1004
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1005 // It is very likely that _curChannel really does refer to the same
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1006 // channel as regOffset, but there's only one Cx register per channel.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1007
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1008 writeOPL(0xC0 + _curChannel, temp);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1009
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1010 // The algorithm bit. I don't pretend to understand this fully, but
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1011 // "If set to 0, operator 1 modulates operator 2. In this case,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1012 // operator 2 is the only one producing sound. If set to 1, both
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1013 // operators produce sound directly. Complex sounds are more easily
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1014 // created if the algorithm is set to 0."
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1015
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1016 channel.twoChan = temp & 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1017
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1018 // Waveform Select
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1019 writeOPL(0xE0 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1020 writeOPL(0xE3 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1021
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1022 channel.opLevel1 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1023 channel.opLevel2 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1024
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1025 // Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1026 writeOPL(0x40 + regOffset, calculateOpLevel1(channel));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1027 writeOPL(0x43 + regOffset, calculateOpLevel2(channel));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1028
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1029 // Attack Rate / Decay Rate
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1030 writeOPL(0x60 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1031 writeOPL(0x63 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1032
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1033 // Sustain Level / Release Rate
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1034 writeOPL(0x80 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1035 writeOPL(0x83 + regOffset, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1036 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1037
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1038 // Apart from playing the note, this function also updates the variables for
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1039 // primary effect 2.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1040
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1041 void AdlibDriver::noteOn(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1042 debugC(9, kDebugLevelSound, "noteOn(%lu)", (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1043
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1044 // The "note on" bit is set, and the current note is played.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1045
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1046 channel.regBx |= 0x20;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1047 writeOPL(0xB0 + _curChannel, channel.regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1048
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1049 int8 shift = 9 - channel.unk33;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1050 uint16 temp = channel.regAx | (channel.regBx << 8);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1051 channel.unk37 = ((temp & 0x3FF) >> shift) & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1052 channel.unk38 = channel.unk36;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1053 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1054
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1055 void AdlibDriver::adjustVolume(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1056 debugC(9, kDebugLevelSound, "adjustVolume(%lu)", (long)(&channel - _channels));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1057 // Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1058
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1059 writeOPL(0x43 + _regOffset[_curChannel], calculateOpLevel2(channel));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1060 if (channel.twoChan)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1061 writeOPL(0x40 + _regOffset[_curChannel], calculateOpLevel1(channel));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1062 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1063
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1064 // This is presumably only used for some sound effects, e.g. Malcolm blowing up
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1065 // the trees in the intro (but not the effect where he "booby-traps" the big
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1066 // tree) and turning Kallak to stone. Related functions and variables:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1067 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1068 // update_setupPrimaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1069 // - Initialises unk29, unk30 and unk31
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1070 // - unk29 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1071 // - unk30 is not further modified, except by update_removePrimaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1072 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1073 // update_removePrimaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1074 // - Deinitialises unk30
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1075 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1076 // unk29 - determines how often the notes are played
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1077 // unk30 - modifies the frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1078 // unk31 - determines how often the notes are played
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1079
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1080 void AdlibDriver::primaryEffect1(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1081 debugC(9, kDebugLevelSound, "Calling primaryEffect1 (channel: %d)", _curChannel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1082 uint8 temp = channel.unk31;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1083 channel.unk31 += channel.unk29;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1084 if (channel.unk31 >= temp)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1085 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1086
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1087 // Initialise unk1 to the current frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1088 uint16 unk1 = ((channel.regBx & 3) << 8) | channel.regAx;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1089
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1090 // This is presumably to shift the "note on" bit so far to the left
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1091 // that it won't be affected by any of the calculations below.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1092 uint16 unk2 = ((channel.regBx & 0x20) << 8) | (channel.regBx & 0x1C);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1093
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1094 int16 unk3 = (int16)channel.unk30;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1095
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1096 if (unk3 >= 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1097 unk1 += unk3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1098 if (unk1 >= 734) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1099 // The new frequency is too high. Shift it down and go
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1100 // up one octave.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1101 unk1 >>= 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1102 if (!(unk1 & 0x3FF))
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1103 ++unk1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1104 unk2 = (unk2 & 0xFF00) | ((unk2 + 4) & 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1105 unk2 &= 0xFF1C;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1106 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1107 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1108 unk1 += unk3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1109 if (unk1 < 388) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1110 // The new frequency is too low. Shift it up and go
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1111 // down one octave.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1112 unk1 <<= 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1113 if (!(unk1 & 0x3FF))
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1114 --unk1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1115 unk2 = (unk2 & 0xFF00) | ((unk2 - 4) & 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1116 unk2 &= 0xFF1C;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1117 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1118 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1119
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1120 // Make sure that the new frequency is still a 10-bit value.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1121 unk1 &= 0x3FF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1122
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1123 writeOPL(0xA0 + _curChannel, unk1 & 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1124 channel.regAx = unk1 & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1125
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1126 // Shift down the "note on" bit again.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1127 uint8 value = unk1 >> 8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1128 value |= (unk2 >> 8) & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1129 value |= unk2 & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1130
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1131 writeOPL(0xB0 + _curChannel, value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1132 channel.regBx = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1133 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1134
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1135 // This is presumably only used for some sound effects, e.g. Malcolm entering
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1136 // and leaving Kallak's hut. Related functions and variables:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1137 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1138 // update_setupPrimaryEffect2()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1139 // - Initialises unk32, unk33, unk34, unk35 and unk36
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1140 // - unk32 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1141 // - unk33 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1142 // - unk34 is a countdown that gets reinitialised to unk35 on zero
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1143 // - unk35 is based on unk34 and not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1144 // - unk36 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1145 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1146 // noteOn()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1147 // - Plays the current note
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1148 // - Updates unk37 with a new (lower?) frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1149 // - Copies unk36 to unk38. The unk38 variable is a countdown.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1150 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1151 // unk32 - determines how often the notes are played
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1152 // unk33 - modifies the frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1153 // unk34 - countdown, updates frequency on zero
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1154 // unk35 - initialiser for unk34 countdown
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1155 // unk36 - initialiser for unk38 countdown
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1156 // unk37 - frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1157 // unk38 - countdown, begins playing on zero
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1158 // unk41 - determines how often the notes are played
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1159 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1160 // Note that unk41 is never initialised. Not that it should matter much, but it
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1161 // is a bit sloppy.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1162
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1163 void AdlibDriver::primaryEffect2(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1164 debugC(9, kDebugLevelSound, "Calling primaryEffect2 (channel: %d)", _curChannel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1165 if (channel.unk38) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1166 --channel.unk38;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1167 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1168 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1169
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1170 uint8 temp = channel.unk41;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1171 channel.unk41 += channel.unk32;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1172 if (channel.unk41 < temp) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1173 uint16 unk1 = channel.unk37;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1174 if (!(--channel.unk34)) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1175 unk1 ^= 0xFFFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1176 ++unk1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1177 channel.unk37 = unk1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1178 channel.unk34 = channel.unk35;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1179 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1180
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1181 uint16 unk2 = (channel.regAx | (channel.regBx << 8)) & 0x3FF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1182 unk2 += unk1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1183
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1184 channel.regAx = unk2 & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1185 channel.regBx = (channel.regBx & 0xFC) | (unk2 >> 8);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1186
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1187 // Octave / F-Number / Key-On
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1188 writeOPL(0xA0 + _curChannel, channel.regAx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1189 writeOPL(0xB0 + _curChannel, channel.regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1190 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1191 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1192
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1193 // I don't know where this is used. The same operation is performed several
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1194 // times on the current channel, using a chunk of the _soundData[] buffer for
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1195 // parameters. The parameters are used starting at the end of the chunk.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1196 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1197 // Since we use _curRegOffset to specify the final register, it's quite
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1198 // unlikely that this function is ever used to play notes. It's probably only
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1199 // used to modify the sound. Another thing that supports this idea is that it
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1200 // can be combined with any of the effects callbacks above.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1201 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1202 // Related functions and variables:
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1203 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1204 // update_setupSecondaryEffect1()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1205 // - Initialies unk18, unk19, unk20, unk21, unk22 and offset
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1206 // - unk19 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1207 // - unk20 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1208 // - unk22 is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1209 // - offset is not further modified
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1210 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1211 // unk18 - determines how often the operation is performed
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1212 // unk19 - determines how often the operation is performed
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1213 // unk20 - the start index into the data chunk
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1214 // unk21 - the current index into the data chunk
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1215 // unk22 - the operation to perform
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1216 // offset - the offset to the data chunk
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1217
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1218 void AdlibDriver::secondaryEffect1(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1219 debugC(9, kDebugLevelSound, "Calling secondaryEffect1 (channel: %d)", _curChannel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1220 uint8 temp = channel.unk18;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1221 channel.unk18 += channel.unk19;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1222 if (channel.unk18 < temp) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1223 if (--channel.unk21 < 0) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1224 channel.unk21 = channel.unk20;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1225 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1226 writeOPL(channel.unk22 + _curRegOffset, _soundData[channel.offset + channel.unk21]);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1227 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1228 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1229
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1230 uint8 AdlibDriver::calculateOpLevel1(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1231 int8 value = channel.opLevel1 & 0x3F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1232
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1233 if (channel.twoChan) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1234 value += channel.opExtraLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1235 value += channel.opExtraLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1236 value += channel.opExtraLevel3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1237 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1238
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1239 // Preserve the scaling level bits from opLevel1
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1240
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1241 return checkValue(value) | (channel.opLevel1 & 0xC0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1242 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1243
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1244 uint8 AdlibDriver::calculateOpLevel2(Channel &channel) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1245 int8 value = channel.opLevel2 & 0x3F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1246
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1247 value += channel.opExtraLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1248 value += channel.opExtraLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1249 value += channel.opExtraLevel3;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1250
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1251 // Preserve the scaling level bits from opLevel2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1252
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1253 return checkValue(value) | (channel.opLevel2 & 0xC0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1254 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1255
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1256 // parser opcodes
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1257
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1258 int AdlibDriver::update_setRepeat(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1259 channel.repeatCounter = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1260 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1261 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1262
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1263 int AdlibDriver::update_checkRepeat(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1264 ++dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1265 if (--channel.repeatCounter) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1266 int16 add = READ_LE_UINT16(dataptr - 2);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1267 dataptr += add;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1268 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1269 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1270 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1271
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1272 int AdlibDriver::update_setupProgram(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1273 if (value == 0xFF)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1274 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1275
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1276 uint8 *ptr = getProgram(value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1277 uint8 chan = *ptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1278 uint8 priority = *ptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1279
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1280 Channel &channel2 = _channels[chan];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1281
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1282 if (priority >= channel2.priority) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1283 _flagTrigger = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1284 _flags |= 8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1285 initChannel(channel2);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1286 channel2.priority = priority;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1287 channel2.dataptr = ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1288 channel2.tempo = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1289 channel2.position = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1290 channel2.duration = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1291 unkOutput2(chan);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1292 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1293
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1294 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1295 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1296
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1297 int AdlibDriver::update_setNoteSpacing(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1298 channel.spacing1 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1299 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1300 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1301
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1302 int AdlibDriver::update_jump(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1303 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1304 int16 add = READ_LE_UINT16(dataptr); dataptr += 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1305 dataptr += add;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1306 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1307 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1308
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1309 int AdlibDriver::update_jumpToSubroutine(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1310 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1311 int16 add = READ_LE_UINT16(dataptr); dataptr += 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1312 channel.dataptrStack[channel.dataptrStackPos++] = dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1313 dataptr += add;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1314 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1315 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1316
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1317 int AdlibDriver::update_returnFromSubroutine(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1318 dataptr = channel.dataptrStack[--channel.dataptrStackPos];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1319 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1320 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1321
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1322 int AdlibDriver::update_setBaseOctave(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1323 channel.baseOctave = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1324 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1325 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1326
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1327 int AdlibDriver::update_stopChannel(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1328 channel.priority = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1329 if (_curChannel != 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1330 noteOff(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1331 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1332 dataptr = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1333 return 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1334 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1335
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1336 int AdlibDriver::update_playRest(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1337 setupDuration(value, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1338 noteOff(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1339 return (value != 0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1340 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1341
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1342 int AdlibDriver::update_writeAdlib(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1343 writeOPL(value, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1344 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1345 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1346
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1347 int AdlibDriver::update_setupNoteAndDuration(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1348 setupNote(value, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1349 value = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1350 setupDuration(value, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1351 return (value != 0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1352 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1353
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1354 int AdlibDriver::update_setBaseNote(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1355 channel.baseNote = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1356 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1357 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1358
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1359 int AdlibDriver::update_setupSecondaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1360 channel.unk18 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1361 channel.unk19 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1362 channel.unk20 = channel.unk21 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1363 channel.unk22 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1364 channel.offset = READ_LE_UINT16(dataptr); dataptr += 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1365 channel.secondaryEffect = &AdlibDriver::secondaryEffect1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1366 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1367 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1368
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1369 int AdlibDriver::update_stopOtherChannel(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1370 Channel &channel2 = _channels[value];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1371 channel2.duration = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1372 channel2.priority = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1373 channel2.dataptr = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1374 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1375 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1376
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1377 int AdlibDriver::update_waitForEndOfProgram(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1378 uint8 *ptr = getProgram(value);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1379 uint8 chan = *ptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1380
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1381 if (!_channels[chan].dataptr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1382 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1383 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1384
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1385 dataptr -= 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1386 return 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1387 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1388
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1389 int AdlibDriver::update_setupInstrument(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1390 setupInstrument(_curRegOffset, getInstrument(value), channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1391 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1392 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1393
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1394 int AdlibDriver::update_setupPrimaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1395 channel.unk29 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1396 channel.unk30 = READ_BE_UINT16(dataptr);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1397 dataptr += 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1398 channel.primaryEffect = &AdlibDriver::primaryEffect1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1399 channel.unk31 = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1400 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1401 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1402
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1403 int AdlibDriver::update_removePrimaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1404 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1405 channel.primaryEffect = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1406 channel.unk30 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1407 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1408 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1409
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1410 int AdlibDriver::update_setBaseFreq(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1411 channel.baseFreq = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1412 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1413 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1414
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1415 int AdlibDriver::update_setupPrimaryEffect2(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1416 channel.unk32 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1417 channel.unk33 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1418 uint8 temp = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1419 channel.unk34 = temp + 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1420 channel.unk35 = temp << 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1421 channel.unk36 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1422 channel.primaryEffect = &AdlibDriver::primaryEffect2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1423 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1424 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1425
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1426 int AdlibDriver::update_setPriority(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1427 channel.priority = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1428 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1429 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1430
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1431 int AdlibDriver::updateCallback23(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1432 value >>= 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1433 _unkValue1 = _unkValue2 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1434 _unkValue3 = 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1435 _unkValue4 = _unkValue5 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1436 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1437 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1438
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1439 int AdlibDriver::updateCallback24(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1440 if (_unkValue5) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1441 if (_unkValue4 & value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1442 _unkValue5 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1443 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1444 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1445 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1446
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1447 if (!(value & _unkValue4)) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1448 ++_unkValue5;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1449 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1450
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1451 dataptr -= 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1452 channel.duration = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1453 return 2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1454 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1455
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1456 int AdlibDriver::update_setExtraLevel1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1457 channel.opExtraLevel1 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1458 adjustVolume(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1459 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1460 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1461
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1462 int AdlibDriver::update_setupDuration(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1463 setupDuration(value, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1464 return (value != 0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1465 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1466
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1467 int AdlibDriver::update_playNote(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1468 setupDuration(value, channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1469 noteOn(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1470 return (value != 0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1471 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1472
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1473 int AdlibDriver::update_setFractionalNoteSpacing(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1474 channel.fractionalSpacing = value & 7;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1475 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1476 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1477
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1478 int AdlibDriver::update_setTempo(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1479 _tempo = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1480 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1481 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1482
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1483 int AdlibDriver::update_removeSecondaryEffect1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1484 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1485 channel.secondaryEffect = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1486 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1487 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1488
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1489 int AdlibDriver::update_setChannelTempo(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1490 channel.tempo = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1491 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1492 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1493
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1494 int AdlibDriver::update_setExtraLevel3(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1495 channel.opExtraLevel3 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1496 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1497 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1498
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1499 int AdlibDriver::update_setExtraLevel2(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1500 int channelBackUp = _curChannel;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1501
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1502 _curChannel = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1503 Channel &channel2 = _channels[value];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1504 channel2.opExtraLevel2 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1505 adjustVolume(channel2);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1506
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1507 _curChannel = channelBackUp;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1508 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1509 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1510
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1511 int AdlibDriver::update_changeExtraLevel2(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1512 int channelBackUp = _curChannel;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1513
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1514 _curChannel = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1515 Channel &channel2 = _channels[value];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1516 channel2.opExtraLevel2 += *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1517 adjustVolume(channel2);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1518
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1519 _curChannel = channelBackUp;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1520 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1521 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1522
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1523 // Apart from initialising to zero, these two functions are the only ones that
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1524 // modify _vibratoAndAMDepthBits.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1525
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1526 int AdlibDriver::update_setAMDepth(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1527 if (value & 1)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1528 _vibratoAndAMDepthBits |= 0x80;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1529 else
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1530 _vibratoAndAMDepthBits &= 0x7F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1531
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1532 writeOPL(0xBD, _vibratoAndAMDepthBits);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1533 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1534 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1535
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1536 int AdlibDriver::update_setVibratoDepth(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1537 if (value & 1)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1538 _vibratoAndAMDepthBits |= 0x40;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1539 else
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1540 _vibratoAndAMDepthBits &= 0xBF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1541
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1542 writeOPL(0xBD, _vibratoAndAMDepthBits);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1543 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1544 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1545
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1546 int AdlibDriver::update_changeExtraLevel1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1547 channel.opExtraLevel1 += value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1548 adjustVolume(channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1549 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1550 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1551
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1552 int AdlibDriver::updateCallback38(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1553 int channelBackUp = _curChannel;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1554
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1555 _curChannel = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1556 Channel &channel2 = _channels[value];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1557 channel2.duration = channel2.priority = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1558 channel2.dataptr = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1559 channel2.opExtraLevel2 = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1560
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1561 if (value != 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1562 uint8 outValue = _regOffset[value];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1563
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1564 // Feedback strength / Connection type
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1565 writeOPL(0xC0 + _curChannel, 0x00);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1566
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1567 // Key scaling level / Operator output level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1568 writeOPL(0x43 + outValue, 0x3F);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1569
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1570 // Sustain Level / Release Rate
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1571 writeOPL(0x83 + outValue, 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1572
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1573 // Key On / Octave / Frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1574 writeOPL(0xB0 + _curChannel, 0x00);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1575 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1576
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1577 _curChannel = channelBackUp;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1578 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1579 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1580
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1581 int AdlibDriver::updateCallback39(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1582 uint16 unk = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1583 unk |= value << 8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1584 unk &= getRandomNr();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1585
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1586 uint16 unk2 = ((channel.regBx & 0x1F) << 8) | channel.regAx;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1587 unk2 += unk;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1588 unk2 |= ((channel.regBx & 0x20) << 8);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1589
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1590 // Frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1591 writeOPL(0xA0 + _curChannel, unk2 & 0xFF);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1592
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1593 // Key On / Octave / Frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1594 writeOPL(0xB0 + _curChannel, (unk2 & 0xFF00) >> 8);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1595
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1596 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1597 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1598
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1599 int AdlibDriver::update_removePrimaryEffect2(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1600 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1601 channel.primaryEffect = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1602 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1603 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1604
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1605 int AdlibDriver::updateCallback41(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1606 channel.unk16 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1607 setupNote(channel.rawNote, channel, true);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1608 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1609 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1610
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1611 int AdlibDriver::update_resetToGlobalTempo(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1612 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1613 channel.tempo = _tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1614 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1615 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1616
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1617 int AdlibDriver::update_nop1(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1618 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1619 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1620 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1621
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1622 int AdlibDriver::update_setDurationRandomness(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1623 channel.durationRandomness = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1624 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1625 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1626
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1627 int AdlibDriver::update_changeChannelTempo(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1628 int tempo = channel.tempo + (int8)value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1629
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1630 if (tempo <= 0)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1631 tempo = 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1632 else if (tempo > 255)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1633 tempo = 255;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1634
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1635 channel.tempo = tempo;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1636 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1637 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1638
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1639 int AdlibDriver::updateCallback46(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1640 uint8 entry = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1641 _tablePtr1 = _unkTable2[entry++];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1642 _tablePtr2 = _unkTable2[entry];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1643 if (value == 2) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1644 // Frequency
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1645 writeOPL(0xA0, _tablePtr2[0]);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1646 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1647 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1648 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1649
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1650 // TODO: This is really the same as update_nop1(), so they should be combined
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1651 // into one single update_nop().
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1652
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1653 int AdlibDriver::update_nop2(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1654 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1655 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1656 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1657
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1658 int AdlibDriver::update_setupRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1659 int channelBackUp = _curChannel;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1660 int regOffsetBackUp = _curRegOffset;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1661
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1662 _curChannel = 6;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1663 _curRegOffset = _regOffset[6];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1664
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1665 setupInstrument(_curRegOffset, getInstrument(value), channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1666 _unkValue6 = channel.opLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1667
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1668 _curChannel = 7;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1669 _curRegOffset = _regOffset[7];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1670
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1671 setupInstrument(_curRegOffset, getInstrument(*dataptr++), channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1672 _unkValue7 = channel.opLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1673 _unkValue8 = channel.opLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1674
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1675 _curChannel = 8;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1676 _curRegOffset = _regOffset[8];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1677
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1678 setupInstrument(_curRegOffset, getInstrument(*dataptr++), channel);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1679 _unkValue9 = channel.opLevel1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1680 _unkValue10 = channel.opLevel2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1681
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1682 // Octave / F-Number / Key-On for channels 6, 7 and 8
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1683
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1684 _channels[6].regBx = *dataptr++ & 0x2F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1685 writeOPL(0xB6, _channels[6].regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1686 writeOPL(0xA6, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1687
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1688 _channels[7].regBx = *dataptr++ & 0x2F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1689 writeOPL(0xB7, _channels[7].regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1690 writeOPL(0xA7, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1691
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1692 _channels[8].regBx = *dataptr++ & 0x2F;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1693 writeOPL(0xB8, _channels[8].regBx);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1694 writeOPL(0xA8, *dataptr++);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1695
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1696 _rhythmSectionBits = 0x20;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1697
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1698 _curRegOffset = regOffsetBackUp;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1699 _curChannel = channelBackUp;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1700 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1701 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1702
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1703 int AdlibDriver::update_playRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1704 // Any instrument that we want to play, and which was already playing,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1705 // is temporarily keyed off. Instruments that were off already, or
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1706 // which we don't want to play, retain their old on/off status. This is
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1707 // probably so that the instrument's envelope is played from its
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1708 // beginning again...
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1709
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1710 writeOPL(0xBD, (_rhythmSectionBits & ~(value & 0x1F)) | 0x20);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1711
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1712 // ...but since we only set the rhythm instrument bits, and never clear
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1713 // them (until the entire rhythm section is disabled), I'm not sure how
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1714 // useful the cleverness above is. We could perhaps simply turn off all
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1715 // the rhythm instruments instead.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1716
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1717 _rhythmSectionBits |= value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1718
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1719 writeOPL(0xBD, _vibratoAndAMDepthBits | 0x20 | _rhythmSectionBits);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1720 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1721 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1722
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1723 int AdlibDriver::update_removeRhythmSection(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1724 --dataptr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1725 _rhythmSectionBits = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1726
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1727 // All the rhythm bits are cleared. The AM and Vibrato depth bits
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1728 // remain unchanged.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1729
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1730 writeOPL(0xBD, _vibratoAndAMDepthBits);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1731 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1732 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1733
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1734 int AdlibDriver::updateCallback51(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1735 uint8 value2 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1736
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1737 if (value & 1) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1738 _unkValue12 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1739
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1740 // Channel 7, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1741 writeOPL(0x51, checkValue(value2 + _unkValue7 + _unkValue11 + _unkValue12));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1742 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1743
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1744 if (value & 2) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1745 _unkValue14 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1746
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1747 // Channel 8, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1748 writeOPL(0x55, checkValue(value2 + _unkValue10 + _unkValue13 + _unkValue14));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1749 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1750
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1751 if (value & 4) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1752 _unkValue15 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1753
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1754 // Channel 8, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1755 writeOPL(0x52, checkValue(value2 + _unkValue9 + _unkValue16 + _unkValue15));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1756 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1757
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1758 if (value & 8) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1759 _unkValue18 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1760
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1761 // Channel 7, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1762 writeOPL(0x54, checkValue(value2 + _unkValue8 + _unkValue17 + _unkValue18));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1763 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1764
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1765 if (value & 16) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1766 _unkValue20 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1767
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1768 // Channel 6, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1769 writeOPL(0x53, checkValue(value2 + _unkValue6 + _unkValue19 + _unkValue20));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1770 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1771
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1772 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1773 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1774
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1775 int AdlibDriver::updateCallback52(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1776 uint8 value2 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1777
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1778 if (value & 1) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1779 _unkValue11 = checkValue(value2 + _unkValue7 + _unkValue11 + _unkValue12);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1780
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1781 // Channel 7, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1782 writeOPL(0x51, _unkValue11);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1783 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1784
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1785 if (value & 2) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1786 _unkValue13 = checkValue(value2 + _unkValue10 + _unkValue13 + _unkValue14);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1787
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1788 // Channel 8, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1789 writeOPL(0x55, _unkValue13);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1790 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1791
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1792 if (value & 4) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1793 _unkValue16 = checkValue(value2 + _unkValue9 + _unkValue16 + _unkValue15);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1794
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1795 // Channel 8, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1796 writeOPL(0x52, _unkValue16);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1797 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1798
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1799 if (value & 8) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1800 _unkValue17 = checkValue(value2 + _unkValue8 + _unkValue17 + _unkValue18);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1801
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1802 // Channel 7, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1803 writeOPL(0x54, _unkValue17);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1804 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1805
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1806 if (value & 16) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1807 _unkValue19 = checkValue(value2 + _unkValue6 + _unkValue19 + _unkValue20);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1808
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1809 // Channel 6, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1810 writeOPL(0x53, _unkValue19);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1811 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1812
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1813 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1814 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1815
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1816 int AdlibDriver::updateCallback53(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1817 uint8 value2 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1818
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1819 if (value & 1) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1820 _unkValue11 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1821
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1822 // Channel 7, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1823 writeOPL(0x51, checkValue(value2 + _unkValue7 + _unkValue12));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1824 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1825
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1826 if (value & 2) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1827 _unkValue13 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1828
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1829 // Channel 8, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1830 writeOPL(0x55, checkValue(value2 + _unkValue10 + _unkValue14));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1831 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1832
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1833 if (value & 4) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1834 _unkValue16 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1835
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1836 // Channel 8, op1: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1837 writeOPL(0x52, checkValue(value2 + _unkValue9 + _unkValue15));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1838 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1839
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1840 if (value & 8) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1841 _unkValue17 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1842
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1843 // Channel 7, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1844 writeOPL(0x54, checkValue(value2 + _unkValue8 + _unkValue18));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1845 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1846
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1847 if (value & 16) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1848 _unkValue19 = value2;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1849
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1850 // Channel 6, op2: Level Key Scaling / Total Level
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1851 writeOPL(0x53, checkValue(value2 + _unkValue6 + _unkValue20));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1852 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1853
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1854 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1855 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1856
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1857 int AdlibDriver::update_setSoundTrigger(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1858 _soundTrigger = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1859 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1860 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1861
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1862 int AdlibDriver::update_setTempoReset(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1863 channel.tempoReset = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1864 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1865 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1866
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1867 int AdlibDriver::updateCallback56(uint8 *&dataptr, Channel &channel, uint8 value) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1868 channel.unk39 = value;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1869 channel.unk40 = *dataptr++;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1870 return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1871 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1872
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1873 // static res
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1874
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1875 #define COMMAND(x) { &AdlibDriver::x, #x }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1876
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1877 void AdlibDriver::setupOpcodeList() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1878 static const OpcodeEntry opcodeList[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1879 COMMAND(snd_ret0x100),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1880 COMMAND(snd_ret0x1983),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1881 COMMAND(snd_initDriver),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1882 COMMAND(snd_deinitDriver),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1883 COMMAND(snd_setSoundData),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1884 COMMAND(snd_unkOpcode1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1885 COMMAND(snd_startSong),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1886 COMMAND(snd_unkOpcode2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1887 COMMAND(snd_unkOpcode3),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1888 COMMAND(snd_readByte),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1889 COMMAND(snd_writeByte),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1890 COMMAND(snd_getSoundTrigger),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1891 COMMAND(snd_unkOpcode4),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1892 COMMAND(snd_dummy),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1893 COMMAND(snd_getNullvar4),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1894 COMMAND(snd_setNullvar3),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1895 COMMAND(snd_setFlag),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1896 COMMAND(snd_clearFlag)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1897 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1898
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1899 _opcodeList = opcodeList;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1900 _opcodesEntries = ARRAYSIZE(opcodeList);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1901 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1902
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1903 void AdlibDriver::setupParserOpcodeTable() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1904 static const ParserOpcode parserOpcodeTable[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1905 // 0
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1906 COMMAND(update_setRepeat),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1907 COMMAND(update_checkRepeat),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1908 COMMAND(update_setupProgram),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1909 COMMAND(update_setNoteSpacing),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1910
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1911 // 4
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1912 COMMAND(update_jump),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1913 COMMAND(update_jumpToSubroutine),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1914 COMMAND(update_returnFromSubroutine),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1915 COMMAND(update_setBaseOctave),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1916
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1917 // 8
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1918 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1919 COMMAND(update_playRest),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1920 COMMAND(update_writeAdlib),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1921 COMMAND(update_setupNoteAndDuration),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1922
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1923 // 12
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1924 COMMAND(update_setBaseNote),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1925 COMMAND(update_setupSecondaryEffect1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1926 COMMAND(update_stopOtherChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1927 COMMAND(update_waitForEndOfProgram),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1928
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1929 // 16
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1930 COMMAND(update_setupInstrument),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1931 COMMAND(update_setupPrimaryEffect1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1932 COMMAND(update_removePrimaryEffect1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1933 COMMAND(update_setBaseFreq),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1934
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1935 // 20
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1936 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1937 COMMAND(update_setupPrimaryEffect2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1938 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1939 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1940
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1941 // 24
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1942 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1943 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1944 COMMAND(update_setPriority),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1945 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1946
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1947 // 28
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1948 COMMAND(updateCallback23),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1949 COMMAND(updateCallback24),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1950 COMMAND(update_setExtraLevel1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1951 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1952
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1953 // 32
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1954 COMMAND(update_setupDuration),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1955 COMMAND(update_playNote),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1956 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1957 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1958
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1959 // 36
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1960 COMMAND(update_setFractionalNoteSpacing),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1961 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1962 COMMAND(update_setTempo),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1963 COMMAND(update_removeSecondaryEffect1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1964
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1965 // 40
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1966 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1967 COMMAND(update_setChannelTempo),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1968 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1969 COMMAND(update_setExtraLevel3),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1970
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1971 // 44
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1972 COMMAND(update_setExtraLevel2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1973 COMMAND(update_changeExtraLevel2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1974 COMMAND(update_setAMDepth),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1975 COMMAND(update_setVibratoDepth),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1976
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1977 // 48
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1978 COMMAND(update_changeExtraLevel1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1979 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1980 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1981 COMMAND(updateCallback38),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1982
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1983 // 52
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1984 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1985 COMMAND(updateCallback39),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1986 COMMAND(update_removePrimaryEffect2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1987 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1988
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1989 // 56
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1990 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1991 COMMAND(updateCallback41),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1992 COMMAND(update_resetToGlobalTempo),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1993 COMMAND(update_nop1),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1994
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1995 // 60
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1996 COMMAND(update_setDurationRandomness),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1997 COMMAND(update_changeChannelTempo),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1998 COMMAND(update_stopChannel),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
1999 COMMAND(updateCallback46),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2000
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2001 // 64
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2002 COMMAND(update_nop2),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2003 COMMAND(update_setupRhythmSection),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2004 COMMAND(update_playRhythmSection),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2005 COMMAND(update_removeRhythmSection),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2006
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2007 // 68
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2008 COMMAND(updateCallback51),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2009 COMMAND(updateCallback52),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2010 COMMAND(updateCallback53),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2011 COMMAND(update_setSoundTrigger),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2012
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2013 // 72
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2014 COMMAND(update_setTempoReset),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2015 COMMAND(updateCallback56),
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2016 COMMAND(update_stopChannel)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2017 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2018
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2019 _parserOpcodeTable = parserOpcodeTable;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2020 _parserOpcodeTableSize = ARRAYSIZE(parserOpcodeTable);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2021 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2022 #undef COMMAND
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2023
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2024 // This table holds the register offset for operator 1 for each of the nine
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2025 // channels. To get the register offset for operator 2, simply add 3.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2026
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2027 const uint8 AdlibDriver::_regOffset[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2028 0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2029 0x12
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2030 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2031
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2032 // Given the size of this table, and the range of its values, it's probably the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2033 // F-Numbers (10 bits) for the notes of the 12-tone scale. However, it does not
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2034 // match the table in the Adlib documentation I've seen.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2035
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2036 const uint16 AdlibDriver::_unkTable[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2037 0x0134, 0x0147, 0x015A, 0x016F, 0x0184, 0x019C, 0x01B4, 0x01CE, 0x01E9,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2038 0x0207, 0x0225, 0x0246
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2039 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2040
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2041 // These tables are currently only used by updateCallback46(), which only ever
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2042 // uses the first element of one of the sub-tables.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2043
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2044 const uint8 *AdlibDriver::_unkTable2[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2045 AdlibDriver::_unkTable2_1,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2046 AdlibDriver::_unkTable2_2,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2047 AdlibDriver::_unkTable2_1,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2048 AdlibDriver::_unkTable2_2,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2049 AdlibDriver::_unkTable2_3,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2050 AdlibDriver::_unkTable2_2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2051 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2052
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2053 const uint8 AdlibDriver::_unkTable2_1[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2054 0x50, 0x50, 0x4F, 0x4F, 0x4E, 0x4E, 0x4D, 0x4D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2055 0x4C, 0x4C, 0x4B, 0x4B, 0x4A, 0x4A, 0x49, 0x49,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2056 0x48, 0x48, 0x47, 0x47, 0x46, 0x46, 0x45, 0x45,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2057 0x44, 0x44, 0x43, 0x43, 0x42, 0x42, 0x41, 0x41,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2058 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3E, 0x3D, 0x3D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2059 0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2060 0x38, 0x38, 0x37, 0x37, 0x36, 0x36, 0x35, 0x35,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2061 0x34, 0x34, 0x33, 0x33, 0x32, 0x32, 0x31, 0x31,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2062 0x30, 0x30, 0x2F, 0x2F, 0x2E, 0x2E, 0x2D, 0x2D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2063 0x2C, 0x2C, 0x2B, 0x2B, 0x2A, 0x2A, 0x29, 0x29,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2064 0x28, 0x28, 0x27, 0x27, 0x26, 0x26, 0x25, 0x25,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2065 0x24, 0x24, 0x23, 0x23, 0x22, 0x22, 0x21, 0x21,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2066 0x20, 0x20, 0x1F, 0x1F, 0x1E, 0x1E, 0x1D, 0x1D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2067 0x1C, 0x1C, 0x1B, 0x1B, 0x1A, 0x1A, 0x19, 0x19,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2068 0x18, 0x18, 0x17, 0x17, 0x16, 0x16, 0x15, 0x15,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2069 0x14, 0x14, 0x13, 0x13, 0x12, 0x12, 0x11, 0x11,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2070 0x10, 0x10
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2071 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2072
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2073 // no don't ask me WHY this table exsits!
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2074 const uint8 AdlibDriver::_unkTable2_2[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2075 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2076 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2077 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2078 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2079 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2080 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2081 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2082 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2083 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2084 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2085 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2086 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x6F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2087 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2088 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2089 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2090 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2091 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2092
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2093 const uint8 AdlibDriver::_unkTable2_3[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2094 0x40, 0x40, 0x40, 0x3F, 0x3F, 0x3F, 0x3E, 0x3E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2095 0x3E, 0x3D, 0x3D, 0x3D, 0x3C, 0x3C, 0x3C, 0x3B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2096 0x3B, 0x3B, 0x3A, 0x3A, 0x3A, 0x39, 0x39, 0x39,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2097 0x38, 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2098 0x36, 0x35, 0x35, 0x35, 0x34, 0x34, 0x34, 0x33,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2099 0x33, 0x33, 0x32, 0x32, 0x32, 0x31, 0x31, 0x31,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2100 0x30, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2101 0x2E, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2102 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2103 0x28, 0x28, 0x28, 0x27, 0x27, 0x27, 0x26, 0x26,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2104 0x26, 0x25, 0x25, 0x25, 0x24, 0x24, 0x24, 0x23,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2105 0x23, 0x23, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2106 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2107 0x1E, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, 0x1C, 0x1B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2108 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2109 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x16, 0x16,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2110 0x16, 0x15
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2111 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2112
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2113 // This table is used to modify the frequency of the notes, depending on the
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2114 // note value and unk16. In theory, we could very well try to access memory
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2115 // outside this table, but in reality that probably won't happen.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2116 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2117 // This could be some sort of pitch bend, but I have yet to see it used for
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2118 // anything so it's hard to say.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2119
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2120 const uint8 AdlibDriver::_unkTables[][32] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2121 // 0
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2122 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x08,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2123 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2124 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x19,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2125 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2126 // 1
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2127 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x07, 0x09,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2128 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2129 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x1A,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2130 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x22, 0x24 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2131 // 2
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2132 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x08, 0x09,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2133 0x0A, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x12, 0x13,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2134 0x14, 0x15, 0x16, 0x17, 0x19, 0x1A, 0x1C, 0x1D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2135 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x24, 0x25, 0x26 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2136 // 3
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2137 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x08, 0x0A,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2138 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x12, 0x13,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2139 0x14, 0x15, 0x16, 0x17, 0x18, 0x1A, 0x1C, 0x1D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2140 0x1E, 0x1F, 0x20, 0x21, 0x23, 0x25, 0x27, 0x28 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2141 // 4
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2142 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x08, 0x0A,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2143 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x11, 0x13, 0x15,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2144 0x16, 0x17, 0x18, 0x19, 0x1B, 0x1D, 0x1F, 0x20,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2145 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x28, 0x2A },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2146 // 5
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2147 { 0x00, 0x01, 0x02, 0x03, 0x05, 0x07, 0x09, 0x0B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2148 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x13, 0x15,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2149 0x16, 0x17, 0x18, 0x19, 0x1B, 0x1D, 0x1F, 0x20,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2150 0x21, 0x22, 0x23, 0x25, 0x27, 0x29, 0x2B, 0x2D },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2151 // 6
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2152 { 0x00, 0x01, 0x02, 0x03, 0x05, 0x07, 0x09, 0x0B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2153 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x13, 0x15,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2154 0x16, 0x17, 0x18, 0x1A, 0x1C, 0x1E, 0x21, 0x24,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2155 0x25, 0x26, 0x27, 0x29, 0x2B, 0x2D, 0x2F, 0x30 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2156 // 7
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2157 { 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2158 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x13, 0x15, 0x18,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2159 0x19, 0x1A, 0x1C, 0x1D, 0x1F, 0x21, 0x23, 0x25,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2160 0x26, 0x27, 0x29, 0x2B, 0x2D, 0x2F, 0x30, 0x32 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2161 // 8
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2162 { 0x00, 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2163 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x14, 0x17, 0x1A,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2164 0x19, 0x1A, 0x1C, 0x1E, 0x20, 0x22, 0x25, 0x28,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2165 0x29, 0x2A, 0x2B, 0x2D, 0x2F, 0x31, 0x33, 0x35 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2166 // 9
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2167 { 0x00, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2168 0x0F, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1B,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2169 0x1C, 0x1D, 0x1E, 0x20, 0x22, 0x24, 0x26, 0x29,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2170 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x39 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2171 // 10
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2172 { 0x00, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2173 0x0F, 0x10, 0x12, 0x14, 0x16, 0x19, 0x1B, 0x1E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2174 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B, 0x2D,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2175 0x2E, 0x2F, 0x31, 0x32, 0x34, 0x36, 0x39, 0x3C },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2176 // 11
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2177 { 0x00, 0x01, 0x03, 0x05, 0x07, 0x0A, 0x0C, 0x0F,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2178 0x10, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2179 0x1F, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2B, 0x2E,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2180 0x2F, 0x30, 0x32, 0x34, 0x36, 0x39, 0x3C, 0x3F },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2181 // 12
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2182 { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0B, 0x0D, 0x10,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2183 0x11, 0x12, 0x14, 0x16, 0x18, 0x1B, 0x1E, 0x21,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2184 0x22, 0x23, 0x25, 0x27, 0x29, 0x2C, 0x2F, 0x32,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2185 0x33, 0x34, 0x36, 0x38, 0x3B, 0x34, 0x41, 0x44 },
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2186 // 13
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2187 { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0B, 0x0D, 0x11,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2188 0x12, 0x13, 0x15, 0x17, 0x1A, 0x1D, 0x20, 0x23,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2189 0x24, 0x25, 0x27, 0x29, 0x2C, 0x2F, 0x32, 0x35,
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2190 0x36, 0x37, 0x39, 0x3B, 0x3E, 0x41, 0x44, 0x47 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2191 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2192
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2193 // #pragma mark -
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2194
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2195 // At the time of writing, the only known case where Kyra 1 uses sound triggers
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2196 // is in the castle, to cycle between three different songs.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2197
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2198 const int CadlPlayer::_kyra1SoundTriggers[] = {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2199 0, 4, 5, 3
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2200 };
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2201
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2202 const int CadlPlayer::_kyra1NumSoundTriggers = ARRAYSIZE(CadlPlayer::_kyra1SoundTriggers);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2203
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2204 CadlPlayer::CadlPlayer(Copl *newopl)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2205 : CPlayer(newopl), numsubsongs(0), _trackEntries(), _soundDataPtr(0)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2206 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2207 memset(_trackEntries, 0, sizeof(_trackEntries));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2208 _driver = new AdlibDriver(newopl);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2209 assert(_driver);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2210
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2211 _sfxPlayingSound = -1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2212 // _soundFileLoaded = "";
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2213
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2214 _soundTriggers = _kyra1SoundTriggers;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2215 _numSoundTriggers = _kyra1NumSoundTriggers;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2216
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2217 init();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2218 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2219
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2220 CadlPlayer::~CadlPlayer() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2221 delete [] _soundDataPtr;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2222 delete _driver;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2223 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2224
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2225 bool CadlPlayer::init() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2226 _driver->callback(2);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2227 _driver->callback(16, int(4));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2228 return true;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2229 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2230
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2231 void CadlPlayer::process() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2232 uint8 trigger = _driver->callback(11);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2233
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2234 if (trigger < _numSoundTriggers) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2235 int soundId = _soundTriggers[trigger];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2236
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2237 if (soundId) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2238 playTrack(soundId);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2239 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2240 } else {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2241 warning("Unknown sound trigger %d", trigger);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2242 // TODO: At this point, we really want to clear the trigger...
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2243 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2244 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2245
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2246 // void CadlPlayer::setVolume(int volume) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2247 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2248
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2249 // int CadlPlayer::getVolume() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2250 // return 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2251 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2252
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2253 // void CadlPlayer::loadMusicFile(const char *file) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2254 // loadSoundFile(file);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2255 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2256
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2257 void CadlPlayer::playTrack(uint8 track) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2258 play(track);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2259 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2260
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2261 // void CadlPlayer::haltTrack() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2262 // unk1();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2263 // unk2();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2264 // //_engine->_system->delayMillis(3 * 60);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2265 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2266
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2267 void CadlPlayer::playSoundEffect(uint8_t track) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2268 play(track);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2269 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2270
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2271 void CadlPlayer::play(uint8_t track) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2272 uint8 soundId = _trackEntries[track];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2273 if ((int8)soundId == -1 || !_soundDataPtr)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2274 return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2275 soundId &= 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2276 _driver->callback(16, 0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2277 // while ((_driver->callback(16, 0) & 8)) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2278 // We call the system delay and not the game delay to avoid concurrency issues.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2279 // _engine->_system->delayMillis(10);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2280 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2281 if (_sfxPlayingSound != -1) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2282 // Restore the sounds's normal values.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2283 _driver->callback(10, _sfxPlayingSound, int(1), int(_sfxPriority));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2284 _driver->callback(10, _sfxPlayingSound, int(3), int(_sfxFourthByteOfSong));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2285 _sfxPlayingSound = -1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2286 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2287
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2288 int chan = _driver->callback(9, soundId, int(0));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2289
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2290 if (chan != 9) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2291 _sfxPlayingSound = soundId;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2292 _sfxPriority = _driver->callback(9, soundId, int(1));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2293 _sfxFourthByteOfSong = _driver->callback(9, soundId, int(3));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2294
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2295 // In the cases I've seen, the mysterious fourth byte has been
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2296 // the parameter for the update_setExtraLevel3() callback.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2297 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2298 // The extra level is part of the channels "total level", which
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2299 // is a six-bit value where larger values means softer volume.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2300 //
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2301 // So what seems to be happening here is that sounds which are
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2302 // started by this function are given a slightly lower priority
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2303 // and a slightly higher (i.e. softer) extra level 3 than they
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2304 // would have if they were started from anywhere else. Strange.
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2305
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2306 int newVal = ((((-_sfxFourthByteOfSong) + 63) * 0xFF) >> 8) & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2307 newVal = -newVal + 63;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2308 _driver->callback(10, soundId, int(3), newVal);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2309 newVal = ((_sfxPriority * 0xFF) >> 8) & 0xFF;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2310 _driver->callback(10, soundId, int(1), newVal);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2311 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2312
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2313 _driver->callback(6, soundId);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2314 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2315
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2316 // void CadlPlayer::beginFadeOut() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2317 // playSoundEffect(1);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2318 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2319
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2320 bool CadlPlayer::load(const std::string &filename, const CFileProvider &fp)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2321 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2322 binistream *f = fp.open(filename);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2323
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2324 // file validation section
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2325 if(!f || !fp.extension(filename, ".adl")) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2326 fp.close(f);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2327 return false;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2328 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2329
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2330 // if (_soundFileLoaded == file)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2331 // return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2332
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2333 // if (_soundDataPtr) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2334 // haltTrack();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2335 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2336
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2337 uint8 *file_data = 0; uint32 file_size = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2338
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2339 // char filename[25];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2340 // sprintf(filename, "%s.ADL", file);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2341
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2342 // file_data = _engine->resource()->fileData(filename, &file_size);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2343 // if (!file_data) {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2344 // warning("Couldn't find music file: '%s'", filename);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2345 // return;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2346 // }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2347
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2348 unk2();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2349 unk1();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2350
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2351 file_size = fp.filesize(f);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2352 file_data = new uint8 [file_size];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2353 f->readString((char *)file_data, file_size);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2354
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2355 _driver->callback(8, int(-1));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2356 _soundDataPtr = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2357
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2358 uint8 *p = file_data;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2359 memcpy(_trackEntries, p, 120*sizeof(uint8));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2360 p += 120;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2361
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2362 int soundDataSize = file_size - 120;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2363
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2364 _soundDataPtr = new uint8[soundDataSize];
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2365 assert(_soundDataPtr);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2366
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2367 memcpy(_soundDataPtr, p, soundDataSize*sizeof(uint8));
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2368
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2369 delete [] file_data;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2370 file_data = p = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2371 file_size = 0;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2372
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2373 _driver->callback(4, _soundDataPtr);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2374
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2375 // _soundFileLoaded = file;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2376
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2377 for(int i = 0; i < 200; i++)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2378 if(_trackEntries[i] != 0xff)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2379 numsubsongs = i + 1;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2380
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2381 fp.close(f);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2382 return true;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2383 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2384
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2385 void CadlPlayer::rewind(int subsong)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2386 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2387 opl->init();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2388 opl->write(1,32);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2389 playSoundEffect(subsong);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2390 cursubsong = subsong;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2391 update();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2392 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2393
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2394 unsigned int CadlPlayer::getsubsongs()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2395 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2396 return numsubsongs;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2397 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2398
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2399 bool CadlPlayer::update()
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2400 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2401 bool songend = true;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2402
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2403 // if(_trackEntries[cursubsong] == 0xff)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2404 // return false;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2405
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2406 _driver->callback();
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2407
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2408 for(int i = 0; i < 10; i++)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2409 if(_driver->_channels[i].dataptr != NULL)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2410 songend = false;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2411
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2412 return !songend;
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2413 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2414
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2415 void CadlPlayer::unk1() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2416 playSoundEffect(0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2417 //_engine->_system->delayMillis(5 * 60);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2418 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2419
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2420 void CadlPlayer::unk2() {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2421 playSoundEffect(0);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2422 }
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2423
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2424 CPlayer *CadlPlayer::factory(Copl *newopl)
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2425 {
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2426 return new CadlPlayer(newopl);
6ad7eb96dd26 [svn] Sync with upstream. This adds Westwood ADL format support.
chainsaw
parents:
diff changeset
2427 }