==============================================================================
[   THE KAY*FOG RBBS  |  CPM-CC14.ART  |  posted 01/18/86  |  163 lines  9k  ]

          The CP/M Connection                   Originally published in    
                  by                               Computer Currents       
             Ted Silveira                           2550 9th Street        
  (copyright and all rights reserved)             Berkeley, CA  94710      



                               November 5, 1985
                           ONE FOR THE PROGRAMMERS

     In my last column, I mentioned some books that will introduce you to 
the inner workings of CP/M and assembly language.  If that aroused your 
curiosity, or if you're already a programmer, you'll also want to start 
collecting some of the assembly language utilities available from the 
public domain.  These utilities were written by and for programmers, 
patchers, and other people who like to know what's going on inside their 
computers.  (If you're not interested in assembly language, just skip to 
the end to see what's coming up next time.)


[TWO KINDS OF ASSEMBLY LANGUAGE]

     The CP/M operating system was originally designed for the Intel 8080 
microprocessor chip and written in 8080 assembly language (the native 
language of the 8080), and all its accompanying tools are designed to work 
in that language.  Most modern CP/M computers use the newer Z80 chip 
instead of the 8080.  The Z80 can execute all the instructions that the 
8080 can plus a number that the 8080 can't, so a Z80 chip can run any 
program written in 8080 assembly language, but an 8080 chip can't 
necessarily run a program written in Z80 assembly language.

     Most public domain assembly language programs are written in 8080 
assembly language, the lowest common denominator.  Lately, however, more 
programs are being written in Z80 assembly language to take advantage of 
that chip's extra power.  Since almost all CP/M computers now use the Z80 
chip, you probably won't have any trouble running either kind of program.  
You will, however, need a different set of tools for each language--you 
can't feed Z80 assembly language to an 8080 assembler and vice-versa.


[ASSEMBLERS]

     You need an assembler and a loader to turn an assembly language source 
file into a runnable program (a COM file).  Digital Research's ASM.COM and 
LOAD.COM are the standard 8080 assembler and loader.  They aren't public 
domain, but they are included with all CP/M 2.2 computers (CP/M Plus owners 
get the MAC assembler instead).  With these two, you can assemble most 
public domain 8080 assembly language programs.  You can't, however, 
assemble an assembly language file that uses _macros_ or external _library 
files_.  For these, you need a macro-assembler like Digital Research's MAC.  
Unfortunately, there is no 8080 macro-assembler available in the public 
domain.

     You can find several Z80 assemblers in the public domain.  The best 
I've found is Z80MR, a macro-assembler, which you may also find under the 
names ZASM and ZMAC.  (Just to confuse matters, there is another public 
domain Z80 assembler circulating under the name of ZASM.)  With this 
assembler, you can use the Digital Research loader LOAD.COM, which you 
already have.

     No matter whether you're using 8080 or Z80 assembly language, you can 
replace LOAD.COM with the public domain loader MLOAD.COM.  MLOAD is faster 
than LOAD and can be used (in place of DDT) for installing assembly 
language patches.


[DEBUGGERS]

     A debugger is a very useful program that lets you examine, modify, and 
even trace (execute instruction by instruction) another program in memory.  
It's useful not only for debugging programs but also for patching them to 
run on your own computer.  The standard 8080 debugger is Digital Research's 
DDT, which you should have received with your computer (CP/M Plus users get 
SID instead).  

     There is no alternative to DDT in the public domain--you don't need 
one--but there is a useful set of patches to DDT that you can find in the 
library file RDDT.LBR.  The most useful patch allows you to specify where 
in memory DDT will load itself.  By loading DDT lower than you usually 
would, you can examine and modify those parts of CP/M that DDT normally 
overlays.

     For debugging Z80 assembly language programs, there's a new public 
domain program called Z8E, a terrific tool that does everything DDT does 
and more.  It's most fascinating feature is a trace function that executes 
a program step by step.  During the trace, Z8E shows you the assembly 
language instructions with an arrow pointing to the instruction currently 
being executed.  At the same time, Z8E shows you what's happening in each 
of the Z80 chip's registers (on-chip memory areas) so that you can follow 
the effects of each instruction.  Watching the contents of the registers 
change while the pointer arrow steps through a program can be mesmerizing 
(if sometimes incomprehensible).  Z8E has a few problems--it gets lost if 
you try to trace through CP/M itself--but it's close to being a dream tool.


[DISASSEMBLERS]

     A disassembler lets you take a COM file (a runnable program) and 
recreate the assembly language source file that it came from.  This kind of 
tool isn't for everybody, but it's invaluable for learning how someone 
else's program works (or doesn't work).  And disassembling a well-written 
program, even a small one, will teach you a tremendous amount about 
programming in assembly language.  It's also sometimes the only way to 
modify a program written for one computer so that it will run on your own.

     The best public domain 8080 disassembler is RESOURCE.  It's been 
around for years, and it's quirky in some ways, but it does the job.  Best 
of all, it's interactive.  Unlike some "brute force" disassemblers, 
RESOURCE lets you decide whether a particular byte is an assembly language 
instruction or a value to be used by the program.  

     My favorite Z80 disassembler is DASM, a Z80 version of RESOURCE.  It 
has all of RESOURCE's good features plus a few improvements.

     Recently, however, a challenger has appeared from England.  DAZLSTAR 
(DazzleStar) is an amazing piece of work.  It has more features than DASM, 
including some that make it much easier to trace a subroutine and then 
return to your starting point.  It also--believe it or not--looks and acts 
a lot like WordStar, complete with on-screen menus and cursor movement 
commands.  It's a complicated program (most disassemblers are) that I 
haven't really learned yet--when I need a disassembler I still tend to 
reach for DASM.  But I have the feeling that once I get used to DAZLSTAR, 
I'll be converted for life.  If this is a sample of English programming, 
someone ought to set up an import business.


[TRANSLATORS]

     People who write a lot of assembly language programs say that once you 
start using Z80 assembly language, you'll never want to go back to 8080--
Z80 can produce faster and more compact programs, and its assembly language 
mnemonics are more logical.  But what do you do with those disks full of 
8080 assembly language source files?  You convert them into Z80 assembly 
language with a translator.

     There are two main programs in the public domain that will read in an 
8080 assembly language source file and spit out a Z80 source file--XLATE5 
and IZ.  XLATE5 is the smaller and faster of the two programs, but IZ has a 
nice feature that allows you to see the translation being made so that you 
know what it's doing.  I use IZ when I need such a program, but it's really 
a toss-up--both are good.


[COMING UP]

     You may have noticed this column now has a new name--[CP/M 
Connection].  After writing about CP/M public domain software for some 
months, I think it's time to broaden the horizons.  I'll continue to let 
you know about useful public domain software, but now I'll also cover good 
commercial software, tricks for getting the most out of CP/M, and 
interesting trends in the CP/M world.  If you have any suggestions, let me 
know.

------------------------------------------------------------------------------
      Ted Silveira is a freelance writer and contributing editor to several
   computer-oriented publications.  He appreciates suggestions or feedback
   and can be reached through the KAY*FOG RBBS (415)285-2687 and CompuServe
   (72135,1447) or by mail to 2756 Mattison Lane, Santa Cruz, CA 95065.

-------------------------  End of CPM-CC14.ART Text  -------------------------