File:  [Qemu by Fabrice Bellard] / qemu / tests / test-i386-vm86.S
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:47:57 2018 UTC (3 years, 3 months ago) by root
Branches: qemu, MAIN
CVS tags: qemu1001, qemu1000, qemu0151, qemu0150, qemu0141, qemu0140, qemu0130, qemu0125, qemu0124, qemu0123, qemu0122, qemu0121, qemu0120, qemu0111, qemu0110, qemu0105, qemu0104, qemu0103, qemu0102, qemu0101, qemu0100, qemu0091, HEAD
qemu 0.9.1

    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:

unix.superglobalmegacorp.com