X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Futil.h;h=b305d78697816a40303d98f012219d92750a2ddd;hp=6d869ebec22169441afcde79fb10f102e8220e47;hb=e8b26db00c934d141f16652cb8dcbeae23b17e48;hpb=2c4602e53eaab44272ea5cd62667c939e6d2f61b diff --git a/src/util.h b/src/util.h index 6d869eb..b305d78 100644 --- a/src/util.h +++ b/src/util.h @@ -49,6 +49,14 @@ void perf_end(void); void debug_break(void); #pragma aux debug_break = "int 3"; + +void halt(void); +#pragma aux halt = "hlt"; + +void memset16(void *ptr, int val, int count); +#pragma aux memset16 = \ + "rep stosw" \ + parm[edi][eax][ecx]; #endif #ifdef __GNUC__ @@ -72,6 +80,13 @@ void debug_break(void); #define debug_break() \ asm volatile ("int $3") + +#define halt() \ + asm volatile("hlt") + +#define memset16(ptr, val, count) asm volatile ( \ + "rep stosw\n\t" \ + :: "D"(ptr), "a"(val), "c"(count)) #endif #ifdef _MSC_VER @@ -100,6 +115,16 @@ void debug_break(void); do { \ __asm { int 3 } \ } while(0) + +#define memset16(ptr, val, count) \ + do { \ + __asm { \ + mov edi, ptr \ + mov ecx, count \ + mov eax, val \ + rep stosw \ + } \ + } while(0) #endif #endif /* UTIL_H_ */