Een en ander zal gedemonstreerd worden aan een bandlezer.
Voor een bepaalde bandlezer neem ik de volgende conventies aan (zie X8, nr 22). Jansen is zich bewust van 6 elementen in de X8, die daar speciaal aan deze bandlezer zijn toegekend:
Adres f0 voor de leegwijzer van het startmagazijn:
Adres f1, dwz. het beginadres van het startmagazijn; ik neem de volgende structuur van het startmagazijn aan: M[M[f0]] = heersende startinformatie
M[M[f0 + 1] = heersend klassewoord
Adres f2 voor startopdrachtenteller:
Adres f3 voor ingrepenteller:
De qualificaties "acflop" en "Inflop" als boven gegeven zijn "X8-centrisch"; in "Jansen-centrische" terminologie zouden de twee qualificaties net andersom zijn.
Startinformatie bevat door de lengte 9 bits en voor het adres 18 bits. Er is voorshands aangenomen, dat een speciale configuratie fungeert als een opdracht "herstel OK-toestand". Deze veronderstelling is niet essentieel.
Ik neem aan, dat er voor de sybchronisatie[sic] tussen Jansen en de bandlezer twee flip-flops in het spel zijn, IF en VB.
IF is "jansencentrisch" een ingreep-flipflop;Jansen zal
De naam V8 is een afkorting van "Vul 8" omdat karaktertransport zal plaats vinden via een register, dat in een of ander pampflet een keer 8(and) genoemd is. Dit register is vulbaar door de bandlezer en uitleesbar door Jansen.
Als er nu geen OKF en STF waren, dan was het allemaal niet zo ingewikkeld: dan doet Jansen in wezen de cyclus: "P(IF); lees 8 en zend door; V(V8)"
Om nu OKF en STF in de beschouwing te betrekken (zoals ze in X8 nr 22 geinttroduceerd[sic] zijn) moet ik, dacht ik straks nog wat nadere veronderstellingen maken.
Ik citeer:
"Het drukken op de groene knop heeft tot gevolg: STF := RK ∨ E8; Zolang E0 = true wordt, desnoods bij herhaling: if ¬ STF then begin OKF := false; STF := true end uitgevoerd.STF en OKF zijn in deze beschrijving op enige houdende elementen. Met de rode knop
Herstel-OK betekentOKF := true; if STF then wacht.
Ik veronderstel, dat Jansen wel op elk gewenst moment OKF kan uitlezen, maar niet zelf OKF kan zetten. Dit is nl. niet nodig en misschien zelfs ongewenst.
Er zijn twee verschillende verrichtingen, die Jansen van de bandlezer kan vragen en ook inderdaad aan de bandlezer moet overlaten, omdat ze willekeurig lang kunnen duren:
Ik neem aan, dat er zich in de bandlezer een boolean HOK (Herstel OK) bevindt, die via de plug door
Als de bandlezer de passeeroperatie op V8 uitvoert, raadpleegt hij HOK: normaal is
Opm 1. Als Jansen successvol de passeeroperatie op IF gedaan heeft, moet Jansen kunnen detecteren of er nu een nieuw karakter in 8 is gekomen of niet, dwz. of de vorige verrichting van de bandlezer herstel-OK was of niet. Jansen kan dit ontdekken door analyse van de vorige (Heersende zo je wilt) startopdracht. Ordelijker, lijker, sneller en waarscijnlijk[sic] iets duurder is het wanneer op de bandlezerplug uitleesbaar is, of er een nieuw karakter in 8 zit, maw. of
Opm.2. Ook na voltooing van de herstel OK-opdracht moet Jansen de OKF uitlezen: er kan immers opnieuw storing zijn ontstaan.
Opm.3. Er is aangenomen, dat Jansen 1 maal per karakter cyclus kijkt, of de OKF nog wel true is; vlak na deze constatering kan Jansen dan nog om de volgende heptade vragen; het is de bedoeling, dat hij die dan nog krijgt, maw. dat er in de bandlezer geen blokkade zit, die dat verhindert. Jansen neemt dan verder de verantwoordelijkheid op zich, om niet om meer karakters te vragen, voordat de OK-toestand hersteld is.
Ik neem aan, dat de inviduele acties van Jansen zo kort duren, dat we hen in doofheid kunnen verrichten: als besloten is, dat een karakter van de bandlezer getransporteerd gaat worden, dan maakt Jansen die handeling eerts[sic] af, voordat hij gaat kijken of er ook iets anders te doen is.
Ik neem voorts, op financiele en organisatorische gronden aan, dat Jansen wel beschikt over een opdrachtenteller, maar niet over een levend geheugen, waarin een link kan worden opgeborgen. Interruptie in de ware zin des woords treden dus niet op. Omdat ik zo verder zo min mogelijk levend geheugen in Jansen wil veronderstellen, wordt de programmering voor Jansen een heel gebonden kunst.
Jansen kan tijdens een actie natuurlijk altijd het levend geheugen van de X8 raadplegen (zie 1.2. opm. 1). Ik stel echter, dat frequente raadpleging van het X8-geheugen in het scanproces, wat Jansen nu gaat doen, ongewenst is. Zolang Jansen wacht op werk, moet het geheugen van de X8 ongemoeid blijven.
He doel van deze notitie is, om er achter te komen, hoeveel "levend geheugen" bv. op flip-flops Jansen moet hebben, opdat uitmaken, wat de volgende actie zal zijn, een interne aangelegenheid van Jansen zal zijn. Mijn verwachting is, dat de programering voor de bandlezer als voorbeeld, de noodzaak voor luisterbits zal illustreren.
Ik ga nu, voorlopig met veronachtzaming van OKF ruwweg twee programmatjes voor Jansen maken. Bedenk hierbij, dat
De twee programma's zijn: a) "L:P(
V(V8); comment start bandlezer;
L1:P(IF); lees 8, berg en tel; if telling ≠ 0 then
beginV(V8); goto L1 end;
M[f0] := 2 × f1 + 2 - M[f0]; comment opsteppen van leegwijzer;
V(
en
b)"L: P(
L1:P(IF); lees 8, berg en tel; V(V8); if telling ≠ 0 then goto L1; M[f0]:= 2 × f1 + 2 - M[f0]; goto L"
Programma a) veronderstelt, dat de "nuchtere toestand" van de bandlezer is met lege 8; programma b) veronderstelt dan het 8-register vol. Hier zit weer zo'n willekeur als en EWD62 gesignaleerd is. Zonder veel overtuiging kies ik voor programma a): ik kom hier straks nog op terug.
Nu wil ik echter tot uiting laten komen, dat Jansen geen echte ingreep heeft. Dit komt in de programmatjes daarin tot uiting, dat ik ze niet als cycli, maar als gestrekte stukjes schrijven kan, ingeleid door een P-operatie en afgesloten door een "klaar", dwz. de sprong naar de distributeur, de scannerij, met vergeting van het feit, dat we op de plaats "klaar" een proces weer onderbroken hebben. In het inwendige van zo'n stukje mag dan geen P-operatie meer voorkomen.
Versie a) valt dan uiteen in twee losse stukken, waarvan de gewenste afwisseling door een luisterbit LV geregeld kan worden: "P(
"P(IF); lees B, berg en tel; if telling ≠ 0 then
V(V8)else
beginM[f0]:= 2 × f1 + 2 - M[f0]; V(
klaar"
De laatste V-operatie maakt een ingreep voor de X8 en signaleert via LV, dat wat Jansen betreft, de volgende startopdracht geaccepteerd kan worden.
Ik kan me dit voorstellen, mits op de plug van de bandlezer voor IF en V8 drie "draadjes" zitten, een uitlesesdraadje voor IF, een false-zet-draadje voor IF en een true-zetdraadje voor V8.
In deze conceptie mogen de laatste twee draadjes niet samenvallen. Doen ze dat wel, dan moeten we een programma maken in stijl b) en dat kost ons dan in Jansen een tweede luistervergunning, nl. om de terugmelding van bandlezer naar Jansen "er is weer een volgend karakter" in geval van nog niet ontstane interesse tijdelijk te kunnen negeren. Nl.: P(
"P(IF, LV2); lees B, berg en tel; V(VB); if telling ≠ 0 then V(LV2) else
begin M[f0] := 2 × f1 + 2 - M[f0]; V(M[f3, LV1) end; klaar"
Vergelijking van deze twee programmatjes illustreert aardig, hoe we de flip-flop, die we bij de bandlezer kunnen uitsparen, er bij Jansen weer bijkrijgen.
We veronderstellen op het ogenblik dus een machanisme, dat de uitkomsten van logische producten scant en op gront van het = 1 zijn naar een bepaald programmatje springt. Ik neem aan, dat daar de P-operatie voltooid wordt. In het laatste programma kan ik daar
Nu het programma in versie a) met inbegrip van de OK-flipflop. Ik veronderstel dat er nu op de plug een uitleesdraadje voor OKF zit en een true-zetdraadje voor HOK. Om schrijfwerk (dwz. programmeruimte) te besparen, lopen de twee stukjes na enige tijd samen.
"P(
if herstel OK-toestand in startmagazijn then begin HOK:= true; V(V8); klaar end
else
L: begin meldt OKF in klassewoord;
M[f0]:= 2 × f1 + 2 - M[f0]; V(
en
"P(IF); if herstel OK-toestand then goto L;
lees 8, berg en tel;
if ¬ OKF ∨ telling = 0 then goto L;
V(V8); klaar".
Wij merken hierbij op:
In het geval van uitgeprogrammeerd scannen kunnen we "klaar" nog op minstens twee manieren programmeren: of als een sprong naar een vast punt, waar we de boolean condities op een vaste volgorde gaan onderzoeken, en als we niets vinden, dat gedaan kan worden, springen we weer naar het begin van deze lijst terug. Of: we onderzoeken de boolean voorwaarden cyclisch, maar als we een programmatje uitgevoerd hebben springen we midden in de scanketen, vlak onder de plaats, waar we hem verlaten hebben. Mengvormen zijn ook nog mogelijk, maar dan lijkt het me al ras heel moeilijk, om iets over maximale wachttijden etc. te weten te komen.
Ik heb wel idee, hoe ik hier enige gegevens over zou kunnen krijgen, of ik er binnenkort aan toe kom, is een tweede. Totzover lijkt me de moraal, dat het verwijderen van de plicht om link's te kunnen bergen tegen de prijs van extra luisterbits me een voordelig handeltje lijkt.
transcribed by David J. Brantley
latest revision Sat, 29 May 2004