ASMB,R,L,C ** MMAP ** HED MMAP ROUTINE TO MAP EMA PAGES IN MSEG * SOURCE: 92067-18293 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: S.P.K. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** NAM MMAP,7 92067-1X293 REV.2013 771020 SUP ENT MMAP,..MP,.MMAP,.EMSZ,.MSG#,.MSGS,.NPGS,.IPGS EXT $DVPT,$LIBR,$LIBX * * * ROUTINE TO MAP THE REQUESTED SEQUENCE OF PHYSICAL * PAGES IN THE MAPPING SEGMENT ADDRESS SPACE * IF THE # OF PAGES SPECIFIED TO BE MAPPED IS LESS * THAN THE STANDARD MAPPING SEGMENT SIZE, MMAP WILL MAP * UPTO THE STANDARD MSEG SIZE PAGES IF THEY FIT * * CALLING SEQUENCE: JSB MMAP * DEF RTN RETURN ADDRESS * DEF IPGS # OF PAGES DISP FROM START OF EMA * UPTO THE FIRST PAGE TO MAP * DEF NPGS # OF PAGES TO BE MAPPED * * RETURNS: A REG = 0 IF NORMAL RETURN * = -1 IF ERROR RETURN * * * MMAP HAS TWO OTHER ENTRY POINTS .MAP. AND .MMAP * .MAP. IS ENTERED BY .EMIO WHILE DOING SPECIAL MAPPING * CALLING SEQUENCE FOR .MAP. IS: JSB .MAP. * * .MMAP IS ENTERED BY .EMAS WHILE MAPPING A STANDARD MSEG * CALLING SEQUENCE FOR .MMAP IS: JSB .MMAP * * * MMAP NOP LDA MMAP,I GET THE RETURN ADDRESS STA RETRN AND SAVE IT ISZ MMAP GET THE NEXT PARAMETER LDA MMAP,I LDA A,I A REG HAS # OF PAGES DISPLACEMENT FROM START STA .IPGS OF EMA TO START OF SEGMENT TO BE MAPPED SSA -VE? JMP ERROR YES, THEN ERROR ISZ MMAP LDB MMAP,I GET THE NEXT PARM LDB B,I # OF PAGES TO BE MAPPED SSB -VE? JMP ERROR YES, THEN ERROR STB .NPGS LDA XIDEX ADDRESS OF ID SEG EXT SZA,RSS IS IT 0? JMP ERROR YES THEN NOT AN EMA PROG LDA XEQT GET ID SEG ADDRESS ADA .28 XLA A,I GET WORD 28 OF THE ID SEGMENT AND B1777 MASK OUT THE EMA SIZE STA .EMSZ SAVE IT XLA XIDEX,I GET FIRST WORD OF ID SEG EXT AND B37 MASK STANDARD MSEG SIZE STA .MSGS SAVE IT * LDA .IPGS FIND MSEG # IF STANDARD MSEG CLB DIV .MSGS RELATIVE START PAGE OF MSEG/.MSGS SZB REMAINDER=0? CCA NO, NON-STANDARD MSEG STA .MSG# SAVE MAPPING SEGMENT # JMP .MAP1 SKIP OVER FOLLOWING ENTRY POINT * ..MP NOP ENTRY POINT FOR .EMIO TO ENTER LDA ..MP GET RETURN ADDRESS STA RETRN SET UP MAIN RETURN ADDRESS .MAP1 LDA .NPGS # OF PAGES TO BE MAPPED ADA .IPGS # OF PAGES DISP FROM START OF EMA CMA,INA ADA .EMSZ EMA SIZE-(#PGS DISP+#PGS TO BE MAPPED) SSA EMA SIZE < NPGS+.IPGS? JMP ERROR YES, THEN ERROR LDB .NPGS # OF PAGES TO BE MAPPED CMB,INB ADB .MSGS MSGSZ - NPGS SSB .NPGS> MSGSZ? JMP ERROR YES, ERROR ISZ .MSGS INCREMENT MSEG SIZE TO ACCOUNT LDB .MSGS FOR OVERFLOW PAGE LDA .EMSZ EMA SIZE CMA,INA ADA .IPGS #PGS DISP FROM START EMA - EMA SIZE ADB A + MSEG SIZE + 1 CMA,INA EMA SIZE - # PGS DISP SSB .IPGS+.MSGS+1<=EMA SIZE? LDA .MSGS YES, #PAGES TO MAP IS MSEG SIZE + 1 STA .NPGS SET # OF PAGES TO BE MAPPED SZA,RSS 0? JMP ERROR YES, THEN IPGS = EMASZ JMP NOADJ SKIP OVER FOLLOWING ENTRY POINT * * CHANGE USER MAP ON BASE PAGE * .MMAP NOP LDA .MMAP SET UP MAIN RETURN ADDRESS STA RETRN ISZ .MSGS ACCOUNT FOR OVERFLOW PAGE NOADJ JSB $LIBR TURN OFF INTERRUPTS AND NOP MEMORY PROTECT FENCE LDA XIDEX INA XLA A,I GET 2ND WORD OF ID SEG EXT CAY SAVE IT AND B1777 MASK PHYSICAL START PAGE OF EMA ADA .IPGS A REG = PHYSICAL START PAGE OF MAPPING SEG STA .IPGS SAVE IT LDA B40 READ THE USER BASE PAGE # FROM DMS REG 40B CCB CBX -1 IN XREG TO READ 1 REG LDB AEMSZ ADDRESS OF LOC CONTAINING MEM ADDRESS XMM READ DMS REG CLB,INB X REG = 1 TO CHANGE CONTENTS OF 1 DMS REG CBX B TO X XLA $DVPT DMS REG# POINTING TO START OF DRIVER PARTN STA MLOC ADA B40 LDB AEMSZ POINT THIS REG TO USER BASE PAGE XMM LDB MLOC START PAGE OF DRIVER PARTN BLF,BLF MULTIPLY BY 2000B RBL,RBL ADB B1740 LOC ON USER BASE PAGE AT WHICH MSEG STARTS CYA SECOND WORD ID SEG EXT FROM Y TO A ALF,RAL MOVE BITS 11-15 TO POSITION 10-14 AND B37 MASK OUT START LOGICAL PAGE OF MSEG STA MSTRT SAVE IT ADB A BREG HAS MEM LOC ON BASE PAGE STB MLOC AT WHICH USER MAP MUST BE CHANGED LDA .NPGS # OF PAGES CMA,INA COUNTER STA .EMSZ LDA .IPGS START PHYSICAL PAGE OF MSEG LOOP STA B,I STORE IT ON USER BASE PAGE INA INCREMENT PAGE # INB POINT TO NEXT LOC ISZ .EMSZ INCREMENT COUNTER JMP LOOP STORE NEXT PAGE# * USER MAP ON BASE PAGE IS CHANGED TO SHOW THE NEW MSEG * REST OF THE LOCATIONS MUST BE MADE READ&WRITE PROTECTED * LDA .MSGS FIND # OF LOCATIONS LEFT TO BE CMA,INA READ AND WRITE PROTECTED ADA .NPGS #PAGES - (MSEG SIZE+1) SZA,RSS EQUAL? JMP STDMS YES THEN SET DMS REGISTERS STA .EMSZ #PGS TO READ-WRITE PROTECT LDA B140K LOOP1 STA B,I STORE 140000B IN LOC ON USER BASE PAGE INB POINT TO NEXT LOC ISZ .EMSZ INCREMENT COUNTER JMP LOOP1 * STDMS LDA B40 40 OCTAL ADA MSTRT FIRST MAP REGISTER TO BE CHANGED IN A REG LDB .MSGS #DMS REG TO CHANGE IS MSEG SIZE + 1 CBX TO BE LOADED FROM LDB MLOC USER BASE PAGE XMM TRANSFER MEM INTO DMS REG * XLA XIDEX,I GET FIRST WORD OF ID SEG EXT LDB .MSG# SSB,RSS -1? JMP MMAP1 NO IOR BIT15 YES, THEN SET BIT 15 JMP MMAP2 * MMAP1 AND B37 MASK OUT BITS 0-4 BLF,RBL MOVE MSEG # TO BITS 5-14 ADA B MMAP2 XSA XIDEX,I STORE BACK WORD 0 OF THE ID SEG EXT CLA RETURN WITH A REG=0 JSB $LIBX TURN ON MEMORY PROTECT & INTERRUPTS DEF RETRN * ERROR CCA ERROR RETURN WITH A REG=-1 JMP RETRN,I * * RETRN NOP .IPGS NOP .NPGS NOP .MSGS NOP .MSG# NOP .EMSZ NOP AEMSZ DEF .EMSZ MSTRT NOP MLOC NOP B37 OCT 37 B40 OCT 40 B1777 OCT 1777 B1740 OCT 1740 B140K OCT 140000 BIT15 OCT 100000 .28 DEC 28 N1 DEC -1 A EQU 0 B EQU 1 XIDEX EQU 1645B XEQT EQU 1717B END