15eb0001 |
1 | \r |
4abeeb4b |
2 | // This file is part of the PicoDrive Megadrive Emulator\r |
3 | \r |
c41b9b97 |
4 | // Copyright (c) 2011 FinalDave (emudave (at) gmail.com)\r |
5 | \r |
4abeeb4b |
6 | // This code is licensed under the GNU General Public License version 2.0 and the MAME License.\r |
7 | // You can choose the license that has the most advantages for you.\r |
8 | \r |
9 | // SVN repository can be found at http://code.google.com/p/cyclone68000/\r |
10 | \r |
15eb0001 |
11 | #include <stdio.h>\r |
12 | #include <stdlib.h>\r |
13 | #include <string.h>\r |
14 | #include "Pico.h"\r |
15 | \r |
16 | #if defined(__GNUC__) || defined(_WIN32_WCE)\r |
17 | #define EMU_C68K // Use the Cyclone 68000 emulator\r |
18 | #else\r |
19 | #define EMU_A68K // Use the 'A68K' (Make68K) Assembler 68000 emulator\r |
20 | #endif\r |
21 | \r |
22 | //#define MSOUND\r |
23 | \r |
24 | // Disa.h also defines CPU_CALL to be fastcall or normal call\r |
25 | #include "Disa.h"\r |
26 | \r |
27 | \r |
28 | // ----------------------- 68000 CPU -----------------------\r |
29 | #ifdef EMU_A68K\r |
30 | // The format of the data in a68k.asm (at the _M68000_regs location)\r |
31 | struct A68KContext\r |
32 | {\r |
33 | unsigned int d[8],a[8];\r |
34 | unsigned int isp,srh,ccr,xc,pc,irq,sr;\r |
35 | int (*IrqCallback) (int nIrq);\r |
36 | unsigned int ppc;\r |
37 | void *pResetCallback;\r |
38 | unsigned int sfc,dfc,usp,vbr;\r |
39 | unsigned int AsmBank,CpuVersion;\r |
40 | };\r |
41 | extern "C" struct A68KContext M68000_regs;\r |
42 | #endif\r |
43 | \r |
44 | #ifdef EMU_C68K\r |
45 | #include "../Cyclone/Cyclone.h"\r |
46 | extern struct Cyclone PicoCpu;\r |
47 | #endif\r |
48 | \r |
49 | #ifdef MSOUND\r |
50 | extern "C" {\r |
51 | #include "ym2612.h"\r |
52 | }\r |
53 | #endif\r |
54 | \r |
55 | // ---------------------------------------------------------\r |
56 | \r |
57 | struct PicoVideo\r |
58 | {\r |
59 | unsigned char reg[0x20];\r |
60 | unsigned int command; // 32-bit Command\r |
61 | unsigned char pending; // 1 if waiting for second half of 32-bit command\r |
62 | unsigned char type; // Command type (v/c/vsram read/write)\r |
63 | unsigned short addr; // Read/Write address\r |
64 | int status; // Status bits\r |
65 | unsigned char pad[0x14];\r |
66 | };\r |
67 | \r |
68 | struct PicoMisc\r |
69 | {\r |
70 | unsigned char rotate;\r |
71 | unsigned char z80Run;\r |
72 | unsigned char padSelect[2]; // Select high or low bit from joypad\r |
73 | short scanline; // -38 to 223\r |
74 | char dirtyPal; // Is the palette dirty\r |
75 | unsigned char hardware; // Hardware value for country\r |
76 | unsigned char pal; // 1=PAL 0=NTSC\r |
77 | unsigned char pad[0x16];\r |
78 | };\r |
79 | \r |
80 | struct PicoSound\r |
81 | {\r |
82 | unsigned char fmsel[2]; // FM selected register\r |
83 | unsigned char reg[0x100];\r |
84 | unsigned char pad[0x3e];\r |
85 | };\r |
86 | \r |
87 | struct Pico\r |
88 | {\r |
89 | unsigned char ram[0x10000]; // scratch ram\r |
90 | unsigned short vram[0x8000];\r |
91 | unsigned char zram[0x2000]; // Z80 ram\r |
92 | unsigned int highpal[0x40];\r |
93 | unsigned short cram[0x40];\r |
94 | unsigned short vsram[0x40];\r |
95 | \r |
96 | unsigned char *rom;\r |
97 | unsigned int romsize;\r |
98 | \r |
99 | struct PicoMisc m;\r |
100 | struct PicoVideo video;\r |
101 | struct PicoSound s;\r |
102 | };\r |
103 | \r |
104 | // Draw.cpp\r |
105 | int PicoLine(int scan);\r |
106 | \r |
107 | // Draw2.cpp\r |
108 | int PicoDraw2();\r |
109 | \r |
110 | // Memory.cpp\r |
111 | int PicoInitPc(unsigned int pc);\r |
112 | unsigned short CPU_CALL PicoRead16(unsigned int a);\r |
113 | unsigned int CPU_CALL PicoRead32(unsigned int a);\r |
114 | int PicoMemInit();\r |
115 | void PicoDasm(int start,int len);\r |
116 | \r |
117 | // Pico.cpp\r |
118 | extern struct Pico Pico;\r |
119 | \r |
120 | // Sek.cpp\r |
121 | int SekInit();\r |
122 | int SekReset();\r |
123 | int SekRun(int cyc);\r |
124 | int SekInterrupt(int irq);\r |
125 | int SekPc();\r |
126 | void SekState(unsigned char *data);\r |
127 | \r |
128 | // Sine.cpp\r |
129 | extern short Sine[];\r |
130 | \r |
131 | // Psnd.cpp\r |
132 | int PsndReset();\r |
133 | int PsndFm(int a,int d);\r |
134 | int PsndRender();\r |
135 | \r |
136 | // VideoPort.cpp\r |
137 | void PicoVideoWrite(unsigned int a,unsigned int d);\r |
138 | unsigned int PicoVideoRead(unsigned int a);\r |
139 | \r |
140 | // External:\r |
141 | extern "C" int dprintf(char *Format, ...);\r |