Avviare Linux su piattaforme hardware limitate è diventata una questione d’onore tra gli ingegneri embedded. In alcuni casi, il risultato è pratico. In altri, è un risultato di abilità. L’ultimo progetto di Dmitry Grinberg rientra in quest’ultima categoria. Linux/4004 è un computer a quattro bit che avvia Linux su un microprocessore progettato per calcolatrici da tavolo negli anni ’70.
L’Intel 4004 è un microprocessore a quattro bit che richiede diversi altri chip per creare un equivalente funzionale di un processore moderno. Diversi aspetti rendono impegnativa l’esecuzione diretta di un sistema operativo come Linux. Ad esempio, la CPU non supporta alcuna operazione logica (ad esempio AND, OR, XOR), né il chip ha interruzioni. Fortunatamente, però, una condizione JMP controlla lo stato di uno specifico pin. Inoltre, le operazioni di memoria sono minime.
L’approccio di Grinberg all’esecuzione di Linux su una macchina così limitata è simile a un progetto passato. In precedenza, Grinberg aveva realizzato un biglietto da visita che emulava un processore MIPS con Linux. Per Intel 4004, Grinberg ha scelto anche di emulare un processore MIPS R300.
L’implementazione solo del MIPS R3000 ha lasciato 400 byte dei 4096 byte disponibili dello spazio di codice del 4004. Nonostante questa limitazione, Grinberg è riuscito anche a inserire un driver per scheda SD da 190 byte. (Questo driver potrebbe essere il driver per scheda SD più piccolo al mondo) Alla fine, Grinberg ha implementato un metodo di cambio di banco per raddoppiare la dimensione della ROM fino a raggiungere l’ “enorme cifra” di 8192 byte.
Da lì, Grinberg ha aggiunto il supporto a Linux/4004 per la (moderna) PSRAM basata su SPI (RAM per l’emulazione MIPS), un display a caratteri VFD 40×2 e una porta seriale basata su UART. Inoltre, 32 LED visualizzano il contatore dei programmi (PC) del MIPS, perché si sa, ogni progetto ha bisogno di LED lampeggianti (la leggenda narra che i LED aumentino le prestazioni – NDR). Detto questo, il contatore si aggiorna una volta ogni 32 istruzioni.
L’altro hardware include traduttori del livello di tensione per interfacciare il chipset vintage con i chip moderni. Questi traduttori sono necessari per garantire che il microprocessore a quattro bit possa comunicare con i componenti moderni, come la scheda SD e la PSRAM. L’alimentazione primaria è costituita dai 5 volt dell’USB-C, che vengono convertiti in 3,3 volt e -10 volt (per la memoria MCS-04).
All’inizio, il tempo di avvio di Linux era di poco più di nove giorni. L’obiettivo di Grinberg era quello di riuscire ad avviarlo in meno di una settimana. Dopo aver ottimizzato il codice di emulazione e quindi il kernel Linux, il tempo di avvio finale è sceso all’incredibile cifra di 4,76 giorni. Ma l’avvio è solo l’inizio. In una dimostrazione, Grinberg illustra la lentezza di Linux/4004 mostrando un time-lapse del processo di nove giorni per visualizzare l’arte ASCII sul VFD.
Anche se i chip degli anni ’70 stanno diventando difficili da trovare, Grinberg offre una distinta completa dei materiali per costruire un Linux/4004. Se sei interessato a un kit, contatta Grinberg tramite l’indirizzo email nel post sul blog del progetto Linux/4004. Lì troverai dettagli estremi sul funzionamento del 4004, una storia di costruzione della macchina e molti suggerimenti su come realizzarne uno.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
Seguici per non perdere le prossime novità!