agatti / hopper-plugins

Plugins for the Hopper disassembler

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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
ManufacturerModelProviderDatasheet
ConexantL27Rockwell → R65C19Datasheet
L28Rockwell → R65C19Datasheet
California Micro DevicesG65SC02Generic → 65C02Datasheet
G65SC150Generic → 65C02Datasheet
G65SC151Generic → 65C02Datasheet
GTEGS65C02Generic → 65C02Datasheet
Hua Ko ElectronicsHKE65SC02Generic → 65C02Datasheet
HKE65SC03Generic → 65C02Datasheet
HKE65SC04Generic → 65C02Datasheet
HKE65SC05Generic → 65C02Datasheet
HKE65SC06Generic → 65C02Datasheet
HKE65SC07Generic → 65C02Datasheet
HKE65SC102Generic → 65C02Datasheet
HKE65SC103Generic → 65C02Datasheet
HKE65SC104Generic → 65C02Datasheet
HKE65SC105Generic → 65C02Datasheet
HudsonSoftHuC6280HudsonSoft → HuC6280N/A
HuC6280AHudsonSoft → HuC6280N/A
MitsubishiM37408Mitsubishi → MELPS740Datasheet
M37409Mitsubishi → MELPS740Datasheet
M37410Mitsubishi → MELPS740Datasheet
M37412Mitsubishi → MELPS740Datasheet
M37413Mitsubishi → MELPS740Datasheet
M37414Mitsubishi → MELPS740Datasheet
M37415Mitsubishi → MELPS740Datasheet
M37416Mitsubishi → MELPS740Datasheet
M37417Mitsubishi → MELPS740Datasheet
M37418Mitsubishi → MELPS740Datasheet
M37420Mitsubishi → MELPS740Datasheet
M37421Mitsubishi → MELPS740Datasheet
M37424Mitsubishi → MELPS740Datasheet
M37524Mitsubishi → MELPS740Datasheet
M37450M2Mitsubishi → M37450Datasheet
M37450M4Mitsubishi → M37450Datasheet
M37450M8Mitsubishi → M37450Datasheet
MOS6502Generic → 6502Datasheet
6503Generic → 6502Datasheet
6504Generic → 6502Datasheet
6505Generic → 6502Datasheet
6506Generic → 6502Datasheet
6507Generic → 6502Datasheet
6508Generic → 6502Datasheet
6509Generic → 6502Datasheet
6510MOS → 6510Datasheet
6512Generic → 6502Datasheet
6513Generic → 6502Datasheet
6514Generic → 6502Datasheet
6515Generic → 6502Datasheet
7501Generic → 6502N/A
8500Generic → 6502N/A
8501Generic → 6502N/A
8502Generic → 6502N/A
8510Generic → 6502N/A
NCRNCR65C02Generic → 65C02Datasheet
NovatekNT6880Generic → 6502Datasheet
NT6881Generic → 6502Datasheet
NT68P1Generic → 6502Datasheet
RicohRP2A03Generic → 6502N/A
RP2A07Generic → 6502N/A
RP65C02Generic → 65C02N/A
RockwellR6500/11Rockwell → R6500Datasheet
R6500/12Rockwell → R6500Datasheet
R6500/13Rockwell → R6500Datasheet
R6500/15Rockwell → R6500Datasheet
R6500/16Rockwell → R6500Datasheet
R6501Rockwell → R6500Datasheet
R6502Generic → 6502Datasheet
R6503Generic → 6502Datasheet
R6504Generic → 6502Datasheet
R6505Generic → 6502Datasheet
R6506Generic → 6502Datasheet
R6507Generic → 6502Datasheet
R6511Rockwell → R6500Datasheet
R6512Generic → 6502Datasheet
R6513Generic → 6502Datasheet
R6514Generic → 6502Datasheet
R6515Generic → 6502Datasheet
R65C00/21Rockwell → R65C29Datasheet
R65C02Rockwell → R65C02Datasheet
R65C19Rockwell → R65C19Datasheet
R65C29Rockwell → R65C29Datasheet
R65C102Rockwell → R65C29Datasheet
R65C112Rockwell → R65C29Datasheet
SunplusSPL61ASunplus → 65N02Datasheet
SPL130ASunplus → 65N02Datasheet
SPL191ASunplus → 65N02Datasheet
SPL256ASunplus → 65N02Datasheet
SPL512ASunplus → 65N02Datasheet
SPL512BSunplus → 65N02Datasheet
SPL1000ASunplus → 65N02Datasheet
SPL1000BSunplus → 65N02Datasheet
SPLB10ASunplus → 65N02Datasheet
SPF02ASunplus → 65R02Datasheet
SPL02CSunplus → 65R02Datasheet
SPL02DSunplus → 65R02Datasheet
SPL03BSunplus → 65R02Datasheet
SPL03CSunplus → 65R02Datasheet
SPL05ASunplus → 65R02Datasheet
SPL05BSunplus → 65R02Datasheet
SPL06ASunplus → 65R02Datasheet
SPL06BSunplus → 65R02Datasheet
SPLB20ASunplus → 65R02Datasheet
SPLB20A1Sunplus → 65R02Datasheet
SPLB21ASunplus → 65R02Datasheet
SPLB22ASunplus → 65R02Datasheet
SPLB23ASunplus → 65R02Datasheet
SPLB24ASunplus → 65R02Datasheet
SPLB25ASunplus → 65R02Datasheet
SPLB26ASunplus → 65R02Datasheet
SPL128ASunplus → 65R02Datasheet
SPLG01Sunplus → 65R02Datasheet
SPF06A1Sunplus → 65S02Datasheet
SPF18A1Sunplus → 65S02Datasheet
SPF20ASunplus → 65S02Datasheet
SPF30A1Sunplus → 65S02Datasheet
SPF30BSunplus → 65S02Datasheet
SPL02ASunplus → 65S02Datasheet
SPCxxxSunplus → SunPlusDatasheet
SPCRxxxSunplus → SunPlusDatasheet
SPMCxxSunplus → SunPlusDatasheet
SPFA64ASunplus → SunPlusDatasheet
SPFA120ASunplus → SunPlusDatasheet
SPL08ASunplus → SunPlusDatasheet
SPL15ASunplus → SunPlusDatasheet
SPL15BSunplus → SunPlusDatasheet
SPL25BSunplus → SunPlusDatasheet
SPL25CSunplus → SunPlusDatasheet
SPL30ASunplus → SunPlusDatasheet
SPL31ASunplus → SunPlusDatasheet
SPL60ASunplus → SunPlusDatasheet
SPL190ASunplus → SunPlusDatasheet
SPMC65P1504AGeneric → 6502Datasheet
SPMC65P1502AGeneric → 6502Datasheet
SynertekSY6502Generic → 6502Datasheet
SY6503Generic → 6502Datasheet
SY6504Generic → 6502Datasheet
SY6505Generic → 6502Datasheet
SY6506Generic → 6502Datasheet
SY6507Generic → 6502Datasheet
SY6512Generic → 6502Datasheet
SY6513Generic → 6502Datasheet
SY6514Generic → 6502Datasheet
SY6515Generic → 6502Datasheet
SY65C02Generic → 65C02N/A
UMCUM6502Generic → 6502Datasheet
UM6507Generic → 6502Datasheet
UM6512Generic → 6502Datasheet
VLSI6502AGeneric → 6502N/A
VL65NC02WDC → W65C02SDatasheet
WDCW65C02SWDC → W65C02SDatasheet
W65C134SWDC → W65C02SDatasheet
W65C02GPMCUWDC → W65C02SDatasheet
WeltrendWT5090Generic → 6502N/A
WT5091Generic → 6502N/A
WT50P6Generic → 6502N/A
WT6148Generic → 6502Datasheet
WT6160Generic → 6502Datasheet
WT62P2Generic → 6502Datasheet
WT65F1Generic → 6502Datasheet
WT6511Generic → 6502N/A
WT6512Generic → 6502N/A
WT6512FGeneric → 6502N/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
ManufacturerModelProviderDatasheet
California Micro DevicesG65SC816Generic → 65816Datasheet
G65SC802Generic → 65816Datasheet
WDCW65C816SGeneric → 65816Datasheet
W65C802SGeneric → 65816N/A
W65C265SGeneric → 65816Datasheet
W65C816GPMCUGeneric → 65816Datasheet
MitsubishiM37906M4CMitsubishi → M7700Datasheet
M37906M4HMitsubishi → M7700Datasheet
M37906M6CMitsubishi → M7700Datasheet
M37906M8CMitsubishi → M7700Datasheet

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
ManufacturerModelProviderDatasheet
AMDAM29x305Generic → 8x305Datasheet
AM29x305AGeneric → 8x305Datasheet
LansdaleSL8X305Generic → 8x305Datasheet
PhilipsS8X305IGeneric → 8x305N/A
Scientific Micro SystemsSMS300Generic → 8x300N/A
SigneticsN8X300IGeneric → 8x300Datasheet
S8X300-1Generic → 8x300Datasheet
S8X300-2Generic → 8x300Datasheet
N8X305AGeneric → 8x305Datasheet
N8X305IGeneric → 8x305Datasheet
N8X305NGeneric → 8x305Datasheet

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
ManufacturerModelProviderDatasheet
Texas InstrumentsTMS1000Texas Instruments → TMS1000Datasheet
TMS1070Texas Instruments → TMS1000Datasheet
TMS1100Texas Instruments → TMS1100Datasheet
TMS1200Texas Instruments → TMS1000Datasheet
TMS1270Texas Instruments → TMS1000Datasheet
TMS1300Texas Instruments → TMS1100Datasheet

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 agatti@jabber.ccc.de on Jabber if you so fancy.

About

Plugins for the Hopper disassembler

License:Other


Languages

Language:Objective-C 86.8%Language:Assembly 10.1%Language:C 1.6%Language:Makefile 0.9%Language:Python 0.6%