Category : Files from Magazines
Archive   : CUJ9209.ZIP
Filename : 1009040A

 
Output of file : 1009040A contained in archive : CUJ9209.ZIP
/*** LISTING 1 ***/
/*** ***/
/*** serial.h ***/

#include

#define COM1 0
#define COM2 1
#define COM3 2
#define COM4 3

#define COM1BASE 0x3F8 /* Base address for COM1 */
#define COM2BASE 0x2F8 /* Base address for COM2 */
#define COM3BASE 0x3E8 /* Base address for COM3 */
#define COM4BASE 0X2E8 /* Base address for COM4 */

/*** ****************************************** ***/
/*** 8250 UART user accessible registers ***/
/*** offsets relative to COMBASE address. ***/
/*** ****************************************** ***/

#define TXR 0 /* Transmit register (WRITE) */
#define RXR 0 /* Receive register (READ) */
#define IER 1 /* Interrupt Enable */
#define IIR 2 /* Interrupt ID */
#define LCR 3 /* Line control */
#define MCR 4 /* Modem control */
#define LSR 5 /* Line Status */
#define MSR 6 /* Modem Status */
#define SRP 7 /* Scratch Pad */
#define DLL 0 /* Divisor Latch Low */
#define DLH 1 /* Divisor latch High */

/*** ****************************************** ***/
/*** INTERRUPT ENABLE REGISTER (OFFSET 1) ***/
/*** ****************************************** **

Bit values of the Interrupt Enable Register (IER).

bit meaning
--- -------
0 Interrupt when byte is recieved.
1 Interrupt when transmitter hold-
ing register is empty.
2 Interrupt when there is an error
in data reception.
3 Interrupt when any RS-232 inputs
change states.
4-7 Not used. (Always 0)
*/
#define RX_INT 0x01
#define TBE_INT 0x02
#define ERR_INT 0x03
#define RS_INT 0x04

/*** ***************************************** ***/
/* INTERRUPT IDENTIFICATION REGISTER (OFFSET 2) */
/*** ***************************************** **

Bit values of the Interrupt Identification (IIR).

bit meaning
--- -------
0 0 = Interrupt pending.
1-2 Interrupt ID code
00 = RS-232 input
01 = Transmitter buffer empty
10 = Data received (RX_ID)
11 = Reception error, or BREAK.
3-7 Not used. */

#define RX_ID 0x04
#define RX_MASK 0x07

/*** ***************************************** ***/
/*** LINE CONTROL REGISTER (OFFSET 3) ***/
/*** ***************************************** **

Bit values of the Line Control Register (LCR).

bit meaning
--- -------
0-1 00 = 5 bits
01 = 6 bits
10 = 7 bits
11 = 8 bits.
2 Stop bits.
3 0 = parity off
1 = parity on.
4 0 = parity odd
1 = parity even.
5 Sticky parity.
6 Set break.
7 Toggle port addresses. (DLAB) */

#define NO_PARITY 0x00
#define EVEN_PARITY 0x18
#define ODD_PARITY 0x08
#define DLAB 0x80

/*** ***************************************** ***/
/*** MODEM CONTROL REGISTER (OFFSET 4) ***/
/*** ***************************************** **

Bit values of the Modem Control Register (MCR).

bit meaning
--- -------
0 1 assert DTR (Data Terminal Ready)
1 1 assert RTS (Request to Send)
2 User definable output. (GPO1)
3 Enable Interrupts on 8250. (GPO2)
4 Local Loopback Test.
5-7 Not used. (Always 0)
*/
#define DTR 0x01
#define RTS 0x02
#define GPO1 0x04
#define GPO2 0x08
#define EN_INT 0x08

/*** ***************************************** ***/
/*** LINE STATUS REGISTER (OFFSET 5) ***/
/*** ***************************************** **

Bit values held in the Line Status Register (LSR).

bit meaning
--- -------
0 Data ready.
1 Overrun error.
2 Parity error.
3 Framing error.
4 Break detect.
5 Transmitter buffer empty.
6 Transmitter empty.
7 Time out. */

#define RCVRDY 0x01
#define OVRERR 0x02
#define PRTYERR 0x04
#define FRMERR 0x08
#define BRKERR 0x10
#define XMTRDY 0x20
#define XMTRSR 0x40
#define TIMEOUT 0x80

/*** ***************************************** ***/
/*** MODEM STATUS REGISTER (OFFSET 6) ***/
/*** ***************************************** **

Bit values held in the Modem Status Register (MSR).

bit meaning
--- -------
0 Delta CTS.
1 Delta DSR.
2 Delta RI.
3 Delta DCD.
4 CTS (Clear to Send).
5 DSR (Data Set Ready).
6 RI (Ring indicator).
7 DCD (Data Carrier Detected). */

#define D_CTS 0x01
#define D_DSR 0x02
#define D_RI 0x04
#define D_DCD 0x08
#define CTS 0x10
#define DSR 0x20
#define RI 0x40
#define DCD 0x80

/*** ***************************************** ***/
/*** SCRATCH PAD REGISTER (OFFSET 7) ***/
/*** ***************************************** **

This register has no function and may be use
as any other byte of RAM, but note that this
register does not exist on early versions of
the 8250.
*/
/*** ***************************************** ***/
/*** LSB & MSB BAUD RATE DIVISOR LATCH ***/
/*** (REGISTER 8 & 9) ***/

/*** ***************************************** **

These two register are use to generate the
baud rates. They are reached by setting the
DLAB bit of the LINE CONTROL REGISTER to a one
and addressing Register 8 as an OFFSET of 0
and Register 9 as an OFFSET of 1. */

/*** ***************************************** ***/
/*** These are the port addresses of the 8259 ***/
/*** Programmable Interrupt Controller (PIC). ***/
/*** ***************************************** ***/

#define IMR 0x21 /* Interrupt Mask Register Port*/
#define ICR 0x20 /* Interrupt Control Port */

/*** An end of interrupt needs to be sent to ***/
/*** the Control Port of the 8259 when a ***/
/*** hardware interrupt ends. ***/

#define EOI 0x20 /* End Of Interrupt */

/*** The (IMR) tells the (PIC) to service an ***/
/*** interrupt only if it is not masked (FALSE).**/

/*** ***************************************** ***/
/*** INTERRUPT ADDRESS FOR COM PORTS ***/
/*** ***************************************** ***/

#define IRQ4 0xEF /*** COM1 & COM3 ***/
#define IRQ3 0xF7 /*** COM2 & COM4 ***/

/*** ***************************************** ***/
/*** GENERAL DEFINE STATEMENTS ***/
/*** ***************************************** ***/

#define SBUFSIZ 4000

/*** ***************************************** ***/
/*** PROTOTYPES ***/
/*** ***************************************** ***/

int SerialOut(char Char_Value);
int SerialIn(void);
void interrupt far ReceiveData(void);
int IntSerialIn(void);
int SetPort (int ComPort);
int SetBaud(long Baud);
int SetOthers(int Parity, int DataBits, int StopBits);
int SetSerial(int ComPort, long Baud, int Parity,
int DataBits, int StopBits);
void Setvects(int ComPort);
void Resvects(int ComPort);
void EnableInt(int ComPort);
void DisableInt(void);
void InitSerial(int ComPort);
void CloseSerial(int ComPort);
void Assert(int request);
void Assert_Off(int request);
int Status(int request);

  3 Responses to “Category : Files from Magazines
Archive   : CUJ9209.ZIP
Filename : 1009040A

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/