|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21571/root/usr/share/doc/syslinux-4.02/sample/ |
Upload File : |
/* ----------------------------------------------------------------------- *
*
* Copyright 2003-2008 H. Peter Anvin - All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, Inc., 53 Temple Place Ste 330,
* Boston MA 02111-1307, USA; either version 2 of the License, or
* (at your option) any later version; incorporated herein by reference.
*
* ----------------------------------------------------------------------- */
/*
* fd.c
*
* Chainload a floppy disk (currently rather braindead.)
*/
#include <com32.h>
#define NULL ((void *)0)
int printf(const char *, ...);
unsigned int atou(const char *);
int __start(void)
{
int whichfd = atou(__com32.cs_cmdline);
static com32sys_t inreg, outreg; /* In bss, so zeroed automatically */
int retry;
for (retry = 0; retry < 6; retry++) {
printf(">");
inreg.eax.w[0] = 0x0201; /* Read one sector */
inreg.ecx.w[0] = 0x0001; /* Cyl 0 sector 1 */
inreg.edx.b[1] = 0; /* Head 0 */
inreg.edx.b[0] = whichfd; /* Drive number */
inreg.es = SEG(__com32.cs_bounce); /* Read into the bounce buffer */
inreg.ebx.w[0] = OFFS(__com32.cs_bounce);
__com32.cs_intcall(0x13, &inreg, &outreg);
if ((outreg.eflags.l & 1) == 0)
break;
}
if ((outreg.eflags.l & 1) == 0) {
printf("!\n");
inreg.eax.w[0] = 0x000d;
inreg.edx.w[0] = 0;
inreg.edi.l = (uint32_t) __com32.cs_bounce;
inreg.ecx.l = 512;
inreg.ebx.l = whichfd & 0xff;
inreg.esi.l = 0; /* No partitions */
inreg.ds = 0; /* No partitions */
__com32.cs_intcall(0x22, &inreg, NULL);
}
/* If we get here, badness happened */
return 255;
}