Interrupts are (for the most part) working
This commit is contained in:
parent
c2f8ccdf2e
commit
1b3503bef6
BIN
bin/shade.bin
BIN
bin/shade.bin
Binary file not shown.
BIN
bin/shade.iso
BIN
bin/shade.iso
Binary file not shown.
|
@ -9,33 +9,53 @@ static int err_count = 0;
|
|||
|
||||
typedef struct {
|
||||
struct {
|
||||
uint64_t cr4;
|
||||
uint64_t cr3;
|
||||
uint64_t cr2;
|
||||
uint64_t cr0;
|
||||
} control_registers;
|
||||
uint64_t resv0;
|
||||
uint64_t resv1;
|
||||
uint64_t resv2;
|
||||
uint64_t resv3;
|
||||
} broken;
|
||||
|
||||
struct {
|
||||
uint64_t rdi;
|
||||
uint64_t rsi;
|
||||
uint64_t rdx;
|
||||
uint64_t rcx;
|
||||
uint64_t rbx;
|
||||
uint64_t rax;
|
||||
} general_registers;
|
||||
uint64_t resv0;
|
||||
uint64_t resv1;
|
||||
uint64_t resv2;
|
||||
uint64_t resv3;
|
||||
uint64_t resv4;
|
||||
uint64_t resv5;
|
||||
} broken_2;
|
||||
|
||||
struct {
|
||||
uint64_t rbp;
|
||||
uint64_t vector;
|
||||
uint64_t resv0;
|
||||
uint64_t error_code;
|
||||
uint64_t rip;
|
||||
uint64_t cs;
|
||||
uint64_t rflags;
|
||||
uint64_t rsp;
|
||||
uint64_t dss;
|
||||
uint64_t resv1;
|
||||
uint64_t vector;
|
||||
uint64_t resv2;
|
||||
uint64_t resv3;
|
||||
uint64_t resv4;
|
||||
uint64_t resv5;
|
||||
} base_frame;
|
||||
} isr_xframe_t;
|
||||
|
||||
/*
|
||||
List of pushed things in order:
|
||||
error_code
|
||||
vector
|
||||
rbp
|
||||
rax
|
||||
rbx
|
||||
rcx
|
||||
rdx
|
||||
rsi
|
||||
rdi
|
||||
cr0
|
||||
cr2
|
||||
cr3
|
||||
cr4
|
||||
ds
|
||||
0
|
||||
|
||||
*/
|
||||
|
||||
__attribute__((noreturn))
|
||||
void exception_handler(isr_xframe_t frame);
|
||||
|
||||
|
|
|
@ -74,6 +74,7 @@ isr_xframe_assembler:
|
|||
mov ss, ax
|
||||
|
||||
lea rdi, [rsp + 0x10]
|
||||
|
||||
call exception_handler
|
||||
|
||||
pop rax
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#include <shade/platform/interrupts/isr.h>
|
||||
|
||||
void exception_handler(isr_xframe_t frame) {
|
||||
err_count++;
|
||||
char s[256];
|
||||
itoa(err_count, s);
|
||||
print_str(" ");
|
||||
|
@ -10,13 +9,11 @@ void exception_handler(isr_xframe_t frame) {
|
|||
print_str(": cpu: check_exception ");
|
||||
itoa(frame.base_frame.vector, s);
|
||||
print_str(s);
|
||||
print_str(" @ ");
|
||||
itoa(frame.base_frame.rip, s);
|
||||
print_str(s);
|
||||
print_str(" err_code => ");
|
||||
itoa(frame.base_frame.error_code, s);
|
||||
print_str(s);
|
||||
print_str("\n");
|
||||
err_count++;
|
||||
if (err_count > ERR_MAX) {
|
||||
print_str("cpu: ierr hit err_max, halt");
|
||||
__asm__ __volatile__("cli; hlt");
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
#include <shade/platform/ports.h>
|
||||
|
||||
/*
|
||||
* Read 1 byte from specified port
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue