100 Relay Computer

Colossus II · logica elettromeccanica

Un computer completo costruito con cento relè.

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.

Schema a blocchi del 100 Relay Computer
Architettura generale · apri la tavola PDF

100

relè

Componenti commerciali a basso costo, organizzati in unità logiche leggibili.

32 B

ROM programma

Abbastanza spazio per programmi reali senza tradire il vincolo dei cento relè.

4 × 4 bit

RAM dati

Quattro nibble, espandibili fino a sedici, ciascuno osservabile tramite LED.

Progetto hardware

Dallo schema alla scheda

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

Architettura, microcodice e programmi

Il progetto completo, raccolto in uno spazio consultabile senza allungare inutilmente la pagina.

Obiettivo

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.

Semplificazioni

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.

Contabilità dei relè

  • 4 relè DPDT per il clock a più fasi;
  • 12 relè DPDT per il program counter a 6 bit;
  • 19 relè per pilotare la ROM a diodi;
  • 24 relè per la RAM e 4 per la sua decodifica;
  • 18 relè per accumulatore, risultato e Instruction Register;
  • 12 relè per la ALU;
  • il resto per microcodice e logiche varie.

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.

Set di istruzioni

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.

Demo: faccina sui LED della RAM

LD 9
STA 0
LD 0
STA 1
LD 9
STA 2
LD 6
STA 3
HCF

Demo: diagonale

LD 8
STA 0
LD 4
STA 1
LD 2
STA 2
LD 1
STA 3
HCF

Demo: prodotto

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

← Torna ai progetti