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

  1. /TTY.PA TERMINAL HANDLER FOR DECmate
  2.  
  3. /ORIGIN 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.     VERSION="B&77^100+60
  22.  
  23.     AC0004=CLA CLL IAC RTL
  24.     AC100=CLA IAC BSW
  25.     AC4000=CLA STL RAR
  26.     ACM2=CLL CLA CMA RAL
  27.     BSW=7002
  28.     XON="Q&277
  29.     XOFF="S&277
  30.     CDFXXX=HLT
  31.     CDFIFX=HLT
  32.  
  33.     RECEIVE=03
  34.     TRANSMIT=RECEIVE+1
  35.  
  36.     XMTSKP=TRANSMIT^10+6001
  37.     XMTLOD=TRANSMIT^10+6006
  38.  
  39.     RECSKP=RECEIVE^10+6001
  40.     RECLOD=RECEIVE^10+6006
  41.  
  42.     *0
  43.     7777        /BEGIN DEVICE CONTROL BLOCK FOR BUILD.
  44.     DEVICE TTY
  45.     DEVICE TTY
  46.     0000
  47.     ENTRY&177+4000
  48.     0000
  49.     0000
  50.  
  51.     *200
  52.  
  53.  
  54. RENTRY,
  55. ZEROSW,            /WHEN CLEAR, BUFFER IS BEING ZEROED PRIOR TO EXIT.
  56. BUFRFD,CDFXXX
  57.     ISZ RXSWITCH    /IF -1, FUNCTION IS XMIT
  58.     JMP RECV0    /INPUT
  59.  
  60. /TRANSMIT ROUTINES. THERE ARE NO "ERROR CONDITIONS" FOR OUTPUT. ALL TERMINATION
  61. /WILL RETURN TO CALLER AT +5 (NORMAL EXIT) WITH THE C(AC)=0. POSSIBLE RETURN
  62. /CONDITIONS ARE: 1) BUFFER IS EMPTY;  2) ^Z WAS FOUND IN BUFFER. A ^C WILL
  63. /RETURN TO MONITOR AT 7600. XON/XOFF IS RECOGNIZED FOR THE OUTPUT DEVICE.
  64.  
  65. XMIT1,    ISZ WRDCNT
  66.     JMP XMIT1A
  67. EXIT5,    TAD ZEROSW
  68.     SZA CLA
  69.     ISZ ENTRY
  70. XITFLD,CDFIFX
  71.     JMP I ENTRY
  72. XMIT1A,STL
  73.     RTL
  74.     RTL
  75.     SPA
  76.     JMP XMIT1B    /FOR CHAR3
  77.     DCA CHAR3
  78.     TAD I BUFRPT
  79.     JMS I IXMIT
  80.     TAD I BUFRPT
  81.     ISZ BUFRPT
  82.     7400        /SERVES AS A NOP TO PROTECT ISZ
  83.     AND .-1
  84.     CLL RAL
  85.     TAD CHAR3
  86.     JMP XMIT1A+1
  87. XMIT1B,JMS I IXMIT
  88.     JMP XMIT1    /FOR ANOTHER PASS
  89.  
  90. BACKSPACE,
  91. UMINCR,25-15
  92. CDFCIF,CDF CIF 0
  93. K3700,    3700
  94.  
  95. IXMIT,    XMIT2-PAGE2
  96. IDOCRLF,DOCRLF-PAGE2
  97. IDEVINPUT,DEVINPUT-PAGE2
  98.  
  99. /INPUT ROUTINES. ACCEPTS INPUT FROM THE DEVICE AND RETURNS 8-BIT ASCII
  100. /TO THE CALLING PROGRAM BUFFER. INPUT CHARACTERS ARE SCREENED FOR A
  101. /^Z, CR(LF), ^U AND RUBOUTS. ^Z IS THE ONLY CHARACTER THAT WILL CAUSE
  102. /AN "ERROR" EXIT. THERE ARE NO FATAL ERRORS. ^Z AND CR WILL ECHO CRLF, PAD
  103. /THE CALLING PROGRAM BUFFER WITH ZERO BEFORE EXITING. ^U WILL NOT BACK
  104. /UP PAST THE START OF BUFFER. IF ^U IS FOUND, THE BUFFER POINTER IS RESET
  105. /TO THE BEGINNING OF THE BUFFER, AND A CRLF ECHOED. SINCE ECHOING OF OUTPUT
  106. /CHARACTERS PASSES THROUGH THE OUTPUT PRINTING ROUTINES, ALL PRINTING CHARAC-
  107. /TERS ARE COUNTED. WHEN THE INPUT LINE LENGTH IS EXCEEDED, A CRLF WILL BE
  108. /ECHOED, BUT NOT INSERTED IN THE BUFFER.
  109.  
  110. RECV0,    TAD WRDCNT
  111.     CLL IAC RAL    /INPUT RETURNS 1 8BIT PER 1 12BIT WORD TO CALLER.
  112.     DCA WRDCNT
  113. RECV1,    TAD ZEROSW    /WHEN ZERO, WE ARE PADDING USER BUFFER PRIOR TO EXIT.
  114.     SZA CLA
  115.     JMS I IDEVINPUT    /GET A CHARACTER FROM INPUT.
  116. RECV1A,DCA I BUFRPT    /RETURNS 8BIT ASCII.
  117.     TAD I BUFRPT    /USE THE CALLING BUFFER FOR TEMP STORAGE.
  118.     TAD CHM377    /MINUS RUBOUT
  119.     SNA 
  120.     JMP RECV2    /FOUND A RUBOUT.
  121.     TAD ROMINZ    /RUBOUT-^Z (177-32)
  122.     SNA
  123.     JMP RECV4    /CONTROL Z
  124.     TAD ZMINU    /^Z-^U    (32-25)
  125.     SNA
  126.     JMP RECV5    /CONTROL U. JMP INSTRUCTION IS ALSO THE "U" TO PRINT!
  127.     TAD UMINCR    /^U-CR (25-15)
  128.     SNA CLA
  129.     JMP RECV6    /CARRIAGE RETURN
  130. RECV9,    TAD I BUFRPT
  131.     JMS I IXMIT    /ECHO CHARACTER
  132.     ISZ BUFRPT
  133. ZMINU,    32-25
  134.     ISZ WRDCNT
  135.     JMP RECV1    /FOR THE NEXT
  136.     JMP EXIT5
  137.  
  138. RECV4,    DCA ZEROSW    /CONTROL Z WILL EXIT AT CALL +4
  139.     TAD CH336
  140.     JMS I IXMIT
  141.     AC100
  142.     JMP RECV9
  143.  
  144.  
  145. CH325,
  146. RECV5,    TAD CH336    /CONTROL U
  147.     JMS I IXMIT
  148.     TAD CH325    /MAKES A PRINTABLE "U"
  149.     JMS I IXMIT
  150. RECV5A,JMS I IDOCRLF
  151.     TAD BUFRAD
  152. RECV5B,DCA BUFRPT    /RESET POINTER TO START OF BUFFER
  153.     JMP RECV1    /FOR A NEW LINE.
  154.  
  155. RECV6,    ISZ ENTRY    /SINCE A "CLEAR" ZEROSWITCH WON'T BUMP IT FOR EXIT.
  156.     DCA ZEROSW
  157.     TAD I BUFRPT
  158.     JMS I IXMIT    /FOR THE CR.
  159.     ISZ BUFRPT
  160.     212        /(LINEFEED; USED TO PROTECT ISZ)
  161.     TAD .-1
  162.     ISZ WRDCNT
  163.     JMP RECV1A    /OTHERWISE, INSERT THE LINE FEED, AND PROCEED NORMALLY.
  164.     JMP EXIT5    /IF COUNT OVERFLOWS, WILL STILL EXIT AT +5 WITH C(AC)=0.
  165.  
  166. RECV2,    TAD BACKSPACE
  167.     JMS I IXMIT
  168. CH336,    TAD SPACE
  169.     JMS I IXMIT
  170.     TAD BACKSPACE
  171.     JMS I IXMIT
  172.     TAD BUFRPT
  173.     CIA
  174.     TAD BUFRAD    /IF BUFFER IS PAST START
  175.     SNA CLA
  176.     JMP RECV5A    /DO CRLF AND RESET ALL,
  177. SPACE,    CMA        /ELSE JUST BACK UP THE POINTER TO THE BUFFER
  178.     TAD BUFRPT
  179.     JMP RECV5B
  180.  
  181. WRDCNT,    0
  182. K70,    70
  183. BUFRAD,    0
  184. BUFRPT,    0
  185. RXSWITCH,
  186. CHAR3,    0    
  187. ROMINZ,177-32        /RUBOUT-^Z
  188. CHM377,-377        /MINUS 8BIT ASCII RUBOUT.
  189.  
  190. /            TRAILING DATA BLOCK FOR HANDLER CALL:
  191.  
  192. /    WORD    1 FUNCTION WORD  _ _ _ ! _ _ _ ! _ _ _ ! _ _ _
  193. /                 ! \          /   FIELD   UNUSED
  194. /               4000= WRITE   DOUBLE      OF      IN 
  195. /               0000= INPUT   WORDS ^100  BUFFER  OS/78
  196.  
  197. /    WORD    2 ADDRESS OF BUFFER
  198. /    WORD    3 STARTING BLOCK. IF 0, MAY DO SPECIAL INIT ROUTINES;
  199. /                      OTHERWISE IS IGNORED FOR THIS HANDLER
  200. /    WORD    4 ERROR. IF AC IS POSITIVE, ERROR IS NOT CONSIDERED FATAL.
  201. /    WORD    5 NORMAL RETURN. AC IS 0.
  202.  
  203.  
  204. ENTRY,    VERSION
  205.     AC4000        /FORCE THE WRITE (OUTPUT BIT) INTO THE LINK IF
  206.     TAD I ENTRY    /PRESENT WHEN GETTING THE FUNCTION WORD. MUST BE
  207.     AND K70        /PRESERVED WHILE FETCHING REST OF DATA BLOCK.
  208.     TAD CDF0
  209.     DCA BUFRFD    /GET THE FIELD OF THE BUFFER
  210.     SZL
  211.     STA
  212.     DCA RXSWITCH    /0=RECEIVE; -1=XMIT
  213.     TAD K3700    /AND THE "DOUBLE WORDS". FOR OUTPUT, WILL REPRESENT
  214.     AND I ENTRY    /2 PACKED WORDS OF 3 ASCII CHARS. IF INPUT, WILL BE
  215.     CMA        /DOUBLED TO COUNT 1 8BIT CHARACTER FOR EACH 12BIT WORD.
  216.             /NOTE: OS/8 ROUTINES CAN REQUEST THE PROCESSING OF A
  217.             /NULL BUFFER (ZERO DOUBLE WORDS). IF SOME SPECIAL
  218.             /ACTION IS REQUIRED, E.G. WRITING EOF OR DOING FORM
  219.             /FEED, THE WORD COUNT WILL BE ZERO. THIS HANDLER MAY
  220.             /OR MAY NOT HAVE SPECIAL FUNCTIONS, DEPENDING UPON
  221.             /ASSEMBLY SPECIFICATIONS.
  222.     DCA WRDCNT
  223.     ISZ ENTRY
  224.     TAD I ENTRY    /GET THE STARTING ADDRESS OF THE BUFFER.
  225.     DCA BUFRAD
  226.     TAD BUFRAD
  227.     DCA BUFRPT    /WILL HAVE CURRENT POSITION OF USER'S BUFFER.
  228.     ISZ ENTRY    /SKIP THE BLOCK NUMBER (THIS IS NON-FILE STRUCTURED)
  229.     ISZ ENTRY    /AND LEAVE RETURN POINTING TO ERROR.
  230.     RDF        /DATA FIELD IS SET TO CALL; INSTRUCTION FIELD IS HERE.
  231.     TAD CDFCIF
  232.     DCA XITFLD    /WHEN EXITING, IF/DF IS SET TO CALLING ROUTINE.
  233. CDF0,    CDF 0        /FALL THRU TO NEXT PAGE FOR INDIRECT ADDRESS ADJUSTMENT
  234.     PAGE
  235.  
  236.  
  237. /PROCEDURE FOR ADJUSTING THE ABSOLUTE ADDRESSES OF INDIRECT LOCATIONS:
  238.  
  239. /THIS HANDLER IS ASSEMBLED WITH A STARTING LOCATION OF 200. THIS IS PARTLY
  240. /ARBITRARY AND PARTLY BECAUSE OF THE REQUIREMENTS OF THE BUILD PROGRAM.
  241. /A "MARK" IS ESTABLISHED TO BE USED DURING ASSEMBLY TIME TO SET THE VALUE
  242. /OF THE INDIRECT ADDRESS POINTERS TO THE RELATIVE DIFFERENCE BETWEEN THE 
  243. /POINTER AND THE ROUTINE REQUESTED. FOR CONVENIENCE, THIS MARKER IS CALLED
  244. /"PAGE2" AND IS ESTABLISHED AT THE TOP OF THE SECOND PAGE. THE ADJUSTMENT
  245. /ROUTINE FINDS THE BASE ABSOLUTE ADDRESS FROM THE "JMS ." THEN ADDS IT
  246. /TO THE THE VALUE IN "DIFFTABLE". THE CONTENTS OF DIFFTABLE ARE THE
  247. /RELATIVE DIFFERENCES BETWEEN PAGE2 AND THE INDIRECT ADDRESS POINTERS TO
  248. /BE MODIFIED. THIS DIFFERENCE PLUS THE BASE ABSOLUTE ADDRESS FORMS AN
  249. /ABSOLUTE POINTER TO THE ADDRESS TO BE MODIFIED. THE CONTENTS OF THE AD-
  250. /DRESS TO BE MODIFIED IS ALSO THE RELATIVE DIFFERENCE BETWEEN THE MARK
  251. /AND THE ADDRESS DESIRED. USING THE TEMPORARY ABSOLUTE POINTER, THIS DIF-
  252. /FERENCE IS ADDED TO THE BASE ADDRESS THEN RESTORED TO THE INDIRECT
  253. /POINTER AS AN ABSOLUTE VALUE.
  254.  
  255.  
  256.  
  257. ENTRY1,NOP        /GETS JMP I IRENTRY AFTER INIT.
  258. PAGE2A,JMS .        /TO FIND OUT WHERE WE ARE. LEAVE 2A SO WE CAN MOVE.
  259. PAGE2,
  260. ADJUST,TAD DIFFTABLE
  261.     SNA
  262.     JMP ALLSET
  263.     TAD PAGE2A    /AS THE BASE.
  264.     DCA TEMPOINT
  265.     TAD I TEMPOINT
  266.     TAD PAGE2A
  267.     DCA I TEMPOINT
  268.     ISZ ADJUST
  269.     JMP ADJUST
  270.  
  271. XMIT8,    TAD (11        /MAKES THIS LOCATION NOP-ABLE TO OUTPUT TRUE ESCAPE.
  272.     JMP XMIT4
  273.  
  274. XMIT9,    ISZ WIDTH
  275.     JMP XMIT4    /NOT EXCEEDED
  276.     JMS DOCRLF
  277. XMIT9A,TAD RWIDTH    /RESET WIDTH
  278.     DCA WIDTH
  279.     ISZ DEPTH
  280.     JMP XMIT4    /PAGE NOT EXCEEDED.
  281.     ISZ INNER    /GETS "JMP XMIT4" FROM "SET [DEV] NO PAUSE"
  282.     JMP .-1
  283.     ISZ OUTER
  284.     JMP .-3
  285.     TAD ROUTER
  286.     DCA OUTER    /RESET OUTER COUNTER BEFORE GOING
  287.     TAD RDEPTH
  288.     DCA DEPTH
  289.     JMP XMIT4    /TO OUTPUT THE NEXT PAGE.
  290.  
  291. ROUTER,-200        /ARBITRARY. THE RXXXXX LOCATIONS GET MODIFIED FROM SET.
  292.  
  293.     DECIMAL
  294. WIDTH,    -81        /-WIDTH+1
  295. RWIDTH,    -81
  296. DEPTH,    -24
  297. RDEPTH,    -24
  298.     OCTAL
  299.  
  300. XMIT6,    0
  301.     XMTLOD
  302.     XMTSKP
  303.     JMP .-1
  304. OS8MON,    7600        /USE A GROUP 2 CLA TO GET THE MONITOR RETURN POINT.
  305.     JMP I XMIT6
  306.  
  307. IEXIT5,    EXIT5-PAGE2
  308. IRENTRY,RENTRY-PAGE2
  309.  
  310. DIFFTA,    IXMIT-PAGE2
  311. INNER,    IDOCRLF-PAGE2    /THESE DO DOUBLE DUTY AS ONE-TIME POINTERS.
  312. OUTER,    IDEVINPUT-PAGE2    /KEEP "INNER" AND "OUTER" TOGETHER BECAUSE
  313. XMIT3,    IEXIT5-PAGE2    /"SET [DEV] PAUSE N" FINDS "ISZ INNER" FROM HERE.
  314. XOFFLAG,IRENTRY-PAGE2    /-1 SAYS OFF CONDITION EXISTS
  315.  
  316.             /ALSO TERMINATOR FOR DIFFTABLE.
  317. XMIT2,    0        /SCREEN CHARACTER BEFORE OUTPUT
  318.     AND (177
  319.     TAD (200
  320.     DCA XMIT3    /SAVE CHARACTER.
  321. XMIT2B,    JMS DEVIN1    /CHECK DEVICE FOR XON/OFF
  322.     SNA
  323.     JMP XMIT2D    /NO FLAG
  324.     TAD (-203
  325.     SNA
  326.     JMP MONXIT
  327.     TAD (203-XON
  328.     SNA
  329.     JMP XMIT2A
  330.     TAD (XON-XOFF
  331.     SNA CLA
  332.     JMP XMIT2C    /SET XOFF FLAG
  333. XMIT2D,ISZ XOFFLAG    /WORKING ON XOFF ALREADY?
  334.     JMP XMIT2A    /NO. IGNORE THE INPUT
  335. XMIT2C,STA        /[RE]SET THE FLAG
  336.     DCA XOFFLAG
  337.     JMP XMIT2B    /AND KEEP LOOKING.
  338. XMIT2A,DCA XOFFLAG    /KEEP CLEARED WHEN NOT WORKING ON XOFF.
  339.     TAD XMIT3
  340.     TAD (-233
  341.     SNA
  342.     JMP XMIT8    /FOR ESCAPE
  343.     IAC
  344.     SNA
  345.     JMP I IEXIT5    /FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY.
  346.     TAD (32-15    /^Z MINUS CR
  347.     SNA
  348.     JMP XMIT9A    /TO RESET WIDTH AND COUNT FOR DEPTH
  349.     TAD (15-03    /CHECK FOR ^C FOUND ON INPUT SIDE FROM NON-CONSOLE.
  350.     SNA CLA
  351.     JMP MONXIT
  352.     JMP XMIT9    /COUNT PRINTING CHARACTERS FOR WIDTH
  353. XMIT4,    TAD XMIT3    /HERE TO 
  354.     JMS XMIT6
  355.     JMP I XMIT2
  356.  
  357. ALLSET,TAD .+2
  358.     DCA ENTRY1
  359.     JMP I IRENTRY    /BEGIN PROCESSING.
  360.  
  361. TEMPOINT,
  362. DEVINPUT,0
  363.     JMS DEVIN1
  364.     SNA
  365.     JMP .-2        /WAIT HERE FOR SOME INPUT
  366.     JMP I DEVINPUT
  367.  
  368. DEVIN1,0
  369.     RECSKP
  370.     JMP I .-2    /NO FLAG.
  371.     RECLOD
  372.     AND (177
  373.     TAD (200
  374.     JMP I DEVIN1    /WITH 8BIT.
  375.  
  376. MONXIT,CDF CIF 0
  377.     JMP I OS8MON    /BEFORE EXITING TO MONITOR
  378.  
  379. DOCRLF,    0        /OUTPUT A CRLF
  380.     TAD (215
  381.     JMS XMIT6
  382.     TAD (212
  383.     JMS XMIT6
  384.     JMP I DOCRLF
  385.  
  386.  
  387.  
  388.