Port-amiga archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Amiga delay implementation

Ignatios Souvatzis wrote:

>> As I found several calls to delay() with <= 25us in amiga/dev I would
>> prefer to restore the former calibrated loop method.
> Generally I agree. In some drivers, there are delays of only a few
> µs, which are prolonged a lot even for the timer method on Amiga,
> [...]
> (And you didn't mention the dev/ic drivers yet that are used by 
>  Amiga frontends - or did you count them?)

No, I just checked amiga/dev.

> DELAY() and delay() are documented not to be precise; but occasionally
> prolonging long delays, that have a greater danger of being hit by
> a higher level interupt, doesn't seem as bad to me as prolonging
> short delays, as the latter would increase interupt overhead in a
> lot of hardware drivers.

And it is not recommended to use delay/DELAY for long delays. For short
delays the calibrated loop is certainly best.

I finished the re-implementation of the calibrated delay-loop into the
current timecounter-based clock.c. Modified files were:

You find the source together with a generic kernel at:

Maybe you want to give it a try on a DraCo. Also everybody else is invited
to check the new kernel, especially to verify whether the A1200 keyboard
problems are still gone.

On my A3000/060 the divisor is now calibrated as "21/1024 us", which is
exactly the same value as with the 4.0 or 3.1 kernel. The kernel works as
far as I can see in multiuser mode with A3k-SCSI, CSPPC-SCSI, X-Surf
ethernet, CV64, etc., and I can even dump the contents of a floppy disk, so
the timing can't be too bad.

Even mounting an AmigaDos floppy disk works again, which was broken in
previous kernels!

    _  Frank Wille (frank%phoenix.owl.de@localhost)
 _ //  http://sun.hasenbraten.de/~frank/
 \X/   Phx @ #AmigaGer

Home | Main Index | Thread Index | Old Index