background image

Vol. 3A 9-21

PROCESSOR MANAGEMENT AND INITIALIZATION

 207          INC     ECX

 208          MOV     EDX,EAX

 209          MOV     APP_GDT_ram[EBX].table_linear,EAX

 210          ADD     EAX,ECX

 211      REP MOVS    BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

 212  

 213          ; fixup GDT base in descriptor

 214          MOV     ECX,EDX

 215          MOV     [EDX].bas_0_15+GDT_DESC_OFF,CX

 216          ROR     ECX,16

 217          MOV     [EDX].bas_16_23+GDT_DESC_OFF,CL

 218          MOV     [EDX].bas_24_31+GDT_DESC_OFF,CH

 219  

 220          ; copy EPROM IDT to ram at:

 221          ; RAM_START+size(STARTUP_DATA)+SIZE (EPROM GDT)

 222          MOV     ECX, CS_BASE

 223          ADD     ECX, OFFSET (IDT_EPROM)     

 224          MOV     ESI, [ECX].table_linear

 225          MOV     EDI,EAX

 226          MOVZX   ECX, [ECX].table_lim

 227          MOV     APP_IDT_ram[EBX].table_lim,CX

 228          INC     ECX

 229          MOV     APP_IDT_ram[EBX].table_linear,EAX

 230          MOV     EBX,EAX

 231          ADD     EAX,ECX

 232      REP MOVS    BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

 233  

 234                  ; fixup IDT pointer in GDT

 235          MOV     [EDX].bas_0_15+IDT_DESC_OFF,BX

 236          ROR     EBX,16

 237          MOV     [EDX].bas_16_23+IDT_DESC_OFF,BL

 238          MOV     [EDX].bas_24_31+IDT_DESC_OFF,BH

 239  

 240                  ; load GDTR and IDTR

 241          MOV     EBX,RAM_START

 242                  DB      66H         ; execute a 32 bit LGDT

 243          LGDT    APP_GDT_ram[EBX]    

 244                  DB      66H         ; execute a 32 bit LIDT

 245          LIDT    APP_IDT_ram[EBX]    

 246  

 247                  ; move the TSS

 248          MOV     EDI,EAX

 249          MOV     EBX,TSS_INDEX*SIZE(DESC)

 250          MOV     ECX,GDT_DESC_OFF ;build linear address for TSS

 251          MOV     GS,CX

 252          MOV     DH,GS:[EBX].bas_24_31

 253          MOV     DL,GS:[EBX].bas_16_23

 254          ROL     EDX,16

 255          MOV     DX,GS:[EBX].bas_0_15

 256          MOV     ESI,EDX

 257          LSL     ECX,EBX

 258          INC     ECX

 259          MOV     EDX,EAX

 260          ADD     EAX,ECX