redquark-amiberry-rb/src/include/custom.h

187 lines
4.6 KiB
C
Raw Normal View History

2017-01-29 11:26:26 +01:00
/*
2016-11-30 22:25:43 +01:00
* UAE - The Un*x Amiga Emulator
*
* custom chip support
*
* (c) 1995 Bernd Schmidt
*/
#ifndef UAE_CUSTOM_H
#define UAE_CUSTOM_H
2015-05-13 18:47:23 +00:00
#include "machdep/rpt.h"
2015-05-13 18:47:23 +00:00
/* These are the masks that are ORed together in the chipset_mask option.
* If CSMASK_AGA is set, the ECS bits are guaranteed to be set as well. */
#define CSMASK_ECS_AGNUS 1
#define CSMASK_ECS_DENISE 2
#define CSMASK_AGA 4
#define CSMASK_MASK (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA)
2015-05-13 18:47:23 +00:00
#define CHIPSET_CLOCK_PAL 3546895
#define CHIPSET_CLOCK_NTSC 3579545
2016-11-30 22:25:43 +01:00
#define MAXHPOS_ROWS 256
#define MAXVPOS_LINES_ECS 2048
#define MAXVPOS_LINES_OCS 512
#define HPOS_SHIFT 3
2017-01-29 11:26:26 +01:00
extern void set_speedup_values();
extern int custom_init();
extern void custom_prepare();
extern void custom_reset(bool hardreset, bool keyboardreset);
extern int intlev();
2015-05-13 18:47:23 +00:00
2017-01-29 11:26:26 +01:00
extern void do_copper();
2017-01-29 11:26:26 +01:00
extern void notice_new_xcolors();
extern void init_row_map();
extern void init_hz_full();
extern void init_custom();
2015-05-13 18:47:23 +00:00
extern bool picasso_requested_on;
extern bool picasso_on;
2015-05-17 07:52:43 +00:00
2015-05-13 18:47:23 +00:00
extern unsigned long int hsync_counter;
extern uae_u16 dmacon;
extern uae_u16 intreq;
2015-05-13 18:47:23 +00:00
extern int vpos;
2017-01-29 11:26:26 +01:00
STATIC_INLINE int dmaen(unsigned int dmamask)
{
2016-11-30 22:25:43 +01:00
return (dmamask & dmacon) && (dmacon & 0x200);
}
2015-05-13 18:47:23 +00:00
#define SPCFLAG_STOP 2
#define SPCFLAG_COPPER 4
#define SPCFLAG_INT 8
#define SPCFLAG_BRK 16
#define SPCFLAG_TRACE 64
#define SPCFLAG_DOTRACE 128
#define SPCFLAG_DOINT 256 /* arg, JIT fails without this.. */
2015-05-13 18:47:23 +00:00
#define SPCFLAG_BLTNASTY 512
#define SPCFLAG_EXEC 1024
#define SPCFLAG_ACTION_REPLAY 2048
#define SPCFLAG_TRAP 4096 /* enforcer-hack */
#define SPCFLAG_MODE_CHANGE 8192
#ifdef JIT
2015-05-13 18:47:23 +00:00
#define SPCFLAG_END_COMPILE 16384
#endif
2015-05-13 18:47:23 +00:00
extern uae_u16 adkcon;
2017-01-29 11:26:26 +01:00
extern void INTREQ(uae_u16);
extern bool INTREQ_0(uae_u16);
extern void INTREQ_f(uae_u16);
STATIC_INLINE void send_interrupt(int num)
{
2017-01-29 11:26:26 +01:00
INTREQ_0(0x8000 | (1 << num));
}
2017-01-29 11:26:26 +01:00
STATIC_INLINE uae_u16 INTREQR()
{
2017-01-29 11:26:26 +01:00
return intreq;
}
2015-05-13 18:47:23 +00:00
/* maximums for statically allocated tables */
2017-01-23 16:21:29 +01:00
#ifdef UAE_MINI
/* absolute minimums for basic A500/A1200-emulation */
2015-05-13 18:47:23 +00:00
#define MAXHPOS 227
2017-01-23 16:21:29 +01:00
#define MAXVPOS 312
#else
#define MAXHPOS 256
#define MAXVPOS 592
#endif
2015-05-13 18:47:23 +00:00
/* PAL/NTSC values */
#define MAXHPOS_PAL 227
#define MAXHPOS_NTSC 227
2016-11-30 22:25:43 +01:00
// short field maxvpos
2015-05-13 18:47:23 +00:00
#define MAXVPOS_PAL 312
#define MAXVPOS_NTSC 262
2016-11-30 22:25:43 +01:00
// following endlines = first visible line
#define VBLANK_ENDLINE_PAL 26
#define VBLANK_ENDLINE_NTSC 21
2016-11-30 22:25:43 +01:00
// line when sprite DMA fetches first control words
2015-05-13 18:47:23 +00:00
#define VBLANK_SPRITE_PAL 25
#define VBLANK_SPRITE_NTSC 20
#define VBLANK_HZ_PAL 50
#define VBLANK_HZ_NTSC 60
2016-11-30 22:25:43 +01:00
#define VSYNC_ENDLINE_PAL 5
#define VSYNC_ENDLINE_NTSC 6
#define EQU_ENDLINE_PAL 8
#define EQU_ENDLINE_NTSC 10
2015-05-13 18:47:23 +00:00
2017-01-25 14:44:29 +01:00
extern int maxhpos, maxhpos_short;
2016-11-30 22:25:43 +01:00
extern int maxvpos, maxvpos_nom, maxvpos_display;
2017-01-25 14:44:29 +01:00
extern int hsyncstartpos, hsyncendpos;
extern int minfirstline, vblank_endline, numscrlines;
extern double vblank_hz, fake_vblank_hz;
extern int vblank_skip, doublescan;
extern bool programmedmode;
2015-05-13 18:47:23 +00:00
#define DMA_AUD0 0x0001
#define DMA_AUD1 0x0002
#define DMA_AUD2 0x0004
#define DMA_AUD3 0x0008
#define DMA_DISK 0x0010
#define DMA_SPRITE 0x0020
#define DMA_BLITTER 0x0040
#define DMA_COPPER 0x0080
#define DMA_BITPLANE 0x0100
#define DMA_MASTER 0x0200
#define DMA_BLITPRI 0x0400
/* 100 words give you 1600 horizontal pixels. Should be more than enough for
* superhires. Don't forget to update the definition in genp2c.c as well.
* needs to be larger for superhires support */
2017-01-23 16:21:29 +01:00
#ifdef CUSTOM_SIMPLE
#define MAX_WORDS_PER_LINE 50
#else
2015-05-13 18:47:23 +00:00
#define MAX_WORDS_PER_LINE 100
2017-01-23 16:21:29 +01:00
#endif
2015-05-13 18:47:23 +00:00
/* AGA mode color lookup tables */
extern unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256];
#define RES_LORES 0
#define RES_HIRES 1
#define RES_SUPERHIRES 2
#define RES_MAX 2
2015-05-13 18:47:23 +00:00
/* get resolution from bplcon0 */
2017-01-29 11:26:26 +01:00
STATIC_INLINE int GET_RES_DENISE(uae_u16 con0)
{
2017-01-23 16:21:29 +01:00
if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE))
con0 &= ~0x40; // SUPERHIRES
return ((con0) & 0x40) ? RES_SUPERHIRES : ((con0) & 0x8000) ? RES_HIRES : RES_LORES;
}
2017-01-29 11:26:26 +01:00
STATIC_INLINE int GET_RES_AGNUS(uae_u16 con0)
{
2017-01-29 11:26:26 +01:00
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
2017-01-23 16:21:29 +01:00
con0 &= ~0x40; // SUPERHIRES
2017-01-29 11:26:26 +01:00
return ((con0) & 0x40) ? RES_SUPERHIRES : ((con0) & 0x8000) ? RES_HIRES : RES_LORES;
}
2017-01-29 11:26:26 +01:00
2015-05-13 18:47:23 +00:00
/* get sprite width from FMODE */
#define GET_SPRITEWIDTH(FMODE) ((((FMODE) >> 2) & 3) == 3 ? 64 : (((FMODE) >> 2) & 3) == 0 ? 16 : 32)
/* Compute the number of bitplanes from a value written to BPLCON0 */
STATIC_INLINE int GET_PLANES(uae_u16 bplcon0)
{
2017-01-29 11:26:26 +01:00
if ((bplcon0 & 0x0010) && (bplcon0 & 0x7000))
return 0; // >8 planes = 0 planes
if (bplcon0 & 0x0010)
return 8; // AGA 8-planes bit
return (bplcon0 >> 12) & 7; // normal planes bits
}
2015-05-13 18:47:23 +00:00
2017-01-29 11:26:26 +01:00
extern void fpscounter_reset();
2015-05-13 18:47:23 +00:00
2017-01-29 11:26:26 +01:00
extern int current_maxvpos();
2016-11-30 22:25:43 +01:00
#endif /* CUSTOM_H */