A86 equivalents for some MASM 5.0 built-in macros

This chart was prepared in response to a couple of my users, who are trying to 
work through the MASM 5.0 code in Norton's new assembly language book.  It's a 
sad condition that the so-called "standard" assembler keeps changing, so that 
MASM users are forced to send another $50--75 every couple of years to 
Microsoft, if they wish to keep up with the literature.

Please read Chapter 12 of the A86 manual for an overview of conversion of MASM 
programs to A86.  You'll find that the best method for reworking the program 
in Norton's book is to eliminate all of the following "red-tape" directives 
entirely, and make the program into a .COM program.  In that case, you must 
also eliminate all the program instructions designed to load segment registers 
(such as MOV AX,DGROUP followed by MOV DS,AX).  You can do so because a .COM 
program already starts with all segments pointing to the same 64K area.  The 
stack pointer is also automatically initialized, up at the top of the 64K area 
where it will not interfere with program or data.  Thus you can ignore 
segmentation entirely.  Instead of linking successively greater numbers of 
.OBJ files, you simply assemble the corresponding source files -- A86 
assembles faster than LINK links, so this is no penalty. 

By eliminating all the segmentation red tape, you are making your program 
much, much simpler to code and understand.  But if you wish to slavishly mimic 
the MASM macros presented, you can substitute the equivalents that follow 
here.  But, again, I am utterly convinced that if you do so, you'll end up 
with more headaches and less understanding than you would if you ripped out 
all segmentation directives and initializations from the start. 

IMPORTANT NOTE: The leading underscores of _DATA and _TEXT, where
                presented, are significant and must be included!



MASM: dosseg

A86:  The only effect of this directive appears to be to add a comment
      record to the object file, presumably for Microsoft's debugger's
      benefit.  It can be deleted from A86 code.



MASM: .model small        or
      .model compact      or
      .model medium       or
      .model large

A86:  DGROUP GROUP _DATA,STACK



MASM: .code

A86:  if model is small or compact:  _TEXT SEGMENT WORD PUBLIC 'CODE'
      if model is medium or large:   modname_TEXT SEGMENT WORD PUBLIC 'CODE'

      ...where "modname" is the name of this module

(more on the back side of this page)



MASM: .data

A86:   _DATA SEGMENT WORD PUBLIC 'DATA'




MASM:  .stack

A86:   STACK SEGMENT PARA STACK 'STACK'
       ORG 0400H



MASM:  extrn MYPROC:proc

A86:   if model is small or compact:  EXTRN MYPROC:near
       if model is medium or large:   EXTRN MYPROC:far

       ...where MYPROC is any name of a procedure you are declaring
