All pastes #21513 Raw Edit

Stuff

public text v1 · immutable
#21513 ·published 2005-08-29 18:12 UTC
rendered paste body
		bits 16
		org 0
		section .text
		cli
		mov ax, cs
		mov ds, ax
		mov es, ax
		mov fs, ax
		mov gs, ax
		mov ss, ax
		mov sp, 0FFFEh
		cld
		
		; prepare page directory
		xor ax, ax
		mov es, ax
		mov di, 3000h
		mov ecx, 4096/4
		xor eax, eax
		rep stosd
		mov dword [es:3000h], 04001h
		mov dword [es:3000h+0F00h], 05001h
		mov dword [es:3000h+0FFCh], 06001h
		
		; prepare page tables
		mov edx, 1
		mov ecx, 0
pg_tbl_lpstart: mov [es:4000h + ecx*4], edx
                lea ebx, [edx + 0100000h]
                mov [es:5000h + ecx*4], ebx
                mov dword [es:6000h + ecx*4], 0
                mov dword [es:7000h + ecx*4], 0 ; clear stack too
		inc ecx
		add edx, 1000h
		cmp ecx, 1024
		jb pg_tbl_lpstart
		mov dword [es:6000h + 0FFCh], 07001h
		
		; prepare gdt
		mov ax, 01000h
		mov es, ax
		mov di, 0
		mov ecx, 16384
		xor eax, eax
		rep stosd
		mov dword [es:8], 00000FFFFh
		mov dword [es:8+4], 000CF9A00h
		mov dword [es:16], 00000FFFFh
		mov dword [es:16+4], 000CF9200h

to_pm:          mov eax, 03000h
                mov cr3, eax
                lgdt [gdt_limit]
                mov eax, cr0
		or eax, 80000001h
		mov cr0, eax
		jmp dword 8:0F0000004h

                section .data
		align 4
		dw 0
gdt_limit       dw 0FFFFh
gdt_base        dd 010000h