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

📄 cpu.addrs.h

📁 操作系统SunOS 4.1.3版本的源码
💻 H
字号:
/*      @(#)cpu.addrs.h 1.1 92/07/30 SMI; from UCB X.X XX/XX/XX       *//* * Copyright (c) 1986 by Sun Microsystems, Inc. *//* * Memory Addresses of Interest in the Sun-2 "Standalone" memory map * * This file is used for both standalone code (ROM Monitor,  * Diagnostics, boot programs, etc) and for the Unix kernel.  IF YOU HAVE * TO CHANGE IT to fit your application, MOVE THE CHANGE BACK TO THE PUBLIC * COPY, and make sure the change is upward-compatible.  The last thing we  * need is seventeen different copies of this file, like we have with the * Sun-1 header files. * * THE VALUE FOR PROM_BASE must be changed in several places when it is * changed.  A complete list: *	../conf/Makefile	RELOC= near top of file *	../h/sunromvec.h	#define romp near end of file *	../* /Makefile		(best to rerun sunconfig to generate them) * Since sunromvec is exported to the world, such a change invalidates all * object programs that use it (eg standalone diagnostics, demos, boot code, * etc) until they are recompiled.  As a transition aid, it is often useful * to specially map the old sunromvec location(s) so they also work. *//* * The following define the base addresses in mappable memory where * the various devices and forms of memory are mapped in when the ROM * Monitor powers up.  Ongoing operation of the monitor requires that * some of these locations remain mapped as they were. */#define	MAINMEM_BASE	((char *)			0x000000)#define		MAINMEM_SIZE				0x600000#define	HOLE_BASE	((char *)			0x600000)#define		HOLE_SIZE				0x800000#define	BOOTMAP_BASE	((char *)			0xE00000)#define	INVPMEG_BASE	((char *)			0xEA8000)#define	BUSIO_BASE	((char *)			0xEB0000)#define	VIDEOMEM_BASE	((char *)			0xEC0000)/* On-board and off-board I/O devices of interest */#define	TIMER_BASE	((struct am9513_device *)	0xEE0000)#define	ROP_BASE	((struct mem_regs *)		0xEE0800)#ifdef MENU#define MEMORY_ERR_BASE ROP_BASE#endif MENU#define	CLOCK_BASE	((struct ns58167 *)		0xEE1000)#define	DES_BASE	((struct deschip *)		0xEE1800)#define	PARALLEL_BASE	((short *)			0xEE2000)#define	SCSI_BASE	((struct scsi_ha_reg *)		0xEE2800)#define	ETHER_BASE	((struct obie_device *)		0xEE3000)#define	VIDEOCTL_BASE	((struct videoctl *)		0xEE3800)#define LAST_IO_BASE	((char *)			0xEE4000)#define	KEYBMOUSE_BASE	((struct zscc_device *)		0xEEC000)#define	SERIAL0_BASE	((struct zscc_device *)		0xEEC800)/* If further serial ports exist, they are mapped in successive pages here */#define	PROM_BASE	((struct sunromvec *)		0xEF0000)#define	BUSMEM_BASE	((char *)			0xF00000)#define	DVMA_BASE	BUSMEM_BASE/* For backwards compatability with code that assumes Multibus */#define	MBIO_BASE	BUSIO_BASE#define	MBMEM_BASE	BUSMEM_BASE/* * The Monitor maps only as much main memory as it can detect; the rest * of the address space (up thru the special addresses defined above) * is mapped as invalid. * * The last pmeg in the page map is always filled with PME_INVALID * entries.  This pmeg number ("The Invalid Pmeg Number") can be used to * invalidate an entire segment's worth of memory.  All segments of all contexts * except 0 are mapped using this pmeg number and thus are totally invalid. *		B E   C A R E F U L ! * If you change a page map entry in this pmeg, you change it for thousands * of virtual addresses.  (The standard getpagemap/setpagemap routines * will cause a trap if you attempt to write a valid page map entry to this * pmeg, but you could do it by hand if you really wanted to mess things up.) * * Because there is twice as much virtual memory space in a single context * as there are total pmegs to map it with, half of the monitor's own memory * map must be re-mappings of the same pmegs.  There's no reason to duplicate * useful addresses, and several reasons not to, so we map the extra 8 megs * of virtual address space with the Invalid Pmeg Number.  This means that * 8 megs of the address space have their own page map entries, and the other * 8 megs all share the one Invalid Pmeg.  Remember this when trying to map  * things; if the address you want is segmapped to the Invalid Pmeg, you'd * better find it a pmeg before you set a page map entry.  The entries which  * use the Invalid Pmeg start at HOLE_BASE (defined above) and extend HOLE_SIZE * bytes (8 megs). * * The Monitor always uses page map entry PME_INVALID to map an invalid * page, although the only relevant bits are the (all zero) permission bits * and the Valid bit.  PME_INVALID is defined in ./structconst.h, which is * generated by the Monitor makefile. */#define	SEG_INVALID	NUMPMEGS-1/* * The 68010 processor allows the interrupt vector table to reside anywhere * in memory.  Its address is contained in the "Vector Base Register", * which can be set with the  movc  instruction.  The Sun-2 monitor's VBR value * is defined below.  All accesses to the interrupt vectors should * read out the actual VBR contents with movc. */#define	TRAPVECTOR_BASE	((char *)		0x0)/* * Location of font table for the screen in Sun-2 systems... */#define	FONT_BASE	((char *)		0x1000)

⌨️ 快捷键说明

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