xref: /csrg-svn/sys/i386/stand/mem.c (revision 41080)
1*41080Swilliam /*-
2*41080Swilliam  * Copyright (c) 1990 The Regents of the University of California.
3*41080Swilliam  * All rights reserved.
4*41080Swilliam  *
5*41080Swilliam  * This code is derived from software contributed to Berkeley by
6*41080Swilliam  * William Jolitz.
7*41080Swilliam  *
8*41080Swilliam  * %sccs.include.noredist.c%
9*41080Swilliam  *
10*41080Swilliam  *	@(#)mem.c	7.1 (Berkeley) 04/24/90
11*41080Swilliam  */
12*41080Swilliam 
13*41080Swilliam /*
14*41080Swilliam  * Scan physical memory and talley, bypassing AT devices/roms
15*41080Swilliam  */
16*41080Swilliam #define	CHK	4096
main()17*41080Swilliam main() {
18*41080Swilliam 	long base;
19*41080Swilliam 	register long val;
20*41080Swilliam 
21*41080Swilliam 	base = 0;
22*41080Swilliam 	do {
23*41080Swilliam 		printf("0x%X - ", base);
24*41080Swilliam 		for ( ;; base+= CHK) {
25*41080Swilliam 			if (base >= 0xa0000 && base <= 0xe0000) break;
26*41080Swilliam 			if (base >= 0xfffff000) break;
27*41080Swilliam 			val = *((long *) base);
28*41080Swilliam 			*((long *) base) = base*4 + 0x55555555;
29*41080Swilliam 			if (*((long *) base) != base*4 + 0x55555555) {
30*41080Swilliam 				*((long *) base) = val ;
31*41080Swilliam 				break;
32*41080Swilliam 			}
33*41080Swilliam 			*((long *) base) = val ;
34*41080Swilliam 		}
35*41080Swilliam 		printf("0x%X\n", base-CHK) ;
36*41080Swilliam 		for ( ;; base+= CHK) {
37*41080Swilliam 			if (base >= 0xa0000 && base <= 0xe0000) continue ;
38*41080Swilliam 			if (base >= 0xfffff000) break;
39*41080Swilliam 			val = *((long *) base);
40*41080Swilliam 			*((long *) base) = base*4 + 0x55555555;
41*41080Swilliam 			if (*((long *) base) == base*4 + 0x55555555) {
42*41080Swilliam 				*((long *) base) = val ;
43*41080Swilliam 				break;
44*41080Swilliam 			}
45*41080Swilliam 		}
46*41080Swilliam 	} while (base < 0xfffff000);
47*41080Swilliam 	printf("finished\n");
48*41080Swilliam 	getchar();
49*41080Swilliam }
50