FTN4,L C PROGRAM MAPIO(3,85),24999-16222 REV.2024 800517 C C ******************************************** C * * C * RTE-IV SYSTEM I/O CONFIGURATION LISTOR * C * * C * RELOC.: 24999-16222 * C * SOURCE: 24999-18222 * C ******************************************** C C C RUNNING INSTRUCTIONS REQUIREMENTS C --------------------------------- C C RU,MAPIO[,LIST],[START LU#],[END LU#],[FILTER1],[FILTER2] C C LIST = LIST OUTPUT DEVICE LU, DEFAULT=LU 1 C C START LU# = START REPORTING THIS LU #, DEFAULT=1 C (NOTE: IF THIS LU IS SPECIFIED AND 'END LU#' C IS NOT SPECIFIED. ONLY 'START LU#' C WILL BE GIVEN.) C ALSO: IF START LU# = 'SC' A LIST BY SELECT C CODE WILL BE GIVEN. C C END LU# = STOP REPORTING AFTER THIS LU #, DEFAULT=ALL LU'S C C FILTER1 = DRIVER TYPE FILTER. THIS PARAMTER ALLOWS YOU TO C FILTER ON A DRIVER TYPE. EITHER AN OCTAL VALUE C CAN BE GIVEN (E.G. 23B) OR AN ALPHANUMERIC STRING C IN THE FOLLOWING FORM: 'A05'. THIS WOULD ONLY C DISPLAY 'DVA05' TYPE LU'S. C (DEFAULT: FILTER1 = SHOW ALL LU'S) C C FILTER2 = DRIVER TYPE FILTER. THIS PARAMETER HAS THE SAME C FORMAT AS 'FILTER1' AND IS USED IN CONJUNTION C WITH 'FILTER1' TO SPECIFY A RANGE OF DRIVER C TYPES TO BE LISTED. C (DEFAULT: FILTER2 = FILTER1) C C EXTERNAL SUBROUTINES REQUIRED C ----------------------------- C C IODVC ASCII TABLE OF DRIVER DEVICE NAMES. C MEMSZ CALCULATES RTE-IV MEMORY SIZE C ISOL8 ISOLATES AND RIGHT JUSTIFIES BITS C EXTERNAL IODVC,MEMSZ,ISOL8 C INTEGER TYPE,TYPMIN,TYPMAX,TYPASC,ASCLL,ASCUL,WORD4 C LOGICAL DVFLT,SCLST C DIMENSION IDVC(8),IPARM(5),MTH(36),NAME(3),LIBARY(256) DIMENSION IPBUF(10) EQUIVALENCE(NAME(2),NAME2),(IPARM(5),IPARM5) EQUIVALENCE(IPBUF(4),WORD4) C DATA MTH/2HJA,2HN ,2HFE,2HB ,2HMA,2HR ,2HAP,2HR ,2HMA,2HY ,2HJU, -2HN ,2HJU,2HL ,2HAU,2HG ,2HSE,2HP ,2HOC,2HT ,2HNO,2HV ,2HDE,2HC / DATA LIBSIZ/256/,DVFLT/.FALSE./,ASCLL/26400B/,ASCUL/55000B/ DATA SCLST/.FALSE./ C C GET PARAMETERS AND SET DEFAULTS. C CALL GETST(LIBARY,-40,ILOG) LUOUT = LOGLU(LUTRUE) IEQTB=IGET(1650B) LUMAX = IGET(1653B) INTBA = IGET(1654B) INTLG = IGET(1655B) C C START INTERRUPT TABLE AT 10B C INTBA = INTBA + 2 ICODE = 10B C C MAKE SURE THE SC LIST DOES'NT START OFF WITH A BANG C IEQTA = 77777B C C SET A STOP FLAG (FOR SC LIST) C ISTOP = 6 + INTLG IBEG = 1 IEND = LUMAX ISTRC = 1 DO 100 I=1,5 IF(NAMR(IPBUF,LIBARY,ILOG,ISTRC))100,10 10 TYPE = IAND(WORD4,3) GO TO(20,30,40,50,80)I 20 IF(TYPE .EQ. 1)LUOUT = IPBUF GO TO 100 30 IF(TYPE .EQ. 3 .AND. IPBUF .EQ. 2HSC)GO TO 110 IF(TYPE .NE. 1)GO TO 100 IBEG = IPBUF IEND = IPBUF GO TO 100 40 IF(TYPE .EQ. 0)GO TO 100 IF(IPBUF .GT. IBEG)IEND = IPBUF IF(IEND .GT. LUMAX)IEND = LUMAX GO TO 100 50 IF(TYPE .EQ. 0)GO TO 100 DVFLT = .TRUE. IF(TYPE .NE. 1)GO TO 60 TYPMIN = IPBUF TYPMAX = IPBUF GO TO 100 60 CALL CODE READ(IPBUF,70)TYPMIN 70 FORMAT(O6) ASCLL = IAND(77400B,IPBUF) TYPMAX = TYPMIN GO TO 100 80 IF(TYPE .EQ. 0)GO TO 100 IF(TYPE .NE. 1)GO TO 90 TYPMAX = IPBUF GO TO 100 90 CALL CODE READ(IPBUF,70)TYPMAX ASCUL = IAND(77400B,IPBUF) 100 CONTINUE C C IF ONLY ONE LU SPECIFIED SKIP THE HEADING AND FOOTING C IF(IBEG .EQ. IEND)GO TO 170 GO TO 120 C C IF S.C. LIST SET OUR FLAG C 110 SCLST = .TRUE. C C SET LINE SPACING CONTROL TO OUTPUT DEVICE C 120 LUPC = IOR(LUOUT,1100B) C C GET TBG AND PRIV. CARD INFO C ITBG=IGET(1674B) IPRIV=IGET(1737B) C C GET TIME AND DATE C CALL EXEC(11,IPARM,IYEAR) CALL DATE(IPARM5,MONTH,IYEAR) IPM=(MONTH-1)*2+1 CALL MEMSZ(ISIZE) WRITE(LUOUT,130)(MTH(I), I=IPM,IPM+1),IPARM5,IYEAR, -(IPARM(I),I=4,2,-1) 130 FORMAT(25X"RTE-IV SYSTEM CONFIGURATION"/25X,"ON ",2A2,I2, -","I4" AT"I3,2(":"I2)) WRITE(LUOUT,140)ISIZE,ITBG 140 FORMAT(/20X"CONFIGURED MEMORY SIZE IS "I4" K WORDS",/, -22X"TIME BASE GENERATOR IS IN S.C. "K2) IF(IPRIV.EQ.0)170,150 150 WRITE(LUOUT,160)IPRIV 160 FORMAT(/22X"PRIVILEGED INTERRUPT IS IN S.C. "K2) 170 WRITE(LUOUT,180) 180 FORMAT(/27X"---- E Q T ----"/ -3X"LU EQT S.CHNL S.C. ADDR STATUS T.O. DRIVER" -4X"DEVICE NAME"6X"LU"/) C C READ THE DISC LIBRARY OF ENTRY POINTS NEEDED FOR DRIVER NAMES. C CALL DISC(LIBARY,LIBSIZ,LUOUT,NENTI) C C IF SC LIST GO GET FIRST NON-ZERO SELECT CODE C IF(SCLST)GO TO 290 C C START IT ALL OVER AGAIN C 190 IDRT=IGET(1652B) IDRT = IDRT + IBEG - 1 C C START LOOP FOR ALL LUMAX LOGICAL UNITS. C DO 360 I=IBEG,IEND IDVR = 0 IF(IFBRK(IDUM))420,200 200 IVAL=IGET(IDRT) IF(IVAL.NE.0) GO TO 220 IF(DVFLT .OR. SCLST) GO TO 350 WRITE(LUOUT,210)I,I 210 FORMAT(I5,4X,18("*")" LU UNASSIGNED "18("*")9X,I4) GO TO 350 C C GET SUBCHANNEL C 220 ISC=ISOL8(IVAL,15,11) C C GET EQT NUMBER C IEQT=IAND(IVAL,77B) C C COMPUTE EQT ADDRESS C IEQTA=(IEQT-1)*15+IEQTB C C EXTRACT SELECT CODE C ISCDE=IAND(IGET(IEQTA+3),77B) C C CHECK FOR LIST BY SELECT CODE ONLY C IF(.NOT.SCLST) GO TO 230 IF(ISCDE .NE. ICODE)GO TO 350 C C AND DRIVER TYPE C 230 IDVR=ISOL8(IGET(IEQTA+4),13,8) C C SET DRIVER INITIATION ADDRESS C IENTRY=IGET(IEQTA+1) C C AND SET TYPE IN NAME FOR SEARCH ROUTINE C NAME = IDVR C C SEARCH FOR TRUE DRIVER NAME C CALL SERCH(LIBARY,LIBSIZ ,NENTI,IENTRY,NAME) C C DECODE EQT STATUS BITS C ISTAT=IGET(IEQTA+3) IDB=20040B IF(ISTAT.LT.0) IDB=42040B IF(IAND(ISTAT,40000B).NE.0) IDB=IOR(IAND(IDB,177400B),102B) IPS=20040B IF(IAND(ISTAT,20000B).NE.0) IPS=50040B IF(IAND(ISTAT,10000B).NE.0) IPS=IOR(IAND(IPS,177400B),123B) IT=20040B IF(IAND(ISTAT,4000B).NE.0) IT=52040B C C DETERMINE DEVICE TIME OUT C ITO = 0 MTO = IGET(IEQTA+13) IF(MTO .EQ. 0)GO TO 240 ITO = - (MTO+1) C C GET DEVICE NAME C 240 CALL IODVC(IDVR,IDVC,NAME,ISC) TYPASC = IAND(NAME2,77400B) C C CHECK IF FILTERING OUTPUT C IF(.NOT.DVFLT)GO TO 260 IF(TYPMIN .LE. IDVR .AND. IDVR .LE. TYPMAX)GO TO 250 GO TO 350 C 250 IF(ASCLL .LE. TYPASC .AND. TYPASC .LE. ASCUL)GO TO 260 GO TO 350 C C OUTPUT 1 LU NUMBER C 260 WRITE(LUOUT,270)I,IEQT,ISC,ISCDE,IEQTA,IDB,IPS,IT,ITO,NAME,IDVC,I 270 FORMAT(I5,I6,1X,I5,4X,K2,4X,K5,2X,3A2,I5,3X,3A2,2X,8A2,I4) IF(.NOT.SCLST)GO TO 350 280 ICODE = ICODE + 1 INTBA = INTBA + 1 IF(ICODE .EQ. ISTOP) GO TO 400 290 ICHK = IGET(INTBA) C C IF NEXT S.C. POINTS TO CURRENT EQT GO PRINT IT C IF(ICHK .NE. IEQTA)GO TO 300 ISCDE = ICODE GO TO 260 300 IF(ITBG .NE. ICODE)GO TO 320 WRITE(LUOUT,310 )ICODE GO TO 280 310 FORMAT(21X,K2,33X"TBG") 320 IF(IPRIV .NE. ICODE)GO TO 340 WRITE(LUOUT,330 )ICODE GO TO 280 330 FORMAT(21X,K2,33X"PRIVILEGED FENCE") 340 IF(ICHK .EQ. 0)GO TO 280 GO TO 190 350 IDRT=IDRT+1 360 CONTINUE C IF(.NOT.SCLST)GO TO 390 C C NO LU FOUND BUT HAVE SOMETHING IN INTBL. IF EQT ADDRESS WE C CAN PROCESS IT, IF PROGRAM TO SCHEDULE WE'RE OUT OF LUCK. C IF(ICHK .LT. 0)GO TO 370 C C SET UP A PASS THROUGH OUR LOOP C I = 999 ISC = 0 IEQT = (ICHK-IEQTB)/15 + 1 IEQTA = ICHK ISCDE = ICODE GO TO 230 370 WRITE(LUOUT,380)ICODE 380 FORMAT(" NO EQT DEFINED FOR "K2) GO TO 280 C C SKIP THE FOOTING IF ONLY 1 LU. C 390 IF(IBEG .EQ. IEND)GO TO 420 C 400 WRITE(LUOUT,410) 410 FORMAT(//36X"EQT STATUS LEGEND:"//37X"D= DMA REQUIRED"/37X -"B= AUTOMATIC OUTPUT BUFFERING USED"/37X"P= DRIVER PROCESSES" -" POWER FAIL"/37X"S= DRIVER PROCESSES TIME-OUT"/37X"T= DEVICE" -" HAS TIMED OUT") 420 CALL EXEC(3,LUPC,-1) 430 END SUBROUTINE DATE(IDAY,MONTH,IYEAR) C C THIS SUBROUTINE RECEIVES THE GREGORIAN (SOMETIMES MISTAKINGLY CALLED C THE JULIAN) DATE IN 'IDAY' AND THE YEAR IN 'IYEAR' AND RETURNS THE C FOLLOWING: C C MONTH ---> NUMERICAL MONTH OF THE YEAR C DIMENSION IM(12) DATA IM/31,28,31,30,31,30,31,31,30,31,30,31/ C C C... CHECK FOR LEAP YEAR ... C IZ=IYEAR/4 IR=IYEAR-IZ*4 IF(IR.NE.0) GO TO 70 C C... LEAP YEAR TIME ... C IM(2)=29 C C... COMPUTE CORRECT MONTH ... C 70 DO 20 I=1,12 MONTH=I IF(IDAY.LE.IM(I)) GO TO 30 20 IDAY=IDAY-IM(I) C 30 END C SUBROUTINE DISC(LIBARY,NLIB,LUOUT,NENTI) C C I MUST READ IN THE C DISC LIST OF USER AVAILABLE ENTRY POINTS STARTING AT DISC ADDRESS C GIVEN IN LOCATION DSCLB=1761B OF BASE PAGE COMMUNICATION AREA. C I WILL SORT OUT AND RETAIN IN LIBARY ARRAY ANY ENTRY POINTS THAT C MIGHT BE USEFUL(I AM LOOKING FOR I.00,IP43,ETC.). C DIMENSION LIBARY(NLIB) INTEGER IREGS(2),AREG,BREG INTEGER SECTOR(128) EQUIVALENCE(IREGS(1),REGS),(IREGS(1),AREG),(IREGS(2),BREG) C C STATEMENT FUNCTION EXTRACTS 1ST CHAR OF ENTRY PT NAME. C INAME(IWD1)=IOR( ISOL8(IWD1,14,8), 20000B ) C C IDISC=IGET(1761B) LU=ISOL8(IDISC,15,15) + 2 ITK=ISOL8(IDISC,14,7) ISEC=ISOL8(IDISC,6,0) IODD = IAND(ISEC,1) NENTRY=IGET(1762B) NSEC=IGET(1757B + LU - 2) JENTRY=0 ILIB=1 IBUFL = 128 IF(IODD .EQ. 1)IBUFL = 64 C C START LOOP TO READ DISC SECTOR BY SECTOR. C 10 CONTINUE REGS=EXEC(1,LU,SECTOR,IBUFL,ITK,ISEC) C C SECTOR HAS 32(OR 16) FIELDS OF 4 WDS EACH (3 FOR ENT PT NAME, 1 FOR ADDR) C SEARCH THIS SECTOR FOR ENTRY POINTS WITH PROMISING NAMES,BUT C BREAK OUT IF WE EXCEED NENTRY ENTRY POINTS. C DO 200 J=1,IBUFL/4 JENTRY=JENTRY+1 IF(JENTRY.GT.NENTRY)GO TO 400 K=(J-1)*4 + 1 IF( INAME(SECTOR(K) ) .NE. 2H I ) GO TO 200 C WE KNOW NAME BEGINS WITH I. NOW CHECK 6TH BYTE OF NAME. THIS BYTE C =0 FOR MEM RESIDENT, 1 FOR DISC RES, 4 FOR MICROCODE. WE WANT ONLY C MEM RESIDENT ENT PTS BEGINNING WITH I. IF( ISOL8( SECTOR(K+2),7,0 ) .GT. 0 ) GO TO 200 C C I FOUND A PROMISING NAME. I WILL STORE THE 3 WORD NAME AND ITS C 1 WORD ADDRESS IN THE LIBARY ARRAY. C DO 150 I=K,K+3 LIBARY(ILIB)=SECTOR(I) ILIB=ILIB+1 IF(ILIB.GT.NLIB)GO TO 500 150 CONTINUE 200 CONTINUE C C ADDRESS THE NEXT SECTOR ON DISC. C ISEC=ISEC+1 IF(IODD .EQ. 0)ISEC = ISEC + 1 IF(ISEC.LT.NSEC)GO TO 10 ISEC=0 IODD = 0 IBUFL = 128 ITK=ITK+1 GO TO 10 C C DISC READ IS DONE. LIBARY ARRAY HAS ALL RELEVANT ENT PT NAMES. C RETURN TO CALLER NENTI=NUMBER OF ENTRY PT NAMES. C 400 NENTI=(ILIB-1)/4 RETURN C C ERROR PRINTOUT IF TOO MANY ENT PT NAMES FOR THE LIBARY ARRAY. C 500 WRITE(LUOUT,510)ILIB 510 FORMAT(I6," WDS OVERFLOWS LIBARY ARRAY") GO TO 400 END C SUBROUTINE SERCH(LIBARY,NLIB,NENTI,IENTRY,NAMDV) C C GIVEN THAT 2ND WORD OF EQT TABLE=ADDRESS OF INTERRUPT ENTRY POINT, C FIND THE FIVE CHARACTER NAME OF THAT ENTRY POINT BY SEARCHING THE C LIBARY ARRAY OF USER AVAILABLE ENTRY POINTS. C C LIBARY HAS NENTI FIELDS OF 4 WDS EACH (3 FOR ENT PT NAME, 1 FOR ADDR) C SEARCH THIS ARRAY FOR ENTRY POINT ADDR TO MATCH IENTRY. C DIMENSION LIBARY(NLIB),NAMDV(3) CALL CNUMO(NAMDV,NAMDV) IDVR = NAMDV(3) IF(IDVR .LT. 30000B)IDVR = IDVR + 10000B IDOT = ISOL8(2H..,7,0) IRIGHT = ISOL8(IDVR,14,8) NAMDV(1) = 2HDV NAMDV(2) = IOR((IDOT*256),IRIGHT) NAMDV(3) = IOR(ISOL8(IDVR,6,0)*256,40B) DO 200 J=1,NENTI K=(J-1)*4 + 4 IDV = K-2 IF(IDVR .NE. LIBARY(IDV))GO TO 200 IF(LIBARY(K).NE.IENTRY)GO TO 200 C C I FOUND AN ADDRESS THAT MATCHES IENTRY. GET ENTRY PT NAME AND C CHANGE I.05 TO DVR05 OR IX05 TO DVX05 FOR ANY X. C NAMDV(3)=IOR( ISOL8( LIBARY(IDV), 6, 0)*256, 40B ) IRIGHT=ISOL8( LIBARY(IDV),14,8 ) ITEST=ISOL8( LIBARY(K-3), 6, 0 ) IF(ITEST.EQ.IDOT)ILEFT=IAND( 2HRR, 177400B ) IF(ITEST.NE.IDOT)ILEFT=ITEST*256 NAMDV(2)=IOR(ILEFT,IRIGHT) RETURN 200 CONTINUE C C MISSED COMPLETELY. NO MATCH BETWEEN DRIVER TYPE AND ENTRY C POINT INDICATES THE DRIVER TYPE HAS BEEN CHANGED IN THE EQT C (THIS IS DONE BY THE SPOOL DRIVER FOR EXAMPLE). C IF THIS CONDITION OCCURS A DV.XX NAME WILL BE RETURNED IN THE C NAME ARRAY. C RETURN END END$ ASMB,L * HED MAPIO SUBROUTINE TO GET ASCII NAME OF DRIVER TYPE NAM IODVC,7 24999-16222 REV.2011 800312 * ENT IODVC EXT .ENTR * *************************** * * * SOURCE: 24999-18222 * * RELOC.: 24999-16222 * * * *************************** * A EQU 0 B EQU 1 * SUP * TABLE EQU * ** ASCII ** ## * ASC 8,DUMB TERMINAL R00 ASC 8,TAPE READER R01 ASC 8,TAPE PUNCH R02 ASC 8, R03 ASC 8, R04 ASC 8,2645/2648 TRMNL R05 ASC 8, R06 ASC 8,MULTI-PT TRMNL R07 ASC 8,PLOTTER R10 ASC 8,CARD READER R11 ASC 8,2767 LP R12 ASC 8,TV MONITOR A13 ASC 8, R14 ASC 8,MARK READER R15 ASC 8, R16 ASC 8, R17 ASC 8, R20 ASC 8, R21 ASC 8, R22 ASC 8,9-TR MAG TAPE R23 ASC 8,7-TR MAG TAPE R24 ASC 8, R25 ASC 8, R26 ASC 8, R27 ASC 8,FIXED HEAD DISC R30 ASC 8,7900 DISC R31 ASC 8,7905/6/20/25 DSC R32 ASC 8,FLEXIBLE DISC R33 ASC 8, R34 ASC 8, R35 ASC 8,WCS R36 ASC 8,HP-IB BUS R37 ASC 8,DATA SOURCE INT. R40 ASC 8, R41 ASC 8, R42 ASC 8,SPOOL R43 ASC 8, R44 ASC 8,3480/5 DVM R45 ASC 8,3480/4 DVM R46 ASC 8,3480/4/2911 DVM R47 ASC 8,RJE R50 ASC 8, R51 ASC 8, R52 ASC 8, R53 ASC 8,40-BIT OUTPUT RG R54 ASC 8,2312 SUBSY R55 ASC 8,2310/11 SS R56 ASC 8, R57 ASC 8, R60 ASC 8,6940 SUBSY R61 ASC 8,2313 SUBSY R62 ASC 8, R63 ASC 8, R64 ASC 8,DS/1000 LINK A65 ASC 8,2570A COM R66 ASC 8,DS/3000 LINK G67 ASC 8,6129/30/31 DVS R70 ASC 8, R71 ASC 8,6940 SUBSY A72 ASC 8, R73 ASC 8,2321 SUBSY R74 ASC 8, R75 ASC 8,2320 SUBSY R76 ASC 8,2323 SUBSY R77 * TABEN EQU * * * WARNING !!! DO NOT REARRANGE ORDER OF THE FOLLING TABLE * DVS00 ASC 8,MUX ** DVS00 SB.05 ASC 8,264X TRMNL L.CTU** DV.05 ASC 8,264X TRMNL R.CTU** DV.05 ASC 8,264X TRMNL DSPLY** DV.05 ASC 8,264X TRMNL PRNTR** DV.05 ASC 8,264X TRMNL EXTDV** DV.05 DV.12 ASC 8,LINE PRINTER ** DV.12 DVA12 ASC 8,2607-2618 LP ** DVA12 DVB12 ASC 8,2608A LP ** DVB12 DVZ12 ASC 8,2608A (GRAPHICS)** DVZ12 DVA32 ASC 8,IC DISC ** DVA32 DVC32 ASC 8,IC DISC (# 2) ** DVC32 DVP32 ASC 8,MAC DISC (# 2) ** DVP32 DVP43 ASC 8,POWER FAIL ** DVP43 DVA47 ASC 8,DATA ENTRY TRMNL** DVA47 DVR65 ASC 8,SERIAL LINK KIT ** DVR65 DVM72 ASC 8,UNIVERSAL INF. ** DVM72 * TABAD DEF TABLE * S00. ABS DVS00-TABEN+100B .12. ABS DV.12-TABEN+100B A12. ABS DVA12-TABEN+100B B12. ABS DVB12-TABEN+100B Z12. ABS DVZ12-TABEN+100B A32. ABS DVA32-TABEN+100B C32. ABS DVC32-TABEN+100B P32. ABS DVP32-TABEN+100B P43. ABS DVP43-TABEN+100B A47. ABS DVA47-TABEN+100B R65. ABS DVR65-TABEN+100B M72. ABS DVM72-TABEN+100B * SPC 2 DVTYP NOP DRIVER TYPE NUMBER DSCRP NOP RETURNED DESCRIPTION NAME NOP TRUE DRIVER NAME SUB NOP SUBCHANNEL IODVC NOP ENTRY POINT JSB .ENTR DEF DVTYP LDB DVTYP,I GET THE DVR TYPE JSB SPECL GO CHECK FOR SPECIAL TYPE BLF,BRS MPY BY 8 TO GET OFFSET ADB TABAD ADD TABLE ADDRESS LDA M8 SET COUNTER TO MOVE 8 WDS STA CNTR LOOP LDA B,I START XFERING THE INFO STA DSCRP,I AND SAVE IN USER BUFFER INB BUMP ADDRESS ISZ DSCRP ISZ CNTR AND COUNTER JMP LOOP DONE YET ? JMP IODVC,I YUP, RETURN * B0 OCT 0 B5 OCT 5 B12 OCT 12 B32 OCT 32 B43 OCT 43 B47 OCT 47 B65 OCT 65 B72 OCT 72 B100 OCT 100 M6 DEC -6 M8 DEC -8 M100B OCT -100 CNTR NOP ". OCT 27000 "A OCT 40400 "B OCT 41000 "C OCT 41400 "M OCT 46400 "P OCT 50000 "R OCT 51000 "S OCT 51400 "Z OCT 55000 HIBYT OCT 77400 * SPECL NOP ISZ NAME SET UP FOR GETTING LDA NAME,I SPECIAL LETTER AND HIBYT CPB B0 CHECK FOR THE MUX JMP .D0 CPB B5 CHECK FOR THE MUX JMP .D5 CPB B12 CHECK FOR LP JMP .D12 GO DOIT CPB B32 JMP .D32 CHECK FOR IC DISC CPB B43 CHECK FOR SPOOL/POWER JMP .D43 CPB B47 DATA CAP ? JMP .D47 MAYBE CPB B65 OLD DS ? JMP .D65 CPB B72 CHECK FOR UI/8940 JMP .D72 JMP SPECL,I NO SPECIALS RETURN * .D0 CPA "S CHECK FOR THE MUX LDB S00. JMP SCHK * .D5 CPA "S CHECK FOR THE MUX LDB S00. LDA SUB,I CHECK FOR SUBCHANNEL SZA,RSS JMP SCHK NO SUB FOR THIS ONE ADA M6 CHECK FOR CRAZY SSA,RSS SUBCHANNEL JMP SCHK NO, GO DO IT. LDA SUB,I LDB S00. ALF,ARS MULTIPLY BY 8 ADB A JMP SCHK * .D12 CPA "A CHECK FOR DVA12 LDB A12. RETURN WITH ADDRESS IN B CPA "B CHECK FOR DVB12 LDB B12. CPA "Z CHECK FOR LOGICAL GRAPHICS LDB Z12. CPA ". CHECK FOR SPOOL MOD. LDB .12. JMP SCHK * .D32 CPA "A CHECK FOR IC DISC LDB A32. CPA "C CHECK FOR 2ND. ID DISC LDB C32. CPA "P 2ND. MAC DISC TOO. LDB P32. JMP SCHK * .D43 CPA "P LDB P43. NO, GET PWR/FAIL JMP SCHK GO PROCESS * .D47 CPA "A CHECK FOR DATA CAPP LDB A47. JMP SCHK * .D65 CPA "R CHECK FOR OLD DS1B' LDB R65. JMP SCHK * .D72 CPA "M DV'R'72 ? LDB M72. MUST BE UI CARD * SCHK LDA B AND M100B SZA,RSS JMP SPECL,I NOT A SPECIAL ADB M100B BRS,BRS DIVIDE BYE 8 BRS ADB B100 ADD BACK OFFSET JMP SPECL,I AND RETURN END ASMB,L HED MAPIO SUBROUTINE TO RETRIEVE CONFIGURED RTE-IV MEMORY SIZE * NAM MEMSZ,7 REV.2007 800211 * ENT MEMSZ EXT .ENTR,$MATA,$MNP * *************************** * * * SOURCE: 02170-180XX * * RELOC.: 02170-160XX * * * *************************** * * DESCRIPTION * ----------- * * THIS SUBROUTINE CALCULATES THE AMOUNT OF MEMORY CONFIGURED INTO * AN RTE-IV SYSTEM AND RETURNS THE VALUE TO THE CALLING PROGRAM AS * THE DECIMAL NUMBER OF 1024-WORD PAGES. * * CALLING SEQUENCE * ---------------- * * CALL MEMSZ(ISIZE) * * ISIZE = THE ADDRESS OF THE RETURNED NUMBER 0F CONFIGURED PAGES * * ISIZE NOP THE ADDRESS PASSED BY THE CALLING PROGRAM * MEMSZ NOP < ENTRY & EXIT POINT > JSB .ENTR RETRIEVE ADDRESS WHERE MEMORY SIZE IS TO BE STORED DEF ISIZE * LDA $MNP GET MAXIMUM # OF PARTITIONS ALLOWED CMA,INA SET PARTITION ENTRY COUNTER STA ENTRY AND STORE * LDB $MATA GET ADDRESS OF MEMORY ALLOCATION TABLE. ADB =D3 SET TO ADDRESS OF WORD THREE IN CURRENT ENTRY NEXT LDA 1,I LOAD PHYSICAL STARTING PAGE OF PARTITION SZA,RSS A=0? JMP END YES AND PGMSK INSURE PAGE NUMBER ONLY STA ISTRT NO,SAVE INB SET TO ADDRESS OF WORD 4 IN CURRENT ENTRY LDA 1,I LOAD NUMBER OF PAGES IN PARTITION AND PGMSK MAKE SURE PAGE ONLY ADA ISTRT AND ADD TO STARTING PAGE STA ISIZE,I STORE MEMORY SIZE ADB =D6 INCREMENT TO WORD 4 IN NEXT ENTRY ISZ ENTRY INCREMENT PARTITION COUNTER, SKIP IF 0 JMP NEXT TRY NEXT PARTITION ENTRY * END ISZ ISIZE,I ADD ONE TO GET ACTUAL MEMORY SIZE JMP MEMSZ,I RETURN TO CALLER * ENTRY NOP PARTITION COUNTER ISTRT NOP STARTING PHYSICAL PAGE NUMBER PGMSK OCT 1777 PAGE MASK FOR MAT ENTRY * END ASMB,R,B,L NAM ISOL8,7 ISOLATE,RIGHT JUSTIFY BITS. 18 JAN 77. ENT ISOL8 EXT .ENTR * * I=ISOL8(J,11,8) ISOLATES BITS 11,10,9,8 FROM J AND RETURNS THEM * IN THE LEAST SIGNIFICANT BITS OF I. HIGH BITS OF * I ARE ZEROED OUT. * I=ISOL8(J,8,11) DOES THE SAME THING. * * I=ISOL8(J,15,0) RETURNS I=J * I=ISOL8(J,16,1) RETURNS I = J ROTATED 1 BIT RIGHT * J NOP I1 NOP I2 NOP ISOL8 NOP JSB .ENTR DEF J LDA I1,I CMA,INA (A)= -I1 ADA I2,I (A)= I2-I1 SSA (A)>0 ? I2>I1 ? JMP RVERS NO. I1>I2. LDB I1,I YES. I2>I1. GET I1. JMP CONT RVERS LDB I2,I I2 IS THE LEAST OF I1,I2. CMA,INA (A)>=0. CONT CMB,INB LEAST OF I1,I2 COUNTS ROTATIONS. STA MASK# MASK NUMBER >= 0. LDA J,I GET THE WORD TO BE OPERATED ON. * RLOOP SZB,RSS DONE? ROTATION COUNTER ROSE TO ZERO ? JMP ISOL YES. RAR NO. MOVE BITS-OF-INTEREST ONE PLACE RIGHT. INB BUMP ROTATION COUNTER. JMP RLOOP * ISOL LDB .MASK ADB MASK# (B) POINTS TO DESIRED MASK. AND B,I ZERO OUT UNWANTED BITS. JMP ISOL8,I RETURN WITH (A)=RIGHT JUSTIFIED ISOLATED BITS. * MASK# NOP .MASK DEF *+1 OCT 000001 OCT 000003 OCT 000007 OCT 000017 OCT 000037 OCT 000077 OCT 000177 OCT 000377 OCT 000777 OCT 001777 OCT 003777 OCT 007777 OCT 017777 OCT 037777 OCT 077777 OCT 177777 * A EQU 0 B EQU 1 S EQU 1 END