summaryrefslogtreecommitdiff
path: root/kernel/inc
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2016-06-01 19:37:09 -0700
committerScott Gasch <[email protected]>2016-06-01 19:37:09 -0700
commit0a41dae5f406d498b5c9ab1542cb5660e0d982f6 (patch)
tree67ade9fe31cfd0458cc485e95550f7aaf14abdd1 /kernel/inc
Initial checkin of toy OS project.HEADmaster
Diffstat (limited to 'kernel/inc')
-rw-r--r--kernel/inc/constants.h50
-rw-r--r--kernel/inc/hal.h104
-rw-r--r--kernel/inc/kernel.h43
-rw-r--r--kernel/inc/macros.h43
-rw-r--r--kernel/inc/rtl.h33
-rw-r--r--kernel/inc/types.h80
6 files changed, 353 insertions, 0 deletions
diff --git a/kernel/inc/constants.h b/kernel/inc/constants.h
new file mode 100644
index 0000000..13f47bd
--- /dev/null
+++ b/kernel/inc/constants.h
@@ -0,0 +1,50 @@
+//+----------------------------------------------------------------------------
+//
+// File: constants.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Copyright (C) 2003
+//
+// Created: sgasch 10 Oct 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _CONSTANTS_H_
+#define _CONSTANTS_H_
+
+//
+// Constants
+//
+#define YES (1)
+#define NO (0)
+#ifndef TRUE
+#define TRUE (YES)
+#endif
+#ifndef FALSE
+#define FALSE (NO)
+#endif
+
+#define NULL ((void *)0)
+
+#define ASCII_ESC (0x1B)
+#define ASCII_BS (0x08)
+
+#define USER_PRIVILEGE (3)
+#define KERNEL_PRIVILEGE (0)
+
+//
+// Device driver constants
+//
+#define DEVICE_DRIVER_INITIALIZATION (1)
+#define DEVICE_IO_CONTROL (2)
+#define DEVICE_READ (3)
+#define DEVICE_WRITE (4)
+#define DEVICE_DETATCH (6)
+#define DEVICE_DRIVER_SHUTDOWN (7)
+
+#endif /* _CONSTANTS_H_ */
+
+
diff --git a/kernel/inc/hal.h b/kernel/inc/hal.h
new file mode 100644
index 0000000..9a52a4e
--- /dev/null
+++ b/kernel/inc/hal.h
@@ -0,0 +1,104 @@
+//+----------------------------------------------------------------------------
+//
+// File: hal.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Created: sgasch 5 Jul 2003
+//
+//+----------------------------------------------------------------------------
+#ifndef HAL_H
+#define HAL_H
+
+//
+// Video/CRT driver
+//
+#define BLACK (0)
+#define BLUE (1)
+#define GREEN (2)
+#define CYAN (3)
+#define RED (4)
+#define MAGENTA (5)
+#define YELLOW (6)
+#define GRAY (7)
+#define HIGH (8)
+#define WHITE (HIGH | GRAY)
+
+void
+HalVideoSetCurrentColorAttribute(BYTE bFg, BYTE bBg);
+
+void
+HalVideoClearScreen(void);
+
+void
+HalVideoGetCursorPosition(BYTE *pbLine, BYTE *pbCol);
+
+void
+HalVideoSetCursorPosition(BYTE bLine, BYTE bCol);
+
+void
+HalVideoPutNullTerminatedString(BYTE *s);
+
+void
+HalVideoInitialize(BIOS_HARDWARE_BLOCK *phw);
+
+void
+HalVideoPrint(CHAR *szFormat, ...);
+
+//
+// Keyboard driver
+//
+#define KB_IRQ (1)
+typedef WORD KEYCODE;
+
+typedef struct _INTERRUPT_STATE
+{
+ // The register contents at the time of the exception.
+ // We save these explicitly.
+ ULONG gs;
+ ULONG fs;
+ ULONG es;
+ ULONG ds;
+ ULONG ebp;
+ ULONG edi;
+ ULONG esi;
+ ULONG edx;
+ ULONG ecx;
+ ULONG ebx;
+ ULONG eax;
+
+ // We explicitly push the interrupt number.
+ // This makes it easy for the handler function to determine
+ // which interrupt occurred.
+ ULONG uIntNum;
+
+ // This may be pushed by the processor; if not, we push
+ // a dummy error code, so the stack layout is the same
+ // for every type of interrupt.
+ ULONG uErrorCode;
+
+ // These are always pushed on the stack by the processor.
+ ULONG eip;
+ ULONG cs;
+ ULONG eflags;
+}
+INTERRUPT_STATE;
+
+typedef void (*INTERRUPT_HANDLER)(INTERRUPT_STATE *pState);
+
+void HalInitializeInterrupts(void);
+void HalInterruptInstallHandler(ULONG uIntNum, INTERRUPT_HANDLER p);
+void HalInterruptDisable();
+void HalInterruptEnable();
+
+void HalIoDelay();
+
+void HalTimerInt(INTERRUPT_STATE *p);
+void HalKeyboardInt(INTERRUPT_STATE *p);
+
+extern UINT64 g_ullTimeStampCounter;
+ULONG HalReadTimestampCounter(void);
+
+#endif // HAL_H
diff --git a/kernel/inc/kernel.h b/kernel/inc/kernel.h
new file mode 100644
index 0000000..7172401
--- /dev/null
+++ b/kernel/inc/kernel.h
@@ -0,0 +1,43 @@
+//+----------------------------------------------------------------------------
+//
+// File: kernel.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Created: sgasch 5 Jul 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _KERNEL_H_
+#define _KERNEL_H_
+
+#include "types.h"
+#include "constants.h"
+#include "macros.h"
+
+//
+// Shared data structures
+//
+typedef struct _BIOS_HARDWARE_BLOCK
+{
+ BYTE bDisplayType;
+ BYTE bFontSize;
+ WORD wEquipmentBitvector;
+ WORD wMemorySize;
+ WORD wSystemClock;
+}
+BIOS_HARDWARE_BLOCK;
+
+// Write a byte to an I/O port.
+void
+out(WORD port, BYTE value);
+
+BYTE
+in(WORD port);
+
+void
+iodelay(void);
+
+#endif /* _KERNEL_H_ */
diff --git a/kernel/inc/macros.h b/kernel/inc/macros.h
new file mode 100644
index 0000000..21340ad
--- /dev/null
+++ b/kernel/inc/macros.h
@@ -0,0 +1,43 @@
+//+----------------------------------------------------------------------------
+//
+// File: macros.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Copyright (C) 2003
+//
+// Created: sgasch 10 Oct 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _MACROS_H_
+#define _MACROS_H_
+
+//
+// Macros
+//
+#define ARRAY_LENGTH(a) (sizeof((a)) / sizeof((a)[0]))
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+
+#if 1
+void _assert(CHAR *, CHAR *, ULONG);
+void VideoPrint(CHAR *, ...);
+#define ASSERT(x) if (x) \
+ { ; } \
+ else \
+ { _assert(__FUNCTION__ , \
+ __FILE__ , \
+ __LINE__); }
+#define TRACE(f, ...) VideoPrint("%s:%u> " ##f , __FUNCTION__ , \
+ __LINE__ , ##__VA_ARGS__)
+#else
+#define ASSERT(x) ;
+#define TRACE(f, ...) ;
+#endif // DEBUG
+
+#define CURRENT_STAMP(a) asm volatile("rdtsc" : "=a"(((unsigned int *)(a))[0]), "=d"(((unsigned int *)a)[1]))
+
+#endif /* _MACROS_H_ */
diff --git a/kernel/inc/rtl.h b/kernel/inc/rtl.h
new file mode 100644
index 0000000..3aff129
--- /dev/null
+++ b/kernel/inc/rtl.h
@@ -0,0 +1,33 @@
+//+----------------------------------------------------------------------------
+//
+// File: rtl.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Copyright (C) 2003 Scott Gasch
+//
+// Created: sgasch 5 Jul 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _RTL_H_
+#define _RTL_H_
+
+void
+RtlSetMemory(void *pStart,
+ BYTE bFill,
+ ULONG uLength);
+
+CHAR *
+RtlIntToAscii(INT i,
+ CHAR *buf,
+ ULONG uBufLen,
+ ULONG uBase);
+
+#endif /* _RTL_H_ */
+
+
+
+
diff --git a/kernel/inc/types.h b/kernel/inc/types.h
new file mode 100644
index 0000000..b3379e5
--- /dev/null
+++ b/kernel/inc/types.h
@@ -0,0 +1,80 @@
+//+----------------------------------------------------------------------------
+//
+// File: types.h
+//
+// Module:
+//
+// Synopsis:
+//
+// Created: sgasch 10 Oct 2003
+//
+//+----------------------------------------------------------------------------
+
+#ifndef _TYPES_H_
+#define _TYPES_H_
+
+//
+// Datatype wrappers
+//
+#define MIN_CHAR (0x80)
+#define MAX_CHAR (0x7f)
+typedef char CHAR;
+
+#define MIN_BYTE (0x00)
+#define MAX_BYTE (0xff)
+typedef unsigned char BYTE;
+
+#define MIN_UCHAR (0x00)
+#define MAX_UCHAR (0xff)
+typedef unsigned char UCHAR;
+
+#define MIN_SHORT (0x8000)
+#define MAX_SHORT (0x7fff)
+typedef signed short SHORT;
+
+#define MIN_USHORT (0x0000)
+#define MAX_USHORT (0xffff)
+typedef unsigned short USHORT;
+
+#define MIN_WORD (0x0000)
+#define MAX_WORD (0xffff)
+typedef unsigned short WORD;
+
+#define MIN_INT (0x80000000)
+#define MAX_INT (0x7fffffff)
+typedef signed int INT;
+
+#define MIN_UINT (0x00000000)
+#define MAX_UINT (0xffffffff)
+typedef unsigned int UINT;
+
+#define MIN_LONG (0x80000000)
+#define MAX_LONG (0x7fffffff)
+typedef signed int LONG;
+
+#define MIN_ULONG (0x00000000)
+#define MAX_ULONG (0xffffffff)
+typedef unsigned long ULONG;
+
+#define MIN_INT64 (0x8000000000000000)
+#define MAX_INT64 (0x7fffffffffffffff)
+typedef signed long long INT64;
+
+#define MIN_UINT64 (0x0000000000000000)
+#define MAX_UINT64 (0xffffffffffffffff)
+typedef unsigned long long UINT64;
+
+#define MIN_BITV MIN_UINT
+#define MAX_BITV MAX_UINT
+typedef unsigned int BITV;
+
+#define MIN_BOOL MIN_UCHAR
+#define MAX_BOOL MAX_UCHAR
+typedef unsigned char BOOL;
+
+typedef unsigned int STATUS;
+#define STATUS_SUCCESS (0)
+
+#define SIZE_T ULONG
+
+#endif /* _TYPES_H_ */