top | item 24389429

(no title)

ajenner | 5 years ago

The translation.txt file is the contents of the translation ROM which tells the CPU where in the microcode to go for long jumps, calls and EA decoding. The key.txt file has the details of all the mnemonics.

"000" - this is just a line number "A CD F H J L OPQR U" - these are the actual bits from the ROM. "R -> tmpb" - this is a move operation (each microcode instruction can do a move as well as something else) copying the value from "R" (a register described by the word length bit and either the R field or the RM field of the modrm byte depending on the direction bit) to "tmpb" (an internal register not accessible from the user-level ISA). "4 none WB,NX" - a type 4 instruction (bookkeeping) that tells the CPU that the next instruction is the last one in the microcode burst (NX) unless a write back (WB) to memory is needed. "0100010??.00" - this is the bit pattern by which this line of microcode is addressed. This one means opcodes 0x88-0x8b. "MOV rm<->r" - a comment added to say what this set of opcodes actually corresponds to x86 assembler, or what it does if it's a subroutine.

discuss

order

bogomipz|5 years ago

Thank you this really helps.

One last question do the individual files. There seems to be 3 distinct file groups:

0b.txt - 8t.txt

l0.txt - l3.txt

r0.txt-r3.txt

Do each of these represent different ROMs or different logical parts of the two ROMs? Or am I reading too much into the naming convention?

By the way - brilliant work. This is really a fascinating read.

ajenner|5 years ago

The b and t files are the bottom and top halves of the 9 "chunks" of the decoder above the main microcode ROM. The l* and r* files are the left and right halves of the four horizontal slices of the main ROM. I split them up that way because bitract needs the bits to be regularly spaced in both the horizontal and vertical directions.

Thanks - glad you enjoyed it!