|
|
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: 14304 (0x37e0)
Notes: pts_type(SC)
Names: »DRLP01.SC«
└─⟦7a1dcd5a9⟧ Bits:30009673 Philips computer tape "600134"
└─⟦this⟧ »PTMON/DRLP01.SC«
IDENT DRLP01 REL 11.0 83-11-17 870105041100 =DK1, CHAR. CONV. FOR 6883 DK1= MMU BUFFER =256 FOR BASIC WRITE =1,WHEN CHAN=1 DRIVER WILL SERVE BOTH MUX AND PC REL 10.0 80-03-14 * * ********************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRLP01 = DRIVER LINE PRINTER * * * * * * ********************************************************** * * * THIS DRIVER HANDLES ONE LINE PRINTER PTS 6881 CONNECTED * TO CPU VIA CHLP ON MULTIPLEX CHANNEL OR PROGRAMMED * CHANNEL * EJECT DRLP01 * * ************************ * ENTRIES * ************************ * * ENTRY LPADR ADDRESS BLOCK ENTRY ACLP ACTIVATION DRIVER ENTRY IHLP INTERRUPT HANDLER ENTRY LPON RECOVERY ROUTINE ENTRY DWLP01 DWT FOR LINE PRINTER * * **************************************** * EXTERNAL TOSS MODULE ENTRIES * **************************************** * * EXTRN TDISP DISPATCHER EXTRN TENDIO END I/O EXTRN SAVE8 SAVE 8 REGS ON STACK EXTRN DISIOE REQUEST ERROR EXTRN DWTST STATUS EXTRN DWTBC BYTE COUNTER EXTRN DWTECB ECB ADDRESS EXTRN DWTOR DWT INDEX AND ORDER EXTRN DWTA3 SAVE AREA A3 EXTRN DWTA4 SAVE AREA A4 EXTRN DWTA5 SAVE AREA A5 EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN INTSAV SAVE AREA LAST INTERRUPT EXTRN PFPOST PWF POST PROCESSING FLAG EJECT DRLP01 * * ***************************** * CONSTANTS * ***************************** * * DWALP EQU /0F MUXLP EQU DWALP+DWALP MUX ADDRESS * EJECT DRLP01 * * ***************************************** * * CONDITIONAL ASSEMBLY * ***************************************** * * IF X:A=0 THE DRIVER WILL ONLY SERVE MUX =1 * IF X:A=1 THE DRIVER WILL SERVE BOTH MUX AND PC =1 * X:A EQU 0 CHAN EQU 1 * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * MMU BUFFER SIZE * X:B EQU 67 DVBLEN EQU 128 * * MMU DEVICE INDEX * X:C EQU 2 DEVIND EQU X:C LINE PRINTER DEVICE INDEX * EJECT DRLP01 * * *********************** * ORDERS * *********************** * * ORDER /00: TEST STATUS. * A TST INSTRUCTION IS EXECUTED TO SEE * IF LINE PRINTER IS OPERABLE. * * ORDER /05: BASIC WRITE. * * ORDER /07: BASIC WRITE WITH CHARACTER CONVERSION * FOR 6883 PRINTER.. * THE REQUESTED NUMBER OF CHARACTERS ARE * SENT TO THE LINE PRINTER WITHOUT ANY CHECK. * * ORDER /06: STANDARD WRITE. * FIRST WORD IN ECB BUFFER CONTAINS A CONTROL * CHARACTER. * /2B: PRINT LINE WITHOUT ADVANCING PAPER * /30: ADVANCE TWO LINES BEFORE PRINTING * /31: SKIP TO TOP OF FORM BEFORE PRINTING * OTHER CHARACTERS GIVES A LINE FEED BEFORE * PRINTING. * * * CHARACTERS IN BUFFER SHOULD BE WITHIN THE * INTERVAL /20-/5F. NO CHECK IS CARRIED OUT * BY DRIVER. AT THE END OF ECB BUFFER ONE BYTE * MUST BE RESERVED FOR THE DRIVER TO STORE A * PRINT CHARACTER. * EJECT DRLP01 * * ************************************ * NORMAL REGISTER USAGE * ************************************ * * * A1 = RETURN CODE * A2 = WORK REGISTER * A3 = WORK REGISTER * A4 = BUFFER ADDRESS * A5 = STACK BASE * A6 = DWT ADDRESS * A7 = ORDER * A8 = ECB ADDRESS * * ******************************** * TABLES * ******************************** * * DATA DVBLEN+DVBLEN MMU BUFFER LENGTH DATA DEVIND DEVICE INDEX LPADR DATA ACLP ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS * EJECT DRLP01 * * * A C T I V A T I O N * * ACLP EQU * LDK A1,/0D CARRIAGE RETURN LDR A7,A7 ORDER 0 ? RF(NE) ACLP05 NO LDKL A4,DWTBC BYTE COUNTER ADR A4,A6 ADD DWT ADDRESS SCR A1,A4 STORE CARRIAGE RETURN LDK A2,1 RF ACLP30 * ACLP05 LD A4,2,A8 BUFFER ADDRESS LD A2,4,A8 REQ. LENGTH SUK A7,5 ORDER 5 ? RF(E) ACLP30 SUK A7,1 ORDER 6 ? RF(E) ACLP10 * SUK A7,1 ORDER = 07 RF(E) ACLP07 YES ACERR ABL DISIOE * ACLP07 EQU * LDK A1,/05 REPLACE ORDER IN DWT SC A1,DWTOR+1,A6 LDKL A1,IHLP50 CHANGE BRANCH ADDR. ST A1,IHLPXX IN INTERRUPT HANDLER RF ACLP30 PROCESS AS ORDER 5 EJECT DRLP01 * * ACLP10 EQU * CWK A2,2 REQ. LENGTH < 2 ? RF(NL) ACLP12 NO LDK A2,2 YES , SAME ACTIONS AS FOR REQ. LENGTH=2 * ACLP12 EQU * LDR A3,A4 BUFFER ADDRESS ADR A3,A2 ADDED WITH REQ. LENGTH SCR A1,A3 STORE PRINT CHARACTER ADK A2,1 LCR A3,A4 ECR A3,A3 LC A3,1,A4 GET CONTROL CHARACTER ST A3,CONCHA ANK A3,/FF SUK A3,/2B SUPER POSITIONING ? RF(NE) ACLP15 NO SUK A2,2 DECREMENT REQ. LENGTH ADK A4,2 INCREMENT BUFFER ADDRESS RF ACLP30 * ACLP15 LDK A1,/0A LINE FEED SC A1,1,A4 SECOND CHARACTER IN BUFFER SUK A3,5 TWO LINE FEEDS ? RF(E) ACLP20 YES LDK A1,/0C TOP OF FORM SUK A3,1 WANTED ? RF(E) ACLP20 YES LDK A1,/0D CARRIAGE RETURN * EJECT DRLP01 * * ACLP20 SCR A1,A4 STORE FIRST CHARACTER IN BUFFER ACLP30 CF A5,CIOSTA SEND BUFFER SUK A7,6 ORDER 6 ? RF(NE) ENDIO LDR A2,A2 RF(NN) ACLP35 IM 6,A8 ADD FOR EXTRA CHAR. AT BUFFER END (/0D) * ACLP35 EQU * LD A4,2,A8 BUFFER ADDRESS LDKL A3,0 CONCHA EQU *-2 SC A3,1,A4 RESET CONTROL CHARACTER IN BUFFER ECR A3,A3 SCR A3,A4 ALSO RESET FIRST BYTE * ENDIO CF A15,TENDIO END REQUEST EXIT ABL TDISP * EJECT DRLP01 * * * CIOSTA * SUBROUTINE TO SEND BUFFER * * CIOSTA EQU * ST A5,DWTA5,A6 SAVE A5 IFT CHAN=1 =1 NGR A1,A2 NEGATE BUFFER LENGTH =1 ST A1,DWTA3,A6 END OF BUFFER INDICATOR =1 ST A4,DWTA4,A6 BUFFER POINTER =1 XIF =1 ORKL A2,/4000 INDICATE CHARACTER MODE, OUTPUT AND IN RIGHT BYTE NUMBER OF CHARACTERS TO SEND WER A2,MUXLP FIRST WRITE EXTERNAL REGISTER WER A4,MUXLP+1 SECOND WRITE EXTERNAL REGISTER * LD A1,PFPOST RB(NZ) EXIT PFINIT PENDING CIO A2,1,DWALP CIO START RB(Z) EXIT LDK A1,1 ERROR RB ENDIO * EJECT DRLP01 * * * RECOVERY ROUTINE * * LPON 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 * LDK A1,1 NOT OPERABLE LDKL A6,DWLP01 DWT ADDRESS LD A2,DWTST,A6 DWT STATUS RB(N) EXIT LP FREE RF IHLP30 * EJECT DRLP01 * * * I N T E R R U P T * * IHLP EQU * ST P,INTSAV SAVE LAST INTERRUPT * IFT CHAN=1 STR A1,A15 STR A2,A15 LDKL A1,DWLP01 DWT ADDRESS =1 LC* A2,DWTA4,A1 NEXT BYTE TO PRINT =1 ABL IHLP05 VARIABLE BRANCH FOR CHAR. CONV. IHLPXX EQU *-2 IHLP05 EQU * OTR A2,0,DWALP WRITE ONE BYTE RF(NA) IHLP20 NOT ACCEPTED LDKL A1,DWLP01 RESTORE DWT POINTER IM DWTA4,A1 INCREMENT BUFFER POINTER =1 IM DWTA3,A1 INCREMENT END OF BUFFER INDICATOR =1 RF(N) IHLP10 NOT LAST BYTE =1 LDKL A1,IHLP05 RESTORE BRANCH ADDRESS DK2 ST A1,IHLPXX CIO A2,0,DWALP CIO HALT IHLP10 EQU * LDR* A2,A15 LDR* A1,A15 RTN A15 EJECT * * CHARACTER CONVERSION FOR 6883 PRINTER * IHLP50 EQU * CCK A2,/5B5B IN RANGE? RF(L) IHLP90 NO, SKIP IT RF(E) IHLP70 CONVERT IT CCK A2,/5C5C CONVERT? RF(NE) IHLP60 NO, YET LDK A2,/26 CONVERSION RF IHLP80 IHLP60 EQU * CCK A2,/5D5D CONVERT? RF(NE) IHLP90 NO, SKIP IT LDK A2,/22 CONVERT IT RF IHLP80 IHLP70 EQU * LDK A2,/25 CONVERT IT IHLP80 EQU * ST A2,CONSAV SAVE THE CHARACTER LDKL A1,IHLP82 SET NEXT JUMP ADDRESS ST A1,IHLPXX LDK A2,/0E SEND SHIFT OUT OTR A2,0,DWALP RF(NA) IHLP20 QUIT ON STATUS RB IHLP10 WAIT FOR INTERRUPT IHLP82 EQU * LDKL A1,IHLP84 SET NEXT JUMP ADDRESS ST A1,IHLPXX LD A2,CONSAV GET THE CONVERTED CHAR. OTR A2,0,DWALP SEND IT RF(NA) IHLP20 QUIT ON STATUS RB IHLP10 WAIT FOR INTERRUPT IHLP84 EQU * LDKL A1,IHLP50 INSERT ORIG. JUMP ADDRESS ST A1,IHLPXX LDK A2,/0F SHIFT IN RB IHLP05 SEND + UPDATE POINTERS IHLP90 EQU * RB IHLP05 * * SAVE AREA FOR CONVERSION * CONSAV EQU * DATA 0 EJECT * * * IHLP20 EQU * =1 LDKL A1,IHLP05 RESTORE BRANCH ADDRESS ST A1,IHLPXX LDR* A2,A15 =1 LDR* A1,A15 =1 XIF * IFT CPU852=1 =1 CF A15,SAVE8 SAVE A1-A8 ON STACK =1 XIF =1 * IFT CPU852=0 =1 MSR 8,A15 SAVE A1-A8 ON STACK =1 XIF =1 * SST A1,DWALP GET STATUS LDKL A6,DWLP01 DWT ADDRESS * IHLP30 EQU * LD A7,DWTOR,A6 ORDER ANK A7,/FF LD A8,DWTECB,A6 ECB ADDRESS * LD A2,4,A8 =1 ST A2,6,A8 STORE EFF. LENGTH LD A5,DWTA5,A6 GET STACK VALUE RTN A5 * EJECT DRLP01 * * D W L P 0 1 * * DEVICE WORK TABLE FOR LINE PRINTER * DWLP01 EQU * DATA 0 CHANNEL PARAMETER DATA /8000 STATUS DATA 0 ECB ADDRESS DATA 0 ORDER DATA LPADR ADDRESS TO ADDRESS BLOCK DATA 0 TTAB ADDRESS DATA 0 WAIT/ACTIVATE INDICATOR DATA 0 TERMINAL QUEUE IFT MMUPAG=1 DATA 0 SAVE AREA USER ECB ADDRESS DATA DEVECB MMU ECB ADDRESS XIF DATA 0 OUTPUT QUEUE LINK DATA 0 SAVE AREA FOR A3 DATA 0 SAVE AREA FOR A4 DATA 0 SAVE AREA FOR A5 RES 4 DWT STACK * IFT MMUPAG=1 DEVECB EQU * DATA 0 DATA LP:BUF DATA 0,0,0,0 LP:BUF RES DVBLEN+1 XIF * END