<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Tue, 30 Dec 1986 01:12:29 GMT
From   : Gregory Smith <greg@utcsri.uucp>
Subject: Dualcase MACRO-80 Assembler Patch

There was some demand for this, so here goes.

APPLICABILITY:
       Microsoft MACRO-80 assembler, version 3.44.
       The title of an assembler listing shows:
               MACRO-80 3.44   30-Mar-82

EFFECT:
       (1) upper and lower case in symbols become distinct. External
       symbols are passed to the linker L80 with their case intact.
       L80 and LIB80 don't seem to have any trouble with the lowercase
       letters. Macro names are also dualcase; you may define a macro
       'call' which does not conflict with the mnemonic CALL.

       (2) As a side-effect of (1), predefined symbols such as mnemonics,
       assembler directives, and register names must be in UPPER case.

       (3) The warning message '%No END statement' becomes '%No END'
       [ I had to get a few bytes from somewhere...]

       (4) WEIRDNESS:: The symbols are shoved into buckets based on their
       first letter. After the patch, 'FOOBAR' and 'frobozz' go into the
       same bucket. The problem is that the table lookup code assumes that
       each bucket contains symbols with the same initial letter, so
       'foobar' will conflict with 'Foobar'. I don't know whether this
       can be fixed. The initial letter *is* stored in the symbol table,
       since 'foobar' and 'Foobar' are both propogated intact into the
       object module (provided only one of the two is defined).
       L80 does not suffer from this problem.

PATCH:
 OFFSET            ADDRESS
(in file) (in memory)  WAS   BECOMES
   40B        50B      20      00
                       73      D6
                       74      3B
                       61      E6
                       74      1F
                       65      4F
                       6D      C9

   A82        B82      20      00

   BFC        CFC      D6      C3
                       3B      0C
                       4F      05

People who already have large run-time object libraries with all uppercase
globals will need to reassemble them with the patched assembler in order to
call them from C using lower case symbols. Perhaps a more useful patch would
invert the case; a call to printf() would refer to the global 'PRINTF', and
the function FooBar would appear to the linker as 'fOObAR'. All predefined
assembler words would then have to appear in lowercase. If there is any
demand for such a weirdness, I will get out my byte-bashing utilities
and figure out the patch (If I remember correctly how the above patch
works, the case-inverting patch is quite simple).
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>