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.

Forth Orgel Deel II: Software