From fe0a4a6d3b999ceeeffae10f330e5487b85b50ed Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Sun, 28 Apr 2019 00:10:47 +0100 Subject: [PATCH] GDT Rewritten to be slightly more stable --- build/OwOS.bin | Bin 10496 -> 10524 bytes build/OwOS.iso | Bin 5029888 -> 5029888 bytes iso/boot/OwOS.bin | Bin 10496 -> 10524 bytes kernel.cpp | 2 -- kernel/gdt.cpp | 63 ++++++++++++++++++++++++++------------------- kernel/gdt.h | 2 +- kernel/segment.asm | 11 ++++---- 7 files changed, 44 insertions(+), 34 deletions(-) diff --git a/build/OwOS.bin b/build/OwOS.bin index d9402b5593d44470eece9cd7550dff57ca80fe4d..1ddf996190c74cec53135b81f898c32824a8edbe 100755 GIT binary patch delta 2317 zcmZ8idrVVT96tBbi#$quf%1};UZl2l-~vO%7#}nc6+~o;&*{dt&>-;-H}R1@QXFoh zLJ>VKn$10QTlR-8abg-~GDCyPOk7}#B$#XyGv}_%P3B`!rs=-ly%*DXlH2or-}$}H z@1A?wy7I`%Zbj(apI;z#S{duyU*!~Q>b_|nvj)5(W9qhe#@cR~n?Xu#weOp=-U zgQQ_NFtr4_`X~-Re}KY5C5w*|A>1JK8h)VOC3U(&%cLr;OeZbMTUa7U#} z=_pT#sOyvJ)Wr#m1rhOYJ%&uSD`Rqpfz{pmqJ@HfsW0Y|;S3#X$wE3VB>gBaN?jbV z_j=%P#!EFzVuQ>SJpRuaeg`DNGzKKs6XXSoMoB9o?ZZK!;wRcH(hdwVf3V(_G*Ia> zQwXa7a)#}VMuS8C+r6Uz{@dzy1a1qQv-gKiyD3Si#m%}`uU)gMquyofsBvX?Y;oB; zHlhtJE?3)xw6h{O7`b8c2hGFN5HxaIj@-=l2aAR&MesqpdDsKcZW^XqgK9*T+wH^C zf!ju{iQ~}Sz%RV`(x!fYugtney860Cy9(5w z&nLf{^lY)Zf&0@7h;^h_CTdoi$w>N}3WZv8mi$)*?}U~LMwDJUR+`bGOb;*5GVxDr z-kIbYG6y5qOu-T13hJwd(AFmi7u)x<)@0<)pzt&gv&sC=oV=2`bR4@TqEUPwN!Yad$|DWWBYlUiYu{M4 zuKW1BsZQN%p}uM+uQYwNlDyn8UK9Um(R_UG)KlX1dwgN;Gn;$wN23lnu?mZAy~V_A zfDL&1pzpy9T@hO?rdfcy@XY-;8f_%qXGwTh^jXaB$N4PsdnTX7)+ULY`Yp2Wg2n6` zuq61-BOFs;dJ<17|0UNcT?V?v1$&t!3yh8O1@^4?A|TTPzQLX+)d3dsx9t_uVW4&V zyuHx(Jy83@Xq5Uv1ILQ}3~kR-+Bme<7)^nl2{+bTyu{(mp}XraRH32p85AxRLoCCT9yL`h=!8`&@<&x7GPj~3`30~`*nn()@ zx+(MJ&V2`zxv6yP(uiY7k5SW8r8tEEeZcw<*ck)SWMcnB2MFMcprQmQ^e&d+AnIIV zzk|~^G|BIPPY&{bJV`JUpF)PlAf6_$z$DiU98Vc|!G}z^R57O^O)2K`c$sa47x8j% zyVh}?SCKu|OO5sQ;Nw$dHrwEv!CSH6cMSfTfc!EH=p|FY-7x4&(04>UL;W~fiQz(0%GaVI!KJhG>F2fu@#2@SKwRG z5xOZ5Z!znEP#j|rp#VrgR|X{=dz=z|9E1EvPeEc0 wuE3gHG@U>8tPpF;d9AlrQ258*g7{f3#uDQA1@E-%`S|CrMS+t8Z%G^f1H;`7DF6Tf delta 2244 zcmZ8idu&rx7(e&!-qCKQz1zA+x32BjwJod|4UZ9m#Im6Sc?`yzp+ID53XuU5H4+QX znAN!#Co#r|fFaR;On8`PD3UcpmKk+~Y-S`gsqf2x2rBZn{=R$fNW)2P&-eR%&vVXq zPCs0^e`U8%Xzr<~lp_wtB0Y<|qO|TrblefUEik6lWHZ)!)fN>s7o-76J)EO3?U1a? zaA2AMUi&r+KYswiqL(bTTR|ja`*ZV{u8<&KiCxvYnEV`)$bD3PWk9pf4NBD`a>_(i7{+HW~aq;&<^--ZL>@ zgdup8Mc8I=V^~Bl5d*RXIGrZR28n$z1W9?wIf*+s#G2x@YUx0&>Lz!Guu3h}cB6pS zbD{o@7C&3Pc1=V3D%IJ(L@jCGp}N~!u&PE?J#d#{S6^8ej}0}&Z6hL_lfOvGKb7R= zlBRfQgrdc7x7kJ}k#M6;8j(oQl9~cihTNKRSVzHUL*DrO3!D1K!=i%9n|c-2+1GiY zbF?$nsr9dMBxW&1VW(MFE^BZk%CjQy{oR3VR9`ngl0R2u5k8hbJH((`zS@zPEI^>b z8&&7tn%1Q7)iAd9yi9uLNF>`}z~>jtBfotGC88MN?-f)M`m&(bs$1zM7U%0e3bp1e z`8UM>>ZlXUD81A&y3x*}0BbaL&m#gjit@loLtiWNb$_6fpZTMyfxi`<2@ z7S#SRl2sP^{d&n}#e1JZshRQPVq?HuyXqE%h2+^9`+yyz&jLlf3*HUU%>5(en5gr6)z_ zP5x5Zw6JzFoi2wHtFb%R+a>0MxEbGd@Qs+ks|)SH1@_QF`xD|4STHsd-&^=X|EAMX z{#}`?Y-_(=37@yy!UJ|o_-iuqL4O8c3m4p8IRz=jA9GjBZnW|+-{LOLo&)LjE&hhv zBR4`+`B8U`d<@bOe%W0W9)`5&WHI|aASO` z*DG7FeWQFSq!1*D@A7u_bgKt_bMojNrIE#u9K(HTkWI|UY-zrek4Oq@!kmvZ zvoI^!3Zv#Cya3p(@3(=UBYWs)nEH*teUlV6%f#D(>#^WBO}s}y{uCVOh$&zz47x4G ziU@a6Km?$pCHxU^%BnE0i9aKZfC0>;PhjpwJZe0`1Hkoy!swO|z6iV-@vBUnih;Ne z;-pDjAqTAJZxi1FRU2dsEvg~P!6GXnlbdOlS>YuUYR$IdM;)-;^DrXCe? z_iSr@aJeYe j@n~?Fpzzbd%4}6-?19LC4o)el2r#w`#Z3$xg+BfV1ncnK diff --git a/build/OwOS.iso b/build/OwOS.iso index d4a0ab8c458db121dadaa665a331b13d85751110..0878a08e3ffec4d3c4e667db54994f579e474160 100644 GIT binary patch delta 12219 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 Q%92!;tg?4Dvp%N(1tT~TbN~PV delta 12176 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 ZN6PdKnU0caqD+%ynk>^dzoerL{|ljYaSi|g diff --git a/iso/boot/OwOS.bin b/iso/boot/OwOS.bin index d9402b5593d44470eece9cd7550dff57ca80fe4d..1ddf996190c74cec53135b81f898c32824a8edbe 100644 GIT binary patch delta 2317 zcmZ8idrVVT96tBbi#$quf%1};UZl2l-~vO%7#}nc6+~o;&*{dt&>-;-H}R1@QXFoh zLJ>VKn$10QTlR-8abg-~GDCyPOk7}#B$#XyGv}_%P3B`!rs=-ly%*DXlH2or-}$}H z@1A?wy7I`%Zbj(apI;z#S{duyU*!~Q>b_|nvj)5(W9qhe#@cR~n?Xu#weOp=-U zgQQ_NFtr4_`X~-Re}KY5C5w*|A>1JK8h)VOC3U(&%cLr;OeZbMTUa7U#} z=_pT#sOyvJ)Wr#m1rhOYJ%&uSD`Rqpfz{pmqJ@HfsW0Y|;S3#X$wE3VB>gBaN?jbV z_j=%P#!EFzVuQ>SJpRuaeg`DNGzKKs6XXSoMoB9o?ZZK!;wRcH(hdwVf3V(_G*Ia> zQwXa7a)#}VMuS8C+r6Uz{@dzy1a1qQv-gKiyD3Si#m%}`uU)gMquyofsBvX?Y;oB; zHlhtJE?3)xw6h{O7`b8c2hGFN5HxaIj@-=l2aAR&MesqpdDsKcZW^XqgK9*T+wH^C zf!ju{iQ~}Sz%RV`(x!fYugtney860Cy9(5w z&nLf{^lY)Zf&0@7h;^h_CTdoi$w>N}3WZv8mi$)*?}U~LMwDJUR+`bGOb;*5GVxDr z-kIbYG6y5qOu-T13hJwd(AFmi7u)x<)@0<)pzt&gv&sC=oV=2`bR4@TqEUPwN!Yad$|DWWBYlUiYu{M4 zuKW1BsZQN%p}uM+uQYwNlDyn8UK9Um(R_UG)KlX1dwgN;Gn;$wN23lnu?mZAy~V_A zfDL&1pzpy9T@hO?rdfcy@XY-;8f_%qXGwTh^jXaB$N4PsdnTX7)+ULY`Yp2Wg2n6` zuq61-BOFs;dJ<17|0UNcT?V?v1$&t!3yh8O1@^4?A|TTPzQLX+)d3dsx9t_uVW4&V zyuHx(Jy83@Xq5Uv1ILQ}3~kR-+Bme<7)^nl2{+bTyu{(mp}XraRH32p85AxRLoCCT9yL`h=!8`&@<&x7GPj~3`30~`*nn()@ zx+(MJ&V2`zxv6yP(uiY7k5SW8r8tEEeZcw<*ck)SWMcnB2MFMcprQmQ^e&d+AnIIV zzk|~^G|BIPPY&{bJV`JUpF)PlAf6_$z$DiU98Vc|!G}z^R57O^O)2K`c$sa47x8j% zyVh}?SCKu|OO5sQ;Nw$dHrwEv!CSH6cMSfTfc!EH=p|FY-7x4&(04>UL;W~fiQz(0%GaVI!KJhG>F2fu@#2@SKwRG z5xOZ5Z!znEP#j|rp#VrgR|X{=dz=z|9E1EvPeEc0 wuE3gHG@U>8tPpF;d9AlrQ258*g7{f3#uDQA1@E-%`S|CrMS+t8Z%G^f1H;`7DF6Tf delta 2244 zcmZ8idu&rx7(e&!-qCKQz1zA+x32BjwJod|4UZ9m#Im6Sc?`yzp+ID53XuU5H4+QX znAN!#Co#r|fFaR;On8`PD3UcpmKk+~Y-S`gsqf2x2rBZn{=R$fNW)2P&-eR%&vVXq zPCs0^e`U8%Xzr<~lp_wtB0Y<|qO|TrblefUEik6lWHZ)!)fN>s7o-76J)EO3?U1a? zaA2AMUi&r+KYswiqL(bTTR|ja`*ZV{u8<&KiCxvYnEV`)$bD3PWk9pf4NBD`a>_(i7{+HW~aq;&<^--ZL>@ zgdup8Mc8I=V^~Bl5d*RXIGrZR28n$z1W9?wIf*+s#G2x@YUx0&>Lz!Guu3h}cB6pS zbD{o@7C&3Pc1=V3D%IJ(L@jCGp}N~!u&PE?J#d#{S6^8ej}0}&Z6hL_lfOvGKb7R= zlBRfQgrdc7x7kJ}k#M6;8j(oQl9~cihTNKRSVzHUL*DrO3!D1K!=i%9n|c-2+1GiY zbF?$nsr9dMBxW&1VW(MFE^BZk%CjQy{oR3VR9`ngl0R2u5k8hbJH((`zS@zPEI^>b z8&&7tn%1Q7)iAd9yi9uLNF>`}z~>jtBfotGC88MN?-f)M`m&(bs$1zM7U%0e3bp1e z`8UM>>ZlXUD81A&y3x*}0BbaL&m#gjit@loLtiWNb$_6fpZTMyfxi`<2@ z7S#SRl2sP^{d&n}#e1JZshRQPVq?HuyXqE%h2+^9`+yyz&jLlf3*HUU%>5(en5gr6)z_ zP5x5Zw6JzFoi2wHtFb%R+a>0MxEbGd@Qs+ks|)SH1@_QF`xD|4STHsd-&^=X|EAMX z{#}`?Y-_(=37@yy!UJ|o_-iuqL4O8c3m4p8IRz=jA9GjBZnW|+-{LOLo&)LjE&hhv zBR4`+`B8U`d<@bOe%W0W9)`5&WHI|aASO` z*DG7FeWQFSq!1*D@A7u_bgKt_bMojNrIE#u9K(HTkWI|UY-zrek4Oq@!kmvZ zvoI^!3Zv#Cya3p(@3(=UBYWs)nEH*teUlV6%f#D(>#^WBO}s}y{uCVOh$&zz47x4G ziU@a6Km?$pCHxU^%BnE0i9aKZfC0>;PhjpwJZe0`1Hkoy!swO|z6iV-@vBUnih;Ne z;-pDjAqTAJZxi1FRU2dsEvg~P!6GXnlbdOlS>YuUYR$IdM;)-;^DrXCe? z_iSr@aJeYe j@n~?Fpzzbd%4}6-?19LC4o)el2r#w`#Z3$xg+BfV1ncnK diff --git a/kernel.cpp b/kernel.cpp index c342aa8..beca0a0 100644 --- a/kernel.cpp +++ b/kernel.cpp @@ -8,8 +8,6 @@ #include #include -#define BochsBreak() outw(0x8A00,0x8A00); outw(0x8A00,0x08AE0); - extern "C" { extern void INIT_FPU(void); } diff --git a/kernel/gdt.cpp b/kernel/gdt.cpp index 1b670f3..4416502 100644 --- a/kernel/gdt.cpp +++ b/kernel/gdt.cpp @@ -4,47 +4,58 @@ #include struct SegmentDescriptor_t { - uint16_t limit_0; - uint16_t base_0; - uint8_t base_1; + uint16_t limit_low; + uint16_t base_low; + uint8_t base_middle; uint8_t access; - uint8_t limit_1:4; - uint8_t flags:4; - uint8_t base_2; + uint8_t granularity0:4; + uint8_t granularity1:4; + uint8_t base_high; } __attribute__((packed)); -SegmentDescriptor_t _GDT[256]; +struct GDT_t { + uint16_t limit; + uint32_t base; +} __attribute__((packed)); -void lgdt(void* GDT, uint16_t size) { +SegmentDescriptor_t _GDT[5]; +GDT_t _GDTptr; + +void lgdt(void* base, uint16_t size) { struct { - uint16_t size; - void* GDT; - } __attribute__((packed)) GDTR = { size, GDT }; + uint16_t length; + void* base; + } __attribute__((packed)) GDTR = { size, base }; - asm ( "lgdt %0" : : "m"(GDTR) ); -} + asm ( "lgdt %0" : : "m"(GDTR) );} void initGDT() { - memset(&_GDT, 0, sizeof(_GDT)); + #define BochsBreak() outw(0x8A00,0x8A00); outw(0x8A00,0x08AE0); + _GDTptr.limit = (sizeof(SegmentDescriptor_t) * 5) - 1; + _GDTptr.base = (uint32_t)&_GDT; - // Leave 0 blank for null segment + // Null segment + setGDTGate(0, 0, 0, 0, 0); // Code Base 0 limit 32 Access EXEC + RW - setGDT(1, 0x00000000, 0xFFFFFFFF, GDT_ACCESS_PRESENT | GDT_ACCESS_EXEC | GDT_ACCESS_RW, GDT_FLAG_GR_PAGE | GDT_FLAG_SZ_32B); + setGDTGate(1, 0x00000000, 0xFFFFFFFF, GDT_ACCESS_PRESENT | GDT_ACCESS_EXEC | GDT_ACCESS_RW, GDT_FLAG_GR_PAGE | GDT_FLAG_SZ_32B); // Data Base 0 Limit 32 Access RW - setGDT(2, 0x00000000, 0xFFFFFFFF, GDT_ACCESS_PRESENT | GDT_ACCESS_RW, GDT_FLAG_GR_PAGE | GDT_FLAG_SZ_32B); + setGDTGate(2, 0x00000000, 0xFFFFFFFF, GDT_ACCESS_PRESENT | GDT_ACCESS_RW, GDT_FLAG_GR_PAGE | GDT_FLAG_SZ_32B); lgdt(&_GDT, sizeof(_GDT)); + BochsBreak(); SEGMENTS_RELOAD(); } -void setGDT(uint32_t index, uint32_t baseAddr, uint32_t limitAddr, uint8_t accessLvl, uint8_t flags) { - if (index > 256) return; - _GDT[index].base_0 = (baseAddr >> 0) & 0xFFFF; - _GDT[index].base_1 = (baseAddr >> 16) & 0xFF; - _GDT[index].base_2 = (baseAddr>> 24) & 0xFF; - _GDT[index].limit_0 = (limitAddr >> 0) & 0xFFFF; - _GDT[index].limit_1 = (limitAddr >> 16) & 0x0F; - _GDT[index].access = accessLvl; - _GDT[index].flags = flags & 0x0F; +void setGDTGate(uint32_t index, uint32_t baseAddr, uint32_t limitAddr, uint8_t accessLvl, uint8_t flags) { + if (index > 5) return; + _GDT[index].base_low = (baseAddr & 0xFFFF); + _GDT[index].base_middle = (baseAddr >> 16) & 0xFF; + _GDT[index].base_high = (baseAddr >> 24) & 0xFF; + + _GDT[index].limit_low = (limitAddr >> 0) & 0xFFFF; + _GDT[index].granularity0 = (limitAddr >> 16) & 0x0F; + + _GDT[index].granularity1 = flags & 0x0F; + _GDT[index].access = accessLvl; } diff --git a/kernel/gdt.h b/kernel/gdt.h index e3af32c..8049c91 100644 --- a/kernel/gdt.h +++ b/kernel/gdt.h @@ -20,4 +20,4 @@ extern "C" { } void initGDT(); -void setGDT(uint32_t index, uint32_t baseAddr, uint32_t limitAddr, uint8_t accessLvl, uint8_t flags); +void setGDTGate(uint32_t index, uint32_t baseAddr, uint32_t limitAddr, uint8_t accessLvl, uint8_t flags); diff --git a/kernel/segment.asm b/kernel/segment.asm index cc491bf..e86ea65 100644 --- a/kernel/segment.asm +++ b/kernel/segment.asm @@ -1,13 +1,14 @@ .global SEGMENTS_RELOAD SEGMENTS_RELOAD: - ljmp $0x08, $reloadCS - -reloadCS: movw $0x10, %ax - movw %ax, %es - movw %ax, %ss movw %ax, %ds + movw %ax, %es movw %ax, %fs movw %ax, %gs + movw %ax, %ss + ljmp $0x08, $flush2 + +flush2: ret + \ No newline at end of file