Minor Custom improvements
Enabled custom_line and magic_sprite_mask
This commit is contained in:
parent
2af3b99e24
commit
35df876edf
3 changed files with 137 additions and 40 deletions
|
@ -58,9 +58,9 @@ static uaecptr blit_waitpc;
|
||||||
static int blit_maxcyclecounter, blit_slowdown, blit_totalcyclecounter;
|
static int blit_maxcyclecounter, blit_slowdown, blit_totalcyclecounter;
|
||||||
static int blit_startcycles, blit_misscyclecounter;
|
static int blit_startcycles, blit_misscyclecounter;
|
||||||
|
|
||||||
#ifdef CPUEMU_13
|
//#ifdef CPUEMU_13
|
||||||
extern uae_u8 cycle_line[256];
|
extern uae_u8 cycle_line[256];
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
static long blit_firstline_cycles;
|
static long blit_firstline_cycles;
|
||||||
static long blit_first_cycle;
|
static long blit_first_cycle;
|
||||||
|
@ -313,6 +313,18 @@ int blitter_channel_state (void)
|
||||||
return channel_state (blit_cyclecounter);
|
return channel_state (blit_cyclecounter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_INLINE int canblit(int hpos)
|
||||||
|
{
|
||||||
|
if (!dmaen(DMA_BLITTER))
|
||||||
|
return -1;
|
||||||
|
if (is_bitplane_dma(hpos))
|
||||||
|
return 0;
|
||||||
|
if (cycle_line[hpos] & CYCLE_MASK) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void reset_channel_mods (void)
|
static void reset_channel_mods (void)
|
||||||
{
|
{
|
||||||
if (bltptxpos < 0)
|
if (bltptxpos < 0)
|
||||||
|
@ -877,7 +889,20 @@ static void blitter_force_finish(void)
|
||||||
*/
|
*/
|
||||||
odmacon = dmacon;
|
odmacon = dmacon;
|
||||||
dmacon |= DMA_MASTER | DMA_BLITTER;
|
dmacon |= DMA_MASTER | DMA_BLITTER;
|
||||||
actually_do_blit();
|
if (blitter_cycle_exact && !immediate_blits) {
|
||||||
|
int rounds = 10000;
|
||||||
|
while (bltstate != BLT_done && rounds > 0) {
|
||||||
|
memset(cycle_line, 0, sizeof cycle_line);
|
||||||
|
decide_blitter(-1);
|
||||||
|
rounds--;
|
||||||
|
}
|
||||||
|
if (rounds == 0)
|
||||||
|
write_log(_T("blitter froze!?\n"));
|
||||||
|
blit_startcycles = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
actually_do_blit();
|
||||||
|
}
|
||||||
blitter_done(current_hpos());
|
blitter_done(current_hpos());
|
||||||
dmacon = odmacon;
|
dmacon = odmacon;
|
||||||
}
|
}
|
||||||
|
|
145
src/custom.cpp
145
src/custom.cpp
|
@ -45,6 +45,10 @@
|
||||||
|
|
||||||
#define SPRBORDER 0
|
#define SPRBORDER 0
|
||||||
|
|
||||||
|
#ifdef AMIBERRY
|
||||||
|
int debug_sprite_mask = 0xff;
|
||||||
|
#endif
|
||||||
|
|
||||||
STATIC_INLINE bool nocustom (void)
|
STATIC_INLINE bool nocustom (void)
|
||||||
{
|
{
|
||||||
struct amigadisplay *ad = &adisplays;
|
struct amigadisplay *ad = &adisplays;
|
||||||
|
@ -221,7 +225,7 @@ static bool sprite_ignoreverticaluntilnextline;
|
||||||
uaecptr sprite_0;
|
uaecptr sprite_0;
|
||||||
int sprite_0_width, sprite_0_height, sprite_0_doubled;
|
int sprite_0_width, sprite_0_height, sprite_0_doubled;
|
||||||
uae_u32 sprite_0_colors[4];
|
uae_u32 sprite_0_colors[4];
|
||||||
//static uae_u8 magic_sprite_mask = 0xff;
|
static uae_u8 magic_sprite_mask = 0xff;
|
||||||
|
|
||||||
static int sprite_vblank_endline = VBLANK_SPRITE_PAL;
|
static int sprite_vblank_endline = VBLANK_SPRITE_PAL;
|
||||||
|
|
||||||
|
@ -230,9 +234,9 @@ static int sprite_width, sprres;
|
||||||
static int sprite_sprctlmask;
|
static int sprite_sprctlmask;
|
||||||
int sprite_buffer_res;
|
int sprite_buffer_res;
|
||||||
|
|
||||||
#ifdef CPUEMU_13
|
//#ifdef CPUEMU_13
|
||||||
uae_u8 cycle_line[256 + 1];
|
uae_u8 cycle_line[256 + 1];
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
static bool bpl1dat_written, bpl1dat_written_at_least_once;
|
static bool bpl1dat_written, bpl1dat_written_at_least_once;
|
||||||
static bool bpldmawasactive;
|
static bool bpldmawasactive;
|
||||||
|
@ -458,7 +462,7 @@ STATIC_INLINE int ecsshres(void)
|
||||||
STATIC_INLINE int nodraw(void)
|
STATIC_INLINE int nodraw(void)
|
||||||
{
|
{
|
||||||
struct amigadisplay *ad = &adisplays;
|
struct amigadisplay *ad = &adisplays;
|
||||||
return ad->framecnt != 0;
|
return !currprefs.cpu_memory_cycle_exact && ad->framecnt != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int doflickerfix (void)
|
static int doflickerfix (void)
|
||||||
|
@ -495,6 +499,37 @@ STATIC_INLINE void setclr (uae_u16 *p, uae_u16 val)
|
||||||
*p &= ~val;
|
*p &= ~val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STATIC_INLINE void alloc_cycle (int hpos, int type)
|
||||||
|
{
|
||||||
|
//#ifdef CPUEMU_13
|
||||||
|
cycle_line[hpos] = type;
|
||||||
|
//#endif
|
||||||
|
}
|
||||||
|
STATIC_INLINE void alloc_cycle_maybe (int hpos, int type)
|
||||||
|
{
|
||||||
|
if ((cycle_line[hpos] & CYCLE_MASK) == 0)
|
||||||
|
alloc_cycle (hpos, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
void alloc_cycle_ext (int hpos, int type)
|
||||||
|
{
|
||||||
|
alloc_cycle (hpos, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
void alloc_cycle_blitter (int hpos, uaecptr *ptr, int chnum)
|
||||||
|
{
|
||||||
|
if (cycle_line[hpos] & CYCLE_COPPER_SPECIAL) {
|
||||||
|
if ((currprefs.cs_hacks & 1) && currprefs.cpu_model == 68000) {
|
||||||
|
uaecptr srcptr = cop_state.strobe == 1 ? cop1lc : cop2lc;
|
||||||
|
//if (currprefs.cpu_model == 68000 && currprefs.cpu_cycle_exact && currprefs.blitter_cycle_exact) {
|
||||||
|
// batman group / batman vuelve triggers this incorrectly. More testing needed.
|
||||||
|
*ptr = srcptr;
|
||||||
|
//activate_debugger();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
alloc_cycle (hpos, CYCLE_BLITTER);
|
||||||
|
}
|
||||||
|
|
||||||
static int expand_sprres(uae_u16 con0, uae_u16 con3)
|
static int expand_sprres(uae_u16 con0, uae_u16 con3)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
@ -1028,7 +1063,21 @@ STATIC_INLINE int isocs7planes (void)
|
||||||
return !(currprefs.chipset_mask & CSMASK_AGA) && bplcon0_res == 0 && bplcon0_planes == 7;
|
return !(currprefs.chipset_mask & CSMASK_AGA) && bplcon0_res == 0 && bplcon0_planes == 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC_INLINE int is_bitplane_dma (int hpos)
|
int is_bitplane_dma(int hpos)
|
||||||
|
{
|
||||||
|
if (hpos < bpl_hstart || fetch_state == fetch_not_started || plf_state == plf_wait) {
|
||||||
|
if (bitplane_overrun && hpos < bitplane_overrun_hpos) {
|
||||||
|
return curr_diagram[(hpos - bitplane_overrun_cycle_diagram_shift) & fetchstart_mask];
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ((plf_state >= plf_end && hpos >= thisline_decision.plfright)
|
||||||
|
|| hpos >= estimated_last_fetch_cycle)
|
||||||
|
return 0;
|
||||||
|
return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask];
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC_INLINE int is_bitplane_dma_inline(int hpos)
|
||||||
{
|
{
|
||||||
if (hpos < bpl_hstart || fetch_state == fetch_not_started || plf_state == plf_wait) {
|
if (hpos < bpl_hstart || fetch_state == fetch_not_started || plf_state == plf_wait) {
|
||||||
if (bitplane_overrun && hpos < bitplane_overrun_hpos) {
|
if (bitplane_overrun && hpos < bitplane_overrun_hpos) {
|
||||||
|
@ -1162,10 +1211,8 @@ static void setup_fmodes (int hpos)
|
||||||
thisline_decision.nr_planes = bplcon0_planes;
|
thisline_decision.nr_planes = bplcon0_planes;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CPUEMU_13
|
|
||||||
if (is_bitplane_dma (hpos - 1))
|
if (is_bitplane_dma (hpos - 1))
|
||||||
cycle_line[hpos - 1] = 1;
|
cycle_line[hpos - 1] = 1;
|
||||||
#endif
|
|
||||||
curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit];
|
curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit];
|
||||||
estimate_last_fetch_cycle (hpos);
|
estimate_last_fetch_cycle (hpos);
|
||||||
bpldmasetuphpos = -1;
|
bpldmasetuphpos = -1;
|
||||||
|
@ -3789,6 +3836,9 @@ static void decide_sprites(int hpos, bool usepointx, bool quick)
|
||||||
if (xpos < 0)
|
if (xpos < 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!((debug_sprite_mask & magic_sprite_mask) & (1 << i)))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (! spr[i].armed)
|
if (! spr[i].armed)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -4308,6 +4358,9 @@ void compute_framesync(void)
|
||||||
v = cr->rate;
|
v = cr->rate;
|
||||||
if (v > 0) {
|
if (v > 0) {
|
||||||
changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v;
|
changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v;
|
||||||
|
cfgfile_parse_lines (&changed_prefs, cr->commands, -1);
|
||||||
|
if (cr->commands[0])
|
||||||
|
write_log (_T("CMD2: '%s'\n"), cr->commands);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -4640,6 +4693,11 @@ static void init_hz (bool checkvposw)
|
||||||
compute_framesync ();
|
compute_framesync ();
|
||||||
//devices_syncchange();
|
//devices_syncchange();
|
||||||
|
|
||||||
|
#ifdef PICASSO96
|
||||||
|
init_hz_p96();
|
||||||
|
#endif
|
||||||
|
//if (vblank_hz != ovblank)
|
||||||
|
// updatedisplayarea();
|
||||||
inputdevice_tablet_strobe ();
|
inputdevice_tablet_strobe ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6070,7 +6128,7 @@ static void SPRxDATB_1(uae_u16 v, int num, int hpos)
|
||||||
// cycle is DMA fetch: sprite's first 32 pixels get replaced with bitplane data.
|
// cycle is DMA fetch: sprite's first 32 pixels get replaced with bitplane data.
|
||||||
static void sprite_get_bpl_data(int hpos, struct sprite *s, uae_u16 *dat)
|
static void sprite_get_bpl_data(int hpos, struct sprite *s, uae_u16 *dat)
|
||||||
{
|
{
|
||||||
int nr = is_bitplane_dma(hpos + 1);
|
int nr = is_bitplane_dma_inline(hpos + 1);
|
||||||
uae_u32 v = (fmode & 3) ? fetched_aga[nr] : fetched_aga_spr[nr];
|
uae_u32 v = (fmode & 3) ? fetched_aga[nr] : fetched_aga_spr[nr];
|
||||||
dat[0] = v >> 16;
|
dat[0] = v >> 16;
|
||||||
dat[1] = uae_u16(v);
|
dat[1] = uae_u16(v);
|
||||||
|
@ -6100,7 +6158,7 @@ static void SPRxDATA (int hpos, uae_u16 v, int num)
|
||||||
// - first 16 pixel part: previous chipset bus data
|
// - first 16 pixel part: previous chipset bus data
|
||||||
// - following 16 pixel parts: written data
|
// - following 16 pixel parts: written data
|
||||||
if (fmode & 8) {
|
if (fmode & 8) {
|
||||||
if ((fmode & 4) && is_bitplane_dma(hpos - 1)) {
|
if ((fmode & 4) && is_bitplane_dma_inline(hpos - 1)) {
|
||||||
sprite_get_bpl_data(hpos, s, &s->data[0]);
|
sprite_get_bpl_data(hpos, s, &s->data[0]);
|
||||||
} else {
|
} else {
|
||||||
s->data[0] = last_custom_value2;
|
s->data[0] = last_custom_value2;
|
||||||
|
@ -6114,7 +6172,7 @@ static void SPRxDATB (int hpos, uae_u16 v, int num)
|
||||||
SPRxDATB_1(v, num, hpos);
|
SPRxDATB_1(v, num, hpos);
|
||||||
// See above
|
// See above
|
||||||
if (fmode & 8) {
|
if (fmode & 8) {
|
||||||
if ((fmode & 4) && is_bitplane_dma(hpos - 1)) {
|
if ((fmode & 4) && is_bitplane_dma_inline(hpos - 1)) {
|
||||||
sprite_get_bpl_data(hpos, s, &s->datb[0]);
|
sprite_get_bpl_data(hpos, s, &s->datb[0]);
|
||||||
} else {
|
} else {
|
||||||
s->datb[0] = last_custom_value2;
|
s->datb[0] = last_custom_value2;
|
||||||
|
@ -6350,7 +6408,7 @@ STATIC_INLINE int copper_cant_read(int hpos)
|
||||||
if ((hpos == maxhpos - 3) && (maxhpos & 1)) {
|
if ((hpos == maxhpos - 3) && (maxhpos & 1)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return is_bitplane_dma(hpos);
|
return is_bitplane_dma_inline(hpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AMIBERRY
|
#ifdef AMIBERRY
|
||||||
|
@ -6706,6 +6764,7 @@ static void update_copper (int until_hpos)
|
||||||
// If Blitter uses this cycle = Copper's PC gets copied to blitter DMA pointer..
|
// If Blitter uses this cycle = Copper's PC gets copied to blitter DMA pointer..
|
||||||
if (copper_cant_read (old_hpos))
|
if (copper_cant_read (old_hpos))
|
||||||
continue;
|
continue;
|
||||||
|
cycle_line[old_hpos] |= CYCLE_COPPER_SPECIAL;
|
||||||
cop_state.state = COP_read1;
|
cop_state.state = COP_read1;
|
||||||
// Next cycle finally reads from new pointer
|
// Next cycle finally reads from new pointer
|
||||||
if (cop_state.strobe == 1)
|
if (cop_state.strobe == 1)
|
||||||
|
@ -7041,12 +7100,12 @@ static void cursorsprite (void)
|
||||||
sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19]];
|
sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19]];
|
||||||
}
|
}
|
||||||
sprite_0_width = sprite_width;
|
sprite_0_width = sprite_width;
|
||||||
//if (currprefs.input_tablet && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MAGIC)) {
|
if (currprefs.input_tablet && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MAGIC)) {
|
||||||
// if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive())
|
if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive ())
|
||||||
// magic_sprite_mask &= ~1;
|
magic_sprite_mask &= ~1;
|
||||||
// else
|
else
|
||||||
// magic_sprite_mask |= 1;
|
magic_sprite_mask |= 1;
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uae_u16 sprite_fetch(struct sprite *s, uaecptr pt, bool dma, int hpos, int cycle, int mode)
|
static uae_u16 sprite_fetch(struct sprite *s, uaecptr pt, bool dma, int hpos, int cycle, int mode)
|
||||||
|
@ -7492,12 +7551,26 @@ static bool framewait(void)
|
||||||
|
|
||||||
int vstb = vsynctimebase;
|
int vstb = vsynctimebase;
|
||||||
|
|
||||||
if (currprefs.m68k_speed < 0) {
|
if (currprefs.m68k_speed < 0 && !cpu_sleepmode && !currprefs.cpu_memory_cycle_exact) {
|
||||||
|
|
||||||
if (!frame_rendered && !ad->picasso_on)
|
if (!frame_rendered && !ad->picasso_on)
|
||||||
frame_rendered = render_screen(false);
|
frame_rendered = render_screen(false);
|
||||||
|
|
||||||
curr_time = read_processor_time();
|
if (currprefs.m68k_speed_throttle) {
|
||||||
|
// this delay can safely overshoot frame time by 1-2 ms, following code will compensate for it.
|
||||||
|
for (;;) {
|
||||||
|
curr_time = read_processor_time ();
|
||||||
|
if ((int)vsyncwaittime - (int)curr_time <= 0 || (int)vsyncwaittime - (int)curr_time > 2 * vsynctimebase)
|
||||||
|
break;
|
||||||
|
//rtg_vsynccheck ();
|
||||||
|
if (cpu_sleep_millis(1) < 0) {
|
||||||
|
curr_time = read_processor_time();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
curr_time = read_processor_time ();
|
||||||
|
}
|
||||||
|
|
||||||
int max;
|
int max;
|
||||||
int adjust = 0;
|
int adjust = 0;
|
||||||
|
@ -7629,8 +7702,7 @@ static void vsync_handler_pre (void)
|
||||||
if (regs.stopped) {
|
if (regs.stopped) {
|
||||||
if (cpu_last_stop_vpos >= 0) {
|
if (cpu_last_stop_vpos >= 0) {
|
||||||
cpu_stopped_lines += maxvpos - cpu_last_stop_vpos;
|
cpu_stopped_lines += maxvpos - cpu_last_stop_vpos;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
cpu_stopped_lines = 0;
|
cpu_stopped_lines = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7646,12 +7718,10 @@ static void vsync_handler_pre (void)
|
||||||
//write_log(_T("sleep\n"));
|
//write_log(_T("sleep\n"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
reset_cpu_idle();
|
reset_cpu_idle();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
reset_cpu_idle();
|
reset_cpu_idle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8151,11 +8221,11 @@ STATIC_INLINE bool is_last_line (void)
|
||||||
static void hsync_handler_post (bool onvsync)
|
static void hsync_handler_post (bool onvsync)
|
||||||
{
|
{
|
||||||
last_copper_hpos = 0;
|
last_copper_hpos = 0;
|
||||||
#ifdef CPUEMU_13
|
//#ifdef CPUEMU_13
|
||||||
if (currprefs.cpu_memory_cycle_exact || currprefs.blitter_cycle_exact) {
|
if (currprefs.cpu_memory_cycle_exact || currprefs.blitter_cycle_exact) {
|
||||||
memset (cycle_line, 0, sizeof cycle_line);
|
memset (cycle_line, 0, sizeof cycle_line);
|
||||||
}
|
}
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
// genlock active:
|
// genlock active:
|
||||||
// vertical: interlaced = toggles every other field, non-interlaced = both fields (normal)
|
// vertical: interlaced = toggles every other field, non-interlaced = both fields (normal)
|
||||||
|
@ -8322,9 +8392,7 @@ static void hsync_handler_post (bool onvsync)
|
||||||
is_syncline_end = read_processor_time() + vsynctimebase; /* far enough in future, we never wait that long */
|
is_syncline_end = read_processor_time() + vsynctimebase; /* far enough in future, we never wait that long */
|
||||||
is_syncline = -12;
|
is_syncline = -12;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
|
||||||
else {
|
|
||||||
static int linecounter;
|
static int linecounter;
|
||||||
/* end of scanline, run cpu emulation as long as we still have time */
|
/* end of scanline, run cpu emulation as long as we still have time */
|
||||||
vsyncmintime += vsynctimeperline;
|
vsyncmintime += vsynctimeperline;
|
||||||
|
@ -8351,8 +8419,8 @@ static void hsync_handler_post (bool onvsync)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (!currprefs.cpu_thread) {
|
} else if (!currprefs.cpu_thread) {
|
||||||
|
|
||||||
// the rest
|
// the rest
|
||||||
static int nextwaitvpos;
|
static int nextwaitvpos;
|
||||||
|
@ -8993,7 +9061,7 @@ writeonly:
|
||||||
v = last_custom_value1;
|
v = last_custom_value1;
|
||||||
SET_LINE_CYCLEBASED;
|
SET_LINE_CYCLEBASED;
|
||||||
if (!noput) {
|
if (!noput) {
|
||||||
int bmdma;
|
int r, c, bmdma;
|
||||||
uae_u16 l;
|
uae_u16 l;
|
||||||
|
|
||||||
if (currprefs.chipset_mask & CSMASK_AGA) {
|
if (currprefs.chipset_mask & CSMASK_AGA) {
|
||||||
|
@ -9015,15 +9083,18 @@ writeonly:
|
||||||
// - if last cycle was DMA cycle: DMA cycle data
|
// - if last cycle was DMA cycle: DMA cycle data
|
||||||
// - if last cycle was not DMA cycle: FFFF or some ANDed old data.
|
// - if last cycle was not DMA cycle: FFFF or some ANDed old data.
|
||||||
//
|
//
|
||||||
|
c = cycle_line[hpos] & CYCLE_MASK;
|
||||||
bmdma = is_bitplane_dma(hpos);
|
bmdma = is_bitplane_dma(hpos);
|
||||||
if (currprefs.chipset_mask & CSMASK_AGA) {
|
if (currprefs.chipset_mask & CSMASK_AGA) {
|
||||||
if (bmdma) {
|
if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) {
|
||||||
v = last_custom_value1;
|
v = last_custom_value1;
|
||||||
|
} else if (c == CYCLE_CPU) {
|
||||||
|
v = regs.db;
|
||||||
} else {
|
} else {
|
||||||
v = last_custom_value1 >> ((addr & 2) ? 0 : 16);
|
v = last_custom_value1 >> ((addr & 2) ? 0 : 16);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (bmdma) {
|
if (bmdma || (c > CYCLE_REFRESH && c < CYCLE_CPU)) {
|
||||||
v = last_custom_value1;
|
v = last_custom_value1;
|
||||||
} else {
|
} else {
|
||||||
// refresh checked because refresh cycles do not always
|
// refresh checked because refresh cycles do not always
|
||||||
|
@ -9042,7 +9113,7 @@ static uae_u32 custom_wget2(uaecptr addr, bool byte)
|
||||||
uae_u32 v;
|
uae_u32 v;
|
||||||
int hpos = current_hpos ();
|
int hpos = current_hpos ();
|
||||||
|
|
||||||
sync_copper_with_cpu (hpos, 1, addr);
|
sync_copper_with_cpu (hpos, 1, addr);
|
||||||
v = custom_wget_1 (hpos, addr, 0);
|
v = custom_wget_1 (hpos, addr, 0);
|
||||||
#ifdef ACTION_REPLAY
|
#ifdef ACTION_REPLAY
|
||||||
#ifdef ACTION_REPLAY_COMMON
|
#ifdef ACTION_REPLAY_COMMON
|
||||||
|
@ -9455,7 +9526,7 @@ uae_u8 *restore_custom (uae_u8 *src)
|
||||||
ddfstop = RW; /* 094 DDFSTOP */
|
ddfstop = RW; /* 094 DDFSTOP */
|
||||||
dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */
|
dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */
|
||||||
CLXCON (RW); /* 098 CLXCON */
|
CLXCON (RW); /* 098 CLXCON */
|
||||||
intena = RW; /* 09A INTENA */
|
intena = RW; /* 09A INTENA */
|
||||||
intreq = RW; /* 09C INTREQ */
|
intreq = RW; /* 09C INTREQ */
|
||||||
adkcon = RW; /* 09E ADKCON */
|
adkcon = RW; /* 09E ADKCON */
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
|
|
|
@ -241,6 +241,7 @@ extern int current_maxvpos (void);
|
||||||
extern struct chipset_refresh *get_chipset_refresh(struct uae_prefs*);
|
extern struct chipset_refresh *get_chipset_refresh(struct uae_prefs*);
|
||||||
extern void compute_framesync(void);
|
extern void compute_framesync(void);
|
||||||
//extern void getsyncregisters(uae_u16 *phsstrt, uae_u16 *phsstop, uae_u16 *pvsstrt, uae_u16 *pvsstop);
|
//extern void getsyncregisters(uae_u16 *phsstrt, uae_u16 *phsstop, uae_u16 *pvsstrt, uae_u16 *pvsstop);
|
||||||
|
int is_bitplane_dma(int hpos);
|
||||||
void custom_cpuchange(void);
|
void custom_cpuchange(void);
|
||||||
|
|
||||||
struct custom_store
|
struct custom_store
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue