www.jupiter-ace.co.uk
|
News, Reviews and Letters Index > Ace Review from Radio Bulletin October 1883 |
|
Radio Bulletin oktober 1983 page 425 |
|
Jupiter Ace
Gestructureerd programmeren voor iedereen W. A. Huntjens
|
De laatste tijd verschijnen er aan het computerfirmament steeds meer kleine sterretjes die vriendelijk knipogen naar de financieel niet al te draagkrachtige amateur. De ZX80 was de eerste: een eenvoudige behuizing, een mini-
mum aan onderdelen en een uitermate primitief toetsen-bord. Desalniettemin een echte computer, waar heel veel mensen een hoop plezier aan hebben beleefd. Later kwa-men de ZX81, de ZX-Spectrum, de VIC20, de Dragon, de Oric-1, ieder met hun eigen mogelijkheden en helaas ook beperkingen. Tenslotte moet er ergens op worden bezui-nigd. |
Een buitenbeentje in deze groep is de Jupiter Ace, die niet in Basic, maar in Forth wenst te worden geprogrammeerd. Waarom juist Forth en niet bijvoorbeeld Pascal? Omdat Forth, naast Basic, de enige programmeertaal is die met een minimum aan hardware en vooral geheugen kan worden gerealiseerd èn omdat Forth buitengewoon flexibel is en een veel duidelijker structuur in de programma's toelaat dan Basic. |
| |
|
Radio Bulletin oktober 1983 page 426 | ||
|
||
Laten we ter verduidelijking eens een Basic-programma en iets ge-lijkwaardigs in Forth naast elkaar zetten.
10 REM TELLEN : TELLEN 20 LET A= 1 1 30 PRINT A ; BEGIN 40 LET A=A+1 Dup . 1+ 50 IF A>100 DUP 100 > THEN END 60 GOTO 30 UNTIL ;
Beide programma's zullen de getal-len van 1 tot en met 100 op het beeldscherm zetten. In Forth wor-den hier geen variabelen gebruikt. Het getal 1 wordt op de stack gezet (dat is een stapelgeheugen; gebrui-kers van HP-calculators kennen dat wel). Het Forth-woord DUP du-pliceert het getal op de stack, wat nodig is omdat het Forth-woord ,,."
(gewoon een punt dus) één getal van de stack verwijdert en dat op het scherm zet. Het woord „1+" telt 1 op bij het eerste getal op de |
stack en dan wordt bekeken of het resultaat al groter is dan 100. Totdat (UNTIL) dat het geval is, wordt vanaf het woord „BEGIN" alles herhaald.
Enkele verschillen met Basic zul-len nu duidelijk zijn:
En nu het belangrijkste verschil. Het woord „TELLEN" in het voorgaande Basic-programma heeft geen echte functie: het is bedoeld als geheugensteuntje voor de programmeur. In Forth is dat anders: het woord „TELLEN" was natuurlijk geen origineel Forth-woord, maar door de computer wordt het, nadat het
|
bovenstaande is ingetypt, wel als zodanig beschouwd. Het woord kan dan op zichzelf, als programma, worden gebruikt (intypen van „TELLEN ENTER " geeft op het beeldscherm de getallen van 1 tot en met 100), maar het kan ook in een ander woord worden verwerkt. Een voorbeeld:
: DEMONSTRATIE CLS ." Ik kan tellen !" CR TELLEN CR ." Goed he ?" ; Het woord „CR" voert op het beeldscherm een Carriage Return uit; de rest zal wel duidelijk zijn. Dit nieuwe woord „DEMONSTRATIE" kan op zijn beurt weer worden gebruikt in een ander woord enzovoort. Een Forth-programmeur kan op deze wijze de woordenschat van zijn taal zelf uitbreiden door allerlei nieuwe woorden te definiëren, die hij voor bepaalde toepassingen denkt nodig te hebben. Door aan die woorden duidelijke namen te geven, kan een programma ook zonder toelichtende verklaringen overzichtelijk worden gemaakt. De door ons zelf gedefinieerde woorden lijken een beetje op de procedures in Pascal. Het verschil is, dat in Forth de parameters meestal worden doorgegeven via de stack. Bovendien is er in Forth geen echt hoofdprogramma. De naam daarvan zou immers ook weer in een ander woord kunnen worden gebruikt. Dat is dan ook de reden, waarom men in Forth eigenlijk |
Table 1
!# #> #S ( * */ */MOD + + LOOP , - . ." / /MOD 0< 0= 0> 1+ 1- 2+ |
2-
: ; < <# = > >R ?DUP @ ABORT ABS ALLOT AND ASCII AT BASE BEEP BEGIN BLOAD naam BSAVE naam BVERIFY naam C! C, |
C@
CALL CLS COMPILER CONSTANT naam CONTEXT CONVERT CR CREATE naam CURRENT D+ D< DECIMAL DEFINER DEFINITIONS DNEGATE DO DOES> DROP DUP EDIT naam ELSE EMIT EXECUTE |
EXIT
F* F+ F- F. F/ FAST FIND FNEGATE FORGET naam FORTH HERE HOLD I I' IF IMMEDIATE IN INKEY INT INVIS J LEAVE LINE |
LIST naam
LITERAL LOAD naam LOOP MAX MIN MOD NEGATE NUMBER OR OUT OVER PAD PICK PLOT QUERY QUIT R> REDEFINE naam REPEAT RETYPE ROLL ROT RUNS> |
SAVE naam
SIGN SLOW SPACE SPACES SWAP THAN TYPE U* U. U/MOD U< UFLOAT UNTIL VARIABLE naam VERIFY naam VIS VLIST VOCABULARY WHILE WORD tekst XOR [ ] |
|
Radio Bulletin oktober 1983 page 427 | ||
|
||
niet van een „programma" kan spreken. Gemakshalve hebben we het af en toe toch gedaan.
Forth biedt nog meer interessante mogelijkheden, zoals het zelf definiëren van nieuwe typen variabelen, arrays en strings, maar het wordt tijd dat we terugkeren naar ons uitgangspunt. De Jupiter Ace wordt geleverd in een witte plastic behuizing, waarop 40 rubbertoetsen prijken. De afmetingen zijn 21,5 x 19 x maximaal 3 cm. Het toetsenbord lijkt sprekend op dat van de ZX-Spectrum (toeval?), het voelt net zo aan en er kleven dezelfde bezwaren aan. Onder iedere toets zit een rond schijfje van geleidend rubber. Daaronder ligt de print waartegen het rubber, tijdens het intoetsen, contact maakt. Veel rekenmachines werken volgens dezelfde methode. Die geleidende schijfjes zijn, met een doorsnede van 5 mm, gewoon te klein. Het gaat allemaal goed zolang de toets rechtstandig wordt ingedrukt. Bij snel typen kan het voorkomen, dat de toetsen kantelen. Dan raakt de isolerende zijkant van de toets de print en er gebeurt niets. Rustig typen en goed kijken, luidt het motto. Op de print bevinden zich 28 IC's met als trots middelpunt de Z80A, die met een kloksnelheid van 3,28 MHz werkt. Dit gevoegd bij het feit dat Forth de woorden compileert, resulteert in een indrukwekkende snelheid. Een „lege" lus die 10000 keer wordt doorlopen ( : TEST 10001 1 DO LOOP ; ) heeft daarvoor op de Jupiter Ace 1,3 seconden nodig. Het overeenkomstige Basic-programma (10 FOR X%= 1 TO 10000 : NEXT X%) houdt de TRS80 ongeveer 17 seconden bezig. De Forth-compiler bevindt zich in twee EPROM's van 4K. Het RAM-geheugen is nogal krap bemeten: 3K, waarvan na aftrek van de systeemvariabelen en het beeldscherm- en karaktergeheugen ongeveer 900 bytes voor de gebruiker overblijven. Om de gedachten even te bepalen: het woord TELLEN neemt in het geheugen 39 bytes in beslag. Vooral in toepassingen met veel tekst zal het einde dus spoedig in zicht zijn. Uitbreiding tot 16 of 32K is met behulp van een opsteek-module mogelijk. Het zwart-witvideosignaal wordt |
via een rf-modulator naar buiten gevoerd. De beeldkwaliteit kan heel goed zijn, maar dat is in verregaande mate afhankelijk van het gebruikte TV-toestel. Een monitor-aansluiting is niet aanwezig, maar kan gemakkelijk worden gemaakt door de ingang van de rf-modulator „af te tappen". Het beeldscherm is in 23 regels van ieder 32 karakters ingedeeld; de 24e regel is de ingangsbuffer. Er zijn kapitale letters en onderkastletters. Geïnverteerde weergave (zwart op een witte achtergrond) is ook mogelijk. Omdat ieder teken een 8 x 8-matrix beslaat die door de gebruiker zelf (her)definieerbaar is (het karaktergeheugen staat immers in RAM), zijn op beperkte schaal tekeningen mogelijk met een oplossend vermogen van 256 x 184 punten. Een andere grafische mogelijkheid werkt met 64 x 46 blokjes, die met het woord „PLOT" kunnen worden aan- of uitgezet. Naar behoeven kunnen daar natuurlijk andere woorden worden bijgemaakt. Zo zou men de woorden NOORD, ZUID, OOST en WEST kunnen definiëren, om op het beeldscherm over een bepaalde afstand lijnen te trekken in de aangegeven richtingen. Het programma voor een rechthoek wordt dan:
15 10 30 OOST 20 NOORD 30 WEST 20 ZUID De twee eerste getallen geven het startpunt aan. Deze grafiek werkt erg snel: een lijn staat vrijwel ogenblikkelijk op het scherm. Tekst en grafieken kunnen door elkaar worden gebruikt. Geluiden van iedere gewenste lengte en toonhoogte kunnen worden voortgebracht met „BEEP". Het ingebouwde „luid"-sprekertje is alleen in een stille kamer goed hoorbaar. In principe werkt de Jupiter Ace met integers: gehele getallen van –32768 tot en met 32767. De mogelijkheid om met floatingpoint-getallen of met integers van 32 bit te rekenen is echter aanwezig. Er is een full-screen-editor, waarmee na enige gewenning comfortabel kan worden gewerkt. Omdat er maar 40 toetsen zijn (26 letters, 10 cijfers, tweemaal shift, spatie en enter), kunnen de resterende symbolen en functies alleen via één van de twee shifttoetsen worden bereikt. Alle toetsen hebben autorepeat |
(automatische herhalingsfunctie).
De cassette-interface gaf ondanks de hoge transmissiesnelheid van 1500 baud geen problemen.
De documentatie, die bestaat uit een boekwerk van 181 pagina's, laat maar één ding te wensen over: een Nederlandse vertaling. Het is een duidelijke, goed geschreven handleiding met talrijke instructieve voorbeelden, waarmee de beginner stap voor stap wordt ingewijd in de geheimen van Forth (tabel 1 geeft de aanwezige commando's weer). De uitbreidingsmogelijkheden beperken zich tot de 16 of 32K RAM-modulen; een printerinterf ace is in het vooruitzicht gesteld. Volgens de handleiding is het mogelijk diverse uitbreidingen die voor het ZX81 van Sinclair in de handel zijn, te gebruiken op de Jupiter Ace. Zonder meer gaat dat niet: de aansluitpunten achter op de print zijn wel dezelfde als die op de ZX81, maar ze liggen in een andere volgorde.
De Jupiter Ace wordt geleverd met een losse netvoeding, kabels voor TV en cassetterecorder, het reeds genoemde handboek en een demonstratiecassette met vijf programma's. Heel aardig is de „stack-demonstration", die met behulp van de hoog-oplossende grafiek op het beeldscherm precies laat zien, wat rekenkundige bewerkingen en andere Forth-woorden met de stack doen. Conclusie
Een echte „volkscomputer" zal de Jupiter Ace nooit worden: er kan niet mee in kleur worden gewerkt en kant en klare programmatuur ontbreekt vooralsnog. Maar voor de echte hobbyist, die graag zelf zijn programma's maakt en soms het gevoel heeft, dat hij zo langzamerhand is uitgestoeid met Basic, biedt dit apparaat een bijzonder aantrekkelijk alternatief. |
|