Kira computer

L'emozione di far battere il cuore ad un vecchio CERDIP

 

Kira dorme sotto i suoi figli Trane e Naima.

Kira, la mia musa ispiratrice, dorme facendo da cuscino ai suoi figli Trane e Naima.

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).

 

Vista dell'aspetto attuale di Kira computer.

Kira computer nel suo chassis in compagnia della sua tastiera e mouse.

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.

 

Mappa di memoria e teoria della decodifica.

Mappa di memoria e teoria della decodifica.

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:

  1. Cpu board
  2. Rom board
  3. Ram board
  4. I/O board

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.

Download sorgenti

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.

L'adattatore autocostruito predisposto per i Termination Adaptor.

L'adattatore autocostruito predisposto per i Termination Adaptor.

*          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