From cd4b4e1f366f0582e085cc29b429cff36ca5d3ee Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 14 Jun 2026 19:24:16 +0100 Subject: [PATCH] Minimize mos65816 decoding tables --- core/rexcode/mos65816/decoding_tables.odin | 512 +++++++++--------- core/rexcode/mos65816/encoding_table.odin | 2 +- .../mos65816/tools/gen_decode_tables.odin | 6 +- 3 files changed, 259 insertions(+), 261 deletions(-) diff --git a/core/rexcode/mos65816/decoding_tables.odin b/core/rexcode/mos65816/decoding_tables.odin index d85fef388..4f80be6c8 100644 --- a/core/rexcode/mos65816/decoding_tables.odin +++ b/core/rexcode/mos65816/decoding_tables.odin @@ -297,261 +297,261 @@ DECODE_ENTRIES := [268]Decode_Entry{ { .SBC, {.MEM_LONG_X, .NONE}, {.LONG_1_ADDR, .NONE}, 0xFF, 4, {} }, } DECODE_INDEX_OPCODE := [256]Decode_Index{ - /* 00 */ {0, 1}, - /* 01 */ {1, 1}, - /* 02 */ {2, 1}, - /* 03 */ {3, 1}, - /* 04 */ {4, 1}, - /* 05 */ {5, 1}, - /* 06 */ {6, 1}, - /* 07 */ {7, 1}, - /* 08 */ {8, 1}, - /* 09 */ {9, 2}, - /* 0A */ {11, 1}, - /* 0B */ {12, 1}, - /* 0C */ {13, 1}, - /* 0D */ {14, 1}, - /* 0E */ {15, 1}, - /* 0F */ {16, 1}, - /* 10 */ {17, 1}, - /* 11 */ {18, 1}, - /* 12 */ {19, 1}, - /* 13 */ {20, 1}, - /* 14 */ {21, 1}, - /* 15 */ {22, 1}, - /* 16 */ {23, 1}, - /* 17 */ {24, 1}, - /* 18 */ {25, 1}, - /* 19 */ {26, 1}, - /* 1A */ {27, 1}, - /* 1B */ {28, 1}, - /* 1C */ {29, 1}, - /* 1D */ {30, 1}, - /* 1E */ {31, 1}, - /* 1F */ {32, 1}, - /* 20 */ {33, 1}, - /* 21 */ {34, 1}, - /* 22 */ {35, 1}, - /* 23 */ {36, 1}, - /* 24 */ {37, 1}, - /* 25 */ {38, 1}, - /* 26 */ {39, 1}, - /* 27 */ {40, 1}, - /* 28 */ {41, 1}, - /* 29 */ {42, 2}, - /* 2A */ {44, 1}, - /* 2B */ {45, 1}, - /* 2C */ {46, 1}, - /* 2D */ {47, 1}, - /* 2E */ {48, 1}, - /* 2F */ {49, 1}, - /* 30 */ {50, 1}, - /* 31 */ {51, 1}, - /* 32 */ {52, 1}, - /* 33 */ {53, 1}, - /* 34 */ {54, 1}, - /* 35 */ {55, 1}, - /* 36 */ {56, 1}, - /* 37 */ {57, 1}, - /* 38 */ {58, 1}, - /* 39 */ {59, 1}, - /* 3A */ {60, 1}, - /* 3B */ {61, 1}, - /* 3C */ {62, 1}, - /* 3D */ {63, 1}, - /* 3E */ {64, 1}, - /* 3F */ {65, 1}, - /* 40 */ {66, 1}, - /* 41 */ {67, 1}, - /* 42 */ {68, 1}, - /* 43 */ {69, 1}, - /* 44 */ {70, 1}, - /* 45 */ {71, 1}, - /* 46 */ {72, 1}, - /* 47 */ {73, 1}, - /* 48 */ {74, 1}, - /* 49 */ {75, 2}, - /* 4A */ {77, 1}, - /* 4B */ {78, 1}, - /* 4C */ {79, 1}, - /* 4D */ {80, 1}, - /* 4E */ {81, 1}, - /* 4F */ {82, 1}, - /* 50 */ {83, 1}, - /* 51 */ {84, 1}, - /* 52 */ {85, 1}, - /* 53 */ {86, 1}, - /* 54 */ {87, 1}, - /* 55 */ {88, 1}, - /* 56 */ {89, 1}, - /* 57 */ {90, 1}, - /* 58 */ {91, 1}, - /* 59 */ {92, 1}, - /* 5A */ {93, 1}, - /* 5B */ {94, 1}, - /* 5C */ {95, 1}, - /* 5D */ {96, 1}, - /* 5E */ {97, 1}, - /* 5F */ {98, 1}, - /* 60 */ {99, 1}, - /* 61 */ {100, 1}, - /* 62 */ {101, 1}, - /* 63 */ {102, 1}, - /* 64 */ {103, 1}, - /* 65 */ {104, 1}, - /* 66 */ {105, 1}, - /* 67 */ {106, 1}, - /* 68 */ {107, 1}, - /* 69 */ {108, 2}, - /* 6A */ {110, 1}, - /* 6B */ {111, 1}, - /* 6C */ {112, 1}, - /* 6D */ {113, 1}, - /* 6E */ {114, 1}, - /* 6F */ {115, 1}, - /* 70 */ {116, 1}, - /* 71 */ {117, 1}, - /* 72 */ {118, 1}, - /* 73 */ {119, 1}, - /* 74 */ {120, 1}, - /* 75 */ {121, 1}, - /* 76 */ {122, 1}, - /* 77 */ {123, 1}, - /* 78 */ {124, 1}, - /* 79 */ {125, 1}, - /* 7A */ {126, 1}, - /* 7B */ {127, 1}, - /* 7C */ {128, 1}, - /* 7D */ {129, 1}, - /* 7E */ {130, 1}, - /* 7F */ {131, 1}, - /* 80 */ {132, 1}, - /* 81 */ {133, 1}, - /* 82 */ {134, 1}, - /* 83 */ {135, 1}, - /* 84 */ {136, 1}, - /* 85 */ {137, 1}, - /* 86 */ {138, 1}, - /* 87 */ {139, 1}, - /* 88 */ {140, 1}, - /* 89 */ {141, 2}, - /* 8A */ {143, 1}, - /* 8B */ {144, 1}, - /* 8C */ {145, 1}, - /* 8D */ {146, 1}, - /* 8E */ {147, 1}, - /* 8F */ {148, 1}, - /* 90 */ {149, 1}, - /* 91 */ {150, 1}, - /* 92 */ {151, 1}, - /* 93 */ {152, 1}, - /* 94 */ {153, 1}, - /* 95 */ {154, 1}, - /* 96 */ {155, 1}, - /* 97 */ {156, 1}, - /* 98 */ {157, 1}, - /* 99 */ {158, 1}, - /* 9A */ {159, 1}, - /* 9B */ {160, 1}, - /* 9C */ {161, 1}, - /* 9D */ {162, 1}, - /* 9E */ {163, 1}, - /* 9F */ {164, 1}, - /* A0 */ {165, 2}, - /* A1 */ {167, 1}, - /* A2 */ {168, 2}, - /* A3 */ {170, 1}, - /* A4 */ {171, 1}, - /* A5 */ {172, 1}, - /* A6 */ {173, 1}, - /* A7 */ {174, 1}, - /* A8 */ {175, 1}, - /* A9 */ {176, 2}, - /* AA */ {178, 1}, - /* AB */ {179, 1}, - /* AC */ {180, 1}, - /* AD */ {181, 1}, - /* AE */ {182, 1}, - /* AF */ {183, 1}, - /* B0 */ {184, 1}, - /* B1 */ {185, 1}, - /* B2 */ {186, 1}, - /* B3 */ {187, 1}, - /* B4 */ {188, 1}, - /* B5 */ {189, 1}, - /* B6 */ {190, 1}, - /* B7 */ {191, 1}, - /* B8 */ {192, 1}, - /* B9 */ {193, 1}, - /* BA */ {194, 1}, - /* BB */ {195, 1}, - /* BC */ {196, 1}, - /* BD */ {197, 1}, - /* BE */ {198, 1}, - /* BF */ {199, 1}, - /* C0 */ {200, 2}, - /* C1 */ {202, 1}, - /* C2 */ {203, 1}, - /* C3 */ {204, 1}, - /* C4 */ {205, 1}, - /* C5 */ {206, 1}, - /* C6 */ {207, 1}, - /* C7 */ {208, 1}, - /* C8 */ {209, 1}, - /* C9 */ {210, 2}, - /* CA */ {212, 1}, - /* CB */ {213, 1}, - /* CC */ {214, 1}, - /* CD */ {215, 1}, - /* CE */ {216, 1}, - /* CF */ {217, 1}, - /* D0 */ {218, 1}, - /* D1 */ {219, 1}, - /* D2 */ {220, 1}, - /* D3 */ {221, 1}, - /* D4 */ {222, 1}, - /* D5 */ {223, 1}, - /* D6 */ {224, 1}, - /* D7 */ {225, 1}, - /* D8 */ {226, 1}, - /* D9 */ {227, 1}, - /* DA */ {228, 1}, - /* DB */ {229, 1}, - /* DC */ {230, 1}, - /* DD */ {231, 1}, - /* DE */ {232, 1}, - /* DF */ {233, 1}, - /* E0 */ {234, 2}, - /* E1 */ {236, 1}, - /* E2 */ {237, 1}, - /* E3 */ {238, 1}, - /* E4 */ {239, 1}, - /* E5 */ {240, 1}, - /* E6 */ {241, 1}, - /* E7 */ {242, 1}, - /* E8 */ {243, 1}, - /* E9 */ {244, 2}, - /* EA */ {246, 1}, - /* EB */ {247, 1}, - /* EC */ {248, 1}, - /* ED */ {249, 1}, - /* EE */ {250, 1}, - /* EF */ {251, 1}, - /* F0 */ {252, 1}, - /* F1 */ {253, 1}, - /* F2 */ {254, 1}, - /* F3 */ {255, 1}, - /* F4 */ {256, 1}, - /* F5 */ {257, 1}, - /* F6 */ {258, 1}, - /* F7 */ {259, 1}, - /* F8 */ {260, 1}, - /* F9 */ {261, 1}, - /* FA */ {262, 1}, - /* FB */ {263, 1}, - /* FC */ {264, 1}, - /* FD */ {265, 1}, - /* FE */ {266, 1}, - /* FF */ {267, 1}, + 0x00 = {0, 1}, + 0x01 = {1, 1}, + 0x02 = {2, 1}, + 0x03 = {3, 1}, + 0x04 = {4, 1}, + 0x05 = {5, 1}, + 0x06 = {6, 1}, + 0x07 = {7, 1}, + 0x08 = {8, 1}, + 0x09 = {9, 2}, + 0x0A = {11, 1}, + 0x0B = {12, 1}, + 0x0C = {13, 1}, + 0x0D = {14, 1}, + 0x0E = {15, 1}, + 0x0F = {16, 1}, + 0x10 = {17, 1}, + 0x11 = {18, 1}, + 0x12 = {19, 1}, + 0x13 = {20, 1}, + 0x14 = {21, 1}, + 0x15 = {22, 1}, + 0x16 = {23, 1}, + 0x17 = {24, 1}, + 0x18 = {25, 1}, + 0x19 = {26, 1}, + 0x1A = {27, 1}, + 0x1B = {28, 1}, + 0x1C = {29, 1}, + 0x1D = {30, 1}, + 0x1E = {31, 1}, + 0x1F = {32, 1}, + 0x20 = {33, 1}, + 0x21 = {34, 1}, + 0x22 = {35, 1}, + 0x23 = {36, 1}, + 0x24 = {37, 1}, + 0x25 = {38, 1}, + 0x26 = {39, 1}, + 0x27 = {40, 1}, + 0x28 = {41, 1}, + 0x29 = {42, 2}, + 0x2A = {44, 1}, + 0x2B = {45, 1}, + 0x2C = {46, 1}, + 0x2D = {47, 1}, + 0x2E = {48, 1}, + 0x2F = {49, 1}, + 0x30 = {50, 1}, + 0x31 = {51, 1}, + 0x32 = {52, 1}, + 0x33 = {53, 1}, + 0x34 = {54, 1}, + 0x35 = {55, 1}, + 0x36 = {56, 1}, + 0x37 = {57, 1}, + 0x38 = {58, 1}, + 0x39 = {59, 1}, + 0x3A = {60, 1}, + 0x3B = {61, 1}, + 0x3C = {62, 1}, + 0x3D = {63, 1}, + 0x3E = {64, 1}, + 0x3F = {65, 1}, + 0x40 = {66, 1}, + 0x41 = {67, 1}, + 0x42 = {68, 1}, + 0x43 = {69, 1}, + 0x44 = {70, 1}, + 0x45 = {71, 1}, + 0x46 = {72, 1}, + 0x47 = {73, 1}, + 0x48 = {74, 1}, + 0x49 = {75, 2}, + 0x4A = {77, 1}, + 0x4B = {78, 1}, + 0x4C = {79, 1}, + 0x4D = {80, 1}, + 0x4E = {81, 1}, + 0x4F = {82, 1}, + 0x50 = {83, 1}, + 0x51 = {84, 1}, + 0x52 = {85, 1}, + 0x53 = {86, 1}, + 0x54 = {87, 1}, + 0x55 = {88, 1}, + 0x56 = {89, 1}, + 0x57 = {90, 1}, + 0x58 = {91, 1}, + 0x59 = {92, 1}, + 0x5A = {93, 1}, + 0x5B = {94, 1}, + 0x5C = {95, 1}, + 0x5D = {96, 1}, + 0x5E = {97, 1}, + 0x5F = {98, 1}, + 0x60 = {99, 1}, + 0x61 = {100, 1}, + 0x62 = {101, 1}, + 0x63 = {102, 1}, + 0x64 = {103, 1}, + 0x65 = {104, 1}, + 0x66 = {105, 1}, + 0x67 = {106, 1}, + 0x68 = {107, 1}, + 0x69 = {108, 2}, + 0x6A = {110, 1}, + 0x6B = {111, 1}, + 0x6C = {112, 1}, + 0x6D = {113, 1}, + 0x6E = {114, 1}, + 0x6F = {115, 1}, + 0x70 = {116, 1}, + 0x71 = {117, 1}, + 0x72 = {118, 1}, + 0x73 = {119, 1}, + 0x74 = {120, 1}, + 0x75 = {121, 1}, + 0x76 = {122, 1}, + 0x77 = {123, 1}, + 0x78 = {124, 1}, + 0x79 = {125, 1}, + 0x7A = {126, 1}, + 0x7B = {127, 1}, + 0x7C = {128, 1}, + 0x7D = {129, 1}, + 0x7E = {130, 1}, + 0x7F = {131, 1}, + 0x80 = {132, 1}, + 0x81 = {133, 1}, + 0x82 = {134, 1}, + 0x83 = {135, 1}, + 0x84 = {136, 1}, + 0x85 = {137, 1}, + 0x86 = {138, 1}, + 0x87 = {139, 1}, + 0x88 = {140, 1}, + 0x89 = {141, 2}, + 0x8A = {143, 1}, + 0x8B = {144, 1}, + 0x8C = {145, 1}, + 0x8D = {146, 1}, + 0x8E = {147, 1}, + 0x8F = {148, 1}, + 0x90 = {149, 1}, + 0x91 = {150, 1}, + 0x92 = {151, 1}, + 0x93 = {152, 1}, + 0x94 = {153, 1}, + 0x95 = {154, 1}, + 0x96 = {155, 1}, + 0x97 = {156, 1}, + 0x98 = {157, 1}, + 0x99 = {158, 1}, + 0x9A = {159, 1}, + 0x9B = {160, 1}, + 0x9C = {161, 1}, + 0x9D = {162, 1}, + 0x9E = {163, 1}, + 0x9F = {164, 1}, + 0xA0 = {165, 2}, + 0xA1 = {167, 1}, + 0xA2 = {168, 2}, + 0xA3 = {170, 1}, + 0xA4 = {171, 1}, + 0xA5 = {172, 1}, + 0xA6 = {173, 1}, + 0xA7 = {174, 1}, + 0xA8 = {175, 1}, + 0xA9 = {176, 2}, + 0xAA = {178, 1}, + 0xAB = {179, 1}, + 0xAC = {180, 1}, + 0xAD = {181, 1}, + 0xAE = {182, 1}, + 0xAF = {183, 1}, + 0xB0 = {184, 1}, + 0xB1 = {185, 1}, + 0xB2 = {186, 1}, + 0xB3 = {187, 1}, + 0xB4 = {188, 1}, + 0xB5 = {189, 1}, + 0xB6 = {190, 1}, + 0xB7 = {191, 1}, + 0xB8 = {192, 1}, + 0xB9 = {193, 1}, + 0xBA = {194, 1}, + 0xBB = {195, 1}, + 0xBC = {196, 1}, + 0xBD = {197, 1}, + 0xBE = {198, 1}, + 0xBF = {199, 1}, + 0xC0 = {200, 2}, + 0xC1 = {202, 1}, + 0xC2 = {203, 1}, + 0xC3 = {204, 1}, + 0xC4 = {205, 1}, + 0xC5 = {206, 1}, + 0xC6 = {207, 1}, + 0xC7 = {208, 1}, + 0xC8 = {209, 1}, + 0xC9 = {210, 2}, + 0xCA = {212, 1}, + 0xCB = {213, 1}, + 0xCC = {214, 1}, + 0xCD = {215, 1}, + 0xCE = {216, 1}, + 0xCF = {217, 1}, + 0xD0 = {218, 1}, + 0xD1 = {219, 1}, + 0xD2 = {220, 1}, + 0xD3 = {221, 1}, + 0xD4 = {222, 1}, + 0xD5 = {223, 1}, + 0xD6 = {224, 1}, + 0xD7 = {225, 1}, + 0xD8 = {226, 1}, + 0xD9 = {227, 1}, + 0xDA = {228, 1}, + 0xDB = {229, 1}, + 0xDC = {230, 1}, + 0xDD = {231, 1}, + 0xDE = {232, 1}, + 0xDF = {233, 1}, + 0xE0 = {234, 2}, + 0xE1 = {236, 1}, + 0xE2 = {237, 1}, + 0xE3 = {238, 1}, + 0xE4 = {239, 1}, + 0xE5 = {240, 1}, + 0xE6 = {241, 1}, + 0xE7 = {242, 1}, + 0xE8 = {243, 1}, + 0xE9 = {244, 2}, + 0xEA = {246, 1}, + 0xEB = {247, 1}, + 0xEC = {248, 1}, + 0xED = {249, 1}, + 0xEE = {250, 1}, + 0xEF = {251, 1}, + 0xF0 = {252, 1}, + 0xF1 = {253, 1}, + 0xF2 = {254, 1}, + 0xF3 = {255, 1}, + 0xF4 = {256, 1}, + 0xF5 = {257, 1}, + 0xF6 = {258, 1}, + 0xF7 = {259, 1}, + 0xF8 = {260, 1}, + 0xF9 = {261, 1}, + 0xFA = {262, 1}, + 0xFB = {263, 1}, + 0xFC = {264, 1}, + 0xFD = {265, 1}, + 0xFE = {266, 1}, + 0xFF = {267, 1}, } diff --git a/core/rexcode/mos65816/encoding_table.odin b/core/rexcode/mos65816/encoding_table.odin index ac5c24ae5..a84322769 100644 --- a/core/rexcode/mos65816/encoding_table.odin +++ b/core/rexcode/mos65816/encoding_table.odin @@ -33,7 +33,7 @@ package rexcode_mos65816 // $A0 (LDA), $C0 (CMP), $E0 (SBC) to get the per-mnemonic base. @(rodata) -ENCODING_TABLE: [Mnemonic][]Encoding = #partial { +ENCODING_TABLE:= #partial [Mnemonic][]Encoding{ .INVALID = {}, // ========================================================================= diff --git a/core/rexcode/mos65816/tools/gen_decode_tables.odin b/core/rexcode/mos65816/tools/gen_decode_tables.odin index 676d7f9a1..6107d6dd6 100644 --- a/core/rexcode/mos65816/tools/gen_decode_tables.odin +++ b/core/rexcode/mos65816/tools/gen_decode_tables.odin @@ -152,10 +152,8 @@ encode_flags_literal :: proc(f: m.Encoding_Flags) -> string { emit_range_table :: proc(sb: ^strings.Builder, name: string, ranges: []Range) { fmt.sbprintfln(sb, "%s := [%d]Decode_Index{{", name, len(ranges)) for r, i in ranges { - if r.count == 0 { - fmt.sbprintfln(sb, "\t/* %02X */ {{0, 0}},", i) - } else { - fmt.sbprintfln(sb, "\t/* %02X */ {{%d, %d}},", i, r.start, r.count) + if r.count != 0 { + fmt.sbprintfln(sb, "\t0x%02X = {{%d, %d}},", i, r.start, r.count) } } strings.write_string(sb, "}\n\n")