runs code in 1M wram, cell arrange, decode (untested)
[picodrive.git] / Pico / PicoInt.h
index 4242452..0cbeb80 100644 (file)
@@ -13,7 +13,7 @@
 #include "Pico.h"\r
 \r
 \r
-// to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile\r
+// to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile or project\r
 \r
 #ifdef __cplusplus\r
 extern "C" {\r
@@ -23,10 +23,11 @@ extern "C" {
 // ----------------------- 68000 CPU -----------------------\r
 #ifdef EMU_C68K\r
 #include "../cpu/Cyclone/Cyclone.h"\r
-extern struct Cyclone PicoCpu;\r
+extern struct Cyclone PicoCpu, PicoCpuS68k;\r
 #define SekCyclesLeft PicoCpu.cycles // cycles left for this run\r
 #define SekSetCyclesLeft(c) PicoCpu.cycles=c\r
 #define SekPc (PicoCpu.pc-PicoCpu.membase)\r
+#define SekPcS68k (PicoCpuS68k.pc-PicoCpuS68k.membase)\r
 #endif\r
 \r
 #ifdef EMU_A68K\r
@@ -124,7 +125,8 @@ struct PicoMisc
   unsigned char sram_slave;  // EEPROM slave word for X24C02 and better SRAMs\r
   unsigned char prot_bytes[2]; // simple protection fakeing\r
   unsigned short dma_bytes;  //\r
-  unsigned char pad1[6];\r
+  unsigned char pad[2];\r
+  unsigned int  frame_count; // mainly for movies\r
 };\r
 \r
 // some assembly stuff depend on these, do not touch!\r
@@ -160,24 +162,80 @@ struct PicoSRAM
 // MCD\r
 #include "cd/cd_sys.h"\r
 #include "cd/LC89510.h"\r
+#include "cd/gfx_cd.h"\r
+\r
+struct mcd_pcm\r
+{\r
+       unsigned char control; // reg7\r
+       unsigned char enabled; // reg8\r
+       unsigned char cur_ch;\r
+       unsigned char bank;\r
+       int pad1;\r
+\r
+       struct pcm_chan\r
+       {\r
+               unsigned char regs[8];\r
+               unsigned int  addr; // played sample address\r
+               int pad;\r
+       } ch[8];\r
+};\r
+\r
+struct mcd_misc\r
+{\r
+       unsigned short hint_vector;\r
+       unsigned char  busreq;\r
+       unsigned char  s68k_pend_ints;\r
+       unsigned int   state_flags;     // emu state: reset_pending,\r
+       unsigned int   counter75hz;\r
+       unsigned short audio_offset;    // for savestates: play pointer offset (0-1023)\r
+       unsigned char  audio_track;     // playing audio track # (zero based)\r
+       char pad1;\r
+       int            timer_int3;\r
+       unsigned int   timer_stopwatch;\r
+       int pad[10];\r
+};\r
 \r
 typedef struct\r
 {\r
-       unsigned char bios[0x20000];\r
-       union {\r
+       unsigned char bios[0x20000];                    // 128K\r
+       union {                                         // 512K\r
                unsigned char prg_ram[0x80000];\r
                unsigned char prg_ram_b[4][0x20000];\r
        };\r
-       unsigned char word_ram[0x40000];\r
-       unsigned char s68k_regs[0x200];\r
-       unsigned char m68k_regs[0x10];\r
+       union {                                         // 256K\r
+               struct {\r
+                       unsigned char word_ram2M[0x40000];\r
+                       unsigned char unused[0x20000];\r
+               };\r
+               struct {\r
+                       unsigned char unused[0x20000];\r
+                       unsigned char word_ram1M[2][0x20000];\r
+               };\r
+       };\r
+       union {                                         // 64K\r
+               unsigned char pcm_ram[0x10000];\r
+               unsigned char pcm_ram_b[0x10][0x1000];\r
+       };\r
+       unsigned char bram[0x2000];                     // 8K\r
+       unsigned char s68k_regs[0x200];                 // GA, not CPU regs\r
+       struct mcd_pcm pcm;\r
+       _scd_toc TOC;                                   // not to be saved\r
        CDD  cdd;\r
        CDC  cdc;\r
        _scd scd;\r
+       Rot_Comp rot_comp;\r
+       struct mcd_misc m;\r
 } mcd_state;\r
 \r
 #define Pico_mcd ((mcd_state *)Pico.rom)\r
 \r
+// Area.c\r
+int PicoAreaPackCpu(unsigned char *cpu, int is_sub);\r
+int PicoAreaUnpackCpu(unsigned char *cpu, int is_sub);\r
+\r
+// cd/Area.c\r
+int PicoCdSaveState(void *file);\r
+int PicoCdLoadState(void *file);\r
 \r
 // Draw.c\r
 int PicoLine(int scan);\r
@@ -189,15 +247,16 @@ void PicoFrameFull();
 // Memory.c\r
 int PicoInitPc(unsigned int pc);\r
 unsigned int CPU_CALL PicoRead32(unsigned int a);\r
-int  PicoMemInit();\r
+void PicoMemSetup();\r
 void PicoMemReset();\r
-void PicoDasm(int start,int len);\r
+//void PicoDasm(int start,int len);\r
 unsigned char z80_read(unsigned short a);\r
 unsigned short z80_read16(unsigned short a);\r
 void z80_write(unsigned char data, unsigned short a);\r
 void z80_write16(unsigned short data, unsigned short a);\r
 \r
 // cd/Memory.c\r
+void PicoMemSetupCD();\r
 unsigned char  PicoReadCD8 (unsigned int a);\r
 unsigned short PicoReadCD16(unsigned int a);\r
 unsigned int   PicoReadCD32(unsigned int a);\r
@@ -209,6 +268,7 @@ void PicoWriteCD32(unsigned int a, unsigned int d);
 extern struct Pico Pico;\r
 extern struct PicoSRAM SRam;\r
 extern int emustatus;\r
+int CheckDMA(void);\r
 \r
 // cd/Pico.c\r
 int  PicoInitMCD(void);\r
@@ -226,6 +286,10 @@ int SekInitS68k(void);
 int SekResetS68k(void);\r
 int SekInterruptS68k(int irq);\r
 \r
+// sound/sound.c\r
+extern int PsndLen_exc_cnt;\r
+extern int PsndLen_exc_add;\r
+\r
 // VideoPort.c\r
 void PicoVideoWrite(unsigned int a,unsigned short d);\r
 unsigned int PicoVideoRead(unsigned int a);\r
@@ -234,6 +298,13 @@ unsigned int PicoVideoRead(unsigned int a);
 void SRAMWriteEEPROM(unsigned int d);\r
 unsigned int SRAMReadEEPROM();\r
 void SRAMUpdPending(unsigned int a, unsigned int d);\r
+void memcpy16(unsigned short *dest, unsigned short *src, int count);\r
+void memcpy32(int *dest, int *src, int count);\r
+void memset32(int *dest, int c, int count);\r
+\r
+// cd/Misc.c\r
+void wram_2M_to_1M(unsigned char *m);\r
+void wram_1M_to_2M(unsigned char *m);\r
 \r
 \r
 #ifdef __cplusplus\r