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 / CPM / ZCPR33 / Z3-33 / Z33-TM2.LBR / Z33-TM2.DOC < prev    next >
Text File  |  2000-06-30  |  4KB  |  99 lines

  1.     The fact that ZCPR 3.3 puts the ENV address in HL before
  2. loading a program (of course Z33 also installs that program if
  3. it is determined to be a z33 program) enables us at last to 
  4. be able to create Turbo Modula 2 programs that can access 
  5. the myriad features of the Z-system.  We are still not all 
  6. the way there, it is still something of a kludge, but it is 
  7. possible at last.
  8.  
  9.     How, you ask, is this accomplished?  Doesn't TM2
  10. grab the immediate bytes after 100H for its own uses, precluding
  11. the familiar
  12.  
  13.     JP    START
  14.     DB    "Z3ENV",0
  15.     DW    Z3EADR
  16. START:
  17.  
  18. program structure by which Z3 utilities have traditionally 
  19. communicated with their environment?  You are right, but as 
  20. we mention above z33 ALSO finds the ENV address and puts it 
  21. in HL as the new program is loaded.  This provides an 
  22. ALTERNATE method by which programs can get the ENV address, 
  23. which then makes possible all the advanced features of Z3 
  24. (now Z33).
  25.  
  26. So then it should be a simple matter of getting the HL 
  27. register before anything else is done and storing it away 
  28. somewhere and we have it.  Well, it ain't that simple, 
  29. unfortunately.  TM2 runs off to do its own initialization 
  30. code before anything you write gets executed, and modules 
  31. created from assembler can't have initialization code.  So 
  32. where does that leave us? Fortunately it is still pretty 
  33. easy to get around this, but you have to patch .COM files 
  34. to do it.  Not the prettiest, but it works.
  35.  
  36. What are the tools in this library that enable this?  Just 
  37. a skeleton module that does nothing but store this address 
  38. away for program use and a test module so that you can see 
  39. it works.
  40.  
  41. Z33M2.Z80 -- the assembler code to grab the ENV at the start
  42. of the program.  Also code for a procedure which takes this
  43. address and gives it back to the Modula code for use there.
  44.  
  45. Z33M2.DEF -- the interface for the above procedure to M2.
  46.  
  47. TZ33M2.MOD -- a test module which calls on the Module InOut 
  48. to print the ENV in HEX.  If we know enough to print it, we 
  49. know enough to use it.
  50.  
  51. Instructions: -- 
  52. 1>ASSEMBLE Z33M2.Z80 with M80,ZAS, or Z80asm to a .REL file 
  53.  
  54. INVOKE M2
  55. 2><C>ompile Z33M2.DEF
  56. 3><R>un REL Z33M2 Z33M2
  57.   This creates the file Z33M2.MCD
  58. 4><C>ompile TZ33M2.MOD
  59. 5><L>ink TZ33M2 TZ33M2.COM -- when asked to include all modules
  60.                 say yes.
  61. 6> <Q>uit M2.
  62. 7>
  63.  Using ZPATCH or similar patcher on TZ33M2.COM make a note 
  64. of the address in the two bytes at 101H and 102H.  Write 
  65. these down. Then Search for the string "Z33ENV".  This has 
  66. been inserted in the assembler code for just this purpose. 
  67. ZPATCH will report an address where the string is found. 
  68. Exactly 10-11 bytes further on there is an address which 
  69. should be patched with the address you found at 101-102H.  
  70. That is if the address that the search found is 2000H then 
  71. at 200AH patch the same byte you found at 101H and at 200BH 
  72. patch the byte you found at 102H.  Now go back to 101-102H 
  73. and patch here the address at which the search reported its 
  74. find plus six.  That is, in this example 2006H (low byte 
  75. first).  So at 101H we patch the value 06 and at 102H we 
  76. patch the value 20. Of course the real addresses will vary, 
  77. but that is all there is to it.  All we have done is to
  78. redirect program execution from the code it would normally 
  79. execute first to our little routine which stores HL in 
  80. memory before it is destroyed.  Then we jump to where TM2 
  81. would have started execution.
  82.  
  83. OK, I got you started.  Now who is going to put together 
  84. the first useful module using this concept?  The Z33M2 
  85. module can be expanded to include more useful procedures to 
  86. be accessed by M2.  A TCAP module could be easily built.  
  87. how about something like Z3FILES which could resolve named 
  88. directory references before passing control to the FILES 
  89. module.  What about a shell?  Error handler?  A program to 
  90. manipulate the multi-command line buffer?  Sky's the limit!
  91.  
  92.             Steve Cohen
  93.             June 8, 1987
  94.  
  95. Z33
  96. andler?  A program to 
  97. manipulate the multi-command line buffer?  Sky's the limit!
  98.  
  99.             Steve Co