100
relè
Componenti commerciali a basso costo, organizzati in unità logiche leggibili.
Colossus II · logica elettromeccanica
Una macchina didattica progettata per essere comprensibile fino all'ultimo contatto: logica cablata, microcodice a diodi, 32 byte di ROM e quattro nibble di RAM. Non cerca velocità; rende visibile il calcolo.
100
Componenti commerciali a basso costo, organizzati in unità logiche leggibili.
32 B
Abbastanza spazio per programmi reali senza tradire il vincolo dei cento relè.
4 × 4 bit
Quattro nibble, espandibili fino a sedici, ciascuno osservabile tramite LED.
Progetto hardware
Le immagini sono ricavate dalle tavole EAGLE del progetto. I PDF originali conservano il dettaglio vettoriale.
Tavole aggiuntive: layout preliminare · secondo lato delle piste
Dal README del progetto
Il progetto completo, raccolto in uno spazio consultabile senza allungare inutilmente la pagina.
Questo progetto raccoglie lo sviluppo di un computer a relè realizzato con componenti facilmente reperibili. L'obiettivo non è ottenere prestazioni, ma costruire una macchina didattica completamente comprensibile: dalla logica cablata al microcodice, fino all'assembler e ai programmi di esempio.
Il risultato è una scheda madre che raccoglie tutti i componenti separandone le unità logiche, con un microcodice minimale ma computazionalmente completo. Il programma risiede in ROM e la RAM contiene i dati. Non ci sono periferiche di I/O, ma un LED rende visibile ogni cella di memoria.
I relè lavorano in logica positiva: “1” se la tensione è sufficiente a far scattare la bobina, “0” negli altri casi. Questo semplifica la progettazione e permette di combinare facilmente AND e OR a diodi, soprattutto nel microcodice.
La micro-ROM è una matrice di socket femmina passo 2,54 mm. Il contenuto viene programmato inserendo o rimuovendo diodi, senza saldature e con il programma letteralmente a vista.
L'obiettivo era stare sotto i cento relè. Non è stato raggiunto: la macchina completa ne usa esattamente cento. Con soli 16 byte di ROM se ne potrebbero risparmiare circa dieci, rinunciando però alla possibilità di programmi decenti.
HCF 0000XXXX HALT JZ DEST 11XXXXXX salta se zero LD 0110XXXX carica un valore diretto e azzera il flag LDA 0100XXXX carica dalla RAM SUM 0111XXXX somma ad A il contenuto della cella indicata STA 1000XXXX copia A nella cella indicata
Una cella di ROM vuota causa immediatamente HALT. Per decrementare A basta sommare F. Un salto incondizionato può essere costruito salvando A, caricando zero, usando JZ e ripristinando A: niente stack, ma abbastanza disciplina.
LD 9 STA 0 LD 0 STA 1 LD 9 STA 2 LD 6 STA 3 HCF
LD 8 STA 0 LD 4 STA 1 LD 2 STA 2 LD 1 STA 3 HCF
RAM0 = moltiplicando RAM1 = moltiplicatore RAM2 = risultato RAMF = 15 (-1) 00 LD 0 01 STA 2 ; risultato = 0 02 LDA 1 ; LOOP 03 JZ 13 ; finito? 04 STA 3 ; salvo contatore 05 LDA 2 06 SUM 0 07 STA 2 ; risultato += moltiplicando 08 LDA 3 09 SUM F 10 STA 1 ; contatore-- 11 JMP 02 ; LOOP 12 HCF ; END