Re: [hatari-devel] floppy issue |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
----- Nicolas Pomarède wrote:
> Le 17/02/2014 03:31, David Savinkoff a écrit :
> > ----- Thomas Huth wrote:
>
> >> The only related change to the DMA status that I can see is this patch
> >> here:
> >>
> >> http://hg.tuxfamily.org/mercurialroot/hatari/hatari/rev/f84eb81fa309
> >>
> >> Nicolas, any ideas what could be wrong here?
> >>
> >> Thomas
> >
> > Hi,
> >
> > Here is a patch that assumes the DMA error is transient.
> > EmuTOS works with this patch.
> >
>
> Hello
>
> calling "FDC_SetDMAStatus ( false )" outside of FDC_DMA_FIFO_Pull()
> should not be required as DMA Status is completely handled in
> FDC_DMA_FIFO_Push() and FDC_DMA_FIFO_Pull().
>
> Except there was a bug in FDC_DMA_FIFO_Pull() and FDC_DMA.SectorCount
> was set to 0 too early (when the last 16 bytes need to be transferred),
> resulting in DMA.Status being set to "error", but also forcing the last
> 15 bytes of each sector to 0, which would seriously damage any disk :(
>
> This is now fixed and hopefully no one damaged some ST/MSA images.
>
> Nicolas
>
Hi Nicolas,
1) An unsigned compare for less than zero produces the compiler warning:
hatari/src/fdc.c: In function ‘FDC_DMA_FIFO_Pull’:
hatari/src/fdc.c:981: warning: comparison is always false
due to limited range of data type
2) I noticed that FDC_DMA_FIFO_Push() and FDC_DMA_FIFO_Pull()
now have different conditions for similar sections of code.
FDC_DMA_FIFO_Push() has:
if ( FDC_DMA.BytesInSector <= 0 )
and
FDC_DMA_FIFO_Pull() has:
if ( FDC_DMA.BytesInSector < 0 )
Sincerely,
David Savinkoff