Second representation requires at least 6 bits to represent numbers between 0 to 59. But 5 bits are not just enough - 25 = 32, which can only represent from 0 up to 31 seconds.

According to K.N. King:

You may be wondering how it 's possible to store the seconds - a number between 0 and 59 in a field with only 5 bits. Well. DOS cheats: it divides the number of seconds by 2, so the seconds member is actually between 0 and 29.

That really makes no sense?

  • FigMcLargeHuge
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    6 hours ago

    If you have 32 5 bits to work with you keep one bit to determine which half of the 30 seconds you are on. If that bit is a 0, you are counting 1-30 and if that bit is 1, then you are counting 31-60.

    • LalSalaamComrade@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      7 hours ago

      But during the release of MS-DOS, there were only 16-bit microprocessors, right? 32-bit x86 processors came way later around 1985, I think?

      • FigMcLargeHuge
        link
        fedilink
        English
        arrow-up
        1
        ·
        6 hours ago

        I don’t know the specifics, but why would 5 bits be a problem on a 16bit machine? Shit, my mistake, I should have said ‘If you have 5 bits to work with’. I will correct it.

        • LalSalaamComrade@lemmy.mlOP
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          6 hours ago

          I don’t know the specifics, but why would 5 bits be a problem on a 16bit machine?

          Because I’m assuming that there’s only 16 bits, right, and hence these have to be divided between hours, minutes and seconds:

          • 5 bits for the hours (25 = 32, to represent numbers from 0-23)
          • 6 bits for the minutes (26 = 64, can represent numbers from 0-59)
          • the 5 bits for the seconds (25 = 32, can only represent numbers from 0-31, what about seconds 32-59?)

          5 + 6 + 5 = 16 bits in total. This is why the last one makes no sense, unless the timeformat precision was restricted to 2 seconds?

          • FigMcLargeHuge
            link
            fedilink
            English
            arrow-up
            1
            ·
            5 hours ago

            Yeah, I have been trying to work out a table for just the seconds, and yeah, the 5 bits isn’t enough. I wasn’t thinking it through. Another bit would be needed to be able to capture the flip, and in that case the extra bit would just allow you to store the actual 0-59 value. That’s what I get for speaking before I have worked it out in my head.

          • j4k3@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            6 hours ago

            Probably need to go as deep as the ALU operations available and clock cycles to really see what is going on.

            I know nearly nothing of value in this space, but have seen lots of little tricks like this in passing with hobbyist hardware or ROMs. Intuitively, it feels like one of those kinds of situations. You might even find there is a clever use of a carry flag or something of that nature where there is essentially a free bit on an operation. I’m not sure how x86 does the ALU or whatnot here or even if this advice is relevant with an overlay tree. Feel free to inform/correct.