From a3e4aabe92d4a062eac38dd28900fad59e630773 Mon Sep 17 00:00:00 2001 From: d0p1 Date: Sun, 14 Jul 2024 18:48:36 +0200 Subject: [PATCH] feat(kernel): detect floppy --- kernel/Makefile | 5 +-- kernel/dev/at/cmos.inc | 15 ++++++++ kernel/dev/at/com.inc | 4 +++ kernel/dev/at/floppy.inc | 35 ++++++++++++++++++ kernel/dev/at/ide.inc | 4 +++ kernel/dev/at/ne2k.inc | 9 +++++ kernel/dev/console.inc | 19 ++++++++++ kernel/dev/dev.inc | 3 +- kernel/dev/vga_console.inc | 25 ------------- kernel/kernel.asm | 5 ++- kernel/klog.inc | 10 +++--- kernel/vfs.inc | 74 ++++++++++++++++++++++++++++++++++++++ 12 files changed, 173 insertions(+), 35 deletions(-) create mode 100644 kernel/dev/at/cmos.inc create mode 100644 kernel/dev/at/com.inc create mode 100644 kernel/dev/at/floppy.inc create mode 100644 kernel/dev/at/ide.inc create mode 100644 kernel/dev/at/ne2k.inc delete mode 100644 kernel/dev/vga_console.inc diff --git a/kernel/Makefile b/kernel/Makefile index bb1bd93..202130e 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -6,7 +6,6 @@ KERNEL = vmstupid.sys SRCS = kernel.asm \ const.inc \ klog.inc \ - dev/vga_console.inc \ mm/mm.inc \ mm/pmm.inc \ lock.inc \ @@ -14,9 +13,11 @@ SRCS = kernel.asm \ isr.inc \ pic.inc \ idt.inc \ + dev/console.inc \ dev/at/pit.inc \ dev/at/cga.inc \ - dev/at/kbd.inc + dev/at/kbd.inc \ + dev/at/floppy.inc .PHONY: all all: $(KERNEL) diff --git a/kernel/dev/at/cmos.inc b/kernel/dev/at/cmos.inc new file mode 100644 index 0000000..d976727 --- /dev/null +++ b/kernel/dev/at/cmos.inc @@ -0,0 +1,15 @@ + ;; File: cmos.inc + ;; + ;; > +-------------------------------- + ;; > | 0x00 | RTC seconds + ;; > +--------------- + ;; > | 0x01 | RTC seconds alarm + ;; > +-------------------- + ;; > | 0x02 | RTC minutes + ;; > +------------------------ + + +CMOS_COMMAND = 0x70 +CMOS_DATA = 0x71 + +CMOS_FLOPPY_TYPE = 0x10 diff --git a/kernel/dev/at/com.inc b/kernel/dev/at/com.inc new file mode 100644 index 0000000..9d86b7f --- /dev/null +++ b/kernel/dev/at/com.inc @@ -0,0 +1,4 @@ + ;; File: com.inc + +com_probe: + ret diff --git a/kernel/dev/at/floppy.inc b/kernel/dev/at/floppy.inc new file mode 100644 index 0000000..4503bea --- /dev/null +++ b/kernel/dev/at/floppy.inc @@ -0,0 +1,35 @@ + ;; File: floppy.inc + +CMOS_FLOPPY_TYPE = 0x10 + +FLOPPY_NONE = 0x0 +FLOPPY_360KB = 0x1 +FLOPPY_1_2MB = 0x2 +FLOPPY_720KB = 0x3 +FLOPPY_1_44MB = 0x4 +FLOPPY_2_88MB = 0x5 + +floppy_probe: + mov al, CMOS_FLOPPY_TYPE + out CMOS_COMMAND, al + in al, CMOS_DATA + mov ah, al + and al, 0x0F + and ah, 0xF0 + or al, al + jz @f + push ax + mov esi, szMsgFloppy1Found + call klog + pop ax +@@: + or ah, ah + jz @f + mov esi, szMsgFloppy0Found + call klog +@@: + ret + + +szMsgFloppy0Found db "floppy0: Found", 0 +szMsgFloppy1Found db "floppy1: Found", 0 diff --git a/kernel/dev/at/ide.inc b/kernel/dev/at/ide.inc new file mode 100644 index 0000000..12fb483 --- /dev/null +++ b/kernel/dev/at/ide.inc @@ -0,0 +1,4 @@ + ;; File: ide.inc + +ide_probe: + ret diff --git a/kernel/dev/at/ne2k.inc b/kernel/dev/at/ne2k.inc new file mode 100644 index 0000000..c159e0e --- /dev/null +++ b/kernel/dev/at/ne2k.inc @@ -0,0 +1,9 @@ + ;; File: ne2k.inc + ;; + ;; Usefull links: + ;; - + +NE2K_IOBASE = 0x300 + +ne2k_probe: + ret diff --git a/kernel/dev/console.inc b/kernel/dev/console.inc index 3335d2a..b053ea6 100644 --- a/kernel/dev/console.inc +++ b/kernel/dev/console.inc @@ -1,2 +1,21 @@ ;; File: console.inc +console_probe: + ret +console_write: + mov eax, uConsoleLock + call lock_acquire + + mov eax, uConsoleLock + call lock_release + ret + +console_read: + mov eax, uConsoleLock + call lock_acquire + + mov eax, uConsoleLock + call lock_release + ret + +uConsoleLock dd 0 diff --git a/kernel/dev/dev.inc b/kernel/dev/dev.inc index 3a5836b..80dd98e 100644 --- a/kernel/dev/dev.inc +++ b/kernel/dev/dev.inc @@ -1,9 +1,8 @@ ;; File: dev.inc - - struc Device { .write dd ? .read dd ? + .probe dd ? } diff --git a/kernel/dev/vga_console.inc b/kernel/dev/vga_console.inc deleted file mode 100644 index dd12861..0000000 --- a/kernel/dev/vga_console.inc +++ /dev/null @@ -1,25 +0,0 @@ - ;; File: vga_console.inc - -VGA_COLUMNS = 80 -VGA_LINES = 25 -VGA_BASE = 0xC00B8000 - -vga_lineno db 0 -vga_colno db 0 - - - ;; Function: vga_console_clear -vga_console_clear: - mov ecx, VGA_COLUMNS*VGA_LINES - xor al, al - mov edi, VGA_BASE - rep stosb - ret - - ;; Function: vga_console_putc - ;; - ;; In: - ;; AL - charactere to print -vga_console_putc: - - ret diff --git a/kernel/kernel.asm b/kernel/kernel.asm index 1c1f2fa..6586c67 100644 --- a/kernel/kernel.asm +++ b/kernel/kernel.asm @@ -70,6 +70,8 @@ kmain: mov al, 'X' call cga_putc + call floppy_probe + .halt: hlt jmp $ @@ -80,7 +82,7 @@ kmain: jmp .halt include 'klog.inc' - include 'dev/vga_console.inc' + include 'dev/console.inc' include 'mm/mm.inc' include 'lock.inc' include 'gdt.inc' @@ -91,6 +93,7 @@ kmain: include 'dev/at/pit.inc' include 'dev/at/kbd.inc' include 'dev/at/cga.inc' + include 'dev/at/floppy.inc' szMsgKernelAlive db "Kernel (", VERSION_FULL , ") is alive", 0 diff --git a/kernel/klog.inc b/kernel/klog.inc index 0231086..4366fb0 100644 --- a/kernel/klog.inc +++ b/kernel/klog.inc @@ -1,7 +1,7 @@ ;; File: klog.inc ;; Kernel logging utilities -CMOS_ADDRESS = 0x70 +CMOS_COMMAND = 0x70 CMOS_DATA = 0x71 CMOS_REG_SECOND = 0x00 @@ -44,13 +44,13 @@ klog_print: klog_print_time: @@: mov al, 0x0A - out CMOS_ADDRESS, al + out CMOS_COMMAND, al in al, CMOS_DATA and al, 0x80 jnz @b mov al, CMOS_REG_HOUR - out CMOS_ADDRESS, al + out CMOS_COMMAND, al in al, CMOS_DATA mov ah, al @@ -64,7 +64,7 @@ klog_print_time: mov [szTime + 2], al mov al, CMOS_REG_MINUTE - out CMOS_ADDRESS, al + out CMOS_COMMAND, al in al, CMOS_DATA mov ah, al @@ -78,7 +78,7 @@ klog_print_time: mov [szTime + 5], al mov al, CMOS_REG_SECOND - out CMOS_ADDRESS, al + out CMOS_COMMAND, al in al, CMOS_DATA mov ah, al diff --git a/kernel/vfs.inc b/kernel/vfs.inc index 96a4f92..0ba3f18 100644 --- a/kernel/vfs.inc +++ b/kernel/vfs.inc @@ -1,3 +1,77 @@ + ;; File: vfs.inc + ;; + ;; Usefull links: + ;; - + ;; + +struc VFS { + .next dd ? + .op dd ? + .vnodes dd ? + .flag dd ? + .bsize dd ? + .data dd ? +} + +struc VFSOps { + .mount dd ? + .umount dd ? + .root dd ? + .statfs dd ? + .sync dd ? + .fid dd ? + .vget dd ? +} + +VNODE_TYPE_NON = 0x0 +VNODE_TYPE_REG = 0x1 +VNODE_TYPE_DIR = 0x2 +VNODE_TYPE_BLK = 0x3 +VNODE_TYPE_CHR = 0x4 +VNODE_TYPE_LNK = 0x5 +VNODE_TYPE_SOCK = 0x6 +VNODE_TYPE_BAD = 0x7 + +struc VNode { + .flag dw ? + .refcount dw ? + .shlockc dw ? + .exlockc dw ? + .vfs dd ? + .op dd ? + .sock dd ? + .vfsp dd ? + .type db ? + .data dd ? +} + +struc VNodeOps { + .open dd ? + .close dd ? + .rdwr dd ? + .ioctl dd ? + .select dd ? + .getattr dd ? + .setattr dd ? + .access dd ? + .lookup dd ? + .create dd ? + .remove dd ? + .link dd ? + .rename dd ? + .mkdir dd ? + .rmdir dd ? + .readdir dd ? + .symlink dd ? + .readlink dd ? + .fsync dd ? + .inactive dd ? + .bmap dd ? + .strategy dd ? + .bread dd ? + .brelse dd ? +} + vfs_init: ret