User manual
28
02 7 A A = Not A
03 5 9 PWM = A
04 2 6 Wacht 100 ms
05 3 5 Spring –5
69 54 7A 59 26 35
Listing 14: inverteren
12 Sprongen en vertakkingen
Tot nu toe werd er alleen gebruik gemaakt van de eenvoudige terugsprong (instructie 3) die
maximaal 15 adressen achteruit kon springen. Nu komt daar de absolute sprong (jump) bij. Omdat
het doeladres voor de sprong met maar 4 bits kan worden opgegeven, is er een extra instructie
beschikbaar om het high-nibble van het adres te bepalen. Hiermee ontstaat een adresruimte van
0–255. Dat is meer dan nodig is want de EEPROM van de controller omvat slechts 128 Bytes, dus
het bereik 00 tot 7F (decimaal 0 tot 127). Het geheugen is daardoor in acht pagina's 0 t/m 7 (Page
0–7), ingedeeld. Vóór een absolute spong moet de pagina van het doeladres worden opgegeven.
Twee tellussen met de variabele C en D voeren eveneens absolute sprongen uit waarbij ook vooraf
de pagina van het doeladres moet worden opgegeven. De voorwaardelijke sprongen werken als
"skip"-instructies (weglaten, overslaan). Wanneer aan de resp. voorwaarde is voldaan, wordt een
adres overgeslagen. Daar zou bv. een sprongopdracht of een rekenopdracht kunnen staan. Als
voorwaarde is een vergelijking tussen A en B en direct uitlezen van een bit aan de ingangspoort
beschikbaar.
Daarnaast is er nog een oproep voor een subroutine (Call) en het bijbehorende sprongopdracht
(Return). Er zijn weliswaar meerdere subroutines toegestaan maar vanuit een subroutine mag geen
andere subroutine worden opgeroepen omdat de interpreter altijd maar één terugsprongadres kan
onthouden.
80–8F: Adr-high = 0–15
90–0F: directe sprong (Jump) naar Adr-high, Adr-low
(0–15) A0–AF: tellus C-maal Adr-high, Adr-low
B0–BF: tellus D-maal Adr-high, Adr-low
(0–15)
C1–CF: voorwaardelijke sprong: wanneer (voorwaarde 1–15) dan overslaan
C1: if A > B then Adr = Adr + 1
C2: if A < B then Adr = Adr + 1
C3: if A = B then Adr = Adr + 1
C4: if Din.0 = 1 then Adr = Adr + 1