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

Sematikus végrehajtási folyamat

A következő táblázat mutatja a program futását amikor a WHDLoad installált program végre lesz hajtva. Remélem segít megérteni a WHDLoad működését és azt, hogy hogyan működik együtt a WHDLoad, a Slave és az installált program.

A FELHASZNÁLÓ
  • elindítja a demót vagy a játékot az ikonjára klikkelve vagy parancssorból indítva
Az Operációs Rendszer
  • betölti a WHDLoad programot és elindítja
WHDLoad
  • ellenőrzi a szoftver és hardver környezetet
  • betölti és ellenőrzi a Slave-et
  • lefoglalja az installált programhoz szükséges memóriát
  • ha a Preload/S be van kapcsolva, betölti a lemez képmásokat és a fájlokat a memóriába (ha van elég)
  • leállítja a rendszert (kikapcsolja a multitask-ot és a megszakításokat, átkapcsolja a grafikus hardvert OCS módba, minden hardvert kezdőállapotba hoz)
  • átugrik a Slave-re
Slave
  • betölti az insatllált program fő indítóját egy WHDLoad funkció segítségével (pl. resload_DiskLoad vagy resload_LoadFile)
  • kijavítja a fő indítót (hogy a program a Slave-en keresztül töltse be az adatokat, kompatibilitási problémák, engedélyezi a kilépést
  • meghívja a fő indítót
Installált program
  • teszi a dolgát
  • adatok betöltésénél meghívja a Slave-et (mert a Slave már módosította hogy ezt tegye), és Slave meghívja a WHDLoad-tot, és a WHDLoad részben engedélyezi a rendszernek az adatok betöltését (csak akkor ha az adat nem Preload), aztán visszatér, visszatér és az installált program fut tovább
A FELHASZNÁLÓ
  • kilép a programból a QuitKey megnyomásával
Slave
WHDLoad
  • engedélyezi a rendszert (visszaálítja a hardver regisztereket, képernyőt és memóriát)
  • felszabadítja az összes lefoglalt erőforrást
  • visszatér a rendszerbe

Hogyan kell installálni egy egyszerű egylemezes sávtöltőst

Ez egy nagyon kicsi és rövid lépésenkénti útmutató ahhoz, hogy hogyan lehet a WHDLoad segítségével installálót készíteni. Az útmutaó egy ideális egyszerű esetet vesz alapul. A valós világban ilyen valószinűleg soha nem fog előfordulni. A speciális esetekre és problémákra olvasd el az ezt követő fejezeteket.
  1. Előkészületek
  2. A Slave
    A slave megírásához a következő információkra van szükség:
    1. Hol helyezkedik el a lemezen a fő indító?
    2. A fő indítón belül hol van a lemezbetöltő?
    Ezekhez az információkhoz először elemzeni kell az indítóblokkot. Legtöbbször a fő indító innét töltődik be exec.DoIO() segítségével. Néha egy speciális sávtöltő van az indítóblokkban. Most megírhatjuk a Slave-et ami szimulálja az indítóblokkot és a betölti a fő indítót a lemez képmásból. Most ki kell szednünk a fő indítót a képmásból vagy a memória kiíratásból. Ezután meg kell találnunk a betöltőt a főprogramban. Ezt gyorsan úgy tehetjük meg, hogy megkeressük a $AAAAAAAA mintát (ezt az MFM dekódolás használja) egy hexa-szerkesztővel. Ezután kivágjuk a megtalált területet (+/- $1000 byte), visszaalakítjuk, és megkeressük a rutin elejét. Megértjük a paraméterlistát. Mostmár létrehozhatjuk azt a kódot, ami módosítja ezt a töltőrutint úgy, hogy minden hívás a Slave-hez megy. A Slave ezután módosítja a paramétereket és meghívja a resload_DiskLoad. WHDLoad funkciót.
  3. Ideális esetben az installálás kész.
    Az egyetlen hátralévő dolog egy szép ikon készítése. Szedjél ki két képet a WHDLoad kutató opciójával és az SP vagy a leállító vagy U.A.E. használatával és készítsd el az ikont. A 16 színű RomIcon paletta ajánlott.

Lehetséges problémák és speciális esetek

Nem-standard sávtöltő

Néhány program saját lemezformátumot használ. Ez azt jelenti hogy a DIC nem tudja a lemezképmásokat létrehozni. Ilyen lemezekről a RawDIC tud lemezképmásokat vagy fájlokat létrehozni. További információkért lásd a RawDIC dokumentációját.

Több lemez

Ha a program egynél több lemezt használ, akkor a Slave-nek a lemezhozzáféréseket át kell irányítania a képmás fájlba. Ez néha nem könnyű. Néhány program támogat egynél több meghajtót, így használhatod a meghajtó számát a lemez kiválasztásához. A legtöbb program egy azonosítót használ minden lemezen a megkülönbönztetés miatt. Ebben az esetben változókat kell használni, amelyek a lemez számát tartalmazzák, és minden lemezazonosító-hozzáférésnél (ezt a lemez-töltő paramétreinek elemzéséből tudhatjuk meg) növelni kell a változót (ha elérte az utolsó lemezt, akkor csökkenteni). Így remélhetőleg a betöltő beolvassa az azonosítót újra és újra addig amíg a megfelelő lemezt meg nem találja. Ezt persze a programba épített lemez-kérdező kikapcsolhatja.

Eredménytábla mentése

Nincs itt sok mondanivaló. Használd a resload_SaveFile opciót egy bizonyos memóriaterület lemezre írásához. Ha akarod, ezt be is kódolhatod, hogy a lamerek ne tudják könnyen módosítani. Nem javasolt közvetlen lemezképmásba írás (a resload_SaveFileOffset opciót használva), mert ha valami balul sül el (pl. összeomlás), a képmások valószínűleg megsérülnek.

Játékmentések

A mentések kezelése hasonló az eredménytábláéhoz.

Operációs rendszer használata

Amikor a slave és az instalált program elindul, a rendszer nem létezik, nem érhető el, és nincs értelme elérni! Ezért az installált program mindenféle elérését le kell tiltani. Ha nincs belőlük sok és nem számítanak a WHDLoad környezetben (mint pl. exec.Disable() vagy exec.SuperState()) egyszerűen NOP ($4e71) kell. Ha fontos funkciókhoz érnek hozzá (mint exec.DoIO()), át kell irányítani őket a Slave-hez és emulálni kell. Ha nagyon sok van belőlük, készíteni kell egy egyszerű exec.library-t egy nemhasznált memória-területen (inicializálni kell a longword-ot a $4 címen). Megnézheted az Oscar.slave forráskódját, amely exec.AllocMem() utasítást emulál. A rendszerhozzáférések felismeréséhez a kezdeti execbase címe a következő legyen: $f0000001, de így minden olyan rutin, amely használja ezt, "Address Error" kivétet fog generálni.
Ha nagyon sok rendszerfunkció van használatban, használd a KickEmu csomagok egyikét, amelyet a fejlesztői csomagban találhatsz meg. Van egy a Kick 1.3 részére ('src/sources/whdload/kick13.s') és van egy a Kick 3.1 részére ('src/sources/whdload/kick31.s'). A csomagokhoz szükséges az eredeti Kickstart képmás és egy teljes rendszer-környezetet fognak létrehozni a WHDLoad területén belül. További információért nézd meg a mellékelt dokumentációt.

Gyakori kompatibilitási problémák

68000/68010/68ec020 korlátozott címterülete

Ezeken a processzorokon a címterület korlátozva van 16 MB-ra ($000000...$ffffff) mert a processzoroknak csak 24 címvezetékük van. Emiatt az összes magasab című elérés az alsó 16 MB-ban lesz végrehajtva a 8 legnagyobb bit figyelmenkívül hagyásával. Néhány program ezeket adattárolásra használja, vagy egyszerűen nem törli. Az olyan processzorokon, ahol a teljes 4 GB-os címterület megvan (pl. 68020/680ec30/68030/68040/68060) ez nem működik, mivel a teljes 32-bites cím lesz használva.
A megoldás a hozzáférések módosítása és átirányítása a megfelelő címre.
Néha a különös címekhez való hozzáférés oka lehet egy nem inicializált mutató. Ebben az esetben segíthet a $400 - ws_BaseMemSize törlése.

Processzorok különböző stackframe-je

A megszakítások és kivétek során a processzorok által létrehozott stackframe-ek különbözőek a 68k család tagjainál. A 68000-en a stackframe 6 byte, kivéve a busz és címhibák. A stackframe a mentett SR-t (a7) és PC-t (2,a7) tartalmazza. Minden más processzoron (68010+) a minimális stackframe 8 byte és tartalmazza a vektor számát word-ként (6,a7). Ez a négy-word stackframe formátum $0 lesz létrehozva a "Trap #xx" és a megszakítások számára 68010-68060 processzorokon. A stackframe-ek más kivéteknél különböznek minden processzoron. Az RTE utasítások különbözőek a 680000en és 68010+-eken. 68000-on csak visszaállitja az SR-t és PC-t és folytatja a program végrehajtását a megszakított címen. 68010+-okon kiüríti a stackframe-et a stackframe formátumától függően.
Néhány program berak egy címet (PC) és egy SR-t és ezután végrehajt egy RTE utasítást. Ez csak a 68000-en működik, 68010+-okon előre nem látható eredményei lesznek.
Ha egy program ezt teszi, ki kell javítanod. Néha elég az RTE-t kicserélni RTR-re.

MOVEM.x RL,-(An) 68000/010 és 68020/030/040 processzorokon

Különbség van, ha a regisztert predecrement módban (RL) használják, ekkor tartalmazni fogja a regiszterlistát is. A 68020, 68030 és 68040 processzorokon a memóriába írt érték a regiszter kezdeti értéke a művelet méretével csökkentve. A 68000 és 68010 a kezdeti regiszter értéket írja (nincs csökkentés).
Mivel egy ilyen konstrukció nem túl hasznos, jelenleg nincs egy program sem, amelynek ez gondot okozna.

Általános útmutató installálók írásához

Tippek és trükkök

Mi a jobb, lemezképmások vagy fájlok használata?

Előfordul, hogy lehetőséged van választani lemezképmások vagy valódi fájlok között. Mindkettőnek megvan az előnye. A lemezképmások általában könnyebben kezelhetőek és gyorsabban létrehozhatóak a Slave által. De a valódi fájlok könnyebben gyorsítótárazhatóak (ha csak kevés memória van vagy az nagyon töredezett). A merevlemezen is kevesebb helyet foglalnak el a valódi fájlok, mint a lemezképmások. Csak akkor használj lemezképmást ha sok fájl van (több mint 30).
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]