DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦8e59c66a5⟧ TextFile

    Length: 176128 (0x2b000)
    Types: TextFile
    Names: »D154«

Derivation

└─⟦ae2411776⟧ Bits:30008864 Diskette med tekster der formodes at være 31-D-152…161
    └─⟦this⟧ »D154« 

TextFile

                    
           \f

                                                 i 
           
          I_N_D_H_O_L_D_S_F_O_R_T_E_G_N_E_L_S_E_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_I_D_E_
           
          1.  INDLEDNING .............................................   1 
           
          2.  GENEREL BESKRIVELSE AF TESTOMGIVELSER ..................   2 
              2.1  Diskette stationer ................................   2 
              2.2  Externt udstyr ....................................   2 
              2.3  Prom-identifikation ...............................   3 
              2.4  Printkort .........................................   3 
               
          3.  BESKRIVELSE AF TESTFUNKTIONER OG TESTPROGRAMMER ........   5 
               
          4.  IMPLEMENTEREDE TESTPROGRAMMER ..........................   9 
              4.1  Lagertest .........................................  12 
                   4.1.1  Lagertest, modif 0 .........................  13 
                   4.1.2  Simpel lagertest, modif 1,2,3 ..............  16 
              4.2  Parallel out/keyboard in test .....................  18 
              4.3  Flexible Disk test ................................  19 
                   4.3 1  Diskette formattering ......................  21 
                   4.3.2  Diskette Write/Read ........................  22 
                   4.3.3  Diskette test specifikationer ..............  23 
              4.4  Printer test ......................................  26 
              4.5  Keyboard in/display out test ......................  26 
              4.6  Terminal out/terminal in test .....................  27 
           
          5.  EN FULDSTÆNDIG SYSTEMTEST ..............................  28 
           
          6.  KONKLUSION .............................................  30 
           
           
          B_I_L_A_G_: 
           
          A.  REFERENCER .............................................  31 
           
          B.  FEJLKODETABEL OG FÆLLES ARBEJDSOMRÅDE ..................  32 
           
          B.  OVERORDNET STRUKTUR OG FÆLLES RUTINER ..................  33 
           \f

                                                 ii 
           
          I_N_D_H_O_L_D_S_F_O_R_T_E_G_N_E_L_S_E_ _(_f_o_r_t_s_a_t_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_I_D_E_ 
           
          D.  RC701 SYSTEMTEST ....................................... 34 
           
          E.  LINESELECTOR TEST ...................................... 35 
           
          F.  RC702 SYSTEMDISKETTE TEST .............................. 36 
           
          G.  TEKNIKERPANEL, TCP702 .................................. 37 
                    
          H.  PROGRAM-LISTNING I UDDRAG .............................. 39 
           \f

         1_._ _ _ _ _ _ _ _ _I_N_D_L_E_D_N_I_N_G_ 1.
           
          Denne manual beskriver på nødtørftig vis de vigtigste parametre,
          som er af betydning for test af og fejlfinding på RC702. Beskri-
          velsen dækker i et vist omfang også fejlsøgning på RC701, idet
          testprogrammerne er næsten ens udformet. På RC701 skal man spe-
          cielt bemærke de ændrede hardw-portnumre, som anført i appendix D.
           
          Manualen findes kun i denne foreløbige version, som forhåbenlig
          senere kan udbygges og udsendes som almindelig standard klasse 2
          manual. 
           
          Den omtalte version af testprogram-systemet er på mange måder
          ikke tilpasset de overordnede krav til funktion og virkemåde, som
          foreligger med henblik på indførelse af funktionsanalyse, udnyt-
          telse af fælles testrutiner (ramme-system for RC700, RC850 osv.),
          ligesom lagerpladskrav allerede er en begrænsende faktor. 
           
          Testprogrammerne afvikles ved hjælp af TCP702. 
           
          Manualen giver en beskrivelse af, hvorledes man benytter testpro-
          grammerne. En systembeskrivelse af programmerne vil forhåbentlig
          blive tilføjet senere. 
           
          Endelig skal det fremhæves, at manualen også beskriver allerede
          afprøvede testprogrammer, der har måttet udelades i denne version
          af testsystemet grundet lagerpladskrav. 
           \f

         2_._ _ _ _ _ _ _ _ _G_E_N_E_R_E_L_ _B_E_S_K_R_I_V_E_L_S_E_ _A_F_ _T_E_S_T_O_M_G_I_V_E_L_S_E_R_ 2.
           
          Et komplet RC700 system til aftestning vil normalt bestå af
          nedenfor angivne enheder. 
           
           
2_._1_ _ _ _ _ _ _ _D_i_s_k_e_t_t_e_ _s_t_a_t_i_o_n_e_r_ 2.1
           
          a)  1 mini-drive monteret med unit 0 strap platform + slutmod-
              stand, eller 
           
          b)  2 mini-drives monteret med henholdsvis unit 0 og unit 1 strap
              platform + slutmodstand på unit 1, eller 
           
          c)  1 mini-drive monteret med unit 0 strap platform og 1 maxi
              drive monteret med unit 1 strap platform og slutmodstand,
              eller 
           
          d)  1 maxi-drive monteret som beskrevet under a), eller 
           
          e)  2 maxi-drives monteret som beskrevet under b). 
           
          Maxi-drive montering foregår altid via det externe stik på
          bagsiden mærket J1009: "Ext. Flex. Diskette". 
           
          Mini-drive montering foregår altid via de interne kabelstik. 
           
          Ved test af et stand-alone maxi-drive system, skal mini-drive
          kabler fjernes (pkt. d + e). 
           
           
2_._2_ _ _ _ _ _ _ _E_x_t_e_r_n_t_ _u_d_s_t_y_r_ 2.2
           
          Skærmenhed, type:     _ _ _ _ _R_C_7_5_1_ _ _ _ _ _ _ 
          Keyboard, type:       _ _ _ _ _R_C_7_2_1_ _ _ _ _ _ _ 
          Printer, type:        _ _ _ _ _R_C_8_6_1_ _ _ _ _ _ _ 
          Lineselector, type:   _ _ _ _ _R_C_7_9_1_ _ _ _ _ _ _ 
           \f

                   Diverse kabler, ikke specificeret, herunder: 
           
          a)  Ext. flex. diskette kabel(ler) 
          b)  Int. flex. diskette kabel(ler) 
          c)  Keyboard/parallel port sammenkoblings kabel (test alene) 
          d)  Terminal afslutningskabel (test alene) 
          e)  Lineselector kabel(ler) + printer kabel. 
           
          Mini-diskette, type VERBATIM MD550-01 (Double Sided) 
          Maxi-diskette, type 3M 740/2-0 (vendbar) 
                    
           
2_._3_ _ _ _ _ _ _ _P_r_o_m_-_i_d_e_n_t_i_f_i_k_a_t_i_o_n_ 2.3
           
          Testprom no. 1  :  type I 2716, id  _ _R_O_A_3_7_8_ _ _ _ 
          Testprom no. 2  :  type I 2716, id  _ _R_O_A_3_7_9_ _ _ _ 
          Systemprom no.1 :  type I 2716, id  _ _R_O_A_3_7_5_ _ _ _ 
           
           
2_._4_ _ _ _ _ _ _ _P_r_i_n_t_k_o_r_t_ 2.4
           
          I fig. 2.4 er søgt fremstillet på forenklet vis placeringen på
          printkort af de kredse/moduler, der benyttes i forbindelse med
          test af RC702 systemerne. 
           
          S_W_1_: 
           
          Testprogram select switch, se kapitel 3. 
           
          T_e_k_n_i_k_e_r_p_a_n_e_l_ _(_T_C_P_7_0_2_)_: 
           
          Benyttes ved alle testforsøg til start/stop af programudførelse
          samt lageropslag. TCP702 kan anvendes med/uden RESET-tråd, mærket
          >R>. Nærmere beskrevet i appendix A samt appendix H. 
           \f

                   P_r_o_m_-_s_o_k_l_e_r_: 
           
          Ved alle testforsøg benyttes de under pkt. 2.3 beskrevne kredse. 
           
          Grundet pladsnød udføres test no. 3 og 5 p.t. på et kørende COMAL
          system, hvorfor en system-prom skal anvendes. 
           
          M_C_: 
          MC-kredsen skal benyttes, når der anvendes system-prom-kredse. 
          MC-platform skal benyttes, når der anvendes test-prom-kredse. 
           
          N_B_!_  Såfremt TCP702 anvendes i non-DMA mode, udtages DMA-kredsen
               samt IC-position 56. 
               I stedet isættes en DMA-strapplatform. 
               Dette er ikke angivet på fig. 2.4. 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
          Figur 2.4 
                               
                               \f

         3_._ _ _ _ _ _ _ _ _B_E_S_K_R_I_V_E_L_S_E_ _A_F_ _T_E_S_T_F_U_N_K_T_I_O_N_E_R_ _O_G_ _T_E_S_T_P_R_O_G_R_A_M_M_E_R_ 3.
           
          I fig. 3 nedenfor er angivet, hvorledes de implementerede test-
          programmer kan selekteres via SW1. 
           
           
                              Testprogram udvælgelse 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
          Figur 3 \f

                   Som det fremgår af fig. 2.4 samt fig. 3, der viser SW1 i forhold
          hertil, er der benyttet omvendt fremstilling af
          registerindholdet. Normalt vises mindst betydende bit til højre
          (LSB), bitposition 0. 
           
          Til brug ved sammenligning med testprogram-udskriften, skal der
          derfor refereres direkte til den heri angivne SW1-dekodningsta-
          bel, se appendix C. 
           
          De enkelte testprogrammer startes fra teknikerpanelet efter SW1-
          indstilling. Testprogrammet vil dernæst udføre en hel testsekvens
          - en test pass - og hoppe retur til den fælles startdel efter en
          udskrift (pass xxx) på skærmen. Såfremt SW1 er uændret, vil man
          automatisk blive genstartet i samme test, der nu afsluttes med
          udskriften >pass xxx + 1>. Således fortsættes. 
           
          Af ovenstående ses, at hver enkelt testrutine skal afbrydes manu-
          elt. Der eksisterer imidlertid den mulighed at udnytte >all-
          test>-faciliteten, hvorved fås en automatisk udførelse af de
          enkelte tests n efter n som angivet i tabel 3.1. Denne test
          repeteres som ovenfor omtalt i sin helhed. 
           
          Her og i det følgende er alle konstanter, referencer til lager-
          celler og data m.m. angivet på hexadecimal form, hvis ikke andet
          explicit er anført. 
           
           
           
           
           
           
           
           
           
           
           
           
          Tabel 3.1 
           \f

                   Alle testprogrammer vil i tilfælde af fejl angive fejlårsagen ud-
          trykt ved en fejlkode lagret i celle 8003 (og angivet på tekni-
          kerpanelets display), og skrive fejlkoden ud på skærmen. Dernæst
          vil programmerne gå i en >halt,jmp-1>sekvens placeret i fælles-
          delen (lokaliseret omkring 70). En liste over fejlkoder er an-
          bragt i appendix B. De simple lager testprogrammer adskiller sig
          på enkelte punkter fra ovenstående som beskrevet i kapitel 4.  
           
          Udover fejlkoden vil skærmen vise indholdet af de enkelte regi-
          stre samt stak-toppen, som specificeret i figur 3.2. De enkelte
          testprogrammer udnytter mere eller mindre visse lagerområder som
          temporære arbejdsområder. Der henvises til appendix B. I appendix
          C er angivet visse fælles hovedtræk for de enkelte programmer
          samt en beskrivelse af et generelt programforløb. 
           
           
           
           
                              Display-indhold ved fejl 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
          Figur 3.2 
                                   \f

          På grund af lagerpladsproblemer er ikke alle nævnte testprogram-
          mer implementeret i denne udgave af test-systemet som anført
          foran i fig. 3. De nævnte testprogrammer udføres derfor via en
          almindelig COMAL-system-autoload med dels en efterfølgende ud-
          skrift af en kildetekst eller afvikling af et print-program for
          printertestens vedkommende; dels et efterfølgende kald af >TERM>-
          programmet med indtastning via keyboard for terminal-testens
          vedkommende. Hermed fås samtidig en system slut-test. De nødven-
          dige udskiftninger af prom-kredse er beskrevet i afsnit 2.4. 
           
          Det bemærkes, at denne procedure ikke tester input delen af
          printer-tilslutningen, hvilket kan være aktuelt ved visse line-
          selector opkoblinger. Det hertil knyttede problem er omtalt i
          appendix F. 
           
               \f

         4_._ _ _ _ _ _ _ _ _I_M_P_L_E_M_E_N_T_E_R_E_D_E_ _T_E_S_T_P_R_O_G_R_A_M_M_E_R_ 4.
           
          I det følgende er de enkelte testprogrammer behandlet dels på be-
          skrivende form på tabel form med angivelse af de vigtigste data
          for den enkelte test. Det bemærkes, at med undtagelse af den sim-
          ple lager test, vil alle testprogrammer enable interrupt systemet
          (mode 2) og behandle uvedkommende interrupts på linje med forven-
          tede interrupts. Da testprogrammerne er sådan udformet, at inter-
          rupt afventes via et interrupt flag i hovedrutinen, vil uvedkom-
          mende interrupts ikke forstyrre det kørende testprogram, blot
          sætte et flag, som der ikke testes på i det kørende testprogram. 
           
          Falske interrupts vil resultere i en system fejl med fejlindika-
          tion, ligesom vedvarende interrupts jo klart >lægger> programmet
          ned (skærmen >dør>, programafvikling standser). 
           
          En normal testprogram afvikling starter via PROM nr. 1, celle 0 i
          disabled mode med kald af initialiserings rutiner for de enkelte
          kredse (DMA, CRT, SIO, FL, CTC) samt interrupttabel og stak-ini-
          tialisering. Disse rutiner udgør sammen med CRT dvs. skærm-ud-
          skriftsrutinen indholdet af PROM nr. 2. Dernæst sker der udhop
          til PROM nr. 1 igen og SW 1 testes. Herefter udvælges det enkelte
          testprogram. I appendix C er de fælles rutiner beskrevet nærmere.
           
          Som tidligere omtalt udfører de simple lager testprogrammer ikke
          initialisering, og de afvikles i DI-mode. Ydermere initialiseres
          FL-controlleren alene i forbindelse med afvikling af FL-testen. 
           
          Generelt gælder det, at anvendelse af teknikerpanelet forudsætter
          en korrekt DMA funktion, idet DMA kanal 0 benyttes til RC702
          lagertilgang. Dette problem kan dog afhjælpes gennem special op-
          kobling uden DMA-kreds som omtalt i appendix H, hvorfor overvåg-
          ning via teknikerpanel er mulig i forbindelse med afvikling af
          den simple lager test, hvor DMA-kredsen ikke initialiseres. Tek-
          nikerpanelet vil da ikke have indflydelse på testens afvikling.
          Generelt ang. TCP702 skal blot nævnes, at error cellen 8003 er
          fastlagt i mikroprogrammet. Enhver >HALT>-instruktion afvikling i
          RC702 forårsager et interrupt (restart 7) til 8080-kredsen på\f

                   TCP702, hvorefter denne automatisk viser indholdet af celle 8003,
          der nulstilles af alle testprogrammer ved opstart. 
           
          Endelig skal man ved anvendelse af de forskellige testprocedurer
          vurdere, hvorvidt en gentaget test er nødvendig og i så fald,
          hvor mange test-gennemløb (passes), der skal køres. 
           
          Til fejlfinding af statiske fejl er t gennemløb tilstrækkeligt.
          Fejlfinding af dynamiske fejl kræver normalt flere gennemløb,
          hvilket anbefales ved lagertest og diskette test. 
           
          De enkelte testprogrammer anvender fælles procedurer og vil der-
          for benyttes fælles dataareal til f.eks. udskrivning af test-id,
          testpass (aktuel gennemløb), fejlinformation, interruptgenken-
          delse osv. som beskrevet i tabel 4 nedenfor. 
           
          Såfremt der til det enkelte testprogram er knyttet nogle bruger-
          parametre, kan disse ikke defineres før start af testprogrammet,
          da brugerdata vil blive overskrevet af default-værdien, se de
          respektive testprogrammer. 
           
          I stedet venter man, indtil teksten >Test : test-id> vises på
          skærmen, hvorefter programmet udfører >dummy> instruktioner i ca
          5 sek., før teksten >pass> vises. I denne periode kan man standse
          programafviklingen via TCP702 og herfra genskrive det ønskede
          lagercelle-indhold. 
           
          Når et testgennemløb er fuldført og næste gennemløb afvikles,
          ændres disse parametre ikke. 
           \f

                     
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           Adresse           Init. værdi    Fælles dataarealer, beskrivelse
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
            
           66                Halt,retn      System nonmaskable interrupt 
                                            adresse. System error A samt
                                            (HALT, RETN). 
            
           2000-20           Def.           Vektor interrupt tabel. 
            
           7800-7FFF         Alle blanke    Display buffer for CRT-control-
                                            ler samt styreparametre hertil.
                                             
            
           BFFF <-           Udef.          Stakpointer, vokser baglæns. 
            
           8040-48           0,..,0         Interrupt flag område 
            
                                            + 0:   reserveret 
                                            + 1:   flexible diskette 
                                            + 2:   Keyboard 
                                            + 3:   Parallel output 
                                            + 4:   SIO-interrupt 
                                            + 5-8: Ubenyttet. 
            
           8003, 8024:       0,0            Fejlkode. 
            
           8025-2C:          Def.           Register-save: 
                                            H, L, D, E, B, C, SP(H), SP(L).
            
           8020,8021:        0,3            Aktuel hhv. første ikke benyt-
                                            tede testprogram nr. i
                                            >All-test>. 
            
            
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
            
           Tabel 4 \f

         4_._1_ _ _ _ _ _ _ _L_a_g_e_r_t_e_s_t_ 4.1
           
          Lagertest proceduren adskiller sig markant fra de øvrige test-
          programmer ved at udføre test af det lagerområde, som hele test-
          programmet skal benytte. Lagertest proceduren bør derfor altid
          startes som det første pkt. i en samlet testprocedure. 
           
          Når lagertest programmet startes, vil en systemfejl ikke nødven-
          digvis sætte programmet i en korrekt fejlsitiation, såfremt
          fejlen forhindrer normal ordre udførelse i test-prom delen, dvs.
          i programmet selv. Dette fænomen vil naturligvis optræde i for-
          bindelse med fejlagtig CPU-funktion, fejl i ordre - fetch -
          cycle, forkert lager-timing o.l., hvorimod programmet er sikret
          mod fejl grundet manglende refresh, overskrivning via fejlagtig
          adressering af dataområde o.l. 
           
          Yderligere kan programmet køre i >disable mode> uden anvendelse
          af perifere kredse som DMA- og CRT-controller, ligesom stak-meka-
          nismen lades ubenyttet (her bør det tilkoblede teknikerpanel
          ligeledes benyttes i mon-DMA mode, se appendix G). Denne funktion
          benævnes i det følgende som modif 1, og testen omtales som en
          simpel lagertest. 
           
          Den simple lagertest vil give normal fejlmeddelelse ved fejl og
          således udføre en halt-instruktion. 
           
          Til brug ved fejlfinding af mere mystiske eller >hårde> fejl kan
          man benytte en modifikation, der enten genstarter testprogrammet
          ved fejlfinding eller konstant udfører test af den lagercelle,
          hvor fejlen opstod. De mulige funktioner er resumeret nedenfor i
          tabel 4.1. 
           \f

        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                                LAGER TEST 
        _ _ _S_W_1_ _m_o_d_i_f_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          .xxxx  x   LAGER TEST (Modif 0) 
           
          .xxxx .x   SIMPEL LAGER TEST (Modif 1): 
           
          .xxxx. x   SIMPEL LAGER TEST (Modif 2): (Modif 1 med fejl genstart)
           
          .xxxx..x   SIMPEL MEMORY TEST (Modif 3): (Modif 1 med fejl-celle-løkke)
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
           
                   Tabel 4.1 
                    
           
           
           
           
          Lager testprogrammets funktion er ens for de nævnte modificerende
          test-programmer som anført nedenfor: 
           
          1)  Lageret skrives igennem med datamønsteret: 
              lowaddress XOR highaddress XOR datamod og testes dernæst. 
              Init. værdi af datamod = 0. 
           
          2)  Testen gentages for alle værdier af datamodifikator mellem 0
              og 255. 
           
           
4_._1_._1_ _ _ _ _ _L_a_g_e_r_t_e_s_t_,_ _m_o_d_i_f_ _0_ 4.1.1
           
          Den normale lagertest har til formål primært at teste det an-
          vendte RAM-lager. Det aktuelle lager segments indhold vises på
          skærmen, hvorfor dennes funktioner samt DMA-kredsen samtidig
          afprøves med samt interrupt systemet. 
           \f

          Testen er derfor egnet til et go/non-go testforsøg på et netop
          samlet system. Går denne test glat igennem, kan det centrale
          system siges at være uden graverende fejl. 
           
          Fejler denne test >normalt>, dvs. testen stoppes med angivelse af
          en fejlkode, aflæses fejladresse samt bitmønstre som beskrevet
          nedenfor, og fejlen søges rettet, hvorefter testen gentages. 
           
          Såfremt testen forløber unormalt (sort skærm, ugyldig fejlkode
          fremkommer som følge af et ukontrollabelt spring rundt i lage-
          ret), må den simple lager test anvendes. Hvilken modifikation,
          man her vil benytte, må afhænge af tilkoblet fejlsøgningsudstyr
          og fejlens art, se nærmere under de følgende afsnit. Her skal kun
          nævnes, at modifikation 1 indledningsvis bør benyttes. Viser den-
          ne et fejlfrit testforløb, skal fejlen findes i forbindelse med
          interruptsystemet, DMA-kredsløbet eller skærm-kontrolleren. 
                    
           \f

                    
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Intel      AM        Z80 
          8275  CRT  9517 DMA  CTC                               TEST NR. 0
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                     Specifikationer for LAGER TEST (modif 0): 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Formål:                 Lageraftestning, loc. 4000-77FF + 8000
                                  -FFFF. 
           
          Forudsætninger:         CPU, DMA, CTR samt Int. system fungerer, 
                                  herunder testes skærmbuffer Loc.
                                  7800-7FFF. 
           
          Testtid:                ca 2+4 min. med automatisk genstart. 
                   
          Externe tilslutninger:  TCP702 + skærmenhed, alle øvrige
                                  forbindelser bør være afbrudte (mindsker
                                  sandsynligheden for interrupt fejl). 
                   
          Specielle bemærkninger: Anvendes som go/non-go test i 1. forsøg,
                                  flere pass anbefales. 
                   
          Testresultat:           Hvis fejlfri, da lagerkontrol + CPU + DMA
                                  + CRT - funktion aftestet. Legitimerer
                                  brug af teknikerpanel som hjælpeværktøj
                                  (denne benytter DMA ch0, se dog 4.1.2) 
                                   
          Testdata:               8003: mulig fejlkode = 1 
                                  8000-1: tilhørende adresse 
                                  8002: forventet testmønster 
                                  8004: aflæst testmønster 
                                   
          Fejlstop:               (Halt,jump-1)-løkke i IE-mode 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                                   
                                   
          Tabel 4.1.1 \f

         4_._1_._2_ _ _ _ _ _S_i_m_p_e_l_ _l_a_g_e_r_t_e_s_t_,_ _m_o_d_i_f_ _1_,_2_,_3_ 4.1.2
           
          Som tidligere beskrevet forudsætter denne test alene en korrekt
          ordreafvikling af programmet, dvs. korrekt CPU-funktion. Testen
          kan overvåges fra TCP702 på normal vis (forudsætter dermed kor-
          rekt DMA ch0 funktion), eller denne kan sættes i mon-memory mode
          som beskrevet i appendix G (man kan da udføre korrekt >single-
          step>- programafvikling). 
           
          Testen afsluttes med automatisk genstart i tilfælde af fejlfrit
          gennemløb. Ved fejlafvikling udføres forskellige aktioner som
          beskrevet nedenfor på tabelform. Testen har til formål at afprøve
          system-kernen, dvs. CPU-kreds med tilhørende logik, samt at
          afteste det anvendte RAM-lager. 
           
               \f

                    
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Z80  Z80 
          CPU  CTC                                               TEST NR. 0
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                  Specifikationer for SIMPEL LAGER TEST (modif 1,2,3): 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Formål:                 CPU-funktions afprøvning, lagertest af
                                  lagerområde loc 4000 - 77FF + 8000 -
                                  FFFF. 
           
          Forudsætninger:         CPU-funktion OK, ellers udefineret
                                  fejlmønster. 
           
          Externe tilslutninger:  Ingen udover TCP702. 
           
          Specielle bemærkninger: Udføres disabled, udnytter ikke stak-fa-
                                  ciliteten. Mest primitive testprogram.
                                  Skal efterfølges af memory test, modif 0.
                                   
          Testresultat:           Hvis fejlfrit gennemløb, da vides den
                                  basale CPU-funktion at være i orden.
                                  Første check af RAM-lager udføres.
                                  Legitimerer sand programafvikling for
                                  lagertest, modif 0. 
                                   
          Testdata:               8003:   mulig fejlkode = 1. 
                                  8000-1: tilhørende adresse 
                                  8002:   forventet testmønster 
                                  8004:   aflæst testmønster 
                                   
          Fejlstop:               modif 1, (Halt,jump-1)- løkke i DI-mode 
                                  modif 2, Fejl-genstart i DI-mode 
                                  modif 3, Fejl-celle-løkke i DI-mode 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                                   
                                   
                                   
          Tabel 4.1.2 
                                   \f

         4_._2_ _ _ _ _ _ _ _P_a_r_a_l_l_e_l_ _o_u_t_/_k_e_y_b_o_a_r_d_ _i_n_ _t_e_s_t_ 4.2
           
          Dette testprogram udføres normalt som første testprogram efter et
          fejlfrit lager-test gennemløb. Det primære formål med programmet
          er at afteste parallel out porten. Dette udføres ved i testpro-
          grammet at generere en række karakter-værdier og sende disse en
          efter en ud på porten. Keyboard indgangen testes dernæst for
          samme tegnværdi, når interrupt fås herfra. Alle karakter-værdier
          mellem 0 og 255 afprøves. 
           
          Ved afprøvningen skal >parallel out> samt >keyboard in> sammen-
          kobles med et speicalkabel som nævnt i kapitel 2. Afprøvning af
          keyboardkabel + keyboard sker i test no. 4, keyboard in/display
          out testen. 
               
           \f

                 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Z80 
        _ _ _P_I_O_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _T_E_S_T_ _N_R_._ _1_ _ _ _
               Specification for PARALLEL OUT/KEYBOARD IN TEST 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Formål:                 Parallel out/keyboard in - afprøvning. 
           
          Forudsætning:           TEST 0 udført tilfredsstillende. 
           
          Externe tilslutninger:  TCP 702, Display, kabel mellem J1004
                                  (Keyboard) og J1003 (Parallel out) 
                                   
          Specielle bemærkninger: Ingen (normalt ingen fejl) 
                                   
          Testresultat:           Afprøvning af Z80-PIO. Bemærk, at J1003
                                  ikke anvendes med input. Imidlertid
                                  testes Z80-PIO input mæssigt via keyboard
                                  in-porten. 
                                   
          Testdata:               8003: mulig fejlkode = 2. 
                                  8000: tegn testet fra keyboard in 
                                  8002: tegn genereret på parallel out 
           
          Fejlstop:               (Halt,jump-1)-løkke i EI-mode. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Tabel 4.2 
           
           
4_._3_ _ _ _ _ _ _ _F_l_e_x_i_b_l_e_ _D_i_s_k_ _t_e_s_t_ 4.3
           
          Med dette testprogram, som findes i flere varianter som beskrevet
          i fig 4.3, aftestes enhver flexible disk konfiguration. De mulige
          opstillinger og opkoblinger er omtalt i kapitel 2. 
           
          Generelt vil SW1(7) afgøre, hvorvidt en mini- eller maxi-diskette
          er under test, idet denne switch hardwaremæssigt skelner mellem
          et system af mini-drives (SW1(7):= 1) eller et system af maxi-
          drives (SW1(7):= 0). Et maxi-drive tilkoblet med SW1(7)= 1 vil
          derfor resultere i en fejlmelding, hvis testen startes. 
               \f

                   Såfremt blandede systemer anvendes, vil testprogrammet automatisk
          selektere det korrekt tilkoblede drive, idet testen indlednings-
          vis søger alle 4 units igennem, og tester status online samt WP
          (writeprotected). I et dual-drive system vil man kunne få testet
          drive 1, såfremt drive 0 sættes offline (ikke muligt med mini-
          drives) eller der lægges en WP-diskette i diskettestationen
          (mini/maxi). 
           
          De anvendte diskette typer er angivet i tabel 4.3. Bemærk, at
          WP-proceduren for mini-disketter er modsat den på maxi-diskette
          anvendte: 
           
                    MINI:  WP =  hul tildækket. 
                    MAXI:  WP =  hul frit. 
           
          Som antydet eksisterer der flere modifikationer af fl-test
          programmet, se tabel 4.3 
           
           
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          SW1-modif           Flexible Disk Test 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          0    .xx .          MAXI, formattering af en diskette 
          1    .xx            MAXI, sekventiel write/read af en sector 
          2    .xx.           MAXI, random write/read en sector ad gangen 
          3    .xx..          MAXI, random read af de resterende sectorer 
                                    på cylinderen. 
           
          0    .xx ..         MINI, formattering af en diskette 
          1    .xx  .         MINI, sekventiel write/read en sector ad gangen
          2    .xx. .         MINI, random write/read en sector ad gangen 
          3    .xx...         MINI, random read af de resterende sectorer
                                    på cylinderen. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                               
                               
          Tabel 4.3 
                               \f

4_._3_._1_ _ _ _ _ _D_i_s_k_e_t_t_e_ _f_o_r_m_a_t_t_e_r_i_n_g_ 4.3.1
           
          Formatterings-delen benytter lagercelle 800F til fastlæggelse af
          det ønskede format. Såfremt denne indeholder værdien nul, anven-
          des standart formatet som angivet således: 
                    
                    Maxi-diskette: Single density, single sided, 26
                                   sector/track diskette med sectorlængde =
                                   128. 
                                   (ækvivalent: 3M 740-0) 
                                    
                    Mini-diskette: Single density, dual sided, 16
                                   sector/track diskette med sectorlængde =
                                   128. 
                                   (medium: MD 550-01). 
           
          Ønskes et andet format benyttet, skal følgende beskrivelse over-
          holdes ved redefinition af celle 800F: 
           
           
           
          800F, brugerdiskette oplysninger: 
           
                          _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
                          _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
                         MSB             LSB 
                                           _ _ _  Single/dual density (1:= dual)
                                        _ _ _ _ _ _  Single/dual sided (1:= dual)
                                   _ _ _ _ _ _ _ _ _ _ _  Sectorlength = 2UUnDD* 128,
                                 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  MINI/MAXI-Select (1:= MINI) 
           
           
          Figur 4.3.1 
           
           
           
          Hvor s = antal sectorer pr. spor defineres ud fra de givne
          variable som beskrevet i tabel 4.3.4. 
           \f

        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          n       Single/dual density        S            Sectorlength 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _(_F_M_,_ _M_F_M_)_ _ _ _ _ _ _ _ _ _ _ _M_A_X_I_ _ _ _M_I_N_I_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          0              0               26     16             128 
                         1               52     ./.
          1              0               15      9             256 
                         1               26     16 
          2              0                8      5             512 
                         1               15      9 
          3              0                4      2            1024 
                         1                8      5 
          4              0                   ./.               ./. 
                         1 
          5              0                   ./.               ./. 
                         1 
          6              0                   ./.               ./. 
                         1 
          7              0                   ./.               ./. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _1_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                    
           
          Tabel 4.3.1 
           
           
4_._3_._2_ _ _ _ _ _D_i_s_k_e_t_t_e_ _W_r_i_t_e_/_R_e_a_d_ 4.3.2
           
          De enkelte testprocedurer udfører en skrivning af et testdata-
          mønster ind på en sector med efterfølgende læsning af samme
          sector for kontrol af data samt CRC. Disse rutiner forudsætter
          brug af en preformatteret diskette, f.eks. direkte 3M 740-0 eller
          lign. Mini-disketter leveres ikke preformatterede, hvorfor disse
          må formatteres af testprogrammet. 
           
          Datamønstret, der skrives på en sector, beregnes således: 
           
               databyte:= (sector no.) XOR(spor no.)XOR(byteposition). 
           \f

          Procedurerne forudsætter således, at enhver sector indeholder
          noget fornuftigt under læsningen, hvorfor en skrivning må have
          fundet sted. Dette sker automatisk ved kørsel af modif 1 og 2
          testen, hvorimod modif 3 alene må anvendes på et allerede testet
          system med en modif 1/2 - diskette monteret. Modif 3 anvendes
          alene som et check på, om de givne data er holdbare over en læn-
          gere periode, dvs. en tilstrækkelig effektiv skrivning har fundet
          sted. Yderligere testes multisector/multitrack-faciliteten,
          hvilket benyttes under system-autoload. 
           
           
4_._3_._3_ _ _ _ _ _D_i_s_k_e_t_t_e_ _t_e_s_t_ _s_p_e_c_i_f_i_k_a_t_i_o_n_e_r_ 4.3.3
           
          For at lette aftestning af den omfattende og komplekse diskette-
          funktion, er programmet udstyret med en række forskellige fejl-
          meldinger forsynet med hver sin fejlkode. Endvidere findes en
          række statusinformationer gemt i lageret. Specifikationstabellen
          er derfor omfattende og findes alene i en fælles udgave for
          samtlige modificerede testprogrammer. 
                    
           \f

                    
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          NEC 
        _ _ _u_P_D_7_6_5_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _T_E_S_T_ _N_R_._ _2_ _ _ _ _ _ _
           
        _ _ _ _ _ _ _ _ _ _ _S_p_e_c_i_f_i_k_a_t_i_o_n_e_r_ _f_o_r_ _F_L_E_X_I_B_L_E_ _D_I_S_K_E_T_T_E_ _T_E_S_T_ _ _(_m_o_d_i_f_ _0_,_1_)_ _ _ _ _ _
           
          Format:                 Test af mini og maxi diskette system. 
           
          Forudsætning:           TEST 0 udført tilfredsstillende. 
           
          Externe tilslutninger:  TCP 702, Display, Diskette-drive
                                  tilsluttet som angivet i kapitel 2. 
           
          Specielle bemærkninger: Bør altid udføres med omhu. Bør testes
                                  for dynamiske og temporære fejl. De be-
                                  nyttede mini-drives vil altid returnere
                                  status online uafhængigt af aktuel til-
                                  stand, hvorfor testprogrammet ikke rea-
                                  gerer på diskette skift. Controlleren
                                  afventer ny diskette isat. 
                                  N_B_: Slå netspændingen til før mini-dis-
                                  ketten lægges i, således at disketten
                                  ikke ødelægges. 
                                  Modif 2,3 er ikke implementeret 
           
          Testresultat:           Fuldstændig afprøvning af flexible
                                  disk controller-kreds. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
           
          Tabel 4.3.3 (fortsættes) 
           \f

           
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Testdata:               8003:    mulig fejlkode (se fejl liste
                                           appendix A) 
                                  8002:    main status reg fra controller
                                           ved fejl under >command/status>
                                           overførelse. 
                                  800B:    FF hvis >command> under
                                           udførelse, 7 hvis >get status>
                                           under udførelse. 
                                  800F:    Brugerdiskette variabel 
                                  8010-17: Controller-status ved afslutning
                                           af >command>. 
                                  801C-D:  >delay-counters> for hver
                                           opstart og >get status>. 
                                  8030-:   >Command-layout>. 
                                  803A-:   Aktuel diskette def. blok 
                                  9000:    Buffer for datalæsning fra FL. 
                                  A000:    Buffer for dataskrivning til FL.
           
          Fejlstop:  (Halt,jump-1)løkke i EI-mode. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
           
          Tabel 4.3.3 
           \f

         4_._4_ _ _ _ _ _ _ _P_r_i_n_t_e_r_ _t_e_s_t_ 4.4
           
          Testprocedurerne er ikke implementeret, hvorfor alene en kort
          beskrivelse gives af det anvendte V-24-hardware. 
           
          V24-kommunikation varetages af en 2-kanals SIO-kreds, kaldet
          Z80-SIO, version 2. Kanal A anvendes til asynchron terminal kom-
          munikation i >full duplex mode>, junction J1001 mærket terminal,
          medens kanal B anvendes til asynchron printer kommunikation i
          >full duplex mode>, junction J1002 mærket printer. Den gældende
          bandrate er default 1200, og der anvendes 7 bits databytes med
          lige paritet samt 2 stopbits. 
           
          Testen udføres som beskrevet i kapitel 3 under et COMAL-system. 
           
           
4_._5_ _ _ _ _ _ _ _K_e_y_b_o_a_r_d_ _i_n_/_d_i_s_p_l_a_y_ _o_u_t_ _t_e_s_t_ 4.5
           
          Dette testprogram viser på skærmen de karakterer, der indtastes
          på keyboard. Idet ROM. nr 2 indeholder et komplet skærmdriver-
          program, kan også specialkarakterer indtastes, se i øvrigt tabel
          herfor i appendix C. 
           
          De såkaldte funktions-taster vil af testprogrammet blivet opfat-
          tet som normalkarakter-taster med en fuld 8 bits kode. 
           
          Test af >semi-grafik> udføres ved indtastning af >semi-grafik>-
          starttegnet efterfulgt af et normalt tegn, der herefter vises som
          et semigrafisk-tegn. I øvrigt findes implementeret under
          COMAL-systemet en række COMAL-programmer til aftestning af
          semi-grafik. 
           
          Test-programmet har ikke tilkyttet nogen fejlkode, idet der ikke
          fortages data-check. Hvis et keyboard-interrupt ikke fanges, vil
          programmet blot vente på næste karakter. Keyboard-funktionstesten
          vil derfor bestå i en visuel inspektion af skærmmønsteret. 
           \f

                    
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Z80-      Keyboard        Karakter - 
        _ _ _P_1_0_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _r_o_m_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _T_E_S_T_ _N_R_._ _4_ _ _ _
           
        _ _ _ _ _ _ _ _ _S_p_e_c_i_f_i_k_a_t_i_o_n_e_r_ _f_o_r_ _K_E_Y_B_O_A_R_D_ _I_N_/_D_I_S_P_L_A_Y_ _O_U_T_ _T_E_S_T_._ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Formål:                  Test af Keyboard samt karakter rom. 
           
          Forudsætning:            TEST 0 og TEST 1 udført tilfredsstil-
                                   lende. 
           
          Externe tilslutninger:   TCP702, Display, Keyboard. 
           
          Specielle bemærkninger:  Kontrol-karakterer displayes ikke. Inten-
                                   sitetsproblemer i inverteret mode. Cur-
                                   sor rykkes op i >bunden> af tekstlinjen
                                   i grafik mode. 
                                    
          Testresultat:            Fuldstændig afprøvning af keyboard
                                   funktioner. Kørsel af demo-program
                                   anbefales, se appendix F. 
           
          Testdata:                8003:  mulig fejlkode udefineret. 
           
        _ _ _F_e_j_l_s_t_o_p_:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _I_k_k_e_ _d_e_f_i_n_e_r_e_t_._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
           
          Tabel 4.5 
 
 
4_._6_ _ _ _ _ _ _ _T_e_r_m_i_n_a_l_ _O_u_t_/_t_e_r_m_i_n_a_l_ _i_n_ _t_e_s_t_ 4.6
           
          Testproceduren er ikke implementeret, og der henvises til afsnit
          4.4 (printer-test). 
 
           \f

F_       5_._ _ _ _ _ _ _ _ _E_N_ _F_U_L_D_S_T_Æ_N_D_I_G_ _S_Y_S_T_E_M_T_E_S_T_ 5.
           
          Som allerede antydet inkluderer en fuldstændig systemtest
          anvendelse såvel af testprogrammel som af systemprogrammel
          (COMAL-system). Som beskrevet i kapitel 2 medfører dette bl.a.
          udskiftning af test-promkredse med autoload-prom. 
           
          I det følgende listes på tabelform et skelet, der kan benyttes
          til fastlæggelse af en testfremgangsmåde for udførelse af en
          fuldstændig systemtest. Tabellen skal betragtes som vejledende,
          og de angivne tider (antal gennemløb pr. test) skal tages med al-
          le mulige forbehold. 
           
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
          Test nr.       Fuldstændig systemtest 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             0           a) Memory test udføres, 2+4 min pr. pass 
          (6 min * 2)    b) Hvis fejl da simpel memory test, 2+4 min. pr.
                            pass og herefter gentages a. 
                            Hvis OK i mindst 2 gennemløb udføres test 1. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             1              Parallel out/keyboard in test udføres, under 1
                            sek. pr. pass. 
          (ca. 0 min) 
                            Ved fejl gentages 1, ellers udføres test 2
                            efter mindst 2 gennemløb. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             2              Flexible disk test udføres med afprøvning af
                            såvel mini- som maxikonfigurationer, ca. 5-10
                            min. pr. pass. 
          (ca. 30 min) 
                            Ved fejl gentages 2 evt. 0, ellers udføres test 3
                            efter mindst 2 gennemløb. 
                             
                            Det anbefales at teste samtlige mulige konfigu-
                            rationer som nævnt i kapitel 2. 
        _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          Tabel 5 (fortsættes) 
           \f

                    
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                            Ønskes testtiden nedbragt kan den enkelte test
                            afbrydes undervejs, såfremt blot 1 mini- samt 1
                            maxitest fuldføres. 
                             
                            Estimeret tidsforbrug: Fuld test = 2 timer 
                                                   Reduceret test = 1/2
                                                   time. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             3              Printer test udføres efter system autoload 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             4              Keyboard in/display out test, ca. 5 min pr.
                            pass. 
          (ca. 5 min) 
                            Hvis fejl gentages 4, i modsat fald udføres
                            test 5 efter et gennemløb. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
             5              Terminal out/terminal in test udføres efter
                            system autoload. 
                             
            X1              De ikke implementerede testprogrammer erstattes
                            af systemprint henholdvis terminal-kommunika-
                            tions programmerne på COMAL-systemdisketten, se
                            appendix F. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
            X2              Der findes endnu ikke udarbejdet retningslinier
                            for line-selector testen, der imidlertid vurde-
                            res at kunne foretages isoleret, uafhængigt af
                            systemtesten iøvrigt. 
                             
                            X1 testen forudsættes udført. 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
                             
                             
                             
          Tabel 5 
           
           \f

         6_._ _ _ _ _ _ _ _ _K_O_N_K_L_U_S_I_O_N_ 6.
           
          De beskrevne testprogrammer danner et totalt testsystem. På trods
          af de mangler og uhensigtsmæssigheder, som måtte være indbygget,
          vil et testet produkt erfaringsmæssigt sjældent være fejlbehæf-
          tet. De kendte rapporterede fejl på allerede producerede syste-
          mer, har alle kunnet karakteriseres som >ældningsfejl>. 
           
          Derimod synes testsystemet ikke at være det rigtige til hurtig
          fejlfinding. Alle statiske fejl konstateres hurtigt, men der er
          ikke tilstrækkelige oplysninger ang. hvor, hvad og hvordan.
          Hertil må benyttes et mere hardwareorinteret testsystem, som i
          øjeblikket overvejes indført i produktionen (lokalisering af
          overskårne printbane, kortsluttede baner, kolde lodninger m.m).
          Endvidere vil en funktionstest være værdifuld. 
           
          Indføres disse testforanstaltninger, vil de her beskrevne test-
          programmer på glimrende vis kunne benyttes til sluttest. Udvik-
          ling af fælles testprogrammer til RC700 samt RC850 må derfor an-
          befales på det niveau, som er angivet her, herunder specielt ud-
          vikling af et fælles rammesystem for operatørprocedurer og tek-
          niker-panel. 
           
               \f

         A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_R_ A.
           
          1  RC701/751 Microdatamat System, Brugsanvisning. 
           
          2  RCSL No 42-i 1339: RC700 COMAL, Brugermanual. 
           
          3  Som 1, blot ang. RC702. 
           
          4  Programlistninger. 
           
          5  UDV-ADM.SM.228, Test på kort sigt, mødereferat. 
           
          6  LIS701, V24 line selector 
           
          7  TCP702, Programmer>s Reference Manual. 
           
          8  Hardw. portnumre, RC701/RC702. 
           
           
           
           
           
           
           
           
           
          1 + 2 fås hos NIA, Bal. 
          3 endnu ikke officiel (NT, Bal.). 
          4 + 5 fås hos KDH, Bal. 
          6 fås hos PKA, Bal. 
          7 fås hos MVP, Bal. 
          8 fås hos KDH, Bal. 
           
                    \f

         B_._ _ _ _ _ _ _ _ _F_E_J_L_K_O_D_E_T_A_B_E_L_ _O_G_ _F_Æ_L_L_E_S_ _A_R_B_E_J_D_S_O_M_R_Å_D_E_ B.
           \f

F_C_._ _ _ _ _ _ _ _ _O_V_E_R_O_R_D_N_E_T_ _S_T_R_U_K_T_U_R_ _O_G_ _F_Æ_L_L_E_S_ _R_U_T_I_N_E_R_ C.
           
          Testprogramsystemet er groft skitseret inddelt i 3 uafhængige
          dele bestående af: 
           
               1)  Initialiseringsdel for de enkelte >controller>-kredse. 
                    
               2)  Display-rutine (for rulleskærm) 
                    
               3)  Testprogrammer. 
                    
          Som tidligere nævnt indeholder PROM1 testprogrammer, medens PROM2
          indeholder initialisering og display-rutine. Der findes ud over
          udskriftsrutiner til brug under >start testprogram>, >repetr
          testprogram> og >udskriv fejlinformation> ingen operatør-kommuni-
          kations-rutiner. På den baggrund synes display-rutinen at være
          delvis overdimensioneret. Imidlertid benyttes det fulde display-
          program under udførelsen af >Keyboard in/display out testen>. 
           
          De implementerede testprogrammer har herudover fælles interrupt-
          system (interrupt erkendes ved brug af interrupt-flag) via en
          interrupt-vektor-tabel anbragt i initialiseringsdelen. Interrupt-
          service udføres altid i DI-mode og afsluttet med sekvensen >EI,
          RETI>. 
           
          Display-rutinen kaldes via en >CALL CDISP> - instruktion med den
                   aktuelle karakter i reg. A, medens udskriftrutinerne kaldes via
          en >CALL UPPA1> - instruktion med testprogram-nummer i reg. A i
          tilfældet >start program>, en >CALL UPPAS>- instruktion i til-
          fældet >afslut pass> (=>repetr testprogram>). 
           
               \f

F_       D_._ _ _ _ _ _ _ _ _R_C_7_0_1_ _S_Y_S_T_E_M_T_E_S_T_ D.
           
          De ændringer som testprogrammerne har undergået fra RC701-udgaven
          til RC702-udgaven er kort beskrevet her. Når undtages disse kon-
          krete forskelle, kan denne manual benyttes som brugervejledning
          for RC701-testsystemet. 
           
                    Testprom no. 1:    type I 2716, id  _ _R_O_A_3_7_6_ _ _ _ 
                    Testprom no. 2:    type I 2716, id  _ _R_O_A_3_7_7_ _ _ _ 
                    Systemprom no. 1:  type I 2716. id  _ _R_O_A_1_9_5_ _ _ _ 
           
          Indledningvis bemærkes, at den generelle struktur af testprogram-
          systemet er bibeholdt fra RC701-udgaven. Der er følgende afvigel-
          ser:  
           
          1)  SW0-switch til forudindstilling af SIO-A/B baudrate
              (transmissions hastighed) er ikke medtaget på RC702, hvorfor
              denne nu sættes fra testprogrammet til default 1200 bps. 
           
          2)  PÅ RC702 anvendes en bedre og højere neddelings >clock-fre-
              kvens> for generering af SIO-A/B transmissions-clock-signa-
              let, hvorfor initialiseringsdelen af >CTC> samt >SIO>-kred-
              sene er ændret. 
               
          3)  På RC702 er indført en betydning af SW1(1B7) som MINI/MAXI-
              drive indikator i testprogrammet for diskettesystemet, idet
              SW1(1B7) hardwaremæssigt direkte sætter diskette controlleren
              i MINI/MAXI-mode. 
               
          4)  SW1-switchen dekodes fra højre (mindst betydende bit) i  
              RC701. 
           
          5)  På RC702 er skærmcontroller-initialiseringen ændret grundet
              >semi-grafik>. 
               
          6)  De ændrede HW-portnumre, se ref. 8. 
               
           \f

F_       E_._ _ _ _ _ _ _ _ _L_I_N_E_S_E_L_E_C_T_O_R_ _T_E_S_T_ E.
           
          Ikke beskrevet, ikke implementeret. 
           
           \f

F_       F_._ _ _ _ _ _ _ _ _R_C_7_0_2_ _S_Y_S_T_E_M_D_I_S_K_E_T_T_E_ _T_E_S_T_ F.
           
          En RC702-systemdiskette indsættes i minidriveenheden, en auto-
          loadprom monteres og reset knappen aktiveres. Seneste revision af
          systemdisketten betegnes 1.12. Denne diskette indeholde følgende
          COMAL-programmer, der tænkes anvendt til printer, terminal og
          semi-grafik test: 
           
               GRAFIK    tillader korrekt semi-grafisk display af de
                         enkelte tegn. (cursor hævet) 
                                 
               SMDEMO3   benytter de grafiske tegn såvel som de indbyggede
                         CTR-funktioner dvs. blink, >reverse video>,
                         understregning osv. 
                                 
               TPRINT    tester printertilslutning. 
                                      
          De enkelte programmer indlæses til lager og kræver ikke operatør
          indgreb. 
           
          Terminaltilslutningen testes via kald af system-proceduren >TERM>
          (der tastes >BYE> til COMAL). Herunder indtastes fra keyboard
          tegn, som med special-afslutningen hængende på terminaludgangen,
          vil blive vist på skærmen. 
           
          Alternativt kan man tilslutte sig et modem og således under
          normale forhold afteste terminal-funktionen. 
           
          Autoload af et COMAL-system og anvendelse af de enkelte system-
          ordrer er beskrevet i ref. 1, der stadig er gyldig. Ref. 3 skal
          benyttes, såfremt detaljeret information ang. f.eks. Keyboard-
          funktionen er påkrævet. 
           
          COMAL-programmeringssproget er beskrevet i ref. 2. 
           
           \f

F_       G_._ _ _ _ _ _ _ _ _T_E_K_N_I_K_E_R_P_A_N_E_L_,_ _T_C_P_7_0_2_ G.
           
          Der henvises til ref. 7, hvorfra der kort resumeres nedenstående
          tilkoblings/initialiserings-procedure. Endvidere er der enkelte
          funktionstaster beskrevet. 
           
          Teknikerpanelet tilkobles via et printkort-stik som angivet i
          afsnit 2.4. Netspænding tilsluttes og >RESET>-tasten aktiveres.
          Herefter indsættes værdien 0 hhv. 1 i lagercelle 2009 svarende
          til ikke DMA/DMA lagertilgang på RC702, hvorefter TCP702-program-
          met startes op i celle 1000. Nu sendes et RC702-reset-signal, og
          der tastes C for continue. Proceduren er angivet i tabel G.1. 
           
           
           
           
                         FUNKTIONS-   DATA 
                         TASTER       TASTER 
                          
                         RESET 
                          
                         SUB (memory) 2009 
                         NEXT (data) 0/1 
                         EXEC 
                          
                         GO (udfør) 1000 
                         EXEC 
                          
                         9 (RC702 reset) 
                          
                         C (fortsæt) 
                          
                          
          Tabel G.1 
           \f

                   I tabel G.2 er angivet de vigtigste funktionstaster samt udførel-
          se af en lagercelle-inspektion/modifikation. 
           
           
           
                              data2 
               SUB data1 NEXT NEXT/NEXT ... EXEC: 
                
                   Opslag i den lager- 
                   celle, der addresseres 
                   via >data1>. 
                   Indlæsning af >data2> 
                   eller opslag i næste celle. 
                   Der fortsættes indtil 
                   ordren afsluttes med >EXEC>. 
                    
                    
               C/D: 
                    
                   Fortsæt eller afbryd kørsel, >D> bør 
                   altid aktiveres før en SUB... udføres. 
                   Bemærk: D-tasten stopper også RC702>s 
                   interrupt-system, hvorved RC702-skærm-
                   billedet forsvinder (>C> bringer det 
                   frem igen). 
                    
                    
               9: 
                   Reset-puls udsendes. Reset-tråd fra 
                   TCP702 skal være forbundet til RC702. 
                    
               F: 
                   >Single-step>, dvs. ordre-afviklingen 
                   følges trinvis med anslaget. 
                    
                    
          Tabel G.2 
                    \f

         H_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_-_L_I_S_T_N_I_N_G_ _I_ _U_D_D_R_A_G_ H.
           
          0:      DI, JMP MINIT 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
          GTEST:  DECODE SW1 AND JUMP TO TESTPROGRAM. 
           
           \f

                         WORD   1          2             3             4             5             6                 7-8 
          _T_E_X_T_ _ _ _ _ _ _ _ _ _t_y_p_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           
          s-data          1                                   message 1 
           
          w-data          2                                   message 1 
           
          signal        4/5 2   m.buf. addr.  m.buf. length m.priority    semaphor No   act.cor.No  3   hour 6 
           
          wait            8               wait _select         wait _time     -       -     -                 -     
           
          wait-exit   16/18 4   m.buf. addr.  m.buf. length c.priority    -       -     -                 -     
           
          cor _to _sem     64       corout.No     undefined     undefined     -       -     0                 - 
           
          activate      128       -             undefined     undefined     undefined     0                 - 
           
          user         1024 5   0             0             0             0             act.cor.No 3    - 
          _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           \f

                                                 i 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
          1.  INTRODUCTION ...........................................   1 
           
          2.  THE COROUTINE SYSTEM ...................................   2 
              2.1  The Central Logic Procedure Centralogic ...........   2 
              2.2  Standard Procedures ...............................   3 
              2.3  Standard Variables ................................   5 
              2.4  Procedures in ALGOL Library .......................   6 
           
          3.  DATA STRUCTURES ........................................   8 
              3.1  Semaphore Tables ..................................   8 
                   3.1.1  User Semaphores ............................   8 
                   3.1.2  Central Logic Semaphores ...................   9 
                   3.1.3  System Semaphores ..........................   9 
              3.2  Coroutine Description .............................   9 
              3.3  Message Buffers ...................................  10 
              3.4  Reference Variable ................................  10 
           
          4.  CENTRA LOGIC ...........................................  13 
              4.1  Processing of 8000-messages .......................  15 
              4.2  Conversion of 8000-answers into Messages ..........  15 
              4.3  Demand for Log Display ............................  17 
           
          5.  TEST FACILITIES IN THE COROUTINE SYSTEM ................  18 
           
          6.  PROCEDURE DESCRIPTION ..................................  19 
              6.1  User Procedures ...................................  19 
                   6.1.1  Allocate ...................................  19 
                   6.1.2  Coroutines .................................  20 
                   6.1.3  Initref ....................................  20 
                   6.1.4  Set Priority ...............................  21 
                   6.1.5  Signal .....................................  21 
                   6.1.6  Wait .......................................  23 
                   6.1.7  Wait _select ................................  24 
                   6.1.8  Wait _time ..................................  26 
              6.2  Test Procedures ...................................  27 
                   6.2.1  Prepare _test ...............................  27 
                   6.2.2  Select _test ................................  28 \f

                                                 ii 
           
          T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _(_c_o_n_t_i_n_u_e_d_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 
           
              6.3  Auxiliary Central Logic Procedures ................  28 
                   6.3.1  Co _8000 _event ..............................  29 
                   6.3.2  Co _own _base ................................  29 
                   6.3.3  Cor _to _sem .................................  29 
                   6.3.4  Co _time ....................................  30 
                   6.3.5  Co _time _base ...............................  30 
                   6.3.6  Schedule ...................................  30 
           
           
          A_P_P_E_N_D_I_C_E_S_: 
           
          A.  REFERENCES .............................................  33 
           
          B.  INTERNAL TABLES ........................................  34 
              B.1  The Own Core of the Coroutine System ..............  34 
              B.2  Chain Elements ....................................  35 
              B.3  Semaphore Table ...................................  35 
              B.4  The Coroutine Description Table ...................  36 
              B.5  Message Buffers ...................................  37 
              B.6  Procedures used to Display the Tables .............  37 
           
          C.  PROGRAM MODE ...........................................  41 
           
          D.  TEST RECORDS ...........................................  42 
           
          E.  ALARMS FROM THE COROUTINE SYSTEM .......................  45 
           
           \f

F_       1_._ _ _ _ _ _ _ _ _I_N_T_R_O_D_U_C_T_I_O_N_                                                        1.
           
          This manual describes a coroutine system available to ALGOL8 pro-
          grams. 
           
          The manual implies a knowledge of the activity concept of ALGOL8.
           
          Various concepts from the RC8000 monitor are used in the descrip-
          tion. To avoid confusion the prefix '8000' is used with these
          concepts. For a more detailed description, plese see ref. 1 and
          ref. 3. 
           
          Chapter 2 contains a brief description of the facilities made
          available by the system. 
           
          Chapter 3 describes a special set of data structures used in the
          system. 
           
          Chapter 4 describes a central logic procedure of the system. 
           
          Chapter 5 describes the test facilities of the system. 
           
          Chapter 6 describes the standard procedures and standard
          variables of the system. 
           
               \f

F_       2_._ _ _ _ _ _ _ _ _T_H_E_ _C_O_R_O_U_T_I_N_E_ _S_Y_S_T_E_M_                                                2.
           
          The system, which is based on message semaphores, is implemented
          as a set of external procedures with the following facilities: 
           
          1. Coroutines scheduled by priority. 
           
          2. Time out on wait operations. 
              
          3. Messages communicated in order of priority. 
              
          4. Messages picked out according to message lock/key. 
              
          5. Full index control of messages and semaphores. 
              
          6. Easy programming: 
             a. pre-compiled modules, no source code copying, 
             b. readymade central logic, scheduling coroutines, communica-
                ting messages, 
             c. separate compilation of coroutines. 
           
          7. Switch to dedicated central logic. 
              
          8. Creation of test records. 
              
              
2_._1_ _ _ _ _ _ _ _T_h_e_ _C_e_n_t_r_a_l_ _L_o_g_i_c_ _P_r_o_c_e_d_u_r_e_ _C_e_n_t_r_a_l_o_g_i_c_ 2.1
           
          The system has a standard procedure, centra _logic, which may be
          used as central logic for schedulation of coroutines and commu-
          nication of messages. 
           
          The procedure has the following facilities: 
           
          1. Start up of coroutines, queuing them up on proper start sema-
             phores. 
              
          2. Restart of the highest priority coroutine ready to be started 
              \f

                   3. Scheduling coroutines de-activated by implicit passivate or
             "stack busy" (virtual coroutines inhibited by a fellow corou-
             tine waiting for some i/o operations to complete). 
              
          4. Queuing up 8000-messages on central logic semaphores where it
             can be fetched by means of wait operations. 
              
          5. Queuing up messages on specified semaphores on the arrival of
             certain 8000-answers to the event queue. 
              
          6. Time out on wait operations without CPU load. 
              
          7. Display of logging records, showing the operation flow and
             time consumption. 
              
          8. Display of semaphore tables at termination. 
              
              
2_._2_ _ _ _ _ _ _ _S_t_a_n_d_a_r_d_ _P_r_o_c_e_d_u_r_e_s_ 2.2
           
          1_._ _P_r_o_c_e_d_u_r_e_s_ _f_o_r_ _S_y_s_t_e_m_ _I_n_i_t_i_a_l_i_z_a_t_i_o_n_ 
              
             Name:                      Task: 
              
             coroutines                 make stack reservations for the
                                        semaphore and coroutine description
                                        tables and initialize the tables. 
                                         
             allocate                   make stack reservation for a mes-
                                        sage buffer and initialize it. 
           
             initref                    initialize reference variables (see
                                        section 3.4). 
                                         
             set _priority               change the priority of calling
                                        coroutine. 
                                         \f

                   2_._ _C_o_m_m_u_n_i_c_a_t_i_o_n_ _P_r_o_c_e_d_u_r_e_s_ 
              
             Name:                      Task: 
              
             signal                     send a message (placed in a message
                                        buffer) to a semaphore queue. 
                                         
             wait                       wait for a message in/fetch a mes-
                                        sage from a semaphore queue. 
                                         
          3_._ _T_e_s_t_ _P_r_o_c_e_d_u_r_e_ 
              
             Name:                      Task: 
              
             prepare _test               create a user test record and
                                        insert it among system test
                                        records. 
                                         
          4_._ _A_u_x_i_l_i_a_r_y_ _P_r_o_c_e_d_u_r_e_s_ 
              
             Name:                      Task: 
              
             schedule                   start the next coroutine. 
                                         
             cor _to _sem                 transfer a coroutine description to
                                        a semaphore queue and insert it ac-
                                        cording to its priority. 
                                         
          The auxiliary procedures are intended to facilitate the construc-
          tion of alternative coroutine schedulers, replacing centra _logic.
           
           \f

2_._3_ _ _ _ _ _ _ _S_t_a_n_d_a_r_d_ _V_a_r_i_a_b_l_e_s_ 2.3
           
          1_._ _S_t_a_n_d_a_r_d_ _V_a_r_i_a_b_l_e_s_ _f_o_r_ _M_o_d_i_f_i_c_a_t_i_o_n_ _o_f_ _t_h_e_ _N_e_x_t_ _W_a_i_t_ _O_p_e_r_a_t_i_o_n_
              
             Name:                      Meaning: 
              
             wait _select                if zero, the wait operation waits
                                        for/fetches the first message in
                                        the semaphore queue, no matter its
                                        key. If not zero, wait _select is a
                                        lock, and the wait operation waits
                                        for/fetches the first message in
                                        the semaphore queue with a key that
                                        fits the lock. 
                                         
             Name:                      Meaning: 
              
             wait _time                  states the maximum waiting time
                                        accepted by the coroutine executing
                                        the wait operation. 
                                         
                                        If wait _time = 0 there is no limi-
                                        tation to the waiting time. 
                                         
                                        If wait _time < 0 no waiting time is
                                        accepted. 
                                         
                                        If wait _time > 0 wait _time contains
                                        the maximum waiting time measured
                                        in tenth of a second. 
                                         
          The contents of these variables are stored in the calling corou-
          tine description each time wait is called and they are reset to
          zero. 
           \f

          2_._ _S_t_a_n_d_a_r_d_ _V_a_r_i_a_b_l_e_ _f_o_r_ _S_p_e_c_i_f_i_c_a_t_i_o_n_ _o_f_ _T_e_s_t_ _R_e_c_o_r_d_s_ 
              
             Name:                      Meaning: 
              
             select _test                contains the test numbers wanted as
                                        a bit pattern. 
                                         
          3_._ _S_t_a_n_d_a_r_d_ _V_a_r_i_a_b_l_e_s_ _U_s_e_d_ _b_y_ _T_h_e_ _C_e_n_t_r_a_l_ _L_o_g_i_c_ 
              
             Name:                      Meaning: 
              
             co _time _base               8000-clock-time at the last test
                                        for timeout. Basis for time indi-
                                        cation in the coroutine system.  
                                        Must not be changed! 
                                         
             co _time                    the time until the next possible
                                        timeout measured in tenth of a
                                        second from co _time _base. 
                                         
             co _8000 _event              the number of unprocessed 8000-
                                        events found in the latest scan of
                                        the 8000-event queue. 
                                         
             co _own _base                the address of the first own vari-
                                        able in the coroutine system.  
                                        Must not be changed. 
                                         
                                         
2_._4_ _ _ _ _ _ _ _P_r_o_c_e_d_u_r_e_s_ _i_n_ _A_L_G_O_L_ _L_i_b_r_a_r_y_ 2.4
           
          The following ALGOL library procedures are used by the system and
          the users of the system.  
           
          For a detailed description of the individual procedures, cf. ref.
          1. 
           \f

             Name:                      Function: 
                                         
             activity                   Used to create a number of empty
                                        activity descriptors before calling
                                        procedure coroutines. 
                                         
             new _activity               Initiates an empty activity with a
                                        procedure and starts the activity. 
                                         
                                        Must be called after procedure co-
                                        routines and before any other co-
                                        routine procedure. 
                                         
             activate                   Activates a non-empty activity in
                                        its restart-point. 
                                         
                                        Used by  procedure schedule. Must
                                        not be used in coroutines scheduled
                                        by this procedure. 
                                         
             passivate                  De-activates the executing activ-
                                        ity, establishing its restart point
                                        (waiting point). 
                                         
                                        Used in procedure wait. 
                                         
                                        May be used in the coroutines, but
                                        does not change the location in any
                                        semaphore queue of executing corou-
                                        tine. 
               
           \f

F_       3_._ _ _ _ _ _ _ _ _D_A_T_A_ _S_T_R_U_C_T_U_R_E_S_                                                  3.
           
          The system introduces 3 data structures and a new type of vari-
          able in connection with the coroutine system. 
           
          The data structures are: 
           
          a) A semaphore table containing chain fields for all semaphores. 
           
          b) A coroutine description table containing information about the
             priority of each coroutine, the maximum waiting time, what the
             coroutine is waiting for and chain fields. 
              
          c) Message buffers each consisting of a head and a data part. The
             head contains priority, length and chain fields. 
              
          The new type of variable is a reference type used to refer to the
          messages. 
           
           
3_._1_ _ _ _ _ _ _ _S_e_m_a_p_h_o_r_e_ _T_a_b_l_e_s_ 3.1
           
          Semaphores in the system are always message semaphores. They are
          identified by number. 
           
          There are 3 types of semaphores: 
          a) user semaphores           numbered 1 to max-semaphore, 
          b) central logic semaphores  numbered -5 to 0, 
          c) system semaphores         numbered -9 to -6. 
           
          The semaphore description consists of 8 halfwords per semaphore. 
           
           
3_._1_._1_ _ _ _ _ _U_s_e_r_ _S_e_m_a_p_h_o_r_e_s_ 3.1.1
           
          The number of user semaphores is stated when the system is start-
          ed up calling procedure coroutines. The semaphores are used for
          signal and wait operations. 
           
               \f

         3_._1_._2_ _ _ _ _ _C_e_n_t_r_a_l_ _L_o_g_i_c_ _S_e_m_a_p_h_o_r_e_s_                                         3.1.2
           
          These semaphores, defined by the central logic, are used in con-
          nection with the facilities made available by the central logic.
           
          The semaphores can be used by means of procedures cor _to _sem,
          signal and wait. 
           
           
3_._1_._3_ _ _ _ _ _S_y_s_t_e_m_ _S_e_m_a_p_h_o_r_e_s_ 3.1.3
           
          System semaphores are used by the coroutine procedures. 
           
          The system semaphores are: 
           
          No: Name:                     Semaphore queue contains: 
           
          -9  ready semaphore           coroutines ready to be activated. 
                                         
          -8  implicit passivate        coroutines implicitly passivated. 
              semaphore                   
                                         
          -7                            not used. 
                                         
          -6  free semaphore            coroutines not used at present. 
                                         
                                         
3_._2_ _ _ _ _ _ _ _C_o_r_o_u_t_i_n_e_ _D_e_s_c_r_i_p_t_i_o_n_ 3.2
           
          The procedure coroutines will create a coroutine description for
          each coroutine. The description consists of 16 halfwords per co-
          routine. It must not be confused with the activity description
          created by procedure activity, consisting of 20 halfwords per ac-
          tivity. 
           
          Apart from chain fields, the coroutine description contains co-
          routine priority, maximum waiting time accepted and a "message
          lock", which is the value of wait _select the last time procedure
          wait was called by the coroutine. 
           \f

                   The coroutine description will always be queued up on a semaphore
          in order of priority. When the system is started up, all corou-
          tine descriptions are queued up on the free semaphore. 
           
           
3_._3_ _ _ _ _ _ _ _M_e_s_s_a_g_e_ _B_u_f_f_e_r_s_ 3.3
           
          Communication between coroutines takes place by means of messages
          placed in message buffers. These buffers are allocated in the
          stack by means of procedure allocate. 
           
          Apart from the data part, a message buffer contains a protected
          head with chain fields, the length of the data part and the pri-
          ority of the message buffer. 
           
          A message buffer occupies 8 halfwords + the length of the data
          part, which must be at least 6 halfwords. 
           
          The system considers the first two words of the data part to be a
          message key. If "the message lock" in a coroutine description
          queued up on a sempahore is not zero, it will be compared with
          the key words in all message buffers arriving at the semaphore,
          and only if the key fits will the message be transferred to the
          coroutine. 
           
          In this way several pairs of coroutines can communicate messages
          via the same semaphore, or two coroutines can communicate differ-
          ent types of messages. 
           
           
3_._4_ _ _ _ _ _ _ _R_e_f_e_r_e_n_c_e_ _V_a_r_i_a_b_l_e_ 3.4
           
          A new type of variable, a reference variable, is used to refer to
          messages in the message buffers. 
           
          A reference variable can be regarded as an array, whose length
          and location in the stack changes according to the state of the
          variable. 
           \f

          The state can be one of the following: 
           
                   'array'                       The reference variable refers to a
                                        message buffer. 
                                         
                                        In this state the reference varia-
                                        ble functions as an array contain-
                                        ing the message. 
                                         
                                        The array has the same length as
                                        the data part of the message buffer
                                        and has lower index = 1.  
                                         
                                        Fielding and indexing are made in
                                        the same way as with a normal
                                        array.  
                                         
                                        The type of array equals the type
                                        declared for the reference vari-
                                        able, i.e. boolean, integer, real
                                        or long. 
                                         
          'nil'                         The reference variable does not
                                        refer to a message buffer, and it
                                        has the length 0. 
                                         
                                        Fielding and indexing in this state
                                        will cause a field/index alarm. 
                                         
          Reference variables are declared in the following way: 
                                         
M_m_m_                    1 
P_p_p_          boolean 
M_m_m_          integer                                             * 
                         array <name> (1:1)   ,<name> (1:1)     ; 
P_p_p_          long                                                0 
M_m_m_          real 
P_p_p_                    0 
           \f

          A reference variable m_u_s_t_ be initialized before being used. This
          is done by calling the procedure: 
           
             initref (<name>); 
           
          and the state will be 'nil'. 
           
                   N_o_t_e_: 
           
          1) The array bound (1:1) must be stated in the declaration for
             e_a_c_h_ reference variable separately. 
              
          2) A parameter to an ALGOL procedure will be a reference variable
             only if: 
              
             a) the parameter on the call side is an unfielded reference
                variable, 
             b) the parameter is not fielded or indexed in the procedure
                itself. 
              
             If fielding or indexing of a reference variable is necessary
             in a procedure, this part of the procedure must be transformed
             into one or more procedures called with the reference variable
             as actual parameter. 
              
          3) At the end of the block in which a reference variable has been
             declared, it should be in the 'nil' state, otherwise the
             message buffer referred to will be lost. 
              
              \f

F_       4_._ _ _ _ _ _ _ _ _C_E_N_T_R_A_ _L_O_G_I_C_                                                     4.
           
          The procedure centra _logic may be used as central logic to sched-
          ule coroutines and communicate messages. It does not return until
          a corutine terminates, either via its final end or because of an
          alarm. 
           
          The procedure can be called again. 
           
          C_a_l_l_: centra _logic (log); 
                centra _logic (return value, long). The result of the last
                             call of schedule. 
                log          (call value, integer). Log is interpreted as a
                             bit pattern specifying the log records wanted.
                             (cf. section 4.3). 
                              
          P_r_o_g_r_a_m_ _m_o_d_e_:      At call, the program mode must be cor _monitor
                             (cf. appendix C). 
                              
          Procedure centra _logic uses the central logic semaphores in the
          following way: 
           
          No:  Name:                     Use: 
           0   wait _message _pool         (cf. section 4.1) 
          -1   wait _message              (cf. section 4.1) 
          -2   wait _answer _pool          (cf. section 4.2) 
          -3   delay                     may be used freely 
          -4                             not used 
          -5   virtual _error             cf. point 4 below 
           
          Procedure centra _logic performs the following functions: 
           
          1) Starts up coroutines queuing them up on the proper start sema-
             phore. (This is due to the fact that the central logic does
             not get the result from the call of new _activity). 
              
          2) Restarts the highest priority coroutine ready to be started.
             (Procedure schedule selects the coroutine). 
              \f

                   3) Coroutines deactivated with an implicit passivate statement
             are queued up on the implicit passivate semaphore. They are
             restarted in order of priority when their 8000-answers are
             found in the 8000-event queue. 
              
          4) Coroutines which cannot be restarted because of "stack busy"
             (activate result -2) are queued up on the virtual _error sema-
             phore. When the blocking coroutine later passivates explicit-
             ly, the blocked coroutine will be queued up on the ready se-
             maphore. 
              
             Note: There must be no call, explicitly or implicitly of pass-
             ivate between 8000-send-message and 8000-wait-answer in vir-
             tual coroutines. Consequenly virtual coroutines cannot send
             8000-messages and receive 8000-answers, in multibuffered im-
             plicit-passivate-zones. 
              
          5) resets wait _time and wait _select before each coroutine is ac-
             tivated. 
              
          6) Communicates incoming 8000-messages (cf. section 4.1). 
              
          7) Communicates on request 8000-answers via messages sent to
             specified semaphores (cf. section 4.2). 
              
          8) Generates timeout on 8000-answers (cf. Section 4.2). 
              
          9) If no coroutines are ready to be started, the 8000-event queue
             is scanned for external events. 
             One event to be found is the answer from the 8000 clock pro-
             cess to a delay operation sent by centra _logic itself with the
             purpose of being timed out from the event queue to restart
             timed-out coroutines. 
              
         10) Displays logging records showing operation flow and time
             consumption. 
              
              \f

4_._1_ _ _ _ _ _ _ _P_r_o_c_e_s_s_i_n_g_ _o_f_ _8_0_0_0_-_m_e_s_s_a_g_e_s_ 4.1
              
          The semaphores 0 and -1 are used in connection with communication
          of 8000-messages. 
           
                   If a coroutine wishes to receive an 8000-message there must be a
          message queued up on the semaphore wait _message _pool.  
           
          When, scanning the event queue, an 8000-message is found,
          centra _logic will examine whether there is a message queued up on
          the wait _message _pool semaphore. If a message is found and a co-
          routine is queued up on the wait _message semaphore waiting for
          the 8000-message, the 8000-message buffer will be copied to the
          message, which is signalled to the wait _message semaphore: 
           
          field addr. 
          +2          sender process description addr. 
          +4          receiver process description addr. 
          +6          8000-message buffer addr. 
          +8 
M_          . 
          .           8000-message 
P_          . 
          +22 
           
          If the message is less than 22 halfwords, only the part of 8000-
          message for which there is room will be copied. If the message is
          greater than 22 halfwords the rest of the message will be unde-
          fined. 
           
          By means of wait _select it is possible for a coroutine to wait
          for a message from a particular process or/and a particular
          pseudo process. 
           
           
4_._2_ _ _ _ _ _ _ _C_o_n_v_e_r_s_i_o_n_ _o_f_ _8_0_0_0_-_a_n_s_w_e_r_s_ _i_n_t_o_ _M_e_s_s_a_g_e_s_ 4.2
           
          In connection with conversion of an 8000-answer into a message,
          semaphore -2 (wait _answer _pool) is used. 
           \f

                   This facility can be used if: 
           
          1) A coroutine has to wait for one or more 8000-answers. 
              
          2) A coroutine has to wait for the first of either a message or
             an 8000-answer. 
              
          3) A coroutine wishes to regret an 8000-message, if no 8000-an-
             swer is received within a certain time (timeout). 
              
          4) A coroutine has sent an 8000-message via a global zone, and
             another coroutine has to wait for the 8000-answer. 
              
          The facility is used in the following way: 
           
          When an 8000-message has been sent by means of monitor (16
          <*send _message*>, ...) a message with the following format is
          signalled to wait _answer _pool: 
           
          field addr. 
          +2         not used 
          +4         8000-message-buffer-address 
          +6         answer semaphore 
           
          Whenever procedure centra _logic finds an 8000-answer in the 8000-
          event queue, it is examined whether a message with this 8000-mes-
          sage-buffer-address is queued up on wait _answer _pool. If so, the
          message is communicated to the semaphore stated in the 3rd word
          of the message. 
           
          Procedure centra _logic does not change the message, which only
          need to consist of 6 halfwords. 
           
          In case 3 where the coroutine does not wait for the 8000-answer,
          the coroutine must withdraw its message from wait _answer _pool
          before calling 8000-regret-message. 
           
           \f

         4_._3_ _ _ _ _ _ _ _D_e_m_a_n_d_ _f_o_r_ _L_o_g_ _D_i_s_p_l_a_y_ 4.3
           
          The log display wanted by procedure centra _logic is stated by the
          parameter log. The log display is printed on current output. 
           
          The parameter log must contain the sum of the numbers of the
          printouts wanted: 
           
          No    Meaning 
          1     Various counters. 
          2     The semaphore table and associated records at normal
                coroutine termination. 
          4     The semaphore table and associated records at coroutine
                termination with alarm. 
          8     The semaphore table and associated records at start up. 
           
           \f

F_       5_._ _ _ _ _ _ _ _ _T_E_S_T_ _F_A_C_I_L_I_T_I_E_S_ _I_N_ _T_H_E_ _C_O_R_O_U_T_I_N_E_ _S_Y_S_T_E_M_                          5.
           
          The coroutine procedures contain a possibility of creation of
          test records in a zone belonging to the coroutine system. 
           
          The zone, which must be declared and opened in the user program,
          is the second parameter to the procedure coroutines. The creation
          of test records is demanded by means of the standard integer
          variable select _test. The different test record types have a num-
          ber, which is a power of two and so select _test must have a value
          corresponding to the sum of the numbers of the test record types
          wanted. 
           
          The following test record types exist: 
           
            1: the first part of message at call of procedure signal 
            2: the first part of message at return from procedure wait 
            4: call of procedure signal 
            8: call of procedure wait 
           16: return from procedure wait 
           32: not used 
           64: transfer of coroutine to another semaphore queue 
          128: start up of coroutine 
           
          The system contains a procedure prepare _test, which creates a
          test record containing test type (= 1024), coroutine number, the
          hour and zeroes in the remaining fields. 
           
          When prepare _test has been called, the test record is the current
          zone _record and may be changed freely. 
           
           \f

F_       6_._ _ _ _ _ _ _ _ _P_R_O_C_E_D_U_R_E_ _D_E_S_C_R_I_P_T_I_O_N_                                            6.
           
          The following procedure description, which describes standard
          procedures as well as standard variables, is divided into 3
          sections: user procedures, test procedures and central logic
          procedures. 
           
           
6_._1_ _ _ _ _ _ _ _U_s_e_r_ _P_r_o_c_e_d_u_r_e_s_ 6.1
           
6_._1_._1_ _ _ _ _ _A_l_l_o_c_a_t_e_ 6.1.1
           
          This standard procedure is used to allocate stack space for a
          message buffer, initialize it with priority and a message, which
          in the second word contains the message buffer length and other-
          wise is zerofilled. This message is signalled to the semaphore.
          The procedure must be called after the procedure coroutines and
          at the same block level. 
           
          C_a_l_l_: allocate (sem, message _size, prio); 
                sem           (call value, integer). The number of the se-
                              maphore to which the message is to be signal-
                              led. 
                              0 <= sem <= max _semaphore. 
                               
                message _size  (call value, integer). The length in half-
                              words of the message buffer to be reserved. 
                              6 <= message _size. 
                               
                prio          (call value, integer). The priority to be
                              assigned to the message buffer. 
                              -2048 <= prio <= 2047. 
                              (2047 is the highest priority). 
                               
          P_r_o_g_r_a_m_ _m_o_d_e_:       The program mode must be cor _monitor. 
                               
                               \f

         6_._1_._2_ _ _ _ _ _C_o_r_o_u_t_i_n_e_s_                                                       6.1.2
           
          This standard procedure is used to allocate stack space for se-
          maphore and coroutine descriptions. The coroutine descriptions
          are queued up on the free semaphore with the priority 0. 
           
          The procedure activity must be called before procedure coroutines
          and at the same block level.  
           
          Procedure coroutines must be called before procedure new _activity
          and before all other coroutine procedures. 
           
          C_a_l_l_: coroutines (max _semaphore, test _zone) 
                max _semaphore (call value, integer). The number of user
                              semaphores. These semaphores are numbered
                              from 1 to max _semaphore. 
                               
                test _zone     (call value, zone). The zone in which test
                              records are created. The zone must be open
                              and ready for record output when the creation
                              of test records is enabled (cf. prepare _test
                              and select _test). 
                               
          P_r_o_g_r_a_m_ _m_o_d_e_:       At call the program mode must be act _monitor,
                              at return it will be cor _monitor. 
                               
                               
6_._1_._3_ _ _ _ _ _I_n_i_t_r_e_f_ 6.1.3
           
          This standard procedure is used to initialize a reference vari-
          able. 
           
          C_a_l_l_: initref (ref); 
                ref           (call and return value, boolean array, inte-
                              ger array, long array or real array). The ar-
                              ray to be transformed into a reference vari-
                              able. At return the state of the reference
                              variable will be 'nil'. 
                               \f

          P_r_o_g_r_a_m_ _m_o_d_e_:       The program mode must be one of the
                              cor _modes (cf. appendix C). 
                               
                   The array ref m_u_s_t_ be declared in the following way: 
           
M_m_m_                     1 
P_p_p_          boolean 
M_m_m_          integer                                            * 
                         array <name> (1:1)   ,<name> (1:1)    ; 
P_p_p_          real                                               0 
M_m_m_          long 
P_p_p_                     0 
           
           
6_._1_._4_ _ _ _ _ _S_e_t_ _P_r_i_o_r_i_t_y_ 6.1.4
           
          This standard procedure changes the priority of a coroutine. When
          the change has been made, the coroutine is queued up on the ready
          semaphore in order of its new priority and is passivated. 
           
          C_a_l_l_: set _priority (prio); 
                prio          (call value, integer). The new priority.
                              -2048 <= prio <= 2047. 
                              (2047 is the highest priority). 
                               
          P_r_o_g_r_a_m_ _m_o_d_e_:       The program mode must be cor _activity. 
                               
          As the procedure queues up the coroutine on the ready semaphore
          after all coroutines with the same or higher priority, the call: 
           
                    set _priority (act _prio); 
           
          act _prio being the priority of the coroutine, will queue up the
          coroutine behind all coroutines with the same priority. 
           
           
6_._1_._5_ _ _ _ _ _S_i_g_n_a_l_ 6.1.5
           
          This boolean standard procedure signals a message to a semaphore.
           \f

                   C_a_l_l_: signal (sem, ref); 
                signal        (return value, boolean). True if the message
                              key fits the lock of a waiting coroutine
                              (i.e. a coroutine is transferred to the ready
                              semaphore, queue), false otherwise. 
                               
                sem           (call value, integer). The number of the
                              semaphore to which the referenced message is
                              signalled. 
                              -5 <= sem <= max _semaphore. 
                               
                ref           (call and return value, reference variable).
                              ref is a reference variable which refers to
                              the message. At call the state of ref must be
                              'array', at return the state is 'nil'. 
                               
          F_u_n_c_t_i_o_n_: 
                               
          Procedure signal proceeds in the following steps: 
           
          1) If one or more coroutines are queued up on the specified
             semaphore, they are examined, in order of priority, to have a
             message lock in their coroutine description to which the
             message key fits. (see subsection 6.1.7). 
              
          2) If a coroutine is found, the message buffer address will be
             inserted in the coroutine description, and the coroutine is
             queued up on the ready semaphore in order of priority. 
              
          3) If no coroutine is found, the message is queued up on the
             semaphore message queue in order of priority. 
              
          4) The procedure returns. 
              
          P_r_o_g_r_a_m_ _m_o_d_e_: The program mode must be one of the cor _modes (cf.
                        appendix C). 
              
                   Even if the procedure transfers a coroutine with a higher prior-
          ity than that of calling coroutine to the ready semaphore, the
          procedure will not de-activate calling coroutine. 
           
           \f

6_._1_._6_ _ _ _ _ _W_a_i_t_ 6.1.6
           
          This integer standard procedure waits for a message at a sema-
          phore. 
           
          C_a_l_l_: wait (sem, ref); 
                wait          (return value, integer). 
                              = 0: timeout, no message received 
                              > 0: length in halfwords of the data part of
                                   message received (the data part is al-
                                   ways greater than five halfwords). 
                 
                sem           (call value, integer). The number of the
                              semaphore where to wait for the message. 
                              -5 <= sem <= max _semaphore. 
                               
                ref           (call and return value, reference variable).
                              At call, the state of ref must be 'nil'. 
                              At return the state of ref is 'array' and the
                              value of ref will refer to the message re-
                              ceived, if one is received. 
                               
          F_u_n_c_t_i_o_n_: 
           
          Procedure wait proceeds in the following steps: 
           
          1) Current values of the standard variables wait _select and
             wait _time are inserted in the coroutine description. 
              
          2) If one or more messages are queued up on the semaphore spec-
             ified, they are examined, in order of priority, to have a mes-
             sage key that fits the message lock stored in the coroutine
             description (cf. subsection 6.1.7). 
              
             If more messages of the same priority are found, the one which
             has been queued up for the longest time is taken. 
              
          3. If program mode is cor _monitor or cor _disable, or if wait _time
             < 0, the procedure proceeds at point 7. with message found or
             timeout if no message was found. 
              \f

          4. If no message was found, the coroutine is queued up on the
             semaphore specified. 
              
             If a message was found the coroutine stays in the ready sema-
             phore queue. 
              
          5. The procedure examines whether there is timeout for any of the
             other coroutines in the system or, if any higher priority co-
             routine is implicitly passivated, whether there is an 8000-
             answer for any of the implicitly passivated coroutines. If so,
             they are queued up on the ready semaphore in order of prior-
             ity. 
              
          6. If a message was found, and calling coroutine is the first in
             the ready semaphore queue, the procedure proceeds at 7., else
             the coroutine is passivated. 
              
          7. This is a re-start point with a delay in case the message
             waited for is received or in case of timeout. It is the con-
             tinue point with no delay, whether or not a message is receiv-
             ed in case the procedure is called in cor _disable or
             cor _monitor mode or if the coroutine will accept no delay. 
              
             If a message is received, the reference variable specified is
             changed to refer it, and its state is changed to 'array'. 
              
          8. If a message is received, wait returns with the length of the
             datapart, else with the value 0. 
              
          P_r_o_g_r_a_m_ _m_o_d_e_: The program mode must be cor _modes (cf. appendix
                        C). 
              
              
M_M_m_m_ 6.1.7     Wait _select                                                      6.1.7
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This long standard variable affects the progress of the next
          wait. 
           \f

          Procedure wait starts by inserting the value as a message lock in
          the coroutine description, whereupon wait _select is zeroed. 
           
          A coroutine must not passivate, explicitly or implicitly, between
          an assignment to wait _select and a call of wait, because
          wait _select is zeroed by procedure centra _logic. 
           
          A reactivated coroutine will always find wait _select = 0. 
           
          The value wait _select is inserted as a message lock in the co-
          routine description, which must be fitted by a message key found
          in the first two words of a message. 
           
          The lock/key comparison made by procedure wait as well as by pro-
          cedure signal both use the value of wait _select inserted in the
          coroutine description by procedure wait. 
           
          Two integer arrays, message _key and message _lock, containing the
          first two words of the message as a message key and the message
          lock from the coroutine description respectively, are used in the
          comparison algorithm. 
           
          The comparison is made according to the following algorithm: 
           
          accept:= true; 
           
          for i:= 1,2 do 
          if message _lock(i) <> 0 then 
          begin 
            if message _lock(i) > 0 then 
            begin 
              if message _lock(i) <> message _key(i) then accept:= false 
            end else 
            begin <* message _lock(i) < 0 *> 
              if logand (message _lock(i), message _key(i)) = 0 then 
              accept:= false 
            end 
          end; 
             
          If accept is still true, the message key fits the lock. 
           
           \f

M_M_m_m_6.1.8     Wait _time                                                           6.1.8
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This integer standard variable affects the progress of the next
          wait.  
           
          Procedure wait starts by inserting the value as maximal delay
          accepted in the coroutine description, whereupon wait _time is
          zeroed. 
           
          A coroutine must not be passivated, explicitly or implicitly,
          between an assignment to wait _time and a call of wait because
          wait _time is zeroed by procedure centra _logic. 
           
          A re-activated coroutine will always find wait _time = 0. 
           
          The value of wait _time is inserted as maximal delay accepted
          waiting for a message. 
           
          wait _time > 0: the maximum waiting time accepted in tenth of se-
                         conds. If no message is received within this per-
                         iod of time, procedure wait returns without a mes-
                         sage. 
                          
          wait _time = 0: no limits to the waiting time. 
                          
          wait _time < 0: procedure wait accepts no delay and returns at
                         once. 
                         
                        If a message is received it is returned, else wait
                        returns without a message. The coroutine is not
                        passivated even if higher priority coroutines are
                        queued up on the ready semaphore. 
                         \f

          E_x_a_m_p_l_e_ _1_: 
          Coroutine that prints out the time every 5 minutes. 
           
          procedure write _time (z); 
          zone z; 
          begin 
            real time; 
            integer delay _sem; 
            integer array dummy (1:1); 
            initref (dummy); 
            delay _sem:= -3; 
            repeat 
              systime (5, 0.0, time); 
              write (z, <:<'nl'>time:>, <<dd dd>, (entier time)//100); 
              setposition(z,0,0); 
           
              wait _time:= 5 * 60 / 0.1024; <* 5 min *> 
              wait(delay _sem, dummy); 
            until false 
          end; 
           
           
6_._2_ _ _ _ _ _ _ _T_e_s_t_ _P_r_o_c_e_d_u_r_e_s_ 6.2
           
M_M_m_m_6.2.1     Prepare _test                                                        6.2.1
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This standard procedure creates a test record in the test zone
          buffer. The test record, which consists of 16 halfwords, is
          created by means of outrec6. 
           
          The record is initialized with test type, current coroutine and
          hour, cf. appendix D. 
           
                   After return from the procedure, further specification may be in-
          serted in the test record, which is available in the test zone
          buffer. 
           
             C_a_l_l_: prepare _test 
           \f

          At call the zone state for the test zone (2nd parameter in the
          call of procedure coroutines) must be 0 or 6 (ready for record
          output). 
           
           
M_M_m_m_6.2.2     Select _test                                                         6.2.2
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This integer standard variable selects the test records to be
          created. The value of the variable can be changed dynamically
          during program execution if only the test zone is open and ready
          for record output (zone state 0 or 6), before select _test is
          given a value different from 0. 
           
          Standard procedure coroutines zeroes select _test. 
           
          The value of select _test must be the sum of the numbers of the
          test record types wanted: 
           
          Test record type   Meaning 
            1                Message buffer at call of procedure signal 
            2                Message buffer at return from procedure wait 
            4                Call of procedure signal 
            8                Call of procedure wait 
           16                Return from procedure wait 
           64                Transfer of coroutine to another semaphore
                             queue 
          128                Start up of coroutine. 
           
           
         6_._3_ _ _ _ _ _ _ _A_u_x_i_l_i_a_r_y_ _C_e_n_t_r_a_l_ _L_o_g_i_c_ _P_r_o_c_e_d_u_r_e_s_                              6.3
           
          These standard procedures and standard variables are used in the
          central logic procedure of the system (centra _logic). 
           
          The procedures are thus only interesting if an alternative cen-
          tral logic is to be made, or if one wishes to know how
          centra _logic works. 
           
           \f

M_M_m_m_6.3.1     Co _8000 _event 6.3.1
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This integer standard variable holds information about unprocess-
          ed 8000-events, if any, from the last scan of the 8000-event
          queue. 
           
          If the value of co _8000 _event differs from 0 at entry to pro-
          cedure centra _logic the procedure will scan the 8000 _event queue
          before starting up the next coroutine. 
           
          co _8000 _event is assigned by procedures schedule and centra _logic
          after each scan of the 8000 _event queue. 
           
           
M_M_m_m_6.3.2     Co _own _base                                                         6.3.2
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This standard integer contains the start address of the own core
          of the coroutine system. See appendix B. 
           
           
M_M_m_m_6.3.3     Cor _to _sem    6.3.3
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This standard procedure is called by the central logic to trans-
          fer coroutines from one semaphore queue to another. A coroutine
          is always inserted in order of priority. 
           
                   C_a_l_l_: cor _to _sem (sem, cor); 
                sem           (call value, integer). The number of the
                              semaphore where the coroutine is queued up. 
                              -9 <= sem <= -1 
                               
                cor           (call value, integer). The number of the
                              coroutine. 
                               
          P_r_o_g_r_a_m_ _m_o_d_e_: The program mode must be cor _monitor (cf. appendix
                        C). 
           
          Alarm: The procedure must not be called as a formal procedure or
                 with formal expressions. 
           
           \f

M_M_m_m_6.3.4     Co _time    6.3.4
P_P_p_p_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This integer standard variable controls - together with the
          variable co _time _base - when the next possible timeout can take
          place. 
           
          The time of the next possible timeout is 
           
             co _time _base + (extend co _time shift 10); 
           
           
M_M_m_m_6.3.5     Co _time _base 6.3.5
P_P_p_p_  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
           
          This long standard variable contains the basis of time measure-
          ments in the coroutine system. 
           
          The value of the variable must n_o_t_ be changed. 
           
          co _time and remaining wait _time in the coroutine descriptions are
          measured in units of 0.1024 sec and are used relative to
          co _time _base. 
           
               
         6_._3_._6_ _ _ _ _ _S_c_h_e_d_u_l_e_                                                         6.3.6
           
          This long standard procedure is used by the central logic instead
          of procedure activate. 
           
          The procedure starts by searching for the next coroutine to be
          started. If one is found, schedule calls activate. In this case
          the result value is the same as the result value from activate,
          and the return value of the parameter is the number of the corou-
          tine activated/attempted activated. 
           
          If no coroutine is found, the procedure returns with the result
          value 0 and the parameter value 0. 
           \f

          C_a_l_l_: schedule (cor); 
                schedule      (return value, long). 
                              If activate has been called, the return value
                              of procedure activate, otherwise 0. 
                               
                cor           (return value, integer). 
                              If activate has been called, the number of
                              the coroutine activated, otherwise 0. 
                               
          P_r_o_g_r_a_m_ _m_o_d_e_: The program mode must be cor _monitor (cf. appendix
                        C). 
           
          Alarm: The procedure gives parameter error if called with expres-
                 sion or a constant as parameter. 
           
          F_u_n_c_t_i_o_n_: 
           
          1. If co _8000 _event is negative, the 8000-event queue is scanned.
           
             At a scan of the 8000-event-queue, coroutines queued up on the
             implicit-passivate semaphore are transferred to the ready
             queue when the 8000-answers waited for are found in the queue.
              
             At the same time, the number of events in the 8000-wait-queue,
             which are not answers to coroutines implicitly passivated, are
             counted in the variable co _8000 _event. 
              
                   2. If the ready semaphore is empty, coroutines which have exceed-
             ed their maximum waiting time are transferred to the ready
             semaphore queue. 
              
             If no coroutines are transferred to the ready semaphore queue,
             the 8000-event queue will be scanned as described in 1. 
              
          3. If the ready semaphore queue is still empty, procedure sched-
             ule returns, else the first coroutine on the ready semaphore
             queue is activated. 
              
              \f

F_                  
           \f

F_       A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_S_ A.
           
          1  RCSL No 42-i1278: 
               ALGOL8, User's Guide, Part 2 
           
          2  RCSL No 31-D476: 
               RC8000 MONITOR, Part 1, System Design 
           
          3  RCSL No 31-D477: 
               RC8000 MONITOR, Part 2, Reference Manual 
           
                    \f

F_       B_._ _ _ _ _ _ _ _ _I_N_T_E_R_N_A_L_ _T_A_B_L_E_S_ B.
           
          This appendix contains the formats of the internal tables. 
           
          The addresses of the fields are relative addresses measured in
          halfwords relative to the base address of the table. 
           
          Section B.1 contains a description of the own core of the corou-
                      tine system. 
                       
          Section B.2 contains a description of chain elements. 
                       
          Section B.3 contains a description of the semaphore table. 
                       
          Section B.4 contains a description of the coroutine descriptions.
                       
          Section B.5 contains a description of the message buffers. 
                       
          Section B.6 contains procedures for displaying the tables. 
           
           
         B_._1_ _ _ _ _ _ _ _T_h_e_ _O_w_n_ _C_o_r_e_ _o_f_ _t_h_e_ _C_o_r_o_u_t_i_n_e_ _S_y_s_t_e_m_ B.1
           
          External procedure coroutines own core. 
           
          rel. addr. 
           +0                  "max _semaphore" 
           +2                  "base address of the semaphore table" 
           +4                  "the address of the last coroutine" 
           +6                  "the address of the coroutine 0" 
           +8                  co _8000 _event 
          +10                  co _time 
          +12                  co _time _base 
          +14 
          +16                  wait _time 
          +18                  wait _select 
          +20 
          +22                  co _own _base "base address of this table" 
          +24                  "the length of activity's description per
                               coroutine" \f

          +26                  "testzone formals" 
          +28 
          +30                  select _test 
          +32 
          +34 
          +36                  "testrecord" 
          +38 
          +40 
           
           
B_._2_ _ _ _ _ _ _ _C_h_a_i_n_ _E_l_e_m_e_n_t_s_ B.2
           
          Semaphore tables, coroutine descriptions and message buffers con-
          tain chain elements. These chain elements consist of the address
          of the next element and the address of the previous element. 
           
                   A chain element looks like this: 
           
          rel. addr. 
          -2               the address of the next element (towards lower
                           priority) 
          +0               the address of the previous element (towards
                           higher priority) 
           
          If a chain element has no references it points at itself (i.e. at
          the field with the relative address 0). 
           
           
B_._3_ _ _ _ _ _ _ _S_e_m_a_p_h_o_r_e_ _T_a_b_l_e_ B.3
           
          The table is placed as an array from -9 to max _semaphore of sema-
          phore elements each consisting of 8 halfwords. 
           
          Each semaphore element consists of a message chain element and a
          coroutine chain element. 
           
          "Base address of the semaphore table" (see B.1) contains the ad-
          dress of the coroutine chain element of semaphore 0. 
           \f

          A semaphore element has the following fields: 
           
          rel. addr. 
          within sem. 
          -6          the address of the first message (highest priority) 
          -4          the address of the last message (lowest priority) 
          -2          the address of the first coroutine (highest priority)
          +0          the address of the last coroutine (lowest priority) 
           
          NB: When coroutines/messages are queued-up on a semaphore queue
              in order of priority, the first address of the previous chain
              element is used as priority. This implies that no signals are
              sent to the lowest semaphore (the ready semaphore) and that
              addresses always exceed 2047, which is in fact the case. 
           
           
         B_._4_ _ _ _ _ _ _ _T_h_e_ _C_o_r_o_u_t_i_n_e_ _D_e_s_c_r_i_p_t_i_o_n_ _T_a_b_l_e_ B.4
           
          The table is placed as an array from 0 to no _of _coroutines of co-
          routine description elements each consisting of 16 halfwords. An
          element has the following fields: 
           
          rel. addr. 
          -6       the priority of the coroutine  
          -4       message buffer address if a message has been found 
          -2       the address of the next coroutine (towards lower prior-
                   ity) 
           0       the address of the previous coroutine (towards higher
                   priority) 
          +2       wait _select shift (-24) 
          +4       wait _select extract 24 
          +6       remaining wait _time in relation to co _time base 
          +8       coroutine number 
           
          The coroutine descriptions can be found either by means of the
          semaphore tables or by means of "the address of coroutine 0". 
           
           \f

B_._5_ _ _ _ _ _ _ _M_e_s_s_a_g_e_ _B_u_f_f_e_r_s_ B.5
           
          A message buffer has a head of 8 halfwords and a data part of at
          least 6 halfwords. A message buffer can only be found by means of
          the address, as it must be either queued up on a semaphore or re-
          ferred to by a reference variable. 
           
          The message buffer has the following format: 
           
          rel. addr. 
          -6        the priority of the message buffer 
          -4        the length of the message buffer data field in half-
                    words 
          -2        the address of the next message buffer (towards lower  
                    priority) 
           0        the address of the previous message buffer (towards
                    higher priority) 
          +2        message key 1 message 
          +4        message key 2 message 
          +6                      message 
M_          .                          . 
          .                          . 
P_          .                          . 
           
           
B_._6_ _ _ _ _ _ _ _P_r_o_c_e_d_u_r_e_s_ _u_s_e_d_ _t_o_ _D_i_s_p_l_a_y_ _t_h_e_ _T_a_b_l_e_s_ B.6
           
          own integer max _sem, sem _basis, cor _basis, max _cor; 
           
          procedure initowns; 
          begin 
            integer array own _core(1:4); 
            system(5, co _own _base, own _core); 
            max _sem   := own _core(1); 
            sem _basis := own _core(2); 
            cor _basis := own _core(4); 
            max _cor   := (own _core(3) - cor _basis) shift (-4) 
          end; 
           \f

          procedure writesem(sem); 
          integer sem; 
          begin 
            write(out, <:sem:>, <<-ddd  >, sem, 
          <* pos *> if sem>0 then <:user:> else 
                    case sem+10 of( 
          <*  -9 *> <:ready:>, 
          <*  -8 *> <:impl. pass.:>, 
          <*  -7 *> <::>,<*not used*> 
          <*  -6 *> <:free:>, 
          <*  -5 *> <:virt. error:>, 
          <*  -4 *> <::>,<*not used*> 
          <*  -3 *> <:delay:>, 
          <*  -2 *> <:wait answ. pool:>, 
          <*  -1 *> <:wait mess.:>, 
          <*   0 *> <:wait mess. pool:>)) 
          end; 
           
                   integer procedure where(cor); 
          value cor; 
          integer cor; 
          begin 
            <* the procedure returns the number of the semaphore on which
               the coroutine is queued up. 
            *> 
            integer addr; 
            integer array chain _field(1:4); 
            initowns; 
            addr:=cor shift 4 + cor _basis; 
            for addr:=addr, chain _field(4) while chain _field(1)<2048 do 
            begin 
              where:=(addr-sem _basis)//8; 
              system(5, addr-6, chain _field) 
            end 
          end; 
           \f

          procedure printsemtable; 
          begin 
            <* for all semaphores the procedure will display the
               coroutines/messages in the queue. 
            *> 
            integer array sem _descr(1:3), cor _descr(1:8), mess _head(1:9); 
            integer addr, sem; 
           
            procedure printsem(semaddr); 
            value semaddr; 
            integer semaddr; 
            begin 
              integer addr; 
              procedure printcor; 
              begin 
                system(5, addr-6, cor _descr); 
                write(out, <:<'nl'>  cor:>, <<ddd >, cor _descr(8), 
                  <<-dddd  >, <:prio=:>, cor _descr(1), 
                  <:ident:>, <<-ddddddd>, cor _descr(5), cor _descr(6)); 
           
                if cor _descr(7) > 0 then 
                writeint(out, <: wait _time:>, << d.d>, cor _descr(7)); 
                addr:=cor _descr(3) 
              end; 
           
              procedure printmess; 
              begin 
                integer i, size; 
                system(5, addr-6, mess _head); 
                write(out, <:<'nl'>   mess   prio=:>, <<-dddd  >, 
                  mess _head(1), <:size:>, mess _head(2)); 
                size:=if mess _head(2) > 10 then 5 else mess _head(2)//2; 
                for i:=1 step 1 until size do write(out, mess _head(4+i)); 
                addr:=mess _head(3) 
              end; 
           \f

              system(5, semaddr-6, sem _descr); 
              if sem _descr(1)<>semaddr-4 or sem _descr(3)<>semaddr then 
              begin 
                write(out, <:<'nl'><'nl'>:>); 
                writesem(sem); 
           
                addr:=sem _descr(3); 
                while addr<>semaddr do printcor; 
           
                addr:=sem _descr(1); 
                while addr<>semaddr-4 do printmess; 
              end 
            end; 
            initowns; 
            for sem:=-9 step 1 until max _sem do printsem(sem*8 + sembasis)
          end; 
           
                   procedure printcorsem; 
          begin 
            <* for all coroutines the procedure displays the number and
               possible name of the semaphore on which the coroutines are
               queued up. 
            *> 
            integer cor; 
            initowns; 
            for cor:= 1 step 1 until max _cor do 
            begin 
              write(out, <:<'nl'>cor:>, <<dddd>, cor, <: on :>); 
              writesem(where(cor)) 
            end 
          end; 
           \f

F_       C_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_ _M_O_D_E_ C.
           
          The coroutine system defines certain program modes not used by
          activity. 
           
          The following program modes exist: 
           
          mode 
          value program mode of the coroutine system activity program mode 
           8    neutral                              neutral 
           
          17    act _monitor                          monitor 
          18    act _activity                         activity 
          20    act _disable                          disable 
           
          33    cor _monitor                          monitor 
          34    cor _activity      cor _modes          activity 
          36    cor _disable                          disable 
           
          The mode values stated will be displayed in the alarm caused by a
          procedure called in an illegal program mode. 
           
          Survey of the use of program modes: 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
                             _ _ _ _ _ _ _ _ _ _ _ _p_r_o_g_r_a_m_ _m_o_d_e_ _ _ _ _ _ _ _ _ _ _ _ _ 
          p_r_o_c_e_d_u_r_e_ _ _ _ _ _ _ _ _ _ _b_e_f_o_r_e_ _t_h_e_ _c_a_l_l_ _ _ _ _ _a_f_t_e_r_ _t_h_e_ _c_a_l_l_ _ 
          a_l_l_o_c_a_t_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_ _ _ _ _ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          c_o_r_o_u_t_i_n_e_s_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _1_7_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_ _ _ _ _ _ _ _ 
          i_n_i_t_r_e_f_ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_,_ _3_4_,_ _3_6_ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          s_e_t_ _p_r_i_o_r_i_t_y_ _ _ _ _ _ _ _ _ _ _ _ _ _3_4_ _ _ _ _ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          s_i_g_n_a_l_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_,_ _3_4_,_ _3_6_ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          w_a_i_t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_,_ _3_4_,_ _3_6_ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          c_o_r_ _t_o_ _s_e_m_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_ _ _ _ _ _ _ _ _ _ _ _ _ _ _u_n_c_h_a_n_g_e_d_ _ _ _ _ 
          s_c_h_e_d_u_l_e_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _3_3_ _ _ _ _ _ _ _ 
           
           \f

F_       D_._ _ _ _ _ _ _ _ _T_E_S_T_ _R_E_C_O_R_D_S_                                                     D.
           
          The individual test records consist of 16 halfwords and are
          created by means of outrec6. The format of the different test re-
          cords are shown in fig. 1. 
           
          Comments to the table: 
           
          re 1: The first 7 words of the message. If the message is
                  shorter, the rest is undefined. 
                   
          re 2: If s-data is requested, the value is 5 and the following
                  record an s-data record, otherwise the value is 4. 
                   
          re 3: The coroutine from which the procedure is called. If the
                  procedure is called in the disable mode, the value is the
                  negative value of coroutine number, and if it is called
                  in the monitor mode, the value is 0. 
                   
          re 4: If w-data is requested, the value is 18, and the follow-
                  ing record is a w-data record, otherwise the value is 16.
           
          re 5: This record is created by means of the procedure
                  prepare _test. The fields can be changed freely after the
                  call, only the test number must be outside the interval
                  0 - 1023. 
                   
          re 6: The hour contains 8000 _time (measured in 0.1 msec). The
                  value can be printed out in readable form: 
                   
                               begin 
                                 real date, time; 
                                 long field hour; 
                                 hour:= 16; 
                                 date:= systime(4, z.hour/10000, time); 
                                 write(out, << dd dd dd>, date, time) 
                               end; 
                   \f

F_                  
           \f

                   After end of execution the test records can be displayed by means
          of print. It can be done by means of the following call, in which
          each test record is printed out in a separate line: 
           
                  print testfile word words.8 
           
               \f

F_       E_._ _ _ _ _ _ _ _ _A_L_A_R_M_S_ _F_R_O_M_ _T_H_E_ _C_O_R_O_U_T_I_N_E_ _S_Y_S_T_E_M_ E.
           
          alarm text            procedure         explanation 
           
          c-level coroutines    coroutines        The procedure has not
                                allocate          been called at the same
                                                  block level as activity. 
                                                   
          index <j> coroutines  coroutines        The parameter
                                                  max _semaphore has the
                                                  illegal value <j>. 
                                allocate          The parameter 'sem' has
                                                  the illegal value <j>. 
                                                   
          index <j> schedule    cor _to _sem        The parameter 'cor' has
                                                  the illegal value <j>. 
          index <j> signal/wait signal            The parameter 'sem' has
                                wait              the illegal value <j> 
                                                   
          not ref. signal/wait  signal            2nd parameter in the
                                wait              procedure call is not a
                                                  reference variable. 
                                                   
          p-mode <j> coroutines coroutines        The procedure has been
                                allocate          called in a wrong program
                                                  mode <j>. Cf. appendix C.
                                                   
          p-mode <j> schedule   initref           The procedure has been
                                cor _to _sem        called in a wrong program
                                schedule          mode <j>. Cf. appendix C.
                                set _priority 
                                                   
          param schedule        initref           first parameter in the
                                                  call has not been declar-
                                                  ed as a reference vari-
                                                  able. 
                                cor _to _sem        the procedure has been
                                     schedule          called either as a formal
                                                  procedure or by means of
                                                  a formal expression. 
                                                   \f

               alarm text            procedure         explanation 
                                 
          param signal/wait     signal            The procedure has not
                                wait              been called in cor _modes.
                                                   
               ref.arr signal/wait   wait              The reference variable
                                                       has the state 'array' at
                                                  call. 
                                                   
               ref.nil signal/wait   signal            The reference variable
                                                        has the state 'nil' at
                                                  call. 
               
           \f

                                                 i 
           
          F_O_R_O_R_D_ 
           
          Første udgave: RCSL Nr. 42-i2047. 
          Denne manual omfatter de oplysninger, der tidligere (januar 1981)
                   har været distribueret som enkeltark RCSL Nr. 42-i1726. 
              
          Susanne Berland 
              A/S REGNECENTRALEN af 1979, juni 1982 
           \f

                                                 ii 
           \f

                                                 iii 
           
                   I_N_D_H_O_L_D_S_F_O_R_T_E_G_N_E_L_S_E_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_I_D_E_ 
           
          1.  INTRODUKTION ...........................................   1 
           
          2.  INSTALLATIONSPLANLÆGNING ...............................   2 
           
          3.  RC855 MASKINELT UDSTYR .................................   3 
              3.1  Oversigt ..........................................   3 
              3.2  Dimensioner .......................................   3 
              3.3  Miljø .............................................   4 
               
          4.  INSTALLERING ...........................................   5 
              4.1  RC855 Skærmterminal ...............................   5 
                   4.1.1  Kabelforbindelser ..........................   6 
              4.2  RC-CIRCUIT ........................................   8 
              4.3  Printer ...........................................  10 
                   4.3.1  RC862/867 printere .........................  10 
           
           
          B_I_L_A_G_: 
           
          A.  REFERENCER .............................................  11 
           
           \f

                                                 iv 
           \f

         1_._ _ _ _ _ _ _ _ _I_N_T_R_O_D_U_K_T_I_O_N_                                                     1.
           
          RC855 er konstrueret med henblik på opbygning af distribuerede
          systemer, hvor hver enkelt enhed skiftevis kan bruges til kom-
          munikation med en værtsdatamat og som lokal mikrodatamat. 
           
          RC855 fås som en terminaldatamat med mulighed for skiftende
          funktioner alt efter det indlæste programmel. 
           
          RC855 fås også som dedikeret terminal. 
           
          Terminaldatamaten og den dedikerede terminal er baseret på samme
          skærmterminal. Udstyret installeres ved hjælp af kabler, der til-
                   sluttes skærmterminalens bagpanel. Nogle af tilslutningerne bru-
          ges altid, (tastatur, el, osv.), brugen af andre afhænger derimod
          af konfigurationen (printer, værtsdatamat, RC-CIRCUIT, osv.).
          Konfigurationsmulighederne er beskrevet i ref. 1. 
           
          Der kan tilkobles en eller to diskettestationer og en printer.
          Terminalerne kan desuden indgå i en klyngekonfiguration. 
           
          En klyngekonfiguration kan bestå af indtil otte terminaler (ter-
          minaldatamater og/eller dedikerede terminaler), der forbindes med
          RC-CIRCUIT, et almindeligt par-snoet kabel ført gennem vægbokse/
          vægstik. 
               
           \f

F_       2_._ _ _ _ _ _ _ _ _I_N_S_T_A_L_L_A_T_I_O_N_S_P_L_A_N_L_Æ_G_N_I_N_G_                                         2.
           
          Følgende generelle krav skal tages i betragtning, når man plan-
          lægger installering af RC855 udstyr: 
           
          - der skal være rigelig plads omkring udstyret. 
          - temperaturen skal holdes mellem 16-32C og den relative luft-
            fugtighed mellem 40-60%; de ideelle betingelser er 21C og 50%
            relativ luftfugtighed; 
          - undgå så vidt muligt statisk elektricitet; eventuelle udladnin-
            ger bør ikke overstige 2 kV. 
          - udstyret kræver følgende elspecifikationer: 220/240 V AC +_10%,
            50 Hz +_2 Hz. 
          - alle stikkontakter skal være forsynet med jordforbindelse. 
           
          Yderligere oplysninger om installering af RC datamatudstyr i al-
          mindelighed findes under ref. 2. 
           
               \f

F_       3_._ _ _ _ _ _ _ _ _R_C_8_5_5_ _M_A_S_K_I_N_E_L_T_ _U_D_S_T_Y_R_ 3.
           
3_._1_ _ _ _ _ _ _ _O_v_e_r_s_i_g_t_ 3.1
           
          R_C_ _N_r_._ _ _ _P_r_o_d_u_k_t_n_a_v_n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
          RC855    Skærmterminal 
           
          TF663S   RC855 Modemkabel, kort (5 m) 
          TF663M   RC855 Modemkabel, medium (12 m) 
          TF663L   RC855 Modemkabel, langt (25 m) 
           
          TF664    RC-CIRCUIT, vægstik med underlag for flademontering 
          TF665    RC-CIRCUIT, vægstik med underlag for forsænket mon-
                   tering 
          TF656    RC-CIRCUIT, vægstik, separat enhed 
          TF661    RC-CIRCUIT, forbindelseskabel til terminal (5 m) 
           
          RC862    Matrix printer, 120 tegn/s, 80 tegnpos. 
          RC867    Matrix printer, 120 tegn/s, 136 tegnpos. 
                   RC868    Typehjulsprinter, 55 tegn/s, 132-198 tegnpos. 
           
          RC762    Diskettestation, 8" disketter 
           
           
3_._2_ _ _ _ _ _ _ _D_i_m_e_n_s_i_o_n_e_r_ 3.2
           
          R_C_ _N_r_._ _ _ _ _ _H_ø_j_d_e_ _(_c_m_)_ _ _ _B_r_e_d_d_e_ _(_c_m_)_ _ _ _D_y_b_d_e_ _(_c_m_)_ _ _ _V_æ_g_t_ _(_k_g_)_ _N_o_t_e_
          RC855, 
          - terminal 39-49        47            33           30          1)
          - tastatur  8,5         44            25            4 
           
          RC862      13,3         36,1          32,8          8,9 
          RC867      13,3         51.2          32,8         14 
          RC868      17,2         61,7          42,6         13,5 
           
          RC762      14           29            46           13,5 
           
          1) Højden kan justeres; dybde afhænger af vipning af monitor. 
           
               \f

         3_._3_ _ _ _ _ _ _ _M_i_l_j_ø_ 3.3
           
          RC      Omgivelses-   Relativ          Varme-          El- 
          Nr.     temperatur    luftfugtighed*)  afgivelse       forbrug 
           _ _ _ _ _ _ _ _ _ _(__C_)_ _ _ _ _ _ _ _ _ _ _ _(_%_)_ _ _ _ _ _ _ _ _ _ _ _ _(_k_J_/_t_)_ _ _ _ _ _ _ _ _ _ _(_W_)_ _ _ _ _ _ _
          RC855    10-35          40-80            288             80 
           
          RC862     5-40          20-90            432            120 
          RC867     5-40          20-90            432            120 
          RC868    10-40          10-90            540            150 
           
          RC762    10-35          20-80            300             83 
           
          *) Ikke-kondenserende. 
           
           \f

F_       4_._ _ _ _ _ _ _ _ _I_N_S_T_A_L_L_E_R_I_N_G_ 4.
           
4_._1_ _ _ _ _ _ _ _R_C_8_5_5_ _S_k_æ_r_m_t_e_r_m_i_n_a_l_ 4.1
           
          Installationen udføres ved hjælp af kabelforbindelser på skærm-
          terminalens bagpanel. 
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
          Figur 1: Bagpanel. 
           
          1) KEYBOARD (tastaturtilslutning) 
          2) RESET (kontakt) 
          3) CIRCUIT (klyngetilslutning) 
          4) LINE II (printertilslutning) 
          5) LINE I (tilslutning til værtsdatamat) 
          6) Tilslutning af diskettestation 
          7) Netledning og sikringsholder 
          8) Afbryderkontakt 
           
          Nedenfor følger en beskrivelse af kabelforbindelserne under hen-
          visning til numrene på fig. 1. Hvor det er relevant anføres både
          RC's ordrenr. og partnr., sidstnævnte for lettere at kunne iden-
          tificere kablerne. 
           \f

                   På RC855 skærmterminalen er den traditionelle måde med indstil-
          ling af forskellige funktioner ved hjælp af kontakter afløst af
          en programstyret inddatering af konfigurationsparametre. Disse
          parametre inddateres i henhold til de funktionskrav, der ønskes i
          det efterfølgende betjeningsforløb, og det sker som led i start-
          forløbet. Jævnfør de aktuelle vejledninger til programmellet for
          nærmere oplysninger om konfigurationsparametrene. 
               
               
4_._1_._1_ _ _ _ _ _K_a_b_e_l_f_o_r_b_i_n_d_e_l_s_e_r_ 4.1.1
           
          T_a_s_t_a_t_u_r_                      Anvendelse : altid 
                                        Levering   : sammen med tastaturet 
                                        RC ordrenr.: - 
                                        RC partnr. : - 
                                        Kabellængde: 1,5 m 
                                         
          C_I_R_C_U_I_T_                       Anvendelse : i klyngekonfiguratio-
                                                     ner; kablet fører til
                                                     RC-CIRCUIT's vægstik
                                                     (jf. 4.2) 
                                        Levering   : bestilles separat 
                                        RC ordrenr.: TF661 
                                        RC partnr. : CBL926 
                                        Kabellængde: 5 m 
                                                      
          P_r_i_n_t_e_r_                       Anvendelse : ved benyttelse af
                                                     printer 
                                        Levering   : sammen med printer 
                                        RC ordrenr.: - 
                                        RC partnr. : RC862: CBL909 
                                                     RC867: CBL909 
                                                     RC868: CBL977 
                                        Kabellængde: normalt 5 m 
                                            Bemærk : separat stikkontakt
                                                     til printer 
                                                      \f

                   V_æ_r_t_s_d_a_t_a_m_a_t_                  Anvendelse : til kommunikation med
                                                     værtsdatamat 
                                        Levering   : bestilles separat 
                                        RC ordrenr.: TF663S/M/L 
                                        RC partnr. : CBL585/604/605 
                                        Kabellængde: 5/12/25 m 
                                             Bemærk: separat stikkontakt
                                                     til modem skal udgå
                                                     fra samme strømfor-
                                                          delingstavle som
                                                          stikkontakten til
                                                     skærmterminalen. 
                                                      
                                                     Modemudstyret kan
                                                     give anledning til
                                                     yderligere krav. 
                                                      
          D_i_s_k_e_t_t_e_s_t_a_t_i_o_n_               Anvendelse : ved benyttelse af
                                                     diskettestation
                                        Levering   : sammen med diskette-
                                                     station 
                                        RC ordrenr.: - 
                                        RC partnr. : - 
                                        Kabellængde: mellem skærmterminal
                                                     og diskettestation:
                                                     1 m; mellem diskette-
                                                     stationer: 1 m 
                                             Bemærk: ved sammenkædning af 
                                                     to diskettestationer  
                                                     er station "2" forbun-
                                                     det med skærmtermina- 
                                                     len og station "1" med
                                                     station "2". 
           
                                                     Separat stikkontakt
                                                     til hver diskettesta-
                                                     tion. 
                                                      \f

                   N_e_t_l_e_d_n_i_n_g_                    Anvendelse : altid 
                                        Levering   : sammen med skærmter-
                                                     minalen 
                                        RC ordrenr.: stik svarende til
                                                     standard i de enkelte
                                                     lande specificeres
                                                     indirekte ved angi-
                                                     velse af det ønskede
                                                     nationale tegnsæt. 
                                        RC partnr. : DANSK/NORSK: CBL440 
                                                     DANSK OFFS: CBL440 
                                                     SVENSK: CBL973 
                                                     TYSK: CBL973 
                                                     US-ASCII: CBL973 
                                                     UK-ASCII: CBL927 
                                        Kabellængde: normalt 2,5 m 
                                             Bemærk: CBL440 har dansk stik
                                                     CBL973 har Schuko
                                                     stik; 
                                                     CBL927 har intet stik
                                                     og er kun 2 m langt. 
                                                      
                                                      
4_._2_ _ _ _ _ _ _ _R_C_-_C_I_R_C_U_I_T_ 4.2
           
          RC-CIRCUIT installationen består af et par-snoet kabel, der føres
          gennem vægstik. Indtil 8 tilslutningssteder kan oprettes med et
          kabel; den totale kabellængde må højst være 1500 meter. 
           
           
           
           
           
           
           
           
           
           \f

                   Kabel:                        1x2x0,6 (f.eks. P. Axt type G51) 
          Kabellængde:                  maks. 1500 meter 
                   Vægboks/vægstik, sæt, 
          - til flademontering:         TF664 
          - til forsænket montering:    TF665 
          Vægstik, separat enhed:       TF656 
           
          Vægstik fås med underlag for flademontering (RC ordrenr. TF664),
          eller med underlag for forsænket montering (RC ordrenr. TF665).
          Vægboksene kan evt. anskaffes lokalt fra andre leverandører (fla-
          demontering: LK-NES type 102H1030; forsænket montering: LK-NES
          type 102H1041) i så fald kan vægstikkene leveres som separate
          enheder (RC ordrenr.: TF656). 
           
          Normalt sørger kunden for installering af RC-CIRCUIT kablet in-
          klusive de tomme vægbokse. Installering af vægstik bestilles nor-
          malt hos RC (beregnes særskilt). 
           
          Bemærk: Når vægstikkene installeres, skal modstanden (betegnet
                  120E) på bagsiden fjernes fra vægstikket. D_o_g_ _m_e_d_ _u_n_d_-
                  t_a_g_e_l_s_e_ _a_f_ de to vægstik som udgør de to yderpositioner i
                  RC-CIRCUIT installationen. 
               
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           \f

         4_._3_ _ _ _ _ _ _ _P_r_i_n_t_e_r_    4.3
           
          Som ekstraudstyr tilbydes en række forskellige printere. Afhæn-
          gigt af printertypen kan det være nødvendigt at indstille interne
          kontakter i printeren i overensstemmelse med driftsbetingelserne
          (bestemt af terminalsystemet og arbejdsopgaverne). Disse forhold
          er beskrevet i den dokumentation, der følger med printeren. 
           
           
         4_._3_._1_ _ _ _ _ _R_C_8_6_2_/_8_6_7_ _p_r_i_n_t_e_r_e_    4.3.1
           
          RC862/867 printerne leveres som standard med et universelt tegn-
          sæt, der omfatter alle de nationale varianter. Den nationale va-
          riant, der skal benyttes, vælges ved indstilling af nogle kontak-
          ter. Kontakterne er placeret under printerens dæksel, til højre
          på betjeningspanelet (jf. dokumentation for printer). 
           
           
           
           
           
           
           
           
           
          De nationale varianter vælges ved indstilling af kontakterne som
          følger: 
           _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
               kontakt   
          v_a_r_i_a_n_t_ _ _ _ _ _ _ _ _1_ _ _ _ _ _ _ _2_ _ _ _ _ _ _ _3_ _ _ _ _ _ _4_ _ _ _ _ _ _5_ _ _ _ _ _ _6_ _ _ _ _ _ _7_ _ _ _ _ _ _8_ _ _ _ _
          D_A_N_S_K_/_N_O_R_S_K_ _ _ _O_F_F_ _ _ _ _ _O_N_ _ _ _ _ _ _O_N_ _ _ 
          D_A_N_S_K_ _O_F_F_S_ _ _ _ _O_N_ _ _ _ _ _ _O_N_ _ _ _ _ _ _O_N_ _ _             må ikke ændres, 
          S_V_E_N_S_K_ _ _ _ _ _ _ _ _O_F_F_ _ _ _ _ _O_F_F_ _ _ _ _ _O_N_ _ _             altid: 
          T_Y_S_K_ _ _ _ _ _ _ _ _ _ _O_N_ _ _ _ _ _ _O_N_ _ _ _ _ _ _O_F_F_ _   OFF     ON    OFF     ON     ON
            US-ASCII/ 
          F_R_A_N_S_K_ _ _ _ _ _ _ _ _O_F_F_ _ _ _ _ _O_F_F_ _ _ _ _ _O_N_ _ _ 
          U_K_-_A_S_C_I_I_ _ _ _ _ _ _O_F_F_ _ _ _ _ _O_N_ _ _ _ _ _ _O_F_F_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
           \f

F_       A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_R_ A.
           
          1  RCSL Nr. 42-i2048: 
               Susanne Berland, juni 1982 
               R_C_8_5_5_ _K_o_n_f_i_g_u_r_a_t_i_o_n_s_v_e_j_l_e_d_n_i_n_g_ 
               R_e_s_u_m__: Denne manual beskriver de grundlæggende
                        konfigurationsmuligheder for RC855 terminalsystemet. 
            
          2  RCSL No 42-i1621: 
               R_C_ _C_o_m_p_u_t_e_r_ _E_q_u_i_p_m_e_n_t_,_ _I_n_s_t_a_l_l_a_t_i_o_n_ _P_l_a_n_n_i_n_g_ 
               Jørgen Rosendahl, Henning Christensen, February 1981 
               A_b_s_t_r_a_c_t_: It is the concern of this publication to provide  
               information on the installation planning of RC computer  
               equipment. Only hardware installation is covered. General  
               information is given with respect to computer room, environ-
               ment, power supply, precautional arrangements and the con- 
               nection patterns of the equipment. 
           \f

F_                  
           \f

«eof»