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