From 05393b36f84b79293b9d749d78ec9638e7534103 Mon Sep 17 00:00:00 2001 From: xamidev Date: Sun, 21 Jul 2024 15:23:32 +0200 Subject: [PATCH] Add: read keyboard input (getch) --- iso/boot/kernel.elf | Bin 21124 -> 21304 bytes os.iso | Bin 497664 -> 497664 bytes src/kernel/kb.c | 22 +++++++++++++++++++++- src/kernel/kmain.c | 9 ++++++++- src/kernel/system.h | 1 + src/libc/stdio.c | 21 +++++++++++++++++++++ src/libc/stdio.h | 2 ++ 7 files changed, 53 insertions(+), 2 deletions(-) diff --git a/iso/boot/kernel.elf b/iso/boot/kernel.elf index 36272c2179d190d3d384dc72728ed799be77e642..b43f5e99c48f207891680c64f68cf60685e37abc 100755 GIT binary patch delta 7045 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 Mv+%XyM||o31^DctVE_OC delta 6334 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 WDfc-lZa@cZ{8D*;%W$4CE$LsZ=)qwC diff --git a/os.iso b/os.iso index 390cb5180e96b37fdf5d6ef9be4ea51837c11c40..6d4fd1dd75a3371feb07bec639adf9df983ccf1c 100644 GIT binary patch delta 7723 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 UU3`WwJ`=Y13@Wzw&e*sA17g}zegFUf delta 7017 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 w6h{u@|2oQV!-TEk%3