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 >
Wrap
Text File
|
1992-09-18
|
10KB
|
388 lines
/TTY.PA TERMINAL HANDLER FOR DECmate
/ORIGIN SERIAL.PA
/COPYRIGHT (C) 1981, 1982 1984 BY DIGITAL EQUIPMENT CORPORATION
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
VERSION="B&77^100+60
AC0004=CLA CLL IAC RTL
AC100=CLA IAC BSW
AC4000=CLA STL RAR
ACM2=CLL CLA CMA RAL
BSW=7002
XON="Q&277
XOFF="S&277
CDFXXX=HLT
CDFIFX=HLT
RECEIVE=03
TRANSMIT=RECEIVE+1
XMTSKP=TRANSMIT^10+6001
XMTLOD=TRANSMIT^10+6006
RECSKP=RECEIVE^10+6001
RECLOD=RECEIVE^10+6006
*0
7777 /BEGIN DEVICE CONTROL BLOCK FOR BUILD.
DEVICE TTY
DEVICE TTY
0000
ENTRY&177+4000
0000
0000
*200
RENTRY,
ZEROSW, /WHEN CLEAR, BUFFER IS BEING ZEROED PRIOR TO EXIT.
BUFRFD,CDFXXX
ISZ RXSWITCH /IF -1, FUNCTION IS XMIT
JMP RECV0 /INPUT
/TRANSMIT ROUTINES. THERE ARE NO "ERROR CONDITIONS" FOR OUTPUT. ALL TERMINATION
/WILL RETURN TO CALLER AT +5 (NORMAL EXIT) WITH THE C(AC)=0. POSSIBLE RETURN
/CONDITIONS ARE: 1) BUFFER IS EMPTY; 2) ^Z WAS FOUND IN BUFFER. A ^C WILL
/RETURN TO MONITOR AT 7600. XON/XOFF IS RECOGNIZED FOR THE OUTPUT DEVICE.
XMIT1, ISZ WRDCNT
JMP XMIT1A
EXIT5, TAD ZEROSW
SZA CLA
ISZ ENTRY
XITFLD,CDFIFX
JMP I ENTRY
XMIT1A,STL
RTL
RTL
SPA
JMP XMIT1B /FOR CHAR3
DCA CHAR3
TAD I BUFRPT
JMS I IXMIT
TAD I BUFRPT
ISZ BUFRPT
7400 /SERVES AS A NOP TO PROTECT ISZ
AND .-1
CLL RAL
TAD CHAR3
JMP XMIT1A+1
XMIT1B,JMS I IXMIT
JMP XMIT1 /FOR ANOTHER PASS
BACKSPACE,
UMINCR,25-15
CDFCIF,CDF CIF 0
K3700, 3700
IXMIT, XMIT2-PAGE2
IDOCRLF,DOCRLF-PAGE2
IDEVINPUT,DEVINPUT-PAGE2
/INPUT ROUTINES. ACCEPTS INPUT FROM THE DEVICE AND RETURNS 8-BIT ASCII
/TO THE CALLING PROGRAM BUFFER. INPUT CHARACTERS ARE SCREENED FOR A
/^Z, CR(LF), ^U AND RUBOUTS. ^Z IS THE ONLY CHARACTER THAT WILL CAUSE
/AN "ERROR" EXIT. THERE ARE NO FATAL ERRORS. ^Z AND CR WILL ECHO CRLF, PAD
/THE CALLING PROGRAM BUFFER WITH ZERO BEFORE EXITING. ^U WILL NOT BACK
/UP PAST THE START OF BUFFER. IF ^U IS FOUND, THE BUFFER POINTER IS RESET
/TO THE BEGINNING OF THE BUFFER, AND A CRLF ECHOED. SINCE ECHOING OF OUTPUT
/CHARACTERS PASSES THROUGH THE OUTPUT PRINTING ROUTINES, ALL PRINTING CHARAC-
/TERS ARE COUNTED. WHEN THE INPUT LINE LENGTH IS EXCEEDED, A CRLF WILL BE
/ECHOED, BUT NOT INSERTED IN THE BUFFER.
RECV0, TAD WRDCNT
CLL IAC RAL /INPUT RETURNS 1 8BIT PER 1 12BIT WORD TO CALLER.
DCA WRDCNT
RECV1, TAD ZEROSW /WHEN ZERO, WE ARE PADDING USER BUFFER PRIOR TO EXIT.
SZA CLA
JMS I IDEVINPUT /GET A CHARACTER FROM INPUT.
RECV1A,DCA I BUFRPT /RETURNS 8BIT ASCII.
TAD I BUFRPT /USE THE CALLING BUFFER FOR TEMP STORAGE.
TAD CHM377 /MINUS RUBOUT
SNA
JMP RECV2 /FOUND A RUBOUT.
TAD ROMINZ /RUBOUT-^Z (177-32)
SNA
JMP RECV4 /CONTROL Z
TAD ZMINU /^Z-^U (32-25)
SNA
JMP RECV5 /CONTROL U. JMP INSTRUCTION IS ALSO THE "U" TO PRINT!
TAD UMINCR /^U-CR (25-15)
SNA CLA
JMP RECV6 /CARRIAGE RETURN
RECV9, TAD I BUFRPT
JMS I IXMIT /ECHO CHARACTER
ISZ BUFRPT
ZMINU, 32-25
ISZ WRDCNT
JMP RECV1 /FOR THE NEXT
JMP EXIT5
RECV4, DCA ZEROSW /CONTROL Z WILL EXIT AT CALL +4
TAD CH336
JMS I IXMIT
AC100
JMP RECV9
CH325,
RECV5, TAD CH336 /CONTROL U
JMS I IXMIT
TAD CH325 /MAKES A PRINTABLE "U"
JMS I IXMIT
RECV5A,JMS I IDOCRLF
TAD BUFRAD
RECV5B,DCA BUFRPT /RESET POINTER TO START OF BUFFER
JMP RECV1 /FOR A NEW LINE.
RECV6, ISZ ENTRY /SINCE A "CLEAR" ZEROSWITCH WON'T BUMP IT FOR EXIT.
DCA ZEROSW
TAD I BUFRPT
JMS I IXMIT /FOR THE CR.
ISZ BUFRPT
212 /(LINEFEED; USED TO PROTECT ISZ)
TAD .-1
ISZ WRDCNT
JMP RECV1A /OTHERWISE, INSERT THE LINE FEED, AND PROCEED NORMALLY.
JMP EXIT5 /IF COUNT OVERFLOWS, WILL STILL EXIT AT +5 WITH C(AC)=0.
RECV2, TAD BACKSPACE
JMS I IXMIT
CH336, TAD SPACE
JMS I IXMIT
TAD BACKSPACE
JMS I IXMIT
TAD BUFRPT
CIA
TAD BUFRAD /IF BUFFER IS PAST START
SNA CLA
JMP RECV5A /DO CRLF AND RESET ALL,
SPACE, CMA /ELSE JUST BACK UP THE POINTER TO THE BUFFER
TAD BUFRPT
JMP RECV5B
WRDCNT, 0
K70, 70
BUFRAD, 0
BUFRPT, 0
RXSWITCH,
CHAR3, 0
ROMINZ,177-32 /RUBOUT-^Z
CHM377,-377 /MINUS 8BIT ASCII RUBOUT.
/ TRAILING DATA BLOCK FOR HANDLER CALL:
/ WORD 1 FUNCTION WORD _ _ _ ! _ _ _ ! _ _ _ ! _ _ _
/ ! \ / FIELD UNUSED
/ 4000= WRITE DOUBLE OF IN
/ 0000= INPUT WORDS ^100 BUFFER OS/78
/ WORD 2 ADDRESS OF BUFFER
/ WORD 3 STARTING BLOCK. IF 0, MAY DO SPECIAL INIT ROUTINES;
/ OTHERWISE IS IGNORED FOR THIS HANDLER
/ WORD 4 ERROR. IF AC IS POSITIVE, ERROR IS NOT CONSIDERED FATAL.
/ WORD 5 NORMAL RETURN. AC IS 0.
ENTRY, VERSION
AC4000 /FORCE THE WRITE (OUTPUT BIT) INTO THE LINK IF
TAD I ENTRY /PRESENT WHEN GETTING THE FUNCTION WORD. MUST BE
AND K70 /PRESERVED WHILE FETCHING REST OF DATA BLOCK.
TAD CDF0
DCA BUFRFD /GET THE FIELD OF THE BUFFER
SZL
STA
DCA RXSWITCH /0=RECEIVE; -1=XMIT
TAD K3700 /AND THE "DOUBLE WORDS". FOR OUTPUT, WILL REPRESENT
AND I ENTRY /2 PACKED WORDS OF 3 ASCII CHARS. IF INPUT, WILL BE
CMA /DOUBLED TO COUNT 1 8BIT CHARACTER FOR EACH 12BIT WORD.
/NOTE: OS/8 ROUTINES CAN REQUEST THE PROCESSING OF A
/NULL BUFFER (ZERO DOUBLE WORDS). IF SOME SPECIAL
/ACTION IS REQUIRED, E.G. WRITING EOF OR DOING FORM
/FEED, THE WORD COUNT WILL BE ZERO. THIS HANDLER MAY
/OR MAY NOT HAVE SPECIAL FUNCTIONS, DEPENDING UPON
/ASSEMBLY SPECIFICATIONS.
DCA WRDCNT
ISZ ENTRY
TAD I ENTRY /GET THE STARTING ADDRESS OF THE BUFFER.
DCA BUFRAD
TAD BUFRAD
DCA BUFRPT /WILL HAVE CURRENT POSITION OF USER'S BUFFER.
ISZ ENTRY /SKIP THE BLOCK NUMBER (THIS IS NON-FILE STRUCTURED)
ISZ ENTRY /AND LEAVE RETURN POINTING TO ERROR.
RDF /DATA FIELD IS SET TO CALL; INSTRUCTION FIELD IS HERE.
TAD CDFCIF
DCA XITFLD /WHEN EXITING, IF/DF IS SET TO CALLING ROUTINE.
CDF0, CDF 0 /FALL THRU TO NEXT PAGE FOR INDIRECT ADDRESS ADJUSTMENT
PAGE
/PROCEDURE FOR ADJUSTING THE ABSOLUTE ADDRESSES OF INDIRECT LOCATIONS:
/THIS HANDLER IS ASSEMBLED WITH A STARTING LOCATION OF 200. THIS IS PARTLY
/ARBITRARY AND PARTLY BECAUSE OF THE REQUIREMENTS OF THE BUILD PROGRAM.
/A "MARK" IS ESTABLISHED TO BE USED DURING ASSEMBLY TIME TO SET THE VALUE
/OF THE INDIRECT ADDRESS POINTERS TO THE RELATIVE DIFFERENCE BETWEEN THE
/POINTER AND THE ROUTINE REQUESTED. FOR CONVENIENCE, THIS MARKER IS CALLED
/"PAGE2" AND IS ESTABLISHED AT THE TOP OF THE SECOND PAGE. THE ADJUSTMENT
/ROUTINE FINDS THE BASE ABSOLUTE ADDRESS FROM THE "JMS ." THEN ADDS IT
/TO THE THE VALUE IN "DIFFTABLE". THE CONTENTS OF DIFFTABLE ARE THE
/RELATIVE DIFFERENCES BETWEEN PAGE2 AND THE INDIRECT ADDRESS POINTERS TO
/BE MODIFIED. THIS DIFFERENCE PLUS THE BASE ABSOLUTE ADDRESS FORMS AN
/ABSOLUTE POINTER TO THE ADDRESS TO BE MODIFIED. THE CONTENTS OF THE AD-
/DRESS TO BE MODIFIED IS ALSO THE RELATIVE DIFFERENCE BETWEEN THE MARK
/AND THE ADDRESS DESIRED. USING THE TEMPORARY ABSOLUTE POINTER, THIS DIF-
/FERENCE IS ADDED TO THE BASE ADDRESS THEN RESTORED TO THE INDIRECT
/POINTER AS AN ABSOLUTE VALUE.
ENTRY1,NOP /GETS JMP I IRENTRY AFTER INIT.
PAGE2A,JMS . /TO FIND OUT WHERE WE ARE. LEAVE 2A SO WE CAN MOVE.
PAGE2,
ADJUST,TAD DIFFTABLE
SNA
JMP ALLSET
TAD PAGE2A /AS THE BASE.
DCA TEMPOINT
TAD I TEMPOINT
TAD PAGE2A
DCA I TEMPOINT
ISZ ADJUST
JMP ADJUST
XMIT8, TAD (11 /MAKES THIS LOCATION NOP-ABLE TO OUTPUT TRUE ESCAPE.
JMP XMIT4
XMIT9, ISZ WIDTH
JMP XMIT4 /NOT EXCEEDED
JMS DOCRLF
XMIT9A,TAD RWIDTH /RESET WIDTH
DCA WIDTH
ISZ DEPTH
JMP XMIT4 /PAGE NOT EXCEEDED.
ISZ INNER /GETS "JMP XMIT4" FROM "SET [DEV] NO PAUSE"
JMP .-1
ISZ OUTER
JMP .-3
TAD ROUTER
DCA OUTER /RESET OUTER COUNTER BEFORE GOING
TAD RDEPTH
DCA DEPTH
JMP XMIT4 /TO OUTPUT THE NEXT PAGE.
ROUTER,-200 /ARBITRARY. THE RXXXXX LOCATIONS GET MODIFIED FROM SET.
DECIMAL
WIDTH, -81 /-WIDTH+1
RWIDTH, -81
DEPTH, -24
RDEPTH, -24
OCTAL
XMIT6, 0
XMTLOD
XMTSKP
JMP .-1
OS8MON, 7600 /USE A GROUP 2 CLA TO GET THE MONITOR RETURN POINT.
JMP I XMIT6
IEXIT5, EXIT5-PAGE2
IRENTRY,RENTRY-PAGE2
DIFFTA, IXMIT-PAGE2
INNER, IDOCRLF-PAGE2 /THESE DO DOUBLE DUTY AS ONE-TIME POINTERS.
OUTER, IDEVINPUT-PAGE2 /KEEP "INNER" AND "OUTER" TOGETHER BECAUSE
XMIT3, IEXIT5-PAGE2 /"SET [DEV] PAUSE N" FINDS "ISZ INNER" FROM HERE.
XOFFLAG,IRENTRY-PAGE2 /-1 SAYS OFF CONDITION EXISTS
/ALSO TERMINATOR FOR DIFFTABLE.
XMIT2, 0 /SCREEN CHARACTER BEFORE OUTPUT
AND (177
TAD (200
DCA XMIT3 /SAVE CHARACTER.
XMIT2B, JMS DEVIN1 /CHECK DEVICE FOR XON/OFF
SNA
JMP XMIT2D /NO FLAG
TAD (-203
SNA
JMP MONXIT
TAD (203-XON
SNA
JMP XMIT2A
TAD (XON-XOFF
SNA CLA
JMP XMIT2C /SET XOFF FLAG
XMIT2D,ISZ XOFFLAG /WORKING ON XOFF ALREADY?
JMP XMIT2A /NO. IGNORE THE INPUT
XMIT2C,STA /[RE]SET THE FLAG
DCA XOFFLAG
JMP XMIT2B /AND KEEP LOOKING.
XMIT2A,DCA XOFFLAG /KEEP CLEARED WHEN NOT WORKING ON XOFF.
TAD XMIT3
TAD (-233
SNA
JMP XMIT8 /FOR ESCAPE
IAC
SNA
JMP I IEXIT5 /FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY.
TAD (32-15 /^Z MINUS CR
SNA
JMP XMIT9A /TO RESET WIDTH AND COUNT FOR DEPTH
TAD (15-03 /CHECK FOR ^C FOUND ON INPUT SIDE FROM NON-CONSOLE.
SNA CLA
JMP MONXIT
JMP XMIT9 /COUNT PRINTING CHARACTERS FOR WIDTH
XMIT4, TAD XMIT3 /HERE TO
JMS XMIT6
JMP I XMIT2
ALLSET,TAD .+2
DCA ENTRY1
JMP I IRENTRY /BEGIN PROCESSING.
TEMPOINT,
DEVINPUT,0
JMS DEVIN1
SNA
JMP .-2 /WAIT HERE FOR SOME INPUT
JMP I DEVINPUT
DEVIN1,0
RECSKP
JMP I .-2 /NO FLAG.
RECLOD
AND (177
TAD (200
JMP I DEVIN1 /WITH 8BIT.
MONXIT,CDF CIF 0
JMP I OS8MON /BEFORE EXITING TO MONITOR
DOCRLF, 0 /OUTPUT A CRLF
TAD (215
JMS XMIT6
TAD (212
JMS XMIT6
JMP I DOCRLF