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