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 >
Wrap
Text File
|
1992-09-18
|
8KB
|
333 lines
/COM0.PA
/ORIGN 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+63 / VER B3
NOCHK=0 / 0 = No ctrl c check, 1 = check
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=30
TRANSMIT=RECEIVE+1
XMTSKP=TRANSMIT^10+6001
XMTLOD=TRANSMIT^10+6006
RECSKP=RECEIVE^10+6001
RECLOD=RECEIVE^10+6006
*0
7777
DEVICE COM0
DEVICE COM0
0050
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.
XMIT, TAD CRCHAR /SEND ONE TIME CR TO MAKE BASIC HAPPY
JMS I IXMIT6
DCA XMIT
DCA XMIT+1
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
CDFCIF, CDF CIF 0
K3700, 3700
CRCHAR, 215
IXMIT, XMIT2-PAGE2
IXMIT6, XMIT6-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). ^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.
RECV0, TAD WRDCNT
CLL IAC RAL /INPUT RETURNS 1 8BIT PER 1 12BIT WORD TO CALLER.
DCA WRDCNT
TAD XXON
JMS I IXMIT6
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 MINZ /-^Z (-232)
SNA
JMP XITFLD /^Z FOUND EXIT
TAD ZMINCR /^Z-CR (32-15)
SNA
JMP RECV6 /CARRIAGE RETURN
TAD CRMLF /CR-LF (15-12)
SNA CLA
JMP RECV1 /DON'T PASS LINE FEEDS
ISZ BUFRPT /UPDATE BUFFER POINTER
ZMINCR, 32-15
ISZ WRDCNT
JMP RECV1 /FOR THE NEXT
JMP EXIT5
RECV6, ISZ ENTRY /SINCE A "CLEAR" ZEROSWITCH WON'T BUMP IT FOR EXIT.
DCA ZEROSW
TAD XXOFF
JMS I IXMIT6 /SEND XOFF AFTER CR
ISZ BUFRPT
LF, 212 /(LINEFEED; USED TO PROTECT ISZ)
TAD LF
DCA I BUFRPT
ISZ BUFRPT
XXOFF, XOFF
JMP ZMINCR
XXON, XON
WRDCNT, 0
K70, 70
BUFRAD, 0
BUFRPT, 0
RXSWITCH,
CHAR3, 0
MINZ, -232 /-^Z
CRMLF, 15-12
/ 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.
*350
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
XMIT6, 0
TAD (400
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 /SET UP CROSS PAGE LINKAGE
IXMIT6-PAGE2
IDEVINPUT-PAGE2
XMIT3, IEXIT5-PAGE2
XOFFLAG,IRENTRY-PAGE2
XMIT2, 0 /SCREEN CHARACTER BEFORE OUTPUT
AND (177
TAD (200
DCA XMIT3 /SAVE CHARACTER.
JMS CHKTTY
XMIT2B, JMS DEVIN1 /CHECK DEVICE FOR XON/OFF
SNA
JMP XMIT2D /NO FLAG
TAD (-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 (-232
SNA
JMP I IEXIT5 /FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY.
TAD (32-15 /^Z MINUS CR
SNA
JMP CRLF
TAD (15-12 /CR-LF
SNA CLA
JMP I XMIT2 /DON'T PASS LF CHARACTERS
TAD XMIT3 /HERE TO
JMS XMIT6
JMP I XMIT2
CRLF, TAD (215
JMS XMIT6
TAD (212
JMS XMIT6
JMP I XMIT2
ALLSET, TAD ALL2
DCA ENTRY1
ALL2, JMP I IRENTRY /BEGIN PROCESSING.
TEMPOINT,
DEVINPUT,0
JMS CHKTTY
JMS DEVIN1
SNA
JMP DEVINPUT+1 /WAIT HERE FOR SOME INPUT
JMP I DEVINPUT
DEVIN1, 0
RECSKP
JMP I DEVIN1 /NO FLAG.
RECLOD
SNA /FILTER NULLS
JMP DEVIN1+1
AND (177
TAD (200
JMP I DEVIN1 /WITH 8BIT.
CHKTTY, 0
IFNZRO NOCHK < KSF >
IFZERO NOCHK < NOP >
JMP I CHKTTY
KRB
AND (177
TAD (-3 /IS IT A CTRL C
SZA CLA
JMP I CHKTTY
CDF CIF 0
JMP I OS8MON /BEFORE EXITING TO MONITOR