www.pudn.com > czxtsycx1.zip > P_2.ASM


; 
; 
V_SEL_SETUP PROC FAR 
 
	MOV AX,GDT_ASDATA_SEL 
	MOV DS,AX 
	MOV AX,OS_DATA_SEL 
	MOV ES,AX 
 
	XOR EDX,EDX 
	MOV EBX,0C0423000H 
	MOV DX,OS_CODE_LEN 
	AND DX,0FFFH 
	CMP DX,0 
	JE V_SEL_1 
	ADD EBX,1000H 
V_SEL_1: 
	MOV DX,OS_CODE_LEN 
	AND DX,0F000H 
	ADD EBX,EDX		;STACK ADDR 
 
	MOV ES:OS_STACK_ADDR,EBX 
 
	MOV ECX,EBX 
	MOV DS:V_OS_STACK.BASE_L,CX 
	SHR ECX,16 
	MOV DS:V_OS_STACK.BASE_M,CL 
	MOV DS:V_OS_STACK.BASE_H,CH 
	MOV DX,OS_STACK_LEN 
	AND DX,0FFFH 
	CMP DX,0 
	JE V_SEL_2 
	ADD EBX,1000H 
V_SEL_2: 
	MOV DX,OS_STACK_LEN 
	AND DX,0F000H 
	ADD EBX,EDX			;DATA ADDR 
	 
	MOV ES:OS_DATA_ADDR,EBX 
 
	MOV AX,GDT_ASDATA_SEL 
	MOV DS,AX 
	MOV ECX,EBX 
	MOV DS:V_OS_DATA.BASE_L,CX 
	SHR ECX,16 
	MOV DS:V_OS_DATA.BASE_M,CL 
	MOV DS:V_OS_DATA.BASE_H,CH 
 
	MOV AX,OS_DATA_SEL 
	MOV DS,AX 
 
	RET 
V_SEL_SETUP ENDP 
 
SEG_MOV MACRO  s_sel,d_sel,s_off,d_off,mov_len 
	LOCAL SEG_MOV1 
	MOV AX,s_sel 
	MOV DS,AX 
	MOV AX,d_sel 
	MOV ES,AX 
	MOV SI,s_off 
	MOV EDI,d_off 
	MOV CX,mov_len 
SEG_MOV1: 
	MOV AL,DS:[SI] 
	MOV ES:[EDI],AL 
	INC SI 
	INC EDI 
	LOOP SEG_MOV1 
	ENDM 
 
SEGS_MOV_2M PROC FAR 
 
XOR ESI,ESI 
XOR EDI,EDI 
 
SEG_MOV GDT_IDT_SEL,GDT_MOV_SEL,0,0,IDT_LEN 
 
SEG_MOV OS_TSS_ASDATA_SEL,GDT_MOV_SEL,0,1000H,OS_TSS_LEN 
 
SEG_MOV GDT_ASDATA_SEL,GDT_MOV_SEL,0,2000H,GDT_LEN 
 
SEG_MOV OS_CODE_SEL,GDT_MOV_SEL,0,23000H,OS_CODE_LEN 
 
;MOV AX,OS_DATA_SEL 
;MOV DS,AX 
;MOV EBX,DS:OS_STACK_ADDR 
;SUB EBX,0C0400000H 
 
XOR EDX,EDX 
MOV EBX,0 
MOV DX,OS_CODE_LEN 
AND DX,0FFFH 
CMP DX,0 
JE G_MOV_1 
ADD EBX,1000H 
G_MOV_1: 
MOV DX,OS_CODE_LEN 
AND DX,0F000H 
ADD EBX,EDX 
ADD EBX,23000H 
 
SEG_MOV OS_STACK_SEL,GDT_MOV_SEL,0,EBX,OS_STACK_LEN 
 
;MOV EBX,DS:OS_DATA_ADDR 
;SUB EBX,0C0400000H 
 
MOV DX,OS_STACK_LEN 
AND DX,0FFFH 
CMP DX,0 
JE G_MOV_2 
ADD EBX,1000H 
G_MOV_2: 
MOV DX,OS_STACK_LEN 
AND DX,0F000H 
ADD EBX,EDX 
SEG_MOV OS_DATA_SEL,GDT_MOV_SEL,0,EBX,OS_DATA_LEN 
 
SEGS_MOV_2M ENDP 
 
INIT_PDT	PROC 
	MOV AX,GDT_PDT_SEL 
	MOV ES,AX 
	XOR DI,DI 
	MOV CX,1024 
	XOR EAX,EAX 
	REP STOSD 
	MOV EAX,GDT_PDT0_ADDR OR 3 
 
	MOV DWORD PTR ES:[0],EAX 
	ADD EAX,1000H 
	MOV DWORD PTR ES:[4],EAX 
	ADD EAX,1000H 
	MOV DWORD PTR ES:[3072],EAX 
	ADD EAX,1000H 
	MOV DWORD PTR ES:[3076],EAX 
 
	MOV AX,GDT_PDT0_SEL 
	MOV ES,AX 
	XOR DI,DI 
	MOV CX,2048 
	XOR EAX,EAX 
	OR EAX,3 
 
INIT_PGT0: 
	STOSD 
	ADD EAX,1000H 
	LOOP INIT_PGT0 
 
	MOV CX,1024 
	MOV EAX,0A0000H 
	OR EAX,3 
INIT_PGT768: 
	STOSD 
	ADD EAX,1000H 
	LOOP INIT_PGT768 
 
	MOV CX,53H 
 
	MOV EAX,200000H 
	OR EAX,3 
INIT_PGT769: 
	STOSD 
	ADD EAX,1000H 
	LOOP INIT_PGT769 
 
	RET 
INIT_PDT	ENDP