[openfirmware] r1062 - dev/isafdc

svn at openfirmware.info svn at openfirmware.info
Sun Jan 4 03:33:00 CET 2009


Author: wmb
Date: 2009-01-04 03:33:00 +0100 (Sun, 04 Jan 2009)
New Revision: 1062

Modified:
   dev/isafdc/fdcdma.fth
   dev/isafdc/fdcpkg.fth
Log:
Added workarounds to the floppy driver to make it work under emulation.
QEMU and VirtualBox don't emulate the "terminal count" bits in the
ISA DMA controller status register, so that can't be used to poll for
DMA completion.


Modified: dev/isafdc/fdcdma.fth
===================================================================
--- dev/isafdc/fdcdma.fth	2009-01-03 23:37:10 UTC (rev 1061)
+++ dev/isafdc/fdcdma.fth	2009-01-04 02:33:00 UTC (rev 1062)
@@ -5,7 +5,7 @@
 headerless
 
 : dma-setup  ( vadr len write-memory? -- vadr devaddr len )
-   14 8 pc!		           \ disable the chip while programming it
+   4 8 pc!		           \ disable the chip while programming it
 
    if  46  else  4a  then   b pc!  \ single transfer, increment addr,
 				   \ no autoinit, ch 2
@@ -30,9 +30,10 @@
    0 d4 pc!			   \ Release channel 4 (master for chs. 0-3)
    2 a pc!			   \ Release channel 2
 
-   10 8 pc!			   \ re-enable the chip
+   0 8 pc!			   \ re-enable the chip
 
 ;
+[ifdef] notdef
 : dma-wait  ( vaddr devaddr len -- timeout? )
    true
    d# 400  0  do
@@ -43,6 +44,18 @@
    " dma-map-out" $call-parent
    r>
 ;
+[else]
+: dma-wait  ( vaddr devaddr len -- timeout? )
+   true
+   d# 400  0  do
+      0 c pc!  5 pc@ 5 pc@ bwjoin  h# ffff =  if  0= leave  then
+      d# 10 ms
+   loop
+   >r
+   " dma-map-out" $call-parent
+   r>
+;
+[then]
 
 headers
 external

Modified: dev/isafdc/fdcpkg.fth
===================================================================
--- dev/isafdc/fdcpkg.fth	2009-01-03 23:37:10 UTC (rev 1061)
+++ dev/isafdc/fdcpkg.fth	2009-01-04 02:33:00 UTC (rev 1062)
@@ -65,14 +65,15 @@
    loop
 ;
 
-\ We set both the block size and the maximum transfer size to one cylinder.
-\ Reading a cylinder at a time improves the performance dramatically
-\ compared to reading a block at at a time.
-\ XXX: Override these values if the installed drive isn't 3.5-inch 1.44MB.
 : sec/cyl       ( -- n )  sec/trk 2*  ;
-: max-transfer  ( -- n )  h# 200 sec/cyl *  ;
+
+\ It is tempting to set the block size and the maximum transfer size to
+\ one cylinder to get better performance, but that doesn't work well
+\ with filesystems that expect the block size to be 512.
+\ : max-transfer  ( -- n )  h# 200 sec/cyl *  ;
 \ : block-size    ( -- n )  max-transfer  ;
 \ : #blocks       ( -- n )  d# 80  ;	\ For 1.44 MByte floppies
+: max-transfer  ( -- n )  h# 200  ;
 : block-size    ( -- n )  h# 200  ;
 : #blocks       ( -- n )  d# 80 sec/cyl * ;	\ For 1.44 MByte floppies
 




More information about the openfirmware mailing list