From 39ca6eed6f6993648a7c8a7e717cb2bc6a90ac50 Mon Sep 17 00:00:00 2001 From: kieron Date: Fri, 19 May 2017 23:46:20 +0000 Subject: [PATCH] Virtual Memory Management fucking works! git-svn-id: https://spexeah.com:8443/svn/Asuro@125 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5083136 -> 5087232 bytes bin/kernel.bin | Bin 28900 -> 32996 bytes iso/boot/asuro.bin | Bin 28900 -> 32996 bytes lib/bios_data_area.ppu | Bin 2278 -> 2278 bytes lib/console.ppu | Bin 16074 -> 16074 bytes lib/gdt.ppu | Bin 2777 -> 2777 bytes lib/idt.ppu | Bin 2969 -> 2969 bytes lib/irq.ppu | Bin 930 -> 930 bytes lib/isr.ppu | Bin 1815 -> 1815 bytes lib/isr0.ppu | Bin 1981 -> 1981 bytes lib/isr1.ppu | Bin 1981 -> 1981 bytes lib/isr10.ppu | Bin 1994 -> 1994 bytes lib/isr11.ppu | Bin 1994 -> 1994 bytes lib/isr12.ppu | Bin 1994 -> 1994 bytes lib/isr13.ppu | Bin 1994 -> 1994 bytes lib/isr14.ppu | Bin 1994 -> 1994 bytes lib/isr15.ppu | Bin 1994 -> 1994 bytes lib/isr16.ppu | Bin 1994 -> 1994 bytes lib/isr17.ppu | Bin 1994 -> 1994 bytes lib/isr18.ppu | Bin 1994 -> 1994 bytes lib/isr2.ppu | Bin 1981 -> 1981 bytes lib/isr3.ppu | Bin 1981 -> 1981 bytes lib/isr32.ppu | Bin 1972 -> 1972 bytes lib/isr33.ppu | Bin 1983 -> 1983 bytes lib/isr4.ppu | Bin 1981 -> 1981 bytes lib/isr40.ppu | Bin 1972 -> 1972 bytes lib/isr5.ppu | Bin 1981 -> 1981 bytes lib/isr6.ppu | Bin 1981 -> 1981 bytes lib/isr7.ppu | Bin 1981 -> 1981 bytes lib/isr8.ppu | Bin 1981 -> 1981 bytes lib/isr9.ppu | Bin 1981 -> 1981 bytes lib/isr_types.ppu | Bin 1423 -> 1423 bytes lib/kernel.ppu | Bin 2165 -> 2158 bytes lib/keyboard.ppu | Bin 2966 -> 2966 bytes lib/libpconsole.a | Bin 64564 -> 64564 bytes lib/libpmultiboot.a | Bin 27222 -> 27222 bytes lib/libpsystem.a | Bin 127680 -> 129474 bytes lib/multiboot.ppu | Bin 2886 -> 2886 bytes lib/pmemorymanager.ppu | Bin 2424 -> 2274 bytes lib/system.o | Bin 17992 -> 18236 bytes lib/system.ppu | Bin 9499 -> 9583 bytes lib/util.ppu | Bin 6538 -> 6729 bytes lib/vmemorymanager.ppu | Bin 2357 -> 3995 bytes src/kernel.pas | 12 ++++++++--- src/pmemorymanager.pas | 23 ++++++++++++++------- src/scheduler.pas | 2 +- src/vmemorymanager.pas | 44 +++++++++++++++++++++++++++++++++-------- 47 files changed, 62 insertions(+), 19 deletions(-) diff --git a/Asuro.iso b/Asuro.iso index 389f2825dbee306a191ba791a91375de38044f47..87a71e022d05f7a3f79cf2d0f9e8a672e6cb4ead 100644 GIT binary patch delta 18827 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 U{{8;%4E#F-|Nk=pzm}2z8*E)AMF0Q* diff --git a/bin/kernel.bin b/bin/kernel.bin index 50bc81144415b83149d76e771afdd25c028ada40..b3fbbd146cd4114e2d976d0db62e8fc781a02107 100755 GIT binary patch literal 32996 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 literal 28900 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 T4VsK)$Yh5$iBh*rjF(S>}@8A2J$s{>r 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 literal 28900 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 T4VsK)$Yh5px$7MRwyKZevF5?0KT9ydi diff --git a/lib/idt.ppu b/lib/idt.ppu index 0a206c20ea44f051348e355b660e51789d4cd504..4153bceca11bad0c5ae579165606d34a4c535a9b 100644 GIT binary patch delta 36 rcmbO!K2v-`wB&=`I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21QRM~z0yPcV delta 36 qcmbO!K2v-`wB)Jk$7MRwyKXT60ZVB~W=?L~E(K}x{_Kqpx$7MRwyKZev-ogd|P}m5C diff --git a/lib/isr0.ppu b/lib/isr0.ppu index f255977eb75ca139f913c8fa9a2be1a24604b39a..ef5fd818a8c1b5304f470646048165bc4f672e8e 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr1.ppu b/lib/isr1.ppu index b5313eddef1e8e0c31c081268eda45960aa2e44b..d82a86e0637fb20f0644e9833d7c2eb877d394b7 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr10.ppu b/lib/isr10.ppu index f192692244f27d73411462f9e4fdee2c14bf3dd9..597cc11e6696bbd38dddf79eaec1bf6927e168f4 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr11.ppu b/lib/isr11.ppu index b775a1545ac67085ac20f6f5b3c9844590304dfd..56baa4f09d7f379445fca73feb36fae04daa0873 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr12.ppu b/lib/isr12.ppu index eb02d3e57f78dc226388350f9fb85874a7b32639..5dffa8d7c9368c994c0448185767ca535146877b 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr13.ppu b/lib/isr13.ppu index 5221f7c69928dde3c99e4aac70e115e9a354167b..09826754d6649b0f0579ed3f53471308e81f262a 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr14.ppu b/lib/isr14.ppu index 3b0fb4476d8adaf0e90fb1a17b781a44418a7e6d..f9b1c99b6a17fcd41d17310ba514001a0769e5cb 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr15.ppu b/lib/isr15.ppu index d720888970d1c2627fbd7cb70069cb4a19c6d509..d64ceb8ca874426fed48632a7d8c251dc1cc7758 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr16.ppu b/lib/isr16.ppu index 418a7b608c56a042073a71377e939e8cd32b881f..9f66d2c2ceaa2be68d871f774ef888941117f6a3 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr17.ppu b/lib/isr17.ppu index 76f6c794ff9bff34027bb68879ef44bd4b96b467..523c2966a0c1120c6d7e91cd995aec9ae1656215 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr18.ppu b/lib/isr18.ppu index 940649ec2cf58593a7e3c313c6c36f5caeaf7c02..147eeb354ddbd0648d9a234cd6c4bd393b65f163 100644 GIT binary patch delta 36 rcmX@be~N!XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3i2x12S4p|Oe delta 36 qcmX@be~N!XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvLF@nr;0=)g diff --git a/lib/isr2.ppu b/lib/isr2.ppu index c8b0a4dde9e9c097c7617b5d62918992282003dd..8f9da643f30379f115b4374b2ee3af94bd16b622 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr3.ppu b/lib/isr3.ppu index e8ff35a0fc8ff31477658209723051c6e62bf2a8..a7abd107444cc62af6b8e953a13e8d4abfafaa0c 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr32.ppu b/lib/isr32.ppu index db28b7ae5103ccbe23194e80a83c9be64f0cf89a..668a3864b206c3f679887aeaa3f28ce364f6b64d 100644 GIT binary patch delta 36 rcmdnOzlDE7yyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3iuwe%P2q_L5 delta 36 qcmdnOzlDE7yyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvHtYZaunkWD diff --git a/lib/isr33.ppu b/lib/isr33.ppu index dacb7aee4077f986cc0054081ac93ce0493ce549..6bf666e13e8db9efc1b892d4279cdb50714cb034 100644 GIT binary patch delta 36 rcmdnbzn_0XyyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3iaAyYq3qcM% delta 36 qcmdnbzn_0XyyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_Kqv?(6^r$PI7+ diff --git a/lib/isr4.ppu b/lib/isr4.ppu index cef1408687c472849c46bc282fd6d51639f8dec9..c9abc04f32f08acee528ca3b0ff5e20246132ab4 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr40.ppu b/lib/isr40.ppu index 2d3ad2fe09fadf8f8421d23e6e2e2a2135e58adf..67318eb747576058202dbe31f314905eaeb19b69 100644 GIT binary patch delta 36 rcmdnOzlDE7yyS!3I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT3iuwe%P2q_L5 delta 36 qcmdnOzlDE7yyU6s$7MRwyKXT60ZVB~W=?L~E(K}x{_KqvHtYZaunkWD diff --git a/lib/isr5.ppu b/lib/isr5.ppu index 9850a26c5216230c3331273b59ce82476910ee61..e112eb478e3924a38b6a848db0f5e20f928d6fd0 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr6.ppu b/lib/isr6.ppu index ee3ab42ad7e6afa64b50ae00ab749867f0c99fb5..96ed68736fba71e2660e33cd64459418f252fe33 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr7.ppu b/lib/isr7.ppu index 598005ddc3e161ed26ee92967ae0326393ffc1f1..c7510aaa8d7199f8c24be9f2f73d755cb414d12a 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr8.ppu b/lib/isr8.ppu index e3e839e14abc28c2b221fd9c321d8f532cff764f..0a4cc43b76ee4c41b4d6df48e966feb45c1dda80 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr9.ppu b/lib/isr9.ppu index 1137442acd9f1d03468624d16a301a1737b064d3..0b01677396f3a869319860d72b0951feb7ebb4c9 100644 GIT binary patch delta 36 rcmdnXzn6bPtmK2;I#Y`*YTqyb0ZVB~X3kZeT{kV5!cT21b7uzt3ULlJ delta 36 qcmdnXzn6bPtmLWc$7MRwyKXT60ZVB~W=?L~E(K}x{_Krq?(6^q_zh?P diff --git a/lib/isr_types.ppu b/lib/isr_types.ppu index 938a2a1cba08e33b6a009cfc1d8538a42e43e732..21010f082c0cae557637b598dce0b5b05bf5224b 100644 GIT binary patch delta 19 acmeC@?&qG6&hcQk&eS4{+BX~X6<7gIl?Uhm delta 19 acmeC@?&qG6&T*>xahZK6ARyGx*p#K2k%5`vK!6g18wUeJ?mw;hmAmWiiZd`U$WBz$mz>=!AIZkZ zz`)4NR$N(JlA8Nqx6afei`q96Gvzt1>g>8{!4!UK;)InP+gjfH{aX5#b+RL)Fh|r+ z`&}|iPG6W@#8|`VIr%-KJ|o{`d8Vw%_RKn)JDIW>83iW?GKo#*W;w&iKluiW4x_+i zR#r}ERb&TwiK-(Eb`6fSP^XHRb0&<{0hH0`Ly9t{rP)MC=as_*|pe~ZEA&_k~ n`3bwftRPT5kBYZzke{nhd}dx|2?L`9BP+-dMh54}0UW9TcMU-n delta 294 zcmaDS@Kr!DARyGx*p#K2k%5`vK!6g1F9!p|6-8f*EMvP_q6`cSauXHxCG%3`BV`yF z7#Nw^iYtptQgcsLKQ7ae-gRqYraVV(+b#uZ^Zx9K6IOD}u`9lo9^biVvLmCg+>B@8 z)6BLU@dBE{z*(G}k(yGPlUk&*{EW1RrfJmV7{(e#*~vE<^%?mmb24RZp3juc$S5>9 zkV$N^BFh;@fywV!bQlFEOS4)s3TzH#tz%RX2O7jE%ZFkd1EUZdE64^(kfbR8%;3S{$5zRT_pbcQa6 LG^6-rPYzW89;`=0 diff --git a/lib/keyboard.ppu b/lib/keyboard.ppu index 740580be98c7e9ff0e471e3fca293c43dc03c69a..84a5660f947f24f2e020ce1c028f281627a4788f 100644 GIT binary patch delta 31 ncmbOxK23Z=D#wG}I#Y`*YTr!EmF2jqv+Je>Q~0TklUTR`)|d?| delta 31 ncmbOxK23Z=D#xkn$7MRwyKYU)mF387+od3F-k-g35(_r~&+QCf diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 308b368dea7dffdfaa029a8e7b9cf6d112ff6aa7..1f73006c3e0afabcd9755d1b97dd4f462d2269dd 100644 GIT binary patch delta 812 zcmZuvT_{6g819@+6gn$EXEi@-es1JA+elnUX-Y_HiiTJzB0ptCxj0Huv{v7;3u+{- z-1vD{lEe)zxKJ(>H@kF!UC2U;z4N_8xqF}UJn!>9=l$OBt1kSi^W~>hTCH~bt|dS1 zyJD&&gDWkjOTt`uS_6?4N*UjuK$Sj;_0`GHoaNM$I3&ZN>?anjhD~7(VaH(;Sm%U+ z`DP7l+>^uF-04gaO|WZj6uHAysS&b^_NnEn^!lf?2&|yk0Jml9Tn(CXM|7X(S-9r!^qs|QOxYw0R z3qajyPg18T#=ZV?>OxW(_)WseV3LglWY`!{NQ@&M$MVP+S6MQ7Ni4$5DgAG@eCC5# z>~(0_#3J;}brZxvj|&g99fU87_dn1G@7`yEs>GlF&`-}F2{Z^GEnf_y8STtCbu?n-wB296^+4VfJ7;ET8&EqT%_r~I})c<06V-$-e`raK+QbZnQin6#$Q8Z2cG7Abx zQ#KxFN|M-M!9rOmHnX(wSjdDFbH;xLWp}>&edjyhJ^u;68p5xJKu(g=>2PT~_MDXO zim8$e-jt{z0kh$86-1UNrG0+_Rr(}0P$ffshQ~w+ip!@t)nIu zm@=^uUlwcXNo9&?fgM||$Q>?=%#fMCM=h5{S3jj)V7Ub*xG7%aYS5KiqPw(fDs{y! zKxg?rd16RsWh)N}fhtQf|C4Pu*)ug3eWh-dd&Hr)ahYJ3)&rf*K7#1@yKTv| z0Mre2By_rB-t9i4E+m!S-y|IOCD=$%hV?;(#5m$%*hk8q wVRGw`RQP%=V7Boq(iIP!Ud<4TvHGu7D`#=IKN^dr{uj$1rC2Q9_jWFR0qCOr6951J diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index 74dae6b18842c238fd3c52112a415a0bbcc5a53f..0053aa03b0bf6185a137b656fe9278ddb8ed5692 100644 GIT binary patch delta 545 zcmcb1h4I=I#tE{lCWeN_#v7IRSs|>+7sSOj`>_6IM&jxTZD-;)*2~vdFf_3=H3I7Z zsuSOA&+~%`U7ab0Im>TrG&Pw;6>tpHSP!$OrNhnwM^B3n27}ZD!GT zWr6!pd~>y#6yxT4lLw3_V!sfc6W=`1k^|X*Ej9}gT=C7_&Qgq%>rDhFFJR)C{Mvo( z=6qK{Mm_^fcXT`dLpF7(8xO)5vCU^ZPa<uHF3(}u40RXPqq4fX& delta 545 zcmcb1h4I=I#tE{l#>R%GMjMs*Ss|>+7sSOj`>_6IM&jxTZD-;)*2~vdFf_3=H3I7Z zsuSOA&+~%`U7ab0Im>TrG&Pw;6>tpHSP!$OrNhnwM^B3n27}ZD!GT zWr6!pd~>y#6yxT4lLw3_V!sfc6W=`1k^|X*Ej9}gT=C7_&Qgq%>rDhFFJR)C{Mvo( z=6qK{Mm_^fcXT`dLpF7(8xO)5vCU^ZPa<uHF3(}u40RZcnqAvgd diff --git a/lib/libpsystem.a b/lib/libpsystem.a index 777a67802a473d3073d08f69e617b955d9bb0ca1..fc7c73a544a4a1e8d4d27c7a0555391e04960b6f 100644 GIT binary patch delta 7930 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 XeeW!4e-pdD@8NK*Z&y`wRlt7%$LODR delta 7531 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 D0Sft= diff --git a/lib/multiboot.ppu b/lib/multiboot.ppu index c97dd0c2aefbe67b49d53c2ea35b6ba5f13c357a..831f0fe67cd4db6c21c413d7a88fb06f899d460b 100644 GIT binary patch delta 19 bcmX>mc1&zSI>&?EI#Y`*YTs~!Svmmc1&zSI>)K%$7MRwyKZgFzs>~!S(*tl diff --git a/lib/pmemorymanager.ppu b/lib/pmemorymanager.ppu index de5668bdf47664f4b6f15050ba29fc338f20d566..a10ff16d2ccdff2aad66fc81c3ccd9dd86db95b7 100644 GIT binary patch literal 2274 zcma)8%}-N75Z~E;@nwNhiWt;LDiA>vAtszq#A;9qO@R=^SPDF}+OM>zA$}ypgE5{w z7*C$`;=h2#c-D&-qu#uD^A7;3sq@?S_Vq(ZnPg{Y=Qle$vpc)*MIy7Oht4=3lW>TS zk#4bBC&bn5vzuLSK7VN!LIk*hnz<2qvneB$$*rg2>G%yJ=Y(<=a0evmtAtNw6uWN_d`&t z3yU~O)bYr{Vv`mI72+Y`g4)JeQ8IQgiupXJq;%UJpjCK%IquN7yEJFeHf=PQQ=Al+ ziaQkNKueSS+L3Y(q&B*@g?3iy^?$9_lts^?O0%^L)8UjasJF|ja&ak6I1xUGKdR6c zAS-Fh#nKRvlhA2;&w_s@a&tYOSdJ&ds!~JgwcI)khzZk#z@f+mBDj*aQ@I5UB)1i^ z1G^x`U6|*IAKuGJ=|H(^kvQ%!o}3a7`yL zK4f8tznfd1H7=^+vU0WqB|A`3fzpm;E~v1?BK0Hi(^|>>8OR<4TOKf!6;v$B5muao zk~$l$B&jVD4uz+p^Wo9S(MzFdY~3Q2 zT1sY?ZwvATbVhmBf*x=~MrQg4cx0#V>(R!KV9E4^o8L|!8eMsKP`fZb3~kldfnRO& z#_?RXz;0XL02}cs1VO7$0YBz0wYYlo4`aXe7l9vg6GC?6$3E8HTp;X*X{f0Z{>)K**XqRZjF5sZiPNh6&1p`VrtFh8C?rmKi~W>yp`{`pbqo=8NYAEzhU)MXu&jnTUjm<75@Q7xB*T8 literal 2424 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 delta 5877 zcmYk=3vg7`9mnx=mL$vDECdLYVkTe`qJ|8_+DeE4lZci9hPN$kk%vM=K|$1-_7X)0 zke69-v;}zCoAs>DBMP&6AQ^Vcpv90*Wod^n`>{vGnEtA zzYCO;@oMEvyaW67=i$T3!6*u6C?vTJOvjDNf5dU@M&G^?Co6Bmw<#aM`N}7-oCkgn ze2u5yF#A8=n35X>(*>_k&cvIP@5X;q9)qi~A7C-ARi2NVus;W0#&PV$76&1-fkF}m zKf>KOL%AB~Vt*3W<6+9pcp~oL_F(4(4v}&uF2VjP7>pNs2PR}DP*~{;cotr#{30&L z{u`{r`;_j~j4TH^2~=cpQg89LP!6lR{4l{xa-`Gn9wm9Obb%UwJwn zhTFLf`~go;F2hr?-ve9l>=p;Hv%ZQ#iCW+zyioZ(mJ`npuo71O*jYp^|hm8 zzL@RDR+vg*7zMw90a(s#?*cp#b0}l|$Kt8V58;{EAA%D6v~n3<2Il%a!H*9PXp~zk;)6|N9keqmZjyg@-DCh{q_O!;_S+ z;+fcQumfk?T;&v8qWb6HV4*4urLYq7C1bnj0lZqd7;nOUx-G#wl$YT{IO3LHk54M^ z!2VC37Y?=O_&>#DBYzQ&>`6LIP;S6wEzPlZ%Pp=#xjU{@z7j z!;@|}FykmpyHPO3m|6My21@Y)mto$ARQaO?9 z?SgV&EYF30fQ7i7@~`n&XXgK~nM>hUs>4z&)30B_R=iYsFW#tp3~y1c!&S=P;e*QU zm{k7LVwwNLCY3^+>TsvbI!rcx03&d`@)Uft^6zmU<)yg4@n61j)aD{RPu2Rm$2bG88kCmt3Q_A!3*E0Y60W6^) z^S$?4ERV|GJ8@X~Fz&8ggL^4AVtJDG%g6J)ouizLi(=1T^pL9{i^4Behr#$a%H#25 ztKlY8&02w?4Saz08*K=*b z&RhGsF{dSGa;I?lmE?9~E=g8$la}0JObQ3l?qVXAq+L!sS-!+2VJyQME(u0SjyGnU zZOj@;o~quIrIQMcn(F$E7{Dw%vpY*vDb__>inrB|9$EF ztz^i?UchAlUF1;n14)`Bmfu?f*+nBH7Ke$+)(B`>zd2f#G5$87~>Hn6i z?~2u}`KN0?;@Xc%wza0#)jyYHAYZlO_}li@{NNfwauU)Imh5OvH%Uf%hh)8py$6ej zirMf;S05*tXw3{s+U50D+Mk!?kS&tzWX&qqzDY8PfyZ(DWr6)t=xWVT*P%v|-;Vz4 zY~^h4Va-jF^iPrOY0d4<10*@)3Z3tlWB?;1Q>>Zh>hgPue8E|gsn!I6Yj{Djk2TAk zS4*Z@v(>pmGQ*lG=Yx`&4A?n#x$@gqz4QMhvp55}B74lr+ z9?2YQM!EWA=VD2A~{5ACC~BJCs}08 zAXk^)SL8CkS8`}zV{dt~q6ehFH~g*S{nk7pNqx4fKPfrPno?JPQIeDBCCTB|yz1&} zBsrHhNRG6o+|}QfPZ zU?P|h>W3(gs6nX47*T8DD{1w)pC4}6G1n%9m>Ab@_bhyLe04u0eNk4pJ4_BCHe_(2NjybOi-u4@MqAVODGNL zbQQ^v?(uoi9g0%{cJNRMUJfY~#8gNl2|utJ&xJLrfF4%qHng%XK`(0~o(OAl3vZz_ zeY-V%>XH2Q-tNH^=dHwSI7X{+nd1i#ji|I9jS+>?=#EH@8@WDYFMkEAfB8^8xx`)n zX4ibB-P=I#u*&|XwUb=r?rtcQ@}kyo%c8doOViMp(b z%&ocX^<91wGf|1&#avXQ4^R}7XbP1vjXuGOm`tA`8&l~E?B@6zycU!1{@yiPZ<{@Q zVN^l1ew@ zs-#mGnykkazJU^3QfZd8!0gNA1~a`wH*A=Rw5(Ajo@TAV1ZxtfWSyGut87vV#fnMy zBB4~!edtljX)SgsWwZ`&C=xw{Q;JIc_*pS%5Cy7A!>D8(LkH_)*r;l>3(u-?+Jh6S zMEh`BEvEyxpz3r4L9L9AqDiZw*D;_a=q()4Dw^Np6-Vq9?`EAhFr3*kGME>1%Od;o zf5g~1{5_2Q>CxOUpGmODhSMNjp_9;biB6-L^((B?W%?Fly4*C&rOvNvAD0G3{=GPA zv0Z!CH6FK&w=iuGq&vpH;Y+qTk8`XSQDn$;1yzRR@%XXakao^z2gmsZ%em9C=Hg1n z*;1#Y7n#npX>C$amD5qFix0XuQ75R{!BH0ns3jI&0R7UOS2p=u~`h3e4E z+JK(8Om|@$$L%;6k9Bu&va@+d*~{OR%H|V-8l4_HUHIxX$kW{E!220G9UfyCuqx|n z1T{Gw_TYRxc~go>ALm_r`f-O@zi^O8hOAL)!Km3MALp>pT+_W~?b1~nvO`%u+7{=3 LjYJ+7&9Z+0J_8uX delta 1321 zcmZ9Md2AGQ6vuyWw_BiMsiy8V_tDY_5qjEy5!*l`73c!J6s&G(vD+-$+Af8PiJ-<9 zMMM48NF)Uel|MY9SfeP!G(?fqBSa0+Mu}JOB4|_$nx^s1j7*91$7kNW@4J3S=GXdt z^+qDmR9aq{^AL%k7*Cku4_k3ifx4Eh-*5tDwyZEXLAEfFIy6~LZ|MFG6duGu&f zQ7Io6BRUl#9Mvg~8<{#JynwJXYGIu-YD-UF zhoF24@rS5KX-uO8)-s!MZ%n0)*b|ef9WOJxFcFg|gL5(MfvjI;jZ>wub9>gWavy6F zd#SL2Ij3>3x3i-zmG1Ndc5*<>4M;F&H7EO0$;?dtBP`3Vyq1~Qkna3{#BMwsH|QxG zj;pj6@5L?JkDuc5#!=3UxS7q&klj9*o$305KUNEibL{@Ep1y4AioUP<*{yE&wkx;h z4J0L9JI*0dx4|9ETzhM}Cv%U#t`j&YX>{E0yahzF#ub4Mrn*9~f zRhyPz1@jhkt0hzisPkzRj;Teo4&SIUwPIS;s12%SQU_`@jk=L!_F@-v0MBVU-H#KR zr9Q}4*W17y?iTb8Y?(QiM-kNL)00@B8#Ij7dJ#Q~etiKQ!~wmW4&zh3gkHjwuF`9e z44ICi+EACigZY#w*M-_=x!> ze&M>`Vz#Ml_>oh+qkwZ1{hV4}Cdl$~FZk;4Wwok8knO2|`fZE28 zu+x-DV8m1?7spJM=3`BtiTV^nxER^f=H(oHyRNmPsTmaN_C#~*Uyn`%?pvc-aydhu(p+^)LD z`4=_1&Dr3m6_4AMSGBR{ZpTZ@@PXZ~jIue`UVr=g#ucmYN@Y^K_+{Q7fW&6h7Zv>r D=A9XD diff --git a/lib/util.ppu b/lib/util.ppu index 02b996b8eebbe10a1e90ade58fb23e0da4404e04..c8cd40fcd104ce39603d19e58e1da66896025957 100644 GIT binary patch literal 6729 zcmds5TWp+16`u3&#h2KLW5<`+acpnbq0KspFs+(!s~vmOY_r)IdyN%=Sl0G}muz-j z@1|CRQX&F%TZ)Xk}g8tPT*w>jei_mGVl879d`>hV5f7(TZ^ zYS|}^?9pmJpW5Bl{PSy0-2p$d)>8a`=;~!}=cbYmbpZVWX-(ZGdybMAdHzJXYG_o! z%R1!wMSgmH-C-zZ*i`cP4#sLyjkD=QGBc4((2QdTbZ%=gd3Utr1KVD6-C*eKG)&Zc zN!R5@1d35=%cnQEF_XS;HyEG~(wLWcw`ez1t=V`SipQue;~U&~a_U6=vyrET7(>Am zH0GrV){StXQQtj=y|Koka5m49FNd1FMRD5oqMS@bkDpD)qq=P1C6`&s*K&-@!U=XF zyar`nNmr|DR#XxkCf>_%ONTFK%>_Wa84A6$z`8B~t5AHF+A_KUK=RBc0EJTh0C;y3 zK(_@@;4nxRkgEVLp(Qbb{06c~S4h+a;5rmvqPCo{0QTt>n3+qYCr-vwlZo+^56W)6 z7Uk7^Wnn2-T+C;S^@Gyy4uI7u7V;|iG@*qAK9cIkia3Uy{+DW;+xc# zr_JtmIy9&=v+3i}xiiy~8c~zRQo2x?uZ4jpZ5Y{!FpdP5ODh#6d)r(XN`49^)6bCs zqaljgiR?rfcqUtb=77<>0Upy$1X8?vSVpa1V}p zFOR#-S-{<9g_ADeiSg;lL~1-~LF(45r%K5zZ)zuVu*GpV%C z>HfQ&UMv+W+w%OJ_MGA7DWB&l(sf0}d1x+b&wp&Aq8mUGDKCEL0HVL_GWlZ7_(5B4 z{OAGY?X3MfO;nhp9O=ubxwA++Yc7fw&|mZ9Dw3zckr<=;PdqtwUL(!(Tl3NNE;Qexw*1VT2Z`wO za5{c^CZ4u1-0RkWs&!!blz9Z%iR`Bng%ZwszEo5))b8#tQ8zq)Z=wdCzyYm3fHH*p z=|T>=!$$WFPxn`-5!(XpGz~&GSk7Oh>Z3;WZBO-gs4+Gj!M5c~N@9F#-}2<-|Cw}M z({vk}A5dFP*=cIi(=;`cjK`<+o~<=0>>ojPA}j^Bb;Qob`xGMm2Q_Ddw6hjPDF=Dm zDc%EK3W9F++8lEXnYGxj1+iZXqQ4fzel3V+lhOY^9w259H-b;dSe*DSf{@G+D-15>-2R8iYg#Um-x^Fi%Iyo@`d>tw2a2G<< z2zt3fIvl_^i;_J?IBJD762O-Pj2Pij2)nddzU!Q&JRaxnc^36qE8{V83MIUIjcgLK zLER5arCR(CPdp@z)>F`8WR*^a%OIb0cy*bvr>vB_lG0Try+-)C?2e_)7pjtdMtL5}BU+hId#v(?iwv`GdMu%bJE1HCxJs1lH>iqMxYrfJ?ExdK zSYe+lgx7;cco9OzXzAq62%pcLFXwOuhRm>+t$c{`<#HjHTUHV=^5-FEOp&gKD91y8 zxw4{U*xeprU4?>!-!;^sOa=-^w0aa}s9eb|oKteZYG3!XUq;<>Dn6ZxCo?nY@rhH= zRlNvBwjqVEUi3NlUC`h2 z+B^$m$Qz-7rIR`6w(W%!Zm(B-Hh%>AwFk7xZFIwD^L5Z~dToZqG35L8lQ+`aKAXP* z{hrt6S>KM$LG=5R&*oo2|LXy5Mqu-f&*n#csruzuBN z^Bm~Pwr#?gy+$3-jPBAujM4-k#1%JyaT7}?r@lFABL>5SzAHst@|=)09ut{Cu_?*= Fe*x8-XAA%U literal 6538 zcmds5Uu>IK6~E{6pEyaIrA^bMY15>h!&sfJ+E_QrkVu+%o2lc3*ijWtnsFMVcya8k zc2_o-R1N6E5bR+>6A};A-q2J{LSllw0Gp5|2HMl0;(>o-PZRKhP$5I%_q*S{*I$yZ zcG@>ibniX)oO922e)rG0*O{AJxc@V!!ru@TQa_)ItEEFqtzCI@^zg$kt&S_D9z`KV zP(;EP8|6xv>;i>*$$2pf?^`d{`=1AF+bUAkV@ zH61CL*Z%qhd^ES1%co{mFkbeF5*33q1VuOqkf`i>U*&Y(VI z{YRUDG(Xkd$`qpvl%7_m4>;4CPQ`&OlY`e*=(89x}*Kd@6j6x6$^ zK%~|bQ(@U={6}s&su|U2P=COV-!kn@X@vVh=~{H{={ltAu&yJzj_SHY*D+mp>bgtU z-MZeR>%F?}u^$e=39tcVVD-kj$Bwv(?)WWqCvKtpg4G4~7g+th&s$v}EU;R4+Ug$M zvI17R)mw1B?a>+w3Y*jY|18zZzK`2UKGs?C3G$k|LGd|il9UCBdesqA;mbO&1ywC6x>5Ea8r#B^r2;_WSF;|yfel*@RRnGJ8ho{h)Ti8G7& zR6^Gsyg~{qWl1`p20P`vma)Zz8o zg@%&BULS^%S0E%^MFEVC1X?f7vmSb;Sb^n;wR{ya(rYLOU`gKF@Bwqv{+I$oKV{n% z;Oj8dPc(UQC*X5FV4`+_FSQSt*~$Puf20k5Mc zNuvJ~ilx7jX$vrJD1|p1oP5av9~vvj5@)vXXnH<1=;zF0rBNtWmkZ~MIIo4TlrNN8t-KA)+u-4oB;V+GjX6rR9q$QP zp49PPcJU5xjdyxBn-2s%yfx_MTD5Uok+15=u}11tAoA1X+scYFu$ehHOj6J%#iD4L6zI!G!Iy?Xanzw$q8_x0wuzz!i6ogeFB&~8v^F347Enl9nf({(K~d!5JhY4#^ADgT9TniR5WWB+0D)J)@`1_sR48DwazSnpf&x8G5rNvI5Tgm z0!$^@gZf>g2dmyA-_|sJ0Lu?)Eh#rmy?UDFa+y?WPVd=Plfv4DrWV zkLmMtPoT8#lTPfHus(`cm2l;i{@0F@UeW7AoeVQ{^RFDIIifWTVB3Fm@E?|l9?K*p z{hXK(ewHZd^A|$Y07m&r1{}hV1tkZpau~{kdL*5AD`oibkF2P>osP-PtJLtcwYqzu z8`a}@*X#+tEtL#dtCO%A)K;9cFkfwWSlMr%a$0UYYA-1{WVMetEq}vNi$~dz)lNct zkM_(t>s#4*XDT^tjUR*YxHjf5uR&+L?XFUC#EzK32!GBvIU(E@SQm>b=aj?-CBi;x zm5WX} zy>UTF!ruW9Jq-g7f6t+f6bdjnsmu;gmb2c@fO=SwX{N&VG zSS#7!K9v1TDEQxE$N5^dUaOQ&c)u&XGXCLpnvmqb+m8XSjWueLT(~FnQ3V4kkoS;s zd%0;okvetaC|Apk%}rUsn5Q^S#?6sdUROGs&L;{qYuYl5TRjx*=WN#C8*n`kTm$^` zrq5UX1j=@35NWb!+4W7<;P$!_@cAP6m+#Oguk9ZMd|n0rL(^xLnn2lYoZNjs3ix~j z{Lf6EH{$L1z~`^Qzki25N8$4i0iS;X|Ir=#jKk+Y13qtn7fv9EM}7ijxAU36 zm@eZ3tm*+jVEUZv2^4mBa|7|d9}W0SfIngS%*PWbyY=~LjCm;F^K;;*?$GCP_{;=+ z&VgUNZJ%)FZb}b4Pm~NNP}>BA3*S#*+;GxAhPo@^G6vIxz79p{2R>~!^ktp{yMtu& EfBsZddH?_b diff --git a/lib/vmemorymanager.ppu b/lib/vmemorymanager.ppu index 652efeb82c1634a3c4b76088305d1162992dadab..93d513c88526ce94f730a14b1e263cac49aaae16 100644 GIT binary patch literal 3995 zcmcInO>A355Z-yQW9PSNVyC5X(=>HyTBo44R4TnhCN@<>;uzZ@3YB)4n$d*U9_N}C$?CLIGELW`c8=p_VW1o8U7mV_3R`P}KrZ0bg z%2@sig29a@`_JB;xg7fN>NimN)=I^4sbC#7u37I+-@Fc4kU#Pcwai*FSo{!F-GM@W zb)!X{h1VeR$<{C19@+NFHYeLY*{1MABgAcYdL^BSFHCo_V5b+8cu9D<$3CFfO~TJO z2>SnPW=0!~%BhC+#9Hi=Vs=ydW00u((#1l!7i<)|4zkmZezdLrxU1jYsPEDf*T?T^ ztFMm_N!Rp(VU-Li=~AuZx<~fBvh9|wPqsW?J*0r1y{ElYtL5Z?-2bN`+nH)V!T%-I zUiH^wWmcx|pw=~%Sp&J@B-OCIVaUqwmlM`1Q#e(xP_1 zwVLrU%RhmRPWB-^;6|QVh%YRrRu-a(=$UxRoJ-7QFvCC9xEu*gwE`0n*!olp`S%id zeX*R{KVqod_0=i&PQw+>~dog&xgJZE)lc1 zxxQ-Ig7%N7xky}L9q3E`c)!SO8PzTBQ3O@_Eq|J>f$1o!pBZ=yXnMho>ahnzWkxe* zG!{$6)9LVRG!>gmMCboikl6UfB%UO`tS;KgaUI|dmVG?Ej zOrhe8Is#jxSc(D1DGeG|ZnNeo#(|#Z-`)I6L4@ha7xR2qPpC2=k!G!2pdgNAf6;o$ z#6coxzuMO%Rv2+ej)#>IjWDwn(@pcF2Ad2<`Y5=E+n(ob%W~`;&@);LL8(v>^9Ec< zlfke?zsP71RlyLJkAGzK(4WXy$rRe{B-)#xUV z{t*^v%5g^+0bC8^7Jw(aspvH!(wmcfGjP;QDXiJ35qaGxDx-(>;_=H#=y~ zFGgeL>{2QfPh{lTWya=G@!1UDkKu37%Q6rMN!Pwdo5?2xK1MUjD$q@Y5%a41-gRYi(j%WYXrN?eKYg^ zX6$->?c{s!M=z3yh#%{7B9jv0@@fC)P3w#6Ng>26Gw2XA(Zueyv+a6&+jh_1bi61g z*I<4Hnw;8ietXCE&$W-OzX@X`?(g}1XZz-74|W%iT)T%=iI&^*-L7*&{^ESS`0!WE z<(Vm#9ofm1Jbf6Zc&^*o*cma~@B~B&CE>Xs4u$2Il5Hi&m26<3X<`{)U0-chstc^s zWDJKyNW>zrtFI`DB-=2N{=bzEgAG4YM`eS9gXx5to;1^v#6P~kNjN*LTn!wCmr~6{ zv@}aOh!>aUo}YZz?3Y*TVoJsXKiK%3s?MF^lLY;#>VF=((jLcHgNfe4TtL@Z(FIv# zjZPr%6UGQzrdj7^TIzU}Uf4u$X!3>-0PN6^g4Qmf_o zzS93?pom{X(}1D~tDR3dyr~eX?lv0{KW?!sWLS=! z>AD+s7Yq0rh2T%v1VRShV3q|`IaS)VJ6#=FF2ruK1%&W*BJjYZo4}RYZ7!cLC?CRi zfMtTCAUQy>X&z};9m6A9>2u~w%%CBX%!K4o*g6!p4yo3mrwRnjK({WIePt%G=Qq%4 z17ZPtUBS1Zs~8gq82nNi4&}FO{0;z`A4iR#O@CaiRL?fntEF1$Or>Eh*Or?&;lCPP ztpsKOEr5ZQkP0q8{C&$Y$^)^Ftd`i*Okzhoofc`|c^F z@(S=hn=}Z%k6dON)1V*N^cpkevMeWp8}GFG{A(g;c1CS=BScLC6`U8K4r|m;Y@27M znJJbT<5U1DXt&vNiy3sAd6t>-(=4N%UWXrsS9KLg+~GM84UibZmOQB5p=YDLgA9EM z`vUyE%N)>sD3ZG%i(0&tMoSK7hC}*|7yOPzGzTw0GKY33TKjwC-_{?zWiIl*w19j6 z2aYiG2xIafO^lv<1~ko$se-X~YQKZl%GuJARbFc}Dz&Cn=f1X@~ diff --git a/src/kernel.pas b/src/kernel.pas index c695e56e..5389c5b2 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -14,8 +14,8 @@ uses bios_data_area, keyboard, vmemorymanager, - pmemorymanager, - scheduler; + pmemorymanager; + //scheduler; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -53,7 +53,13 @@ begin irq.init(); pmemorymanager.init(); vmemorymanager.init(); - scheduler.init(); + + vmemorymanager.new_page(0); + pint:= puint32(0); + console.writestringln('Writing 1234 to Logical Address $00000000'); + pint^:= 1234; + if pint^ = 1234 then console.writestringln('Read 1234 back from Logical Address $00000000!!!'); + //scheduler.init(); STI; isr32.hook(uint32(@bios_data_area.tick_update)); diff --git a/src/pmemorymanager.pas b/src/pmemorymanager.pas index 533b3952..dad6c187 100644 --- a/src/pmemorymanager.pas +++ b/src/pmemorymanager.pas @@ -14,8 +14,8 @@ type TPhysicalMemory = array[0..1023] of TPhysicalMemoryEntry; procedure init; -function newblock(caller : uint32) : uint16; -procedure freeblock(block : uint16; caller : uint32); +function new_block(caller : uint32) : uint16; +procedure free_block(block : uint16; caller : uint32); implementation @@ -24,6 +24,7 @@ var procedure init; begin + console.writestringln('PMM: INIT BEGIN.'); with PhysicalMemory[0] do begin Present:= True; MappedTo:= 0; @@ -32,25 +33,33 @@ begin Present:= True; MappedTo:= 0; end; + console.writestringln('PMM: INIT END.'); end; -function newblock(caller : uint32) : uint16; +function new_block(caller : uint32) : uint16; var i : uint16; begin - newblock:= 0; + new_block:= 0; for i:=2 to 1023 do begin if not PhysicalMemory[i].Present then begin PhysicalMemory[i].Present:= True; PhysicalMemory[i].MappedTo:= caller; - newblock:= i; + new_block:= i; + console.writestring('4MiB Block Added @ '); + console.writeword(i); + console.writestring(' ['); + console.writeword(i SHL 22); + console.writestring(' - '); + console.writeword((i+1 SHL 22)-1); + console.writestringln(']'); exit; end; end; end; -procedure freeblock(block : uint16; caller : uint32); +procedure free_block(block : uint16; caller : uint32); begin if block > 1023 then begin GPF; @@ -60,7 +69,7 @@ begin GPF; exit; end; - if PhysicalMemory[block].caller <> caller then begin + if PhysicalMemory[block].MappedTo <> caller then begin GPF; exit; end; diff --git a/src/scheduler.pas b/src/scheduler.pas index a6225113..2e518b39 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -5,7 +5,7 @@ interface uses console, isr32, - pmemorymanager; + lmemorymanager; const Quantum = 64; diff --git a/src/vmemorymanager.pas b/src/vmemorymanager.pas index 5fcd2c5d..fc10cecb 100644 --- a/src/vmemorymanager.pas +++ b/src/vmemorymanager.pas @@ -33,6 +33,7 @@ procedure init; function new_page(page_number : uint16) : boolean; function new_page_at_address(address : uint32) : boolean; procedure free_page(page_number : uint16); +procedure free_page_at_address(address : uint32); implementation @@ -63,20 +64,42 @@ function new_page(page_number : uint16) : boolean; var block : uint16; page : uint16; + rldpd : uint32; begin new_page:= false; - if PageDirectory^[block].Present then exit; - if PageDirectory^[block].Reserved then exit; - block:= pmemorymanager.newblock(uint32(PageDirectory)); + 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 - PageDirectory^[block].Present:= true; - PageDirectory^[block].Address:= block; - PageDirectory^[block].PageSize:= true; + PageDirectory^[page_number].Present:= true; + PageDirectory^[page_number].Address:= block; + PageDirectory^[page_number].PageSize:= true; + rldpd:= uint32(PageDirectory) - KERNEL_VIRTUAL_BASE; + asm + mov eax, rldpd + mov CR3, eax + end; new_page:= true; + console.writestringln('New Page Added:'); + + console.writestring('- P:'); + console.writeword(page_number); + console.writestring('-->B:'); + console.writewordln(block); + + console.writestring('- P:['); + console.writeword(page_number SHL 22); + console.writestring(' - '); + console.writeword((page_number+1 SHL 22) - 1); + console.writestring(']-->B:['); + console.writeword(block SHL 22); + console.writestring(' - '); + console.writeword((block+1 SHL 22) - 1); + console.writestringln(']'); end; end; @@ -90,17 +113,22 @@ begin end; procedure free_page(page_number : uint16); +var + block : uint16; + begin if PageDirectory^[page_number].Present then begin + block:= PageDirectory^[page_number].Address; asm invlpg [page_number] - end; + end; + pmemorymanager.free_block(block, uint32(PageDirectory)); end else begin GPF; end; end; -function free_page_at_address(address : uint32); +procedure free_page_at_address(address : uint32); var page_number : uint16;