|
|
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: 23962 (0x5d9a)
Notes: pts_type(SC)
Names: »DRGP01.SC«
└─⟦a16d9b08d⟧ Bits:30009712 Philips computer tape "TOSS11"
└─⟦this⟧ »UPD3/DRGP01.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRGP01.SC«
IDENT DRGP01 REL 11.0 81-08-31 870105041100 =13,CHARACTER BLOCKING CHANGED REL 11.0 81-05-25 =12,COND. ASS. FOR ECHO REL 11.0 81-01-26 =11,BRANCH ADDR. OVERFLOW PRR 11.0 80-11-19 =10,IMPROV. FOR REMOTE (RT) PRR 11.0 80-09-18 =9,CHANGE IN ERROR ROUTINE PRR 11.0 80-09-16 =8,ABORT ROUTINE IMPLEMENTED PRR 11.0 80-07-28 =7,BRANCH ADDR. OVERFL. PRR 11.0 80-04-29 =6,IMPROV. OF ERROR HANDLING PRR 11.0 80-03-18 =5,TENDIO AT ECHO END PRR 11.0 80-03-13 =4,CORRECTION OF MMU BUFFER EQUATE PRR 11.0 80-02-05 =3,ADAPTED TO NEW INTERFACE REL 9.1 79-04-06 =1-2,GEN UPDATE TO 8.2+ STATUS REL 8.2 79-03-16 =2,IMPROV. OF TEST ORDER REL 8.2 78-11-19 =1,ECHO OF LF AND CR, ABIS REL 8.2 78-09-15 * * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRGP01 = DRIVER GENERAL PRINTER * * * * * * ************************************************* * * * THIS DRIVER HANDLES GENERAL TERMINAL PRINTER * PTS 6321 CONNECTED TO THE SYSTEM VIA CHLT OR CHRT. * * THE DRIVER ALSO INCLUDES DEVICE DEPENDENT ECHO * FUNCTIONS, WHICH MAKES IT POSSIBLE TO USE THE * GENERAL PRINTER AS AN ECHO DEVICE TO ANY KEY- * BOARD, THAT RUNS UNDER THE GENERAL KEYBOARD * DRIVER DRKB04. * * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C G P ACTIVATION PART * * A B G P ABORT ROUTINE * * R C G P RECOVERY ROUTINE * * E C H O G P ECHO FUNCTIONS * EJECT * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00: TEST STATUS * 05: BASIC WRITE * 06: STANDARD WRITE * * NORMAL REGISTER USAGE * * REGISTER A1 = RETURN CODE * A2 = OUTPUT CHARACTER * A3 = BUFFER INDEX * A4 = WORK REGISTER * A5 = STACK BASE * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS * * * SYSTEM ADAPTATION * * THE CODES FOR ECHO OF BACKSPACE (GPBSP) AND CLEAR * (GPCLR) KEYS SHOULD BE DEFINED. * * BY MEANS OF CONDITIONAL ASSEMBLY THE DRIVER IS * ADAPTED TO HANDLE FOLLOWING FUNCTIONS. * --ROOMLESS POINT * --ACCEPTANCE OF SPECIAL CHARACTER /13,/14 OR BOTH * * --EXCLUDE ECHOING OF AN EXTRA SPACE BETWEEN EACH CHARACTER * --SUPPRESS ECHOING OF END OF RECORD CHARACTER ** --SUPPRESION OF TRAILING BLANKS * --END OF REQUEST WHEN PRINTER HARDWARE BECOMES INACTIVE * * THE CHARACTER CODES FOR ROOMLESS POINT DIGITS * IS DEFINED IN A SPECIAL TABLE. STANDARD IS SHB CHARACTER SET EJECT * * * * *********** * ENTRIES * *********** * * * ENTRY GPAD ADDRESS TO ADDRESSBLOCK ENTRY ECHOGP DEVICE-DEPENDENT ECHO-ROUTINE * * * * ***************************************** * EXTERNAL TOSS MODULE ENTRIES * ***************************************** * * EXTRN LENDER I/O REQUEST ERROR =3 EXTRN OUTPUT SUBROUTINE TO SEND CHARACTER EXTRN LDISP DISPATCHER =3 EXTRN TENDIO END I/O EXTRN ECHRTN RETURN TO KEYBOARD AFTER ECHO EXTRN GETCHR GET CHARACTER FROM ECB-BUFFER EXTRN STABLK START OF BLOCK =3 EXTRN ENDBLK END OF BLOCK =3 EJECT * * ************************ * DWT PARAMETERS * ************************ * * EXTRN DWTST STATUS EXTRN DWTOR ORDER EXTRN DWTA3 SAVE AREA A3 EXTRN DWTDEV START OF DRIVER DEFINED PART =3 * EJECT * * ************* * CONSTANTS * ************* * * SOH EQU /01 RESET PRINT BUFFER REMOTE AND LOCAL DUMMY STX EQU /82 START OF MESSAGE ETB EQU /97 END OF MESSAGE ETX EQU /03 LAST DUMMY CR EQU /0D CARRIAGE RETURN LF EQU /0A LINE FEED FFED EQU /0C FORM FEED SPACE EQU /20 SPACE PROUT EQU /04 PAPER OUT OR READY SWITCH OFF * BLKMAX EQU 140 MAX BLOCK LENGTH =3 EJECT * * ************************************** * CONDITIONAL ASSEMBLY * ************************************** * * IT IS POSSIBLE TO EXCLUDE ROOMLESS POINT * FUNCTION BY SETTING X:A = 0 * X:A EQU 1 CROOM EQU X:A * * ACCEPTANCE OF SPECIAL CHARACTER /13 CAN BE * INCLUDED IN THE DRIVER BY SETTING X:B=1 * X:B EQU 0 TRETON EQU X:B * * ACCEPTANCE OF SPECIAL CHARACTER /14 CAN BE * INCLUDED IN THE DRIVER BY SETTING X:C=1 * X:C EQU 0 FJOTON EQU X:C * * ECHO HANDLING IS INCLUDED IF ECHO = 1 * X:D EQU 1 U =12 ECHO EQU X:D U =12 * * IT IS POSSIBLE TO EXCLUDE ECHOING OF * AN EXTRA SPACE AFTER EACH CHARACTER * BY SETTING X:E=0 * X:E EQU 0 COSPAC EQU X:E EJECT * * * BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE * TO SUPPRESS ECHOING OF END OF RECORD CHARACTER. * THIS IS ATTAINED BY SETTING THE CONSTANT X:F=0. * X:F EQU 0 EORECH EQU X:F * * SUPPRESSING OF SPACES IN RIGHT HAND OF LINE * BY SETTING X:G=1 * X:G EQU 0 SUPSPA EQU X:G * * END OF REQUEST IN SITUATIONS WHERE * THE SELECTOR UNIT OR PRINTER HARDWARE * IS INACTIVE CAN BE CHOSEN BY SETTING * THE CONSTANT RECEND = 1 X:H EQU 0 RECEND EQU X:H * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * MMU BUFFER SIZE * X:I EQU 120 =4 DVBLEN EQU X:I =4 * =1 * SPECIAL CONDITION FOR ABIS PRINTER =1 ABIS EQU 0 =1 EJECT * * ******************************** * DWT-DISPLACEMENT * ******************************** * * =3 DWTAP EQU /2 HEAD POSITON POINTER =3 DWTPOC EQU /4 POSITON COUNTER =3 DWTBC EQU /5 BYTE COUNTER =3 * ************************************** * SPECIAL KEYS FOR ECHO FUNCTION * ************************************** * GPBSP EQU /2D BACK SPACE GPCLR EQU /3F CLEAR * ******************** * RETURN CODES * ******************** * PAROUT EQU /20 PAPER OUT OR READY SWITCH OFF CCERR EQU /4 CODE CHECK ERROR TPERR EQU /2 THROUGHPUT ERROR OPERR EQU /1 NOT OPERABLE, POWER OFF * EJECT * * ********** * TABLES * ********** * * IFT CROOM=1 * ROMTAB EQU * TABLE FOR ROOMLESS POINT CHARACTERS DATA /2122,/2426,/3B3C,/3E40,/5E5F * XIF * * * DATA DVBLEN MMU BUFFER LENGTH DATA 2 DEVICE INDEX GPAD EQU * ADDRESS BLOCK DATA ACGP ACTIVATION DRIVER DATA ABGP ABORT ROUTINE ADDRESS =8 DATA 0 INTERRUPT HANDLER DATA RCGP RECOVERY ROUTINE DATA ECHOGP DEVICE-DEPENDENT ECHO-ROUTINE EJECT * * A C G P * * ACGP = ACTIVATION DRIVER GENERAL PRINTER * * ORDER 00: TEST STATUS. DUMMY IS SENT TO PRINTER AND RETURN CODE * IS SET IF PAPER OUT OR READY SWITCH OFF. * RETURN CODE IS ALSO SET IF TIME-OUT IS SIGNALLED FROM * CHANNEL UNIT. * * ORDER 05: BASIC WRITE. CHARACTER ARE SENT TO PRINTER * FROM ECB-BUFFER * * ORDER 06: STANDARD WRITE. CHARACTERS ARE SENT TO PRINTER FROM * ECB-BUFFER AFTER INDIVIDUAL CODE CHECK. * ACGP EQU * =3 LDR A3,A7 =1 RF(Z) ACGP10 ORDER 0 =2 LDK A2,BLKMAX BLOCK LENGTH =3 CF A5,STABLK START OF BLOCK =3 RF(NZ) ERGP1 ERROR =3 SUK A3,5 =1 RF(E) ACGP19 ORDER 5 =3(=1) SUK A3,1 =1 =3 RF(E) ACGP00 ORDER 6 =3 CF A5,ENDBLK END OF BLOCK =3 ABL LENDER I/O REQUEST ERROR =3 ACGP00 EQU * =3 LD A3,4,A8 ORDER 6 GET REQ LENGTH =1 RF(Z) ACGP01 =1 LD A3,2,A8 GET BUFFER ADDRESS =1 LC A3,1,A3 GET CONTROL CHARACTER =1 ANK A3,/FF =1 ACGP01 SUK A3,/2B =1 =3 RF(NE) ACGP02 NOT CONTROL CHAR 2B =3 LDK A3,2 START BUFFER INDEX =3 RF ACGP19 =3 ACGP02 EQU * =3 LDK A2,CR =1 CF A5,OUTPUT =1 RF(NZ) ERGP1 ERROR =3 IFT ABIS=1 =1 LDK A2,FFED =1 CWK A3,/31-/2B =1 RF(E) ACGP03 CONTROL CHAR 31 =1 XIF =1 LDK A2,LF =1 SUK A3,/30-/2B =1 RF(NE) ACGP03 NOT CONTROL CHAR 30 =1 CF A5,OUTPUT =1 RF(NZ) ERGP1 ERROR =3 LDK A2,LF =1 ACGP03 LDK A1,1 RESET HEAD POS COUNTR =1 ST A1,DWTAP+DWTDEV,A6 =3(=1) ACGP06 LDK A3,2 START BUFFER INDEX =1 ACGP09 CF A5,OUTPUT =1 ERGP1 RF(NZ) ERGP2 ERROR =3 LDK A2,ETX DUMMY =10 CF A5,OUTPUT WAIT UNTIL PRINTBUFFER EMPTY =10 RF(NZ) ERGP2 ERROR =10 RF ACGP19 =1 EJECT =2 * =2 * ORDER 00: TEST =2 * IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE =2 * =2 ACGP10 EQU * LDK A2,2 BLOCK LENGTH =10(=3) CF A5,STABLK START OF BLOCK =3 RF(NZ) ERGP2 ERROR =3 LDK A2,2 SEND CHAR /02 =2 CF A5,OUTPUT =2 RF(NZ) ERGP2 ERROR =3 LDK A2,0 SEND CHAR /00=END OF TEST =2 CF A5,OUTPUT =2 RF(NZ) ERGP2 ERROR =3 RF AGP400 =10(=2) EJECT * * GET, CHECK AND SEND CHARACTER * (IF ORDER 5 NO CHECK) * ACGP17 CF A5,OUTPUT RF(NZ) ERGP2 ERROR =3 ACGP18 IM DWTPOC+DWTDEV,A6 POSITION COUNTER UPDATING =3 ACGP19 EQU * LDKL A4,/400 INDICATE LINE FEED DONE ORS A4,DWTDEV,A6 =3 IFT SUPSPA=1 CF A15,SKIPSP SKIP SPACES IN END OF ECB-BUFFER XIF LDK A4,0 ACGP20 CF A15,GETCHR GET CHARACTER FROM ECB-BUFFER LDR A1,A1 LAST CHARACTER? RF(NP) AGP400 YES LDR A1,A2 CWK A7,5 ORDER 5? =3 RF(E) ACGP24 BASIC WRITE SUK A1,9 HARDWARE TABULATION ? RF(NE) ACGP22 ST A4,DWTAP+DWTDEV,A6 RESET HEAD POSITION POINTER =3 RB ACGP17 ACGP22 SUK A1,8 TABULATION CHARACTER ? RF(E) ACGP40 IFT ABIS=1 =1 CWK A2,/07 BELL ? =1 RB(E) ACGP09 =1 XIF =1 * IFT TRETON=0 IFT FJOTON=0 * SUK A1,/F LESS THAN /20 ? * XIF * IFT TRETON=0 IFT FJOTON=1 * SUK A1,3 /14? RB(E) ACGP17 SUK A1,/C LESS THAN /20 ? * XIF * * IFT TRETON=1 IFT FJOTON=0 * SUK A1,2 /13 ? RB(E) ACGP17 SUK A1,/D LESS THAN /20 ? XIF * * IFT TRETON=1 IFT FJOTON=1 * SUK A1,2 /13? RB(E) ACGP17 SUK A1,1 /14? RB(E) ACGP17 SUK A1,/C LESS THAN /20 ? * XIF * RF(N) ACGP30 YES,CODE CHECK ERROR SUK A1,/8E ROOMLESS POINT? (AE) RF(E) AGP100 ADK A1,/4F GREATER THAN /5F RB(NP) ACGP17 NO SUK A1,/20 RF(NN) ACGP30 SUK A2,/20 TRANSFORM CHARACTER BETWEEN /60 TO /7F TO CHARACTER BETWEEN /40 TO /5F RB ACGP17 ACGP24 EQU * SUK A1,/D RF(NZ) ACGP26 NOT CR CM DWTPOC+DWTDEV,A6 RESET POSITION COUNTER =3 CM DWTAP+DWTDEV,A6 RESET HEAD POS.POINTER =3 ACGP26 ADK A1,3 RB(NZ) ACGP17 NOT LINE FEED SUK A1,1 ADS A1,DWTPOC+DWTDEV,A6 DECREMENT POS COUNTER =3 RB ACGP17 EJECT * * CODE CHECK ERROR * ACGP30 EQU * LDK A1,CCERR ORS A1,8,A8 RETURN CODE RB ACGP20 EJECT * * TABULATION * ACGP40 EQU * CF A15,GETCHR GET FIRST ASCII CHARACTER LDR A4,A2 CF A15,GETCHR GET SECOND ASCII CHARACTER ANK A2,/F ANK A4,/F RF(E) ACGP44 ACGP43 ADK A2,/A FROM DECIMAL TO HEXADECIMAL SUK A4,1 RB(NE) ACGP43 ACGP44 SU A2,DWTAP+DWTDEV,A6 SUBTRACT HEAD POSITION POINTER =3 LC A4,DWTBC+DWTDEV,A6 =3 SUR A2,A4 AND REQUESTS POSITION COUNTER TO GET NUMBER OF SPACES TO SEND RB(NP) ACGP20 LDR A4,A2 ACGP45 LDK A2,SPACE LOOP ALSO USED BY RECOVERY ROUTINE ACGP46 CF A5,OUTPUT ERGP2 RF(NZ) ERGP ERROR =3 IM DWTPOC+DWTDEV,A6 INCREMENT BUFFER INDEX =3 SUK A4,1 RB(P) ACGP45 LDR A3,A3 RECOVERY? RB(NE) ACGP20 NO SC A4,DWTBC+DWTDEV,A6 RESET POSITION POINTER =3 LDK A3,2 START BUFFER INDEX RB ACGP19 EJECT * * ROOMLESS POINT * AGP100 EQU * * IFT CROOM=1 * CF A15,GETCHR GET CHARACTER TO SEND ANK A2,/F LC A2,ROMTAB,A2 TRANSFORM * XIF * * IFF CROOM=1 * ANK A2,/7F * XIF * RB ACGP17 EJECT * * * SEND LAST DUMMY , LOAD A1 WITH * RETURN CODE AND END I/O * AGP400 EQU * =3 =13(=10) AGP410 LDK A2,ETX LAST DUMMY CF A5,OUTPUT SEND RF(NZ) ERGP ERROR =6 CF A5,ENDBLK END OF BLOCK =6 RF(NZ) ERGP ERROR =6 AGP415 EQU * =1 IFT ABIS=1 =1 ANK A2,/4 PAPER IN ? =1 RF(NZ) AGP420 YES =1 LDK A1,/20 SET RETURN CODE =1 XIF =1 AGP420 EQU * CF A15,UPDAPP UPDATE HEAD POSITION COUNTER LDKL A4,/FBFF =3 ANS A4,DWTDEV,A6 RESET 'LINE FEED CONTROL' =3 ENDIO EQU * =6(=3) CF A15,TENDIO END I/O EXIT ABL LDISP GO TO DISPATCHER =3 AGP430 EQU * LD A3,DWTA3,A6 ST A3,6,A8 EFF. LENGTH RB AGP415 =1 EJECT * * * UPDAPP = SUBROUTINE TO UPDATE HEAD * POSITION POINTER WHEN END * OF REQUEST IS REACHED UPDAPP EQU * LC A3,DWTBC+DWTDEV,A6 GET POSITION COUNTER =3 ADS A3,DWTAP+DWTDEV,A6 UPDATE HEAD POSITION POINTER =3 LDK A3,0 SC A3,DWTBC+DWTDEV,A6 RESET POSITION COUNTER =3 RTN A15 IFT SUPSPA=1 EJECT * * * SKIPSP = SUBROTINE TO SKIP SPACES * IN END OF ECB-BUFFER. * REQUESTED LENGTH IN ECB IS UPDATED. * A1,A2,A4 - WORK REG * SKIPSP EQU * LD A1,2,A8 GET BUFFER ADDRESS (BA) LD A2,4,A8 GET REQUESTED LENGTH(RL) ADR A1,A2 GET ADD END OF BUFFER SKIP05 CWK A2,2 RF(NG) SKIP30 RL < 3 SUK A1,1 DECR. BA LCR A4,A1 GET CHAR CCK A4,/2020 SPACE ? RF(NE) SKIP20 NO SKIP07 SUK A2,1 DECR RL RB SKIP05 GET NEXT SKIP20 CWK A2,4 RF(NG) SKIP30 RL < 5 LC A4,-2,A1 GET CHAR CCK A4,/1111 TABULATION CHAR ? RF(NE) SKIP30 NO SUK A1,2 DECR BA SUK A2,2 DECR RL RB SKIP07 GET NEXT * SKIP30 ST A2,4,A8 STORE NEW RL RTN A15 XIF EJECT * * E R G P * * ERROR ROUTINE * * ERGP EQU * =3 LDR A2,A1 SAVE RETURN CODE =10 ANK A1,/12 OUTPUT ERROR OR LRC-ERROR ? =10(=9) RF(NZ) RCGP YES, EXECUTE RECOVERY =9 LDR A7,A7 ORDER 0 ? =3 =6(=3) RF(NZ) ERGP10 NO =6 LDK A1,OPERR SET RETURN CODE NOT OPERABLE =6 RB ENDIO END I/O =6 * ERGP10 EQU * =6 ANK A2,/08 SOFTWARE TIME-OUT ? =10 RF(NZ) RCGP YES,EXECUTE RECOVERY =10 =9(=6) =9(=6) IFT RECEND=0 =3 RB EXIT =3 XIF =3 IFT RECEND=1 =3 LDK A1,OPERR SET RETURN CODE NOT OPERABLE =6 RB AGP430 =3 XIF =3 EJECT * * E C H O G P * * ECHOGP = DEVICE-DEPENDENT ECHO-ROUTINE * ECHOGP EQU * IFT ECHO=1 U =12 LDK A4,COSPAC LDR A7,A7 END OF ECHO ? RF(N) ECGP17 YES * IFT EORECH=0 * SUK A2,/80 EOR-CHARACTER RF(NN) ECGP20 YES ADK A2,/80 * XIF IFT ECHO=1 U =12 * LDR A1,A2 ANK A1,/7F SUK A1,/8 RF(E) ECGP40 BACKSPACE SUK A1,/2 LINE FEED =1 RF(E) ECGP05 YES =3(=1) SUK A1,/3 CR =1 RF(E) ECGP05 YES =3(=1) SUK A1,/B =1 RF(E) ECGP50 CLEAR SUK A1,/20-/8-/10 CHECK THAT CHAR IS WITHIN /20-/5F RF(N) ECGP20 SUK A1,/5F-/20 RF(P) ECGP20 ECGP05 EQU * =3 LDR A3,A2 SAVE CHARACTER =3 LDK A2,COSPAC+1 BLOCK LENGTH =3 CF A5,STABLK START OF BLOCK =3 RF(NZ) ECGP20 ERROR =6 LDR A2,A3 GET CHARACTER =3 ECGP10 CF A5,OUTPUT SEND CHARACTER RF(NZ) ECGP20 ERROR =6 IM DWTPOC+DWTDEV,A6 UPDATE POSITION COUNTER =3 SUK A4,1 READY ? RF(N) ECGP80 YES =3 RF(P) ECGP60 NO, GO TO CLEAR SECTION * IFT COSPAC=1 * LDK A2,SPACE NO SEND SPACE RB ECGP10 * XIF * IFT ECHO=1 U =12 ECGP17 CF A15,UPDAPP UPDATE HEAD POSITION POINTER XIF U =12 CF A15,TENDIO SET GP DWT FREE =5 ECGP20 ABL ECHRTN RETURN TO KEYBOARD IFT ECHO=1 U =12 EJECT * * BACKSPACE * ECGP40 EQU * LDK A2,GPBSP BACKSPACE CHARACTER RB ECGP05 =3 * * CANCEL * ECGP50 EQU * LC A3,DWTBC+DWTDEV,A6 BYTE COUNTER =3 ANK A3,/FF CLEAN =3 ADK A3,1 ADD FOR CLEAR CHAR. =10 LDR A2,A3 NUMBER OF BACKSPACE CHARACTERS =3 ADK A2,2 ADD TO BLOCK LENGTH =3 CF A5,STABLK START OF BLOCK =3 RB(NZ) ECGP20 ERROR =6 LDK A2,GPCLR CLEAR CHARACTER LDK A4,3 RB ECGP10 ECGP60 LDK A2,LF LINE FEED =3 ECGP70 CF A5,OUTPUT SEND CHAR. RB(NZ) ECGP20 ERROR =6 LDK A2,/08 BACKSPACE SUK A3,1 RB(NN) ECGP70 LDK A3,0 SC A3,DWTBC+DWTDEV,A6 RESET POSITION COUNTER =3 ECGP80 EQU * =3 CF A5,ENDBLK END OF BLOCK =3 RB ECGP20 XIF U =12 EJECT * * R C G P * * RCGP = RECOVERY ROUTINE GENERAL PRINTER * * * RECOVERY IS CARRIED OUT ONLY IF * ORDER 6 IS RUNNING * * ON ENTRY: * * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS RCGP EQU * =3 =6 LDR A8,A8 BUSY ? =6 ABL(Z) ENDIO NO =11(=6) LDK A2,1 BLOCK LENGTH =10(=3) CF A5,STABLK START OF BLOCK =3 RB(NZ) ERGP ERROR =3 LDK A2,SOH RESET PRINT BUFFER CODE CF A5,OUTPUT SEND IT RB(NZ) ERGP ERROR =3 CF A5,ENDBLK END OF BLOCK =10 RB(NZ) ERGP ERROR =10 CWK A7,5 RF(E) RCGP10 CWK A7,6 ORDER 6? RF(E) RCGP05 YES =10(=6) =10(=6) CWK A7,0 ORDER 0? ABL(E) ENDIO U =7 =6(=3) ABL EXIT U =7 RCGP05 EQU * LC A2,DWTDEV,A6 GET LEFT BYTE OF STATUS WORD =3 ANK A2,/4 LINE FEED DONE ? ABL(E) ACGP NO =3(=10) LDK A2,BLKMAX BLOCK LENGTH =10 CF A5,STABLK START OF BLOCK =10 RB(NZ) ERGP ERROR =10 LDK A2,SPACE CF A5,OUTPUT SEND SPACE RB(NZ) ERGP ERROR =3 =3 LDK A2,CR CARRIAGE RETURN LDK A3,0 LD A4,DWTAP+DWTDEV,A6 GET NUMBER OF SPACES TO SEND =3 ABL ACGP46 =6 RCGP10 EQU * =6 =10(=6) =10(=6) LDK A1,TPERR SET RETURN CODE =6 ABL AGP430 * * * A B G P * * ABORT ROUTINE * ABGP EQU * U =8 CF A15,UPDAPP UPDATE HEAD POSITION POINTER =8 ABL ENDIO END I/O AND DISPATCH =8 * END