]> 4ch.mooo.com Git - 16.git/blob - src/lib/16_dbg.c
[16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / 16_dbg.c
1 #include "src/lib/16_dbg.h"\r
2 \r
3 #ifdef __DEBUG__\r
4 #ifdef __DEBUG_MM__\r
5 boolean dbg_debugmm=0;\r
6 #endif\r
7 #ifdef __DEBUG_PM__\r
8 boolean dbg_debugpm=0;\r
9 #endif\r
10 #ifdef __DEBUG_CA__\r
11 boolean dbg_debugca=0;\r
12 #endif\r
13 #ifdef __DEBUG_InputMgr__\r
14 boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0,dbg_nointest=0;\r
15 #endif\r
16 #ifdef __DEBUG_MAP__\r
17 boolean dbg_maptext=0;\r
18 byte *dbg_mapdata;\r
19 #endif\r
20 #endif  //debug\r
21 \r
22 #ifdef __WATCOMC__\r
23 // TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?"\r
24 #ifdef DEBUGSERIAL\r
25 # include <stdarg.h>\r
26 # include <stdlib.h>\r
27 # include <stdio.h>\r
28 \r
29 unsigned char _DEBUG_INITed = 0;\r
30 struct info_8250 *_DEBUG_uart = NULL;\r
31 \r
32 int _DEBUG_INIT() {\r
33         if (!_DEBUG_INITed) {\r
34                 unsigned int i;\r
35                 uint16_t port;\r
36 \r
37                 if (!init_8250()) return 0;\r
38 \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
44                         probe_8250(port);\r
45                 }\r
46 \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
51                         probe_8250(port);\r
52                 }\r
53 \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
57                 _DEBUG_INITed = 1;\r
58 \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
68         }\r
69 \r
70         return _DEBUG_INITed;\r
71 }\r
72 \r
73 void _DEBUG(const char *msg) {\r
74         if (_DEBUG_uart != NULL) {\r
75                 char c;\r
76 \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
80                 }\r
81         }\r
82 }\r
83 \r
84 static char _DEBUGF_TMP[256];\r
85 \r
86 void _DEBUGF(const char *fmt,...) {\r
87         va_list va;\r
88 \r
89         va_start(va,fmt);\r
90         vsnprintf(_DEBUGF_TMP,sizeof(_DEBUGF_TMP),fmt,va);\r
91         _DEBUG(_DEBUGF_TMP);\r
92         va_end(va);\r
93 }\r
94 #endif  //serial\r
95 #endif  //watcomc\r
96 /*\r
97 ================\r
98 =\r
99 = ShapeTest\r
100 =\r
101 ================\r
102 */\r
103 \r
104 #pragma warn -pia\r
105 void ShapeTest (global_game_variables_t *gvar)\r
106 {\r
107 extern  word    NumDigi;\r
108 extern  word    _seg *DigiList;\r
109 static  char    buf[10];\r
110 \r
111         boolean                 done;\r
112         ScanCode                scan;\r
113         int                             i,j;\r
114 //      dword           l; word k,x;\r
115         memptr                  addr;\r
116         PageListStruct  far *page;\r
117 \r
118 //      CenterWindow(20,16);\r
119 //      VW_UpdateScreen();\r
120         for (i = 0,done = false;!done;)\r
121         {\r
122 //              US_ClearWindow();\r
123 //              sound = -1;\r
124 \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
131 //++                    printf(" (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
138                 else\r
139 //                      US_Print(" (Sound)");\r
140                         printf(" (Sound)");*/\r
141 \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
147                 else\r
148 //                      US_Print("No");\r
149                         printf("No");\r
150 \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
156                 {\r
157 //                      US_Print("EMS ");\r
158 //                      US_PrintUnsigned(page->emsPage);\r
159                         printf("EMS %u", page->emsPage);\r
160                 }\r
161                 else\r
162 //                      US_Print("No");\r
163                         printf("No");\r
164 \r
165 //              US_Print("\n Last hit: ");\r
166 //              US_PrintUnsigned(page->lastHit);\r
167                 printf("\n Last hit: %u", page->lastHit);\r
168 \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
173 //              US_Print(buf);\r
174                 printf("%s", buf);\r
175 \r
176                 if (addr)\r
177                 {\r
178 /*                      if (i < PMSpriteStart)\r
179                         {\r
180                         //\r
181                         // draw the wall\r
182                         //\r
183                                 bufferofs += 32*SCREENWIDTH;\r
184                                 postx = 128;\r
185                                 postwidth = 1;\r
186                                 postsource = ((long)((unsigned)addr))<<16;\r
187                                 for (x=0;x<64;x++,postx++,postsource+=64)\r
188                                 {\r
189                                         wallheight[postx] = 256;\r
190                                         FarScalePost ();\r
191                                 }\r
192                                 bufferofs -= 32*SCREENWIDTH;\r
193                         }\r
194                         else if (i < PMSoundStart)\r
195                         {\r
196                         //\r
197                         // draw the sprite\r
198                         //\r
199                                 bufferofs += 32*SCREENWIDTH;\r
200                                 SimpleScaleShape (160, i-PMSpriteStart, 64);\r
201                                 bufferofs -= 32*SCREENWIDTH;\r
202                         }\r
203                         else if (i == ChunksInFile - 1)\r
204                         {\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
208                                 {\r
209                                         l += DigiList[(j * 2) + 1];\r
210                                         k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
211                                 }\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
216                         }\r
217                         else\r
218                         {\r
219                                 byte far *dp = (byte far *)MK_FP(addr,0);\r
220                                 for (j = 0;j < NumDigi;j++)\r
221                                 {\r
222                                         k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
223                                         if\r
224                                         (\r
225                                                 (i >= PMSoundStart + DigiList[j * 2])\r
226                                         &&      (i < PMSoundStart + DigiList[j * 2] + k)\r
227                                         )\r
228                                                 break;\r
229                                 }\r
230                                 if (j < NumDigi)\r
231                                 {\r
232 //                                      sound = j;\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
237                                 }\r
238                                 for (j = 0;j < page->length;j += 32)\r
239                                 {\r
240                                         byte v = dp[j];\r
241                                         int v2 = (unsigned)v;\r
242                                         v2 -= 128;\r
243                                         v2 /= 4;\r
244                                         if (v2 < 0)\r
245                                                 VWB_Vlin(WindowY + WindowH - 32 + v2,\r
246                                                                 WindowY + WindowH - 32,\r
247                                                                 WindowX + 8 + (j / 32),BLACK);\r
248                                         else\r
249                                                 VWB_Vlin(WindowY + WindowH - 32,\r
250                                                                 WindowY + WindowH - 32 + v2,\r
251                                                                 WindowX + 8 + (j / 32),BLACK);\r
252                                 }\r
253                         }*/\r
254                         printf("\naddr ok\n");\r
255                 }\r
256 \r
257 //              VW_UpdateScreen();\r
258 \r
259                 while (!(scan = gvar->in.inst->LastScan))\r
260                 {\r
261                 }\r
262 //                      scan = *IN_GetScanName(scan);\r
263 //                      SD_Poll();\r
264 \r
265 if(IN_KeyDown(sc_Escape)) break;\r
266 \r
267                 IN_ClearKey(scan);\r
268                 switch (scan)\r
269                 {\r
270                 case sc_LeftArrow:\r
271                         if (i)\r
272                                 i--;\r
273                         break;\r
274                 case sc_RightArrow:\r
275                         if (++i >= (gvar->pm.fi.ChunksInFile))\r
276                                 i--;\r
277                         break;\r
278                 case sc_W:      // Walls\r
279                         i = 0;\r
280                         break;\r
281                 case sc_S:      // Sprites\r
282 //                      i = (gvar->pm.fi.PMSpriteStart);\r
283                         break;\r
284                 case sc_D:      // Digitized\r
285 //                      i = (gvar->pm.fi.PMSoundStart);\r
286                         break;\r
287                 case sc_I:      // Digitized info\r
288                         i = (gvar->pm.fi.ChunksInFile - 1);\r
289                         break;\r
290                 case sc_L:      // Load all pages\r
291                         for (j = 0;j < (gvar->pm.fi.ChunksInFile);j++)\r
292                                 PM_GetPage(j, gvar);\r
293                         break;\r
294                 case sc_P:\r
295 //                      if (sound != -1)\r
296 //                              SD_PlayDigitized(sound);\r
297                         break;\r
298                 case sc_Escape:\r
299                         done = true;\r
300                         break;\r
301                 case sc_Enter:\r
302                         PM_GetPage(i, gvar);\r
303                         break;\r
304                 }\r
305         }\r
306         //SD_StopDigitized();\r
307 }\r
308 #pragma warn +pia\r