Newsgroup: it.comp.retrocomputing
Titolo: ri-sviluppo vecchi computer

Ciao a tutti,
Mi presento, mi chiamo Damiano ed entro per la prima volta in questo NG, con 
lo scopo di cercare appassionati, come il sottoscritto, di elettronica 
digitale e vecchi computer.
Come molti di voi suppongo ho cominciato negli anni 80 con il mitico 
Commodore 64.
Al di là dei ricordi, mi piacerebbe, sempre a livello di hobby si intende, 
non ho ambizioni industriali, ripartire la dove si è interrotto lo sviluppo 
di queste macchine 20 anni fa.
Mi sono chiesto come potrebbe essere oggi un Commodore 64 o un Apple II se 
lo sviluppo della linea avesse proseguito, come è avvenuto per i PC con 
l'introduzione di architetture a 32 bit, coprocessori avanzati ecc.. ecc..
Lo scopo di questo annuncio è cercare appasionati come il sottoscritto 
dotati di interesse e anche di competenze tecniche HW/SW a vari livelli che 
siano interessati alla creazione di una macchina retro-compatibile (!) con 
caratteristiche sufficienti per effettuare le operazioni che si fanno 
oggigiorno, vale a dire, avere un S.o. multitasking, un'interfaccia grafica, 
navigare su internet ecc.. ecc.., mantenendo la compatibilità ove possibile 
con le vecchie applicazioni, e anche con la vecchia architettura CPU/ISA.
Sono sicuro che un'oggetto di questo genere troverebbe molto seguito tra 
hobbisti e appassionati.
Veniamo al progetto che ho in mente:
Ho fatto un pò di ricerca in rete e vedo che non sono l'unico ad averci 
pensato, esistono schede di espansione basate sul micro 65c816, 
realizzazioni in FPGA di nuove macchine (vedi C-one), esiste anche una 
ricostruzione dell'Amiga (minimig), ma è un altro discorso.
Personalmente non sono molto soddisfatto di quello che ho trovato, 
soprattutto per quanto riguarda la cpu; il 65c816 è un mezzo accrocchio 
originato dai primi tentativi di estensione delle CPU a 16 bit degli anni 
80, mentre del 65gz032 ho trovato solo delle specifiche e nulla più, il 
Terbium che prospettava  la WDC poi è vaporware allo stato puro.
Ora, considerato che un devkit su fpga costa ormai poche centinaia di euro, 
mi sono proposto di acquistarne uno e iniziare a giocare per cominciare con 
il 6502/10 che equipaggiava Apple/Commodore dei primi anni 80, si cui in 
rete si trova anche la documentazione tecnica orignale della MOS Technology, 
e numerose re-implementazioni in VHDL.
Personalmente vorrei una CPU che sia facilmente programmabile in Assembler, 
come il 6502 originale, quindi escludo la classica architettura RISC con 
istruzioni a lunghezza fissa, tip ARM / Mips, preferisco operare in maniera 
simile a quanto è stato fatto per incrementare le prestazioni delle cpu CISC 
tradizionali, ovvero un core risc nascosto preposto all'esecuzione rapida 
delle istruzioni originali (e alle loro estensioni a 16/32 bit) tradotte in 
istruzioni risc al volo dal decoder.
Questo farà si che ad esempio l'istruzione CLC occupi 1 byte e non 4, anche 
se poi a livello risc sarà tradotta al vol in un'istruzione a 32 bit del 
tipo
BIC P #mask
Usando un'architettura di questo genere ho vautato che le 56 istruzioni del 
6502 originale si rducono a una ventina di istruzioni RISC a 32 bit.
Per quanto riguarda l'architettura ISA ho trovato buona ispirazione nella 
CPU Freescale Coldfire, la cui ISA con lunghezza variabile 16/32/48 bit mi 
sembra un buon ibrido che incorpora alcuni concetti RISC ma permette di 
mantenere parte del set di istruzioni del 68000, e vorrei adottare una 
architettura simile.
Il tutto ovviamente semplificato e ortogonalizzato al massimo.
Per chi se ne intende di asseler 6502 sarebbe possibile avere istruzioni del 
tipo
LDX $CC00.32FF    ; 48 bit lenght; Absolute 32 bit
STX $DD00.32FF,A    ; 48 bit lenght ; indexed 32 bit
Ma sarebbe anche utile espandere il numero di registri e funzioni, ad 
esempio avere indirizzamenti su registro
LDA $C000+BP    ; 32 bit lenght, 16 bit offset with 32 bit base pointer
LDA ($C000+BP),Y    ; 32 bit lenght, Indirect with base pointer - Indexed
LDA (X)                   ; 16 bit lenght, register indirect
Ovviamente avrete capito che la cpu che ho in mente è a 32 bit.
Voglio assolutamente evitare istruzioni come ARM in cui ogni istruzione fa 
2-4 cose insieme i valori immediati hanno un numero di bit ridotto e 
differente a seconda dell'istruzione usata ecc. ecc.., saràa cnhe efficiente 
ma molto incasinato da programmare in assembler. Voglio un assembler pulito, 
gradevole, con un numero ridotto di sitruzioni facili anche da ricordare, 
soprattutto per chi ha già lavorato con il 6502, per non snaturare l'essenza 
della cpu.
Una delle idee alla base (noterete lassenza del suffisso .b .w .l davanti 
alle istruzioni riportate) è usare registri a 8 bit per fare operazioni a 8 
bit, registri a 16 bit per fare operazioni a 16 bit e registri a 32 bit per 
fare operazioni a 32 bit, in modo che sia implicito nella specifica del 
registro la lunghezza del dato da trattare. Le istruzioni di trasferimento 
saranno opportunamente estese per prevedere il trasferimento di dati tra 
registri di diversa lunghezza ed eventuale estensione di segno.
In sostanza come forse si evince, non è la velocità il principale obiettivo 
(anche perchè in una fpga non si può certo pensare di competere con il core 
2 di intel), ma la semplicità di programmazione  e la pulizia del progetto 
comlessivo, e il fix di alcuni flaw della CPU 6502 originale.
Se interessati fatevi vivi.
Ciao
Damiano

 Commodore 64.
Ciao, una domanda.
Secondo te un C64 in FPGA potrebbe funzionare su 1chipMSX?
http://www.bazix.nl/onechipmsx.html