qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

test-i386-vm86.S (1816B)


      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: