-#include "src/lib/16_dbg.h"\r
-//#include "src/16.h"\r
+/* Project 16 Source Code~\r
+ * Copyright (C) 2012-2022 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ *\r
+ * This file is part of Project 16.\r
+ *\r
+ * Project 16 is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Project 16 is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program. If not, see <http://www.gnu.org/licenses/>, or\r
+ * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
+ * Fifth Floor, Boston, MA 02110-1301 USA.\r
+ *\r
+ */\r
\r
+#include "src/lib/16_dbg.h"\r
\r
#ifdef __DEBUG__\r
+#ifdef __DEBUG_MM__\r
+boolean dbg_debugmm=0;\r
+#endif\r
#ifdef __DEBUG_PM__\r
boolean dbg_debugpm=0;\r
#endif\r
+#ifdef __DEBUG_CA__\r
+boolean dbg_debugca=0;\r
+#endif\r
#ifdef __DEBUG_InputMgr__\r
-boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0;\r
+boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0,dbg_nointest=0,dbg_joymousedelta=0;\r
#endif\r
+#ifdef __DEBUG_MAP__\r
+boolean dbg_maptext=0;\r
+byte *dbg_mapdata;\r
#endif\r
+#ifdef __DEBUG_RF__\r
+boolean dbg_pagenorendermap=0,dbg_pagedelayrendermap=0;\r
+#endif\r
+#ifdef __DEBUG_SPRI__\r
+boolean dbg_delayanimation=0;\r
+#endif\r
+#endif //debug\r
\r
\r
-// TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?"\r
-#ifdef DEBUGSERIAL\r
-# include <stdarg.h>\r
-# include <stdlib.h>\r
-# include <stdio.h>\r
+/*\r
+================\r
+=\r
+= ShapeTest\r
+=\r
+================\r
+*/\r
\r
-unsigned char _DEBUG_INITed = 0;\r
-struct info_8250 *_DEBUG_uart = NULL;\r
+#pragma warn -pia\r
+void ShapeTest_(global_game_variables_t *gvar)\r
+{\r
+extern word NumDigi;\r
+extern word _seg *DigiList;\r
+static char buf[10];\r
\r
-int _DEBUG_INIT() {\r
- if (!_DEBUG_INITed) {\r
- unsigned int i;\r
- uint16_t port;\r
+ boolean done;\r
+ ScanCode scan;\r
+ int i,j;\r
+// dword l; word k,x;\r
+ memptr addr;\r
+ PageListStruct far *page;\r
\r
- if (!init_8250()) return 0;\r
+// CenterWindow(20,16);\r
+// VW_UpdateScreen();\r
+ for (i = 0,done = false;!done;)\r
+ {\r
+// US_ClearWindow();\r
+// sound = -1;\r
\r
- // what does the BIOS say the serial ports are?\r
- probe_8250_bios_ports();\r
- for (i=0;i < bios_8250_ports;i++) {\r
- port = get_8250_bios_port(i);\r
- if (port == 0) continue;\r
- probe_8250(port);\r
- }\r
+ page = &(gvar->pm.PMPages[i]);\r
+// US_Print(" Page #");\r
+// US_PrintUnsigned(i);\r
+ printf(" Page #%u", i);\r
+//++ if (i < (gvar->pm.fi.PMSpriteStart))\r
+// US_Print(" (Wall)");\r
+//++ printf(" (Wall)");\r
+/* else if (i < (gvar->pm.fi.PMSoundStart))\r
+// US_Print(" (Sprite)");\r
+ printf(" (Sprite)");\r
+ else if (i == (gvar->pm.fi.ChunksInFile - 1))\r
+// US_Print(" (Sound Info)");\r
+ printf(" (Sound Info)");\r
+ else\r
+// US_Print(" (Sound)");\r
+ printf(" (Sound)");*/\r
+\r
+// US_Print("\n XMS: ");\r
+ printf("\n XMS: ");\r
+ if (page->xmsPage != -1)\r
+// US_PrintUnsigned(page->xmsPage);\r
+ printf("%u", page->xmsPage);\r
+ else\r
+// US_Print("No");\r
+ printf("No");\r
\r
- // what about the standard serial ports?\r
- for (i=0;i < (sizeof(standard_8250_ports)/sizeof(standard_8250_ports[0]));i++) {\r
- port = standard_8250_ports[i];\r
- if (port == 0) continue;\r
- probe_8250(port);\r
+// US_Print("\n Main: ");\r
+ if (page->mainPage != -1)\r
+// US_PrintUnsigned(page->mainPage);\r
+ printf("\n Main: %u", page->mainPage);\r
+ else if (page->emsPage != -1)\r
+ {\r
+// US_Print("EMS ");\r
+// US_PrintUnsigned(page->emsPage);\r
+ printf("EMS %u", page->emsPage);\r
}\r
+ else\r
+// US_Print("No");\r
+ printf("No");\r
\r
- // pick the first port, which is probably COM1\r
- if (base_8250_ports == 0) return 0; // FIXME: You know "base_8250_ports" is probably a bad variable name for the max entries in info_8250_port[]\r
- _DEBUG_uart = &info_8250_port[0];\r
- _DEBUG_INITed = 1;\r
-\r
- // init the COM port.\r
- // in DOSBox-X, the "log" mode will receive our text and print it into the log file\r
- // on real hardware, our text will likely go over a null modem cable to another PC running a serial terminal program like PuTTY or minicom.\r
- // if nothing is connected, then the bytes go off into the ether to get lost and life goes on.\r
- uart_8250_enable_interrupt(_DEBUG_uart,0); // disable interrupts\r
- uart_8250_set_FIFO(_DEBUG_uart,0x07); // enable FIFO (why not?), also clear xmit/recv FIFO buffers, set threshhold to 1 byte\r
- uart_8250_set_MCR(_DEBUG_uart,3); // RTS and DTS on\r
- uart_8250_set_line_control(_DEBUG_uart,UART_8250_LCR_8BIT | UART_8250_LCR_PARITY); // 8 bit 1 stop bit odd parity\r
- uart_8250_set_baudrate(_DEBUG_uart,uart_8250_baud_to_divisor(_DEBUG_uart,9600)); // 9600 baud\r
- }\r
+// US_Print("\n Last hit: ");\r
+// US_PrintUnsigned(page->lastHit);\r
+ printf("\n Last hit: %u", page->lastHit);\r
\r
- return _DEBUG_INITed;\r
-}\r
+// US_Print("\n Address: ");\r
+ printf("\n Address: ");\r
+ addr = PM_GetPageAddress(i, gvar);\r
+ sprintf(buf,"0x%04x",(word)addr);\r
+// US_Print(buf);\r
+ printf("%s", buf);\r
+\r
+ if (addr)\r
+ {\r
+/* if (i < PMSpriteStart)\r
+ {\r
+ //\r
+ // draw the wall\r
+ //\r
+ bufferofs += 32*SCREENWIDTH;\r
+ postx = 128;\r
+ postwidth = 1;\r
+ postsource = ((long)((unsigned)addr))<<16;\r
+ for (x=0;x<64;x++,postx++,postsource+=64)\r
+ {\r
+ wallheight[postx] = 256;\r
+ FarScalePost ();\r
+ }\r
+ bufferofs -= 32*SCREENWIDTH;\r
+ }\r
+ else if (i < PMSoundStart)\r
+ {\r
+ //\r
+ // draw the sprite\r
+ //\r
+ bufferofs += 32*SCREENWIDTH;\r
+ SimpleScaleShape (160, i-PMSpriteStart, 64);\r
+ bufferofs -= 32*SCREENWIDTH;\r
+ }\r
+ else if (i == ChunksInFile - 1)\r
+ {\r
+ US_Print("\n\n Number of sounds: ");\r
+ US_PrintUnsigned(NumDigi);\r
+ for (l = j = k = 0;j < NumDigi;j++)\r
+ {\r
+ l += DigiList[(j * 2) + 1];\r
+ k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
+ }\r
+ US_Print("\n Total bytes: ");\r
+ US_PrintUnsigned(l);\r
+ US_Print("\n Total pages: ");\r
+ US_PrintUnsigned(k);\r
+ }\r
+ else\r
+ {\r
+ byte far *dp = (byte far *)MK_FP(addr,0);\r
+ for (j = 0;j < NumDigi;j++)\r
+ {\r
+ k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
+ if\r
+ (\r
+ (i >= PMSoundStart + DigiList[j * 2])\r
+ && (i < PMSoundStart + DigiList[j * 2] + k)\r
+ )\r
+ break;\r
+ }\r
+ if (j < NumDigi)\r
+ {\r
+// sound = j;\r
+ US_Print("\n Sound #");\r
+ US_PrintUnsigned(j);\r
+ US_Print("\n Segment #");\r
+ US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);\r
+ }\r
+ for (j = 0;j < page->length;j += 32)\r
+ {\r
+ byte v = dp[j];\r
+ int v2 = (unsigned)v;\r
+ v2 -= 128;\r
+ v2 /= 4;\r
+ if (v2 < 0)\r
+ VWB_Vlin(WindowY + WindowH - 32 + v2,\r
+ WindowY + WindowH - 32,\r
+ WindowX + 8 + (j / 32),BLACK);\r
+ else\r
+ VWB_Vlin(WindowY + WindowH - 32,\r
+ WindowY + WindowH - 32 + v2,\r
+ WindowX + 8 + (j / 32),BLACK);\r
+ }\r
+ }*/\r
+ printf("\naddr ok\n");\r
+ }\r
\r
-void _DEBUG(const char *msg) {\r
- if (_DEBUG_uart != NULL) {\r
- char c;\r
+// VW_UpdateScreen();\r
\r
- while ((c=(*msg++)) != 0/*NUL*/) {\r
- while (!uart_8250_can_write(_DEBUG_uart)); // wait for the UART to indicate readiness for our output\r
- uart_8250_write(_DEBUG_uart,(uint8_t)c); // then write it\r
+ while (!(scan = gvar->in.inst->LastScan))\r
+ {}\r
+// SD_Poll();\r
+\r
+ IN_ClearKey(scan);\r
+ switch (scan)\r
+ {\r
+ case sc_LeftArrow:\r
+ if (i)\r
+ i--;\r
+ break;\r
+ case sc_RightArrow:\r
+ if (++i >= (gvar->pm.fi.ChunksInFile))\r
+ i--;\r
+ break;\r
+ case sc_W: // Walls\r
+ i = 0;\r
+ break;\r
+ case sc_S: // Sprites\r
+// i = (gvar->pm.fi.PMSpriteStart);\r
+ break;\r
+ case sc_D: // Digitized\r
+// i = (gvar->pm.fi.PMSoundStart);\r
+ break;\r
+ case sc_I: // Digitized info\r
+ i = (gvar->pm.fi.ChunksInFile - 1);\r
+ break;\r
+ case sc_L: // Load all pages\r
+ for (j = 0;j < (gvar->pm.fi.ChunksInFile);j++)\r
+ PM_GetPage(j, gvar);\r
+ break;\r
+ case sc_P:\r
+// if (sound != -1)\r
+// SD_PlayDigitized(sound);\r
+ break;\r
+ case sc_Escape:\r
+ done = true;\r
+ break;\r
+ case sc_Enter:\r
+ PM_GetPage(i, gvar);\r
+ break;\r
}\r
}\r
+ //SD_StopDigitized();\r
}\r
+#pragma warn +pia\r
+\r
+#ifdef __WATCOMC__\r
+#ifdef __DEBUG_VL__\r
+\r
+//===========================================================================\r
\r
-static char _DEBUGF_TMP[256];\r
+/*\r
+================\r
+=\r
+= ShowPalVarSync\r
+=\r
+================\r
+*/\r
\r
-void _DEBUGF(const char *fmt,...) {\r
- va_list va;\r
+//#define SHOWPALVARIMODQUAD ((spv.i)%QUADWH)\r
+#define SHOWPALVARIMOD ((spv.i)%TILEWH)\r
+#define SHOWPALVARIDIV ((spv.i)/TILEWH)\r
+#define SHOWPALVARIMODIFCOND if((!SHOWPALVARIMOD) && spv.i)\r
+#define SHOWPALVARIDIVIFCOND if((!SHOWPALVARIDIV) && spv.i)\r
+//<PAL_SIZE/3 && spv.i)\r
+#define SHOWPALVARPALSIZELIMIT 255\r
\r
- va_start(va,fmt);\r
- vsnprintf(_DEBUGF_TMP,sizeof(_DEBUGF_TMP),fmt,va);\r
- _DEBUG(_DEBUGF_TMP);\r
- va_end(va);\r
+spv_t ShowPalVarSync (spv_t *spv)\r
+{\r
+ spv_t result;\r
+ result = *spv;\r
+\r
+// if(result.paly<result.palq+TILEWH*8) result.paly+=result.mult;\r
+// if(result.palx<result.palq+TILEWH*12) result.palx+=result.mult;\r
+// modexClearRegion(&gvar->video.page[0], result.palx+TILEWH, result.paly+TILEWH, result.mult, result.mult, result.i);\r
+ return result;\r
}\r
-#endif\r
\r
+/*\r
+================\r
+=\r
+= ShowPalVal\r
+=\r
+================\r
+*/\r
+\r
+void ShowPalVal (global_game_variables_t *gvar)\r
+{\r
+ boolean done ,err;\r
+ ScanCode scan;\r
+ spv_t spv;\r
+ word ccolor = 3, xpos = gvar->video.page[0].dx, ypos = gvar->video.page[0].dy;\r
+\r
+ spv.mult=(QUADWH);\r
+ spv.palq=(spv.mult)*TILEWH;\r
+ spv.i = 0;\r
+\r
+// IN_UserInput(1, gvar);\r
+ modexpdump(0, gvar);\r
+\r
+ for (spv.oi = 1,done = false;!done;)\r
+ {\r
+ SHOWPALVARIMODIFCOND\r
+ {\r
+ if(err) printf("SHOWPALVARIMODIFCOND\n");\r
+ if(spv.i==SHOWPALVARPALSIZELIMIT) spv.paly=(TILEWH*8)+spv.mult*SHOWPALVARIDIV;\r
+ spv.palx=(TILEWH*12);\r
+ }else spv.palx=(TILEWH*12)+spv.mult*SHOWPALVARIMOD;\r
+ if(spv.i<SHOWPALVARPALSIZELIMIT) SHOWPALVARIDIVIFCOND\r
+ {\r
+ if(err) printf("SHOWPALVARIDIVIFCOND\n");\r
+ spv.paly=(TILEWH*8);\r
+ }else spv.paly=(TILEWH*8)+spv.mult*SHOWPALVARIDIV;\r
+\r
+ if((spv.palx<TILEWH*12 || spv.paly<TILEWH*8) && spv.i) err=true;\r
+ else err = false;\r
+ if(err){ printf("ERR "); printf("%ux%u %u\n", spv.palx, spv.paly, spv.i); }\r
+\r
+ if(spv.oi!=spv.i)\r
+ {\r
+ modexpdump(0, gvar);\r
+ modexClearRegion(&gvar->video.page[0], spv.palx+TILEWH, spv.paly+TILEWH, spv.mult, spv.mult, 5);\r
+ modexClearRegion(&gvar->video.page[0], spv.palx+TILEWH+1, spv.paly+TILEWH+1, spv.mult-2, spv.mult-2, spv.i);\r
+ spv.oi = spv.i;\r
+ }\r
+\r
+#define SHOWPALVARPRINT modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, ccolor, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
+ sprintf(global_temp_status_text, "%03u", spv.i); SHOWPALVARPRINT\r
+ sprintf(global_temp_status_text, "r %03u", gvar->video.palette[(spv.i*3)+0]/*>>2*/); SHOWPALVARPRINT\r
+ sprintf(global_temp_status_text, "g %03u", gvar->video.palette[(spv.i*3)+1]/*>>2*/); SHOWPALVARPRINT\r
+ sprintf(global_temp_status_text, "b %03u", gvar->video.palette[(spv.i*3)+2]/*>>2*/); SHOWPALVARPRINT\r
+ xpos = gvar->video.page[0].dx; ypos = gvar->video.page[0].dy;\r
+\r
+ while (!(scan = gvar->in.inst->LastScan))\r
+ {}\r
+\r
+ IN_ClearKey(scan);\r
+ switch (scan)\r
+ {\r
+ case sc_LeftArrow:\r
+ if (spv.i > 0)\r
+ {\r
+ spv.i--;\r
+ }\r
+ else\r
+ {\r
+ spv.palx=gvar->video.page[0].sw-spv.mult;\r
+ spv.paly=gvar->video.page[0].sh-spv.mult;\r
+ spv.i = SHOWPALVARPALSIZELIMIT;\r
+ }\r
+ break;\r
+ case sc_RightArrow:\r
+ if (spv.i < SHOWPALVARPALSIZELIMIT)\r
+ {\r
+ spv.i++;\r
+ }\r
+ else\r
+ {\r
+ spv.palx=TILEWH*12;\r
+ spv.paly=TILEWH*8;\r
+ spv.i = 0;\r
+ }\r
+ break;\r
+ case sc_UpArrow:\r
+ if (spv.i > 0)\r
+ {\r
+ spv.i-=16;\r
+ }\r
+ else\r
+ {\r
+ spv.palx=gvar->video.page[0].sw-spv.mult;\r
+ spv.paly=gvar->video.page[0].sh-spv.mult;\r
+ spv.i = SHOWPALVARPALSIZELIMIT;\r
+ }\r
+ break;\r
+ case sc_DownArrow:\r
+ if (spv.i < SHOWPALVARPALSIZELIMIT)\r
+ {\r
+ spv.i+=16;\r
+ }\r
+ else\r
+ {\r
+ spv.palx=TILEWH*12;\r
+ spv.paly=TILEWH*8;\r
+ spv.i = 0;\r
+ }\r
+ break;\r
+ case sc_W: // Walls\r
+ spv.i = 0;\r
+ break;\r
+ case sc_Escape:\r
+ done = true;\r
+ break;\r
+ }\r
+ }\r
+// IN_UserInput(1, gvar);\r
+}\r
+#endif //debug vl\r
+#endif //watcomc\r