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á, že nejsou větší 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ří:
- Tinyasm (8086/8088 assembler)
- bootOS operating system
- bootBASIC interpreter (opravdu funkční základní interpretr BASIC)
- bootRogue game
- Invaders game
- Pillman game
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 napsali i pěknou knihu 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 (PDF).
Vyzkoušení
Připravil jsem krátký postup, jak si vyzkoušet takovou hru zprovoznit:
- stáhněte si a nainstalujte emulátor DosBox (pravda, tento krok je asi pro většinu čtenářů tohoto webu nadbytečný 🙂)
- 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 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"
(výše uvedené je jeden příkaz) - 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.
To uz je let, kdy jsem naposledy pouzil ASM. A tech bezesnych noci z dynamicky adresovanych skoku :D
Popravdě assembler mi nic neříká. Ale je to povedená „fičura“ nacpat třeba pacmana do boot sektoru.