equal
deleted
inserted
replaced
|
1 .code16 |
|
2 .globl vm86_code_start |
|
3 .globl vm86_code_end |
|
4 |
|
5 #define GET_OFFSET(x) ((x) - vm86_code_start + 0x100) |
|
6 |
|
7 vm86_code_start: |
|
8 movw $GET_OFFSET(hello_world), %dx |
|
9 movb $0x09, %ah |
|
10 int $0x21 |
|
11 |
|
12 /* prepare int 0x90 vector */ |
|
13 xorw %ax, %ax |
|
14 movw %ax, %es |
|
15 es movw $GET_OFFSET(int90_test), 0x90 * 4 |
|
16 es movw %cs, 0x90 * 4 + 2 |
|
17 |
|
18 /* launch int 0x90 */ |
|
19 |
|
20 int $0x90 |
|
21 |
|
22 /* test IF support */ |
|
23 movw $GET_OFFSET(IF_msg), %dx |
|
24 movb $0x09, %ah |
|
25 int $0x21 |
|
26 |
|
27 pushf |
|
28 popw %dx |
|
29 movb $0xff, %ah |
|
30 int $0x21 |
|
31 |
|
32 cli |
|
33 pushf |
|
34 popw %dx |
|
35 movb $0xff, %ah |
|
36 int $0x21 |
|
37 |
|
38 sti |
|
39 pushfl |
|
40 popl %edx |
|
41 movb $0xff, %ah |
|
42 int $0x21 |
|
43 |
|
44 #if 0 |
|
45 movw $GET_OFFSET(IF_msg1), %dx |
|
46 movb $0x09, %ah |
|
47 int $0x21 |
|
48 |
|
49 pushf |
|
50 movw %sp, %bx |
|
51 andw $~0x200, (%bx) |
|
52 popf |
|
53 #else |
|
54 cli |
|
55 #endif |
|
56 |
|
57 pushf |
|
58 popw %dx |
|
59 movb $0xff, %ah |
|
60 int $0x21 |
|
61 |
|
62 pushfl |
|
63 movw %sp, %bx |
|
64 orw $0x200, (%bx) |
|
65 popfl |
|
66 |
|
67 pushfl |
|
68 popl %edx |
|
69 movb $0xff, %ah |
|
70 int $0x21 |
|
71 |
|
72 movb $0x00, %ah |
|
73 int $0x21 |
|
74 |
|
75 int90_test: |
|
76 pushf |
|
77 pop %dx |
|
78 movb $0xff, %ah |
|
79 int $0x21 |
|
80 |
|
81 movw %sp, %bx |
|
82 movw 4(%bx), %dx |
|
83 movb $0xff, %ah |
|
84 int $0x21 |
|
85 |
|
86 movw $GET_OFFSET(int90_msg), %dx |
|
87 movb $0x09, %ah |
|
88 int $0x21 |
|
89 iret |
|
90 |
|
91 int90_msg: |
|
92 .string "INT90 started\n$" |
|
93 |
|
94 hello_world: |
|
95 .string "Hello VM86 world\n$" |
|
96 |
|
97 IF_msg: |
|
98 .string "VM86 IF test\n$" |
|
99 |
|
100 IF_msg1: |
|
101 .string "If you see a diff here, your Linux kernel is buggy, please update to 2.4.20 kernel\n$" |
|
102 |
|
103 vm86_code_end: |