|
|
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: 20404 (0x4fb4)
Notes: pts_type(SC)
Names: »DRGP01.SC«
└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
└─⟦this⟧ »M:LP/DRGP01.SC«
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
└─⟦this⟧ »M:LP/DRGP01.SC«
IDENT DRGP01 REL 10.0 80-03-14 870105041000 PRR 10.0 79-12-07 =3,CORRECTION OF MMU BUFFER EQUATE 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 DRKB01. * * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C G P ACTIVATION PART * * I H G P INTERRUPT HANDLER * * 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 DISIOE I/O REQUEST ERROR EXTRN OUTPUT SUBROUTINE TO SEND CHARACTER EXTRN TDISP DISPATCHER EXTRN LDREG LOAD REGISTERS A4, A3, A5, A7, A8 AND RETURN EXTRN TENDIO END I/O EXTRN SAVE8 SAVE 8 REGISTERS ON A15 STACK EXTRN ECHRTN RETURN TO KEYBOARD AFTER ECHO EXTRN GETCHR GET CHARACTER FROM ECB-BUFFER EJECT * * ************************ * DWT PARAMETERS * ************************ * * EXTRN DWTST STATUS EXTRN DWTBC BYTE COUNTER EXTRN DWTOR ORDER EXTRN DWTA3 SAVE AREA A3 * 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 * EJECT * * ************************************** * CONDITIONAL ASSEMBLY * ************************************** * * IT IS POSSIBLE TO EXCLUDE ROOMLESS POINT * FUNCTION BY SETTING X:A = 0 * X:A EQU 1 CROOM EQU 1 * * ACCEPTANCE OF SPECIAL CHARACTER /13 CAN BE * INCLUDED IN THE DRIVER BY SETTING X:B=1 * X:B EQU 0 TRETON EQU 0 * * ACCEPTANCE OF SPECIAL CHARACTER /14 CAN BE * INCLUDED IN THE DRIVER BY SETTING X:C=1 * X:C EQU 0 FJOTON EQU 0 * * IT IS POSSIBLE TO EXCLUDE ECHOING OF * AN EXTRA SPACE AFTER EACH CHARACTER * BY SETTING X:D=0 * X:D EQU 0 COSPAC EQU 0 * 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:E=0. * X:E EQU 0 EORECH EQU 0 * * SUPPRESSING OF SPACES IN RIGHT HAND OF LINE * BY SETTING X:F=1 * X:F EQU 0 SUPSPA EQU 1 * * END OF REQUEST IN SITUATIONS WHERE * THE SELECTOR UNIT OR PRINTER HARDWARE * IS INACTIVE CAN BE CHOSEN BY SETTING * THE CONSTANT RECEND = 1 X:G EQU 0 RECEND EQU 0 * * 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 0 * * MMU BUFFER SIZE * X:H EQU 120 DVBLEN EQU 000 * =1 * SPECIAL CONDITION FOR ABIS PRINTER =1 ABIS EQU 0 =1 EJECT * * ******************************** * DWT-DISPLACEMENT * ******************************** * * DWTDRD EQU /10 START OF DRIVER DEFINED PART * IFT MMUPAG=0 START EQU DWTDRD XIF * IFT MMUPAG=1 START EQU DWTDRD+4 XIF * DWTAP EQU START+/12 HEAD POSITION POINTER * ************************************** * 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 0 ABORT ROUTINE ADDRESS DATA IHGP 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 * LDK A2,STX START OF MESSAGE LDR A3,A7 =1 RF(Z) ACGP10 ORDER 0 =2 SUK A3,5 =1 RF(E) ACGP09 ORDER 5 =1 SUK A3,1 =1 ABL(NE) DISIOE I/O REQUEST ERROR =1 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 RF(E) ACGP06 CONTROL CHAR 2B =1 CF A5,OUTPUT SEND STX =1 LDK A2,CR =1 CF A5,OUTPUT =1 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 LDK A2,LF =1 ACGP03 LDK A1,1 RESET HEAD POS COUNTR =1 ST A1,DWTAP,A6 =1 ACGP06 LDK A3,2 START BUFFER INDEX =1 ACGP09 CF A5,OUTPUT =1 RF ACGP19 =1 EJECT =2 * =2 * ORDER 00: TEST =2 * IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE =2 * =2 ACGP10 LDK A2,2 SEND CHAR /02 =2 CF A5,OUTPUT =2 LDK A2,0 SEND CHAR /00=END OF TEST =2 CF A5,OUTPUT =2 RF AGP410 =2 EJECT * * GET, CHECK AND SEND CHARACTER * (IF ORDER 5 NO CHECK) * ACGP17 CF A5,OUTPUT ACGP18 IM DWTST,A6 POSITION COUNTER UPDATING ACGP19 EQU * LDKL A4,/400 INDICATE LINE FEED DONE ORS A4,DWTST,A6 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 SUK A7,5 ORDER 5? RF(E) ACGP24 BASIC WRITE SUK A1,9 HARDWARE TABULATION ? RF(NE) ACGP22 ST A4,DWTAP,A6 RESET HEAD POSITION POINTER 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 DWTST,A6 SET POS LTR.TO 0 CM DWTAP,A6 RESET HEAD POS.POIINTER ACGP26 ADK A1,3 RB(NZ) ACGP17 NOT LINE FEED SUK A1,1 ADS A1,DWTST,A6 DECREMENT POS COUNTER 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,A6 SUBTRACT HEAD POSITION POINTER LC A4,DWTBC,A6 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 IM DWTST,A6 INCREMENT BUFFER INDEX SUK A4,1 RB(P) ACGP45 LDR A3,A3 RECOVERY? RB(NE) ACGP20 SC A4,DWTBC,A6 RESET POSITION POINTER 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 * LDK A2,ETB END OF MESSAGE CF A5,OUTPUT SEND AGP410 LDK A2,ETX LAST DUMMY CF A5,OUTPUT SEND 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 ENDIO CF A15,TENDIO END I/O EXIT ABL TDISP GO TO DISPATCHER 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,A6 GET POSITION COUNTER ADS A3,DWTAP,A6 UPDATE HEAD POSITION POINTER LDK A3,0 SC A3,DWTBC,A6 RESET POSITION COUNTER 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 * * I H G P * * INTERRUPT * IHGP EQU * LD A4,DWTST,A6 BUSY? RB(N) EXIT NO SLL A4,2 ECHO MODE ? RF(N) IHGP10 LDR A7,A7 ORDER 0? RF(Z) IHGP20 =2 LDR A1,A1 RETURN CODE FROM CHANNEL UNIT ? IFT RECEND=0 RB(NZ) EXIT XIF IFT RECEND=1 RB(NZ) AGP430 XIF IHGP10 ABL LDREG RELOAD A3-A5 AND RETURN VIA A5 IHGP20 LDR A1,A1 =2 RB(Z) IHGP10 TEST ORDER AND TIME OUT =2 RB ENDIO =2 EJECT * * E C H O G P * * ECHOGP = DEVICE-DEPENDENT ECHO-ROUTINE * ECHOGP EQU * LDK A4,COSPAC LDR A7,A7 EOR? RF(N) ECGP17 YES * IFT EORECH=0 * SUK A2,/80 EOR-CHARACTER RF(NN) ECGP20 YES ADK A2,/80 * XIF * LDR A1,A2 ANK A1,/7F SUK A1,/8 RF(E) ECGP40 BACKSPACE SUK A1,/2 LINE FEED =1 RF(E) ECGP10 YES =1 SUK A1,/3 CR =1 RF(E) ECGP10 YES =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 ECGP10 CF A5,OUTPUT SEND CHARACTER IM DWTST,A6 UPDATE POSITION COUNTER SUK A4,1 READY ? RF(N) ECGP20 YES RF(P) ECGP60 NO, GO TO CLEAR SECTION * IFT COSPAC=1 * LDK A2,SPACE NO SEND SPACE RB ECGP10 * XIF * ECGP17 CF A15,UPDAPP UPDATE HEAD POSITION POINTER ECGP20 ABL ECHRTN RETURN TO KEYBOARD EJECT * * BACKSPACE * ECGP40 EQU * LDK A2,GPBSP BACKSPACE CHARACTER RB ECGP10 * * CANCEL * ECGP50 EQU * LDK A2,GPCLR CLEAR CHARACTER LDK A4,3 RB ECGP10 ECGP60 LDK A2,LF LINE FEED LC A3,DWTBC,A6 ANK A3,/FF ECGP70 CF A5,OUTPUT SEND CHAR. LDK A2,/08 BACKSPACE SUK A3,1 RB(NN) ECGP70 LDK A3,0 SC A3,DWTBC,A6 RESET POSITION COUNTER RB ECGP20 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 * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LD A2,DWTST,A6 BUSY ? RB(N) EXIT NO LDK A2,SOH RESET PRINT BUFFER CODE CF A5,OUTPUT SEND IT CWK A7,5 RF(E) RCGP10 CWK A7,6 ORDER 6? RF(E) RCGP05 YES CWK A7,0 ORDER 0? RB(E) ENDIO RB EXIT RCGP05 EQU * LC A2,DWTST,A6 GET LEFT BYTE OF STATUS WORD ANK A2,/4 LINE FEED DONE ? ABL(E) ACGP NO LDK A2,SPACE CF A5,OUTPUT SEND SPACE LDK A2,STX CF A5,OUTPUT SEND STX LDK A2,CR CARRIAGE RETURN LDK A3,0 LD A4,DWTAP,A6 GET NUMBER OF SPACES TO SEND ABL ACGP46 RCGP10 LDK A1,TPERR SET RETURN CODE ABL AGP430 END