************************************
* 8-bit CPU Reassembler package *
* incl. PurePASCAL GEM source code *
************************************
Program author :
Jens Schulz
Rosenstrasse 5
D-25368 Kiebitzreihe
Germany
****************************************************************************
Reassembler package for these 8-bit CPU processors :
----------------------------------------------------
- INTEL 8051/52/252/535 microcontroller
- INTEL 8048 microcontroller series
- Zilog Z-80 CPU
- Mostek/Rockwell 6502-CPU
- Motorola 68HC11 microcontroller
- INTEL 8080/85-CPU
*****************************************************************************
System: ATARI ST/TT/FALCON
GEM / MultiTOS
screen resolution independent > 640*400 dots
requires 1 MB RAM
****************************************************************************
These programs are Freeware
You can copy and swap these programs freely without any charge. Sale or
use in any other software for profit is strict forbidden. It's free for
BBS downloading and PD collections.
***************************************************************************
What's a reassembler ?
----------------------
First, let's talk about the PurePASCAL GEM source code. If you are a GFA-
or OMIKRON BASIC programmer, you can learn GEM programming under PurePASCAL.
I've put the complete PurePASCAL 1.1 GEM source code of the 8080/85 reassemb-
ler in the folder SOURCE85.PAS.
The source code is very useful for learning the main aspects of screen
resolution independent GEM programming. The source code shows you the
handling of dialogues, GEM redraws, VDI 109 and dynamic memory allocations.
I've programmed in many programming languages GEM programs. PurePASCAL is
the easiest way to learn GEM. Forget all these 'damned' BASIC POKES and
use the power of PP GEM-handling. PP GEM programming is easier than C
GEM handling.
Reassembler
-----------
Reassembler are very useful for decoding machine language programs. If
you've never programmed 8-bit CPU's in assembler, you don't need these
programs. You can only use the PP source code for your own programs.
Next chapters are only for assembler experts :
----------------------------------------------
A reassembler is an extended disassembler. It can decode machine programs
with mnemonics and labels. Reassemblers insert labels of jumps or absolute
addresses in the disassembler listing.
Reassembler listing are address independent. You can use the generated
ASCII outputs for your assembler programs.
The Z80- and 6502 reassembler additional support the symbolic reassembling.
Normally the reassemblers produce automatic labels, like LXXXX. XXXX is
the hexadecimal address of the label. Symbolic reassemblers can exchange
these automatic labels with symbolic names. Symbolic reassemblers need
a symbol table. These symbol tables exist often for the standard home
computers (C64, Amstrad CPC 464 etc.). These home computers use 6502 or
Z 80 CPU's.
Who uses a reassembler ?
------------------------
1.) very rare use :
You believe, that your high level compiler codes ineffective or
wrong code.
2.) rare use :
You've formatted or lost your assembler source code of your last
machine control board programming.
3.) normal use :
You've got a program from a programming competitor. You will do all
for cracking his 'Hyperpokes'.
4.) worst case :
The competitor uses self modifying code or the microcontroller allows
the the locking of the ROM, like 68HC11. That's the worst case for
reassembler use.
****************************************************************************
General handling of the reassemblers
------------------------------------
The six reassemblers have only a few differences in their programming
handling. The most menu entries are equal. Special functions of each
reassembler is described in a separate info file.
1. Max. code size for the reassemblers
---------------------------------------
The max. size of a code block is restricted to 8 KByte, why ?
8 KB machine code produces thousands of reassembler lines.
The reassembler label handling allows the addition of code segments.
Additional, you can concat the ASCII outputs with a standard ASCII
editor.
2. Reassembling of the code
---------------------------
- load your max. 8 KB code file (.BIN) from disc (Menu File)
- reassemble the code with the key F1 or the menu entry 'Reassemble'
- the reassembler decodes the whole binary code segment with all
machine command and symbolic labels.
- you can scroll the output listing with mouse or cursor keys and
change the output window size.
3. Set of the start address (ORG)
---------------------------------
Normally, the reassembler uses the base address $0000 for the code start.
This code start address is called the origin address (ORG). You can set
this ORG address on a new value, for example $1000.
-> Menu File, Set start address
4. Set of a file offset
-----------------------
Normally, the reassembler starts at the first byte of your binary code
file. You can change the reassembler start in your file. For example,
you set this file offset to $100. Now, the reassembler ignores the first
256 bytes of your binary code file.
The second way is the split of your code file with a debugger.
-> menu File, set start address
5. Reduction of the reassembler ASCII output
--------------------------------------------
The reassembler produces an enormous number of output lines. You can
limit the number of bytes for decode.
You must set to max. reassembler decode length in the menu File (Set start
address). Normally, the reassembler decodes the whole code block.
For example, you can limit the max. reassembler decode length to 100 bytes.
6. Jump to a code address
-------------------------
You can use the cursor keys or the mouse for the scrolling of the
reassembler output. Additional, you can jump to a specified code
address.
-> Menu file, Jump to address
Please input the hexadecimal address of the new output listing start.
7. Hiding of code and addresses
-------------------------------
Normally, the reassembler output includes code, addresses, mnemonics
and label. Code and addresses aren't needed for assemblers. Assemblers
only use label und mnemonics for new compilations.
-> Set hiding of code and addresses (Menu File, Show code/addresses)
8. Reassembler output as ASCII file or printer output
-----------------------------------------------------
You can store or print reassembler outputs.
-> Menu Output, Printer or File
After the selection of printer or file, you must reassemble the code.
**************************************************************************
Label handling / Symbolic reassembling
--------------------------------------
1. Label handling
-----------------
The reassembler uses a 64 KB array for storing label positions. This
label list is normally cleared by every reassembler start.
The menu entry 'Clear automat. label' sets or resets the automatic
clear of this label list.
You can disable the automatic clearing of this list. Now, you can add
several other code blocks to the label list. This option is very useful
for the detection of jumps from other code segments in the actual code
segment.
2. Save label file
------------------
You can save the actual label list on disc for later analysis of the
code. Label list files have the file extension .LAB.
3. Load label file
------------------
You can load the 64 KB label list file from disc. The clear of the
label list will be disabled.
Symbolic reassembling
---------------------
Symbolic reassembling is only supported by the Z-80 and 6502 reassembler.
Z80 and 6502 processor are often used for home computers, like C64 or
Amstrad CPC 464.
For these home computers exist symbol tables of important ROM and port
addresses.
Main differences between disassembler and reassembler decoding :
----------------------------------------------------------------
- Disassembler : generates jumps/absolute addresses in hexadecimal
terms, like LDA $12AE
- Standard reassembler : generates jumps/absolute addresses in auto-
matic labels, like LDA L12AE. Reassembler
outputs are address independent for assemblers.
- Symbolic reassembler : generates jumps/absolute addresses with your
symbols, like LDA VALUE_1. You can find
important ROM and port addresses much easier.
1. Definition of symbols
------------------------
- max. 2000 symbols are allowed
- max. symbol length = 8 characters
All symbols are written with a standard ASCII editor in an ASCII file.
The ASCII file has the file extension .LBI. The symbol addresses must
be specified in hexadecimal form.
Symbol file example (6502.LBI):
-------------------------------
POS_1=203
LOOP=20D
LOOP_1=214
SET_TST=219
PROC_1=223
PROC_2=22E
VALUE_1 = 68
VALUE_2 = 69
2. Import of ASCII symbols :
----------------------------
-> Menu Symbols, Import symbols
Symbol file has the file extension .LBI. The reassembler imports this
file and sort it by address. Now you can use this symbols for your
next reassembler run.
3. Generating of a symbol file
------------------------------
After the import of a symbol file, you can generate a compact label
file. This label file stores all symbolic informations in a compact
and sorted form. This label file will be loaded faster than a ASCII
symbol list.
Label symbol files has the file extension .SYM.
4. Load a symbol file
---------------------
The menu entry loads compact label symbol files with the file extension
.SYM.
***************************************************************************
Colors of reassembler lines
---------------------------
If you use the reassembler with color monitor (min. 640*400 16 colors),
then the reassembler use colored lines for extra informations.
- Red color : address has a label
- Black color : mnemonic has absolute address/jump
- Blue color : no label/absolute information
The color red has the main priority. It can overwrite black informations
with red informations.
***************************************************************************
Special control und port addresses
----------------------------------
The INTEL 8051-series and the Motorola 68HC11 have special function
registers. The reassembler use this SFR names instead of automatic
labels.
The 68HC11 reassemblers allows the disabling of this register name
display.
Keyboard shortcuts
------------------
Overview of the standard keyboard shortcuts of all reassemblers.
Menu File
---------
Load code Control L
Set start address Control S
Jump to address Control A
Reassemble Key F1
Exit program Control Q
Menu Output
-----------
Screen Control B
Printer Control P
File Control F
Menu Label
----------
Load label file Control T
Save label file Control N
Clear autom. label Control C
*****************************************************************************
Source code of the 8080/85 reassembler
--------------------------------------
The 8085 reassembler source code is available in the folder SOURCE85.PAS.
You can use this source code free for your own Pure PASCAL GEM or
reassembler experiments. All other reassembler source codes aren't free
and not available for programmers.
Files of the source code :
--------------------------
Compilation: only compiler flag Z is set, stack size 16384 bytes
REASS_85.PAS - Source code of 8080/85 reassembler
REASS_85.RSC - Resource file of 8080/85 reassembler
REASS_85.I - Resource file constants (Interface 2.2 RCS PASCAL output)
REASS_85.HRD - RCS Interface 2.2 RCS info file
GEMINIT.PAS - Include file for GEM init
GEMINIT.PPU - GEM-Init as UNIT
******************************************************************************
Other free PD-/Shareware assemblers
-----------------------------------
The german Computer Club Elmshorn has collected a lot PD-/Shareware
assemblers. You can get these assemblers without any charge. Select
the disc number and send me the empty discs and the postage costs for
return.
Short information about the PD list codes :
X = runs on every ATARI system (min. 1 MB)
S = runs only on ST/STE
G = GEM program
N = TOS/TTP programm
A = screen resolution independent
M = only in monochrome ST-High
HD = needs 1.44 MB disc
Asterix : quality level
------------------------------- (Assembler) -------------------------------
31 68000-ASSEMBLER-Package MXN *
58 Disassembler 68000 AXN
95 Disassembler 68000 AXN
98 Turbo-Ass 1.72 & Debugger BSP **
143 Assembler 6303 AXN *
143 Assembler 65c02 AXG *
146 Z-80 Crossassembler MSN *
220 Sharp Pocket Assembler MSN *
263 68000-Assembler (incl. ASM-Source) AXN *
263 8048-Assembler/Disassembler (Incl. ASM-Source) AXN *
300 Assembler NEC 78310/312 AXN *
300 Assembler MCS 48 AXN *
300 Assembler 8051 AXN *
341 Desert Drain 1.1 680xx-Reassembler AXG *
380 Desert Drain 1.3 680XX-Reassembler AXG **
450 6502-Emulator-Demo AXG **
457 GNU-Assembler 1.38 AXN **
505 TurboAss & Debugger 1.77 AXP **
580 MIT2MOT-Konverter GNU68000-Syntax to Motorola AXN *
611 6502-Disassembler AXN *
721 Crossassembler 6800/02/04/05/6303 AXN **
721 Crossassembler 6809/6811 AXN **
721 Crossassembler Z80/HD64180 AXN **
721 Crossassembler 8080/85 AXN **
721 Disassembler 68000 AXN
721 Assembler HP-48 0.99b AXN **
748 FAS Crossassembler RCA 1805 HD AXN **
748 FAS Crossassembler 2650 SC/MP II HD AXN **
748 FAS Crossassembler 6301 HD AXN **
748 FAS Crossassembler 6805 HD AXN **
748 FAS Crossassembler 6809 HD AXN **
748 FAS Crossassembler 6811 HD AXN **
748 FAS Crossassembler Zilog Z8 HD AXN **
748 FAS Crossassembler Zilog Z80 HD AXN **
748 FAS Crossassembler TI 7000 HD AXN **
748 FAS Crossassembler 6502 HD AXN **
748 FAS Crossassembler Intel 8048 HD AXN **
748 FAS Crossassembler Intel 8051 HD AXN **
748 FAS Crossassembler Intel 8096 HD AXN **
748 FAS Source codes (.LZH) HD AXN **
------------------------------ Assembler (DSP 56001) -----------------------
502 DSP-56000/01-ASSEMBLER AXN **
682 DSP-Shell 1.0 for DSP-ASSEMBLER AXG **
756 DSP 56001-Disassembler (.LOD) AXN **
756 DSP converter .OUT to .LOD AXN *
***************************************************************************
Bug reports
-----------
The coding of reassemblers is a very hard work. Thousands of bit combina-
tions must be checked. These 6 reassemblers was designed and checked in
1 month ! That's a every short developing time.
If you find some bugs in the reassemblers, please inform me. I will send
you an update.
**************************************************************************
Soft- and hardware system
-------------------------
The reassemblers were programmed with :
- ATARI TT 4MB/105MB HD and Proscreen TT/PTC 1526
- PurePASCAL 1.1 Application Systems Heidelberg
- Interface 2.2 RCS
*************************************************************************
Epilogue
--------
ATARI systems need new software ideas. We must enter in the classic
areas of PC software. ATARI programs must have the lower price and the
better quality as PC applications. Please, don't write the REVERSI
number 1000. Take your programming power for new application areas.
Have a lot fun with the reassemblers !
Jens Schulz
18th april 1994