source: buchla-emu/readme.txt@ 0726522

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

Better wording.

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