|
|
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 ! 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: ! 104:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.