|
|
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: 20598 (0x5076)
Notes: pts_type(SC)
Names: »TMOVE.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/TMOVE.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/TMOVE.SC«
IDENT TMOVE REL 11.0 81-05-21 870105041100 =4,CORR. OF UPDATE =3 (A14,A15) =3 =4,REL 11.0 81-05-15 =3 =3,CONDITION FOR MOVUU ADDED =3,REL 11.0 81-01-26 =2,SAVE MMU WHEN MOVUS,MOVSU =2,PRR 11.0 80-12-11 =1,MOVE LAST CHARACTER WHEN MOVUS =1,PRR 11.0 80-11-19 * * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * TMOVE = TOSS MOVE LKM PROCESSOR * * * * * * ************************************************** * * * THIS MODULE CONTAINS * THE MOVE LKM PROCESSOR * AND FOLLOWING SUBROUTINES: * * - MOVSS = MOVE FROM SYSTEM AREA TO SYSTEM AREA * - MOVUS = MOVE FROM USER AREA TO SYSTEM AREA * - MOVSU = MOVE FROM SYSTEM AREA TO USER AREA * - MOVUU = MOVE FROM USER AREA TO USER AREA * - MOVFW = MOVE FORWARD (ONLY SYSTEM AREA,A14 RETURN) * - MOVBW = MOVE BACKWARD (ONLY SYSTEM AREA,A14 RETURN) * EJECT TMOVE * * *********** * ENTRIES * *********** * * ENTRY TMOVE TOSS MOVE LKM PROCESSOR ENTRY MOVSS MOVE FROM SYSTEM TO SYSTEM ENTRY MOVSU MOVE FROM SYSTEM TO USER ENTRY MOVUS MOVE FROM USER TO SYSTEM ENTRY MOVUU MOVE FROM USER TO USER ENTRY MOVFW MOVE FORWARD * ENTRY MOVBW MOVE BACKWARD EJECT TMOVE * * ************* * EXTERNALS * ************* * * EXTRN LKMQDI QUEUE TASK AND DISPATCH EXTRN LKMRQE SET A7=-1, QUEUE TASK AND DISPATCH EXTRN FNDTID FIND TTAB ADDRESS FROM TASK ID EXTRN TTB:MT DISPLACEMENT TO MMU TABLE EJECT TMOVE * * ***************************************** * * CONDITIONAL ASSEMBLY * ***************************************** * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET FOR CPU 857 IS OBTAINED BY SETTING CPU857 EQU 1. * CPU857 EQU 0 * * * A PROGRAM VERSION CONTAINING SUBROUTINE MOVUU * WILL EXIST BY SETTING UUMOV=1 * X:A EQU 0 =3 UUMOV EQU X:A =3 CPUHLP EQU CPU857+CPU857 EJECT TMOVE * * ************************ * MOVBLK DISPLACEMENTS * ************************ * * DISPLACEMENTS IN MOVE PARAMETER BLOCK * MOVTIS EQU 0 TASK ID SENDING TASK MOVTIR EQU 2 TASK ID RECEIVING TASK MOVBAS EQU 4 BUFFER ADDRESS SENDING TASK MOVBAR EQU 6 BUFFER ADDRESS RECEIVING TASK MOVLEN EQU 8 NUMBER OF BYTES TO MOVE LENGTH EQU 128 INTERMEDIATE BUFFER LENGTH WORDS * EJECT TMOVE * * ********* * TMOVE * ********* * * * THIS IS THE MOVE LKM PROCESSOR. * * IT IS ENTERED FROM THE LKM HANDLER * WITH THE FOLLOWING PARAMETERS: * * A5 = TTAB ADDRESS * A7 = MOVBLK ADDRESS * TMOVE EQU * ENB * IFT MMUPAG=0 LD A1,MOVBAS,A7 SOURCE BUFFER ADDRESS LD A2,MOVBAR,A7 DESTINATION BUFFER ADDRESS LD A3,MOVLEN,A7 BUFFER LENGTH CF A15,MOVSS MOVE BUFFER XIF * IFT MMUPAG=1 LDR A12,A5 SAVE CALLING TTAB ADDRESS LDR A8,A7 SAVE MOVBLK ADDRESS EL A1,MOVBAS,A8 BUFFER ADDRESS SENDING TASK EL A10,MOVBAR,A8 BUFFER ADDRESS RECEIVING TASK EL A3,MOVLEN,A8 REQUESTED BUFFER LENGTH ELR A7,A8 TASK ID SENDING TASK CWK A7,'#M' RF(E) MOV100 MOVE FROM SYSTEM BUFFER CF A15,FNDTID GET TTAB ADDRESS LDR A5,A2 SAVE TTAB ADDRESS RF(Z) TTABNF TTAB NOT FOUND EL A7,MOVTIR,A8 IDENT RECEIVING TASK CWK A7,'#M' RF(E) MVUS10 MOVE TO SYSTEM BUFFER CF A15,FNDTID GET TTAB ADDRESS LDR A4,A2 SAVE TTAB ADDRESS RF(Z) TTABNF TTAB NOT FOUND * EJECT TMOVE * * MOVE FROM USER BUFFER TO USER BUFFER * LDR A2,A10 DESTINATION BUFFER ADDRESS CF A15,MOVUU MOVE FROM USER TO USER RF END * * TEST WHERE TO MOVE * MOV100 EQU * EL A7,MOVTIR,A8 TASK ID RECEIVING TASK CWK A7,'#M' RF(E) MVSS10 MOVE TO SYSTEM BUFFER CF A15,FNDTID GET TTAB ADDRESS LDR A4,A2 RF(Z) TTABNF TTAB NOT FOUND * EJECT TMOVE * * MOVE FROM SYSTEM BUFFER TO USER BUFFER * LDR A2,A10 DESTINATION BUFFER ADDRESS CF A15,MOVSU MOVE FROM SYSTEM TO USER RF END * * MOVE FROM USER BUFFER TO SYSTEM BUFFER * MVUS10 EQU * LDR A2,A10 DESTINATION BUFFER ADDRESS CF A15,MOVUS MOVE FROM USER TO SYSTEM RF END * * MOVE FROM SYSTEM BUFFER TO SYSTEM BUFFER * MVSS10 EQU * LDR A2,A10 DESTINATION BUFFER ADDRESS CF A15,MOVSS MOVE FROM SYSTEM TO SYSTEM * XIF * EJECT TMOVE * * END * END EQU * IFT MMUPAG=1 LDR A5,A12 TTAB CALLING TASK XIF * ABL LKMQDI QUEUE TASK AND DISPATCH * IFT MMUPAG=1 * * TTAB NOT FOUND * TTABNF EQU * LDR A5,A12 TTAB ADDRESS ABL LKMRQE SET A7=-1, QUEUE TASK AND DISPATCH XIF EJECT * * * ********* * MOVFW * ********* * * * SUBROUTINE TO MOVE CHARACTERS * FROM SYSTEM BUFFER TO SYSTEM BUFFER * * ENTRY: A1 = SYSTEM BUFFER ADDRESS,SOURCE * A2 = SYSTEM BUFFER ADDRESS,DESTINATION * A3 = BUFFER LENGTH * * EXIT: A1 = SYSTEM BUFFER ADDRESS,SOURCE+BUFFER LENGTH * A2 = SYSTEM BUFFER ADDRESS,DESTINATION+BUFFER LENGTH * A3 = 0 * MOVFW EQU * MOVBW EQU * ADK A3,0 RF(NP) RETA14 NOTHING TO MOVE,RETURN STR A4,A14 SAVE A4 ST A5,-2,A14 SAVE A5 ST A6,-4,A14 SAVE A6 LDKL A6,/8000 INDICATE A14 RETURN RF MSS005 MOVE BUFFER RTNA14 EQU * LD A6,-4,A14 SAVED REGISTER LD A5,-2,A14 SAVED REGISTER LDR* A4,A14 SAVED REGISTER LDK A3,0 RETA14 EQU * RTN A14 EJECT TMOVE * * ********* * MOVSS * ********* * * * SUBROUTINE TO MOVE CHARACTERS * FROM SYSTEM BUFFER TO SYSTEM BUFFER * * ENTRY: A1 = SYSTEM BUFFER ADDRESS,SOURCE * A2 = SYSTEM BUFFER ADDRESS,DESTINATION * A3 = BUFFER LENGTH * * EXIT: A1 = SYSTEM BUFFER ADDRESS,SOURCE+BUFFER LENGTH * A2 = SYSTEM BUFFER ADDRESS,DESTINATION+BUFFER LENGTH * A3 = 0 * IFT MMUPAG=0 MOVUS EQU * MOVSU EQU * MOVUU EQU * XIF * MOVSS EQU * ADK A3,0 CHECK LENGTH RF(NP) MOVRT2 NOTHING TO MOVE, RETURN STR A4,A15 SAVE A4 STR A5,A15 SAVE A5 STR A6,A15 SAVE A6 LDK A6,0 INDICATE A15 RETURN MSS005 EQU * LDK A4,1 MASK TM A4,A1 RF(Z) MSS100 SOURCE BUFFER ADDRESS EVEN TM A4,A2 RF(Z) MSS110 DESTINATION BUFFER ADDRESS EVEN EJECT * * BOTH SOURCE AND DESTINATION BUFFER ADDRESS ODD * LCR A5,A1 FIRST CHARACTER TO MOVE SCR A5,A2 SAVE CHARACTER ADK A1,1 UPDATE SOURCE BUFFER ADDRESS ADK A2,1 UPDATE DESTINATION BUFFER ADDRESS SUK A3,1 DECREMENT LENGTH RF(NP) MOVRT1 ALL MOVED,RETURN * * BOTH SOURCE AND DESTINATION BUFFER ADDRESS EVEN * MSS010 EQU * IFF CPUHLP+CPU852=2 SUK A3,2 SUBTRACT LENGTH RF(N) MSS020 TEST IF LAST CHARACTER IS MOVED LDR* A5,A1 GET WORD TO MOVE STR A5,A2 SAVE WORD ADK A1,2 UPDATE SOURCE BUFFER ADK A2,2 UPDATE DESTINATION BUFFER RB MSS010 CONTINUE MOVE * MSS020 EQU * ADK A3,2 RF(Z) MOVRT1 ALL MOVED,RETURN XIF * IFT CPU852=0 IFT CPU857=1 TM A4,A3 RF(Z) MSS020 REQUESTED LENGTH EVEN LDK A4,0 INDICATE LENGTH ODD * MSS020 EQU * MVB A3 MOVE BUFFER ADK A4,0 RF(NZ) MOVRT1 ALL MOVED,RETURN XIF * LCR A5,A1 LAST CHARACTER TO MOVE SCR A5,A2 STORE CHARACTER IN SYSTEM BUFFER ADK A1,1 UPDATE USER BUFFER ADDRESS ADK A2,1 UPDATE SYSTEM BUFFER ADDRESS RF MOVRT1 RETURN EJECT * * MSS100 EQU * TM A4,A2 RB(Z) MSS010 DESTINATION BUFFER ADDRESS EVEN * * SOURCE BUFFER EVEN , DESTINATION BUFFER ODD * OR * SOURCE BUFFER ODD , DESTINATION BUFFER EVEN * MSS110 EQU * LCR A4,A1 LOAD CHARACTER SCR A4,A2 STORE CHARACTER ADK A1,1 UPDATE SOURCE ADDRESS ADK A2,1 UPDATE DESTINATION ADDRESS SUK A3,1 DECREMENT LENGTH RB(P) MSS110 MORE TO MOVE RF MOVRT1 RETURN * IFT MMUPAG=1 EJECT TMOVE * * ********* * MOVUS * ********* * * * SUBROUTINE TO MOVE CHARACTERS * FROM USER BUFFER TO SYSTEM BUFFER * * ENTRY: A1 = USER BUFFER ADDRESS * A2 = SYSTEM BUFFER ADDRESS * A3 = BUFFER LENGTH * A5 = TTAB ADDRESS USER TASK * * EXIT : A1 = USER BUFFER ADDRESS+BUFFER LENGTH * A2 = SYSTEM BUFFER ADDRESS+BUFFER LENGTH * A3 = 0 * MOVUS EQU * ADK A3,0 CHECK LENGTH RF(NP) MOVRT2 NOTHING TO MOVE, RETURN STR A4,A15 SAVE A4 STR A5,A15 SAVE A5 SUKL A15,32 =2 TS 2,A15 SAVE MMU =2 TL TTB:MT,A5 LOAD USER MMU LDK A4,1 MASK TM A4,A1 RF(Z) MUS110 USER BUFFER EVEN TM A4,A2 RF(Z) MUS100 SYSTEM BUFFER EVEN * EJECT TMOVE * * USER BUFFER ODD,SYSTEM BUFFER ODD * ELR A5,A1 FIRST CHARACTER FROM USER BUFFER MUS005 EQU * =1 SCR A5,A2 ADK A1,1 USER BUFFER EVEN ADK A2,1 SYSTEM BUFFER EVEN SUK A3,1 DECREMENT LENGTH RF(NP) MOVRT3 ALL MOVED, RETURN * * USER BUFFER EVEN,SYSTEM BUFFER EVEN * MUS010 EQU * TM A4,A3 RF(Z) MUS020 REQUESTED LENGTH EVEN LDK A4,0 INDICATE LENGTH ODD * MUS020 EQU * MVUS A3 MOVE BUFFER ADK A4,0 CHECK LENGTH RF(NZ) MOVRT3 ALL MOVED, RETURN ELR A5,A1 LAST CHARACTER ECR A5,A5 RB MUS005 =1 * XIF * EJECT TMOVE * * ********** * MOVRTN * ********** * * COMMON RETURN LABELS FOR MOVE ROUTINES * MOVRT1 EQU * ADK A6,0 RB(N) RTNA14 A14 RETURN LDR* A6,A15 SAVED REGISTER IFT MMUPAG=1 RF MOVRTN =2 MOVRT3 EQU * TL 2,A15 SAVED MMU =2 ADKL A15,32 =2 XIF MOVRTN EQU * LDR* A5,A15 RELOAD A5 LDR* A4,A15 RELOAD A4 LDK A3,0 ALL MOVED * MOVRT2 EQU * RTN A15 * IFT MMUPAG=1 EJECT TMOVE * * USER BUFFER ODD,SYSTEM BUFFER EVEN * MUS100 EQU * ELR A4,A1 FIRST CHARACTER FROM USER BUFFER RF MUS125 * MUS110 EQU * TM A4,A2 RB(Z) MUS010 SYSTEM BUFFER EVEN * * USER BUFFER EVEN,SYSTEM BUFFER ODD * MUS120 EQU * ELR A4,A1 GET TO CHARACTERS ECR A5,A4 SCR A5,A2 STORE CHARACTER IN SYSTEM BUFFER ADK A1,1 UPDATE USER BUFFER ADDRESS ADK A2,1 UPDATE SYSTEM BUFFER ADDRESS SUK A3,1 DECREMENT LENGTH RB(NP) MOVRT3 ALL MOVED, RETURN * MUS125 EQU * ADK A1,1 UPDATE USER BUFFER ADDRESS SCR A4,A2 STORE CHARACTER IN SYSTEM BUFFER ADK A2,1 UPDATE SYSTEM BUFFER ADDRESS SUK A3,1 DECREMENT LENGTH RB(P) MUS120 MORE TO MOVE RB MOVRT3 ALL MOVED, RETURN * EJECT TMOVE * * ********* * MOVSU * ********* * * * SUBROUTINE TO MOVE CHARACTERS * FROM SYSTEM BUFFER TO USER BUFFER * * ENTRY: A1 = SYSTEM BUFFER ADDRESS * A2 = USER BUFFER ADDRESS * A3 = BUFFER LENGTH * A4 = TTAB ADDRESS USER TASK * * EXIT : A1 = SYSTEM BUFFER ADDRESS+LENGTH * A2 = USER BUFFER ADDRESS+LENGTH * A3 = 0 * MOVSU EQU * ADK A3,0 CHECK LENGTH RB(NP) MOVRT2 NOTHING TO MOVE, RETURN STR A4,A15 SAVE A4 STR A5,A15 SAVE A5 SUKL A15,32 =2 TS 2,A15 SAVE MMU =2 TL TTB:MT,A4 LOAD USER MMU LDK A4,1 MASK TM A4,A2 RF(Z) MSU110 USER BUFFER EVEN TM A4,A1 RF(Z) MSU100 SYSTEM BUFFER EVEN * EJECT TMOVE * * SYSTEM BUFFER ODD,USER BUFFER ODD * ELR A5,A2 USER BUFFER FIRST CHARACTER LCR A5,A1 GET FIRST CHARACTER ESR A5,A2 STORE FIRST CHARACTER IN USER BUFFER ADK A1,1 SYSTEM BUFFER EVEN ADK A2,1 USER BUFFER EVEN SUK A3,1 DECREMENT LENGTH RB(NP) MOVRT3 NOTHING TO MOVE, RETURN * EJECT TMOVE * * SYSTEM BUFFER EVEN,USER BUFFER EVEN * MSU010 EQU * TM A4,A3 RF(Z) MSU020 REQUESTED LENGTH EVEN SUK A3,1 LENGTH EVEN LDK A4,0 INDICATE LENGTH ODD * MSU020 EQU * LDR A5,A3 SAVE LENGTH MVSU A3 MOVE BUFFER ADR A1,A5 UPDATE SYSTEM BUFFER ADDRESS ADR A2,A5 UPDATE USER BUFFER ADDRESS ADK A4,0 CHECK LENGTH RB(NZ) MOVRT3 ALL MOVED, RETURN LDR* A5,A1 GET LAST CHARACTER ADK A1,1 UPDATE SYSTEM BUFFER ADDRESS * MSU030 EQU * ELR A4,A2 GET LAST WORD IN USER BUFFER ANK A4,/FF ANKL A5,/FF00 LAST CHARACTER ORR A5,A4 LAST WORD IN USER BUFFER ESR A5,A2 ADK A2,1 UPDATE USER BUFFER ADDRESS RB MOVRT3 RETURN * EJECT TMOVE * * SYSTEM BUFFER EVEN,USER BUFFER ODD * MSU100 EQU * SUK A2,1 USER BUFFER EVEN ELR A5,A2 FIRST CHARACTER IN USER BUFFER RF MSU130 MOVE FIRST CHARACTER * MSU110 EQU * TM A4,A1 RB(Z) MSU010 SYSTEM BUFFER EVEN * * SYSTEM BUFFER ODD,USER BUFFER EVEN * MSU120 EQU * LCR A5,A1 GET FIRST CHARACTER ECR A5,A5 CHARACTER TO THE LEFT ADK A1,1 UPDATE SYSTEM BUFFER ADDRESS SUK A3,1 DECREMENT LENGTH RB(NP) MSU030 MOVE LAST CHARACTER * MSU130 EQU * LCR A5,A1 GET CHARACTER FROM SYSTEM BUFFER ESR A5,A2 STORE TWO CHARACTERS ADK A1,1 UPDATE SYSTEM BUFFER ADDRESS ADK A2,2 UPDATE USER BUFFER ADDRESS SUK A3,1 DECREMENT LENGTH RB(P) MSU120 MORE TO MOVE RB MOVRT3 ALL MOVED, RETURN * XIF =3 IFT MMUPAG=1 =3 IFT UUMOV=0 =3 MOVUU EQU * =3 RTN A15 =3 =4 XIF =3 IFT MMUPAG+UUMOV=2 =3 EJECT TMOVE * * ********* * MOVUU * ********* * * * SUBROUTINE TO MOVE CHARACTERS * FROM USER BUFFER TO USER BUFFER * * ENTRY: A1 = SOURCE BUFFER ADDRESS * A2 = DESTINATION BUFFER ADDRESS * A3 = LENGTH * A4 = TTAB ADDRESS RECEIVING TASK * A5 = TTAB ADDRESS SENDING TASK * * EXIT: A1,A2,A3,A8,A9,A10,A11 ARE DESTROYED * MOVUU EQU * LDR A11,A3 SAVE LENGTH RF(NP) MUU120 NOTHING TO MOVE, RETURN LDR A9,A1 SAVE SOURCE ADDRESS LDR A10,A2 SAVE DESTINATION ADDRESS * EJECT TMOVE * * MUU100 EQU * LDKL A3,INTLEN INTERMEDIATE BUFFER LENGTH RF(NP) MUU120 INTERMEDIATE BUFFER TOO SMALL CWR A11,A3 RF(G) MUU110 MORE THAN ONE MOVE NEEDED LDR A3,A11 REMAINING BUFFER LENGTH * MUU110 EQU * LDR A8,A3 SAVE PART LENGTH LDR A1,A9 SOURCE BUFFER ADDRESS LDKL A2,INTBUF INTERMEDIATE BUFFER ADDRESS CF A15,MOVUS MOVE FROM USER TO SYSTEM LDR A9,A1 SAVE NEW SOURCE ADDRESS LDKL A1,INTBUF INTERMEDIATE BUFFER ADDRESS LDR A2,A10 DESTINATION ADDRESS LDR A3,A8 LENGTH CF A15,MOVSU MOVE FROM SYSTEM TO USER LDR A10,A2 SAVE NEW DESTINATION ADDRESS SUR A11,A8 DECREMENT LENGTH RB(P) MUU100 MORE TO MOVE * MUU120 EQU * RTN A15 * EJECT TMOVE * * INTERMEDIATE BUFFER * INTBUF EQU * RES LENGTH INTLEN EQU *-INTBUF * * * XIF * * * END