4. Alle begin is eenvoudig - Programmeren zonder poepas

Het laatste hoofdstuk van dit boek ligt nu voor u. In boek 2 ligt nog veel "lekkers” op u te wachten. Maar voor dat u daar als fijnproever aan toe bent moet u wel eerst de smaak van het programmeren te pakken krijgen. Aan de hand van het basismenu van hoofdstuk 3. In dit hoofdstuk krijgt u nog wat programmavoorbeelden voorgeschoteld. Want: goed voorbeeld doet goed volgen.

Geprogrammeerde I/O, de monitor-routines, hexadecimaal editen en assembleren – het staat u allemaal nog te wachten, in boek 2. Stuk voor stuk machtig interessante onderwerpen, daar niet van, maar pas nadat u het basis-programmeren, met de kennis van dit en het vorige hoofdstuk onder de knie hebt. Tenslotte beginnen de pianolessen ook niet met de minutenwals van Chopin, maar met "Jan, daar ligt een kip in het water". In ieder geval met iets betrekkelijk eenvoudigs. Dit hoofdstuk bevat een aantal programma's, elk met globaal en gedetailleerd stroomdiagram en met het toetsenwerk, op basis van de kennis van hoofdstuk 3. En verder praktische tips.

Vingeroefeningen met het decimale optelprogramma.
Waarin ook algemene praktische tips en regels

Letterlijk oefenen met de vingers, want er moet achtereenvolgens 594 keer een toets worden ingedrukt en wel zodanig dat het decimale optelprogramma van 196 bytes (geheugenplaatsen) in het werkgeheugen (RAM) komt te staan. Als dit eenmaal is gebeurd, kunnen we iets met dat programma gaan doen. In dit geval het optellen van twee decimale getallen van maximaal zes cijfers.

Het optelprogramma is besproken in hoofdstuk 3. Van belang daarbij zijn de figuren 20 (gedetailleerd stroomdiagram van het hoofdprogramma), 21 (de gedetailleerde stroomdiagrammen van negen subroutines) en 14 (naam en adres van elk der drie display-buffers). Gedetailleerde stroom diagrammen zijn de laatste fase in de programma-voorbereiding: elke handeling en beslissing is direkt vertaald in overeenkomstige instrukties. De opcodes en dus de bytes voor de geheugenplaatsen zijn bekend: een kwestie van opzoeken (zie het Aanhangsel). Ook de operand-gegevens zoals data, offset, of adres, die van belang zijn voor de uitvoering ervan zijn al bekend, zij het niet altijd meteen in detail. Dat wil zeggen: de bytes zijn nog niet bekend. Dit zullen we toelichten aan de hand van het toetsprogramma van het programma: decimaal optellen. Dat staat in figuur 1 van dit hoofdstuk. Voordat we dat doen eerst een overzicht. Het toetsprogramma van figuur 1 bestaat uit de volgende delen:

adressen 0200 tot en met 0248: hoofdprogramma (figuur 20)
adressen 0249 tot en met 0258: subroutine SHIFT  (fig. 21a) 
adressen 0259 tot en met 026E: subroutine ADD    (fig. 21b)
adressen 026F tot en met 0281: subroutine KEYDIS (fig. 21c)
adressen 0282 tot en met 028A: subroutine CLB1   (fig. 21d)
adressen 028B tot en met 0293: subroutine CLB2   (fig. 21e)
adressen 0294 tot en met 029C: subroutine CLDISP (fig. 21f)
adressen 029D tot en met 02A9: subroutine STO2   (fig. 21g)
adressen 02AA tot en met 02B6: subroutine STO1   (fig. 21h)
adressen 02B7 tot en met 02C3: subroutine RESDIS (fig. 21i)

Voorbereiding toetsprogramma

Terug naar het probleem van daarnet van het alles nog niet precies weten. Neem nou adres 0206. Daar komt de opcode van JSR te staan. Er moet worden gesprongen naar een subroutine. We weten welke, maar bij het opstellen van het toetsprogramma kennen we het startadres van de subroutine nog niet, omdat we nog niet precies weten hoe we uitkomen met het aantal nodige geheugenplaatsen (= het aantal nodige adressen). Dit brengt ons op twee algemene en zeer praktische regels:

  1. Het verdient sterke aanbeveling om de overgang van gedetailleerd stroomdiagram naar het fysieke toetsprogramma te laten verlopen via een "papieren" toetsprogramma!

  2. Voor operand-adressen en offset-bytes die nog niet bekend zijn moeten voldoende geheugenplaatsen worden gereserveerd, in tweede instantie. in een later stadium worden de ontbrekende bytes ingevuld.

Regel twee is belangrijk. Want:

  1. Programma's moeten een aaneengesloten aantal geheugenplaatsen innemen. In het geval van een (hoofd)programma met subroutine(s) geldt e.e.a. ook voor de subroutine(s).

Deze regel heeft te maken met het voor de microprocessor huishoudelijke feit dat de programmateller (PC) na uitvoering van een instruktie automatisch het adres van de volgende geheugenplaats bevat. En als op de bewuste geheugenplaats geen instruktie wacht op uitvoering is de junior-computer tot werkeloosheid gedoemd. En dat kan natuurlijk nooit de bedoeling zijn. Lege geheugenplaatsen ontstaan bijvoorbeeld indien tijdens het intoetsen van een programma in de data-mode (d.w.z. van de toetsen AD en DA is DA het laatste ingedrukt) per abuis twee maal achter elkaar de toets + wordt ingedrukt.

Lege plaatsen kan men overigens achteraf vullen met het byte EA, dat is de