|
|
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: 33136 (0x8170)
Notes: pts_type(SC)
Names: »DRGP02.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRGP02.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRGP02.SC«
IDENT DRGP02 REL 11.0 81-01-26 870105041100 =1,TIME OUT IF INACTIVE, 25 SEC. PRR 11.0 80-11-19 * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRGP02 = DRIVER GENERAL PRINTER * * * * * * * ******************************************************* * * THIS DRIVER HANDLES GENERAL PRINTER PTS 8081 * * THE DRIVER CONSISTS OF THE FOLLOWING PARTS : * * A C T P : ACTIVATION PART * * R C T P : RECOVERY ROUTINE * * EJECT * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00 : TEST STATUS * ORDER 06 : WRITE * ORDER 0B : POSITION DOCUMENT * ORDER 24 : SET PRINTER PARAMETERS * ORDER 38 : RELEASE DOCUMENT * * THE FOLLOWING RETURN CODES ARE USED: * * BIT 0 : REQUEST ERROR * BIT 2 : END OF JOURNAL TAPE, 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: WORK REGISTER * A5: STACK POINTER * A6: DWT-ADDRESS * A7: ORDER * A8: ECB-ADDRESS * * EJECT * * ******************************************* * * ENTRIES * ******************************************* * * ENTRY GPAD8 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 SETIMP SET TIMER =1 EXTRN DWTST DWT STATUS DISPLACEMENT EXTRN DWTECB DWT ECB DISPLACEMENT EXTRN DWTOR DWT ORDER DISPLACEMENT EXTRN DWTSB2 STACK BASE EXTRN INPUT STORE REG = GET STATUS INPUT CHAR EXTRN STABLK DEF START OF BLOCK EXTRN ENDBLK DEF END OF BLOCK EXTRN DWTDEV DEVICE STATUS EJECT * * ****************************************** * * CONSTANTS * ****************************************** * * SPEC EQU /2E SPECIAL CHARACTER LF EQU /0A LINE FEED FF EQU /0C FORM FEED CR EQU /0D CARRIAGE RETURN SO EQU /0E SHIFT OUT SI EQU /0F SHIFT IN ESC EQU /1B ESCAPE CSI EQU /5B CONTROL SEQUENCE INTRODUCER REP EQU /62 REPEAT VPR EQU /65 VERTICAL POSITION RELATIVE INFF EQU /74 INPUT FRONT FEED VPFF EQU /71 VERTICAL POSITION FRONT FEED EJFF EQU /38 EJECT FRONT FEED SNV EQU /77 SELECT NATIONAL VERSION SLPL EQU /76 SELECT PAGE LENGTH RIS EQU /63 RESET TO INITIAL STATE DSR EQU /6E DEVICE STATUS REPORT DCS EQU /50 DEVICE CONTROL STRING ST EQU /5C STRING TERMINATOR DEL EQU /7F DELETE ZERO EQU /30 ZERO NEG EQU /FF TIME EQU /FF 25 SEC TIMER =1 EJECT * * ********************************************************* * * CONTROL SEQUENCES * ********************************************************* * * BYTE FORM 8,8 * * CSREP EQU * REPEAT BYTE ESC,CSI BYTE ZERO,ZERO BYTE ZERO,REP BYTE NEG,NEG CSVPR EQU * VERTICAL POSITION RELATIVE BYTE ESC,CSI BYTE ZERO,ZERO BYTE ZERO,VPR BYTE NEG,NEG CSINFF EQU * INPUT FRONT FEED BYTE ESC,CSI BYTE ZERO,ZERO BYTE INFF,NEG CSVPFF EQU * VERTICAL POSITION FRONT FEED BYTE ESC,CSI BYTE ZERO,ZERO BYTE VPFF,NEG CSEJFF EQU * EJECT FRONT FEED BYTE ESC,EJFF BYTE NEG,NEG EJECT CSSNV EQU * SELECT NATIONAL VERSION BYTE ESC,CSI BYTE ZERO,ZERO BYTE SNV,NEG CSSLPL EQU * SELECT PAGELENGTH BYTE ESC,CSI BYTE ZERO,ZERO BYTE SLPL,NEG * BYTE NEG,NEG CSRIS EQU * RESET TO INITIAL STATE BYTE ESC,RIS BYTE NEG,NEG CSDSR EQU * DEVICE STATUS REPORT BYTE ESC,CSI BYTE /35,DSR BYTE NEG,NEG EJECT * * ******************************************************* * * CONDITIONAL ASSEMBLY * ******************************************************* * * * * THE STANDARD NATIONAL CHARACTER SET IS CHOOSEN * BY SETTING X:A TO 1-15 ACCORDING TO THE LIST BELOW * * * NCV=1 GERMANY,AUSTRIA,LUXEMBOURG,SWITZERLAND =2 GREAT BRITAIN,NETHERLANDS,BELGIUM,NEW ZEELAND,SOUTH AFRICA =3 FRANCE,SWITZERLAND,BELGIUM,LUXEMBOURG =4 SPAIN,MEXICO,ARGENTINA,VENEZUELA =5 ITALY,SWITZERLAND =6 SWEDEN,FINLAND =7 DENMARK,NORWAY =8 PORTUGAL,BRAZIL =9 YUGOSLAVIA =10 USA,CANADA,AUSTRALIA =11 SWEDEN (SPECIAL VERSION) =13 GREEK =14 JAPAN (KATAKANA VERSION) =15 ISRAEL (HEBREW VERSION) * * X:A EQU 02 GREAT BRITAIN AS STANDARD STDNCV EQU X:A EJECT * * * THE FRONT FEED DEVICE CAN BE EXCLUDED * BY SETTING X:B = 0 * * X:B EQU 1 FFDEV EQU X:B FRONT FEED DEVICE * * * * THE STANDARD PAGELENGTH IS DEFINED * BY SETTING X:C = NUMBER OF LINES * * X:C EQU 48 PAGLEN EQU X:C * * * THE STANDARD NUMBER OF LINES IS DEFINED * BY SETTING X:D = NUMBER OF LINES * * X:D EQU 36 * DOCLEN EQU X:D EJECT * * * * MMU BUFFER SIZE * * X:E EQU 132 DVBLEN EQU X:E * * * * 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 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 * DWTTP EQU /2 TIMER POINTER =1 DWTDCS EQU /4 DOCUMENT CHARACTER SET DWTPCS EQU /6 PRINTER CHARACTER SET DWTPL EQU /8 PRINTER PAPER LENGTH DWTDL EQU /A DOCUMENT PAPER LENGTH DWTALN EQU /C ACTUAL LINE ON DOCUMENT DWTRLN EQU /E REQUESTED LINE ON DOCUMENT DWTRC EQU /11 RETURN CODE (ACKUMULATED) DWTSTR EQU /12 CONTROL SEQUENCE ADRESS DWTDISP EQU /14 DWT-DISPLACEMENT TO LINE NO,CHAR.SET,ETC. DWTACD EQU /16 ACTUAL COLUMN DOCUMENT DWTACP EQU /19 ACTUAL COLUMN PAPER DWTCO1 EQU /1C COLUMN COUNTER 1 DWTCO2 EQU /1E COLUMN COUNTER 2 DWTSYST EQU /22 SYSTEM START IND. DWTLFD EQU /24 LINE/FORM FEED INDICATOR EJECT * * ******************************************* * * 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 * ******************************************* * * DATA DVBLEN MMU BUFFER SIZE DATA 2 DEVICE INDEX GPAD8 EQU * ADDRESS BLOCK DATA ACTP ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS DATA 0 INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE TPTAB EQU * IFT FFDEV=1 DATA /0107,/0C25,/3939 XIF DATA /0006,/2424 TPLEN EQU *-TPTAB 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=CONTINUOUS STATIONARY, 1=DOCUMENT * LC A2,DWTOR,A6 GET DWT INDEX ANK A2,1 MASK LC A3,DWTDEV+1,A6 GET OLD DEVICE VALUE ANK A3,/FE ORR A3,A2 SC A3,DWTDEV+1,A6 STORE INDEX ADR A7,A2 ADD DWT INDEX TO ORDER SC A7,DWTOR+1,A6 STORE MODIFIED ORDER ACT005 LDK A3,TPLEN-1 ACT010 CC A7,TPTAB,A3 CHECK IF LEGAL ORDER RF(E) ACT020 VALID ORDER SUK A3,1 RB(NN) ACT010 TRY NEXT * ABL LENDER ILLEGAL ORDER * * ACT020 EQU * ADR A3,A3 GET INDEX ABI TPFUC,A3 EXECUTE ORDER EJECT TPFUC EQU * IFT FFDEV=1 DATA TSTSTA,WRTDOC,POSDOC,DOCPAR,RELDOC,RELDOC XIF DATA TSTSTA,WRTCON,CSTPAR,CSTPAR EJECT * * * ORDER 00 : TEST STATUS * * TSTSTA EQU * TEST STATUS CF A5,RESREC CF A5,GTSTAT GET STATUS FROM PRINTER ABL LENDIS END REQUEST EJECT IFT FFDEV=1 * * * ORDER 06: WRITE DOCUMENT * * WRTDOC EQU * CF A5,GTSTAT LD A4,DWTDEV,A6 DEVICE STATUS ANKL A4,/20 HAS POWER OFF OCCURED? RF(NZ) WRDO05 YES. LDKL A3,/2000 * TM A1,A3 DOCUMENT OUT? RF(Z) WRDO06 NO LDKL A3,/8000 YES.SET BIT 0 (REQUEST ERROR) ORS A3,ECBRC,A8 SET REQUEST ERROR IN R.C. ABL LENDIS END REQUEST WRDO05 EQU * * WRDO06 LDK A3,1 TM A1,A3 NOT OPERABLE? RF(Z) WRDO10 NO ABL LENDIS END REQUEST WRDO10 LDK A2,20 MAX BLOCK SIZE CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LD A3,DWTDEV+DWTALN,A6 GET ACTUAL LINE RF(NZ) WRDO15 LDK A3,1 SET UP ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER SUK A2,/31 CTRL CHAR=/31 ? ABL(NE) POSERR NO, DOC. NOT POSITIONED LD A3,DWTDEV+DWTDL,A6 * ST A3,DWTDEV+DWTRLN,A6 FIRST LINE ON DOC. WRDO12 LDKL A2,CSINFF INPUT FRONT FEED LDKL A3,DWTDEV+DWTRLN REQUESTED LINE NO DISPLACEMENT CF A5,SEND SEND INPUT FRONT FEED LD A3,DWTDEV+DWTRLN,A6 ST A3,DWTDEV+DWTALN,A6 SET DWTDEV+DWTALN=DWTRLN WRDO15 LDKL A2,CSSNV SELECT NATIONAL VERSION LDKL A3,DWTDEV+DWTDCS DOCUMENT CHARACTER SET DISPLACEMENT CF A5,SEND SEND SELECT NATIONAL VERSION CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR * * EXAMINE CONTROL CHARACTER * LDK A3,1 SET ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER LD A1,DWTDEV,A6 GET DEVICE STATUS ANKL A1,/20 HAS POWER OFF OCCURED ? RF(NZ) REP1 YES * SUK A2,/2B PRINT WITHOUT LINE FEED ? RF(Z) WRT03 YES WRT04 LDR A4,A2 SAVE CONTROL CHAR. IN A4 LD A2,ECBRL,A8 ADK A2,/8 MAX BLOCK SIZE CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDR A2,A4 RESTORE CONT. CHAR. IN A2 CM DWTDEV+DWTCO2,A6 CLEAR DOCUMENT COLUMN COUNTER SUK A2,5 PRINT AFTER TWO LINE FEED ? RF(Z) TWOLF1 YES * SUK A2,1 PRINT AFTER FORM FEED ? ABL(Z) WRT14 YES, ALLREADY DONE ! * RF ONELF1 PRINT AFTER ONE LINE FEED ! * * EXECUTE CONTROL CHARACTER * WRT03 LD A4,DWTDEV+DWTCO2,A6 GET ACTUAL COLUMN RF(Z) WRT05 SUK A4,1 FOR CORRECT NO OF SPACES WRT05 CF A5,KONVER CONVERT BINARY TO ASCII SC A2,DWTDEV+DWTACD,A6 STORE THE VALUE IN ACTUAL COL. DOC. SC A4,DWTDEV+DWTACD+2,A6 STORE THE VALUE IN ACTUAL COL. DOC. SRL A4,8 SC A4,DWTDEV+DWTACD+1,A6 SHIFT FOR CORRECT DIGITS * WRT09 LDKL A2,/8C BLOCK SIZE CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LD A4,DWTDEV+DWTCO2,A6 ABL(Z) WRT15 JMP IF NO PRECEIDING SPACES LDK A2,/20 SEND SPACE CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSREP REPEAT LDKL A3,DWTDEV+DWTACD ACTUAL COLUMN DOCUMENT DISPLACEMENT CF A5,SEND SEND REPEAT ABL WRT15 * TWOLF1 LD A1,DWTDEV+DWTRLN,A6 GET REQ LINE NO CF A5,BINARY CONV ASCII TO BINARY SUK A3,1 INCR REQ LINE NO RF TWO TWO LINE FEED ONELF1 LD A1,DWTDEV+DWTRLN,A6 GET REQ LINE NO CF A5,BINARY TWO SUK A3,1 INCR REQ LINE NO LDR A4,A3 CF A5,KONVER CONV BINARY TO ASCII ST A4,DWTDEV+DWTRLN,A6 STORE REQ LINE NO LDKL A2,CSVPFF VERTICAL POSITION FRONT FEED LDKL A3,DWTDEV+DWTRLN REQUESTED LINE NUMBER DISPLACEMENT CF A5,SEND LD A4,DWTDEV+DWTRLN,A6 ST A4,DWTDEV+DWTALN,A6 ACTUAL LINE = REQUESTED LINE RF WRT14 * * REPEAT WRITE REQUEST AT DOCUMENT STATION * REP1 CF A5,RESREC SUK A2,/2B PRINT WITHOUT LINE FEED ? RB(Z) WRT09 YES LD A1,DWTDEV+DWTLFD,A6 GET INDICATOR RF(NZ) WRT15 JMP IF LF/FF DONE RB WRT04 * XIF EJECT * * * ORDER 06: WRITE CONTINOUS STATIONARY * * WRTCON EQU * CF A5,GTSTAT GET DEVICE STATUS LDKL A3,/2000 * TM A1,A3 END OF PAPER? RF(Z) WRCO05 NO. ABL ENDIO END REQUEST WRCO05 LDK A3,1 NOT OPERABLE? TM A1,A3 RF(Z) WRCO10 NO ABL ENDIO END REQUEST WRCO10 LDK A2,/E BLOCK SIZE CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSSNV SELECT NATIONAL VERSION LDKL A3,DWTDEV+DWTPCS PRINTER CHAR. SET DISPLACEMENT CF A5,SEND SEND SELECT NATIONAL VERSION CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR * * EXAMINE CONTROL CHARACTER, CONTINOUS * LDK A3,1 SET UP ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER LD A1,DWTDEV,A6 GET DEVICE STATUS ANKL A1,/20 HAS POWER OFF OCCURED ? RF(NZ) REP2 YES * SUK A2,/2B PRINT WITHOUT LINE FEED ? RF(Z) WRC03 YES WRC04 LDR A4,A2 SAVE CONTROL CHAR. IN A4 LD A2,ECBRL,A8 ADK A2,/8 BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDR A2,A4 RESTORE CONT. CHAR. IN A2 CM DWTDEV+DWTCO1,A6 CLEAR PAPER COL. COUNTER SUK A2,5 PRINT AFTER TWO LINE FEED ? RF(Z) TWOLF2 YES * SUK A2,1 PRINT AFTER FORM FEED ? RF(Z) FORMF YES * RF ONELF2 PRINT AFTER ONE LINE FEED ! * * EXECUTE CONTROL CHARACTER, CONTINOUS * WRC03 LD A4,DWTDEV+DWTCO1,A6 GET ACTUAL COLUMN RF(Z) WRC05 FOR CORRECT NO OF SPACES SUK A4,1 WRC05 CF A5,KONVER CONVERT BINARY TO ASCII SC A2,DWTDEV+DWTACP,A6 STORE THE VALUE IN ACTUAL COL. CONTINOUS ST A4,DWTDEV+DWTACP+2,A6 STORE THE VALUE IN ACT. COL. CONT. * WRC07 LDK A2,/8C BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LD A4,DWTDEV+DWTCO1,A6 RF(Z) WRT15 JMP IF NO PRECEIDING SPACES LDK A2,/20 SEND SPACE CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSREP REPEAT LDKL A3,DWTDEV+DWTACP ACTUAL COLUMN PAPER DISPLACEMENT CF A5,SEND SEND REPEAT RF WRT15 * TWOLF2 LDK A2,LF SEND LINE FEED CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR ONELF2 LDK A2,LF SEND LINE FEED CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR RF WRT14 * FORMF LDK A2,FF SEND FORM FEED CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR RF WRT14 * * REPEAT WRITE REQUEST AT CONTINOUS STATION * REP2 CF A5,RESREC SUK A2,/2B PRINT WITHOUT LINE FEED ? RB(Z) WRC07 YES LD A1,DWTDEV+DWTLFD,A6 GET INDICATOR RF(NZ) WRT15 JMP IF LF/FF DONE RB WRC04 EJECT * * ORDER 06 : THIS PART SENDS THE CHARACTERS * TO DOCUMENT OR CONTINOUS STATIONARY. * WRT14 IM DWTDEV+DWTLFD,A6 SET LF/FF INDICATOR * WRT15 LDK A3,2 SET ECB BUFFER POINTER WRT16 CF A15,GETCHR GET CHARACTER LDR A4,A1 BUFFER FINISHED ? RF(P) WRT20 NO WRT17 SUK A3,/02 ECB BUFFER POINTER = /02 RF(Z) WRT18 YES. LDK A2,CR NO. SEND CARRIAGE RETURN CF A5,OUTPUT ABL(NZ) ERROUT JMP IF ERROR WRT18 CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CF A5,GTSTAT GET STATUS RF ENDIO END REQUEST * WRT20 EQU * LDR A4,A2 * * EXAMINE CHARACTER AND SEND DEPENDING ON TYPE OF CHARACTER * SUK A4,/20 CHAR < /20? RB(N) WRT16 YES GET A NEW CHARACTER SUK A4,/5F CHAR < /7F? RF(N) WRT25 YES. SUK A4,/2F NO. CHAR = /AE? RF(Z) WRT30 YES. CONVERT /AE TO /2E LDK A4,/04 ILLEGAL CHARACTER SET BIT 13 IN R.C. ORS A4,ECBRC,A8 RB WRT16 WRT30 LDK A2,/2E WRT25 LDR A4,A1 CF A5,OUTPUT SEND CHARACTER ABL(NZ) ERROUT JMP IF ERROR LC A2,DWTOR+1,A6 GET DWT INDEX ANK A2,1 DOCUMENT? RF(NZ) WRT40 YES IM DWTDEV+DWTCO1,A6 INC.COLUMN COUNTER 1 RB WRT16 WRT40 IM DWTDEV+DWTCO2,A6 INC.COLUMN COUNTER 2 RB WRT16 ENDIO EQU * CM DWTDEV+DWTLFD,A6 CLEAR LF/FF INDICATOR ABL LENDIS END REQUEST EJECT IFT FFDEV=1 * * * ORDER 0B : POSITION DOCUMENT * CONTROL WORD CONTAINS REQUESTED LINE NO * * POSDOC EQU * POSITION DOCUMENT CF A5,RESREC CF A5,GTSTAT GET DEVICE STATUS LDK A3,1 NOT OPERABLE TM A1,A3 * RF(NZ) POS020 YES LDK A2,/E BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSSNV SELECT NATIONAL VERSION LDKL A3,DWTDEV+DWTDCS DOCUMENT VERSION CF A5,SEND SEND SNV CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LD A4,ECBCW,A8 GET REQUESTED LINE ANK A4,/FF RF(Z) POSERR ILLEGAL LINE NUMBER LD A1,DWTDEV+DWTDL,A6 MAX. LINE CF A5,BINARY CONVERT ASCII TO BINARY CWR A4,A3 REQ. LINE>MAX. LINE RF(G) POSERR YES ADK A3,1 CORRECT POSITION SUR A4,A3 INVERT LINE NO. NGR A4,A4 GET PRINTER REQ. LINE NO. CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDEV+DWTRLN,A6 SET REQUESTED LINE LD A4,DWTDEV+DWTALN,A6 GET ACTUAL LINE RF(NZ) POS030 DOCUMENT ALREADY POSITIONED POS005 EQU * LDK A2,/6 BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSINFF INPUT FRONT FEED LDKL A3,DWTDEV+DWTRLN REQUESTED LINE NUMBER DISPLACEMENT CF A5,SEND SEND INPUT FRONT FEED POS010 EQU * CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CF A5,GTSTAT GET STATUS LDR A2,A1 GET RETURN CODE ANKL A2,/2000 PAPER DOCUMENT OUT ? RB(NZ) POS005 YES WAIT FOR DOCUMENT TO BE INSERTED LD A4,DWTDEV+DWTRLN,A6 GET REQUESTED LINE ST A4,DWTDEV+DWTALN,A6 ACTUAL LINE = REQ LINE POS020 ABL LENDIS POS030 EQU * LDK A2,/6 BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSVPFF VERTICAL POSITION FRONT FEED LDKL A3,DWTDEV+DWTRLN REQUESTED LINE NUMBER DISPLACEMENT CF A5,SEND SEND VERTICAL POSITION FRONT FEED RB POS010 XIF POSERR EQU * ABL LENDER REQ. ERROR, END REQUEST EJECT IFT FFDEV=1 * * * ORDER 24 : SET DOCUMENT PARAMETERS * * DOCPAR EQU * DOCUMENT PARAMETERS LDK A1,0 CLEAR A1 CF A5,RESREC LD A4,ECBCW,A8 GET NUMBER OF LINES SRL A4,8 GET LINES RF(Z) DOC010 NO CHANGE OF LINES CWK A4,/10 INDEX TO BIG RB(G) POSERR YES ADR A4,A4 ADJUST INDEX TO LINE TABLE LD A4,LINNUM,A4 GET LINE ACCORDING TO INDEX ST A4,DWTDEV+DWTDL,A6 SET PAGE LENGTH FOR DOCUMENT DOC010 EQU * LD A4,ECBCW,A8 GET NATIONAL CHARACTER VARIATION ANK A4,/FF RF(Z) DOC020 NO CHANGE OF NATIONAL CHARACTER SET CWK A4,/F INDEX TO BIG RB(G) POSERR YES ADR A4,A4 ADJUST TABLE INDEX LD A4,NCVTAB,A4 GET NAT. CHAR. SET ACC. TO INDEX ST A4,DWTDEV+DWTDCS,A6 SET CHARACTER SET FOR DOCUMENT DOC020 EQU * RB ENDIO END REQUEST XIF EJECT * * * ORDER 24 : SET CONTINUOUS STATIONARY PARAMETERS * * CSTPAR EQU * SET PARAMETERS CONTINUOUS STATIONARY LDK A1,0 CLEAR A1 CF A5,RESREC LD A4,ECBCW,A8 GET NUMBER OF LINES CST. SRL A4,8 GET LINES RF(Z) CST010 NO CHANGE OF LINES CWK A4,/10 INDEX TO BIG RB(G) POSERR YES ADR A4,A4 ADJUST INDEX TO LINE TABLE LD A4,LINNUM,A4 GET LINES ACCORDING TO INDEX ST A4,DWTDEV+DWTPL,A6 SET PAGE LENGTH FOR CONT.STAT. LDK A2,/A BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSSLPL SELECT PAGELENGTH LDKL A3,DWTDEV+DWTPL PRINTER PAPER LENGTH DISPL. CF A5,SEND SEND SLECT PAGELENGTH CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CST010 EQU * LD A4,ECBCW,A8 GET NATIONAL CHARACTER VARIATION ANK A4,/FF RF(Z) CST020 NO CHANGE OF NAT. CHAR. SET CWK A4,/F INDEX TO BIG RB(G) POSERR YES ADR A4,A4 ADJUST INDEX TO NAT. CHAR. TABLE LD A4,NCVTAB,A4 GET NAT. CHAR. SET ACC. TO INDEX ST A4,DWTDEV+DWTPCS,A6 SET NAT. CHAR. SET FOR CONT.STAT. CST020 EQU * ABL ENDIO END REQUEST EJECT IFT FFDEV=1 * * * ORDER 38 : RELEASE DOCUMENT * * RELDOC EQU * LDK A2,/4 BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CF A5,RESREC LDKL A2,CSEJFF CONTROL SEQ. EJECT FRONT FEED CF A5,SEND SEND SEQUENCE CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CF A5,GTSTAT GET STATUS FROM PRINTER LDR A2,A1 GET RETURN CODE ANK A2,/20 DOCUMENT RELEASED RB(NZ) RELDOC NO , TRY AGAIN ANKL A1,/8000 REQUEST ERROR CM DWTDEV+DWTALN,A6 RESET ACTUAL LINE CM DWTDEV+DWTRLN,A6 RESET REQUESTED LINE ABL ENDIO END REQUEST XIF EJECT * * * R C T P * * RECOVERY ROUTINE REPEATS RUNNING REQUEST AT POWER ON * * RCTP EQU * RCTP07 LDKL A1,/7FFF SET DEVICE BUSY ANS A1,DWTST,A6 BUSY LDKL A5,DWTSB2 STACK BASE ADR A5,A6 LDK A2,/F BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDKL A2,CSRIS RESET TO INITIAL STATE CF A5,SEND SEND RESET TO INITIAL STATE LD A1,DWTDEV+DWTSYST,A6 INTERN. SYSTEM START IND. RF(Z) RCTP10 NO SYSTEM START * CM DWTDEV+DWTSYST,A6 SET SYSTEM START INDICATOR * LDKL A4,STDNCV GET STANDARD NAT. CHAR. SET CF A5,KONVER CONVERT BIANARY TO ASCII ST A4,DWTDEV+DWTDCS,A6 SET CHAR. SET DOCUMENT ST A4,DWTDEV+DWTPCS,A6 SET CHAR. SET CONT.STAT. LDKL A4,PAGLEN STANDARD PAGE LENGTH CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDEV+DWTPL,A6 SET PAGE LENGTH CONT.STAT. LDKL A2,CSSLPL SELECT PAGELENGTH LDKL A3,DWTDEV+DWTPL PRINTER PAPER LENGTH DISPL. CF A5,SEND SEND SELECT PAGELENGTH LDKL A4,DOCLEN GET STANDARD PAGE LENGTH DOCUMENT CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDEV+DWTDL,A6 SET PAGE LENGTH DOCUMENT RCTP10 EQU * CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR CM DWTDEV+DWTALN,A6 RESET ACTUAL LINE LDKL A1,/20 INDICATE POWER OFF OCCURED ORS A1,DWTDEV,A6 LD A1,DWTECB,A6 RUNNING REQUEST ABL(NZ) ACT005 YES , REPEAT THE REQUEST ABL LENDIS DISPATCH EJECT * * * GTSTAT * * * THIS ROUTINE SENDS 'DEVICE STATUS REPORT TO THE PRINTER * * AND ANALYZES THE DEVICE STATUS SENT FROM THE PRINTER * * AT EXIT A1 = RETURN CODE * * GTSTAT EQU * CM DWTDEV+DWTRC,A6 RESET RETURN CODE LDK A2,/4 BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDK A2,ESC ESCAPE CF A5,OUTPUT SEND ESC ABL(NZ) ERROUT JMP IF ERROR LDK A2,CSI CONTROL SEQUENCE INTRODUCER CF A5,OUTPUT SEND CSI ABL(NZ) ERROUT JMP IF ERROR LDK A2,/35 CF A5,OUTPUT SEND /35 ABL(NZ) ERROUT JMP IF ERROR LDK A2,DSR DEVICE STATUS REPORT CF A5,OUTPUT SEND DSR ABL(NZ) ERROUT JMP IF ERROR CF A5,ENDBLK END OF BLOCK ABL(NZ) ERROUT JMP IF ERROR LDR A1,A6 SAVE DWT ADDRESS =1 LDKL A4,DWTDEV+DWTTP =1 ADR A4,A6 =1 CF A15,SETIMP SET TIMER =1 DATA ERGP00,TIME RETURN ADDR., TIMEOUT =1 GTST05 LDKL A4,TAB GET TABLE ADDRESS GTST10 EQU * LDK A3,0 RESET INDEX CF A5,INPUT READ STATUS FROM PRINTER ANK A2,/FF GET CHARACTER CCK A2,/5C5C STRING TERMINATOR RF(E) GTSEND YES LCR A3,A4 GET MASK RETURN CODE ANR A2,A3 LDKL A3,/3AC0 SHIFT LEFT CIRCULAR A2 LC A3,1,A4 A3 TIMES EXR A3 EXECUT SHIFT INSTRUCTION ORS A2,DWTDEV+DWTRC,A6 SAVE RETURN CODE TEMPORARILY ADK A4,2 INCREMENT ADRESS RB GTST10 GET NEXT STATUS CHARACTER GTSEND EQU * LD A1,DWTDEV+DWTRC,A6 GET RETURN CODE LD A2,DWTDEV+DWTTP,A6 =1 RF(Z) GTST20 CHECK IF ALLREADY ZERO =1 CM* DWTDEV+DWTTP,A6 RESET TIMER =1 GTST20 CM DWTDEV+DWTTP,A6 RESET TIMER POINTER =1 RTN A5 EJECT * * THIS ROUTINE CONVERTS A BINARY VALUE TO ASCII CODE * * REGISTERS : * A1= WORK REGISTER * A4= BINARY INPUT * A2,A4= ASCII OUTPUT * * KONVER EQU * * BINARY TO DEC. LDK A2,0 CLEAR A2 CWK A4,100 VALUE > 100 ? RF(L) KONV05 NO SUKL A4,100 LDKL A2,/100 LEFT BYTE OF A2=X=1 KONV05 CWK A4,10 ARE THERE ANY TENS ? RF(L) KONV04 NO SUK A4,10 ADK A2,/1 NUMBER OF TENS IN RIGHT B. OF A2=Y RB KONV05 NEXT KONV04 ORKL A2,/3030 XY IN A2 ORK A4,/30 Z IN A4 SRC A2,8 YX IN A2 LDR A1,A2 ANKL A1,/FF00 KEEP Y IN A1 ANK A2,/FF KEEP X IN R. BYTE OF A2. ASCII ORR A4,A1 YZ IN A1. ASCII RTN A5 EJECT * * RESET RECORVERY * RESREC EQU * LD A4,DWTDEV,A6 DEVICE STATUS ANKL A4,/20 RECOVERY? RF(E) RESRTN NO. XRS A4,DWTDEV,A6 YES. RESET RECOVERY BIT RESRTN RTN A5 RETURN * * * * * ERROR ROUTINE FOR STABLK,OUTPUT AND ENDBLK AND TIMER * * INPUT : A1 = RETURN CODE * ERROUT EQU * ANK A1,/1A OUTP. ERR, SOFTW T-OUT, LRC-ERR ABL(NZ) RCTP RECOVERY ERGP10 LDK A1,1 IND. NOT OP. ABL LENDIS * ERGP00 EQU * =1 LDR A6,A1 RESTORE DWTADDRESS =1 CM DWTDEV+DWTTP,A6 RESET TIMER POINTER =1 RB ERGP10 EJECT * * * S E N D * * THIS ROUTINE SENDS AN CONTROL SEQUENCE * TO THE PRINTER * * * AT ENTRY : * A2 = CONTROL SEQUENCE ADRESS * A3 = DWT-DISPLACEMENT TO LINE NO,CHAR.SET,ETC * * * AT EXIT : * A1,A2,A3 IS DESTROYED * * * SEND EQU * SEND CONTROL SEQUENCE ST A3,DWTDEV+DWTDISP,A6 SAVE DWT-DISPLACEMENT ST A2,DWTDEV+DWTSTR,A6 CONTROL SEQUENCE ADRESS SEND10 EQU * LD A3,DWTDEV+DWTSTR,A6 GET CONTROL SEQUENCE ADRESS LCR A2,A3 GET CHARACTER ANK A2,/FF MAKE CHARACTER SLL A2,8 END OF CONTROL SEQUENCE RF(N) SENDEND YES,RETURN CWK A2,/3000 LINE NO,CHAR.SET,ETC RF(E) SEND30 YES SRL A2,8 PREPARE TO SEND CHARACTER CF A5,OUTPUT SEND CHARACTER ABL(NZ) ERROUT JMP IF ERROR SEND20 EQU * IM DWTDEV+DWTSTR,A6 INC. CONTROLSEQUENCE ADRESS RB SEND10 GET NEXT SEND30 EQU * LD A3,DWTDEV+DWTDISP,A6 GET DWT-DISPLACEMENT ADR A3,A6 GET PROPER VALUE LCR A2,A3 GET CHARACTER CF A5,OUTPUT SEND CHARACTER ABL(NZ) ERROUT JMP IF ERROR IM DWTDEV+DWTDISP,A6 INC. DISPLACEMENT ADRESS RB SEND20 GET NEXT SENDEND EQU * RTN A5 EJECT * * * BINARY * * THIS ROUTINE CONVERTS ASCII CODE TO A BINARY VALUE * * REGISTERS: * A1= ASCII INPUT * A2= WORK REGISTER * A3= BINARY OUTPUT * * * BINARY SUR A3,A3 CLEAR A3 LDR A2,A1 MAX. LINE ASCII SRL A2,8 SUK A2,/30 ADR A3,A2 ADR A3,A2 SLL A2,3 ADR A3,A2 ANK A1,/F ADR A3,A1 MAX. LINE BINARY RTN A5 EJECT LINNUM EQU *-2 NUMBER OF LINES DATA /3132,/3135,/3138,/3234 DATA /3235,/3330,/3333,/3335 DATA /3336,/3438,/3530,/3531 DATA /3630,/3636,/3730,/3732 * * * * NCVTAB EQU *-2 NATIONAL CHARACTER VARIATION YABLE DATA /3031,/3032,/3033,/3034 DATA /3035,/3036,/3037,/3038 DATA /3039,/3130,/3131,/3131 DATA /3133,/3134,/3135 TAB EQU * MASK TABLE FOR STATUS REPORT FROM PRINTER DATA /C0,/C0,/C0,/2CC * DATA /2CF,/4CB,/C0,/C0 * DATA /C0,/C0,/C0,/C0 DATA /C0,/C0 END