This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; a sample bootloader | |
| ; created for fun by hasherezade | |
| ; | |
| ; compile: | |
| ; nasm boot.asm -f bin -o boot.bin | |
| ; | |
| ; Copy to flash disk (as root) | |
| ; example if the flash disk is /dev/sdb: | |
| ; dd if=boot.bin of=/dev/sdb bs=512 count=1 | |
| ; | |
| [bits 16] | |
| [org 0x7C00] | |
| ;code | |
| main: | |
| xor ax,ax | |
| mov ds,ax | |
| mov es,ax | |
| mov [drive_id], dl | |
| call set_page_1 | |
| mov bp, banner | |
| mov cx, (banner_len - banner) | |
| mov dh, 0 ;row | |
| mov dl, 0 ;column | |
| call printstr | |
| jmp load_chess_loader | |
| set_page_1: | |
| mov ah, 0x5 | |
| mov al, 1 ;page number | |
| int 0x10 ; BIOS video interrupt | |
| ret | |
| printstr: | |
| mov ah, 0x13 ; write string | |
| mov bh, 0x1 ; page number | |
| mov bl, 0x0B ; color | |
| int 0x10 ; BIOS video interrupt | |
| ret | |
| load_chess_loader: | |
| xor ah, ah | |
| int 0x16 ; wait for keystroke | |
| ; Read BootChess from disk | |
| mov si, DAPACK | |
| mov dl, [drive_id] | |
| mov ah, 0x42 | |
| int 0x13 | |
| ; Relocate code | |
| mov si, chess_loader | |
| mov di, 0x8000 | |
| mov cx, DAPACK - chess_loader | |
| rep movsb | |
| jmp 0x8000 | |
| chess_loader: ; This code will be relocated to 0x8000 | |
| mov si, 0x7E00 | |
| mov di, 0x7C00 | |
| mov cx, 0x200 | |
| rep movsb | |
| jmp 0:0x7C00 ; Jump to BootChess | |
| ;data | |
| DAPACK: | |
| db 0x10 | |
| db 0 | |
| dw 1 | |
| dw 0x7E00 | |
| dw 0 | |
| dd 1 | |
| dd 0 | |
| banner db 'TIRED OF PETYA?', 13, 10, 'HOW ABOUT A NICE GAME OF CHESS?', 13, 10 | |
| banner_len db 0 | |
| drive_id db 0 | |
| times 510-($-$$) db 0 ;padding | |
| dw 0xAA55 ;end signature | |
| bootchess: ; http://www.pouet.net/prod.php?which=64962 | |
| db 0x0E,0x1F,0x0E,0x07,0xB8,0x13,0x00,0xCD,0x10,0xBF,0x04,0x7E,0xBD,0x0C,0x00 | |
| db 0xE8,0x0D,0x00,0x68,0xA4,0x7C,0xAC,0xB1,0x08,0xF3,0xAA,0x4D,0x75,0xF8,0xB4 | |
| db 0xE0,0xBE,0xB4,0x7D,0xB9,0x08,0x00,0xAC,0x00,0xE0,0xAA,0xE2,0xFA,0xB1,0x08 | |
| db 0xF3,0xA4,0xC3,0x89,0xFB,0xB6,0x31,0xB2,0x68,0x89,0x14,0xB5,0x31,0xB1,0x68 | |
| db 0x89,0x4C,0x02,0x60,0xE8,0x10,0x01,0x76,0x26,0x53,0xE8,0x62,0x00,0x5B,0x72 | |
| db 0x1F,0xBF,0xFF,0x7D,0x46,0xA6,0x73,0x05,0x80,0x3D,0x3F,0x74,0x0F,0x8A,0x40 | |
| db 0xAD,0xFE,0xC8,0x78,0x0C,0x8C,0xE3,0x38,0xC3,0x73,0x06,0x8E,0xE3,0x4E,0x4E | |
| db 0x66,0xA5,0x61,0x80,0xF9,0x61,0xE0,0xCB,0xFE,0xC5,0x80,0xFD,0x39,0x75,0xC2 | |
| db 0x43,0x4A,0x80,0xFA,0x60,0x75,0xB7,0xFE,0xC6,0x38,0xEE,0x75,0xAF,0x66,0xFF | |
| db 0x74,0x04,0x66,0x8F,0x04,0xB1,0x2E,0xE8,0xC4,0x00,0x83,0xF5,0x03,0x74,0x9A | |
| db 0xB0,0x3F,0x89,0xF7,0xB9,0x08,0x00,0xF3,0xAA,0xE8,0x76,0x00,0x76,0xF2,0xE8 | |
| db 0x04,0x00,0x72,0xED,0xEB,0xE1,0xE8,0xA5,0x00,0x87,0xDA,0x8A,0x60,0xAF,0x88 | |
| db 0xDE,0x81,0xEA,0x61,0x61,0x0F,0xBD,0xD8,0x0F,0xBE,0x58,0xA8,0x8B,0x48,0xB2 | |
| db 0x9E,0x7B,0x02,0x72,0x02,0x79,0x02,0xB1,0x01,0x7B,0x02,0x01,0xEB,0x43,0x80 | |
| db 0xE4,0xFC,0x51,0x88,0xF0,0x43,0x02,0x40,0xB2,0x86,0xC3,0x8A,0x68,0x10,0x86 | |
| db 0xC3,0x38,0xD0,0x75,0x13,0x9E,0x7B,0x2D,0xF6,0x40,0xB2,0x01,0x74,0x06,0x84 | |
| db 0xED,0x75,0x23,0xEB,0x1A,0x84,0xED,0x74,0x1D,0x9E,0x7B,0x06,0xF6,0x40,0xB2 | |
| db 0x01,0x75,0x0D,0x84,0xED,0x75,0x09,0x9E,0x74,0x02,0x76,0x04,0xA8,0x88,0xE1 | |
| db 0xC9,0x59,0xFE,0xCD,0x75,0xC0,0xF9,0xC3,0x59,0xC3,0xE8,0x0D,0x00,0x31,0xDB | |
| db 0x98,0xCD,0x16,0xFE,0xCC,0x75,0x02,0xCD,0x19,0x88,0x00,0x60,0x99,0xB8,0x01 | |
| db 0x13,0xB3,0x07,0xB1,0x08,0xBD,0xF4,0x7D,0xCD,0x10,0x83,0xC5,0x10,0x50,0xB8 | |
| db 0x39,0x0E,0x28,0xF0,0xCD,0x10,0x58,0x38,0xCE,0xFE,0xC6,0x72,0xEC,0x89,0xF5 | |
| db 0xCD,0x10,0x61,0x43,0x80,0xFB,0x04,0x72,0xCA,0xE2,0xFE,0xBE,0xFC,0x7D,0x8B | |
| db 0x1C,0x98,0xE8,0x08,0x00,0x8B,0x54,0x02,0x87,0xDA,0x68,0x8B,0x7D,0x93,0xD5 | |
| db 0xF0,0x04,0x80,0x93,0xE3,0x1C,0x80,0x7C,0x03,0x38,0x74,0x06,0x80,0x7C,0x03 | |
| db 0x31,0x75,0x07,0x9E,0x7B,0x04,0x80,0xF4,0x46,0x41,0x86,0x60,0xAF,0x86,0x48 | |
| db 0xA7,0x80,0xCC,0x01,0xC3,0x9E,0x78,0x96,0xE8,0x02,0x00,0x75,0x81,0x87,0xDA | |
| db 0x8A,0x40,0xA7,0x80,0x74,0xAC,0x08,0xB1,0x9F,0x85,0xED,0x75,0x02,0xB1,0xBF | |
| db 0x0F,0xC0,0xC8,0xD4,0x12,0x88,0xC8,0x84,0xE4,0xC3,0x22,0x29,0x2E,0x37,0x3C | |
| db 0x3C,0x72,0x6E,0x62,0x71,0x6B,0x62,0x6E,0x72,0x08,0x10,0x20,0x40,0x80,0x20 | |
| db 0x10,0x08,0x70,0x04,0x2E,0x00,0x2E,0x00,0x2E,0x00,0x2E,0x00,0x50,0x04,0x02 | |
| db 0x03,0xF0,0xF1,0xEF,0x10,0x0F,0x11,0x04,0x10,0xFF,0xF0,0x01,0x08,0x1F,0x21 | |
| db 0x12,0xF2,0xE1,0xDF,0xEE,0x0E,0x04,0xF1,0x11,0xEF,0x0F,0x08,0x10,0x11,0x0F | |
| db 0x01,0xF0,0xEF,0xF1,0xFF,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x65,0x32 | |
| db 0x65,0x34 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment