|
|
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: 13692 (0x357c)
Notes: pts_type(SC)
Names: »DRMS01.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DRMS01.SC«
IDENT DRMS01 REL 9.1 78-09-15 870106040912 * ************************************************* * * PHILIPS TERMINAL SYSTEM PTS * * DRMS01 = DRIVER MAGNETIC STRIPE * * * * * * * ************************************************** * * * THIS DRIVER HANDLES INPUT/OUTPUT ON THE * M A G N E T I C S T R I P E U N I T (M S U) PTS 6XXX. * THE MSU MUST BE CONNECTED TO THE CPU VIA CHLT OR CHRT. * * TRACK 2 AND 3 ON STRIPES CAN BE READ AND TRACK 3 CAN BE * WRITTEN. * * EACH TRACK CONSISTS OF START CHARACTER, 1-104 DATA CHARACTERS, * END CHARACTER AND LRC CHARACTER. * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C M S : ACTIVATION PART * ORDER PROCESSOR * I H M S : INTERRUPT HANDLER * O N M S : RECOVERY ROUTINE * * EJECT DRMS01 * * THE FOLLOWING ORDERS ARE TREATED: * * 06 WRITE CARD * 0A READ CARD * 11 INSERT CARD * 26 END OF OPERATION * * THE FOLLOWING RETURN CODE IS USED: * * BIT 0 REQUEST ERROR * 7 NO DATA * 10 CARD MISSING * 12 INCORRECT LENGTH * 13 NEGATIVE ACKNOWLEDGEMENT * 14 THROUGHPUT ERROR * 15 NOT OPERABEL * * * NORMAL USE OF REGISTERS: * * REGISTER A1 RETURN CODE * A2 INPUT/OUTPUT CHARACTER * A3 BUFFER INDEX * A4 * A5 STACK BASE POINTER * A6 DWT ADDRESS * A7 ORDER * A8 ECB ADDRESS EJECT DRMSO1 * *********** * ENTRIES * *********** * ENTRY MSAD ADDRESS BLOCK * ************* * EXTERNALS * ************* * EXTRN SAVE8 SAVE REGISTER A1-A8 ON A15 STACK EXTRN STREG STORE REGISTERS AND GO TO DISPATCHER EXTRN LDREG LOAD REGISTER AND RETURN TO USER VIA A5 EXTRN OUTPUT SUBROUTINE TO SEND CHARACTER EXTRN DISIOE DISPATCH END I/O, REQUEST ERROR EXTRN GETCHR GET NEXT CHARACTER IN ECB-BUFFER EXTRN DISEND END I/O AND DISPATCH EXTRN TDISP DISPATCHER ENTRY EXTRN DWTST DWT SOFTWARE STATUS EXTRN DWTOR ORDER EXTRN DWTECB ECB-ADDRESS EJECT DRMS01 * ************************ * CONDITIONAL ASSEMBLY * ************************ * EJECT DRMS01 * ************* * CONSTANTS * ************* * CRWSTX EQU /3B CARD START CHARACTER CRWETX EQU /3F CARD END CHARACTER RTRIES EQU 2 NO OF RETRIES * ******************** * DWT-DISPLACEMENT * ******************** * DWTBC EQU /3 BYTE COUNTER DWTSB2 EQU /1E STACK BASE POINTER DWTA4 EQU /14 DWTLRC EQU /26 LRC-ACCUMULATOR * ******************** * ECB-DISPLACEMENT * ******************** * ECBBA EQU 2 BUFFER ADDRESS ECBRL EQU 4 REQUESTED LENGTH ECBEL EQU 6 EFFECTIVE LENGTH ECBRC EQU 8 RETURN CODE ECBCW EQU 10 CONTROL WORD EJECT DRMS01 * ********** * TABLES * ********** * MSAD EQU * DATA ACMS ACTIVATION DRIVER DATA IHMS INTERRUPT HANDLER DATA RCMS RECOVERY ROUTINE * * TAB EQU * ORDER TABLE DATA /060A,/1126 TABL EQU *-TAB * MSFUN EQU * MAGNETIC STRIPE FUNCTION DATA WRITE,READ,INSERT DATA ENDOP EJECT DRMS01 * * * A C M S * * ACTIVATION PART: CHECKS VALIDITY OF ORDERS * AND STARTS PROCESSING. * * ACMS EQU * LDK A4,TABL-1 ACMS10 CC A7,TAB,A4 FIND OUT IF LEGAL ORDER RF(E) ACMS20 VALID ORDER SUK A4,1 RB(NN) ACMS10 TRY NEXT * * MSERR ABL DISIOE DISPATCH END I/O,REQUEST ERROR * ACMS20 EQU * ADR A4,A4 GET INDEX ABI MSFUN,A4 BRANCH TO VALID FUNCTION MODULE EJECT DRMS01 * * INSERT CARD /11 * INSERT EQU * LDK A4,/0C CHAR DOC. INSERTED INSE02 EQU * LC A2,DWTBC,A6 GET BYTE COUNTER ANK A2,/FF RF(NE) INSE10 INSE05 EQU * LDK A2,/01 GENERAL RESET CF A5,OUTPUT SEND IT CF A5,STREG WAIT FOR MESSAGE FROM MSU INSE10 CWR A2,A4 DOCUMENT INSERTED/ESCAPED RB(NE) INSE05 NO SC A4,DWTST+1,A6 YES EJECT DRMS01 * * END OF INPUT/OUTPUT REQUEST * ENDIO EQU * ABL DISEND EJECT DRMS01 * * READ CARD /0A * READ EQU * LDK A4,RTRIES SET NO OF RETRIES LC A2,DWTBC,A6 GET BYTE COUNTER ANK A2,/FF SUK A2,/0C DOCUMENT INSERTED RF(NE) WRIT02 NO READ02 EQU * LDK A3,0 RESET BUFFER INDEX LD A2,ECBCW,A8 GET TRACK NUMBER SUK A2,2 RB(N) MSERR TRACK < 2 CWK A2,1 RB(G) MSERR TRACK > 3 ADK A2,/A COMPUTE TRACK TO SELECT CF A5,OUTPUT SEND READ TRACK COMMAND (/0A OR /0B) CM DWTLRC,A6 CLEAR LRC-ACKUMULATOR READ05 EQU * CF A5,STREG WAIT FOR DATA INPUTS LDR A7,A2 SUK A7,4 OPERATION INCORRECT RF(NE) READ07 NO SUK A4,1 COUNT NO OF RETRIES RB(NZ) READ02 TRY AGAIN READ06 LDK A1,4 NEGATIVE ACKNOWLEDGEMENT ENDIO1 RB ENDIO READ07 SUK A7,2 OPERATION CORRECT? RB(E) ENDIO YES SUK A7,2 RF(E) READ60 NO DATA LDR A3,A3 FIRST CHARACTER RF(N) READ40 NO; LRC-CHARACTER RF(NE) READ10 NO; DATA INPUT ADK A3,/80 CWK A2,CRWSTX START CHARACTER RF(E) READ25 YES LDK A1,2 THROUGHPUT ERROR RB ENDIO1 END I/O READ10 ANK A3,/7F MASK BUFFER INDEX CWK A2,CRWETX END CHARACTER RF(NE) READ20 NO ST A3,ECBEL,A8 YES; STORE EFFECITVE LENGTH NGR A3,A3 NEGATE REGISTER RF READ25 READ20 EQU * CF A15,STORE STORE CHAR IN ECB-BUFFER CW A3,ECBRL,A8 EFF.LENGTH = REQ.LENGTH RF(G) READ50 NO READ25 XRS A2,DWTLRC,A6 UPDATE LRC ACKUMULATOR CF A15,CDCHK CHECK IF CODE CHECK ERROR RB READ05 READ40 XR A2,DWTLRC,A6 CHECK LRC ANK A2,/F MASK LRC-SUM RB(E) READ05 LRC CORRECT RB READ06 READ50 LDK A1,8 INCORRECT LENGTH ST A3,ECBEL,A8 STORE EFFECTIVE LENGTH RB ENDIO1 READ60 LDKL A1,/100 NO DATA RB ENDIO1 EJECT DRMS01 * * WRITE CARD /06 * WRITE EQU * LDK A4,RTRIES SET NO OF RTRIES LC A2,DWTBC,A6 GET BYTE COUNTER ANK A2,/FF SUK A2,/0C DOCUMENT INSERTED RF(E) WRIT05 YES WRIT02 LDK A1,/20 CARD MISSING ENDIO2 RB ENDIO WRIT05 EQU * LDK A3,0 RESET BUFFER INDEX CM DWTLRC,A6 CLEAR LRC-ACKUMULATOR LDK A2,CRWSTX CARD START CHARACTER WRIT10 EQU * XRS A2,DWTLRC,A6 UPDATE LRC-ACKUMULATOR CF A5,OUTPUT SEND CHARACTER WRIT15 CF A15,GETCHR GET NEXT CHAR FROM ECB-BUFFER LDR A1,A1 LAST CHARACTER RF(E) WRIT20 YES CF A15,CDCHK VALID CODE? LDR A1,A1 RB(Z) WRIT10 YES RB WRIT15 WRIT20 EQU * LDK A2,CRWETX CARD END CHARACTER XRS A2,DWTLRC,A6 UPDATE LRC CF A5,OUTPUT SEND CHARACTER XR A2,DWTLRC,A6 LRC-CHARACTER ORK A2,/30 SET ZONE CF A5,OUTPUT SEND LRC-CHARACTER WRIT25 CF A5,STREG WAIT FOR STATUS MESSAGE * LDR A7,A2 SUK A7,4 OPERATION INCORRECT ? RF(NE) WRIT30 NO SUK A4,1 RB(NZ) WRIT05 TRY AGAIN WRIT27 LDK A1,4 NEGATIVE ACKNOWLEDGEMENT RB ENDIO2 WRIT30 SUK A7,2 OPERATION CORRECT ? RB(Z) ENDIO2 YES SUK A7,2 RB(E) WRIT27 NO DATA AT READ CHECK RB WRIT25 EJECT DRMS01 * * END OF OPERATION /26 * ENDOP EQU * LDK A2,/01 GENERAL RESET CF A5,OUTPUT SEND CHARACTER LDK A4,/0D DOCUMENT ESCAPED LC A2,DWTBC,A6 GET BYTE COUNTER ANK A2,/FF RF(NE) END10 END05 CF A5,STREG WAIT FOR MESSAGE FROM MSU END10 CWR A2,A4 DOCUMENT ESCAPED? RB(NE) END05 NO SC A4,DWTST+1,A6 CHAR TO BYTE COUNTER IN DWT ENDIO3 RB ENDIO2 EJECT DRMS01 * * I H M S * * INTERRUPT HANDLER * * IHMS EQU * ANK A2,/FF LD A3,DWTST,A6 GET STATUS WORD RF(NN) IHM100 BUSY LDR A3,A2 SAVE CHAR SUK A3,/0C DOCUMENT INSERTED RF(E) IHMS10 SUK A3,1 DOCUMENT ESCAPED RF(NE) EXIT IHMS10 EQU * SC A2,DWTST+1,A6 SET STATUS WORD EXIT ABL TDISP GO TO DISPATCHER * * DEVICE BUSY * IHM100 EQU * LDR A1,A1 RETURN CODE FROM CHLT/CHRT RB(NE) ENDIO3 YES; INDICATE NOT OPERABEL LDR A4,A4 OUTPUT ANSWER ? RF(Z) IHRET YES SUK A7,/11 INSERT CARD RF(E) IHRET YES SUK A7,/15 END OF OPERATION? RF(E) IHRET LDR A4,A2 SUK A4,/0D DOCUMENT ESCAPED ? RF(E) IHM140 YES IHRET ABL LDREG LOAD REG. AND RETURN CALLING SEQ VIA A5 * IHM140 LDK A4,/0D SC A4,DWTST+1,A6 UPDATE STATUS WORD LDK A1,/20 CARD MISSING ENDIO4 RB ENDIO3 EJECT DRMS01 * * * R C M S * * RECOVERY ROUTINE * * RCMS EQU * CF A15,SAVE8 SAVE A1-A8 ON A15 STACK LDK A2,/0D SC A2,DWTST+1,A6 RESET STATUS WORD LD A7,DWTST,A6 BUSY? RB(N) EXIT NO LDK A1,2 THROUGPUT ERROR RB ENDIO4 EJECT DRMS01 * * STORE = SUBROUTINE TO STORE CHARACTER * IN ECB-BUFFER AND INCREMENT BUFFER INDEX. * STORE EQU * LD A7,ECBBA,A8 BUFFER ADDRESS ADR A7,A3 ADD BUFFER INDEX SCR A2,A7 STORE CHAR ADK A3,1 INCR. INDEX RTN A15 * * * CDCHK = CHECK IF CODE CHECK ERROR * * AT ENTRY: A2=CHARACTER * AT EXIT: A1=RERURN CODE 0,4 CDCHK EQU * LDR A1,A2 SUK A1,/30 VALID CODE? RF(N) CDC05 NO SUK A1,/F NUMERIC VALUE? RF(P) CDC05 NO LDK A1,0 SET R.C. RF CDC10 CDC05 LDK A1,4 SET R.C. ORS A1,ECBRC,A8 INSERT IN ECB CDC10 RTN A15 END