18. júna 2012

GPMD85emulator v0.9.1206 beta

Štyri mesiace ubehli ani neviem kedy a preto som sa rozhodol pripraviť ďalší release balíček projektu GPMD85emulator (pre tých, čo neviedia o čo ide odporúčam tento článok, v ktorom predstavujem projekt ako taký...). Od predošlej verzie sa pomerne dosť vecí zmenilo, vylepšilo a pribudlo aj niekoľko nových featuriek, tak si to zhrňme:

changelog v0.9.1206:

  • mikezt/zeroteam do výberového dialógu súborov implementoval rýchle vyhľadávanie podľa mena. Stačí začať písať prvé písmená názvu súboru a kurzor sa vám presunie na požadovaný súbor. Následne si medzerou môžete prepínať medzi ďalšími zhodami. Ďakujem za skvelý premiérový príspevok! ;)
  • Začal som pracovať na debuggeri ([f]+F12), no jeho funkčnosť zatiaľ treba brať s rezervou. Sprístupnil som ho skôr na ukážku, no niektoré základné operácie už zvláda:
    • F7 - krok
    • F8 - krok cez
    • Shift+F7 - po nasledujúcu inštrukciu
    • Shift+F8 - opusti rutinu
    • Ctrl+H - hex/dex
    • Ctrl+Z - i8080/Z80 notácia inštrukcií
  • Konečne funguje čítanie ([f]+F11) a zápis ([f]+Shift+F11) pamäťového bloku zo/do súboru. Pre model Consul 2717 je možné si premapovať zápisník vedľa obrazovky do lineárneho priestoru od C000h do CFFFh, tak ako to umožňuje sám počítač. Pri čítaní obsahu z pamäte je možné zapnúť čítanie z ROM namiesto RAM, pre modely, ktoré to umožňujú.
  • Do kódu som naportoval všetky opravy emulácie obvodov a periférií, ktoré Roman za posledný rok urobil.
  • Bolo implementované hardvérovo akcelerované zobrazovanie obrazu pomocou OpenGL! Tento režim je možné aktivovať pri konfigurácii './configure --with-opengl'. Jeho naväčšou výhodou je výrazne nižšia záťaž procesora, ktorá sa nemení ani pri vyšších rozlíšeniach.
  • So zobrazovaním súvisia aj ďalšie opravy a vylepšenia: Samotné vykresľovanie obrazu bolo presunuté do hlavného vlákna, čím sa vyriešili multi-thread problémy so zobrazovaním (hlavne pri OpenGL). Taktiež boli riešené problémy s farebnou paletou pri vykresľovaní obrazu alebo ikoniek v status-bare, ktoré sa prejavovali na niektorých architektúrach. A nakoniec bolo ešte vylepšené fungovanie skratky pre full-screen režim [f]+F, ktorá funguje aj pre návrat späť do okenného režimu.
  • ikon/SinDiKat má na svedomí to, že prvá várka (skoro 3/4) pôvodných Romanových slovenských komentárov tried emulácie obvodov a periférií bola preložená do angličtiny, za čo mu veľmi pekne ďakujem! Vďaka tomu sa z toho stáva projekt medzinárodného dosahu!!! :))

download:

[ download latest GPMD85emulator ]

Keďže sa projekt stále vyvíja, v tomto archíve nájdete vždy najaktuálnejšiu verziu emulátora (tj. možno aj vyššiu ako je popisovaná v tomto článku!) s niekoľkými ukážkovými súbormi v adresároch disk, snaptape. Popis týchto novších verzií nájdete vždy v tejto sekcii blogu »».
K dispozícii je samozrejme aj github repo, kde nájdete vždy najaktuálnejšie zdrojové kódy.

ako to funguje?

Najintenzívnejšie sa asi riešilo zobrazovanie pomocou OpenGL. Je samozrejmé, že vám bude fungovať iba v prípade, že máte akcelerátor, ktorý OpenGL podporuje a tiež, že ho váš operačný systém podporuje v jadre. Stále si však nie som úplne istý stabilitou, pretože OpenGL je pre mňa doteraz neprebádaná oblasť a už sa mi niekoľkokrát stalo, že to pri zmene rozlíšenia "išlo do kolien" bez zjavnej príčiny. Takéto veci sa zle simulujú, nehovoriac o tom, ako ťažko odlaďujú.
Taktiež stále pretrváva problém s divným správaním ALSA drivera u niektorých beta-testerov, ktorý nemôžem ovplyvniť. Môžete skúsiť pred spustením emulátora nastaviť premennú prostredia SDL_AUDIODRIVER na niektorú z týchto hodnôt. Ak sa vám to podarí iným driverom vyriešiť, alebo keď nájdete inú chybu, neváhajte a napíšte mi o tom, alebo sa mi ozvite priamo na jabber, prípadne rovno využite príslušný issues na githube.

Na záver by som sa chcel už iba pochváliť tým, že mne a ďalším dvom majiteľom Raspberry Pi - počítača za 35 dolárov vo veľkosti kreditnej karty, sa podarilo preložiť GPMD85emulator bez jediného problému na architektúre ARM. Síce to nejde veľmi svižne, ale keď sa mi podarí vyladiť emulátor aj na podporu štandardu OpenGL ES 2.0 (ktorý je trocha iný ako klasické OpenGL) a podarí sa mi hlavne prísť na to, ako to na Maline skompilovať, tak by to mohlo pomôcť... ;)

screenshoty:

galéria so screenshotmi na PicasaWeb »»


8 komentárov:

  1. Má význam používat OpenGL pokud nechci žádným způsobem manipulovat s původním rozlišením PMD-85?

    OdpovedaťOdstrániť
    Odpovede
    1. Pozor, nemýliť si dojmy s pojmami. Rozlíšenie PMD 85 je fixné a nemenné, tj. 288x256. Hovorím o násobkoch zväčšenia okna. Predsa na dnešnom FullHD rozlíšení 1920x1080, keď sa zobrazí okno o veľkosti 288x256, môžte hádať, čo uvidíte ;)
      Práve preto funguje zobrazenie v násobkoch zväčšenia: 1x, 2x, 3x a 4x. Pri každom vyššom násobku sa pri klasickom zobrazovaní žerie násobne vyšší výkon, ktorý je potrebný pre "rozkopírovanie" každého jedného pixelu do počtu druhej odmocniny násobku zobrazenia.
      Pri OpenGL sa to už nerieši - všetko zabezpečuje hardware a GPMD85emulator sa o samotný render obrazu nemusí starať, iba emuluje videoprocesor.

      Odstrániť
    2. Stejně mi není jasné, proč by měla "kopírovací" operace jako je např. 3x zvětšit rastr mít zásadní vliv na spotřebu výkonu procesoru... ovšem ideálně používat původní rozlišení na původní obrazovce, ono jak asi bude vypadat PMD-85 na full HD, to by mě ani nenapadlo pouštět :-)

      Odstrániť
  2. Mne kompilacia s --with-opengl zbehne bez chyby, ale pri pokuse o spustenie vypise chybu segmentacie.

    [vlado@vladopc ~]$ GPMD85emu

    = GPMD85emulator v0.9.1206 ~ Copyright (c) 2012 ~ http://gpmd85emulator.sourceforge.net/ =
    - This program comes with ABSOLUTELY NO WARRANTY. This is free software,
    - and you are welcome to redistribute it under certain conditions.

    Chyba segmentácie

    Pri kompilovani bez opengl je to OK.
    Centos release 6.2

    vado

    OdpovedaťOdstrániť
    Odpovede
    1. Áno, bohužiaľ, je to pre mňa známy bug divného chovania OpenGL funkcie glGetString() na niektorých strojoch. Pre rozbehanie zvyklo užívateľom pomôcť v súbore ScreenPMD85.h na začiatku zakomentovať obsah funkcie glExtension() a nechať iba 'return GL_FALSE;'. Vtedy by už sa malo OpenGL normálne nainicializovať.

      Odstrániť
  3. ahoj. pokus o download konci s 500 Internal Server Error :-/

    OdpovedaťOdstrániť
    Odpovede
    1. Ale to asi nebude môj problém, že? SourceForge má pravidelné výpadky, až jedného dňa to padne celé...
      Urobil som mirror na GitHub, tam to bude v bezpečí: https://github.com/mborik/GPMD85Emulator

      Odstrániť
  4. Ahoj,
    skusam skompilovat pod Ubuntu 16.10 64-bit. Make skonci chybou:

    In file included from GPMD85main.cpp:21:0:
    ./../gui/UserInterfaceData.h:106:1: error: narrowing conversion of ‘(TMenuQueryType)-1’ from ‘int’ to ‘uint16_t {aka short unsigned int}’ inside { } [-Wnarrowing]
    };
    ^
    ./../gui/UserInterfaceData.h:113:1: error: narrowing conversion of ‘(TMenuQueryType)-1’ from ‘int’ to ‘uint16_t {aka short unsigned int}’ inside { } [-Wnarrowing]
    };

    Vado

    OdpovedaťOdstrániť