4e5bc95055886d889ed52d472d7ed239c14e2d4a
[picodrive.git] / platform / win32 / GenaDrive / Emu.cpp
1 \r
2 #include "app.h"\r
3 \r
4 unsigned short *EmuScreen=NULL;\r
5 extern "C" unsigned short *framebuff=NULL;\r
6 int EmuWidth=0,EmuHeight=0;\r
7 static int frame=0;\r
8 static int EmuScan(unsigned int num, void *sdata);\r
9 unsigned char *PicoDraw2FB = NULL;\r
10 \r
11 int EmuInit()\r
12 {\r
13   int len=0;\r
14 \r
15   PicoInit();\r
16 \r
17   // Allocate screen:\r
18   EmuWidth=320; EmuHeight=224;\r
19   len=EmuWidth*EmuHeight; len<<=1;\r
20   EmuScreen=(unsigned short *)malloc(len); if (EmuScreen==NULL) return 1;\r
21   framebuff=(unsigned short *)malloc((8+320)*(8+224+8)*2);\r
22   memset(EmuScreen,0,len);\r
23 \r
24   PicoDraw2FB = (unsigned char *)framebuff;\r
25   PicoDrawSetColorFormat(1);\r
26   PicoScan=EmuScan;\r
27 \r
28   return 0;\r
29 }\r
30 \r
31 void EmuExit()\r
32 {\r
33   //RomFree();\r
34   free(EmuScreen); EmuScreen=NULL; // Deallocate screen\r
35   free(framebuff);\r
36   EmuWidth=EmuHeight=0;\r
37 \r
38   PicoExit();\r
39 }\r
40 \r
41 // Megadrive scanline callback:\r
42 static int EmuScan(unsigned int num, void *sdata)\r
43 {\r
44   unsigned short *pd=NULL,*end=NULL;\r
45   unsigned short *ps=NULL;\r
46 \r
47   if (num>=(unsigned int)EmuHeight) return 0;\r
48 \r
49   // Copy scanline to screen buffer:\r
50   pd=EmuScreen+(num<<8)+(num<<6); end=pd+320;\r
51   ps=(unsigned short *)sdata;\r
52 \r
53   do { *pd++=*ps++; } while (pd<end);\r
54   \r
55   return 0;\r
56 }\r
57 \r
58 int EmuFrame()\r
59 {\r
60   char map[12]={0,1,2,3,8,9,10,4,11,12,13,14};  // Joypads, format is UDLR BCAS ZYXM\r
61   int a=0,input=0;\r
62  \r
63   // Set Megadrive buttons:\r
64   for (a=0;a<12;a++)\r
65   {\r
66     int m=map[a];\r
67     if (m>=0) if (Inp.button[m]>30) input|=1<<a;\r
68   }\r
69 \r
70   PicoPad[0]=input;\r
71 \r
72   frame++;\r
73   PsndOut=(short *)DSoundNext; PicoFrame(); PsndOut=NULL;\r
74 \r
75   return 0;\r
76 }\r
77 \r
78 \r
79 \r
80 int mp3_get_offset(void) // 0-1023\r
81 {\r
82   return 0;\r
83 }\r
84 \r
85 void mp3_update(int *buffer, int length, int stereo)\r
86 {\r
87 }\r
88 \r
89 void mp3_start_play(FILE *f, int pos)\r
90 {\r
91 }\r
92 \r
93 int mp3_get_bitrate(FILE *f, int size)\r
94 {\r
95   return -1;\r
96 }\r
97 \r