|
|
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: 34416 (0x8670)
Notes: pts_type(SC)
Names: »DRTP03.SC«
└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
└─⟦this⟧ »TOSSWORK/DRTP03.SC«
IDENT DRTP03 REL 10.0 80-04-24 870105041000 =9,TOTAL UPDATE FOR REMOTE REL 9.2 80-03-15 =8,REMOTE RECOVERY ERROR REL 9.2 80-02-28 =7,UPDATE FOR REMOTE CONN. REL 9.2 79-11-16 =6,COMB OF REL 8,9&10 PRR 10.1 79-11-14 =5,SET PR PAR ERR, REL DOC ERR PRR 10.1 79-10-04 =4,GEN UPDATE REL 10 REL 9.1 79-09-26 =3,ANK A2,/7F PRR 9.1 79-08-14 =2,GEN UPDATE PRR 9.1 79-06-20 =1,GEN UPDATE PRR 9.1 79-06-17 EJECT * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRTP03 = DRIVER TELLER TERMINAL PRINTER * * * * ADAPTED FOR TOSS RELEASE INDICATED IN "REL EQU X" * * * ******************************************************* * * THIS DRIVER HANDLES TELLER TERMINAL PRINTER PTS 6371 * * AND CONSISTS OF THE FOLLOWING PARTS: * * A C T P : ACTIVATION PART * * I H T P : INTERRUPT HANDLER * * 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 INTERRUPT HANDLER IS ENTERED FOR EACH OUTPUTED CHARACTER * * 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 **IN REL 10...** * BIT 10 : END OF JOURNAL **IN REL 8 & 9** * 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 TDISP DISPATCHING FROM INTERRUPT EXTRN DISIOE DISPATCH I/O ERROR EXTRN DISEND END I/O AND DISPATCH EXTRN OUTPUT OUTPUT ONE CHARACTER EXTRN LDREG RESTORE REGISTERS EXTRN SAVE8 SAVE REG. A1-A8 EXTRN GETCHR GET CHARACTER FROM ECB BUFFER EXTRN DWTST DWT STATUS DISPLACEMENT EXTRN DWTECB DWT ECB DISPLACEMENT EXTRN DWTOR DWT ORDER DISPLACEMENT EXTRN DTTP03 DOCUMENT TABLE ADDRESS EXTRN TLTP03 DOCUMENT TABLE LENGTH EXTRN STREG STORE REG = GET STATUS INPUT CHAR EJECT * ************* * CONSTANTS * ************* REL EQU 10 ADAPTED FOR TOSS REL 10 * * 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) * STB EQU /82 START BLOCK CHAR ETB EQU /97 END BLOCK CHAR * IFT REL=8 ENDJ EQU /20 END OF JOURNAL STATUS XIF IFT REL=9 ENDJ EQU /20 END OF JOURNAL STATUS XIF IFF REL=8 IFF REL=9 ENDJ EQU /2000 END OF JOURNAL STATUS XIF 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 LOWER CASE SET CAN BE INCLUDED AS STANDARD * BY SETTING X:B=1 * X:B EQU 0 STDL 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 095 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 * * * * PRIPAR FORM 1=1,2=0,1=STDL,4=STDNCV,2=1,2=STDCPJ,2=1,2=STDCPD EJECT * ********************* * DWT-DISPLACEMENTS * ********************* * * * DWTDRD EQU /10 START OF DRIVER DEFINED PART * IFT MMUPAG=0 START EQU DWTDRD XIF * IFT MMUPAG=1 START EQU DWTDRD+4 XIF * DWTPP EQU START+18 PRINTER PARAMETERS DWTPPJ EQU START+20 PRINT POS JOURNAL DWTAPJ EQU DWTPPJ+1 ACTUAL PRINT POS JOURNAL DWTRPJ EQU DWTPPJ REQUESTED PRINT POS JOURNAL DWTPPD EQU START+22 PRINT POS DOCUMENT DWTAPD EQU DWTPPD+1 ACTUAL PRINT POS DOCUMENT DWTRPD EQU DWTPPD REQUESTED PRINT POS DOCUMENT DWTLN EQU START+24 LINE NUMBER ON DOCUMENT DWTALN EQU DWTLN+1 ACTUAL LINE NUMBER ON DOCUMENT DWTRLN EQU DWTLN REQUESTED LINE NUMBER ON DOCUMENT DWTDP EQU START+26 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 IFF REL=8 U =6 DATA 0 ABORT ROUTINE ADDRESS XIF U =6 DATA IHTP INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE * * VALID ORDERS WITH ACTIVATION ADDRESSES * TPTAB EQU * DATA TPTAB0 DEVICE INDEX 0 TABLE =9 DATA TPTAB1 DEVICE INDEX 1 TABLE =9 DATA TPTAB2 DEVICE INDEX 2 TABLE =9 DATA TPTAB3 DEVICE INDEX 3 TABLE =9 * TPTAB0 EQU * DEVICE INDEX 0 =9 IFT JOURNL=1 DATA 0 TEST STATUS (JOURNAL) =9 DATA TSTSTA U =9 DATA 6 WRITE JOURNAL =9 DATA WRTJRL U =9 IFT PARORD=1 DATA /24 SET PRINTER PARAMETERS =9 DATA PRTPAR U =9 XIF DATA /FFFF END OF ORDERS =9 * TPTAB1 EQU * DEVICE INDEX 1 =9 DATA 0 TEST STATUS (DOCUMENT) =9 DATA TSTSTA U =9 DATA 6 WRITE DOCUMENT =9 DATA WRTDOC U =9 DATA /0B POSITION DOCUMENT =9 DATA POSDOC U =9 DATA /38 RELEASE DOCUMENT =9 DATA RELDOC U =9 DATA /37 TRANSFER DOCUMENT PARAMETERS =9 DATA TRFDOC U =9 IFT PARORD=1 DATA /24 SET PRINTER PARAMETERS =9 DATA PRTPAR U =9 DATA /27 SET DOCUMENT PARAMETERS =9 DATA DOCPAR U =9 XIF DATA /FFFF END OF ORDERS =9 * TPTAB2 EQU * DEVICE INDEX 2 =9 DATA /FFFF END OF ORDERS =9 * TPTAB3 EQU * DEVICE INDEX 3 =9 DATA /FFFF END OF ORDERS =9 * * 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 =9 SLL A2,6 SHIFT =9 LDR* A3,A6 GET OLD DEVICE INDEX =9 ANKL A3,/FF1F RESET OLD INDEX AND LF IND =9 IFT REL=8 U =9 ORKL A3,/8100 SET UP NO DATA REQUEST =9 XIF U =9 ORR A3,A2 U =9 STR A3,A6 STORE NEW INDEX =9 ACT005 LDR* A1,A6 GET DEVICE INDEX =9 ANK A1,/C0 U =9 SRL A1,5 GET CORESPONDING ORDER TABLE =9 LD A2,TPTAB,A1 U =9 ACT010 LDR* A3,A2 U =9 ABL(N) DISIOE NO MORE VALID ORDERS =9 SUR A3,A7 TEST IF ORDER VALID =9 RF(E) ACT020 VALID ORDER FOUND =9 ADK A2,4 TRY NEXT ORDER =9 RB ACT010 U =9 ACT020 EQU * ABI 2,A2 EXECUTE ORDER =9 EJECT * * * ORDER 00 : TEST STATUS * * TSTSTA EQU * 5 LINES DELETED =9 CM ECBCW,A8 CLEAR CONTROL WORD =7 LDK A3,POTEST LOAD TEST ORDER CF A5,ORDER AND SEND CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS =9 ANK A1,/15 TEST PRINTER STATUS =9 RF(Z) TSST10 NO PERMANENT ERRORS =9 TSST05 LDK A3,PODSTA LOAD DIAGNOSTIC ORDER =9 CF A5,ORDER AND SEND =9 CF A5,EXECUT EXECUTE ORDER IN PRINTER =9 SC A2,ECBCW+1,A8 SET UP DIAGN STATUS IN ECB =9 LDK A1,1 INDICATE NOT OPERABLE =9 RF TSST80 U =9 TSST10 LDR A1,A2 GET PRINTER STATUS =9 IFT JOURNL=1 U =9 LDR* A3,A6 GET DEVICE INDEX =9 ANK A3,/C0 TEST DEVICE INDEX =9 RF(NZ) TSST40 DEVICE INDEX > 0 =9 ANK A1,/22 TEST PRINTER STATUS =9 RF(Z) TSST80 NO ERRORS =9 ANK A1,2 TEST PRINTER STATUS =9 RB(NZ) TSST05 JOURNAL ERROR = NOT OP =9 LDKL A1,ENDJ END OF JOURNAL =9 RF TSST80 U =9 XIF U =9 TSST40 ANK A1,/40 TEST PRINTER STATUS =9 RF(Z) TSST80 NO ERRORS =9 LDK A1,DOCOUT DOCUMENT OUT =9 TSST80 ABL DISEND END REQUEST =9 EJECT * * * ORDER 06 : WRITE JOURNAL * * IFT JOURNL=1 WRTJRL EQU * LDR* A1,A6 GET CHANNEL PARAMETERS =9 ANK A1,/20 TEST LF INDICATOR =9 RF(NZ) WRJL10 LF EXECUTED =9 LD A1,ECBRL,A8 GET REQUESTED LENGTH =9 SUK A1,2 TEST REQUESTED LENGTH =9 RF(N) WRJL80 REQUEST ERROR =9 LD* A2,ECBBA,A8 GET CONTROL CHARACTER =9 ANK A2,/FF U =9 SUK A2,/2B TEST CTRL CHAR =9 RF(Z) WRJL10 CTRL CHAR =/2B =9 LDK A4,2 SET UP 2 LF (CTRL CH =/30) =9 SUK A2,5 TEST CTRL CHAR =9 RF(Z) WRJL05 CTRL CHAR =/30 =9 LDK A4,1 SET UP 1 LF (CTRL CH NOT DEF) =9 SUK A2,1 TEST CTRL CHAR =9 RF(NZ) WRJL05 CTRL CHAR NOT =/31 =9 LDK A4,3 SET UP 3 LF (CTRL CH =/31) =9 WRJL05 LDK A3,POWJRL LOAD WRITE JOURNAL ORDER =9 CF A5,ORDER AND SEND =9 LDR A2,A4 RELOAD NO OF LINE FEED =9 CF A5,OUT AND SEND =9 CF A5,EXECUT EXECUTE ORDER IN PRINTER ANK A2,7 TEST PRINTER STATUS =9 RF(NZ) WRJL65 JOURNAL LINE FEED ERROR =9 CM DWTPPJ,A6 CLEAR PRINT POSITION =9 LDK A1,/20 SET UP LF EXECUTED =9 ORRS A1,A6 IND IN CHANNEL PARAMETER =9 WRJL10 LC A1,DWTAPJ,A6 GET ACTUAL PRINT POS =9 SC A1,DWTRPJ,A6 SET UP START REQ PRINT POS =9 LDK A3,2 SET UP BUFFER POINTER =9 CF A15,GETCHR GET CHARACTER FROM ECB BUFFER =9 LDR A1,A1 TEST IF NO BUFFER =9 RF(Z) WRJL60 NO BUFFER TO PRINT =9 LDK A3,POWJRL LOAD WRITE JOURNAL ORDER =9 CF A5,ORDER AND SEND =9 LDK A2,0 LOAD ZERO LINE FEED =9 CF A5,OUT AND SEND =9 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 =9 RF(N) WRJL30 CHAR = NORMAL SUK A1,/2F RF(Z) WRJL28 CHAR =/AE CF A5,ERROR ILLEGAL CHAR = SEND RESET LDK A1,4 IND CODE CHECK ERROR =9 RF WRJL70 U =9 WRJL28 LDK A2,/0E RF WRJL40 * UPDATE PRINT POSITION WRJL30 ADS A4,DWTRPJ,A6 ADD 1 OR 2 TO REQ PRINT POS * SEND CHARACTER TO DEVICE WRJL40 CF A5,OUTPUT SEND CHARACTER RB WRJL20 GET NEXT CHARACTER * SEND ETX WRJL50 CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS =9 ANK A1,/27 TEST PRINTER STATUS =9 RF(Z) WRJL60 NO ERRORS =9 ANK A1,3 TEST PRINTER STATUS =9 RF(NZ) WRJL65 NOT OPERABLE =9 ANK A2,4 TEST PRINTER STATUS =9 RF(NZ) WRJL80 REQUEST ERROR =9 LDKL A1,ENDJ END OF JOURNAL =9 WRJL60 LC A3,DWTRPJ,A6 GET REQUESTED PRINT POSITION =9 SC A3,DWTAPJ,A6 SET UP ACTUAL PRINT POSITION =9 RF WRJL70 U =9 WRJL65 LDK A1,1 INDICATE NOT OPERABLE =9 WRJL70 ABL DISEND END REQUEST =9 WRJL80 ABL DISIOE END REQUEST WITH REQUEST ERROR =9 XIF EJECT * * * ORDER 06 : WRITE DOCUMENT * * WRTDOC EQU * LC A4,DWTALN,A6 GET ACTUAL LINE ANK A4,/FF RF(Z) WRDO80 DOCUMENT NOT POSITIONED =9 LD A1,ECBRL,A8 GET REQUESTED LENGTH =9 SUK A1,2 TEST REQUESTED LENGTH =9 RF(N) WRDO80 REQUEST ERROR =9 LD* A2,ECBBA,A8 GET CONTROL CHARACTER =9 ANK A2,/FF U =9 LC A3,DWTAPD,A6 PREPARE NEW REQ PRINT POS =9 SUK A2,/2B RF(Z) WRDO07 CTRL CHAR = /2B LDK A3,0 PREPARE NEW REQ PRINT POS =9 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 CC A4,DWTDP+2,A6 RF(G) WRDO80 REQ LINE > MAX LINES =9 WRDO07 SC A3,DWTRPD,A6 SET UP START REQ PRINT POS =9 SC A4,DWTRLN,A6 SET UP REQ LINE NO =9 WRDO10 LDK A3,POWDOC SET UP PRINTER ORDER CF A5,ORDER AND SEND LDR A2,A4 GET REQ LINE NO =9 CF A5,OUT AND SEND LDKL A4,/100 SET UP NORMAL CHARACTER COUNT =9 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 =9 SUK A1,/2F RF(Z) WRDO28 CHAR = /AE CF A5,ERROR SEND RESET LDK A1,4 INDICATE CODE CHECK ERROR =9 RF WRDO70 U =9 WRDO28 LDK A2,SPEC SET UP CHAR /0E RF WRDO40 * UPDATE PRINT POS WRDO30 ADS A4,DWTRPD,A6 ADD 1 OR 2 TO REQ PRINT POS * SEND CHARACTER TO PRINTER WRDO40 CF A5,OUTPUT SEND CHARACTER RB WRDO20 GET NEXT CHAR * SEND ETX WRDO50 CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS =9 ANK A1,/45 TEST PRINTER STATUS =9 RF(Z) WRDO60 NO ERRORS =9 ANK A1,1 TEST PRINTER STATUS =9 RF(NZ) WRDO80 NOT OPERABLE =9 ANK A2,4 TEST PRINTER STATUS =9 RF(NZ) WRDO80 REQUEST ERROR =9 LDK A1,DOCOUT DOCUMENT OUT =9 LDK A3,0 RESET LINE COUNTER =9 LDK A4,0 RESET PRINT POSITION COUNTER =9 RF WRDO65 U =9 WRDO60 LC A3,DWTRLN,A6 GET REQUESTED LINE NUMBER =9 LC A4,DWTRPD,A6 GET REQUESTED PRINT POSITION =9 WRDO65 SC A3,DWTALN,A6 SET UP ACTUAL LINE NUMBER =9 SC A4,DWTAPD,A6 SET UP ACTUAL PRINT POSITION =9 WRDO70 ABL DISEND END REQUEST =9 WRDO80 ABL DISIOE END REQUEST WITH REQUEST ERROR =9 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 =9 CC A4,DWTDP+2,A6 RF(G) PDOC80 REQ LINE > MAX LINE =9 SC A4,DWTRLN,A6 SET UP REQ LINE NO 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 =9 ANK A1,/45 TEST PRINTER STATUS =9 RF(Z) PDOC10 NO ERRORS =9 ANK A1,1 TEST PRINTER STATUS =9 RF(NZ) PDOC70 NOT OPERABLE =9 ANK A2,4 TEST PRINTER STATUS =9 RF(NZ) PDOC80 REQUEST ERROR =9 LC A1,DWTDP,A6 DOCUMENT OUT =9 ANK A1,/78 TEST DOC PAR (TIME OUT) =9 RB(Z) POSDOC NO TIME OUT USED, REPEAT ORDER =9 LDK A1,DOCOUT INDICATE DOCUMENT OUT =9 LDK A4,0 RESET LINE COUNTER =9 PDOC10 SC A4,DWTALN,A6 UPDATE OF LINE COUNTER =9 CM DWTPPD,A6 RESET PRINT POSITION COUNTER =9 PDOC70 ABL DISEND END REQUEST =9 PDOC80 ABL DISIOE END REQUEST WITH REQUEST ERROR =9 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 =9 SUK A4,10 ADJUST DOCTAB POINTER LC A1,DWTALN,A6 GET ACTUAL LINE =9 ANK A1,/FF TEST LINE NUMBER =9 RF(NZ) ODOC80 DOCUMENT ALREADY POSITIONED =9 LDK A3,POTDOC LOAD TRANSFER DOC PAR ORDER =9 CF A5,ORDER AND SEND LDK A3,DWTDP SET UP POINTER ODOC30 LC A2,DTTP03,A4 LDR A1,A6 ADR A1,A3 SCR A2,A1 U =9 CF A5,OUT ADK A4,1 ADK A3,1 CWK A3,DWTDP+10 RB(NE) ODOC30 WHOLE TABLE NOT SENT CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS =9 ANK A1,1 TEST PRINTER STATUS =9 ODOC70 ABL DISEND END REQUEST =9 ODOC80 ABL DISIOE END REQUEST WITH REQUEST ERROR =9 EJECT * * * ORDER 24 : SET PRINTER PARAMETERS * CONTROL WORD CONTAINS: * BIT 0 : INDICATE CHANGE OF CH FONT AND NCV =4 * BIT 01-03 : CHARACTER FONT =4 * BIT 04-07 : NATIONAL CHARACTER VARIATION =4 * BIT 08-11 : CHARACTER PITCH FOR JOURNAL STATION =4 * BIT 12-15 : CHARACTER PITCH FOR DOCUMENT STATION =4 * * IFT PARORD=1 PRTPAR EQU * LDK A2,0 LD A4,DWTPP,A6 GET OLD DWT VALUE 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,DWTPP,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 =1 LDR A3,A4 ANK A3,/F0 U =5(=1) PPAR15 EQU * U =5(=1) ORR A2,A3 STORE NEW CPJ IN A2 =5 XRR A3,A4 U =5 ANK A3,/F0 NEW AND OLD CPJ EQUAL ? =5 RF(Z) PPAR22 YES =5 CM DWTPPJ,A6 NO, RESET PRINT POS FOR JOURNAL =5 PPAR22 EQU * U =5 LDR A3,A1 ANK A3,/F GET CTRL WORD RF(NZ) PPAR25 NEW CPD SET UP IN CTRL WORD =1 LDR A3,A4 ANK A3,/F GET CPD FROM DWT U =5(=1) PPAR25 EQU * U =5(=1) ORR A2,A3 STORE NEW CPD IN A2 =5 XRR A3,A4 U =5 ANK A3,/F NEW AND OLD CPD EQUAL ? =5 RF(Z) PPAR32 YES =5 CM DWTPPD,A6 NO, RESET PRINT POS FOR DOC =5 PPAR32 EQU * U =5 SC A2,DWTPP+1,A6 STORE NEW PARAMETERS IN DWT LDK A3,POPPAR LOAD PRINTER PRINTER PARAMETER ORDER CF A5,ORDER AND SEND LC A2,DWTPP,A6 U =4(=2) CF A5,OUT SEND L/NCV LC A2,DWTPP+1,A6 U =9 CF A5,OUT SEND CPJ/CPD CF A5,EXECUT EXECUTE ORDER IN PRINTER LDR A1,A2 GET PRINTER STATUS =9 ANK A1,1 TEST PRINTER STATUS =9 PPAR70 ABL DISEND END REQUEST =9 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,3 RF(P) DPAR80 ILLEGAL VALUE U =2 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,/F 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,/F 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 DISEND END REQUEST =9 DPAR80 ABL DISIOE END REQUEST WITH REQUEST ERROR =9 * 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 UPDATE 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 =9 SUK A2,9 RB(P) DPAR80 TOO HIGH ERROR =9 ADK A2,/39 RESTORE CHARACTER RTN A5 2 LINES DELETED =9 XIF EJECT * * * ORDER 38 : RELEASE DOCUMENT * * RELDOC EQU * 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 =9 ANK A1,1 TEST PRINTER STATUS =9 RF(NZ) RDOC70 NOT OPERABLE =9 CM DWTLN,A6 RESET LINE COUNTERS =9 CM DWTPPD,A6 RESET PRINT POSITION COUNTERS =9 IFT REL=8 U =9 LDK A1,DOCOUT INDICATE DOCUMENT OUT =9 XIF U =9 IFT REL=9 U =9 LDK A1,DOCOUT INDICATE DOCUMENT OUT =9 XIF U =9 RDOC70 ABL DISEND END REQUEST =9 68 LINES DELETED =9 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 =7 * ORDER EQU * LDK A2,STB SEND STB CF A5,OUTPUT LDR A2,A3 RF OUT10 SEND PRINTER ORDER =9 U =9 * * E X E C U T E * SEND EXECUTE CHAR (/03) TO PRINTER AND END OF BLOCK CHAR TO COM. =7 * EXECUT EQU * LDK A2,ETX SEND EXECUTE CHAR TO PRINTER =7 CF A5,OUTPUT LDK A2,ETB SEND END OF BLOCK =7 CF A5,OUTPUT CF A5,STREG GET STATUS CHARACTER SC A2,DWTST+1,A6 SAVE IN DWT STATUS =9 RTN A5 * * E R R O R =9(=8) * SEND RESET CODE (/0C) TO PRINTER =9(=8) * ERROR EQU * LDK A2,RESET U =9(=8) CF A5,OUTPUT LDK A2,ETB SEND END OF BLOCK =7 RF OUT10 U =9(=7) U =9 * * 0 U T * ADD CONST. AND SEND * OUT EQU * U =3 ANK A2,/7F U =3 ADK A2,/10 U =3 CWK A2,/7F U =1 RF(NG) OUT10 CHARACTER NOT GREATER THAN /7F =1 LDK A2,/7F IF GREATER SET CHAR TO /7F =1 OUT10 EQU * U =1 CF A5,OUTPUT RTN A5 11 LINES DELETED =9 EJECT * * I H T P * * INTERRUPT HANDLER: PROCESS OF INTERRUPT * * * IHTP EQU * LDR A1,A1 RF(NZ) IHTP60 LINE NOT OPERABLE =7 17 LINES DELETED =9 IHTP40 ABL LDREG RETURN FROM CF A5,OUTPUT/STREG IHTP60 EQU * U =7 IFT REQEND=0 U =7 LC A1,DWTOR+1,A6 GET ORDER CODE =7 ANK A1,/FF TEST ORDER OR RECOVERY ? ABL(NZ) TDISP NO, DISPATCH ELSE =9(=7) XIF U =7 LDK A1,1 INDICATE NOT OPERABLE =9(=7) ABL DISEND END OF REQUEST =9(=7) EJECT * * R C T P * * THIS IS THE RECOVERY ROUTINE FOR THE DRIVER * REGISTER A1 - A8 IS SAVED ON STACK * 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 * U =9 IFT CPU852=1 U =9 CF A15,SAVE8 SAVE REG. A1-A8 =9 XIF U =9 IFT CPU852=0 U =9 MSR 8,A15 SAVE REG. A1-A8 =9 XIF U =9 IFT REL=8 U =7 LDKL A1,/8100 ADJUST DWTCHP TO MATCH FINAL PRT =7 ORRS A1,A6 U =7 XIF U =7 LD A1,DWTECB,A6 GET ECB ADDRESS =7 RF(NZ) RCTP02 REQUEST RUNNING =7 CM DWTOR,A6 RESET ORDER =7 RCTP02 EQU * U =7 LDKL A1,/7FFF INDICATE DEVICE BUSY ANS A1,DWTST,A6 =8 LD A1,DWTPP,A6 RF(N) RCTP08 NOT SYSTEM START UP RECOVERY =9(=2) 5 LINES DELETED =9 LD A3,STDPP SET UP ST PR PAR IN DWT =2 ST A3,DWTPP,A6 U =2 LDK A4,8 SET UP DOC PAR TABLE 0 IN DWT =2 LDR A3,A6 U =2 ADK A3,DWTDP+8 U =2 RCTP05 LD A1,DTTP03,A4 U =2 STR A1,A3 U =2 SUK A3,2 U =2 SUK A4,2 U =2 RB(NN) RCTP05 U =2 RCTP08 LDK A3,POTEST LOAD PRINTER ORDER TEST STATUS =9 CF A5,ORDER AND SEND =9 CF A5,EXECUT EXECUTE ORDER IN PRINTER =9 RCTP10 LDK A3,PORECV SET UP PRINTER RECOVERY ORDER =8 CF A5,ORDER AND SEND =8 LD A3,DWTPP,A6 GET PRINTER PARAMETERS =2 3 LINES DELETED =9 RCTP20 ECR A2,A3 U =4(=2) CF A5,OUT SEND L/NCV LDR A2,A3 U =9 CF A5,OUT SEND CPJ/CPD LC A2,DWTAPJ,A6 GET ACTUAL POS JOURNAL CF A5,OUT AND SEND LC A2,DWTAPD,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,DWTALN,A6 GET ACTUAL LINE NO CF A5,OUT AND SEND 10 LINES DELETED =9 RCTP40 LDK A4,10 LDR A3,A6 ADK A3,DWTDP RCTP50 LCR A2,A3 GET DOC PARAMETER U =4 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 ANK A2,/40 TEST PRINTER STATUS =9 RF(Z) RCTP70 DOCUMENT STILL INSIDE =9 CM DWTLN,A6 RESET LINE COUNTERS =9 CM DWTPPD,A6 RESET PRINT POSITION COUNTERS =9 RCTP70 LD A1,DWTECB,A6 ABL(NZ) ACT005 REQ RUNNING ABL DISEND REQ NOT RUNNING END