|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 176128 (0x2b000) Types: TextFile Names: »D154«
└─⟦ae2411776⟧ Bits:30008864 Diskette med tekster der formodes at være 31-D-152…161 └─⟦this⟧ »D154«
\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»