From bc962029905c0b72f4f0028c79e7ef0e77916596 Mon Sep 17 00:00:00 2001 From: kieron Date: Wed, 17 May 2017 17:31:38 +0000 Subject: [PATCH] ISR Hooking. git-svn-id: https://spexeah.com:8443/svn/Asuro@76 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5070848 -> 5074944 bytes bin/kernel.bin | Bin 16612 -> 20708 bytes iso/boot/asuro.bin | Bin 16612 -> 20708 bytes lib/isr.ppu | Bin 1815 -> 1815 bytes lib/isr0.ppu | Bin 1981 -> 1981 bytes lib/libpkernel.a | Bin 26510 -> 26510 bytes src/drivers/isr0.pas | 2 +- src/drivers/isr1.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr10.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr11.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr12.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr13.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr14.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr15.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr16.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr17.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr18.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr2.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr3.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr4.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr5.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr6.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr7.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr8.pas | 38 ++++++++++++++++++++++++++++++++++++++ src/drivers/isr9.pas | 38 ++++++++++++++++++++++++++++++++++++++ 25 files changed, 685 insertions(+), 1 deletion(-) diff --git a/Asuro.iso b/Asuro.iso index ef715f42ef661a632b64103dd9d67b117d04e1ea..0fb402d4414d7228233b690e9c89cba7b84f2c1a 100644 GIT binary patch delta 15773 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 delta 13656 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 QKO^w}C<0~o?fiBB1X^xU!2kdN diff --git a/bin/kernel.bin b/bin/kernel.bin index 092ec00e209d67eddb81a85e2633c8051eb036f4..1b2d3bbe836f7cd04edabeabc3cb77ade69f8b6d 100755 GIT binary patch literal 20708 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 delta 3330 zcmbVOeNa@_6~DXe!h#F?7EqV);R4HtwS~k%BOOb2RHi0P;ts`BZ0p#>Y#{BVj)TT@ z7{RViSvMp&PgB!QGni=NjMI)nvwfP5fq(>)F}2uqw4FGqL+q_mhgf4!3ESWA@*b%D zue)>KJ@=gRJLjHr?$^kE+sJlXr!Va%c1=_XA@YK|i;DC8pwOJ?geHWI{rzZu4E#r* z?D0GdN=95lgpKt={w!OFk_6;(EKP|04hVPlHhYz99b~cDWF>~X{b8d^$PcrGAn6yf zH%niqEw(pi=&xu6-mRHJ7*#Y~0MqgX3UlvU9sR8FB^W>6B{UH}<`PG|(v=~^seXNJ zMec*ZyaTEDPV~m|nBzASmCAXBL0&9djT6I>+n$zx81*#$%M_TtmZ^_wIn~fT7KC26 zkdIR>2%Z4Tq-(`)7~S|8_Qzuy%Uvsjd!k_o=$B}jXKEqkvETw>b}kC z?<+>syTI%7BA{k^J&_ErIhhP7I318c(p5mSw378f4xh~_U=O|i~}@XL({K%X?o7I={C!BrYv`>>Yvx{b`VT5=dQ^{>Z5uDWETQZK)?$Ma7XnlK(chrvZ|+?R1tH+ z0Zh(47~wFTxa1+MEL8k>enGlXPry0?j(P5$)p`q%Bv+=XS*^iJF`5aOL<(iYJ%C;d zkS1lS0*s^P#vTG*Bj9ERJv=_0SijSpQmSlEovE2IK*SS3Of47aM@F+_wXSIGc&yeP zt-UU*?J#_XYL)ucTwnDi*6k>nBV?ukYq*O*eFdK6yyaO0Eq@0$vKrNs&D<3arRxvn z`C9i9y`Jc7V&b5#6sSdNATdI2raVY_IpwdAT0-hYP*Zv!gnW#8K1!ET`rNeMhG{)) z7$HljH-?kIsHa|QGQ(7K(?a#ZHO1`(#>B z4p8q!N-u+&nj(@Q%)y;A)oGxdZ1@p*q69$*2cNKUa()oIDqdr`)z*ekJ7Wi6= zHQ|ZB*VNkuMNj;EM^$nccWL{Ib+)!!zD@77-CVWl?Lp@<@Wh~VIlEY1Al4jkL=D9PdQlX2z{TzI_)1sj$|a3E2Dpjw7S4XkH+S zsm2z$RGjIYf77WhOvw|^XG{eh?u>RvLo9ttK?P_f0}A>=|0X2rpuf^q)bp`F-BzSx zdU`UEP%+5wgOXdU2s%0C9!JqZTPr>N`0pW4T&2#|-|Yz-e@T){QHF5zZ{h716S!_Z zPLd12=+00wKS<9X&h}k)DTx#9LJ# z8TV~-%O-?7RXU&iA+@X;HRCGyAA?SbEh=P{QrsdegLl}=nXzX%PgdHr7a7%}KL|MV zw*vEgD(BgOWlh6ffOz6V9eG)?Z@G%~3xNu+5`HkaW2L}REB1q%U$Uq*fE5$Qp6JGf z>lgCZ*exWxgzO}Vi?&e6og~Y{#(vz^Bpr(TQ<8SY-9XZ&xD6%=-N#8H>#(rgB*9$* z(io@Tt2Yz+pG&^^$P*~t_Dc!80X*>!!_lhKAutr_I9;d6{`TyXtEZ?z$H{t7IJrt- zV)4yH!V~Y8HRuh0iN3n@8;@E1@cYitR=gZi4BC664z#h9!W=4-cTC_+#Puz)OO2Hj zO^#CpO?dzrHtI|CKb3yXK2Otcm(G9oN${iR`lP0wEA5UiHkb^b#dwB{p%R7?jyk?r zuZ93bKJ{$BIEJ*Ro&hWj_O99qP)~z0M(B9r%S0kNCY|&@R-(UDHaCatEQ}FHJM_wg zL3?lP+Nz%@+fz^qX&4}bGTDM{Vfe_a0}odnZ~1nfdOOIh08>WoJiUC=r&p)fJoN0+ z_f;aH@6+keSQ=hy_WPN=$_^YZ~=JCPT;kuW>voQkh+3l%#l4eD=(%4|XXqtKlH0v-8)n*aa+ diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 092ec00e209d67eddb81a85e2633c8051eb036f4..1b2d3bbe836f7cd04edabeabc3cb77ade69f8b6d 100755 GIT binary patch literal 20708 zcmeHPe{@vUoxdS3$pAxU&;epaJ9G!+tSg6Vz~YH(ehm-_NlZdTtkpo~kt}0|P9`Ad zpbHMvc^SfH+4ivQp6=qR{c+sg!)CYPQCXWXm<9`qvfUzfEmDLl1O>&AhBULE@4fF$ zCdnI4PS2jxf9BzP@B6*q@AuyC=X>w{-uvF0_}AX@r5PC+%seKsOh(+lWI9mM<5-6bOh27NJk(Yfpi4Y5%~X&fa>_M>e#1dt9L&7_3B4zs#a+q z={7vG^K}l!RQ)N&Pv61V+&Eh0C#Ey@q5|R0uF!NLdmXaq3@VDh+u>IAeT?6YA|l<4 zyFngZ{rF>RzWJp3Wi>~2yr?>U@^;&Q&LarM4ed4T2KzI5^j8ns*#0?u`3%^_NC_^C z_m7{tow3(QxI*hMi7G!BdPumGtHVDQbqPNHZuo{{>xX(iVfl3~yziK8St!25w^Lu*CnR(fA7r4g6#P{KT91YX$ykgdb5G-y4LV^b`0I zB?Etk(IJcB-sM&sWKV+_e$eX7Jyyoo;~@Y@ML zqGpYs^b`0IB?JE?1OHTh;1)~#WM_q6_#^QXnG(OW7x;;^#6M~Ozuuk+$&JeDbBDUN zIayT=&$BT$cuj2=|19Q*o;Nx^hhQe+0~j}3ts@Cx#eKS6N(30`# z!W%*{VQ=AkG4U+s2iaN0NBAS-LuAVMNP7_HSm37@l$0O9oA{3i z{8I=&qGpYs^b`1@W#Cr~{8@Z2oU_1Bc2@X>KSq9lN=p3FUgihrO&tHs(fA9t8~CXX z$`9a8{O1Jz$%G$Kv&K*Q3H;D9@MjtLoqR9W3Jd&XXN6z*W8?>@q{J`nWqyF(#PMVO zc#X7;^VCX^p_ELX|+55ZXA2TU>l!JGK=1%AAF=X+??9k*K3`at#x{LnJ+ z=NR~Hd@t4)3;bkfgx_!YuWi@YU%vQOZLmVtkYfqydJi@;joCp#{xX`XZ+ig03Lxnf3@3v`~HzQ-Hf@$#@b@?ONFv_4b7a zY%OkCAzEX65mkr}hD>)+HD3pH>CU7EXOR31IX0iKfARUH zs@|rYFN~ZyUnmFLQ`3yW=H`EnTFs{;%lf$v$CAhYAq*Zd{;^Dp{0}}c{t40ne6i(w zXc4#aM<@Hl_=lD;{!N!0d@uUIV*Hbx)%X|w82KM6DaXIGm-!!hbc|d7WKW1O(2b$| z&nyf)#Kzh>$spWk(`I|LkVpAxx0gQBDJy*4Gg zM_J7*1o_$fsNzWJH#4>k<^>OL`+a5br#)GdP{w+)GU*nb?TMn5@DW?ge8Q#YMd47Q zWD{$hAv|nBi(7;xGzuphR2D3yR?`Nlx%r>VUME3!vi^6`wvoqb}D?v zp_O{pN-UdY`PuY#OpCcU!#64(fU`kDzgjX zjvZ4_Mx?{>!Zk?5ONzK>XBUQaD-8E90Kb{i?re2=_<#K& z9@kD4YBBITx>`O)V+tCxg^$>UIr`rXdl&5Uw5^`m=s*ba38XmadL0%NCg^#!sQ%$~QGRC7F{y5=}EAozL>EZU`9>ujVJUAuT z-xl&r?a5|Zti8hU*UAG@qTD$B5(3v$w1rDvJ)+fV2k%d{2zu8-xiS9GXuqf=y^j97<5)&Dz_ zAHq7UYNyrhXXAKX_p40)DhfJsg=`;4$AOdG7i~iFw_q_{!$*`vkT$VlQJqn1c%bsR z93!pq=V?f^4~yv!Ikg`i$a~Jt8{w=>dU^Z_F>Yk61^#jMWpOmic)n1i_Nby!_2G?z zS)bWgsBD{Td{)TnEPs<}3AEAY$;9xkX1c9`qIi&Fi~o*l~>EtE-o2Kbz9gO$PexL z81(3Pd-#Zx@<-y(&*dXqse|!&2VRl78NVINHIe%mcM^$LqjMO~B67Z}zsUF?vRa2C zN7&TLz-f4jnzLnD2YFE=NXQ()iQo zoA&B2vYb(DOmcK;_oZ7v>jfmdjVh(GgN&kv{Tbn1PNLxf5e5MoC#YV-aM?2Z-wMV=|6rWRbDHH(z#aGY(El^Ie z!bFrWJVrsDS#TE>^d=14f`tLrv+ZZEpc^KifZ040w|a*_%>|{OBX5VUBcWd5Sp?(? z72FL<29EZR?ezRTK;^fh93ff`%e$CPExhzFE`No8VpWwJA?k8IAF*ioKB$JbaXAPs zE~Usqj87ry9t$bf1jhR?z8eNDq?sh8^|0YH3#oXD*bk|0Ukqnepwh`zzLm=IsH_@g zM`ITIVQzzU@_w}(hGM@;9^rYNcyqtHgR06wRs1ZhtoN&=Z|+wM@MtUds~hu-E%YRQ z0Xf=Yze;vi`&HqO+^-Uua=$9=#eS7YI>zl+E%76^$@q7{Sm39q0zdI4{+9**e!>qc zYy702z>hi%{I?nS6@KA{C4REA!Y}-h_=!x3U)l@&L{1z(`Z*c@F&GQ{nCFC_coY8- zf&UA_4=Zc@q@Tc#C>i*_WZ=)?7m%JU`k(Bq@C$z=ej-!im-YfbkrT&{d6|sgzRSRm z*J^~HcoY9QfgcZ<{4A`j@soZ6KcZydzumw;jbA`UwZKnyR``WK5M~hjBeC66uoO;Eb~NBJEA>#I%GyhGZmfvRdXx@suu9r$$3Y9qd4eGzgsp`b!T6)IZ)h&*E2w|WOY zNwy!nhPtHpTK}bC^XXESjM&S@FXO$>n$>7vT>Db4UWTvGARmt6`CzPlUxcJ^!LX<2 z0r~ul?X&H5>eD4xgSiz;wa+tR+HWJXmR#NZxe*!chs1*bDVc{=zRSa!kUZYYF<8WW zr}c^QJ$Q4xEB7Pc&$^27{u!*S$2;kpneU-T$3*hI?jcMiSFlCIW^f`S;brUW2`SwNf~cxFV`37(J?OGdMN=o{|Nxh!R+SbAHP8Rg?l+J z|BGD|pMMUQKf_L!zlB7|Z@Ykt>mn|Wk8!z3X0M=bz8}j3pNav+`}=UYN@mA?i_3+x zxKvZwgTyw_9%nVR+k|#w!ZGt=IsUQyCillNfD!$H&j@0@18??6h^n1Ma6Y3&+w%P! z*_-`Qj=nYq$Q)yU*!lI(E&GG)tolRvW2|>jN!cILUaoi0qhnlu7+mM<5-6bOh27NJrpL76I|phRX`ymbHPpVEqGb#%ASg-1y|$Eg>Ju zlW9}8$ltiW>1kh6$X(LlTerdOeP*3+W2iCEv_NWwL}4fuMV7U5o$btua>C zw5iVDSnsZ^DhU9`IM+%8Eo=QgS(O1f*E{no{bQh1{D1!41viOK~6&YHV8XE^2NG1{N$3?yUsm# zq76}#uO3wggT8ek|CTwdJg^zHuJk<}2ySsd=w>U5@hgzV^$nv6;cIOmROe69TM0cn zRyA#C3T$q2mo*5mvZ&gXDOasEBd zS8#UV6vsCFwhiaPXBf-Ot}O}p13`Q?!go+9W?9Alx^)|rVt-S&ud}hJ4DhVBMB1KWS(Cg?g5s^c6o0a{SUF$1hE?{lX?^ zU7)Es;P?H>+oy=&lL_m@k8bFA1$TNa`zr4E`pQn?j!z0~KkkSc`v`aXz<&yN`q{(> zxYK8gE4b6^tV_6yFyixcF8BfP6x*NUPM^14!<|0!9LF8Mq+>m}(?RW0o74{ZLV9FF za?&L~s7-2*e4uuyO{$-vt>mMu`jH3RWff($?wZ=7>RK^)N6NevrE)kYOv-5dFDt6` zx*2oVc!hx|8(RnIm6UsnsuwUJr#XYVMs$t3r_`e8NpDjqxP^_PtCGr-XuHs_q732- z!mV+<&`pw$;S)$CA?EHFJfdt29#OWmd{xcz1#-R%c>)8(2@FYel{IazrSc>n$M8u$ zR;(;bncGOMthDl`@`?bm&q#_Nm#>%kntVZInyO$RgcOB^YIN={^{s7Lf0Gs(eEz_F zN&Z&Vtsj;B%WA5}kFP}8`0-T}LN-ac5@GD(Z!%aR&i2vcILU=HnT|j@0_g~(Ban_j zIs)kk{P7W3(A>}*3Wn;|vIQaEGa_&@m3wq>DU z#Kqjj;I}kFkDf2&9tU?*m_*`FOvST?(4&1&6$ delta 3330 zcmbVOeNa@_6~DXe!h#F?7EqV);R4HtwS~k%BOOb2RHi0P;ts`BZ0p#>Y#{BVj)TT@ z7{RViSvMp&PgB!QGni=NjMI)nvwfP5fq(>)F}2uqw4FGqL+q_mhgf4!3ESWA@*b%D zue)>KJ@=gRJLjHr?$^kE+sJlXr!Va%c1=_XA@YK|i;DC8pwOJ?geHWI{rzZu4E#r* z?D0GdN=95lgpKt={w!OFk_6;(EKP|04hVPlHhYz99b~cDWF>~X{b8d^$PcrGAn6yf zH%niqEw(pi=&xu6-mRHJ7*#Y~0MqgX3UlvU9sR8FB^W>6B{UH}<`PG|(v=~^seXNJ zMec*ZyaTEDPV~m|nBzASmCAXBL0&9djT6I>+n$zx81*#$%M_TtmZ^_wIn~fT7KC26 zkdIR>2%Z4Tq-(`)7~S|8_Qzuy%Uvsjd!k_o=$B}jXKEqkvETw>b}kC z?<+>syTI%7BA{k^J&_ErIhhP7I318c(p5mSw378f4xh~_U=O|i~}@XL({K%X?o7I={C!BrYv`>>Yvx{b`VT5=dQ^{>Z5uDWETQZK)?$Ma7XnlK(chrvZ|+?R1tH+ z0Zh(47~wFTxa1+MEL8k>enGlXPry0?j(P5$)p`q%Bv+=XS*^iJF`5aOL<(iYJ%C;d zkS1lS0*s^P#vTG*Bj9ERJv=_0SijSpQmSlEovE2IK*SS3Of47aM@F+_wXSIGc&yeP zt-UU*?J#_XYL)ucTwnDi*6k>nBV?ukYq*O*eFdK6yyaO0Eq@0$vKrNs&D<3arRxvn z`C9i9y`Jc7V&b5#6sSdNATdI2raVY_IpwdAT0-hYP*Zv!gnW#8K1!ET`rNeMhG{)) z7$HljH-?kIsHa|QGQ(7K(?a#ZHO1`(#>B z4p8q!N-u+&nj(@Q%)y;A)oGxdZ1@p*q69$*2cNKUa()oIDqdr`)z*ekJ7Wi6= zHQ|ZB*VNkuMNj;EM^$nccWL{Ib+)!!zD@77-CVWl?Lp@<@Wh~VIlEY1Al4jkL=D9PdQlX2z{TzI_)1sj$|a3E2Dpjw7S4XkH+S zsm2z$RGjIYf77WhOvw|^XG{eh?u>RvLo9ttK?P_f0}A>=|0X2rpuf^q)bp`F-BzSx zdU`UEP%+5wgOXdU2s%0C9!JqZTPr>N`0pW4T&2#|-|Yz-e@T){QHF5zZ{h716S!_Z zPLd12=+00wKS<9X&h}k)DTx#9LJ# z8TV~-%O-?7RXU&iA+@X;HRCGyAA?SbEh=P{QrsdegLl}=nXzX%PgdHr7a7%}KL|MV zw*vEgD(BgOWlh6ffOz6V9eG)?Z@G%~3xNu+5`HkaW2L}REB1q%U$Uq*fE5$Qp6JGf z>lgCZ*exWxgzO}Vi?&e6og~Y{#(vz^Bpr(TQ<8SY-9XZ&xD6%=-N#8H>#(rgB*9$* z(io@Tt2Yz+pG&^^$P*~t_Dc!80X*>!!_lhKAutr_I9;d6{`TyXtEZ?z$H{t7IJrt- zV)4yH!V~Y8HRuh0iN3n@8;@E1@cYitR=gZi4BC664z#h9!W=4-cTC_+#Puz)OO2Hj zO^#CpO?dzrHtI|CKb3yXK2Otcm(G9oN${iR`lP0wEA5UiHkb^b#dwB{p%R7?jyk?r zuZ93bKJ{$BIEJ*Ro&hWj_O99qP)~z0M(B9r%S0kNCY|&@R-(UDHaCatEQ}FHJM_wg zL3?lP+Nz%@+fz^qX&4}bGTDM{Vfe_a0}odnZ~1nfdOOIh08>WoJiUC=r&p)fJoN0+ z_f;aH@6+keSQ=hy_WPN=$_^YZ~=JCPT;kuW>voQkh+3l%#l4eD=(%4|XXqtKlH0v-8)n*aa+ diff --git a/lib/isr.ppu b/lib/isr.ppu index 77834535db81e5587bfd3abcf40623fc8be1e8a0..b7262b9f1090e491d1488a114dba6a60df904493 100644 GIT binary patch delta 320 zcmbQvH=S?7#QNB^%qfQ$4x};w0ZV3akMc?_h5ZZ+CQ!@F+C}>pX9eHe4p(IEEyp9# YT0KP!E@HuzqY+^Gv+d00!;B%U02|?BQ~&?~ delta 320 zcmbQvH=S?7#QK94#a8>>(ghiSfF-lI$mn&8`u@8)hDTun#=P%eA7(CP?t}@L{QLDk zFT(E4Hkg2^#6)AEHuZbIU;<`Fy6MxO@OJ3I1kA6vt$uAKvMUKDU@?`!PAq74SYSO& z#IiX1Q&vw?iY!Qg73dH{gMQtgM<*^gJP9shX!G82mp;!vSGb7L%M~3~YyNvahl?0T zWf`~%1)CVaMNF6!vmd;cyIu(wG2Qt1^8CEcdfK9d ZjJFE6;UX4OP44!o+?qXq^I^siRsh~%XLkSq diff --git a/lib/isr0.ppu b/lib/isr0.ppu index 435da051b206ec7d81f2747c6bdc0e284c541880..f2c4616bf0c11521e24fa8d702f0ac83194ef829 100644 GIT binary patch delta 13 UcmdnXzn6c44^vmiM!$S^03`$j{r~^~ delta 13 UcmdnXzn6c450g>zM!$S^03zE2p#T5? diff --git a/lib/libpkernel.a b/lib/libpkernel.a index 47163047e407bcd9d28a61c6d2743502390f7244..b5c358edf83c724c0d4ea49dc05a75f39d0ca04d 100644 GIT binary patch delta 453 zcmeA>&)9dKae^F+sfD@OMx`B$V8-MG9#LUrQx&roctz)$mUr}d=S&Y z@>McEoB7lhA<3W8_=n(42FdH`Aj`kfLpR^f2-$otQ)GE7N1x4c7RdUgtdY$J$=BH- z%Ud}@^#eoZB$J>a#Fq$9f`uoa_vD2I#WjR;H(&5EVnYO&OmGm~tKyqG!*V%bdVmH) TgAd){xhW8X!C`qM&)9dKae^F+iHVWHMx`B$V8-MG9#LUrQx&roctz)$mUr}d=S&Y z@>McEoB7lhA<3W8_=n(42FdH`Aj`kfLpR^f2-$otQ)GE7N1x4c7RdUgtdY$J$=BH- z%Ud}@^#eoZB$J>a#Fq$9f`uoa_vD2I#WjR;H(&5EVnYO&OmGm~tKyqG!*V%bdVmH) TgAd){xhW8X!C`qM 0 then Hooks[i](nil); + if uint32(Hooks[i]) <> 0 then Hooks[i](void(0)); end; console.writestringln('Divide by Zero Exception.'); util.halt_and_catch_fire; diff --git a/src/drivers/isr1.pas b/src/drivers/isr1.pas index 5d13865c..d0dc9aa6 100644 --- a/src/drivers/isr1.pas +++ b/src/drivers/isr1.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(1)); + end; console.writestringln('Debug Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(1, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr10.pas b/src/drivers/isr10.pas index 06318f0f..0cd513df 100644 --- a/src/drivers/isr10.pas +++ b/src/drivers/isr10.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(10)); + end; console.writestringln('Bad TSS Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(10, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr11.pas b/src/drivers/isr11.pas index 0b0ac869..a9601444 100644 --- a/src/drivers/isr11.pas +++ b/src/drivers/isr11.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(11)); + end; console.writestringln('Segment Not Present Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(11, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr12.pas b/src/drivers/isr12.pas index ccf88939..8077bc3a 100644 --- a/src/drivers/isr12.pas +++ b/src/drivers/isr12.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(12)); + end; console.writestringln('Stack Fault Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(12, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr13.pas b/src/drivers/isr13.pas index 55a593b3..6ace63c9 100644 --- a/src/drivers/isr13.pas +++ b/src/drivers/isr13.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(13)); + end; console.writestringln('General Protection Fault.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(13, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr14.pas b/src/drivers/isr14.pas index ce844a05..edf72fe1 100644 --- a/src/drivers/isr14.pas +++ b/src/drivers/isr14.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(14)); + end; console.writestringln('Page Fault.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(14, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr15.pas b/src/drivers/isr15.pas index 847d8e43..727f8de2 100644 --- a/src/drivers/isr15.pas +++ b/src/drivers/isr15.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(15)); + end; console.writestringln('Unknown Interrupt Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(15, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr16.pas b/src/drivers/isr16.pas index d8f6492d..4403b6fb 100644 --- a/src/drivers/isr16.pas +++ b/src/drivers/isr16.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(16)); + end; console.writestringln('Coprocessor Fault Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(16, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr17.pas b/src/drivers/isr17.pas index 66eec4f5..af897656 100644 --- a/src/drivers/isr17.pas +++ b/src/drivers/isr17.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(17)); + end; console.writestringln('Alignment Check Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(17, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr18.pas b/src/drivers/isr18.pas index 8de3a970..f89905c3 100644 --- a/src/drivers/isr18.pas +++ b/src/drivers/isr18.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(18)); + end; console.writestringln('Machine Check Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(18, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr2.pas b/src/drivers/isr2.pas index 142e8465..d68bcee7 100644 --- a/src/drivers/isr2.pas +++ b/src/drivers/isr2.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(2)); + end; console.writestringln('NMI Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(2, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr3.pas b/src/drivers/isr3.pas index 0c9883b9..2df4599b 100644 --- a/src/drivers/isr3.pas +++ b/src/drivers/isr3.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(3)); + end; console.writestringln('Breakpoint Exception'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(3, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr4.pas b/src/drivers/isr4.pas index 940114e5..3e770a69 100644 --- a/src/drivers/isr4.pas +++ b/src/drivers/isr4.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(4)); + end; console.writestringln('IDO Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(4, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr5.pas b/src/drivers/isr5.pas index 9aabb386..31b759c5 100644 --- a/src/drivers/isr5.pas +++ b/src/drivers/isr5.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(5)); + end; console.writestringln('OOB Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(5, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr6.pas b/src/drivers/isr6.pas index f3f70176..6b404170 100644 --- a/src/drivers/isr6.pas +++ b/src/drivers/isr6.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(6)); + end; console.writestringln('Invalid OPCode Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(6, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr7.pas b/src/drivers/isr7.pas index c51f49fa..0feef9cb 100644 --- a/src/drivers/isr7.pas +++ b/src/drivers/isr7.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(7)); + end; console.writestringln('No Coprocessor Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(7, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr8.pas b/src/drivers/isr8.pas index 073aa8a8..27dcef0d 100644 --- a/src/drivers/isr8.pas +++ b/src/drivers/isr8.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(8)); + end; console.writestringln('Double Fault.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(8, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file diff --git a/src/drivers/isr9.pas b/src/drivers/isr9.pas index acc39457..27f31bbf 100644 --- a/src/drivers/isr9.pas +++ b/src/drivers/isr9.pas @@ -18,19 +18,57 @@ uses IDT; procedure register(); +procedure hook(hook_method : uint32); +procedure unhook(hook_method : uint32); implementation +var + Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + procedure Main(); interrupt; +var + i : integer; + begin CLI; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) <> 0 then Hooks[i](void(9)); + end; console.writestringln('Coprocessor Seg Overrun Exception.'); util.halt_and_catch_fire; end; procedure register(); begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); IDT.set_gate(9, uint32(@Main), $08, ISR_RING_0); end; +procedure hook(hook_method : uint32); +var + i : uint32; + +begin + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = hook_method then exit; + end; + for i:=0 to MAX_HOOKS-1 do begin + if uint32(Hooks[i]) = 0 then begin + Hooks[i]:= pp_hook_method(hook_method); + exit; + end; + end; +end; + +procedure unhook(hook_method : uint32); +var + i : uint32; +begin + for i:=0 to MAX_HOOKS-1 do begin + If uint32(Hooks[i]) = hook_method then Hooks[i]:= nil; + exit; + end; +end; + end. \ No newline at end of file