|
|
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: 11102 (0x2b5e)
Notes: pts_type(SC)
Names: »DRLP01.SC«
└─⟦5c22ed822⟧ Bits:30009675 Philips computer tape "600209"
└─⟦this⟧ »M:DENJ/DRLP01.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »M:DENJ/DRLP01.SC«
IDENT DRLP01 REL 10.0 80-03-14 870105041000 * * ********************************************************** * * 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 * ***************************************** * * PROGRAMMED CHANNEL MAY BE USED INSTEAD OF * MULTIPLEX CHANNEL BY SETTING X:A=1 * X:A EQU 0 CHAN EQU 0 * * 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 162 * * 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. * * 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 * ACERR ABL DISIOE * 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=0 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 XIF * IFT CHAN=1 ST A4,DWTA3,A6 SAVE BUFFER ADDRESS ADR A4,A2 ST A4,DWTA4,A6 SAVE BUFFER END ADDRESS+1 XIF * 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=0 IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CHAN=0 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT CHAN=1 STR A1,A15 STR A2,A15 LDKL A2,DWLP01 DWT-ADDRESS LD A1,DWTA3,A2 POINTER AT NEXT BYTE IN BUFFER LCR A2,A1 NEXT BYTE OTR A2,0,DWALP WRITE ONE BYTE RF(NA) IHLP20 NOT ACCEPTED LDKL A2,DWLP01 DWT-ADDRESS ADK A1,1 ST A1,DWTA3,A2 UPDATE POINTER CW A1,DWTA4,A2 RF(NE) IHLP10 NOT LAST BYTE CIO A2,0,DWALP CIO HALT IHLP10 EQU * LDR* A2,A15 LDR* A1,A15 RTN A15 * * * IHLP20 STR A3,A15 STR A4,A15 STR A5,A15 STR A6,A15 STR A7,A15 STR A8,A15 XIF * 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 * IFT CHAN=0 RER A3,MUXLP GET NUMBER OF NOT TRANSFERED CHAR. ANKL A3,/FFF LD A2,4,A8 CALCULATE NUMB. OF TRANSFERED CHARACTERS SUR A2,A3 XIF * EJECT DRLP01 * * IFT CHAN=1 LD A2,DWTA3,A6 GET BUFFER-POINTER CWK A7,6 ORDER 6? RF(NE) IHLP35 ADK A2,1 YES IHLP35 EQU * SU A2,2,A8 CALCULATE NUMB. OF TRANSFERED CHARACTERS XIF 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