|
|
1.1 root 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
1.1.1.2 ! root 17:
1.1 root 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:
1.1.1.2 ! root 27: pushf
1.1 root 28: popw %dx
29: movb $0xff, %ah
30: int $0x21
31:
32: cli
1.1.1.2 ! root 33: pushf
1.1 root 34: popw %dx
35: movb $0xff, %ah
36: int $0x21
37:
1.1.1.2 ! root 38: sti
! 39: pushfl
1.1 root 40: popl %edx
41: movb $0xff, %ah
42: int $0x21
1.1.1.2 ! root 43:
1.1 root 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:
1.1.1.2 ! root 57: pushf
1.1 root 58: popw %dx
59: movb $0xff, %ah
60: int $0x21
1.1.1.2 ! root 61:
1.1 root 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:
1.1.1.2 ! root 76: pushf
1.1 root 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
1.1.1.2 ! root 85:
1.1 root 86: movw $GET_OFFSET(int90_msg), %dx
87: movb $0x09, %ah
88: int $0x21
89: iret
1.1.1.2 ! root 90:
1.1 root 91: int90_msg:
92: .string "INT90 started\n$"
1.1.1.2 ! root 93:
1.1 root 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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.