|
|
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: 30176 (0x75e0)
Notes: pts_type(SC)
Names: »DRGP01.SC«
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
└─⟦this⟧ »MODMON/DRGP01.SC«
IDENT DRGP01 AUSTRIA DRIVER FOR 8081 800624 =1,IMPROVEMENT OF FORM LENGTH CON- TROL & FORM FEED FUNCTION ON CONT. STATIONARY. PRR 10.0 79-12-07 =2,XIF MOVED TO RIGHT PLACE PRR 10.0 80-01-25 =3A,TIME-OUT FUER DRUCKERSTATUS * * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRGP01 = DRIVER GENERAL PRINTER * * * * * * * ******************************************************* * * THIS DRIVER HANDLES GENERAL PRINTER PTS 8081 * * THE DRIVER CONSISTS OF THE FOLLOWING PARTS : * * A C T P : ACTIVATION PART * * I H T P : INTERRUPT HANDLER * * R C T P : RECOVERY ROUTINE * * * * 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 * * * * ******************************************* * * ENTRIES * ******************************************* * * ENTRY GPAD 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 STREG STORE REG = GET STATUS INPUT CHAR EXTRN INIFLG SYSTEM START INDICATOR EXTRN DWTTP EXTRN SETIMP EXTRN DWTSB1 * * ****************************************** * * CONSTANTS * ****************************************** * * STB EQU /82 START OF TEXT BLOCK ETB EQU /97 END OF TEXT BLOCK SPEC EQU /2E SPECIAL CHARACTER STX EQU /02 START OF TEXT ETX EQU /03 END OF TEXT 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 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 * * ZEIT EQU 15 1,5 SEC. FUER TIME-OUT * * * * ********************************************************* * * 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 * FRONT FEED BYTE ESC,EJFF BYTE NEG,NEG 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 * * ******************************************************* * * 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 07 * * * THE FRONT FEED DEVICE CAN BE EXCLUDED * BY SETTING X:B = 0 * * X:B EQU 1 FFDEV EQU 0 FRONT FEED DEVICE * * * * THE STANDARD PAGELENGTH IS DEFINED * BY SETTING X:C = NUMBER OF LINES * * X:C EQU 48 PAGLEN EQU 51 * * * THE STANDARD NUMBER OF LINES IS DEFINED * BY SETTING X:D = NUMBER OF LINES * * X:D EQU 36 * DOCLEN EQU 48 * * * * MMU BUFFER SIZE * * X:E EQU 132 DVBLEN EQU 162 * * * * 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 * * ******************************************* * * 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 * DWTDCS EQU START+/12 DOCUMENT CHARACTER SET DWTPCS EQU START+/14 PRINTER CHARACTER SET DWTPL EQU START+/16 PRINTER PAPER LENGTH DWTDL EQU START+/18 DOCUMENT PAPER LENGTH DWTALN EQU START+/1A ACTUAL LINE ON DOCUMENT DWTRLN EQU START+/1C REQUESTED LINE ON DOCUMENT DWTRC EQU START+/1F RETURN CODE (ACKUMULATED) DWTSTR EQU START+/20 CONTROL SEQUENCE ADRESS DWTDISP EQU START+/22 DWT-DISPLACEMENT TO LINE NO,CHAR.SET,ETC. DWTACD EQU START+/24 ACTUAL COLUMN DOCUMENT DWTACP EQU START+/27 ACTUAL COLUMN PAPER DWTCO1 EQU START+/2A COLUMN COUNTER 1 DWTCO2 EQU START+/2B COLUMN COUNTER 2 DWTSYST EQU START+/30 SYSTEM START IND. DWTLFD EQU START+/32 LINE/FORM FEED INDICATOR * * ******************************************* * * 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 * ******************************************* * * TABLES * ******************************************* * * DATA DVBLEN MMU BUFFER SIZE DATA 2 DEVICE INDEX GPAD EQU * ADDRESS BLOCK DATA ACTP ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS DATA IHTP INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE TPTAB EQU * IFT FFDEV=1 DATA /0107,/0C25,/3939 XIF DATA /0006,/2424 TPLEN EQU *-TPTAB * * * 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,DWTST+1,A6 GET OLD DEVICE VALUE ANK A3,/FE ORR A3,A2 SC A3,DWTST+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 DISIOE ILLEGAL ORDER * * ACT020 EQU * ADR A3,A3 GET INDEX ABI TPFUC,A3 EXECUTE ORDER TPFUC EQU * IFT FFDEV=1 DATA TSTSTA,WRTDOC,POSDOC,DOCPAR,RELDOC,RELDOC XIF DATA TSTSTA,WRTCON,CSTPAR,CSTPAR * * * ORDER 00 : TEST STATUS * * TSTSTA EQU * TEST STATUS CF A5,RESREC CF A5,GTSTAT GET STATUS FROM PRINTER ABL DISEND END REQUEST IFT FFDEV=1 * * * ORDER 06: WRITE DOCUMENT * * WRTDOC EQU * CF A5,GTSTAT LD A4,DWTST,A6 DEVICE STATUS ANKL A4,/200 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 (REQ ERROR) ORS A3,ECBRC,A8 ABL DISEND END REQUEST WRDO05 EQU * * WRDO06 LDK A3,1 TM A1,A3 NOT OPERABLE? RF(Z) WRDO10 NO ABL DISEND END REQUEST WRDO10 LD A3,DWTALN,A6 GET ACTUAL LINE RF(NZ) WRDO15 LDK A3,1 SET UP ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER CWK A2,/31 CTRL CHAR=/31 ? ABL(NE) POSERR NO,DOC NOT POSITIONED LD A3,DWTDL,A6 * ST A3,DWTRLN,A6 FIRST LINE ON DOC. WRDO12 LDKL A2,CSINFF INPUT FRONT FEED LDK A3,DWTRLN REQUESTED LINE NO DISPLACEMENT CF A5,SEND SEND INPUT FRONT FEED LD A3,DWTRLN,A6 ST A3,DWTALN,A6 SET DWTALN=DWTRLN WRDO15 LDKL A2,CSSNV SELECT NATIONAL VERSION LDK A3,DWTDCS DOCUMENT CHARACTER SET DISPLACEMENT CF A5,SEND SEND SELECT NATIONAL VERSION * =1 * =1 * =1 RF WRT01 GOTO GET CONTROL CHARACTER XIF * * * 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 LDKL A2,CSSNV SELECT NATIONAL VERSION LDK A3,DWTPCS PRINTER CHAR. SET DISPLACEMENT CF A5,SEND SEND SELECT NATIONAL VERSION U =1 U =1 U =1 * * GET CONTROL CHARACTER * WRT01 LDK A3,1 SET UP ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER LDR A4,A1 LD A1,DWTST,A6 GET DEVICE STATUS ANKL A1,/200 HAS POWER OFF OCCURED ? RF(Z) WRT04 NO CF A5,RESREC YES CWK A2,/2B CTRL. CHAR.=/2B ? RF(NE) WRT08 NO LC A1,DWTOR+1,A6 GET DWT INDEX ANK A1,1 DOCUMENT ? RF(NZ) WRT09 YES RF WRT07 NO WRT04 CWK A2,/2B CTRL. CHAR.=/2B RF(NE) WRT02 NO LC A2,DWTOR+1,A6 GET DWT INDEX ANK A2,1 DOCUMENT? RF(NZ) WRT03 YES LD A4,DWTCO1,A6 GET ACTUAL COLUMN CF A5,KONVER CONVERT BINARY TO ASCII SC A2,DWTACP,A6 STORE THE VALUE IN ACTUAL COLUMN PAPER D ST A4,DWTACP+2,A6 STORE THE VALUE IN ACTUAL COLUMN PAPER DISPLACEMENT WRT07 LDK A2,/20 SEND SPACE CF A5,OUTPUT LDKL A2,CSREP REPEAT LDK A3,DWTACP ACTUAL COLUMN PAPER DISPLACEMENT CF A5,SEND SEND REPEAT LDK A3,2 SET UP ECB BUFFER POINTER RF WRT15 WRT03 LD A4,DWTCO2,A6 GET ACTUAL COLUMN CF A5,KONVER CONVERT BINARY TO ASCII SC A2,DWTACD,A6 STORE THE VALUE IN ACTUAL COLUMN DOC. DI SC A4,DWTACD+2,A6 STORE THE VALUE IN ACTUAL COLUMN DOC.DISPLACEMENT SRL A4,8 SC A4,DWTACD+1,A6 SHIFT FOR CORRECT DIGITS WRT09 LDK A2,/20 SEND SPACE CF A5,OUTPUT LDKL A2,CSREP REPEAT LDK A3,DWTACD ACTUAL COLUMN DOCUMENT DISPLACEMENT CF A5,SEND SEND REPEAT LDK A3,2 SET UP ECB BUFFER POINTER RF WRT15 WRT08 LC A1,DWTLFD,A6 GET INDICATOR ANK A1,/8 IS LINE/FORM FEED DONE ? RF(Z) WRT14 YES WRT02 LC A1,DWTOR+1,A6 DOCUMENT ? ANK A1,1 * RF(Z) WRT13 NO * CWK A2,/30 TWO LINE FEED ? RF(E) WRT11 YES * CWK A2,/31 FORM FEED ? RF(E) WRT12 YES RF WRT16 * WRT11 LD A1,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 WRT16 LD A1,DWTRLN,A6 GET REQ LINE NO CF A5,BINARY CONV ASCII TO BINARY TWO SUK A3,1 INCR REQ LINE NO LDR A4,A3 * CF A5,KONVER CONV BINARY TO ASCII ST A4,DWTRLN,A6 STORE REQ LINE NO * LDKL A2,CSVPFF VERTICAL POS FRONT FEED LDK A3,DWTRLN REQ LINE NO DISPLACEMENT CF A5,SEND * * LD A4,DWTRLN,A6 * ST A4,DWTALN,A6 ACTUAL LINE =REQ LINE RF WRT12 * * WRT13 CWK A2,/30 CONTINOUS STATIONARY RF(E) WRT05 TWO LINE FEED,YES * CWK A2,/31 FORM FEED ? RF(NE) WRT10 NO * LDK A2,FF SEND FORM FEED CF A5,OUTPUT * RF WRT12 * * WRT05 LDK A2,LF SEND LINE FEED CF A5,OUTPUT WRT10 LDK A2,LF SEND LINE FEED CF A5,OUTPUT WRT12 LC A1,DWTLFD,A6 GET INDICATOR ORK A1,/4 INDICATE LINE/FORM FEED DONE SC A1,DWTLFD,A6 STORE INDICATOR WRT14 LC A2,DWTOR+1,A6 GET DWT INDEX ANK A2,1 DOCUMENT? RF(NZ) WRT45 YES CM DWTCO1,A6 CLEAR PAPER COLUMN COUNTER 1 WRT45 CM DWTCO2,A6 CLEAR DOCUMENT COLUMN COUNTER 2 * * WRT15 LDK A3,2 * RF WRT20 * WRT17 SUK A3,/02 ECB BUFFER POINTER = /02 RF(Z) WRT18 YES. LDK A2,CR NO. SEND CARRIAGE RETURN CF A5,OUTPUT WRT18 CF A5,GTSTAT GET STATUS RF ENDIO END REQUEST * WRT20 CF A15,GETCHR GET CHARACTER FRON ECB-BUFFER LDR A4,A1 RB(NP) WRT17 NO MORE CHARACTERS LDR A4,A2 * * EXAMINE CHARACTER AND SEND DEPENDING ON TYPE OF CHARACTER * SUK A4,/20 CHAR < /20? RB(N) WRT20 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 WRT20 WRT30 LDK A2,/2E WRT25 LDR A4,A1 CF A5,OUTPUT SEND CHARACTER LC A2,DWTOR+1,A6 GET DWT INDEX ANK A2,1 DOCUMENT? RF(NZ) WRT40 YES IM DWTCO1,A6 INC.COLUMN COUNTER 1 RB WRT20 WRT40 IM DWTCO2,A6 INC.COLUMN COUNTER 2 RB WRT20 ENDIO EQU * LC A2,DWTLFD,A6 * ANK A2,/8 * SC A2,DWTLFD,A6 RESET LF/FF IND. ABL DISEND END REQUEST 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 LDKL A2,CSSNV SELECT NATIONAL VERSION LDK A3,DWTDCS DOCUMENT VERSION CF A5,SEND SEND SNV * =1 * =1 * =1 LD A4,ECBCW,A8 GET REQUESTED LINE ANK A4,/FF RF(Z) POSERR ILLEGAL LINE NUMBER LD A1,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,DWTRLN,A6 SET REQUESTED LINE LD A4,DWTALN,A6 GET ACTUAL LINE RF(NZ) POS030 DOCUMENT ALREADY POSITIONED POS005 EQU * LDKL A2,CSINFF INPUT FRONT FEED LDK A3,DWTRLN REQUESTED LINE NUMBER DISPLACEMENT CF A5,SEND SEND INPUT FRONT FEED POS010 EQU * 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,DWTRLN,A6 GET REQUESTED LINE ST A4,DWTALN,A6 ACTUAL LINE = REQ LINE * =2 POS020 ABL DISEND POS030 EQU * LDKL A2,CSVPFF VERTICAL POSITION FRONT FEED LDK A3,DWTRLN REQUESTED LINE NUMBER DISPLACEMENT CF A5,SEND SEND VERTICAL POSITION FRONT FEED RB POS010 XIF =2 =2 POSERR EQU * LDKL A1,/8000 REQUEST ERROR RB ENDIO END REQUEST 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,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,DWTDCS,A6 SET CHARACTER SET FOR DOCUMENT DOC020 EQU * RB ENDIO END REQUEST XIF * * * 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,DWTPL,A6 SET PAGE LENGTH FOR CONT.STAT. LDKL A2,CSSLPL SELECT PAGELENGTH =1 LDK A3,DWTPL PRINTER PAPER LENGTH DISPL. =1 CF A5,SEND SEND SELECT PAGELENGTH =1 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,DWTPCS,A6 SET NAT. CHAR. SET FOR CONT.STAT. CST020 EQU * ABL ENDIO END REQUEST * * * IFT FFDEV=1 * * * ORDER 38 : RELEASE DOCUMENT * * RELDOC EQU * CF A5,RESREC LDKL A2,CSEJFF CONTROL SEQ. FRONT FEED CF A5,SEND SEND SEQUENCE 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 DWTALN,A6 RESET ACTUAL LINE CM DWTRLN,A6 RESET REQUESTED LINE ABL ENDIO END REQUEST XIF * * * I H T P * * * INTERRUPT HANDLER : PROCESS OF INTERRUPT * * * IHTP EQU * LD A4,DWTST,A6 I/O-REQUEST ABL(N) TDISP NO , DISPATCH ABL LDREG RETURN TO READ ROUTINE * * * R C T P * * RECOVERY ROUTINE REPEATS RUNNING REQUEST AT POWER ON * * RCTP EQU * CF A15,SAVE8 SAVE A1 - A8 LC A4,DWTLFD,A6 GET INDICATOR ANK A4,/4 IS LINE/FORM FEED DONE ? RF(NZ) RCTP05 YES ORK A4,/8 INDICATE:NO LINE/FORM FEED DONE SC A4,DWTLFD,A6 * * RF RCTP07 * * RCTP05 LDK A4,0 RESET INDICATORS ST A4,DWTLFD,A6 * RCTP07 LDKL A1,/7FFF SET DEVICE BUSY ANS A1,DWTST,A6 BUSY LDKL A2,CSRIS RESET TO INITIAL STATE CF A5,SEND SEND RESET TO INITIAL STATE LD A1,DWTSYST,A6 INTERN. SYSTEM START IND. RF(NZ) RCTP10 NO SYSTEM START * IM DWTSYST,A6 SET SYSTEM START INDICATOR * LDKL A4,STDNCV GET STANDARD NAT. CHAR. SET CF A5,KONVER CONVERT BIANARY TO ASCII ST A4,DWTDCS,A6 SET CHAR. SET DOCUMENT ST A4,DWTPCS,A6 SET CHAR. SET CONT.STAT. LDKL A4,PAGLEN STANDARD PAGE LENGTH CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTPL,A6 SET PAGE LENGTH CONT.STAT. LDKL A2,CSSLPL SELECT PAGELENGTH =1 LDK A3,DWTPL PRINTER PAPER LENGTH DISPL. =1 CF A5,SEND SEND SELECT PAGELENGTH =1 LDKL A4,DOCLEN GET STANDARD PAGE LENGTH DOCUMENT CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDL,A6 SET PAGE LENGTH DOCUMENT RCTP10 EQU * CM DWTALN,A6 RESET ACTUAL LINE LDKL A1,/200 INDICATE POWER OFF OCCURED ORS A1,DWTST,A6 LD A1,DWTECB,A6 RUNNING REQUEST ABL(NZ) ACT005 YES , REPEAT THE REQUEST ABL DISEND DISPATCH * * * 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 DWTRC,A6 RESET RETURN CODE LDK A2,ESC ESCAPE CF A5,OUTPUT SEND ESC LDK A2,CSI CONTROL SEQUENCE INTRODUCER CF A5,OUTPUT SEND CSI LDK A2,/35 CF A5,OUTPUT SEND /35 LDK A2,DSR DEVICE STATUS REPORT CF A5,OUTPUT SEND DSR LDR* A2,A6 ANK A2,/F * CWK A2,/C PTS 8000 ? RF(L) GTST05 NO SUK A2,/F SALCUZ ? RF(Z) GTST05 YES LDK A2,ETX END OF TEXT CF A5,OUTPUT SEND ETX GTST05 LDKL A4,TAB GET TABLE ADDRESS GTST10 EQU * LDR A3,A4 A4 WIRD NOCH GEBRAUCHT LD A4,DWTTP,A6 UHR LAUEFT ??? RF(E) ZEIT01 NEIN ! LDKL A4,-ZEIT ST* A4,DWTTP,A6 RF ZEIT02 ZEIT01 EQU * LDKL A4,DWTTP ADR A4,A6 LDR A1,A6 CF A15,SETIMP DATA ZAUS,ZEIT ST A4,DWTTP,A6 * ZEIT02 LDR A4,A3 DANKE FUERS AUFHEBEN ! LDK A3,0 CF A5,STREG READ STATUS FROM PRINTER LD A3,DWTTP,A6 RF(E) ZEIT03 ES LAUEFT KEINE UHR !!! LDKL A3,-ZEIT ST* A3,DWTTP,A6 ZIEH DIE UHR WIEDER AUF * ZEIT03 EQU * 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,DWTRC,A6 SAVE RETURN CODE TEMPORARILY ADK A4,2 INCREMENT ADRESS RB GTST10 GET NEXT STATUS CHARACTER GTSEND EQU * LD A1,DWTTP,A6 RF(E) ZEIT04 ES LAUEFT KEINE UHR CM* DWTTP,A6 CM DWTTP,A6 ZEIT04 EQU * * * LD A1,DWTRC,A6 GET RETURN CODE RTN A5 * * * TIME OUT ROUTINE FUER LP 100 * * ZAUS EQU * * LDR A6,A1 A6 WIEDERHERSTELLEN CM DWTTP,A6 LDKL A5,DWTSB1 ADR A5,A6 RB GTSTAT MIT VIEL BAUCHWEH !!!!!!!!!!!!!!!!! * * * * * 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 * * RESET RECORVERY * RESREC EQU * LD A4,DWTST,A6 DEVICE STATUS ANKL A4,/200 RECOVERY? RF(E) RESRTN NO. XRS A4,DWTST,A6 YES. RESET RECOVERY BIT RESRTN RTN A5 RETURN * * * 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,DWTDISP,A6 SAVE DWT-DISPLACEMENT ST A2,DWTSTR,A6 CONTROL SEQUENCE ADRESS SEND10 EQU * LD A3,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 SEND20 EQU * IM DWTSTR,A6 INC. CONTROLSEQUENCE ADRESS RB SEND10 GET NEXT SEND30 EQU * LD A3,DWTDISP,A6 GET DWT-DISPLACEMENT ADR A3,A6 GET PROPER VALUE LCR A2,A3 GET CHARACTER CF A5,OUTPUT SEND CHARACTER IM DWTDISP,A6 INC. DISPLACEMENT ADRESS RB SEND20 GET NEXT SENDEND EQU * RTN A5 * * * 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 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