symbian-qemu-0.9.1-12/qemu-symbian-svp/tests/test-i386-vm86.S
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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: