feat(kernel): load tss
This commit is contained in:
		
							parent
							
								
									40d3009b1a
								
							
						
					
					
						commit
						4b8036b192
					
				
					 4 changed files with 48 additions and 7 deletions
				
			
		|  | @ -111,7 +111,7 @@ cga_putc: | |||
| 	; scroll up | ||||
| 	push esi | ||||
| 	push edi | ||||
| 	mov ecx, CGA_COLUMNS*(CGA_LINES)*2 | ||||
| 	mov ecx, CGA_COLUMNS*(CGA_LINES) | ||||
| 	mov edi, CGA_MEMORY | ||||
| 	mov esi, CGA_MEMORY+80*2 | ||||
| 	rep movsw | ||||
|  |  | |||
|  | @ -23,8 +23,12 @@ gdt: | |||
| 
 | ||||
| 	; Tss | ||||
| .tss: | ||||
| 	dw ? | ||||
| 	dd ? | ||||
| 	.limit  dw ? | ||||
| 	.base   dw ? | ||||
| 	.baseh0 db ?  | ||||
| 	.access db ? | ||||
| 	.flags  db ? | ||||
| 	.baseh1 db ? | ||||
| 
 | ||||
| .end: | ||||
| 	 | ||||
|  | @ -33,5 +37,32 @@ pGDT: | |||
| 	dd gdt | ||||
| 
 | ||||
| gdt_set_tss: | ||||
| 	 | ||||
| 	mov ecx, sizeof.TSS | ||||
| 	mov [gdt.limit], cx | ||||
| 	mov [gdt.base], ax | ||||
| 
 | ||||
| 	shr ecx, 16 | ||||
| 	shr eax, 16 | ||||
| 
 | ||||
| 	mov [gdt.baseh0], al | ||||
| 	mov [gdt.baseh1], ah | ||||
| 	mov al, 0x89 | ||||
| 	mov [gdt.access], al | ||||
| 
 | ||||
| 	and cl, 0xF | ||||
| 	or cl, 0x40 | ||||
| 	mov [gdt.flags], cl | ||||
| 	ret | ||||
| 
 | ||||
| gdt_flush: | ||||
| 	; load kernel gdt  | ||||
| 	lgdt [pGDT] | ||||
| 	jmp 0x08:@f | ||||
| @@: | ||||
| 	mov ax, 0x10 | ||||
| 	mov ds, ax | ||||
| 	mov es, ax | ||||
| 	mov fs, ax | ||||
| 	mov gs, ax | ||||
| 	mov ss, ax | ||||
| 	ret | ||||
|  |  | |||
|  | @ -58,9 +58,18 @@ kmain: | |||
| 
 | ||||
| 	call pic_init | ||||
| 
 | ||||
| 	; load kernel gdt  | ||||
| 	lgdt [pGDT] | ||||
| 	; I don't think i need to reload segment cuz their value are already correct | ||||
| 	; clear tss | ||||
| 	mov ecx, sizeof.TSS | ||||
| 	xor ax, ax | ||||
| 	mov edi, kTSS | ||||
| 	rep movsb | ||||
| 
 | ||||
| 	mov cx, 0xdfff | ||||
| 	mov eax, kTSS | ||||
| 	mov [eax + TSS.iomap], cx | ||||
| 
 | ||||
| 	call gdt_set_tss | ||||
| 	call gdt_flush | ||||
| 
 | ||||
| 	call idt_setup | ||||
| 
 | ||||
|  |  | |||
|  | @ -87,6 +87,7 @@ struc TSS { | |||
| 	.trap     dw ? | ||||
| 	.iomap    dw ? | ||||
| } | ||||
| DEFN TSS | ||||
| 
 | ||||
| struc GDTGate { | ||||
| 	 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue