home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / DOC / ZAS-SLR.DOC < prev    next >
Text File  |  2000-06-30  |  7KB  |  130 lines

  1.  5-Sep-86 21:34:50-MDT,7571;000000000001
  2. Return-Path: <info-cpm-request@AMSAA.ARPA>
  3. Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 5 Sep 86 21:34:17-MDT
  4. Received: from simtel20.arpa by AMSAA.ARPA id a000796; 5 Sep 86 22:40 EDT
  5. Date: Fri, 5 Sep 1986  19:55 MDT
  6. Message-ID: <KPETERSEN.12236640754.BABYL@SIMTEL20.ARPA>
  7. Sender: KPETERSEN@SIMTEL20.ARPA
  8. From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
  9. To:   Info-Cpm@AMSAA.ARPA
  10. Subject: Assembling SYSLIB with ZAS and Z80ASM (SLR)
  11. Reply-To: SAGE@LL.ARPA
  12.  
  13. Relayed from my RCP/M...I've had complaints from users about not being
  14. able to assemble the new SYSLIB, Z3LIB and VLIB wihout purchasing the
  15. ZAS assembler.  It used to be possible to use M80/L80.  This file
  16. tells about one alternative.
  17.  
  18. --Keith
  19.  
  20. --cut here--ZAS-SLR.DOC--cut here--
  21.                 ASSEMBLING SYSLIB WITH ZAS AND Z80ASM (SLR)
  22.  
  23.                                   Jay Sage
  24.                              September 4, 1986
  25.  
  26.  
  27.      I was moved to write these comments after reading Richard Conn's
  28. article on the libraries (SYSLIB, Z3LIB, and VLIB) in Micro/Systems Journal. 
  29. In that article he states that ZAS is the only assembler that is capable of
  30. assembling the new version 3.6 release of SYSLIB.  This statement seemed
  31. both odd and self-serving, odd because ZAS is always promoted as being
  32. compatible with other standard assemblers and self-serving because Conn is
  33. now an employee of Echelon, which distributes ZAS.  I began to do a little
  34. investigating.
  35.  
  36.      Please understand that I am generally a strong supporter of Echelon,
  37. the company marketing the Z-System and its support programs.  They are, I
  38. believe, the last hope for 8-bit CP/M-type computers, and we should support
  39. them by buying their products and encouraging our friends to do the same. 
  40. However, ZAS has been a sticking point for me.  I formed a less than
  41. enthusiastic opinion of ZAS at the beginning and tried to help the author
  42. make an honest Z-System program out of it.  Unfortunately, its subsequent
  43. development has done nothing to change my original opinion (more on that
  44. below).  Once the superbly written, high performance assembly-language tools
  45. from SLR Systems became available at a comparable (slightly higher) price, I
  46. saw no reason to settle for the mediocrity of ZAS.  If Conn had said in the
  47. article that the SYSLIB source was written to be assembled using ZAS and
  48. might require slight modifications for other assemblers, I would not be
  49. writing this comment.
  50.  
  51.      I found it hard to believe that Z80ASM would have any significant
  52. problem assembling SYSLIB, so I gave it a try.  The complete assembly of 189
  53. source modules to Microsoft-format REL files took only 11 minutes and 25
  54. seconds on my Ampro floppy-based system, an average of 3.6 seconds per
  55. module (considering the tremendous disk thrashing required to read 189
  56. source files and write 189 REL files, things would have been much faster
  57. with a hard disk).
  58.  
  59.      It turned out that very strictly speaking Conn was right.  There were
  60. five files, the ones dealing with library management (SLUDIR, SLUOPEN,
  61. SLUCLOSE, SLUREAD, and SLUINIT), that produced error messages.  The reason
  62. was their use of ZAS's idiosyncratic ".IN" insert pseudo-op.  If one spends
  63. a moment with a text editor and changes the five instances of ".IN" to
  64. ".INCLUDE", then Z80ASM works beautifully.  Knowing Steve Russell of SLR, I
  65. would not be surprised if the next version of Z80ASM recognizes the ".IN"
  66. pseudo-op.  It already tolerates ZAS's peculiar requirement of square
  67. brackets where other assemblers use normal parentheses.  Changing ".IN" to
  68. "MACLIB" and putting in the ".Z80" directives might even make M80 work (I
  69. did not try that).  If anyone reading Conn's comment thought that he should
  70. buy ZAS just to be able to work with the SYSLIB source code, he was
  71. seriously misled.  I am sure that almost any assembler using Zilog mnemonics
  72. can be made to work with very little effort.  Since the code appears to use
  73. no Zilog-only instructions, one could probably even convert the source back
  74. to the Intel mnemonics in which Conn wrote the original routines and use an
  75. Intel assembler.
  76.  
  77.      Having gone through the assembly process with Z80ASM, I was now curious
  78. to see how ZAS would perform.  I got out a copy of ZAS version 2.3.  Since
  79. ZAS does not support internal script files and multiple assemblies as Z80ASM
  80. does, I prepared a ZEX script file to perform the task.  At first I wrote
  81. the script to invoke ZAS for each module.  Then it occurred to me that it
  82. was unfair to force ZAS to reload for each module when Z80ASM only had to
  83. load once.  So I decided to use the ZCPR "GO" command for all but the first
  84. module.
  85.  
  86.     For some reason I decided first to make sure that ZAS could be rerun
  87. using "GO", as Z-System programs generally should.  I tried it manually on a
  88. pair of files with the command line "ZAS FILE1;GO FILE2".  It seemed to work
  89. fine.  I ended up with two appropriately named REL files, but something
  90. about the ZAS output message made me suspicious -- both files were reported
  91. as having the same number of lines, symbols, etc.  Sure enough -- ZAS messed
  92. up.  It gave the appearance of working but in fact did not, the worst kind
  93. of failure.
  94.  
  95.      I don't know exactly what ZAS is doing, since the second output REL
  96. file did not correspond to either the second or the first source file.  One
  97. thing is for sure.  The author of ZAS still does not fully understand the
  98. principles of Z-System programming.  [My first disillusionment with ZAS came
  99. when I tried for many months to get the author to make it support the ZCPR3
  100. program error flag (I even sent the code to do it).  Steve Russell grasped
  101. the principle immediately and implemented it quickly and correctly; he even
  102. made the logical extensions of the concept to CP/M3 (set CP/M3 error flag)
  103. and CP/M2.2 (kill $$$.SUB submit file).]  ZAS apparently relies on the
  104. initial loading of ZAS.COM from disk to initialize some data space. 
  105. Programs that are to work under the "GO" command must, obviously, perform
  106. all required initializations in code.  Otherwise the buffers, flags, and
  107. file control blocks will not necessarily be in their initialized state when
  108. the program is rerun using "GO".
  109.  
  110.      With a ZEX script that reloaded ZAS for each assembly (I had no
  111. choice), ZAS took 43 minutes and 30 seconds to assemble SYSLIB, nearly four
  112. times as long as Z80ASM.  Carrying out the five source changes to make
  113. SYSLIB compatible with other assemblers, including Z80ASM, would take much
  114. less than the 22-minute time difference.
  115.  
  116.      One final note on the SYSLIB code itself.  There are some unfortunate
  117. inconsistencies in the code due to reliance on the truncated external
  118. references of the Microsoft REL format.  The SLR assemblers can optionally
  119. generate special SLR-format REL files (only the SLR linker can process
  120. these) that, among other advantages, support 16-character external names. 
  121. When assembling SYSLIB to SLR-format REL files, however, one discovers that
  122. the external and internal names of some routines in SYSLIB are not
  123. consistent.  The module S0FILEIO.Z80 makes reference to the externals
  124. "FI$CLOSE" and "FO$CLOSE".  However, the module SFILEIO, which defines these
  125. references, specifies the public names as "FI$CLOS" and "FO$CLOS".  With
  126. Microsoft truncation of externals to 6 or 7 characters (I don't know which
  127. ZAS does), these are equivalent.  In making the SLR versions of the
  128. libraries (SYSSLR.REL, Z3SLR.REL, and VSLR.REL), I had to correct these
  129. inconsistencies.
  130.