Welcome to the Zasm homepage. This is a small project that is currently being devoloped
to assemble assembler for the Z80. Standard assembler, macros, and more. Enhancements
are a definate possibility such as intergration into a TI calc emultator for debugging purposes. The
entire project is geared torward sucessful assembly of code designed for the TI graphing calculators
based on the Z80 (TI-73,82,83,85,86). The 68k processor might be included later for the TI-89 and TI-92
calculators but then we might have to change the name :).
I added an improved error reporting scheme: zasm now reports the original location, as well as the
location of definition that caused the final error.
There is a range check for arguments. This will warn the user if a "jr" jumps out of the possible range.
For compatibility with TASM: "#define EQU ..." only gives a warning, instead of a syntax error.
With de devel version, the "label: code" construct did not work, it is solved now.
The release version of zasm-0.1b0 didn't compile because of a fault in the creation of the archive.
Besides, some incompatibilities with TASM showed up. I think they are solved in the b1 version.
Also, there was a fault in z80-conv.
I wrote a testing program myself, and after correcting some glitches in the way the linker handles local labels,
ZASM seems stable enough for me to call it beta.
Two new directives: .block and .fill. Their syntax is:
[/label/] .block /number_of_bytes/
[/label/] .fill /number_of_bytes/[,/value/]
.block just skips /number_of_bytes/, and .fill fills /number_of_bytes/ with /value/, or 0xff ($ff,0b11111111,255)
More bugfixes, thanks to Michael Bruno for pointing them out. The bugs were:
The development version is also updated, without change in name.
- an introduced bug: labels referred to the begin of the previous opcode.
- a segfault in the way the linker handles expressions
- sometimes command-line options changed for apparently no reason
- zasm can now be case-insensitive. It is now the default to be case insensitive, but the option "-cs" or
"--case-sensitive" makes zasm case sensitive
One bugfix: $ referred to the end of the current instruction. In Tasm this is to the beginning.
Now $ refers to the address of the beginning of the current instruction, while $.end refers to the end,
just link $ did before.
For the people that want to make changes inthe source code, I have a "development version" that includes the tools
I use for autogenerating some of the c files. To compile these, you will need GHC
I did a complete rewrite and added a linker. The documentation is not yet ready, but for normal operation "zasm --help"
should do the trick. The converter moved out of zasm itself and is called z80-conv now. A new feature is a small send
program (built on libti*). Because of this last things, zasm doesn't need libti* anymore.
z80-conv and tisend (the sending utility) are in the z80-tools package.
The tools are suited for makefiles, for example, use the lines:
z80-conv $< $@
Currently only ti83+ programmes are supported by "z80-conv", applications can be made by "appsign". For the other
calculators, if you need it, and know how the file is structured, I can implement it in about 2 minutes (for normal
ti files). "z80-conv" uses libtifiles, so I need only the type, and the internal format on the calculator.
For example, a ti83 program starts with its size (word, little endian), followed by the bytes (0xbb, 0x6d), and
the program in binary.
After a long time, again a new alpha release. There is one bugfix, and a new feature. The opcodes
"ld (IX),a", were assembled as "ld (IX+a),0". The new feature is an "align" directive, witch allows
a programmer to align a block of data at a certain address or multiple. I am trying to do a real-life
test, by writing a small game. Until now, zasm didn't make faults, so it looks fairly stable.
A new alpha release is ready. Some bugs are fixed, but it still needs a lot of testing.
Finally, this project is back up. I, steven Deprez, started writing an assembler some 1.5 month ago, and
can release an alpha version. This release is started from scratch and works quite well (doesn't fail on any
of my own programs). It supports TASM-style as well as ZDS-style macro definitions, and interpretes the ti83+ include
files for both assemblers. Still, it needs a lot of testing, and actually working support for other calcs
that the ti83+.
Bad news! Tristian has abandoned this project some time ago because of a hard disk
crash. I Laine Walker-Avina, developer of Asmstudio,
am taking the responsibility of maintaining and developing Zasm further. Let
me know if you want to help out. :-)
Another month rolls around with some maybe unexpeced news. I have deleted
over 80% of the old code and I am currently rewriting the entire assembler. There
should be speed improvements and less buggy code. Not to mention that every function
is going to be documented and the actual behavoir is going to be PLANNED. AHHHHHH!
By golly, this code just might actually work!
It's near midnight and I updated the Zasm source. Got instructions
like "ld a, $FF" to work. However, it's not complete and there are bugs.
The code is far from completion and most of it will need replacing. Also,
I was just loaned a web-cam and my job was to make a driver for the
software Motion. This can take up some time but not much
since I finished a working modification in 5 hours (includes hacking the
cam, studying the code, and learning libJPEG). Let's put it this way,
Zasm code is 100 times worse than the driver :P. For thoes interisted
about the modifications to motion (I made it more sane too) for the
Axis 2100 camera, email me. Oh, and Hawaii was great.
No software update, just a status one. I got my wisdom
teeth pulled just a few days ago and so I haven't been
feeling like updating software. Also, don't expect updates
for a while now as I'm heading of to Lake Tahoe and then to
Hawaii for a week. I'll be back on the 25th so maybe 2 weeks
from now I'll post another update.
More bug fixes and other enhancements. Things like labels being loaded,
byte sizes, and more. However, none of the enhancements are useful at this point.
Really they have no effect yet. Wait a few more days/weeks and they will be used
to compile something useful. The full instruction set being implemented is not that
Bug fixin' time. I have once again showed my skillz at producing horrible
code. I fixed some wierd bugs and I made my code syantax a little cleaner (I
fixed some gloabal variables by correctly declaring them as extern's). Now it
is back to work on some more features. I expect to implement byte offsets,
instructions like "ld a,0xFF", and #defines. Hopefully, labels will soon follow.
At that point I will try uploading code to the calc. Soon my friends, soon.
It's the first of the month and I have another snapshot. It is mainly a
bug fixer/introducer. #include works just fine (although it is UGLY code) and
a currently exisiting bug is easily worked around. I have yet to put it onto a
TI-85 to see if it really works. Once again, this program CDSC (Cant Do Shit
Correctly) so it is only ment for the very interested and devolopers.
Yet another update to the source. Less bugs but still bugs, including
introduced ones. Oh well. That happens when entire functions get rewritten.
Anyways, my test code (temp.asm) compiled when I fixed the source to get
around a bug. I started a bug list too.
Update on the source. Latest snapshot includes a #include preprocessor :).
Still many bugs to work through. I am also getting wierd segmentation faults in
fgets() for specific assembler files. This code needs to become cleaner (ie
instead of switching from buff[i] and *(buff + i) again and again, keep it
constant). So far nothing assembles right.
The web site is up! I have include a non-working snapshot of the project (includes .o
and backup files :P).
- zasm 0.1 beta 4
- zasm 0.1 beta 3
- zasm 0.1 beta 2
- zasm 0.1 beta 1
- zasm 0.1 beta 0
- zasm 0.1 alpha 3
- zasm 0.1 alpha 2
- zasm 0.1 alpha 1
- zasm 0.1 alpha 0
- z80-tools 0.0 alpha 0
- zasm 0.0 alpha2
- zasm 0.0 alpha1
- zasm 0.0 alpha
- development version
incompatibility with tasm: $ refers to the end of an instruction, but should to the beginning.
Fixed: 2006-06-12: version 0.1 alpha 1
You may contact me at email@example.com.