From 3124582151bf2022797a7f691955a7c11c3935dc Mon Sep 17 00:00:00 2001 From: kieron Date: Thu, 12 Apr 2018 14:38:50 +0000 Subject: [PATCH] git-svn-id: https://spexeah.com:8443/svn/Asuro@507 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- Asuro.iso | Bin 5136384 -> 5136384 bytes bin/kernel.bin | Bin 82148 -> 82148 bytes iso/boot/asuro.bin | Bin 82148 -> 82148 bytes lib/ACE.ppu | Bin 0 -> 1319 bytes lib/BPE.ppu | Bin 0 -> 1319 bytes lib/BTSSE.ppu | Bin 0 -> 1341 bytes lib/CFE.ppu | Bin 0 -> 1319 bytes lib/CSOE.ppu | Bin 0 -> 1330 bytes lib/DBGE.ppu | Bin 0 -> 1330 bytes lib/DBZ.ppu | Bin 0 -> 1319 bytes lib/DFE.ppu | Bin 0 -> 1319 bytes lib/GPF.ppu | Bin 0 -> 1428 bytes lib/IDE.ppu | Bin 10565 -> 0 bytes lib/IDOE.ppu | Bin 0 -> 1330 bytes lib/IOPE.ppu | Bin 0 -> 1330 bytes lib/MCE.ppu | Bin 0 -> 1319 bytes lib/NCE.ppu | Bin 0 -> 1319 bytes lib/NMIE.ppu | Bin 0 -> 1330 bytes lib/OOBE.ppu | Bin 0 -> 1330 bytes lib/PF.ppu | Bin 0 -> 1308 bytes lib/PS2_KEYBOARD_ISR.ppu | Bin 0 -> 2235 bytes lib/PS2_MOUSE_ISR.ppu | Bin 0 -> 3481 bytes lib/SFE.ppu | Bin 0 -> 1319 bytes lib/SNPE.ppu | Bin 0 -> 1330 bytes lib/TMR_0_ISR.ppu | Bin 0 -> 2144 bytes lib/UIE.ppu | Bin 0 -> 1319 bytes lib/faults.ppu | Bin 0 -> 1585 bytes lib/isr.ppu | Bin 1902 -> 845 bytes lib/isr0.ppu | Bin 2025 -> 0 bytes lib/isr1.ppu | Bin 2025 -> 0 bytes lib/isr10.ppu | Bin 2038 -> 0 bytes lib/isr11.ppu | Bin 2038 -> 0 bytes lib/isr12.ppu | Bin 2038 -> 0 bytes lib/isr13.ppu | Bin 2137 -> 0 bytes lib/isr14.ppu | Bin 2038 -> 0 bytes lib/isr15.ppu | Bin 2038 -> 0 bytes lib/isr16.ppu | Bin 2038 -> 0 bytes lib/isr17.ppu | Bin 2038 -> 0 bytes lib/isr18.ppu | Bin 2038 -> 0 bytes lib/isr2.ppu | Bin 2025 -> 0 bytes lib/isr3.ppu | Bin 2025 -> 0 bytes lib/isr32.ppu | Bin 1983 -> 0 bytes lib/isr33.ppu | Bin 1983 -> 0 bytes lib/isr4.ppu | Bin 2025 -> 0 bytes lib/isr40.ppu | Bin 1972 -> 0 bytes lib/isr44.ppu | Bin 3558 -> 0 bytes lib/isr5.ppu | Bin 2025 -> 0 bytes lib/isr6.ppu | Bin 2025 -> 0 bytes lib/isr7.ppu | Bin 2025 -> 0 bytes lib/isr76.ppu | Bin 1994 -> 0 bytes lib/isr8.ppu | Bin 2025 -> 0 bytes lib/isr9.ppu | Bin 2025 -> 0 bytes lib/isrmanager.ppu | Bin 58088 -> 58225 bytes lib/kernel.ppu | Bin 4785 -> 4799 bytes lib/keyboard.ppu | Bin 4479 -> 4501 bytes lib/libpconsole.a | Bin 103956 -> 103956 bytes lib/libpmultiboot.a | Bin 29056 -> 29056 bytes lib/libpsystem.a | Bin 184436 -> 184436 bytes lib/mouse.ppu | Bin 2769 -> 2785 bytes lib/scheduler.ppu | Bin 3289 -> 3297 bytes lib/terminal.ppu | Bin 8814 -> 8814 bytes .../hid/PS2_KEYBOARD_ISR.pas} | 17 +- .../hid/PS2_MOUSE_ISR.pas} | 42 +- src/driver/hid/keyboard.pas | 5 +- src/driver/hid/mouse.pas | 5 +- .../isr76.pas => driver/storage/ATA_ISR.pas} | 6 +- .../isr32.pas => driver/timers/TMR_0_ISR.pas} | 30 +- .../isr40.pas => driver/timers/TMR_1_ISR.pas} | 16 +- src/fault/ACE.pas | 43 + src/fault/BPE.pas | 43 + src/fault/BTSSE.pas | 43 + src/fault/CFE.pas | 43 + src/fault/CSOE.pas | 43 + src/fault/DBGE.pas | 43 + src/fault/DBZ.pas | 43 + src/fault/DFE.pas | 43 + src/{isr/isr13.pas => fault/GPF.pas} | 44 +- src/fault/IDOE.pas | 43 + src/fault/IOPE.pas | 43 + src/fault/MCE.pas | 43 + src/fault/NCE.pas | 43 + src/fault/NMIE.pas | 43 + src/fault/OOBE.pas | 43 + src/fault/PF.pas | 43 + src/fault/SFE.pas | 43 + src/fault/SNPE.pas | 43 + src/fault/UIE.pas | 43 + src/faults.pas | 36 + src/isr.pas | 10 +- src/isr/isr0.pas | 75 - src/isr/isr1.pas | 75 - src/isr/isr10.pas | 75 - src/isr/isr11.pas | 75 - src/isr/isr12.pas | 75 - src/isr/isr14.pas | 75 - src/isr/isr15.pas | 75 - src/isr/isr16.pas | 75 - src/isr/isr17.pas | 75 - src/isr/isr18.pas | 75 - src/isr/isr2.pas | 75 - src/isr/isr3.pas | 75 - src/isr/isr4.pas | 75 - src/isr/isr5.pas | 75 - src/isr/isr6.pas | 75 - src/isr/isr7.pas | 75 - src/isr/isr8.pas | 75 - src/isr/isr9.pas | 75 - src/isr/isrmanager.pas | 1595 +++++++++++++++++ src/kernel.pas | 15 +- src/scheduler.pas | 4 +- 110 files changed, 2499 insertions(+), 1450 deletions(-) create mode 100644 lib/ACE.ppu create mode 100644 lib/BPE.ppu create mode 100644 lib/BTSSE.ppu create mode 100644 lib/CFE.ppu create mode 100644 lib/CSOE.ppu create mode 100644 lib/DBGE.ppu create mode 100644 lib/DBZ.ppu create mode 100644 lib/DFE.ppu create mode 100644 lib/GPF.ppu delete mode 100644 lib/IDE.ppu create mode 100644 lib/IDOE.ppu create mode 100644 lib/IOPE.ppu create mode 100644 lib/MCE.ppu create mode 100644 lib/NCE.ppu create mode 100644 lib/NMIE.ppu create mode 100644 lib/OOBE.ppu create mode 100644 lib/PF.ppu create mode 100644 lib/PS2_KEYBOARD_ISR.ppu create mode 100644 lib/PS2_MOUSE_ISR.ppu create mode 100644 lib/SFE.ppu create mode 100644 lib/SNPE.ppu create mode 100644 lib/TMR_0_ISR.ppu create mode 100644 lib/UIE.ppu create mode 100644 lib/faults.ppu delete mode 100644 lib/isr0.ppu delete mode 100644 lib/isr1.ppu delete mode 100644 lib/isr10.ppu delete mode 100644 lib/isr11.ppu delete mode 100644 lib/isr12.ppu delete mode 100644 lib/isr13.ppu delete mode 100644 lib/isr14.ppu delete mode 100644 lib/isr15.ppu delete mode 100644 lib/isr16.ppu delete mode 100644 lib/isr17.ppu delete mode 100644 lib/isr18.ppu delete mode 100644 lib/isr2.ppu delete mode 100644 lib/isr3.ppu delete mode 100644 lib/isr32.ppu delete mode 100644 lib/isr33.ppu delete mode 100644 lib/isr4.ppu delete mode 100644 lib/isr40.ppu delete mode 100644 lib/isr44.ppu delete mode 100644 lib/isr5.ppu delete mode 100644 lib/isr6.ppu delete mode 100644 lib/isr7.ppu delete mode 100644 lib/isr76.ppu delete mode 100644 lib/isr8.ppu delete mode 100644 lib/isr9.ppu rename src/{isr/isr33.pas => driver/hid/PS2_KEYBOARD_ISR.pas} (81%) rename src/{isr/isr44.pas => driver/hid/PS2_MOUSE_ISR.pas} (84%) rename src/{isr/isr76.pas => driver/storage/ATA_ISR.pas} (91%) rename src/{isr/isr32.pas => driver/timers/TMR_0_ISR.pas} (72%) rename src/{isr/isr40.pas => driver/timers/TMR_1_ISR.pas} (77%) create mode 100644 src/fault/ACE.pas create mode 100644 src/fault/BPE.pas create mode 100644 src/fault/BTSSE.pas create mode 100644 src/fault/CFE.pas create mode 100644 src/fault/CSOE.pas create mode 100644 src/fault/DBGE.pas create mode 100644 src/fault/DBZ.pas create mode 100644 src/fault/DFE.pas rename src/{isr/isr13.pas => fault/GPF.pas} (50%) create mode 100644 src/fault/IDOE.pas create mode 100644 src/fault/IOPE.pas create mode 100644 src/fault/MCE.pas create mode 100644 src/fault/NCE.pas create mode 100644 src/fault/NMIE.pas create mode 100644 src/fault/OOBE.pas create mode 100644 src/fault/PF.pas create mode 100644 src/fault/SFE.pas create mode 100644 src/fault/SNPE.pas create mode 100644 src/fault/UIE.pas create mode 100644 src/faults.pas delete mode 100644 src/isr/isr0.pas delete mode 100644 src/isr/isr1.pas delete mode 100644 src/isr/isr10.pas delete mode 100644 src/isr/isr11.pas delete mode 100644 src/isr/isr12.pas delete mode 100644 src/isr/isr14.pas delete mode 100644 src/isr/isr15.pas delete mode 100644 src/isr/isr16.pas delete mode 100644 src/isr/isr17.pas delete mode 100644 src/isr/isr18.pas delete mode 100644 src/isr/isr2.pas delete mode 100644 src/isr/isr3.pas delete mode 100644 src/isr/isr4.pas delete mode 100644 src/isr/isr5.pas delete mode 100644 src/isr/isr6.pas delete mode 100644 src/isr/isr7.pas delete mode 100644 src/isr/isr8.pas delete mode 100644 src/isr/isr9.pas create mode 100644 src/isr/isrmanager.pas diff --git a/Asuro.iso b/Asuro.iso index e640ee205909b167ef0b15d9fd15d436f2a9fbf1..8dc22f97f7116858cf129792309ed13a2e737719 100644 GIT binary patch delta 38019 zcmbuo30zdw`#*kXm=RQzLD^K$5pmye-xCG&-rUHoDb27HH8(QAz&q=bn47P`A(b_j>)QxzBmt&vKsgoaLUo%$VWb zZO*_auUlq#r>c;e3 zQ?aghFsLvOuuj$te%-D}pLsp*-_o6*zy5e#MI5oU`@h9&p4>Wy*Wua9>o~qu_fn^A zFSV*Qt>2GPoFu((5W&tj-(OVYf7OvU!l34_^1>9G<9P-y*EHKcjmMRRnf5czm>%cipkQ29d34 zxvzy{o3zi!cH=&7dvM=F2K9y)^5pj|G_qY?$ZbC@G>W-A1XmvCl|4$H$}E;4||4mydg{cfiPY%7Iq(DDC*8 z!4^1B8a-@4(wYJLyBMVI+<{mnjEI9qu4W$O9lG97dhH+&GV+j7>Si9|sat!74x^4#aA7S)DP!hq3<|1pd{ z`-z8m@+YHeI{nN$Z2Zqg((S7B52Lm>`;)hQ=$}S2_su^S@vbg5@;t4Wd(JVGo>HX&r;O?ycS`N9Q%3b3 zJ;gIwZfHB?G`CGZZIq2er#mPy-!+tuIKxjoOV1eD9#y60vqsWK&vM%=L+Nj4`MeG| zXJq@tIo?OvhSJ|vX~20y+w-ceq4alE8gRkT_JV3_DE<9HPu{=G$aW@EPtu0cYpT?K z(a3i0MV^gKhSJ*?c~sGtjBMv$;?hlq(%YAKR4q!3Y@aLPw(lBB@0IYVT3t4>U2>UA zKQNS5s?v6U8QCuTi$|4bD79YUW3u}dqtU+N3LotsTrrwu_pb0+7Jb!d9?iX)%X_fY zNIJcg&y=->(hI88b}b?7!FF1^_8LB{kx5?mX07^bmRxJ7)bYkOqn2O2##`R_x={qr zUgr_KaownGCD*I1t+m7fL)XOZ?`p8NK7E5{VdV{@T7JL5YpHS5Ncz~#7K%r8YgSuK z96EHwf2`q0Z}NKX-ZYAL$Sp2SyJb|**SB~SS8f^ga=$X(%TJXV*?v~WZT~1U%5j(5 zd}JoyHi~Nd?MZwLlpA@TUS54iA&nUM=zr`e&Xx1#1>P}o^yD2LV)h-Q=KXSqH?QK3 zQHaCta?j~^jhc7pE^l6$p>)VSKBec~GphINd%WID_l!LEui&=NR2WIWs_3dDuB^f+ z=D~mSm}mWMl#RWA^K4u)l=i#Nr78D~>iztFtGZRT6aoKzrBKNm_jsjI2p?5WrSM;k zFd2mZ>NJxQ{;N4A1KU^6n3MqJK$DTN{DjF={c>jLm?8ghIV1lBU5Z1lFqsT`NFHJ~ zDXoxG%|@Zfg=RID%Vv{7w&VeRCZ!YQ8GeSbe(9&yf7Z{?zL!O{pJXwV@7CmJjpe

g7Pg@CVdU!=F*dP`+1_UpAHx zsH={pS#=HV3pIIZUBmeL2buT{KkYWd@We;sX*F+TbONtq5@t=F|Fm4x#1y-x*cAMl z%@oQ9hs`j#({0+|FqU7?`n|;vzr}k*t*|?)$9e-GqiuKo@$>_&#?7B)>C`u zW<5jyQhigaYFE!A#CXa0Tql2BU#;tMeZySz4^eY5HN>#4FGJL}Fk^YYP*pxP)Yv{$ z9SN6=<^97{`HV0_`@Nd{im^OCT&;grxS@SvxM?IG3lWC$nGve}I%D}?nmnR`v3&zI z{x^)}R~xAQ8#XkwpWRTEzhNxD+EDc$*~rlT*+#1UdSm&uMy3wc#!AwF(F6Wttjvj2 z$I2U#hGXTgNOi1)MH$92JxYyrU6kRtz7VC3>%hi_{-12D`p<4`IB$M!%;S5liJ|zB zCTjQ#niy7ppowWX9}0HE@Mqdh%H@l^!EWgPs$KOT*3>ZkX-(DeUukOS|3Xt!wf#`d zB*&WIBL+8><%!X1qOzh5J^dD~c6yCwhVpUERC$)M{5MTrBgU|$kH)AiT^eK9(!()o zOYa)Xhc#E_^O_sR_ib}EzA|I^kQSvd)wr(exX9>g*p|axRr_*d`@!8*`x)H~?Z52yk888hBgg#5 zGXl9=ceSqZ-3{Bly}O#Xlidy5(zb^hOHvQRST^=BrSoyo({S8P?^%69*BUcuROkOV z%bx40<+Yb#T~G8f#ZM@+?d)H`xx3E?W5Y)=xZn+*Voip$y!cd!>pa@tIpQIeunlF`>D%lPCvt5`?H_ge#=9K z{vUlv^`G&Oq5Y2!nWC#^y6)J)@>M@mFM~x`>aPx<^!|pO_H}<#5+5LOhVp4~YFFgM z88-D?oa)~;z)(JUfHv_V4>!69YGe}Ry`5^*m+ucSHBdrnIMC45?1AbUxZYTPZJ?TU zd%U6j+;~;K#aMnP{vX>M$DlROmKlxTISFe2txGWMp9`8iFwroQiHT}bRvF7rC909y z1{rqB#6fDOWDhc||Cd2(d=-NX>wjdhTL0p~hU4$Y!KOjf6Kjm$*!jO+7LmUaP0HIM z@^R5H{??Kjf0AS<->AtC8p`t0RJ1N^fbrYwg!%i)*huw*%`S&kZ6 z4uAn!j+$AHT3L?TS&qOgN1ZH3-7H5?mcy3i2+nfU%W~Aua)e|#LbDuUS&r~5M?{vR zL6)OomZMRYBQnbomE~xh9L=&EFHpE|BZ2- z%e)-GR^-W#-4r986|;lAE4=B!9^9o6++!--A+Hitc_ed5MbP5ohYDAJ+JZ!@=LxXP zwG`XD%e`|u=XF0nD8;kday~A*_JFmItL>RRtQp;>g^Zu1H0t#7YY1-H|bw z`z?hCNKRTP#tvi8eS!)@P=_ZL2Nt+P5In@P=UsxpmgEV7-iY)TLQX-d39$t;3t}ro z$Qu)&8PKA#8%&WU<)7 z{9Z$O@M7qFN0?P!uvqNYJZPgJq__?QXo zs^71P8LasoOn!HKAa8SuJ)##@)tm8ey~jR~tr_B8bBoFH!3?pb|4nKiTPBxfh;ti0 zyG#&z-Jk!Lr{)=;PlNLWQt7c}@``0*2XpIX@@LD$w*A;|@1n;oXVK%4IItP-L(@*B z(-}zN@9+I{NZM*)Ncyo!VGzi_FB2pEMbdsKnN*i`~r5`f|riv5j*y8U0ZYjX%!(=LiBie*SDvI-zVSD(*4?habivnB{~W z1IGP4PS{$)yo8M=--8I-LfAIK9E5cSmeFrKib8sz=Tj2?2w_Pr&q0)%vqCWJ2Lzx^ zQoeY2PLk#z;JFEB<-aq<(TPcDaf(L>U?b6u1>V{=@9xV`@&ufN=B&B2Y$Sj;vCgn6 z%)ydHYe#yFCA-k|vnPbKwg$_uEf?+1vS6h?H-wq{187QXf9%7}aNZTlo+Ps9i*E6Z zrqYfj2=t>Z|LljjI_L+1b*&EpoNQbGU3Xl~%|tPs`3ja@=&1uCyD~u#vK^N8?$Aj{ zh%3qJ4o!!iE2*YCiVC~&=ABRy;QD5u>#%!VP4}ppeL~aa>)B$9zR5}khi)XpxXpB2 z;hk$`GckMIb*QqST>~t8i)*;{?Y-N?Em=RO7MTtPpKwP_l1ID5F3!bJV!4aaa-}Y} zAA1^%XC1*3N%+8GbP~wMJ{ZlqA$*3QVIv+tOW9ODTr%eO@%6n zK47JUkcQ8yB+65YZeeS$RaO=x*F|2xIA?QuJ;$iV;xu&dNtAd10}uetGul{5anWE| zcOHu2LDWL)0-oxKp!~uDs=?2i0i=HDavWW;B~63!j|Syi7lC8vuzsrLOs@q3b`%JE z2#(y5vc)Yn9KMY_zhC$N^z4o;X#xi+8x_Y3sySvC!Mc3xNL_h`TWpf-C7*raQ|a>p z6M{_fgb3^oR_r|#@^GB_24(ciMvTJTR*GyG#*M2mv)DGTrq42+Qs>EWBwy ztc)U@jjAh`xW(w;V^m84x=L{gZ*t>R;smp|j=Xf080BOnZU^yBlUh^yW0)5YQ$4=s zm55?f4&1p)_p*RZFQb%aV(qI4U(tnYNN8rZD#Eq8@Kuyb25+P;a4TJ46-Hy#I^x9G zP{2CWFU$5R=wZQKZ^e=H@ZFRIX~4>mfb5qkh|D`R(yo=5cM93Z*`+{C$>SKK+G3y$ z(_Lib5iX!vW1)kUM_{Y}Mr-zEeiNr~LEzX2kYTgXvIVKrd=FGt9oOQR0FRB#BcS53 z;U#W%*-;=cvcm~E3+u@KaUKAsqw8Q2AT7uK^KnoFf$ZEoT18YAh z2AVSO1f(5Aqzy`yNF91i;vyx|P9O!7bhI;}rL55+dCp6s7`BfGc2}^N5SWD>zFS$j zFw9t6i-Ae_RXEj%Id}|;{r2_O+ha$#wce)5R4lkVh9Gf5n|?kTh;w%!FoMY%NEee zC^vmstlxGkwc|!Q+7a!^qw)nRhj~0y{*B5w$5Q#nbot4b#peD+#KZ^4?w7@Z;r-vl z*4v)qvE$r@BJ21D4vz=O+ZTw9oH?G8r0erX|I>tF-z7oX5*x9?)k?-QFLy;g+aaH^ zt_yq0pj@#VJtN$BC*>WFoxye`Y;(yrJ0YeVoUvH?<-;xXB9;8r zDl6kno1Rsuc~ctbGp3b8%qvHkoGbm<5S$Fvg_Q-BS5|6^V{m~(59v{aR1#D$Lk9*? zjMt!z3#W*J3?1(P+?QA(T-=H13fAiQ&)EI&jtU$BOButBR%!Y7HDXJrtr3#Y3>`T2 zMPN8*56tx13zEXHo7x>9u-!n}S!M3SjD3K~mS@UNtXS?%4=E7Baq`?k^>}e$QPa?7 zRa6WIyAP7+B#F!r6%-SzEJ;rzBDM!7?Ui!oTCri9QqpMyey5N-2Ps0s>L0MCqeQ1G z%&)rq@?ySKKCo77(MGrk{S#PX{-uxpCH*~Ed~xm3Qq>P3{gp=gv|2%b7T5p9B2Rf$ zj0%h){dnjj2s!6faeyrl|NSdRdo5WOGrXF4s5-QL0Cbhdb43z=e6p~a85xn z24bFttwo*+;o(6>usx29DuLl5bk?5SEE7g)A-1=jO2Se+lLXf6HTm9hv0^**ch|C zaD~{obplz@2*ggMHFOk>RA^viHGnf^V?ehKR%;|BEKAjMABT!oI4O+1Q4e?ot zGkLy4#&^d7z{O)9Uh#g6>K$8^P+V)3P<9Z4br;Q=Pl&*BfhZMU0I%de^PoAq5MgJL zZnB~~1hPJW(gCS0=|$#c>-L%?!z6De$ztI#u* zn(#4#%ro(Ak*jO~PT~}MuM=}EdAMrNyc3jGg6ZFsE94AtTNF8Z1UFWcB3C-keiCFU zTeNphC$A5|tFpxq<8X^c^;r9WMJYliuvIuuZoU5CPvHS!Eu>}lF6zaxun%yllxhh;Ie-q`b%m78PcVFzNh<7o1% zmCI$ZvGd&vm6e67>E?}V-$s(NPf-;OJJ#rB4BIUT*yE+Bx1lc2ekw&zhcxPye-7KC zCP<}~ZGkP>t9QeG%0YE48(T}R!^b7GN&%A$;WwzR{9XO_2GT$@H>F7~x(jJg?k9!1)V&~>r46`m*T zdR=@d)|t_ipEEFMZ;VmTCk1&LXkvfpV6g_8*&!XYMXTn1>{A_#(?AP*TL)7$(8^Zo zV6Ia`Yp}UGTBL#gELjJIW@=3VY={oVYG6&)T?dmjuoi2ogE<;ln+58ix0zFQ8pv*s z)>>bxsn%hqbtK=w1~HEgW@w;|ZPvj&4Gd;4>R@pUu3+heomY=7)KOb= zwWj)Pk`BgcU zln&-;U{m&x4i;-*G;6JcwpOaoW-LSp;}p<|nqpYxNUim$nrd@)Ne6Q^um$@`2a7bY zCG+Z_&|0mj75h*JV>Pffdrb$EIp`Gf+OTChnxm<tK=wc4QGcn4yBsyjbR^qj{QYCwAo#EhWVo*qQyRgSNJ6O&^kq_y7OUakHi_PY)yX<&bLPzN(KFplli!8{Edz&7Y$u?7xgPM40_ zI;b_pvveJd)4&AwqzzCps8%Gh+D;vf)li9*;etcC zuqa5@z=zo>9n8_dA?!OH^lIQxmal`Q8aRw?(m{KyTK#agdIav&@tTq}bOc+Vt7d3m z5_?()^EB`gHe3gbHE<;BrGvIkYE7e9j1I!LU5|pr)uaJc6YcIQ?3S%W#@FT zNCO{bMLH;SR%>#w&vh_X10Q4W>R_@4KF(eS=;W=>(a>>hv99XX!0~K~4wh=*6Ktdo z+PkRLPhkCYFi8WSWUX{CLj#jpeFB{?Vuw+Xr=b(s{b5?`i#6~mc2NgyUDcYNX2*0e zP6H>guXHd~11GZ&bTC%~Q`oBti2fG}iZpZz%g|MYZfZ?a*>oL@)xc?NtPUn?;4^H1 z4(4d!bky&5=!g>w+~7nEw~OlH0wMRpT@;oz2$4R1KWV9@oKK4V=dkb+AYS=d)NH6nd%^ zEntl_&{+_xp$l0J4J}C4z(wrZ5Uuq&8u%PLse@h(T+9yWV5tT!VLNot-b<~1DSJx? zok<$%WZ62Jp@A7}jt=H&;4(Hr2a7fEc_!(gt+!fJChMw$aT>UsHPOLTr-rUzwRALB z1GCtzhqcxhY2XX2SO^6#pdf^ zsRpiQPwAk&uUh?!Y?uxvY2Zt&rw(RlU=C}hgL!?m{pZW9u8tOKs;{s+lGb`#KeeVc z?5qyPY2aG+qYkEO;H#`a2Xi&>HTI4U76Ih@PnqTDsPK?l(>nH?4#sNW>nueFlQr-S z_J|JVXyBWyuMT=Oa6N0OgQWy2`_H#nJsq|8SF7K^{uZ^?Cu!i@jOk#82IjJ(I+&+{ z8`&NmEY`qH?0p@y#Zg7H|J=;h>S&yT0^Gu!I+&_~@33cdFjoWLWn*-(NCV$vaXKgr zP@A-swbj8`4r2fLJ`2;)WKH!0X41hN4g8Q@9;~IrtAX3tFFIJNfgiDbI%prLR{t^k zNC%Tt(3$rMTc@KLnra@))WJLr+|Fj{V6g`7V2|mbEncl@Cri-5I1T)ib=1LB4Rn6S z8tQ1ShVEik9W2tod{#P0YrT-5*5qNo>0qn|?q)t6OxC~xwp|BvH1KmLTd$*D4gG?> zpo66v_$5ozL3^TF{T}v&4kl^fS4`Bw3=QoYX4h@H{FJPka| ze$c^U4Lrhj>!3|iD>}-yB%AIyl3mcjQVsl_9nnGi5ViV0*q1t( zq=A33tpxJ@XNHCrvo*SEo(7&`OLeeV15dMQI%pfJ)^vuA*1 zWL>pX1OH;r>!5wOTKyF^QwNhY@G5iYV1@>kvUnZL)4*%2g9>8*S*)SgSp!|wHbSlG z2D9j3oCe-xR|jaVPu0L%?1T>HYG4`rS_g|X@HWfSKxcuFq}Ei<-qg^7SPi_xvUD(6 z1MjkDbudQ*@3HYZ=+(dqHdqHsHSllNSqJ0okEqq(XHhzuq=A(z0HFH`yvBzM6?zds zd+O|S9rbj*jGMW?L=-ab`z^lUSwi?Uuq-`aZu6(utWO3ZCw5g<;`w8t z?jdK8=PeSPipEnpcz9p&U|r0(hg#$zRL=fWY!Z`8dKqwl*GPblwcuWN;chD9=DdjA zA3M5B{`OC?as4ky^C4*B7X5ox2sZ7KD-c8UaS{YTkSE+fc;6ee>tN8XqLm?G*&((2 zTGOtuCw9pLip9oFFO%NE&kXhapcf@)6pKxo+WvxCHq*&c<#0`8bUdyz+3k&BcK|CC*mF4J7NkSTlTDg| z*pGUMWzXB8xdgir{m#Aed?581JRfk@Vixp9A@ye;aYyX~P zW!;hg{uwdJWNx-yzIRsa;Gab3(mXl#ocOM@JJvKdAWt7Z$bkCC?qR|g+`NH6EjMAY z3a3L)0F}&lXG zY~VcB1P_GcEX)bcGn(*ssN|s1IMUz>0c?Vk)h2hBd(lj&i}$iM!5L$73Lb zcyh_oM0I>YrP~dmVg5uuc^(hulwcDBHy4j+iI-77#;DE>hj<7Umx8$2c%|StOgt52 zcOe*Ti`U zfT9@Yk60S&~9W46rwA@nT=&pPrs?}N(9-1OV>mzVGoQ0g2Y zXW){3d<##^;|fCY#5^5pCiWKeC|v!Ijq8hce+r@J7&*F(G~PBeFkB_Lg#3ZF@*)gXiMpAetOR{mVfSIS67~$bnp^L~M`}NroFS)=PSO zVyOHol{){~@*sdNR47D=%nMCCHFRMN9ewM2TFhGXU7@yi+- zzyi?*4nD7ec(#rq!oisuXk({!(4m1L?0bM}dO~x!NpF(YU^_`tH91e!7ecCKrxs=B ziTC7Xm&Fdw;}o~&UCK-ZiaaxwJTr&uAsl6Jw-jI+4?U4Cw-Wku!ObFLfs#*QmKf(?B~ zK5|v;?BADMY~GSzyHvEB%-1%{?XQV3Vlts)H{(>3I}fM*1zXGs;`zY5gcT810F15JEWdtDjB0S4kZYSNE1wZuca)ciFiZtDVzd0?HL-oO3KD+^ z@rtsb<@+Gv7ds2-o#n)GOp2Fc>m!m1;@}$@{#Le z_vlp8dK-KHja0GA62oJhc@;4pz*~*Wo5^i%V0ouuix2}`-KbO&vQZ&^SXtajHhdwj z%#~^@SgXfUf$bUw%8EKz0ajAI^yMmx>jWExfs8Y2YQZ*Lw}|UDfUajhg%gAl8JJlj zl@jpYa$B$zH%z-%Y4U4is%V}Jg!MtPt|#BSA+~jv<^KE3MHxW}M+W)2du=6=aZu zn(QXhOb#}#g0g;sn{PAxoS-f9EPDMQMkS7BN$F((f5yjS7;a(834aDzPNw%Drkccgm)yGi#POG!g~ zX$SH9k}eM;&3Vw|@879ci#G{P2KqTQVTh|N9$)_}wq$sc_k`lBVO>3e zl~AZ`i~J}8cg7?L*j4Zz8;Q<6kjx-SXifS3a=64#?VUG_>0GQJ!^I?EDxR^dr4F z&E28I;PN>IFQ#TcPl>2h9I6n@Mdzc;Ut7iXl6@l?tnkhYXDcw>D(eudV7`nb`OaO@ z;haICrNB<<`rW0KK@`wW?f((segFkI%dosJhk<7sS*0QY1sQ~WO4vcd#uJuHSP@|X z0^ao$35z4l2G$cxSXaVq%Wws-yC;E31lkqwc_@x2ES<1G!cvz5TTIwm!pi9czm7^D z<0h9r+IJ~=Ey_d~^RP^@mvI@xyJIlacz5(eiFZdAGQ~cK4QY#}So8R@mf^bj#UN=$Eo4Y`99$3YPr@?Q1S@lcU(PR@3?~eiNx{f#Zy%dYy~Fs@mW3tIjt^rmM=|(Rn8i%Sr>7 z?op}^|DX8>_myymRLN5vKZH2#5YJT<hXLKPpR9j`j?oaz84E zc@nAIiORJ+lD{0{C(Skw^_N%pNgd4I8u_33Np(y~)dvL|2X%HHYm1Wn95wsrwC;b9 zUFFNGk5COg>1=hJb)t1^w7*=>D#e%|^Uv>Tl{T83l-udQCE?4hlz3C&j-V9JF+Vl~ zdmOr1y6kkNkmAAk9|vGZT}76JBEFBh_fmi&834BWMgYU?ejRd$Gv^I_k%%)aTM3fy zw(cv{1?_SwG_!ofQheo9nGWnJQp>ro^g6<#05i)YmIktE=m<;}@DZ$E6<^Aoa?PRc z&q{a91QwzwBA|c!YXEsI)gdaEPx(t-8}K0)5;JhxkzB~}tYUR!eRn_1><$4^`+8jb zjc>Uq;4Y}J5%|misf&|MpN)R0u>gmO$8lJE8iy&DaX4}khp6XpC~tvy;$KARV;2ss zv14ZY>7MJ`bUW~I+}B|%R^yP|4A?mGa=rwIXW>fy^$SnWn&?m4Dq7%C@{A@n82#E8 zui<}#cy^k4M|A}_r$vE7SJ;j(bRm(1vqao~!#71*>$0(QwT^am%07m!kaFkwPQ4e6+sQEHJlr zORqTH8^1Ec{*`PFk$Re=-E!X$sk8qUQd_uEo*gQ6tS4goF+@~u$m zIa7uFY?#!}^rO51q{Aj;+U3LU;t&k76OZG|B_{TzQvMZXGuy6|@%_#ne(W8&95ykc zW-|h^6j$O&Me!*`@ef6DY@{rPOWne+;#BJ@g!eL-K(p9&9PTg5Yr~};;TtvKRxUiN z2;Y=XLuek=P;L| z3l(W_19@gcsY!=o-1LFekNHEIortSgwB{a6vJ(#~idU8LA(RDnMlK+mHJVLkq9;d0MLQe$&ixaY%QBH&az2sQ z^V9I<@1R|Y-?3gOcp`waPjE>Wl%Mz&YoSBy3EGu-fYsL_7l#fqL5JpX=n$&|2;UW? z`HShh+GE3dyL#>y+F(eLzlxHq4N1H@@e9{pJoSmBiXZ(`Imu)c$$vyi;pQpJnGX zU&-$^mRg!^U&%#{rPk)BGvs@Xr50_{$+ORijyiz`YO_joRp0V5Da~VVj-u zkS0>!M~gRL4O6s+(27i!^bJic9&X%?DfpC}6p=wB-Tx$(y+X_HYTN?T_fN_eJo#;G z!E3M(>`n`X{0&W{ZYFchdh$Qn@>o50pfB?hx0COa7)Z-E4IoSpHjjZCn64sfrsV_}(K+ z|5pAW8Z**T8%ke4Ctr+~M)%7@&zPp~^ItivJUe?kn3871We|>U+J=GgDU50QH~uRV z%d?k}Qm>=)ce5?e$%~pvEylGYfBraS@yCgd*kwqQ;N@IuJJ+8n1?b9$b5hVr*e}B$ zxxk))Gdrp>RIMsGkg>D2e6N`_+ML%?ek4X}5U!Y|*Qm7SwQT84S$4P5FYPpYYmvMx zMr!itP$h~*G#U$)O31H?KenCzo4;%4PVj6j6skNn*1o2Oj`F0E1K&a#At-rrh&^yo zz8xdQb$wMw`rr$<8>xP_5xXeQI?~EV3BM|%89AWBb}p2sHi(e@J)?8}Qfsylf zv5QE-ZG@E1%|gnMlz85Lt(s<>T?wCZ#}-mk^LGp6ku9VSPD>zcTf!C!{VFltmRi|@ zTC`Owq@QrIvgw>b$Sai&!)UOwu{!8R_h2BDrdt{PvVxvyU#8L^))%g;WLhXVh6+8! zRO?=R!_v7USosBk^RQ)yaZyBkuE2gKelPL(eqmFA`H0_6e5(}CMuF`jek1Yt=?Tc+ zCH`gN&5Har;+GMRUx0u-i}+_%9`^HypBNx?z?}m{A%%cPNC7+)#u7gOe8E{g;CdJ2 zZ7p#vgu((#T~r!~ z1KUgEyl4b04j@GJJL-75y_@}t~QIT%< zU{I&HEVqsz2KpHPbvAUW7HN^NBsq`h4{wPiNVG=L5ZiaXE2@Q||Bx(LY@(xK})g`r6 z$*$$rk4W<7Y58bdskwRiqw?LhQX{kf967w5)X_hI+)PZ9hqaT!TTI1?o5wqv;F|EJ z#yjB;E#BpS$Sd1PF-|33MQ#5nCEh4fQR4MOscO7)pupq3_`5Dq;(bh){HRK_c%Ou% z*NyoyE-x%;biv_%i%#n9&(`6H5hk~9FZqW}qA=$?i>Omk@+>Ac{gnK0dugt78&1|r ze8;{=_l%B-++F+uAf+ev0xHPXO^(pjQ+v3{+~1SVQ~ZyW;2ODLec^0H z#z3Z>zyP<4+-f8^_QWiCS*-M7IQ;}-iaV_begRP_J=~)t2<80vPExeV-$u2V zXUH=;V+THRhP5MJit?BZ`&eA+*`(tPxZZruV<<8m$>Zm(E<1iWm zUhl)dXr(wRwIVlVP$?h_4>gWWA+vqJJUvNzoTLw&N+jJvQl<5Gsib(x``KB|O;b`_ zOyX2>^NQ|WRvvL z<5b#8AtdS8ASzuZtgnuBrcwyr4`Z!#tTC062|M-^bw8^^Kso`11eCH05T1$aKcW4e zY?5sS$eKL^g+kooecZF2z%|^%cOd*NR9D#`IGCZSwexHtwHf4aHfT+{1zTI=CC zgIw3SXz)mCy6Xfz&t%`=Z9hy7t1B|5#M0~b{9oC@sq)X=q>dxWZL@#6-Ir9&ZJR1? z51>X@;p$N}6u);qsqXhU8$4Bhw7V2jgZzFpMPAlj8rFQfvij9s9bcEt;pKX(xt82)zh#9{?XTFjm z=k<^pHz&o%NpW%&MHhMviq=eT4d{NDBH!pCHFq{cr^evG8ev>+3_&U7KwLn8pcPZ5 z2(HN$LH6T#2(MuHiCI^YMJ<-Qk|L+N(4c4V+pA=}>=GF7?kPBWu-pqQ0nhJQ6C6@J zt#H5YctI<@#`iIJoXXqTP!!m=I58C*i$OeRabV-`VvrHbjvR)I@5}!=$n3i@$O71C zN)_ytRovowqQX^}(XSkKLVCAs{v-@*3P6f3)C6|Tw12r|t`g)__B%*9Pqs@;@*yzd7Z!(T(!rU;)YIqXfWQH?ywXa+ls zVnGGWJeKBY@hezt^GtH;T`^Ri+e?ZL3<1hTLypOtdr5FAl>QXqTbtPzk&+6vFRUr83#MPX85#(8)^(D^bfXw$< zU*_B^Ad`L8HJn=ulIF9%%DLA-(tTE$bL&7B`mC>W?hTN+KI@yDbFK%S=Ci)V*$p7G zeb%=*mkW~Wvu@t@bv0eQk_eTQ@Jg4FR@-{ag?5cJ6VocjP|qR;vv=eB{& z@mW9O+{cv5Nj~c*oXrDC@maTXZU@K|pLHkaJ_VWTvwp_8T_Df+tofYtfK2yUcXO@) zWQNcBIp@9r>EpA0$+PHod7|gzj5v)NE@H^ch3F6Wq)$67{us8K`f(-CkuW{}= z$UvX<2Ip>q#QUtbI9CRefcbZuv*pD4tamtfmvi?xSHZczId>n#=Cf9EPIyGIGl5{< zn>pvlISWXApVi8_8eHbjxd4z5pVL~Cv$a50_^h=#7YLH&v)18UU66V{YY^vbTo%l^ zdYr4zxe(5UaxRQ>;hc-$Tm#NEtc`zKI>AD7CvhR2*%a(Agz4X zp>8Q&-%?s%s&js z@4$}rS$_b*U@Za}?z0{N8RoMd1Hr8L83YsHI7t60zw67ET~&W&tsGl}pk2owyt3oA zd^TgWa@MVlFRFwn41Uc1e$e8xRc?KaRyLZspW?KKO%+ZOR5E$Ua(5hd19({R6+9Ot z@5LseDLXnrt!^bi?ewRvRhY_67K))mmD&&Cx793!dGXt7ck!e3d_SjL zyFD=Q_S!qQ&H=86N`(^T7r&^a{^jSyNvZz%xp7i#ja{N-wc%d|42l{sW7?EiGbhhV zx5rPN{Pc8t;)16qr>0MvJqvFE4Uk`M+&DzGI;2puC0LGhNS(u$*T+wV;ZG0(1rt2u zWgWp1oIlAS;a>rrDo=bIk4_fI%O01u)r&o2^HSZB5y4)%$ca58_a7&vjED%whDhOU z3Qj!kWodr{(I5~j_YHfgeb;6nT3lhbBb zw@w)NxS-0P`j=e({t4;VhFV;fU>+~=v~P@z$oEc=`dXaJF5#tk0BNAOoggd%1rerJ zp(G=mbV){k(ya8^_Jqmllb=qXJjp&{-sH5D8MEhCk55V%A>dOTa==yUs^ ziF0S9qvwUeNrQwzGbT=%)7vg2N=Y~hLi{L&2#INFv(xPHHD*tm3?RSP)6x)A?|~C1 z*+-8WRjoqsYE^8puB{*-| zg1vY!Lw|v_M-LkiKVZ_Nw8?YkJQ#xyrr6vrvyly zBG!{PPLn$QmkpaHHGhiykquF@Axe#)pvkuu{I=^nc;YFqq(_Y)O7~v~r-#$!(4$5L z;(K>tpb_En>}RAgZ4)LxHFwH`VJ9SDDftIRgP#8Kzj{V$?iV$Dwmp7!YTE3lF~l&~ zt1U#sX;}=H*-WYL$f`>J9^9BSgScDmIA+%LS+nQQvSUe@oR&5>^&e}TFh;_17M9;` zmUPoxOPdSquH5EXY0n_fJ$y?Do<0PnbiEBqY1$47BD@Mp>3gRNPddbt4e5FA$sN+9 ziJcdqOg7p)BTD0gD5aPvrIe`hZv0(&Z<@3vx+{3VLe~mjcM+&QE=lmW{K6b*Ud%uB zXn2sG@Hd|t>p(^) zvxy%yf>f2ijw)S#KmVb0X@a@77Me#0mfxEv#p^(TDOkQWPikUS)(ZK~JltEyd9V9? zX=tQ2yvdkyzTU*!L%e+I_Znf{htHnXe%Qo0(&MgD8|(s^B8Zq&L}5?yyjrVfOmT-siBsNWySI)SH0 z05PC+BdrZ6Ug8q^f>JJefGVpKD6LirptK~{2BqBjgVL?x2B5Uu)&m6@AW+3rDOE(l zkRln80x44l^CD3@eP(dM{7IcT}`dNi%R&{0-lQl>FN z?IX%hLGm}trJ=PnJ*>+171Fvk8c)>7j_mnqNIt!yx_!?qsl-V^p&BK)|1}m#kH#WV z8jD2n&Xz*$DveQTE0wlWX{<`Ssq7nEqhT zY>A&bF^w`yf6MFVpLI){OlCWNTw%2o9qmPnNkEiZWDnybuN5ebsCHrUcdMnC#>>Ie ztO=|YGcWzA857geCN3m>%A!3?uKS|Yy_P+c`?81T4}TGtYf-}{K0S5XtjPxZd_fpS zr?mQV$Xe-ReTq~1tBwI06SOoDrOJp>_Y$RUB1*$qte0t(t zEKPctc(4jyU0!`HA-$^o*Vq1_|9C&i;yP*2|Eh26I%#ZIt-i}@c8O9}HUAWgAS6wk zGFjUPCk>*rvE1r)>H9!!??)Rbx#{h|5L1#I_J%aZ`OjfY?x;D0Q*(*Z@<2FMM?9Tb ziPC08tDbloo<#8yo`U~B3{$6~_&>&}B9BuYCa4wAFr|tfR_Rcc4p(WCN=K@6v`WXS z)S=SHh0fg3comqS(qxrBrP4_%O#ziZc~c6Lx4$VhtCui)E}bs*>y8AT@sn>#DYa+- qLK_209=cu{Bp<^22>Gw9m-^Rw!L(Jv=V5$?;4?Jev~^fz{{II*#CMng delta 39475 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 Q_>9MALXm0L#Kxlk2Rnpx^8f$< diff --git a/bin/kernel.bin b/bin/kernel.bin index 1b449702a8c3f032a207b0338d55e5262ef642d0..f924dbb861d808dd9240fa62255f3688c110c455 100755 GIT binary patch literal 82148 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 >K|C2aP)a-s(cf; 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 diff --git a/iso/boot/asuro.bin b/iso/boot/asuro.bin index 1b449702a8c3f032a207b0338d55e5262ef642d0..f924dbb861d808dd9240fa62255f3688c110c455 100755 GIT binary patch literal 82148 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 >K|C2aP)a-s(cf; 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 diff --git a/lib/ACE.ppu b/lib/ACE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..a6d596edab34fdd66b691d9deb0fabcad57cc93e GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pO|nUUq%}bU>Omq1DTNZNASeV45-}kpsXyu=q-`i$(oINGp$9?m zU+|=O5b-1)yy-!xHxZ%W(X$9j|A4fytnylpLz|PM5X5M?>oB2wmrG?C5;0Y;R z?Uc?bC!o~%$?wt67oY8gl~PguU<@lFJ$pST(Gsu;U|NW=`F6eg)!tp+0-^`I+udGc z^XbF*{MqE*bCd?QdRFt@$CuxJUdcQL5L#{7-Bz=4=Xd1N&WA@Uz)Y*#sr9zojc#%7 z^{d@$t2)pKqnmZRzTW5zHhvtwwaq+W-CFDIFMP?oc>n2_l(8ej0GXD?@f6lUvuUlg zfz?49Mj`Qdn<7(uMEsg~c`udmqZ7nFSh-)R<_d2B%#b1#W)#G9QU)#x8A5X;b-a%E z9S2R>OyV_vL40_P`9G*{6EjovM~3wPu|$2m2un%>^PBW1gtka){3(CzINBtyr-4x_ zYPdO?;2zh?xtn?JRT)QV-lbaKtzm3mG6&vzfQSU816(_U^%&ARl0oYnI;sw@x} zK8;NY=qlW4tXr)84zJzbkOCDL4e$U0WB$3CIRp*zT19=lWCK_l#TWP++8hFnn-mk# z4&l*%7=y5EtLHeh$jQqnpd?O%X=c8ducm5TE}h JWHI8%`3nLAkY)e? literal 0 HcmV?d00001 diff --git a/lib/BPE.ppu b/lib/BPE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..c8d8dc37ca5f5bb523759492dfe7a689236ad4ea GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pUz^r8tqB@X50ZnBQYfJcfy47yZ2xlh#qlvoNi<5 z`QzmLh4k;2C=G3Qt>(K=ufP4cntKW$y4JFtRj>2J(X=xl!VI47=)@mDA z9kgK-6_2+mGQ`KluZx%WQW-xwP3$9;`;}_G@D{)fDN->;K};tV#zoPv&>TsftmAzr zK|?l^cr93v9A0Dm4;t9S%oP2RVLe1FQ6DeDlCr>pCjE(`Ez+7`Dj2)2c8b^2z$h~j z_Hs1IJ+77Ww@mI;8AoaUrCQ&sVeCLMhyHqihyqc)=Qq1B#sEkPSLEF_2@-7tD85gED#Sq zhfOKyD%NRiSgidHuf5)o0u>ky@Bjj1{&|`?0uAz8MSZ+v6Id3-m-rjn90HA-ln~Jl z;n9B#gRpF?>$7uEd2abspyJZ_jr+*2j=iD#{HO;6`L#uawJKKjuq7W0)CXLFby5yX$oBZ36QJ+%30V z+j#LfF?TNY`z4(Hn{B)P;mhmYA6GI@0R&eYj@zi$?)-{e+W!1x1z6a2Th;bfv*s3N z-@fTwTlE2rFuGwm)_Segd-VO_y%Wv>_StLgz4@KYt508lVts-enL!;+!{AjMNFZ9b zSDG5N5Il^6(&LSa!qP{iUz1+mO(hI8P22~{%jHTo{|>+;DN-Ru5uA^diK~L9gnEQJ z?#KI%gJIcB(i>if#PFK%|Dc{t9GRj&QnLG)%dCqRJphvi<~7Mr5NVOrcq#9^-#1S3 zdIA{DL|HX5i%FKNrR>cdXRCz6jM245S9>wGC(Qn6-ILvd(mpPp=0<0MYRxH%kzA4x zLMoyqHe#lPK`BIOiY83ikrW)o846BOTvMlnLM(^6;l;^*-mzii8V3Z)V0RUA05MT}!< z=oUNPhBu`~8X5$WU(6N84@Axw=m+7P$C*heDLQkQ2E1J~L8`=*R5*zo`tz3UjDjF_ RmoXUi?v-Gn3+dJqKv z1w9oHBA H$4c|qnCoyz_aQKi%ve=vp>k$(AVPNGF%2#Wn`puuQv)gYUECDm^PP^LOY}Gr3 znHSG@E-mXoV~noXoZ4!=-Cz5*|H?5fz`DKC-JScGefsA84=H0uh5<57jpGTd!)C)? zY5}W(HjE8M0+=F2D#|E`>7)!?6fuP6Q0j0U z?>h{dvYEtd!Ggr#8uNe9z$Rv<=#LER9%6}lcoCMA0TwjrPXuj|)&x_**mbodyq*L` z=`q90(Kz?GTFPCsxK||{rTLd?J+FqbUCHeE>pmh9l=g7#6xJt!LTQR7NG?bSEYt9$ zD42sY2H?SE58aF8} zq8-4)|0o7wJ9gJ~X`YkkP(Uf12GdNdU{%spuJS8KAJ;8DfimED5r-Yv0{$Z@=QjuuhMaJq8jyitC<*A~~yW>EsE5+`J?Npvohui1`IfYfcqVAPMp Kmt`^J$o&hI$&xYv literal 0 HcmV?d00001 diff --git a/lib/CSOE.ppu b/lib/CSOE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..fa400d0c97f46110b64e49a20029bc65c3f1ceba GIT binary patch literal 1330 zcmb7CO=}Zj5T4o1CfO~uX_KG@{Y(kO>JqUt# zPu|pnh$rd6n;wLE61)^V`2$2y`~hiWS>I>2*)HiN9oX4hqHTs6ObP6ZgqS0 z=8MOPh1t~Kmxv8*_Uy)o&u_l}x}13mAhOnSx~)e2&L8XI&Zj4M#W$Y&GoF zwtzKM4&jJs^ha!pwnVRsmY%sJ`QoggaQR-jlFh$YCQmalMHPzDbS48YMGPr)#C1GQ z-8&ANa+yVI!GOf@8S^A);F7A0_@C_S0c^4Q=;$FlbHIWk^NC1L$VRaJlAP)p_C)espWdkGvY*w0QHDxJnyu4!%FM9>lNa- z2cHF;1hb-@`i8Ce-%)38I!q`9!UHtGs960x)*PS=_GiU?bkYPihu{n98_GNkO-(5# zv>n2ue^XXrJ9f`?c}aOMA%as#2hprtAy-LP5q1tvE96X0IuOQu_EaN{GeQv72 zTZrbAPam(2{Bo`^ejSqHkUFSl7Acb;k(KsGfWCzeOeN)!h;xd6J1KrcjioGllU|G%SSs2V1NzI=T-}23SyJK2eNCMiX=e?S5aw<}qI4 z^cbiCYaByfE9I6gHLMbHY5uEPS7Lx2i09Bh_h7N0e290aaJ~Rk=tg{o<%xvgvJa15 zzQ?X Km*p^|xc?6;B$E{Y literal 0 HcmV?d00001 diff --git a/lib/DBZ.ppu b/lib/DBZ.ppu new file mode 100644 index 0000000000000000000000000000000000000000..711e13dfc38838bdd7be2d7dd3869709ad602d18 GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pO|ofi)0&_G^&mM2DTNZMAShH?WW|J%r2eQvNZU}hq??dUg&qom z|AII1AmT|Byoerzdi7H95AY;{;vbMUE$e)<&2~vIabRcXeKYU9@6CLRi%T>4*~l|e zy4qd5th|U)AKyQY9Ts+Sai!Dkv@NGS)wIiqrkKnW7Dmg`@`8=-U6aW-EFs1 z-+cZgHGL`b_XSELTOGUc;mfP0*I|P9kIHMq@lQM8o%n+Ibsnd15 z?=)!2W)iQ33sU`S%>O|{o0yrRLmAd1#1eJ!A}lEfENs%B7}_GO38%ub=V@nnJr0br zBZi-&QSNcIv~b(vUX^f^7F?=z{TjyhC36t0dx%I-I>5CPSYHGRr70RCxgaI5Ov9H} zkeQSW#vlq)G;YX_wBQ&_UucSwe(Id0z~n@4JX$|_UXnN>Bs)cue%7ZK<*aVaS6CoE zd;y!%&{e!$U$fr$d#{Ba&a|9X`w2HcT$p)|-im&k3wQ39zFCuFW^bS_e;*-k)!)C0y~)Jwvb JWijB$`v;3!k(2-c literal 0 HcmV?d00001 diff --git a/lib/DFE.ppu b/lib/DFE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..aa065900d848991ffd391f1ec0c873bbb82f2ce8 GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pO|ofi)0&_G^&mM2DTNZMASe_XC1OHIQtOXHOxsYlq??dUg&qXa zzd-0sJcxKI9=z#6s8=rq{{uk;#XlfzEbDx;&2~vIabRcXeKYU9@6CLr($ZXZKJ$YuvzJnTUZFI!)wP-*KEL_)^Lq9ffXHggc3REGz2C8`d!L@J05dJ8Q|oTG8%}ZN z-P`?}t2)paqnmZRzTW8cH+~$wx6M3Y-CFA&%ze$i{`lpWl(8ej0GXD?@dVakvuUlg zfz?49MiKFNn<7(uO#GU7c`udmqqD?5TzOEb<_fz2rbv;BG74fkDFYWp452xcI$g*6 zPJ^awCh=OZAThYc{2w&1iJ2+-E5mw(SfUx)34G({667bFChX?W7| zGt-j67(`);CJot<6dZ#Y2u)GkOP!Mxn4IX1N9!feOAiE;w$_OYzBeGO^Sp^-DQVKCtK~N|d%ZdpxN!98hq-`i$(j+9Q(1Rcd z{sM2}L8N%{;7t!g#G99bzd;4XTQ6y2iSx~7*N|Rvbl}aK_szVw-+S|IF1M0QE&864 z(p4vSK~)W<4n9BY?A>{DFsYQnfcbb3>C3sB60HD3j2F$cu%~E@}QE6r8 z_g?Q`U)O<#7~L+{%A1vDZ|mFf+nQ+s*6oeA~{&8ofD z09FQV7zM-!#hc^(;3q$(nrID48Q~-IKk7(h)v8 z&4XrvLe`4HBp-+h4DJIRdzl%@pwl8}MN@|C5V6eSDO^=6ia4n=vIR{3iJR5qB+p6` zM+|9P(TtOI==nLTTQ`cVMh8BJO)-c#*sN^Y{G&B_?Ys>sP=Qeo7a%a^$?4KDXpr|* z)WuD+Nk2&XFA9ofdkjisH c`WnN_`7&j@<`E!upD`HqBJc%Sj5zB51(kG`I{*Lx literal 0 HcmV?d00001 diff --git a/lib/IDE.ppu b/lib/IDE.ppu deleted file mode 100644 index abd11e2a26b7622bb599d42e6f46effbe3de7d94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10565 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 diff --git a/lib/IDOE.ppu b/lib/IDOE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..a180542134fe326c6f7361ef860e8aee839400a4 GIT binary patch literal 1330 zcmb7CO=}Zj5T4o1*KVmz+XM}050Zn>QmCN{f?}aTR!j^@Dt@9+YSi!iHZSdbezFeCu-#6jyWOt4`Gt3H zcdylSpr%5bRj0aH@AM!2JpAAo7GT}p=QH(`K6Lbab!9c_2F<#>I z1gHUP5<{*Ovo|a?tRix0{;OI~Vu0<7=fFSrVX>fmfOltbJ_l6jMtq9piG<*?5075H z$Gd?=2+N44!g3=iH?W!^*@)ww>$JE~$}#8Eay{o6aUw;4dc-rHcUrs=rFCnyOg!ts zX8|X{tXQYMX)FGB)Y+R36H0+_9}O@nRzHt5hbV*nS#b}YG=a?{_=5U|vH(LTHb(M&6EmD3f39mkHpvb!n=&!fz%NOvSF_>V=On=0@Y zqB-T$$Ezc^V&%uLLsA@32i43WWfCMZ)BXt1x6py9s64XVB*quYRc*&FfeBqfxF3fu J$zeqC;2+OklJNil literal 0 HcmV?d00001 diff --git a/lib/IOPE.ppu b/lib/IOPE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..40281a2e4ad23a14dbb66a699c14c2fbcf2f2a63 GIT binary patch literal 1330 zcmb7CO=}Zj5T4o1*KVmz+XM~N9wdiCN}+@*2nq#*te6;+RQ!UFwxO&fn~+U~9t6R^ zAYR0Sh$r>nO%Fo7dMWrDL{Ri>+F0WI%r@I4y~Kf?o%fk}=bewISX^7qu7sX2>9kus zM`oBPzVPhNO`3ZfBcciQK@?2PA?rpl7lOG4a1xdl1Gv<#xxbygyW4>Dh`Zx<>&>SR z6HD`{U(XR6+V0wo_n%&V{eCg~7(jHR<+!az{nk(O{O-p`>%a`#?Nqxv?Ydi7eEn+g z@`eu7RA{s2)VAuK{)2Ca?;OJdtlOL2{pBy&7aunxsuDjQ6^6_F~t;$(sZUUUW$gL&=J?kICbwN zXvk$2tpx)T!)J{DK?9dmWyF7FU-w{()k8=3;mH6Cip(d9vB+qGuAn^_XxKc)OPrnn zHDFC*$kkHrs-=ciLN3jJRqII%uzm3y_~$+>7L*V0?hMXnfePJ-Pq93a5M1`*(aZOE zH?Rm{8SzwDZY1RfRx>0UaolsA78go6=A2rt=R6}$qzF)tc*gTii#MXQZe6Jm&wB72 z;3Sw8>(sYw#s7{vd(&Y;DG=_X0Y=5@=dtDxWw1Xh?xB+=undA1)Hjqx7@C?=TxdIl zNB@Sb!glQLV8AQNdjS!gLOO_MS_P|;t|II>cKnsyRyjC>GA|+Bk*wlB7JaU%!0U+S zlusY8j{K@s7{3llaYP+dGmn%>kjPB?BS7Cm2d0wp$a0eyUnpO*9lr!7bOqsl9J(xr H5ygXl{0Nge literal 0 HcmV?d00001 diff --git a/lib/MCE.ppu b/lib/MCE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..ef62bfc2265b049850faa7318e83232bc23e7e12 GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pO|ofi)0&_G^&mM2DTNZMAXq3GBw|8HQh$OWZA00TZbCK{dJqK9 z-n@yRh$rzNUi2W;n|LYsH;ABk@s=i*b-vkVUD8V&*x7mC%zN*9GheB+vXEU2JtC#6 z-O^d*hLq}me*P|f@9|PpDK)_#jA2Ej7cS={S^+i*Op7o!->y5q?Y%qOK=iP)<8&Ka zPwpq?&!m1mMQLceYc=0~eDU@B#q2`>k+qiXw3>|@KV#>2KRj3kW?D|C*4=40oZ{T8 zmwQWVI?x!STXnm>(dY~|za6}>%{*Y;TJP>Je91n0|LKR6u_MC(nU==!6xLz0X|1+_ z)j=CZ5%GANB2#=!{JMB~FO~753 z1x?vZ;CtrYP>EPDlz&{^^ZJ>m^T05=R7Nr)bv8di27a)$>=XED#Sq zg-uE5D%xpmSgidHuf5)o0u>ky@Bjj1{&|`?01fh6MLoP^6Icet=lC1i90HA-6c^DB z;n9B-gRpF?>$zKm$b30^UXHfCB4*vot^j1y!XC0^Oeg>bNTtmV^X@> zE}vIkM5%?3-=Z&`#1nC))EIv-h82-sx>}HE3D`I=Eymbvr{Vr_cJ6Hg(WCB`+iPw- zeUO?xm-+n+rIF2^-Fo-w<<}pV^N#?;R@#o+ZZ&WHN?hFj@NgNJX}jHeZ>!UEOEa%u z?Oa*WfhHK;XgH0vW_PguegCavT7Y$XwYNL>CI9^W=buu>jtm22+8W0bSVzs4z1#uT z0Bsn>#N%y>Oz{cvtK#LoRKbr<68mWNZnah@z5y^rid39Y5YtH+xF}`_&5_j6I^K5_ zG-Wf1*TMy<;Wg&}prK97OwnH%)_ueh_3Qg(;deWJg+X3}z@aMM*z(N>X5Qs5c(1pFAx|91)V8qG>1R6IfDWV<1 zqyIPtVLNuu^Jt!vmry_%oCecOt7O%(b*>63k3X*4d;;abaRG-N*dqSNQqB!7yoqYc z1j-Q_#YL-hd>V4Xfoebof}u3@V`hiX$D2h7q$-?{xu(&%NU>o%0Rd8X7=zIu315}P Hh$HVGbf=Jz literal 0 HcmV?d00001 diff --git a/lib/NMIE.ppu b/lib/NMIE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..f84775496f1ff9624aa376967a6507764972b3a8 GIT binary patch literal 1330 zcmb7CO=}Zj5T4o1*KVmz+XM}050ZnJQYfJn1%-k^R!j&pIrz&WzuP< zc%IBK(Z|axi_b4Uej6jAG4(+dOw6G|-pYkwE(08grNscwwW{u4XZP+FAU)!4yPaC& z*~7%#OzO`I#D=yycKySbSKohL$vy!PU2i&WvtGOX+g#lF{AdlBVY}_s&UUNj7G~eP z-o3W212q-es5;fnTD$k)$H9BYumJ1!MrUvSTlVFrufK3csT__-HBC(&CICdty1mvC zu!_nd92JfJhz-%E=nc`*GnXXaG%F}lUMW{{`FG0XNhYS4LQ$H|6vj)@uoODvIv%I) z9S04$%%ZhmKw|KWaS}9eNmWMtPxf^Wwpd+sbRV7!u%O6%q8N*eCg=*<{l13HW4y%a zF;D~6IEK7h%H6Qkuu90K`LAkSi2=4Jo_+t^gT;dKKHiJd+Q-bwLBl-8~572;_R zJ_|SrX2sgIOj#L^G{|RY|WR>?n5hmEBP}ID;~;BHf`Z;Xe|6ZmPgr zh~|_}AFq!5l2sVJ4oPuH9aJ-elu3}tO#351-$DnblJdxMlNetpU$q^-1SWI^;a(iN JEQcY*{r_w%lb-+p literal 0 HcmV?d00001 diff --git a/lib/OOBE.ppu b/lib/OOBE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..2d0050cf7d3c6d38fd8d5a3e0f788551b4766933 GIT binary patch literal 1330 zcmb7CO=}Zj5T4o1*KUnX+XM}050ZnBQYfJcf`y7fR!kd`RQ!UFwxO&fn~4 z7sw0}eeFJPoO-hojS$h4`XCA>=D_;;wQK<92EZsREdp?{S!ws3?!8?=dZ@kE?o{i~ z9>o{ulYd?yHn7{VYac$p`u_7u<_UoCR>NsGYSr7n%}e{A9&Z9O>~^c%*=ttYYYT5* zcUQJ_pr%6W6{oUOZ4Dm&IDGFI7GT}p?(~xBz{s;A4Qk4<^m3`fZEmjX5J%A?-%r7#ZFvcRI@w@!?aHwJP7%y>Z z3evGIp&;NuIoH2PNeWrk9gMg&WJapv~FE55zo2s zIlu`pE7Gd&*oyxxb#|x2gi;_pKm&}5)z4+kAt>5gO-|B2{xQw82a zG$%d!xOL=Kt+mPPkQ7JMK{fM8nE;8*ls5wOEp%WiD32^Rf$;@$72EMjU_w_A9>k!F Jau`!Q{0Hq1lcE3s literal 0 HcmV?d00001 diff --git a/lib/PF.ppu b/lib/PF.ppu new file mode 100644 index 0000000000000000000000000000000000000000..d09bb5a43a2ea99a3822c6fde456491dbcb95ba0 GIT binary patch literal 1308 zcmb7COKTHR6uxIBk4b_yZ4xy2Sd=V;mO=?t5EP0wGGfAzq($o@q-}^J=_F)Qp$kE9 z<=&mR5OF0g-04E7TQ>!Ng9wV?#zoo~;`z=bacnp7zf^Qo7o+ zX4S8NQa^Lo?man^m^GAAF&;3T2a#swm{+t42oz}{E4R?9x_xJVeFuOZa(CTMZTsni z~!qL+Yc{3f4!W21R%WGblhg6w)Q=Gaqs=Z4PX)5ZC5(Gt(seyfAwL$KaQAW3`PPJZZ_wIk`zi}caVBOy894vmyK7aS|8_p3P6bx`IO^vrFa10p@d!xlr z6*0poEHm;_ge!`oGH=N&xl&Q`N)SV#(w$OyCI1?Z)1*ilj3O+ZR1p7!gA(Ks>bM`@ zI}S$VGRds@9g?GOBL9Q>E^%aveoLqBVlTTcGFk^S2h49$pD@ZIrSVh#{a~P>uv5S& z6AOAA#jISVxN^hfQWf!%HvUuVdM=C|2y-|-_pl>D=@7rhaXtr>MW*N^$@57;r5B#8 z#>|W`Xo9Fq(Ns`wqy$G>Mj}%b_o!1sA&|dXLCF_#JqTl=_3ppSBkpGqz-Hj&KG!$Y#tkpYZMpB zj^LwfnA>1Gc4si4CFU-Hr!*deX@*%a%bALm8~IJ%sx`h(a|rMXo*LRR)`>)OlO1ot zo6=*^Ad395S(rQud0;3Q#NyQ+(lIi_)RC`FW?ET^$zCzMYAOnP#*${>O0KvW}=pN8iyk#3Pmk#!=YJ|1Wr4t2&R zVq=3NE`Ff+*hFM7)<&#qBt@#0XK>y|$^p}w4WOaz0V;Y%ESswJZihUDND`@G$A(=7 zUxN+wkQe`Y9E48grR_ z$F0-Q1c6yevQvYkNMfui>%3Ibw(zrezZxDWh+LT}W*l<6r>9FZnYn5L^qocze$N0mA!u==2g}*olXZA8{ z?Wohb>0ItyJd-L+=aP#29zA$c?W_agO}Ub#gtTIgR}@55_AwiD5R*-XGs1?Wu%;7c zIJ>LD84v$wK=@`G18Vjf0UgD)OvB9U0RbV&8vVeBZN)kOw5pLQ+DdX*li1)H%gxHv zpdC^G&m%ocQG-Kv$iENZ4UN{N$fK*I^#qW!^$y03Kv!;;^KgWvkty=(T4}feCu?n? zfiZ3@I=l;;eCS8DbEz|F?xu6R)}NcyIOB4x4`0HL>~q=;Ey`vGGx_is&iSmaZ#MJ^ zMnP0W_=I?Qkm8_U2!hPQBl(w?fdyf3li8pnj7~@eSsi`bF>9@I9=lO-~HZs^c8#4~5~=<{Fh8SN0UUI&r+Oo~6H|@=fDN z1KwVWo74xkYKOgl3roik*Hm87F1;KX{=_I~m3a>{`M0ukN6Xcj;>Hs&jlZ!9kGaND cFVqICM-u6*884|KjF_m1=ckw~Dg>2&18%+!1&Nug-yZ3I>X7Rv1ckax0 z=FH4FGqXEAJ$qo}Q1CTU0d;wLP@QU0>f+v|*q>9!igzic?&AkzH$Oy8)9HhmtiFYf>Af0&lU5_)^pb)4`2S`rQ_f=WQ&DNX?@iyPVW2Y z!;L5A1K>uOyJF_dMXOLg`SZb42C^nHyzJb@Geap)s7EOV7lU4IHY>%-nQ5eU7=*N{UoH zv1tqmkO~3H-yWux9t2n94LisiLlOj;NoK>lqC;yGJzhybOM;dCU#O7G^`dXp{!9`&~ZCBn`uCq?jH(AZjw|K?XhqG`-^*)$2EEVruHh(BaY4cw%z&8QK31 zmcf#J{1}6%0*xo~`K8Q?RXUMhP}J38yG?44Wf+Ji<0MUu@-lzXFf#uTKYBb0q9$LG z44eX*F1fzM{JzXi{!edqv0A@3-EG>NG3?3X2tO5Xz#%y=x`8U#i|-h?{)VAwH;E>x z!Z8HU=?hg71jcC(ikd^Rrj2X{#(n!4D+HXB2hV>^`tNB?SuBVwPK4K~dB`0#dUq6}6q{4nf=qz6x53 ztAv(HorqC*EoaNSwcKPb29*&Qg1`Kd3qv>IAGw#2HeuOW@P+|s!3t+|fHv5~7HLtM zUHxwJ-7orV%0o=j1Hj*_H(`1&(_Hen z->~WYU{rf;a~b1YHuu}niKBkpqw`6oC!BBGDU8~6+DVEV@~lVaEa;k&G|R{(plQ$T zlGOe!b##;iJT^BIhi!K%hER4tFoVdT@EQ3T#OkAxAso6Ff#9*o?@E5IFo%Y5Yfm|H zVAep_niO<^&?o018@&ll0EMo7ZXj?~8@zL?2njF!)8D$fChfzI0#um=F z2)d>yf6B=M-vk^~ zfAPB?T07eTUJ(<{m~h)kPEvm}W9TS|N-gasUu6I6e2prlCisIftcdi=?Yu>0PFTz?;!gn_xj`KpHjw-3j5GXln!z24AvKcLTQSoNG?bSEYt9$EZM7W>EsEGACrNNpvn$sM{@{0I3Iz!DtYNugGG= Gk^2w+{*f~P literal 0 HcmV?d00001 diff --git a/lib/SNPE.ppu b/lib/SNPE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..f0920c2a3cb1feae5a27cd15d3cd682e1477e601 GIT binary patch literal 1330 zcmb7CO=}Zj5T4oHeC(Fmv`x@}7Lgo;ltKwr5flmrSur6bsrUsUZ9`ef7ui(kK@j{0 z>P?CiYH%scOVJcYu_VrI#B!lctq z;T%~ZqOaSZFP;7K^jVaMCe#N}FfkjYd?9PVTmd)=)sRj=LpWnI|$@Msm7>A0OrcdK1<^Yd?B z?_OQgfm#Y}RGZa}TBrZu`@!3$X#>`s_3qx{m(0uepMK(uQaKcsYFe5)OaTa6b!W9L zU=@`^I3gPT5u2hd(d(k6XD&*Cs0LRdyT6_OhXxq;OT$wnOWTqnhaQjR#Mmg_lBi4!RT)FYnpywlU{9%!+nu8;;_CN1eUtFrgF(_t5~OV)gS_bAU3~pB4AeNds6K!ROUClzAAMno>+? zJA_C7rmVtgI^Ds5mz4J+A~=b35Y4jlb~#l+*ir2GE4!_7a2jP^LApa(#(ymO+)#lx z5zR@TK3*NUWjjB99g^aZI;dt2DH9-(mGVb`zJ(4w@irz$eQV~HxFM^03MLdXziik(sSmJ#1@_wSA#evy3`_1g`%+Bn*(b07Oz)t5y zQV#Wav|H_NR%*EP?DE=g?=H0|r8<~FUS=XsDwfD>&qR|6C+2BrU`5($Q`0w>E$=A2 zJT?#9;Vz#oS8}sg&b0S!?EHEa3!L+n{LI3m>#slV9k>9XX`)yt7iV%uzj${&esF#q zm?vK@Wh!Uqa^-mMt(!0RO*nvh8J*1*vQxQI_0)&uI|WY^up>WNS?qs4aP9t+&zJ|8 z$>ppWs38?(nC`YFY89I{A1aB3Es2rxTI zcAAhBNsL`(muod`HP8LPsNd((b<}3&Ig=O~j&i=FZZ-30?T2p3K`-JcZONQhPqIi6 zxQwJ5)Cpll4sB(_ZLp>Trb8jip+h4hhkFhTCJsj9gGc1-zjy^NdYQFuRHkpbSUjDX z%~ht0lZrY5dbp&zSqH)`a_vgdXw_++Q3Q3kli8p>5LOgNj15O%O(`>uPAiUd{68bX zi)xG{)MiAoALlV0X0{>$LXsz1!rKgC9tLXlB}FYHyU1$~*moBJ(%L=p~D*h2hnqy zOS!2$_s9~@^$RAIW?Z%nqU@c>Hz(TAqEOZ`QxLb{o-gS7kfFy@0#Oy=6XNBMlmjgz z2r^5JO%`BA>)`-M^GD;+R8PjV z{cY919)P|J?^Eqzk+#78o&oarA@fsaoQLiYf{i^=0fE&^$edSC0F5AnFAR{suOP4J ziM(OMx3H!zJqIk=0*nnt<8WqWeMk1GyNFeruy1e`kNzI>`ZBm`+^~~~-y)BC6{4{^W7&McjF40n QMod(d-)&N#HI7vK1+0AWjQ{`u literal 0 HcmV?d00001 diff --git a/lib/UIE.ppu b/lib/UIE.ppu new file mode 100644 index 0000000000000000000000000000000000000000..50472335ee2d0404ae003e90e2670aa9cecaf42e GIT binary patch literal 1319 zcmb7C&ubG=5Pq|pO|ofi)0&_G^&mM2DTNZMP*5lsWJ?obe$-!wkhY<0Nt2LG3q2@; z|AII1AmT|pc+-PWuU-oN4I(K10cm4d=bLTTCB38rJ3H^2dGCF1<|`Jf3)#ic3sSl| zC|*}?NGbE#>iuY9Wi6_dn&1z{up-i{R!*WSut{KAgt7Tf-7(sSk9UFSVQ1gzHFjR^ zCFZZC{=7nIXt!rKKYn@h{pV8lIe^GUyXCZ-jkVvgn+Kntt^+e|r(5gocN$J%?%mtN zI~zLC7^6G&R(-3{9c=$N`Oq>gz`DKJJ6iabef{a{FDYY3h5<5djpHe-!)DW7?*OZV zHjE9%1DGL2D#|E`>7)!?6fuP6Na}1I?>h^c zvYEtd!Ggr_8uL78U=uS_^jC)U1hGVYya-Fm01KM*CxW&}Yl5j@?7G?oUQYv~^n~H% zXp(zeE9LH4+^Z6f()>%czE{K8kz|hj^#BnGO2@c%2J5Rpp)^HPBo`zEmT7p>@-wrN z!5Bngilz@lHykr|#2E{k{8`>NKjhhq~(GKC! ze-wkTTXxTNX_1q+P(Uf12GdNdU{%sJuJS9#AJ+pufimED8;70RGX7&JXN3z_QB5gd zIYJ}9Y!$|*At#)w24o-@N>vqd0Kt-D1_wDlEDD6u8+pbs>} z1LE@m38FMXMIwmsASyH-G#>Ru;<<^0#7A3M^PkggF5aBv-h1XZbLXC&`OhYk^_7d3 zxQ~&t)QjXSmFrdN@U&g(%niC@DWxXyg_Xk>k#|?i!9DG1H;j7V@z}ZY44%KgCHGqv_FB~eIKYhyJ6+~OBBYJjVAir<%FzlEEFZ6FQg)UVYQ!IgJ2!b$E^L>$%HK6sBB=}J zUix0Arrnb_;t@U6cl}}6)>A9Ru8rsw&j!5LI(>QaLTx;zA1!OBx?JATEg+Ey>)!rL z`}|!i0|2gM^m8<_`($x&7EH^I>YAsaQ^|J z`~$Qpn^Q`=;xM31RkAJVRslFm@!AhKhJ!2)hJy zRMlK!l1~_ql*VXy%p+AVK}{fKZh%K#Fjz{)ie{WAI4EDhIgGH`G2Ri6t;PCgTqJm+ z#Pa|ukva2X2S-;$?aXI7(x8GCi=Ocu2S($qYRNv&fuRJ8M}VU%9m$~vnFQul4(=Du z1HpW`BMsVO@mw$tJMcJQ9uL-_sf_taXrLQY!rYX`@B(lQ3-ba=141RJC(jI1Qy5cU zyo1qUJk@bTR9Pm7d8y+p=%U4g#CW#g$qXojKM8khTWhCQ zf1!UgrZ5s!r@<-^T+CN?m15)KeiX>mW%1w7tbB2ZOoryNzZ@|XKte2+AJQ&sGCFt0 m|DW8EcLrY+g7E!iqw`~`5Fn`zsRiuAqG9QRZLB}VhM5&4&A}XQy97v$DDz}% xHa~G`AR7kcK@27i1_lAn$qU(}C+}wCWz_%*X-z)MmITymz%IdPFxit`6#x=)9nSy& literal 1902 zcmb`He`u9e7{||Zf9_tF_rANkxjWlP8KTbS{k^RzNlR&@HFl?AVQaRFY%FKp;gl&` zrEA!ap%a7_6$BB%K(J7eV)%!M2!SAIe{BCW8WM?7v>(;&`95do?ZrQ%1Mhjy`Fzhg z@A;ndJa233?nEl%d54r+O|`C7JN!z`{W^SXY+=h!+*FV8gW}hk1+!C^kM9Tb@Wgmc z`@o6qC#n|>NbH+*cU@Iec>|K?KD+;E@V#5r2Bd!3J2CV@sPruZ(ocW8d=-B5yx#^2Gsei7zwBqF8*+*^C5bRywnpqgRX-Fy= zed5B*xzjtJvPtUhx_H--%f3$xNyonnH$M5o_t&yENl(xI(0r%%`WGNUe#i^Ib$u>w zuSDM$=qcGEK;OOn7X;= zCgsJ4D!u5j@UK*E#svOfYCgGIK8f8a`ctC%WwfO=5BwsOS}^dimmW!jY?W_Z5=Jox3ps!m;FK4yw;g5h$0CA=2}8cLTPa|w=MLmK#`7$R+21U zE?5p*=bx=aMZqcin{^s03VCHxnMgQ#4{t24DD33e33!5esbf5v;7R5Y2lp-W6!S_4 zN3dXgn)w0 z^8_2Vv|%kE+(lr=mUgTKT%!nV+0vG^5HUQ{>0(;^+v= zuf^bp-;zt%L9s}~EWV8a6vJvLt^o3^ri0JH9{Jz04l5$zD2n_G)bNTO+IdXp9;s0l PP-qDeK{@F>R8jFCdXNA` diff --git a/lib/isr0.ppu b/lib/isr0.ppu deleted file mode 100644 index 0039a7571600fe6e8e9680ad53929134bae55100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmbVN&ref95Z-zHMTG4c`#~>@d#8?=bP7kZMl><$!ur8nVp^4nKzBarUr+G?YBwU z)J80zUb&PCCU2~bt@UpEl~NtdAO|y%JzH2FutS^z*aFFD0@%NlE_5G%ckv1!o3pT5 zC}tM#T=(_&cKy5yTl-2eyRiQ9{>QH;hi(CI&E|83{6gmZ56`iU=Qn47x!F~!xVn@n zMEf2+e1B@z2Go|FD{c+G8M^oE)pzWhnaSalYx4$gS^+pc3)z_^0n-Q(M4Sz;O|rUW z^~gFWD;z0`BTwppBWGedksOP-!-;q*IUO5IOc1NuNRet{3DMX{ImEOM)Y_v!Mek~$ zcRM6ESxHs{C+bdVpca%H>g_6!jzLG*TscO#$k19xtut-fA_3TBwQ~YEA%^Bf)$D!R zjl0%OBedoaJ67~ZTIdpFkv4JPWoSacYDp^TLII_SwW?aVTsF{*XasiBjBbV0!i5}2 z#mCNuxvX*cGOSyTO|b#CC7Nw(UrMt`A+ESWZ)oa*u&Y=Ov*8g~)1VbgyTmd+IXMwL zGZG&SM@P;z3J3x8F&hCS-#nksUrQ}!iu3t7MSicDB&h)FKzKXuZfPr{G|M{*p;L#M zHJyO4s}v$^I0d-bm-*)VKfXXCN zw3ozzPjEa}W%5`W^8}tj29Tmwhn$daz6Wom=a3?=soE#bP@C#F;vrxv+e8T$w(w|D zQM(Br1nhV6+O(Xxn&siQtjK3R9H}YB_lpJQksWnpYpq2`c8eA%I#+V0zEkVbj36o@ zK|)6SBW0$)2$QUyCi#*UfrVi3fLYUH2nIKjR|cVmcm87b4WzQUY_VLXC#+qE1$Ewopoot@v)1@GbbO`oOHORj&m|rvF7B4dhHnph<2&~c&*1mKBXb44l zt3m$#0NG{dx;7depV;s-tf|L*be7EAA|v4_;@I8T5Eqr`@cg}S>Bql}Cult@-cnkS z)ECwSVAHvWSI0Q_MM2R4v!xjR#wh3)v)Ml_EZHOJY|aXm)NhzDQ3)?c3EAvesQeFU C;K*D6 diff --git a/lib/isr1.ppu b/lib/isr1.ppu deleted file mode 100644 index 0f18d8c732f92062ad645e7d9ade8d0b6672b1cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmbVN%}-N75Z`(IE+VD0C@36APZlwiV4?>T6e10_kd_+pt0~Y(BeaAT6AmUO{tMoW z2Q_*#hLaj&0>+ck5Iq`C9*i1eJQ<*xI=^|{*TSX5NoG6yo7vf!oq5yo@l>RLzlCkh#g`IU^67c4X|$^Q~bUD_QDlFHfM3U zSjx`dz8>i7?)Y&Bw)Uk`Zf@n}y$@eb^xp*Fnl9vvg}Lmx@7`mp&u>ft^RTOQX?Y=A zjQ2i#uzqsd2Go|DDQ!mH^xu89_6_?cW^y>?+JeEG764A~TyAPXzzjkJ5og1zTUL*( zURh^kg(F1?eHYjuNX{Ns)51glKG}9Adf+)Y_v!Mek~$ z_c$asSxHs{C$^o^Ks_ioY`3dIItCqKQ}r0(B13B(_0F_uvjkw1)y@gvgczC^)v^z0 zH=cSojnKM7>{!tsX`zddMcTl9m!Js)t0$?X3k8%S)~o8}O2t4kq7m3h6S@^rGZ!+F zP7I%ka#<7bWmvZw8)5@&Q#4!FzMNr^!d!8M-q6$mVOOynX2T<}ric}bUt$><8ygLs z9!v~H4nT;MK-!xk&TuaYqOS6R;MM0mLB&id+QGUqAL;KxGms z+DqafAUK|@I(aOOc>>QM14vPeLr%yy--Wl*b4ZcTRP7UIs7-Ag@enYTt)herTXbkb zk>7+50uDNPbuVVG=6LumDhiknM=HhmezCwjvZIb{t+nXLPSGMo=ThF(w`)C`5kzGq zNXUqPq|EdeVUpF;Bwx}zurLhnGi!PT!Qe*n$spA5&R@*FNII9#l`0i_!rB#BP$%vN z8Qy3-IuT04tY+J&lg+byx*TGW4#EDZ2Kn~|^J`|@;$sHEramcxuhu#Gnp=rQ~9+va5kbEvvielDguqfrmhdF43`D zbf~DCgr|xK45CBy{}`P*L`6hLb&G9&^Y*RZc3ElQy>H%c=FOXVGjG0;k+EQRkMjyC zhgutHQ*S&gtM6W&y#UPN z&MalJ$=Ms18awwk|F{Wd=VCTBv-#tk zt@iLRbQH|CVi;n@VQ5otF$TYmVJ!TgQQ-BJM$uGnqBw!GmR83-`Q3SZKLjNgB>P3Q!kT#^K#w9!C-M8YlOgBPU?-zDqRFlbpyTYa1zwvPGnb(Y-jQ8YueSgPnjh_={Jo0g;%s%S`?&<5M4G^x;oAc+5g zp2UNSUZp1$5h{2pejmk?h^UBoY#SxcZ#J8}cu8?!_s#xhc6MfGcHa2-WUzn0d5x4q zt&ex9*B+%3J)e)Ju5Zlxl~OG{KyDsHu5@-e7<7W41X>Ty@(S9wl*rzE`|{jHU=DY7 zHJeK<+_>D@x4-?zEhsxza_RZCXLsIzIo^L2fM+JNn9aDNHyn$`C#J@SVk5+&CQ_ton1eqKQZ7-g0FCr8P?3A8 z$h|I!PG*wX!j6hv2C##2LZx02GCmj&eZ_5rgDfL;*^L?1I&r`uvy%hB4pGzxm7{Mp zX1sPY)ll0eHmvBkRMC0x!foQb3y=hW*-0|#K>{U-c9ESg6s$U4Hvpr6&!uHl&xs5M z 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 QfWks~`RT^=sIsTRA6&A}BLDyZ diff --git a/lib/isr14.ppu b/lib/isr14.ppu deleted file mode 100644 index 8c23d024f0f1fdf4db5bef094a5d95fc78ebb808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2038 zcmbVN&1+LZ5Z`%uNt#CcnN(Y?Lg~rWN^C2rAXHmys7*`K2vuxon_z=&Q<_xhK@j{G zyom=Dy-H6iqEzrCejmk?2T>96BD9SX=Qo>8U%aF^u={3zGdnx8Gdpi=ED`SMv#*hI zskN~V_1de{q`hAM%Rb&6R7y4T0C{*2xih(?aIXzM0kjUBxez%rU9Var} zn~V*fj&NRMFlLpHwbr#3V;dsbEUycwM+$Mu6^g@9E0}FLbC4AeL7T#5XPUJ$L!+a^ zou~R^1CeO|nQ9)vgDxIc2g3KyX0w-)^XdF-Hl--opu;59!7>nTkLz0s%PORJMIqE` z9}h!E!E7sr5mp?9HuaZd22UehA55EO3nFmw-$#ii6B&CtOAert7>GYgq~u}Jq>yb2X+ z!{H#yABjfBJCma4(5_a_dN=PcbTUf^p#Q*t{C&*hIS-tJt`35ZGdcl*m5QRgE=&Lo zAuq2C$lrJ1y*8(|S_k>SiXWj(?fTxCD+M>wABn<|?R5{aQF0F{*bkdQ{B8W5TUU$w zlsY8!iA5byYQf*lJ;cS4Q?y6d6~kW`1^wWmiwND$9+}E4l$|B@6DmwpkUwHvuPSFM F{sn%7%jEz7 diff --git a/lib/isr15.ppu b/lib/isr15.ppu deleted file mode 100644 index 626622cfb32de5c42906a5b5996bd8198b354b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2038 zcmbVN%WIQC5a0RoY8v})s;yQb8 zwK^71Z#+s}Yr6QLtLOYxzf!7=2guEX$d$=0hWnl1$ALD2v%G@#E==ZLzI%1zG%$xd zx17tT=dNF9@7>w?;|7$SOZm*~%F|mPz8vhk48Sv;ozG=w)5pKp?_Yg0GSm?wz-XrX4^XnVI~0_(k8%N6)@ty@dz4Jo?vxOa1y9{6l<%DXz5@dWZ9{Nh#2nSh4>arU%stw|RLuMxjfE}W!52{4p zZp?V?W@@3fO>9`vZ>ge_;DuYmd8Z%=0ke~2(t`v_673>8Uo2V;ylw(UA)iajsF4#H z?oY)Bk48DKaTv48$69Mzi?MZ)Y?Rjp)FXvB|T&9INFKJm}$J1rWaPY&Lr?HJ8qx&CV$DH|sD-1y}~c?QwleVOfP4UQr0O z+Rww#0Wh12VT2V&p-qu;41OKMcq6KB(G@!SO^NYc^J9}#^O?HmS$++f4}uQ%bEF1zF4IDEM9>M zb>VQ3<%`Cm$zV$KY}&QTS?}ikg&?!E8~P6o$loVCp7X#t=;|Qo*rO8=Sg9z=>%s)k z5c2Zcfc$+A-s9xd*6JW1S@9FJsaxMWbEV)$BGDKe*mtXwVb zQ|ge^XBGvZ)PcX7Ylw>@r)aybD~7)^3i`=I7ZJLhb7V3zUv`$%FQ_n4LH>vdy{ew6 F_!nd8%t`PPP)(h0wp(7klsL)moBd{Xc4lXG-stFfxVy)B zjg&*JjdrM49;L1aZY*Dne_9PFrJ8tv+&qX}>D)rN*9m?cXdO7qD`;1CGWY(?i!}}ngIpecZpPx3ABfvGo1V&QbP`^Ih$G^; zMrNKa9(3DW|fb%*0mO68zR{(uM4P03USI6io;MVm~A<8kQEO>o5E#hnzS>6 zBO^n>6MeD%NVM-%HILvyCl9Lw;rnJXnM;YeRDLFtR21;*FiCZ=420X``j*173Q1m3 z2({Y7!_W~h+lpbB6-S^=edQPeI)?G+e@21VR~bc1qlw};&SDzku@wanlKjvnUND*x zwFA`+Nl_h%g=P`p!b<(8ENK)8E<)OnqI#F?kaypX+cMoqkzb2;$rfa1t0{3K(82~0 z!h|EzKc=Wr!+QY-&@5{fQWw(P0v8lD>#HL*&iHQ8Ku>ZaldNr|D9SdGB1ZS(yq32Z z`6QztDj+~YMEsFN(;v7=<+3JuO<7^XYuCNDo-N z0u^e*;ULQwiAKhP3DL7@S1V_|oA(!j%+dkquNsiQk9j=ffpgH+LC~>BCm^s=QIyw( z37{e5<)s1n`xd;%$*HZ@K|ZkJM`%;KzIWzI!43CCqHtt;-9v1Y+(QcX!)5?~8((ni zYH^=ZhonBUr~^tZ_`A6Vxj1r)_UO7|_$#BJpFDICq1!o!C)4v~XG#5n3KJFNj~Lgh I%9)CP0T`LhYybcN diff --git a/lib/isr17.ppu b/lib/isr17.ppu deleted file mode 100644 index 751657968ed601f182d0910bc38a11e16a52b90b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2038 zcmbVN-%Ha`6u;-YU(WekXKHC6J~cCznAAgHDLKq3n+q&zOdUB=CvFB3K@j~1zC{le z^%_1^L}1WU^!qV-Du{}R9@Q1=e9qn7zUyVufqTE_e$Kh)o^#K+=Q}wW3-%8z7;ly4ru-gtBurn_Ad-di(vCWBu0vcxKZ}ne;;P%=hXen~$%~0E4Y~c5OMC z3HRQ+`{wwp1E?c4m)#D&=)d*o**C0fc#zAZ&rMsrY5?N)Eu?0aHJX5zAmWI4u9Dd+ zbG6KKGW%qXAXaLIC3kc>IyExx4MijIsp-j)=oqo6krb&a=HQQmluK00KqEa2ROFrt za<5CGlbK|;u%m330qmfhP_9>ij1R^`Utt^JAj?Qyc4J1hRvd81?BoEjLlpHvrRZCX z8L!<;CDgWw4J-OBRdf!#a9cRjXaUz3* z@yN)j5a%@lV^;B4YfEb}wk?vK;yQNSq8%GaeYf+S-Cl0Q2@0% zz{Ai{FuRIjoE0aaO+&>P{5pnM_&=k->no3nVxdI@xUfS1DN33|f{Tzgq^RB{JLKJW;HYAKb?=jj29H=sft zI2>g8LgCO4!_QR$he;Z#<>1uJG zQir5Iv8WqLt@yjSM!7gLiuUTdV)!egpr1T+5uw{T#}lcgqO+uaL4}EO@<)v7RryT$ Ezo^{Hod5s; diff --git a/lib/isr18.ppu b/lib/isr18.ppu deleted file mode 100644 index 25d5f6250fd1d4dfb8f6f06931e857d3c80c1c3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2038 zcmbVN&1+LZ5Z`(EY8vflQf;*gp$9Rw5=*6e5UMRU)TSY6g(@1-HrQaBlqMB=5Cp-$ zz?*nb(W~^NB0>dEQa_L4$%Ckf=&fy(IKSC!`r;+Uf!#Ozo7vf!o!NP@*hILu&v~7c zL#@Vw>a|Cy`ndzKzKt7e0i{$c50IM&kt>s54EH<1PXKKIXL$wfSxDu7yfd-k<|zXfIIQXw<9^6bw0&&PYO0q{)cviaOx`s}y*qpMG@P630hWMO$B zosV|kzxU?Ev;(LkGgH_IzwEvJ`1x0?ckm#WN1vOsc+~{N?VHO?Eod|aFG0i+@mwdf zSLS+|XJq!t97n9w3QO+9WMX`1)Eh~}ljD=Ip~MKWsF@V0I_BVygOp2Dt3V??0#xLl z8gj2oqLZ0qwy>jWmjUdcoKUS-hKvu!Ltl9t;ULRMU3Ozeb*DJsklD!rV23E`gSMjg z8#7+JnOdlA6B}0aTdL?hc;VJ@-UUcP!0aTM^dNzfM7zk&mrB-7UN-`xkk6%M)WC@h z_b1~+rz4!#IE-19W36?q#n^^OHY@8Q>XAa6a)shB)DC7_&KzRJ!_cO1#hF&^%<$OQ zNY|->_+TVDaHf_=@SvNA6-4;H*<9{&az0&{&CMtZH0dx&1z85d?QwleVOhl)UQr0O z+Q-AtF)-VTVU!iepiKjn7y>$miRgbuf!9|ZMO%xB;v~*u8sV`O1rU<_&?a6mni6#a z)eT8e1BnH{2ykKL{!@{(hy)iQZAek0OLoY+@5F7HZltJ5i+0HtWM``>aU;;eW)Z@K zBQiLys71qj0SC}5>lV|OGTZ_e75Vkmk(yw9w`iazIgv@$Hc}L2he#2ldnv2sZAPAA z6huV?NQj6(l4$w^H>pzAB(G@!SO^Mtc^G;C#^O?Hl4fY&f4}uQ%b9GZP%6GBc#o4)TdRY7V8xHnrcQnD%$0*19f(BX$o9I2*eJV)6zqr10RA?_jW7H#1O`UIE_ffc%ILT~hznPt#*_k&T9UbfG?XzDe zWm7Ao9ctC3)UA8J?s{&lwFi|_P0Sz%Gm$-8SP0u8jsf&RGU@T3IrH6fbmjTgNnmbvl`byL zXA1GIM-SiiPuYOlveU(lp4Yv1o~?ev-pfo5r(ByicvBC+>6y(=&I>q!5JAM*@LDIU zTUL*()3U;mq6G4!COC2?$CIhSm^+$Gq*LRggUMlHRU;`>4 z8hW=wa+8&0HE?3vDGgMEa>I7J3Z!Gu5qc}f2p1Vz>!^07O??u8O;$T6fD>Y9UbK~c zK)Z2QyQzg%9b(6d{zwa*hb+=M?z;d@2v{{qC0!_>6tP-WEtks%nh}k_PQ2(=NIouP zIGq?g73H!f;LEUXHP*!j*oJ5}t$k^NMGA4n6?#Kc3xr+8a+nQ|z?yojSo{*p(8$Pe z=gCN7AR3RHt`!gh=wdcHki2&$pTC@*%M@qw(~5!(W|E{jSO>z}ad%5w8Ko)SQ3##d z$E@iXgk7Z&W5W?xQ^ZOkASsN+|1$}EdfSs|_Uj~0;3}qJ=B*@vkW_~@@%j3(Zv!fm zNYP#r2LZwHT$RaVY0MLN1{pw#>K$@IzWFx1m7YV28cfwbafaG#jUyfcrm|6#aAAuM zq!js0_#oh*lh?Y1%%v<3zXe4B^WjL1F}`0cFpuo0BU@`NI z2?-K1;vXq9{Y98$^)$(sGzTmMg9pr-9z!s=ks4$WYIx@_W?wj+&1H+_GCg7KGAyVS zcY_R1G#*WLreU^aTdR}JvwXVL$s!$s{ZkF{?+fNv%($h283dc^)C2@pX$WgyItw&} zqP*20|9*h%vU6Q)jgF6O_zBk3W$lSH#WpYB|1ERJ6s0wFXQR7o)vE? zElBD!YdT=lyoXoE5cfqv(E+oi82-vA=qIz;KR%Z1v59QX3YFAvm@rWZFGoq)>{zJ$ E58}PbCIA2c diff --git a/lib/isr3.ppu b/lib/isr3.ppu deleted file mode 100644 index 3a555271db5b5e37b95d6ed98d12de3c90257916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmbVNO-xfk5Z-zHFCYa93JQm&CyN+tFwuia6(S8%NPmo|u_@3JJat?~t;o zwef&jcPX_ov2ycnbK~uHrBoX;$iYlx&lMKKc8Do}O^^&Xz`lh{q4~qxi&p^IoQ35= zF*|qfy1%cd^VbS&?Mubn?CPrrpT3<8-vZ#8%Fh?_v)S`My~o#H+?WLBVOQzm@wWy_{i!J%P+M-gxYhqAeE<3S59}M5$>Ef1^9FC40XV(0xyc0qGYAnxoDHvTSv|6P zWu2B4jugd_C$+(mGcl1!4vl)EiFi6WF+P+SAy&1JBIRZY(bz~i#Iy#~+G9XP@2aEs zI3zb&Nmc_VYEEgO8k8Gq?JAItK}Xn7IYzk1&{{{eGi}-=0oY`C2Y@iv@2<)T*-3qCR3mHzw zht5X1ta11rOvnr&-e%CJZwuDC*PXzGNpr&x}#;ZayqzZFZX#4VK1 z;f=zhS~eCA=IZWV36b@;}tl B$wUAE diff --git a/lib/isr32.ppu b/lib/isr32.ppu deleted file mode 100644 index d1f7d324b7b19bf22888eb6d09254f6b5c5a7359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1983 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 F{0HZK%J={P diff --git a/lib/isr40.ppu b/lib/isr40.ppu deleted file mode 100644 index c8d93bba0fe3a90c6e711a435b80c2f08e7be571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmbVNO=wd=5Z-zDYZ}|8KdH7_g_4V=_Q(D}dr+z^Hq@jcNrfsJ`V;KKwkb_2^dJac zJ$h0+sOVLCQW2$sco4McQ9OAN6%mhZqr~}U^Ij7#Ee`Cy-EY3#o!Ob47mJN|b@w{2 zlX9rFSgX3>QR;=ie_(9=bzhxQs-7Ff&5g)qW|w+8ofwY;t;Wdk3fjInnH{`=pNt_(S#B$(@);B!?s3a3Y>cPQ->2USd@(DN+?Yf;|pWE}@ozmi8D> z(R+5#dtKt4^d!B36=ka|pcIr7%6Ub|vca;@S6oIo$gs4o(#KrKxKJ>vcwPgH4*OhMN7WpLp3YQ!_;i?~ z631qSeXOyeS&VIpX3L)EkxdkWxd^Q#O&ILTn4?VW0Gm2&W9qdrBV%Ku!Bd0rp>TBY z%uW`;f;MhOE8O?ZW-^yk^Xc4dW=2uKuiYfo$~p*ckF!(K!pP6?j6%q?UT&83W3Ve9 zB1{|un@-q11hfz1(f{-UZ>QXg#yZQ3lQ@fIl-sr!KuF?4TX=scDbxZ~mlH+RBs(;S z0vA@S9<~ORh+1$FQbZKhxMYRA+7{fFRZA54wQ8>{L3FlD3O{45tQ94;aD<1Fit03c z0B``Mu3{;D$>ajIq^Ln(9jS4~_Xz_P#feBV+tMN_n?(yB-OCGF-)QM48HG?D4iY@# zj|7_jz)Z5!n&dSt0th~t(6jQM3V#9SbIObW diff --git a/lib/isr44.ppu b/lib/isr44.ppu deleted file mode 100644 index 0a32a5cfc6deaf8bacb04456b9e862e0944253b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3558 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 GD*pp_a>|qd diff --git a/lib/isr7.ppu b/lib/isr7.ppu deleted file mode 100644 index ec8f03c6d272b51f5a2a77eea0f5be9026e9aa31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmbVNKTMNR5P$dee=AZ-0YPCPoh)LIAko333XujWq@_mG*c51_5h$U>gu%qb#a%b! zphgE5Wm02IAaODp|BS}TM5D$SN1&Q|zx(<=T9y(oxz~HYyLa#I-F?@wv1CtgpZyvs zn_3;~RBJA!u0MV_6mR)*qe&^%$P98Y6WO!*#eO@)B)~dIh8tk_LOP#*_xkJwKsIN7 zIbX=k-Mk#^?r8ma3%2&9LUwlL#hnjdkM>>#;F`+K=X0}}(?7h2SD#&(1mp|5<5aFL<4j!I|Rv`zxB$!g~Wa6$~ti?*^4 zYB!!rH?`1;L+n`5A8Da;kVRU@ednPG1FIydqzeUmVm@EG&(vQ zIuVHvL}QUtwE{u_UCc%&lK0Kza+gwbnZitNT2YhVOp;V5>p*xr?rv!-qd3Jo3Zql| zm^B@Nu%i@4*l-lq6tPkWN(#x?en0v8EUgNj(7-|$_7!wg)KTT zt|(x_`v5mNd37&lE@pZ7Eh-9{4@WA=_#UyqJhG#XY^}BE$Tra;Md#AIsc+VLG$V+L zNRW^b|45nXFTy0Nr%Aq~IbdNJ+-27E0D{4d diff --git a/lib/isr76.ppu b/lib/isr76.ppu deleted file mode 100644 index ea476b3d07c9b963c7138dee5154a29781b41d9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1994 zcmbVN%}-N75Z`(IqEx;q2#6%47cD{%f#^YlLZnd&X~Cp1+VIiHi$Do2Mh+$>{tMoW z2QhdxoYWW-OgxzwqetV(gHc2LxB=DF`OS78trv)s%)Z&*%AW7 zQX6CKYSpJy>O{-U%^z!xbxJ8P$jeORu`^5keQwATKr10xenC4ICo^{9SK=x#mp8ML z$)@J--l*?9+_ZTQ#_r{;J-7bi!TZmrdTs;oO{W(!>ABRUZ{>X(&u&ct!(Pek%3>-L z?O1#G_Vlz1sLP(oZg;=#x&QR#SIiGElgFpeOhLJajmyV2L1 zZTybF_rgTKr7|u<7HJE6T!AJGte7M_J|smFQ>-eM^LeX+=T*SyNWi0YRLRNd?@Pvp z&PO;`F>Gcz$68z3im`3c>^SorYK+2g7YR4i1Yuv!9Am>SSW}ndOr3UScy#na=-fbT zFcKZOxR*!ppo7_JNBDu+bozR7K9!wK&nOC3>o7^RvkrvYLXv2rs!qcG~Pm)X!s z2>Xg*gbhbwO=p}Kf;xtY=zm6m7gZWXL#>J8EY4!Oz`Pp;5R&}R4qhc14YdN*O-4~A z$qx0Rz=aihileC&4K6}ji=rxztdO_dirX?BMp3m^HOdlXXSdPt`xv?$7E(IQ6g@`Bbk82u!pAj%;? zLPY$LMAIL*NlsalyrxB9VHm738+ru6;!>)X24~=ZzvVj1_JWdJ zBGJfrC@FSD)_aw+Ud`)sAr|Q9n82-X2=sUA6B6K_V$fUjCI7{j$OqeJqf4R7xm5!AE3%y0l A&j0`b diff --git a/lib/isr8.ppu b/lib/isr8.ppu deleted file mode 100644 index 093baa515ac0031e5f716023eedac9d8ad93830a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmbVN&r8%%5P$RC-@BQsu9lV_#8YdAiD4arEhQIoUG_(0Ma!y7ZmBEo8h8kTpueD7 zbf~Cnc!-J!6gq{`k7EQuhcJogsBN*$XTJNsyLwq^VBXIA%)EIsZ{|B2jV62h`t7$! z+0;t3Q?0s`TE89GC_Y{L(yWwfVg@;wiR{_@!hjuO5?~!9!ws-!KApe%e(l0#KsIN7 zDPPFU-nky=>1h3N7q<4rLUv~P)%}m(PW0Ub;F`?M<#RKca~s}cD=%(L0Q0b`RAFg8 zlaF*idid_-qz$MoJ5|`~ebaaE`RaGhsPl^Bl>#Yc!$4Wvl9Swb{6QVucQ25Rk5prUux z(0d$`o2(?OffL(KX`mXE8@Ah(AsvH`&{sZ2xX932N3}C;S|PiQ#-`W++Y-%hYhO&WNI|Z+LT_klg|Mqw4zuAASW~YROQXaxJT^Ac zbvhIq3`as|YXyV=x|xkmB=4Kf<*ub>Gll8gl%i(8nIx%B)`9SL+}+YvMsbpN6hx=? zGiy2yVOJ@Pvf&u4DP*M(kQ9=U|4ag(-u5I~8g&wK$@IzWH{%m7YV2{HAK3I74kJT-d^c z2}O-2d=PN6lUMgb=1P`_--4om`EaC?jPDl<%p*JM$ktkmj%*VxQgklPnfey3M>B$` zhy)24@sE_5{vu4WdYa@*ngtew!2@PZk0BV`NPZcF8s7Pf**B2N&SeXw5|EDcqvI1Beug!*n~%@rv6ci7nCySU$Fu{Wng-C-G(hnnQtOXir1WITjA<<~!Utr?R zcu=EP!%2-Xfy9&1_;ECzJQy{`cm%4c^PAUwZMl><$!uqTGdnx8GjBRRo(%W)*>91u zskQMgweC{t_KnNlYhnM1R;5%6GswYAWY6Xo`|S{u0DX`QH^82Sbbk5$oAZ|d*_`>6 zd?7P;XF1Swp#A4v*xHv0+1b^X_dk9;)_W6xYbrON&&_7e{_q}MdwzWqn1@}Z3M&hl ze6;(~!*|E0Y(Q<<>B46Cb??1r>))|&U?zuCuFV;|X$0W(&SobU1WY4D5OFrVx@Gmq z>Xmg`Rya}=L!Q(EN6z>}JTWxtiNs^6#Kibee1urlOp277B}8K*vP-~9>6}_vD z-s6zmWF=V*oTxdafof20sI@CYItCqKL-`otB13B()y}l3PXe&XYUc!SLJZA|D%l6L z8&9>HdT7-lcC6@+w9o~}B5mNli_nCCRg+ZGg#td+QGUqAMpKxGms z+D+mhAUK|@Jb5gQc>>QM14vP$Lr%yy--)-soEpXP@Bp);vrxvn?(s1w#Z;Y zk>7;(18#Nl>R!xT$@1`9R1`2Dj#QHIy<&lRWJev@T5Hjf9il~w&ZT)%-=_6wMi3Q| zAR#0EkuuX?gh^IUlYB{Yz(O#1z^v&p1cMu?Nd}>YxBp`H^{2A)*+QvAPguJO3+lk# zAj2DpMiRjk%qq6^I@vtSr;9-r=^*T%YLI_lFu!8PEltcI*i@$`Ah2>nSo`8Rpdl3H ztp@q`17w$->soJgd}71Tu%=G)(OEKc8y$#55y#HPhPWt4hvz>4m#z4h@dmAD#al`X zlKR4$F4(l~;?*(CeUVqR&ul4%zcC8>#ccMEk0twPIy-NLO6oUEn5c-CqquCgEmZmk D$U4aA diff --git a/lib/isrmanager.ppu b/lib/isrmanager.ppu index d01c1824098a728f707d82a5dc7c38b485b61f8a..f9575fd701b26b6c86c10dd8a32c6aacd505c666 100644 GIT binary patch literal 58225 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 a0yWi_h+zH$gxch#tSYvpzx*r6tN#y4M2>*~ diff --git a/lib/kernel.ppu b/lib/kernel.ppu index b833dc6846f86197162fb4f3809cd9050849a82f..aaa907976e0efd6c9b9ea015533f8c94e046b73c 100644 GIT binary patch delta 374 zcmdm}x?fc$ARyGx*p#K2k%5`vK!6g%bRh<~ z7c#Eee2Ph(oiTj!C(b-Z{mF@3xx+muP${D<2arTKVe@3}_l)fFU>T{&3wTwe zq=9VKoXp~qVg^P{HdY{yK@co0Gx;8`n3OC?IxVrp*oc8q8zL18^-w@8?;_{trYsP^nz(gl*!xV{Jo0}W-AP*(KIt^0Sct9|!u;}T^~Mz_r;IFlF|BPVNfA7zZ2{E>T~v>XEi R1EVYpki^isc|Xqq764pfDF*-m delta 105 zcmbQL{9j2XARyGx*p#K2k%5`vK!6fMxF7>V{>d2|yHh(%Cdyc_{`zzx%4=ezEgx%U zagnj{O*Mm*ik)opHm+CZWOUtpnKOxzF=DbA_ff{!$$z-_2?#SVFfhup07;1Y%~yF2 GumAuHx*;$C diff --git a/lib/libpconsole.a b/lib/libpconsole.a index 3773a3d1cabcd86a09c066f3f9faf7539f9de572..3a2e3331cc3e3af945672d69d182585719883912 100644 GIT binary patch delta 1507 zcmZWpZAep580Jh}tC>twCn~lSL?q{RI=?`WFfh55KaBd}&{QfgDhQ!4Qv6XFBEw@X z#KbI$!l3O?mm$$2mRUpz1ttVbBqfkW3q?rkp1Zwg=iL6C=i@x@d(M0A9i29gP8;31 zMrTD;MVZr^|Joc|Vp}ka7?Xb|#IVou$q-wPSTadC?KCJ@@>|Kp%oV^?zLedP2tks+ zgH-SC2btP&&BQ^HUogcuT5PHC7htVI@hA@`?E-9ejPt6g@)ieivqQ##x&V1o>xQPa zE_>?kayGKskc>$Ez9I0?va1bz5*crt->-Y65>)fPU_eVyI9_CA`1*Fn}!=o(=O8g|}fJ<|G? zv1DjRlWQh^3fuQjF}tSkxj!rDNsmPR+vB(%nzxdmw*>sOT*}j2C`Tm!5=d%vC+U6O z2iW&Ao7rr^G+5JwLv!goy!^fuAPLPIAOMHvvwWYwv+2-Q5*8wWeU>>xs+KZ>T95Q5P4kXXqTtG6gAxlp)O^y2<=3v)sk+y)IL;#WOyzr#+ETzsdu0NADLT; p&K0vc`>l%lxxeBK*Sb)+C}z+eQgx-SRFtjKvGh492QYeP_y>Fs$bJ9- delta 1507 zcmZWpe@Ih79OtI4)l8;#TE;HQLI%c9^v7HU4TuFFgcWCV5l2C0XXU8(1jV60(++kqp+GTf6JD5ZsNZvp{t_2(cgovH!*krOmo zGy0Ayg3;Y-M&N0ABADE*)4a+1unpDXA;$v9ol}A_I%k7th2F%VdP z{(^~{;e3y2TYN}X*y?AcRW}}MkimAfna}fFXSc4skH(>ODr+Zn53>XfSKeejlKPg> zWZI48@*6nqsVS*oQGVJX$qYm)>(Gk;sMM4P~kdFC~q-VaE;*6r^vL>`5%4$knjxrmm zBGdjX15MIfh+529I*XE?qw^peE=$S7eM{5IW*(ZMx2jAOptlCErvUAU-7{hMf1Khe zMD6sV)Ym}p0P?!a(JpUWDQdhCMxDw+5!#7TU6O9P#6DPpWcplGj4h+GQs+QHJ~G#d p&K0vc2ds+vxxeBK*E&(8C}z+elFO+p6=kb*EO}1K0gT=m{sA7g%}xLS diff --git a/lib/libpmultiboot.a b/lib/libpmultiboot.a index e418024eac43c42f0d392df32ea243fbe0fc40b0..1d76ecf06b2800a541734ae3c9f556d85e604327 100644 GIT binary patch delta 568 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 A{Qv*} delta 92 zcmaDTdQns+ARyGx*p#K2k%5`vK!6g%N-hS5__8g|@8&OCF;T{dHNX8_)XIs$0eq~P t#YHA2_nzKzzM*|$*~Xm{SQ*PFd$FAp5N2RtV3cJAk`N`E4cIp_0|2x99$o+d diff --git a/lib/scheduler.ppu b/lib/scheduler.ppu index eee03f1c01437ad9b7a9ab8557fefc1c25f7687c..31920814fbc66ada00edaefb77e84aac9a7a3770 100644 GIT binary patch delta 94 zcmca9`A||OARyGx*p#K2k%5`vK!6g%P96q^YiggfEt97QO_Z@>P0BkTl{+z7M~E}T qHz?j9-ZMDJz3Av9iFfz9H%^_vCL+$jz`!WW3?vZ>Hk-09VFdtfKOAEK delta 86 zcmaDTc~ep*ARyGx*p#K2k%5`vK!6g%Mji%+4O%Zea@{^GoG4?(YX9{_ROZBJ9X{5~ m;v!=sQQgh=r%&{;-#Bvun}9F_0|TQhGmwNxZnkA#!U_PM*BR>o diff --git a/lib/terminal.ppu b/lib/terminal.ppu index a3254bffea8749e02d1bcb3b7fa512727c10720b..3f32867e64cef71caccc8d2c822d6c570e3c70b7 100644 GIT binary patch delta 19 bcmaFo^3G*KAIBHPFFCBzyJu~jc0&;WWBv)X delta 19 bcmaFo^3G*KA4mSl85_G(J4`lCyP*gGX4MJ! diff --git a/src/isr/isr33.pas b/src/driver/hid/PS2_KEYBOARD_ISR.pas similarity index 81% rename from src/isr/isr33.pas rename to src/driver/hid/PS2_KEYBOARD_ISR.pas index 70e2d099..19651b2d 100644 --- a/src/isr/isr33.pas +++ b/src/driver/hid/PS2_KEYBOARD_ISR.pas @@ -7,7 +7,7 @@ * Contributors: K Morris ************************************************ } -unit isr33; +unit PS2_KEYBOARD_ISR; interface @@ -15,6 +15,7 @@ uses util, console, isr_types, + isrmanager, IDT; procedure register(); @@ -25,8 +26,9 @@ implementation var Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + Registered : Boolean = false; -procedure Main(); interrupt; +procedure Main(); var i : integer; b : dword; @@ -42,14 +44,17 @@ begin Hooks[i](void(b)); end; end; - outb($20, $20); end; procedure register(); begin - memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0); - inb($60); + if not Registered then begin + Registered:= true; + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(33, uint32(@Main), $08, ISR_RING_0); + isrmanager.registerISR(33, @Main); + inb($60); + end; end; procedure hook(hook_method : uint32); diff --git a/src/isr/isr44.pas b/src/driver/hid/PS2_MOUSE_ISR.pas similarity index 84% rename from src/isr/isr44.pas rename to src/driver/hid/PS2_MOUSE_ISR.pas index 616c2580..eb6179a2 100644 --- a/src/isr/isr44.pas +++ b/src/driver/hid/PS2_MOUSE_ISR.pas @@ -7,7 +7,7 @@ * Contributors: ************************************************ } -unit isr44; +unit PS2_MOUSE_ISR; interface @@ -16,6 +16,7 @@ uses util, console, isr_types, + isrmanager, IDT; procedure register(); @@ -29,6 +30,7 @@ var Cycle : uint32 = 0; Mouse_Byte : Array[0..2] of uint8; Packet : uint32; + Registered : Boolean = false; procedure mouse_wait(w_type : uint8); var @@ -69,7 +71,7 @@ begin pop_trace; end; -procedure Main(); interrupt; +procedure Main(); var i : integer; b : byte; @@ -124,22 +126,26 @@ var begin push_trace('isr44.register'); - memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - mouse_wait(1); - outb($64, $A8); - mouse_wait(1); - outb($64, $20); - mouse_wait(0); - status:= inb($60) OR $02; - mouse_wait(1); - outb($64, $60); - mouse_wait(1); - outb($60, status); - mouse_write($F6); - mouse_read(); - mouse_write($F4); - mouse_read(); - IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0); + if not Registered then begin + Registered:= true; + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + mouse_wait(1); + outb($64, $A8); + mouse_wait(1); + outb($64, $20); + mouse_wait(0); + status:= inb($60) OR $02; + mouse_wait(1); + outb($64, $60); + mouse_wait(1); + outb($60, status); + mouse_write($F6); + mouse_read(); + mouse_write($F4); + mouse_read(); + isrmanager.registerISR(44, @Main); + //IDT.set_gate(44, uint32(@Main), $08, ISR_RING_0); + end; pop_trace; end; diff --git a/src/driver/hid/keyboard.pas b/src/driver/hid/keyboard.pas index fd384016..c01f38af 100644 --- a/src/driver/hid/keyboard.pas +++ b/src/driver/hid/keyboard.pas @@ -14,7 +14,7 @@ interface uses console, util, - isr33; + PS2_KEYBOARD_ISR; type @@ -61,7 +61,8 @@ end; function load(ptr : void) : boolean; begin - isr33.hook(uint32(@callback)); + PS2_KEYBOARD_ISR.register(); + PS2_KEYBOARD_ISR.hook(uint32(@callback)); console.outputln('PS/2 KEYBOARD', 'LOADED.'); load:= true; end; diff --git a/src/driver/hid/mouse.pas b/src/driver/hid/mouse.pas index d8c4b1be..86308dca 100644 --- a/src/driver/hid/mouse.pas +++ b/src/driver/hid/mouse.pas @@ -15,7 +15,7 @@ uses tracer, console, util, - isr44, + PS2_MOUSE_ISR, lmemorymanager, strings, drivermanagement; @@ -110,7 +110,8 @@ end; function load(ptr : void) : boolean; begin push_trace('mouse.load'); - isr44.hook(uint32(@callback)); + PS2_MOUSE_ISR.register(); + PS2_MOUSE_ISR.hook(uint32(@callback)); console.outputln('PS/2 MOUSE', 'LOADED.'); load:= true; pop_trace; diff --git a/src/isr/isr76.pas b/src/driver/storage/ATA_ISR.pas similarity index 91% rename from src/isr/isr76.pas rename to src/driver/storage/ATA_ISR.pas index 3de1f4bf..60e5813b 100644 --- a/src/isr/isr76.pas +++ b/src/driver/storage/ATA_ISR.pas @@ -7,7 +7,7 @@ * Contributors: ************************************************ } -unit isr76; +unit ATA_ISR; interface @@ -15,6 +15,7 @@ uses util, console, isr_types, + isrmanager, IDT; procedure register(); @@ -41,7 +42,8 @@ end; procedure register(); begin memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - IDT.set_gate(76, uint32(@Main), $08, ISR_RING_0); + isrmanager.registerISR(76, @Main); + //IDT.set_gate(76, uint32(@Main), $08, ISR_RING_0); end; procedure hook(hook_method : uint32); diff --git a/src/isr/isr32.pas b/src/driver/timers/TMR_0_ISR.pas similarity index 72% rename from src/isr/isr32.pas rename to src/driver/timers/TMR_0_ISR.pas index f335a734..4964101c 100644 --- a/src/isr/isr32.pas +++ b/src/driver/timers/TMR_0_ISR.pas @@ -7,7 +7,7 @@ * Contributors: K Morris ************************************************ } -unit isr32; +unit TMR_0_ISR; interface @@ -15,6 +15,7 @@ uses util, console, isr_types, + isrmanager, IDT; procedure register(); @@ -25,8 +26,9 @@ implementation var Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + Registered : boolean = false; -procedure Main; interrupt; //IRQ0, 1024.19hz aprox +procedure Main; //IRQ0, 1024.19hz aprox var i : integer; regs : PRegisters; @@ -42,21 +44,24 @@ begin Hooks[i](nil); end; end; - outb($20, $20); end; procedure register(); begin - asm - mov al, $36 - out $46, al - mov ax, 1165 - out $40, al - mov al, ah - out $40, al + if not registered then begin + asm + mov al, $36 + out $46, al + mov ax, 1165 + out $40, al + mov al, ah + out $40, al + end; + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + isrmanager.registerISR(32, @Main); + Registered:= true; end; - memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - IDT.set_gate(32, uint32(@Main), $08, ISR_RING_0); + //IDT.set_gate(32, uint32(@Main), $08, ISR_RING_0); end; procedure hook(hook_method : uint32); @@ -64,6 +69,7 @@ var i : uint32; begin + register(); for i:=0 to MAX_HOOKS-1 do begin if uint32(Hooks[i]) = hook_method then exit; end; diff --git a/src/isr/isr40.pas b/src/driver/timers/TMR_1_ISR.pas similarity index 77% rename from src/isr/isr40.pas rename to src/driver/timers/TMR_1_ISR.pas index 3b866649..d5348965 100644 --- a/src/isr/isr40.pas +++ b/src/driver/timers/TMR_1_ISR.pas @@ -7,7 +7,7 @@ * Contributors: K Morris ************************************************ } -unit isr40; +unit TMR_1_ISR; interface @@ -25,8 +25,9 @@ implementation var Hooks : Array[1..MAX_HOOKS] of pp_hook_method; + Registered : boolean = false; -procedure Main; interrupt; //IRQ0, called 1024 times a second. +procedure Main; //IRQ0, called 1024 times a second. var i : integer; @@ -34,14 +35,16 @@ begin for i:=0 to MAX_HOOKS-1 do begin if uint32(Hooks[i]) <> 0 then Hooks[i](void(18)); end; - outb($A0, $20); - outb($20, $20); end; procedure register(); begin - memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - IDT.set_gate(40, uint32(@Main), $08, ISR_RING_0); + if not registered then begin + memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + isrmanager.registerISR(40, @Main); + //IDT.set_gate(40, uint32(@Main), $08, ISR_RING_0); + Registered:= true; + end; end; procedure hook(hook_method : uint32); @@ -49,6 +52,7 @@ var i : uint32; begin + register(); for i:=0 to MAX_HOOKS-1 do begin if uint32(Hooks[i]) = hook_method then exit; end; diff --git a/src/fault/ACE.pas b/src/fault/ACE.pas new file mode 100644 index 00000000..d22f04b2 --- /dev/null +++ b/src/fault/ACE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR17 + * Description: Alignment Check Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit ACE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('AC', 'Alignment Check Exception.'); + console.writestringln('Alignment Check Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(17, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(17, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/BPE.pas b/src/fault/BPE.pas new file mode 100644 index 00000000..a60e3477 --- /dev/null +++ b/src/fault/BPE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR3 + * Description: Breakpoint Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit BPE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('BE', 'Breakpoint Exception.'); + console.writestringln('Breakpoint Exception'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(3, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(3, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/BTSSE.pas b/src/fault/BTSSE.pas new file mode 100644 index 00000000..396d7f7d --- /dev/null +++ b/src/fault/BTSSE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR10 + * Description: Bad TSS Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit BTSSE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('TSS', 'Bad TSS Exception.'); + console.writestringln('Bad TSS Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(10, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(10, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/CFE.pas b/src/fault/CFE.pas new file mode 100644 index 00000000..7b6e2a9c --- /dev/null +++ b/src/fault/CFE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR11 + * Description: Coprocessor Fault Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit CFE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('CF', 'Coprocessor Fault Exception.'); + console.writestringln('Coprocessor Fault Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(16, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(16, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/CSOE.pas b/src/fault/CSOE.pas new file mode 100644 index 00000000..2abfd010 --- /dev/null +++ b/src/fault/CSOE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR9 + * Description: Coprocessor Seg Overrun Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit CSOE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('CSO', 'Coprocessor Seg Overrun Exception.'); + console.writestringln('Coprocessor Seg Overrun Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(9, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(9, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/DBGE.pas b/src/fault/DBGE.pas new file mode 100644 index 00000000..48841d20 --- /dev/null +++ b/src/fault/DBGE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR1 + * Description: Debug Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit DBGE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('DE', 'Debug Exception'); + console.writestringln('Debug Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(1, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(1, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/DBZ.pas b/src/fault/DBZ.pas new file mode 100644 index 00000000..4a25310f --- /dev/null +++ b/src/fault/DBZ.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR0 + * Description: Divide-By-Zero Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit DBZ; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('DBZ', 'Divide By Zero Exception.'); + console.writestringln('Divide by Zero Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(0, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(0, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/DFE.pas b/src/fault/DFE.pas new file mode 100644 index 00000000..873f62f9 --- /dev/null +++ b/src/fault/DFE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR8 + * Description: Double Fault Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit DFE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('DF', 'Double Fault.'); + console.writestringln('Double Fault.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(8, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(8, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/isr/isr13.pas b/src/fault/GPF.pas similarity index 50% rename from src/isr/isr13.pas rename to src/fault/GPF.pas index d5209fa7..c0ec4d02 100644 --- a/src/isr/isr13.pas +++ b/src/fault/GPF.pas @@ -7,7 +7,7 @@ * Contributors: ************************************************ } -unit isr13; +unit GPF; interface @@ -15,18 +15,14 @@ uses util, console, isr_types, + isrmanager, 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; +procedure Main(); var i : uint32; Regs : PRegisters; @@ -37,9 +33,6 @@ begin MOV EAX, EBP MOV Regs, EAX end; - for i:=0 to MAX_HOOKS-1 do begin - if uint32(Hooks[i]) <> 0 then Hooks[i](void(13)); - end; BSOD('GPF', 'General Protection Fault.'); console.writestringln('General Protection Fault.'); console.writestring('Flags: '); @@ -55,34 +48,9 @@ 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; + isrmanager.registerISR(13, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(13, uint32(@Main), $08, ISR_RING_0); end; end. \ No newline at end of file diff --git a/src/fault/IDOE.pas b/src/fault/IDOE.pas new file mode 100644 index 00000000..4b498bac --- /dev/null +++ b/src/fault/IDOE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR4 + * Description: Into Detected Overflow Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit IDOE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('IDO', 'Into Detected Overflow Exception.'); + console.writestringln('IDO Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(4, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(4, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/IOPE.pas b/src/fault/IOPE.pas new file mode 100644 index 00000000..1df2982e --- /dev/null +++ b/src/fault/IOPE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR6 + * Description: Invalid OPCode Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit IOPE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('IO', 'Invalid OPCode Exception.'); + console.writestringln('Invalid OPCode Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(6, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(6, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/MCE.pas b/src/fault/MCE.pas new file mode 100644 index 00000000..90725d34 --- /dev/null +++ b/src/fault/MCE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR18 + * Description: Machine Check Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit MCE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('MC', 'Machine Check Exception.'); + console.writestringln('Machine Check Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(18, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(18, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/NCE.pas b/src/fault/NCE.pas new file mode 100644 index 00000000..51f8c6f3 --- /dev/null +++ b/src/fault/NCE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR7 + * Description: No Coprocessor Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit NCE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('NC', 'No Coprocessor Exception.'); + console.writestringln('No Coprocessor Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(7, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(7, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/NMIE.pas b/src/fault/NMIE.pas new file mode 100644 index 00000000..ac823ef1 --- /dev/null +++ b/src/fault/NMIE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR2 + * Description: Non-Maskable Interrupt Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit NMIE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('NMI', 'Non-Maskable Interrupt Exception.'); + console.writestringln('NMI Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(2, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(2, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/OOBE.pas b/src/fault/OOBE.pas new file mode 100644 index 00000000..0aa5bbe3 --- /dev/null +++ b/src/fault/OOBE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR5 + * Description: Out of Bounds Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit OOBE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('OOB', 'Out of Bouunds Exception.'); + console.writestringln('OOB Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(5, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(5, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/PF.pas b/src/fault/PF.pas new file mode 100644 index 00000000..aff7f4b0 --- /dev/null +++ b/src/fault/PF.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR14 + * Description: Page Fault + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit PF; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('PF', 'Page Fault.'); + console.writestringln('Page Fault.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(14, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(14, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/SFE.pas b/src/fault/SFE.pas new file mode 100644 index 00000000..9a7daa1e --- /dev/null +++ b/src/fault/SFE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR12 + * Description: Stack Fault Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit SFE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('SF', 'Stack Fault Exception.'); + console.writestringln('Stack Fault Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(12, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(12, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/SNPE.pas b/src/fault/SNPE.pas new file mode 100644 index 00000000..2dfff200 --- /dev/null +++ b/src/fault/SNPE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR11 + * Description: Segment Not Present Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit SNPE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('SNS', 'Segment Not Present Exception.'); + console.writestringln('Segment Not Present Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(11, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(11, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/fault/UIE.pas b/src/fault/UIE.pas new file mode 100644 index 00000000..1bc663d8 --- /dev/null +++ b/src/fault/UIE.pas @@ -0,0 +1,43 @@ +{ ************************************************ + * Asuro + * Unit: Drivers/ISR15 + * Description: Unknown Interrupt Exception + ************************************************ + * Author: K Morris + * Contributors: + ************************************************ } + +unit UIE; + +interface + +uses + util, + console, + isr_types, + isrmanager, + IDT; + +procedure register(); + +implementation + +procedure Main(); +var + i : integer; + +begin + CLI; + BSOD('UI', 'Unknown Interrupt Exception.'); + console.writestringln('Unknown Interrupt Exception.'); + util.halt_and_catch_fire; +end; + +procedure register(); +begin + isrmanager.registerISR(15, @Main); + //memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); + //IDT.set_gate(15, uint32(@Main), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/faults.pas b/src/faults.pas new file mode 100644 index 00000000..d037b5eb --- /dev/null +++ b/src/faults.pas @@ -0,0 +1,36 @@ +unit faults; + +interface + +uses + ACE, BPE, BTSSE, CFE, CSOE, DBGE, DBZ, DFE, GPF, IDOE, IOPE, MCE, + NCE, NMIE, OOBE, PF, SFE, SNPE, UIE; + +procedure init; + +implementation + +procedure init; +begin + ACE.register(); + BPE.register(); + BTSSE.register(); + CFE.register(); + CSOE.register(); + DBGE.register(); + DBZ.register(); + DFE.register(); + GPF.register(); + IDOE.register(); + IOPE.register(); + MCE.register(); + NCE.register(); + NMIE.register(); + OOBE.register(); + PF.register(); + SFE.register(); + SNPE.register(); + UIE.register(); +end; + +end. \ No newline at end of file diff --git a/src/isr.pas b/src/isr.pas index 66a05462..dc8c4b31 100644 --- a/src/isr.pas +++ b/src/isr.pas @@ -12,11 +12,11 @@ unit isr; interface uses - Console, - ISR0, ISR1, ISR2, ISR3, ISR4, ISR5, ISR6, ISR7, ISR8, ISR9, + Console + {ISR0, ISR1, ISR2, ISR3, ISR4, ISR5, ISR6, ISR7, ISR8, ISR9, ISR10, ISR11, ISR12, ISR13, ISR14, ISR15, ISR16, ISR17, ISR18, ISR32, ISR33, - ISR40, ISR44; + ISR40, ISR44}; procedure init(); @@ -24,7 +24,7 @@ implementation procedure init(); begin - console.outputln('ISR','INIT START.'); + {console.outputln('ISR','INIT START.'); ISR0.register(); // Divide-By-Zero ISR1.register(); // Debug ISR2.register(); // Non-Maskable Inturrupt @@ -49,7 +49,7 @@ begin ISR33.register(); // Keyboard ISR40.register(); // 1024/s Timer ISR44.register(); // Mouse - console.outputln('ISR','INIT END.'); + console.outputln('ISR','INIT END.');} end; end. \ No newline at end of file diff --git a/src/isr/isr0.pas b/src/isr/isr0.pas deleted file mode 100644 index 2b102c90..00000000 --- a/src/isr/isr0.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR0 - * Description: Divide-By-Zero Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr0; - -interface - -uses - util, - console, - isr_types, - 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(0)); - end; - BSOD('DBZ', 'Divide By Zero Exception.'); - console.writestringln('Divide by Zero Exception.'); - util.halt_and_catch_fire; -end; - -procedure register(); -begin - memset(uint32(@Hooks[0]), 0, sizeof(pp_hook_method)*MAX_HOOKS); - IDT.set_gate(0, 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/isr/isr1.pas b/src/isr/isr1.pas deleted file mode 100644 index 9e0fbf83..00000000 --- a/src/isr/isr1.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR1 - * Description: Debug Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr1; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('DE', 'Debug Exception'); - 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/isr/isr10.pas b/src/isr/isr10.pas deleted file mode 100644 index 2db31c84..00000000 --- a/src/isr/isr10.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR10 - * Description: Bad TSS Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr10; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('TSS', 'Bad TSS Exception.'); - 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/isr/isr11.pas b/src/isr/isr11.pas deleted file mode 100644 index 046f36bb..00000000 --- a/src/isr/isr11.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR11 - * Description: Segment Not Present Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr11; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('SNS', 'Segment Not Present Exception.'); - 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/isr/isr12.pas b/src/isr/isr12.pas deleted file mode 100644 index 6cace3ca..00000000 --- a/src/isr/isr12.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR12 - * Description: Stack Fault Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr12; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('SF', 'Stack Fault Exception.'); - 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/isr/isr14.pas b/src/isr/isr14.pas deleted file mode 100644 index 91f5f88c..00000000 --- a/src/isr/isr14.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR14 - * Description: Page Fault - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr14; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('PF', 'Page Fault.'); - 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/isr/isr15.pas b/src/isr/isr15.pas deleted file mode 100644 index b8f764c9..00000000 --- a/src/isr/isr15.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR15 - * Description: Unknown Interrupt Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr15; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('UI', 'Unknown Interrupt Exception.'); - 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/isr/isr16.pas b/src/isr/isr16.pas deleted file mode 100644 index 830dc53e..00000000 --- a/src/isr/isr16.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR11 - * Description: Coprocessor Fault Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr16; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('CF', 'Coprocessor Fault Exception.'); - 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/isr/isr17.pas b/src/isr/isr17.pas deleted file mode 100644 index eaa336c3..00000000 --- a/src/isr/isr17.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR17 - * Description: Alignment Check Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr17; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('AC', 'Alignment Check Exception.'); - 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/isr/isr18.pas b/src/isr/isr18.pas deleted file mode 100644 index 4c1cd5c1..00000000 --- a/src/isr/isr18.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR18 - * Description: Machine Check Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr18; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('MC', 'Machine Check Exception.'); - 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/isr/isr2.pas b/src/isr/isr2.pas deleted file mode 100644 index fb3cde92..00000000 --- a/src/isr/isr2.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR2 - * Description: Non-Maskable Interrupt Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr2; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('NMI', 'Non-Maskable Interrupt Exception.'); - 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/isr/isr3.pas b/src/isr/isr3.pas deleted file mode 100644 index 8cb38e39..00000000 --- a/src/isr/isr3.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR3 - * Description: Breakpoint Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr3; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('BE', 'Breakpoint Exception.'); - 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/isr/isr4.pas b/src/isr/isr4.pas deleted file mode 100644 index 5dde21c0..00000000 --- a/src/isr/isr4.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR4 - * Description: Into Detected Overflow Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr4; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('IDO', 'Into Detected Overflow Exception.'); - 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/isr/isr5.pas b/src/isr/isr5.pas deleted file mode 100644 index e4352b0e..00000000 --- a/src/isr/isr5.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR5 - * Description: Out of Bounds Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr5; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('OOB', 'Out of Bouunds Exception.'); - 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/isr/isr6.pas b/src/isr/isr6.pas deleted file mode 100644 index a060504e..00000000 --- a/src/isr/isr6.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR6 - * Description: Invalid OPCode Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr6; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('IO', 'Invalid OPCode Exception.'); - 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/isr/isr7.pas b/src/isr/isr7.pas deleted file mode 100644 index bef6292e..00000000 --- a/src/isr/isr7.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR7 - * Description: No Coprocessor Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr7; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('NC', 'No Coprocessor Exception.'); - 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/isr/isr8.pas b/src/isr/isr8.pas deleted file mode 100644 index 2d17e9a1..00000000 --- a/src/isr/isr8.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR8 - * Description: Double Fault Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr8; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('DF', 'Double Fault.'); - 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/isr/isr9.pas b/src/isr/isr9.pas deleted file mode 100644 index 91dce611..00000000 --- a/src/isr/isr9.pas +++ /dev/null @@ -1,75 +0,0 @@ -{ ************************************************ - * Asuro - * Unit: Drivers/ISR9 - * Description: Coprocessor Seg Overrun Exception - ************************************************ - * Author: K Morris - * Contributors: - ************************************************ } - -unit isr9; - -interface - -uses - util, - console, - isr_types, - 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; - BSOD('CSO', 'Coprocessor Seg Overrun Exception.'); - 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 diff --git a/src/isr/isrmanager.pas b/src/isr/isrmanager.pas new file mode 100644 index 00000000..fc892261 --- /dev/null +++ b/src/isr/isrmanager.pas @@ -0,0 +1,1595 @@ +unit isrmanager; + +interface + +uses + isr, idt, isr_types, util; + +type + TISRHook = procedure(); + TISRNHookArray = Array[0..MAX_HOOKS] of TISRHook; + TISRHookArray = Array[0..255] of TISRNHookArray; + +procedure init; +procedure registerISR(INT_N : uint8; callback : TISRHook); + +implementation + +var + Hooks : TISRHookArray; + +procedure registerISR(INT_N : uint8; callback : TISRHook); +var + i : uint8; + +begin + i:=0; + while (Hooks[INT_N][i] <> nil) AND (i < MAX_HOOKS) do begin + i:= i + 1; + end; + if i <= MAX_HOOKS then begin + Hooks[INT_N][i]:= callback; + end; +end; + +procedure ISR_N(INT_N : uint8); +var + i : uint8; + +begin + for i:=0 to MAX_HOOKS do begin + if Hooks[INT_N][i] <> nil then Hooks[INT_N][i](); + end; + if (INT_N >= 40) then outb($A0, $20); + outb($20, $20); +end; + +procedure ISR_0; interrupt; +begin + ISR_N(0); +end; + +procedure ISR_1; interrupt; +begin + ISR_N(1); +end; + +procedure ISR_2; interrupt; +begin + ISR_N(2); +end; + +procedure ISR_3; interrupt; +begin + ISR_N(3); +end; + +procedure ISR_4; interrupt; +begin + ISR_N(4); +end; + +procedure ISR_5; interrupt; +begin + ISR_N(5); +end; + +procedure ISR_6; interrupt; +begin + ISR_N(6); +end; + +procedure ISR_7; interrupt; +begin + ISR_N(7); +end; + +procedure ISR_8; interrupt; +begin + ISR_N(8); +end; + +procedure ISR_9; interrupt; +begin + ISR_N(9); +end; + +procedure ISR_10; interrupt; +begin + ISR_N(10); +end; + +procedure ISR_11; interrupt; +begin + ISR_N(11); +end; + +procedure ISR_12; interrupt; +begin + ISR_N(12); +end; + +procedure ISR_13; interrupt; +begin + ISR_N(13); +end; + +procedure ISR_14; interrupt; +begin + ISR_N(14); +end; + +procedure ISR_15; interrupt; +begin + ISR_N(15); +end; + +procedure ISR_16; interrupt; +begin + ISR_N(16); +end; + +procedure ISR_17; interrupt; +begin + ISR_N(17); +end; + +procedure ISR_18; interrupt; +begin + ISR_N(18); +end; + +procedure ISR_19; interrupt; +begin + ISR_N(19); +end; + +procedure ISR_20; interrupt; +begin + ISR_N(20); +end; + +procedure ISR_21; interrupt; +begin + ISR_N(21); +end; + +procedure ISR_22; interrupt; +begin + ISR_N(22); +end; + +procedure ISR_23; interrupt; +begin + ISR_N(23); +end; + +procedure ISR_24; interrupt; +begin + ISR_N(24); +end; + +procedure ISR_25; interrupt; +begin + ISR_N(25); +end; + +procedure ISR_26; interrupt; +begin + ISR_N(26); +end; + +procedure ISR_27; interrupt; +begin + ISR_N(27); +end; + +procedure ISR_28; interrupt; +begin + ISR_N(28); +end; + +procedure ISR_29; interrupt; +begin + ISR_N(29); +end; + +procedure ISR_30; interrupt; +begin + ISR_N(30); +end; + +procedure ISR_31; interrupt; +begin + ISR_N(31); +end; + +procedure ISR_32; interrupt; +begin + ISR_N(32); +end; + +procedure ISR_33; interrupt; +begin + ISR_N(33); +end; + +procedure ISR_34; interrupt; +begin + ISR_N(34); +end; + +procedure ISR_35; interrupt; +begin + ISR_N(35); +end; + +procedure ISR_36; interrupt; +begin + ISR_N(36); +end; + +procedure ISR_37; interrupt; +begin + ISR_N(37); +end; + +procedure ISR_38; interrupt; +begin + ISR_N(38); +end; + +procedure ISR_39; interrupt; +begin + ISR_N(39); +end; + +procedure ISR_40; interrupt; +begin + ISR_N(40); +end; + +procedure ISR_41; interrupt; +begin + ISR_N(41); +end; + +procedure ISR_42; interrupt; +begin + ISR_N(42); +end; + +procedure ISR_43; interrupt; +begin + ISR_N(43); +end; + +procedure ISR_44; interrupt; +begin + ISR_N(44); +end; + +procedure ISR_45; interrupt; +begin + ISR_N(45); +end; + +procedure ISR_46; interrupt; +begin + ISR_N(46); +end; + +procedure ISR_47; interrupt; +begin + ISR_N(47); +end; + +procedure ISR_48; interrupt; +begin + ISR_N(48); +end; + +procedure ISR_49; interrupt; +begin + ISR_N(49); +end; + +procedure ISR_50; interrupt; +begin + ISR_N(50); +end; + +procedure ISR_51; interrupt; +begin + ISR_N(51); +end; + +procedure ISR_52; interrupt; +begin + ISR_N(52); +end; + +procedure ISR_53; interrupt; +begin + ISR_N(53); +end; + +procedure ISR_54; interrupt; +begin + ISR_N(54); +end; + +procedure ISR_55; interrupt; +begin + ISR_N(55); +end; + +procedure ISR_56; interrupt; +begin + ISR_N(56); +end; + +procedure ISR_57; interrupt; +begin + ISR_N(57); +end; + +procedure ISR_58; interrupt; +begin + ISR_N(58); +end; + +procedure ISR_59; interrupt; +begin + ISR_N(59); +end; + +procedure ISR_60; interrupt; +begin + ISR_N(60); +end; + +procedure ISR_61; interrupt; +begin + ISR_N(61); +end; + +procedure ISR_62; interrupt; +begin + ISR_N(62); +end; + +procedure ISR_63; interrupt; +begin + ISR_N(63); +end; + +procedure ISR_64; interrupt; +begin + ISR_N(64); +end; + +procedure ISR_65; interrupt; +begin + ISR_N(65); +end; + +procedure ISR_66; interrupt; +begin + ISR_N(66); +end; + +procedure ISR_67; interrupt; +begin + ISR_N(67); +end; + +procedure ISR_68; interrupt; +begin + ISR_N(68); +end; + +procedure ISR_69; interrupt; +begin + ISR_N(69); +end; + +procedure ISR_70; interrupt; +begin + ISR_N(70); +end; + +procedure ISR_71; interrupt; +begin + ISR_N(71); +end; + +procedure ISR_72; interrupt; +begin + ISR_N(72); +end; + +procedure ISR_73; interrupt; +begin + ISR_N(73); +end; + +procedure ISR_74; interrupt; +begin + ISR_N(74); +end; + +procedure ISR_75; interrupt; +begin + ISR_N(75); +end; + +procedure ISR_76; interrupt; +begin + ISR_N(76); +end; + +procedure ISR_77; interrupt; +begin + ISR_N(77); +end; + +procedure ISR_78; interrupt; +begin + ISR_N(78); +end; + +procedure ISR_79; interrupt; +begin + ISR_N(79); +end; + +procedure ISR_80; interrupt; +begin + ISR_N(80); +end; + +procedure ISR_81; interrupt; +begin + ISR_N(81); +end; + +procedure ISR_82; interrupt; +begin + ISR_N(82); +end; + +procedure ISR_83; interrupt; +begin + ISR_N(83); +end; + +procedure ISR_84; interrupt; +begin + ISR_N(84); +end; + +procedure ISR_85; interrupt; +begin + ISR_N(85); +end; + +procedure ISR_86; interrupt; +begin + ISR_N(86); +end; + +procedure ISR_87; interrupt; +begin + ISR_N(87); +end; + +procedure ISR_88; interrupt; +begin + ISR_N(88); +end; + +procedure ISR_89; interrupt; +begin + ISR_N(89); +end; + +procedure ISR_90; interrupt; +begin + ISR_N(90); +end; + +procedure ISR_91; interrupt; +begin + ISR_N(91); +end; + +procedure ISR_92; interrupt; +begin + ISR_N(92); +end; + +procedure ISR_93; interrupt; +begin + ISR_N(93); +end; + +procedure ISR_94; interrupt; +begin + ISR_N(94); +end; + +procedure ISR_95; interrupt; +begin + ISR_N(95); +end; + +procedure ISR_96; interrupt; +begin + ISR_N(96); +end; + +procedure ISR_97; interrupt; +begin + ISR_N(97); +end; + +procedure ISR_98; interrupt; +begin + ISR_N(98); +end; + +procedure ISR_99; interrupt; +begin + ISR_N(99); +end; + +procedure ISR_100; interrupt; +begin + ISR_N(100); +end; + +procedure ISR_101; interrupt; +begin + ISR_N(101); +end; + +procedure ISR_102; interrupt; +begin + ISR_N(102); +end; + +procedure ISR_103; interrupt; +begin + ISR_N(103); +end; + +procedure ISR_104; interrupt; +begin + ISR_N(104); +end; + +procedure ISR_105; interrupt; +begin + ISR_N(105); +end; + +procedure ISR_106; interrupt; +begin + ISR_N(106); +end; + +procedure ISR_107; interrupt; +begin + ISR_N(107); +end; + +procedure ISR_108; interrupt; +begin + ISR_N(108); +end; + +procedure ISR_109; interrupt; +begin + ISR_N(109); +end; + +procedure ISR_110; interrupt; +begin + ISR_N(110); +end; + +procedure ISR_111; interrupt; +begin + ISR_N(111); +end; + +procedure ISR_112; interrupt; +begin + ISR_N(112); +end; + +procedure ISR_113; interrupt; +begin + ISR_N(113); +end; + +procedure ISR_114; interrupt; +begin + ISR_N(114); +end; + +procedure ISR_115; interrupt; +begin + ISR_N(115); +end; + +procedure ISR_116; interrupt; +begin + ISR_N(116); +end; + +procedure ISR_117; interrupt; +begin + ISR_N(117); +end; + +procedure ISR_118; interrupt; +begin + ISR_N(118); +end; + +procedure ISR_119; interrupt; +begin + ISR_N(119); +end; + +procedure ISR_120; interrupt; +begin + ISR_N(120); +end; + +procedure ISR_121; interrupt; +begin + ISR_N(121); +end; + +procedure ISR_122; interrupt; +begin + ISR_N(122); +end; + +procedure ISR_123; interrupt; +begin + ISR_N(123); +end; + +procedure ISR_124; interrupt; +begin + ISR_N(124); +end; + +procedure ISR_125; interrupt; +begin + ISR_N(125); +end; + +procedure ISR_126; interrupt; +begin + ISR_N(126); +end; + +procedure ISR_127; interrupt; +begin + ISR_N(127); +end; + +procedure ISR_128; interrupt; +begin + ISR_N(128); +end; + +procedure ISR_129; interrupt; +begin + ISR_N(129); +end; + +procedure ISR_130; interrupt; +begin + ISR_N(130); +end; + +procedure ISR_131; interrupt; +begin + ISR_N(131); +end; + +procedure ISR_132; interrupt; +begin + ISR_N(132); +end; + +procedure ISR_133; interrupt; +begin + ISR_N(133); +end; + +procedure ISR_134; interrupt; +begin + ISR_N(134); +end; + +procedure ISR_135; interrupt; +begin + ISR_N(135); +end; + +procedure ISR_136; interrupt; +begin + ISR_N(136); +end; + +procedure ISR_137; interrupt; +begin + ISR_N(137); +end; + +procedure ISR_138; interrupt; +begin + ISR_N(138); +end; + +procedure ISR_139; interrupt; +begin + ISR_N(139); +end; + +procedure ISR_140; interrupt; +begin + ISR_N(140); +end; + +procedure ISR_141; interrupt; +begin + ISR_N(141); +end; + +procedure ISR_142; interrupt; +begin + ISR_N(142); +end; + +procedure ISR_143; interrupt; +begin + ISR_N(143); +end; + +procedure ISR_144; interrupt; +begin + ISR_N(144); +end; + +procedure ISR_145; interrupt; +begin + ISR_N(145); +end; + +procedure ISR_146; interrupt; +begin + ISR_N(146); +end; + +procedure ISR_147; interrupt; +begin + ISR_N(147); +end; + +procedure ISR_148; interrupt; +begin + ISR_N(148); +end; + +procedure ISR_149; interrupt; +begin + ISR_N(149); +end; + +procedure ISR_150; interrupt; +begin + ISR_N(150); +end; + +procedure ISR_151; interrupt; +begin + ISR_N(151); +end; + +procedure ISR_152; interrupt; +begin + ISR_N(152); +end; + +procedure ISR_153; interrupt; +begin + ISR_N(153); +end; + +procedure ISR_154; interrupt; +begin + ISR_N(154); +end; + +procedure ISR_155; interrupt; +begin + ISR_N(155); +end; + +procedure ISR_156; interrupt; +begin + ISR_N(156); +end; + +procedure ISR_157; interrupt; +begin + ISR_N(157); +end; + +procedure ISR_158; interrupt; +begin + ISR_N(158); +end; + +procedure ISR_159; interrupt; +begin + ISR_N(159); +end; + +procedure ISR_160; interrupt; +begin + ISR_N(160); +end; + +procedure ISR_161; interrupt; +begin + ISR_N(161); +end; + +procedure ISR_162; interrupt; +begin + ISR_N(162); +end; + +procedure ISR_163; interrupt; +begin + ISR_N(163); +end; + +procedure ISR_164; interrupt; +begin + ISR_N(164); +end; + +procedure ISR_165; interrupt; +begin + ISR_N(165); +end; + +procedure ISR_166; interrupt; +begin + ISR_N(166); +end; + +procedure ISR_167; interrupt; +begin + ISR_N(167); +end; + +procedure ISR_168; interrupt; +begin + ISR_N(168); +end; + +procedure ISR_169; interrupt; +begin + ISR_N(169); +end; + +procedure ISR_170; interrupt; +begin + ISR_N(170); +end; + +procedure ISR_171; interrupt; +begin + ISR_N(171); +end; + +procedure ISR_172; interrupt; +begin + ISR_N(172); +end; + +procedure ISR_173; interrupt; +begin + ISR_N(173); +end; + +procedure ISR_174; interrupt; +begin + ISR_N(174); +end; + +procedure ISR_175; interrupt; +begin + ISR_N(175); +end; + +procedure ISR_176; interrupt; +begin + ISR_N(176); +end; + +procedure ISR_177; interrupt; +begin + ISR_N(177); +end; + +procedure ISR_178; interrupt; +begin + ISR_N(178); +end; + +procedure ISR_179; interrupt; +begin + ISR_N(179); +end; + +procedure ISR_180; interrupt; +begin + ISR_N(180); +end; + +procedure ISR_181; interrupt; +begin + ISR_N(181); +end; + +procedure ISR_182; interrupt; +begin + ISR_N(182); +end; + +procedure ISR_183; interrupt; +begin + ISR_N(183); +end; + +procedure ISR_184; interrupt; +begin + ISR_N(184); +end; + +procedure ISR_185; interrupt; +begin + ISR_N(185); +end; + +procedure ISR_186; interrupt; +begin + ISR_N(186); +end; + +procedure ISR_187; interrupt; +begin + ISR_N(187); +end; + +procedure ISR_188; interrupt; +begin + ISR_N(188); +end; + +procedure ISR_189; interrupt; +begin + ISR_N(189); +end; + +procedure ISR_190; interrupt; +begin + ISR_N(190); +end; + +procedure ISR_191; interrupt; +begin + ISR_N(191); +end; + +procedure ISR_192; interrupt; +begin + ISR_N(192); +end; + +procedure ISR_193; interrupt; +begin + ISR_N(193); +end; + +procedure ISR_194; interrupt; +begin + ISR_N(194); +end; + +procedure ISR_195; interrupt; +begin + ISR_N(195); +end; + +procedure ISR_196; interrupt; +begin + ISR_N(196); +end; + +procedure ISR_197; interrupt; +begin + ISR_N(197); +end; + +procedure ISR_198; interrupt; +begin + ISR_N(198); +end; + +procedure ISR_199; interrupt; +begin + ISR_N(199); +end; + +procedure ISR_200; interrupt; +begin + ISR_N(200); +end; + +procedure ISR_201; interrupt; +begin + ISR_N(201); +end; + +procedure ISR_202; interrupt; +begin + ISR_N(202); +end; + +procedure ISR_203; interrupt; +begin + ISR_N(203); +end; + +procedure ISR_204; interrupt; +begin + ISR_N(204); +end; + +procedure ISR_205; interrupt; +begin + ISR_N(205); +end; + +procedure ISR_206; interrupt; +begin + ISR_N(206); +end; + +procedure ISR_207; interrupt; +begin + ISR_N(207); +end; + +procedure ISR_208; interrupt; +begin + ISR_N(208); +end; + +procedure ISR_209; interrupt; +begin + ISR_N(209); +end; + +procedure ISR_210; interrupt; +begin + ISR_N(210); +end; + +procedure ISR_211; interrupt; +begin + ISR_N(211); +end; + +procedure ISR_212; interrupt; +begin + ISR_N(212); +end; + +procedure ISR_213; interrupt; +begin + ISR_N(213); +end; + +procedure ISR_214; interrupt; +begin + ISR_N(214); +end; + +procedure ISR_215; interrupt; +begin + ISR_N(215); +end; + +procedure ISR_216; interrupt; +begin + ISR_N(216); +end; + +procedure ISR_217; interrupt; +begin + ISR_N(217); +end; + +procedure ISR_218; interrupt; +begin + ISR_N(218); +end; + +procedure ISR_219; interrupt; +begin + ISR_N(219); +end; + +procedure ISR_220; interrupt; +begin + ISR_N(220); +end; + +procedure ISR_221; interrupt; +begin + ISR_N(221); +end; + +procedure ISR_222; interrupt; +begin + ISR_N(222); +end; + +procedure ISR_223; interrupt; +begin + ISR_N(223); +end; + +procedure ISR_224; interrupt; +begin + ISR_N(224); +end; + +procedure ISR_225; interrupt; +begin + ISR_N(225); +end; + +procedure ISR_226; interrupt; +begin + ISR_N(226); +end; + +procedure ISR_227; interrupt; +begin + ISR_N(227); +end; + +procedure ISR_228; interrupt; +begin + ISR_N(228); +end; + +procedure ISR_229; interrupt; +begin + ISR_N(229); +end; + +procedure ISR_230; interrupt; +begin + ISR_N(230); +end; + +procedure ISR_231; interrupt; +begin + ISR_N(231); +end; + +procedure ISR_232; interrupt; +begin + ISR_N(232); +end; + +procedure ISR_233; interrupt; +begin + ISR_N(233); +end; + +procedure ISR_234; interrupt; +begin + ISR_N(234); +end; + +procedure ISR_235; interrupt; +begin + ISR_N(235); +end; + +procedure ISR_236; interrupt; +begin + ISR_N(236); +end; + +procedure ISR_237; interrupt; +begin + ISR_N(237); +end; + +procedure ISR_238; interrupt; +begin + ISR_N(238); +end; + +procedure ISR_239; interrupt; +begin + ISR_N(239); +end; + +procedure ISR_240; interrupt; +begin + ISR_N(240); +end; + +procedure ISR_241; interrupt; +begin + ISR_N(241); +end; + +procedure ISR_242; interrupt; +begin + ISR_N(242); +end; + +procedure ISR_243; interrupt; +begin + ISR_N(243); +end; + +procedure ISR_244; interrupt; +begin + ISR_N(244); +end; + +procedure ISR_245; interrupt; +begin + ISR_N(245); +end; + +procedure ISR_246; interrupt; +begin + ISR_N(246); +end; + +procedure ISR_247; interrupt; +begin + ISR_N(247); +end; + +procedure ISR_248; interrupt; +begin + ISR_N(248); +end; + +procedure ISR_249; interrupt; +begin + ISR_N(249); +end; + +procedure ISR_250; interrupt; +begin + ISR_N(250); +end; + +procedure ISR_251; interrupt; +begin + ISR_N(251); +end; + +procedure ISR_252; interrupt; +begin + ISR_N(252); +end; + +procedure ISR_253; interrupt; +begin + ISR_N(253); +end; + +procedure ISR_254; interrupt; +begin + ISR_N(254); +end; + +procedure ISR_255; interrupt; +begin + ISR_N(255); +end; + +procedure init; +var + i, j : uint8; + +begin + for i:=0 to 255 do begin + for j:=0 to MAX_HOOKS do begin + Hooks[i][j]:= nil; + end; + end; + IDT.set_gate(0, uint32(@ISR_0), $08, ISR_RING_0); + IDT.set_gate(1, uint32(@ISR_1), $08, ISR_RING_0); + IDT.set_gate(2, uint32(@ISR_2), $08, ISR_RING_0); + IDT.set_gate(3, uint32(@ISR_3), $08, ISR_RING_0); + IDT.set_gate(4, uint32(@ISR_4), $08, ISR_RING_0); + IDT.set_gate(5, uint32(@ISR_5), $08, ISR_RING_0); + IDT.set_gate(6, uint32(@ISR_6), $08, ISR_RING_0); + IDT.set_gate(7, uint32(@ISR_7), $08, ISR_RING_0); + IDT.set_gate(8, uint32(@ISR_8), $08, ISR_RING_0); + IDT.set_gate(9, uint32(@ISR_9), $08, ISR_RING_0); + IDT.set_gate(10, uint32(@ISR_10), $08, ISR_RING_0); + IDT.set_gate(11, uint32(@ISR_11), $08, ISR_RING_0); + IDT.set_gate(12, uint32(@ISR_12), $08, ISR_RING_0); + IDT.set_gate(13, uint32(@ISR_13), $08, ISR_RING_0); + IDT.set_gate(14, uint32(@ISR_14), $08, ISR_RING_0); + IDT.set_gate(15, uint32(@ISR_15), $08, ISR_RING_0); + IDT.set_gate(16, uint32(@ISR_16), $08, ISR_RING_0); + IDT.set_gate(17, uint32(@ISR_17), $08, ISR_RING_0); + IDT.set_gate(18, uint32(@ISR_18), $08, ISR_RING_0); + IDT.set_gate(19, uint32(@ISR_19), $08, ISR_RING_0); + IDT.set_gate(20, uint32(@ISR_20), $08, ISR_RING_0); + IDT.set_gate(21, uint32(@ISR_21), $08, ISR_RING_0); + IDT.set_gate(22, uint32(@ISR_22), $08, ISR_RING_0); + IDT.set_gate(23, uint32(@ISR_23), $08, ISR_RING_0); + IDT.set_gate(24, uint32(@ISR_24), $08, ISR_RING_0); + IDT.set_gate(25, uint32(@ISR_25), $08, ISR_RING_0); + IDT.set_gate(26, uint32(@ISR_26), $08, ISR_RING_0); + IDT.set_gate(27, uint32(@ISR_27), $08, ISR_RING_0); + IDT.set_gate(28, uint32(@ISR_28), $08, ISR_RING_0); + IDT.set_gate(29, uint32(@ISR_29), $08, ISR_RING_0); + IDT.set_gate(30, uint32(@ISR_30), $08, ISR_RING_0); + IDT.set_gate(31, uint32(@ISR_31), $08, ISR_RING_0); + IDT.set_gate(32, uint32(@ISR_32), $08, ISR_RING_0); + IDT.set_gate(33, uint32(@ISR_33), $08, ISR_RING_0); + IDT.set_gate(34, uint32(@ISR_34), $08, ISR_RING_0); + IDT.set_gate(35, uint32(@ISR_35), $08, ISR_RING_0); + IDT.set_gate(36, uint32(@ISR_36), $08, ISR_RING_0); + IDT.set_gate(37, uint32(@ISR_37), $08, ISR_RING_0); + IDT.set_gate(38, uint32(@ISR_38), $08, ISR_RING_0); + IDT.set_gate(39, uint32(@ISR_39), $08, ISR_RING_0); + IDT.set_gate(40, uint32(@ISR_40), $08, ISR_RING_0); + IDT.set_gate(41, uint32(@ISR_41), $08, ISR_RING_0); + IDT.set_gate(42, uint32(@ISR_42), $08, ISR_RING_0); + IDT.set_gate(43, uint32(@ISR_43), $08, ISR_RING_0); + IDT.set_gate(44, uint32(@ISR_44), $08, ISR_RING_0); + IDT.set_gate(45, uint32(@ISR_45), $08, ISR_RING_0); + IDT.set_gate(46, uint32(@ISR_46), $08, ISR_RING_0); + IDT.set_gate(47, uint32(@ISR_47), $08, ISR_RING_0); + IDT.set_gate(48, uint32(@ISR_48), $08, ISR_RING_0); + IDT.set_gate(49, uint32(@ISR_49), $08, ISR_RING_0); + IDT.set_gate(50, uint32(@ISR_50), $08, ISR_RING_0); + IDT.set_gate(51, uint32(@ISR_51), $08, ISR_RING_0); + IDT.set_gate(52, uint32(@ISR_52), $08, ISR_RING_0); + IDT.set_gate(53, uint32(@ISR_53), $08, ISR_RING_0); + IDT.set_gate(54, uint32(@ISR_54), $08, ISR_RING_0); + IDT.set_gate(55, uint32(@ISR_55), $08, ISR_RING_0); + IDT.set_gate(56, uint32(@ISR_56), $08, ISR_RING_0); + IDT.set_gate(57, uint32(@ISR_57), $08, ISR_RING_0); + IDT.set_gate(58, uint32(@ISR_58), $08, ISR_RING_0); + IDT.set_gate(59, uint32(@ISR_59), $08, ISR_RING_0); + IDT.set_gate(60, uint32(@ISR_60), $08, ISR_RING_0); + IDT.set_gate(61, uint32(@ISR_61), $08, ISR_RING_0); + IDT.set_gate(62, uint32(@ISR_62), $08, ISR_RING_0); + IDT.set_gate(63, uint32(@ISR_63), $08, ISR_RING_0); + IDT.set_gate(64, uint32(@ISR_64), $08, ISR_RING_0); + IDT.set_gate(65, uint32(@ISR_65), $08, ISR_RING_0); + IDT.set_gate(66, uint32(@ISR_66), $08, ISR_RING_0); + IDT.set_gate(67, uint32(@ISR_67), $08, ISR_RING_0); + IDT.set_gate(68, uint32(@ISR_68), $08, ISR_RING_0); + IDT.set_gate(69, uint32(@ISR_69), $08, ISR_RING_0); + IDT.set_gate(70, uint32(@ISR_70), $08, ISR_RING_0); + IDT.set_gate(71, uint32(@ISR_71), $08, ISR_RING_0); + IDT.set_gate(72, uint32(@ISR_72), $08, ISR_RING_0); + IDT.set_gate(73, uint32(@ISR_73), $08, ISR_RING_0); + IDT.set_gate(74, uint32(@ISR_74), $08, ISR_RING_0); + IDT.set_gate(75, uint32(@ISR_75), $08, ISR_RING_0); + IDT.set_gate(76, uint32(@ISR_76), $08, ISR_RING_0); + IDT.set_gate(77, uint32(@ISR_77), $08, ISR_RING_0); + IDT.set_gate(78, uint32(@ISR_78), $08, ISR_RING_0); + IDT.set_gate(79, uint32(@ISR_79), $08, ISR_RING_0); + IDT.set_gate(80, uint32(@ISR_80), $08, ISR_RING_0); + IDT.set_gate(81, uint32(@ISR_81), $08, ISR_RING_0); + IDT.set_gate(82, uint32(@ISR_82), $08, ISR_RING_0); + IDT.set_gate(83, uint32(@ISR_83), $08, ISR_RING_0); + IDT.set_gate(84, uint32(@ISR_84), $08, ISR_RING_0); + IDT.set_gate(85, uint32(@ISR_85), $08, ISR_RING_0); + IDT.set_gate(86, uint32(@ISR_86), $08, ISR_RING_0); + IDT.set_gate(87, uint32(@ISR_87), $08, ISR_RING_0); + IDT.set_gate(88, uint32(@ISR_88), $08, ISR_RING_0); + IDT.set_gate(89, uint32(@ISR_89), $08, ISR_RING_0); + IDT.set_gate(90, uint32(@ISR_90), $08, ISR_RING_0); + IDT.set_gate(91, uint32(@ISR_91), $08, ISR_RING_0); + IDT.set_gate(92, uint32(@ISR_92), $08, ISR_RING_0); + IDT.set_gate(93, uint32(@ISR_93), $08, ISR_RING_0); + IDT.set_gate(94, uint32(@ISR_94), $08, ISR_RING_0); + IDT.set_gate(95, uint32(@ISR_95), $08, ISR_RING_0); + IDT.set_gate(96, uint32(@ISR_96), $08, ISR_RING_0); + IDT.set_gate(97, uint32(@ISR_97), $08, ISR_RING_0); + IDT.set_gate(98, uint32(@ISR_98), $08, ISR_RING_0); + IDT.set_gate(99, uint32(@ISR_99), $08, ISR_RING_0); + IDT.set_gate(100, uint32(@ISR_100), $08, ISR_RING_0); + IDT.set_gate(101, uint32(@ISR_101), $08, ISR_RING_0); + IDT.set_gate(102, uint32(@ISR_102), $08, ISR_RING_0); + IDT.set_gate(103, uint32(@ISR_103), $08, ISR_RING_0); + IDT.set_gate(104, uint32(@ISR_104), $08, ISR_RING_0); + IDT.set_gate(105, uint32(@ISR_105), $08, ISR_RING_0); + IDT.set_gate(106, uint32(@ISR_106), $08, ISR_RING_0); + IDT.set_gate(107, uint32(@ISR_107), $08, ISR_RING_0); + IDT.set_gate(108, uint32(@ISR_108), $08, ISR_RING_0); + IDT.set_gate(109, uint32(@ISR_109), $08, ISR_RING_0); + IDT.set_gate(110, uint32(@ISR_110), $08, ISR_RING_0); + IDT.set_gate(111, uint32(@ISR_111), $08, ISR_RING_0); + IDT.set_gate(112, uint32(@ISR_112), $08, ISR_RING_0); + IDT.set_gate(113, uint32(@ISR_113), $08, ISR_RING_0); + IDT.set_gate(114, uint32(@ISR_114), $08, ISR_RING_0); + IDT.set_gate(115, uint32(@ISR_115), $08, ISR_RING_0); + IDT.set_gate(116, uint32(@ISR_116), $08, ISR_RING_0); + IDT.set_gate(117, uint32(@ISR_117), $08, ISR_RING_0); + IDT.set_gate(118, uint32(@ISR_118), $08, ISR_RING_0); + IDT.set_gate(119, uint32(@ISR_119), $08, ISR_RING_0); + IDT.set_gate(120, uint32(@ISR_120), $08, ISR_RING_0); + IDT.set_gate(121, uint32(@ISR_121), $08, ISR_RING_0); + IDT.set_gate(122, uint32(@ISR_122), $08, ISR_RING_0); + IDT.set_gate(123, uint32(@ISR_123), $08, ISR_RING_0); + IDT.set_gate(124, uint32(@ISR_124), $08, ISR_RING_0); + IDT.set_gate(125, uint32(@ISR_125), $08, ISR_RING_0); + IDT.set_gate(126, uint32(@ISR_126), $08, ISR_RING_0); + IDT.set_gate(127, uint32(@ISR_127), $08, ISR_RING_0); + IDT.set_gate(128, uint32(@ISR_128), $08, ISR_RING_0); + IDT.set_gate(129, uint32(@ISR_129), $08, ISR_RING_0); + IDT.set_gate(130, uint32(@ISR_130), $08, ISR_RING_0); + IDT.set_gate(131, uint32(@ISR_131), $08, ISR_RING_0); + IDT.set_gate(132, uint32(@ISR_132), $08, ISR_RING_0); + IDT.set_gate(133, uint32(@ISR_133), $08, ISR_RING_0); + IDT.set_gate(134, uint32(@ISR_134), $08, ISR_RING_0); + IDT.set_gate(135, uint32(@ISR_135), $08, ISR_RING_0); + IDT.set_gate(136, uint32(@ISR_136), $08, ISR_RING_0); + IDT.set_gate(137, uint32(@ISR_137), $08, ISR_RING_0); + IDT.set_gate(138, uint32(@ISR_138), $08, ISR_RING_0); + IDT.set_gate(139, uint32(@ISR_139), $08, ISR_RING_0); + IDT.set_gate(140, uint32(@ISR_140), $08, ISR_RING_0); + IDT.set_gate(141, uint32(@ISR_141), $08, ISR_RING_0); + IDT.set_gate(142, uint32(@ISR_142), $08, ISR_RING_0); + IDT.set_gate(143, uint32(@ISR_143), $08, ISR_RING_0); + IDT.set_gate(144, uint32(@ISR_144), $08, ISR_RING_0); + IDT.set_gate(145, uint32(@ISR_145), $08, ISR_RING_0); + IDT.set_gate(146, uint32(@ISR_146), $08, ISR_RING_0); + IDT.set_gate(147, uint32(@ISR_147), $08, ISR_RING_0); + IDT.set_gate(148, uint32(@ISR_148), $08, ISR_RING_0); + IDT.set_gate(149, uint32(@ISR_149), $08, ISR_RING_0); + IDT.set_gate(150, uint32(@ISR_150), $08, ISR_RING_0); + IDT.set_gate(151, uint32(@ISR_151), $08, ISR_RING_0); + IDT.set_gate(152, uint32(@ISR_152), $08, ISR_RING_0); + IDT.set_gate(153, uint32(@ISR_153), $08, ISR_RING_0); + IDT.set_gate(154, uint32(@ISR_154), $08, ISR_RING_0); + IDT.set_gate(155, uint32(@ISR_155), $08, ISR_RING_0); + IDT.set_gate(156, uint32(@ISR_156), $08, ISR_RING_0); + IDT.set_gate(157, uint32(@ISR_157), $08, ISR_RING_0); + IDT.set_gate(158, uint32(@ISR_158), $08, ISR_RING_0); + IDT.set_gate(159, uint32(@ISR_159), $08, ISR_RING_0); + IDT.set_gate(160, uint32(@ISR_160), $08, ISR_RING_0); + IDT.set_gate(161, uint32(@ISR_161), $08, ISR_RING_0); + IDT.set_gate(162, uint32(@ISR_162), $08, ISR_RING_0); + IDT.set_gate(163, uint32(@ISR_163), $08, ISR_RING_0); + IDT.set_gate(164, uint32(@ISR_164), $08, ISR_RING_0); + IDT.set_gate(165, uint32(@ISR_165), $08, ISR_RING_0); + IDT.set_gate(166, uint32(@ISR_166), $08, ISR_RING_0); + IDT.set_gate(167, uint32(@ISR_167), $08, ISR_RING_0); + IDT.set_gate(168, uint32(@ISR_168), $08, ISR_RING_0); + IDT.set_gate(169, uint32(@ISR_169), $08, ISR_RING_0); + IDT.set_gate(170, uint32(@ISR_170), $08, ISR_RING_0); + IDT.set_gate(171, uint32(@ISR_171), $08, ISR_RING_0); + IDT.set_gate(172, uint32(@ISR_172), $08, ISR_RING_0); + IDT.set_gate(173, uint32(@ISR_173), $08, ISR_RING_0); + IDT.set_gate(174, uint32(@ISR_174), $08, ISR_RING_0); + IDT.set_gate(175, uint32(@ISR_175), $08, ISR_RING_0); + IDT.set_gate(176, uint32(@ISR_176), $08, ISR_RING_0); + IDT.set_gate(177, uint32(@ISR_177), $08, ISR_RING_0); + IDT.set_gate(178, uint32(@ISR_178), $08, ISR_RING_0); + IDT.set_gate(179, uint32(@ISR_179), $08, ISR_RING_0); + IDT.set_gate(180, uint32(@ISR_180), $08, ISR_RING_0); + IDT.set_gate(181, uint32(@ISR_181), $08, ISR_RING_0); + IDT.set_gate(182, uint32(@ISR_182), $08, ISR_RING_0); + IDT.set_gate(183, uint32(@ISR_183), $08, ISR_RING_0); + IDT.set_gate(184, uint32(@ISR_184), $08, ISR_RING_0); + IDT.set_gate(185, uint32(@ISR_185), $08, ISR_RING_0); + IDT.set_gate(186, uint32(@ISR_186), $08, ISR_RING_0); + IDT.set_gate(187, uint32(@ISR_187), $08, ISR_RING_0); + IDT.set_gate(188, uint32(@ISR_188), $08, ISR_RING_0); + IDT.set_gate(189, uint32(@ISR_189), $08, ISR_RING_0); + IDT.set_gate(190, uint32(@ISR_190), $08, ISR_RING_0); + IDT.set_gate(191, uint32(@ISR_191), $08, ISR_RING_0); + IDT.set_gate(192, uint32(@ISR_192), $08, ISR_RING_0); + IDT.set_gate(193, uint32(@ISR_193), $08, ISR_RING_0); + IDT.set_gate(194, uint32(@ISR_194), $08, ISR_RING_0); + IDT.set_gate(195, uint32(@ISR_195), $08, ISR_RING_0); + IDT.set_gate(196, uint32(@ISR_196), $08, ISR_RING_0); + IDT.set_gate(197, uint32(@ISR_197), $08, ISR_RING_0); + IDT.set_gate(198, uint32(@ISR_198), $08, ISR_RING_0); + IDT.set_gate(199, uint32(@ISR_199), $08, ISR_RING_0); + IDT.set_gate(200, uint32(@ISR_200), $08, ISR_RING_0); + IDT.set_gate(201, uint32(@ISR_201), $08, ISR_RING_0); + IDT.set_gate(202, uint32(@ISR_202), $08, ISR_RING_0); + IDT.set_gate(203, uint32(@ISR_203), $08, ISR_RING_0); + IDT.set_gate(204, uint32(@ISR_204), $08, ISR_RING_0); + IDT.set_gate(205, uint32(@ISR_205), $08, ISR_RING_0); + IDT.set_gate(206, uint32(@ISR_206), $08, ISR_RING_0); + IDT.set_gate(207, uint32(@ISR_207), $08, ISR_RING_0); + IDT.set_gate(208, uint32(@ISR_208), $08, ISR_RING_0); + IDT.set_gate(209, uint32(@ISR_209), $08, ISR_RING_0); + IDT.set_gate(210, uint32(@ISR_210), $08, ISR_RING_0); + IDT.set_gate(211, uint32(@ISR_211), $08, ISR_RING_0); + IDT.set_gate(212, uint32(@ISR_212), $08, ISR_RING_0); + IDT.set_gate(213, uint32(@ISR_213), $08, ISR_RING_0); + IDT.set_gate(214, uint32(@ISR_214), $08, ISR_RING_0); + IDT.set_gate(215, uint32(@ISR_215), $08, ISR_RING_0); + IDT.set_gate(216, uint32(@ISR_216), $08, ISR_RING_0); + IDT.set_gate(217, uint32(@ISR_217), $08, ISR_RING_0); + IDT.set_gate(218, uint32(@ISR_218), $08, ISR_RING_0); + IDT.set_gate(219, uint32(@ISR_219), $08, ISR_RING_0); + IDT.set_gate(220, uint32(@ISR_220), $08, ISR_RING_0); + IDT.set_gate(221, uint32(@ISR_221), $08, ISR_RING_0); + IDT.set_gate(222, uint32(@ISR_222), $08, ISR_RING_0); + IDT.set_gate(223, uint32(@ISR_223), $08, ISR_RING_0); + IDT.set_gate(224, uint32(@ISR_224), $08, ISR_RING_0); + IDT.set_gate(225, uint32(@ISR_225), $08, ISR_RING_0); + IDT.set_gate(226, uint32(@ISR_226), $08, ISR_RING_0); + IDT.set_gate(227, uint32(@ISR_227), $08, ISR_RING_0); + IDT.set_gate(228, uint32(@ISR_228), $08, ISR_RING_0); + IDT.set_gate(229, uint32(@ISR_229), $08, ISR_RING_0); + IDT.set_gate(230, uint32(@ISR_230), $08, ISR_RING_0); + IDT.set_gate(231, uint32(@ISR_231), $08, ISR_RING_0); + IDT.set_gate(232, uint32(@ISR_232), $08, ISR_RING_0); + IDT.set_gate(233, uint32(@ISR_233), $08, ISR_RING_0); + IDT.set_gate(234, uint32(@ISR_234), $08, ISR_RING_0); + IDT.set_gate(235, uint32(@ISR_235), $08, ISR_RING_0); + IDT.set_gate(236, uint32(@ISR_236), $08, ISR_RING_0); + IDT.set_gate(237, uint32(@ISR_237), $08, ISR_RING_0); + IDT.set_gate(238, uint32(@ISR_238), $08, ISR_RING_0); + IDT.set_gate(239, uint32(@ISR_239), $08, ISR_RING_0); + IDT.set_gate(240, uint32(@ISR_240), $08, ISR_RING_0); + IDT.set_gate(241, uint32(@ISR_241), $08, ISR_RING_0); + IDT.set_gate(242, uint32(@ISR_242), $08, ISR_RING_0); + IDT.set_gate(243, uint32(@ISR_243), $08, ISR_RING_0); + IDT.set_gate(244, uint32(@ISR_244), $08, ISR_RING_0); + IDT.set_gate(245, uint32(@ISR_245), $08, ISR_RING_0); + IDT.set_gate(246, uint32(@ISR_246), $08, ISR_RING_0); + IDT.set_gate(247, uint32(@ISR_247), $08, ISR_RING_0); + IDT.set_gate(248, uint32(@ISR_248), $08, ISR_RING_0); + IDT.set_gate(249, uint32(@ISR_249), $08, ISR_RING_0); + IDT.set_gate(250, uint32(@ISR_250), $08, ISR_RING_0); + IDT.set_gate(251, uint32(@ISR_251), $08, ISR_RING_0); + IDT.set_gate(252, uint32(@ISR_252), $08, ISR_RING_0); + IDT.set_gate(253, uint32(@ISR_253), $08, ISR_RING_0); + IDT.set_gate(254, uint32(@ISR_254), $08, ISR_RING_0); + IDT.set_gate(255, uint32(@ISR_255), $08, ISR_RING_0); +end; + +end. \ No newline at end of file diff --git a/src/kernel.pas b/src/kernel.pas index 91f74b83..419f8497 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -18,7 +18,7 @@ uses idt, isr, irq, - isr32, + TMR_0_ISR, console, bios_data_area, keyboard, @@ -36,12 +36,13 @@ uses USB, testdriver, E1000, - IDE, + //IDE, storagemanagement, lists, net, fat32, - isrmanager; + isrmanager, + faults; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -140,9 +141,9 @@ begin { Memory/CPU Init } idt.init(); - isr.init(); - //isrmanager.init(); irq.init(); + isrmanager.init(); + faults.init(); pmemorymanager.init(); vmemorymanager.init(); lmemorymanager.init(); @@ -163,7 +164,7 @@ begin { Hook Timer for Ticks } tracer.push_trace('kmain.TMR'); STI; - isr32.hook(uint32(@bios_data_area.tick_update)); + TMR_0_ISR.hook(uint32(@bios_data_area.tick_update)); tracer.pop_trace; { Device Drivers } @@ -173,7 +174,7 @@ begin mouse.init(); testdriver.init(); E1000.init(); - IDE.init(); + //IDE.init(); console.outputln('KERNEL', 'DEVICE DRIVERS: INIT END.'); tracer.pop_trace; diff --git a/src/scheduler.pas b/src/scheduler.pas index 2da94438..3dbb6f01 100644 --- a/src/scheduler.pas +++ b/src/scheduler.pas @@ -13,7 +13,7 @@ interface uses console, - isr32, + TMR_0_ISR, lmemorymanager, terminal; @@ -114,7 +114,7 @@ begin Current_Task:= Root_Task; Tick:= 0; Active:= False; - isr32.hook(uint32(@delta)); + TMR_0_ISR.hook(uint32(@delta)); terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.'); console.outputln('SCHEDULER','INIT END.'); end;