summaryrefslogtreecommitdiff
path: root/python/examples/kaitai/code_6502.py
diff options
context:
space:
mode:
authorAndrew Lamoureux <andrew@vector35.com>2019-03-19 17:32:44 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commit24ead55316ac8497df5842caf4e1d51f2b799787 (patch)
tree3dfdfae8a076445c9d24bf6d1b40e57f36ebf94a /python/examples/kaitai/code_6502.py
parent411acbaa4a1d217e731d3df0b189445117be3b26 (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.py455
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()
+
+
+