From 5b07f46d1b73f56b6ad6cd365c0139c5bbdd7b2f Mon Sep 17 00:00:00 2001 From: kieron Date: Wed, 11 Apr 2018 14:32:52 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@486 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5120000 -> 5120000 bytes iso/boot/asuro.bin | Bin 65764 -> 65764 bytes lib/E1000.ppu | Bin 15655 -> 15655 bytes lib/PCI.ppu | Bin 7889 -> 8132 bytes lib/USB.ppu | Bin 3725 -> 3725 bytes lib/kernel.ppu | Bin 4447 -> 4447 bytes lib/libpconsole.a | Bin 102784 -> 102784 bytes lib/libpmultiboot.a | Bin 29056 -> 29056 bytes lib/libpsystem.a | Bin 184408 -> 184408 bytes lib/pmemorymanager.ppu | Bin 4233 -> 4233 bytes lib/vmemorymanager.ppu | Bin 6105 -> 6105 bytes src/driver/bus/PCI.pas | 185 ++++++++++++++++++++++------------------- src/kernel.pas | 2 - src/pmemorymanager.pas | 27 +++--- src/vmemorymanager.pas | 17 ++-- 15 files changed, 121 insertions(+), 110 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index 499e2eb45a2bc28a02f775efb82dd75755ba3289..9aeb866e03fcbf2989dea97bf5af7473e672ed8a 100644 GIT binary patch delta 18975 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 LV-XW$ZI=HBvOu%5 delta 19039 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 RLU{qoP$LC!v&2U_Dk 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 delta 9624 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 diff --git a/lib/E1000.ppu b/lib/E1000.ppu index ad33e6f9a921b93594cd75bdcb93f7e5408572b6..044fc94d098870170cbd5c8432bce8fffe2fdb6b 100644 GIT binary patch delta 21 dcmZ2pwY+MB86yX8j*Gpo)|tPX?HFHL0{~qC2!sFt delta 21 dcmZ2pwY+MB86!u->K%?u0cW;uwqty04FG4k2|oY; diff --git a/lib/PCI.ppu b/lib/PCI.ppu index 250de2342191e328715b31969b4918705ae733a7..e216790d21698f05b3049cabd35abe2db2047b3e 100644 GIT binary patch literal 8132 zcmcIpX>4586~6a*?C~BGVkdzKI1^_f4iGyl5J<-MBnx>fGTCp zXn#y`$Jy7+J}-#AYx1e$Lg=O2f6AVky5eH7?G~YT7S+=9QQJ z{^ghZme>`TFQqe2zWJ@mQxEmN#E#%}E?dlH{IUGAFYep^%r^El%@ooLexbCO_lvt; z_+tAbpKH8>{jHffe=b*8oJ(a>C;Y;<&piCSe+ClwE78I-(Y@QA8r*kaVvM3TZA~l9 z`PtIg>(1{JMWv_Vm-3OS=_lcMn* z?76fCv~GNIJP{pg8i>axqVdG!Xmq?y^Fxv0$g${9bT}~voAQ!cKDJ4UdMPj)(5!+9 zSjsPu3J1Ms_|*ErMn zp$%AD@XOdb_Tg+bI|D=3X3#NumK2qE4Cf4^x8k}oyL@yCSfgk_(OO086b&j`uV_Q1 z&+Dw+|8cKd8aMH2WuI4j9^CObVzuH{Q>%zY1*?L)n(AtPd=Q^MD0XGMod~#J!KzJp z4?6UAF3a@ZP_e?^H71wu`P!8qq|wW%eE=4kdSb-7fViqfvs>eBcR75vN9~ESdmkNO zPo#L|D3&iP1jXNS4hvC@F|u7`Q8ySf``9%N8mjg z@|;QUEM+X-f0X3yF7V7>ybyDwh8b-!JtO254YlZDQ3-@*4Ymcp8W#NQOs8ED=LXz2}klP)45;B&Ps5?=;PzPvBCROsY(~HScdd@Ehxx?Y7AZ5v;>d>tR z*EpS;KItcm>3d=PDhK`qktp||ZbkJ%8$jz*GcyIhSllh-P6sVPz;ZvThHeCBp*=!& zJLr87usngPCxkQKy3FNXA$K{2&qB=dJSu0?3tbMn1~Zr|%%rmzYI2H8>1wC(CCFKR zi>jj%0@qUXk)|VxiyD88!+)J%lvhx7%r}8+$`{geDT}_=p}$Kg%4?|HhhFFk(6+L5 zyS8^bm1h88c>`642k$DPKAlTu(sSvOkUb9i90V+9Q1$Zb1Q!H!Dpkbv^g5(^JAv#h z>Q$&-h|8*3zd~5UdmQ{l2vw1GkYW66GH`8tuS2WX8pzv#z6Pxq;;y?SU+`y>%b&2% z>HG-@mQLvCz;FOTf^Q`k`}s&|3ZZuk5=u* zlR!SL-1xL}qm6Ei_eX~Nj*oZsO(vqNxkLRfR4>fGVrtX@J#?ual@wp27=^o_QU7Bg zyroZ}M|KnQjFA)bL-O_2#P2mAUq=nduxzve+(pj^MN;?GRKu6sQT@z#&Ar4?Z3V^)Uk@56W^y>?hj&=$3kLc-v`7OC z^aes_=d;s*?zhlC80f2LanaBP#Oe`H*z_V z9je&y(UFQ6an`%~Bk_UQaAdHn%YY*Bcw}<5uyH8ra0%ZCZdsx>vcZn?A7&i?M$71_ zTPMsMtEHT*spM{Cm({Ungv3Y~Mjq2%_%LWWUmNMS=o)T!lxDPyq&k1YN6=F{otw{M zf<|srSWk*pgI$jnR)gv&4M%_tcHyv|&y>oM^8#Wc;gE*WzI#q^UNA|_iez^XbeA#5 z{@vuOIuLvyPY^AC?RMf;&QUx%c04+sSa~s5vpqRudLj3N(+hcYqYcz`#@jx$<%K)| zq*=(L+bndzK!?zl7jl$Py^u%uTIh&@-iDUp*Uvx7=NEFPgdFX&$lDEa8ZClvmi#Ay zl-)cC=8PPyxSM=c(fkRJ&k-%3a?w<$!>#dH;(ZQ=Ws9CcyVwy-_w}G|2B(8Mw%!iv zUgPwGXv;y30cnCdw#7mpHqb}WmVM9iF|yk9r_;)^mVl5$n%}d zL_WU9LjP=_Z=z-7nNxaU{#jo)m%>K`q*?KZ1^?B6&!8=@Xkdj+O*Vk%o2lfhhv3%= zAzP)=ha>3b@n}9zoF}1e^OZu#HML5I@2qkYr%rvW5VB48^JP+QV!Z4(3;uhrRQSdw zH<7LUbRpzgE#@nf+{BaZye}B|SWt=Jao4*1Lxzy+Gy-vg4Q}BJzGn#8t}#6K<$A8O zwOk#eBk@F%2VD|ZcwER08YSPxsO8yaz)-Xf=JtG@fk+}E z^S3yagT{OWE!UoG=N}(|be6B9gL;Qb(GTh6O1d93Se#B}`}nRsWC1Y%RD9YG0??Mp zrDg`yUq=18>}>i35*eL|NihQCW@YLSXbXJPz*u%Rhnv^JjyqT%VFmy0dB0e))<*4f z?*NSN(6ap)Xw#`ey5w8Xm<6Q(>Qta1(B`6Fg7ZUmb6V61pjhM*x0vM4L8Ch5yWA<2 zZxrmli+$Z(Z9#R>gF$H`?_q7XaqYfuQ3*YxeD0iF2bB)0$q7E1#cN=)-<8DDcS!nh zv3o};60_uk%5JXdP=#lmuG&|MQFv4O5?Q)Lc_3&RU1Kx^_P zoQD%@)SePjTxHzrMTM9b59a>2R$A9u{k`I6rK z>g`~)NK>u{l>?{mnbR(9iW#TlXfY_0)aQXT_snURHYE)7<7mtG%-w|Q8~(IQo00~4 z5^edODF9lh_cliBGN-!$YJ;eVcIA793z%1oY>$IBba8g|rk~KajTHAmSsw}GfCRXw nF?V)@J_zY%WgrXMLMe8Y-FqhRQhXjT7P&-!BrRP~fEGf{ delta 2974 zcmZ8iTWlN06`kQj6uEp$d{|406eBybWha&``4QQ%^@w9d50Z%lq)A(vB3JUZB$p;B zIdXzJO$)<7KU(Ad6hQ*C36P>m(N|C)P5Y6ijXv7it-p$*ZQ7z={RrC6ygqvF?vjc- zz}&lY?wPxHX71ei&AGd0M+$|tiQ`kQuSww)?-X+4`@=#!|HfN0j>7MM_J9!L>$gS@ zx-X}G`_!wq^2wiE^UL5j`h<`Xw*y9>6jXE^e)Aoof$brMR$xAomqL3YR*MD zO&>W=_e){&XE0cl7a&j2vo4=pq8qMX(HGo#de{A3+Uc8+SLuzuY5KG;d+0nSAtoXE zFq!q36kX`pJ)d;blaWRIcZgo`M9J;iPakVY`qyTJfpX2zzO^ zjLnk1A>@6%|2+(xTLFCx-I0nyDlIIcts4z9;L#rYQP{XWi9UkvNDV-`W*44V6>>k_ z_NfDd0F=vGxvI5Fot-9PJ3ycK)L0C7pjPf^jml1`qt~^TkoVKLqF#=};;WP^m$gz` zzlI58z5jg~CT`E5??-o}5|I7nYPF@c+ed{w*rRq};PyPaMNQ(XOPvt%5dBb5A_tEx8;Xlb2~<}gM4YD|SK(AFwO1MAwcEJtX@uMVVOQJO8i zUhd)#kl|P7(!j%eGrA}JU@zd;LE!cebSq$77}2jArJ7#XJ3=0%+kW+W2A~Jvdby3Q zndnXbC2(#Zq8~(eq_U9yx>h$3i0$H7kNzHvX2V^u&Y90ovFVoc<308rn;e#2A^7q- zQaNe{5|fiX%AagX77mY?jQb$N&6c)Ny2tAj{UV?yIG01Fk^fcNYBo6mPS6JdHOZ^D zCYoV)jVCD^R6Pe^4C)3&f=PNR7>(VJalqb>F7q^fHK>MpS^dZht+lP;raVMH2&xx& zYrI_$2{YYWKpcT{`!V!`(2mq0$Y`b9EU)V|y|Ytl8hWF{VVvvek;#t*{~TyN>sO%2zv(PcQv?Y zsp$V#2B@s!U3-PUgT}RVnpu{6h^ZS}jS8srepHt?>Eb{wdIs=4C1r(n2Qsm#6EY_0qRE%Z(a~Ru;%hPiJ<{7Y-kf-m(GRh-7qh(wbGEaA7 zx_pVIwQlxA$<6mJn*5(&!5kQ^+E50IaCo@5=u6^}#+svjSy_y`C3Hn2F@;Vn= zndbd*ZFO|~C*(GFjjN?h^J9h5-)I{(BuCgXaRrlU7o<{c>DyY1t1Jpt#4>X|l4*7l ztXcOE4@Y^E(>VHB2Hsu~oZbFE%78`TN+i=B$guSf%ST<~gB`RuoWL^CPw($bP9-cz zevFmK5Bb4Evj`|4B3hVRC>8RLua@TWD;G-hGpjQ~CTVc3Q<9tUw*5iuR&eK!-!jYG>qbF#_!1f<`7neF_1 zv`5d`^l@k|H!^+<(hI-1&SoxO>~W8nT$eZjeT4T=#*fpm8vp!4k8;X(Hv`RYkc>@2 zy7UGY^+m;8mK1Za@~a|aQ;?o^rQDe1_hzX}SOCFXdF&*8ON~!2`|O!{7)H#Q(~yBp ztz&K7LSw_gwd>N>dbAn(r#i5d?>c@O27Xm!>;j~6wWW8oIisHG}rS$Nn z>kWKbcXW53#g^hn_O!R4;nuE)2AKBk-96ByzHL)~4ZT-7n@qLt_3mVs`kqa_1C4v* z8D%_a fYu&T`H>_3))L{*<701&(#NF;8{>M$<$&CIF0a7AP diff --git a/lib/USB.ppu b/lib/USB.ppu index 183ff18e1ea60ada2706c551f14647d587eb3369..3595d729f82795473e8c37a3bd8d4d044a91da0e 100644 GIT binary patch delta 19 acmeB`?UkKS&%vAHV(+VU=I_RKHa-ADWCrvA delta 19 acmeB`?UkKS&(W}Yha*$KnXMb!+4ulWVF#}O diff --git a/lib/kernel.ppu b/lib/kernel.ppu index e89dff7159b36649c97ab5055f355c0053a0f8f5..456ff75a5d674701117c12b41dd4c580f22e1271 100644 GIT binary patch delta 27 jcmcbwbYE#g028Ow#-OQ;9K1O$_P$zY{%(HHSilbei75&P delta 27 jcmcbwbYE#g0Mic1jX_fxIT}{)aAXQNvvu=(#sYo-p?V8& diff --git a/lib/libpconsole.a b/lib/libpconsole.a index de3ad5ca02eaba3407cff1e69adbcee823de3a01..258f8c834c914606b1a7f6819ae2e0292505c01d 100644 GIT binary patch delta 1310 zcmZXUZ%9*77{)m>|FKzWu}OWHTA-=SIh`X=vpxjYEfs_XEhbtN87a{RK_N+qwqRa7 z(S?c{O%p^zd(+!6Nr|u!Ou-MK1X2`=#-gxT3AVd=&U>U!m*4w5=e*}U=bYOSNazS8 z$mTdlY0+@@pkDh@|GE*D_2D=MqaFe}I+(tb6<|Jnm8J3V8XJ03(R`XAU zvi-jiq#OldBTs+<%OkE(xm-Xd#H~)KrX*8f`LHI(Jt<# z)=r7aM<(d4%LYh2b{hpLM|xIu0*9WHRD>mGWS+`e;C3+7jfwIr5e$Srs4&2+s}KFM zdkQTrjjs`8cVzC<7st?B&~%1}3jXG{B)-#f7p zSx>EKyEJU(JB?hQlMouYfvPw79^vYEBDX^K$!f2*VoG7SlGhZSR(<{XL>-DywF~{}{1+9ghF=HL7db zugXKPd=*K-$AtBvUM*vp`@yFy)X5f9GX fUQe2GnI2itBs(%~z0Y-u&qq?&@v0*}GOhauM0W8U delta 1310 zcmZXUZ%9*77{)m>|FKzWu}OWHTA-=S+x#;EHS0rQ-Ex9p&|;!Rk&zO85EL2>qAk#i zC%RBkqiKR@Xm55ClavSx!4&)uN+3m{xG)L}OR(L|bKW!hbosr{bIyCtbI!S*V1g%@ zpjhK1N9j=ZfKmU_z?vDBjO%d>p8E(G=s@~*R)D$m6|TYubKN$kQ2&SwxA%Bam8?Gz z%J%+7kaJXojXVMRZ4bFZm2w#d?bTT5x5;$SJ`VdF)WG_}%)wsn0Hyq%2qpr~Bc0q! zC9h1C!{hYkB@?6`y@i6DBR{P=jziDN8p2{-c%I4{;C3+8j*9Xt5ln>MuQ0)ks~7!> zdlD@zjjs_DcX;ko7e>)r&~%!I3W4UfB)-$)R%0RueNnWsCKaxFf;d?62667t4Ga^y z{eQVa7whyO;~}~8GB1MCh3itCHX_4|J6NHT^(1_{+k^hV15}~?(G)86j|HWyk1H0) zdLp6i;*gc^G<@ouj zxaWQ`Fh{Oassq1yd_)7>(xJObR&!{b|XxF z7GUk0?N3Eitl1^?M3wgp~DYIZBodk+L=g(((;N#FF?JJd_lJ zRmLsU!dY;zauUuHOG0q0>RC`WvAEzdgyr7v{_AeA0wYB&~k*`n-z>SVXDP8 zCz-mlz^%J!BgHs5UtVDITdPY5N8Gge1M`je=J)no2+cyyi(wq`#pm7N?9J!hfChow zaEFO+vx4_Ygkj9Sd@yBVo3#Q?BRG5^t9hX=5!-wzF%=;bklK&nfJ1G4HZ0UYp}&J^ Pa!(#N+!q`3&NBf3&0vXV delta 480 zcmZp8%-Halae_Rvfw|d6C4W{BJz2p>Y;zauUuHOG0q0>RC`WvAEzdgyr7v{_AeA0wYB&~k*`n-z>SVXDP8 zCz-mlz^%J!BgHs5UtVDITdPY5N8Gge1M`je=J)no2+cyyi(wq`#pm7N?9J!hfChow zaEFO+vx4_Ygkj9Sd@yBVo3#Q?BRG5^t9hX=5!-wzF%=;bklK&nfJ1G4HZ0UYp}&J^ Pa!(#N+!q`3&NBf3u4aiy diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 4a473c3b66a9afc29c97be96706a9a23a6a8e8de..3f37e3e00d282d69747cb2909c260e227a4c35dd 100644 GIT binary patch delta 3798 zcmZvfYiv|S6vuNeg;HtDu4pZSc6ljQSeIuNNiB#VXyYa*Deu|`kCex11RoIOp#cS< zaFL0c$_gk!t5ya&mO@#c(o&#Eco!@Q!Kk&C4~SNbo|!YVdw1J@>HYuj%x~tLIWu$j zLa@_?V5j1=b{RtleAjbDZ~5O2dQ*5+@7wL9;6d*(%U=3uXZ0q~lE;d(;d@@%?_CflmJTC_x!!<$dtcUZ zyLmz)UzK@EjiX$?FYAkNFJ3%41yq~hsI#h#WTAVTnt00dc;nd5!@_PHTWh=COynoC zPf&AgvC|)Eu)$wzhgK)?i~cHbXHX!HIO=jTfj3XMLSfhCbW`cE-MHI`Z22m2FIZQzMMDeTzIibpcU~VW%#r=dL#|tDvOGeT!&4bqj^& zk1syZMl3c?1xNSrRm&=z)A87=mepe_yYSbS?*;du*c>oVS4g#+N}uOPS5n7_bL0J3 zr^DJ<=b`nn&ghM?&J0El&nm%u=YFE|omJwgDx_R~~8v}AGI^Cef&s~~t&X?s-|q>{@>aZkCIiq*f1st=ubs-U`@Jiexa zri&@fv)5GAt3rKk&!M)muB!Z?s(m+W+F`}>sza4v&pb$zr`NY>LGejW|5zvfh)A*H?r6`=!W~QZD};GlAExMmowvVH|(wns(#? z^z8MSlpiUM{Y*k019^6^sg~z9Qqd}h2b;Fj8p!v&^rl1Er8j9q7T=ELV zB@t-pMC0gOrSs6g$D^j2zPk>>P62bpLyfEiaUl+LDFj*y1loGk&}JwUX?FpgRZL2T zvYHjIh9vgU4DfT`i*dkS*aCC!&S-Vg$YZR$3s543%MFp!4Q*OjfmQ+iaLa`t(mzAx;c z{7T7Cs+5Xdj{ufvn-Pd_yw2gO2AJVO8D_ZVA!a!A^l+}7P$0Zd!dAVUC>hEcxgkXI zQ@TU=))1Z%k)@%FMEFK&OK!oDB5Mp>BNzr%DBc?fTXZOIS@~>pKHP7+`m`5i*|1Xi z^7a#cKjeq2Pt=Zwv^aSZGl^h`s8$8gccPgO_F>p3TTGq|DdCRFVrc!g;g>{layq1` z5k&LL&?DSPq!+>pr9{~*pyNqC;quCuQ|Ia;W1+XK0^y$zbk``!P}Zoj5)TL90Jxq| zXKm!x61X4q;$|)cs((uXjtUkf%bb#-R0Zu8uP=xF;2IJ$ zvSN#hl~J8gRtww(wDm;b13eM>c9%|G9D+#mNf1BWlx)n=0cN8@np*r$T z;5)OH*iTBVCGYjbp z^gp8l%KgDW)*dks^qi1}6B_cx@hAxT8d7}5K&nm~2zpM4>yn0?J0Ar>UqeDa8A#I= z13}LT$-1E-9j-?~&?iWFqdv=o_gCElt*)v>@iSz$c=rz|Q-MpxP@R=YwXeG4#oT77 z1Q&f~Im$lpmqC8|r@TDbC%2gRP5MG{jkS+=}FOmfl9_Ie3K~Eyo;D z5pQ&Yg}heV((g9BC7lfqJqPdXJx(4f;+5YkdGtx;h&S|r;Wc$LJoFsAXL>k!s3?cY zUE)Rmo)+eiPH_j*mu{HT`WhyB#ANt1TkP(yp-M88G|Nq1Im=e75*%uXCkGoMdQM`W zVNpbsMC|aSB*q>x!u7NvW{xmK^qj;GM@JD+5^>>}Hdkip3x@bjwjrYDB(@(PMMO!t z%)BRF{61dhveo)DPd3yCCmAYwnwmQcbGcx;p-Rb6(mW^R%6Yb09c-j4a_tO5M30Dg zKjw+6MHXG!QZZC?XP3{h4g*{Dij|~(Tga9zuQ*$xs--*S%&XR+HiE&6NZ%<}A3RbEtC6P$d1ydI zC|qQsrm_M;fQr?Tj-^-@5bYC+21F=W6QWT|DIXB67(Fv*X7}#4{nGpY-bmXy;Z1|Fw-Fp@E z>mRIeyFR153-9;f-|&$SJUC*MFWi4%hUuTmW)FmP9>}Oy-RwYzc2_%#iEk5^08f^AA*rB(R_>cZ-aA!~;jyRffGJ&^Gzd&I($)aSHb$rP~MS?_ZD~$hg@0r=cfrSXkA?$giZSfeMa|r`?7Rv}n%wsat*36G z(EOoSk8}}>jZ?wVJ$&7&O6PPu_PSNgn99C<$?8MkelRu%%+nuI?Y6R~_%~~*W5oI8 ztyrhWhFIs$O|i~|EwRoVMh?#^#eC;}p!1zo>d1G?4$Aj{gam$aC+53oM$D(xcTMK4$M?lJ zH)>*?#D-XB;K^9$-tS_aF{dLAPdTsmWgum7wa zc>q0eX)fhQike?Z$YUVS4z@M$+*T@Dqbd>NwhZlIs zU%Dg$9ldBAovU;n`nNu6s_6%sAnX({S3K0oN)Tt`K$k+Gqd=goM-6R*LXmb8&{@T# zWGHJ{$=i^`-kSq{?wb||Y|3^h?vv5!q>;y1MPHyq3YQxqryJU|umZPGrYb1=*+e(H z%?+Q}O*4b6W&jkk-u*%4T{apVj!j^SuZ80h3(~X_fuTUPDT0H6ic@-2opSbhqInqX zq5Mk8P^y%QFYX2`(Jmtp`@PQLs)w85LK$Yb_K{{d^z?A9&!IqgAAucuIZ-l{b#g<9 zy}SD$E@3TbijBxVx95K*fNVAu>ZAMC@hPqvsf3sS-zmBrBdWAkr`;>2^1 zrbZC$&%+(zMk2is)+i;)=K&p0@(Gt$#++KLi;RVqTLr?u5a_N^lA)|qWhL$kz!7jg ztj^lVttD_j=*7)k3{?NpOHcz+X>MGh!XzJ`>1Zy?pD3~cKN(2d z1p`6P3Ca3JLwa0_f}l^3idKD=3GeT^1zP=8iQ;F-eDTH=C|7|?#ZaA=NwqJ!<3({h zRDp{=vm9j~_{$(a{L@SeJqPpJKTakp#S~|5z|qddEL!3$I&MXBH%o6L^c=jxo|a>d zsE9Wq!9rfAZRvL#-iqFahn|CXx}TGWig*<_OCEhvIpPi7W_WD_3=cgA@9{gFJXDm! zgbFRwX#f5KoLSMD(1* zp`)XSD2dqP5lM_aWQ6N6L(Cj&i0CbG+LoH3 z(bIcgT~odlmh+lIsjsQ{*DSoIVxv)aZpRucZH$_eyn!DGSyv)=wiOP1Udi! diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index 0dd99164d02f8b6f03f87377d302ebd3bc14b6d2..2e70b9a1bb1cbb9e142f2e4e0e4e1b4608e42e6a 100644 GIT binary patch delta 64 zcmV-G0KflC5v0`Qh0d|wg29W`Vvs(uU0Rd;TWC#TT0-y?$J_;C$< delta 64 zcmV-G0Kfl $FFFF then begin + requestConfig(bus, slot, func, 1); + data := inl($CFC); + device.status := getword(data, false); + device.command := getword(data, true); - requestConfig(bus, slot, func, 1); - data := inl($CFC); - device.status := getword(data, false); - device.command := getword(data, true); + requestConfig(bus, slot, func, 2); + data := inl($CFC); + device.class_code := getbyte(data, 3); + device.subclass_class := getbyte(data, 2); + device.prog_if := getbyte(data, 1); + device.revision_id := getbyte(data, 0); - requestConfig(bus, slot, func, 2); - data := inl($CFC); - device.class_code := getbyte(data, 3); - device.subclass_class := getbyte(data, 2); - device.prog_if := getbyte(data, 1); - device.revision_id := getbyte(data, 0); + requestConfig(bus, slot, func, 3); + data := inl($CFC); + device.BIST := getbyte(data, 3); + device.header_type := getbyte(data, 2); + device.latency_timer := getbyte(data, 1); + device.cache_size := getbyte(data, 0); - requestConfig(bus, slot, func, 3); - data := inl($CFC); - device.BIST := getbyte(data, 3); - device.header_type := getbyte(data, 2); - device.latency_timer := getbyte(data, 1); - device.cache_size := getbyte(data, 0); + if device.header_type and $7 = 0 then begin + loadDeviceConfig := true; + requestConfig(bus, slot, func, 4); + device.address0 := inl($CFC); + requestConfig(bus, slot, func, 5); + device.address1 := inl($CFC); + requestConfig(bus, slot, func, 6); + device.address2 := inl($CFC); + requestConfig(bus, slot, func, 7); + device.address3 := inl($CFC); + requestConfig(bus, slot, func, 8); + device.address4 := inl($CFC); + requestConfig(bus, slot, func, 9); + device.address5 := inl($CFC); + + requestConfig(bus, slot, func, 10); + device.CIS_Pointer := inl($CFC); - if device.header_type and $7 = 0 then begin - loadDeviceConfig := true; - end else begin - loadBusConfig(bus, slot, func, device); - exit(false); - end; - //TODO implement other types? + requestConfig(bus, slot, func, 11); + data := inl($CFC); + device.subsystem_id := getword(data, false); + device.subsystem_vid := getword(data, true); + + requestConfig(bus, slot, func, 12); + device.exp_rom_addr := inl($CFC); - requestConfig(bus, slot, func, 4); - device.address0 := inl($CFC); - requestConfig(bus, slot, func, 5); - device.address1 := inl($CFC); - requestConfig(bus, slot, func, 6); - device.address2 := inl($CFC); - requestConfig(bus, slot, func, 7); - device.address3 := inl($CFC); - requestConfig(bus, slot, func, 8); - device.address4 := inl($CFC); - requestConfig(bus, slot, func, 9); - device.address5 := inl($CFC); - - requestConfig(bus, slot, func, 10); - device.CIS_Pointer := inl($CFC); + requestConfig(bus, slot, func, 13); + data := inl($CFC); + device.reserved0 := getword(data, false); + device.reserved1 := getbyte(data, 1); + device.capabilities := getbyte(data, 0); - requestConfig(bus, slot, func, 11); - data := inl($CFC); - device.subsystem_id := getword(data, false); - device.subsystem_vid := getword(data, true); - - requestConfig(bus, slot, func, 12); - device.exp_rom_addr := inl($CFC); + requestConfig(bus, slot, func, 14); + device.reserved2 := inl($CFC); - requestConfig(bus, slot, func, 13); - data := inl($CFC); - device.reserved0 := getword(data, false); - device.reserved1 := getbyte(data, 1); - device.capabilities := getbyte(data, 0); + requestConfig(bus, slot, func, 15); + data := inl($CFC); + device.max_latency := getbyte(data, 3); + device.min_grant := getbyte(data, 2); + device.interrupt_pin := getbyte(data, 1); + device.interrupt_line := getbyte(data, 0); - requestConfig(bus, slot, func, 14); - device.reserved2 := inl($CFC); + DevID:= PDeviceIdentifier(kalloc(sizeof(TDeviceIdentifier))); + DevID^.Bus:= biPCI; + DevID^.id0:= device.device_id; + DevID^.id1:= device.class_code; + DevID^.id2:= device.subclass_class; + DevID^.id3:= device.prog_if; + DevID^.id4:= device.vendor_id; + DevID^.ex:= nil; - requestConfig(bus, slot, func, 15); - data := inl($CFC); - device.max_latency := getbyte(data, 3); - device.min_grant := getbyte(data, 2); - device.interrupt_pin := getbyte(data, 1); - device.interrupt_line := getbyte(data, 0); + console.output('PCI', 'Found Device: '); + console.writehex(device.header_type); + console.writestring(' '); + console.writehex(device.device_id); + console.writestring(' '); + console.writehex(device.class_code); + console.writestring(' '); + console.writehex(device.subclass_class); + console.writestring(' '); + console.writehexln(device.prog_if); - DevID:= PDeviceIdentifier(kalloc(sizeof(TDeviceIdentifier))); - DevID^.Bus:= biPCI; - DevID^.id0:= device.device_id; - DevID^.id1:= device.class_code; - DevID^.id2:= device.subclass_class; - DevID^.id3:= device.prog_if; - DevID^.id4:= device.vendor_id; - DevID^.ex:= nil; + devices[device_count] := device; + device_count := device_count + 1; - console.output('PCI', 'Found Device: '); - console.writehex(device.header_type); - console.writestring(' '); - console.writehex(device.device_id); - console.writestring(' '); - console.writehex(device.class_code); - console.writestring(' '); - console.writehex(device.subclass_class); - console.writestring(' '); - console.writehexln(device.prog_if); - - devices[device_count] := device; - device_count := device_count + 1; - - drivermanagement.register_device('PCI Device', DevID, @device); - kfree(void(DevID)); + drivermanagement.register_device('PCI Device', DevID, @device); + kfree(void(DevID)); + end else begin + loadBusConfig(bus, slot, func, device); + end; + //TODO implement other types? + end; //if device.class_code = 1 then ata.init(device); + pop_trace; end; function getDeviceInfo(class_code : uint8; subclass_code : uint8; prog_if : uint8; var count : uint32) : TDeviceArray; @@ -395,6 +408,7 @@ var devices_out : array[0..31] of TPCI_Device; begin + push_trace('PCI.getDeviceInfo'); count := 0; for i:=0 to device_count do begin {writehex(devices[i].class_code); @@ -414,6 +428,7 @@ begin end; end; getDeviceInfo := devices_out; + pop_trace; end; end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index dda815cc..6b1329d2 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -179,8 +179,6 @@ begin console.writestringln(''); console.writestringln('Press any key to boot in to Asuro Terminal...'); - //GPF; - keyboard.hook(@temphook); util.halt_and_dont_catch_fire; diff --git a/src/pmemorymanager.pas b/src/pmemorymanager.pas index 18fc13c5..2ca3a50a 100644 --- a/src/pmemorymanager.pas +++ b/src/pmemorymanager.pas @@ -48,18 +48,19 @@ begin push_trace('pmemorymanager.set_memory_area_present'); FirstBlock:= base SHR 22; LastBlock:= (base+length) SHR 22; - if (FirstBlock > 1023) then exit; - while LastBlock > 1023 do begin - LastBlock:= LastBlock-1; - end; - for i:=FirstBlock to LastBlock do begin - if not present then begin - PhysicalMemory[i].Scanned:= True; - PhysicalMemory[i].Present:= present; - end else begin - If not PhysicalMemory[i].Scanned then begin + if not (FirstBlock > 1023) then begin + while LastBlock > 1023 do begin + LastBlock:= LastBlock-1; + end; + for i:=FirstBlock to LastBlock do begin + if not present then begin PhysicalMemory[i].Scanned:= True; PhysicalMemory[i].Present:= present; + end else begin + If not PhysicalMemory[i].Scanned then begin + PhysicalMemory[i].Scanned:= True; + PhysicalMemory[i].Present:= present; + end; end; end; end; @@ -168,7 +169,7 @@ begin if not PhysicalMemory[i].Allocated then begin if alloc_block(i, caller) then begin new_block:= i; - exit; + break; end; end; end; @@ -181,19 +182,15 @@ begin push_trace('pmemorymanager.free_block'); if block > 1023 then begin GPF; - exit; end; if block < 2 then begin GPF; - exit; end; if not PhysicalMemory[block].Present then begin GPF; - exit; end; if PhysicalMemory[block].MappedTo <> caller then begin GPF; - exit; end; PhysicalMemory[block].Allocated:= false; pop_trace; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index 7367eaf2..fca9c038 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -190,14 +190,15 @@ var begin push_trace('vmemorymanager.new_page'); new_page:= false; - if PageDirectory^[page_number].Present then exit; - if PageDirectory^[page_number].Reserved then exit; - block:= pmemorymanager.new_block(uint32(PageDirectory)); - if block < 2 then begin - GPF; - exit; - end else begin - new_page:= map_page(page_number, block); + if not PageDirectory^[page_number].Present then begin + if not PageDirectory^[page_number].Reserved then begin; + block:= pmemorymanager.new_block(uint32(PageDirectory)); + if block < 2 then begin + GPF; + end else begin + new_page:= map_page(page_number, block); + end; + end; end; pop_trace; end;