Narsil č. 17

Motorola 68000 (16)

↑
Narsil MOTORO16 – obrázek 1

MOTOROLA 68000 (16. část)

Dneska se vracím k minule naťuknutému tématu. V archívu DATA17.TOS a v adresáři REPLAY máte konečně rutinu pro vyvolání přehrávače módů přímo z GFA. Jelikož však tento basic běhá celý v user módu, bylo bohužel nutné zakázat jakoukoliv další akci dokud mód nedohraje. Tudíž, mód začne hrát, čeká na stisk buttonu myši nebo joye a poté se hraní ukončí. Na STE vám bude přehrávání běhat na 25 kHz na ST asi na 11 kHz a použijete přitom stejné rutiny, které jsou v dnešním čísle Narsilu na disku, tedy ST.DAT a STE.DAT, přičemž v závislosti na typu stroje se spustí ten správný přehrávač.

Co však bylo nutné překonat, aby taková věc mohla běhat v GFA, sama se relokovat a bylo také umožněno přímé testování z asembleru?

Nejdůležitejší části zdrojového kódu je soubor MODYGFA.S, ten na počátku obsahuje tři přepínače.

STFLAG, jenž zajišťuje, že se pokaždé spustí ST replay rutina a zakáže se cache pamět.

Při povoleném TESTGFA se celý kód zkompiluje tak, aby bylo možné ho testovat přímo z GenST, proto bylo také nutné použít volání uvolnění paměti pro další procesy.

PROCEDURE určuje zda-li se bude kompilovat první část samotného kódu zajišťující pohou relokaci a předání adres parametrů, nebo druhá část obsahující samotný kód volání a čekání na button, který budeme muset relokovat.

Postup pro kompilování do pro vás vhodného adresáře (cesty do adresářů si při případné rekompilaci pod vaším systémem budete muset opravit) bude pravděpodobně následující. Pomocí středníku vyrušíte STFLAG, TESTGFA, PROCEDURE, po prvním překompilování se objeví na disku soubor MGFA_REL.DAT, poté povolíte flag PROCEDURE a překompilujete ještě jednou, výsledný kód by měl nést název MODYGFA.BAX, ostatně jednu rekompilovanou kopii už máte v archívu, ale pokud budete muset provádět nějaké změny, máte možnost.

Samotný kód tedy musí zajistit relokování absolutního programu na určité místo, k čemuž nám poslouží funkce RELOCATE, dále je vhodné, aby se v případě vyšších procesorů při relokaci a depakování vypínala cache pamět, což dělám tak, že nejdříve přes adresu $59e zjistím, zda-li je procesor jiný než 68000 a poté ji teprve vypínám (pozor, cache.s půjde pravděpodobně kompilovat pouze s GenST 3 a výše. Ovšemže by tento parametr šel testovat přes Cookie, ale zálěží opravdu na vkusu každého programátora, jak to udělá (pokud není ovšem adresa $59e v nějakém TOSu jinak využita). Další důležitou věcí je předání parametrů z GFA, zde jen připomínám, že nejdříve je na zásobník uložena adresa samotného pole parametrů a teprvé poté počet parametrů v poli (má délku jen slovo). Poslední veledůležitý krok se týká nainstalování samotného rezidentního přehravače módů, zde musíte skrze Cookie otestovat samotný počítač na existenci DMA zvuku a v závislosti na výsledku spustit buď soubor ST.DAT nebo STE.DAT, protože však tento program již z paměti ven po jednom spuštění nedostanete, doporučuji testovat samotné přehrávání módů až úplně na závěr vašeho kódu.

Pokud budete chtít tedy programovat nějakou vlastní rutinu do GFA Basicu a budete požadovat, aby dělala podobné krkolomnosti jako ta moje, můžete se poučit. Všimněte si jak vypínání cache, tak úschovy všech registrů na zásobník před zavoláním podprogramu z GFA, nenechte se ošálit zdánlivou jednoduchostí toho všeho, protože každá hloupost má většinou svou logiku.

POZOR!!! Takto relokovaný kód musíte před každým dalším spuštěním vašeho programu v GFA nahrát pomocí funkce BLOAD znovu.

HEAD