Valutazione attuale:  / 0
ScarsoOttimo 

Il 7070 IBM

L'hardware . . .

Questo computer fu uno dei primi mainframe della seconda generazione prodotta dalla IBM; anche le macchine della prima generazione erano macchine elettroniche, ma i loro componenti attivi erano i tubi termoionici; il 7070 era invece uno dei primi computer dotato di circuiti a stato solido; il suo hardware era realizzato con 40.000 transistors che, diversamente dalle apparecchiature odierne, si potevano toccare con mano uno per uno.

I transistors infatti, insieme ad altri componenti passivi, erano saldati su piccoli circuiti stampati realizzati su un supporto dielettrico e terminanti con una serie di contatti a pettine che consentiva il loro innesto in appositi connettori. Questi circuiti venivano chiamati schede e potevano essere facilmente sostituiti in caso di guasto.

I connettori erano sistemati sul cosiddetto backplane dalla cui parte posteriore affioravano i contatti sotto forma di piccoli terminali detti spadini; tutti i collegamenti tra questi terminali erano fatti con la tecnica del "wire-up" e cioè con sottili fili isolati di colore giallo che spellati alle estremità venivano avvolti con uno speciale attrezzo agli spadini e realizzavano i collegamenti; il numero di collegamenti era elevatissimo, tanto che la parte posteriore del backplane assomigliava ad una capigliatura gialla particolarmente ingarbugliata.

I tecnici di manutenzione della IBM, ricevevano di tanto in tanto una serie di modifiche da apportare alla logica della macchina e, con l'aiuto di appositi libroni che descrivevano la filatura, provvedevano a togliere e aggiungere nuovi collegamenti aggiornando l'elaboratore.

Tutti i circuiti erano racchiusi in grossi armadi di colore grigio e fasce blu; aprendo le porte si accedeva a più di un pannello che si aprivano a ventaglio per consentire l'accesso alle schede e alla filatura; tutto il computer doveva essere tenuto sempre in un ambiente condizionato ad una determinata temperatura (piuttosto fredda) e una determinata umidità.

Gli armadi erano posti su un pavimento flottante sotto il quale potevano passare i grossi cavi di collegamento (del diametro di circa 5 centimetri) necessari a far transitare i segnali tra le varie unità.

L'armadio dell'unità centrale era collegato a quelli dei due canali (unità contenenti la logica necessaria alla connessione con le unità a nastro magnetiche); completavano l'insieme le unità a nastro che molto coreograficamente mostravano le bobine in movimento, unica dimostrazione visiva dell'attività dell'apparecchiatura; anche queste unità erano contenute in appositi armadi; essi avevano però nella parte anteriore uno sportello di cristallo che ne faceva scorgere l'interno e che consentiva l'accesso agli operatori per il  montaggio e lo smontaggio delle diverse bobine; la nostra macchina aveva 12 unità a nastro suddivise sui due canali; poichè i canali erano indipendenti potevano lavorare contemporaneamente fino a due unità a nastro alla volta purchè collegate su canali diversi.

Completava il sistema una console, cioè una specie di telescrivente montata su una scrivania che avevamo fatto installare di fronte agli armadi e ai nastri; essa era il mezzo attraverso il quale l'operatore del sistema (normalmente uno di noi programmatori) gestiva l'intero computer.

La console disponeva anche di un piccolo lettore di schede nel quale venivano poste le poche schede necessarie per avviare un programma; a fianco a questa scrivania vi era una console di servizio costituita da un piccolo tavolo la cui superficie superiore si alzava mostrando una infinità di switches e di lucette (erano piccole lampadine a filamento in quanto i LED non esistevano ancora); questa console ulteriore era destinata ad indagini più approfondite dei tecnici di manutenzione o anche dei programmatori più smaliziati.

Dal punto di vista delle sue caratteristiche, ricordo che la nostra macchina aveva una memoria centrale (realizzata con nuclei di ferrite) di 5.000 word ognuna indirizzabile (il byte non  esisteva ancora). Ogni word poteva memorizzare un segno che poteva essere più, meno o alpha seguito da 10 cifre decimali  oppure da cinque caratteri alfanumerici; i segni più e meno erano utilizzati per scopi aritmetici, mentre il segno alpha stava ad indicare che il contenuto della word doveva essere interpretato come alfanumerico; in questo caso ogni lettera o carattere speciale era rappresentata, secondo un codice proprietario, da una coppia di cifre decimali.

Ogni carattere decimale memorizzato nella word era rappresentato da 5 bit e il codice utilizzato si chiamava "two of five" in quanto ogni cifra era rappresentata sempre da una combinazione di due bit ON e tre bit OFF; il codice dava quindi una certa sicurezza poichè l'hardware controllava sempre che ogni cifra fosse rappresentata da due e solo due bit in ON, viceversa veniva rilevato un errore di memoria; analogamente il segno era memorizzato in tre bit e il codice che in questo caso era detto "two of three" era costituito da tre diverse configurazioni di due soli bit in ON.

Al pari degli attuali computers, la memoria poteva contenere sia istruzioni che dati; il set di istruzioni disponibile era costituito da poco più di un centinaio di istruzioni ciascuna delle quali era sempre contenuta in una word (la macchina aveva quindi istruzioni a lunghezza fissa).

Il programma procedeva da una istruzione alla successiva semplicemente passando da una word a quella con indirizzo immediatamente successivo.

    La generica istruzione aveva un formato fisso e precisamente:

  • Il segno e le prime due cifre (posizione 0 e 1) erano il codice operativo (teoricamnente erano possibili quindi 199 istruzioni  diverse) ma ne esistemano molto meno di 150
  • Le successive due posizioni (2 e 3) rappresentavano uno dei 99 possibili registri indice hardware
  • Le successive due posizioni ( 4 e 5) erano il field defination e servivano a definire la parte di word su cui si voleva agire
  • Le ultime quattro posizioni (da 6 a 9) rappresentavano un indirizzo di dato (dunque si potevano indirizzare un massimo di 10.000 word che era anche la massima memoria possibile in un 7070).

La parte dell'istruzione destinata ad indicare il registro indice (posizioni 2 e 3) poteva contenere un valore da 01 a 99 per chiamare in causa uno dei 99 registri di macchina chiamati registri indice; l'istruzione operava sulla word il cui indirizzo veniva ottenuta dalla parte indirizzo dell'istruzione (posizioni 6 - 9) incrementato algebricamente con il valore contenuto nel registro indice indicato; ponendo 00 nella parte registro indice dell'istruzione essa agiva invece solo sull'indirizzo indicato dalla parte indirizzo, senza aggiustamenti.

Il field defination consentiva di operare su parti di una word, ad esempio il valore 23 indicava che si desiderava agire soltanto sulla terza e quarta cifra di una certa word, il valore 47 indicava che si voleva operare sulle cifre dalla quinta alla settima di una word, mentre il valore 09 indicava ovviamente che si desiderava operare sull'intera word.

Tutti gli spostamenti da memoria a memoria nonchè i calcoli o i confronti, a parte un meccanismo particolare per spostamenti di blocchi di dati, venivano fatti tra una word o parte di una word e un accumulatore; esistevano infatti tre accumulatori e per eseguire una somma o un confronto occorreva prima portare in un accumulatore il dato (una word o una parte di essa) e poi eseguire la somma o il confronto tra l'accumulatore e un'altra word o parte di essa; il risultato della somma si creava nell'accumulatore che poi doveva essere memorizzato nella word che si desiderava riempire; dopo un confronto invece veniva impostato un apposito registro hardware che poteva essere interrogato con le istruzioni di salto condizionato (istruzioni che si chiamavano di branch).

Alcuni esempi di istruzioni erano ZA1, ZA2 e ZA3 (codici mnemonici che stavano per Zero and Add in Accumulator 1 o 2 o 3) oppure ST1, ST2, ST3 (codici mnemonici che indicavano Store from Accumulator 1 o 2 o 3); BE o BG o BL che stavano per Branch for equal, Branch for greater, branch for lower).

Completavano l'hardware 100 switches, specie di flag hardware che potevano essere settati e resettati nonchè interrogati.

In quanto alla potenza del 7070, ricordo che un'istruzione veniva eseguita in un tempo compreso tra  20 e 100 microsecondi; assumendo quindi anche una media di 50 microsecondi per istruzione, in un secondo potevano essere eseguite al massimo 20.000 istruzioni; dunque quella macchina aveva una potenza di 0,05 MIPS !!!

Particolare interessante e certamente da non trascurare è che nell'hardware del 7070 era già implementato un meccanismo di gestione degli interrupts; infatti quando i canali  rilevavano il termine di una operazione di input/output, impostavano in ON un flag hardware e provocavano la memorizzazione di una serie di notizie che consentivano di conoscere l'unità che aveva provocato l'interruzione; durante l'esecuzione di ogni istruzione veniva esaminato quel flag e se trovato in ON, con un meccanismo completamente hardware, prima venivano memorizzate le condizioni esistenti quali l'indirizzo in cui ci si trovava, lo stato dei flags di confronto e tutte le notizie che avrebbero consentito la ripresa del programma dall'indirizzo dell'interruzione, e successivamente l'instruction counter veniva  impostato ad un indirizzo predeterminato per consentire ad un'apposita routine di servire l'interruzione, mentre il flag di interrupt veniva resettato. 
 

. . . e il software

L'hardware dunque in teoria sarebbe stato adatto anche a realizzare un sistema multitasking, ma purtroppo il software era ancora troppo indietro per sfruttarlo appieno.

Infatti non esisteva neanche un sistema operativo, l'unico software di base fornito era il cosiddetto IOCS (Input Output Control System) le cui funzioni venivano richiamate da apposite macro (Get, Put, ecc.) che potevano essere inserite nel codice mnemonico dell'Autocoder e che si espandevano durante l'assemblaggio nelle necessarie CALL alle routine dell'IOCS.

Visto che le uniche periferiche consentivano soltanto l'organizzazione sequenziale dei dati, la gestione dell'input/output riguardava quindi soltanto il trattamento dei files sequenziali; veniva però sfruttato il meccanismo delle interruzioni per cui la lettura e scrittura dei records veniva fatta con l'uso di buffers e in modo asincrono rispetto alle richieste del programma.

I programmi venivano preparati scrivendo a matita le istruzioni sulle righe di appositi moduli che venivano inviati al reparto perforazione per essere portati su scheda; ogni riga impegnava una scheda per cui il source di un programma diventava un pacco di qualche migliaio di schede; per assemblarlo bisognava portarlo su nastro utilizzando il 1401 e infine lo si dava in pasto all'Autocoder , montando la bobina su una delle unità a nastro del 7070.

Il codice oggetto veniva scritto su nastro e quindi il caricamento dei programmi avveniva appunto montanto uno dei nastri programma ed avviando dalla console la sua lettura.

Un altro software importante ed indispensabile in un ambiente in cui erano possibili soltanto elaborazioni sequenziali era il sort/merge

 

Torna all'indice