|
|
1.1 ! root 1: /* ! 2: * Coherent. ! 3: * ! 4: * $Log: main.c,v $ ! 5: * Revision 1.5 91/11/12 07:51:59 bin ! 6: * 3204 kernel source for use with piggy's tboot code. ! 7: * ! 8: * Revision 1.2 91/11/11 12:27:07 hal ! 9: * Add atcount & global n_atdr. ! 10: * ! 11: * Revision 1.2 88/06/29 12:00:29 src ! 12: * Real/Protected mode status now printed during boot sequence. ! 13: * Three part serial numbers now supported, moved to optional fourth line. ! 14: * ! 15: * Revision 1.1 88/03/24 16:13:58 src ! 16: * Initial revision ! 17: * ! 18: * 87/04/09 Allan Cornish /usr/src/sys/coh/main.c ! 19: * Serial numbers changed to support group. ! 20: * ! 21: * 87/01/05 Allan Cornish /usr/src/sys/coh/main.c ! 22: * Copyright notice revised to include 1987. ! 23: */ ! 24: #include <sys/coherent.h> ! 25: #include <sys/proc.h> ! 26: #include <sys/seg.h> ! 27: #include <sys/uproc.h> ! 28: ! 29: #ifndef VERSION /* This should be specified at compile time */ ! 30: #define VERSION "..." ! 31: #endif ! 32: ! 33: unsigned long _entry = 0; /* really the serial number */ ! 34: unsigned long __ = 0; /* really the serial number also */ ! 35: ! 36: /* ! 37: * Initialise various things. When we return we will return to user mode. ! 38: */ ! 39: char version[] = VERSION; ! 40: char copyright[] = "\ ! 41: Copyright (c) 1982, 1991 by Mark Williams Company\n\ ! 42: "; ! 43: ! 44: #define CMOSA 0x70 /* write cmos address to this port */ ! 45: #define CMOSD 0x71 /* read cmos data through this port */ ! 46: ! 47: short n_atdr; ! 48: ! 49: static void atcount(); ! 50: ! 51: main() ! 52: { ! 53: register SEG *sp; ! 54: extern int realmode; /* real addressing mode - as2.s */ ! 55: ! 56: u.u_error = 0; ! 57: bufinit(); ! 58: cltinit(); ! 59: pcsinit(); ! 60: seginit(); ! 61: atcount(); /* count "at" drives; put into n_atdr */ ! 62: devinit(); ! 63: printf("\Mark Williams COHERENT Version %s - %s Mode (mem=%u Kbytes)\n", ! 64: version, (realmode ? "Real" : "Protected"), msize ); ! 65: printf(copyright); ! 66: ! 67: if ( _entry ) { ! 68: printf("Serial Number "); ! 69: printf("%U\n", _entry); ! 70: } ! 71: ! 72: /* ! 73: * Verify correct serial number ! 74: */ ! 75: if (_entry != __) ! 76: panic("Verification error - call Mark Williams Company at 1-800-MARK-WMS\n"); ! 77: ! 78: /* ! 79: * Turn on clock, start off processes, mount root device ! 80: * and return. ! 81: */ ! 82: batflag = 1; ! 83: if ((sp=salloc((fsize_t)UPASIZE, SFNCLR|SFNSWP)) == NULL) ! 84: panic("Cannot allocate user area"); ! 85: if ((iprocp=process(idle))==NULL || (eprocp=process(NULL))==NULL) ! 86: panic("Cannot create process"); ! 87: eveinit(sp); ! 88: fsminit(); ! 89: } ! 90: ! 91: /* ! 92: * atcount() ! 93: * ! 94: * Read CMOS and return 0,1, or 2 as number of installed "at" drives. ! 95: */ ! 96: static void atcount() ! 97: { ! 98: int u; ! 99: n_atdr = 0; ! 100: ! 101: /* ! 102: * Count nonzero drive types. ! 103: * ! 104: * High nibble of CMOS 0x12 is drive 0's type. ! 105: * Low nibble of CMOS 0x12 is drive 1's type. ! 106: */ ! 107: outb(CMOSA, 0x12); ! 108: /* delay */ ! 109: u = inb(CMOSD); ! 110: if (u & 0x00F0) ! 111: n_atdr++; ! 112: if (u & 0x000F) ! 113: n_atdr++; ! 114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.