|
1
2
3
4
5
6
7
8
9
10
|
;BLACK 0x0
;BLUE 0x1
;GREEN 0x2
;CYAN 0x3
;RED 0x4
;MAGENTA 0x5
;BROWN 0x6
;GREY 0x7
;DARK_GREY 0x8
;LIGHT_BLUE 0x9
|
|
11
|
;LIGHT_GREEN 0xA
|
|
12
13
|
;LIGHT_CYAN 0xB
;LIGHT_RED 0xC
|
|
14
15
|
;LIGHT_MAGENTA 0xD
;LIGHT_BROWN 0xE
|
|
16
17
18
19
20
|
;WHITE 0xF
[BITS 16]
[org 0x7C00]
|
|
21
|
JMP short Start
|
|
22
|
|
|
23
|
str: db 'THE GAME ',0x00
|
|
24
25
|
clear_screen:
|
|
26
|
PUSH ax
|
|
27
|
MOV al, 02h ; Setting the graphical mode 80x25(text)
|
|
28
29
30
|
MOV ah, 00h ; Code of the function of changing video mode
INT 10h ; Call interruption
POP ax
|
|
31
32
33
|
RETN
print_string: ; Expects null terminated message in si
|
|
34
|
PUSH ax
|
|
35
36
|
for_print_string_0:
MOV al,[si]
|
|
37
38
|
OR al,al
JZ end_for_print_string_0
|
|
39
40
41
|
INC si
CALL print_char
JMP for_print_string_0
|
|
42
43
|
end_for_print_string_0:
POP ax
|
|
44
45
46
47
|
RETN
print_sector:
PUSH ebp
|
|
48
|
MOV ebp, esp
|
|
49
50
51
52
|
PUSH ax
PUSH bx
PUSH cx
PUSH dx
|
|
53
54
|
MOV al, [6 + ebp] ; num
MOV cl, [8 + ebp] ; offset
|
|
55
|
MOV ah, 2
|
|
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
XOR ch, ch
XOR dx,dx
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
|
|
80
81
82
83
84
85
86
87
88
|
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
|
|
89
90
|
POP bx
POP ax
|
|
91
92
|
RETN
|
|
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
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, 12
for_start_0:
MOV si,str
CALL print_string
;JMP for_start_0
JMP $
TIMES 510 - ($ - $$) db 0
|
|
112
113
114
115
|
DW 0xAA55
|