Hopper Plugins
Plugins currently available in the repository:
CPU plugins:
File loader plugins:
Tool plugins:
6502 CPU Plugin
version 0.2.2
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.
This plugin can be referenced from the command line tool using 6502
as its identifer.
CPU backends currently supported: 6502, 65C02, 65N02, 65R02, 65S02, HuC6280, MELPS740, MOS6510, M37450, R6500, R65C02, R65C19, R65C29, SunPlus, W65C02S.
Supported CPUs list
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 → MELPS740 | Datasheet |
M37409 | Mitsubishi → MELPS740 | Datasheet | |
M37410 | Mitsubishi → MELPS740 | Datasheet | |
M37412 | Mitsubishi → MELPS740 | Datasheet | |
M37413 | Mitsubishi → MELPS740 | Datasheet | |
M37414 | Mitsubishi → MELPS740 | Datasheet | |
M37415 | Mitsubishi → MELPS740 | Datasheet | |
M37416 | Mitsubishi → MELPS740 | Datasheet | |
M37417 | Mitsubishi → MELPS740 | Datasheet | |
M37418 | Mitsubishi → MELPS740 | Datasheet | |
M37420 | Mitsubishi → MELPS740 | Datasheet | |
M37421 | Mitsubishi → MELPS740 | Datasheet | |
M37424 | Mitsubishi → MELPS740 | Datasheet | |
M37524 | Mitsubishi → MELPS740 | Datasheet | |
M37450M2 | Mitsubishi → M37450 | Datasheet | |
M37450M4 | Mitsubishi → M37450 | Datasheet | |
M37450M8 | Mitsubishi → M37450 | 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 | MOS → 6510 | 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 MOS6510 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.
- Alternate syntax for extended opcodes (i.e. BBS0 → BBS 0,...).
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 supported only in the MOS 6510 core, as it is quite unlikely that people used them on general applications. The MOS 6510 is used in the Commodore C64 microcomputer, where all sort of trickery is commonly used.
- Rebuilding the test binaries requires having the AS Macroassembler command line tools available in your
PATH
variable.
65816 CPU Plugin
version 0.2.1
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.
This plugin can be referenced from the command line tool using 65816
as its identifer.
CPU backends currently supported: 65816, MELPS 7700.
Supported CPUs list
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 | |
Mitsubishi | M37906M4C | Mitsubishi → M7700 | Datasheet |
M37906M4H | Mitsubishi → M7700 | Datasheet | |
M37906M6C | Mitsubishi → M7700 | Datasheet | |
M37906M8C | Mitsubishi → M7700 | 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.
- Expand the generic 65816 test suite.
- Automatically add I/O register labels for MELPS 7700.
- Properly relocate files in the entire address space with BSS sections around data segments.
- Detect emulation bit being set or cleared.
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 the AS Macroassembler command line tools available in your
PATH
variable. - The default CPU mode has both accumulator and index registers set to 8 bits each. This can be changed via the usual Hopper CPU mode setting facilities.
8x300 CPU Plugin
version 0.1.1
This CPU core plugin allows you to disassemble 8x300 code, used in early signal processing equipment in the 70s and early 80s.
This plugin can be referenced from the command line tool using 8x300
as its identifer.
CPU backends currently supported: 8x300, 8x305.
Supported CPUs list
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:
- 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.
- Automatic variable extraction for generated
SEL
opcodes.
Caveats
- Rebuilding the test binaries requires having the AS Macroassembler command line tools available in your
PATH
variable. - If MCCAP syntax is used, comments will still start with
;
rather than with*
as expected. As far as the author can see, this is something that cannot fixed by the plugin but by the Hopper authors directly. - The MCCAP syntax does not support negation for constant operands, therefore attempting to mark a constant as negated will not yield anything. Negation works as intended if using the AS syntax.
TMS1000 CPU Plugin
version 0.0.1
This CPU core plugin allows you to disassemble Texas Instruments' TMS1000 series code, used in early embedded equipment and terminals.
This plugin can be referenced from the command line tool using tms1000
as its identifer.
CPU backends currently supported: TMS1000, TMS1100.
Supported CPUs list
Manufacturer | Model | Provider | Datasheet |
---|---|---|---|
Texas Instruments | TMS1000 | Texas Instruments → TMS1000 | Datasheet |
TMS1070 | Texas Instruments → TMS1000 | Datasheet | |
TMS1100 | Texas Instruments → TMS1100 | Datasheet | |
TMS1200 | Texas Instruments → TMS1000 | Datasheet | |
TMS1270 | Texas Instruments → TMS1000 | Datasheet | |
TMS1300 | Texas Instruments → TMS1100 | Datasheet |
TODO for next version:
- Add support for more TMS1000 variants if any are found in the wild.
- Attempt to reject files too big for address-space reduced chip variants.
- Alternate syntax for A1ACC opcodes.
Caveats
- Rebuilding the test binaries requires having the AS Macroassembler command line tools available in your
PATH
variable.
Apple II File Loader Plugin
version 0.0.1
This file loader plugin allows you to load Apple ][ binaries in A2 format to be disassembled (or basically anything you can either BLOAD
or BRUN
). (Please note that the plugin depends on the 6502 CPU core being installed in order to work properly)
This plugin can be referenced from the command line tool using a2
as its identifer.
TODO for next version:
- Add support for containers (Disk and Tape images).
- Add extra RAM/ROM sections depending on the chosen machine model.
- Automatically set predefined RAM/ROM labels according to Apple's development manual.
Caveats:
- The plugin currently defaults to use a 65c02 disassembler core even on machines that used a plain 6502, this will be fixed once a target machine selector will be implemented in the loader.
- The plugin can not handle BASIC files.
Future plans (need Hopper SDK changes):
- Automatically create virtual segments for Apple IIe, IIc, and IIgs bank-switched RAM.
Commodore File Loader Plugin
version 0.2.2
This file loader plugin allows you to load Commodore binaries in PRG format to be disassembled. (Please note that the plugin depends on the 6502 CPU core being installed in order to work properly)
This plugin can be referenced from the command line tool using cbm
as its identifer.
TODO for next version:
- Add support for containers (Disk and Tape images).
- Add support for cartridges.
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.
HEX binary files
version 0.0.1
This file loader plugin allows you to load binaries saved as ASCII HEX files. Currently the plugin only support the following formats: Intel HEX.
This plugin can be referenced from the command line tool using hex
as its identifer.
TODO for next version:
- Add full support for segments in Intel HEX files.
- Add support for Motorola S-Record files.
- Add support for Tektronix HEX files.
- Add support for MOS HEX files.
Caveats:
- The plugin cannot handle overlapping ranges, which can happen when flashing operations require writing memory out of order and hitting locations more than once.
Address space tools
version 0.0.2
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.
This plugin can be referenced from the command line tool using addressspace
as its identifer.
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/AppCode, select the plugin you are interested in and then let Xcode/AppCode build the associated project; the plugin will be automatically copied to the appropriate paths (~/Library/Application Support/Hopper/Plugins/v4/{CPUs,Loaders,Tools}
). Once done, please close any open instances of Hopper and restart them. That's all there is to it.
Keep in mind that these plugins require Hopper 4.7.0 or later to work. They may work on older versions but they are neither tested nor supported on anything older than v4.7.0.
If you are unable or unwilling to update your Hopper installation from v3 to v4 then build the code marked by the v3api
git tag. However, since the Hopper author allowed free upgrades from v3 licences to v4 licenses, v3 plugins are effectively unsupported as of v4 release. It is strongly suggested to update your Hopper installation at your earliest opportunity.
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.