|
|
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: 20740 (0x5104)
Notes: pts_type(SC)
Names: »DRTP03.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DRTP03.SC«
IDENT DRTP03 REL 9.1 78-09-15 870106640911 * ******************************************************* * * * PHILIPS TERMINAL SYSTEM PTS * * * * DRTP03 = DRIVER TELLER TERMINAL PRINTER * * * * * * * ******************************************************* * * THIS DRIVER HANDLES TELLER TERMINAL PRINTER TP71 * * AND CONSISTS OF THE FOLLOWING PARTS: * * A C T P : ACTIVATION PART * * I H T P : INTERRUPT HANDLER * * R C T P : RECOVERY ROUTINE * * THE ACTIVATION PART PREPARES ORDERS AND SENDS * A FIXED FORMATTED STRING TO THE PRINTERS * MICROPROCESSOR (HERE CALLED MP) * EJECT * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00 : TEST STATUS * ORDER 06 : WRITE * ORDER 0B : POSITION LIFT AND WRITE * ORDER 24 : SET PRINTER PARAMETERS * ORDER 1B : SET DOCUMENT PARAMETERS * ORDER 38 : RELEASE VOUCHER/PASSBOOK * * THE FOLLOWING RETURN CODES ARE USED: * * BIT 0 : REQUEST ERROR * 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 * * EJECT * *********** * ENTRIES * *********** * * ENTRY TPAD3 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 EJECT * * ************* * CONSTANTS * ************* * * * STX EQU /82 START OF TEXT BLOCK LDO EQU /0A LIFT DOWN 1 POSITION LUP EQU /0B LIFT UP ONE POSITION OCR EQU /13 OCR SPEC EQU /0E SPECIAL MODE DOUBLE EQU /0C DOUBLE MODE EXE EQU /06 EXECUTE COMMAND RESET EQU /07 RESET MP EJECT * * ********************* * DWT-DISPLACEMENTS * ********************* * DWTST EQU 2 STATUS DWTDEV EQU 3 DEVICE INDEX DWTOR EQU 6 LAST OUTPUT, ORDER DWTSB2 EQU /1E STACK BASE DWTRLN EQU /22 REQUESTED LINE DWTALN EQU /23 ACTUAL LINE DWTRPP EQU /24 REQUESTED PRINT POSITION DWTAPP EQU /25 ACTUAL PRINT POSITION DWTPP EQU /26 PRINTER PARAMETERS DWTDP EQU /2A DOC. PARAMETER TABLE ADR DWTSAV EQU /2C SAVE AREA DWTPM EQU /2D PRINT MODE * * ********************* * 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 * ********** * * TPAD3 EQU * ADDRESS BLOCK DATA ACTP ACTIVATION DRIVER DATA IHTP INTERRUPT HANDLER DATA RCTP RECOVERY ROUTINE TPTAB EQU * DATA /0001,/0206,/0708,/0C0D,/393A,/2425,/261C,/1D00 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=VOUCHER/PASSBOOK, 2=A4 * LC A2,DWTOR,A6 GET DWT INDEX ANK A2,7 MASK LC A3,DWTDEV,A6 GET OLD DEVICE VALUE ANK A3,/FC ORR A3,A2 SC A3,DWTDEV,A6 STORE INDEX ADR A7,A2 ADD DWT INDEX TO ORDER SC A7,DWTOR+1,A6 STORE MODIFIED ORDER ACT005 LDK A3,TPLEN-2 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 DATA TPSTAT,TPSTAT,TPSTAT,TP06,TP06,TP06,TP0B,TP0B DATA TP38,TP38,TP24,TP24,TP24,TP1B,TP1B EJECT * * * ORDER 00 : TEST STATUS * * TPSTAT EQU * CF A5,START LDK A2,/30 LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND CF A5,EXECUT ABL TPTST * * * ORDER 06 : WRITE * * TP06 EQU * SUR A1,A1 CWR A1,A2 DEVICE=JOURNAL RF(E) TP062 CF A5,STATCK CHECK IF DOC. IN ABL(NZ) TPTST NO TP062 EQU * CF A5,START LDK A2,/33 LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND CF A5,REQCK CHECK REQ. LENGTH ABL(NZ) ERR CF A5,NOLF GET NO. OF LF LDK A2,LDO CF A5,OUTPUT SEND LF UP LDR A2,A3 CF A5,OUT SEND NO. OF LF LC A1,DWTDEV,A6 GET DEVICE INDEX ANK A1,3 RF(Z) TP0610 JOURNAL LC A1,DWTALN,A6 GET ACTUAL LINE ANK A1,/FF RF(NZ) TP0604 LD* A1,DWTDP,A6 GET MAX LINES ANK A1,/FF TP0604 ADR A1,A3 ADD TO GET REQ. LINE LD* A3,DWTDP,A6 GET MAX LINES ANK A3,/FF CWR A1,A3 >MAX ABL(G) ERR SC A1,DWTRLN,A6 STORE IN DWT TP0610 CF A5,REQCK CHECK LENGTH SUK A4,1 LENGTH=2 RF(Z) TP0620 LD A4,ECBRL,A8 GET ADJUSTED REQUESTED LENGTH SUK A4,2 LD A3,ECBBA,A8 GET ADJUSTED BUFFER START ADK A3,2 CM DWTSAV,A6 CLEAR WORK AREA LC A1,-1,A3 GET CONTROL CHARACTER ANK A1,/FF SUK A1,/2B RF(NZ) PR002 NOT /2B LC A1,DWTAPP,A6 GET ACTUAL PRINT POS SC A1,DWTRPP,A6 -AND SET AS REQUESTED PRINT POS RF PR004 PR002 CM DWTRPP,A6 RESET PRINT POS COUNTERS PR004 LCR A2,A3 GET CHARACTER ANK A2,/FF MASK LC A7,1,A3 GET NEXT CHARACTER CCK A2,/AEAE NOT ROOMLESS POINT DIGIT RF(NE) PR030 LDR A2,A7 GET DIGIT ADK A3,1 STEP POINTER PR014 SUK A4,1 DECR. LENGTH ORK A2,/40 SET ZONE VALUE LC A7,DWTPM,A6 CHECK IF SPECIAL MODE ANK A7,/80 RF(NZ) PR020 YES SC A2,DWTSAV,A6 SAVE DIGIT CF A5,INCR CHECK AND COUNT RF(NZ) ERR LDK A2,SPEC CF A5,OUTPUT SEND 'SPECIAL' LC A2,DWTSAV,A6 CF A5,OUTPUT SEND DIGIT LDK A2,SPEC CF A5,OUTPUT RF PR022 PR020 CF A5,INCR CHECK AND COUNT RF(NZ) ERR CF A5,OUTPUT SEND CHARACTER PR022 SUK A4,1 DECR. REQ. LENGTH RF(Z) TP0620 EMPTY ADK A3,1 STEP POINTER RB PR004 PR030 ANK A2,/FF MASK LDR A7,A2 SAVE CHARACTER SUK A7,DOUBLE DOUBLE RF(Z) PR040 SUK A7,2 SPECIAL RF(Z) PR040 SUK A7,5 OCR RB(NZ) PR020 PR040 CF A5,SETMOD UPDATE PRINT MODE CF A5,OUTPUT RB PR022 TP0620 CF A5,EXECUT LC A1,DWTDEV,A6 GET INDEX ANK A1,3 RF(Z) TP0630 JOURNAL LC A1,DWTRLN,A6 GET REQ. LINE SC A1,DWTALN,A6 STORE AS ACTUAL LINE TP0630 LDK A3,/13 LOAD MASK TM A2,A3 NOT OPERABLE RF(Z) TP0640 YES CM DWTRPP,A6 CLEAR PRINT POS RF TPTST TP0640 LC A1,DWTRPP,A6 GET REQ. PRINT POS SC A1,DWTAPP,A6 STORE AS ACTUAL PRINT POS * * TEST STATUS * TPTST EQU * LDK A1,0 LDK A3,/13 TM A2,A3 OPERABLE RF(Z) DOCIN LDK A1,1 DOCIN LC A4,DWTDEV,A6 ANK A4,3 JOURNAL RF(Z) CODE LDK A3,/40 TM A2,A3 DOCUMENT OUT RF(NZ) CODE CM DWTRLN,A6 RESET LINE COUNTER LC A3,DWTST,A6 RESET DOC IN BIT ANK A3,/FD SC A3,DWTST,A6 CWK A7,/1B ORDER=SET DOC PAR RF(NL) CODE ORK A1,/20 CODE LDK A3,4 TM A2,A3 CODE CHECK ERROR RF(Z) ENDJT ORK A1,4 ENDJT LDR A4,A4 NOT JOURNAL RF(NZ) TPRC ANK A2,/20 NOT END OF PAPER RF(Z) TPRC ORK A1,/20 TPRC ST A1,ECBRC,A8 SET RETURN CODE * * ENDIO ABL DISEND * * E R R * ERROR. SEND RESET COMMAND AND INDICATE * CODE CHECK ERROR * ERR EQU * LDK A2,RESET CF A5,OUTPUT SEND RESET LDK A1,4 RB TPRC * * ORDER 0B : POSITION VOUCHER/PASSBOOK/A4 AND WRITE * * TP0B EQU * CF A5,STATCK CHECK IF DOC. IN RB(NZ) TPTST LC A1,DWTDEV,A6 GET INDEX ANK A1,3 LDR A2,A1 SLL A1,2 ORR A2,A1 SC A2,DWTDEV,A6 SAVE CURRENT DEVICE CF A5,START LDK A2,/35 LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND LD A3,ECBCW,A8 GET CONTROL WORD RB(Z) ERR =0 LD A1,DWTDP,A6 GET TABLE ADR RB(Z) ERR NOT DEFINED LDR* A2,A1 GET MAX LINES ANK A2,/FF CWR A3,A2 >MAX RB(G) ERR SC A3,DWTRLN,A6 STORE REQ. LINE LC A4,DWTALN,A6 GET ACTUAL LINE ANK A4,/FF TP0B04 CWR A3,A4 RF(NG) TP0B10 REQ. <= ACTUAL LDK A2,LDO CF A5,OUTPUT SEND LF DOWN SUR A3,A4 RF TP0B20 TP0B10 LDK A2,LUP CF A5,OUTPUT SEND LF UP SUR A4,A3 LDR A3,A4 TP0B20 LDR A2,A3 CF A5,OUT SEND NO. OF LF LD A1,ECBRL,A8 GET LENGTH RB(Z) TP0620 NO PRINTING ABL TP0610 * * ORDER 38 : RELEASE VOUCHER/PASSBOOK AND A4 * TP38 EQU * CF A5,START LDK A2,/37 LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND CM DWTRLN,A6 SET ACTUAL LINE ZERO CF A5,EXECUT RB TPTST EJECT * * * ORDER 24 : SET PRINTER PARAMETERS * CONTROL WORD OF ECB CONTAINS: * BIT 0- 7:NATIONAL CHARACTER SET * BIT 8-11:PITCH * BIT 12-15:STEPS/LINE * * TP24 EQU * CF A5,START LDK A2,/3A LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND LDK A4,0 LDR A3,A6 GET ADR TO PARAM. ADK A3,DWTPP+1 LC A1,DWTDEV,A6 ANK A1,3 ADR A3,A1 LD A1,ECBCW,A8 GET CONTROL WORD ANK A1,/F MASK TO GET STEPS/LINE RF(NZ) TP2402 LCR A1,A3 GET OLD VALUE ANK A1,/F ORR A4,A1 SAVE STEPS/LINE RF TP2404 TP2402 CF A5,PPCK CHECK RB(NZ) ERR ORR A4,A1 SAVE NEW STEPS/LINE TP2404 LDR A2,A4 CF A5,OUT SEND STEPS/LINE LD A1,ECBCW,A8 ANK A1,/F0 GET PITCH RF(NZ) TP2406 LCR A1,A3 GET OLD VALUE ANK A1,/F0 RF TP2408 TP2406 SRL A1,4 CF A5,PPCK CHECK RB(NZ) ERR SLL A1,4 TP2408 ORR A4,A1 SAVE PITCH VALUE SCR A4,A3 STORE NEW PRINTER PARAMETERS LDR A2,A1 SRL A2,4 CF A5,OUT SEND PITCH LD A1,ECBCW,A8 SRL A1,8 GET NAT. CH. SET LDR A2,A1 ANK A1,/F SUK A1,9 >9 RB(P) ERR SC A2,DWTPP,A6 STORE IN DWT CF A5,OUT SEND NAT. CH. SET CF A5,EXECUT RF TP1B10 * * * ORDER 1B : SET DOCUMENT PARAMETERS * CONTROL WORD OF ECB CONTAINS * ADR TO PARAMETER TABLE * TP1B EQU * CF A5,START LDK A2,/3C LOAD MP ORDER CF A5,ORDER ADD INDEX AND SEND LD A3,ECBCW,A8 GET CONTROL WORD ABL(Z) ERR NOT DEFINED ST A3,DWTDP,A6 STORE TABLE ADR CF A5,SENDDP SEND TABLE CF A5,EXECUT TP1B10 ABL TPTST EJECT * * S U B R O U T I N E S * * * * O R D E R * SENDS MODIFIED ORDER TO MP * ORDER EQU * LDR A3,A2 SAVE LDK A2,STX CF A5,OUTPUT LDR A2,A3 LC A1,DWTDEV,A6 GET INDEX ANK A1,3 ADR A2,A1 ADD INDEX CF A5,OUTPUT SEND ORDER RTN A5 * * START * INDICATES START CHARACTER TO MP * START EQU * CF A5,NODRW LDK A2,RESET CF A5,OUTPUT RTN A5 * * E X E C U T * INDICATES LAST CHARACTER TO MP * EXECUT EQU * CF A5,DRW DATA REQUEST WANTED LDK A2,EXE CF A5,OUTPUT RTN A5 * * R E Q C K * CHECKS REQUESTED LENGTH * REQCK EQU * LDK A4,0 LD A1,ECBRL,A8 GET REQUESTED LENGTH SUK A1,2 RF(N) COND1 LENGTH=0-1 RF(G) RE10 BUFFER TO PRINT LDK A4,1 IND. REQ. LENGTH=2 RE10 RF COND0 * * S T A T C K * CHECKS IF DOCUMENT IN * STATCK EQU * LC A7,DWTST,A6 GET STATUS BYTE ANK A7,2 LDK A2,0 RESET A2 IN CASE DOC NOT IN RF(NZ) COND0 RF COND1 * * N O L F * GET NO. OF LINES TO A1 * NOLF EQU * LD A3,ECBBA,A8 GET BUFFER ADR LC A3,1,A3 ANK A3,/FF GET CONTROL CHARACTER SUK A3,/39 RF(G) NOLF10 >/39 = ONE LF ADK A3,9 RF(Z) NOLF20 =/30 = TWO LF RF(NN) NOLF30 1-9 LF ADK A3,5 RF(Z) NOLF40 =/2B = NO LF NOLF10 LDK A3,1 RTN A5 NOLF20 LDK A3,2 NOLF30 RTN A5 NOLF40 LDK A3,0 RTN A5 * * SET CONDITION * COND0 LDK A7,0 SC A7,2,A5 RTN A5 * COND1 LDK A7,1 RB COND0+2 * * I N C R * CHECK CHARACTER AND INCR. DWTRPP. MODE IN A1 * INCR EQU * LDR A7,A2 SAVE SUK A7,/1E >/1E RF(G) INC10 LDR A7,A2 SUK A7,LDO <LDO RB(N) COND1 SUK A7,9 RB(G) COND1 >OCR ADK A7,6 TAB ORDER RB(Z) COND1 RB COND0 INC10 SUK A7,/61 >8F RB(P) COND1 LC A7,DWTPM,A6 GET CURRENT PRINT MODE LC A1,DWTRPP,A6 GET PRINT POS COUNTER ADK A1,1 COUNT ANK A7,DOUBLE SUK A7,DOUBLE NOT DOUBLE RF(NZ) INC20 ADK A1,1 INC20 SC A1,DWTRPP,A6 STORE COUNTER RB COND0 * P P C K * CHECK PRINTER PARAMETERS * PPCK CWK A1,/A RB(E) COND0 CWK A1,/C RB(E) COND0 CWK A1,/F RB(E) COND0 RB COND1 * 0 U T * ADD CONST. AND SEND * OUT ADK A2,/20 CF A5,OUTPUT RTN A5 * * S E N D D P * SENDS ALL BYTES IN PARAMETER TABLE * SENDDP EQU * LDK A4,6 SEN10 LCR A2,A3 GET BYTE FROM TABLE ADK A2,/20 ADD CONST CF A5,OUTPUT SEND CH. ADK A3,1 SUK A4,1 RB(NZ) SEN10 RTN A5 * * S E T M O D * UPDATES PRINTING MODE * SETMOD EQU * LC A7,DWTPM,A6 GET CURRENT MODE CWK A2,SPEC NOT SPECIAL RF(NE) SET10 XRK A7,/80 RF SET20 SET10 XRR A7,A2 SET20 SC A7,DWTPM,A6 STORE NEW MODE RTN A5 * * D R W * INDICATE DATA REQUEST WANTED * DRW LDKL A1,/7FFF ANRS A1,A6 RTN A5 * * N O D R W * NO DATA REQUEST WANTED * NODRW LDKL A1,/8000 ORRS A1,A6 RTN A5 EJECT * * I H T P * * INTERRUPT HANDLER: PROCESS OF INTERRUPT * * * IHTP EQU * LDR A4,A4 RF(Z) IHTP10 ACK AS DATA REQUEST LDK A3,8 TM A2,A3 NOT DATA REQUEST RF(Z) IHTP20 IHTP10 ABL LDREG IHTP20 ANK A2,/40 MASK DOC. BIT CWK A2,0 DOCUMENT IN? RF(NE) IHTP22 YES CM DWTRLN,A6 RESET LINE COUNTER IHTP22 SRL A2,5 LC A4,DWTST,A6 GET STATUS ANK A4,/FD ORR A4,A2 SC A4,DWTST,A6 SET NEW STATUS IHTP30 ABL TDISP EJECT * * R C T P * * RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON * RCTP CF A15,SAVE8 SAVE REG. A1-A8 CF A5,NODRW NO DATA REQUEST CF A5,START LDK A2,/3F RECOVERY ORDER LC A3,DWTST,A6 GET STATUS ANK A3,/20 NO DOCUMENT RF(Z) RCTP02 LC A3,DWTDEV,A6 SRL A3,2 GET "DOC. INDEX" ANK A3,3 ADR A2,A3 ADD INDEX TO ORDER CODE RCTP02 CF A5,OUTPUT LDR A3,A6 GET ADR TO FIRST BYTE TO SEND ADK A3,DWTPP+1 LDK A4,3 SET COUNTER RCTP06 LCR A2,A3 ANK A2,/F CF A5,OUT SEND STEPS/LINE LCR A2,A3 SRL A2,4 CF A5,OUT SEND PITCH ADK A3,1 SUK A4,1 RB(NZ) RCTP06 SUK A3,4 LCR A2,A3 CF A5,OUT SEND NAT. CH. SET ADK A3,4 LDR* A3,A3 GET ADR TO TABLE RF(Z) RCTP10 NOT DEFINED CF A5,SENDDP SEND TABLE LDR A3,A6 ADK A3,DWTAPP LCR A2,A3 CF A5,OUT SEND ACTUAL PRINT POS SUK A3,2 LCR A2,A3 CF A5,OUT SEND ACTUAL LINE RCTP10 CF A5,EXECUT LDK A3,/40 RESET DOC IN BIT IF FAILED RECOVERY NOT BUSY TM A2,A3 RF(NZ) RCTP11 CM DWTRLN,A6 CRESET ACTUAL LINE LC A3,DWTST,A6 RESET DOC IN BIT ANK A3,/FD SC A3,DWTST,A6 RCTP11 LD A3,DWTST,A6 GET STATUS RB(N) IHTP30 NOT BUSY LC A4,DWTDEV,A6 ANK A4,3 JOURNAL RF(Z) RCTP12 LDK A3,/40 TM A2,A3 DOCUMENT OUT RF(Z) RCTP30 RF RCTP20 RCTP12 LDK A3,3 TM A2,A3 TRANSPORT/GENERAL ERROR RF(NZ) RCTP30 RCTP20 LC A2,DWTDEV,A6 GET CURRENT DEVICE ANK A2,3 ABL ACT005 FINISH REQUEST RCTP30 ABL TPTST FINISH REQUEST END