|
|
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: 19802 (0x4d5a)
Notes: pts_type(SC)
Names: »RECASM.SC«
└─⟦cd4bbebb4⟧ Bits:30009680 Philips computer tape "600221"
└─⟦this⟧ »ATM/RECASM.SC«
└─⟦this⟧ »ATM6601/RECASM.SC«
└─⟦this⟧ »BEBATM/RECASM.SC«
IDENT RECASM TABS REL. 1.0. 80/12/08 B.T ENTRY RECASM ENTRY TO THE ROUTINE ENTRY RECBUF SET UP A CHAIN OF BUFFER ENTRY RECITO COPY DATA OR QUEUE ENTRY RECOPY ENTRY TO COPY DATA ENTRY RECTCK EXTRN I:RT1 RETURN TO THE CREDIT EXTRN T:FDSP GET ECB IN REG A8 EXTRN I:EVA0 GET DATA POINTER * * * * * EQUATES * * MODNOP EQU X'0001' MODEM NOT OPERABLE NORESP EQU X'0002' NO RESPONSE,NOT IN POLL LIST INVATC EQU X'0004' INVALID TC PLOVER EQU X'0008' POL LIST OVERFLOW LIOPEN EQU X'0010' LINE OPEN LICLOS EQU X'0010' LINE CLOSE INACTC EQU X'0020' TC NOT ACTIVE NOTCPL EQU X'0040' NO TC IN POL LIST * * * * EJECT *********************************************************************** * THIS SUBROUTINE ALLOWS THE FOLLOWING FACILITIES ON A * * REMOTE LINE: * * ORDER CODE /22: OPEN LINE * * /24: CLOSE LINE * * /26: HALT POLLING * * /27: START POLLING * * /00: TEST LINE * * /37: OPEN TERMINAL COMPUTER * * /38: CLOSE TERMINAL COMPUTER * * ENTRY TO THE SUBROUTINE FROM CREDIT APPLICATION PROGRAM * * IS AS FOLLOWS * * CALL RECASM,DSET,CONTRL VALUE,BINARY VALUE,INDEX * * RECASM: NAME OF THE SUBROUTINE * * DSET: DATASET NAME * * CVAL: X'24' : CLOSE LINE * * X'26' : HALT POLLING * * X'00' : TEST LINE * * X'B7' : OPEN TERMINAL COMPUTER * * X'B8' : CLOSE TERMINAL COMPUTER * * X'27' * START POLLING * * BINARY ITEM MUST CONTAIN ONE OF THE FOLLOWING VALUES FOR * * VARIOUS ORDER CODES * * INDEX: IS BINARY VALUE,UPON THE EXIT OF THE SUBROUTINE ONE * * OF THE FOLLOWING VALUES IS SET BY THE SUBROUTINE * * 1= COMPLETION OK ALL ORDER CODES * * 2= MODEM INOPERABLE ALL ORDER CODES * * OR LINE CLOSED START POLL, OPEN/CLOSE TC * * OR POLL LIST OVERFLOW OPEN TC * * 3= LINE OPEN OPEN LINE * * LINE CLOSED CLOSE LINE,HALT POLLING * * TC INACTIVE OPEN TC * * NOT IN POLL LIST CLOSE TC * * 0= OTHER ERROR TEST LINE,START POLL,OPEN TC * *********************************************************************** EJECT * * * * * EVENT CONTROL BLOCKS EQUATES * * * * * ECBBA EQU 2 ECB BUFFER ADDRESS ECBRL EQU 4 ECB REQUESTED LENGTH ECBBL EQU 6 ECB EFFECTIVE LENGTH ECBRC EQU 8 ECB CONTROL WORD ECBCW EQU 10 ECB RETURN CODE * * * * * * * * ORDER CODE EQUATES * * ORTEST EQU /00 TEST LINE OROPEN EQU /22 OPEN LINE ORCLOS EQU /24 CLOSE LINE ORHALT EQU /26 HALT POLLING ORSTRT EQU /27 START POLLING OROPTC EQU /37 OPEN TC ORCLTC EQU /38 CLOSE TC * * * EJECT * RECASM EQU * ENTRY TO THE MODULE CF A14,T:FDSP GET DATA SET (ECB IN A8) CF A14,I:EVA0 GET ORDER CODE ADDRESS LDR* A7,A9 LOAD ORDER CODE IN A7 CF A14,I:EVA0 GET CONTROL VALUE ADDRESS LDR* A9,A9 LOAD CONTROL VALUE ST A9,ECBCW,A8 STORE CONTROL VALUE IN ECB LKM DATA 1 LINK TO THE MONITOR LD A2,ECBRC,A8 LOAD RETURN CODE RF(Z) REC105 REQUEST O.K. ANK A7,/7F TEST LINE RF(Z) RECW30 TESTLINE SUK A7,OROPEN RF(Z) RECW00 OPEN LINE SUK A7,ORCLOS-OROPEN RF(Z) RECW10 CLOSE LINE SUK A7,ORHALT-ORCLOS RF(Z) RECW20 HALT POLLING SUK A7,ORSTRT-ORHALT RF(Z) RETCOP START POLLING RF RETCCL REC100 EQU * CF A14,I:EVA0 GET INDEX POINTER LD A2,ECBCW,A8 LOAD INDEX ADK A2,1 STR A2,A9 ABL I:RT1 RETURN TO THE CREDIT INTERPRETER REC105 EQU * ST A2,ECBCW,A8 STORE IN CONTROL RB REC100 EJECT * * * RECW00 EQU * CONTROL WORD =0, OPEN LINE LDK A3,1 SET INDEX TO 1 SUK A2,MODNOP RF(Z) RECW05 MODEM NOT OPERABLE ADK A3,1 ADD 1 TO INDEX SUK A2,LIOPEN-MODNOP RF(Z) RECW05 LINE ALREADY OPEN LDKL A3,-1 SET INDEX TO NEGATIVE RECW05 EQU * ST A3,ECBCW,A8 RB REC100 * * * EJECT * * * RECW20 EQU * HALT POLLING RECW10 EQU * CLOSE LINE ERROR ROUTINE LDK A3,1 SET INDEX TO 1 SUK A2,MODNOP RB(Z) RECW05 MODEM NOPERABLE ADK A3,1 SUK A2,LICLOS-MODNOP RB(Z) RECW05 LINE ALREADY CLOSED LDKL A3,-1 SET NEGATIVE INDEX RB RECW05 * * * RECW30 EQU * TEST LINE RB RECW00 * * * EJECT RETCCL EQU * CLOSE LINE RETCOP EQU * OPEN LINE LD A2,ECBRC,A8 GET RETURN CODE LDK A3,1 SET INDEX TO 1 SUK A2,MODNOP MODEM NOT OPERABLE RF(Z) RETC10 SUK A2,PLOVER-MODNOP RF(Z) RETC10 POLL LIST OVERFLOW SUK A2,LICLOS-PLOVER RF(Z) RETC10 LINE CLOSE ADK A3,1 SUK A2,INACTC-LICLOS RF(Z) RETC10 SUK A2,NOTCPL-INACTC NOT IN POLL LIST RF(Z) RETC10 LDKL A3,-1 SET INDEX TO NEGATIVE RETC10 EQU * ST A3,ECBCW,A8 ABL REC100 EJECT ************************************************************************* * * * THIS ROUTINE SETS UP A CHAIN OF 6 BUFFERS. * * * * ENTRY :- * * CALL RECBUFF,BUF1,BUF2,BUF3,BUF4,BUF5,BUF6 * * * ************************************************************************* * * RECBUF EQU * ENTRY TO THE ROUTINE CF A14,I:EVA0 GET FIRST BUF POINTER CM 2,A9 CLEAR TASK ID CF A14,STBUF STORE BUFFER POINTER CF A14,I:EVA0 GET SECOND BUFFER POINTER CM 2,A9 CLEAR TASK ID CF A14,STBUF STORE BUFFER POINTER ABL I:RT1 RETURN TO THE CREDIT PROGFAM * * * END OF ROTINE * * EJECT * * A ROUTINE TO STORE BUFFER * * ENTRY :- * REGISTER A9 MUST CONTAIN THE BUFFER POINTER * * * STBUF EQU * LDKL A2,BUFADR LOAD BUFFER ANCHOR STBUF0 EQU * LDR* A3,A2 RF(Z) STBUF1 END OF CHAIN LDR A2,A3 RB STBUF0 TRY AGAIN STBUF1 EQU * END OF CHAIN STR A9,A2 STORE BUFFER POINTER CMR A9 RTN A14 EXIT FROM THE ROUTINE * * * END OF THE ROUTINE * * * EJECT ************************************************************************ * * * GET BUFFER FROM THE POOL AND CHECK TASK ID * * * * ENTRY :- * * CF A14,RECGET * * * * EXIT :- * * * * A9 CONTAINS THE BUFFER ADDRESS OR ZER0 * * * ************************************************************************ * * RECGET EQU * ENTRY TO THE ROUTINE LDKL A4,BUFADR GET BUFFER ANCHOR RECG10 EQU * LDR* A9,A4 LD A3,2,A9 LOAD TASK ID LD* A2,BUF400 LOAD CURRENT TASK ID CWR A2,A3 CHECK FOR SAME TASK RF(E) REC640 YES SAME TASK SRL A3,8 ANK A3,/7F ANK A2,/7F CWR A2,A3 RF(E) RECG20 SAME ID LDR A4,A9 RF(Z) RECG30 RB RECG10 RECG20 EQU * LDR* A3,A9 REMOVE FROM QUEUE STR A3,A4 CMR A9 RECG30 EQU * RTN A14 RETURN TO THE CALLER REC640 EQU * SAME TASK LDKL A2,/4B31 LOAD 'K1'TASK ID ST A2,2,A9 STORE IN TASK ID RB RECG20 SEND IT * * * END OF THE ROUTINE * * * BUFADR DATA 0 BUFFER ANCHOR POINTER BUF100 DATA 0 SOURCE BUFFER ADDRESS BUF200 DATA 0 TARGET BUFFER ADDRESS BUF300 DATA 0 FLAG/INDEX ADDRESS BUF400 DATA 0 TASK ID ADDRESS * * * EJECT ************************************************************************ * * * COPY DATA FROM SOURCE BUFFER TO TARGET BUFFER * * * * ENTRY :- * * * * CF 14,COPY * * REGISTER A9 = SOURCE BUFFER POINTER * * REGISTER A4 ~ TARGET BUFFER POINTER * * * * EXIT :- * * * * DATA FROM SOURCE BUFFER ADDRESS WILL BE COPIED * * TO TARGET BUFFER ADDRESS * * * ************************************************************************ * * * COPY EQU * ENTRY TO THE ROUTINE ADKL A9,2 LDR A3,A9 SAVE BUFFER ADDRESS LD A2,2,A9 GET LENGTH COPY10 EQU * LDR A2,A2 RF(NP) COPY20 END OF COPY LDR* A1,A3 STR A1,A4 STORE DATA ADK A3,2 UPDATE BUFFER POINTER ADK A4,2 SUK A2,2 DECREMENT COUNTER RB COPY10 COPY20 EQU * CMR A9 CLEAR TASK ID SUKL A9,2 RESET BUFFER POINTER RTN A14 EXIT FROM THE ROUTINE * * * END OF COPY ROUTINE * * EJECT *********************************************************************** * * * G E T A N Y B U F F E R A D R R E S S * * * * ENTRY :- * * CF A14 GETANY * * * * EXIT :- * * * * A9 = BUFFER ADDRESS IF AVAILABLE OR ZERO * * * *********************************************************************** * * * GETANY EQU * ENTRY TO THE ROUTINE LDKL A4,BUFADR GET BUFFER ANCHOR GETA10 EQU * LDR* A9,A4 RF(Z) GETA40 NO BUFFER AVAILABLE LD A2,2,A9 GET TASK ID RF(Z) GETA20 BUFFER AVAILABLE LDR A4,A9 RB GETA10 TRY AGAIN GETA20 EQU * LDR* A3,A9 REMOVE FROM THE QUEUE STR A3,A4 CMR A9 GETA40 EQU * RTN A14 * * * END OF GET FREE BUFFER * * * EJECT * * * RECITO EQU * ENTRY TO THE ROUTINE CF A14,I:EVA0 GET SOURCE BUFFER ADDRESS ST A9,BUF100 CF A14,I:EVA0 GET TARGET BUFFER ADDRESS ST A9,BUF200 CF A14,I:EVA0 GET BINARY FLAG/INDEX BUFFER ADDRESS ST A9,BUF300 CF A14,I:EVA0 GET TASK ID ADDRESS ST A9,BUF400 LD* A4,BUF400 LOAD TASK ID LD A9,BUF100 LD* A3,BUF100 LOAD TASK ID CWR A3,A4 CHECK IF EQUAL RF(NE) RECI05 NOT EQUAL LDKL A3,/4B31 'K1' TASK ID ST* A3,BUF100 RECI05 EQU * CF A14,RECGET GET MESSAGE BUFFER IF IN QUEUE LDR A1,A9 RF(Z) RECT20 NOTHING IN THE QUEUE LD A4,BUF200 LOAD TARGET BUFFER ADDRESS CF A14,COPY COPY DATA CF A14,STBUF RELEASE BUFFER CF A14,GETANY GET SPARE BUFFER LDR A9,A9 RF(Z) RECT15 NO BUFFER AVAILABLE LDR A4,A9 ADKL A4,2 SET TARGET BUFFER ADDRESS LDR A7,A9 SAVE BUFFER ADDRESS LD A9,BUF100 LOAD TARGET BUFFER SUKL A9,2 SET SOURCE BUFFER ADDRESS CF A14,COPY LDR A9,A7 RESTORE BUFFER ADDRESS CF A14,STBUF RELEASE BUFFER LDK A1,1 RF RECT25 RECT15 EQU * LDK A1,2 RF RECT25 RECT20 EQU * LD A9,BUF100 LDR* A4,A9 LOAD TASK ID SRL A4,8 ANK A4,/7F CCK A4,/52 RF(NE) RECT21 LDKL A4,/4B31 'K1'TASK ST* A4,BUF100 STORE TASK ID RECT21 EQU * SUKL A9,2 SET BUFFER-2 LD A4,BUF200 LOAD TARGET BUFFER CF A14,COPY LDK A1,0 RECT25 EQU * ADK A1,1 ST* A1,BUF300 ST*ORE INDEX ABL I:RT1 RETURN TO CREDIT PROGRAM * * * EJECT * * * RECTCK EQU * ENTRY TO THE ROUTINE CF A14,I:EVA0 GET TARGET ADDRESS ST A9,BUF200 CF A14,I:EVA0 GET BINARY INDEX ST A9,BUF300 CF A14,I:EVA0 GET TASK ID ST A9,BUF400 CF A14,RECGET GET MESSAGE LDK A1,2 LDR A9,A9 RB(Z) RECT25 NOTHING IN THE QUEUE LD A4,BUF200 LOAD TARGET BUFFER CF A14,COPY CF A14,STBUF RELEASE BUFFER LDK A1,0 RB RECT25 CREDIT PROGRAM * * * END OF CHECK ROUTINE * 0 = DATA COPIED FROM QUED BUFFER * 1 = DATA COPIED FROM QUED BUFFER AND MORE * 2 = NO DATA IN QUEUE * * EJECT ************************************************************************* * * * FUNCTION :- * * TO COPY DATA FROM SOURCE BUFFER TO ONE OF THE * * COMMON BUFFERS. * * * * ENTRY :- * * CALL RECOPY,BUFFER,BINARYINDEX * * RECOPY = NAME OF THE ROUTINE * * BUFFER = DATA BUFFER * * BIN.INDEX= BINARY ITEM * * * * EXIT :- * * BINARY INDEX IS SET TO 1 IF DATA IS COPIED, * * OTHERWISE IT WILL BE SET TO 2. * * * ************************************************************************* * * RECOPY EQU * ENTRY TO THE ROUTINE CF A14,I:EVA0 GET SOURCE BUFFER ADDRESS ST A9,BUF100 CF A14,I:EVA0 GET BINARY INDEX ST A9,BUF300 CF A14,GETANY GET BUFFER LDK A1,1 SET INDEX TO 1 LDR A4,A9 CHECK FOR BUFFER AVAILABILITY RB(Z) RECT25 LDR A7,A4 SAVE BUFFER POINTER ADK A4,2 LD A9,BUF100 LOAD SOURCE BUFFER SUKL A9,2 CF A14,COPY COPY DATA LDR A9,A7 RESET TARGET BUFFER CF A14,STBUF RELEASE BUFFER LDK A1,0 RB RECT25 RETURN TO THE CALLING PROGRAM * * * END OF THE ROUTINE * * * END