+/* Separate GBZ80 main opcode table due to many differences */
+static const struct tab_elt
+opc_main_gbz80[] =
+{
+ { 0x00, 0xFF, prt,"nop", INSS_ALL },
+ { 0x01, 0xCF, prt_rr_nn, "ld %s,0x%%04x", INSS_ALL },
+ { 0x02, 0xFF, prt, "ld (bc),a", INSS_ALL },
+ { 0x03, 0xCF, prt_rr, "inc ", INSS_ALL },
+ { 0x04, 0xC7, prt_r, "inc %s", INSS_ALL },
+ { 0x05, 0xC7, prt_r, "dec %s", INSS_ALL },
+ { 0x06, 0xC7, ld_r_n, "ld %s,0x%%02x", INSS_ALL },
+ { 0x07, 0xFF, prt, "rlca", INSS_ALL },
+ { 0x08, 0xFF, prt_nn, "ld (0x%04x),sp", INSS_GBZ80 },
+ { 0x09, 0xCF, prt_rr, "add hl,", INSS_ALL },
+ { 0x0A, 0xFF, prt, "ld a,(bc)", INSS_ALL },
+ { 0x0B, 0xCF, prt_rr, "dec ", INSS_ALL },
+ { 0x0F, 0xFF, prt, "rrca", INSS_ALL },
+ { 0x10, 0xFF, prt, "stop", INSS_GBZ80 },
+ { 0x12, 0xFF, prt, "ld (de),a", INSS_ALL },
+ { 0x17, 0xFF, prt, "rla", INSS_ALL },
+ { 0x18, 0xFF, prt_e, "jr ", INSS_ALL },
+ { 0x1A, 0xFF, prt, "ld a,(de)", INSS_ALL },
+ { 0x1F, 0xFF, prt, "rra", INSS_ALL },
+ { 0x20, 0xE7, jr_cc, "jr %s,", INSS_ALL },
+ { 0x22, 0xFF, prt, "ld (hl+),a", INSS_GBZ80 },
+ { 0x27, 0xFF, prt, "daa", INSS_ALL },
+ { 0x2A, 0xFF, prt, "ld a,(hl+)", INSS_GBZ80 },
+ { 0x2F, 0xFF, prt, "cpl", INSS_ALL },
+ { 0x32, 0xFF, prt, "ld (hl-),a", INSS_GBZ80 },
+ { 0x37, 0xFF, prt, "scf", INSS_ALL },
+ { 0x3A, 0xFF, prt, "ld a,(hl-)", INSS_GBZ80 },
+ { 0x3F, 0xFF, prt, "ccf", INSS_ALL },
+ { 0x76, 0xFF, prt, "halt", INSS_ALL },
+ { 0x40, 0xC0, ld_r_r, "ld %s,%s", INSS_ALL},
+ { 0x80, 0xC0, arit_r, "%s%s", INSS_ALL },
+ { 0xC0, 0xE7, prt_cc, "ret ", INSS_ALL },
+ { 0xC1, 0xCF, pop_rr, "pop", INSS_ALL },
+ { 0xC2, 0xE7, jp_cc_nn, "jp ", INSS_ALL },
+ { 0xC3, 0xFF, prt_nn, "jp 0x%04x", INSS_ALL },
+ { 0xC4, 0xE7, jp_cc_nn, "call ", INSS_ALL },
+ { 0xC5, 0xCF, pop_rr, "push", INSS_ALL },
+ { 0xC6, 0xC7, arit_n, "%s0x%%02x", INSS_ALL },
+ { 0xC7, 0xC7, rst, "rst 0x%02x", INSS_ALL },
+ { 0xC9, 0xFF, prt, "ret", INSS_ALL },
+ { 0xCB, 0xFF, pref_cb, "", INSS_ALL },
+ { 0xCD, 0xFF, prt_nn, "call 0x%04x", INSS_ALL },
+ { 0xD9, 0xFF, prt, "reti", INSS_GBZ80 },
+ { 0xE0, 0xFF, prt_n, "ldh (0x%02x),a", INSS_GBZ80 },
+ { 0xE2, 0xFF, prt, "ldh (c),a", INSS_GBZ80 },
+ { 0xE8, 0xFF, prt_d, "add sp,%d", INSS_GBZ80 },
+ { 0xE9, 0xFF, prt, "jp (hl)", INSS_ALL },
+ { 0xEA, 0xFF, prt_nn, "ld (0x%04x),a", INSS_GBZ80 },
+ { 0xF0, 0xFF, prt_n, "ldh a,(0x%02x)", INSS_GBZ80 },
+ { 0xF2, 0xFF, prt, "ldh a,(c)", INSS_GBZ80 },
+ { 0xF3, 0xFF, prt, "di", INSS_ALL },
+ { 0xF8, 0xFF, prt_d, "ldhl sp,%d", INSS_GBZ80 },
+ { 0xF9, 0xFF, prt, "ld sp,hl", INSS_ALL },
+ { 0xFA, 0xFF, prt_nn, "ld a,(0x%04x)", INSS_GBZ80 },
+ { 0xFB, 0xFF, prt, "ei", INSS_ALL },
+ { 0x00, 0x00, dump, "?", INSS_ALL },
+} ;
+