socsvn commit: r240050 - soc2012/syuu/bhyve-bios/lib/libbiosemul
syuu at FreeBSD.org
syuu at FreeBSD.org
Fri Aug 3 18:12:52 UTC 2012
Author: syuu
Date: Fri Aug 3 18:12:49 2012
New Revision: 240050
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=240050
Log:
fix incorrect drive number, fix incorrect 'vm_set_register' to 'vm_get_register'
Modified:
soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/debug.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/int13.c
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c Fri Aug 3 17:04:41 2012 (r240049)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c Fri Aug 3 18:12:49 2012 (r240050)
@@ -109,7 +109,7 @@
static struct vm86_init_args kargs;
#endif
-#define HDISK_CYL 130
+#define HDISK_CYL 2610
#define HDISK_HEAD 255
#define HDISK_TRACK 63
#define HDISK_FILE "/home/syuu/test.img"
@@ -121,16 +121,16 @@
ivec = (u_int32_t *)lomem_addr;
debugf = stderr;
-#if 0
- debug_set(0); /* debug any D_TRAPS without intnum */
+ debug_set(0xfffffff);
+#if 0
/* Call init functions */
if (raw_kbd)
console_init();
init_io_port_handlers();
#endif
bios_init();
- init_hdisk(3, HDISK_CYL, HDISK_HEAD, HDISK_TRACK, HDISK_FILE, NULL);
+ init_hdisk(2, HDISK_CYL, HDISK_HEAD, HDISK_TRACK, HDISK_FILE, NULL);
#if 0
cpu_init();
kbd_init();
@@ -830,67 +830,83 @@
int error = 0;
if ((orig->r.gs.r_rx != modified->r.gs.r_rx) &&
+ printf("%s gs:%lx\n", __func__, modified->r.gs.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_GS, modified->r.gs.r_rx)) != 0)
goto done;
if ((orig->r.fs.r_rx != modified->r.fs.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_FS, &modified->r.fs.r_rx)) != 0)
+ printf("%s fs:%lx\n", __func__, modified->r.fs.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_FS, modified->r.fs.r_rx)) != 0)
goto done;
if ((orig->r.es.r_rx != modified->r.es.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_ES, &modified->r.es.r_rx)) != 0)
+ printf("%s es:%lx\n", __func__, modified->r.es.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_ES, modified->r.es.r_rx)) != 0)
goto done;
if ((orig->r.ds.r_rx != modified->r.ds.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_DS, &modified->r.es.r_rx)) != 0)
+ printf("%s ds:%lx\n", __func__, modified->r.ds.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_DS, modified->r.es.r_rx)) != 0)
goto done;
if ((orig->r.edi.r_rx != modified->r.edi.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RDI, &modified->r.edi.r_rx)) != 0)
+ printf("%s edi:%lx\n", __func__, modified->r.edi.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RDI, modified->r.edi.r_rx)) != 0)
goto done;
if ((orig->r.esi.r_rx != modified->r.esi.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RSI, &modified->r.esi.r_rx)) != 0)
+ printf("%s esi:%lx\n", __func__, modified->r.esi.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RSI, modified->r.esi.r_rx)) != 0)
goto done;
if ((orig->r.ebp.r_rx != modified->r.ebp.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RBP, &modified->r.ebp.r_rx)) != 0)
+ printf("%s ebp:%lx\n", __func__, modified->r.ebp.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RBP, modified->r.ebp.r_rx)) != 0)
goto done;
if ((orig->r.ebx.r_rx != modified->r.ebx.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RBX, &modified->r.ebx.r_rx)) != 0)
+ printf("%s ebx:%lx\n", __func__, modified->r.ebx.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RBX, modified->r.ebx.r_rx)) != 0)
goto done;
if ((orig->r.edx.r_rx != modified->r.edx.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RDX, &modified->r.edx.r_rx)) != 0)
+ printf("%s edx:%lx\n", __func__, modified->r.edx.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RDX, modified->r.edx.r_rx)) != 0)
goto done;
if ((orig->r.ecx.r_rx != modified->r.ecx.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RCX, &modified->r.ecx.r_rx)) != 0)
+ printf("%s ecx:%lx\n", __func__, modified->r.ecx.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RCX, modified->r.ecx.r_rx)) != 0)
goto done;
if ((orig->r.eax.r_rx != modified->r.eax.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RAX, &modified->r.eax.r_rx)) != 0)
+ printf("%s eax:%lx\n", __func__, modified->r.eax.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RAX, modified->r.eax.r_rx)) != 0)
goto done;
if ((orig->r.eip.r_rx != modified->r.eip.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RIP, &modified->r.eip.r_rx)) != 0)
+ printf("%s eip:%lx\n", __func__, modified->r.eip.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RIP, modified->r.eip.r_rx)) != 0)
goto done;
if ((orig->r.cs.r_rx != modified->r.cs.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_CS, &modified->r.cs.r_rx)) != 0)
+ printf("%s cs:%lx\n", __func__, modified->r.cs.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_CS, modified->r.cs.r_rx)) != 0)
goto done;
if ((orig->r.efl.r_rx != modified->r.efl.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RFLAGS, &modified->r.efl.r_rx)) != 0)
+ printf("%s eflags:%lx\n", __func__, modified->r.efl.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RFLAGS, modified->r.efl.r_rx)) != 0)
goto done;
if ((orig->r.esp.r_rx != modified->r.esp.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RSP, &modified->r.esp.r_rx)) != 0)
+ printf("%s esp:%lx\n", __func__, modified->r.esp.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RSP, modified->r.esp.r_rx)) != 0)
goto done;
if ((orig->r.ss.r_rx != modified->r.ss.r_rx) &&
- (error = vm_get_register(ctx, vcpu, VM_REG_GUEST_SS, &modified->r.ss.r_rx)) != 0)
+ printf("%s ss:%lx\n", __func__, modified->r.ss.r_rx) &&
+ (error = vm_set_register(ctx, vcpu, VM_REG_GUEST_SS, modified->r.ss.r_rx)) != 0)
goto done;
done:
@@ -907,23 +923,38 @@
get_all_regs(ctx, vcpu, &orig);
modified = orig;
- printf("%s RAX=%lx EAX=%x AX=%x AH=%x AL=%x\n",
+ printf("%s orig RAX=%lx EAX=%x AX=%x AL=%x AH=%x\n",
__func__,
orig.r.eax.r_rx,
orig.r.eax.r_dw.r_ex,
orig.r.eax.r_w.r_x,
orig.r.eax.r_b.r_l,
orig.r.eax.r_b.r_h);
- printf("%s RBX=%lx EBX=%x BX=%x BH=%x BL=%x\n",
+ printf("%s orig RBX=%lx EBX=%x BX=%x BL=%x BH=%x\n",
__func__,
orig.r.ebx.r_rx,
orig.r.ebx.r_dw.r_ex,
orig.r.ebx.r_w.r_x,
orig.r.ebx.r_b.r_l,
orig.r.ebx.r_b.r_h);
+ printf("%s modified RAX=%lx EAX=%x AX=%x AL=%x AH=%x\n",
+ __func__,
+ modified.r.eax.r_rx,
+ modified.r.eax.r_dw.r_ex,
+ modified.r.eax.r_w.r_x,
+ modified.r.eax.r_b.r_l,
+ modified.r.eax.r_b.r_h);
+ printf("%s modified RBX=%lx EBX=%x BX=%x BL=%x BH=%x\n",
+ __func__,
+ modified.r.ebx.r_rx,
+ modified.r.ebx.r_dw.r_ex,
+ modified.r.ebx.r_w.r_x,
+ modified.r.ebx.r_b.r_l,
+ modified.r.ebx.r_b.r_h);
switch (intno) {
case 0x13:
+ printf("call int13\n");
int13(&modified);
break;
default:
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/debug.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/debug.c Fri Aug 3 17:04:41 2012 (r240049)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/debug.c Fri Aug 3 18:12:49 2012 (r240050)
@@ -88,15 +88,19 @@
{
va_list args;
+#if 0
if (flags & (debug_flags & ~0xff)) {
if ((debug_flags & 0xff) == 0
&& (flags & (D_ITRAPS | D_TRAPS))
&& !debug_isset(flags & 0xff))
return;
+#endif
va_start (args, fmt);
vfprintf (debugf, fmt, args);
va_end (args);
+#if 0
}
+#endif
}
/*
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/int13.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/int13.c Fri Aug 3 17:04:41 2012 (r240049)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/int13.c Fri Aug 3 18:12:49 2012 (r240050)
@@ -595,6 +595,8 @@
R_FLAGS &= ~PSL_C;
+ printf("%s:%d AH:%x AL:%x FLAGS:%x\n", __func__, __LINE__, R_AH, R_AL, R_FLAGS);
+
drive = R_DL;
if (R_AX != 0x01) {
@@ -621,6 +623,8 @@
sectors = R_AL;
side = R_DH;
R_AL = 0; /* Start out with nothing read */
+ fprintf(stderr, "%s read addr:%x sectors:%d side:%d drive:%x\n",
+ __func__, (R_ES << 4) + R_BX, sectors, side, drive);
if (drive & 0x80) {
cyl = R_CH | ((R_CL & 0xc0) << 2);
@@ -639,6 +643,8 @@
start = cyl * di->sectors * di->sides +
side * di->sectors +
sector;
+ fprintf(stderr, "%s cyl:%d sector:%d di->sectors:%d di->sides:%d\n",
+ __func__, cyl, sector, di->sectors, di->sides);
if (start >= disize(di)) {
debug(D_DISK, "Read past end of disk\n");
@@ -668,6 +674,8 @@
if ((did = diread(di, REGS, start, addr, sectors)) >= 0)
R_AL = did;
+
+ fprintf(stderr, "%s did:%d\n", __func__, did);
#if 0
callint(0x0d);
callint(0x76);
More information about the svn-soc-all
mailing list