From 4ef561edf5a4b59abed5ea7661082e81859409e4 Mon Sep 17 00:00:00 2001 From: Andreew Gregory Date: Thu, 2 Apr 2026 23:44:34 +0300 Subject: [PATCH] I am gonna be departed to Belorussia in 1 day. I have only 1 day left to do bdz *crying emoji* --- .gitignore | 2 ++ Makefile | 4 +-- drivers/port.h | 1 + drivers/uart.c | 1 + drivers/vga.c | 2 +- fs/fs.h | 1 + lib/bribki.h | 21 +++++++++++ mbr.S | 1 + tasks/float_basic/fp16/run/output | 53 ++++++++++++++++++++++++++++ tasks/float_basic/fp16/solution | Bin 0 -> 16240 bytes tasks/float_basic/okay-1/solution | Bin 0 -> 17176 bytes tasks/x86_review/anagram/solution | Bin 0 -> 16000 bytes tasks/x86_review/count/solution | Bin 0 -> 16024 bytes tasks/x86_review/ppm-magic/a.out | Bin 0 -> 21320 bytes tasks/x86_review/ppm-magic/solution | Bin 0 -> 17344 bytes tasks/x86_review/recursion/solution | Bin 0 -> 16120 bytes 16 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 lib/bribki.h create mode 100644 tasks/float_basic/fp16/run/output create mode 100755 tasks/float_basic/fp16/solution create mode 100755 tasks/float_basic/okay-1/solution create mode 100755 tasks/x86_review/anagram/solution create mode 100755 tasks/x86_review/count/solution create mode 100755 tasks/x86_review/ppm-magic/a.out create mode 100755 tasks/x86_review/ppm-magic/solution create mode 100755 tasks/x86_review/recursion/solution diff --git a/.gitignore b/.gitignore index c49ac75..9080a4e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,7 @@ user/* user/*.o .idea +cmake-build-debug +CMakeLists.txt __pycache__ res.txt diff --git a/Makefile b/Makefile index 6a758c8..ad10ed3 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ endif CFLAGS = -fno-pic -ffreestanding -static -fno-builtin -fno-strict-aliasing \ -mno-sse \ -I. \ - -Wall -ggdb -m32 -Werror -fno-omit-frame-pointer -Os + -Wall -Wno-unused-result -ggdb -m32 -Werror -fno-omit-frame-pointer -Os CFLAGS += $(shell $(CC) -fno-stack-protector -E -x c /dev/null >/dev/null 2>&1 && echo -fno-stack-protector) ASMFLAGS = -m32 -ffreestanding -c -g -I. @@ -141,4 +141,4 @@ clean: rm -f *.elf *.img *.bin *.raw *.o */*.o tools/mkfs ejudge.sh tools/%: tools/%.c - gcc -Wall -Werror -g $^ -o $@ + gcc -Wall -Wno-unused-result -Werror -g $^ -o $@ diff --git a/drivers/port.h b/drivers/port.h index 5d2174a..ff032d7 100644 --- a/drivers/port.h +++ b/drivers/port.h @@ -20,6 +20,7 @@ static inline void port_word_out(unsigned short port, unsigned short data) { asm volatile("outw %%ax, %%dx" : : "a" (data), "d" (port)); } +/* assembler-long, not c-long */ static inline void port_long_out(unsigned short port, unsigned int data) { asm volatile("outl %%eax, %%dx" : : "a" (data), "d" (port)); } diff --git a/drivers/uart.c b/drivers/uart.c index 613567f..bd12573 100644 --- a/drivers/uart.c +++ b/drivers/uart.c @@ -37,6 +37,7 @@ uartputc(char c) if (!uart) return; + /* What is that *skeleton emoji*? */ for (i = 0; i < 128 && !(port_byte_in(COM1+5) & 0x20); i++) { asm("pause"); } diff --git a/drivers/vga.c b/drivers/vga.c index 8b70fde..c31dcea 100644 --- a/drivers/vga.c +++ b/drivers/vga.c @@ -4,7 +4,7 @@ static char* const video_memory = (char*) (KERNBASE + 0xb8000); -enum colors16 { +enum colors16 : unsigned char { black = 0, blue, green, diff --git a/fs/fs.h b/fs/fs.h index a67d569..a78d936 100644 --- a/fs/fs.h +++ b/fs/fs.h @@ -31,6 +31,7 @@ struct dirent { char name[20]; }; +/* This way we have 512 bytes (1 sector) per dir */ struct dir { char reserved[32]; struct dirent entries[ents_in_dir]; diff --git a/lib/bribki.h b/lib/bribki.h new file mode 100644 index 0000000..0e6354c --- /dev/null +++ b/lib/bribki.h @@ -0,0 +1,21 @@ +#pragma once + +#include + +/* Bribki are stored here */ + +typedef struct { + char chars[5]; +} DebugBribka; + +DebugBribka byte_to_string_bribka(uint8_t byte) { + DebugBribka res = {.chars = {' ', ' ', ' ', ' ', 0}}; + int p = 3; + while (byte > 0) { + uint8_t d = byte % 10; + byte /= 10; + res.chars[p] = (char)(d) + '0'; + p--; + } + return res; +} \ No newline at end of file diff --git a/mbr.S b/mbr.S index 9c3e018..1c42849 100644 --- a/mbr.S +++ b/mbr.S @@ -11,6 +11,7 @@ _start: mov %cr0, %eax or $1, %eax // 3. enable protected mode mov %eax, %cr0 + ljmp $SEG_KCODE << 3, $init_32bit // 4. far jump diff --git a/tasks/float_basic/fp16/run/output b/tasks/float_basic/fp16/run/output new file mode 100644 index 0000000..a5c986d --- /dev/null +++ b/tasks/float_basic/fp16/run/output @@ -0,0 +1,53 @@ +67FE +63FE +5FFE +5BFE +57FE +53FE +4FFE +4BFE +47FE +43FE +3FFE +3BFE +37FE +33FE +2FFE +2BFE +27FE +23FE +1FFE +1BFE +17FE +13FE +0FFE +0BFE +07FE +03FF +6680 +6280 +5E80 +5A80 +5680 +5280 +4E80 +4A80 +4680 +4280 +3E80 +3A80 +3680 +3280 +2E80 +2A80 +2680 +2280 +1E80 +1A80 +1680 +1280 +0E80 +0A80 +0680 +0340 +019F diff --git a/tasks/float_basic/fp16/solution b/tasks/float_basic/fp16/solution new file mode 100755 index 0000000000000000000000000000000000000000..17609cce301fc24412309e550c36a22d00841c04 GIT binary patch literal 16240 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 Y&h4_`1E|cWe}_IyMVU20>YA@2r~m)} literal 0 HcmV?d00001 diff --git a/tasks/float_basic/okay-1/solution b/tasks/float_basic/okay-1/solution new file mode 100755 index 0000000000000000000000000000000000000000..c4c7a788d8b9ca254022916d641fdb0922d6ce27 GIT binary patch literal 17176 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 literal 0 HcmV?d00001 diff --git a/tasks/x86_review/anagram/solution b/tasks/x86_review/anagram/solution new file mode 100755 index 0000000000000000000000000000000000000000..bb70485cd3dfa95c7c052dfd0e6c9b28d5b7f24b GIT binary patch literal 16000 zcmeHOYit}>6~4Q1h?Bap6OzoN zXOne=(q&1FP_%2tMh!Y@!-6UI5GmTNR0?Zs2~$Dmfp)7=M7)#! znEJ_-<>hz^8beWJU8V{uKw(;Ghq;;eNwJvkbx?|Td7X{39l~h$JlQ=@c1)Ydjw$C8 zbArc$0u>Y|4M}wQIyvpcPEv4Cg<3}6)&{ptaR3FDHOV*$*%UvsrG1VFwhZAw#75438TA9pFDXy zYGiy9iFhRHYxf6QeZgQ0Ff9qgmx!nG1z({%=nDq?xwOCCc8tRvbB|*YuXE)&VQlIS zw1nV$1lx$CF6yA25NBo0_BYI5CMB>!wI1+|HDrC@P^p1qoLc%AyB7Y`3VsqR;285^ zINnw=c`GL-Oe-4GvqIA_wOY>7vzC_B<0(L*1zj7Dr}RYplqpb**$s+)Bg6dzTD!m9 z-&t;V1VqJkJkj2BN>2sjk%`V^cV{LL=!h7}NV21FJd*2)Cfj{*$$hz)nMmL@+*@JU z5zhp2dZ4=y>ncojj0buG#%HEt@u^HlpnF^|+(NRoTc0$Hu1q0n#FDN0 z@t{5#X*(0a71T&^+<8R{P`4Ng} zj-NB34YuF{J>n*lciZU)>8xEXLW@PEp{UmLgo zL!J3!y*ju0H!#0bpINZHrR(ab%*Mavu1+mNV(f-y+5FP;=NMzIEYxhc}+3?+&>AT|e+OyMlOW^PHx+^k6d!Yuw zy1e)H2vEfufcn_!bx@yrx^58xEXLW;AX(hfSUm~18xT1 zEd%&o=V*9T95@Io+ij~J-wg)%o?_Edsq`tJgFta*J_Zz)&7${>Qt2Yf;lScKby#=` zO`dHHYwG7=b&L21;HU@vM^RyLjeKRa3z`8qF8{eyYDIi~)6n|nCmZiOS${@6vGwr} zckGg{1JNGiUI9IR7li8Q#De3i;Mc^pG!^VC`oniO`wkot-ZNqWF;;>1S5-W`*Q(-C z7k#5X+GD}@H~d;&0&eAIz|DZ00XG9~2HXs|8E`Y;X28vWn}Pp926&$w?~CJg48EYm z@{mo$A)*aLd1K!F#9yXOnhz4s`|-9B&ugo##Phy9T)SamIj)beWN1^{oA*j-n<$wq{w^au9KYCQJ<$1xzAP?%|tg7WkP1+GVPn=y?VID!-DHWEWG#b0h<*n0gQiw zI>P6%M0&7kQ5KHBop{!Jt7M-abXP*~UR9p&Zt@3jdL_@-1(u_d-$L@g6VG`e_y0A* z`@o$JgSd!=GDOto{{5QwTh=MI4ezJiH!!eQ*$pe>J&L{2^j%zHUh2df_!76OVBS6A z{et(IDcfY>9p2

^Ce4~egCZN{ z>bKDHhzH8|2@C!L4Z8IilC%*{T&Y5A=AgvkZU|Ki9|L>?+@(!~^Zn5RcrE`Sz?(py z^UU7%p}u#$;O7zJ`$^v!_meC5PXVs5aRr?Qe1o@H@c3oXvxviW4}}P!=hJf%Z!A0G z=iApM-YlH^ioXeX6Z%ovvrR_<-w5O67>&b6N&GF+cjn>yq(4mio!Q$D0LT72^{)c1 zuu=uR3HZYmJU8D0e4`hhwvPM4$`L}1r=Y824r z4dj}Y)S|eBJO`>qTAN6uBYHwJ;M0hlrsoSHnoedCrezxb*4i4lTR*Pp*{nXLnJFtf zCC0OQ($tK6GC2h%6`Tf|R+TDr%1jy9B~2ST+_yihg%1pBuy=j%=z+fd!vg@r!$}LP zBvl6w3vJ)X!T!Dx?cmVRXn0H;>+2s0gN5^3f)IZ)0G|oG)2?~^dlbJ)DC^@V2AXN; zmM-MEfoo*!ef9k9LbbMIE|rqX8)Qy_^ZE@sO}6VnZou9;m=JaEjt#}H)Ajk;+L@Mu( z>A9Hj8&fGzx2cu2B`3^mE}l+RF&fCSWmT;v@Rh#pv17aBHgrKx#-q?_ykdSxr|`p| zO~P2@yXU=AoKL~62frD1aemLn->;Ea>T(&%ynnH<9gm}vfZ_FHdtNtQZb5BPUMJh!vOW8G4Fr|;B1D?4HdTma!gkCr zK?5<4uY_!g!uAdW#TJ+AH=%{`Nxh7-y>qUOx>zbHj~!cL*WKiBfjWlkdYpQ4clh~@ i>oV@UZE4rV4x6rZIOn*mi#}`FdxEycJys;@wEq_Z@tev3 literal 0 HcmV?d00001 diff --git a/tasks/x86_review/count/solution b/tasks/x86_review/count/solution new file mode 100755 index 0000000000000000000000000000000000000000..a935b7d18d25b0fbc142797fb98c977ba0cdb4fd GIT binary patch literal 16024 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 literal 0 HcmV?d00001 diff --git a/tasks/x86_review/ppm-magic/solution b/tasks/x86_review/ppm-magic/solution new file mode 100755 index 0000000000000000000000000000000000000000..c59210e3c895d74cb4aac5f369f3dcc97ca42334 GIT binary patch literal 17344 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 a9f}bM&h08K&AFHMuk|U5D{QDS=>KmcQ{b2Y literal 0 HcmV?d00001