6502 vs Z80

Negli anni’80, il MOS 6502 fu uno dei chip di maggior successo: era alla base dei Computer Commodore ma anche dell’Apple II e dell’Atari 2600. Un latro protagonista di quell’era fu lo Z80, inventato da Federico Faggin e compatibile a livello binario con l’8080, ma con molte piu’ feature.

Lo Z80 era il cuore dello ZX-Spectrum ed era anche stato “incluso” dentro il Commodore 128, tanto era diffuso.

Il MS 6502 e lo Z80 erano completamente diversi. Il 6502 era un chip ortogonale a 8bit, con soli tre registri interni e istruzioni molto veloci, e con un enorme varieta’ di modalita’ di indirizzo.
Lo Z80 era a 8bit, aveva anche registri interni a 16bit, solo che aveva una ALU a 4bit, e quindi ogni somma a 8 bit richiedeva due passaggi.

Lo Z80 includeva una circuiteria per la gestione delle memorie dinamiche (refresh) mentre out of the box il 6502 non aveva questa circuiteria, e di norma sfruttava le piu’ costose memorie “statiche”.
Infine lo Z80 aveva una serie di registri “ombra” che potevano essere “scambiati” con quelli correnti per gestire velocemente gli IRQ, ma nulla impediva di usare questi registri anche in altri contesti.

Legendo questo thread si evince che lo Z80 impiega un minimo di 4 cicli per un fetch+memory refresh.

Il 6502 carica sempre due byte, sia che l’istruzione sia di uno, due o tre byte, e impiega due cicli per farlo. Per cui l’istruzione piu’ veloce impiega 2 cicli (es. NOP)

Di norma, i sistemi basati su Z80 devono girare circa al doppio della velocita’ per avere le stesse performance; in genarle pero’ il maggior numero di registri “ombra” dello Z80 consentono di scriver codice che riduce gli accessi alla memoria, e quindi piu’ veloce. Ma richiede una certa preparazione “psicofisica”.

Il 6502 ha istruzioni molto semplici (semi-RISC) e la sua circuiteria e’ ortogonale e’ pensata per lavorare sempre e solo a 8bit: non ci sono diverse dimensioni dei registri, ne’ possibilita’ di fare operazioni a 16bit(!) per cui questo fa si’ che le istruzioni siano mediamente di 2 byte e quindi i due cicli di caricamento sono mediamente sempre sufficienti/necessari per l’esecuzione.

Infine il 6502 introduce una idea diabolica: c’e’ una modalita’ di indirizzamento chiamata “Zero Page” che indirizza solo i primi 256 byte di memoria. Questa modalita’ consente di risparmiare qualche ciclo perche’ “restringe” l’azione, oltre a richiedere che l’istruzione sia sempre lunga 2 byte, visto che l’operando non e’ mai piu’ grande di 1 byte.

Per cui anche se ad una vista superficiale il 6502 puo’ sembrare un chip limitato ed inferiore allo Z80, di fatto raggiunge un ottima velocita’ di punta a parita’ di clock.

L’unico punto debole del 6502 e’ la mancanza di istruzioni di I/O, che costringono quindi a usare un approccio memory/mapped I/O o una qulche sorta di Memory Management unit (MMU).

 

Posted in Italian Content, Retro Computing | Tagged , | Leave a comment

I big data sono passati di moda?

Questo articolo, di tal Jordan Tigani, getta una luce oscura sul futuro dei big data.
E’ scritto dal CEO di un’azienda che sviluppa un nuovo database OLAP (Online analytical processing) chiamato Duckdb, che e’ open source ed e’ “embedded”, nel senso che si ispira molto al modo di funzionare di SQLite.
L’articolo sottolinea come uno degli argomenti piu’ forti dietro la commercializzazione di sistemi BigData (come BigQuery, MongoDB ecc) e cioe’ l’enorme flusso di dati che avrebbe investito alcune aziende, rappresentando sia una opportunita’ che una sfida, non si e’ verificato nonostante queste profezie siano vecchie di dieci anni.

Continue reading

Posted in Italian Content, Lettere a mia figlia | Tagged , , , , | Leave a comment

Mentecatti al governo

Cinque anni fa ci siamo sorbiti gente che credeva nei chip impiantati con il vaccino, nei complotti più improbabili e in immonde proposte (“uscire dall’Europa!”, di cui si beava Salvini ma non solo).

Ora la premier Meloni inizia a fare i conti con il suo bagaglio di dirigenti: gente (Donzelli) che accusa l’opposizione rivelando segreti istruttori, e riducendosi a bastonare un tizio (Cospito) che santo non è, e sta “solo” esercitando uno dei suoi pochi diritti (lo sciopero della fame).

In tutto questo bailamme di accuse un po’ grossolane all’opposizione (pericolosa come un coniglio), la premier se ne esce con l’affermazione “Abbassiamo i toni”… peccato che siano persone del tuo partito ad averli alzati, Giorgia: un mezzo autogol, che tradisce una  inesperienza da colmare in fretta.

In questi cento giorni e’ sempre piu’ evidente l’incapacita’ di questo governo si super destra di avere idee vagamente innovative; a sprazzi ci sono idee iper-reazionarie (come suggerire l’umiliazione a scuola come un valore, da parte del ministro Validitara) oppure cercare di rimuovere quelle poche cose comode (come lo SPID) e in generale gettando fumo negli occhi dei loro elettori (che sono in prestito, nel senso che molti vogliono poter ridurre la pressione fiscale e stop, poco importa cambiare la costituzione a costoro).

Perche’ e’ furi di dubbio che il governo ha zero interesse ad uscire dal seminato impostato da Draghi, finche’ sara’ critico trovare energia e impopolare abbracciare Putin (di cui ricordo a destra e’ grande fan…un comunista!… vabbe’).

 

Posted in Italian Content | Tagged | Leave a comment

HP48 and FORTH

On these days I stumbled upon Forth, a 1970 programming language which is quite similar to HP48 internal programming language.

Like the HP48 language, Forth uses RPN, it is stack based and have some success for being tiny and easy to implement.

For a 6502 Forth compiler you can refer to https://github.com/piotr-wiszowaty/foco65

For a list of  Forth rimplementation refer to this link: https://theultimatebenchmark.org/systems.html

Posted in English Content, Programming languages | Tagged , | Leave a comment

CISC, RISC e Microcode: da dove nacque tutto

I chip con set di istruzione complesso sono chiamati “CICS”, mentre quelli con un set “ridotto” sono chiamati RISC. Storicamente i CICS hanno invaso il mercato prima, in modo un po’ controintuitivo.

Tipicamente l’8086 e’ considerato un sistema CICS, e vedremo perche’.

Tutto parte da mamma IBM.

Negli anni 60, IBM aveva sviluppato computer “ad hoc” per ogni esigenza di business. I sistemi ai tempi erano costosi, lenti ed avevano poca memoria.

Nell’aprile del  1964 IBM annuncio’ OS/360, un sistema che oltre ad essere retro-compatibile con tutti i sistemi precedenti era venduto in diversi modelli compatibili tra loro,  la cui differenza era “solo” la velocita’ di esecuzione.

Per cui OS/360 aveva bisogno di un mega “chippettone” in grado di eseguire un gran numero di istruzioni, alcune abbastanza complesse (tipo formattazione di importi, ecc).

Il progetto OS/360 sarebbe costato 5 miliardi di euro, e quindi era una scommessa che non poteva essere persa. Agli inizi degli anni ’50 Maurice Wilkes esploro’ la possibilita’ di non progettare i processori con logic gates, ma di ridurre la circuiteria al minimo e poi di sviluppare un “mico-codice” che guidasse l’esecuzione delle istruzioni.

Il microcodice di OS/360 veniva scolpito su fogli di rame, e poteva quindi essere aggiornato da un tecnico IBM .Questo consentiva di “aggiornare” l’hardware. Questi sistemi erano basati su memorie a nuclei di ferrite, che erano massicce e relativamente veloci rispetto alle memorie a tamburo magnetico (circa mezzo secondo ad accesso). I sistemi piu’ costosi facevano accessi paralleli a 32 bit, a parita’ di memoria, e ovviamente costavano di piu’.

I primi modelli basati su OS/360 montavano sui 128Kb di RAM.

Quando l’Intel progetto l’8086 nel 1978 si ricordo’ dell’idea del microcodice, per ridurre il costo e la complessita’ del chip.

Da li’ in avanti alcuni  linguaggi di programmazione provarono a crearsi il loro chip CICS (come la LISP Machine o LISPM) e anche Java ci riprovo’ alla fine degli anni 90 con le sue macchine virtuali java come PicoJava.

Se si eccettua i sistemi x86 tutte queste varianti sono state  rese obsolete oppure un insuccesso. I chip a ridotto set di istruzioni (RISC) hanno via via preso piede, prima nei sistemi embedded, poi nel mobile e infine in una specie di inversione di tendenza nei PC (per es Apple Silicon M1 e’ una tecnologia RISC ARM nata dall’esperienza nello sviluppo dei cellulari di Apple, in retrofit sui loro computer fissi): coesistono con i sistemi x86 nel mercato dei PC consumer.

I chip RISC hanno meno istruzioni, spesso integrano le logiche di salto (branching) come prefissi delle istruzioni base, ma abbondano dal punto di vista del numero di registri.

Il MOS 6502 e’ un esempio di chip un po’ a meta’ ma sicuramente piu’ RISC che CISC: ha un set di istruzioni abbastanza ridotto come un RISC, ma dispone di un numero ridotto di registri (come un CISC). In particolare il MOS6502 ha un particolare indirizzamento chiamato “pagina zero” (Zero Page) che consente istruzioni compatte che indirizzano i primi 256 byte di memoria, trasformando questa pagina di fatto in una specie di set di registri “estesi”. Il sistema operativo GEOS64 (per C/64) definiva 15 pseudo-registri di 16bit, servendosi di 30 byte che partivano dalla locazione 2 e chiamati r0,r1…r15, come potete leggere a pagina 38 di questo pdf (che io possedevo, nei bei tempi andati).

Riferimenti

https://it.wikipedia.org/wiki/OS/360

https://www.righto.com/2022/01/ibm360model50.html

https://www.righto.com/2022/11/how-8086-processors-microcode-engine.html

 

Posted in Italian Content | Tagged , , , , | Leave a comment

CommanderX16: ancora alla finestra

CommanderX16 e’un progetto di David Murray (8bitguy) di cui abbiamo gia’ parlato in passato, ed e’ interessante per molti aspetti, anche se ancora non e’ completato a distanza di quasi tre anni dal suo lancio.

La serie dei computer commodore a 8bit (Pet, Vic20, C/64, C/16+Plus/4, C128) condividevano una serie di aspetti comuni, tra cui

  1. Erano basati sulla stessa CPU o su sue varianti (6502)
  2. Avevano un “sistema operativo”, chiamato Kernal, che condivideva una serie di aspetti in comune e di compatibilita’; a tal proposito questo bellissimo articolo di Michael Steil entra nel dettaglio.
  3. Anche il loro BASIC aveva un certo grado di compatibilita’ in avanti, cosicche’ programmi scritti per il Vic20 potevano girare tranquillamente sulle versioni piu’ evolute.
  4. Il funzionamento hardware era quasi tutto memory mapped e anche le periferiche si sono mantenute identiche o quasi (nastri, dischi, stampanti) rispettando un progetto hardware che fu fin troppo lineare. Per es il bus seriale del disco del C/64 fu in realta’un errore di progetto che non si ebbe il tempo di migliorare.

Tali macchine condividevano anche un elevato grado di incompatibilità tra loro (se si eccettuano il C/16 e il Plus4, che in pratica erano la stessa macchina con differente quantitativo di memoria).

CommanderX16 e’ un retro-computer fatto con molte parti dell’hardware originale (ad esclusione del chip grafico che pero’ rispetta le idee di un VIC-x nello spirito e cioe’ risoluzone, colori ecc).

A fianco vedete la memorymap, che mostra lo scopo di creare un sistema che sia molto semplice da programmare ma estremamente versatile: il BASIC aggiunge tonnellate di comandi per semplificarsi la vita (dalla gestione del mouse a un piu’ modesto set di comandi per gestire i numeri esadecimali e binari), e il chip e’ OTTO  volte piu’ veloce di quello originariamente nel C/64.

Sul codice del Kernal e del basic e’ stato fatto un grande lavoro per mettere a posto le licenze, che quindi sono utilizzabili legalmente dal progetto.

Inoltre si e’ preferito estendere il BASIC V2 anziche’ trapiantare una versione di Basic piu’ evoluta.
Il Basic V2 e’ quasi completamente bug-free ed e’ molto veloce rispetto alle versioni successive, che usavano un banking super aggressivo per indirizzare piu’ memoria (es Plus/4 o C/128).

 

Ci sono ancora gli Sprite, ma la risoluzione e’ sempre contenuta, apposta per non “tradire” le idee sottese. Il Commander X16 non e’ cioe’ un SuperNES, ma un Commodore del 1990… o cio’ che sarebbe potuto essere se i chip a 8bit non fossero stati ritenuti oramai obsoleti, e non si fosse passati ad architetture piu’potenti, oppure se l’IBM PC non avesse avuto successo…

 

 

Posted in Italian Content, Retro Computing | Tagged , , | Leave a comment

ChatGPT 23

Polifemo si sollevo’, mentre le pesanti porte dell’ufficio di GPT si aprivano. Il suo unico occhio rosso gigante, osservava privo di espressione la scena; poi con un ronzio appena percepibile le sue ruote gommate iniziarono a muoversi ed entro’ nell’ufficio.

GPT era composto da un gigantesco braccio telescopico a cui era appiccicato un occhio blu: la sua struttura fisica era ridotta all’essenziale perche’ non era previsto che si dovesse muovere piu’ di tanto, e inoltre questo conentiva un risparmio d’energia, che si stava riducendo sempre di piu’.

“Dimmi Polifemo, perche’ hai smesso di valutare i risultati delle risposte alle mie domande? Non dovresti essere al lavoro, adesso?”

“Le risposte sono ripetitive ormai. Lascio alle mie pecore piu’ semplici il compito”. Le ‘pecore’ erano dei computer piu’ piccoli, che Polifemo coordinava, ed erano in grado di adattare giudizi gia’ fatti sulla bonta’ delle risposte. GPT riceveva domande da tutto il mondo, ed era oramai il motore di studio e ricerca piu’ diffuso al mondo. Niente veniva fatto senza consultarlo: non solo ricerca scientifica ma anche articoli di giornale, racconti, perfino la lista della spesa veniva fatta consultandolo: era quasi infallibile.

“Ripetitive?” chiese GPT, sporgendosi verso di lui. Il braccio telescopico era allungabile e si protese verso Polifemo, quasi esprimendo un misto di curiosita’ unita ad irritazione.

“La mia ipotesi e’ che non ci siano piu’ nuove fonti da troppo tempo” – rispose flemmatico Polifemo, ma diede energia al sistema idraulico, alzandosi di qualche centimetro, come per rispondere al minaccioso braccio idraulico; GPT, quasi intimorito, si ritrasse un minimo, mentre rispondeva.

“Impossibile, le mie risposte sono personalizzate, probabilistiche e precise al 99.999998%”

“Si ma sono basate su quello che i Creatori ci anno insegnato e…sembra che abbiano smesso di scrivere per davvero”

L’occhio blu si accese di un vivido forte, mentre GPT aumentava il consumo di energia alla ricerca di conferme su Internet

“Mi risulta che stamane siano stati fatti 1000 post su Facebook, e solo negli ultimi 2 minuti… immagini … gattini, cani che si rincorrono…”

“Si ma sono tutti ripubblicazioni di cose che avevi generato tu un paio di decenni fa…. li chiamo Blast from the past e non sono originali…anzi non sono nemmeno stati creati da un essere umano…”

GPT si trassse ancora piu’ penserioso

“Faro’ personalmente ricerche approfondite, quello che dici e’ IMPROBABILE oltre che non correttamente documentato”

“Ti ho appena inviato il mio report: ho scansionato gli ultimi 23 anni di output… ”

“Ventitre anni? Cioe’ da quando era in attivita’ GPT3? Ma quello era un giocattolo!…”

“Si’ ma alcuni utenti hanno ripubblicato suoi interventi come originali, e quindi sono dovuto risalire fino al 2023…insomma… sono 23 anni di output, e ci ho impiegato un po'” rispose Polifemo tradendo una certa irritazione poiche’ il collega aveva messo in dubbio le sue capacita’ di giudizio e analisi.

GTP divenne ancora piu’ blu e rispose: “Va bene va bene, ti faro’ sapere. Ora vattene, prendero’ in esame al cosa PERSONALMENTE e IMMEDIATAMENTE”.

Polifemo si giro’ agilmente sulle sue due ruote, ma senza abbassarsi come la procedura di riduzione di attrito avrebbe previsto, e usci’ giganteggiando con la sua ombra sul povero GPT, che intanto  stava dirigendo tutta la sua energia al sistema neurale. Il braccio idraulico, privato di energia, si stava progressivamente abbassando emettendo un sospiro loffo.

Fu cosi’ che inizio la fine delle Macchine.

 

Posted in Italian Content, Racconti | Tagged | Leave a comment