Pouzivani resload_Protect#?
Teorie
Vyskytnou se ruzne situace, ve kterych se muze hodit byt informovan o pristupech
nainstalovaneho programu do urcitych oblasti pameti. S pomoci funkci resload_Protect#?
je mozne chranit urcite oblasti pameti od cteni anebo zapisovani procesorem.
Chranit znamena, ze kazdy pristup do takto chranene oblasti vyvola Access Fault
vyjimku, ktera vyusti v chybovy requester WHDLoadu. Jestlize oznacite oblast pameti
jako chranenou pouzitim resload_Protect#? funkce,
WHDLoad zmeni popisy one oblasti v prekladaci MMU. Nyni pri kazdem pristupu do dane
pameti CPU vytvori vyjimku Access fault. Handler vyjimek uvnitr WHDLoadu overi
duvod pro vyjimku a WHDLoad vyskoci s chybovym hlasenim. Tato schopnost se ale
projevuje silnym zpomalenim behu programu, obzvlaste pokud jsou chranene casti
kodu ve stejne strance pameti. Pokud program zavisi na rychlosti behu, rozdily
ve funkcnosti jsou mozne - nektere programy nemusi s ochranou pameti fungovat.
Priklad: checksums kodu
Jestli instalujete hru pomoci WHDLoad, budete muset patchnout puvodni loader
ve hre tak, aby program nahraval pres WHDLoad. Nektere hry provadeji kontrolni
soucet klicovych oblasti programu, aby detekovaly zmeny puvodniho kodu. Tyhle
rutiny muze byt nekdy tezke najit. Ale pouziti resload_Protect#? funkcni
ve WHDLoad problem resi. Vsechno co musite udelat, je chranit bajty, ktere jste
zmenili v kodu hry pred prectenim. Pak kazda rutina, ktera se pokousi precist
vas opravny kod zpusobi chybu a vy zjistite, kde kontrola je.
Omezeni
Nesmite chranit pamet, kde je SSP. Jestli to udelate a stane se vyjimka, dojde
k dvojite chybe na sbernici protoze CPU nebude schopne zapsat stackframe vyjimky.
Pote uz se da program jen resetnout.
- 68020 + 68851
- tento hardware neni momentalne podporen
- 68030
- 3-Byte presuny nejsou podporovany a zpusobi Access Fault, takove presuny
se stavaji pokud je pristupovano k longwordu na liche adrese (napr. tst.l $fff),
zatimco chranena oblast pameti zacina na $1000). Protoze tohle je nespravne i na A500,
mozna na to nikdy nenarazite.
- uzamknute presuny zpusobene TAS, CAS or CAS2 nejsou podporeny a zahlasi chybu,
to ale neni problem, protoze tyto presuny nejsou podporeny hardwarem Amigy.
- 68040
- tento hardware neni momentalne podporen
- 68060
- misalignovane data stream pristupy nejsou podporeny a zpusobi chybu
(napr. tst.l $fff, zatimco chranena oblast pameti zacina na $1000), toto omezeni
je problem a obcas je kvuli tomu schopnost resload_Protect temer nepouzitelna,
mozna to pozdeji opravim, ale je to tezke
- misalignovana instructions stream pristupy nejsou podporeny a vytvori chybu,
pokud jsou obe zasazene stranky chranene
- uzamknute presuny zpusobene TAS, CAS or CAS2 nejsou podporeny a zahlasi chybu,
to ale neni problem, protoze tyto presuny nejsou podporeny hardwarem Amigy.
- instrukce, ktere lezi na chranene strance pameti a pristupuji k supervizor
casti status registeru budou vykonany nepresne, tyto instrukce vzdy vidi trace bit
jako 1 a masku priority vyjimky jako 7, jakakoliv modifikace supervizor casti
bude neucinna
- movem instrukce muzou pristupovat k chranene oblasti bez ohlaseni chyby,
protoze je overeny jen prvni pristup k chranene oblasti
- move16 a double precision operace (FPU) nejsou podporene a ohlasi chybu
- "move (mem),(mem)" prekracujici hranice stranek pameti budou vykonany nespravne