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

Ñõåìàòè÷åñêîå îïèñàíèå ðàáîòû ïðîãðàììû

Ñëåäóþùàÿ òàáëèöà ïîêàçûâàåò ïðîöåññ âûïîëíåíèÿ ïðîãðàììû, êîãäà çàïóñêàåòñÿ ïðîãðàììà, óñòàíîâëåííàÿ ñ ïîìîùüþ WHDLoad. ß íàäåþñü, ÷òî ýòî ïîìîæåò ïîíÿòü, êàê ðàáîòàåò WHDLoad è êàê WHDLoad, slave-ìîäóëü è óñòàíîâëåííàÿ ïðîãðàììà âçàèìîäåéñòâóþò ìåæäó ñîáîé.

 

ÏÎËÜÇÎÂÀÒÅËÜ
  • çàïóñêàåò äåìî èëè èãðó, ùåëêàÿ íà èêîíêó èëè çàïóñêàÿ WHDLoad ÷åðåç êîìàíäíóþ ñòðîêó
Îïåðàöèîííàÿ Ñèñòåìà
  • çàãðóæàåò WHDLoad è ïðèçâîäèò çàïóñê
WHDLoad
  • ïðîâåðÿåò ïðîãðàìíóþ ñðåäó è àïïàðàòíûå ñðåäñòâà
  • çàãðóæàåò è ïðîâåðÿåò slave-ìîäóëü
  • ðåçåðâèðóåò íåîáõîäèìîå êîëè÷åñòâî ïàìÿòè äëÿ óñòàíîâëåííîé ïðîãðàììû
  • åñëè àêòèâèçèðîâàíà îïöèÿ Preload/S, òî â îïåðàòèâíóþ ïàìÿòü çàãðóæþòñÿ îáðàçû äèñêà è ôàéëû (íàñêîëüêî ïîçâîëÿåò ñâîáîäíàÿ ïàìÿòü)
  • îòêëþ÷àåò OS (îòêëþ÷àåò ìíîãîçàäà÷íîñòü è ïåðåðûâàíèÿ, ïåðåêëþ÷àåò ãðàôèêó íà ðåæèì OCS, èíèöèàëèçèðóåò âñå àïïàðàòíûå ñðåäñòâà, èñïîëüçóÿ çàäàííûå çíà÷åíèÿ)
  • îñóùåñâñòâëÿåò ïåðåõîä íà âûïîëíåíèå slave-ìîäóëÿ
Slave-ìîäóëü
  • çàãðóæàåò ãëàâíûé èñïîëíÿåìûé ôàéë óñòàíîâëåííîé ïðîãðàììû, âûçûâàÿ ôóíêöèþ WHDLoad (íàïðèìåð, resload_DiskLoad èëè resload_LoadFile)
  • èñïðàâëÿåò èñïîëíÿåìûé ôàéë (÷òîáû ïðîãðàììà çàãðóçèëà ñâîè äàííûå ÷åðåç slave, óñòðàíÿåò ïðîáëåìû íåñîâìåñòèìîñòè, àêòèâèçèðóåò ôóíêöèþ âûõîäà èç ïðîãðàììû)
  • çàïóñêàåò ãëàâíûé èñïîëíÿåìûé ôàéë
Óñòàíîâëåííàÿ ïðîãðàììà
  • âûïîëíÿåòñÿ
  • ïðè ïîäãðóçêå äàííûõ ñ äèñêà, âûçûâàåò slave-ìîäóëü (ïîòîìó ÷òî slave-ìîäóëü èñïðàâèë èñïîëíÿåìûé ôàéë), slave-ìîäóëü âûçûâàåò WHDLoad, è WHDLoad ÷àñòè÷íî àêòèâèçèðóåò OS ÷òîáû çàãðóçèòü äàííûå (òîëüêî åñëè äàííûå íå áûëè ïðåäâàðèòåëüíî ïîäãðóæåíû - ñì. Preload), çàòåì âîçâðàùàåòñÿ â óñòàíîâëåííóþ ïðîãðàììó è ïðîãðàììà ïðîäîëæàåò âûïîëíåíèå
ÏÎËÜÇÎÂÀÒÅËÜ
  • âûõîäèò èç ïðîãðàììû, íàæèìàÿ êëàâèøó âûõîäà QuitKey
Slave-ìîäóëü
  • âîçâðàùàåòñÿ â WHDLoad, âûçûâàÿ resload_Abort
WHDLoad
  • ïåðåçàïóñêàåò OS (âîññòàíàâëèâàåò ñîñòîÿíèå ðåãèñòðîâ, ïàìÿòè, äèñïëåÿ)
  • îñâîáîæäàåò âñå çàíÿòûå ðåñóðñû
  • ïðîèçâîäèò âîçâðàò â OS

Êàê óñòàíàâèòü äèñê èñïîëüçóþùèé òðåêîâûé çàãðóç÷èê (trackloader)

Ýòî ñîâñåì êðàòêîå ïîøàãîâîå îïèñàíèå òîãî, êàê ñîçäàòü ïàò÷ äëÿ NDOS èãðû/äåìî, èñïîëüçóþùèé WHDLoad. Äàííûé ïóíêò ïîÿñíÿåò ñàìûé ïðîñòîé âàðèàíò.  ðåàëüíîñòè òàêîãî âàðèàíòà ñêîðåå âñåãî íå áóäåò.  ãëàâàõ æå ñëåäóþùèõ çà ýòîé, áóäóò îòäåëüíî îïèñàíû îñîáûå ñëó÷àè è ïðîáëåìû, ñ êîòîðûìè âû ìîæåòå ñòîëêíóòüñÿ.

  1. Ïðåäâàðèòåëüíàÿ ïîäãîòîâêà
  2. Slave-ìîäóëü
    Äëÿ ñîçäàíèÿ slave-ìîäóëÿ íàì íåîáõîäèìà ñëåäóþùàÿ èíôîðìàöèÿ:
        1) Ãäå íà äèñêå ðàñïîëîæåí ãëàâíûé èñïîëíÿåìûé ôàéë?
        2) Ãäå âíóòðè ãëàâíîãî èñïîëíÿåìîãî ôàéëà ðàñïîëàãàåòñÿ çàãðóç÷èê äèñêà?
    ×òîáû ïîëó÷èòü ýòó èíôîðìàöèþ ìû ñíà÷àëà àíàëèçèðóåì çàãðóçî÷íûé áëîê (bootblock). Êàê ïðàâèëî, ãëàâíûé èñïîëíÿåìûé ìîäóëü çàãðóæàåòñÿ îòñþäà, èñïîëüçóÿ ôóíêöèþ exec.DoIO(). Èíîãäà â çàãðóçî÷íîì áëîêå ïðèñóòñòâóåò çàãðóç÷èê äîðîæêè (trackloader). Òåïåðü ìû íàïèøåì Slave-ìîäóëü, êîòîðûé áóäåò ýìóëèðîâàòü çàãðóçî÷íûé áëîê è çàãðóæàòü ãëàâíûé èñïîëíÿåìûé ìîäóëü èç îáðàçà äèñêà. Ñåé÷àñ íàì íåîáõîäèìî âûòàùèòü ãëàâíûé èñïîëíÿåìûé ìîäóëü èç îáðàçà äèñêà èëè èç äàìïà ïàìÿòè. Ïîñëå ýòîãî íàì íóæíî íàéòè çàãðóç÷èê â ãëàâíîì èñïîëíÿåìîì ôàéëå. Ñàìûé áûñòðûé ïóòü ñîñòîèò â òîì, ÷òîáû ïîïðîáîâàòü íàéòè â HEX-ðåäàêòîðå ïîñëåäîâàòåëüíîñòü $AAAAAAAA (èñïîëüçóåòñÿ MFM-äåêîäèðîâàíèåì). Âûðåæòå íàéäåííóþ îáëàñòü ñ çàõâàòîì +/- $1000 áàéò, äèçàññåìáëèðóéòå, è èùèòå íà÷àëî ïðîöåäóðû. Êîãäà çàãðóç÷èê áóäåò íàéäåí, ðàçáåðèòåñü êàêèå ïàðàìåòðû çàãðóçêè îí èñïîëüçóåò(àäðåñ çàãðóçêè, äëèíà). Òåïåðü ìû ñîçäàåì êîä äëÿ slave-ìîäóëÿ, êîòîðûé èñïðàâèò ýòó ïðîöåäóðó çàãðóç÷èêà, è êîòîðûé áóäåò îáðàáàòûâàòü âñå çàïðîñû ïåðåàäðåñîâûâàÿ èõ slave-ìîäóëþ. Slave-ìîäóëü áóäåò êîððåêòèðîâàòü ïàðàìåòðû çàãðóçêè è âûçûâàòü ôóíêöèþ WHDLoad'à resload_DiskLoad.
  3.  ñëó÷àå òàêîãî èäåàëüíîãî âàðèàíòà, slave-ìîäóëü óæå ãîòîâ.
    Òåïåðü îñòàëîñü åäèíñòâåííîå - ñîçäàòü õîðîøóþ èêîíêó. Ñãðàáüòå äâå êàðòèíêè, èñïîëüçóÿ îïöèþ Snoop ïðîãðàììû WHDLoad è SP èëè ñèñòåìíûé ìîíèòîð èëè UAE äëÿ èçâëå÷åíèÿ êàðòèíêè è ñîçäàíèÿ èêîíêè. Ðåêîìåíäóåòñÿ èñïîëüçîâàòü 16 öâåòíóþ RomIcon ïàëèòðó.

Âîçìîæíûå ïðîáëåìû è îñîáûå ñëó÷àè

Íåñòàíäàðòíûé çàãðóç÷èê äîðîæêè

Íåêîòîðûå ïðîãðàììû èñïîëüçóþò ñâîé ñîáñòâåííûé ôîðìàò äèñêà. Ýòî îçíà÷àåò, ÷òî DIC íå â ñîñòîÿíèè ñîçäàòü îáðàç òàêîãî äèñêà. ×òîáû ïðî÷èòàòü ôàéëû ñ òàêîãî äèñêà èëè ñîçäàòü åãî îáðàç, ðåêîìåíäóåòñÿ èñïîëüçîâàòü RawDIC. Çà ïîäðîáíîñòÿìè îáðàùàéòåñü ê äîêóìåíòàöèè ïðîãðàììû RawDIC.

Ïðîãðàììà èñïîëüçóåò íåñêîëüêî äèñêîâ

Åñëè ïðîãðàììà èñïîëüçóåò áîëüøå ÷åì îäèí äèñê, òî slave-ìîäóëü äîëæåí ïåðåàäðåñîâàòü äîñòóïû ê äèñêàì ê ñîîòâåòñòâóþùåìó ôàéëó îáðàçà. Èíîãäà ýòî íå ëåãêî. Íåêîòîðûå ïðîãðàììû ïîääåðæèâàþò áîëåå îäíîãî äèñêîâîäà, òàê ÷òî âû ìîæåòå èñïîëüçîâàòü íîìåð äèñêîâîäà äëÿ âûáîðà íóæíîãî äèñêà. Áîëüøèíñòâî ïðîãðàìì èñïîëüçóåò èäåíòèôèêàòîð (íàïðèìåð íàçâàíèå) íà êàæäîì äèñêå, ÷òîáû ðàçëè÷àòü èõ.  ýòîì ñëó÷àå, èñïîëüçóéòå ïåðåìåííóþ, êîòîðàÿ ñîäåðæèò íîìåð äèñêà, è ïðè êàæäîì îáðàùåíèè ê èäåíòèôèêàòîðó äèñêà (îïðåäåëÿéòå òàêîé äîñòóï, àíàëèçèðóÿ ïàðàìåòðû äëÿ çàãðóç÷èêà äèñêà) è óâåëè÷èâàéòå ïåðåìåííóþ (à åñëè äîñòèãíóò ïîñëåäíèé äèñê, òî óìåíüøàéòå å¸), â íàäåæäå íà òî, ÷òî çàãðóç÷èê áóäåò ïåðå÷èòûâàòü èäåíòèôèêàòîðû ñíîâà è ñíîâà ïîêà íå îáíàðóæèò íóæíûé äèñê. Íåêîòîðûå ïðîãðàììû âûäàþò çàïðîñ, ÷òîáû ïîëüçîâàòåëü âñòàâèë ïðàâèëüíûé äèñê - îêëþ÷èòå ýòîò çàïðîñ.

Ñîõðàíåíèå òàáëèöû ðåêîðäîâ (Highscore)

Íó, ÷òî òóò ñêàçàòü. Èñïîëüçóéòå ôóíêöèþ resload_SaveFile, ÷òîáû çàïèñàòü ñîîòâåòñòâóþùóþ îáëàñòü ïàìÿòè íà äèñê. Åñëè õîòèòå, òî ìîæåòå åùå è çàøèôðîâàòü åå òàê, ÷òîáû "÷àéíèêàì" áûëî íå ëåãêî å¸ èñïðàâèòü. Íå ðåêîìåíäóåòñÿ ïðîèçâîäèòü çàïèñü íåïîñðåäñòâåííî â îáðàç äèñêà (èñïîëüçóÿ ôóíêöèþ resload_SaveFileOffset) ïîòîìó, ÷òî åñëè ÷òî-òî ïîéäåò íå òàê, êàê íàäî (íàïðèìåð, êàêàÿ-íèáóäü îøèáêà èëè çàâèñàíèå), òî âîçìîæíî, ÷òî îáðàç äèñêà áóäåò ïîâðåæäåí.

Ñîõðàíåíèå ïðîãðåññà èãðû (Savegames)

Çàïèñü ïðîãðåññà èãðû îñóùåñòâëÿåòñÿ òåìè æå ñïîñîáàìè, ÷òî è â ñëó÷àå ñ òàáëèöå ðåêîðäîâ.

Äîñòóïû ê îïåðàöèîííîé ñèñòåìå

Âî âðåìÿ ðàáîòû slave-ìîäóëü è óñòàíîâëåííàÿ ïðîãðàììà íå äîëæíû èìåòü íèêàêèõ îáðàùåíèé ê OS! Ïîýòîìó âñå îáðàùåíèÿ èç óñòàíîâëåííîé ïðîãðàììû äîëæíû áûòü îòêëþ÷åíû èëè ïåðåíàïðàâëåíû. Åñëè èõ íå òàê ìíîãî è îíè íå íóæíû ïðè ðàáîòå ÷åðåç WHDLoad (òèïà exec.Disable() èëè exec.SuperState()), òî ïðîñòî çàìåíèòå èõ êîìàíäîé NOP ($4e71). Åñëè âûçîâû íåñóò âàæíóþ ôóíêöèþ (òèïà exec.DoIO()), ïåðåàäðåñóéòå èõ slave-ìîäóëþ, è ýìóëèðóéòå èõ. Òàêæå ìîæåòå ñîçäàòü ïðîñòóþ exec.library â íåèñïîëüçîâàííîé îáëàñòè ïàìÿòè (ïðîèíèöèàëèçèðóéòå äëèííîå ñëîâî ïî àäðåñó $4). Ïîñìîòðèòå êàê ýòî ñäåëàíî â èñõîäíîì òåêñòå äëÿ ìîäóëÿ "Oscar.slave", êîòîðûé ýìóëèðóåò exec.AllocMem(). Äëÿ îáíàðóæåíèÿ òàêèõ âûçîâîâ OS, âûñòàâüòå íà÷àëüíûé execbase â $f0000001 ñ òîé öåëüþ, ÷òîáû âñå ïðîãðàììû, êîòîðûå ëþáÿò èñïîëüçîâàòü execbase, âûäàëè "Îøèáêó Àäðåñà".
Åñëè ýìóëèðîâàòü ôóíêöèè OS ñëèøêîì ñëîæíî, òîãäà ïðîñòî èñïîëüçóéòå îäèí èç kickemu-ïàêåòîâ, êîòîðûå ìîãóò áûòü íàéäåíû â äèñòðèáóòèâå whdload-dev. Òàì åñòü îäèí ïàêåò äëÿ Kick 1.3 ('src/sources/whdload/kick13.s'') è îäèí äëÿ Kick 3.1 ('src/sources/whdload/kick31.s''). Ýòè ïàêåòû òðåáóþò îðèãèíàëüíîãî îáðàçà êèêñòàðòà è ñîçäàþò ïîëíîöåííóþ OS â WHDLoad. Ñì. òàêæå ôàéëû readme, êîòîðûå ïîñòàâëÿþòñÿ â êîìïëåêòå ñ ýòèìè ïàêåòàìè.

Ïðîáëåìû ñîâìåñòèìîñòè

Îãðàíè÷åííîå àäðåñíîå ïðîñòðàíñòâî íà 68000/68010/68ec020

Íà ýòèõ ïðîöåññîðàõ àäðåñíîå ïðîñòðàíñòâî îãðàíè÷åíî ðàçìåðîì 16 Ìá ($000000... $ffffff), ïîòîìó ÷òî öåíòðàëüíûé ïðîöåññîð èìååò òîëüêî 24 àäðåñíûõ ëèíèè.  ðåçóëüòàòå âñå äîñòóïû ê áîëåå âûñîêèì àäðåñàì âûïîëíÿþòñÿ ê àäðåñàì íèæå 16 Ìá, ïðîñòî èãíîðèðóÿ ñòàðøèå 8 áèò àäðåñà. Íåêîòîðûå ïðîãðàììû èñïîëüçóþò ýòè áèòû, äëÿ õðàíåíèÿ äàííûõ, èëè ïðîñòî çàáûâàþò î÷èùàòü èõ. Íà ïðîöåññîðàõ ñ ïîëíûì 4Ãá àäðåñíûì ïðîñòðàíñòâîì, òèïà 68020/680ec30/68030/68040/68060 ýòî ïðîèñõîäèòü íå áóäåò, ïîòîìó ÷òî îáðàùåíèå áóäåò èäòè ê ïîëíîìó 32-õ áèòíîìó àäðåñó.
Äëÿ ðåøåíèÿ ýòîé ïðîáëåìû, âû äîëæíû ïîäêîððåêòèðîâàòü ýòè âûçîâû è ïåðåíàïðàâèòü èõ íà ñîîòâåòñòâóþùèå àäðåñà.
Èíîãäà ïðè÷èíîé äîñòóïà ê ñòðàííûì àäðåñàì ìîæåò áûòü íåïðîèíèöèàëèçèðîâàííûé óêàçàòåëü.  ýòîì ñëó÷àå ìîæåò ïîìî÷ü î÷èñòêà $400 - ws_BaseMemSize.

Ðàçëè÷íûé ñòåêîâûé ôðåéì íà ðàçíûõ ïðîöåññîðàõ

Ñòåêîâûå ôðåéìû, ñîçäàííûå ïðîöåññîðîì ïîñëå ïåðåðûâàíèé è ñîáûòèé, ðàçëè÷íû äëÿ ðàçíûõ ïðîöåññîðîâ ñåìåéñòâà 68Ê. Íà 68000 ñòåêîâûé ôðåéì ñîñòàâëÿåò 6 áàéò, çà èñêëþ÷åíèåì "Îøèáêè Àäðåñà" è "Îøèáêè Øèíû".  ñòåêîâîì ôðåéìå íàõîäèòñÿ ñîõðàíåííîå çíà÷åíèå SR â (a7) è PC â (2,a7). Íà âñåõ äðóãèõ ïðîöåññîðàõ (68010 +) ìèíèìàëüíûé ñòåêîâûé ôðåéì ñîñòàâëÿåò 8 áàéò è äîïîëíèòåëüíî ñîäåðæèò íîìåð âåêòîðà êàê ñëîâî â (6,a7). Ýòîò ôîðìàò ñòåêîâîãî ôðåéìà $0, ñîñòîÿùèé èõ ÷åòûð¸õ ñëîâ, ñîçäàí äëÿ "Trap #xx" è ïðåðûâàíèé íà 68010-68060. Ñòåêîâûå ôðåéìû äëÿ äðóãèõ ñîáûòèé ðàçëè÷íû íà êàæäîì ïðîöåññîðå. Èíñòðóêöèÿ RTE íà 68000 ðàáîòàåò èíà÷å ÷åì íà 68010+. Íà 68000 îíà ïðîñòî âîññòàíàâëèâàåò SR è PC è ïðîäîëæàåò âûïîëíåíèå ïðîãðàììû ñ ïðåðâàííîãî àäðåñà. Íà 68010 + îíà äîïîëíèòåëüíî îñâîáîæäàåò ñòåêîâûé ôðåéì â çàâèñèìîñòè îò åãî ôîðìàòà.
Íåêîòîðûå ïðîãðàììû ïðîòàëêèâàþò (çàïèñûâàþò â ñòåê?) àäðåñ (PC) è SR, à çàòåì âûïîëíÿþò èíñòðóêöèþ RTE. Ýòî ðàáîòàåò òîëüêî íà ïðîöåññîðàõ 68000, à íà 68010+ ðåçóëüòàò íåïðåäñêàçóåì.
Åñëè ïðîãðàììà ðàáîòàåò òàêèì îáðàçîì, âû äîëæíû èñïðàâèòü ýòî ìåñòî. Èíîãäà áûâàåò äîñòàòî÷íî çàìåíèòü RTE íà RTR.

MOVEM.x RL,-(An) íà 68000/010 è 68020-68060

Åñòü îòëè÷èå, åñëè ðåãèñòð, èñïîëüçóåìûé â ñëó÷àå àäðåñàöèè ñ ïðåäâàðèòåëüíûì óìåíüøåíèåì àäðåñà äî âûïîëíåíèÿ êîìàíäû (RL) òàêæå ñîäåðæèòñÿ â ñïèñêå ðåãèñòðîâ. Íà ïðîöåññîðàõ 68020-68060 çíà÷åíèå, çàïèñàííîå â ïàìÿòü ÿâëÿåòñÿ èñõîäíûì çíà÷åíèåì ðåãèñòðà, óìåíüøåííûì íà ðàçìåð îïåðàöèè. Íà ïðîöåññîðàõ æå 68000 è 68010 çàïèñûâàåòñÿ èñõîäíîå çíà÷åíèå (íå óìåíüøåííîå).
Òàê êàê ýòà èíñòðóêöèÿ ðåäêî èñïîëüçóåòñÿ, òî íà äàííûé ìîìåíò íå çàìå÷åíî íè îäíîé ïðîãðàììû, èñïûòûâàþùåé ïîáëåìû èç-çà îïèñàííûõ ðàçëè÷èé.

Îáùèå ïðèíöèïû íàïèñàíèÿ ïàò÷åé

Ñîâåòû è ìàëåíüêèå õèòðîñòè

×òî ëó÷øå èñïîëüçîâàòü: îáðàçû äèñêîâ èëè ôàéëû?

Èíîãäà ïåðåä âàìè áóäåò ñòîÿòü âûáîð, ÷òî èñïîëüçîâàòü, îáðàçû äèñêîâ èëè ôàéëû. Îáà ñïîñîáà èìåþò ñâîè ïðåèìóùåñòâà. Èñïîëüçîâàíèå îáðàçîâ äèñêà, êàê ïðàâèëî, áîëåå ëåãêèé è áîëåå áûñòðûé ñïîñîá ñîçäàòü slave-ìîäóëü. Íî ðåàëüíûå ôàéëû çíà÷èòåëüíî ïðîùå êýøèðîâàòü (åñëè î÷åíü ìàëî ïàìÿòè èëè ïàìÿòü ôðàãìåíòèðîâàíà). Çàíèìàåìîå ìåñòî íà æåñòêîì äèñêå òàêæå áóäåò ìåíüøå â ñëó÷àå ñ ðåàëüíûìè ôàéëàìè ïî ñðàâíåíèþ ñ èñïîëüçîâàíèåì îáðàçîâ äèñêîâ. Ðåêîìåíäóåòñÿ èñïîëüçîâàòü îáðàçû äèñêîâ òîëüêî, åñëè ôàéëîâ î÷åíü ìíîãî (áîëåå 30-òè).



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