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.
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ę.