SYSINIT is a module linked behind the OEM bios. It takes over the system initialization after the OEM bios has performed any initialization it needs to do. Control is transfered with a long jump to the external variable SYSINIT The OEM has the following variables declared external: CURRENT_DOS_LOCATION WORD This word contains the segment number of the DOS before it is relocated. The OEM bios must set this value. FINAL_DOS_LOCATION WORD This word contains the segment number of the DOS after SYSINIT moves it. The OEM bios must set this value. DEVICE_LIST DWORD This double word pointer points to the linked list of character and block device drivers. The OEM must set this value. MEMORY_SIZE WORD This word contains the number of RAM paragraphs. If the bios doesn't set this variable SYSINIT will automatically calculate it. NOTE: systems with PARITY checked memory must size memory in the BIOS. SYSINITs method is to write memory and read it back until it gets a mismatch. DEFAULT_DRIVE BYTE This is the initial default drive when the system first comes up. drive a=0, drive b=1, etc. If the bios doesn't set it then drive a is assumed. BUFFERS BYTE This is the default number of buffers for the system. This value may be overridden by the user in the CONFIG.SYS file. It is DBed to 2 in SYSINIT it should be greater than 1. FILES BYTE This is the default number of files for the system. This value may be overridden by the user in the CONFIG.SYS file. It is DBed to 8 in SYSINIT, values less than 5 are ignored. SYSINIT FAR The entry point of the SYSINIT module. OEM BIOS jumps to this label at the end of its INIT code. The OEM has the following variables declared public: RE_INIT FAR This is an entry point which allows the BIOS to do some INIT work after the DOS is initialized. ALL REGISTERS MUST BE PRESERVED. On entry DS points to the first available memory (after the DOS). DS:0 points to a 100H byte program header prefix which represents the "program" currently running. This program should be thought of as the OEM BIOS and SYSINIT taken together. This is not a normal program in that no memory is allocated to it, it is running in free memory. NOTES: At the time this routine is called SYSINIT occupies the highest 10K of memory ("highest" is determined by the value of the MEMORY_SIZE variable), DO NOT DO WRITES THERE. Since this is called AFTER DOS is initialized, you can make system calls. This also implies that the code for this routine CANNOT be thrown away by use of the FINAL_DOS_LOCATION since the DOS has already been moved. If you don't want anything done just set this to point at a FAR RET instruction.