#include <common.h>
#include <tasks/vm86.h>
#include <tasks/schedule.h>
#include <interrupts/syscall.h>
#include <interrupts/isr.h>
#include <boot/multiboot.h>
#include <mem/gdt.h>
#include <mem/vmm.h>
#include <string.h>
#include <syscall.h>
Go to the source code of this file.
|
| #define | CODE_ADDRESS ((void*) 0x500) |
| | Where the assembly code will be located. More...
|
| |
| #define | IVT_ADDRESS ((void*) 0) |
| | The real mode IVT (= Interrupt Vector Table) lies at the start of memory. More...
|
| |
|
#define | OPERAND_SIZE 0x66 |
| | opcode for overriding operand size
|
| |
|
#define | OPCODE_PUSHF 0x9C |
| | PUSHF triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_POPF 0x9D |
| | POPF triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_INT_3 0xCC |
| | INT $3 triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_INT 0xCD |
| | INT triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_IRET 0xCF |
| | IRET triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_CLI 0xFA |
| | CLI triggers a GPF inside VM86 mode.
|
| |
|
#define | OPCODE_STI 0xFB |
| | STI triggers a GPF inside VM86 mode.
|
| |
| #define | CASE_IN(opcode, in_func, operand, inc, type) |
| | Emulates an IN instruction. More...
|
| |
| #define | CASE_OUT(opcode, out_func, operand, inc) |
| | Emulates an OUT instruction. More...
|
| |
|
| static vm86_farptr_t | vm86_get_farptr (void *addr) |
| | Translate an address into a far pointer. More...
|
| |
| static void | vm86_write_farptr (uint16_t *segment, uint16_t *offset, vm86_farptr_t farptr) |
| | Writes a far pointer into another location. More...
|
| |
| static void * | vm86_get_address (vm86_farptr_t farptr) |
| | Translate a far pointer into an address. More...
|
| |
| task_pid_t | vm86_create_task (void *code_start, void *code_end, page_directory_t *page_directory, size_t kernel_stack_len, size_t user_stack_len, isr_registers_t *registers) |
| | Creates a VM86 task. More...
|
| |
| void | vm86_call_bios (uint8_t interrupt, isr_registers_t *registers) |
| | Calls a BIOS interrupt. More...
|
| |
| static void | vm86_push (cpu_state_t *cpu, uint16_t value) |
| | Emulates a PUSH instruction. More...
|
| |
| static uint16_t | vm86_pop (cpu_state_t *cpu) |
| | Emulates a POP instruction. More...
|
| |
| static void | vm86_increment_eip (cpu_state_t *cpu, size_t inc) |
| | Emulates the completion of an instruction. More...
|
| |
| static uint8_t | vm86_monitor (cpu_state_t *cpu) |
| | Monitors a VM86 task by emulating sensitive instructions. More...
|
| |
| static cpu_state_t * | vm86_handle_gpf (cpu_state_t *cpu) |
| | Handles general protection faults. More...
|
| |
|
void | vm86_init () |
| | Initializes VM86 mode.
|
| |