Minimize mos6502 decoder table

This commit is contained in:
gingerBill
2026-06-14 19:23:21 +01:00
parent c8de23f678
commit 70e92d2a4d
3 changed files with 255 additions and 261 deletions

View File

@@ -352,261 +352,257 @@ DECODE_ENTRIES := [321]Decode_Entry{
}
DECODE_INDEX_OPCODE := [256]Decode_Index{
/* 00 */ {0, 1},
/* 01 */ {1, 1},
/* 02 */ {2, 2},
/* 03 */ {4, 2},
/* 04 */ {6, 2},
/* 05 */ {8, 1},
/* 06 */ {9, 1},
/* 07 */ {10, 2},
/* 08 */ {12, 1},
/* 09 */ {13, 1},
/* 0A */ {14, 1},
/* 0B */ {15, 1},
/* 0C */ {16, 2},
/* 0D */ {18, 1},
/* 0E */ {19, 1},
/* 0F */ {20, 2},
/* 10 */ {22, 1},
/* 11 */ {23, 1},
/* 12 */ {24, 2},
/* 13 */ {26, 2},
/* 14 */ {28, 2},
/* 15 */ {30, 1},
/* 16 */ {31, 1},
/* 17 */ {32, 2},
/* 18 */ {34, 1},
/* 19 */ {35, 1},
/* 1A */ {36, 2},
/* 1B */ {38, 1},
/* 1C */ {39, 2},
/* 1D */ {41, 1},
/* 1E */ {42, 1},
/* 1F */ {43, 2},
/* 20 */ {45, 1},
/* 21 */ {46, 1},
/* 22 */ {47, 2},
/* 23 */ {49, 2},
/* 24 */ {51, 1},
/* 25 */ {52, 1},
/* 26 */ {53, 1},
/* 27 */ {54, 2},
/* 28 */ {56, 1},
/* 29 */ {57, 1},
/* 2A */ {58, 1},
/* 2B */ {59, 1},
/* 2C */ {60, 1},
/* 2D */ {61, 1},
/* 2E */ {62, 1},
/* 2F */ {63, 2},
/* 30 */ {65, 1},
/* 31 */ {66, 1},
/* 32 */ {67, 2},
/* 33 */ {69, 1},
/* 34 */ {70, 1},
/* 35 */ {71, 1},
/* 36 */ {72, 1},
/* 37 */ {73, 2},
/* 38 */ {75, 1},
/* 39 */ {76, 1},
/* 3A */ {77, 2},
/* 3B */ {79, 1},
/* 3C */ {80, 1},
/* 3D */ {81, 1},
/* 3E */ {82, 1},
/* 3F */ {83, 2},
/* 40 */ {85, 1},
/* 41 */ {86, 1},
/* 42 */ {87, 2},
/* 43 */ {89, 2},
/* 44 */ {91, 1},
/* 45 */ {92, 1},
/* 46 */ {93, 1},
/* 47 */ {94, 2},
/* 48 */ {96, 1},
/* 49 */ {97, 1},
/* 4A */ {98, 1},
/* 4B */ {99, 1},
/* 4C */ {100, 1},
/* 4D */ {101, 1},
/* 4E */ {102, 1},
/* 4F */ {103, 2},
/* 50 */ {105, 1},
/* 51 */ {106, 1},
/* 52 */ {107, 2},
/* 53 */ {109, 2},
/* 54 */ {111, 1},
/* 55 */ {112, 1},
/* 56 */ {113, 1},
/* 57 */ {114, 2},
/* 58 */ {116, 1},
/* 59 */ {117, 1},
/* 5A */ {118, 1},
/* 5B */ {119, 1},
/* 5C */ {0, 0},
/* 5D */ {120, 1},
/* 5E */ {121, 1},
/* 5F */ {122, 2},
/* 60 */ {124, 1},
/* 61 */ {125, 1},
/* 62 */ {126, 2},
/* 63 */ {128, 1},
/* 64 */ {129, 1},
/* 65 */ {130, 1},
/* 66 */ {131, 1},
/* 67 */ {132, 2},
/* 68 */ {134, 1},
/* 69 */ {135, 1},
/* 6A */ {136, 1},
/* 6B */ {137, 1},
/* 6C */ {138, 1},
/* 6D */ {139, 1},
/* 6E */ {140, 1},
/* 6F */ {141, 2},
/* 70 */ {143, 1},
/* 71 */ {144, 1},
/* 72 */ {145, 2},
/* 73 */ {147, 2},
/* 74 */ {149, 1},
/* 75 */ {150, 1},
/* 76 */ {151, 1},
/* 77 */ {152, 2},
/* 78 */ {154, 1},
/* 79 */ {155, 1},
/* 7A */ {156, 1},
/* 7B */ {157, 1},
/* 7C */ {158, 1},
/* 7D */ {159, 1},
/* 7E */ {160, 1},
/* 7F */ {161, 2},
/* 80 */ {163, 2},
/* 81 */ {165, 1},
/* 82 */ {166, 1},
/* 83 */ {167, 2},
/* 84 */ {169, 1},
/* 85 */ {170, 1},
/* 86 */ {171, 1},
/* 87 */ {172, 2},
/* 88 */ {174, 1},
/* 89 */ {175, 1},
/* 8A */ {176, 1},
/* 8B */ {177, 1},
/* 8C */ {178, 1},
/* 8D */ {179, 1},
/* 8E */ {180, 1},
/* 8F */ {181, 2},
/* 90 */ {183, 1},
/* 91 */ {184, 1},
/* 92 */ {185, 2},
/* 93 */ {187, 2},
/* 94 */ {189, 1},
/* 95 */ {190, 1},
/* 96 */ {191, 1},
/* 97 */ {192, 2},
/* 98 */ {194, 1},
/* 99 */ {195, 1},
/* 9A */ {196, 1},
/* 9B */ {197, 1},
/* 9C */ {198, 2},
/* 9D */ {200, 1},
/* 9E */ {201, 2},
/* 9F */ {203, 2},
/* A0 */ {205, 1},
/* A1 */ {206, 1},
/* A2 */ {207, 1},
/* A3 */ {208, 2},
/* A4 */ {210, 1},
/* A5 */ {211, 1},
/* A6 */ {212, 1},
/* A7 */ {213, 2},
/* A8 */ {215, 1},
/* A9 */ {216, 1},
/* AA */ {217, 1},
/* AB */ {218, 1},
/* AC */ {219, 1},
/* AD */ {220, 1},
/* AE */ {221, 1},
/* AF */ {222, 2},
/* B0 */ {224, 1},
/* B1 */ {225, 1},
/* B2 */ {226, 2},
/* B3 */ {228, 2},
/* B4 */ {230, 1},
/* B5 */ {231, 1},
/* B6 */ {232, 1},
/* B7 */ {233, 2},
/* B8 */ {235, 1},
/* B9 */ {236, 1},
/* BA */ {237, 1},
/* BB */ {238, 1},
/* BC */ {239, 1},
/* BD */ {240, 1},
/* BE */ {241, 1},
/* BF */ {242, 2},
/* C0 */ {244, 1},
/* C1 */ {245, 1},
/* C2 */ {246, 1},
/* C3 */ {247, 2},
/* C4 */ {249, 1},
/* C5 */ {250, 1},
/* C6 */ {251, 1},
/* C7 */ {252, 2},
/* C8 */ {254, 1},
/* C9 */ {255, 1},
/* CA */ {256, 1},
/* CB */ {257, 2},
/* CC */ {259, 1},
/* CD */ {260, 1},
/* CE */ {261, 1},
/* CF */ {262, 2},
/* D0 */ {264, 1},
/* D1 */ {265, 1},
/* D2 */ {266, 2},
/* D3 */ {268, 2},
/* D4 */ {270, 1},
/* D5 */ {271, 1},
/* D6 */ {272, 1},
/* D7 */ {273, 2},
/* D8 */ {275, 1},
/* D9 */ {276, 1},
/* DA */ {277, 1},
/* DB */ {278, 2},
/* DC */ {0, 0},
/* DD */ {280, 1},
/* DE */ {281, 1},
/* DF */ {282, 2},
/* E0 */ {284, 1},
/* E1 */ {285, 1},
/* E2 */ {0, 0},
/* E3 */ {286, 2},
/* E4 */ {288, 1},
/* E5 */ {289, 1},
/* E6 */ {290, 1},
/* E7 */ {291, 2},
/* E8 */ {293, 1},
/* E9 */ {294, 1},
/* EA */ {295, 1},
/* EB */ {296, 1},
/* EC */ {297, 1},
/* ED */ {298, 1},
/* EE */ {299, 1},
/* EF */ {300, 2},
/* F0 */ {302, 1},
/* F1 */ {303, 1},
/* F2 */ {304, 2},
/* F3 */ {306, 2},
/* F4 */ {308, 1},
/* F5 */ {309, 1},
/* F6 */ {310, 1},
/* F7 */ {311, 2},
/* F8 */ {313, 1},
/* F9 */ {314, 1},
/* FA */ {315, 1},
/* FB */ {316, 1},
/* FC */ {0, 0},
/* FD */ {317, 1},
/* FE */ {318, 1},
/* FF */ {319, 2},
0x00 = {0, 1},
0x01 = {1, 1},
0x02 = {2, 2},
0x03 = {4, 2},
0x04 = {6, 2},
0x05 = {8, 1},
0x06 = {9, 1},
0x07 = {10, 2},
0x08 = {12, 1},
0x09 = {13, 1},
0x0A = {14, 1},
0x0B = {15, 1},
0x0C = {16, 2},
0x0D = {18, 1},
0x0E = {19, 1},
0x0F = {20, 2},
0x10 = {22, 1},
0x11 = {23, 1},
0x12 = {24, 2},
0x13 = {26, 2},
0x14 = {28, 2},
0x15 = {30, 1},
0x16 = {31, 1},
0x17 = {32, 2},
0x18 = {34, 1},
0x19 = {35, 1},
0x1A = {36, 2},
0x1B = {38, 1},
0x1C = {39, 2},
0x1D = {41, 1},
0x1E = {42, 1},
0x1F = {43, 2},
0x20 = {45, 1},
0x21 = {46, 1},
0x22 = {47, 2},
0x23 = {49, 2},
0x24 = {51, 1},
0x25 = {52, 1},
0x26 = {53, 1},
0x27 = {54, 2},
0x28 = {56, 1},
0x29 = {57, 1},
0x2A = {58, 1},
0x2B = {59, 1},
0x2C = {60, 1},
0x2D = {61, 1},
0x2E = {62, 1},
0x2F = {63, 2},
0x30 = {65, 1},
0x31 = {66, 1},
0x32 = {67, 2},
0x33 = {69, 1},
0x34 = {70, 1},
0x35 = {71, 1},
0x36 = {72, 1},
0x37 = {73, 2},
0x38 = {75, 1},
0x39 = {76, 1},
0x3A = {77, 2},
0x3B = {79, 1},
0x3C = {80, 1},
0x3D = {81, 1},
0x3E = {82, 1},
0x3F = {83, 2},
0x40 = {85, 1},
0x41 = {86, 1},
0x42 = {87, 2},
0x43 = {89, 2},
0x44 = {91, 1},
0x45 = {92, 1},
0x46 = {93, 1},
0x47 = {94, 2},
0x48 = {96, 1},
0x49 = {97, 1},
0x4A = {98, 1},
0x4B = {99, 1},
0x4C = {100, 1},
0x4D = {101, 1},
0x4E = {102, 1},
0x4F = {103, 2},
0x50 = {105, 1},
0x51 = {106, 1},
0x52 = {107, 2},
0x53 = {109, 2},
0x54 = {111, 1},
0x55 = {112, 1},
0x56 = {113, 1},
0x57 = {114, 2},
0x58 = {116, 1},
0x59 = {117, 1},
0x5A = {118, 1},
0x5B = {119, 1},
0x5D = {120, 1},
0x5E = {121, 1},
0x5F = {122, 2},
0x60 = {124, 1},
0x61 = {125, 1},
0x62 = {126, 2},
0x63 = {128, 1},
0x64 = {129, 1},
0x65 = {130, 1},
0x66 = {131, 1},
0x67 = {132, 2},
0x68 = {134, 1},
0x69 = {135, 1},
0x6A = {136, 1},
0x6B = {137, 1},
0x6C = {138, 1},
0x6D = {139, 1},
0x6E = {140, 1},
0x6F = {141, 2},
0x70 = {143, 1},
0x71 = {144, 1},
0x72 = {145, 2},
0x73 = {147, 2},
0x74 = {149, 1},
0x75 = {150, 1},
0x76 = {151, 1},
0x77 = {152, 2},
0x78 = {154, 1},
0x79 = {155, 1},
0x7A = {156, 1},
0x7B = {157, 1},
0x7C = {158, 1},
0x7D = {159, 1},
0x7E = {160, 1},
0x7F = {161, 2},
0x80 = {163, 2},
0x81 = {165, 1},
0x82 = {166, 1},
0x83 = {167, 2},
0x84 = {169, 1},
0x85 = {170, 1},
0x86 = {171, 1},
0x87 = {172, 2},
0x88 = {174, 1},
0x89 = {175, 1},
0x8A = {176, 1},
0x8B = {177, 1},
0x8C = {178, 1},
0x8D = {179, 1},
0x8E = {180, 1},
0x8F = {181, 2},
0x90 = {183, 1},
0x91 = {184, 1},
0x92 = {185, 2},
0x93 = {187, 2},
0x94 = {189, 1},
0x95 = {190, 1},
0x96 = {191, 1},
0x97 = {192, 2},
0x98 = {194, 1},
0x99 = {195, 1},
0x9A = {196, 1},
0x9B = {197, 1},
0x9C = {198, 2},
0x9D = {200, 1},
0x9E = {201, 2},
0x9F = {203, 2},
0xA0 = {205, 1},
0xA1 = {206, 1},
0xA2 = {207, 1},
0xA3 = {208, 2},
0xA4 = {210, 1},
0xA5 = {211, 1},
0xA6 = {212, 1},
0xA7 = {213, 2},
0xA8 = {215, 1},
0xA9 = {216, 1},
0xAA = {217, 1},
0xAB = {218, 1},
0xAC = {219, 1},
0xAD = {220, 1},
0xAE = {221, 1},
0xAF = {222, 2},
0xB0 = {224, 1},
0xB1 = {225, 1},
0xB2 = {226, 2},
0xB3 = {228, 2},
0xB4 = {230, 1},
0xB5 = {231, 1},
0xB6 = {232, 1},
0xB7 = {233, 2},
0xB8 = {235, 1},
0xB9 = {236, 1},
0xBA = {237, 1},
0xBB = {238, 1},
0xBC = {239, 1},
0xBD = {240, 1},
0xBE = {241, 1},
0xBF = {242, 2},
0xC0 = {244, 1},
0xC1 = {245, 1},
0xC2 = {246, 1},
0xC3 = {247, 2},
0xC4 = {249, 1},
0xC5 = {250, 1},
0xC6 = {251, 1},
0xC7 = {252, 2},
0xC8 = {254, 1},
0xC9 = {255, 1},
0xCA = {256, 1},
0xCB = {257, 2},
0xCC = {259, 1},
0xCD = {260, 1},
0xCE = {261, 1},
0xCF = {262, 2},
0xD0 = {264, 1},
0xD1 = {265, 1},
0xD2 = {266, 2},
0xD3 = {268, 2},
0xD4 = {270, 1},
0xD5 = {271, 1},
0xD6 = {272, 1},
0xD7 = {273, 2},
0xD8 = {275, 1},
0xD9 = {276, 1},
0xDA = {277, 1},
0xDB = {278, 2},
0xDD = {280, 1},
0xDE = {281, 1},
0xDF = {282, 2},
0xE0 = {284, 1},
0xE1 = {285, 1},
0xE3 = {286, 2},
0xE4 = {288, 1},
0xE5 = {289, 1},
0xE6 = {290, 1},
0xE7 = {291, 2},
0xE8 = {293, 1},
0xE9 = {294, 1},
0xEA = {295, 1},
0xEB = {296, 1},
0xEC = {297, 1},
0xED = {298, 1},
0xEE = {299, 1},
0xEF = {300, 2},
0xF0 = {302, 1},
0xF1 = {303, 1},
0xF2 = {304, 2},
0xF3 = {306, 2},
0xF4 = {308, 1},
0xF5 = {309, 1},
0xF6 = {310, 1},
0xF7 = {311, 2},
0xF8 = {313, 1},
0xF9 = {314, 1},
0xFA = {315, 1},
0xFB = {316, 1},
0xFD = {317, 1},
0xFE = {318, 1},
0xFF = {319, 2},
}

View File

@@ -24,7 +24,7 @@ package rexcode_mos6502
// 4 HuC TST # abs
// 7 HuC block transfer
@(rodata)
ENCODING_TABLE: [Mnemonic][]Encoding = #partial {
ENCODING_TABLE:= #partial [Mnemonic][]Encoding{
.INVALID = {},
// =========================================================================

View File

@@ -173,10 +173,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")