From 40d3009b1a2375c2a65477839a7c2f5c5544ea40 Mon Sep 17 00:00:00 2001 From: d0p1 Date: Wed, 17 Jul 2024 09:41:36 +0200 Subject: [PATCH] chore: sync repo --- include/Makefile | 2 +- include/elf.h | 8 ++++++++ include/sys/errno.h | 6 ++++++ kernel/dev/at/cga.inc | 3 +++ kernel/dev/at/cmos.inc | 2 ++ kernel/dev/at/com.inc | 3 +++ kernel/dev/at/floppy.inc | 35 ++++++++++++++++++++++++++++++---- kernel/dev/at/kbd.inc | 36 ++++++++++++++++++++++++++--------- kernel/dev/console.inc | 3 ++- kernel/dev/dev.inc | 41 ++++++++++++++++++++++++++++++++++------ kernel/fs/fat.inc | 33 ++++++++++++++++++++++++++++++++ kernel/kernel.asm | 1 + kernel/sys/errno.inc | 2 ++ 13 files changed, 154 insertions(+), 21 deletions(-) create mode 100644 include/elf.h create mode 100644 include/sys/errno.h create mode 100644 kernel/sys/errno.inc diff --git a/include/Makefile b/include/Makefile index 41a9163..2df54d5 100644 --- a/include/Makefile +++ b/include/Makefile @@ -1,4 +1,4 @@ -INCS = coff.h +INCS = coff.h elf.h .PHONY: all all: diff --git a/include/elf.h b/include/elf.h new file mode 100644 index 0000000..a948a16 --- /dev/null +++ b/include/elf.h @@ -0,0 +1,8 @@ +#ifndef ELF_H +# define ELF_H 1 + +# include + +/* TODO */ + +#endif /* !ELF_H */ diff --git a/include/sys/errno.h b/include/sys/errno.h new file mode 100644 index 0000000..0a33ca8 --- /dev/null +++ b/include/sys/errno.h @@ -0,0 +1,6 @@ +#ifndef SYS_ERRNO_H +# define SYS_ERRNO_H 1 + +# define ENODEV 19 + +#endif /* !SYS_ERRNO_H */ diff --git a/kernel/dev/at/cga.inc b/kernel/dev/at/cga.inc index c9bccaa..603c6cc 100644 --- a/kernel/dev/at/cga.inc +++ b/kernel/dev/at/cga.inc @@ -131,3 +131,6 @@ cga_putc: leave ret + +cga_device: + db 'video', 0, 0, 0 diff --git a/kernel/dev/at/cmos.inc b/kernel/dev/at/cmos.inc index d8e8272..fe43de2 100644 --- a/kernel/dev/at/cmos.inc +++ b/kernel/dev/at/cmos.inc @@ -62,3 +62,5 @@ CMOS_REG_MINUTE = 0x02 CMOS_REG_HOUR = 0x04 CMOS_FLOPPY_TYPE = 0x10 + +CMOS_INSTALLED_EQUIPMENT = 0x14 diff --git a/kernel/dev/at/com.inc b/kernel/dev/at/com.inc index 1c50143..52755c8 100644 --- a/kernel/dev/at/com.inc +++ b/kernel/dev/at/com.inc @@ -1,7 +1,10 @@ ;; File: com.inc +COM_MAJOR = 1 + com_probe: ret com_irq: iret + diff --git a/kernel/dev/at/floppy.inc b/kernel/dev/at/floppy.inc index 4044fb1..bec9b68 100644 --- a/kernel/dev/at/floppy.inc +++ b/kernel/dev/at/floppy.inc @@ -4,7 +4,8 @@ ;; - ;; - -CMOS_FLOPPY_TYPE = 0x10 +FLOPPY_BDEV_MAJOR = 0 +FLOPPY_CDEV_MAJOR = 9 FLOPPY_NONE = 0x0 FLOPPY_360KB = 0x1 @@ -13,6 +14,12 @@ FLOPPY_720KB = 0x3 FLOPPY_1_44MB = 0x4 FLOPPY_2_88MB = 0x5 +FLOPPY_MAX = 2 + +struc Floppy { + .active db ? +} + floppy_probe: mov al, CMOS_FLOPPY_TYPE out CMOS_COMMAND, al @@ -34,13 +41,33 @@ floppy_probe: @@: ret +floppy_init: + call floppy_probe + ret + +floppy_strategy: + ret + +floppy_open: + + xor eax, eax + ret + +floppy_close: + ret + +floppy_ioctl: + mov eax, ENODEV + ret + floppy_irq: iret floppy_device: - dd floppy_probe - dd 0 - dd 0 + db 'floppy', 0, 0 + dd floppy_init + db 0 + db 0 szMsgFloppy0Found db "floppy0: Found", 0 szMsgFloppy1Found db "floppy1: Found", 0 diff --git a/kernel/dev/at/kbd.inc b/kernel/dev/at/kbd.inc index a15f250..8a57881 100644 --- a/kernel/dev/at/kbd.inc +++ b/kernel/dev/at/kbd.inc @@ -7,6 +7,27 @@ KBD_STATP = 0x64 KBD_ATAP = 0x60 KBS_DIB = 0x01 + ;; function: kbd_probe + ;; + ;; Out: + ;; AL - 0 if not found +kbd_probe: + mov al, CMOS_INSTALLED_EQUIPMENT + out CMOS_COMMAND, al + in al, CMOS_DATA + and al, 0x4 + ret + +kbd_init: + call kbd_probe + or al, al + jz @f + + mov esi, szMsgKbdFound + call klog +@@: + ret + kbd_getc: in al, KBD_STATP and al, KBS_DIB @@ -34,7 +55,7 @@ kbd_irq: popa iret -szMsgKbdIRQ db "KBD: IRQ", 0 +szMsgKbdFound db "KBD: found", 0 aKbdNormalMap: db 0, 0x1B, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' @@ -44,11 +65,8 @@ aKbdNormalMap: db 'b', 'n', 'm', ',', '.', '/', 0, '*', 0, ' ', 0, 0 db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '7' db '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.' - db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1B, '1', '2' - db '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 0x08, 0x09 - db 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']' - db LF, 0, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';' - db "'", '`', 0, '\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',' - db '.', '/', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0 - db 0, 0, 0, 0, 0, 0, 0, '7', '8', '9', '-', '4' - db '5', '6', '+', '1', '2', '3', '0', '.' + db 0, 0, 0, 0, 0, 0, 0, 0 + +kbd_device: + db 'kbd', 0, 0, 0, 0, 0 + dd kbd_init diff --git a/kernel/dev/console.inc b/kernel/dev/console.inc index 2c5d748..65fda22 100644 --- a/kernel/dev/console.inc +++ b/kernel/dev/console.inc @@ -22,7 +22,8 @@ console_init: ret console_device: - dd console_probe + db 'console', 0 + dd console_init dd console_write dd console_write diff --git a/kernel/dev/dev.inc b/kernel/dev/dev.inc index a13866e..f267031 100644 --- a/kernel/dev/dev.inc +++ b/kernel/dev/dev.inc @@ -1,22 +1,51 @@ ;; File: dev.inc - struc Device { - .probe dd ? - .write dd ? - .read dd ? + .name db 8 dup(?) + .init dd ? } DEFN Device +struc BlkDev { + .open dd ? + .close dd ? + .strategy dd ? + .ioctl dd ? + .close dd ? + .dump dd ? + .psize dd ? +} + +struc CharDev { + .open dd ? + .close dd ? + .read dd ? + .write dd ? + .ioctl dd ? + .select dd ? + .stop dd ? + .mmap dd ? + .reset dd ? +} + +aBlockDevices: + dd 10 dup(0) +.end: + +aCharDevices: + dd 10 dup(0) +.end: + aDevices: - dd console_device dd floppy_device + dd kbd_device + dd console_device .end: dev_init: mov ecx, aDevices @@: mov eax, [ecx] - mov eax, [eax + Device.probe] + mov eax, [eax + Device.init] push ecx call eax pop ecx diff --git a/kernel/fs/fat.inc b/kernel/fs/fat.inc index 8d4897b..4c4a960 100644 --- a/kernel/fs/fat.inc +++ b/kernel/fs/fat.inc @@ -36,6 +36,7 @@ struc FATFS_BootSector16 { .code db 448 dup(?) .signature dw ? } +DEFN FATFS_BootSector16 struc FATFS_BootSector32 { .base FATFS_BootSectorBase @@ -56,6 +57,7 @@ struc FATFS_BootSector32 { .code db 420 dup(?) .signature dw ? } +DEFN FATFS_BootSector32 szVfsFatName db 'FATFS', 0 @@ -95,3 +97,34 @@ fatfs_newvnode: fatfs_mountroot: ret + +;; vnode ops +fatfs_open: + ret + +fatfs_close: + ret + +fatfs_rdwr: + ret + +fatfs_ioctl: + ret + +fatfs_select: + ret + +fatfs_getattr: + ret + +fatfs_setattr: + ret + +fatfs_access: + ret + +fatfs_lookup: + ret + +fatfs_create: + ret diff --git a/kernel/kernel.asm b/kernel/kernel.asm index f3eac09..e02758d 100644 --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -5,6 +5,7 @@ include 'sys/macro.inc' include 'sys/bootinfo.inc' include 'sys/cpu.inc' + include 'sys/errno.inc' org KBASE use32 diff --git a/kernel/sys/errno.inc b/kernel/sys/errno.inc new file mode 100644 index 0000000..24422db --- /dev/null +++ b/kernel/sys/errno.inc @@ -0,0 +1,2 @@ + +ENODEV = 19