.TITLE STUFF .IDENT /V01/ .MCALL QIO$,DIR$,RETURN .MACRO PUSH,A .IRP X, MOV X,-(SP) .ENDM .ENDM PUSH .MACRO POP,A .IRP X, MOV (SP)+,X .ENDM .ENDM POP ; ; STUFF DATA AREA SKELETON SKELETON: QIO$ 400,0,0,0,0,0,<0,0,0,0,0,0> .WORD 0 ENDSKELETON: ; ; MISCELLANEOUS NULL = -1 DSW = 0 ISW = Q.IOPL+4 JUMPTAB:.WORD SLUN,SBUFFER,SSIZE,SEFN,SPRI,SIOST,SISW,SFNC MAX = <.-JUMPTAB+2>/2 .PAGE STUFF:: ; ; PUSH DATA AREA SKELETON ONTO THE STACK MOV #ENDSKELETON,R4 .REPT ENDSKELETON-SKELETON/2 PUSH -(R4) .ENDM ; ; PROCESS THE PARAMETERS PASSED MOVB @R5,R4 ; LOAD NUMBER OF PARAMETERS PASSED BLE NONE ; NO PAREMETERS PASSED CMP R4,#MAX ; MAXIMUM NUMBER PASSED? BGE ALL ; YES, PROCESS ALL PARAMETERS ASL R4 ; * PROCESS ONLY THOSE JMP @JUMPTAB-2(R4) ; * PARAMETERS PASSED .PAGE ALL: ; ; PROCESS THE UIC PARAMETER SUIC: CMP #NULL,22(R5) ; IS PARAMETER OMITTED? BEQ SFNC ; YES, ASSUME DEFAULT MOV @22(R5),Q.IOPL+12(SP) ; NO, SET UIC OF MCR TASK ; ; PROCESS THE FNC PARAMETER SFNC: CMP #NULL,20(R5) ; IS PARAMETER OMITTED? BEQ SISW ; YES, ASSUME DEFAULT MOV #404,Q.IOFN(SP) ; NO, SET TO ONLY INITIATE MCR COMMAND ; ; PROCESS THE ISW PARAMETER SISW: CMP #NULL,16(R5) ; IS PARAMETER OMITTED? BEQ SIOST ; YES, ASSUME DEFAULT MOV 16(R5),ISW(SP) ; NO, SAVE THE ADDRESS ; ; PROCESS THE IOST PARAMETER SIOST: CMP #NULL,14(R5) ; IS PARAMETER OMITTED? BEQ SPRI ; YES, ASSUME DEFAULT MOV 14(R5),Q.IOSB(SP); NO, PUT ADDRESS IN THE DPB ; ; PROCESS THE PRI PARAMETER SPRI: CMP #NULL,12(R5) ; IS PARAMETER OMITTED? BEQ SEFN ; YES, ASSUME DEFAULT MOVB @12(R5),Q.IOPR(SP);NO, PUT PRIORITY IN THE DPB ; ; PROCESS THE EFN PARAMETER SEFN: CMP #NULL,10(R5) ; IS PARAMETER OMITTED? BEQ SSIZE ; YES, ASSUME DEFAULT MOVB @10(R5),Q.IOEF(SP);NO, PUT EVENT FLAG NUMBER IN THE DPB ; ; PROCESS THE SIZE PARAMETER SSIZE: CMP #NULL,6(R5) ; IS PARAMETER OMITTED? BEQ SBUFFER ; YES, ASSUME DEFAULT ; DEFAULT MAY CAUSE A HANDLER ERROR RETURN MOV @6(R5),Q.IOPL+2(SP); NO, PUT BUFFER SIZE IN THE DPB ; ; PROCESS BUFFER PARAMETER SBUFFER:CMP #NULL,4(R5) ; IS PARAMETER OMITTED? BEQ SLUN ; YES, ASSUME DEFAULT ; DEFAULT WILL CAUSE A HANDLER ERROR RETURN MOV 4(R5),Q.IOPL(SP); NO, PUT BUFFER ADDRESS IN THE DPB TST Q.IOPL+2(SP) ; A SIZE SPECIFIED? BGT SLUN ; YES, PROCESS LUN INFORMATION MOV 4(R5),R4 ; * 10$: TSTB (R4)+ ; * BNE 10$ ; * DETERMINE LENGTH OF COMMAND STRING DEC R4 ; * SUB 4(R5),R4 ; * MOV R4,Q.IOPL+2(SP) ; * ; ; PROCESS THE LUN PARAMETER SLUN: CMP #NULL,2(R5) ; IS PARAMETER OMITTED? BEQ NONE ; YES, ASSUME DEFAULT ; DEFAULT WILL CAUSE A DIRECTIVE ERROR MOV @2(R5),Q.IOLU(SP); NO, PUT LOGICAL UNIT NUMBER IN THE DPB ; NONE: .PAGE ; ; ISSUE MCR STUFF QIO DIR$ ; ; PROCESS THE ISW POP R4 ; ISW PARAMETER SPECIFIED? BEQ EXIT ; NO, EXIT MOV DSW,@R4 ; YES, RETURN DIRECTIVE STATUS WORD ; ; EXIT EXIT: RETURN .END