notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ROM loader error handling improved
[picodrive.git]
/
Pico
/
PicoInt.h
diff --git
a/Pico/PicoInt.h
b/Pico/PicoInt.h
index
cd5ba5b
..
7d4b06f
100644
(file)
--- a/
Pico/PicoInt.h
+++ b/
Pico/PicoInt.h
@@
-1,7
+1,7
@@
// Pico Library - Internal Header File
\r
\r
// (c) Copyright 2004 Dave, All rights reserved.
\r
// Pico Library - Internal Header File
\r
\r
// (c) Copyright 2004 Dave, All rights reserved.
\r
-// (c) Copyright 2006
,2007
Grazvydas "notaz" Ignotas, all rights reserved.
\r
+// (c) Copyright 2006
-2008
Grazvydas "notaz" Ignotas, all rights reserved.
\r
// Free for non-commercial use.
\r
\r
// For commercial use, separate licencing terms must be obtained.
\r
// Free for non-commercial use.
\r
\r
// For commercial use, separate licencing terms must be obtained.
\r
@@
-185,10
+185,7
@@
extern struct DrZ80 drZ80;
\r
#define z80_run(cycles) ((cycles) - DrZ80Run(&drZ80, cycles))
\r
#define z80_run_nr(cycles) DrZ80Run(&drZ80, cycles)
\r
\r
#define z80_run(cycles) ((cycles) - DrZ80Run(&drZ80, cycles))
\r
#define z80_run_nr(cycles) DrZ80Run(&drZ80, cycles)
\r
-#define z80_int() { \
\r
- drZ80.z80irqvector = 0xFF; /* default IRQ vector RST opcode */ \
\r
- drZ80.Z80_IRQ = 1; \
\r
-}
\r
+#define z80_int() drZ80.Z80_IRQ = 1
\r
\r
#define z80_cyclesLeft drZ80.cycles
\r
\r
\r
#define z80_cyclesLeft drZ80.cycles
\r
\r
@@
-240,7
+237,8
@@
struct PicoVideo
int status; // Status bits
\r
unsigned char pending_ints; // pending interrupts: ??VH????
\r
signed char lwrite_cnt; // VDP write count during active display line
\r
int status; // Status bits
\r
unsigned char pending_ints; // pending interrupts: ??VH????
\r
signed char lwrite_cnt; // VDP write count during active display line
\r
- unsigned char pad[0x12];
\r
+ unsigned short v_counter; // V-counter
\r
+ unsigned char pad[0x10];
\r
};
\r
\r
struct PicoMisc
\r
};
\r
\r
struct PicoMisc
\r
@@
-248,7
+246,7
@@
struct PicoMisc
unsigned char rotate;
\r
unsigned char z80Run;
\r
unsigned char padTHPhase[2]; // 02 phase of gamepad TH switches
\r
unsigned char rotate;
\r
unsigned char z80Run;
\r
unsigned char padTHPhase[2]; // 02 phase of gamepad TH switches
\r
- short scanline; // 04 0 to 261||311; -1 in fast mode
\r
+ unsigned short scanline; // 04 0 to 261||311
\r
char dirtyPal; // 06 Is the palette dirty (1 - change @ this frame, 2 - some time before)
\r
unsigned char hardware; // 07 Hardware value for country
\r
unsigned char pal; // 08 1=PAL 0=NTSC
\r
char dirtyPal; // 06 Is the palette dirty (1 - change @ this frame, 2 - some time before)
\r
unsigned char hardware; // 07 Hardware value for country
\r
unsigned char pal; // 08 1=PAL 0=NTSC
\r
@@
-262,9
+260,9
@@
struct PicoMisc
unsigned char eeprom_cycle; // EEPROM SRAM cycle number
\r
unsigned char eeprom_slave; // EEPROM slave word for X24C02 and better SRAMs
\r
unsigned char prot_bytes[2]; // simple protection faking
\r
unsigned char eeprom_cycle; // EEPROM SRAM cycle number
\r
unsigned char eeprom_slave; // EEPROM slave word for X24C02 and better SRAMs
\r
unsigned char prot_bytes[2]; // simple protection faking
\r
- unsigned short dma_xfers;
\r
+ unsigned short dma_xfers;
// 18
\r
unsigned char pad[2];
\r
unsigned char pad[2];
\r
- unsigned int frame_count;
// mainly for movies
\r
+ unsigned int frame_count;
// 1c for movies and idle det
\r
};
\r
\r
// some assembly stuff depend on these, do not touch!
\r
};
\r
\r
// some assembly stuff depend on these, do not touch!
\r
@@
-374,8
+372,8
@@
typedef struct
\r
\r
// Area.c
\r
\r
\r
// Area.c
\r
-PICO_INTERNAL
int
PicoAreaPackCpu(unsigned char *cpu, int is_sub);
\r
-PICO_INTERNAL
int
PicoAreaUnpackCpu(unsigned char *cpu, int is_sub);
\r
+PICO_INTERNAL
void
PicoAreaPackCpu(unsigned char *cpu, int is_sub);
\r
+PICO_INTERNAL
void
PicoAreaUnpackCpu(unsigned char *cpu, int is_sub);
\r
extern void (*PicoLoadStateHook)(void);
\r
\r
// cd/Area.c
\r
extern void (*PicoLoadStateHook)(void);
\r
\r
// cd/Area.c
\r
@@
-397,14
+395,17
@@
extern void (*PicoCartUnloadHook)(void);
int CM_compareRun(int cyc, int is_sub);
\r
\r
// Draw.c
\r
int CM_compareRun(int cyc, int is_sub);
\r
\r
// Draw.c
\r
-PICO_INTERNAL int PicoLine(int scan);
\r
PICO_INTERNAL void PicoFrameStart(void);
\r
PICO_INTERNAL void PicoFrameStart(void);
\r
+void PicoDrawSync(int to, int blank_last_line);
\r
+extern int DrawScanline;
\r
+#define MAX_LINE_SPRITES 29
\r
+extern unsigned char HighLnSpr[240][3 + MAX_LINE_SPRITES];
\r
\r
// Draw2.c
\r
PICO_INTERNAL void PicoFrameFull();
\r
\r
// Memory.c
\r
\r
// Draw2.c
\r
PICO_INTERNAL void PicoFrameFull();
\r
\r
// Memory.c
\r
-PICO_INTERNAL
int
PicoInitPc(unsigned int pc);
\r
+PICO_INTERNAL
void
PicoInitPc(unsigned int pc);
\r
PICO_INTERNAL unsigned int PicoCheckPc(unsigned int pc);
\r
PICO_INTERNAL_ASM unsigned int PicoRead32(unsigned int a);
\r
PICO_INTERNAL void PicoMemSetup(void);
\r
PICO_INTERNAL unsigned int PicoCheckPc(unsigned int pc);
\r
PICO_INTERNAL_ASM unsigned int PicoRead32(unsigned int a);
\r
PICO_INTERNAL void PicoMemSetup(void);
\r
@@
-436,22
+437,23
@@
PICO_INTERNAL unsigned int ym2612_read_local_68k(void);
// Pico.c
\r
extern struct Pico Pico;
\r
extern struct PicoSRAM SRam;
\r
// Pico.c
\r
extern struct Pico Pico;
\r
extern struct PicoSRAM SRam;
\r
+extern int PicoPadInt[2];
\r
extern int emustatus;
\r
extern void (*PicoResetHook)(void);
\r
extern int emustatus;
\r
extern void (*PicoResetHook)(void);
\r
-extern void (*PicoLineHook)(
int count
);
\r
+extern void (*PicoLineHook)(
void
);
\r
PICO_INTERNAL int CheckDMA(void);
\r
PICO_INTERNAL void PicoDetectRegion(void);
\r
PICO_INTERNAL void PicoSyncZ80(int m68k_cycles_done);
\r
\r
// cd/Pico.c
\r
PICO_INTERNAL int CheckDMA(void);
\r
PICO_INTERNAL void PicoDetectRegion(void);
\r
PICO_INTERNAL void PicoSyncZ80(int m68k_cycles_done);
\r
\r
// cd/Pico.c
\r
-PICO_INTERNAL
int
PicoInitMCD(void);
\r
+PICO_INTERNAL
void
PicoInitMCD(void);
\r
PICO_INTERNAL void PicoExitMCD(void);
\r
PICO_INTERNAL void PicoPowerMCD(void);
\r
PICO_INTERNAL void PicoExitMCD(void);
\r
PICO_INTERNAL void PicoPowerMCD(void);
\r
-PICO_INTERNAL int PicoResetMCD(void);
\r
-PICO_INTERNAL
int
PicoFrameMCD(void);
\r
+PICO_INTERNAL int
PicoResetMCD(void);
\r
+PICO_INTERNAL
void
PicoFrameMCD(void);
\r
\r
// Pico/Pico.c
\r
\r
// Pico/Pico.c
\r
-PICO_INTERNAL
int
PicoInitPico(void);
\r
+PICO_INTERNAL
void
PicoInitPico(void);
\r
PICO_INTERNAL void PicoReratePico(void);
\r
\r
// Pico/xpcm.c
\r
PICO_INTERNAL void PicoReratePico(void);
\r
\r
// Pico/xpcm.c
\r
@@
-460,43
+462,54
@@
PICO_INTERNAL void PicoPicoPCMReset(void);
PICO_INTERNAL void PicoPicoPCMRerate(int xpcm_rate);
\r
\r
// Sek.c
\r
PICO_INTERNAL void PicoPicoPCMRerate(int xpcm_rate);
\r
\r
// Sek.c
\r
-PICO_INTERNAL
int
SekInit(void);
\r
-PICO_INTERNAL int SekReset(void);
\r
+PICO_INTERNAL
void
SekInit(void);
\r
+PICO_INTERNAL int
SekReset(void);
\r
PICO_INTERNAL void SekState(int *data);
\r
PICO_INTERNAL void SekSetRealTAS(int use_real);
\r
PICO_INTERNAL void SekState(int *data);
\r
PICO_INTERNAL void SekSetRealTAS(int use_real);
\r
+void SekStepM68k(void);
\r
+void SekInitIdleDet(void);
\r
+void SekFinishIdleDet(void);
\r
\r
// cd/Sek.c
\r
\r
// cd/Sek.c
\r
-PICO_INTERNAL
int
SekInitS68k(void);
\r
-PICO_INTERNAL int SekResetS68k(void);
\r
-PICO_INTERNAL int SekInterruptS68k(int irq);
\r
+PICO_INTERNAL
void
SekInitS68k(void);
\r
+PICO_INTERNAL int
SekResetS68k(void);
\r
+PICO_INTERNAL int
SekInterruptS68k(int irq);
\r
\r
// sound/sound.c
\r
PICO_INTERNAL void cdda_start_play();
\r
extern short cdda_out_buffer[2*1152];
\r
extern int PsndLen_exc_cnt;
\r
extern int PsndLen_exc_add;
\r
\r
// sound/sound.c
\r
PICO_INTERNAL void cdda_start_play();
\r
extern short cdda_out_buffer[2*1152];
\r
extern int PsndLen_exc_cnt;
\r
extern int PsndLen_exc_add;
\r
-extern int timer_a_next_oflow, timer_a_step
, timer_a_offset
; // in z80 cycles
\r
-extern int timer_b_next_oflow, timer_b_step
, timer_b_offset
;
\r
+extern int timer_a_next_oflow, timer_a_step; // in z80 cycles
\r
+extern int timer_b_next_oflow, timer_b_step;
\r
\r
void ym2612_sync_timers(int z80_cycles, int mode_old, int mode_new);
\r
\r
void ym2612_sync_timers(int z80_cycles, int mode_old, int mode_new);
\r
+void ym2612_pack_state(void);
\r
void ym2612_unpack_state(void);
\r
\r
void ym2612_unpack_state(void);
\r
\r
+#define TIMER_NO_OFLOW 0x70000000
\r
+// tA = 72 * (1024 - NA) / M
\r
+#define TIMER_A_TICK_ZCYCLES 17203
\r
+// tB = 1152 * (256 - NA) / M
\r
+#define TIMER_B_TICK_ZCYCLES 262800 // 275251 broken, see Dai Makaimura
\r
+
\r
#define timers_cycle() \
\r
#define timers_cycle() \
\r
- if (timer_a_next_oflow > 0 && timer_a_next_oflow <
0x70000000
) \
\r
+ if (timer_a_next_oflow > 0 && timer_a_next_oflow <
TIMER_NO_OFLOW
) \
\r
timer_a_next_oflow -= Pico.m.pal ? 70938*256 : 59659*256; \
\r
timer_a_next_oflow -= Pico.m.pal ? 70938*256 : 59659*256; \
\r
- if (timer_b_next_oflow > 0 && timer_b_next_oflow <
0x70000000
) \
\r
+ if (timer_b_next_oflow > 0 && timer_b_next_oflow <
TIMER_NO_OFLOW
) \
\r
timer_b_next_oflow -= Pico.m.pal ? 70938*256 : 59659*256; \
\r
ym2612_sync_timers(0, ym2612.OPN.ST.mode, ym2612.OPN.ST.mode);
\r
\r
#define timers_reset() \
\r
timer_b_next_oflow -= Pico.m.pal ? 70938*256 : 59659*256; \
\r
ym2612_sync_timers(0, ym2612.OPN.ST.mode, ym2612.OPN.ST.mode);
\r
\r
#define timers_reset() \
\r
- timer_a_next_oflow = timer_b_next_oflow =
0x70000000
; \
\r
- timer_a_step =
timer_a_offset = 16495
* 1024; \
\r
- timer_b_step =
timer_b_offset = 263912
* 256;
\r
+ timer_a_next_oflow = timer_b_next_oflow =
TIMER_NO_OFLOW
; \
\r
+ timer_a_step =
TIMER_A_TICK_ZCYCLES
* 1024; \
\r
+ timer_b_step =
TIMER_B_TICK_ZCYCLES
* 256;
\r
\r
\r
// VideoPort.c
\r
PICO_INTERNAL_ASM void PicoVideoWrite(unsigned int a,unsigned short d);
\r
PICO_INTERNAL_ASM unsigned int PicoVideoRead(unsigned int a);
\r
\r
\r
// VideoPort.c
\r
PICO_INTERNAL_ASM void PicoVideoWrite(unsigned int a,unsigned short d);
\r
PICO_INTERNAL_ASM unsigned int PicoVideoRead(unsigned int a);
\r
+PICO_INTERNAL_ASM unsigned int PicoVideoRead8(unsigned int a);
\r
extern int (*PicoDmaHook)(unsigned int source, int len, unsigned short **srcp, unsigned short **limitp);
\r
\r
// Misc.c
\r
extern int (*PicoDmaHook)(unsigned int source, int len, unsigned short **srcp, unsigned short **limitp);
\r
\r
// Misc.c
\r
@@
-553,6
+566,7
@@
extern int PsndDacLine;
#define EL_CDPOLL 0x00002000 /* MCD: log poll detection */
\r
#define EL_SVP 0x00004000 /* SVP stuff */
\r
#define EL_PICOHW 0x00008000 /* Pico stuff */
\r
#define EL_CDPOLL 0x00002000 /* MCD: log poll detection */
\r
#define EL_SVP 0x00004000 /* SVP stuff */
\r
#define EL_PICOHW 0x00008000 /* Pico stuff */
\r
+#define EL_IDLE 0x00010000 /* idle loop det. */
\r
\r
#define EL_STATUS 0x40000000 /* status messages */
\r
#define EL_ANOMALY 0x80000000 /* some unexpected conditions (during emulation) */
\r
\r
#define EL_STATUS 0x40000000 /* status messages */
\r
#define EL_ANOMALY 0x80000000 /* some unexpected conditions (during emulation) */
\r