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

Emulator ZX Spectrum 48 na STM32F407

Samuraj 21 Mar 2019 21:53 8193 12
REKLAMA
  • Emulator ZX Spectrum 48 na STM32F407




    Emulator ZX Spectrum 48 na STM32F407 Emulator ZX Spectrum 48 na STM32F407

    Zapewne nic odkrywczego ale wolnej chwili udało się połączyć parę projektów i wyszło takie coś.

    Jeśli chodzi o hardware to STM32F407 pędzony na 168MHz. Wyświetlacz 3.2", klawiatura 4x4. Musiałem zastosować parę sztuczek aby uzyskać zadowalający efekt jeśli chodzi o grafikę. W planach miałem użycie DMA lecz okazało się iż muszę zwalniać gdyż uzyskałem za dużą prędkość. Jeśli chodzi o emulacje Z80 to zaciągnięta z neta. Dorobiłem obsługę pamięci, wyświetlacza, przerzucanie zawartości plików Z80 do pamięci.
    Jako nośnika danych użyłem kart pamięci.
    Jaki był cel projektu - hmm chyba aby zabić wolny czas i poznać bliżej peryferia 407.

    Jeśli chodzi o sztuczki to zauważyłem iż w większość podobnych konstrukcji lwią cześć kontrolerowi zajmuje wyświetlanie Mimo stosunkowo dużej moc obliczeniowej w zależności od wykonania należy przepchnąć dość dużą ilość danych czy to po SPI czy po FSCM co nie wpływa korzystnie na efekt końcowy.

    Cała dostępna pamięć komputera X Spectrum podzielona jest na bloki.
    0x0000 - 0x3FFF ROM.
    0x4000 - 0x57FF Pamięć ekranu
    0x5800 - 0x5AFF Pamięć kolorów
    0x5B00 - 0xFFFF RAM

    W Pamięć ekranu zajmuje 0x5800 - 0x4000 = 0x1800 = 6144 bajtów. Nie mamy tutaj tradycyjnego zapisu jaki stosuje się obecnie z zapisem poszczególnych kolorów lecz zapisaną tylko informację czy dany pixel przyjmuje kolor tła czy koloru. Dostępna rozdzielczość to 256*192 = 49152/8bitów = 6144 bajty.

    Drugi blok to informacja o kafelkach ekranu. Zapisane informacje dotyczą fragmentów ekranu o rozmiarze 8x8 pixeli. W jednym bajcie zapisane są informacje o kolorze tła (3 bity), kolorze pixela (3 bity), informacja czy kolory są rozjaśnione (1 bit) oraz o tym czy kafelek co sekundę ma zamieniać przemiennie kolor tła z kolorem pixelu. Widać to szczególnie gdy chcemy wyświetlić kursor.
    Rozdzielczość jak wcześniej pisałem to 49152pixele /8/8 = 762 bajty.

    Pisząc obsługę ekranu skorzystałem z kafelek i jeśli zmienimy jakąś wartość to ustawiam go w osobnej tablicy jako brudny do wyświetlenia. Bez względu na to czy zmieniałem zawartość pixeli czy zmieniałem kolor. Dzięki temu w zależności od stanu do wyświetlenia jest 20-50 małych kwadratów 8x8 a nie cała zawartość ekranu. Zyskujemy tym samym bardzo na szybkości.

    Pliki ładowane są z karty pamięci przy wykorzystaniu FatFs.
    Jeśli chodzi o format plików Z80 to posiłkowałem się tym opisem
    https://www.worldofspectrum.org/faq/reference/z80format.htm
    Przy implementacji wykorzystałem tylko wersje 1.45 nie wymagający dekompresji. Pierwsze parę bajtów to zawartość rejestrów a potem czysty RAW pamięci ram.
    Wykorzystałem też emulator na komputerze gdyż większość dostępnych gier i dem dostępnych jest w postaci plików TAP. Emulator użyłem jako konwertera plików, odpalam emulator z plikiem TAP i zapisuje pod formatem Z80 na karcie pamięci.

    Fajne? Ranking DIY
    O autorze
    Samuraj
    Poziom 35  
    Offline 
    Specjalizuje się w: programowanie c++
    Samuraj napisał 2792 postów o ocenie 615, pomógł 286 razy. Mieszka w mieście Szczecin. Jest z nami od 2002 roku.
  • REKLAMA
  • #2 17859169
    tplewa
    Poziom 39  
    Posty: 6727
    Pomógł: 222
    Ocena: 988
    W sumie projektów takich trochę jest - od znanego zapewne wielu osobom ZX Spectrum na STM32F429 Discovery czy ZX 48K https://github.com/abelykh0/stm32f407-z80emu, ewentualnie https://github.com/sdima1357/specci48 i https://github.com/sdima1357/specci128

    W sumie nie wiem jak to ocenić, jak był by udostępniony kod źródłowy, binarka lub choć dokładniejszy opis - na czym kolega bazował, co zmienił, jak i co rozwiązał (co to za sztuczki i dlaczego były konieczne) itd. - byłby plus, a tak, to kolejny filmik z ZX na STM32 na Youtube i opis, w sumie z którego niewiele wynika...
  • #3 17859198
    RafGan
    Poziom 12  
    Posty: 14
    Ocena: 1
    tplewa napisał:
    W sumie projektów takich trochę jest od znanego zapewne wielu osobą ZX Spectrum na STM32F429 Discovery czy ZX 48K https://github.com/abelykh0/stm32f407-z80emu ewentualnie https://github.com/sdima1357/specci48 i https://github.com/sdima1357/specci128

    W sumie nie wiem jak to ocenić, jak był by udostępniony kod źródłowy, binarka lub choć dokładniejszy opis na czym kolega bazował, co zmienił, jak i co rozwiązał (co to za sztuczki i dlaczego były konieczne) itd. był by plus, tak to kolejny filmik z ZX na STM32 na Youtube i opis w sumie z którego nie wiele wynika...



    W sumie przecież autor napisał, iż to nic odkrywczego :lol:
    Zapakować w jakąś fajną, małą obudowę (oczywiście z opisem) i będzie ZXPortable.
  • REKLAMA
  • #4 17859200
    tplewa
    Poziom 39  
    Posty: 6727
    Pomógł: 222
    Ocena: 988
    RafGan napisał:
    [
    W sumie przecież autor napisał, iż to nic odkrywczego :lol:


    To jedno, ale to nie wyklucza tego aby nie próbować autora zmotywować do napisania czegoś więcej...
  • REKLAMA
  • #5 17859294
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 615
    Uzupełniłem opis na tyle ile się dało. Jeśli są jakieś szczegółowe pytanie to chętnie na nie odpowiem. Łatwiej jest mi odpowiadać na konkretne pytanie.
  • #6 17859323
    ArturAVS
    Moderator
    Posty: 26009
    Pomógł: 2294
    Ocena: 7711
    Gdybyś zbudował i pokazał światu ten emulator w 1982 roku, firma sir Clive'a Sinclaira poszła by z torbami. :-)
    Z sentymentem patrzę na takie konstrukcje( swego 1-go ZX poskładałem w 88 roku).
    Ubrać w jakąś ładną i funkcjonalną obudowę i mamy ZX Portable.
  • #7 17862044
    Konto nie istnieje
    Poziom 1  
  • #8 17862527
    HD-VIDEO
    Poziom 43  
    Posty: 7946
    Pomógł: 1255
    Ocena: 1844
    arturavs napisał:
    Gdybyś zbudował i pokazał światu ten emulator w 1982 roku, firma sir Clive'a Sinclaira poszła by z torbami.


    Ale Sir zrobił to na 3,5MHz a tutaj trzeba aż 168MHz
  • #9 17862532
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #10 17862777
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    HD-VIDEO napisał:
    Ale Sir zrobił to na 3,5MHz a tutaj trzeba aż 168MHz

    Ale Z-80 wspomagała ULA, ponadto aby emulować na CPU inną rodzinę trzeba wykonać kilka, kilkanaście a nawet więcej rozkazów niż w pierwowzorze.
  • #11 17862859
    tplewa
    Poziom 39  
    Posty: 6727
    Pomógł: 222
    Ocena: 988
    arturavs napisał:
    Gdybyś zbudował i pokazał światu ten emulator w 1982 roku, firma sir Clive'a Sinclaira poszła by z torbami. :-)


    Jak by Sinclair miał wtedy takie ARM-y to ZX Spectrum inaczej by wyglądał ;)

    Fajnie że autor coś więcej opisał w temacie więc i plusik poszedł :) Ja swojego czasu odpaliłem kilka emulatorów na Discovery ale nie zagłębiałem się zbytnio w kod - ot bardziej na zasadzie sprawdzić jak działa, więc miło poczytać jak ktoś coś więcej dłubał :)
  • #12 17867104
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    tplewa napisał:
    Jak by Sinclair miał wtedy takie ARM-y to ZX Spectrum inaczej by wyglądał ;)

    DMA nie byłoby robione na rezystorach.
  • #13 17867330
    Janusz_kk
    Poziom 39  
    Posty: 5681
    Pomógł: 216
    Ocena: 1427
    Bo to było proste i tanie rozwiązanie konfliktu na szynie danych :)

Podsumowanie tematu

✨ Użytkownik połączył kilka projektów, tworząc emulator ZX Spectrum 48 na platformie STM32F407, działającym na częstotliwości 168MHz. W projekcie zastosowano wyświetlacz 3.2" oraz klawiaturę 4x4. Wymagało to zastosowania różnych technik, aby uzyskać zadowalający efekt graficzny, w tym planowanego użycia DMA, które okazało się zbyt szybkie. Emulacja Z80 została zaadaptowana z internetu, a użytkownik dodał obsługę pamięci oraz wyświetlacza. Projekt miał na celu poznanie peryferiów STM32F407 oraz spędzenie wolnego czasu. W dyskusji podkreślono potrzebę udostępnienia kodu źródłowego oraz dokładniejszego opisu projektu, co mogłoby zwiększyć jego wartość edukacyjną.
Wygenerowane przez model językowy.
REKLAMA