xref: /qemu/tests/tcg/i386/test-i386-vm86.S (revision abff1abf)
1        .code16
2        .globl vm86_code_start
3        .globl vm86_code_end
4
5#define GET_OFFSET(x) ((x) - vm86_code_start + 0x100)
6
7vm86_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
75int90_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
91int90_msg:
92        .string "INT90 started\n$"
93
94hello_world:
95        .string "Hello VM86 world\n$"
96
97IF_msg:
98        .string "VM86 IF test\n$"
99
100IF_msg1:
101        .string "If you see a diff here, your Linux kernel is buggy, please update to 2.4.20 kernel\n$"
102
103vm86_code_end:
104