Spaces:
Runtime error
Runtime error
| .code16 | |
| .globl vm86_code_start | |
| .globl vm86_code_end | |
| #define GET_OFFSET(x) ((x) - vm86_code_start + 0x100) | |
| vm86_code_start: | |
| movw $GET_OFFSET(hello_world), %dx | |
| movb $0x09, %ah | |
| int $0x21 | |
| /* prepare int 0x90 vector */ | |
| xorw %ax, %ax | |
| movw %ax, %es | |
| es movw $GET_OFFSET(int90_test), 0x90 * 4 | |
| es movw %cs, 0x90 * 4 + 2 | |
| /* launch int 0x90 */ | |
| int $0x90 | |
| /* test IF support */ | |
| movw $GET_OFFSET(IF_msg), %dx | |
| movb $0x09, %ah | |
| int $0x21 | |
| pushf | |
| popw %dx | |
| movb $0xff, %ah | |
| int $0x21 | |
| cli | |
| pushf | |
| popw %dx | |
| movb $0xff, %ah | |
| int $0x21 | |
| sti | |
| pushfl | |
| popl %edx | |
| movb $0xff, %ah | |
| int $0x21 | |
| #if 0 | |
| movw $GET_OFFSET(IF_msg1), %dx | |
| movb $0x09, %ah | |
| int $0x21 | |
| pushf | |
| movw %sp, %bx | |
| andw $~0x200, (%bx) | |
| popf | |
| #else | |
| cli | |
| #endif | |
| pushf | |
| popw %dx | |
| movb $0xff, %ah | |
| int $0x21 | |
| pushfl | |
| movw %sp, %bx | |
| orw $0x200, (%bx) | |
| popfl | |
| pushfl | |
| popl %edx | |
| movb $0xff, %ah | |
| int $0x21 | |
| movb $0x00, %ah | |
| int $0x21 | |
| int90_test: | |
| pushf | |
| pop %dx | |
| movb $0xff, %ah | |
| int $0x21 | |
| movw %sp, %bx | |
| movw 4(%bx), %dx | |
| movb $0xff, %ah | |
| int $0x21 | |
| movw $GET_OFFSET(int90_msg), %dx | |
| movb $0x09, %ah | |
| int $0x21 | |
| iret | |
| int90_msg: | |
| .string "INT90 started\n$" | |
| hello_world: | |
| .string "Hello VM86 world\n$" | |
| IF_msg: | |
| .string "VM86 IF test\n$" | |
| IF_msg1: | |
| .string "If you see a diff here, your Linux kernel is buggy, please update to 2.4.20 kernel\n$" | |
| vm86_code_end: | |