static int blinea_shift;
static uae_u16 blinea, blineb;
static int blitline, blitfc, blitfill, blitife, blitsing, blitdesc;
+static int blitline_started;
static int blitonedot, blitsign, blitlinepixel;
static int blit_add;
static int blit_modadda, blit_modaddb, blit_modaddc, blit_modaddd;
blitdesc = bltcon1 & 2;
blt_info.blitbshift = bltcon1 >> 12;
blt_info.blitdownbshift = 16 - blt_info.blitbshift;
+ if ((bltcon1 & 1) && !blitline_started) {
+ write_log (_T("BLITTER: linedraw enabled after starting normal blit! %08x\n"), M68K_GETPC);
+ return;
+ }
}
if (con & 1) {
blitfill = !!(bltcon1 & 0x18);
// disable line draw if bltcon0 is written while it is active
- if (!savestate_state && bltstate != BLT_done && bltstate != BLT_init && blitline) {
+ if (!savestate_state && bltstate != BLT_done && bltstate != BLT_init && blitline && blitline_started) {
blitline = 0;
bltstate = BLT_done;
blit_interrupt = 1;
- write_log (_T("BLITTER: register modification during linedraw!\n"));
+ write_log (_T("BLITTER: register modification during linedraw! %08x\n"), M68K_GETPC);
}
if (blitline) {
preva = 0;
prevb = 0;
blit_frozen = 0;
+ blitline_started = bltcon1 & 1;
blit_bltset (1 | 2);
blit_modset ();
bplpt[nr] += 2 << fm;
bplptx[nr] += 2 << fm;
- if (hpos == 0xe2 && !(beamcon0 & 0x80)) {
+ if (hpos >= 0xe1 && !(beamcon0 & 0x80)) {
static int warned = 30;
if (warned > 0) {
write_log (_T("WARNING: BPL fetch at hpos 0x%02X!\n"), hpos);
static void VPOSW (uae_u16 v)
{
+ int oldvpos = vpos;
#if 0
if (M68K_GETPC < 0xf00000 || 1)
write_log (_T("VPOSW %04X PC=%08x\n"), v, M68K_GETPC);
if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS))
v &= 1;
vpos |= v << 8;
+ if (vpos < oldvpos)
+ vpos = oldvpos;
}
static void VHPOSW (uae_u16 v)
{
+ int oldvpos = vpos;
#if 0
if (M68K_GETPC < 0xf00000 || 1)
write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC);
v >>= 8; // lets ignore hpos for now
vpos &= 0xff00;
vpos |= v;
+ if (vpos < oldvpos) {
+ vpos = oldvpos;
+ } else if (vpos < minfirstline && oldvpos < minfirstline) {
+ vpos = oldvpos;
+ }
}
static uae_u16 VHPOSR (void)
gfxboard_vsync_handler ();
#endif
- if ((beamcon0 & (0x20 | 0x80)) != (new_beamcon0 & (0x20 | 0x80)) || (vpos_count > 0 && abs (vpos_count - vpos_count_diff) > 1)) {
+ if ((beamcon0 & (0x20 | 0x80)) != (new_beamcon0 & (0x20 | 0x80))) {
+ init_hz ();
+ } else if (vpos_count > 0 && abs (vpos_count - vpos_count_diff) > 1) {
init_hz ();
} else if (interlace_changed || changed_chipset_refresh () || lof_changed) {
compute_framesync ();
#endif
x_do_cycles_post (CYCLE_UNIT, v);
+
+ regs.chipset_latch_rw = regs.chipset_latch_read = v;
return v;
}
if (currprefs.cpu_model == 68020)
x_do_cycles_post (CYCLE_UNIT / 2, v);
+ regs.chipset_latch_rw = regs.chipset_latch_read = v;
return v;
}
x_do_cycles_post (CYCLE_UNIT, v);
+ regs.chipset_latch_rw = regs.chipset_latch_write = v;
}
void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v)
if (currprefs.cpu_model == 68020)
x_do_cycles_post (CYCLE_UNIT / 2, v);
+
+ regs.chipset_latch_rw = regs.chipset_latch_write = v;
}
void do_cycles_ce (unsigned long cycles)
static int islongimm (struct instr *curi)
{
- return (curi->size == sz_long && (curi->smode == Dreg || curi->smode == imm));
+ return (curi->size == sz_long && (curi->smode == Dreg || curi->smode == imm || curi->smode == Areg));
}
if (curi->dmode == Dreg) {
if (curi->size == sz_long) {
c += 2;
- if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg)
+ if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg || curi->smode == Areg)
c += 2;
}
}
if (curi->dmode == Dreg) {
if (curi->size == sz_long) {
c += 2;
- if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg)
+ if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg || curi->smode == Areg)
c += 2;
}
}
int prefetch_done = 0, flags;
int dualprefetch = curi->dmode == absl && (curi->smode != Dreg && curi->smode != Areg && curi->smode != imm);
genamode (curi, curi->smode, "srcreg", curi->size, "src", 1, 0, GF_MOVE);
- flags = 1 | (dualprefetch ? GF_NOREFILL : 0);
- genamode (curi, curi->dmode, "dstreg", curi->size, "dst", 2, 0, flags | GF_MOVE);
+ flags = GF_MOVE | GF_APDI;
+ //if (curi->size == sz_long && (curi->smode == Dreg || curi->smode == Areg))
+ // flags &= ~GF_APDI;
+ flags |= dualprefetch ? GF_NOREFILL : 0;
+ genamode (curi, curi->dmode, "dstreg", curi->size, "dst", 2, 0, flags);
if (curi->mnemo == i_MOVEA && curi->size == sz_word)
printf ("\tsrc = (uae_s32)(uae_s16)src;\n");
if (curi->dmode == Apdi) {
printf ("\t} else {\n");
printf ("\t\tuae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src;\n");
printf ("\t\tuae_u32 rem = (uae_u32)dst %% (uae_u32)(uae_u16)src;\n");
- fill_prefetch_next ();
if (using_ce) {
start_brace ();
printf ("\t\tint cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src));\n");
addcycles000_3 ("\t\t");
}
+ fill_prefetch_next ();
/* The N flag appears to be set each time there is an overflow.
* Weird. but 68020 only sets N when dst is negative.. */
printf ("\t\tif (newv > 0xffff) {\n");
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
printf ("\tCLEAR_CZNV ();\n");
- fill_prefetch_next ();
if (using_ce) {
start_brace ();
printf ("\t\tint cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src));\n");
addcycles000_3 ("\t\t");
}
+ fill_prefetch_next ();
printf ("\tif (dst == 0x80000000 && src == -1) {\n");
printf ("\t\tSET_VFLG (1);\n");
printf ("\t\tSET_NFLG (1);\n");
#define cardmem_start_addr 0x00E00000
#define kickmem_start_addr 0x00F80000
+#define ROM_SIZE_512 524288
+#define ROM_SIZE_256 262144
+
extern bool ersatzkickfile;
extern bool cloanto_rom, kickstart_rom;
extern uae_u16 kickstart_version;
uae_u16 irc, ir;
uae_u32 spcflags;
+ uae_u32 last_prefetch;
+ uae_u32 chipset_latch_rw;
+ uae_u32 chipset_latch_read;
+ uae_u32 chipset_latch_write;
uaecptr usp, isp, msp;
uae_u16 sr;
static uae_u32 dummy_get (uaecptr addr, int size)
{
- uae_u32 v;
- if (currprefs.cpu_model >= 68020)
- return NONEXISTINGDATA;
- v = (regs.irc << 16) | regs.irc;
+ uae_u32 v = NONEXISTINGDATA;
+
+ if (currprefs.cpu_model >= 68040)
+ return v;
+ if (!currprefs.cpu_compatible)
+ return v;
+ if (currprefs.address_space_24)
+ addr &= 0x00ffffff;
+ if (addr >= 0x10000000)
+ return v;
+ /* fixme: emulate correct hardware behavior */
+ if (munge24 (m68k_getpc () & 0xFFF80000) == 0xF80000)
+ return v;
if (size == 4) {
- ;
+ v = (regs.irc << 16) | regs.irc;
} else if (size == 2) {
- v &= 0xffff;
+ v = regs.irc & 0xffff;
} else {
+ v = regs.irc;
v = (addr & 1) ? (v & 0xff) : ((v >> 8) & 0xff);
}
#if 0
protect_roms (false);
if (mode == 0) {
a1000_kickstart_mode = 0;
- memcpy (kickmem_bank.baseaddr, kickmem_bank.baseaddr + 262144, 262144);
- kickstart_version = (kickmem_bank.baseaddr[262144 + 12] << 8) | kickmem_bank.baseaddr[262144 + 13];
+ memcpy (kickmem_bank.baseaddr, kickmem_bank.baseaddr + ROM_SIZE_256, ROM_SIZE_256);
+ kickstart_version = (kickmem_bank.baseaddr[ROM_SIZE_256 + 12] << 8) | kickmem_bank.baseaddr[ROM_SIZE_256 + 13];
} else {
a1000_kickstart_mode = 1;
- memcpy (kickmem_bank.baseaddr, a1000_bootrom, 262144);
+ memcpy (kickmem_bank.baseaddr, a1000_bootrom, ROM_SIZE_256);
kickstart_version = 0;
}
if (kickstart_version == 0xffff)
m = (uae_u32 *)(kickmem_bank.baseaddr + addr);
do_put_mem_long (m, b);
#if 0
- if (addr == 524288-4) {
+ if (addr == ROM_SIZE_512-4) {
rom_write_enabled = false;
write_log (_T("ROM write disabled\n"));
}
custmem2_lget, custmem2_wget, ABFLAG_RAM
};
-#define fkickmem_size 524288
+#define fkickmem_size ROM_SIZE_512
static int a3000_f0;
void a3000_fakekick (int map)
{
zfile_fseek (f, 512, SEEK_SET);
kickdisk = 1;
#if 0
- } else if (size >= 524288 && !memcmp (buffer, "AMIG", 4)) {
+ } else if (size >= ROM_SIZE_512 && !memcmp (buffer, "AMIG", 4)) {
/* ReKick */
zfile_fseek (f, oldpos + 0x6c, SEEK_SET);
cr = 2;
i = zfile_fread (mem, 1, size, f);
- if (kickdisk && i > 262144)
- i = 262144;
+ if (kickdisk && i > ROM_SIZE_256)
+ i = ROM_SIZE_256;
#if 0
- if (i >= 262144 && (i != 262144 && i != 524288 && i != 524288 * 2 && i != 524288 * 4)) {
+ if (i >= ROM_SIZE_256 && (i != ROM_SIZE_256 && i != ROM_SIZE_512 && i != ROM_SIZE_512 * 2 && i != ROM_SIZE_512 * 4)) {
notify_user (NUMSG_KSROMREADERROR);
return 0;
}
}
if (currprefs.cs_a1000ram) {
int off = 0;
- a1000_bootrom = xcalloc (uae_u8, 262144);
- while (off + i < 262144) {
+ a1000_bootrom = xcalloc (uae_u8, ROM_SIZE_256);
+ while (off + i < ROM_SIZE_256) {
memcpy (a1000_bootrom + off, kickmem_bank.baseaddr, i);
off += i;
}
memset (kickmem_bank.baseaddr, 0, kickmem_bank.allocated);
a1000_handle_kickstart (1);
dochecksum = 0;
- i = 524288;
+ i = ROM_SIZE_512;
}
- for (j = 0; j < 256 && i >= 262144; j++) {
+ for (j = 0; j < 256 && i >= ROM_SIZE_256; j++) {
if (!memcmp (mem + j, kickstring, strlen (kickstring) + 1))
break;
}
- if (j == 256 || i < 262144)
+ if (j == 256 || i < ROM_SIZE_256)
dochecksum = 0;
if (dochecksum)
kickstart_checksum (mem, size);
}
zfile_fseek (f, 0, SEEK_END);
size = zfile_ftell (f);
- extendedkickmem_bank.allocated = 524288;
+ extendedkickmem_bank.allocated = ROM_SIZE_512;
off = 0;
if (type == 0) {
if (currprefs.cs_cd32cd) {
int i, j, patched = 0;
uae_char *residents[] = { "NCR scsi.device", 0 };
// "scsi.device", "carddisk.device", "card.resource" };
- uaecptr base = size == 524288 ? 0xf80000 : 0xfc0000;
+ uaecptr base = size == ROM_SIZE_512 ? 0xf80000 : 0xfc0000;
if (currprefs.cs_mbdmac == 2)
residents[0] = NULL;
static void patch_kick (void)
{
int patched = 0;
- if (kickmem_bank.allocated >= 524288 && currprefs.kickshifter)
+ if (kickmem_bank.allocated >= ROM_SIZE_512 && currprefs.kickshifter)
patched += patch_shapeshifter (kickmem_bank.baseaddr);
patched += patch_residents (kickmem_bank.baseaddr, kickmem_bank.allocated);
if (extendedkickmem_bank.baseaddr) {
f = zfile_gunzip (f);
if (!f)
return false;
- kickmem_bank.mask = 0x80000 - 1;
- kickmem_bank.allocated = 0x80000;
- extendedkickmem_bank.allocated = 0x80000;
+
+ extendedkickmem_bank.allocated = ROM_SIZE_512;
+ extendedkickmem_bank.mask = ROM_SIZE_512 - 1;
extendedkickmem_type = EXTENDED_ROM_KS;
extendedkickmem_bank.baseaddr = mapped_malloc (extendedkickmem_bank.allocated, _T("rom_e0"));
- read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated, 0, 1);
- extendedkickmem_bank.mask = extendedkickmem_bank.allocated - 1;
- read_kickstart (f, extendedkickmem_bank.baseaddr, 0x80000, 1, 0);
+ read_kickstart (f, extendedkickmem_bank.baseaddr, ROM_SIZE_512, 0, 1);
+
+ kickmem_bank.allocated = ROM_SIZE_512;
+ kickmem_bank.mask = ROM_SIZE_512 - 1;
+ read_kickstart (f, kickmem_bank.baseaddr, ROM_SIZE_512, 1, 0);
+
zfile_fclose (f);
seriallog = -1;
return true;
if (f != NULL) {
int filesize, size, maxsize;
- int kspos = 524288;
+ int kspos = ROM_SIZE_512;
int extpos = 0;
- maxsize = 524288;
+ maxsize = ROM_SIZE_512;
zfile_fseek (f, 0, SEEK_END);
filesize = zfile_ftell (f);
zfile_fseek (f, 0, SEEK_SET);
if (filesize == 1760 * 512) {
- filesize = 262144;
- maxsize = 262144;
+ filesize = ROM_SIZE_256;
+ maxsize = ROM_SIZE_256;
}
- if (filesize == 524288 + 8) {
+ if (filesize == ROM_SIZE_512 + 8) {
/* GVP 0xf0 kickstart */
zfile_fseek (f, 8, SEEK_SET);
}
- if (filesize >= 524288 * 2) {
+ if (filesize >= ROM_SIZE_512 * 2) {
struct romdata *rd = getromdatabyzfile(f);
zfile_fseek (f, kspos, SEEK_SET);
}
- if (filesize >= 524288 * 4) {
- kspos = 524288 * 3;
+ if (filesize >= ROM_SIZE_512 * 4) {
+ kspos = ROM_SIZE_512 * 3;
extpos = 0;
zfile_fseek (f, kspos, SEEK_SET);
}
goto err;
kickmem_bank.mask = size - 1;
kickmem_bank.allocated = size;
- if (filesize >= 524288 * 2 && !extendedkickmem_type) {
- extendedkickmem_bank.allocated = 0x80000;
+ if (filesize >= ROM_SIZE_512 * 2 && !extendedkickmem_type) {
+ extendedkickmem_bank.allocated = ROM_SIZE_512;
if (currprefs.cs_cdtvcd || currprefs.cs_cdtvram) {
extendedkickmem_type = EXTENDED_ROM_CDTV;
extendedkickmem_bank.allocated *= 2;
read_kickstart (f, extendedkickmem_bank.baseaddr, extendedkickmem_bank.allocated, 0, 1);
extendedkickmem_bank.mask = extendedkickmem_bank.allocated - 1;
}
- if (filesize > 524288 * 2) {
- extendedkickmem2_bank.allocated = 524288 * 2;
+ if (filesize > ROM_SIZE_512 * 2) {
+ extendedkickmem2_bank.allocated = ROM_SIZE_512 * 2;
extendedkickmem2_bank.baseaddr = mapped_malloc (extendedkickmem2_bank.allocated, _T("rom_a8"));
- zfile_fseek (f, extpos + 524288, SEEK_SET);
- read_kickstart (f, extendedkickmem2_bank.baseaddr, 524288, 0, 1);
- zfile_fseek (f, extpos + 524288 * 2, SEEK_SET);
- read_kickstart (f, extendedkickmem2_bank.baseaddr + 524288, 524288, 0, 1);
+ zfile_fseek (f, extpos + ROM_SIZE_512, SEEK_SET);
+ read_kickstart (f, extendedkickmem2_bank.baseaddr, ROM_SIZE_512, 0, 1);
+ zfile_fseek (f, extpos + ROM_SIZE_512 * 2, SEEK_SET);
+ read_kickstart (f, extendedkickmem2_bank.baseaddr + ROM_SIZE_512, ROM_SIZE_512, 0, 1);
extendedkickmem2_bank.mask = extendedkickmem2_bank.allocated - 1;
extendedkickmem2_bank.start = 0xa80000;
}
extendedkickmem_type = 0;
load_extendedkickstart (currprefs.romextfile, 0);
load_extendedkickstart (currprefs.romextfile2, EXTENDED_ROM_CDTV);
- kickmem_bank.mask = 524288 - 1;
+ kickmem_bank.mask = ROM_SIZE_512 - 1;
if (!load_kickstart ()) {
if (_tcslen (currprefs.romfile) > 0) {
write_log (_T("Failed to open '%s'\n"), currprefs.romfile);
break;
#ifdef CDTV
case EXTENDED_ROM_CDTV:
- map_banks (&extendedkickmem_bank, 0xF0, extendedkickmem_bank.allocated == 2 * 524288 ? 16 : 8, 0);
+ map_banks (&extendedkickmem_bank, 0xF0, extendedkickmem_bank.allocated == 2 * ROM_SIZE_512 ? 16 : 8, 0);
break;
#endif
#ifdef CD32
custmem1_bank.baseaddr = NULL;
custmem2_bank.baseaddr = NULL;
- kickmem_bank.baseaddr = mapped_malloc (0x80000, _T("kick"));
- memset (kickmem_bank.baseaddr, 0, 0x80000);
+ kickmem_bank.baseaddr = mapped_malloc (ROM_SIZE_512, _T("kick"));
+ memset (kickmem_bank.baseaddr, 0, ROM_SIZE_512);
_tcscpy (currprefs.romfile, _T("<none>"));
currprefs.romextfile[0] = 0;
}
if (i == mem_size / 2 - 4) {
mem_size /= 2;
- mem_start += 262144;
+ mem_start += ROM_SIZE_256;
}
version = longget (mem_start + 12); /* version+revision */
_stprintf (tmpname, _T("Kickstart %d.%d"), wordget (mem_start + 12), wordget (mem_start + 14));
for (lookup1 = lookuptab; lookup1->mnemo != dp->mnemo; lookup1++);
dp = table68k + regs.ir;
for (lookup2 = lookuptab; lookup2->mnemo != dp->mnemo; lookup2++);
- console_out_f (_T("Prefetch %04x (%s) %04x (%s)\n"), regs.irc, lookup1->name, regs.ir, lookup2->name);
+ console_out_f (_T("Prefetch %04x (%s) %04x (%s) Chip latch %08X\n"), regs.irc, lookup1->name, regs.ir, lookup2->name, regs.chipset_latch_rw);
}
if (pc != 0xffffffff) {
restore_u32 ();
}
}
+ if (flags & 0x10000000) {
+ regs.chipset_latch_rw = restore_u32 ();
+ regs.chipset_latch_read = restore_u32 ();
+ regs.chipset_latch_write = restore_u32 ();
+ }
write_log (_T("CPU: %d%s%03d, PC=%08X\n"),
model / 1000, flags & 1 ? _T("EC") : _T(""), model % 1000, regs.pc);
dstbak = dst = xmalloc (uae_u8, 1000);
model = currprefs.cpu_model;
save_u32 (model); /* MODEL */
- save_u32 (0x80000000 | 0x40000000 | 0x20000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */
+ save_u32 (0x80000000 | 0x40000000 | 0x20000000 | 0x10000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */
for (i = 0;i < 15; i++)
save_u32 (regs.regs[i]); /* D0-D7 A0-A6 */
save_u32 (m68k_getpc ()); /* PC */
save_u32 (regs.ce020memcycles);
save_u32 (0);
}
+ save_u32 (regs.chipset_latch_rw);
+ save_u32 (regs.chipset_latch_read);
+ save_u32 (regs.chipset_latch_write);
*len = dst - dstbak;
return dstbak;
}
avioutput_fps = (int)(vblank_hz + 0.5);
if (!avioutput_fps)
avioutput_fps = ispal () ? 50 : 60;
- if (avioutput_originalsize) {
+ if (avioutput_originalsize || WIN32GFX_IsPicassoScreen ()) {
int pitch;
if (!WIN32GFX_IsPicassoScreen ()) {
getfilterbuffer (&avioutput_width, &avioutput_height, &pitch, &avioutput_bits);
uae_u8 *src, *mem;
uae_u8 *dst = ae->lpVideo;
int spitch, dpitch;
+ int maxw, maxh;
mem = NULL;
dpitch = ((avioutput_width * avioutput_bits + 31) & ~31) / 8;
- if (original) {
- if (!WIN32GFX_IsPicassoScreen ())
+ if (original || WIN32GFX_IsPicassoScreen ()) {
+ if (!WIN32GFX_IsPicassoScreen ()) {
src = getfilterbuffer (&w, &h, &spitch, &d);
- else
+ maxw = gfxvidinfo.outbuffer->outwidth;
+ maxh = gfxvidinfo.outbuffer->outheight;
+ } else {
src = mem = getrtgbuffer (&w, &h, &spitch, &d, NULL);
+ maxw = w;
+ maxh = h;
+ }
} else {
spitch = gfxvidinfo.outbuffer->rowbytes;
src = bufmem_ptr;
+ maxw = gfxvidinfo.outbuffer->outwidth;
+ maxh = gfxvidinfo.outbuffer->outheight;
}
if (!src)
return 0;
dst += dpitch * avioutput_height;
- for (y = 0; y < (gfxvidinfo.outbuffer->outheight > avioutput_height ? avioutput_height : gfxvidinfo.outbuffer->outheight); y++) {
+ for (y = 0; y < (maxh > avioutput_height ? avioutput_height : maxh); y++) {
uae_u8 *d;
dst -= dpitch;
d = dst;
- for (x = 0; x < (gfxvidinfo.outbuffer->outwidth > avioutput_width ? avioutput_width : gfxvidinfo.outbuffer->outwidth); x++) {
+ for (x = 0; x < (maxw > avioutput_width ? avioutput_width : maxw); x++) {
if (avioutput_bits == 8) {
*d++ = src[x];
} else if (avioutput_bits == 16) {
dorestart ();
waitqueuefull ();
ae = allocavientry_video ();
- if (avioutput_originalsize) {
+ if (avioutput_originalsize || WIN32GFX_IsPicassoScreen ()) {
v = getFromBuffer (ae, 1);
} else {
#if defined (GFXFILTER)
EnterCriticalSection (&AVIOutput_CriticalSection);
ae = getavientry ();
LeaveCriticalSection (&AVIOutput_CriticalSection);
- if (ae == NULL)
+ if (ae == NULL) {
+ write_log (_T("AVIOutput worker thread: out of entries!?\n"));
break;
+ }
write_comm_pipe_u32 (&queuefull, 0, 1);
if (!avioutput_failed) {
if (ae->lpAudio)
static void dumphidend (void)
{
write_log (_T("\n"));
- }
+}
+
+#define MAX_RAW_KEYBOARD 0
static bool initialize_rawinput (void)
{
else if (type == RIM_TYPEHID)
rnum_hid++;
}
+ if (MAX_RAW_KEYBOARD > 0 && rnum_kb > MAX_RAW_KEYBOARD)
+ rnum_kb = MAX_RAW_KEYBOARD;
+
for (int rawcnt = 0; rawcnt < gotnum; rawcnt++) {
HANDLE h = ridl[rawcnt].hDevice;
if (type == RIM_TYPEHID && !rawinput_enabled_hid)
continue;
}
- if (type == RIM_TYPEKEYBOARD)
+ if (type == RIM_TYPEKEYBOARD) {
+ if (num_keyboard >= rnum_kb)
+ continue;
did = di_keyboard;
- else if (type == RIM_TYPEMOUSE)
+ } else if (type == RIM_TYPEMOUSE) {
did = di_mouse;
- else if (type == RIM_TYPEHID) {
+ } else if (type == RIM_TYPEHID) {
if (!rawinput_enabled_hid)
continue;
did = di_joystick;
did->axles++;
addplusminus (did, 3);
}
- did->priority = -1;
+ if (num_mouse == 1)
+ did->priority = -1;
+ else
+ did->priority = -2;
}
} else if (type == RIM_TYPEKEYBOARD) {
PRID_DEVICE_INFO_KEYBOARD rdik = &rdi->keyboard;
rdik->dwType, rdik->dwSubType, rdik->dwKeyboardMode,
rdik->dwNumberOfFunctionKeys, rdik->dwNumberOfIndicators, rdik->dwNumberOfKeysTotal);
addrkblabels (did);
+ if (num_keyboard == 1)
+ did->priority = -1;
+ else
+ did->priority = -2;
} else {
bool ok = false;
if (hhid != INVALID_HANDLE_VALUE && HidD_GetPreparsedData (hhid, &did->hidpreparseddata)) {
did->rawinput = NULL;
did->connection = DIDC_RAW;
did->sortname = my_strdup (_T("NULLKEYBOARD"));
- did->priority = -2;
+ did->priority = -3;
did->configname = my_strdup (_T("NULLKEYBOARD"));
addrkblabels (did);
}
#define LANG_DLL 1
#if WINUAEPUBLICBETA
-#define WINUAEBETA _T("11")
+#define WINUAEBETA _T("12")
#else
#define WINUAEBETA _T("")
#endif
-#define WINUAEDATE MAKEBD(2013, 11, 2)
+#define WINUAEDATE MAKEBD(2013, 11, 10)
#define WINUAEEXTRA _T("")
//#define WINUAEEXTRA _T("AmiKit Preview")
//#define WINUAEEXTRA _T("Amiga Forever Edition")
d->style |= DS_MODALFRAME;
d->style &= ~WS_THICKFRAME;
}
+ d->style |= WS_MINIMIZEBOX;
d2 = (DLGTEMPLATEEX_END*)ns->resource;
p = (BYTE*)d + sizeof (DLGTEMPLATEEX);
- restore only single input target to default.
+Beta 12:
+
+- AROS rom memory mapping fixed (b1).
+- RTG mode video recording image size was accidentally restricted to native chipset size.
+- Ignore VPOSW writes if it would move vertical position backwards or if vpos is changed during vertical
+ blanking and new value is also inside vblank period. (Prevents strange behavior if program tries to
+ do weird things)
+- Added minimize button to GUI window.
+- 68000 CE ADDA.x/SUBA.x Rn,An was 2 cycles too fast.
+- DIVS/DIVU prefetch is after division operation, not before like with MULS/MULU.
+- Adjusted data returned when accessing non-existing memory.
+- New Wix based installer test version included. Remove old installation first.
+
Beta 11:
- 68000/010 CPU core merge accidentally removed 68000 CLR to memory and Scc to memory dummy read
<Product Id="18550701-62DA-4256-B2EA-5F7E8FA564CE" Name="WinUAE" Language="1033" Version="2.7.0.0" Manufacturer="Arabuusimiehet" UpgradeCode="88C6D045-E416-4AEA-9EE9-0B7A53EE0F16">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
+ <?define SRCDIST="$(var.winuae.ProjectDir)/../../../distribution/"?>
+
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<Icon Id="ICON" SourceFile="$(var.winuae.ProjectDir)/../resources/winuae.ico"/>
<Property Id="ARPPRODUCTICON" Value="ICON" />
- <UIRef Id="WixUI_FeatureTree" />
+ <UIRef Id="WixUI_FeatureTree_NL" />
<UIRef Id="WixUI_ErrorProgressText" />
<Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONROOTDIRECTORY" />
- <WixVariable Id="WixUIBannerBmp" Value="$(var.winuae.ProjectDir)/../graphics/amiga_header.bmp" />
- <WixVariable Id="WixUIDialogBmp" Value="$(var.winuae.ProjectDir)/../graphics/amiga_welcome.bmp" />
+ <WixVariable Id="WixUIBannerBmp" Value="$(var.winuae.ProjectDir)/../graphics/amiga_header_2013.bmp" />
+ <WixVariable Id="WixUIDialogBmp" Value="$(var.winuae.ProjectDir)/../graphics/amiga_welcome_2013.bmp" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="APPLICATIONROOTDIRECTORY" Name="WinUAE">
- <Directory Id="CONFIGURATIONS" Name="Configurations"/>
- <Directory Id="DOCS" Name="Docs"/>
+ <Directory Id="CONFIGURATIONS" Name="Configurations">
+ <Directory Id="CONFIGURATIONSHOST" Name="Host"/>
+ </Directory>
<Directory Id="AMIGAPROGRAMS" Name="Amiga Programs"/>
+ <Directory Id="DOCS" Name="Docs"/>
</Directory>
</Directory>
</Directory>
</DirectoryRef>
<DirectoryRef Id="AMIGAPROGRAMS">
- <Component Id="AdditionalFiles" Guid="D6062FDF-E323-43B6-A506-344FEDD06081">
- <File Source="$(var.winuae.ProjectDir)/../winuaechangelog.txt" KeyPath="yes"/>
+ <Component Id="AdditionalFiles1" Guid="D6062FDF-E323-43B6-A506-344FEDD06081">
+ <File Source="$(var.SRCDIST)/Amiga Programs/amigaprog.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles2" Guid="E1E4A638-16B9-4EA3-8F35-01CDD020B5DE">
+ <File Source="$(var.SRCDIST)/Amiga Programs/winuaeenforcer" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles3" Guid="FA668233-1BAA-4C51-887D-3C1369530625">
+ <File Source="$(var.SRCDIST)/Amiga Programs/winuaeenforcer.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles4" Guid="EE72540B-BE4C-4B89-A4C6-4B2BED789968">
+ <File Source="$(var.SRCDIST)/Amiga Programs/winuaeclip" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles5" Guid="5D219AB7-3738-40B9-A764-EE699E8EF7BB">
+ <File Source="$(var.SRCDIST)/Amiga Programs/winuaeclip.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles6" Guid="F0337F4B-3A62-40DB-830F-4862F89D2330">
+ <File Source="$(var.SRCDIST)/Amiga Programs/winuaeclip.info" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles7" Guid="CA71C0B6-D3A0-4E31-85C1-97A4309998FA">
+ <File Source="$(var.SRCDIST)/Amiga Programs/uae-configuration" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles8" Guid="B88BB19C-0897-44C4-8FEA-A9F796C3E780">
+ <File Source="$(var.SRCDIST)/Amiga Programs/uaectrl" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles9" Guid="EC34EF4B-4A83-4F03-99FC-24BD09A3089F">
+ <File Source="$(var.SRCDIST)/Amiga Programs/uae-control.info" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles10" Guid="257DD4B7-B0A7-4B86-9E00-446741453312">
+ <File Source="$(var.SRCDIST)/Amiga Programs/uae-control" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles11" Guid="4954F247-20E8-43FD-9C67-5195F4128F6F">
+ <File Source="$(var.SRCDIST)/Amiga Programs/uae_rcli" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles12" Guid="3169B1E2-D009-42E5-A4A1-2777019B1995">
+ <File Source="$(var.SRCDIST)/Amiga Programs/transdisk" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles13" Guid="66C7D080-B50D-41F7-BDBD-4A5EE2F70D2F">
+ <File Source="$(var.SRCDIST)/Amiga Programs/transrom" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles14" Guid="92BD1DA6-AB73-4DAA-97EF-617AF09C647B">
+ <File Source="$(var.SRCDIST)/Amiga Programs/rtg.library" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles15" Guid="41DBB732-7ACB-4B5A-ADBA-0B48A08D5DC3">
+ <File Source="$(var.SRCDIST)/Amiga Programs/p96refresh" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles16" Guid="5187795E-4423-4FE6-8C5D-8B306CD7EAB7">
+ <File Source="$(var.SRCDIST)/Amiga Programs/german_KeyMap_new.zip" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles17" Guid="3B979B6D-BEBE-487B-9CD3-CAF9211221A1">
+ <File Source="$(var.SRCDIST)/Amiga Programs/UAE_German" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles18" Guid="643C76B3-E146-4431-9CF8-7D6A1130588C">
+ <File Source="$(var.SRCDIST)/Amiga Programs/UAE_German.info" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles19" Guid="4564B037-8446-40FE-AEEC-493D93DCE0EA">
+ <File Source="$(var.SRCDIST)/Amiga Programs/ahidriver.zip" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles20" Guid="A3DA1CD6-9090-4BD0-8967-99561277FB0C">
+ <File Source="$(var.SRCDIST)/Amiga Programs/timehack" KeyPath="yes"/>
+ </Component>
+ <Component Id="AdditionalFiles21" Guid="867BE54B-E842-4FB8-8306-72A09F1C8735">
+ <File Source="$(var.SRCDIST)/Amiga Programs/sources.zip" KeyPath="yes"/>
</Component>
</DirectoryRef>
- <DirectoryRef Id="CONFIGURATIONS">
- <Component Id="ConfigFiles" Guid="F529ED5F-DA94-4871-8616-0207DCAA9859">
- <File Source="$(var.winuae.ProjectDir)/../asm.cmd" KeyPath="yes"/>
+ <DirectoryRef Id="CONFIGURATIONSHOST">
+ <Component Id="ConfigFiles1" Guid="F529ED5F-DA94-4871-8616-0207DCAA9859">
+ <File Source="$(var.SRCDIST)/Configurations/Host/Windowed.uae" KeyPath="yes"/>
+ </Component>
+ <Component Id="ConfigFiles2" Guid="A9FD208E-BFA4-4136-8BCA-5B473EA08519">
+ <File Source="$(var.SRCDIST)/Configurations/Host/Fullscreen (800x600).uae" KeyPath="yes"/>
+ </Component>
+ <Component Id="ConfigFiles3" Guid="D966C10C-AA37-4DC1-A96A-2EACE1CBBB69">
+ <File Source="$(var.SRCDIST)/Configurations/Host/Fullscreen PAL VSync.uae" KeyPath="yes"/>
+ </Component>
+ <Component Id="ConfigFiles4" Guid="E5DD85B1-29E5-4B1C-99E9-C284C940A4F7">
+ <File Source="$(var.SRCDIST)/Configurations/Host/FullwindowD3D.uae" KeyPath="yes"/>
+ </Component>
+ </DirectoryRef>
+
+ <DirectoryRef Id="DOCS">
+ <Component Id="Docs1" Guid="1C0D979E-5C00-45BD-8C08-A78AA7E58530">
+ <File Source="$(var.SRCDIST)/Docs/Readme.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="Docs2" Guid="ABE181C5-547C-4D9D-A486-DCB17F72C1B0">
+ <File Source="$(var.SRCDIST)/Docs/winuaechangelog.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="Docs3" Guid="D27F0463-C878-46C8-8D02-028D14BDD4A0">
+ <File Source="$(var.SRCDIST)/Docs/History_old.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="Docs4" Guid="82556236-9A44-4894-84BB-4066820E1B35">
+ <File Source="$(var.SRCDIST)/Docs/README.compemu.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="Docs5" Guid="E7AE8546-62E0-4537-989C-02E10C62E06E">
+ <File Source="$(var.SRCDIST)/Docs/README.JIT.txt" KeyPath="yes"/>
+ </Component>
+ <Component Id="Docs6" Guid="33C9D310-7722-48B4-845B-48933023D647">
+ <File Source="$(var.SRCDIST)/Docs/README.JIT-tuning.txt" KeyPath="yes"/>
</Component>
</DirectoryRef>
<ComponentRef Id="RegistryEntries" />
</Feature>
- <Feature Id="ConfigFiles" Title="Configuration files" Description="Example host configuration files" Level="1000" AllowAdvertise="no">
- <ComponentRef Id="ConfigFiles" />
+ <Feature Id="Docs" Title="Documentation" Description="Read me and information files" Level="1" AllowAdvertise="no">
+ <ComponentRef Id="Docs1" />
+ <ComponentRef Id="Docs2" />
+ <ComponentRef Id="Docs3" />
+ <ComponentRef Id="Docs4" />
+ <ComponentRef Id="Docs5" />
+ <ComponentRef Id="Docs6" />
</Feature>
- <Feature Id="AdditionalFiles" Title="Amiga files" Description="Miscellaneous utilities" Level="1001" AllowAdvertise="no">
- <ComponentRef Id="AdditionalFiles" />
+ <Feature Id="ConfigFiles" Title="Configuration files" Description="Example host configuration files" Level="1" AllowAdvertise="no">
+ <ComponentRef Id="ConfigFiles1" />
+ <ComponentRef Id="ConfigFiles2" />
+ <ComponentRef Id="ConfigFiles3" />
+ <ComponentRef Id="ConfigFiles4" />
</Feature>
+ <Feature Id="AdditionalFiles" Title="Amiga files" Description="Miscellaneous Amiga utilities" Level="1" AllowAdvertise="no">
+ <ComponentRef Id="AdditionalFiles1" />
+ <ComponentRef Id="AdditionalFiles2" />
+ <ComponentRef Id="AdditionalFiles3" />
+ <ComponentRef Id="AdditionalFiles4" />
+ <ComponentRef Id="AdditionalFiles5" />
+ <ComponentRef Id="AdditionalFiles6" />
+ <ComponentRef Id="AdditionalFiles7" />
+ <ComponentRef Id="AdditionalFiles8" />
+ <ComponentRef Id="AdditionalFiles9" />
+ <ComponentRef Id="AdditionalFiles10" />
+ <ComponentRef Id="AdditionalFiles11" />
+ <ComponentRef Id="AdditionalFiles12" />
+ <ComponentRef Id="AdditionalFiles13" />
+ <ComponentRef Id="AdditionalFiles14" />
+ <ComponentRef Id="AdditionalFiles15" />
+ <ComponentRef Id="AdditionalFiles16" />
+ <ComponentRef Id="AdditionalFiles17" />
+ <ComponentRef Id="AdditionalFiles18" />
+ <ComponentRef Id="AdditionalFiles19" />
+ <ComponentRef Id="AdditionalFiles20" />
+ <ComponentRef Id="AdditionalFiles21" />
+ </Feature>
+
+
+
</Product>
</Wix>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ <copyright file="WixUI_FeatureTree.wxs" company="Outercurve Foundation">
+ Copyright (c) 2004, Outercurve Foundation.
+ This software is released under Microsoft Reciprocal License (MS-RL).
+ The license and further copyright text can be found in the file
+ LICENSE.TXT at the root directory of the distribution.
+ </copyright>
+-->
+
+<!--
+First-time install dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_LicenseAgreementDlg
+ - WixUI_CustomizeDlg
+ - WixUI_VerifyReadyDlg
+ - WixUI_DiskCostDlg
+
+Maintenance dialog sequence:
+ - WixUI_MaintenanceWelcomeDlg
+ - WixUI_MaintenanceTypeDlg
+ - WixUI_CustomizeDlg
+ - WixUI_VerifyReadyDlg
+
+Patch dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_VerifyReadyDlg
+-->
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI Id="WixUI_FeatureTree_NL">
+ <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+ <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+ <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+
+ <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+ <Property Id="WixUI_Mode" Value="FeatureTree" />
+
+ <DialogRef Id="ErrorDlg" />
+ <DialogRef Id="FatalError" />
+ <DialogRef Id="FilesInUse" />
+ <DialogRef Id="MsiRMFilesInUse" />
+ <DialogRef Id="PrepareDlg" />
+ <DialogRef Id="ProgressDlg" />
+ <DialogRef Id="ResumeDlg" />
+ <DialogRef Id="UserExit" />
+
+ <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">NOT Installed</Publish>
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+
+ <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">LicenseAccepted = "1"</Publish>
+
+ <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish>
+ <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">NOT Installed</Publish>
+ <Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>
+
+ <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+
+ <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+ </UI>
+
+ <UIRef Id="WixUI_Common" />
+ </Fragment>
+</Wix>
\ No newline at end of file
</PropertyGroup>
<ItemGroup>
<Compile Include="Product.wxs" />
+ <Compile Include="WixUI_FeatureTree_NL.wxs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\winuae_msvc11\winuae_msvc.vcxproj">