⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 map.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
| 	map.s 1.1 92/07/30 Copyright (c) 1985 by Sun Microsystems, Inc.|| /*|  * Memory Mapping and Paging on the Sun 3|  */| | /*|  * Mapping registers are accessed thru the  movs  instruction in the Sun-3.|  *|  * The following subroutines accept any address in the mappable range|  * (256 megs).  They access the map for the current context register.  They|  * assume that currently we are running in supervisor state.|  */ | /*  * These constants are fixed by the hardware,  * so don't feel too bad that I redefined them here */#define	FC_MAP		3		/* space for MMU ops */#define	NUMPMEGS	256		/* number of Pmegs */#define	PMAPOFF		0x10000000	/* offset for page map */#define	SMAPOFF		0x20000000	/* offset for segment map */#define	MAPADDRMASK	0x0FFFE000	/* translatable bits */#define	PME_INVALID	0		/* invalid page */	.text	.globl	_setpgmap_setpgmap:	movl	sp@(4),d0	| Get access address	andl	#MAPADDRMASK,d0	| Mask out irrelevant bits	addl	#PMAPOFF,d0	| Offset to page maps	movl	d0,a0	lea	FC_MAP,a1	| Get function code in a reg| The following code can be used to verify that the only page| table entries written to the Invalid Pmeg are invalid pages, since the | consequences of writing valid entries here are somewhat spectacular.	movc	sfc,d0		| Save source function code	movc	a1,sfc		| Set source function code, too.	addl	#SMAPOFF-PMAPOFF,a0	| Offset to segment map	movsb	a0@,d1		| Get segment map entry number	subl	#SMAPOFF-PMAPOFF,a0	| Offset back to page map	movc	d0,sfc		| Restore source function code| If debug code is removed, next line must remain!	movl	sp@(8),d0	| Get page map entry to write| More debug code#if NUMPMEGS != 256	andb	#NUMPMEGS-1,d1	| Top bit ignored in 128-pmeg version#endif	cmpb	#NUMPMEGS-1,d1	| Are we writing in the Invalid Pmeg?	jne	1$		| Nope, go on.	cmpl	#PME_INVALID,d0	| Writing the Invalid Page Map Entry?	jeq	1$		| Yes, it's ok.	bras	.-1		| Fault out, this is nasty thing to do.1$:| End of debugging code.	movc	dfc,d1		| Save dest function code	movc	a1,dfc		| Set destination function code	movsl	d0,a0@		| Write page map entry	movc	d1,dfc		| Restore dest function code	rts			| done|| Read the page map entry for the given address v| and return it in a form suitable for software use.|| long| getpgmap(v)| caddr_t v;	.globl	_getpgmap_getpgmap:	movl	sp@(4),d0		| get access address	andl	#MAPADDRMASK,d0		| clear extraneous bits	orl	#PMAPOFF,d0		| set to page map base offset	lea	FC_MAP,a1		| Get function code in a reg	movc	sfc,d1			| Save source function code	movc	a1,sfc			| Set source function code, too.	movl	d0,a0	movsl	a0@,d0			| read page map entry					| no mods needed to make pte from pme	movc	d1,sfc			| restore function code	rts				| done	.globl	_setsegmap_setsegmap:	movl	sp@(4),d0	| Get access address	andl	#MAPADDRMASK,d0	| Mask out irrelevant bits	addl	#SMAPOFF,d0	| Bump to segment map offset	movl	d0,a0	movl	sp@(8),d0	| Get seg map entry to write	movc	dfc,d1		| Save dest function code	lea	FC_MAP,a1	| Get function code in a reg	movc	a1,dfc		| Set destination function code	movsb	d0,a0@		| Write segment map entry	movc	d1,dfc		| Restore dest function code	rts			| done

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -