Woekeren met ruimte
Arnout van Kempen over rommelen in een digitale wereld.
In der Beschränkung zeigt sich erst der Meister, zei Goethe en hij had gelijk. In de begintijd van de 8-bits computers, zoals de TRS-80, de ZX Spectrum, de Apple II en de Commodore 64, maar ook nog bij de eerste 16-bitters zoals de Amiga, de Atari ST en de IBM PC, had een programmeur vrij weinig bewegingsruimte. Een totaal adresbereik van 64K, waar zowel pakweg 16K ROM als 48K RAM in moest passen. Een naar huidige maatstaven krankzinnig trage CPU, zonder cache, zonder prefetching, zonder GPU. Opslag via cassettetapes, of als je heel veel geld had een floppy disk met pakweg een halve tot anderhalve MB. Harde schijven van meer dan 10G waren heel lang onbestaand en toen nog bizar duur.
Binnen al die enorme beperkingen diende je toch met iets goeds te komen en dat lukte vrij goed ook. Waarom? Omdat programmeurs er in die tijd een eer in stelden om compact te programmeren. Het onderste uit de kan te halen. Trucjes toe te passen om de computer dingen te laten doen die de makers van die computer zelf nooit bedacht hadden.
Het leverde een enorme inventiviteit op. Om daar maar één voorbeeld van te noemen: de manier waarop Sinclair BASIC programmeerde in het ROM van de ZX 81 en de ZX Spectrum. Als je in die tijd een thuiscomputer kocht, dan zat BASIC standaard in het ROM. Alles wat tegenwoordig door een Operating System wordt gedaan, deed je toen vanuit BASIC. En wat je zelf wilde programmeren, ging ook vooral in BASIC. Maar daar had je weinig, heel weinig geheugenruimte voor. 16K vrij geheugen was niet bepaald uitzonderlijk en kleinere geheugens kwamen ook voor. Stel nu dat je van die 16K nog eens pakweg 10K aan data wilde spenderen en je beeldscherm nog een stuk of 2K opslokte, dan had je dus nog 4K, dat is 4.096 tekens, over om een programma in te schrijven.
Neem nu een heel simpel programma dat de gebruiker vraagt twee getallen in te geven, die vervolgens worden opgeteld. Geen foutafhandeling, geen toelichting, echt heel kaal. Dan krijg je bijvoorbeeld iets als
10 INPUT A, B
20 PRINT A+B
Hoeveel bytes zijn dat nu? Als je alles letter voor letter opslaat, dan kom je in totaal op 27 bytes. Bedenk dat spaties en 'nieuwe regel' ook een byte kosten en de regelnummers ook. Dat lijkt weinig, maar dit programma doet ook extreem weinig. En als je maar 4.096 tekens hebt, is 27 toch wel veel.
Een truc die Sinclair uithaalde, was dat in de ZX 81 en de ZX Spectrum alle BASIC commando's aan één toets werden gekoppeld en ook als één teken werden opgeslagen. De toetsaanslagen om bovenstaand programmaatje te maken waren dan:
10IA,B<enter>20PA<symbol shift>KB<enter>
Op het scherm zag je precies hetzelfde programma, maar je gebruikte minder toetsaanslagen, en vooral ook minder geheugen. In deze versie heb je nog maar 14 bytes nodig. Dat is een winst van bijna 50 procent.
Deze manier van denken leverde ons overigens wel ooit nog het Y2K-probleem op, maar het zorgde toch vooral voor snelle, slimme en compacte programma's. Pas toen computers sneller, beter en goedkoper werden, veranderde dat. Programmeurs werden, in de ogen van de oude garde, vooral gemakzuchtig. Fijn voor computerbouwers, dat wel. Want als er weer eens een nieuwe versie van een populair programma (vaak spellen) verscheen, moest iedereen echt weer een nieuwe computer kopen. De hardware ging compenseren voor 'makkelijk' programmeren, waar vroeger de slimme programmeur compenseerde voor beperkte hardware.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Gewone variabelen
Arnout van Kempen over rommelen in een digitale wereld.
Bestanden in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.
Alles draait om data
Arnout van Kempen over rommelen in een digitale wereld.
Omgeving: input-output
Arnout van Kempen over rommelen in een digitale wereld.
Omgeving: de configuratie
Arnout van Kempen over rommelen in een digitale wereld.