Quando lavoravo al mio MSCS negli anni '70, programmavo sia su un mainframe (Univac 1108) che su un minicomputer usato a 12 bit (PDP-8) con 4K di memoria centrale.
Il PDP-8 era collegato a una telescrivente modello ASR-33 (automatic send-receive). Qui puoi vedere il computer e la TTY accanto ad esso:
L'ASR-33 aveva sia un lettore di nastro di carta ASCII a 8 bit che un perforatore. Il lettore poteva essere usato per inserire sia dati binari che codice sorgente ASCII o altro testo semplice. Per eseguire un programma, si doveva prima caricare un programma "bootstrap" nel PDP-8 usando gli interruttori del pannello frontale. Questo programma era appena sufficiente per attivare il lettore di nastro di carta e leggere il contenuto di un nastro contenente l'immagine binaria del programma.
Il lettore (e il perforatore) lavoravano entrambi a soli 10 caratteri al secondo - cioè 110 baud (confrontatelo con i 115.200 baud normalmente associati alle interfacce RS-232 oggi, o le interfacce da 10 MB o più veloci a cui siamo abituati con Internet - oltre 100.000 volte più veloci). Ma di nuovo, stavamo caricando solo 4K di memoria a 12 bit, quindi questo richiedeva "solo" circa 10 minuti per caricare un programma che usava tutta la memoria - di solito un po' meno, perché il programma aveva bisogno di un po' di spazio per i dati.
Ecco un primo piano della sola Teletype con il suo lettore/punch sulla sinistra, che mostra più chiaramente il nastro di carta.
Sai che volevi scrivere un programma in assembly. Dovresti prima caricare un editor, dalla sua immagine binaria come descritto sopra. Le sue capacità sarebbero simili agli editor a riga di comando in UNIX o Linux, come vi. Si digitava il programma nell'editor, probabilmente lo si stampava (anche a 10 caratteri al secondo), e poi si facevano le correzioni. Il programma editor era di solito molto più piccolo di 4K, perché si voleva avere più spazio in memoria per contenere il codice sorgente mentre lo si modificava. Poiché il PDP-8 era una macchina a 12 bit, poteva contenere due caratteri a 6 bit in ogni parola. Questo significava niente minuscole - tutto era in TUTTO CAPS.
Una volta che avevi il programma come volevi, ordinavi al programma editor di timbrare una copia del sorgente su nastro di carta. Poi si caricava l'assemblatore (dal suo binario su nastro di carta). Era chiamato un assemblatore a 2 passaggi, perché avrebbe letto il codice sorgente che avevi perforato in precedenza due volte - la prima volta per stabilire la posizione di tutti i simboli, e un secondo passaggio per creare effettivamente l'output binario. Questo schema permetteva di usare riferimenti in avanti nel codice.
Quando si faceva il secondo passaggio, sia il lettore che il perforatore erano attivi - uno leggeva il codice sorgente e l'altro perforava il binario. Mentre si perfora il nastro, la stampante sarebbe stata scollegata in modo da non stampare spazzatura.
Questo era lo scenario di base - c'erano assemblatori più sofisticati con linker rilocabili che permettevano a diversi programmi di essere assemblati indipendentemente, e collegati insieme per produrre un nastro binario finale.
Perché questo processo era così laborioso, era un vero dolore se si faceva un errore nel proprio programma e si aveva bisogno di correggerlo. Ovviamente non si voleva dover ricaricare tutti questi programmi e passare attraverso tutta questa procedura per correggere un semplice errore. Così uno è diventato abbastanza bravo a creare patch binarie usando un programma di debug. Dopo aver testato la patch, si poteva dire al debugger di perforare un nuovo nastro binario, sia con la sola patch, sia con l'intero programma per sostituire il nastro originale.
In seguito, si raccoglievano tutte le note della patch, si caricava di nuovo il programma editor, poi si faceva leggere il nastro di codice sorgente che si era perforato molto prima nell'editor, e si ripeteva il processo.
C'erano anche lettori di nastro di carta indipendenti ad alta velocità, come il PC04 raffigurato sotto, che poteva leggere 300 caratteri al secondo e perforare 50 caratteri al secondo. Non ne ho mai avuto uno a disposizione.