********************************************************** * This question and answer were captured on Al Hawley's * * Ladera Z-Node and should be of assistance to those who * * are just getting involved with macro assemblers. This * * file is distributed by Richard Jacobson, Lillipute Z- * * Node, System 1: 312-649-1730, System 2: 312-664-1730. * ********************************************************** Msg #426 posted 10/30/86 at 7:20 pm by STEVE BENNETT To: ALL USERS About: M80/L80 (24 lines) I've got a few questions regarding the use of M80/L80: 0) What is the difference between L80 and LD80? 1) Why does L80 produce code starting at 103H instead of 100H? Why does LD80 produce code at 100H? 2) Why does L80 behave again when the /p:100 command is given on the command line, although when you use ORG 100H it loads code at 200H? 3) When you use the SYM file generated by L80, the addresses are off by the 3 bytes. How can you get around this problem when using a debugger with the SYM file? 4) Where can I get docs on M80 and L80? 5) I am running an SB180 with the 192K ram drive. How do I keep M80/L80 from accessing drive A: even though they are on M:? (I realize this might be difficult, I was just hoping the answer was something simple). 6) As I need a macro-assembler that reads both Zilog and Intel opcodes, is M80/L80 still the best choice? I don't really want to use a code converter all the time (ala ZCON for ZAS/ZLINK) as the pseudo-ops .Z80 AND .8080 are very handy. As you can see, I have a lot of questions!!! Comments from all appreciated. ----- Msg #427 posted 10/30/86 at 9:35 pm by Greg Laskin To: ALL About: M80/L80 (56 lines) 0) L80 sounds like Microsoft's LINK-80 and LD80 sounds like Digital Research's LINK-80. I'm guessing about LD80 because DRI called it LINK.COM when the distributed it. However, if I'm right, theY differ mainly in the command line syntax and the fact that Microsoft likes to define new .REL file record types so DRI's linker can't always handle stuff put out my Microsoft languages (especially the Basic compiler). 1) L80 wants to put a jump instruction at l00H pointing to the starting point of your program. In a relocatable environment, the starting point isn't necessarily at 100H as required by CP/M, thus the jump instruction there. You specify the starting point of the program with an address expression after the END directive in one and only one of the modules being linked (effectively making that module the MAIN module)., e.g. END STARTRTN or END 1000H (better know what your doing with this one). Wherever STARTRTN gets put, there will be a jump to it at 100H. What you observed is what happens with L80 if there is no MAIN module with a start address after the END directive. In this case, the first instruction in the first module linked becomes the first instruction (which is not always what you meant) and the first instruction ends up at 103H with NOP's at 100-102H. The Digital Research linker will put a jump at 100H if there is a defined MAIN module and the entry point is not at 100H. However, if no main module is defined it simply plots the first module bring linked at 100H and dispenses with the jump instruction. 2) When you say p:100 you have given an explicit instruction to the linker to put the first instruction of the code segment at 100h. This overrides all of the default stuff discussed in 1). With DRI I think is [Lxxxx] that does the same thing. 3) As far as I know, only the DRI linker emits a .SYM file and then the only symbols listed are PUBLIC symbols. Therefore, I assume you mean the SYMBOL TABLE output by the assembler. If I guessed wrong, forgive me please. The symbols here are relative to the start of the module being assembled and bear no relationship to where the linker puts the modules other than 0010' in a module is 10H from 0000' in a module ( the ' indicated a relocatable address in the code segment and " in the data segment DSEG). If you stick an ASEG at the beginning of the file, then all addresses are ABSOLUTE (the 's and "s disappear) and the linker will put everything exactly where you said and the symbols in the symbol table will reflect ABSOLUTE addresses. 5) I suspect you are seeing the reaction of your system to a DISK SYSTEM RESET function call from within the program which always logs drive A in no matter what. 6) I don't use M80 very often because I prefer what is now the Phoenix Software assembler PASM (used to be XITAN, then TDL then CDL) and linker, but they don't understand ZILOG opcodes (they invented their own). I prefer M80 to MAC or RMAC (from DRI) because of the Zilog opcodes. There are more than likely other opinions. Regards, Greg