GIER/Lars LCDATA DK side271

Fra DDHFwiki
Spring til navigation Spring til søgning

Indledning

Ved julefrokosten den 7. december 2023 overrakte Finn mig dette stykke papir:



Tydeligvis et slip-program, symbolsk GIER maskinkode, og funktionen fremgår af beskrivelsen nederst på siden:

Det eneste produkt af 3-cifrede tal hvor hvert ciffer 0->9 forekommer netop 2 gange i opstillingen.

Og opstillingen, der er løsningen til dette spørgsmål, ses også skrevet nederst på siden:

    a1  a2
   179*224
 ---------
   716
  358
 358
 ---------
 40096

Det tastede jeg så ind og i en første udgave ser det således ud:

  1 ;slip<
  2 ; Lars_LxDATA_DK_side271.asc: Udskrift af slip kode med håndskrevne
  3 ; kommentarer modtaget i papirkopi fra LARS@LxDATA.DK.
  4
  5 ; Det eneste produkt af 3-cifrede tal hvor hvert ciffer 0->9 forekommer
  6 ; netop 2 gange i opstillingen.
  7 ;
  8 ;             a1  a2
  9 ;            179*224
 10 ;           ---------
 11 ;            716
 12 ;           358
 13 ;          358
 14 ;         ----------
 15 ;          40096
 16
 17 ; 2024-Jan-02 12.24 / TN: Indtastet med lidt flere mellemslag og de
 18 ;                         håndskrevne kommentarer
 19
 20 _b a5,b4,c5
 21      arn 99    D t1
 22      ca  1000  , hv  b3
 23      ck  -30   , gr  a1
 24 b1:  it  1
 25      arn 99    D
 26      nc  1000  , hv  r4
 27 b2:  pa  r-2   t   99      ; retabler tal 2
 28      pa  r-4   t   1       ; og tæller
 29      hv  r-8               ; start forfra
 30      ck  -30   , gr  a2
 31      grn -1    M  t1       ; nulstil celle
 32      arn (r-1) D           ; 1[sic]-9
 33      nc  9     , hv  r-2
 34      pa  r-3   t   -1      ; retabler nulstiller
 35      arn a1    , pi  0     ; hent 1. tal, PI 0
 36      hs  b4                ; check cifre
 37      arn a2    , hs  b4    ; check cifre
 38      pmn a1    , ml  a2    ; gang ud
 39      tl  39    , sr  c0    ; check for resultat
 40      hv  b2            NT  ;   > 99999
 41      ar  c0    , pi  512
 42      hs  b4                ; check cifre
 43      pmn 1000  DX          ; beregn størst mulige ciffer i a2
 44      cl  -69   , dl  a1    ; R=1000, M=0, R=1000/a1, M=rest
 45      tk  30    , gr  a3
 46
 47      arn a2    , pp  -1    ; beregn 1. ciffer
 48      sr  c2    , pp  p1    ;   i a2
 49      hv  r-1           NT
 50      ar  c2    , gr  a5
 51      arn p-1   D           ; er det for stort?
 52      sr  a3    , pi  0
 53      hv  b2            NT  ; ja - tæl videre i a1
 54      pmn p     D           ; gang med a1
 55      cl  -30   , ml  a1
 56      tl  39    , hs  b4    ; check cifre
 57
 58      arn a5    , pp  -1    ; beregn 2. ciffer
 59      sr  c3    , pp  p1    ;   i a2
 60      hv  r-1           NT
 61      ar  c3    , gr  a5
 62      arn p-1   D           ; er det for stort?
 63      sr  a3
 64      hv  r5            LT  ; nej - OK
 65      arn 9     D           ; spring frem til
 66      sr  a3    , tl  -69   ;   næste hele 100
 67      ml  c3    , tl  69    ;   for a2
 68      ga  b1    , hv  b1
 69      pmn p     D           ; gang med a1
 70      tl  -30   , ml  a1
 71      tl  39    , hs  b4    ; check cifre
 72
 73      arn a5    , tk  30    ; hent sidste ciffer
 74      sr  1     D           ;   i a2
 75      sr  a3                ; er det for stort?
 76      hv  r4            LT
 77      arn 9     D           ; ja - tæl frem
 78      sr  a3    , ga  b1    ;   til næste hele
 79      hv  b1                ;   10-er med a2
 80      pmn a5    , ml  a1    ; gang med a1
 81      tl  39    , hs  b4    ; check cifrene
 82
 83      vk  33    , lk  900   ; en løsning er fundet!
 84      vk  34    , lk  940   ; Læs taltrykke-sekvens
 85      vk  35    , lk  980
 86      vk  0
 87      arn a1    , sy  64    ; skriv a1
 88      qq  c5    , hs  902
 89      sy  60    , sy  2     ; skriv *
 90      sy  58    , arn a2    ; skriv a2
 91      qq  c5    , hs  902
 92      pa  b1    t   1       ; retur
 93      hv  b1
 94
 95 b3:  sy  64    , sy  58    ; skriv SLUT
 96      sy  18    , sy  35
 97      sy  20    , sy  19
 98      sy  64    , zq  0
 99
100 b4:  pa  r5    LOA t c0    ; if OA=1 then
101      pa  r12   LOA t 4
102      pa  r3    NOA t c1    ; a(1000)
103      pa  r10   NOA t 2
104      pp  -1    , it  1
105      sr        , pp  p1
106      hv  r-1           NT  ; Hvis R positiv
107      ar  (r-2) , gr  a4
108      gp  r1    , it  1     ; tæl indholdet i celle "ciffer" 1 op
109      qq  ()    , arn p
110      nc  3     , hh  r2
111      pa  b1    t   1
112      hv  b1    , arn a4
113      bt        t   -1
114      hv  r-10
115      pi  0     , hr  s1
116
117      _m
118 a1:  qq                    ; tal
119 a2:  qq                    ; tal
120 a3:  qq                    ; max ciffer i a2
121 a4:  qq                    ; rest for b4-rutine
122 a5:  qq                    ; rest v. div med 100, 10
123
124 c0:  100000
125      10000
126 c1:  1000
127 c2:  100
128 c3:  10
129 c4:  1
130 c5:  qq 3.3+3.7+3.23
131
132 _e
133 _s

Det skal ud og køre. Så ild i Mogens' GIER simulator. Til de indledende manøvrer vil jeg blot henvise til beskrivelserne der og fortælle, at detaljerne efterfølgende handler om kørsel under Linux. Men Windows og andre fundamenter er også mulige.

En vigtig omstændighed, som Mogens gjorde mig opmærksom på, er, at programmet skal køres under HJÆLP, som er det tidlige system af hjælpeprogrammer, der er beskrevet i Lærebog i kodning for GIER, bind 2. Og programmet skal køres under HJÆLP fordi det bruger den taltrykningssekvens, der beskrives i afsnit 12.2 "Taltrykning med sekvensen i HJÆLP": Koden linie 83-86 indlæser sekvensen fra tromlekanal 33-35 til celle 900-1019 og den kaldes med hs 902 efterfølgende.

Så med GIER simulatoren startet skal vi vælge konfigurationen hjælp.gier (hjælp.gier).

Med en .gier konfiguration netop indlæst, vil man ofte have behov for at justere sine "Options": Vi tænder for "Use sound" og under "View" slukker vi for "Tape Punch" og tænder for "Main Control Board":

HJÆLP systemet er grundlæggende blot indlæsning med SLIP (Symbolic Language Input Program): Programkode og data i passende menneskevenligt format oversættes til internt format og lagres på tromlen. Dertil kan man bruge en række forskellige styrelinier til administrative funktioner: F.eks. _l (understreget l), der får SLIP til at fortsætte læsning fra strimmellæseren. Og _h (understreget h) med videre, til udførelse af hjælpeprogrammer.

Den tændte, grønne INPUT-lampe i øverste højre hjørne af vinduet, der repræsenterer skrivemaskinen, fortæller, at HJÆLP er klar til at modtage indtastning. For yderligere bekræftelse af situationen, kan vi taste et mellemslag og, som beskrevet i Lærebog 2, fodnoten side 58, få "en kontroludskrift med rødt af løbende adresse i (og eventuelt løbende kanalnummer k)":

Der er således klar til indlæsning på kanal 294, adresse 10. Her fortæller side 56 i Lærebog 2, at "kanal 294-319 anvendes som et billede af ferritlageret under indlæsning" og det er jo fordi SLIP selv kører i det "rigtige" ferritlager.

Vi lægger programmet i strimmellæseren, tryk på RESET og vælg filen med programmet. I læser-vinduet kan vi skimte den første del af strimlen:

Strimmelvisningen tager ikke hensyn til case-skift på strimlen og det semikolon (;), der egentlig står først, vises som tegnet 5: Semikolon er 5 i upper case, som det fremgår af tegn-tabellen i afsnit 8.4 af Lærebog i kodning for GIER, bind 1. Og det slip<, der indleder strimlen er egentlig henvendt til HJÆLP 3 systemet, men det er i denne sammenhæng jo blot en kommentar på grund af ;'et.

Men vi taster et _l (understreget l) og HJÆLP begynder så at læse strimlen. Som slutter med _s (understreget s), der betyder fortsæt læsning fra skrivemaskinen. Vi ser den afsluttende del af strimlen i læser-vinduet:

Et mellemslag på skrivemaskinen giver fornyet udskrift af kanal og adresse:

Programmet fylder således 111-10 = 101 celler i lageret.

For at starte programmet, taster vi _e10 (understreget e, efterfulgt af den ønskede adresse, hvor programmet skal starte). Og en summen fortæller, at GIER er i sving.

Men: Vi bliver skuffede, for efter noget tid (ca. 30 minutter, hvis lyden er tændt) stopper maskinen, uden at have produceret noget resultat. Lidt grublen leder til problemet: Maskinens by-register, der bestemmer, hvilke enheder, tegn skrevet med sy-ordren, skrives på, indeholder åbenbart som udgangspunkt 0 (nul), hvilket betyder, at udførelse af en sy-ordre ikke har nogen effekt.

Der er forskellige måder at reparere: Men vi må til en start afslutte programmet, der står i stop-ordren zq linie 98, ved at trykke på hjælpemanøvrebordets HP-knap:

Det bliver bekræftet på skrivemaskinen og HJÆLP er atter aktiveret:

Det er ikke ganske klart, om programmet vil fungere, hvis vi bare kører det igen fra celle 10, så vi beslutter blot at indlæse strimlen igen, men så justere by-registeret i hånden, når kørslen er startet. Inden indlæsningen taster vi en blank og får kanal og adresse bekræftet, så efter indlæsning og start af programmet for anden gang, ser det således ud på skrivemaskinen:

Med programmet kørende, må vi skynde os over på (hoved-)manøvrebordet, hvor vi trykker på NORMAL STOP knappen:

Vi vælger by-registeret, som derved bringes frem i anden lamperækkes bit 0-9 (ADRESSEDEL) og vi observerer, at lamperne er slukkede, registeret indeholder et nul:

Skrivning på ydre enheder fra GIER er lidt en ormegård: Man kan skrive på flere enheder samtidig med udførelsen af blot en enkelt sy-ordre. Og valget af enheder afhænger både af indholdet af by-registeret og stillingen af knapperne på knap-panelet på hjælpemanøvrebordet. Men med knapperne stillet i den diagonal, som er vist tidligere, skal vi blot indsætte et 16-tal i by-registeret, dvs. tænde bit 5. Derefter trykker vi på NORMAL START knappen:

Og efter passende ventetid (ca. 12 minutter med lyd på), kommer løsningen frem, efterfulgt af den pæne afslutning, efter endnu en stund, i alt ca. 30 minutter som før:

Der er lidt knas med tegnsætningen, mellem de to tal burde der stå et kryds, Flexowriter gangetegnet, men det kikser i visse sammenhænge, således også denne.