mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2025-11-22 08:35:27 -08:00
2
Makefile
2
Makefile
@@ -37,7 +37,7 @@ $(BUILD_DIR)/%.o: kernel/%.c
|
||||
$(CC) -std=c11 -ffreestanding -nostdlib -fno-stack-protector -m32 -g -c -o $@ $<
|
||||
|
||||
kernel: $(KERNEL_OBJ) | $(BUILD_DIR)
|
||||
$(LD) -melf_i386 -Tbootloader/linker.ld -o $(BUILD_DIR)/kernel.elf $(KERNEL_OBJ)
|
||||
$(LD) -melf_i386 -Tkernel/linker.ld -o $(BUILD_DIR)/kernel.elf $(KERNEL_OBJ)
|
||||
|
||||
$(DISK_IMG): stage1 stage2 kernel
|
||||
dd if=$(BUILD_DIR)/stage1.bin of=$@
|
||||
|
||||
24
kernel/irq.c
24
kernel/irq.c
@@ -1,3 +1,4 @@
|
||||
#include "idt.h"
|
||||
#include "irq.h"
|
||||
#include "io.h"
|
||||
#include "isr.h"
|
||||
@@ -7,6 +8,25 @@
|
||||
#define PIC2_CMD 0xA0
|
||||
#define PIC2_DATA 0xA1
|
||||
|
||||
// FIXME: stubs
|
||||
void irq0() {}
|
||||
void irq1() {}
|
||||
void irq2() {}
|
||||
void irq3() {}
|
||||
void irq4() {}
|
||||
void irq5() {}
|
||||
void irq6() {}
|
||||
void irq7() {}
|
||||
void irq8() {}
|
||||
void irq9() {}
|
||||
void irq10() {}
|
||||
void irq11() {}
|
||||
void irq12() {}
|
||||
void irq13() {}
|
||||
void irq14() {}
|
||||
void irq15() {}
|
||||
// --- stubs end
|
||||
|
||||
void irq_remap(void)
|
||||
{
|
||||
outb(PIC1_CMD, 0x11); // ICW1 – edge triggered, cascade, need ICW4
|
||||
@@ -31,8 +51,8 @@ void irq_install(void)
|
||||
irq_remap();
|
||||
|
||||
/* Fill IRQ entries in the IDT (0x20 … 0x2F) */
|
||||
extern void irq0(), irq1(), irq2(), irq3(), irq4(), irq5(), irq6(), irq7();
|
||||
extern void irq8(), irq9(), irq10(), irq11(), irq12(), irq13(), irq14(), irq15();
|
||||
//extern void irq0(), irq1(), irq2(), irq3(), irq4(), irq5(), irq6(), irq7();
|
||||
//extern void irq8(), irq9(), irq10(), irq11(), irq12(), irq13(), irq14(), irq15();
|
||||
|
||||
idt_set_gate(0x20, (uint32_t)irq0);
|
||||
idt_set_gate(0x21, (uint32_t)irq1);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef IRQ_H
|
||||
#define IRQ_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
void irq_remap(void);
|
||||
void irq_install(void);
|
||||
void irq_handler(uint32_t int_num);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "io.h"
|
||||
#include "print.h"
|
||||
|
||||
static isr_callback_t interrupt_handlers[MAX_INTERRUPTS] = { 0 };
|
||||
isr_callback_t interrupt_handlers[MAX_INTERRUPTS] = { 0 };
|
||||
|
||||
void isr_handler(uint32_t int_num, uint32_t err_code) {
|
||||
terminal_write("Interrupt occurred: ");
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define MAX_INTERRUPTS 256
|
||||
|
||||
typedef void (*isr_callback_t)(void);
|
||||
extern isr_callback_t interrupt_handlers[MAX_INTERRUPTS];
|
||||
|
||||
void isr_handler(uint32_t int_num, uint32_t err_code);
|
||||
void register_interrupt_handler(uint8_t n, isr_callback_t handler);
|
||||
|
||||
@@ -11,7 +11,7 @@ extern "C" {
|
||||
/* C11 / POSIX-2004 signatures */
|
||||
void *memcpy(void *restrict dst, const void *restrict src, size_t n);
|
||||
void *memmove(void *dst, const void *src, size_t n);
|
||||
/*int memcmp(const void *s1, const void *s2, size_t n); */
|
||||
int memcmp(const void *s1, const void *s2, size_t n);
|
||||
|
||||
/* Optional fast-path using 32-bit loads (x86 only) */
|
||||
#if defined(__i386__) && !defined(MEMORY_NO_OPT)
|
||||
|
||||
@@ -77,16 +77,6 @@ char* utoa(unsigned int value, char* str, int base) {
|
||||
return str;
|
||||
}
|
||||
|
||||
int memcmp(const void *ptr1, const void *ptr2, size_t num) {
|
||||
const uint8_t *p1 = ptr1, *p2 = ptr2;
|
||||
for (size_t i = 0; i < num; i++) {
|
||||
if (p1[i] != p2[i]) {
|
||||
return p1[i] < p2[i] ? -1 : 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *memset(void *dest, int value, size_t len) {
|
||||
unsigned char *ptr = (unsigned char *)dest;
|
||||
while (len-- > 0)
|
||||
|
||||
@@ -9,7 +9,6 @@ char* itoa(int value, char* str, int base);
|
||||
// Convert unsigned integer to string (base is typically 10, 16, etc.)
|
||||
char* utoa(unsigned int value, char* str, int base);
|
||||
|
||||
int memcmp(const void *ptr1, const void *ptr2, size_t num);
|
||||
void *memset(void *dest, int value, size_t len);
|
||||
|
||||
#endif // UTILS_H
|
||||
|
||||
Reference in New Issue
Block a user