.TITLE TIOFET FETCH A DEVICE HANDLER .SBTTL FETCH A DEVICE HANDLER ; LAST EDIT ON 13-MAR-80 BY MARK BRAMHALL .IDENT /V36/ .MCALL .FETCH ;+ ; LOAD OUR VIRTUAL HIGH LIMIT INTO LOCATION 000002 IN PREPARATION FOR ; BEING RUN AS A VIRTUAL JOB WITH THE VIRTUAL .SETTOP FEATURE. ; ; THE FOLLOWING PATCHES COMPLETE THE CHANGE: ; ; ADDR OLD NEW COMMENT ; 000000 000000 105372 THE .RAD50 OF "VIR" ; 000044 001000 003000 ADD "VIRTUAL" BIT (2000) TO JSW ;- .ASECT . = 2 .WORD <>&^C<020000-1>>-2 ;+ ; FETCH - FETCH DEVICE HANDLER. ; ; R1 -> DEVICE NAME (RAD50) ; R4 -> INFORMATION RETURNED BY .DSTAT ; ; CALL FETCH ; ; R0 = UNDEFINED ; R4 = UNDEFINED ; ; IF C=0 ('BCC') THEN HANDLER FETCHED ; IF C=1 ('BCS') THEN SOME ERROR FETCHING HANDLER ;- .PSECT TIOFET,RO,I,GBL,REL,OVR ORG TIOFET .ASSUME . EQ TIOFET FETCH: MOV R1,-(SP) ;SAVE R1 MOV 2(R4),-(SP) ;GET HANDLER SIZE IN BYTES MOV HANDLR(R5),R4 ;TARGET ADDRESS FOR HANDLER MOV R4,R0 ;MAKE A COPY ADD (SP),R0 ; TO BE ADDRESS OF END OF HANDLER CMP R0,@#USRADR ;DO HANDLER AND USR OVERLAP? BHI 20$ ;ERROR IF SO MOV QZ(R5),R1 ;GET CURRENT SIZE OF Q-REG AREA ADD (SP),R1 ;SET UP TO INCLUDE HANDLER CALLX SIZEQR ;LET TECO GET THE FREE SPACE BCC 20$ ;BRANCH IF HANDLER WON'T FIT, YES C=0! SUB (SP),QMAX(R5) ;NOW TAKE BACK ROOM FOR HANDLER MOV QRSTOR(R5),R0 ;FIND END OF TEXT ADD QMAX(R5),R0 ; AND Q-REG AREAS MOV R0,R1 ;MAKE COPY ADD (SP),R1 ; AND POINT TO NEW TOP OF AREAS 10$: MOVB -(R0),-(R1) ;MOVE A BYTE CMP R0,R4 ;ARE WE DONE? BHI 10$ ;BRANCH IF MORE TO MOVE... ADD (SP),TXSTOR(R5) ;UPDATE NEW TEXT LOW POINTER ADD (SP),QRSTOR(R5) ; AND UPDATE NEW Q-REG LOW POINTER ADD (SP)+,HANDLR(R5) ; AND UPDATE NEW HANDLER FETCH POINT MOV (SP)+,R1 ;RESTORE R1 .FETCH R4,R1 ;FETCH THE DEVICE HANDLER RETURN ;EXIT W/ C-BIT INDICATION 20$: JMPX $E$MEM ;MEMORY OVERFLOW... .END