From 36b025ccb419936a6000ff9911c4264f213d1ac0 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 27 Oct 2003 22:00:00 -0500 Subject: [PATCH] Import backup from 2003-10-27 --- kernel.bin | Bin 16384 -> 0 bytes kernel.c | 7 +- lib/hlibc.a | Bin 3170 -> 0 bytes lib/io.lst | 540 -------------------------- lst/LDout.doc | 144 ------- lst/asmfuncs.lst | 42 -- lst/kernel.lst | 392 ------------------- lst/stage1.lst | 256 ------------ lst/stage2.lst | 988 ----------------------------------------------- stage1.bin | Bin 512 -> 0 bytes stage2.asm | 1 + stage2.bin | Bin 2057 -> 0 bytes tetris.c | 7 - vmm.c | 145 ++++--- vmm.h | 9 +- 15 files changed, 107 insertions(+), 2424 deletions(-) delete mode 100644 kernel.bin delete mode 100644 lib/hlibc.a delete mode 100644 lib/io.lst delete mode 100644 lst/LDout.doc delete mode 100644 lst/asmfuncs.lst delete mode 100644 lst/kernel.lst delete mode 100644 lst/stage1.lst delete mode 100644 lst/stage2.lst delete mode 100644 stage1.bin delete mode 100644 stage2.bin delete mode 100644 tetris.c diff --git a/kernel.bin b/kernel.bin deleted file mode 100644 index 5f06a8061aac95869f6dd498a13d2a0396ae1c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 zcmeHNe{|HCv_4JQDO%8m&pLgGV_uY5jefQn>=6m6F#3v zn8^gU}X2Hxk-NXeObxgz^cw3Ef0! zDWO?}3JJ|7L~hnLhY&Sun@fn4Y`d8dnWSwVA)0`;`GoMFt-o%Jn|qao+R-fXD| z{vpt-;$MxcW+Q(GCJh{M272u^>-kw(Xwni?y&l!SNLH)+K zAxPj3rYLVq%8nGJpD62jwWJ*HTz#i2Z{uv&8hY87&?-l&;gKv*qoFQw!9PAwq|Sq1 z)LSFtFr}evDm8YvN}LQzHJK7tB1k5)WAA^XpJRdqz#NCIxnK-xF`(%J^@p^WVr6I( z()#nQ7JvgJEYPFuY4@!T^jf?LtTIn)RK+wFHOoHwUP z&G_pb)mweL{F`c@SXXINsy^KHa_1x4H*9%)_S~D5n-rHa$8$vwHOY|AF!rYhg2 zEswgkR&S`S_01jRWefoZ_I-Xlri%Qoil2j%fg;_X{JpC|clIj&Q(1>~Awno>-DvSW zNo^=1As74w4Mmdy&iZG8?|_{I_l(s=Y~+t6McBPBTj3dg#0_+J)Jkobl+okA>Zmmb zWrcqT{USk2vgUoNnS>e>KS4FMs5xrQB!bZB0I2{sZ>)<^cyjEab)XmO7YFKMw>kFw z6G(*Wv+ZgJFb3xrF zsicWx4>gVaK~jD#DD(vHQBgREXM|uwCYcBZpiwB1SB8@g7$jGctJxqG>!fI1LmmnG zI9YytNV!s$f1j*hF3Ybc%S8n+)xa6`$4jTC8 z$ajGoipU9=@9Kd}0+P)nHd*OHj_nx|Oxiw2f~iT$jO|k-WtQXVUy>b#-`=v_8uYex3dVyM1!dzl==${oe}dNU!0PadM8(KNbxNR6R<^y_+i=VjaHjMQFN z!|`|RVqTj%blX`C+a)Pu3<_B@8==R0h{AyfJ2}DuKarXADU;vEdr*o5i~-m0@CS;r zVC+S^$MPeni`KMKF_i7ZQ|Sm+^o6v(pw^qP5;;)U%XV1;TJNHe)*FtE3HOW%E$_<@ z%ZNcvAM6O9ai#)DxJS+CkVTr(jP9VN*|`|ntwvwRJ7w+=(p0%O7dyV294>b1wT|z! zi?IneaZ&(ncL@T*QnUaZ>j&{aIh>!T_{Rw?AOwxEVJG{Rqi6n%V_FPWVbNP#Y2+cx zUQ#ot#S>O4Co;wGiwG~;Z9682#2?b)Nr5sGvb5+TedoWhB<#ONHsw7F>BxchBKb0+ z`q@kD&{}!3YunKVA^Vp{2Bo!RKbJY;U1IH-JG>ojB1a;{nxV(B6r@3^TI)^pPV8PPc)ihZ~N5>H1P#q|`7Gq$Jy&sYv zrL1P~g)Gj4#FAF`d3{@P-eW<_xGQdgNth$rKxu@I!~*J&lSXj5Q09>C(^U&9m#K!> zFt-O6TUtrNv0@cAXVDF!6x2QlX&(f3s?2YSs?C7R89f_X{z013LpmCv&gcd5^gfz3 zp1_grvqVBSuRn_-qT7y9t&$n=1)PPOtNYhI^l+uV-YmzoIJtRaU7QXhyG_w=(7Hw_ zvmiFnbm1?ZQtHI+J(Q#p2_gpYs-H^i;qd#GP=yK@?y;CPHPG%1mfGym34>+PS(Y^; z)Ue2tI4LBfKu(~}uI#WM)99qbB9!y!_KWjhp%92EJF@wCpuO#WgN<@BJ^*uzuoQ=x z6@MoB3l&=mGMHl#9azoLFWdXZOc=oIC}) z453vF*=Ff#7 z-91IGaoz`Z^r}l7JSAeKq>Z&LHC8p%fngfje$q{YwS~=1-$w@VLsgne;!pPhx$UKO zcq&Z-+)AtrT@dY@!lRr3m{(dNc6hEr<>X|c2QgV-z+}au|Cwen84uuTWLt6#wV*_G z>}`TQg!7P_!hb@x<}3wEufXY_O@2fZNPc84u?R;}VNNumb5_D1=dD;ZFlV$hk~)MZS9W@03!=y+06I6!2%T$jU7$1N@T{<~yF#l5B2g;%*2 z-;1pmyRO`am#!!uyfK%Sm1|2@ttelUn`>ju+nL_pUG-?S>ycXj=8di`wLaH|YFE|f z&9#qI`KmX%JhfY0?ov(MZ@3{iZzGx_Q=kpqMOQ1P8ijXV6h=5W69KoC9*7De8|iH zO+>=a6aHSWGYehmw?6!FNDXC@CZUR6u;Q*KX!&+1TTry#kmZ|stS^CltPeRPVn5tO zvNUV`jf^%WPzpp&v2{F@?Zz!3)T5V-@(*HCnvt5a$Q?ijCgCQfotyQ1S>CLOyB5bw z-SYB9FLju$Gr@~}s8zn{w1ji!7%V+>na5arBFrZu>lLNGMU3_`jguLC*M+8v0r-29 z_E>R27+&c9N=wR|zYxYv+VOkC?0AiAH=-S1z&#~}raVfyzOo&)4=!!QwJ@DN>C%=3 zWYy}}x`*WMnEu2>Bi18V$6`VzeNM(1v9j!*kB!|FYt<9f20WpPf!-$VGd=PCOmbhW zq^$pfc*25M!8N)32>QfO#Z8Ib+X_?hpCw5HWaq1DT>Kl7B8uJv#Iwnu=zXYe2wORn zYIjSKcN!Hn7VynV6-|<1Qi`I0!IoB(46y+@)#VV$iaaoZ(Yrrn@E=boF zS3bG?h0o)WJ?~DkrJWEc(ZC7e5m^--AiE;BNpavt*2PPQx2$nV`{m0jvM6y*PUmc6 zSR!+18OnKm@PR-tqP+S#(St|hZN=z482;o1F&MG+IL7!NneFa)Sjw*XZp+C$` z3$?y&h;^!$u>?!_`?%FA)=qRSR`5xls)ksq{t)RKZ5Rcp4t6M~aM0~e7eiSf@g3Ir zCXj4+gCPE^BsOb(h&;8RVzs1lNeo+MyO0xz%_TZ5Z4?VN^(jYMd07xCVVzxYiyV-+ z={{J*sfC)IxQ#Nn?SVR{;1&t#5N_vCZp@awKy&WCI;1(pj*A!u8n$P9npnq6nrcP@ zhZIGgfYB;c;mn6c7HTo1!c#H!gg=Y+*_RN}VK$MfiWDt+D(Tz9Ms4V=kJ>0-a@2G+ zo<3@$e92K8wF@;dYNHJ9D;~8S3HivQrW;p%)Q1p%G3vq2DUu#(gCk$o247?@hxv&y zX5CMWvb0#1@DptM$V&(NVAfC{%z}U5Xi#VP3Ctq>1Q}CSfo7+gtfU8ln>;At&q?^5 z2|tWv=VqBir_r+b$8ixV1r5%F1}Z<9#wTe`{wqoQOSGY$TZ;vkB^O*A3vQZWN0=H* z)6Eacj7zM$Xt$Bw3m4V>QcrC(@@h99gK3A$N>2KvC_PBWa4(?$5bK-mEHsq@w&UlB5FO!<%+NK=RdET2cp2`oX5h>Ol2a#{!#(3N zx;?moh*lvl2zD#&N_Qxe0{y-UdlQoSB++aoVzV1*K8b9?iBe}z*5IHUmg>!}m7AWdrk?>_k8QBAyqy_& zJ8kSzsk@*puYSCC>n>N-_Nq;rt2S(|cKK>uD^`l;%S&7{OLqCHw^1n{GQ{m%4!?@- z zWk&Eh^S%t7(WVys$_knRKbpdv}*LCWN{|1083ifcSCPv^?Unaak?hH_2dvxjmy`Sp@($StWgG6M%@J!{0T zv6M997GW%i;-DxlP?1Q)=trP#H{B4mUx!yb&~A0}g~IUoPy|OxT#u^bv{)L8l|H+1 z^Q^&4&LK?KATx9GkCPFUB$4MDeP)tMB-Kh^_846sPH!N)&ZL9GAWmI_X9n|<2AN` zq)__u3H|Fr7bJz^s}uSmrycT2qQ z1G?Gi2SdW&&!1L_13NaCw#PF&z!e2Z)d)%VvDzG%f`*s8|jWrKhGiu zKn{wl*j!&eJ$K;j6nEi(IT!EQzH6g164rUpc)*Ge*BCz!Wup0f?eFlK&d~sv%Vx;SYO0x^_%&uk3WV+UfE_6i-v}G+Ke+URe%WQ>W*(x6Ln) zKj$fF>N)4R`(+2A)92Q%TV2_?vV4BKQQZqxS>4<8-r98}bLIWz{4~yz!Oq}sA*;~l zyR9(8_t?q*YV4%pygJqsGzYtii|FIZvGTnH6Fp4RDKHmvj;w$BWd5n9Gald}Ek8x2-erc-a_t&qU{HU3 zs8S7{YdlKF*!joznU@qYzctc{QsbxSk@>DE%md+vfNq{?G>`sf{_(<%zDb3C-^{|D zzS|4)d`k7qx;&lSD)>iRAC%gd-KHlBUws`R^VgTf6Ts3%_rAi|5hziVdGKUj~`2;Ue=* zdquI%1F>i!9^0)}2*i-yHYBZCeWn9y!SWBdLw@zgh0HhJ&0jU@qi0v+{tnfRy*X%# z$W5a;s$IlgtlIX*i4!NzpP?%cbAcA$W{uDnk$UhnDILw0tFh9ezrkImXtu)|Swjqz zpo`np^M1PH->3CAX&3dotc$oui09*yz9OD39&(zsiw$gEV=uWzlG)8OgsM)^qW>W4 z_GzjZvN%b&IY-9Wc!U_l(NK<~5qB&2+cilx@#21p@xun^`ARi?r1o&jxgL$k&z~c+tNaV9Q_-$z^DcO5-mVMZ}e}}0;3ifwZNzaMlCREfl&*LT42-y UqZSyoz^DaAEih_<|IZfqKiNg>IRF3v diff --git a/kernel.c b/kernel.c index a591d58..b6c2083 100644 --- a/kernel.c +++ b/kernel.c @@ -80,10 +80,13 @@ void k_init() mouse_init(); printf("HOS 0.1.1 - Kernel Size: %d kb\n", kernel_size()/1024); printf("%x\t%x\n", read_cr0(), read_cr3()); - write_cr3((dword)vmm_PDBR); - write_cr0(0x80000000|read_cr0()); + vmm_enable_paging(); printf("%x\t%x\n", read_cr0(), read_cr3()); printf("Memory available to OS: %d MB (Bytes: %d)\n", mm_totalmem/0x100000, mm_totalmem); + vmm_map1(0x45000000, 0xB8000, 0x3); + *((word *)0x45000002) = 0x0444; + vmm_mapn(0x54FFF000, 0xB7000, 0x3, 2); + *((word *)0x55000020) = 0x0443; pic1_mask(0); //unmask IRQ's 0-7 pic2_mask(0); //unmask IRQ's 8-15 enable_ints(); diff --git a/lib/hlibc.a b/lib/hlibc.a deleted file mode 100644 index da5a539ed4af15aadd4924fbabf5be2893c88a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3170 zcmcJRZERCj7{^aHYP%vYffz&+sG1=dslDCkh7__eE+{FcY>sR!vn%Z_E0o@*y%j_- zYw*Lm1>GkN(GTheFi`@DByM1MtHI3xL0*z6hRB4Z&E^sVI+qpZ|J?iBb{&ZEgC{xt z|ITxs=iKu=_x9fNjLR4Ex2>{xy|((M4Qs@;R;>wkXO*K`a8}!`)=CGrX}>gWbqLjj zt(HcnwFL&oo&a)POll)_lCCAKCv7J6k!~Z6LE9{h?S^`H#zKlzn~25bm`9F>l#m=@ z-mQ`{)f7!Ae&&tFLJ=j%ynZ-c z9qHiltEES0js#bC{4x?;e{>e7fsxJ4jVEqJCptW?*7s zB9%`4h_zf6#pxn4H%qQ$%4cEFKE{+XUbgmerY!u*V6?-y zayfq9G#arWQo5R7si|@BEVhNpZ}M~{%wM{gGSibemY*N`t?>e87^=?XCyH)iKxvP;aR&Yl@8F`V5$ZB9ze4PEO_?p4Ef8naE@ zp~0NGbR57&6Sxh_JBAUAza+8_GHS` ztFa@Lb~1E{2?^*Ows0}bLJ26i^R212RiqA2fc>)edq?_uc3b8 zK4_TucPNkHvG>qB(E0i$ctX0N+&&llG4Vq1L1H`jDDf)rDdHCJMdB#<2Jt>{miPlO ze~0k(4}neSoR35K^*CREK2JOVbrKIkSEKWN-iFqZ{SRo6xCHOzx53=U4DKNNJn#Xs zF9m-}_7&j6#GAn15Qo4Qi4))(V7}%a@GY{x3mzf<5d0VUd;~V2^IVQ_CGLZoh<}1w zh_6Fu5NDyYiC5zlGZ)OS>jytg_V>UGh!23DB|ZpVMBD>@f%to{jd%d;AQrGeC-}d8 zk@;s?iwG$Wrj8=g&TuFq6%D4iD84P)G+@e9Kt`zko!371-mol3nax&Xx5c-IR1!3z z`FK?FhkRj1!vID*9vCL{={B4V$TJ$1Vty&2=wloWLXoZd$lvCR=}edKs@v0}i-WbD zPdS+s54B7lVsjK9VRR21XS5LgOrsrbG#hb5R(4A z0Xh)DN{gyQ^-d`2A<6Av?n>saVD4qiUB%qa{ISWsoVf)%Iy?jc9Xg>uPIXwk}@xTEh}+g$=K0TQC%sXwm!lvTZd`1^tC9O|Ai6B&^iH-}S|9 pa{kyBe2VA!XmalOvp?KtQr`S-lp6Tiqqym(W^Uz|DN)~Ne*?{cP)Yy* diff --git a/lib/io.lst b/lib/io.lst deleted file mode 100644 index 0b0e3e5..0000000 --- a/lib/io.lst +++ /dev/null @@ -1,540 +0,0 @@ - 1 - 2 %macro jzfar 1 - 3 jnz %%skip - 4 jmp %1 - 5 %%skip: - 6 - 7 %endmacro - 8 - 9 [global _writeCursorPosition] - 10 [global _getCursorPosition] - 11 [global _putc] - 12 [global _puts] - 13 [global _printf] - 14 [global _console_scroll] - 15 [global _console_cls] - 16 [global _putHex] - 17 [global _putDec] - 18 [global _putDecu] - 19 - 20 - 21 ; - 22 ;void writeCursorPosition(word pos) - 23 ; - 24 _writeCursorPosition: - 25 00000000 55 push ebp - 26 00000001 89E5 mov ebp, esp - 27 - 28 00000003 50 push eax - 29 00000004 53 push ebx - 30 00000005 52 push edx - 31 - 32 00000006 8B4508 mov eax, [ebp+8] ;cursor position in ax - 33 - 34 00000009 88C3 mov bl, al - 35 0000000B 66BAD403 mov dx, 0x03D4 - 36 0000000F B00E mov al, 0x0E - 37 00000011 EE out dx, al - 38 - 39 00000012 6642 inc dx - 40 00000014 88E0 mov al, ah - 41 00000016 EE out dx, al - 42 - 43 00000017 664A dec dx - 44 00000019 B00F mov al, 0x0F - 45 0000001B EE out dx, al - 46 - 47 0000001C 6642 inc dx - 48 0000001E 88D8 mov al, bl - 49 00000020 EE out dx, al - 50 - 51 00000021 5A pop edx - 52 00000022 5B pop ebx - 53 00000023 58 pop eax - 54 00000024 5D pop ebp - 55 - 56 00000025 C3 ret - 57 - 58 - 59 ; - 60 ;word getCursorPosition() - 61 ; - 62 _getCursorPosition: - 63 00000026 53 push ebx - 64 00000027 52 push edx - 65 - 66 00000028 31C0 xor eax, eax - 67 0000002A 66BAD403 mov dx, 0x03D4 - 68 0000002E B00E mov al, 0x0E - 69 00000030 EE out dx, al - 70 - 71 00000031 6642 inc dx - 72 00000033 EC in al, dx - 73 00000034 88C3 mov bl, al - 74 - 75 00000036 664A dec dx - 76 00000038 B00F mov al, 0x0F - 77 0000003A EE out dx, al - 78 - 79 0000003B 6642 inc dx - 80 0000003D EC in al, dx - 81 0000003E 88DC mov ah, bl - 82 - 83 00000040 5A pop edx - 84 00000041 5B pop ebx - 85 - 86 00000042 C3 ret - 87 - 88 - 89 ; - 90 ;int putc(int chr) - 91 ; - 92 _putc: - 93 00000043 55 push ebp - 94 00000044 89E5 mov ebp, esp - 95 00000046 53 push ebx - 96 00000047 51 push ecx - 97 00000048 52 push edx - 98 - 99 00000049 E8D8FFFFFF call _getCursorPosition - 100 0000004E 89C3 mov ebx, eax - 101 00000050 89D9 mov ecx, ebx - 102 - 103 00000052 8B4508 mov eax, [ebp+8] ;al=character - 104 00000055 3C0A cmp al, 10 ;newline - 105 00000057 7436 jz putc_newline - 106 00000059 3C09 cmp al, 9 ;tab - 107 0000005B 746B jz putc_tab - 108 - 109 0000005D D1E3 shl ebx, 1 - 110 0000005F 81C300800B00 add ebx, 0xb8000 - 111 00000065 B407 mov ah, 0x07 - 112 00000067 668903 mov [ebx], ax - 113 0000006A 89C8 mov eax, ecx - 114 0000006C 40 inc eax - 115 0000006D 3DD0070000 cmp eax, 2000 - 116 00000072 750A jnz putc_writeit2 - 117 00000074 E86C010000 call _console_scroll - 118 00000079 B880070000 mov eax, 2000-80 - 119 putc_writeit2: - 120 0000007E 50 push eax - 121 0000007F E87CFFFFFF call _writeCursorPosition - 122 00000084 81C404000000 add esp, 4 - 123 0000008A E96E000000 jmp putc_done - 124 - 125 putc_newline: - 126 0000008F 89D8 mov eax, ebx ;eax = cursor position - 127 00000091 BB50000000 mov ebx, 80 - 128 00000096 31D2 xor edx, edx - 129 00000098 66F7F3 div bx ;ax=dx:ax/bx, dx=remainder - 130 0000009B 66BB5000 mov bx, 80 - 131 0000009F 6629D3 sub bx, dx - 132 000000A2 89C8 mov eax, ecx - 133 000000A4 01D8 add eax, ebx ;eax = new cursor position - 134 000000A6 3DD0070000 cmp eax, 2000 - 135 000000AB 750A jnz putc_newline_writeit2 - 136 000000AD E833010000 call _console_scroll - 137 000000B2 B880070000 mov eax, 2000-80 ;beginning of last row - 138 putc_newline_writeit2: - 139 000000B7 50 push eax - 140 000000B8 E843FFFFFF call _writeCursorPosition - 141 000000BD 81C404000000 add esp, 4 - 142 000000C3 E935000000 jmp putc_done - 143 - 144 putc_tab: - 145 000000C8 89D8 mov eax, ebx ;eax = cursor position - 146 000000CA BB08000000 mov ebx, 8 - 147 000000CF F6F3 div bl ;al=ax/bl, ah=remainder - 148 000000D1 31D2 xor edx, edx - 149 000000D3 88E2 mov dl, ah - 150 000000D5 66BB0800 mov bx, 8 - 151 000000D9 6629D3 sub bx, dx - 152 000000DC 89C8 mov eax, ecx - 153 000000DE 01D8 add eax, ebx ;eax = new cursor position - 154 000000E0 3DD0070000 cmp eax, 2000 - 155 000000E5 750A jnz putc_tab_writeit2 - 156 000000E7 E8F9000000 call _console_scroll - 157 000000EC B880070000 mov eax, 2000-80 ;beginning of last row - 158 putc_tab_writeit2: - 159 000000F1 50 push eax - 160 000000F2 E809FFFFFF call _writeCursorPosition - 161 000000F7 81C404000000 add esp, 4 - 162 - 163 putc_done: - 164 000000FD 5A pop edx - 165 000000FE 59 pop ecx - 166 000000FF 5B pop ebx - 167 00000100 5D pop ebp - 168 - 169 00000101 C3 ret - 170 - 171 - 172 - 173 ; - 174 ;void printf(char *fmt, ... ) - 175 ; - 176 _printf: - 177 00000102 55 push ebp - 178 00000103 89E5 mov ebp, esp - 179 00000105 60 pusha - 180 00000106 8B5D08 mov ebx, [ebp+8] ;ebx = position in format string - 181 00000109 89EE mov esi, ebp - 182 0000010B 81C60C000000 add esi, 12 ;esi = to next variable arg - 183 00000111 31C9 xor ecx, ecx ;ecx used if we encounter a '%' - 184 printf_loop: - 185 00000113 8A03 mov al, [ebx] - 186 00000115 43 inc ebx - 187 00000116 3C00 cmp al, 0 - 188 jzfar printf_done - 189 00000118 7505 <1> jnz %%skip - 190 0000011A E9C3000000 <1> jmp %1 - 191 <1> %%skip: - 192 <1> - 193 0000011F 81F901000000 cmp ecx, 1 - 194 00000125 7417 jz printf_special - 195 00000127 3C25 cmp al, '%' - 196 jzfar printf_percent - 197 00000129 7505 <1> jnz %%skip - 198 0000012B E9A8000000 <1> jmp %1 - 199 <1> %%skip: - 200 <1> - 201 - 202 00000130 50 push eax - 203 00000131 E80DFFFFFF call _putc - 204 00000136 81C404000000 add esp, 4 - 205 0000013C EBD5 jmp printf_loop - 206 - 207 printf_special: - 208 0000013E 31C9 xor ecx, ecx - 209 00000140 3C64 cmp al, 'd' - 210 00000142 7419 jz printf_decimal - 211 00000144 3C75 cmp al, 'u' - 212 00000146 7428 jz printf_decimalu - 213 00000148 3C78 cmp al, 'x' - 214 0000014A 7437 jz printf_hex - 215 0000014C 3C25 cmp al, '%' - 216 0000014E 7446 jz printf_ppercent - 217 00000150 3C73 cmp al, 's' - 218 00000152 7453 jz printf_string - 219 00000154 3C63 cmp al, 'c' - 220 00000156 7462 jz printf_char - 221 00000158 E970000000 jmp printf_special_done - 222 - 223 printf_decimal: - 224 0000015D 8B06 mov eax, [esi] - 225 0000015F 50 push eax - 226 00000160 E8FE010000 call _putDec - 227 00000165 81C404000000 add esp, 4 - 228 0000016B E95D000000 jmp printf_special_done - 229 - 230 printf_decimalu: - 231 00000170 8B06 mov eax, [esi] - 232 00000172 50 push eax - 233 00000173 E823010000 call _putDecu - 234 00000178 81C404000000 add esp, 4 - 235 0000017E E94A000000 jmp printf_special_done - 236 - 237 printf_hex: - 238 00000183 8B06 mov eax, [esi] - 239 00000185 50 push eax - 240 00000186 E8A2000000 call _putHex - 241 0000018B 81C404000000 add esp, 4 - 242 00000191 E937000000 jmp printf_special_done - 243 - 244 printf_ppercent: - 245 00000196 50 push eax - 246 00000197 E8A7FEFFFF call _putc - 247 0000019C 81C404000000 add esp, 4 - 248 000001A2 E926000000 jmp printf_special_done - 249 - 250 printf_string: - 251 000001A7 8B06 mov eax, [esi] - 252 000001A9 50 push eax - 253 000001AA E8CD000000 call _puts - 254 000001AF 81C404000000 add esp, 4 - 255 000001B5 E913000000 jmp printf_special_done - 256 - 257 printf_char: - 258 000001BA 8B06 mov eax, [esi] - 259 000001BC 50 push eax - 260 000001BD E881FEFFFF call _putc - 261 000001C2 81C404000000 add esp, 4 - 262 000001C8 E900000000 jmp printf_special_done - 263 - 264 printf_special_done - 265 000001CD 81C604000000 add esi, 4 ;point to next extra argument - 266 000001D3 E93BFFFFFF jmp printf_loop - 267 - 268 printf_percent: - 269 000001D8 B901000000 mov ecx, 1 - 270 000001DD E931FFFFFF jmp printf_loop - 271 - 272 - 273 printf_done: - 274 000001E2 61 popa - 275 000001E3 5D pop ebp - 276 000001E4 C3 ret - 277 - 278 - 279 - 280 ; - 281 ;void console_scroll() - 282 ; - 283 _console_scroll: - 284 000001E5 60 pusha - 285 000001E6 BEA0800B00 mov esi, 0xb8000+160 - 286 000001EB BF00800B00 mov edi, 0xb8000 - 287 000001F0 B9C0030000 mov ecx, 960 ;(2000-80)/2 - 288 console_scroll_loop: - 289 000001F5 AD lodsd - 290 000001F6 AB stosd - 291 000001F7 E2FC loop console_scroll_loop - 292 000001F9 66B82007 mov ax, 0x0720 - 293 000001FD B950000000 mov ecx, 80 - 294 console_scroll_loop2: - 295 00000202 66AB stosw - 296 00000204 E2FC loop console_scroll_loop2 - 297 00000206 61 popa - 298 00000207 C3 ret - 299 - 300 ; - 301 ;void console_cls() - 302 ; - 303 _console_cls: - 304 00000208 60 pusha - 305 00000209 BF00800B00 mov edi, 0xb8000 - 306 0000020E 66B82007 mov ax, 0x0720 - 307 00000212 B9D0070000 mov ecx, 2000 - 308 console_cls_loop: - 309 00000217 66AB stosw - 310 00000219 E2FC loop console_cls_loop - 311 0000021B 6800000000 push dword 0 - 312 00000220 E8DBFDFFFF call _writeCursorPosition - 313 00000225 81C404000000 add esp, 4 - 314 0000022B 61 popa - 315 0000022C C3 ret - 316 - 317 ; - 318 ;int putHex(dword number) - 319 ; - 320 _putHex: - 321 0000022D 55 push ebp - 322 0000022E 89E5 mov ebp, esp - 323 00000230 60 pusha - 324 00000231 8B4508 mov eax, [ebp+8] ;eax = number to print - 325 00000234 31DB xor ebx, ebx ;we have not printed a character yet - 326 00000236 B908000000 mov ecx, 8 ;counter for number of characters - 327 - 328 putHex_loop: - 329 0000023B 50 push eax - 330 0000023C 51 push ecx - 331 - 332 0000023D 49 dec ecx - 333 0000023E C1E102 shl ecx, 2 ;edx=counter*4 (amount to shift by) - 334 00000241 D3E8 shr eax, cl - 335 00000243 250F000000 and eax, 0x0F - 336 00000248 80F900 cmp cl, 0 - 337 0000024B 7409 jz putHex_notzero ;if number is 0 - 338 0000024D 3C00 cmp al, 0 - 339 0000024F 7505 jnz putHex_notzero - 340 00000251 80FB00 cmp bl, 0 - 341 00000254 741F jz putHex_loop_end - 342 putHex_notzero: - 343 00000256 B301 mov bl, 1 - 344 00000258 0530000000 add eax, '0' - 345 0000025D 3D39000000 cmp eax, '9' - 346 00000262 7605 jbe putHex_dontadjust - 347 00000264 0507000000 add eax, 'A'-'9'-1 - 348 putHex_dontadjust: - 349 00000269 50 push eax - 350 0000026A E8D4FDFFFF call _putc - 351 0000026F 81C404000000 add esp, 4 - 352 - 353 putHex_loop_end: - 354 00000275 59 pop ecx - 355 00000276 58 pop eax - 356 00000277 E2C2 loop putHex_loop - 357 - 358 00000279 61 popa - 359 0000027A 5D pop ebp - 360 0000027B C3 ret - 361 - 362 - 363 ; - 364 ;int puts(char *str) - 365 ; - 366 _puts: - 367 0000027C 55 push ebp - 368 0000027D 89E5 mov ebp, esp - 369 0000027F 56 push esi - 370 00000280 50 push eax - 371 00000281 8B7508 mov esi, [ebp+8] ;esi = to string - 372 puts_loop: - 373 00000284 AC lodsb - 374 00000285 3C00 cmp al, 0 - 375 00000287 740E jz puts_done - 376 00000289 50 push eax - 377 0000028A E8B4FDFFFF call _putc - 378 0000028F 81C404000000 add esp, 4 - 379 00000295 EBED jmp puts_loop - 380 - 381 puts_done: - 382 00000297 58 pop eax - 383 00000298 5E pop esi - 384 00000299 5D pop ebp - 385 0000029A C3 ret - 386 - 387 - 388 - 389 - 390 - 391 - 392 _putDecu: - 393 0000029B 55 push ebp - 394 0000029C 89E5 mov ebp, esp - 395 0000029E 81EC18000000 sub esp, 24 - 396 000002A4 C745FC01000000 mov DWORD [ebp-4], 1 - 397 000002AB C645FB00 mov BYTE [ebp-5], 0 - 398 L2: - 399 000002AF 8B5508 mov edx, DWORD [ebp+8] - 400 000002B2 B8CDCCCCCC mov eax, -858993459 - 401 000002B7 F7E2 mul edx - 402 000002B9 89D0 mov eax, edx - 403 000002BB C1E803 shr eax, 3 - 404 000002BE 3B45FC cmp eax, DWORD [ebp-4] - 405 000002C1 7305 jae L4 - 406 000002C3 E912000000 jmp L3 - 407 L4: - 408 000002C8 8B45FC mov eax, DWORD [ebp-4] - 409 000002CB 89C2 mov edx, eax - 410 000002CD C1E202 sal edx, 2 - 411 000002D0 01C2 add edx, eax - 412 000002D2 8D0412 lea eax, [edx+edx] - 413 000002D5 8945FC mov DWORD [ebp-4], eax - 414 000002D8 EBD5 jmp L2 - 415 L3: - 416 000002DA 90 nop - 417 L5: - 418 000002DB 817DFC01000000 cmp DWORD [ebp-4], 1 - 419 000002E2 7705 ja L7 - 420 000002E4 E959000000 jmp L6 - 421 L7: - 422 000002E9 8B5508 mov edx, DWORD [ebp+8] - 423 000002EC 89D0 mov eax, edx - 424 000002EE BA00000000 mov edx, 0 - 425 000002F3 F775FC div DWORD [ebp-4] - 426 000002F6 8945F4 mov DWORD [ebp-12], eax - 427 000002F9 8A45F4 mov al, BYTE [ebp-12] - 428 000002FC 8845FB mov BYTE [ebp-5], al - 429 000002FF B800000000 mov eax, 0 - 430 00000304 8A45FB mov al, BYTE [ebp-5] - 431 00000307 0FAF45FC imul eax, DWORD [ebp-4] - 432 0000030B 294508 sub DWORD [ebp+8], eax - 433 0000030E 8B55FC mov edx, DWORD [ebp-4] - 434 00000311 B8CDCCCCCC mov eax, -858993459 - 435 00000316 F7E2 mul edx - 436 00000318 89D0 mov eax, edx - 437 0000031A C1E803 shr eax, 3 - 438 0000031D 8945FC mov DWORD [ebp-4], eax - 439 00000320 8D45FB lea eax, [ebp-5] - 440 00000323 800030 add BYTE [eax], 48 - 441 00000326 81EC0C000000 sub esp, 12 - 442 0000032C B800000000 mov eax, 0 - 443 00000331 8A45FB mov al, BYTE [ebp-5] - 444 00000334 50 push eax - 445 00000335 E809FDFFFF call _putc - 446 0000033A 81C410000000 add esp, 16 - 447 00000340 EB99 jmp L5 - 448 L6: - 449 00000342 81EC0C000000 sub esp, 12 - 450 00000348 8A4508 mov al, BYTE [ebp+8] - 451 0000034B 0530000000 add eax, 48 - 452 00000350 25FF000000 and eax, 255 - 453 00000355 50 push eax - 454 00000356 E8E8FCFFFF call _putc - 455 0000035B 81C410000000 add esp, 16 - 456 00000361 C9 leave - 457 00000362 C3 ret - 458 - 459 - 460 - 461 - 462 _putDec: - 463 00000363 55 push ebp - 464 00000364 89E5 mov ebp, esp - 465 00000366 81EC18000000 sub esp, 24 - 466 0000036C 817D0800000000 cmp DWORD [ebp+8], 0 - 467 00000373 7919 jns L9 - 468 00000375 81EC0C000000 sub esp, 12 - 469 0000037B 682D000000 push 45 - 470 00000380 E8BEFCFFFF call _putc - 471 00000385 81C410000000 add esp, 16 - 472 0000038B F75D08 neg DWORD [ebp+8] - 473 L9: - 474 0000038E C745FC01000000 mov DWORD [ebp-4], 1 - 475 00000395 C645FB00 mov BYTE [ebp-5], 0 - 476 L10: - 477 00000399 8B4508 mov eax, DWORD [ebp+8] - 478 0000039C 3B45FC cmp eax, DWORD [ebp-4] - 479 0000039F 7305 jae L12 - 480 000003A1 E912000000 jmp L11 - 481 L12: - 482 000003A6 8B45FC mov eax, DWORD [ebp-4] - 483 000003A9 89C2 mov edx, eax - 484 000003AB C1E202 sal edx, 2 - 485 000003AE 01C2 add edx, eax - 486 000003B0 8D0412 lea eax, [edx+edx] - 487 000003B3 8945FC mov DWORD [ebp-4], eax - 488 000003B6 EBE1 jmp L10 - 489 L11: - 490 000003B8 8B55FC mov edx, DWORD [ebp-4] - 491 000003BB B8CDCCCCCC mov eax, -858993459 - 492 000003C0 F7E2 mul edx - 493 000003C2 89D0 mov eax, edx - 494 000003C4 C1E803 shr eax, 3 - 495 000003C7 8945FC mov DWORD [ebp-4], eax - 496 L13: - 497 000003CA 817DFC01000000 cmp DWORD [ebp-4], 1 - 498 000003D1 7705 ja L15 - 499 000003D3 E959000000 jmp L14 - 500 L15: - 501 000003D8 8B5508 mov edx, DWORD [ebp+8] - 502 000003DB 89D0 mov eax, edx - 503 000003DD BA00000000 mov edx, 0 - 504 000003E2 F775FC div DWORD [ebp-4] - 505 000003E5 8945F4 mov DWORD [ebp-12], eax - 506 000003E8 8A45F4 mov al, BYTE [ebp-12] - 507 000003EB 8845FB mov BYTE [ebp-5], al - 508 000003EE B800000000 mov eax, 0 - 509 000003F3 8A45FB mov al, BYTE [ebp-5] - 510 000003F6 0FAF45FC imul eax, DWORD [ebp-4] - 511 000003FA 294508 sub DWORD [ebp+8], eax - 512 000003FD 8B55FC mov edx, DWORD [ebp-4] - 513 00000400 B8CDCCCCCC mov eax, -858993459 - 514 00000405 F7E2 mul edx - 515 00000407 89D0 mov eax, edx - 516 00000409 C1E803 shr eax, 3 - 517 0000040C 8945FC mov DWORD [ebp-4], eax - 518 0000040F 8D45FB lea eax, [ebp-5] - 519 00000412 800030 add BYTE [eax], 48 - 520 00000415 81EC0C000000 sub esp, 12 - 521 0000041B B800000000 mov eax, 0 - 522 00000420 8A45FB mov al, BYTE [ebp-5] - 523 00000423 50 push eax - 524 00000424 E81AFCFFFF call _putc - 525 00000429 81C410000000 add esp, 16 - 526 0000042F EB99 jmp L13 - 527 L14: - 528 00000431 81EC0C000000 sub esp, 12 - 529 00000437 8A4508 mov al, BYTE [ebp+8] - 530 0000043A 0530000000 add eax, 48 - 531 0000043F 25FF000000 and eax, 255 - 532 00000444 50 push eax - 533 00000445 E8F9FBFFFF call _putc - 534 0000044A 81C410000000 add esp, 16 - 535 00000450 C9 leave - 536 00000451 C3 ret - 537 - 538 - 539 - 540 diff --git a/lst/LDout.doc b/lst/LDout.doc deleted file mode 100644 index c282f75..0000000 --- a/lst/LDout.doc +++ /dev/null @@ -1,144 +0,0 @@ -Archive member included because of file (symbol) - -.\lib\hlibc.a(io_a.o) kernel.o (_putc) - -Allocating common symbols -Common symbol size file - -_video_mode 0x100 kernel.o -_vid_ptr16 0x10 kernel.o -_kbdBuffer 0x100 kernel.o -_vid_ptr32 0x10 kernel.o -_mouse_inbuffer 0x10 kernel.o -_vid_ptr24 0x10 kernel.o - -Memory Configuration - -Name Origin Length Attributes -*default* 0x00000000 0xffffffff - -Linker script and memory map - - -.text 0x00100000 0x3000 - 0x00100000 code = . - 0x00100000 _code = . - 0x00100000 __code = . - *(.text) - .text 0x00100000 0x2d0 ks.o - 0x00100000 start - .text 0x001002d0 0x24e0 kernel.o - 0x00100b88 _kbdGetKey - 0x001017f4 _pic1_mask - 0x001016b2 _free - 0x0010114a _mm_new_pageblock_page - 0x00101024 _mm_palloc - 0x001011c6 _mm_pfree - 0x00101236 _mm_lastpageblockentry - 0x00101d18 _video_rectf - 0x00100f8e _mm_init_pageblockpage - 0x001018a4 _kernel_size - 0x001002d0 _mouse_init - 0x00101fbc _k_init - 0x001004b0 _SCAN2ASCII - 0x00101862 _eoi - 0x00100c1e _kbd_resetLEDs - 0x00101e6e _video_psetp - 0x00101818 _pic2_mask - 0x001018b4 _video_init - 0x001016fc _enable_ints - 0x00101448 _vmm_init - 0x00101840 _restart - 0x00101106 _mm_freeentries - 0x00100c76 _mm_init - 0x00100b0c _switchCase - 0x001005cc _isr_keyboard - 0x001019da _video_horiz - 0x001012a8 _mm_freemem - 0x001016b8 _outportb - 0x00100366 _isr_mouse - 0x0010187a _eoi2 - 0x001016ce _outportw - 0x00101bd4 _video_rect - 0x001016ac _malloc - 0x00102732 _isr - 0x00100530 _SCAN2ASCIISHIFT - 0x00101ad0 _video_vert - 0x00101708 _remap_pics - 0x00100bda _kbdWaitKey - 0x00101266 _mm_nextpageblockentry - 0x001012f8 _mm_coalesce - 0x001016dc _inportb - 0x0010185a _halt - 0x00101702 _disable_ints - 0x00101e44 _video_pset - .text 0x001027b0 0x20 asmfuncs.o - 0x001027ca _read_cr3 - 0x001027b0 _write_cr0 - 0x001027bf _write_cr3 - 0x001027bb _read_cr0 - .text 0x001027d0 0x454 .\lib\hlibc.a(io_a.o) - 0x00102813 _putc - 0x001029fd _putHex - 0x00102a4c _puts - 0x00102a6b _putDecu - 0x001027d0 _writeCursorPosition - 0x001029b5 _console_scroll - 0x001029d8 _console_cls - 0x00102b33 _putDec - 0x001027f6 _getCursorPosition - 0x001028d2 _printf - 0x00103000 . = ALIGN (0x1000) - *fill* 0x00102c24 0x3dc 00 - -.data 0x00103000 0x1000 - 0x00103000 data = . - 0x00103000 _data = . - 0x00103000 __data = . - *(.data) - .data 0x00103000 0x40 kernel.o - 0x00103004 _mouse_y - 0x00103018 _kbdExt - 0x00103008 _mouse_bytesRead - 0x0010300d _kbdAscii - 0x00103028 _vmm_PDBR - 0x00103000 _mouse_x - 0x00103019 _kbdExt2 - 0x0010301a _ackReason - 0x0010301c _first_pageblock - 0x00103020 _mm_totalmem - 0x0010302c _vmm_first_virtual_address - 0x00103010 _kbdBufferStart - 0x0010300e _kbdScan - 0x00103014 _kbdBufferLen - 0x0010300c _kbdFlags - 0x00103030 _timer - 0x00103024 _mm_highestAddress - 0x00104000 . = ALIGN (0x1000) - *fill* 0x00103040 0xfc0 00 - -.bss 0x00104000 0x240 - 0x00104000 bss = . - 0x00104000 _bss = . - 0x00104000 __bss = . - *(.bss) - 0x00104000 . = ALIGN (0x1000) - COMMON 0x00104000 0x240 kernel.o - 0x0 (size before relaxing) - 0x00104000 _video_mode - 0x00104100 _vid_ptr16 - 0x00104110 _kbdBuffer - 0x00104210 _vid_ptr32 - 0x00104220 _mouse_inbuffer - 0x00104230 _vid_ptr24 - 0x00104240 end = . - 0x00104240 _end = . - 0x00104240 __end = . -LOAD ks.o -LOAD kernel.o -LOAD asmfuncs.o -LOAD .\lib\hlibc.a -OUTPUT(kernel.bin binary) - -.comment 0x00104240 0x10 - .comment 0x00104240 0x10 kernel.o diff --git a/lst/asmfuncs.lst b/lst/asmfuncs.lst deleted file mode 100644 index 283d1b3..0000000 --- a/lst/asmfuncs.lst +++ /dev/null @@ -1,42 +0,0 @@ - 1 ; asmfuncs.asm - 2 ; Josh Holtrop - 3 ; 10/23/03 - 4 - 5 [global _write_cr0] - 6 [global _read_cr0] - 7 [global _write_cr3] - 8 [global _read_cr3] - 9 - 10 ;extern dword write_cr0(dword cr0); - 11 _write_cr0: - 12 00000000 55 push ebp - 13 00000001 89E5 mov ebp, esp - 14 00000003 8B4508 mov eax, [ebp+8] - 15 00000006 0F22C0 mov cr0, eax - 16 00000009 5D pop ebp - 17 0000000A C3 ret - 18 - 19 ;extern dword read_cr0(); - 20 _read_cr0: - 21 0000000B 0F20C0 mov eax, cr0; - 22 0000000E C3 ret - 23 - 24 - 25 ;extern dword write_cr3(dword cr3); - 26 _write_cr3: - 27 0000000F 55 push ebp - 28 00000010 89E5 mov ebp, esp - 29 00000012 8B4508 mov eax, [ebp+8] - 30 00000015 0F22D8 mov cr3, eax - 31 00000018 5D pop ebp - 32 00000019 C3 ret - 33 - 34 ;extern dword read_cr3(); - 35 _read_cr3: - 36 0000001A 0F20D8 mov eax, cr3; - 37 0000001D C3 ret - 38 - 39 - 40 - 41 - 42 diff --git a/lst/kernel.lst b/lst/kernel.lst deleted file mode 100644 index 947b423..0000000 --- a/lst/kernel.lst +++ /dev/null @@ -1,392 +0,0 @@ - 1 - 2 %include "bootdef.inc" - 3 <1> - 4 <1> %define VERSION "0.1.2" ;HOS version - 5 <1> - 6 <1> %define BOOT_FAT_SEG 0x07E0 ;right after boot sector - 7 <1> %define BOOT_ROOT_SEG 0x0900 ;right after FAT - 8 <1> %define BOOT_KERNEL_SEG 0x0AC0 ;right after ROOT_DIR - 9 <1> %define BOOT_STAGE2_SEG 0x0B00 ;right after KERNEL_SEG - 10 <1> %define BOOT_STAGE2_ADD 0xB000 ;address of stage2 to jump to, org at - 11 <1> %define BOOT_KERNEL_ADD 0x100000 ;final pmode kernel destination - physical - 12 <1> %define BOOT_RD_ADD 0x200000 ;2mb for ram disk - 13 <1> - 14 <1> %define BOOT_DATA_SEG 0x9000 ;data gathered by stage2 loader goes here - 15 <1> - 16 <1> %define BOOT_HASRD 0x0000 ;1 - 17 <1> %define BOOT_VESA 0x0002 ;2 - 0 for console, otherwise VESA mode - 18 <1> %define BOOT_VESA_OEM 0x0004 ;258 - null-terminated OEM identification string - 19 <1> %define BOOT_VESA_VBE 0x0106 ;512 - copy of VESA VBEInfoBlock - 20 <1> %define BOOT_VESA_INFO 0x0306 ;256 - copy of VESA ModeInfoBlock for selected mode - 21 <1> %define BOOT_MEMENTRIES 0x040A ;4 - dword = number of memmap entries - 22 <1> %define BOOT_MEMMAP 0x2000 ;? - memory map information - 23 <1> - 24 <1> - 25 <1> - 26 <1> %define BOOT_DRIVE 0x7C24 ;1 - boot drive - 27 <1> - 28 <1> - 29 - 30 %define GDT 0x140000 - 31 %define IDT 0x150000 - 32 - 33 [global start] - 34 [extern _isr] - 35 [extern _k_init] - 36 - 37 bits 32 - 38 - 39 start: - 40 00000000 FA cli ;if they weren't already off - 41 00000001 BF00001400 mov edi, GDT - 42 00000006 BE[7F000000] mov esi, gdt - 43 0000000B B948000000 mov ecx, gdt_end-gdt - 44 copy_gdt: - 45 00000010 AC lodsb - 46 00000011 AA stosb - 47 00000012 E2FC loop copy_gdt - 48 - 49 00000014 BF00001500 mov edi, IDT ;destination - 50 00000019 BE[CD000000] mov esi, isr_0 ;address of isr0 - 51 0000001E BA0A000000 mov edx, isr_1-isr_0 ;distance between isr labels - 52 00000023 B932000000 mov ecx, 50 ;number of isrlabels - 53 fill_idt: - 54 00000028 89F3 mov ebx, esi - 55 0000002A 6689F0 mov ax, si - 56 0000002D 66AB stosw ;0 offset 15:0 - 57 0000002F 66B80800 mov ax, KERNEL_CODE - 58 00000033 66AB stosw ;2 selector 15:0 - 59 00000035 66B8008E mov ax, 0x8E00 - 60 00000039 66AB stosw ;4 [P][DPL][0][TYPE][0][0][0][0][0][0][0][0] - 61 0000003B C1EE10 shr esi, 16 - 62 0000003E 6689F0 mov ax, si - 63 00000041 66AB stosw ;6 offset 31:16 - 64 00000043 89DE mov esi, ebx - 65 00000045 01D6 add esi, edx - 66 00000047 E2DF loop fill_idt - 67 - 68 00000049 0F0115[79000000] lgdt [gdtr] ;load gdt - 69 00000050 EA[57000000]0800 jmp KERNEL_CODE:newgdtcontinue - 70 newgdtcontinue: - 71 00000057 66B81000 mov ax, KERNEL_DATA - 72 0000005B 8EC0 mov es, ax - 73 0000005D 8ED8 mov ds, ax - 74 0000005F 8EE8 mov gs, ax - 75 00000061 8EE0 mov fs, ax - 76 00000063 8ED0 mov ss, ax - 77 00000065 BCFCFF1F00 mov esp, 0x1ffffc ;stack just under 2mb, moves downward - 78 0000006A 0F011D[C7000000] lidt [idtr] ;load idt - 79 - 80 00000071 E8(00000000) call _k_init - 81 00000076 F4 hlt ;halt processor when k_init is done - 82 00000077 EBFE jmp $ ;shouldn't get here... - 83 - 84 %include "gdt.inc" - 85 <1> - 86 <1> - 87 <1> gdtr: - 88 00000079 4700 <1> dw gdt_end-gdt-1 - 89 0000007B 00001400 <1> dd GDT - 90 <1> gdt: - 91 0000007F 00000000 <1> dd 0 - 92 00000083 00000000 <1> dd 0 - 93 <1> KERNEL_CODE equ $-gdt - 94 00000087 FFFF <1> dw 0xffff ;limit 15:0 - 95 00000089 0000 <1> dw 0x0000 ;base 15:0 - 96 0000008B 00 <1> db 0x00 ;base 23:16 - 97 0000008C 9A <1> db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 98 0000008D CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16 - 99 0000008E 00 <1> db 0x00 ;base 31:24 - 100 <1> KERNEL_DATA equ $-gdt - 101 0000008F FFFF <1> dw 0xffff ;limit 15:0 - 102 00000091 0000 <1> dw 0x0000 ;base 15:0 - 103 00000093 00 <1> db 0x00 ;base 23:16 - 104 00000094 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 105 00000095 CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16 - 106 00000096 00 <1> db 0x00 ;base 31:24 - 107 <1> VESA_CODE equ $-gdt - 108 00000097 FFFF <1> dw 0xffff ;limit 15:0 - 109 00000099 0000 <1> dw 0x0000 ;base 15:0 - 110 0000009B 00 <1> db 0x00 ;base 23:16 - 111 0000009C 9A <1> db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 112 0000009D 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16 - 113 0000009E 00 <1> db 0x00 ;base 31:24 - 114 <1> VESA_DATA equ $-gdt - 115 0000009F FFFF <1> dw 0xffff ;limit 15:0 - 116 000000A1 0000 <1> dw 0x0000 ;base 15:0 - 117 000000A3 00 <1> db 0x00 ;base 23:16 - 118 000000A4 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 119 000000A5 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16 - 120 000000A6 00 <1> db 0x00 ;base 31:24 - 121 <1> VIDEO_TEXT equ $-gdt - 122 000000A7 FF7F <1> dw 0x7FFF ;limit 15:0 - 123 000000A9 0080 <1> dw 0x8000 ;base 15:0 - 124 000000AB 0B <1> db 0x0B ;base 23:16 - 125 000000AC 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 126 000000AD 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16 - 127 000000AE 00 <1> db 0x00 ;base 31:24 - 128 <1> VIDEO_GRAPHICS equ $-gdt - 129 000000AF FFFF <1> dw 0xFFFF ;limit 15:0 - 130 000000B1 0000 <1> dw 0x0000 ;base 15:0 - 131 000000B3 0A <1> db 0x0A ;base 23:16 - 132 000000B4 92 <1> db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 133 000000B5 40 <1> db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16 - 134 000000B6 00 <1> db 0x00 ;base 31:24 - 135 <1> USER_CODE equ $-gdt - 136 000000B7 FFFF <1> dw 0xffff ;limit 15:0 - 137 000000B9 0000 <1> dw 0x0000 ;base 15:0 - 138 000000BB 00 <1> db 0x00 ;base 23:16 - 139 000000BC FA <1> db 0xFA ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 140 000000BD CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16 - 141 000000BE 00 <1> db 0x00 ;base 31:24 - 142 <1> USER_DATA equ $-gdt - 143 000000BF FFFF <1> dw 0xffff ;limit 15:0 - 144 000000C1 0000 <1> dw 0x0000 ;base 15:0 - 145 000000C3 00 <1> db 0x00 ;base 23:16 - 146 000000C4 F2 <1> db 0xF2 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A]) - 147 000000C5 CF <1> db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16 - 148 000000C6 00 <1> db 0x00 ;base 31:24 - 149 <1> gdt_end: - 150 <1> - 151 <1> - 152 <1> - 153 %include "idt.inc" - 154 <1> - 155 <1> idtr: - 156 000000C7 8F01 <1> dw 50*8-1 ;size of idt - 157 000000C9 00001500 <1> dd IDT ;address of idt - 158 <1> - 159 <1> - 160 <1> %macro isr_label 1 - 161 <1> isr_%1: - 162 <1> mov eax, %1 - 163 <1> jmp isr_main - 164 <1> %endmacro - 165 <1> - 166 <1> isr_label 0 - 167 <2> isr_%1: - 168 000000CD B800000000 <2> mov eax, %1 - 169 000000D2 E9EA010000 <2> jmp isr_main - 170 <1> isr_label 1 - 171 <2> isr_%1: - 172 000000D7 B801000000 <2> mov eax, %1 - 173 000000DC E9E0010000 <2> jmp isr_main - 174 <1> isr_label 2 - 175 <2> isr_%1: - 176 000000E1 B802000000 <2> mov eax, %1 - 177 000000E6 E9D6010000 <2> jmp isr_main - 178 <1> isr_label 3 - 179 <2> isr_%1: - 180 000000EB B803000000 <2> mov eax, %1 - 181 000000F0 E9CC010000 <2> jmp isr_main - 182 <1> isr_label 4 - 183 <2> isr_%1: - 184 000000F5 B804000000 <2> mov eax, %1 - 185 000000FA E9C2010000 <2> jmp isr_main - 186 <1> isr_label 5 - 187 <2> isr_%1: - 188 000000FF B805000000 <2> mov eax, %1 - 189 00000104 E9B8010000 <2> jmp isr_main - 190 <1> isr_label 6 - 191 <2> isr_%1: - 192 00000109 B806000000 <2> mov eax, %1 - 193 0000010E E9AE010000 <2> jmp isr_main - 194 <1> isr_label 7 - 195 <2> isr_%1: - 196 00000113 B807000000 <2> mov eax, %1 - 197 00000118 E9A4010000 <2> jmp isr_main - 198 <1> isr_label 8 - 199 <2> isr_%1: - 200 0000011D B808000000 <2> mov eax, %1 - 201 00000122 E99A010000 <2> jmp isr_main - 202 <1> isr_label 9 - 203 <2> isr_%1: - 204 00000127 B809000000 <2> mov eax, %1 - 205 0000012C E990010000 <2> jmp isr_main - 206 <1> isr_label 10 - 207 <2> isr_%1: - 208 00000131 B80A000000 <2> mov eax, %1 - 209 00000136 E986010000 <2> jmp isr_main - 210 <1> isr_label 11 - 211 <2> isr_%1: - 212 0000013B B80B000000 <2> mov eax, %1 - 213 00000140 E97C010000 <2> jmp isr_main - 214 <1> isr_label 12 - 215 <2> isr_%1: - 216 00000145 B80C000000 <2> mov eax, %1 - 217 0000014A E972010000 <2> jmp isr_main - 218 <1> isr_label 13 - 219 <2> isr_%1: - 220 0000014F B80D000000 <2> mov eax, %1 - 221 00000154 E968010000 <2> jmp isr_main - 222 <1> isr_label 14 - 223 <2> isr_%1: - 224 00000159 B80E000000 <2> mov eax, %1 - 225 0000015E E95E010000 <2> jmp isr_main - 226 <1> isr_label 15 - 227 <2> isr_%1: - 228 00000163 B80F000000 <2> mov eax, %1 - 229 00000168 E954010000 <2> jmp isr_main - 230 <1> isr_label 16 - 231 <2> isr_%1: - 232 0000016D B810000000 <2> mov eax, %1 - 233 00000172 E94A010000 <2> jmp isr_main - 234 <1> isr_label 17 - 235 <2> isr_%1: - 236 00000177 B811000000 <2> mov eax, %1 - 237 0000017C E940010000 <2> jmp isr_main - 238 <1> isr_label 18 - 239 <2> isr_%1: - 240 00000181 B812000000 <2> mov eax, %1 - 241 00000186 E936010000 <2> jmp isr_main - 242 <1> isr_label 19 - 243 <2> isr_%1: - 244 0000018B B813000000 <2> mov eax, %1 - 245 00000190 E92C010000 <2> jmp isr_main - 246 <1> isr_label 20 - 247 <2> isr_%1: - 248 00000195 B814000000 <2> mov eax, %1 - 249 0000019A E922010000 <2> jmp isr_main - 250 <1> isr_label 21 - 251 <2> isr_%1: - 252 0000019F B815000000 <2> mov eax, %1 - 253 000001A4 E918010000 <2> jmp isr_main - 254 <1> isr_label 22 - 255 <2> isr_%1: - 256 000001A9 B816000000 <2> mov eax, %1 - 257 000001AE E90E010000 <2> jmp isr_main - 258 <1> isr_label 23 - 259 <2> isr_%1: - 260 000001B3 B817000000 <2> mov eax, %1 - 261 000001B8 E904010000 <2> jmp isr_main - 262 <1> isr_label 24 - 263 <2> isr_%1: - 264 000001BD B818000000 <2> mov eax, %1 - 265 000001C2 E9FA000000 <2> jmp isr_main - 266 <1> isr_label 25 - 267 <2> isr_%1: - 268 000001C7 B819000000 <2> mov eax, %1 - 269 000001CC E9F0000000 <2> jmp isr_main - 270 <1> isr_label 26 - 271 <2> isr_%1: - 272 000001D1 B81A000000 <2> mov eax, %1 - 273 000001D6 E9E6000000 <2> jmp isr_main - 274 <1> isr_label 27 - 275 <2> isr_%1: - 276 000001DB B81B000000 <2> mov eax, %1 - 277 000001E0 E9DC000000 <2> jmp isr_main - 278 <1> isr_label 28 - 279 <2> isr_%1: - 280 000001E5 B81C000000 <2> mov eax, %1 - 281 000001EA E9D2000000 <2> jmp isr_main - 282 <1> isr_label 29 - 283 <2> isr_%1: - 284 000001EF B81D000000 <2> mov eax, %1 - 285 000001F4 E9C8000000 <2> jmp isr_main - 286 <1> isr_label 30 - 287 <2> isr_%1: - 288 000001F9 B81E000000 <2> mov eax, %1 - 289 000001FE E9BE000000 <2> jmp isr_main - 290 <1> isr_label 31 - 291 <2> isr_%1: - 292 00000203 B81F000000 <2> mov eax, %1 - 293 00000208 E9B4000000 <2> jmp isr_main - 294 <1> isr_label 32 - 295 <2> isr_%1: - 296 0000020D B820000000 <2> mov eax, %1 - 297 00000212 E9AA000000 <2> jmp isr_main - 298 <1> isr_label 33 - 299 <2> isr_%1: - 300 00000217 B821000000 <2> mov eax, %1 - 301 0000021C E9A0000000 <2> jmp isr_main - 302 <1> isr_label 34 - 303 <2> isr_%1: - 304 00000221 B822000000 <2> mov eax, %1 - 305 00000226 E996000000 <2> jmp isr_main - 306 <1> isr_label 35 - 307 <2> isr_%1: - 308 0000022B B823000000 <2> mov eax, %1 - 309 00000230 E98C000000 <2> jmp isr_main - 310 <1> isr_label 36 - 311 <2> isr_%1: - 312 00000235 B824000000 <2> mov eax, %1 - 313 0000023A E982000000 <2> jmp isr_main - 314 <1> isr_label 37 - 315 <2> isr_%1: - 316 0000023F B825000000 <2> mov eax, %1 - 317 00000244 E978000000 <2> jmp isr_main - 318 <1> isr_label 38 - 319 <2> isr_%1: - 320 00000249 B826000000 <2> mov eax, %1 - 321 0000024E E96E000000 <2> jmp isr_main - 322 <1> isr_label 39 - 323 <2> isr_%1: - 324 00000253 B827000000 <2> mov eax, %1 - 325 00000258 E964000000 <2> jmp isr_main - 326 <1> isr_label 40 - 327 <2> isr_%1: - 328 0000025D B828000000 <2> mov eax, %1 - 329 00000262 E95A000000 <2> jmp isr_main - 330 <1> isr_label 41 - 331 <2> isr_%1: - 332 00000267 B829000000 <2> mov eax, %1 - 333 0000026C E950000000 <2> jmp isr_main - 334 <1> isr_label 42 - 335 <2> isr_%1: - 336 00000271 B82A000000 <2> mov eax, %1 - 337 00000276 E946000000 <2> jmp isr_main - 338 <1> isr_label 43 - 339 <2> isr_%1: - 340 0000027B B82B000000 <2> mov eax, %1 - 341 00000280 E93C000000 <2> jmp isr_main - 342 <1> isr_label 44 - 343 <2> isr_%1: - 344 00000285 B82C000000 <2> mov eax, %1 - 345 0000028A E932000000 <2> jmp isr_main - 346 <1> isr_label 45 - 347 <2> isr_%1: - 348 0000028F B82D000000 <2> mov eax, %1 - 349 00000294 E928000000 <2> jmp isr_main - 350 <1> isr_label 46 - 351 <2> isr_%1: - 352 00000299 B82E000000 <2> mov eax, %1 - 353 0000029E E91E000000 <2> jmp isr_main - 354 <1> isr_label 47 - 355 <2> isr_%1: - 356 000002A3 B82F000000 <2> mov eax, %1 - 357 000002A8 E914000000 <2> jmp isr_main - 358 <1> isr_label 48 - 359 <2> isr_%1: - 360 000002AD B830000000 <2> mov eax, %1 - 361 000002B2 E90A000000 <2> jmp isr_main - 362 <1> isr_label 49 - 363 <2> isr_%1: - 364 000002B7 B831000000 <2> mov eax, %1 - 365 000002BC E900000000 <2> jmp isr_main - 366 <1> - 367 <1> isr_main: - 368 000002C1 60 <1> pusha - 369 000002C2 1E <1> push ds - 370 000002C3 06 <1> push es - 371 <1> - 372 000002C4 50 <1> push eax - 373 <1> - 374 000002C5 E8(00000000) <1> call _isr - 375 <1> - 376 000002CA 58 <1> pop eax - 377 <1> - 378 000002CB 07 <1> pop es - 379 000002CC 1F <1> pop ds - 380 000002CD 61 <1> popa - 381 <1> - 382 000002CE CF <1> iret - 383 <1> - 384 <1> - 385 <1> - 386 <1> - 387 <1> - 388 <1> - 389 <1> - 390 - 391 - 392 diff --git a/lst/stage1.lst b/lst/stage1.lst deleted file mode 100644 index dbd2ad2..0000000 --- a/lst/stage1.lst +++ /dev/null @@ -1,256 +0,0 @@ - 1 - 2 %include "bootdef.inc" - 3 <1> - 4 <1> %define VERSION "0.1.2" ;HOS version - 5 <1> - 6 <1> %define BOOT_FAT_SEG 0x07E0 ;right after boot sector - 7 <1> %define BOOT_ROOT_SEG 0x0900 ;right after FAT - 8 <1> %define BOOT_KERNEL_SEG 0x0AC0 ;right after ROOT_DIR - 9 <1> %define BOOT_STAGE2_SEG 0x0B00 ;right after KERNEL_SEG - 10 <1> %define BOOT_STAGE2_ADD 0xB000 ;address of stage2 to jump to, org at - 11 <1> %define BOOT_KERNEL_ADD 0x100000 ;final pmode kernel destination - physical - 12 <1> %define BOOT_RD_ADD 0x200000 ;2mb for ram disk - 13 <1> - 14 <1> %define BOOT_DATA_SEG 0x9000 ;data gathered by stage2 loader goes here - 15 <1> - 16 <1> %define BOOT_HASRD 0x0000 ;1 - 17 <1> %define BOOT_VESA 0x0002 ;2 - 0 for console, otherwise VESA mode - 18 <1> %define BOOT_VESA_OEM 0x0004 ;258 - null-terminated OEM identification string - 19 <1> %define BOOT_VESA_VBE 0x0106 ;512 - copy of VESA VBEInfoBlock - 20 <1> %define BOOT_VESA_INFO 0x0306 ;256 - copy of VESA ModeInfoBlock for selected mode - 21 <1> %define BOOT_MEMENTRIES 0x040A ;4 - dword = number of memmap entries - 22 <1> %define BOOT_MEMMAP 0x2000 ;? - memory map information - 23 <1> - 24 <1> - 25 <1> - 26 <1> %define BOOT_DRIVE 0x7C24 ;1 - boot drive - 27 <1> - 28 <1> - 29 - 30 [bits 16] - 31 - 32 org 0x7c00 - 33 - 34 00000000 EB3C jmp short start - 35 - 36 ; -------------------------------------------------- - 37 ; data portion of the "DOS BOOT RECORD" - 38 ; ---------------------------------------------------------------------- - 39 00000002 90 brINT13Flag DB 90H ; 0002h - 0EH for INT13 AH=42 READ - 40 00000003 4D53444F53352E30 brOEM DB 'MSDOS5.0' ; 0003h - OEM ID - Windows 95B - 41 0000000B 0002 brBPS DW 512 ; 000Bh - Bytes per sector - 42 0000000D 01 brSPC DB 1 ; 000Dh - Sector per cluster - 43 0000000E 0100 brSc_b4_fat DW 1 ; 000Eh - Reserved sectors - 44 00000010 02 brFATs DB 2 ; 0010h - FAT copies - 45 00000011 E000 brRootEntries DW 0E0H ; 0011h - Root directory entries - 46 00000013 400B brSectorCount DW 2880 ; 0013h - Sectors in volume, < 32MB - 47 00000015 F0 brMedia DB 240 ; 0015h - Media descriptor - 48 00000016 0900 brSPF DW 9 ; 0016h - Sectors per FAT - 49 00000018 1200 brSc_p_trk DW 18 ; 0018h - Sectors per head/track - 50 0000001A 0200 brHPC DW 2 ; 001Ah - Heads per cylinder - 51 0000001C 00000000 brSc_b4_prt DD 0 ; 001Ch - Hidden sectors - 52 00000020 00000000 brSectors DD 0 ; 0020h - Total number of sectors - 53 00000024 00 brDrive DB 0 ; 0024h - Physical drive no. - 54 00000025 00 DB 0 ; 0025h - Reserved (FAT32) - 55 00000026 29 DB 29H ; 0026h - Extended boot record sig (FAT32) - 56 00000027 EA184440 brSerialNum DD 404418EAH ; 0027h - Volume serial number - 57 0000002B 484F5320302E312E31- brLabel DB 'HOS 0.1.1 ' ; 002Bh - Volume label - 58 00000034 2020 - 59 00000036 4641543132202020 brFSID DB 'FAT12 ' ; 0036h - File System ID - 60 ;------------------------------------------------------------------------ - 61 - 62 start: - 63 0000003E EA[4300]0000 jmp 0:jmphere ;ensure that cs=0 and ip=0x7c... - 64 jmphere: - 65 ;dl=drive number, save it! - 66 00000043 31C0 xor ax, ax - 67 00000045 8ED8 mov ds, ax - 68 00000047 8816[2400] mov [brDrive], dl - 69 0000004B FA cli - 70 0000004C 8ED0 mov ss, ax - 71 0000004E BCFE7B mov sp, 0x7Bfe ;right under boot sector - 72 00000051 FB sti - 73 - 74 00000052 B800B8 mov ax, 0xb800 - 75 00000055 8ED8 mov ds, ax - 76 00000057 8EC0 mov es, ax - 77 - 78 00000059 31FF xor di, di - 79 0000005B B80007 mov ax, 0x0700 - 80 0000005E B9D007 mov cx, 2000 - 81 cls: - 82 00000061 AB stosw - 83 00000062 E2FD loop cls - 84 - 85 enable_a20: - 86 00000064 E464 in al, 0x64 - 87 00000066 A802 test al, 2 - 88 00000068 75FA jnz enable_a20 - 89 0000006A B0D1 mov al, 0xD1 - 90 0000006C E664 out 0x64, al - 91 0000006E E464 ea20_2: in al, 0x64 - 92 00000070 83E002 and ax, byte 2 - 93 00000073 75F9 jnz ea20_2 - 94 00000075 B0DF mov al, 0xDF - 95 00000077 E660 out 0x60, al - 96 - 97 unreal: - 98 00000079 31C0 xor ax, ax - 99 0000007B 8EC0 mov es, ax - 100 0000007D 8ED8 mov ds, ax - 101 - 102 0000007F 0F0116[5E01] lgdt [gdtr] ;load gdt - 103 00000084 FA cli - 104 00000085 06 push es - 105 00000086 1E push ds ;save segment values - 106 00000087 0F20C3 mov ebx, cr0 - 107 0000008A FEC3 inc bl - 108 0000008C 0F22C3 mov cr0, ebx ;pmode! - 109 0000008F B80800 mov ax, KERNEL_DATA - 110 00000092 8EC0 mov es, ax - 111 00000094 8ED8 mov ds, ax ;load segment limits - 112 00000096 FECB dec bl - 113 00000098 0F22C3 mov cr0, ebx ;back to real mode! - 114 0000009B 1F pop ds - 115 0000009C 07 pop es ;segments back, with 4gb limits! - 116 0000009D FB sti - 117 - 118 ;now lets read in the FAT and root directory so we can search for the kernel file... - 119 0000009E B80902 mov ax, 0x0209 ;FAT1 - 120 000000A1 B90200 mov cx, 0x0002 - 121 000000A4 30F6 xor dh, dh - 122 000000A6 8A16[2400] mov dl, [brDrive] - 123 000000AA BBE007 mov bx, BOOT_FAT_SEG - 124 000000AD 8EC3 mov es, bx - 125 000000AF 31DB xor bx, bx - 126 000000B1 CD13 int 0x13 - 127 - 128 000000B3 B80E02 mov ax, 0x020E ;root directory - 129 000000B6 B90200 mov cx, 0x0002 ;cyl/sect - 130 000000B9 B601 mov dh, 0x01 ;head - 131 000000BB 8A16[2400] mov dl, [brDrive] ;drive - 132 000000BF BB0009 mov bx, BOOT_ROOT_SEG - 133 000000C2 8EC3 mov es, bx - 134 000000C4 31DB xor bx, bx - 135 000000C6 CD13 int 0x13 - 136 - 137 ;k now read root directory - 138 000000C8 BB0009 mov bx, BOOT_ROOT_SEG - 139 000000CB 8EDB mov ds, bx - 140 000000CD 31F6 xor si, si ;k now ds:si points to beginning of root directory - 141 000000CF 8EC6 mov es, si - 142 000000D1 B9E000 mov cx, 224 ;max root entries - 143 loop_compare: - 144 000000D4 BF[7401] mov di, stage2 - 145 000000D7 51 push cx - 146 000000D8 56 push si ;save pointer to root dir entry - 147 000000D9 B90B00 mov cx, 11 - 148 loop_name: - 149 000000DC A6 cmpsb - 150 000000DD E1FD loopz loop_name - 151 000000DF 7505 jnz goon ;cx didn't get to zero, bad file - 152 000000E1 5E pop si - 153 000000E2 59 pop cx - 154 000000E3 E90A00 jmp found_file ;good file, ds:si points to start of root directory entry - 155 goon: - 156 000000E6 5E pop si - 157 000000E7 59 pop cx - 158 000000E8 81C62000 add si, 32 - 159 000000EC E2E6 loop loop_compare - 160 - 161 error: - 162 000000EE EBFE jmp $ ;halt! no kernel file found! - 163 - 164 found_file: ;ds:si points to root dir entry - 165 000000F0 31C0 xor ax, ax - 166 000000F2 8EE8 mov gs, ax - 167 000000F4 B8000B mov ax, BOOT_STAGE2_SEG - 168 000000F7 8EC0 mov es, ax - 169 - 170 000000F9 3E8B441A mov ax, [ds:si+26] - 171 000000FD BBE007 mov bx, BOOT_FAT_SEG - 172 00000100 8EDB mov ds, bx ;ds points to beginning of FAT - 173 00000102 31FF xor di, di - 174 - 175 readstage2_loop: - 176 00000104 3DF70F cmp ax, 0xff7 - 177 00000107 7F37 jg readstage2_done - 178 00000109 47 inc di - 179 0000010A 50 push ax - 180 0000010B E83700 call getCHSfromCluster - 181 0000010E B80102 mov ax, 0x0201 - 182 00000111 658A16247C mov dl, [gs:BOOT_DRIVE] - 183 00000116 31DB xor bx, bx - 184 00000118 CD13 int 0x13 - 185 0000011A 8CC3 mov bx, es - 186 0000011C 81C32000 add bx, 0x0020 - 187 00000120 8EC3 mov es, bx - 188 00000122 58 pop ax ;current logical cluster # - 189 - 190 00000123 89C1 mov cx, ax ;cx=logical cluster - 191 00000125 BA0300 mov dx, 3 - 192 00000128 F7E2 mul dx - 193 0000012A D1E8 shr ax, 1 ;ax=logical cluster * 3 / 2 - 194 0000012C 89C6 mov si, ax - 195 0000012E F6C101 test cl, 1 ;is bit0 set? - 196 00000131 7507 jnz odd_cluster - 197 even_cluster: - 198 00000133 AD lodsw - 199 00000134 25FF0F and ax, 0x0fff - 200 00000137 E90400 jmp got_cluster - 201 odd_cluster: - 202 0000013A AD lodsw - 203 0000013B C1E804 shr ax, 4 - 204 got_cluster: - 205 0000013E EBC4 jmp readstage2_loop - 206 - 207 readstage2_done: - 208 - 209 00000140 EA00B00000 jmp 0:BOOT_STAGE2_ADD - 210 - 211 ;------------------------------------------------------ - 212 getCHSfromCluster: - 213 ;input: ax=lba of sector on floppy (0-2879) - 214 00000145 051F00 add ax, 31 ;convert logical cluster# to lba# - 215 00000148 31D2 xor dx, dx ;lba->chs - 216 0000014A BB1200 mov bx, 18 - 217 0000014D F7F3 div bx - 218 0000014F 42 inc dx - 219 00000150 88D1 mov cl, dl ;sector# (1-18) - 220 00000152 31D2 xor dx, dx - 221 00000154 BB0200 mov bx, 2 - 222 00000157 F7F3 div bx - 223 00000159 88C5 mov ch, al ;cylinder# (0-79) - 224 0000015B 88D6 mov dh, dl ;head# (0-1) - 225 0000015D C3 ret - 226 - 227 - 228 ;------------------------------------------------------- - 229 gdtr: - 230 0000015E 0F00 dw gdt_end-gdt-1 - 231 00000160 [64010000] dd gdt - 232 gdt: - 233 00000164 00000000 dd 0 - 234 00000168 00000000 dd 0 - 235 - 236 KERNEL_DATA equ $-gdt - 237 0000016C FF db 0xff ;segment 16 = 4gb data - 238 0000016D FF db 0xff - 239 0000016E 00 db 0x00 - 240 0000016F 00 db 0x00 - 241 00000170 00 db 0x00 - 242 00000171 92 db 0x92 - 243 00000172 CF db 0xcf ;cf - 244 00000173 00 db 0x00 - 245 - 246 gdt_end: - 247 - 248 - 249 - 250 00000174 535441474532202042- stage2: db "STAGE2 BIN" - 251 0000017D 494E - 252 - 253 0000017F 00 times 510-($-$$) db 0 - 254 - 255 000001FE 55AA db 0x55, 0xaa - 256 diff --git a/lst/stage2.lst b/lst/stage2.lst deleted file mode 100644 index f2d7d00..0000000 --- a/lst/stage2.lst +++ /dev/null @@ -1,988 +0,0 @@ - 1 - 2 %include "bootdef.inc" - 3 <1> - 4 <1> %define VERSION "0.1.2" ;HOS version - 5 <1> - 6 <1> %define BOOT_FAT_SEG 0x07E0 ;right after boot sector - 7 <1> %define BOOT_ROOT_SEG 0x0900 ;right after FAT - 8 <1> %define BOOT_KERNEL_SEG 0x0AC0 ;right after ROOT_DIR - 9 <1> %define BOOT_STAGE2_SEG 0x0B00 ;right after KERNEL_SEG - 10 <1> %define BOOT_STAGE2_ADD 0xB000 ;address of stage2 to jump to, org at - 11 <1> %define BOOT_KERNEL_ADD 0x100000 ;final pmode kernel destination - physical - 12 <1> %define BOOT_RD_ADD 0x200000 ;2mb for ram disk - 13 <1> - 14 <1> %define BOOT_DATA_SEG 0x9000 ;data gathered by stage2 loader goes here - 15 <1> - 16 <1> %define BOOT_HASRD 0x0000 ;1 - 17 <1> %define BOOT_VESA 0x0002 ;2 - 0 for console, otherwise VESA mode - 18 <1> %define BOOT_VESA_OEM 0x0004 ;258 - null-terminated OEM identification string - 19 <1> %define BOOT_VESA_VBE 0x0106 ;512 - copy of VESA VBEInfoBlock - 20 <1> %define BOOT_VESA_INFO 0x0306 ;256 - copy of VESA ModeInfoBlock for selected mode - 21 <1> %define BOOT_MEMENTRIES 0x040A ;4 - dword = number of memmap entries - 22 <1> %define BOOT_MEMMAP 0x2000 ;? - memory map information - 23 <1> - 24 <1> - 25 <1> - 26 <1> %define BOOT_DRIVE 0x7C24 ;1 - boot drive - 27 <1> - 28 <1> - 29 - 30 %define VESA_MODEINFO_SEG 0x0120 - 31 %define VESA_MODELIST_SEG 0x0140 - 32 %define GOOD_MODELIST_SEG 0x0160 - 33 - 34 [bits 16] - 35 - 36 org BOOT_STAGE2_ADD - 37 - 38 - 39 ;k now read root directory - 40 00000000 BB0009 mov bx, BOOT_ROOT_SEG - 41 00000003 8EDB mov ds, bx - 42 00000005 31F6 xor si, si ;k now ds:si points to beginning of root directory - 43 00000007 8EC6 mov es, si - 44 00000009 B9E000 mov cx, 224 ;max root entries - 45 loop_compare: - 46 0000000C BF[FD07] mov di, kernel - 47 0000000F 51 push cx - 48 00000010 56 push si ;save pointer to root dir entry - 49 00000011 B90B00 mov cx, 11 - 50 loop_name: - 51 00000014 A6 cmpsb - 52 00000015 E1FD loopz loop_name - 53 00000017 7505 jnz goon ;cx didn't get to zero, bad file - 54 00000019 5E pop si - 55 0000001A 59 pop cx - 56 0000001B E90600 jmp found_file ;good file, ds:si points to start of root directory entry - 57 goon: - 58 0000001E 5E pop si - 59 0000001F 59 pop cx - 60 00000020 E2EA loop loop_compare - 61 - 62 error: - 63 00000022 EBFE jmp $ ;halt! no kernel file found! - 64 - 65 found_file: ;ds:si points to root dir entry of kernel file - 66 00000024 31C0 xor ax, ax - 67 00000026 8EE8 mov gs, ax - 68 00000028 3E8B441A mov ax, [ds:si+26] - 69 0000002C BBE007 mov bx, BOOT_FAT_SEG - 70 0000002F 8EDB mov ds, bx ;ds points to beginning of FAT - 71 00000031 66BF00001000 mov edi, BOOT_KERNEL_ADD - 72 - 73 readkernel_loop: - 74 00000037 3DF70F cmp ax, 0xff7 - 75 0000003A 7F52 jg readkernel_done - 76 0000003C 50 push ax - 77 0000003D E85C07 call getCHSfromCluster - 78 00000040 B80102 mov ax, 0x0201 - 79 00000043 658A16247C mov dl, [gs:BOOT_DRIVE] - 80 00000048 BBC00A mov bx, BOOT_KERNEL_SEG - 81 0000004B 8EC3 mov es, bx - 82 0000004D 31DB xor bx, bx - 83 0000004F CD13 int 0x13 - 84 00000051 B90001 mov cx, 256 - 85 00000054 31C0 xor ax, ax - 86 00000056 8EC0 mov es, ax - 87 00000058 66BE00AC0000 mov esi, BOOT_KERNEL_SEG*16 - 88 copykernel_loop: - 89 0000005E 26678B06 mov ax, [es:esi] - 90 00000062 26678907 mov [es:edi], ax - 91 00000066 6646 inc esi - 92 00000068 6646 inc esi - 93 0000006A 6647 inc edi - 94 0000006C 6647 inc edi - 95 0000006E E2EE loop copykernel_loop - 96 - 97 00000070 58 pop ax ;current logical cluster # - 98 - 99 00000071 89C1 mov cx, ax ;cx=logical cluster - 100 00000073 BA0300 mov dx, 3 - 101 00000076 F7E2 mul dx - 102 00000078 D1E8 shr ax, 1 ;ax=logical cluster * 3 / 2 - 103 0000007A 89C6 mov si, ax - 104 0000007C F6C101 test cl, 1 ;is bit0 set? - 105 0000007F 7507 jnz odd_cluster - 106 even_cluster: - 107 00000081 AD lodsw - 108 00000082 25FF0F and ax, 0x0fff - 109 00000085 E90400 jmp got_cluster - 110 odd_cluster: - 111 00000088 AD lodsw - 112 00000089 C1E804 shr ax, 4 - 113 got_cluster: - 114 0000008C EBA9 jmp readkernel_loop - 115 - 116 ;------------------------------------------------------ - 117 readkernel_done: ;-------------put more real mode init stuff here! - 118 ;----ask to load RD from floppy - 119 0000008E B800B8 mov ax, 0xb800 - 120 00000091 8EC0 mov es, ax - 121 00000093 31C0 xor ax, ax - 122 00000095 8ED8 mov ds, ax - 123 00000097 31FF xor di, di - 124 00000099 B9D007 mov cx, 2000 - 125 0000009C B80007 mov ax, 0x0700 - 126 cls_loop: - 127 0000009F AB stosw - 128 000000A0 E2FD loop cls_loop - 129 - 130 000000A2 BAD403 mov dx, 0x3d4 ;move cursor off screen... - 131 000000A5 B00E mov al, 0x0e - 132 000000A7 EE out dx, al - 133 000000A8 42 inc dx - 134 000000A9 B0FF mov al, 0xff - 135 000000AB EE out dx, al - 136 000000AC 4A dec dx - 137 000000AD B00F mov al, 0x0f - 138 000000AF EE out dx, al - 139 000000B0 42 inc dx - 140 000000B1 EE out dx, al - 141 - 142 000000B2 31FF xor di, di - 143 000000B4 BE[FB05] mov si, txt_welcome - 144 000000B7 B41F mov ah, 0x1f - 145 000000B9 E83E04 call puts - 146 - 147 000000BC BFA000 mov di, 160 - 148 000000BF BE[4C06] mov si, txt_rd1 - 149 000000C2 B407 mov ah, 7 - 150 000000C4 E83304 call puts - 151 - 152 000000C7 BE[6F06] mov si, txt_rd2 - 153 000000CA BF4001 mov di, 160*2 - 154 000000CD E82A04 call puts - 155 - 156 000000D0 BFE001 mov di, 160*3 - 157 000000D3 BE[9406] mov si, txt_input - 158 000000D6 E82104 call puts - 159 - 160 get_rd: - 161 000000D9 31C0 xor ax, ax - 162 000000DB CD16 int 0x16 - 163 000000DD 3C31 cmp al, '1' - 164 000000DF 7404 jz got_rd - 165 000000E1 3C32 cmp al, '2' - 166 000000E3 75F4 jnz get_rd - 167 got_rd: - 168 000000E5 AA stosb - 169 000000E6 2C31 sub al, '1' - 170 000000E8 1E push ds - 171 000000E9 BB0090 mov bx, BOOT_DATA_SEG ;segment for data to send kernel - 172 000000EC 8EDB mov ds, bx - 173 000000EE 3EA20000 mov [ds:BOOT_HASRD], al - 174 000000F2 1F pop ds ;ds=0 - 175 000000F3 3C00 cmp al, 0 ;dont load rd - 176 000000F5 746F jz no_rd - 177 - 178 000000F7 B95000 mov cx, 80 - 179 000000FA 66BF80820B00 mov edi, 0xb8000+160*4 - 180 filler_loop: - 181 00000100 3E67C707B104 mov word [ds:edi], 0x0400+177 - 182 00000106 6647 inc edi - 183 00000108 6647 inc edi - 184 0000010A E2F4 loop filler_loop - 185 0000010C B95000 mov cx, 80 ;80 cylinders to read - 186 0000010F 31F6 xor si, si - 187 00000111 66BF00002000 mov edi, BOOT_RD_ADD ;ram disk address - 188 read_cylinder: - 189 00000117 51 push cx - 190 00000118 BB0001 mov bx, 0x0100 - 191 0000011B 8EC3 mov es, bx - 192 0000011D 31DB xor bx, bx - 193 0000011F B82402 mov ax, 0x0224 - 194 00000122 89F1 mov cx, si - 195 00000124 88CD mov ch, cl - 196 00000126 B101 mov cl, 1 - 197 00000128 31D2 xor dx, dx - 198 0000012A 658A16247C mov dl, [gs:BOOT_DRIVE] - 199 0000012F CD13 int 0x13 - 200 - 201 00000131 66BB00800B00 mov ebx, 0xb8000 - 202 00000137 01F3 add bx, si - 203 00000139 D0E3 shl bl, 1 - 204 0000013B 3E67C78380020000DB- mov word [ds:ebx+160*4], 0x0200+219 - 205 00000144 02 - 206 - 207 00000145 56 push si - 208 00000146 66BE00100000 mov esi, 0x1000 - 209 0000014C B90024 mov cx, 0x2400 - 210 copydisk_loop: - 211 0000014F 3E678B06 mov ax, [ds:esi] - 212 00000153 6646 inc esi - 213 00000155 6646 inc esi - 214 00000157 3E678907 mov [ds:edi], ax - 215 0000015B 6647 inc edi - 216 0000015D 6647 inc edi - 217 0000015F E2EE loop copydisk_loop - 218 - 219 00000161 5E pop si ;what cylinder# we are on... - 220 00000162 46 inc si - 221 00000163 59 pop cx - 222 00000164 E2B1 loop read_cylinder - 223 - 224 ;------------------------------------------------------ - 225 no_rd: - 226 00000166 B80090 mov ax, BOOT_DATA_SEG - 227 00000169 8EC0 mov es, ax - 228 0000016B BF0020 mov di, BOOT_MEMMAP ;store memmap info in es:di for kernel - 229 0000016E 6631D2 xor edx, edx - 230 00000171 B80001 mov ax, 0x0100 - 231 00000174 8ED8 mov ds, ax - 232 00000176 6631DB xor ebx, ebx - 233 getmemmap_loop: - 234 00000179 06 push es - 235 0000017A 57 push di - 236 0000017B 6652 push edx - 237 0000017D B80001 mov ax, 0x0100 ;get memory map - 238 00000180 8EC0 mov es, ax - 239 00000182 31FF xor di, di - 240 00000184 66B820E80000 mov eax, 0x0000E820 - 241 0000018A 66B914000000 mov ecx, 0x00000014 - 242 ;mov ebx, 0x00000000 - 243 00000190 66BA50414D53 mov edx, 0x534D4150 ;'SMAP' - 244 00000196 CD15 int 0x15 - 245 00000198 7239 jc getmemmap_carry - 246 0000019A 663D50414D53 cmp eax, 0x534D4150 ;eax should be 'SMAP' on return... - 247 000001A0 751A jnz getmemmap_error - 248 000001A2 6681FB00000000 cmp ebx, 0 - 249 000001A9 742A jz getmemmap_done - 250 - 251 000001AB 665A pop edx ;now, copy memmap entry to es:di on the stack - 252 000001AD 5F pop di - 253 000001AE 07 pop es - 254 000001AF 31F6 xor si, si - 255 000001B1 B91400 mov cx, 20 - 256 getmemmap_copymem_loop: - 257 000001B4 AC lodsb - 258 000001B5 AA stosb - 259 000001B6 E2FC loop getmemmap_copymem_loop - 260 000001B8 6642 inc edx - 261 000001BA EBBD jmp getmemmap_loop - 262 - 263 getmemmap_error: - 264 000001BC B800B8 mov ax, 0xb800 - 265 000001BF 8EC0 mov es, ax - 266 000001C1 BF000F mov di, 160*24 - 267 000001C4 31C0 xor ax, ax - 268 000001C6 8ED8 mov ds, ax - 269 000001C8 BE[5D07] mov si, txt_memerror - 270 000001CB B404 mov ah, 0x04 - 271 000001CD E82A03 call puts - 272 000001D0 F4 hlt - 273 000001D1 EBFE jmp $ - 274 - 275 getmemmap_carry: - 276 000001D3 664A dec edx - 277 getmemmap_done: - 278 000001D5 665A pop edx - 279 000001D7 5F pop di - 280 000001D8 07 pop es - 281 - 282 000001D9 31F6 xor si, si - 283 000001DB B91400 mov cx, 20 - 284 getmemmap_done_copymem_loop: - 285 000001DE AC lodsb - 286 000001DF AA stosb - 287 000001E0 E2FC loop getmemmap_done_copymem_loop - 288 000001E2 6642 inc edx - 289 - 290 000001E4 BF0A04 mov di, BOOT_MEMENTRIES - 291 000001E7 26668915 mov [es:di], edx ;save # of memmap entries for kernel - 292 - 293 ;on to vesa info... - 294 000001EB 31C0 xor ax, ax - 295 000001ED 8EE8 mov gs, ax - 296 000001EF 8ED8 mov ds, ax - 297 000001F1 B800B8 mov ax, 0xb800 - 298 000001F4 8EC0 mov es, ax - 299 000001F6 BFA000 mov di, 160 - 300 000001F9 B98007 mov cx, 2000-80 - 301 000001FC B80007 mov ax, 0x0700 - 302 cls_vesa_loop: - 303 000001FF AB stosw - 304 00000200 E2FD loop cls_vesa_loop - 305 00000202 BE[AB06] mov si, txt_vesa - 306 00000205 BFA000 mov di, 160*1 - 307 00000208 B407 mov ah, 7 - 308 0000020A E8ED02 call puts - 309 - 310 0000020D 57 push di - 311 0000020E B80001 mov ax, 0x0100 - 312 00000211 8EC0 mov es, ax - 313 00000213 31FF xor di, di - 314 00000215 2666C70532454256 mov dword [es:di], "2EBV" - 315 0000021D B8004F mov ax, 0x4F00 - 316 - 317 00000220 CD10 int 0x10 - 318 00000222 5F pop di - 319 00000223 3D4F00 cmp ax, 0x004F - 320 00000226 741C jz vesa_good - 321 00000228 BE[E406] mov si, txt_novesa - 322 0000022B B800B8 mov ax, 0xb800 - 323 0000022E 8EC0 mov es, ax - 324 00000230 B407 mov ah, 7 - 325 00000232 E8C502 call puts - 326 00000235 B80090 mov ax, BOOT_DATA_SEG - 327 00000238 8ED8 mov ds, ax - 328 0000023A 3EC70602000000 mov word [ds:BOOT_VESA], 0 - 329 00000241 E9B302 jmp vesa_done - 330 vesa_good: - 331 00000244 B800B8 mov ax, 0xb800 - 332 00000247 8EC0 mov es, ax - 333 00000249 B80001 mov ax, 0x0100 - 334 0000024C 8ED8 mov ds, ax - 335 0000024E 31F6 xor si, si - 336 00000250 8B1E0400 mov bx, [4] - 337 00000254 88F8 mov al, bh - 338 00000256 E85203 call puthex - 339 00000259 B02E mov al, '.' - 340 0000025B AA stosb - 341 0000025C B007 mov al, 7 - 342 0000025E AA stosb - 343 0000025F 88D8 mov al, bl - 344 00000261 E84703 call puthex - 345 00000264 81C70400 add di, 4 - 346 00000268 80FF02 cmp bh, 2 - 347 0000026B 7D1B jge vesa_good2 - 348 0000026D 31C0 xor ax, ax - 349 0000026F 8ED8 mov ds, ax - 350 00000271 BE[1007] mov si, txt_vesaold - 351 00000274 B407 mov ah, 7 - 352 00000276 E88102 call puts - 353 00000279 B80090 mov ax, BOOT_DATA_SEG - 354 0000027C 8ED8 mov ds, ax - 355 0000027E 3EC70602000000 mov word [ds:BOOT_VESA], 0 - 356 00000285 E96F02 jmp vesa_done - 357 vesa_good2: - 358 00000288 668B1E0600 mov ebx, [6] ;something like 0x00000E60 - 359 0000028D 668B160E00 mov edx, [14] - 360 00000292 89DE mov si, bx - 361 00000294 66C1EB10 shr ebx, 16 - 362 00000298 8EDB mov ds, bx ;ds:si points to null-terminated OEM identification string - 363 0000029A B402 mov ah, 2 - 364 0000029C 56 push si - 365 0000029D E85A02 call puts - 366 000002A0 5E pop si - 367 000002A1 B80090 mov ax, BOOT_DATA_SEG - 368 000002A4 8EC0 mov es, ax - 369 000002A6 BF0400 mov di, BOOT_VESA_OEM - 370 vesa_copyoem: - 371 000002A9 AC lodsb - 372 000002AA AA stosb - 373 000002AB 08C0 or al, al - 374 000002AD 75FA jnz vesa_copyoem - 375 000002AF B80001 mov ax, 0x0100 - 376 000002B2 8ED8 mov ds, ax - 377 000002B4 31F6 xor si, si - 378 000002B6 BF0601 mov di, BOOT_VESA_VBE - 379 000002B9 B90002 mov cx, 512 - 380 vesa_copyvbe: - 381 000002BC AC lodsb - 382 000002BD AA stosb - 383 000002BE E2FC loop vesa_copyvbe - 384 - 385 000002C0 89D6 mov si, dx - 386 000002C2 66C1EA10 shr edx, 16 - 387 000002C6 8EDA mov ds, dx ;ds:si points to video mode list - 388 000002C8 B84001 mov ax, VESA_MODELIST_SEG - 389 000002CB 8EC0 mov es, ax - 390 000002CD 31FF xor di, di - 391 vesa_copymodes: - 392 000002CF AD lodsw - 393 000002D0 AB stosw - 394 000002D1 3DFFFF cmp ax, 0xffff - 395 000002D4 75F9 jnz vesa_copymodes - 396 - 397 000002D6 B86001 mov ax, GOOD_MODELIST_SEG - 398 000002D9 8EC0 mov es, ax - 399 000002DB 31FF xor di, di - 400 000002DD B90001 mov cx, 256 - 401 000002E0 B8FFFF mov ax, 0xffff - 402 clear_good_mode_list_loop: - 403 000002E3 AB stosw - 404 000002E4 E2FD loop clear_good_mode_list_loop - 405 - 406 000002E6 B84001 mov ax, VESA_MODELIST_SEG - 407 000002E9 8ED8 mov ds, ax - 408 000002EB 31F6 xor si, si ;ds:si points to video mode list where we can edit it :) - 409 000002ED B86001 mov ax, GOOD_MODELIST_SEG - 410 000002F0 8EC0 mov es, ax - 411 000002F2 31FF xor di, di - 412 000002F4 31D2 xor dx, dx ;dx=what good mode # we are on - 413 vesa_readmodeinfo_loop: - 414 000002F6 AD lodsw - 415 000002F7 3DFFFF cmp ax, 0xffff - 416 000002FA 7414 jz vesa_endofmodes - 417 000002FC 50 push ax ;save mode# - 418 000002FD E85401 call checkmode - 419 00000300 3D0000 cmp ax, 0 - 420 00000303 7403 jz vesa_readmodeinfo_good - 421 00000305 58 pop ax - 422 00000306 EBEE jmp vesa_readmodeinfo_loop - 423 vesa_readmodeinfo_good: - 424 00000308 58 pop ax ;restore mode# - 425 00000309 AB stosw - 426 0000030A E8BA00 call vesa_showmodeinfo - 427 0000030D 42 inc dx - 428 0000030E EBE6 jmp vesa_readmodeinfo_loop - 429 - 430 vesa_endofmodes: ;here we have a list of good modes at GOOD_MODELIST_SEG:0 - 431 00000310 31C0 xor ax, ax - 432 00000312 8ED8 mov ds, ax - 433 00000314 BE[4707] mov si, txt_consolemode - 434 00000317 B800B8 mov ax, 0xb800 - 435 0000031A 8EC0 mov es, ax - 436 0000031C BF4001 mov di, 160*2 - 437 0000031F B407 mov ah, 7 - 438 00000321 E8D601 call puts - 439 00000324 BFE001 mov di, 160*3 - 440 00000327 89D1 mov cx, dx - 441 00000329 B062 mov al, 'b' - 442 vesa_displaylabels: - 443 0000032B AA stosb - 444 0000032C 50 push ax - 445 0000032D B007 mov al, 7 - 446 0000032F AA stosb - 447 00000330 B02E mov al, '.' - 448 00000332 AA stosb - 449 00000333 B007 mov al, 7 - 450 00000335 AA stosb - 451 00000336 58 pop ax - 452 00000337 FEC0 inc al - 453 00000339 81C79C00 add di, 160-4 - 454 0000033D E2EC loop vesa_displaylabels ;done drawing screen of VESA choices, now ask for one - 455 ;valid options are 'a' through (al-1) - 456 0000033F 88C3 mov bl, al - 457 00000341 31C0 xor ax, ax - 458 00000343 8ED8 mov ds, ax - 459 00000345 BF000F mov di, 160*24 - 460 00000348 BE[9406] mov si, txt_input - 461 0000034B B40E mov ah, 14 - 462 0000034D E8AA01 call puts - 463 vesa_getchoice: - 464 00000350 31C0 xor ax, ax - 465 00000352 CD16 int 0x16 - 466 00000354 3C61 cmp al, 'a' - 467 00000356 7CF8 jl vesa_getchoice - 468 00000358 38D8 cmp al, bl - 469 0000035A 7DF4 jge vesa_getchoice - 470 0000035C AA stosb - 471 0000035D 50 push ax - 472 0000035E B00E mov al, 14 - 473 00000360 AA stosb - 474 00000361 58 pop ax - 475 00000362 30E4 xor ah, ah - 476 00000364 2D6100 sub ax, 'a' - 477 00000367 3D0000 cmp ax, 0 - 478 0000036A 744C jz vesa_consolemode_only - 479 0000036C 89C1 mov cx, ax ;cx holds good mode# (1=first good vesa mode) - 480 0000036E 49 dec cx - 481 0000036F B86001 mov ax, GOOD_MODELIST_SEG - 482 00000372 8ED8 mov ds, ax - 483 00000374 D1E1 shl cx, 1 - 484 00000376 89CE mov si, cx ;ds:si points to word containing selected mode# - 485 00000378 AD lodsw - 486 00000379 89C1 mov cx, ax - 487 0000037B 89C2 mov dx, ax ;cx and dx hold mode# - 488 - 489 0000037D B82001 mov ax, VESA_MODEINFO_SEG - 490 00000380 8EC0 mov es, ax - 491 00000382 31FF xor di, di - 492 00000384 B8014F mov ax, 0x4F01 - 493 00000387 CD10 int 0x10 - 494 00000389 E87A01 call checkvesa - 495 - 496 0000038C B82001 mov ax, VESA_MODEINFO_SEG - 497 0000038F 8ED8 mov ds, ax - 498 00000391 31F6 xor si, si - 499 00000393 B80090 mov ax, BOOT_DATA_SEG - 500 00000396 8EC0 mov es, ax - 501 00000398 BF0603 mov di, BOOT_VESA_INFO - 502 0000039B B90001 mov cx, 256 - 503 vesa_copymodeinfo_loop: - 504 0000039E AC lodsb - 505 0000039F AA stosb - 506 000003A0 E2FC loop vesa_copymodeinfo_loop ;store ModeInfoBlock for current - 507 - 508 000003A2 2689160200 mov [es:BOOT_VESA], dx ;store mode# for kernel - 509 - 510 ; mov ax, 0xb800 - 511 ; mov es, ax - 512 ; xor di, di - 513 ; mov al, dh - 514 ; call puthex2 - 515 ; mov al, dl - 516 ; call puthex2 - 517 - 518 000003A7 89D3 mov bx, dx - 519 000003A9 81CB0040 or bx, 0x4000 ;set "use LFB" bit of mode# - 520 000003AD B8024F mov ax, 0x4F02 - 521 000003B0 CD10 int 0x10 ;switch to graphics mode!!! - 522 000003B2 E85101 call checkvesa - 523 - 524 000003B5 E93F01 jmp vesa_done - 525 - 526 vesa_consolemode_only: - 527 000003B8 B80090 mov ax, BOOT_DATA_SEG - 528 000003BB 8EC0 mov es, ax - 529 000003BD 26C70602000000 mov word [es:BOOT_VESA], 0 - 530 - 531 000003C4 E93001 jmp vesa_done - 532 - 533 ;------------------------------------------------------ - 534 vesa_showmodeinfo: - 535 000003C7 60 pusha - 536 000003C8 06 push es - 537 000003C9 1E push ds - 538 000003CA B82001 mov ax, VESA_MODEINFO_SEG - 539 000003CD 8ED8 mov ds, ax - 540 000003CF 31F6 xor si, si - 541 000003D1 B800B8 mov ax, 0xb800 - 542 000003D4 8EC0 mov es, ax - 543 - 544 000003D6 89D1 mov cx, dx - 545 - 546 000003D8 B8A000 mov ax, 160 - 547 000003DB F7E2 mul dx ;ax=160*mod# - 548 000003DD 05E601 add ax, 160*3+6 ;offset first line of modes and room on left for label - 549 000003E0 89C7 mov di, ax - 550 - 551 000003E2 3EA11200 mov ax, [ds:18] - 552 000003E6 E83901 call console_putDec - 553 000003E9 81C70A00 add di, 10 - 554 000003ED B078 mov al, 'x' - 555 000003EF E8B401 call console_putChar - 556 000003F2 47 inc di - 557 000003F3 47 inc di - 558 000003F4 3EA11400 mov ax, [ds:20] - 559 000003F8 E82701 call console_putDec - 560 000003FB 81C70A00 add di, 10 - 561 000003FF B078 mov al, 'x' - 562 00000401 E8A201 call console_putChar - 563 00000404 47 inc di - 564 00000405 47 inc di - 565 00000406 30E4 xor ah, ah - 566 00000408 3EA01900 mov al, [ds:25] - 567 0000040C E81301 call console_putDec - 568 0000040F 81C70800 add di, 8 - 569 00000413 3EA00000 mov al, [ds:0] - 570 00000417 A880 test al, 0x80 - 571 00000419 7435 jz vesa_showmodeinfo_done - 572 0000041B B04C mov al, 'L' - 573 0000041D E88601 call console_putChar - 574 00000420 B046 mov al, 'F' - 575 00000422 E88101 call console_putChar - 576 00000425 B042 mov al, 'B' - 577 00000427 E87C01 call console_putChar - 578 0000042A 47 inc di - 579 0000042B 47 inc di - 580 0000042C 3E668B1E2800 mov ebx, [ds:40] - 581 00000432 6689D8 mov eax, ebx - 582 00000435 66C1E818 shr eax, 24 - 583 00000439 E89901 call puthex2 - 584 0000043C 6689D8 mov eax, ebx - 585 0000043F 66C1E810 shr eax, 16 - 586 00000443 E88F01 call puthex2 - 587 00000446 88F8 mov al, bh - 588 00000448 E88A01 call puthex2 - 589 0000044B 88D8 mov al, bl - 590 0000044D E88501 call puthex2 - 591 vesa_showmodeinfo_done: - 592 00000450 1F pop ds - 593 00000451 07 pop es - 594 00000452 61 popa - 595 00000453 C3 ret - 596 - 597 ;------------------------------------------------------ - 598 checkmode: - 599 00000454 53 push bx - 600 00000455 51 push cx - 601 00000456 52 push dx - 602 00000457 06 push es - 603 00000458 1E push ds - 604 00000459 57 push di - 605 0000045A 56 push si - 606 0000045B 89C1 mov cx, ax ;cx=modenumber - 607 0000045D B82001 mov ax, VESA_MODEINFO_SEG - 608 00000460 8EC0 mov es, ax - 609 00000462 31FF xor di, di - 610 00000464 B8014F mov ax, 0x4F01 - 611 00000467 CD10 int 0x10 - 612 00000469 E89A00 call checkvesa - 613 0000046C 31FF xor di, di ;es:di -> ModeInfoBlock struc - 614 0000046E 268B05 mov ax, [es:di] ;ModeAttributes - 615 00000471 A801 test al, 1 ;mode supported - 616 00000473 7477 jz vesa_modenogood - 617 00000475 A808 test al, 8 ;color mode - 618 00000477 7473 jz vesa_modenogood - 619 00000479 A810 test al, 0x10 ;graphics mode - 620 0000047B 746F jz vesa_modenogood - 621 0000047D A880 test al, 0x80 ;Linear Frame Buffer supported - 622 0000047F 746B jz vesa_modenogood - 623 00000481 268A4519 mov al, [es:di+25] ;BitsPerPixel - 624 00000485 3C10 cmp al, 16 - 625 00000487 7408 jz vesa_bppok - 626 00000489 3C18 cmp al, 24 - 627 0000048B 7404 jz vesa_bppok - 628 0000048D 3C20 cmp al, 32 - 629 0000048F 755B jnz vesa_modenogood - 630 vesa_bppok: - 631 00000491 268B4512 mov ax, [es:di+18] ;XResolution - 632 00000495 268B5D14 mov bx, [es:di+20] ;YResolution - 633 00000499 3D8002 cmp ax, 640 ;640x480 - 634 0000049C 7509 jnz res_goon1 - 635 0000049E 81FBE001 cmp bx, 480 - 636 000004A2 7548 jnz vesa_modenogood - 637 000004A4 E93B00 jmp vesa_modegood - 638 res_goon1: - 639 000004A7 3D2003 cmp ax, 800 - 640 000004AA 7509 jnz res_goon2 - 641 000004AC 81FB5802 cmp bx, 600 - 642 000004B0 753A jnz vesa_modenogood - 643 000004B2 E92D00 jmp vesa_modegood - 644 res_goon2: - 645 000004B5 3D0004 cmp ax, 1024 - 646 000004B8 7509 jnz res_goon3 - 647 000004BA 81FB0003 cmp bx, 768 - 648 000004BE 752C jnz vesa_modenogood - 649 000004C0 E91F00 jmp vesa_modegood - 650 res_goon3: - 651 000004C3 3D0005 cmp ax, 1280 - 652 000004C6 750F jnz res_goon4 - 653 000004C8 81FB0004 cmp bx, 1024 - 654 000004CC 7414 jz vesa_modegood - 655 000004CE 81FBC003 cmp bx, 960 - 656 000004D2 740E jz vesa_modegood - 657 000004D4 E91500 jmp vesa_modenogood - 658 res_goon4: - 659 000004D7 3D4006 cmp ax, 1600 - 660 000004DA 7510 jnz vesa_modenogood - 661 000004DC 81FBB004 cmp bx, 1200 - 662 000004E0 750A jnz vesa_modenogood - 663 vesa_modegood: - 664 000004E2 5E pop si - 665 000004E3 5F pop di - 666 000004E4 1F pop ds - 667 000004E5 07 pop es - 668 000004E6 5A pop dx - 669 000004E7 59 pop cx - 670 000004E8 5B pop bx - 671 000004E9 31C0 xor ax, ax - 672 000004EB C3 ret - 673 vesa_modenogood: - 674 000004EC 5E pop si - 675 000004ED 5F pop di - 676 000004EE 1F pop ds - 677 000004EF 07 pop es - 678 000004F0 5A pop dx - 679 000004F1 59 pop cx - 680 000004F2 5B pop bx - 681 000004F3 B8FFFF mov ax, 0xffff - 682 000004F6 C3 ret - 683 - 684 ;------------------------------------------------------ - 685 vesa_done: - 686 - 687 ; xor ax, ax ;wait for keypress... - 688 ; int 0x16 - 689 - 690 000004F7 E9D902 jmp go_pm - 691 - 692 ;------------------------------------------------------ - 693 puts: - 694 000004FA AC lodsb - 695 000004FB 08C0 or al, al - 696 000004FD 7406 jz puts_done - 697 000004FF AA stosb - 698 00000500 88E0 mov al, ah - 699 00000502 AA stosb - 700 00000503 EBF5 jmp puts - 701 puts_done: - 702 00000505 C3 ret - 703 - 704 ;------------------------------------------------------ - 705 checkvesa: - 706 00000506 3D4F00 cmp ax, 0x004F - 707 00000509 7501 jnz vesaerror - 708 0000050B C3 ret - 709 vesaerror: - 710 0000050C B800B8 mov ax, 0xb800 - 711 0000050F 8EC0 mov es, ax - 712 00000511 31C0 xor ax, ax - 713 00000513 8ED8 mov ds, ax - 714 00000515 BE[BA06] mov si, txt_vesaerror - 715 00000518 BF000F mov di, 160*24 - 716 0000051B B404 mov ah, 4 - 717 0000051D E8DAFF call puts - 718 00000520 FA cli - 719 00000521 F4 hlt - 720 - 721 ;-------Function console_putDec - 722 ;input: - 723 ; AX = number to display - 724 ;output: - 725 ; number written in decimal to es:di - 726 console_putDec: - 727 00000522 60 pusha - 728 00000523 31D2 xor dx, dx - 729 00000525 30FF xor bh, bh ;no characters written yet - 730 00000527 B91027 mov cx, 10000 - 731 0000052A F7F1 div cx ;ax=quotiont, dx=remainder - 732 0000052C 053000 add ax, '0' - 733 0000052F 3D3000 cmp ax, '0' - 734 00000532 7405 je .goon1 - 735 00000534 E86F00 call console_putChar - 736 00000537 B701 mov bh, 1 - 737 - 738 .goon1: - 739 00000539 89D0 mov ax, dx ;load remainder to ax - 740 0000053B 31D2 xor dx, dx - 741 0000053D B9E803 mov cx, 1000 - 742 00000540 F7F1 div cx ;ax=quotiont, dx=remainder - 743 00000542 053000 add ax, '0' - 744 00000545 3D3000 cmp ax, '0' - 745 00000548 7408 je .goon11 - 746 0000054A E85900 call console_putChar - 747 0000054D B701 mov bh, 1 - 748 0000054F E90800 jmp .goon2 - 749 .goon11: - 750 00000552 80FF00 cmp bh, 0 - 751 00000555 7403 je .goon2 - 752 00000557 E84C00 call console_putChar - 753 - 754 .goon2: - 755 0000055A 89D0 mov ax, dx ;load remainder to ax - 756 0000055C 31D2 xor dx, dx - 757 0000055E B96400 mov cx, 100 - 758 00000561 F7F1 div cx ;ax=quotiont, dx=remainder - 759 00000563 053000 add ax, '0' - 760 00000566 3D3000 cmp ax, '0' - 761 00000569 7408 je .goon21 - 762 0000056B E83800 call console_putChar - 763 0000056E B701 mov bh, 1 - 764 00000570 E90800 jmp .goon3 - 765 .goon21: - 766 00000573 80FF00 cmp bh, 0 - 767 00000576 7403 je .goon3 - 768 00000578 E82B00 call console_putChar - 769 - 770 .goon3: - 771 0000057B 89D0 mov ax, dx ;load remainder to ax - 772 0000057D 31D2 xor dx, dx - 773 0000057F B90A00 mov cx, 10 - 774 00000582 F7F1 div cx ;ax=quotiont, dx=remainder - 775 00000584 053000 add ax, '0' - 776 00000587 3D3000 cmp ax, '0' - 777 0000058A 7408 je .goon31 - 778 0000058C E81700 call console_putChar - 779 0000058F B701 mov bh, 1 - 780 00000591 E90800 jmp .goon4 - 781 .goon31: - 782 00000594 80FF00 cmp bh, 0 - 783 00000597 7403 je .goon4 - 784 00000599 E80A00 call console_putChar - 785 .goon4: ;here dx contains last remainder - 786 0000059C 89D0 mov ax, dx - 787 0000059E 053000 add ax, '0' - 788 000005A1 E80200 call console_putChar - 789 - 790 000005A4 61 popa - 791 000005A5 C3 ret - 792 - 793 ;------------------------------------------------------ - 794 console_putChar: - 795 000005A6 AA stosb - 796 000005A7 B007 mov al, 7 - 797 000005A9 AA stosb - 798 000005AA C3 ret - 799 - 800 ;------------------------------------------------------ - 801 puthex: - 802 ;es:di points to video memory - 803 ;al holds hex value - 804 - 805 000005AB 50 push ax - 806 000005AC 88C4 mov ah, al - 807 000005AE C1E804 shr ax, 4 - 808 000005B1 240F and al, 0x0F - 809 000005B3 0430 add al, '0' - 810 000005B5 3C39 cmp al, '9' - 811 000005B7 7E02 jle puthex_goon1 - 812 000005B9 0407 add al, 'A'-'9'-1 - 813 puthex_goon1: - 814 000005BB 3C30 cmp al, '0' - 815 000005BD 7404 jz puthex_skipzero - 816 000005BF AA stosb - 817 000005C0 B007 mov al, 7 - 818 000005C2 AA stosb - 819 puthex_skipzero: - 820 000005C3 58 pop ax - 821 000005C4 50 push ax - 822 000005C5 240F and al, 0x0F - 823 000005C7 0430 add al, '0' - 824 000005C9 3C39 cmp al, '9' - 825 000005CB 7E02 jle puthex_goon2 - 826 000005CD 0407 add al, 'A'-'9'-1 - 827 puthex_goon2: - 828 000005CF AA stosb - 829 000005D0 B007 mov al, 7 - 830 000005D2 AA stosb - 831 000005D3 58 pop ax - 832 000005D4 C3 ret - 833 - 834 ;------------------------------------------------------ - 835 puthex2: - 836 ;es:di points to video memory, always displays 2 characters! - 837 ;al holds hex value - 838 - 839 000005D5 50 push ax - 840 000005D6 88C4 mov ah, al - 841 000005D8 C1E804 shr ax, 4 - 842 000005DB 240F and al, 0x0F - 843 000005DD 0430 add al, '0' - 844 000005DF 3C39 cmp al, '9' - 845 000005E1 7E02 jle puthex2_goon1 - 846 000005E3 0407 add al, 'A'-'9'-1 - 847 puthex2_goon1: - 848 000005E5 AA stosb - 849 000005E6 B007 mov al, 7 - 850 000005E8 AA stosb - 851 000005E9 58 pop ax - 852 000005EA 50 push ax - 853 000005EB 240F and al, 0x0F - 854 000005ED 0430 add al, '0' - 855 000005EF 3C39 cmp al, '9' - 856 000005F1 7E02 jle puthex2_goon2 - 857 000005F3 0407 add al, 'A'-'9'-1 - 858 puthex2_goon2: - 859 000005F5 AA stosb - 860 000005F6 B007 mov al, 7 - 861 000005F8 AA stosb - 862 000005F9 58 pop ax - 863 000005FA C3 ret - 864 - 865 ;------------------------------------------------------ - 866 000005FB 202020202020202020- txt_welcome: db " Welcome to HOS v", VERSION, "! ", 0 - 867 00000604 202020202020202020- - 868 0000060D 202020202020202020- - 869 00000616 202057656C636F6D65- - 870 0000061F 20746F20484F532076- - 871 00000628 302E312E3221202020- - 872 00000631 202020202020202020- - 873 0000063A 202020202020202020- - 874 00000643 202020202020202000 - 875 0000064C 312E20446F206E6F74- txt_rd1: db "1. Do not load an initial ram disk", 0 - 876 00000655 206C6F616420616E20- - 877 0000065E 696E697469616C2072- - 878 00000667 616D206469736B00 - 879 0000066F 322E204C6F61642069- txt_rd2: db "2. Load initial ram disk from floppy", 0 - 880 00000678 6E697469616C207261- - 881 00000681 6D206469736B206672- - 882 0000068A 6F6D20666C6F707079- - 883 00000693 00 - 884 00000694 456E74657220796F75- txt_input: db "Enter your selection: ", 0 - 885 0000069D 722073656C65637469- - 886 000006A6 6F6E3A2000 - 887 000006AB 564553412076657273- txt_vesa: db "VESA version: ", 0 - 888 000006B4 696F6E3A2000 - 889 000006BA 564553412066756E63- txt_vesaerror: db "VESA function call error! Halting system!", 0 - 890 000006C3 74696F6E2063616C6C- - 891 000006CC 206572726F72212048- - 892 000006D5 616C74696E67207379- - 893 000006DE 7374656D2100 - 894 000006E4 56455341206E6F7420- txt_novesa: db "VESA not found. Starting in console mode...", 0 - 895 000006ED 666F756E642E205374- - 896 000006F6 617274696E6720696E- - 897 000006FF 20636F6E736F6C6520- - 898 00000708 6D6F64652E2E2E00 - 899 00000710 564553412076657273- txt_vesaold: db "VESA version 2.0 required. Starting in console mode...", 0 - 900 00000719 696F6E20322E302072- - 901 00000722 657175697265642E20- - 902 0000072B 5374617274696E6720- - 903 00000734 696E20636F6E736F6C- - 904 0000073D 65206D6F64652E2E2E- - 905 00000746 00 - 906 00000747 612E20436F6E736F6C- txt_consolemode: db "a. Console mode only.", 0 - 907 00000750 65206D6F6465206F6E- - 908 00000759 6C792E00 - 909 0000075D 457874656E64656420- txt_memerror: db "Extended Memory Map information unavailable! Halting system...", 0 - 910 00000766 4D656D6F7279204D61- - 911 0000076F 7020696E666F726D61- - 912 00000778 74696F6E20756E6176- - 913 00000781 61696C61626C652120- - 914 0000078A 48616C74696E672073- - 915 00000793 797374656D2E2E2E00 - 916 - 917 ;------------------------------------------------------ - 918 getCHSfromCluster: - 919 ;input: ax=lba of sector on floppy (0-2879) - 920 0000079C 051F00 add ax, 31 ;convert logical cluster# to lba# - 921 0000079F 31D2 xor dx, dx ;lba->chs - 922 000007A1 BB1200 mov bx, 18 - 923 000007A4 F7F3 div bx - 924 000007A6 42 inc dx - 925 000007A7 88D1 mov cl, dl ;sector# (1-18) - 926 000007A9 31D2 xor dx, dx - 927 000007AB BB0200 mov bx, 2 - 928 000007AE F7F3 div bx - 929 000007B0 88C5 mov ch, al ;cylinder# (0-79) - 930 000007B2 88D6 mov dh, dl ;head# (0-1) - 931 000007B4 C3 ret - 932 - 933 - 934 ;------------------------------------------------------- - 935 gdtr: - 936 000007B5 1700 dw gdt_end-gdt-1 - 937 000007B7 [BB070000] dd gdt - 938 gdt: - 939 000007BB 00000000 dd 0 - 940 000007BF 00000000 dd 0 - 941 - 942 KERNEL_CODE equ $-gdt - 943 000007C3 FF db 0xff ;limit 7:0 - 944 000007C4 FF db 0xff ;limit 15:8 - 945 000007C5 00 db 0x00 ;base 7:0 - 946 000007C6 00 db 0x00 ;base 15:8 - 947 000007C7 00 db 0x00 ;base 23:16 - 948 000007C8 9A db 0x9a ;access - 949 000007C9 CF db 0xcf ;flags / limit 19:16 - 950 000007CA 00 db 0x00 ;base 31:24 - 951 - 952 KERNEL_DATA equ $-gdt - 953 000007CB FF db 0xff ;segment 16 = 4gb data - 954 000007CC FF db 0xff - 955 000007CD 00 db 0x00 - 956 000007CE 00 db 0x00 - 957 000007CF 00 db 0x00 - 958 000007D0 92 db 0x92 - 959 000007D1 CF db 0xcf ;cf - 960 000007D2 00 db 0x00 - 961 - 962 gdt_end: - 963 - 964 ;------------------------------------------------------ - 965 go_pm: - 966 000007D3 31C0 xor ax, ax - 967 000007D5 8ED8 mov ds, ax - 968 000007D7 0F0116[B507] lgdt [gdtr] - 969 000007DC FA cli - 970 000007DD 0F20C0 mov eax, cr0 - 971 000007E0 6640 inc eax - 972 000007E2 0F22C0 mov cr0, eax - 973 - 974 000007E5 EA[EA07]0800 jmp KERNEL_CODE:pmode - 975 - 976 bits 32 - 977 pmode: - 978 000007EA 66B81000 mov ax, KERNEL_DATA - 979 000007EE 8EC0 mov es, ax - 980 000007F0 8ED8 mov ds, ax - 981 000007F2 8EE0 mov fs, ax - 982 000007F4 8EE8 mov gs, ax - 983 000007F6 EA000010000800 jmp KERNEL_CODE:BOOT_KERNEL_ADD - 984 - 985 000007FD 4B45524E454C202042- kernel: db "KERNEL BIN", 0 - 986 00000806 494E00 - 987 - 988 diff --git a/stage1.bin b/stage1.bin deleted file mode 100644 index 5a5c185d8d4fb81f9f5c889f3b3b9e068e14d5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmaEDGr>35#Xs0o&wzo6k&%Jv0fPhg2Tled1||js(0nD~;^5&QtYDyLsAs64;N}=& zXr!Q^@XEP{fx+-V-;EA2m6~6D7xw(C{=I`?N8gRU1BU;1FtG2uz`pv?-zO<6m`ZH_NHXB3O8{lzB7uWv*1a|`&w++Ab9ozYUVSh<&VAxJ>hGh@` zma@i0zT{$vi)=im!0_nV>wiFNU+iGu?mJ-D?IHy-^0wiB+wc7K=I#M6%o%ntGNpoy z1zFQ`xbd(8L*L}ys3^S@+aSbOjV%j+Yr7&b64u*x$S zUfM0h@cpw>$3-BE3CQX=+HvhLKSN3_A{77s2eK!fX9x~)baw>?pOdE_LUKS@p{oGd CvYyNU diff --git a/stage2.asm b/stage2.asm index 769dcb3..32c2c06 100644 --- a/stage2.asm +++ b/stage2.asm @@ -30,6 +30,7 @@ loop_name: jmp found_file ;good file, ds:si points to start of root directory entry goon: pop si + add si, 32 pop cx loop loop_compare diff --git a/stage2.bin b/stage2.bin deleted file mode 100644 index aa3aa8245a19bff1890bade72cc90ec65b7f1a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2057 zcmah~eQXnD7=P}1Ys*O12FCc%Y%gXOgV6M5OaRw9relBu_F?t`GB~!orJ?I#cZbY? zt{P2`CDj=Jk@&~p4>LQKlsLBQ7T4Aa`@>AwG^Db`j7iAbO_vbnhD@mM-6jq+*e1Q_ z?G3=P;21j_yc`*a=>5Km>d12V;>LYBqrNU>g!;OP$*BiyEQnq0udW*y zHwDLpD1a55bC!22%kdi~m7@96Ir%3CVwu4NJ2t#B0u;f=gh4nDU~6hO+L{!Tu!DR{ zh0=-XS|#3ZfVqhgtX!UrQ?jZ1*|a6aKzAH7Q(vl}24f^V$)+P$O)8kWChqtDXb5Lb z7l+f+yTg|0;%PQLIDfGx54)IX2Mm_=_L%Ss%%IpCEu!#7COS?He%g!IGi+=)r;wGH z!UB0Fw293ffRBS?u5$o+g&>KMauA|z?=1&c(~#)`qt`Y=jO?t&4?)EMP#PaKpH^-M zhA&X;s7`Zur7!?(%YnLc^%oNQej5!iMpqNIR)7fPy9i;8tV<)U6RzJ;H*rBF$zxGK z0z0abgOdU~W~>n^H95wn1r=ccA(9Q`x4(S*o~q$hzO8~&ljL=Rf1cPu+9>QlWMXFt z>U?P8Poa3~YrR`huxJe%JlNO6;EjfvsRzRD$B@xX#wIAMv@r&g3qc(aX?A#IMy_ZG86jZ_3^tq;mIAwFphURR6sR(5we(`oq+^{}pyT~yO)vO}6T z$<8jC+0kx-lCsP3>y(pp)=)b&UE78Gp?K<+USetALYImtQtCA-I!-Ag;Ul4PLTG_j z?Sq(q=yRC(HIUE($PCER^670Q>93o@!OQ9YE|mXVly9MoZB z?!#y@3}r;^AeSuT7Nrci&aMEwmGTc|Lihykp-M|#XR`rs_}g-hSR6N99cuxvBsMd+ zIsiJ`q!+_w_(LkZ1N*6PF+Qoqks&*wI z#@w1}CH@G%Gr*>8?HQev^j4=?YU#8}BFS>pcDiJ3p;a;$t|507$p>uhB`a+02eX}R zw7kqeKTgRzQ!jxN88oeymbaxglWsDa1_pUkDvxLxvV~}jlkhE7#G*u2B9Z!uK5vdm#!z59H1&Iethh`i^r7nu(BDf&O77G3^u3wG z?5HChv2K{Vo#6nd1EdTrLLa4EWk(~}@X%_;b;O!7lT9ZZh08z(G{O?VmZgB_7XX<{ z0jrk+G6{fW#58aT?J6b81K*NA$$SgrDBSuE&6o-u5~De4%m1jY3cQ)bO4L zv6)Abh<5I)LdP9;)?TpwNf8KGJ9aJmRrqtx)2XcpqvNWglwcJ$!@Y7QNdLRF_n3N5^?z%Mw+Py}BDUa2^lh zeLm5*9_{2jlH1#aT3TBqzIpvZpjMV3%HBphs**UL4sd%>gXnD$Jv?d_8+p6k{zwv3 zV0R!N|EBEr@&6OX+0iRYPC}yB(`tv36B6%jha4oSK2Kuyj!onw=CeJfhK!1L61+)#e uP&pU-?paVwD6%{go1E-3gP>X=NL<13AfD9T;bwTPq;hXb8A8Ro_QGFmemvR$ diff --git a/tetris.c b/tetris.c deleted file mode 100644 index 8752e3a..0000000 --- a/tetris.c +++ /dev/null @@ -1,7 +0,0 @@ - -// tetris.x -// Author: Josh Holtrop -// Date: 09/30/03 - - - diff --git a/vmm.c b/vmm.c index 6eb03a5..112ce8b 100644 --- a/vmm.c +++ b/vmm.c @@ -9,70 +9,111 @@ dword vmm_first_virtual_address = 0; void vmm_init() { - if(!(vmm_PDBR = mm_palloc(1, PID_KERNEL))) + if (!(vmm_PDBR = mm_palloc(1, PID_KERNEL))) { printf("ERROR! COULD NOT ALLOCATE PAGE FOR INITIAL PAGE DIRECTORY!!\n"); halt(); } - dword address = 0; - PageTable *tmp; - int pde; - int pte; - for (pde = 0; pde<1024; pde++) - { - for (pte = 0; pte<1024; pte++) - { - if (pte == 0) - { - if (!(tmp = mm_palloc(1, PID_KERNEL))) - { - printf("ERROR! Page could not be allocated for PDE %d, PTE %d!\n", pde, pte); - halt(); - } - vmm_PDBR->pageTables[pde] = ((dword)tmp | 0x00000003); //present, read/write, supervisor priviledge - } - tmp = (PageTable *)((vmm_PDBR->pageTables[pde]) & 0xFFFFF000); //mask out address of page table - tmp->page[pte] = (address | 0x00000003); //present, read/write, supervisor priviledge - address += 4096; - if (address >= mm_totalmem) - pte = pde = 2000; - } - } + vmm_init_pagetable((dword)vmm_PDBR); - //we also need to map in the video framebuffer memory: - dword framebuffer_end = video_mode.PhysBasePtr + video_mode.BitsPerPixel/8 * video_mode.XResolution * video_mode.YResolution; //framebuffer size in bytes - address = video_mode.PhysBasePtr; - if (address != 0) //we do have a graphics buffer + if (mm_totalmem % 4096) + vmm_first_virtual_address = mm_totalmem + (4096 - (mm_totalmem % 4096)); + else + vmm_first_virtual_address = mm_totalmem; + + if (vmm_mapn(0, 0, 0x03, mm_totalmem/4096+1)) { - pde = (address & 0xFFC00000) >> 22; - pte = (address & 0x003FF000) >> 12; - if (pte != 0) - vmm_PDBR->pageTables[pde] = (dword)mm_palloc(1, PID_KERNEL) | 0x03; //present, read/write, supervisor priviledge - for ( ; pde<1024; pde++) //top 10 bits are page directory index + printf("Could not page in all physical RAM!\n"); + halt(); + } + //we also need to map in the video framebuffer memory: + if (video_mode.PhysBasePtr > 0 && video_mode.BitsPerPixel > 0) + { + if (vmm_mapn(video_mode.PhysBasePtr, video_mode.PhysBasePtr, 0x03, (video_mode.BitsPerPixel/8 * video_mode.XResolution * video_mode.YResolution)/4096+1)) { - for ( ; pte<1024; pte++) //next 10 bits page table index - { - if (pte == 0) - { - if (!(tmp = mm_palloc(1, PID_KERNEL))) - { - printf("ERROR! Page could not be allocated for PDE %d, PTE %d!\n", pde, pte); - halt(); - } - vmm_PDBR->pageTables[pde] = ((dword)tmp | 0x00000003); //present, read/write, supervisor priviledge - } - tmp = (PageTable *)((vmm_PDBR->pageTables[pde]) & 0xFFFFF000); //mask out address of page table - tmp->page[pte] = (address | 0x00000003); //present, read/write, supervisor priviledge - address += 4096; - if (address >= framebuffer_end) - pte = pde = 2000; - } - pte = 0; + printf("Could not page in video memory at 0x%x!\n", video_mode.PhysBasePtr); + halt(); } } } +void vmm_enable_paging() +{ + write_cr3((dword)vmm_PDBR); + write_cr0(0x80000000|read_cr0()); +} + + +int vmm_map1(dword virtual, dword physical, dword flags) +{ + if (virtual & 0x00000FFF) + return 1; // ERROR 1: address not page-aligned + if (physical & 0x00000FFF) + return 1; // ERROR 1: address not page-aligned + int pde = (virtual & 0xFFC00000) >> 22; + int pte = (virtual & 0x003FF000) >> 12; + if (!(vmm_PDBR->pageTables[pde] & 0x01)) + { + vmm_PDBR->pageTables[pde] = (dword)mm_palloc(1, PID_KERNEL) | 0x7; //user, r/w, present + vmm_init_pagetable(vmm_PDBR->pageTables[pde] & 0xFFFFF000); + if (vmm_PDBR->pageTables[pde] == 0x07) + return 2; // ERROR 2: page table could not be created + } + PageTable *ptp = (PageTable *)(vmm_PDBR->pageTables[pde] & 0xFFFFF000); + if (ptp->page[pte] & 0x01) + return 3; // ERROR 3: page table entry already exists + ptp->page[pte] = physical | flags; + return 0; +} + + +int vmm_mapn(dword virtual, dword physical, dword flags, dword n) +{ + int mapped; + int result = 0; + dword va = virtual; + dword pa = physical; + for (mapped = 0; mapped < n; mapped++) + { + result = vmm_map1(va, pa, flags); + if (result != 0) + { + if (mapped > 0) + vmm_unmapn(virtual, mapped); + return result; + } + va += 4096; + pa += 4096; + } +} + +int vmm_unmap1(dword virtual) +{ + int pde = (virtual & 0xFFC00000) >> 22; + int pte = (virtual & 0x003FF000) >> 12; + if (virtual & 0x00000FFF) + return 1; // ERROR 1: address not page-aligned + PageTable *ptp = (PageTable *)(vmm_PDBR->pageTables[pde] & 0xFFFFF000); + +} + + +int vmm_unmapn(dword virtual, dword n) +{ + +} + + +void vmm_init_pagetable(dword address) +{ + PageTable *ptp = (PageTable *)address; + int n; + for (n = 0; n < 1024; n++) + ptp->page[n] = 0; +} + + void *malloc(dword bytes) { diff --git a/vmm.h b/vmm.h index 8e3256c..0a0fdf9 100644 --- a/vmm.h +++ b/vmm.h @@ -3,6 +3,7 @@ // Author: Josh Holtrop // Date: 09/30/03 + typedef struct { dword page[1024]; } PageTable; @@ -11,10 +12,16 @@ typedef struct { dword pageTables[1024]; } PageDirectory; + +void vmm_enable_paging(); void vmm_init(); void *malloc(dword bytes); int free(void *ptr); - +int vmm_map1(dword virtual, dword physical, dword flags); +int vmm_mapn(dword virtual, dword physical, dword flags, dword n); +int vmm_unmap1(dword virtual); +int vmm_unmapn(dword virtual, dword n); +void vmm_init_pagetable(dword address);