OSDN Git Service

[16_ca needs huge amounts of work and I should remember what needs to be done soon...
[proj16/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 #ifdef __DEBUG_RF__\r
21 boolean dbg_pagenorendermap=0,dbg_pagedelayrendermap=0;\r
22 #endif\r
23 #ifdef __DEBUG_SPRI__\r
24 boolean dbg_delayanimation=0;\r
25 #endif\r
26 #endif  //debug\r
27 \r
28 #ifdef __WATCOMC__\r
29 // TODO: Could we also provide a build mode to emit debug to the "Bochs E9 hack?"\r
30 #ifdef DEBUGSERIAL\r
31 # include <stdarg.h>\r
32 # include <stdlib.h>\r
33 # include <stdio.h>\r
34 \r
35 unsigned char _DEBUG_INITed = 0;\r
36 struct info_8250 *_DEBUG_uart = NULL;\r
37 \r
38 int _DEBUG_INIT() {\r
39         if (!_DEBUG_INITed) {\r
40                 unsigned int i;\r
41                 uint16_t port;\r
42 \r
43                 if (!init_8250()) return 0;\r
44 \r
45                 // what does the BIOS say the serial ports are?\r
46                 probe_8250_bios_ports();\r
47                 for (i=0;i < bios_8250_ports;i++) {\r
48                         port = get_8250_bios_port(i);\r
49                         if (port == 0) continue;\r
50                         probe_8250(port);\r
51                 }\r
52 \r
53                 // what about the standard serial ports?\r
54                 for (i=0;i < (sizeof(standard_8250_ports)/sizeof(standard_8250_ports[0]));i++) {\r
55                         port = standard_8250_ports[i];\r
56                         if (port == 0) continue;\r
57                         probe_8250(port);\r
58                 }\r
59 \r
60                 // pick the first port, which is probably COM1\r
61                 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
62                 _DEBUG_uart = &info_8250_port[0];\r
63                 _DEBUG_INITed = 1;\r
64 \r
65                 // init the COM port.\r
66                 // in DOSBox-X, the "log" mode will receive our text and print it into the log file\r
67                 // 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
68                 // if nothing is connected, then the bytes go off into the ether to get lost and life goes on.\r
69                 uart_8250_enable_interrupt(_DEBUG_uart,0);      // disable interrupts\r
70                 uart_8250_set_FIFO(_DEBUG_uart,0x07);           // enable FIFO (why not?), also clear xmit/recv FIFO buffers, set threshhold to 1 byte\r
71                 uart_8250_set_MCR(_DEBUG_uart,3);               // RTS and DTS on\r
72                 uart_8250_set_line_control(_DEBUG_uart,UART_8250_LCR_8BIT | UART_8250_LCR_PARITY); // 8 bit 1 stop bit odd parity\r
73                 uart_8250_set_baudrate(_DEBUG_uart,uart_8250_baud_to_divisor(_DEBUG_uart,9600)); // 9600 baud\r
74         }\r
75 \r
76         return _DEBUG_INITed;\r
77 }\r
78 \r
79 void _DEBUG(const char *msg) {\r
80         if (_DEBUG_uart != NULL) {\r
81                 char c;\r
82 \r
83                 while ((c=(*msg++)) != 0/*NUL*/) {\r
84                         while (!uart_8250_can_write(_DEBUG_uart)); // wait for the UART to indicate readiness for our output\r
85                         uart_8250_write(_DEBUG_uart,(uint8_t)c); // then write it\r
86                 }\r
87         }\r
88 }\r
89 \r
90 static char _DEBUGF_TMP[256];\r
91 \r
92 void _DEBUGF(const char *fmt,...) {\r
93         va_list va;\r
94 \r
95         va_start(va,fmt);\r
96         vsnprintf(_DEBUGF_TMP,sizeof(_DEBUGF_TMP),fmt,va);\r
97         _DEBUG(_DEBUGF_TMP);\r
98         va_end(va);\r
99 }\r
100 #endif  //serial\r
101 #endif  //watcomc\r
102 /*\r
103 ================\r
104 =\r
105 = ShapeTest\r
106 =\r
107 ================\r
108 */\r
109 \r
110 #pragma warn -pia\r
111 void ShapeTest (global_game_variables_t *gvar)\r
112 {\r
113 extern  word    NumDigi;\r
114 extern  word    _seg *DigiList;\r
115 static  char    buf[10];\r
116 \r
117         boolean                 done;\r
118         ScanCode                scan;\r
119         int                             i,j;\r
120 //      dword           l; word k,x;\r
121         memptr                  addr;\r
122         PageListStruct  far *page;\r
123 \r
124 //      CenterWindow(20,16);\r
125 //      VW_UpdateScreen();\r
126         for (i = 0,done = false;!done;)\r
127         {\r
128 //              US_ClearWindow();\r
129 //              sound = -1;\r
130 \r
131                 page = &(gvar->pm.PMPages[i]);\r
132 //              US_Print(" Page #");\r
133 //              US_PrintUnsigned(i);\r
134                 printf(" Page #%u", i);\r
135 //++            if (i < (gvar->pm.fi.PMSpriteStart))\r
136 //                      US_Print(" (Wall)");\r
137 //++                    printf(" (Wall)");\r
138 /*              else if (i < (gvar->pm.fi.PMSoundStart))\r
139 //                      US_Print(" (Sprite)");\r
140                         printf(" (Sprite)");\r
141                 else if (i == (gvar->pm.fi.ChunksInFile - 1))\r
142 //                      US_Print(" (Sound Info)");\r
143                         printf(" (Sound Info)");\r
144                 else\r
145 //                      US_Print(" (Sound)");\r
146                         printf(" (Sound)");*/\r
147 \r
148 //              US_Print("\n XMS: ");\r
149                 printf("\n XMS: ");\r
150                 if (page->xmsPage != -1)\r
151 //                      US_PrintUnsigned(page->xmsPage);\r
152                         printf("%u", page->xmsPage);\r
153                 else\r
154 //                      US_Print("No");\r
155                         printf("No");\r
156 \r
157 //              US_Print("\n Main: ");\r
158                 if (page->mainPage != -1)\r
159 //                      US_PrintUnsigned(page->mainPage);\r
160                         printf("\n Main: %u", page->mainPage);\r
161                 else if (page->emsPage != -1)\r
162                 {\r
163 //                      US_Print("EMS ");\r
164 //                      US_PrintUnsigned(page->emsPage);\r
165                         printf("EMS %u", page->emsPage);\r
166                 }\r
167                 else\r
168 //                      US_Print("No");\r
169                         printf("No");\r
170 \r
171 //              US_Print("\n Last hit: ");\r
172 //              US_PrintUnsigned(page->lastHit);\r
173                 printf("\n Last hit: %u", page->lastHit);\r
174 \r
175 //              US_Print("\n Address: ");\r
176                 printf("\n Address: ");\r
177                 addr = PM_GetPageAddress(i, gvar);\r
178                 sprintf(buf,"0x%04x",(word)addr);\r
179 //              US_Print(buf);\r
180                 printf("%s", buf);\r
181 \r
182                 if (addr)\r
183                 {\r
184 /*                      if (i < PMSpriteStart)\r
185                         {\r
186                         //\r
187                         // draw the wall\r
188                         //\r
189                                 bufferofs += 32*SCREENWIDTH;\r
190                                 postx = 128;\r
191                                 postwidth = 1;\r
192                                 postsource = ((long)((unsigned)addr))<<16;\r
193                                 for (x=0;x<64;x++,postx++,postsource+=64)\r
194                                 {\r
195                                         wallheight[postx] = 256;\r
196                                         FarScalePost ();\r
197                                 }\r
198                                 bufferofs -= 32*SCREENWIDTH;\r
199                         }\r
200                         else if (i < PMSoundStart)\r
201                         {\r
202                         //\r
203                         // draw the sprite\r
204                         //\r
205                                 bufferofs += 32*SCREENWIDTH;\r
206                                 SimpleScaleShape (160, i-PMSpriteStart, 64);\r
207                                 bufferofs -= 32*SCREENWIDTH;\r
208                         }\r
209                         else if (i == ChunksInFile - 1)\r
210                         {\r
211                                 US_Print("\n\n Number of sounds: ");\r
212                                 US_PrintUnsigned(NumDigi);\r
213                                 for (l = j = k = 0;j < NumDigi;j++)\r
214                                 {\r
215                                         l += DigiList[(j * 2) + 1];\r
216                                         k += (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
217                                 }\r
218                                 US_Print("\n Total bytes: ");\r
219                                 US_PrintUnsigned(l);\r
220                                 US_Print("\n Total pages: ");\r
221                                 US_PrintUnsigned(k);\r
222                         }\r
223                         else\r
224                         {\r
225                                 byte far *dp = (byte far *)MK_FP(addr,0);\r
226                                 for (j = 0;j < NumDigi;j++)\r
227                                 {\r
228                                         k = (DigiList[(j * 2) + 1] + (PMPageSize - 1)) / PMPageSize;\r
229                                         if\r
230                                         (\r
231                                                 (i >= PMSoundStart + DigiList[j * 2])\r
232                                         &&      (i < PMSoundStart + DigiList[j * 2] + k)\r
233                                         )\r
234                                                 break;\r
235                                 }\r
236                                 if (j < NumDigi)\r
237                                 {\r
238 //                                      sound = j;\r
239                                         US_Print("\n Sound #");\r
240                                         US_PrintUnsigned(j);\r
241                                         US_Print("\n Segment #");\r
242                                         US_PrintUnsigned(i - PMSoundStart - DigiList[j * 2]);\r
243                                 }\r
244                                 for (j = 0;j < page->length;j += 32)\r
245                                 {\r
246                                         byte v = dp[j];\r
247                                         int v2 = (unsigned)v;\r
248                                         v2 -= 128;\r
249                                         v2 /= 4;\r
250                                         if (v2 < 0)\r
251                                                 VWB_Vlin(WindowY + WindowH - 32 + v2,\r
252                                                                 WindowY + WindowH - 32,\r
253                                                                 WindowX + 8 + (j / 32),BLACK);\r
254                                         else\r
255                                                 VWB_Vlin(WindowY + WindowH - 32,\r
256                                                                 WindowY + WindowH - 32 + v2,\r
257                                                                 WindowX + 8 + (j / 32),BLACK);\r
258                                 }\r
259                         }*/\r
260                         printf("\naddr ok\n");\r
261                 }\r
262 \r
263 //              VW_UpdateScreen();\r
264 \r
265                 while (!(scan = gvar->in.inst->LastScan))\r
266                 {}\r
267 //                      SD_Poll();\r
268 \r
269 //if(IN_KeyDown(sc_Escape)) break;\r
270 \r
271                 IN_ClearKey(scan);\r
272                 switch (scan)\r
273                 {\r
274                 case sc_LeftArrow:\r
275                         if (i)\r
276                                 i--;\r
277                         break;\r
278                 case sc_RightArrow:\r
279                         if (++i >= (gvar->pm.fi.ChunksInFile))\r
280                                 i--;\r
281                         break;\r
282                 case sc_W:      // Walls\r
283                         i = 0;\r
284                         break;\r
285                 case sc_S:      // Sprites\r
286 //                      i = (gvar->pm.fi.PMSpriteStart);\r
287                         break;\r
288                 case sc_D:      // Digitized\r
289 //                      i = (gvar->pm.fi.PMSoundStart);\r
290                         break;\r
291                 case sc_I:      // Digitized info\r
292                         i = (gvar->pm.fi.ChunksInFile - 1);\r
293                         break;\r
294                 case sc_L:      // Load all pages\r
295                         for (j = 0;j < (gvar->pm.fi.ChunksInFile);j++)\r
296                                 PM_GetPage(j, gvar);\r
297                         break;\r
298                 case sc_P:\r
299 //                      if (sound != -1)\r
300 //                              SD_PlayDigitized(sound);\r
301                         break;\r
302                 case sc_Escape:\r
303                         done = true;\r
304                         break;\r
305                 case sc_Enter:\r
306                         PM_GetPage(i, gvar);\r
307                         break;\r
308                 }\r
309         }\r
310         //SD_StopDigitized();\r
311 }\r
312 #pragma warn +pia\r