aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/10.libc/stdint.h365
-rw-r--r--kernel.pdfbin443380 -> 446044 bytes
-rw-r--r--kernel.tex278
3 files changed, 586 insertions, 57 deletions
diff --git a/include/10.libc/stdint.h b/include/10.libc/stdint.h
new file mode 100644
index 0000000..18cb789
--- /dev/null
+++ b/include/10.libc/stdint.h
@@ -0,0 +1,365 @@
+/* Copyright (C) 2008-2021 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C Standard: 7.18 Integer types <stdint.h>
+ */
+
+#ifndef _GCC_STDINT_H
+#define _GCC_STDINT_H
+
+/* 7.8.1.1 Exact-width integer types */
+
+#ifdef __INT8_TYPE__
+typedef __INT8_TYPE__ int8_t;
+#endif
+#ifdef __INT16_TYPE__
+typedef __INT16_TYPE__ int16_t;
+#endif
+#ifdef __INT32_TYPE__
+typedef __INT32_TYPE__ int32_t;
+#endif
+#ifdef __INT64_TYPE__
+typedef __INT64_TYPE__ int64_t;
+#endif
+#ifdef __UINT8_TYPE__
+typedef __UINT8_TYPE__ uint8_t;
+#endif
+#ifdef __UINT16_TYPE__
+typedef __UINT16_TYPE__ uint16_t;
+#endif
+#ifdef __UINT32_TYPE__
+typedef __UINT32_TYPE__ uint32_t;
+#endif
+#ifdef __UINT64_TYPE__
+typedef __UINT64_TYPE__ uint64_t;
+#endif
+
+/* 7.8.1.2 Minimum-width integer types */
+
+typedef __INT_LEAST8_TYPE__ int_least8_t;
+typedef __INT_LEAST16_TYPE__ int_least16_t;
+typedef __INT_LEAST32_TYPE__ int_least32_t;
+typedef __INT_LEAST64_TYPE__ int_least64_t;
+typedef __UINT_LEAST8_TYPE__ uint_least8_t;
+typedef __UINT_LEAST16_TYPE__ uint_least16_t;
+typedef __UINT_LEAST32_TYPE__ uint_least32_t;
+typedef __UINT_LEAST64_TYPE__ uint_least64_t;
+
+/* 7.8.1.3 Fastest minimum-width integer types */
+
+typedef __INT_FAST8_TYPE__ int_fast8_t;
+typedef __INT_FAST16_TYPE__ int_fast16_t;
+typedef __INT_FAST32_TYPE__ int_fast32_t;
+typedef __INT_FAST64_TYPE__ int_fast64_t;
+typedef __UINT_FAST8_TYPE__ uint_fast8_t;
+typedef __UINT_FAST16_TYPE__ uint_fast16_t;
+typedef __UINT_FAST32_TYPE__ uint_fast32_t;
+typedef __UINT_FAST64_TYPE__ uint_fast64_t;
+
+/* 7.8.1.4 Integer types capable of holding object pointers */
+
+#ifdef __INTPTR_TYPE__
+typedef __INTPTR_TYPE__ intptr_t;
+#endif
+#ifdef __UINTPTR_TYPE__
+typedef __UINTPTR_TYPE__ uintptr_t;
+#endif
+
+/* 7.8.1.5 Greatest-width integer types */
+
+typedef __INTMAX_TYPE__ intmax_t;
+typedef __UINTMAX_TYPE__ uintmax_t;
+
+#if (!defined __cplusplus || __cplusplus >= 201103L \
+ || defined __STDC_LIMIT_MACROS)
+
+/* 7.18.2 Limits of specified-width integer types */
+
+#ifdef __INT8_MAX__
+# undef INT8_MAX
+# define INT8_MAX __INT8_MAX__
+# undef INT8_MIN
+# define INT8_MIN (-INT8_MAX - 1)
+#endif
+#ifdef __UINT8_MAX__
+# undef UINT8_MAX
+# define UINT8_MAX __UINT8_MAX__
+#endif
+#ifdef __INT16_MAX__
+# undef INT16_MAX
+# define INT16_MAX __INT16_MAX__
+# undef INT16_MIN
+# define INT16_MIN (-INT16_MAX - 1)
+#endif
+#ifdef __UINT16_MAX__
+# undef UINT16_MAX
+# define UINT16_MAX __UINT16_MAX__
+#endif
+#ifdef __INT32_MAX__
+# undef INT32_MAX
+# define INT32_MAX __INT32_MAX__
+# undef INT32_MIN
+# define INT32_MIN (-INT32_MAX - 1)
+#endif
+#ifdef __UINT32_MAX__
+# undef UINT32_MAX
+# define UINT32_MAX __UINT32_MAX__
+#endif
+#ifdef __INT64_MAX__
+# undef INT64_MAX
+# define INT64_MAX __INT64_MAX__
+# undef INT64_MIN
+# define INT64_MIN (-INT64_MAX - 1)
+#endif
+#ifdef __UINT64_MAX__
+# undef UINT64_MAX
+# define UINT64_MAX __UINT64_MAX__
+#endif
+
+#undef INT_LEAST8_MAX
+#define INT_LEAST8_MAX __INT_LEAST8_MAX__
+#undef INT_LEAST8_MIN
+#define INT_LEAST8_MIN (-INT_LEAST8_MAX - 1)
+#undef UINT_LEAST8_MAX
+#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__
+#undef INT_LEAST16_MAX
+#define INT_LEAST16_MAX __INT_LEAST16_MAX__
+#undef INT_LEAST16_MIN
+#define INT_LEAST16_MIN (-INT_LEAST16_MAX - 1)
+#undef UINT_LEAST16_MAX
+#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__
+#undef INT_LEAST32_MAX
+#define INT_LEAST32_MAX __INT_LEAST32_MAX__
+#undef INT_LEAST32_MIN
+#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)
+#undef UINT_LEAST32_MAX
+#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__
+#undef INT_LEAST64_MAX
+#define INT_LEAST64_MAX __INT_LEAST64_MAX__
+#undef INT_LEAST64_MIN
+#define INT_LEAST64_MIN (-INT_LEAST64_MAX - 1)
+#undef UINT_LEAST64_MAX
+#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__
+
+#undef INT_FAST8_MAX
+#define INT_FAST8_MAX __INT_FAST8_MAX__
+#undef INT_FAST8_MIN
+#define INT_FAST8_MIN (-INT_FAST8_MAX - 1)
+#undef UINT_FAST8_MAX
+#define UINT_FAST8_MAX __UINT_FAST8_MAX__
+#undef INT_FAST16_MAX
+#define INT_FAST16_MAX __INT_FAST16_MAX__
+#undef INT_FAST16_MIN
+#define INT_FAST16_MIN (-INT_FAST16_MAX - 1)
+#undef UINT_FAST16_MAX
+#define UINT_FAST16_MAX __UINT_FAST16_MAX__
+#undef INT_FAST32_MAX
+#define INT_FAST32_MAX __INT_FAST32_MAX__
+#undef INT_FAST32_MIN
+#define INT_FAST32_MIN (-INT_FAST32_MAX - 1)
+#undef UINT_FAST32_MAX
+#define UINT_FAST32_MAX __UINT_FAST32_MAX__
+#undef INT_FAST64_MAX
+#define INT_FAST64_MAX __INT_FAST64_MAX__
+#undef INT_FAST64_MIN
+#define INT_FAST64_MIN (-INT_FAST64_MAX - 1)
+#undef UINT_FAST64_MAX
+#define UINT_FAST64_MAX __UINT_FAST64_MAX__
+
+#ifdef __INTPTR_MAX__
+# undef INTPTR_MAX
+# define INTPTR_MAX __INTPTR_MAX__
+# undef INTPTR_MIN
+# define INTPTR_MIN (-INTPTR_MAX - 1)
+#endif
+#ifdef __UINTPTR_MAX__
+# undef UINTPTR_MAX
+# define UINTPTR_MAX __UINTPTR_MAX__
+#endif
+
+#undef INTMAX_MAX
+#define INTMAX_MAX __INTMAX_MAX__
+#undef INTMAX_MIN
+#define INTMAX_MIN (-INTMAX_MAX - 1)
+#undef UINTMAX_MAX
+#define UINTMAX_MAX __UINTMAX_MAX__
+
+/* 7.18.3 Limits of other integer types */
+
+#undef PTRDIFF_MAX
+#define PTRDIFF_MAX __PTRDIFF_MAX__
+#undef PTRDIFF_MIN
+#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
+
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MAX __SIG_ATOMIC_MAX__
+#undef SIG_ATOMIC_MIN
+#define SIG_ATOMIC_MIN __SIG_ATOMIC_MIN__
+
+#undef SIZE_MAX
+#define SIZE_MAX __SIZE_MAX__
+
+#undef WCHAR_MAX
+#define WCHAR_MAX __WCHAR_MAX__
+#undef WCHAR_MIN
+#define WCHAR_MIN __WCHAR_MIN__
+
+#undef WINT_MAX
+#define WINT_MAX __WINT_MAX__
+#undef WINT_MIN
+#define WINT_MIN __WINT_MIN__
+
+#endif /* (!defined __cplusplus || __cplusplus >= 201103L
+ || defined __STDC_LIMIT_MACROS) */
+
+#if (!defined __cplusplus || __cplusplus >= 201103L \
+ || defined __STDC_CONSTANT_MACROS)
+
+#undef INT8_C
+#define INT8_C(c) __INT8_C(c)
+#undef INT16_C
+#define INT16_C(c) __INT16_C(c)
+#undef INT32_C
+#define INT32_C(c) __INT32_C(c)
+#undef INT64_C
+#define INT64_C(c) __INT64_C(c)
+#undef UINT8_C
+#define UINT8_C(c) __UINT8_C(c)
+#undef UINT16_C
+#define UINT16_C(c) __UINT16_C(c)
+#undef UINT32_C
+#define UINT32_C(c) __UINT32_C(c)
+#undef UINT64_C
+#define UINT64_C(c) __UINT64_C(c)
+#undef INTMAX_C
+#define INTMAX_C(c) __INTMAX_C(c)
+#undef UINTMAX_C
+#define UINTMAX_C(c) __UINTMAX_C(c)
+
+#endif /* (!defined __cplusplus || __cplusplus >= 201103L
+ || defined __STDC_CONSTANT_MACROS) */
+
+#if (defined __STDC_WANT_IEC_60559_BFP_EXT__ \
+ || (defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L))
+/* TS 18661-1 / C2X widths of integer types. */
+
+#ifdef __INT8_TYPE__
+# undef INT8_WIDTH
+# define INT8_WIDTH 8
+#endif
+#ifdef __UINT8_TYPE__
+# undef UINT8_WIDTH
+# define UINT8_WIDTH 8
+#endif
+#ifdef __INT16_TYPE__
+# undef INT16_WIDTH
+# define INT16_WIDTH 16
+#endif
+#ifdef __UINT16_TYPE__
+# undef UINT16_WIDTH
+# define UINT16_WIDTH 16
+#endif
+#ifdef __INT32_TYPE__
+# undef INT32_WIDTH
+# define INT32_WIDTH 32
+#endif
+#ifdef __UINT32_TYPE__
+# undef UINT32_WIDTH
+# define UINT32_WIDTH 32
+#endif
+#ifdef __INT64_TYPE__
+# undef INT64_WIDTH
+# define INT64_WIDTH 64
+#endif
+#ifdef __UINT64_TYPE__
+# undef UINT64_WIDTH
+# define UINT64_WIDTH 64
+#endif
+
+#undef INT_LEAST8_WIDTH
+#define INT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+#undef UINT_LEAST8_WIDTH
+#define UINT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+#undef INT_LEAST16_WIDTH
+#define INT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+#undef UINT_LEAST16_WIDTH
+#define UINT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+#undef INT_LEAST32_WIDTH
+#define INT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+#undef UINT_LEAST32_WIDTH
+#define UINT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+#undef INT_LEAST64_WIDTH
+#define INT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+#undef UINT_LEAST64_WIDTH
+#define UINT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+
+#undef INT_FAST8_WIDTH
+#define INT_FAST8_WIDTH __INT_FAST8_WIDTH__
+#undef UINT_FAST8_WIDTH
+#define UINT_FAST8_WIDTH __INT_FAST8_WIDTH__
+#undef INT_FAST16_WIDTH
+#define INT_FAST16_WIDTH __INT_FAST16_WIDTH__
+#undef UINT_FAST16_WIDTH
+#define UINT_FAST16_WIDTH __INT_FAST16_WIDTH__
+#undef INT_FAST32_WIDTH
+#define INT_FAST32_WIDTH __INT_FAST32_WIDTH__
+#undef UINT_FAST32_WIDTH
+#define UINT_FAST32_WIDTH __INT_FAST32_WIDTH__
+#undef INT_FAST64_WIDTH
+#define INT_FAST64_WIDTH __INT_FAST64_WIDTH__
+#undef UINT_FAST64_WIDTH
+#define UINT_FAST64_WIDTH __INT_FAST64_WIDTH__
+
+#ifdef __INTPTR_TYPE__
+# undef INTPTR_WIDTH
+# define INTPTR_WIDTH __INTPTR_WIDTH__
+#endif
+#ifdef __UINTPTR_TYPE__
+# undef UINTPTR_WIDTH
+# define UINTPTR_WIDTH __INTPTR_WIDTH__
+#endif
+
+#undef INTMAX_WIDTH
+#define INTMAX_WIDTH __INTMAX_WIDTH__
+#undef UINTMAX_WIDTH
+#define UINTMAX_WIDTH __INTMAX_WIDTH__
+
+#undef PTRDIFF_WIDTH
+#define PTRDIFF_WIDTH __PTRDIFF_WIDTH__
+
+#undef SIG_ATOMIC_WIDTH
+#define SIG_ATOMIC_WIDTH __SIG_ATOMIC_WIDTH__
+
+#undef SIZE_WIDTH
+#define SIZE_WIDTH __SIZE_WIDTH__
+
+#undef WCHAR_WIDTH
+#define WCHAR_WIDTH __WCHAR_WIDTH__
+
+#undef WINT_WIDTH
+#define WINT_WIDTH __WINT_WIDTH__
+
+#endif
+
+#endif /* _GCC_STDINT_H */
diff --git a/kernel.pdf b/kernel.pdf
index d5c3b07..50b7248 100644
--- a/kernel.pdf
+++ b/kernel.pdf
Binary files differ
diff --git a/kernel.tex b/kernel.tex
index 22ab606..a04da19 100644
--- a/kernel.tex
+++ b/kernel.tex
@@ -125,8 +125,29 @@ Ideja za ovaj rad prozishla je iz ekstenzivnog korish\/c1enja {\eng GNU/Linux}
sistema, kao i zhelja za razumevanjem rada rachunara na najnizhem nivou.
Ceo kod je pisan u {\eng GNU Asembler}-u i {\eng C}-u i mozhe se nac1i na
-{\eng GitHub-u} na stranici {\eng\url{https://github.com/aleksav013/mykernel}}.
-Sav kod je dostupan pod {\eng GPLv3} licencom.
+{\eng GitHub}-u na stranici {\eng\url{https://github.com/aleksav013/mykernel}}.
+Kod, zajedno sa svim alatima za njegovo korishenje i upotrebu, je dostupan pod
+{\eng GPLv3} licencom.
+
+Ovaj projakat se konstantno unapredjuje i nemoguc1e je odrzhavati
+sinhronizovanim fajlove koji sachinjavaju operativni sistem, a koji se
+istovremeno pominju u ovom radu. Iz tog razloga rad c1e biti napisan za verziju
+operativnog sistema 1.0.0. Na stranici {\eng GitHub}-a ova verzija se mozhe
+nac1i pod {\eng tag/s} sekcijom na stranici projekta.
+
+Radi laksheg kompajlovanja koda od strane chitaoca, kreiran je {\eng toolchain}
+- set alata specifichno za kompajlovanje ovog operativnog sistema koji se mozhe
+nac1i na stranici {\eng\url{https://github.com/aleksav013/aleksa-toolchain}},
+takodje dostupan pod {\eng GPLv3} licencom otvorenog koda. Set alata {\eng
+aleksa-toolchain} kreiran je takodje i iz razloga shto je zapravo neizbezhan
+proces kreiranja {\eng cross-compilera} - kompajlera koji kompapajluje kod za
+drugi sistem/arhitekturu na trenutnom sistemu/arhitekturi. Na taj nachin i
+drugi ljudi osim autora mogu doprineti izradi i pobojshanju ovog operativnog
+sistema u buduc1nosti.\\
+
+Ovaj projakat ima za cilj da prikazhe postupak kreiranja jednog za sada
+vrlo jednostavnog operativnog sistema, kao i da potkrepi chitaoce teorijom
+potrebnom za njegovo razumevanje.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -147,7 +168,7 @@ Postoji vishe vrsta registara procesora\cite[75]{misc:1}. Neki od osnovnih
registara koje je potrebno pomenuti dati su u tekstu koji sledi. Razlog zbog
kojeg su navedena i imena registara prethodnih verzija {\eng X86} arhitekture
je zbog toga sto je moguc1e adresirati prvih {\eng x} bitova ako se koristi ime
-registra za {\eng x}-tobitnu verziju te arhitekture. Naravno, ovo vazhi samo
+registra za {\eng x}-tobitnu verziju {\eng X86} arhitekture. Naravno, ovo vazhi samo
ukoliko je duzhina registra vec1a ili jednaka duzhini registra chiju notaciju
koristimo.\\
@@ -178,7 +199,7 @@ cr0 & cr2 & cr3 & cr4 & cr8 \\
\hline
\end{tabular}}\\
-Sistemski registri koji su pokazivachi na tabele:\\[1mm]
+Sistemski registri (pokazivachi na tabele):\\[1mm]
{\eng\begin{tabular}{|c|c|c|}
\hline
gdtr & ldtr & idtr \\
@@ -264,7 +285,7 @@ Realni mod je stanje procesora u kojem nam je dozvoljeno adresiranje samo prvih
20mb memorije. Prelazak iz realnog u zasticeni mod postizhe se dalekim skokom
{\eng "far jump"}.
-{\eng\url{https://wiki.osdev.org/Real_Mode}}
+%{\eng\url{https://wiki.osdev.org/Real_Mode}}
\section{Segmentacija}
\medskip
@@ -272,7 +293,7 @@ Realni mod je stanje procesora u kojem nam je dozvoljeno adresiranje samo prvih
Segmentacija je reshenje kojim se omoguc1ava adresiranje vishe memorije nego
shto je to hardverski predvidjeno.
-{\eng\url{https://wiki.osdev.org/Segmentation}}
+%{\eng\url{https://wiki.osdev.org/Segmentation}}
\section{{\eng Protected mode}}
\medskip
@@ -280,7 +301,7 @@ shto je to hardverski predvidjeno.
Zashtic1en mod je stanje procesora u kojem procesor ima pun pristup celom opsegu
memorije za razliku od realnog moda.
-{\eng\url{https://wiki.osdev.org/Protected_Mode}}
+%{\eng\url{https://wiki.osdev.org/Protected_Mode}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -300,7 +321,7 @@ nastavlja se dalje izvrshavanje {\eng BIOS}-a. {\eng BIOS} sada ima ulogu da
pronadje medijum koji sadrzhi program koji c1e uchitati jezgro operativnog
sistema u ram memoriju rachunara. Taj program se naziva {\eng Bootloader}.
-{\eng\url{https://wiki.osdev.org/Boot_Sequence}}
+%{\eng\url{https://wiki.osdev.org/Boot_Sequence}}
\section{{\eng Bootloader}}
\medskip
@@ -309,7 +330,7 @@ sistema u ram memoriju rachunara. Taj program se naziva {\eng Bootloader}.
njegov zadatak je da uchita jezgro operativnog sistema u ram memoriju i preda
mu dalje upravljanje.
-{\eng\url{https://wiki.osdev.org/Bootloader}}
+%{\eng\url{https://wiki.osdev.org/Bootloader}}
\section{{\eng Multiboot2}}
\medskip
@@ -320,7 +341,7 @@ mu dalje upravljanje.
{\eng ELF} je format binarni fajl koji se sastoji od tachno odredjenih sekcija
i koji mozhe da se pokrene.
-{\eng\url{https://wiki.osdev.org/ELF}}
+%{\eng\url{https://wiki.osdev.org/ELF}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -344,7 +365,7 @@ Za programe koji su morali biti manuelno kompajlovani date su instrukcije u
njihovoj podsekciji. Jedini programi koji su morali biti kompajlovani su {\eng
binutils} i {\eng gcc} i to da ne bi koristili standardnu biblioteku koju nam
je obezbedio operativni sistem domac1in (onaj na kome se kompajluje ovaj
-projekat). Za ostale programe koji su korisc1eni preporuka je koristiti one
+projekat). Za ostale programe koji su korish\/c1eni preporuka je koristiti one
koji su dostupni kao spremni paketi u izvorima odabrane distrubucije {\eng
GNU/Linux}-a.
@@ -355,8 +376,9 @@ Izvorni kod softvera se mozhe nac1i na stranici
{\eng\url{https://www.gnu.org/software/binutils/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
-Ovaj softverski paket sadrzhi programe neophodne za kompajlovanje kao shto su
-asembler i linker.
+Ovaj softverski paket sadrzhi programe neophodne za izradu programa od kojih su
+najkorisheniji asembler ({\eng as}), linker ({\eng ld}), kao i program za
+kreiranje biblioteka ({\eng ar}).
\subsection{Pre dodavanja {\eng C} biblioteke}
\smallskip
@@ -382,6 +404,7 @@ od uput\/stva datog na zvanichnom sajtu a tiche se konfigurisanja pre kompilacij
Nakon dodavanja nashe {\eng C} biblioteke potrebno je kompajlovati {\eng GNU
Binutils} tako da tu biblioteku i koristi prilikom kompajlovanja nasheg
operativnog sistema.
+
\textbf{Napomena:} Potrebno je postaviti {\eng \$SYSROOT} na lokaciju gde se biblioteka nalazi.
To je moguc1e uraditi na sledec1i nachin:\\
@@ -413,6 +436,7 @@ u jednu binarnu datoteku tipa {\eng ELF} koja predstavlja kernel.
\section{{\eng GCC}}
\medskip
+
Izvorni kod softvera se mozhe nac1i na stranici
{\eng\url{https://gcc.gnu.org/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
@@ -420,27 +444,36 @@ zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
{\eng\url{https://aur.archlinux.org/packages/i686-elf-gcc/}}
-{\eng GCC} je {\eng GNU}-ov set kompajlera.
+{\eng GCC} je {\eng GNU}-ov set kompajlera.
\subsection{Pre dodavanja {\eng LIBC}}
\smallskip
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make]{include/00.alati/gcc/gcc1}\srb\end{minipage}
+
\subsection{Posle dodavanja {\eng LIBC}}
+
\smallskip
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=make]{include/00.alati/gcc/gcc2}\srb\end{minipage}
\section{{\eng GRUB}}
\medskip
+
Izvorni kod softvera se mozhe nac1i na stranici
+
{\eng\url{https://www.gnu.org/software/grub/}},
+
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
{\eng GRUB} je {\eng bootloader} koji je korish\/c1en na ovom projektu. Plan je
-da u buduc1nosti {\eng GRUB} bude zamenjen sa mojim {\eng bootloader}-om, i da
-se kompletan kod bude moj.
+da u buduc1nosti {\eng GRUB} bude zamenjen sa {\eng bootloader}-om izradjenim
+specificno za ovaj operativni sistem i da sve komponente ovog operativnog
+sistema na taj nachin budu delo jednog autora.
\section{{\eng QEMU}}
\medskip
+
Izvorni kod softvera se mozhe nac1i na stranici
{\eng\url{https://www.qemu.org/}},
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
@@ -452,8 +485,11 @@ interface)} iz koga se lako mozhe pozivati iz skripti kao shto su {\eng Makefile
\section{{\eng Make}}
\medskip
+
Izvorni kod softvera se mozhe nac1i na stranici
+
{\eng\url{https://www.gnu.org/software/make/}}
+
zajedno sa uput\/stvom za kompajlovanje i korish\/c1enje.
\cite{book:78575}.
@@ -467,15 +503,21 @@ objasnjen u daljem tekstu.
\medskip
\subsection{{\eng NeoVim}}
-{\eng NeoVim} je tekst editor nastao od {\eng Vim}-a ({\eng Vi improved}).
-\cite{book:78583}.
+{\eng NeoVim} je uredjivach teksta nastao od {\eng Vim}-a ({\eng Vi improved}).
+\cite{book:78583}. Konfiguracijski fajlovi autora, mogu se nac1i na
+{\eng\url{https;//github.com/aleksav013/nvim}}, i imaju za cilj da stvore
+okruzhenje pogodno za rad na ovom projektu.
\subsection{{\eng git}}
\smallskip
Izvorni kod softvera se mozhe nac1i na stranici
{\eng\url{https://git.kernel.org/pub/scm/git/git.git}}.
-{\eng Git} je program koji nam pomazhe da odrzhavamo izvodne fajlove i
+{\eng Git} je program koji nam pomazhe da odrzhavamo izvodne fajlove
+sinhronizovanim sa repozitorijimom. Osim toga znachajan je i njegov sistem
+"kontrole" verzija - moguc1nost da se za svaki {\eng commit}(promenu) vidi
+tachno koji su se fajlovi izmenili i koja je razlika izmedju neke dve verzije
+projekta.
\subsection{{\eng xorriso(libisoburn)}}
\smallskip
@@ -488,6 +530,9 @@ ili {\eng USB} flesh sa kojih se kasnije dizhe sistem.
\smallskip
{\eng\url{https://www.sourceware.org/gdb/}}
+{\eng GNU}-ov {\eng debugger} koji sluzhi uglavnom za pronalazhenje greshaka u
+kodu.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -497,74 +542,181 @@ ili {\eng USB} flesh sa kojih se kasnije dizhe sistem.
\section{Pochetak}
\medskip
-{\eng\url{https://wiki.osdev.org/Bare_Bones}}
+%{\eng\url{https://wiki.osdev.org/Bare_Bones}}
+
+{\eng as/boot.s}:
-{\eng as/boot.s}:\\
+U prvom delu postavljamo promenljive na vrednosti koje su odredjene {\eng
+Multiboot2} standardom da bi {\eng bootloader} prepoznao nashe jezgro.
-U prvom delu postavljamo promenljive na vrednosti koje su odredjene {\eng Multiboot2} standardom.\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo1}\srb\end{minipage}
+
Nakon toga postavljamo prvih 512 bitova na prethodno pomenute vrednosti ali
-tako da za svaku promenljivu ostavljamo 32 bita prostora.\\
+tako da za svaku promenljivu ostavljamo 32 bita prostora.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo2}\srb\end{minipage}
-Definishemo sekciju {\eng bss} u kojoj kreiramo stek i dodeljujem mu 16 kilobajta.\\
+
+Postavljamo funkcije koje cemo definisati u ovom fajlu za globalne da bi smo
+kasnije mogli da ih pozivamo iz {\eng C}-a.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo3}\srb\end{minipage}
-I na kraju postavljamo registar esp na vrh steka i pozivamo {\eng kernel\_main}
-funkciju koja je napisana u {\eng C}-u.\\
+
+Funkcija za uchitavanje {\eng gdt} tabele.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo4}\srb\end{minipage}
+
+Funkcija za uchitavanje {\eng idt} tabele.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo5}\srb\end{minipage}
+
+Funkcije koje su zaduzene za razmenu informacija preko magistrale za
+ulaz/izlaz. Koristi se pri inicijalizaciji {\eng IRQ}-a i korish\/c1enju
+tastature.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo6}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo7}\srb\end{minipage}
+
+Segmenti za kod i podatke koji su postavljeni u {\eng gdt} tabeli.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo8}\srb\end{minipage}
+
+Definishemo sekciju {\eng bss} u kojoj kreiramo stek i dodeljujemo mu 16
+kilobajta.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo9}\srb\end{minipage}
+
+Definishemo pochetnu funkciju {\eng \_start} pozivajuc1i funkciju za
+inicijalizaciju {\eng gdt} tabele i "skachemo" na segment koda. Ovaj postupak
+ima naziv {\eng "far jump"} jer skachemo van tekuc1eg segmenta.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo10}\srb\end{minipage}
+
+U segmentu koda postavljamo segmentne registre na adresu segmenta podataka.
+Zatim postavljamo {\eng esp} registar na pochetak steka koji smo inicijalizovali
+u {\eng bss} sekciji i predajemo upravljanje {\eng kernel\_main} funkciji.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo11}\srb\end{minipage}
+
+Postavljamo velichinu funkcije {\eng \_start} shto nam kasnije mozhe biti
+korisno pri {\eng debug}-ovanju.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=Assembler]{include/01.pocetak/deo12}\srb\end{minipage}
+
+
\section{Ispis na ekran - {\eng VGA}}
\medskip
-{\eng c/vga.c}:\\
+{\eng c/vga.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo1}\srb\end{minipage}
+
Primetimo da u {\eng C}-u koristimo {\eng uintX\_t} promenljive. To je zbog toga
-shto nam je sada vrlo bitno da pazimo na velichinu koju zauzimaju promenljive.\\
+shto nam je u ovakvom okruzhenju vrlo bitno da pazimo na velichinu koju
+zauzimaju promenljive.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo2}\srb\end{minipage}
-4 znachajnija bita oznachavaju boju pozadine, dok ostala 4 bita oznachavaju boju karaktera.\\
+
+4 znachajnija bita oznachavaju boju pozadine, dok ostala 4 bita oznachavaju boju karaktera.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo3}\srb\end{minipage}
-Na {\eng VGA} pisemo tako shto\\
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo4}\srb\end{minipage}
+
+Na {\eng VGA} izlaz ispisujemo tako shto pochev od adrese {\eng 0xB80000}
+pishemo shesnaestobitne vrednosti koje se prevode u karaktere i njihovu boju. 8
+znachajnijih bitova odredjuju boju karaktera dok preostalih 8 bitova oznachavaju
+karakter.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo5}\srb\end{minipage}
+
+Funkcija koja ispisuje karakter na monitoru.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo6}\srb\end{minipage}
+
+Fukcija koja pomera sve do sada ispisano za jedan red na dole i oslobadja novi
+red kada ponestane mesta na ekranu.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo7}\srb\end{minipage}
+
+Funkfija koja postavlja brojache kolone i reda na sledec1e, uglavnom prazno, polje na ekranu.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo8}\srb\end{minipage}
+
+Funkfija koja postavlja brojache kolone i reda na proshlo polje na ekranu.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo9}\srb\end{minipage}
+
+Funkcija koja ispisuje jedan karakter na ekran. Proverava da li je potrebno
+ispisati novi red umesto karaktera {\eng '$\backslash$n'}, kao i da li je
+potrebno osloboditi novi red ukoliko se ekran popunio.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo10}\srb\end{minipage}
+
+Funkcija koja ispisuje niz karaktera na ekran.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo11}\srb\end{minipage}
+
+Funcija koja ispisuje celobrojnu vrednost na ekran tako shto je prvo pretvori u niz
+karaktera a zatim iskoristi prethodnu funkciju.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo12}\srb\end{minipage}
+
+Funcija koja ispisuje realnu vrednost na ekran tako shto je prvo pretvori u niz
+karaktera a zatim iskoristi funkciju za ispis niza karaktera.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo13}\srb\end{minipage}
+
+Funkcija koja brishe sve sa ekrana i postavlja brojache kolone i reda na pochetnu poziciju.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/02.vga/deo14}\srb\end{minipage}
+
\section{{\eng Global Desctiptor Table}}
\medskip
-{\eng c/gdt.c}:\\
+{\eng c/gdt.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo1}\srb\end{minipage}
+
+Format u kom rachunar prihvata unos pojedinachnih definicija segmenata.
+Primetimo {\eng \_\_attribute\_\_((packed))}, na kraju definicije strukture. To
+nam oznachava da se nece ostavljati mesta u memoriji izmedju promenljivih
+unutar strukture, vec1 c1e se "pakovati" jedna do druge u memoriji.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo2}\srb\end{minipage}
+
+Format koji rachunar prihvata za tabelu svih definicija segmenata.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo3}\srb\end{minipage}
+
+Funcija iz asemblera koja uchitava tabelu segmenata, kreiranu u sledec1ih
+nekoliko funcija, u odgovarajuc1i registar. Ovu funciju smo imali priliku
+videti u pochetnom fajlu.
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo4}\srb\end{minipage}
+
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo5}\srb\end{minipage}
+
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo6}\srb\end{minipage}
+
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo7}\srb\end{minipage}
+
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo8}\srb\end{minipage}
+
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/03.gdt/deo9}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/GDT}}
+%{\eng\url{https://wiki.osdev.org/GDT}}
\section{{\eng Interrupt Desctiptor Table}}
\medskip
-{\eng c/idt.c}:\\
+{\eng c/idt.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo1}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo2}\srb\end{minipage}
@@ -578,24 +730,24 @@ Na {\eng VGA} pisemo tako shto\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo10}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo11}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/IDT}}
+%{\eng\url{https://wiki.osdev.org/IDT}}
\section{{\eng IRQ} i {\eng PIC}}
\medskip
-{\eng c/idt.c}:\\
+{\eng c/idt.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo12}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo13}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/04.idt/deo14}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/IRQ}}
-{\eng\url{https://wiki.osdev.org/PIC}}
+%{\eng\url{https://wiki.osdev.org/IRQ}}
+%{\eng\url{https://wiki.osdev.org/PIC}}
\section{Tastatura}
\medskip
-{\eng c/keyboard.c}:\\
+{\eng c/keyboard.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo1}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/06.keyboard/deo2}\srb\end{minipage}
@@ -621,7 +773,7 @@ Na {\eng VGA} pisemo tako shto\\
\section{{\eng PIT - Programmable Interval Timer}}
\medskip
-{\eng c/timer.c}:\\
+{\eng c/timer.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo1}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo2}\srb\end{minipage}
@@ -633,12 +785,12 @@ Na {\eng VGA} pisemo tako shto\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo8}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo9}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/07.pit/deo10}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/PIT}}
+%{\eng\url{https://wiki.osdev.org/PIT}}
\section{{\eng Heap}}
\medskip
-{\eng c/heap.c}:\\
+{\eng c/heap.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo1}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo2}\srb\end{minipage}
@@ -671,12 +823,12 @@ Na {\eng VGA} pisemo tako shto\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo29}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo30}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/08.heap/deo31}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/Heap}}
+%{\eng\url{https://wiki.osdev.org/Heap}}
\section{{\eng Paging}}
\medskip
-{\eng c/paging.c}:\\
+{\eng c/paging.c}:
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo1}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo2}\srb\end{minipage}
@@ -688,46 +840,58 @@ Na {\eng VGA} pisemo tako shto\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo8}\srb\end{minipage}
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/09.paging/deo9}\srb\end{minipage}
-{\eng\url{https://wiki.osdev.org/Paging}}
+%{\eng\url{https://wiki.osdev.org/Paging}}
\section{Moj {\eng LIBC}}
\medskip
-{\eng\url{https://wiki.osdev.org/Creating_a_C_Library}}
+%{\eng\url{https://wiki.osdev.org/Creating_a_C_Library}}
+
+{\eng include/asm.h}:
-{\eng include/asm.h}:\\
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/asm.h}\srb\end{minipage}
-{\eng include/errno.h}:\\
+{\eng include/errno.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/errno.h}\srb\end{minipage}
-{\eng include/heap.h}:\\
+{\eng include/heap.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/heap.h}\srb\end{minipage}
-{\eng include/irq.h}:\\
+{\eng include/irq.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/irq.h}\srb\end{minipage}
-{\eng include/stdio.h}:\\
+{\eng include/stdio.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/stdio.h}\srb\end{minipage}
-{\eng include/stdlib.h}:\\
+{\eng include/stdlib.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/stdlib.h}\srb\end{minipage}
-{\eng include/string.h}:\\
+{\eng include/string.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/string.h}\srb\end{minipage}
-{\eng include/time.h}:\\
+{\eng include/time.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/time.h}\srb\end{minipage}
-{\eng include/types.h}:\\
+{\eng include/types.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/types.h}\srb\end{minipage}
-{\eng include/unistd.h}:\\
+{\eng include/unistd.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/unistd.h}\srb\end{minipage}
-{\eng include/vga.h}:\\
+{\eng include/vga.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/vga.h}\srb\end{minipage}
-{\eng include/sys/types.h}:\\
+{\eng include/sys/types.h}:
+
\begin{minipage}{\textwidth}\eng\lstinputlisting[language=C]{include/10.libc/sys/types.h}\srb\end{minipage}