Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
This is a WiP conversion and rewrite of the z88dk wiki. The original content is available at http://www.z88dk.org/wiki
An Introduction to Z88DK
Z88DK is a complete development toolkit for the z80, z180 and rabbit processors.
It contains two C compilers, an assembler / linker / librarian, data compression tools and a utility for processing the raw binaries into forms needed by specific targets.
It comes with an extensive library of functions written in assembly language that implements the C standard and many extensions. It holds the largest repository of z80 code on the internet.
Development in assembly language or C is completely integrated; projects can be 100% assembler, 100% C or any mixture of the two. The toolset treats both as first-class languages and is designed to make it very easy to mix them at will with C and asm functions being able to call each other or make use of the hand-optimized library functions.
The toolset is modern and has modern features. Most z80 assembly tools are simple in that they assume a small memory space (confined to 64k) or lack linking capability. Z88DK is able to generate ROMable code and code for multiple memory banks (bank assignment still requires human direction) and the linking capability means large bodies of code or data can be shared in libraries between projects with the linker only drawing out code and data that is actually used by a linking program.
We compare Z88DK with other commercial and non-commercial offerings using benchmarks to identify where Z88DK can be improved. Z88DK compares favourably and you can see that for yourself by investigating the benchmarks if you are interested.
The classic library is z88dk's traditional library and is written with in a mix of assembler and C.
The classic library supports over 70 platforms and provides many extensions (graphics, sound etc) as well as broadly supporting the C library standard.
The new library is C11 compliant and has...
The new library supports a restricted number of targets, and notably doesn't (yet) support file I/O. The supported targets are: +cpm, +rc2014, +sms, +z80, +z180, +zx
This is a quick overview of the tools included in Z88DK.
ZCC is the toolchain's front end. zcc can generate an output binary out of any set of input source files.
SCCZ80 is z88dk's native c compiler. sccz80 is derived from small c but has seen much development to the point that it is nearly c89 compliant.
ZSDCC is z88dk's customization of the sdcc optimizing c compiler. Our patch makes sdcc compatible with the z88dk toolchain, gives it access to z88dk's extensive assembly language libraries and ready-made crts, addresses some of sdcc's code generation bugs and improves on sdcc's generated code. It has very good standards compliance with c89, some c99 and a little c11.
Z80ASM (not to be confused with several external projects called z80asm) is a fully featured assembler / linker / librarian implementing sections.
Z80NM is z80asm's companion library dumper. It can provide a listing of functions or data encoded in an object or library file.
APPMAKE processes the raw binaries generated by the toolkit into a form suitable for specific target machines. For example, it can generate intel hex files, tapes, ROMs, etc.
TICKS is a command line z80 emulator that can be used to time execution speed of code fragments.
ZX7 is a PC-side optimal lz77 data compression tool with companion decompression functions in the z80 library.
DZX7 is a PC-side decompressor counterpart to zx7.
These tools are not normally directly invoked by the user:
M4 acts as z88dk's macro preprocessor and can optionally process files ahead of the c preprocessor or assembler.
ZCPP is the c preprocessor invoked for sccz80.
ZSDCPP is the c preprocessor invoked for zsdcc.
ZPRAGMA is used by the toolchain to process pragmas embedded in c source.
COPT is a regular expression engine that is used as peephole optimizer for sccz80 and as a post-processing tool for both sccz80 and zsdcc.