X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Pico%2FPicoInt.h;h=c7b72a2147f9e9c371e7996e64532cd95e1e770d;hb=4f265db77684ec33f9533e7c76734498df03bba4;hp=dd1d417ff0b87346578e2fcb2be6614cab97d7e5;hpb=312e9ce192d49b4bea2f8a7e3cd2eb91a860564f;p=picodrive.git diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index dd1d417..c7b72a2 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -13,7 +13,7 @@ #include "Pico.h" -// to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile +// to select core, define EMU_C68K, EMU_M68K or EMU_A68K in your makefile or project #ifdef __cplusplus extern "C" { @@ -23,10 +23,11 @@ extern "C" { // ----------------------- 68000 CPU ----------------------- #ifdef EMU_C68K #include "../cpu/Cyclone/Cyclone.h" -extern struct Cyclone PicoCpu; +extern struct Cyclone PicoCpu, PicoCpuS68k; #define SekCyclesLeft PicoCpu.cycles // cycles left for this run #define SekSetCyclesLeft(c) PicoCpu.cycles=c #define SekPc (PicoCpu.pc-PicoCpu.membase) +#define SekPcS68k (PicoCpuS68k.pc-PicoCpuS68k.membase) #endif #ifdef EMU_A68K @@ -161,24 +162,71 @@ struct PicoSRAM // MCD #include "cd/cd_sys.h" #include "cd/LC89510.h" +#include "cd/gfx_cd.h" + +struct mcd_pcm +{ + unsigned char control; // reg7 + unsigned char enabled; // reg8 + unsigned char cur_ch; + unsigned char bank; + int pad1; + + struct pcm_chan + { + unsigned char regs[8]; + unsigned int addr; // played sample address + int pad; + } ch[8]; +}; + +struct mcd_misc +{ + unsigned short hint_vector; + unsigned char busreq; + unsigned char s68k_pend_ints; + unsigned int state_flags; // emu state: reset_pending, + unsigned int counter75hz; + unsigned short audio_offset; // for savestates: play pointer offset (0-1023) + unsigned char audio_track; // playing audio track # (zero based) + char pad1; + int timer_int3; + unsigned int timer_stopwatch; + int pad[10]; +}; typedef struct { - unsigned char bios[0x20000]; + unsigned char bios[0x20000]; // 128K union { - unsigned char prg_ram[0x80000]; + unsigned char prg_ram[0x80000]; // 512K unsigned char prg_ram_b[4][0x20000]; }; - unsigned char word_ram[0x40000]; - unsigned char s68k_regs[0x200]; - unsigned char m68k_regs[0x10]; + unsigned char word_ram[0x40000]; // 256K + union { + unsigned char pcm_ram[0x10000]; // 64K + unsigned char pcm_ram_b[0x10][0x1000]; + }; + unsigned char bram[0x2000]; // 8K + unsigned char s68k_regs[0x200]; // GA, not CPU regs + struct mcd_pcm pcm; + _scd_toc TOC; // not to be saved CDD cdd; CDC cdc; _scd scd; + Rot_Comp rot_comp; + struct mcd_misc m; } mcd_state; #define Pico_mcd ((mcd_state *)Pico.rom) +// Area.c +int PicoAreaPackCpu(unsigned char *cpu, int is_sub); +int PicoAreaUnpackCpu(unsigned char *cpu, int is_sub); + +// cd/Area.c +int PicoCdSaveState(void *file); +int PicoCdLoadState(void *file); // Draw.c int PicoLine(int scan); @@ -190,15 +238,16 @@ void PicoFrameFull(); // Memory.c int PicoInitPc(unsigned int pc); unsigned int CPU_CALL PicoRead32(unsigned int a); -int PicoMemInit(); +void PicoMemSetup(); void PicoMemReset(); -void PicoDasm(int start,int len); +//void PicoDasm(int start,int len); unsigned char z80_read(unsigned short a); unsigned short z80_read16(unsigned short a); void z80_write(unsigned char data, unsigned short a); void z80_write16(unsigned short data, unsigned short a); // cd/Memory.c +void PicoMemSetupCD(); unsigned char PicoReadCD8 (unsigned int a); unsigned short PicoReadCD16(unsigned int a); unsigned int PicoReadCD32(unsigned int a);