.NLIST TTM .TITLE RDM .GLOBL RDM,RDF ;MBCSR=164000 ;MBPDR=164002 ; ; CALL RDP(VALUE) READ THE PDR ; CALL WRP(VALUE) WRITE THE PDR ; RDP:: TST (R5)+ MOV MBPDR,@(R5)+ RETURN WRP:: TST (R5)+ MOV @(R5)+,MBPDR RETURN ; ; CALL RDF(REG#,CHAN#,VALUE) ; ; SUBROUTINE TO READ FILE REGISTERS ; RD1: .WORD 4 ;LOAD FUNCTION RD2: .WORD 6 ;EXECUTE FUNCTION RDF: TST (R5)+ ;READ A FILE REGISTER MOV @(R5)+,R1 ;CHANNEL # MOV @(R5)+,R0 ;ADDRESS BIC #177760,R0 ;STRIP OFF ADDRESS ASH #4,R0 ;NOW IS SOURCE ADDRESS ADD #15,R0 ;NOW LOAD ILR WITH REG(F1=35) RD: JSR PC,MB$EXC MOV R2,@(R5) ;RETURN VALUE TO USER RTS PC ; ; SUBROUTINE TO EXECUTE MIOP FUNCTION ; R0=INSTRUCTION R1=CHAN# R2=DATA (IN/OUT) ; MBEXEC:: TST (R5)+ MOV @(R5)+,R1 ;CHANNEL # MOV @(R5)+,R0 ;INSTRUCTION MOV @(R5),R2 ;DATA JSR PC,MB$EXC MOV R2,@(R5) RTS PC MBCONT:: TST (R5)+ MOV @(R5)+,R1 ;CHANNEL # BIC #177740,R1 ;STRIP SWAB R1 ADD #10,R1 ;NOW IS CONTINUE MOV @(R5),MBPDR ;NEW DATA MOV R1,MBCSR NOP 1$: TSTB MBCSR ;WAIT FOR DONE BGE 1$ ;NOT DONE MOV MBPDR,@(R5) ;RETURN DATA RTS PC ; ; RESET MIOP ; MBREST:: MOV #2,MBCSR ;CLEAR MIOP NOP 1$: TSTB MBCSR BGE 1$ ;WAIT TILL DONE RTS PC ; ; EXECUTE DESIRED FUNCTION ; MB$EXC:: MOVB R1,RD1+1 MOVB R1,RD2+1 MOV #2,MBCSR ;CLEAR + MANUAL MODE NOP 1$: TSTB MBCSR ;TEST FOR DONE BGE 1$ ;NOT DONE MOV R0,MBPDR NOP MOV RD1,MBCSR ;PUT FUNCTION INTO INSTR. REG. NOP 2$: TSTB MBCSR ;TEST FOR DONE BGE 2$ ;NOT DONE MOV R2,MBPDR ;DATA TO WRITE MOV RD2,MBCSR ;EXECUTE THE FUNCTION NOP LP: TSTB MBCSR BGE LP MOV MBPDR,R2 ;RESULT IF ANY RTS PC ; ; CALL RDM(ADDRESS,VALUE) ; ; SUBROUTINE TO READ MIOP MEMORY ; RDM:: TST (R5)+ ;READ MEMORY MOV @(R5)+,R0 ;CHANNEL # BIC #177400,R0 ADD #144000,R0 CLR R1 BR RD ; ; CALL WRM(ADDRESS,VALUE) ; ; SUBROUTINE TO WRITE TO MIOP MEMORY ; WRM:: TST (R5)+ MOV @(R5)+,R0 ;ADDRESS CLR R1 ;CHANNEL 0 MOV @(R5),R2 ;DATA BIC #177400,R0 ADD #134000,R0 ;NOW IS STORE INSTRUCTION BR MB$EXC ; ; CALL WRF(ICHAN,IREG,DATA) ; WRF:: TST (R5)+ MOV @(R5)+,R1 ; CHANNNEL # MOV @(R5)+,R0 ; REGISTER # MOV @(R5)+,R2 ; DATA BIC #177760,R0 ADD #320,R0 ; NOW IS FUNCTION BR MB$EXC ; ; CALL MBRUN(ICHAN,IDATA) ; MBRUN:: TST (R5)+ MOV @(R5)+,R0 ; CHAN NUMBER BIC #177760,R0 ; STRIP EXTRA BITS SWAB R0 ; NOW TO UPPER BYTE ADD #15,R0 ; GO + INITIALIZE CHAN MOV @(R5),MBPDR ; LOAD PDR WITH DATA MOV R0,MBCSR ; INITIALIZE THE CHAN CALL MBWAIT MOV MBPDR,@(R5) ; GET PDR RETURN MBWAIT: TSTB MBCSR BGE MBWAIT RETURN .END