Come sono stati programmati i primi microprocessori?


44

Mi è appena venuto in mente che se stai scrivendo un sistema operativo, allora su cosa lo stai scrivendo? Lo chiedo mentre sto leggendo un libro sui fondamentali dei microprocessori del 1980 e questa domanda mi è venuta in mente:

Come è stato programmato il primo chip a microprocessore?

La risposta può essere ovvia ma mi sta infastidendo.


6
Se mi è permesso di collegare il mio lavoro, vedi la mia risposta a "Come si può compilare il kernel Linux?" su Stack Overflow . La risposta non è ovvia finché non capisci il principio generale, a quel punto dirai "Beh, certo ..."
dmckee,

@dmckee Ma non risponde ancora alla domanda come ha fatto a sapere cosa fare :) chi ha detto al computer con gli switch cosa fare? Voglio un po 'più di dettagli.
Decano del

4
Quindi la domanda è sulla progettazione della sequenza di avvio del primo chip? Bene, questa è certamente una domanda che appartiene a questo sito, ma procede come la progettazione di una logica digitale costruita da componenti .... farla partire in uno stato noto, quindi alimentare gli input che faranno cose utili. Lascio ad altri per fornire la risposta dettagliata, perché sono traballante su questo, ma non so che i primi computer sono stati attuati in tubi a vuoto, giusto? Poi c'è stata una generazione di singoli transistor, tutti prima del primo micro chip. Gli ingegneri sapevano già cosa stavano facendo.
Dmckee,

1
Sui processori non micro, ovviamente.
user253751

Risposte:


56

Prenderò la tua domanda alla lettera e discuterò principalmente di microprocessori, non di computer in generale.

Tutti i computer hanno una sorta di codice macchina. Un'istruzione è composta da un codice operativo e uno o più operandi. Ad esempio, l'istruzione ADD per Intel 4004 (il primo microprocessore) è stata codificata come 1000RRRR, dove 1000 è il codice operativo per ADD e RRRR rappresentava un numero di registro.

I primissimi programmi per computer sono stati scritti a mano, codificando a mano l'1 e lo 0 per creare un programma in linguaggio macchina. Questo è quindi programmato nel chip. I primi microprocessori utilizzavano la ROM (memoria di sola lettura); questo è stato successivamente sostituito da EPROM (ROM programmabile cancellabile, che è stata cancellata con luce UV); ora i programmi sono generalmente programmati in EEPROM ( "Elettricamente ...- EPROM" , che può essere cancellato su chip), o in particolare nella memoria Flash.

La maggior parte dei microprocessori ora può eseguire programmi dalla RAM (questo è praticamente uno standard per tutto tranne i microcontrollori), ma in primo luogo deve esserci un modo per caricare il programma nella RAM. Come ha sottolineato Joby Taffey nella sua risposta, questo è stato fatto con interruttori a levetta per Altair 8080, che era alimentato da un Intel 8080 (che ha seguito i 4004 e 8008). Nel tuo PC, c'è un po 'di ROM chiamata BIOS che viene utilizzata per avviare il computer e caricare il sistema operativo nella RAM.

Il linguaggio macchina diventa noioso molto velocemente, quindi sono stati sviluppati programmi assembler che prendono un linguaggio assemblatore mnemonico e lo traducono, di solito una riga di codice assembly per istruzione, in codice macchina. Quindi invece di 10000001, si scriverebbe ADD R1.

Ma il primo assemblatore doveva essere scritto in codice macchina. Quindi potrebbe essere riscritto nel proprio codice assembler e la versione in linguaggio macchina lo utilizzava per la prima volta. Successivamente, il programma potrebbe assemblare se stesso. Questo si chiama bootstrap e viene eseguito anche con i compilatori: in genere sono prima scritti in assembler (o in un altro linguaggio di alto livello), quindi riscritti nella loro lingua e compilati con il compilatore originale fino a quando il compilatore non può compilare se stesso.

Dal momento che il primo microprocessore è stato sviluppato molto tempo dopo la presenza di mainframe e minicomputer e il 4004 non era comunque adatto all'esecuzione di un assemblatore, Intel probabilmente ha scritto un cross-assemblatore che funzionava su uno dei suoi grandi computer e ha tradotto il codice assembly per il 4004 in un'immagine binaria che potrebbe essere programmata nella ROM. Ancora una volta, questa è una tecnica comune utilizzata per il porting dei compilatori su una nuova piattaforma (chiamata cross-compilation ).



1
E se davvero volessi programmare un microcontrollore senza un altro computer (oltre al tuo cervello), potresti farlo costruendo circuiti che alimentano direttamente il programma. Se è stato programmato su jtag, è possibile ruotare gli interruttori per imitare i comandi jtag necessari per programmare il dispositivo. Se usasse un ram esterno, allora potresti usare molti demultiplexor e enormi array di resistori legati in alto o in basso per rappresentare i bit delle istruzioni (e probabilmente usare una bassa velocità di clock perché il tuo hardware sarà lento).
nategoose,

3
@tyblu: Sono quasi certo che le EPROM precedenti a micce-PROM. La forma più semplice di ROM è essenzialmente un array di diodi popolato selettivamente (ai primi tempi, i diodi sarebbero letteralmente saldati su una griglia per rappresentare una polarità di bit; un diodo mancante rappresentava l'altra polarità). Una miccia-PROM mette un array di diodi su un chip, ma ha transistor di fila che sono molto più robusti dei diodi agli incroci. Si potrebbero rimuovere selettivamente i diodi impostando i fili degli indirizzi e quindi colpendo duramente i fili dei dati collegati ai diodi che si desidera rimuovere.
supercat

@tyblu: si noti che le PROM dei fusibili non sono elettricamente simili alle moderne OTPROM, che sono semplicemente chip EPROM in pacchetti senza finestre. I dispositivi EPROM / OTP sono programmati caricando elettricamente le porte di alcuni transistor (che hanno una capacità sufficiente e una perdita sufficiente per contenere una carica essenzialmente indefinitamente). Al contrario, i chip Fuse-PROM sono programmati distruggendo fisicamente le connessioni ai diodi indesiderati.
supercat

1
dai un'occhiata a questa "ROM" dai tempi dei transistor discreti: en.wikipedia.org/wiki/Core_rope_memory
JustJeff,

23

Inizialmente, i programmi venivano scritti su carta e quindi trasposti su qualsiasi metodo di input disponibile sul computer. Questo è andato da manopole, interruttori e cavi jumper sui primi computer, a schede perforate, a tastiere / schede.

L'illustrazione seguente mostra ciò che utilizzano i veri programmatori attuali :


10
Dannazione, emacs ...
tyblu

6
Programma i programmatori. (E quei programmatori che programma programmatori che programmano programmatori.)
Mateen Ulhaq,

4
Faccio i miei programmatori.
W5VO

16

Beh, ero in giro quando sono usciti i primi micro, abbiamo scritto tra assemblatori e compilatori su mainframe e mini, quindi li abbiamo caricati su hardware a 8 bit, le persone non si sono preoccupate di costruire compilatori / assemblatori su micro fino a quando non avevano abbastanza memoria locale per rendilo utile


14

Una delle prime forme di memoria di sola lettura era una griglia in cui l'indirizzo selezionava una riga (tirandola in basso) e le colonne rappresentavano i dati. Ogni colonna avrebbe un pull-up e ogni intersezione avrebbe un diodo saldato per rappresentare uno "zero" o nessun diodo per rappresentare uno "[livelli di bit potrebbero essere invertiti se lo si desidera, nei casi in cui ciò ridurrebbe il numero di diodi richiesti]. Qualsiasi modello di bit desiderato può essere "programmato" mediante saldatura nei diodi appropriati.

Questo design è stato introdotto nel mondo dei circuiti integrati sotto forma di miccia PROM. Essenzialmente una PROM con fusibile era un circuito proprio come sopra, costruito su un chip, tranne per il fatto che tutti i diodi erano popolati e che ogni diodo aveva un fusibile debole in serie con esso. Al momento della spedizione, una PROM legge "0" in tutte le posizioni. Si potrebbe, tuttavia, rimuovere selettivamente i diodi selezionando l'indirizzo appropriato e guidando le linee di dati appropriate "in modo duro" alto [nota: penso che ogni bit potrebbe avere il proprio transistor, piuttosto che un diodo, ma il principio è lo stesso].

Le PROM programmate da fusibili sono state sostituite da memorie a semiconduttore, che immagazzinano i bit impiantando cariche su condensatori interni. Non solo questi ricordi sono più compatti delle PROM a miccia, ma se sono alloggiati in pacchetti trasparenti ai raggi UV, possono essere cancellati e riutilizzati. Si noti che anche le cosiddette memorie "programmabili una tantum" usano quasi sempre lo stesso design, ma sono semplicemente alloggiate in pacchetti opachi UV.

due uomini che indicano una matrice di diodi di grandi dimensioni negozio di controllo a matrice di diodi del MIT Whirlwind Computer del 1950

matrice a transistor con piccoli transistor SMD negozio di controllo a matrice transistor del 2005 CPU MT15


spero non ti dispiaccia la piccola modifica che ho apportato al tuo post.
davidcary,

7

Non sono sicuro che qualcuno abbia affrontato la vera domanda del PO, che sembra essere "Come fa il computer a sapere come iniziare?" , quindi ci proverò.

Inizia con un'analogia. "Come fa un transistor a sapere come iniziare?" Certo che no, funziona solo in conformità con la fisica e l'ingegnere costruisce il circuito in modo che inizi in uno stato noto.

I computer sanno come iniziare perché sono circuiti (molto complicati, ovviamente) e sono costruiti per avviarsi in uno stato particolare. In una macchina moderna quello stato potrebbe essere uno in cui il bus principale rimappa parte dello spazio degli indirizzi per utilizzare una ROM sulla scheda madre come memoria insufficiente (la ROM è stata masterizzata con un BIOS). In una macchina di prima generazione lo stato iniziale potrebbe essere stato arrestato dalla CPU, il contatore del programma a zero e la memoria attiva il sottosistema.


6

Un sistema operativo è un programma per computer che viene eseguito direttamente sul processore. Può essere scritto in qualsiasi lingua che può essere compilata o assemblata in base alle istruzioni della macchina. Assembly e C sono scelte comuni.

Il codice viene caricato nei processori una singola istruzione alla volta da un archivio: una ROM o RAM.

Lo Z3 , il primo processore programmabile è stato realizzato con relè elettromeccanici e ha letto le istruzioni dal film perforato.

L'Altair 8800, il primo personal computer, è stato programmato tramite interruttori a levetta.

Per sapere come è costruito un processore dalla logica digitale, consultare https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners

Per una storia, vedi http://en.wikipedia.org/wiki/History_of_computing_hardware


5

Ecco un po 'di computer molto vecchi:

Per quanto ne so, ai tempi, avevi un grande pannello frontale del computer che veniva utilizzato per programmarli. Fondamentalmente, ogni cella di memoria in quei computer era collegata agli switch. Potresti alimentare la memoria e quindi utilizzare gli interruttori per impostare i dati in ogni cella. In questo modo, avresti inserito il programma bit per bit nella memoria del computer. Quindi imposta il punto di partenza del programma e avvia l'esecuzione.

Con il progredire della tecnologia, sono stati sviluppati i cosiddetti programmi bootloader. Sono programmi brevi il cui punto è avviare un altro programma dalla memoria del computer. Il problema con l'inserimento dei programmi bit per bit (e successivamente più di un bit usando numeri ottali e successivamente esadecimali) era che era molto lento e c'erano grandi probabilità che l'operatore commettesse un errore durante il caricamento del programma. Quindi i programmi brevi verrebbero utilizzati per caricare programmi più grandi memorizzati nella memoria del computer. Col passare del tempo, una parte del codice che doveva essere inserita manualmente diminuiva e nei computer moderni spesso abbiamo bootloader scritti in una sorta di ROM o addirittura nella memoria flash.


4
Nelle macchine a "pannello frontale", come i precedenti sistemi S-100, gli switch consentono di assumere il controllo del bus di sistema. Un interruttore ti permetterebbe di sospendere il processore. Mentre il processore era sospeso, è possibile quindi inserire manualmente un indirizzo sul bus degli indirizzi (tramite switch), inserire i dati sul bus dati (più switch) e quindi causare manualmente un ciclo di scrittura sul bus (un altro switch), oppure un ciclo di lettura per riportare i dati su 8 singoli LED e leggere il file binario, ecc. In questo modo, è possibile memorizzare un codice macchina sufficiente nella RAM, annullare la sospensione del processore e passare da lì.
JustJeff,

4

Qualche anno fa mi sono imbattuto in un programmatore di microcontrollori che aveva un display a sette segmenti a 4 cifre e una tastiera esadecimale. Sono sicuro che questo non avesse un microcontrollore a bordo e ti permise di inserire il codice macchina direttamente un byte alla volta.

Quindi questo ti consentirebbe di compilare (dolorosamente) un elenco di codici Op manualmente uno per uno e inserirli nel chip.

Non ho idea se riesci ancora a ottenerli, ma immagino che qualcosa di simile sia stato usato quando i microcontrollori erano relativamente nuovi.


1
Sembra forse il KIM-1 o Cosmac ELF, entrambi inclusi un microprocessore (MOS 6502 e RCA [CD] 1802). KIM: oldcomputers.net/kim1.html ELF: cosmacelf.com
mctylr

Probabilmente era qualcosa di simile a quello che diceva mctylr. Nelle macchine di questo tipo, di solito c'era un piccolo programma di "monitoraggio" nella ROM. Quando hai inserito i byte con la tastiera, in realtà era il 6502 (o 8085 o qualsiasi altra cosa) a leggere i tasti, modificare la memoria, aggiornare i LED, ecc.
JustJeff

1

I primi microprocessori sarebbero stati programmati con l'aiuto di computer esistenti che non erano basati su microprocessori. Prima che la prima CPU fosse prodotta su un chip, esistevano già architetture informatiche avanzate costruite con componenti discreti anziché microprocessori. Dai un'occhiata a, diciamo, IBM 360.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.