home *** CD-ROM | disk | FTP | other *** search
- Sig/M volume 43 8080 TINCMP Compiler and
- Pidgin Programming System
- CP/M-86 Bios Support
-
- -CATALOG.043 contents of Sig/M volume 43
- released November 25, 1981
- ABSTRACT.043 abstract of Sig/M volume 43
- ACKLIST.043 acknowledgement file
- CRCKLIST.043 checksum of Sig/M volume 43
-
- index name size description
-
- 43.01 DESCRIP .DOC 16K details of TINCMP and PIDGIN
- 43.02 IOCMPLX .ASM 19K PIDGIN programming system
- 43.03 IOCMPLX .REL 2K /
- 43.04 MACROS .PGN 8K /
- 43.05 PIDGIN .S2M 10K /
- 43.06 PIDGINLB.REL 1K /
- 43.07 PIDMATH .ASM 5K /
- 43.08 PIDMATH .REL 1K /
- 43.09 STAGE2 .COM 12K STAGE2 support system
- 43.10 SYSTEM .ASM 1K PIDGIN programming
- 43.11 SYSTEM .REL 1K /
- 43.12 TINCMP .COM 17K TINCMP compiler
- 43.13 TINCMP .MAC 20K /
- 43.14 TINCMP .PGN 12K /
- 43.15 TINCMP .REL 5K /
- 43.16 TINTEST1.PGN 3K /
- 43.17 TINTEST2.PGN 3K /
- 43.18 TINTEST3.PGN 1K /
- 43.19 TINTEST4.PGN 3K /
- 43.20 TINTEST5.PGN 2K /
- 43.21 TINTEST6.PGN 2K /
- 43.22 WC .PGN 2K TINCMP test program
- 43.23 WRNXT .ASM 1K PIDGIN console I/O
- 43.24 WRNXT .REL 1K /
- 43.25 CBIOS .A86 17K CP/M-86 Bios
- 43.26 GOCPM86 .ASM 1K /
- 43.27 ERQ .A86 3K /
- 43.28 SD .A86 15K CP/M-86 directory sort
-
- Copyright (C) 1981 by Sig/M-Amateur Computer Group
- of New Jersey Inc., Box 97, Iselin NJ 08830-0097
-
- READ THIS FIRST - BEFORE USE.
- CALL TINCMP AS FOLLOWS:
- TINCMP MACROFILE,OUTPUTFILE,INPUTFILE
- MACROFILE: THE MACROS TO BE USED AS TEMPLATES AND INSTRUCTIONS
- OUTPUTFILE: THE OUTPUT OF TINCMP
- INPUTFILE: THE INPUT TO BE EXPANDED BY TINCMP
-
- REFERENCE FOR THIS STUFF:
- PIDGIN - A SYSTEMS PROGRAMMING LANGUAGE
- BY WM. A. GALE
- DOCTOR DOBBS JOURNAL #57 JULY 1981
-
- STAGE2
- 8080 IMPLEMENTATION (SUPERB!)
- DICK CURTISS
- CP/MUG VOLUME 51
-
- IMPLEMENTING SOFTWARE FOR NON-NUMERIC APPLICATIONS
- WM. M. WAITE
- PRENTICE-HALL, INC.
- ENGLEWOOD CLIFFS, NJ 1973
- ISBN 0-13-451898-5 (ABOUT $25)
-
- AN 8080 IMPLEMENTATION OF PIDGIN
- TO BE PUBLISHED IN DR DOBBS
- SUBMITTED NOVEMBER 1981
- A. L. BENDER, M.D.
-
-
- CONTENTS OF TINCMP DISK:
- FILE CONTENTS
- --------------------------------------------------------------
- MACROS.PGN THE MACRO FILE USED TO TRANSLATE PIDGIN TO
- 8080 ASSEMBLER CODE
-
- PIDGIN.S2M THE MACRO FILE USED TO TRANSLATE PIDGIN TO
- 8080 ASSEMBLER CODE WHEN BOOTSTRAPPING FROM
- STAGE2 (THESE ARE STAGE2 MACROS)
-
- TINCMP.PGN THE TINCMP COMPILER SOURCE CODE IN PIDGIN.
-
- TINCMP.MAC THE OUTPUT OF TINCMP WHEN TRANSLATING TINCMP
- WRITTEN IN PIDGIN USING TINCMP.
-
- TINCMP.REL THE REL FILE FROM ASSEMBLING ABOVE FILE.
-
- TINCMP.COM TINCMP COMMAND FILE.
-
- STAGE2.COM STAGE2 MACRO PROCESSOR WRITTEN IN FLUB
- BY DICK CURTISS AND DISTRIBUTED HERE WITH
- HIS PERMISSION.
-
- IOCMPLX.ASM THE I/O SUBROUTINES FOR PIDGIN INCLUDING
- THE CP/M FILE CONTROL I/O INTERFACE ROUTINE
-
- WRNXT.ASM CONSOLE READ/WRITE ROUTINES FOR PIDGIN UNDER
- CP/M.
-
- SYSTEM.ASM THE CP/M DEFINITIONS FOR PIDGIN. ALSO CONTAINS
- THE UNIVERSAL LOAD DE FROM M (LDEM) ROUTINE
-
- PIDMATH.ASM 16 BIT INTEGER ARITHMETIC ROUTINES WRITTEN
- BY DICK CURTISS. SLIGHTLY MODIFIED TO BE USED
- WITH PIDGIN.
-
- PIDGINLB.REL RELOCATABLE LIBRARY OF WRNXT,SYSTEM AND PIDMATH.
-
- TINTEST THRU
- TINTEST6 TEST ROUTINES FOR TINCMP. USE IF YOU DESIGN YOUR
- OWN MACROS.
-
- WC.PGN WORD COUNTER. USED AS A TEST PROGRAM TO CHECK THE
- TINCMP COMPILER.
-
- SUMMARY FOR STAGE2:
-
- STAGE2 IS DOCUMENTED IN CPM/UG LIBRARY VOLUME 51. PLEASE
- READ THAT DOCUMENTATION IF YOU NEED DETAILED INSTRUCTIONS. YOU
- SHOULD ALSO BUY WAITE'S BOOK. THIS IS A WELL WRITTEN, BUT COMPLEX
- SUBJECT AND IS NOT CASUAL BED-TIME READING. YOU WILL NEED TO READ AND
- PROBABLY RE-READ EACH TOPIC SEVERAL TIMES TO MAKE SENSE OUT OF THINGS.
-
- STAGE2 PRODUCES AN OUTPUT FILE FROM ONE OR MORE INPUT FILES. IF
- YOU WANT TO REGENERATE TINCMP.MAC FROM TINCMP.PGN YOU WILL NEED TO
- DO SEVERAL THINGS. ONE IS TO INSERT A SPACE IN FRONT OF EACH
- TINCMP.PGN LINE WHICH STARTS WITH A NON-SPACE OR TAB. INSERT
- A SPACE BETWEEN BEGINMAIN AND ( IN THE SOURCE OR FIX THE S2M MACRO
-
- NEXT, INSERT SPACES BEWEEN PACK AND ( AND UNPACK AND ( OR FIX THE
- MACRO. INSERT A FINIS STATEMENT AT THE END OF TINCMP.PGN.
-
- IF YOU CAN AVOID IT, DON'T GO BACK TO STAGE2. JUST FIX THE
- TINCMP MACRO FILE MACROS.PGN. STARTING OVER WITH STAGE2 CAN GET
- THE RESULTING COMPILER MESSED UP AND INTRODUCE ERRORS WHICH ARE
- QUITE DIFFICULT TO FIND. TO ASSEMBLE A NEW TINCMP WITH STAGE2:
- A>STAGE2 TINCMP.MAC,CON=PIDGIN.S2M,TINCMP.PGN
- THIS PUTS THE BAD STATEMENTS OUT ON THE CONSOLE. I REALLY CAN'T
- SEE WHAT THIS WILL BUY YOU BUT YOU CAN USE IT IF YOU WANT.
-
- WORKING WITH TINCMP CAN GET TO BE A DRAG SO IF YOU MAKE A SUBMIT
- FILE THINGS WILL BE EASIER:
- 1. COMPILATION AND ASSEMBLY TAKE ABOUT 5-7 MINUTES.
- 2. TYPE-IN OF COMMANDS IS ERROR-PRONE BECAUSE OF THE NUMBER
- OF FILES USED.
- 3. THERE ARE FEWER ERRORS WHEN FILES ARE SUBMITTED.
-
- SUGGESTED SUBMIT FILE:
- A>SUBMIT TINSUB
- TINCMP MACROS.PGN,$1.ASM,$1.PGN
- M80 ,=$1.ASM
- L80 $1,IOCMPLX,PIDGINLB/S,$1/N,/E
-
- STAGE2 HAS MANY OTHER USES. CONSULTING DICK CURTISS' FILES WILL
- GIVE YOU SOME IDEA OF HOW POWERFUL STAGE2 IS. UNLIKE TINCMP IT
- HAS BRANCH AND TEST INSTRUCTIONS. WAITE'S BOOK IS A GOOD EXAMPLE
- OF HOW PRAGMATIC AND THEORETICAL MATERIAL CAN BE PRESENTED.
-
- TO PUT TOGETHER A TINCMP COMPILER FOR SPECIAL PURPOSES:
- 1. IF YOU DON'T HAVE M-80 OR RMAC:
- YOU NEED TO MERGE THE FOLLOWING:
- TINCMP.MAC
- IOCMPLX.ASM
- PIDMATH.ASM
- WRNXT.ASM
- SYSTEM.ASM
- REMOVE ALL EXTRN AND ENTRY STATEMENTS AS WELL AS DSEG, CSEG
- AND COMMON STATEMENTS. REMOVE THE EXTERNAL PROCEDURE, LOCAL
- VARIABLE, ENDLOCAL STATEMENTS FROM MACROS.PGN
- REASSEMBLE - GOOD LUCK! YOU WILL NEED TO CHANGE ALL OF THE
- MACROS TOO. YOU WILL REALLY NEED THE GOOD LUCK FOR THIS.
- 2. IF YOU HAVE RMAC YOU NEED TO CHANGE THE ENTRY STATEMENTS
- TO PUBLIC IN ALL LIBRARY MODULES (IOCMPLX,WRNXT,PIDMATH,SYSTEM)
- 3. IF YOU ARE NOT DARING AND HAVE AN ORG 100H SYSTEM YOU CAN
- JUST LOAD THE COM FILE TINCMP AND USE IT.
- 4. IF YOU HAVE M-80:
- USE L80 TO LINK PIDGINLB INTO IOCMPLX AND TINCMP. PIDGINLB
- IS A LIBRARY OF WRNXT,SYSTEM AND PIDMATH
- 5. IF RUNNING MP/M SYSTEM DEFINES ?BOOT,?BDOS,?TBUF FOR CP/M
- AND YOU WILL NEED TO CHANGE THIS.
- 6. IF RUNNING CP/M 2.2 EVERYTHING IS COOL. I DIDN'T TEST THIS
- WITH CP/M 1.4 BUT I DIDN'T USE ANY WIERD CALLS SO IT SHOULD
- WORK OK. THE FCB'S ARE ALL 36 BYTES LONG.
- 7. IN THIS VERSION ALL FILES MUST BE DECLARED IN THE CONTROL
- STATEMENT AND ONLY THE ASSOCIATE FCB N WITH I$$ WORKS.
- 8. ?ENDING WASN'T TESTED THROUGHLY.
- 9. IOCMPLX IS REALLY WRITTEN FOR A Z-80 AND IF YOU HAVE ONE
- IT SHOULD BE RECODED.
- 10: AS SUPPLIED, THE TINCMP COMPILER IS THE ACTUAL OUTPUT OF
- THE PIDGIN VERSION OF TINCMP AS SUPPLIED ON FILE TINCMP.PGN
- 11: IF YOU WANT TO RESTART THE PROCESS LOTS OF LUCK YOU CAN
- GET A COPY OF TINCMP'S MOTHER STAGE2 IN CP/MUG VOL 51.
- 12: IF YOU HAVE A Z-80 OR THE CDL ASSEMBLER YOU CAN CHANGE
- THE MACROS IN MACROS.PGN TO USE THEM.
- 13: NOTE! NONE OF THE CODE IS OPTIMIZED. YOU CAN SAVE ABOUT
- 20-40% SPACE IN THE CSEG SEGMENTS BY HAND OPTIMIZING THE
- ASSEMBLY LANGUAGE IN TINCMP.MAC
- 14: IF YOU HAVE PROBLEMS YOU CAN WRITE TO ME:
- A. L. BENDER, M. D.
- C/O NEUROLOGICAL SERVICES INC.
- 336 CENTER AVE
- WESTWOOD NJ 07675
- 201-664-4882
- 15: THE MATERIAL HEREIN IS COPYRIGHTED (C) 1981. MATERIAL
- IS PRESENTED FOR YOUR PRIVATE, NON-COMMERCIAL USE. SOME
- OF THIS MATERIAL IS COPYRIGHT BY DICK CURTISS AND IS
- REPRODUCED HERE BY HIS WRITTEN PERMISSION (PIDMATH) AND
- TINCMP IS COPYRIGHT BY WM GALE. THE REPRODUCTION OF THIS
- MATERIAL IN THIS LOCATION DOES NOT IMPLY ANY RIGHTS TO
- FURTHER PUBLISH, DISTRIBUTE, USE OR SELL ANY MATERIAL
- HEREIN PRESENTED. BOTH WM GALE AND DICK CURTISS RETAIN ALL
- COPYRIGHT TO THEIR MATERIAL. I RETAIN THE COPYRIGHT TO ALL
- MODIFICATIONS TO TINCMP AND TO THE CP/M VERSION OF TINCMP.
- ALTERING THE PROGRAMS BY HAND-OPTIMIZATION DOES NOT ALTER
- COPYRIGHT PROTECTION NOR DOES EXTENSION VOID THE RIGHTS OF
- PREVIOUS COPYRIGHT HOLDERS.
- PERMISSION FOR COMMERCIAL USE MUST BE OBTAINED FROM THE
- COPYRIGHT OWNERS INDIVIDUALLY.
-
- 8080/Z80/8085 PIDGIN UNDER CP/M
-
- By Andrew L. Bender, M. D.
-
- PIDGI╬ wa≤ describeΣ b∙ it≤ inventor¼á Bil∞ Gale¼á a≤ ß "Lo≈ ì
- Leve∞ Programminτ Language"«á ╔ supposσ tha⌠ it≤ maiε attractioε ì
- t∩ mσ wheε ╔ firs⌠ reaΣ abou⌠ i⌠ wa≤ it≤ structured¼ "Có languagσ ì
- appearancσ anΣ it≤ simplicity« I⌠ haΣ onl∙ onσ drawbacδ anΣ tha⌠ ì
- wa≤á thσ lacδ oµ ß suitablσ 808░ compiler«á Bil∞ haΣ presenteΣ ß ì
- compile≥á fo≥á thσ 650▓ whicΦ wa≤ detaileΣ enougΦá t∩á star⌠á thσ ì
- projec⌠á goinτ oε thi≤ compute≥ bu⌠ wa≤ no⌠ reall∙ enougΦ t∩á ge⌠ ì
- thσ projec⌠ goinτ oε othe≥ computers« M∙ interes⌠ wa≤ stirreΣ b∙ ì
- thσ promisσ oµ ß compiler-compile≥ iε ß futurσ issuσ oµ Dr« Dobb≤ ì
- writteεá iεá PIDGIN«á ╔á wa≤á interesteΣá iεá compilinτá ßá datß ì
- definitioεá languagσá fo≥á anothe≥á projec⌠ anΣá thσá though⌠á oµ ì
- constructinτá ß compile≥ witΦ thσ rathe≥ primativσ tool≤ ╔ haΣ a⌠ ì
- m∙á disposa∞á wa≤ disturbing«á ╔ realizeΣ tha⌠ iµá therσá wa≤á ß ì
- compile≥á compile≥á availablσá ╔ woulΣ a⌠ leas⌠ bσá ablσá t∩á ge⌠ ì
- starteΣ sincσ thσ fron⌠ enΣ oµ thσ compile≥ woulΣ bσ completeΣ a⌠ ì
- thσ timσ thσ languagσ wa≤ defined.
- Thσá tasδ oµ constructinτ ß PIDGI╬ compile≥ seemeΣ t∩á breaδ ì
- dowε int∩ threσ distinc⌠ tasks« First¼ onσ woulΣ havσ t∩ writσ ß ì
- TINCM╨á compile≥ t∩ proces≤ PIDGI╬ language«á Second¼á onσ woulΣ ì
- havσá t∩á writσ al∞ oµ thσ suppor⌠ routine≤ sucΦ a≤ thσá I/╧á anΣ ì
- matΦá functions«á Last¼á thσá PIDGI╬ prograφ woulΣá havσá t∩á bσ ì
- adapteΣ t∩ interfacσ witΦ thσ CP/═ environment«á Oncσ TINCM╨ wa≤ ì
- u≡á anΣá running¼á i⌠ coulΣ bσ useΣ t∩ compilσ itselµá anΣá othe≥ ì
- program≤á a≤ needed«á Al∞ threσ task≤ haΣ t∩ bσ completeΣá firs⌠ ì
- before TINCMP could be made to work.
- A⌠á firs⌠á i⌠á seemeΣ tha⌠ codinτ TINCM╨ woulΣ bσá thσá mos⌠ ì
- difficul⌠á tasδá oµá thσ threσ anΣ i⌠ reall∙á proveΣá t∩á bσá thσ ì
- simples⌠á task«á Codinτá thσ I/╧ routine≤ tooδ abou⌠ 60Ñ oµá thσ ì
- developmen⌠á timσ becausσ thσ thirΣ task¼á thσ CP/M filσá contro∞ ì
- interfacσ tooδ ß lonτ timσ t∩ desigε anΣ test«á Aε overal∞á plaε ì
- wa≤á madσ baseΣ oε thσ I/╧ structurσ oµ thσ compile≥ a≤ presenteΣ ì
- b∙ Bil∞ Gale« ╔ spokσ witΦ Bil∞ abou⌠ thσ I/╧ structurσ anΣ somσ ì
- change≤ whicΦ ╔ haΣ proposeΣ bu⌠ botΦ oµ u≤ agreeΣ tha⌠ i⌠á woulΣ ì
- havσá changeΣá thσ overal∞ desigε oµ thσ languagσ whicΦ haΣá beeε ì
- alread∙á published«á ╔ decideΣ t∩ kee≡ thσá structurσá unchangeΣ ì
- eveε thougΦ thσ usσ oµ buffe≥ areß t∩ filσ association≤ seemeΣ t∩ ì
- be rather unusual constructions.
- Considerinτá thσá availablσá tool≤ fo≥ thσá constructioεá oµ ì
- TINCMP'≤á firs⌠á 808░ realizatioε ╔ discardeΣá BASI├á becausσá i⌠ ì
- woulΣ havσ beeε ß difficul⌠ languagσ t∩ ge⌠ thing≤ goinτ in«á I⌠ ì
- diΣá offe≥ easσ oµ debugginτ bu⌠ waitinτ fo≥ i⌠ t∩ chuτ througΦ ß ì
- fe≈ line≤ oµ PIDGI╬ seemeΣ t∩ bσ ß biτ drawback«á Afte≥ al∞ herσ ì
- wa≤á aεá interprete≥á (BASIC⌐á interpretinτá anothe≥á interprete≥ ì
- (TINCMP)«á Thσ nex⌠ languagσ whicΦ wa≤ seriousl∙ considereΣá wa≤ ì
- FORTRAN« ╔ didn'⌠ looδ int∩ thi≤ carefull∙ becausσ ╔ fel⌠ tha⌠ ╔ ì
- wouldn'⌠á learεá mucΦ doinτ i⌠ iε FORTRA╬ anΣ thσ lacδ oµá strinτ ì
- manipulatioεáá anΣá automatiπá typσá conversion≤á seemeΣá t∩áá bσ ì
- undesired«á ╔ wa≤ theε thinkinτ of ß highe≥ languagσ - d∩ i⌠á iε ì
- PL/I-8░á ╔ thought«á ╔ discardeΣ thi≤ ideß becusσ ╔ reall∙á fel⌠ ì
- tha⌠á ╔ kne≈ s∩ littlσ abou⌠ PL/╔ tha⌠ ╔ woulΣ bσ spendinτ al∞ oµ ì
- m∙á timσ educatinτ myselµ anΣ woulΣ neve≥ ge⌠ thσá joΓá done«á ╔ ìètheεá saiΣá t∩á myself║á "Self¼á yo⌡ havσ beeεá writinτá assembl∙ ì
- languagσá fo≥á thσá pas⌠ 2▒ years¼á wh∙ no⌠á d∩á i⌠á iεá assembl∙ ì
- language?óá Sincσ n∩ answe≥ wa≤ forthcominτ ╔ almos⌠ begaε t∩ d∩ ì
- i⌠á iε MACRO-8░ wheε ╔ wen⌠ t∩ ß loca∞ compute≥ cluΓ meetinτá anΣ ì
- wa≤á fortunatσá enougΦ t∩ obtaiε ß cop∙ oµ thσá CP/═á Use≥á Grou≡ ì
- Librar∙ Volumσ 51« ╔ wa≤ woolgatherinτ onσ afternooε rearranginτ ì
- al∞á oµ m∙ librar∙ disk≤ wheε ╔ camσ acros≤ thi≤ disδ anΣ noticeΣ ì
- tha⌠á i⌠ containeΣ ß "powerfu∞ macr∩ processor"«á ┴ smal∞á ligh⌠ ì
- wen⌠ oε anΣ ╔ printeΣ ou⌠ al∞ oµ thσ documentation« I⌠ wa≤ clea≥ ì
- tha⌠á thi≤á macr∩á processo≥á wa≤ no⌠á onl∙á powerfu∞á enougΦá t∩ ì
- directl∙ proces≤ PIDGIN¼ i⌠ wa≤ ß membe≥ oµ thσ famil∙ froφ whicΦ ì
- TINCM╨á wa≤á derived«á STAGE▓á wa≤á theεá thσá answer«á STAGE2¼ ì
- implementeΣá b∙ RicharΣ Curtis≤ anΣ deriveΣ froφ SIMCM╨á wa≤á thσ ì
- featurσá prograφá oεá CP/MU╟ volumσ 51«á ╔ studieΣá M≥á Curtissº ì
- documentatioεá fo≥ severa∞ day≤ theε ╔ raε ou⌠á t∩á Prentice-Hal∞ ì
- anΣá bough⌠á Wm«á Waite'≤á Booδ "Implementinτ Softwarσá fo≥á Non-ì
- Numeric Applications".
- Afte≥á ßá weeδ o≥ so¼á ╔ haΣ ß se⌠ oµ workinτá macro≤á whicΦ ì
- permitteΣ mσ t∩ pu⌠ iε PIDGI╬ languagσ anΣ ge⌠ ou⌠ code«á ╔á haΣ ì
- TINCM╨á u≡á iε assembl∙ codσ iε exactl∙ ninσ days«á Gettinτá thσ ì
- macro≤ writteε wa≤ slow«á ╔ figurσ tha⌠ ╔ spen⌠ abou⌠ 30Ñ oµ thσ ì
- overal∞á timσ witΦ thσ STAGE▓ anΣ TINCM╨á macros«á Thσá remaininτ ì
- timσá wa≤á spen⌠á witΦá sundr∙ item≤ likσ fixinτá thσá linσá feeΣ ì
- probleφ iε TINCMP« TINCM╨ assume≤ tha⌠ ß ne≈ linσ caε bσ defineΣ ì
- b∙ ß singlσ characte≥ whilσ CP/═ need≤ ß tw∩ characte≥á sequence║ ì
- Carriagσá return¼á linσá feed«á
- B∙á usinτ Dicδ Curtissº intege≥ arithmetiπ packagσ ╔á didn'⌠ ì
- neeΣ t∩ d∩ tha⌠ worδ ove≥ again«á ╔ jus⌠ addeΣ thσ prope≥á entr∙ ì
- point≤á anΣ assembleΣ it«á Unlikσ mos⌠ freσ librar∙ program≤á i⌠ ì
- workeΣá a⌠ once«á Whilσ ╔ didn'⌠ neeΣ al∞ oµ thσ subroutine≤á iε ì
- thσá package¼á ╔ lef⌠ theφ iε therσ iε casσ anyonσ wanteΣ t∩á usσ ì
- them for other purposes.
- ╔ trieΣ t∩ ge⌠ TINCM╨ u≡ anΣ finally¼ afte≥ ß serie≤ oµ ver∙ ì
- strangσá bugs¼á introduceΣ b∙ m∙ poo≥ macr∩ code¼á ╔ actuall∙ go⌠ ì
- thσá damεá compile≥ t∩ turε ou⌠ ß fe≈ line≤ oµá code«á Tw∩á morσ ì
- macr∩á error≤á fixeΣ anΣ TINCM╨ writteε iε STAGE▓á coulΣá compilσ ì
- itselµá iε PIDGIN«á I⌠ wa≤ quitσ thrillinτ t∩ seσá thσá compile≥ ì
- actually work as Bill Gale promised in his July 1981 article.
- ╔á wa≤ theε read∙ fo≥ thσ biτ problem║á ShoulΣ ╔ handlσ codσ ì
- generatioεá a≤á Bil∞ diΣ o≥ shoulΣ ╔ turε ou⌠á assembl∙á languagσ ì
- codσá again┐á ╔ reall∙ gavσ thi≤ questioε somσ seriou≤á thought« ì
- Iµá ╔á diΣ turε ou⌠ assembl∙ languagσ codσ i⌠ woulΣá havσá t∩á bσ ì
- assembleΣá b∙á aε assemble≥ anΣ ╔ woulΣ havσ t∩ assumσ ß morσá o≥ ì
- les≤ "standardó assemble≥ whicΦ everyonσ woulΣ havσ or¼á a⌠ leas⌠ ì
- mos⌠ peoplσ woulΣ have«á ╔ though⌠ oµ turninτ ou⌠ AS═ code« AS═ ì
- i≤áá thσáá Digita∞á ResearcΦá assemble≥áá supplieΣáá witΦáá CP/M« ì
- Unfortunatly¼á AS═ doe≤ no⌠ makσ relocatablσ codσ anΣá generatioε ì
- oµ absolutσ codσ didn'⌠ seeφ worthwhilσ sincσ ╔ wanteΣ t∩ bσ ablσ ì
- t∩á usσ librar∙ routine≤ whicΦ coulΣ bσ loadeΣ anyplacσ iε memor∙ ì
- t∩ makσ u≡ fo≥ thosσ CP/═ system≤ whicΦ diΣ no⌠ havσ zer∩ origin≤ ì
- o≥á thei≥á TP┴ beginninτ a⌠ 100H«á Iµ ╔ wanteΣ t∩á approacΦá thσ ì
- probleφá a≤ Bil∞ Galσ diΣ therσ werσ othe≥á problems«á Thσá 808░ ì
- hardwarσ ha≤ n∩ relativσ addressinτ a≤ doe≤ thσ 650▓ o≥ 6800«á ╔ ì
- decideΣá tha⌠á thσá lacδá oµ thi≤ hardwarσá facilit∙á madσá codσ ì
- generatioεá witΦ TINCM╨ difficult«á Microsoft'≤á M-8░á assemble≥ ìèseemeΣá fairl∙ ubiquitou≤ anΣ tha⌠ i⌠ was¼á iε al∞ truσ respects¼ ì
- compatiblσáá witΦá thσá RMA├á assemble≥á oµáá Digita∞áá Research« ì
- Generatinτá assemble≥ codσ haΣ severa∞ othe≥ problem≤á associateΣ ì
- with it.
- Lookinτá a⌠ thσ TINCM╨ compiler¼á onσ notice≤ tha⌠ therσ arσ ì
- man∙ possibilitie≤ fo≥ generatinτ label≤ whicΦ looδ likσ o≡ code≤ ì
- o≥á pseudo-operation≤ iε thσ assembler«á 808░ assembler≤á alway≤ ì
- seeφ t∩ definσ thσ register≤ a≤ symbol≤ s∩ tha⌠ iµ yo⌡ definσá S╨ ì
- a≤á ßá bytσ iε ß PIDGI╬ prograφ therσ i≤ ever∙ reasoεá t∩á firml∙ ì
- beleivσá tha⌠á i⌠ wil∞ blo≈ thσ assignmen⌠ oµ thσá stacδá pointe≥ ì
- symbo∞á "SP"«á Al∞ oµ thesσ problem≤ caε bσ avoideΣ b∙ prefixinτ ì
- eacΦá symbo∞á iεá thσá outpu⌠ oµ thσá codσá generato≥á witΦá somσ ì
- characte≥á whicΦ doesn'⌠ looδ likσ anythinτ thσá assemble≥á woulΣ ì
- expec⌠á iεá aε interna∞ symbo∞ o≥ op-code«á ╔ choosσ ßá do⌠á fo≥ ì
- this«á B∙ prefixinτ almos⌠ everythinτ witΦ ß dot¼á conflict≤ arσ ì
- avoideΣ anΣ thσ symbol≤ arσ alway≤ unique«á Subroutinσ name≤ arσ ì
- prefixeΣ witΦ tw∩ dot≤ t∩ kee≡ theφ differen⌠ froφ variablσ name≤ ì
- iεáá casσá therσá arσá intersection≤á betweeεá thσá two«áá Thesσ ì
- intersection≤ arσ no⌠ specificall∙ prohibiteΣ b∙ PIDGIN«á Systeφ ì
- symbol≤á anΣá jum≡ target≤ arσ labelleΣ witΦ ßá leadinτá questioε ì
- mark«áá
- Becausσ TINCM╨ canno⌠ tes⌠ o≥ branch¼á certaiε construction≤ ì
- arσ peculiar«á Takσ fo≥ examplσ thσ CHOOS┼ ON/CAS┼ construction« ì
- eacΦá timσ ß CAS┼ i≤ encountereΣ iε thσ inpu⌠ filσ PIDGI╬á shoulΣ ì
- generatσá ßá jum≡ t∩ thσ ENDCHOOS┼ labe∞ bu⌠ no⌠ thσá firs⌠á timσ ì
- tha⌠ CAS┼ i≤ encountereΣ afte≥ thσ CHOOS┼ ON« Sincσ therσ arσ n∩ ì
- tes⌠ facilities¼ thσ jum≡ i≤ generateΣ oε ever∙ occurencσ oµ CAS┼ ì
- bu⌠ oε thσ firs⌠ occurance¼á aε OR╟ $-│ obliterate≤ thσ generateΣ ì
- JM╨á ENDCHOOS┼ instruction«á Thi≤ i≤ donσ b∙ pushinτ ß │ oεá thσ ì
- stacδ a⌠ CHOOS┼ O╬ bu⌠ zer∩ thereafte≥ eacΦ timσ ß CAS┼ statemen⌠ ì
- i≤á noted«á Thi≤ valuσ i≤ poppeΣ ofµ thσ stacδ anΣ useΣá a≤á thσ ì
- valuσá iεá thσá OR╟á statemen⌠ resultinτ iε aεá OR╟á $-░á oεá al∞ ì
- subsequen⌠ call≤ fo≥ CASE«á Therσ arσ als∩ n∩ rea∞ possibilitie≤ ì
- fo≥á codσá optimization«áá Perhap≤á someonσá caεá writσá ßá pos⌠ ì
- compilatioε optimize≥ fo≥ TINCMP - naturally in PIDGIN.
- A≤ aε aiΣ t∩ program≤ operatinτ unde≥ differen⌠ environment≤ ì
- thσá CP/═ implementatioε oµ PIDGI╬ call≤ ß librar∙ subroutinσá a⌠ ì
- thσá beginninτ oµ PIDGI╬ prograφ executioε anΣ a⌠ thσ terminatioε ì
- oµ PIDGI╬ prograφ execution«á Thσ beginninτ subroutinσ i≤ calleΣ ì
- ?INI╘ anΣ thσ concludinτ subroutinσ i≤ calleΣ ?ENDING«á BotΦá oµ ì
- thesσá routine≤ arσ iε thσ IOCMPL╪ subroutine«á ?INI╘á transfer≤ ì
- filσá name≤á froφá thσá contro∞ statemen⌠ t∩ ß se⌠á oµá FCB'≤á iε ì
- IOCMPL╪ anΣ store≤ thσ numbe≥ oµ thesσ filσ name≤ iε AC« ?ENDIN╟ ì
- close≤ an∙ opeε file≤ anΣ return≤ contro∞ t∩ thσ use≥ program« ┴ ì
- jum≡ t∩ ?BOO╘ alway≤ follow≤ thσ CAL╠ ?ENDIN╟ statemen⌠ wheεá thσ ì
- PIDGI╬ statemen⌠ ENDMAI╬ i≤ encountered«á Iµ you≥ hear⌠ desires¼ ì
- yo⌡á caε changσ thesσ routine≤ t∩ d∩ anythinτ yo⌡ fee∞á necessar∙ ì
- in your particular system.
- Variable≤á declareΣá iεá BYT┼ o≥ IN╘ statement≤á arσá alway≤ ì
- placeΣ iε blanδ commoε storage«á Thi≤ facilitate≤ thei≥ usσ witΦ ì
- aεá undocumenteΣá featurσ and¼á beinτá honest¼á totall∙á untesteΣ ì
- feature¼áá whicΦáá allow≤á independen⌠á compilatioεá oµáá prograφ ì
- subroutines«á ╔á expec⌠ thi≤ featurσ t∩ bσ read∙ iε abou⌠á threσ ì
- month≤ time« I⌠ wil∞ no⌠ makσ previou≤ PIDGI╬ program≤ unusable« ì
- ┴ furthe≥ extensioε t∩ bσ useΣ iε maiε program≤ o≥ subroutine≤ i≤ ìèthσá LOCA╠á VARIABLE╙á statemen⌠á anΣá ENDLOCA╠á statement«á An∙ ì
- variable≤ declareΣ b∙ eithe≥ BYT┼ o≥ IN╘ statement≤ betweeε thesσ ì
- tw∩ statement≤ arσ no⌠ pu⌠ iε commoε anΣ arσ LOCA╠ t∩ thσ curren⌠ ì
- compilation. All other variables are global.
- Afte≥á ßá fe≈á discussion≤ witΦá Bil∞á Gale¼á thσá PARAMETE╥ ì
- statemen⌠ wa≤ born« Thσ PARAMETE╥ statemen⌠ allow≤ yo⌡ t∩ definσ ì
- iε ß singlσ locatioε al∞ oµ thσ systeφ dependen⌠ variable≤ fo≥á ß ì
- program«áá Thσá paramete≥á statemen⌠á ha≤á thσá followinτá form║ ì
- PARAMETE╥ K$$=$$$╗á K$ñ i≤ thσ symboliπ paramete≥ terφ anΣ $$ñ i≤ ì
- thσ numerica∞ equivalent« T∩ usσ thσ parametriπ variablσ K$ñ yo⌡ ì
- neeΣ thσ $$=+K$ñ statemen⌠ o≥ thσ I$$=+K$ñ statement« Aε examplσ ì
- oµá thσá usσá oµá thi≤ statemen⌠ i≤ iε TINCM╨á itselµá wherσá thσ ì
- variable≤á L╞ (linσ feed)¼á N╠ (carriagσ return⌐ anΣ E╞á arσá al∞ ì
- defined by means of parameter statements.
- Gettinτá CP/═á linkeΣ u≡ witΦ thσ internal≤ oµ PIDGI╬ wa≤á ß ì
- rathe≥ difficul⌠ task«á ╔ diΣ no⌠ wisΦ t∩ makσ havoπ ou⌠ oµá thσ ì
- filσá systeφá useΣ b∙ PIDGI╬ ye⌠ CP/═ needeΣ ß filσ namσá rathe≥ ì
- thaεá ßá blocδá locatioεá t∩ locatσ thσ tex⌠á oµá ßá filσá o≥á t∩ ì
- determinσá wherσá tex⌠ wa≤ t∩ bσ written«á Iε orde≥ t∩á linδá u≡ ì
- blocδá number≤ witΦ filσ name≤ ╔ decideΣ tha⌠ ß fictitiou≤á blocδ ì
- numbe≥á wa≤ goinτ t∩ bσ useΣ a≤ ß filσ identifie≥ insidσá PIDGIN« ì
- Thi≤á identifie≥á woulΣá bσá associateΣ witΦ ß filσá namσá b∙á aε ì
- associatσ statemen⌠ whicΦ needeΣ t∩ bσ designed«á Thσá associatσ ì
- statemen⌠á wa≤ borε afte≥ considerablσ though⌠ bu⌠ i⌠ i≤á obviou≤ ì
- tha⌠á i⌠á i≤á ver∙á limitinτá iε scopσá anΣá probabl∙á shoulΣá bσ ì
- redesigneΣá t∩á bσá morσ general«á Thσá forφá oµá thσá associatσ ì
- statemen⌠á i≤á ASSOCIAT┼ FC┬ ñ WIT╚ I$$«á Thi≤ allow≤ thσá firs⌠ ì
- paramete≥á whicΦá i≤ thσ filσ mentioneΣ iε tha⌠ locatioεá oµá thσ ì
- contro∞ statemen⌠ t∩ bσ associateΣ witΦ blocδ numbe≥ I$$« ╔ onl∙ ì
- useΣ thσ lowe≥ seveε bit≤ oµ I$ñ a≤ ß blocδ number/filσ numbe≥ s∩ ì
- onl∙á thesσ bit≤ neeΣ bσ uniquσ fo≥ eacΦ file«á Thσá eigtΦá bit¼ ì
- whilσá transcribeΣá int∩ thσ I/╧ subroutine≤ shoulΣ bσá zer∩á fo≥ ì
- furthe≥ expansion« If you had a control statement:
- AAB.AAA,BBB.CCC,DDD.EEE
- anΣá you≥ paramete≥ ñ iε thσ associatσ statemen⌠ wa≤ ▓ thi≤ woulΣ ì
- resul⌠á iεá thσá associatioεá oµ BBB.CC├á witΦá thσá filσá numbe≥ ì
- containeΣ iε thσ lo≈ orde≥ seveε bit≤ oµ I$$«á Thi≤á associatioε ì
- reques⌠á mark≤ thσ filσ a≤ "preparedó iε aε interna∞ tablσ iε thσ ì
- I/╧ complex«á Anothe≥ forφ oµ thσ associatσ statement¼á no⌠á ye⌠ ì
- implementeΣ iε thσ I/╧ comple° subroutine≤ i≤ thσ form║ ASSOCIAT┼ ì
- FIL┼á $ñá WIT╚ I$$«á Thσ firs⌠ paramete≥ i≤ supposeΣ t∩á bσá thσ ì
- star⌠á oµá 1▓ byte≤ defininτ thσ drivσ anΣ theε thσá eleveεá bytσ ì
- filσ namσ anΣ extensioε fo≥ ß particula≥ file«á UnuseΣ byte≤ arσ ì
- t∩á bσá se⌠ t∩ blanks«á Thi≤ routinσ wil∞ als∩ marδ thσ filσá a≤ ì
- prepared«á Fo≥á furthe≥ detail≤ yo⌡ shoulΣ refe≥ t∩ thσá IOCMPL╪ ì
- assembly listing.
- Specificall∙ no⌠ implementeΣ arσ thσ statement≤ READBU╞á anΣ ì
- WRITEBUF«á AlthougΦá therσá i≤á nothinτá difficul⌠á abou⌠á thesσ ì
- statement≤á the∙á werσá no⌠ necessar∙ fo≥ thσá implementatioεá oµ ì
- TINCM╨ anΣ s∩ ╔ didn'⌠ codσ them«á Thσ statement≤á LOMEM¼á HIME═ ì
- anΣ REGISTE╥ arσ no⌠ implemented« Thesσ statement≤ havσ n∩ placσ ì
- iε ß relocatablσ prograφ whicΦ doesn'⌠ havσ ß zer∩ page«á Iµ yo⌡ ì
- wan⌠á yo⌡á caεá pu⌠á thesσ statement≤ int∩á thσá macr∩á template≤ ì
- without any action occuring when they are recognized.
- 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≥ ì
- codσá wil∞á ruεá oε thσ 808░ i⌠ wil∞ probabl∙ ruεá oεá thσá othe≥ ì
- processors«á MucΦ codσ caε bσ optimizeΣ iµ TINCM╨ i≤ writteε fo≥ ì
- ßá Z-80«á Thσ I/╧ comple° especiall∙ wil∞ bσ cleane≥ oεá ßá Z-8░ ì
- than it is on the 8080.
- 808░ TINCM╨ anΣ al∞ oµ thσ associateΣ routine≤ arσ availablσ ì
- througΦá thσ SIG/═ librar∙ o≥ b∙ direc⌠ mai∞ froφ thσ author«á ╔ ì
- wil∞á preparσ ß singlσ density¼á eigh⌠ incΦ CP/═ forma⌠ disδá anΣ ì
- mai∞á thσá samσ oε receip⌠ oµ ß mone∙ order¼á checδá o≥á 2░á cen⌠ ì
- stamp≤á fo≥ $25«á U╙ Funds«á Iµ yo⌡ seσ thi≤ afte≥ 1982¼á bette≥ ì
- writσ firs⌠ a≤ Bil∞ Galσ says«á Iµ yo⌡ decidσ t∩ implemen⌠á thi≤ ì
- processo≥á fo≥á othe≥á machine≤á anΣ fee∞á ╔á coulΣá help¼á don'⌠ ì
- hesitatσ t∩ write«á STAGE▓ i≤ distributeΣ witΦ TINCM╨ b∙ specia∞ ì
- arrangemen⌠á witΦá RicharΣá Curtiss«á Thσá distributioεá oµá an∙ ì
- material≤ oε thi≤ disδ d∩ no⌠ alte≥ thσ curren⌠ copyrigh⌠á statu≤ ì
- oµá an∙ oµ thσ material«á Permissioε i≤ granteΣ t∩ distributσ o≥ ì
- makσá a≤á man∙ copie≤ a≤ desireΣá fo≥á non-commercia∞á use«á Thσ ì
- remaining rights are retained by the individual authors.