X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fpico_int.h;h=3a530ca20800249e561138693106e6cff7307dd5;hb=ecc8036ee27ec57454c3fe736a71dd9c0cbcf3de;hp=9b597d819894deb15af8cd70d486a433b0e6a7d1;hpb=08769494e89920b5987f10c9d15e33e4e0110930;p=picodrive.git diff --git a/pico/pico_int.h b/pico/pico_int.h index 9b597d8..3a530ca 100644 --- 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) #define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7)) +#define SekNotPolling PicoCpuCM68k.not_pol +#define SekNotPollingS68k PicoCpuCS68k.not_pol + #define SekInterrupt(i) PicoCpuCM68k.irq=i #define SekIrqLevel PicoCpuCM68k.irq @@ -79,6 +82,9 @@ extern M68K_CONTEXT PicoCpuFM68k, PicoCpuFS68k; #define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED) #define SekShouldInterrupt() fm68k_would_interrupt() +#define SekNotPolling PicoCpuFM68k.not_polling +#define SekNotPollingS68k PicoCpuFS68k.not_polling + #define SekInterrupt(irq) PicoCpuFM68k.interrupts[0]=irq #define SekIrqLevel PicoCpuFM68k.interrupts[0] @@ -108,6 +114,9 @@ extern m68ki_cpu_core PicoCpuMM68k, PicoCpuMS68k; #define SekIsStoppedS68k() (PicoCpuMS68k.stopped==STOP_LEVEL_STOP) #define SekShouldInterrupt() (CPU_INT_LEVEL > FLAG_INT_MASK) +#define SekNotPolling PicoCpuMM68k.not_polling +#define SekNotPollingS68k PicoCpuMS68k.not_polling + #define SekInterrupt(irq) { \ void *oldcontext = m68ki_cpu_p; \ m68k_set_context(&PicoCpuMM68k); \ @@ -134,8 +143,6 @@ extern unsigned int SekCycleAim; #define SekCyclesBurn(c) SekCycleCnt += c #define SekCyclesBurnRun(c) { \ SekCyclesLeft -= c; \ - if (SekCyclesLeft < 0) \ - SekCyclesLeft = 0; \ } // note: sometimes may extend timeslice to delay an irq @@ -174,6 +181,8 @@ extern struct DrZ80 drZ80; #define z80_run(cycles) ((cycles) - DrZ80Run(&drZ80, cycles)) #define z80_run_nr(cycles) DrZ80Run(&drZ80, cycles) #define z80_int() drZ80.Z80_IRQ = 1 +#define z80_int() drZ80.Z80_IRQ = 1 +#define z80_nmi() drZ80.Z80IF |= 8 #define z80_cyclesLeft drZ80.cycles #define z80_pc() (drZ80.Z80PC - drZ80.Z80PC_BASE) @@ -184,6 +193,7 @@ extern struct DrZ80 drZ80; #define z80_run(cycles) Cz80_Exec(&CZ80, cycles) #define z80_run_nr(cycles) Cz80_Exec(&CZ80, cycles) #define z80_int() Cz80_Set_IRQ(&CZ80, 0, HOLD_LINE) +#define z80_nmi() Cz80_Set_IRQ(&CZ80, IRQ_LINE_NMI, 0) #define z80_cyclesLeft (CZ80.ICount - CZ80.ExtraCycles) #define z80_pc() Cz80_Get_Reg(&CZ80, CZ80_PC) @@ -193,6 +203,7 @@ extern struct DrZ80 drZ80; #define z80_run(cycles) (cycles) #define z80_run_nr(cycles) #define z80_int() +#define z80_nmi() #endif @@ -313,7 +324,8 @@ struct PicoMS { unsigned char carthw[0x10]; unsigned char io_ctl; - unsigned char pad[0x4f]; + unsigned char nmi_state; + unsigned char pad[0x4e]; }; // some assembly stuff depend on these, do not touch! @@ -382,10 +394,12 @@ struct mcd_pcm } ch[8]; }; +#define PCD_ST_S68K_RST 1 + struct mcd_misc { unsigned short hint_vector; - unsigned char busreq; + unsigned char busreq; // not s68k_regs[1] unsigned char s68k_pend_ints; unsigned int state_flags; // 04 unsigned int stopwatch_base_c; @@ -395,7 +409,7 @@ struct mcd_misc unsigned short s68k_poll_cnt; unsigned int s68k_poll_clk; unsigned char bcram_reg; // 18: battery-backed RAM cart register - unsigned char pad2; + unsigned char dmna_ret_2m; unsigned short pad3; int pad4[9]; }; @@ -607,7 +621,7 @@ PICO_INTERNAL int CheckDMA(void); PICO_INTERNAL void PicoDetectRegion(void); PICO_INTERNAL void PicoSyncZ80(unsigned int m68k_cycles_done); -// cd/pico.c +// cd/mcd.c #define PCDS_IEN1 (1<<1) #define PCDS_IEN2 (1<<2) #define PCDS_IEN3 (1<<3) @@ -697,6 +711,7 @@ void ym2612_unpack_state(void); // videoport.c +extern int line_base_cycles; PICO_INTERNAL_ASM void PicoVideoWrite(unsigned int a,unsigned short d); PICO_INTERNAL_ASM unsigned int PicoVideoRead(unsigned int a); PICO_INTERNAL_ASM unsigned int PicoVideoRead8(unsigned int a); @@ -828,9 +843,9 @@ void sh2_peripheral_reset(SH2 *sh2); unsigned int sh2_peripheral_read8(unsigned int a, SH2 *sh2); unsigned int sh2_peripheral_read16(unsigned int a, SH2 *sh2); unsigned int sh2_peripheral_read32(unsigned int a, SH2 *sh2); -void sh2_peripheral_write8(unsigned int a, unsigned int d, SH2 *sh2); -void sh2_peripheral_write16(unsigned int a, unsigned int d, SH2 *sh2); -void sh2_peripheral_write32(unsigned int a, unsigned int d, SH2 *sh2); +void REGPARM(3) sh2_peripheral_write8(unsigned int a, unsigned int d, SH2 *sh2); +void REGPARM(3) sh2_peripheral_write16(unsigned int a, unsigned int d, SH2 *sh2); +void REGPARM(3) sh2_peripheral_write32(unsigned int a, unsigned int d, SH2 *sh2); #else #define Pico32xInit() @@ -959,7 +974,7 @@ void pevt_dump(void); #define cdprintf(x...) #endif -#ifdef __i386__ +#if defined(__GNUC__) && defined(__i386__) #define REGPARM(x) __attribute__((regparm(x))) #else #define REGPARM(x)