Kira computer
L'emozione di far battere il cuore ad un vecchio CERDIP
Kira 68010 computer , il nome è ispirato da una cagnolona che mi sta molto a cuore, nasce dopo i precedenti esperimenti con il 6502.
Si tratta di un homebrew computer basato su Motorola m68k.
La principale fonte di informazioni è stata il testo:
Microprocessor Systems Design
68000 Hardware, Software, and Interfacing
di Mr. Alan Clements (che ringrazio per la sua instancabile disponibilità) .
(Come da lui stesso suggerito: "you don't need the "Mr" for a caption - it's a subtlety of English! ")
Ho assemblato il tutto su millefori formato europa (160mmx100mm) realizzando i cablaggi con un filo da Wire wrapping
30awg che però ho preferito utilizzare col saldatore.
E' stato scelto di utilizzare colori differenti a seconda si trattasse di linee dati (verde), indirizzi (giallo), o segnali di controllo (bianco).
La CPU è un MC68010 che ho preferito al 68000 se non altro per la possibilità di rilocare il VBR.
Di non secondaria importanza l'abilità dello 010 di 'tornare sui suoi passi' e poter far girare di nuovo un eventuale ciclo terminato con una eccezione di Bus error.
I dati salvati nello Stack sono sufficienti ad esempio a caricare dal disco la pagina di memoria mancante che aveva scatenato l'eccezione e riprendere l'esecuzione da dove era stata interrotta.
Si sta parlando quindi di una sorta di abilità di simulare ad uso del software, per mezzo di una opportuna routine di gestione delle eccezioni, caratteristiche hardware non esistenti.
La parola virtualizzazione ci dice qualcosa?
Nel 1982 queste ed altre caratteristiche fecero di questa fortunata famiglia di processori un riferimento assoluto ed un ottimo veicolo per insegnare ed apprendere l'architettura dei calcolatori.
In realtà le novità introdotte dal 68010 non finiscono qui ma magari se ne potrà parlare con più accuratezza in un secondo momento.
Mi è sembrato conveniente dividere l'hardware in blocchi funzionali e su differenti schede che incorporano, quando necessario, la loro decodifica degli indirizzi.
Sono quindi nate nell'ordine riportato le seguenti schede:
Prima di addentrarci nella descrizione di questi singoli blocchi rinfreschiamo un po' di concetti teorici.
Qui di seguito invece i sorgenti in tar.gz del "Sistema operativo" (si legga, rudimentale monitor ASM) assemblati con IDE68K ed un breve video dell'accensione del computer registrato su pc connesso via RS232 con RecordMyDesktop.
Kira si inizializza! 🙂 (Video)
Per scopi puramente affettivi riporto il primo brevissimo codice scritto per fare un poco di verifiche e debug dell'hardware con l'HP16702A ed il 68010 inverse assembler! 🙂
In quell'occasione decisi di dotarmi della semplice schedina in foto per poter connettere l'analizzatore di stati logici al backplane VME in maniera rapida ed affidabile utilizzando i Terminal Adaptor HP 01650-63203.
* Exception vectors table org $0000 dc.l $00200000 Reset - Initial supervisor stack pointer dc.l $00000400 Reset - Initial program counter value dc.l berr org $0400 andi.w #$DFFF,SR * Start Test code RomBoard ********************************** move.b #$03,D0 movea.l #$0400,A0 readloop move.l (A0)+,D1 subq.b #1,D0 bne readloop move.b #$03,D0 move.l #$00100000,A0 dbeqtest1 move.b D0,(A0)+ dbeq D0,dbeqtest1 move.l #$03,D0 move.l #$00100000,A0 move.l #$0010000F,A1 dbeqtest2 move.b (A0)+,(A1)+ dbeq D0,dbeqtest2 * End Test Code RomBoard *********************************** nop nop * Start Test code RamBoard ********************************** move.l #$000FFFFF,D0 movea.l #$00000000,A0 movea.l #$00100000,A1 writeloop1 move.b (A0)+,(a1)+ subq.l #$01,D0 bne writeloop1 move.l #$000FFFFF,D0 movea.l #$00100000,A0 movea.l #$00200000,A1 writeloop2 move.b (A0)+,(a1)+ subq.l #$01,D0 bne writeloop2 * Stop Test code RamBoard ********************************** move.w D0,$0000 loop1 jmp loop1 berr jmp berr