From 37a7e59c06d3a53424223da7b7b0cef5537c4cb9 Mon Sep 17 00:00:00 2001 From: Nik Date: Thu, 26 Dec 2024 20:08:42 +0100 Subject: [PATCH] disassemblers: Added Intel 8051 architecture --- README.md | 6 + disassemblers/8051.json | 730 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 736 insertions(+) create mode 100644 disassemblers/8051.json diff --git a/README.md b/README.md index 0bb7d9b..1367144 100644 --- a/README.md +++ b/README.md @@ -261,3 +261,9 @@ Everything will immediately show up in ImHex's Content Store and gets bundled wi | Catppuccin Frappe | [`themes/catppuccin-frappe.json`](themes/catppuccin-frappe.json) | Catppuccin Frappe Flavor (Dark Theme) | | Catppuccin Macchiato | [`themes/catppuccin-macchiato.json`](themes/catppuccin-macchiato.json) | Catppuccin Macchiato Flavor (Dark Theme) | | Catppuccin Mocha | [`themes/catppuccin-mocha.json`](themes/catppuccin-mocha.json) | Catppuccin Mocha Flavor (Dark Theme) | + +### Disassemblers + +| Name | Path | Description | +|------|------|-------------| +| 8051 | [`disassemblers/8051.json`](disassemblers/8051.json) | Intel 8051 Architecture | \ No newline at end of file diff --git a/disassemblers/8051.json b/disassemblers/8051.json new file mode 100644 index 0000000..522403c --- /dev/null +++ b/disassemblers/8051.json @@ -0,0 +1,730 @@ +{ + "name": "Intel 8051", + "includes": [], + "options": [], + "opcodes": [ + { + "mask": "0000'0000", + "mnemonic": "NOP", + "format": "" + }, + { + "mask": "0000'0010 AAAA'AAAA AAAA'AAAA", + "mnemonic": "LJMP", + "format": "#0x{A:04X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "A" + } + } + ] + }, + { + "mask": "1000'0000 AAAA'AAAA", + "mnemonic": "SJMP", + "format": "#0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "A" + } + } + ] + }, + { + "mask": "0111'0011", + "mnemonic": "JMP", + "format": "@A+DPTR" + }, + { + "mask": "0100'0000 AAAA'AAAA", + "mnemonic": "JC", + "format": "PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 2 + A" + } + } + ] + }, + { + "mask": "0011'0000 BBBB'BBBB AAAA'AAAA", + "mnemonic": "JNB", + "format": "BIT[0x{B:02X}], PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "0001'0000 BBBB'BBBB AAAA'AAAA", + "mnemonic": "JBC", + "format": "BIT[0x{B:02X}], PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "0010'0000 AAAA'AAAA RRRR'RRRR", + "mnemonic": "JB", + "format": "BIT[0x{A:02X}], PC + 0x{R:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "0001'0010 AAAA'AAAA AAAA'AAAA", + "mnemonic": "LCALL", + "format": "#0x{A:04X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "A" + } + } + ] + }, + { + "mask": "PPP1'0001 AAAA'AAAA", + "mnemonic": "ACALL", + "format": "page{P} #0x{A:04X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "P * 256 + A" + } + } + ] + }, + { + "mask": "PPP0'0001 AAAA'AAAA", + "mnemonic": "AJMP", + "format": "page{P} #0x{A:04X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "P * 256 + A" + } + } + ] + }, + { + "mask": "0000'0011", + "mnemonic": "RR", + "format": "A" + }, + { + "mask": "0001'0011", + "mnemonic": "RRC", + "format": "A" + }, + { + "mask": "0010'0011", + "mnemonic": "RL", + "format": "A" + }, + { + "mask": "0011'0011", + "mnemonic": "RLC", + "format": "A" + }, + { + "mask": "0000'0100", + "mnemonic": "INC", + "format": "A" + }, + { + "mask": "0000'0101 AAAA'AAAA", + "mnemonic": "INC", + "format": "IRAM[0x{A:02X}]" + }, + { + "mask": "0000'011R", + "mnemonic": "INC", + "format": "@R{R}" + }, + { + "mask": "0000'1RRR", + "mnemonic": "INC", + "format": "R{R}" + }, + { + "mask": "1010'0011", + "mnemonic": "INC", + "format": "DPTR" + }, + { + "mask": "0001'0100", + "mnemonic": "DEC", + "format": "A" + }, + { + "mask": "0001'0101 AAAA'AAAA", + "mnemonic": "DEC", + "format": "IRAM[0x{A:02X}]" + }, + { + "mask": "0001'0110", + "mnemonic": "DEC", + "format": "@R0" + }, + { + "mask": "0001'0111", + "mnemonic": "DEC", + "format": "@R1" + }, + { + "mask": "0001'1RRR", + "mnemonic": "DEC", + "format": "R{R}" + }, + { + "mask": "1110'0100", + "mnemonic": "CLR", + "format": "A" + }, + { + "mask": "1100'0010 AAAA'AAAA", + "mnemonic": "CLR", + "format": "BIT[0x{A:02X}]" + }, + { + "mask": "1100'0011", + "mnemonic": "CLR", + "format": "C" + }, + { + "mask": "1111'0000", + "mnemonic": "MOVX", + "format": "@DPTR, A" + }, + { + "mask": "1110'0000", + "mnemonic": "MOVX", + "format": "A, @DPTR" + }, + { + "mask": "1111'001R", + "mnemonic": "MOVX", + "format": "@R{R}, A" + }, + { + "mask": "1110'001R", + "mnemonic": "MOVX", + "format": "A, @R{R}" + }, + { + "mask": "0111'011R AAAA'AAAA", + "mnemonic": "MOV", + "format": "@R{R}, #0x{A:02X}" + }, + { + "mask": "0111'1RRR AAAA'AAAA", + "mnemonic": "MOV", + "format": "R{R}, #0x{A:02X}" + }, + { + "mask": "1111'1RRR", + "mnemonic": "MOV", + "format": "R{R}, A" + }, + { + "mask": "1110'011R", + "mnemonic": "MOV", + "format": "A, @R{R}" + }, + { + "mask": "1111'011R", + "mnemonic": "MOV", + "format": "@R{R}, A" + }, + { + "mask": "1110'1RRR", + "mnemonic": "MOV", + "format": "A, R{R}" + }, + { + "mask": "1001'0010 AAAA'AAAA", + "mnemonic": "MOV", + "format": "BIT[0x{A:02X}], C" + }, + { + "mask": "1010'0010 AAAA'AAAA", + "mnemonic": "MOV", + "format": "C, BIT[0x{A:02X}]" + }, + { + "mask": "1001'0000 DDDD'DDDD DDDD'DDDD", + "mnemonic": "MOV", + "format": "DPTR, #0x{D:04X}" + }, + { + "mask": "1110'0101 AAAA'AAAA", + "mnemonic": "MOV", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "1111'0101 AAAA'AAAA", + "mnemonic": "MOV", + "format": "IRAM[#0x{A:02X}], A" + }, + { + "mask": "0111'0101 AAAA'AAAA DDDD'DDDD", + "mnemonic": "MOV", + "format": "IRAM[0x{A:02X}], #0x{D:02X}" + }, + { + "mask": "1000'0101 AAAA'AAAA BBBB'BBBB", + "mnemonic": "MOV", + "format": "IRAM[0x{A:02X}], IRAM[0x{B:02X}]" + }, + { + "mask": "0111'0100 DDDD'DDDD", + "mnemonic": "MOV", + "format": "A, #0x{D:02X}" + }, + { + "mask": "1000'011R AAAA'AAAA", + "mnemonic": "MOV", + "format": "IRAM[0x{A:02X}], @R{R}" + }, + { + "mask": "1000'1RRR AAAA'AAAA", + "mnemonic": "MOV", + "format": "IRAM[0x{A:02X}], R{R}" + }, + { + "mask": "1010'011R AAAA'AAAA", + "mnemonic": "MOV", + "format": "@R{R}, IRAM[0x{A:02X}]" + }, + { + "mask": "1010'1RRR AAAA'AAAA", + "mnemonic": "MOV", + "format": "R{R}, IRAM[0x{A:02X}]" + }, + { + "mask": "0110'0000 AAAA'AAAA", + "mnemonic": "JZ", + "format": "PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 2 + A" + } + } + ] + }, + { + "mask": "0111'0000 AAAA'AAAA", + "mnemonic": "JNZ", + "format": "PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 2 + A" + } + } + ] + }, + { + "mask": "1001'0011", + "mnemonic": "MOVC", + "format": "A, @A+DPTR" + }, + { + "mask": "1000'0011", + "mnemonic": "MOVC", + "format": "A, @A+PC" + }, + { + "mask": "1101'011R", + "mnemonic": "XCHD", + "format": "A, @R{R}" + }, + { + "mask": "1100'011R", + "mnemonic": "XCH", + "format": "A, @R{R}" + }, + { + "mask": "1100'1RRR", + "mnemonic": "XCH", + "format": "A, R{R}" + }, + { + "mask": "1100'0101 AAAA'AAAA", + "mnemonic": "XCH", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0010'0010", + "mnemonic": "RET", + "format": "" + }, + { + "mask": "0011'0010", + "mnemonic": "RETI", + "format": "" + }, + { + "mask": "1101'0010 AAAA'AAAA", + "mnemonic": "SETB", + "format": "BIT[0x{A:02X}]" + }, + { + "mask": "1101'0011", + "mnemonic": "SETB", + "format": "C" + }, + { + "mask": "0101'0010 AAAA'AAAA", + "mnemonic": "ANL", + "format": "IRAM[0x{A:02X}], A" + }, + { + "mask": "0101'0101 AAAA'AAAA", + "mnemonic": "ANL", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0101'0011 AAAA'AAAA DDDD'DDDD", + "mnemonic": "ANL", + "format": "A, IRAM[0x{A:02X}], #0x{D:02X}" + }, + { + "mask": "0101'0100 AAAA'AAAA", + "mnemonic": "ANL", + "format": "A, #0x{A:02X}" + }, + { + "mask": "0101'011R", + "mnemonic": "ANL", + "format": "A, @R{R}" + }, + { + "mask": "0101'1RRR", + "mnemonic": "ANL", + "format": "A, R{R}" + }, + { + "mask": "1000'0010 AAAA'AAAA", + "mnemonic": "ANL", + "format": "C, BIT[0x{A:02X}]" + }, + { + "mask": "1011'0000 AAAA'AAAA", + "mnemonic": "ANL", + "format": "C, /BIT[0x{A:02X}]" + }, + { + "mask": "0100'0010 AAAA'AAAA", + "mnemonic": "ORL", + "format": "IRAM[0x{A:02X}], A" + }, + { + "mask": "0100'0011 AAAA'AAAA DDDD'DDDD", + "mnemonic": "ORL", + "format": "IRAM[0x{A:02X}], #0x{D:02X}" + }, + { + "mask": "0100'0100 DDDD'DDDD", + "mnemonic": "ORL", + "format": "A, #0x{D:02X}" + }, + { + "mask": "0100'011R", + "mnemonic": "ORL", + "format": "A, @R{R}" + }, + { + "mask": "0100'1RRR", + "mnemonic": "ORL", + "format": "A, R{R}" + }, + { + "mask": "0100'0101 AAAA'AAAA", + "mnemonic": "ORL", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0111'0010 AAAA'AAAA", + "mnemonic": "ORL", + "format": "C, BIT[0x{A:02X}]" + }, + { + "mask": "1010'0000 AAAA'AAAA", + "mnemonic": "ORL", + "format": "C, /BIT[0x{A:02X}]" + }, + { + "mask": "0110'0010 AAAA'AAAA", + "mnemonic": "XRL", + "format": "IRAM[0x{A:02X}], A" + }, + { + "mask": "0110'0011 AAAA'AAAA DDDD'DDDD", + "mnemonic": "XRL", + "format": "IRAM[0x{A:02X}], #0x{D:02X}" + }, + { + "mask": "0110'0100 DDDD'DDDD", + "mnemonic": "XRL", + "format": "A, #0x{D:02X}" + }, + { + "mask": "0110'011R", + "mnemonic": "XRL", + "format": "A, @R{R}" + }, + { + "mask": "0110'1RRR", + "mnemonic": "XRL", + "format": "A, R{R}" + }, + { + "mask": "0110'0101 AAAA'AAAA", + "mnemonic": "XRL", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0010'0100 DDDD'DDDD", + "mnemonic": "ADD", + "format": "A, #0x{D:02X}" + }, + { + "mask": "0010'011R", + "mnemonic": "ADD", + "format": "A, @R{R}" + }, + { + "mask": "0010'0101 AAAA'AAAA", + "mnemonic": "ADD", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0011'0100 DDDD'DDDD", + "mnemonic": "ADDC", + "format": "A, #0x{D:02X}" + }, + { + "mask": "0011'011R", + "mnemonic": "ADDC", + "format": "A, @R{R}" + }, + { + "mask": "0011'0101 AAAA'AAAA", + "mnemonic": "ADDC", + "format": "A, IRAM[0x{A:02X}]" + }, + { + "mask": "0011'1RRR", + "mnemonic": "ADDC", + "format": "A, R{R}" + }, + { + "mask": "1001'0100 DDDD'DDDD", + "mnemonic": "SUBB", + "format": "A, #0x{D:02X}" + }, + { + "mask": "1001'0101 IIII'IIII", + "mnemonic": "SUBB", + "format": "A, IRAM[0x{I:02X}]" + }, + { + "mask": "1001'011R", + "mnemonic": "SUBB", + "format": "A, @R{R}" + }, + { + "mask": "1001'1RRR", + "mnemonic": "SUBB", + "format": "A, R{R}" + }, + { + "mask": "1010'0100", + "mnemonic": "MUL", + "format": "AB" + }, + { + "mask": "1000'0100", + "mnemonic": "DIV", + "format": "AB" + }, + { + "mask": "0010'1RRR", + "mnemonic": "ORL", + "format": "A, R{R}" + }, + { + "mask": "1011'0101 IIII'IIII AAAA'AAAA", + "mnemonic": "CJNE", + "format": "A, IRAM[0x{I:02X}], PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "1011'0100 DDDD'DDDD AAAA'AAAA", + "mnemonic": "CJNE", + "format": "A, #0x{D:02X}, PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "1011'011R DDDD'DDDD AAAA'AAAA", + "mnemonic": "CJNE", + "format": "@R{R}, #0x{D:02X}, PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "1011'1RRR DDDD'DDDD AAAA'AAAA", + "mnemonic": "CJNE", + "format": "R{R}, #0x{D:02X}, PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "1101'0101 IIII'IIII AAAA'AAAA", + "mnemonic": "DJNZ", + "format": "IRAM[0x{I:02X}], PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 3 + A" + } + } + ] + }, + { + "mask": "1101'1RRR AAAA'AAAA", + "mnemonic": "DJNZ", + "format": "R{R}, PC + 0x{R:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 2 + A" + } + } + ] + }, + { + "mask": "0101'0000 AAAA'AAAA", + "mnemonic": "JNC", + "format": "PC + 0x{A:02X}", + "metadata": [ + { + "type": "jump", + "data": { + "destination": "offset + 2 + A" + } + } + ] + }, + { + "mask": "1101'0000 AAAA'AAAA", + "mnemonic": "POP", + "format": "IRAM[0x{A:02X}]" + }, + { + "mask": "1100'0000 AAAA'AAAA", + "mnemonic": "PUSH", + "format": "IRAM[0x{A:02X}]" + }, + { + "mask": "1101'0100", + "mnemonic": "DA", + "format": "" + }, + { + "mask": "1100'0100", + "mnemonic": "SWAP", + "format": "A" + }, + { + "mask": "1111'0100", + "mnemonic": "CPL", + "format": "A" + }, + { + "mask": "1011'0011", + "mnemonic": "CPL", + "format": "C" + }, + { + "mask": "1011'0010 BBBB'BBBB", + "mnemonic": "CPL", + "format": "BIT[0x{B:02X}]" + }, + { + "mask": "1010'0101", + "mnemonic": "INVALID", + "format": "" + }, + { + "mask": "XXXX'XXXX", + "mnemonic": "DB", + "format": "#0x{X:02X}", + "metadata": [ + { + "type": "data", + "data": { + "value": "X" + } + } + ] + } + + ] +} \ No newline at end of file