Un'implementazione su PDP-10
Sebbene quanto segue possa essere implementato sia come un insieme di routine utente sia incorporato nel monitor come UUO (la nostra prima implementazione sarà la prima delle due), per scopi descrittivi si userà la seconda versione. Le UUO sarebbero:
| UUO | Operandi | Descrizione |
|---|---|---|
| PUTF | CH, E | Inserisci flag |
| PUTD | CH, E | Inserisci dati |
| PUT | CH, E | Inserisci record |
| GETFD | CH, E | Preleva flag o dati |
| GET | CH, E | Preleva record |
In quanto sopra, "CH" è il numero di canale logico. La consueta UUO OPEN o INIT è usata per aprire il canale. Vengono assegnati buffer utente in formato standard. Tuttavia, il ring e le intestazioni dei buffer saranno usati in modo non standard, cosicché il modo dati 12 è assegnato per l'uso con il buffering della Network e il bit di stato file 31 deve essere attivo per l'input. (In questo modo si può usare uno qualsiasi dei dispositivi DSK, DTA, MTA o IMP.)
Nell'implementazione dell'NCP e del protocollo HOST-HOST di Harvard, i buffer utente non corrispondono direttamente ai messaggi. In uscita, ogni buffer utente sarà formattato in un messaggio; in ingresso, un messaggio può diventare uno o due caricamenti di buffer utente (si usano buffer di 128 parole per sfruttare al massimo le funzionalità delle routine di servizio del disco).
PUTF UUO
Questa UUO inserisce un flag nel buffer di uscita. L'indirizzo effettivo è la posizione di una parola:
XWD operation, count
Nel caso dei flag di blocco, il conteggio è ignorato, poiché sarà calcolato dal numero di byte effettivamente inseriti nel buffer prima del successivo uso di PUTF. PUTF e PUTD inseriranno automaticamente flag EOM man mano che ciascun buffer si riempie; se al momento dei byte di dati vengono inseriti nel buffer da PUTD, esso inserirà anche un flag EOM dopo aver calcolato il conteggio per il precedente flag di blocco nel buffer e collocherà un nuovo flag di blocco dello stesso tipo all'inizio del buffer successivo, dopo aver inserito un flag SIZE che dichiara la dimensione del byte allora corrente.
PUTD UUO
Questa UUO inserisce dati nel buffer di uscita. L'indirizzo effettivo è la posizione del byte di dati (se la dimensione del byte è inferiore a 36) o della successiva parola di 36 bit di dati da inserire nel buffer. Nel primo caso, si assume che il byte si trovi nella parte di ordine basso della parola indirizzata. Nel secondo caso, la parola di dati che contiene i bit finali del byte li contiene nella parte di ordine alto della parola, e il byte di dati successivo inizia una nuova parola nella memoria del PDP-10. Così, per una dimensione del byte di 64, si userebbero due accessi a PUTD per ogni byte trasmesso, il primo contenente 36 bit e il secondo contenente 28 bit, giustificati a sinistra. Questa strategia consente il massimo sfruttamento delle istruzioni di gestione dei byte del PDP-10.
PUT UUO
Questa UUO inserisce un intero record logico nel o nei buffer di uscita. L'indirizzo effettivo è quello di una parola:
IOWD count, location
Deve essere stata usata una UUO PUTF per emettere il flag SIZE appropriato. In seguito, ogni uso di PUT emetterà un flag BLOCK, [3] simulerà un certo numero di chiamate a PUTD usando l'IOWD per scoprire la posizione e la dimensione dell'area di dati utente, e poi emetterà un flag RS per indicare la fine del record.
Nel caso di una dimensione del byte inferiore a 36 bit, PUT userà l'istruzione ILDB per prelevare i byte da emettere tramite PUTD. Quindi si usa il formato standard di gestione dei byte del PDP-10, e la parte di conteggio dell'IOWD è il conteggio totale dei byte, non delle parole.
Le UUO di cui sopra hanno sia un ritorno di errore sia un ritorno normale.
GETFD UUO
La sequenza di chiamata per questa UUO è:
GETFD CH, E
error return
whyte flag return
block flag return
data return
L'indirizzo effettivo è la posizione in cui saranno restituiti il flag o i dati. Il flag è restituito nello stesso formato di PUTF e i dati nello stesso formato di PUTD. Certi flag (NUL, IGNORE ed EOM) saranno gestiti interamente all'interno della UUO e non saranno segnalati all'utente. SYS dovrebbe infine essere gestito in questo modo, ma inizialmente sarà gestito dall'utente.
GET UUO
La sequenza di chiamata per questa UUO è:
GET CH, E
error return
end of file return
end of group return
normal return
GET trasmette all'utente il successivo record logico, usando GETFD insieme a un IOWD nello stesso formato di PUT. Se il conteggio dell'IOWD si esaurisce prima della fine del record, il resto del record sarà saltato. In ogni caso, l'IOWD aggiornato sarà restituito all'indirizzo effettivo della UUO per informare l'utente di quanti dati sono stati trasmessi o saltati.