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