On 09/17/2013 12:24 AM, Bjarni Juliusson wrote:
Jag har funderat en del på att man skulle göra nåt enkelt med mikrokod men insåg att det blir nästa generation av CPU isåfall :-) Till att börja med handlar det om att få till nåt alls :-)
Jag kommer att köra med mikrokod är jag rätt säker på. Delvis för att få upp koddensiteten, och delvis för att få en dräglig dator att programmera assembler på. Inte särskilt komplexa instruktioner dock.
Det borde inte vara alltför svårt att hitta ett bra sätt att skriva mikrokod på. Det jag mest har funderat på är hur man hanterar typ subrutiner, villkorliga hopp och sånt på nåt bra sätt i mikrokoden. Men jag har inte gett mej in djupare på ämnet ännu :-)
Skulle vara intressant att läsa nån detaljerad studie av koddensitet som jämför olika arkitekturer. Undrar om det finns nånstans...
Jag har sett nåt sånt för länge sen där man jämförde lite olika med VAX som referens, och sen kollade hur mycket större alla andra arkitekturer blev. Google kan nog vara din vän här :-)
Jag hittade och läste den här:
http://www.researchgate.net/publication/224114307_Code_density_concerns_for_...
De jämför handoptimerad assemblerkod på 21 olika arkitekturer och visar lite grann vilka egenskaper hos arkitekturerna som förbättrar och försämrar koddensiteten. Tyvärr finns varken PDP-8 eller Nova med, och de har klumpat ihop PDP-11 tillsammans med 6502 och Z80 som "8/16-bit", bah. De hade gott kunnat klumpa ihop PDP-11 med 68k tycker jag.
Den jag kollade på var från 80-talet och betydligt mer djupgående. Den här tog inte hänsyn till sånt som kompilatorerna inte genererade ens.
Nåja, det var rätt kul läsning i alla fall. VAX är med, och de vanliga RISCarna, och x86 och Itanium och ARM och AVR med flera. Variabel instruktionslängd med väldigt korta instruktionskodningar för vanliga operationer var mest effektivt. Sen fanns autoinkrementerande adressering, kortare instruktioner för små immediate-konstanter, divisionsinstruktioner (bra för inläsning/utskrifter av tal), samt få explicita operander per instruktion med i listan.
Min arkitektur har 6-bitars instruktioner, däribland laddning av 5-bitars konstanter, två separata instruktionsklasser för instruktioner med flexibla operander respektive implicita operander, valfri specifikation av operander med hjälp av separata opkoder innan en instruktion, implicit ackumulator, och autoinkrementerande adressering. Nu sitter jag och funderar på hur jag kan implementera division i mikrokod. :) :)
I Patterson/Hennessy, http://www.amazon.com/Computer-Organization-Design-Fourth-Edition/dp/0123747... är det nog nuför tiden, så finns det en massa bra saker för såna som vill bygga CPUer. Den behandlar hur MIPS är uppbyggd mestadels men ger en hel del bra tips om grundlogiken. Jag har första upplagan som vi hade som lärobok i nån kurs, synnerligen bra!
Skulle behöva rör med separata katoder också, för katodföljare. Har några, vet inte hur många jag kommer att behöva. Det blir rör i noval- eller oktalsockel i sådana fall. Jag kan hålla ögonen öppna, det lär behövas några såna för mig också :-)
Japp. Jag har lite ECC83 och ECC803 med mera. Inte så många dock, och det skulle vara trevligt med en massa likadana rör. ECC83 kan du sälja för bra med pengar om det är NOS, jag sålde ett gäng Telefunken och Philips för 200 pix styck och köpte nya JJ för $10 :-)
Jag har börjat rita lite på ALU:n också, och den käkar logik kan man säga. Men, det verkar som man kan göra en smart lösning med dioder för att emulera en mux, där man driver alla utgångar högt med en effektpentod utom den man vill ha resultatet för. Har inte riktigt sanitycheckat det här än, men det "borde" gå :-)
Har du grejer så du kan labba lite med kretslösningar?
Jodå. Jag har dammat av några gammelradioapparater för att få anodspänning samt köpt lite ECC91 och EH90 för att labba. Skall bara sortera en del passiva komponenter som ligger i en enda röra så att man hittar vad man skall ha för nåt :-) -- Ragge