Pic Micro, Arduino, Atmel, Microchip, Freescale, Texas Instrument, ecc. Strumenti di sviluppo, firmware e progetti.
#7981
Era un pò che questa cosa mi frullava in testa... ovvero fare una versione della scheda Z80-MBC2 usando una CPU V20.
In particolare ho usato la versione full static CMOS della V20, ovvero un uPD70108H, cosa che mi porterà importanti semplificazioni.

20190416_173956.jpg


Ho così realizzato un primo schema di prova e montato il tutto su un paio di breadboard:

20200126_105620b.jpg


Per facilitarmi le cosa ho utilizzato una scheda ARMando che simulerà tutto l'I/O necessario.
La versione finale probabilmente userà un Atmel32, in modo da avere tutti componenti THP.

Sarà un lungo viaggio dagli esiti incerti...
#7996
Ho iniziato i primi "esperimenti" con la CPU V20.
Essendo una versione "full static" posso eseguire singoli impulsi di clock ed usare i GPIO della scheda ARMando come un Logic Analyzer.

Nella foto ho forzato una istruzione di HALT (0xF4) sul bus dati facendo entrare la CPU V20 nella stato di HALT evidenziato dall'accensione del led blu:

20200203_185726b.jpg


Codice: Seleziona tuttoV20 on breadboard - A090120
IOS - I/O Subsystem (STM32F030R8) - S010220


 * RESET Done *
i = 0 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 1 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 2 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 3 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 4 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 5 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 6 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 7 HLDAK = 0
ASTB = 0 IOM_ = 1 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 1
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 1

i = 8 HLDAK = 0
ASTB = 1 IOM_ = 0 RD_ = 1 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 0
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 0

i = 9 HLDAK = 0
ASTB = 0 IOM_ = 0 RD_ = 0 WR_ = 1
A4 = 1 A3 = 0 A2 = 0 A1 = 0 A0 = 0
D7 = 1 D6 = 1 D5 = 1 D4 = 1 D3 = 0 D2 = 0 D1 = 0 D0 = 0


Il prossimo passo sarà predisporre una la sequenza di boot per caricare ed eseguire un file binario da microSD...
#8006
Sono riuscito a caricare in RAM e far eseguire un brevissimo programma di test di sole tre istruzioni assembler x86. :D
Il clock è in modalità "single pulse", per cui è molto lento (ma così mi serve in questa fase).
Il led bianco segnala operazioni di I/O (come quella dell'istruzione IN), il led blu segnala la CPU in modalità HALT.

Il codice macchina viene prima caricato in RAM , poi la CPU è forzata nello stato di HALT. Successivamente è eseguito un reset della CPU che esegue il codice in RAM (ricordo che al reset viene eseguita la prima istruzione all'indirizzo FFFF:0000, nel video l'indirizzo della prima istruzione è sbagliato... :shock: ):

Ciao a tutti, qualche tempo fa mi è stato regato u[…]

2) qualcuno con più esperienza di me saprebbe in[…]

Gerardo, sei gentilmente pregato di attenerti alle[…]

Ciao a tutti, ho un problema con la mia stampante […]

Visita il nostro canale telegram