Added 0.030 of PicoDrive and moved license files into root
[cyclone68000.git] / PicoDrive / Debug.cpp
diff --git a/PicoDrive/Debug.cpp b/PicoDrive/Debug.cpp
new file mode 100644 (file)
index 0000000..49f53f6
--- /dev/null
@@ -0,0 +1,80 @@
+\r
+#include "stdafx.h"\r
+\r
+static int ScreenNum=0;\r
+\r
+int DebugScreenGrab()\r
+{\r
+  unsigned char *screen=NULL;\r
+  FILE *file=NULL;\r
+  unsigned char *line=NULL;\r
+  int x=0,y=0;\r
+  char filename[64];\r
+  unsigned char head[0x12];\r
+\r
+  memset(filename,0,sizeof(filename));\r
+  memset(head,0,sizeof(head));\r
+\r
+  // Allocate memory for one line\r
+  line=(unsigned char *)malloc(GXDisp.cxWidth*3); if (line==NULL) return 1;\r
+  memset(line,0,GXDisp.cxWidth*3);\r
+\r
+  // Get pointer to screen:\r
+  screen=(unsigned char *)GXBeginDraw(); if (screen==NULL) { free(line); return 1; }\r
+\r
+  // Open screenshot file:\r
+  for (;;)\r
+  {\r
+    sprintf(filename,"\\Screen%.3d.tga",ScreenNum);\r
+\r
+    // Does this file exist?\r
+    file=fopen(filename,"rb"); if (file==NULL) break; // No - use this\r
+    \r
+    // Exists, try next file\r
+    fclose(file); ScreenNum++;\r
+    if (ScreenNum>=1000) break;\r
+  }\r
+\r
+  // Use this filename\r
+  file=fopen(filename,"wb"); if (file==NULL) { GXEndDraw(); free(line); return 1; }\r
+\r
+  head[0x02]=0x02; //?\r
+  head[0x0c]=(unsigned char) GXDisp.cxWidth;\r
+  head[0x0d]=(unsigned char)(GXDisp.cxWidth>>8);\r
+  head[0x0e]=(unsigned char) GXDisp.cyHeight;\r
+  head[0x0f]=(unsigned char)(GXDisp.cyHeight>>8);\r
+  head[0x10]=24; // Number of bits per pixel\r
+\r
+  // Write header:\r
+  fwrite(head,1,sizeof(head),file);\r
+\r
+  for (y=0;y<(int)GXDisp.cyHeight;y++)\r
+  {\r
+    unsigned char *ps=NULL,*pd=NULL;\r
+    int ry=0;\r
+    int pix=0;\r
+\r
+    ry=GXDisp.cyHeight-y-1;\r
+    ps=screen+ry*GXDisp.cbyPitch;\r
+    pd=line;\r
+\r
+    // Copy pixel to our line buffer\r
+    for (x=0;x<(int)GXDisp.cxWidth; x++,ps+=GXDisp.cbxPitch,pd+=3)\r
+    {\r
+      pix=*(unsigned short *)ps;\r
+\r
+      pd[0]=(unsigned char)((pix&0x001f)<<3); // Red\r
+      pd[1]=(unsigned char)((pix&0x07e0)>>3); // Green\r
+      pd[2]=(unsigned char)((pix&0xf800)>>8); // Blue\r
+    }\r
+\r
+    fwrite(line,1,GXDisp.cxWidth*3,file);\r
+  }\r
+\r
+  fclose(file); file=NULL;\r
+  \r
+  GXEndDraw();\r
+  free(line);\r
+\r
+  return 0;\r
+}\r