Short: Disassembler for Intel 8080 processor Author: Martin Aberg Uploader: aGGreSSor (amitrans narod ru) Type: dev/cross Version: 2022 Requires: ABIv0; i386; InstallerLG Architecture: i386-aros Distribution: aminet ============================== F E A T U R E S ============================== dis8080 is an Intel 8080 instruction disassembler. It reads machine code from standard input and writes the disassembly to standard output. ============================ R E Q U I R E M E N T ========================== dis8080 tested and worked fine on the following configurations: - IcarOS i386 (Kickstart 51.51, Workbench 40.0, AROS ABIv0) - AROS One i386 (Kickstart 51.51, Workbench 40.0, AROS ABIv0) ================================= U S A G E ================================= dis8080 [-d ADDR COUNT] The option -d ADDR COUNT tells the disassembler to emit data definitions instead of instructions for COUNT bytes, starting at input offset ADDR. This option can be used multiple times. Output from dis8080 can be assembled with an assembler such as vasm or asmx. ============================= E X A M P L E S =============================== To disassemble the file example/add.bin, issue: 1.AROS> dis8080 < example/add.bin It generates the following output. ----------------------------------------------------- lxi b,L0009 lxi h,L000A jmp L000B L0009: mov d,d L000A: call L860A ret L000B = $000B L860A = $860A end ----------------------------------------------------- This does not look quite right, because: * The two "lxi" instructions hint that the values at label L0009 and L000A should be interpreted as data rather than instructions. * "jmp" is unconditional so the "mov" will not be executed. * The "jmp" target is inside the "call" instruction. * "mov d,d" is not a commonly used instruction. What is happening here is that the disassembler does not know that following the "jmp" are two bytes of data, after which the program instruction stream continues at address $000B. In other words, the disassembler has become "out of phase". It is common to encounter cases like this in production code. To get a more realistic disassembly, mark the addresses $0009 and $000A as data with the -d option: 1.AROS> dis8080 < example/add.bin -d 0x0009 2 ----------------------------------------------------- lxi b,L0009 lxi h,L000A jmp L000B L0009: db $52 ; 'R' L000A: db $cd L000B: ldax b add m ret end ----------------------------------------------------- Now this looks better as locations $0009 and $000A are interpreted as data rather than instructions. At label L000B the two data bytes in memory are added together. ================================ S O U R C E ================================ Aminet backport: http://aminet.net/package/dev/cross/dis8080 Compiled and improved by ______ ______ ______ ______ ______|:: .__|:: .__|_____ ______|:: ___|:: ___|______ _____ |: , |: | |: | |: ,_|: ,__|:___ |:___ |: - |: ,_| |__|___|______|______|___| _____|______|______|______|___| home cross-compilation factory