Ruud Baltissen wrote:
> Hallo allemaal,
Lo Ruud.
> 1) What I need is a conversion from "Track/Head/Sector" to a lineair number.
Exactly what 'type' of THS are you dealing with? Is it a 1541-ish type
of disk (for a diskimage, for example) with a variable number of sectors,
or do you want to convert 'IDE' THS (with a fixed geometry) back and from
a logical block address? (In that case, you may want to use LBA adressing
instead - most disks > 500MB probably support that. No conversion
required).
> And vica versa of course.
>
> Information you need:
> HDTRACKL = Low byte number of tracks on harddisk
> HDTRACKH = High byte number of tracks on harddisk
> HDHEADS = number of heads
> HDSECT = number of sectors on a track.
It *seems* like you want to have a fixed geometry, in which case it's
reasonably simple:
block(t,h,s)= t * HDHEADS * HDSECT + h * HDSECT + s
or
block(t,h,s)= (t * HDHEADS + h ) * HDSECT + s
(Saves one multiplication)
THe other way 'round is only slightly more complicated. It is helpful
if you have a 'cylinder'-step.
s = block MOD HDSECT
c = block \ HDSECT
h = c MOD HDHEADS
t = c \ HDHEADS
with 'MOD' being the modulo (or the 'remainder' of a division), \ being
an integer division. Ofcourse you can rewrite this to get rid of the MOD
by doing something like
c = block \ HDSECT
s = block - c*HDSECT
t = c \ HDHEADS
h = c - t*HDHEADS
The NRTRACKS is not required at all.
--
Martijn van Buul - Pino@dohd.org - http://www.stack.nl/~martijnb/
Geek code: G-- - Visit OuterSpace: mud.stack.nl 3333
Kees J. Bot: The sum of CPU power and user brain power is a constant.
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail 2.1.1.