From 91ed6bc29394eb6af178068af5662b095b7fa77c Mon Sep 17 00:00:00 2001 From: Mathieu Serandour Date: Thu, 23 Sep 2021 10:43:59 +0200 Subject: [PATCH] apci & lapic --- .gitignore | 2 +- Makefile | 11 +- disk_root/EFI/BOOT/BOOTX64.EFI | Bin 120777 -> 152839 bytes disk_root/boot/limine.cfg | 19 ++- disk_root/boot/limine.sys | Bin 93089 -> 113754 bytes kernel/Makefile | 53 +++---- kernel/acpi/acpi.c | 208 ++++++++++++++++++------- kernel/acpi/acpi.h | 14 +- kernel/acpi/acpitables.h | 182 +++++++++++++++++----- kernel/cpuid.h | 218 +++++++++++++------------- kernel/cpuid.s | 50 +++--- kernel/debug/dump.c | 231 ++++++++++++++-------------- kernel/debug/dump.h | 46 +++--- kernel/entry.c | 38 +++-- kernel/int/apic.c | 95 ++++++++++++ kernel/int/apic.h | 53 +++++++ kernel/int/idt.c | 222 ++++++++++++++------------ kernel/int/idt.h | 70 +++++---- kernel/int/idt.s | 12 +- kernel/int/isr.c | 265 +++++++++++++++----------------- kernel/klib/math.h | 6 + kernel/klib/sprintf.c | 38 +++-- kernel/linker.ld | 62 ++++++-- kernel/memory/kalloc.c | 17 +- kernel/regs.s | 38 ++++- kernel/video/terminal.c | 19 +-- kernel/video/terminal.h | 10 +- kernel/video/video.c | 139 ++++++++++++----- kernel/video/video.h | 3 + resources/bmp/charmap.bmp | Bin 147510 -> 41014 bytes resources/bmp/font_converter.py | 36 ++--- 31 files changed, 1351 insertions(+), 806 deletions(-) create mode 100644 kernel/int/apic.c create mode 100644 kernel/int/apic.h create mode 100644 kernel/klib/math.h diff --git a/.gitignore b/.gitignore index 5ab2831..74c5a08 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .vscode disk.hdd img_moint -limine-bootloader +limine-bootloader/ *.o include_cp *.elf \ No newline at end of file diff --git a/Makefile b/Makefile index 5c8c99e..63ba963 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,17 @@ HDD_ROOT := disc_root HDD_FILE := disk.hdd - + USED_LOOPBACK := /dev/loop6 +LIMINE_INSTALL := ./limine-bootloader/limine-install-linux-x86_64 + QEMU_PATH := "/mnt/d/Program Files/qemu/qemu-system-x86_64.exe" -QEMU_ARGS := -monitor stdio -d cpu_reset -bios "d:/Program Files/qemu/bios/OVMF.fd" +QEMU_ARGS := -monitor stdio -bios "d:/Program Files/qemu/bios/OVMF.fd" -m 256 -vga std -no-reboot +# -bios "d:/Program Files/qemu/bios/OVMF.fd" run: all - $(QEMU_PATH) $(QEMU_ARGS) $(HDD_FILE) + $(QEMU_PATH) $(QEMU_ARGS) -drive format=raw,file=$(HDD_FILE) all: disk @@ -22,7 +25,7 @@ $(HDD_FILE): kernel/entry.c sudo /sbin/parted -s $(HDD_FILE) mklabel gpt sudo /sbin/parted -s $(HDD_FILE) mkpart ESP fat32 2048s 100% sudo /sbin/parted -s $(HDD_FILE) set 1 esp on - ./limine-bootloader/limine-install $(HDD_FILE) + $(LIMINE_INSTALL) $(HDD_FILE) disk: kernel $(HDD_FILE) diff --git a/disk_root/EFI/BOOT/BOOTX64.EFI b/disk_root/EFI/BOOT/BOOTX64.EFI index 0968782bfe068266e02d158e1fac91bf600b97fe..e61f3446dd3f21a983bee5adcfdabf816edde931 100644 GIT binary patch literal 152839 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�klo(S6>a4QqQl^DN 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�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 Ut|s1l;Kl_e@$Mo@G3~_pf3xtQy#N3J literal 120777 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 =Yu9;k8cL@)siBo# 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 DPm^HT literal 93089 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 Fe**#^rUU>0 diff --git a/kernel/Makefile b/kernel/Makefile index 5c0b7be..a20be39 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -4,34 +4,31 @@ ASM := nasm ASM_FLAGS := -felf64 CFLAGS = -Wall -Wextra -O3 -pipe - -INTERNALLDFLAGS := \ - -fno-pic \ - -Wl,-static,--no-dynamic-linker,-ztext \ - -znocombreloc \ - -nostdlib \ - -Tlinker.ld \ - -z max-page-size=0x1000 - -INTERNALCFLAGS := \ - -znocombreloc \ - -I/opt/cross/include/ \ - -std=gnu11 \ - -ffreestanding \ - -fno-stack-protector \ - -fno-pic \ - -mno-80387 \ - -mno-mmx \ - -mno-3dnow \ - -mno-sse \ - -mno-sse2 \ - -mno-red-zone \ - -m64 +INTERNALLDFLAGS := -Tlinker.ld \ + -nostdlib \ + -Wl,--export-dynamic \ + -zmax-page-size=0x1000 \ + -static \ + -pie \ + -ztext +# ,--dynamic-linker + +INTERNALCFLAGS := -mgeneral-regs-only \ + -ffreestanding \ + -mno-red-zone \ + -mno-80387 \ + -fno-omit-frame-pointer \ + -std=gnu11 \ + -Wall -Wextra \ + -fcompare-debug-second \ + -I/opt/cross/include/ \ + -fpie CFILES := $(shell find ./ -type f -name '*.c') SFILES := $(shell find ./ -type f -name '*.s') -OBJ := $(SFILES:.s=.s.o) $(CFILES:.c=.c.o) charmap.bmp.o +OBJ := $(SFILES:.s=.s.o) $(CFILES:.c=.c.o) +#charmap.bmp.o .PHONY: all clean all: $(KERNEL) @@ -41,10 +38,10 @@ all: $(KERNEL) $(KERNEL): $(OBJ) $(CC) $(INTERNALLDFLAGS) $(OBJ) -o $@ -%.bmp.o: ../resources/bmp/%.bmp - $(LD) -r -b binary -o $@ $< -%.txt.o: ../resources/ascii/%.txt - $(LD) -r -b binary -o $@ $< +#%.bmp.o: ../resources/bmp/%.bmp +# $(LD) -r -b binary -o $@ $< +#%.txt.o: ../resources/ascii/%.txt +# $(LD) -r -b binary -o $@ $< %.c.o: %.c $(CC) $(CFLAGS) $(INTERNALCFLAGS) -c $< -o $@ diff --git a/kernel/acpi/acpi.c b/kernel/acpi/acpi.c index 76f504d..168f0df 100644 --- a/kernel/acpi/acpi.c +++ b/kernel/acpi/acpi.c @@ -1,55 +1,153 @@ -#include -#include -#include - -#include "acpi.h" -#include "../common.h" -#include "../debug/assert.h" -#include "../debug/dump.h" -#include "../klib/sprintf.h" -#include "acpitables.h" - - - -bool checksum(void* table, size_t size) { - uint8_t sum = 0; - uint8_t* raw = table; - - for(size_t i;size > 0; --size) { - sum += raw[i++]; - } - return sum == 0; -} - - -typedef uint64_t rsdp_entry_t; - - - -void read_acpi_tables(void* rsdp_location) { - struct RSDPDescriptor20* rsdpd = rsdp_location; - - - dump(rsdpd, sizeof(struct RSDPDescriptor20), 8, DUMP_HEX8); - - assert(rsdpd->firstPart.revision >= 2); - - // checksum for xsdt - assert(rsdpd->length == sizeof(rsdpd)); - assert(checksum(rsdpd, rsdpd->length)); - - - // lets parse it!! - const struct ACPISDTHeader* xsdt = (void *)rsdpd->xsdtAddress; - - size_t n_entries = (xsdt->length - sizeof(xsdt)) / sizeof(rsdp_entry_t); - - rsdp_entry_t* table = (xsdt + 1); - - for(int i = 0; i < n_entries; i++) { - - - kprintf("%3u: %s\n", table[i]) - //table[i] - } -} +#include +#include +#include + +#include "acpi.h" +#include "../common.h" +#include "../debug/assert.h" +#include "../debug/dump.h" +#include "../klib/sprintf.h" +#include "../klib/string.h" +#include "acpitables.h" +#include "../int/apic.h" + + +extern struct APICConfig* apic_config; + +static bool __ATTR_PURE__ checksum(const void* table, size_t size) { + uint8_t sum = 0; + const uint8_t* raw = table; + + for(size_t i;size > 0; --size) { + sum += raw[i++]; + } + return sum == 0; +} + +static void parse_madt(const struct MADT* table); +static void parse_fadt(const struct ACPISDTHeader* table); + + +#define MADT_SIGNATURE 0x43495041 +#define FACP_SIGNATURE 0x50434146 + +void read_acpi_tables(const void* rsdp_location) { + const struct RSDPDescriptor20* rsdpd = rsdp_location; + + + assert(rsdpd->firstPart.revision >= 2); + + // checksum for xsdt + assert(rsdpd->length == sizeof(struct RSDPDescriptor20)); + assert(checksum(rsdpd, rsdpd->length)); + + + // lets parse it!! + const struct XSDT* xsdt = (void *)rsdpd->xsdtAddress; + + + size_t n_entries = (xsdt->header.length - sizeof(xsdt->header)) / sizeof(void*); + + + bool madt_parsed = false, + fadt_parsed = false; + + for(size_t i = 0; i < n_entries; i++) { + const struct ACPISDTHeader* table = xsdt->entries[i]; + assert(checksum(&table, table->length)); + + switch(table->signature.raw) { + case MADT_SIGNATURE: + parse_madt((const struct MADT *)table); + madt_parsed = true; + break; + case FACP_SIGNATURE: + parse_fadt(table); + fadt_parsed = true; + break; + default: + break; + } + kprintf("%3u: %4s\n", i, table->signature.arg); + } + + asm volatile("hlt"); + assert(madt_parsed); + assert(fadt_parsed); +} + +static void parse_madt(const struct MADT* table) { + // checksum is already done + + apic_config = (void*)(uint64_t)table->lAPIC_address; + const void* ptr = table->entries; + const void* end = (const void*)table + table->header.length; + +/// dont override the override lapic or io apic entry + bool override_lapic_passed = false; + bool override_ioapic_passed = false; + (void)override_lapic_passed; + (void)override_ioapic_passed; + + + kprintf("table size: %u\n", end-ptr); + while(ptr < end) { + //for(int i = 10; i>0; i--) { + const struct MADTEntryHeader* entry_header = ptr; + + + + switch(entry_header->type) { + case APIC_TYPE_LAPIC: + { + // const struct MADT_lapic_entry* entry = ptr; + + } + break; + case APIC_TYPE_IO_APIC: + { + // const struct MADT_ioapic_entry* entry = ptr; + } + break; + case APIC_TYPE_IO_INTERRUPT_SOURCE_OVERRIDE: + { + // const struct MADT_ioapic_interrupt_source_override_entry* entry = ptr; + } + break; + case APIC_TYPE_IO_NMI: + { + // const struct MADT_IO_NMI_entry* entry = ptr; + } + break; + case APIC_TYPE_LOCAL_NMI: + { + // const struct MADT_LOCAL_NMI_entry* entry = ptr; + } + break; + case APIC_TYPE_LAPIC_ADDRESS_OVERRIDE: + { + // const struct MADT_LAPIC_address_override_entry* entry = ptr; + } + break; + case APIC_TYPE_LAPICX2: + { + // const struct MADT_lapicx2_entry* entry = ptr; + } + break; + default: + kprintf("WARNING: invalid APIC MADT entry %u\n", entry_header->type); + + + } + + kprintf("entry: type %u ; size %u\n", entry_header->type,entry_header->length); + + ptr += entry_header->length; + } +} + + +static void parse_fadt(const struct ACPISDTHeader* table) { + (void) table; +} + diff --git a/kernel/acpi/acpi.h b/kernel/acpi/acpi.h index d38452d..b79b447 100644 --- a/kernel/acpi/acpi.h +++ b/kernel/acpi/acpi.h @@ -1,7 +1,7 @@ -#pragma once - -/* - - read RSDP, XSDP, MADT, FADT -*/ -void read_acpi_tables(void* rsdp_location); +#pragma once + +/* + + read RSDP, XSDP, MADT, FADT +*/ +void read_acpi_tables(const void* rsdp_location); diff --git a/kernel/acpi/acpitables.h b/kernel/acpi/acpitables.h index e51eccc..baf1208 100644 --- a/kernel/acpi/acpitables.h +++ b/kernel/acpi/acpitables.h @@ -1,41 +1,141 @@ -#pragma once - -#include -#include - -#include "../common.h" - -struct RSDPDescriptor { - uint8_t signature[8]; - uint8_t checksum; - uint8_t OEMID[6]; - uint8_t revision; - uint32_t rsdtAddress; -} __packed; - -struct RSDPDescriptor20 { - struct RSDPDescriptor firstPart; - - uint32_t length; - uint64_t xsdtAddress; - uint8_t extendedChecksum; - uint8_t reserved[3]; -} __packed; - - - -// plagia from -// https://github.com/DorianXGH/Lucarnel/blob/master/src/includes/acpi.h -// -struct ACPISDTHeader -{ - uint8_t signature[4]; // signature of the table - uint32_t length; // length of the table - uint8_t revision; - uint8_t checksum; - uint8_t OEMID[6]; - uint8_t OEMtableID[8]; - uint32_t OEMrevision; - uint32_t creatorID; - uint32_t creator_revision; -} __packed; +#pragma once + +#include +#include + +#include "../common.h" + +struct RSDPDescriptor { + uint8_t signature[8]; + uint8_t checksum; + uint8_t OEMID[6]; + uint8_t revision; + uint32_t rsdtAddress; +} __packed; + +struct RSDPDescriptor20 { + struct RSDPDescriptor firstPart; + + uint32_t length; + uint64_t xsdtAddress; + uint8_t extendedChecksum; + uint8_t reserved[3]; +} __packed; + + +union acpi_signature { + char arg[4]; + uint32_t raw; +} __packed; + + + +// plagia from +// https://github.com/DorianXGH/Lucarnel/blob/master/src/includes/acpi.h +// +struct ACPISDTHeader { + union acpi_signature signature; + + uint32_t length; // length of the table + uint8_t revision; + uint8_t checksum; + uint8_t OEMID[6]; + uint8_t OEMtableID[8]; + uint32_t OEMrevision; + uint32_t creatorID; + uint32_t creator_revision; +} __packed; + + +struct XSDT { + struct ACPISDTHeader header; + struct ACPISDTHeader* entries[]; +} __packed; + + +struct RSDT { + struct ACPISDTHeader header; + uint32_t entries[]; +} __packed; + + +struct MADTEntryHeader { + uint8_t type; + uint8_t length; +} __packed; + + +struct MADT_lapic_entry { + struct MADTEntryHeader header; + uint8_t proc_apic_ID; + uint8_t procID; + uint32_t flags; // bit0: enabled +} __packed; + + +struct MADT_ioapic_entry { + struct MADTEntryHeader header; + uint8_t id; + uint8_t reserved; + uint32_t address; + uint32_t global_system_interrupt_base; +} __packed; + + +struct MADT_ioapic_interrupt_source_override_entry { + struct MADTEntryHeader header; + uint8_t bus_source; + uint8_t irq_source; + uint32_t global_system_interrupt; + uint16_t flags; +} __packed; + + +struct MADT_IO_NMI_entry { + struct MADTEntryHeader header; + uint8_t source; + uint8_t reserved; + uint32_t global_system_interrupt; +} __packed; + + +struct MADT_LOCAL_NMI_entry { + struct MADTEntryHeader header; + uint8_t procID; + uint16_t flags; + uint8_t lint; // 0 or 1 +} __packed; + + +struct MADT_LAPIC_address_override_entry { + struct MADTEntryHeader header; + uint8_t procID; + uint8_t flags; + uint32_t lint; // 0 or 1 +} __packed; + + +struct MADT_lapicx2_entry { + struct MADTEntryHeader header; + uint8_t proc_lapic_ID; + uint64_t flags; // bit0: enabled + uint32_t acpi_id; +} __packed; + + +struct MADT { + struct ACPISDTHeader header; + uint32_t lAPIC_address; + uint32_t flags; + struct MADTEntryHeader* entries[]; +} __packed; + + +// MADT entry types +#define APIC_TYPE_LAPIC 0 +#define APIC_TYPE_IO_APIC 1 +#define APIC_TYPE_IO_INTERRUPT_SOURCE_OVERRIDE 2 +#define APIC_TYPE_IO_NMI 3 +#define APIC_TYPE_LOCAL_NMI 4 +#define APIC_TYPE_LAPIC_ADDRESS_OVERRIDE 5 +#define APIC_TYPE_LAPICX2 9 diff --git a/kernel/cpuid.h b/kernel/cpuid.h index a590838..baa811f 100644 --- a/kernel/cpuid.h +++ b/kernel/cpuid.h @@ -1,109 +1,109 @@ -#pragma once - -#include - -struct cpuid_regs { - uint32_t eax, ebx, ecx, edx; -}; - -void cpuid(uint32_t eax, struct cpuid_regs* out_regs); - - -// doc from - -/** - * -Basic CPUID Information -Initial EAX Value Register Information Provided about the Processor -0H EAX Maximum Input Value for Basic CPUID Information (see second table) -- EBX "Genu" -- ECX "ntel" -- EDX "ineI" -01H EAX Version Information: Type, Family, Model, and Stepping ID -- EBX Bits 7-0: Brand Index -- - Bits 15-8: CLFLUSH line size (Value . 8 = cache line size in bytes) -- - Bits 23-16: Number of logical processors per physical processor; two for the Pentium 4 - processor supporting Hyper-Threading Technology -- - Bits 31-24: Local APIC ID -- ECX Extended Feature Information (see fourth table) -- EDX Feature Information (see fifth table) -02H EAX Cache and TLB Information (see sixth table) -- EBX Cache and TLB Information -- ECX Cache and TLB Information -- EDX Cache and TLB Information -03H ECX Bits 00-31 of 96 bit processor serial number. (Available in Pentium III processor only; - otherwise, the value in this register is reserved.) -- EDX Bits 32-63 of 96 bit processor serial number. (Available in Pentium III processor only; - otherwise, the value in this register is reserved.) -- - NOTE: Processor serial number (PSN) is not supported in the Pentium 4 processor or later. - On all models, use the PSN flag (returned using CPUID) to check for PSN support before - accessing the feature. See AP-485, Intel Processor Identification and the CPUID Instruction - (Order Number 241618) for more information on PSN. -04H EAX Bits 4-0: Cache Type** -- - Bits 7-5: Cache Level (starts at 1) -- - Bits 8: Self Initializing cache level (does not need SW initialization) -- - Bits 9: Fully Associative cache -- - Bits 13-10: Reserved -- - Bits 25-14: Number of threads sharing this cache* -- - Bits 31-26: Number of processor cores on this die (Multicore)* -- EBX Bits 11-00: L = System Coherency Line Size* -- - Bits 21-12: P = Physical Line partitions* -- - Bits 31-22: W = Ways of associativity* -- ECX Bits 31-00: S = Number of Sets* -- EDX Reserved = 0 -- - 0 = Null - No more caches -- - 1 = Data Cache -- - 2 = Instruction Cache -- - 3 = Unified Cache -- - 4-31 = Reserved -- - NOTE: CPUID leaves > 3 < 80000000 are only visible when IA32_CR_MISC_ENABLES.BOOT_NT4 (bit - 22) is clear (Default) -5H EAX Bits 15-00: Smallest monitor-line size in bytes (default is processor's monitor granularity) -- EBX Bits 15-00: Largest monitor-line size in bytes (default is processor's monitor granularity) - -*Add one to the value in the register file to get the number. For example, the number of processor cores is EAX[31:26]+1. -** Cache Types fields - - - -Extended Function CPUID Information -Initial EAX Value Register Information Provided about the Processor -80000000H EAX Maximum Input Value for Extended Function CPUID Information (see second table). -- EBX Reserved -- ECX Reserved -- EDX Reserved -80000001H EAX Extended Processor Signature and Extended Feature Bits. (Currently reserved) -- EBX Reserved -- ECX Reserved -- EDX Reserved -80000002H EAX Processor Brand String -- EBX Processor Brand String Continued -- ECX Processor Brand String Continued -- EDX Processor Brand String Continued -80000003H EAX Processor Brand String Continued -- EBX Processor Brand String Continued -- ECX Processor Brand String Continued -- EDX Processor Brand String Continued -80000004H EAX Processor Brand String Continued -- EBX Processor Brand String Continued -- ECX Processor Brand String Continued -- EDX Processor Brand String Continued -80000005H EAX Reserved = 0 -- EBX Reserved = 0 -- ECX Reserved = 0 -- EDX Reserved = 0 -80000006H EAX Reserved = 0 -- EBX Reserved = 0 -- ECX Bits 0-7: Cache Line Size -- - Bits 15-12: L2 Associativity -- - Bits 31-16: Cache size in 1K units -- EDX Reserved = 0 -- 80000007H EAX Reserved = 0 -- EBX Reserved = 0 -- ECX Reserved = 0 -- EDX Reserved = 0 -80000008H EAX Reserved = 0 -- EBX Reserved = 0 -- ECX Reserved = 0 -- EDX Reserved = 0 -*/ +#pragma once + +#include + +struct cpuid_regs { + uint32_t eax, ebx, ecx, edx; +}; + +void cpuid(uint32_t eax, struct cpuid_regs* out_regs); + + +// doc from + +/** + * +Basic CPUID Information +Initial EAX Value Register Information Provided about the Processor +0H EAX Maximum Input Value for Basic CPUID Information (see second table) +- EBX "Genu" +- ECX "ntel" +- EDX "ineI" +01H EAX Version Information: Type, Family, Model, and Stepping ID +- EBX Bits 7-0: Brand Index +- - Bits 15-8: CLFLUSH line size (Value . 8 = cache line size in bytes) +- - Bits 23-16: Number of logical processors per physical processor; two for the Pentium 4 + processor supporting Hyper-Threading Technology +- - Bits 31-24: Local APIC ID +- ECX Extended Feature Information (see fourth table) +- EDX Feature Information (see fifth table) +02H EAX Cache and TLB Information (see sixth table) +- EBX Cache and TLB Information +- ECX Cache and TLB Information +- EDX Cache and TLB Information +03H ECX Bits 00-31 of 96 bit processor serial number. (Available in Pentium III processor only; + otherwise, the value in this register is reserved.) +- EDX Bits 32-63 of 96 bit processor serial number. (Available in Pentium III processor only; + otherwise, the value in this register is reserved.) +- - NOTE: Processor serial number (PSN) is not supported in the Pentium 4 processor or later. + On all models, use the PSN flag (returned using CPUID) to check for PSN support before + accessing the feature. See AP-485, Intel Processor Identification and the CPUID Instruction + (Order Number 241618) for more information on PSN. +04H EAX Bits 4-0: Cache Type** +- - Bits 7-5: Cache Level (starts at 1) +- - Bits 8: Self Initializing cache level (does not need SW initialization) +- - Bits 9: Fully Associative cache +- - Bits 13-10: Reserved +- - Bits 25-14: Number of threads sharing this cache* +- - Bits 31-26: Number of processor cores on this die (Multicore)* +- EBX Bits 11-00: L = System Coherency Line Size* +- - Bits 21-12: P = Physical Line partitions* +- - Bits 31-22: W = Ways of associativity* +- ECX Bits 31-00: S = Number of Sets* +- EDX Reserved = 0 +- - 0 = Null - No more caches +- - 1 = Data Cache +- - 2 = Instruction Cache +- - 3 = Unified Cache +- - 4-31 = Reserved +- - NOTE: CPUID leaves > 3 < 80000000 are only visible when IA32_CR_MISC_ENABLES.BOOT_NT4 (bit + 22) is clear (Default) +5H EAX Bits 15-00: Smallest monitor-line size in bytes (default is processor's monitor granularity) +- EBX Bits 15-00: Largest monitor-line size in bytes (default is processor's monitor granularity) + +*Add one to the value in the register file to get the number. For example, the number of processor cores is EAX[31:26]+1. +** Cache Types fields + + + +Extended Function CPUID Information +Initial EAX Value Register Information Provided about the Processor +80000000H EAX Maximum Input Value for Extended Function CPUID Information (see second table). +- EBX Reserved +- ECX Reserved +- EDX Reserved +80000001H EAX Extended Processor Signature and Extended Feature Bits. (Currently reserved) +- EBX Reserved +- ECX Reserved +- EDX Reserved +80000002H EAX Processor Brand String +- EBX Processor Brand String Continued +- ECX Processor Brand String Continued +- EDX Processor Brand String Continued +80000003H EAX Processor Brand String Continued +- EBX Processor Brand String Continued +- ECX Processor Brand String Continued +- EDX Processor Brand String Continued +80000004H EAX Processor Brand String Continued +- EBX Processor Brand String Continued +- ECX Processor Brand String Continued +- EDX Processor Brand String Continued +80000005H EAX Reserved = 0 +- EBX Reserved = 0 +- ECX Reserved = 0 +- EDX Reserved = 0 +80000006H EAX Reserved = 0 +- EBX Reserved = 0 +- ECX Bits 0-7: Cache Line Size +- - Bits 15-12: L2 Associativity +- - Bits 31-16: Cache size in 1K units +- EDX Reserved = 0 +- 80000007H EAX Reserved = 0 +- EBX Reserved = 0 +- ECX Reserved = 0 +- EDX Reserved = 0 +80000008H EAX Reserved = 0 +- EBX Reserved = 0 +- ECX Reserved = 0 +- EDX Reserved = 0 +*/ diff --git a/kernel/cpuid.s b/kernel/cpuid.s index b66a544..217866c 100644 --- a/kernel/cpuid.s +++ b/kernel/cpuid.s @@ -1,26 +1,26 @@ -[section .text] -[global cpuid] - -;struct cpuid_regs { -; uint32_t eax, ebx, ecx, edx; -;} - - -; void cpuid(uint32_t eax, struct cpuid_regs* out_regs); -cpuid: - push ebp - mov ebp, esp - push rbx - - mov eax, edi - cpuid - - mov [rdi + 0], eax - mov [rdi + 4], ebx - mov [rdi + 8], ecx - mov [rdi + 12], edx - - - pop rbx - leave +[section .text] +[global cpuid] + +;struct cpuid_regs { +; uint32_t eax, ebx, ecx, edx; +;} + + +; void cpuid(uint32_t eax, struct cpuid_regs* out_regs); +cpuid: + push ebp + mov ebp, esp + push rbx + + mov eax, edi + cpuid + + mov [rdi + 0], eax + mov [rdi + 4], ebx + mov [rdi + 8], ecx + mov [rdi + 12], edx + + + pop rbx + leave ret \ No newline at end of file diff --git a/kernel/debug/dump.c b/kernel/debug/dump.c index f38edda..84a53d5 100644 --- a/kernel/debug/dump.c +++ b/kernel/debug/dump.c @@ -1,116 +1,115 @@ -#include "dump.h" -#include "../klib/sprintf.h" - -/** - * dump a memory chunk in kprintf - * addr: address of the beginning of the chunk - * size: number of bytes to dump - * line_size: number of words per line - * - * mode: either - * DUMP_HEX8 : hexadecimal integers of size 8 bits - * DUMP_HEX32 : hexadecimal integers of size 32 bits - * DUMP_HEX64 : hexadecimal integers of size 64 bits - * DUMP_DEC8 : decimal integers of size 8 bits - * DUMP_DEC32 : decimal integers of size 32 bits - * DUMP_DEC64 : decimal integers of size 64 bits - * - **/ -void dump(const void* addr, size_t size, size_t line_size, uint8_t mode) { - - char row_fmt[8], last_row_fmt[8]; - - size_t pitch; // sizeof word - - int i = 0; - row_fmt [i] = '%'; - last_row_fmt[i] = '%'; - i++; - - - // create fmts for printf - -// word width - if((mode & DUMP_8) != 0) { - // byte mode - - row_fmt [i] = '2'; - last_row_fmt[i] = '2'; - i++; - - pitch = 1; - } - else if((mode & DUMP_64) == 0) { - // normal 32bit mode - - row_fmt [i] = '8'; - last_row_fmt[i] = '8'; - i++; - - pitch = 4; - } - else { - // long mode - row_fmt [i] = 'l'; - last_row_fmt[i] = 'l'; - i++; - row_fmt [i] = '1'; - last_row_fmt[i] = '1'; - i++; - row_fmt [i] = '6'; - last_row_fmt[i] = '6'; - i++; - - pitch = 8; - } - -// base - char base_id; - - - if((mode & DUMP_HEX) == 0) // hex - base_id = 'x'; - else // dec - base_id = 'u'; - - row_fmt [i] = base_id; - last_row_fmt[i] = base_id; - i++; - - row_fmt [i] = ' '; - last_row_fmt[i] = '\n'; - i++; - - row_fmt [i] = '\0'; - last_row_fmt[i] = '\0'; - i++; - - - - size /= pitch; - size_t lines = (size + line_size - 1) / line_size; - - // iterator ptr - const uint8_t* ptr = addr; - -// create mask : create the complementary with 0xff...ff << n -// then complement it - const uint64_t mask = ~(~0llu << 8*pitch); - - for(size_t i = 0; i < lines; i++) { - // the last line might not be full - // therefore we have to check each one - - for(size_t j = 0; j < line_size-1; j++) { - if(size-- <= 1) - break; - else { - kprintf(row_fmt, *(uint64_t *)ptr & mask); - ptr+=pitch; - } - - } - kprintf(last_row_fmt, *(uint64_t *)ptr & mask); - ptr+=pitch; - } -} +#include "dump.h" +#include "../klib/sprintf.h" + +/** + * dump a memory chunk in kprintf + * addr: address of the beginning of the chunk + * size: number of bytes to dump + * line_size: number of words per line + * + * mode: either + * DUMP_HEX8 : hexadecimal integers of size 8 bits + * DUMP_HEX32 : hexadecimal integers of size 32 bits + * DUMP_HEX64 : hexadecimal integers of size 64 bits + * DUMP_DEC8 : decimal integers of size 8 bits + * DUMP_DEC32 : decimal integers of size 32 bits + * DUMP_DEC64 : decimal integers of size 64 bits + * + **/ +void dump(const void* addr, size_t size, size_t line_size, uint8_t mode) { + + char row_fmt[16], last_row_fmt[16]; + + size_t pitch; // sizeof word + + int i = 0; + row_fmt [i] = '%'; + last_row_fmt[i] = '%'; + i++; + + + // create fmts for printf + +// word width + if((mode & DUMP_8) != 0) { + // byte mode + + row_fmt [i] = '2'; + last_row_fmt[i] = '2'; + i++; + + pitch = 1; + } + else if((mode & DUMP_64) == 0) { + // normal 32bit mode + + row_fmt [i] = '8'; + last_row_fmt[i] = '8'; + i++; + + pitch = 4; + } + else { + // long mode + row_fmt [i] = 'l'; + last_row_fmt[i] = 'l'; + i++; + row_fmt [i] = '1'; + last_row_fmt[i] = '1'; + i++; + row_fmt [i] = '6'; + last_row_fmt[i] = '6'; + i++; + + pitch = 8; + } + +// base + char base_id; + + + if((mode & DUMP_HEX) == 0) // hex + base_id = 'x'; + else // dec + base_id = 'u'; + + row_fmt [i] = base_id; + last_row_fmt[i] = base_id; + i++; + + row_fmt [i] = ' '; + last_row_fmt[i] = '\n'; + i++; + + row_fmt [i] = '\0'; + last_row_fmt[i] = '\0'; + i++; + + + + size /= pitch; + size_t lines = (size + line_size - 1) / line_size; + + // iterator ptr + const uint8_t* ptr = addr; + +// create mask : create the complementary with 0xff...ff << n +// then complement it + const uint64_t mask = ~(~0llu << 8*pitch); + + for(size_t i = 0; i < lines; i++) { + // the last line might not be full + // therefore we have to check each one + + for(size_t j = 0; j < line_size-1; j++) { + if(size-- <= 1) + break; + else { + kprintf(row_fmt, *(uint64_t *)ptr & mask); + ptr+=pitch; + } + } + kprintf(last_row_fmt, *(uint64_t *)ptr & mask); + ptr+=pitch; + } +} diff --git a/kernel/debug/dump.h b/kernel/debug/dump.h index 75f8792..a2cd230 100644 --- a/kernel/debug/dump.h +++ b/kernel/debug/dump.h @@ -1,23 +1,23 @@ -#pragma once - -#include -#include - - - -#define DUMP_HEX 0 -#define DUMP_DEC 16 - -#define DUMP_8 32 -#define DUMP_32 0 -#define DUMP_64 1 - -#define DUMP_HEX8 (DUMP_HEX | DUMP_8) -#define DUMP_HEX32 (DUMP_HEX | DUMP_32) -#define DUMP_HEX64 (DUMP_HEX | DUMP_64) -#define DUMP_DEC8 (DUMP_DEC | DUMP_8) -#define DUMP_DEC32 (DUMP_DEC | DUMP_32) -#define DUMP_DEC64 (DUMP_DEC | DUMP_64) - - -void dump(const void* addr, size_t size, size_t line_size, uint8_t mode); +#pragma once + +#include +#include + + + +#define DUMP_HEX 0 +#define DUMP_DEC 16 + +#define DUMP_8 32 +#define DUMP_32 0 +#define DUMP_64 1 + +#define DUMP_HEX8 (DUMP_HEX | DUMP_8) +#define DUMP_HEX32 (DUMP_HEX | DUMP_32) +#define DUMP_HEX64 (DUMP_HEX | DUMP_64) +#define DUMP_DEC8 (DUMP_DEC | DUMP_8) +#define DUMP_DEC32 (DUMP_DEC | DUMP_32) +#define DUMP_DEC64 (DUMP_DEC | DUMP_64) + + +void dump(const void* addr, size_t size, size_t line_size, uint8_t mode); diff --git a/kernel/entry.c b/kernel/entry.c index 4c65668..89251b4 100644 --- a/kernel/entry.c +++ b/kernel/entry.c @@ -10,6 +10,7 @@ #include "acpi/acpi.h" #include "common.h" #include "regs.h" +#include "int/apic.h" #include "int/idt.h" @@ -44,9 +45,9 @@ static struct stivale2_header_tag_framebuffer framebuffer_hdr_tag = { }, // We set all the framebuffer specifics to 0 as we want the bootloader // to pick the best it can. - .framebuffer_width = 0, - .framebuffer_height = 0, - .framebuffer_bpp = 0 + .framebuffer_width = 1152, + .framebuffer_height = 864, + .framebuffer_bpp = 32 }; // The stivale2 specification says we need to define a "header structure". @@ -94,8 +95,8 @@ void *stivale2_get_tag(struct stivale2_struct *stivale2_struct, uint64_t id) { } -#define PRINT_VAL(v) kprintf(#v "=%ld\n", v); -#define PRINT_HEX(v) kprintf(#v "=%lx\n", v); +#define PRINT_VAL(v) kprintf(#v "=%ld\n", (uint64_t)v); +#define PRINT_HEX(v) kprintf(#v "=%lx\n", (uint64_t)v); // const char but represents a big string extern const char _binary_bootmessage_txt; @@ -112,6 +113,14 @@ static void debug_terminal() { kputs(buff); } +static void print_fb_infos(struct stivale2_struct_tag_framebuffer* fbtag) { + PRINT_VAL(fbtag->framebuffer_width); + PRINT_VAL(fbtag->framebuffer_height); + PRINT_VAL(fbtag->framebuffer_pitch); + PRINT_VAL(fbtag->framebuffer_bpp); + PRINT_HEX(fbtag->framebuffer_addr); +} + #pragma GCC diagnostic pop @@ -148,7 +157,7 @@ void _start(struct stivale2_struct *stivale2_struct) { uint64_t rsdp_location = rsdp_tag_ptr->rsdp; - + Image sc = {.w = fbtag.framebuffer_width, @@ -165,13 +174,24 @@ void _start(struct stivale2_struct *stivale2_struct) { setup_terminal(); setup_isr(); + terminal_set_colors(0xf0f0f0, 0x007000); + terminal_clear(); + kputs(&_binary_bootmessage_txt); read_acpi_tables((void*)rsdp_location); - - asm volatile("sti"); + kputs("DONE\n"); - kputs(&_binary_bootmessage_txt); + apic_setup_clock(); + + + + + + for(;;) { + asm volatile("hlt"); + kprintf("%lu\t", clock()); + } for(;;) { diff --git a/kernel/int/apic.c b/kernel/int/apic.c new file mode 100644 index 0000000..9f65f77 --- /dev/null +++ b/kernel/int/apic.c @@ -0,0 +1,95 @@ +#include + +#include "../debug/assert.h" +#include "idt.h" +#include "apic.h" +#include "../klib/sprintf.h" + +#define LAPIC_TIMER_IRQ 0xff + +struct APICConfig* apic_config = NULL; + + +void outb(uint16_t dx, uint16_t al); +uint8_t inb(uint16_t dx); + + +static void pit_wait(size_t ms) { + outb(0x43, 0x30); + uint16_t val = 0x4a9 * ms; + outb(0x40, (uint8_t)val); + outb(0x40, (uint8_t)(val >> 8)); + for(;;) { + outb(0x43, 0xe2); + uint8_t status = inb(0x40); + if ((status & (1 << 7)) != 0) { + break; + } + } +} + +static unsigned read_pit_count(void) { + unsigned count = 0; + + // Disable interrupts + uint64_t rf = get_rflags(); + _cli(); + + // al = channel in bits 6 and 7, remaining bits clear + outb(0x43,0b0000000); + + count = inb(0x40); // Low byte + count |= inb(0x40)<<8; // High byte + + + set_rflags(rf); + + return count; +} + + +uint64_t apic_timer_clock_count = 0; + + +__attribute__((interrupt)) void lapic_timer_handler(struct IFrame* frame) { + (void) frame; + ++apic_timer_clock_count; + + kprintf("%x\n", apic_timer_clock_count); + + apic_config->end_of_interrupt.reg = 0; +} + + +uint64_t clock(void) { + return apic_timer_clock_count; +} + +void apic_setup_clock(void) { + assert(apic_config != NULL); + + set_irq_handler(LAPIC_TIMER_IRQ, lapic_timer_handler); + + // disable apic and set spurious int to 32 + apic_config->spurious_interrupt_vector.reg = 0 | LAPIC_TIMER_IRQ; + + apic_config->timer_divide_configuration.reg = 2; // divide by 8 + apic_config->timer_initial_count.reg = UINT32_MAX; + + pit_wait(1); /// wait for 1 ms + + //apic_config->timer_initial_count.reg = UINT32_MAX - apic_config->timer_current_count.reg; + + + for(int i = 0; i < 1000000000; i++) { + kprintf("%x\t%x\n", apic_config->timer_current_count.reg, read_pit_count()); + + // asm volatile("hlt"); + } + // count + + + // enable the clock irqs + apic_config->spurious_interrupt_vector.reg = 0x100 | LAPIC_TIMER_IRQ; +} + diff --git a/kernel/int/apic.h b/kernel/int/apic.h new file mode 100644 index 0000000..c21e899 --- /dev/null +++ b/kernel/int/apic.h @@ -0,0 +1,53 @@ +#pragma once + +#include +#include +#include "../debug/assert.h" + + +struct APICRegister +{ + uint32_t reg; + uint32_t reserved[3]; +}; +static_assert(sizeof(struct APICRegister) == 16); + +struct APICConfig +{ + struct APICRegister reserved1[2]; // + struct APICRegister LAPIC_ID; // RW + struct APICRegister LAPIC_version; // R + struct APICRegister reserved2[4]; // + struct APICRegister task_priority; // RW + struct APICRegister arbitration_priority; // R + struct APICRegister processor_priority; // R + struct APICRegister end_of_interrupt; // W + struct APICRegister remote_read; // R + struct APICRegister logical_destination; // RW + struct APICRegister destination_format; // RW + struct APICRegister spurious_interrupt_vector; // RW + struct APICRegister in_service[8]; // R + struct APICRegister trigger_mode[8]; // R + struct APICRegister interrupt_request[8]; // R + struct APICRegister error_status; // R + struct APICRegister reserved3[6]; // + struct APICRegister LVT_corrected_machine_check_interrupt;// RW + struct APICRegister interrupt_command[2]; // RW + struct APICRegister LVT_timer; // RW + struct APICRegister LVT_thermal_sensor; // RW + struct APICRegister LVT_performance_monitoring_counters; // RW + struct APICRegister LVT_LINT0; // RW + struct APICRegister LVT_LINT1; // RW + struct APICRegister LVT_error; // RW + struct APICRegister timer_initial_count; // RW + struct APICRegister timer_current_count; // R + struct APICRegister reserved4[4]; // + struct APICRegister timer_divide_configuration; // RW + struct APICRegister reserved5; // + +}; +static_assert(sizeof(struct APICConfig) == 0x400); + + +void apic_setup_clock(void); +uint64_t clock(void); diff --git a/kernel/int/idt.c b/kernel/int/idt.c index 649e53f..b4ffaee 100644 --- a/kernel/int/idt.c +++ b/kernel/int/idt.c @@ -1,98 +1,124 @@ -#include -#include - -#include "../common.h" -#include "idt.h" - - - -typedef struct { - uint16_t size; - const void* offset; -} __packed IDTD; - - -typedef struct { - uint8_t gate_type: 4; - uint8_t z : 1; - uint8_t dpl : 2; - uint8_t p : 1; -} __packed type_attr_t; - - -static_assert(sizeof(type_attr_t) == 1); - - -typedef struct { - uint16_t offset_1; // offset bits 0..15 - uint16_t selector; // a code segment selector in GDT or LDT - uint8_t ist; // bits 0..2 holds Interrupt - // Stack Table offset, rest of bits zero. - - type_attr_t type_attr; // type and attributes - uint16_t offset_2; // offset bits 16..31 - uint32_t offset_3; // offset bits 32..63 - uint32_t zero; // reserved -} __packed IDTE; - - - -IDTE idt[256] = {0}; - -void _lidt(IDTD* idtd); - -void setup_idt(void) { - IDTD idt_descriptor = { - .size = 255 * sizeof(IDTE), - .offset = idt, - }; - - _lidt(&idt_descriptor); -} - - -static type_attr_t make_type_attr_t(uint8_t gate_type) { - - assert((gate_type & 0xf0) == 0); - - return (type_attr_t) { - .gate_type = gate_type, - .z = 0, - .dpl = 0, - .p = 1, - }; -} - - -static IDTE make_idte(void* handler, type_attr_t type_attr) { - uint64_t h = (uint64_t) handler; - - return (IDTE) { - .offset_1 = h & 0xffff, - .selector = 0x08, // kernel code segment - .ist = 0, - .type_attr = type_attr, - .offset_2 = (h >> 16) & 0xffff, - .offset_3 = (h >> 32) & 0xffffffff, - .zero = 0, - }; -} - -static IDTE make_isr(void* handler) { - return make_idte(handler, make_type_attr_t(ATTR_64_GATE)); -} - - -void set_interrupt_handler(uint16_t number, void* handler) { - idt[number] = make_isr(handler); -} - - -void _cli(void) { - asm volatile("cli"); -} - - -void _sti(void) { - asm volatile("sti"); -} +#include +#include + +#include "../common.h" +#include "idt.h" + + + +typedef struct { + uint16_t size; + const void* offset; +} __packed IDTD; + + +typedef struct { + uint8_t gate_type: 4; + uint8_t z : 1; + uint8_t dpl : 2; + uint8_t p : 1; +} __packed type_attr_t; + + +static_assert(sizeof(type_attr_t) == 1); + + +typedef struct { + uint16_t offset_1; // offset bits 0..15 + uint16_t selector; // a code segment selector in GDT or LDT + uint8_t ist; // bits 0..2 holds Interrupt + // Stack Table offset, rest of bits zero. + + type_attr_t type_attr; // type and attributes + uint16_t offset_2; // offset bits 16..31 + uint32_t offset_3; // offset bits 32..63 + uint32_t zero; // reserved +} __packed IDTE; + + + +IDTE idt[256] = {0}; + +void _lidt(IDTD* idtd); + +void setup_idt(void) { + IDTD idt_descriptor = { + .size = 255 * sizeof(IDTE), + .offset = idt, + }; + + _lidt(&idt_descriptor); +} + + +static type_attr_t make_type_attr_t(uint8_t gate_type) { + + assert((gate_type & 0xf0) == 0); + + return (type_attr_t) { + .gate_type = gate_type, + .z = 0, + .dpl = 0, + .p = 1, + }; +} + + +static IDTE make_idte(void* handler, type_attr_t type_attr) { + uint64_t h = (uint64_t) handler; + + return (IDTE) { + .offset_1 = h & 0xffff, + .selector = 0x08, // kernel code segment + .ist = 0, + .type_attr = type_attr, + .offset_2 = (h >> 16) & 0xffff, + .offset_3 = (h >> 32) & 0xffffffff, + .zero = 0, + }; +} + +static IDTE make_isr(void* handler) { + return make_idte(handler, make_type_attr_t(ATTR_64_GATE)); +} +static IDTE make_irq(void* handler) { + return make_idte(handler, make_type_attr_t(ATTR_64_TRAP)); +} + + +void set_rflags(uint64_t RFLAGS); +uint64_t get_rflags(void); + + +void set_irs_handler(uint16_t number, void* handler) { +// make sure to disable interrupts +// while updating the idt +// then save IF to its old state + uint64_t rflags = get_rflags(); + _cli(); + + idt[number] = make_isr(handler); + + set_rflags(rflags); +} + + +void set_irq_handler(uint16_t number, void* handler) { +// same as above + uint64_t rflags = get_rflags(); + _cli(); + + idt[number] = make_irq(handler); + + set_rflags(rflags); +} + + +void _cli(void) { + asm volatile("cli"); +} + + +void _sti(void) { + asm volatile("sti"); +} diff --git a/kernel/int/idt.h b/kernel/int/idt.h index dcdf36d..708a3e8 100644 --- a/kernel/int/idt.h +++ b/kernel/int/idt.h @@ -1,35 +1,37 @@ -#ifndef IDT_H -#define IDT_H - -#include -#include -#include "../debug/assert.h" - -#define ATTR_64_GATE 0b1110 -#define ATTR_64_TRAP 0b1110 - - - -struct IFrame { - uint64_t RIP; - uint64_t CS; - uint64_t RFLAGS; - uint64_t RSP; - uint64_t SS; -} __packed; - -static_assert(sizeof(struct IFrame) == 40); - - - -void setup_idt(void); - -void set_interrupt_handler(uint16_t number, void* handler); -void _cli(void); -void _sti(void); - - -void setup_isr(void); - - +#ifndef IDT_H +#define IDT_H + +#include +#include +#include "../debug/assert.h" +#include "../common.h" + +#define ATTR_64_GATE 0b1110 +#define ATTR_64_TRAP 0b1110 + + + +struct IFrame { + uint64_t RIP; + uint64_t CS; + uint64_t RFLAGS; + uint64_t RSP; + uint64_t SS; +} __packed; + +static_assert(sizeof(struct IFrame) == 40); + + + +void setup_idt(void); + +void set_irs_handler(uint16_t number, void* handler); +void set_irq_handler(uint16_t number, void* handler); +void _cli(void); +void _sti(void); + + +void setup_isr(void); + + #endif // IDT_H \ No newline at end of file diff --git a/kernel/int/idt.s b/kernel/int/idt.s index 2ce2b99..62530c2 100644 --- a/kernel/int/idt.s +++ b/kernel/int/idt.s @@ -1,7 +1,7 @@ - -[section .text] -[global _lidt] - -_lidt: - lidt [rdi] + +[section .text] +[global _lidt] + +_lidt: + lidt [rdi] ret \ No newline at end of file diff --git a/kernel/int/isr.c b/kernel/int/isr.c index 4a298db..ff3a2fb 100644 --- a/kernel/int/isr.c +++ b/kernel/int/isr.c @@ -1,141 +1,126 @@ -#include "../klib/sprintf.h" -#include "../debug/assert.h" -#include "../debug/panic.h" -#include "idt.h" - - - - - -static void print_frame(struct IFrame* interrupt_frame) { - kprintf( - "RIP: %16lx\n" - "RSP: %16lx\n" - "CS: %16lx SS: %16lx\n" - "\n" - "RFLAGS: %8lx\n", - interrupt_frame->RIP, - interrupt_frame->RSP, - interrupt_frame->CS, - interrupt_frame->SS, - interrupt_frame->RFLAGS); -} - - -__attribute__((interrupt)) void ISR_general_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_general_handler()\n"); -} -__attribute__((interrupt)) void ISR_error_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) interrupt_frame; - kprintf("ISR_error_handler()\n"); -} - - -__attribute__((interrupt)) void ISR_div_by_zero_handler(struct IFrame* interrupt_frame) { - print_frame(interrupt_frame); - panic("ISR_div_by_zero_handler():\n"); - asm volatile("cli"); - asm volatile("hlt"); -} - - - -__attribute__((interrupt)) void ISR_debug_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_debug_handler()\n"); -} -__attribute__((interrupt)) void ISR_NMI_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_NMI_handler()\n"); -} -__attribute__((interrupt)) void ISR_breakpoint_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_breakpoint_handler()\n"); -} -__attribute__((interrupt)) void ISR_overflow_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_overflow_handler()\n"); -} -__attribute__((interrupt)) void ISR_bound_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_bound_handler()\n"); -} -__attribute__((interrupt)) void ISR_invalid_opcode_handler(struct IFrame* interrupt_frame) { - kprintf("ISR_invalid_opcode_handler()\n"); - print_frame(interrupt_frame); - asm volatile("cli"); - asm volatile("hlt"); -} -__attribute__((interrupt)) void ISR_device_not_available_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_device_not_available_handler()\n"); -} -__attribute__((interrupt)) void ISR_double_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) interrupt_frame; - (void) error_code; - kprintf("ISR_double_fault_handler()\n"); -} -__attribute__((interrupt)) void ISR_coproc_segment_overrun_handler(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_coproc_segment_overrun_handler()\n"); -} -__attribute__((interrupt)) void ISR_invalid_TSS_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) interrupt_frame; - (void) error_code; - - kprintf("ISR_invalid_TSS_handler()\n"); -} -__attribute__((interrupt)) void ISR_segment_not_present_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) error_code; - (void) interrupt_frame; - kprintf("ISR_segment_not_present_handler()\n"); -} -__attribute__((interrupt)) void ISR_stack_segment_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) error_code; - (void) interrupt_frame; - kprintf("ISR_stack_segment_fault_handler()\n"); -} -__attribute__((interrupt)) void ISR_general_protection_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) error_code; - (void) interrupt_frame; - kprintf("ISR_general_protection_fault_handler()\n"); -} -__attribute__((interrupt)) void ISR_page_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { - (void) error_code; - (void) interrupt_frame; - kprintf("ISR_page_fault_handler()\n"); -} -__attribute__((interrupt)) void ISR_spurious(struct IFrame* interrupt_frame) { - (void) interrupt_frame; - kprintf("ISR_spurious()\n"); -} - -extern uint64_t idt[256]; - - -void setup_isr(void) { - _cli(); - - set_interrupt_handler(0, (void *) ISR_div_by_zero_handler); - set_interrupt_handler(1, (void *) ISR_debug_handler); - set_interrupt_handler(2, (void *) ISR_NMI_handler); - set_interrupt_handler(3, (void *) ISR_breakpoint_handler); - set_interrupt_handler(4, (void *) ISR_overflow_handler); - set_interrupt_handler(5, (void *) ISR_bound_handler); - set_interrupt_handler(6, (void *) ISR_invalid_opcode_handler); - set_interrupt_handler(7, (void *) ISR_device_not_available_handler); - set_interrupt_handler(8, (void *) ISR_double_fault_handler); - set_interrupt_handler(9, (void *) ISR_coproc_segment_overrun_handler); - set_interrupt_handler(10, (void *) ISR_invalid_TSS_handler); - set_interrupt_handler(11, (void *) ISR_segment_not_present_handler); - set_interrupt_handler(12, (void *) ISR_stack_segment_fault_handler); - set_interrupt_handler(13, (void *) ISR_general_protection_fault_handler); - set_interrupt_handler(14, (void *) ISR_page_fault_handler); - - for(int i = 15; i <= 255; i++) - set_interrupt_handler(i, ISR_spurious); - - setup_idt(); - _sti(); +#include "../klib/sprintf.h" +#include "../debug/assert.h" +#include "../debug/panic.h" +#include "idt.h" + + + + + +static void print_frame(char* buff, struct IFrame* interrupt_frame) { + sprintf(buff, + "RIP: %16lx\n" + "RSP: %16lx\n" + "CS: %16lx SS: %16lx\n" + "\n" + "RFLAGS: %8lx\n", + interrupt_frame->RIP, + interrupt_frame->RSP, + interrupt_frame->CS, + interrupt_frame->SS, + interrupt_frame->RFLAGS); +} + + +static void panic_handler(const char* name,struct IFrame* interrupt_frame) { + char buff1[256], buff2[512]; + print_frame(buff1, interrupt_frame); + sprintf(buff2, "%s: \n%s", name, buff1); + + panic(buff2); + __builtin_unreachable(); +} + +__attribute__((interrupt)) void ISR_general_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_general_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_error_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_error_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_div_by_zero_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_div_by_zero_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_debug_handler(struct IFrame* interrupt_frame) { + + panic_handler("ISR_debug_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_NMI_handler(struct IFrame* interrupt_frame) { + + panic_handler("ISR_NMI_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_breakpoint_handler(struct IFrame* interrupt_frame) { + + panic_handler("ISR_breakpoint_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_overflow_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_overflow_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_bound_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_bound_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_invalid_opcode_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_invalid_opcode_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_device_not_available_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_device_not_available_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_double_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_double_fault_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_coproc_segment_overrun_handler(struct IFrame* interrupt_frame) { + panic_handler("ISR_coproc_segment_overrun_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_invalid_TSS_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_invalid_TSS_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_segment_not_present_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_segment_not_present_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_stack_segment_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_stack_segment_fault_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_general_protection_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_general_protection_fault_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_page_fault_handler(struct IFrame* interrupt_frame, uint64_t error_code) { + (void) error_code; + panic_handler("ISR_page_fault_handler", interrupt_frame); +} +__attribute__((interrupt)) void ISR_spurious(struct IFrame* interrupt_frame) { + panic_handler("ISR_spurious", interrupt_frame); +} + +extern uint64_t idt[256]; + + +void setup_isr(void) { + _cli(); + + set_irs_handler(0, (void *) ISR_div_by_zero_handler); + set_irs_handler(1, (void *) ISR_debug_handler); + set_irs_handler(2, (void *) ISR_NMI_handler); + set_irs_handler(3, (void *) ISR_breakpoint_handler); + set_irs_handler(4, (void *) ISR_overflow_handler); + set_irs_handler(5, (void *) ISR_bound_handler); + set_irs_handler(6, (void *) ISR_invalid_opcode_handler); + set_irs_handler(7, (void *) ISR_device_not_available_handler); + set_irs_handler(8, (void *) ISR_double_fault_handler); + set_irs_handler(9, (void *) ISR_coproc_segment_overrun_handler); + set_irs_handler(10, (void *) ISR_invalid_TSS_handler); + set_irs_handler(11, (void *) ISR_segment_not_present_handler); + set_irs_handler(12, (void *) ISR_stack_segment_fault_handler); + set_irs_handler(13, (void *) ISR_general_protection_fault_handler); + set_irs_handler(14, (void *) ISR_page_fault_handler); + + for(int i = 15; i <= 255; i++) + set_irs_handler(i, ISR_spurious); + + setup_idt(); + _sti(); } \ No newline at end of file diff --git a/kernel/klib/math.h b/kernel/klib/math.h new file mode 100644 index 0000000..a2148c6 --- /dev/null +++ b/kernel/klib/math.h @@ -0,0 +1,6 @@ +#pragma once + +#define MIN(X,Y) (X > Y ? Y : X) +#define MAX(X,Y) (X < Y ? Y : X) + +#define CEIL_DIV(X, Y) ((X + Y - 1) / Y) diff --git a/kernel/klib/sprintf.c b/kernel/klib/sprintf.c index 859a461..11dad04 100644 --- a/kernel/klib/sprintf.c +++ b/kernel/klib/sprintf.c @@ -1,11 +1,12 @@ #include "sprintf.h" +#include "math.h" #include "string.h" #include "../video/terminal.h" #define SIGN(X) X > 0 ? 1 : -1 #define ARG(TYPE) (TYPE)va_arg(ap, TYPE) -char* utohex(char* str, uint64_t x, size_t min_digits) { +static char* utohex(char* str, uint64_t x, int min_digits) { size_t digits = 1; uint64_t _x = x; @@ -16,7 +17,7 @@ char* utohex(char* str, uint64_t x, size_t min_digits) { digits++; } - if(digits < min_digits) + if((int)digits < min_digits) digits = min_digits; char* end = str+digits; @@ -41,7 +42,7 @@ char* utohex(char* str, uint64_t x, size_t min_digits) { // unsigned to string // return a ptr to the end of the string -char* utos(char* str, uint64_t x, size_t min_digits) { +static char* utos(char* str, uint64_t x, int min_digits) { size_t digits = 1; uint64_t _x = x; @@ -50,7 +51,7 @@ char* utos(char* str, uint64_t x, size_t min_digits) { digits++; } - if(digits < min_digits) + if((int)digits < min_digits) digits = min_digits; char* end = str+digits; @@ -68,7 +69,7 @@ char* utos(char* str, uint64_t x, size_t min_digits) { } // signed to string -char* itos(char* str, int64_t x, size_t min_digits) { +static char* itos(char* str, int64_t x, int min_digits) { if(x < 0) { *(str++) = '-'; x *= -1; @@ -82,7 +83,7 @@ int vsprintf(char *str, const char *format, va_list ap) { char cf; int args_put = 0; int persent = 0; - int digits = 0; + int digits = -1; // bool value: '%l..' int _long = 0; @@ -101,8 +102,11 @@ int vsprintf(char *str, const char *format, va_list ap) { } int i = cf - '0'; - if(i >= 0 && i <= 9) + if(i >= 0 && i <= 9) { + if(digits < 0) + digits = 0; digits = 10 * digits + i; + } else { switch(cf) { default: @@ -131,15 +135,24 @@ int vsprintf(char *str, const char *format, va_list ap) { case 's': { const char* arg = ARG(const char*); - strcpy(str, arg); - str += strlen(arg); + if(digits >= 0) { + strncpy(str, arg, digits); + if((int) strlen(arg) > digits) + str += strlen(arg); + else + str += digits; + } + else { + strcpy(str, arg); + str += strlen(arg); + } } break; case 'c': *(str++) = (char)ARG(int); break; } - digits = 0; + digits = -1; persent = 0; _long = 0; args_put++; @@ -147,6 +160,11 @@ int vsprintf(char *str, const char *format, va_list ap) { } else if(cf == '%') { + if(persent) { + // allow %% in fmt to print '%' + persent = 0; + *(str++) = '%'; + } persent = 1; } else { diff --git a/kernel/linker.ld b/kernel/linker.ld index 59076ca..642e87a 100644 --- a/kernel/linker.ld +++ b/kernel/linker.ld @@ -1,31 +1,59 @@ -/* Tell the linker that we want the symbol _start to be our entry point */ +/* Tell the linker that we want an x86_64 ELF64 output file */ +OUTPUT_FORMAT(elf64-x86-64) +OUTPUT_ARCH(i386:x86-64) + +/* We want the symbol _start to be our entry point */ ENTRY(_start) -SECTIONS +/* Define the program headers we want so the bootloader gives us the right */ +/* MMU permissions */ +PHDRS { - . = 0x00100000; + null PT_NULL FLAGS(0) ; /* Null segment */ + text PT_LOAD FLAGS((1 << 0) | (1 << 2)) ; /* Execute + Read */ + rodata PT_LOAD FLAGS((1 << 2)) ; /* Read only */ + data PT_LOAD FLAGS((1 << 1) | (1 << 2)) ; /* Write + Read */ + dynamic PT_DYNAMIC FLAGS((1 << 1) | (1 << 2)) ; /* Dynamic segment needed for PIE */ +} - /* We place the .stivalehdr section containing the header in its own section, */ - /* and we use the KEEP directive on it to make sure it doesn't get discarded. */ - .stivalehdr : { - KEEP(*(.stivalehdr)) - } +SECTIONS +{ + /* We wanna be placed in the higher half, 2MiB above 0 in physical memory. */ + /* Since we are going to use PIE, this is just the base load address, but the */ + /* bootloader will be able to relocate us as it sees fit. */ + . = 0xffffffff80200000; - /* Then let's place all the other traditional executable sections afterwards. */ - .text : ALIGN(0x1000) { + .text : { *(.text*) - } + } :text - .rodata : ALIGN(0x1000) { + /* Move to the next memory page for .rodata */ + . += 0x1000; + + /* We place the .stivale2hdr section containing the header in its own section, */ + /* and we use the KEEP directive on it to make sure it doesn't get discarded. */ + .stivale2hdr : { + KEEP(*(.stivale2hdr)) + } :rodata + + .rodata : { *(.rodata*) - } + } :rodata - .data : ALIGN(0x1000) { + /* Move to the next memory page for .data */ + . += 0x1000; + + .data : { *(.data*) - } + } :data + + /* Dynamic section needed for PIE */ + .dynamic : { + *(.dynamic) + } :data :dynamic - .bss : ALIGN(0x1000) { + .bss : { *(COMMON) *(.bss*) - } + } :data } \ No newline at end of file diff --git a/kernel/memory/kalloc.c b/kernel/memory/kalloc.c index de790ce..f99d084 100644 --- a/kernel/memory/kalloc.c +++ b/kernel/memory/kalloc.c @@ -1,24 +1,31 @@ #include #include +#include "../klib/sprintf.h" #include "kalloc.h" #include "../debug/assert.h" #include "../common.h" -#define HEAP_SIZE_MB 16 -#define HEAP_SIZE HEAP_SIZE_MB * 1024 * 1024 +#define HEAP_SIZE_KB 16 * 1024 +#define HEAP_BEGIN 0x01000000 +#define HEAP_SIZE 1024 * HEAP_SIZE_KB -static uint8_t heap[HEAP_SIZE] __attribute__((section(".bss"))); +//(0x00EFFFFF - HEAP_BEGIN) -static void* brk = (void *) heap; +//static const uint8_t* heap = (uint8_t*)0x00100000; //[HEAP_SIZE] __attribute__((section(".bss"))); + +static void* brk = (void *) HEAP_BEGIN; void* kmalloc(size_t size) { void* ptr = brk; brk = mallign16(brk+size); - assert((size_t)brk - (size_t)heap < HEAP_SIZE); + kprintf("kmalloc(%lu); heap use: %u ko / %u ko\n", + size, ((size_t)brk - (size_t)HEAP_BEGIN) / 1024, HEAP_SIZE / 1024); + + assert((size_t)brk - (size_t)HEAP_BEGIN < HEAP_SIZE); return ptr; } diff --git a/kernel/regs.s b/kernel/regs.s index 23a8e23..f1e478c 100644 --- a/kernel/regs.s +++ b/kernel/regs.s @@ -4,6 +4,10 @@ [global _es] [global _fs] [global _gs] +[global inb] +[global outb] +[global get_rflags] +[global set_rflags] section .text @@ -36,4 +40,36 @@ _fs: xor rax,rax mov ax, fs ret - \ No newline at end of file + + +get_rflags: + pushfq + pop rax + ret + +; set_rflags(uint64_t rflags) +set_rflags: + push rdi + popfq + ret + + +; uint8_t inb(port) +inb: + push rdx + mov rdx, rdi + xor rax, rax + + in al, dx + + pop rdx + ret + +outb: + push rdx + mov al, dil + + out dx, al + + pop rdx + ret diff --git a/kernel/video/terminal.c b/kernel/video/terminal.c index fb1bafd..841310c 100644 --- a/kernel/video/terminal.c +++ b/kernel/video/terminal.c @@ -21,8 +21,6 @@ static struct Char make_Char(char c); static void print_char(const struct Char* restrict c, int line, int col); static terminal_handler_t terminal_handler = NULL; -static uint32_t terminal_foreground = 0xa0a0a0; -static uint32_t terminal_background = 0x00; // need to redraw the entire terminal static bool need_refresh = false; @@ -54,7 +52,7 @@ void setup_terminal(void) { assert(charmap != NULL); assert(charmap->bpp == 1); - assert(charmap->pitch == 2); + assert(charmap->pitch == 1); assert(charmap->w == CHARMAP_W); assert(charmap->h == CHARMAP_H); @@ -71,14 +69,14 @@ void setup_terminal(void) { buffer = kmalloc(nlines * ncols * sizeof(struct Char)); - clear_terminal(); + terminal_clear(); set_terminal_handler(write_string); } -void clear_terminal(void) { +void terminal_clear(void) { cur_col = 0; cur_line = 0; first_line = 0; @@ -164,7 +162,7 @@ static void emplace_char(char c) { break; case '\t': - cur_col = (cur_col / TAB_SPACE) * TAB_SPACE; + cur_col = ((cur_col + TAB_SPACE - 1) / TAB_SPACE) * TAB_SPACE; if(cur_col >= ncols) next_line(); @@ -209,9 +207,12 @@ static void print_char(const struct Char* restrict c, int line, int col) { }; */ - blitchar(charmap, c->c, c->fg_color, c->bg_color, + blitcharX2(charmap, c->c, c->fg_color, c->bg_color, col * FONTWIDTH, line * LINE_HEIGHT); + + + //imageDraw(charmap, NULL, NULL); //imageFillRect(c->bg_color, &interlineRect); @@ -256,6 +257,6 @@ void set_terminal_handler(terminal_handler_t h) { } void terminal_set_colors(uint32_t foreground, uint32_t background) { - terminal_foreground = foreground; - terminal_background = background; + current_fgcolor = foreground; + current_bgcolor = background; } diff --git a/kernel/video/terminal.h b/kernel/video/terminal.h index 2300723..94cf94a 100644 --- a/kernel/video/terminal.h +++ b/kernel/video/terminal.h @@ -2,13 +2,15 @@ #include #include +#include "../debug/assert.h" - -#define CHARMAP_W 12 -#define CHARMAP_H 4096 +#define CHARMAP_W 6 +#define CHARMAP_H 2048 // must be divisible by 4 !!! +static_assert(CHARMAP_H % 4 == 0); + #define FONTWIDTH CHARMAP_W #define FONTHEIGHT (CHARMAP_H / 256) #define INTERLINE 0 @@ -30,7 +32,7 @@ void set_terminal_fgcolor(uint32_t c); void setup_terminal(void); -void clear_terminal(void); +void terminal_clear(void); // no use another terminal handler void set_terminal_handler(terminal_handler_t h); diff --git a/kernel/video/video.c b/kernel/video/video.c index e3f1a08..7606379 100644 --- a/kernel/video/video.c +++ b/kernel/video/video.c @@ -6,6 +6,7 @@ #include "../common.h" #include "../memory/kalloc.h" #include "../debug/assert.h" +#include "../debug/dump.h" #define MAX(X,Y) X > Y ? X : Y @@ -244,9 +245,8 @@ Image* alloc_image(uint32_t width, uint32_t height, uint32_t bpp) { assert(bpp % 8 == 0 || bpp == 1); if(bpp == 1) { - int words = (width + 15) / 16; - // align on 2 byte - ret->pitch = words * 2; + // align on 1 byte + ret->pitch = (width + 7) / 8; } else ret->pitch = (uint32_t)allign16(width * (bpp/8)); @@ -277,8 +277,8 @@ struct BMPFileHeader { uint16_t reserved2; // uint32_t body_offset;// byte offset of the pixel body uint32_t header_size;// should be eq to sizeof(BMPFileHeader) - int32_t w; // BMP width in pixels - int32_t h; // BMP height in pixels + int32_t w; // BMP width in pixels + int32_t h; // BMP height in pixels uint16_t one; // should be eq to 1 uint16_t bpp; // bits per pixel } __packed; @@ -421,47 +421,97 @@ void blitchar(const struct Image* charset, ((uint64_t) fg_color << 32) | bg_color, ((uint64_t) fg_color << 32) | fg_color, }; - - uint16_t srcy = c * FONTHEIGHT; uint64_t* dst_ptr = (uint64_t *)(screen.pix + screen.pitch * dsty + 4 * dstx); - uint16_t dst_skip = screen.pitch - FONTWIDTH * 4; + uint16_t dst_skip = screen.pitch - FONTWIDTH * 4; - // 4 2-byte lines = 4*16 = 64 (1 access every 4 lines) + // 4 2-byte lines = 8*8 = 64 (1 access every 4 lines) // 1st line address for the selected char - uint64_t* lines_ptr = charset->pix + srcy * 2; + uint64_t* lines_ptr = (uint64_t*)charset->pix + c; + + // loop over 4-line chunks - for(size_t n_lines = FONTHEIGHT / 4; n_lines > 0; --n_lines) { +// for(size_t n_lines = FONTHEIGHT / 4; n_lines > 0; --n_lines) { - uint64_t lines = *(lines_ptr++); + uint64_t lines = *lines_ptr; - // 64 bit = 4 lines - for(size_t n_line = 4; n_line > 0; n_line--) { - uint16_t line = lines; - // lines are 16bit aligned - - lines >>= 16; - - for(size_t n_col2 = FONTWIDTH / 2 ; n_col2 > 0 ; n_col2--) { - uint16_t index = line & 0b11; + // 64 bit = 8 lines +#pragma GCC unroll 8 + for(size_t n_line = 8; n_line > 0; n_line--) { + // lines are 8bit aligned + +#pragma GCC unroll 3 + for(size_t n_col2 = FONTWIDTH / 2 ; n_col2 > 0 ; n_col2--) { + uint16_t index = lines & 0b11; - - *(dst_ptr++) = colormap[index]; - line >>= 2; - } - dst_ptr += dst_skip / sizeof(dst_ptr); + *(dst_ptr++) = colormap[index]; + lines >>= 2; } + dst_ptr += dst_skip / 8; + + lines >>= 8 - FONTWIDTH; + } + +} + + + + +void blitcharX2(const struct Image* charset, + char c, uint32_t fg_color, uint32_t bg_color, + uint16_t dstx, uint16_t dsty) { + + const uint64_t colormap[] = { + ((uint64_t) bg_color << 32) | bg_color, + ((uint64_t) bg_color << 32) | fg_color, + ((uint64_t) fg_color << 32) | bg_color, + ((uint64_t) fg_color << 32) | fg_color, + }; + + uint16_t srcy = c * FONTHEIGHT; + + uint64_t* dst_ptr = (uint64_t *)(screen.pix + screen.pitch * dsty + 4 * dstx); + uint16_t dst_skip = screen.pitch - FONTWIDTH * 4; +/// second line to modify + uint64_t* dst_ptr2 = dst_ptr + dst_skip / 8; + + uint64_t* lines_ptr = (uint64_t*)charset->pix + c; + uint64_t lines = *lines_ptr; +#pragma GCC unroll 8 + for(size_t n_line = 8; n_line > 0; n_line--) { +#pragma GCC unroll 3 + + uint64_t lines0 = lines; + + for(size_t n_col2 = FONTWIDTH / 2 ; n_col2 > 0 ; n_col2--) { + uint16_t index = lines0 & 0b11; + + register uint64_t pixs_val = colormap[index]; + + *(dst_ptr++) = pixs_val; + *(dst_ptr2++) = pixs_val; + // x2 + lines0 >>= 2; + } + dst_ptr += dst_skip / 8; + dst_ptr2 += dst_skip / 8; + + + lines >>= 8 - FONTWIDTH; } + } + // else this func wont work -static_assert(FONTWIDTH % 2 == 0); -static_assert(FONTHEIGHT % 4 == 0); +static_assert(FONTWIDTH == 6); +static_assert(FONTWIDTH % 2 == 0); +static_assert(FONTHEIGHT == 8); @@ -474,44 +524,51 @@ Image* loadBMP_24b_1b(const void* rawFile) { if(check_BMP_header(header)) return NULL; - assert(header->bpp == 24); + //assert(header->bpp == 24); 5 -> - uint32_t w = header->w; uint32_t h = header->h; const uint8_t* srcpix = (const uint8_t *)header + header->body_offset; + + kprintf("%x ; %u\n", header, header->body_offset); + + dump(srcpix, 4 * 6 * 20, 4 * 5, DUMP_HEX8); + //asm volatile("hlt"); Image* ret = alloc_image(w,h, 1); + + assert(ret->pitch == 1); + assert(w == 6); + assert(h == 2048); - size_t bpitch = ret->pitch / 2; - uint16_t* pix = ret->pix; + size_t bpitch = ret->pitch; + uint8_t* pix = ret->pix; for(size_t y = 0; y < h; y++) { - uint16_t word = 0; + uint8_t byte = 0; uint16_t _x = 0; for(size_t x = 0; x < w; x++) { - const uint8_t* src_ptr = (srcpix + 3 * (h-1 - y) * w + 3 * (w-1-x)); + const uint8_t* src_ptr = (srcpix + 20 * (h-1 - y) + 3 * (w-1-x)); - word <<= 1; + byte <<= 1; // put 1 iif r channel > 128 - word |= *(src_ptr) >> 7; + byte |= *(src_ptr) >> 7; - if((x % 16 == 0 && x != 0) || x == w-1) { - - pix[_x + y * bpitch] = word; - ++_x; - word = 0; + //if((x % 8 == 0 && x != 0) || x == w-1) { + if(x == w-1) { + //pix[_x + y * bpitch] = byte; } } + pix[y] = byte; } return ret; diff --git a/kernel/video/video.h b/kernel/video/video.h index 173a515..2571189 100644 --- a/kernel/video/video.h +++ b/kernel/video/video.h @@ -72,5 +72,8 @@ Image *loadBMP_24b_1b(const void *rawFile); void blitchar(const struct Image *charset, char c, uint32_t fg_color, uint32_t bg_color, uint16_t dstx, uint16_t dsty); +void blitcharX2(const struct Image *charset, + char c, uint32_t fg_color, uint32_t bg_color, + uint16_t dstx, uint16_t dsty); #endif \ No newline at end of file diff --git a/resources/bmp/charmap.bmp b/resources/bmp/charmap.bmp index 58fb5787999d004ebdb1e1f5f05f9681372fffa4..612cd4e0a5e14f52172187fc04cf98e78c2e3885 100644 GIT binary patch literal 41014 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 diff --git a/resources/bmp/font_converter.py b/resources/bmp/font_converter.py index 2601d88..43af809 100644 --- a/resources/bmp/font_converter.py +++ b/resources/bmp/font_converter.py @@ -1,18 +1,18 @@ -from PIL import Image -import numpy as np - -img = np.array(Image.open('charmap.bmp')) - - -i: int # col -j: int # line -ascii: int = 0 -chars = [] # chars tab - -for i in range(0,256,16): - for j in range(0,192,12): - chars.append(img[i:i+16,j:j+12,:]) - -chars_arr = np.concatenate(chars, axis=0) - -Image.fromarray(chars_arr).save("new.bmp") +from PIL import Image +import numpy as np + +img = np.array(Image.open('charmap.bmp')) + + +i: int # col +j: int # line +ascii: int = 0 +chars = [] # chars tab + +for i in range(0,256,16): + for j in range(0,192,12): + chars.append(img[i:i+16,j:j+12,:]) + +chars_arr = np.concatenate(chars, axis=0) + +Image.fromarray(chars_arr).save("new.bmp")