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.


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:

%.hex: %.asm
      zasm $<

%.hex: %.z80
      zasm $<

%.8xp: %.hex
      z80-conv $< $@

%.sent: %.8xp
      tisend $<

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 far away.
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

Bug list

You may contact me at