Warning: Missing argument 2 for wpdb::prepare(), called in /home/stromber/public_html/kryptoblog/wp-content/plugins/wp-super-edit/wp-super-edit.core.class.php on line 109 and defined in /home/stromber/public_html/kryptoblog/wp-includes/wp-db.php on line 1222
En liten 6502-emulator » Kryptoblog

En liten 6502-emulator

July 15th, 2008 by Joachim Strömbergson Leave a reply »

Vad passar bättre en regntung semesterdag än testkoda en emulator av den gamla processorn MOS 6502?

MOS 6502

Jag kunde i alla fall inte komma på något bättre och hackade lite Python nu på eftermiddagen. 176 rader senare inklusive kommentarer, filhuvud och testfall kan jag i alla fall köra några instruktioner:


js@sotis:/Users/js/tmp>./6502.py
MOS 6502: CPU initializing.
MOS 6502: Dumping memory from 100 to 111
100: ea
101: ea
102: ea
103: ea
104: ea
105: ea
106: ea
107: ea
108: ea
109: ea
10a: ea
10b: ea
10c: ea
10d: ea
10e: ea
10f: ea
110: 60
111: 0
MOS 6502: Running program from start address 100
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing NOP
MOS 6502: Executing RTS
Cycles executed: 34

(Japp, min emulator räknar bland annat även cykler. Har alltid velat ha den funktionen. Tänk vad många cykler man räknade i sin finniga ungdom när man kodade på C64:an.)

Det saknas en massa instruktioner och jag är inte säker på om jag verkligen skall ha en separat decode-funktion och en exekverings-funktion. Det blir väldigt mycket upprepning av if-elsif-elsif-else i de två funktionerna.

En intressant (nåja) observation är att min emulator, skriven i ett intepreterande språk, antagligen är flera gånger snabbare än den verkliga processorn. Dock inte lika snabb som den variant av 6502 vi byggde in i InformAsics VPN-chip, den går i upp till 33 MHz.

No related posts.

Related posts brought to you by Yet Another Related Posts Plugin.

Advertisement

7 comments

  1. jorgenl says:

    En annan sorts människa hade kanske sagt, “Get a life!”, men jag påminns istället om att jag gjorde en sån emulator för just 6502 nån gång ca 1980 i pascal på Univac 1108 på Lunds Datacentral. Också som ett hobbyprojekt… Hade nämligen byggt en byggsatsdator som det satt en sådan i, och det var nästan stört omöjligt att assemblerprogrammera via den inbyggda basictolken, så fort nåt kraschade så fick man börja om från början, det fanns ju inget sekundärminne, med en emulator gick det ju tom att debugga.

  2. e8johan says:

    6502 var en härlig liten gynnare. Ser jag tillbaka på de processorer jag arbetat med på maskinkodsnivå så är ju min favorit (hittills) 68k-serien. Mycket balanserad design, bra symmetri i instruktionsuppsättningen. Dock så har den lite problem när man ska implementera atomära operationer för semaforer i linux – har för mig att man måste patcha kärnan för det så prestandan blir ju inte riktigt optimal.

    Sedan tycker jag att du kanske skulle satsa på lite mer performance istället för tolkade språk – t.ex. FPGA:er – http://www.sprow.co.uk/fpgas/free6502.htm . 🙂

  3. Aloha!

    Välkommen till Kryptoblog e8johan.

    Visst är 68K är en fin arkitektur. Jag gillar även Power-arkitekturens ISA. Bland enklare processorer är AVR ett under av renhet, speciellt om man jämför med hemskheter som PIC.

    Visst håller jag på med processorer i FPGA:er. Alteras Nios II är en riktigt snygg processor.

    Den 6502 vi har i VPN-chippet började som en fri 6502-core i VHDL som först översattes till Verilog, fick sin opkod optimerad och sedan ombyggd minneshanterare för att få till den säkerhet vi ville ha. Går som sagt i 33 MHz (även i en FPGA), vilket gör den till en av de snabbaste 6502-processorer som byggts.

  4. e8johan says:

    Har inte jobbat på den nivån med vare sig Power eller AVR. Ska försöka styra saker och ting dig nästa gång jag får chansen. Sist jag pillade med Nios var åt en kund som vill ha C++-stöd. Tydligen så tillhandahåller inte Altera det. Tråkigt, tycker en Qt-nörd som jag. 🙂

    En liten kul detalj om FPGA-baserade processorer är ju att Göteborg är lite av ett kompetenskluster inom området (tycker jag som bor och verkar i området).

    Nere i Mölndal sitter Xilinx och hackar på sin Microblaze. Jag-mötte-Lassie-klubben noterar att en av killarna satt och exjobbade parallellt med mig på TE när det begav sig.

    Lite mer centralt ligger Gaisler Research som utvecklare bl.a. LEONx-processorn som är en SPARC-kompatibel CPU lämplig för både ASIC och FPGA. Jag har för mig att det finns en fri version av den, men även en sluten som är anpassad till rymdindustrin (tål strålning, använder felkorrigering så att data överförs korrekt inom CPUn).

    Sedan finns ju förstås mina egna synder – en DLX-implementation (från Patterson & Hennessy böckerna). En enkelt 32-bitars RISC arkitektur som vi körde i en FPGA på Chalmers. Koden (VHDL) är fri och finns på http://digitalfanatics.org/index.php?title=JAM_CPU . Själv kommer jag mest ihåg att jag kunde assemblera våra testprogram för hand – under åtta veckors jobb hade jag lärt mig större delen av instruktionsuppsättningen utantill. Antar att det finns fler Chalmersalster om man letar runt lite.

  5. Aloha!

    Altera använder GCC som toolchain för SW-utveckling till Nios II (+ Eclipse CDT för GUI, projekthantering etc). Därmed finns det stöd för C++, även om HAL-paketet i första hand är avsett för C. Det finns även tredjepartsstöd för C++ till Nios II.

    Japp. Göran Bilski, gammal TE-konsult är pappa till MicroBlaze. Han flyttade hem från USA och nu är dom ett gäng som ansvarar för den utvecklingen. Jag jobbade med Göran innan han stack till USA och såg då Bilski-processorn innan den blev MicroBlaze. En bra processor, även om jag personligen är mer kompis med Nios II, vilket främst beror på verktygsstödet.

    Jiri, Sandi och de andra på Gaisler Research är mycket duktiga. LEON3, som är en SPARCv8-kompatibel core är GPL:ad. Men som du skriver finns den även med annan licens. Jiri Gaisler jobbade för ESA och när han doktorerade utvecklade han just en feltolerant SPARC-processor – LEON.

    Håller helt med om att det är kanonkul att det finns mycket sådant här i Götet. Fin liten MIPS R2000/H&P-processor det där förresten.

  6. Björn Felten says:

    Ahh… Ljuva, nostalgiska tankar.

    Trots att jag jobbade mest med 6800, så var min favorit 6303 (den som satt i Psion Organiser II). Jag tror jag skall leta upp min gamla disassemblerare (skriven i TP7) för 6303:an och se om jag kan göra som du—en emulator.

  7. e8johan says:

    Lite sent inlägg från mig, men så är det i semestertider.

    Kul att se att du också simmar i den Göteborska ankdammen. Själv exjobbade jag på TE när Bilski var i staterna, så jag har aldrig träffat honom i verkligheten.

    Var håller du hus i verkligheten? (kanske vill flytta konversationen till mail…)

Leave a Reply

You must be logged in to post a comment.