www.pudn.com > LFYOS.zip > platform.h


#ifndef OS_KERNEL_PLATFORM 
#define OS_KERNEL_PLATFORM 
 
#define 	ax	system_call 
#define 	bx	system_call_arg1 
#define 	cx	system_call_arg2 
#define 	dx	system_call_arg3 
#define 	si	system_call_arg4 
#define 	di	system_call_arg5 
#define 	bp	system_call_arg6 
#define 	r7	system_call_arg7 
 
typedef struct thread_environment REG; 
 
static inline char get_char(void ) 
{ 
	register int p=0; 
	__asm__ __volatile ( 
		"movl $(0x00),%%eax\n\t" 
		"int $(0x82)\n\t" 
		"movl %%eax,%0\n\t" 
		:"=r" (p) 
		:"0" (p) 
	); 
	return (char )p; 
}; 
 
static inline int get_number(void ) 
{ 
	register int p=0; 
	__asm__ __volatile ( 
		"movl $(0x01),%%eax\n\t" 
		"int $(0x82)\n\t" 
		"movl %%eax,%0\n\t" 
		:"=r" (p) 
		:"0" (p) 
	); 
	return p; 
}; 
 
static inline void get_current_time(struct kernel_time *time) 
{ 
	register struct kernel_time *t=time; 
	__asm__ __volatile ( 
		"movl %0,%%eax\n\t" 
		"int $(0x83)\n\t" 
		:"=r" (t) 
		:"0" (t) 
	); 
	return ; 
}; 
 
static inline void print_string(char *str) 
{ 
	register char *p=str; 
	__asm__ __volatile ( 
		"movl %0,%%ebx\n\t" 
		"movl $(0x00),%%eax\n\t" 
		"int $(0x84)\n\t" 
		:"=r" (p) 
		:"0" (p) 
	); 
	return; 
} 
 
static inline void print_number(int number) 
{ 
	register int p=number; 
	__asm__ __volatile ( 
		"movl %0,%%ebx\n\t" 
		"movl $(0x01),%%eax\n\t" 
		"int $(0x84)\n\t" 
		:"=r" (p) 
		:"0" (p) 
	); 
	return; 
} 
 
static inline void print(char *str,int number) 
{ 
	print_string(str); 
	print_number(number); 
} 
 
static inline void set_print_thread(int thread_id) 
{ 
	register int p=thread_id; 
	__asm__ __volatile ( 
		"movl %0,%%ebx\n\t" 
		"movl $(0x03),%%eax\n\t" 
		"int $(0x84)\n\t" 
		:"=r" (p) 
		:"0" (p) 
	); 
	return; 
} 
#endif