libhd
5.0
|
#include <unistd.h>
#include <errno.h>
#include <asm/unistd.h>
#include <stdio.h>
#include <string.h>
#include "vm86_struct.h"
#include <signal.h>
#include "v86bios.h"
#include "AsmMacros.h"
Defines | |
#define | INT2PTR(a) ((a) + (unsigned char *) 0) |
#define | CPU_REG(x) (vm86s.regs.x) |
#define | CPU_REG_LW(reg) (*((CARD16 *)&CPU_REG(reg))) |
#define | CPU_REG_HW(reg) (*((CARD16 *)&CPU_REG(reg) + 1)) |
#define | CPU_REG_LB(reg) (*(CARD8 *)&CPU_REG(e##reg)) |
#define | SEG_ADR(type, seg, reg) type((CPU_REG_LW(seg) << 4) + CPU_REG_LW(e##reg) + (unsigned char *) 0) |
#define | DF (1 << 10) |
#define | LIN_PREF_SI ((pref_seg << 4) + CPU_REG_LW(esi)) |
#define | LWECX (prefix66 ^ prefix67 ? CPU_REG(ecx) : CPU_REG_LW(ecx)) |
#define | SET_LWECX_ZERO (prefix66 ^ prefix67 ? (CPU_REG(ecx) = 0) : (CPU_REG_LW(ecx) = 0)) |
#define | COPY(x) regs.x = CPU_REG(x) |
#define | COPY_R(x) CPU_REG(x) = regs.x |
#define | pushw(base, ptr, val) |
Functions | |
int | emu_vm86 (struct vm86_struct *vm, unsigned debug) |
void | log_err (char *format,...) __attribute__((format(printf |
static int | vm86_GP_fault (void) |
static int | vm86_do_int (int num) |
void | log_registers (void) |
void | setup_io (void) |
static void | setup_vm86 (unsigned long bios_start, i86biosRegsPtr regs) |
void | collect_bios_regs (i86biosRegsPtr regs) |
static int | do_vm86 (int cpuemu) |
void | do_x86 (unsigned long bios_start, i86biosRegsPtr regs, int cpuemu) |
int | run_bios_int (int num, struct regs86 *regs) |
CARD32 | getIntVect (int num) |
CARD32 | getIP (void) |
Variables | |
void struct vm86_struct | vm86s |
struct pio | P |
Referenced by vm86_do_int().
Referenced by vm86_do_int().
#define CPU_REG | ( | x | ) | (vm86s.regs.x) |
Referenced by collect_bios_regs(), getIP(), log_registers(), run_bios_int(), setup_vm86(), and vm86_GP_fault().
#define CPU_REG_HW | ( | reg | ) | (*((CARD16 *)&CPU_REG(reg) + 1)) |
#define CPU_REG_LB | ( | reg | ) | (*(CARD8 *)&CPU_REG(e##reg)) |
Referenced by vm86_GP_fault().
#define CPU_REG_LW | ( | reg | ) | (*((CARD16 *)&CPU_REG(reg))) |
Referenced by run_bios_int(), and vm86_GP_fault().
#define DF (1 << 10) |
Referenced by vm86_GP_fault().
#define INT2PTR | ( | a | ) | ((a) + (unsigned char *) 0) |
Referenced by run_bios_int(), and vm86_GP_fault().
#define LIN_PREF_SI ((pref_seg << 4) + CPU_REG_LW(esi)) |
Referenced by vm86_GP_fault().
#define LWECX (prefix66 ^ prefix67 ? CPU_REG(ecx) : CPU_REG_LW(ecx)) |
Referenced by vm86_GP_fault().
{ \ ptr = ((ptr) - 1) & 0xffff; \ *((unsigned char *)(base) + (ptr)) = (val) >> 8; \ ptr = ((ptr) - 1) & 0xffff; \ *((unsigned char *)(base) + (ptr)) = (val); \ }
Referenced by run_bios_int().
#define SEG_ADR | ( | type, | |
seg, | |||
reg | |||
) | type((CPU_REG_LW(seg) << 4) + CPU_REG_LW(e##reg) + (unsigned char *) 0) |
Referenced by vm86_GP_fault().
#define SET_LWECX_ZERO (prefix66 ^ prefix67 ? (CPU_REG(ecx) = 0) : (CPU_REG_LW(ecx) = 0)) |
Referenced by vm86_GP_fault().
void collect_bios_regs | ( | i86biosRegsPtr | regs | ) |
References i86biosRegs::ax, i86biosRegs::bx, CPU_REG, i86biosRegs::cx, i86biosRegs::di, i86biosRegs::ds, i86biosRegs::dx, i86biosRegs::es, and i86biosRegs::si.
Referenced by do_x86().
static int do_vm86 | ( | int | cpuemu | ) | [static] |
References emu_vm86(), log_err(), log_registers(), VM86_ARG, vm86_do_int(), vm86_GP_fault(), VM86_INTx, VM86_SIGNAL, VM86_STI, VM86_TYPE, and VM86_UNKNOWN.
Referenced by do_x86().
void do_x86 | ( | unsigned long | bios_start, |
i86biosRegsPtr | regs, | ||
int | cpuemu | ||
) |
References collect_bios_regs(), do_vm86(), and setup_vm86().
Referenced by CallInt10().
int emu_vm86 | ( | struct vm86_struct * | vm, |
unsigned | debug | ||
) |
References vm86_regs::cs, deb_inb(), deb_inl(), deb_inw(), deb_outb(), deb_outl(), deb_outw(), do_int(), vm86_regs::ds, vm86_regs::eax, vm86_regs::ebp, vm86_regs::ebx, vm86_regs::ecx, vm86_regs::edi, vm86_regs::edx, vm86_regs::eflags, vm86_regs::eip, emu_vm86_ret, vm86_regs::es, vm86_regs::esi, vm86_regs::esp, vm86_regs::fs, vm86_regs::gs, INT2PTR, M, Mem_rb(), Mem_rl(), Mem_rw(), Mem_wb(), Mem_wl(), Mem_ww(), vm86_struct::regs, vm86_regs::ss, u16, u32, u8, VM86_UNKNOWN, void(), X86EMU_exec(), X86EMU_setupIntrFuncs(), X86EMU_setupMemFuncs(), and X86EMU_setupPioFuncs().
Referenced by do_vm86().
CARD32 getIntVect | ( | int | num | ) |
Referenced by int42_handler().
References CPU_REG, regs86::cs, and regs86::eip.
References hd_data_t::log, and str_printf().
Referenced by CallInt10(), chksum(), copy_vbios(), do_vm86(), int10_bios_ok(), log_registers(), map_vram(), and vm86_GP_fault().
void log_registers | ( | void | ) |
References CPU_REG, regs86::cs, regs86::ds, regs86::eax, regs86::ebp, regs86::ebx, regs86::ecx, regs86::edi, regs86::edx, regs86::eip, regs86::es, regs86::esi, regs86::esp, regs86::fs, regs86::gs, log_err(), and regs86::ss.
Referenced by do_vm86(), and vm86_GP_fault().
int run_bios_int | ( | int | num, |
struct regs86 * | regs | ||
) |
References CPU_REG, CPU_REG_LW, regs86::cs, dprint(), regs86::eflags, regs86::eip, regs86::esp, IF_MASK, INT2PTR, NT_MASK, pushw, regs86::ss, TF_MASK, and VIF_MASK.
Referenced by vm86_do_int().
static void setup_vm86 | ( | unsigned long | bios_start, |
i86biosRegsPtr | regs | ||
) | [static] |
References i86biosRegs::ax, i86biosRegs::bx, CPU_586, CPU_REG, vm86_struct::cpu_type, i86biosRegs::cx, i86biosRegs::di, i86biosRegs::dx, i86biosRegs::es, vm86_struct::flags, vm86_struct::int21_revectored, vm86_struct::int_revectored, vm86_struct::screen_bitmap, VIF_MASK, VIP_MASK, and VM86_SCREEN_BITMAP.
Referenced by do_x86().
static int vm86_do_int | ( | int | num | ) | [static] |
References COPY, COPY_R, regs86::cs, regs86::ds, regs86::eax, regs86::ebp, regs86::ebx, regs86::ecx, regs86::edi, regs86::edx, regs86::eflags, regs86::eip, regs86::es, regs86::esi, regs86::esp, regs86::fs, regs86::gs, int_handler(), run_bios_int(), regs86::ss, and val.
Referenced by do_vm86().
static int vm86_GP_fault | ( | void | ) | [static] |
References CPU_REG, CPU_REG_LB, CPU_REG_LW, DF, pio::inb, pio::inl, INT2PTR, pio::inw, LIN_PREF_SI, log_err(), log_registers(), LWECX, pio::outb, pio::outl, pio::outw, P, port_rep_inb(), port_rep_inl(), port_rep_inw(), port_rep_outb(), port_rep_outl(), port_rep_outw(), SEG_ADR, and SET_LWECX_ZERO.
Referenced by do_vm86().
Referenced by setup_io(), and vm86_GP_fault().
void struct vm86_struct vm86s |