/* Project 16 Source Code~\r
- * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ * Copyright (C) 2012-2023 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
*\r
* This file is part of Project 16.\r
*\r
*\r
*/\r
\r
-#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__)\r
-#error Invalid memory model for compiling project 16\r
-#endif\r
+//#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__)\r
+//#error Invalid memory model for compiling project 16\r
+//#endif\r
\r
#if !defined(__i86__) && defined(__i386__)\r
#error i8088 only\r
#include <dos.h>\r
#include <stdio.h>\r
#include <stdlib.h>\r
-#include <conio.h> // just for wait\r
+#include <conio.h> // this is where Open Watcom hides the outp() etc. functions // just for wait\r
#include <time.h> // just for wait\r
#include <ctype.h>\r
#include <fcntl.h>\r
#include "src/lib/16_t.h"\r
#include "src/lib/16_tdef.h"\r
#include "src/lib/nyan/kitten.h"\r
-#include "src/lib/16_dbg.h"\r
\r
#define VERSION __DATE__ " " __TIME__\r
\r
//#define OLD16_VL\r
\r
#define nil ((void *)0)\r
-#ifdef __BORLANDC__\r
-//#define _FCORELEFT 0x90000UL-16UL\r
-#define _FCORELEFT HC_farcoreleft()\r
-#define sprite\r
-#endif\r
+\r
#ifdef __WATCOMC__\r
-//#define _FCORELEFT 0x90000UL+16UL\r
-#define _FCORELEFT HC_farcoreleft()\r
-/*static union REGS CPURegs;\r
+//----#define _FCORELEFT 0x90000UL+16UL\r
+extern union REGS CPURegs;\r
\r
#define _AX CPURegs.x.ax\r
#define _BX CPURegs.x.bx\r
#define _DX CPURegs.x.dx\r
\r
#define _SI CPURegs.x.si\r
+#define _DI CPURegs.x.di\r
\r
#define _AH CPURegs.h.ah\r
#define _AL CPURegs.h.al\r
#define _DH CPURegs.h.dh\r
#define _DL CPURegs.h.dl\r
\r
-#define geninterrupt(n) int86(n,&CPURegs,&CPURegs);*/\r
-#define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))\r
-#define peekw(segm,ofs) (*(word far*)MK_FP((segm),(ofs)))\r
-#define pokeb(segm,ofs,value) (peekb((segm),(ofs)) = (byte)(value))\r
-#define pokew(segm,ofs,value) (peekw((segm),(ofs)) = (word)(value))\r
+#define _CFLAG CPURegs.x.cflag\r
+\r
+#define geninterrupt(n) int86(n,&CPURegs,&CPURegs);\r
+\r
\r
typedef union REGPACK regs_t;\r
#endif\r
\r
-#define INPUT_STATUS_1 0x03da\r
-\r
-/* local function */\r
+// local function //\r
long int filesize(FILE *fp);\r
+void clrstdin();\r
char *remove_ext(char* mystr, char dot, char sep);\r
void rotateR(byte arr[], byte n);\r
void rotateL(byte arr[], byte n);\r
int US_CheckParm(char *parm,char **strings);\r
byte dirchar(byte in);\r
void print_mem(void const *vp, size_t n);\r
+void hres (void);\r
+void regidump();\r
+\r
+//from https://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format\r
+//printf("Leading text "BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(byte));\r
+//For multi-byte types\r
+//printf("m: "BYTE_TO_BINARY_PATTERN" "BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(m>>8), BYTE_TO_BINARY(m));\r
+#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"\r
+#define BYTE_TO_BINARY(byte) \\r
+ (byte & 0x80 ? '1' : '0'), \\r
+ (byte & 0x40 ? '1' : '0'), \\r
+ (byte & 0x20 ? '1' : '0'), \\r
+ (byte & 0x10 ? '1' : '0'), \\r
+ (byte & 0x08 ? '1' : '0'), \\r
+ (byte & 0x04 ? '1' : '0'), \\r
+ (byte & 0x02 ? '1' : '0'), \\r
+ (byte & 0x01 ? '1' : '0')\r
+\r
+#define WORD_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"\r
+#define WORD_TO_BINARY(word) \\r
+ (word & 0x8000 ? '1' : '0'), \\r
+ (word & 0x4000 ? '1' : '0'), \\r
+ (word & 0x2000 ? '1' : '0'), \\r
+ (word & 0x1000 ? '1' : '0'), \\r
+ (word & 0x0800 ? '1' : '0'), \\r
+ (word & 0x0400 ? '1' : '0'), \\r
+ (word & 0x0200 ? '1' : '0'), \\r
+ (word & 0x0100 ? '1' : '0'), \\r
+ (word & 0x0080 ? '1' : '0'), \\r
+ (word & 0x0040 ? '1' : '0'), \\r
+ (word & 0x0020 ? '1' : '0'), \\r
+ (word & 0x0010 ? '1' : '0'), \\r
+ (word & 0x0008 ? '1' : '0'), \\r
+ (word & 0x0004 ? '1' : '0'), \\r
+ (word & 0x0002 ? '1' : '0'), \\r
+ (word & 0x0001 ? '1' : '0')\r
+\r
+#define NIBBLE_TO_BINARY_PATTERN "%c%c%c%c"\r
+#define NIBBLE_TO_BINARY(nibble) \\r
+ (nibble & 0x08 ? '1' : '0'), \\r
+ (nibble & 0x04 ? '1' : '0'), \\r
+ (nibble & 0x02 ? '1' : '0'), \\r
+ (nibble & 0x01 ? '1' : '0')\r
+\r
+#define BOOLEAN_TO_BINARY_PATTERN "%c"\r
+#define BOOLEAN_TO_BINARY(boolean) \\r
+ (boolean & 0x01 ? '1' : '0')\r
\r
#define PRINT_OPAQUE_STRUCT(p) print_mem((p), sizeof(*(p)))\r
\r