[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/10] fdc: take head count into account
From: |
Hervé Poussineau |
Subject: |
[Qemu-devel] [PATCH 01/10] fdc: take head count into account |
Date: |
Sun, 8 Jan 2012 21:27:39 +0100 |
Signed-off-by: Hervé Poussineau <address@hidden>
---
hw/fdc.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/hw/fdc.c b/hw/fdc.c
index 70aa5c7..c1898a6 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -95,16 +95,19 @@ static void fd_init(FDrive *drv)
drv->max_track = 0;
}
+#define NUM_SIDES(drv) ((drv)->flags & FDISK_DBL_SIDES ? 2 : 1)
+
static int fd_sector_calc(uint8_t head, uint8_t track, uint8_t sect,
- uint8_t last_sect)
+ uint8_t last_sect, uint8_t num_sides)
{
- return (((track * 2) + head) * last_sect) + sect - 1;
+ return (((track * num_sides) + head) * last_sect) + sect - 1;
}
/* Returns current position, in sectors, for given drive */
static int fd_sector(FDrive *drv)
{
- return fd_sector_calc(drv->head, drv->track, drv->sect, drv->last_sect);
+ return fd_sector_calc(drv->head, drv->track, drv->sect, drv->last_sect,
+ NUM_SIDES(drv));
}
/* Seek to a new position:
@@ -135,7 +138,7 @@ static int fd_seek(FDrive *drv, uint8_t head, uint8_t
track, uint8_t sect,
drv->max_track, drv->last_sect);
return 3;
}
- sector = fd_sector_calc(head, track, sect, drv->last_sect);
+ sector = fd_sector_calc(head, track, sect, drv->last_sect, NUM_SIDES(drv));
ret = 0;
if (sector != fd_sector(drv)) {
#if 0
@@ -1019,7 +1022,8 @@ static void fdctrl_start_transfer(FDCtrl *fdctrl, int
direction)
ks = fdctrl->fifo[4];
FLOPPY_DPRINTF("Start transfer at %d %d %02x %02x (%d)\n",
GET_CUR_DRV(fdctrl), kh, kt, ks,
- fd_sector_calc(kh, kt, ks, cur_drv->last_sect));
+ fd_sector_calc(kh, kt, ks, cur_drv->last_sect,
+ NUM_SIDES(cur_drv)));
switch (fd_seek(cur_drv, kh, kt, ks, fdctrl->config & FD_CONFIG_EIS)) {
case 2:
/* sect too big */
@@ -1289,7 +1293,8 @@ static void fdctrl_format_sector(FDCtrl *fdctrl)
ks = fdctrl->fifo[8];
FLOPPY_DPRINTF("format sector at %d %d %02x %02x (%d)\n",
GET_CUR_DRV(fdctrl), kh, kt, ks,
- fd_sector_calc(kh, kt, ks, cur_drv->last_sect));
+ fd_sector_calc(kh, kt, ks, cur_drv->last_sect,
+ NUM_SIDES(cur_drv)));
switch (fd_seek(cur_drv, kh, kt, ks, fdctrl->config & FD_CONFIG_EIS)) {
case 2:
/* sect too big */
--
1.7.7.3
- [Qemu-devel] [PATCH 00/10] Misc fixes for floppy emulation, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 02/10] fdc: set busy bit when starting a command, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 03/10] fdc: most control commands do not generate interrupts, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 04/10] fdc: emulate stepping 0, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 01/10] fdc: take head count into account,
Hervé Poussineau <=
- [Qemu-devel] [PATCH 05/10] fdc: handle read-only floppies (abort early on write commands), Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 06/10] block: add a transfer rate for floppy types, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 07/10] fdc: check if media rate is correct before doing any transfer, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 08/10] fdc: add CCR (Configuration Control Register) write register, Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 10/10] fdc: DIR (Digital Input Register) should return status of current drive..., Hervé Poussineau, 2012/01/08
- [Qemu-devel] [PATCH 09/10] fdc: fix seek command, which shouldn't check tracks, Hervé Poussineau, 2012/01/08