notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cd: fix yet more desyncs
[picodrive.git]
/
pico
/
pico_int.h
diff --git
a/pico/pico_int.h
b/pico/pico_int.h
index
6096e13
..
ccc1a9b
100644
(file)
--- a/
pico/pico_int.h
+++ b/
pico/pico_int.h
@@
-51,6
+51,9
@@
extern struct Cyclone PicoCpuCM68k, PicoCpuCS68k;
#define SekIsStoppedS68k() (PicoCpuCS68k.state_flags&1)
\r
#define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7))
\r
\r
#define SekIsStoppedS68k() (PicoCpuCS68k.state_flags&1)
\r
#define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7))
\r
\r
+#define SekNotPolling PicoCpuCM68k.not_pol
\r
+#define SekNotPollingS68k PicoCpuCS68k.not_pol
\r
+
\r
#define SekInterrupt(i) PicoCpuCM68k.irq=i
\r
#define SekIrqLevel PicoCpuCM68k.irq
\r
\r
#define SekInterrupt(i) PicoCpuCM68k.irq=i
\r
#define SekIrqLevel PicoCpuCM68k.irq
\r
\r
@@
-79,6
+82,9
@@
extern M68K_CONTEXT PicoCpuFM68k, PicoCpuFS68k;
#define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED)
\r
#define SekShouldInterrupt() fm68k_would_interrupt()
\r
\r
#define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED)
\r
#define SekShouldInterrupt() fm68k_would_interrupt()
\r
\r
+#define SekNotPolling PicoCpuFM68k.not_polling
\r
+#define SekNotPollingS68k PicoCpuFS68k.not_polling
\r
+
\r
#define SekInterrupt(irq) PicoCpuFM68k.interrupts[0]=irq
\r
#define SekIrqLevel PicoCpuFM68k.interrupts[0]
\r
\r
#define SekInterrupt(irq) PicoCpuFM68k.interrupts[0]=irq
\r
#define SekIrqLevel PicoCpuFM68k.interrupts[0]
\r
\r
@@
-108,6
+114,9
@@
extern m68ki_cpu_core PicoCpuMM68k, PicoCpuMS68k;
#define SekIsStoppedS68k() (PicoCpuMS68k.stopped==STOP_LEVEL_STOP)
\r
#define SekShouldInterrupt() (CPU_INT_LEVEL > FLAG_INT_MASK)
\r
\r
#define SekIsStoppedS68k() (PicoCpuMS68k.stopped==STOP_LEVEL_STOP)
\r
#define SekShouldInterrupt() (CPU_INT_LEVEL > FLAG_INT_MASK)
\r
\r
+#define SekNotPolling PicoCpuMM68k.not_polling
\r
+#define SekNotPollingS68k PicoCpuMS68k.not_polling
\r
+
\r
#define SekInterrupt(irq) { \
\r
void *oldcontext = m68ki_cpu_p; \
\r
m68k_set_context(&PicoCpuMM68k); \
\r
#define SekInterrupt(irq) { \
\r
void *oldcontext = m68ki_cpu_p; \
\r
m68k_set_context(&PicoCpuMM68k); \
\r
@@
-298,7
+307,7
@@
struct PicoMisc
unsigned char sram_reg; // 09 SRAM reg. See SRR_* below
\r
unsigned short z80_bank68k; // 0a
\r
unsigned short pad0;
\r
unsigned char sram_reg; // 09 SRAM reg. See SRR_* below
\r
unsigned short z80_bank68k; // 0a
\r
unsigned short pad0;
\r
- unsigned char
pad1;
\r
+ unsigned char
ncart_in; // 0e !cart_in
\r
unsigned char z80_reset; // 0f z80 reset held
\r
unsigned char padDelay[2]; // 10 gamepad phase time outs, so we count a delay
\r
unsigned short eeprom_addr; // EEPROM address register
\r
unsigned char z80_reset; // 0f z80 reset held
\r
unsigned char padDelay[2]; // 10 gamepad phase time outs, so we count a delay
\r
unsigned short eeprom_addr; // EEPROM address register
\r
@@
-369,13
+378,15
@@
struct PicoSRAM
#include "cd/LC89510.h"
\r
#include "cd/gfx_cd.h"
\r
\r
#include "cd/LC89510.h"
\r
#include "cd/gfx_cd.h"
\r
\r
+#define PCM_MIXBUF_LEN ((12500000 / 384) / 50 + 1)
\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
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
+
unsigned int update_cycles
;
\r
\r
struct pcm_chan // 08, size 0x10
\r
{
\r
\r
struct pcm_chan // 08, size 0x10
\r
{
\r
@@
-436,6
+447,9
@@
typedef struct
CDC cdc;
\r
_scd scd;
\r
Rot_Comp rot_comp;
\r
CDC cdc;
\r
_scd scd;
\r
Rot_Comp rot_comp;
\r
+ int pcm_mixbuf[PCM_MIXBUF_LEN * 2];
\r
+ int pcm_mixpos;
\r
+ int pcm_mixbuf_dirty;
\r
} mcd_state;
\r
\r
// XXX: this will need to be reworked for cart+cd support.
\r
} mcd_state;
\r
\r
// XXX: this will need to be reworked for cart+cd support.
\r
@@
-443,6
+457,7
@@
typedef struct
\r
// 32X
\r
#define P32XS_FM (1<<15)
\r
\r
// 32X
\r
#define P32XS_FM (1<<15)
\r
+#define P32XS_nCART (1<< 8)
\r
#define P32XS_REN (1<< 7)
\r
#define P32XS_nRES (1<< 1)
\r
#define P32XS_ADEN (1<< 0)
\r
#define P32XS_REN (1<< 7)
\r
#define P32XS_nRES (1<< 1)
\r
#define P32XS_ADEN (1<< 0)
\r
@@
-598,6
+613,10
@@
PICO_INTERNAL void PicoMemSetupPico(void);
\r
// cd/memory.c
\r
PICO_INTERNAL void PicoMemSetupCD(void);
\r
\r
// cd/memory.c
\r
PICO_INTERNAL void PicoMemSetupCD(void);
\r
+unsigned int PicoRead8_mcd_io(unsigned int a);
\r
+unsigned int PicoRead16_mcd_io(unsigned int a);
\r
+void PicoWrite8_mcd_io(unsigned int a, unsigned int d);
\r
+void PicoWrite16_mcd_io(unsigned int a, unsigned int d);
\r
void pcd_state_loaded_mem(void);
\r
\r
// pico.c
\r
void pcd_state_loaded_mem(void);
\r
\r
// pico.c
\r
@@
-638,8
+657,16
@@
void pcd_event_schedule(unsigned int now, enum pcd_event event, int after);
void pcd_event_schedule_s68k(enum pcd_event event, int after);
\r
unsigned int pcd_cycles_m68k_to_s68k(unsigned int c);
\r
int pcd_sync_s68k(unsigned int m68k_target, int m68k_poll_sync);
\r
void pcd_event_schedule_s68k(enum pcd_event event, int after);
\r
unsigned int pcd_cycles_m68k_to_s68k(unsigned int c);
\r
int pcd_sync_s68k(unsigned int m68k_target, int m68k_poll_sync);
\r
+void pcd_run_cpus(int m68k_cycles);
\r
+void pcd_soft_reset(void);
\r
void pcd_state_loaded(void);
\r
\r
void pcd_state_loaded(void);
\r
\r
+// cd/pcm.c
\r
+void pcd_pcm_sync(unsigned int to);
\r
+void pcd_pcm_update(int *buffer, int length, int stereo);
\r
+void pcd_pcm_write(unsigned int a, unsigned int d);
\r
+unsigned int pcd_pcm_read(unsigned int a);
\r
+
\r
// pico/pico.c
\r
PICO_INTERNAL void PicoInitPico(void);
\r
PICO_INTERNAL void PicoReratePico(void);
\r
// pico/pico.c
\r
PICO_INTERNAL void PicoInitPico(void);
\r
PICO_INTERNAL void PicoReratePico(void);
\r