diff --git a/src/Ophis/Opcodes.py b/src/Ophis/Opcodes.py index 5808719..888349e 100644 --- a/src/Ophis/Opcodes.py +++ b/src/Ophis/Opcodes.py @@ -12,524 +12,525 @@ # the tables in tools/opcodes. Edit those tables, not these. # Names of addressing modes -modes = ["Implied", # 0 - "Immediate", # 1 - "Immediate.W", # 2 - "Zero Page", # 3 - "Zero Page, X", # 4 - "Zero Page, Y", # 5 - "Absolute", # 6 - "Absolute, X", # 7 - "Absolute, Y", # 8 - "(Absolute)", # 9 - "(Absolute, X)", # 10 - "(Absolute), Y", # 11 - "(Zero Page)", # 12 - "(Zero Page, X)", # 13 - "(Zero Page), Y", # 14 - "(Zero Page, SP), Y", # 15 - "(Zero Page), Z", # 16 - "Relative", # 17 - "RelativeLong", # 18 - "Zero Page, Relative"] # 19 +modes = ["Implied", + "Immediate", + "ImmediateLong", + "Zero Page", + "Zero Page, X", + "Zero Page, Y", + "Absolute", + "Absolute, X", + "Absolute, Y", + "(Absolute)", + "(Absolute, X)", + "(Absolute), Y", + "(Absolute), Z", + "(Zero Page)", + "(Zero Page, X)", + "(Zero Page), Y", + "(Zero Page, SP), Y", + "(Zero Page), Z", + "Relative", + "RelativeLong", + "Zero Page, Relative"] # Lengths of the argument -lengths = [0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2] +lengths = [0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2] opcodes = { 'adc': [None, 0x69, None, 0x65, 0x75, None, 0x6D, 0x7D, - 0x79, None, None, None, None, 0x61, 0x71, None, None, None, None, None], + 0x79, None, None, None, None, None, 0x61, 0x71, None, None, None, None, None], 'adc.w': [None, None, None, None, None, None, 0x6D, 0x7D, - 0x79, None, None, None, None, None, None, None, None, None, None, None], + 0x79, None, None, None, None, None, None, None, None, None, None, None, None], 'and': [None, 0x29, None, 0x25, 0x35, None, 0x2D, 0x3D, - 0x39, None, None, None, None, 0x21, 0x31, None, None, None, None, None], + 0x39, None, None, None, None, None, 0x21, 0x31, None, None, None, None, None], 'and.w': [None, None, None, None, None, None, 0x2D, 0x3D, - 0x39, None, None, None, None, None, None, None, None, None, None, None], + 0x39, None, None, None, None, None, None, None, None, None, None, None, None], 'asl': [0x0A, None, None, 0x06, 0x16, None, 0x0E, 0x1E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'asl.w': [None, None, None, None, None, None, 0x0E, 0x1E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bcc': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x90, None, None], + None, None, None, None, None, None, None, None, None, None, 0x90, None, None], 'bcs': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xB0, None, None], + None, None, None, None, None, None, None, None, None, None, 0xB0, None, None], 'beq': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xF0, None, None], + None, None, None, None, None, None, None, None, None, None, 0xF0, None, None], 'bit': [None, None, None, 0x24, None, None, 0x2C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bit.w': [None, None, None, None, None, None, 0x2C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bmi': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x30, None, None], + None, None, None, None, None, None, None, None, None, None, 0x30, None, None], 'bne': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xD0, None, None], + None, None, None, None, None, None, None, None, None, None, 0xD0, None, None], 'bpl': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x10, None, None], + None, None, None, None, None, None, None, None, None, None, 0x10, None, None], 'brk': [0x00, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bvc': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x50, None, None], + None, None, None, None, None, None, None, None, None, None, 0x50, None, None], 'bvs': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x70, None, None], + None, None, None, None, None, None, None, None, None, None, 0x70, None, None], 'clc': [0x18, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cld': [0xD8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cli': [0x58, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'clv': [0xB8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cmp': [None, 0xC9, None, 0xC5, 0xD5, None, 0xCD, 0xDD, - 0xD9, None, None, None, None, 0xC1, 0xD1, None, None, None, None, None], + 0xD9, None, None, None, None, None, 0xC1, 0xD1, None, None, None, None, None], 'cmp.w': [None, None, None, None, None, None, 0xCD, 0xDD, - 0xD9, None, None, None, None, None, None, None, None, None, None, None], + 0xD9, None, None, None, None, None, None, None, None, None, None, None, None], 'cpx': [None, 0xE0, None, 0xE4, None, None, 0xEC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cpx.w': [None, None, None, None, None, None, 0xEC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cpy': [None, 0xC0, None, 0xC4, None, None, 0xCC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cpy.w': [None, None, None, None, None, None, 0xCC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dec': [None, None, None, 0xC6, 0xD6, None, 0xCE, 0xDE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dec.w': [None, None, None, None, None, None, 0xCE, 0xDE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dex': [0xCA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dey': [0x88, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'eor': [None, 0x49, None, 0x45, 0x55, None, 0x4D, 0x5D, - 0x59, None, None, None, None, 0x41, 0x51, None, None, None, None, None], + 0x59, None, None, None, None, None, 0x41, 0x51, None, None, None, None, None], 'eor.w': [None, None, None, None, None, None, 0x4D, 0x5D, - 0x59, None, None, None, None, None, None, None, None, None, None, None], + 0x59, None, None, None, None, None, None, None, None, None, None, None, None], 'inc': [None, None, None, 0xE6, 0xF6, None, 0xEE, 0xFE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'inc.w': [None, None, None, None, None, None, 0xEE, 0xFE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'inx': [0xE8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'iny': [0xC8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'jmp': [None, None, None, None, None, None, 0x4C, None, - None, 0x6C, None, None, None, None, None, None, None, None, None, None], + None, 0x6C, None, None, None, None, None, None, None, None, None, None, None], 'jsr': [None, None, None, None, None, None, 0x20, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'lda': [None, 0xA9, None, 0xA5, 0xB5, None, 0xAD, 0xBD, - 0xB9, None, None, None, None, 0xA1, 0xB1, None, None, None, None, None], + 0xB9, None, None, None, None, None, 0xA1, 0xB1, None, None, None, None, None], 'lda.w': [None, None, None, None, None, None, 0xAD, 0xBD, - 0xB9, None, None, None, None, None, None, None, None, None, None, None], + 0xB9, None, None, None, None, None, None, None, None, None, None, None, None], 'ldx': [None, 0xA2, None, 0xA6, None, 0xB6, 0xAE, None, - 0xBE, None, None, None, None, None, None, None, None, None, None, None], + 0xBE, None, None, None, None, None, None, None, None, None, None, None, None], 'ldx.w': [None, None, None, None, None, None, 0xAE, None, - 0xBE, None, None, None, None, None, None, None, None, None, None, None], + 0xBE, None, None, None, None, None, None, None, None, None, None, None, None], 'ldy': [None, 0xA0, None, 0xA4, 0xB4, None, 0xAC, 0xBC, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ldy.w': [None, None, None, None, None, None, 0xAC, 0xBC, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'lsr': [0x4A, None, None, 0x46, 0x56, None, 0x4E, 0x5E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'lsr.w': [None, None, None, None, None, None, 0x4E, 0x5E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'nop': [0xEA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ora': [None, 0x09, None, 0x05, 0x15, None, 0x0D, 0x1D, - 0x19, None, None, None, None, 0x01, 0x11, None, None, None, None, None], + 0x19, None, None, None, None, None, 0x01, 0x11, None, None, None, None, None], 'ora.w': [None, None, None, None, None, None, 0x0D, 0x1D, - 0x19, None, None, None, None, None, None, None, None, None, None, None], + 0x19, None, None, None, None, None, None, None, None, None, None, None, None], 'pha': [0x48, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'php': [0x08, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'pla': [0x68, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'plp': [0x28, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rol': [0x2A, None, None, 0x26, 0x36, None, 0x2E, 0x3E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rol.w': [None, None, None, None, None, None, 0x2E, 0x3E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ror': [0x6A, None, None, 0x66, 0x76, None, 0x6E, 0x7E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ror.w': [None, None, None, None, None, None, 0x6E, 0x7E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rti': [0x40, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rts': [0x60, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sbc': [None, 0xE9, None, 0xE5, 0xF5, None, 0xED, 0xFD, - 0xF9, None, None, None, None, 0xE1, 0xF1, None, None, None, None, None], + 0xF9, None, None, None, None, None, 0xE1, 0xF1, None, None, None, None, None], 'sbc.w': [None, None, None, None, None, None, 0xED, 0xFD, - 0xF9, None, None, None, None, None, None, None, None, None, None, None], + 0xF9, None, None, None, None, None, None, None, None, None, None, None, None], 'sec': [0x38, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sed': [0xF8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sei': [0x78, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sta': [None, None, None, 0x85, 0x95, None, 0x8D, 0x9D, - 0x99, None, None, None, None, 0x81, 0x91, None, None, None, None, None], + 0x99, None, None, None, None, None, 0x81, 0x91, None, None, None, None, None], 'sta.w': [None, None, None, None, None, None, 0x8D, 0x9D, - 0x99, None, None, None, None, None, None, None, None, None, None, None], + 0x99, None, None, None, None, None, None, None, None, None, None, None, None], 'stx': [None, None, None, 0x86, None, 0x96, 0x8E, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'stx.w': [None, None, None, None, None, None, 0x8E, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sty': [None, None, None, 0x84, 0x94, None, 0x8C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sty.w': [None, None, None, None, None, None, 0x8C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tax': [0xAA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tay': [0xA8, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tsx': [0xBA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'txa': [0x8A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'txs': [0x9A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tya': [0x98, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], } undocops = { 'anc': [None, 0x0B, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ane': [None, 0x8B, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'arr': [None, 0x6B, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'asr': [None, 0x4B, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dcp': [None, None, None, 0xC7, 0xD7, None, 0xCF, 0xDF, - 0xDB, None, None, None, None, 0xC3, 0xD3, None, None, None, None, None], + 0xDB, None, None, None, None, None, 0xC3, 0xD3, None, None, None, None, None], 'isb': [None, None, None, 0xE7, 0xF7, None, 0xEF, 0xFF, - 0xFB, None, None, None, None, 0xE3, 0xF3, None, None, None, None, None], + 0xFB, None, None, None, None, None, 0xE3, 0xF3, None, None, None, None, None], 'las': [None, None, None, None, None, None, None, None, - 0xBB, None, None, None, None, None, None, None, None, None, None, None], + 0xBB, None, None, None, None, None, None, None, None, None, None, None, None], 'lax': [None, None, None, 0xA7, None, 0xB7, 0xAF, None, - 0xBF, None, None, None, None, 0xA3, 0xB3, None, None, None, None, None], + 0xBF, None, None, None, None, None, 0xA3, 0xB3, None, None, None, None, None], 'lxa': [None, 0xAB, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'nop': [0xEA, None, None, 0x04, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rla': [None, None, None, 0x27, 0x37, None, 0x2F, 0x3F, - 0x3B, None, None, None, None, 0x23, 0x33, None, None, None, None, None], + 0x3B, None, None, None, None, None, 0x23, 0x33, None, None, None, None, None], 'rra': [None, None, None, 0x67, 0x77, None, 0x6F, 0x7F, - 0x7B, None, None, None, None, 0x63, 0x73, None, None, None, None, None], + 0x7B, None, None, None, None, None, 0x63, 0x73, None, None, None, None, None], 'sax': [None, None, None, 0x87, None, 0x97, 0x8F, None, - None, None, None, None, None, 0x83, None, None, None, None, None, None], + None, None, None, None, None, None, 0x83, None, None, None, None, None, None], 'sbx': [None, 0xCB, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sha': [None, None, None, None, None, None, None, None, - 0x9F, None, None, None, None, None, 0x93, None, None, None, None, None], + 0x9F, None, None, None, None, None, None, 0x93, None, None, None, None, None], 'shs': [None, None, None, None, None, None, None, None, - 0x9B, None, None, None, None, None, None, None, None, None, None, None], + 0x9B, None, None, None, None, None, None, None, None, None, None, None, None], 'shx': [None, None, None, None, None, None, None, None, - 0x9E, None, None, None, None, None, None, None, None, None, None, None], + 0x9E, None, None, None, None, None, None, None, None, None, None, None, None], 'slo': [None, None, None, 0x07, 0x17, None, 0x0F, 0x1F, - 0x1B, None, None, None, None, 0x03, 0x13, None, None, None, None, None], + 0x1B, None, None, None, None, None, 0x03, 0x13, None, None, None, None, None], 'sre': [None, None, None, 0x47, 0x57, None, 0x4F, 0x5F, - 0x5B, None, None, None, None, 0x43, 0x53, None, None, None, None, None], + 0x5B, None, None, None, None, None, 0x43, 0x53, None, None, None, None, None], } c02extensions = { 'adc': [None, 0x69, None, 0x65, 0x75, None, 0x6D, 0x7D, - 0x79, None, None, None, 0x72, 0x61, 0x71, None, None, None, None, None], + 0x79, None, None, None, None, 0x72, 0x61, 0x71, None, None, None, None, None], 'and': [None, 0x29, None, 0x25, 0x35, None, 0x2D, 0x3D, - 0x39, None, None, None, 0x32, 0x21, 0x31, None, None, None, None, None], + 0x39, None, None, None, None, 0x32, 0x21, 0x31, None, None, None, None, None], 'bbr0': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x0F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x0F], 'bbr1': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x1F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x1F], 'bbr2': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x2F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x2F], 'bbr3': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x3F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x3F], 'bbr4': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x4F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x4F], 'bbr5': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x5F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x5F], 'bbr6': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x6F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x6F], 'bbr7': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x7F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x7F], 'bbs0': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x8F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x8F], 'bbs1': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x9F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x9F], 'bbs2': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xAF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xAF], 'bbs3': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xBF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xBF], 'bbs4': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xCF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xCF], 'bbs5': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xDF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xDF], 'bbs6': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xEF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xEF], 'bbs7': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xFF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xFF], 'bit': [None, 0x89, None, 0x24, 0x34, None, 0x2C, 0x3C, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bra': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x80, None, None], + None, None, None, None, None, None, None, None, None, None, 0x80, None, None], 'cmp': [None, 0xC9, None, 0xC5, 0xD5, None, 0xCD, 0xDD, - 0xD9, None, None, None, 0xD2, 0xC1, 0xD1, None, None, None, None, None], + 0xD9, None, None, None, None, 0xD2, 0xC1, 0xD1, None, None, None, None, None], 'dea': [0x3A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dec': [0x3A, None, None, 0xC6, 0xD6, None, 0xCE, 0xDE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'eor': [None, 0x49, None, 0x45, 0x55, None, 0x4D, 0x5D, - 0x59, None, None, None, 0x52, 0x41, 0x51, None, None, None, None, None], + 0x59, None, None, None, None, 0x52, 0x41, 0x51, None, None, None, None, None], 'ina': [0x1A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'inc': [0x1A, None, None, 0xE6, 0xF6, None, 0xEE, 0xFE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'jmp': [None, None, None, None, None, None, 0x4C, None, - None, 0x6C, 0x7C, None, None, None, None, None, None, None, None, None], + None, 0x6C, 0x7C, None, None, None, None, None, None, None, None, None, None], 'lda': [None, 0xA9, None, 0xA5, 0xB5, None, 0xAD, 0xBD, - 0xB9, None, None, None, 0xB2, 0xA1, 0xB1, None, None, None, None, None], + 0xB9, None, None, None, None, 0xB2, 0xA1, 0xB1, None, None, None, None, None], 'ora': [None, 0x09, None, 0x05, 0x15, None, 0x0D, 0x1D, - 0x19, None, None, None, 0x12, 0x01, 0x11, None, None, None, None, None], + 0x19, None, None, None, None, 0x12, 0x01, 0x11, None, None, None, None, None], 'phx': [0xDA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'phy': [0x5A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'plx': [0xFA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ply': [0x7A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb0': [None, None, None, 0x07, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb1': [None, None, None, 0x17, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb2': [None, None, None, 0x27, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb3': [None, None, None, 0x37, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb4': [None, None, None, 0x47, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb5': [None, None, None, 0x57, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb6': [None, None, None, 0x67, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb7': [None, None, None, 0x77, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sbc': [None, 0xE9, None, 0xE5, 0xF5, None, 0xED, 0xFD, - 0xF9, None, None, None, 0xF2, 0xE1, 0xF1, None, None, None, None, None], + 0xF9, None, None, None, None, 0xF2, 0xE1, 0xF1, None, None, None, None, None], 'smb0': [None, None, None, 0x87, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb1': [None, None, None, 0x97, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb2': [None, None, None, 0xA7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb3': [None, None, None, 0xB7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb4': [None, None, None, 0xC7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb5': [None, None, None, 0xD7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb6': [None, None, None, 0xE7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb7': [None, None, None, 0xF7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sta': [None, None, None, 0x85, 0x95, None, 0x8D, 0x9D, - 0x99, None, None, None, 0x92, 0x81, 0x91, None, None, None, None, None], + 0x99, None, None, None, None, 0x92, 0x81, 0x91, None, None, None, None, None], 'stp': [0xDB, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'stz': [None, None, None, 0x64, 0x74, None, 0x9C, 0x9E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'stz.w': [None, None, None, None, None, None, 0x9C, 0x9E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'trb': [None, None, None, 0x14, None, None, 0x1C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'trb.w': [None, None, None, None, None, None, 0x1C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tsb': [None, None, None, 0x04, None, None, 0x0C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tsb.w': [None, None, None, None, None, None, 0x0C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'wai': [0xCB, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], } csg4502extensions = { 'adc': [None, 0x69, None, 0x65, 0x75, None, 0x6D, 0x7D, - 0x79, None, None, None, None, 0x61, 0x71, None, 0x72, None, None, None], + 0x79, None, None, None, None, None, 0x61, 0x71, None, 0x72, None, None, None], 'and': [None, 0x29, None, 0x25, 0x35, None, 0x2D, 0x3D, - 0x39, None, None, None, None, 0x21, 0x31, None, 0x32, None, None, None], + 0x39, None, None, None, None, None, 0x21, 0x31, None, 0x32, None, None, None], 'asr': [0x43, None, None, None, 0x54, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'asw': [None, None, None, None, None, None, 0xCB, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bbr0': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x0F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x0F], 'bbr1': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x1F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x1F], 'bbr2': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x2F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x2F], 'bbr3': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x3F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x3F], 'bbr4': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x4F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x4F], 'bbr5': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x5F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x5F], 'bbr6': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x6F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x6F], 'bbr7': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x7F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x7F], 'bbs0': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x8F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x8F], 'bbs1': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0x9F], + None, None, None, None, None, None, None, None, None, None, None, None, 0x9F], 'bbs2': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xAF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xAF], 'bbs3': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xBF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xBF], 'bbs4': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xCF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xCF], 'bbs5': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xDF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xDF], 'bbs6': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xEF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xEF], 'bbs7': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, 0xFF], + None, None, None, None, None, None, None, None, None, None, None, None, 0xFF], 'bcc': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x90, 0x93, None], + None, None, None, None, None, None, None, None, None, None, 0x90, 0x93, None], 'bcs': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xB0, 0xB3, None], + None, None, None, None, None, None, None, None, None, None, 0xB0, 0xB3, None], 'beq': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xF0, 0xF3, None], + None, None, None, None, None, None, None, None, None, None, 0xF0, 0xF3, None], 'bit': [None, 0x89, None, 0x24, 0x34, None, 0x2C, 0x3C, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'bmi': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x30, 0x33, None], + None, None, None, None, None, None, None, None, None, None, 0x30, 0x33, None], 'bne': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0xD0, 0xD3, None], + None, None, None, None, None, None, None, None, None, None, 0xD0, 0xD3, None], 'bpl': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x10, 0x13, None], + None, None, None, None, None, None, None, None, None, None, 0x10, 0x13, None], 'bra': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x80, 0x83, None], + None, None, None, None, None, None, None, None, None, None, 0x80, 0x83, None], 'bsr': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, 0x63, None], + None, None, None, None, None, None, None, None, None, None, None, 0x63, None], 'bvc': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x50, 0x53, None], + None, None, None, None, None, None, None, None, None, None, 0x50, 0x53, None], 'bvs': [None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, 0x70, 0x73, None], + None, None, None, None, None, None, None, None, None, None, 0x70, 0x73, None], 'cle': [0x02, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'cmp': [None, 0xC9, None, 0xC5, 0xD5, None, 0xCD, 0xDD, - 0xD9, None, None, None, None, 0xC1, 0xD1, None, 0xD2, None, None, None], + 0xD9, None, None, None, None, None, 0xC1, 0xD1, None, 0xD2, None, None, None], 'cpz': [None, 0xC2, None, 0xD4, None, None, 0xDC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dea': [0x3A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dec': [0x3A, None, None, 0xC6, 0xD6, None, 0xCE, 0xDE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dew': [None, None, None, None, None, None, 0xC3, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'dez': [0x3B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'eom': [0xEA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'eor': [None, 0x49, None, 0x45, 0x55, None, 0x4D, 0x5D, - 0x59, None, None, None, None, 0x41, 0x51, None, 0x52, None, None, None], + 0x59, None, None, None, None, None, 0x41, 0x51, None, 0x52, None, None, None], 'inc': [0x1A, None, None, 0xE6, 0xF6, None, 0xEE, 0xFE, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'inw': [None, None, None, None, None, None, 0xE3, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'inz': [0x1B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'jmp': [None, None, None, None, None, None, 0x4C, None, - None, 0x6C, 0x7C, None, None, None, None, None, None, None, None, None], + None, 0x6C, 0x7C, None, None, None, None, None, None, None, None, None, None], 'jsr': [None, None, None, None, None, None, 0x20, None, - None, 0x22, 0x23, None, None, None, None, None, None, None, None, None], + None, 0x22, 0x23, None, None, None, None, None, None, None, None, None, None], 'lda': [None, 0xA9, None, 0xA5, 0xB5, None, 0xAD, 0xBD, - 0xB9, None, None, None, None, 0xA1, 0xB1, 0xE2, 0xB2, None, None, None], + 0xB9, None, None, None, None, None, 0xA1, 0xB1, 0xE2, 0xB2, None, None, None], 'ldz': [None, 0xA3, None, None, None, None, 0xAB, 0xBB, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'map': [0x5C, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'neg': [0x42, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ora': [None, 0x09, None, 0x05, 0x15, None, 0x0D, 0x1D, - 0x19, None, None, None, None, 0x01, 0x11, None, 0x12, None, None, None], + 0x19, None, None, None, None, None, 0x01, 0x11, None, 0x12, None, None, None], 'phw': [None, None, 0xF4, None, None, None, 0xFC, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'phx': [0xDA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'phy': [0x5A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'phz': [0xDB, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'plx': [0xFA, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'ply': [0x7A, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'plz': [0xFB, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb0': [None, None, None, 0x07, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb1': [None, None, None, 0x17, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb2': [None, None, None, 0x27, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb3': [None, None, None, 0x37, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb4': [None, None, None, 0x47, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb5': [None, None, None, 0x57, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb6': [None, None, None, 0x67, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rmb7': [None, None, None, 0x77, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'row': [None, None, None, None, None, None, 0xEB, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'rts': [0x60, 0x62, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sbc': [None, 0xE9, None, 0xE5, 0xF5, None, 0xED, 0xFD, - 0xF9, None, None, None, 0xF2, 0xE1, 0xF1, None, None, None, None, None], + 0xF9, None, None, None, None, 0xF2, 0xE1, 0xF1, None, None, None, None, None], 'see': [0x03, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb0': [None, None, None, 0x87, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb1': [None, None, None, 0x97, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb2': [None, None, None, 0xA7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb3': [None, None, None, 0xB7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb4': [None, None, None, 0xC7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb5': [None, None, None, 0xD7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb6': [None, None, None, 0xE7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'smb7': [None, None, None, 0xF7, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'sta': [None, None, None, 0x85, 0x95, None, 0x8D, 0x9D, - 0x99, None, None, None, None, 0x81, 0x91, 0x82, 0x92, None, None, None], + 0x99, None, None, None, None, None, 0x81, 0x91, 0x82, 0x92, None, None, None], 'stx': [None, None, None, 0x86, None, 0x96, 0x8E, None, - 0x9B, None, None, None, None, None, None, None, None, None, None, None], + 0x9B, None, None, None, None, None, None, None, None, None, None, None, None], 'sty': [None, None, None, 0x84, 0x94, None, 0x8C, 0x8B, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'stz': [None, None, None, 0x64, 0x74, None, 0x9C, 0x9E, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tab': [0x5B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'taz': [0x4B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tba': [0x7B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'trb': [None, None, None, 0x14, None, None, 0x1C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tsb': [None, None, None, 0x04, None, None, 0x0C, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tsy': [0x0B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tys': [0x2B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], 'tza': [0x6B, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, None, None, None, None], + None, None, None, None, None, None, None, None, None, None, None, None, None], } diff --git a/src/Ophis/Passes.py b/src/Ophis/Passes.py index 4d2b994..057af26 100644 --- a/src/Ophis/Passes.py +++ b/src/Ophis/Passes.py @@ -323,6 +323,9 @@ class PCTracker(Pass): def visitImmediate(self, node, env): env.incPC(2) + def visitImmediateLong(self, node, env): + env.incPC(2) + def visitIndirectX(self, node, env): env.incPC(2) @@ -374,6 +377,9 @@ class PCTracker(Pass): def visitAbsIndY(self, node, env): env.incPC(3) + def visitAbsIndZ(self, node, env): + env.incPC(3) + def visitMemory(self, node, env): env.incPC(3) @@ -711,6 +717,9 @@ class NormalizeModes(Pass): def visitPointerY(self, node, env): node.nodetype = "AbsIndY" + def visitPointerZ(self, node, env): + node.nodetype = "AbsIndZ" + def visitUnknown(self, node, env): pass @@ -852,6 +861,7 @@ class Assembler(Pass): "($%04X)", "($%04X, X)", "($%04X), Y", + "($%04X), Z", "($%02X)", "($%02X, X)", "($%02X), Y", @@ -918,6 +928,9 @@ class Assembler(Pass): def visitImmediate(self, node, env): self.assemble(node, Ops.modes.index("Immediate"), env) + def visitImmediateLong(self, node, env): + self.assemble(node, Ops.modes.index("ImmediateLong"), env) + def visitZeroPage(self, node, env): self.assemble(node, Ops.modes.index("Zero Page"), env) @@ -945,6 +958,9 @@ class Assembler(Pass): def visitAbsIndY(self, node, env): self.assemble(node, Ops.modes.index("(Absolute), Y"), env) + def visitAbsIndZ(self, node, env): + self.assemble(node, Ops.modes.index("(Absolute), Z"), env) + def visitZPIndirect(self, node, env): self.assemble(node, Ops.modes.index("(Zero Page)"), env) diff --git a/src/tools/opcodes/gensets.py b/src/tools/opcodes/gensets.py index 6ca3450..7d35e6e 100755 --- a/src/tools/opcodes/gensets.py +++ b/src/tools/opcodes/gensets.py @@ -17,53 +17,55 @@ prologue = '"""' + """Opcodes file. # the tables in tools/opcodes. Edit those tables, not these. # Names of addressing modes -modes = ["Implied", # 0 - "Immediate", # 1 - "Immediate.W", # 2 - "Zero Page", # 3 - "Zero Page, X", # 4 - "Zero Page, Y", # 5 - "Absolute", # 6 - "Absolute, X", # 7 - "Absolute, Y", # 8 - "(Absolute)", # 9 - "(Absolute, X)", # 10 - "(Absolute), Y", # 11 - "(Zero Page)", # 12 - "(Zero Page, X)", # 13 - "(Zero Page), Y", # 14 - "(Zero Page, SP), Y", # 15 - "(Zero Page), Z", # 16 - "Relative", # 17 - "RelativeLong", # 18 - "Zero Page, Relative"] # 19 +modes = ["Implied", + "Immediate", + "ImmediateLong", + "Zero Page", + "Zero Page, X", + "Zero Page, Y", + "Absolute", + "Absolute, X", + "Absolute, Y", + "(Absolute)", + "(Absolute, X)", + "(Absolute), Y", + "(Absolute), Z", + "(Zero Page)", + "(Zero Page, X)", + "(Zero Page), Y", + "(Zero Page, SP), Y", + "(Zero Page), Z", + "Relative", + "RelativeLong", + "Zero Page, Relative"] # Lengths of the argument -lengths = [0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2] +lengths = [0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2] """ # These values should match the ones in the prologue string. -modes = ["Implied", # 0 - "Immediate", # 1 - "Immediate.W", # 2 - "Zero Page", # 3 - "Zero Page, X", # 4 - "Zero Page, Y", # 5 - "Absolute", # 6 - "Absolute, X", # 7 - "Absolute, Y", # 8 - "(Absolute)", # 9 - "(Absolute, X)", # 10 - "(Absolute), Y", # 11 - "(Zero Page)", # 12 - "(Zero Page, X)", # 13 - "(Zero Page), Y", # 14 - "(Zero Page, SP), Y", # 15 - "(Zero Page), Z", # 16 - "Relative", # 17 - "RelativeLong", # 18 - "Zero Page, Relative"] # 19 +modes = ["Implied", + "Immediate", + "Immediate.W", + "Zero Page", + "Zero Page, X", + "Zero Page, Y", + "Absolute", + "Absolute, X", + "Absolute, Y", + "(Absolute)", + "(Absolute, X)", + "(Absolute), Y", + "(Absolute), Z", + "(Zero Page)", + "(Zero Page, X)", + "(Zero Page), Y", + "(Zero Page, SP), Y", + "(Zero Page), Z", + "Relative", + "RelativeLong", + "Zero Page, Relative"] flatmodes = [x.lower() for x in modes] diff --git a/tests/test4502.oph b/tests/test4502.oph new file mode 100644 index 0000000..780f83f --- /dev/null +++ b/tests/test4502.oph @@ -0,0 +1,106 @@ +; Test file for 4502 extended opcode compliance +; This odd little source file uses every addressing mode +; of every opcode, and uses the opcode itself as the argument +; to each instruction that takes one. The resulting binary's +; bytes are thus in strictly increasing numerical order. + +; Some opcodes have multiple mnemonics; we provide both. + +; This file also doesn't include the 4502's opcodes that +; are also available in stock 6502s - see testbase.oph for +; those. However, it does include those extensions share +; with the 65C02. + CLE ; 02: CLE - Implied + SEE ; 03: SEE - Implied + TSB $04 ; 04: TSB - Zero Page + RMB0 $07 ; 07: RMB0 - Zero Page + TSY ; 0B: TSY - Implied + TSB $0C0C ; 0C: TSB - Absolute + BBR0 $0F, ^+$12 ; 0F: BBR0 - Zero Page, Relative + ORA ($12), Z ; 12: ORA - (Zero Page), Z + TRB $14 ; 14: TRB - Zero Page + RMB1 $17 ; 17: RMB1 - Zero Page + INC ; 1A: INC - Implied + INZ ; 1B: INZ - Implied + TRB $1C1C ; 1C: TRB - Absolute + BBR1 $1F, ^+$22 ; 1F: BBR1 - Zero Page, Relative + JSR ($2222) ; 22: JSR - (Absolute) + JSR ($2323,X) ; 23: JSR - (Absolute, X) + RMB2 $27 ; 27: RMB2 - Zero Page + TYS ; 2B: TYS - Implied + BBR2 $2F, ^+$32 ; 2F: BBR2 - Zero Page, Relative + AND ($32), Z ; 32: AND - (Zero Page), Z + BIT $34, X ; 34: BIT - Zero Page, X + RMB3 $37 ; 37: RMB3 - Zero Page + DEA ; 3A: DEA - Implied + DEC ; 3A: DEC - Implied + DEZ ; 3B: DEZ - Implied + BIT $3C3C,X ; 3C: BIT - Absolute, X + BBR3 $3F, ^+$42 ; 3F: BBR3 - Zero Page, Relative + NEG ; 42: NEG - Implied + ASR ; 43: ASR - Implied + RMB4 $47 ; 47: RMB4 - Zero Page + TAZ ; 4B: TAZ - Implied + BBR4 $4F, ^+$52 ; 4F: BBR4 - Zero Page, Relative + EOR ($52),Z ; 52: EOR - (Zero Page), Z + RMB5 $57 ; 57: RMB5 - Zero Page + PHY ; 5A: PHY - Implied + TAB ; 5B: TAB - Implied + MAP ; 5C: MAP - Implied + BBR5 $5F, ^+$62 ; 5F: BBR5 - Zero Page, Relative + RTS #$62 ; 62: RTS - Immediate + STZ $64 ; 64: STZ - Zero Page + RMB6 $67 ; 67: RMB6 - Zero Page + TZA ; 6B: TZA - Implied + JMP ($6C6C) ; 6C: JMP - (Absolute) + BBR6 $6F, ^+$72 ; 6F: BBR6 - Zero Page, Relative + ADC ($72), Z ; 72: ADC - (Zero Page), Z + STZ $74, X ; 74: STZ - Zero Page, X + RMB7 $77 ; 77: RMB7 - Zero Page + PLY ; 7A: PLY - Implied + TBA ; 7B: TBA - Implied + JMP ($7C7C, X) ; 7C: JMP - (Absolute, X) + BBR7 $7F, ^+$82 ; 7F: BBR7 - Zero Page, Relative + BRA ^-$7E ; 80: BRA - Relative + SMB0 $87 ; 87: SMB0 - Zero Page + BIT #$89 ; 89: BIT - Immediate + STY $8B8B,X ; 8B: STY - Absolute, X + BBS0 $8F, ^-$6E ; 8F: BBS0 - Zero Page, Relative + STA ($92),Z ; 92: STA - (Zero Page), Z + SMB1 $97 ; 97: SMB1 - Zero Page + STX $9B9B,Y ; 9B: STX - Absolute, Y + STZ $9C9C ; 9C: STZ - Absolute + STZ $9E9E, X ; 9E: STZ - Absolute, X + BBS1 $9F, ^-$5E ; 9F: BBS1 - Zero Page, Relative + LDZ #$A3 ; A3: LDZ - Immediate + SMB2 $A7 ; A7: SMB2 - Zero Page + LDZ $ABAB ; AB: LDZ - Absolute + BBS2 $AF, ^-$4E ; AF: BBS2 - Zero Page, Relative + LDA ($B2),Z ; B2: LDA - (Zero Page), Z + SMB3 $B7 ; B7: SMB3 - Zero Page + LDZ $BBBB,X ; BB: LDZ - Absolute, X + LDY $BCBC,X ; BC: LDY - Absolute, X + BBS3 $BF, ^-$3E ; BF: BBS3 - Zero Page, Relative + CPZ #$C2 ; C2: CPZ - Immediate + DEW $C3C3 ; C3: DEW - Absolute + SMB4 $C7 ; C7: SMB4 - Zero Page + ASW $CBCB ; CB: ASW - Absolute + BBS4 $CF, ^-$2E ; CF: BBS4 - Zero Page, Relative + CMP ($D2),Z ; D2: CMP - (Zero Page), Z + SMB5 $D7 ; D7: SMB5 - Zero Page + PHX ; DA: PHX - Implied + PHZ ; DB: PHZ - Implied + BBS5 $DF, ^-$1E ; DF: BBS5 - Zero Page, Relative + LDA ($E2,SP),Y ; E2: LDA - (Zero Page, SP), Y + INW $E3E3 ; E3: INW - Absolute + PHW #$E4E4 ; E4: PHW - ImmediateLong + SMB6 $E7 ; E7: SMB6 - Zero Page + EOM ; EA: EOM - Implied + ROW $EBEB ; EB: ROW - Absolute + BBS6 $EF, ^-$0E ; EF: BBS6 - Zero Page, Relative + SBC ($F2), Z ; F2: SBC - (Zero Page), Z + SMB7 $F7 ; F7: SMB7 - Zero Page + PLX ; FA: PLX - Implied + PLZ ; FB: PLZ - Implied + PHW $FCFC ; FC: PHW - Absolute + BBS7 $FF, ^+$02 ; FF: BBS7 - Zero Page, Relative diff --git a/tests/test_ophis.py b/tests/test_ophis.py index c402178..be053b8 100755 --- a/tests/test_ophis.py +++ b/tests/test_ophis.py @@ -82,6 +82,7 @@ def test_basic(): test_file('Undocumented instructions', 'test6510.oph', 'test6510.bin', ['-u']) test_file('65c02 extensions', 'test65c02.oph', 'test65c02.bin', ['-c']) + test_file('4502 extensions', 'test4502.oph', 'test4502.bin', ['-4']) test_file('Wide instructions', 'testwide.oph', 'testwide.bin', ['-c']) test_file('Branch restrictions (6502)', 'longbranch.oph', None, ['--no-branch-extend'])