Plugins currently available in the repository:
CPU plugins:
File loader plugins:
Tool plugins:
###6502 CPU Plugin
version 0.1.3
This CPU core plugin allows you to disassemble 6502/65C02 code, used in loads of home computers of the 70s, 80s, and early 90s, and in industrial automation or other specialised tasks where an MCU is needed.
CPU backends currently supported: 6502, 65C02, 65N02, 65R02, 65S02, HuC6280, M740, R6500, R65C02, R65C19, R65C29, SunPlus, W65C02S.
Manufacturer | Model | Provider | Datasheet |
---|---|---|---|
Conexant | L27 | Rockwell → R65C19 | Datasheet |
L28 | Rockwell → R65C19 | Datasheet | |
California Micro Devices | G65SC02 | Generic → 65C02 | Datasheet |
G65SC150 | Generic → 65C02 | Datasheet | |
G65SC151 | Generic → 65C02 | Datasheet | |
GTE | GS65C02 | Generic → 65C02 | Datasheet |
Hua Ko Electronics | HKE65SC02 | Generic → 65C02 | Datasheet |
HKE65SC03 | Generic → 65C02 | Datasheet | |
HKE65SC04 | Generic → 65C02 | Datasheet | |
HKE65SC05 | Generic → 65C02 | Datasheet | |
HKE65SC06 | Generic → 65C02 | Datasheet | |
HKE65SC07 | Generic → 65C02 | Datasheet | |
HKE65SC102 | Generic → 65C02 | Datasheet | |
HKE65SC103 | Generic → 65C02 | Datasheet | |
HKE65SC104 | Generic → 65C02 | Datasheet | |
HKE65SC105 | Generic → 65C02 | Datasheet | |
HudsonSoft | HuC6280 | HudsonSoft → HuC6280 | N/A |
HuC6280A | HudsonSoft → HuC6280 | N/A | |
Mitsubishi | M37408 | Mitsubishi → M740 | Datasheet |
M37409 | Mitsubishi → M740 | Datasheet | |
M37410 | Mitsubishi → M740 | Datasheet | |
M37412 | Mitsubishi → M740 | Datasheet | |
M37413 | Mitsubishi → M740 | Datasheet | |
M37414 | Mitsubishi → M740 | Datasheet | |
M37415 | Mitsubishi → M740 | Datasheet | |
M37416 | Mitsubishi → M740 | Datasheet | |
M37417 | Mitsubishi → M740 | Datasheet | |
M37418 | Mitsubishi → M740 | Datasheet | |
M37420 | Mitsubishi → M740 | Datasheet | |
M37421 | Mitsubishi → M740 | Datasheet | |
M37424 | Mitsubishi → M740 | Datasheet | |
M37524 | Mitsubishi → M740 | Datasheet | |
MOS | 6502 | Generic → 6502 | Datasheet |
6503 | Generic → 6502 | Datasheet | |
6504 | Generic → 6502 | Datasheet | |
6505 | Generic → 6502 | Datasheet | |
6506 | Generic → 6502 | Datasheet | |
6507 | Generic → 6502 | Datasheet | |
6508 | Generic → 6502 | Datasheet | |
6509 | Generic → 6502 | Datasheet | |
6510 | Generic → 6502 | Datasheet | |
6512 | Generic → 6502 | Datasheet | |
6513 | Generic → 6502 | Datasheet | |
6514 | Generic → 6502 | Datasheet | |
6515 | Generic → 6502 | Datasheet | |
7501 | Generic → 6502 | N/A | |
8500 | Generic → 6502 | N/A | |
8501 | Generic → 6502 | N/A | |
8502 | Generic → 6502 | N/A | |
8510 | Generic → 6502 | N/A | |
NCR | NCR65C02 | Generic → 65C02 | Datasheet |
Novatek | NT6880 | Generic → 6502 | Datasheet |
NT6881 | Generic → 6502 | Datasheet | |
NT68P1 | Generic → 6502 | Datasheet | |
Ricoh | RP2A03 | Generic → 6502 | N/A |
RP2A07 | Generic → 6502 | N/A | |
RP65C02 | Generic → 65C02 | N/A | |
Rockwell | R6500/11 | Rockwell → R6500 | Datasheet |
R6500/12 | Rockwell → R6500 | Datasheet | |
R6500/13 | Rockwell → R6500 | Datasheet | |
R6500/15 | Rockwell → R6500 | Datasheet | |
R6500/16 | Rockwell → R6500 | Datasheet | |
R6501 | Rockwell → R6500 | Datasheet | |
R6502 | Generic → 6502 | Datasheet | |
R6503 | Generic → 6502 | Datasheet | |
R6504 | Generic → 6502 | Datasheet | |
R6505 | Generic → 6502 | Datasheet | |
R6506 | Generic → 6502 | Datasheet | |
R6507 | Generic → 6502 | Datasheet | |
R6511 | Rockwell → R6500 | Datasheet | |
R6512 | Generic → 6502 | Datasheet | |
R6513 | Generic → 6502 | Datasheet | |
R6514 | Generic → 6502 | Datasheet | |
R6515 | Generic → 6502 | Datasheet | |
R65C00/21 | Rockwell → R65C29 | Datasheet | |
R65C02 | Rockwell → R65C02 | Datasheet | |
R65C19 | Rockwell → R65C19 | Datasheet | |
R65C29 | Rockwell → R65C29 | Datasheet | |
R65C102 | Rockwell → R65C29 | Datasheet | |
R65C112 | Rockwell → R65C29 | Datasheet | |
Sunplus | SPL61A | Sunplus → 65N02 | Datasheet |
SPL130A | Sunplus → 65N02 | Datasheet | |
SPL191A | Sunplus → 65N02 | Datasheet | |
SPL256A | Sunplus → 65N02 | Datasheet | |
SPL512A | Sunplus → 65N02 | Datasheet | |
SPL512B | Sunplus → 65N02 | Datasheet | |
SPL1000A | Sunplus → 65N02 | Datasheet | |
SPL1000B | Sunplus → 65N02 | Datasheet | |
SPLB10A | Sunplus → 65N02 | Datasheet | |
SPF02A | Sunplus → 65R02 | Datasheet | |
SPL02C | Sunplus → 65R02 | Datasheet | |
SPL02D | Sunplus → 65R02 | Datasheet | |
SPL03B | Sunplus → 65R02 | Datasheet | |
SPL03C | Sunplus → 65R02 | Datasheet | |
SPL05A | Sunplus → 65R02 | Datasheet | |
SPL05B | Sunplus → 65R02 | Datasheet | |
SPL06A | Sunplus → 65R02 | Datasheet | |
SPL06B | Sunplus → 65R02 | Datasheet | |
SPLB20A | Sunplus → 65R02 | Datasheet | |
SPLB20A1 | Sunplus → 65R02 | Datasheet | |
SPLB21A | Sunplus → 65R02 | Datasheet | |
SPLB22A | Sunplus → 65R02 | Datasheet | |
SPLB23A | Sunplus → 65R02 | Datasheet | |
SPLB24A | Sunplus → 65R02 | Datasheet | |
SPLB25A | Sunplus → 65R02 | Datasheet | |
SPLB26A | Sunplus → 65R02 | Datasheet | |
SPL128A | Sunplus → 65R02 | Datasheet | |
SPLG01 | Sunplus → 65R02 | Datasheet | |
SPF06A1 | Sunplus → 65S02 | Datasheet | |
SPF18A1 | Sunplus → 65S02 | Datasheet | |
SPF20A | Sunplus → 65S02 | Datasheet | |
SPF30A1 | Sunplus → 65S02 | Datasheet | |
SPF30B | Sunplus → 65S02 | Datasheet | |
SPL02A | Sunplus → 65S02 | Datasheet | |
SPCxxx | Sunplus → SunPlus | Datasheet | |
SPCRxxx | Sunplus → SunPlus | Datasheet | |
SPMCxx | Sunplus → SunPlus | Datasheet | |
SPFA64A | Sunplus → SunPlus | Datasheet | |
SPFA120A | Sunplus → SunPlus | Datasheet | |
SPL08A | Sunplus → SunPlus | Datasheet | |
SPL15A | Sunplus → SunPlus | Datasheet | |
SPL15B | Sunplus → SunPlus | Datasheet | |
SPL25B | Sunplus → SunPlus | Datasheet | |
SPL25C | Sunplus → SunPlus | Datasheet | |
SPL30A | Sunplus → SunPlus | Datasheet | |
SPL31A | Sunplus → SunPlus | Datasheet | |
SPL60A | Sunplus → SunPlus | Datasheet | |
SPL190A | Sunplus → SunPlus | Datasheet | |
SPMC65P1504A | Generic → 6502 | Datasheet | |
SPMC65P1502A | Generic → 6502 | Datasheet | |
Synertek | SY6502 | Generic → 6502 | Datasheet |
SY6503 | Generic → 6502 | Datasheet | |
SY6504 | Generic → 6502 | Datasheet | |
SY6505 | Generic → 6502 | Datasheet | |
SY6506 | Generic → 6502 | Datasheet | |
SY6507 | Generic → 6502 | Datasheet | |
SY6512 | Generic → 6502 | Datasheet | |
SY6513 | Generic → 6502 | Datasheet | |
SY6514 | Generic → 6502 | Datasheet | |
SY6515 | Generic → 6502 | Datasheet | |
SY65C02 | Generic → 65C02 | N/A | |
UMC | UM6502 | Generic → 6502 | Datasheet |
UM6507 | Generic → 6502 | Datasheet | |
UM6512 | Generic → 6502 | Datasheet | |
VLSI | 6502A | Generic → 6502 | N/A |
VL65NC02 | WDC → W65C02S | Datasheet | |
WDC | W65C02S | WDC → W65C02S | Datasheet |
W65C134S | WDC → W65C02S | Datasheet | |
W65C02GPMCU | WDC → W65C02S | Datasheet | |
Weltrend | WT5090 | Generic → 6502 | N/A |
WT5091 | Generic → 6502 | N/A | |
WT50P6 | Generic → 6502 | N/A | |
WT6148 | Generic → 6502 | Datasheet | |
WT6160 | Generic → 6502 | Datasheet | |
WT62P2 | Generic → 6502 | Datasheet | |
WT65F1 | Generic → 6502 | Datasheet | |
WT6511 | Generic → 6502 | N/A | |
WT6512 | Generic → 6502 | N/A | |
WT6512F | Generic → 6502 | N/A |
####TODO for next version(s):
- Negation for hexadecimal, decimal, and octal types.
- Re-test 6502, 65C02, R6500, R65C02, and W65C02 backends.
- Write tests for the HuC6280 backend.
- Write tests for the R65C19 backend.
- Write tests for the R65C29 backend.
- Write tests for the M740 backend.
- Properly handle the extra registers present in the R65C19 variant.
- Attempt to reject files too big for address-space reduced chip variants.
- Add support for more 6502 variants if any are found in the wild.
- Properly relocate files in the 64k address space with BSS sections around data segments.
####Future plans (need Hopper SDK changes):
- A way to properly model stack changes (ie. being able to increment and decrement the virtual stack pointer when encountering PHx or PLx instructions).
- Have a customised memory map with named registers for each chip (needs BSS support first).
####Caveats:
- Undocumented opcodes are not recognised (and this is not going to change in the near future).
- Rebuilding the test binaries requires having
xa
installed (available from homebrew viabrew install xa
).
###65816 CPU Plugin
version 0.0.2
This CPU core plugin allows you to disassemble 65816/65802 code, used in some of home computers of the 80s, and early 90s, for industrial automation or other specialised tasks where a microcontroller is needed, and in the Super Nintendo/Super Famicom games console.
CPU backends currently supported: 65816.
Manufacturer | Model | Provider | Datasheet |
---|---|---|---|
California Micro Devices | G65SC816 | Generic → 65816 | Datasheet |
G65SC802 | Generic → 65816 | Datasheet | |
WDC | W65C816S | Generic → 65816 | Datasheet |
W65C802S | Generic → 65816 | N/A | |
W65C265S | Generic → 65816 | Datasheet | |
W65C816GPMCU | Generic → 65816 | Datasheet |
####TODO for next version:
- Add support for more 65816 variants if any are found in the wild.
- Attempt to reject files too big for address-space reduced chip variants.
- Properly relocate files in the entire address space with BSS sections around data segments.
####Future plans (need Hopper SDK changes):
- A way to properly model stack changes (ie. being able to increment and decrement the virtual stack pointer when encountering PHx or PLx instructions).
####Caveats:
- Rebuilding the test binaries requires having
xa
installed (available from homebrew viabrew install xa
).
###8x300 CPU Plugin
version 0.0.2
This CPU core plugin allows you to disassemble 8x300 code, used in early signal processing equipment in the 70s and early 80s.
CPU backends currently supported: 8x300, 8x305.
Manufacturer | Model | Provider | Datasheet |
---|---|---|---|
AMD | AM29x305 | Generic → 8x305 | Datasheet |
AM29x305A | Generic → 8x305 | Datasheet | |
Lansdale | SL8X305 | Generic → 8x305 | Datasheet |
Philips | S8X305I | Generic → 8x305 | N/A |
Scientific Micro Systems | SMS300 | Generic → 8x300 | N/A |
Signetics | N8X300I | Generic → 8x300 | Datasheet |
S8X300-1 | Generic → 8x300 | Datasheet | |
S8X300-2 | Generic → 8x300 | Datasheet | |
N8X305A | Generic → 8x305 | Datasheet | |
N8X305I | Generic → 8x305 | Datasheet | |
N8X305N | Generic → 8x305 | Datasheet |
####TODO for next version:
- Simplify opcodes by removing redundant zero rotations and lengths.
- Create a test suite.
- Add support for more 8x300 variants if any are found in the wild.
- Attempt to reject files too big for address-space reduced chip variants.
###Commodore 64 File Loader Plugin
version 0.1.1
This file loader plugin allows you to load Commodore 64 binaries to be disassembled. Commodore 128 files are currently not supported due to the fact that binaries may be bigger than 64k and thus something may need to be rearranged, whilst the rest of the Commodore 8-bit line uses different BASIC ROM revisions so the tokeniser will need some work. (Please note that the plugin depends on the 6502 CPU core to be installed in order to work properly)
####TODO for next version:
- Investigate Commodore 128 files support.
- See how different other BASIC ROM token tables are.
- Add support for containers (Disk and Tape images).
- Add support for cartridges.
- Add support for BASIC versions different than V2 (the one present in the Commodore 64).
####Caveats:
- The plugin can also handle BASIC loader stubs if any are present, although the detokeniser for that is quite flaky and barely tested. Invalid or improper BASIC code will crash the plugin, and maybe bring Hopper down with it.
####Future plans (need Hopper SDK changes):
- Properly relocate files in the 64k address space with BSS sections around data segments.
- Automatically fill labels for audio, video, and zero page locations and automatically create virtual segments for register banking.
####Applescript usage example:
tell application "Hopper Disassembler v3"
activate
open executable "your_binary_file_path_here" with options ¬
{{name:"c64", options:{{name:"Contains BASIC code", value:"YES"}}}} ¬
without analysis and parse objectivec
end tell
change value:"YES"
with value:"NO"
if you don't know if there is a BASIC program stub or if you are sure there is none.
###Address space tools
version 0.0.1
This tool plugin currently allows to map the full address space of the CPU chosen for the currently loaded file. When dealing with firmware images and the like, especially on older architectures, the code already assumes a certain memory layout and memory amount. If a block of code is loaded at a particular address and points to absolute memory locations it is a bit of a pain to handle the situation in Hopper since there is no way (that I know of) to create a segment from the UI. This plugin solves this very specific situation.
####Caveats:
- Mapping the full address space of a 32 or 64 binary is not recommended, as the UI will act as if you have loaded a 4 GB/2 EB file.
##Installation instructions:
Checkout from Git, open HopperPlugins.xcworkspace
in Xcode, select the Everything
scheme and then rebuild. Once done, copy the bundles whose name ends in .hopperLoader
into ~/Library/Application Support/Hopper/PlugIns/Loaders/
, the bundles whose name ends in .hopperCPU
into ~/Library/Application Support/Hopper/PlugIns/CPUs/
, and the bundle whose name ends in .hopperTool
into ~/Library/Application Support/Hopper/PlugIns/Tools/
. Keep in mind that these plugins require Hopper 3.7.3 or later to work. They may work on older versions but they are neither tested nor supported on anything older than v3.7.3.
##Need to get in touch?
Send an email to a.gatti * frob.it
(yep, replace the asterisk, you know what to do), or try sending a message to [email protected]
on Jabber if you so fancy.