Any use of this project is under your own responsibility.
You are expected to have enough knowledge to be able to build this yourself (it's a Maven project: search engines are your friend), to understand what it is supposed to do, to understand it is no magical tool that transforms a read-protected chip into a dump, to understand truth tables and basic minimization.
Please, do not come to me asking for hand-holding using or building this: my time is limited.
Keep in mind that, while the project supports a set of PAL devices, you might wish to modify it to support a specific configuration of a GAL, or even reading of other types of chip. This is on you and you will need basic Java knowledge to accomplish it.
The DuPAL Analyzer is a companion software to the DuPAL board. It uses the board's REMOTE CONTROL mode to remotely toggle the pins and read the outputs, and is meant to perform blackbox analisys on the registered PAL devices, which are a bit too much for the MCU firmware to handle by itself.
Despite the "DUmper" part of the name, this tool is NOT meant to produce 1:1 binary dumps of the content of a PAL device, it is meant as an aid to the reversing procedure of an unknown PAL, automating a good part of the black box analisys.
It will produce a JSON file containing every recorded state change of the PAL (outputs states at the beginning, applied inputs and output states at the end), that can then be converted into an espresso truth table or manipulated for further analisys.
The current DuPAL hardware is able to register only STABLE states out of a PAL device. Also, pins feeding back into themselves are NOT supported.
To see what this means, please have a look at the analysis document.
Also note that, as of now, SR latches with multiple set-reset conditions seems to confuse the analyzer. See issue #3.
The analyzer lets the user select which type of PAL is inserted in the board's ZIF socket, whether the IO pins that are set as outputs are known (which saves some time by avoiding autodetection), what is the board's serial interface, and where to save the output file. Once this is known, the application will:
The following PAL models are supported:
The format for command line execution is the following:
java -jar /path/to/dupal_analyzer.jar <serial_port> <pal_type> [<output_file> hex_output_mask]
The output mask is a byte represented as an hex value, where a bit is set when the corrisponding pin is considered an output. From MSB to LSB for a 20 pins PAL:
7 6 5 4 3 2 1 0
.----.----.----.----.----.----.----.----.
| 12 | 19 | 13 | 14 | 15 | 16 | 17 | 18 |
'----'----'----'----'----'----'----'----'
From MSB to LSB for a 24 pins PAL:
7 6 5 4 3 2 1 0
.----.----.----.----.----.----.----.----.
| 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 |
'----'----'----'----'----'----'----'----'
Setting the mask to 0x02
, for example, will notify the analyzer that pin 17 on a 20 pins PAL or pin 16 on a 24 pins PAL is configured as an OUTPUT.
Pay attention to the weird position for pin 19, that position is caused by a desire to save a few lines on the firmware.
If you wish to increase the verbosity of the analyzer, add the following parameter to the java
command:
-D"org.slf4j.simpleLogger.defaultLogLevel=debug"
Substitute debug
with trace
for an even increased verbosity. The default for this parameter is info
.
Make sure you have at least a Java 1.8 compatible JRE installed and have access to your serial port devices (In linux it's usually sufficient to add your user to the dialout
group).