/*
* REAL_ISR.C Copyright (C) 1992 Mark R. Nelson.
*
* This header file contains the source code for the real
* time interrupt service routine used in the TERM286.H
* program. It also contains the only copy of the data
* structure used to access the UART.
*/
#include <dos.h>
#include <conio.h>
#include "phapi.h"
#include "term286.h"
/*
* This is the data structure used by both the real and
* protected mode interrupt service routines.
*/
struct port_data Port;
/*
* This is the real mode ISR. It is identical to the
* protected mode ISR, except for the increment of the
* real mode interrupt count near the end. This routine
* reads in the character that caused the interrupt, then
* tries to stuff it in the buffer and update the head
* pointer. Finally, it increments the diagnostic
* counter, outputs an EOI to the 8259 PIC, and exits.
*/
void far interrupt real_isr()
{
unsigned char c;
int space_used;
c = ( unsigned char ) inp( Port.uart_address );
space_used = Port.head_pointer - Port.tail_pointer;
if ( space_used < 0 )
space_used += 1024;
if ( space_used < 1023 ) {
Port.buffer[ Port.head_pointer++ ] = c;
Port.head_pointer &= 1023;
}
Port.real_count++;
(void) outp( 0x20, 0x20 );
}
/* End of File */