background image

9-20 Vol. 3A

PROCESSOR MANAGEMENT AND INITIALIZATION

 154  ; label must be in the top 64K of linear memory.

 155  

 156      PUBLIC  STARTUP

 157  STARTUP:

 158  

 159  ; DS,ES address the bottom 64K of flat linear memory

 160      ASSUME  DS:STARTUP_DATA, ES:STARTUP_DATA

 161  ; See Figure 9-4

 162  ; load GDTR with temporary GDT

 163          LEA     EBX,TEMP_GDT  ; build the TEMP_GDT in low ram,

 164          MOV     DWORD PTR [EBX],0   ; where we can address

 165          MOV     DWORD PTR [EBX]+4,0

 166          MOV     DWORD PTR [EBX]+8, LINEAR_PROTO_LO

 167          MOV     DWORD PTR [EBX]+12, LINEAR_PROTO_HI

 168          MOV     TEMP_GDT_scratch.table_linear,EBX

 169          MOV     TEMP_GDT_scratch.table_lim,15

 170  

 171 

DB 66H; execute a 32 bit LGDT

 172          LGDT    TEMP_GDT_scratch

 173  

 174  ; enter protected mode

 175          MOV     EBX,CR0

 176          OR      EBX,PE_BIT

 177          MOV     CR0,EBX

 178  

 179   ; clear prefetch queue

 180          JMP     CLEAR_LABEL

 181  CLEAR_LABEL:

 182  

 183   ; make DS and ES address 4G of linear memory

 184          MOV     CX,LINEAR_SEL

 185          MOV     DS,CX

 186          MOV     ES,CX

 187  

 188    ; do board specific initialization 

 189    ;

 190                  ; 

 191                  ; ......

 192                  ; 

 193  

 194  

 195          ; See Figure 9-5

 196          ; copy EPROM GDT to ram at:

 197          ;                RAM_START + size (STARTUP_DATA)

 198          MOV     EAX,RAM_START

 199          ADD     EAX,OFFSET (end_data)   

 200          MOV     EBX,RAM_START

 201          MOV     ECX, CS_BASE

 202          ADD     ECX, OFFSET (GDT_EPROM) 

 203          MOV     ESI, [ECX].table_linear

 204          MOV     EDI,EAX

 205          MOVZX   ECX, [ECX].table_lim

 206          MOV     APP_GDT_ram[EBX].table_lim,CX