View difference between Paste ID: PAWSzCr0 and Cde250Yi
SHOW: | | - or go back to the newest paste.
1
org 7c00h
2
3
use16
4
5
cli
6
lgdt[gdt]
7
mov eax,cr4
8
or al,1
9
mov cr4,eax
10
mov eax,cr0
11
or al,1
12
mov cr0,eax
13
jmp gdt_code-gdt_table:pmode
14
15
vm86:
16
mov ax,0e41h
17
mov bx,7
18
int 10h
19
20
;which interrupt trigger to end the virtual 8086 mode?
21
22
jmp $
23
24
use32
25
26
pmode:
27
mov ax,gdt_data-gdt_table
28
mov gs,ax
29
mov fs,ax
30
mov ds,ax
31
mov es,ax
32
mov ss,ax
33
mov esp,9fffch
34
mov ax,18h
35
ltr ax
36
mov al,11h
37
out 20h,al
38
mov al,20h
39
out 21h,al
40
mov al,4
41
out 21h,al
42
mov al,1
43
out 21h,al
44
mov al,255-1 shl 6
45
out 21h,al
46
mov edi,idt_table
47
mov edx,8e00h
48
mov eax,(gdt_code-gdt_table) shl 16
49
mov ecx,20h
50
interrupts1:
51
mov [edi],eax
52
mov [edi+4],edx
53
add edi,8
54
loop interrupts1
55
mov edx,8f00h
56
mov eax,(gdt_code-gdt_table) shl 16
57
add ecx,8
58
interrupts2:
59
mov [edi],eax
60
mov [edi+4],edx
61
add edi,8
62
loop interrupts2
63
mov edx,8f00h
64
mov eax,(gdt_code-gdt_table) shl 16
65
mov ecx,256-8-32
66
interrupts3:
67
mov [edi],eax
68
mov [edi+4],edx
69
add edi,8
70
loop interrupts3
71
mov word[idt_table+20h*8+6*8],second_sector
72
mov word[idt_table+49*8],function_floppy
73
lidt[idt]
74
sti
75
push 0
76
push 0
77
push 0
78
push 0
79
push 0
80
push 0fffeh
81-
push 23000h
81+
push 20000h
82
push 0
83
push vm86
84
iretd
85
int 49
86
jmp $
87
88
function_floppy:
89
mov dx,3f2h
90
mov al,1ch
91
out dx,al
92
mov al,6
93
out 0ah,al
94
mov al,0ffh
95
out 0ch,al
96
mov al,0
97
out 4,al
98
mov ax,second_sector
99
out 81h,al
100
mov al,ah
101
out 4,al
102
mov al,0ffh
103
out 5,al
104
mov al,1
105
out 5,al
106
mov al,2
107
out 0ah,al
108
call readmsr
109
mov dx,3f5h
110
mov al,66h
111
out dx,al
112
mov al,0
113
out dx,al
114
mov al,0
115
out dx,al
116
mov al,0
117
out dx,al
118
mov al,2
119
out dx,al
120
mov al,2
121
out dx,al
122
mov al,18
123
out dx,al
124
mov al,27
125
out dx,al
126
mov al,0ffh
127
out dx,al
128
iret
129
130
readmsr:
131
mov dx,3f4h
132
in al,dx
133
and al,0c0h
134
cmp al,80h
135
jne readmsr
136
ret
137
138
gdt:
139
dw gdt_end-gdt_table-1
140
dd gdt_table
141
142
gdt_table:
143
dq 0
144
145
gdt_code:
146
dw 0ffffh
147
dw 0
148
db 0
149
db 9ah
150
db 0cfh
151
db 0
152
153
gdt_data:
154
dw 0ffffh
155
dw 0
156
db 0
157
db 92h
158
db 0cfh
159
db 0
160
161
gdt_tss:
162
dw 0ffffh
163
dw 0
164
db 0
165
db 89h
166
db 8fh
167
db 0
168
169
gdt_end:
170
171
idt:
172
dw idt_end-256*8-1
173
dd idt_table
174
175
idt_table=256*4
176
177
idt_end:
178
179
times 510-($-$$) db 0
180
dw 0aa55h
181
182
second_sector:
183
mov byte[0b8000h],43h
184
mov byte[0b8000h+1],0ch
185
mov byte[0b8000h+2],69h
186
mov byte[0b8000h+3],0ch
187
mov byte[0b8000h+4],61h
188
mov byte[0b8000h+5],0ch
189
mov byte[0b8000h+6],6fh
190
mov byte[0b8000h+7],0ch
191
mov byte[0b8000h+8],21h
192
mov byte[0b8000h+9],0ch
193
mov byte[0b8000h+10],20h
194
mov byte[0b8000h+11],0ch
195
mov byte[0b8000h+12],3ah
196
mov byte[0b8000h+13],0ch
197
mov byte[0b8000h+14],29h
198
mov byte[0b8000h+15],0ch
199
jmp $
200
201
times 512-($-second_sector) db 0