; VMEMSOFT.ASM - software replacement for map microcode ; last modified December 16, 1976 1:33 PM ; ; Copyright Xerox Corporation 1979 .EXTD HASHMAP,HASHMAPMASK,MapStatPtr,ReprobeInc .EXTN SOFTMAPFLAG .EXTN RDREF0,RDREF1,WTREF0 ; .ENT VmemSoft .ENT NPROBE ; .SREL VmemSoft: VMS NPROBE: NPRB ; .NREL ; VMS: STA 3,1,2 ADC 0,0 STA 0,@SOFTMF ; Overwrite microcode calls with JSR's to software routines LDA 0,JRRS LDA 3,@RR0 STA 0,0,3 LDA 3,@RR1 STA 0,0,3 LDA 0,JWRS LDA 3,@WR0 STA 0,0,3 LDA 3,1,2 JMP 1,3 ; SOFTMF: SOFTMAPFLAG JRRS: JSR @RDREFS JWRS: JSR @WTREFS RR0: RDREF0 RR1: RDREF1 WR0: WTREF0 ; ; MAPPING SUBROUTINE ; CALL WITH AC0-1=V.A., AC3=BITS TO CLEAR IN MAP ENTRY ; RETURNS AC3=CORE ADDRESS OR MAP PTR ; .ZREL RDREFS: RDREFX WTREFS: WTREFX ; .NREL REFED: 4 ;REFERENCED REFDY: 6 ;REFERENCED+DIRTY MAPRET: 0 VA0: 0 ;UPPER V.A. VA1: 0 ;LOWER V.A. BITS: 0 LMSK: 177400 MAMSK: 177600 CAHI: 376 ;AC0 FOR V.A.S THAT GO DIRECTLY TO CORE NPRB: 0 ; REPROBE COUNT 0 ; WTREFX: INC 3,3 STA 3,MAPRET LDA 3,REFDY JMP REFX RDREFX: INC 3,3 STA 3,MAPRET LDA 3,REFED REFX: STA 3,BITS STA 0,VA0 STA 1,VA1 LDA 3,LMSK ;LEFT HALF MASK AND 3,1 ADD 1,0 ;PAGE NO. SWAPPED IN AC0 COMS 0,1 ; KEY IN AC1 SUB 1,0 RETRY: LDA 3,HASHMAPMASK AND 3,0 ;HASH INDEX LDA 3,HASHMAP ADD 0,3 LDA 0,0,3 ;HASH KEY SUB# 0,1,SZR JMP PROBE ;NO MATCH LDA 0,1,3 ;ENTRY LDA 1,BITS ANDZR 0,1,SZR ;TEST BITS JMP BITSET INCORE: LDA 3,MAMSK AND 0,3 ;MASK OFF BITS LDA 1,VA1 ADD 1,3 SKRET: LDA 0,MapStatPtr MOV# 0,0,SZR JMP SKRET1 LDA 0,VA0 JMP @MAPRET SKRET1: LDA 1,HASHMAP SUB# 1,0,SNR JMP NOMAP1 LDA 0,VA0 STA 0,@MapStatPtr ISZ MapStatPtr LDA 1,VA1 STA 1,@MapStatPtr ISZ MapStatPtr JMP @MAPRET ; SOME BITS SET, CHECK FOR STORE TO CLEAN PAGE BITSET: MOVR# 1,1,SZC JMP NOMAP MOVZL 1,1 SUB 1,0 ;CLEAR BITS STA 0,1,3 JMP INCORE ; PROBE FAILED PROBE: MOV# 0,0,SNR ;EMPTY SLOT? JMP EMPTY ;YES, RETURN NOSKIP ISZ NPRB+1 ;LOG THE REPROBE JMP .+3 ISZ NPRB JMP .+1 LDA 0,HASHMAP SUB 0,3 ; RECONSTRUCT PROBE INDEX LDA 0,ReprobeInc ADD 3,0 JMP RETRY ; LOOKUP FAILED, TEST FOR CORE ADDRESS EMPTY: LDA 0,VA0 LDA 1,CAHI SUB# 0,1,SZR JMP NOMAP LDA 1,VA1 MOV 1,3 JMP SKRET ; MAP FAULT NOMAP1: ADCZL 3,3 ADD 1,3 ; Statistics overflow NOMAP: LDA 0,VA0 LDA 1,VA1 DSZ MAPRET JMP @MAPRET ; .END(2258)