X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fvmboot%2Frombios%2Frombios.c;h=93654a2140ea378cc6fee0ab280813295a2a1a99;hb=c3b81025fc7957141b1bc8d790f5850f008cc289;hp=047bd32acd48761b1ac5349dde27e62461a01403;hpb=624d18dad00545964d9074ebd3fc35def3589f48;p=palacios.git diff --git a/palacios/src/vmboot/rombios/rombios.c b/palacios/src/vmboot/rombios/rombios.c index 047bd32..93654a2 100644 --- a/palacios/src/vmboot/rombios/rombios.c +++ b/palacios/src/vmboot/rombios/rombios.c @@ -1,6 +1,6 @@ // -*- fundamental -*- ///////////////////////////////////////////////////////////////////////// -// $Id: rombios.c,v 1.6 2008/05/30 00:46:55 pdinda Exp $ +// $Id: rombios.c,v 1.9 2008/07/02 17:58:44 pdinda Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2002 MandrakeSoft S.A. @@ -132,7 +132,7 @@ #define DEBUG_ROMBIOS 1 -#define DEBUG_ATA 1 +#define DEBUG_ATA 0 #define DEBUG_INT13_HD 0 #define DEBUG_INT13_CD 0 #define DEBUG_INT13_ET 0 @@ -945,10 +945,10 @@ Bit16u cdrom_boot(); #endif // BX_ELTORITO_BOOT -static char bios_cvs_version_string[] = "$Revision: 1.6 $"; -static char bios_date_string[] = "$Date: 2008/05/30 00:46:55 $"; +static char bios_cvs_version_string[] = "$Revision: 1.9 $"; +static char bios_date_string[] = "$Date: 2008/07/02 17:58:44 $"; -static char CVSID[] = "$Id: rombios.c,v 1.6 2008/05/30 00:46:55 pdinda Exp $"; +static char CVSID[] = "$Id: rombios.c,v 1.9 2008/07/02 17:58:44 pdinda Exp $"; /* Offset to skip the CVS $Id: prefix */ #define bios_version_string (CVSID + 4) @@ -1400,12 +1400,13 @@ ASM_END } // Bit16u -//get_DS() -//{ -//ASM_START -// mov ax, ds -//ASM_END -//} +get_DS() +{ +ASM_START + mov ax, ds +ASM_END +} + // // void //set_DS(ds_selector) @@ -4168,10 +4169,13 @@ ASM_END case 0x20: // coded by osmaker aka K.J. if(regs.u.r32.edx == 0x534D4150) /* SMAP */ { -#ifdef HVMASSIST +#if defined(HVMASSIST) && 0 if ((regs.u.r16.bx / 0x14) * 0x14 == regs.u.r16.bx) { + Bit16u e820_table_size = read_word(0xe000, 0x8) * 0x14; + BX_DEBUG_INT15("OK bx=%x\n",regs.u.r16.bx); + if (regs.u.r16.bx + 0x14 <= e820_table_size) { memcpyb(ES, regs.u.r16.di, 0xe000, 0x10 + regs.u.r16.bx, 0x14); @@ -6772,16 +6776,15 @@ int13_diskette_function(DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) Bit8u drive_type, num_floppies, ah; Bit16u es, last_addr; - printf("In int13_diskette\n"); - BX_DEBUG_INT13_FL("int13_diskette: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); - // BX_DEBUG_INT13_FL("int13_diskette: SS=%04x DS=%04x ES=%04x DI=%04x SI=%04x\n",get_SS(), get_DS(), ES, DI, SI); + //printf("int13_diskette: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", AX, BX, CX, DX, ES); + BX_DEBUG_INT13_FL("int13_diskette: SS=%04x DS=%04x ES=%04x DI=%04x SI=%04x\n",get_SS(),get_DS(), ES, DI, SI); ah = GET_AH(); switch ( ah ) { case 0x00: // diskette controller reset -BX_DEBUG_INT13_FL("floppy f00\n"); + BX_DEBUG_INT13_FL("floppy f00\n"); drive = GET_ELDL(); if (drive > 1) { SET_AH(1); // invalid param @@ -7774,6 +7777,8 @@ ASM_END print_boot_device(0, bootdrv); #endif // BX_ELTORITO_BOOT + BX_DEBUG("boot to %x\n", (((Bit32u)bootdrv) << 16) + bootseg); + // return the boot segment return (((Bit32u)bootdrv) << 16) + bootseg; } @@ -8301,7 +8306,9 @@ boot_setup: mov [bp], ax ;; set bp to zero mov ax, #0xaa55 ;; set ok flag + pop bp + iret ;; Beam me up Scotty ;---------- @@ -8838,7 +8845,7 @@ int76_handler: mov ds, ax mov 0x008E, #0xff call eoi_both_pics - pop ds + pop ds pop ax iret @@ -9504,6 +9511,7 @@ rom_scan_loop: jne rom_scan_increment call rom_checksum jnz rom_scan_increment + mov al, [2] ;; change increment to ROM length in 512-byte blocks ;; We want our increment in 512-byte quantities, rounded to