#include #include const char *opcodes[] = { "line_open", /* 0000 */ "autoline_open", /* 0001 */ "line_close", /* 0010 */ "autoline_close", /* 0011 */ "trapezoid", /* 0100 */ "trapezoid texture map", /* 0101 */ "reserved trap", /* 0110 */ "reserved trap", /* 0111 */ "bitblt", /* 1000 */ "iload", /* 1001 */ "reserved", /* 1010 */ "reserved", /* 1011 */ "fbitblt", /* 1100 */ "iload scale", /* 1101 */ "reserved", /* 1110 */ "iload filter" /* 1111 */ }; const char *atype[] = { "rpl - Write (Replace)", /* 000 */ "rstr - read-modify-write (raster)", /* 001 */ "reserved", /* 010 */ "z1 - depth mode with gouraud", /* 011 */ "blk - block write mode", /* 100 */ "reserved", /* 101 */ "reserved", /* 110 */ "I - Gouraud (with depth compare)" /* 111 */ }; const char *zmode[] = { "NOZCMP - always", /* 000 */ "reserved", /* 001 */ "ZE - depth =", /* 010 */ "zne - depth !=", /* 011 */ "zlt", /* 100 */ "zlte", /* 101 */ "zgt", /* 110 */ "zgte" /* 111 */ }; const char *bop[] = { "0", /* 0000 */ "~(D|S)", /* 0001 */ "D & ~S", /* 0010 */ "~S", /* 0011 */ "(~D) & S", /* 0100 */ "~D", /* 0101 */ "D ^ S", /* 0110 */ "~ (D & S)", /* 0111 */ "D & S", /* 1000 */ "~(D^S)", /* 1001 */ "D", /* 1010 */ "D | ~S", /* 1011 */ "S", /* 1100 */ "(~D) | S", /* 1101 */ "D | S", /* 1110 */ "1" /* 1111 */ }; const char *bitmod[] = { "BMONOLEF - Source is mono, or if iload, source is little endian", /* 0000 */ "BPLAN - source is mono from one plane", /* 0001 */ "BFCOL - source is colour, and is formatted from host", /* 0010 */ "BU32BGR - source is colour. For ILOAD, it's in 32bpp, BGR format", /* 0011 */ "BMONOWEF - source is mono, or if iload, source is windows format", /* 0100 */ "error! no such mode", /* 0101 */ "error! no such mode", /* 0110 */ "BU32RGB - source is colour, or if iload, source is 32 bpp RGB", /* 0111 */ "error! no such mode", /* 1000 */ "error! no such mode", /* 1001 */ "error! no such mode", /* 1010 */ "BU24BGR - source is colour, of if iload, source is 24 bpp BGR", /* 1011 */ "error! no such mode", /* 1100 */ "error! no such mode", /* 1101 */ "BUYUV - source is color, or for ILOAD, it's in 4:2:2 YUV format", /* 1110 */ "BU24RGB - source is color, or for ILOAD, it's in 24 bpp RGB" /* 1111 */ }; int main(int argc, char **argv) { unsigned long val, tmp; if ( argc != 2 ) { fprintf(stderr, "usage: %s hexval\n", argv[0]); return 1; } val = strtoul(argv[1], NULL, 16); printf("the val is : %lu\n", val); /* opcode */ tmp = val & 0x0f; printf("opcode: %s\n", opcodes[tmp]); tmp = ( val >> 4 ) & 0x7; printf("atype: %s\n", atype[tmp]); if ( val & 128 ) printf("xy bitblt\n"); else printf("linear bitblt\n"); tmp = ( val >> 8 ) & 7; printf("zmode: %s\n", zmode[tmp]); if ( val & ( 1 << 11 ) ) printf("solid line or constant trapezoid\n"); else printf("src0 - 3 may need to be loaded"); if ( val & ( 1 << 12 )) printf("ar0-ar6 = 0\n"); else printf("you may need to set ar0-6.\n"); if ( val & ( 1 << 13 )) printf("sgn = 0\n"); else printf("sgn is not affected\n"); if ( val & ( 1 << 14 )) printf("shift = 0\n"); else printf("shift is not affected\n"); tmp = (val>>16) & 0x0f; if ( ((val >> 4) & 7) == 4 && tmp != 0x0c ) printf("Error! Block (BLK) atype and non-source binary op chosen. Replace (S) bop will be used.\n"); printf("bop = %s, where ~ = bitwise complement, ^ = xor\n", bop[tmp]); if ( ((val >> 20) & 0x0f) == 0 ) printf("opaque object\n"); else printf("partially opaque object\n"); tmp = (val >> 25) & 0x0f; printf("bitmod: %s\n", bitmod[tmp]); if ((val >> 29) & 0x01) printf("patterning enabled\n"); else printf("patterning disabled\n"); if ((val >> 30) & 0x01) printf("background colour is transparent\n"); else printf("background colour is opaque\n"); return 0; }