|
|
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: 30186 (0x75ea)
Notes: pts_type(SC)
Names: »DRTP02.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRTP02.SC«
IDENT DRTP02 REL 11.0 81-02-16 870105041100 =2, STATUS HANDLING CHANGED REL 11.0 81-01-30 =1, BLOCK DEF. ADJUSTED REL 11.0 81-01-26 ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRTP02 = DRIVER TELLER TERMINAL PRINTER * * * * * * * * * * ******************************************************* * * THIS DRIVER HANDLES TELLER TERMINAL PRINTERS PTS 6221, * 6222 OR 6223 * * * 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 2 : END OF JOURNAL TAPE, VOUCHER OUT * BIT 7 : RECOVERY EXECUTED ON REQUEST * BIT 13 : CODE CHECK ERROR * BIT 15 : NOT OPERABLE * * * * NORMAL REGISTER USAGE: * * REGISTER A1: WORK REGISTER * A2: INPUT/OUTPUT * A3: BUFFER POINTER * A4: OUTPUT COUNTER * A5: STACK POINTER * A6: DWT-ADDRESS * A7: ORDER * A8: ECB-ADDRESS * EJECT * * 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 LDISP DISPATCHING FROM INTERRUPT EXTRN LENDER DISPATCH I/O ERROR EXTRN LENDIS END I/O AND DISPATCH EXTRN TENDIO END I/O EXTRN OUTPUT OUTPUT ONE CHARACTER EXTRN DWTST STATUS EXTRN DWTECB ECB ADDRESS EXTRN DWTOR ORDER EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN DWTDEV DEVICE STATUS EXTRN STABLK DEF. START OF BLOCK EXTRN ENDBLK DEF. END OF BLOCK EXTRN NDSAV8 SAVE A3-A5, A7-A8 IN DWT =2 EXTRN NDREP GET REGISTERS AND RETURN =2 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 X:A * * * JOURNAL TAPE MAY BE CUT/PERFORATED FOR PTS 6223 BY * SETTING X:B = 1 * * X:B EQU 0 CUTPER EQU X:B * * * SPECIAL CHARACTER /13, /14 IS ACCEPTED BY SETTING X:C = 1 * AND X:D = 1 RESPECTIVLY * * X:C EQU 0 CHR13 EQU X:C * * X:D EQU 0 CHR14 EQU X:D * * * PRINTING VOUCHER/PASSBOOK, IS COMPLETED IF * PRINT OBJECT IS REMOVED UNDER PRINTING IF X:E = 1 * * X:E EQU 0 COMPL EQU X:E * * * 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 X:F * * * MMU BUFFER SIZE * * X:H EQU 20 DVBLEN EQU X:H * EJECT * * ************* * CONSTANTS * ************* * * CCERR EQU /4 RETURN CODE. CODE CHECK ERROR PROUT EQU /2000 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. WAICHA EQU /100 BIT #7 DWTDEV;WAIT FOR STATUS CHANGE VOCHA EQU /200 BIT #6 DWTDEV;VOUCHER STATUS CH. NOT ALLOWED MESS EQU /400 BIT #5 DWTDEV;TEST MESSAGE WRITTEN 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 * ********************* * RLN EQU /4 REQUESTED LINE NUMBER ALN EQU /5 ACTUAL LINE NUMBER PCO EQU /6 POSITION COUNTER * *********** * BUFFERS * *********** * * BUF1 DATA /020D,/1D00 CR1,APH IFT CUTPER=0 BUF2 DATA /0209 CR2 XIF IFT CUTPER=1 BUF2 DATA /0309 XIF DATA /1D20 APH,SPACE BUF3 DATA /0209,/1D00 CR2,APH =2 * * * ********** * TABLES * ********** * * DATA DVBLEN MMU BUFFER SIZE DATA 2 DEVICE INDEX TPAD EQU * ADDRESS BLOCK DATA ACTP ACTIVATIONDRIVER DATA 1 ABORT ROUTINE ADDRESS DATA IHTP INTERRUPTHANDLER DATA RCTP RECOVERY ROUTINE * * TABLE TO GET ROOMLESS POINT * ROMTAB EQU * DATA /2122,/2426,/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 LENDER ILLEGAL ORDER * * ACT020 LDK A1,1 ST A1,DWTDEV+PCO,A6 RESET BYTE COUNTER ADR A3,A3 GET INDEX ABI TPFUC,A3 EXECUTE ORDER TPFUC DATA TPTEST,TPTEST,TP200,TP405,ACT055,ACT050 IFT CUTPER=1 DATA TP700,TP750 XIF DATA TP800,TP900 EJECT * * * ORDER 00: TEST * IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE * * * * TPTEST EQU * LDK A2,/5 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERTP1 JMP IF ERROR LDK A2,/02 SEND CHAR /02 CF A5,OUTPUT RF(NZ) ERTP1 JMP IF ERROR LDK A2,0 SEND CHAR /00=END OF TEST CF A5,OUTPUT RF(NZ) ERTP1 JMP IF ERROR RF TPDUMY 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 ABL(Z) TP605 /2B = NO LF ACT070 LDK A3,1 ONE LF ACT080 LC A1,DWTDEV+RLN,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,DWTDEV+RLN,A6 SAVE REQUESTED LINE NUMBER RF TP605 EJECT * * * * ORDER 06 : PRINT JOURNAL * * * TP200 LDKL A3,BUF1 SEND CR1 AND ATTACH TP210 EQU * =2 LD A2,ECBRL,A8 ADK A2,/F BLOCK LENGTH CF A5,STABLK START OF BLOCK ERTP1 RF(NZ) ERTP2 JMP IF ERROR LC A1,DWTDEV,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 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,DWTDEV,A6 EJECT * * * ECB-BUFFER IS WRITTEN * * SEND LINE FEED IF JOURNAL OR TALLY * * TPLF EQU * LDR A1,A1 RF(NE) TPLF10 LDK A2,RPH DETACH PRINT HEAD CF A5,OUTPUT SEND RF(NZ) ERTP2 JMP IF ERROR 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. RF(NZ) ERTP2 JMP IF ERROR 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,ETX CF A5,OUTPUT RF(NZ) ERTP2 JMP IF ERROR EJECT * * * CHECK STATUS AFTER LAST DUMMY CHARACTER * TPTST EQU * SUK A7,2 TEST STATUS : VOUCHER/PASSBOOK ? RF(NZ) TST010 NO TST005 LC A2,DWTDEV+1,A6 GET STATUS =2 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 LC A2,DWTDEV+1,A6 GET STATUS =2 ANK A2,EOJT END OF JOURNAL TAPE? RF(NZ) ENDIO NO: PERFORM ENDIO TST015 ORKL A1,PROUT SET RETURN CODE: END OF JOURNAL TAPE, VOUCHER OUT * * PERFORM END I/O AND GO TO DISPATCHER * ENDIO EQU * LDR A4,A1 SAVE RETURN CODE CF A5,ENDBLK END OF BLOCK ERTP2 RF(NZ) ERTP3 JMP IF ERROR LDKL A1,/FBFF RESET MESSAGE WRITTEN IND. ANS A1,DWTDEV,A6 LDR A1,A4 RESTORE RETURN CODE ABL LENDIS 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 =2(=1) * TP407 LDKL A3,BUF3 SEND CR2 AND ATTACH TP410 EQU * LDKL A1,VOCHA ORS A1,DWTDEV,A6 INDICATE VOUCHER STATUS CHANGE NOT ALLOWED RB TP210 EJECT * * * * ORDER 06 : WRITE VOUCHER/PASSBOOK * OB : POSITION LIFT AND WRITE * * TP605 EQU * LDK A2,5 BLOCK LENGTH =2 CF A5,STABLK START OF BLOCK =2 RF(NZ) ERTP3 JMP IF ERROR =2 CF A5,GRASP GRASP VOUCHER =2 LC A2,DWTDEV+RLN,A6 GET REQUESTED LINE NO. =2 ANK A2,/FF CLEAN =2 SUR A2,A3 GET /REQ.-ACT./ LINE NO. RF(NN) TP608 =2 NGR A2,A2 =2 TP608 ADK A2,/9 CF A5,STABLK START OF BLOCK RF(NZ) ERTP3 JMP IF ERROR =2 EJECT * * * SEND ELEVATOR UP/DOWN UNTIL ACTUAL * LINE NUMBER IS EQUAL REQUESTED * * TP610 CC A3,DWTDEV+RLN,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 RF(NZ) ERTP3 JMP IF ERROR * SC A3,DWTDEV+ALN,A6 SAVE ACTUAL LINE NUMBER LC A2,DWTDEV+1,A6 GET STATUS =2 ANK A2,VOIN VOUCHER IN ? IFT COMPL=0 ABL(Z) RCTP NO: ERROR RECOVERY RB TP610 YES: CHECK IF LIFT POSITIONED XIF IFT COMPL=1 RB(NZ) TP610 YES: CHECK IF LIFT IS POSITIONED TP645 LDKL A1,PROUT 'VOUCHER OUT' ORS A1,ECBRC,A8 INDICATE IN RETURN CODE LDK A2,RPH RETURN PRINTHEAD CF A5,OUTPUT RF(NZ) ERTP3 JMP IF ERROR RB TPDUMY XIF EJECT * * * ORDER 06 AND 0B: LIFT IS POSITIONED * ATTACH AND PRINT * * TP650 EQU * CF A5,ENDBLK END OF BLOCK ERTP3 RF(NZ) ERTP4 JMP IF ERROR 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 RF TP760 TP750 EQU * LDK A3,0 SET INDEX TP760 LDK A2,/4 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERTP4 JMP IF ERROR LC A2,CPTAB,A3 GET CHAR CF A5,OUTPUT SEND RF(NZ) ERTP4 JMP IF ERROR LDK A2,LF1 LINE FEED CF A5,OUTPUT SEND RF(NZ) ERTP4 JMP IF ERROR RB TPDUMY XIF * * ORDER 37 AND 38 GRASP AND RELEASE VOUCHER/PASSBOOK * TP800 EQU * LDK A2,/9 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERTP4 JMP IF ERROR CF A5,GRASPA TP850 LDK A2,1 BLOCK LENGTH =2 CF A5,STABLK START OF BLOCK =2 RF(NZ) ERTP4 JMP IF ERROR =2 RB TPDUMY TP900 EQU * CF A5,RELEAS RB TP850 =2 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 RF(NZ) ERTP4 JMP IF ERROR PRB101 EQU * CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP5 JMP IF ERROR LDK A2,1 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERTP5 JMP IF ERROR LDK A2,ETX CF A5,OUTPUT WAIT FOR WHOLE BUFFER TO BE PRINTED ERTP4 RF(NZ) ERTP5 JMP IF ERROR CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP5 JMP IF ERROR LDK A2,3 BLOCK LENGTH CF A5,STABLK START OF BLOCK RF(NZ) ERTP5 JMP IF ERROR LDKL A1,MESS INDICATE MESSAGE PRINTED ORS A1,DWTDEV,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 * * * LC A2,DWTDEV+1,A6 GET STATUS =2 ANK A2,VOIN VOUCHER IN ? RF(Z) PRB200 NO. GO AND PRINT ADK A5,4 RESET STACK POINTER CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP5 JMP IF ERROR ABL TP405 SEND LIFT TO TOP AND RELEAS * * * * PRINT VOUCHER/PASSBOOK * * PRB110 LC A2,DWTDEV+1,A6 GET STATUS =2 ANK A2,VOIN VOUCHER IN ? IFT COMPL=0 RF(Z) RCTP 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 RF(NZ) ERTP5 JMP IF ERROR 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 EQU * CW A1,DWTDEV+PCO,A6 COMPARE WITH ACTUAL TAB. POS. RF(NG) PRB125 PRINT * * IM DWTDEV+PCO,A6 INCREMENT POSITION COUNTER LDK A2,/20 LOAD BLANK CF A5,OUTPUT SEND BLANKS OR DETACH ERTP5 RF(NZ) ERTP6 JMP IF ERROR 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 RF PRB245 * * * PRB230 IM DWTDEV+PCO,A6 INCREMENT BYTE COUNTER LDR A2,A7 GET OUTPUT CHARACTER PRB240 CF A5,OUTPUT SEND CHARACTER RF(NZ) ERTP6 JMP IF ERROR PRB245 SUR A3,A4 START OF BUFFER ADDRESS LD A7,DWTOR,A6 GET ORDER ANK A7,/FF RB PRB100 * * * EJECT * * I H T P * * INTERRUPT HANDLER: PROCESS OF INTERRUPT * * * IHTP EQU * =2 LD A3,DWTDEV,A6 TERMINAL DEVICE STATUS =2 LDR A4,A3 SAVE OLD STATUS =2 SC A2,DWTDEV+1,A6 STORE NEW STATUS IN DWT =2 ANKL A4,VOCHA STATUS CHANGE ALLOWED ? =2 RF(Z) IHTP10 YES =2 XRS A4,DWTDEV,A6 RESET BIT =2 XRR A3,A2 COMPARE OLD AND NEW STATUS =2 ANK A3,VOIN VOUCHER STATUS CHANGED ? =2 RF(Z) RCTP10 NO, GO TO DISPATCHER =2 LDK A4,/08 INDICATE STATUS CHANGE =2 RF RCTP FOR RECOVERY ROUTINE =2 IHTP10 LDR A4,A3 OLD STATUS =2 ANKL A4,WAICHA WAITING FOR STATUS CHANGE ? =2 RF(Z) RCTP10 NO, GO TO DISPATCHER =2 XRR A3,A2 COMPARE OLD AND NEW STATUS =2 ANK A3,VOIN VOUCHER STATUS CHANGED ? =2 RF(Z) RCTP10 NO, GO TO DISPATCHER =2 XRS A4,DWTDEV,A6 RESET 'WAIT FOR STATUS' BIT =2 ABL NDREP GET A3-A5,A7-A8 AND RET VIA A5 =2 * * * EJECT * * R C T P * * RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON * RCTP EQU * * LDKL A2,/FFFF-WAICHA =2 ANS A2,DWTDEV,A6 RESET 'WAIT FOR STATUS' BIT =2 LDKL A2,/7FFF IND DEVICE BUSY ANS A2,DWTST,A6 LDKL A5,DWTSB2 STACK BASE ADR A5,A6 LDK A2,/3 BLOCK LENGTH CF A5,STABLK START OF BLOCK ERTP6 RF(NZ) ERTP JMP IF ERROR LD A2,DWTECB,A6 RF(Z) RCTP05 REQUEST NOT RUNNING * LDK A2,REMOT RESET PRINT BUFFER REMOTE AND LOCAL DUMMY CF A5,OUTPUT SEND DUMMY RF(NZ) ERTP JMP IF ERROR IFT COMPL=1 ANK A4,/08 STATUS CHANGE ? RF(Z) RCTP05 NO ABL TP645 COMPLETE REQUEST XIF RCTP05 EQU * LDK A2,0 SC A2,DWTDEV+ALN,A6 STORE 0 AS ACTUAL LINE NUMBER LDK A2,LFF LIFT TO TOP CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR LD A2,DWTECB,A6 RF(NZ) RCTP07 REQUEST RUNNING LDK A2,ETX SEND LAST DUMMY TO STOP TIMER CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP JMP IF ERROR ABL LENDIS RCTP07 EQU * IFT RECOV=1 LDKL A2,/100 INDICATE POWER OFF ORS A2,8,A8 SET RETURN CODE XIF LDK A4,1 IND RECOVERY CF A5,ENDBLK END OF BLOCK RF(NZ) ERTP JMP IF ERROR LD A7,DWTOR,A6 SET ORDER IN A7 ANK A7,/FF ABL ACT005 START RECOVERY OF PRINTER RCTP10 ABL LDISP 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,LFF LIFT TO TOP CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR GRASP EQU * LDK A3,0 LDK A2,GRA GRASP CF A5,OUTPUT RF(NZ) ERTP JMP IF ERROR LC A4,DWTDEV+1,A6 GET STATUS =2 ANK A4,VOIN VOUCHER IN ? =2 =2 RF(Z) COM010 NO =2 LC A3,DWTDEV+ALN,A6 GET ACTUAL LINE NO. =2 GRAS10 CF A5,ENDBLK END OF BLOCK =2 RF(NZ) ERTP JMP IF ERROR =2 RTN A5 RETURN =2 * * * * * ERROR ROUTINE FOR STABLK,OUTPUT AND ENDBLK * * INPUT : A1 = RETURN CODE * ERTP EQU * LDK A4,0 LD A7,DWTOR,A6 SET ORDER IN A7 ANK A7,/FF RF(NZ) ERTP20 ORDER /00 ? ERTP15 LDK A1,1 YES,SET RETURN CODE ABL LENDIS NOT OPER. & END OF REQUEST ERTP20 ANK A1,/1A SOFTW. TIME OUT,LRC OR LINK ERROR RB(NZ) RCTP YES RECOVERY IFT RELEND=0 ABL LDISP DISPATCH XIF IFT RELEND=1 RB ERTP15 END OF REQ. XIF EJECT * * * R E L E A S * * SUBROUTINE TO SEND LIFT TO TOP AND RELEASE * * * RELEAS EQU * LDK A2,/4 BLOCK LENGTH CF A5,STABLK START OF BLOCK RB(NZ) ERTP JMP IF ERROR LDK A1,0 SC A1,DWTDEV+ALN,A6 SET ACTUAL LINE NUMBER TO 0 LDK A2,LFF LIFT TO TOP CF A5,OUTPUT RB(NZ) ERTP JMP IF ERROR LC A4,DWTDEV+1,A6 GET STATUS =2 ANK A4,VOIN VOUCHER IN ? =2 RB(Z) GRAS10 NO, RETURN =2 LDK A2,REL RELEASE =2 CF A5,OUTPUT =2 RB(NZ) ERTP JMP IF ERROR =2 * * COMMON END FOR GRASP AND RELEASE SUBROUTINES * WHEN A CHANGE OF VOUCHER STATUS IS WANTED * COM010 CF A5,ENDBLK END OF BLOCK =2 RB(NZ) ERTP JMP IF ERROR =2 LDK A2,1 BLOCK LENGTH =2 CF A5,STABLK START OF BLOCK =2 RB(NZ) ERTP JMP IF ERROR =2 LDK A2,TETX DUMMY AFTER GRASP AND REL =2 CF A5,OUTPUT =2 RB(NZ) ERTP JMP IF ERROR =2 CF A5,ENDBLK END OF BLOCK =2 RB(NZ) ERTP JMP IF ERROR =2 LC A2,DWTDEV+1,A6 GET STATUS =2 XRR A4,A2 VOUCHER ST. CHANGED SINCE LAST? =2 RF(NZ) COM020 YES, DON'T WAIT =2 CF A5,WAIT WAIT FOR STATUS =2 COM020 EQU * =2 RTN A5 RETURN WITH NEW STATUS =2 * * 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 RB(NZ) ERTP JMP IF ERROR SUK A4,1 DECREMENT COUNTER RB(NZ) BUFC10 NOT LAST CHARACTER BUFRTN EQU * RTN A5 RETURN TO CALLER * * * W A I T * * SUBROUTINE USED TO INITIATE WAIT FOR CHANGE * IN VOUCHER STATUS. * RETURN AFTER SUBROUTINE IS MADE THROUGH * INTERRUPT HANDLER WHEN STATUS IS CHANGED. * WAIT EQU * =2 INH =2 CF A15,NDSAV8 SAVE A3-A5,A7-A8 IN DWT =2 LDKL A3,WAICHA =2 ORS A3,DWTDEV,A6 INDICATE 'WAIT FOR STATUS' =2 ABL LDISP DISPATCH =2 * * * * END