1 #include "src/lib/16_dbg.h"
\r
5 boolean dbg_debugmm=0;
\r
8 boolean dbg_debugpm=0;
\r
11 boolean dbg_debugca=0;
\r
13 #ifdef __DEBUG_InputMgr__
\r
14 boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0,dbg_nointest=0;
\r
16 #ifdef __DEBUG_MAP__
\r
17 boolean dbg_maptext=0;
\r
23 // TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?"
\r
25 # include <stdarg.h>
\r
26 # include <stdlib.h>
\r
29 unsigned char _DEBUG_INITed = 0;
\r
30 struct info_8250 *_DEBUG_uart = NULL;
\r
33 if (!_DEBUG_INITed) {
\r
37 if (!init_8250()) return 0;
\r
39 // what does the BIOS say the serial ports are?
\r
40 probe_8250_bios_ports();
\r
41 for (i=0;i < bios_8250_ports;i++) {
\r
42 port = get_8250_bios_port(i);
\r
43 if (port == 0) continue;
\r
47 // what about the standard serial ports?
\r
48 for (i=0;i < (sizeof(standard_8250_ports)/sizeof(standard_8250_ports[0]));i++) {
\r
49 port = standard_8250_ports[i];
\r
50 if (port == 0) continue;
\r
54 // pick the first port, which is probably COM1
\r
55 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
56 _DEBUG_uart = &info_8250_port[0];
\r
59 // init the COM port.
\r
60 // in DOSBox-X, the "log" mode will receive our text and print it into the log file
\r
61 // 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
62 // if nothing is connected, then the bytes go off into the ether to get lost and life goes on.
\r
63 uart_8250_enable_interrupt(_DEBUG_uart,0); // disable interrupts
\r
64 uart_8250_set_FIFO(_DEBUG_uart,0x07); // enable FIFO (why not?), also clear xmit/recv FIFO buffers, set threshhold to 1 byte
\r
65 uart_8250_set_MCR(_DEBUG_uart,3); // RTS and DTS on
\r
66 uart_8250_set_line_control(_DEBUG_uart,UART_8250_LCR_8BIT | UART_8250_LCR_PARITY); // 8 bit 1 stop bit odd parity
\r
67 uart_8250_set_baudrate(_DEBUG_uart,uart_8250_baud_to_divisor(_DEBUG_uart,9600)); // 9600 baud
\r
70 return _DEBUG_INITed;
\r
73 void _DEBUG(const char *msg) {
\r
74 if (_DEBUG_uart != NULL) {
\r
77 while ((c=(*msg++)) != 0/*NUL*/) {
\r
78 while (!uart_8250_can_write(_DEBUG_uart)); // wait for the UART to indicate readiness for our output
\r
79 uart_8250_write(_DEBUG_uart,(uint8_t)c); // then write it
\r
84 static char _DEBUGF_TMP[256];
\r
86 void _DEBUGF(const char *fmt,...) {
\r
90 vsnprintf(_DEBUGF_TMP,sizeof(_DEBUGF_TMP),fmt,va);
\r
91 _DEBUG(_DEBUGF_TMP);
\r
105 void ShapeTest (global_game_variables_t *gvar)
\r
107 extern word NumDigi;
\r
108 extern word _seg *DigiList;
\r
109 static char buf[10];
\r
114 // dword l; word k,x;
\r
116 PageListStruct far *page;
\r
118 // CenterWindow(20,16);
\r
119 // VW_UpdateScreen();
\r
120 for (i = 0,done = false;!done;)
\r
122 // US_ClearWindow();
\r
125 page = &(gvar->pm.PMPages[i]);
\r
126 // US_Print(" Page #");
\r
127 // US_PrintUnsigned(i);
\r
128 printf(" Page #%u", i);
\r
129 if (i < (gvar->pm.fi.PMSpriteStart))
\r
130 // US_Print(" (Wall)");
\r
132 /* else if (i < (gvar->pm.fi.PMSoundStart))
\r
133 // US_Print(" (Sprite)");
\r
134 printf(" (Sprite)");
\r
135 else if (i == (gvar->pm.fi.ChunksInFile - 1))
\r
136 // US_Print(" (Sound Info)");
\r
137 printf(" (Sound Info)");
\r
139 // US_Print(" (Sound)");
\r
140 printf(" (Sound)");*/
\r
142 // US_Print("\n XMS: ");
\r
143 printf("\n XMS: ");
\r
144 if (page->xmsPage != -1)
\r
145 // US_PrintUnsigned(page->xmsPage);
\r
146 printf("%u", page->xmsPage);
\r
151 // US_Print("\n Main: ");
\r
152 if (page->mainPage != -1)
\r
153 // US_PrintUnsigned(page->mainPage);
\r
154 printf("\n Main: %u", page->mainPage);
\r
155 else if (page->emsPage != -1)
\r
157 // US_Print("EMS ");
\r
158 // US_PrintUnsigned(page->emsPage);
\r
159 printf("EMS %u", page->emsPage);
\r
165 // US_Print("\n Last hit: ");
\r
166 // US_PrintUnsigned(page->lastHit);
\r
167 printf("\n Last hit: %u", page->lastHit);
\r
169 // US_Print("\n Address: ");
\r
170 printf("\n Address: ");
\r
171 addr = PM_GetPageAddress(i, gvar);
\r
172 sprintf(buf,"0x%04x",(word)addr);
\r
178 /* if (i < PMSpriteStart)
\r
183 bufferofs += 32*SCREENWIDTH;
\r
186 postsource = ((long)((unsigned)addr))<<16;
\r
187 for (x=0;x<64;x++,postx++,postsource+=64)
\r
189 wallheight[postx] = 256;
\r
192 bufferofs -= 32*SCREENWIDTH;
\r
194 else if (i < PMSoundStart)
\r
199 bufferofs += 32*SCREENWIDTH;
\r
200 SimpleScaleShape (160, i-PMSpriteStart, 64);
\r
201 bufferofs -= 32*SCREENWIDTH;
\r
203 else if (i == ChunksInFile - 1)
\r
205 US_Print("\n\n Number of sounds: ");
\r
206 US_PrintUnsigned(NumDigi);
\r
207 for (l = j = k = 0;j < NumDigi;j++)
\r
209 l += DigiList[(j * 2) + 1];
\r
210 k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
\r
212 US_Print("\n Total bytes: ");
\r
213 US_PrintUnsigned(l);
\r
214 US_Print("\n Total pages: ");
\r
215 US_PrintUnsigned(k);
\r
219 byte far *dp = (byte far *)MK_FP(addr,0);
\r
220 for (j = 0;j < NumDigi;j++)
\r
222 k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;
\r
225 (i >= PMSoundStart + DigiList[j * 2])
\r
226 && (i < PMSoundStart + DigiList[j * 2] + k)
\r
233 US_Print("\n Sound #");
\r
234 US_PrintUnsigned(j);
\r
235 US_Print("\n Segment #");
\r
236 US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);
\r
238 for (j = 0;j < page->length;j += 32)
\r
241 int v2 = (unsigned)v;
\r
245 VWB_Vlin(WindowY + WindowH - 32 + v2,
\r
246 WindowY + WindowH - 32,
\r
247 WindowX + 8 + (j / 32),BLACK);
\r
249 VWB_Vlin(WindowY + WindowH - 32,
\r
250 WindowY + WindowH - 32 + v2,
\r
251 WindowX + 8 + (j / 32),BLACK);
\r
254 printf("\naddr ok\n");
\r
257 // VW_UpdateScreen();
\r
259 // while (!(scan = IN_GetLastScan()))
\r
260 scan = *IN_GetScanName(scan);
\r
270 case sc_RightArrow:
\r
271 if (++i >= (gvar->pm.fi.ChunksInFile))
\r
274 case sc_W: // Walls
\r
277 case sc_S: // Sprites
\r
278 // i = (gvar->pm.fi.PMSpriteStart);
\r
280 case sc_D: // Digitized
\r
281 // i = (gvar->pm.fi.PMSoundStart);
\r
283 case sc_I: // Digitized info
\r
284 i = (gvar->pm.fi.ChunksInFile - 1);
\r
286 case sc_L: // Load all pages
\r
287 for (j = 0;j < (gvar->pm.fi.ChunksInFile);j++)
\r
288 PM_GetPage(j, gvar);
\r
291 // if (sound != -1)
\r
292 // SD_PlayDigitized(sound);
\r
298 PM_GetPage(i, gvar);
\r
302 //SD_StopDigitized();
\r