home *** CD-ROM | disk | FTP | other *** search
/ ftp.update.uu.se / ftp.update.uu.se.2014.03.zip / ftp.update.uu.se / pub / pdp8 / os278-src.tar.Z / os278-src.tar / com0.pa < prev    next >
Text File  |  1992-09-18  |  8KB  |  333 lines

  1. /COM0.PA
  2.  
  3. /ORIGN SERIAL.PA
  4.  
  5. /COPYRIGHT  (C) 1981, 1982,1984 BY DIGITAL EQUIPMENT CORPORATION
  6.  
  7. /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
  8. /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
  9. /CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
  10. /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
  11.  
  12. /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
  13. /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
  14. /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
  15. /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
  16.  
  17. /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
  18. /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
  19. /DIGITAL.
  20.  
  21.  
  22.  
  23.     VERSION="B&77^100+63    / VER B3
  24.  
  25.     NOCHK=0    / 0 = No ctrl c check, 1 = check
  26.  
  27.     AC0004=CLA CLL IAC RTL
  28.     AC100=CLA IAC BSW
  29.     AC4000=CLA STL RAR
  30.     ACM2=CLL CLA CMA RAL
  31.     BSW=7002
  32.     XON="Q&277
  33.     XOFF="S&277
  34.     CDFXXX=HLT
  35.     CDFIFX=HLT
  36.  
  37.     RECEIVE=30
  38.     TRANSMIT=RECEIVE+1
  39.  
  40.     XMTSKP=TRANSMIT^10+6001
  41.     XMTLOD=TRANSMIT^10+6006
  42.  
  43.     RECSKP=RECEIVE^10+6001
  44.     RECLOD=RECEIVE^10+6006
  45.  
  46.     *0
  47.     7777
  48.     DEVICE COM0
  49.     DEVICE COM0
  50.     0050
  51.     ENTRY&177+4000
  52.     0000
  53.     0000
  54.  
  55.     *200
  56.  
  57.  
  58. RENTRY,
  59. ZEROSW,            /WHEN CLEAR, BUFFER IS BEING ZEROED PRIOR TO EXIT.
  60. BUFRFD,    CDFXXX
  61.     ISZ RXSWITCH    /IF -1, FUNCTION IS XMIT
  62.     JMP RECV0    /INPUT
  63.  
  64. /TRANSMIT ROUTINES. THERE ARE NO "ERROR CONDITIONS" FOR OUTPUT. ALL TERMINATION
  65. /WILL RETURN TO CALLER AT +5 (NORMAL EXIT) WITH THE C(AC)=0. POSSIBLE RETURN
  66. /CONDITIONS ARE: 1) BUFFER IS EMPTY;  2) ^Z WAS FOUND IN BUFFER. A ^C WILL
  67. /RETURN TO MONITOR AT 7600. XON/XOFF IS RECOGNIZED FOR THE OUTPUT DEVICE.
  68. XMIT,    TAD CRCHAR    /SEND ONE TIME CR TO MAKE BASIC HAPPY
  69.     JMS I IXMIT6
  70.     DCA XMIT
  71.     DCA XMIT+1
  72. XMIT1,    ISZ WRDCNT
  73.     JMP XMIT1A
  74. EXIT5,    TAD ZEROSW
  75.     SZA CLA
  76.     ISZ ENTRY
  77. XITFLD,    CDFIFX
  78.     JMP I ENTRY
  79. XMIT1A,    STL
  80.     RTL
  81.     RTL
  82.     SPA
  83.     JMP XMIT1B    /FOR CHAR3
  84.     DCA CHAR3
  85.     TAD I BUFRPT
  86.     JMS I IXMIT
  87.     TAD I BUFRPT
  88.     ISZ BUFRPT
  89.     7400        /SERVES AS A NOP TO PROTECT ISZ
  90.     AND .-1
  91.     CLL RAL
  92.     TAD CHAR3
  93.     JMP XMIT1A+1
  94. XMIT1B,    JMS I IXMIT
  95.     JMP XMIT1    /FOR ANOTHER PASS
  96.  
  97. CDFCIF,    CDF CIF 0
  98. K3700,    3700
  99. CRCHAR,    215
  100.  
  101. IXMIT,    XMIT2-PAGE2
  102. IXMIT6,    XMIT6-PAGE2
  103. IDEVINPUT,DEVINPUT-PAGE2
  104.  
  105.  
  106. /INPUT ROUTINES. ACCEPTS INPUT FROM THE DEVICE AND RETURNS 8-BIT ASCII
  107. /TO THE CALLING PROGRAM BUFFER. INPUT CHARACTERS ARE SCREENED FOR A
  108. /^Z, CR(LF).  ^Z IS THE ONLY CHARACTER THAT WILL CAUSE
  109. /AN "ERROR" EXIT. THERE ARE NO FATAL ERRORS. ^Z AND CR WILL ECHO CRLF, PAD
  110. /THE CALLING PROGRAM BUFFER WITH ZERO BEFORE EXITING.
  111.  
  112. RECV0,    TAD WRDCNT
  113.     CLL IAC RAL    /INPUT RETURNS 1 8BIT PER 1 12BIT WORD TO CALLER.
  114.     DCA WRDCNT
  115.     TAD XXON
  116.     JMS I IXMIT6
  117. RECV1,    TAD ZEROSW    /WHEN ZERO, WE ARE PADDING USER BUFFER PRIOR TO EXIT.
  118.     SZA CLA
  119.     JMS I IDEVINPUT    /GET A CHARACTER FROM INPUT.
  120. RECV1A,    DCA I BUFRPT    /RETURNS 8BIT ASCII.
  121.     TAD I BUFRPT    /USE THE CALLING BUFFER FOR TEMP STORAGE.
  122.     TAD MINZ    /-^Z (-232)
  123.     SNA
  124.     JMP XITFLD    /^Z FOUND EXIT
  125.     TAD ZMINCR    /^Z-CR (32-15)
  126.     SNA
  127.     JMP RECV6    /CARRIAGE RETURN
  128.     TAD CRMLF    /CR-LF  (15-12)
  129.     SNA CLA
  130.     JMP RECV1    /DON'T PASS LINE FEEDS
  131.     ISZ BUFRPT    /UPDATE BUFFER POINTER
  132. ZMINCR,    32-15
  133.     ISZ WRDCNT
  134.     JMP RECV1    /FOR THE NEXT
  135.     JMP EXIT5
  136.  
  137. RECV6,    ISZ ENTRY    /SINCE A "CLEAR" ZEROSWITCH WON'T BUMP IT FOR EXIT.
  138.     DCA ZEROSW
  139.     TAD XXOFF
  140.     JMS I IXMIT6    /SEND XOFF AFTER CR
  141.     ISZ BUFRPT
  142. LF,    212        /(LINEFEED; USED TO PROTECT ISZ)
  143.     TAD LF
  144.     DCA I BUFRPT
  145.     ISZ BUFRPT
  146. XXOFF,    XOFF
  147.     JMP ZMINCR
  148.  
  149. XXON,    XON
  150. WRDCNT,    0
  151. K70,    70
  152. BUFRAD,    0
  153. BUFRPT,    0
  154. RXSWITCH,
  155. CHAR3,    0    
  156. MINZ,    -232        /-^Z
  157. CRMLF,    15-12
  158.  
  159. /            TRAILING DATA BLOCK FOR HANDLER CALL:
  160.  
  161. /    WORD    1 FUNCTION WORD  _ _ _ ! _ _ _ ! _ _ _ ! _ _ _
  162. /                 ! \          /   FIELD   UNUSED
  163. /               4000= WRITE   DOUBLE      OF      IN 
  164. /               0000= INPUT   WORDS ^100  BUFFER  OS/78
  165.  
  166. /    WORD    2 ADDRESS OF BUFFER
  167. /    WORD    3 STARTING BLOCK. IF 0, MAY DO SPECIAL INIT ROUTINES;
  168. /                      OTHERWISE IS IGNORED FOR THIS HANDLER
  169. /    WORD    4 ERROR. IF AC IS POSITIVE, ERROR IS NOT CONSIDERED FATAL.
  170. /    WORD    5 NORMAL RETURN. AC IS 0.
  171.  
  172.  
  173.     *350
  174. ENTRY,    VERSION
  175.     AC4000        /FORCE THE WRITE (OUTPUT BIT) INTO THE LINK IF
  176.     TAD I ENTRY    /PRESENT WHEN GETTING THE FUNCTION WORD. MUST BE
  177.     AND K70        /PRESERVED WHILE FETCHING REST OF DATA BLOCK.
  178.     TAD CDF0
  179.     DCA BUFRFD    /GET THE FIELD OF THE BUFFER
  180.     SZL
  181.     STA
  182.     DCA RXSWITCH    /0=RECEIVE; -1=XMIT
  183.     TAD K3700    /AND THE "DOUBLE WORDS". FOR OUTPUT, WILL REPRESENT
  184.     AND I ENTRY    /2 PACKED WORDS OF 3 ASCII CHARS. IF INPUT, WILL BE
  185.     CMA        /DOUBLED TO COUNT 1 8BIT CHARACTER FOR EACH 12BIT WORD.
  186.             /NOTE: OS/8 ROUTINES CAN REQUEST THE PROCESSING OF A
  187.             /NULL BUFFER (ZERO DOUBLE WORDS). IF SOME SPECIAL
  188.             /ACTION IS REQUIRED, E.G. WRITING EOF OR DOING FORM
  189.             /FEED, THE WORD COUNT WILL BE ZERO. THIS HANDLER MAY
  190.             /OR MAY NOT HAVE SPECIAL FUNCTIONS, DEPENDING UPON
  191.             /ASSEMBLY SPECIFICATIONS.
  192.     DCA WRDCNT
  193.     ISZ ENTRY
  194.     TAD I ENTRY    /GET THE STARTING ADDRESS OF THE BUFFER.
  195.     DCA BUFRAD
  196.     TAD BUFRAD
  197.     DCA BUFRPT    /WILL HAVE CURRENT POSITION OF USER'S BUFFER.
  198.     ISZ ENTRY    /SKIP THE BLOCK NUMBER (THIS IS NON-FILE STRUCTURED)
  199.     ISZ ENTRY    /AND LEAVE RETURN POINTING TO ERROR.
  200.     RDF        /DATA FIELD IS SET TO CALL; INSTRUCTION FIELD IS HERE.
  201.     TAD CDFCIF
  202.     DCA XITFLD    /WHEN EXITING, IF/DF IS SET TO CALLING ROUTINE.
  203. CDF0,    CDF 0        /FALL THRU TO NEXT PAGE FOR INDIRECT ADDRESS ADJUSTMENT
  204.     PAGE
  205.  
  206.  
  207. /PROCEDURE FOR ADJUSTING THE ABSOLUTE ADDRESSES OF INDIRECT LOCATIONS:
  208.  
  209. /THIS HANDLER IS ASSEMBLED WITH A STARTING LOCATION OF 200. THIS IS PARTLY
  210. /ARBITRARY AND PARTLY BECAUSE OF THE REQUIREMENTS OF THE BUILD PROGRAM.
  211. /A "MARK" IS ESTABLISHED TO BE USED DURING ASSEMBLY TIME TO SET THE VALUE
  212. /OF THE INDIRECT ADDRESS POINTERS TO THE RELATIVE DIFFERENCE BETWEEN THE 
  213. /POINTER AND THE ROUTINE REQUESTED. FOR CONVENIENCE, THIS MARKER IS CALLED
  214. /"PAGE2" AND IS ESTABLISHED AT THE TOP OF THE SECOND PAGE. THE ADJUSTMENT
  215. /ROUTINE FINDS THE BASE ABSOLUTE ADDRESS FROM THE "JMS ." THEN ADDS IT
  216. /TO THE THE VALUE IN "DIFFTABLE". THE CONTENTS OF DIFFTABLE ARE THE
  217. /RELATIVE DIFFERENCES BETWEEN PAGE2 AND THE INDIRECT ADDRESS POINTERS TO
  218. /BE MODIFIED. THIS DIFFERENCE PLUS THE BASE ABSOLUTE ADDRESS FORMS AN
  219. /ABSOLUTE POINTER TO THE ADDRESS TO BE MODIFIED. THE CONTENTS OF THE AD-
  220. /DRESS TO BE MODIFIED IS ALSO THE RELATIVE DIFFERENCE BETWEEN THE MARK
  221. /AND THE ADDRESS DESIRED. USING THE TEMPORARY ABSOLUTE POINTER, THIS DIF-
  222. /FERENCE IS ADDED TO THE BASE ADDRESS THEN RESTORED TO THE INDIRECT
  223. /POINTER AS AN ABSOLUTE VALUE.
  224.  
  225.  
  226.  
  227. ENTRY1,    NOP        /GETS JMP I IRENTRY AFTER INIT.
  228. PAGE2A,    JMS .        /TO FIND OUT WHERE WE ARE. LEAVE 2A SO WE CAN MOVE.
  229. PAGE2,
  230. ADJUST,    TAD DIFFTABLE
  231.     SNA
  232.     JMP ALLSET
  233.     TAD PAGE2A    /AS THE BASE.
  234.     DCA TEMPOINT
  235.     TAD I TEMPOINT
  236.     TAD PAGE2A
  237.     DCA I TEMPOINT
  238.     ISZ ADJUST
  239.     JMP ADJUST
  240.  
  241. XMIT6,    0
  242.     TAD (400
  243.     XMTLOD
  244.     XMTSKP
  245.     JMP .-1
  246. OS8MON,    7600        /USE A GROUP 2 CLA TO GET THE MONITOR RETURN POINT.
  247.     JMP I XMIT6
  248.  
  249. IEXIT5,    EXIT5-PAGE2
  250. IRENTRY,RENTRY-PAGE2
  251.  
  252. DIFFTA,    IXMIT-PAGE2    /SET UP CROSS PAGE LINKAGE
  253.     IXMIT6-PAGE2
  254.     IDEVINPUT-PAGE2
  255. XMIT3,    IEXIT5-PAGE2
  256. XOFFLAG,IRENTRY-PAGE2
  257.  
  258. XMIT2,    0        /SCREEN CHARACTER BEFORE OUTPUT
  259.     AND (177
  260.     TAD (200
  261.     DCA XMIT3    /SAVE CHARACTER.
  262.     JMS CHKTTY
  263. XMIT2B,    JMS DEVIN1    /CHECK DEVICE FOR XON/OFF
  264.     SNA
  265.     JMP XMIT2D    /NO FLAG
  266.     TAD (-XON
  267.     SNA
  268.     JMP XMIT2A
  269.     TAD (XON-XOFF
  270.     SNA CLA
  271.     JMP XMIT2C    /SET XOFF FLAG
  272. XMIT2D,    ISZ XOFFLAG    /WORKING ON XOFF ALREADY?
  273.     JMP XMIT2A    /NO. IGNORE THE INPUT
  274. XMIT2C,    STA        /[RE]SET THE FLAG
  275.     DCA XOFFLAG
  276.     JMP XMIT2B    /AND KEEP LOOKING.
  277. XMIT2A,    DCA XOFFLAG    /KEEP CLEARED WHEN NOT WORKING ON XOFF.
  278.     TAD XMIT3
  279.     TAD (-232
  280.     SNA
  281.     JMP I IEXIT5    /FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY.
  282.     TAD (32-15    /^Z MINUS CR
  283.     SNA
  284.     JMP CRLF
  285.     TAD (15-12    /CR-LF
  286.     SNA CLA
  287.     JMP I XMIT2    /DON'T PASS LF CHARACTERS 
  288.     TAD XMIT3    /HERE TO 
  289.     JMS XMIT6
  290.     JMP I XMIT2
  291.  
  292. CRLF,    TAD (215
  293.     JMS XMIT6
  294.     TAD (212
  295.     JMS XMIT6
  296.     JMP I XMIT2
  297.  
  298. ALLSET,    TAD ALL2
  299.     DCA ENTRY1
  300. ALL2,    JMP I IRENTRY    /BEGIN PROCESSING.
  301.  
  302. TEMPOINT,
  303. DEVINPUT,0
  304.     JMS CHKTTY
  305.     JMS DEVIN1
  306.     SNA
  307.     JMP DEVINPUT+1    /WAIT HERE FOR SOME INPUT
  308.     JMP I DEVINPUT
  309.  
  310. DEVIN1,    0
  311.     RECSKP
  312.     JMP I DEVIN1    /NO FLAG.
  313.     RECLOD
  314.     SNA        /FILTER NULLS
  315.     JMP DEVIN1+1
  316.     AND (177
  317.     TAD (200
  318.     JMP I DEVIN1    /WITH 8BIT.
  319.  
  320. CHKTTY,    0
  321. IFNZRO    NOCHK < KSF >
  322. IFZERO    NOCHK < NOP >
  323.     JMP I CHKTTY
  324.     KRB
  325.     AND (177
  326.     TAD (-3        /IS IT A CTRL C
  327.     SZA CLA
  328.     JMP I CHKTTY
  329.     CDF CIF 0
  330.     JMP I OS8MON    /BEFORE EXITING TO MONITOR
  331.  
  332.  
  333.