1
0
mirror of synced 2025-01-11 13:52:15 +01:00
BioTheWolff 1b9f4f33de
feat: Added export disassembler results to ASM file (#1987)
### Problem description
<!-- Describe the bug that you fixed/feature request that you
implemented, or link to an existing issue describing it -->
This PR implements the feature request #1781, that suggests adding a
button to export disassembled instructions into an ASM file.

### Implementation description
This adds a button to export the current disassembled instructions to an
ASM file. Said file is suffixed by an `.asm` extension if not specified
at file creation.

*Note: the file is written to for every `Disassembly` item in the
vector, as it was the easiest and most memory-conservative way of doing
it.*

The file creation task is implemented based on IPS patch exports, so it
fits the same pattern.
A `ToastError` is raised when the ASM export could not complete
successfully.

Translations have been implemented for both `en_US` and `de_DE` for the
two new keys:
- `hex.disassembler.view.disassembler.export`: file export button
- `hex.disassembler.view.disassembler.export.popup.error`: error popup
text

### Screenshots
The button is disabled when the disassembler is working, or when the
disassembly vector is empty.

Here is a complete breakdown of the visual changes:

![image](https://github.com/user-attachments/assets/af0ce701-9d77-45f1-9a5a-90d68d00bb0d)

### Additional things
As expected, the exporter writes every item's `mnemonic` and `operators`
to the file, producing an output like this:

`example.asm`
```asm
.byte 0x7f, 0x45, 0x4c, 0x46
andeq r0, r1, r2, lsl #2
andeq r0, r0, r0
andeq r0, r0, r0
eorseq r0, lr, r3
andeq r0, r0, r1
andeq r1, r0, r0, asr #32
andeq r0, r0, r0
andeq r0, r0, r0, asr #32
```

---------

Signed-off-by: BioTheWolff <47079795+BioTheWolff@users.noreply.github.com>
2024-12-05 23:04:38 +01:00

80 lines
4.9 KiB
JSON

{
"code": "de-DE",
"country": "Germany",
"fallback": false,
"language": "German",
"translations": {
"hex.disassembler.view.disassembler.16bit": "16-bit",
"hex.disassembler.view.disassembler.32bit": "32-bit",
"hex.disassembler.view.disassembler.64bit": "64-bit",
"hex.disassembler.view.disassembler.arch": "Architektur",
"hex.disassembler.view.disassembler.arm.arm": "ARM",
"hex.disassembler.view.disassembler.arm.armv8": "ARMv8",
"hex.disassembler.view.disassembler.arm.cortex_m": "Cortex-M",
"hex.disassembler.view.disassembler.arm.default": "Standard",
"hex.disassembler.view.disassembler.arm.thumb": "Thumb",
"hex.disassembler.view.disassembler.base": "Basisadresse",
"hex.disassembler.view.disassembler.bpf.classic": "Classic",
"hex.disassembler.view.disassembler.bpf.extended": "Extended",
"hex.disassembler.view.disassembler.disassemble": "Disassemble",
"hex.disassembler.view.disassembler.export": "Exportieren",
"hex.disassembler.view.disassembler.export.popup.error": "Der Export zur ASM-Datei ist fehlgeschlagen.",
"hex.disassembler.view.disassembler.disassembling": "Disassemblen...",
"hex.disassembler.view.disassembler.disassembly.address": "Adresse",
"hex.disassembler.view.disassembler.disassembly.bytes": "Byte",
"hex.disassembler.view.disassembler.disassembly.offset": "Offset",
"hex.disassembler.view.disassembler.disassembly.title": "Disassembly",
"hex.disassembler.view.disassembler.m680x.6301": "6301",
"hex.disassembler.view.disassembler.m680x.6309": "6309",
"hex.disassembler.view.disassembler.m680x.6800": "6800",
"hex.disassembler.view.disassembler.m680x.6801": "6801",
"hex.disassembler.view.disassembler.m680x.6805": "6805",
"hex.disassembler.view.disassembler.m680x.6808": "6808",
"hex.disassembler.view.disassembler.m680x.6809": "6809",
"hex.disassembler.view.disassembler.m680x.6811": "6811",
"hex.disassembler.view.disassembler.m680x.cpu12": "CPU12",
"hex.disassembler.view.disassembler.m680x.hcs08": "HCS08",
"hex.disassembler.view.disassembler.m68k.000": "000",
"hex.disassembler.view.disassembler.m68k.010": "010",
"hex.disassembler.view.disassembler.m68k.020": "020",
"hex.disassembler.view.disassembler.m68k.030": "030",
"hex.disassembler.view.disassembler.m68k.040": "040",
"hex.disassembler.view.disassembler.m68k.060": "060",
"hex.disassembler.view.disassembler.mips.micro": "Micro",
"hex.disassembler.view.disassembler.mips.mips2": "MIPS II",
"hex.disassembler.view.disassembler.mips.mips3": "MIPS III",
"hex.disassembler.view.disassembler.mips.mips32": "MIPS32",
"hex.disassembler.view.disassembler.mips.mips32R6": "MIPS32R6",
"hex.disassembler.view.disassembler.mips.mips64": "MIPS64",
"hex.disassembler.view.disassembler.mos65xx.6502": "6502",
"hex.disassembler.view.disassembler.mos65xx.65816": "65816",
"hex.disassembler.view.disassembler.mos65xx.65816_long_m": "65816 Long M",
"hex.disassembler.view.disassembler.mos65xx.65816_long_mx": "65816 Long MX",
"hex.disassembler.view.disassembler.mos65xx.65816_long_x": "65816 Long X",
"hex.disassembler.view.disassembler.mos65xx.65c02": "65C02",
"hex.disassembler.view.disassembler.mos65xx.w65c02": "W65C02",
"hex.disassembler.view.disassembler.name": "Disassembler",
"hex.disassembler.view.disassembler.position": "Position",
"hex.disassembler.view.disassembler.ppc.booke": "Book-E",
"hex.disassembler.view.disassembler.ppc.qpx": "Quad Processing Extensions",
"hex.disassembler.view.disassembler.ppc.spe": "Signal Processing Engine",
"hex.disassembler.view.disassembler.region": "Code Region",
"hex.disassembler.view.disassembler.riscv.compressed": "Komprimiert",
"hex.disassembler.view.disassembler.settings.mode": "Modus",
"hex.disassembler.view.disassembler.sh.dsp": "DSP",
"hex.disassembler.view.disassembler.sh.fpu": "FPU",
"hex.disassembler.view.disassembler.sh.sh2": "SH2",
"hex.disassembler.view.disassembler.sh.sh2a": "SH2A",
"hex.disassembler.view.disassembler.sh.sh3": "SH3",
"hex.disassembler.view.disassembler.sh.sh4": "SH4",
"hex.disassembler.view.disassembler.sh.sh4a": "SH4A",
"hex.disassembler.view.disassembler.sparc.v9": "Sparc V9",
"hex.disassembler.view.disassembler.tricore.110": "110",
"hex.disassembler.view.disassembler.tricore.120": "120",
"hex.disassembler.view.disassembler.tricore.130": "130",
"hex.disassembler.view.disassembler.tricore.131": "131",
"hex.disassembler.view.disassembler.tricore.160": "160",
"hex.disassembler.view.disassembler.tricore.161": "161",
"hex.disassembler.view.disassembler.tricore.162": "162"
}
}