diff options
| -rw-r--r-- | include/10.libc/stdint.h | 365 | ||||
| -rw-r--r-- | kernel.pdf | bin | 443380 -> 446044 bytes | |||
| -rw-r--r-- | kernel.tex | 278 |
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 */ Binary files differ@@ -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}
|
