The Microcode is stored in two different EPROM's each holding 8-bit of a 16 bit word
Each EPROM is 32KBytes
The PROM's 45123/45133 contains the 32 bits floating point code, the PROM's 45148/45149 contains the 48bit floating point code
AM27256_45132L = Contains the LO 8 bits (0-7) AM27256_45133L = Contains the HI 8 bits (8-15)
When creating the 64 bit microcode, you will need to read 4 addresses of 16 bits to get the
EPROM Address | Microcode bits |
---|---|
0 | Bits 48-63 |
1 | Bits 31-47 |
2 | Bits 16-31 |
3 | Bits 0-15 |
The Source code for the microcode is available as a PDF with a total of 249 pages. Its scanned in 600 DPI and it's been OCR'ed
The ND-06.031.1 EN ND-110 and ND-120 Microprogrammer's Guide is useful for understanding the microcode.
C# code to read the microcode into an 64bit wide array named chip_microcode
byte[] LOBits = File.ReadAllBytes("AM27256_45132L.bin");
byte[] HiBits = File.ReadAllBytes("AM27256_45133L.bin");
ulong[] chip_microcode = new ulong[1024 * 64];
int cnt = 0;
for (int i = 0; i < HiBits.Length; i += 4)
{
ulong uc = 0;
for (int b = 3; b >= 0; b--)
{
ushort w = (ushort)(HiBits[b + i] << 8 | LOBits[b + i]);
uc = uc << 16;
uc |= (ushort)w;
}
string ucHex = $"{uc:X16}".PadLeft(16, '0');
string addr = Convert.ToString(cnt, 8).PadLeft(6, '0');
Console.WriteLine($"i={i}, uC[{addr}]: {ucHex}");
chip_microcode[cnt++] = uc;
}
ushort version = (ushort)(chip_microcode[0x10] & 0xFF);
Console.WriteLine($"Version is {Convert.ToString(version,8)} (octal)");
Here you can se how the EPROM's was connected to the internal databuse (IDB)
In case you just want to review the microcode as hex, here is a dump for your convinience