.TITLE MOVE ; ; MODULE NAME MOVE ; ; AUTHOR T.KEMPSELL ; ; DATE 15-SEP-76 ; ; MODULE FUNCTION ; ; THIS MODULE HAS TWO ENTRY POINTS ; ; 1. TO COPY FROM USER AREA TO LOCAL AREA (COPY) ; 2. TO COPY FROM LOCAL AREA TO USER AREA (RESTORE) ; ; CALLING SEQUENCE ; ; THE CALLING PARAMETERS ARE THE SAME FOR BOTH ENTRY POINTS ; ; CALL XXXXX(TI,TNAM,UBUF,USIZ,LBUF,ERR) ; TI= TI INDICATOR (PUD ADDRESS) ; TNAM= TASK NAME RAD50 TWO WORDS ; UBUF= VARIABLE CONTAINING USER BUFFER ADDRESS ; USIZ= USER BUFFER SIZE IN WORDS ; ERR= ERROR INDICATOR ; +VE OK ; -3 INPUT /OUTPUT ERROR ; -2 NAME NOT FOUND IN STD ; -1 STD/TI NOT FOUND IN ATL ; .PAGE ; ; TABLES AND LISTS ; ; DUMMY I/O REQUEST NODE ; FOR ..BLXO AND ..BLXI ; DNODE: .WORD 0 ;FL .WORD 0 ;BL .WORD 0 ;NA ATL: .WORD 0 ;ATL ADDRESS ; ; OPERATION FLAG ; OPFL: .WORD 0 ;0 COPY,1 RESTORE ; ; RETURN STATUS ; ERWD: .WORD 0 ;RETURN STATUS ; .PAGE ; ; ENTRY POINTS ; COPY:: CLR OPFL ;SET OPERATION FLAG TO COPY BR STRT RESTOR::MOV #1,OPFL ;SET OPERATION FLAG TO RESTORE ; STRT: MOV #1,ERWD ;SET RETURN STATUS OK (+1) ; ; SAVE ALL REGISTERS ; MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) ; ; CALL ROUTINE TO SEARCH STD ; FOR THIS TASK NAME ; FIRST SET UP TASK NAME PARAMETER ; IN R2 ; MOV 4(R5),R2 ;ADDRESS OF TASK NAME TO R2 JSR PC,SSTD ;SEARCH STD MOV (SP),R5 ;RESTORE LIST POINTER TST R0 ;TEST IF FOUND BEQ 50$ ;BRANCH IF NAME NOT FOUND ; ; OK NOW FIND ENTRY IN ATL ; CONTAINING THIS STD ADDRES AND THIS TI ; MOV @2(R5),R1 ;TI INDICATOR TO R1 MOV R0,R2 ;STD ADDRESS TO R2 JSR PC,SATL ;SERACH ATL TST R3 ;TEST IF FOUND BEQ 51$ ;BRANCH IF ATL ENTRY NOT FOUND ; ; OK NOW WE HAVE THE ATL ADDRESS IN R3 ; SET UP DUMMY I/O REQUEST NODE ; SO WE CAN USE ..BLXO ..BLXI ; MOV R3,ATL ;SET ATL IN DUMMY NODE ; ; SET UP CALLING PARAMETERS FOR ..BLXO OR ..BLXI ; MOV #DNODE,R1 ;REQUEST NODE ADDRESS TO R1 MOV @6(R5),R2 ;USER START ADDRESS TO R2 MOV @8.(R5),R3 ;SIZE IN WORS TO R3 ASL R3 ;NOW IN BYTES MOV 10.(R5),R4 ;LOCAL BUFFER ADDRESS TO R4 ; ; TEST OPERATION FLAG ; AND DO INPUT OR OUTPUT ; TST OPFL BNE 30$ ;FLAG1 DO OUTPUT JSR PC,..BLXI ;DO INPUT TO LOCAL BR 40$ ; ; 30$: JSR PC,..BLXO ;DO OUTPUT TO USER 40$: BCC 52$ ;BRANCH IF OK ; ; SET UP RETURN STATUS ; DEC ERWD ;INPUT/OUTPUT ERROR -3 50$: DEC ERWD ;NAME NOT FOUND IN STD -2 51$: DEC ERWD ;STD/TI NOT FOUND IN ATL -1 DEC ERWD 52$: MOV ERWD,@12.(R5) ;MOVE STATUS TO PARAMETER ; ; RESTORE REGISTERS ; MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC .PAGE .TITLE SSTD ; ; MODULE NAME SSTD ; ; AUTHOR T.KEMPSELL ; ; DATE 15-SEP-76 ; ; MODULE FUNCTION ; ; SEARCH THE STD DECK FOR A ; SPECIFIED TASK NAME ; ; CALLING SEQUENCE ; ; CALL SSTD ; R2 POINTS TO TASK NAME IN RAD50 2 WORDS ; ; EXIT CONDITIONS ; R0 STD ENTRY ADDRESS ,0 NAME NOT FOUND IN STD ; .PAGE SSTD:: CLR R4 ;INITIALISE LOWER TRIAL INDEX LIMIT MOV .STDTZ,R5 ;INITIALIZE UPPER TRIAL INDEX LIMIT ; 10$: CMP R4,R5 ;HAVE UPPER AND LOWER LIMITS CROSSED BGT 50$ ;YES END OF SEARCH NAME NOT FOUND ; ; START SCAN FROM MIDDLE OF STD ; MOV R4,R3 ADD R5,R3 ASR R3 BIC #1,R3 ADD .STDTA,R3 ;SET UP TO POINT TO STD TABLE MOV @R3,R0 ;SET TRIAL STD ENTRY ADDRESS IN R0 SUB .STDTA,R3 ;SUBTRACT TABLE ADDRESS FROM R3 ; CMP S.TN+0(R0),(R2) ;COMPARE FIRST HALF OF TASK NAME BHI 30$ ;TRIAL VALUE HIGH LOWER UPPER LIMIT BLO 40$ ;TRIAL VALUE LOW RAISE LOWER LIMIT CMP S.TN+2(R0),2(R2);MATCH COMPAR SECOND HALF BHI 30$ ;TRIAL VALUE HIGH LOWER UPPER LIMIT BLO 40$ ;TRIAL VALUE LOW RAISE LOWER LIMIT ; ; MATCH TASK NAME FOUND ; RTS PC ;RETURN WITH STD ADDRESS IN R0 ; ; TASK NAME NOT FOUND IN STD ; 50$: CLR R0 ;SET R0 TO 0 RTS PC ;RETURN ; 30$: MOV R3,R5 ;LOWER UPPER LIMIT TO ENTRY (BELOW) SUB #2,R5 BR 10$ ;TO NEXT TRIAL ; 40$: MOV R3,R4 ;RAISE LOWER LIMIT TO ENTRY (ABOVE) ADD #2,R4 BR 10$ ;TO NEXT TRIAL .PAGE .TITLE SATL ; ; MODULE NAME SATL ; ; AUTHOR T.KEMPSELL ; ; DATE 16-SEP-76 ; ; MODULE FUNCTION ; ; SEARCH THE ATL DECK FOR A MATCH ; ON STD ADDRESS AND TI ; ; CALLING SEQUENCE ; ; R1 IS THE TI INDICATOR ; R2 IS THE STD ADDRESS ; ; EXIT CONDITIONS ; ; R3 ATL ADDRESS ,0 IF NOT FOUND ; .PAGE SATL:: ; ; DISABLE TASK SWITCHING ; MOV PS,-(SP) BIS #140,PS MOV .ATLLH,R3 ;PICK UP FIRST ATL NODE ; 10$: CMP R2,A.TD(R3) ;CHECK FOR STD ADDRESS MATCH BEQ 12$ ;MATCH CHECK TI ; ; NOT EQUAL TRY NEXT ; BR 15$ 12$: CMP R1,A.TI(R3) ;CHECK TI MATCH BEQ 55$ ;OK MATCK ATL ENTRY FOUND ; ; WAS THIS THE LAST ATL ENTRY ; 15$: CMP .ATLLH,(R3) ;DOES IT POINT BACK TO FIRST BEQ 50$ ;YES THIS WAS THE LAST ; ; TRY NEXT ATL ; MOV (R3),R3 ;NEXT ATL ADDRESS TO R3 BR 10$ ;TRY NEXT 50$: CLR R3 ;SET TO ENTRY NOT FOUND 55$: ; ; ENABLE TASK SWITCHING ; MOV (SP)+,PS RTS PC ;RETURN .END