Giter Site home page Giter Site logo

hopper-plugins's Introduction

Hopper Plugins

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.

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 → M740Datasheet
M37409Mitsubishi → M740Datasheet
M37410Mitsubishi → M740Datasheet
M37412Mitsubishi → M740Datasheet
M37413Mitsubishi → M740Datasheet
M37414Mitsubishi → M740Datasheet
M37415Mitsubishi → M740Datasheet
M37416Mitsubishi → M740Datasheet
M37417Mitsubishi → M740Datasheet
M37418Mitsubishi → M740Datasheet
M37420Mitsubishi → M740Datasheet
M37421Mitsubishi → M740Datasheet
M37424Mitsubishi → M740Datasheet
M37524Mitsubishi → M740Datasheet
MOS6502Generic → 6502Datasheet
6503Generic → 6502Datasheet
6504Generic → 6502Datasheet
6505Generic → 6502Datasheet
6506Generic → 6502Datasheet
6507Generic → 6502Datasheet
6508Generic → 6502Datasheet
6509Generic → 6502Datasheet
6510Generic → 6502Datasheet
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 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 via brew 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.

ManufacturerModelProviderDatasheet
California Micro DevicesG65SC816Generic → 65816Datasheet
G65SC802Generic → 65816Datasheet
WDCW65C816SGeneric → 65816Datasheet
W65C802SGeneric → 65816N/A
W65C265SGeneric → 65816Datasheet
W65C816GPMCUGeneric → 65816Datasheet

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 via brew 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.

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:

  • 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 File Loader Plugin

version 0.2.1

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 to be installed in order to work properly)

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.

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.11.7 or later to work. They may work on older versions but they are neither tested nor supported on anything older than v3.11.7.

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.

hopper-plugins's People

Contributors

agatti avatar bryant1410 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.