|
|
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: 27040 (0x69a0)
Notes: pts_type(SC)
Names: »DRTP02.SC«
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
└─⟦this⟧ »M:92NA/DRTP02.SC«
└─⟦this⟧ »M:92SP/DRTP02.SC«
└─⟦3a2bec7de⟧ Bits:30009687 Philips computer tape "600313"
└─⟦this⟧ »M:821/DRTP02.SC«
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
└─⟦this⟧ »M:92LP/DRTP02.SC«
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
└─⟦this⟧ »M:92NA/DRTP02.SC«
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
└─⟦this⟧ »M:92NA/DRTP02.SC«
└─⟦this⟧ »M:92SP/DRTP02.SC«
IDENT DRTP02 REL 9.2 79-11-16 870105040920 =4,CUT AND PERF CORRECTED REL 9.1 79-05-23 UPDATE PRR 9.1 - REL 9.1 PRR 9.1 79-04-25 REL 9.1 79-04-06 =1-3,GEN UPDATE TO 8.2+ STATUS REL 8.2 79-04-19 =3,RECOVERY TIMER CORRECTED REL 8.2 79-04-18 =2,GRSP/REL CH.TO IMPR. REMOTE REL 8.2 79-03-16 =1,IMPRROV. OF TEST ORDER REL 8.2 78-09-15 ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRTP02 = DRIVER TELLER TERMINAL PRINTER * * * * * * * * * * ******************************************************* * * THIS DRIVER HANDLES TELLER TERMINAL PRINTERS PTS 6221, * 6222 OR 6223 CONNECTED TO CPU VIA CHLT OR CHRT * * * THIS 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 DRIVER CONTAINS THE FOLLOWING SUBROUTINES: * * P R B U F : GET CHARACTERS FROM ECB-BUFFER AND SEND THEM * * B C D T B Y : CONVERT TO BINARY FROM DECIMAL * * B U F C H R : SEND THE NUMBER OF CHARACTERS GIVEN IN FIRST * CHARACTER IN OUTPUT BUFFER * * G R A S P : SEND GRASP TO VOUCHER * * R E L E A S : SEND LIFT TO TOP AND RELEASE EJECT * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00 : TEST STATUS * ORDER 06 : WRITE * ORDER 0B : POSITION LIFT AND WRITE * ORDER 22 : CUT JOURNAL * ORDER 26 : PERFORATE JOURNAL * ORDER 37 : GRASP VOUCHER/PASSBOOK * ORDER 38 : RELEASE VOUCHER/PASSBOOK * * THE FOLLOWING RETURN CODES ARE USED: * * BIT 0 : REQUEST ERROR * BIT 8 : RECOVERY EXECUTED ON REQUEST * BIT 10 : END OF JOURNAL TAPE, VOUCHER 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 * * * * * SYSTEM ADAPTATION: * * BY MEANS OF CONDITIONAL ASSEMBLY THE FOLLOWING FUNCTIONS CAN * BE EXCLUDED: * * RETURN CODE IS SET IF RECOVERY IS EXECUTED ON REQUEST * CUT/PERFORATE JOURNAL TAPE (PTS 6221,6222) * ACCAPTANCE OF SPECIAL CHARACTER /13,/14 * COMPLETION OF REQUEST AT 'VOUCHER OUT' BEFORE MESSAGE IS WRITTEN * * * THE CHARACTER CODES FOR ROOMLESS POINT DIGITS IS DEFINED * IN A TABLE NAMED ROMTAB.STANDARD IS SHB CHARACTER SET * * EJECT * *********** * ENTRIES * *********** * * ENTRY TPAD ADDRESS BLOCK * * * ************* * EXTERNALS * ************* * * EXTRN TDISP DISPATCHING FROM INTERRUPT EXTRN DISIOE DISPATCH I/O ERROR EXTRN DISEND END I/O AND DISPATCH EXTRN TENDIO END I/O EXTRN OUTPUT OUTPUT ONE CHARACTER EXTRN LDREG RESTORE REGISTERS EXTRN STREG STORE REGISTERS AND WAIT FOR INTERRUPT EXTRN SAVE8 SAVE REG. A1-A8 * EXTRN DWTST STATUS EXTRN DWTBC BYTE COUNTER EXTRN DWTECB ECB ADDRESS EXTRN DWTOR ORDER EXTRN DWTSB2 STACK BASE 2 IN DWT EJECT * * ECB DISPLACEMENTS * EXTRN ECBBA BUFFER ADDRESS EXTRN ECBRL REQUESTED LENGTH EXTRN ECBEL EFFECTIVE LENGTH EXTRN ECBRC RETURN CODE EXTRN ECBCW CONTROL WORD EJECT ************************ * CONDITIONAL ASSEMBLY * ************************ * * * WHEN RECOVERY EXECUTED ON REQUEST RETURN CODE IS SET * BY SETTING X:A = 1 * * X:A EQU 0 RECOV EQU 0 * * * JOURNAL TAPE MAY BE CUT/PERFORATED FOR PTS 6223 BY * SETTING X:B = 1 * * X:B EQU 0 CUTPER EQU 0 * * * SPECIAL CHARACTER /13, /14 IS ACCEPTED BY SETTING X:C = 1 * AND X:D = 1 RESPECTIVLY * * X:C EQU 0 CHR13 EQU 0 * * X:D EQU 0 CHR14 EQU 0 * * * PRINTING VOUCHER/PASSBOOK, IS COMPLETED IF * PRINT OBJECT IS REMOVED UNDER PRINTING IF X:E = 1 * * X:E EQU 0 COMPL EQU 0 EJECT * * * IN SITUATIONS WHERE PRINTER HARDWARE OR SELECTOR UNIT * IS INACTIVE,END OF REQUEST MAY BE CHOSEN BY SETTING * THE CONSTANT RELEND=1. RETURN CODE NOT OPERABLE IS SET * * X:F EQU 0 RELEND EQU 0 * * * 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 * * * MMU BUFFER SIZE * * X:H EQU 20 DVBLEN EQU 100 * EJECT * * ************* * CONSTANTS * ************* * * CCERR EQU /4 RETURN CODE. CODE CHECK ERROR PROUT EQU /20 RETURN CODE. END OF JOURNAL TAPE * * VOIN EQU /8 'VOUCHER IN' BIT IN DATA-REQUEST EOJT EQU /4 'END OF JOURNAL' BIT IN DATA-REQ. VOCHA EQU /200 BIT #6 DWTTST;VOUCHER STATUS CH. NOT ALLOWED MESS EQU /400 BIT #5 DWTTST;TEST MESSAGE WRITTEN * STX EQU /82 START OF TEXT BLOCK ETB EQU /97 END OF TEXT BLOCK ETX EQU /03 LAST DUMMY REMOT EQU /01 RESET PRINT BUFFER REMOTE TAB EQU /11 TABULATION CHAR IN BUFFER CR1 EQU /0D CR JOURNAL TAPE LF1 EQU /18 LF JOURNAL TAPE CR2 EQU /09 CR TALLY ROLL,VOUCHER/PASSBOOK LF2 EQU /19 LF TALLY ROLL LDO EQU /0B LIFT DOWN 1 POSITION LUP EQU /0A LIFT UP ONE POSITION LFF EQU /0C LIFT TO TOP POSITION GRA EQU /1A WAIT FOR INSERTION OF VOUCHER/PASSBOOK REL EQU /1B RELEASE VOUCHER/PASSBOOK APH EQU /1D ATTACH PRINT HEAD RPH EQU /1E RETURN PRINT HEAD TETX EQU /83 LAST DUMMY AFTER GRASP AND RELEASE * * ********************* * 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 * DWTRLN EQU START+/12 REQUESTED LINE NUMBER DWTALN EQU START+/13 ACTUAL LINE NUMBER * EJECT * *********** * BUFFERS * *********** * * BUF1 DATA /0382,/0D1D STX,CR1,APH IFT CUTPER=0 BUF2 DATA /0382 STX XIF IFT CUTPER=1 BUF2 DATA /0482 STX XIF DATA /091D,/2000 CR2,APH,SPACE BUF3 DATA /0382,/091D STX,CR2,APH BUF5 DATA /041B,/9783,/8200 REL,ETB,DUMMY,STB =2 * * * ********** * TABLES * ********** * * DATA DVBLEN MMU BUFFER SIZE DATA 2 DEVICE INDEX TPAD EQU * ADDRESS BLOCK DATA ACTP ACTIVATIONDRIVER DATA 0 ABORT ROUTINE ADDRESS DATA IHTP INTERRUPTHANDLER DATA RCTP RECOVERY ROUTINE * * TABLE TO GET ROOMLESS POINT * ROMTAB EQU * DATA /2122,/2627,/3B3C,/3E40,/5E5F * * TABLE TO GET ACTUAL LF-CHARACTER * * LFTAB EQU * DATA /1819 LINE FEED JOURNAL/TALLY ROLL * * IFT CUTPER=1 CPTAB DATA /1F0F CODES FOR PERFORATE/CUT JOURNAL TAPE XIF TPTAB EQU * ORDER TABLE DATA /0002,/0607,/080D IFT CUTPER=1 DATA /2226 XIF DATA /393A 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=JOURNAL,1=TALLY,2=VOUCHER/PASSBOOK LC A1,DWTOR,A6 GET DWT INDEX ANK A1,7 MASK ADR A7,A1 ADD DWT INDEX TO ORDER SC A7,DWTOR+1,A6 SAVE NEW ORDER IN DWT LDK A4,0 ACTIVATION ACT005 LDK A3,TPLEN-1 ACT010 CC A7,TPTAB,A3 FIND OUT IF LEGAL ORDER RF(E) ACT020 VALID ORDER SUK A3,1 RB(NN) ACT010 TRY NEXT * ABL DISIOE ILLEGAL ORDER * * ACT020 EQU * SC A4,DWTBC,A6 RESET BYTE COUNTER ADR A3,A3 GET INDEX ABI TPFUC,A3 EXECUTE ORDER TPFUC DATA TPTEST,TPTEST,TP200,TP405,ACT055,ACT050 =1 IFT CUTPER=1 DATA TP700,TP750 XIF DATA TP800,TP900 EJECT =1 * =1 * =1 * ORDER 00: TEST =1 * IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE =1 * =1 * =1 * =1 * =1 TPTEST LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDK A2,/02 SEND CHAR /02 =2 CF A5,OUTPUT =1 LDK A2,0 SEND CHAR /00=END OF TEST =1 CF A5,OUTPUT =1 RF TPDUMY =1 EJECT * * * ORDER 06,0B: WRITE VOUCHER/PASSBOOK * GET REQUESTED LINE NUMBER AND SAVE IN DWT * * * ACT050 LD A1,ECBCW,A8 GET LINE NUMBER FROM CONTROL WORD IN ECB RF ACT085 * ACT055 LD A3,ECBBA,A8 GET BUFFER ADDRESS LC A3,1,A3 GET CONTROL CHARACTER ANK A3,/FF REQUESTED LINE STEPS SUK A3,/39 RF(G) ACT070 > /39 = ONE LF ADK A3,/9 RF(NE) ACT060 LDK A3,2 /30 = TWO LF RF ACT080 ACT060 RF(G) ACT080 /31-/39 = 1-9 LF ADK A3,/5 RF(Z) TP605 /2B = NO LF ACT070 LDK A3,1 ONE LF ACT080 LC A1,DWTRLN,A6 GET LINE NUMBER FROM DWT SUR A1,A3 GET REQUESTED LINE POSITION ACT085 RF(NN) ACT090 LINE POSITION LESS ZERO ? LDK A1,0 YES; SET LINE POSITION ZERO * ACT090 LDR A4,A4 RECOVERY ? RF(NZ) TP605 YES SC A1,DWTRLN,A6 SAVE REQUESTED LINE NUMBER RF TP605 EJECT * * * * ORDER 06 : PRINT JOURNAL * * * TP200 LDKL A3,BUF1 SEND CR1 AND ATTACH TP210 EQU * LC A1,DWTST,A6 GET LEFT BYTE IN STATUS WORD ANK A1,4 TEXT MESSAGE WRITTEN ? RF(NE) TP220 YES; COMPLETE REQUEST LD A1,ECBRL,A8 GET REQUESTED LENGTH SUK A1,3 REQUESTED LENGTH 0-2 ? RF(N) TP230 YES; COMPLETE REQUEST RF(P) TP215 LD A1,2,A8 BUFFER ADDRESS LC A2,2,A1 THIRD CHARACTER CCK A2,/2020 CONTROL CHARACTER RF(NL) TP215 LDR A4,A2 SAVE CHAR =2 LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDR A2,A4 RELOAD CHAR =2 CF A5,OUTPUT LDK A2,ETB SEND ETB =2 CF A5,OUTPUT =2 RF TP220 TP215 EQU * CF A5,BUFCHR SEND BUFFER CF A5,PRBUF PRINT ECB-BUFFER TP220 EQU * LDK A1,0 TP230 LDKL A2,/FDFF VOUCHER STATUS CHANGE ALLOWED ANS A2,DWTST,A6 EJECT * * * ECB-BUFFER IS WRITTEN * * SEND LINE FEED IF JOURNAL OR TALLY * * TPLF EQU * LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDR A1,A1 RF(NE) TPLF10 LDK A2,RPH DETACH PRINT HEAD CF A5,OUTPUT SEND TPLF10 EQU * SUK A7,8 RF(NN) TPL010 NOT JOURNAL AND TALLY ADK A7,2 GET INDEX TABLE LC A2,LFTAB,A7 GET LF CHARACTER CF A5,OUTPUT SEND LF CHAR. TPL010 LD A1,ECBRL,A8 GET REQUESTED LENGTH ST A1,ECBEL,A8 STORE EFFECTIVE LENGTH EJECT * * * COMMON END OF PRINT * * * SEND LAST DUMMY CHARACTER * TPDUMY EQU * LDK A2,ETB SEND ETB =2 CF A5,OUTPUT =2 LDK A2,ETX CF A5,OUTPUT EJECT * * * CHECK STATUS AFTER LAST DUMMY CHARACTER * TPTST EQU * SUK A7,2 TEST STATUS : VOUCHER/PASSBOOK ? RF(NZ) TST010 NO TST005 ANK A2,VOIN VOUCHER OUT ? RF(NZ) ENDIO NO RF TST015 YES * TST010 SUK A7,4 IFT CUTPER=0 RF(G) ENDIO NOT TEST STATUS, JOURNAL XIF IFT CUTPER=1 RF(G) TST020 NOT TEST STATUS, JOURNAL TST012 EQU * XIF ANK A2,EOJT END OF JOURNAL TAPE? RF(NZ) ENDIO NO: PERFORM ENDIO TST015 ORK A1,PROUT SET RETURN CODE: END OF JOURNAL TAPE, VOUCHER OUT * * * PERFORM END I/O AND GO TO DISPATCHER * ENDIO EQU * ABL DISEND PERFORM END I/O AND GO TO DISPATCHER * * * * IFT CUTPER=1 TST020 SUK A7,16 RB(L) ENDIO VOUCHER/PASSBOOK SUK A7,4 RB(G) ENDIO GRASP,RELEASE RB TST012 CUT,PERFORATE XIF EJECT * * * * ORDER 06 : PRINT TALLY ROLL * * * TP405 CF A5,RELEAS ERROR. VOUCHER IN * TP407 LDKL A3,BUF3 SEND CR2 AND ATTACH TP410 EQU * LDKL A1,VOCHA ORS A1,DWTST,A6 INDICATE VOUCHER STATUS CHANGE NOT ALLOWED RB TP210 * EJECT * * * * ORDER 06 : WRITE VOUCHER/PASSBOOK * OB : POSITION LIFT AND WRITE * * TP605 EQU * =2 LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 CF A5,GRASP GRASP VOUCHER =2 EJECT * * * SEND ELEVATOR UP/DOWN UNTIL ACTUAL * LINE NUMBER IS EQUAL REQUESTED * * TP610 CC A3,DWTRLN,A6 COMPARE LINE NUMBER RF(E) TP650 EQUAL RF(G) TP630 SEND ELEVATOR UP LDK A2,LDO SEND ELEVATOR DOWN ADK A3,1 INCREMENT ACTUAL LINE NUMBER RF TP640 TP630 LDK A2,LUP SEND ELEVATOR UP SUK A3,1 DECREMENT ACTUAL LINE NUMBER * TP640 CF A5,OUTPUT SEND LIFT CHAR * SC A3,DWTALN,A6 SAVE ACTUAL LINE NUMBER ANK A2,VOIN VOUCHER IN ? IFT COMPL=0 ABL(Z) RCTP01 NO: ERROR RECOVERY RB TP610 YES: CHECK IF LIFT POSITIONED XIF IFT COMPL=1 RB(NZ) TP610 YES: CHECK IF LIFT IS POSITIONED TP645 LDK A1,PROUT 'VOUCHER OUT' ORS A1,ECBRC,A8 INDICATE IN RETURN CODE RB TPDUMY XIF EJECT * * * ORDER 06 AND 0B: LIFT IS POSITIONED * ATTACH AND PRINT * * TP650 EQU * LDKL A3,BUF2 SEND CR2 AND ATTACH RB TP410 PRINT ECB-BUFFER EJECT IFT CUTPER=1 * * ORDER 22 AND 26 CUT AND PERFORATE JOURNAL * TP700 EQU * LDK A3,1 SET INDEX =4 RF TP760 TP750 EQU * LDK A3,0 SET INDEX =4 TP760 LDK A2,STX SEND STX =4 CF A5,OUTPUT =4 LC A2,CPTAB,A3 GET CHAR =4 CF A5,OUTPUT SEND =4 =4 RB TPDUMY XIF * * ORDER 37 AND 38 GRASP AND RELEASE VOUCHER/PASSBOOK * TP800 EQU * CF A5,GRASPA RB TPDUMY TP900 EQU * CF A5,RELEAS RB TPDUMY EJECT * * P R B U F * * SUBROUTINE TO SEND CHARACTERS FROM ECB-BUFFER UNTIL REQUESTED * LENGTH IS REACHED * PRBUF LD A4,ECBRL,A8 GET REQUESTED LENGTH SUK A4,2 ADJUST REQUESTED LENGTH LD A3,ECBBA,A8 BUFFER ADDRESS * SKIP PRECEDING SPACES IN BUFFER ADK A3,2 PRB010 LCR A1,A3 GET CHARACTER CCK A1,/2020 RF(NE) PRB050 NOT BLANK ADK A3,1 BLANK SUK A4,1 RB PRB010 GET NEXT CHARACTER * LOOK IF CARRIAGE RETURN CHAR (/09,/0D) LAST IN BUFFER PRB050 LDR A1,A3 GET ADDRESS TO ADR A1,A4 LAST CHARACTER IN BUFFER LC A1,-1,A1 GET CHAR CCK A1,/0909 CARRIAGE RETURN - CR2 ? RF(E) PRB060 YES CCK A1,/0D0D CARRIAGE RETURN - CR1 ? RF(E) PRB060 YES LDK A1,0 DUMMY CHARACTER RF PRB070 PRB060 SUK A4,1 DECREMENT REQUESTED LENGTH PRB070 ST A1,ECBEL,A8 SAVE CHAR. IN ECB * * PRB100 SUK A4,1 DECREMENT REQUESTED LENGTH RF(NN) PRB105 PRINT BUFFER LD A2,ECBEL,A8 GET CARRIAGE RETURN CHAR (/09,/0D) RF(E) PRB101 CF A5,OUTPUT SEND CHAR PRB101 EQU * LDK A2,ETB CF A5,OUTPUT SEND END OF MESSAGE LDK A2,ETX CF A5,OUTPUT WAIT FOR WHOLE BUFFER TO BE PRINTED LDKL A1,MESS INDICATE MESSAGE PRINTED ORS A1,DWTST,A6 PRB102 RTN A5 EJECT * * * * PRINT BUFFER * * PRB105 EQU * ADR A3,A4 ADDRESS TO CHARACTER TO BE PRINTED SUK A7,7 CHECK ORDER RF(L) PRB200 PRINT JOURNAL RF(G) PRB110 PRINT VOUCHER EJECT * * * * PRINT TALLY ROLL * * * ANK A2,VOIN VOUCHER IN ? RF(Z) PRB200 NO. GO AND PRINT ADK A5,4 RESET STACK POINTER RB TP405 SEND LIFT TO TOP AND RELEAS * * * * PRINT VOUCHER/PASSBOOK * * PRB110 ANK A2,VOIN VOUCHER IN ? IFT COMPL=0 RF(Z) RCTP01 ERROR .VOUCHER NOT IN XIF IFT COMPL=1 RB(Z) TP645 XIF LDR A1,A4 COPY REQUESTED LENGTH SUK A1,2 R.L. < 3? RF(N) PRB200 YES: NO TABULATION LDK A1,TAB CC A1,-2,A3 TABULATION? RF(NE) PRB200 NO EJECT * * * IF TABULATION CHARACTER: DETACH PRINT HEAD, * SEND CHARACTERS UNTIL TABULATION POSITION IS REACHED * AND ATTACH PRINT HEAD * * PRB115 LDK A2,RPH DETACH PRINT HEAD CF A5,OUTPUT SEND DETACH PRB117 LC A2,-1,A3 GET 1ST TAB POS CHAR LCR A1,A3 GET 2ND TAB POS CHAR ANK A1,/F LINE UNIT SLL A2,4 ANK A2,/F0 LINE DECADE ORR A1,A2 DECIMAL LINE NUMBER CF A5,BCDTBY CONVERT TO BINARY PRB120 IM DWTBC,A6 INCREMENT BYTE COUNTER CC A1,DWTBC,A6 COMPARE WITH ACTUAL TAB. POS. RF(NG) PRB125 PRINT * * * LDK A2,/20 LOAD BLANK CF A5,OUTPUT SEND BLANKS OR DETACH RB PRB117 * * * PRB125 SUK A4,2 DECREMENT REQUESTED LENGTH SUK A3,2 DECREMENT BUFFER ADDRESS LDK A2,APH ATTACH RF PRB240 SEND ATTACH EJECT * * * * GET OUTPUT CHARACTER FROM BUFFER. CHECK IF * - ROOMLESS POINT * - ILLEGAL CHARACTER * - SPECIAL CHARACTER (/13,/14) * PRB200 EQU * PRB205 LCR A7,A3 LOAD OUTPUT CHARACTER CCK A7,/AEAE ROOMLESS POINT ? RF(NE) PRB210 NO SUK A3,1 DECREMENT BUFFER POINTER SUK A4,1 LCR A7,A3 GET OUTPUT CHARACTER ANK A7,/F MASK LC A7,ROMTAB,A7 GET CODE IN TABLE * * * PRB210 CCK A7,/2020 ILLEGAL CHARACTER ? RF(L) PRB225 YES PRB215 CCK A7,/5F5F ILLEGAL CHARACTER ? RF(NG) PRB230 NO * * PRB225 EQU * IFT CHR13=1 CCK A7,/1313 SPECIAL CHARACTER ? RF(E) PRB230 YES XIF IFT CHR14=1 CCK A7,/1414 SPECIAL CHARACTER ? RF(E) PRB230 YES XIF * LDK A1,CCERR CODE CHECK ERROR ORS A1,ECBRC,A8 STORE IN RETURN CODE LD A7,DWTOR,A6 GET ORDER ANK A7,/FF RF PRB245 * * * PRB230 IM DWTBC,A6 INCREMENT BYTE COUNTER LDR A2,A7 GET OUTPUT CHARACTER PRB240 CF A5,OUTPUT SEND CHARACTER PRB245 SUR A3,A4 START OF BUFFER ADDRESS RB PRB100 * * * EJECT * * I H T P * * INTERRUPT HANDLER: PROCESS OF INTERRUPT * * * IHTP EQU * LD A4,DWTST,A6 GET STATUS RF(N) RCTP10 NOT BUSY =1 =1 CWK A7,2 TEST STATUS ? =1 RF(NG) IHTP20 YES =1 LDR A1,A1 RETURN CODE FROM CHANNEL UNIT =1 IFT RELEND=0 RF(NZ) RCTP10 YES GO TO DISPATCHER =1 XIF IFT RELEND=1 RF(NZ) IHTP30 YES FINISH REQUEST =1 XIF IHTP10 ABL LDREG NO RETURN CODE RESTORE REGISTER =1 IHTP20 LDR A1,A1 RB(Z) IHTP10 TEST ORDER AND TIME OUT =1 IHTP30 EQU * ABL ENDIO * * * EJECT * * R C T P * * RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON * RCTP EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * LDKL A2,/7FFF IND DEVICE BUSY =3 ANS A2,DWTST,A6 =3 LD A2,DWTECB,A6 =3 RF(Z) RCTP05 REQUEST NOT RUNNING =3 * RCTP01 LDKL A5,DWTSB2 STACK BASE ADR A5,A6 LDK A2,REMOT RESET PRINT BUFFER REMOTE AND LOCAL DUMMY CF A5,OUTPUT SEND DUMMY IFT COMPL=1 LDR A4,A4 STATUS CHANGE ? ABL(NE) TP645 XIF RCTP05 EQU * LDK A2,0 SC A2,DWTALN,A6 STORE 0 AS ACTUAL LINE NUMBER LDK A2,LFF LIFT TO TOP CF A5,OUTPUT LD A2,DWTECB,A6 =3 RF(NZ) RCTP07 REQUEST RUNNING =3 LDK A2,ETX SEND LAST DUMMY TO STOP TIMER =3 CF A5,OUTPUT =3 ABL DISEND =3 RCTP07 EQU * =3 IFT RECOV=1 LDK A2,/80 INDICATE POWER OFF ORS A2,8,A8 SET RETURN CODE XIF LDK A4,1 IND RECOVERY ABL ACT005 START RECOVERY OF PRINTER RCTP10 ABL TDISP GO TO DISPATCHER EJECT * * B C D T B Y * * SUBROUTINE TO CONVERT TO BINARY FROM DECIMAL * * * BCDTBY LDR A2,A1 PUT DECIMAL NUMBER IN A2 BCDTB1 SUK A2,/10 RF(N) BCDTB2 END SUK A1,6 DECREMENT BY 6 RB BCDTB1 BCDTB2 RTN A5 RETURN TO CALLER * * * * * * G R A S P * * SUBROUTINE TO SEND GRASP TO VOUCHER/PASSBOOK * * GRASPA EQU * LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDK A2,LFF LIFT TO TOP CF A5,OUTPUT GRASP EQU * LDK A3,0 LDK A2,GRA GRASP CF A5,OUTPUT ANK A2,VOIN VOUCHER IN ? RF(NZ) GRAS10 YES LDK A2,ETB SEND ETB =2 CF A5,OUTPUT =2 LDK A2,TETX DUMMY AFTER GRASP CF A5,OUTPUT LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDK A2,LFF LIFT TO TOP CF A5,OUTPUT RTN A5 GRAS10 LC A3,DWTALN,A6 RTN A5 * * EJECT * * * R E L E A S * * SUBROUTINE TO SEND LIFT TO TOP AND RELEASE * * * RELEAS EQU * LDK A1,0 SC A1,DWTALN,A6 SET ACTUAL LINE NUMBER TO 0 LDKL A3,BUF5 LIFT TO TOP AND RELEAS LDK A2,STX SEND STX =2 CF A5,OUTPUT =2 LDK A2,LFF LIFT TO TOP CF A5,OUTPUT ANK A2,VOIN VOUCHER IN ? RF(Z) BUFRTN * * B U F C H R * * SUBROUTINE TO OUTPUT A NUMBER OF CHARACTERS GIVEN IN * FIRST CHARACTER IN OUTPUT BUFFER * * BUFCHR LCR A4,A3 GET NUMBER OF OUTPUT CHARACTERS ANK A4,/FF MASK BUFC10 ADK A3,1 INCREMENT BUFFER POINTER LCR A2,A3 GET OUTPUT CHARACTER CF A5,OUTPUT SEND CHARACTER SUK A4,1 DECREMENT COUNTER RB(NZ) BUFC10 NOT LAST CHARACTER BUFRTN EQU * RTN A5 RETURN TO CALLER * * * * * * END