home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug103.arc / HISTORY < prev    next >
Text File  |  1979-12-31  |  11KB  |  233 lines

  1.          Small-Mac Quirks and Revisions                            page 1
  2.  
  3.  
  4.          
  5.                                       QUIRKS
  6.          
  7.          1. The Small-Mac package does not use all of the  possible  link
  8.          items which may appear in a Microsoft .REL file.  Therefore, LNK
  9.          may  not  successfully  link  a  Microsoft  created  .REL module
  10.          especially if it was created by a high level language  compiler.
  11.          Neither will .DREL recognize Microsoft's "Extension Link Items."
  12.          
  13.          2. When  configured  for  the Z80, the assembler will run slower
  14.          than usual due to the fact  that  variants  of  a  mnemonic  are
  15.          searched sequentially in the machine instruction table.  The Z80
  16.          has  an  unusually large number of variants of several mnemonics
  17.          (e.g.  LD ...).  If one has an idea of the relative frequency of
  18.          use of the variants, he  can  reorder  the  machine  instruction
  19.          table placing  the  most  used  variants  first.  But be warned,
  20.          without a thorough knowledge of the function match() (in  MIT.C)
  21.          you may  cause  the  assembler  to  mismatch  instructions.  For
  22.          instance, if "LD A,(x)" precedes "LD A,(HL)" in the table,  then
  23.          cases  of  the  latter  in a program will be assembled as though
  24.          they were  the  first,  causing  an  "undefined"  error  on  the
  25.          mistaken expression   "HL".      Take  care  also  to  keep  all
  26.          occurrences of a given mnemonic op-code contiguous in the table.
  27.          
  28.          3. The Small-Mac assembler tries  to  recognize  an  instruction
  29.          first  as  a  machine  instruction  and  then  as  an  assembler
  30.          instruction (pseudo-op).  This is to  improve  effeciency  since
  31.          the  number  of machine instructions in a program vastly exceeds
  32.          the number of pseudo-ops.  Since a free field format is allowed,
  33.          it is possible for a machine instruction to begin  in  character
  34.          position 1  of  a line.  These considerations lead to the result
  35.          that you may confuse the assembler by coding a  pseudo-op  which
  36.          is  prededed  by  a  non-label  symbol  which  matches a machine
  37.          instruction.  Thus the line "LXI EQU 5" will  be  taken  as  the
  38.          machine instruction "LXI" with an invalid expression of "EQU 5".
  39.          However  the  line "LXI: CALL ABC" will process properly because
  40.          the "LXI:" is known to be a label by its trailing colon.
  41.          
  42.          4. Small-Mac does not handle forward references in EQU  and  SET
  43.          assembler instructions.      Such  references  will  resolve  to
  44.          absolute zero.
  45.          
  46.                                     REVISIONS
  47.          
  48.          -- March, 1985; inluded in version 1.0
  49.          
  50.          1. Getrel(), putrel(), and seerel() now handle  the  end-of-file
  51.          item in  .REL  files  and  libraries correctly.  Only 7 bits are
  52.          read/written and the current byte is finished  out.  (previously
  53.          reported as fix-1)
  54.          
  55.  
  56.  
  57.  
  58.          
  59.          Small-Mac Quirks and Revisions                            page 2
  60.  
  61.  
  62.          2. LNK  now  looks for a .NDX file on the same drive as its .LIB
  63.          file.   It  used  to  look  on  the  default  drive. (previously
  64.          reported as fix-2)
  65.          
  66.          3. MAC2.C has been modified to prevent  the  possibility  of  an
  67.          infinite loop  in stfind().  This would happen in the case where
  68.          a symbol hashed to position 0 in the symbol  table.  (previously
  69.          reported as fix-3)
  70.          
  71.          4. The function primary() in MAC3.C has been modified to correct
  72.          an  error  in  code  generation  when  the first reference to an
  73.          external symbol (defined with ##) has an offset (e.g., ABC##+5).
  74.          The statement "*t =  XRBIT|ABS;"  was  added  before  the  label
  75.          "doxr:". (previously reported as fix-4)
  76.          
  77.          5. Added  the  -S# switch to MAC. It sets the size of the symbol
  78.          table to handle a  maximum  of  #  symbols.    Default  is  500.
  79.          Performance  will  degrade as the symbol table reaches capacity,
  80.          so  leave  some   cushion   space.   (previously   reported   as
  81.          enhancement-1)
  82.          
  83.          -- July, 1985; inluded in version 1.1; reported in bulletin 1
  84.          
  85.          6. The  line  "if(bump)  field += loc;" in doloc() (file MAC2.C)
  86.          has been corrected to read "if(bump) field  =  loc  +=  field;".
  87.          This  error  caused DS directives to have no effect. (previously
  88.          reported as fix-5)
  89.          
  90.          7. In the function load() (file LNK.C) two  changes  were  made.
  91.          The  statement "field = field + cmod;" was inserted as the first
  92.          statement following "case SETLC:".  This corrects  an  error  in
  93.          which  a  second  or subsequent load module containing DS or ORG
  94.          directives reserves insufficient (possibly no) space. ("field +=
  95.          cmod;" would be slightly better, provided your Small-C  compiler
  96.          contains fix #64.) A "break;" statement was inserted as the last
  97.          statement controlled  by  "case  SETLC:".  This prevents control
  98.          from falling through "case XPOFF:"  resulting  in  an  erroneous
  99.          offset being added to the next program relative item in the .REL
  100.          file. (previously reported as fix-6)
  101.          
  102.          8. Range  checking  for  one  byte, PC relative items was added.
  103.          MAC now gives the message "- Range Error" on attempts to make PC
  104.          relative references that are more than 127 bytes  ahead  or  128
  105.          bytes  behind  the  instruction  following  the  one  making the
  106.          reference.  Note: The PC  has  already  advanced  when  the  CPU
  107.          calculates   an   operand   address.   (previously  reported  as
  108.          enhancement-2)
  109.          
  110.          -- August, 1985; inluded in version 1.2; reported in bulletin 2
  111.          
  112.          9. Signon messages were added to all programs in  the  Small-Mac
  113.          package.
  114.  
  115.  
  116.          
  117.          Small-Mac Quirks and Revisions                            page 3
  118.  
  119.  
  120.          
  121.          10. Hex constants of  four  digits  plus  a  leading  zero  were
  122.          rejected  by MAC. The problem was xtoi() in the Small-C library.
  123.          It was rewritten and reported as Small-C revision 66.
  124.          
  125.          11. An invalid number in  the  operand  field  of  a  DB  or  DW
  126.          instruction  would  cause  MAC  to loop forever in dodat() (file
  127.          MAC2.C).  The fix was to have getnum() (file MAC3.C) report  the
  128.          error and advance over the offending field.
  129.          
  130.          12. The  symbols EOF (file STDIO.H) and XRPLUS (file LNK.C) both
  131.          have the value -1.  This causes readref() (file LNK.C) to handle
  132.          end-of-file in a messy way.   The  solution  is  to  change  the
  133.          definition of XRPLUS to -2.
  134.          
  135.          13. The  statement  "putint(snext, snext -= SSZ);"  in  newtbl()
  136.          (file  LNK.C)  depends  on  Small-C's  practice  of   evaluating
  137.          function arguments  left  to  right.    To  make  this statement
  138.          compiler     independent,     it      was      rewritten      as
  139.          "putint(snext, snext - SSZ); snext -= SSZ;".
  140.          
  141.          14. Revise the expression analyzer (file MAC3.C) to make it more
  142.          efficient  and  compiler  independent  (by  eliminating  Small-C
  143.          argument count passing).
  144.          
  145.          15. Revise the expression analyzer (file  MAC3.C)  to  accept  a
  146.          quoted character as a number expressing its code value.
  147.          
  148.          17. Fix  an  eternal loop in replace() (file MAC.C) when a macro
  149.          expansion overflows the maximum line size.
  150.          
  151.          18. Make EQU and SET  instructions  show  their  values  in  the
  152.          assembly listing  on  the  same  line.   Flag them with an equal
  153.          symbol (=).
  154.          
  155.          19. Change the symbol table dump at  the  end  of  the  assembly
  156.          listing to a four column format.
  157.          
  158.          20. Prevent  the  expression  analyzer  in  MAC  from  accepting
  159.          incomplete expressions.
  160.          
  161.          21. Correct an  error  in  match()  (file  MIT.C)  which  caused
  162.          erroneous  "-  Bad  Operation"  errors  on  instructions  having
  163.          several operand variants, for which expressions are required, in
  164.          the machine instruction table.
  165.          
  166.          -- October, 1985; reported in bulletin 3
  167.          
  168.          22. Insert the missing instruction  21_x2 LD HL,x  into  Z80.MIT
  169.          following 2A_x2 LD HL,(x).
  170.          
  171.  
  172.  
  173.  
  174.          
  175.          Small-Mac Quirks and Revisions                            page 4
  176.  
  177.  
  178.          23. Correct  an  error  in  CMIT.C which caused it to mistakenly
  179.          construct  the  Z-80  machine  instruction  table  such that any
  180.          return instruction except RET, RET C, RET M, RET NC, and  RET NZ
  181.          generate F0, the code for RET P.
  182.          
  183.          24. Correct  an error in LNK.C which corrupted the program being
  184.          linked when an offset is applied to the first  reference  to  an
  185.          external symbol (e.g., LDA EXTLAB##+5).
  186.          
  187.          25. Provide  an  additional  option  (-L)  to  list  entry point
  188.          locations and symbols.
  189.          
  190.          -- November 1985; reported in bulletin 4
  191.          
  192.          26. Properly handle external references in DW directives.
  193.          
  194.          27. Force an expression error when a binary operator operates on
  195.          two relocatable values of which at  least  one  is  an  external
  196.          reference.   The  other  invalid combinations were already being
  197.          caught.   The  only  valid   combinations   involving   external
  198.          references are abs+ext, ext+abs, and ext-abs.
  199.          
  200.          28. Delete  the  output  file if errors are detected so LNK will
  201.          not attempt  to  process  bad  object   modules.      Otherwise,
  202.          relocation   and   expression   errors  could  corrupt  external
  203.          reference chains making LNK go berserk.
  204.          
  205.          29. Microsoft's M80 occasionally folds the underscore  character
  206.          to a  value lower than A to Z in the ASCII sequence.  Therefore,
  207.          at the end of an  object  module,  it  emits  entry  points  and
  208.          external references  out  of  sequence.   And that causes LNK to
  209.          loop endlessly while loading its symbol tables.   This  revision
  210.          allows LNK to deal with this contingency.
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.          
  233.