logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Nie taki zwykly emulator 65C816/65C02/8085 na STM32H750

gregor124 03 Maj 2026 20:54 267 3

TL;DR

  • STM32H750 emuluje 65C816, 65C02 i 8085, tworząc uniwersalny układ do uruchamiania starych programów, terminala, BASIC-a i własnych funkcji ARM.
  • Rdzeniem projektu jest przeniesienie emulatora z klasycznych ARM na Cortex-ARM oraz napisanie emulacji CPU w Macro Assemblerze z dostępem do peryferiów STM32 z poziomu emulowanych programów.
  • Płytka STM32H750 ma 128 kb pamięci EPROM, prawie 1 Mb RAM i można ją rozbudować o zewnętrzną pamięć RAM do 16 megabajtów.
  • Emulacja przechodzi znane testy zgodności i uruchamia Apple BASIC, Microsoft BASIC, BBC BASIC, EhBASIC, VTL02 oraz praktycznie całe oprogramowanie Apple-1.
  • Największe ograniczenia to niepełna emulacja 8080, która zachowuje się bardziej jak 8085, oraz brak zaimplementowanej grafiki, więc gry jeszcze nie działają.
Wygenerowane przez model językowy.
REKLAMA
📢 Słuchaj (AI):
  • Chciałbym zaprezentować pewien projekt rozwijany od dłuższego czasu.
    Początkowo był to emulator procesora 6502 działający na klasycznych układach ARM.
    Niestety, gdy już jego realizacja praktycznie zbliżała się do końca, okazało się, że rozwój klasycznych ARM jakby się zatrzymał i pojawiło się sporo nowych układów podrodziny Cortex ARM.
    Nie są już one tak przyjazne do programowania w asemblerze, ich filozofia wprowadza sporo ograniczeń w stosunku do tej czystej i przyjemnej, wywodzącej się z procesorów ARM,
    ale postanowiłem jednak obłaskawić bestię i przenieść swój projekt na platformę Cortex-ARM.

    Aby mieć trochę dreszczyku emocji, postanowiłem tym razem zrobić emulację procesora 65c816.
    Okazało się, że Cortex ARM i Macro Assembler to całkiem miła para i z rozpędu dorobiłem do 65c816 emulację CPU i8080 oraz 65C02 i mam już w planie kolejne ;)

    Chyba wyszło nie najgorzej, bo okazało się, że emulowane procesory, no może poza 8080, ale to z powodu niedostępności porządnej dokumentacji (znalazłem w niej kilka błędów, zresztą w dokumentacji z80 też jest ich sporo),
    okazał się nie do końca zgodny z oryginałem.
    Po zastosowaniu się do oryginalnej dokumentacji bardziej wyszedł z tego 8085 niż 8080 ;)
    W każdym razie będę musiał do 8080 jeszcze wrócić, a problemy są jedynie z zachowaniem niezdefiniowanych flag procesora, co akurat nie ma większego wpływu na działanie programów,
    w końcu wiele różnych implementacji tego procesora także miało z tym problem.
    Co do reszty przeszły wszystkie znane mi i dostępne w sieci testy zgodności.
    Przy okazji udało mi się uruchomić całkiem sporo oprogramowania z dawnych lat, jak interpretery BASIC od Apple, Microsoftu, z komputerów BBC czy darmowy EhBASIC, język VTL02
    (to taki zajmujący niewiele pamięci i bardzo szybki interpreter, który początkowo powstał na komputery ALTAIR8800 i Altair680b).
    Właściwie można uruchomić całe oprogramowanie stworzone dla Apple-1.
    Z innych komputerów problematyczne są gry z powodu, jak na razie, niezaimplementowania grafiki, ale prawdopodobnie niedługo to się zmieni.
    W końcu układ, na którym pracuję, ma taką możliwość, ba, ma nawet jakiś akcelerator dla JPEG.

    Może co nieco o platformie sprzętowej. Jest to ogólnie dostępna płytka oparta o kontroler STM32H750.
    Jest to naprawdę układ potężny, a przy tym stosunkowo tani w stosunku do oferowanych możliwości.
    Może nie jest tak popularny wśród programujących w różnych C ze względu na stosunkowo małą pojemność pamięci EPROM (tylko 128 kb),
    ale jak dla mnie wystarczającą aż nadto, ale co mnie szczególnie ucieszyło, ma on prawie 1 Mb RAM i można go stosunkowo tanio/łatwo rozbudować o zewnętrzną pamięć RAM do np. 16 megabajtów.

    Jak napisałem we wstępie, układ wciąż nie jest ukończony, głównie przez to, że ciągle dochodzą nowe pomysły i funkcje.
    W każdym razie na dzień dzisiejszy wygląda to tak, że do uruchomienia programu wystarczy jakiś prosty terminal, może być programowy na PC.
    Dzięki niemu możemy wprowadzić do pamięci RAM kontrolera program z zewnątrz, możemy go też bezpośrednio edytować w układzie, zupełnie jak w komputerach 8-bitowych, korzystając z np. z jednej z wielu implementacji BASIC.
    Bardzo dobrą platformą jest też program Kowalski Symulator.
    W jednej z dostępnych konfiguracji mój układ jest praktycznie z nim zgodny i działające na nim programy działają na nim bez przeróbek w postaci adresów I/O.
    Programy można w wersji źródłowej wprowadzać do układu także z klawiatury i kompilować np. z pomocą Macro Assemblera wbudowanego w BASIC BBC ;)

    Ciekawą funkcją jest możliwość wywoływania własnych lub dodanych funkcji napisanych w Asemblerze ARM z programów napisanych w kodzie dostępnych procesorów.
    Pozwala to na dostęp do wszystkich układów I/O układu STM32H750 nie tylko z poziomu asemblera np. 65c816 czy 65c02, ale także uruchomionego języka BASIC.
    Na dołączonych filmach można zobaczyć prosty program napisany pod j. BBC BASIC, pod emulowanym procesorem 65c02 mrugający diodą podłączoną do układu Cortex ARM ;)



    A tu efekt działania tego programu, niestety na PCB są 2 diody obok siebie (jedna to zasilanie), więc efekt na nagraniu jest gorszy, ale i tak widać, że działa.




    Do czego może się przydać taki układ?
    Po pierwsze można na nim uruchomić stare dobre programy ;)
    Po drugie można bardzo łatwo zrobić na nim układ do sterowania czegokolwiek, a nawet łatwo dostosować go do działania w terenie, na "partyzanta".
    Układ sprawdzi się w rozwiązaniach, gdzie potrzeba np. kilkunastu wejść/wyjść czy
    specyficznych interfejsów.
    Można go także wykorzystać jako coś w rodzaju uniwersalnego komputerka SBC,
    czy platformy do tworzenia i testowania aplikacji dla procesorów ARM i nie tylko.
    Całkiem sporo jak na mały układ, coś jak szwajcarskiego noża ;)
    Można go także potraktować jako uniwersalny kontroler programowany w różnych językach.


    W każdym razie mam jeszcze sporo pomysłów do wdrożenia w tym układzie i postaram się o nich co jakiś czas co nieco napisać ;)

    Na koniec dodam coś o BBC BASIC.
    Był to jeden z najlepszych dialektów BASIC zintegrowany z Macro Assemblerem.
    W sumie był on podstawą komputera Archimedes, swego czasu rewelacji, która w szybkosci biła na głowę komputery PC oparte o 80386, a dzięki oparciu jego systemu operacyjnego właśnie o BBC BASIC dość szybko nadrabiał braki w profesjonalnym oprogramowaniu mimo że na rynek wszedł kilka lat po komputerach PC.
    Co ciekawe system ten był poważnie rozpatrywany przez Apple i o mało nie znalazł się wraz z procesorem ARM jako podstawa systemu operacyjnego ich pierwszego smartfona. ;)

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    gregor124
    Poziom 28  
    Offline 
  • REKLAMA
  • #2 21895823
    Sam Sung
    Poziom 33  
    Posty: 2001
    Pomógł: 227
    Ocena: 570
    gregor124 napisał:
    Chciałbym zaprezentować pewien projekt rozwijany od dłuższego czasu.
    (...)
    Chyba wyszło nie najgorzej
    Trudno powiedzieć, bo chyba gdzieś wcięło link do projektu :?:
    gregor124 napisał:
    Bardzo dobrą platformą jest też program Kowalski Symulator.
    Link do strony: Kowalski Symulator
  • REKLAMA
  • #3 21895829
    TechEkspert
    Redaktor
    Posty: 7042
    Pomógł: 16
    Ocena: 5453
    No nieźle, okaże się że dema na emulatorze będą działały szybciej niż na oryginale. Dla mnie emulacja to zawsze był przykład zaskakująco złożonych projektów.
  • #4 21895838
    gregor124
    Poziom 28  
    Posty: 1458
    Pomógł: 91
    Ocena: 793
    >>21895829
    Właściwie to tak, procesory z rodziny 65xx zawsze potrzebowały znacznie szybszej pamięci RAM od procesorów konkurencji i w zasadzie to trzymało je przy niższych częstotliwościach. Inna sprawa, że taki Z80, aby osiągnąć wydajność 6502, musiał być taktowany zegarem ok. 4 razy szybszym ale i zadowalal sie przy tym wolniejszymi pamieciami.
    Porównywałem wydajność mojego układu z oryginalnym 65C816 i wyszło, że pracuje on jak 65C816 przy 16 MHz, co jest osiągalne dla tego procesora, problem w tym, że wymaga on wówczas szybkiej, czytaj, drogiej pamięci RAM.
    Ale podobnie jest z ARM-em z racji tego, że mogę uruchomić ten sam kod w pamięci EPROM, i RAM układu mogę stwierdzić, że w przypadku RAM-u, ale tego najszybszego w tym układzie 512 kB, działa on ok. 20% szybciej niż w pamięci EPROM, sprawa robi się ciekawa, że po uruchomieniu pamięci CACHE wydajność wzrasta jakieś 2,5 raza w stosunku do najszybszej RAM w tym układzie.
    I myślę, że można to odnieść do wszystkich MIPS-ów.
    Budowa emulacji nie jest jakimś szczególnie wielkim projektem, w sumie emulacja 65c02 wraz ze specjalnie dodanym monitorem działania zajęła ok. 7 kB pamięci, a moim priorytetem było raczej osiągnięcie dużej wydajności a nie oszczędności pamięci.
    Emulacja 65c816 jest dużo bardziej złożona, ale i ona wraz z całym dodatkowym systemem, emulacja 8080 i monitorami do nich zmieściła się w połowie pamięci EPROM i zajęła jakieś 50 kB.
    W sumie jest sporo miejsca na rozbudowę ;)
    Pomogłem? Kup mi kawę.
📢 Słuchaj (AI):
REKLAMA