.TITLE ACPINP - SMMACP INPUT DATA DESCRIPTION SUBROUTINE .SBTTL ACPINP - TITLE PAGE .IDENT /V01.00/ ; ; VERSION: V01.00 ; ; AUTHOR: C.T. MICKELSON ; GOODYEAR AEROSPACE CORPORATION ; AKRON, OHIO 44315 ; ; MODIFICATION HISTORY: ; ; V01.00 CTM 01-DEC-82 ORIGINAL VERSION ; ; SUBROUTINE CALLING SEQUENCE ; ; INTEGER = ACPINP(IOPCKT) ; ; WHERE: INTEGER RESULT IS NEGATIVE FOR AN ERROR ; AND IOPCKT IS THE IO PACKET DESCRIBING THE VIRTUAL ; CHANNEL BEING OPENED ; .PAGE .SBTTL ACPINP - DECLARATIONS .DSABL GBL ; ; MACRO LIBRARY CALLS ; .MCALL PKTDF$ PKTDF$ ;DEFINE IO PACKET SYMBOLICS ; ; DIRECTIVES ; ; ; OTHER MACROS ; .MCALL CALL .MCALL CALLR ; ; PSECT DEFINITIONS ; .PSECT $CODE1,RO,I,REL,CON,LCL .PSECT $PDATA,RO,D,REL,CON,LCL .PSECT $VARS,RW,D,REL,CON,LCL .PSECT SMMDAT,RW,D,REL,OVR,GBL ; ; GLOBAL DECLARATIONS ; .GLOBL ACPINP ; ; GLOBAL REFERENCES ; ; SMMACP SUBROUTINES ; .GLOBL GETBLK .GLOBL RTNBLK ; ; EXECUTIVE REFERENCES ; ; ; DEVICE DRIVER SYMBOL TABLE REFERENCES ; .GLOBL IQ.OPN .GLOBL SF.HTA .GLOBL SF.ATH .GLOBL SF.HTH .GLOBL SF.ATA ; ; OTHER REFERENCES ; .GLOBL NDIM ;NUMBER OF DIMENSIONS IN ARRAY .GLOBL NBANKS ;NUMBER OF BANKS IN THE MAIN STAGER .GLOBL NBNKS ;NUMBER OF BANKS IN MAIN STAGER .GLOBL NWORDS ;NUMBER OF MAIN STAGER WORDS PER BANK .GLOBL LENGTH ;DIMENSION LENGTHS .GLOBL NMOVE ;NUMBER OF MOVES THRU STAGER .GLOBL WIDTH ;DATA CHANNEL WIDTHS FOR EACH MOVE .GLOBL MPR ;MULTIPLIERS .GLOBL RECSIZ ;RECORD SIZE IN BITS .GLOBL BASE ;BASE BIT POSITION FOR EACH MOVE ; ; LOCAL SYMBOLS ; PKTOFF=2 ;IO PACKET OFFSET IN CALLING SEQUENCE ; ; LOCAL (RO) DATA ; .PSECT $PDATA WIDCNT=4 ;NUMBER OF CHANNEL WIDTH COMBINATIONS WIDTBL: .WORD IQ.OPN!SF.HTA,WDR11,WARU ;HOST TO ARRAY (16 IN / 128 OUT) .WORD IQ.OPN!SF.ATH,WARU,WDR11 ;ARRAY TO HOST (128 IN / 16 OUT) .WORD IQ.OPN!SF.HTH,WDR11,WDR11 ;HOST TO HOST (16 IN / 16 OUT) .WORD IQ.OPN!SF.ATA,WARU,WARU ;ARRAY TO ARRAY (128 IN / 128 OUT) WIDENT=<.-WIDTBL>/WIDCNT ; ; LOCAL (RW) DATA ; .PSECT $VARS VCDBLW: .BLKW 2 ;VIRTUAL CHANNEL DESCRIPTION DOUBLEWORD .PAGE .SBTTL ACPINP - SUBROUTINE BODY .PSECT $CODE1 .ENABL LSB ACPINP:: MOV #NBNK,NBANKS ;SET HARDWARE CONFIGURATION OF BANKS MOV #NBNK,NBNKS MOV #NWDSLO,NWORDS ;AND WORDS PER BANK MOV #NWDSHI,NWORDS+2 MOV PKTOFF(R5),R3 ;GET IO PACKET ADDRESS FROM CALL MOV #VCDBLW+4,R2 ;POINT AT END OF VCD DOUBLEWORD MOV I.PRM+2(R3),-(R2) ;COPY BUFFER DOUBLEWORD FROM IO PACKET MOV I.PRM(R3),-(R2) ;R2 NOW POINTS TO VCD DOUBLEWORD MOV I.PRM+10(R3),R0 ;GET NUMBER OF DIMENSIONS MOV R0,NDIM ;SET NUMBER OF DIMENSIONS FOR ALGORITHM ASL R0 ;CONVERT TO BYTE COUNT ASL R0 MOV #LENGTH,R1 ;POINT AT DIMENSION LENGTH VECTOR CALL GETBLK ;MOVE LENGTHS FROM VCD TO LENGTH VECTOR ADD R0,VCDBLW+2 ;UPDATE VCD VIRTUAL ADDRESS MOVB I.PRM+7(R3),R0 ;GET NUMBER OF BUFFERS AND MOVES ASH #-4,R0 ;RIGHT JUSTIFY NUMBER OF MOVES BIC #^C<17>,R0 ;SAVE ONLY NUMBER OF MOVES MOV R0,NMOVE ;SET INTO DATA BASE FOR ALGORITHM MOV #WIDCNT,R1 ;GET NUMBER OF CHANNEL TYPES MOV #WIDTBL,R2 ;POINT AT CHANNEL WIDTH TABLE 10$: CMP (R2),I.FCN(R3) ;TEST CURRENT CHANNEL TYPE REQUESTED BEQ 20$ ;IF FOUND CONTINUE BELOW ADD #WIDENT,R2 ;ELSE, BUMP POINTER TO NEXT ENTRY SOB R1,10$ ;DECREMENT COUNT AND TRY AGAIN BR 50$ ;ERROR IF COUNT IS EXHAUSTED 20$: MOV #WIDTH,R1 ;POINT AT CHANNEL WIDTH VECTOR TST (R2)+ ;BUMP POINTER TO INPUT CHANNEL WIDTH MOV (R2)+,(R1)+ ;SET WIDTH FOR INPUT MOVE DEC R0 30$: MOV (R2),(R1)+ ;SET CHANNEL WIDTH FOR ALL OUTPUT MOVES SOB R0,30$ ;DECREMENT COUNT AND REPEAT MOV #MPR,-(SP) ;SET UP SOME VECTOR ADDRESSES ON THE STACK MOV #RECSIZ,-(SP) MOV #BASE,-(SP) MOV NMOVE,-(SP) ;GET NUMBER OF MOVES MOV #VCDBLW,R2 ;POINT AT VCD DOUBLEWORD 40$: MOV #4,R0 ;SET UP BYTE COUNT FOR BASE(J) AND RECSIZ(J) MOV 2(SP),R1 ;SET ADDRESS OF BASE(J) CALL GETBLK ;GET BASE(J) FROM VCD ADD R0,VCDBLW+2 ;UPDATE VCD VIRTUAL ADDRESS ADD R0,2(SP) ;POINT TO BASE(J+1) MOV 4(SP),R1 ;SET ADDRESS RECSIZ(J) CALL GETBLK ;GET RECSIZ(J) FROM VCD ADD R0,VCDBLW+2 ;UPDATE VCD VIRTUAL ADDRESS ADD R0,4(SP) ;POINT TO RECSIZ(J+1) MOV NDIM,R0 ;GET NUMBER OF DIMENSIONS ASL R0 ;CONVERT TO BYTE COUNT ASL R0 MOV 6(SP),R1 ;SET ADDRESS OF MPR(1,J) CALL GETBLK ;GET MPR(I,J) FROM VCD ADD R0,VCDBLW+2 ;UPDATE VCD VIRTUAL ADDRESS ADD #4*NDIMAX,6(SP) ;POINT TO MPR(1,J+1) SOB (SP),40$ ;DECREMENT COUNT AND DO NEXT MOVE ADD #8.,SP ;CLEAN STACK CLR R0 ;SET SUCCESS CODE BR 60$ 50$: MOV #-23.,R0 ;SET INTERNAL ERROR CODE 60$: SXT R1 ;SIGN EXTEND FOR I*4 RESULT RETURN .DSABL LSB .END