v86int();
}
/* build request XXX support EDD requests too */
if (cyl > 1023) {
v86.ctl = V86_FLAGS;
static unsigned short packet[8];
v86.addr = 0x13;
v86.eax = 0x200 | x;
/* Check for Extended READ */
v86.ecx = ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
v86.edx = (hd << 8) | od->od_unit;
v86.es = VTOPSEG(xp);
v86.eax = 0x4100;
v86.ebx = VTOPOFF(xp);
v86.ebx = 0x55aa;
v86.edx = od->od_unit;
result = (v86.efl & 0x1);
if (result == 0)
if (v86.ebx == 0xaa55 && (v86.ecx & 1) == 1) {
packet[0] = 0x10;
packet[1] = x;
packet[2] = VTOPOFF(xp);
packet[3] = VTOPSEG(xp);
packet[4] = dblk;
packet[5] = dblk >> 16;
packet[6] = 0;
packet[7] = 0;
v86.eax = 0x4200;
v86.ds = VTOPSEG(packet);
v86.esi = VTOPOFF(packet);
break;
result = 1;
} else {
DEBUG("%d sectors from %d/%d/%d to %p (0x%x) %s", x, cyl, hd, sec - 1, p, VTOP(p), result ? "failed" : "ok");