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 / comm.pa < prev    next >
Text File  |  1992-09-18  |  10KB  |  378 lines

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