mapping = [ # track 2 { :track => 2, :sector => 9, :head => 0, :size => 10 }, { :track => 2, :sector => 1, :head => 1, :size => 18 }, # track 3 { :track => 3, :sector => 1, :head => 0, :size => 18 }, { :track => 3, :sector => 1, :head => 1, :size => 18 }, # track 4 { :track => 4, :sector => 1, :head => 0, :size => 18 }, { :track => 4, :sector => 1, :head => 1, :size => 14 } ] g_size = 0 g_skip = -1 mapping.each() do |obj| t = obj[:track] s = obj[:sector] h = obj[:head] size = obj[:size] g_size += size lba = (t * 2 + h) * 18 + s - 1 offset = lba eoffset = offset + (size) - 1 g_skip = lba unless(g_skip > -1) puts("track %d sector %d head %d size %02d -- LBA %04d-%04d (offset 0x%08X-0x%08X)" % [t,s,h,size,offset,eoffset,offset*512,eoffset*512]) end puts("skip=%d count=%d" % [g_skip,g_size])