|
|
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: 14198 (0x3776)
Notes: pts_type(SC)
Names: »DRGP04.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRGP04.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRGP04.SC«
IDENT DRGP04 REL 11.0 81-03-13 870105041100 = 1 ARRANGEMENTS FOR THE FIRST VERSION OF COPY80 ARE DELETED REL 11.0 81-01-26 * **************************************** * * * * PHILIPS TERMINAL SYSTEM P T S * * D R G P 0 4 = DRIVER HARD COPY PRINTER * * * **************************************** * * THIS DRIVER HANDLES THE HARD COPY * PRINTER HP 75 ( COPY 80 ). * * THE FOLLOWING ORDERS ARE TREATED : * * ORDER /00: TEST STATUS * ORDER /05: BASIC WRITE * ORDER /06: STANDARD WRITE * ORDER /24: TEST OUTPUT BUFFER AND SET PRINTER PARAMETER * * NORMAL REGISTER USAGE : * * A1 = RETURN CODE * A2 = OUTPUT CHARACTER * A3 = BUFFER INDEX * A4 = WORK REGISTER * A5 = STACK BASE * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS * * SYSTEM ADAPTION * * ORDER /24, TEST OUTPUT BUFFER AND SET PRINTER * PARAMETER CAN BE EXCLUDED BY MEANS OF CONDI- * TIONAL ASSEMBLY. THEN THE WRITE REQUESTS ARE * FINISHED WITHOUT WAITING FOR THE OUTPUT BUF- * FER TO BE EMPTY. EJECT * ****************************************** * * ENTRY * ****************************************** * ENTRY GPAD04 ADDRESS TO ADDRESSBLOCK * **************************************** * * EXTERNAL TOSS MODULE ENTRIES * **************************************** * EXTRN STABLK START OF BLOCK EXTRN OUTPUT OUTPUT OF ONE CHARACTER EXTRN ENDBLK END OF BLOCK EXTRN INPUT INPUT ONE CHARACTER EXTRN GETCHR GET ONE CHARACTER FROM ECB-BUFFER EXTRN ABORT ABORT INPUT REQUEST EXTRN SETIME SETS TIMER EXTRN LENDIS END I/O WITH DISPATCH EXTRN LENDER END I/O WITH ERROR AND DISPATCH * * ECB DISPLACEMENTS * EXTRN ECBBA BUFFER ADDRESS EXTRN ECBRL REQUESTED LENGTH EXTRN ECBRC RETURN CODE EXTRN ECBCW CONTROL WORD * * DWT DISPLACEMENTS * EXTRN DWTOR ORDER EXTRN DWTDEV TERMINAL DEVICE STATUS WORD * DWTBLC EQU 2 CHARACTERS IN BLOCK COUNTER DWTLFC EQU 4 LINE FEED COUNTER DWTTP EQU 6 TIMER POINTER * ****************************************** * * CONSTANTS * ****************************************** * LF EQU /0A LINE FEED ETX EQU /3 ETX ( /03 ) CCERR EQU /4 CODE CHECK ERROR TIME EQU /1 100 MILLISECONDS * **************************************** * * ADDRESS BLOCK * **************************************** * DATA DVBLEN BUFFER LENGTH DATA 2 DEVICE INDEX GPAD04 EQU * DATA ACGP04 ACTIVATION PART DATA ABGP04 ABORT ROUTINE DATA 0 NO INTERRUPT HANDLER DATA RCGP04 RECOVERY ROUTINE DATA 0 NO ECHO ROUTINE * **************************************** * * CONDITIONAL ASSEMBLY * **************************************** * * ORDER /24 MAY BE EXCLUDED BY SETTING X:A = 0 * X:A EQU 1 ORD24 EQU X:A * * * MEMORY MANAGEMENT BUFFER SIZE * X:B EQU 80 DVBLEN EQU X:B * * MAXIMUM BLOCK SIZE * X:C EQU /80 MAXBLK EQU X:C * * EJECT * ***************************************** * * A C G P 0 4 = ACTIVATION PART * * THIS PART CHECKS THE ORDER AND BRANCHES * TO THE APPROPRIATE PART OF THE DRIVER. * ***************************************** * ACGP04 EQU * LDK A3,0 RESET BUFFER INDEX LDK A2,MAXBLK GET BLOCK SIZE CF A5,STABLK START BLOCK RF(NZ) GPER10 NOT OK ! CM DWTBLC+DWTDEV,A6 CLEAR CHARACTERS IN BLOCK COUNTER * * TEST ORDER * LDR A7,A7 GET ORDER RF(Z) GP400 ORDER /00, TEST STATUS SUK A7,5 RF(N) REQERR REQUEST ERROR ! SUK A7,/1F IFT ORD24=1 RF(Z) GP400 ORDER /24, TEST OUTPUT BUFFER AND SET PARAM. XIF IFT ORD24=0 RF(Z) REQERR ORDER /24 IS EXCLUDED ! XIF ADK A7,/1E RF(P) REQERR REQUEST ERROR ! RF(N) GP200 ORDER /05, BASIC WRITE ! ADK A7,1 RF(P) GP100 ORDER/06, STANDARD WRITE ! * * REQUEST ERROR * REQERR EQU * CF A5,ENDBLK END OF BLOCK ABL LENDER SET RETURN CODE AND END I/O EJECT * **************************************** * * WRITING PART * * THIS IS THE ENTRY POINT FOR ORDER /06, STANDARD WRITE. * THE REQUESTED LENGTH IS CHECKED, THE CONTROL CHARACTER * IS TREATED AND THE REST OF THE CHARACTERS ARE SENT * AFTER INDIVIDUAL CODE CHECK. * ***************************************** * GP100 EQU * * * TEST REQUESTED LENGTH * LD A2,ECBRL,A8 GET REQUESTED LENGTH SUK A2,2 LESS THAN TWO ? RF(NN) GP110 NO ! RB REQERR YES ! REQUEST ERROR ! * * TEST CONTROL CHARACTER * GP110 EQU * LD A2,ECBBA,A8 GET BUFFER ADDRESS LC A2,1,A2 GET CONTROL CHARACTER ANK A2,/FF ADK A3,2 INCREMENT BUFFER INDEX SUK A2,/30 EXTRA LINE FEED ? RF(NZ) GP200 NO ! LDK A2,LF YES ! LOAD CODE FOR LINE FEED C1S DWTBLC+DWTDEV,A6 SET POS COUNTER TO -1 RF GP210 SEND IT ! EJECT * **************************************** * * THIS IS THE ENTRY POINT FOR ORDER /05, BASIC WRITE. * THE REQUESTED NUMBER OF CHARACTERS ARE SENT TO * PRINTER FROM THE ECB-BUFFER. * **************************************** * GP200 EQU * CF A15,GETCHR FETCH CHARACTER FROM ECB-BUFFER LDR A1,A1 IS THERE ANY CHARACTER TO SEND ? RF(NP) GP350 NO ! * LDR A7,A7 YES ! ORDER /06 ? RF(P) GP300 YES ! CHECK CHARACTER CODE * CWK A2,LF LINE FEED ? RF(NE) GP220 NO ! * GP210 EQU * IM DWTLFC+DWTDEV,A6 YES ! INCR. LF-COUNTER * GP220 EQU * IM DWTBLC+DWTDEV,A6 INCR. CHARACTERS IN BLOCK COUNTER * LDK A1,MAXBLK GET MAX BLOCK SIZE CW A1,DWTBLC+DWTDEV,A6 BLOCK FULL ? RF(G) GP240 NO ! * LDR A4,A2 YES ! SAVE CHARACTER CF A5,ENDBLK END OLD BLOCK RF(NZ) GPER10 AND START A NEW ONE CM DWTBLC+DWTDEV,A6 CLEAR COUNTER LDK A2,MAXBLK CF A5,STABLK RF(NZ) GPER10 LDR A2,A4 RESTORE CHARACTER * GP240 EQU * CF A5,OUTPUT SEND CHARACTER GPER10 RF(NZ) GPER20 RB GP200 NEXT CHARACTER EJECT * **************************************** * * THIS PART CHECKS CHARACTER CODES * FOR STANDARD WRITE * **************************************** * GP300 EQU * LDR A4,A2 SUK A4,/20 WITHIN LIMITS ? RF(N) GP310 NO ! * SUK A4,/5F RF(P) GP305 NO, TEST SP. CHAR IM DWTBLC+DWTDEV,A6 INCR. POS. POINTER RB GP240 OK ! SEND CHARACTER * * SPECIAL CHARACTERS ? * GP305 EQU * SUK A4,/2F /AE ? ( ROOMLESS POINT ) RF(NZ) GP320 NO ! SUK A2,/80 YES ! CONVERT TO /2E ( ORDINARY POINT ) RB GP300 AND SEND GP310 EQU * ADK A4,/2 /1E OR /1F ? RF(NN) GP340 YES ! ADK A4,/A /15 - /1D ? RF(P) GP320 YES ! ADK A4,/3 /12 - /14 ? RF(P) GP340 YES ! RF(Z) GP345 /11 !! TABULATION ! ADK A4,8 /09 ? RF(Z) GP340 YES ! * * CODE CHECK ERROR * GP320 EQU * LDK A1,CCERR ILLEGAL CHAR. = BIT 13 ORS A1,ECBRC,A8 SET BIT IN RETURN CODE GP340 EQU * RB GP200 GET NEXT CHARACTER * * TABULATION HANDLING * GP345 EQU * CF A15,GETCHR MAKE TWO ASCII DIGITS TO HEX CODE LDR A4,A2 CF A15,GETCHR ANK A2,/F ANK A4,/F RF(Z) GP347 GP346 ADK A2,/A SUK A4,1 RB(NZ) GP346 GP347 LD A4,DWTBLC+DWTDEV,A6 GET POS. POINTER SUR A2,A4 RB(NP) GP200 NO TABULATION POSSIBLE LDR A4,A2 NUMBER OF SPACES TO SEND GP348 LDK A2,/20 SPACE CF A5,OUTPUT SEND RF(NZ) GPER20 NOT OK ! SUK A4,1 MORE TO SEND ? RB(P) GP348 YES ! RB GP200 NO TAKE NEXT CHARACTER EJECT * **************************************** * * THIS IS THE COMPLETION PART OF THE WRITE REQUESTS * **************************************** * GP350 EQU * LDR A7,A7 BASIC WRITE ? RF(N) GP420 YES ! DON'T SEND LF * **************************************** * * THIS IS THE ENTRY POINT FOR ORDER /00, * TEST STATUS AND ORDER /24, TEST OUTPUT * BUFFER AND SET PRINTER PARAMETER. * ***************************************** * GP400 EQU * LDK A2,LF LINE FEED CF A5,OUTPUT SEND RF(NZ) GPER20 NOT OK ! IM DWTLFC+DWTDEV,A6 INCREMENT LINE FEED COUNTER GP420 EQU * * =1 LDK A2,ETX ETX ( /03 ) CF A5,OUTPUT SEND RF(NZ) GPER20 NOT OK ! * CF A5,ENDBLK END OF BLOCK RF(NZ) GPER20 NOT OK ! * LDR A7,A7 TEST STATUS OR ORDER /24 ? RF(Z) GP440 YES ! DON'T TEST MODE * IFT ORD24=0 RF GP480 WRITE REQUESTS ARE FINISHED WITHOUT * CHECKING THE OUTPUT BUFFER XIF IFT ORD24=1 LD A1,DWTDEV,A6 GET STATUS WORD RF(NN) GP480 WRITE REQUESTS MAY BE FINISHED * BEFORE THE OUTPUT BUFFER IS EMP XIF * GP440 EQU * * * SET TIMER. TIME BEFORE TIMEOUT IS DEPENDING * ON THE NUMBER OF LINE FEEDS THAT ARE SENT * LDR A1,A6 DWT-ADDRESS IN A1 CF A15,SETIME DATA GPTUT,TIME ST A4,DWTTP+DWTDEV,A6 STORE TIMER POINTER LD A2,DWTLFC+DWTDEV,A6 NUMBER OF LINE FEEDS SLC A2,3 COMPUTE TIME C1R A2,A2 STR A2,A4 SET NEW TIME * * READ /02 FROM PRINTER * CF A5,INPUT READ * * /02 COMES ! * CM* DWTTP+DWTDEV,A6 TURN OFF TIMER LD A7,DWTOR,A6 GET ORDER ANK A7,/FF AND MASK SUK A7,/24 ORDER /24 ? RF(NZ) GP480 NO ! END I/O * LDKL A2,/8000 LD A1,ECBCW,A8 YES ! SET PRINTER PARAMETER. RF(Z) GP460 ORS A2,DWTDEV,A6 SET BIT 0 IN DWTDEV RF GP480 GP460 EQU * C1R A2,A2 COMPLEMENT ANS A2,DWTDEV,A6 CLEAR BIT 0 * * END OF REQUEST * GP480 EQU * LDK A1,0 SET RETURN CODE = 0 ENDIO EQU * GPER20 EQU * CM DWTLFC+DWTDEV,A6 RESET LINE FEED COUNTER ABL LENDIS END I/O WITH DISPATCH EJECT * **************************************** * * TIMEOUT ROUTINE * **************************************** * GPTUT EQU * LDR A6,A1 GET DWT-ADDRESS IN A6 CF A15,ABORT RESET INPUT REQUESTED BIT LDK A1,1 SET RETURN CODE ( NOT OPERABLE ) * =1 RB ENDIO * **************************************** * * ABORT ROUTINE * **************************************** * ABGP04 EQU * CF A15,ABORT RESET INPUT REQUESTED BIT CM DWTTP+DWTDEV,A6 RESET TIMER RB ENDIO EJECT * ****************************************** * * RECOVERY ROUTINE * ****************************************** * RCGP04 EQU * LDR A8,A8 BUSY ? RF(Z) RCGP10 NO ! * CF A15,ABORT RESET INPUT REQUESTED FLAG CM DWTTP+DWTDEV,A6 RESET TIMER LDK A1,2 SET RETURN CODE ( THROUGHPUT ERROR ) RCGP10 EQU * RB ENDIO END