static void near ourdummy (void) {} static unsigned near ourreadtimer (void) { asm pushf asm cli asm mov al,0h asm out 43h,al ourdummy(); asm in al,40h asm mov bl,al ourdummy(); asm in al,40h asm mov bh,al asm not bx asm popf return( _BX ); } void outw(unsigned port, unsigned val) { asm mov dx, port asm mov ax, val asm out dx, ax } void outb(unsigned port, unsigned char val) { asm mov dx, port asm mov al, val asm out dx, al } unsigned inw(unsigned port) { asm mov dx,port asm in ax,dx return _AX; } unsigned char inb(unsigned port) { asm mov dx,port asm in al,dx asm xor ah,ah return _AX; } void busdelay(void) { unsigned stop; unsigned cur, prev; stop = (prev = ourreadtimer()) + (20); while ((cur = ourreadtimer()) < stop) { if (cur < prev) { if (stop < 65535) break; stop -= 65535; } prev = cur; } } int kbpressed( void ) { asm mov ah, 0Bh asm int 21h asm cbw return( _AX ); } int getchr(void) { _AX = 0x0700; asm int 21h _AH = 0; return _AX; }