.TITLE .DA GET ARGS FOR INTRINSIC FUNCS. / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. .EJECT / ASSEMBLE WITH %PDP9=0 FOR PDP9 ONLY CODE / ASSEMBLE WITH %VB5=0 FOR ADSS SYSTEMS /EDIT 011 11-8-71 / EDIT 012 21-FEB-75 R.K. HYATT REMOVED BANK/PAGE DEPENDENT CODE / EDIT 013 20-AUG-75 M. HEBENSTREIT DISCLAIMER / / EDIT 014 16-MAR-76 G. A. REID CHANGE SO THAT THE DOS VERSION / ISSUES AN .OTS 43 ERROR IF THE / NUMBER OF ARGUMENTS BEING PASSED / IS NOT THE SAME FOR BOTH THE / CALLER AND THE CALLEE. / THE RSX VERSION WAS CHANGED TO GIVE / AN .OTS 43 ERROR IF THE CALLER HAD / MORE ARGUMENTS THAN THE CALLEE EXPECTED. / / EDIT 015 21-MAY-76 G. A. REID CORRECT ERROR INTRODUCED IN EDIT 014 / SO THAT THE NUMBER OF ARGUMENTS IN THE / CALLER'S LIST IS USED TO CONTROL HOW / MANY ARGUMENTS ARE PASSED. THESE CHANGES / AFFECT THE RSX VERSION ONLY. / / MACRO DEFN'S / .DEFIN ADDAC NUM .IFDEF %PDP9 TAD ( NUM .ENDC .IFUND %PDP9 AAC NUM .ENDC .ENDM .DEFIN INCAC .IFDEF %PDP9 TAD (1 .ENDC .IFUND %PDP9 IAC .ENDC .ENDM .DEFIN TCAADD ARG .IFDEF %PDP9 CMA ADDAC ARG .ENDC .IFUND %PDP9 TCA IAC .ENDC .ENDM /FOR RSX SYSTEM,DEFINE RSX /(GAR-014) IN RSX, AN .OTS 43 ERROR IS NOT GIVEN WHEN THE /(GAR-014) NUMBER OF CALLER ARGUMENTS IS LESS THAN THE /(GAR-014) NUMBER OF CALLEE ARGUMENTS. THIS ALLOWS THE /(GAR-014) OPTIONAL USE OF THE 'EV' PARAMETER. /(GAR-014) NOTE: CALLER REFERS TO THE MAIN PROGRAM AND CALLEE /(GAR-014) REFERS TO THE SUBROUTINE. / .IFDEF RSX .GLOBL .DAA .ENDC .GLOBL .ER /(GAR-014) .GLOBL .DA / CALLING SEQUENCE /FNTN CAL 0 FWA-1 OF LIST OF ARGUMENT ADDRESSES / JMS* (.DA) SUBR CALL / JMP .+(N+1) SUBR RETURN / CAL 0 STORAGE FOR ADDR OF ARG(1) / CAL 0 . ARG(2) / . . . . / . . . . / CAL 0 . ARG(N) / .IFDEF RSX .DAA=. .ENDC .DA CAL 0 /ENTRY-EXIT LAC .DA /PICK UP POINTER TO CALLEE INCAC /FORM TOPTR DAC TOPTR ADDAC -3 /FORM POINTER TO CALLER DAC CALLER ADDAC 2 //READJUST AND FORM LOW 12 BITS AND (7777 /OF BASE DAC NUMEE /TEMP STORE LAC* .DA /GET CALLEE'S JMP INSTRUCTION AND (7777 // FORM BASE+N+1 TCAADD 2 /TWO'S COMPILMENT AND SUB 1 TAD NUMEE /NO HAVE -N MOD 4096 SMA /CHECK TO SEE IF ARG LIST CROSSES PAGE BOUNDRY TAD (770000 /YES WE DO - SO ADD -4096 DAC NUMEE LAC* CALLER /FORM -FROM- POINTER DAC CALLER /KEEP POINTER FOR LATER INCAC /FORM FROM POINTER DAC FRMPTR /FORM FROM POINTER / COMPUTE CALLER'S ARG COUNT ADDAC -1 /ADJUST POINTER BACK TO CALLER'S JMP INST. AND (7777 /LOW 12 BITS FORMS BASE DAC NUMER /TEMP STORE LAC* CALLER /GET JMP INST. TO FORM OFFSET AND (7777 /NOW HAVE BASE+N+1 MOD 4096 TCAADD 2 /TWO'S COMPLIMENT AND SUB 1 TAD NUMER /NOW HAVE -N MOD 4096 SMA /DO WE CROSS A PAGE BOUNDARY TAD (770000 /YES - ADD -4096 DAC NUMER /NO SO JUST STORE IT TCA TAD NUMEE /(GAR-014) COMPARE THE CALLER'S ARG CNT ... /(GAR-014) AGAINST THE CALLEE'S. .IFUND RSX /(GAR-014) SNA /(GAR-014) ARE THE NUMBER OF ARG'S EQUAL? JMP GARG02 /(GAR-014) YES - CONTINUE. JMS* .ER /(GAR-014) NO - ISSUE .OTS 43 ERROR. .DSA 43 /(GAR-014) .ENDC /(GAR-014) .IFDEF RSX /(GAR-014) SPA!SNA /(GAR-014) IF >0, GIVE .OTS 43 ERROR. JMP GARG02 /(GAR-014) OK - THE CALLER'S ARG. CNT ... /(GAR-014) IS <= THE CALLEE'S. JMS* .ER /(GAR-014) ISSUE AN .OTS 43 ERROR. .DSA 43 /(GAR-014) .ENDC / / MAIN LOOP FOR PASSING ARG ADDR'S / GARG02 LAC TOPTR /SEE IF INDIRECT ON STORE DAC TOTMP LAC* TOTMP SPA / TEST FOR INDIRECT DAC TOTMP / STORE INDIRECT POINTER LAC* FRMPTR /CHECK FOR INDIRECT ON -FROM- POINTER SMA JMP GARG03 /NOOP DAC FRMTMP /YEEP DO A TEMP STORE LAC* FRMTMP /AND FETCH ADDR .IFUND %V5B GARG03 DAC* TOTMP /STORE ARG ADDR .ENDC .IFDEF %V5B GARG03 AND (477777 /AND OFF MODE BITS IN CASE FPP DAC* TOTMP /STORE AGR ADDR .ENDC ISZ TOPTR / BUMP -TO- POINTER ISZ FRMPTR / BUMP -FROM- POINTER .IFUND RSX /(GAR-015) ISZ NUMEE / BUMP COUNT AND CHECK FOR SHUT DOWN .ENDC /(GAR-015) .IFDEF RSX /(GAR-015) ISZ NUMER /(GAR-015) USING NUMBER OF ARGUMENTS IN CALLER'S /(GAR-015) LIST, BUMP COUNT AND CHECK FOR /(GAR-015) SHUT DOWN. .ENDC /(GAR-015) JMP GARG02 /STILL MORE ARGS JMP* .DA /EXIT / / STORAGE AREA / TOPTR .DSA 0 / -TO- POINTER FRMPTR .DSA 0 / -FROM- POINTER TOTMP .DSA 0 / TEMPORARY FOR -TO- POINTER FRMTMP .DSA 0 / TEMPORARY FOR -FROM- POINTER NUMEE .DSA 0 / CALLEE'S AGR COUNT NUMER .DSA 0 / CALLER'S ARG COUNT CALLER .DSA 0 /POINTER TO CALLER .END