Imponerande, kändes rapp också, jag var nog uppe i nästan 2 MIPS ett tag. Vad är fönstret till höger för?
Är OR1000 alltså din egen OR-baserade processorarkitektur?
Jo fy vilken massa jobb det blir. Jag har en föreställning om att man gör något i stil med detta:
Har för mig att gcc kan spotta ur sig ett slags generaliserad assembler-kod med filändelsen ".s". Nu var det länge sedan jag meckade med sånt här men vill minnas det som ett mellanspråk. Man skriver sin CPU och här kan man ju faktiskt isolera vissa delar och tillsvidare ta till lite högnivåkod. Efter att man skrivit sin CPU får man väl ta och skriva sig en "snurra" som baserat på mellankoden genererar motsvarande maskinkod för den egna CPUn. Redan här kan man ju provköra lite superenkla program, t.ex. loopa och summera tal, den typen av grejer.
Sedan tar man en Linux-kärna och lägger till och/eller modifierar de mest grundläggande hårdvarunära delarna; minnesstruktur, interruptkontroller, diskkontroller, realtidsklocka och allt annat som behövs för att skapa en dator. Den här biten är nog det som jag skulle ha mest besvär med tror jag.
Sedan kompilerar man kärnan och skapar en boot image komprimerad och hela middevitten. Så länge det hela emuleras i mjukvara så är ju t.ex. "bootloadern" en baggis. Sedan blir det väl att kompilera verktygen som krävs "på andra sidan" inkl. tool chain med gcc, länkare och så vidare. Sedan lägger man dessa saker i ett filsystem och bakar ihop med bootimagen. Bootar upp Linux, mounta filsystemet och test verktyg och kompliera resterande nyttoprogram där. Här är man framme i ett läge motsvarande dessa javascript-datorer vi sett tidigare i denna tråd.
I det här läget kan man ju "stop and smell the roses" - leka och ha skoj i sin Linux på sin egen dator, kompilera diverse program, daemons och konfigurera start-up sekvensen mm, allt för att förfina sin linux. Kanske skriva en NIC med brygga till hosten så att man får internet. Denna Linux-image blir den som kommer att köras senare också.
Sedan skall ju allt över på en FPGA och då skulle det verkligt knepiga börja, i alla fall för min del. En MMU t.ex. torde vara hyggligt enkel emulera i host-kod med hypercalls. Att plötsligt realisera den med "NAND-grindar" blir en helt annan 5:a...
Man kunde ju redan från början skriva emulatorn tämligen hårdvaru-realistisk. Detta på ett sätt som underlättar en portning till WHDL eller Verilog. T.ex. använda ganska "atomära" grundfunktioner och alltså inte fuska genom att packa in en massa avancerad logik i host-kod. Om man hittar en bra avgränsning melllan de atomära delarna så kan man ju ta dem en i taget och implementera om ännu mer maskinnära sätt, söndra och härska liksom. Låta den evolera fram successivt.
Slutligen portar man sin dator till FPGA eller kanske CPLD. Lätt som en plätt ju
Tror aldrig jag får tid till ett sånt här mastodontprojekt, kanske när jag blir pensinär. Fast vid det laget har jag troligen omvärderat hela tillvaron några gånger och lägger hellre tiden på att träffa barnbarnen, mata ankorna, resa och läsa böcker
