ulong strtoul(char*, char**, int);
#include "../port/portfns.h"
void aamloop(int);
void cgaputc(int);
void cgaputs(char*, int);
int cistrcmp(char*, char*);
int cistrncmp(char*, char*, int);
void (*coherence)(void);
void etherinit(void);
void etherstart(void);
int floppyinit(void);
void floppyproc(void);
long floppyread(int, void*, long);
long floppyseek(int, long);
long floppywrite(int, void*, long);
void fpinit(void);
char* getconf(char*);
ulong getcr0(void);
ulong getcr2(void);
ulong getcr4(void);
int getfields(char*, char**, int, char);
ulong getstatus(void);
int atainit(void);
long ataread(int, void*, long);
long ataseek(int, long);
long atawrite(int, void*, long);
void i8042a20(void);
void i8042reset(void);
int inb(int);
void insb(int, void*, int);
ushort ins(int);
void inss(int, void*, int);
ulong inl(int);
void insl(int, void*, int);
void kbdinit(void);
int kbdintr0(void);
int kbdgetc(void);
long* mapaddr(ulong);
void microdelay(int);
void mmuinit(void);
uchar nvramread(int);
void outb(int, int);
void outsb(int, void*, int);
void outs(int, ushort);
void outss(int, void*, int);
void outl(int, ulong);
void outsl(int, void*, int);
void printcpufreq(void);
void putgdt(Segdesc*, int);
void putidt(Segdesc*, int);
void putcr3(ulong);
void putcr4(ulong);
void puttr(ulong);
void rdmsr(int, vlong*);
void scsiinit(void);
long scsiread(int, void*, long);
long scsiseek(int, long);
long scsiwrite(int, void*, long);
int setatapart(int, char*);
int setscsipart(int, char*);
void setvec(int, void (*)(Ureg*, void*), void*);
int tas(Lock*);
void trapinit(void);
void uartspecial(int, void (*)(int), int (*)(void), int);
int uartgetc(void);
void uartputc(int);
void wbflush(void);
void cpuid(char*, int*, int*);
#define PADDR(a) ((ulong)(a)&~KZERO)