[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

resload_Protect#?:n käyttö

Teoria

Monissa eri tilanteissa voi olla hyödyllistä tietää, koska asennettu ohjelma käyttää tiettyjä muistiosoitteita. Toiminnon resload_Protect#? avulla on mahdollista suojata tiettyjä muistialueita suorittimen lukemiselta ja/tai kirjoitukselta. Suojaus tarkoittaa, että jokainen haku suojatulle alueelle tuottaa Access Fault -poikkeuksen, josta WHDLoad antaa asiaankuuluvan valintaikkunan. Jos määrität muistialueen suojatuksi resload_Protect#?-funktiolla, WHDLoad muokkaa sitä koskevia sivun kuvaajia MMU:n kääntöpuussa. Nyt joka kerta yrittäessään käyttää suojattua sivua suoritin luo Access Fault -poikkeuksen. WHDLoadin sisäinen poikkeuskäsittelijä varmentaa poikkeuksen syyn. Jos syy oli suojatun sivun käyttö, mutta käyttö ei vastaa suojattua aluetta käyttö emuloidaan ja normaali ohjelman suoritus jatkuu. Muuten WHDLoad lopettaa toiminnan ja antaa asiaankuuluvan ilmoituksen. Jos käyttö oli käskyvirran käyttö (ts. suoritin yritti ladata koodia), se emuloidaan aina, toisin sanoen resload_Protect#?-funktiot vaikuttavat vain tietojen lukuun ja kirjoitukseen. Se, että jokainen suojatun sivun käyttöyritys (sivun koko on tällä hetkellä 4096 tavua) luo access fault -poikkeuksen, vaikka suojattu alue olisi vain 1 tavun mittainen, hidastaa huomattavasti ohjelman suoritusta. Erityisesti, jos koodin osia on samalla sivulla. Jos ohjelma riippuu suoritusnopeudesta, se voi toimia eri tavoin. Siksi tietyt ohjelmat eivät ehkä toimi resload_Protect-ominaisuuden kanssa.

Esimerkki: koodin tarkistussummat

Jos asennat pelin WHDLoadilla sinun on päivitettävä pelin alkuperäiset latausrutiinit niin, että ne lataavat pelitiedot WHDLoadilla. Jotkut pelit laskevat tarkastussummia koodialueista tunnistaakseen, onko alkuperäistä koodia muutettu. Näitä tunnistusrutiineja voi joskus olla vaikea löytää. WHDLoadin resload_Protect#?-funktiolla se on kuitenkin helppoa. Suojaa vain pelikoodissa muuttamasi tavut lukemiselta. Nyt jokainen tarkistussummaa laskeva rutiini, joka lukee päivitettyä koodia synnyttää access fault -poikkeuksen. Nin tiedät, missä rutiini sijaitsee.

Rajoitukset

Et voi suojata muistia, jonne SSP osoittaa. Jos teet niin ja tulee poikkeus, seurauksena on Double Bus Fault -virhe, koska suoritin ei voi kirjoittaa poikkeuksen pinokehystä. Double Bus Faultin jälkeen suoritusta voidaan jatkaa vain resetoimalla. WHDLoad tarkistaa suojatun alueen ja SSP:n ristiriidan ja keskeytyy, jos ehto täyttyy. Siitä ei ole apua, jos SSP muuttuu myöhemmin.

Lisätietoa rajoituksista sekä muuta tietoa on eri resload_Protect-funktioiden Autodoc-ohjeissa:


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]