Skip to content

v0.62.0

Latest

Choose a tag to compare

@Arzaroth Arzaroth released this 29 Sep 08:57
· 2 commits to master since this release

Nothing left that nobody reads

The release before this one said the first sector was the one piece of code
here that is written and never read back, that reading it meant a decoder for a
width nothing else here uses, and that it deserved a release of its own. This
is that release, and with it there is nothing this file writes that nothing
here reads.

Fifty instructions over a hundred and eighty octets. Forty-three of them are
sixteen bits wide and seven are sixty-four, the far jump counting as the last
narrow one, because the sector changes width halfway through by jumping into
itself with a new selector. The operand-size prefix is the whole of the
difference between the two halves and it means opposite things in them: narrow,
it widens an operand to thirty-two bits, and wide, it narrows one to sixteen.
The same three octets on either side of that jump are two different
instructions, which is exactly the sort of thing a decoder is for and a search
is not.

Because that is what this replaces. The three numbers the sector states about
the disk around it - how many sectors to ask the drive for, where the
descriptor table is, where to go to become sixty-four bits wide - were found by
searching the sector for the octets of the instruction that carries each. That
works until an immediate happens to look like the instruction being searched
for, and nothing stopped that but the sector staying the shape it was in when
the search was written. They are read off the decoding now.

Decoding it is only worth the lines if the decoding is asked something the
octets could not be, and every number in that sector is one instruction telling
another where to look. The drive is asked for a read, and for the sectors that
were actually written. Where the drive is told to put them is the address the
last instruction jumps to. The descriptor is loaded from where the
instructions stop. Long mode is entered at the instruction after the one that
enters it. Paging is turned on with a table the sector wrote, the tables it
wrote are inside the span it cleared first, and both selectors it uses are
whole entries of the table it loaded. None of those were checked before and
all of them are now.

And the claim the three machines and the module have always made about their
texts, which the disk could not: every octet of it is spent on something. A
hundred and eighty of instructions, six of the descriptor that names the table,
forty of the table, two hundred and eighty-four of nothing, two of the
signature. Five hundred and twelve.

One thing found on the way, and it is the same thing the last release found
wearing different clothes. Once the disk reader was reading the sector, two
rules existed in two places - whether the drive is asked for a sensible number
of sectors, and whether long mode is entered inside the sector. A rule checked
twice cannot be deleted from either place without the other covering for it,
and deleting all forty-five rules in turn is how that was found: eight came
back green, six of them for that reason. The fix is not more bends. It is
deleting the duplicate. Forty-two rules now, sixty-seven bends, and every rule
fails the battery on its own.

Two of those bends are a sector built rather than bent. The written sector
stops decoding at its own jump into the payload, a long way before the end, so
no change to one octet of it will ever be an instruction wanting more of the
sector than is left, and none will ever be a sector with no jump in it at all.
These readers get pointed at images off a disk as well as at ones just written,
so what they do with a sector that is neither is worth stating.

python3 ouroboros.py --explain container

Full Changelog: v0.61.0...v0.62.0

LOC: 27759