home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol055 / sigmlog.043 < prev    next >
Encoding:
Text File  |  1985-02-10  |  23.1 KB  |  457 lines

  1. Sig/M    volume 43    8080 TINCMP Compiler and
  2.             Pidgin Programming System
  3.             CP/M-86 Bios Support
  4.  
  5.         -CATALOG.043    contents of Sig/M volume 43
  6.                 released November 25, 1981
  7.         ABSTRACT.043    abstract of Sig/M volume 43
  8.         ACKLIST.043    acknowledgement file
  9.         CRCKLIST.043    checksum of Sig/M volume 43
  10.  
  11. index    name        size    description        
  12.  
  13. 43.01    DESCRIP .DOC    16K    details of TINCMP and PIDGIN
  14. 43.02    IOCMPLX .ASM    19K    PIDGIN programming system
  15. 43.03    IOCMPLX .REL     2K         /
  16. 43.04    MACROS  .PGN     8K        /
  17. 43.05    PIDGIN  .S2M    10K       /
  18. 43.06    PIDGINLB.REL     1K      /    
  19. 43.07    PIDMATH .ASM     5K     /
  20. 43.08    PIDMATH .REL     1K    /
  21. 43.09    STAGE2  .COM    12K    STAGE2 support system
  22. 43.10    SYSTEM  .ASM     1K    PIDGIN programming
  23. 43.11    SYSTEM  .REL     1K    /
  24. 43.12    TINCMP  .COM    17K    TINCMP compiler
  25. 43.13    TINCMP  .MAC    20K            /
  26. 43.14    TINCMP  .PGN    12K           /
  27. 43.15    TINCMP  .REL     5K          /
  28. 43.16    TINTEST1.PGN     3K         /    
  29. 43.17    TINTEST2.PGN     3K        /
  30. 43.18    TINTEST3.PGN     1K       /
  31. 43.19    TINTEST4.PGN     3K      /
  32. 43.20    TINTEST5.PGN     2K     /    
  33. 43.21    TINTEST6.PGN     2K    /
  34. 43.22    WC      .PGN     2K    TINCMP test program
  35. 43.23    WRNXT   .ASM     1K    PIDGIN console I/O
  36. 43.24    WRNXT   .REL     1K    /
  37. 43.25    CBIOS    .A86    17K    CP/M-86 Bios
  38. 43.26    GOCPM86    .ASM     1K     /
  39. 43.27    ERQ    .A86     3K    /
  40. 43.28    SD    .A86    15K    CP/M-86 directory sort
  41.  
  42. Copyright (C) 1981 by Sig/M-Amateur Computer Group 
  43. of New Jersey Inc., Box 97, Iselin NJ 08830-0097
  44.  
  45. READ THIS FIRST - BEFORE USE.
  46. CALL TINCMP AS FOLLOWS:
  47.     TINCMP MACROFILE,OUTPUTFILE,INPUTFILE
  48. MACROFILE: THE MACROS TO BE USED AS TEMPLATES AND INSTRUCTIONS
  49. OUTPUTFILE: THE OUTPUT OF TINCMP
  50. INPUTFILE: THE INPUT TO BE EXPANDED BY TINCMP
  51.  
  52. REFERENCE FOR THIS STUFF:
  53.     PIDGIN - A SYSTEMS PROGRAMMING LANGUAGE
  54.     BY WM. A. GALE
  55.     DOCTOR DOBBS JOURNAL #57 JULY 1981
  56.  
  57.     STAGE2
  58.     8080 IMPLEMENTATION (SUPERB!)
  59.     DICK CURTISS
  60.     CP/MUG VOLUME 51
  61.  
  62.     IMPLEMENTING SOFTWARE FOR NON-NUMERIC APPLICATIONS
  63.     WM. M. WAITE
  64.     PRENTICE-HALL, INC.
  65.     ENGLEWOOD CLIFFS, NJ 1973
  66.     ISBN 0-13-451898-5 (ABOUT $25)
  67.  
  68.     AN 8080 IMPLEMENTATION OF PIDGIN
  69.     TO BE PUBLISHED IN DR DOBBS
  70.     SUBMITTED NOVEMBER 1981
  71.     A. L. BENDER, M.D.
  72.  
  73.  
  74. CONTENTS OF TINCMP DISK:
  75. FILE    CONTENTS
  76. --------------------------------------------------------------
  77. MACROS.PGN    THE MACRO FILE USED TO TRANSLATE PIDGIN TO
  78.         8080 ASSEMBLER CODE
  79.  
  80. PIDGIN.S2M    THE MACRO FILE USED TO TRANSLATE PIDGIN TO
  81.         8080 ASSEMBLER CODE WHEN BOOTSTRAPPING FROM
  82.         STAGE2 (THESE ARE STAGE2 MACROS)
  83.  
  84. TINCMP.PGN    THE TINCMP COMPILER SOURCE CODE IN PIDGIN.
  85.  
  86. TINCMP.MAC    THE OUTPUT OF TINCMP WHEN TRANSLATING TINCMP
  87.         WRITTEN IN PIDGIN USING TINCMP.
  88.  
  89. TINCMP.REL    THE REL FILE FROM ASSEMBLING ABOVE FILE.
  90.  
  91. TINCMP.COM    TINCMP COMMAND FILE.
  92.  
  93. STAGE2.COM    STAGE2 MACRO PROCESSOR WRITTEN IN FLUB
  94.         BY DICK CURTISS AND DISTRIBUTED HERE WITH
  95.         HIS PERMISSION.
  96.  
  97. IOCMPLX.ASM    THE I/O SUBROUTINES FOR PIDGIN INCLUDING
  98.         THE CP/M FILE CONTROL I/O INTERFACE ROUTINE
  99.  
  100. WRNXT.ASM    CONSOLE READ/WRITE ROUTINES FOR PIDGIN UNDER
  101.         CP/M.
  102.  
  103. SYSTEM.ASM    THE CP/M DEFINITIONS FOR PIDGIN.  ALSO CONTAINS
  104.         THE UNIVERSAL LOAD DE FROM M (LDEM) ROUTINE
  105.  
  106. PIDMATH.ASM    16 BIT INTEGER ARITHMETIC ROUTINES WRITTEN
  107.         BY DICK CURTISS. SLIGHTLY MODIFIED TO BE USED
  108.         WITH PIDGIN.
  109.  
  110. PIDGINLB.REL    RELOCATABLE LIBRARY OF WRNXT,SYSTEM AND PIDMATH.
  111.  
  112. TINTEST THRU
  113.     TINTEST6 TEST ROUTINES FOR TINCMP.  USE IF YOU DESIGN YOUR
  114.         OWN MACROS.
  115.  
  116. WC.PGN        WORD COUNTER.  USED AS A TEST PROGRAM TO CHECK THE
  117.         TINCMP COMPILER.
  118.  
  119. SUMMARY FOR STAGE2:
  120.  
  121.     STAGE2 IS DOCUMENTED IN CPM/UG LIBRARY VOLUME 51.  PLEASE
  122. READ THAT DOCUMENTATION IF YOU NEED DETAILED INSTRUCTIONS.  YOU
  123. SHOULD ALSO BUY WAITE'S BOOK.  THIS IS A WELL WRITTEN, BUT COMPLEX
  124. SUBJECT AND IS NOT CASUAL BED-TIME READING.  YOU WILL NEED TO READ AND
  125. PROBABLY RE-READ EACH TOPIC SEVERAL TIMES TO MAKE SENSE OUT OF THINGS.
  126.  
  127. STAGE2 PRODUCES AN OUTPUT FILE FROM ONE OR MORE INPUT FILES.  IF
  128. YOU WANT TO REGENERATE TINCMP.MAC FROM TINCMP.PGN YOU WILL NEED TO
  129. DO SEVERAL THINGS.  ONE IS TO INSERT A SPACE IN FRONT OF EACH
  130. TINCMP.PGN LINE WHICH STARTS WITH A NON-SPACE OR TAB.  INSERT
  131. A SPACE BETWEEN BEGINMAIN AND ( IN THE SOURCE OR FIX THE S2M MACRO
  132.  
  133. NEXT, INSERT SPACES BEWEEN PACK AND ( AND UNPACK AND ( OR FIX THE
  134. MACRO.  INSERT A FINIS STATEMENT AT THE END OF TINCMP.PGN.
  135.  
  136.     IF YOU CAN AVOID IT, DON'T GO BACK TO STAGE2.  JUST FIX THE
  137. TINCMP MACRO FILE MACROS.PGN.  STARTING OVER WITH STAGE2 CAN GET
  138. THE RESULTING COMPILER MESSED UP AND INTRODUCE ERRORS WHICH ARE
  139. QUITE DIFFICULT TO FIND.  TO ASSEMBLE A NEW TINCMP WITH STAGE2:
  140.     A>STAGE2  TINCMP.MAC,CON=PIDGIN.S2M,TINCMP.PGN
  141. THIS PUTS THE BAD STATEMENTS OUT ON THE CONSOLE.  I REALLY CAN'T
  142. SEE WHAT THIS WILL BUY YOU BUT YOU CAN USE IT IF YOU  WANT.
  143.  
  144.     WORKING WITH TINCMP CAN GET TO BE A DRAG SO IF YOU MAKE A SUBMIT
  145. FILE THINGS WILL BE EASIER:
  146.     1. COMPILATION AND ASSEMBLY TAKE ABOUT 5-7 MINUTES.
  147.     2. TYPE-IN OF COMMANDS IS ERROR-PRONE BECAUSE OF THE NUMBER
  148.         OF FILES USED.
  149.     3. THERE ARE FEWER ERRORS WHEN FILES ARE SUBMITTED.
  150.  
  151. SUGGESTED SUBMIT FILE:
  152. A>SUBMIT TINSUB
  153.     TINCMP MACROS.PGN,$1.ASM,$1.PGN
  154.     M80 ,=$1.ASM
  155.     L80 $1,IOCMPLX,PIDGINLB/S,$1/N,/E
  156.  
  157. STAGE2 HAS MANY OTHER USES.  CONSULTING DICK CURTISS' FILES WILL
  158. GIVE YOU SOME IDEA OF HOW POWERFUL STAGE2 IS.  UNLIKE TINCMP IT
  159. HAS BRANCH AND TEST INSTRUCTIONS.  WAITE'S BOOK IS A GOOD EXAMPLE
  160. OF HOW PRAGMATIC AND THEORETICAL MATERIAL CAN BE PRESENTED.
  161.  
  162. TO PUT TOGETHER A TINCMP COMPILER FOR SPECIAL PURPOSES:
  163.     1. IF YOU DON'T HAVE M-80 OR RMAC:
  164.     YOU NEED TO MERGE THE FOLLOWING:
  165.         TINCMP.MAC
  166.         IOCMPLX.ASM
  167.         PIDMATH.ASM
  168.         WRNXT.ASM
  169.         SYSTEM.ASM
  170.     REMOVE ALL EXTRN AND ENTRY STATEMENTS AS WELL AS DSEG, CSEG
  171.     AND COMMON STATEMENTS.  REMOVE THE EXTERNAL PROCEDURE, LOCAL
  172.     VARIABLE, ENDLOCAL STATEMENTS FROM MACROS.PGN
  173.     REASSEMBLE - GOOD LUCK! YOU WILL NEED TO CHANGE ALL OF THE
  174.     MACROS TOO.  YOU WILL REALLY NEED THE GOOD LUCK FOR THIS.
  175.     2. IF YOU HAVE RMAC YOU NEED TO CHANGE THE ENTRY STATEMENTS
  176.     TO PUBLIC IN ALL LIBRARY MODULES (IOCMPLX,WRNXT,PIDMATH,SYSTEM)
  177.     3. IF YOU ARE NOT DARING AND HAVE AN ORG 100H SYSTEM YOU CAN
  178.     JUST LOAD THE COM FILE TINCMP AND USE IT.
  179.     4. IF YOU HAVE M-80:
  180.     USE L80 TO LINK PIDGINLB INTO IOCMPLX AND TINCMP.  PIDGINLB
  181.     IS A LIBRARY OF WRNXT,SYSTEM AND PIDMATH
  182.     5. IF RUNNING MP/M SYSTEM DEFINES ?BOOT,?BDOS,?TBUF FOR CP/M
  183.     AND YOU WILL NEED TO CHANGE THIS.
  184.     6. IF RUNNING CP/M 2.2 EVERYTHING IS COOL.  I DIDN'T TEST THIS
  185.     WITH CP/M 1.4 BUT I DIDN'T USE ANY WIERD CALLS SO IT SHOULD
  186.     WORK OK.  THE FCB'S ARE ALL 36 BYTES LONG.
  187.     7. IN THIS VERSION ALL FILES MUST BE DECLARED IN THE CONTROL
  188.     STATEMENT AND ONLY THE ASSOCIATE FCB N WITH I$$ WORKS.
  189.     8. ?ENDING WASN'T TESTED THROUGHLY.
  190.     9. IOCMPLX IS REALLY WRITTEN FOR A Z-80 AND IF YOU HAVE ONE
  191.     IT SHOULD BE RECODED.
  192.     10: AS SUPPLIED, THE TINCMP COMPILER IS THE ACTUAL OUTPUT OF
  193.     THE PIDGIN VERSION OF TINCMP AS SUPPLIED ON FILE TINCMP.PGN
  194.     11: IF YOU WANT TO RESTART THE PROCESS LOTS OF LUCK YOU CAN
  195.     GET A COPY OF TINCMP'S MOTHER STAGE2 IN CP/MUG VOL 51.
  196.     12: IF YOU HAVE A Z-80 OR THE CDL ASSEMBLER YOU CAN CHANGE
  197.     THE MACROS IN MACROS.PGN TO USE THEM.
  198.     13: NOTE! NONE OF THE CODE IS OPTIMIZED.  YOU CAN SAVE ABOUT
  199.     20-40% SPACE IN THE CSEG SEGMENTS BY HAND OPTIMIZING THE
  200.     ASSEMBLY LANGUAGE IN TINCMP.MAC
  201.     14: IF YOU HAVE PROBLEMS YOU CAN WRITE TO ME:
  202.         A. L. BENDER, M. D.
  203.         C/O NEUROLOGICAL SERVICES INC.
  204.         336 CENTER AVE
  205.         WESTWOOD NJ 07675
  206.         201-664-4882
  207.     15: THE MATERIAL HEREIN IS COPYRIGHTED (C) 1981.  MATERIAL
  208.     IS PRESENTED FOR YOUR PRIVATE, NON-COMMERCIAL USE.  SOME
  209.     OF THIS MATERIAL IS COPYRIGHT BY DICK CURTISS AND IS 
  210.     REPRODUCED HERE BY HIS WRITTEN PERMISSION (PIDMATH) AND
  211.     TINCMP IS COPYRIGHT BY WM GALE.  THE REPRODUCTION OF THIS
  212.     MATERIAL IN THIS LOCATION DOES NOT IMPLY ANY RIGHTS TO
  213.     FURTHER PUBLISH, DISTRIBUTE, USE OR SELL ANY MATERIAL
  214.     HEREIN PRESENTED.  BOTH WM GALE AND DICK CURTISS RETAIN ALL
  215.     COPYRIGHT TO THEIR MATERIAL.  I RETAIN THE COPYRIGHT TO ALL
  216.     MODIFICATIONS TO TINCMP AND TO THE CP/M VERSION OF TINCMP.
  217.     ALTERING THE PROGRAMS BY HAND-OPTIMIZATION DOES NOT ALTER
  218.     COPYRIGHT PROTECTION NOR DOES EXTENSION VOID THE RIGHTS OF
  219.     PREVIOUS COPYRIGHT HOLDERS.
  220.     PERMISSION FOR COMMERCIAL USE MUST BE OBTAINED FROM THE
  221.     COPYRIGHT OWNERS INDIVIDUALLY.
  222.  
  223.                  8080/Z80/8085 PIDGIN UNDER CP/M
  224.  
  225.                    By Andrew L. Bender, M. D.
  226.  
  227.      PIDGI╬ wa≤ describeΣ b∙ it≤ inventor¼á Bil∞ Gale¼á a≤ ß "Lo≈ ì
  228. Leve∞ Programminτ Language"«á  ╔ supposσ tha⌠ it≤ maiε attractioε ì
  229. t∩ mσ wheε ╔ firs⌠ reaΣ abou⌠ i⌠ wa≤ it≤ structured¼ "Có languagσ ì
  230. appearancσ anΣ it≤ simplicity«  I⌠ haΣ onl∙ onσ drawbacδ anΣ tha⌠ ì
  231. wa≤á thσ lacδ oµ ß suitablσ 808░ compiler«á  Bil∞ haΣ presenteΣ ß ì
  232. compile≥á fo≥á thσ 650▓ whicΦ wa≤ detaileΣ enougΦá t∩á star⌠á thσ ì
  233. projec⌠á goinτ oε thi≤ compute≥ bu⌠ wa≤ no⌠ reall∙ enougΦ t∩á ge⌠ ì
  234. thσ projec⌠ goinτ oε othe≥ computers«  M∙ interes⌠ wa≤ stirreΣ b∙ ì
  235. thσ promisσ oµ ß compiler-compile≥ iε ß futurσ issuσ oµ Dr« Dobb≤ ì
  236. writteεá iεá PIDGIN«á  ╔á wa≤á interesteΣá iεá compilinτá ßá datß ì
  237. definitioεá languagσá fo≥á anothe≥á projec⌠ anΣá thσá though⌠á oµ ì
  238. constructinτá ß compile≥ witΦ thσ rathe≥ primativσ tool≤ ╔ haΣ a⌠ ì
  239. m∙á disposa∞á wa≤ disturbing«á  ╔ realizeΣ tha⌠ iµá therσá wa≤á ß ì
  240. compile≥á compile≥á availablσá ╔ woulΣ a⌠ leas⌠ bσá ablσá t∩á ge⌠ ì
  241. starteΣ sincσ thσ fron⌠ enΣ oµ thσ compile≥ woulΣ bσ completeΣ a⌠ ì
  242. thσ timσ thσ languagσ wa≤ defined.
  243.      Thσá tasδ oµ constructinτ ß PIDGI╬ compile≥ seemeΣ t∩á breaδ ì
  244. dowε int∩ threσ distinc⌠ tasks«  First¼ onσ woulΣ havσ t∩ writσ ß ì
  245. TINCM╨á compile≥ t∩ proces≤ PIDGI╬ language«á  Second¼á onσ woulΣ ì
  246. havσá t∩á writσ al∞ oµ thσ suppor⌠ routine≤ sucΦ a≤ thσá I/╧á anΣ ì
  247. matΦá functions«á  Last¼á thσá PIDGI╬ prograφ woulΣá havσá t∩á bσ ì
  248. adapteΣ t∩ interfacσ witΦ thσ CP/═ environment«á  Oncσ TINCM╨ wa≤ ì
  249. u≡á anΣá running¼á i⌠ coulΣ bσ useΣ t∩ compilσ itselµá anΣá othe≥ ì
  250. program≤á a≤ needed«á  Al∞ threσ task≤ haΣ t∩ bσ completeΣá firs⌠ ì
  251. before TINCMP could be made to work.
  252.      A⌠á firs⌠á i⌠á seemeΣ tha⌠ codinτ TINCM╨ woulΣ bσá thσá mos⌠ ì
  253. difficul⌠á tasδá oµá thσ threσ anΣ i⌠ reall∙á proveΣá t∩á bσá thσ ì
  254. simples⌠á task«á  Codinτá thσ I/╧ routine≤ tooδ abou⌠ 60Ñ oµá thσ ì
  255. developmen⌠á timσ becausσ thσ thirΣ task¼á thσ CP/M filσá contro∞ ì
  256. interfacσ tooδ ß lonτ timσ t∩ desigε anΣ test«á  Aε overal∞á plaε ì
  257. wa≤á madσ baseΣ oε thσ I/╧ structurσ oµ thσ compile≥ a≤ presenteΣ ì
  258. b∙ Bil∞ Gale«  ╔ spokσ witΦ Bil∞ abou⌠ thσ I/╧ structurσ anΣ somσ ì
  259. change≤ whicΦ ╔ haΣ proposeΣ bu⌠ botΦ oµ u≤ agreeΣ tha⌠ i⌠á woulΣ ì
  260. havσá changeΣá thσ overal∞ desigε oµ thσ languagσ whicΦ haΣá beeε ì
  261. alread∙á published«á  ╔ decideΣ t∩ kee≡ thσá structurσá unchangeΣ ì
  262. eveε thougΦ thσ usσ oµ buffe≥ areß t∩ filσ association≤ seemeΣ t∩ ì
  263. be rather unusual constructions.
  264.      Considerinτá thσá availablσá tool≤ fo≥ thσá constructioεá oµ ì
  265. TINCMP'≤á firs⌠á 808░ realizatioε ╔ discardeΣá BASI├á becausσá i⌠ ì
  266. woulΣ havσ beeε ß difficul⌠ languagσ t∩ ge⌠ thing≤ goinτ in«á  I⌠ ì
  267. diΣá offe≥ easσ oµ debugginτ bu⌠ waitinτ fo≥ i⌠ t∩ chuτ througΦ ß ì
  268. fe≈ line≤ oµ PIDGI╬ seemeΣ t∩ bσ ß biτ drawback«á  Afte≥ al∞ herσ ì
  269. wa≤á aεá interprete≥á (BASIC⌐á interpretinτá anothe≥á interprete≥ ì
  270. (TINCMP)«á  Thσ nex⌠ languagσ whicΦ wa≤ seriousl∙ considereΣá wa≤ ì
  271. FORTRAN«  ╔ didn'⌠ looδ int∩ thi≤ carefull∙ becausσ ╔ fel⌠ tha⌠ ╔ ì
  272. wouldn'⌠á learεá mucΦ doinτ i⌠ iε FORTRA╬ anΣ thσ lacδ oµá strinτ ì
  273. manipulatioεáá anΣá automatiπá typσá conversion≤á seemeΣá t∩áá bσ ì
  274. undesired«á  ╔ wa≤ theε thinkinτ of ß highe≥ languagσ - d∩ i⌠á iε ì
  275. PL/I-8░á ╔ thought«á  ╔ discardeΣ thi≤ ideß becusσ ╔ reall∙á fel⌠ ì
  276. tha⌠á ╔ kne≈ s∩ littlσ abou⌠ PL/╔ tha⌠ ╔ woulΣ bσ spendinτ al∞ oµ ì
  277. m∙á timσ educatinτ myselµ anΣ woulΣ neve≥ ge⌠ thσá joΓá done«á  ╔ ìètheεá saiΣá t∩á myself║á "Self¼á yo⌡ havσ beeεá writinτá assembl∙ ì
  278. languagσá fo≥á thσá pas⌠ 2▒ years¼á wh∙ no⌠á d∩á i⌠á iεá assembl∙ ì
  279. language?óá  Sincσ n∩ answe≥ wa≤ forthcominτ ╔ almos⌠ begaε t∩ d∩ ì
  280. i⌠á iε MACRO-8░ wheε ╔ wen⌠ t∩ ß loca∞ compute≥ cluΓ meetinτá anΣ ì
  281. wa≤á fortunatσá enougΦ t∩ obtaiε ß cop∙ oµ thσá CP/═á Use≥á Grou≡ ì
  282. Librar∙ Volumσ 51«  ╔ wa≤ woolgatherinτ onσ afternooε rearranginτ ì
  283. al∞á oµ m∙ librar∙ disk≤ wheε ╔ camσ acros≤ thi≤ disδ anΣ noticeΣ ì
  284. tha⌠á i⌠ containeΣ ß "powerfu∞ macr∩ processor"«á  ┴ smal∞á ligh⌠ ì
  285. wen⌠ oε anΣ ╔ printeΣ ou⌠ al∞ oµ thσ documentation«  I⌠ wa≤ clea≥ ì
  286. tha⌠á thi≤á macr∩á processo≥á wa≤ no⌠á onl∙á powerfu∞á enougΦá t∩ ì
  287. directl∙ proces≤ PIDGIN¼ i⌠ wa≤ ß membe≥ oµ thσ famil∙ froφ whicΦ ì
  288. TINCM╨á wa≤á derived«á  STAGE▓á wa≤á theεá thσá answer«á  STAGE2¼ ì
  289. implementeΣá b∙ RicharΣ Curtis≤ anΣ deriveΣ froφ SIMCM╨á wa≤á thσ ì
  290. featurσá prograφá oεá CP/MU╟ volumσ 51«á  ╔ studieΣá M≥á Curtissº ì
  291. documentatioεá fo≥ severa∞ day≤ theε ╔ raε ou⌠á t∩á Prentice-Hal∞ ì
  292. anΣá bough⌠á Wm«á Waite'≤á Booδ "Implementinτ Softwarσá fo≥á Non-ì
  293. Numeric Applications".
  294.      Afte≥á ßá weeδ o≥ so¼á ╔ haΣ ß se⌠ oµ workinτá macro≤á whicΦ ì
  295. permitteΣ mσ t∩ pu⌠ iε PIDGI╬ languagσ anΣ ge⌠ ou⌠ code«á  ╔á haΣ ì
  296. TINCM╨á u≡á iε assembl∙ codσ iε exactl∙ ninσ days«á  Gettinτá thσ ì
  297. macro≤ writteε wa≤ slow«á  ╔ figurσ tha⌠ ╔ spen⌠ abou⌠ 30Ñ oµ thσ ì
  298. overal∞á timσ witΦ thσ STAGE▓ anΣ TINCM╨á macros«á Thσá remaininτ ì
  299. timσá wa≤á spen⌠á witΦá sundr∙ item≤ likσ fixinτá thσá linσá feeΣ ì
  300. probleφ iε TINCMP«  TINCM╨ assume≤ tha⌠ ß ne≈ linσ caε bσ defineΣ ì
  301. b∙ ß singlσ characte≥ whilσ CP/═ need≤ ß tw∩ characte≥á sequence║ ì
  302. Carriagσá return¼á linσá feed«á 
  303.      B∙á usinτ Dicδ Curtissº intege≥ arithmetiπ packagσ ╔á didn'⌠ ì
  304. neeΣ t∩ d∩ tha⌠ worδ ove≥ again«á  ╔ jus⌠ addeΣ thσ prope≥á entr∙ ì
  305. point≤á anΣ assembleΣ it«á  Unlikσ mos⌠ freσ librar∙ program≤á i⌠ ì
  306. workeΣá a⌠ once«á  Whilσ ╔ didn'⌠ neeΣ al∞ oµ thσ subroutine≤á iε ì
  307. thσá package¼á ╔ lef⌠ theφ iε therσ iε casσ anyonσ wanteΣ t∩á usσ ì
  308. them for other purposes.
  309.      ╔ trieΣ t∩ ge⌠ TINCM╨ u≡ anΣ finally¼ afte≥ ß serie≤ oµ ver∙ ì
  310. strangσá bugs¼á introduceΣ b∙ m∙ poo≥ macr∩ code¼á ╔ actuall∙ go⌠ ì
  311. thσá damεá compile≥ t∩ turε ou⌠ ß fe≈ line≤ oµá code«á  Tw∩á morσ ì
  312. macr∩á error≤á fixeΣ anΣ TINCM╨ writteε iε STAGE▓á coulΣá compilσ ì
  313. itselµá iε PIDGIN«á  I⌠ wa≤ quitσ thrillinτ t∩ seσá thσá compile≥ ì
  314. actually work as Bill Gale promised in his July 1981 article.
  315.      ╔á wa≤ theε read∙ fo≥ thσ biτ problem║á ShoulΣ ╔ handlσ codσ ì
  316. generatioεá a≤á Bil∞ diΣ o≥ shoulΣ ╔ turε ou⌠á assembl∙á languagσ ì
  317. codσá again┐á  ╔ reall∙ gavσ thi≤ questioε somσ seriou≤á thought«  ì
  318. Iµá ╔á diΣ turε ou⌠ assembl∙ languagσ codσ i⌠ woulΣá havσá t∩á bσ ì
  319. assembleΣá b∙á aε assemble≥ anΣ ╔ woulΣ havσ t∩ assumσ ß morσá o≥ ì
  320. les≤ "standardó assemble≥ whicΦ everyonσ woulΣ havσ or¼á a⌠ leas⌠ ì
  321. mos⌠ peoplσ woulΣ have«á  ╔ though⌠ oµ turninτ ou⌠ AS═ code«  AS═ ì
  322. i≤áá thσáá Digita∞á ResearcΦá assemble≥áá supplieΣáá witΦáá CP/M«  ì
  323. Unfortunatly¼á AS═ doe≤ no⌠ makσ relocatablσ codσ anΣá generatioε ì
  324. oµ absolutσ codσ didn'⌠ seeφ worthwhilσ sincσ ╔ wanteΣ t∩ bσ ablσ ì
  325. t∩á usσ librar∙ routine≤ whicΦ coulΣ bσ loadeΣ anyplacσ iε memor∙ ì
  326. t∩ makσ u≡ fo≥ thosσ CP/═ system≤ whicΦ diΣ no⌠ havσ zer∩ origin≤ ì
  327. o≥á thei≥á TP┴ beginninτ a⌠ 100H«á  Iµ ╔ wanteΣ t∩á approacΦá thσ ì
  328. probleφá a≤ Bil∞ Galσ diΣ therσ werσ othe≥á problems«á  Thσá 808░ ì
  329. hardwarσ ha≤ n∩ relativσ addressinτ a≤ doe≤ thσ 650▓ o≥ 6800«á  ╔ ì
  330. decideΣá tha⌠á thσá lacδá oµ thi≤  hardwarσá facilit∙á madσá codσ ì
  331. generatioεá witΦ TINCM╨ difficult«á  Microsoft'≤á M-8░á assemble≥ ìèseemeΣá fairl∙ ubiquitou≤ anΣ tha⌠ i⌠ was¼á iε al∞ truσ respects¼ ì
  332. compatiblσáá witΦá thσá RMA├á assemble≥á oµáá Digita∞áá Research«  ì
  333. Generatinτá assemble≥ codσ haΣ severa∞ othe≥ problem≤á associateΣ ì
  334. with it.
  335.      Lookinτá a⌠ thσ TINCM╨ compiler¼á onσ notice≤ tha⌠ therσ arσ ì
  336. man∙ possibilitie≤ fo≥ generatinτ label≤ whicΦ looδ likσ o≡ code≤ ì
  337. o≥á pseudo-operation≤ iε thσ assembler«á  808░ assembler≤á alway≤ ì
  338. seeφ t∩ definσ thσ register≤ a≤ symbol≤ s∩ tha⌠ iµ yo⌡ definσá S╨ ì
  339. a≤á ßá bytσ iε ß PIDGI╬ prograφ therσ i≤ ever∙ reasoεá t∩á firml∙ ì
  340. beleivσá tha⌠á i⌠ wil∞ blo≈ thσ assignmen⌠ oµ thσá stacδá pointe≥ ì
  341. symbo∞á "SP"«á  Al∞ oµ thesσ problem≤ caε bσ avoideΣ b∙ prefixinτ ì
  342. eacΦá symbo∞á iεá thσá outpu⌠ oµ thσá codσá generato≥á witΦá somσ ì
  343. characte≥á whicΦ doesn'⌠ looδ likσ anythinτ thσá assemble≥á woulΣ ì
  344. expec⌠á iεá aε interna∞ symbo∞ o≥ op-code«á  ╔ choosσ ßá do⌠á fo≥ ì
  345. this«á  B∙ prefixinτ almos⌠ everythinτ witΦ ß dot¼á conflict≤ arσ ì
  346. avoideΣ anΣ thσ symbol≤ arσ alway≤ unique«á  Subroutinσ name≤ arσ ì
  347. prefixeΣ witΦ tw∩ dot≤ t∩ kee≡ theφ differen⌠ froφ variablσ name≤ ì
  348. iεáá casσá therσá arσá intersection≤á betweeεá thσá two«áá  Thesσ ì
  349. intersection≤ arσ no⌠ specificall∙ prohibiteΣ b∙ PIDGIN«á  Systeφ ì
  350. symbol≤á anΣá jum≡ target≤ arσ labelleΣ witΦ ßá leadinτá questioε ì
  351. mark«áá  
  352.      Becausσ TINCM╨ canno⌠ tes⌠ o≥ branch¼á certaiε construction≤ ì
  353. arσ peculiar«á  Takσ fo≥ examplσ thσ CHOOS┼ ON/CAS┼ construction«  ì
  354. eacΦá timσ ß CAS┼ i≤ encountereΣ iε thσ inpu⌠ filσ PIDGI╬á shoulΣ ì
  355. generatσá ßá jum≡ t∩ thσ ENDCHOOS┼ labe∞ bu⌠ no⌠ thσá firs⌠á timσ ì
  356. tha⌠ CAS┼ i≤ encountereΣ afte≥ thσ CHOOS┼ ON«  Sincσ therσ arσ n∩ ì
  357. tes⌠ facilities¼ thσ jum≡ i≤ generateΣ oε ever∙ occurencσ oµ CAS┼ ì
  358. bu⌠ oε thσ firs⌠ occurance¼á aε OR╟ $-│ obliterate≤ thσ generateΣ ì
  359. JM╨á ENDCHOOS┼ instruction«á  Thi≤ i≤ donσ b∙ pushinτ ß │ oεá thσ ì
  360. stacδ a⌠ CHOOS┼ O╬ bu⌠ zer∩ thereafte≥ eacΦ timσ ß CAS┼ statemen⌠ ì
  361. i≤á noted«á  Thi≤ valuσ i≤ poppeΣ ofµ thσ stacδ anΣ useΣá a≤á thσ ì
  362. valuσá iεá thσá OR╟á statemen⌠ resultinτ iε aεá OR╟á $-░á oεá al∞ ì
  363. subsequen⌠ call≤ fo≥ CASE«á  Therσ arσ als∩ n∩ rea∞ possibilitie≤ ì
  364. fo≥á codσá optimization«áá  Perhap≤á someonσá caεá writσá ßá pos⌠ ì
  365. compilatioε optimize≥ fo≥ TINCMP - naturally in PIDGIN.
  366.      A≤ aε aiΣ t∩ program≤ operatinτ unde≥ differen⌠ environment≤ ì
  367. thσá CP/═ implementatioε oµ PIDGI╬ call≤ ß librar∙ subroutinσá a⌠ ì
  368. thσá beginninτ oµ PIDGI╬ prograφ executioε anΣ a⌠ thσ terminatioε ì
  369. oµ PIDGI╬ prograφ execution«á  Thσ beginninτ subroutinσ i≤ calleΣ ì
  370. ?INI╘ anΣ thσ concludinτ subroutinσ i≤ calleΣ ?ENDING«á  BotΦá oµ ì
  371. thesσá routine≤ arσ iε thσ IOCMPL╪ subroutine«á  ?INI╘á transfer≤ ì
  372. filσá name≤á froφá thσá contro∞ statemen⌠ t∩ ß se⌠á oµá FCB'≤á iε ì
  373. IOCMPL╪ anΣ store≤ thσ numbe≥ oµ thesσ filσ name≤ iε AC«  ?ENDIN╟ ì
  374. close≤ an∙ opeε file≤ anΣ return≤ contro∞ t∩ thσ use≥ program«  ┴ ì
  375. jum≡ t∩ ?BOO╘ alway≤ follow≤ thσ CAL╠ ?ENDIN╟ statemen⌠ wheεá thσ ì
  376. PIDGI╬ statemen⌠ ENDMAI╬ i≤ encountered«á  Iµ you≥ hear⌠ desires¼ ì
  377. yo⌡á caε changσ thesσ routine≤ t∩ d∩ anythinτ yo⌡ fee∞á necessar∙ ì
  378. in your particular system.
  379.      Variable≤á declareΣá iεá BYT┼ o≥ IN╘ statement≤á arσá alway≤ ì
  380. placeΣ iε blanδ commoε storage«á  Thi≤ facilitate≤ thei≥ usσ witΦ ì
  381. aεá undocumenteΣá featurσ and¼á beinτá honest¼á totall∙á untesteΣ ì
  382. feature¼áá whicΦáá allow≤á independen⌠á compilatioεá oµáá prograφ ì
  383. subroutines«á  ╔á expec⌠ thi≤ featurσ t∩ bσ read∙ iε abou⌠á threσ ì
  384. month≤ time«  I⌠ wil∞ no⌠ makσ previou≤ PIDGI╬ program≤ unusable«  ì
  385. ┴ furthe≥ extensioε t∩ bσ useΣ iε maiε program≤ o≥ subroutine≤ i≤ ìèthσá LOCA╠á VARIABLE╙á statemen⌠á anΣá ENDLOCA╠á statement«á  An∙ ì
  386. variable≤ declareΣ b∙ eithe≥ BYT┼ o≥ IN╘ statement≤ betweeε thesσ ì
  387. tw∩ statement≤ arσ no⌠ pu⌠ iε commoε anΣ arσ LOCA╠ t∩ thσ curren⌠ ì
  388. compilation.  All other variables are global.
  389.      Afte≥á ßá fe≈á discussion≤ witΦá Bil∞á Gale¼á thσá PARAMETE╥ ì
  390. statemen⌠ wa≤ born«  Thσ PARAMETE╥ statemen⌠ allow≤ yo⌡ t∩ definσ ì
  391. iε ß singlσ locatioε al∞ oµ thσ systeφ dependen⌠ variable≤ fo≥á ß ì
  392. program«áá  Thσá paramete≥á statemen⌠á ha≤á thσá followinτá form║ ì
  393. PARAMETE╥ K$$=$$$╗á K$ñ i≤ thσ symboliπ paramete≥ terφ anΣ $$ñ i≤ ì
  394. thσ numerica∞ equivalent«  T∩ usσ thσ parametriπ variablσ K$ñ yo⌡ ì
  395. neeΣ thσ $$=+K$ñ statemen⌠ o≥ thσ I$$=+K$ñ statement«  Aε examplσ ì
  396. oµá thσá usσá oµá thi≤ statemen⌠ i≤ iε TINCM╨á itselµá wherσá thσ ì
  397. variable≤á L╞ (linσ feed)¼á N╠ (carriagσ return⌐ anΣ E╞á arσá al∞ ì
  398. defined by means of parameter statements.
  399.      Gettinτá CP/═á linkeΣ u≡ witΦ thσ internal≤ oµ PIDGI╬ wa≤á ß ì
  400. rathe≥ difficul⌠ task«á  ╔ diΣ no⌠ wisΦ t∩ makσ havoπ ou⌠ oµá thσ ì
  401. filσá systeφá  useΣ b∙ PIDGI╬ ye⌠ CP/═ needeΣ ß filσ namσá rathe≥ ì
  402. thaεá ßá blocδá locatioεá t∩ locatσ thσ tex⌠á oµá ßá filσá o≥á t∩ ì
  403. determinσá wherσá tex⌠ wa≤ t∩ bσ written«á  Iε orde≥ t∩á linδá u≡ ì
  404. blocδá number≤ witΦ filσ name≤ ╔ decideΣ tha⌠ ß fictitiou≤á blocδ ì
  405. numbe≥á wa≤ goinτ t∩ bσ useΣ a≤ ß filσ identifie≥ insidσá PIDGIN«  ì
  406. Thi≤á identifie≥á woulΣá bσá associateΣ witΦ ß filσá namσá b∙á aε ì
  407. associatσ statemen⌠ whicΦ needeΣ t∩ bσ designed«á  Thσá associatσ ì
  408. statemen⌠á wa≤ borε afte≥ considerablσ though⌠ bu⌠ i⌠ i≤á obviou≤ ì
  409. tha⌠á i⌠á i≤á ver∙á limitinτá iε scopσá anΣá probabl∙á shoulΣá bσ ì
  410. redesigneΣá t∩á bσá morσ general«á  Thσá forφá oµá thσá associatσ ì
  411. statemen⌠á i≤á ASSOCIAT┼ FC┬ ñ WIT╚ I$$«á  Thi≤ allow≤ thσá firs⌠ ì
  412. paramete≥á whicΦá i≤ thσ filσ mentioneΣ iε tha⌠ locatioεá oµá thσ ì
  413. contro∞ statemen⌠ t∩ bσ associateΣ witΦ blocδ numbe≥ I$$«  ╔ onl∙ ì
  414. useΣ thσ lowe≥ seveε bit≤ oµ I$ñ a≤ ß blocδ number/filσ numbe≥ s∩ ì
  415. onl∙á thesσ bit≤ neeΣ bσ uniquσ fo≥ eacΦ file«á  Thσá eigtΦá bit¼ ì
  416. whilσá transcribeΣá int∩ thσ I/╧ subroutine≤ shoulΣ bσá zer∩á fo≥ ì
  417. furthe≥ expansion«  If you had a control statement:
  418.      AAB.AAA,BBB.CCC,DDD.EEE
  419. anΣá you≥ paramete≥ ñ iε thσ associatσ statemen⌠ wa≤ ▓ thi≤ woulΣ ì
  420. resul⌠á iεá thσá associatioεá oµ BBB.CC├á witΦá thσá filσá numbe≥ ì
  421. containeΣ iε thσ lo≈ orde≥ seveε bit≤ oµ I$$«á  Thi≤á associatioε ì
  422. reques⌠á mark≤ thσ filσ a≤ "preparedó iε aε interna∞ tablσ iε thσ ì
  423. I/╧ complex«á  Anothe≥ forφ oµ thσ associatσ statement¼á no⌠á ye⌠ ì
  424. implementeΣ iε thσ I/╧ comple° subroutine≤ i≤ thσ form║ ASSOCIAT┼ ì
  425. FIL┼á $ñá WIT╚ I$$«á  Thσ firs⌠ paramete≥ i≤ supposeΣ t∩á bσá thσ ì
  426. star⌠á oµá 1▓ byte≤ defininτ thσ drivσ anΣ theε thσá eleveεá bytσ ì
  427. filσ namσ anΣ extensioε fo≥ ß particula≥ file«á  UnuseΣ byte≤ arσ ì
  428. t∩á bσá se⌠ t∩ blanks«á  Thi≤ routinσ wil∞ als∩ marδ thσ filσá a≤ ì
  429. prepared«á  Fo≥á furthe≥ detail≤ yo⌡ shoulΣ refe≥ t∩ thσá IOCMPL╪ ì
  430. assembly listing.
  431.      Specificall∙ no⌠ implementeΣ arσ thσ statement≤ READBU╞á anΣ ì
  432. WRITEBUF«á  AlthougΦá therσá i≤á nothinτá difficul⌠á abou⌠á thesσ ì
  433. statement≤á the∙á werσá no⌠ necessar∙ fo≥ thσá implementatioεá oµ ì
  434. TINCM╨ anΣ s∩ ╔ didn'⌠ codσ them«á  Thσ statement≤á LOMEM¼á HIME═ ì
  435. anΣ REGISTE╥ arσ no⌠ implemented«  Thesσ statement≤ havσ n∩ placσ ì
  436. iε ß relocatablσ prograφ whicΦ doesn'⌠ havσ ß zer∩ page«á  Iµ yo⌡ ì
  437. wan⌠á yo⌡á caεá pu⌠á thesσ statement≤ int∩á thσá macr∩á template≤ ì
  438. without any action occuring when they are recognized.
  439.      Iε programminτ TINCM╨ ╔ firs⌠ wanteΣ t∩ ge⌠ i⌠ u≡ oε aε 808░ ìèbecausσ tha⌠ processo≥ i≤ ß subse⌠ oµ thσ 808╡ anΣ Z-80«  Iµ use≥ ì
  440. codσá wil∞á ruεá oε thσ 808░ i⌠ wil∞ probabl∙ ruεá oεá thσá othe≥ ì
  441. processors«á  MucΦ codσ caε bσ optimizeΣ iµ TINCM╨ i≤ writteε fo≥ ì
  442. ßá Z-80«á  Thσ I/╧ comple° especiall∙ wil∞ bσ cleane≥ oεá ßá Z-8░ ì
  443. than it is on the 8080.  
  444.      808░ TINCM╨ anΣ al∞ oµ thσ associateΣ routine≤ arσ availablσ ì
  445. througΦá thσ SIG/═ librar∙ o≥ b∙ direc⌠ mai∞ froφ thσ author«á  ╔ ì
  446. wil∞á preparσ ß singlσ density¼á eigh⌠ incΦ CP/═ forma⌠ disδá anΣ ì
  447. mai∞á thσá samσ oε receip⌠ oµ ß mone∙ order¼á checδá o≥á 2░á cen⌠ ì
  448. stamp≤á fo≥ $25«á U╙ Funds«á  Iµ yo⌡ seσ thi≤ afte≥ 1982¼á bette≥ ì
  449. writσ firs⌠ a≤ Bil∞ Galσ says«á  Iµ yo⌡ decidσ t∩ implemen⌠á thi≤ ì
  450. processo≥á fo≥á othe≥á machine≤á anΣ fee∞á ╔á coulΣá help¼á don'⌠ ì
  451. hesitatσ t∩ write«á  STAGE▓ i≤ distributeΣ witΦ TINCM╨ b∙ specia∞ ì
  452. arrangemen⌠á witΦá RicharΣá Curtiss«á  Thσá distributioεá oµá an∙ ì
  453. material≤ oε thi≤ disδ d∩ no⌠ alte≥ thσ curren⌠ copyrigh⌠á statu≤ ì
  454. oµá an∙ oµ thσ material«á  Permissioε i≤ granteΣ t∩ distributσ o≥ ì
  455. makσá a≤á man∙ copie≤ a≤ desireΣá fo≥á non-commercia∞á use«á  Thσ ì
  456. remaining rights are retained by the individual authors.  
  457.