sobota 2. listopadu 2019

Hry, které se vejdou do boot sektoru

David Murray (The 8-Bit Guy) na svém Youtube kanále zveřejnil krátké a pěkně zpracované video o hrách, které se vejdou do boot sektoru. To znamená, výsledná velikost po zkompilování nepřesáhne jak 512 byte.

Je samozřejmostí, že takové hry se píší v nízkoúrovňovém Assembleru nebo strojovém kódu, což byla běžná praxe programování her na 8bitech. Já si spíše z dob 286 pamatuji temnější stránky - boot viry (u nás mezi nejznámější patří asi slovenský OneHalf).

Ale zpět ke hrám. Pokud se chcete inspirovat nebo si vyzkoušet nějakou takovou hru naprogramovat, tak se podívejte na stránky mexického vývojáře jména Óscar Toledo Gutiérrez, který se právě takovýmto programováním zabývá. Mezi jeho díla mimo jiné patří:
Až na Tinyasm se vše vejde do 512 byte. Všechny zdrojové kódy jsou k dispozici na jeho Githubu.

Oskar o programování her napsal i pěknou knihu Programming Boot Sector Games.
Kniha Programming Boot Sector Games
Knihu lze koupit v tištěné verzi jako paperback nebo hardcover nebo a jako e-book (úplně dole na stránce, která vypadá sice podezřele, ale nákup přes PayPal proběhl bez problémů a dostanete PDF). V knize jsou vysvětleny i základy assembleru.

Doporučit mohu také výukové materiály Nicka Blundella, zejména Writing a Simple Operating System.

Vyzkoušení

Připravil jsem krátký postup, jak si vyzkoušet takovou hru zprovoznit:
  • stáhněte si a nainstalujte emulátor DosBox
  • stáhněte si The Netwide Assembler (verze 2.14 pro Windows x64), archiv si rozbalte např. do složky "C:\NASM"
  • stáhněte si zdrojový kód (pillman.asm) hry Pillman a uložte ho např. do složky "C:\Pillman"
  • spusťte příkazový řádek Windows a zkompilujte hru pomocí příkazu
    "C:\NSAM\nasm.exe -f bin C:\Pillman\pillman.asm -o C:\Pillman\pillman.bin"
  • spusťte DosBox a zadejte v něm příkaz "boot C:\Pillman\pillman.bin"
Pokud chcete něco jednoduššího, tak můžete zkusit obyčejné "Hello" z výše uvedeného materiálu Writing a Simple Operating System (PDF):

; A simple boot sector that prints a message to the screen using a BIOS routine.
;
mov ah, 0x0e ; int 10/ ah = 0eh -> scrolling teletype BIOS routine
mov al, 'H'
int 0x10
mov al , 'e'
int 0x10
mov al , 'l'
int 0x10
mov al , 'l'
int 0x10
mov al , 'o'
int 0x10
jmp $ ; Jump to the current address ( i.e. forever )
;
times 510 -($-$$) db 0 ; Pad the boot sector out with zeros
;
dw 0xaa55 ; Last two bytes form the magic number so BIOS knows we are a boot sector.



Jestli vás tato oblast zaujala, přidávám pár užitečných odkazů:
Ještě jsi pamatuji, že existovala česká verze TechHelpu, která se jmenovala SYSMAN. Bohužel ji už ale nemohu nikde najít. Pokud o ní víte, dejte prosím odkaz do diskuze.