Skip to content

mnaberez/k0dasm

Repository files navigation

k0dasm

Overview

k0dasm is a disassembler for a very small number of NEC 78K0 binaries for one specific microcontroller. It was only developed to disassemble the firmware of the Volkswagen Premium V car radios made by Delco. These radios use the undocumented NEC µPD78F0831Y microcontroller, which is similar to the µPD78F0833Y. A companion program, k0emu, is a 78K0 emulator developed for the same project.

This disassembler only supports the µPD78F0831Y microcontroller. It is unlikely to work with other microcontrollers without significant modifications to the source code. There are no plans to add support for any other microcontrollers. No assistance of any kind is available for using or modifying this disassembler.

Features

  • Identical Reassembly. The assembly language output of k0dasm will assemble to a bit-for-bit exact copy of the original binary using as78k0. This has been tested using several real firmware binaries.
  • Code / Data Separation. Starting from the vectors at the bottom of memory, k0dasm uses recursive traversal disassembly to separate code from data. This automates much of the disassembly process but indirect jumps (br ax) will still need to be resolved manually.
  • Symbol Generation. k0dasm tries not to write hardcoded addresses in the output when possible. It will automatically add symbols for hardware registers and vectors, other memory locations used, and will add labels for branches and subroutines.

Installation

k0dasm is written in Python and requires Python 3.4 or later. Packages are available on the Python Package Index (PyPI). You can download them from there or you can use pip to install k0dasm:

$ pip install setuptools k0dasm

Usage

k0dasm accepts a plain binary file as input:

$ k0dasm input.bin > output.asm

The file is assumed to be a ROM image that should be aligned to the bottom of memory. For example, if a 32K file is given, k0dasm will assume the image should be located at 0x0000-0x7FFF. After loading the image, the disassembler reads the vectors and starts tracing instructions from their targets.

Author

Mike Naberezny