diff --git a/Makefile b/Makefile index b716801b..1a402af3 100644 --- a/Makefile +++ b/Makefile @@ -29,11 +29,14 @@ programs/longtwo/a.out: force_look programs/loop/a.out: force_look cd programs/loop; ${MAKE} a.out +programs/keyboard/a.out: force_look + cd programs/keyboard; ${MAKE} a.out + hdd.img: dd if=/dev/zero of=hdd.img bs=516096c count=1000 (echo n; echo p; echo 1; echo ""; echo ""; echo t; echo c; echo a; echo 1; echo w;) | sudo fdisk -u -C1000 -S63 -H16 hdd.img -thor.flp: hdd.img bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin programs/one/a.out programs/hello/a.out programs/long/a.out programs/loop/a.out programs/longone/a.out programs/longtwo/a.out +thor.flp: hdd.img bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin programs/one/a.out programs/hello/a.out programs/long/a.out programs/loop/a.out programs/longone/a.out programs/longtwo/a.out programs/keyboard/a.out mkdir -p mnt/fake/ dd if=bootloader/stage1.bin of=hdd.img conv=notrunc dd if=bootloader/stage2.bin of=hdd.img seek=1 conv=notrunc @@ -47,6 +50,7 @@ thor.flp: hdd.img bootloader/stage1.bin bootloader/stage2.bin kernel/kernel.bin sudo /bin/cp programs/longone/a.out mnt/fake/longone sudo /bin/cp programs/longtwo/a.out mnt/fake/longtwo sudo /bin/cp programs/loop/a.out mnt/fake/loop + sudo /bin/cp programs/keyboard/a.out mnt/fake/keyboard sleep 0.1 sudo /bin/umount mnt/fake/ sudo /sbin/losetup -d /dev/loop0 diff --git a/programs/keyboard/Makefile b/programs/keyboard/Makefile new file mode 100644 index 00000000..be45dace --- /dev/null +++ b/programs/keyboard/Makefile @@ -0,0 +1,15 @@ +.PHONY: default clean + +default: a.out + +include ../../cpp.mk + +%.cpp.o: src/%.cpp + $(CC) $(PROGRAM_FLAGS) $(CPP_FLAGS_64) $(WARNING_FLAGS) -c $< -o $@ + +a.out: main.cpp.o + $(CC) $(PROGRAM_LINK_FLAGS) $(CPP_FLAGS_64) -o a.out main.cpp.o + +clean: + rm *.cpp.o + rm -rf a.out diff --git a/programs/keyboard/src/main.cpp b/programs/keyboard/src/main.cpp new file mode 100644 index 00000000..67c42bf5 --- /dev/null +++ b/programs/keyboard/src/main.cpp @@ -0,0 +1,20 @@ +//======================================================================= +// Copyright Baptiste Wicht 2013-2014. +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +//======================================================================= + +#include +#include + +const char* source = "Hello world"; + +int main(){ + for(int i = 0; i < 10; ++i){ + auto c = read_char(); + print(c); + } + + exit(0); +} \ No newline at end of file diff --git a/userlib/include/print.hpp b/userlib/include/print.hpp index d615c723..6ff08181 100644 --- a/userlib/include/print.hpp +++ b/userlib/include/print.hpp @@ -8,6 +8,8 @@ #ifndef USER_PRINT_HPP #define USER_PRINT_HPP +//TODO Rename in console + #include void print(char c){ @@ -45,4 +47,13 @@ void print_line(size_t v){ print_line(); } +char read_char(){ + size_t value; + asm volatile("mov rax, 3; int 50; mov %0, rax" + : "=m" (value) + : //No inputs + : "rax", "rbx"); + return value; +} + #endif