	org 7C00h
	mov bx,0b800h
	mov ax,cs
	mov ds,ax
	mov ss,ax
	mov fs,bx
	mov ax,210h
	mov cx,2
	mov dh,0
	push word 60h
	pop es
	mov bx,0
	int 13h
	jmp 0:600h
times 510-($-$$) db 0
dw 0aa55h
	org 600h
	push cs cs
	pop ds ss
	mov si,ok.boot
	mov bx,0
	mov ah,[txt.col]
@@:
	mov al,[si]
	cmp al,0
	je @f
	inc si
	mov [fs:bx],ax
	add bx,2
	jmp @b
@@:
	in al,60h
	cmp al,1
	jne @b
	mov ax,13h
	int 10h
	cli
	lgdt [gdt_desc]
	mov eax,cr0
	or al,1
	mov cr0,eax
	jmp 8*1:debut32
debut32:
use32
	mov ebx,8*2
	mov ds,bx
	mov es,bx
	mov gs,bx
	mov ss,bx
	mov bx,8*6
	mov fs,bx
	mov esp,90000h
@@:
	mov esi,tete
	call put32
	in al,60h
	cmp al,1
	jne @b
	inc [colvar]
	jmp @b
txt:
.col db 71h
ok:
.boot db "boot OK!",0
.pm db "mode protege OK!",0
align 8
align 2
gdt_desc:
dw gdt_end - gdt - 1
dd gdt
align 16
gdt:
.0:
.null dq 0
.1:
.flatcode:
dw 0ffffh,0
db 0,10011010b,11001111b,0
.2:
.flatdata:
dw 0ffffh,0
db 0,10010010b,11001111b,0
.3:
.comcodesegment:
dw 0ffffh,1000h
db 0,10011010b,01001111b,0
.4:
.comdatasegment:
dw 0ffffh,1000h
db 0,10010010b,01001111b,0
.5:
.textscreen:
dw 160*50,8000h
db 0bh,10010010b,01000000b,0
.6:
.graphicscreen:
dw 320*200,0
db 0ah,10010010b,01000000b,0
gdt_end:
align 512
put32:
	 mov ecx,[.x]
	 mov edi,[.y]
	 shl edi,2
	 add edi,[.y]
	 shl edi,6
	 add edi,[.x]
	 mov eax,[esi+00]
	 mov ebx,[esi+04]
	 add esi,8
	 mov [.xl],eax
	 mov [.yl],ebx
.boite:
	 mov dl,[esi]
	 inc esi
	 cmp edi,320*200
	 jge .ignore
	 cmp ecx,0
	 jl .ignore
	 cmp ecx,320
	 jge .ignore
	 cmp edi,0
	 jl .ignore
	 cmp dl,[.cinv]
	 je .ignore
	 add dl,[colvar]
	 mov [fs:edi],dl
.ignore:
	 inc edi
	 inc ecx
	 dec eax
	 jne .boite
	 mov eax,0
	 mov eax,[.xl]
	 sub edi,eax
	 sub ecx,eax
	 add edi,320
	 dec ebx
	 jne .boite
.fin:
	 ret
.x dd 10
.y dd 10
.xl rd 1
.yl rd 1
.cinv db 0
colvar db 0
align 4
tete:
.xl dd 12
.yl dd 18
db 000,000,000,024,028,030,030,028,024,000,000,000
db 000,000,028,030,031,031,031,031,030,028,022,000
db 000,024,030,031,031,031,031,031,031,030,028,000
db 000,028,031,030,030,030,030,031,031,031,030,024
db 024,030,030,030,030,030,030,030,030,030,030,028
db 028,031,030,030,029,029,030,030,030,029,030,030
db 030,029,030,028,028,028,028,029,027,027,028,029
db 029,022,029,026,026,026,025,030,024,026,024,029
db 028,022,028,024,023,022,026,030,022,023,027,030
db 029,027,029,029,028,027,028,030,026,026,028,030
db 024,030,030,029,030,030,030,030,030,028,030,030
db 000,030,029,029,030,030,030,031,031,030,030,028
db 000,029,028,028,029,030,029,029,030,030,030,024
db 000,024,028,028,027,029,027,027,029,030,031,000
db 000,000,024,027,027,028,028,028,029,029,026,000
db 000,000,000,024,028,028,028,028,029,027,022,000
db 000,000,000,000,023,029,030,030,030,024,000,000
db 000,000,000,000,000,000,000,000,000,000,000,000


