|
|
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: 42570 (0xa64a)
Notes: pts_type(SC)
Names: »DRGP03.SC«
└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
└─⟦this⟧ »MONGEN/DRGP03.SC«
IDENT DRGP03 REL 11.0 81-06-01 870105041100 =1,STATUS DEL. REL 11.0 81-01-26 * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRGP03 = DRIVER GENERAL PRINTER * * * * * * * ******************************************************* * * THIS DRIVER HANDLES THE GENERAL PRINTER GP74, PTS 6374 & PTS 6375 * * 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 05 : BASIC WRITE * ORDER 06 : STANDARD WRITE * ORDER 0B : POSITION DOCUMENT * ORDER 24 : SET PRINTER PARAMETERS * ORDER 27 : SET FORM PARAMETERS * ORDER 38 : RELEASE DOCUMENT * * THE FOLLOWING RETURN CODES ARE USED: * * BIT 0 : REQUEST ERROR * BIT 2 : END OF JOURNAL TAPE * BIT 7 : RECOVERY EXECUTED * 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 GPAD3 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 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 RLF EQU /40 REVERSE 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 VPA EQU /64 VERTICAL POSITION ABSOLUTE 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 DS EQU /35 DEVICE STATUS DCS EQU /50 DEVICE CONTROL STRING ST EQU /5C STRING TERMINATOR DEL EQU /7F DELETE ZERO EQU /30 ZERO NEG EQU /FF CPL EQU /78 CHARACTER PITCH LOAD HPA EQU /60 HORIZONTAL POSITIONING ABSOLUTE HTS EQU /48 HORIZONTAL TABULATION SET TBC EQU /67 HORIZONTAL TABULATION CLEAR LSL EQU /7B LINE SPACE LOAD SM EQU /68 SET MODE RM EQU /6C RESET MODE SGR EQU /6D SELECT GRAPHICAL RENDITION SEP EQU /3B FR EQU /32 UL EQU /34 START UNDERLINE TIME EQU /FF 25 SEC. TIMER EJECT * * ********************************************************* * * CONTROL SEQUENCES * ********************************************************* * * BYTE FORM 8,8 * * CSREP EQU * REPEAT BYTE ESC,CSI BYTE ZERO,ZERO BYTE ZERO,REP 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 DS,DSR BYTE NEG,NEG CSCPL EQU * CHARACTER PITCH LOAD BYTE ESC,CSI BYTE ZERO,SEP BYTE ZERO,CPL BYTE NEG,NEG CSHPA EQU * HORIZONTAL POSITIONING ABSOLUTE BYTE ESC,CSI BYTE ZERO,ZERO BYTE ZERO,HPA BYTE NEG,NEG CSTBC EQU * HORIZONTAL TABULATION CLEAR BYTE ESC,CSI BYTE ZERO,TBC BYTE NEG,NEG CSHTS EQU * HORIZONTAL TABULATION SET BYTE ESC,HTS BYTE NEG,NEG CSVPA EQU * VERTICAL POSITIONING ABSOLUTE BYTE ESC,CSI BYTE ZERO,ZERO BYTE VPA,NEG CSLSL EQU * LINE SPACE LOAD BYTE ESC,CSI BYTE ZERO,ZERO BYTE LSL,NEG CSSM EQU * SET MODE BYTE ESC,CSI BYTE FR,ZERO BYTE SM,NEG CSRM EQU * RESET MODE BYTE ESC,CSI BYTE FR,ZERO BYTE RM,NEG CSSUL EQU * START UNDERLINE BYTE ESC,CSI BYTE UL,SGR BYTE NEG,NEG CSEUL EQU * STOP UNDERLINE BYTE ESC,CSI BYTE ZERO,SGR 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 01 EJECT * * * FRICTION FEED CAN BE SELECTED BY * SETTING X:B=1 X:B EQU 0 SINHAN EQU 1 * * * THE FRONT FEED DEVICE CAN BE EXCLUDED * BY SETTING X:C = 0 * * X:C EQU 1 FFDEV EQU 1 FRONT FEED DEVICE * * * * THE STANDARD PAGELENGTH IS DEFINED * BY SETTING X:D = NUMBER OF LINES * * X:D EQU 48 PAGLEN EQU 48 * * * THE STANDARD NUMBER OF LINES IS DEFINED * BY SETTING X:E = NUMBER OF LINES * * X:E EQU 64 DOCLEN EQU 60 * * * * MMU BUFFER SIZE * * X:F EQU 132 DVBLEN EQU 256 * EJECT * * * THE STANDARD MATRIX IS SELECTED BY SETTING * 2=MATRIX NUMBER (1-9). * * X:G EQU 1 MATRIX EQU 2 * * * THE STANDARD CHARACTER DENSITY (PITCH) IS SELECTED BY * SETTING X:H=(1-4). 1=10 CH/INCH,2=12 CH/INCH,3=15 CH/INCH * 4= PROPORTIONAL PITCH * * X:H EQU 1 DENSIT EQU 2 * * * HIGH SPEED PRINTING CAN BE PERFORMED BY SETTING X:I=1 * * X:I EQU 0 SPEEDY EQU 00 * * * END OF REQUEST AT POWER FAILURE,NOT OP., LRC-, LINK- * ERROR OR SOFTW. TIME OUT IF X:J=1 * * X:J EQU 0 REQEND EQU 1 * * * ORDER /27, SET FORM PARAMETERS CAN BE EXCLUDED BY * SETTING X:K=0 * * X:K EQU 1 FORMPA EQU 1 * * * 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 EJECT * * ******************************************* * * DWT - DISPLACEMENTS * ******************************************* * DWTTP EQU /2 TIMER POINTER 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. DWTACP EQU /16 ACTUAL COLUMN PAPER DWTCO1 EQU /1A COLUMN COUNTER 1 DWTSYST EQU /1C SYSTEM START IND. DWTLFD EQU /1E LINE/FORM FEED INDICATOR DWTCMF EQU /20 CHAR MATRIX & PITCH, TRACTOR FEED DWTCMT EQU /22 CHAR MATRIX & PITCH, FRONT/FRI FEED DWTLS EQU /24 LINE SPACE DWTHSP EQU /26 HIGH SPEED DWTHOP EQU /28 HOPPER 1 OR 2 DWTTAB EQU /2A LAST TAB POS SET DWTSER EQU /2E CONTR. SEQ. SEPARATOR IND. 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 GPAD3 EQU * ADDRESS BLOCK DATA ACTP ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS DATA 0 INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE TPTAB EQU * IFT SINHAN+FFDEV=1 DATA /0107,/0C25,/2839 XIF DATA /0006,/2427,/0505 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=TRACTOR FEED, 1=FRONT FEED/FRICTION FEED * LC A2,DWTOR,A6 GET DWT INDEX ANK A2,1 MASK SC A2,DWTDEV,A6 STORE NEW DEVICE INDEX CWK A7,/24 RF(E) ACT010 LC A3,DWTDEV+1,A6 GET OLD DEVICE INDEX ANK A3,1 CWR A2,A3 RF(E) ACT010 ACT005 LDR A4,P GET PROGRAM COUNTER ADK A4,6 MAKE RETURN ADDRESS BEFORE ABL ABL SENPAR SEND PARAM. TO PRINTER LC A2,DWTDEV,A6 ANK A2,1 ACT010 LC A3,DWTDEV+1,A6 ANK A3,/FE ORR A3,A2 SC A3,DWTDEV+1,A6 STORE INDEX CWK A7,/05 ORDER /05 ? RF(E) ACT015 YES ADR A7,A2 ADD DWT INDEX TO ORDER ACT015 SC A7,DWTOR+1,A6 STORE MODIFIED ORDER ACT020 LDK A3,TPLEN-1 ACT030 CC A7,TPTAB,A3 CHECK IF LEGAL ORDER RF(E) ACT040 VALID ORDER SUK A3,1 RB(NN) ACT030 TRY NEXT * ABL LENDER ILLEGAL ORDER * * ACT040 EQU * ADR A3,A3 GET INDEX ABI TPFUC,A3 EXECUTE ORDER TPFUC EQU * IFT SINHAN+FFDEV=1 DATA TSTSTA,WRTCON,POSDOC,PRIPAR,FORPAR,RELDOC XIF DATA TSTSTA,WRTCON,PRIPAR,FORPAR,BASWRT,BASWRT EJECT ****************************** * * ORDER 00 : TEST STATUS * ****************************** TSTSTA EQU * TEST STATUS CF A5,GTSTAT GET STATUS FROM PRINTER TSTEND LDR A2,A1 GET RETURN CODE ANKL A2,/100 PRINTER RESET ? ABL(NZ) RCTP YES CF A5,RESREC RESET RECOVERY BIT ABL LENDIS END REQUEST EJECT ************************* * * ORDER 06: WRITE * ************************* WRTCON EQU * * * =1 * * =1 * * =1 LD A2,ECBRL,A8 GET REQ. LENGTH ADK A2,/8 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP01 JMP IF ERROR * * EXAMINE CONTROL CHARACTER * LDK A3,1 SET UP ECB BUFFER POINTER CF A15,GETCHR GET CONTROL CHARACTER LD A1,DWTDEV,A6 GET DEVICE STATUS ANK A1,/20 HAS POWER OFF OCCURED ? RF(NZ) REP2 YES SUK A2,/2B PRINT ON SAME LINE =/2B? RF(Z) WRC20 YES WRC04 CM DWTDEV+DWTCO1,A6 CLEAR COLUMN COUNTER SUK A2,5 PRINT AFTER TWO LF =/30 RF(Z) TWOLF YES * SUK A2,1 PRINT AFTER FORM FEED =/31 ? RF(NZ) ONELF NO,ONE LF * LDK A2,FF RF FORMF FORM FEED * * EXECUTE CONTROL CHARACTER * WRC20 EQU * LDK A2,CR CARRIDGE RETURN CF A5,OUTPUT RF(NZ) ERGP01 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 ST A2,DWTDEV+DWTACP,A6 STORE THE VALUE IN ACTUAL COL. ST A4,DWTDEV+DWTACP+2,A6 STORE THE VALUE IN ACT. COL. * WRC07 LD A4,DWTDEV+DWTCO1,A6 GET ACTUAL COLUMN RF(Z) WRT15 JMP IF NO PRECEIDING SPACES LDK A2,/20 SEND SPACE CF A5,OUTPUT RF(NZ) ERGP01 JMP IF ERROR LDKL A2,CSREP REPEAT LDKL A3,DWTDEV+DWTACP+1 ACTUAL COLUMN PAPER DISPLACEMENT CF A5,SEND SEND REPEAT RF WRT15 * TWOLF LDK A2,LF LINE FEED CF A5,OUTPUT RF(NZ) ERGP01 JMP IF ERROR ONELF LDK A2,LF LINE FEED FORMF CF A5,OUTPUT RF(NZ) ERGP01 JMP IF ERROR LDK A2,CR CARRIDGE RETURN CF A5,OUTPUT RF(NZ) ERGP01 JMP IF ERROR IM DWTDEV+DWTLFD,A6 SET LF/FF INDICATOR RF WRT15 * * REPEAT WRITE REQUEST * REP2 EQU * LDR A3,A2 SAVE CONTROL CHAR. LDK A2,CR SEND CARRIDGE RETURN CF A5,OUTPUT RF(NZ) ERGP01 JMP IF ERROR LDR A2,A3 SUK A2,/2B PRINT WITHOUT LINE FEED ? RF(NZ) REP3 NO RB WRC07 REP3 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 CONTINUOUS STATIONARY. * * WRT15 LDK A3,2 SET ECB BUFFER POINTER WRT020 CWK A3,/90 RF(NZ) WRT030 NEW BLOCK NECESSARY ? CF A5,ENDBLK YES ERGP01 RF(NZ) ERGP04 JMP IF ERROR LDK A2,/90 NEW BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP04 JMP IF ERROR WRT030 CF A15,GETCHR GET CHARACTER LDR A4,A1 BUFFER FINISHED ? RF(P) WRT050 NO LD A4,DWTDEV,A6 GET DEVICE STATUS ANK A4,/80 SHIFT OUT PERFORMED ? RF(Z) WRT040 NO LDK A2,SI SEND SHIFT IN CF A5,OUTPUT RF(NZ) ERGP04 JMP IF ERROR XRS A4,DWTDEV,A6 RESET SHIFT INDIC. WRT040 CF A5,ENDBLK END OF BLOCK RF(NZ) ERGP04 JMP IF ERROR CF A5,GTSTAT GET STATUS RF ENDIO END REQUEST * WRT050 EQU * LDR A4,A2 * * EXAMINE CHARACTER AND SEND DEPENDING ON TYPE OF CHARACTER * CWK A4,/20 CHAR =<20 ? RF(NL) WRT100 NO * CHECK IF SPECIAL CHARACTER SUK A4,/9 TABULATION ? RF(Z) WRT170 YES SUK A4,/9 START UNDERLINE ? RF(NZ) WRT060 NO LDR A4,A3 SAVE ECB BUFFER POINTER LDKL A3,CSSUL SEND START UNDERLINE RF WRT070 WRT060 SUK A4,1 STOP UNDERLINE ? RF(NZ) WRT080 NO LDR A4,A3 SAVE ECB BUFFER POINTER LDKL A3,CSEUL SEND STOP UNDERLINE WRT070 CF A5,SEN40 GO & SEND LDR A3,A4 RESTORE ECB BUFFER POINTER RB WRT020 GET NEXT CHARACTER WRT080 SUK A4,/8 /1B, PARTIAL LINE UP DOWN ? RB(NZ) WRT020 NO, GET NEXT CHARACTER CF A15,GETCHR YES, CHECK NEXT CHARACTER RB(NP) WRT040 END OF BUFFER ? LDR A4,A2 SAVE CHAR IN A4 SUK A2,/4B PARTIAL LINE DOWN ? RF(Z) WRT090 YES SUK A2,1 PARTIAL LINE UP ? RF(NZ) WRT140 NO, INDICATE CODE CHECK ERROR WRT090 LDK A2,ESC SEND PARTIAL LINE UP/DOWN CF A5,OUTPUT RF(NZ) ERGP04 JMP IF ERROR LDR A2,A4 RESTORE CHAR. CF A5,OUTPUT RF(NZ) ERGP04 JMP IF ERROR RB WRT020 GET NEXT CHARACTER * WRT100 SUK A4,/7E CHAR =</7E ? RF(NP) WRT110 YES, LEGAL CHARACTER CWK A2,/AE ROOMLESS POINT ? RF(E) WRT160 YES SUK A4,/23 CHAR >=/A1 ? RF(N) WRT150 NO,INDICATE CODE CHECK ERROR ! SUK A4,/5D CHAR =</FE ? RF(NP) WRT120 YES, LEGAL CHARACTER RF WRT150 NO, INDICATE CODE CHECK ERROR * AUTOMATIC SHIFT OUT/IN FUNCTION * * WRT110 LD A4,DWTDEV,A6 7-BIT CODE /20-/7E ANK A4,/80 SHIFT OUT PERFORMED EARLIER ? RF(Z) WRT170 NO, SEND CHARACTER LDK A4,/80 XRS A4,DWTDEV,A6 RESET SHIFT INDICATOR LDR A4,A2 STORE CHAR. LDK A2,SI SEND SHIFT IN RF WRT130 * WRT120 LD A4,DWTDEV,A6 8-BIT CODE /A1-/FE ANK A4,/80 SHIFT OUT PERFORMED EARLIER ? RF(NZ) WRT170 YES, SEND CHARACTER LDK A4,/80 ORS A4,DWTDEV,A6 INDICATE SHIFT OUT LDR A4,A2 STORE CHAR. LDK A2,SO SEND SHIFT OUT WRT130 CF A5,OUTPUT SEND SHIFT CONTROL RF(NZ) ERGP04 JMP IF ERROR LDR A2,A4 RESTORE CHAR. RF WRT170 SEND CHARACTER WRT140 SUK A3,1 DECREMENT ECB BUFFER POINTER WRT150 LDK A4,/04 ILLEGAL CHARACTER SET BIT 13 IN R.C. ORS A4,ECBRC,A8 RB WRT020 WRT160 LDK A2,/2E WRT170 LDR A4,A1 ANK A2,/7F MASK,JUST 7 BIT CHAR. CF A5,OUTPUT SEND CHARACTER ERGP04 RF(NZ) ERGP06 JMP IF ERROR IM DWTDEV+DWTCO1,A6 INC COLUMN COUNTER 1 RB WRT020 ENDIO EQU * LDR A2,A1 GET RETURN CODE ANKL A2,/100 PRINTER RESET ? ABL(NZ) RCTP YES CF A5,RESREC RESET RECOVERY BIT CM DWTDEV+DWTLFD,A6 CLEAR LF/FF INDICATOR ABL LENDIS END REQUEST EJECT ****************************** * * ORDER 05 : BASIC WRITE * ****************************** BASWRT EQU * * * =1 * * =1 * * =1 LDK A3,0 BAS10 LDK A4,/90 TEST END OF BLOCK LDR A2,A4 BLOCK LENGTH IN A2=144 CF A5,STABLK START OF BLOCK RF(NZ) ERGP06 JMP IF ERROR BAS15 CF A15,GETCHR GET CHARACTER LDR A1,A1 BUFFER FINISHED ? RF(Z) BAS25 YES CF A5,OUTPUT RF(NZ) ERGP06 JMP IF ERROR SUK A4,1 END OF BLOCK ? RF(Z) BAS20 YES RB BAS15 GET NEXT CHARACTER BAS20 CF A5,ENDBLK END OF BLOCK RF(NZ) ERGP06 JMP IF ERROR RB BAS10 START NEXT BLOCK BAS25 CF A5,ENDBLK END OF BLOCK ERGP06 ABL(NZ) ERGP15 JMP IF ERROR ABL TSTSTA CHECK STATUS & END REQ. EJECT IFT SINHAN+FFDEV=1 ********************************************* * * ORDER 0B : POSITION DOCUMENT * CONTROL WORD CONTAINS REQUESTED LINE NO * ********************************************* POSDOC EQU * POSITION DOCUMENT CF A5,GTSTAT GET DEVICE STATUS LDR A1,A1 ERROR ? RF(NZ) POS040 ERROR INDICATION 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 CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDEV+DWTRLN,A6 SET REQUESTED LINE POS005 EQU * LDK A2,/15 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP08 JMP IF ERROR LD A3,DWTDEV+DWTALN,A6 RF(NZ) POS020 LDK A2,FF CF A5,OUTPUT RF(NZ) ERGP08 JMP IF ERROR POS020 LDKL A2,CSVPA LDKL A3,DWTDEV+DWTRLN CF A5,SEND POS030 CF A5,ENDBLK END OF BLOCK ERGP08 ABL(NZ) ERGP15 JMP IF ERROR CF A5,GTSTAT GET STATUS RF(NZ) POS040 ERROR ? LD A2,DWTDEV+DWTRLN,A6 GET REQ. LINE NO. ST A2,DWTDEV+DWTALN,A6 ACTUAL LINE = REQ. LINE CM DWTDEV+DWTCO1,A6 CLEAR COLUMN COUNTER POS040 EQU * LDR A2,A1 GET RETURN CODE ANKL A2,/100 PRINTER RESET ? ABL(NZ) RCTP YES CF A5,RESREC RESET RECOVERY BIT ABL LENDIS END REQUEST POSERR ABL LENDER XIF EJECT ******************************************** * * ORDER 24 : SET PRINTER PARAMETERS * ******************************************** PRIPAR EQU * PRI07 LDK A3,/6 SET UP BRANCH POINTER LD A1,ECBCW,A8 GET CONTROL WORD PRI10 LDR A4,A1 IFT SINHAN+FFDEV=1 LC A2,DWTOR+1,A6 GET DWT INDEX ANK A2,1 RF(Z) PRI14 ANK A4,/F CHECK IF NEW PARAM. VALUE WANTED ABI(NZ) FROTAB,A3 FRONT FEED RF PRI15 XIF PRI14 ANK A4,/F CHECK IF NEW PARAM. VALUE WANTED ABI(NZ) PRITAB,A3 FRICTION/TRACTOR FEED PRI15 SRL A1,4 GET NEXT PARAMETER PRI16 CWK A3,0 FRI/TRA, ANY MORE PARAM. TO CHECK RF(E) PRI17 NO, GO AND SEND PRI18 SUK A3,2 TEST NEXT PARAMETER RB PRI10 PRI17 LDR A4,P GET PROGRAM COUNTER ADK A4,6 MAKE RETURN ADDRESS BEFORE ABL ABL SENPAR SEND PARAMETERS TO PRINTER CF A5,GTSTAT GET STATUS LDR A2,A1 GET RETURN CODE ANKL A2,/100 PRINTER RESET ? ABL(NZ) RCTP YES CF A5,RESREC RESET RECOVERY BIT ABL LENDIS END REQUEST * STORE PARAMETERS, TRACTOR FEED PRI20 EQU * NCV= NATIONAL CHARACTER VARIATION ADR A4,A4 ADJUST TABLE LD A4,NCVTAB,A4 GET NAT. CHAR. SET ACCORDING TO INDEX ST A4,DWTDEV+DWTPCS,A6 STORE IN DWT RB PRI15 PRI30 EQU * SCM= SELECT CHARACTER MATRIX CWK A4,/9 RF(G) PRI60 INDEX TOO HIGH ORK A4,/30 ASCII SC A4,DWTDEV+DWTCMF,A6 STORE IN DWT RB PRI15 PRI40 EQU * PL= PAGE LENGTH ADR A4,A4 ADJUST TABLE LD A4,LINNUM,A4 GET LINE ACCORDING TO INDEX ST A4,DWTDEV+DWTPL,A6 STORE IN DWT RB PRI15 PRI50 EQU * CD= CHARACTER PITCH CWK A4,/4 RF(G) PRI60 INDEX TOO HIGH ORK A4,/30 ASCII SC A4,DWTDEV+DWTCMF+1,A6 STORE IN DWT RB PRI17 * STORE PARAMETERS, FRONT FEED/FRICTION FEED IFT SINHAN+FFDEV=1 FRO20 EQU * NCV= NATIONAL CHARACTER VARIATION ADR A4,A4 ADJUST TABLE LD A4,NCVTAB,A4 GET NAT. CHAR. VAR. ACCORDING TO INDEX ST A4,DWTDEV+DWTDCS,A6 STORE IN DWT RB PRI15 FRO30 EQU * SCM=SELECT CHARACTER MATRIX CWK A4,/9 RF(G) PRI60 INDEX TOO HIGH ORK A4,/30 ASCII SC A4,DWTDEV+DWTCMT,A6 STORE IN DWT RB PRI15 FRO40 EQU * PL= PAGE LENGTH ADR A4,A4 ADJUST TABLE LD A4,LINNUM,A4 GET LINE ACCORDING TO INDEX ST A4,DWTDEV+DWTDL,A6 STORE IN DWT RB PRI15 FRO50 EQU * CD= CHARACTER PITCH CWK A4,/4 RF(G) PRI60 INDEX TOO HIGH ORK A4,/30 ASCII SC A4,DWTDEV+DWTCMT+1,A6 STORE IN DWT RB PRI17 XIF PRI60 ABL LENDER REQUEST ERROR EJECT ******************************************** * * ORDER /27 : SET FORM PARAMETERS * ******************************************** FORPAR EQU * IFT FORMPA=1 LD A2,ECBCW,A8 GET CONTROL WORD, INDEX ANK A2,/F MASK SUK A2,1 RF(Z) FOR020 HOPPER,HIGH SPEED OR LINE SPACE PARAM. SUK A2,1 ABL(Z) BASWRT LOAD CHARACTER MATRIX SUK A2,1 RF(Z) TAB010 TABULATIONS XIF FOR010 ABL LENDER REQUEST ERROR,END OF REQ. IFT FORMPA=1 * HOPPER, HIGH SPEED & LINE SPACE PARAMETERS * FOR020 LDK A2,/E BLOCK LENGTH CF A5,STABLK START OF BLOCK ABL(NZ) ERGP15 JMP IF ERROR LD A4,ECBCW,A8 GET CONTROL WORD LDR A1,A4 ALSO IN A4 SRL A1,4 SHIFT ANK A1,/F MASK LINE SPACE INDEX RF(Z) FOR030 NO CHANGE WANTED CWK A1,/8 RB(G) FOR010 REQUEST ERROR, INDEX TOO BIG ADR A1,A1 ADJUST TABLE LD A1,LINTAB,A1 GET LINE SPACE ACCORDING TO TABLE ST A1,DWTDEV+DWTLS,A6 STORE IN DWT LDKL A2,CSLSL LDKL A3,DWTDEV+DWTLS CF A5,SEND SEND LINE SPACE LOAD FOR030 LDR A1,A4 GET CONTROL WORD SRL A1,8 ANK A1,/F MASK HIGH SPEED PARAMETER RF(Z) FOR060 NO CHANGE WANTED SUK A1,1 RF(NZ) FOR040 LDK A2,SM HIGH SPEED SELECTED SC A2,DWTDEV+DWTHSP+1,A6 STORE IN DWT LDKL A2,CSSM RF FOR050 SEND SELECT HIGH SPEED MODE FOR040 SUK A1,1 RB(NZ) FOR010 REQUEST ERROR LDK A2,RM SC A2,DWTDEV+DWTHSP+1,A6 STORE IN DWT LDKL A2,CSRM SEND SELECT NORMAL SPEED FOR050 LDKL A3,DWTDEV+DWTHSP CF A5,SEND FOR060 EQU * IFT SINHAN=1 LDR A1,A4 GET CONTROL WORD SRL A1,/C ANK A1,/F MASK HOPPER PARAMETER RF(Z) FOR120 NO CHANGE WANTED SUK A1,1 RF(NZ) FOR070 LDKL A2,/3168 SELECT HOPPER 1 RF FOR075 FOR070 SUK A1,1 RF(NZ) FOR080 LDKL A2,/3268 SELECT HOPPER 2 FOR075 ST A2,DWTDEV+DWTHOP,A6 STORE IN DWT LDKL A2,CSSM RF FOR110 FOR080 SUK A1,1 RF(NZ) FOR090 LDKL A2,/316C DESELECT HOPPER 1 RF FOR095 FOR090 SUK A1,1 RB(NZ) FOR010 REQUEST ERROR LDKL A2,/326C DESELECT HOPPER 2 FOR095 ST A2,DWTDEV+DWTHOP,A6 STORE IN DWT LDKL A2,CSRM FOR110 LDKL A3,DWTDEV+DWTHOP CF A5,SEND SEND HOPPER MODE XIF IFT FORMPA=1 RF FOR120 END OF REQ. * * TABULATION PART * TAB010 EQU * LDK A3,0 SET UP BUFFER POINTER TAB020 CF A15,GETCHR GET CHARACTER LDR A1,A1 END OF BUFFER ? RB(Z) FOR010 REQUEST ERROR LDR A4,A2 KEEP CHAR. IN A4 LDK A2,/80 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP10 JMP IF ERROR ANK A4,1 SET OR CLEAR TABS. ? RF(Z) TAB050 CLEAR ALL TABULATIONS TAB030 CF A15,GETCHR GET TABULATION POSITION LDR A1,A1 RF(Z) FOR120 END OF REQUEST LDR A4,A2 TAB. POS. IN A4 CF A5,KONVER KONVERT TO ASCII SC A2,DWTDEV+DWTTAB,A6 SC A4,DWTDEV+DWTTAB+2,A6 STORE TAB POS IN DWT SRL A4,8 SHIFT RIGHT SC A4,DWTDEV+DWTTAB+1,A6 STORE TAB POS IN DWT LDR A4,A3 KEEP COUNTER IN A4 LDKL A2,CSHPA LDKL A3,DWTDEV+DWTTAB CF A5,SEND SEND HORIZONTAL POS ABS. LDKL A2,CSHTS CF A5,SEND SET TAB POS AT ACTIVE POS LDR A3,A4 RESTORE COUNTER RB TAB030 GET NEXT POS TAB050 EQU * LDK A3,/33 CLEAR ALL TABS SC A3,DWTDEV+DWTTAB,A6 STORE IN DWT LDKL A2,CSTBC LDKL A3,DWTDEV+DWTTAB CF A5,SEND CLEAR ALL TABULATION POS. FOR120 CF A5,ENDBLK END OF BLOCK ERGP10 ABL(NZ) ERGP15 JMP IF ERROR ABL TSTSTA CHECK STATUS & END REQ. XIF EJECT ***************************************** * * ORDER 38 : RELEASE DOCUMENT * ***************************************** IFT SINHAN+FFDEV=1 RELDOC EQU * CF A5,GTSTAT GET STATUS LDR A2,A1 RF(NZ) REL20 ERROR ? LDK A2,/F BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP14 JMP IF ERROR LDKL A2,CSVPA LDKL A3,DWTDEV+DWTDL SEND LF TO END OF PAGE CF A5,SEND LDK A3,/F SET UP LINE FEED COUNTER REL10 LDK A2,LF LINE FEED CF A5,OUTPUT RF(NZ) ERGP14 JMP IF ERROR SUK A3,1 DECREMENT LINE FEED COUNTER RB(NZ) REL10 ANY MORE LF ? CF A5,ENDBLK END OF BLOCK RF(NZ) ERGP14 JMP IF ERROR CF A5,GTSTAT GET STATUS FROM PRINTER CM DWTDEV+DWTALN,A6 RESET ACTUAL LINE CM DWTDEV+DWTRLN,A6 RESET REQUESTED LINE CM DWTDEV+DWTCO1,A6 CLEAR COLUMN COUNTER LDR A2,A1 GET RETURN CODE REL20 ANKL A2,/100 PRINTER RESET ? ABL(NZ) RCTP YES CF A5,RESREC RESET RECOVERY BIT ABL LENDIS 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 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 A4,DOCLEN GET STANDARD PAGE LENGTH DOCUMENT CF A5,KONVER CONVERT BINARY TO ASCII ST A4,DWTDEV+DWTDL,A6 SET PAGE LENGTH DOCUMENT LDKL A4,MATRIX GET STANDARD CHAR MATRIX FONT ORK A4,ZERO MAKE ASCII SC A4,DWTDEV+DWTCMT,A6 STORE IN DWT (TRACTOR) SC A4,DWTDEV+DWTCMF,A6 STORE IN DWT (FRONT/FRI) LDKL A4,DENSIT GET STANDARD CHAR DENSITY/PITCH ORK A4,ZERO MAKE ASCII SC A4,DWTDEV+DWTCMT+1,A6 STORE IN DWT (TRACTOR) SC A4,DWTDEV+DWTCMF+1,A6 STORE IN DWT (FRONT/FRI) CF A5,GTSTAT DUMMY ST., CLEAR RESET BIT RCTP10 EQU * LDR A4,P GET PROGRAM COUNTER ADK A4,6 MAKE RETURN ADDRESS ABL SENPAR SEND PARAMETERS CM DWTDEV+DWTALN,A6 CLEAR ACTUAL LINE (FRONT/FRI) LDKL A1,/20 INDICATE POWER OFF OCCURED ORS A1,DWTDEV,A6 LD A1,DWTECB,A6 RUNNING REQUEST ABL(NZ) ACT020 YES , REPEAT THE REQUEST RCTP20 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,/5 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERGP14 JMP IF ERROR LDKL A3,CSDSR DEVICE STATUS REPORT GTST02 LCR A2,A3 GET CHARACTER ANK A2,/FF MASK SLL A2,8 SHIFT LEFT RF(N) GTST04 END OF CONTROL SEQUENSE SRL A2,8 SHIFT RIGHT CF A5,OUTPUT RF(NZ) ERGP14 JMP IF ERROR ADK A3,1 INCR. ADDRESS RB GTST02 GET NEXT CHARACTER GTST04 CF A5,ENDBLK END OF BLOCK ERGP14 RF(NZ) ERGP15 JMP IF ERROR LDR A1,A6 SAVE DWTADDRESS LDKL A4,DWTDEV+DWTTP ADR A4,A6 TIMER CF A15,SETIMP SET TIMER, 10 SEC. DATA ERGP00,TIME RETURN ADDRESS,TIME 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 LDR A7,A7 ORDER /00 ? RF(NZ) GTST15 NO CCK A2,/3B STRING SEPARATOR ? RF(NE) GTST15 NO IM DWTDEV+DWTSER,A6 IND. STRING SEP. LD A2,DWTDEV+DWTSER,A6 SUK A2,2 TWO SEPARATORS RECEIVED ? RF(NZ) GTST30 NO, READ NEXT CHAR. CF A5,INPUT CHECK IF SERVICE STATUS PRESENT ANK A2,/F MASK CCK A2,/A RB(NL) GTST10 NO SERVICE STATUS LDKL A4,TAB+20 INCR. ADDR. TO SERV. STAT. GTST15 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 LDR A7,A7 ORDER /00 ? RF(NZ) GTST20 NO CW A4,TAB+20 SERVICE STATUS ? RF(L) GTST20 NO ORS A2,ECBCW,A8 SERVICE STAT. IN CONTR. WORD RF GTST30 GTST20 ORS A2,DWTDEV+DWTRC,A6 SAVE RETURN CODE TEMPORARILY GTST30 ADK A4,2 INCREMENT ADRESS RB GTST10 GET NEXT STATUS CHARACTER GTSEND EQU * LD A1,DWTDEV+DWTRC,A6 GET RETURN CODE CM DWTDEV+DWTSER,A6 CLEAR STRING SEP. IND. LD A2,DWTDEV+DWTTP,A6 RF(Z) GTST40 CHECK IF ALLREADY ZERO CM* DWTDEV+DWTTP,A6 RESET TIMER GTST40 CM DWTDEV+DWTTP,A6 RESET TIMER POINTER GTST50 EQU * 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 ORKL A1,/100 INDIC. RECOV. IN RET. CODE BIT7 RESRTN RTN A5 RETURN * * ************************************************** * * ERROR ROUTINE FOR STABLK,OUTPUT, ENDBLK * AND TIMER. * ERGP00 EQU * LDR A6,A1 RESTORE DWTADDRESS CM DWTDEV+DWTTP,A6 RESET TIMER POINTER RF ERGP20 ERGP15 EQU * ANK A1,/1A OUTP. ERR, SOFTW. T-OUT,LRC-ERR ABL(NZ) RCTP YES, RECOVERY ERGP17 EQU * IFF REQEND=1 ABL LDISP DISPATCH XIF ERGP20 LDK A1,1 SET NOT OPERABLE ERGP30 ABL LENDIS END OF REQUEST 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 RB(NZ) ERGP15 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 RB(NZ) ERGP15 JMP IF ERROR IM DWTDEV+DWTDISP,A6 INC. DISPLACEMENT ADRESS RB SEND20 GET NEXT SENDEND EQU * RTN A5 EJECT ************************************************************ * * SENPAR * * THIS ROUTINE SENDS THE PRINTER PARAMETERS TO THE SUBDEVICE * SENPAR EQU * LDK A2,/1A CF A5,STABLK ERGP16 RB(NZ) ERGP15 JMP IF ERROR IFT SPEEDY=1 LDKL A2,CSSM LDKL A3,DWTDEV+DWTHSP CF A5,SEND SEND SELECT HIGH SPEED XIF IFT SINHAN+FFDEV=1 LC A2,DWTDEV,A6 GET DWTINDEX ANK A2,1 RF(NZ) SEN10 XIF LDKL A3,CSRM SET TRACTOR MODE CF A5,SEN40 LDKL A2,CSSLPL LDKL A3,DWTDEV+DWTPL CF A5,SEND SEND SELECTED PAGE LENGTH LDKL A2,CSSNV LDKL A3,DWTDEV+DWTPCS CF A5,SEND SEND NATIONAL CHAR VARIATION LDKL A2,CSCPL LDKL A3,DWTDEV+DWTCMF CF A5,SEND SEND CHAR. MATRIX & PITCH RF SEN20 * IFT SINHAN+FFDEV=1 SEN10 EQU * IFT SINHAN=0 LDKL A3,CSSM SET FRONT FEED MODE CF A5,SEN40 XIF IFT SINHAN+FFDEV=1 LDKL A2,CSSLPL LDKL A3,DWTDEV+DWTDL CF A5,SEND SEND SELECTED PAGE LENGTH LDKL A2,CSSNV LDKL A3,DWTDEV+DWTDCS CF A5,SEND SEND NATIONAL CHAR VARIATION LDKL A2,CSCPL LDKL A3,DWTDEV+DWTCMT CF A5,SEND SEND CHAR. MATRIX & PITCH XIF SEN20 CF A5,ENDBLK END OF BLOCK RB(NZ) ERGP16 JMP IF ERROR ABR A4 RETURN * EJECT ********************************************** * * THIS ROUTINE SENDS A CONTR. SEQ. WITHOUT DWT REFERENCE * AT ENTRY : A3= CONTROL SEQ, ADDRESS * SEN40 LCR A2,A3 ANK A2,/FF MASK SLL A2,8 SHIFT LEFT RF(N) SEN50 END OF SEQUENSE SRL A2,8 SHIFT RIGHT CF A5,OUTPUT RB(NZ) ERGP16 JMP IF ERROR ADK A3,1 INCR. ADDRESS RB SEN40 GET NEXT CHAR. SEN50 RTN A5 RETURN & SEND PARAMETERS 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 /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,/1C8,/C0,/C0 * DATA /C0,/C0,/FC8,/FC0 DATA /C0,/C0 PRITAB EQU * BRANCH ADDRESSES ORDER /24 DATA PRI50 DATA PRI40 DATA PRI30 DATA PRI20 FROTAB EQU * BRANCH ADDRESSES ORDER /24 IFT SINHAN+FFDEV=1 DATA FRO50 DATA FRO40 DATA FRO30 DATA FRO20 XIF LINTAB EQU *-2 LINE SPACE TABLE DATA /3033,/3034,/3036,/3038,/3132 DATA /3136,/3234,/3438 END