10. Makra
Než se pustíme do samotné herní "matematiky", budeme potřebovat nějaký vývojový prostředek, který nám bude vyhodnocovat statistiku a hlásit vnitřní stavy programu. Do souboru PROGRAM.ASM doplňte před volání funkce call TurnReels volání funkce call DebugPrint a někam mezi funkce doplňte následující obsah:
|
Připravte soubor MACROS.ASM a naplňte ho následujícím obsahem:
|
Výstup interních informací budeme provádět s využitím standardních BIOS funkcí. Některé grafické karty (ovšem jen zřídka) nemusí podporovat BIOS výstup znaků pro VESA režim, v tom případě by bylo nutné program spouštět s přepínačem NOVESA.
Kromě již dříve použitých funkcí DispChar a DispText budeme dále potřebovat funkci DispNum, která zobrazí číslo, a funkci SetCursor, která nastaví pozici kurzoru na displeji. Funkce DispNum nejdříve dekóduje číslo na jednotlivé číslice (opakovaným dělením 10) a zbytky po dělení ukládá do zásobníku. Po dekódování čísla zobrazí jednotlivé číslice vyjímáním ze zásobníku, převodem na ASCII znak a zobrazením.
Abychom mohli funkce používat pouze v režimu ladění a nezabíraly nám prostor a čas v koncové verzi programu, jsou funkce pro zobrazení ladících informací realizovány jako podmíněná makra. Základním makrem je makro DebugClear. Slouží k vymazání podkladu před zobrazením ladících informací. Parametry makra jsou: řádek a pozice k zobrazení, délka pole k vymazání. Makro nastaví na požadovanou pozici kurzor a provede opakovaně výstup znaku mezery. Nakonec nastaví kurzor opět na začátek pole, aby byl připraven pro následující výstup textu.
Druhé makro, DebugText, zobrazí text na aktuální pozici kurzoru. Text k zobrazení je jediným parametrem makra. Musí být zadán jako text v uvozovkách. Makro jej dekóduje tak, že ho vloží přímo mezi instrukce.
Třetí makro, DebugNum, zobrazí číslo předané jako parametr makra.
Následující makra zobrazují konkrétní informace na displeji. K zobrazení informací jsou vyčleněny 2 řádky o 40 znacích na levém horním okraji displeje. Je-li použit režim VGA, jsou řádky celé viditelné, ale lehce zasahují do oblasti digitálního displeje automatu.
Makro DebugBonus zobrazí aktuální stav bonusu. Bonus se zobrazí jako první položka v informačním poli ladících informací. Makro DebugPosition zobrazí polohu válců. Jeho parametrem je aktuální pozice válců jako pakované číslo s 5 bity na válec. Makro DebugSetMode uloží do proměnné WinMode výherní mód. Makro DebugMode tento výherní mód zobrazí. Jsou rozlišeny výherní módy: prohra, výhra, blafování, bonus prohra a bonus výhra. Makro DebugGameIn zobrazí proměnnou GameIn, tedy částku vloženou do hry. Makro DebugGameOut zobrazí proměnnou GameOut, tj. částka vyhraná hrou. Makro DebugGameProfit zobrazí aktuální výhernost.
Download zdrojového kódu maker