From 04d1b192e8748d769520e8ae25db6feaf62c40a6 Mon Sep 17 00:00:00 2001 From: Kevin Lange Date: Mon, 17 Jan 2011 18:22:48 -0600 Subject: [PATCH] [core] Various fixes. --- bootdisk.img | Bin 1474560 -> 1474560 bytes core/idt.c | 4 ++-- core/irq.c | 7 ++----- core/timer.c | 6 +++--- include/system.h | 15 +++++++++++---- main.c | 36 ++++++++++++++++++------------------ 6 files changed, 36 insertions(+), 32 deletions(-) diff --git a/bootdisk.img b/bootdisk.img index 8ada6bdd4fb8f7704ccfb9e5a62abb8a51c61ea7..036374a32b36f92e5ec99be6f5009df59e13777a 100644 GIT binary patch delta 1895 zcmZ9MZA@EL7{||PFHm`DPk9*(N+=FcA_?o_P+>51+-b7u784XOV`w%6S}MYp>;p@y zB|5?eiDx7mUna{Ui;0e;2`teVln+QWF1i<8beR#Hbr3UIlYtPf|I>Ra$KB+)r@#OC zKhJZ{J@+;kYzhXO#yd+=4)u+AYRYQ}=^F_jD;e|@4(PUieR)7n?bo9-`WnHtkTsyM zSs~W1S?i-buOaU-X4>KgN8FHlf`#-o3arvu@1MN6;d0=~ER@I{(4+lzMK*KLX0)QM z*^ETa*a-=BMrr7HlpeK1Z4;_RWMphuPYSUURv4^UP{fsvwBu0{7=|(~X0K!tGCN)0 z|9fcuUTBd;Jn%)H)^OWZWW&8Bfsob6tP?*=({M{h3*_Dqxu=mEsWc2@VO?z3GX6=P z=(4)+<@wLaei%Lq&o!oLMKf4GK{1Rd9Luk5!L;We!-zasHH_J5!ZVwz0vv)cp_^#( zA%;jmYHm|26q;9RkDJ=4&|a0A=z!dqZNJ_^m&>+?CZ6TzJ6@v=e7z&vRfk>I7a zgAe^`4K17RMY+f?~jU%`G~RixStwtC9ole+#}YRLdft^SwkX!`nLZDSdwNArq6xw~%{+ zi~p$@|>J0mX1uYgCC0tdj|3LgS% zl#vtC-wr1DsuD4X20rj*#oq(&Lj8EZcPRGnRubNW;l~6B|N8{qQ_2NLkb+)xUpg4Yy726#&0&EPi0UjROk#fbQ` z7e`nOb}9Zc@Nj5`|v`U&NVhmkpZ1mCF2KFmZ3Zl*hoi z8x8r@Q@XPwlaXGTKZf}`ymasqJ;QGf7SL(FGPs3K@cf}FXElz>BYk`D4WA6R4_&d+ zJNy}5Kriq{KA+P4_QCGAjvi_EAMOcPo&K1HmWJP78m0&f!ivxk35Y~Q62gXf1d)tL bL8Kzm5O#zE!4OVFIwAv+Ik_~PWxx9`vTMif delta 1906 zcmZ9MeN0Dr0XN2ynQUoI zXQW}mA7^Ay6CG&6{+f$70*S`3ut*k{EKY`+&1eL(o6#6+$OLJ)KBxC~T-M~hr@!Ys z@B5yQ+eRWSkx0v>p3-fkAr`1DuO%3j6Qx6erdc^j@LBQ<%1Nti8*EHk8|}^s_W+B^ zNeZz>W+xX0W!u%6#@L_HcZFq(<2w79-T==>>8;|X1f!ukKdmg!JwWeuH>*t>N(w5^C zJ=W@9U;KtNVESWap*dUfPX*f;nZ*_e>S07}LSm9%_5Y`7>b*5hyE?;j57dMQz+xV~ zM2qtn)P6(r=~}VS+6?V6T^kizouP^1$W8h77@Ec86Fo%_YVt8%t4xcjg2`3g2;cpJ z>SitFn^UCLaf_$yU)}E0?P5^#mFa^wr0gqMsS4hQa3oXw)Al?n@yT`{jq;z{%c-K+ z4%b>K<1chQQE})mO~dUuC#G@b;;w_DPQ9*PUa>teQOU=;-k{BVy(`ZvW0y@6m~5)R+@*iXGaf72g!Q!8^4jM)o@sUVEyRLt|&o>|7-vk#kVJ4JV$b#S!CNRZ!Fy=cM z>BeY*lE8Qx+-UF`#`H(@v*H-i{Zk9r0)Y@TNIesp103-&5&^qV(gVI`NzYT_1)sKV z@WbGB)BFywxC^mB7qOBG@LQ-~33g+Fdno$<>R`lc2rt3#k*PofxX;A&F^C4O;3<>89ef1!(+&H1|xWNZJjEKK{afkU} zugPBoe%9nK0q?~L4IBPlVB3bjjZ{G>-4I9+d;xd%q>=C%xY{(|1SYZM09Uum@V$cH z@ViRq@O3M_!>f1^?9F^pdHL)GYVYhj+S>Q_@&3-> 8); } -int timer_ticks = 0; +long timer_ticks = 0; unsigned long ticker = 0; void @@ -37,7 +37,7 @@ void timer_wait( int ticks ) { - unsigned long eticks; - eticks = timer_ticks + ticks; + long eticks; + eticks = (long)timer_ticks + (long)ticks; while(timer_ticks < eticks); } diff --git a/include/system.h b/include/system.h index 9a37887d..68818c8d 100644 --- a/include/system.h +++ b/include/system.h @@ -1,9 +1,14 @@ #ifndef __SYSTEM_H #define __SYSTEM_H +#define NULL ((void *)0UL) + +typedef unsigned long uintptr_t; +typedef long size_t; + /* Kernel Main */ -extern unsigned char *memcpy(unsigned char *dest, const unsigned char *src, int count); -extern unsigned char *memset(unsigned char *dest, unsigned char val, int count); +extern void *memcpy(void * restrict dest, const void * restrict src, size_t count); +extern void *memset(void *dest, int val, size_t count); extern unsigned short *memsetw(unsigned short *dest, unsigned short val, int count); extern int strlen(const char *str); extern unsigned char inportb (unsigned short _port); @@ -32,17 +37,19 @@ struct regs { unsigned int eip, cs, eflags, useresp, ss; }; +typedef void (*irq_handler_t)(struct regs *); + /* ISRS */ extern void isrs_install(); /* Interrupt Handlers */ extern void irq_install(); -extern void irq_install_handler(int irq, void *handler); +extern void irq_install_handler(int irq, irq_handler_t); extern void irq_uninstall_handler(int irq); /* Timer */ extern void timer_install(); -extern int timer_ticks; +extern long timer_ticks; extern void timer_wait(int ticks); /* Keyboard */ diff --git a/main.c b/main.c index a376cf97..bddde7fa 100644 --- a/main.c +++ b/main.c @@ -5,17 +5,17 @@ * Copy from source to destination. Assumes that * source and destination are not overlapping. */ -unsigned char * +void * memcpy( - unsigned char *dest, - const unsigned char *src, - int count + void * restrict dest, + const void * restrict src, + size_t count ) { - int i; - i = 0; - for ( ; i < count; ++i ) { - dest[i] = src[i]; - + size_t i; + unsigned char *a = dest; + const unsigned char *b = src; + for ( i = 0; i < count; ++i ) { + a[i] = b[i]; } return dest; } @@ -24,18 +24,18 @@ memcpy( * memset * Set `count` bytes to `val`. */ -unsigned char * +void * memset( - unsigned char *dest, - unsigned char val, - int count + void *b, + int val, + size_t count ) { - int i; - i = 0; - for ( ; i < count; ++i ) { - dest[i] = val; + size_t i; + unsigned char * dest = b; + for ( i = 0; i < count; ++i ) { + dest[i] = (unsigned char)val; } - return dest; + return b; } /*