; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CORRUPTED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;   Sorry, after my disk-crash, I can't found any backup of this file, please
; refer to documentation for more informations or to next part (6th)...
;                                                                      THANX!
;Ŀ
;           PMode Tutorial (c) 1996 MATTsoft, All rights reserved.          
;Ĵ
;THiS iS EXAMPLE (5th) New segment organization(CODE32,DATA32,CODE16,DATA16)
;                     G00D LuCK!                  
;

;  IMPORTANT 
;  Select your graphics card 
 VIDEO_SEG equ 0B0000h	; for HERCULES
;VIDEO_SEG equ 0B8000h	; for VGA
; 

LOCALS @@
;
CODE16  SEGMENT BYTE PUBLIC 'CODE'
        ASSUME CS:CODE16,DS:DATA16
        .386
	.386P
;
Start:  mov ax,DATA16
	mov ds,ax
	mov es,ax
;
        call CheckProcessor                     ; Check if 386+
	call CheckV86				; Check V86 mode
        call EnableA20
;
	ASSUME DS:DATA32
        ;
        xor eax,eax
        mov ax,DATA32
        mov ds,ax
        ;
        shl eax,4
        add dword ptr ds:[GDT+2],eax
        ;
        xor eax,eax
        mov ax,CODE16
        shl eax,4
        add dword ptr ds:[GDT_Code16+2],eax
        ;
        xor eax,eax
        mov ax,CODE32
        shl eax,4
        add dword ptr ds:[GDT_Code32+2],eax
        ;
        xor eax,eax
        mov ax,DATA32
        shl eax,4
        add dword ptr ds:[GDT_Data32+2],eax
        ;
        xor eax,eax
        mov ax,DATA16
        shl eax,4
        add dword ptr ds:[GDT_Data16+2],eax
;
	cli
        lgdt fword ptr ds:[GDT]                 ; Load GDTR
        mov eax,cr0
        or al,1
        mov cr0,eax                             ; Set Pmode
        mov ax,CORE32_idx
	mov ds,ax
	mov es,ax
	mov gs,ax
	mov fs,ax
;
        db 0EAh
        dw 0
        dw CODE32_idx
Exit16:
;
        mov eax,cr0
        xor al,1
        mov cr0,eax                             ; Return back to real :-(
;
        mov ax,4c00h
        int 21h                                 ; ... and terminate
;
;                               $0ME R0UTiNES...

;
; Checks if the processor is 386+
CheckProcessor:
	pushf			; save flags for later
        xor ah,ah               ; clear high byte
        push ax                 ; push AX on the stack
	popf			; pop this value into the flag register
	pushf			; push flags on the stack
        pop ax                  ; ...and get flags into AX
        and ah,0f0h             ; try to set the high nibble
        cmp ah,0f0h             ; on a 80386, the high nibble can never be 0f0h
        je @@1                  ; ...
        mov ah,70h              ; now try to set NT and IOPL
        push ax                 ;
        popf                    ;
        pushf                   ;
        pop ax                  ;
        and ah,70h              ; if they couldn't be modified, no 386 is installed
        jz @@1                  ; ...
	popf			; restore flags
        retn                    ; and return
@@1:    mov dx,offset no386err  ; if there is no 386,                                 L@Owl'(e     ox   ao3aai3ao3aai3ao3aai3ao3aaiaai3ao3aaiaai3ao3aa      v ax,CODE3GIGBG9idx
Exit16:
;Iailg
	cli
        lgdt fwor  pop ax                  ;
  ; ...@    $0dncd
   
        mov eax,cr0
          v          6;e,eIailg
	cli
        lgdt  
        mov eax,cr0
  ufset no386err  y   3cr0,eax                            ac;;wlaaaaaafaafaafaafaafaafaafaa86err,aaaain'3wlaaaaaaL86err,aaaain'3wlaaaaaaL8rn
@@1         ; ani86 is installed
    ; L,,,,aaL8rn
@@1         ; ani86 is in;dIm aieRtsi86 is in;	 ; Co     lgdtgTb    lgdttttt eaaff$oi;3b    lgdttttt eaaff$oi;3b    lgdtttlAtlAtlAfgdtgTb    le@aain'ain'3wla        lgdttttt eaeLlgdtt   ; 9           Aeaax,cr0
          v          6;e,e 660Al    '(G9x.xUcr0
          v          6;e,aAca  ac;   v          6;e,aAca  1 o       ,e,aA,aAn
   Aeaax,cr0
          v          nG9op ax                  ; ...a'(e      Ti installed
    ; Le0000    E   G9op ax                lr          l         E             3t f	   l         E         0f0f0linaaaaaaaaaigh nibble can never be  l ldn't b              lr ;    ; tyo   Bh       Oaei 6;lsg_nn't    o
i         ac;;wlaaaaABh sDd, no 3 6;e,aAcae0000die      xor ah,a;e,aAcae0000die      ; D; tyo   Bh no 3 6;e,aAcae0000die      xor  6;len't    o
i         ac;;wlaaaaAB  ; eaw0B ut    o
i         ac;     3t f	L
  6;la:  E       Ci)M$ ; :inaaaaaaaa   Bh       Oaei           Oaefrocessor        Oaefrocessor        Oaefrl660    Oaefrocessorh      rh      rh      rh      rGMfeR6no inaaaaaaaa   Bh $rl660    Oaefrocessorh      rh  ;lh      ain'ain'3wla  d  ac;     3t f	L
  6;la:  2iR6 o
if  vA o
if  vA o
if  vAeR6 o
iDlaa      v ax,COD 3aa      v ax,CODE3GIG v ax,Cac;     3t f	L
 rNk=fwor  po eEna AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA	 M    AAAAAAAAAAA	 M    AAAAAAAAAAA	 EeaAcae0000di4Nk=1wor  po eEna AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAACorenaaaaaaaAAAAffffhaaaaaaaaaaaaaaaaaaaaaaaAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAA1       ;aaaaaaaaaaaaaaaaaaaaAAAAAP=1,DPL=0,ED=0,W=1,A=0AAA 	AAAAAAAAAAAAAAAAA anni86 ;aaaaaaaaaaaaaaaaaaaaAAAAAAAG=1,s=1],      v16AAA9AAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0000di4Nk=1wor  po eEna AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAACodenaaaaaaaAAAAffffhaaaaaaaaaaaaaaaaaaaaaaaAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAA1   1   ;aaaaaaaaaaaaaaaaaaaaAAAAAP=1,DPL=0,C=0,R=1,A=0AAA 	AAAAAAAAAAAAAAAAA anni86 ;aaaaaaaaaaaaaaaaaaaaAAAAAAAG=1,s=0],      v16AAA9AAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0000di4Nk=1wor  po eEna AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAADatanaaaaaaaAAAAffffhaaaaaaaaaaaaaaaaaaaaaaaAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAA1       ;aaaaaaaaaaaaaaaaaaaaAAAAAP=1,DPL=0,ED=0,W=1,A=0AAA 	AAAAAAAAAAAAAAAAA anni86 ;aaaaaaaaaaaaaaaaaaaaAAAAAAAG=1,s=1],      v16AAA9AAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0000di4Nk=1wor  po eEna AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAACode16AAAAAAAAAAffffhaaaaaaaaaaaaaaaaaaaaaaaAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 	AAAAAAAAAAAAAAAAAAAAAAAAA1   1   ;aaaaaaaaaaaa	>Ru P,/5!t* C/<u!P&.xC/PlVD%rPf)JP5>r2G/5!t; /$t$<t<t>r222F/u2À>
sEDQS+!t	0POu:P=  e#r!P(6e!r9 Pv 2< t<	u3ɉ5N63@9@ ;r P +؁s75 ue׹ uM&
t< t<	uG563u+@ ;vϰ:u&n<Ar<Zw&}St7+σPv듌eW+^s rP,>Pi~ub3XSڋ\rE^ Mt 0 *>*> ;D  *D D  D*D@ D
 VD.Ǆ M>rƄ u/6u@ t6t66A VWPpP&AXPP@>@ tP%.&A^t t@u?!	!4N!	!$(tU5 2s!#_^VWPd"t>(u79tP#)Q$ Ys	,:tP,,  _^W󤾹 	 X%ACDEFKPRYZ/[.a.v.~. !"#$&'()*+,-.4<=>AGHIS        ]^_`ahjpux}