summaryrefslogtreecommitdiffstats
path: root/private/mvdm/v86/scaffold/i386/x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/mvdm/v86/scaffold/i386/x86.h')
-rw-r--r--private/mvdm/v86/scaffold/i386/x86.h418
1 files changed, 418 insertions, 0 deletions
diff --git a/private/mvdm/v86/scaffold/i386/x86.h b/private/mvdm/v86/scaffold/i386/x86.h
new file mode 100644
index 000000000..eb4772e82
--- /dev/null
+++ b/private/mvdm/v86/scaffold/i386/x86.h
@@ -0,0 +1,418 @@
+//
+// This is temporary code, and should be removed when Insignia supplies rom
+// support
+//
+
+/* x86 v1.0
+ *
+ * X86.H
+ * Constants, macros, and common types
+ * for the x86 emulator and related components
+ *
+ * History
+ * Created 19-Oct-90 by Jeff Parsons
+ * 17-Apr-91 by Dave Hastings trimmed for use in softpc (temprorary)
+ *
+ * COPYRIGHT NOTICE
+ * This source file may not be distributed, modified or incorporated into
+ * another product without prior approval from the author, Jeff Parsons.
+ * This file may be copied to designated servers and machines authorized to
+ * access those servers, but that does not imply any form of approval.
+ */
+
+#ifdef DOS
+#define SIGNALS
+#endif
+
+#ifdef OS2_16
+#define OS2
+#define SIGNALS
+#endif
+
+#ifdef OS2_32
+#define OS2
+#define FLAT_32
+#endif
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <malloc.h>
+#include <process.h>
+
+#ifdef WIN_16
+#define WIN
+#define API16
+#endif
+
+#ifdef WIN_32
+#ifndef WIN
+#define WIN
+#endif
+#define FLAT_32
+#define TRUE_IF_WIN32 1
+#define FIXHWND(h) ((HWND)((INT)(h) & 0x00ffffff))
+#include <nt.h>
+#include <ntrtl.h>
+#include <nturtl.h>
+#else
+#define TRUE_IF_WIN32 0
+#define FIXHWND(h) (h)
+#endif
+
+#ifdef FLAT_32
+#ifndef i386
+#define ALIGN_32
+#else
+#define NOALIGN_32
+#endif
+#endif
+
+#ifdef WIN
+#define _WINDOWS
+#include <windows.h>
+#endif
+
+#ifdef SIGNALS
+#include <conio.h>
+#include <signal.h>
+#endif
+
+#ifdef OS2_32
+#include <excpt.h>
+#define XCPT_SIGNAL 0xC0010003
+#endif
+#define SIGHIT(flChk) ((iSigCheck++ & 0x7FF)?(flSignals & (flChk)):(kbhit(),(flSignals & (flChk))))
+
+#ifndef CONST
+#define CONST const
+#endif
+#ifndef CDECL
+#define CDECL _cdecl
+#endif
+#ifndef PASCAL
+#define PASCAL
+#endif
+
+#ifdef FLAT_32
+#ifndef WIN
+#define FAR
+#endif
+#define HUGE
+#define HALLOC(n,s) malloc((n)*(s))
+#define HLOCK(h) h
+#define HUNLOCK(h) 0
+#define HFREE(h) free(h)
+#else
+#ifndef WIN
+#define FAR _far
+#define HUGE _huge
+#define HALLOC(n,s) halloc(n,s)
+#define HLOCK(h) h
+#define HUNLOCK(h) 0
+#define HFREE(h) hfree(h)
+#else
+#define HUGE _huge
+#define HALLOC(n,s) GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,(n)*(s))
+#define HLOCK(h) (HPVOID)GlobalLock(h)
+#define HUNLOCK(h) GlobalUnlock(h)
+#define HFREE(h) GlobalFree(h)
+#endif
+#endif
+
+#define BYTEOF(i,n) (((PBYTE)&(i))[n])
+#define LOB(i) BYTEOF(i,0)
+#define HIB(i) BYTEOF(i,1)
+#define WORDOF(i,n) (((PWORD)&(i))[n])
+#define LOW(l) WORDOF(l,0)
+#define HIW(l) WORDOF(l,1)
+#define INTOF(i,n) (((PINT)&(i))[n])
+#define UINTOF(i,n) (((PUINT)&(i))[n])
+#ifndef WIN
+#define LOWORD(l) ((WORD)(l))
+#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
+#define LOBYTE(w) ((BYTE)(w))
+#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
+#endif
+#ifndef MAKEWORD
+#define MAKEWORD(l,h) ((WORD)((BYTE)(l)|((BYTE)(h)<<8)))
+#endif
+#define MAKEDWORD(l0,h0,l1,h1) ((DWORD)MAKEWORD(l0,h0)|((DWORD)MAKEWORD(l1,h1)<<16))
+#define GETBYTE(p) *((PBYTE)p)++
+#define GETBYTEPTR(p) ((PBYTE)p)++
+#define GETWORDPTR(pb) ((PWORD)pb)++
+#define GETDWORDPTR(pb) ((PDWORD)pb)++
+#ifndef ALIGN_32
+#define GETWORD(pb) (*((PWORD)pb)++)
+#define GETDWORD(pb) (*((PDWORD)pb)++)
+#define FETCHWORD(s) ((WORD)(s))
+#define FETCHDWORD(s) ((DWORD)(s))
+#define STOREWORD(d,s) (WORD)d=(WORD)s
+#define STOREDWORD(d,s) (DWORD)d=(DWORD)s
+#else
+#define GETWORD(pb) (pb+=2,MAKEWORD(*(pb-2),*(pb-1)))
+#define GETDWORD(pb) (pb+=4,MAKEDWORD(*(pb-4),*(pb-3),*(pb-2),*(pb-1)))
+#define FETCHWORD(s) MAKEWORD(LOB(s),HIB(s))
+#define FETCHDWORD(s) MAKEDWORD(BYTEOF(s,0),BYTEOF(s,1),BYTEOF(s,2),BYTEOF(s,3))
+#define STOREWORD(d,s) {BYTEOF(d,0)=LOBYTE(s);BYTEOF(d,1)=HIBYTE(s);}
+#define STOREDWORD(d,s) {BYTEOF(d,0)=LOBYTE(LOWORD(s));BYTEOF(d,1)=HIBYTE(LOWORD(s));BYTEOF(d,2)=LOBYTE(HIWORD(s));BYTEOF(d,3)=HIBYTE(HIWORD(s));}
+#endif
+#define SWAP(x,y) {INT t; t=y; y=x; x=t;}
+#define SWAPS(x,y) {SHORT t; t=y; y=x; x=t;}
+#define SWAPL(x,y) {LONG t; t=y; y=x; x=t;}
+#define SWAPBYTE(x,y) {BYTE t; t=y; y=x; x=t;}
+#define SWAPWORD(x,y) {WORD t; t=FETCHWORD(y); STOREWORD(y,FETCHWORD(x)); STOREWORD(x,t);}
+#define SWAPDWORD(x,y) {DWORD t; t=FETCHDWORD(y); STOREDWORD(y,FETCHDWORD(x)); STOREDWORD(x,t);}
+#define NUMEL(a) ((sizeof a)/(sizeof a[0]))
+
+#define SXBYTE(i) ((LONG)(SBYTE)(i))
+#define SXWORD(i) ((LONG)(SHORT)(i))
+#define SXSHORT(i) ((LONG)(SHORT)(i))
+#define ZXBYTE(i) ((ULONG)(BYTE)(i))
+#define ZXWORD(i) ((ULONG)(USHORT)(i))
+#define ZXSHORT(i) ((ULONG)(USHORT)(i))
+
+#define _Z2(m) ((m)&1?0:(m)&2?1:2)
+#define _Z4(m) ((m)&3?_Z2(m):_Z2((m)>>2)+2)
+#define _Z8(m) ((m)&15?_Z4(m):_Z4((m)>>4)+4)
+#define _Z16(m) ((m)&255?_Z8(m):_Z8((m)>>8)+8)
+#define _Z32(m) ((m)&65535?_Z16(m):_Z16((m)>>16)+16)
+#define SHIFTLEFT(i,m) (((i)<<_Z32(m))&(m))
+#define SHIFTRIGHT(i,m) (((i)&(m))>>_Z32(m))
+
+#define OFFSETOF(t,f) ((INT)&(((t *)0)->f))
+
+
+/* Universal constants
+ */
+#define K 1024L
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+#ifndef NULL
+#define NULL 0
+#endif
+#define UNDEFINED -1
+
+#define CTRL_A 1 // used by gets to repeat last line
+#define CTRL_C 3 // break in debug window
+#define CTRL_Q 17 // flow control
+#define CTRL_S 19 // flow control
+#define BELL 7 //
+#define BS 8 // backspace
+#define TAB 9 //
+#define LF 10 // linefeed
+#define CR 13 // return
+#define ESCAPE 27 //
+
+
+/* Program options
+ */
+#define OPT_FONT 0x0004 // use small OEM font if available (/s)
+#define OPT_DOUBLE 0x0020 // use 50-line debug window w/small font (/50)
+#define OPT_CAPS 0x0002 // map ctrl keys to caps-lock (/c)
+#define OPT_TERMINAL 0x0010 // redirect all window output to terminal (/t)
+#define OPT_FLUSH 0x0100 // flush prefetch after every jump (/f)
+#define OPT_NOXLATE 0x0200 // disable built-in translations (/n)
+#define OPT_DEBUG 0x0008 // shadow all log output on debug terminal (/d)
+#define OPT_GO 0x0001 // do an initial "go" (/g)
+
+
+/* Signal flags
+ */
+#define SIGNAL_BREAK 0x0001 // set whenever break has occurred
+#define SIGNAL_UNWIND 0x0002 // set whenever unwind has occurred
+#define SIGNAL_REBOOT 0x0004 // set whenever reboot has occurred
+#define SIGNAL_RUN 0x0008 // set whenever emulator is "running"
+#define SIGNAL_TRACE 0x0010 // set whenever debugger tracing
+#define SIGNAL_BRKPT 0x0020 // set whenever debugger breakpoints enabled
+#define SIGNAL_SSTEP 0x0040 // set whenever emulator single-step on
+
+#undef SIG_IGN // fix broken definition in (old) signal.h
+#define SIG_IGN (VOID (CDECL *)())1
+
+
+/* Exec flags (for HostInput/GuestInput)
+ */
+#define EXEC_INPUT 0x0000 // wait for input
+#define EXEC_GO 0x0001 // execute immediately
+#define EXEC_FREEZE 0x0002 // execution frozen (guest only)
+
+
+/* Standard types
+ */
+#ifndef WIN
+typedef void VOID;
+typedef unsigned char BYTE;
+typedef unsigned short WORD; // confusing - use where 16-bit req. only
+typedef unsigned long DWORD; // confusing - use where 32-bit req. only
+typedef long LONG; // use where 32-bit req. only
+typedef int BOOL;
+#endif
+typedef char CHAR;
+typedef signed char SBYTE;
+typedef short SHORT; // use where 16-bit req. only
+typedef unsigned short USHORT; // use where 16-bit req. only
+typedef int INT; // ints preferred
+typedef unsigned int UINT; // ints preferred
+typedef unsigned long ULONG; // use where 32-bit req. only
+
+#ifndef WIN
+typedef BYTE *PBYTE; // native pointers
+typedef WORD *PWORD;
+typedef DWORD *PDWORD;
+typedef INT *PINT;
+typedef LONG *PLONG;
+typedef CHAR *PSTR;
+#endif
+typedef PBYTE *PPBYTE;
+typedef PWORD *PPWORD;
+typedef PDWORD *PPDWORD;
+typedef CHAR SZ[];
+typedef VOID *PVOID;
+typedef CHAR *PCHAR;
+typedef SHORT *PSHORT;
+typedef USHORT *PUSHORT;
+typedef PUSHORT *PPUSHORT;
+typedef UINT *PUINT;
+typedef ULONG *PULONG;
+typedef PULONG *PPULONG;
+typedef BOOL *PBOOL;
+typedef CHAR *PSZ;
+typedef PSZ *PPSZ;
+
+typedef VOID FAR *FPVOID; // "far" (or "long" in Windows) pointers
+typedef CHAR FAR *FPCHAR;
+typedef BYTE FAR *FPBYTE;
+typedef SHORT FAR *FPSHORT;
+typedef USHORT FAR *FPUSHORT;
+typedef LONG FAR *FPLONG;
+typedef ULONG FAR *FPULONG;
+typedef CHAR FAR *FPSTR;
+typedef CHAR FAR *FPSZ;
+
+typedef VOID HUGE *HPVOID; // "huge" pointers
+typedef CHAR HUGE *HPCHAR;
+typedef BYTE HUGE *HPBYTE;
+typedef SHORT HUGE *HPSHORT;
+typedef USHORT HUGE *HPUSHORT;
+typedef LONG HUGE *HPLONG;
+typedef ULONG HUGE *HPULONG;
+typedef CHAR HUGE *HPSTR;
+typedef CHAR HUGE *HPSZ;
+
+#ifndef WIN
+typedef HPVOID HANDLE;
+#endif
+
+#ifdef WIN
+typedef INT (FAR PASCAL *INTPROC)(HWND, UINT, UINT, LONG);
+#endif
+#ifdef WIN_16
+typedef LONG (FAR PASCAL *WNDPROC)(HWND, WORD, UINT, LONG);
+#endif
+
+
+/* Global data
+ */
+extern FILE *hfLog;
+extern INT flOptions; // command-line options (see OPT_*)
+extern INT flSignals; // signal flags (see SIGNAL_*)
+extern INT iSigCheck; // counter indicating when to make next check
+extern INT iSigLevel; // counter indicating whether to take default action
+extern INT iLogLevel; // logging level; 0 implies none
+extern BOOL fReinit; // set once first initialization has completed
+
+
+/* String macros
+ */
+#define STRSKIP(psz,sz) psz += strspn(psz, sz)
+#define STRSKIPTO(psz,sz) psz += strcspn(psz, sz)
+#define STRSKIPNEXT(psz,sz) psz += strspn(psz+=strcspn(psz, sz), sz)
+
+#define ATOI(psz) (INT)szTOul(psz, 10, -1)
+
+
+/* Logging macros
+ */
+#define IFLOG(l) if (l==iLogLevel && (iLogLevel&1) || l<=iLogLevel && !(iLogLevel&1))
+
+#define OPENLOG() (hfLog?hfLog:(hfLog=fopen("log", "w")))
+#define APPENDLOG() (hfLog?hfLog:(hfLog=fopen("log", "a")))
+#define CLOSELOG() if (hfLog) {fclose(hfLog); hfLog=NULL;}
+
+#ifdef NOLOG
+#define LOG(l,args)
+#else
+#define LOG(l,args) IFLOG(l) logprintf args; else
+#endif
+
+
+/* Debugging macros
+ */
+#define MODNAME(module) static char szModule[] = __FILE__
+#define X86ERROR() terminate(ERR_ASSERT, szModule, __LINE__)
+
+#ifdef DEBUG
+
+#define STATIC
+#define INT3() _asm int 3
+#define IFDEBUG(f) if (f)
+#define ELSEDEBUG else
+#define LOGDEBUG(l,args) LOG(l,args)
+#define X86ASSERT(exp) if (!(exp)) X86ERROR()
+
+#else
+
+#define STATIC static
+#define INT3()
+#define IFDEBUG(f)
+#define ELSEDEBUG
+#define LOGDEBUG(l,args)
+#define X86ASSERT(exp)
+
+#endif // DEBUG
+
+
+/* Other common local include files
+ */
+#ifdef X86
+#include "xerr.h"
+#include "xlib.h"
+#endif
+
+
+/* Windows goop
+ */
+#define SZ_APP "x86"
+#define SZ_TITLE "x86 emulator v0.17"
+#define SZ_AUTHOR "by Jeff Parsons, (C) 1991"
+#define SZ_PCTITLE "x86 pc"
+
+#define IDM_DBBRK 100
+#define IDM_ABOUT 101
+
+/* Standard color definitions
+ */
+#define CLR_BLACK 0x00000000
+#define CLR_RED 0x007F0000
+#define CLR_GREEN 0x00007F00
+#define CLR_BROWN 0x007F7F00
+#define CLR_BLUE 0x0000007F
+#define CLR_MAGENTA 0x007F007F
+#define CLR_CYAN 0x00007F7F
+#define CLR_LT_GRAY 0x00BFBFBF
+
+#define CLR_DK_GRAY 0x007F7F7F
+#define CLR_BR_RED 0x00FF0000
+#define CLR_BR_GREEN 0x0000FF00
+#define CLR_YELLOW 0x00FFFF00
+#define CLR_BR_BLUE 0x000000FF
+#define CLR_BR_MAGENTA 0x00FF00FF
+#define CLR_BR_CYAN 0x0000FFFF
+#define CLR_WHITE 0x00FFFFFF
+
+
+extern HANDLE hHostInstance;