|
|
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: 36678 (0x8f46)
Notes: pts_type(SC)
Names: »DRTP03.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRTP03.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRTP03.SC«
IDENT DRTP03 REL 11.0 81-06-24 870105041100 =4,GREEK CHAR. INCL. REL 11.0 81-01-26 =3,IMPROV. OF ORDER 37 REL 11.0 81-01-26 =2,CORR. FOR ODD ECBADDR. REL 11.0 81-01-26 =1,ABORT PROBLEM PRR 11.0 80-11-19 * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRTP03 = DRIVER TELLER TERMINAL PRINTER * * * * * ******************************************************* * * THIS DRIVER HANDLES TELLER TERMINAL PRINTER PTS 6371 * * AND CONSISTS OF THE FOLLOWING PARTS: * * A C T P : ACTIVATION PART * * R C T P : RECOVERY ROUTINE * * THE ACTIVATION PART SELECTS THE ACTUAL ORDER PROCESSOR. * A STRING IS SET UP AND TRANSFERED TO THE PRINTER. * THE STRING BEGINS WITH A DEDICATED PRINTER CHARACTER. * THE CONTENTS OF THE STRING IS EITHER A FIXED FORMATTED * BUFFER OR FOR ORDER WRITE THE USER BUFFER. * THE STRING IS TERMINATED WITH AN EXECUTION CHARACTER. * AFTER EXECUTION THE PRINTER RESPONDS WITH A STATUS * CHARACTER INDICATING THE RESULT OF THE EXECUTED ORDER. * * THE RECOVERY ROUTINE IS ENTERED AFTER PROGRAM LOADING, * AFTER POWER ON FROM TERMINAL SIDE AND AFTER TRANSMISSION * TIME OUT. * THE RECOVERY ROUTINE SENDS A FIXED FORMATTED STRING TO * THE PRINTER. THIS STRING CONTAINS THE ACTUAL PARAMETERS * AND STATUS FOR THE PRINTER. EJECT * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00 : TEST STATUS * ORDER 06 : WRITE * ORDER 0B : POSITION DOCUMENT * ORDER 24 : SET PRINTER PARAMETERS * ORDER 27 : SET DOCUMENT PARAMETERS * ORDER 37 : TRANSFER DOCUMENT PARAMETERS * ORDER 38 : RELEASE DOCUMENT * * THE FOLLOWING RETURN CODES ARE USED: * * BIT 0 : REQUEST ERROR * BIT 2 : END OF JOURNAL * BIT 10 : DOCUMENT OUT * BIT 13 : CODE CHECK ERROR * BIT 15 : NOT OPERABLE * * * NORMAL REGISTER USAGE: * * REGISTER A1: WORK REGISTER * A2: INPUT/OUTPUT * A3: BUFFER POINTER * A4: OUTPUT COUNTER * A5: STACK POINTER * A6: DWT-ADDRESS * A7: ORDER * A8: ECB-ADDRESS * * EJECT * *********** * ENTRIES * *********** * * ENTRY TPAD3 ADDRESS BLOCK * * * ************* * EXTERNALS * ************* * * EXTRN LDISP DISPATCHING FROM INTERRUPT EXTRN LENDER DISPATCH I/O ERROR EXTRN LENDIS END I/O AND DISPATCH EXTRN OUTPUT OUTPUT ONE CHARACTER EXTRN GETCHR GET CHARACTER FROM ECB BUFFER EXTRN DWTST DWT STATUS DISPLACEMENT EXTRN DWTECB DWT ECB DISPLACEMENT EXTRN DWTOR DWT ORDER DISPLACEMENT EXTRN DWTSB2 STACK BASE EXTRN DWTDEV DEVICE STATUS EXTRN DTTP03 DOCUMENT TABLE ADDRESS EXTRN TLTP03 DOCUMENT TABLE LENGTH EXTRN INPUT GET STATUS INPUT CHAR EXTRN STABLK DEF. START OF BLOCK EXTRN ENDBLK DEF. END OF BLOCK EJECT * ************* * CONSTANTS * ************* * * DEDICATED PRINTER CHARACTERS (/00-/0F) * POTEST EQU /00 TEST PORECV EQU /01 RECOVERY RESTRT EQU /02 RESTART (NOT USED) ETX EQU /03 EXECUTE ORDER POPPAR EQU /04 SET PRINTER PARAMETERS PODSTA EQU /05 DIAGNOSTIC STATUS EXE EQU /06 EXECUTE (NOT USED) POTDOC EQU /07 TRANSFER DOCUMENT PARAMETERS PORDOC EQU /08 RELEASE DOCUMENT POWDOC EQU /09 WRITE DOCUMENT LF EQU /0A LINE FEED (NOT USED) POPDOC EQU /0B POSITION DOCUMENT RESET EQU /0C RESET ORDER POWJRL EQU /0D WRITE JOURNAL SPEC EQU /0E ROOMLESS POINT TEST EQU /0F TEST (NOT USED) * ENDJ EQU /2000 END OF JOURNAL STATUS DOCOUT EQU /20 DOCUMENT OUT STATUS EJECT * ************************ * CONDITIONAL ASSEMBLY * ************************ * * THE STANDARD NATIONAL CHARACTER SET IS CHOSEN * BY SETTING X:A TO 0-10 ACCORDING TO THE LIST BELOW * * NCV = 0 GREAT BRITAIN * 1 GERMANY * 2 FRANCE 1 * 3 SPAIN * 4 ITALY * 5 SWEDEN, FINLAND * 6 DENMARK, NORWAY 1 * 7 PORTUGAL * 8 YUGOSLAVIA OR FRANCE 2 (DEPENDING ON CHAR GEN) * 9 USA * 10 DENMARK, NORWAY 2 * X:A EQU 0 STDNCV EQU X:A * * THE CHARACTER FONT CAN BE SELECTED * BY SETTING X:B TO : 0=UPPER CASE/SMALL NUMERIC, 1=LOWER CASE/SMALL NUMERIC * 2=UPPER CASE/WIDER NUMERIC, 3=LOWER CASE/WIDER NUMERIC * X:B EQU 0 FONT EQU X:B * * THE STANDARD CHARACTER PITCH FOR THE DOCUMENT STATION IS CHOSEN * BY SETTING X:C TO : 0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH * X:C EQU 2 STDCPD EQU X:C * * THE JOURNAL STATION CAN BE EXCLUDED * BY SETTING X:D=0 * X:D EQU 1 JOURNL EQU X:D * * THE STANDARD CHARACTER PITCH FOR THE JOURNAL STATION IS CHOSEN * BY SETTING X:F TO : 0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH * X:E EQU 0 STDCPJ EQU X:E * * THE "SET PARAMETER" ORDERS 24 AND 27 CAN BE INCLUDED * BY SETTING X:F=1 * X:F EQU 0 PARORD EQU X:F * * 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 1 * * MMU BUFFER SIZE * X:G EQU 126 DVBLEN EQU X:G * * A REQUEST IS ALLWAYS ENDED FOR NOT OPERABLE PRINTERS * BY SETTING X:H=1 X:H EQU 0 REQEND EQU X:H * * THE CHARACTERS /B0-/B9 WILL BE CONVERTED TO /1B,/41-/1B,/4A * BY SETTING X:I=1. GREEK ADDITIONAL CHARACTERS. * X:I EQU 0 * =4 GREEK EQU X:I * =4 * * * * PRIPAR FORM 1=1,1=0,2=FONT,4=STDNCV,2=1,2=STDCPJ,2=1,2=STDCPD EJECT * ********************* * DWT-DISPLACEMENTS * ********************* * * * PP EQU /2 PRINTER PARAMETERS PPJ EQU /4 PRINT POS JOURNAL APJ EQU PPJ+1 ACTUAL PRINT POS JOURNAL RPJ EQU PPJ REQUESTED PRINT POS JOURNAL PPD EQU /6 PRINT POS DOCUMENT APD EQU PPD+1 ACTUAL PRINT POS DOCUMENT RPD EQU PPD REQUESTED PRINT POS DOCUMENT LN EQU /8 LINE NUMBER ON DOCUMENT ALN EQU LN+1 ACTUAL LINE NUMBER ON DOCUMENT RLN EQU LN REQUESTED LINE NUMBER ON DOCUMENT DP EQU /A DOCUMENT PARAMETERS * * ********************* * ECB-DISPLACEMENTS * ********************* * ECBBA EQU 2 BUFFER ADDRESS IN ECB ECBRL EQU 4 REQUESTED LENGTH IN ECB ECBEL EQU 6 EFFECTIVE LENGTH IN ECB ECBRC EQU 8 RETURN CODE IN ECB ECBCW EQU 10 CONTROL WORD IN ECB EJECT * ********** * TABLES * ********** * * * ADDRESS BLOCK * DATA DVBLEN MMU BUFFER SIZE DATA 2 DEVICE INDEX TPAD3 EQU * ADDRESS BLOCK DATA ACTP ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS DATA 0 INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE * * VALID ORDERS WITH ACTIVATION ADDRESSES * TPTAB EQU * DATA TPTAB0 DEVICE INDEX 0 TABLE DATA TPTAB1 DEVICE INDEX 1 TABLE DATA TPTAB2 DEVICE INDEX 2 TABLE DATA TPTAB3 DEVICE INDEX 3 TABLE * TPTAB0 EQU * DEVICE INDEX 0 IFT JOURNL=1 DATA 0 TEST STATUS (JOURNAL) DATA TSTSTA DATA 6 WRITE JOURNAL DATA WRTJRL IFT PARORD=1 DATA /24 SET PRINTER PARAMETERS DATA PRTPAR XIF DATA /FFFF END OF ORDERS * TPTAB1 EQU * DEVICE INDEX 1 DATA 0 TEST STATUS (DOCUMENT) DATA TSTSTA DATA 6 WRITE DOCUMENT DATA WRTDOC DATA /0B POSITION DOCUMENT DATA POSDOC DATA /38 RELEASE DOCUMENT DATA RELDOC DATA /37 TRANSFER DOCUMENT PARAMETERS DATA TRFDOC IFT PARORD=1 DATA /24 SET PRINTER PARAMETERS DATA PRTPAR DATA /27 SET DOCUMENT PARAMETERS DATA DOCPAR XIF DATA /FFFF END OF ORDERS * TPTAB2 EQU * DEVICE INDEX 2 DATA /FFFF END OF ORDERS * TPTAB3 EQU * DEVICE INDEX 3 DATA /FFFF END OF ORDERS * * SYSTEM STANDARD PRINTER PARAMETERS * STDPP PRIPAR STANDARD PRINTER PARAMETERS EJECT * * * A C T P * * THIS IS THE ACTIVATION PART OF THE DRIVER * CHECKS VALIDITY OF ORDERS AND JUMPS TO ORDER PROCESSOR * * * ACTP EQU * ACTIVATION ENTRY * * * GET DWT INDEX: 0=JOURNAL, 1=DOCUMENT * LC A2,DWTOR,A6 GET DWT INDEX ANK A2,3 MASK SLL A2,6 SHIFT LD A3,DWTDEV,A6 GET OLD DEVICE INDEX ANKL A3,/FF1F RESET OLD INDEX AND LF IND ORR A3,A2 ST A3,DWTDEV,A6 STORE NEW INDEX ACT005 LD A1,DWTDEV,A6 GET DEVICE INDEX ANK A1,/C0 SRL A1,5 GET CORESPONDING ORDER TABLE LD A2,TPTAB,A1 ACT010 LDR* A3,A2 ABL(N) LENDER NO MORE VALID ORDERS SUR A3,A7 TEST IF ORDER VALID RF(E) ACT020 VALID ORDER FOUND ADK A2,4 TRY NEXT ORDER RB ACT010 ACT020 EQU * ABI 2,A2 EXECUTE ORDER EJECT * * * ORDER 00 : TEST STATUS * * TSTSTA EQU * CM ECBCW,A8 CLEAR CONTROL WORD LDK A2,3 BLOCK LENGTH LDK A3,POTEST LOAD TEST ORDER CF A5,ORDER AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 LDR A1,A2 GET PRINTER STATUS ANK A1,/15 TEST PRINTER STATUS RF(Z) TSST10 NO PERMANENT ERRORS TSST05 EQU * LDK A2,3 BLOCK LENGTH LDK A3,PODSTA LOAD DIAGNOSTIC ORDER CF A5,ORDER AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER SC A2,ECBCW+1,A8 SET UP DIAGN STATUS IN ECB LDK A1,1 INDICATE NOT OPERABLE RF TSST80 TSST10 LDR A1,A2 GET PRINTER STATUS IFT JOURNL=1 LD A3,DWTDEV,A6 GET DEVICE INDEX ANK A3,/C0 TEST DEVICE INDEX RF(NZ) TSST40 DEVICE INDEX > 0 ANK A1,/22 TEST PRINTER STATUS RF(Z) TSST80 NO ERRORS ANK A1,2 TEST PRINTER STATUS RB(NZ) TSST05 JOURNAL ERROR = NOT OP LDKL A1,ENDJ END OF JOURNAL RF TSST80 XIF TSST40 ANK A1,/40 TEST PRINTER STATUS RF(Z) TSST80 NO ERRORS LDK A1,DOCOUT DOCUMENT OUT TSST80 ABL LENDIS END REQUEST EJECT * * * ORDER 06 : WRITE JOURNAL * * IFT JOURNL=1 WRTJRL EQU * LD A1,DWTDEV,A6 GET STATUS ANK A1,/20 TEST LF INDICATOR RF(NZ) WRJL10 LF EXECUTED LD A1,ECBRL,A8 GET REQUESTED LENGTH SUK A1,2 TEST REQUESTED LENGTH RF(N) WRJL80 REQUEST ERROR LD A2,ECBBA,A8 GET CONTROL CHARACTER =2 LC A2,1,A2 * =2 ANK A2,/FF SUK A2,/2B TEST CTRL CHAR RF(Z) WRJL10 CTRL CHAR =/2B LDK A4,2 SET UP 2 LF (CTRL CH =/30) SUK A2,5 TEST CTRL CHAR RF(Z) WRJL05 CTRL CHAR =/30 LDK A4,1 SET UP 1 LF (CTRL CH NOT DEF) SUK A2,1 TEST CTRL CHAR RF(NZ) WRJL05 CTRL CHAR NOT =/31 LDK A4,3 SET UP 3 LF (CTRL CH =/31) WRJL05 EQU * LDK A2,4 BLOCK LENGTH LDK A3,POWJRL LOAD WRITE JOURNAL ORDER CF A5,ORDER AND SEND LDR A2,A4 RELOAD NO OF LINE FEED CF A5,OUT AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 ANK A2,7 TEST PRINTER STATUS RF(NZ) WRJL65 JOURNAL LINE FEED ERROR CM DWTDEV+PPJ,A6 CLEAR PRINT POSITION LDK A1,/20 SET UP LF EXECUTED ORS A1,DWTDEV,A6 IND IN STATUS WRJL10 EQU * LD A2,ECBRL,A8 ADK A2,2 BLOCK LENGTH LC A1,DWTDEV+APJ,A6 GET ACTUAL PRINT POS SC A1,DWTDEV+RPJ,A6 SET UP START REQ PRINT POS LDK A3,2 SET UP BUFFER POINTER CF A15,GETCHR GET CHARACTER FROM ECB BUFFER LDR A1,A1 TEST IF NO BUFFER RF(Z) WRJL60 NO BUFFER TO PRINT LDK A3,POWJRL LOAD WRITE JOURNAL ORDER CF A5,ORDER AND SEND LDK A2,0 LOAD ZERO LINE FEED CF A5,OUT AND SEND LDKL A4,/100 SET UP NORMAL CHAR COUNTER IN A4 LDK A3,2 SET UP BUFFER POINTER WRJL20 CF A15,GETCHR GET CHARACTER FROM ECB BUFFER LDR A1,A1 RF(Z) WRJL50 BUFFER FINISHED LDR A1,A2 GET CHAR IN A1 * * EXAMINE CHAR AND UPDATE PRINT POS AND SEND * DEPENDING ON TYPE OF CHARACTER * SUK A1,/10 RB(N) WRJL20 CHAR </10 RF(Z) WRJL30 CHAR = /10 SUK A1,9 RF(NZ) WRJL25 CHAR NOT /19 (=EXPAND) XRKL A4,/300 SWITCH CHAR COUNTER IN A4 RF WRJL40 SEND EXPAND CHAR WRJL25 SUK A1,7 RF(N) WRJL40 CHAR </20 SEND SUK A1,/5F RB(Z) WRJL20 CHAR=/7F RF(N) WRJL30 CHAR = NORMAL SUK A1,/2F RF(Z) WRJL28 CHAR =/AE IFT GREEK=1 * =4 CF A5,GRECON CONVERSION FOR GREEK CHARACTERS =4 LDR A1,A1 * =4 RF(Z) WRJL30 SUCCESSFUL CONVERSION =4 XIF * =4 IFT JOURNL=1 * =4 LDK A1,4 IND CODE CHECK ERROR ORS A1,ECBRC,A8 IN RETURN CODE RB WRJL20 WRJL28 LDK A2,/0E RF WRJL40 * UPDATE PRINT POSITION WRJL30 ADS A4,DWTDEV+RPJ,A6 ADD 1 OR 2 TO REQ PRINT POS * SEND CHARACTER TO DEVICE WRJL40 CF A5,OUTPUT SEND CHARACTER ABL(NZ) ERTP JMP IF ERROR RB WRJL20 GET NEXT CHARACTER * SEND ETX WRJL50 CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 LDR A1,A2 GET PRINTER STATUS ANK A1,/27 TEST PRINTER STATUS RF(Z) WRJL60 NO ERRORS ANK A1,3 TEST PRINTER STATUS RF(NZ) WRJL65 NOT OPERABLE ANK A2,4 TEST PRINTER STATUS RF(NZ) WRJL80 REQUEST ERROR LDKL A1,ENDJ END OF JOURNAL WRJL60 LC A3,DWTDEV+RPJ,A6 GET REQUESTED PRINT POSITION SC A3,DWTDEV+APJ,A6 SET UP ACTUAL PRINT POSITION RF WRJL70 WRJL65 LDK A1,1 INDICATE NOT OPERABLE WRJL70 ABL LENDIS END REQUEST WRJL80 ABL LENDER END REQUEST WITH REQUEST ERROR XIF EJECT * * * ORDER 06 : WRITE DOCUMENT * * WRTDOC EQU * LC A4,DWTDEV+ALN,A6 GET ACTUAL LINE ANK A4,/FF LD A1,ECBRL,A8 GET REQUESTED LENGTH SUK A1,2 TEST REQUESTED LENGTH RF(N) WRDO80 REQUEST ERROR LD A2,ECBBA,A8 GET CONTROL CHARACTER =2 LC A2,1,A2 * =2 ANK A2,/FF LC A3,DWTDEV+APD,A6 PREPARE NEW REQ PRINT POS SUK A2,/2B RF(Z) WRDO07 CTRL CHAR = /2B LDK A3,0 PREPARE NEW REQ PRINT POS ADK A4,2 SET REQ LINE = ACT LINE + 2 SUK A2,5 RF(Z) WRDO05 CTRL CHAR = /30 SUK A4,1 SET REQ LINE = ACT LINE + 1 SUK A2,1 RF(NZ) WRDO05 CTRL CHAR NOT = /31 LDK A4,1 SET REQ LINE = 1 WRDO05 LD A1,DWTDEV+DP,A6 GET NUMBER OF LINES =3 CC A4,2,A1 * =3 RF(G) WRDO80 REQ LINE > MAX LINES WRDO07 SC A3,DWTDEV+RPD,A6 SET UP START REQ PRINT POS SC A4,DWTDEV+RLN,A6 SET UP REQ LINE NO LDR A4,A4 RF(Z) WRDO80 REQ LINE=ZERO WRDO10 EQU * LD A2,ECBRL,A8 ADK A2,2 BLOCK LENGTH LDK A3,POWDOC SET UP PRINTER ORDER CF A5,ORDER AND SEND LDR A2,A4 GET REQ LINE NO CF A5,OUT AND SEND LDKL A4,/100 SET UP NORMAL CHARACTER COUNT LDK A3,2 SET UP BUFFER POINTER WRDO20 CF A15,GETCHR GET CHARACTER FROM ECB BUFFER LDR A1,A1 RF(Z) WRDO50 BUFFER FINISHED LDR A1,A2 GET CHARACTER * EXAMINE CHARACTER AND UPDATE PRINT POS AND SEND * DEPENDING ON TYPE OF CHARACTER SUK A1,/10 RB(N) WRDO20 CHAR < /10 RF(Z) WRDO30 CHAR = /10 SEND WRDO22 SUK A1,9 RF(NZ) WRDO27 CHAR NOT /19 (=EXPAND) XRKL A4,/300 SWITCH CHAR COUNTER IN A4 RF WRDO40 SEND EXPAND CHAR WRDO27 SUK A1,7 RF(N) WRDO40 CHAR < /20 SEND SUK A1,/5F RF(N) WRDO30 CHAR = NORMAL RB(Z) WRDO20 CHAR = /7F SUK A1,/2F RF(Z) WRDO28 CHAR = /AE IFT GREEK=1 * =4 CF A5,GRECON CONVERSION FOR GREEK CHARACTERS =4 LDR A1,A1 * =4 RF(Z) WRDO30 SUCCESSFUL CONVERSION =4 XIF * =4 LDK A1,4 INDICATE CODE CHECK ERROR ORS A1,ECBRC,A8 IN RETURN CODE RB WRDO20 WRDO28 LDK A2,SPEC SET UP CHAR /0E RF WRDO40 * UPDATE PRINT POS WRDO30 ADS A4,DWTDEV+RPD,A6 ADD 1 OR 2 TO REQ PRINT POS * SEND CHARACTER TO PRINTER WRDO40 CF A5,OUTPUT SEND CHARACTER ABL(NZ) ERTP JMP IF ERROR RB WRDO20 GET NEXT CHAR * SEND ETX WRDO50 CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 LDR A1,A2 GET PRINTER STATUS ANK A1,/45 TEST PRINTER STATUS RF(Z) WRDO60 NO ERRORS ANK A1,1 TEST PRINTER STATUS RF(NZ) WRDO70 NOT OPERABLE ANK A2,4 TEST PRINTER STATUS RF(NZ) WRDO80 REQUEST ERROR LC* A1,DWTDEV+DP,A6 DOCUMENT OUT =3 ANK A1,/78 TEST DOC PAR (TIME OUT) RB(NZ) WRTDOC NO TIME OUT USED,REPEAT ORDER LDK A1,DOCOUT DOCUMENT OUT LDK A3,0 RESET LINE COUNTER LDK A4,0 RESET PRINT POSITION COUNTER RF WRDO65 WRDO60 LC A3,DWTDEV+RLN,A6 GET REQUESTED LINE NUMBER LC A4,DWTDEV+RPD,A6 GET REQUESTED PRINT POSITION WRDO65 SC A3,DWTDEV+ALN,A6 SET UP ACTUAL LINE NUMBER SC A4,DWTDEV+APD,A6 SET UP ACTUAL PRINT POSITION ANK A3,/FF ST A3,ECBCW,A8 SET UP ACTUAL LINE IN CONTROL WORD WRDO70 ABL LENDIS END REQUEST WRDO80 LC A3,DWTDEV+APD,A6 GET ACTUAL LINE NUMBER ANK A3,/FF ST A3,ECBCW,A8 SET UP ACTUAL LINE IN CONTROL WORD ABL LENDER END REQUEST WITH REQUEST ERROR EJECT * * * ORDER 0B : POSITION DOCUMENT * CONTROL WORD CONTAINS REQUESTED LINE NO * * POSDOC EQU * LD A4,ECBCW,A8 GET REQ LINE NO RF(Z) PDOC80 REQ LINE = 0 LD A1,DWTDEV+DP,A6 GET NUMBER OF LINES =3 CC A4,2,A1 * =3 RF(G) PDOC80 REQ LINE > MAX LINE SC A4,DWTDEV+RLN,A6 SET UP REQ LINE NO LDK A2,4 BLOCK LENGTH LDK A3,POPDOC SET UP PRINTER POSITION DOCUMENT ORDER CF A5,ORDER AND SEND LDR A2,A4 SET UP LINE NO CF A5,OUT AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS ANK A1,/45 TEST PRINTER STATUS RF(Z) PDOC10 NO ERRORS ANK A1,1 TEST PRINTER STATUS RF(NZ) PDOC70 NOT OPERABLE ANK A2,4 TEST PRINTER STATUS RF(NZ) PDOC80 REQUEST ERROR LC* A1,DWTDEV+DP,A6 DOCUMENT OUT =3 ANK A1,/78 TEST DOC PAR (TIME OUT) RB(Z) POSDOC NO TIME OUT USED, REPEAT ORDER LDK A1,DOCOUT INDICATE DOCUMENT OUT LDK A4,0 RESET LINE COUNTER PDOC10 SC A4,DWTDEV+ALN,A6 PDATE OF LINE COUNTER CM DWTDEV+PPD,A6 RESET PRINT POSITION COUNTER PDOC70 ABL LENDIS END REQUEST PDOC80 ABL LENDER END REQUEST WITH REQUEST ERROR EJECT * CONVERSION ROUTINE FOR GREEK CHARACTERS * CHARACTER CODES /B0-/BP IN REG A2 WILL BE CONVERTED * TO /41-/4A. THE SPECIAL CHARACTER /1B WILL * BE SENT TO THE PRINTER BEFORE RETURN FROM * THIS ROUTINE. REG A1 WILL BE SET TO ZERO IF SUCCESSFUL. IFT GREEK=1 * =4 GRECON EQU * * =4 SUK A1,2 * =4 RF(N) GRCO80 CHAR < /B0 =4 SUK A1,/A * =4 RF(P) GRCO80 CHAR > /B9 =4 ANK A2,/FF * =4 ORR A4,A2 SAVE CHAR TEMP =4 LDK A2,/1B SET UP SPECIAL CHAR =4 CF A5,OUTPUT SEND CHARACTER =4 LDR A2,A4 RESTORE CHAR =4 ANK A2,/FF * =4 SUK A2,/6F CONVERT CHAR (/B0 = /41 ETC.) =4 ANKL A4,/FF00 CLEAR USED BITS =4 LDK A1,0 INDICATE SUCCESSFUL CONVERSION =4 GRCO80 RTN A5 * =4 XIF * =4 EJECT * * * ORDER 37 : TRANSFER DOCUMENT PARAMETERS * CONTROL WORD CONTAINS DOCUMENT TABLE NUMBER * * TRFDOC EQU * LD A1,ECBCW,A8 ADK A1,1 LDR A4,A1 SLL A4,3 ADR A4,A1 ADR A4,A1 CWK A4,TLTP03 RF(G) ODOC80 REQ DOC TABLE NOT DEFINED ADKL A4,DTTP03-10 ADJUST DOCTAB POINTER =3 LC A1,DWTDEV+ALN,A6 GET ACTUAL LINE ANK A1,/FF TEST LINE NUMBER RF(Z) ODOC20 DOCUMENT NOT YET POS (OK) LCR A1,A4 GET DOCUMENT TYPE =3 ANK A1,4 RF(Z) ODOC80 REQUEST ERROR FOR DOC TYPE 0-3 ODOC20 EQU * ST A4,DWTDEV+DP,A6 SAVE DOC PAR ADDR =3 LDK A2,/13 BLOCK LENGTH LDK A3,POTDOC LOAD TRANSFER DOC PAR ORDER CF A5,ORDER AND SEND LDK A3,10 SET UP TABLE LENGTH =3 ODOC30 LCR A2,A4 GET DOC PARAMETER =3 CF A5,OUT SEND PARAMETER =3 ADK A4,1 INC TABLE POINTER =3 SUK A3,1 DEC PARAMETER COUNTER =3 RB(NE) ODOC30 WHOLE TABLE NOT SENT CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 LDR A1,A2 GET PRINTER STATUS ANK A1,1 TEST PRINTER STATUS ODOC70 ABL LENDIS END REQUEST ODOC80 ABL LENDER END REQUEST WITH REQUEST ERROR EJECT * * * ORDER 24 : SET PRINTER PARAMETERS * CONTROL WORD CONTAINS: * BIT 0 : INDICATE CHANGE OF CH FONT AND NCV * BIT 01-03 : CHARACTER FONT * BIT 04-07 : NATIONAL CHARACTER VARIATION * BIT 08-11 : CHARACTER PITCH FOR JOURNAL STATION * BIT 12-15 : CHARACTER PITCH FOR DOCUMENT STATION * * IFT PARORD=1 PRTPAR EQU * LDK A2,0 LD A4,DWTDEV+PP,A6 GET OLD DWT VALUE ABL(NN) LDISP WAIT FOR INITIAL RECOVERY =1 LD A1,ECBCW,A8 GET CONTROL WORD RF(NN) PPAR10 NO NEW L/NCV SET UP IN CTRL WORD ECR A2,A1 ANK A2,/FF SC A2,DWTDEV+PP,A6 STORE NEW L/NCV IN DWT PPAR10 LDK A2,0 LDR A3,A1 ANK A3,/F0 GET CTRL WORD RF(NZ) PPAR15 NEW CPJ SET UP IN CTRL WORD LDR A3,A4 ANK A3,/F0 PPAR15 EQU * ORR A2,A3 STORE NEW CPJ IN A2 XRR A3,A4 ANK A3,/F0 NEW AND OLD CPJ EQUAL ? RF(Z) PPAR22 YES CM DWTDEV+PPJ,A6 NO, RESET PRINT POS FOR JOURNAL PPAR22 EQU * LDR A3,A1 ANK A3,/F GET CTRL WORD RF(NZ) PPAR25 NEW CPD SET UP IN CTRL WORD LDR A3,A4 ANK A3,/F GET CPD FROM DWT PPAR25 EQU * ORR A2,A3 STORE NEW CPD IN A2 XRR A3,A4 ANK A3,/F NEW AND OLD CPD EQUAL ? RF(Z) PPAR32 YES CM DWTDEV+PPD,A6 NO, RESET PRINT POS FOR DOC PPAR32 EQU * SC A2,DWTDEV+PP+1,A6 STORE NEW PARAMETERS IN DWT LDK A2,5 BLOCK LENGTH LDK A3,POPPAR LOAD PRINTER PRINTER PARAMETER ORDER CF A5,ORDER AND SEND LC A2,DWTDEV+PP,A6 CF A5,OUT SEND L/NCV LC A2,DWTDEV+PP+1,A6 CF A5,OUT SEND CPJ/CPD CF A5,EXECUT EXECUTE ORDER IN PRINTER U =1 LDR A1,A2 GET PRINTER STATUS ANK A1,1 TEST PRINTER STATUS PPAR70 ABL LENDIS END REQUEST XIF EJECT * * * ORDER 27 : SET DOCUMENT PARAMETERS * CONTROL WORD CONTAINS TABLE NO OF GIVEN PARAMETERS * * IFT PARORD=1 DOCPAR EQU * LD A1,ECBCW,A8 GET CONTROL WORD ADK A1,1 LDR A4,A1 SLL A4,3 ADR A4,A1 ADR A4,A1 CWK A4,TLTP03 RF(G) DPAR80 DEFINED TABLE TOO SMALL SUK A4,10 ADJUST DOCTAB POINTER LD A3,ECBBA,A8 GET BUFFER ADDRESS CF A5,BYTE1 GET DOC TYPE SUK A1,7 RF(P) DPAR80 ILLEGAL VALUE SC A2,DTTP03,A4 CF A5,BYTE1 GET TIME OUT VALUE SLL A2,11 ORS A2,DTTP03,A4 CF A5,DOC GET LINE SPACING SUK A2,15 RF(P) DPAR80 TOO LARGE CF A5,DOC GET NO OF LINES SUK A2,0 RF(Z) DPAR80 NO LINES CF A5,DOC GET BOTTOM LINES SUK A2,14 RF(N) DPAR80 TOO SMALL CF A5,DOC GET MARGIN SUK A2,0 RF(Z) DPAR80 TOO SMALL SUK A2,80 RF(P) DPAR80 TOO LARGE ADK A4,1 CF A5,BYTE1 GET MARGIN FINE SUK A1,0 RF(Z) DPAR80 TOO SMALL SUK A1,7 RF(P) DPAR80 TOO LARGE SC A2,DTTP03,A4 CF A5,BYTE1 GET LEFT MARGIN SUK A1,1 RF(P) DPAR80 ILLEGAL VALUE SLL A2,3 ORS A2,DTTP03,A4 CF A5,BYTE1 GET CRITICAL MARGIN SUK A1,1 RF(P) DPAR80 ILLEGAL VALUE SLL A2,5 ORS A2,DTTP03,A4 CF A5,BYTE1 GET HIGH PRINT PRESSURE SUK A1,1 RF(P) DPAR80 ILLEGAL VALUE SLL A2,6 ORS A2,DTTP03,A4 LC* A1,ECBBA,A8 GET DOC TYPE ANK A1,/B RF(Z) DPAR60 DOC TYPE = 0 CF A5,DOC GET UPPER EDGE SUK A2,15 RF(N) DPAR80 TOO SMALL SUK A2,67 RF(P) DPAR80 TOO LARGE CF A5,DOC GET BOTTOM EDGE SUK A2,0 RF(Z) DPAR30 OK SUK A2,24 RF(N) DPAR80 TOO SMALL DPAR30 LC* A1,ECBBA,A8 GET DOC TYPE ANK A1,/B SUK A1,2 RF(N) DPAR70 DOC TYPE = 1 RF(P) DPAR40 DOC TYPE = 3 CF A5,DOC GET DOCUMENT WIDTH SUK A2,40 RF(N) DPAR80 TOO SMALL SUK A2,57 RF(P) DPAR80 TOO SMALL RF DPAR50 DPAR40 CF A5,DOC GET UPPER LINES SUK A2,0 RF(Z) DPAR80 TOO SMALL SUK A2,40 RF(P) DPAR80 TOO LARGE DPAR50 CF A5,DOC GET CENTER WIDTH RF DPAR75 OK DPAR60 LDK A2,0 DT=0 SET 4 LAST PARAMETERS=0 ADK A4,1 ST A2,DTTP03,A4 ADK A4,1 DPAR70 LDK A2,0 DT=1 SET 2 LAST PARAMETERS=0 ADK A4,1 ST A2,DTTP03,A4 DPAR75 LDK A1,0 IND STATUS OK FOR RETURN CODE ABL LENDIS END REQUEST DPAR80 ABL LENDER END REQUEST WITH REQUEST ERROR * GET ONE BYTE FROM ECB BUFFER TO A1 AND A2 * CONVERTED TO HEXA FROM ASCII BYTE1 LCR A2,A3 GET CHARACTER CF A5,CHECK TEST IF NUMERIC ANK A2,/F GET HEXA LDR A1,A2 SAVE IN A1 ALSO ADK A3,1 INC ECB BUFFER POINTER RTN A5 * GET TWO BYTES FROM ECB BUFFER TO A2 * CONVERTED TO HEXA AND STORED IN DOC TABLE DOC LDK A1,0 CLEAR HEXA VALUE ADK A4,1 INC TABLE POINTER LCR A2,A3 GET CHARACTER FROM ECB BUFFER CF A5,CHECK TEST IF NUMERIC ANK A2,/F DOC10 SUK A2,1 RF(N) DOC20 TENTH FINISHED ADK A1,10 PDATE TENTH RB DOC10 DOC20 ADK A3,1 INC ECB BUFFER POINTER LCR A2,A3 GET NEXT CHARACTER FROM ECB BUFFER CF A5,CHECK TEST IF NUMERIC ANK A2,/F ADR A2,A1 ADD TO PREV HEXA VALUE SC A2,DTTP03,A4 STORE IN DOC TABLE ADK A3,1 INC ECB BUFFER POINTER RTN A5 * * CHECK IF CHARACTER IS NUMERIC CHECK ANK A2,/FF MASK OUT CHARACTER SUK A2,/30 RB(N) DPAR80 TOO LOW ERROR SUK A2,9 RB(P) DPAR80 TOO HIGH ERROR ADK A2,/39 RESTORE CHARACTER RTN A5 XIF EJECT * * * ORDER 38 : RELEASE DOCUMENT * * RELDOC EQU * LDK A2,3 BLOCK LENGTH LDK A3,PORDOC LOAD PRINTER REL DOC ORDER CF A5,ORDER AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS ANK A1,1 TEST PRINTER STATUS RF(NZ) RDOC70 NOT OPERABLE CM DWTDEV+LN,A6 RESET LINE COUNTERS CM DWTDEV+PPD,A6 RESET PRINT POSITION COUNTERS RDOC70 ABL LENDIS END REQUEST EJECT * * S U B R O U T I N E S * * * * O R D E R * SEND START OF BLOCK CHAR TO COM. AND ORDER CODE TO PRINTER * ORDER EQU * CF A5,STABLK START OF BLOCK RF(NZ) ERTP JMP IF ERROR LDK A2,RESET SEND RESET JUST IN CASE CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR LDR A2,A3 RF OUT10 SEND PRINTER ORDER * * E X E C U T E * SEND EXECUTE CHAR (/03) TO PRINTER AND END OF BLOCK CHAR TO COM. * EXECUT EQU * LDK A2,ETX SEND EXECUTE CHAR TO PRINTER CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP JMP IF ERROR EXE05 CF A5,INPUT GET STATUS CHARACTER =1 LDR A1,A7 TEST IF ORDER = POS OR REL =1 SUK A1,/0B U =1 RF(Z) EXE10 POS, BIT 3 IN STATUS DON'T CARE =1 SUK A1,/38-/0B U =1 RF(Z) EXE10 REL, BIT 3 IN STATUS DON'T CARE =1 LDR A1,A2 TEST IF STATUS BIT 3 = 1 =1 ANK A1,/18 * =3 RB(Z) EXE05 BIT 3 = 0, READ NEW STATUS =1 EXE10 EQU * U =1 SC A2,DWTDEV,A6 SAVE IN DWT STATUS RTN A5 * * 0 U T * ADD CONST. AND SEND * OUT EQU * ANK A2,/7F ADK A2,/10 CWK A2,/7F RF(NG) OUT10 CHARACTER NOT GREATER THAN /7F LDK A2,/7F IF GREATER SET CHAR TO /7F OUT10 EQU * CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR RTN A5 9 LINES DELETED =1 * * ERROR ROUTINE FOR STABLK,OUTPUT & ENDBLK * * ERTP EQU * IFF REQEND=1 LDR A7,A7 RF(Z) ERTP20 ORDER /00, TEST STATUS ? ANK A1,/1A OUTP ERR, SOFTW T-OUT, LRC-ERR ? RF(NZ) RCTP YES, RECOVERY ABL LDISP NO XIF ERTP20 LDK A1,1 SET NOT OPERABLE ABL LENDIS END OF REQ. EJECT * * R C T P * * THIS IS THE RECOVERY ROUTINE FOR THE DRIVER * DWT ORDER IS RESET IF NO REQUEST RUNING * DWT IS SET BUSY * AFTER PROGRAM LOADING SYSTEM PARAMETERS ARE SET UP IN DWT * TEST STRING IS SENT TO PRINTER TO GET SYNCRONISM * A FIXED FORMATTED RECOVERY STRING IS THEN SENT TO PRINTER * THIS STRING CONTAINS THE ACTUAL PARAMETERS AND THE ACTUAL * STATUS FOR THE PRINTER. * A RUNING REQUEST IS AT LAST REPEATED. * RCTP EQU * LD A1,DWTECB,A6 GET ECB ADDRESS RF(NZ) RCTP02 REQUEST RUNNING CM DWTOR,A6 RESET ORDER RCTP02 EQU * LDKL A1,/7FFF INDICATE DEVICE BUSY ANS A1,DWTST,A6 LDKL A5,DWTSB2 STACK BASE ADR A5,A6 LD A1,DWTDEV+DP,A6 * =3 RF(NZ) RCTP08 NOT SYSTEM START RECOVERY =3 LDKL A1,DTTP03 SET UP DOC PAR TABLE 0 IN DWT =3 ST A1,DWTDEV+DP,A6 * =3 LD A3,STDPP SET UP ST PR PAR IN DWT ST A3,DWTDEV+PP,A6 * =3 RCTP08 EQU * LDK A2,3 BLOCK LENGTH LDK A3,POTEST LOAD PRINTER ORDER TEST STATUS CF A5,ORDER AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER RCTP10 EQU * LDK A2,/19 BLOCK LENGTH LDK A3,PORECV SET UP PRINTER RECOVERY ORDER CF A5,ORDER AND SEND LD A3,DWTDEV+PP,A6 GET PRINTER PARAMETERS RCTP20 ECR A2,A3 CF A5,OUT SEND L/NCV LDR A2,A3 CF A5,OUT SEND CPJ/CPD LC A2,DWTDEV+APJ,A6 GET ACTUAL POS JOURNAL CF A5,OUT AND SEND LC A2,DWTDEV+APD,A6 GET ACTUAL POS DOCUMENT LDR A3,A2 SAVE DOC POS ANK A2,/3F MASK OFF MSB CF A5,OUT SEND APD LDR A2,A3 GET DOC POS BACK ANK A2,/40 MASK OUT MSB CF A5,OUT SEND AP6 LC A2,DWTDEV+ALN,A6 GET ACTUAL LINE NO CF A5,OUT AND SEND RCTP40 LDK A4,10 LD A3,DWTDEV+DP,A6 GET DOC PAR ADDRESS =3 RCTP50 LCR A2,A3 GET DOC PARAMETER CF A5,OUT AND SEND ADK A3,1 INC DOC TABLE POINTER SUK A4,1 DEC CHARACTER COUNTER RB(NZ) RCTP50 WHOLE TABLE NOT SENT RCTP60 CF A5,EXECUT EXECUTE RECOVERY IN PRINTER RCTP70 LD A1,DWTECB,A6 ABL(NZ) ACT005 REQ RUNNING ABL LENDIS REQ NOT RUNNING END