diff -Naur spediv_v0.2b/divide.c spediv_v0.2c/divide.c --- spediv_v0.2b/divide.c 2005-09-02 11:11:53.000000000 +0200 +++ spediv_v0.2c/divide.c 2007-02-05 00:50:14.000000000 +0100 @@ -129,7 +129,8 @@ int buffer_len; int cmd; // pending command (read sector/write sector) - + int nsec; + // IDE registers (Read/Write) int port_AF; // chs/lba int port_B3; // chs/lba @@ -384,6 +385,7 @@ if ( DISK.buffer_ptr < DISK.buffer_len ) { data = DISK.buffer[DISK.buffer_ptr]; DISK.buffer_ptr++; + if (!(DISK.buffer_ptr&0x1FF)) DISK.port_AB--; // readed whole buffer? if (DISK.buffer_ptr >= DISK.buffer_len) @@ -608,6 +610,7 @@ DISK.buffer_ptr = 0; DISK.buffer_len = 0; DISK.cmd = DIVIDE_WRITE_BUFF; + DISK.nsec = 0; DISK.in_port_BF &= (STATUS_CLR_BSY & STATUS_CLR_DF & STATUS_CLR_ERR); DISK.in_port_BF |= (STATUS_SET_DRDY | STATUS_SET_DRQ); break; @@ -635,7 +638,8 @@ else lba = chs2lba(drive, (DISK.port_B7 << 8) | DISK.port_B3, DISK.port_BB & 0x0F, DISK.port_AF); - // write sector to disk + lba+=DISK.nsec; + // write n-th sector to disk tlba=lba; if (tlba < DISK.mbr.len) { DISK.mbr.ptr = lseek(DISK.mbr.fd, (tlba << 9), SEEK_SET); @@ -653,11 +657,13 @@ } DISK.buffer_len=0; DISK.port_AB--; + DISK.nsec++; lba++; } // we are done with writing? if (!DISK.port_AB) { DISK.cmd=0; + DISK.nsec=0; DISK.in_port_BF &= STATUS_CLR_DRQ; } break;