/* * Cinematronics microcode disassembler * Copyright 1993 Eric Smith */ #include unsigned char drom1 [256]; unsigned char drom2 [32]; unsigned char drom3 [32]; unsigned char drom4 [32]; int read_file (char *name, int length, unsigned char *buffer) { FILE *fp; fp = fopen (name, "rb"); if (!fp) { fprintf (stderr, "error opening file '%s'\n", name); return (0); } if (fread (buffer, length, 1, fp) != 1) { fprintf (stderr, "error reading file '%s'\n", name); return (0); } fclose (fp); } /* prints LSB on left */ void print_bits (FILE *fp, unsigned char bits) { int i; for (i = 0; i < 8; i++) fprintf (fp, "%c", ".*" [(bits >> i) & 1]); } void print_rom2_rom4 (FILE *fp, unsigned char rom2, unsigned char rom4) { if (rom2 & 0x01) fprintf (fp, "load-prog-addr-ps "); if (rom2 & 0x02) fprintf (fp, "load-prog-addr-mid "); if (rom2 & 0x04) fprintf (fp, "vector "); if (rom2 & 0x08) fprintf (fp, "normalize-vector "); if (rom2 & 0x10) fprintf (fp, "par2 "); if (rom2 & 0x20) fprintf (fp, "cold-start "); if (rom2 & 0x40) fprintf (fp, "s-write-ws "); if (rom2 & 0x80) fprintf (fp, "write-ext "); if (rom4 & 0x01) fprintf (fp, "read "); if (rom4 & 0x02) fprintf (fp, "ds3 "); if (rom4 & 0x04) fprintf (fp, "page "); if (rom4 & 0x08) fprintf (fp, "frame "); if (rom4 & 0x10) fprintf (fp, "jump "); if (rom4 & 0x20) fprintf (fp, "lookup "); if (rom4 & 0x40) fprintf (fp, "multiply "); if (rom4 & 0x80) fprintf (fp, "indr-adr "); } int main (int argc, char *argv[]) { int i, i2, j, k; if (! (read_file ("dr1_2085.f14", 256, drom1) && read_file ("dr2_2086.e14", 32, drom2) && read_file ("dr3_2087.d14", 32, drom3) && read_file ("dr4_2088.c14", 32, drom4))) exit (2); printf (" state\n"); printf ("inst 00 01 10 ROM3 ROM2 & ROM4\n"); printf ("----- -- -- -- -------- ------------------\n"); for (i = 0x1f; i >= 0; i--) { i2 = i ^ 0x1f; if ((i2 == 0x0e) || (i2 == 0x0f)) continue; if (i2 < 0x10) printf (" %01xx ", i2 & 0x0f); else printf ("e%01x/f%01x ", i2 & 0x0f, i2 & 0x0f); for (j = 0; j < 1; j++) { for (k = 0; k < 3; k++) { printf (" %01x ", drom1 [(j << 7) | (k << 5) | i]); } printf (" "); } print_bits (stdout, drom3 [i] ^ 0xa0); printf (" "); print_rom2_rom4 (stdout, drom2 [i] ^ 0x3c, drom4 [i] ^ 0x99); printf ("\n"); } } --------------------------------- Cut Here --------------------------------- state inst 00 01 10 ROM3 ROM2 & ROM4 ----- -- -- -- -------- ------------------ 0x 0 0 0 ***..... ds3 1x 0 0 0 ***...*. read ds3 2x 7 1 7 **....*. 3x 7 1 7 **..*.*. 4x 7 3 7 ........ load-prog-addr-mid par2 5x f 2 e ........ jump 6x f f 0 **...*.* 7x f f 0 **..**.* 8x 2 2 2 ........ page 9x 2 2 2 ........ write-ext ax f f 0 ***..*.* bx f f 0 ....**.* cx f f 2 .....*.* indr-adr dx f 2 2 .......* s-write-ws e0/f0 2 2 2 ........ vector e1/f1 f 2 e .....*.. load-prog-addr-ps par2 e2/f2 f 7 1 ***...*. lookup e3/f3 d 2 e *..*.*.. multiply e4/f4 e e e .*.*.... normalize-vector e5/f5 e e e ........ frame e6/f6 f 2 e ........ s-write-ws e7/f7 f 0 e **...*.. cold-start e8/f8 f 0 e **..**.. e9/f9 f 0 e ***.**.. ea/fa f 0 e ***..*.. eb/fb 0 0 0 *....... ec/fc 0 0 0 .*...... ed/fd 0 0 0 *.*..... ee/fe 0 0 0 *..*.... ef/ff 0 0 0 .*.*....