het VIJGEBLAD 21. Uitgave van de HCC
Forth Interesse Groep.
3e kwartaal 1987
Forth Orgel
Deel I: Hardware
door: Han de Bruijn
Foto bovenkant /
Foto onderkant
Het orgel is een Eminent 300 [ 310 bijna ],
pakweg vijftien jaar oud.
De computer is een COMX-35
[ google search ]
voorzien van een FORTH compiler.
Het idee van een elektronisch draaiorgel hangt me al veel langer bij
dan vandaag. De COMX zelf biedt slechts mogelijkheden voor monofone
(eenstemmige) muziek: zie Vijgeblad nr. 15, 1985 [of de HCC Nieuwsbrief
69 / 70] ("Musicode").
De vraag werd uiteindelijk: hoe zou ik mijn micro op het orgel kunnen
laten spelen ?!
Het orgel
Wanneer je een Eminent 300 open maakt, dan word je gekonfronteerd met
een staaltje van degelijke, ouderwetse elektronika. Chips bestonden in
die tijd blijkbaar nog niet. Panelen vol met losse komponenten, en hele
bussels bedrading. Al gauw blijkt dat het bovenmanuaal voor eventueel
knutselwerk beter toegankelijk zal zijn dan de rest. De elektrische
kontakten voor toonopwekking worden uiteraard mechanisch gesloten: door
het indrukken van een toets op het klavier. Deze kontakten zijn uitgevoerd
als vergulde veertjes, die tegen een blanke draad worden aangedrukt. Per toets
wordt echter niet één, doch een vijftal kontakten tegelijkertijd
gemaakt, en gebroken. Dit getal van vijf blijkt samen te hangen met de
aanwezige registers. Er is één rij veertjes voor de sustain,
die ik bijna nooit gebruik; en drie rijen voor respektievelijk de vier, acht
en zestien voet (= hoog, midden, laag). Dan is er nog een vijfde rij die
blijkbaar iets met de voeding van doen heeft: alle veertjes zijn onderling
doorverbonden. Als men het systeem eenmaal door heeft, dan is het indrukken
van een toets natuurlijk gemakkelijk te ondervangen. We solderen een aantal
draden over de mechaniek heen, en brengen die op andere wijze al dan niet
met elkaar in kontakt. Een aardige bijkomstigheid is dat daarbij iedere
register-voetmaat afzonderlijk ter beschikking komt. Er is immers geen
noodzaak meer om alle vijf kontakten in één keer te sluiten.
Kodering
Alvorens de computerzijde van het verhaal te behandelen, is het nuttig een
kleine rekensom te maken. Al vrij vlug nam ik het besluit om ondermanuaal
en pedaal te laten voor wat ze zijn; zodat alleen het bovenmanuaal
voor automatisering in aanmerking komt. Een belangrijke overweging
hierbij was dat je met de soldeerbout overal goed bij moet kunnen.
Maar ook om getalsmatige redenen is dit een gelukkige keus. Het bovenmanuaal
beslaat 42 toetsen. Iedere toets heeft, naast de voedingslijn, vier
veerkontakten, drie als we de sustain laten vallen. In totaal hebben
we dan 42x3 = 126 kontakten, die door de computer moeten kunnen worden
geopend en gesloten. Laten we ervan uitgaan dat er maar één
kontakt per tijdstip open of dicht wordt gezet. Omdat computers snel zijn,
hoeven we niet te horen dat de tonen van een akkoord niet gelijktijdig, maar
heel vlug achter elkaar tot klinken worden gebracht. We zijn tevreden met de
output van één toon tegelijk. Deze output zal iedere keer de
volgende informatie moeten bevatten:
1. volgnummer van het aan te spreken kontakt;
2. moet dit kontakt open of dicht worden gezet.
Het volgnummer kan worden opgeslagen in 7 bits, want 126 is net iets
kleiner dan 128 = 2^7 . Of het kontakt open/dicht moet, kan worden
overgezonden in 1 bit. In totaal hebben we dus voldoende aan 8 bits, per
keer dat een kontakt wordt aangesproken. Dit is, gegeven een 8-bits
microcomputer, inderdaad mazzel hebben !
De computer
De COMX-35 is een 8-bits computer gebouwd rondom de 1802 microprocessor
van RCA. De computer heeft in zichzelf beperkte muzikale mogelijkheden,
voor monofone muziek. Belangrijk voor mij is de beschikbaarheid van een
redelijk goede FORTH compiler, die vrij te kopiëren is, Over de
kombinatie van deze FORTH met muziek heb ik al eens eerder geschreven.
Het onderwerp dat we nu om handen hebben is een logische voortzetting van
het "Musicode" verhaal: uitbreiding namelijk naar
meerstemmige muziek.
Nu had ik voor dit doel gewoon een andere machine kunnen aanschaffen.
Voor een kleine drieduizend gulden heb je een Yamaha MSX muziek-computer,
met de fantastische mogelijkheden van een ingebouwde programmeerbare DX9
digitale synthesizer. Maar dat is dan inderdaad voor de lieve som van
fl.3000,- , zonder een FORTH compiler, vreemde processor, ook maar 32 K
voor het onthouden van muziek; en lang niet zo'n leuke klub als van mijn
eigen COMX natuurlijk.
Echter, om van COMX-35 naar Eminent 300 te komen, zal daartussenin iets
moeten plaatsgrijpen. Aan de zijkant van de computer zit een gleuf met
kontakten; dat is alvast gunstig. Bladeren we in de technische handleiding
dan zien we dat acht van die kontakten uitkomen op de data-bus.
De data-bus is de grote verkeersweg van iedere computer; die zullen we
zodadelijk zeker nodig hebben. Kijken we bij het instruktie-repertoire
van de 1802 onder het hoofdstuk output, dan zien we dat drie zogenaamde
N-lijnen van belang zijn. Dan is er een -MRD (memory read) signaal om aan
te geven dat uit het geheugen gehaalde gegevens inderdaad op de bus staan.
Houden we de handige "flip-flop Q lijn" in de gaten, En tot slot voeding
en aardleiding niet vergeten.
Interface
In bijgaande tekening is schetsmatig aangegeven hoe de elektronika, welke
tussen computer en orgel in moet komen, er uit zal komen te zien.
Aan de kant van het orgel hebben we 126 draden die naar de mechanische
kontakten lopen. Deze moeten worden geopend en gesloten door evenzoveel
(elektronische) schakelaars ("analog switches"). De stand van de
switches wordt gestuurd, en tevens onthouden, door 126 geheugens
("adressable latches").
Aan de kant van de computer is de belangrijkste verbindingskabel die
welke de 8 adertjes van de data-bus bevat. Op één van deze
draadjes zal
worden aangegeven of een orgel-schakelaar aan dan wel uit wordt gezet.
Informatie welke rechtstreeks wordt doorgespeeld aan een van de 126 bits
in de latches. Dit doorspelen gebeurt aan de hand van een kontaktnummer
dat vervat is in de overige 7 bits op de bus. Middels een
decodeer-schakeling
wordt daarmee één van de (adresseerbare) latches bij het orgel
aangeduid. De bijbehorende switch gaat dan open of dicht. (We houden maar
twee draadjes over.)
Nu is het natuurlijk niet zo dat alle bytes die de grote verkeersweg
passeren bedoeld zijn als boodschap voor het elektronisch orgel. Dit is
slechts bij hoge uitzondering het geval. Alleen dan namelijk wanneer er
een uitvoer instruktie wordt gegeven, die bovendien speciaal voor het
orgel bedoeld is. Daarom moet het bovenstaande worden aangevuld met een
poortschakeling, die de kombinatie "er is uitvoer voor het orgel" aan
de rest van de elektronika te kennen geeft. Anders zou je gek worden van
de herrie !
Het is Inderdaad niet denkbeeldig dat onze Eminent op een gegeven moment
volop staat te gillen. Er is bijvoorbeeld wat misgegaan met de kodering
van Bach's Toccata in d-moll. Dan wil je wel graag even stilte forceren,
teneinde verder muzikaal ongenoegen te voorkomen. Maar de stekker uit het
stopkontakt is ook zo rigoureus. in zo'n geval is het handig een speciaal
noodlijntje ter beschikking te hebben, waarmee je alle latches een harde
"reset" geeft. Het is zelfs zinvol om deze reset-lijn standaard "hoog"
te houden; zolang er geen muziek in uitvoering is moet het maar stil zijn.
Plakprint
We schrijven juni 1986. Ik heb mijn soldeerbout, een europrint, en een
handvol chips meegenomen op vakantie. De computer kan thuisblijven;
voorlopig heb ik genoeg aan een eenvoudig schakelpaneel. De opdracht is
een zestal IC'e zinvol met elkaar te verbinden:
a. comparator 4 bits (type TTL, SN74LS'85)
b. hex inverter (idem '04)
c. octal D-type transparant latch (idem '373)
d. 4 to 16 line decoder (idem '154)
e. 8 bit adressable latch (type CMOS, MC14'099)
f. quad analog awitch (idem '016)
Het was echt de allereerste keer dat ik wat met IC's ging doen, Het laat
zich dan ook raden dat de realisatie van mijn proefschakeling onevenredig
veel arbeidsuren heeft gekost. Mijn kamergenoot sprak van een "plakprint":
onbedoelde sluitinkjes waren eerder regel dan uitzondering. Het mag een
wonder heten dat orgel en computer de testprocedures hebben overleefd,
Niet echt. het orgelpedaal werkt niet meer, en de firma Westerkamp was
zo vriendelijk me een derde COMX te sturen.
27 juli 1986; het moment waarop mijn eigengemaakte test-interface voor
het eerst deed wat ik al die tijd bedoelde. De onvergetelijke vier (!)
eerste echte meerstemmige tonen, op FORTH commando.
Solderen, solderen
Als de kogel eenmaal door de kerk is. Het idee blijft verder hetzelfde.
Er is alleen sprake van een nogal forse schaalvergroting. De armzalige
vier tonen moesten er 126 worden. Ik heb me om te beginnen maar eens laten
uitleggen hoe je een soldeerbout vast moet houden. Na twee weken solderen,
full time, ontstond zowaar de geplande interface (figuur):
1. een "computerprint", die in het I/0 slot van de COMX-35 past;
2. twee onderling verbonden "orgelprinten", die op het orgel staan;
3. de bedrading In het orgel zelf, over de mechanische kontakten heen.
Computerprint (1) en orgelprints (2) zitten aan elkaar vast met een
twaalf-aderige kabel en een stekker. Het orgel (3) is aangesloten op
de orgelprints (2) met twee 64-polige stekkers, en via een kroonsteen
met drie register-lijnen. Stekkers zijn duur, maar onontbeerlijk als je
er geen uren over wilt doen om een beetje te kunnen hobbyën.
Ik heb geen gebruik gemaakt van gedrukte bedrading, Dat is op zich geen
probleem. Men kan de nodige verbindingen zowel onder- als bovenlangs
de print aanbrengen. Belangrijk is wel om een konsekwente kleurkodering
in acht te nemen.
Computerprint
Op de computerprint zitten een drietal chips:
a. 4 bits comparator.
Deze vergelijkt de 3 N-lijnen van de output poort en de memory read lijn
met gewenste waarden voor uitvoer naar het orgel: (N2,N1,N0,-MRD)=(0,1,0,0).
Dit was wellicht eenvoudiger te regelen geweest met AND en OR poorten,
maar ik had deze chip nu eenmaal liggen. Uitgangssignaal van de comparator
is OUT. Alleen output poort 2 was nog niet ingepikt door de fabrikant.
b. hex inverter.
Vier van de zes worden gebruikt. Twee om het comparator uitgangssignaal om
te draaien, dit ten behoeve van de 4 to 16 decoder op de orgelprints en
de octal transparant latch (hierna). Ook het signaal van de flip-flop
lijn wordt geïnverteerd, zodat de adressable latches op de orgelprint
bij verstek op "reset" staan. Op de Q-lijn zelf, inverse van -Q, laten
we een LED branden om te zien of het orgel startklaar is (reset uit).
c. octal D-type transparant latch.
Het is een absolute noodzaak om de data-bus, bij afwezigheid van uitvoer
naar het orgel, zoveel mogelijk te isoleren van de interface. De draden
van de data-bus lopen door een kabel en door alletwee de orgelprints.
Het minste mankement onderweg zou ook de normale verkeersafhandeling
binnen de computer in het honderd gooien. Vandaar deze latch, die we
gebruiken om zijn regelbare hoge impedantie, niet om zijn geheugenfunktie.
Tenslotte bevat de computerprint voorzieningen voor de voeding, die via
een 5V stabilisator positief van de computer (9 V) afgetapt wordt. Een
aparte voeding (batterij) heeft me destijds een nieuwe computer gekost.
De CMOS schakelingen op de orgelprints trekken gelukkig weinig stroom.
Orgelprints
Verreweg het meeste soldeerwerk is gaan zitten in de orgelprints.
Een stuklijst van de gebruikte IC's:
d. één 4 to 16 decoder.
Deze wordt in werking gesteld door het -OUT signaal van de computerprint.
De vier hoogste bits van de data-bus (A7 ... A4) worden dan gedecodeerd
tot 16 outputs (L0 ... L15). Deze gaan naar de "enable" ingangen van:
e. zestien 8-bit adressable latehes.
Eén van de 16 wordt dus door (d) geaktiveerd. De drie op een na laagste
bits van de data-bus (A3,A2,Al) adresseren op hun beurt één
van de acht
bits in de latch (P0 ... P7). Dit bit wordt dan gezet overeenkomstig de
stand van A0, niet bepaald dus de "minst signifikante" lijn van de bus.
Alle latches zijn op hun reset ingang verbonden met -Q.
De 8 bits die in de 16 latches worden onthouden zijn verbonden met:
f. 32 quad analog switches.
Twee per adressable latch, bedoeld om de mechanische schakelaars van
het orgel te vervangen. (2 switches van de 128 hebben geen funktie.)
Aan de ene kant van de switches komen drie lijnen binnen uit het orgel,
korresponderend met de drie registergroepen hoog, midden en laag. Deze
worden via 3 spanningsdelers (1K-1K) verbonden met zowel aarde als 5V.
Hierdoor wordt bereikt dat de elektronische schakelaars in de uit-stand
stevig worden dichtgeknepen. Nodig omdat het orgel met zeer zwakke
stroompjes blijkt te werken. Aan de andere kant van de 128 switches
bevinden zich evenzoveel draden Si, die met twee stekkers van elk 64
pinnen het orgel in gaan,
Geïntegreerd ontwerp
Het hele ontwerp van de computer-orgel interface, hardware zowel als software,
wordt noodzakelijkerwijs in één hand gehouden, Bij het maken
van afwegingen kunnen dus alle aspekten van het ontwerp-proces worden
betrokken. Een zo'n afweging is de volgende.
Gevraagd wordt een doorlopende nummering KONTAKT voor de 42 toetsen van
het bovenmanuaal TOETS, in kombinatie met de 3 register-voetmaten VOET.
Er zijn precies twee mogelijkheden:
1. KONTAKT - 3 x TOETS + VOET TOETS = 0,1,...,41
2. KONTAKT - 42 x VOET + TOETS VOET = 0,1,2
Bij nadere analyse blijkt dat mogelijkheid (1) softwarematig het meest
efficiënt is. Nadelig is echter dat de analog switches stuk voor stuk
moeten worden voorzien van alle drie de "aarde" draden voor registratie.
Mogelijkheid (2) is programatechnisch minder snel. Voordelig is echter
dat de analog switches verdeeld kunnen worden in drie groepen, met slechts
één register-lijn per groep. Dit argument is doorslaggevend,
omdat het handenvol soldeerwerk scheelt.
Het volgende, en laatste deel van "Forth Orgel" zal gaan
over het programmeren van de lnterface. U raadt het al: FORTH Musicode.
Lijst van variabelen
GND, 9V, 5V = aarde en voeding
N2,N1,N0 = output poort N-lijnen (orgel op poort 2)
-MRD = memory read (geldige data op de bus)
Q = flip-flop Q lijn
D7, ... ,D0 = data-bus 8 bits
Bovenstaande signalen zijn input voor de computerprint. Behalve aarde en
voeding gaan de volgende lijnen van computerprint naar orgelprints:
-OUT = geldige output voor het orgel
-Q = reset funktie, hoog bij verstek
A7, ... ,A0 = beveiligde data: kontakt-nummer en -stand (A0)
Signalen op de orgelprints zijn, behalve die hierboven:
L0, ... ,L15 = gedecodeerde nibble A7,A6,A5,A4
P0, ... ,P7 = gedecodeerd latch adres A3,A2,Al
S0, ... ,S7 = schakelsignalen voor de toetskontakten
RI,R2,R3 = "aarde" draden van de register voetmaten
Wat er (anno 2011) nog van over was:
foto bovenkant,
foto onderkant.