/* * $Id: proto.h,v 1.2 1993/08/02 17:53:02 mycroft Exp $ * * TBD - need for common typedefs - rethink? * TBD - move config include into the source files - this is just expedient */ #include "config.h" #include "nbtypes.h" #define TRUE 1 #define FALSE 0 #define MDUMP 100 /* TBD - remove */ #define MAX_FILE_NAME_LEN 128 #define CRTBASE ((char *)0xb8000) #define CHECKPOINT(x) (CRTBASE[0] = x) #define nelt(x) (sizeof(x)/sizeof((x)[0])) void ENTER(char *); /* remove TBD */ int IsKbdCharReady(void); u_char GetKbdChar(void); void HandleKbdAttn(void); void KbdWait(int n); int bcmp(const void *, const void *, int); void volatile exit(int); void volatile ExitToBios(void); void gateA20(void); int getc(void); int getchar(void); u_short GetMemSize(u_short); int gets(char *); int ischar(void); void longjmp(jmp_buf env, int val); void printf( /* const char *, ... */ ); void putc(int); void putchar(int); int rand(void); void ResetCpu(void); int setjmp(jmp_buf env); void srand(u_int); void StartProg(u_long phyaddr, u_long *args); int strlen(const char *); char *strncat(char *, const char *, int len); char *strncpy(char *, const char *, int len); int strcmp(const char *, const char *); u_long timer(void); /* macros in pio.h, rewritten as in-line functions */ /* TBD - define addr arg as long - short might result in extra bit masking whereas longs simply get plonked down in %edx */ #undef inb #undef outb #undef inw #undef outw #undef inl #undef outl static inline u_char inb(u_short addr) { u_char datum; asm volatile("inb %1, %0" : "=a" (datum) : "d" (addr)); return datum; } static inline void outb(u_short addr, u_char datum) { asm volatile("outb %0, %1" : : "a" (datum), "d" (addr)); } static inline u_short inw(u_short addr) { u_short datum; asm volatile(".byte 0x66; inl %1, %0" : "=a" (datum) : "d" (addr)); return datum; } static inline void outw(u_short addr, u_short datum) { asm volatile(".byte 0x66; outw %0, %1" : : "a" (datum), "d" (addr)); } static inline u_long inl(u_short addr) { u_long datum; asm volatile("inw %1, %0" : "=a" (datum) : "d" (addr)); return datum; } static inline void outl(u_short addr, u_long datum) { asm volatile("outw %0, %1" : : "a" (datum), "d" (addr)); } #if __GCC__ >= 2 /* fast versions of bcopy(), bzero() */ static inline void bcopy(const void *from, void *to, int len) { /* assumes %es == %ds */ asm(" mov %0, %%esi mov %1, %%edi mov %2, %%ecx cld rep movsb " : : "g" (from), "g" (to), "g" (len) : "esi", "edi", "ecx"); } static inline void bzero(void *dest, int len) { /* assumes %es == %ds */ asm(" mov %0, %%edi mov %1, %%ecx xor %%eax, %%eax cld rep stosb " : : "g" (dest), "g" (len) : "edi", "ecx", "eax"); } #else static inline void bcopy(char *from, char *to, int len) { while (len-- > 0) *to++ = *from++; } static inline void bzero(char *to, int len) { while (len-- > 0) *to++ = '\0'; } #endif static inline void PhysBcopy(u_long src, u_long dest, u_long nbytes) { bcopy((void *)src, (void *)dest, nbytes); } static inline void PhysBzero(u_long dest, u_long nbytes) { bzero((void *)dest, nbytes); }