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 >
Wrap
Text File
|
1992-09-18
|
10KB
|
378 lines
/ COMM.PA DECMATE II COMM PORT DRIVER
/ ORIGN SERIAL.PA
/ COPYRIGHT (C) 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+61
NOCHK= 0 / 0 = No ctrl c test, 1 = test
AC0004=CLA CLL IAC RTL
AC100=CLA IAC BSW
AC4000=CLA STL RAR
ACM2=CLL CLA CMA RAL
BSW=7002
XON="Q&77
XOFF="S&77
CDFXXX=HLT
CDFIFX=HLT
DEVSKP=6301 / SKIP ON FOLLOWING COMM CONDITIONS
/ TRANSMIT FLAG
/ RECEIVE FLAG
/ PARITY, OVERRUN, FRAMING, HARDWARE ERRORS
DEVREC=6306 / LOAD RECEIVE BUFFER INTO AC
DEVXMT=6316 / LOAD TRANSMIT BUFFER FROM AC
DEVACC=6366 / ACCESS COMM CONTROLER INTERNAL REGISTER
/ NOTE:ODD/EVEN DATA FIELD DETERMINE WHAT INFORMATION
/ IS GOING TO BE READ.
*0
7777
DEVICE COMM
DEVICE COMM
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
CDF1, CDFXXX
TAD I BUFRPT
JMS I IXMIT
CDF2, CDFXXX
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, 15
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.
CDF3,
RECV1A, CDFXXX
DCA I BUFRPT / RETURNS 8BIT ASCII.
TAD I BUFRPT / USE THE CALLING BUFFER FOR TEMP STORAGE.
TAD MINZ / -^Z (-32)
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, 12 / (LINEFEED; USED TO PROTECT ISZ)
TAD LF
CDF4, CDFXXX
DCA I BUFRPT
ISZ BUFRPT
XXOFF, XOFF
JMP ZMINCR
XXON, XON
WRDCNT, 0
K70, 70
BUFRAD, 0
BUFRPT, 0
RXSWITCH,
CHAR3, 0
MINZ, -32 / -^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.
*340
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.
TAD BUFRFD
DCA CDF1
TAD BUFRFD
DCA CDF2
TAD BUFRFD
DCA CDF3
TAD BUFRFD
DCA CDF4
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
CDF 0
DEVXMT / SEND CHARACTER
JMS COMCHK / WAIT FOR XMIT FLAG
JMP .-1 / HANG IT
XMIT6A, TAD (50 / SHOULD RETURN HERE BY HARD JUMP
DEVACC / 50 = CLEAR TRANSMITTER FLAG
JMS DEVCLR / NOW CLEAR INTERRUPT CONDITION
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
DCA XMIT3 / SAVE CHARACTER.
XMIT2B, JMS DEVIN1 / CHECK DEVICE FOR XON/OFF
SNA
JMP XMIT2D / NO FLAG
TAD (-XON / IS IT XON
SNA / NO
JMP XMIT2A / YES
TAD (XON-XOFF / IS IT XOF
SNA CLA / NO
JMP XMIT2C / YES, 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 (-32
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 (15 / FOUND CR SEND CR LF SEQUENCE
JMS XMIT6
TAD (12
JMS XMIT6
JMP I XMIT2
ALLSET, TAD ALL2
DCA ENTRY1
ALL2, JMP I IRENTRY /BEGIN PROCESSING.
TEMPOINT,
DEVINPUT,0 / LOOK FOR INPUT FROM COMM PORT
JMS DEVIN1
SNA
JMP DEVINPUT+1
JMP I DEVINPUT
DEVIN1, 0
JMS COMCHK / IF INPUT FLAG IS SET COMCHK JUMPS TO DEVIN2
JMP I DEVIN1
DEVIN2, DEVREC / READ BUFFER
AND (177 / MASK TO 7 BIT
DCA CHKTTY / SAVE CHAR
JMS DEVCLR
TAD CHKTTY
JMP I DEVIN1
COMCHK, 0
JMS CHKTTY / CHECK KB FOR CTRL C
DEVSKP / SKIP ON COMM PROT FLAG
JMP I COMCHK
CDF 10 / ODD DATA FIELD TO READ STATUS REGISTER 2B
TAD (4002
DEVACC / LOAD COMMAND
CLA
DEVACC / READ REGISTER
CDF 00
AND (177 / I HOPE THIS WORKS (SHOULD BE 7)
TAD (-6 / NOW FIND OUT WHAT SET THE COMM FLAG
SNA
JMP DEVIN2 / REC FLAG SET
TAD (2
SNA CLA
JMP XMIT6A / XMIT FLAG SET
JMS DEVCLR / ERROR, CLEAR CONDITION AND RETURN TO CALLER
JMP I COMCHK
DEVCLR, 0 / CLEAR COMM FLAGS
CLA
TAD (70 / 70 SAYS CLEAR INTERRUPT CONDITION
DEVACC
OS8MON, 7600
JMP I DEVCLR
CHKTTY, 0
IFNZRO NOCHK < KSF >
IFZERO NOCHK < NOP >
JMP I CHKTTY
KRB
TAD (-3 /IS IT A CTRL C DMII IS ALWAYS 7 BIT
SZA CLA
JMP I CHKTTY
CDF CIF 0
JMP I OS8MON /BEFORE EXITING TO MONITOR
CHKTTY
CDF CIF 0
JMP I OS8MON /BEFORE EXITING TO MONITOR