kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
137 wiersze
3.9 KiB
C
137 wiersze
3.9 KiB
C
#ifndef ANTIC_H_
|
|
#define ANTIC_H_
|
|
|
|
#include "atari.h"
|
|
/*
|
|
* Offset to registers in custom relative to start of antic memory addresses.
|
|
*/
|
|
|
|
#define ANTIC_OFFSET_DMACTL 0x00
|
|
#define ANTIC_OFFSET_CHACTL 0x01
|
|
#define ANTIC_OFFSET_DLISTL 0x02
|
|
#define ANTIC_OFFSET_DLISTH 0x03
|
|
#define ANTIC_OFFSET_HSCROL 0x04
|
|
#define ANTIC_OFFSET_VSCROL 0x05
|
|
#define ANTIC_OFFSET_PMBASE 0x07
|
|
#define ANTIC_OFFSET_CHBASE 0x09
|
|
#define ANTIC_OFFSET_WSYNC 0x0a
|
|
#define ANTIC_OFFSET_VCOUNT 0x0b
|
|
#define ANTIC_OFFSET_PENH 0x0c
|
|
#define ANTIC_OFFSET_PENV 0x0d
|
|
#define ANTIC_OFFSET_NMIEN 0x0e
|
|
#define ANTIC_OFFSET_NMIRES 0x0f
|
|
#define ANTIC_OFFSET_NMIST 0x0f
|
|
|
|
extern UBYTE ANTIC_CHACTL;
|
|
extern UBYTE ANTIC_CHBASE;
|
|
extern UWORD ANTIC_dlist;
|
|
extern UBYTE ANTIC_DMACTL;
|
|
extern UBYTE ANTIC_HSCROL;
|
|
extern UBYTE ANTIC_NMIEN;
|
|
extern UBYTE ANTIC_NMIST;
|
|
extern UBYTE ANTIC_PMBASE;
|
|
extern UBYTE ANTIC_VSCROL;
|
|
|
|
extern int ANTIC_break_ypos;
|
|
extern int ANTIC_ypos;
|
|
extern int ANTIC_wsync_halt;
|
|
|
|
/* Current clock cycle in a scanline.
|
|
Normally 0 <= ANTIC_xpos && ANTIC_xpos < ANTIC_LINE_C, but in some cases ANTIC_xpos >= ANTIC_LINE_C,
|
|
which means that we are already in line (ypos + 1). */
|
|
extern int ANTIC_xpos;
|
|
|
|
/* ANTIC_xpos limit for the currently running 6502 emulation. */
|
|
extern int ANTIC_xpos_limit;
|
|
|
|
/* Main clock value at the beginning of the current scanline. */
|
|
extern unsigned int ANTIC_screenline_cpu_clock;
|
|
|
|
/* Current main clock value. */
|
|
#define ANTIC_CPU_CLOCK (ANTIC_screenline_cpu_clock + ANTIC_XPOS)
|
|
|
|
#define ANTIC_NMIST_C 6
|
|
#define ANTIC_NMI_C 12
|
|
|
|
/* Number of cycles per scanline. */
|
|
#define ANTIC_LINE_C 114
|
|
|
|
/* STA WSYNC resumes here. */
|
|
#define ANTIC_WSYNC_C 106
|
|
|
|
/* Number of memory refresh cycles per scanline.
|
|
In the first scanline of a font mode there are actually less than ANTIC_DMAR
|
|
memory refresh cycles. */
|
|
#define ANTIC_DMAR 9
|
|
|
|
extern int ANTIC_artif_mode;
|
|
extern int ANTIC_artif_new;
|
|
|
|
extern UBYTE ANTIC_PENH_input;
|
|
extern UBYTE ANTIC_PENV_input;
|
|
|
|
int ANTIC_Initialise(void);
|
|
void ANTIC_Reset(void);
|
|
void ANTIC_Frame(int draw_display);
|
|
UBYTE ANTIC_GetByte(UWORD addr, int no_side_effects);
|
|
void ANTIC_PutByte(UWORD addr, UBYTE byte);
|
|
|
|
UBYTE ANTIC_GetDLByte(UWORD *paddr);
|
|
UWORD ANTIC_GetDLWord(UWORD *paddr);
|
|
|
|
/* always call ANTIC_UpdateArtifacting after changing ANTIC_artif_mode */
|
|
void ANTIC_UpdateArtifacting(void);
|
|
|
|
/* Video memory access */
|
|
void ANTIC_VideoMemset(UBYTE *ptr, UBYTE val, ULONG size);
|
|
void ANTIC_VideoPutByte(UBYTE *ptr, UBYTE val);
|
|
|
|
/* GTIA calls it on a write to PRIOR */
|
|
void ANTIC_SetPrior(UBYTE prior);
|
|
|
|
/* Saved states */
|
|
void ANTIC_StateSave(void);
|
|
void ANTIC_StateRead(void);
|
|
|
|
/* Pointer to 16 KB seen by ANTIC in 0x4000-0x7fff.
|
|
If it's the same what the CPU sees (and what's in memory[0x4000..0x7fff],
|
|
then NULL. */
|
|
extern const UBYTE *ANTIC_xe_ptr;
|
|
|
|
/* PM graphics for GTIA */
|
|
extern int ANTIC_player_dma_enabled;
|
|
extern int ANTIC_missile_dma_enabled;
|
|
extern int ANTIC_player_gra_enabled;
|
|
extern int ANTIC_missile_gra_enabled;
|
|
extern int ANTIC_player_flickering;
|
|
extern int ANTIC_missile_flickering;
|
|
|
|
/* ANTIC colour lookup tables, used by GTIA */
|
|
extern UWORD ANTIC_cl[128];
|
|
extern ULONG ANTIC_lookup_gtia9[16];
|
|
extern ULONG ANTIC_lookup_gtia11[16];
|
|
extern UWORD ANTIC_hires_lookup_l[128];
|
|
|
|
#ifdef NEW_CYCLE_EXACT
|
|
#define ANTIC_NOT_DRAWING -999
|
|
#define ANTIC_DRAWING_SCREEN (ANTIC_cur_screen_pos!=ANTIC_NOT_DRAWING)
|
|
extern int ANTIC_delayed_wsync;
|
|
extern int ANTIC_cur_screen_pos;
|
|
extern const int *ANTIC_cpu2antic_ptr;
|
|
extern const int *ANTIC_antic2cpu_ptr;
|
|
void ANTIC_UpdateScanline(void);
|
|
void ANTIC_UpdateScanlinePrior(UBYTE byte);
|
|
|
|
#define ANTIC_XPOS ( ANTIC_DRAWING_SCREEN ? ANTIC_cpu2antic_ptr[ANTIC_xpos] : ANTIC_xpos )
|
|
#else
|
|
#define ANTIC_XPOS ANTIC_xpos
|
|
#endif /* NEW_CYCLE_EXACT */
|
|
|
|
#ifndef NO_SIMPLE_PAL_BLENDING
|
|
/* Set to 1 to enable simplified emulation of PAL blending, that uses only
|
|
the standard 8-bit palette. */
|
|
extern int ANTIC_pal_blending;
|
|
#endif /* NO_SIMPLE_PAL_BLENDING */
|
|
|
|
#endif /* ANTIC_H_ */
|