diff options
| author | Andrew Lamoureux <andrew@vector35.com> | 2019-03-19 17:32:44 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | 24ead55316ac8497df5842caf4e1d51f2b799787 (patch) | |
| tree | 3dfdfae8a076445c9d24bf6d1b40e57f36ebf94a /python/examples/kaitai/code_6502.py | |
| parent | 411acbaa4a1d217e731d3df0b189445117be3b26 (diff) | |
kaitai: adjustments and rearrangements for python2/3 compat
Diffstat (limited to 'python/examples/kaitai/code_6502.py')
| -rw-r--r-- | python/examples/kaitai/code_6502.py | 455 |
1 files changed, 455 insertions, 0 deletions
diff --git a/python/examples/kaitai/code_6502.py b/python/examples/kaitai/code_6502.py new file mode 100644 index 00000000..80f29150 --- /dev/null +++ b/python/examples/kaitai/code_6502.py @@ -0,0 +1,455 @@ +# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild + +from pkg_resources import parse_version +from .kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +from enum import Enum +import collections + + +if parse_version(ks_version) < parse_version('0.7'): + raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version)) + +class Code6502(KaitaiStruct): + """This spec can be used to disassemble raw stream of 6502 CPU machine + code into individual operations. Each operation includes an opcode + and, optionally, an argument. Register arguments are part of the + `opcode` enum. + """ + + class Opcode(Enum): + brk_impl = 0 + ora_x_ind = 1 + ora_zpg = 5 + asl_zpg = 6 + php_impl = 8 + ora_imm = 9 + asl_a = 10 + ora_abs = 13 + asl_abs = 14 + bpl_rel = 16 + ora_ind_y = 17 + ora_zpg_x = 21 + asl_zpg_x = 22 + clc_impl = 24 + ora_abs_y = 25 + ora_abs_x = 29 + asl_abs_x = 30 + jsr_abs = 32 + and_x_ind = 33 + bit_zpg = 36 + and_zpg = 37 + rol_zpg = 38 + plp_impl = 40 + and_imm = 41 + rol_a = 42 + bit_abs = 44 + and_abs = 45 + rol_abs = 46 + bmi_rel = 48 + and_ind_y = 49 + and_zpg_x = 53 + rol_zpg_x = 54 + sec_impl = 56 + and_abs_y = 57 + and_abs_x = 61 + rol_abs_x = 62 + rti_impl = 64 + eor_x_ind = 65 + eor_zpg = 69 + lsr_zpg = 70 + pha_impl = 72 + eor_imm = 73 + lsr_a = 74 + jmp_abs = 76 + eor_abs = 77 + lsr_abs = 78 + bvc_rel = 80 + eor_ind_y = 81 + eor_zpg_x = 85 + lsr_zpg_x = 86 + cli_impl = 88 + eor_abs_y = 89 + eor_abs_x = 93 + lsr_abs_x = 94 + rts_impl = 96 + adc_x_ind = 97 + adc_zpg = 101 + ror_zpg = 102 + pla_impl = 104 + adc_imm = 105 + ror_a = 106 + jmp_ind = 108 + adc_abs = 109 + ror_abs = 110 + bvs_rel = 112 + adc_ind_y = 113 + adc_zpg_x = 117 + ror_zpg_x = 118 + sei_impl = 120 + adc_abs_y = 121 + adc_abs_x = 125 + ror_abs_x = 126 + sta_x_ind = 129 + sty_zpg = 132 + sta_zpg = 133 + stx_zpg = 134 + dey_impl = 136 + txa_impl = 138 + sty_abs = 140 + sta_abs = 141 + stx_abs = 142 + bcc_rel = 144 + sta_ind_y = 145 + sty_zpg_x = 148 + sta_zpg_x = 149 + stx_zpg_y = 150 + tya_impl = 152 + sta_abs_y = 153 + txs_impl = 154 + sta_abs_x = 157 + ldy_imm = 160 + lda_x_ind = 161 + ldx_imm = 162 + ldy_zpg = 164 + lda_zpg = 165 + ldx_zpg = 166 + tay_impl = 168 + lda_imm = 169 + tax_impl = 170 + ldy_abs = 172 + lda_abs = 173 + ldx_abs = 174 + bcs_rel = 176 + lda_ind_y = 177 + ldy_zpg_x = 180 + lda_zpg_x = 181 + ldx_zpg_y = 182 + clv_impl = 184 + lda_abs_y = 185 + tsx_impl = 186 + ldy_abs_x = 188 + lda_abs_x = 189 + ldx_abs_y = 190 + cpy_imm = 192 + cmp_x_ind = 193 + cpy_zpg = 196 + cmp_zpg = 197 + dec_zpg = 198 + iny_impl = 200 + cmp_imm = 201 + dex_impl = 202 + cpy_abs = 204 + cmp_abs = 205 + dec_abs = 206 + bne_rel = 208 + cmp_ind_y = 209 + cmp_zpg_x = 213 + dec_zpg_x = 214 + cld_impl = 216 + cmp_abs_y = 217 + cmp_abs_x = 221 + dec_abs_x = 222 + cpx_imm = 224 + sbc_x_ind = 225 + cpx_zpg = 228 + sbc_zpg = 229 + inc_zpg = 230 + inx_impl = 232 + sbc_imm = 233 + nop_impl = 234 + cpx_abs = 236 + sbc_abs = 237 + inc_abs = 238 + beq_rel = 240 + sbc_ind_y = 241 + sbc_zpg_x = 245 + inc_zpg_x = 246 + sed_impl = 248 + sbc_abs_y = 249 + sbc_abs_x = 253 + inc_abs_x = 254 + SEQ_FIELDS = ["operations"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['operations']['start'] = self._io.pos() + self.operations = [] + i = 0 + while not self._io.is_eof(): + if not 'arr' in self._debug['operations']: + self._debug['operations']['arr'] = [] + self._debug['operations']['arr'].append({'start': self._io.pos()}) + _t_operations = self._root.Operation(self._io, self, self._root) + _t_operations._read() + self.operations.append(_t_operations) + self._debug['operations']['arr'][len(self.operations) - 1]['end'] = self._io.pos() + i += 1 + + self._debug['operations']['end'] = self._io.pos() + + class Operation(KaitaiStruct): + SEQ_FIELDS = ["code", "args"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['code']['start'] = self._io.pos() + self.code = KaitaiStream.resolve_enum(self._root.Opcode, self._io.read_u1()) + self._debug['code']['end'] = self._io.pos() + self._debug['args']['start'] = self._io.pos() + _on = self.code + if _on == self._root.Opcode.bcc_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.ora_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.lda_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cpx_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sta_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sta_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.bcs_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.ldy_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.lsr_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.and_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.adc_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sta_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.bne_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.lda_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.adc_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.lsr_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.adc_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sta_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.cpx_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.jmp_ind: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.adc_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.eor_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.eor_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sta_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cpy_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldx_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.adc_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.bpl_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.ora_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ror_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.adc_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.eor_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.lda_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.bit_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.rol_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sty_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.jsr_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.eor_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.eor_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lda_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lda_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.bmi_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.sty_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.adc_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.rol_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.stx_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.asl_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lsr_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ora_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.adc_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldy_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.cmp_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lda_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.bvs_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.lda_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.inc_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.asl_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.and_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldx_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.and_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cpx_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.dec_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ror_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ldx_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.dec_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ror_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.inc_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.and_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.asl_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.eor_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ora_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldy_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sbc_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.asl_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.rol_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lsr_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.stx_zpg_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ora_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.eor_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.bit_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldx_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ldy_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.jmp_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.beq_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.dec_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.and_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.and_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.eor_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.cmp_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sbc_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.stx_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sty_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.cpy_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.dec_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.ror_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sta_abs_y: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.inc_abs_x: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.lda_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cpy_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ldx_zpg_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.sbc_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ora_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.rol_zpg_x: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ora_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.sta_ind_y: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.and_abs: + self.args = self._io.read_u2le() + elif _on == self._root.Opcode.and_imm: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.cmp_x_ind: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.ldy_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.inc_zpg: + self.args = self._io.read_u1() + elif _on == self._root.Opcode.bvc_rel: + self.args = self._io.read_s1() + elif _on == self._root.Opcode.ora_zpg: + self.args = self._io.read_u1() + self._debug['args']['end'] = self._io.pos() + + + |
