ZX ROM na PMD

Stručné poohliadnutie za opomínaným Busyho počinom

Mal som dnes zaujímavú debatu s kamarátom, ktorý mi naznačil, že bombastické veci sa niekedy strácajú v záplave tých priemerných s dokonalým (dnes hlavne FB) marketingom. Jedným z takých počinov je určite portácia štandardnej fabrickej ZX Spectrum ROM s plne funkčným ZX Basicom na PMD85.

Dokonca aj sám autor Busy píše na svojej stránke, že „Podobne ako na platformách C64 a Ondra, ani na PMD85 to už nie je romka v pravom slova zmysle, t.j. dáta ktoré je možné napáliť do ((E)E)PROM (Flash) a fyzicky vložiť do počítača, ale je to klasická aplikácia, ktorá funguje na počítači bez akýchkoľvek HW úprav a ktorú treba normálne nahrať a spustiť „. S tým si samozrejme dovolím nesúhlasiť. Či už Nostalcomp-ov MEGA modul alebo moje riešnie umožňuje uložiť jeho ZX ROMku do časti Flash pamäti a po zapnutí počítača prevádzkovať PMD85 ako Spektrum z pohľadu štadnardného Basic programátora z osemdesiatych rokov.

Je neskutočné sledovať ako retro vlna prináša knihy plné listingov, ako si naprogramovať hru v Basicu. Ja si spomínam na jednu obdobnú dobovú knihu, ktorú sa – dnes už nebohému, nech mu je zem ľahká – otcovi môjho kamaráta podarilo zohnať v Maďarsku. Pred samotným listingom „Gustáva na motorke“ bolo zopár pokynov, ktorým sme v cudzom jazyku samozrejme nerozumeli, ale nebolo toho viac ako 2 odstavce, takže sme tomu nevenovali náležitú pozornosť – inak povedané s prehľadom sme to odignorovali :). Aké bolo ale prekvapenie, keď sa nám po hodinách ďatlovania a opráv preklepov podarilo konečne hru spusiť. A aké bolo sklamanie, keď namiesto Gustáva a motorky po obrazovke behali obyčajné písmená A, B, C, D…

Až neskôr sa nám omylom podarilo nájsť v grafickom móde akési podivné kreatúry na písmenách A, B, C a D a napadlo nás nahradiť v programe tie obyčajné písmená za grafiku a – voilà – zrazu sa po spustení scéna zmenila, z A bol Gustáv z B jeho motorka, C, D atď kadejaké ďalšie kreatúry scenérie.

Zrejme ste si už domysleli, že listing obsahoval len čisté ASCII znaky a v pokynoch pred ním bol postup ako správne natypovať do počítača znaky v grafickom móde. Ale ten proces zisťovania a učenia sa mal určite niečo do seba. Čo je úžasné, že si dnes „Gustáva“ môžem rovnako natypovať aj do PMDčka. Kto by si to chcel na vlastnej koži vyskúšať, bude vítaný pri stolíku SinDiKatu budúci týždeň na Foreveri.

Na PMD infoserveri sa zatiaľ informácia o ZX ROM verzii 02 neobjavila, takže si dovolím aspoň malú upútavku v podobe „Čo je nového“ z archívu dodávaného spolu s Busyho ZX ROM:

Oprava chyby sporadickeho objavenia sa blikajuceho kurzora za chybovym hlasenim

Tato chyba sa neprejavuje casto, ale obcas sa stane, ze sa objavi. Je zapricinena nekorektnym nastavenim systemovych premennych, konkretne bitu ktory signalizuje ze editacna zona nebola zmazana. Pri nespravnom nastaveni tohto bitu sa zobrazene chybove hlasenie nezmaze a editacny riadok pre novy prikaz je umiestneny nie od zaciatku riadku, ale az a tymto hlasenim. V ZXrom02 by sa toto uz nemalo stavat.

Kompletne prepracovane matematike rutinky

Povodne matematicke rutinky v ZX romke boli pisane tak, aby si co najviac udajov drzali v registroch (velmi casto vyuzivali instrukciu EXX). Procesor 8080 nema tolko registrov, preto si musi niektore udaje odkladat do pameti. Toto sposobilo ze mnohe matematicke rutinky prepisane na 8080 bezali podstatne pomalsie. V ZXrom02 su rutinky prepracovane a optimalizovane priamo na mieru instrukcneho suboru 8080 a tym padom bezia podstatne rychlejsie nez v ZXrom01. Navyse, pre niektore rutinky boli pouzite ine, rychlejsie algoritmy na vypocet, tieto rutinky dokazu na 2 MHz 8080 bezat dokonca este rychlejsie ako originalne rutinky na 3.5 MHz Z80.

Napriklad bezne vedecke funkcie (SIN,COS,LN,EXP,SQR…) bezia v priemere 6-krat rychlejsie, nasobenie bezi (v zavislosti od argumentov) az 40-krat rychlejsie, generovanie nahodnych cisel 50 az 60-krat rychlejsie, take delenie az 96-krat rychlejsie a absolutnym rekorderom je premena textovej formy cisla na hodnotu (napr. funkcia VAL) ktora v urcitych pripadoch bezi az 360-krat rychlejsie nez bezali povodne rutinky v ZXrom01 !

Novy nastavovaci bit.4: Povolenie emulacie matematickych chyb: delenie a -65536

Nove prepracovane matematicke rutinky uz netrpia znamymi chybami z povodnej romky ZX Spektra. Pre kazdy pripad, ak by bolo nutne, je mozne zapnut emulaciu tychto chyb nastavenim bitu 4 na hodnotu 1 v bajte pre nastavenie rezimov cinnosti.

Prepracovany linearny interpolator v prikazoch DRAW a CIRCLE

Povodny linearny interpolator v ZXrom01 fungoval presne ako original na ZX Spektre, to znamena ze pocital suradnice bodov a pre kazdy bod volal rutinku prikazu PLOT. Novy optimalizovany interpolator uz nevola PLOT, ale pristupuje priamo do videoramky, vdaka comu prikazy DRAW a CIRCLE dokazu bezat 5 az 6-krat rychlejsie.


/ikon

2 názory na “ZX ROM na PMD

  1. Koľko KB má ZXrom01 a 02?
    Videl som to na Foreveri 2018, bolo to mega!
    Ja som mal na C64 emulátor ZX, v tom som začínal programovať a ukladať na kazety. Lebo na ZŠ sme mali počítačový krúžok a tam sme riešili hlavne ZX basic na Deltach. Takže ZX basic doma bežal primárne. Neskôr sa to samozrejme zmenilo. Na ZŠ boli aj pmd85, ale do toho sme museli často búchať, žiaľ už neviem prečo. Asi nestabilita. A mali sme tam aj pp01, kde som prepísal z nejakého návodu Hanojské veže. Počítač s rukoväťou, nice!
    No a tie moje ZX kazety som nedávno skúšal na didaktiku gama. A išlo to! Fakt urobili dobre tú emuláciu ZX.
    No a už sa dostávam k ďalším otázkam. Na prvotnú konverziu tej romky bol použitý nejaký nástroj z netu, či namieru robená Busyho utilitka alebo to bolo celé prepísané ručne?

  2. Namieru robena utilitka 🙂

    Aby som bol presnejsi, dve utilitky. Prva, velmi jednoducha (v podstate len jednoduchy textovy parsing) mi z komentovaneho listingu ZX ROM vyrobila zdrojovy text, ktory sa dal prelozit. Druha utilitka uz bola sofistikovanejsia – v zdrojovom texte vyhladala niektore najcastejsie sa vyskytujuce Z80 instrukcie, ktore 8080 nema, a nahradila ich zodpovedajucim kodom pre 8080. Tuto utilitku som ale nepisal ako obecny konvertor Z80=>8080, ale iba ako taky jednoduchy pomocnik, ktory specialne pre ZX ROM spracoval najcastejsie pripady, aby mi usetril otrocku milionkrat sa opakujucu tu istu cinnost. Napriklad instrukcie SET, LDIR, EXX…, ale tiez napriklad aj pracu so systemovymi premennymi cez IY. Niektore ojedine sa vyskytujuce veci (napr. instrukcie RLD a RRD, register IX) som uz upravoval rucne.

    ZXrom01 ma cca 20kB, ZXrom02 ma 21kB. Urcite by sa dali napisat aj kratsie, ale niektore low-level rutinky (napr. vypis znakov v rastri 8×8 pixelov) su optimalizovane na rychlost, preto zaberaju trosku viac miesta.

    Inak prave ZX emulator na C64 bol prave tym programom, ktory ma inspiroval k napisaniu ZX ROM pre PMD85. Kedysi davno ho mal kamarat a vymienali sme si kazety s basic programami. Ak by sa v takej miere aj dnes pouzivali kazety, tak by ZX ROM na PMD85 vedela citat/zapisovat priamo spektracky signal, podobne ako spominany ZX emulator na C64.

    Nuz a ked tu o tom pisem, tak mozem prezradit, ze zvazujem portaciu ZX ROM aj na platformu PP01. Takze ked najdem dostatok casu (lebo chut mi rozhodne nechyba) tak sa mozete v buducnosti tesit na ZX basic beziaci aj na tejto platforme 🙂

Pridaj komentár