Schematic execution flow

Nasledujici tabulka ukazuje, jak pracuje program, kdyz je spusten program nainstalovany WHDLoadem. Doufam, ze to pomuze pochopit, jak WHDLoad pracuje a jak WHDLoad, slave a nainstalovany program spolupracuji.

Uzivatel
  • spusti demo nebo hru kliknutim na ikonu nebo spustenim WHDLoad pres prikazovou radku
Operacni system
  • nahraje executable WHDLoadu a spusti ho
WHDLoad
  • testuje softwarove a hardwarove prostredi
  • nahraje a testuje slave
  • zabere pozadovanou pamet pro program
  • jestli je zapnutPreload/S, nahrava disk image a soubory do RAM dokud je pro ne dostatek volne pameti
  • vypina OS (zastavi mutitasking a preruseni, degraduje graficky hardware na OCS, inicializuje vsechen hardware s definovanymi hodnotami)
  • skoci do kodu slave
Slave
  • nahraje hlavni executable nainstalovaneho programu volanim WHDLoad funkce (napr. resload_DiskLoad or resload_LoadFile)
  • patchuje (upravi) hlavni executable (takze program bude nahravat sva data pres slave, odstrani se problemy s nekompatibilitou, a je umoznen exit z programu)
  • skoci do hlavniho executable hry nebo dema
Nainstalovany program
  • dela svou vlastni praci
  • pri nahravani dat z disku vola Slave (protoze Slave ho predtim tak upravil) a slave vola WHDLoad a WHDLoad castecne zapne OS aby nahral data (ale jen pokud data nejsou Preloadnuta), pak se vrati z OS, WHDload, slavu a nainstalovany program pokracuje dal
Uzivatel
  • vyskoci z programu pomoci QuitKey
Slave
WHDLoad
  • odblokuje OS (vrati hodnoty hardware registru, display a pamet)
  • uvolni vsechny zabrane zdroje
  • vraci se do OS

Jak nainstalovat jednoduchy trackloader jednodisketove hry

Tohle je velmi maly a kratky nazorny navod, jak vytvorit instalacku pomoci WHDLoad. Navod ukazuje idealni jednoduchy pripad. Ve skutecnosti se takovy pripad ale asi nikdy nestane, takze pro specialni pripady a problemy ctete nasledujici kapitoly.
  1. Priprava
  2. Slave
    Pro napsani slave potrebujeme nasledujici informace:
    1. Kde na disku je hlavni executable?
    2. Kde uvnitr hlavniho executable je disk loader? (=nahravaci rutina)
    Pro tuhle informaci nejdrive analyzujeme bootblock. Vetsinou je executable nahrany pomoci funkce exec.DoIO(), nekdy je ale v bootblocku specialni trackloader. Napiseme slave, ktery simuluje bootblock a nahraje hlavni executable z disk image. Ted vytvorime memory dump, disassemblujeme ji a pote musime najit loader. v hlavnim executable. Nejrychlejsi je hledat hex-editorem retezec $AAAAAAAA (ktery je pouzivan pro MFM decodovani) Pak si prohlednout danou oblast (v rozsahu +/- $1000 bytes) a najit zacatek rutiny. Najit parametry. Pak vytvorime kod pro slave, ktery upravi loader tak, aby byly vsechny skoky na loader prerizeny dovnitr slave. Pak si slave prizpusobi parametry a s jejich pouzitim vola WHDLoad funkci resload_DiskLoad.
  3. V idealni pripade je instalacka hotova.
    Zbyva uz jen udelat peknou ikonu. Vyripujte WHDLoadem dva obrazky pouzitim snoop modu a SP nebo freezerem nebo na U.A.E. a stvorte ikonu. Sestnactibarevna RomIcon paleta je idealni (ale lze ikonu vytvorit i pro vic formatu).

Mozne problemy a zvlastni pripady

Nestandartni trackloader

Nektere programy maji svuj vlastni format disku. To znamena, ze DIC nemuze vytvorit disk image. Pro vytvoreni souboru nebo images z takoveho disku je nezbytne napsat specialni rutinu s pouzitim RawDIC. Pro vic informaci ctete dokumentaci RawDIC.

Vice disku

Jestli program pouziva vic nez jednu disketu, slave musi preradit pristup k disku na odpovidajici disk image soubor. Nekdy je to tezke. Nektere programy umi pouzit vic disketovych jednotek, takze muzete pouzit cislo jednotky pro vybrani spravneho image. Vetsina programu hledaji urcite ID na disku, aby je rozpoznala, v tomhle pripade odchytte kazdou zkousku ID (napr. analyzovanim nahravacich parametru pro loader) a priradte spravnou hodnotu Pak se ID nacte ze spravneho disku a program uzna disk jako spravnou vlozenou disketu. Pokud je zobrazeny pozadavek pro vlozeni disku, odstrante ho.

Ukladani Highscore

Pouzijte resload_SaveFile k zapsani potrebne oblasti pameti na disk. Jestli chcete, zasifrujte vytvoreny soubor, takze lameri ho nebudou schopni editovat. Neni dobre zapisovat highscore primo do disk image (pouzitim resload_SaveFileOffset), protoze pokud se neco spatneho prihodi (treba se program sekne), muze se stat, ze image se poskodi.

Ukladani pozic

To je stejny pripad jako u highscore, tady ale mame ulehcenou situaci tim, ze hra ma pro ukladani pozice vlastni rutinu a parametry.

Pristupy k operacnimu systemu

V momente, kdy je slave a instalovany program vykonavan, neexistuje zadny OS, takze zadny pristup k nemu nebude fungovat! Vsechny pristupy hry nebo dema k OS musi byt odstraneny nebo emulovany. Pokud jich neni moc a nemaji ve WHDLoad systemu vyznam (napr.exec.Disable() nebo exec.SuperState()) proste je odstrante pomoci NOP ($4e71). Pokud ma volani OS dulezitou funkci (jako exec.DoIO()), napiste emulaci do slave.Obvykle problemy kompatibility

Odlisne stackframes na kazdem CPU

Stackframes tvorene CPU prerusenimi a vyjimkami se u jednotlivych CPU lisi. Na 68000 je stackframe 6 bajtu krome sbernicovych a adresovych chyb. Stackframe obsahuje hodnotu SR na (a7) a hodnotu PC na (2,a7). Na ostatnich CPU je minimalni stackframe 8 bajtu a dodatecne obsahuje cislo vektoru jako word na (6,a7). Tento ctyrwordovy format stackframu je vytvoren pro "Trap #xx" a preruseni na 68010-68060. Stackframes pro ostatni vyjimky jsou na kazdem procesoru jine. Instrukce RTE funguje jinak na 68000 a jinak na 68010+. Na 68000 vraci hodnotu do SR a pak se vraci na spravnou adresu, kdezto na 68010+ navic uvolni stackframe podle adekvatniho stackframe formatu. Nektere programy ukladaji adresu a hodnotu SR a pak vykonaji RTE. Takhle to ale funguje jen na 68000, na jinych CPU to ma katastrofalni ucinky. Jestli se o to program pokousi, musite to fixnout. Nekdy staci nahradit RTE s RTR.

MOVEM.x RL,-(An) na 68000/010 a 68020/030/040

Je rozdil, pokud register pouzity v predecrement modu je take obsazen v seznamu registru. Pro 68020, 68030 a 68040 je hodnota zapsana do pameti pocatecni hodnota registeru snizena rozsahem operace. 68000 a 68010 zapisuji pocatecni hodnotu registru (nesnizenou). Tento efekt se ale neda nijak vyuzit, takze zatim neni znamo mnoho programu, co tento problem zpusobuji.

Hlavni tipy pro psani instalacek