|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 78212 (0x13184)
Notes: pts_type(SC)
Names: »DRDC17.SC«
└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
└─⟦this⟧ »TOSSWORK/DRDC17.SC«
IDENT DRDC17 REL 10.0 80-05-07 870105041000 =6, A15-CALLS IN TRIDLE 800507 =5, 6805 READ HANGUPS 800507 =4, DC:MIN HEADER REL 10.1 80-02-13 =3,MASK+I/P ACT. IND. 80-02-13 =2,RETURN CODE+MODEM OFF 80-01-08 =1,POWER UP 79-10-26 ******************************************************* * * PHILIPS ELECTRONIC INDUSTRIES - TERMINAL DIVISION. PEAB-T * * DATA COMMUNICATION DRIVER FOR PTS 6800 * * LINE PROCEDURE: BSC CONTENTION/SIEMENS MSV2 * * * * * ******************************************************* * * STANDARD USE OF REGISTERS : * * A1 WORK REGISTER * A2 I/O AND WORK REGISTER * A3 WORK REGISTER * A4 WORK REGISTER * A5 STACK POINTER * A6 DWT ADDRESS * A7 BCC ACCUMULATOR * A8 ECB ADDRESS * ******************************************************* EJECT * ******************************************************* * * ENTRY POINTS * ******************************************************* * ENTRY DC17ON RECOVERY AT POWER ON * INTERRUPT HANDLERS ENTRY IH1701 LINE 01 INPUT ENTRY IH1702 OUTPUT ENTRY IH1703 LINE 02 INPUT ENTRY IH1704 OUTPUT ENTRY IH1705 LINE 03 INPUT ENTRY IH1706 OUTPUT ENTRY IH1707 LINE 04 INPUT ENTRY IH1708 OUTPUT * DEVICE WORK TABLES ENTRY DW1701 LINE 01 DWT ENTRY DW1702 LINE 02 DWT ENTRY DW1703 LINE 03 DWT ENTRY DW1704 LINE 04 DWT * EJECT * ******************************************************* * * EXTERNAL REFERENCES * ******************************************************* * EXTRN TDISP DISPATCHER ENTRY EXTRN TENDIO REQUEST COMPLETION EXTRN DISIOE REQUEST ERROR EXTRN SETIME SET TIMER CALL ADDRESS EXTRN DWTST DWT STATUS EXTRN DWTECB DWT ECB ADDRESS EXTRN DWTOR DWT ORDER EXTRN ECBBA ECB BUFFER ADDRESS EXTRN ECBRL ECB REQUESTED LENGTH EXTRN ECBEL ECB EFFECTIVE LENGTH EXTRN ECBRC ECB RETURN CODE EXTRN ECBCW ECB CONTROL WORD EXTRN TASCII CODE CONV. TABLE EBCDIC-ASCII EXTRN TEBCDIC CODE CONV. TABLE ASCII-EBCDIC EXTRN INTSAV EXTRN ILLINT ILLEGAL INTERRUPT EXTRN SAVE8 EXTRN DISEND EXTRN PFPOST WAIT FOR POWER UP IF SET =1 EJECT * * * PARAMETERS FOR CONDITIONALLY ASSEMBLY * * X:A EQU 1 <=4 NLINE EQU X:A NUMBER OF COMMUNICATION LINES X:B EQU 1 BSC EQU X:B IF = 0. SIEMENS MSV2 PROCEDURE IF = 1. BSC PROCEDURE X:C EQU 1 CODE EQU X:C IF = 0. ASCII CODE IF = 1. EBCDIC CODE (BSC ONLY) X:D EQU 0 TRANSP EQU X:D IF = 1. EBCDIC TRANSPARANCY (BSC ONLY) X:E EQU 10 TBID EQU X:E BID TIME OUT VALUE (X100 MS) X:F EQU 500 LOGG EQU X:F IF NOT ZERO INTERRUPT LOG INCLUDED LOGG = LOG AREA LENGTH PER LINE X:G EQU 0 SALCUZ EQU X:G IF =0 DC CONTROL UNIT 6834 =1 DC CONTROL UNIT 6857/SALCUZ * DEVICE ADDRESSES IFT SALCUZ=1 X:H EQU /0A INPUT DEV ADDR LINE 01 X:I EQU /3E 02 X:J EQU /3E 03 X:K EQU /3E 04 XIF IFF SALCUZ=1 X:H EQU /02 INPUT DEV ADDR LINE 01 X:I EQU /22 02 X:J EQU /04 03 X:K EQU /05 04 DAMI01 EQU X:H INPUT DEV ADDR LINE 01 DAMI02 EQU X:I INPUT DEV ADDR LINE 02 DAMI03 EQU X:J INPUT DEV ADDR LINE 03 DAMI04 EQU X:K INPUT DEV ADDR LINE 04 XIF . IFT SALCUZ=1 DAMI01 EQU /0A INPUT DEV ADDR LINE 01 DAMI02 EQU /3E INPUT DEV ADDR LINE 02 DAMI03 EQU /3E INPUT DEV ADDR LINE 03 DAMI04 EQU /3E INPUT DEV ADDR LINE 04 DAMU01 EQU DAMI01+1 OUTPUT DEV ADDR LINE 01 DAMU02 EQU DAMI02+1 OUTPUT DEV ADDR LINE 02 DAMU03 EQU DAMI03+1 OUTPUT DEV ADDR LINE 03 DAMU04 EQU DAMI04+1 OUTPUT DEV ADDR LINE 04 XIF IFF SALCUZ=1 DAMU01 EQU DAMI01+/10 OUTPUT DEV. ADDR. LINE 01 DAMU02 EQU DAMI02+/10 OUTPUT DEV. ADDR. LINE 02 DAMU03 EQU DAMI03+/10 OUTPUT DEV. ADDR. LINE 03 DAMU04 EQU DAMI04+/10 OUTPUT DEV. ADDR. LINE 04 XIF * X:L EQU 0 COMPRS EQU X:L IF =1, SPACE COMPR./DECOMPR. PERFORMED * X:M EQU 0 IDLELN EQU X:M IF =1, IDLE LINE ACTIVITY INCLUDED TO SIMULATE START O/P TO HOLD A 2-WIRE SWITCHED LINE * SPEED EQU 1 IF =1, HIGH SPEED (CT111) * X:N EQU 0 TBUFL EQU X:N SIZE OF MMU BUFFER IN WORDS * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1 * MMUPAG EQU 0 * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0 * CPU852 EQU 1 * * DEVIND EQU 2 BUFLEN EQU TBUFL+TBUFL MMU BUFFER SIZE EJECT * ******************************************************* * * SYSTEM PARAMETERS * ******************************************************* * TIMBID EQU TBID BID TIMER:( STANDARD IS 1 S ) TIMTTD EQU 20 TTD TIMER: 2 S TIMENQ EQU 30 ENQ TIMER: 3 S TIMACK EQU 30 ACK TIMER: 3 S TIMWAC EQU 20 WACK TIMER: 2 S TIMCON EQU 20 CONNECT TIMER: 2 S TIMWRT EQU 200 WRITE TIMER: 20 S TIMIDL EQU 150 IDLE LINE ACTIVITY TIME: 15 SEC'S * * ENQCNT EQU 3 COUNT OUT AFTER 3 ENQ:S WACCNT EQU 15 COUNT OUT AFTER 15 WACK:S RTRCNT EQU 4 COUNT OUT AFTER 4 TRANSMISSIONS * IFT SPEED=1 LSPEED EQU /0200 HIGH SPEED SELECTION 6834 XIF IFT SPEED=0 LSPEED EQU 0 LOW SPEED SELECTION 6834 XIF IFT COMPRS=1 COMPMX EQU 43 MAX NO OF SPACES COMPR <64 MUST BE ADJUSTED TO COMM LINE SPEED <22 FOR SPEED =9600 BPS <43 =4800 BPS =63 <4800 BPS SPACE COMPRESSION/DECOMPRESSION SPCMIN EQU 2 MIN NO OF SPACES SPCMAX EQU COMPMX MAX NO OF SPACES SPCCHB EQU /40 SPACE COUNT CHAR SPECIAL BIT SPCCHM EQU /3F SPACE COUNT CHAR MASK SPCASC EQU /20 ASCII SPACE CHAR FOR DECOMPR * XIF IUSUSE EQU 0 IF =1 IUS TO USER BUFF EJECT ************************************************** * * APPLICATION INTERFACE; ORDERS AND RETURN CODES * ************************************************** * * ORDERS: * * /02 - READ * * /06 - WRITE * * /0A - READ RANDOM * * /31 - ACCEPT A CALL * * /37 - CONNECT MODEM * * /38 - DICONNECT MODEM * * /39 - SET REQUEST TIMEOUT * EJECT * RETURN CODES: * * STATUS WORD = 0 REQUEST COMPLETED NORMALLY * * " " <> 0 ABNORMAL RETURN (SEE BIT EQU'S BELOW) * ************************************************************** * BIT0 EQU /8000 REQUEST ERROR (SEE FURTHER BITS 4-6) BIT1 EQU /4000 REQUEST ABORTED BIT2 EQU /2000 BEGIN/END OF DEVICE E.G EOT BIT3 EQU /1000 END OF FILE E.G ETX BIT4 EQU /0800 DEVICE DEPENDENT (SEE FURTHER REQ. ORDER) BIT5 EQU /0400 " " BIT6 EQU /0200 " " BIT7 EQU /0100 RETRIES PERFORMED BIT8 EQU /0080 MORE INFO E.G NOT USED BIT9 EQU /0040 TIMEOUT BIT10 EQU /0020 DEVICE DEPENDENT BIT11 EQU /0010 " " BIT12 EQU /0008 INCORRECT BUFFER LENGTH (TRANSM./REC. BUFFER) BIT13 EQU /0004 DATA ERROR BIT14 EQU /0002 THROUGHPUT ERROR BIT15 EQU /0001 MODEM NOT OPERABLE * RCCMPL EQU 0 REQUESTED ORDER PERFORMED RCETB EQU RCCMPL ETB RECEIVED DURING READ RCIREQ EQU BIT0 ILLEGAL REQUEST RCABRT EQU BIT1 REQUEST ABORTED RCEOT EQU BIT2 EOT RECEIVED DURING READ ***************************************************** * RCETX EQU BIT3 ETX " " " RCISEQ EQU BIT4+BIT0 ILLEGAL REQ. - SEQUENCE ERROR RCRRVI EQU BIT5+BIT0 " " RVI RECEIVED RCRENQ EQU BIT6+BIT0 " " ENQ RECEIVED (BID COLLITION) RCRTRY EQU BIT7 RETRIES PERFORMED RCTIMO EQU BIT9 REQUEST TIMEOUT RCCARR EQU BIT10 CARRIER DOWN RCNCON EQU BIT11 NO CONNECTION ESTABLISHED RCINCL EQU BIT12 INCORRECT BUFFER LENGTH RCIDAT EQU BIT13 INVALIDE DATA RCTHRU EQU BIT14 THROUGHPUT ERROR RCMNOP EQU BIT15 MODEM NOT OPERABLE * EJECT ************************************************* * * DEVICE WORK AREAS * ********************************************** * * DWT STATUS WORD * * DWTST BIT #00 : 0 = DEVICE BUSY * 1 = DEVICE NOT BUSY * BIT #15 : 0 NO CONNECTION ESTABLISHED * : 1 MODEM CONNECTED * EJECT ******************************************************* * * LINE CONTROL CHARACTER EQUATES * ******************************************************* * PAD EQU /FF TRAILING PAD DLE EQU /10 DATA LINK ESCAPE SOH EQU /01 START OF HEADING STX EQU /02 START OF TEXT ETX EQU /03 END OF TEXT IFT CODE=0 SYN EQU /16 EOT EQU /04 ENQ EQU /05 ETB EQU /17 END OF TRANSMISSION BLOCK NAK EQU /15 NEGATIVE ACKNOWLEDGEMENT RVI EQU /3C SEC CHAR IN RVI SEQUENCE ACK0 EQU /30 SEC CHAR IN ACK 0 SEQUENCE EXCACK EQU 1 DIFFERENCE BETWEEN ACK0/1 GS EQU /1D GROUP SEPARATOR SPACE EQU /20 SPACE US EQU /1F UNIT SEPARATOR XIF IFT CODE=0 IFT BSC=1 WACK EQU /3B SEC CHAR IN WACK SEQUENCE XIF IFT CODE=0 IFT BSC=0 WACK EQU /BF SEC CHAR IN WABT SEQUENCE SIEMENS MSV2 PROCEDURE XIF IFT CODE=1 EBCDIC CHARACTER EQUATES SYN EQU /32 EOT EQU /37 ENQ EQU /2D ETB EQU /26 NAK EQU /3D WACK EQU /6B RVI EQU /7C ACK0 EQU /70 EXCACK EQU /11 IGS EQU /1D GROUP SEPARATOR GS EQU IGS RENAME IGS SPACE EQU /40 SPACE IUS EQU /1F UNIT SEPARATOR US EQU IUS RENAME US XIF EJECT ************************************************************* * * LINE CONTROL UNIT FUNCTION CONTROL EQU:S * ************************************************************* * IFT SALCUZ=1 CBBREK EQU /80 CIO START BREAK CBECHO EQU /10 ECHO CBNPAR EQU /0 NO CHAR PARITY CBEPAR EQU /4 EVEN CHAR PARITY CBOPAR EQU /C ODD CHAR PARITY * CBSTOP EQU /0 CIO STOP INPUT/OUTPUT * CBDISC EQU /1 CIO DISCONNECT MODEM FROM LINE XIF IFF SALCUZ=1 CBCARR EQU /100 CARRIER ON CBCRSP EQU CBCARR+LSPEED CARRIER ON + SPEED SELECTION XIF * * IFT SALCUZ=1 IFT CODE=0 PARITY EQU CBOPAR ODD PARITY FOR ASCII XIF IFT SALCUZ=1 IFT CODE=1 PARITY EQU CBNPAR NO PARITY FOR EBCDIC XIF EJECT *************************************************** * * LINE CONTROL UNIT SST STATUS BITS * *************************************************** * SBNOOP EQU /1 SST STATUS MODEM NOT OPERABLE SBTHRU EQU /02 THROUGHPUT ERROR IFT SALCUZ=1 SBPARI EQU /04 CHAR PARITY ERROR XIF SBCARR EQU /20 CARRIER OFF SBCALL EQU /40 INCOMING CALL * IFT SALCUZ=1 SBERR EQU /27 SBNOOP,SBTHRU,SBPARI,SBCARR XIF IFF SALCUZ=1 SBERR EQU /23 SBNOOP,SBTHRU,SBCARR XIF EJECT * ******************************************************* ******************************************************* * * * D R I V E R A C T I V A T I O N * * ******************************************************* ******************************************************* * * DATA BUFLEN DATA DEVIND DEVICE INDEX DRMAD DATA DRMACT DWT REFERENCE DATA ABORT ABORT ROUTINE ADDRESS DATA 0,0 DC:MIN HEADER =4 * * DRMACT EQU * LDK A5,DWTSTB SET UP A5 STACK BASE ADR A5,A6 IN CASE OF I/O START LD A1,DWTST,A6 GET CURRENT LINE STATUS SUK A7,/02 RF(Z) RD READ SUK A7,/06-/02 ABL(Z) WR WRITE SUK A7,/0A-/06 RF(Z) RDRNM READ RANDOM (CREDIT) SUK A7,/22-/0A ABL(Z) SRVI SEND RVI SUK A7,/31-/22 ABL(Z) ACCALL ACCEPT CALL SUK A7,/37-/31 ABL(Z) CONNCT CONNECT MODEM SUK A7,/38-/37 ABL(Z) DISCON DISCONNECT LINE SUK A7,/39-/38 SET REQUEST TIMER VALUE ABL(Z) REQTIM ABL DISIOE ILLEGAL ORDER EJECT ************************************************************ * * ABORT ROUTINE * ************************ ABORT EQU * . CF A15,CLRTIM CLEAR REQ TIMER CF A15,CLPTIM CLEAR PROC TIMER CF A15,CLMTIM CLEAR MODEM TIMER AB:10 EQU * ST A5,DWTSAV+4,A6 SAVE A5 TEMP. LDK A5,DWTSTB . ADR A5,A6 BUILD NEW STACK-BASE CF A5,CHALTI HALT INPUT IFT IDLELN=1 CF A15,STIDLE START IDLE LINE ACTIVITY TIMER XIF LD A5,DWTSAV+4,A6 RELOAD A5 CM DWTSAV+4,A6 CLEAR STACK-POINTER CM DWTXST,A6 SET CONTROL STATE AB:RTN EQU * IFT CPU852=1 ADKL A15,4 ABR* A15 RETURN IN INHIBIT MODE XIF IFF CPU852=1 RTN A15 XIF EJECT * * * ORDER 02 : READ * * RD EQU * ANK A1,1 CHECK STATUS RF(NZ) RD400 MODEM CONNECTED ABL RXMNOP NO CONNECTION ESTABLISHED; EXIT * * * ORDER 0A : READ RANDOM (CREDIT) * RDRNM EQU * LDK A7,/02 CONVERT TO STANDARD READ ST A7,DWTOR,A6 UPDATE DWT RB RD HANDLE AS READ EJECT * * * START THE READ REQUEST * * RD400 EQU * IFT MMUPAG=1 LD A2,ECBRL,A8 REQUESTED LENGTH CWK A2,BUFLEN INVALID LENGTH? ABL(G) RXINCL ILLEGAL LENGTH LD A1,DWTTIM,A6 GET CONTROL WORD XIF LD A1,DWTTIM,A6 RF(Z) RD420 NO TIME OUT SUPERVISION ST A1,RD410 LDR A1,A6 DWT ADDRESS CF A15,SETIME START REQUEST TIMER DATA RD500 TIME OUT SEQUENCE RD410 DATA 0 TIMER VALUE ST A4,DWTRTI,A6 STORE TIMER POINTER RD420 EQU * IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF LD A1,DWTXST,A6 GET PROCEDURE STATE ABL(Z) BMM IN CONTROL STATE: START RECEIVER SUK A1,1 . ABL(Z) RXISEQ SEQUENCE ERROR - READ WHEN TRANSMITTING LD A1,DWTACK,A6 GET WACK DELAY INDICATOR ABL(Z) EXDISP NOT WACK DELAY - WAIT FOR ENQ OR EOT CF A15,CLPTIM STOP PROCEDURE TIMER CM DWTACK,A6 RESET WACK DELAY INDICATOR CF A5,TRACK SEND ACK 0/1 ABL BMM CONTINUE RECEPTION EJECT * * * READ REQUEST TIME OUT * * RD500 LDR A6,A1 READ REQUEST TIME OUT, RESTORE A6 CF A15,CLRTIM CLEAR TIMER LINKS CF A15,CLPTIM CLEAR PROC TIMER CF A15,CLMTIM CLEAR MODEM TIMER CF A5,CHALTI HALT INPUT & CF A5,CHALTO OUTPUT CM DWTSAV+4,A6 CLEAR STACK POINTER IFT IDLELN=1 CF A15,STIDLE START IDLE LINE ACTIVITY TIMER XIF ABL RXTIMO TIMEOUT; EXIT EJECT * * * ORDER 06: WRITE * * IF CONTROL CHARACTER = 0 NOT, TEXT IS ENDED BY ETB * IF CONTROL CHARACTER = 0 , TEXT IS ENDED BY ETX * WR EQU * ANK A1,1 CHECK STATUS ABL(Z) RXMNOP MODEM NOT OPERABLE - EXIT IFT MMUPAG=1 LD A1,ECBRL,A8 REQUESTED LENGTH CWK A1,BUFLEN INVALID LENGTH? ABL(G) RXINCL ILLEGAL LENGTH XIF LD A1,DWTXST,A6 GET PROCEDURE STATE RF(Z) BID CONTROL STATE: BID SUK A1,1 RF(Z) WR100 TRANSMIT MODE ABL RXISEQ ILLEGAL SEQUENCE; TRYING TO WRITE WHEN RECEIVING * * * SEND BID SEQUENCE * * BID LDK A1,1 ST A1,DWTXST,A6 INDICATE TRANSMIT MODE LDK A1,6 ST A1,DWTACK,A6 AND BID SEQUENCE CM DWTENQ,A6 RESET ENQ COUNTER LDK A1,ACK0 ST A1,DWTRSN,A6 INDICATE ACK 0 EXPECTED IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF ABL TRENQB SEND ENQ TO BID EJECT * * * START WRITE IF POSSIBLE * * WR100 LD A1,DWTACK,A6 GET RESPONSE STATE SUK A1,2 ABL(NZ) EXDISP NOT IN TTD SEQUENCE WR110 CM DWTRTR,A6 RSET RETRANSMIT COUNTER CM DWTENQ,A6 RESET ENQ COUNTER CM DWTWAC,A6 RESET WACK COUNTER CF A15,CLPTIM STOP PROCEDURE TIMER LDK A1,EXCACK XRS A1,DWTRSN,A6 CHANGE EXPECTED ACK ABL TRTEXT SEND TEXT EJECT * * * ORDER /22: SEND RVI * * RVI IS SENT INSTEAD OF ACK0/1 AS AFFIRMATIVE * ACKNOWLEDGEMENT TO PREVIOUS TEXT RECEPTION * * SRVI ANK A1,1 CHECK STATUS ABL(Z) RXMNOP MODEM NOT OPERABLE LD A1,DWTTIM,A6 GET CONTROL WORD RF(Z) RVI120 NO TIME OUT SUPERVISION ST A1,RVI100 LDR A1,A6 DWT ADDRESS CF A15,SETIME START REQUEST TIMER DATA RVI400 RVI100 DATA 0 TIMER VALUE ST A4,DWTRTI,A6 STORE TIMER POINTER RVI120 LD A1,DWTXST,A6 GET PROCEDURE STATE SUK A1,2 ABL(NZ) RXISEQ SEQ. ERROR; TRANSM. MODE OR REC. MODE,RTX RECEIVED RVI200 LD A1,DWTACK,A6 GET WACK DELAY INDICATOR ABL(Z) EXDISP NOT IN WACK DELAY - WAIT FOR ENQ OR EOT CF A15,CLPTIM STOP PROCEDURE TIMER CM DWTACK,A6 RESET WACK DELAY INDICATOR RVI300 CF A5,TRRVI SEND RVI CF A15,CLRTIM RESET REQUEST TIMER LDK A1,RCCMPL SET RVI SENT. RC= RCCMPL CF A15,TENDIO COMPLETE REQUEST ABL BMM CONTINUE RECEPTION * * TIME OUT * RVI400 LDR A6,A1 RVI REQUEST TIME OUT,RESTORE A6 CF A15,CLRTIM CLEAR POINTER ABL RXTIMO REQUEST TIMEOUT EJECT * * * ACCEPT A CALL * * ACCALL EQU * ANK A1,1 ABL(NZ) RXISEQ SEQUENCE ERROR; MODEM ALREADY CONNECTED LD A1,DWTTIM,A6 GET CONTROL WORD RF(Z) ACC110 NO TIME OUT SUPERVISION ST A1,ACC100 TIMER VALUE LDR A1,A6 PASS DWT ADDRESS CF A15,SETIME START REQUEST TIMER DATA ACC200 TIME OUT SEQUENCE ACC100 DATA 0 TIMER VALUE ST A4,DWTRTI,A6 SAVE TIMER POINTER ACC110 INH CF A5,CCALL ACCEPT CALL BY CU ABL(A) EXDISP ACCEPTED - WAIT FOR CALL ABL RXMNOP MODEM NOT OPERABLE * * CALL RECEIVED * ACC150 EQU * CF A15,CLRTIM CLEAR REQ. TIMER IFT IDLELN=1 CF A15,STIDLE START IDLE LINE ACTIVITY TIMER XIF ABL RXCMPL COMPLETE REQUEST * * TIME OUT * ACC200 LDR A6,A1 DWT ADDRESS CF A15,CLRTIM CLEAR POINTER LDK A5,DWTSTB SET UP A5 STACK BASE ADR A5,A6 CF A5,CHALTI STOP LINE CONTROL UNIT ABL RXTIMO REQ. TIMEOUT EJECT * * * CONNECT MODEM TO LINE * * CONNCT EQU * LDR A1,A6 CF A15,SETIME START TIMER DATA CON100,TIMCON ST A4,DWTPTI,A6 SAVE TIMER POINTER CF A5,CSYNCI START I/P WITH SYNC DEF RF(A) CON010 CF A15,CLPTIM IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF ABL RXMNOP MODEM NOT OPERABLE CON010 CF A5,CHALTI STOP RECEIVER, NO INTERRUPTS ABL EXDISP EXIT THRU DISPATCHER CON100 LDR A6,A1 TIME OUT CF A15,CLPTIM CLEAR POINTER LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 CF A5,CHALTI HALT LINE CONTROL UNIT INPUT ANK A2,SBNOOP MODEM NOT OPERABLE ? ABL(NZ) RXMNOP MODEM NOT OPERABLE CON110 LDK A1,1 ORS A1,DWTST,A6 INDICATE CONNECTED IN DWT CM DWTXST,A6 CONTROL MODE ABL RXCMPL REQUEST COMPLETE EJECT * * * DISCONNECT MODEM FROM LINE * * DISCON EQU * IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF CF A5,CDISC DISCONNECT MODEM FROM LINE LDKL A1,/FFFE ANS A1,DWTST,A6 RESET "MODEM OPERABLE"-BIT ABL RXCMPL COMPLETE REQUEST EJECT **************************************************************** * * SET REQUEST TIMER VALUE * **************************************************************** REQTIM EQU * LD A2,ECBCW,A8 TIMEOUT VALUE ST A2,DWTTIM,A6 SAVE IT IN DWT EJECT ************************************************* * * REQUEST COMPLETION (NORMAL/ABNORMAL) * ********************************************* * RXCMPL EQU * LDKL A1,RCCMPL NORMAL COMPLETE OF REQUEST RF RXTEND * * ABNORMAL RETURNS * RXISEQ EQU * LDKL A1,RCISEQ ILLEGAL SEQUENCE RF RXTEND RXRRVI EQU * LDKL A1,RCRRVI RVI RECEIVED RF RXTEND RXRENQ EQU * LDKL A1,RCRENQ ENQ RECEIVED (BID COLLITION) RF RXTEND RXRTRY EQU * LDKL A1,RCRTRY RETRIES PERFORMED RF RXTEND RXTIMO EQU * LDKL A1,RCTIMO REQUEST TIMEOUT RF RXTEND RXNCON EQU * LDKL A1,RCNCON NO CONNECTION ESTABLISHED RF RXTEND RXINCL EQU * LDKL A1,RCINCL INCORR. BUFFER LENGTH RF RXTEND RXTHRU EQU * LDKL A1,RCTHRU THROUGHPUT ERROR RF RXTEND RXMNOP EQU * LD A1,/FFFE ANS A1,DWTST,A6 RESET MODEM OPERABLE BIT LDKL A1,RCMNOP MODEM NOT OPERABLE * RXTEND EQU * CF A15,CLRTIM CLEAR REQ. TIMER CF A15,TENDIO TERMINATE I/O REQUEST * EXDISP EQU * ABL TDISP ESCAPE TO DISPATCHER EJECT * ******************************************************* ******************************************************* * * * R E C O V E R Y A T P O W E R O N * * ******************************************************* ******************************************************* * DRDCON EQU * DC17ON EQU * LDK A2,0 RESET INDEX DRM100 ADK A2,2 CW A2,DCTAB RF(E) DRM150 ALL LINES PROCESSED LD A6,DCTAB,A2 GET DWT ADDRESS CM DWTXST,A6 INDICATE CONTROL STATE CF A15,CLPTIM STOP PROCEDURE TIMER IF RUNNING IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF DRM110 LDKL A1,/FFFE ANS A1,DWTST,A6 RESET MODEM READY BIT CF A15,CINIT INIT LINE CU INFO LD A1,DWTST,A6 RB(N) DRM100 NO REQUEST CF A15,CLRTIM STOP REQUEST TIMER IF RUNNING LDKL A1,RCMNOP RETURN CODE BIT 15: MODEM NOT READY CF A15,TENDIO COMPLETE REQUEST RB DRM100 NEXT LINE DRM150 RTN A15 EJECT * ******************************************************* ******************************************************* * * * P R O C E D U R E C O N T R O L P A R T * * ******************************************************* ******************************************************* * ******************************************************* * * BMM : BASIC MASTER MODE * ******************************************************* * BMM EQU * LDK A5,DWTSTB ADR A5,A6 LOAD A5 STACK BASE CF A5,CSYNCI START I/P WITH SYNC DEF RB(NA) BMM NOT ACCEPTED WAIT FOR TIMEOUT BMM100 EQU * CF A5,READP READ CHAR RF(NZ) BMM905 SST STATUS OR PARITY ERROR LD A1,DWTXST,A6 GET OPERATION MODE SUK A1,1 RF(Z) TRANSM TRANSMIT MODE/MASTER MODE ABL(P) RECEIV RECEIVE MODE/SLAVE MODE EJECT * * CONTROL STATE * CWK A2,ENQ RF(NE) BMM900 NOT ENQ BMM150 LD A1,DWTST,A6 GET REQUEST STATUS RB(N) BMM NO REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,2 RB(P) BMM NO READ REQUEST IFT IDLELN=1 CF A15,CLIDLE CLEAR IDLE LINE ACTIVITY TIMER XIF LDK A1,2 ST A1,DWTXST,A6 INDICATE RECEIVE MODE CM DWTACK,A6 RESET WACK DELAY INDICATOR CF A5,TRACK0 SEND ACK0 RB BMM RECEIVE TEXT EJECT * * CHARACTER NOT RECOGNIZED * BMM900 CWK A2,EOT RF(NE) BMM910 NOT EOT CM DWTXST,A6 EOT: RESET TO CONTROL STATE CF A15,CLPTIM STOP PROCEDURE TIMER CF A15,CLRTIM CLEAR TIMER LDKL A1,RCEOT EOT RECEIVED CF A15,TENDIO RB BMM BMM905 EQU * CHECK SST STATUS LDR A1,A1 ANY SST STATUS RB(NZ) BMM YES RESYNC BMM910 EQU * ANK A2,/7F SUK A2,/7F RB(Z) BMM RESYNCHRONIZE ON /FF RB BMM100 READ NEXT CHAR EJECT * * * TRANSMIT MODE, RECEPTION PART * * TRANSM EQU * LD A1,DWTACK,A6 GET TRANSMIT STATUS ABI TRFUNC,A1 SELECT FUNCTION * * TRFUNC DATA TR200 0:ACK EXPECTED DATA TR400 2: TTD SEQUENCE DATA TR420 4: WACK SEQUENCE DATA TR100 6: BID SEQUENCE DATA TR200 8: ACK EXPECTED AFTER TRANSMIT TIME OUT EJECT * * * BID SEQUENCE * * TR100 EQU * CWK A2,ENQ RF(E) TR140 ENQ RECEIVED CWK A2,DLE RB(NE) BMM900 NOT ACK OR WACK CF A5,READP READ SECOND CHAR RB(NZ) BMM910 PARITY ERROR CWK A2,ACK0 RF(NE) TR120 NOT PROPER ACK CF A15,CLPTIM ACK 0 : STOP PROCEDURE TIMER ABL WR110 START TRANSMISSION * NOT ACK RECEIVED TR120 CWK A2,WACK RB(NE) BMM900 NOT WACK CF A15,CLPTIM STOP PROCEDURE TIMER ABL TRENQB BID AGAIN * ENQ RECEIVED TR140 EQU * . CF A15,CLPTIM CLEAR BID-TIMER (PROCEDURE) LDKL A1,RCRENQ ENQ RECEIVED CF A15,TENDIO COMPLETE WRITE, RC BIT 11 RB BMM150 BID ACCEPTED EJECT * * * TRANSMIT MODE: ACK EXPECTED * * TR200 CWK A2,DLE RF(E) TR250 DLE RECEIVED CWK A2,NAK RB(NE) BMM900 NOT ACK, WACK , RVI OR NAK CF A15,CLPTIM NAK: STOP PROCEDURE TIMER ABL TRTEXT RETRANSMIT TEXT TR210 EQU * LDKL A1,RCTHRU THROUGHPUT ERROR TR220 EQU * CF A5,TREOT SEND EOT CM DWTXST,A6 INDICATE CONTROL STATE LDR A1,A4 RETURN CODE ABL RXTEND GO FOR COMPLETION OF REQUEST * DLE RECEIVED TR250 CF A5,READP RB(NZ) BMM910 PARITY ERROR CW A2,DWTRSN,A6 CHECK ACK RF(NE) TR280 NOT PROPER ACK CF A15,CLPTIM STOP PROCEDURE TIMER LDKL A4,RCCMPL RETURN CODE - OK LD A8,DWTECB,A6 GET ECB ADDRESS LD A1,ECBBA,A8 GET BUFFER ADDRESS LC A1,1,A1 GET CONTROL CHARACTER ANK A1,/FF RB(Z) TR220 ETX SENT: SEND EOT AND COMPLETE REQUEST LDKL A4,RCCMPL RETURN CODE - OK CF A15,TENDIO COMPLETE WRITE REQUEST, RC = 0 TR255 CF A5,CHALTI STOP RECEIVER TR260 LDR A1,A6 DWT ADDRESS CF A15,SETIME START TIMER DATA TRTTD,TIMTTD ST A4,DWTPTI,A6 SAVE TIMER POINTER LDK A1,2 ST A1,DWTACK,A6 INDICATE TTD SEQUENCE ABL TDISP GO TO DISPATCHER * NOT ACK RECEIVED TR280 CWK A2,RVI RF(E) TR320 RVI RECEIVED CWK A2,WACK RF(E) TR340 WACK RECEIVED TR285 EQU * XRK A2,EXCACK CHANGE ACK TYPE CW A2,DWTRSN,A6 RB(NE) BMM900 NO ACK AT ALL TR290 EQU * CF A15,CLPTIM STOP PROCEDURE TIMER LD A1,DWTACK,A6 ACK AFTER TRANSMIT TIME OUT? RF(Z) TR295 NO, IMPROPER ACK - SEND ENQ ABL TRTEXT YES, RETRANSMIT TEXT TR295 EQU * ABL TRENQ IMPROPER ACK: SEND ENQ * RVI RECEIVED TR320 CF A15,CLPTIM STOP PROCEDURE TIMER LDKL A1,RCRRVI INDICATE RVI RECEIVED CF A15,TENDIO COMPLETE WRITE REQUEST, RC BIT 10 RB TR255 GO TO TTD SEQUENCE * WACK RECEIVED TR340 CF A15,CLPTIM STOP PROCEDURE TIMER LDKL A4,RCCMPL RETURN CODE - OK LD A8,DWTECB,A6 GET ECB ADDRESS LD A1,ECBBA,A8 GET BUFFER ADDRESS LC A1,1,A1 GET CONTROL CHARACTER ANK A1,/FF RB(Z) TR220 ETX SENT: SEND EOT AND COMPLETE REQUEST LDKL A1,RCCMPL WACK RECEIVED; RETURN CODE - OK CF A15,TENDIO COMPLETE REQUEST, RC = 0 LDK A1,4 ST A1,DWTACK,A6 INDICATE WACK SEQUENCE ABL TRENQ SEND ENQ EJECT * * * TTD SEQUENCE * * TR400 EQU * CWK A2,NAK ABL(NE) BMM900 NOT NAK CF A15,CLPTIM STOP PROCEDURE TIMER TR410 EQU * LD A1,DWTST,A6 CHECK IF WRITE REQUEST RB(N) TR260 NO REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,6 ABL(Z) WR110 WRITE REQUEST RB TR260 NO WRITE REQUEST EJECT * * * WACK SEQUENCE * * TR420 EQU * CWK A2,DLE ABL(NE) BMM900 NOT DLE CF A5,READP READ CHAR AFTER DLE ABL(NZ) BMM910 PARITY ERROR CWK A2,WACK RF(NE) TR440 NOT WACK CF A15,CLPTIM WACK: STOP PROCEDURE TIMER CM DWTENQ,A6 SEND ENQ:S AS LONG AS WACK:S ARE RECEIVED IM DWTWAC,A6 COUNT WACK:S LD A1,DWTWAC,A6 CWK A1,WACCNT ABL(L) TRENQ NOT COUNT OUT; SEND ENQ LDKL A4,RCRTRY COUNT OUT ABL TR220 SEND EOT AND COMPLETE REQUEST TR440 CW A2,DWTRSN,A6 RB(NE) TR285 IMPROPER ACK CF A15,CLPTIM EXPECTED ACK: STOP TIMER LDK A1,2 ST A1,DWTACK,A6 INDICATE NOW IN TTD SEQUENCE RB TR410 CHECK IF WRITE IS TO BE DONE EJECT * * * RECEIVE MODE * * RECEIV EQU * CWK A2,ENQ ABL(E) REC400 ENQ RECEIVED: SEND LAST RESPONSE IFT TRANSP=1 CWK A2,DLE ABL(NE) BMM900 NOT DLE CF A5,READP READ CHAR XIF CWK A2,SOH RF(E) REC098 TREAT SOH AS STX CWK A2,STX ABL(NE) BMM900 NOT STX REC098 EQU * LDK A7,0 STX: RESET BCC LDK A3,0 LD A8,DWTECB,A6 GET ECB ADDRESS LD A4,ECBBA,A8 GET BUFFER ADDRESS REC100 CF A5,READP READ CHAR ABL(NZ) REC200 PARITY ERROR IFT TRANSP=1 CWK A2,DLE RF(NE) REC120 TRANSPARANT TEXT CF A5,READP READ CONTROL CHAR. - DLE PRECEEDING XIF CWK A2,SYN RB(E) REC100 DELETE SYN CWK A2,ENQ ABL(E) REC220 TTD REC. SEND NAK IFT TRANSP=1 CWK A2,DLE RF(E) REC120 2:ND DLE RECEIVED XIF LD A1,DWTST,A6 ABL(N) REC251 NO READ REQ LD A1,DWTOR,A6 GET ORDER SUK A1,2 ABL(P) REC251 NO READ REQ CF A5,ACBPAR ACC BLOCK PARITY IFT TRANSP=0 IFT COMPRS=1 CWK A2,GS GROUP SEPARATOR RF(E) REC140 YES XIF REC110 EQU * CWK A2,US UNIT SEPARATOR RF(E) REC14A YES REC115 EQU * CWK A2,ETB RF(E) REC150 ETB RECEIVED CWK A2,ETX RF(E) REC160 ETX RECEIVED IFT TRANSP=1 RF REC200 ILLEGAL CHAR SEND NAK REC120 EQU * LD A1,DWTST,A6 RF(N) REC250 NO READ REQUEST CF A5,ACBPAR ACCUMULATE CRC XIF REC125 EQU * CW A3,ECBRL,A8 CHECK LENGTH ABL(NL) REC250 BUFFER OVERFLOW IFT TRANSP=0 IFT CODE=1 LC A2,TASCII,A2 CONVERT FROM EBCDIC TO ASCII XIF SCR A2,A4 STORE CHAR IN BUFFER ADK A3,1 INCR COUNTER ADK A4,1 INCR POINTER IFT TRANSP=0 IFT COMPRS=0 CWK A2,GS GROUP SEPARATOR RF(E) REC140 YES SKIP TRANSL OF SPACE # XIF RB REC100 NEXT CHAR IFT TRANSP=0 * GS RECEIVED DECOMPRESS SEQ : ...GS SC ... WHERE SC= NO OF SPACES REC140 EQU * CF A5,READP READ SPACE COUNT CHAR RF(NZ) REC200 PARITY ERROR CWK A2,SYN RB(E) REC140 DELETE SYN IF IT IS THERE CF A5,ACBPAR ACC BLOCK PARITY IFT COMPRS=0 CW A3,ECBRL,A8 CHECK LENGTH RF(NL) REC250 BUFFER OVERFLOW SCR A2,A4 STORE CHAR TO USER ADK A3,1 INCR LENTGH ADK A4,1 INCR POINTER RB REC100 GET NEXT CHAR XIF IFT TRANSP=0 IFT COMPRS=1 LDR A1,A2 CHECK CHAR FOR SPACE COUNT ANK A1,SPCCHB SPACE COUNT CHAR BIT SET ? RF(Z) REC146 NO IGNORE SEQUENCE LDR A1,A2 CHECK COUNT VALUE ANK A1,SPCCHM MASK OFF IRRELEVANT CWK A1,SPCMIN TOO SMALL ? RF(L) REC146 YES IGNORE SEQUENCE NGR A1,A1 NO OF SPACES TO INSERT NEG LDK A2,SPCASC ASCII SPACE TO INSERT REC142 EQU * CW A3,ECBRL,A8 RF(NL) REC250 BUFFER OVERFLOW SCR A2,A4 STORE CHAR ADK A3,1 INCR COUNTER ADK A4,1 INCR POINTER ADK A1,1 INCR INSERT COUNT RB(N) REC142 INSERT MORE SPACES RB REC100 END OF DECOMPRESS GET NEXT CHAR * SPACE COUNT CHAR INCORRECT REC146 EQU * RESTORE CHARS CW A3,ECBRL,A8 RF(NL) REC250 BUFFER OVERFLOW LDK A1,GS IFT CODE=1 LC A1,TASCII,A1 CONVERT EBCDIC TO ASCII XIF IFT TRANSP=0 IFT COMPRS=1 SCR A1,A4 RESTORE GS ADK A3,1 INCR COUNTER ADK A4,1 INCR POINTER RB REC125 STORE 2ND CHAR XIF * US RECEIVED CHECK BCC/CRC REC14A EQU * IFT IUSUSE=1 IFT CODE=1 LC A2,TASCII,A2 CONVERT EBCDIC TO ASCII XIF IFT IUSUSE=1 CW A3,ECBRL,A8 END OF BUFFER RF(NL) REC253 BUFFER OVERFLOW SCR A2,A4 STORE CHAR TO BUFFER ADK A3,1 INCR COUNTER ADK A4,1 INCR POINTER XIF ST A7,DWTIUS,A6 SAVE BCC/CRC CF A5,RDBPAR READ BLOCK PARITY AND CHECK IT RF(NZ) REC200 PARITY ERROR LD A7,DWTIUS,A6 RELOAD BCC/CRC REC14C EQU * CF A5,READP RF(NZ) REC200 PARITY ERROR CWK A2,SYN RB(E) REC14C DELETE SYNC IFT TRANSP=1 CF A5,READP FIND DLE STX CWK A2,DLE RF(NE) REC200 NO DLE STX ERROR THEN XIF CF A5,ACBPAR ACCUMULATE BLOCK PARITY CWK A2,STX ABL(E) REC100 IGNORE STX RB REC115 HANDLE CHAR * ETB RECEIVED REC150 EQU * LDKL A4,RCETB PRESET FOR ETB RECEPTION LDK A1,2 ST A1,DWTXST,A6 RESET RECEIVE MODE RF REC170 * ETX RECEIVED REC160 EQU * LDKL A4,RCETX PRESET FOR ETX RECEPTION LDK A1,3 ST A1,DWTXST,A6 SET RECEIVE MODE. ETX RECEIVED REC170 EQU * CF A5,RDBPAR READ BLOCK PARITY=10 RF(NZ) REC220 BCC ERROR IFT SALCUZ=1 IFT CODE=0 CF A5,CHALTI HALT I/P TO CHECK PARITY ANK A2,SBPARI CHAR PARITY IN BLOCK RF(NZ) REC220 CHAR PARITY ERROR XIF ST A3,ECBEL,A8 STORE EFFECTIVE LENGTH CF A15,CLRTIM STOP REQUEST TIMER IF RUNNING LDR A1,A4 STORE RETURN CODE CF A15,TENDIO COMPLETE READ REQUEST LDK A1,EXCACK XRS A1,DWTRSN,A6 CHANGE ACK TO BE SENT REC190 EQU * CF A5,CHALTI STOP RECEIVER LDR A1,A6 DWT ADDRESS CF A15,SETIME START WACK TIMER DATA REC500,TIMWAC ST A4,DWTPTI,A6 SAVE TIMER POINTER LDK A1,1 ST A1,DWTACK,A6 SET WACK DELAY INDICATOR WAIT FOR NEXT READ TO SEND ACK ABL TDISP GO TO DISPATCHER * PARITY ERROR FIND END OF BLOCK REC200 CF A5,READP PARITY ERROR RECEIVED RB(NZ) REC200 PARITY ERROR IFT TRANSP=1 CWK A2,DLE RB(NE) REC200 NOT DLE CF A5,READ XIF CWK A2,US UNIT SEPARATOR RF(NE) REC205 NO CF A5,RDBPAR READ AND CHECK BLOCK PARITY RB REC200 REC205 EQU * CWK A2,ETB RF(E) REC210 ETB RECEIVED CWK A2,ETX RB(NE) REC200 NOT ETB/ETX REC210 EQU * CF A5,RDBPAR READ BLOCK PARITY REC220 CF A5,TRNAK SEND NAK ABL BMM * BUFFER OVERFLOW FIND END OF BLOCK REC250 EQU * CF A5,READP NO REQUEST/BUFFER OVERFLOW RB(NZ) REC250 PARITY ERROR REC251 EQU * IFT TRANSP=1 CWK A2,DLE RB(NE) REC250 NOT DLE CF A5,READ XIF CWK A2,US UNIT SEPARATOR RF(NE) REC255 NO REC253 EQU * CF A5,RDBPAR READ AND SKIP BLOCK PARITY RB REC250 GET NEXT CHAR REC255 EQU * CWK A2,ETB RF(E) REC260 ETB RECEIVED CWK A2,ETX RB(NE) REC250 NOT ETB/ETX REC260 EQU * CF A5,RDBPAR READ BLOCK PARITY CF A15,CLRTIM CLEAR TIMER POINTER LDKL A4,RCINCL PRESET FOR BUFFER OVERFLOW ABL TR220 SEND EOT AND COMPLETE REQUEST EJECT * * * ENQ RECEIVED: REPEAT LAST ACKNOWLEDGMENT * * REC400 LD A1,DWTLRS,A6 GET LAST RESPONSE CWK A1,NAK RB(E) REC220 NAK SENT CWK A1,RVI RF(E) REC420 RVI SENT CWK A1,WACK RF(NE) REC410 WACK NOT SENT:= ACK 0/1 LD A1,DWTST,A6 RB(N) REC190 NOT YET ANY REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,2 RF(Z) REC410 READ REQUEST SUK A1,/22-/02 ABL(Z) RVI300 SEND RVI AND COMPLETE REQUEST RB REC190 REC410 EQU * CF A5,TRACK SEND ACK 0/1 ABL BMM WAIT FOR NEXT MESSAGE REC420 EQU * CF A5,TRRVI SEND RVI ABL BMM CONTINUE RECEPTION * * EJECT * * * WACK DELAY TIME OUT * * REC500 EQU * LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLPTIM CLEEAR POINTER LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 CM DWTACK,A6 RESET WACK DELAY INDICATOR CF A5,TRWACK SEND WACK ABL BMM WAIT FOR ENQ EJECT * * * TRANSMIT TEXT BLOCK * * TRTEXT EQU * IM DWTRTR,A6 COUNT RETRANSMISSIONS LD A1,DWTRTR,A6 CWK A1,RTRCNT ABL(G) TR210 COUNT OUT, SEND EOT CF A5,WRSYN START TRANSMITTER AND SEND SYN IFT TRANSP=1 LDK A2,DLE CF A5,WRBCCN SEND ONE DLE XIF LDK A2,STX CF A5,WRITEP SEND STX LDK A7,0 RESET BCC LD A8,DWTECB,A6 GET ECB ADDRESS LDK A3,0 RESET CHAR COUNTER LD A4,ECBBA,A8 LOAD BUFFER ADDRESS ADK A4,2 SKIP FIRST WORD IN BUFFER LD A3,ECBRL,A8 GET REQUESTED LENGTH SUK A3,1 SKIP FIRST BYTE IFT TRANSP=0 IFT COMPRS=1 CM DWTCMP,A6 CLEAR SPACE COMPRESS CTNL XIF TRT100 EQU * SUK A3,1 DECREMENT LENGTH RF(NP) TRT120 ALL TRANSMITTED LCR A2,A4 GET CHAR FROM BUFFER ADK A4,1 INCR POINTER ANK A2,/FF MASK TO 8 BITS!! =3 IFT TRANSP=0 ANK A2,/7F REMOVE P-BIT =3 CWK A2,ETB RF(G) TRT110 NOT ETB IN TEXT CWK A2,SYN RF(NL) TRT105 REPLACE SYN BY SPACE CWK A2,/07 CHECK CODE RF(NL) TRT110 CODE /07 OR GREATER IS OK TRT105 EQU * LDK A2,/20 REPLACE INVALID CODE BY SPACE XIF TRT110 EQU * IFT TRANSP=0 IFT COMPRS=0 CWK A2,GS GROUP SEPARATOR RF(E) TRT117 YES XIF IFT TRANSP=0 IFT COMPRS=1 CWK A2,SPCASC ASCII SPACE RF(NE) TRT112 NO IM DWTCMP,A6 INCR SPACES LD A1,DWTCMP,A6 CHECK IF MAX NO OF SPACES CWK A1,SPCMAX RB(L) TRT100 NOT MAX GET NEXT CHAR CF A5,TRCOMP TRANSMIT COMPRESSED SPACES RB TRT100 COMPRESSED MODE ENDED TRT112 EQU * CHAR /= SPACE LD A1,DWTCMP,A6 COMPRESS MODE ? RF(Z) TRT114 NO CF A5,TRCOMP TRANSMIT COMPRESSED SPACES TRT114 EQU * COMPRESS ENDED XIF IFT TRANSP=0 IFT CODE=1 LC A2,TEBCDI,A2 CONVERT FROM ASCII TO EBCDIC XIF IFT TRANSP=1 CWK A2,DLE RF(NE) TRT115 NOT DLE CF A5,WRBCCN INSERT ONE DLE. NO CRC-CAL LDK A2,DLE XIF TRT115 EQU * CF A5,WRITEP SEND CHAR RB TRT100 NEXT CHAR IFT TRANSP=0 IFT COMPRS=0 * GROUP SEPARATOR, TRANSMIT SPACE COUNT TRT117 EQU * CF A5,WRITEP TRANSMIT GS SUK A3,1 DECR BUFF POINTER RF(NP) TRT120 END OF BUFFER LCR A2,A4 GET CHAR ADK A4,1 INCR POINTER ANK A2,/7F CLEAN CHAR ORK A2,/40 SET SPACE CHAR BIT CF A5,WRITEP TRANSMIT SPACE COUNT RB TRT100 GET NEXT CHAR TO TRANSMIT XIF TRT120 EQU * IFT TRANSP=1 LDK A2,DLE CF A5,WRBCCN SEND ONE DLE. NO CRC-CAL XIF LD A8,DWTECB,A6 GET ECB ADDRESS LD A1,ECBBA,A8 GET BUFFER ADDRESS LC A1,1,A1 GET CONTROL CHARACTER LDK A2,ETX ANK A1,/FF RF(Z) TRT130 WRITE LAST LDK A2,ETB TRT130 EQU * IFT TRANSP=0 IFT COMPRS=1 LD A1,DWTCMP,A6 COMPRESS MODE STILL? RF(Z) TRT132 NO CF A5,TRCOMP TRANSMIT COMPRESSED SPACES TRT132 EQU * XIF CF A5,WRITEP SEND ETB/ETX IFT CODE=1 LDR A3,A7 SAVE CRC LDR A2,A7 ANK A2,/FF CF A5,WRITE SEND 1ST CRC CHARACTER ECR A7,A3 PREPARE FOR SENDING 2ND CRC CHAR XIF LDR A2,A7 ANK A2,/FF CF A5,OUTEND TERMINATE OUTPUT LDR A1,A6 DWT ADDRESS CF A15,SETIME START ACK TIMER DATA TRT200,TIMACK ST A4,DWTPTI,A6 SAVE TIMER POINTER CM DWTACK,A6 INDICATE ACK EXPECTED ABL BMM EJECT * * * TIME OUT ON TEXT TRANSMISSION * * TRT200 LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLPTIM CLEAR POINTER LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 LDK A1,8 ST A1,DWTACK,A6 INDICATE TRANSMIT TIME OUT ABL TRENQ SEND ENQ IFT TRANSP=0 IFT COMPRS=1 EJECT * * * SEND SPACES COMPRESSED ...... GS SC .... IF MIN NO OF SPACES * TRCOMP EQU * LD A1,DWTCMP,A6 GET NO OF SPACES IN STRING SC A2,DWTCMP,A6 SAVE NEXT CHAR IF ANY CWK A1,SPCMIN NO OF SPACES LESS THAN MIN RF(NL) TRCO20 NO TRCO10 EQU * LDK A2,SPACE SEND APPROPRIATE SPACE CF A5,WRITEP SEND IT LDK A1,0 CLEAN FIRST LC A1,DWTCMP+1,A6 DECR SPACE COUNT SUK A1,1 ALL SPACES SENT RF(Z) TRCRTN YES EXIT SC A1,DWTCMP+1,A6 SAVE COUNT RB TRCO10 SEND NEXT SPACE TRCO20 EQU * NO OF SPACES >MIN SEND: GS SC LDK A2,GS CF A5,WRITEP SEND GS LDK A2,0 CLEAN FIRST LC A2,DWTCMP+1,A6 NO OF SPACES ORK A2,SPCCHB FORM SPACE COUNT CHAR CF A5,WRITEP SEND IT TRCRTN EQU * LDK A2,0 CLEAN FIRST LC A2,DWTCMP,A6 RELOAD SAVED CHAR CM DWTCMP,A6 CLEAR COMPRESSED MODE RTN A5 RETURN TO CALLER XIF EJECT * * * SEND ENQ IN BID SEQUENCE * * TRENQB CF A5,WRENQ SEND ENQ LDR A1,A6 DWT ADDRESS CF A15,SETIME START BID TIMER DATA TRE200,TIMBID TRE100 ST A4,DWTPTI,A6 SAVE TIMER POINTER ABL BMM * * * BID TIME OUT * * TRE200 LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLPTIM CLEAR TIMER LINK LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 LD A1,DWTENQ,A6 CWK A1,ENQCNT RB(L) TRENQB NOT COUNT OUT: BID AGAIN TRE210 EQU * LDKL A4,RCNCON NO CONNECTION ESTABLISHED ABL TR220 SEND EOT EJECT * * * SEND PROCEDURE ENQ * * TRENQ EQU * LD A1,DWTENQ,A6 GET ENQ COUNTER CWK A1,ENQCNT RB(G) TRE210 ENQ COUNT OUT: SEND EOT CF A5,WRENQ SEND ENQ LDR A1,A6 DWT ADDRESS CF A15,SETIME START TIMER DATA TRE300,TIMENQ RB TRE100 * * * TIME OUT ON PROCEDURE ENQ * * TRE300 LDR A6,A1 RESTORE DWT ADDRESS LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 RB TRENQ SEND ENQ AGAIN * * EJECT * * * TRANSMIT TTD * * TRTTD EQU * LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLPTIM CLEAR TIMER LINK LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 LDK A1,3 ST A1,DWTACK,A6 RESPONSE STATE = 3 DURING TTD - NAK CF A5,WRSYN START TRANSMITTER AND SEND SYN IFT TRANSP=1 LDK A2,DLE CF A5,WRBCCN SEND ONE DLE XIF LDK A2,STX CF A5,WRITEP SEND STX IFT TRANSP=1 LDK A2,DLE CF A5,WRBCCN SEND ONE DLE XIF CF A5,WRENQ5 SEND ENQ LDR A1,A6 DWT ADDRESS CF A15,SETIME START TIMER DATA TRT500,TIMENQ ST A4,DWTPTI,A6 SAVE TIMER POINTER ABL BMM * * * NO RESPONSE ON TTD SEQUENCE * * TRT500 LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLPTIM CLEAR TIMER POINTER LDK A5,DWTSTB LOAD STACK BASE ADR A5,A6 ABL TR410 CHECK IF WRITE REQUEST PRESENT EJECT * * * WRSYN : START TRANSMITTER IF 2-WIRE LINE * AND SEND SYN * * WRSYN EQU * CF A5,CHALTI HALT RECEIVER IF ACTIVE CF A5,CSYNCO START O/P WITH SYNC DEF LDR A1,A6 DWT ADDRESS STR A4,A15 SAVE A4 ON STACK CF A15,SETIME START MODEM TRANSMIT TIMER DATA WROUT,TIMWRT ST A4,DWTMTI,A6 SAVE TIMWR POINTER LDR* A4,A15 GET A4 FROM STACK CF A5,READ WAIT FOR INTERRUPT LDK A2,SYN CF A5,WRITE SEND SYN LDK A2,SYN CF A5,WRITE SEND SYN LDK A2,SYN CF A5,WRITE SEND SYN RTN A5 EJECT * * * WROUT: TRANSMIT TIME OUT * = MODEM ERROR * * WROUT EQU * LDR A6,A1 RESTORE DWT ADDRESS CF A15,CLMTIM CLEAR TIMER POINTER LDK A5,DWTSTB LOAD A5 STACK BASE ADR A5,A6 CF A15,CLPTIM STOP PROCEDURE TIMER CF A5,CDISC DISCONNECT MODEM FROM LINE CM DWTSAV+4,A6 CLEAR STACK POINTER ABL RXMNOP MODEM NOT OPERABLE EJECT * * * TREOT : SEND SINGLE EOT * * TREOT EQU * CF A5,WRSYN START OUTPUT AND SEND SYN LDK A2,EOT OUTEND EQU * CF A15,CLMTIM STOP MODEM TRANSMIT TIMER CF A5,WRITEP SEND CHARACTER LDK A2,PAD CF A5,WRITE SEND PAD LDK A2,PAD CF A5,WRITE CF A5,CHALTO STOP O/P IFT IDLELN=1 CF A15,STIDLE START IDLE LINE ACTIVITY TIMER XIF RTN A5 * * * WRENQ : SEND SINGLE ENQ * * WRENQ EQU * CF A5,WRSYN START OUTPUT AND SEND SYN WRENQ5 EQU * IM DWTENQ,A6 COUNT ENQ:S SENT LDK A2,ENQ RB OUTEND EJECT * * * TRNAK : SEND SINGLE NAK * * TRNAK EQU * CF A5,WRSYN START OUTPUT AND SEND SYN LDK A2,NAK ST A2,DWTLRS,A6 SAVE LAST RESPONSE RB OUTEND * EJECT * * TRACK : SEND ACK-0 OR ACK-1 * * TRACK EQU * LD A3,DWTRSN,A6 GET PROPER ACK TO BE SENT TRA100 EQU * CF A5,WRSYN START OUTPUT AND SEND SYN LDK A2,DLE CF A5,WRITE SEND DLE LDR A2,A3 ST A2,DWTLRS,A6 SAVE LAST RESPONSE RB OUTEND * * * TRWACK : SEND WACK * * TRWACK EQU * LDK A3,WACK RB TRA100 EJECT * * * TRACK0 : SEND ACK 0 * * TRACK0 LDK A3,ACK0 ST A3,DWTRSN,A6 STORE PROPER ACK RB TRA100 * * * TRRVI : SEND RVI * * TRRVI LDK A3,RVI RB TRA100 EJECT * * * CINIT : INITIALIZE LINE CONTROL UNIT INFO * CINIT EQU * CM DWTLCI,A6 CLEAR I/P ACTIVE IND CM DWTLCO,A6 CLEAR OUTP. ACT. FLAG ADKL A15,4 INCREMENT STACK POINTER ABR* A15 RETURN TO CALLER EJECT * * CSYNCI : SEND SYNC PATTERN FOR INPUT DATA * * CSYNCI EQU * LD A2,PFPOST =1 ABL(NZ) TDISP WAIT FOR POWER UP =1 CF A5,CHALTI STOP I/P ST A5,DWTLCI,A6 SET I/P ACT. IND. =3 ADK A5,4 ADD RETURN OFFSET FOR ABR IFT SALCUZ=1 LDK A2,PARITY CHAR PARITY FUNCTION FOR LC EX DWTCSI,A6 STARTY I/O LDK A2,SYN SYNC PATTERN EX DWTOSI,A6 SEND I/P SYNC PATTERN TO LC XIF IFF SALCUZ=1 LDKL A2,CBCRSP+SYN SYNC PATTERN EX DWTCSI,A6 SEND I/P SYNC PATTERN TO LC XIF ABR* A5 RETURN TO CALLER WITH CR SET * * * CSYNCO : START TRANSMITTER WITH SYNC DEF * CSYNCO EQU * LD A2,PFPOST =1 ABL(NZ) TDISP WAIT FOR POWER UP =1 IFT SALCUZ=1 LDK A2,PARITY CHAR PARITY TYPE CHECK BY CU EX DWTCSU,A6 CIO START RF(A) CSYNC2 ACCEPTED -> EX DWTSSU,A6 TRY TO READ STATUS THEN RF(A) CSYNC1 ACCEPTED -> ABL BMM NOT ACCEPTED TIMEOUT REQUEST CSYNC1 EQU * LDK A2,PARITY RETRY CIO EX DWTCSU,A6 DO IT CSYNC2 EQU * LDK A2,SYN SYNC PATTERN EX DWTOSU,A6 DEFINE SYNC ST A5,DWTLCO,A6 SET OUTP. ACT. FLAG XIF IFF SALCUZ=1 EX DWTCSU,A6 START TRANSMITTER XIF RTN A5 EJECT * * * CHALTI : HALT INPUT CHANNEL * * CHALTI EQU * IFT SALCUZ=1 LDK A2,CBSTOP STOP FUNCTION BIT XIF EX DWTCHI,A6 HALT I/P CM DWTLCI,A6 CLEAR I/P ACTIVE IND EX DWTSSI,A6 SST INPUT ** LOGG IFF LOGG=0 CF A5,LOGSST LOGG I/P SST XIF ADK A5,4 INCR STACK POINTE ABR* A5 RETURN TO CALLER * * * CHALTO : HALT O/P CHANNNEL * CHALTO EQU * IFT SALCUZ=1 LDK A2,CBSTOP STOP FUNCTION EX DWTCHU,A6 STOP CU LD A2,DWTLCO,A6 . RF(Z) CHLTO1 OUTP. NOT ACTIVE CM DWTLCO,A6 CLEAR OUTP. ACT. FLAG CF A5,READ WAIT FOR INTERRUPT CHLTO1 EQU * . =5 XIF IFF SALCUZ=1 EX DWTCHU,A6 HALT CU XIF ADK A5,4 INCREMENT STACK POINTER EX DWTSSU,A6 GET STATUS ABR* A5 RETURN TO CALLER EJECT * * * CCALL : ACTIVATE CU TO ACCEPT CALL * CCALL EQU * LD A2,PFPOST =1 ABL(NZ) TDISP WAIT FOR POWER UP =1 CM DWTLCI,A6 CLEAR I/P ACTIVE FLAG ADK A5,4 INCREMENT STACK POINTER IFT SALCUZ=1 LDK A2,CBDISC EX DWTCHI,A6 XIF IFF SALCUZ=1 LDK A2,0 EX DWTCSI,A6 XIF ABR* A5 * * * CDISC : DISCONNECT MODEM FROM LINE * CDISC EQU * CM DWTLCI,A6 CLEAR I/P ACTIVE FLAG ADK A5,4 INCREMENT STACK POINTER IFT SALCUZ=1 LDK A2,CBDISC EX DWTCHI,A6 EX DWTCHU,A6 DISC O/P XIF IFF SALCUZ=1 EX DWTCHI,A6 HALT I/P EX DWTSSI,A6 . EX DWTCHU,A6 HALT O/P EX DWTSSU,A6 . LDK A2,0 EX DWTCSI,A6 XIF ABR* A5 RETURN TO CALLER EJECT * * * CLEAR PROCEDURE TIMER IF RUNNING * * CLPTIM LD A1,DWTPTI,A6 GET TIMER POINTER RF(Z) CLPRTN NO TIMER RUNNING CM* DWTPTI,A6 STOP TIMER CM DWTPTI,A6 CLEAR TIMER POINTER CLPRTN EQU * IFT CPU852=1 ADKL A15,4 ABR* A15 RETURN XIF IFT CPU852=0 RTN A15 XIF * * * CLEAR REQUEST TIMER IF RUNNING * * CLRTIM EQU * =2 LD A2,DWTRTI,A6 GET TIMER POINTER =2 RB(Z) CLPRTN NO TIMER RUNNING CM* DWTRTI,A6 STOP TIMER CM DWTRTI,A6 CLEAR TIMER POINTER RB CLPRTN * EJECT * * * CLEAR MODEM TRANSMIT TIMER IF RUNNING * * CLMTIM EQU * LD A1,DWTMTI,A6 GET TIMER POINTER RB(Z) CLPRTN NO TIMER RUNNING CM* DWTMTI,A6 STOP TIMER CM DWTMTI,A6 CLEAR TIMER POINTER RB CLPRTN IFT IDLELN=1 EJECT ************************************************************* * * LINE ACTIVITY: * A TIMER IS STARTED WHENEVER THE LINE IS IDLE (NOT ACTIVE) * WHEN TIMEOUT, THE RTS (REQUEST TO SEND) IS RISED A MOMENT * ENOUGH TO PREVENT THE MODEM TO DISCONNECT THR LINE * ************************************************************** * * START IDLE TIMER * STIDLE EQU * LDR A1,A6 CF A15,SETIME SET IDLE TIMER DATA TRIDLE,TIMIDL ST A4,DWTITI SAVE TIMER BLOCK POINTER RTN A15 * * IDLE TIMOUT - STOP RECEIVER - RISE RTS - START RECEIVER * TRIDLE EQU * LDR A6,A1 RELOAD DWT-ADDRESS CF A15,CLIDLE CLEAR IDLE TIMER CF A15,STIDLE RE-START IDLE TIMER CF A5,CHALTI HALT RECEIVER =6 CF A5,CSYNCO * RISE RTS =6 CF A5,CHALTO * JUST A MOMENT =6 CF A5,CSYNCI RE-START RECEIVER =6 ABL EXDISP * * CLEAR IDLE TIMER * CLIDLE EQU * LD A1,DWTITI,A6 GET TIMER BLOCK POINTER RF(Z) CLIRTN NOT RUNNING CM* DWTITI,A6 * CLEAR TIME & CM DWTITI,A6 * BLOCK POINTER CLIRTN EQU * RTN A15 XIF EJECT * * * SST SEQUENCE FOR INPUT CHANNEL * * SSTIN EQU * LD A3,DWTSAV,A6 RELOAD REGS LD A4,DWTSAV+2,A6 LD A5,DWTSAV+4,A6 LD A7,DWTSAV+6,A6 LD A8,DWTSAV+8,A6 EX DWTSSI,A6 SST INSTRUCTION RF(NA) SST205 NOT ACCEPTED **LOGG IFF LOGG=0 CF A5,LOGSST LOGG INPUT SST XIF LDR A1,A2 ANK A1,SBERR+SBCALL ERROR OR CALL BITS SET ? RF(Z) SST204 MODEM WORKING RETURN TO CALLER LDR A1,A2 RELOAD SST STATUS ANK A1,SBCALL INCOMING CALL ? RF(Z) SST150 NOT CALLING INDICATOR LD A1,DWTST,A6 CALLING INDICATOR ABL(N) BMM NO REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,/31 ABL(NZ) BMM NOT ACCEPT CALL REQUEST ABL ACC150 CALL RECEIVED - COMPLETE REQ. SST150 EQU * IFT SALCUZ=1 IFT CODE=0 LDR A1,A2 MOVE STATUS ANK A1,SBPARI CHAR PARITY ERROR ? RF(NZ) SST205 YES XIF LDR A1,A2 MOVE STATUS ANK A1,SBNOOP RF(NZ) SST200 YES LD A1,DWTLCI,A6 CARRIER OFF: I/P ACTIVE ? ABL(Z) EXDISP NO IGNORE CARRIER IF I/P IS NOT ACTIVE RF(P) SST205 YES BUT NO DATA YET SST200 EQU * CM DWTLCI,A6 CLEAR I/P ACTIVE FLAG CM DWTSAV+4,A6 CLEAR STACK POINTER ABL RXMNOP MODEM NOT OPERABLE =2 SST204 EQU * LDKL A2,/100 IND SST STATUS Z SST205 EQU * LDR A5,A5 . ABL(Z) TDISP IGNORE INT. IF STACKP. CLEARED ADK A5,4 INCREMENT RETURN OFFSET LDR A1,A2 SET CR FOR CALLER ABR* A5 RETURN TO CALLER WITH CR SET EJECT * * * WRITEP : GENERATE PARITY AND SEND CHARACTER * * WRITEP EQU * IFT CODE+SALCUZ=0 ECR A1,A2 ORK A2,/80 WRP100 EQU * SLL A1,1 RB(P) WRP100 RF(Z) WRP110 XRK A2,/80 RB WRP100 WRP110 EQU * XIF RF WRITE * * * WRITE : TRANSMIT ONE CHARACTER * * WRITE EQU * IFT CODE=0 XRR A7,A2 ACCUMULATE BCC XIF IFT CODE=1 CF A5,ACBPAR ACCUMULATE CRC XIF WRBCCN EQU * EX DWTOTR,A6 PERFORM OTR INSTRUCTION **LOGG IFF LOGG=0 RF(NA) WRIT10 CF A5,LOGOUT LOGG OUTPUT CHARACTER XIF WRIT10 EQU * RF READ SAVE REGISTERS EJECT * * * READP : READ CHARACTER AND CHECK PARITY * ON PARITY ERROR CR NOT ZERO * * READP EQU * CF A5,READ READ CHARACTER LDR A1,A1 ANY SST STATUS RF(NZ) REPEXI YES IFT CODE+SALCUZ=0 ECR A3,A2 LDR A1,A2 REP10 EQU * SLL A3,1 RF(Z) REP20 RB(NN) REP10 XRK A1,/80 RB REP10 REP20 EQU * LD A3,DWTSAV,A6 RESTORE A3 XRK A1,/80 ANK A2,/7F ANK A1,/80 XIF IFT SALCUZ=1 IFT CODE=0 ANK A1,0 SET CR AS FROM READP XIF IFT CODE=1 ANK A1,0 SET CR TO ZERO XIF REPEXI EQU * ADK A5,4 INCR STACK POINTER LDR A1,A1 SET CR ABR* A5 EJECT * * READ : SAVE REGISTER A3-A5,A7,A8 * GO TO DISPATCHER * READ EQU * ST A3,DWTSAV,A6 ST A4,DWTSAV+2,A6 ST A5,DWTSAV+4,A6 ST A7,DWTSAV+6,A6 ST A8,DWTSAV+8,A6 ABL EXDISP GO TO DISPATCHER IFT CODE=0 EJECT * * * CALCULATION OF BCC * A2= CHARACTER||=4 * A7= ACCUMULATED CRC ACBPAR EQU * XRR A7,A2 ACC CHAR RTN A5 * * * READ AND CHECK BCC * RDBPAR EQU * CF A5,READ READ CHAR RF(NZ) RDBP01 PARITY ERROR ADK A5,4 INCR RETURN STACK POINTER XRR A7,A2 ANK A7,/7F RF RDBP02 RDBP01 EQU * PARITY ERROR ADK A5,4 SET CR AND INCR STACK POINT RDBP02 EQU * ABR* A5 RETURN TO CALLER XIF IFT CODE=1 EJECT * * * CALCULATION OF CRC * * A2 = CHARACTER * A7 = ACCUMULATED CRC * * ACBPAR EQU * ST A1,CRCSAV ST A2,CRCSAV+2 ST A3,CRCSAV+4 LDK A1,8 CRC100 LDR A3,A7 SRL A7,1 XRR A3,A2 SRL A2,1 ANK A3,1 RF(Z) CRC110 XRKL A7,/A001 CRC110 SUK A1,1 RB(NZ) CRC100 LD A1,CRCSAV LD A2,CRCSAV+2 LD A3,CRCSAV+4 RTN A5 CRCSAV RES 3 EJECT * * * READ AND CHECK CRC * * ON RETURN CR=0 IF CRC IS OK * * RDBPAR EQU * CF A5,READ READ 1ST CRC CHAR XRR A7,A2 CHECK WITH ACCUMULATED CF A5,READ READ 2ND CRC CHAR ECR A7,A7 ADK A5,4 XRR A2,A7 CHECK CRC AND SET CR ABR* A5 RETURN XIF EJECT ******************************************************* * * INTERRUPT HANDLER , CHLC RECEIVER * ******************************************************* * IHLCIN EQU * IH1701 EQU * ST P,INTSAV IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON A15 STACK XIF IFT CPU852=0 MSR 8,A15 SAVE A1- A8 XIF LDKL A6,DW1701 LOAD DWT ADDRESS INR A2,0,DAMI01 GET CHARACTER FROM LINR IHI100 EQU * ABL(NA) SSTIN **LOGG IFF LOGG=0 LD A5,DWTSAV+4,A6 CF A5,LOGIN LOGG INPUT CHARACTER XIF LDR A1,A2 MOVE CHAR TO FORM FLAG ORKL A1,/FF00 SET FLAG FOR CARRIER ON ST A1,DWTLCI,A6 SET I/P CARR FLAG IHI110 EQU * LD A3,DWTSAV,A6 LD A4,DWTSAV+2,A6 LD A7,DWTSAV+6,A6 LD A8,DWTSAV+8,A6 LD A5,DWTSAV+4,A6 RELOAD STACK POINTER ABL(Z) TDISP IGNORE INT IF CLEARED ADK A5,4 INCR STACK POINT LDKL A1,0 SET CR=0 ABR* A5 RETURN WITH CR IFF NLINE=1 EJECT * * * IH1703 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1702 LOAD DWT ADDRESS INR A2,0,DAMI02 GET CHARACTER FROM LINE RB IHI100 IFF NLINE=2 * * * IH1705 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1703 LOAD DWT ADDRESS INR A2,0,DAMI03 GET CHARACTER FROM LINE RB IHI100 IFF NLINE=3 * * * IH1707 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1704 LOAD DWT ADDRESS INR A2,0,DAMI04 GET CHARACTER FROM LINE RB IHI100 XIF EJECT ******************************************************* * * INTERRUPT HANDLER , CHLC TRANSMITTER * ******************************************************* * * * IHLCUT EQU * IH1702 EQU * IFT CPU852=1 CF A15,SAVE8 SAVE REGISTERSA XIF IFT CPU852=0 MSR 8,A15 SAVE REGISTERS XIF LDKL A6,DW1701 LOAD DWT ADDRESS RB IHI110 LOAD REGISTERS IFF NLINE=1 EJECT * * * IH1704 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1702 LOAD DWT ADDRESS RB IHI110 LOAD REGISTERS IFF NLINE=2 * * * IH1706 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1703 LOAD DWT ADDRESS RB IHI110 LOAD REGISTERS IFF NLINE=3 * * * IH1708 EQU * ST P,INTSAV CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDKL A6,DW1704 LOAD DWT ADDRESS RB IHI110 LOAD REGISTERS XIF EJECT * * ILLEGAL INTERRUPTS * IFF NLINE=4 IH1707 EQU * IH1708 EQU * IFF NLINE=3 IH1705 EQU * IH1706 EQU * IFF NLINE=2 IH1703 EQU * IH1704 EQU * XIF ST P,INTSAV LDK A1,/5 INDICATE ILLEGAL INTERRUPT ABL ILLINT ILLEGAL INTERRUPT ROUTINE EJECT * * * DCTAB: LINE CONFIGURATION TABLE * * DCTAB EQU * DATA DCTABE-DCTAB TABLE LENGTH DATA DW1701 IFF NLINE=1 DATA DW1702 IFF NLINE=2 DATA DW1703 IFF NLINE=3 DATA DW1704 XIF DCTABE EQU * EJECT * * * DEVICE WORK TABLE FOR LINE 01 * * DW1701 EQU * DATA DAMU01 DEVICE ADDRESS DATA /8000 STATUS , /8000 MEANS DEVICE READY DATA 0 ECB ADDRESS DATA 0 ORDER DATA DRMAD POINTER TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TASK QUEUE FOR THIS DEVICE IFT MMUPAG=1 DATA 0 USER ECB DATA ECBDC1 MMU ECB XIF DWTTIM EQU *-DW1701 REQUEST TIMER VALUE DATA 0 DWTRTI EQU *-DW1701 DATA 0 REQUEST TIMER POINTER DWTPTI EQU *-DW1701 DATA 0 PROCEDURE TIMER POINTER DWTMTI EQU *-DW1701 DATA 0 MODEM TRANSMIT TIMER POINTER IFT IDLELN=1 DWTITI EQU * DATA 0 IDLE ACT. TIMER POINTER XIF DWTSAV EQU *-DW1701 RES 5 SAVE AREA FOR A3-A5,A7,A8 DWTXST EQU *-DW1701 DATA 0 PROCEDURE STATUS: 0= CONTROL STATE 1= TRANSMISSION MODE 2= RECEIVE MODE 3= RECEIVE MODE, ETX REC. DWTACK EQU *-DW1701 DATA 0 RESPONSE STATE 0= ACK EXPECTED 1= WACK SEQ. DELAY (REC) 2= TTD SEQ. DELAY (TRANS) 3= TTD SEQ. WAIT FOR NAK (TRANS) 4= WACK SEQ. (TRANS) 6= BID SEQ. 8= ACK EXP. AFTER TRANSMIT TIME OUT DWTENQ EQU *-DW1701 DATA 0 ENQ COUNTER DWTRSN EQU *-DW1701 DATA 0 ACK TO BE SENT/RECEIVED DWTWAC EQU *-DW1701 DATA 0 WACK COUNTER DWTRTR EQU *-DW1701 DATA 0 RETRANSMISSION COUNTER DWTLRS EQU *-DW1701 DATA NAK LAST SENT RESPONSE DWTIUS EQU *-DW1701 DATA 0 BCC/CRC SAVE IFT COMPRS=1 DWTCMP EQU *-DW1701 DATA 0 SPACE COMPRESS WORK XIF RES 10 A5 STACK DWTSTB EQU *-DW1701-2 STACK BASE DWTLCI EQU *-DW1701 DATA 0 LINE CU I/P ACTIVE IND DWTLCO EQU *-DW1701 . DATA 0 OUTP. ACT. IND. DWTOTR EQU *-DW1701 OTR A2,0,DAMU01 DWTSSI EQU *-DW1701 SST A2,DAMI01 DWTSSU EQU *-DW1701 SST A2,DAMU01 DWTCSI EQU *-DW1701 CIO A2,1,DAMI01 DWTCSU EQU *-DW1701 CIO A2,1,DAMU01 DWTCHI EQU *-DW1701 CIO A2,0,DAMI01 DWTCHU EQU *-DW1701 CIO A2,0,DAMU01 IFT SALCUZ=1 DWTOSI EQU *-DW1701 OTR A2,1,DAMI01 DWTOSU EQU *-DW1701 OTR A2,1,DAMU01 XIF IFT MMUPAG=1 ECBDC1 EQU * DATA 0 DATA DCBUF1 DATA 0,0,0,0 DCBUF1 RES TBUFL+1 XIF **LOGG IFF LOGG=0 LOGPNT EQU *-DW1701 DATA LGST01 LOGSTA EQU *-DW1701 LGST01 EQU * RES LOGG LOGEND EQU *-DW1701-4 SAVE2 EQU *-DW1701 DATA 0 SAVE3 EQU *-DW1701 DATA 0 XIF * IFF NLINE=1 EJECT * * * DEVICE WORK TABLE FOR LINE 02 * * DW1702 EQU * DATA DAMU02 DEVICE ADDRESS DATA /8000 STATUS , /8000 MEANS DEVICE READY DATA 0 ECB ADDRESS DATA 0 ORDER DATA DRMAD POINTER TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TASK QUEUE FOR THIS DEVICE IFT MMUPAG=1 DATA 0 USER ECB DATA ECBDC2 MMU ECB XIF IFF NLINE=1 DATA 0 REQUEST TIMER VALUE DATA 0 REQUEST TIMER POINTER DATA 0 PROCEDURE TIMER POINTER DATA 0 MODEM TRANSMIT TIMER POINTER IFT IDLELN=1 DATA 0 IDLE ACT. TIMER POINTER XIF IFF NLINE=1 RES 5 SAVE AREA FOR A3-A5,A7,A8 DATA 0 PROCEDURE STATUS DATA 0 RESPONSE STATUS DATA 0 ENQ COUNTER DATA 0 ACK TO BE SENT/RECEIVED DATA 0 WACK COUNTER DATA 0 RETRANSMISSION COUNTER DATA NAK LAST SENT RESPONSE DATA 0 BCC/CRC SAVE AREA IFT COMPRS=1 DATA 0 SPACE COMPRESS WORK AREA XIF IFF NLINE=1 RES 10 A5 STACK DATA 0 LINE CU I/P ACTIVE IND DATA 0 OUTP. ACT. IND. OTR A2,0,DAMU02 SST A2,DAMI02 SST A2,DAMU02 CIO A2,1,DAMI02 CIO A2,1,DAMU02 CIO A2,0,DAMI02 CIO A2,0,DAMU02 IFT SALCUZ=1 OTR A2,1,DAMI02 OTR A2,1,DAMI02 XIF IFF NLINE=1 IFT MMUPAG=1 ECBDC2 EQU * DATA 0 DATA DCBUF2 DATA 0,0,0,0 DCBUF2 RES TBUFL+1 XIF IFF NLINE=1 **LOGG IFF LOGG=0 DATA LGST02 LGST02 EQU * RES LOGG DATA 0 DATA 0 XIF * IFF NLINE=1 IFF NLINE=2 EJECT * * * DEVICE WORK TABLE FOR LINE 03 * * DW1703 EQU * DATA DAMU03 DEVICE ADDRESS DATA /8000 STATUS , /8000 MEANS DEVICE READY DATA 0 ECB ADDRESS DATA 0 ORDER DATA DRMAD POINTER TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TASK QUEUE FOR THIS DEVICE IFT MMUPAG=1 DATA 0 USER ECB DATA ECBDC3 MMU ECB XIF IFF NLINE=1 IFF NLINE=2 DATA 0 SET REQUEST TIMER VALUE DATA 0 REQUEST TIMER POINTER DATA 0 PROCEDURE TIMER POINTER DATA 0 MODEM TRANSMIT TIMER POINTER IFT IDLELN=1 DATA 0 IDLE ACT. TIMER POINTER XIF IFF NLINE=1 IFF NLINE=2 RES 5 SAVE AREA FOR A3-A5,A7,A8 DATA 0 PROCEDURE STATUS DATA 0 RESPONSE STATUS DATA 0 ENQ COUNTER DATA 0 ACK TO BE SENT/RECEIVED DATA 0 WACK COUNTER DATA 0 RETRANSMISSION COUNTER DATA NAK LAST SENT RESPONSE DATA 0 BCC/CRC SAVE AREA IFT COMPRS=1 DATA 0 SPACE COMPRESS WORK AREA XIF IFF NLINE=1 IFF NLINE=2 RES 10 A5 STACK DATA 0 LINE CU I/P ACTIVE IND DATA 0 OUTP. ACT. IND. OTR A2,0,DAMU03 SST A2,DAMI03 SST A2,DAMU03 CIO A2,1,DAMI03 CIO A2,1,DAMU03 CIO A2,0,DAMI03 CIO A2,0,DAMU03 IFT SALCUZ=1 OTR A2,1,DAMI03 OTR A2,1,DAMU03 XIF IFF NLINE=1 IFF NLINE=2 IFT MMUPAG=1 ECBDC3 EQU * DATA 0 DATA DCBUF3 DATA 0,0,0,0 DCBUF3 RES TBUFL+1 XIF IFF NLINE=1 IFF NLINE=2 **LOGG IFF LOGG=0 DATA LGST03 LGST03 EQU * RES LOGG DATA 0 DATA 0 XIF * IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 EJECT * * * DEVICE WORK TABLE FOR LINE 04 * * DW1704 EQU * DATA DAMU04 DEVICE ADDRESS DATA /8000 STATUS , /8000 MEANS DEVICE READY DATA 0 ECB ADDRESS DATA 0 ORDER DATA DRMAD POINTER TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TASK QUEUE FOR THIS DEVICE IFT MMUPAG=1 DATA 0 USER ECB DATA ECBDC4 XIF IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 DATA 0 SET REQUEST TIMER VALUE DATA 0 REQUEST TIMER POINTER DATA 0 PROCEDURE TIMER POINTER DATA 0 MODEM TRANSMIT TIMER POINTER IFT IDLELN=1 DATA 0 IDLE ACT. TIMER POINTER XIF IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 RES 5 SAVE AREA FOR A3-A5,A7,A8 DATA 0 PROCEDURE STATUS DATA 0 RESPONSE STATUS DATA 0 ENQ COUNTER DATA 0 ACK TO BE SENT/RECEIVED DATA 0 WACK COUNTER DATA 0 RETRANSMISSION COUNTER DATA NAK LAST SENT RESPONSE DATA 0 BCC/CRC SAVE AREA IFT COMPRS=1 DATA 0 SPACE COMPRESS WORK AREA XIF IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 RES 10 A5 STACK DATA 0 LINE CU I/P ACTIVE IND DATA 0 OUTP. ACT. IND. OTR A2,0,DAMU04 SST A2,DAMI04 SST A2,DAMU04 CIO A2,1,DAMI04 CIO A2,1,DAMU04 CIO A2,0,DAMI04 CIO A2,0,DAMU04 IFT SALCUZ=1 OTR A2,1,DAMI04 OTR A2,1,DAMU04 XIF IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 IFT MMUPAG=1 ECBDC4 EQU * DATA 0 DATA DCBUF4 DATA 0,0,0,0 DCBUF4 RES TBUFL+1 XIF IFF NLINE=1 IFF NLINE=2 IFF NLINE=3 **LOGG IFF LOGG=0 DATA LGST04 LGST04 EQU * RES LOGG DATA 0 DATA 0 XIF * EJECT * * * DUMMY DWT * * IFF NLINE=4 DW1704 EQU * IFF NLINE=3 DW1703 EQU * IFF NLINE=2 DW1702 EQU * XIF DATA 0 DUMMY DWT DATA 0 STATUS BUSY EJECT * * * INTERRUPT LOGGING ROUTINE * * LOG LABELING BIT0-7 * INPUT CHARACTER MARKED /11 * OUTPUT CHARACTER MARKED /00 * INPUT STATUS MARKED /1F * OUTPUT STATUS MARKED /0F - NOT USED * IFF LOGG=0 LOGSST ST A2,SAVE2,A6 ORKL A2,/1F00 RF LOG10 LOGOUT ST A2,SAVE2,A6 ORKL A2,/0000 RF LOG10 LOGIN CWK A2,/FF RF(E) LOGE10 ST A2,SAVE2,A6 ORKL A2,/1100 LOG10 ST A3,SAVE3,A6 LD A3,LOGPNT,A6 STR A2,A3 ADK A3,2 SUR A3,A6 CWK A3,LOGEND RF(L) LOGEXI LDKL A3,LOGSTA LOGEXI EQU * ADR A3,A6 ST A3,LOGPNT,A6 LD A2,SAVE2,A6 LD A3,SAVE3,A6 LOGE10 RTN A5 XIF * * END