;BLACK 0x0 ;BLUE 0x1 ;GREEN 0x2 ;CYAN 0x3 ;RED 0x4 ;MAGENTA 0x5 ;BROWN 0x6 ;GREY 0x7 ;DARK_GREY 0x8 ;LIGHT_BLUE 0x9 ;LIGHT_GREEN 0xA ;LIGHT_CYAN 0xB ;LIGHT_RED 0xC ;LIGHT_MAGENTA 0xD ;LIGHT_BROWN 0xE ;WHITE 0xF [BITS 16] [org 0x7C00] JMP Start clear_screen: PUSH ax MOV al, 03h ; Setting the graphical mode 80x25(text) MOV ah, 00h ; Code of the function of changing video mode INT 10h ; Call interruption MOV cl, 0x06 MOV ah, 0x01 INT 10h POP ax RETN print_string: ; Expects null terminated message in si PUSH ax for_print_string_0: MOV al,[si] OR al,al JZ end_for_print_string_0 INC si CALL print_char JMP for_print_string_0 end_for_print_string_0: POP ax RETN print_sector: PUSH ebp MOV ebp, esp PUSH ax PUSH bx PUSH cx PUSH dx MOV al, [8 + ebp] ; num MOV cl, [6 + ebp] ; offset MOV ah, 2 XOR ch, ch XOR dh, dh MOV dl, 0x80 INT 0x13 MOV di, 512 XOR ah, ah IMUL di, ax XOR si, si for_print_sector_0: CMP si, di JZ end_for_print_sector_0 MOV al,[es:si] OR al, al JZ end_print_char_0 CALL print_char end_print_char_0: INC si JMP for_print_sector_0 end_for_print_sector_0: POP dx POP cx POP bx POP ax MOV esp, ebp POP ebp RETN print_char: PUSH ax PUSH bx MOV ah,0x0E ; Specifies that we want to write a character to the screen MOV bl,0x02 ; Specifies output text color. Not required, but useful to know MOV bh,0x00 ; Page number. Leave this alone. INT 0x10 ; Signal video interrupt to BIOS POP bx POP ax RETN execute_sector: PUSH ebp MOV ebp, esp PUSH ax PUSH bx PUSH cx PUSH dx MOV ax, [10 + ebp] ; base address MOV es, ax MOV al, [8 + ebp] ; num MOV cl, [6 + ebp] ; offset MOV ah, 2 ; Function read XOR ch, ch ; cylinder XOR dh, dh ; head MOV dl, 0x80 ; drive INT 0x13 XOR si, si PUSH es PUSH bx RETF Start: XOR ax, ax MOV ds, ax MOV ax, 0x1000 MOV es, ax XOR bx, bx CALL clear_screen PUSH 2 ; num PUSH 2 ; offset CALL print_sector ; (offset, num) ADD esp, 4 MOV si,str CALL print_string PUSH 0x800; Base address, offset is 0 PUSH 1 ; num PUSH 4 ; offset XOR bx, bx; CALL execute_sector str: db 'THE GAME',0x0A,0x0D,0x00 TIMES 510 - ($ - $$) db 0 DW 0xAA55