So, I always hear AS fanboys say AS is, in fact, superior to ASM68K because AS actually assembles Z80 instructions. After having had to use AS for quite a few weeks, I just got so tired of its broken ass bullshit, that I wanted to do something about this. That, and I wanted to learn more about Z80 in general. I had intended to do that for years, but it seemed so foreign to me. Because of that, I created a set of macros for ASM68K to 100% accurately assemble Z80 code. Oh, and you may think its slow? Hah, what a joke! The worst I had any sound driver assemble, is... Half a second. And that is, S3K's sound driver, with all the DAC and some music and such. That's right, my macro set actually assembles Z80 code faster than AS does natively. So much for ASM68K's macro language having "poor set of features and a lot of restrictions", huh? So, banter aside, what does it actually do? Well; It assembles Z80 code, including undocumented instructions, It is lightweight and super fast, Checks that offsets in instructions like jr and djnz, and ix/iy+ offsets are signed, You can actually use Z80-style numbers (like 0F0h is completely OK), properly detects the difference between immediate and address, Is just super badass, Works with any Z80 code (with slight modifications, see readme.txt), The whole macro set is just 35KB, And I will throw a Sublime Text 3 syntax highlighter in just because I can. Oh, did I mention its super fast? You can assemble actual games comfortably under a second! Holy fucking shit!!! Ok so, the readme will have any specifics on the limitations what this brings. Afterall, its not a perfect creation, native support would always be ideal, but it still works great for what it is. I've tested a fair few things with this, including: Dual PCM, MegaPCM, Sonic 1 DAC driver, S&K sound driver, GEMS (with few changes, noted in the source), Westone sound driver, and Terpsichorean. All work 100% and I have been able to produce bit-perfect. That sounds great?! But, how do you install it? Why simply, put in LANG.ASM in the root of your disassembly (or wherever you'd wish to), and include it in. Or alternatively, make a separate build process for the driver specifically, if you wish to. Whatever is the case, any Z80 code that relies on pointers or relative jumps, should be placed between 2 z80prog macros, where the first one will specify the Z80 RAM location code is ran at. Typically, for drivers this is 0, and for anything using bank, it will be $8000+. Then just write your z80 code, with the limitations laid out in the readme. If you want examples, just check out the folders. So, what are we waiting for? The download, of course. If you find any bugs, report them to me, and I'll give in some effort to fix them up. Of course, here are the people who helped me with this project: MarkeyJester for some help with Z80 instructions, Vladikcomper for providing me with MegaPCM and Terpsichorean, ValleyBell for prior help with S&K sound driver and some misc Z80 questions I threw at his way, And of course SN Systems who made ASM68K, clearly the best and most powerful 68000 assembler.