source: buchla-emu/readme.txt@ ea878ba

Last change on this file since ea878ba was ea878ba, checked in by Thomas Lopatic <thomas@…>, 7 years ago

Added SDL_net for networking.

  • Property mode set to 100644
File size: 6.0 KB
Line 
1Buchla 700 Hardware Emulator
2----------------------------
3
4This repository, buchla-emu.git, contains a software emulation of the
5Buchla 700's hardware.
6
7It is minimalistic; it emulates just enough of the hardware to be able
8to run the firmware from the companion repository, buchla-68k.git.
9
10We don't have access to original hardware, so this is our best guess
11based on the firmware source code published by Lynx Crowe - the
12firmware's developer - via Aaron Lanterman:
13
14 http://lanterman.ece.gatech.edu/buchla700/
15
16See the buchla-68k.git repository for the firmware source code.
17
18
19Building the emulator
20---------------------
21
22The emulator uses SDL2, an abstraction layer for low-level machine
23access on Linux, OS X, and Windows. It can be obtained from the
24project's website:
25
26 https://libsdl.org/
27
28The SDL2 website also hosts the SDL2_net and SDL2_ttf projects, which
29add support for networking and TrueType fonts to SDL2
30
31SDL2_ttf, in turn, requires the FreeType library, which is available
32from the FreeType website:
33
34 https://www.freetype.org/
35
36Currently, we build the emulator natively on Linux and OS X. The
37Windows version is cross-compiled on Linux using a x86_64-w64-mingw32
38cross-toolchain.
39
40For Linux and OS X, our Makefile expects all of the above libraries to
41reside in /opt/sdl2. This is how we typically install them:
42
43 # Build and install FreeType first
44
45 tar zxvf freetype-2.7.1.tar.gz
46 cd freetype-2.7.1
47 mkdir build
48 cd build
49
50 # Skip the optional features (compressed fonts, etc.) that would
51 # create more dependencies
52
53 ../configure --prefix=/opt/sdl2 \
54 --without-zlib --without-bzip2 --without-png --without-harfbuzz
55
56 make
57 make install
58
59 # Then build and install SDL2
60
61 tar zxvf SDL2-2.0.5.tar.gz
62 cd SDL2-2.0.5
63 mkdir build
64 cd build
65
66 ../configure --prefix=/opt/sdl2
67
68 make
69 make install
70
71 # Build and install SDL2_ttf, now that we have FreeType and SDL2
72
73 tar zxvf SDL2_ttf-2.0.14.tar.gz
74 cd SDL2_ttf-2.0.14
75 mkdir build
76 cd build
77
78 ../configure --prefix=/opt/sdl2 \
79 --with-sdl-prefix=/opt/sdl2 --with-freetype-prefix=/opt/sdl2
80
81 make
82 make install
83
84 # Build and install SDL2_net last
85
86 tar zxvf SDL2_net-2.0.1.tar.gz
87 cd SDL2_net-2.0.1
88 mkdir build
89 cd build
90
91 ../configure --prefix=/opt/sdl2 --with-sdl-prefix=/opt/sdl2
92
93 make
94 make install
95
96Now that we have everything in place, invoke
97
98 make buchla
99
100from the top-level directory of this repository to build the emulator.
101
102The cross-build for Windows is done similarly, with the following
103differences when configuring the libraries:
104
105 * We use "--prefix=/opt/sdl2-win" instead of "--prefix=/opt/sdl2",
106 so that the Windows versions of the libraries go to a different
107 directory. That's where our Makefile expects to find them when
108 cross-building.
109
110 * We additionally specify "--host=x86_64-w64-mingw32" to enable
111 cross-compilation.
112
113Then, to cross-build the emulator, invoke
114
115 make buchla WIN=1
116
117from the top-level directory of this repository. Defining the "WIN"
118variable selects the cross-toolchain and "/opt/sdl2-win" as the
119library directory.
120
121
122Emulated hardware
123-----------------
124
125Here's what we emulate:
126
127 * Motorola 68000 CPU. This is actually the Musashi CPU emulator by
128 Karl Stenerud:
129
130 https://github.com/kstenerud/Musashi
131
132 * Motorola MC6840: Timers.
133
134 * Motorola MC6850: Serial console and MIDI ports.
135
136 * Epson SED1335: LCD controller.
137
138 * Intel 82716: Video chip.
139
140 * National Semiconductor LMC835: Equalizer.
141
142 * General Instrument AY-3-8910: A sound chip, which is not used for
143 sound generation, but only for its I/O ports. It connects the CPU
144 to the above equalizer chip.
145
146 * Western Digital WD1772: Floppy disk controller.
147
148 * A few LEDs.
149
150 * Item X: A program running on a microcontroller. It converts the
151 analog signals from the Buchla's controller pads to digital
152 values.
153
154 Neither the program, nor the microcontroller are known, but the
155 protocol (known from the firmware source code) is pretty simple
156 and self-explanatory.
157
158 * Item Y: The actual sound generator, referred to by the firmware
159 source code as "the FPU." This could actually be two chips:
160
161 1. One chip, maybe a DSP, for generating the 15 different
162 parameter envelopes for each of the 12 voices:
163
164 - 4x FM modulator (oscillator) frequency.
165
166 - 6x FM modulator (oscillator) envelope.
167
168 - 1x Output signal amplitude envelope.
169
170 - 1x Output signal filter envelope.
171
172 - 1x Output signal filter resonance envelope.
173
174 - 1x Output signal stereo location.
175
176 - 1x "Dynamics." (TBD - currently not emulated.)
177
178 Over time, the chip interpolates between the points of the
179 envelopes drawn in the MIDAS VII instrument editor.
180
181 2. A second chip for the actual sound generation. This is likely
182 a DSP, possibly a Hitachi HD61810, which supports a 16-bit
183 floating-point format that's also found in the firmware
184 source code (12-bit mantissa, 4-bit exponent).
185
186 This chip takes in the current levels of a voice's envelopes
187 and, based on them, performs the FM synthesis for this voice
188 by modulating the user-drawn carrier waves A and B according
189 to the selected FM configuration (algorithm).
190
191 We don't know how many of the envelopes not related to FM
192 (e.g., the filter) are actually used digitally. At least some
193 of the envelopes probably control analog circuits.
194
195 Obviously, the emulator does everything digitally.
196
197 This "two chip" hypothesis would be in line with the "four
198 computers" marketing claim from the Buchla 700 marketing copy. The
199 four "computers" would be the Motorola 68000, the microcontroller
200 that does the A/D conversion of the pad inputs, plus the two CPUs
201 that constitute "the FPU."
202
203If you have access to an actual Buchla 700, please do contact us. It
204would be great to be able to compare the emulation to real hardware.
205
206If it's non-functional, this is also fine. We might be able to gain
207some insights from reading the FPU microcode PROMs.
Note: See TracBrowser for help on using the repository browser.