Graphics mode & linear framebuffer update #1
@@ -41,8 +41,13 @@ void gdt_install()
|
|||||||
|
|
||||||
gdt_set_gate(0, 0, 0, 0, 0);
|
gdt_set_gate(0, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
// Ring 0 code + data
|
||||||
gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);
|
gdt_set_gate(1, 0, 0xFFFFFFFF, 0x9A, 0xCF);
|
||||||
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
|
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
|
||||||
|
|
||||||
|
// Ring 3
|
||||||
|
gdt_set_gate(3, 0, 0xFFFFFFFF, 0xFA, 0xCF);
|
||||||
|
gdt_set_gate(4, 0, 0xFFFFFFFF, 0xF2, 0xCF);
|
||||||
|
|
||||||
gdt_flush();
|
gdt_flush();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,225 +49,55 @@ idt_load:
|
|||||||
lidt [idtp]
|
lidt [idtp]
|
||||||
ret
|
ret
|
||||||
|
|
||||||
global isr0
|
%macro ISR_NOERRCODE 1
|
||||||
global isr1
|
global isr%1
|
||||||
global isr2
|
isr%1:
|
||||||
global isr3
|
|
||||||
global isr4
|
|
||||||
global isr5
|
|
||||||
global isr6
|
|
||||||
global isr7
|
|
||||||
global isr8
|
|
||||||
global isr9
|
|
||||||
global isr10
|
|
||||||
global isr11
|
|
||||||
global isr12
|
|
||||||
global isr13
|
|
||||||
global isr14
|
|
||||||
global isr15
|
|
||||||
global isr16
|
|
||||||
global isr17
|
|
||||||
global isr18
|
|
||||||
global isr19
|
|
||||||
global isr20
|
|
||||||
global isr21
|
|
||||||
global isr22
|
|
||||||
global isr23
|
|
||||||
global isr24
|
|
||||||
global isr25
|
|
||||||
global isr26
|
|
||||||
global isr27
|
|
||||||
global isr28
|
|
||||||
global isr29
|
|
||||||
global isr30
|
|
||||||
global isr31
|
|
||||||
|
|
||||||
; Interrupt service routine exceptions
|
|
||||||
isr0:
|
|
||||||
cli
|
cli
|
||||||
push byte 0
|
push byte 0
|
||||||
push byte 0
|
push byte %1
|
||||||
jmp isr_common_stub
|
jmp isr_common_stub
|
||||||
|
%endmacro
|
||||||
|
|
||||||
isr1:
|
%macro ISR_ERRCODE 1
|
||||||
|
global isr%1
|
||||||
|
isr%1:
|
||||||
cli
|
cli
|
||||||
push byte 0
|
push byte %1
|
||||||
push byte 1
|
|
||||||
jmp isr_common_stub
|
jmp isr_common_stub
|
||||||
|
%endmacro
|
||||||
|
|
||||||
isr2:
|
ISR_NOERRCODE 0
|
||||||
cli
|
ISR_NOERRCODE 1
|
||||||
push byte 0
|
ISR_NOERRCODE 2
|
||||||
push byte 2
|
ISR_NOERRCODE 3
|
||||||
jmp isr_common_stub
|
ISR_NOERRCODE 4
|
||||||
|
ISR_NOERRCODE 5
|
||||||
isr3:
|
ISR_NOERRCODE 6
|
||||||
cli
|
ISR_NOERRCODE 7
|
||||||
push byte 0
|
ISR_ERRCODE 8
|
||||||
push byte 3
|
ISR_NOERRCODE 9
|
||||||
jmp isr_common_stub
|
ISR_ERRCODE 10
|
||||||
|
ISR_ERRCODE 11
|
||||||
isr4:
|
ISR_ERRCODE 12
|
||||||
cli
|
ISR_ERRCODE 13
|
||||||
push byte 0
|
ISR_ERRCODE 14
|
||||||
push byte 4
|
ISR_NOERRCODE 15
|
||||||
jmp isr_common_stub
|
ISR_NOERRCODE 16
|
||||||
|
ISR_NOERRCODE 17
|
||||||
isr5:
|
ISR_NOERRCODE 18
|
||||||
cli
|
ISR_NOERRCODE 19
|
||||||
push byte 0
|
ISR_NOERRCODE 20
|
||||||
push byte 5
|
ISR_NOERRCODE 21
|
||||||
jmp isr_common_stub
|
ISR_NOERRCODE 22
|
||||||
|
ISR_NOERRCODE 23
|
||||||
isr6:
|
ISR_NOERRCODE 24
|
||||||
cli
|
ISR_NOERRCODE 25
|
||||||
push byte 0
|
ISR_NOERRCODE 26
|
||||||
push byte 6
|
ISR_NOERRCODE 27
|
||||||
jmp isr_common_stub
|
ISR_NOERRCODE 28
|
||||||
|
ISR_NOERRCODE 29
|
||||||
isr7:
|
ISR_NOERRCODE 30
|
||||||
cli
|
ISR_NOERRCODE 31
|
||||||
push byte 0
|
|
||||||
push byte 7
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr8:
|
|
||||||
cli
|
|
||||||
push byte 8
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr9:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 9
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr10:
|
|
||||||
cli
|
|
||||||
push byte 10
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr11:
|
|
||||||
cli
|
|
||||||
push byte 11
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr12:
|
|
||||||
cli
|
|
||||||
push byte 12
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr13:
|
|
||||||
cli
|
|
||||||
push byte 13
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr14:
|
|
||||||
cli
|
|
||||||
push byte 14
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr15:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 15
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr16:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 16
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr17:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 17
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr18:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 18
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr19:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 19
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr20:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 20
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr21:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 21
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr22:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 22
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr23:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 23
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr24:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 24
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr25:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 25
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr26:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 26
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr27:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 27
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr28:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 28
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr29:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 29
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr30:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 30
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
isr31:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 31
|
|
||||||
jmp isr_common_stub
|
|
||||||
|
|
||||||
extern fault_handler
|
extern fault_handler
|
||||||
|
|
||||||
@@ -295,118 +125,31 @@ isr_common_stub:
|
|||||||
add esp, 8
|
add esp, 8
|
||||||
iret
|
iret
|
||||||
|
|
||||||
global irq0
|
%macro IRQ 2
|
||||||
global irq1
|
global irq%1
|
||||||
global irq2
|
irq%1:
|
||||||
global irq3
|
|
||||||
global irq4
|
|
||||||
global irq5
|
|
||||||
global irq6
|
|
||||||
global irq7
|
|
||||||
global irq8
|
|
||||||
global irq9
|
|
||||||
global irq10
|
|
||||||
global irq11
|
|
||||||
global irq12
|
|
||||||
global irq13
|
|
||||||
global irq14
|
|
||||||
global irq15
|
|
||||||
|
|
||||||
irq0:
|
|
||||||
cli
|
cli
|
||||||
push byte 0
|
push byte 0
|
||||||
push byte 32
|
push byte %2
|
||||||
jmp irq_common_stub
|
jmp irq_common_stub
|
||||||
|
%endmacro
|
||||||
|
|
||||||
irq1:
|
IRQ 0, 32
|
||||||
cli
|
IRQ 1, 33
|
||||||
push byte 0
|
IRQ 2, 34
|
||||||
push byte 33
|
IRQ 3, 35
|
||||||
jmp irq_common_stub
|
IRQ 4, 36
|
||||||
|
IRQ 5, 37
|
||||||
irq2:
|
IRQ 6, 38
|
||||||
cli
|
IRQ 7, 39
|
||||||
push byte 0
|
IRQ 8, 40
|
||||||
push byte 34
|
IRQ 9, 41
|
||||||
jmp irq_common_stub
|
IRQ 10, 42
|
||||||
|
IRQ 11, 43
|
||||||
irq3:
|
IRQ 12, 44
|
||||||
cli
|
IRQ 13, 45
|
||||||
push byte 0
|
IRQ 14, 46
|
||||||
push byte 35
|
IRQ 15, 47
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq4:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 36
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq5:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 37
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq6:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 38
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq7:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 39
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq8:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 40
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq9:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 41
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq10:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 42
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq11:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 43
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq12:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 44
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq13:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 45
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq14:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 46
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
irq15:
|
|
||||||
cli
|
|
||||||
push byte 0
|
|
||||||
push byte 47
|
|
||||||
jmp irq_common_stub
|
|
||||||
|
|
||||||
extern irq_handler
|
extern irq_handler
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user