Forum

From PMD 85 Infoserver

Jump to: navigation, search
:: back to start of topic :: back to topic list ::
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-06 04:04:43 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Zkoušel někdo Pascal V2.2 na skutečném PMDčku? Mně v emulátoru chodí ve versi 1.02 (pascal2.rmm) nahrávání i čtení, a to i programy nahrané versí 2.2, ve versi 2.2 (pascal22.rmm) mohu ukládat, ale nepřečtu. Trochu už fungování Pascalu rozumím, disassembloval jsem si obě verse, takže v případě potřeby mohu vygenerovat obraz Pascalu pro MGLD, na kterém se čtení dá ověřit, bez nutnosti mít HW modul (samozřejmě nebude fungovat vše, ale prověřit tuto funkci snad bude možné).

Připadá mi zvláštní, že by někdo dal do oběhu takhle zjevně nefungující ROM, přičemž chyba v ROMce to být nemůže, Pascal kontroluje integritu dat přes jednobytový kontrolní součet.
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2015-10-09 01:10:01 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Netestoval som teraz TOM Pascal V2.2 na živom PMD 85, ale opäť som trochu trasoval v Emulátore.
Samozrejme, tiež mi príde čudné, že napriek tomu, že je v kóde test na kontrolný súčet (čo by malo znamenať, že je program z RomModulu natiahnutý bez chýb), tak Pascal V2.2 nefunguje správne...
Ale späť k trasovaniu. Porovnával som kód Pascalu V1.02 a V2.2 a podľa očakávania tam sú mnohé podobnosti.
Obe verzie si najprv zisťujú na akom stroji bežia a podľa veľkosti pamäte nastavujú premenné na adresách #C430 a #C432 na začiatok a koniec pamäti pre program. Program (už tokenizovaný) sa ukladá od vyšších adries k nižsím, takže #C430 > #C432. Ak som to správne pochopil, premenná na adrese #C434 obsahuje adresu konca aktuálne vloženého programu. A táto premenná je práve kameňom úrazu.
Na adrese #6DFD (V1.02) resp. #0444 (V2.2) je rutina, ktorá hľadá koniec aktuálneho programu v pamäti. Vo V1.02 sa pri prechádzaní po riadkoch programu priebežne aktualizuje aj premenná #C434, takže po ukončení rutiny je v tejto premennej adresa konca programu a teda miesto kam sa prihraje nahrávaný program. Vo V2.2 však k aktualizácii premennej #C434 nedochádza a tak zostáva nezmenená (po spustení Pascalu je tam 0).
Takže, ak sa ide načítať do pamäti program, tak sa najprv zavolá spomenutá rutina a následne sa počas spracovávania zdrojového textu (ten je na kazete/diskete uložený v čistom tvare) tokenizovaný program ukladá od adresy v premennej #C434. Keďže vo V2.2 je v tejto premennej nesprávna hodnota, tak sa program neukladá tam, kam by sa mal. Po prvom spusteni Pascalu, kedy je v premennej #C434 nula, tak sa tokenizovanie prejaví prepisovaním spodnej časti obrazovky.
Ako som spomenul, kód oboch verzií sa veľmi podobá, ale spomenutá rutina sa odlišuje dosť a hlavne v tom, že premenná #C434 sa neaktualizuje. Aký bol zámer a ako to vlastne "po novom" malo vo V2.2 fungovať, neviem.
Ak po skončení inkriminovanej rutiny premennú #C434 korektne nastavím, tak sa program nahraje správne a pochopiteľne aj funguje.
 
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-09 05:17:49 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Výborně, to je cenné zjištění. Mým cílem - kromě opravy této chyby - je vytvořit si pro Pascal stejný plugin, jaký mám pro Basicy (v PMD i v Ondrovi), a který umožní tokenizaci/detokenizaci programu v paměti z/do ASCII souboru, proto jsem zatím analysoval, jak funguje LOAD v P1.02 (0x7b76) a k analyse P2.2 (0x3145) se teprve chystám. Jestliže je to takto jednoduchá závada, bude možná snadná oprava), ovšem proč někdo vypáli flagrantně nefunkčí ROM-modul, zůstává záhadou.
 
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-09 11:32:59 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Zkuste si, prosím, stáhnout http://www.pecina.cz/files/pascal22-fixed.bin a ověřit, zda funguje.
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2015-10-10 11:15:41 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Super. Zdá sa, že je to v poriadku.
 
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-11 06:16:17 AM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Je otázka, zda se problémy neprojeví časem, nicméně pro dokumentaci, tady je k tomu zdroják: http://www.pecina.cz/files/pascal22-fixed.xml
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2015-10-11 09:53:42 AM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Uvidíme.
Mám ešte "kacírsku" myšlienku. Čo keby sme prečíslovali túto verziu na 2.3, aby sa to neplietlo.
 
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-11 12:16:33 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
To mě taky napadlo, ale řekl jsem si, že je-li nějaká verse zcela nefunkční, nemá smysl ji udržovat při životě. Možná bychom mohli napsat autorovi (učí v Blavě na MFF), jestli neví, proč tento problém vůbec vznikl.
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2015-10-12 09:57:30 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Predsa som našiel problém. Nefunguje prepínač Insert/Overwrite - kláves K0.
Problém spočíva v tom, že príznak INS/OVR je na adrese #06E0 a od tejto adresy ste umiestnili opravný kód. Tým sa po stlačení K0 prakticky poškodí tento kód a po chvíli to zhavaruje.
Pre opravu "stačí" opravný kód umiestniť až za tento príznak (po spustení 0FFh).
 
Message
Author  Author ::  Tomáš Pecina
Posted  Posted ::  2015-10-12 11:31:14 PM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Mělo by být opraveno, prosím, stáhněte si ze stejných adres čerstvé verse.
 
Message
Author  Author ::  Roman Bórik
Posted  Posted ::  2015-10-13 09:34:38 AM
Subject  Subject ::  Re: Basic G a Pascal na PMDčku.
Teraz už funguje aj prepínanie INS/OVR. Super.

O napísaní Tomcsányimu som už uvažoval skôr, resp. sa mi marí, že som mu už kedysi dávno písal, ale o iných veciach. A už si nepamätám s akým výsledkom (nemám z roboty prístup k súkromným emailom).
Zamyslím sa, ako to vôbec formulovať, keďže je to 25 až 30 rokov, čo sa venoval PMD 85. Po takej dobe by som si nepamätal ani ja nič :-D
:: back to start of topic :: back to topic list ::