Forum

Z PMD 85 Infoserver

:: späť na začiatok témy :: späť na zoznam tém ::
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  05.07.2011 12:39:46
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
Tabuľka obsadenia portov na PMD 85 je aj priamo na našich stránkach v sekcii
http://pmd85.borik.net/wiki/Kategória:Detaily_o_PMD_85_a_kompatibilných

 
Správa
Autor  Autor ::  Martin Ulrich
Poslaná  Poslaná ::  06.07.2011 15:59:02
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
aha,dekuji. A nemáte někdo obraz kazety s tím ovladačem a ukázkovým programem? Původně sem chtěl udělat jenom takovou blbost, podle toho jak by se myší hýbalo tak by se ukazoval bod na obrazovce, primitivni kurzor. Čekal jsem něco jako Kempston mouse,kde jsou 3 porty a na jednom je souřadnice X,na druhém souřadice Y a na třetí tlačítka myší,ale tyhle dvě jsou na mě moc složité.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  06.07.2011 23:30:19
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
Ovládač a testovací ukážkový program možno predbežne stiahnuť tu:
http://pmd85.borik.net/_work/poly-08.ptp
Scany z manuálu k myši:
http://pmd85.borik.net/_work/poly-08-1.jpg
http://pmd85.borik.net/_work/poly-08-2.jpg
Nahrať treba MDRIVER a aj MTEST a spustiť JUMP 5000. Keby to náhodou "zhavarovalo", tak to treba skúsiť znovu.
Problém je v tom, že MTEST používa pri výpisoch na obrazovku podprogramy z Monitora PMD 85, ktoré využívajú SP register ako ukazateľ do VRAM bez toho, aby sa pred tým zakázalo prerušenie. A ako bolo spomenuté vyššie, myš prerušenie využíva. Pokiaľ SP práve ukazuje niekde do VRAM a dôjde k prerušeniu, tak sa po vstupe do prerušenia v najlepšom prípade iba poškodí časť VRAM. Ak je ale SP niekde hore na prvých stĺpcoch obrazovky, PUSHovanie vlastne "pretečie" do systémových premenných Monitora a čo sa stane ďalej je už "vo hviezdach". Najčastejšie sa mi to stávalo hneď pri spúšťaní MTESTu, zrejme pri mazaní obrazovky.
 
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  07.07.2011 09:46:45
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
Musím (po)opraviť svoje tvrdenia o probléme s prerušením a rutinami v Monitore.

Pri tlači znaku v rutine na adrese 854Ah sa nastavuje register SP na hodnotu 0FFC0h, čo je -64 a predstavuje offset pre prechod na predchádzajúci mikroriadok VRAM. Na to je tam použitá inštrukcia DAD SP (HL ukazuje do VRAM). Pokiaľ v tomto čase, kedy má SP hodnotu 0FFC0h, dôjde k prerušeniu, tak sa pochopiteľne na "zásobník" uloží návratová hodnota a hodnoty ostatných registrov odpamätávaných v obsluhe prerušenia. Keďže od adresy 0FFC0h k nižším adresám nič nie je, tak to v prípade MTESTu nevadí a všetko chodí ako má. Možno si to overiť v emulátore tak, že si v debuggeri do MEM dajte adresu 0FFB0h a spustite MTEST. Po zapnutí PMD 85 by tam mali byť samé nuly, ale pri behu MTESTu je od adresy 0FFB4h vidieť hodnoty, ktoré sa tam uložili pri vyvolaní prerušenia.

Väčší problém je v rutine pre zmazanie obrazovky na adrese 85A7h. Tam sa SP register používa na dva účely. V prvom prípade je to ukazateľ do VRAM, kedy sa inštrukciou PUSH B vypĺňa VRAM nulami. Tu platí to, čo som uviedol v predošlom príspevku. Pokiaľ sa SP dostane do ľavej časti obrazovky, vyvolané prerušenie môže poškodiť niektoré systémové premenné. Druhý prípad je kritickejší, pretože sa SP nastavuje na hodnotu 0040h, opäť ako offset pre prechod na nasledujúci mikroriadok VRAM. I keď má SP túto hodnotu iba veľmi krátko (20 taktov pre každý mikroriadok), tak v prípade vyvolania prerušenia, samotná rutina obsluhy prerušenia si prepíše skokovú inštrukciu JP xxxx, ktorá je na adrese 0038h. MDRIVER sa pri prerušení vnára o 12 bytov, 0040h - 000Ch = 0034h. Pri nasledujúcom prerušení sú už na adrese 0038h nezmysly a to je dôvod k nepredvídateľnému chovaniu. MTEST maže obrazovku iba pri spustení (po inicializácii a povolení prerušenia), takže preto mi program padal iba pri jeho spúšťaní.
 
Správa
Autor  Autor ::  dex
Poslaná  Poslaná ::  06.07.2011 19:43:15
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
Já Greditor v .ptp souboru pro PMD mám (laskavostí bratří Bóriků), nahrál jsem ho sem: http://www.uloz.to/9592248/gredit16-ptp
ALE (cituji):
"Editor je iba pre PMD 85-1 a bez pripojenej myši sa ani nenahraje, pretože pre čítanie bytu z MGF používa prerušenie od časovača, ktoré je potom používané samotným ovládačom myši."
"Podľa prvotného preskúmania kódu síce program nevolá žiadne rutiny z ROM, ale na začiatku si inicializuje systémové premenné podľa tabuliek z ROM. Ťažko teraz povedať, aký to má účel.
Čo sa týka HW, tak hlavne kvôli MGF IF, takže kód, ktorý číta z MGF funguje iba na PMD 85-1.
Pokiaľ sa nemýlim a skutočne program nevolá žiadne rutiny z ROM, tak by sa s drobnými úpravami dal použiť aj na ostatných modeloch. Pochopiteľne, bez pôvodného efektného loaderu, u ktorého sa najprv priblíži číslo 602 a roztiahne sa do priestoru a následne sa zobrazí "obostranný" štvorboký vektorový ihlan, ktorý sa počas nahrávania otáča. Libovický sa zrejme nudil :-)"
"Ten kúsok kódu z Greditu, ktorý si uviedol v ZXM 3/04 je takmer identický ako ten v Gredite na PMD 85.
Nejde mi ale do hlavy, prečo má Libovický v tom ovládači až 4 platné prechodové stavy pre každý smer (4x 1 a 4x -1)."
ZXM 3/04 je možno najít zde: http://zxm.speccy.cz/zxm/3-04.pdf (strana 9).
(první zmínka byla http://zxm.speccy.cz/zxm/1-02-4-03.pdf strana 19).
 
Správa
Autor  Autor ::  dex
Poslaná  Poslaná ::  06.07.2011 20:16:12
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
I když já pro A-Mouse na ZX Spectru používal s úspěchem celkem krátký ovladač ze ZXM 1/95, který považuju za nepřekonaný (a to i tím ze ZXM 4/00).
http://zxm.speccy.cz/zxm/1-95.pdf
Nepoužívá žádné Z80 specifické instrukce, které by se nedaly na 8080 nahradit.
Tento program nevyžaduje aktivaci rychlého přerušení, na Spectru stačilo zavolat ho jednou během TV snímku a podle výsledku překreslit šipku.
:: späť na začiatok témy :: späť na zoznam tém ::