All of lore.kernel.org
 help / color / mirror / Atom feed
From: "W. Tasin" <tasin@fhm.edu>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] floppy support for guest-OS OS9/x86 (aka OS9000)
Date: Mon, 21 May 2007 14:17:05 +0200	[thread overview]
Message-ID: <46518DC1.2070408@fhm.edu> (raw)
In-Reply-To: <465007A1.2050002@fhm.edu>

[-- Attachment #1: Type: text/plain, Size: 1247 bytes --]

Hi,

after re-reading some of your cvs-logs and checking again the data 
sheet, here my second version of fdc1.diff.
This version is IMHO cleaner/saver, because it wouldn't break the hack 
(fdc.c; rev. 1.14) in the SENSE INTERRUPT STATUS and it is more data 
sheet conforming.

Sorry about the first fdc1.diff-"noise".
Ciao

Walter

W. Tasin schrieb:
> Hello *,
>
> I tried to make OS9/x86 runnable on qemu; with an existing hd image it 
> already worked, but w/o floppy support. To make this also available 
> I'd a look at the sources and (after some time ...) I was able to 
> solve 3 little problems.
> - boot from floppy didn't work
> - floppy support inside os9/x86 didn't work
> - a second ide reset sequence didn't work correctly
>
> So here my patches (against snapshot 
> http://qemu-forum.ipi.fi/qemu-snapshots/qemu-snapshot-2007-05-18_05.tar.bz2) 
>
>
> You can find a more detailed explanation on 
> http://pc01-lsw.ee.fhm.edu/wiki/QEmu/OS9Patch
>
> HTH
> Ciao
>
> Walter
>
> PS: Please CC me on questions, 'cause I'm not subscribed to the list.
>

-- 
Walter Tasin, M.Sc.
Fakultät für Elektrotechnik und Informationstechnik
Fachhochschule München, Munich University of Applied Sciences



[-- Attachment #2: fdc1.diff --]
[-- Type: text/plain, Size: 2670 bytes --]

--- hw/fdc.c	Mon May 21 10:38:54 2007
+++ hw/fdc.c	Mon May 21 10:39:20 2007
@@ -377,6 +377,7 @@
     uint8_t dma_en;
     uint8_t cur_drv;
     uint8_t bootsel;
+    uint8_t first_sense;
     /* Command FIFO */
     uint8_t fifo[FD_SECTOR_LEN];
     uint32_t data_pos;
@@ -597,6 +598,7 @@
     fdctrl->irq = irq;
     fdctrl->dma_chann = dma_chann;
     fdctrl->io_base = io_base;
+    fdctrl->first_sense=0;
     fdctrl->config = 0x60; /* Implicit seek, polling & FIFO enabled */
     if (fdctrl->dma_chann != -1) {
         fdctrl->dma_en = 1;
@@ -655,7 +657,7 @@
 	return;
     }
 #endif
-    if (~(fdctrl->state & FD_CTRL_INTR)) {
+    if (!(fdctrl->state & FD_CTRL_INTR)) {
         qemu_set_irq(fdctrl->irq, 1);
         fdctrl->state |= FD_CTRL_INTR;
     }
@@ -672,6 +674,7 @@
     fdctrl_reset_irq(fdctrl);
     /* Initialise controller */
     fdctrl->cur_drv = 0;
+    fdctrl->first_sense = 4;
     /* FIFO state */
     fdctrl->data_pos = 0;
     fdctrl->data_len = 0;
@@ -1384,6 +1387,7 @@
             FLOPPY_DPRINTF("SPECIFY command\n");
             /* 1 parameter cmd */
             fdctrl->data_len = 3;
+            fdctrl->first_sense=0;
             goto enqueue;
         case 0x04:
             /* SENSE_DRIVE_STATUS */
@@ -1401,21 +1405,29 @@
             /* SENSE_INTERRUPT_STATUS */
             FLOPPY_DPRINTF("SENSE_INTERRUPT_STATUS command (%02x)\n",
                            fdctrl->int_status);
+            uint8_t act_drv = fdctrl->cur_drv;
             /* No parameters cmd: returns status if no interrupt */
+            if (fdctrl->first_sense > 0)
+                act_drv=4-fdctrl->first_sense--;
+
 #if 0
             fdctrl->fifo[0] =
-                fdctrl->int_status | (cur_drv->head << 2) | fdctrl->cur_drv;
+                (fdctrl->state & FD_CTRL_INTR) ? 
+            (fdctrl->int_status | (cur_drv->head << 2) | act_drv) : 0x80;
 #else
             /* XXX: int_status handling is broken for read/write
                commands, so we do this hack. It should be suppressed
                ASAP */
             fdctrl->fifo[0] =
-                0x20 | (cur_drv->head << 2) | fdctrl->cur_drv;
+                (fdctrl->state & FD_CTRL_INTR) ? 
+                (0x20 | (cur_drv->head << 2) | act_drv) : 0x80 ;
 #endif
+
             fdctrl->fifo[1] = cur_drv->track;
-            fdctrl_set_fifo(fdctrl, 2, 0);
-	    fdctrl_reset_irq(fdctrl);
-	    fdctrl->int_status = 0xC0;
+            fdctrl_set_fifo(fdctrl, (fdctrl->fifo[0] != 0x80) ? 2 : 1, 0);
+                
+            fdctrl_reset_irq(fdctrl);
+            fdctrl->int_status = 0xC0;
             return;
         case 0x0E:
             /* DUMPREG */


      reply	other threads:[~2007-05-21 12:17 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-20  8:32 [Qemu-devel] [PATCH] floppy support for guest-OS OS9/x86 (aka OS9000) W. Tasin
2007-05-21 12:17 ` W. Tasin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46518DC1.2070408@fhm.edu \
    --to=tasin@fhm.edu \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.