|
|
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: 65232 (0xfed0)
Notes: pts_type(SC)
Names: »DRDC25.SC«
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
└─⟦this⟧ »MODMON/DRDC25.SC«
IDENT DRDC25 9.2DK 2 80-01-03 870105040920 DK2, TBUFL 80-03-11 DK, COND.ASM., TIMPRO, TIMNAK, READ BUF. 80-03-11 REL 9.1 79-08-16 =8, ASCII-MODE FOR SALCUZ REL 9.1 79-07-19 =7, ACK IN CONVERSATIONAL MODE REL 9.1 79-07-19 =6, DCTASK BUFFER ADDRESS DESTROYED REL 9.1 79-05-23 =5, INCOMPLETE POLL SEQUENCE REL 9.1 79-05-23 =3, TRANSFER PARAMETER PRR 9.1 79-04-06 =4, ANY MESSAGE ORDER PRR 9.1 79-04-06 =2, ABORT HANDLING PRR 9.1 78-11-29 =1, MSR-INSTRUCTION PRR 9.1 78-11-14 REL 8.2 78-11-14 * * ********************************************* * * PHILIPS TERMINAL SYSTEM PTS * * DRDC25: DRIVER DATA COMMUNICATION * BSC MULTIPOINT LINE PROCEDURE * OR SIEMENS MSV1 * * * * * **************************************************** EJECT * * * ENTRY POINTS * ENTRY DC25AD ADDRESS BLOCK TERMINAL REQUESTS ENTRY IH2501 INPUT INTERRUPT ENTRY IH2502 OUTPUT INTERRUPT ENTRY DC25ON POWER ON ROUTINE ENTRY DW2500 DWT FOR DC TASK * * * EXTERNAL REFERENCES * * EXTRN TDISP DISPATCHER ENTRY EXTRN SAVE8 SAVE A1-A8 ON A15 STACK EXTRN TENDIO COMPLETE I/O EVENT EXTRN DISIOE REQUEST ERROR EXTRN SETIME SET TIMER EXTRN DWTST DWT STATUS EXTRN DWTOR DWT ORDER EXTRN DWTECB DWT ECB EXTRN INTSAV SAVE AREA LAST INTERRUPT EXTRN TEBCDIC ASCII TO EBCDIC TABLE EXTRN TASCII EBCDIC TO ASCII TABLE 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 DC:MIN MOVE DATA TO USER BUFFER EXTRN DC:MOT MOVE DATA FROM USER BUFFER EXTRN DISEND COMPLETE REQUEST AND DISPATCH EJECT * * * * * STANDARD INTERFACE PART FOR DATA COMMUNICATION * * * * * DWT CONTENTS * * DWTCHP TERMINAL ADDRESS AS GIVEN AT PARAMETER TRANSFER (BIT #08-#15) * EJECT ******************************************************* * * PARAMETERS FOR CONDITIONAL ASSEMBLY * XRVI EQU /5C STANDARD:/40, DK:/5C DK X:D EQU 0 BASE FOR RBUFL AND TBUFL DK X:X EQU 500 VALUE FOR BASE DK X:A EQU 2000 RECEIVE BUFFER LENGTH RBUFL EQU 650+X:X DK X:B EQU /60 DCTASK FILE CODE DC25FC EQU /63 X:C EQU 1 IF 1 INTERRUPT LOGGING LOGG EQU 0 * TIMPOL EQU 600 POLL TIMEOUT VALUE DK X:E EQU 1 STATUS AND RVI HANDLING IF=1 STAT EQU 1 X:F EQU 1 READ COMMAND HANDLING IF=1 RCOM EQU 1 X:G EQU 254 TRANSMIT BLOCK LENGTH TBLEN EQU 252 X:H EQU 1 CODE , 0=ASCII , 1=EBCDIC CODE EQU 1 X:I EQU 0 IF 1 SPECIFIC POLL HANDLING SPECP EQU 0 X:J EQU 1 IF = 1 LINE SPEED SET TO HIGH IF = 0 LINE SPEED IS SET TO LOW SPEED EQU 1 X:K EQU 0 IF 1 SIEMENS MSV1 PROCEDURE MSV1 EQU 0 X:L EQU 2 NUMBER OF RECEIVE BUFFERS (2-5) RBUFNR EQU 2 X:M EQU 0 IF = 1 PTS 6805 ADAPTION SALCUZ P6805 EQU 00 X:N EQU /02 IFT P6805=0 LCUIN EQU /22 DEVICE ADDRESS OF RECEIVER XIF IFT P6805=1 LCUIN EQU /0A DEVICE ADDRESS OF RECEIVER XIF X:O EQU 0 IBMCHR EQU 0 IF 1 IBM CHARACTER HANDLING X:P EQU 0 IF 1 MESSAGE PASSING TO DC TASK MESPAS EQU 0 X:Q EQU 0 IBM-3270 EMULATION PACKAGE, IF NOT = 0 EM3270 EQU 1 X:R EQU 1000 DK2 BINTRM EQU 0 IF 1 BINARY TRANSMISSION TSTREQ EQU 0 IF 1 TEST REQUEST HANDLING DMRK EQU 1 SPECIAL CONDITION FOR DENMARK NOWACK EQU 0 WHEN WORKING WITH A MAIN-FRAME THAT DOESN'T ACCEPT WACK RESPONSE TO A SELECT SEQUENCE, NOWACK SHOULD BE SET TO "ONE". ONLY WORKING IF STAT IS SET TO "ONE". IFT P6805=0 SALCUZ LCUUT EQU LCUIN+/10 DEVICE ADDRESS OF TRANSMITTER SALCUZ XIF SALCUZ IFT P6805=1 LCUUT EQU LCUIN+/01 DEVICE ADDRESS OF TRANSMITTER SALCUZ XIF SALCUZ * EJECT * * ***************************************** * * CONDITIONAL ASSEMBLY * ***************************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * DB IFT MMUPAG=0 DK2 TBUFL EQU 0 DK2 XIF DK2 * IFT MMUPAG=1 DK2 TBUFL EQU 650+X:X MMU BUFFER LENGTH DK XIF DK2 DE * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * DEVIND EQU -2 DEVICE INDEX DATA COMMUNICATION BUFLEN EQU TBUFL+TBUFL MMU BUFFER SIZE * EJECT * * DWT DISPLACEMENTS * DWTDRD EQU /10 START OF DRIVER DEFINED PART * IFT MMUPAG=0 START EQU DWTDRD XIF * IFT MMUPAG=1 START EQU DWTDRD+4 XIF * DWTTP EQU START+/00 TIMER POINTER ORDER PROCESS DWTWQ EQU START+/02 WRITE/GET BUFFER QUEUE DWTSQ EQU START+/04 STATUS QUEUE DWTRQ EQU START+/06 RECEIVE QUEUE DWTBUF EQU START+/08 DEVICE BUFFER ADDRESS DWTCUR EQU START+/0A CURSOR ADDRESS DWTTIM EQU START+/0C REQUEST TIMER VALUE * EJECT * * REQUEST HANDLING * * * * A7=ORDER * * /02: READ * /06: WRITE * /37: TRANSFER PARAMETERS * /38: SET STATUS * /39: SET REQUEST TIMEOUT VALUE * * * CONSTANTS AND WORK AREAS * * DCONOF DATA 0 ON- / OFFLINESWITCH DCSTOL DATA 0 OLD DC EQUIPMENT STATUS DCSTCU DATA 0 CURRENT STATUS DCWRQ DATA 0 WRITE REQUEST QUEUE DCTPGP DATA 0 TIMER POINTER GENERAL POLL EJECT * * DC TASK ADDRESS BLOCK * DATA 0 INDICATES NO MMU BUFFER DATA DEVIND DEVICE INDEX DC25DC DATA DCACTD ACTIVATION ADDRESS DATA ABORT ABORT ROUTINE ADDRESS DATA DCRBUF REC. BUFFER ANCHOR * * DRIVER ADDRESS BLOCK * DATA BUFLEN MMU BUFFER SIZE DATA DEVIND DEVICE INDEX DC25AD DATA DCACT ACTIVATION ADDRESS DATA ABORT ABORT ROUTINE ABORT ROUTINE ADDRESS DATA DCRBUF REC. BUFFER ANCHOR * RES 15 SUBROUTINE STACK FOR INTERRUPTS STB RES 1 RES 1 AND FOR TRANSFER PARAM STB2 RES 1 IFT SPEED=1 LSPEED EQU /0200 XIF IFT SPEED=0 LSPEED EQU 0 XIF EJECT * * * ACTIVATION FROM TERMINAL TASKS * DCACT EQU * LDK A1,0 PRESET RETURN CODE IFT EM3270=1 =4 LDR A7,A7 =4 RF(Z) ANYMSG ANY MESSAGE ORDER =4 XIF SUK A7,/02 RF(Z) DCRD READ SPECIFIC SUK A7,/06-/02 RF(Z) DCWR SUK A7,/37-/06 RF(Z) DCTP TRANSFER PARAMETERS IFF STAT=0 SUK A7,/38-/37 RF(Z) DCSS SET STATUS SUK A7,/39-/38 ABL(Z) REQTIM SET REQUEST TIMER XIF IFT STAT=0 SUK A7,/39-/37 RF(Z) REQTIM SET REQUEST TIMER XIF RF DCA100 EJECT * * * ACTIVATION FROM DCTASK * * DCACTD EQU * SUR A1,A1 PRESET RETURN CODE =4 IFT EM3270=1 =4 LDR A7,A7 =4 RF(Z) ANYMSG ANY MESSAGE ORDER =4 XIF SUK A7,/02 RF(E) DCRDDC READ SUK A7,/37-/02 RF(E) DCTP TRANSFER PARAMETERS DCA100 EQU * REQUEST ERROR ABL DISIOE INVALID ORDER * * * READ FROM DCTASK * * * REQUEST FROM DC-TASK * COMPLETE WHEN: * STATUS CHANGE ON DC EQUIPMENT * SPONTANOUS MESSAGE RECEPTION * DCRDDC EQU * CF A15,CKMESS CHECK IF MESSAGE RECEIVED DCRTN EQU * ABL TDISP GO TO DISPATCHER IFT EM3270=1 =4 EJECT ***************************************** * * ANY MESSAGE ORDER * ***************************** ANYMSG LD A4,DWTRQ,A6 ANY QUEUED MESSAGE ?? =4 RF(Z) DCRD10 NO!! =4 RF ENDIO YES!! COMPLETE REQUEST =4 XIF EJECT * * * TRANSFER PARAMETERS * * * REQUEST FROM DC-TASK: TRANSFER TERMINAL COMPUTER ADDRESS * FROM TERMINALS: TRANSFER TERMINAL ADDRESSES * * IFF CODE=1 DCTP LD A2,ECBCW,A8 GET PARAMETER XIF IFT CODE=1 DCTP LC A2,ECBCW,A8 GET TCS IF ANY ANK A2,/FF RF(Z) DCTP10 LC A2,TASCII,A2 TRANSLATE TO ASCII SLL A2,8 DCTP10 EQU * LC A3,ECBCW+1,A8 GET TCP OR DV ANK A3,/FF LC A2,TASCII,A3 TRANSLATE TO ASCII XIF STR A2,A6 SAVE IN FIRST WORD OF DWT IFT RCOM=1 LD A3,ECBBA,A8 DEVICE BUFFER ADDRESS ST A3,DWTBUF,A6 LD A3,ECBRL,A8 CURSOR ADDRESS WORD ST A3,DWTCUR,A6 XIF CWK A6,DW2500 DCTASK DWT ??? RF(E) DCTP30 YES!!! SHOULD NOT BE IN DC:TAB LD A1,DC:IN GET DC:TAB INPUT POINTER CWK A1,DC:END TABLE ALREADY FULL ???? ABL(E) DISIOE YES!! REQUEST ERROR EJECT DCTP20 EQU * LD A4,DCTAB DC:TAB ADDRESS =3 AD* A4,DCTAB LAST TABLE POS. =3 DCTP22 SUK A4,2 ADDR. TO NEXT ENTRY =3 CW A4,DCTAB ALL ENTRIES CHECKED?? =3 RF(E) DCTP25 YES.DWT NOT IN TABLE =3 CWR* A6,A4 IN TABLE ?? =3 RF(E) DCTP30 YES!! =3 RB DCTP22 CHECK NEXT ENTRY =3 DCTP25 EQU * =3 STR A6,A1 INSERT DWT IN DC:TAB LDK A1,2 ADS A1,DC:IN UPDATE DC:TAB IN POINTER ADS A1,DC:TAB INCREMENT DC:TAB LENGTH IFT STAT=1 LDK A1,4 DEVICE END ORS A1,DWTST,A6 CF A15,INSSQ INSERT IN STATUS QUEUE XIF DCTP30 EQU * SUR A1,A1 RETURN CODE ::= 0 ENDIO EQU * CF A15,TENDIO COMPLETE REQUEST RB DCRTN EJECT * * * WRITE * * * COMPLETE WHEN: * SUCCESFUL TRANSMISSION * TIME OUT * * DCWR EQU * IFT MMUPAG=1 LD A1,ECBRL,A8 REQUESTED LENGTH CWK A1,BUFLEN ILLEGAL LENGTH? RF(G) IL:LEN YES!! XIF CF A15,TIMEWR SET TIMER CF A15,INSWQ QUEUE REQUEST RB DCRTN * * * * READ * * * COMPLETE WHEN: * MESSAGE RECEIVED * TIME OUT * * DCRD EQU * LD A8,DWTECB,A6 GET ECB LD A4,DWTRQ,A6 AND RECEIVE MESSAGE QUEUE RF(Z) DCRD10 NOTHING IN QUEUE LDR* A2,A4 TAKE THE FIRST IN QUEUE ST A2,DWTRQ,A6 ADK A4,6 LD A3,-4,A4 EFFECTIVE LENGTH ST A3,ECBEL,A8 LDK A1,0 RESET RETURN CODE CF A15,DC:MIN MOV DATA TO USER BUFFER RB DCRTN DCRD10 CF A15,TIMERE START TIMER RB DCRTN EJECT * * * SET STATUS * * IFF STAT=0 DCSS EQU * LD A1,ECBCW,A8 GET STATUS INFORMATION ANK A1,3 MASK DB,IR RF(Z) DCSS20 DEVICE END DCSS10 EQU * ST A1,DWTST,A6 RB DCTP30 COMPLETE REQUEST DCSS20 EQU * LD A1,DWTST,A6 ANK A1,9 RB(Z) DCSS10 WACK HAS NOT BEEN SENT DCSS30 EQU * CF A15,INSSQ INSERT DWT IN STATUS QUEUE LDK A1,4 SET DE RB DCSS10 XIF EJECT * * SET REQUEST TIMEOUT VALUE * * REQTIM EQU * LD A2,ECBCW,A8 TIMEOUT VALUE ST A2,DWTTIM,A6 SAVE IT IN DWT RB DCTP30 TENDIO & DISPATCH * * ILLEGAL APPLICATION BUFFER SIZE * IL:LEN LDKL A1,/8008 REQUEST ERROR + ILLEGAL LENGTH ABL DISEND COMPLETE REQUEST EJECT * * * * TIMER HANDLING PART * * * * READ TIMER=TIMERR * TIMERE EQU * LDR A1,A6 LD A2,DWTTIM,A6 GET REQUEST TIMEOUT VALUE RF(Z) TIME10 NO TIMING ST A2,TIMERR CF A15,SETIME DATA TOUTRE TIMERR DATA 0 ST A4,DWTTP,A6 STORE TIMER POINTER TIME10 EQU * RF GBUF10 RETURN * * TIMEOUT READ TIMER * TOUTRE EQU * LDR A6,A1 FETCH DWT CM DWTTP,A6 TOUTR1 EQU * LDK A1,/40 INDICATE TIME OUT TOUTR2 RB ENDIO COMPLETE REQUEST * * WRITE TIMER=TIMWR * TIMEWR LDR A1,A6 LD A2,DWTTIM,A6 GET REQUEST TIMEOUT VALUE RB(Z) TIME10 NO TIMING ST A2,TIMWR CF A15,SETIME DATA TOUTWR TIMWR DATA 0 ST A4,DWTTP,A6 RB TIME10 EJECT * * TIMEOUT WRITE TIMER * TOUTWR EQU * LDR A6,A1 FETCH DWT CM DWTTP,A6 CF A15,REMOVW REMOVE FROM WRITE QUEUE * * THIS INSTRUCTION DOES NOT BELONG * TO THE STANDARD INTERFACE LD A2,FDWTUT CWR A2,A6 RB(NE) TOUTR1 THIS DWT IS NOT WRITING CM XACK INDICATE 'ACK NOT EXPECTED' CM FDWTUT * * RB TOUTR1 EJECT * * * STOP REQUEST TIMING * * REMAINING TIME IS RETURNED IN A2 * * CTIME EQU * LD A2,DWTTP,A6 GET TIMER POINTER RF(Z) CTIM10 NOT RUNNING LDR* A2,A2 NGR A2,A2 GET REMAINING TIME CM* DWTTP,A6 STOP TIMER CM DWTTP,A6 CTIM10 EQU * RF GBUF10 EJECT * * GET RECEIVE BUFFER * * CALLING SEQUENCE: CF A15,GRBUF * A4=0 IF NO BUFFER IS FREE * ELSE A4 CONTAINS BUFFER ADDRESS * A2 AND A3 ARE DESTROYED * * GRBUF LDKL A2,DCRBUF RECEIVE BUFFERS GBUF INH LDR* A4,A2 RF(Z) GBUF10 NO BUFFER FREE LDR* A3,A4 REMOVE BUFFER FROM FREE CHAIN STR A3,A2 GBUF10 ADKL A15,4 ADJUST STACK POINTER ABR* A15 RETURN TO CALLER EJECT * * * INSERT DWT IN WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * INSWQ LDKL A2,DCWRQ GET QUEUE ANCHOR INSWQ1 LDK A4,DWTWQ INSWQ2 LDR* A3,A2 RF(Z) INSWQ3 END OF QUEUE FOUND LDR A2,A3 RB INSWQ2 INSWQ3 ADR A4,A6 STR A4,A2 INSERT IN QUEUE CMR A4 INDICATE END OF QUEUE RB GBUF10 RETURN * * * REMOVE DWT FROM WRITE REQUEST QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * REMOVW LDKL A2,DCWRQ GET QUEUE ANCHOR REM05 LDK A4,DWTWQ GET DWT-LINK TO BE REMOVED REM06 EQU * ADR A4,A6 REM10 LDR* A3,A2 RB(Z) GBUF10 NOT ON QUEUE: RETURN CWR A3,A4 RF(E) REM15 LDR A2,A3 GET NEXT RB REM10 REM15 LDR* A3,A4 REMOVE STR A3,A2 RB GBUF10 RETURN EJECT * * * INSERT DWT IN STATUS QUEUE * IFF STAT=0 * A2,A3,A4 DESTROYED * A6=DWT * INSSQ LDKL A2,DCSTQ GET QUEUE ANCHOR LDK A4,DWTSQ RB INSWQ2 * * * REMOVE DWT FROM STATUS QUEUE * * A2,A3,A4 DESTROYED * A6=DWT * REMOVS LDKL A2,DCSTQ GET QUEUE ANCHOR LDK A4,DWTSQ RB REM06 XIF EJECT * * * QUEUE ALLOCATED RECEIVE BUFFER * * A4=BUFFER ADDR * A2,A3 DESTROYED * QRBUF EQU * IFT MESPAS=1 LDKL A2,DW2500 QUEUE ON DC-TASK DWT XIF IFT MESPAS=0 LDR A2,A6 QUEUE ON TERMINAL DWT XIF ADK A2,DWTRQ BEGINNING OF RECEIVE QUEUE QR100 EQU * LDR* A3,A2 RF(Z) QR200 END OF QUEUE FOUND LDR A2,A3 RB QR100 QR200 STR A4,A2 INSERT INTO QUEUE CMR A4 INDICATE END OF QUEUE RTN A5 EJECT * * * CHECK IF UNEXPECTED MESSAGE OR STATUS CHANGE * * REGISTERS A1,A2,A3,A4,A6 AND A8 ARE DESTROYED * CKMESS LDKL A6,DW2500 LD A1,DWTST,A6 RF(N) CKM110 NO REQUEST LDK A1,2 READ REQUEST ? CW A1,DWTOR,A6 RF(NE) CKM110 NO LD A8,DWTECB,A6 ECB ADDR TO A8 LD A3,DWTRQ,A6 A3=ADDR TO READ QUEUE RF(Z) CKM200 NO READ IN QUEUE LDR* A2,A3 A2=ADDR TO NEXT READ BUFFER ST A2,DWTRQ,A6 STORE THIS ADDR INTO QUEUE ADK A3,6 MOVE POINTER TO TEXT DONT DESTROY BUFFER ADDRESS =6 LD A4,-4,A3 ST A4,ECBEL,A8 STORE NUMBERS OF CHARACTERS LD A4,-2,A3 ST A4,ECBCW,A8 STORE LINE DEVICE ADDRESS LDK A1,0 RESET RETURN CODE LDR A4,A3 RECEIVE BUFFER ADDRESS CF A15,DC:MIN MOVE DATA TO USER BUFFER CKM110 ADKL A15,4 ADJUST STACK POINTER ABR* A15 RETURN CKM200 LD A1,DCSTCU NO MESSAGE RECEIVED,CHECK STATUS OR A1,DCONOF TAKE CARE OF POLL TIME OUT CW A1,DCSTOL ST A1,DCSTOL RB(E) CKM110 NO CHANGE OF STATUS ORKL A1,/2000 INDICATE STATUS CHANGE CF A15,TENDIO COMPLETE READ GENERAL REQUEST RB CKM110 EJECT ************************************************************ * * ABORT ROUTINE * ************************ ABORT LD A1,DWTTP,A6 TIMER POINTER RF(Z) AB:10 NO TIMER RUNNING CM* DWTTP,A6 KILL TIMER CM DWTTP,A6 AB:10 LD A1,DWTOR,A6 ORDER CODE SUK A1,2 RF(Z) AB:RTN READ REQUEST. NO ACTION SUK A1,4 RF(NZ) AB:RTN NO ACTION IF NOT READ/WRITE CF A15,REMOVW REMOVE DWT FROM WRITE QUEUE LD A2,FDWTUT WRITING DWT ADDRESS CWR A2,A6 RF(NE) AB:RTN NOT THIS DWT CM XACK RESET ACK EXPECTED CM FDWTUT RESET WRITING DWT AB:RTN EQU * IFT CPU852=1 ADKL A15,4 ABR* A15 RETURN IN INHIBIT MODE XIF IFF CPU852=1 RTN A15 XIF EJECT EJECT * * * STORE REGISTER A3-A8 * CALLING SEQUENSE: CF A15,STREG * * RESTORE * CALLING SEQUENCE: CF A15,LDREG * * STREG ST A3,LCA3 ST A4,LCA4 ST A5,LCA5 ST A6,LCA6 ST A7,LCA7 ST A8,LCA8 RF RTNA15 RETURN EJECT LDREG LDKL A3,0 LCA3 EQU *-2 LDKL A4,0 LCA4 EQU *-2 LDKL A5,0 LCA5 EQU *-2 LDKL A6,0 LCA6 EQU *-2 LDKL A7,0 LCA7 EQU *-2 LDKL A8,0 LCA8 EQU *-2 RTNA15 EQU * ADKL A15,4 ABR* A15 EJECT * * * TIMER VALUES * * TIMPRO EQU 90 PROCEDURE TIMER 9 SEC DK TIMNAK EQU 3 DELAY FOR NAK DK * * * CHARACTER EQUATES * SF EQU X'1D' START FIELD CHARACTER SYN EQU /16 STX EQU /02 ETX EQU /03 ETB EQU /17 ITB EQU /1F SOH EQU /01 ENQ EQU /05 DLE EQU /10 EOT EQU /04 NAK EQU /15 ESC EQU /1B SBA EQU /11 GP EQU /22 RDBCOM EQU /32 RDMCOM EQU /36 IFT CODE=0 PAR EQU /80 RVI EQU /3C ACK0 EQU /30 ACK1 EQU /31 DC1 EQU /11 IFT MSV1=0 WACK EQU /3B XIF IFT CODE=0 IFT MSV1=1 WACK EQU /BF =WABT - SIEMENS MSV1 PROCEDURE XIF IFT CODE=1 PAR EQU /00 WACK EQU /2C RVI EQU XRVI DK ACK0 EQU /18 ACK1 EQU /2F SYNEBC EQU /32 XIF EJECT * * * PROCEDURE WORK AREAS * * FDWTIN RES 1 CURRENT DWT FOR RECEPTION FDWTUT RES 1 CURRENT DWT FOR TRANSMISSION XACK DATA 0 ACK EXPECTED XSEL DATA 0 SELECTED XETX DATA 0 ETX SENT XSTA DATA 0 STATUS SENT / MESSAGE INPUT RESULT XRB DATA 0 READ BUFFER SWITCH CACK DATA 0 ACK COUNTER SYNSW DATA 0 0=SKIP SYNS, 1=DON'T SKIP * FECB RES 1 WRITING ECB FECBBA RES 1 WRITING BUFFER ADDRESS FECBRL RES 1 WRITING BUFFER LENGTH FBAX DATA 0 BUFFER INDEX FBLST DATA 0 START OF LAST TRANSMITTED BLOCK DCSTQ DATA 0 STATUS QUEUE ANCHOR DCTPP DATA 0 POINTER FOR PROCEDURE TIMING RESEND DATA 0 CONTROL SEQUENCE SAVE AREA CRDBUF DATA 0 READ BUFFER COUNTER DK * * * 3270 SENSE/STATUS INFORMATION * * IFF STAT=0 SSTAB EQU * S/S 0 : NO STATUS,DB,DE,DB+DE * * DATA /4248 DATA /4242 * NOIR EQU /20 S/S 1 : NO INTERVENTION REQUIRED IR EQU /26 S/S 1 : INTERVENTION REQUIRED XIF EJECT * * * BASIC RECEIVE MODE * * ENTERED EVERY TIME A MESSAGE * IS EXPECTED FROM THE MASTER SIDE * * IFT P6805=1 SALCUZ BRMHLT CF A5,HALTIN HALT RECEIVER SALCUZ XIF SALCUZ BRM EQU * LDKL A5,STB LOAD STACKBASE IFT P6805=0 SALCUZ CF A5,HALTIN HALT RECEIVER AND UPDATE STATUS XIF SALCUZ IFT P6805=1 SALCUZ CF A15,CKMESS CHECK IF STATUS CHANGE SALCUZ XIF SALCUZ BRM010 EQU * IFT CODE+P6805=0 SALCUZ LDKL A2,/100+LSPEED+SYN SPECIFY SYN PATTERN XIF SALCUZ IFT P6805=0 SALCUZ IFT CODE=1 LDKL A2,/100+LSPEED+SYNEBC SPECIFY SYN PATTERN XIF SALCUZ IFT P6805=0 SALCUZ CIO A2,1,LCUIN START RECEIVER XIF SALCUZ IFT P6805=1 SALCUZ IFF CODE=1 SALCUZ LDK A2,/0C SALCUZ CIO A2,1,LCUIN START RECEIVER SALCUZ LDK A2,SYN SALCUZ OTR A2,1,LCUIN SPECIFY SYNC CHARACTER SALCUZ RB(NA) BRMHLT SALCUZ XIF SALCUZ IFT CODE+P6805=2 SALCUZ LDK A2,0 SALCUZ CIO A2,1,LCUIN START RECEIVER SALCUZ LDK A2,SYNEBC SALCUZ OTR A2,1,LCUIN SPECIFY SYNC CHARACTER SALCUZ RB(NA) BRMHLT SALCUZ XIF SALCUZ BRM100 EQU * CF A5,READP READ ONE CHARACTER RF(NZ) BRM150 PARITY ERROR LDR A1,A2 SUK A1,STX RF(Z) BRM300 STX RECEIVED SUK A1,EOT-STX RF(Z) BRM200 EOT RECEIVED SUK A1,ENQ-EOT ABL(Z) BRM400 ENQ RECEIVED SUK A1,DLE-ENQ ABL(Z) BRM600 DLE RECEIVED SUK A1,NAK-DLE ABL(Z) BRM500 NAK RECEIVED IFT MSV1=0 LDR A8,A2 CF A5,READP READ ONE CHARACTER RF(NZ) BRM150 PARITY ERROR CWR A2,A8 RF(NE) BRM150 INVALID ADDRESSING XIF LDK A3,0 CC A2,DW2500+1 RF(E) BRM110 POLLING LDK A3,2 CC A2,DW2500 RF(NE) BRM150 NOT THIS TCU BRM110 EQU * CF A5,READP READ 1:ST STA RF(NZ) BRM150 PARITY ERROR LDR A8,A2 IFT MSV1=0 CF A5,READP READ 2:ND STA RF(NZ) BRM150 PARITY ERROR CWR A2,A8 RF(NE) BRM150 INVALID ADDRESS SEQUENCE XIF CF A5,READ READ ONE CHARACTER IFT P6805=0 SALCUZ SUK A2,ENQ+PAR XIF SALCUZ IFT P6805=1 SALCUZ SUK A2,ENQ SALCUZ XIF SALCUZ RF(NZ) BRM150 NOT ENQ IFT P6805=0 SALCUZ CF A5,READ READ LAST CHARACTER * TRAILING PAD CAN BE CHECKED CIO A1,0,LCUIN HALT INPUT SST A1,LCUIN XIF SALCUZ IFT P6805=1 SALCUZ CF A5,HALTIN HALT INPUT SALCUZ RB(NZ) BRM010 PARITY ERROR SALCUZ SALCUZ XIF SALCUZ LDK A1,1 ST A1,CACK LOAD ACK COUNTER LDR A2,A8 SUK A3,2 RF(Z) BRM120 SELECTING CWK A8,GP ABL(E) GPOLL GENERAL POLL IFT MSV1=1 CF A5,FINTEP CHECK IF STA PRESENT (POLL ADDRESS) XIF IFT MSV1=0 CF A5,FINTER CHECK IF STA PRESENT XIF LDR A6,A3 LOAD DWT TO A6 ABL(NZ) SPOLL SPECIFIC POLL RB BRM INVALID POLL BRM120 EQU * CF A5,FINTER CHECK IF STA PRESENT LDR A6,A3 LOAD DWT TO A6 RF(NZ) BRM130 STA FOUND IFT MSV1=0 LDKL A6,DW2500 SELECT TO DCTASK BRM130 EQU * ABL SELECT XIF IFT MSV1=1 ABL BRM INVALID ADDRESS XIF * * WAIT FOR MARK HOLD TO RESYNCHRONIZE * BRM150 EQU * ANK A2,/7F SUK A2,/7F RB(Z) BRM RESYNCHRONIZE CF A5,READ READ ANOTHER CHARACTER RB BRM150 EJECT * * * EOT HAS BEEN RECEIVED * * BRM200 EQU * CF A5,HPTIM STOP PROCEDURE TIMER IFT RCOM=1 CM XRB RESET READ BUFFER XIF LD A1,XACK RF(Z) BRM220 ACK IS NOT EXPECTED LD A6,FDWTUT GET WRITING DWT RF(Z) BRM210 NO ONE WRITING LDK A1,2 SET RC=2 CF A5,CWRITE COMPLETE WRITE REQUEST BRM210 EQU * CM XACK RESET 'ACK EXPECTED' BRM220 EQU * CM XSEL RESET 'SELECTED' RB BRM EJECT * * * STX HAS BEEN RECEIVED * * BRM300 EQU * CF A5,HPTIM LD A1,XSEL RF(Z) BRM315 NOT SELECTED LD A1,DCRBUF *********************CHAINED COMMAND RB(Z) BRM150 NO BUFFER AVAILABLE ********************* BRM305 EQU * CF A5,RDMESS READ MESSAGE SUK A7,1 RF(NZ) BRM320 MESSAGE OK BRM310 EQU * CM XSTA INDICATE 'INVALID MESSAGE' BRM312 EQU * CF A5,TRNAK SEND NAK ABL BRM BRM315 EQU * IFT RCOM=1 LD A1,XACK RF(Z) BRM316 ACK IS NOT EXPECTED LD A1,DCRBUF RF(Z) BRM316 NO BUFFER AVAILABLE LD A6,FDWTUT GET WRITING DWT ABL(Z) BRM150 NO ONE WRITING. RESYNCHRONIZE LDR* A2,A6 GET STA XIF IFT RCOM=1 CF A5,PRREC PREPARE FOR TEXT RECEPTION LDK A1,0 SET RC=0 CF A5,CWRITE COMPLETE WRITE REQUEST CM CACK PRESET ACK-1 =7 RB BRM305 READ THE MESSAGE XIF BRM316 CF A5,READ READ ONE CHARACTER IFF P6805=1 =8 SUK A2,ENQ+PAR XIF =8 IFT P6805=1 =8 SUK A2,ENQ =8 XIF =8 RB(Z) BRM312 FORWARD ABORT SEQUENCE RB BRM220 BRM320 EQU * IM XSTA INDICATE MESSAGE OK LD A4,DCRBUF GET BUFFER ADDRESS ADK A4,6 CW A4,FBLST RF(NE) BRM325 NOT FIRST BLOCK IFF RCOM=0 LDK A1,ESC CCR A1,A4 RB(NE) BRM310 ESC NOT FOUND ADK A4,1 LCR A1,A4 GET COMMAND CODE SUK A4,1 SUK A1,RDBCOM RF(Z) RDBUF READ MODIFIED RECEIVED SUK A1,RDMCOM-RDBCOM RF(Z) RDMOD READ BUFFER RECEIVED XIF BRM325 EQU * SUK A7,1 RF(Z) BRM340 MESSAGE ENDED BY ETB CM FBAX CF A15,GRBUF ALLOCATE RECEIVE BUFFER ADK A4,6 LD A6,FDWTIN GET INPUT DWT * * PREPARE FOR CHAINED COMMAND * IFT RCOM=1 LDR* A2,A6 LC A2,TEBCDIC,A2 LD A1,DCRBUF RF(Z) BRM326 ST A2,+4,A1 XIF BRM326 EQU * CWK A6,DW2500 RF(E) BRM330 MESSAGE IS MENT FOR DCTASK LD A2,DWTST,A6 GET STATUS RF(N) BRM330 NO REQUEST IFT EM3270=1 =4 LD A2,DWTOR,A6 ORDER =4 RF(Z) BRM327 ANY MESSAGE ORDER =4 XIF =4 LDK A2,2 CW A2,DWTOR,A6 RF(NE) BRM330 NO READ REQUEST BRM327 EQU * LDK A1,0 SET RC=0 LD A8,DWTECB,A6 GET ECB ADDRESS LD A3,-4,A4 GET LENGTH ST A3,ECBEL,A8 STORE EFFECTIVE LENGTH CF A15,CTIME STOP REQUEST TIMING ST A2,ECBCW,A8 STORE REMAINING TIME EJECT * * * CHECK IF START PRINTER BIT SET IN CCC/WCC * * IFT STAT=1 LC A2,+2,A4 GET WCC/CCC ANK A2,/FF LC A2,TEBCDI,A2 TRANSLATE ANK A2,8 RF(Z) BRM328 LD A2,DWTST,A6 GET STATUS ORK A2,/A ST A2,DWTST,A6 BRM328 EQU * XIF IFT EM3270=1 =4 LD A2,DWTOR,A6 ORDER =4 RF(NZ) BRM329 NOT ANY MESSAGE ORDER =4 SUK A4,6 ADJUST BUFFER ADDRESS =4 CF A5,QRBUF QUEUE MESSAGE ON DWT =4 RF BRM32A =4 XIF =4 BRM329 EQU * =4 LDK A1,0 RESET RETURN CODE CF A15,DC:MIN MOVE TO USER BUFFER RF BRM345 BRM32A EQU * =4 CF A15,TENDIO COMPLETE REQUEST RF BRM345 EJECT BRM330 EQU * IFT EM3270=1 =4 LD A1,DWTST,A6 STATUS =4 RF(N) BRM335 NO REQUEST =4 LD A1,DWTOR,A6 ORDER =4 RF(NZ) BRM335 NOT ANY MESSAGE ORDER =4 CF A15,TENDIO COMPLETE REQUEST =4 BRM335 EQU * =4 XIF =4 SUK A4,6 GET BUFFER BASE CF A5,QRBUF QUEUE BUFFER FOR DCTASK CF A15,CKMESS COMPLETE DCTASK READ IF ANY BRM340 EQU * CF A5,TRACK SEND ACK 0/1 ABL BRM BRM345 EQU * IFT STAT=1 LD A1,DWTST,A6 ANK A1,8 RB(Z) BRM340 ACK SHOULD BE SENT CF A5,TRWACK SEND WACK RF BRM410 XIF IFF STAT=1 RB BRM340 XIF EJECT * * * READ MODIFIED OR READ BUFFER RECEIVED * * IFF RCOM=0 RDBUF EQU * READ BUFFER COMMAND RDMOD EQU * CM XSEL RESET SELECT EXPECTED LD A6,FDWTIN DWT-ADDRESS FOR ADDRESSED TERMINAL LD A4,DWTBUF,A6 BUFFER ADDRESS SUK A4,2 SDJUST BUFFER ADDRESS LDKL A3,1922 REQUESTED LENGTH IM XRB SET READ BUFFER SWITCH CM FDWTUT LDK A1,1 XRS A1,CACK INCREMENT ACK COUNTER DB LD A1,CRDBUF INCREMENT READ BUFFER DK ADK A1,1 COUNTER DK ST A1,CRDBUF DK DE ABL POL127 XIF * * * ENQ HAS BEEN RECEIVED * * BRM400 EQU * CF A5,HPTIM STOP PROCEDURE TIMER LD A1,XACK RF(NZ) BRM510 RETRANSMISSION OF MESSAGE OR A1,XSEL RF(Z) BRM410 IN CONTROL STATE CF A5,TRREP REPEAT LAST CONTROL SEQUENCE BRM410 EQU * ABL BRM EJECT * * * NAK HAS BEEN RECEIVED * * BRM500 EQU * CF A5,HPTIM STOP PROCEDURE TIMER LD A1,XACK RF(NZ) BRM510 ACK EXPECTED OR A1,XSEL RB(Z) BRM410 IN CONTROL STATE RF BRM636 BRM510 EQU * DB LDK A1,0 CIO A1,0,LCUIN DK SST A1,LCUIN DK CF A15,STREG DK CF A15,SETIME DK DATA BRM520,TIMNAK DK ABL TDISP DK BRM520 EQU * DK CF A15,LDREG DK DE LD A6,FDWTUT GET WRITING DWT IFF STAT=0 LD A1,XSTA ABL(NZ) POL050 STATUS HAS BEEN TRANSMITTED XIF LD A1,FBLST GET START POINT FOR LAST BLOCK SU A1,FECBBA COMPUTE BUFFER INDEX ST A1,FBAX ABL POL130 * * * DLE HAS BEEN RECEIVED * * BRM600 EQU * CF A5,HPTIM STOP PROCEDURE TIMER LD A1,XACK RB(Z) BRM410 ACK NOT EXPECTED CF A5,READ READ SECOND CHARACTER IFF P6805=1 =8 CWK A2,ACK0+PAR XIF =8 IFT P6805=1 =8 CWK A2,ACK0 =8 XIF =8 RF(NE) BRM620 * * ACK , 0 RECEIVED * LD A1,CACK GET ACKCOUNTER RF(Z) BRM630 ACK,0 EXPECTED BRM610 EQU * CF A5,TRENQ SEND ENQ CF A5,SPTIM START PROCEDURE TIMER RB BRM410 BRM620 EQU * CWK A2,ACK1 RF(NE) BRM650 * * ACK , 1 RECEIVED * LD A1,CACK GET ACK COUNTER RB(Z) BRM610 ACK,1 NOT EXPECTED BRM630 EQU * LD A1,XETX RF(Z) BRM640 ETX NOT SENT EJECT * * ACK HAS BEEN RECEIVED TO AN ETX BLOCK * LDK A1,0 SET RC=0 BRM635 EQU * IFF STAT=0 LD A2,XSTA RF(NZ) BRM670 STATUS HAS BEEN TRANSMITTED XIF CF A5,CWRITE COMPLETE WRITE REQUEST BRM636 EQU * CF A5,TREOT SEND EOT IFT RCOM=1 CM XRB RESET READ BUFFER XIF RB BRM410 BRM640 EQU * LDK A1,1 XRS A1,CACK INCREMENT ACK COUNTER ABL POL130 BRM650 EQU * IFF P6805=1 =8 CWK A2,RVI+PAR XIF =8 IFT P6805=1 =8 CWK A2,RVI =8 XIF =8 RB(NE) BRM610 INVALID DLE SEQUENCE CM XACK RESET 'EXPECTING ACK' LD A1,XETX RF(NZ) BRM660 ETX HAS BEEN SENT LDK A1,2 SET RC=2 RB BRM635 BRM660 EQU * LDK A1,0 SET RC=0 RB BRM635 IFF STAT=0 EJECT * * * STATUS HAS BEEN TRANSMITTED * * BRM670 EQU * LD A6,FDWTUT GET DWT ADDRESS CF A15,REMOVS REMOVE FROM STATUS QUEUE CM XSTA CLEAR 'STATUS SENT' CM XACK CLEAR 'ACK EXPECTED' LD A1,DWTST,A6 GET STATUS ANK A1,4 RB(Z) BRM636 NOT DE LDKL A1,/8000 ANS A1,DWTST,A6 CLEAR STATUS RB BRM636 XIF EJECT * * * SELECT HAS BEEN RECEIVED * * SELECT EQU * LD A1,XACK =5 RF(NZ) POL010 ERROR. ACK EXPECTED =5 IFF STAT=0 LD A1,DWTST,A6 GET STATUS LDR A3,A1 ANK A1,1 RF(Z) SEL110 NO PENDING STATUS CF A5,TRRVI SEND RVI XIF IFF STAT=1 RF SEL110 XIF SEL100 EQU * ABL BRM SEL110 EQU * IFT STAT+NOWACK=1 ANK A3,8 RF(NZ) SEL115 BUSY XIF IFT STAT+NOWACK=2 ANK A3,8 RF(Z) SEL111 DEVICE NOT BUSY CF A5,TRWACK TRANSMIT WACK ABL BRM SEL111 EQU * XIF LD A1,DCRBUF RF(NZ) SEL120 BUFFER AVAILABLE SEL115 EQU * IFF STAT+NOWACK=2 CF A5,TRWACK SEND WACK XIF RB SEL100 SEL120 EQU * CF A5,PRREC PREPARE FOR TEXT RECEPTION CF A5,TRACK SEND ACK,0 RB SEL100 EJECT * * * PREPARE FOR TEXT RECEPTION * * PRREC EQU * IM XSEL SET 'SELECTED' CM FBAX RESET BUFFER INDEX IFT CODE=1 LC A2,TEBCDIC,A2 TRANSLATE STA TO EBCDIC XIF ST A2,+4,A1 SAVE STA IN BUFFER IM XSTA ST A6,FDWTIN STORE INPUT DWT RTN A5 EJECT * * * GENERAL POLL HAS BEEN RECEIVED * * GPOLL EQU * LD A1,XACK =5 RF(Z) POL020 ACK NOT EXPECTED =5 POL010 CF A5,TRENQ SEND ENQ =5 CF A5,SPTIM START PROCEDURE TIMER =5 ABL BRM WAIT FOR RESPONSE =5 POL020 EQU * =5 CF A5,CPTIM CHECK POLL TIMER IFF STAT=0 LD A6,DCSTQ RF(Z) POL110 NO STATUS TO BE SENT SUK A6,DWTSQ GET DWT ADDRESS POL050 EQU * CF A5,TRSTA SEND STATUS CF A5,SPTIM START PROCEDURE TIMER IM XACK SET 'ACK EXPECTED' XIF IFF STAT=1 RF POL110 XIF POL100 EQU * ABL BRM POL110 EQU * LD A6,DCWRQ RF(NZ) POL120 WRITE ON QUEUE POL115 EQU * CF A5,TREOT SEND EOT RB POL100 POL120 EQU * SUK A6,DWTWQ GET DWT ADDRESS POL125 EQU * LD A8,DWTECB,A6 GET ECB ADDRESS RF(NZ) POL126 CF A15,REMOVW RB POL115 POL126 EQU * ST A8,FECB SAVE ECB ADDRESS ST A6,FDWTUT SAVE A6 IFF MMUPAG=0 LDKL A4,MMUBUF MMU WORK BUFFER ST A4,ECBBA,A8 CF A15,DC:MOT MOVE DATA FROM USER BUFFER XIF LD A4,ECBBA,A8 GET BUFFER ADDRESS LD A3,ECBRL,A8 GET LENGTH POL127 EQU * ST A4,FECBBA SAVE BUFFER ADDRESS SUK A3,2 SKIP FIRST WORD OF BUFFER ST A3,FECBRL SAVE LENGTH CM FBAX RESET BUFFER INDEX POL130 EQU * CM XETX RESET 'ETX SENT' CM XSTA CF A5,TRTEXT SEND ONE BLOCK CF A5,SPTIM START PROCEDURE TIMER IM XACK SET 'ACK EXPECTED' RB POL100 EJECT * * * SPECIFIC POLL HAS BEEN RECEIVED * * SPOLL EQU * IFF STAT+SPECP=0 LD A1,XACK =5 RB(NZ) POL010 ACK EXPECTED =5 LDR A7,A6 SAVE A6 CF A5,CPTIM CHECK POLLTIMER LDR A6,A7 RESTORE A6 IFT STAT=1 LD A1,DWTST,A6 GET STATUS ANK A1,7 RB(NZ) POL050 PENDING STATUS XIF IFF STAT+SPECP=0 LD A1,DWTST,A6 RB(N) POL115 NO REQUEST LD A1,DWTOR,A6 GET ORDER SUK A1,6 RB(Z) POL125 WRITE REQUEST SUK A1,2 RB(Z) POL125 EXCHANGE REQUEST XIF RB POL115 SEND EOT EJECT * * * CHECK IF THERE IS A WRITE REQUEST TO BE COMPLETED * * A1 CONTAINS RETURN CODE * * CWRITE LD A6,FDWTUT RF(Z) CWR900 NO WRITE GOING ON LD A2,DWTST,A6 RF(N) CWR900 NO REQUEST LD A2,DWTOR,A6 GET ORDER SUK A2,6 RF(Z) CWR100 WRITE REQUEST SUK A2,2 RF(NZ) CWR900 NOT EXCHANGE REQUEST LDR A1,A1 RF(NZ) CWR100 TRANSMISSION ERROR, RC NOT ZERO LDK A2,2 TRANMISSION OK ST A2,DWTOR,A6 INDICATE READ ORDER RF CWR150 CWR100 LD A8,FECB GET ECB ADDRESS CF A15,CTIME STOP TIMING LDR A8,A8 RF(Z) CWR150 ST A2,ECBCW,A8 CF A15,TENDIO COMPLETE REQUEST CWR150 EQU * CF A15,REMOVW REMOVE FROM WRITE QUEUE CWR200 EQU * CWR900 EQU * CM XACK RESET 'ACK EXPECTED' CM FDWTUT RTN A5 EJECT * * * READ ONE TEXT BLOCK * * ON EXIT A3 CONTAINS : * 0 : IF CORRECT ETX BLOCK RECEIVED * 1 : IF LRC OR PARITY ERROR , BUFFER OVERFLOW * 2 : IF CORRECT ETB BLOCK RECEIVED * RDMESS EQU * LD A4,DCRBUF GET BUFFER ADDRESS ADK A4,6 RESERVE HEADER LDK A3,0 LD A1,XSTA RF(NZ) RDM050 LAST INPUT WAS OK LD A1,FBLST COMPUTE NEW INDEX SUR A1,A4 ST A1,FBAX RDM050 EQU * AD A4,FBAX ADD BUFFER INDEX ST A4,FBLST REMEMBER START OF BLOCK RDM075 EQU * CM XSTA LDK A7,0 RESET LRC IFT IBMCHR=1 LD A1,FBAX RF(NZ) RDM100 NOT FIRST BLOCK CF A5,READP RF(NZ) RDM120 PARITY ERROR CWK A2,ESC RF(NE) RDM110 CF A5,READP SKIP NEXT TWO CHARACTERS CF A5,READP XIF RDM100 EQU * CF A5,READP READ ONE CHARACTER RF(NZ) RDM120 PARITY ERROR RDM110 EQU * CWK A2,ETX RF(E) RDM130 ETX RECEIVED CWK A2,ETB RF(E) RDM160 ETB RECEIVED CWK A2,ITB RF(E) RDM170 ITB RECEIVED CWK A2,ENQ RF(E) RDM120 SKIP IF ENQ EMBEDDED IN MESSAGE CWK A2,/FF RF(E) RDM140 MARK HOLD RECEIVED IFT CODE=0 IFT BINTRM=1 LDR A1,A2 SUK A1,DC1+3 RF(P) RDM115 NOT DC1-DC3 ADK A1,3 RF(N) RDM115 NOT DC1-DC3 SLL A1,6 LDR A8,A1 CF A5,READP 8-BIT CHAR GET NEXT PART RF(NZ) RDM120 PARITY ERROR SUK A2,/20 ASSEMBLE TO ONE CHARACTER ORR A2,A8 RDM115 EQU * XIF SCR A2,A4 STORE CHARACTER ADK A4,1 INCREMENT POINTER IM FBAX INCREMENT BUFFER INDEX LD A1,FBAX CWK A1,RBUFL+RBUFL RB(NG) RDM100 NOT OVERFLOW * * BUFFER OVERFLOW * RF RDM140 ABORT INPUT RDM120 EQU * LDK A3,1 INDICATE INVALID MESSAGE SUK A2,/7F RF(Z) RDM150 MARK HOLD RECEIVED RB RDM100 * * ETX RECEIVED * RDM130 EQU * LD A1,DCRBUF GET BUFFER ADDRESS LD A2,FBAX GET BUFFER INDEX ST A2,+2,A1 STORE EFFECTIVE LENGTH IN HEADER IFF CODE=1 CF A5,RDLRC RF(Z) RDM150 LRC WAS OK XIF IFT CODE=1 CF A5,RDCRC READ CRC AND CHECK IT RF(E) RDM150 CRC WAS OK XIF RDM140 EQU * LDK A3,1 INDICATE INVALID MESSAGE RDM150 EQU * LDR A7,A3 SAVE RESULT REGISTER CF A5,HALTIN HALT INPUT IFT P6805=1 ORR A7,A1 PARITY ERROR SALCUZ XIF SALCUZ RTN A5 * * ETB RECEIVED * RDM160 EQU * LDR A3,A3 RB(NZ) RDM130 ALREADY INVALID LDK A3,2 INDICATE CORRECT ETB RB RDM130 * * ITB RECEIVED * RDM170 EQU * IFF CODE=1 CF A5,RDLRC RB(NZ) RDM120 LRC WAS NOT OK XIF IFT CODE=1 CF A5,RDCRC READ CRC AND CHECK IT RB(NE) RDM120 CRC WAS NOT OK XIF RB RDM100 EJECT * * TRANSMIT ACK 0 OR 1 * TRACK LDK A2,1 LDK A3,ACK1 PRELOAD ACK1 XRS A2,CACK INCREMENT ACK COUNTER RF(NZ) TRDLE LDK A3,ACK0 LOAD ACK0 RF TRDLE * * TRANSMIT WACK * TRWACK LDK A3,WACK LOAD WACK RF TRDLE * * TRANSMIT RVI * IFF STAT=0 TRRVI LDK A3,RVI LOAD RVI XIF * * TRANSMIT DLE * TRDLE LDK A2,DLE LOAD DLE SC A2,RESEND PUT INSAVE AREA SC A3,RESEND+1 RF TRREP EJECT * * TRANSMIT NAK * TRNAK LDK A3,NAK LOAD NAK RF TREN10 * * TRANSMIT EOT * TREOT LDK A3,EOT LOAD EOT RF TREN10 * * TRANSMIT ENQ * TRENQ LDK A3,ENQ LOAD ENQ * TREN10 SC A3,RESEND PUT IN SAVE AREA LDK A2,/FF SC A2,RESEND+1 TRREP CF A5,TRSYNC START OUTPUT LC A2,RESEND GET FIRST CHARACTER CF A5,WRITEP SEND IT LC A2,RESEND+1 GET NEXT CHARACTER CF A5,WRITEP SEND IT TRRE10 LDK A2,/FF CF A5,WRIT05 SEND PAD LDK A2,/FF CF A5,WRIT05 LDK A2,0 SALCUZ CIO A2,0,LCUUT STOP TRANSMITTER IFT P6805=1 SALCUZ CF A5,READ WAIT FOR END SALCUZ XIF SALCUZ SST A2,LCUUT PERFORM SST AT ONCE IFF LOGG=0 CF A5,LOGSST LOG TRANSMITTER STATUS XIF RTN A5 EJECT * * * TRANSMIT ONE TEXT BLOCK * * TRTEXT EQU * CF A5,TRSYNC START OUTPUT IFT TSTREQ=1 * * * TEST REQUEST HANDLING * * LD A4,FBAX RF(NZ) TRT050 NOT START OF MESSAGE LD A1,XRB READ BUFFER COMMAND IN PROCESS ??? RF(NZ) TRT050 YES !! LD A4,FECBBA LC A3,+2,A4 GET AID CHARACTER SUK A3,/30 RF(NZ) TRT050 NOT TEST REQUEST LDK A2,SOH CF A5,WRITE SEND SOH LDK A7,0 RESET BCC LDK A2,'%' CF A5,WRITE SEND % LDK A2,'/' CF A5,WRITE SEND / LDK A2,STX CF A5,WRITE SEND STX ST A4,FBLST REMEMBER START OF BLOCK ADK A4,5 SKIP AID + CURSOR ADDRESS LDK A3,5 ADJUST LENGTH LDK A2,3 ST A2,FBAX RF TRT100 TRT050 EQU * * * * XIF LDK A2,STX CF A5,WRITE SEND STX LDK A7,0 RESET LRC LD A4,FECBBA GET BUFFER ADDRESS AD A4,FBAX ADD BUFFER INDEX ST A4,FBLST REMEMBER START OF BLOCK ADK A4,2 SKIP FIRST WORD OF BUFFER LDK A3,0 RESET CHARACTER COUNTER LD A1,FBAX GET BUFFER INDEX RF(NZ) TRT100 NOT FIRST BLOCK LC A2,DW2500+1 GET TCA CF A5,WRITEP SEND TCA LDR* A2,A6 GET STA CF A5,WRITEP SEND STA IFT IBMCHR=1 IFF RCOM=1 LDK A2,/27 SEND ENTER AS AID CF A5,WRITEP LDK A2,/20 AND CURSOR ADDRESS CF A5,WRITEP LDK A2,/20 CF A5,WRITEP XIF IFT RCOM=1 LD A1,XRB READ BUFFER COMMAND ??? RF(Z) TRT070 NO!! ******************** LDK A2,X'2D' AID FOR DISPLAY TRT060 CF A5,WRITEP SEND AID LD* A3,DWTCUR,A6 CURSOR ADDRESS CF A5,LINCOL SEND LINE AND COLUMN NUMBER LDK A3,5 SET BLOCK COUNT RF TRT100 TRT070 EQU * XIF LDK A3,2 TRT100 EQU * LCR A2,A4 GET ONE CHARACTER ADK A4,1 INCREMENT POINTER ANK A2,/7F IFT RCOM=1 LD A1,XRB READ BUFFER COMMAND ??? RF(Z) TRT105 NO!! ************************************************************ * * CHECK IF ATTRIBUTE CHARACTER OR NULL * *********************************************** CWK A2,X'20' ATTRIBUTE CHARACTER RF(L) TRT101 YES!!! XIF IFT DMRK=1 CWK A2,/7E LINE FEED ? RF(NE) TRT102 NO,GO TO TRT102 LDK A2,/0A TRT102 EQU * CWK A2,/7D END OF MESSAGE ? RF(NE) TRT103 NO,GO TO TRT103 LDK A2,/19 TRT103 EQU * CWK A2,X'7F' NULL ?? RF(NE) TRT105 SUK A2,1 XIF IFT RCOM=1 RF TRT105 TRT101 EQU * LDK A2,SF CF A5,WRITEP SEND START FIELD LC A2,-1,A4 GET ATTRIBUTE CHARACTER ANK A2,X'7F' LDR A1,A2 CONVERT TO IBM ATTRIBUTE ANK A1,1 ANK A2,/1E MASK SLL A2,1 ORR A2,A1 IBM ATTRIBUTE COMPOSED ORK A2,/40 BIT ALWAYS SET ONE LC A2,TASCII,A2 CWK A2,/18 CHECK SPECIAL ATTRIBUT RF(NE) TRT104 LDK A2,/30 TRT104 EQU * CF A5,WRITEP SEND ATTRIBUTE ADK A3,1 RF TRT110 TRT105 EQU * XIF EJECT CWK A2,/07 RF(L) TRT110 ILLEGAL CODE : SKIP IT CF A5,WRITEP SEND CHARACTER TRT110 EQU * IM FBAX INCREMENT BUFFER INDEX LD A1,FECBRL GET REQUESTED LENGTH CW A1,FBAX RF(NG) TRT130 END OF MESSAGE ADK A3,1 INCREMENT CHARACTER COUNTER CWK A3,TBLEN RB(L) TRT100 NOT FULL BLOCK IFT RCOM=1 LDK A1,SBA CHECK IF SBA AT END OF BLOCK CC A1,-2,A4 RF(E) TRT115 YES CC A1,-1,A4 RF(NE) TRT116 NO SEND ETB LCR A2,A4 GET FIRST BYTE AFTER SBA ADK A4,1 INREMENT POINTER CF A5,WRITEP SEND IT IM FBAX INCREMENT INDEX TRT115 LCR A2,A4 GET SECOND BYTE AFTER SBA CF A5,WRITEP SEND IT IM FBAX INCREMENT INDEX XIF TRT116 EQU * LDK A2,ETB LOAD ETB TRT120 EQU * CF A5,WRITEP SEND IT IFF CODE=1 LDR A2,A7 GET LRC CF A5,WRITEP SEND LRC XIF IFT CODE=1 LDR A8,A7 SAVE CURRENT CRC LDR A2,A7 ANK A2,/FF CF A5,WRIT05 SEND CRC BYTE 1 ECR A2,A8 ANK A2,/FF CF A5,WRIT05 SEND CRC BYTE 2 XIF ABL TRRE10 HALT OUTPUT TRT130 EQU * IM XETX INDICATE 'ETX SENT' TRT140 EQU * LDK A2,ETX LOAD ETX RB TRT120 SEND ETX AND LRC EJECT * * * TRANSMIT STATUS MESSAGE * * IFF STAT=0 TRSTA EQU * IM XSTA INDICATE 'STATUS SENT' ST A6,FDWTUT SAVE A6 CF A5,TRSYNC START OUTPUT LDK A2,SOH CF A5,WRITE SEND SOH LDK A7,0 REST LRC LDK A2,'%' CF A5,WRITEP SEND '%' LDK A2,'R' CF A5,WRITEP SEND 'R' LDK A2,STX CF A5,WRITE SEND STX LC A2,DW2500+1 CF A5,WRITEP SEND TCA LDR* A2,A6 CF A5,WRITEP SEND STA LD A1,DWTST,A6 GET STATUS ANK A1,/06 MASK FOR S/S 0 SRL A1,1 LC A2,SSTAB,A1 GET STATUS BYTE CF A5,WRITEP SEND S/S 0 LDK A2,NOIR PRELOAD S/S 1 LD A1,DWTST,A6 GET STATUS ANK A1,5 RF(Z) TRST10 NOT 'IR' ANK A1,4 RF(NZ) TRST10 NO IR IF DE LDK A2,IR TRST10 EQU * CF A5,WRITEP SEND S/S 1 RB TRT130 SEND ETX AND LRC XIF EJECT * * * TRANSMIT SYNC SEQUENCE * * TRSYNC EQU * LDK A2,0 SALCUZ CIO A2,0,LCUIN HALT INPUT IF NOT DONE SST A2,LCUIN PERFORM SST IFT P6805=0 SALCUZ CIO A2,1,LCUUT START TRANSMITTER XIF SALCUZ IFT P6805=1 SALCUZ IFT CODE=1 SALCUZ LDK A2,0 SALCUZ CIO A2,1,LCUUT START TRANSMITTER SALCUZ RF(A) TRS010 SALCUZ SST A1,LCUUT SALCUZ RF(A) TRS005 SALCUZ ABL BRM SALCUZ TRS005 CIO A2,1,LCUUT SALCUZ TRS010 EQU * SALCUZ LDK A2,SYNEBC SALCUZ OTR A2,1,LCUUT SPECIFY SYNC CHARACTER SALCUZ XIF SALCUZ IFT P6805=1 SALCUZ IFT CODE=0 SALCUZ LDK A2,/0C SALCUZ CIO A2,1,LCUUT SALCUZ RF(A) TRS010 SALCUZ SST A1,LCUUT SALCUZ RF(A) TRS005 SALCUZ ABL BRM SALCUZ TRS005 CIO A2,1,LCUUT SALCUZ TRS010 EQU * LDK A2,SYN SALCUZ OTR A2,1,LCUUT SPECIFY SYNC CHARACTER SALCUZ XIF SALCUZ CF A5,READ WAIT FOR OUTPUT INTERRUPT LDK A3,4 4 SYNS TRS100 LDK A2,SYN CF A5,WRITE SEND SYN SUK A3,1 RB(NZ) TRS100 RTN A5 EJECT * * * RECEIVER INTERRUPT * * IH2501 EQU * ST P,INTSAV IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 XIF IFF CPU852=1 MSR 8,A15 SAVE A1-A8 =1 XIF CF A15,LDREG RESTORE DC REGS A3 - A8 INR A2,0,LCUIN READ CHAR RF(NA) IHIN20 NOT ACCEPTED,CHECK STATUS IFF LOGG=0 CF A5,LOGIN LOG RECEIVED CHARACTER XIF IFF CODE=1 C2 SYNSW RF(NZ) IHLCI2 CWK A2,SYN SKIP SYNS RF(E) READ IHLCI2 XRR A7,A2 CALCULATE LRC XIF IFT CODE=1 C2 SYNSW RF(NZ) IHLCI1 DO NOT SKIP SYNCS IN BCC FRAME CWK A2,SYNEBC RF(E) READ SKIP EBCDIC SYN IHLCI1 EQU * CF A5,CRCCAL CALCULATE CRC LC A2,TASCII,A2 TRANSLATE TO ASCII XIF IHIN10 RTN A5 IFT P6805=0 SALCUZ IHIN20 CF A5,SST PERFORM SST ABL BRM XIF SALCUZ IFT P6805=1 SALCUZ IHIN20 RF SST PERFORM SST SALCUZ XIF SALCUZ EJECT * * * TRANSMITTER INTERRUPT * * IH2502 EQU * ST P,INTSAV IFT CPU852=1 CF A15,SAVE8 SAVE A1 - A8 XIF IFF CPU852=1 MSR 8,A15 SAVE A1-A8 =1 XIF CF A15,LDREG RESTORE DC REGS A3 - A8 RB IHIN10 EJECT * * * SST INSTRUCTION AND STATUS CHECK * * LCU STATUS : BIT 10=CARRIER OFF * BIT 13=PARITY ERROR (6805 ONLY) SALCUZ * BIT 14=THROUGHPUT ERROR * BIT 15=MODEM NOT READY * SST SST A1,LCUIN IFT P6805=1 SALCUZ RF(NA) SST200 ALREADY INACTIVE SALCUZ SALCUZ XIF SALCUZ LDR A2,A1 IFF LOGG=0 CF A5,LOGSST LOG SST INFORMATION XIF IFT P6805=0 SALCUZ ANK A2,2 RF(Z) SST100 XIF SALCUZ IFT P6805=1 SALCUZ ANK A2,6 SALCUZ RF(Z) SST100 SALCUZ ANK A2,2 SALCUZ RF(NZ) SST050 THROUGH PUT SALCUZ LDK A1,1 SET PARITY ERROR SALCUZ RF SSTRET SALCUZ XIF SALCUZ SST050 EQU * SALCUZ CM XSTA TROUHHPUT ERROR LDKL A5,STB ABL BRM010 SST100 EQU * ST A1,DCSTCU IFT P6805=0 SALCUZ CF A15,CKMESS CHECK IF STATUS CHANGE RTN A5 XIF SALCUZ IFT P6805=1 SALCUZ ANK A1,/21 SALCUZ RF(Z) SST200 LSALCUZ CF A15,SETIME LINE ERROR, WAIT 0.2 SECONDS SALCUZ DATA BRM RESTART SALCUZ DATA 2 WAIT TIME SALCUZ RF READ SALCUZ * SST200 LDK A1,0 SALCUZ SSTRET ADK A5,4 SALCUZ LDR A1,A1 SET CR SALCUZ ABR* A5 RETURN SALCUZ XIF SALCUZ * * * HALT INPUT * * HALTIN LDK A1,0 SALCUZ CIO A1,0,LCUIN IFT P6805=0 SALCUZ RB SST PERFORM SST INSTRUCTION AND STATUS CHECK XIF SALCUZ IFT P6805=1 SALCUZ RF READ WAIT FOR SST INTERRUPT SALCUZ XIF SALCUZ EJECT * * * WRITE FROM OR READ ONE CHARACTER TO A2 * * WRITE EQU * IFT CODE=1 ANK A2,/FF CWK A2,/FF RF(E) WRIT05 NO TRANSLATION OF TRAILING PAD LC A2,TEBCDIC,A2 TRANSLATE TO EBCDIC XIF WRIT05 EQU * OTR A2,0,LCUUT SEND CHARACTER RF(A) WRIT10 RF READ THROUGHPUT ERROR IFF CODE=1 WRIT10 XRR A7,A2 ACCUMULATE BCC XIF IFT CODE=1 WRIT10 CF A5,CRCCAL CALCULATE CRC XIF IFF LOGG=0 CF A5,LOGOUT LOG OUTPUT CHARACTER XIF * READ CF A15,STREG ABL TDISP EJECT * * *** WRITEP * * WRITE A2 WITH PARITY * * IFT CODE+P6805=0 SALCUZ WRITEP ANK A2,/FF ECR A1,A2 ORK A2,/80 WRI100 SLL A1,1 RB(P) WRI100 RB(Z) WRITE WRITE XRK A2,/80 RB WRI100 XIF IFF CODE+P6805=0 SALCUZ WRITEP RB WRITE XIF * * * *** READP * * READ CHARACTER TO A2 AND CHECK PARITY * * READP CF A5,READ IFT CODE+P6805=0 SALCUZ ECR A1,A2 RE100 SLL A1,1 RF(Z) RE110 RB(NN) RE100 XRK A2,/80 RB RE100 RE110 LDR A1,A2 ANK A2,/7F XIF IFF CODE+P6805=0 SALCUZ LDK A1,/80 XIF ADK A5,4 ANK A1,/80 XRK A1,/80 ABR* A5 * * EJECT * * FIND DWT CONTAINING SUBTERMINAL ADDRESS AS GIVEN IN A2 * * CALLING SEQUENCE: CF A5,FINTER * A2=SUBTERMINAL ADDRESS * A4 DESTROYED * A3#0: DWT TO FOUND TERMINAL * * NOTE: FOR SIEMENS MSV1 - SEPARATE SELECT AND POLL ADDRESSES * ENTRY: FINTER - CHECK SELECT ADDRESS * FINTEP - CHECK SPECIFIC POLL ADDRESS * RBYTE DATA 0 IF 1 COMPARE WITH RIGTH BYTE * * FINTEP EQU * IFT MSV1=0 FINTER EQU * XIF IM RBYTE IFT MSV1=1 FINTER EQU * XIF LD A4,DCTAB GET ADDRESS TO DC:TAB AD* A4,DCTAB ADDRESS TO END OF DC:TAB FINT10 SUK A4,2 LDK A3,0 DEFAULT VALUE CW A4,DCTAB END OF TABLE RF(E) FINT20 SUBTERMINAL NOT FOUND LDR* A3,A4 LOAD DWT ADDRESS IFT MSV1=1 AD A3,RBYTE CHOOSE ADDRESS TYPE CCR A2,A3 COMPARE SUBTERMINAL ADDRESS XIF IFT MSV1=0 CC A2,1,A3 COMPARE TO SUBTERMINAL ADDRESS XIF RB(NE) FINT10 TAKE NEXT TERMINAL FINT20 CM RBYTE ANKL A3,/FFFE RTN A5 EJECT * * * POWER ON FUNCTIONS * * DC25ON EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 XIF IFF CPU852=1 MSR 8,A15 SAVE A1-A8 =1 XIF IFT STAT=1 LDK A5,4 SET DEVICE END LD A1,DCTAB AD* A1,DCTAB GET ADDRESS TO END OF TABLE DRDC05 SUK A1,2 CW A1,DCTAB RF(E) DRDC06 END OF TABLE LDR* A6,A1 GET DWT ADDRESS ORS A5,DWTST,A6 STORE DEVICE END FOR DEVICE CF A15,INSSQ INSERT IN STATUS QUEUE RB DRDC05 DRDC06 EQU * XIF LDK A2,/40 ORS A2,DCONOF CF A15,CKMESS LD A2,DCTPGP GET POLL TIMER POINTER RF(NZ) DRDC20 ALREADY STARTED DRDC10 CF A15,SPOTIM START POLL TIMER DRDC20 ABL BRM EJECT * * POLL TIME OUT * PTOUT LDKL A5,STB LOAD A5 STACK BASE LDK A2,/40 ST A2,DCONOF INDICATE POLL TIME OUT CF A15,CKMESS CHECK IF STATUS CHANGE CF A15,SPOTIM START POLL TIMER ABL TDISP * * RESTART POLL TIMER WHEN POLL HAS BEEN RECEIVED * CPTIM CM DCONOF INDICATE POLLING LDKL A2,-TIMPOL ST* A2,DCTPGP RESTART TIMER CF A15,CKMESS CHECK IF STATUS CHANGE RTN A5 * * START POLL TIMER * SPOTIM CF A15,SETIME START TIMER DATA PTOUT,TIMPOL ST A4,DCTPGP STORE TIMER POINTER ADKL A15,4 ABR* A15 EJECT * * START PROCEDURE TIMER * SPTIM EQU * LDR A1,A6 LOAD DWT AS PARAMETER CF A15,SETIME DATA PRTOUT,TIMPRO ST A4,DCTPP SAVE TIMER POINTER RTN A5 * * PROCEDURE TIMEOUT * PRTOUT CM DCTPP LDR A6,A1 RELOAD A6 LDKL A5,STB LOAD STACK BASE CF A5,HALTIN HALT INPUT IF OPEN SALCUZ LD A1,XACK RF(Z) PRT10 ACK NOT EXPECTED CF A5,TRENQ SEND ENQ CF A5,SPTIM START PROCEDURE TIMER PRT10 ABL BRM EJECT * * STOP PROCEDURE TIMER * HPTIM LD A1,DCTPP GET TIMER POINTER RF(Z) HPT10 NOT RUNNING CM* DCTPP STOP TIMER CM DCTPP HPT10 RTN A5 EJECT IFT CODE=1 * * * CALCULATION OF CRC * * A2 = CHARACTER * A7 = ACCUMULATED CRC * * CRCCAL 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 CRC CHARACTERS AND CHECK THEM * CR = (E) IF CRC WAS OK * * RDCRC LDR A6,A7 SAVE CURRENT CRC IM SYNSW DO NOT SKIP SYNCS NOW CF A5,READ READ BYTE 1 LD A8,CRCSAV+2 SAVE IT CF A5,READ READ BYTE 2 CM SYNSW SYNCS CAN BE SKIPPED AGAIN LD A2,CRCSAV+2 SAVE IT SLL A2,8 XRR A2,A8 ADK A5,4 CWR A2,A6 COMPARE RECEIVED WITH COMPUTED ABR* A5 XIF IFT CODE=0 * * RDLRC READ LRC CHARACTER * CR=0 IF LRC OK * RDLRC IM SYNSW CF A5,READP ADK A5,4 LDR A1,A1 RF(NZ) LRCEND ANK A7,/7F LRCEND EQU * CM SYNSW ABR* A5 XIF EJECT * * * DEVICE WORK TABLE FOR DCTASK * * DW2500 EQU * TABLE ENTRY DATA 0 CU LINE ADDRESS DATA /8000 STATUS DATA 0 ECB ADDRESS DATA 0 ORDER DATA DC25DC POINTER TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TASK QUEUE * IFT MMUPAG=1 DATA 0 USER ECB ADDRESS DATA DC:ECB MMU ECB ADDRESS XIF * DATA 0 TIMER POINTER DATA 0 WRITE QUEUE OR BUFFER QUEUE DATA 0 STATUS QUEUE (NOT USED BY DC-TASK) DATA 0 RECEIVE MESSAGE QUEUE DATA 0 SIMULATED DEVICE BUFFER ADDRESS DATA 0 CURSOR ADDRESS DATA 0 REQUEST TIMEOUT VALUE * IFT MMUPAG=1 DC:ECB EQU * MMU ECB DATA 0,0,0,0,0,0 XIF * EJECT * * * DC RECEIVE BUFFER POOL * RLINK EQU RBUFL+RBUFL+8 * DCRBUF EQU * DATA *+2 FREE BUFFER ANCHOR IFF RBUFNR=2 DATA *+RLINK RES RBUFL+3 IFF RBUFNR=3 DATA *+RLINK RES RBUFL+3 IFF RBUFNR=4 DATA *+RLINK RES RBUFL+3 XIF DATA *+RLINK RES RBUFL+3 DATA 0 END OF CHAIN RES RBUFL+3 IFF MMUPAG=0 MMUBUF RES TBUFL+1 MMU WORK BUFFER XIF EJECT * * * INTERRUPT LOGGING ROUTINE * * IFF LOGG=0 LOGSST ST A2,SAVE2 ORKL A2,/F000 RF LOG10 LOGOUT ST A2,SAVE2 ORKL A2,/0F00 RF LOG10 LOGIN CWK A2,/FF RF(E) LOGE10 ST A2,SAVE2 LOG10 ST A3,SAVE3 LD A3,LOGPNT STR A2,A3 ADK A3,2 CWK A3,LOGEND RF(L) LOGEXI LDKL A3,LOGSTA LOGEXI ST A3,LOGPNT LD A2,SAVE2 LD A3,SAVE3 LOGE10 RTN A5 EJECT * * LOGPNT DATA LOGSTA LOGSTA EQU * RES 300 LOGEND EQU *-4 SAVE2 DATA 0 SAVE3 DATA 0 XIF * * * IFT RCOM=1 EJECT ******************************************************* * * L I N C O L * * CONVERT CURSOR ADDRESS TO LINE AND COLUMN NUMBER * ********************************************************** LINCOL EQU * LDR A2,A3 COPY CURSOR ADDRESS SRL A2,6 ANK A2,X'3F' LC A2,LICO:T,A2 ASCII LINE NUMBER CF A5,WRITEP SEND LINE NUMBER LDR A2,A3 ANK A2,X'3F' LC A2,LICO:T,A2 ASCII COLUMN NUMBER CF A5,WRITEP SEND COLUMN NUMBER RTN A5 RETURN * * * EJECT * SCANDINAVIAN ALPHABET DB LICO:T EQU * DATA /2041,/4243,/4445,/4647 /00-/07 DATA /4849,/232E,/3C28,/2B21 /08-/0F DATA /264A,/4B4C,/4D4E,/4F50 /10-/17 DATA /5152,/245D,/2A29,/3B5E /18-/1F DATA /2D2F,/5354,/5556,/5758 /20-/27 DATA /595A,/402C,/255F,/3E3F /28-/2F DATA /3031,/3233,/3435,/3637 /30-37 DATA /3839,/3A5B,/5C27,/3D22 /38-3F DE XIF EJECT DC:IN DATA DC:TAB+2 DCTAB DATA DC:TAB DC:TAB DATA 2 LENGTH OF DC:TAB DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DC:END EQU * * * END