Jaka prosta architektura CPU do emulacji?

1

WITAM

Szybkie pytanie - mam ochotę napisać jakiś prosty emulator CPU, ale nie wiem za bardzo czego :D Chciałbym, żeby to było w miarę proste i można było się oddać radosnemu klepaniu spaghetti bez czytania specki godzinami, ale fajnie by było, żeby istniał kompilator C pod tę architekturę, bo wtedy będzie więcej frajdy z odpalania programów na tym. Jakieś pomysły?

EDIT:
Moim celem jest czysta zabawa, żadne praktyczne zastosowanie nie jest potrzebne. Nie musi być kompilatora konkretnie C, byle by to było coś lepszego niż assembler.

1

Na 8080 pewnie znajdziesz kompilator C a architektura byłą dużo prostsza niż kolejne serie.

mad_penguin napisał(a):

WITAM

Zaraz ktoś ci wyjaśni, dlaczego nie pisze się witam.

Szybkie pytanie - mam ochotę napisać jakiś prosty emulator CPU, ale nie wiem za bardzo czego :D Chciałbym, żeby to było w miarę proste i można było się oddać radosnemu klepaniu spaghetti bez czytania specki godzinami, ale fajnie by było, żeby istniał kompilator C pod tę architekturę, bo wtedy będzie więcej frajdy z odpalania programów na tym. Jakieś pomysły?

Na 8080 pewnie znajdziesz kompilator C a architektura byłą dużo prostsza niż 8086. Pytanie tylko, czy twoim celem jest zabawa czyj jakiś konkretny efekt.

1

RISC-V? Na zajęciach implementowaliśmy w Verilogu, podstawowa architektura bez rozszerzeń jest prosta.

3

Te dawne procesory, choć mało rozbudowane, miały miliony niuansów. Każdy rejestr z jakąś subtelnością itd... w emulatorze te różnice by tzreba ogarnąć

Nowe RISC są bardziej regularne. Może jakis AVR (Atmel) ?

Jak mowa o 8080, to jego kompatybilne rozwiniecie Zilog Z80, będzie łatwiej znaleźć, bo całkiem niedawno jeszcze żył na rynku pierwotnym.

0

RISC-V mam wrażenie, że wymaga za dużo czytania :D ale przemyślę jeszcze raz, a także sprawdzę pozostałe propozycje. Celem jest wyłącznie zabawa.

2

A z drugiej flanki, napisać prosty interpreter bytecodu Java ? Taka JVM dla ubogich

Rozbudowa / przekształcenie interpretera Lua ?

0

Faktycznie, JVM dla ubogich brzmi jak całkiem niezły pomysł, zwłaszcza, że już kiedyś nad tym myślałem, dzięki!

1

Ewentualnie masz jeszcze:

  • WebAsm
  • BEAM - tutaj implementacja procesów i wiadomości może być ciekawa

Alternatywnie możesz stworzyć własną prostą architekturę.

0

Własna architektura odpada, bo chciałbym, żeby można było pisać dla niej programy w czymś bardziej rozwiniętym niż prosty asembler, a nie mam tyle motywacji, żeby cały taki ekosystem stworzyć. WebAsm też obczaję. BEAM brzmi faktycznie jak ciekawe wyzwanie, ale może na przyszłość.

2
UglyMan napisał(a):

Na 8080 pewnie znajdziesz kompilator C a architektura byłą dużo prostsza niż kolejne serie.

mad_penguin napisał(a):

WITAM

Zaraz ktoś ci wyjaśni, dlaczego nie pisze się witam.

Dziś mi się nie chce

mad_penguin napisał(a):

mam ochotę napisać jakiś prosty emulator CPU

A ja proponuję trochę co innego. Kiedyś jeden człowiek napisał prostacki kompilator C bez optymalizacji 8cc. Kompilator jest bardzo prostacki, bo zdaje się że założenie było że zostanie napisany w 40 dni. Ale ten kompilator generuje działający podzbiór 8086. Bardzo mały podzbiór, co było podstawą do projektu ELVM i teraz mamy kompilator C do wielu języków ezoterycznych. Ale skoro to taki mały podzbiór, że łatwo go można skompilować do BrainFucka czy WhiteSpace to myślę, że łatwo by było też napisać interpreter takiego asemblera

2

Polecam 6502C.
Kompilator na x86: cc65
Lista instrukcji ma 56 rozkazow (mozna dorzucic nieudokumentowane w dogrywce).
Zestaw rejestrow i flag ograniczony do minimum.
Emulatorow na ktorych mozna sie wzorowac mnostwo.

http://www.6502.org/books
https://hackaday.com/2020/09/30/video-exploring-the-abandoned-birthplace-of-the-6502-and-commodore-64/

4

Generalnie jak Ci się nie chce czytać to nie wiele fajnych rzeczy można zrobić. Jak by Ci się chciało czytać to można sobie napisać emulator NES'a czy GameBoy'a i faktycznie odpalić np. Tetrisa.

Niestety dokładna emulacja wielu procesorów nie jest możliwa w oderwaniu od sprzętu. Inaczej ciężko emulować np. przerwania czy wejście/wyjście, a bez tego odpalanie programów i sprawdzanie co się znajduje pod adresami pamięci to niezbyt emocjonujące zajęcie.

Dlatego ja polecę tobie emulację maszyny turinga :D Bonus jeżeli uda Ci się napisać uniwersalną maszynę turinga (polecam książkę Annotated Turing). Minus jest taki że nie ma kompilatora C -> TM.

Osobiście radzę podejść do sprawy z drugiej strony i zbudować sobie to https://eater.net/6502 a dopiero potem napisać emulator całego komputerka.

1

Albo zacząć od kompletnego hello world: https://en.wikipedia.org/wiki/CHIP-8 :)

3

AVR?

2

6502 — prosta jak budowa cepa, używana w kultowych urządzeniach: C64 i NES, tak więc będzie na czym testować i implementacji, z których można zgapiać. :)
Pomysł z JVM też brzmi ciekawie.

4

na youtube jest dużo poradników o MOS 6502

Polecam także coleslava nagrał filmik o Commodore

Polecałbym także koledze jak się interesuje zbudować komputer na płytce stykowej

3

To ja zaproponuję oryginalny 8086 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1