export CP = cmd /C copy
#FLAGS = -Wall -nostdinc -fno-builtin
-FLAGS = -Wall -fno-builtin -DDEBUG
+#FLAGS = -Wall -fno-builtin -DDEBUG
+FLAGS = -Wall -fno-builtin
# asmcode.o has to be first in the link line because it contains the startup code
OBJS = asmcode.a asmcode.o mb.o boot.o freeldr.o stdlib.o fs.a fs.o fs_fat.o \
mem.o memory.o debug.o parseini.o
ASM_OBJS = asmcode.o mb.o boot.o mem.o
C_OBJS = freeldr.o stdlib.o fs.a reactos.o tui.o menu.o miscboot.o options.o linux.o \
- multiboot.o arcname.o memory.o debug.o parseini.o
+ multiboot.o
+C_OBJS2 = arcname.o memory.o debug.o parseini.o rs232.o portio.o
.PHONY : clean
all: freeldr.sys
freeldr.sys: asmcode.a c_code.a
- $(LD) -N -Ttext=0x8000 --oformat=binary -o freeldr.sys asmcode.a c_code.a
+ $(LD) -N -Ttext=0x8000 --oformat=binary -o f.sys asmcode.a c_code.a
+ ../bootsect/stubit ../bootsect/fatstub.bin f.sys freeldr.sys
asmcode.a: $(ASM_OBJS)
$(LD) -r -o asmcode.a $(ASM_OBJS)
-c_code.a: $(C_OBJS)
- $(LD) -r -o c_code.a $(C_OBJS)
+c_code.a: c_code1.a c_code2.a
+ $(LD) -r -o c_code.a c_code1.a c_code2.a
+
+c_code1.a: $(C_OBJS)
+ $(LD) -r -o c_code1.a $(C_OBJS)
+
+c_code2.a: $(C_OBJS2)
+ $(LD) -r -o c_code2.a $(C_OBJS2)
asmcode.o: asmcode.S asmcode.h Makefile
$(CC) $(FLAGS) -o asmcode.o -c asmcode.S
parseini.o: parseini.c parseini.h Makefile
$(CC) $(FLAGS) -o parseini.o -c parseini.c
+rs232.o: rs232.c rs232.h Makefile
+ $(CC) $(FLAGS) -o rs232.o -c rs232.c
+
+portio.o: portio.c portio.h Makefile
+ $(CC) $(FLAGS) -o portio.o -c portio.c
+
clean:
$(RM) *.o
$(RM) *.a
#include "freeldr.h"
#include "debug.h"
#include "stdlib.h"
+#include "rs232.h"
+#include "parseini.h"
+
+#ifdef DEBUG
ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY;
+#define SCREEN 0
+#define RS232 1
+
+#define COM1 1
+#define COM2 2
+#define COM3 3
+#define COM4 4
+
+ULONG DebugPort = RS232; //SCREEN;
+ULONG ComPort = COM1;
+ULONG BaudRate = 19200;
+
+VOID DebugInit(VOID)
+{
+ if (DebugPort == RS232)
+ {
+ Rs232PortInitialize(ComPort, BaudRate);
+ }
+}
+
void DebugPrint(ULONG Mask, char *format, ...)
{
int *dataptr = (int *) &format;
char c, *ptr, str[16];
char buffer[512];
char *p = buffer;
+ int i;
// Mask out unwanted debug messages
if (!(Mask & DebugPrintMask))
*p=0;
- print(buffer);
+ if (DebugPort == RS232)
+ {
+ for (i=0; buffer[i] != 0; i++)
+ {
+ Rs232PortPutByte(buffer[i]);
+ if (buffer[i] == '\n')
+ {
+ Rs232PortPutByte('\r');
+ }
+ }
+ }
+ else
+ {
+ print(buffer);
+ }
}
+
+#endif // defined DEBUG
#ifndef __DEBUG_H
#define __DEBUG_H
+#ifdef DEBUG
+
#define DPRINT_WARNING 0x00000001 // OR this with DebugPrintMask to enable debugger messages and other misc stuff
#define DPRINT_MEMORY 0x00000002 // OR this with DebugPrintMask to enable memory management messages
+VOID DebugInit(VOID);
void DebugPrint(ULONG Mask, char *format, ...);
#define BugCheck0(format) \
for (;;); \
}
+#endif // defined DEBUG
+
#endif // defined __DEBUG_H
\ No newline at end of file
#include "linux.h"
#include "memory.h"
#include "parseini.h"
+#include "debug.h"
// Variable BootDrive moved to asmcode.S
//ULONG BootDrive = 0; // BIOS boot drive, 0-A:, 1-B:, 0x80-C:, 0x81-D:, etc.
printf("Loading FreeLoader...\n");
+#ifdef DEBUG
+ DebugInit();
+#endif
+
InitMemoryManager((PVOID)0x100000, 0x20000);
if (!ParseIniFile())
#define size_t unsigned int
#define BOOL int
+#define BOOLEAN int
#define NULL 0
#define TRUE 1
#define FALSE 0
#define PUCHAR unsigned char *
#define WCHAR unsigned short
#define PWCHAR unsigned short *
+#define SHORT short
+#define USHORT unsigned short
+#define PUSHORT unsigned short *
#define LONG long
#define ULONG unsigned long
#define PULONG unsigned long *
--- /dev/null
+/* $Id: portio.c,v 1.1 2001/08/07 06:19:43 bpalmer Exp $
+ *
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: ntoskrnl/hal/x86/portio.c
+ * PURPOSE: Port I/O functions
+ * PROGRAMMER: Eric Kohl (ekohl@abo.rhein-zeitung.de)
+ * UPDATE HISTORY:
+ * Created 18/10/99
+ */
+
+//#include <ddk/ntddk.h>
+#include "freeldr.h"
+
+
+/* FUNCTIONS ****************************************************************/
+
+/*
+ * This file contains the definitions for the x86 IO instructions
+ * inb/inw/inl/outb/outw/outl and the "string versions" of the same
+ * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing"
+ * versions of the single-IO instructions (inb_p/inw_p/..).
+ *
+ * This file is not meant to be obfuscating: it's just complicated
+ * to (a) handle it all in a way that makes gcc able to optimize it
+ * as well as possible and (b) trying to avoid writing the same thing
+ * over and over again with slight variations and possibly making a
+ * mistake somewhere.
+ */
+
+/*
+ * Thanks to James van Artsdalen for a better timing-fix than
+ * the two short jumps: using outb's to a nonexistent port seems
+ * to guarantee better timings even on fast machines.
+ *
+ * On the other hand, I'd like to be sure of a non-existent port:
+ * I feel a bit unsafe about using 0x80 (should be safe, though)
+ *
+ * Linus
+ */
+
+#ifdef SLOW_IO_BY_JUMPING
+#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:")
+#else
+#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80")
+#endif
+
+#ifdef REALLY_SLOW_IO
+#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; }
+#else
+#define SLOW_DOWN_IO __SLOW_DOWN_IO
+#endif
+
+VOID /*STDCALL*/
+READ_PORT_BUFFER_UCHAR (PUCHAR Port,
+ PUCHAR Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; insb\n\t"
+ : "=D" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+VOID /*STDCALL*/
+READ_PORT_BUFFER_USHORT (PUSHORT Port,
+ PUSHORT Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; insw"
+ : "=D" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+VOID /*STDCALL*/
+READ_PORT_BUFFER_ULONG (PULONG Port,
+ PULONG Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; insl"
+ : "=D" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+UCHAR /*STDCALL*/
+READ_PORT_UCHAR (PUCHAR Port)
+{
+ UCHAR Value;
+
+ __asm__("inb %w1, %0\n\t"
+ : "=a" (Value)
+ : "d" (Port));
+ SLOW_DOWN_IO;
+ return(Value);
+}
+
+USHORT /*STDCALL*/
+READ_PORT_USHORT (PUSHORT Port)
+{
+ USHORT Value;
+
+ __asm__("inw %w1, %0\n\t"
+ : "=a" (Value)
+ : "d" (Port));
+ SLOW_DOWN_IO;
+ return(Value);
+}
+
+ULONG /*STDCALL*/
+READ_PORT_ULONG (PULONG Port)
+{
+ ULONG Value;
+
+ __asm__("inl %w1, %0\n\t"
+ : "=a" (Value)
+ : "d" (Port));
+ SLOW_DOWN_IO;
+ return(Value);
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_BUFFER_UCHAR (PUCHAR Port,
+ PUCHAR Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; outsb"
+ : "=S" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_BUFFER_USHORT (PUSHORT Port,
+ PUSHORT Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; outsw"
+ : "=S" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_BUFFER_ULONG (PULONG Port,
+ PULONG Buffer,
+ ULONG Count)
+{
+ __asm__ __volatile__ ("cld ; rep ; outsl"
+ : "=S" (Buffer), "=c" (Count)
+ : "d" (Port),"0" (Buffer),"1" (Count));
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_UCHAR (PUCHAR Port,
+ UCHAR Value)
+{
+ __asm__("outb %0, %w1\n\t"
+ :
+ : "a" (Value),
+ "d" (Port));
+ SLOW_DOWN_IO;
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_USHORT (PUSHORT Port,
+ USHORT Value)
+{
+ __asm__("outw %0, %w1\n\t"
+ :
+ : "a" (Value),
+ "d" (Port));
+ SLOW_DOWN_IO;
+}
+
+VOID /*STDCALL*/
+WRITE_PORT_ULONG (PULONG Port,
+ ULONG Value)
+{
+ __asm__("outl %0, %w1\n\t"
+ :
+ : "a" (Value),
+ "d" (Port));
+ SLOW_DOWN_IO;
+}
+
+/* EOF */
--- /dev/null
+/*
+ * FreeLoader
+ * Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __PORTIO_H
+#define __PORTIO_H
+
+
+/*
+ * Port I/O functions
+ */
+
+VOID
+/*STDCALL*/
+READ_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
+
+VOID
+/*STDCALL*/
+READ_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
+
+VOID
+/*STDCALL*/
+READ_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
+
+UCHAR
+/*STDCALL*/
+READ_PORT_UCHAR (PUCHAR Port);
+
+ULONG
+/*STDCALL*/
+READ_PORT_ULONG (PULONG Port);
+
+USHORT
+/*STDCALL*/
+READ_PORT_USHORT (PUSHORT Port);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, ULONG Count);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_BUFFER_ULONG (PULONG Port, PULONG Value, ULONG Count);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_BUFFER_USHORT (PUSHORT Port, PUSHORT Value, ULONG Count);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_UCHAR (PUCHAR Port, UCHAR Value);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_ULONG (PULONG Port, ULONG Value);
+
+VOID
+/*STDCALL*/
+WRITE_PORT_USHORT (PUSHORT Port, USHORT Value);
+
+
+#endif // defined __PORTIO_H
--- /dev/null
+/*
+ * FreeLoader
+ * Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
+ * Copyright (C) 2001 Eric Kohl
+ * Copyright (C) 2001 Emanuele Aliberti
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "portio.h"
+
+
+/* MACROS *******************************************************************/
+
+#define DEFAULT_BAUD_RATE 19200
+
+#define SER_RBR(x) ((x)+0)
+#define SER_THR(x) ((x)+0)
+#define SER_DLL(x) ((x)+0)
+#define SER_IER(x) ((x)+1)
+#define SER_DLM(x) ((x)+1)
+#define SER_IIR(x) ((x)+2)
+#define SER_LCR(x) ((x)+3)
+#define SR_LCR_CS5 0x00
+#define SR_LCR_CS6 0x01
+#define SR_LCR_CS7 0x02
+#define SR_LCR_CS8 0x03
+#define SR_LCR_ST1 0x00
+#define SR_LCR_ST2 0x04
+#define SR_LCR_PNO 0x00
+#define SR_LCR_POD 0x08
+#define SR_LCR_PEV 0x18
+#define SR_LCR_PMK 0x28
+#define SR_LCR_PSP 0x38
+#define SR_LCR_BRK 0x40
+#define SR_LCR_DLAB 0x80
+#define SER_MCR(x) ((x)+4)
+#define SR_MCR_DTR 0x01
+#define SR_MCR_RTS 0x02
+#define SER_LSR(x) ((x)+5)
+#define SR_LSR_DR 0x01
+#define SR_LSR_TBE 0x20
+#define SER_MSR(x) ((x)+6)
+#define SR_MSR_CTS 0x10
+#define SR_MSR_DSR 0x20
+#define SER_SCR(x) ((x)+7)
+
+/* STATIC VARIABLES *********************************************************/
+
+static ULONG Rs232ComPort = 0;
+static ULONG Rs232BaudRate = 0;
+static PUCHAR Rs232PortBase = (PUCHAR)0;
+
+/* The com port must only be initialized once! */
+static BOOLEAN PortInitialized = FALSE;
+
+/* STATIC FUNCTIONS *********************************************************/
+
+static BOOL Rs232DoesComPortExist(PUCHAR BaseAddress)
+{
+ BOOLEAN found;
+ BYTE mcr;
+ BYTE msr;
+
+ found = FALSE;
+
+ /* save Modem Control Register (MCR) */
+ mcr = READ_PORT_UCHAR (SER_MCR(BaseAddress));
+
+ /* enable loop mode (set Bit 4 of the MCR) */
+ WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
+
+ /* clear all modem output bits */
+ WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
+
+ /* read the Modem Status Register */
+ msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
+
+ /*
+ * the upper nibble of the MSR (modem output bits) must be
+ * equal to the lower nibble of the MCR (modem input bits)
+ */
+ if ((msr & 0xF0) == 0x00)
+ {
+ /* set all modem output bits */
+ WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x1F);
+
+ /* read the Modem Status Register */
+ msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
+
+ /*
+ * the upper nibble of the MSR (modem output bits) must be
+ * equal to the lower nibble of the MCR (modem input bits)
+ */
+ if ((msr & 0xF0) == 0xF0)
+ found = TRUE;
+ }
+
+ /* restore MCR */
+ WRITE_PORT_UCHAR (SER_MCR(BaseAddress), mcr);
+
+ return (found);
+}
+
+/* FUNCTIONS *********************************************************/
+
+BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate)
+{
+ ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
+ char buffer[80];
+ ULONG divisor;
+ BYTE lcr;
+
+ if (PortInitialized == FALSE)
+ {
+ if (BaudRate != 0)
+ {
+ Rs232BaudRate = BaudRate;
+ }
+ else
+ {
+ Rs232BaudRate = DEFAULT_BAUD_RATE;
+ }
+
+ if (ComPort == 0)
+ {
+ if (Rs232DoesComPortExist ((PUCHAR)BaseArray[2]))
+ {
+ Rs232PortBase = (PUCHAR)BaseArray[2];
+ Rs232ComPort = 2;
+/*#ifndef NDEBUG
+ sprintf (buffer,
+ "\nSerial port COM%ld found at 0x%lx\n",
+ ComPort,
+ (ULONG)PortBase);
+ HalDisplayString (buffer);
+#endif*/ /* NDEBUG */
+ }
+ else if (Rs232DoesComPortExist ((PUCHAR)BaseArray[1]))
+ {
+ Rs232PortBase = (PUCHAR)BaseArray[1];
+ Rs232ComPort = 1;
+/*#ifndef NDEBUG
+ sprintf (buffer,
+ "\nSerial port COM%ld found at 0x%lx\n",
+ ComPort,
+ (ULONG)PortBase);
+ HalDisplayString (buffer);
+#endif*/ /* NDEBUG */
+ }
+ else
+ {
+ /*sprintf (buffer,
+ "\nKernel Debugger: No COM port found!!!\n\n");
+ HalDisplayString (buffer);*/
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (Rs232DoesComPortExist ((PUCHAR)BaseArray[ComPort]))
+ {
+ Rs232PortBase = (PUCHAR)BaseArray[ComPort];
+ Rs232ComPort = ComPort;
+/*#ifndef NDEBUG
+ sprintf (buffer,
+ "\nSerial port COM%ld found at 0x%lx\n",
+ ComPort,
+ (ULONG)PortBase);
+ HalDisplayString (buffer);
+#endif*/ /* NDEBUG */
+ }
+ else
+ {
+ /*sprintf (buffer,
+ "\nKernel Debugger: No serial port found!!!\n\n");
+ HalDisplayString (buffer);*/
+ return FALSE;
+ }
+ }
+
+ PortInitialized = TRUE;
+ }
+
+ /*
+ * set baud rate and data format (8N1)
+ */
+
+ /* turn on DTR and RTS */
+ WRITE_PORT_UCHAR (SER_MCR(Rs232PortBase), SR_MCR_DTR | SR_MCR_RTS);
+
+ /* set DLAB */
+ lcr = READ_PORT_UCHAR (SER_LCR(Rs232PortBase)) | SR_LCR_DLAB;
+ WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase), lcr);
+
+ /* set baud rate */
+ divisor = 115200 / BaudRate;
+ WRITE_PORT_UCHAR (SER_DLL(Rs232PortBase), divisor & 0xff);
+ WRITE_PORT_UCHAR (SER_DLM(Rs232PortBase), (divisor >> 8) & 0xff);
+
+ /* reset DLAB and set 8N1 format */
+ WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase),
+ SR_LCR_CS8 | SR_LCR_ST1 | SR_LCR_PNO);
+
+ /* read junk out of the RBR */
+ lcr = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
+
+ /*
+ * set global info
+ */
+ //KdComPortInUse = (ULONG)PortBase;
+
+ /*
+ * print message to blue screen
+ */
+ /*sprintf (buffer,
+ "\nKernel Debugger: COM%ld (Port 0x%lx) BaudRate %ld\n\n",
+ ComPort,
+ (ULONG)PortBase,
+ BaudRate);
+
+ HalDisplayString (buffer);*/
+
+ return TRUE;
+}
+
+BOOL Rs232PortGetByte(PUCHAR ByteRecieved)
+{
+ if (PortInitialized == FALSE)
+ return FALSE;
+
+ if ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR))
+ {
+ *ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+BOOL Rs232PortPollByte(PUCHAR ByteRecieved)
+{
+ if (PortInitialized == FALSE)
+ return FALSE;
+
+ while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR) == 0)
+ ;
+
+ *ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
+
+ return TRUE;
+}
+
+VOID Rs232PortPutByte(UCHAR ByteToSend)
+{
+ if (PortInitialized == FALSE)
+ return;
+
+ while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_TBE) == 0)
+ ;
+
+ WRITE_PORT_UCHAR (SER_THR(Rs232PortBase), ByteToSend);
+}
--- /dev/null
+/*
+ * FreeLoader
+ * Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
+ * Copyright (C) 2001 Eric Kohl
+ * Copyright (C) 2001 Emanuele Aliberti
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __RS232_H
+#define __RS232_H
+
+BOOL Rs232PortInitialize(ULONG ComPort, ULONG BaudRate);
+BOOL Rs232PortGetByte(PUCHAR ByteRecieved);
+BOOL Rs232PortPollByte(PUCHAR ByteRecieved);
+VOID Rs232PortPutByte(UCHAR ByteToSend);
+
+
+#endif // defined __RS232_H
\ No newline at end of file