syncing 2.3.0

parent 332ed3d1
......@@ -226,7 +226,7 @@ static int mungepacket (uae_u8 *packet, int len)
return ret;
}
static int getfunc (struct devstruct *dev, uae_u8 *d, int *len)
static int getfunc (struct s2devstruct *dev, uae_u8 *d, int *len)
{
int tlen;
......@@ -250,7 +250,7 @@ static int mcfilter (const uae_u8 *data)
return 1; // just allow everything
}
static void gotfunc (struct devstruct *dev, const uae_u8 *data2, int len)
static void gotfunc (struct s2devstruct *dev, const uae_u8 *data2, int len)
{
int i;
int size, insize, first;
......
......@@ -1226,23 +1226,23 @@ static void freenativescsi (void)
static void addnativescsi (void)
{
int i, j;
int devices[MAX_TOTAL_DEVICES];
int types[MAX_TOTAL_DEVICES];
struct device_info dis[MAX_TOTAL_DEVICES];
int devices[MAX_TOTAL_SCSI_DEVICES];
int types[MAX_TOTAL_SCSI_DEVICES];
struct device_info dis[MAX_TOTAL_SCSI_DEVICES];
freenativescsi ();
i = 0;
while (i < MAX_TOTAL_DEVICES) {
while (i < MAX_TOTAL_SCSI_DEVICES) {
types[i] = -1;
devices[i] = -1;
if (sys_command_open (DF_SCSI, i)) {
if (sys_command_info (DF_SCSI, i, &dis[i])) {
if (sys_command_open (i)) {
if (sys_command_info (i, &dis[i], 0)) {
devices[i] = i;
types[i] = 100 - i;
if (dis[i].type == INQ_ROMD)
types[i] = 1000 - i;
}
sys_command_close (DF_SCSI, i);
sys_command_close (i);
}
i++;
}
......
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* Arcadia emulation
*
* Copyright 2005-2007 Toni Wilen
*
*
*/
* UAE - The Un*x Amiga Emulator
*
* Arcadia emulation
*
* Copyright 2005-2007 Toni Wilen
*
*
*/
#ifdef ARCADIA
#include "sysconfig.h"
......
......@@ -45,7 +45,7 @@
#define MAX_EV ~0ul
//#define DEBUG_AUDIO
#define DEBUG_CHANNEL_MASK 2
#define DEBUG_CHANNEL_MASK 15
//#define TEST_AUDIO
#define PERIOD_MIN 4
......@@ -64,7 +64,7 @@ static bool debugchannel (int ch)
STATIC_INLINE bool usehacks (void)
{
return currprefs.cpu_model >= 68020 && !currprefs.cpu_cycle_exact;
return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0;
}
#define SINC_QUEUE_MAX_AGE 2048
......@@ -204,8 +204,10 @@ void audio_sampleripper (int mode)
rs->changed = 0;
fetch_ripperpath (path, sizeof (path));
name[0] = 0;
if (currprefs.dfxtype[0] >= 0)
_tcscpy (name, currprefs.df[0]);
if (currprefs.floppyslots[0].dfxtype >= 0)
_tcscpy (name, currprefs.floppyslots[0].df);
else if (currprefs.cdslots[0].inuse)
_tcscpy (name, currprefs.cdslots[0].name);
if (!name[0])
underline[0] = 0;
namesplit (name);
......@@ -1036,13 +1038,18 @@ static int audio_work_to_do;
static void zerostate (int nr)
{
struct audio_channel_data *cdp = audio_channel + nr;
#ifdef DEBUG_AUDIO
write_log ("%d: ZEROSTATE\n", nr);
#endif
cdp->state = 0;
cdp->evtime = MAX_EV;
cdp->intreq2 = 0;
cdp->dsr = cdp->dr = false;
cdp->dmaenstore = false;
#ifdef TEST_AUDIO
cdp->have_dat = false;
#endif
}
static void schedule_audio (void)
......@@ -1262,33 +1269,56 @@ static void audio_state_channel2 (int nr, bool perfin)
{
struct audio_channel_data *cdp = audio_channel + nr;
bool chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr));
bool old_dma = cdp->dmaenstore;
int audav = adkcon & (0x01 << nr);
int audap = adkcon & (0x10 << nr);
int napnav = (!audav && !audap) || audav;
int hpos = current_hpos ();
#ifdef DEBUG_AUDIO
if (debugchannel (nr)) {
if (cdp->dmaenstore != chan_ena) {
cdp->dmaenstore = chan_ena;
write_log ("%d:DMA=%d IRQ=%d PC=%08x\n", nr, chan_ena, isirq (nr) ? 1 : 0, M68K_GETPC);
}
cdp->dmaenstore = chan_ena;
if (currprefs.produce_sound == 0) {
zerostate (nr);
return;
}
audio_activate ();
if ((cdp->state == 2 || cdp->state == 3) && usehacks () && !chan_ena && old_dma) {
// DMA switched off, state=2/3 and "too fast CPU": kill DMA instantly
// or CPU timed DMA wait routines in common tracker players will lose notes
#ifdef DEBUG_AUDIO
write_log ("%d: INSTADMAOFF\n", nr, M68K_GETPC);
#endif
if (currprefs.produce_sound == 0) {
newsample (nr, (cdp->dat2 >> 0) & 0xff);
if (napnav)
setirq (nr, 91);
zerostate (nr);
return;
}
#ifdef DEBUG_AUDIO
if (debugchannel (nr) && old_dma != chan_ena) {
write_log ("%d:DMA=%d IRQ=%d PC=%08x\n", nr, chan_ena, isirq (nr) ? 1 : 0, M68K_GETPC);
}
#endif
switch (cdp->state)
{
case 0:
if (chan_ena) {
cdp->evtime = MAX_EV;
cdp->state = 1;
cdp->dsr = true;
cdp->dr = true;
cdp->drhpos = hpos;
cdp->wlen = cdp->len;
// too fast CPU and some tracker players: enable DMA, CPU delay, update AUDxPT with loop position
if (usehacks ()) {
// copy AUDxPT - 2 to internal latch instantly
cdp->pt = cdp->lc - 2;
cdp->dsr = false;
} else {
// normal hardware behavior: latch it after first DMA fetch comes
cdp->dsr = true;
}
#ifdef TEST_AUDIO
cdp->have_dat = false;
#endif
......@@ -1300,7 +1330,7 @@ static void audio_state_channel2 (int nr, bool perfin)
cdp->state = 2;
setirq (nr, 0);
loaddat (nr);
if (currprefs.cpu_model >= 68020 && !currprefs.cpu_cycle_exact && cdp->per < 10 * CYCLE_UNIT) {
if (usehacks () && cdp->per < 10 * CYCLE_UNIT) {
// make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled
newsample (nr, (cdp->dat2 >> 0) & 0xff);
zerostate (nr);
......@@ -1314,6 +1344,7 @@ static void audio_state_channel2 (int nr, bool perfin)
}
break;
case 1:
cdp->evtime = MAX_EV;
if (!cdp->dat_written)
return;
#ifdef TEST_AUDIO
......@@ -1322,13 +1353,14 @@ static void audio_state_channel2 (int nr, bool perfin)
cdp->have_dat = false;
cdp->losample = cdp->hisample = false;
#endif
setirq (nr, 1);
setirq (nr, 10);
setdr (nr);
if (cdp->wlen != 1)
cdp->wlen = (cdp->wlen - 1) & 0xffff;
cdp->state = 5;
break;
case 5:
cdp->evtime = MAX_EV;
if (!cdp->dat_written)
return;
#ifdef DEBUG_AUDIO
......@@ -1650,11 +1682,13 @@ void set_audio (void)
sample_prehandler = anti_prehandler;
}
audio_activate ();
if (currprefs.produce_sound == 0) {
eventtab[ev_audio].active = 0;
events_schedule ();
} else {
audio_activate ();
schedule_audio ();
events_schedule ();
}
config_changed = 1;
}
......@@ -1740,8 +1774,13 @@ void update_audio (void)
}
for (i = 0; i < 4; i++) {
if (audio_channel[i].evtime == 0)
if (audio_channel[i].evtime == 0) {
audio_state_channel (i, true);
if (audio_channel[i].evtime == 0) {
write_log ("evtime==0 sound bug channel %d\n");
audio_channel[i].evtime = MAX_EV;
}
}
}
}
end:
......@@ -1922,7 +1961,6 @@ int init_audio (void)
return init_sound ();
}
void led_filter_audio (void)
{
led_filter_on = 0;
......@@ -1930,13 +1968,53 @@ void led_filter_audio (void)
led_filter_on = 1;
}
void audio_vsync (void)
{
#if SOUNDSTUFF > 0
int max, min;
int vsync = isfullscreen () > 0 && currprefs.gfx_avsync;
static int lastdir;
if (!vsync) {
extrasamples = 0;
return;
}
min = -10 * 10;
max = vsync ? 10 * 10 : 20 * 10;
extrasamples = 0;
if (gui_data.sndbuf < min) { // +1
extrasamples = (min - gui_data.sndbuf) / 10;
lastdir = 1;
} else if (gui_data.sndbuf > max) { // -1
extrasamples = (max - gui_data.sndbuf) / 10;
} else if (gui_data.sndbuf > 1 * 50 && lastdir < 0) {
extrasamples--;
} else if (gui_data.sndbuf < -1 * 50 && lastdir > 0) {
extrasamples++;
} else {
lastdir = 0;
}
if (extrasamples > 99)
extrasamples = 99;
if (extrasamples < -99)
extrasamples = -99;
#endif
}
int audio_setup (void) { return setup_sound (); }
void audio_close (void) { close_sound (); }
void audio_pause (void) { pause_sound (); }
void audio_resume (void) { resume_sound (); }
void audio_volume (int volume) { sound_volume (volume); }
#ifdef SAVESTATE
uae_u8 *restore_audio (int i, uae_u8 *src)
uae_u8 *restore_audio (int nr, uae_u8 *src)
{
struct audio_channel_data *acd;
struct audio_channel_data *acd = audio_channel + nr;
uae_u16 p;
acd = audio_channel + i;
acd->state = restore_u8 ();
acd->vol = restore_u8 ();
acd->intreq2 = restore_u8 () ? true : false;
......@@ -1951,37 +2029,34 @@ uae_u8 *restore_audio (int i, uae_u8 *src)
acd->wlen = restore_u16 ();
p = restore_u16 ();
acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX;
p = restore_u16 ();
acd->dat = acd->dat2 = restore_u16 ();
acd->lc = restore_u32 ();
acd->pt = restore_u32 ();
acd->evtime = restore_u32 ();
last_cycles = get_cycles () - 1;
acd->dmaenstore = (dmacon & DMA_MASTER) && (dmacon & (1 << nr));
return src;
}
#endif /* SAVESTATE */
#if defined SAVESTATE || defined DEBUGGER
uae_u8 *save_audio (int i, int *len, uae_u8 *dstptr)
uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr)
{
struct audio_channel_data *acd;
struct audio_channel_data *acd = audio_channel + nr;
uae_u8 *dst, *dstbak;
uae_u16 p;
if (dstptr)
dstbak = dst = dstptr;
else
dstbak = dst = (uae_u8*)malloc (100);
acd = audio_channel + i;
save_u8 ((uae_u8)acd->state);
dstbak = dst = xmalloc (uae_u8, 100);
save_u8 (acd->state);
save_u8 (acd->vol);
save_u8 (acd->intreq2);
save_u8 ((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0));
save_u16 (acd->len);
save_u16 (acd->wlen);
p = acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT;
save_u16 (p);
save_u16 (acd->dat2);
save_u16 (acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT);
save_u16 (acd->dat);
save_u32 (acd->lc);
save_u32 (acd->pt);
save_u32 (acd->evtime);
......@@ -1989,63 +2064,3 @@ uae_u8 *save_audio (int i, int *len, uae_u8 *dstptr)
return dstbak;
}
#endif /* SAVESTATE || DEBUGGER */
void audio_vsync (void)
{
#if SOUNDSTUFF > 0
int max, min;
int vsync = isfullscreen () > 0 && currprefs.gfx_avsync;
static int lastdir;
if (!vsync) {
extrasamples = 0;
return;
}
min = -10 * 10;
max = vsync ? 10 * 10 : 20 * 10;
extrasamples = 0;
if (gui_data.sndbuf < min) { // +1
extrasamples = (min - gui_data.sndbuf) / 10;
lastdir = 1;
} else if (gui_data.sndbuf > max) { // -1
extrasamples = (max - gui_data.sndbuf) / 10;
} else if (gui_data.sndbuf > 1 * 50 && lastdir < 0) {
extrasamples--;
} else if (gui_data.sndbuf < -1 * 50 && lastdir > 0) {
extrasamples++;
} else {
lastdir = 0;
}
if (extrasamples > 99)
extrasamples = 99;
if (extrasamples < -99)
extrasamples = -99;
#endif
}
int audio_setup (void)
{
return setup_sound ();
}
void audio_close (void)
{
close_sound ();
}
void audio_pause (void)
{
pause_sound ();
}
void audio_resume (void)
{
resume_sound ();
}
void audio_volume (int volume)
{
sound_volume (volume);
}
/*
* UAE - The Un*x Amiga Emulator
*
* AutoConfig devices
*
* Copyright 1995, 1996 Bernd Schmidt
* Copyright 1996 Ed Hanway
*/
* UAE - The Un*x Amiga Emulator
*
* AutoConfig devices
*
* Copyright 1995, 1996 Bernd Schmidt
* Copyright 1996 Ed Hanway
*/
#include "sysconfig.h"
#include "sysdeps.h"
......
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* bsdsocket.library emulation machine-independent part
*
* Copyright 1997, 1998 Mathias Ortmann
*
* Library initialization code (c) Tauno Taipaleenmaki
*/
* UAE - The Un*x Amiga Emulator
*
* bsdsocket.library emulation machine-independent part
*
* Copyright 1997, 1998 Mathias Ortmann
*
* Library initialization code (c) Tauno Taipaleenmaki
*/
#include "sysconfig.h"
#include "sysdeps.h"
......@@ -34,13 +34,13 @@ struct socketbase *socketbases;
static uae_u32 SockLibBase;
#define SOCKPOOLSIZE 128
#define UNIQUE_ID (-1)
#define UNIQUE_ID (-1)
/* ObtainSocket()/ReleaseSocket() public socket pool */
struct sockd {
long sockpoolids[SOCKPOOLSIZE];
long sockpoolids[SOCKPOOLSIZE];
SOCKET_TYPE sockpoolsocks[SOCKPOOLSIZE];
uae_u32 sockpoolflags[SOCKPOOLSIZE];
uae_u32 sockpoolflags[SOCKPOOLSIZE];
};
static long curruniqid = 65536;
......@@ -48,25 +48,25 @@ static struct sockd *sockdata;
uae_u32 strncpyha (uae_u32 dst, const uae_char *src, int size)
{
uae_u32 res = dst;
uae_u32 res = dst;
if (!addr_valid ("strncpyha", dst, size))
return res;
while (size--) {
return res;
while (size--) {
put_byte (dst++, *src);
if (!*src++)
return res;
}
return res;
return res;
}
return res;
}
uae_u32 addstr (uae_u32 * dst, const TCHAR *src)
{
uae_u32 res = *dst;
int len;
uae_u32 res = *dst;
int len;
len = strlen (src) + 1;
strcpyha_safe (*dst, src);
(*dst) += len;
return res;
(*dst) += len;
return res;
}
uae_u32 addstr_ansi (uae_u32 * dst, const uae_char *src)
{
......@@ -80,83 +80,83 @@ uae_u32 addstr_ansi (uae_u32 * dst, const uae_char *src)
uae_u32 addmem (uae_u32 * dst, const uae_char *src, int len)
{
uae_u32 res = *dst;
uae_u32 res = *dst;
if (!src)
return 0;
if (!src)
return 0;
memcpyha_safe (*dst, (uae_u8*)src, len);
(*dst) += len;
(*dst) += len;
return res;
return res;
}
/* Get current task */
static uae_u32 gettask (TrapContext *context)
{
uae_u32 currtask, a1 = m68k_areg (regs, 1);
uae_u32 currtask, a1 = m68k_areg (regs, 1);
m68k_areg (regs, 1) = 0;
currtask = CallLib (context, get_long (4), -0x126); /* FindTask */
m68k_areg (regs, 1) = 0;
currtask = CallLib (context, get_long (4), -0x126); /* FindTask */
m68k_areg (regs, 1) = a1;
m68k_areg (regs, 1) = a1;
BSDTRACE (("[%s] ", get_real_address (get_long (currtask + 10))));
return currtask;
return currtask;
}
/* errno/herrno setting */
void bsdsocklib_seterrno (SB, int sb_errno)
{
sb->sb_errno = sb_errno;
if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005)
bsdsocklib_setherrno (sb, sb->sb_errno - 1000);
if (sb->errnoptr) {
sb->sb_errno = sb_errno;
if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005)
bsdsocklib_setherrno(sb,sb->sb_errno-1000);
if (sb->errnoptr) {
switch (sb->errnosize) {
case 1:
put_byte (sb->errnoptr, sb_errno);
break;
case 2:
put_word (sb->errnoptr, sb_errno);
break;
case 4:
put_long (sb->errnoptr, sb_errno);
case 1:
put_byte (sb->errnoptr, sb_errno);
break;
case 2:
put_word (sb->errnoptr, sb_errno);
break;
case 4:
put_long (sb->errnoptr, sb_errno);
}
}
}
}
void bsdsocklib_setherrno (SB, int sb_herrno)
{
sb->sb_herrno = sb_herrno;
sb->sb_herrno = sb_herrno;
if (sb->herrnoptr) {
if (sb->herrnoptr) {
switch (sb->herrnosize) {
case 1:
put_byte (sb->herrnoptr, sb_herrno);
break;
case 2:
put_word (sb->herrnoptr, sb_herrno);
break;
case 4:
put_long (sb->herrnoptr, sb_herrno);
case 1:
put_byte (sb->herrnoptr, sb_herrno);
break;
case 2:
put_word (sb->herrnoptr, sb_herrno);
break;
case 4:
put_long (sb->herrnoptr, sb_herrno);
}
}
}
}
BOOL checksd (SB, int sd)
BOOL checksd(SB, int sd)
{
int iCounter;
SOCKET s;
s = getsock (sb, sd);
s = getsock(sb,sd);
if (s != INVALID_SOCKET) {
for (iCounter = 1; iCounter <= sb->dtablesize; iCounter++) {
if (iCounter != sd) {
if (getsock (sb, iCounter) == s) {
releasesock (sb, sd);
if (iCounter != sd) {
if (getsock(sb,iCounter) == s) {
releasesock(sb,sd);
return 1;
}
}
}
}
for (iCounter = 0; iCounter < SOCKPOOLSIZE; iCounter++) {
if (s == sockdata->sockpoolsocks[iCounter])
......@@ -169,38 +169,38 @@ BOOL checksd (SB, int sd)
void setsd(SB, int sd, SOCKET_TYPE s)
{
sb->dtable[sd - 1] = s;
sb->dtable[sd - 1] = s;
}
/* Socket descriptor/opaque socket handle management */
int getsd (SB, SOCKET_TYPE s)
{
int i;
int i;
SOCKET_TYPE *dt = sb->dtable;
/* return socket descriptor if already exists */
for (i = sb->dtablesize; i--;)
if (dt[i] == s)
return i + 1;
/* create new table entry */
for (i = 0; i < sb->dtablesize; i++)
if (dt[i] == -1) {
dt[i] = s;
sb->ftable[i] = SF_BLOCKING;
return i + 1;
}
/* descriptor table full. */
bsdsocklib_seterrno (sb, 24); /* EMFILE */
/* return socket descriptor if already exists */
for (i = sb->dtablesize; i--;)
if (dt[i] == s)
return i + 1;
/* create new table entry */
for (i = 0; i < sb->dtablesize; i++)
if (dt[i] == -1) {
dt[i] = s;
sb->ftable[i] = SF_BLOCKING;
return i + 1;
}
/* descriptor table full. */
bsdsocklib_seterrno (sb, 24); /* EMFILE */
return -1;
return -1;
}
SOCKET_TYPE getsock (SB, int sd)
{
if ((unsigned int) (sd - 1) >= (unsigned int) sb->dtablesize) {
if ((unsigned int) (sd - 1) >= (unsigned int) sb->dtablesize) {
BSDTRACE (("Invalid Socket Descriptor (%d, %d)\n", sd - 1, sb->dtablesize));
bsdsocklib_seterrno (sb, 38); /* ENOTSOCK */
bsdsocklib_seterrno (sb, 38); /* ENOTSOCK */
return -1;
}
if (sb->dtable[sd - 1] == INVALID_SOCKET) {
......@@ -226,14 +226,14 @@ SOCKET_TYPE getsock (SB, int sd)
}
nsb = sb1->next;
}
}
return sb->dtable[sd - 1];
}
return sb->dtable[sd - 1];
}
void releasesock (SB, int sd)
{
if ((unsigned int) (sd - 1) < (unsigned int) sb->dtablesize)
sb->dtable[sd - 1] = -1;
if ((unsigned int) (sd - 1) < (unsigned int) sb->dtablesize)
sb->dtable[sd - 1] = -1;
}
/* Signal queue */
......
/*
* UAE - The Un*x Amiga Emulator
*
* CD32 FMV cartridge
*
* Copyright 2008 Toni Wilen
*
*/
* UAE - The Un*x Amiga Emulator
*
* CD32 FMV cartridge
*
* Copyright 2008-2010 Toni Wilen
*
*/
#include "sysconfig.h"
#include "sysdeps.h"
......@@ -19,35 +19,48 @@
#include "cd32_fmv.h"
#include "uae.h"
//#define FMV_DEBUG
#define FMV_DEBUG 1
/*
0x200000 - 0x23FFFF ROM
0x240000 io/status (single word register?)
0x2500xx L64111 audio decoder (word registers)
0x2700xx CL450 video decoder (word registers)
0x280000 - 0x2FFFFF RAM
*/
#define IO_BASE 0x040000
#define L64111_BASE 0x050000
#define CL450_BASE 0x070000
#define VRAM_BASE 0x080000
#define BANK_MASK 0x0F0000
#define FMV_BASE 0x40000
#define AUDIO_BASE 0x50000
#define VIDEO_BASE 0x70000
#define VIDEO_RAM 0x80000
#define IO_IRQ_L641111 0x4000
#define IO_IRQ_CL450 0x8000
// L64111 registers (from datasheet)
#define A_DATA 0
#define A_CONTROL1 2
#define A_CONTROL2 4
#define A_CONTROL3 6
#define A_INT1 8
#define A_INT2 10
#define A_TCR 12
#define A_TORH 14
#define A_TORL 16
#define A_PARAM1 18
#define A_PARAM2 20
#define A_PARAM3 22
#define A_PRESENT1 24
#define A_PRESENT2 26
#define A_PRESENT3 28
#define A_PRESENT4 30
#define A_PRESENT5 32
#define A_FIFO 34
#define A_CB_STATUS 36
#define A_CB_WRITE 38
#define A_CB_READ 40
#define A_DATA 0 //0
#define A_CONTROL1 1 //2
#define A_CONTROL2 2 //4
#define A_CONTROL3 3 //6
#define A_INT1 4 //8
#define A_INT2 5 //10
#define A_TCR 6 //12
#define A_TORH 7 //14
#define A_TORL 8 //16
#define A_PARAM1 9 //18
#define A_PARAM2 10 //20
#define A_PARAM3 11 //22
#define A_PRESENT1 12 //24
#define A_PRESENT2 13 //26
#define A_PRESENT3 14 //28
#define A_PRESENT4 15 //30
#define A_PRESENT5 16 //32
#define A_FIFO 17 //34
#define A_CB_STATUS 18 //36
#define A_CB_WRITE 19 //38
#define A_CB_READ 20 //40
static int fmv_mask;
static uae_u8 *rom;
......@@ -55,51 +68,191 @@ static int rom_size = 262144;
static uaecptr fmv_start = 0x00200000;
static int fmv_size = 1048576;
static uae_u8 fmv_bget2 (uaecptr addr)
static uae_u16 l64111regs[32];
static uae_u16 l64111intmask1, l64111intmask2, l64111intstatus1, l64111intstatus2;
static uae_u16 io_reg;
static int isdebug (uaecptr addr)
{
#ifdef FMV_DEBUG
write_log ("fmv_bget2 %08X PC=%8X\n", addr, M68K_GETPC);
#if FMV_DEBUG > 2
if (M68K_GETPC >= 0x200100)
return 1;
return 0;
#endif
#if (FMV_DEBUG == 2)
if (M68K_GETPC >= 0x200100 && (addr & fmv_mask) >= VRAM_BASE)
return 1;
return 0;
#endif
if (addr >= rom_size && addr < 0x80000) {
write_log ("fmv_bget2 %08X PC=%8X\n", addr, M68K_GETPC);
return 0;
}
static uae_u8 io_bget (uaecptr addr)
{
addr &= 0xffff;
write_log ("FMV: IO byte read access %08x!\n", addr);
return 0;
}
static uae_u16 io_wget (uaecptr addr)
{
addr &= 0xffff;
if (addr != 0)
return 0;
return io_reg;
}
static void io_bput (uaecptr addr, uae_u8 v)
{
addr &= 0xffff;
write_log ("FMV: IO byte write access %08x!\n", addr);
}
static void io_wput (uaecptr addr, uae_u16 v)
{
addr &= 0xffff;
if (addr != 0)
return;
write_log ("FMV: IO=%04x\n", v);
io_reg = v;
}
static uae_u8 l64111_bget (uaecptr addr)
{
write_log ("FMV: L64111 byte read access %08x!\n", addr);
return 0;
}
static void l64111_bput (uaecptr addr, uae_u8 v)
{
write_log ("FMV: L64111 byte write access %08x!\n", addr);
}
static uae_u16 l64111_wget (uaecptr addr)
{
addr >>= 1;
addr &= 31;
#if FMV_DEBUG > 0
write_log ("FMV: L64111 read reg %d -> %04x\n", addr, l64111regs[addr]);
#endif
if (addr == 4)
return l64111intstatus1;
if (addr == 5)
return l64111intstatus1;
return l64111regs[addr];
}
static void l64111_wput (uaecptr addr, uae_u16 v)
{
addr >>= 1;
addr &= 31;
#if FMV_DEBUG > 0
write_log ("FMV: L64111 write reg %d = %04x\n", addr, v);
#endif
if (addr == 4) {
l64111intmask1 = v;
return;
}
if (addr == 5) {
l64111intmask2 = v;
return;
}
l64111regs[addr] = v;
}
static uae_u8 cl450_bget (uaecptr addr)
{
addr &= 0xff;
write_log ("FMV: CL450 byte read access %08x!\n", addr);
return 0;
}
static uae_u16 cl450_wget (uaecptr addr)
{
addr &= 0xff;
addr >>= 1;
write_log ("FMV: CL450 read reg %d\n", addr);
return 0;
}
static void cl450_bput (uaecptr addr, uae_u8 v)
{
addr &= 0xff;
write_log ("FMV: CL450 byte write access %08x!\n", addr);
}
static void cl450_wput (uaecptr addr, uae_u16 v)
{
addr &= 0xff;
write_log ("FMV: CL450 write reg %d = %04x\n", addr, v);
}
static uae_u8 romram_bget (uaecptr addr)
{
#ifdef FMV_DEBUG
if (isdebug (addr))
write_log ("romram_bget %08X PC=%08X\n", addr, M68K_GETPC);
#endif
if (addr >= IO_BASE && addr < VRAM_BASE)
return 0;
return rom[addr];
}
static void fmv_bput2 (uaecptr addr, uae_u8 v)
static uae_u16 romram_wget (uaecptr addr)
{
if (addr >= rom_size && addr < 0x80000) {
write_log ("fmv_bput2 %08X=%02X PC=%8X\n", addr, v & 0xff, M68K_GETPC);
#ifdef FMV_DEBUG
if (isdebug (addr))
write_log ("romram_wget %08X PC=%08X\n", addr, M68K_GETPC);
#endif
if (addr >= IO_BASE && addr < VRAM_BASE)
return 0;
return (rom[addr] << 8) | (rom[addr + 1] << 0);
}
static void ram_bput (uaecptr addr, uae_u8 v)
{
if (addr < VRAM_BASE)
return;
rom[addr] = v;
if (isdebug (addr)) {
write_log ("ram_bput %08X=%02X PC=%08X\n", addr, v & 0xff, M68K_GETPC);
}
}
static void ram_wput (uaecptr addr, uae_u16 v)
{
if (addr < VRAM_BASE)
return;
rom[addr + 0] = v >> 8;
rom[addr + 1] = v >> 0;
if (isdebug (addr)) {
write_log ("ram_wput %08X=%04X PC=%08X\n", addr, v & 0xffff, M68K_GETPC);
}
}
static uae_u32 REGPARAM2 fmv_lget (uaecptr addr)
static uae_u32 REGPARAM2 fmv_wget (uaecptr addr)
{
uae_u32 v;
#ifdef JIT
special_mem |= S_READ;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
v = (fmv_bget2 (addr) << 24) | (fmv_bget2 (addr + 1) << 16) |
(fmv_bget2 (addr + 2) << 8) | (fmv_bget2 (addr + 3));
int mask = addr & BANK_MASK;
if (mask == L64111_BASE)
v = l64111_wget (addr);
else if (mask == CL450_BASE)
v = cl450_wget (addr);
else if (mask == IO_BASE)
v = io_wget (addr);
else
v = romram_wget (addr);
#ifdef FMV_DEBUG
write_log ("fmv_lget %08X=%08X PC=%08X\n", addr, v, M68K_GETPC);
if (isdebug (addr))
write_log ("fmv_wget %08X=%04X PC=%08X\n", addr, v, M68K_GETPC);
#endif
return v;
}
static uae_u32 REGPARAM2 fmv_wget (uaecptr addr)
static uae_u32 REGPARAM2 fmv_lget (uaecptr addr)
{
uae_u32 v;
#ifdef JIT
special_mem |= S_READ;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
v = (fmv_bget2 (addr) << 8) | fmv_bget2 (addr + 1);
v = (fmv_wget (addr) << 16) | (fmv_wget (addr + 2) << 0);
#ifdef FMV_DEBUG
write_log ("fmv_wget %08X=%04X PC=%08X\n", addr, v, M68K_GETPC);
if (isdebug (addr))
write_log ("fmv_lget %08X=%08X PC=%08X\n", addr, v, M68K_GETPC);
#endif
return v;
}
......@@ -107,55 +260,64 @@ static uae_u32 REGPARAM2 fmv_wget (uaecptr addr)
static uae_u32 REGPARAM2 fmv_bget (uaecptr addr)
{
uae_u32 v;
#ifdef JIT
special_mem |= S_READ;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
v = fmv_bget2 (addr);
int mask = addr & BANK_MASK;
if (mask == L64111_BASE)
v = l64111_bget (addr);
else if (mask == CL450_BASE)
v = cl450_bget (addr);
else if (mask == IO_BASE)
v = io_bget (addr);
else
v = romram_bget (addr);
return v;
}
static void REGPARAM2 fmv_lput (uaecptr addr, uae_u32 l)
static void REGPARAM2 fmv_wput (uaecptr addr, uae_u32 w)
{
#ifdef JIT
special_mem |= S_WRITE;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
#ifdef FMV_DEBUG
write_log ("fmv_lput %08X=%08X PC=%08X\n", addr, l, M68K_GETPC);
if (isdebug (addr))
write_log ("fmv_wput %04X=%04X PC=%08X\n", addr, w & 65535, M68K_GETPC);
#endif
fmv_bput2 (addr, l >> 24);
fmv_bput2 (addr + 1, l >> 16);
fmv_bput2 (addr + 2, l >> 8);
fmv_bput2 (addr + 3, l);
int mask = addr & BANK_MASK;
if (mask == L64111_BASE)
l64111_wput (addr, w);
else if (mask == CL450_BASE)
cl450_wput (addr, w);
else if (mask == IO_BASE)
io_wput (addr, w);
else
ram_wput (addr, w);
}
static void REGPARAM2 fmv_wput (uaecptr addr, uae_u32 w)
static void REGPARAM2 fmv_lput (uaecptr addr, uae_u32 w)
{
#ifdef JIT
special_mem |= S_WRITE;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
#ifdef FMV_DEBUG
write_log ("fmv_wput %04X=%04X PC=%08X\n", addr, w & 65535, M68K_GETPC);
if (isdebug (addr))
write_log ("fmv_lput %08X=%08X PC=%08X\n", addr, w, M68K_GETPC);
#endif
fmv_bput2 (addr, w >> 8);
fmv_bput2 (addr + 1, w);
fmv_wput (addr + 0, w >> 16);
fmv_wput (addr + 2, w >> 0);
}
//extern addrbank fmv_bank;
extern addrbank fmv_bank;
static void REGPARAM2 fmv_bput (uaecptr addr, uae_u32 b)
static void REGPARAM2 fmv_bput (uaecptr addr, uae_u32 w)
{
#ifdef JIT
special_mem |= S_WRITE;
#endif
addr -= fmv_start & fmv_mask;
addr &= fmv_mask;
fmv_bput2 (addr, b);
int mask = addr & BANK_MASK;
if (mask == L64111_BASE)
l64111_bput (addr, w);
else if (mask == CL450_BASE)
cl450_bput (addr, w);
else if (mask == IO_BASE)
io_bput (addr, w);
else
ram_bput (addr, w);
}
static uae_u32 REGPARAM2 fmv_wgeti (uaecptr addr)
......@@ -208,7 +370,7 @@ static uae_u8 *REGPARAM2 fmv_xlate (uaecptr addr)
return rom + addr;
}
static addrbank fmv_bank = {
addrbank fmv_bank = {
fmv_lget, fmv_wget, fmv_bget,
fmv_lput, fmv_wput, fmv_bput,
fmv_xlate, fmv_check, NULL, "CD32 FMV module",
......@@ -240,6 +402,5 @@ void cd32_fmv_init (uaecptr start)
}
fmv_mask = fmv_size - 1;
fmv_bank.baseaddr = rom;
rom[0x282] = 0;
map_banks (&fmv_bank, start >> 16, fmv_size >> 16, 0);
}
This diff is collapsed.
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* CIA chip support
*
* Copyright 1995 Bernd Schmidt, Alessandro Bissacco
* Copyright 1996, 1997 Stefan Reinauer, Christian Schmitt
*/
* UAE - The Un*x Amiga Emulator
*
* CIA chip support
*
* Copyright 1995 Bernd Schmidt, Alessandro Bissacco
* Copyright 1996, 1997 Stefan Reinauer, Christian Schmitt
*/
#include "sysconfig.h"
......@@ -27,14 +27,15 @@
#include "zfile.h"
#include "ar.h"
#ifdef PARALLEL_PORT
# include "parallel.h"
#include "parallel.h"
#endif
#ifdef CD32
# include "akiko.h"
#include "akiko.h"
#include "cdtv.h"
#endif
#include "debug.h"
#ifdef ARCADIA
# include "arcadia.h"
#include "arcadia.h"
#endif
#include "keyboard.h"
#include "uae.h"
......@@ -51,7 +52,7 @@
/* FIXME: Add configure support to enable this. */
#ifdef HAVE_GETTIMEOFDAY
# define TOD_HACK
#define TOD_HACK
#endif
#define DIV10 (10 * CYCLE_UNIT / 2) /* Yes, a bad identifier. */
......@@ -1218,7 +1219,7 @@ void CIA_reset (void)
DISK_select (ciabprb);
}
#ifdef CD32
if (savestate_state != STATE_RESTORE) {
if (savestate_state != STATE_RESTORE && savestate_state != STATE_DORESTORE) {
akiko_reset ();
if (!akiko_init ())
currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = 0;
......
This diff is collapsed.
......@@ -42,7 +42,7 @@ void consolehook_config (struct uae_prefs *p)
p->fastmem_size = 0x00800000;
p->bogomem_size = 0;
p->nr_floppies = 1;
p->dfxtype[1] = DRV_NONE;
p->floppyslots[1].dfxtype = DRV_NONE;
p->floppy_speed = 0;
p->start_gui = 0;
p->gfx_size_win.width = 320;
......
......@@ -2504,6 +2504,7 @@ static void finish_decisions (void)
decide_line (hpos);
decide_fetch (hpos);
record_color_change2 (hsyncstartpos, 0xffff, 0);
if (thisline_decision.plfleft != -1 && thisline_decision.plflinelen == -1) {
if (fetch_state != fetch_not_started) {
write_log ("fetch_state=%d plfleft=%d,len=%d,vpos=%d,hpos=%d\n",
......@@ -2747,7 +2748,7 @@ void init_hz (void)
hzc = 1;
if (beamcon0 != new_beamcon0) {
write_log ("BEAMCON0 %04x -> %04x\n", beamcon0, new_beamcon0);
vpos_count = 0;
vpos_count = vpos_count_prev = 0;
}
beamcon0 = new_beamcon0;
isntsc = (beamcon0 & 0x20) ? 0 : 1;
......@@ -2774,7 +2775,7 @@ void init_hz (void)
if (vpos_count < 10)
vpos_count = 10;
vblank_hz = (15600 + vpos_count - 1) / vpos_count;
maxvpos_nom = vpos_count;
maxvpos_nom = vpos_count - (lof_current ? 1 : 0);
reset_drawing ();
}
if (beamcon0 & 0x80) {
......@@ -2816,7 +2817,7 @@ void init_hz (void)
else
hsyncstartpos = maxhpos + hbstrt;
} else {
hsyncstartpos = maxhpos_short + 7;
hsyncstartpos = maxhpos_short + 13;
}
eventtab[ev_hsync].oldcycles = get_cycles ();
eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME;
......@@ -3120,7 +3121,8 @@ STATIC_INLINE uae_u16 VHPOSR (void)
static int test_copper_dangerous (unsigned int address)
{
if ((address & 0x1fe) < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) {
int addr = address & 0x01fe;
if (addr < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) {
cop_state.state = COP_stop;
copper_enabled_thisline = 0;
unset_special (SPCFLAG_COPPER);
......@@ -4250,7 +4252,7 @@ static int custom_wput_copper (int hpos, uaecptr addr, uae_u32 value, int noget)
int v;
#ifdef DEBUG
debug_wputpeekdma (0xdff000 + addr, value);
value = debug_wputpeekdma (0xdff000 + addr, value);
#endif
copper_access = 1;
v = custom_wput_1 (hpos, addr, value, noget);
......@@ -5110,6 +5112,7 @@ static void vsync_handler (void)
picasso_handle_vsync ();
#endif
audio_vsync ();
blkdev_vsync ();
if (quit_program > 0) {
/* prevent possible infinite loop at wait_cycles().. */
......@@ -5378,6 +5381,8 @@ static void events_dmal (int hp)
}
event2_newevent2 (hp, dmal_hpos + ((dmal & 2) ? 1 : 0), dmal_func);
dmal &= ~3;
} else if (currprefs.cachesize) {
dmal_func2 (0);
} else {
event2_newevent2 (hp, 17, dmal_func2);
}
......@@ -5642,9 +5647,9 @@ static void hsync_handler (void)
}
while (input_recording < 0 && inprec_pstart (INPREC_DISKINSERT)) {
int drv = inprec_pu8 ();
inprec_pstr (currprefs.df[drv]);
_tcscpy (changed_prefs.df[drv], currprefs.df[drv]);
disk_insert_force (drv, currprefs.df[drv]);
inprec_pstr (currprefs.floppyslots[drv].df);
_tcscpy (changed_prefs.floppyslots[drv].df, currprefs.floppyslots[drv].df);
disk_insert_force (drv, currprefs.floppyslots[drv].df);
inprec_pend ();
}
#endif
......@@ -5830,6 +5835,7 @@ void customreset (int hardreset)
unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE));
vpos = 0;
vpos_count = vpos_count_prev = 0;
inputdevice_reset ();
timehack_alive = 0;
......@@ -5848,7 +5854,6 @@ void customreset (int hardreset)
diwstate = DIW_waiting_start;
set_cycles (0);
vpos_count = vpos_count_prev = 0;
dmal = 0;
init_hz ();
vpos_lpen = -1;
......
This diff is collapsed.
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* Emulates simple protection dongles
*
* Copyright 2009 Toni Wilen
*/
* UAE - The Un*x Amiga Emulator
*
* Emulates simple protection dongles
*
* Copyright 2009 Toni Wilen
*/
#include "sysconfig.h"
......
......@@ -212,7 +212,7 @@ static int bplres;
static int plf1pri, plf2pri, bplxor;
static uae_u32 plf_sprite_mask;
static int sbasecol[2] = { 16, 16 };
static int brdsprt, brdblank, brdblank_changed;
static int brdsprt, brdblank, brdblank_changed, hposendblank;
bool picasso_requested_on;
bool picasso_on;
......@@ -674,12 +674,21 @@ STATIC_INLINE uae_u32 merge_2pixel32 (uae_u32 p1, uae_u32 p2)
return v;
}
STATIC_INLINE xcolnr getbgc (void)
{
#if 0
if (hposendblank)
return xcolors[0xf00];
#endif
return (brdblank || hposendblank) ? 0 : colors_for_drawing.acolors[0];
}
static void fill_line_16 (uae_u8 *buf, unsigned int start, unsigned int stop)
{
uae_u16 *b = (uae_u16 *)buf;
unsigned int i;
unsigned int rem = 0;
xcolnr col = brdblank ? 0 : colors_for_drawing.acolors[0];
xcolnr col = getbgc ();
if (((long)&b[start]) & 1)
b[start++] = (uae_u16) col;
if (start >= stop)
......@@ -700,7 +709,7 @@ static void fill_line_32 (uae_u8 *buf, unsigned int start, unsigned int stop)
{
uae_u32 *b = (uae_u32 *)buf;
unsigned int i;
xcolnr col = brdblank ? 0 : colors_for_drawing.acolors[0];
xcolnr col = getbgc ();
for (i = start; i < stop; i++)
b[i] = col;
}
......@@ -714,7 +723,7 @@ static void pfield_do_fill_line (int start, int stop)
}
}
STATIC_INLINE void fill_line_2 (int startpos, int len, int blank)
STATIC_INLINE void fill_line2 (int startpos, int len)
{
int shift;
int nints, nrem;
......@@ -732,16 +741,16 @@ STATIC_INLINE void fill_line_2 (int startpos, int len, int blank)
nrem = nints & 7;
nints &= ~7;
start = (int *)(((uae_u8*)xlinebuffer) + (startpos << shift));
val = blank ? 0 : colors_for_drawing.acolors[0];
val = getbgc ();
for (; nints > 0; nints -= 8, start += 8) {
*start = val;
*(start + 1) = val;
*(start + 2) = val;
*(start + 3) = val;
*(start + 4) = val;
*(start + 5) = val;
*(start + 6) = val;
*(start + 7) = val;
*(start+1) = val;
*(start+2) = val;
*(start+3) = val;
*(start+4) = val;
*(start+5) = val;
*(start+6) = val;
*(start+7) = val;
}
switch (nrem) {
......@@ -762,15 +771,15 @@ STATIC_INLINE void fill_line_2 (int startpos, int len, int blank)
}
}
STATIC_INLINE void fill_line (void)
static void fill_line (void)
{
int endpos = visible_left_border + gfxvidinfo.width;
int endposh = coord_hw_to_window_x (hsyncstartpos * 2);
if (endpos < endposh) {
fill_line_2 (visible_left_border, gfxvidinfo.width, brdblank);
int hs = coord_hw_to_window_x (hsyncstartpos * 2);
if (hs > visible_left_border + gfxvidinfo.width || hposendblank) {
fill_line2 (visible_left_border, gfxvidinfo.width);
} else {
fill_line_2 (visible_left_border, endposh - visible_left_border, brdblank);
fill_line_2 (endposh, gfxvidinfo.width - endposh, 1);
fill_line2 (visible_left_border, hs);
hposendblank = 1;
fill_line2 (visible_left_border + hs, gfxvidinfo.width - hs);
}
}
......@@ -1850,8 +1859,12 @@ static bool isham (uae_u16 bplcon0)
return 0;
}
static void pfield_expand_dp_bplcon2 (int regno, int v)
static void pfield_expand_dp_bplconx (int regno, int v)
{
if (regno == 0xffff) {
hposendblank = 1;
return;
}
regno -= 0x1000;
switch (regno)
{
......@@ -1907,8 +1920,6 @@ STATIC_INLINE void do_color_changes (line_draw_func worker_border, line_draw_fun
int i;
int lastpos = visible_left_border;
int endpos = visible_left_border + gfxvidinfo.width;
int diff = 1 << lores_shift;
int endposh = coord_hw_to_window_x (hsyncstartpos * 2);
for (i = dip_for_drawing->first_color_change; i <= dip_for_drawing->last_color_change; i++) {
int regno = curr_color_changes[i].regno;
......@@ -1927,17 +1938,7 @@ STATIC_INLINE void do_color_changes (line_draw_func worker_border, line_draw_fun
if (nextpos_in_range > lastpos) {
if (lastpos < playfield_start) {
int t = nextpos_in_range <= playfield_start ? nextpos_in_range : playfield_start;
if (t == endpos) {
if (lastpos < endposh)
(*worker_border) (lastpos, endposh);
// start of hsync, blank the rest of display
int blank = brdblank;
brdblank = 1;
(*worker_border) (endposh, endpos);
brdblank = blank;
} else {
(*worker_border) (lastpos, t);
}
(*worker_border) (lastpos, t);
lastpos = t;
}
}
......@@ -1949,23 +1950,13 @@ STATIC_INLINE void do_color_changes (line_draw_func worker_border, line_draw_fun
}
}
if (nextpos_in_range > lastpos) {
if (lastpos >= playfield_end) {
if (nextpos_in_range > endposh) {
(*worker_border) (lastpos, endposh);
// start of hsync, blank the rest of display
int blank = brdblank;
brdblank = 1;
(*worker_border) (endposh, nextpos_in_range);
brdblank = blank;
} else {
(*worker_border) (lastpos, nextpos_in_range);
}
}
if (lastpos >= playfield_end)
(*worker_border) (lastpos, nextpos_in_range);
lastpos = nextpos_in_range;
}
if (i != dip_for_drawing->last_color_change) {
if (regno >= 0x1000) {
pfield_expand_dp_bplcon2 (regno, value);
pfield_expand_dp_bplconx (regno, value);
} else {
color_reg_set (&colors_for_drawing, regno, value);
colors_for_drawing.acolors[regno] = getxcolor (value);
......@@ -1975,7 +1966,6 @@ STATIC_INLINE void do_color_changes (line_draw_func worker_border, line_draw_fun
break;
}
}
enum double_how {
dh_buf,
dh_line,
......@@ -2159,11 +2149,11 @@ static void pfield_draw_line (int lineno, int gfx_ypos, int follow_ypos)
} else {
xcolnr tmp = colors_for_drawing.acolors[0];
colors_for_drawing.acolors[0] = getxcolor (0);
int tmp = hposendblank;
hposendblank = 1;
fill_line ();
do_flush_line (gfx_ypos);
colors_for_drawing.acolors[0] = tmp;
hposendblank = tmp;
}
}
......@@ -2749,22 +2739,24 @@ void finish_drawing_frame (void)
if (where2 < 0)
continue;
hposendblank = 0;
pfield_draw_line (line, where2, amiga2aspect_line_map[i1 + 1]);
}
/* clear possible old garbage at the bottom if emulated area become smaller */
for (i = last_max_ypos; i < gfxvidinfo.height; i++) {
int i1 = i + min_ypos_for_screen;
int line = i + thisframe_y_adjust_real;
int where2 = amiga2aspect_line_map[i1];
xcolnr tmp;
if (where2 >= gfxvidinfo.height)
break;
if (where2 < 0)
continue;
tmp = colors_for_drawing.acolors[0];
colors_for_drawing.acolors[0] = getxcolor (0);
hposendblank = i >= last_max_ypos + 16;
xlinebuffer = gfxvidinfo.linemem;
if (xlinebuffer == 0)
xlinebuffer = row_map[where2];
......@@ -2772,7 +2764,6 @@ void finish_drawing_frame (void)
fill_line ();
linestate[line] = LINE_UNDECIDED;
do_flush_line (where2);
colors_for_drawing.acolors[0] = tmp;
}
if (currprefs.leds_on_screen) {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -1229,7 +1229,7 @@ static void allocate_expamem (void)
if (allocated_z3chipmem) {
z3chipmem = mapped_malloc (allocated_z3chipmem, "z3_chip");
if (z3chipmem == 0) {
write_log ("Out of memory for 32 bit fake chip memory.\n");
write_log ("Out of memory for 32 bit chip memory.\n");
allocated_z3chipmem = 0;
}
}
......@@ -1503,7 +1503,7 @@ void expamem_reset (void)
card_map[cardno++] = expamem_map_clear;
}
if (cardno == 0)
if (cardno == 0 || savestate_state)
expamem_init_clear_zero ();
else
(*card_init[0]) ();
......
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* Gayle (and motherboard resources) memory bank
*
* (c) 2006 - 2008 Toni Wilen
*/
* UAE - The Un*x Amiga Emulator
*
* Gayle (and motherboard resources) memory bank
*
* (c) 2006 - 2008 Toni Wilen
*/
#ifdef GAYLE
#define GAYLE_LOG 0
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
* UAE - The Un*x Amiga Emulator
*
* Sound emulation stuff
*
* Copyright 1995, 1996, 1997 Bernd Schmidt
*/
/*
* UAE - The Un*x Amiga Emulator
*
* Sound emulation stuff
*
* Copyright 1995, 1996, 1997 Bernd Schmidt
*/
#define PERIOD_MAX ULONG_MAX
......
This diff is collapsed.
......@@ -6,6 +6,7 @@ extern addrbank dmac_bank;
extern void cdtv_init (void);
extern void cdtv_free (void);
extern void CDTV_hsync_handler(void);
extern void cdtv_check_banks (void);
extern void cdtv_entergui (void);
extern void cdtv_exitgui (void);
......@@ -26,5 +27,7 @@ extern void rethink_cdtv (void);
extern void cdtv_scsi_int (void);
extern void cdtv_scsi_clear_int (void);
extern bool cdtv_front_panel (int);
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment