• Aucun résultat trouvé

55 END

Références

(1) Stoy, J.E.; Strachey,

c.

OS6 - An experimental operating system for a small computer.

Part 1 : general principles and structure.

In : The Computer Journal, 15 (1972) 3, pp. 117-124.

(2) Stoy, J.E.; Strachey,

c.

OS6 - An experimental operating system for a small computer.

Part 2 : input/output and filing system.

In : The Computer Journal, 15 (1972) 3, pp. 195-203.

(3) Brinch Hansen, P.

The Solo operating system.

A concurrent Pascal program.

In : Software-Practice and Experience, 6 (1976), pp. 141-149.

(4) Brinch Hansen, P.

Disk scheduling at compile time.

In : Software-Practice and Experience, 6 (1976), pp. 201-205.

(5) Brinch Hansen, P.

The Solo operating system.

Job interface.

In : Software-Practice and Experience, 6 (1976), pp. 151-164.

(6) Brinch Hansen, P.

The Solo operating system.

Processes, monitors and classes.

In : Software-Practice and Experience, 6 (1976), pp. 165-200.

(7) Lampson, B.W.

An open operating system for a single-user machine.

In : Operating Systems

(Lecture notes in computer science, 16.) Berlin, Springer-Verlag, 1974, pp. 208-217.

Chapitre 10 Le compilateur, l'interpréteur Pascal-S et l'éditeur l'exception du goto. Les entrées-sorties standards sont disponibles ainsi que les principales fonctions prédéfinies. Le traitement de caractères est supporté, mais les packed array ne sont malheureusement pas disponibles.

Les principales restrictions de Pascal-S sont l'absence des structures d'ensembles, des fichiers et des pointeurs ainsi que l'impossibilité de définir de nouveaux types scalaires.

Nous avons

Le compilateur-interpréteur Pascal-S, développé par Wirth (1) sur CDC 6000 est un unique programme écrit en Pascal standard. Nous connaissions bien ce programme puisque nous avions développé une version semblable en V-Algol sur notre Univac 1108 (2). Le compilateur et l'interpréteur fonctionnant sous

s.o.s.

ont été séparés en 2 programmes distincts; le code produit par le compilateur est écrit sur un fichier-disque; l'interpréteur lit ce fichier et exécute les instructions. Ce découpage a été rendu nécessaire, vu les restrictions de mémoire généralement imposées sur les mini-ordinateurs par rapport aux gros systèmes.

10.2 Le compilateur Pascal-S pseudo-instruction sequence :

sequence(intcon,charcon,string,notsy,plussy,rninus,timessy,idiv, irnod,andsy,orsy,equ,neq,gtr,geq,lss,leq,lparent,rparent, lbrack,rbrack,comma,semicolon,period,colon,becomes, constsy,typesy,varsy,functionsy,proceduresy,arraysy, recordsy,programsy,ident,beginsy,ifsy,casesy,repeatsy, whilesy,forsy,endsy,elsesy,untilsy,ofsy,dosy,tosy, downtosy,thensy).

L'analyseur lexical est défini comme un module, son écriture a été facilitée par les instructions de test des caractères; par exemple, la reconnaissance d'un nombre est effectuée ainsi :

if-begin(ch,eq,digit)

clear(w8) clear(inum) move(intcon,sy) repeat-begin

move-byte(right,ch,wS) arithmetic(w5,and,17R,w5) arithmetic(inurn,*,l0,w6) arithmetic(w5,+,w6,inum) increment(w8) need(nextch)

repeat-end(ch,ne,digit)

if-begin(w8,gt,kmax) need(error,21) if-end

otherwise

On a gardé volontairement dans la mesure du possible les noms employés dans le compilateur original; nous avons donc utilisé les possibilités de la pseudo-instruction name tout au long de ce

compilateur.

-~-p.e. name(ch,bl) name(sy,wl7) name(inum,wl8) name(kmax,6) name(nextch,m2) name(error,m3)

La méthode d'analyse syntaxique est la descente récursive que nous avons déjà présentée au paragraphe 4.2.2.1.

A titre d'exemple, nous donnons le listage du module d'analyse de l'instruction while •• do.

DEFINE-BEGINlWHILE-STATEMENT,RECURSIVEl LOC<w1,w2,w3,W4)

NEED<INSYM~OL> MOVE<LC,W3) NEED(EXPRESSlON1W1,W2) CASE-BEGlN(W1)

Of(INTS,CHARS) NEED<ERROR,17>

OTHER-CASE CASE-END

PIOVE(LC1W4) NEEDCEMIT,JPC,O,O>

IF-BEGINCSY,EQ,OOSY) NEEDCINSYMBOLl OTHERWISE NEED<ERROR,54) If-END

NEED ( S TA TE.MENT)

NEED(EMIT1JMP1W3,0> MOVE(LC1W5) MOVE(W41LC) NEED(EMIT,JPc,o,ws>

PIOVE <LC ,wS>

DHINE-END

On remarque dans ce listage l'utilisation case-begin pour suppléer à l'absence de structure connecteurs logiques (voir paragraphe 3.2.3).

case-begin(wl)

of(ints,chars) need(error,17) other-case

case-end

de l'instruction d'ensembles et de

La génération de code est effectuée sur l'unité logique f2 par le module m7, nommé emit.

Le code produit est le langage-machine d'un ordinateur hypothétique fonctionnant sur le principe d'une pile, nous le décrirons dans le paragraphe suivant.

10.3 L'interpréteur Pascal-S

Il se présente connne un programme sans modules, il correspond à la description des interpréteurs telle que nous l'avons présentée au paragraphe 8.1.1.

10.3.l L'ordinateur hypothétique

L'ordinateur hypothétique a les caractéristiques suivantes i) l compteur d'instructions

ii) l registre de status de progrannne iii) l pile

iv) l display

name(pc,w9)

name(p-status,w8)

name(stack,tl4)

name(stack-size,1500) declare(tl4,words)

dimension(tl4,stack-size, stack-access) name(display,tl)

name(lev-max,7) declare(tl,words) dimension(tl,lev-max)

Les instructions traitées ont la forme suivante code-instruction champ-x champ-y

définies comme :

name(instruction-field,wl4) name(x-field,wl5) name(y-field,wl6)

On peut donc considérer les registres wl4, wl5 et wl6 comme le registre d'instruction de l'ordinateur hypothétique.

Les codes d'instruction sont définis comme dans le compilateur par sequence(lda,ldv,ldi,upd,fcn,ofs,jmp,jpc,cas,edc,ful,fu2.fdl,

fd2,mark,call,inxl,inx,ldb,cpb,lit,read,wrs,wrt.wrf, endp;exitp.exitf,rng,com,neg,sta,eql,nel,ltl,lel,gtl, gel,orb,add,sub,andb,mul,div,mod,rln,wrl)

de plus, les codes de fonctions suivants sont aussi définis sequence(abs,sqr,odd,ord,succ,pred,ieof)

10. 3. 2 Exemples d'instructions

Nous utilisons dans cet interpréteur une macro qui teste si la pile n'est pas pleine :

macro(if-not-stack-overflow)

if-begin(length stack,ge,stack-size) move(stack-full,p-status) $

i) lda : chargement d'une adresse

if-not-stack-overflow oper(out,display,x-field,w5) arithmetic(w5,+,y-field,stack) if-end

ii) jmp : saut à une adresse move(y-field,pc)

iii) jpc : saut conditionnel move(stack,w5)

if-begin(wS,eq,O) move(y-field,pc) if-end

iv) read : lecture d'un entier (1) ou d'un caractère (2) if-begin(eof,input,on) move(read-eof,p-status)

otherwise

case-begin(y-field)

of(l) move(input,w5,decimal,space,echo) of(2) move(input,bl,echo) compose("O,hl,w5) case-end

oper(out,stack,length stack,wfi) oper(into,stack,w6,w5)

if-end

D'autres instructions seront présentées au paragraphe suivant.

10.3.3 La structure de l'interpréteur

Il se présente conune une grande boucle sur les instructions lues et un aiguillage en fonction du code de l'instruction.

move(run,p-status)

repeat-begin

oper(out,code,pc,instruction-field) oper(out,x-code,pc,x-field)

oper(out,y-code,pc,y-field) increment(pc)

case-begin(instruction-field)

of(fcn) << fonctions standards >>

case-begin(y-field)

of(abs) if-begin(stack,lt,O) negate(stack) if-end

of(sqr) move(stack,wS)

arithmetic(wS,*,wS,stack) of(odd) arithmetic(stack,modulo,2,stack) of(succ) increment(stack)

of(pred) decrement(stack)

• • case-end

of(endp) move(fin,p-status)

of(com) arithmetic(l,-,stack,stack) of(neg) negate(stack)

of(add) arithmetic(stack,+,stack,stack)

case-end

repeat-end(p-status,ne,run) if-begin(p-status,ne,fin)

move(' HALT AT',output) move(pc,octal,output) move('BECAUSE OF',output)

case-begin(p-status)

of(stack-full) move('STACK FULL',output)

of(read-eof) move('TRY TO PAST END-OF-FILE',output)

case-end if-end

On remarquera ici l'avantage des instructions de traitement de pile.

Par exemple, l'instruction arithmetic(stack,+,stack,stack) effectue la réduction suivante.

~+~

10.4 L'éditeur de texte

Un éditeur de texte est un programme dont le hut est de faciliter la création, la suppression et la modification des parties d'un texte.

C'est en général un programme interactif; un certain nombre de commandes sont à la disposition de l'utilisateur; la réalisation peut varier d'un éditeur à l'autre (3,4), mais elle repose presque toujours sur la notion implicite ou explicite de pointeurs (5).

10.4.1 L'éditeur de S.O.S.

Le texte du fichier est lu et placé dans la chaîne cl. La chaîne c2 est utilisée pour s~ocker les caractères d'entrée des cotlll'landes L (Locate) et C (Change); pour la commande Con se s~rt également de la chaîne c1. -Nous donnons ci-dessous un extrait de l'éditeur traitant les commandes N (No corrections), T (Top), E (End), P (!_rint), A (!dvance), D (~elete) et I (.!,nsert). -

-while-begin(eof,fl,off) move(fl,cl) adv(cl,bl) while-end

move(ctrl 'F' ,cl) <<fin de chaîne>> top(cl,bl) repeat-begin move(' !',output)

move(input,b3,echo) case-begin(b3)

of ( ' N ' ) move ( ' E ' , b 3) of('T') top(cl,bl) of('E') top(cl,bl)

if-begin(w2,eq,300) <<le fichier .n'existe pas>>

request('CREATE',f2,'A',read-write) if-end

while-begin(bl,ne,ctrl 'F') adv(cl,bl) move(bl,f2) while-end

if-begin(w2,eq,300) close-file(f2) if-end

of('P','A','D') move(input,wl,decimal,cr,echo) if-begin(b3,eq,'P') move(new-line,output) if-end

loop-begin(w4,l,wl,l,up) case-begin(b3)

of ('A') adv(cl,bl)

of('P') adv(cl,hl) move(bl,output) of('D') move(cl,b2)

case-end

if-begin(bl,eq,ctrl,'F') move(' END OF FILE', output) top(cl,bl) exit(l)

if-end loop-end

of('I') move(input,b2,echo)

while-begin(b2,ne,'?') move(b2,cl) adv(cl,bl) move(input,b2,echo)

while-end of('L','C') ••••

other-case move('i.GILLEGAL COMMA.ND ',output) case-end

repeat-end(b3,eq,'E')

• •

adv et top sont définis comme les macros macro(adv) oper(advance,t2,tl) $ macro( top) oper(reset, t2, tl) $

Références

(1) Wirth, N.

Pascal-S : a subset and its implementation.

ZÜrich, ETH, 1975. Berichte des Instituts fÜr Informatik.

No. 12.

(2) Thalmann, D.

Compilateur-Interpréteur Pascal-S, bibliothèque de programmes Univac 1108.

In : Courrier Uni Informatique, Université de Genève, 7 (1976).

(3) Bourne, S.R.

A design for a text editor.

In : Software-Practice and Experience, 1 (1971), pp. 73-81.

(4) Wenger, M.

Un éditeur de texte avancé pour terminal graphique et miniordinateur.

Genève, faculté des sciences, 1975, thèse 1712.

(5) Naur, P.

Concise Survey of computer methods.

Kobenhavn, Studentlitteratur Lund, 1974.

Chapitre 11 Réalisations et perspectives

11.1 Les caractéristiques du système réalisé

Nous voulons tout d'abord insister sur les deux volets du travail réalisé.

1. Un ensemble de programmes PASCAL constitue le système SPIP qui permet l'écriture de systèmes d'exploitation, de compilateurs ou de programmes en temps réel pour des mini-ordinateurs; il donne également la possibilité à l'utilisateur de simuler l'exécution de programmes sur ces mini-ordinateurs.

2. Un petit système d'exploitation, comprenant un compilateur et un interpréteur PASCAL-S, a été écrit en langage SPIP. Le système a été baptisé S.O.S. (SPIP OPERATING SYSTEM).

L'essentiel des efforts a évidemment porté sur SPIP, S.O.S. n'étant qu'une illustration modeste des possibilités de SPIP.

11.1.1 Les caractéristiques de SPIP

Le système a été écrit en langage Pascal standard (l); une procédure est en assembleur Univac (2) et le traitement des fichiers utilisés est lié au système

o.s.

1100 (3); on trouvera, dans l'annexe A, une description plus complète de ces quelques particularités.

Nous donnons ci-dessous un tableau des programmes PASCAL constituant SPIP, ainsi que leurs caractéristiques.

Programme Fonction Nombre Nombre Taille mémoire Temps de de pro- (en K mots) d'écriture lignes cédures progr. pile (pour 1

personne) SPIP-1.X compilateur 3300 63 38 16 3 mois

(première phase)

SPIP$NOVA.X générateur 5500 190 38 9 5 mois de code

relogeable Nova

SPIP$PDP-ll.X générateur 5200 187 38 9 ?. mois de code

relogeable PDP-11

SPIP$LINK.X éditeur de 750 15 26 16 3 semaines liens

'

le temps d'écriture de SPIP$PDP-ll.SIMULE fut considérablement raccourci.

- Le macroprocesseur compris dans SPIP-1.X représente environ 250 lignes de PASCAL.

11.1.2 Les caractéristiques de

s.o.s.

Le système a été complètement écrit en langage SPIP; voici les principales caractéristiques des programmes développés.

Programme

PATCH 52 1/2 heure Il

DUMP 70 1/2 heure Il

FILES 70 1/2 heure Il

EDITOR 120 2 heures Chap. 9 et 10

FORMAT 40 1 heure Ann.A et chap.9

PASCAL-S 1800 3 semaines chap. 10

INTERPRET 450 3 jours Il

DISC-PREP 59 1/2 heure Annexe A

BOOT 18 5 minutes Il

PROGLD 4 1 minute Il

Remarques

- Le compilateur et l'interpréteur PASCAL-Sont été traduits à partir du listage de N. Wirth (4).

- Le moniteur comprend 65 requêtes, elles sont toutes résidentes;

l'occupation mémoire est d'environ 4K, aussi bien pour la Nova que pour la PDP-11.

11.1.3 Le travail réalisé

Les temps d'écriture donnés dans les deux paragraphes précédents sont approximatifs. Ils sont évalués à temps complet et comprennent un certain nombre de tests. Globalement, on peut considérer que SPIP et S.O.S. ont été développés en une année à temps complet. Tous les progranunes sont originaux, seuls le compilateur et l'interpréteur Pascal-S sont fortement inspirés de Wirth. Compte tenu des parties communes entre les générateurs NOVA et PDP-11, nous pouvons affirmer avoir écrit environ 19000 lignes de code-source dont plus de 14000 en PASCAL. Il est intéressant de noter la rapidité avec laquelle S.O.S. a pu être développé, prouvant ainsi les avantages du langage SPIP.

11.2 L'avenir de SPIP

Quelles sont les perspectives ouvertes par SPIP ? Dans quelles directions peut-il évoluer ?

Il est évident que le système S.O.S. pourrait être facilement étendu, le langage PASCAL-S pourrait être développé; en particulier, l'écriture d'un cinterpréteur pour le traitement des nombres réels devrait être envisagée.

Les possibilités de traitement d'interruptions devraient permettre l'écriture de programmes de communications entre machines ou de

gestion de terminaux; enfin, l'écriture de drivers, pour des périphériques tels que lecteur de cartes, imprimante ou lecteur de cassettes sont facilement réalisables.

Pourtant, nous pensons que pas encore dans le domaine de SPIP lui-même.

les développements à envisager ne sont des applications, mais dans l'extension

Nous allons dans les prochains paragraphes faire un tour d'horizon des extensions possibles.

11.~.l L'extension à d'autres mini-ordinateurs

Etendre SPIP à d'autres mini-ordinateurs est une tâche aisée, mini-ordinateur ne devrait pas poser de grandes difficultés.

Il est certain que de nouveaux résumer en 3 classes

d'allocations des registres, interruptions.

Regardons très hrièvement les caractéristiques de quelques mini-ordinateurs. - Un système d'interruptions prioritaires n'existe qu'en option.

ii) Iloneywell Ilull fi/34 et 6/36 (6)

- L'adressase immédiat, les adressages autoincrémentant et autodécrémentant sont développés. Il est possible de manipuler les mots, les bytes et les bits.

18 resistres sont disponibles.

Les informations vitales sont sauvées

automatiquement en cas d'interruption. et restaurées

iii) NORD-10 (7)

- Les modes d'adressage sont particulièrement développés. L'accès aux bits d'un mot et aux bytes sont prévus.

La Nord-10 a un système d'interruptions prioritaires avec 16 niveaux de programme chacun ayant ses propres registres.

Certains niveaux peuvent être activés par progranune, d'autres par des périphériques. Le compteur d'instructions peut être manipulé par programme.

iv) Mitra-15 (8)

- L'adressage est un adressage-byte.

Les ruptures de séquence ne peuvent pas se faire à plus de 512

On pourrait encore étudier de nombreux mini-ordinateurs : Hewlett Packard 2100, Varian, Interdata, Télémécanique et autres (9,10). répéter que l'extension de SPIP à d'autres mini-ordinateurs implique la portabilité totale de S.O.S. et de Pascal-S.

11.2.2 L'extension à de plus grosses machines

Si nous pensons que les systèmes d'exploitation des grosses machines manquent souvent de cohérence et devraient être restructurés dans des langages de haut niveau, nous ne jugeons pas SPIP adapté à de tels systèmes.

11.2.3 L'extension à des micro-ordinateurs

La frontière entre les mini-ordinateurs et les micro-ordinateurs est très floue. Le jeu d'instructions du microprocesseur Texas Instruments TMS 9900 (11) est beaucoup plus riche que celui d'une Nova 1200. Nous définirons donc un micro-ordinateur non pas en termes de puissance mais .connne un ordinateur construit autour d'un microprocesseur, lui-même un ensemble de circuits intégrés de très grande complexité qui réalisent les fonctions d'unité centrale.

L'évolution très rapide des microprocesseurs et leur faible coût ont conduit à une invasion sur le marché qui n'est pas prête de s'arrêter; les microprocesseurs servent déjà à la régulation de la circulation, à la commande de machines-outils, à la réalisation de terminaux "intelligents", à la surveillance médicale, etc. (12).

Hélas, comme souvent, si la technologie s'est développée extrêmement rapidement, le logiciel n'a pas suivi. La programmation des microprocesseurs se fait en langage-machine ou en assembleur assurant ainsi une programmation non fiable et pénible et une une extension dans cette direction.

Et qui sait, peut-être un jour, fabriquera-t-on un microprocesseur identique à la machine- À, en tout cas, nous pouvons affirmer que le THS 9900 avec ses 16 registres et ses instructions d'accès aux bits est plus proche de la machine-À qu'une Nova 1200.

11.2.4 L'extension aux processus parallèles

Nous avons déja expliqué dans le chapitre 3 que nous étions conscients que le traitement d'interruption n'était pas un concept de langage de haut niveau; néanmoins nous l'avons introduit au niveau tondamental; nous aimerions proposer une extension de SPIP au niveau secondaire, permettant l'introduction explicite de processus parallèles. partageables par plusieurs processus.

Enfin, nous pensons que ces processus parallèles devraient même pouvoir s'exécuter par des processeurs différents (microprocesseurs) sans changer la structure et la forme des programmes, mais uniquement en utilisant des déclarations du type :

declare(pl,process,microl) declare(p2,process,micro2)

11.2.5 L'extension à des procédures de communications entre ordinateurs

L'implantation de réseaux d'ordinateurs est aujourd'hui une réalité à considérer (13). Une des principales difficultés de réalisation réside dans le fait qu'il est nécessaire d'écrire des programmes de communication propres à chaque type de machine.

Aussi, est-il impossible dans un réseau de changer un ordinateur d'un certain modèle contre un ordinateur d'un autre modèle.

Nous proposons l'écriture des progrannnes de cornmunication de chaque machine dans un langage commun; il est évident que nos propos ne concernent que les mini-ordinateurs et les micro-ordinateurs; pour de plus grosses machines, ceci équivaudrait à réécrire leur système d'exploitation

!

En étendant SPIP, à l'accès à des interfaces modem, nous pensons qu'il est possible d'écrire, dans l'état actuel, des programmes de communications entre deux Nova, entre deux PDP-11 ou entre une Nova et une PDP-11. Le logiciel de base serait rigoureusement le même.

Nous ne devons plus parler en tennes de communications entre machines réelles, mais en termes de communications entre machine-À.

Références

Assembler (Fieldata), Programmer Reference.

U.S.A., Sperry Rand Co, 1974, UP-4040.

Ordinateur universel H316 et nDP516.

Compagnie Honeywell Bull, 1971, 61.20.001 F.

(6) Honeywell Bull.

Series 60 (level 6).

Waltham, Mass., Honeywell Information Systems, 1975.

(7) A/S Nordsk Data-Elektronikk.

Nord 10 Reference Manual

Oslo, A/S Nordsk nata-Elektronik, 1974, Nn-06-001-01.

(8) Compagnie Internationale pour !'Informatique.

Mitra 15, manuel de présentation software.

eu,

1972.

(9) Kenney, n.P.

Minicomputers, low-cost computer power for management.

New York, Amacom, 1973.

(10) Weitzman,

c.

Minicomputer Systems, structure, implementation and application.

Englewood Cliffs, N.J., Prentice-Hall, 1974.

(11) Texas Instrument Incorporated.

TMS 9900, Microprocessor Data Manual.

Texas Instrument Incorporated, 1975.

(12) Lilen, H.

Du microprocesseur au micro-ordinateur. 2 éd.

Paris, Ed. Radio, 1976.

(13) Cartillier, D.

Conception et réalisation d'un réseau d'ordinateurs.

Genève, Faculté des sciences, 1976, thèse 1752.

Le système SPIP fonctionne sur Univac 1108 sous le système d'exploitation O.S. 1100 (1).

Le langage Pascal utilisé est celui défini par K. Jensen et N. Wirth dans "Pascal User Manual and Report" (2).

Trois procédures non standards disponibles sur notre système ont été utilisées :

1. procedure date (var datetime:alfa);

qui fournit la date et l'heure courante.

2. function cptime (i:integer):integer;

qui fournit le temps (SUP) écoulé depuis le début du RUN en millisecondes.

3. procedure csf (~ c:string; nbb:integer; ok:boolean);

qui soumet au moniteur exécutif (EXEC-8) la connnande c contenue dans la chaîne de caractères.

Nous avons écrit une procédure en langage d'assemblage procedure process (var xopt,il,i2:integer)

qui fournit dans xopt les options de la commande processeur et dans il et i2 l'image fieldata du nom d'entrée.

La commande processeur est la suivante

@ P*SPIP .X, options nom

A : le code produit est absolu (option par défaut).

C : la production de code relogeable est poursuivie même en cas d'erreur interne.

E : l'impression des diagnostics d'erreurs à la compilation est effectuée.

G : le système SPIP est placé en mode privilégié. Les instructions du niveau fondamental sont autorisées.

I : un nouvel élément-source est créé à partir du flot d'entrée.

J : des statistiques sur le code-objet sont imprimées.

K : la liste des requêtes et des overlays de s.o.s. est fournie à l'utilisateur.

L : le code produit est listé en langage d'assemblage.

H : la table de chargement est imprimée.

N : le code est produit pour un mini-ordinateur Nova.

0 : le code produit est listé en octal.

P : le code est produit pour un mini-ordinateur PDP-11.

Q : l'expansion des macros est imprimée.

R : le code produit est relogeable (pas d'édition de liens).

S : le listage du code source est effectué.

V : seule l'analyse du code-source est opérée.

X : l'exécution du code-objet est simulée sur Univac 1108.

Z : le code-objet est envoyé automatiquement de l'Univac à la Nova via le réseau SORGUE.

Le nom spécifié dans la commande processeur constitue un élément du fichier os-1100 P*SPIP-o-s.

Si l'option· I est de l'élément créé title.

utilisée, aucun nom ne doit être spécifié, le nom sera celui figurant dans la pseudo-instruction Si le processeur est appelé sans nom et sans l'option I, le programme est traité, mais la version-source n'est pas conservée.

La procédure network (procédure de l'éditeur de liens SPIP$LINK) envoie au moniteur EXEC:-8 (1) les commandes nécessaires au transfert du code par le réseau SORGUE (3,4).

Nous donnons ici le listage de la procédure network.

procedure network; (*dépendant d'univac 1108*) var k,i,nb:integer; untit:array 1 •• 12 of char;

~- titlepoi'iit:alfa; ok:boolean;

begin

writeln('WARNING : OBJECT CODE WILL BE SENT TO THE NOVA');

csf('@ASG,T SPIPTRANS.',nbb,ok); rewrite(SPIPTRANS) for k:=l to 12 do untit k :=' ';

writeln(spiptrans,'@ASG,UP ',title);

writeln(spiptrans,'@FREE ',title);

writeln(spiptrans,'@ASG,A ',title);

unpack(title,untit,l); k:=O;

repeat k:=k+l until untit[k]=' '; untit[~:='.';

pack(untit,l,titlepoint);

(*conversion Fieldata-Ascii*)

writeln(spiptrans,'@ED,Q AFILE.'titlepoint) writeln(spiptrans,'@FREE ',title);

write(spiptrans,'@SYM ');for i:=l to k-1

~ wrTte(spiptrans,untit[i] );

writeln(spiptrans,',,RSGB02'); (*envoi à la Nova*) reset(spiptrans);

csf('@ADD,L SPIPTRANS •• ',nbb,ok)

~;

Le progranune SORGUE ne fonctionnant que sous le système GDOS (Geneva Disk Operating System), nous avons dû écrire, en assembleur Nova, un chargeur du code en provenance de l'Univac. Une fois le code en mémoire centrale, nous écrivons un fichier de type X sur un disque S.O.S. par le programme FORMAT dont nous donnons le listage.

SPIP-1.0 VéRSION OF 02/10/77 ~AV 16, 1977 AT 20:34:42

ABSOLUTE OBJECT CODE

rs

ASSUMED

REAL MACHINE IS ASSUMED DATA GENLRAL NOVA

$$$$$ PRIVILEGIED MODE $$$$$

1 TITLECFORMAT) 3 2 <<

4 5 6 7 8

S P I P

0 P E R A T I N G S Y S T E M

L A M B D A M A C H 1 N E F 0 R

~ --- TO WRITE A LOAD FILE FROM MEMORY

---11 1 0 >>

1 2 13 EXTRAll-PARAMCQ1)

14 l\TTACH CF1 ,a1 ,81 ,w1 ,W2)

15 lf-BEGINCW2,E0,300) REQUESTC'CREAîE',F1,'X',NO-READ-NO-WRITE)

16 OTHfRWISE

17 IF-BEGINC81,NE,'X') ABORT('FILE MUST BE OF X TYPE')

Documents relatifs