Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
3.6 KiB

;-------------------------------------------------------------------------
;
; FILE : ORIGIN.INC
;
; This is included in origin.asm and mshead.asm. Contains the equate that
; is used for ORGing the DOS code.
;
; Brief Description of the necessacity of this ORG:
; -------------------------------------------------
;
; A special problem exits when running out of the HMA. The HMA starts at
; address FFFF:10. There is no place in the HMA with an offset of zero.
; This means programs running out off the HMA must use non-zero offset base
; addresses. It also means that if we're running multiple programs from the
; HMA, the base offset of each segment must atleast be as big as all of the
; HMA segments that precede it.
;
; One solution to this problem to ORG each module at 64K minus its size.
; For instance a code segment 1234h bytes in length would org'd at edcbh.
; This gives max. flexibility regarding it's location in the HMA. By
; selecting segment values between f124h and ffffh it could be located
; anywhere in the HMA. The problem with this is that programs with such
; high ORGs would not be able to run in low RAM.
;
; A comporomise solution is to set the ORG address somewhere between 0010h
; and ffffh - their size. In the particular case of the BIOS and the DOS
; the folloowing solution has been implemented:
;
; The Bios Code segment will have a very small offset and run at the very
; front of the HMA, after the VDISK header. THE Dos Code segment will have
; a base offset of (700+<min. size off RAM based BIOS>+<min. size of the DOS
; DATA segment when DOS is running low>). This will reflect the lowest
; possible physical address at which DOS code will run, while still providing
; max. possible flexibility in HMA positioning. This offset MUST NOT be
; smaller then that 20+size of Bios Code segment when running high. This is
; mostly true.
;
; Also this ORG'd value must be communicated to the BIOS. This is done by
; putting this value after the first jmp instruction in the DOS code in
; mshead.asm.
;
; In order for the stripz utility to know how many zeroes to be stripped
; out, this value is placed at the beginning of the binary in origin.asm.
;
; Revision History:
;
; Currently this is being done manually. Therefore any change in the DOS DATA
; Size or the BIOS size should be reflected here. --- Feb 90
;
; BDSIZE.INC contains the equates for BIODATASIZE, BIOCODESIZ and DOSDATASIZ.
; A utility called getsize will obtain the corresponding values from msdos
; and msbio.map and update the values in BDSIZ.INC if they are different.
; DOS should now be built using the batch file makedos.bat which invokes this
; utility. The FORMAT of BDSIZE.INC should not be changed as getsize is
; dependant on that. --- Apr 3 '90
;
; For ROMDOS, however, there is no need to org the doscode to any location
; other than zero. Therefore the stripz utility will not need to be used,
; so the offset will not need to be included at the beginning of the code
; segment. Also, the BIOS can just assume that the resident code begins
; at offset zero within the segment.
;
;
;--------------------------------------------------------------------------
;
BIODATASTART EQU 00700h
include bdsize.inc ; this sets the values:
; BIODATASIZ
; BIOCODESIZ
; DOSDATASIZ
ifndef NEC_98
BYTSTART EQU BIODATASTART+BIODATASIZ+BIOCODESIZ+DOSDATASIZ
PARASTART EQU ((BYTSTART + 0FH) AND (NOT 0FH)) - 40h
else ;NEC_98
BYTSTART EQU BIOCODESIZ
PARASTART EQU (BYTSTART + 0FH) AND (NOT 0FH)
endif ;NEC_98