OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 01:34

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 22 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
PříspěvekNapsal: 02.04.2017, 22:48 
Offline
Prvnička

Registrován: 07.03.2016, 14:56
Příspěvky: 20
Bydliště: HK
Has thanked: 0 time
Been thanked: 1 time
Ahoj,
mam dotaz, zda je pravda, ze nejde udelat spolehlive snapshot pres NMI na realnem HW?

Mne osobne napada snad jen jeden okrajovy pripad, kdyz je zasobnik "plny" a pri NMI do nej ma Z80 zapsat PC. Tim se hodnota PC zapise nekam mimo SP, kde muzou byt jina dulezita data. Ale tento pripad je v realu asi hodne nepravdepodobny, ne?

Ale tady http://k1.spdns.de/Develop/Projects/zxs ... ion/z9.htm pisou:
Citace:
If the .sna snapshot is taken while the game abused the PC for bitmap copying, then the bitmap is broken or the game may not properly resume after the NMI at all.

Co si mam pod tim "abused the PC for bitmap copying" predstavit? A jak to muze pri NMI snapshotu zpusobit problem?


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 07:41 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Neviem co chceli povedat tym "abused the PC" ale pravdepodobne mysleli pripad, ked sa prenasaju data cez zasobnik - napriklad nastavim si SP na oblast zdrojovych dat, vyPOPujem vsetky registre, potom nastavim SP na oblast cielovych dat a vsetky vyPOPovane data v registroch zase naPUSHujem. No a mozny problem nastane, ked pride NMI zrovna vtedy, ked SP ukazuje do zdrojovych dat. Zdrojove data sa nasledne prepisu adresou kde sa prave nachadza PC a tym padom budu (silno pravdepodobne) poskodene. Aplikacia bude mat posahanu grafiku, ale obecne to nie je dovod na to, aby vobec nefungovala.

Dalsi mozny dovod je ked hned pred zdrojovou alebo cielovou oblastou je nieco dolezite, nejake dalsie data alebo kod. Ak sa SP nachadza prave na zaciatku tejto oblasti (zacina sa POPovat alebo sa prave doPUSHovalo), a pride NMI, tak sa prepise tato dolezita oblast. Ak je tam nejaky dolezity kod, tak potom aplikacia moze realne zhavarovat.

Nuz a posledny pripad, kedy NMI urcite zhavaruje, je ked SP zrovna ukazuje niekam do romky. Je jasne, ze do romky sa navratova adresa zapisat neda, a preto program netusi, kam sa ma po NMI vratit. Toto sa da velmi dobre vyuzit ako ochrana proti snapu - nastavim si SP do romky na nejaku vhodnu adresu, taku, ze ked sa procesor bude vracat z NMI, skoci na moju rutinku, ktora nasledne vypise ze pozor, bolo stlacene NMI :)


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 10:28 
Offline
Prvnička

Registrován: 07.03.2016, 14:56
Příspěvky: 20
Bydliště: HK
Has thanked: 0 time
Been thanked: 1 time
Diky za vysvetleni, se SP to konecne dava smysl.

Je realne, aby nejaka periferie dokazala tento problem obejit?

Dokazu si predstavit, ze perfierie bude sniffovat sbernice a pamatovat si cely obsah ZX RAM ve sve RAM. Pri NMI zachyti, kam do pameti se zapisuje PC (na SP). Tim bude vedet hodnotu SP (kam se zapisuje), PC (co se zapisuje) i puvodni stav RAM - ma ji ve sve RAM, tento posledni zapis(y) do ni nepropise. Je pak realne sestavit kod pro navrat z takto provedeneho NMI?

Napada me:
  1. Asi musi probehnout RETN, aby se obnovil IFF1 (nebo to jde i jinak?), ze?
  2. Takze nastavit SP do nasi RAM (periferie) v dolnich 16kB,
  3. udelat RETN na zname misto v teto RAM (misto do uziv. beziciho programu),
  4. odtud obnovit natvrdo SP (hodnotu vi periferie),
  5. opravit RAM kam se zepsal PC pri skoku do NMI (hodnotu vi periferie),
  6. a pak udelat skok na zapamatovany PC (hodnotu vi periferie),
  7. odmapovat periferii z pameti.

Je tento postup realny?


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 12:10 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
pavkriz píše:
Je realne, aby nejaka periferie dokazala tento problem obejit?
Ano. Spravny HW zmoze prakticky vsetko :)
pavkriz píše:
Dokazu si predstavit, ze perfierie bude sniffovat sbernice a pamatovat si cely obsah ZX RAM ve sve RAM. ... Je tento postup realny?
Je realny, ale zbytocne zlozity. MDV to mal vo svojom AP-01 spravene jednoduchsie - po NMI sa pre zapis navratovej adresy na stack zakazal zapis do ramky a adresa sa odchytila do specialneho registra na to urceneho. Nasledne si obsluzna rutinka NMI mohla adresu precitat a pouzit ju.
pavkriz píše:
Asi musi probehnout RETN, aby se obnovil IFF1 (nebo to jde i jinak?), ze?
Nemusi. RETN okrem bezneho RETu robi navyse iba to ze obnovi stav IFF1 zo zalohy IFF2. Toto obnovenie je mozne urobit aj "rucne" - instrukciou LD A,I si nacitame stav IFF2 a nasledne podla neho (ne)spravime EI. Dokonca, pri loadovani snapu je to nutne robit rucne, pretoze vtedy mame priznak EI/DI ulozeny niekde v snape a nie v IFF2.

Okrem toho, ak sa v obsluznej rutinke NMI pouzije RETN, nutne to musi byt posledna instrukcia ktora sa vracia do povodneho programu. Pretoze hned po nej moze byt prerusenie uz povolene a tym padom "system uz bezi". Ale my sa nechceme vracat do preruseneho programu pomocou RETu (lebo navratovu adresu nemame PUSHnutu na zasobniku) ale inym sposobom - aj kvoli tomu je nutne stav IFF1 obnovit "rucne".


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 12:34 
Offline
Prvnička

Registrován: 07.03.2016, 14:56
Příspěvky: 20
Bydliště: HK
Has thanked: 0 time
Been thanked: 1 time
Diky za objasneni, to rucni obnoveni IFF mi uz v mezicase doslo ;-)

Citace:
po NMI sa pre zapis navratovej adresy na stack zakazal zapis do ramky


Ja jsem mel na mysli klasicke ZX Spectrum, bez nejakych uprav unitr. Periferie pripojena k ZX asi nezabrani zapisu ("poskozeni") do RAM, nebo mi neco uniklo?


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 14:46 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
pavkriz píše:
perfierie bude sniffovat sbernice a pamatovat si cely obsah ZX RAM ve sve RAM.
...
Ja jsem mel na mysli klasicke ZX Spectrum, bez nejakych uprav unitr. Periferie pripojena k ZX asi nezabrani zapisu ("poskozeni") do RAM, nebo mi neco uniklo?
Akurat ta periferia bude musiet mat tej ramky skutocne hodne - napriklad len taka MB02 pripojena na ZX128 by si hned vyzadovala sledovat a odpametavat si 640kB ram. A samozrejme s tym suvisi aj nutnost aby periferia sledovala stav portov, aka konfiguracia ram je prave nastavena. Cele by sa to tym dost skomplikovalo. Mohli by sme to zjednodusit a povedat si ze snap sa tyka cisto len ZX Spektra 128k, ale nutnosti 128kB pridavnej pameti a sledovaniu minimalne portu #7FFD (a na +2A/+3 aj #1FFD) sa aj tak nevyhneme.


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 16:31 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
Je to malá pravdepodobnosť, ale vylúčiť sa nedá:
Chyba by mohla nastať zmenou obsahu registra R, ale tomu by sa malo dať zabrániť nastavenim správnej hodnoty R .


Nahoru
 Profil  
 
PříspěvekNapsal: 03.04.2017, 21:41 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Antony/DTA píše:
Je to malá pravdepodobnosť, ale vylúčiť sa nedá:
Chyba by mohla nastať zmenou obsahu registra R, ale tomu by sa malo dať zabrániť nastavenim správnej hodnoty R .
Ale to uz si veci, o ktore sa musi postarat obsluha NMI spolu s loaderom snapu - presne zistit aku hodnotu mal R v okamihu prichodu NMI a nasledne ho prednastavit tak, aby v okamihu pokracovania programu po loadnuti snapu mal zase tu istu hodnotu. Skratka, je to softwerovy problem, nie hardwerovy.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2018, 02:06 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Ešte jedna maličkosť: IM0, IM1, IM2. Neviem, či si to program vie nejako detekovať, ale napríklad D40 si režim určí iba podľa I registra. Keď je 63, nastaví sa IM1, inak IM2.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2018, 08:40 
Offline
Kecálek
Uživatelský avatar

Registrován: 24.03.2014, 08:10
Příspěvky: 206
Has thanked: 80 times
Been thanked: 124 times
Pardon, ze jako HW temer nepolibeny spektrista do toho kecam, ale neslo by to udelat proste tak, ze mezi nmi tlacitko a procesor se vlozi toto udelatko, ktere proste odchytne stisk nmi tlacitka a potom se provede nejaka akce? Tzn. vycte se PC a ulozi se misto na zasobnik do toho specialniho registru, atd.???


Jak to mel presne udelane MDV? Tak slozite jak pises vyse, Busy, nebo nejak jednoduseji?


Hood

_________________
http://hood.speccy.cz
http://sarah.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2018, 12:06 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
PotPalo píše:
Ešte jedna maličkosť: IM0, IM1, IM2. Neviem, či si to program vie nejako detekovať, ale napríklad D40 si režim určí iba podľa I registra. Keď je 63, nastaví sa IM1, inak IM2.
Z toho vyplyva dalsia ochrana voci D40 snapu: Nechat bezat program v IM1, ale pritom mat v pameti pripraveny vektor pre IM2 so spravne nastavenym I. Ked sa program nahra zo snapu, D40 nastavi IM2, a vykona sa rutinka zavesena na vektore, ktora vypise ze toto je nelegalny snap a posle uzivatela doprdele (na adresu 0) :)

Ale k veci. Neexistuje priamy sposob ako zistit rezim prerusenia. Musi sa to robit skusmo - vytvori sa vektor pre IM2, pocka sa na prerusenie a ak to na vektor skoci, bolo nastavene IM2. Ak skoci na adresu #38, bolo IM0 alebo IM1. Odlisit IM0 od IM1 je komplikovanejsie, to si uz vyzaduje nejaku periferiu, ktora je schopna procesoru podstrcit instrukciu ktora sa ma pri preruseni vykonat. Ak napriklad postrcime instrukciu RST #00, a procesor pri preruseni aj tak skoci na #38, potom bolo nastavene IM1. Ak skoci na nulu, bolo nastavene IM0.
hood píše:
Pardon, ze jako HW temer nepolibeny spektrista do toho kecam, ale neslo by to udelat proste tak, ze mezi nmi tlacitko a procesor se vlozi toto udelatko, ktere proste odchytne stisk nmi tlacitka a potom se provede nejaka akce? Tzn. vycte se PC a ulozi se misto na zasobnik do toho specialniho registru, atd.???
Akurat CPU nema mechanizmy ktore by priamo umoznili vycitat z neho aktualny stav registrov.
hood píše:
Jak to mel presne udelane MDV? Tak slozite jak pises vyse, Busy, nebo nejak jednoduseji?
Technicke detaily neviem, ale urcite to nebolo nic zloziteho. CPU normalne dostal signal NMI, ale ked na zasobnik pushoval navratovu adresu, tak zapis do ramky sa zablokoval a specialny hardware odklonil zapis oboch bajtov navratovej adresy do specialnych registrov, na to urcenych. CPU si myslel, ze normalne zapisuje do pameti, ale namiesto pameti sa na datovu zbernicu pripojili specialne registre, do ktorych sa navratova adresa zapisala.


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2018, 19:03 
Offline
Kecálek
Uživatelský avatar

Registrován: 24.03.2014, 08:10
Příspěvky: 206
Has thanked: 80 times
Been thanked: 124 times
Citace:
hood píše:
Pardon, ze jako HW temer nepolibeny spektrista do toho kecam, ale neslo by to udelat proste tak, ze mezi nmi tlacitko a procesor se vlozi toto udelatko, ktere proste odchytne stisk nmi tlacitka a potom se provede nejaka akce? Tzn. vycte se PC a ulozi se misto na zasobnik do toho specialniho registru, atd.???
Akurat CPU nema mechanizmy ktore by priamo umoznili vycitat z neho aktualny stav registrov.
hood píše:
Jak to mel presne udelane MDV? Tak slozite jak pises vyse, Busy, nebo nejak jednoduseji?
Technicke detaily neviem, ale urcite to nebolo nic zloziteho. CPU normalne dostal signal NMI, ale ked na zasobnik pushoval navratovu adresu, tak zapis do ramky sa zablokoval a specialny hardware odklonil zapis oboch bajtov navratovej adresy do specialnych registrov, na to urcenych. CPU si myslel, ze normalne zapisuje do pameti, ale namiesto pameti sa na datovu zbernicu pripojili specialne registre, do ktorych sa navratova adresa zapisala.


No a kdyz to tedy slo na tom pocitaci AP...tak by to šlo i na ZXS? Nenasel by se tady nejaky zkuseny HW stavar, ktery by to vymyslel? Ono totiz mit 100% moznost navratu z nmi zpet do programu by se fakt hodne hodilo.( k tomu by se pridal nejaky koprocesor, ktery by umel treba reagovat na breakpointy spustenim nejakeho monitoru:))

_________________
http://hood.speccy.cz
http://sarah.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 12.02.2018, 22:16 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
Tak hardvérovo nieje problém odchytiť práve zapisovaná dva byty, ale je problém zabrániť, aby sa zapísali do pamäte. To by chcelo úpravu počítača, ako prídavné zariadenie to nepôjde. Na datovú zbernicu sa totiž ešte dá vnútiť niečo iné, ako tam je (je totiž oddelená rezistormi), ale na adresovú to nepôjde, tá je napriamo z PLA, aj s ostatnými signálmi.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2018, 11:25 
Offline
Kecálek
Uživatelský avatar

Registrován: 24.03.2014, 08:10
Příspěvky: 206
Has thanked: 80 times
Been thanked: 124 times
PotPalo píše:
Tak hardvérovo nieje problém odchytiť práve zapisovaná dva byty, ale je problém zabrániť, aby sa zapísali do pamäte. To by chcelo úpravu počítača, ako prídavné zariadenie to nepôjde. Na datovú zbernicu sa totiž ešte dá vnútiť niečo iné, ako tam je (je totiž oddelená rezistormi), ale na adresovú to nepôjde, tá je napriamo z PLA, aj s ostatnými signálmi.


Hm, hm. A jak velký zásah do počítače by to byl? Preskraby, pájení, propojky? Nebo snad ještě něco horšího??!? :roll:

_________________
http://hood.speccy.cz
http://sarah.speccy.cz


Nahoru
 Profil  
 
PříspěvekNapsal: 13.02.2018, 11:43 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.06.2013, 20:26
Příspěvky: 2487
Has thanked: 115 times
Been thanked: 424 times
hood píše:
PotPalo píše:
Tak hardvérovo nieje problém odchytiť práve zapisovaná dva byty, ale je problém zabrániť, aby sa zapísali do pamäte. To by chcelo úpravu počítača, ako prídavné zariadenie to nepôjde. Na datovú zbernicu sa totiž ešte dá vnútiť niečo iné, ako tam je (je totiž oddelená rezistormi), ale na adresovú to nepôjde, tá je napriamo z PLA, aj s ostatnými signálmi.

Hm, hm. A jak velký zásah do počítače by to byl? Preskraby, pájení, propojky? Nebo snad ještě něco horšího??!? :roll:

Řekněme... udělat si vlastní desku. :speccy:

_________________
"Je lepší rozsvítit byť jen malou svíčku, než jen proklínat temnotu." (Konfucius)

www.zxsparrow.com


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 22 ]  Přejít na stránku 1, 2  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 8 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz